From ff4b1affcdb881b809056f1b77413a03a8c61cd0 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Mon, 27 Oct 2014 18:46:50 +0100 Subject: [PATCH] initial dev version --- boot/device.hints_wrap | 93 + boot/loader.conf_wrap | 11 + cf/conf/trigger_initial_wizard | 0 conf.default/config.xml | 751 + etc/ascii-art/pfsense-logo-small.txt | 5 + etc/bogons | 10 + etc/bogonsv6 | 0 etc/ca_countries | 237 + etc/ddb.conf | 3 + etc/devd.conf | 74 + etc/dh-parameters.1024 | 5 + etc/dh-parameters.2048 | 8 + etc/dh-parameters.4096 | 13 + etc/disktab | 204 + etc/ecl.php | 174 + etc/fbtab | 4 + etc/gettytab | 235 + etc/group | 31 + etc/host.conf | 7 + etc/hosts.allow | 5 + etc/inc/CHAP.inc | 463 + etc/inc/IPv6.inc | 1104 + etc/inc/PEAR.inc | 1103 + etc/inc/array_intersect_key.inc | 67 + etc/inc/auth.inc | 1474 + etc/inc/authgui.inc | 312 + etc/inc/basic_sasl_client.inc | 61 + etc/inc/captiveportal.inc | 2187 + etc/inc/certs.inc | 755 + etc/inc/config.console.inc | 530 + etc/inc/config.gui.inc | 87 + etc/inc/config.inc | 224 + etc/inc/config.lib.inc | 941 + etc/inc/cram_md5_sasl_client.inc | 67 + etc/inc/crypt.inc | 101 + etc/inc/digest_sasl_client.inc | 135 + etc/inc/dyndns.class | 1427 + etc/inc/easyrule.inc | 377 + etc/inc/filter.inc | 3748 ++ etc/inc/filter_log.inc | 415 + etc/inc/functions.inc | 151 + etc/inc/globals.inc | 164 + etc/inc/gmirror.inc | 314 + etc/inc/growl.class | 102 + etc/inc/gwlb.inc | 1112 + etc/inc/interfaces.inc | 5332 ++ etc/inc/ipsec.attributes.php | 184 + etc/inc/ipsec.auth-user.php | 166 + etc/inc/ipsec.inc | 745 + etc/inc/itemid.inc | 106 + etc/inc/led.inc | 354 + etc/inc/login_sasl_client.inc | 69 + etc/inc/meta.inc | 200 + etc/inc/notices.inc | 413 + etc/inc/ntlm_sasl_client.inc | 180 + etc/inc/openvpn.attributes.php | 186 + etc/inc/openvpn.auth-user.php | 206 + etc/inc/openvpn.inc | 1446 + etc/inc/openvpn.tls-verify.php | 95 + etc/inc/pfsense-utils.inc | 2921 + etc/inc/pkg-utils.inc | 1545 + etc/inc/plain_sasl_client.inc | 99 + etc/inc/priv.defs.inc | 1427 + etc/inc/priv.inc | 291 + etc/inc/priv/user.priv.inc | 74 + etc/inc/r53.class | 754 + etc/inc/radius.inc | 1208 + etc/inc/rrd.inc | 964 + etc/inc/sasl.inc | 422 + etc/inc/service-utils.inc | 716 + etc/inc/services.inc | 2374 + etc/inc/shaper.inc | 4529 ++ etc/inc/simplepie/LICENSE.txt | 26 + etc/inc/simplepie/simplepie.inc | 13672 +++++ etc/inc/smtp.inc | 862 + etc/inc/system.inc | 2016 + etc/inc/unbound.inc | 685 + etc/inc/upgrade_config.inc | 3502 ++ etc/inc/util.inc | 2034 + etc/inc/uuid.php | 327 + etc/inc/voucher.inc | 741 + etc/inc/vpn.inc | 1578 + etc/inc/vslb.inc | 560 + etc/inc/wizardapp.inc | 663 + etc/inc/xmlparse.inc | 326 + etc/inc/xmlparse_attr.inc | 227 + etc/inc/xmlreader.inc | 266 + etc/inc/xmlrpc.inc | 144 + etc/inc/xmlrpc_client.inc | 2060 + etc/inc/xmlrpc_server.inc | 678 + etc/inc/zeromq.inc | 313 + etc/inetd.conf | 1 + etc/login.conf | 317 + etc/master.passwd | 29 + etc/motd | 0 etc/mtree/BSD.local.dist | 0 etc/networks | 17 + etc/passwd | 26 + etc/pf.os | 698 + etc/pfSense.obsoletedfiles | 151 + etc/phpshellsessions/changepassword | 79 + etc/phpshellsessions/disablecarp | 17 + etc/phpshellsessions/disabledhcpd | 13 + etc/phpshellsessions/disablereferercheck | 11 + etc/phpshellsessions/enableallowallwan | 34 + etc/phpshellsessions/enablecarp | 18 + etc/phpshellsessions/enablesshd | 12 + etc/phpshellsessions/externalconfiglocator | 3 + etc/phpshellsessions/gitsync | 429 + etc/phpshellsessions/installpkg | 39 + etc/phpshellsessions/listpkg | 15 + etc/phpshellsessions/removepkgconfig | 8 + etc/phpshellsessions/removeshaper | 24 + etc/phpshellsessions/restartdhcpd | 4 + etc/phpshellsessions/restartipsec | 5 + etc/phpshellsessions/svc | 98 + etc/phpshellsessions/uninstallpkg | 35 + etc/platform | 1 + etc/printcap | 0 etc/protocols | 158 + etc/pubkey.pem | 1 + etc/rc | 468 + etc/rc.backup_dhcpleases.sh | 8 + etc/rc.backup_rrd.sh | 17 + etc/rc.banner | 123 + etc/rc.bootup | 455 + etc/rc.captiveportal_configure | 40 + etc/rc.carpbackup | 73 + etc/rc.carpmaster | 81 + etc/rc.cdrom | 44 + etc/rc.conf_mount_ro | 36 + etc/rc.conf_mount_rw | 36 + etc/rc.create_full_backup | 18 + etc/rc.dhclient_cron | 53 + etc/rc.disable_hdd_apm | 13 + etc/rc.dumpon | 35 + etc/rc.dyndns.update | 56 + etc/rc.embedded | 34 + etc/rc.expireaccounts | 66 + etc/rc.filter_configure | 43 + etc/rc.filter_configure_sync | 41 + etc/rc.filter_configure_xmlrpc | 53 + etc/rc.filter_synchronize | 436 + etc/rc.firmware | 542 + etc/rc.firmware_auto | 88 + etc/rc.halt | 13 + etc/rc.initial | 184 + etc/rc.initial.defaults | 62 + etc/rc.initial.firmware_update | 193 + etc/rc.initial.halt | 61 + etc/rc.initial.password | 86 + etc/rc.initial.ping | 55 + etc/rc.initial.reboot | 61 + etc/rc.initial.setlanip | 537 + etc/rc.initial.setports | 51 + ...c.initial.store_config_to_removable_device | 90 + etc/rc.initial.toggle_sshd | 74 + etc/rc.interfaces_carp_configure | 39 + etc/rc.interfaces_lan_configure | 39 + etc/rc.interfaces_opt_configure | 41 + etc/rc.interfaces_wan_configure | 48 + etc/rc.kill_states | 90 + etc/rc.linkup | 113 + etc/rc.nanobsd_switch_boot_slice | 27 + etc/rc.newipsecdns | 61 + etc/rc.newroutedns | 56 + etc/rc.newwanip | 225 + etc/rc.newwanipv6 | 186 + etc/rc.notify_message | 64 + etc/rc.ntpdate | 39 + etc/rc.openvpn | 128 + etc/rc.packages | 45 + etc/rc.php-fpm_restart | 11 + etc/rc.php_ini_setup | 418 + etc/rc.prunecaptiveportal | 66 + etc/rc.reboot | 35 + etc/rc.reload_all | 46 + etc/rc.reload_interfaces | 45 + etc/rc.resolv_conf_generate | 35 + etc/rc.restart_webgui | 28 + etc/rc.restore_config_backup | 126 + etc/rc.restore_full_backup | 19 + etc/rc.savecore | 22 + etc/rc.savevoucher | 40 + etc/rc.shutdown | 37 + etc/rc.start_packages | 74 + etc/rc.stop_packages | 5 + etc/rc.update_alias_url_data | 43 + etc/rc.update_bogons.sh | 157 + etc/rc.update_urltables | 58 + etc/services | 4111 ++ etc/shells | 12 + etc/skel/dot.tcshrc | 21 + etc/ssh/sshd_config | 103 + etc/sshd | 204 + etc/ssl/openssl.cnf | 309 + etc/syslog.conf | 12 + etc/ttys | 49 + etc/version | 1 + root/.hushlogin | 0 root/.profile | 5 + root/.shrc | 5 + root/.tcshrc | 21 + sbin/athctrl.sh | 41 + sbin/dhclient-script | 407 + tmp/post_upgrade_command | 45 + tmp/post_upgrade_command.php | 33 + tmp/pre_upgrade_command | 30 + usr/boot/device.hints_wrap | 93 + usr/boot/loader.conf_wrap | 11 + usr/cf/conf/trigger_initial_wizard | 0 usr/conf.default/config.xml | 751 + usr/etc/ascii-art/pfsense-logo-small.txt | 5 + usr/etc/bogons | 10 + usr/etc/bogonsv6 | 0 usr/etc/ca_countries | 237 + usr/etc/ddb.conf | 3 + usr/etc/devd.conf | 74 + usr/etc/dh-parameters.1024 | 5 + usr/etc/dh-parameters.2048 | 8 + usr/etc/dh-parameters.4096 | 13 + usr/etc/disktab | 204 + usr/etc/ecl.php | 174 + usr/etc/fbtab | 4 + usr/etc/gettytab | 235 + usr/etc/group | 31 + usr/etc/host.conf | 7 + usr/etc/hosts.allow | 5 + usr/etc/inc/CHAP.inc | 463 + usr/etc/inc/IPv6.inc | 1104 + usr/etc/inc/PEAR.inc | 1103 + usr/etc/inc/array_intersect_key.inc | 67 + usr/etc/inc/auth.inc | 1474 + usr/etc/inc/authgui.inc | 312 + usr/etc/inc/basic_sasl_client.inc | 61 + usr/etc/inc/captiveportal.inc | 2187 + usr/etc/inc/certs.inc | 755 + usr/etc/inc/config.console.inc | 530 + usr/etc/inc/config.gui.inc | 87 + usr/etc/inc/config.inc | 224 + usr/etc/inc/config.lib.inc | 941 + usr/etc/inc/cram_md5_sasl_client.inc | 67 + usr/etc/inc/crypt.inc | 101 + usr/etc/inc/digest_sasl_client.inc | 135 + usr/etc/inc/dyndns.class | 1427 + usr/etc/inc/easyrule.inc | 377 + usr/etc/inc/filter.inc | 3748 ++ usr/etc/inc/filter_log.inc | 415 + usr/etc/inc/functions.inc | 151 + usr/etc/inc/globals.inc | 164 + usr/etc/inc/gmirror.inc | 314 + usr/etc/inc/growl.class | 102 + usr/etc/inc/gwlb.inc | 1112 + usr/etc/inc/interfaces.inc | 5332 ++ usr/etc/inc/ipsec.attributes.php | 184 + usr/etc/inc/ipsec.auth-user.php | 166 + usr/etc/inc/ipsec.inc | 745 + usr/etc/inc/itemid.inc | 106 + usr/etc/inc/led.inc | 354 + usr/etc/inc/login_sasl_client.inc | 69 + usr/etc/inc/meta.inc | 200 + usr/etc/inc/notices.inc | 413 + usr/etc/inc/ntlm_sasl_client.inc | 180 + usr/etc/inc/openvpn.attributes.php | 186 + usr/etc/inc/openvpn.auth-user.php | 206 + usr/etc/inc/openvpn.inc | 1446 + usr/etc/inc/openvpn.tls-verify.php | 95 + usr/etc/inc/pfsense-utils.inc | 2921 + usr/etc/inc/pkg-utils.inc | 1545 + usr/etc/inc/plain_sasl_client.inc | 99 + usr/etc/inc/priv.defs.inc | 1427 + usr/etc/inc/priv.inc | 291 + usr/etc/inc/priv/user.priv.inc | 74 + usr/etc/inc/r53.class | 754 + usr/etc/inc/radius.inc | 1208 + usr/etc/inc/rrd.inc | 964 + usr/etc/inc/sasl.inc | 422 + usr/etc/inc/service-utils.inc | 716 + usr/etc/inc/services.inc | 2374 + usr/etc/inc/shaper.inc | 4529 ++ usr/etc/inc/simplepie/LICENSE.txt | 26 + usr/etc/inc/simplepie/simplepie.inc | 13672 +++++ usr/etc/inc/smtp.inc | 862 + usr/etc/inc/system.inc | 2016 + usr/etc/inc/unbound.inc | 685 + usr/etc/inc/upgrade_config.inc | 3502 ++ usr/etc/inc/util.inc | 2034 + usr/etc/inc/uuid.php | 327 + usr/etc/inc/voucher.inc | 741 + usr/etc/inc/vpn.inc | 1578 + usr/etc/inc/vslb.inc | 560 + usr/etc/inc/wizardapp.inc | 663 + usr/etc/inc/xmlparse.inc | 326 + usr/etc/inc/xmlparse_attr.inc | 227 + usr/etc/inc/xmlreader.inc | 266 + usr/etc/inc/xmlrpc.inc | 144 + usr/etc/inc/xmlrpc_client.inc | 2060 + usr/etc/inc/xmlrpc_server.inc | 678 + usr/etc/inc/zeromq.inc | 313 + usr/etc/inetd.conf | 1 + usr/etc/login.conf | 317 + usr/etc/master.passwd | 29 + usr/etc/motd | 0 usr/etc/mtree/BSD.local.dist | 0 usr/etc/networks | 17 + usr/etc/passwd | 26 + usr/etc/pf.os | 698 + usr/etc/pfSense.obsoletedfiles | 151 + usr/etc/phpshellsessions/changepassword | 79 + usr/etc/phpshellsessions/disablecarp | 17 + usr/etc/phpshellsessions/disabledhcpd | 13 + usr/etc/phpshellsessions/disablereferercheck | 11 + usr/etc/phpshellsessions/enableallowallwan | 34 + usr/etc/phpshellsessions/enablecarp | 18 + usr/etc/phpshellsessions/enablesshd | 12 + .../phpshellsessions/externalconfiglocator | 3 + usr/etc/phpshellsessions/gitsync | 429 + usr/etc/phpshellsessions/installpkg | 39 + usr/etc/phpshellsessions/listpkg | 15 + usr/etc/phpshellsessions/removepkgconfig | 8 + usr/etc/phpshellsessions/removeshaper | 24 + usr/etc/phpshellsessions/restartdhcpd | 4 + usr/etc/phpshellsessions/restartipsec | 5 + usr/etc/phpshellsessions/svc | 98 + usr/etc/phpshellsessions/uninstallpkg | 35 + usr/etc/platform | 1 + usr/etc/printcap | 0 usr/etc/protocols | 158 + usr/etc/pubkey.pem | 1 + usr/etc/rc | 468 + usr/etc/rc.backup_dhcpleases.sh | 8 + usr/etc/rc.backup_rrd.sh | 17 + usr/etc/rc.banner | 123 + usr/etc/rc.bootup | 455 + usr/etc/rc.captiveportal_configure | 40 + usr/etc/rc.carpbackup | 73 + usr/etc/rc.carpmaster | 81 + usr/etc/rc.cdrom | 44 + usr/etc/rc.conf_mount_ro | 36 + usr/etc/rc.conf_mount_rw | 36 + usr/etc/rc.create_full_backup | 18 + usr/etc/rc.dhclient_cron | 53 + usr/etc/rc.disable_hdd_apm | 13 + usr/etc/rc.dumpon | 35 + usr/etc/rc.dyndns.update | 56 + usr/etc/rc.embedded | 34 + usr/etc/rc.expireaccounts | 66 + usr/etc/rc.filter_configure | 43 + usr/etc/rc.filter_configure_sync | 41 + usr/etc/rc.filter_configure_xmlrpc | 53 + usr/etc/rc.filter_synchronize | 436 + usr/etc/rc.firmware | 542 + usr/etc/rc.firmware_auto | 88 + usr/etc/rc.halt | 13 + usr/etc/rc.initial | 184 + usr/etc/rc.initial.defaults | 62 + usr/etc/rc.initial.firmware_update | 193 + usr/etc/rc.initial.halt | 61 + usr/etc/rc.initial.password | 86 + usr/etc/rc.initial.ping | 55 + usr/etc/rc.initial.reboot | 61 + usr/etc/rc.initial.setlanip | 537 + usr/etc/rc.initial.setports | 51 + ...c.initial.store_config_to_removable_device | 90 + usr/etc/rc.initial.toggle_sshd | 74 + usr/etc/rc.interfaces_carp_configure | 39 + usr/etc/rc.interfaces_lan_configure | 39 + usr/etc/rc.interfaces_opt_configure | 41 + usr/etc/rc.interfaces_wan_configure | 48 + usr/etc/rc.kill_states | 90 + usr/etc/rc.linkup | 113 + usr/etc/rc.nanobsd_switch_boot_slice | 27 + usr/etc/rc.newipsecdns | 61 + usr/etc/rc.newroutedns | 56 + usr/etc/rc.newwanip | 225 + usr/etc/rc.newwanipv6 | 186 + usr/etc/rc.notify_message | 64 + usr/etc/rc.ntpdate | 39 + usr/etc/rc.openvpn | 128 + usr/etc/rc.packages | 45 + usr/etc/rc.php-fpm_restart | 11 + usr/etc/rc.php_ini_setup | 418 + usr/etc/rc.prunecaptiveportal | 66 + usr/etc/rc.reboot | 35 + usr/etc/rc.reload_all | 46 + usr/etc/rc.reload_interfaces | 45 + usr/etc/rc.resolv_conf_generate | 35 + usr/etc/rc.restart_webgui | 28 + usr/etc/rc.restore_config_backup | 126 + usr/etc/rc.restore_full_backup | 19 + usr/etc/rc.savecore | 22 + usr/etc/rc.savevoucher | 40 + usr/etc/rc.shutdown | 37 + usr/etc/rc.start_packages | 74 + usr/etc/rc.stop_packages | 5 + usr/etc/rc.update_alias_url_data | 43 + usr/etc/rc.update_bogons.sh | 157 + usr/etc/rc.update_urltables | 58 + usr/etc/services | 4111 ++ usr/etc/shells | 12 + usr/etc/skel/dot.tcshrc | 21 + usr/etc/ssh/sshd_config | 103 + usr/etc/sshd | 204 + usr/etc/ssl/openssl.cnf | 309 + usr/etc/syslog.conf | 12 + usr/etc/ttys | 49 + usr/etc/version | 1 + usr/local/bin/3gstats.php | 83 + usr/local/bin/beep.sh | 43 + usr/local/bin/captiveportal_gather_stats.php | 110 + usr/local/bin/easyrule | 123 + usr/local/bin/filterparser.php | 57 + usr/local/bin/mail.php | 24 + usr/local/bin/ping_hosts.sh | 134 + usr/local/bin/runmsntp.sh | 12 + usr/local/bin/slowdownpipe.sh | 9 + usr/local/bin/viconfig | 3 + usr/local/captiveportal/index.php | 244 + usr/local/captiveportal/radius_accounting.inc | 323 + .../captiveportal/radius_authentication.inc | 189 + usr/local/etc/pkg.conf | 5 + usr/local/openssl/openssl.cnf | 1 + usr/local/opnsense/check_reload_status.py | 82 + usr/local/opnsense/conf/actions_filter.conf | 24 + .../opnsense/conf/actions_interface.conf | 60 + usr/local/opnsense/conf/actions_service.conf | 74 + .../opnsense/conf/check_reload_status.conf | 4 + usr/local/opnsense/execute_command.py | 70 + usr/local/opnsense/modules/__init__.py | 33 + usr/local/opnsense/modules/daemonize.py | 213 + usr/local/opnsense/modules/processhandler.py | 332 + usr/local/pkg/miniupnpd.inc | 261 + usr/local/pkg/miniupnpd.xml | 157 + usr/local/pkg/openntpd.inc | 55 + usr/local/pkg/openntpd.xml | 29 + usr/local/sbin/WipePackages.php | 64 + usr/local/sbin/gmirror_status_check.php | 92 + usr/local/sbin/mpd.script | 1642 + usr/local/sbin/ntpdate_sync_once.sh | 46 + usr/local/sbin/openvpn.attributes.sh | 16 + usr/local/sbin/ovpn-linkdown | 7 + usr/local/sbin/ovpn-linkup | 17 + usr/local/sbin/ovpn_auth_verify | 15 + usr/local/sbin/pfSsh.php | 343 + usr/local/sbin/ppp-linkdown | 31 + usr/local/sbin/ppp-linkup | 62 + usr/local/sbin/ppp-log-uptime.sh | 5 + usr/local/sbin/ppp-uptime.sh | 3 + usr/local/sbin/prefixes.php | 94 + usr/local/sbin/show_filter_reload_status.php | 26 + usr/local/sbin/ufslabels.sh | 140 + usr/local/sbin/vpn-linkdown | 6 + usr/local/sbin/vpn-linkup | 16 + .../share/locale/en/LC_MESSAGES/pfSense.pot | 48729 +++++++++++++++ .../share/locale/ja/LC_MESSAGES/pfSense.po | 48739 ++++++++++++++++ .../pt_BR.ISO8859-1/LC_MESSAGES/pfSense.mo | Bin 0 -> 642971 bytes .../pt_BR.ISO8859-1/LC_MESSAGES/pfSense.po | 41318 +++++++++++++ .../share/locale/tr/LC_MESSAGES/pfSense.mo | Bin 0 -> 622886 bytes .../share/locale/tr/LC_MESSAGES/pfSense.po | 43061 ++++++++++++++ .../iso_3166-1_list_en.xml | 987 + .../serviceproviders.xml | 11614 ++++ usr/local/share/pbi-keys/pfSense-BETA.ssl | 14 + usr/local/share/protocols/100bao.pat | 12 + usr/local/share/protocols/EAOrigin.pat | 7 + usr/local/share/protocols/LICENSE | 605 + usr/local/share/protocols/aim.pat | 28 + usr/local/share/protocols/aimwebcontent.pat | 10 + usr/local/share/protocols/any.pat | 8 + usr/local/share/protocols/applejuice.pat | 12 + usr/local/share/protocols/ares.pat | 63 + usr/local/share/protocols/armagetron.pat | 12 + usr/local/share/protocols/audiogalaxy.pat | 19 + usr/local/share/protocols/battlefield1942.pat | 14 + usr/local/share/protocols/battlefield2.pat | 26 + usr/local/share/protocols/battlefield2142.pat | 14 + usr/local/share/protocols/bgp.pat | 19 + usr/local/share/protocols/biff.pat | 16 + usr/local/share/protocols/bittorrent.pat | 25 + usr/local/share/protocols/chikka.pat | 17 + usr/local/share/protocols/cimd.pat | 19 + usr/local/share/protocols/ciscovpn.pat | 11 + usr/local/share/protocols/citrix.pat | 12 + usr/local/share/protocols/code_red.pat | 8 + .../share/protocols/counterstrike-source.pat | 42 + usr/local/share/protocols/cvs.pat | 14 + .../share/protocols/dayofdefeat-source.pat | 11 + usr/local/share/protocols/dazhihui.pat | 11 + usr/local/share/protocols/dhcp.pat | 36 + usr/local/share/protocols/directconnect.pat | 14 + usr/local/share/protocols/dns.pat | 63 + usr/local/share/protocols/doom3.pat | 10 + usr/local/share/protocols/edonkey.pat | 37 + usr/local/share/protocols/exe.pat | 20 + usr/local/share/protocols/fasttrack.pat | 23 + usr/local/share/protocols/finger.pat | 15 + usr/local/share/protocols/flash.pat | 18 + usr/local/share/protocols/freenet.pat | 10 + usr/local/share/protocols/ftp.pat | 46 + usr/local/share/protocols/gif.pat | 8 + usr/local/share/protocols/gkrellm.pat | 13 + usr/local/share/protocols/gnucleuslan.pat | 10 + usr/local/share/protocols/gnutella.pat | 34 + usr/local/share/protocols/goboogy.pat | 13 + usr/local/share/protocols/gopher.pat | 25 + usr/local/share/protocols/gtalk.pat | 11 + usr/local/share/protocols/guildwars.pat | 14 + usr/local/share/protocols/h323.pat | 36 + .../share/protocols/halflife2-deathmatch.pat | 10 + usr/local/share/protocols/hddtemp.pat | 14 + usr/local/share/protocols/hotline.pat | 12 + usr/local/share/protocols/html.pat | 11 + usr/local/share/protocols/http-dap.pat | 19 + .../share/protocols/http-freshdownload.pat | 17 + usr/local/share/protocols/http-itunes.pat | 14 + usr/local/share/protocols/http-rtsp.pat | 16 + usr/local/share/protocols/http.pat | 28 + usr/local/share/protocols/httpaudio.pat | 32 + usr/local/share/protocols/httpcachehit.pat | 19 + usr/local/share/protocols/httpcachemiss.pat | 17 + usr/local/share/protocols/httpvideo.pat | 32 + usr/local/share/protocols/ident.pat | 15 + usr/local/share/protocols/imap.pat | 14 + usr/local/share/protocols/imesh.pat | 15 + usr/local/share/protocols/ipp.pat | 12 + usr/local/share/protocols/irc.pat | 20 + usr/local/share/protocols/jabber.pat | 24 + usr/local/share/protocols/jpeg.pat | 8 + usr/local/share/protocols/kugoo.pat | 21 + usr/local/share/protocols/live365.pat | 15 + usr/local/share/protocols/liveforspeed.pat | 13 + usr/local/share/protocols/lpd.pat | 18 + usr/local/share/protocols/mohaa.pat | 11 + usr/local/share/protocols/mp3.pat | 11 + .../share/protocols/msn-filetransfer.pat | 30 + usr/local/share/protocols/msnmessenger.pat | 28 + usr/local/share/protocols/mute.pat | 11 + usr/local/share/protocols/napster.pat | 24 + usr/local/share/protocols/nbns.pat | 20 + usr/local/share/protocols/ncp.pat | 23 + usr/local/share/protocols/netbios.pat | 29 + usr/local/share/protocols/nimda.pat | 8 + usr/local/share/protocols/nntp.pat | 21 + usr/local/share/protocols/ntp.pat | 17 + usr/local/share/protocols/ogg.pat | 7 + usr/local/share/protocols/openft.pat | 13 + usr/local/share/protocols/pcanywhere.pat | 12 + usr/local/share/protocols/pdf.pat | 11 + usr/local/share/protocols/perl.pat | 7 + usr/local/share/protocols/png.pat | 13 + usr/local/share/protocols/poco.pat | 12 + usr/local/share/protocols/pop3.pat | 50 + usr/local/share/protocols/postscript.pat | 7 + usr/local/share/protocols/pplive.pat | 11 + usr/local/share/protocols/pressplay.pat | 15 + usr/local/share/protocols/qq.pat | 26 + usr/local/share/protocols/quake-halflife.pat | 27 + usr/local/share/protocols/quake1.pat | 19 + usr/local/share/protocols/quicktime.pat | 21 + usr/local/share/protocols/radmin.pat | 17 + usr/local/share/protocols/rar.pat | 7 + usr/local/share/protocols/rdp.pat | 20 + usr/local/share/protocols/replaytv-ivs.pat | 11 + usr/local/share/protocols/rlogin.pat | 19 + usr/local/share/protocols/rpm.pat | 7 + usr/local/share/protocols/rtf.pat | 8 + usr/local/share/protocols/rtp.pat | 33 + usr/local/share/protocols/rtsp.pat | 15 + usr/local/share/protocols/runesofmagic.pat | 63 + usr/local/share/protocols/shoutcast.pat | 27 + usr/local/share/protocols/sip.pat | 20 + usr/local/share/protocols/skypeout.pat | 50 + usr/local/share/protocols/skypetoskype.pat | 14 + usr/local/share/protocols/smb.pat | 19 + usr/local/share/protocols/smtp.pat | 40 + usr/local/share/protocols/snmp-mon.pat | 32 + usr/local/share/protocols/snmp-trap.pat | 33 + usr/local/share/protocols/snmp.pat | 19 + usr/local/share/protocols/socks.pat | 32 + usr/local/share/protocols/soribada.pat | 51 + usr/local/share/protocols/soulseek.pat | 17 + usr/local/share/protocols/ssdp.pat | 21 + usr/local/share/protocols/ssh.pat | 17 + usr/local/share/protocols/ssl.pat | 16 + usr/local/share/protocols/stun.pat | 46 + usr/local/share/protocols/subspace.pat | 21 + usr/local/share/protocols/subversion.pat | 13 + usr/local/share/protocols/swf.pat | 2 + usr/local/share/protocols/tar.pat | 12 + usr/local/share/protocols/teamfortress2.pat | 11 + usr/local/share/protocols/teamspeak.pat | 15 + usr/local/share/protocols/telnet.pat | 16 + usr/local/share/protocols/tesla.pat | 15 + usr/local/share/protocols/tftp.pat | 21 + usr/local/share/protocols/thecircle.pat | 12 + usr/local/share/protocols/tonghuashun.pat | 11 + usr/local/share/protocols/tor.pat | 17 + usr/local/share/protocols/tsp.pat | 14 + usr/local/share/protocols/unset.pat | 8 + usr/local/share/protocols/uucp.pat | 12 + usr/local/share/protocols/validcertssl.pat | 25 + usr/local/share/protocols/ventrilo.pat | 18 + usr/local/share/protocols/vnc.pat | 23 + usr/local/share/protocols/whois.pat | 14 + usr/local/share/protocols/worldofwarcraft.pat | 66 + usr/local/share/protocols/x11.pat | 23 + usr/local/share/protocols/xboxlive.pat | 41 + usr/local/share/protocols/xunlei.pat | 83 + usr/local/share/protocols/yahoo.pat | 27 + usr/local/share/protocols/zip.pat | 7 + usr/local/share/protocols/zmaap.pat | 18 + .../rrdtool/fonts/DejaVuSansMono-Roman.ttf | Bin 0 -> 60444 bytes usr/local/www/apple-touch-icon.png | Bin 0 -> 4068 bytes usr/local/www/bandwidth_by_ip.php | 121 + usr/local/www/carp_status.php | 209 + usr/local/www/classes/maintable.inc | 196 + .../SyntaxHighlighter.css | 166 + usr/local/www/code-syntax-highlighter/gpl.txt | 340 + .../code-syntax-highlighter/shBrushCSharp.js | 30 + .../www/code-syntax-highlighter/shBrushCpp.js | 72 + .../www/code-syntax-highlighter/shBrushCss.js | 50 + .../code-syntax-highlighter/shBrushDelphi.js | 31 + .../code-syntax-highlighter/shBrushJScript.js | 22 + .../code-syntax-highlighter/shBrushJava.js | 26 + .../www/code-syntax-highlighter/shBrushPhp.js | 23 + .../code-syntax-highlighter/shBrushPython.js | 71 + .../code-syntax-highlighter/shBrushRuby.js | 26 + .../www/code-syntax-highlighter/shBrushSql.js | 40 + .../www/code-syntax-highlighter/shBrushVb.js | 29 + .../www/code-syntax-highlighter/shBrushXml.js | 61 + .../www/code-syntax-highlighter/shCore.js | 589 + .../shCore.uncompressed.js | 636 + usr/local/www/crash_reporter.php | 152 + usr/local/www/csrf/csrf-magic.js | 186 + usr/local/www/csrf/csrf-magic.php | 403 + usr/local/www/css/table.css | 46 + usr/local/www/diag_arp.php | 354 + usr/local/www/diag_authentication.php | 132 + usr/local/www/diag_backup.php | 793 + usr/local/www/diag_confbak.php | 294 + usr/local/www/diag_defaults.php | 89 + usr/local/www/diag_dns.php | 284 + usr/local/www/diag_dump_states.php | 251 + usr/local/www/diag_dump_states_sources.php | 211 + usr/local/www/diag_gmirror.php | 346 + usr/local/www/diag_ipsec.php | 460 + usr/local/www/diag_ipsec_leases.php | 130 + usr/local/www/diag_ipsec_sad.php | 121 + usr/local/www/diag_ipsec_spd.php | 137 + usr/local/www/diag_ipsec_xml.php | 81 + usr/local/www/diag_limiter_info.php | 118 + usr/local/www/diag_logs.php | 137 + usr/local/www/diag_logs_auth.php | 98 + usr/local/www/diag_logs_dhcp.php | 104 + usr/local/www/diag_logs_filter.php | 463 + usr/local/www/diag_logs_filter_dynamic.php | 175 + usr/local/www/diag_logs_filter_summary.php | 236 + usr/local/www/diag_logs_gateways.php | 139 + usr/local/www/diag_logs_ipsec.php | 120 + usr/local/www/diag_logs_ntpd.php | 101 + usr/local/www/diag_logs_openvpn.php | 108 + usr/local/www/diag_logs_ppp.php | 106 + usr/local/www/diag_logs_relayd.php | 99 + usr/local/www/diag_logs_resolver.php | 139 + usr/local/www/diag_logs_routing.php | 110 + usr/local/www/diag_logs_settings.php | 486 + usr/local/www/diag_logs_vpn.php | 194 + usr/local/www/diag_logs_wireless.php | 112 + usr/local/www/diag_nanobsd.php | 284 + usr/local/www/diag_ndp.php | 178 + usr/local/www/diag_packet_capture.php | 473 + usr/local/www/diag_patterns.php | 96 + usr/local/www/diag_pf_info.php | 113 + usr/local/www/diag_ping.php | 193 + usr/local/www/diag_pkglogs.php | 138 + usr/local/www/diag_resetstate.php | 136 + usr/local/www/diag_routes.php | 237 + usr/local/www/diag_smart.php | 457 + usr/local/www/diag_sockets.php | 140 + usr/local/www/diag_states_summary.php | 201 + usr/local/www/diag_system_activity.php | 110 + usr/local/www/diag_system_pftop.php | 214 + usr/local/www/diag_tables.php | 176 + usr/local/www/diag_testport.php | 288 + usr/local/www/diag_traceroute.php | 211 + usr/local/www/easyrule.php | 87 + usr/local/www/edit.php | 253 + usr/local/www/exec.php | 343 + usr/local/www/favicon.ico | Bin 0 -> 1406 bytes usr/local/www/fbegin.inc | 441 + usr/local/www/fend.inc | 27 + usr/local/www/filebrowser/browser.js | 47 + usr/local/www/filebrowser/browser.php | 159 + .../www/filebrowser/images/file_code.gif | Bin 0 -> 610 bytes .../www/filebrowser/images/file_database.gif | Bin 0 -> 621 bytes usr/local/www/filebrowser/images/file_doc.gif | Bin 0 -> 1061 bytes .../www/filebrowser/images/file_flash.gif | Bin 0 -> 627 bytes .../www/filebrowser/images/file_generic.gif | Bin 0 -> 1068 bytes .../www/filebrowser/images/file_image.gif | Bin 0 -> 608 bytes usr/local/www/filebrowser/images/file_js.gif | Bin 0 -> 1077 bytes usr/local/www/filebrowser/images/file_pdf.gif | Bin 0 -> 603 bytes usr/local/www/filebrowser/images/file_php.gif | Bin 0 -> 603 bytes usr/local/www/filebrowser/images/file_ppt.gif | Bin 0 -> 1071 bytes .../www/filebrowser/images/file_system.gif | Bin 0 -> 601 bytes usr/local/www/filebrowser/images/file_xls.gif | Bin 0 -> 1060 bytes usr/local/www/filebrowser/images/file_zip.gif | Bin 0 -> 612 bytes .../www/filebrowser/images/folder_generic.gif | Bin 0 -> 996 bytes .../www/filebrowser/images/icon_cancel.gif | Bin 0 -> 1024 bytes .../www/filebrowser/images/icon_contract.gif | Bin 0 -> 599 bytes .../www/filebrowser/images/icon_expand.gif | Bin 0 -> 613 bytes .../www/filebrowser/images/icon_home.gif | Bin 0 -> 1027 bytes .../www/filebrowser/images/icon_left.gif | Bin 0 -> 306 bytes .../www/filebrowser/images/icon_magnifier.gif | Bin 0 -> 568 bytes usr/local/www/firewall_aliases.php | 301 + usr/local/www/firewall_aliases_edit.php | 781 + usr/local/www/firewall_aliases_import.php | 231 + usr/local/www/firewall_nat.php | 382 + usr/local/www/firewall_nat_1to1.php | 354 + usr/local/www/firewall_nat_1to1_edit.php | 556 + usr/local/www/firewall_nat_edit.php | 934 + usr/local/www/firewall_nat_npt.php | 183 + usr/local/www/firewall_nat_npt_edit.php | 288 + usr/local/www/firewall_nat_out.php | 661 + usr/local/www/firewall_nat_out_edit.php | 861 + usr/local/www/firewall_rules.php | 928 + usr/local/www/firewall_rules_edit.php | 1766 + usr/local/www/firewall_schedule.php | 247 + usr/local/www/firewall_schedule_edit.php | 1179 + usr/local/www/firewall_shaper.php | 452 + usr/local/www/firewall_shaper_layer7.php | 591 + usr/local/www/firewall_shaper_queues.php | 229 + usr/local/www/firewall_shaper_vinterface.php | 443 + usr/local/www/firewall_shaper_wizards.php | 144 + usr/local/www/firewall_virtual_ip.php | 309 + usr/local/www/firewall_virtual_ip_edit.php | 505 + usr/local/www/getserviceproviders.php | 148 + usr/local/www/getstats.php | 50 + usr/local/www/graph.php | 390 + usr/local/www/graph_cpu.php | 206 + usr/local/www/green_dot.jpg | Bin 0 -> 65 bytes usr/local/www/gui.css | 363 + usr/local/www/guiconfig.inc | 1187 + usr/local/www/halt.php | 76 + usr/local/www/head.inc | 112 + usr/local/www/headjs.php | 171 + usr/local/www/help.php | 449 + usr/local/www/ifstats.php | 65 + usr/local/www/includes/functions.inc.php | 349 + usr/local/www/index.php | 783 + usr/local/www/installer/index.php | 5 + usr/local/www/installer/installer.php | 1211 + usr/local/www/interfaces.php | 3478 ++ usr/local/www/interfaces_assign.php | 561 + usr/local/www/interfaces_bridge.php | 167 + usr/local/www/interfaces_bridge_edit.php | 614 + usr/local/www/interfaces_gif.php | 152 + usr/local/www/interfaces_gif_edit.php | 243 + usr/local/www/interfaces_gre.php | 148 + usr/local/www/interfaces_gre_edit.php | 246 + usr/local/www/interfaces_groups.php | 159 + usr/local/www/interfaces_groups_edit.php | 357 + usr/local/www/interfaces_lagg.php | 156 + usr/local/www/interfaces_lagg_edit.php | 245 + usr/local/www/interfaces_ppps.php | 147 + usr/local/www/interfaces_ppps_edit.php | 805 + usr/local/www/interfaces_qinq.php | 168 + usr/local/www/interfaces_qinq_edit.php | 417 + usr/local/www/interfaces_vlan.php | 153 + usr/local/www/interfaces_vlan_edit.php | 213 + usr/local/www/interfaces_wireless.php | 149 + usr/local/www/interfaces_wireless_edit.php | 211 + usr/local/www/javascript/NetUtils.js | 114 + usr/local/www/javascript/autosuggest.js | 336 + usr/local/www/javascript/base64.js | 142 + .../www/javascript/carp_status/carp_status.js | 5 + .../www/javascript/chosen/chosen-sprite.png | Bin 0 -> 1866 bytes usr/local/www/javascript/chosen/chosen.css | 317 + .../www/javascript/chosen/chosen.jquery.js | 755 + .../javascript/chosen/chosen.jquery.min.js | 9 + .../www/javascript/chosen/chosen.proto.js | 765 + .../www/javascript/chosen/chosen.proto.min.js | 9 + .../chosen/coffee/chosen.jquery.coffee | 633 + .../chosen/coffee/chosen.proto.coffee | 629 + .../javascript/datepicker/css/datepicker.css | 178 + .../www/javascript/datepicker/js/blank.html | 6 + .../javascript/datepicker/js/datepicker.js | 1111 + .../javascript/datepicker/media/bg_header.jpg | Bin 0 -> 1792 bytes .../javascript/datepicker/media/bullet1.gif | Bin 0 -> 55 bytes .../javascript/datepicker/media/bullet2.gif | Bin 0 -> 262 bytes .../www/javascript/datepicker/media/cal.gif | Bin 0 -> 127 bytes .../media/gradient-e5e5e5-ffffff.gif | Bin 0 -> 526 bytes usr/local/www/javascript/domTT/LICENSE | 202 + usr/local/www/javascript/domTT/behaviour.js | 254 + usr/local/www/javascript/domTT/domLib.js | 706 + usr/local/www/javascript/domTT/domTT.js | 1132 + usr/local/www/javascript/domTT/fadomatic.js | 180 + usr/local/www/javascript/filter_log.js | 168 + usr/local/www/javascript/firebug-lite.js | 1000 + .../firewall_nat_edit/autosuggest.js | 336 + .../firewall_nat_edit/disablekeys.js | 6 + .../firewall_nat_edit/firewall_nat_edit.js | 203 + .../firewall_nat_edit/suggestions.js | 33 + .../firewall_rules_edit/autosuggest.js | 336 + .../firewall_rules_edit/disablekeys.js | 6 + .../firewall_rules_edit.js | 225 + .../firewall_rules_edit/suggestions.js | 33 + .../firewall_shaper_edit/autosuggest.js | 336 + .../firewall_shaper_edit/disablekeys.js | 6 + .../firewall_shaper_edit.js | 37 + .../firewall_shaper_edit/suggestions.js | 33 + usr/local/www/javascript/global.js | 43 + usr/local/www/javascript/index/ajax.js | 186 + .../interfaces_ppps_edit/ppps_edit.js | 253 + usr/local/www/javascript/jquery-1.11.1.min.js | 4 + .../javascript/jquery-migrate-1.2.1.min.js | 2 + .../css/jquery-ui-timepicker-addon.css | 7 + .../js/jquery-ui-timepicker-addon.js | 1326 + usr/local/www/javascript/jquery.ipv4v6ify.js | 140 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_0_eeeeee_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_flat_55_c0402a_40x100.png | Bin 0 -> 213 bytes .../images/ui-bg_flat_55_eeeeee_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_f8f8f8_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_35_dddddd_1x400.png | Bin 0 -> 109 bytes .../images/ui-bg_glass_60_eeeeee_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../ui-bg_inset-hard_75_999999_1x100.png | Bin 0 -> 114 bytes .../ui-bg_inset-soft_50_c9c9c9_1x100.png | Bin 0 -> 96 bytes .../jquery/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../jquery/images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../jquery/images/ui-icons_3383bb_256x240.png | Bin 0 -> 4369 bytes .../jquery/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../jquery/images/ui-icons_70b2e1_256x240.png | Bin 0 -> 4369 bytes .../jquery/images/ui-icons_999999_256x240.png | Bin 0 -> 4369 bytes .../jquery/images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../jquery/images/ui-icons_fbc856_256x240.png | Bin 0 -> 5355 bytes .../jquery/images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../jquery/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../javascript/jquery/jquery-ui-1.11.1.css | 1226 + .../javascript/jquery/jquery-ui-1.11.1.min.js | 13 + .../load_balancer_pool_edit/pool.js | 191 + .../load_balancer_relay_protocol_edit.js | 56 + usr/local/www/javascript/niftyjsCode.js | 174 + .../numericupdown/css/numericupdown.css | 40 + .../javascript/numericupdown/images/down.gif | Bin 0 -> 60 bytes .../javascript/numericupdown/images/up.gif | Bin 0 -> 60 bytes .../numericupdown/js/numericupdown.js | 287 + usr/local/www/javascript/pi.js | 682 + usr/local/www/javascript/row_helper.js | 97 + .../www/javascript/row_helper_dynamic.js | 98 + usr/local/www/javascript/row_toggle.js | 66 + .../www/javascript/scriptaculous/builder.js | 136 + .../www/javascript/scriptaculous/controls.js | 965 + .../www/javascript/scriptaculous/dragdrop.js | 974 + .../www/javascript/scriptaculous/effects.js | 1123 + .../www/javascript/scriptaculous/prototype.js | 6079 ++ .../javascript/scriptaculous/scriptaculous.js | 68 + .../www/javascript/scriptaculous/slider.js | 275 + .../www/javascript/scriptaculous/sound.js | 59 + .../www/javascript/scriptaculous/unittest.js | 568 + usr/local/www/javascript/sorttable.js | 584 + usr/local/www/javascript/suggestions.js | 33 + usr/local/www/javascript/ticker.js | 73 + .../www/javascript/wizard/autosuggest.js | 336 + .../www/javascript/wizard/disablekeys.js | 6 + .../www/javascript/wizard/suggestions.js | 33 + usr/local/www/license.php | 145 + usr/local/www/load_balancer_monitor.php | 137 + usr/local/www/load_balancer_monitor_edit.php | 369 + usr/local/www/load_balancer_pool.php | 155 + usr/local/www/load_balancer_pool_edit.php | 345 + usr/local/www/load_balancer_relay_action.php | 155 + .../www/load_balancer_relay_action_edit.php | 569 + .../www/load_balancer_relay_protocol.php | 149 + .../www/load_balancer_relay_protocol_edit.php | 292 + usr/local/www/load_balancer_setting.php | 171 + .../www/load_balancer_virtual_server.php | 150 + .../www/load_balancer_virtual_server_edit.php | 290 + usr/local/www/logobig.jpg | Bin 0 -> 7540 bytes usr/local/www/niftycssCode.css | 21 + usr/local/www/niftycssprintCode.css | 1 + usr/local/www/pkg.php | 538 + usr/local/www/pkg_edit.php | 1132 + usr/local/www/pkg_mgr.php | 287 + usr/local/www/pkg_mgr_install.php | 305 + usr/local/www/pkg_mgr_installed.php | 247 + usr/local/www/pkg_mgr_settings.php | 149 + usr/local/www/protochart/ProtoChart.js | 2653 + .../www/protochart/excanvas-compressed.js | 19 + usr/local/www/protochart/excanvas.js | 785 + usr/local/www/reboot.php | 71 + usr/local/www/restart_httpd.php | 65 + usr/local/www/services_captiveportal.php | 1101 + .../services_captiveportal_filemanager.php | 233 + .../www/services_captiveportal_hostname.php | 198 + .../services_captiveportal_hostname_edit.php | 216 + usr/local/www/services_captiveportal_ip.php | 181 + .../www/services_captiveportal_ip_edit.php | 236 + usr/local/www/services_captiveportal_mac.php | 227 + .../www/services_captiveportal_mac_edit.php | 257 + .../www/services_captiveportal_vouchers.php | 660 + .../services_captiveportal_vouchers_edit.php | 218 + .../www/services_captiveportal_zones.php | 115 + .../www/services_captiveportal_zones_edit.php | 122 + usr/local/www/services_dhcp.php | 1296 + usr/local/www/services_dhcp_edit.php | 548 + usr/local/www/services_dhcp_relay.php | 207 + usr/local/www/services_dhcpv6.php | 917 + usr/local/www/services_dhcpv6_edit.php | 260 + usr/local/www/services_dhcpv6_relay.php | 208 + usr/local/www/services_dnsmasq.php | 489 + .../services_dnsmasq_domainoverride_edit.php | 174 + usr/local/www/services_dnsmasq_edit.php | 303 + usr/local/www/services_dyndns.php | 203 + usr/local/www/services_dyndns_edit.php | 448 + usr/local/www/services_igmpproxy.php | 167 + usr/local/www/services_igmpproxy_edit.php | 303 + usr/local/www/services_ntpd.php | 418 + usr/local/www/services_ntpd_gps.php | 588 + usr/local/www/services_ntpd_pps.php | 227 + usr/local/www/services_rfc2136.php | 187 + usr/local/www/services_rfc2136_edit.php | 232 + .../www/services_router_advertisements.php | 443 + usr/local/www/services_snmp.php | 446 + usr/local/www/services_unbound.php | 516 + usr/local/www/services_unbound_acls.php | 391 + usr/local/www/services_unbound_advanced.php | 435 + .../services_unbound_domainoverride_edit.php | 169 + usr/local/www/services_unbound_host_edit.php | 307 + usr/local/www/services_wol.php | 218 + usr/local/www/services_wol_edit.php | 171 + usr/local/www/shortcuts.inc | 266 + usr/local/www/shortcuts/pkg_upnp.inc | 11 + usr/local/www/stats.php | 46 + usr/local/www/status.php | 244 + usr/local/www/status_captiveportal.php | 214 + usr/local/www/status_captiveportal_expire.php | 119 + usr/local/www/status_captiveportal_test.php | 122 + .../status_captiveportal_voucher_rolls.php | 137 + .../www/status_captiveportal_vouchers.php | 146 + usr/local/www/status_dhcp_leases.php | 441 + usr/local/www/status_dhcpv6_leases.php | 573 + usr/local/www/status_filter_reload.php | 176 + usr/local/www/status_gateway_groups.php | 165 + usr/local/www/status_gateways.php | 160 + usr/local/www/status_graph.php | 347 + usr/local/www/status_graph_cpu.php | 54 + usr/local/www/status_interfaces.php | 474 + usr/local/www/status_lb_pool.php | 228 + usr/local/www/status_lb_vs.php | 145 + usr/local/www/status_ntpd.php | 271 + usr/local/www/status_openvpn.php | 412 + usr/local/www/status_queues.php | 299 + usr/local/www/status_rrd_graph.php | 749 + usr/local/www/status_rrd_graph_img.php | 1283 + usr/local/www/status_rrd_graph_settings.php | 260 + usr/local/www/status_services.php | 129 + usr/local/www/status_upnp.php | 125 + usr/local/www/status_wireless.php | 196 + usr/local/www/system.php | 524 + usr/local/www/system_advanced_admin.php | 637 + usr/local/www/system_advanced_firewall.php | 570 + usr/local/www/system_advanced_misc.php | 664 + usr/local/www/system_advanced_network.php | 349 + .../www/system_advanced_notifications.php | 370 + usr/local/www/system_advanced_sysctl.php | 276 + usr/local/www/system_authservers.php | 881 + usr/local/www/system_camanager.php | 719 + usr/local/www/system_certmanager.php | 1238 + usr/local/www/system_crlmanager.php | 659 + usr/local/www/system_firmware.php | 316 + usr/local/www/system_firmware_auto.php | 288 + usr/local/www/system_firmware_check.php | 199 + .../www/system_firmware_restorefullbackup.php | 209 + usr/local/www/system_firmware_settings.php | 273 + usr/local/www/system_gateway_groups.php | 208 + usr/local/www/system_gateway_groups_edit.php | 357 + usr/local/www/system_gateways.php | 404 + usr/local/www/system_gateways_edit.php | 877 + usr/local/www/system_groupmanager.php | 545 + .../www/system_groupmanager_addprivs.php | 240 + usr/local/www/system_hasync.php | 359 + usr/local/www/system_routes.php | 373 + usr/local/www/system_routes_edit.php | 415 + usr/local/www/system_usermanager.php | 968 + usr/local/www/system_usermanager_addprivs.php | 207 + .../www/system_usermanager_passwordmg.php | 141 + usr/local/www/system_usermanager_settings.php | 176 + ...stem_usermanager_settings_ldapacpicker.php | 128 + .../www/system_usermanager_settings_test.php | 123 + usr/local/www/themes/_corporate/all.css | 1208 + .../www/themes/_corporate/bottom-loader.js | 10 + usr/local/www/themes/_corporate/graphlink.css | 43 + .../themes/_corporate/images/alert_bgr.gif | Bin 0 -> 3415 bytes .../www/themes/_corporate/images/footer.gif | Bin 0 -> 5630 bytes .../www/themes/_corporate/images/header.gif | Bin 0 -> 16536 bytes .../www/themes/_corporate/images/help.png | Bin 0 -> 324 bytes .../themes/_corporate/images/horizontal.gif | Bin 0 -> 460 bytes .../_corporate/images/icons/favicon.ico | Bin 0 -> 1406 bytes .../_corporate/images/icons/icon_3g.gif | Bin 0 -> 200 bytes .../images/icons/icon_3g_inactive.gif | Bin 0 -> 200 bytes .../_corporate/images/icons/icon_advanced.gif | Bin 0 -> 306 bytes .../images/icons/icon_advanced_s.gif | Bin 0 -> 314 bytes .../_corporate/images/icons/icon_alert.gif | Bin 0 -> 1015 bytes .../images/icons/icon_alias_host.gif | Bin 0 -> 348 bytes .../images/icons/icon_alias_net.gif | Bin 0 -> 331 bytes .../images/icons/icon_alias_port.gif | Bin 0 -> 346 bytes .../images/icons/icon_alias_url.gif | Bin 0 -> 314 bytes .../images/icons/icon_alias_url_reload.gif | Bin 0 -> 1111 bytes .../_corporate/images/icons/icon_block.gif | Bin 0 -> 193 bytes .../images/icons/icon_block_add.gif | Bin 0 -> 192 bytes .../_corporate/images/icons/icon_block_d.gif | Bin 0 -> 193 bytes .../_corporate/images/icons/icon_cablenic.gif | Bin 0 -> 91 bytes .../_corporate/images/icons/icon_cal.gif | Bin 0 -> 646 bytes .../_corporate/images/icons/icon_cal_mo.gif | Bin 0 -> 1060 bytes .../_corporate/images/icons/icon_carp.gif | Bin 0 -> 352 bytes .../_corporate/images/icons/icon_carp_d.gif | Bin 0 -> 357 bytes .../_corporate/images/icons/icon_chain.png | Bin 0 -> 161 bytes .../_corporate/images/icons/icon_check.gif | Bin 0 -> 1291 bytes .../images/icons/icon_clock_green.gif | Bin 0 -> 308 bytes .../images/icons/icon_clock_grey.gif | Bin 0 -> 308 bytes .../images/icons/icon_clock_red.gif | Bin 0 -> 308 bytes .../_corporate/images/icons/icon_close.gif | Bin 0 -> 64 bytes .../images/icons/icon_configure.gif | Bin 0 -> 64 bytes .../_corporate/images/icons/icon_down.gif | Bin 0 -> 1114 bytes .../_corporate/images/icons/icon_down_d.gif | Bin 0 -> 689 bytes .../_corporate/images/icons/icon_down_mo.gif | Bin 0 -> 1117 bytes .../themes/_corporate/images/icons/icon_e.gif | Bin 0 -> 1106 bytes .../_corporate/images/icons/icon_e_mo.gif | Bin 0 -> 1120 bytes .../_corporate/images/icons/icon_error.gif | Bin 0 -> 1312 bytes .../_corporate/images/icons/icon_exclam.gif | Bin 0 -> 1274 bytes .../_corporate/images/icons/icon_flag_de.png | Bin 0 -> 114 bytes .../_corporate/images/icons/icon_flag_en.png | Bin 0 -> 618 bytes .../_corporate/images/icons/icon_flag_es.png | Bin 0 -> 281 bytes .../images/icons/icon_flag_pt_BR.png | Bin 0 -> 502 bytes .../images/icons/icon_frmfld_cert.png | Bin 0 -> 1528 bytes .../images/icons/icon_frmfld_file.png | Bin 0 -> 687 bytes .../images/icons/icon_frmfld_group.png | Bin 0 -> 748 bytes .../images/icons/icon_frmfld_host.png | Bin 0 -> 513 bytes .../images/icons/icon_frmfld_imp.png | Bin 0 -> 644 bytes .../images/icons/icon_frmfld_mail.png | Bin 0 -> 371 bytes .../images/icons/icon_frmfld_pwd.png | Bin 0 -> 620 bytes .../images/icons/icon_frmfld_search.png | Bin 0 -> 593 bytes .../images/icons/icon_frmfld_time.png | Bin 0 -> 646 bytes .../images/icons/icon_frmfld_unknown.png | Bin 0 -> 487 bytes .../images/icons/icon_frmfld_url.png | Bin 0 -> 704 bytes .../images/icons/icon_frmfld_user.png | Bin 0 -> 654 bytes .../images/icons/icon_fw-update.gif | Bin 0 -> 43785 bytes .../_corporate/images/icons/icon_help.gif | Bin 0 -> 1669 bytes .../_corporate/images/icons/icon_ifalias.gif | Bin 0 -> 315 bytes .../images/icons/icon_ifalias_d.gif | Bin 0 -> 315 bytes .../images/icons/icon_import_alias.gif | Bin 0 -> 1109 bytes .../_corporate/images/icons/icon_in.gif | Bin 0 -> 177 bytes .../_corporate/images/icons/icon_in_d.gif | Bin 0 -> 190 bytes .../_corporate/images/icons/icon_info_pkg.gif | Bin 0 -> 1131 bytes .../images/icons/icon_interface_down.gif | Bin 0 -> 88 bytes .../images/icons/icon_interface_up.gif | Bin 0 -> 87 bytes .../_corporate/images/icons/icon_left.gif | Bin 0 -> 1120 bytes .../_corporate/images/icons/icon_left_d.gif | Bin 0 -> 691 bytes .../_corporate/images/icons/icon_left_mo.gif | Bin 0 -> 1129 bytes .../_corporate/images/icons/icon_log.gif | Bin 0 -> 297 bytes .../_corporate/images/icons/icon_log_d.gif | Bin 0 -> 297 bytes .../_corporate/images/icons/icon_log_s.gif | Bin 0 -> 305 bytes .../_corporate/images/icons/icon_log_s_d.gif | Bin 0 -> 305 bytes .../_corporate/images/icons/icon_logs.gif | Bin 0 -> 2092 bytes .../_corporate/images/icons/icon_match.gif | Bin 0 -> 847 bytes .../_corporate/images/icons/icon_match_d.gif | Bin 0 -> 843 bytes .../_corporate/images/icons/icon_minus.gif | Bin 0 -> 61 bytes .../_corporate/images/icons/icon_open.gif | Bin 0 -> 62 bytes .../_corporate/images/icons/icon_other.gif | Bin 0 -> 125 bytes .../_corporate/images/icons/icon_other_d.gif | Bin 0 -> 125 bytes .../_corporate/images/icons/icon_out.gif | Bin 0 -> 179 bytes .../_corporate/images/icons/icon_out_d.gif | Bin 0 -> 189 bytes .../_corporate/images/icons/icon_parp.gif | Bin 0 -> 303 bytes .../_corporate/images/icons/icon_parp_d.gif | Bin 0 -> 303 bytes .../_corporate/images/icons/icon_pass.gif | Bin 0 -> 182 bytes .../_corporate/images/icons/icon_pass_add.gif | Bin 0 -> 183 bytes .../_corporate/images/icons/icon_pass_d.gif | Bin 0 -> 182 bytes .../_corporate/images/icons/icon_plus.gif | Bin 0 -> 1100 bytes .../_corporate/images/icons/icon_plus_bl.gif | Bin 0 -> 1096 bytes .../images/icons/icon_plus_bl_p.gif | Bin 0 -> 1079 bytes .../_corporate/images/icons/icon_plus_d.gif | Bin 0 -> 682 bytes .../_corporate/images/icons/icon_plus_mo.gif | Bin 0 -> 1120 bytes .../_corporate/images/icons/icon_plus_p.gif | Bin 0 -> 1087 bytes .../images/icons/icon_reinstall.gif | Bin 0 -> 1119 bytes .../images/icons/icon_reinstall_d.gif | Bin 0 -> 701 bytes .../images/icons/icon_reinstall_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_reinstall_pkg.gif | Bin 0 -> 1109 bytes .../images/icons/icon_reinstall_pkg_d.gif | Bin 0 -> 694 bytes .../images/icons/icon_reinstall_pkg_mo.gif | Bin 0 -> 1135 bytes .../images/icons/icon_reinstall_xml.gif | Bin 0 -> 1105 bytes .../images/icons/icon_reinstall_xml_d.gif | Bin 0 -> 686 bytes .../images/icons/icon_reinstall_xml_mo.gif | Bin 0 -> 1131 bytes .../_corporate/images/icons/icon_reject.gif | Bin 0 -> 193 bytes .../_corporate/images/icons/icon_reject_d.gif | Bin 0 -> 193 bytes .../_corporate/images/icons/icon_right.gif | Bin 0 -> 1117 bytes .../images/icons/icon_service_restart.gif | Bin 0 -> 1120 bytes .../images/icons/icon_service_restart_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_running.gif | Bin 0 -> 1390 bytes .../images/icons/icon_service_start.gif | Bin 0 -> 1119 bytes .../images/icons/icon_service_start_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_status.gif | Bin 0 -> 2150 bytes .../images/icons/icon_service_stop.gif | Bin 0 -> 1106 bytes .../images/icons/icon_service_stop_d.gif | Bin 0 -> 1100 bytes .../images/icons/icon_service_stopped.gif | Bin 0 -> 1695 bytes .../images/icons/icon_services_restart_mo.gif | Bin 0 -> 1129 bytes .../images/icons/icon_services_start_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_services_stop_mo.gif | Bin 0 -> 1126 bytes .../images/icons/icon_system-group-grey.png | Bin 0 -> 1566 bytes .../images/icons/icon_system-group.png | Bin 0 -> 3128 bytes .../images/icons/icon_system-user-grey.png | Bin 0 -> 1107 bytes .../images/icons/icon_system-user.png | Bin 0 -> 2084 bytes .../images/icons/icon_system_lock_screen.png | Bin 0 -> 1841 bytes .../images/icons/icon_system_logout.png | Bin 0 -> 2087 bytes .../_corporate/images/icons/icon_trapped.gif | Bin 0 -> 1101 bytes .../images/icons/icon_trapped_p.gif | Bin 0 -> 1079 bytes .../_corporate/images/icons/icon_ts_rule.gif | Bin 0 -> 194 bytes .../images/icons/icon_ts_rule_d.gif | Bin 0 -> 193 bytes .../_corporate/images/icons/icon_up.gif | Bin 0 -> 1116 bytes .../_corporate/images/icons/icon_up_d.gif | Bin 0 -> 691 bytes .../_corporate/images/icons/icon_up_mo.gif | Bin 0 -> 1129 bytes .../_corporate/images/icons/icon_wlan.gif | Bin 0 -> 66 bytes .../_corporate/images/icons/icon_wlan_d.gif | Bin 0 -> 100 bytes .../_corporate/images/icons/icon_wol_all.gif | Bin 0 -> 1126 bytes .../images/icons/icon_wzd_nsaved.png | Bin 0 -> 512 bytes .../images/icons/icon_wzd_saved.png | Bin 0 -> 399 bytes .../themes/_corporate/images/icons/icon_x.gif | Bin 0 -> 1111 bytes .../_corporate/images/icons/icon_x_d.gif | Bin 0 -> 680 bytes .../_corporate/images/icons/icon_x_mo.gif | Bin 0 -> 1126 bytes .../_corporate/images/icons/icon_x_p.gif | Bin 0 -> 1090 bytes .../www/themes/_corporate/images/icons/in.gif | Bin 0 -> 177 bytes .../themes/_corporate/images/icons/in_d.gif | Bin 0 -> 190 bytes .../themes/_corporate/images/icons/out.gif | Bin 0 -> 179 bytes .../themes/_corporate/images/icons/out_d.gif | Bin 0 -> 189 bytes .../www/themes/_corporate/images/log.png | Bin 0 -> 270 bytes .../www/themes/_corporate/images/logo.gif | Bin 0 -> 10012 bytes .../themes/_corporate/images/menu_down.gif | Bin 0 -> 61 bytes .../themes/_corporate/images/menu_footer.gif | Bin 0 -> 234 bytes .../themes/_corporate/images/menu_right.gif | Bin 0 -> 61 bytes .../themes/_corporate/images/metal_bgr.gif | Bin 0 -> 734 bytes .../_corporate/images/metal_bgr_red.gif | Bin 0 -> 734 bytes .../_corporate/images/misc/bar_blue.gif | Bin 0 -> 94 bytes .../_corporate/images/misc/bar_gray.gif | Bin 0 -> 94 bytes .../_corporate/images/misc/bar_left.gif | Bin 0 -> 63 bytes .../_corporate/images/misc/bar_right.gif | Bin 0 -> 61 bytes .../images/misc/bullet_toggle_minus.png | Bin 0 -> 154 bytes .../images/misc/bullet_toggle_plus.png | Bin 0 -> 156 bytes .../themes/_corporate/images/misc/button.gif | Bin 0 -> 805 bytes .../themes/_corporate/images/misc/key_128.gif | Bin 0 -> 2766 bytes .../themes/_corporate/images/misc/key_152.gif | Bin 0 -> 2772 bytes .../themes/_corporate/images/misc/key_256.gif | Bin 0 -> 2808 bytes .../themes/_corporate/images/misc/key_64.gif | Bin 0 -> 2723 bytes .../images/misc/left_background.gif | Bin 0 -> 38943 bytes .../themes/_corporate/images/misc/loader.gif | Bin 0 -> 5971 bytes .../_corporate/images/misc/loader_tab.gif | Bin 0 -> 5852 bytes .../themes/_corporate/images/misc/logon.png | Bin 0 -> 27029 bytes .../themes/_corporate/images/misc/plogo_0.gif | Bin 0 -> 2195 bytes .../themes/_corporate/images/misc/plogo_1.gif | Bin 0 -> 3851 bytes .../_corporate/images/misc/plogo_10.gif | Bin 0 -> 10624 bytes .../themes/_corporate/images/misc/plogo_2.gif | Bin 0 -> 4611 bytes .../themes/_corporate/images/misc/plogo_3.gif | Bin 0 -> 5572 bytes .../themes/_corporate/images/misc/plogo_4.gif | Bin 0 -> 7103 bytes .../themes/_corporate/images/misc/plogo_5.gif | Bin 0 -> 8717 bytes .../themes/_corporate/images/misc/plogo_6.gif | Bin 0 -> 9422 bytes .../themes/_corporate/images/misc/plogo_7.gif | Bin 0 -> 9443 bytes .../themes/_corporate/images/misc/plogo_8.gif | Bin 0 -> 10240 bytes .../themes/_corporate/images/misc/plogo_9.gif | Bin 0 -> 10823 bytes .../_corporate/images/misc/progress_bar.gif | Bin 0 -> 44791 bytes .../themes/_corporate/images/misc/tri_c.gif | Bin 0 -> 61 bytes .../_corporate/images/misc/tri_c_black.gif | Bin 0 -> 69 bytes .../themes/_corporate/images/misc/tri_o.gif | Bin 0 -> 58 bytes .../_corporate/images/misc/tri_o_black.gif | Bin 0 -> 67 bytes .../_corporate/images/misc/widget_loader.gif | Bin 0 -> 1064 bytes .../themes/_corporate/images/new_tab_menu.png | Bin 0 -> 444 bytes .../www/themes/_corporate/images/status.png | Bin 0 -> 348 bytes .../themes/_corporate/images/transparent.gif | Bin 0 -> 146 bytes .../_corporate/images/transparent_pixel.gif | Bin 0 -> 43 bytes .../_corporate/javascript/ie7/blank.gif | Bin 0 -> 48 bytes .../javascript/ie7/ie7-box-model.js | 2 + .../_corporate/javascript/ie7/ie7-core.js | 2 + .../javascript/ie7/ie7-css-strict.js | 2 + .../_corporate/javascript/ie7/ie7-css2.js | 2 + .../_corporate/javascript/ie7/ie7-css3.js | 2 + .../_corporate/javascript/ie7/ie7-fixed.js | 2 + .../_corporate/javascript/ie7/ie7-html4.js | 2 + .../_corporate/javascript/ie7/ie7-ie5.js | 2 + .../_corporate/javascript/ie7/ie7-lite-p.js | 3 + .../_corporate/javascript/ie7/ie7-lite.js | 2 + .../_corporate/javascript/ie7/ie7-png.js | 2 + .../_corporate/javascript/ie7/ie7-server.css | 43 + .../javascript/ie7/ie7-standard-p.js | 3 + .../_corporate/javascript/ie7/ie7-standard.js | 2 + .../_corporate/javascript/ie7/test-trans.png | Bin 0 -> 106 bytes .../_corporate/javascript/niftyjsCode.js | 174 + usr/local/www/themes/_corporate/loader.js | 29 + .../www/themes/_corporate/new_tab_menu.css | 101 + .../www/themes/_corporate/new_tab_menu.png | Bin 0 -> 444 bytes .../www/themes/_corporate/rrdcolors.inc.php | 88 + usr/local/www/themes/code-red/all.css | 1300 + .../www/themes/code-red/bottom-loader.js | 10 + usr/local/www/themes/code-red/favicon.ico | Bin 0 -> 1406 bytes usr/local/www/themes/code-red/graphlink.css | 43 + .../www/themes/code-red/images/alert_bgr.png | Bin 0 -> 1407 bytes .../www/themes/code-red/images/background.gif | Bin 0 -> 112090 bytes .../www/themes/code-red/images/background.png | Bin 0 -> 8502 bytes .../themes/code-red/images/button_left.gif | Bin 0 -> 534 bytes .../www/themes/code-red/images/button_mid.gif | Bin 0 -> 149 bytes .../themes/code-red/images/button_right.gif | Bin 0 -> 333 bytes .../www/themes/code-red/images/footer.png | Bin 0 -> 25072 bytes .../www/themes/code-red/images/header.png | Bin 0 -> 43633 bytes usr/local/www/themes/code-red/images/help.png | Bin 0 -> 324 bytes .../www/themes/code-red/images/horizontal.gif | Bin 0 -> 461 bytes .../themes/code-red/images/icons/favicon.ico | Bin 0 -> 1406 bytes .../themes/code-red/images/icons/icon_3g.gif | Bin 0 -> 200 bytes .../images/icons/icon_3g_inactive.gif | Bin 0 -> 200 bytes .../code-red/images/icons/icon_advanced.gif | Bin 0 -> 306 bytes .../code-red/images/icons/icon_advanced_s.gif | Bin 0 -> 314 bytes .../code-red/images/icons/icon_alert.gif | Bin 0 -> 1015 bytes .../code-red/images/icons/icon_alias_host.gif | Bin 0 -> 348 bytes .../code-red/images/icons/icon_alias_net.gif | Bin 0 -> 331 bytes .../code-red/images/icons/icon_alias_port.gif | Bin 0 -> 346 bytes .../code-red/images/icons/icon_alias_url.gif | Bin 0 -> 314 bytes .../images/icons/icon_alias_url_reload.gif | Bin 0 -> 1111 bytes .../code-red/images/icons/icon_block.gif | Bin 0 -> 193 bytes .../code-red/images/icons/icon_block_add.gif | Bin 0 -> 192 bytes .../code-red/images/icons/icon_block_d.gif | Bin 0 -> 193 bytes .../code-red/images/icons/icon_cablenic.gif | Bin 0 -> 109 bytes .../themes/code-red/images/icons/icon_cal.gif | Bin 0 -> 646 bytes .../code-red/images/icons/icon_cal_mo.gif | Bin 0 -> 1060 bytes .../code-red/images/icons/icon_carp.gif | Bin 0 -> 352 bytes .../code-red/images/icons/icon_carp_d.gif | Bin 0 -> 357 bytes .../code-red/images/icons/icon_chain.png | Bin 0 -> 161 bytes .../code-red/images/icons/icon_check.gif | Bin 0 -> 1291 bytes .../images/icons/icon_clock_green.gif | Bin 0 -> 308 bytes .../code-red/images/icons/icon_clock_grey.gif | Bin 0 -> 308 bytes .../code-red/images/icons/icon_clock_red.gif | Bin 0 -> 308 bytes .../code-red/images/icons/icon_close.gif | Bin 0 -> 64 bytes .../code-red/images/icons/icon_configure.gif | Bin 0 -> 64 bytes .../code-red/images/icons/icon_down.gif | Bin 0 -> 1114 bytes .../code-red/images/icons/icon_down_d.gif | Bin 0 -> 689 bytes .../code-red/images/icons/icon_down_mo.gif | Bin 0 -> 1117 bytes .../themes/code-red/images/icons/icon_e.gif | Bin 0 -> 1106 bytes .../code-red/images/icons/icon_e_mo.gif | Bin 0 -> 1120 bytes .../code-red/images/icons/icon_error.gif | Bin 0 -> 1312 bytes .../code-red/images/icons/icon_exclam.gif | Bin 0 -> 1274 bytes .../code-red/images/icons/icon_flag_de.png | Bin 0 -> 114 bytes .../code-red/images/icons/icon_flag_en.png | Bin 0 -> 618 bytes .../code-red/images/icons/icon_flag_es.png | Bin 0 -> 281 bytes .../code-red/images/icons/icon_flag_pt_BR.png | Bin 0 -> 502 bytes .../images/icons/icon_frmfld_cert.png | Bin 0 -> 1528 bytes .../images/icons/icon_frmfld_file.png | Bin 0 -> 687 bytes .../images/icons/icon_frmfld_group.png | Bin 0 -> 748 bytes .../images/icons/icon_frmfld_host.png | Bin 0 -> 513 bytes .../code-red/images/icons/icon_frmfld_imp.png | Bin 0 -> 644 bytes .../images/icons/icon_frmfld_mail.png | Bin 0 -> 371 bytes .../code-red/images/icons/icon_frmfld_pwd.png | Bin 0 -> 620 bytes .../images/icons/icon_frmfld_search.png | Bin 0 -> 593 bytes .../images/icons/icon_frmfld_time.png | Bin 0 -> 646 bytes .../images/icons/icon_frmfld_unknown.png | Bin 0 -> 487 bytes .../code-red/images/icons/icon_frmfld_url.png | Bin 0 -> 704 bytes .../images/icons/icon_frmfld_user.png | Bin 0 -> 654 bytes .../code-red/images/icons/icon_fw-update.gif | Bin 0 -> 43785 bytes .../code-red/images/icons/icon_help.gif | Bin 0 -> 1669 bytes .../code-red/images/icons/icon_ifalias.gif | Bin 0 -> 315 bytes .../code-red/images/icons/icon_ifalias_d.gif | Bin 0 -> 315 bytes .../images/icons/icon_import_alias.gif | Bin 0 -> 1109 bytes .../themes/code-red/images/icons/icon_in.gif | Bin 0 -> 177 bytes .../code-red/images/icons/icon_in_d.gif | Bin 0 -> 190 bytes .../code-red/images/icons/icon_info_pkg.gif | Bin 0 -> 1131 bytes .../images/icons/icon_interface_down.gif | Bin 0 -> 88 bytes .../images/icons/icon_interface_up.gif | Bin 0 -> 87 bytes .../code-red/images/icons/icon_left.gif | Bin 0 -> 1120 bytes .../code-red/images/icons/icon_left_d.gif | Bin 0 -> 691 bytes .../code-red/images/icons/icon_left_mo.gif | Bin 0 -> 1129 bytes .../themes/code-red/images/icons/icon_log.gif | Bin 0 -> 297 bytes .../code-red/images/icons/icon_log_d.gif | Bin 0 -> 297 bytes .../code-red/images/icons/icon_log_s.gif | Bin 0 -> 305 bytes .../code-red/images/icons/icon_log_s_d.gif | Bin 0 -> 305 bytes .../code-red/images/icons/icon_logs.gif | Bin 0 -> 2092 bytes .../code-red/images/icons/icon_match.gif | Bin 0 -> 847 bytes .../code-red/images/icons/icon_match_d.gif | Bin 0 -> 843 bytes .../code-red/images/icons/icon_minus.gif | Bin 0 -> 61 bytes .../code-red/images/icons/icon_open.gif | Bin 0 -> 62 bytes .../code-red/images/icons/icon_other.gif | Bin 0 -> 125 bytes .../code-red/images/icons/icon_other_d.gif | Bin 0 -> 125 bytes .../themes/code-red/images/icons/icon_out.gif | Bin 0 -> 179 bytes .../code-red/images/icons/icon_out_d.gif | Bin 0 -> 189 bytes .../code-red/images/icons/icon_parp.gif | Bin 0 -> 303 bytes .../code-red/images/icons/icon_parp_d.gif | Bin 0 -> 303 bytes .../code-red/images/icons/icon_pass.gif | Bin 0 -> 182 bytes .../code-red/images/icons/icon_pass_add.gif | Bin 0 -> 183 bytes .../code-red/images/icons/icon_pass_d.gif | Bin 0 -> 182 bytes .../code-red/images/icons/icon_plus.gif | Bin 0 -> 1100 bytes .../code-red/images/icons/icon_plus_bl.gif | Bin 0 -> 1096 bytes .../code-red/images/icons/icon_plus_bl_p.gif | Bin 0 -> 1079 bytes .../code-red/images/icons/icon_plus_d.gif | Bin 0 -> 682 bytes .../code-red/images/icons/icon_plus_mo.gif | Bin 0 -> 1120 bytes .../code-red/images/icons/icon_plus_p.gif | Bin 0 -> 1087 bytes .../code-red/images/icons/icon_reinstall.gif | Bin 0 -> 1119 bytes .../images/icons/icon_reinstall_d.gif | Bin 0 -> 701 bytes .../images/icons/icon_reinstall_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_reinstall_pkg.gif | Bin 0 -> 1109 bytes .../images/icons/icon_reinstall_pkg_d.gif | Bin 0 -> 694 bytes .../images/icons/icon_reinstall_pkg_mo.gif | Bin 0 -> 1135 bytes .../images/icons/icon_reinstall_xml.gif | Bin 0 -> 1105 bytes .../images/icons/icon_reinstall_xml_d.gif | Bin 0 -> 686 bytes .../images/icons/icon_reinstall_xml_mo.gif | Bin 0 -> 1131 bytes .../code-red/images/icons/icon_reject.gif | Bin 0 -> 193 bytes .../code-red/images/icons/icon_reject_d.gif | Bin 0 -> 193 bytes .../code-red/images/icons/icon_right.gif | Bin 0 -> 1117 bytes .../images/icons/icon_service_restart.gif | Bin 0 -> 1120 bytes .../images/icons/icon_service_restart_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_running.gif | Bin 0 -> 1390 bytes .../images/icons/icon_service_start.gif | Bin 0 -> 1119 bytes .../images/icons/icon_service_start_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_status.gif | Bin 0 -> 2150 bytes .../images/icons/icon_service_stop.gif | Bin 0 -> 1106 bytes .../images/icons/icon_service_stop_d.gif | Bin 0 -> 1100 bytes .../images/icons/icon_service_stopped.gif | Bin 0 -> 1695 bytes .../images/icons/icon_services_restart_mo.gif | Bin 0 -> 1129 bytes .../images/icons/icon_services_start_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_services_stop_mo.gif | Bin 0 -> 1126 bytes .../images/icons/icon_system-group-grey.png | Bin 0 -> 1566 bytes .../images/icons/icon_system-group.png | Bin 0 -> 3128 bytes .../images/icons/icon_system-user-grey.png | Bin 0 -> 1107 bytes .../images/icons/icon_system-user.png | Bin 0 -> 2084 bytes .../images/icons/icon_system_lock_screen.png | Bin 0 -> 1841 bytes .../images/icons/icon_system_logout.png | Bin 0 -> 2087 bytes .../code-red/images/icons/icon_trapped.gif | Bin 0 -> 1101 bytes .../code-red/images/icons/icon_trapped_p.gif | Bin 0 -> 1079 bytes .../code-red/images/icons/icon_ts_rule.gif | Bin 0 -> 194 bytes .../code-red/images/icons/icon_ts_rule_d.gif | Bin 0 -> 193 bytes .../themes/code-red/images/icons/icon_up.gif | Bin 0 -> 1116 bytes .../code-red/images/icons/icon_up_d.gif | Bin 0 -> 691 bytes .../code-red/images/icons/icon_up_mo.gif | Bin 0 -> 1129 bytes .../code-red/images/icons/icon_wlan.gif | Bin 0 -> 66 bytes .../code-red/images/icons/icon_wlan_d.gif | Bin 0 -> 100 bytes .../code-red/images/icons/icon_wol_all.gif | Bin 0 -> 1126 bytes .../code-red/images/icons/icon_wzd_nsaved.png | Bin 0 -> 512 bytes .../code-red/images/icons/icon_wzd_saved.png | Bin 0 -> 399 bytes .../themes/code-red/images/icons/icon_x.gif | Bin 0 -> 1111 bytes .../themes/code-red/images/icons/icon_x_d.gif | Bin 0 -> 680 bytes .../code-red/images/icons/icon_x_mo.gif | Bin 0 -> 1126 bytes .../themes/code-red/images/icons/icon_x_p.gif | Bin 0 -> 1090 bytes .../www/themes/code-red/images/icons/in.gif | Bin 0 -> 177 bytes .../www/themes/code-red/images/icons/in_d.gif | Bin 0 -> 190 bytes .../www/themes/code-red/images/icons/out.gif | Bin 0 -> 179 bytes .../themes/code-red/images/icons/out_d.gif | Bin 0 -> 189 bytes usr/local/www/themes/code-red/images/log.png | Bin 0 -> 270 bytes usr/local/www/themes/code-red/images/logo.gif | Bin 0 -> 7555 bytes .../www/themes/code-red/images/logobig.jpg | Bin 0 -> 7697 bytes .../code-red/images/logon-background.gif | Bin 0 -> 114596 bytes .../www/themes/code-red/images/menu_down.gif | Bin 0 -> 61 bytes .../themes/code-red/images/menu_footer.gif | Bin 0 -> 234 bytes .../www/themes/code-red/images/menu_right.gif | Bin 0 -> 61 bytes .../www/themes/code-red/images/menubgr.png | Bin 0 -> 132 bytes .../themes/code-red/images/menubgr_footer.png | Bin 0 -> 372 bytes .../code-red/images/menubgr_highlight.png | Bin 0 -> 129 bytes .../www/themes/code-red/images/metal_bgr.gif | Bin 0 -> 734 bytes .../themes/code-red/images/metal_bgr_red.gif | Bin 0 -> 734 bytes .../code-red/images/misc/background.gif | Bin 0 -> 115138 bytes .../themes/code-red/images/misc/bar_blue.gif | Bin 0 -> 94 bytes .../themes/code-red/images/misc/bar_gray.gif | Bin 0 -> 94 bytes .../themes/code-red/images/misc/bar_left.gif | Bin 0 -> 289 bytes .../themes/code-red/images/misc/bar_right.gif | Bin 0 -> 288 bytes .../images/misc/bullet_toggle_minus.png | Bin 0 -> 154 bytes .../images/misc/bullet_toggle_plus.png | Bin 0 -> 156 bytes .../themes/code-red/images/misc/button.gif | Bin 0 -> 805 bytes .../www/themes/code-red/images/misc/graph.png | Bin 0 -> 2256 bytes .../themes/code-red/images/misc/key_128.gif | Bin 0 -> 2766 bytes .../themes/code-red/images/misc/key_152.gif | Bin 0 -> 2772 bytes .../themes/code-red/images/misc/key_256.gif | Bin 0 -> 2808 bytes .../themes/code-red/images/misc/key_64.gif | Bin 0 -> 2723 bytes .../code-red/images/misc/left_background.gif | Bin 0 -> 38943 bytes .../themes/code-red/images/misc/loader.gif | Bin 0 -> 5971 bytes .../code-red/images/misc/loader_all.gif | Bin 0 -> 1398 bytes .../code-red/images/misc/loader_filter.gif | Bin 0 -> 1436 bytes .../code-red/images/misc/loader_tab.gif | Bin 0 -> 5852 bytes .../www/themes/code-red/images/misc/logon.png | Bin 0 -> 65956 bytes .../themes/code-red/images/misc/plogo_0.gif | Bin 0 -> 2195 bytes .../themes/code-red/images/misc/plogo_1.gif | Bin 0 -> 3851 bytes .../themes/code-red/images/misc/plogo_10.gif | Bin 0 -> 10624 bytes .../themes/code-red/images/misc/plogo_2.gif | Bin 0 -> 4611 bytes .../themes/code-red/images/misc/plogo_3.gif | Bin 0 -> 5572 bytes .../themes/code-red/images/misc/plogo_4.gif | Bin 0 -> 7103 bytes .../themes/code-red/images/misc/plogo_5.gif | Bin 0 -> 8717 bytes .../themes/code-red/images/misc/plogo_6.gif | Bin 0 -> 9422 bytes .../themes/code-red/images/misc/plogo_7.gif | Bin 0 -> 9443 bytes .../themes/code-red/images/misc/plogo_8.gif | Bin 0 -> 10240 bytes .../themes/code-red/images/misc/plogo_9.gif | Bin 0 -> 10823 bytes .../code-red/images/misc/progress_bar.gif | Bin 0 -> 44791 bytes .../themes/code-red/images/misc/rrd_error.png | Bin 0 -> 38898 bytes .../code-red/images/misc/status_alerter.gif | Bin 0 -> 2203 bytes .../images/misc/status_carpmaster.gif | Bin 0 -> 1558 bytes .../code-red/images/misc/status_left.gif | Bin 0 -> 600 bytes .../images/misc/status_page_loading.gif | Bin 0 -> 1621 bytes .../images/misc/status_reload_all.gif | Bin 0 -> 1611 bytes .../images/misc/status_reload_filter.gif | Bin 0 -> 1612 bytes .../code-red/images/misc/status_right.gif | Bin 0 -> 599 bytes .../www/themes/code-red/images/misc/tri_c.gif | Bin 0 -> 61 bytes .../code-red/images/misc/tri_c_black.gif | Bin 0 -> 69 bytes .../www/themes/code-red/images/misc/tri_o.gif | Bin 0 -> 58 bytes .../code-red/images/misc/tri_o_black.gif | Bin 0 -> 67 bytes .../code-red/images/misc/widget_loader.gif | Bin 0 -> 2545 bytes .../themes/code-red/images/new_tab_menu.png | Bin 0 -> 444 bytes .../www/themes/code-red/images/status.png | Bin 0 -> 348 bytes .../themes/code-red/images/transparent.gif | Bin 0 -> 146 bytes .../code-red/images/transparent_pixel.gif | Bin 0 -> 43 bytes .../images/wizards/initial/joincluster.gif | Bin 0 -> 10076 bytes .../images/wizards/initial/joincluster_mo.gif | Bin 0 -> 10153 bytes .../images/wizards/initial/restore.gif | Bin 0 -> 9199 bytes .../images/wizards/initial/restore_mo.gif | Bin 0 -> 9099 bytes .../images/wizards/initial/standalone.gif | Bin 0 -> 7265 bytes .../images/wizards/initial/standalone_mo.gif | Bin 0 -> 7382 bytes .../wizards/initial/startnewcluster.gif | Bin 0 -> 10175 bytes .../wizards/initial/startnewcluster_mo.gif | Bin 0 -> 10030 bytes .../themes/code-red/javascript/ie7/blank.gif | Bin 0 -> 48 bytes .../code-red/javascript/ie7/ie7-box-model.js | 2 + .../code-red/javascript/ie7/ie7-core.js | 2 + .../code-red/javascript/ie7/ie7-css-strict.js | 2 + .../code-red/javascript/ie7/ie7-css2.js | 2 + .../code-red/javascript/ie7/ie7-css3.js | 2 + .../code-red/javascript/ie7/ie7-fixed.js | 2 + .../code-red/javascript/ie7/ie7-html4.js | 2 + .../themes/code-red/javascript/ie7/ie7-ie5.js | 2 + .../code-red/javascript/ie7/ie7-lite-p.js | 3 + .../code-red/javascript/ie7/ie7-lite.js | 2 + .../themes/code-red/javascript/ie7/ie7-png.js | 2 + .../code-red/javascript/ie7/ie7-server.css | 43 + .../code-red/javascript/ie7/ie7-standard-p.js | 3 + .../code-red/javascript/ie7/ie7-standard.js | 2 + .../code-red/javascript/ie7/test-trans.png | Bin 0 -> 106 bytes .../code-red/javascript/img/grey-40.png | Bin 0 -> 223 bytes .../code-red/javascript/img/submenu-off.gif | Bin 0 -> 65 bytes .../code-red/javascript/img/submenu-on.gif | Bin 0 -> 65 bytes .../code-red/javascript/img/white-90.png | Bin 0 -> 223 bytes .../www/themes/code-red/javascript/img/x.gif | Bin 0 -> 43 bytes .../themes/code-red/javascript/niftyjsCode.js | 174 + .../code-red/javascript/transmenu-body.php | 51 + .../code-red/javascript/transmenu-head.php | 85 + .../themes/code-red/javascript/transmenu.org | 785 + .../themes/code-red/javascript/transmenuC.js | 86 + .../www/themes/code-red/jsevents/body.def | 7 + usr/local/www/themes/code-red/loader.js | 29 + usr/local/www/themes/code-red/login.css | 1136 + usr/local/www/themes/code-red/menu.inc | 178 + .../www/themes/code-red/new_tab_menu.css | 101 + usr/local/www/themes/code-red/no_big_logo | 1 + .../www/themes/code-red/rrdcolors.inc.php | 88 + .../www/themes/code-red/styles/menustyles.css | 44 + .../www/themes/code-red/styles/transmenu.css | 75 + usr/local/www/themes/code-red/wizard.css | 1068 + usr/local/www/themes/metallic/all.css | 1268 + .../www/themes/metallic/apple-touch-icon.png | Bin 0 -> 4068 bytes .../www/themes/metallic/bottom-loader.js | 10 + .../www/themes/metallic/images/alert_bgr.gif | Bin 0 -> 3415 bytes .../www/themes/metallic/images/footer.gif | Bin 0 -> 20440 bytes .../www/themes/metallic/images/header.gif | Bin 0 -> 33347 bytes usr/local/www/themes/metallic/images/help.png | Bin 0 -> 324 bytes .../www/themes/metallic/images/horizontal.gif | Bin 0 -> 461 bytes .../themes/metallic/images/icons/favicon.ico | Bin 0 -> 1406 bytes .../themes/metallic/images/icons/icon_3g.gif | Bin 0 -> 200 bytes .../images/icons/icon_3g_inactive.gif | Bin 0 -> 200 bytes .../metallic/images/icons/icon_advanced.gif | Bin 0 -> 306 bytes .../metallic/images/icons/icon_advanced_s.gif | Bin 0 -> 314 bytes .../metallic/images/icons/icon_alert.gif | Bin 0 -> 1015 bytes .../metallic/images/icons/icon_alias_host.gif | Bin 0 -> 348 bytes .../metallic/images/icons/icon_alias_net.gif | Bin 0 -> 331 bytes .../metallic/images/icons/icon_alias_port.gif | Bin 0 -> 346 bytes .../metallic/images/icons/icon_alias_url.gif | Bin 0 -> 314 bytes .../images/icons/icon_alias_url_reload.gif | Bin 0 -> 1111 bytes .../metallic/images/icons/icon_block.gif | Bin 0 -> 193 bytes .../metallic/images/icons/icon_block_add.gif | Bin 0 -> 192 bytes .../metallic/images/icons/icon_block_d.gif | Bin 0 -> 193 bytes .../metallic/images/icons/icon_cablenic.gif | Bin 0 -> 91 bytes .../themes/metallic/images/icons/icon_cal.gif | Bin 0 -> 646 bytes .../metallic/images/icons/icon_cal_mo.gif | Bin 0 -> 1060 bytes .../metallic/images/icons/icon_carp.gif | Bin 0 -> 352 bytes .../metallic/images/icons/icon_carp_d.gif | Bin 0 -> 357 bytes .../metallic/images/icons/icon_chain.png | Bin 0 -> 161 bytes .../metallic/images/icons/icon_check.gif | Bin 0 -> 1291 bytes .../images/icons/icon_clock_green.gif | Bin 0 -> 308 bytes .../metallic/images/icons/icon_clock_grey.gif | Bin 0 -> 308 bytes .../metallic/images/icons/icon_clock_red.gif | Bin 0 -> 308 bytes .../metallic/images/icons/icon_close.gif | Bin 0 -> 64 bytes .../metallic/images/icons/icon_configure.gif | Bin 0 -> 64 bytes .../metallic/images/icons/icon_down.gif | Bin 0 -> 1114 bytes .../metallic/images/icons/icon_down_d.gif | Bin 0 -> 689 bytes .../metallic/images/icons/icon_down_mo.gif | Bin 0 -> 1117 bytes .../themes/metallic/images/icons/icon_e.gif | Bin 0 -> 1106 bytes .../metallic/images/icons/icon_e_mo.gif | Bin 0 -> 1120 bytes .../metallic/images/icons/icon_error.gif | Bin 0 -> 1312 bytes .../metallic/images/icons/icon_exclam.gif | Bin 0 -> 1274 bytes .../metallic/images/icons/icon_flag_de.png | Bin 0 -> 114 bytes .../metallic/images/icons/icon_flag_en.png | Bin 0 -> 618 bytes .../metallic/images/icons/icon_flag_es.png | Bin 0 -> 281 bytes .../metallic/images/icons/icon_flag_pt_BR.png | Bin 0 -> 502 bytes .../images/icons/icon_frmfld_cert.png | Bin 0 -> 1528 bytes .../images/icons/icon_frmfld_file.png | Bin 0 -> 687 bytes .../images/icons/icon_frmfld_group.png | Bin 0 -> 748 bytes .../images/icons/icon_frmfld_host.png | Bin 0 -> 513 bytes .../metallic/images/icons/icon_frmfld_imp.png | Bin 0 -> 644 bytes .../images/icons/icon_frmfld_mail.png | Bin 0 -> 371 bytes .../metallic/images/icons/icon_frmfld_pwd.png | Bin 0 -> 620 bytes .../images/icons/icon_frmfld_search.png | Bin 0 -> 593 bytes .../images/icons/icon_frmfld_time.png | Bin 0 -> 646 bytes .../images/icons/icon_frmfld_unknown.png | Bin 0 -> 487 bytes .../metallic/images/icons/icon_frmfld_url.png | Bin 0 -> 704 bytes .../images/icons/icon_frmfld_user.png | Bin 0 -> 654 bytes .../metallic/images/icons/icon_fw-update.gif | Bin 0 -> 43785 bytes .../metallic/images/icons/icon_help.gif | Bin 0 -> 1669 bytes .../metallic/images/icons/icon_ifalias.gif | Bin 0 -> 315 bytes .../metallic/images/icons/icon_ifalias_d.gif | Bin 0 -> 315 bytes .../images/icons/icon_import_alias.gif | Bin 0 -> 1109 bytes .../themes/metallic/images/icons/icon_in.gif | Bin 0 -> 177 bytes .../metallic/images/icons/icon_in_d.gif | Bin 0 -> 190 bytes .../metallic/images/icons/icon_info_pkg.gif | Bin 0 -> 1131 bytes .../images/icons/icon_interface_down.gif | Bin 0 -> 88 bytes .../images/icons/icon_interface_up.gif | Bin 0 -> 87 bytes .../metallic/images/icons/icon_left.gif | Bin 0 -> 1120 bytes .../metallic/images/icons/icon_left_d.gif | Bin 0 -> 691 bytes .../metallic/images/icons/icon_left_mo.gif | Bin 0 -> 1129 bytes .../themes/metallic/images/icons/icon_log.gif | Bin 0 -> 297 bytes .../metallic/images/icons/icon_log_d.gif | Bin 0 -> 297 bytes .../metallic/images/icons/icon_log_s.gif | Bin 0 -> 305 bytes .../metallic/images/icons/icon_log_s_d.gif | Bin 0 -> 305 bytes .../metallic/images/icons/icon_logs.gif | Bin 0 -> 2092 bytes .../metallic/images/icons/icon_match.gif | Bin 0 -> 847 bytes .../metallic/images/icons/icon_match_d.gif | Bin 0 -> 843 bytes .../metallic/images/icons/icon_minus.gif | Bin 0 -> 61 bytes .../metallic/images/icons/icon_open.gif | Bin 0 -> 62 bytes .../metallic/images/icons/icon_other.gif | Bin 0 -> 125 bytes .../metallic/images/icons/icon_other_d.gif | Bin 0 -> 125 bytes .../themes/metallic/images/icons/icon_out.gif | Bin 0 -> 179 bytes .../metallic/images/icons/icon_out_d.gif | Bin 0 -> 189 bytes .../metallic/images/icons/icon_parp.gif | Bin 0 -> 303 bytes .../metallic/images/icons/icon_parp_d.gif | Bin 0 -> 303 bytes .../metallic/images/icons/icon_pass.gif | Bin 0 -> 182 bytes .../metallic/images/icons/icon_pass_add.gif | Bin 0 -> 183 bytes .../metallic/images/icons/icon_pass_d.gif | Bin 0 -> 182 bytes .../metallic/images/icons/icon_plus.gif | Bin 0 -> 1100 bytes .../metallic/images/icons/icon_plus_bl.gif | Bin 0 -> 1096 bytes .../metallic/images/icons/icon_plus_bl_p.gif | Bin 0 -> 1079 bytes .../metallic/images/icons/icon_plus_d.gif | Bin 0 -> 682 bytes .../metallic/images/icons/icon_plus_mo.gif | Bin 0 -> 1120 bytes .../metallic/images/icons/icon_plus_p.gif | Bin 0 -> 1087 bytes .../metallic/images/icons/icon_reinstall.gif | Bin 0 -> 1119 bytes .../images/icons/icon_reinstall_d.gif | Bin 0 -> 701 bytes .../images/icons/icon_reinstall_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_reinstall_pkg.gif | Bin 0 -> 1109 bytes .../images/icons/icon_reinstall_pkg_d.gif | Bin 0 -> 694 bytes .../images/icons/icon_reinstall_pkg_mo.gif | Bin 0 -> 1135 bytes .../images/icons/icon_reinstall_xml.gif | Bin 0 -> 1105 bytes .../images/icons/icon_reinstall_xml_d.gif | Bin 0 -> 686 bytes .../images/icons/icon_reinstall_xml_mo.gif | Bin 0 -> 1131 bytes .../metallic/images/icons/icon_reject.gif | Bin 0 -> 193 bytes .../metallic/images/icons/icon_reject_d.gif | Bin 0 -> 193 bytes .../metallic/images/icons/icon_right.gif | Bin 0 -> 1117 bytes .../images/icons/icon_service_restart.gif | Bin 0 -> 1120 bytes .../images/icons/icon_service_restart_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_running.gif | Bin 0 -> 1390 bytes .../images/icons/icon_service_start.gif | Bin 0 -> 1119 bytes .../images/icons/icon_service_start_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_status.gif | Bin 0 -> 2150 bytes .../images/icons/icon_service_stop.gif | Bin 0 -> 1106 bytes .../images/icons/icon_service_stop_d.gif | Bin 0 -> 1100 bytes .../images/icons/icon_service_stopped.gif | Bin 0 -> 1695 bytes .../images/icons/icon_services_restart_mo.gif | Bin 0 -> 1129 bytes .../images/icons/icon_services_start_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_services_stop_mo.gif | Bin 0 -> 1126 bytes .../images/icons/icon_system-group-grey.png | Bin 0 -> 1566 bytes .../images/icons/icon_system-group.png | Bin 0 -> 3128 bytes .../images/icons/icon_system-user-grey.png | Bin 0 -> 1107 bytes .../images/icons/icon_system-user.png | Bin 0 -> 2084 bytes .../images/icons/icon_system_lock_screen.png | Bin 0 -> 1841 bytes .../images/icons/icon_system_logout.png | Bin 0 -> 2087 bytes .../metallic/images/icons/icon_trapped.gif | Bin 0 -> 1101 bytes .../metallic/images/icons/icon_trapped_p.gif | Bin 0 -> 1079 bytes .../metallic/images/icons/icon_ts_rule.gif | Bin 0 -> 194 bytes .../metallic/images/icons/icon_ts_rule_d.gif | Bin 0 -> 193 bytes .../themes/metallic/images/icons/icon_up.gif | Bin 0 -> 1116 bytes .../metallic/images/icons/icon_up_d.gif | Bin 0 -> 691 bytes .../metallic/images/icons/icon_up_mo.gif | Bin 0 -> 1129 bytes .../metallic/images/icons/icon_wlan.gif | Bin 0 -> 66 bytes .../metallic/images/icons/icon_wlan_d.gif | Bin 0 -> 100 bytes .../metallic/images/icons/icon_wol_all.gif | Bin 0 -> 1126 bytes .../metallic/images/icons/icon_wzd_nsaved.png | Bin 0 -> 512 bytes .../metallic/images/icons/icon_wzd_saved.png | Bin 0 -> 399 bytes .../themes/metallic/images/icons/icon_x.gif | Bin 0 -> 1111 bytes .../themes/metallic/images/icons/icon_x_d.gif | Bin 0 -> 680 bytes .../metallic/images/icons/icon_x_mo.gif | Bin 0 -> 1126 bytes .../themes/metallic/images/icons/icon_x_p.gif | Bin 0 -> 1090 bytes .../www/themes/metallic/images/icons/in.gif | Bin 0 -> 177 bytes .../www/themes/metallic/images/icons/in_d.gif | Bin 0 -> 190 bytes .../www/themes/metallic/images/icons/out.gif | Bin 0 -> 179 bytes .../themes/metallic/images/icons/out_d.gif | Bin 0 -> 189 bytes usr/local/www/themes/metallic/images/log.png | Bin 0 -> 270 bytes usr/local/www/themes/metallic/images/logo.gif | Bin 0 -> 10012 bytes .../www/themes/metallic/images/logobig.jpg | Bin 0 -> 7540 bytes .../www/themes/metallic/images/menu_down.gif | Bin 0 -> 61 bytes .../themes/metallic/images/menu_footer.gif | Bin 0 -> 234 bytes .../www/themes/metallic/images/menu_right.gif | Bin 0 -> 61 bytes .../www/themes/metallic/images/metal_bgr.gif | Bin 0 -> 734 bytes .../themes/metallic/images/metal_bgr_red.gif | Bin 0 -> 734 bytes .../themes/metallic/images/misc/bar_blue.gif | Bin 0 -> 94 bytes .../themes/metallic/images/misc/bar_gray.gif | Bin 0 -> 94 bytes .../themes/metallic/images/misc/bar_left.gif | Bin 0 -> 289 bytes .../themes/metallic/images/misc/bar_right.gif | Bin 0 -> 288 bytes .../images/misc/bullet_toggle_minus.png | Bin 0 -> 154 bytes .../images/misc/bullet_toggle_plus.png | Bin 0 -> 156 bytes .../themes/metallic/images/misc/button.gif | Bin 0 -> 805 bytes .../www/themes/metallic/images/misc/graph.png | Bin 0 -> 2256 bytes .../themes/metallic/images/misc/key_128.gif | Bin 0 -> 2766 bytes .../themes/metallic/images/misc/key_152.gif | Bin 0 -> 2772 bytes .../themes/metallic/images/misc/key_256.gif | Bin 0 -> 2808 bytes .../themes/metallic/images/misc/key_64.gif | Bin 0 -> 2723 bytes .../metallic/images/misc/left_background.gif | Bin 0 -> 38943 bytes .../themes/metallic/images/misc/loader.gif | Bin 0 -> 5971 bytes .../metallic/images/misc/loader_all.gif | Bin 0 -> 1398 bytes .../metallic/images/misc/loader_filter.gif | Bin 0 -> 1436 bytes .../metallic/images/misc/loader_tab.gif | Bin 0 -> 5852 bytes .../www/themes/metallic/images/misc/logon.png | Bin 0 -> 27029 bytes .../metallic/images/misc/progress_bar.gif | Bin 0 -> 44791 bytes .../themes/metallic/images/misc/rrd_error.png | Bin 0 -> 38898 bytes .../metallic/images/misc/status_alerter.gif | Bin 0 -> 2203 bytes .../images/misc/status_carpmaster.gif | Bin 0 -> 1558 bytes .../metallic/images/misc/status_left.gif | Bin 0 -> 600 bytes .../images/misc/status_page_loading.gif | Bin 0 -> 1621 bytes .../images/misc/status_reload_all.gif | Bin 0 -> 1611 bytes .../images/misc/status_reload_filter.gif | Bin 0 -> 1612 bytes .../metallic/images/misc/status_right.gif | Bin 0 -> 599 bytes .../www/themes/metallic/images/misc/tri_c.gif | Bin 0 -> 61 bytes .../metallic/images/misc/tri_c_black.gif | Bin 0 -> 84 bytes .../www/themes/metallic/images/misc/tri_o.gif | Bin 0 -> 58 bytes .../metallic/images/misc/tri_o_black.gif | Bin 0 -> 82 bytes .../metallic/images/misc/widget_loader.gif | Bin 0 -> 1064 bytes .../themes/metallic/images/new_tab_menu.png | Bin 0 -> 444 bytes .../www/themes/metallic/images/status.png | Bin 0 -> 348 bytes .../themes/metallic/images/transparent.gif | Bin 0 -> 146 bytes .../metallic/images/transparent_pixel.gif | Bin 0 -> 43 bytes .../images/wizards/initial/joincluster.gif | Bin 0 -> 10076 bytes .../images/wizards/initial/joincluster_mo.gif | Bin 0 -> 10153 bytes .../images/wizards/initial/restore.gif | Bin 0 -> 9199 bytes .../images/wizards/initial/restore_mo.gif | Bin 0 -> 9099 bytes .../images/wizards/initial/standalone.gif | Bin 0 -> 7265 bytes .../images/wizards/initial/standalone_mo.gif | Bin 0 -> 7382 bytes .../wizards/initial/startnewcluster.gif | Bin 0 -> 10175 bytes .../wizards/initial/startnewcluster_mo.gif | Bin 0 -> 10030 bytes .../themes/metallic/javascript/ie7/blank.gif | Bin 0 -> 48 bytes .../metallic/javascript/ie7/ie7-box-model.js | 2 + .../metallic/javascript/ie7/ie7-core.js | 2 + .../metallic/javascript/ie7/ie7-css-strict.js | 2 + .../metallic/javascript/ie7/ie7-css2.js | 2 + .../metallic/javascript/ie7/ie7-css3.js | 2 + .../metallic/javascript/ie7/ie7-fixed.js | 2 + .../metallic/javascript/ie7/ie7-html4.js | 2 + .../themes/metallic/javascript/ie7/ie7-ie5.js | 2 + .../metallic/javascript/ie7/ie7-lite-p.js | 3 + .../metallic/javascript/ie7/ie7-lite.js | 2 + .../themes/metallic/javascript/ie7/ie7-png.js | 2 + .../metallic/javascript/ie7/ie7-server.css | 43 + .../metallic/javascript/ie7/ie7-standard-p.js | 3 + .../metallic/javascript/ie7/ie7-standard.js | 2 + .../metallic/javascript/ie7/test-trans.png | Bin 0 -> 106 bytes .../themes/metallic/javascript/niftyjsCode.js | 174 + usr/local/www/themes/metallic/loader.js | 29 + usr/local/www/themes/metallic/login.css | 1127 + .../www/themes/metallic/new_tab_menu.css | 101 + usr/local/www/themes/metallic/no_big_logo | 1 + .../www/themes/metallic/rrdcolors.inc.php | 88 + usr/local/www/themes/nervecenter/all.css | 1300 + .../themes/nervecenter/apple-touch-icon.png | Bin 0 -> 4068 bytes .../www/themes/nervecenter/bottom-loader.js | 10 + usr/local/www/themes/nervecenter/favicon.ico | Bin 0 -> 1406 bytes .../www/themes/nervecenter/graphlink.css | 43 + .../themes/nervecenter/images/alert_bgr.png | Bin 0 -> 10240 bytes .../themes/nervecenter/images/background.gif | Bin 0 -> 44574 bytes .../themes/nervecenter/images/background.png | Bin 0 -> 8502 bytes .../www/themes/nervecenter/images/footer.png | Bin 0 -> 41755 bytes .../www/themes/nervecenter/images/header.png | Bin 0 -> 49602 bytes .../www/themes/nervecenter/images/help.png | Bin 0 -> 324 bytes .../themes/nervecenter/images/horizontal.gif | Bin 0 -> 461 bytes .../nervecenter/images/icons/favicon.ico | Bin 0 -> 1406 bytes .../nervecenter/images/icons/icon_3g.gif | Bin 0 -> 200 bytes .../images/icons/icon_3g_inactive.gif | Bin 0 -> 200 bytes .../images/icons/icon_advanced.gif | Bin 0 -> 306 bytes .../images/icons/icon_advanced_s.gif | Bin 0 -> 314 bytes .../nervecenter/images/icons/icon_alert.gif | Bin 0 -> 1015 bytes .../images/icons/icon_alias_host.gif | Bin 0 -> 348 bytes .../images/icons/icon_alias_net.gif | Bin 0 -> 331 bytes .../images/icons/icon_alias_port.gif | Bin 0 -> 346 bytes .../images/icons/icon_alias_url.gif | Bin 0 -> 314 bytes .../images/icons/icon_alias_url_reload.gif | Bin 0 -> 1111 bytes .../nervecenter/images/icons/icon_block.gif | Bin 0 -> 193 bytes .../images/icons/icon_block_add.gif | Bin 0 -> 192 bytes .../nervecenter/images/icons/icon_block_d.gif | Bin 0 -> 193 bytes .../images/icons/icon_cablenic.gif | Bin 0 -> 91 bytes .../nervecenter/images/icons/icon_cal.gif | Bin 0 -> 646 bytes .../nervecenter/images/icons/icon_cal_mo.gif | Bin 0 -> 1060 bytes .../nervecenter/images/icons/icon_carp.gif | Bin 0 -> 352 bytes .../nervecenter/images/icons/icon_carp_d.gif | Bin 0 -> 357 bytes .../nervecenter/images/icons/icon_chain.png | Bin 0 -> 161 bytes .../nervecenter/images/icons/icon_check.gif | Bin 0 -> 1291 bytes .../images/icons/icon_clock_green.gif | Bin 0 -> 308 bytes .../images/icons/icon_clock_grey.gif | Bin 0 -> 308 bytes .../images/icons/icon_clock_red.gif | Bin 0 -> 308 bytes .../nervecenter/images/icons/icon_close.gif | Bin 0 -> 64 bytes .../images/icons/icon_configure.gif | Bin 0 -> 64 bytes .../nervecenter/images/icons/icon_down.gif | Bin 0 -> 1114 bytes .../nervecenter/images/icons/icon_down_d.gif | Bin 0 -> 689 bytes .../nervecenter/images/icons/icon_down_mo.gif | Bin 0 -> 1117 bytes .../nervecenter/images/icons/icon_e.gif | Bin 0 -> 1106 bytes .../nervecenter/images/icons/icon_e_mo.gif | Bin 0 -> 1120 bytes .../nervecenter/images/icons/icon_error.gif | Bin 0 -> 1312 bytes .../nervecenter/images/icons/icon_exclam.gif | Bin 0 -> 1274 bytes .../nervecenter/images/icons/icon_flag_de.png | Bin 0 -> 114 bytes .../nervecenter/images/icons/icon_flag_en.png | Bin 0 -> 618 bytes .../nervecenter/images/icons/icon_flag_es.png | Bin 0 -> 281 bytes .../images/icons/icon_flag_pt_BR.png | Bin 0 -> 502 bytes .../images/icons/icon_frmfld_cert.png | Bin 0 -> 1528 bytes .../images/icons/icon_frmfld_file.png | Bin 0 -> 687 bytes .../images/icons/icon_frmfld_group.png | Bin 0 -> 748 bytes .../images/icons/icon_frmfld_host.png | Bin 0 -> 513 bytes .../images/icons/icon_frmfld_imp.png | Bin 0 -> 644 bytes .../images/icons/icon_frmfld_mail.png | Bin 0 -> 371 bytes .../images/icons/icon_frmfld_pwd.png | Bin 0 -> 620 bytes .../images/icons/icon_frmfld_search.png | Bin 0 -> 593 bytes .../images/icons/icon_frmfld_time.png | Bin 0 -> 646 bytes .../images/icons/icon_frmfld_unknown.png | Bin 0 -> 487 bytes .../images/icons/icon_frmfld_url.png | Bin 0 -> 704 bytes .../images/icons/icon_frmfld_user.png | Bin 0 -> 654 bytes .../images/icons/icon_fw-update.gif | Bin 0 -> 43785 bytes .../nervecenter/images/icons/icon_help.gif | Bin 0 -> 1669 bytes .../nervecenter/images/icons/icon_ifalias.gif | Bin 0 -> 315 bytes .../images/icons/icon_ifalias_d.gif | Bin 0 -> 315 bytes .../images/icons/icon_import_alias.gif | Bin 0 -> 1109 bytes .../nervecenter/images/icons/icon_in.gif | Bin 0 -> 177 bytes .../nervecenter/images/icons/icon_in_d.gif | Bin 0 -> 190 bytes .../images/icons/icon_info_pkg.gif | Bin 0 -> 1131 bytes .../images/icons/icon_interface_down.gif | Bin 0 -> 88 bytes .../images/icons/icon_interface_up.gif | Bin 0 -> 87 bytes .../nervecenter/images/icons/icon_left.gif | Bin 0 -> 1120 bytes .../nervecenter/images/icons/icon_left_d.gif | Bin 0 -> 691 bytes .../nervecenter/images/icons/icon_left_mo.gif | Bin 0 -> 1129 bytes .../nervecenter/images/icons/icon_log.gif | Bin 0 -> 297 bytes .../nervecenter/images/icons/icon_log_d.gif | Bin 0 -> 297 bytes .../nervecenter/images/icons/icon_log_s.gif | Bin 0 -> 305 bytes .../nervecenter/images/icons/icon_log_s_d.gif | Bin 0 -> 305 bytes .../nervecenter/images/icons/icon_logs.gif | Bin 0 -> 2092 bytes .../nervecenter/images/icons/icon_match.gif | Bin 0 -> 847 bytes .../nervecenter/images/icons/icon_match_d.gif | Bin 0 -> 843 bytes .../nervecenter/images/icons/icon_minus.gif | Bin 0 -> 61 bytes .../nervecenter/images/icons/icon_open.gif | Bin 0 -> 62 bytes .../nervecenter/images/icons/icon_other.gif | Bin 0 -> 125 bytes .../nervecenter/images/icons/icon_other_d.gif | Bin 0 -> 125 bytes .../nervecenter/images/icons/icon_out.gif | Bin 0 -> 179 bytes .../nervecenter/images/icons/icon_out_d.gif | Bin 0 -> 189 bytes .../nervecenter/images/icons/icon_parp.gif | Bin 0 -> 303 bytes .../nervecenter/images/icons/icon_parp_d.gif | Bin 0 -> 303 bytes .../nervecenter/images/icons/icon_pass.gif | Bin 0 -> 182 bytes .../images/icons/icon_pass_add.gif | Bin 0 -> 183 bytes .../nervecenter/images/icons/icon_pass_d.gif | Bin 0 -> 182 bytes .../nervecenter/images/icons/icon_plus.gif | Bin 0 -> 1100 bytes .../nervecenter/images/icons/icon_plus_bl.gif | Bin 0 -> 1096 bytes .../images/icons/icon_plus_bl_p.gif | Bin 0 -> 1079 bytes .../nervecenter/images/icons/icon_plus_d.gif | Bin 0 -> 682 bytes .../nervecenter/images/icons/icon_plus_mo.gif | Bin 0 -> 1120 bytes .../nervecenter/images/icons/icon_plus_p.gif | Bin 0 -> 1087 bytes .../images/icons/icon_reinstall.gif | Bin 0 -> 1119 bytes .../images/icons/icon_reinstall_d.gif | Bin 0 -> 701 bytes .../images/icons/icon_reinstall_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_reinstall_pkg.gif | Bin 0 -> 1109 bytes .../images/icons/icon_reinstall_pkg_d.gif | Bin 0 -> 694 bytes .../images/icons/icon_reinstall_pkg_mo.gif | Bin 0 -> 1135 bytes .../images/icons/icon_reinstall_xml.gif | Bin 0 -> 1105 bytes .../images/icons/icon_reinstall_xml_d.gif | Bin 0 -> 686 bytes .../images/icons/icon_reinstall_xml_mo.gif | Bin 0 -> 1131 bytes .../nervecenter/images/icons/icon_reject.gif | Bin 0 -> 193 bytes .../images/icons/icon_reject_d.gif | Bin 0 -> 193 bytes .../nervecenter/images/icons/icon_right.gif | Bin 0 -> 1117 bytes .../images/icons/icon_service_restart.gif | Bin 0 -> 1120 bytes .../images/icons/icon_service_restart_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_running.gif | Bin 0 -> 1390 bytes .../images/icons/icon_service_start.gif | Bin 0 -> 1119 bytes .../images/icons/icon_service_start_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_status.gif | Bin 0 -> 2150 bytes .../images/icons/icon_service_stop.gif | Bin 0 -> 1106 bytes .../images/icons/icon_service_stop_d.gif | Bin 0 -> 1100 bytes .../images/icons/icon_service_stopped.gif | Bin 0 -> 1695 bytes .../images/icons/icon_services_restart_mo.gif | Bin 0 -> 1129 bytes .../images/icons/icon_services_start_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_services_stop_mo.gif | Bin 0 -> 1126 bytes .../images/icons/icon_system-group-grey.png | Bin 0 -> 1566 bytes .../images/icons/icon_system-group.png | Bin 0 -> 3128 bytes .../images/icons/icon_system-user-grey.png | Bin 0 -> 1107 bytes .../images/icons/icon_system-user.png | Bin 0 -> 2084 bytes .../images/icons/icon_system_lock_screen.png | Bin 0 -> 1841 bytes .../images/icons/icon_system_logout.png | Bin 0 -> 2087 bytes .../nervecenter/images/icons/icon_trapped.gif | Bin 0 -> 1101 bytes .../images/icons/icon_trapped_p.gif | Bin 0 -> 1079 bytes .../nervecenter/images/icons/icon_ts_rule.gif | Bin 0 -> 194 bytes .../images/icons/icon_ts_rule_d.gif | Bin 0 -> 193 bytes .../nervecenter/images/icons/icon_up.gif | Bin 0 -> 1116 bytes .../nervecenter/images/icons/icon_up_d.gif | Bin 0 -> 691 bytes .../nervecenter/images/icons/icon_up_mo.gif | Bin 0 -> 1129 bytes .../nervecenter/images/icons/icon_wlan.gif | Bin 0 -> 66 bytes .../nervecenter/images/icons/icon_wlan_d.gif | Bin 0 -> 100 bytes .../nervecenter/images/icons/icon_wol_all.gif | Bin 0 -> 1126 bytes .../images/icons/icon_wzd_nsaved.png | Bin 0 -> 512 bytes .../images/icons/icon_wzd_saved.png | Bin 0 -> 399 bytes .../nervecenter/images/icons/icon_x.gif | Bin 0 -> 1111 bytes .../nervecenter/images/icons/icon_x_d.gif | Bin 0 -> 680 bytes .../nervecenter/images/icons/icon_x_mo.gif | Bin 0 -> 1126 bytes .../nervecenter/images/icons/icon_x_p.gif | Bin 0 -> 1090 bytes .../themes/nervecenter/images/icons/in.gif | Bin 0 -> 177 bytes .../themes/nervecenter/images/icons/in_d.gif | Bin 0 -> 190 bytes .../themes/nervecenter/images/icons/out.gif | Bin 0 -> 179 bytes .../themes/nervecenter/images/icons/out_d.gif | Bin 0 -> 189 bytes .../www/themes/nervecenter/images/log.png | Bin 0 -> 270 bytes .../www/themes/nervecenter/images/logo.gif | Bin 0 -> 7599 bytes .../www/themes/nervecenter/images/logobig.jpg | Bin 0 -> 7540 bytes .../themes/nervecenter/images/menu_down.gif | Bin 0 -> 61 bytes .../themes/nervecenter/images/menu_footer.gif | Bin 0 -> 234 bytes .../themes/nervecenter/images/menu_right.gif | Bin 0 -> 61 bytes .../themes/nervecenter/images/metal_bgr.gif | Bin 0 -> 734 bytes .../nervecenter/images/metal_bgr_red.gif | Bin 0 -> 734 bytes .../nervecenter/images/misc/bar_blue.gif | Bin 0 -> 94 bytes .../nervecenter/images/misc/bar_gray.gif | Bin 0 -> 94 bytes .../nervecenter/images/misc/bar_left.gif | Bin 0 -> 289 bytes .../nervecenter/images/misc/bar_right.gif | Bin 0 -> 288 bytes .../images/misc/bullet_toggle_minus.png | Bin 0 -> 154 bytes .../images/misc/bullet_toggle_plus.png | Bin 0 -> 156 bytes .../themes/nervecenter/images/misc/button.gif | Bin 0 -> 805 bytes .../themes/nervecenter/images/misc/graph.png | Bin 0 -> 2256 bytes .../nervecenter/images/misc/key_128.gif | Bin 0 -> 2766 bytes .../nervecenter/images/misc/key_152.gif | Bin 0 -> 2772 bytes .../nervecenter/images/misc/key_256.gif | Bin 0 -> 2808 bytes .../themes/nervecenter/images/misc/key_64.gif | Bin 0 -> 2723 bytes .../images/misc/left_background.gif | Bin 0 -> 38943 bytes .../themes/nervecenter/images/misc/loader.gif | Bin 0 -> 5971 bytes .../nervecenter/images/misc/loader_all.gif | Bin 0 -> 1398 bytes .../nervecenter/images/misc/loader_filter.gif | Bin 0 -> 1436 bytes .../nervecenter/images/misc/loader_tab.gif | Bin 0 -> 5852 bytes .../themes/nervecenter/images/misc/logon.png | Bin 0 -> 47467 bytes .../nervecenter/images/misc/progress_bar.gif | Bin 0 -> 44791 bytes .../nervecenter/images/misc/rrd_error.png | Bin 0 -> 38898 bytes .../images/misc/status_alerter.gif | Bin 0 -> 2203 bytes .../images/misc/status_carpmaster.gif | Bin 0 -> 1558 bytes .../nervecenter/images/misc/status_left.gif | Bin 0 -> 600 bytes .../images/misc/status_page_loading.gif | Bin 0 -> 1621 bytes .../images/misc/status_reload_all.gif | Bin 0 -> 1611 bytes .../images/misc/status_reload_filter.gif | Bin 0 -> 1612 bytes .../nervecenter/images/misc/status_right.gif | Bin 0 -> 599 bytes .../themes/nervecenter/images/misc/tri_c.gif | Bin 0 -> 61 bytes .../nervecenter/images/misc/tri_c_black.gif | Bin 0 -> 69 bytes .../themes/nervecenter/images/misc/tri_o.gif | Bin 0 -> 58 bytes .../nervecenter/images/misc/tri_o_black.gif | Bin 0 -> 67 bytes .../nervecenter/images/misc/widget_loader.gif | Bin 0 -> 2545 bytes .../nervecenter/images/new_tab_menu.png | Bin 0 -> 444 bytes .../www/themes/nervecenter/images/status.png | Bin 0 -> 348 bytes .../themes/nervecenter/images/transparent.gif | Bin 0 -> 146 bytes .../nervecenter/images/transparent_pixel.gif | Bin 0 -> 43 bytes .../images/wizards/initial/joincluster.gif | Bin 0 -> 10076 bytes .../images/wizards/initial/joincluster_mo.gif | Bin 0 -> 10153 bytes .../images/wizards/initial/restore.gif | Bin 0 -> 9199 bytes .../images/wizards/initial/restore_mo.gif | Bin 0 -> 9099 bytes .../images/wizards/initial/standalone.gif | Bin 0 -> 7265 bytes .../images/wizards/initial/standalone_mo.gif | Bin 0 -> 7382 bytes .../wizards/initial/startnewcluster.gif | Bin 0 -> 10175 bytes .../wizards/initial/startnewcluster_mo.gif | Bin 0 -> 10030 bytes .../nervecenter/javascript/ie7/blank.gif | Bin 0 -> 48 bytes .../javascript/ie7/ie7-box-model.js | 2 + .../nervecenter/javascript/ie7/ie7-core.js | 2 + .../javascript/ie7/ie7-css-strict.js | 2 + .../nervecenter/javascript/ie7/ie7-css2.js | 2 + .../nervecenter/javascript/ie7/ie7-css3.js | 2 + .../nervecenter/javascript/ie7/ie7-fixed.js | 2 + .../nervecenter/javascript/ie7/ie7-html4.js | 2 + .../nervecenter/javascript/ie7/ie7-ie5.js | 2 + .../nervecenter/javascript/ie7/ie7-lite-p.js | 3 + .../nervecenter/javascript/ie7/ie7-lite.js | 2 + .../nervecenter/javascript/ie7/ie7-png.js | 2 + .../nervecenter/javascript/ie7/ie7-server.css | 43 + .../javascript/ie7/ie7-standard-p.js | 3 + .../javascript/ie7/ie7-standard.js | 2 + .../nervecenter/javascript/ie7/test-trans.png | Bin 0 -> 106 bytes .../nervecenter/javascript/img/grey-40.png | Bin 0 -> 223 bytes .../javascript/img/submenu-off.gif | Bin 0 -> 65 bytes .../nervecenter/javascript/img/submenu-on.gif | Bin 0 -> 65 bytes .../nervecenter/javascript/img/white-90.png | Bin 0 -> 223 bytes .../themes/nervecenter/javascript/img/x.gif | Bin 0 -> 43 bytes .../nervecenter/javascript/niftyjsCode.js | 174 + .../nervecenter/javascript/transmenu-body.php | 51 + .../nervecenter/javascript/transmenu-head.php | 85 + .../nervecenter/javascript/transmenu.org | 785 + .../nervecenter/javascript/transmenuC.js | 86 + .../www/themes/nervecenter/jsevents/body.def | 7 + usr/local/www/themes/nervecenter/loader.js | 29 + usr/local/www/themes/nervecenter/login.css | 1127 + usr/local/www/themes/nervecenter/menu.inc | 178 + .../www/themes/nervecenter/new_tab_menu.css | 101 + usr/local/www/themes/nervecenter/no_big_logo | 1 + .../www/themes/nervecenter/rrdcolors.inc.php | 88 + .../themes/nervecenter/styles/menustyles.css | 44 + .../themes/nervecenter/styles/transmenu.css | 75 + usr/local/www/themes/nervecenter/wizard.css | 1060 + usr/local/www/themes/pfsense-dropdown/all.css | 1027 + .../pfsense-dropdown/apple-touch-icon.png | Bin 0 -> 4068 bytes .../themes/pfsense-dropdown/bottom-loader.js | 11 + .../pfsense-dropdown/images/alert_bgr.gif | Bin 0 -> 1651 bytes .../pfsense-dropdown/images/header-alert.gif | Bin 0 -> 4910 bytes .../themes/pfsense-dropdown/images/header.gif | Bin 0 -> 7932 bytes .../themes/pfsense-dropdown/images/help.png | Bin 0 -> 324 bytes .../pfsense-dropdown/images/icons/favicon.ico | Bin 0 -> 1406 bytes .../pfsense-dropdown/images/icons/icon_3g.gif | Bin 0 -> 200 bytes .../images/icons/icon_3g_inactive.gif | Bin 0 -> 200 bytes .../images/icons/icon_advanced.gif | Bin 0 -> 306 bytes .../images/icons/icon_advanced_s.gif | Bin 0 -> 314 bytes .../images/icons/icon_alert.gif | Bin 0 -> 1044 bytes .../images/icons/icon_alias_host.gif | Bin 0 -> 348 bytes .../images/icons/icon_alias_net.gif | Bin 0 -> 331 bytes .../images/icons/icon_alias_port.gif | Bin 0 -> 346 bytes .../images/icons/icon_alias_url.gif | Bin 0 -> 314 bytes .../images/icons/icon_alias_url_reload.gif | Bin 0 -> 1111 bytes .../images/icons/icon_block.gif | Bin 0 -> 193 bytes .../images/icons/icon_block_add.gif | Bin 0 -> 192 bytes .../images/icons/icon_block_d.gif | Bin 0 -> 193 bytes .../images/icons/icon_cablenic.gif | Bin 0 -> 91 bytes .../images/icons/icon_cal.gif | Bin 0 -> 646 bytes .../images/icons/icon_cal_mo.gif | Bin 0 -> 1060 bytes .../images/icons/icon_carp.gif | Bin 0 -> 352 bytes .../images/icons/icon_carp_d.gif | Bin 0 -> 357 bytes .../images/icons/icon_chain.png | Bin 0 -> 161 bytes .../images/icons/icon_check.gif | Bin 0 -> 1291 bytes .../images/icons/icon_clock_green.gif | Bin 0 -> 308 bytes .../images/icons/icon_clock_grey.gif | Bin 0 -> 308 bytes .../images/icons/icon_clock_red.gif | Bin 0 -> 308 bytes .../images/icons/icon_close.gif | Bin 0 -> 64 bytes .../images/icons/icon_configure.gif | Bin 0 -> 64 bytes .../images/icons/icon_down.gif | Bin 0 -> 1114 bytes .../images/icons/icon_down_d.gif | Bin 0 -> 689 bytes .../images/icons/icon_down_mo.gif | Bin 0 -> 1117 bytes .../pfsense-dropdown/images/icons/icon_e.gif | Bin 0 -> 1106 bytes .../images/icons/icon_e_mo.gif | Bin 0 -> 1120 bytes .../images/icons/icon_error.gif | Bin 0 -> 1312 bytes .../images/icons/icon_exclam.gif | Bin 0 -> 1274 bytes .../images/icons/icon_flag_de.png | Bin 0 -> 114 bytes .../images/icons/icon_flag_en.png | Bin 0 -> 618 bytes .../images/icons/icon_flag_es.png | Bin 0 -> 281 bytes .../images/icons/icon_flag_pt_BR.png | Bin 0 -> 502 bytes .../images/icons/icon_frmfld_cert.png | Bin 0 -> 1528 bytes .../images/icons/icon_frmfld_file.png | Bin 0 -> 687 bytes .../images/icons/icon_frmfld_group.png | Bin 0 -> 748 bytes .../images/icons/icon_frmfld_host.png | Bin 0 -> 513 bytes .../images/icons/icon_frmfld_imp.png | Bin 0 -> 644 bytes .../images/icons/icon_frmfld_mail.png | Bin 0 -> 371 bytes .../images/icons/icon_frmfld_pwd.png | Bin 0 -> 620 bytes .../images/icons/icon_frmfld_search.png | Bin 0 -> 593 bytes .../images/icons/icon_frmfld_time.png | Bin 0 -> 646 bytes .../images/icons/icon_frmfld_unknown.png | Bin 0 -> 487 bytes .../images/icons/icon_frmfld_url.png | Bin 0 -> 704 bytes .../images/icons/icon_frmfld_user.png | Bin 0 -> 654 bytes .../images/icons/icon_fw-update.gif | Bin 0 -> 43785 bytes .../images/icons/icon_help.gif | Bin 0 -> 1669 bytes .../images/icons/icon_ifalias.gif | Bin 0 -> 315 bytes .../images/icons/icon_ifalias_d.gif | Bin 0 -> 315 bytes .../images/icons/icon_import_alias.gif | Bin 0 -> 1109 bytes .../pfsense-dropdown/images/icons/icon_in.gif | Bin 0 -> 177 bytes .../images/icons/icon_in_d.gif | Bin 0 -> 190 bytes .../images/icons/icon_info_pkg.gif | Bin 0 -> 1131 bytes .../images/icons/icon_interface_down.gif | Bin 0 -> 88 bytes .../images/icons/icon_interface_up.gif | Bin 0 -> 87 bytes .../images/icons/icon_left.gif | Bin 0 -> 1120 bytes .../images/icons/icon_left_d.gif | Bin 0 -> 691 bytes .../images/icons/icon_left_mo.gif | Bin 0 -> 1129 bytes .../images/icons/icon_log.gif | Bin 0 -> 297 bytes .../images/icons/icon_log_d.gif | Bin 0 -> 297 bytes .../images/icons/icon_log_s.gif | Bin 0 -> 305 bytes .../images/icons/icon_log_s_d.gif | Bin 0 -> 305 bytes .../images/icons/icon_logs.gif | Bin 0 -> 2092 bytes .../images/icons/icon_match.gif | Bin 0 -> 847 bytes .../images/icons/icon_match_d.gif | Bin 0 -> 843 bytes .../images/icons/icon_minus.gif | Bin 0 -> 61 bytes .../images/icons/icon_open.gif | Bin 0 -> 62 bytes .../images/icons/icon_other.gif | Bin 0 -> 125 bytes .../images/icons/icon_other_d.gif | Bin 0 -> 125 bytes .../images/icons/icon_out.gif | Bin 0 -> 179 bytes .../images/icons/icon_out_d.gif | Bin 0 -> 189 bytes .../images/icons/icon_parp.gif | Bin 0 -> 303 bytes .../images/icons/icon_parp_d.gif | Bin 0 -> 303 bytes .../images/icons/icon_pass.gif | Bin 0 -> 182 bytes .../images/icons/icon_pass_add.gif | Bin 0 -> 183 bytes .../images/icons/icon_pass_d.gif | Bin 0 -> 182 bytes .../images/icons/icon_plus.gif | Bin 0 -> 1100 bytes .../images/icons/icon_plus_bl.gif | Bin 0 -> 1096 bytes .../images/icons/icon_plus_bl_p.gif | Bin 0 -> 1079 bytes .../images/icons/icon_plus_d.gif | Bin 0 -> 682 bytes .../images/icons/icon_plus_mo.gif | Bin 0 -> 1120 bytes .../images/icons/icon_plus_p.gif | Bin 0 -> 1087 bytes .../images/icons/icon_reinstall.gif | Bin 0 -> 1119 bytes .../images/icons/icon_reinstall_d.gif | Bin 0 -> 701 bytes .../images/icons/icon_reinstall_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_reinstall_pkg.gif | Bin 0 -> 1109 bytes .../images/icons/icon_reinstall_pkg_d.gif | Bin 0 -> 694 bytes .../images/icons/icon_reinstall_pkg_mo.gif | Bin 0 -> 1135 bytes .../images/icons/icon_reinstall_xml.gif | Bin 0 -> 1105 bytes .../images/icons/icon_reinstall_xml_d.gif | Bin 0 -> 686 bytes .../images/icons/icon_reinstall_xml_mo.gif | Bin 0 -> 1131 bytes .../images/icons/icon_reject.gif | Bin 0 -> 193 bytes .../images/icons/icon_reject_d.gif | Bin 0 -> 193 bytes .../images/icons/icon_right.gif | Bin 0 -> 1117 bytes .../images/icons/icon_service_restart.gif | Bin 0 -> 1120 bytes .../images/icons/icon_service_restart_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_running.gif | Bin 0 -> 1390 bytes .../images/icons/icon_service_start.gif | Bin 0 -> 1119 bytes .../images/icons/icon_service_start_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_status.gif | Bin 0 -> 2150 bytes .../images/icons/icon_service_stop.gif | Bin 0 -> 1106 bytes .../images/icons/icon_service_stop_d.gif | Bin 0 -> 1100 bytes .../images/icons/icon_service_stopped.gif | Bin 0 -> 1695 bytes .../images/icons/icon_services_restart_mo.gif | Bin 0 -> 1129 bytes .../images/icons/icon_services_start_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_services_stop_mo.gif | Bin 0 -> 1126 bytes .../images/icons/icon_system-group-grey.png | Bin 0 -> 1566 bytes .../images/icons/icon_system-group.png | Bin 0 -> 3128 bytes .../images/icons/icon_system-user-grey.png | Bin 0 -> 1107 bytes .../images/icons/icon_system-user.png | Bin 0 -> 2084 bytes .../images/icons/icon_system_lock_screen.png | Bin 0 -> 1841 bytes .../images/icons/icon_system_logout.png | Bin 0 -> 2087 bytes .../images/icons/icon_trapped.gif | Bin 0 -> 1101 bytes .../images/icons/icon_trapped_p.gif | Bin 0 -> 1079 bytes .../images/icons/icon_ts_rule.gif | Bin 0 -> 194 bytes .../images/icons/icon_ts_rule_d.gif | Bin 0 -> 193 bytes .../pfsense-dropdown/images/icons/icon_up.gif | Bin 0 -> 1116 bytes .../images/icons/icon_up_d.gif | Bin 0 -> 691 bytes .../images/icons/icon_up_mo.gif | Bin 0 -> 1129 bytes .../images/icons/icon_wlan.gif | Bin 0 -> 66 bytes .../images/icons/icon_wlan_d.gif | Bin 0 -> 100 bytes .../images/icons/icon_wol_all.gif | Bin 0 -> 1114 bytes .../images/icons/icon_wzd_nsaved.png | Bin 0 -> 512 bytes .../images/icons/icon_wzd_saved.png | Bin 0 -> 399 bytes .../pfsense-dropdown/images/icons/icon_x.gif | Bin 0 -> 1111 bytes .../images/icons/icon_x_d.gif | Bin 0 -> 680 bytes .../images/icons/icon_x_mo.gif | Bin 0 -> 1126 bytes .../images/icons/icon_x_p.gif | Bin 0 -> 1090 bytes .../pfsense-dropdown/images/icons/in.gif | Bin 0 -> 177 bytes .../pfsense-dropdown/images/icons/in_d.gif | Bin 0 -> 190 bytes .../pfsense-dropdown/images/icons/out.gif | Bin 0 -> 179 bytes .../pfsense-dropdown/images/icons/out_d.gif | Bin 0 -> 189 bytes .../themes/pfsense-dropdown/images/log.png | Bin 0 -> 270 bytes .../themes/pfsense-dropdown/images/logo.gif | Bin 0 -> 4878 bytes .../pfsense-dropdown/images/logobig.jpg | Bin 0 -> 7540 bytes .../themes/pfsense-dropdown/images/menu.gif | Bin 0 -> 460 bytes .../pfsense-dropdown/images/misc/bar_blue.gif | Bin 0 -> 94 bytes .../pfsense-dropdown/images/misc/bar_gray.gif | Bin 0 -> 94 bytes .../pfsense-dropdown/images/misc/bar_left.gif | Bin 0 -> 289 bytes .../images/misc/bar_right.gif | Bin 0 -> 288 bytes .../pfsense-dropdown/images/misc/button.gif | Bin 0 -> 805 bytes .../pfsense-dropdown/images/misc/key_128.gif | Bin 0 -> 2766 bytes .../pfsense-dropdown/images/misc/key_152.gif | Bin 0 -> 2772 bytes .../pfsense-dropdown/images/misc/key_256.gif | Bin 0 -> 2808 bytes .../pfsense-dropdown/images/misc/key_64.gif | Bin 0 -> 2723 bytes .../images/misc/left_background.gif | Bin 0 -> 38943 bytes .../pfsense-dropdown/images/misc/loader.gif | Bin 0 -> 5971 bytes .../images/misc/loader_tab.gif | Bin 0 -> 5852 bytes .../pfsense-dropdown/images/misc/logon.png | Bin 0 -> 27029 bytes .../images/misc/progress_bar.gif | Bin 0 -> 44791 bytes .../images/misc/rrd_error.png | Bin 0 -> 38898 bytes .../pfsense-dropdown/images/misc/tri_c.gif | Bin 0 -> 61 bytes .../images/misc/tri_c_black.gif | Bin 0 -> 69 bytes .../pfsense-dropdown/images/misc/tri_o.gif | Bin 0 -> 58 bytes .../images/misc/tri_o_black.gif | Bin 0 -> 67 bytes .../images/misc/widget_loader.gif | Bin 0 -> 1064 bytes .../pfsense-dropdown/images/new_tab_menu.png | Bin 0 -> 444 bytes .../themes/pfsense-dropdown/images/status.png | Bin 0 -> 348 bytes .../pfsense-dropdown/images/transparent.gif | Bin 0 -> 146 bytes .../images/transparent_pixel.gif | Bin 0 -> 43 bytes .../pfsense-dropdown/javascript/ie7/blank.gif | Bin 0 -> 48 bytes .../javascript/ie7/ie7-box-model.js | 2 + .../javascript/ie7/ie7-core.js | 2 + .../javascript/ie7/ie7-css-strict.js | 2 + .../javascript/ie7/ie7-css2.js | 2 + .../javascript/ie7/ie7-css3.js | 2 + .../javascript/ie7/ie7-fixed.js | 2 + .../javascript/ie7/ie7-html4.js | 2 + .../javascript/ie7/ie7-ie5.js | 2 + .../javascript/ie7/ie7-lite-p.js | 3 + .../javascript/ie7/ie7-lite.js | 2 + .../javascript/ie7/ie7-png.js | 2 + .../javascript/ie7/ie7-server.css | 43 + .../javascript/ie7/ie7-standard-p.js | 3 + .../javascript/ie7/ie7-standard.js | 2 + .../javascript/ie7/test-trans.png | Bin 0 -> 106 bytes .../javascript/niftyjsCode.js | 174 + .../www/themes/pfsense-dropdown/loader.js | 29 + .../www/themes/pfsense-dropdown/login.css | 1127 + .../themes/pfsense-dropdown/new_tab_menu.css | 101 + .../themes/pfsense-dropdown/rrdcolors.inc.php | 88 + usr/local/www/themes/pfsense/all.css | 1035 + .../www/themes/pfsense/apple-touch-icon.png | Bin 0 -> 4068 bytes usr/local/www/themes/pfsense/bottom-loader.js | 12 + .../www/themes/pfsense/images/alert_bgr.gif | Bin 0 -> 1651 bytes .../themes/pfsense/images/header-alert.gif | Bin 0 -> 4910 bytes .../www/themes/pfsense/images/header.gif | Bin 0 -> 18510 bytes usr/local/www/themes/pfsense/images/help.png | Bin 0 -> 324 bytes .../themes/pfsense/images/icons/favicon.ico | Bin 0 -> 1406 bytes .../themes/pfsense/images/icons/icon_3g.gif | Bin 0 -> 200 bytes .../pfsense/images/icons/icon_3g_inactive.gif | Bin 0 -> 200 bytes .../pfsense/images/icons/icon_advanced.gif | Bin 0 -> 306 bytes .../pfsense/images/icons/icon_advanced_s.gif | Bin 0 -> 314 bytes .../pfsense/images/icons/icon_alert.gif | Bin 0 -> 1044 bytes .../pfsense/images/icons/icon_alias_host.gif | Bin 0 -> 348 bytes .../pfsense/images/icons/icon_alias_net.gif | Bin 0 -> 331 bytes .../pfsense/images/icons/icon_alias_port.gif | Bin 0 -> 346 bytes .../pfsense/images/icons/icon_alias_url.gif | Bin 0 -> 314 bytes .../images/icons/icon_alias_url_reload.gif | Bin 0 -> 1111 bytes .../pfsense/images/icons/icon_block.gif | Bin 0 -> 193 bytes .../pfsense/images/icons/icon_block_add.gif | Bin 0 -> 192 bytes .../pfsense/images/icons/icon_block_d.gif | Bin 0 -> 193 bytes .../pfsense/images/icons/icon_cablenic.gif | Bin 0 -> 91 bytes .../themes/pfsense/images/icons/icon_cal.gif | Bin 0 -> 646 bytes .../pfsense/images/icons/icon_cal_mo.gif | Bin 0 -> 1060 bytes .../themes/pfsense/images/icons/icon_carp.gif | Bin 0 -> 352 bytes .../pfsense/images/icons/icon_carp_d.gif | Bin 0 -> 357 bytes .../pfsense/images/icons/icon_chain.png | Bin 0 -> 161 bytes .../pfsense/images/icons/icon_check.gif | Bin 0 -> 1291 bytes .../pfsense/images/icons/icon_clock_green.gif | Bin 0 -> 308 bytes .../pfsense/images/icons/icon_clock_grey.gif | Bin 0 -> 308 bytes .../pfsense/images/icons/icon_clock_red.gif | Bin 0 -> 308 bytes .../pfsense/images/icons/icon_close.gif | Bin 0 -> 64 bytes .../pfsense/images/icons/icon_configure.gif | Bin 0 -> 64 bytes .../themes/pfsense/images/icons/icon_down.gif | Bin 0 -> 1114 bytes .../pfsense/images/icons/icon_down_d.gif | Bin 0 -> 689 bytes .../pfsense/images/icons/icon_down_mo.gif | Bin 0 -> 1117 bytes .../themes/pfsense/images/icons/icon_e.gif | Bin 0 -> 1106 bytes .../themes/pfsense/images/icons/icon_e_mo.gif | Bin 0 -> 1120 bytes .../pfsense/images/icons/icon_error.gif | Bin 0 -> 1312 bytes .../pfsense/images/icons/icon_exclam.gif | Bin 0 -> 1274 bytes .../pfsense/images/icons/icon_flag_de.png | Bin 0 -> 114 bytes .../pfsense/images/icons/icon_flag_en.png | Bin 0 -> 618 bytes .../pfsense/images/icons/icon_flag_es.png | Bin 0 -> 281 bytes .../pfsense/images/icons/icon_flag_pt_BR.png | Bin 0 -> 502 bytes .../pfsense/images/icons/icon_frmfld_cert.png | Bin 0 -> 1528 bytes .../pfsense/images/icons/icon_frmfld_file.png | Bin 0 -> 687 bytes .../images/icons/icon_frmfld_group.png | Bin 0 -> 748 bytes .../pfsense/images/icons/icon_frmfld_host.png | Bin 0 -> 513 bytes .../pfsense/images/icons/icon_frmfld_imp.png | Bin 0 -> 644 bytes .../pfsense/images/icons/icon_frmfld_mail.png | Bin 0 -> 371 bytes .../pfsense/images/icons/icon_frmfld_pwd.png | Bin 0 -> 620 bytes .../images/icons/icon_frmfld_search.png | Bin 0 -> 593 bytes .../pfsense/images/icons/icon_frmfld_time.png | Bin 0 -> 646 bytes .../images/icons/icon_frmfld_unknown.png | Bin 0 -> 487 bytes .../pfsense/images/icons/icon_frmfld_url.png | Bin 0 -> 704 bytes .../pfsense/images/icons/icon_frmfld_user.png | Bin 0 -> 654 bytes .../pfsense/images/icons/icon_fw-update.gif | Bin 0 -> 43785 bytes .../themes/pfsense/images/icons/icon_help.gif | Bin 0 -> 1669 bytes .../pfsense/images/icons/icon_ifalias.gif | Bin 0 -> 315 bytes .../pfsense/images/icons/icon_ifalias_d.gif | Bin 0 -> 315 bytes .../images/icons/icon_import_alias.gif | Bin 0 -> 1109 bytes .../themes/pfsense/images/icons/icon_in.gif | Bin 0 -> 177 bytes .../themes/pfsense/images/icons/icon_in_d.gif | Bin 0 -> 190 bytes .../pfsense/images/icons/icon_info_pkg.gif | Bin 0 -> 1131 bytes .../images/icons/icon_interface_down.gif | Bin 0 -> 88 bytes .../images/icons/icon_interface_up.gif | Bin 0 -> 87 bytes .../themes/pfsense/images/icons/icon_left.gif | Bin 0 -> 1120 bytes .../pfsense/images/icons/icon_left_d.gif | Bin 0 -> 691 bytes .../pfsense/images/icons/icon_left_mo.gif | Bin 0 -> 1129 bytes .../themes/pfsense/images/icons/icon_log.gif | Bin 0 -> 297 bytes .../pfsense/images/icons/icon_log_d.gif | Bin 0 -> 297 bytes .../pfsense/images/icons/icon_log_s.gif | Bin 0 -> 305 bytes .../pfsense/images/icons/icon_log_s_d.gif | Bin 0 -> 305 bytes .../themes/pfsense/images/icons/icon_logs.gif | Bin 0 -> 2092 bytes .../pfsense/images/icons/icon_match.gif | Bin 0 -> 847 bytes .../pfsense/images/icons/icon_match_d.gif | Bin 0 -> 843 bytes .../pfsense/images/icons/icon_minus.gif | Bin 0 -> 61 bytes .../themes/pfsense/images/icons/icon_open.gif | Bin 0 -> 62 bytes .../pfsense/images/icons/icon_other.gif | Bin 0 -> 125 bytes .../pfsense/images/icons/icon_other_d.gif | Bin 0 -> 125 bytes .../themes/pfsense/images/icons/icon_out.gif | Bin 0 -> 179 bytes .../pfsense/images/icons/icon_out_d.gif | Bin 0 -> 189 bytes .../themes/pfsense/images/icons/icon_parp.gif | Bin 0 -> 303 bytes .../pfsense/images/icons/icon_parp_d.gif | Bin 0 -> 303 bytes .../themes/pfsense/images/icons/icon_pass.gif | Bin 0 -> 182 bytes .../pfsense/images/icons/icon_pass_add.gif | Bin 0 -> 183 bytes .../pfsense/images/icons/icon_pass_d.gif | Bin 0 -> 182 bytes .../themes/pfsense/images/icons/icon_plus.gif | Bin 0 -> 1100 bytes .../pfsense/images/icons/icon_plus_bl.gif | Bin 0 -> 1096 bytes .../pfsense/images/icons/icon_plus_bl_p.gif | Bin 0 -> 1079 bytes .../pfsense/images/icons/icon_plus_d.gif | Bin 0 -> 682 bytes .../pfsense/images/icons/icon_plus_mo.gif | Bin 0 -> 1120 bytes .../pfsense/images/icons/icon_plus_p.gif | Bin 0 -> 1087 bytes .../pfsense/images/icons/icon_reinstall.gif | Bin 0 -> 1119 bytes .../pfsense/images/icons/icon_reinstall_d.gif | Bin 0 -> 701 bytes .../images/icons/icon_reinstall_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_reinstall_pkg.gif | Bin 0 -> 1109 bytes .../images/icons/icon_reinstall_pkg_d.gif | Bin 0 -> 694 bytes .../images/icons/icon_reinstall_pkg_mo.gif | Bin 0 -> 1135 bytes .../images/icons/icon_reinstall_xml.gif | Bin 0 -> 1105 bytes .../images/icons/icon_reinstall_xml_d.gif | Bin 0 -> 686 bytes .../images/icons/icon_reinstall_xml_mo.gif | Bin 0 -> 1131 bytes .../pfsense/images/icons/icon_reject.gif | Bin 0 -> 193 bytes .../pfsense/images/icons/icon_reject_d.gif | Bin 0 -> 193 bytes .../pfsense/images/icons/icon_right.gif | Bin 0 -> 1117 bytes .../images/icons/icon_service_restart.gif | Bin 0 -> 1120 bytes .../images/icons/icon_service_restart_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_running.gif | Bin 0 -> 1390 bytes .../images/icons/icon_service_start.gif | Bin 0 -> 1119 bytes .../images/icons/icon_service_start_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_status.gif | Bin 0 -> 2150 bytes .../images/icons/icon_service_stop.gif | Bin 0 -> 1106 bytes .../images/icons/icon_service_stop_d.gif | Bin 0 -> 1100 bytes .../images/icons/icon_service_stopped.gif | Bin 0 -> 1695 bytes .../images/icons/icon_services_restart_mo.gif | Bin 0 -> 1129 bytes .../images/icons/icon_services_start_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_services_stop_mo.gif | Bin 0 -> 1126 bytes .../images/icons/icon_system-group-grey.png | Bin 0 -> 1566 bytes .../images/icons/icon_system-group.png | Bin 0 -> 3128 bytes .../images/icons/icon_system-user-grey.png | Bin 0 -> 1107 bytes .../pfsense/images/icons/icon_system-user.png | Bin 0 -> 2084 bytes .../images/icons/icon_system_lock_screen.png | Bin 0 -> 1841 bytes .../images/icons/icon_system_logout.png | Bin 0 -> 2087 bytes .../pfsense/images/icons/icon_trapped.gif | Bin 0 -> 1101 bytes .../pfsense/images/icons/icon_trapped_p.gif | Bin 0 -> 1079 bytes .../pfsense/images/icons/icon_ts_rule.gif | Bin 0 -> 194 bytes .../pfsense/images/icons/icon_ts_rule_d.gif | Bin 0 -> 193 bytes .../themes/pfsense/images/icons/icon_up.gif | Bin 0 -> 1116 bytes .../themes/pfsense/images/icons/icon_up_d.gif | Bin 0 -> 691 bytes .../pfsense/images/icons/icon_up_mo.gif | Bin 0 -> 1129 bytes .../themes/pfsense/images/icons/icon_wlan.gif | Bin 0 -> 66 bytes .../pfsense/images/icons/icon_wlan_d.gif | Bin 0 -> 100 bytes .../pfsense/images/icons/icon_wol_all.gif | Bin 0 -> 1126 bytes .../pfsense/images/icons/icon_wzd_nsaved.png | Bin 0 -> 512 bytes .../pfsense/images/icons/icon_wzd_saved.png | Bin 0 -> 399 bytes .../themes/pfsense/images/icons/icon_x.gif | Bin 0 -> 1111 bytes .../themes/pfsense/images/icons/icon_x_d.gif | Bin 0 -> 680 bytes .../themes/pfsense/images/icons/icon_x_mo.gif | Bin 0 -> 1126 bytes .../themes/pfsense/images/icons/icon_x_p.gif | Bin 0 -> 1090 bytes .../www/themes/pfsense/images/icons/in.gif | Bin 0 -> 177 bytes .../www/themes/pfsense/images/icons/in_d.gif | Bin 0 -> 190 bytes .../www/themes/pfsense/images/icons/out.gif | Bin 0 -> 179 bytes .../www/themes/pfsense/images/icons/out_d.gif | Bin 0 -> 189 bytes usr/local/www/themes/pfsense/images/log.png | Bin 0 -> 270 bytes usr/local/www/themes/pfsense/images/logo.gif | Bin 0 -> 4878 bytes .../www/themes/pfsense/images/logobig.jpg | Bin 0 -> 7540 bytes .../themes/pfsense/images/misc/bar_blue.gif | Bin 0 -> 94 bytes .../themes/pfsense/images/misc/bar_gray.gif | Bin 0 -> 94 bytes .../themes/pfsense/images/misc/bar_left.gif | Bin 0 -> 289 bytes .../themes/pfsense/images/misc/bar_right.gif | Bin 0 -> 288 bytes .../www/themes/pfsense/images/misc/button.gif | Bin 0 -> 805 bytes .../themes/pfsense/images/misc/key_128.gif | Bin 0 -> 2766 bytes .../themes/pfsense/images/misc/key_152.gif | Bin 0 -> 2772 bytes .../themes/pfsense/images/misc/key_256.gif | Bin 0 -> 2808 bytes .../www/themes/pfsense/images/misc/key_64.gif | Bin 0 -> 2723 bytes .../pfsense/images/misc/left_background.gif | Bin 0 -> 38943 bytes .../www/themes/pfsense/images/misc/loader.gif | Bin 0 -> 5971 bytes .../themes/pfsense/images/misc/loader_tab.gif | Bin 0 -> 5852 bytes .../www/themes/pfsense/images/misc/logon.png | Bin 0 -> 27029 bytes .../pfsense/images/misc/progress_bar.gif | Bin 0 -> 44791 bytes .../themes/pfsense/images/misc/rrd_error.png | Bin 0 -> 38898 bytes .../www/themes/pfsense/images/misc/tri_c.gif | Bin 0 -> 61 bytes .../pfsense/images/misc/tri_c_black.gif | Bin 0 -> 69 bytes .../www/themes/pfsense/images/misc/tri_o.gif | Bin 0 -> 58 bytes .../pfsense/images/misc/tri_o_black.gif | Bin 0 -> 67 bytes .../pfsense/images/misc/widget_loader.gif | Bin 0 -> 1064 bytes .../themes/pfsense/images/new_tab_menu.png | Bin 0 -> 444 bytes .../www/themes/pfsense/images/status.png | Bin 0 -> 348 bytes .../www/themes/pfsense/images/transparent.gif | Bin 0 -> 146 bytes .../pfsense/images/transparent_pixel.gif | Bin 0 -> 43 bytes .../themes/pfsense/javascript/niftyjsCode.js | 174 + usr/local/www/themes/pfsense/loader.js | 30 + usr/local/www/themes/pfsense/login.css | 1127 + usr/local/www/themes/pfsense/new_tab_menu.css | 101 + .../www/themes/pfsense/rrdcolors.inc.php | 88 + usr/local/www/themes/pfsense_ng/all.css | 1414 + .../themes/pfsense_ng/apple-touch-icon.png | Bin 0 -> 4068 bytes .../www/themes/pfsense_ng/bottom-loader.js | 10 + usr/local/www/themes/pfsense_ng/favicon.ico | Bin 0 -> 1406 bytes usr/local/www/themes/pfsense_ng/graphlink.css | 43 + .../themes/pfsense_ng/images/alert_bgr.png | Bin 0 -> 2483 bytes .../www/themes/pfsense_ng/images/alerter.png | Bin 0 -> 3748 bytes .../themes/pfsense_ng/images/background.jpg | Bin 0 -> 49431 bytes .../www/themes/pfsense_ng/images/footer.png | Bin 0 -> 2956 bytes .../www/themes/pfsense_ng/images/header.png | Bin 0 -> 4994 bytes .../www/themes/pfsense_ng/images/help.png | Bin 0 -> 324 bytes .../themes/pfsense_ng/images/horizontal.png | Bin 0 -> 191 bytes .../www/themes/pfsense_ng/images/hostname.png | Bin 0 -> 1899 bytes .../pfsense_ng/images/icons/favicon.ico | Bin 0 -> 1406 bytes .../pfsense_ng/images/icons/icon_3g.gif | Bin 0 -> 200 bytes .../images/icons/icon_3g_inactive.gif | Bin 0 -> 200 bytes .../pfsense_ng/images/icons/icon_advanced.gif | Bin 0 -> 306 bytes .../images/icons/icon_advanced_s.gif | Bin 0 -> 314 bytes .../pfsense_ng/images/icons/icon_alert.gif | Bin 0 -> 1015 bytes .../images/icons/icon_alias_host.gif | Bin 0 -> 348 bytes .../images/icons/icon_alias_net.gif | Bin 0 -> 331 bytes .../images/icons/icon_alias_port.gif | Bin 0 -> 346 bytes .../images/icons/icon_alias_url.gif | Bin 0 -> 314 bytes .../images/icons/icon_alias_url_reload.gif | Bin 0 -> 1111 bytes .../pfsense_ng/images/icons/icon_block.gif | Bin 0 -> 193 bytes .../images/icons/icon_block_add.gif | Bin 0 -> 192 bytes .../pfsense_ng/images/icons/icon_block_d.gif | Bin 0 -> 193 bytes .../pfsense_ng/images/icons/icon_cablenic.gif | Bin 0 -> 91 bytes .../pfsense_ng/images/icons/icon_cal.gif | Bin 0 -> 646 bytes .../pfsense_ng/images/icons/icon_cal_mo.gif | Bin 0 -> 1060 bytes .../pfsense_ng/images/icons/icon_carp.gif | Bin 0 -> 352 bytes .../pfsense_ng/images/icons/icon_carp_d.gif | Bin 0 -> 357 bytes .../pfsense_ng/images/icons/icon_chain.png | Bin 0 -> 161 bytes .../pfsense_ng/images/icons/icon_check.gif | Bin 0 -> 1291 bytes .../images/icons/icon_clock_green.gif | Bin 0 -> 308 bytes .../images/icons/icon_clock_grey.gif | Bin 0 -> 308 bytes .../images/icons/icon_clock_red.gif | Bin 0 -> 308 bytes .../pfsense_ng/images/icons/icon_close.gif | Bin 0 -> 64 bytes .../images/icons/icon_configure.gif | Bin 0 -> 64 bytes .../pfsense_ng/images/icons/icon_down.gif | Bin 0 -> 1114 bytes .../pfsense_ng/images/icons/icon_down_d.gif | Bin 0 -> 689 bytes .../pfsense_ng/images/icons/icon_down_mo.gif | Bin 0 -> 1117 bytes .../themes/pfsense_ng/images/icons/icon_e.gif | Bin 0 -> 1106 bytes .../pfsense_ng/images/icons/icon_e_mo.gif | Bin 0 -> 1120 bytes .../pfsense_ng/images/icons/icon_error.gif | Bin 0 -> 1312 bytes .../pfsense_ng/images/icons/icon_exclam.gif | Bin 0 -> 1274 bytes .../pfsense_ng/images/icons/icon_flag_de.png | Bin 0 -> 114 bytes .../pfsense_ng/images/icons/icon_flag_en.png | Bin 0 -> 618 bytes .../pfsense_ng/images/icons/icon_flag_es.png | Bin 0 -> 281 bytes .../images/icons/icon_flag_pt_BR.png | Bin 0 -> 502 bytes .../images/icons/icon_frmfld_cert.png | Bin 0 -> 1528 bytes .../images/icons/icon_frmfld_file.png | Bin 0 -> 687 bytes .../images/icons/icon_frmfld_group.png | Bin 0 -> 748 bytes .../images/icons/icon_frmfld_host.png | Bin 0 -> 513 bytes .../images/icons/icon_frmfld_imp.png | Bin 0 -> 644 bytes .../images/icons/icon_frmfld_mail.png | Bin 0 -> 371 bytes .../images/icons/icon_frmfld_pwd.png | Bin 0 -> 620 bytes .../images/icons/icon_frmfld_search.png | Bin 0 -> 593 bytes .../images/icons/icon_frmfld_time.png | Bin 0 -> 646 bytes .../images/icons/icon_frmfld_unknown.png | Bin 0 -> 487 bytes .../images/icons/icon_frmfld_url.png | Bin 0 -> 704 bytes .../images/icons/icon_frmfld_user.png | Bin 0 -> 654 bytes .../images/icons/icon_fw-update.gif | Bin 0 -> 43785 bytes .../pfsense_ng/images/icons/icon_help.gif | Bin 0 -> 1669 bytes .../pfsense_ng/images/icons/icon_ifalias.gif | Bin 0 -> 315 bytes .../images/icons/icon_ifalias_d.gif | Bin 0 -> 315 bytes .../images/icons/icon_import_alias.gif | Bin 0 -> 1109 bytes .../pfsense_ng/images/icons/icon_in.gif | Bin 0 -> 177 bytes .../pfsense_ng/images/icons/icon_in_d.gif | Bin 0 -> 190 bytes .../pfsense_ng/images/icons/icon_info_pkg.gif | Bin 0 -> 1131 bytes .../images/icons/icon_interface_down.gif | Bin 0 -> 88 bytes .../images/icons/icon_interface_up.gif | Bin 0 -> 87 bytes .../pfsense_ng/images/icons/icon_left.gif | Bin 0 -> 1120 bytes .../pfsense_ng/images/icons/icon_left_d.gif | Bin 0 -> 691 bytes .../pfsense_ng/images/icons/icon_left_mo.gif | Bin 0 -> 1129 bytes .../pfsense_ng/images/icons/icon_log.gif | Bin 0 -> 297 bytes .../pfsense_ng/images/icons/icon_log_d.gif | Bin 0 -> 297 bytes .../pfsense_ng/images/icons/icon_log_s.gif | Bin 0 -> 305 bytes .../pfsense_ng/images/icons/icon_log_s_d.gif | Bin 0 -> 305 bytes .../pfsense_ng/images/icons/icon_logs.gif | Bin 0 -> 2092 bytes .../pfsense_ng/images/icons/icon_match.gif | Bin 0 -> 847 bytes .../pfsense_ng/images/icons/icon_match_d.gif | Bin 0 -> 843 bytes .../pfsense_ng/images/icons/icon_minus.gif | Bin 0 -> 61 bytes .../pfsense_ng/images/icons/icon_open.gif | Bin 0 -> 62 bytes .../pfsense_ng/images/icons/icon_other.gif | Bin 0 -> 125 bytes .../pfsense_ng/images/icons/icon_other_d.gif | Bin 0 -> 125 bytes .../pfsense_ng/images/icons/icon_out.gif | Bin 0 -> 179 bytes .../pfsense_ng/images/icons/icon_out_d.gif | Bin 0 -> 189 bytes .../pfsense_ng/images/icons/icon_parp.gif | Bin 0 -> 303 bytes .../pfsense_ng/images/icons/icon_parp_d.gif | Bin 0 -> 303 bytes .../pfsense_ng/images/icons/icon_pass.gif | Bin 0 -> 182 bytes .../pfsense_ng/images/icons/icon_pass_add.gif | Bin 0 -> 183 bytes .../pfsense_ng/images/icons/icon_pass_d.gif | Bin 0 -> 182 bytes .../pfsense_ng/images/icons/icon_plus.gif | Bin 0 -> 1100 bytes .../pfsense_ng/images/icons/icon_plus_bl.gif | Bin 0 -> 1096 bytes .../images/icons/icon_plus_bl_p.gif | Bin 0 -> 1079 bytes .../pfsense_ng/images/icons/icon_plus_d.gif | Bin 0 -> 682 bytes .../pfsense_ng/images/icons/icon_plus_mo.gif | Bin 0 -> 1120 bytes .../pfsense_ng/images/icons/icon_plus_p.gif | Bin 0 -> 1087 bytes .../images/icons/icon_reinstall.gif | Bin 0 -> 1119 bytes .../images/icons/icon_reinstall_d.gif | Bin 0 -> 701 bytes .../images/icons/icon_reinstall_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_reinstall_pkg.gif | Bin 0 -> 1109 bytes .../images/icons/icon_reinstall_pkg_d.gif | Bin 0 -> 694 bytes .../images/icons/icon_reinstall_pkg_mo.gif | Bin 0 -> 1135 bytes .../images/icons/icon_reinstall_xml.gif | Bin 0 -> 1105 bytes .../images/icons/icon_reinstall_xml_d.gif | Bin 0 -> 686 bytes .../images/icons/icon_reinstall_xml_mo.gif | Bin 0 -> 1131 bytes .../pfsense_ng/images/icons/icon_reject.gif | Bin 0 -> 193 bytes .../pfsense_ng/images/icons/icon_reject_d.gif | Bin 0 -> 193 bytes .../pfsense_ng/images/icons/icon_right.gif | Bin 0 -> 1117 bytes .../images/icons/icon_service_restart.gif | Bin 0 -> 1120 bytes .../images/icons/icon_service_restart_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_running.gif | Bin 0 -> 1390 bytes .../images/icons/icon_service_start.gif | Bin 0 -> 1119 bytes .../images/icons/icon_service_start_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_status.gif | Bin 0 -> 2150 bytes .../images/icons/icon_service_stop.gif | Bin 0 -> 1106 bytes .../images/icons/icon_service_stop_d.gif | Bin 0 -> 1100 bytes .../images/icons/icon_service_stopped.gif | Bin 0 -> 1695 bytes .../images/icons/icon_services_restart_mo.gif | Bin 0 -> 1129 bytes .../images/icons/icon_services_start_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_services_stop_mo.gif | Bin 0 -> 1126 bytes .../images/icons/icon_system-group-grey.png | Bin 0 -> 1566 bytes .../images/icons/icon_system-group.png | Bin 0 -> 3128 bytes .../images/icons/icon_system-user-grey.png | Bin 0 -> 1107 bytes .../images/icons/icon_system-user.png | Bin 0 -> 2084 bytes .../images/icons/icon_system_lock_screen.png | Bin 0 -> 1841 bytes .../images/icons/icon_system_logout.png | Bin 0 -> 2087 bytes .../pfsense_ng/images/icons/icon_trapped.gif | Bin 0 -> 1101 bytes .../images/icons/icon_trapped_p.gif | Bin 0 -> 1079 bytes .../pfsense_ng/images/icons/icon_ts_rule.gif | Bin 0 -> 194 bytes .../images/icons/icon_ts_rule_d.gif | Bin 0 -> 193 bytes .../pfsense_ng/images/icons/icon_up.gif | Bin 0 -> 1116 bytes .../pfsense_ng/images/icons/icon_up_d.gif | Bin 0 -> 691 bytes .../pfsense_ng/images/icons/icon_up_mo.gif | Bin 0 -> 1129 bytes .../pfsense_ng/images/icons/icon_wlan.gif | Bin 0 -> 66 bytes .../pfsense_ng/images/icons/icon_wlan_d.gif | Bin 0 -> 100 bytes .../pfsense_ng/images/icons/icon_wol_all.gif | Bin 0 -> 1126 bytes .../images/icons/icon_wzd_nsaved.png | Bin 0 -> 512 bytes .../images/icons/icon_wzd_saved.png | Bin 0 -> 399 bytes .../themes/pfsense_ng/images/icons/icon_x.gif | Bin 0 -> 1111 bytes .../pfsense_ng/images/icons/icon_x_d.gif | Bin 0 -> 680 bytes .../pfsense_ng/images/icons/icon_x_mo.gif | Bin 0 -> 1126 bytes .../pfsense_ng/images/icons/icon_x_p.gif | Bin 0 -> 1090 bytes .../www/themes/pfsense_ng/images/icons/in.gif | Bin 0 -> 177 bytes .../themes/pfsense_ng/images/icons/in_d.gif | Bin 0 -> 190 bytes .../themes/pfsense_ng/images/icons/out.gif | Bin 0 -> 179 bytes .../themes/pfsense_ng/images/icons/out_d.gif | Bin 0 -> 189 bytes .../www/themes/pfsense_ng/images/log.png | Bin 0 -> 270 bytes .../www/themes/pfsense_ng/images/logo.gif | Bin 0 -> 2471 bytes .../www/themes/pfsense_ng/images/logobig.jpg | Bin 0 -> 7540 bytes .../pfsense_ng/images/mainmenu-down.gif | Bin 0 -> 55 bytes .../pfsense_ng/images/mainmenu-right.gif | Bin 0 -> 56 bytes .../themes/pfsense_ng/images/mainmenuitem.gif | Bin 0 -> 54 bytes .../www/themes/pfsense_ng/images/menu-dot.gif | Bin 0 -> 54 bytes .../themes/pfsense_ng/images/menu_footer.gif | Bin 0 -> 234 bytes .../themes/pfsense_ng/images/menu_right.gif | Bin 0 -> 61 bytes .../www/themes/pfsense_ng/images/menubgr.png | Bin 0 -> 132 bytes .../pfsense_ng/images/menubgr_footer.png | Bin 0 -> 496 bytes .../pfsense_ng/images/menubgr_highlight.png | Bin 0 -> 252 bytes .../pfsense_ng/images/misc/bar_blue.gif | Bin 0 -> 94 bytes .../pfsense_ng/images/misc/bar_gray.gif | Bin 0 -> 94 bytes .../pfsense_ng/images/misc/bar_left.gif | Bin 0 -> 289 bytes .../pfsense_ng/images/misc/bar_right.gif | Bin 0 -> 288 bytes .../images/misc/bullet_toggle_minus.png | Bin 0 -> 154 bytes .../images/misc/bullet_toggle_plus.png | Bin 0 -> 156 bytes .../themes/pfsense_ng/images/misc/button.gif | Bin 0 -> 805 bytes .../themes/pfsense_ng/images/misc/graph.png | Bin 0 -> 2256 bytes .../themes/pfsense_ng/images/misc/key_128.gif | Bin 0 -> 2766 bytes .../themes/pfsense_ng/images/misc/key_152.gif | Bin 0 -> 2772 bytes .../themes/pfsense_ng/images/misc/key_256.gif | Bin 0 -> 2808 bytes .../themes/pfsense_ng/images/misc/key_64.gif | Bin 0 -> 2723 bytes .../images/misc/left_background.gif | Bin 0 -> 38943 bytes .../themes/pfsense_ng/images/misc/loader.gif | Bin 0 -> 5971 bytes .../pfsense_ng/images/misc/loader_all.gif | Bin 0 -> 1398 bytes .../pfsense_ng/images/misc/loader_filter.gif | Bin 0 -> 1436 bytes .../pfsense_ng/images/misc/loader_tab.gif | Bin 0 -> 5852 bytes .../themes/pfsense_ng/images/misc/logon.png | Bin 0 -> 50494 bytes .../pfsense_ng/images/misc/progress_bar.gif | Bin 0 -> 44791 bytes .../pfsense_ng/images/misc/rrd_error.png | Bin 0 -> 38898 bytes .../pfsense_ng/images/misc/status_alerter.gif | Bin 0 -> 2203 bytes .../images/misc/status_carpmaster.gif | Bin 0 -> 1558 bytes .../pfsense_ng/images/misc/status_left.gif | Bin 0 -> 600 bytes .../images/misc/status_page_loading.gif | Bin 0 -> 1621 bytes .../images/misc/status_reload_all.gif | Bin 0 -> 1611 bytes .../images/misc/status_reload_filter.gif | Bin 0 -> 1612 bytes .../pfsense_ng/images/misc/status_right.gif | Bin 0 -> 599 bytes .../themes/pfsense_ng/images/misc/tri_c.gif | Bin 0 -> 61 bytes .../pfsense_ng/images/misc/tri_c_black.gif | Bin 0 -> 69 bytes .../themes/pfsense_ng/images/misc/tri_o.gif | Bin 0 -> 58 bytes .../pfsense_ng/images/misc/tri_o_black.gif | Bin 0 -> 67 bytes .../pfsense_ng/images/misc/widget_loader.gif | Bin 0 -> 2545 bytes .../themes/pfsense_ng/images/new_tab_menu.png | Bin 0 -> 444 bytes .../www/themes/pfsense_ng/images/status.png | Bin 0 -> 348 bytes .../themes/pfsense_ng/images/transparent.gif | Bin 0 -> 146 bytes .../pfsense_ng/images/transparent_pixel.gif | Bin 0 -> 43 bytes .../images/wizards/initial/joincluster.gif | Bin 0 -> 10076 bytes .../images/wizards/initial/joincluster_mo.gif | Bin 0 -> 10153 bytes .../images/wizards/initial/restore.gif | Bin 0 -> 9199 bytes .../images/wizards/initial/restore_mo.gif | Bin 0 -> 9099 bytes .../images/wizards/initial/standalone.gif | Bin 0 -> 7265 bytes .../images/wizards/initial/standalone_mo.gif | Bin 0 -> 7382 bytes .../wizards/initial/startnewcluster.gif | Bin 0 -> 10175 bytes .../wizards/initial/startnewcluster_mo.gif | Bin 0 -> 10030 bytes .../pfsense_ng/javascript/ie7/blank.gif | Bin 0 -> 48 bytes .../javascript/ie7/ie7-box-model.js | 2 + .../pfsense_ng/javascript/ie7/ie7-core.js | 2 + .../javascript/ie7/ie7-css-strict.js | 2 + .../pfsense_ng/javascript/ie7/ie7-css2.js | 2 + .../pfsense_ng/javascript/ie7/ie7-css3.js | 2 + .../pfsense_ng/javascript/ie7/ie7-fixed.js | 2 + .../pfsense_ng/javascript/ie7/ie7-html4.js | 2 + .../pfsense_ng/javascript/ie7/ie7-ie5.js | 2 + .../pfsense_ng/javascript/ie7/ie7-lite-p.js | 3 + .../pfsense_ng/javascript/ie7/ie7-lite.js | 2 + .../pfsense_ng/javascript/ie7/ie7-png.js | 2 + .../pfsense_ng/javascript/ie7/ie7-server.css | 43 + .../javascript/ie7/ie7-standard-p.js | 3 + .../pfsense_ng/javascript/ie7/ie7-standard.js | 2 + .../pfsense_ng/javascript/ie7/test-trans.png | Bin 0 -> 106 bytes .../pfsense_ng/javascript/img/grey-40.png | Bin 0 -> 223 bytes .../pfsense_ng/javascript/img/submenu-off.gif | Bin 0 -> 65 bytes .../pfsense_ng/javascript/img/submenu-on.gif | Bin 0 -> 65 bytes .../pfsense_ng/javascript/img/white-90.png | Bin 0 -> 223 bytes .../themes/pfsense_ng/javascript/img/x.gif | Bin 0 -> 43 bytes .../pfsense_ng/javascript/niftyjsCode.js | 174 + .../pfsense_ng/javascript/transmenu-body.php | 51 + .../pfsense_ng/javascript/transmenu-head.php | 85 + .../pfsense_ng/javascript/transmenu.org | 785 + .../pfsense_ng/javascript/transmenuC.js | 86 + .../www/themes/pfsense_ng/jsevents/body.def | 7 + usr/local/www/themes/pfsense_ng/loader.js | 36 + usr/local/www/themes/pfsense_ng/login.css | 1127 + usr/local/www/themes/pfsense_ng/menu.inc | 178 + .../www/themes/pfsense_ng/new_tab_menu.css | 101 + usr/local/www/themes/pfsense_ng/no_big_logo | 1 + .../www/themes/pfsense_ng/rrdcolors.inc.php | 88 + .../themes/pfsense_ng/styles/menustyles.css | 44 + .../themes/pfsense_ng/styles/transmenu.css | 75 + usr/local/www/themes/pfsense_ng/wizard.css | 1117 + usr/local/www/themes/pfsense_ng_fs/all.css | 1375 + .../themes/pfsense_ng_fs/apple-touch-icon.png | Bin 0 -> 4068 bytes .../www/themes/pfsense_ng_fs/bottom-loader.js | 10 + .../www/themes/pfsense_ng_fs/favicon.ico | Bin 0 -> 1406 bytes .../www/themes/pfsense_ng_fs/graphlink.css | 43 + .../themes/pfsense_ng_fs/images/alert_bgr.png | Bin 0 -> 2483 bytes .../themes/pfsense_ng_fs/images/alerter.png | Bin 0 -> 3748 bytes .../pfsense_ng_fs/images/background.jpg | Bin 0 -> 49431 bytes .../themes/pfsense_ng_fs/images/footer.png | Bin 0 -> 2956 bytes .../themes/pfsense_ng_fs/images/header.png | Bin 0 -> 4994 bytes .../www/themes/pfsense_ng_fs/images/help.png | Bin 0 -> 324 bytes .../pfsense_ng_fs/images/horizontal.png | Bin 0 -> 191 bytes .../themes/pfsense_ng_fs/images/hostname.png | Bin 0 -> 1899 bytes .../pfsense_ng_fs/images/icons/favicon.ico | Bin 0 -> 1406 bytes .../pfsense_ng_fs/images/icons/icon_3g.gif | Bin 0 -> 200 bytes .../images/icons/icon_3g_inactive.gif | Bin 0 -> 200 bytes .../images/icons/icon_advanced.gif | Bin 0 -> 306 bytes .../images/icons/icon_advanced_s.gif | Bin 0 -> 314 bytes .../pfsense_ng_fs/images/icons/icon_alert.gif | Bin 0 -> 1015 bytes .../images/icons/icon_alias_host.gif | Bin 0 -> 348 bytes .../images/icons/icon_alias_net.gif | Bin 0 -> 331 bytes .../images/icons/icon_alias_port.gif | Bin 0 -> 346 bytes .../images/icons/icon_alias_url.gif | Bin 0 -> 314 bytes .../images/icons/icon_alias_url_reload.gif | Bin 0 -> 1111 bytes .../pfsense_ng_fs/images/icons/icon_block.gif | Bin 0 -> 193 bytes .../images/icons/icon_block_add.gif | Bin 0 -> 192 bytes .../images/icons/icon_block_d.gif | Bin 0 -> 193 bytes .../images/icons/icon_cablenic.gif | Bin 0 -> 91 bytes .../pfsense_ng_fs/images/icons/icon_cal.gif | Bin 0 -> 646 bytes .../images/icons/icon_cal_mo.gif | Bin 0 -> 1060 bytes .../pfsense_ng_fs/images/icons/icon_carp.gif | Bin 0 -> 352 bytes .../images/icons/icon_carp_d.gif | Bin 0 -> 357 bytes .../pfsense_ng_fs/images/icons/icon_chain.png | Bin 0 -> 161 bytes .../pfsense_ng_fs/images/icons/icon_check.gif | Bin 0 -> 1291 bytes .../images/icons/icon_clock_green.gif | Bin 0 -> 308 bytes .../images/icons/icon_clock_grey.gif | Bin 0 -> 308 bytes .../images/icons/icon_clock_red.gif | Bin 0 -> 308 bytes .../pfsense_ng_fs/images/icons/icon_close.gif | Bin 0 -> 64 bytes .../images/icons/icon_configure.gif | Bin 0 -> 64 bytes .../pfsense_ng_fs/images/icons/icon_down.gif | Bin 0 -> 1114 bytes .../images/icons/icon_down_d.gif | Bin 0 -> 689 bytes .../images/icons/icon_down_mo.gif | Bin 0 -> 1117 bytes .../pfsense_ng_fs/images/icons/icon_e.gif | Bin 0 -> 1106 bytes .../pfsense_ng_fs/images/icons/icon_e_mo.gif | Bin 0 -> 1120 bytes .../pfsense_ng_fs/images/icons/icon_error.gif | Bin 0 -> 1312 bytes .../images/icons/icon_exclam.gif | Bin 0 -> 1274 bytes .../images/icons/icon_flag_de.png | Bin 0 -> 114 bytes .../images/icons/icon_flag_en.png | Bin 0 -> 618 bytes .../images/icons/icon_flag_es.png | Bin 0 -> 281 bytes .../images/icons/icon_flag_pt_BR.png | Bin 0 -> 502 bytes .../images/icons/icon_frmfld_cert.png | Bin 0 -> 1528 bytes .../images/icons/icon_frmfld_file.png | Bin 0 -> 687 bytes .../images/icons/icon_frmfld_group.png | Bin 0 -> 748 bytes .../images/icons/icon_frmfld_host.png | Bin 0 -> 513 bytes .../images/icons/icon_frmfld_imp.png | Bin 0 -> 644 bytes .../images/icons/icon_frmfld_mail.png | Bin 0 -> 371 bytes .../images/icons/icon_frmfld_pwd.png | Bin 0 -> 620 bytes .../images/icons/icon_frmfld_search.png | Bin 0 -> 593 bytes .../images/icons/icon_frmfld_time.png | Bin 0 -> 646 bytes .../images/icons/icon_frmfld_unknown.png | Bin 0 -> 487 bytes .../images/icons/icon_frmfld_url.png | Bin 0 -> 704 bytes .../images/icons/icon_frmfld_user.png | Bin 0 -> 654 bytes .../images/icons/icon_fw-update.gif | Bin 0 -> 43785 bytes .../pfsense_ng_fs/images/icons/icon_help.gif | Bin 0 -> 1669 bytes .../images/icons/icon_ifalias.gif | Bin 0 -> 315 bytes .../images/icons/icon_ifalias_d.gif | Bin 0 -> 315 bytes .../images/icons/icon_import_alias.gif | Bin 0 -> 1109 bytes .../pfsense_ng_fs/images/icons/icon_in.gif | Bin 0 -> 177 bytes .../pfsense_ng_fs/images/icons/icon_in_d.gif | Bin 0 -> 190 bytes .../images/icons/icon_info_pkg.gif | Bin 0 -> 1131 bytes .../images/icons/icon_interface_down.gif | Bin 0 -> 88 bytes .../images/icons/icon_interface_up.gif | Bin 0 -> 87 bytes .../pfsense_ng_fs/images/icons/icon_left.gif | Bin 0 -> 1120 bytes .../images/icons/icon_left_d.gif | Bin 0 -> 691 bytes .../images/icons/icon_left_mo.gif | Bin 0 -> 1129 bytes .../pfsense_ng_fs/images/icons/icon_log.gif | Bin 0 -> 297 bytes .../pfsense_ng_fs/images/icons/icon_log_d.gif | Bin 0 -> 297 bytes .../pfsense_ng_fs/images/icons/icon_log_s.gif | Bin 0 -> 305 bytes .../images/icons/icon_log_s_d.gif | Bin 0 -> 305 bytes .../pfsense_ng_fs/images/icons/icon_logs.gif | Bin 0 -> 2092 bytes .../pfsense_ng_fs/images/icons/icon_match.gif | Bin 0 -> 847 bytes .../images/icons/icon_match_d.gif | Bin 0 -> 843 bytes .../pfsense_ng_fs/images/icons/icon_minus.gif | Bin 0 -> 61 bytes .../pfsense_ng_fs/images/icons/icon_open.gif | Bin 0 -> 62 bytes .../pfsense_ng_fs/images/icons/icon_other.gif | Bin 0 -> 125 bytes .../images/icons/icon_other_d.gif | Bin 0 -> 125 bytes .../pfsense_ng_fs/images/icons/icon_out.gif | Bin 0 -> 179 bytes .../pfsense_ng_fs/images/icons/icon_out_d.gif | Bin 0 -> 189 bytes .../pfsense_ng_fs/images/icons/icon_parp.gif | Bin 0 -> 303 bytes .../images/icons/icon_parp_d.gif | Bin 0 -> 303 bytes .../pfsense_ng_fs/images/icons/icon_pass.gif | Bin 0 -> 182 bytes .../images/icons/icon_pass_add.gif | Bin 0 -> 183 bytes .../images/icons/icon_pass_d.gif | Bin 0 -> 182 bytes .../pfsense_ng_fs/images/icons/icon_plus.gif | Bin 0 -> 1100 bytes .../images/icons/icon_plus_bl.gif | Bin 0 -> 1096 bytes .../images/icons/icon_plus_bl_p.gif | Bin 0 -> 1079 bytes .../images/icons/icon_plus_d.gif | Bin 0 -> 682 bytes .../images/icons/icon_plus_mo.gif | Bin 0 -> 1120 bytes .../images/icons/icon_plus_p.gif | Bin 0 -> 1087 bytes .../images/icons/icon_reinstall.gif | Bin 0 -> 1119 bytes .../images/icons/icon_reinstall_d.gif | Bin 0 -> 701 bytes .../images/icons/icon_reinstall_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_reinstall_pkg.gif | Bin 0 -> 1109 bytes .../images/icons/icon_reinstall_pkg_d.gif | Bin 0 -> 694 bytes .../images/icons/icon_reinstall_pkg_mo.gif | Bin 0 -> 1135 bytes .../images/icons/icon_reinstall_xml.gif | Bin 0 -> 1105 bytes .../images/icons/icon_reinstall_xml_d.gif | Bin 0 -> 686 bytes .../images/icons/icon_reinstall_xml_mo.gif | Bin 0 -> 1131 bytes .../images/icons/icon_reject.gif | Bin 0 -> 193 bytes .../images/icons/icon_reject_d.gif | Bin 0 -> 193 bytes .../pfsense_ng_fs/images/icons/icon_right.gif | Bin 0 -> 1117 bytes .../images/icons/icon_service_restart.gif | Bin 0 -> 1120 bytes .../images/icons/icon_service_restart_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_running.gif | Bin 0 -> 1390 bytes .../images/icons/icon_service_start.gif | Bin 0 -> 1119 bytes .../images/icons/icon_service_start_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_status.gif | Bin 0 -> 2150 bytes .../images/icons/icon_service_stop.gif | Bin 0 -> 1106 bytes .../images/icons/icon_service_stop_d.gif | Bin 0 -> 1100 bytes .../images/icons/icon_service_stopped.gif | Bin 0 -> 1695 bytes .../images/icons/icon_services_restart_mo.gif | Bin 0 -> 1129 bytes .../images/icons/icon_services_start_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_services_stop_mo.gif | Bin 0 -> 1126 bytes .../images/icons/icon_system-group-grey.png | Bin 0 -> 1566 bytes .../images/icons/icon_system-group.png | Bin 0 -> 3128 bytes .../images/icons/icon_system-user-grey.png | Bin 0 -> 1107 bytes .../images/icons/icon_system-user.png | Bin 0 -> 2084 bytes .../images/icons/icon_system_lock_screen.png | Bin 0 -> 1841 bytes .../images/icons/icon_system_logout.png | Bin 0 -> 2087 bytes .../images/icons/icon_trapped.gif | Bin 0 -> 1101 bytes .../images/icons/icon_trapped_p.gif | Bin 0 -> 1079 bytes .../images/icons/icon_ts_rule.gif | Bin 0 -> 194 bytes .../images/icons/icon_ts_rule_d.gif | Bin 0 -> 193 bytes .../pfsense_ng_fs/images/icons/icon_up.gif | Bin 0 -> 1116 bytes .../pfsense_ng_fs/images/icons/icon_up_d.gif | Bin 0 -> 691 bytes .../pfsense_ng_fs/images/icons/icon_up_mo.gif | Bin 0 -> 1129 bytes .../pfsense_ng_fs/images/icons/icon_wlan.gif | Bin 0 -> 66 bytes .../images/icons/icon_wlan_d.gif | Bin 0 -> 100 bytes .../images/icons/icon_wol_all.gif | Bin 0 -> 1126 bytes .../images/icons/icon_wzd_nsaved.png | Bin 0 -> 512 bytes .../images/icons/icon_wzd_saved.png | Bin 0 -> 399 bytes .../pfsense_ng_fs/images/icons/icon_x.gif | Bin 0 -> 1111 bytes .../pfsense_ng_fs/images/icons/icon_x_d.gif | Bin 0 -> 680 bytes .../pfsense_ng_fs/images/icons/icon_x_mo.gif | Bin 0 -> 1126 bytes .../pfsense_ng_fs/images/icons/icon_x_p.gif | Bin 0 -> 1090 bytes .../themes/pfsense_ng_fs/images/icons/in.gif | Bin 0 -> 177 bytes .../pfsense_ng_fs/images/icons/in_d.gif | Bin 0 -> 190 bytes .../themes/pfsense_ng_fs/images/icons/out.gif | Bin 0 -> 179 bytes .../pfsense_ng_fs/images/icons/out_d.gif | Bin 0 -> 189 bytes .../www/themes/pfsense_ng_fs/images/log.png | Bin 0 -> 270 bytes .../www/themes/pfsense_ng_fs/images/logo.gif | Bin 0 -> 2471 bytes .../themes/pfsense_ng_fs/images/logobig.jpg | Bin 0 -> 7540 bytes .../pfsense_ng_fs/images/mainmenu-down.gif | Bin 0 -> 55 bytes .../pfsense_ng_fs/images/mainmenu-right.gif | Bin 0 -> 56 bytes .../pfsense_ng_fs/images/mainmenuitem.gif | Bin 0 -> 54 bytes .../themes/pfsense_ng_fs/images/menu-dot.gif | Bin 0 -> 54 bytes .../pfsense_ng_fs/images/menu_footer.gif | Bin 0 -> 234 bytes .../pfsense_ng_fs/images/menu_right.gif | Bin 0 -> 61 bytes .../themes/pfsense_ng_fs/images/menubgr.png | Bin 0 -> 132 bytes .../pfsense_ng_fs/images/menubgr_footer.png | Bin 0 -> 496 bytes .../images/menubgr_highlight.png | Bin 0 -> 252 bytes .../pfsense_ng_fs/images/misc/bar_blue.gif | Bin 0 -> 94 bytes .../pfsense_ng_fs/images/misc/bar_gray.gif | Bin 0 -> 94 bytes .../pfsense_ng_fs/images/misc/bar_left.gif | Bin 0 -> 289 bytes .../pfsense_ng_fs/images/misc/bar_right.gif | Bin 0 -> 288 bytes .../images/misc/bullet_toggle_minus.png | Bin 0 -> 154 bytes .../images/misc/bullet_toggle_plus.png | Bin 0 -> 156 bytes .../pfsense_ng_fs/images/misc/button.gif | Bin 0 -> 805 bytes .../pfsense_ng_fs/images/misc/graph.png | Bin 0 -> 2256 bytes .../pfsense_ng_fs/images/misc/key_128.gif | Bin 0 -> 2766 bytes .../pfsense_ng_fs/images/misc/key_152.gif | Bin 0 -> 2772 bytes .../pfsense_ng_fs/images/misc/key_256.gif | Bin 0 -> 2808 bytes .../pfsense_ng_fs/images/misc/key_64.gif | Bin 0 -> 2723 bytes .../images/misc/left_background.gif | Bin 0 -> 38943 bytes .../pfsense_ng_fs/images/misc/loader.gif | Bin 0 -> 5971 bytes .../pfsense_ng_fs/images/misc/loader_all.gif | Bin 0 -> 1398 bytes .../images/misc/loader_filter.gif | Bin 0 -> 1436 bytes .../pfsense_ng_fs/images/misc/loader_tab.gif | Bin 0 -> 5852 bytes .../pfsense_ng_fs/images/misc/logon.png | Bin 0 -> 50494 bytes .../images/misc/progress_bar.gif | Bin 0 -> 44791 bytes .../pfsense_ng_fs/images/misc/rrd_error.png | Bin 0 -> 38898 bytes .../images/misc/status_alerter.gif | Bin 0 -> 2203 bytes .../images/misc/status_carpmaster.gif | Bin 0 -> 1558 bytes .../pfsense_ng_fs/images/misc/status_left.gif | Bin 0 -> 600 bytes .../images/misc/status_page_loading.gif | Bin 0 -> 1621 bytes .../images/misc/status_reload_all.gif | Bin 0 -> 1611 bytes .../images/misc/status_reload_filter.gif | Bin 0 -> 1612 bytes .../images/misc/status_right.gif | Bin 0 -> 599 bytes .../pfsense_ng_fs/images/misc/tri_c.gif | Bin 0 -> 61 bytes .../pfsense_ng_fs/images/misc/tri_c_black.gif | Bin 0 -> 69 bytes .../pfsense_ng_fs/images/misc/tri_o.gif | Bin 0 -> 58 bytes .../pfsense_ng_fs/images/misc/tri_o_black.gif | Bin 0 -> 67 bytes .../images/misc/widget_loader.gif | Bin 0 -> 2545 bytes .../pfsense_ng_fs/images/new_tab_menu.png | Bin 0 -> 444 bytes .../themes/pfsense_ng_fs/images/status.png | Bin 0 -> 348 bytes .../pfsense_ng_fs/images/transparent.gif | Bin 0 -> 146 bytes .../images/transparent_pixel.gif | Bin 0 -> 43 bytes .../images/wizards/initial/joincluster.gif | Bin 0 -> 10076 bytes .../images/wizards/initial/joincluster_mo.gif | Bin 0 -> 10153 bytes .../images/wizards/initial/restore.gif | Bin 0 -> 9199 bytes .../images/wizards/initial/restore_mo.gif | Bin 0 -> 9099 bytes .../images/wizards/initial/standalone.gif | Bin 0 -> 7265 bytes .../images/wizards/initial/standalone_mo.gif | Bin 0 -> 7382 bytes .../wizards/initial/startnewcluster.gif | Bin 0 -> 10175 bytes .../wizards/initial/startnewcluster_mo.gif | Bin 0 -> 10030 bytes .../pfsense_ng_fs/javascript/ie7/blank.gif | Bin 0 -> 48 bytes .../javascript/ie7/ie7-box-model.js | 2 + .../pfsense_ng_fs/javascript/ie7/ie7-core.js | 2 + .../javascript/ie7/ie7-css-strict.js | 2 + .../pfsense_ng_fs/javascript/ie7/ie7-css2.js | 2 + .../pfsense_ng_fs/javascript/ie7/ie7-css3.js | 2 + .../pfsense_ng_fs/javascript/ie7/ie7-fixed.js | 2 + .../pfsense_ng_fs/javascript/ie7/ie7-html4.js | 2 + .../pfsense_ng_fs/javascript/ie7/ie7-ie5.js | 2 + .../javascript/ie7/ie7-lite-p.js | 3 + .../pfsense_ng_fs/javascript/ie7/ie7-lite.js | 2 + .../pfsense_ng_fs/javascript/ie7/ie7-png.js | 2 + .../javascript/ie7/ie7-server.css | 43 + .../javascript/ie7/ie7-standard-p.js | 3 + .../javascript/ie7/ie7-standard.js | 2 + .../javascript/ie7/test-trans.png | Bin 0 -> 106 bytes .../pfsense_ng_fs/javascript/img/grey-40.png | Bin 0 -> 223 bytes .../javascript/img/submenu-off.gif | Bin 0 -> 65 bytes .../javascript/img/submenu-on.gif | Bin 0 -> 65 bytes .../pfsense_ng_fs/javascript/img/white-90.png | Bin 0 -> 223 bytes .../themes/pfsense_ng_fs/javascript/img/x.gif | Bin 0 -> 43 bytes .../pfsense_ng_fs/javascript/niftyjsCode.js | 174 + .../javascript/transmenu-body.php | 51 + .../javascript/transmenu-head.php | 85 + .../pfsense_ng_fs/javascript/transmenu.org | 785 + .../pfsense_ng_fs/javascript/transmenuC.js | 86 + .../themes/pfsense_ng_fs/jsevents/body.def | 7 + usr/local/www/themes/pfsense_ng_fs/loader.js | 294 + usr/local/www/themes/pfsense_ng_fs/login.css | 1127 + usr/local/www/themes/pfsense_ng_fs/menu.inc | 178 + .../www/themes/pfsense_ng_fs/new_tab_menu.css | 101 + .../www/themes/pfsense_ng_fs/no_big_logo | 1 + .../themes/pfsense_ng_fs/rrdcolors.inc.php | 88 + .../pfsense_ng_fs/styles/menustyles.css | 44 + .../themes/pfsense_ng_fs/styles/transmenu.css | 75 + usr/local/www/themes/pfsense_ng_fs/wizard.css | 1117 + usr/local/www/themes/the_wall/all.css | 1308 + .../www/themes/the_wall/apple-touch-icon.png | Bin 0 -> 4068 bytes .../www/themes/the_wall/bottom-loader.js | 10 + usr/local/www/themes/the_wall/favicon.ico | Bin 0 -> 1406 bytes usr/local/www/themes/the_wall/graphlink.css | 43 + .../www/themes/the_wall/images/alert_bgr.png | Bin 0 -> 12705 bytes .../www/themes/the_wall/images/background.jpg | Bin 0 -> 50449 bytes .../www/themes/the_wall/images/footer.png | Bin 0 -> 7774 bytes .../www/themes/the_wall/images/header.png | Bin 0 -> 44524 bytes usr/local/www/themes/the_wall/images/help.png | Bin 0 -> 324 bytes .../www/themes/the_wall/images/horizontal.gif | Bin 0 -> 461 bytes .../www/themes/the_wall/images/horizontal.png | Bin 0 -> 190 bytes .../themes/the_wall/images/icons/favicon.ico | Bin 0 -> 1406 bytes .../themes/the_wall/images/icons/icon_3g.gif | Bin 0 -> 200 bytes .../images/icons/icon_3g_inactive.gif | Bin 0 -> 200 bytes .../the_wall/images/icons/icon_advanced.gif | Bin 0 -> 306 bytes .../the_wall/images/icons/icon_advanced_s.gif | Bin 0 -> 314 bytes .../the_wall/images/icons/icon_alert.gif | Bin 0 -> 1015 bytes .../the_wall/images/icons/icon_alias_host.gif | Bin 0 -> 348 bytes .../the_wall/images/icons/icon_alias_net.gif | Bin 0 -> 331 bytes .../the_wall/images/icons/icon_alias_port.gif | Bin 0 -> 346 bytes .../the_wall/images/icons/icon_alias_url.gif | Bin 0 -> 314 bytes .../images/icons/icon_alias_url_reload.gif | Bin 0 -> 1111 bytes .../the_wall/images/icons/icon_block.gif | Bin 0 -> 193 bytes .../the_wall/images/icons/icon_block_add.gif | Bin 0 -> 192 bytes .../the_wall/images/icons/icon_block_d.gif | Bin 0 -> 193 bytes .../the_wall/images/icons/icon_cablenic.gif | Bin 0 -> 91 bytes .../themes/the_wall/images/icons/icon_cal.gif | Bin 0 -> 646 bytes .../the_wall/images/icons/icon_cal_mo.gif | Bin 0 -> 1060 bytes .../the_wall/images/icons/icon_carp.gif | Bin 0 -> 352 bytes .../the_wall/images/icons/icon_carp_d.gif | Bin 0 -> 357 bytes .../the_wall/images/icons/icon_chain.png | Bin 0 -> 161 bytes .../the_wall/images/icons/icon_check.gif | Bin 0 -> 1291 bytes .../images/icons/icon_clock_green.gif | Bin 0 -> 308 bytes .../the_wall/images/icons/icon_clock_grey.gif | Bin 0 -> 308 bytes .../the_wall/images/icons/icon_clock_red.gif | Bin 0 -> 308 bytes .../the_wall/images/icons/icon_close.gif | Bin 0 -> 64 bytes .../the_wall/images/icons/icon_configure.gif | Bin 0 -> 64 bytes .../the_wall/images/icons/icon_down.gif | Bin 0 -> 1114 bytes .../the_wall/images/icons/icon_down_d.gif | Bin 0 -> 689 bytes .../the_wall/images/icons/icon_down_mo.gif | Bin 0 -> 1117 bytes .../themes/the_wall/images/icons/icon_e.gif | Bin 0 -> 1106 bytes .../the_wall/images/icons/icon_e_mo.gif | Bin 0 -> 1120 bytes .../the_wall/images/icons/icon_error.gif | Bin 0 -> 1312 bytes .../the_wall/images/icons/icon_exclam.gif | Bin 0 -> 1274 bytes .../the_wall/images/icons/icon_flag_de.png | Bin 0 -> 114 bytes .../the_wall/images/icons/icon_flag_en.png | Bin 0 -> 618 bytes .../the_wall/images/icons/icon_flag_es.png | Bin 0 -> 281 bytes .../the_wall/images/icons/icon_flag_pt_BR.png | Bin 0 -> 502 bytes .../images/icons/icon_frmfld_cert.png | Bin 0 -> 1528 bytes .../images/icons/icon_frmfld_file.png | Bin 0 -> 687 bytes .../images/icons/icon_frmfld_group.png | Bin 0 -> 748 bytes .../images/icons/icon_frmfld_host.png | Bin 0 -> 513 bytes .../the_wall/images/icons/icon_frmfld_imp.png | Bin 0 -> 644 bytes .../images/icons/icon_frmfld_mail.png | Bin 0 -> 371 bytes .../the_wall/images/icons/icon_frmfld_pwd.png | Bin 0 -> 620 bytes .../images/icons/icon_frmfld_search.png | Bin 0 -> 593 bytes .../images/icons/icon_frmfld_time.png | Bin 0 -> 646 bytes .../images/icons/icon_frmfld_unknown.png | Bin 0 -> 487 bytes .../the_wall/images/icons/icon_frmfld_url.png | Bin 0 -> 704 bytes .../images/icons/icon_frmfld_user.png | Bin 0 -> 654 bytes .../the_wall/images/icons/icon_fw-update.gif | Bin 0 -> 43785 bytes .../the_wall/images/icons/icon_help.gif | Bin 0 -> 1669 bytes .../the_wall/images/icons/icon_ifalias.gif | Bin 0 -> 315 bytes .../the_wall/images/icons/icon_ifalias_d.gif | Bin 0 -> 315 bytes .../images/icons/icon_import_alias.gif | Bin 0 -> 1109 bytes .../themes/the_wall/images/icons/icon_in.gif | Bin 0 -> 177 bytes .../the_wall/images/icons/icon_in_d.gif | Bin 0 -> 190 bytes .../the_wall/images/icons/icon_info_pkg.gif | Bin 0 -> 1131 bytes .../images/icons/icon_interface_down.gif | Bin 0 -> 88 bytes .../images/icons/icon_interface_up.gif | Bin 0 -> 87 bytes .../the_wall/images/icons/icon_left.gif | Bin 0 -> 1120 bytes .../the_wall/images/icons/icon_left_d.gif | Bin 0 -> 691 bytes .../the_wall/images/icons/icon_left_mo.gif | Bin 0 -> 1129 bytes .../themes/the_wall/images/icons/icon_log.gif | Bin 0 -> 297 bytes .../the_wall/images/icons/icon_log_d.gif | Bin 0 -> 297 bytes .../the_wall/images/icons/icon_log_s.gif | Bin 0 -> 305 bytes .../the_wall/images/icons/icon_log_s_d.gif | Bin 0 -> 305 bytes .../the_wall/images/icons/icon_logs.gif | Bin 0 -> 2092 bytes .../the_wall/images/icons/icon_match.gif | Bin 0 -> 847 bytes .../the_wall/images/icons/icon_match_d.gif | Bin 0 -> 843 bytes .../the_wall/images/icons/icon_minus.gif | Bin 0 -> 61 bytes .../the_wall/images/icons/icon_open.gif | Bin 0 -> 62 bytes .../the_wall/images/icons/icon_other.gif | Bin 0 -> 125 bytes .../the_wall/images/icons/icon_other_d.gif | Bin 0 -> 125 bytes .../themes/the_wall/images/icons/icon_out.gif | Bin 0 -> 179 bytes .../the_wall/images/icons/icon_out_d.gif | Bin 0 -> 189 bytes .../the_wall/images/icons/icon_parp.gif | Bin 0 -> 303 bytes .../the_wall/images/icons/icon_parp_d.gif | Bin 0 -> 303 bytes .../the_wall/images/icons/icon_pass.gif | Bin 0 -> 182 bytes .../the_wall/images/icons/icon_pass_add.gif | Bin 0 -> 183 bytes .../the_wall/images/icons/icon_pass_d.gif | Bin 0 -> 182 bytes .../the_wall/images/icons/icon_plus.gif | Bin 0 -> 1100 bytes .../the_wall/images/icons/icon_plus_bl.gif | Bin 0 -> 1096 bytes .../the_wall/images/icons/icon_plus_bl_p.gif | Bin 0 -> 1079 bytes .../the_wall/images/icons/icon_plus_d.gif | Bin 0 -> 682 bytes .../the_wall/images/icons/icon_plus_mo.gif | Bin 0 -> 1120 bytes .../the_wall/images/icons/icon_plus_p.gif | Bin 0 -> 1087 bytes .../the_wall/images/icons/icon_reinstall.gif | Bin 0 -> 1119 bytes .../images/icons/icon_reinstall_d.gif | Bin 0 -> 701 bytes .../images/icons/icon_reinstall_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_reinstall_pkg.gif | Bin 0 -> 1109 bytes .../images/icons/icon_reinstall_pkg_d.gif | Bin 0 -> 694 bytes .../images/icons/icon_reinstall_pkg_mo.gif | Bin 0 -> 1135 bytes .../images/icons/icon_reinstall_xml.gif | Bin 0 -> 1105 bytes .../images/icons/icon_reinstall_xml_d.gif | Bin 0 -> 686 bytes .../images/icons/icon_reinstall_xml_mo.gif | Bin 0 -> 1131 bytes .../the_wall/images/icons/icon_reject.gif | Bin 0 -> 193 bytes .../the_wall/images/icons/icon_reject_d.gif | Bin 0 -> 193 bytes .../the_wall/images/icons/icon_right.gif | Bin 0 -> 1117 bytes .../images/icons/icon_service_restart.gif | Bin 0 -> 1120 bytes .../images/icons/icon_service_restart_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_running.gif | Bin 0 -> 1390 bytes .../images/icons/icon_service_start.gif | Bin 0 -> 1119 bytes .../images/icons/icon_service_start_d.gif | Bin 0 -> 1115 bytes .../images/icons/icon_service_status.gif | Bin 0 -> 2150 bytes .../images/icons/icon_service_stop.gif | Bin 0 -> 1106 bytes .../images/icons/icon_service_stop_d.gif | Bin 0 -> 1100 bytes .../images/icons/icon_service_stopped.gif | Bin 0 -> 1695 bytes .../images/icons/icon_services_restart_mo.gif | Bin 0 -> 1129 bytes .../images/icons/icon_services_start_mo.gif | Bin 0 -> 1130 bytes .../images/icons/icon_services_stop_mo.gif | Bin 0 -> 1126 bytes .../images/icons/icon_system-group-grey.png | Bin 0 -> 1566 bytes .../images/icons/icon_system-group.png | Bin 0 -> 3128 bytes .../images/icons/icon_system-user-grey.png | Bin 0 -> 1107 bytes .../images/icons/icon_system-user.png | Bin 0 -> 2084 bytes .../images/icons/icon_system_lock_screen.png | Bin 0 -> 1841 bytes .../images/icons/icon_system_logout.png | Bin 0 -> 2087 bytes .../the_wall/images/icons/icon_trapped.gif | Bin 0 -> 1101 bytes .../the_wall/images/icons/icon_trapped_p.gif | Bin 0 -> 1079 bytes .../the_wall/images/icons/icon_ts_rule.gif | Bin 0 -> 194 bytes .../the_wall/images/icons/icon_ts_rule_d.gif | Bin 0 -> 193 bytes .../themes/the_wall/images/icons/icon_up.gif | Bin 0 -> 1116 bytes .../the_wall/images/icons/icon_up_d.gif | Bin 0 -> 691 bytes .../the_wall/images/icons/icon_up_mo.gif | Bin 0 -> 1129 bytes .../the_wall/images/icons/icon_wlan.gif | Bin 0 -> 66 bytes .../the_wall/images/icons/icon_wlan_d.gif | Bin 0 -> 100 bytes .../the_wall/images/icons/icon_wol_all.gif | Bin 0 -> 1126 bytes .../the_wall/images/icons/icon_wzd_nsaved.png | Bin 0 -> 512 bytes .../the_wall/images/icons/icon_wzd_saved.png | Bin 0 -> 399 bytes .../themes/the_wall/images/icons/icon_x.gif | Bin 0 -> 1111 bytes .../themes/the_wall/images/icons/icon_x_d.gif | Bin 0 -> 680 bytes .../the_wall/images/icons/icon_x_mo.gif | Bin 0 -> 1126 bytes .../themes/the_wall/images/icons/icon_x_p.gif | Bin 0 -> 1090 bytes .../www/themes/the_wall/images/icons/in.gif | Bin 0 -> 177 bytes .../www/themes/the_wall/images/icons/in_d.gif | Bin 0 -> 190 bytes .../www/themes/the_wall/images/icons/out.gif | Bin 0 -> 179 bytes .../themes/the_wall/images/icons/out_d.gif | Bin 0 -> 189 bytes usr/local/www/themes/the_wall/images/log.png | Bin 0 -> 270 bytes usr/local/www/themes/the_wall/images/logo.gif | Bin 0 -> 7599 bytes .../www/themes/the_wall/images/logobig.jpg | Bin 0 -> 7540 bytes .../www/themes/the_wall/images/menu_down.gif | Bin 0 -> 61 bytes .../www/themes/the_wall/images/menu_right.gif | Bin 0 -> 61 bytes .../themes/the_wall/images/misc/bar_blue.gif | Bin 0 -> 94 bytes .../themes/the_wall/images/misc/bar_gray.gif | Bin 0 -> 94 bytes .../themes/the_wall/images/misc/bar_left.gif | Bin 0 -> 289 bytes .../themes/the_wall/images/misc/bar_right.gif | Bin 0 -> 288 bytes .../images/misc/bullet_toggle_minus.png | Bin 0 -> 154 bytes .../images/misc/bullet_toggle_plus.png | Bin 0 -> 156 bytes .../themes/the_wall/images/misc/button.gif | Bin 0 -> 805 bytes .../www/themes/the_wall/images/misc/graph.png | Bin 0 -> 2256 bytes .../themes/the_wall/images/misc/key_128.gif | Bin 0 -> 2766 bytes .../themes/the_wall/images/misc/key_152.gif | Bin 0 -> 2772 bytes .../themes/the_wall/images/misc/key_256.gif | Bin 0 -> 2808 bytes .../themes/the_wall/images/misc/key_64.gif | Bin 0 -> 2723 bytes .../themes/the_wall/images/misc/loader.gif | Bin 0 -> 2248 bytes .../the_wall/images/misc/loader_all.gif | Bin 0 -> 1398 bytes .../the_wall/images/misc/loader_filter.gif | Bin 0 -> 1436 bytes .../the_wall/images/misc/loader_tab.gif | Bin 0 -> 2248 bytes .../www/themes/the_wall/images/misc/logon.png | Bin 0 -> 22000 bytes .../the_wall/images/misc/progress_bar.gif | Bin 0 -> 44791 bytes .../themes/the_wall/images/misc/rrd_error.png | Bin 0 -> 38898 bytes .../the_wall/images/misc/status_alerter.gif | Bin 0 -> 2203 bytes .../images/misc/status_carpmaster.gif | Bin 0 -> 1558 bytes .../the_wall/images/misc/status_left.gif | Bin 0 -> 600 bytes .../images/misc/status_page_loading.gif | Bin 0 -> 1621 bytes .../images/misc/status_reload_all.gif | Bin 0 -> 1611 bytes .../images/misc/status_reload_filter.gif | Bin 0 -> 1612 bytes .../the_wall/images/misc/status_right.gif | Bin 0 -> 599 bytes .../www/themes/the_wall/images/misc/tri_c.gif | Bin 0 -> 61 bytes .../the_wall/images/misc/tri_c_black.gif | Bin 0 -> 69 bytes .../www/themes/the_wall/images/misc/tri_o.gif | Bin 0 -> 58 bytes .../the_wall/images/misc/tri_o_black.gif | Bin 0 -> 67 bytes .../the_wall/images/misc/widget_loader.gif | Bin 0 -> 2545 bytes .../images/misc/widget_loader_old.gif | Bin 0 -> 1064 bytes .../themes/the_wall/images/new_tab_menu.png | Bin 0 -> 444 bytes .../www/themes/the_wall/images/status.png | Bin 0 -> 348 bytes .../themes/the_wall/images/transparent.gif | Bin 0 -> 146 bytes .../the_wall/images/transparent_pixel.gif | Bin 0 -> 43 bytes .../images/wizards/initial/joincluster.gif | Bin 0 -> 10076 bytes .../images/wizards/initial/joincluster_mo.gif | Bin 0 -> 10153 bytes .../images/wizards/initial/restore.gif | Bin 0 -> 9199 bytes .../images/wizards/initial/restore_mo.gif | Bin 0 -> 9099 bytes .../images/wizards/initial/standalone.gif | Bin 0 -> 7265 bytes .../images/wizards/initial/standalone_mo.gif | Bin 0 -> 7382 bytes .../wizards/initial/startnewcluster.gif | Bin 0 -> 10175 bytes .../wizards/initial/startnewcluster_mo.gif | Bin 0 -> 10030 bytes .../themes/the_wall/javascript/ie7/blank.gif | Bin 0 -> 48 bytes .../the_wall/javascript/ie7/ie7-box-model.js | 2 + .../the_wall/javascript/ie7/ie7-core.js | 2 + .../the_wall/javascript/ie7/ie7-css-strict.js | 2 + .../the_wall/javascript/ie7/ie7-css2.js | 2 + .../the_wall/javascript/ie7/ie7-css3.js | 2 + .../the_wall/javascript/ie7/ie7-fixed.js | 2 + .../the_wall/javascript/ie7/ie7-html4.js | 2 + .../themes/the_wall/javascript/ie7/ie7-ie5.js | 2 + .../the_wall/javascript/ie7/ie7-lite-p.js | 3 + .../the_wall/javascript/ie7/ie7-lite.js | 2 + .../themes/the_wall/javascript/ie7/ie7-png.js | 2 + .../the_wall/javascript/ie7/ie7-server.css | 43 + .../the_wall/javascript/ie7/ie7-standard-p.js | 3 + .../the_wall/javascript/ie7/ie7-standard.js | 2 + .../the_wall/javascript/ie7/test-trans.png | Bin 0 -> 106 bytes .../the_wall/javascript/img/grey-40.png | Bin 0 -> 223 bytes .../the_wall/javascript/img/submenu-off.gif | Bin 0 -> 65 bytes .../the_wall/javascript/img/submenu-on.gif | Bin 0 -> 65 bytes .../the_wall/javascript/img/white-90.png | Bin 0 -> 223 bytes .../www/themes/the_wall/javascript/img/x.gif | Bin 0 -> 43 bytes .../themes/the_wall/javascript/niftyjsCode.js | 174 + .../the_wall/javascript/transmenu-body.php | 51 + .../the_wall/javascript/transmenu-head.php | 85 + .../themes/the_wall/javascript/transmenu.org | 785 + .../themes/the_wall/javascript/transmenuC.js | 86 + .../www/themes/the_wall/jsevents/body.def | 7 + usr/local/www/themes/the_wall/loader.js | 30 + usr/local/www/themes/the_wall/login.css | 1159 + usr/local/www/themes/the_wall/menu.inc | 178 + .../www/themes/the_wall/new_tab_menu.css | 101 + usr/local/www/themes/the_wall/no_big_logo | 1 + .../www/themes/the_wall/rrdcolors.inc.php | 88 + .../www/themes/the_wall/styles/menustyles.css | 44 + .../www/themes/the_wall/styles/transmenu.css | 75 + usr/local/www/themes/the_wall/wizard.css | 1060 + usr/local/www/tree-images/empty.gif | Bin 0 -> 837 bytes usr/local/www/tree-images/join.gif | Bin 0 -> 857 bytes usr/local/www/tree-images/joinbottom.gif | Bin 0 -> 850 bytes usr/local/www/tree-images/line.gif | Bin 0 -> 853 bytes usr/local/www/tree-images/minus_.gif | Bin 0 -> 913 bytes usr/local/www/tree-images/minus_up.gif | Bin 0 -> 911 bytes usr/local/www/tree-images/page.gif | Bin 0 -> 980 bytes usr/local/www/tree-images/plus_.gif | Bin 0 -> 910 bytes usr/local/www/tree-images/plus_up.gif | Bin 0 -> 913 bytes usr/local/www/tree-images/plus_updown.gif | Bin 0 -> 915 bytes usr/local/www/tree-images/zone.gif | Bin 0 -> 318 bytes usr/local/www/tree/i-bottom.gif | Bin 0 -> 125 bytes usr/local/www/tree/i-repeater.gif | Bin 0 -> 91 bytes usr/local/www/tree/index.html | 228 + usr/local/www/tree/l.gif | Bin 0 -> 131 bytes usr/local/www/tree/minus.gif | Bin 0 -> 146 bytes usr/local/www/tree/page-file.png | Bin 0 -> 211 bytes usr/local/www/tree/page-file_play.gif | Bin 0 -> 1021 bytes usr/local/www/tree/page-file_x.gif | Bin 0 -> 630 bytes usr/local/www/tree/page-foldericon.png | Bin 0 -> 210 bytes usr/local/www/tree/page-openfoldericon.png | Bin 0 -> 219 bytes usr/local/www/tree/plus.gif | Bin 0 -> 149 bytes usr/local/www/tree/t.gif | Bin 0 -> 141 bytes usr/local/www/tree/tree.css | 136 + usr/local/www/tree/tree.js | 195 + usr/local/www/treeview.css | 48 + usr/local/www/uploadconfig.php | 64 + usr/local/www/vpn_ipsec.php | 664 + usr/local/www/vpn_ipsec_keys.php | 188 + usr/local/www/vpn_ipsec_keys_edit.php | 167 + usr/local/www/vpn_ipsec_mobile.php | 693 + usr/local/www/vpn_ipsec_phase1.php | 934 + usr/local/www/vpn_ipsec_phase2.php | 887 + usr/local/www/vpn_ipsec_settings.php | 253 + usr/local/www/vpn_l2tp.php | 475 + usr/local/www/vpn_l2tp_users.php | 132 + usr/local/www/vpn_l2tp_users_edit.php | 194 + usr/local/www/vpn_openvpn_client.php | 1201 + usr/local/www/vpn_openvpn_csc.php | 826 + usr/local/www/vpn_openvpn_server.php | 1922 + usr/local/www/vpn_pppoe.php | 155 + usr/local/www/vpn_pppoe_edit.php | 631 + usr/local/www/vpn_pptp.php | 503 + usr/local/www/vpn_pptp_users.php | 141 + usr/local/www/vpn_pptp_users_edit.php | 182 + .../www/widgets/include/captiveportal.inc | 4 + usr/local/www/widgets/include/carp_status.inc | 7 + .../www/widgets/include/dyn_dns_status.inc | 7 + usr/local/www/widgets/include/gateways.inc | 5 + .../widgets/include/installed_packages.inc | 7 + .../widgets/include/interface_statistics.inc | 5 + usr/local/www/widgets/include/interfaces.inc | 6 + usr/local/www/widgets/include/ipsec.inc | 4 + .../www/widgets/include/load_balancer.inc | 4 + usr/local/www/widgets/include/log.inc | 6 + usr/local/www/widgets/include/ntp_status.inc | 5 + usr/local/www/widgets/include/openvpn.inc | 4 + .../www/widgets/include/services_status.inc | 7 + .../www/widgets/include/smart_status.inc | 5 + .../www/widgets/include/thermal_sensors.inc | 27 + .../www/widgets/include/traffic_graph.inc | 4 + usr/local/www/widgets/include/wake_on_lan.inc | 7 + .../www/widgets/javascript/cpu_graphs.js | 245 + usr/local/www/widgets/javascript/ipsec.js | 9 + .../www/widgets/javascript/thermal_sensors.js | 295 + .../www/widgets/javascript/traffic_graph.js | 34 + .../widgets/captive_portal_status.widget.php | 114 + .../widgets/widgets/carp_status.widget.php | 81 + .../widgets/deactivated/cpu_graphs.widget.php | 72 + .../widgets/widgets/dyn_dns_status.widget.php | 164 + .../www/widgets/widgets/gateways.widget.php | 130 + .../widgets/widgets/gmirror_status.widget.php | 50 + .../widgets/installed_packages.widget.php | 123 + .../widgets/interface_statistics.widget.php | 212 + .../www/widgets/widgets/interfaces.widget.php | 102 + .../www/widgets/widgets/ipsec.widget.php | 217 + .../widgets/load_balancer_status.widget.php | 144 + usr/local/www/widgets/widgets/log.widget.php | 221 + .../www/widgets/widgets/ntp_status.widget.php | 500 + .../www/widgets/widgets/openvpn.widget.php | 257 + .../www/widgets/widgets/picture.widget.php | 94 + usr/local/www/widgets/widgets/rss.widget.php | 184 + .../widgets/services_status.widget.php | 100 + .../widgets/widgets/smart_status.widget.php | 74 + .../widgets/system_information.widget.php | 317 + .../widgets/thermal_sensors.widget.php | 279 + .../widgets/widgets/traffic_graphs.widget.php | 181 + .../widgets/widgets/wake_on_lan.widget.php | 77 + usr/local/www/wizard.php | 973 + usr/local/www/wizards/openvpn_wizard.inc | 668 + usr/local/www/wizards/openvpn_wizard.xml | 985 + usr/local/www/wizards/setup_wizard.xml | 660 + .../traffic_shaper_wizard_dedicated.inc | 1656 + .../traffic_shaper_wizard_dedicated.xml | 1628 + .../traffic_shaper_wizard_multi_all.inc | 1727 + .../traffic_shaper_wizard_multi_all.xml | 1636 + usr/local/www/xmlrpc.php | 560 + usr/root/.hushlogin | 0 usr/root/.profile | 5 + usr/root/.shrc | 5 + usr/root/.tcshrc | 21 + usr/sbin/athctrl.sh | 41 + usr/sbin/dhclient-script | 407 + usr/sbin/pc-sysinstall/Makefile | 5 + usr/sbin/pc-sysinstall/Makefile.inc | 3 + .../backend-partmanager/Makefile | 8 + .../backend-partmanager/create-part.sh | 92 + .../backend-partmanager/delete-part.sh | 89 + usr/sbin/pc-sysinstall/backend-query/Makefile | 13 + .../backend-query/detect-emulation.sh | 41 + .../backend-query/detect-laptop.sh | 32 + .../backend-query/detect-nics.sh | 36 + .../pc-sysinstall/backend-query/disk-info.sh | 60 + .../pc-sysinstall/backend-query/disk-list.sh | 103 + .../pc-sysinstall/backend-query/disk-part.sh | 117 + .../pc-sysinstall/backend-query/enable-net.sh | 65 + .../backend-query/get-packages.sh | 52 + .../backend-query/list-components.sh | 55 + .../backend-query/list-config.sh | 30 + .../backend-query/list-mirrors.sh | 37 + .../backend-query/list-packages.sh | 86 + .../backend-query/list-rsync-backups.sh | 70 + .../backend-query/list-tzones.sh | 34 + .../backend-query/query-langs.sh | 30 + .../pc-sysinstall/backend-query/send-logs.sh | 83 + .../pc-sysinstall/backend-query/set-mirror.sh | 40 + .../backend-query/setup-ssh-keys.sh | 64 + .../pc-sysinstall/backend-query/sys-mem.sh | 28 + .../pc-sysinstall/backend-query/test-live.sh | 33 + .../pc-sysinstall/backend-query/test-netup.sh | 50 + .../backend-query/update-part-list.sh | 110 + .../backend-query/xkeyboard-layouts.sh | 56 + .../backend-query/xkeyboard-models.sh | 58 + .../backend-query/xkeyboard-variants.sh | 56 + usr/sbin/pc-sysinstall/backend/Makefile | 15 + .../backend/functions-bsdlabel.sh | 819 + .../backend/functions-cleanup.sh | 418 + .../pc-sysinstall/backend/functions-disk.sh | 827 + .../backend/functions-extractimage.sh | 457 + .../pc-sysinstall/backend/functions-ftp.sh | 417 + .../backend/functions-installcomponents.sh | 167 + .../backend/functions-installpackages.sh | 125 + .../backend/functions-localize.sh | 511 + .../backend/functions-mountdisk.sh | 191 + .../backend/functions-mountoptical.sh | 153 + .../backend/functions-networking.sh | 357 + .../pc-sysinstall/backend/functions-newfs.sh | 217 + .../backend/functions-packages.sh | 376 + .../pc-sysinstall/backend/functions-parse.sh | 232 + .../backend/functions-runcommands.sh | 110 + .../backend/functions-unmount.sh | 209 + .../backend/functions-upgrade.sh | 247 + .../pc-sysinstall/backend/functions-users.sh | 175 + usr/sbin/pc-sysinstall/backend/functions.sh | 497 + .../pc-sysinstall/backend/installimage.sh | 34 + usr/sbin/pc-sysinstall/backend/parseconfig.sh | 120 + .../pc-sysinstall/backend/startautoinstall.sh | 136 + usr/sbin/pc-sysinstall/conf/Makefile | 11 + usr/sbin/pc-sysinstall/conf/avail-langs | 20 + .../pc-sysinstall/conf/exclude-from-upgrade | 15 + .../pc-sysinstall/conf/licenses/bsd-en.txt | 24 + .../pc-sysinstall/conf/licenses/intel-en.txt | 207 + .../pc-sysinstall/conf/licenses/nvidia-en.txt | 53 + .../pc-sysinstall/conf/pc-sysinstall.conf | 86 + usr/sbin/pc-sysinstall/doc/Makefile | 8 + usr/sbin/pc-sysinstall/doc/help-disk-list | 1 + usr/sbin/pc-sysinstall/doc/help-disk-size | 1 + usr/sbin/pc-sysinstall/doc/help-index | 100 + .../pc-sysinstall/doc/help-start-autoinstall | 39 + usr/sbin/pc-sysinstall/examples/Makefile | 11 + usr/sbin/pc-sysinstall/examples/README | 369 + .../examples/pc-autoinstall.conf | 52 + .../examples/pcinstall.cfg.fbsd-netinstall | 71 + .../pc-sysinstall/examples/pcinstall.cfg.geli | 50 + .../examples/pcinstall.cfg.gmirror | 45 + .../examples/pcinstall.cfg.netinstall | 68 + .../examples/pcinstall.cfg.restore | 57 + .../examples/pcinstall.cfg.rsync | 45 + .../examples/pcinstall.cfg.upgrade | 24 + .../pc-sysinstall/examples/pcinstall.cfg.zfs | 59 + usr/sbin/pc-sysinstall/examples/pfSense.cfg | 31 + .../pc-sysinstall/examples/pfSense.cfg.zfs | 46 + usr/sbin/pc-sysinstall/pc-sysinstall/Makefile | 6 + .../pc-sysinstall/pc-sysinstall.8 | 120 + .../pc-sysinstall/pc-sysinstall.sh | 240 + usr/share/doc/legal/intel_ipw/LICENSE | 207 + usr/share/doc/legal/intel_iwi/LICENSE | 210 + usr/share/doc/legal/intel_wpi/LICENSE | 39 + usr/share/zoneinfo.tgz | Bin 0 -> 164339 bytes usr/tmp/post_upgrade_command | 45 + usr/tmp/post_upgrade_command.php | 33 + usr/tmp/pre_upgrade_command | 30 + 3187 files changed, 572830 insertions(+) create mode 100644 boot/device.hints_wrap create mode 100644 boot/loader.conf_wrap create mode 100644 cf/conf/trigger_initial_wizard create mode 100644 conf.default/config.xml create mode 100644 etc/ascii-art/pfsense-logo-small.txt create mode 100644 etc/bogons create mode 100644 etc/bogonsv6 create mode 100644 etc/ca_countries create mode 100644 etc/ddb.conf create mode 100644 etc/devd.conf create mode 100644 etc/dh-parameters.1024 create mode 100644 etc/dh-parameters.2048 create mode 100644 etc/dh-parameters.4096 create mode 100644 etc/disktab create mode 100755 etc/ecl.php create mode 100644 etc/fbtab create mode 100644 etc/gettytab create mode 100644 etc/group create mode 100644 etc/host.conf create mode 100644 etc/hosts.allow create mode 100644 etc/inc/CHAP.inc create mode 100644 etc/inc/IPv6.inc create mode 100644 etc/inc/PEAR.inc create mode 100644 etc/inc/array_intersect_key.inc create mode 100644 etc/inc/auth.inc create mode 100644 etc/inc/authgui.inc create mode 100644 etc/inc/basic_sasl_client.inc create mode 100644 etc/inc/captiveportal.inc create mode 100644 etc/inc/certs.inc create mode 100644 etc/inc/config.console.inc create mode 100644 etc/inc/config.gui.inc create mode 100644 etc/inc/config.inc create mode 100644 etc/inc/config.lib.inc create mode 100644 etc/inc/cram_md5_sasl_client.inc create mode 100644 etc/inc/crypt.inc create mode 100644 etc/inc/digest_sasl_client.inc create mode 100644 etc/inc/dyndns.class create mode 100644 etc/inc/easyrule.inc create mode 100644 etc/inc/filter.inc create mode 100644 etc/inc/filter_log.inc create mode 100644 etc/inc/functions.inc create mode 100644 etc/inc/globals.inc create mode 100644 etc/inc/gmirror.inc create mode 100644 etc/inc/growl.class create mode 100644 etc/inc/gwlb.inc create mode 100644 etc/inc/interfaces.inc create mode 100644 etc/inc/ipsec.attributes.php create mode 100755 etc/inc/ipsec.auth-user.php create mode 100644 etc/inc/ipsec.inc create mode 100644 etc/inc/itemid.inc create mode 100644 etc/inc/led.inc create mode 100644 etc/inc/login_sasl_client.inc create mode 100644 etc/inc/meta.inc create mode 100644 etc/inc/notices.inc create mode 100644 etc/inc/ntlm_sasl_client.inc create mode 100644 etc/inc/openvpn.attributes.php create mode 100644 etc/inc/openvpn.auth-user.php create mode 100644 etc/inc/openvpn.inc create mode 100644 etc/inc/openvpn.tls-verify.php create mode 100644 etc/inc/pfsense-utils.inc create mode 100644 etc/inc/pkg-utils.inc create mode 100644 etc/inc/plain_sasl_client.inc create mode 100644 etc/inc/priv.defs.inc create mode 100644 etc/inc/priv.inc create mode 100644 etc/inc/priv/user.priv.inc create mode 100644 etc/inc/r53.class create mode 100644 etc/inc/radius.inc create mode 100644 etc/inc/rrd.inc create mode 100644 etc/inc/sasl.inc create mode 100644 etc/inc/service-utils.inc create mode 100644 etc/inc/services.inc create mode 100644 etc/inc/shaper.inc create mode 100644 etc/inc/simplepie/LICENSE.txt create mode 100644 etc/inc/simplepie/simplepie.inc create mode 100644 etc/inc/smtp.inc create mode 100644 etc/inc/system.inc create mode 100644 etc/inc/unbound.inc create mode 100644 etc/inc/upgrade_config.inc create mode 100644 etc/inc/util.inc create mode 100644 etc/inc/uuid.php create mode 100644 etc/inc/voucher.inc create mode 100644 etc/inc/vpn.inc create mode 100644 etc/inc/vslb.inc create mode 100644 etc/inc/wizardapp.inc create mode 100644 etc/inc/xmlparse.inc create mode 100644 etc/inc/xmlparse_attr.inc create mode 100644 etc/inc/xmlreader.inc create mode 100644 etc/inc/xmlrpc.inc create mode 100644 etc/inc/xmlrpc_client.inc create mode 100644 etc/inc/xmlrpc_server.inc create mode 100644 etc/inc/zeromq.inc create mode 100644 etc/inetd.conf create mode 100644 etc/login.conf create mode 100644 etc/master.passwd create mode 100644 etc/motd create mode 100644 etc/mtree/BSD.local.dist create mode 100644 etc/networks create mode 100644 etc/passwd create mode 100644 etc/pf.os create mode 100644 etc/pfSense.obsoletedfiles create mode 100644 etc/phpshellsessions/changepassword create mode 100644 etc/phpshellsessions/disablecarp create mode 100644 etc/phpshellsessions/disabledhcpd create mode 100644 etc/phpshellsessions/disablereferercheck create mode 100644 etc/phpshellsessions/enableallowallwan create mode 100644 etc/phpshellsessions/enablecarp create mode 100644 etc/phpshellsessions/enablesshd create mode 100644 etc/phpshellsessions/externalconfiglocator create mode 100644 etc/phpshellsessions/gitsync create mode 100644 etc/phpshellsessions/installpkg create mode 100644 etc/phpshellsessions/listpkg create mode 100644 etc/phpshellsessions/removepkgconfig create mode 100644 etc/phpshellsessions/removeshaper create mode 100644 etc/phpshellsessions/restartdhcpd create mode 100644 etc/phpshellsessions/restartipsec create mode 100644 etc/phpshellsessions/svc create mode 100644 etc/phpshellsessions/uninstallpkg create mode 100644 etc/platform create mode 100644 etc/printcap create mode 100644 etc/protocols create mode 100644 etc/pubkey.pem create mode 100755 etc/rc create mode 100755 etc/rc.backup_dhcpleases.sh create mode 100755 etc/rc.backup_rrd.sh create mode 100755 etc/rc.banner create mode 100755 etc/rc.bootup create mode 100755 etc/rc.captiveportal_configure create mode 100755 etc/rc.carpbackup create mode 100755 etc/rc.carpmaster create mode 100755 etc/rc.cdrom create mode 100755 etc/rc.conf_mount_ro create mode 100755 etc/rc.conf_mount_rw create mode 100755 etc/rc.create_full_backup create mode 100755 etc/rc.dhclient_cron create mode 100755 etc/rc.disable_hdd_apm create mode 100755 etc/rc.dumpon create mode 100755 etc/rc.dyndns.update create mode 100755 etc/rc.embedded create mode 100755 etc/rc.expireaccounts create mode 100755 etc/rc.filter_configure create mode 100755 etc/rc.filter_configure_sync create mode 100755 etc/rc.filter_configure_xmlrpc create mode 100755 etc/rc.filter_synchronize create mode 100755 etc/rc.firmware create mode 100755 etc/rc.firmware_auto create mode 100755 etc/rc.halt create mode 100755 etc/rc.initial create mode 100755 etc/rc.initial.defaults create mode 100755 etc/rc.initial.firmware_update create mode 100755 etc/rc.initial.halt create mode 100755 etc/rc.initial.password create mode 100755 etc/rc.initial.ping create mode 100755 etc/rc.initial.reboot create mode 100755 etc/rc.initial.setlanip create mode 100755 etc/rc.initial.setports create mode 100755 etc/rc.initial.store_config_to_removable_device create mode 100755 etc/rc.initial.toggle_sshd create mode 100755 etc/rc.interfaces_carp_configure create mode 100755 etc/rc.interfaces_lan_configure create mode 100755 etc/rc.interfaces_opt_configure create mode 100755 etc/rc.interfaces_wan_configure create mode 100755 etc/rc.kill_states create mode 100755 etc/rc.linkup create mode 100755 etc/rc.nanobsd_switch_boot_slice create mode 100755 etc/rc.newipsecdns create mode 100755 etc/rc.newroutedns create mode 100755 etc/rc.newwanip create mode 100755 etc/rc.newwanipv6 create mode 100755 etc/rc.notify_message create mode 100755 etc/rc.ntpdate create mode 100755 etc/rc.openvpn create mode 100755 etc/rc.packages create mode 100755 etc/rc.php-fpm_restart create mode 100755 etc/rc.php_ini_setup create mode 100755 etc/rc.prunecaptiveportal create mode 100755 etc/rc.reboot create mode 100755 etc/rc.reload_all create mode 100755 etc/rc.reload_interfaces create mode 100755 etc/rc.resolv_conf_generate create mode 100755 etc/rc.restart_webgui create mode 100755 etc/rc.restore_config_backup create mode 100755 etc/rc.restore_full_backup create mode 100755 etc/rc.savecore create mode 100755 etc/rc.savevoucher create mode 100755 etc/rc.shutdown create mode 100755 etc/rc.start_packages create mode 100755 etc/rc.stop_packages create mode 100755 etc/rc.update_alias_url_data create mode 100755 etc/rc.update_bogons.sh create mode 100755 etc/rc.update_urltables create mode 100644 etc/services create mode 100644 etc/shells create mode 100644 etc/skel/dot.tcshrc create mode 100644 etc/ssh/sshd_config create mode 100755 etc/sshd create mode 100644 etc/ssl/openssl.cnf create mode 100644 etc/syslog.conf create mode 100644 etc/ttys create mode 100644 etc/version create mode 100644 root/.hushlogin create mode 100644 root/.profile create mode 100644 root/.shrc create mode 100644 root/.tcshrc create mode 100755 sbin/athctrl.sh create mode 100755 sbin/dhclient-script create mode 100755 tmp/post_upgrade_command create mode 100755 tmp/post_upgrade_command.php create mode 100644 tmp/pre_upgrade_command create mode 100644 usr/boot/device.hints_wrap create mode 100644 usr/boot/loader.conf_wrap create mode 100644 usr/cf/conf/trigger_initial_wizard create mode 100644 usr/conf.default/config.xml create mode 100644 usr/etc/ascii-art/pfsense-logo-small.txt create mode 100644 usr/etc/bogons create mode 100644 usr/etc/bogonsv6 create mode 100644 usr/etc/ca_countries create mode 100644 usr/etc/ddb.conf create mode 100644 usr/etc/devd.conf create mode 100644 usr/etc/dh-parameters.1024 create mode 100644 usr/etc/dh-parameters.2048 create mode 100644 usr/etc/dh-parameters.4096 create mode 100644 usr/etc/disktab create mode 100755 usr/etc/ecl.php create mode 100644 usr/etc/fbtab create mode 100644 usr/etc/gettytab create mode 100644 usr/etc/group create mode 100644 usr/etc/host.conf create mode 100644 usr/etc/hosts.allow create mode 100644 usr/etc/inc/CHAP.inc create mode 100644 usr/etc/inc/IPv6.inc create mode 100644 usr/etc/inc/PEAR.inc create mode 100644 usr/etc/inc/array_intersect_key.inc create mode 100644 usr/etc/inc/auth.inc create mode 100644 usr/etc/inc/authgui.inc create mode 100644 usr/etc/inc/basic_sasl_client.inc create mode 100644 usr/etc/inc/captiveportal.inc create mode 100644 usr/etc/inc/certs.inc create mode 100644 usr/etc/inc/config.console.inc create mode 100644 usr/etc/inc/config.gui.inc create mode 100644 usr/etc/inc/config.inc create mode 100644 usr/etc/inc/config.lib.inc create mode 100644 usr/etc/inc/cram_md5_sasl_client.inc create mode 100644 usr/etc/inc/crypt.inc create mode 100644 usr/etc/inc/digest_sasl_client.inc create mode 100644 usr/etc/inc/dyndns.class create mode 100644 usr/etc/inc/easyrule.inc create mode 100644 usr/etc/inc/filter.inc create mode 100644 usr/etc/inc/filter_log.inc create mode 100644 usr/etc/inc/functions.inc create mode 100644 usr/etc/inc/globals.inc create mode 100644 usr/etc/inc/gmirror.inc create mode 100644 usr/etc/inc/growl.class create mode 100644 usr/etc/inc/gwlb.inc create mode 100644 usr/etc/inc/interfaces.inc create mode 100644 usr/etc/inc/ipsec.attributes.php create mode 100755 usr/etc/inc/ipsec.auth-user.php create mode 100644 usr/etc/inc/ipsec.inc create mode 100644 usr/etc/inc/itemid.inc create mode 100644 usr/etc/inc/led.inc create mode 100644 usr/etc/inc/login_sasl_client.inc create mode 100644 usr/etc/inc/meta.inc create mode 100644 usr/etc/inc/notices.inc create mode 100644 usr/etc/inc/ntlm_sasl_client.inc create mode 100644 usr/etc/inc/openvpn.attributes.php create mode 100644 usr/etc/inc/openvpn.auth-user.php create mode 100644 usr/etc/inc/openvpn.inc create mode 100644 usr/etc/inc/openvpn.tls-verify.php create mode 100644 usr/etc/inc/pfsense-utils.inc create mode 100644 usr/etc/inc/pkg-utils.inc create mode 100644 usr/etc/inc/plain_sasl_client.inc create mode 100644 usr/etc/inc/priv.defs.inc create mode 100644 usr/etc/inc/priv.inc create mode 100644 usr/etc/inc/priv/user.priv.inc create mode 100644 usr/etc/inc/r53.class create mode 100644 usr/etc/inc/radius.inc create mode 100644 usr/etc/inc/rrd.inc create mode 100644 usr/etc/inc/sasl.inc create mode 100644 usr/etc/inc/service-utils.inc create mode 100644 usr/etc/inc/services.inc create mode 100644 usr/etc/inc/shaper.inc create mode 100644 usr/etc/inc/simplepie/LICENSE.txt create mode 100644 usr/etc/inc/simplepie/simplepie.inc create mode 100644 usr/etc/inc/smtp.inc create mode 100644 usr/etc/inc/system.inc create mode 100644 usr/etc/inc/unbound.inc create mode 100644 usr/etc/inc/upgrade_config.inc create mode 100644 usr/etc/inc/util.inc create mode 100644 usr/etc/inc/uuid.php create mode 100644 usr/etc/inc/voucher.inc create mode 100644 usr/etc/inc/vpn.inc create mode 100644 usr/etc/inc/vslb.inc create mode 100644 usr/etc/inc/wizardapp.inc create mode 100644 usr/etc/inc/xmlparse.inc create mode 100644 usr/etc/inc/xmlparse_attr.inc create mode 100644 usr/etc/inc/xmlreader.inc create mode 100644 usr/etc/inc/xmlrpc.inc create mode 100644 usr/etc/inc/xmlrpc_client.inc create mode 100644 usr/etc/inc/xmlrpc_server.inc create mode 100644 usr/etc/inc/zeromq.inc create mode 100644 usr/etc/inetd.conf create mode 100644 usr/etc/login.conf create mode 100644 usr/etc/master.passwd create mode 100644 usr/etc/motd create mode 100644 usr/etc/mtree/BSD.local.dist create mode 100644 usr/etc/networks create mode 100644 usr/etc/passwd create mode 100644 usr/etc/pf.os create mode 100644 usr/etc/pfSense.obsoletedfiles create mode 100644 usr/etc/phpshellsessions/changepassword create mode 100644 usr/etc/phpshellsessions/disablecarp create mode 100644 usr/etc/phpshellsessions/disabledhcpd create mode 100644 usr/etc/phpshellsessions/disablereferercheck create mode 100644 usr/etc/phpshellsessions/enableallowallwan create mode 100644 usr/etc/phpshellsessions/enablecarp create mode 100644 usr/etc/phpshellsessions/enablesshd create mode 100644 usr/etc/phpshellsessions/externalconfiglocator create mode 100644 usr/etc/phpshellsessions/gitsync create mode 100644 usr/etc/phpshellsessions/installpkg create mode 100644 usr/etc/phpshellsessions/listpkg create mode 100644 usr/etc/phpshellsessions/removepkgconfig create mode 100644 usr/etc/phpshellsessions/removeshaper create mode 100644 usr/etc/phpshellsessions/restartdhcpd create mode 100644 usr/etc/phpshellsessions/restartipsec create mode 100644 usr/etc/phpshellsessions/svc create mode 100644 usr/etc/phpshellsessions/uninstallpkg create mode 100644 usr/etc/platform create mode 100644 usr/etc/printcap create mode 100644 usr/etc/protocols create mode 100644 usr/etc/pubkey.pem create mode 100755 usr/etc/rc create mode 100755 usr/etc/rc.backup_dhcpleases.sh create mode 100755 usr/etc/rc.backup_rrd.sh create mode 100755 usr/etc/rc.banner create mode 100755 usr/etc/rc.bootup create mode 100755 usr/etc/rc.captiveportal_configure create mode 100755 usr/etc/rc.carpbackup create mode 100755 usr/etc/rc.carpmaster create mode 100755 usr/etc/rc.cdrom create mode 100755 usr/etc/rc.conf_mount_ro create mode 100755 usr/etc/rc.conf_mount_rw create mode 100755 usr/etc/rc.create_full_backup create mode 100755 usr/etc/rc.dhclient_cron create mode 100755 usr/etc/rc.disable_hdd_apm create mode 100755 usr/etc/rc.dumpon create mode 100755 usr/etc/rc.dyndns.update create mode 100755 usr/etc/rc.embedded create mode 100755 usr/etc/rc.expireaccounts create mode 100755 usr/etc/rc.filter_configure create mode 100755 usr/etc/rc.filter_configure_sync create mode 100755 usr/etc/rc.filter_configure_xmlrpc create mode 100755 usr/etc/rc.filter_synchronize create mode 100755 usr/etc/rc.firmware create mode 100755 usr/etc/rc.firmware_auto create mode 100755 usr/etc/rc.halt create mode 100755 usr/etc/rc.initial create mode 100755 usr/etc/rc.initial.defaults create mode 100755 usr/etc/rc.initial.firmware_update create mode 100755 usr/etc/rc.initial.halt create mode 100755 usr/etc/rc.initial.password create mode 100755 usr/etc/rc.initial.ping create mode 100755 usr/etc/rc.initial.reboot create mode 100755 usr/etc/rc.initial.setlanip create mode 100755 usr/etc/rc.initial.setports create mode 100755 usr/etc/rc.initial.store_config_to_removable_device create mode 100755 usr/etc/rc.initial.toggle_sshd create mode 100755 usr/etc/rc.interfaces_carp_configure create mode 100755 usr/etc/rc.interfaces_lan_configure create mode 100755 usr/etc/rc.interfaces_opt_configure create mode 100755 usr/etc/rc.interfaces_wan_configure create mode 100755 usr/etc/rc.kill_states create mode 100755 usr/etc/rc.linkup create mode 100755 usr/etc/rc.nanobsd_switch_boot_slice create mode 100755 usr/etc/rc.newipsecdns create mode 100755 usr/etc/rc.newroutedns create mode 100755 usr/etc/rc.newwanip create mode 100755 usr/etc/rc.newwanipv6 create mode 100755 usr/etc/rc.notify_message create mode 100755 usr/etc/rc.ntpdate create mode 100755 usr/etc/rc.openvpn create mode 100755 usr/etc/rc.packages create mode 100755 usr/etc/rc.php-fpm_restart create mode 100755 usr/etc/rc.php_ini_setup create mode 100755 usr/etc/rc.prunecaptiveportal create mode 100755 usr/etc/rc.reboot create mode 100755 usr/etc/rc.reload_all create mode 100755 usr/etc/rc.reload_interfaces create mode 100755 usr/etc/rc.resolv_conf_generate create mode 100755 usr/etc/rc.restart_webgui create mode 100755 usr/etc/rc.restore_config_backup create mode 100755 usr/etc/rc.restore_full_backup create mode 100755 usr/etc/rc.savecore create mode 100755 usr/etc/rc.savevoucher create mode 100755 usr/etc/rc.shutdown create mode 100755 usr/etc/rc.start_packages create mode 100755 usr/etc/rc.stop_packages create mode 100755 usr/etc/rc.update_alias_url_data create mode 100755 usr/etc/rc.update_bogons.sh create mode 100755 usr/etc/rc.update_urltables create mode 100644 usr/etc/services create mode 100644 usr/etc/shells create mode 100644 usr/etc/skel/dot.tcshrc create mode 100644 usr/etc/ssh/sshd_config create mode 100755 usr/etc/sshd create mode 100644 usr/etc/ssl/openssl.cnf create mode 100644 usr/etc/syslog.conf create mode 100644 usr/etc/ttys create mode 100644 usr/etc/version create mode 100755 usr/local/bin/3gstats.php create mode 100755 usr/local/bin/beep.sh create mode 100644 usr/local/bin/captiveportal_gather_stats.php create mode 100755 usr/local/bin/easyrule create mode 100755 usr/local/bin/filterparser.php create mode 100755 usr/local/bin/mail.php create mode 100755 usr/local/bin/ping_hosts.sh create mode 100755 usr/local/bin/runmsntp.sh create mode 100755 usr/local/bin/slowdownpipe.sh create mode 100755 usr/local/bin/viconfig create mode 100644 usr/local/captiveportal/index.php create mode 100644 usr/local/captiveportal/radius_accounting.inc create mode 100644 usr/local/captiveportal/radius_authentication.inc create mode 100644 usr/local/etc/pkg.conf create mode 120000 usr/local/openssl/openssl.cnf create mode 100644 usr/local/opnsense/check_reload_status.py create mode 100644 usr/local/opnsense/conf/actions_filter.conf create mode 100644 usr/local/opnsense/conf/actions_interface.conf create mode 100644 usr/local/opnsense/conf/actions_service.conf create mode 100644 usr/local/opnsense/conf/check_reload_status.conf create mode 100644 usr/local/opnsense/execute_command.py create mode 100644 usr/local/opnsense/modules/__init__.py create mode 100644 usr/local/opnsense/modules/daemonize.py create mode 100644 usr/local/opnsense/modules/processhandler.py create mode 100644 usr/local/pkg/miniupnpd.inc create mode 100644 usr/local/pkg/miniupnpd.xml create mode 100644 usr/local/pkg/openntpd.inc create mode 100644 usr/local/pkg/openntpd.xml create mode 100755 usr/local/sbin/WipePackages.php create mode 100644 usr/local/sbin/gmirror_status_check.php create mode 100644 usr/local/sbin/mpd.script create mode 100755 usr/local/sbin/ntpdate_sync_once.sh create mode 100755 usr/local/sbin/openvpn.attributes.sh create mode 100755 usr/local/sbin/ovpn-linkdown create mode 100755 usr/local/sbin/ovpn-linkup create mode 100755 usr/local/sbin/ovpn_auth_verify create mode 100755 usr/local/sbin/pfSsh.php create mode 100755 usr/local/sbin/ppp-linkdown create mode 100755 usr/local/sbin/ppp-linkup create mode 100755 usr/local/sbin/ppp-log-uptime.sh create mode 100755 usr/local/sbin/ppp-uptime.sh create mode 100644 usr/local/sbin/prefixes.php create mode 100755 usr/local/sbin/show_filter_reload_status.php create mode 100755 usr/local/sbin/ufslabels.sh create mode 100755 usr/local/sbin/vpn-linkdown create mode 100755 usr/local/sbin/vpn-linkup create mode 100644 usr/local/share/locale/en/LC_MESSAGES/pfSense.pot create mode 100644 usr/local/share/locale/ja/LC_MESSAGES/pfSense.po create mode 100644 usr/local/share/locale/pt_BR.ISO8859-1/LC_MESSAGES/pfSense.mo create mode 100644 usr/local/share/locale/pt_BR.ISO8859-1/LC_MESSAGES/pfSense.po create mode 100644 usr/local/share/locale/tr/LC_MESSAGES/pfSense.mo create mode 100644 usr/local/share/locale/tr/LC_MESSAGES/pfSense.po create mode 100755 usr/local/share/mobile-broadband-provider-info/iso_3166-1_list_en.xml create mode 100644 usr/local/share/mobile-broadband-provider-info/serviceproviders.xml create mode 100644 usr/local/share/pbi-keys/pfSense-BETA.ssl create mode 100644 usr/local/share/protocols/100bao.pat create mode 100644 usr/local/share/protocols/EAOrigin.pat create mode 100644 usr/local/share/protocols/LICENSE create mode 100644 usr/local/share/protocols/aim.pat create mode 100644 usr/local/share/protocols/aimwebcontent.pat create mode 100644 usr/local/share/protocols/any.pat create mode 100644 usr/local/share/protocols/applejuice.pat create mode 100644 usr/local/share/protocols/ares.pat create mode 100644 usr/local/share/protocols/armagetron.pat create mode 100644 usr/local/share/protocols/audiogalaxy.pat create mode 100644 usr/local/share/protocols/battlefield1942.pat create mode 100644 usr/local/share/protocols/battlefield2.pat create mode 100644 usr/local/share/protocols/battlefield2142.pat create mode 100644 usr/local/share/protocols/bgp.pat create mode 100644 usr/local/share/protocols/biff.pat create mode 100644 usr/local/share/protocols/bittorrent.pat create mode 100644 usr/local/share/protocols/chikka.pat create mode 100644 usr/local/share/protocols/cimd.pat create mode 100644 usr/local/share/protocols/ciscovpn.pat create mode 100644 usr/local/share/protocols/citrix.pat create mode 100644 usr/local/share/protocols/code_red.pat create mode 100644 usr/local/share/protocols/counterstrike-source.pat create mode 100644 usr/local/share/protocols/cvs.pat create mode 100644 usr/local/share/protocols/dayofdefeat-source.pat create mode 100644 usr/local/share/protocols/dazhihui.pat create mode 100644 usr/local/share/protocols/dhcp.pat create mode 100644 usr/local/share/protocols/directconnect.pat create mode 100644 usr/local/share/protocols/dns.pat create mode 100644 usr/local/share/protocols/doom3.pat create mode 100644 usr/local/share/protocols/edonkey.pat create mode 100644 usr/local/share/protocols/exe.pat create mode 100644 usr/local/share/protocols/fasttrack.pat create mode 100644 usr/local/share/protocols/finger.pat create mode 100644 usr/local/share/protocols/flash.pat create mode 100644 usr/local/share/protocols/freenet.pat create mode 100644 usr/local/share/protocols/ftp.pat create mode 100644 usr/local/share/protocols/gif.pat create mode 100644 usr/local/share/protocols/gkrellm.pat create mode 100644 usr/local/share/protocols/gnucleuslan.pat create mode 100644 usr/local/share/protocols/gnutella.pat create mode 100644 usr/local/share/protocols/goboogy.pat create mode 100644 usr/local/share/protocols/gopher.pat create mode 100644 usr/local/share/protocols/gtalk.pat create mode 100644 usr/local/share/protocols/guildwars.pat create mode 100644 usr/local/share/protocols/h323.pat create mode 100644 usr/local/share/protocols/halflife2-deathmatch.pat create mode 100644 usr/local/share/protocols/hddtemp.pat create mode 100644 usr/local/share/protocols/hotline.pat create mode 100644 usr/local/share/protocols/html.pat create mode 100644 usr/local/share/protocols/http-dap.pat create mode 100644 usr/local/share/protocols/http-freshdownload.pat create mode 100644 usr/local/share/protocols/http-itunes.pat create mode 100644 usr/local/share/protocols/http-rtsp.pat create mode 100644 usr/local/share/protocols/http.pat create mode 100644 usr/local/share/protocols/httpaudio.pat create mode 100644 usr/local/share/protocols/httpcachehit.pat create mode 100644 usr/local/share/protocols/httpcachemiss.pat create mode 100644 usr/local/share/protocols/httpvideo.pat create mode 100644 usr/local/share/protocols/ident.pat create mode 100644 usr/local/share/protocols/imap.pat create mode 100644 usr/local/share/protocols/imesh.pat create mode 100644 usr/local/share/protocols/ipp.pat create mode 100644 usr/local/share/protocols/irc.pat create mode 100644 usr/local/share/protocols/jabber.pat create mode 100644 usr/local/share/protocols/jpeg.pat create mode 100644 usr/local/share/protocols/kugoo.pat create mode 100644 usr/local/share/protocols/live365.pat create mode 100644 usr/local/share/protocols/liveforspeed.pat create mode 100644 usr/local/share/protocols/lpd.pat create mode 100644 usr/local/share/protocols/mohaa.pat create mode 100644 usr/local/share/protocols/mp3.pat create mode 100644 usr/local/share/protocols/msn-filetransfer.pat create mode 100644 usr/local/share/protocols/msnmessenger.pat create mode 100644 usr/local/share/protocols/mute.pat create mode 100644 usr/local/share/protocols/napster.pat create mode 100644 usr/local/share/protocols/nbns.pat create mode 100644 usr/local/share/protocols/ncp.pat create mode 100644 usr/local/share/protocols/netbios.pat create mode 100644 usr/local/share/protocols/nimda.pat create mode 100644 usr/local/share/protocols/nntp.pat create mode 100644 usr/local/share/protocols/ntp.pat create mode 100644 usr/local/share/protocols/ogg.pat create mode 100644 usr/local/share/protocols/openft.pat create mode 100644 usr/local/share/protocols/pcanywhere.pat create mode 100644 usr/local/share/protocols/pdf.pat create mode 100644 usr/local/share/protocols/perl.pat create mode 100644 usr/local/share/protocols/png.pat create mode 100644 usr/local/share/protocols/poco.pat create mode 100644 usr/local/share/protocols/pop3.pat create mode 100644 usr/local/share/protocols/postscript.pat create mode 100644 usr/local/share/protocols/pplive.pat create mode 100644 usr/local/share/protocols/pressplay.pat create mode 100644 usr/local/share/protocols/qq.pat create mode 100644 usr/local/share/protocols/quake-halflife.pat create mode 100644 usr/local/share/protocols/quake1.pat create mode 100644 usr/local/share/protocols/quicktime.pat create mode 100644 usr/local/share/protocols/radmin.pat create mode 100644 usr/local/share/protocols/rar.pat create mode 100644 usr/local/share/protocols/rdp.pat create mode 100644 usr/local/share/protocols/replaytv-ivs.pat create mode 100644 usr/local/share/protocols/rlogin.pat create mode 100644 usr/local/share/protocols/rpm.pat create mode 100644 usr/local/share/protocols/rtf.pat create mode 100644 usr/local/share/protocols/rtp.pat create mode 100644 usr/local/share/protocols/rtsp.pat create mode 100644 usr/local/share/protocols/runesofmagic.pat create mode 100644 usr/local/share/protocols/shoutcast.pat create mode 100644 usr/local/share/protocols/sip.pat create mode 100644 usr/local/share/protocols/skypeout.pat create mode 100644 usr/local/share/protocols/skypetoskype.pat create mode 100644 usr/local/share/protocols/smb.pat create mode 100644 usr/local/share/protocols/smtp.pat create mode 100644 usr/local/share/protocols/snmp-mon.pat create mode 100644 usr/local/share/protocols/snmp-trap.pat create mode 100644 usr/local/share/protocols/snmp.pat create mode 100644 usr/local/share/protocols/socks.pat create mode 100644 usr/local/share/protocols/soribada.pat create mode 100644 usr/local/share/protocols/soulseek.pat create mode 100644 usr/local/share/protocols/ssdp.pat create mode 100644 usr/local/share/protocols/ssh.pat create mode 100644 usr/local/share/protocols/ssl.pat create mode 100644 usr/local/share/protocols/stun.pat create mode 100644 usr/local/share/protocols/subspace.pat create mode 100644 usr/local/share/protocols/subversion.pat create mode 100644 usr/local/share/protocols/swf.pat create mode 100644 usr/local/share/protocols/tar.pat create mode 100644 usr/local/share/protocols/teamfortress2.pat create mode 100644 usr/local/share/protocols/teamspeak.pat create mode 100644 usr/local/share/protocols/telnet.pat create mode 100644 usr/local/share/protocols/tesla.pat create mode 100644 usr/local/share/protocols/tftp.pat create mode 100644 usr/local/share/protocols/thecircle.pat create mode 100644 usr/local/share/protocols/tonghuashun.pat create mode 100644 usr/local/share/protocols/tor.pat create mode 100644 usr/local/share/protocols/tsp.pat create mode 100644 usr/local/share/protocols/unset.pat create mode 100644 usr/local/share/protocols/uucp.pat create mode 100644 usr/local/share/protocols/validcertssl.pat create mode 100644 usr/local/share/protocols/ventrilo.pat create mode 100644 usr/local/share/protocols/vnc.pat create mode 100644 usr/local/share/protocols/whois.pat create mode 100644 usr/local/share/protocols/worldofwarcraft.pat create mode 100644 usr/local/share/protocols/x11.pat create mode 100644 usr/local/share/protocols/xboxlive.pat create mode 100644 usr/local/share/protocols/xunlei.pat create mode 100644 usr/local/share/protocols/yahoo.pat create mode 100644 usr/local/share/protocols/zip.pat create mode 100644 usr/local/share/protocols/zmaap.pat create mode 100644 usr/local/share/rrdtool/fonts/DejaVuSansMono-Roman.ttf create mode 100755 usr/local/www/apple-touch-icon.png create mode 100755 usr/local/www/bandwidth_by_ip.php create mode 100644 usr/local/www/carp_status.php create mode 100644 usr/local/www/classes/maintable.inc create mode 100644 usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css create mode 100644 usr/local/www/code-syntax-highlighter/gpl.txt create mode 100644 usr/local/www/code-syntax-highlighter/shBrushCSharp.js create mode 100644 usr/local/www/code-syntax-highlighter/shBrushCpp.js create mode 100644 usr/local/www/code-syntax-highlighter/shBrushCss.js create mode 100644 usr/local/www/code-syntax-highlighter/shBrushDelphi.js create mode 100644 usr/local/www/code-syntax-highlighter/shBrushJScript.js create mode 100644 usr/local/www/code-syntax-highlighter/shBrushJava.js create mode 100644 usr/local/www/code-syntax-highlighter/shBrushPhp.js create mode 100644 usr/local/www/code-syntax-highlighter/shBrushPython.js create mode 100644 usr/local/www/code-syntax-highlighter/shBrushRuby.js create mode 100644 usr/local/www/code-syntax-highlighter/shBrushSql.js create mode 100644 usr/local/www/code-syntax-highlighter/shBrushVb.js create mode 100644 usr/local/www/code-syntax-highlighter/shBrushXml.js create mode 100644 usr/local/www/code-syntax-highlighter/shCore.js create mode 100644 usr/local/www/code-syntax-highlighter/shCore.uncompressed.js create mode 100644 usr/local/www/crash_reporter.php create mode 100644 usr/local/www/csrf/csrf-magic.js create mode 100644 usr/local/www/csrf/csrf-magic.php create mode 100644 usr/local/www/css/table.css create mode 100644 usr/local/www/diag_arp.php create mode 100644 usr/local/www/diag_authentication.php create mode 100644 usr/local/www/diag_backup.php create mode 100644 usr/local/www/diag_confbak.php create mode 100755 usr/local/www/diag_defaults.php create mode 100644 usr/local/www/diag_dns.php create mode 100755 usr/local/www/diag_dump_states.php create mode 100644 usr/local/www/diag_dump_states_sources.php create mode 100644 usr/local/www/diag_gmirror.php create mode 100644 usr/local/www/diag_ipsec.php create mode 100644 usr/local/www/diag_ipsec_leases.php create mode 100644 usr/local/www/diag_ipsec_sad.php create mode 100644 usr/local/www/diag_ipsec_spd.php create mode 100644 usr/local/www/diag_ipsec_xml.php create mode 100644 usr/local/www/diag_limiter_info.php create mode 100755 usr/local/www/diag_logs.php create mode 100644 usr/local/www/diag_logs_auth.php create mode 100644 usr/local/www/diag_logs_dhcp.php create mode 100644 usr/local/www/diag_logs_filter.php create mode 100755 usr/local/www/diag_logs_filter_dynamic.php create mode 100644 usr/local/www/diag_logs_filter_summary.php create mode 100755 usr/local/www/diag_logs_gateways.php create mode 100644 usr/local/www/diag_logs_ipsec.php create mode 100644 usr/local/www/diag_logs_ntpd.php create mode 100644 usr/local/www/diag_logs_openvpn.php create mode 100644 usr/local/www/diag_logs_ppp.php create mode 100644 usr/local/www/diag_logs_relayd.php create mode 100755 usr/local/www/diag_logs_resolver.php create mode 100644 usr/local/www/diag_logs_routing.php create mode 100644 usr/local/www/diag_logs_settings.php create mode 100755 usr/local/www/diag_logs_vpn.php create mode 100644 usr/local/www/diag_logs_wireless.php create mode 100644 usr/local/www/diag_nanobsd.php create mode 100644 usr/local/www/diag_ndp.php create mode 100644 usr/local/www/diag_packet_capture.php create mode 100644 usr/local/www/diag_patterns.php create mode 100644 usr/local/www/diag_pf_info.php create mode 100644 usr/local/www/diag_ping.php create mode 100755 usr/local/www/diag_pkglogs.php create mode 100644 usr/local/www/diag_resetstate.php create mode 100644 usr/local/www/diag_routes.php create mode 100644 usr/local/www/diag_smart.php create mode 100644 usr/local/www/diag_sockets.php create mode 100644 usr/local/www/diag_states_summary.php create mode 100644 usr/local/www/diag_system_activity.php create mode 100644 usr/local/www/diag_system_pftop.php create mode 100644 usr/local/www/diag_tables.php create mode 100644 usr/local/www/diag_testport.php create mode 100644 usr/local/www/diag_traceroute.php create mode 100644 usr/local/www/easyrule.php create mode 100644 usr/local/www/edit.php create mode 100644 usr/local/www/exec.php create mode 100755 usr/local/www/favicon.ico create mode 100755 usr/local/www/fbegin.inc create mode 100755 usr/local/www/fend.inc create mode 100644 usr/local/www/filebrowser/browser.js create mode 100644 usr/local/www/filebrowser/browser.php create mode 100755 usr/local/www/filebrowser/images/file_code.gif create mode 100755 usr/local/www/filebrowser/images/file_database.gif create mode 100755 usr/local/www/filebrowser/images/file_doc.gif create mode 100755 usr/local/www/filebrowser/images/file_flash.gif create mode 100755 usr/local/www/filebrowser/images/file_generic.gif create mode 100755 usr/local/www/filebrowser/images/file_image.gif create mode 100755 usr/local/www/filebrowser/images/file_js.gif create mode 100755 usr/local/www/filebrowser/images/file_pdf.gif create mode 100755 usr/local/www/filebrowser/images/file_php.gif create mode 100755 usr/local/www/filebrowser/images/file_ppt.gif create mode 100755 usr/local/www/filebrowser/images/file_system.gif create mode 100755 usr/local/www/filebrowser/images/file_xls.gif create mode 100755 usr/local/www/filebrowser/images/file_zip.gif create mode 100755 usr/local/www/filebrowser/images/folder_generic.gif create mode 100755 usr/local/www/filebrowser/images/icon_cancel.gif create mode 100755 usr/local/www/filebrowser/images/icon_contract.gif create mode 100755 usr/local/www/filebrowser/images/icon_expand.gif create mode 100755 usr/local/www/filebrowser/images/icon_home.gif create mode 100755 usr/local/www/filebrowser/images/icon_left.gif create mode 100755 usr/local/www/filebrowser/images/icon_magnifier.gif create mode 100644 usr/local/www/firewall_aliases.php create mode 100755 usr/local/www/firewall_aliases_edit.php create mode 100755 usr/local/www/firewall_aliases_import.php create mode 100644 usr/local/www/firewall_nat.php create mode 100644 usr/local/www/firewall_nat_1to1.php create mode 100644 usr/local/www/firewall_nat_1to1_edit.php create mode 100644 usr/local/www/firewall_nat_edit.php create mode 100644 usr/local/www/firewall_nat_npt.php create mode 100644 usr/local/www/firewall_nat_npt_edit.php create mode 100644 usr/local/www/firewall_nat_out.php create mode 100644 usr/local/www/firewall_nat_out_edit.php create mode 100644 usr/local/www/firewall_rules.php create mode 100644 usr/local/www/firewall_rules_edit.php create mode 100644 usr/local/www/firewall_schedule.php create mode 100644 usr/local/www/firewall_schedule_edit.php create mode 100644 usr/local/www/firewall_shaper.php create mode 100644 usr/local/www/firewall_shaper_layer7.php create mode 100644 usr/local/www/firewall_shaper_queues.php create mode 100644 usr/local/www/firewall_shaper_vinterface.php create mode 100644 usr/local/www/firewall_shaper_wizards.php create mode 100644 usr/local/www/firewall_virtual_ip.php create mode 100644 usr/local/www/firewall_virtual_ip_edit.php create mode 100644 usr/local/www/getserviceproviders.php create mode 100644 usr/local/www/getstats.php create mode 100755 usr/local/www/graph.php create mode 100644 usr/local/www/graph_cpu.php create mode 100755 usr/local/www/green_dot.jpg create mode 100755 usr/local/www/gui.css create mode 100644 usr/local/www/guiconfig.inc create mode 100755 usr/local/www/halt.php create mode 100755 usr/local/www/head.inc create mode 100644 usr/local/www/headjs.php create mode 100644 usr/local/www/help.php create mode 100644 usr/local/www/ifstats.php create mode 100644 usr/local/www/includes/functions.inc.php create mode 100644 usr/local/www/index.php create mode 100644 usr/local/www/installer/index.php create mode 100644 usr/local/www/installer/installer.php create mode 100644 usr/local/www/interfaces.php create mode 100644 usr/local/www/interfaces_assign.php create mode 100644 usr/local/www/interfaces_bridge.php create mode 100644 usr/local/www/interfaces_bridge_edit.php create mode 100644 usr/local/www/interfaces_gif.php create mode 100644 usr/local/www/interfaces_gif_edit.php create mode 100644 usr/local/www/interfaces_gre.php create mode 100644 usr/local/www/interfaces_gre_edit.php create mode 100644 usr/local/www/interfaces_groups.php create mode 100644 usr/local/www/interfaces_groups_edit.php create mode 100644 usr/local/www/interfaces_lagg.php create mode 100644 usr/local/www/interfaces_lagg_edit.php create mode 100644 usr/local/www/interfaces_ppps.php create mode 100644 usr/local/www/interfaces_ppps_edit.php create mode 100644 usr/local/www/interfaces_qinq.php create mode 100644 usr/local/www/interfaces_qinq_edit.php create mode 100644 usr/local/www/interfaces_vlan.php create mode 100644 usr/local/www/interfaces_vlan_edit.php create mode 100644 usr/local/www/interfaces_wireless.php create mode 100644 usr/local/www/interfaces_wireless_edit.php create mode 100644 usr/local/www/javascript/NetUtils.js create mode 100644 usr/local/www/javascript/autosuggest.js create mode 100644 usr/local/www/javascript/base64.js create mode 100644 usr/local/www/javascript/carp_status/carp_status.js create mode 100644 usr/local/www/javascript/chosen/chosen-sprite.png create mode 100644 usr/local/www/javascript/chosen/chosen.css create mode 100644 usr/local/www/javascript/chosen/chosen.jquery.js create mode 100644 usr/local/www/javascript/chosen/chosen.jquery.min.js create mode 100644 usr/local/www/javascript/chosen/chosen.proto.js create mode 100644 usr/local/www/javascript/chosen/chosen.proto.min.js create mode 100644 usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee create mode 100644 usr/local/www/javascript/chosen/coffee/chosen.proto.coffee create mode 100644 usr/local/www/javascript/datepicker/css/datepicker.css create mode 100644 usr/local/www/javascript/datepicker/js/blank.html create mode 100644 usr/local/www/javascript/datepicker/js/datepicker.js create mode 100755 usr/local/www/javascript/datepicker/media/bg_header.jpg create mode 100755 usr/local/www/javascript/datepicker/media/bullet1.gif create mode 100755 usr/local/www/javascript/datepicker/media/bullet2.gif create mode 100755 usr/local/www/javascript/datepicker/media/cal.gif create mode 100755 usr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gif create mode 100644 usr/local/www/javascript/domTT/LICENSE create mode 100644 usr/local/www/javascript/domTT/behaviour.js create mode 100644 usr/local/www/javascript/domTT/domLib.js create mode 100644 usr/local/www/javascript/domTT/domTT.js create mode 100644 usr/local/www/javascript/domTT/fadomatic.js create mode 100644 usr/local/www/javascript/filter_log.js create mode 100644 usr/local/www/javascript/firebug-lite.js create mode 100644 usr/local/www/javascript/firewall_nat_edit/autosuggest.js create mode 100644 usr/local/www/javascript/firewall_nat_edit/disablekeys.js create mode 100644 usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js create mode 100644 usr/local/www/javascript/firewall_nat_edit/suggestions.js create mode 100644 usr/local/www/javascript/firewall_rules_edit/autosuggest.js create mode 100644 usr/local/www/javascript/firewall_rules_edit/disablekeys.js create mode 100644 usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js create mode 100644 usr/local/www/javascript/firewall_rules_edit/suggestions.js create mode 100644 usr/local/www/javascript/firewall_shaper_edit/autosuggest.js create mode 100644 usr/local/www/javascript/firewall_shaper_edit/disablekeys.js create mode 100644 usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js create mode 100644 usr/local/www/javascript/firewall_shaper_edit/suggestions.js create mode 100644 usr/local/www/javascript/global.js create mode 100644 usr/local/www/javascript/index/ajax.js create mode 100644 usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js create mode 100644 usr/local/www/javascript/jquery-1.11.1.min.js create mode 100644 usr/local/www/javascript/jquery-migrate-1.2.1.min.js create mode 100644 usr/local/www/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css create mode 100644 usr/local/www/javascript/jquery-ui-timepicker-addon/js/jquery-ui-timepicker-addon.js create mode 100755 usr/local/www/javascript/jquery.ipv4v6ify.js create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_flat_10_000000_40x100.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png create mode 100755 usr/local/www/javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png create mode 100755 usr/local/www/javascript/jquery/images/ui-icons_222222_256x240.png create mode 100755 usr/local/www/javascript/jquery/images/ui-icons_228ef1_256x240.png create mode 100755 usr/local/www/javascript/jquery/images/ui-icons_3383bb_256x240.png create mode 100755 usr/local/www/javascript/jquery/images/ui-icons_454545_256x240.png create mode 100755 usr/local/www/javascript/jquery/images/ui-icons_70b2e1_256x240.png create mode 100755 usr/local/www/javascript/jquery/images/ui-icons_999999_256x240.png create mode 100755 usr/local/www/javascript/jquery/images/ui-icons_ef8c08_256x240.png create mode 100755 usr/local/www/javascript/jquery/images/ui-icons_fbc856_256x240.png create mode 100755 usr/local/www/javascript/jquery/images/ui-icons_ffd27a_256x240.png create mode 100755 usr/local/www/javascript/jquery/images/ui-icons_ffffff_256x240.png create mode 100644 usr/local/www/javascript/jquery/jquery-ui-1.11.1.css create mode 100644 usr/local/www/javascript/jquery/jquery-ui-1.11.1.min.js create mode 100644 usr/local/www/javascript/load_balancer_pool_edit/pool.js create mode 100644 usr/local/www/javascript/load_balancer_relay_protocol_edit/load_balancer_relay_protocol_edit.js create mode 100644 usr/local/www/javascript/niftyjsCode.js create mode 100644 usr/local/www/javascript/numericupdown/css/numericupdown.css create mode 100755 usr/local/www/javascript/numericupdown/images/down.gif create mode 100755 usr/local/www/javascript/numericupdown/images/up.gif create mode 100644 usr/local/www/javascript/numericupdown/js/numericupdown.js create mode 100644 usr/local/www/javascript/pi.js create mode 100644 usr/local/www/javascript/row_helper.js create mode 100644 usr/local/www/javascript/row_helper_dynamic.js create mode 100644 usr/local/www/javascript/row_toggle.js create mode 100644 usr/local/www/javascript/scriptaculous/builder.js create mode 100644 usr/local/www/javascript/scriptaculous/controls.js create mode 100644 usr/local/www/javascript/scriptaculous/dragdrop.js create mode 100644 usr/local/www/javascript/scriptaculous/effects.js create mode 100644 usr/local/www/javascript/scriptaculous/prototype.js create mode 100644 usr/local/www/javascript/scriptaculous/scriptaculous.js create mode 100644 usr/local/www/javascript/scriptaculous/slider.js create mode 100644 usr/local/www/javascript/scriptaculous/sound.js create mode 100644 usr/local/www/javascript/scriptaculous/unittest.js create mode 100644 usr/local/www/javascript/sorttable.js create mode 100644 usr/local/www/javascript/suggestions.js create mode 100644 usr/local/www/javascript/ticker.js create mode 100644 usr/local/www/javascript/wizard/autosuggest.js create mode 100644 usr/local/www/javascript/wizard/disablekeys.js create mode 100644 usr/local/www/javascript/wizard/suggestions.js create mode 100644 usr/local/www/license.php create mode 100644 usr/local/www/load_balancer_monitor.php create mode 100644 usr/local/www/load_balancer_monitor_edit.php create mode 100644 usr/local/www/load_balancer_pool.php create mode 100644 usr/local/www/load_balancer_pool_edit.php create mode 100644 usr/local/www/load_balancer_relay_action.php create mode 100644 usr/local/www/load_balancer_relay_action_edit.php create mode 100644 usr/local/www/load_balancer_relay_protocol.php create mode 100644 usr/local/www/load_balancer_relay_protocol_edit.php create mode 100644 usr/local/www/load_balancer_setting.php create mode 100644 usr/local/www/load_balancer_virtual_server.php create mode 100644 usr/local/www/load_balancer_virtual_server_edit.php create mode 100755 usr/local/www/logobig.jpg create mode 100755 usr/local/www/niftycssCode.css create mode 100755 usr/local/www/niftycssprintCode.css create mode 100755 usr/local/www/pkg.php create mode 100644 usr/local/www/pkg_edit.php create mode 100644 usr/local/www/pkg_mgr.php create mode 100644 usr/local/www/pkg_mgr_install.php create mode 100644 usr/local/www/pkg_mgr_installed.php create mode 100644 usr/local/www/pkg_mgr_settings.php create mode 100644 usr/local/www/protochart/ProtoChart.js create mode 100644 usr/local/www/protochart/excanvas-compressed.js create mode 100644 usr/local/www/protochart/excanvas.js create mode 100755 usr/local/www/reboot.php create mode 100644 usr/local/www/restart_httpd.php create mode 100644 usr/local/www/services_captiveportal.php create mode 100644 usr/local/www/services_captiveportal_filemanager.php create mode 100644 usr/local/www/services_captiveportal_hostname.php create mode 100644 usr/local/www/services_captiveportal_hostname_edit.php create mode 100644 usr/local/www/services_captiveportal_ip.php create mode 100644 usr/local/www/services_captiveportal_ip_edit.php create mode 100644 usr/local/www/services_captiveportal_mac.php create mode 100644 usr/local/www/services_captiveportal_mac_edit.php create mode 100644 usr/local/www/services_captiveportal_vouchers.php create mode 100644 usr/local/www/services_captiveportal_vouchers_edit.php create mode 100644 usr/local/www/services_captiveportal_zones.php create mode 100644 usr/local/www/services_captiveportal_zones_edit.php create mode 100644 usr/local/www/services_dhcp.php create mode 100644 usr/local/www/services_dhcp_edit.php create mode 100644 usr/local/www/services_dhcp_relay.php create mode 100644 usr/local/www/services_dhcpv6.php create mode 100644 usr/local/www/services_dhcpv6_edit.php create mode 100644 usr/local/www/services_dhcpv6_relay.php create mode 100644 usr/local/www/services_dnsmasq.php create mode 100644 usr/local/www/services_dnsmasq_domainoverride_edit.php create mode 100644 usr/local/www/services_dnsmasq_edit.php create mode 100644 usr/local/www/services_dyndns.php create mode 100644 usr/local/www/services_dyndns_edit.php create mode 100644 usr/local/www/services_igmpproxy.php create mode 100644 usr/local/www/services_igmpproxy_edit.php create mode 100644 usr/local/www/services_ntpd.php create mode 100644 usr/local/www/services_ntpd_gps.php create mode 100644 usr/local/www/services_ntpd_pps.php create mode 100644 usr/local/www/services_rfc2136.php create mode 100644 usr/local/www/services_rfc2136_edit.php create mode 100644 usr/local/www/services_router_advertisements.php create mode 100644 usr/local/www/services_snmp.php create mode 100644 usr/local/www/services_unbound.php create mode 100644 usr/local/www/services_unbound_acls.php create mode 100644 usr/local/www/services_unbound_advanced.php create mode 100644 usr/local/www/services_unbound_domainoverride_edit.php create mode 100644 usr/local/www/services_unbound_host_edit.php create mode 100644 usr/local/www/services_wol.php create mode 100644 usr/local/www/services_wol_edit.php create mode 100644 usr/local/www/shortcuts.inc create mode 100644 usr/local/www/shortcuts/pkg_upnp.inc create mode 100644 usr/local/www/stats.php create mode 100755 usr/local/www/status.php create mode 100644 usr/local/www/status_captiveportal.php create mode 100644 usr/local/www/status_captiveportal_expire.php create mode 100644 usr/local/www/status_captiveportal_test.php create mode 100644 usr/local/www/status_captiveportal_voucher_rolls.php create mode 100644 usr/local/www/status_captiveportal_vouchers.php create mode 100644 usr/local/www/status_dhcp_leases.php create mode 100644 usr/local/www/status_dhcpv6_leases.php create mode 100644 usr/local/www/status_filter_reload.php create mode 100755 usr/local/www/status_gateway_groups.php create mode 100644 usr/local/www/status_gateways.php create mode 100644 usr/local/www/status_graph.php create mode 100644 usr/local/www/status_graph_cpu.php create mode 100644 usr/local/www/status_interfaces.php create mode 100644 usr/local/www/status_lb_pool.php create mode 100644 usr/local/www/status_lb_vs.php create mode 100644 usr/local/www/status_ntpd.php create mode 100644 usr/local/www/status_openvpn.php create mode 100644 usr/local/www/status_queues.php create mode 100644 usr/local/www/status_rrd_graph.php create mode 100644 usr/local/www/status_rrd_graph_img.php create mode 100644 usr/local/www/status_rrd_graph_settings.php create mode 100755 usr/local/www/status_services.php create mode 100644 usr/local/www/status_upnp.php create mode 100644 usr/local/www/status_wireless.php create mode 100644 usr/local/www/system.php create mode 100644 usr/local/www/system_advanced_admin.php create mode 100644 usr/local/www/system_advanced_firewall.php create mode 100644 usr/local/www/system_advanced_misc.php create mode 100644 usr/local/www/system_advanced_network.php create mode 100644 usr/local/www/system_advanced_notifications.php create mode 100644 usr/local/www/system_advanced_sysctl.php create mode 100644 usr/local/www/system_authservers.php create mode 100644 usr/local/www/system_camanager.php create mode 100644 usr/local/www/system_certmanager.php create mode 100644 usr/local/www/system_crlmanager.php create mode 100644 usr/local/www/system_firmware.php create mode 100755 usr/local/www/system_firmware_auto.php create mode 100644 usr/local/www/system_firmware_check.php create mode 100644 usr/local/www/system_firmware_restorefullbackup.php create mode 100644 usr/local/www/system_firmware_settings.php create mode 100644 usr/local/www/system_gateway_groups.php create mode 100644 usr/local/www/system_gateway_groups_edit.php create mode 100644 usr/local/www/system_gateways.php create mode 100644 usr/local/www/system_gateways_edit.php create mode 100644 usr/local/www/system_groupmanager.php create mode 100644 usr/local/www/system_groupmanager_addprivs.php create mode 100755 usr/local/www/system_hasync.php create mode 100644 usr/local/www/system_routes.php create mode 100644 usr/local/www/system_routes_edit.php create mode 100644 usr/local/www/system_usermanager.php create mode 100644 usr/local/www/system_usermanager_addprivs.php create mode 100644 usr/local/www/system_usermanager_passwordmg.php create mode 100644 usr/local/www/system_usermanager_settings.php create mode 100644 usr/local/www/system_usermanager_settings_ldapacpicker.php create mode 100755 usr/local/www/system_usermanager_settings_test.php create mode 100644 usr/local/www/themes/_corporate/all.css create mode 100644 usr/local/www/themes/_corporate/bottom-loader.js create mode 100644 usr/local/www/themes/_corporate/graphlink.css create mode 100755 usr/local/www/themes/_corporate/images/alert_bgr.gif create mode 100755 usr/local/www/themes/_corporate/images/footer.gif create mode 100755 usr/local/www/themes/_corporate/images/header.gif create mode 100755 usr/local/www/themes/_corporate/images/help.png create mode 100755 usr/local/www/themes/_corporate/images/horizontal.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/favicon.ico create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_3g.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_advanced.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_alert.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_alias_host.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_alias_net.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_alias_port.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_alias_url.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_block.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_block_add.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_block_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_cablenic.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_cal.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_cal_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_carp.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_carp_d.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_chain.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_check.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_clock_green.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_clock_grey.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_clock_red.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_close.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_configure.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_down.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_down_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_down_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_e.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_e_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_error.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_exclam.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_flag_de.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_flag_en.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_flag_es.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_file.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_group.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_host.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_search.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_time.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_url.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_frmfld_user.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_fw-update.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_help.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_ifalias.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_import_alias.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_in.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_in_d.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_interface_down.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_interface_up.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_left.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_left_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_left_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_log.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_log_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_log_s.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_log_s_d.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_logs.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_match.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_match_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_minus.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_open.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_other.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_other_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_out.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_out_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_parp.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_parp_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_pass.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_pass_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_plus.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_plus_bl.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_plus_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_plus_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_plus_p.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_reinstall.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_reject.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_reject_d.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_right.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_service_restart.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_service_running.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_service_start.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_service_start_d.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_service_status.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_service_stop.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.png create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_system-group.png create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.png create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_system-user.png create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_system_logout.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_trapped.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_trapped_p.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_ts_rule.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_up.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_up_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_up_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_wlan.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_wlan_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_wol_all.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.png create mode 100644 usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.png create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_x.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_x_d.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_x_mo.gif create mode 100755 usr/local/www/themes/_corporate/images/icons/icon_x_p.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/in.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/in_d.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/out.gif create mode 100644 usr/local/www/themes/_corporate/images/icons/out_d.gif create mode 100755 usr/local/www/themes/_corporate/images/log.png create mode 100755 usr/local/www/themes/_corporate/images/logo.gif create mode 100755 usr/local/www/themes/_corporate/images/menu_down.gif create mode 100755 usr/local/www/themes/_corporate/images/menu_footer.gif create mode 100755 usr/local/www/themes/_corporate/images/menu_right.gif create mode 100755 usr/local/www/themes/_corporate/images/metal_bgr.gif create mode 100755 usr/local/www/themes/_corporate/images/metal_bgr_red.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/bar_blue.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/bar_gray.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/bar_left.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/bar_right.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.png create mode 100755 usr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.png create mode 100755 usr/local/www/themes/_corporate/images/misc/button.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/key_128.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/key_152.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/key_256.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/key_64.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/left_background.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/loader.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/loader_tab.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/logon.png create mode 100755 usr/local/www/themes/_corporate/images/misc/plogo_0.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/plogo_1.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/plogo_10.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/plogo_2.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/plogo_3.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/plogo_4.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/plogo_5.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/plogo_6.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/plogo_7.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/plogo_8.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/plogo_9.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/progress_bar.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/tri_c.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/tri_c_black.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/tri_o.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/tri_o_black.gif create mode 100755 usr/local/www/themes/_corporate/images/misc/widget_loader.gif create mode 100755 usr/local/www/themes/_corporate/images/new_tab_menu.png create mode 100755 usr/local/www/themes/_corporate/images/status.png create mode 100755 usr/local/www/themes/_corporate/images/transparent.gif create mode 100755 usr/local/www/themes/_corporate/images/transparent_pixel.gif create mode 100755 usr/local/www/themes/_corporate/javascript/ie7/blank.gif create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-css3.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-fixed.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-html4.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-ie5.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-lite-p.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js create mode 100644 usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js create mode 100755 usr/local/www/themes/_corporate/javascript/ie7/test-trans.png create mode 100644 usr/local/www/themes/_corporate/javascript/niftyjsCode.js create mode 100644 usr/local/www/themes/_corporate/loader.js create mode 100644 usr/local/www/themes/_corporate/new_tab_menu.css create mode 100755 usr/local/www/themes/_corporate/new_tab_menu.png create mode 100644 usr/local/www/themes/_corporate/rrdcolors.inc.php create mode 100644 usr/local/www/themes/code-red/all.css create mode 100755 usr/local/www/themes/code-red/bottom-loader.js create mode 100755 usr/local/www/themes/code-red/favicon.ico create mode 100755 usr/local/www/themes/code-red/graphlink.css create mode 100755 usr/local/www/themes/code-red/images/alert_bgr.png create mode 100755 usr/local/www/themes/code-red/images/background.gif create mode 100755 usr/local/www/themes/code-red/images/background.png create mode 100755 usr/local/www/themes/code-red/images/button_left.gif create mode 100755 usr/local/www/themes/code-red/images/button_mid.gif create mode 100755 usr/local/www/themes/code-red/images/button_right.gif create mode 100755 usr/local/www/themes/code-red/images/footer.png create mode 100755 usr/local/www/themes/code-red/images/header.png create mode 100755 usr/local/www/themes/code-red/images/help.png create mode 100755 usr/local/www/themes/code-red/images/horizontal.gif create mode 100755 usr/local/www/themes/code-red/images/icons/favicon.ico create mode 100755 usr/local/www/themes/code-red/images/icons/icon_3g.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_3g_inactive.gif create mode 100644 usr/local/www/themes/code-red/images/icons/icon_advanced.gif create mode 100644 usr/local/www/themes/code-red/images/icons/icon_advanced_s.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_alert.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_alias_host.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_alias_net.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_alias_port.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_alias_url.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_block.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_block_add.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_block_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_cablenic.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_cal.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_cal_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_carp.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_carp_d.gif create mode 100644 usr/local/www/themes/code-red/images/icons/icon_chain.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_check.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_clock_green.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_clock_grey.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_clock_red.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_close.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_configure.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_down.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_down_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_down_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_e.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_e_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_error.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_exclam.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_flag_de.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_flag_en.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_flag_es.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_cert.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_file.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_group.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_host.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_imp.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_mail.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_search.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_time.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_url.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_frmfld_user.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_fw-update.gif create mode 100644 usr/local/www/themes/code-red/images/icons/icon_help.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_ifalias.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_ifalias_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_import_alias.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_in.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_in_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_info_pkg.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_interface_down.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_interface_up.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_left.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_left_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_left_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_log.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_log_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_log_s.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_log_s_d.gif create mode 100644 usr/local/www/themes/code-red/images/icons/icon_logs.gif create mode 100644 usr/local/www/themes/code-red/images/icons/icon_match.gif create mode 100644 usr/local/www/themes/code-red/images/icons/icon_match_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_minus.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_open.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_other.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_other_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_out.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_out_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_parp.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_parp_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_pass.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_pass_add.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_pass_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_plus.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_plus_bl.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_plus_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_plus_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_plus_p.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_reinstall.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_reinstall_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_reject.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_reject_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_right.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_service_restart.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_service_restart_d.gif create mode 100644 usr/local/www/themes/code-red/images/icons/icon_service_running.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_service_start.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_service_start_d.gif create mode 100644 usr/local/www/themes/code-red/images/icons/icon_service_status.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_service_stop.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_service_stop_d.gif create mode 100644 usr/local/www/themes/code-red/images/icons/icon_service_stopped.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_services_start_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_system-group-grey.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_system-group.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_system-user-grey.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_system-user.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_system_lock_screen.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_system_logout.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_trapped.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_trapped_p.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_ts_rule.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_up.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_up_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_up_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_wlan.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_wlan_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_wol_all.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_wzd_saved.png create mode 100755 usr/local/www/themes/code-red/images/icons/icon_x.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_x_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_x_mo.gif create mode 100755 usr/local/www/themes/code-red/images/icons/icon_x_p.gif create mode 100755 usr/local/www/themes/code-red/images/icons/in.gif create mode 100755 usr/local/www/themes/code-red/images/icons/in_d.gif create mode 100755 usr/local/www/themes/code-red/images/icons/out.gif create mode 100755 usr/local/www/themes/code-red/images/icons/out_d.gif create mode 100755 usr/local/www/themes/code-red/images/log.png create mode 100755 usr/local/www/themes/code-red/images/logo.gif create mode 100755 usr/local/www/themes/code-red/images/logobig.jpg create mode 100755 usr/local/www/themes/code-red/images/logon-background.gif create mode 100755 usr/local/www/themes/code-red/images/menu_down.gif create mode 100755 usr/local/www/themes/code-red/images/menu_footer.gif create mode 100755 usr/local/www/themes/code-red/images/menu_right.gif create mode 100755 usr/local/www/themes/code-red/images/menubgr.png create mode 100755 usr/local/www/themes/code-red/images/menubgr_footer.png create mode 100755 usr/local/www/themes/code-red/images/menubgr_highlight.png create mode 100755 usr/local/www/themes/code-red/images/metal_bgr.gif create mode 100755 usr/local/www/themes/code-red/images/metal_bgr_red.gif create mode 100755 usr/local/www/themes/code-red/images/misc/background.gif create mode 100755 usr/local/www/themes/code-red/images/misc/bar_blue.gif create mode 100755 usr/local/www/themes/code-red/images/misc/bar_gray.gif create mode 100755 usr/local/www/themes/code-red/images/misc/bar_left.gif create mode 100755 usr/local/www/themes/code-red/images/misc/bar_right.gif create mode 100755 usr/local/www/themes/code-red/images/misc/bullet_toggle_minus.png create mode 100755 usr/local/www/themes/code-red/images/misc/bullet_toggle_plus.png create mode 100755 usr/local/www/themes/code-red/images/misc/button.gif create mode 100755 usr/local/www/themes/code-red/images/misc/graph.png create mode 100755 usr/local/www/themes/code-red/images/misc/key_128.gif create mode 100755 usr/local/www/themes/code-red/images/misc/key_152.gif create mode 100755 usr/local/www/themes/code-red/images/misc/key_256.gif create mode 100755 usr/local/www/themes/code-red/images/misc/key_64.gif create mode 100755 usr/local/www/themes/code-red/images/misc/left_background.gif create mode 100755 usr/local/www/themes/code-red/images/misc/loader.gif create mode 100755 usr/local/www/themes/code-red/images/misc/loader_all.gif create mode 100755 usr/local/www/themes/code-red/images/misc/loader_filter.gif create mode 100755 usr/local/www/themes/code-red/images/misc/loader_tab.gif create mode 100755 usr/local/www/themes/code-red/images/misc/logon.png create mode 100755 usr/local/www/themes/code-red/images/misc/plogo_0.gif create mode 100755 usr/local/www/themes/code-red/images/misc/plogo_1.gif create mode 100755 usr/local/www/themes/code-red/images/misc/plogo_10.gif create mode 100755 usr/local/www/themes/code-red/images/misc/plogo_2.gif create mode 100755 usr/local/www/themes/code-red/images/misc/plogo_3.gif create mode 100755 usr/local/www/themes/code-red/images/misc/plogo_4.gif create mode 100755 usr/local/www/themes/code-red/images/misc/plogo_5.gif create mode 100755 usr/local/www/themes/code-red/images/misc/plogo_6.gif create mode 100755 usr/local/www/themes/code-red/images/misc/plogo_7.gif create mode 100755 usr/local/www/themes/code-red/images/misc/plogo_8.gif create mode 100755 usr/local/www/themes/code-red/images/misc/plogo_9.gif create mode 100755 usr/local/www/themes/code-red/images/misc/progress_bar.gif create mode 100755 usr/local/www/themes/code-red/images/misc/rrd_error.png create mode 100755 usr/local/www/themes/code-red/images/misc/status_alerter.gif create mode 100755 usr/local/www/themes/code-red/images/misc/status_carpmaster.gif create mode 100755 usr/local/www/themes/code-red/images/misc/status_left.gif create mode 100755 usr/local/www/themes/code-red/images/misc/status_page_loading.gif create mode 100755 usr/local/www/themes/code-red/images/misc/status_reload_all.gif create mode 100755 usr/local/www/themes/code-red/images/misc/status_reload_filter.gif create mode 100755 usr/local/www/themes/code-red/images/misc/status_right.gif create mode 100755 usr/local/www/themes/code-red/images/misc/tri_c.gif create mode 100755 usr/local/www/themes/code-red/images/misc/tri_c_black.gif create mode 100755 usr/local/www/themes/code-red/images/misc/tri_o.gif create mode 100755 usr/local/www/themes/code-red/images/misc/tri_o_black.gif create mode 100755 usr/local/www/themes/code-red/images/misc/widget_loader.gif create mode 100755 usr/local/www/themes/code-red/images/new_tab_menu.png create mode 100755 usr/local/www/themes/code-red/images/status.png create mode 100755 usr/local/www/themes/code-red/images/transparent.gif create mode 100755 usr/local/www/themes/code-red/images/transparent_pixel.gif create mode 100755 usr/local/www/themes/code-red/images/wizards/initial/joincluster.gif create mode 100755 usr/local/www/themes/code-red/images/wizards/initial/joincluster_mo.gif create mode 100755 usr/local/www/themes/code-red/images/wizards/initial/restore.gif create mode 100755 usr/local/www/themes/code-red/images/wizards/initial/restore_mo.gif create mode 100755 usr/local/www/themes/code-red/images/wizards/initial/standalone.gif create mode 100755 usr/local/www/themes/code-red/images/wizards/initial/standalone_mo.gif create mode 100755 usr/local/www/themes/code-red/images/wizards/initial/startnewcluster.gif create mode 100755 usr/local/www/themes/code-red/images/wizards/initial/startnewcluster_mo.gif create mode 100755 usr/local/www/themes/code-red/javascript/ie7/blank.gif create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-core.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-css2.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-css3.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-fixed.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-html4.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-ie5.js create mode 100644 usr/local/www/themes/code-red/javascript/ie7/ie7-lite-p.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-lite.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-png.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-server.css create mode 100644 usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/ie7-standard.js create mode 100755 usr/local/www/themes/code-red/javascript/ie7/test-trans.png create mode 100755 usr/local/www/themes/code-red/javascript/img/grey-40.png create mode 100755 usr/local/www/themes/code-red/javascript/img/submenu-off.gif create mode 100755 usr/local/www/themes/code-red/javascript/img/submenu-on.gif create mode 100755 usr/local/www/themes/code-red/javascript/img/white-90.png create mode 100755 usr/local/www/themes/code-red/javascript/img/x.gif create mode 100644 usr/local/www/themes/code-red/javascript/niftyjsCode.js create mode 100755 usr/local/www/themes/code-red/javascript/transmenu-body.php create mode 100755 usr/local/www/themes/code-red/javascript/transmenu-head.php create mode 100755 usr/local/www/themes/code-red/javascript/transmenu.org create mode 100755 usr/local/www/themes/code-red/javascript/transmenuC.js create mode 100755 usr/local/www/themes/code-red/jsevents/body.def create mode 100644 usr/local/www/themes/code-red/loader.js create mode 100755 usr/local/www/themes/code-red/login.css create mode 100755 usr/local/www/themes/code-red/menu.inc create mode 100644 usr/local/www/themes/code-red/new_tab_menu.css create mode 100755 usr/local/www/themes/code-red/no_big_logo create mode 100755 usr/local/www/themes/code-red/rrdcolors.inc.php create mode 100755 usr/local/www/themes/code-red/styles/menustyles.css create mode 100755 usr/local/www/themes/code-red/styles/transmenu.css create mode 100755 usr/local/www/themes/code-red/wizard.css create mode 100644 usr/local/www/themes/metallic/all.css create mode 100755 usr/local/www/themes/metallic/apple-touch-icon.png create mode 100644 usr/local/www/themes/metallic/bottom-loader.js create mode 100755 usr/local/www/themes/metallic/images/alert_bgr.gif create mode 100755 usr/local/www/themes/metallic/images/footer.gif create mode 100755 usr/local/www/themes/metallic/images/header.gif create mode 100755 usr/local/www/themes/metallic/images/help.png create mode 100755 usr/local/www/themes/metallic/images/horizontal.gif create mode 100755 usr/local/www/themes/metallic/images/icons/favicon.ico create mode 100755 usr/local/www/themes/metallic/images/icons/icon_3g.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_3g_inactive.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_advanced.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_advanced_s.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_alert.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_alias_host.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_alias_net.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_alias_port.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_alias_url.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_block.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_block_add.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_block_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_cablenic.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_cal.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_cal_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_carp.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_carp_d.gif create mode 100644 usr/local/www/themes/metallic/images/icons/icon_chain.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_check.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_clock_green.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_clock_grey.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_clock_red.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_close.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_configure.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_down.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_down_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_down_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_e.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_e_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_error.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_exclam.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_flag_de.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_flag_en.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_flag_es.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_cert.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_file.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_group.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_host.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_imp.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_mail.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_search.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_time.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_url.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_frmfld_user.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_fw-update.gif create mode 100644 usr/local/www/themes/metallic/images/icons/icon_help.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_ifalias.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_ifalias_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_import_alias.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_in.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_in_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_info_pkg.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_interface_down.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_interface_up.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_left.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_left_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_left_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_log.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_log_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_log_s.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_log_s_d.gif create mode 100644 usr/local/www/themes/metallic/images/icons/icon_logs.gif create mode 100644 usr/local/www/themes/metallic/images/icons/icon_match.gif create mode 100644 usr/local/www/themes/metallic/images/icons/icon_match_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_minus.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_open.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_other.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_other_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_out.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_out_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_parp.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_parp_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_pass.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_pass_add.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_pass_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_plus.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_plus_bl.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_plus_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_plus_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_plus_p.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_reinstall.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_reinstall_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_reject.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_reject_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_right.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_service_restart.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_service_restart_d.gif create mode 100644 usr/local/www/themes/metallic/images/icons/icon_service_running.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_service_start.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_service_start_d.gif create mode 100644 usr/local/www/themes/metallic/images/icons/icon_service_status.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_service_stop.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_service_stop_d.gif create mode 100644 usr/local/www/themes/metallic/images/icons/icon_service_stopped.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_services_start_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_system-group-grey.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_system-group.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_system-user-grey.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_system-user.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_system_lock_screen.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_system_logout.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_trapped.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_trapped_p.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_ts_rule.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_up.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_up_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_up_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_wlan.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_wlan_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_wol_all.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_wzd_saved.png create mode 100755 usr/local/www/themes/metallic/images/icons/icon_x.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_x_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_x_mo.gif create mode 100755 usr/local/www/themes/metallic/images/icons/icon_x_p.gif create mode 100755 usr/local/www/themes/metallic/images/icons/in.gif create mode 100755 usr/local/www/themes/metallic/images/icons/in_d.gif create mode 100755 usr/local/www/themes/metallic/images/icons/out.gif create mode 100755 usr/local/www/themes/metallic/images/icons/out_d.gif create mode 100755 usr/local/www/themes/metallic/images/log.png create mode 100755 usr/local/www/themes/metallic/images/logo.gif create mode 100755 usr/local/www/themes/metallic/images/logobig.jpg create mode 100755 usr/local/www/themes/metallic/images/menu_down.gif create mode 100755 usr/local/www/themes/metallic/images/menu_footer.gif create mode 100755 usr/local/www/themes/metallic/images/menu_right.gif create mode 100755 usr/local/www/themes/metallic/images/metal_bgr.gif create mode 100755 usr/local/www/themes/metallic/images/metal_bgr_red.gif create mode 100755 usr/local/www/themes/metallic/images/misc/bar_blue.gif create mode 100755 usr/local/www/themes/metallic/images/misc/bar_gray.gif create mode 100755 usr/local/www/themes/metallic/images/misc/bar_left.gif create mode 100755 usr/local/www/themes/metallic/images/misc/bar_right.gif create mode 100755 usr/local/www/themes/metallic/images/misc/bullet_toggle_minus.png create mode 100755 usr/local/www/themes/metallic/images/misc/bullet_toggle_plus.png create mode 100755 usr/local/www/themes/metallic/images/misc/button.gif create mode 100755 usr/local/www/themes/metallic/images/misc/graph.png create mode 100755 usr/local/www/themes/metallic/images/misc/key_128.gif create mode 100755 usr/local/www/themes/metallic/images/misc/key_152.gif create mode 100755 usr/local/www/themes/metallic/images/misc/key_256.gif create mode 100755 usr/local/www/themes/metallic/images/misc/key_64.gif create mode 100755 usr/local/www/themes/metallic/images/misc/left_background.gif create mode 100755 usr/local/www/themes/metallic/images/misc/loader.gif create mode 100755 usr/local/www/themes/metallic/images/misc/loader_all.gif create mode 100755 usr/local/www/themes/metallic/images/misc/loader_filter.gif create mode 100755 usr/local/www/themes/metallic/images/misc/loader_tab.gif create mode 100755 usr/local/www/themes/metallic/images/misc/logon.png create mode 100755 usr/local/www/themes/metallic/images/misc/progress_bar.gif create mode 100755 usr/local/www/themes/metallic/images/misc/rrd_error.png create mode 100755 usr/local/www/themes/metallic/images/misc/status_alerter.gif create mode 100755 usr/local/www/themes/metallic/images/misc/status_carpmaster.gif create mode 100755 usr/local/www/themes/metallic/images/misc/status_left.gif create mode 100755 usr/local/www/themes/metallic/images/misc/status_page_loading.gif create mode 100755 usr/local/www/themes/metallic/images/misc/status_reload_all.gif create mode 100755 usr/local/www/themes/metallic/images/misc/status_reload_filter.gif create mode 100755 usr/local/www/themes/metallic/images/misc/status_right.gif create mode 100755 usr/local/www/themes/metallic/images/misc/tri_c.gif create mode 100755 usr/local/www/themes/metallic/images/misc/tri_c_black.gif create mode 100755 usr/local/www/themes/metallic/images/misc/tri_o.gif create mode 100755 usr/local/www/themes/metallic/images/misc/tri_o_black.gif create mode 100755 usr/local/www/themes/metallic/images/misc/widget_loader.gif create mode 100755 usr/local/www/themes/metallic/images/new_tab_menu.png create mode 100755 usr/local/www/themes/metallic/images/status.png create mode 100755 usr/local/www/themes/metallic/images/transparent.gif create mode 100755 usr/local/www/themes/metallic/images/transparent_pixel.gif create mode 100755 usr/local/www/themes/metallic/images/wizards/initial/joincluster.gif create mode 100755 usr/local/www/themes/metallic/images/wizards/initial/joincluster_mo.gif create mode 100755 usr/local/www/themes/metallic/images/wizards/initial/restore.gif create mode 100755 usr/local/www/themes/metallic/images/wizards/initial/restore_mo.gif create mode 100755 usr/local/www/themes/metallic/images/wizards/initial/standalone.gif create mode 100755 usr/local/www/themes/metallic/images/wizards/initial/standalone_mo.gif create mode 100755 usr/local/www/themes/metallic/images/wizards/initial/startnewcluster.gif create mode 100755 usr/local/www/themes/metallic/images/wizards/initial/startnewcluster_mo.gif create mode 100755 usr/local/www/themes/metallic/javascript/ie7/blank.gif create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-core.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-css3.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-fixed.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-html4.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-ie5.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-lite-p.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-png.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-server.css create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js create mode 100644 usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js create mode 100755 usr/local/www/themes/metallic/javascript/ie7/test-trans.png create mode 100644 usr/local/www/themes/metallic/javascript/niftyjsCode.js create mode 100644 usr/local/www/themes/metallic/loader.js create mode 100644 usr/local/www/themes/metallic/login.css create mode 100644 usr/local/www/themes/metallic/new_tab_menu.css create mode 100644 usr/local/www/themes/metallic/no_big_logo create mode 100644 usr/local/www/themes/metallic/rrdcolors.inc.php create mode 100644 usr/local/www/themes/nervecenter/all.css create mode 100755 usr/local/www/themes/nervecenter/apple-touch-icon.png create mode 100644 usr/local/www/themes/nervecenter/bottom-loader.js create mode 100644 usr/local/www/themes/nervecenter/favicon.ico create mode 100644 usr/local/www/themes/nervecenter/graphlink.css create mode 100755 usr/local/www/themes/nervecenter/images/alert_bgr.png create mode 100755 usr/local/www/themes/nervecenter/images/background.gif create mode 100755 usr/local/www/themes/nervecenter/images/background.png create mode 100755 usr/local/www/themes/nervecenter/images/footer.png create mode 100755 usr/local/www/themes/nervecenter/images/header.png create mode 100755 usr/local/www/themes/nervecenter/images/help.png create mode 100755 usr/local/www/themes/nervecenter/images/horizontal.gif create mode 100644 usr/local/www/themes/nervecenter/images/icons/favicon.ico create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_3g.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_advanced.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_alert.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_alias_host.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_alias_net.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_alias_port.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_alias_url.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_block.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_block_add.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_block_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_cablenic.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_cal.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_carp.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_carp_d.gif create mode 100644 usr/local/www/themes/nervecenter/images/icons/icon_chain.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_check.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_clock_green.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_clock_red.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_close.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_configure.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_down.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_down_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_down_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_e.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_e_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_error.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_exclam.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_flag_de.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_flag_en.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_flag_es.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_fw-update.gif create mode 100644 usr/local/www/themes/nervecenter/images/icons/icon_help.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_ifalias.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_import_alias.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_in.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_in_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_interface_down.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_interface_up.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_left.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_left_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_left_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_log.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_log_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_log_s.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gif create mode 100644 usr/local/www/themes/nervecenter/images/icons/icon_logs.gif create mode 100644 usr/local/www/themes/nervecenter/images/icons/icon_match.gif create mode 100644 usr/local/www/themes/nervecenter/images/icons/icon_match_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_minus.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_open.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_other.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_other_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_out.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_out_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_parp.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_parp_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_pass.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_pass_add.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_pass_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_plus.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_plus_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_plus_p.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_reinstall.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_reject.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_reject_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_right.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_service_restart.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gif create mode 100644 usr/local/www/themes/nervecenter/images/icons/icon_service_running.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_service_start.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gif create mode 100644 usr/local/www/themes/nervecenter/images/icons/icon_service_status.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_service_stop.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gif create mode 100644 usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_system-group.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_system-user.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_system_logout.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_trapped.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_up.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_up_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_up_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_wlan.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_wol_all.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.png create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_x.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_x_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_x_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/icon_x_p.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/in.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/in_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/out.gif create mode 100755 usr/local/www/themes/nervecenter/images/icons/out_d.gif create mode 100755 usr/local/www/themes/nervecenter/images/log.png create mode 100755 usr/local/www/themes/nervecenter/images/logo.gif create mode 100755 usr/local/www/themes/nervecenter/images/logobig.jpg create mode 100755 usr/local/www/themes/nervecenter/images/menu_down.gif create mode 100755 usr/local/www/themes/nervecenter/images/menu_footer.gif create mode 100755 usr/local/www/themes/nervecenter/images/menu_right.gif create mode 100755 usr/local/www/themes/nervecenter/images/metal_bgr.gif create mode 100755 usr/local/www/themes/nervecenter/images/metal_bgr_red.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/bar_blue.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/bar_gray.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/bar_left.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/bar_right.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.png create mode 100755 usr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.png create mode 100755 usr/local/www/themes/nervecenter/images/misc/button.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/graph.png create mode 100755 usr/local/www/themes/nervecenter/images/misc/key_128.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/key_152.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/key_256.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/key_64.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/left_background.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/loader.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/loader_all.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/loader_filter.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/loader_tab.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/logon.png create mode 100755 usr/local/www/themes/nervecenter/images/misc/progress_bar.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/rrd_error.png create mode 100755 usr/local/www/themes/nervecenter/images/misc/status_alerter.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/status_carpmaster.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/status_left.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/status_page_loading.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/status_reload_all.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/status_reload_filter.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/status_right.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/tri_c.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/tri_c_black.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/tri_o.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/tri_o_black.gif create mode 100755 usr/local/www/themes/nervecenter/images/misc/widget_loader.gif create mode 100755 usr/local/www/themes/nervecenter/images/new_tab_menu.png create mode 100755 usr/local/www/themes/nervecenter/images/status.png create mode 100755 usr/local/www/themes/nervecenter/images/transparent.gif create mode 100755 usr/local/www/themes/nervecenter/images/transparent_pixel.gif create mode 100755 usr/local/www/themes/nervecenter/images/wizards/initial/joincluster.gif create mode 100755 usr/local/www/themes/nervecenter/images/wizards/initial/joincluster_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/wizards/initial/restore.gif create mode 100755 usr/local/www/themes/nervecenter/images/wizards/initial/restore_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/wizards/initial/standalone.gif create mode 100755 usr/local/www/themes/nervecenter/images/wizards/initial/standalone_mo.gif create mode 100755 usr/local/www/themes/nervecenter/images/wizards/initial/startnewcluster.gif create mode 100755 usr/local/www/themes/nervecenter/images/wizards/initial/startnewcluster_mo.gif create mode 100755 usr/local/www/themes/nervecenter/javascript/ie7/blank.gif create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-css3.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-fixed.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-html4.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-ie5.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite-p.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js create mode 100644 usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js create mode 100755 usr/local/www/themes/nervecenter/javascript/ie7/test-trans.png create mode 100755 usr/local/www/themes/nervecenter/javascript/img/grey-40.png create mode 100755 usr/local/www/themes/nervecenter/javascript/img/submenu-off.gif create mode 100755 usr/local/www/themes/nervecenter/javascript/img/submenu-on.gif create mode 100755 usr/local/www/themes/nervecenter/javascript/img/white-90.png create mode 100755 usr/local/www/themes/nervecenter/javascript/img/x.gif create mode 100644 usr/local/www/themes/nervecenter/javascript/niftyjsCode.js create mode 100644 usr/local/www/themes/nervecenter/javascript/transmenu-body.php create mode 100644 usr/local/www/themes/nervecenter/javascript/transmenu-head.php create mode 100644 usr/local/www/themes/nervecenter/javascript/transmenu.org create mode 100644 usr/local/www/themes/nervecenter/javascript/transmenuC.js create mode 100644 usr/local/www/themes/nervecenter/jsevents/body.def create mode 100644 usr/local/www/themes/nervecenter/loader.js create mode 100644 usr/local/www/themes/nervecenter/login.css create mode 100644 usr/local/www/themes/nervecenter/menu.inc create mode 100644 usr/local/www/themes/nervecenter/new_tab_menu.css create mode 100644 usr/local/www/themes/nervecenter/no_big_logo create mode 100644 usr/local/www/themes/nervecenter/rrdcolors.inc.php create mode 100644 usr/local/www/themes/nervecenter/styles/menustyles.css create mode 100644 usr/local/www/themes/nervecenter/styles/transmenu.css create mode 100644 usr/local/www/themes/nervecenter/wizard.css create mode 100644 usr/local/www/themes/pfsense-dropdown/all.css create mode 100755 usr/local/www/themes/pfsense-dropdown/apple-touch-icon.png create mode 100644 usr/local/www/themes/pfsense-dropdown/bottom-loader.js create mode 100755 usr/local/www/themes/pfsense-dropdown/images/alert_bgr.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/header-alert.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/header.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/help.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/favicon.ico create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.png create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.png create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.png create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.png create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/in.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/out.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/log.png create mode 100755 usr/local/www/themes/pfsense-dropdown/images/logo.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/logobig.jpg create mode 100755 usr/local/www/themes/pfsense-dropdown/images/menu.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/button.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/key_128.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/key_152.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/key_256.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/key_64.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/left_background.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/loader.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/logon.png create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.png create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/new_tab_menu.png create mode 100755 usr/local/www/themes/pfsense-dropdown/images/status.png create mode 100755 usr/local/www/themes/pfsense-dropdown/images/transparent.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gif create mode 100755 usr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gif create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css3.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-fixed.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-html4.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-ie5.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite-p.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js create mode 100755 usr/local/www/themes/pfsense-dropdown/javascript/ie7/test-trans.png create mode 100644 usr/local/www/themes/pfsense-dropdown/javascript/niftyjsCode.js create mode 100644 usr/local/www/themes/pfsense-dropdown/loader.js create mode 100644 usr/local/www/themes/pfsense-dropdown/login.css create mode 100644 usr/local/www/themes/pfsense-dropdown/new_tab_menu.css create mode 100644 usr/local/www/themes/pfsense-dropdown/rrdcolors.inc.php create mode 100644 usr/local/www/themes/pfsense/all.css create mode 100755 usr/local/www/themes/pfsense/apple-touch-icon.png create mode 100644 usr/local/www/themes/pfsense/bottom-loader.js create mode 100755 usr/local/www/themes/pfsense/images/alert_bgr.gif create mode 100755 usr/local/www/themes/pfsense/images/header-alert.gif create mode 100755 usr/local/www/themes/pfsense/images/header.gif create mode 100755 usr/local/www/themes/pfsense/images/help.png create mode 100644 usr/local/www/themes/pfsense/images/icons/favicon.ico create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_3g.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_advanced.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_advanced_s.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_alert.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_alias_host.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_alias_net.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_alias_port.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_alias_url.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_block.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_block_add.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_block_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_cablenic.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_cal.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_cal_mo.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_carp.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_carp_d.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_chain.png create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_check.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_clock_green.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_clock_grey.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_clock_red.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_close.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_configure.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_down.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_down_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_down_mo.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_e.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_e_mo.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_error.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_exclam.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_flag_de.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_flag_en.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_flag_es.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.png create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_fw-update.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_help.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_ifalias.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_import_alias.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_in.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_in_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_info_pkg.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_interface_down.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_interface_up.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_left.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_left_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_left_mo.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_log.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_log_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_log_s.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_log_s_d.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_logs.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_match.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_match_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_minus.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_open.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_other.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_other_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_out.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_out_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_parp.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_parp_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_pass.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_pass_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_plus.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_plus_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_plus_mo.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_plus_p.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_reinstall.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_reject.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_reject_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_right.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_service_restart.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_service_running.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_service_start.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_service_start_d.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_service_status.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_service_stop.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_system-group.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_system-user.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_system_logout.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_trapped.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_trapped_p.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_ts_rule.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_up.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_up_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_up_mo.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_wlan.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_wlan_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_wol_all.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.png create mode 100644 usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.png create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_x.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_x_d.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_x_mo.gif create mode 100755 usr/local/www/themes/pfsense/images/icons/icon_x_p.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/in.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/in_d.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/out.gif create mode 100644 usr/local/www/themes/pfsense/images/icons/out_d.gif create mode 100755 usr/local/www/themes/pfsense/images/log.png create mode 100755 usr/local/www/themes/pfsense/images/logo.gif create mode 100755 usr/local/www/themes/pfsense/images/logobig.jpg create mode 100755 usr/local/www/themes/pfsense/images/misc/bar_blue.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/bar_gray.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/bar_left.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/bar_right.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/button.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/key_128.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/key_152.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/key_256.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/key_64.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/left_background.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/loader.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/loader_tab.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/logon.png create mode 100755 usr/local/www/themes/pfsense/images/misc/progress_bar.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/rrd_error.png create mode 100755 usr/local/www/themes/pfsense/images/misc/tri_c.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/tri_c_black.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/tri_o.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/tri_o_black.gif create mode 100755 usr/local/www/themes/pfsense/images/misc/widget_loader.gif create mode 100755 usr/local/www/themes/pfsense/images/new_tab_menu.png create mode 100755 usr/local/www/themes/pfsense/images/status.png create mode 100755 usr/local/www/themes/pfsense/images/transparent.gif create mode 100755 usr/local/www/themes/pfsense/images/transparent_pixel.gif create mode 100644 usr/local/www/themes/pfsense/javascript/niftyjsCode.js create mode 100644 usr/local/www/themes/pfsense/loader.js create mode 100644 usr/local/www/themes/pfsense/login.css create mode 100644 usr/local/www/themes/pfsense/new_tab_menu.css create mode 100644 usr/local/www/themes/pfsense/rrdcolors.inc.php create mode 100644 usr/local/www/themes/pfsense_ng/all.css create mode 100755 usr/local/www/themes/pfsense_ng/apple-touch-icon.png create mode 100644 usr/local/www/themes/pfsense_ng/bottom-loader.js create mode 100644 usr/local/www/themes/pfsense_ng/favicon.ico create mode 100644 usr/local/www/themes/pfsense_ng/graphlink.css create mode 100755 usr/local/www/themes/pfsense_ng/images/alert_bgr.png create mode 100755 usr/local/www/themes/pfsense_ng/images/alerter.png create mode 100755 usr/local/www/themes/pfsense_ng/images/background.jpg create mode 100755 usr/local/www/themes/pfsense_ng/images/footer.png create mode 100755 usr/local/www/themes/pfsense_ng/images/header.png create mode 100755 usr/local/www/themes/pfsense_ng/images/help.png create mode 100755 usr/local/www/themes/pfsense_ng/images/horizontal.png create mode 100755 usr/local/www/themes/pfsense_ng/images/hostname.png create mode 100644 usr/local/www/themes/pfsense_ng/images/icons/favicon.ico create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_3g.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_alert.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_block.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_cal.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_carp.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_chain.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_check.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_close.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_configure.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_down.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_e.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_error.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gif create mode 100644 usr/local/www/themes/pfsense_ng/images/icons/icon_help.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_in.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_left.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_log.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gif create mode 100644 usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gif create mode 100644 usr/local/www/themes/pfsense_ng/images/icons/icon_match.gif create mode 100644 usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_minus.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_open.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_other.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_out.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_parp.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_pass.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_plus.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_reject.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_right.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gif create mode 100644 usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gif create mode 100644 usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gif create mode 100644 usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_system-group.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_system-user.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_up.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.png create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_x.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/in.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/in_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/out.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/icons/out_d.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/log.png create mode 100755 usr/local/www/themes/pfsense_ng/images/logo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/logobig.jpg create mode 100755 usr/local/www/themes/pfsense_ng/images/mainmenu-down.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/mainmenu-right.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/mainmenuitem.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/menu-dot.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/menu_footer.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/menu_right.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/menubgr.png create mode 100755 usr/local/www/themes/pfsense_ng/images/menubgr_footer.png create mode 100755 usr/local/www/themes/pfsense_ng/images/menubgr_highlight.png create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/bar_blue.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/bar_gray.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/bar_left.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/bar_right.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.png create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.png create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/button.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/graph.png create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/key_128.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/key_152.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/key_256.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/key_64.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/left_background.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/loader.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/loader_all.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/loader_filter.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/loader_tab.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/logon.png create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/progress_bar.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/rrd_error.png create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/status_alerter.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/status_left.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/status_right.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/tri_c.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/tri_o.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/misc/widget_loader.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/new_tab_menu.png create mode 100755 usr/local/www/themes/pfsense_ng/images/status.png create mode 100755 usr/local/www/themes/pfsense_ng/images/transparent.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/transparent_pixel.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/wizards/initial/joincluster.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/wizards/initial/joincluster_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/wizards/initial/restore.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/wizards/initial/restore_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/wizards/initial/standalone.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/wizards/initial/standalone_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/wizards/initial/startnewcluster.gif create mode 100755 usr/local/www/themes/pfsense_ng/images/wizards/initial/startnewcluster_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng/javascript/ie7/blank.gif create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css3.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-fixed.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-html4.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-ie5.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite-p.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js create mode 100755 usr/local/www/themes/pfsense_ng/javascript/ie7/test-trans.png create mode 100755 usr/local/www/themes/pfsense_ng/javascript/img/grey-40.png create mode 100755 usr/local/www/themes/pfsense_ng/javascript/img/submenu-off.gif create mode 100755 usr/local/www/themes/pfsense_ng/javascript/img/submenu-on.gif create mode 100755 usr/local/www/themes/pfsense_ng/javascript/img/white-90.png create mode 100755 usr/local/www/themes/pfsense_ng/javascript/img/x.gif create mode 100644 usr/local/www/themes/pfsense_ng/javascript/niftyjsCode.js create mode 100644 usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php create mode 100644 usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php create mode 100644 usr/local/www/themes/pfsense_ng/javascript/transmenu.org create mode 100644 usr/local/www/themes/pfsense_ng/javascript/transmenuC.js create mode 100644 usr/local/www/themes/pfsense_ng/jsevents/body.def create mode 100644 usr/local/www/themes/pfsense_ng/loader.js create mode 100644 usr/local/www/themes/pfsense_ng/login.css create mode 100644 usr/local/www/themes/pfsense_ng/menu.inc create mode 100644 usr/local/www/themes/pfsense_ng/new_tab_menu.css create mode 100644 usr/local/www/themes/pfsense_ng/no_big_logo create mode 100644 usr/local/www/themes/pfsense_ng/rrdcolors.inc.php create mode 100644 usr/local/www/themes/pfsense_ng/styles/menustyles.css create mode 100644 usr/local/www/themes/pfsense_ng/styles/transmenu.css create mode 100644 usr/local/www/themes/pfsense_ng/wizard.css create mode 100644 usr/local/www/themes/pfsense_ng_fs/all.css create mode 100755 usr/local/www/themes/pfsense_ng_fs/apple-touch-icon.png create mode 100644 usr/local/www/themes/pfsense_ng_fs/bottom-loader.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/favicon.ico create mode 100644 usr/local/www/themes/pfsense_ng_fs/graphlink.css create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/alert_bgr.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/alerter.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/background.jpg create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/footer.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/header.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/help.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/horizontal.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/hostname.png create mode 100644 usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.ico create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gif create mode 100644 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gif create mode 100644 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gif create mode 100644 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gif create mode 100644 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gif create mode 100644 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gif create mode 100644 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gif create mode 100644 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/in.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/out.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/log.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/logo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/logobig.jpg create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/menu-dot.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/menu_footer.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/menu_right.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/menubgr.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/button.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/graph.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/loader.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/logon.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/status.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/transparent.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/joincluster.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/joincluster_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/restore.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/restore_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/standalone.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/standalone_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/startnewcluster.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/startnewcluster_mo.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gif create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css3.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-fixed.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-html4.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-ie5.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite-p.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js create mode 100755 usr/local/www/themes/pfsense_ng_fs/javascript/ie7/test-trans.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/javascript/img/grey-40.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-off.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-on.gif create mode 100755 usr/local/www/themes/pfsense_ng_fs/javascript/img/white-90.png create mode 100755 usr/local/www/themes/pfsense_ng_fs/javascript/img/x.gif create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/niftyjsCode.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org create mode 100644 usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/jsevents/body.def create mode 100644 usr/local/www/themes/pfsense_ng_fs/loader.js create mode 100644 usr/local/www/themes/pfsense_ng_fs/login.css create mode 100644 usr/local/www/themes/pfsense_ng_fs/menu.inc create mode 100644 usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css create mode 100644 usr/local/www/themes/pfsense_ng_fs/no_big_logo create mode 100644 usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php create mode 100644 usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css create mode 100644 usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css create mode 100644 usr/local/www/themes/pfsense_ng_fs/wizard.css create mode 100644 usr/local/www/themes/the_wall/all.css create mode 100755 usr/local/www/themes/the_wall/apple-touch-icon.png create mode 100644 usr/local/www/themes/the_wall/bottom-loader.js create mode 100644 usr/local/www/themes/the_wall/favicon.ico create mode 100644 usr/local/www/themes/the_wall/graphlink.css create mode 100755 usr/local/www/themes/the_wall/images/alert_bgr.png create mode 100755 usr/local/www/themes/the_wall/images/background.jpg create mode 100755 usr/local/www/themes/the_wall/images/footer.png create mode 100755 usr/local/www/themes/the_wall/images/header.png create mode 100755 usr/local/www/themes/the_wall/images/help.png create mode 100755 usr/local/www/themes/the_wall/images/horizontal.gif create mode 100755 usr/local/www/themes/the_wall/images/horizontal.png create mode 100644 usr/local/www/themes/the_wall/images/icons/favicon.ico create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_3g.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_advanced.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_advanced_s.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_alert.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_alias_host.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_alias_net.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_alias_port.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_alias_url.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_block.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_block_add.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_block_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_cablenic.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_cal.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_cal_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_carp.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_carp_d.gif create mode 100644 usr/local/www/themes/the_wall/images/icons/icon_chain.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_check.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_clock_green.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_clock_grey.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_clock_red.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_close.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_configure.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_down.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_down_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_down_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_e.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_e_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_error.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_exclam.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_flag_de.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_flag_en.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_flag_es.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_file.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_group.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_host.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_search.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_time.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_url.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_frmfld_user.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_fw-update.gif create mode 100644 usr/local/www/themes/the_wall/images/icons/icon_help.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_ifalias.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_import_alias.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_in.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_in_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_info_pkg.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_interface_down.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_interface_up.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_left.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_left_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_left_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_log.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_log_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_log_s.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_log_s_d.gif create mode 100644 usr/local/www/themes/the_wall/images/icons/icon_logs.gif create mode 100644 usr/local/www/themes/the_wall/images/icons/icon_match.gif create mode 100644 usr/local/www/themes/the_wall/images/icons/icon_match_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_minus.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_open.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_other.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_other_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_out.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_out_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_parp.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_parp_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_pass.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_pass_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_plus.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_plus_bl.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_plus_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_plus_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_plus_p.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_reinstall.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_reject.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_reject_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_right.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_service_restart.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gif create mode 100644 usr/local/www/themes/the_wall/images/icons/icon_service_running.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_service_start.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_service_start_d.gif create mode 100644 usr/local/www/themes/the_wall/images/icons/icon_service_status.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_service_stop.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gif create mode 100644 usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_system-group-grey.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_system-group.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_system-user-grey.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_system-user.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_system_logout.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_trapped.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_trapped_p.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_ts_rule.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_up.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_up_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_up_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_wlan.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_wlan_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_wol_all.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_wzd_saved.png create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_x.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_x_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_x_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/icon_x_p.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/in.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/in_d.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/out.gif create mode 100755 usr/local/www/themes/the_wall/images/icons/out_d.gif create mode 100755 usr/local/www/themes/the_wall/images/log.png create mode 100755 usr/local/www/themes/the_wall/images/logo.gif create mode 100755 usr/local/www/themes/the_wall/images/logobig.jpg create mode 100755 usr/local/www/themes/the_wall/images/menu_down.gif create mode 100755 usr/local/www/themes/the_wall/images/menu_right.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/bar_blue.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/bar_gray.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/bar_left.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/bar_right.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.png create mode 100755 usr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.png create mode 100755 usr/local/www/themes/the_wall/images/misc/button.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/graph.png create mode 100755 usr/local/www/themes/the_wall/images/misc/key_128.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/key_152.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/key_256.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/key_64.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/loader.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/loader_all.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/loader_filter.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/loader_tab.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/logon.png create mode 100755 usr/local/www/themes/the_wall/images/misc/progress_bar.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/rrd_error.png create mode 100755 usr/local/www/themes/the_wall/images/misc/status_alerter.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/status_carpmaster.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/status_left.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/status_page_loading.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/status_reload_all.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/status_reload_filter.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/status_right.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/tri_c.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/tri_c_black.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/tri_o.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/tri_o_black.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/widget_loader.gif create mode 100755 usr/local/www/themes/the_wall/images/misc/widget_loader_old.gif create mode 100755 usr/local/www/themes/the_wall/images/new_tab_menu.png create mode 100755 usr/local/www/themes/the_wall/images/status.png create mode 100755 usr/local/www/themes/the_wall/images/transparent.gif create mode 100755 usr/local/www/themes/the_wall/images/transparent_pixel.gif create mode 100755 usr/local/www/themes/the_wall/images/wizards/initial/joincluster.gif create mode 100755 usr/local/www/themes/the_wall/images/wizards/initial/joincluster_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/wizards/initial/restore.gif create mode 100755 usr/local/www/themes/the_wall/images/wizards/initial/restore_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/wizards/initial/standalone.gif create mode 100755 usr/local/www/themes/the_wall/images/wizards/initial/standalone_mo.gif create mode 100755 usr/local/www/themes/the_wall/images/wizards/initial/startnewcluster.gif create mode 100755 usr/local/www/themes/the_wall/images/wizards/initial/startnewcluster_mo.gif create mode 100755 usr/local/www/themes/the_wall/javascript/ie7/blank.gif create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-css3.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-fixed.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-html4.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-ie5.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-lite-p.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js create mode 100644 usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js create mode 100755 usr/local/www/themes/the_wall/javascript/ie7/test-trans.png create mode 100755 usr/local/www/themes/the_wall/javascript/img/grey-40.png create mode 100755 usr/local/www/themes/the_wall/javascript/img/submenu-off.gif create mode 100755 usr/local/www/themes/the_wall/javascript/img/submenu-on.gif create mode 100755 usr/local/www/themes/the_wall/javascript/img/white-90.png create mode 100755 usr/local/www/themes/the_wall/javascript/img/x.gif create mode 100644 usr/local/www/themes/the_wall/javascript/niftyjsCode.js create mode 100644 usr/local/www/themes/the_wall/javascript/transmenu-body.php create mode 100644 usr/local/www/themes/the_wall/javascript/transmenu-head.php create mode 100644 usr/local/www/themes/the_wall/javascript/transmenu.org create mode 100644 usr/local/www/themes/the_wall/javascript/transmenuC.js create mode 100644 usr/local/www/themes/the_wall/jsevents/body.def create mode 100644 usr/local/www/themes/the_wall/loader.js create mode 100644 usr/local/www/themes/the_wall/login.css create mode 100644 usr/local/www/themes/the_wall/menu.inc create mode 100644 usr/local/www/themes/the_wall/new_tab_menu.css create mode 100644 usr/local/www/themes/the_wall/no_big_logo create mode 100644 usr/local/www/themes/the_wall/rrdcolors.inc.php create mode 100644 usr/local/www/themes/the_wall/styles/menustyles.css create mode 100644 usr/local/www/themes/the_wall/styles/transmenu.css create mode 100644 usr/local/www/themes/the_wall/wizard.css create mode 100755 usr/local/www/tree-images/empty.gif create mode 100755 usr/local/www/tree-images/join.gif create mode 100755 usr/local/www/tree-images/joinbottom.gif create mode 100755 usr/local/www/tree-images/line.gif create mode 100755 usr/local/www/tree-images/minus_.gif create mode 100755 usr/local/www/tree-images/minus_up.gif create mode 100755 usr/local/www/tree-images/page.gif create mode 100755 usr/local/www/tree-images/plus_.gif create mode 100755 usr/local/www/tree-images/plus_up.gif create mode 100755 usr/local/www/tree-images/plus_updown.gif create mode 100755 usr/local/www/tree-images/zone.gif create mode 100755 usr/local/www/tree/i-bottom.gif create mode 100755 usr/local/www/tree/i-repeater.gif create mode 100644 usr/local/www/tree/index.html create mode 100755 usr/local/www/tree/l.gif create mode 100755 usr/local/www/tree/minus.gif create mode 100755 usr/local/www/tree/page-file.png create mode 100755 usr/local/www/tree/page-file_play.gif create mode 100755 usr/local/www/tree/page-file_x.gif create mode 100755 usr/local/www/tree/page-foldericon.png create mode 100755 usr/local/www/tree/page-openfoldericon.png create mode 100755 usr/local/www/tree/plus.gif create mode 100755 usr/local/www/tree/t.gif create mode 100644 usr/local/www/tree/tree.css create mode 100644 usr/local/www/tree/tree.js create mode 100644 usr/local/www/treeview.css create mode 100644 usr/local/www/uploadconfig.php create mode 100644 usr/local/www/vpn_ipsec.php create mode 100644 usr/local/www/vpn_ipsec_keys.php create mode 100644 usr/local/www/vpn_ipsec_keys_edit.php create mode 100644 usr/local/www/vpn_ipsec_mobile.php create mode 100644 usr/local/www/vpn_ipsec_phase1.php create mode 100644 usr/local/www/vpn_ipsec_phase2.php create mode 100644 usr/local/www/vpn_ipsec_settings.php create mode 100644 usr/local/www/vpn_l2tp.php create mode 100644 usr/local/www/vpn_l2tp_users.php create mode 100644 usr/local/www/vpn_l2tp_users_edit.php create mode 100644 usr/local/www/vpn_openvpn_client.php create mode 100644 usr/local/www/vpn_openvpn_csc.php create mode 100644 usr/local/www/vpn_openvpn_server.php create mode 100644 usr/local/www/vpn_pppoe.php create mode 100644 usr/local/www/vpn_pppoe_edit.php create mode 100644 usr/local/www/vpn_pptp.php create mode 100644 usr/local/www/vpn_pptp_users.php create mode 100644 usr/local/www/vpn_pptp_users_edit.php create mode 100644 usr/local/www/widgets/include/captiveportal.inc create mode 100644 usr/local/www/widgets/include/carp_status.inc create mode 100644 usr/local/www/widgets/include/dyn_dns_status.inc create mode 100644 usr/local/www/widgets/include/gateways.inc create mode 100644 usr/local/www/widgets/include/installed_packages.inc create mode 100644 usr/local/www/widgets/include/interface_statistics.inc create mode 100644 usr/local/www/widgets/include/interfaces.inc create mode 100644 usr/local/www/widgets/include/ipsec.inc create mode 100644 usr/local/www/widgets/include/load_balancer.inc create mode 100644 usr/local/www/widgets/include/log.inc create mode 100644 usr/local/www/widgets/include/ntp_status.inc create mode 100644 usr/local/www/widgets/include/openvpn.inc create mode 100644 usr/local/www/widgets/include/services_status.inc create mode 100644 usr/local/www/widgets/include/smart_status.inc create mode 100644 usr/local/www/widgets/include/thermal_sensors.inc create mode 100644 usr/local/www/widgets/include/traffic_graph.inc create mode 100644 usr/local/www/widgets/include/wake_on_lan.inc create mode 100644 usr/local/www/widgets/javascript/cpu_graphs.js create mode 100644 usr/local/www/widgets/javascript/ipsec.js create mode 100644 usr/local/www/widgets/javascript/thermal_sensors.js create mode 100644 usr/local/www/widgets/javascript/traffic_graph.js create mode 100644 usr/local/www/widgets/widgets/captive_portal_status.widget.php create mode 100644 usr/local/www/widgets/widgets/carp_status.widget.php create mode 100644 usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php create mode 100644 usr/local/www/widgets/widgets/dyn_dns_status.widget.php create mode 100644 usr/local/www/widgets/widgets/gateways.widget.php create mode 100644 usr/local/www/widgets/widgets/gmirror_status.widget.php create mode 100644 usr/local/www/widgets/widgets/installed_packages.widget.php create mode 100644 usr/local/www/widgets/widgets/interface_statistics.widget.php create mode 100644 usr/local/www/widgets/widgets/interfaces.widget.php create mode 100644 usr/local/www/widgets/widgets/ipsec.widget.php create mode 100644 usr/local/www/widgets/widgets/load_balancer_status.widget.php create mode 100644 usr/local/www/widgets/widgets/log.widget.php create mode 100644 usr/local/www/widgets/widgets/ntp_status.widget.php create mode 100644 usr/local/www/widgets/widgets/openvpn.widget.php create mode 100644 usr/local/www/widgets/widgets/picture.widget.php create mode 100644 usr/local/www/widgets/widgets/rss.widget.php create mode 100644 usr/local/www/widgets/widgets/services_status.widget.php create mode 100644 usr/local/www/widgets/widgets/smart_status.widget.php create mode 100644 usr/local/www/widgets/widgets/system_information.widget.php create mode 100644 usr/local/www/widgets/widgets/thermal_sensors.widget.php create mode 100644 usr/local/www/widgets/widgets/traffic_graphs.widget.php create mode 100644 usr/local/www/widgets/widgets/wake_on_lan.widget.php create mode 100644 usr/local/www/wizard.php create mode 100644 usr/local/www/wizards/openvpn_wizard.inc create mode 100644 usr/local/www/wizards/openvpn_wizard.xml create mode 100644 usr/local/www/wizards/setup_wizard.xml create mode 100644 usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc create mode 100755 usr/local/www/wizards/traffic_shaper_wizard_dedicated.xml create mode 100644 usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc create mode 100755 usr/local/www/wizards/traffic_shaper_wizard_multi_all.xml create mode 100755 usr/local/www/xmlrpc.php create mode 100644 usr/root/.hushlogin create mode 100644 usr/root/.profile create mode 100644 usr/root/.shrc create mode 100644 usr/root/.tcshrc create mode 100755 usr/sbin/athctrl.sh create mode 100755 usr/sbin/dhclient-script create mode 100644 usr/sbin/pc-sysinstall/Makefile create mode 100644 usr/sbin/pc-sysinstall/Makefile.inc create mode 100644 usr/sbin/pc-sysinstall/backend-partmanager/Makefile create mode 100755 usr/sbin/pc-sysinstall/backend-partmanager/create-part.sh create mode 100755 usr/sbin/pc-sysinstall/backend-partmanager/delete-part.sh create mode 100644 usr/sbin/pc-sysinstall/backend-query/Makefile create mode 100755 usr/sbin/pc-sysinstall/backend-query/detect-emulation.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/detect-laptop.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/detect-nics.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/disk-info.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/disk-list.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/disk-part.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/enable-net.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/get-packages.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/list-components.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/list-config.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/list-mirrors.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/list-packages.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/list-rsync-backups.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/list-tzones.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/query-langs.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/send-logs.sh create mode 100644 usr/sbin/pc-sysinstall/backend-query/set-mirror.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/setup-ssh-keys.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/sys-mem.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/test-live.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/test-netup.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/update-part-list.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/xkeyboard-layouts.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/xkeyboard-models.sh create mode 100755 usr/sbin/pc-sysinstall/backend-query/xkeyboard-variants.sh create mode 100755 usr/sbin/pc-sysinstall/backend/Makefile create mode 100755 usr/sbin/pc-sysinstall/backend/functions-bsdlabel.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-cleanup.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-disk.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-extractimage.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-ftp.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-installcomponents.sh create mode 100644 usr/sbin/pc-sysinstall/backend/functions-installpackages.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-localize.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-mountdisk.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-mountoptical.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-networking.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-newfs.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-packages.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-parse.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-runcommands.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-unmount.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-upgrade.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions-users.sh create mode 100755 usr/sbin/pc-sysinstall/backend/functions.sh create mode 100644 usr/sbin/pc-sysinstall/backend/installimage.sh create mode 100755 usr/sbin/pc-sysinstall/backend/parseconfig.sh create mode 100755 usr/sbin/pc-sysinstall/backend/startautoinstall.sh create mode 100644 usr/sbin/pc-sysinstall/conf/Makefile create mode 100644 usr/sbin/pc-sysinstall/conf/avail-langs create mode 100644 usr/sbin/pc-sysinstall/conf/exclude-from-upgrade create mode 100644 usr/sbin/pc-sysinstall/conf/licenses/bsd-en.txt create mode 100644 usr/sbin/pc-sysinstall/conf/licenses/intel-en.txt create mode 100644 usr/sbin/pc-sysinstall/conf/licenses/nvidia-en.txt create mode 100644 usr/sbin/pc-sysinstall/conf/pc-sysinstall.conf create mode 100644 usr/sbin/pc-sysinstall/doc/Makefile create mode 100644 usr/sbin/pc-sysinstall/doc/help-disk-list create mode 100644 usr/sbin/pc-sysinstall/doc/help-disk-size create mode 100644 usr/sbin/pc-sysinstall/doc/help-index create mode 100644 usr/sbin/pc-sysinstall/doc/help-start-autoinstall create mode 100644 usr/sbin/pc-sysinstall/examples/Makefile create mode 100644 usr/sbin/pc-sysinstall/examples/README create mode 100644 usr/sbin/pc-sysinstall/examples/pc-autoinstall.conf create mode 100644 usr/sbin/pc-sysinstall/examples/pcinstall.cfg.fbsd-netinstall create mode 100644 usr/sbin/pc-sysinstall/examples/pcinstall.cfg.geli create mode 100644 usr/sbin/pc-sysinstall/examples/pcinstall.cfg.gmirror create mode 100644 usr/sbin/pc-sysinstall/examples/pcinstall.cfg.netinstall create mode 100644 usr/sbin/pc-sysinstall/examples/pcinstall.cfg.restore create mode 100644 usr/sbin/pc-sysinstall/examples/pcinstall.cfg.rsync create mode 100644 usr/sbin/pc-sysinstall/examples/pcinstall.cfg.upgrade create mode 100644 usr/sbin/pc-sysinstall/examples/pcinstall.cfg.zfs create mode 100644 usr/sbin/pc-sysinstall/examples/pfSense.cfg create mode 100644 usr/sbin/pc-sysinstall/examples/pfSense.cfg.zfs create mode 100644 usr/sbin/pc-sysinstall/pc-sysinstall/Makefile create mode 100644 usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.8 create mode 100755 usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh create mode 100644 usr/share/doc/legal/intel_ipw/LICENSE create mode 100644 usr/share/doc/legal/intel_iwi/LICENSE create mode 100644 usr/share/doc/legal/intel_wpi/LICENSE create mode 100644 usr/share/zoneinfo.tgz create mode 100755 usr/tmp/post_upgrade_command create mode 100755 usr/tmp/post_upgrade_command.php create mode 100644 usr/tmp/pre_upgrade_command diff --git a/boot/device.hints_wrap b/boot/device.hints_wrap new file mode 100644 index 000000000..006fdd544 --- /dev/null +++ b/boot/device.hints_wrap @@ -0,0 +1,93 @@ +hint.fdc.0.at="isa" +hint.fdc.0.port="0x3F0" +hint.fdc.0.irq="6" +hint.fdc.0.drq="2" +hint.fd.0.at="fdc0" +hint.fd.0.drive="0" +hint.fd.1.at="fdc0" +hint.fd.1.drive="1" +hint.hw.ata.ata_dma="0" +hint.hw.ata.atapi_dma="0" +hint.ata.0.at="isa" +hint.ata.0.port="0x1F0" +hint.ata.0.irq="14" +hint.ata.1.at="isa" +hint.ata.1.port="0x170" +hint.ata.1.irq="15" +hint.adv.0.at="isa" +hint.adv.0.disabled="1" +hint.bt.0.at="isa" +hint.bt.0.disabled="1" +hint.aha.0.at="isa" +hint.aha.0.disabled="1" +hint.aic.0.at="isa" +hint.aic.0.disabled="1" +hint.atkbdc.0.disabled="1" +hint.atkbdc.0.at="isa" +hint.atkbdc.0.port="0x060" +hint.atkbd.0.at="atkbdc" +hint.atkbd.0.irq="1" +hint.psm.0.at="atkbdc" +hint.psm.0.irq="12" +hint.vga.0.disabled="1" +#hint.vga.0.at="isa" +#hint.sc.0.disabled="1" +hint.sc.0.at="isa" +hint.sc.0.flags="0x100" +hint.vt.0.at="isa" +hint.vt.0.disabled="1" +hint.apm.0.disabled="1" +hint.apm.0.flags="0x20" +hint.pcic.0.at="isa" +# hint.pcic.0.irq="10" # Default to polling +hint.pcic.0.port="0x3e0" +hint.pcic.0.maddr="0xd0000" +hint.pcic.1.at="isa" +hint.pcic.1.irq="11" +hint.pcic.1.port="0x3e2" +hint.pcic.1.maddr="0xd4000" +hint.pcic.1.disabled="1" +hint.sio.0.at="isa" +hint.sio.0.port="0x3F8" +hint.sio.0.flags="0x30" +hint.sio.0.irq="4" +hint.sio.1.at="isa" +hint.sio.1.port="0x2F8" +hint.sio.1.irq="3" +hint.sio.2.at="isa" +hint.sio.2.disabled="1" +hint.sio.2.port="0x3E8" +hint.sio.2.irq="5" +hint.sio.3.at="isa" +hint.sio.3.disabled="1" +hint.sio.3.port="0x2E8" +hint.sio.3.irq="9" +hint.ppc.0.at="isa" +hint.ppc.0.irq="7" +hint.ed.0.at="isa" +hint.ed.0.disabled="1" +hint.ed.0.port="0x280" +hint.ed.0.irq="10" +hint.ed.0.maddr="0xd8000" +hint.cs.0.at="isa" +hint.cs.0.disabled="1" +hint.cs.0.port="0x300" +hint.sn.0.at="isa" +hint.sn.0.disabled="1" +hint.sn.0.port="0x300" +hint.sn.0.irq="10" +hint.ie.0.at="isa" +hint.ie.0.disabled="1" +hint.ie.0.port="0x300" +hint.ie.0.irq="10" +hint.ie.0.maddr="0xd0000" +hint.fe.0.at="isa" +hint.fe.0.disabled="1" +hint.fe.0.port="0x300" +hint.lnc.0.at="isa" +hint.lnc.0.disabled="1" +hint.lnc.0.port="0x280" +hint.lnc.0.irq="10" +hint.lnc.0.drq="0" +hint.psm.0.flags="0x100" +hint.acpi.0.disabled="1" \ No newline at end of file diff --git a/boot/loader.conf_wrap b/boot/loader.conf_wrap new file mode 100644 index 000000000..6e7d9aa9c --- /dev/null +++ b/boot/loader.conf_wrap @@ -0,0 +1,11 @@ +hw.ata.atapi_dma="0" +hw.ata.ata_dma="0" +loader_color="NO" +console=comconsole +autoboot_delay="5" +hw.ata.wc="0" +kern.ipc.nmbclusters="0" +beastie_disable="YES" +vm.kmem_size="435544320" +vm.kmem_size_max="535544320" +hw.usb.no_pf="1" diff --git a/cf/conf/trigger_initial_wizard b/cf/conf/trigger_initial_wizard new file mode 100644 index 000000000..e69de29bb diff --git a/conf.default/config.xml b/conf.default/config.xml new file mode 100644 index 000000000..a0cabd501 --- /dev/null +++ b/conf.default/config.xml @@ -0,0 +1,751 @@ + + + + 9.9 + + pfsense_ng + + + + debug.pfftpproxy + default + + + + vfs.read_max + default + + + + net.inet.ip.portrange.first + default + + + + net.inet.tcp.blackhole + default + + + + net.inet.udp.blackhole + default + + + + net.inet.ip.random_id + default + + + + net.inet.tcp.drop_synfin + default + + + + net.inet.ip.redirect + default + + + + net.inet6.ip6.redirect + default + + + + net.inet6.ip6.use_tempaddr + default + + + + net.inet6.ip6.prefer_tempaddr + default + + + + net.inet.tcp.syncookies + default + + + + net.inet.tcp.recvspace + default + + + + net.inet.tcp.sendspace + default + + + + net.inet.ip.fastforwarding + default + + + + net.inet.tcp.delayed_ack + default + + + + net.inet.udp.maxdgram + default + + + + net.link.bridge.pfil_onlyip + default + + + + net.link.bridge.pfil_member + default + + + + net.link.bridge.pfil_bridge + default + + + + net.link.tap.user_open + default + + + + kern.randompid + default + + + + net.inet.ip.intr_queue_maxlen + default + + + + hw.syscons.kbd_reboot + default + + + + net.inet.tcp.log_debug + default + + + + net.inet.icmp.icmplim + default + + + + net.inet.tcp.tso + default + + + + net.inet.udp.checksum + default + + + + kern.ipc.maxsockbuf + default + + + + normal + pfSense + localdomain + + + + all + + system + 1998 + 0 + + + admins + + system + 1999 + 0 + page-all + + + admin + + system + admins + $1$dSJImFph$GvZ7.1UbuWu.Yb8etC0re. + 0 + user-shell-access + + 2000 + 2000 + Etc/UTC + 300 + 0.pfsense.pool.ntp.org + + https + + yes + + + + + + + + + hadp + hadp + hadp + + monthly + + + + + + + vr1 + + dhcp + dhcp6 + + + + + + + + + + 0 + + + + + vr0 + 192.168.1.1 + 24 + track6 + 64 + + + wan + 0 + + + + + + + + + + + + + 192.168.1.100 + 192.168.1.199 + + + + + + + + + + + + + + + + + + + + + + + public + + + + + + + + + + + + + + + + + automatic + + + + + + + + + + pass + inet + + lan + 0100000101 + + lan + + + + + + + pass + inet6 + + lan + 0100000102 + + lan + + + + + + + + + + + + + + + + + + + + + + + + + 1,31 + 0-5 + * + * + * + root + /usr/bin/nice -n20 adjkerntz -a + + + 1 + 3 + 1 + * + * + root + /usr/bin/nice -n20 /etc/rc.update_bogons.sh + + + */60 + * + * + * + * + root + /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 sshlockout + + + 1 + 1 + * + * + * + root + /usr/bin/nice -n20 /etc/rc.dyndns.update + + + */60 + * + * + * + * + root + /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 virusprot + + + 30 + 12 + * + * + * + root + /usr/bin/nice -n20 /etc/rc.update_urltables + + + + + + + + + + + ICMP + icmp + + + + + TCP + tcp + + + + + HTTP + http + + + / + + 200 + + + + HTTPS + https + + + / + + 200 + + + + SMTP + send + + + + 220 * + + + + + system_information-container:col1:show,captive_portal_status-container:col1:close,carp_status-container:col1:close,cpu_graphs-container:col1:close,gateways-container:col1:close,gmirror_status-container:col1:close,installed_packages-container:col1:close,interface_statistics-container:col1:close,interfaces-container:col2:show,ipsec-container:col2:close,load_balancer_status-container:col2:close,log-container:col2:close,picture-container:col2:close,rss-container:col2:close,services_status-container:col2:close,traffic_graphs-container:col2:close + + diff --git a/etc/ascii-art/pfsense-logo-small.txt b/etc/ascii-art/pfsense-logo-small.txt new file mode 100644 index 000000000..01d8bc52d --- /dev/null +++ b/etc/ascii-art/pfsense-logo-small.txt @@ -0,0 +1,5 @@ + ___ + ___/ f \ +/ p \___/ Sense +\___/ \ + \___/ \ No newline at end of file diff --git a/etc/bogons b/etc/bogons new file mode 100644 index 000000000..9be218d7b --- /dev/null +++ b/etc/bogons @@ -0,0 +1,10 @@ +0.0.0.0/8 +127.0.0.0/8 +169.254.0.0/16 +192.0.0.0/24 +192.0.2.0/24 +198.18.0.0/15 +198.51.100.0/24 +203.0.113.0/24 +224.0.0.0/4 +240.0.0.0/4 diff --git a/etc/bogonsv6 b/etc/bogonsv6 new file mode 100644 index 000000000..e69de29bb diff --git a/etc/ca_countries b/etc/ca_countries new file mode 100644 index 000000000..1a9ca9e88 --- /dev/null +++ b/etc/ca_countries @@ -0,0 +1,237 @@ +US United States of America +CA Canada +AX Aland Islands +AD Andorra +AE United Arab Emirates +AF Afghanistan +AG Antigua and Barbuda +AI Anguilla +AL Albania +AM Armenia +AN Netherlands Antilles +AO Angola +AQ Antarctica +AR Argentina +AS American Samoa +AT Austria +AU Australia +AW Aruba +AZ Azerbaijan +BA Bosnia and Herzegovina +BB Barbados +BD Bangladesh +BE Belgium +BF Burkina Faso +BG Bulgaria +BH Bahrain +BI Burundi +BJ Benin +BM Bermuda +BN Brunei Darussalam +BO Bolivia +BR Brazil +BS Bahamas +BT Bhutan +BV Bouvet Island +BW Botswana +BZ Belize +CA Canada +CC Cocos (Keeling) Islands +CF Central African Republic +CH Switzerland +CI Cote D'Ivoire (Ivory Coast) +CK Cook Islands +CL Chile +CM Cameroon +CN China +CO Colombia +CR Costa Rica +CS Czechoslovakia (former) +CV Cape Verde +CX Christmas Island +CY Cyprus +CZ Czech Republic +DE Germany +DJ Djibouti +DK Denmark +DM Dominica +DO Dominican Republic +DZ Algeria +EC Ecuador +EE Estonia +EG Egypt +EH Western Sahara +ER Eritrea +ES Spain +ET Ethiopia +FI Finland +FJ Fiji +FK Falkland Islands (Malvinas) +FM Micronesia +FO Faroe Islands +FR France +FX France, Metropolitan +GA Gabon +GB Great Britain (UK) +GD Grenada +GE Georgia +GF French Guiana +GG Guernsey +GH Ghana +GI Gibraltar +GL Greenland +GM Gambia +GN Guinea +GP Guadeloupe +GQ Equatorial Guinea +GR Greece +GS S. Georgia and S. Sandwich Isls. +GT Guatemala +GU Guam +GW Guinea-Bissau +GY Guyana +HK Hong Kong +HM Heard and McDonald Islands +HN Honduras +HR Croatia (Hrvatska) +HT Haiti +HU Hungary +ID Indonesia +IE Ireland +IL Israel +IM Isle of Man +IN India +IO British Indian Ocean Territory +IS Iceland +IT Italy +JE Jersey +JM Jamaica +JO Jordan +JP Japan +KE Kenya +KG Kyrgyzstan +KH Cambodia +KI Kiribati +KM Comoros +KN Saint Kitts and Nevis +KR Korea (South) +KW Kuwait +KY Cayman Islands +KZ Kazakhstan +LA Laos +LC Saint Lucia +LI Liechtenstein +LK Sri Lanka +LS Lesotho +LT Lithuania +LU Luxembourg +LV Latvia +LY Libya +MA Morocco +MC Monaco +MD Moldova +ME Montenegro +MG Madagascar +MH Marshall Islands +MK Macedonia +ML Mali +MM Myanmar +MN Mongolia +MO Macau +MP Northern Mariana Islands +MQ Martinique +MR Mauritania +MS Montserrat +MT Malta +MU Mauritius +MV Maldives +MW Malawi +MX Mexico +MY Malaysia +MZ Mozambique +NA Namibia +NC New Caledonia +NE Niger +NF Norfolk Island +NG Nigeria +NI Nicaragua +NL Netherlands +NO Norway +NP Nepal +NR Nauru +NT Neutral Zone +NU Niue +NZ New Zealand (Aotearoa) +OM Oman +PA Panama +PE Peru +PF French Polynesia +PG Papua New Guinea +PH Philippines +PK Pakistan +PL Poland +PM St. Pierre and Miquelon +PN Pitcairn +PR Puerto Rico +PS Palestinian Territory +PT Portugal +PW Palau +PY Paraguay +QA Qatar +RE Reunion +RO Romania +RS Serbia +RU Russian Federation +RW Rwanda +SA Saudi Arabia +SB Solomon Islands +SC Seychelles +SE Sweden +SG Singapore +SH St. Helena +SI Slovenia +SJ Svalbard and Jan Mayen Islands +SK Slovak Republic +SL Sierra Leone +SM San Marino +SN Senegal +SR Suriname +ST Sao Tome and Principe +SU USSR (former) +SV El Salvador +SZ Swaziland +TC Turks and Caicos Islands +TD Chad +TF French Southern Territories +TG Togo +TH Thailand +TJ Tajikistan +TK Tokelau +TM Turkmenistan +TN Tunisia +TO Tonga +TP East Timor +TR Turkey +TT Trinidad and Tobago +TV Tuvalu +TW Taiwan +TZ Tanzania +UA Ukraine +UG Uganda +UM US Minor Outlying Islands +US United States +UY Uruguay +UZ Uzbekistan +VA Vatican City State (Holy See) +VC Saint Vincent and the Grenadines +VE Venezuela +VG Virgin Islands (British) +VI Virgin Islands (U.S.) +VN Viet Nam +VU Vanuatu +WF Wallis and Futuna Islands +WS Samoa +YE Yemen +YT Mayotte +ZA South Africa +ZM Zambia \ No newline at end of file diff --git a/etc/ddb.conf b/etc/ddb.conf new file mode 100644 index 000000000..65f49c20e --- /dev/null +++ b/etc/ddb.conf @@ -0,0 +1,3 @@ +script lockinfo=show locks; show alllocks; show lockedvnods +script kdb.enter.default=textdump set; capture on; run lockinfo; show pcpu; bt; ps; alltrace; capture off; call doadump; reset +script kdb.enter.witness=run lockinfo diff --git a/etc/devd.conf b/etc/devd.conf new file mode 100644 index 000000000..c0a2b2a90 --- /dev/null +++ b/etc/devd.conf @@ -0,0 +1,74 @@ +# $Id$ +# $FreeBSD: src/etc/devd.conf,v 1.26.2.1 2005/09/03 22:49:22 sam Exp $ + +options { + directory "/etc/devd"; + directory "/usr/local/etc/devd"; + pid-file "/var/run/devd.pid"; + set scsi-controller-regex + "(aac|adv|adw|aha|ahb|ahc|ahd|aic|amd|amr|asr|bt|ciss|ct|dpt|\ + esp|ida|iir|ips|isp|mlx|mly|mpt|ncr|ncv|nsp|stg|sym|trm|wds)\ + [0-9]+"; +}; + +# CARP notify hooks. This will call carpup/carpdown with the +# interface (carp0, carp1) as the first parameter. +notify 100 { + match "system" "CARP"; + match "type" "MASTER"; + action "/usr/local/sbin/pfSctl -c 'interface carpmaster $subsystem'"; +}; + +notify 100 { + match "system" "CARP"; + match "type" "BACKUP"; + action "/usr/local/sbin/pfSctl -c 'interface carpbackup $subsystem'"; +}; + +# When a USB keyboard arrives, attach it as the console keyboard. +attach 100 { + device-name "ukbd0"; + action "kbdcontrol -k /dev/ukbd0 < /dev/console 2>/dev/null"; +}; + +detach 100 { + device-name "ukbd0"; + action "kbdcontrol -k /dev/kbd0 < /dev/console 2>/dev/null"; +}; + +# +# Signal upper levels that an event happened on ethernet class interface +# +notify 0 { + match "system" "IFNET"; + match "type" "LINK_UP"; + media-type "ethernet"; + action "/usr/local/sbin/pfSctl -c 'interface linkup start $subsystem'"; +}; + +notify 0 { + match "system" "IFNET"; + match "type" "LINK_DOWN"; + media-type "ethernet"; + action "/usr/local/sbin/pfSctl -c 'interface linkup stop $subsystem'"; +}; + +# +# Signal upper levels that an event happened on 802.11 class interface +# +notify 0 { + match "system" "IFNET"; + match "type" "LINK_UP"; + match "subsystem" "[a-z]+[0-9]+_wlan[0-9]+"; + action "/usr/local/sbin/pfSctl -c 'interface linkup start $subsystem'"; +}; + +# Notify all users before beginning emergency shutdown when we get +# a _CRT or _HOT thermal event and we're going to power down the system +# very soon. +notify 10 { + match "system" "ACPI"; + match "subsystem" "Thermal"; + match "notify" "0xcc"; + action "logger -p kern.emerg 'WARNING: system temperature too high, shutting down soon!'"; +}; diff --git a/etc/dh-parameters.1024 b/etc/dh-parameters.1024 new file mode 100644 index 000000000..3148f4c5e --- /dev/null +++ b/etc/dh-parameters.1024 @@ -0,0 +1,5 @@ +-----BEGIN DH PARAMETERS----- +MIGHAoGBAINPWm4z+KHppuzSZFjreaLrKdI/wkP0ojutrSlkiszXsGkbU6++GB1C +7ZH2ZVpSIo4z31XyQnlraIkyY2pAItxqN8ozWaz84QLSHcwVcWKDEU7ZP0ISyTep +alnFPGG8nJBSzxch+7H3HOfM68y6kfMtFDWuZtYj/9Zw4W42fVDLAgEC +-----END DH PARAMETERS----- diff --git a/etc/dh-parameters.2048 b/etc/dh-parameters.2048 new file mode 100644 index 000000000..f0e1a5d35 --- /dev/null +++ b/etc/dh-parameters.2048 @@ -0,0 +1,8 @@ +-----BEGIN DH PARAMETERS----- +MIIBCAKCAQEAmWwXhRjeqPYl1TvXeKZt5W8MHe0keJK7wC+uPMxpGFVXlvPnWdN+ +W/GyimtD2rHYWF1gyr5IbhiEkXSAuTCnwokwz9XiNQ3hKY/iwTPDo0Go8beB5Ezr +wz8DibSIv93Va5C+fHzwosuwTAqaOgpOzPqSmVS/UmUATssxOuCK6Crv7YyA5knW +v0JsJK3VfloeXq/p4skn/KRgL2twO5puJvZWGycMd3cv9+afsWjES/ItwzEHNSEG +sPen/kNDB4nH+WFKdXnP3fUAqPZCxiqaBC+UnuHngm7Se4smc7DeJkUsed7NLIeg +zDZ0a3bKZ3UB0lcLGbqXIhh74TtFQ1egmwIBAg== +-----END DH PARAMETERS----- diff --git a/etc/dh-parameters.4096 b/etc/dh-parameters.4096 new file mode 100644 index 000000000..30058a136 --- /dev/null +++ b/etc/dh-parameters.4096 @@ -0,0 +1,13 @@ +-----BEGIN DH PARAMETERS----- +MIICCAKCAgEA1G0VaCFVkFFPB0pL1Y6NtAlysfvZaAXXmmJ89Xy5wrNLEZfTdmqT +NmABAhr0DD6+1rcI5d4LriRLhTFf77COjW/+FelEA5BZBsoQDL6QsxWt4VoLT6uK +bKVkbtwKycz0uOU1areS5gWHF71KRmKgooOuY2yl7a75uLn4QYCS7hKLXsAIB8eC +63nl81T5gXOAc3hMiKrk8hKLUA6zkMfqWIpG06wvicaPlg8GyQavwGxONDNl/Y2r +XyRoh/4ja7Moz0tUCmZV+iKtGgq5wekJ1fCN3zhXPX6h6WujoYqzcCmPLFCuIuEa +kxRy9XaDTe8V40p1RDc4yMYQrl2hxrO8YPRBewigILYxEfe+51qE5Sb//UZszwNL +kIhW9ObfAkotXoH81xke4EN0RX+rVK1ZYbeBIDCn62ZqNsUVkMh5Otsh0TiK7SP9 +O14IflklQqpyYc+aHMNknhsN30MFV3aD/785QS8zcWUdSdQeZlbjjFgJ4Xpt+r3p +X6Vv8cwEh8qDHn2CaOfZtyTx2V3B2LU1sJZQ9ynVzlxy2clQcVboXPM1xNgzHSsd +bFgPMJUAq9VjLGrbN6a3NqWwXnQPMuczX1G3T690fKF55e/boIAXZD1hEZqKt1f0 +DuCwyf/D4CEGyHhHIdVm7f1kTaErWzSgqcc2wGsjFi3ABTG2byxTnSsCAQI= +-----END DH PARAMETERS----- diff --git a/etc/disktab b/etc/disktab new file mode 100644 index 000000000..5726c4dbf --- /dev/null +++ b/etc/disktab @@ -0,0 +1,204 @@ +# $FreeBSD: stable/10/etc/disktab 242462 2012-11-02 00:17:30Z eadler $ +# +# Disk geometry and partition layout tables. +# See disktab(5) for format of this file. +# + +# +# Floppy formats: +# +# To make a filesystem on a floppy: +# fdformat [-f ] fd[.] +# disklabel -B -r -w fd[.] fd +# newfs fd[.] +# +# with : +# -t 2 - two heads +# -u 9|15|18 - sectors per track +# (using the default value of 1/4096 is not much useful for floppies) +# -l 1 - interleave 1 (for most floppies) +# -i 65536 - bytes of data per i-node +# (the default -i value will render you with a floppy wasting way +# too much space in i-node areas) +# + +fd360:\ + :ty=floppy:se#512:nt#2:rm#300:ns#9:nc#40:\ + :pa#720:oa#0:ba#4096:fa#512:\ + :pc#720:oc#0:bc#4096:fc#512: + +fd720:\ + :ty=floppy:se#512:nt#2:rm#300:ns#9:nc#80:\ + :pa#1440:oa#0:ba#4096:fa#512:\ + :pc#1440:oc#0:bc#4096:fc#512: + +fd1200|floppy5|5in|5.25in High Density Floppy:\ + :ty=floppy:se#512:nt#2:rm#360:ns#15:nc#80:\ + :pa#2400:oa#0:ba#4096:fa#512:\ + :pc#2400:oc#0:bc#4096:fc#512: + +fd1440|floppy|floppy3|3in|3.5in High Density Floppy:\ + :ty=floppy:se#512:nt#2:rm#300:ns#18:nc#80:\ + :pa#2880:oa#0:ba#4096:fa#512:\ + :pc#2880:oc#0:bc#4096:fc#512: + +fd2880|2.88MB 3.5in Extra High Density Floppy:\ + :ty=floppy:se#512:nt#2:rm#300:ns#36:nc#80:\ + :pa#5760:oa#0:ba#4096:fa#512:\ + :pb#5760:ob#0:bb#4096:fa#512:\ + :pc#5760:oc#0:bb#4096:fa#512: + +# +# Stressed floppy-formats. No guarantees given. +# + +fd800:\ + :ty=floppy:se#512:nt#2:rm#300:ns#10:nc#80:\ + :pa#1600:oa#0:ba#4096:fa#512:\ + :pc#1600:oc#0:bc#4096:fc#512: + +fd820:\ + :ty=floppy:se#512:nt#2:rm#300:ns#10:nc#82:\ + :pa#1640:oa#0:ba#4096:fa#512:\ + :pc#1640:oc#0:bc#4096:fc#512: + +fd1480:\ + :ty=floppy:se#512:nt#2:rm#300:ns#18:nc#82:\ + :pa#2952:oa#0:ba#4096:fa#512:\ + :pc#2952:oc#0:bc#4096:fc#512: + +fd1720:\ + :ty=floppy:se#512:nt#2:rm#300:ns#21:nc#82:\ + :pa#3444:oa#0:ba#4096:fa#512:\ + :pc#3444:oc#0:bc#4096:fc#512: + +# +# LS-120 floppy-format. +# +fd120m|floppy120|floppy120m|3.5in LS-120 Floppy:\ + :ty=floppy:se#512:nt#8:rm#300:ns#32:nc#963:\ + :pa#246528:oa#0:ba#4096:fa#512:\ + :pc#246528:oc#0:bc#4096:fc#512: + +# +# Harddisk formats +# +qp120at|Quantum Peripherals 120MB IDE:\ + :dt=ESDI:ty=winchester:se#512:nt#9:ns#32:nc#813:sf: \ + :pa#13824:oa#0:ta=4.2BSD:ba#4096:fa#512: \ + :pb#13824:ob#13824:tb=swap: \ + :pc#234144:oc#0: \ + :ph#206496:oh#27648:th=4.2BSD:bh#4096:fh#512: + +pan60|Panasonic Laptop's 60MB IDE:\ + :dt=ST506:ty=winchester:se#512:nt#13:ns#17:nc#565:\ + :pa#13260:oa#0:ta=4.2BSD:ba#4096:fa#512:\ + :pb#13260:ob#13260:tb=swap: \ + :pc#124865:oc#0: \ + :ph#97682:oh#26520:th=4.2BSD:bh#4096:fh#512: + +mk156|toshiba156|Toshiba MK156 156Mb:\ + :dt=SCSI:ty=winchester:se#512:nt#10:ns#35:nc#825:\ + :pa#15748:oa#0:ba#4096:fa#512:ta=4.2BSD:\ + :pb#15748:ob#15748:tb=swap:\ + :pc#288750:oc#0:\ + :ph#257250:oh#31500:bh#4096:fh#512:th=4.2BSD: + +cp3100|Connor Peripherals 100MB IDE:\ + :dt=ST506:ty=winchester:se#512:nt#8:ns#33:nc#766: \ + :pa#12144:oa#0:ta=4.2BSD:ba#4096:fa#512: \ + :pb#12144:ob#12144:tb=swap: \ + :pc#202224:oc#0: \ + :ph#177936:oh#24288:th=4.2BSD:bh#4096:fh#512: + +# a == root +# b == swap +# c == d == whole disk +# e == /var +# f == scratch +# h == /usr + +cp3100new|Connor Peripherals 100MB IDE, with a different configuration:\ + :dt=ST506:ty=winchester:se#512:nt#8:ns#33:nc#766: \ + :pa#15840:oa#0:ta=4.2BSD:ba#4096:fa#512: \ + :pb#24288:ob#15840:tb=swap: \ + :pc#202224:oc#0: \ + :pd#202224:od#0: \ + :pe#15840:oe#40128:te=4.2BSD:be#4096:fe#512: \ + :pg#15840:og#55968:tg=4.2BSD:bg#4096:fg#512: \ + :ph#130416:oh#71808:th=4.2BSD:bh#4096:fh#512: + +maxtor4380|Maxtor XT4380E ESDI :\ + :dt=ESDI:ty=winchester:se#512:nt#15:ns#36:nc#1222:sf: \ + :pa#21600:oa#0:ta=4.2BSD:ba#4096:fa#512:\ + :pb#21600:ob#21600:tb=swap: \ + :pc#659880:oc#0: \ + :pd#216000:od#53200:td=4.2BSD:bd#4096:fd#512: \ + :ph#398520:oh#269200:th=4.2BSD:bh#4096:fh#512: + +miniscribe9380|compaq38|Miniscribe 9380 ESDI :\ + :ty=winchester:dt=ESDI:se#512:nt#15:ns#35:nc#1223:rm#3600:sf: \ + :pa#21000:oa#0:ba#8192:fa#1024:ta=4.2BSD: \ + :pb#42000:ob#21000:tb=swap: \ + :pc#642075:oc#0: \ + :pd#21000:od#63000:bd#8192:fd#1024:td=4.2BSD: \ + :ph#556500:oh#84000:bh#8192:fh#1024:th=4.2BSD: + +ida4|compaq88|Compaq IDA (4 drives) :\ + :ty=winchester:dt=IDA:se#512:nt#16:ns#63:nc#1644:rm#3600:\ + :pa#20160:oa#0:ba#8192:fa#1024:ta=4.2BSD: \ + :pb#80640:ob#20160:tb=swap: \ + :pc#1659168:oc#0: \ + :pd#201600:od#100800:bd#8192:fd#1024:td=4.2BSD: \ + :pe#20160:oe#1310400:be#8192:fe#1024:te=4.2BSD: \ + :ph#1008000:oh#302400:bh#8192:fh#1024:th=4.2BSD: \ + :pg#302400:og#1330560:bg#4096:fg#512:tg=4.2BSD: + +fuji513|Fujitsu M22XXXX: \ + :ty=winchester:dt=ESDI:se#512:nt#16:ns#63:nc#954:rm#3600:\ + :pa#20160:oa#82656:ba#4096:fa#512:ta=4.2BSD: \ + :pb#40320:ob#102816:tb=swap: \ + :pc#961632:oc#0: \ + :ph#656208:oh#143136:bh#4096:fh#512:th=4.2BSD: + +sony650|Sony 650 MB MOD|\ + :ty=removable:dt=SCSI:se#512:nt#1:ns#31:nc#18600:ts#1:rm#4800:\ + :pc#576600:oc#0:\ + :pa#576600:oa#0:ta=4.2BSD:ba#8192:fa#1024: + +mta3230|mo230|IBM MTA-3230 230 Meg 3.5inch Magneto-Optical:\ + :ty=removeable:dt=SCSI:rm#3600:\ + :se#512:nt#64:ns#32:nc#216:sc#2048:su#444384:\ + :pa#444384:oa#0:ba#4096:fa#0:ta=4.2BSD:\ + :pc#444384:oc#0: + +minimum:ty=mfs:se#512:nt#1:rm#300:\ + :ns#2880:nc#1:\ + :pa#2880:oa#0:ba#4096:fa#512:\ + :pc#2880:oc#0:bc#4096:fc#512: + +minimum2:ty=mfs:se#512:nt#1:rm#300:\ + :ns#5760:nc#1:\ + :pa#5760:oa#0:ba#4096:fa#512:\ + :pc#5760:oc#0:bc#4096:fc#512: + +minimum3:ty=mfs:se#512:nt#1:rm#300:\ + :ns#8640:nc#1:\ + :pa#8640:oa#0:ba#4096:fa#512:\ + :pc#8640:oc#0:bc#4096:fc#512: + +zip100|zip 100:\ + :ty=removable:se#512:nc#96:nt#64:ns#32:\ + :pa#196608:oa#0:ba#4096:fa#512:\ + :pc#196608:oc#0:bc#4096:fc#512: + +zip250|zip 250:\ + :ty=removable:se#512:nc#239:nt#64:ns#32:\ + :pa#489472:oa#0:ba#4096:fa#512:\ + :pc#489472:oc#0:bc#4096:fc#512: + +orb2200|orb22|orb:\ + :ty=removable:ns#63:nt#128:nc#4273:sc#1008:su#4307184:se#512:\ + :pa#4307184:oa#0:ba#8192:fa#1024:\ + :pc#4307184:oc#0:bc#8192:fc#1024: + diff --git a/etc/ecl.php b/etc/ecl.php new file mode 100755 index 000000000..683c2a7fb --- /dev/null +++ b/etc/ecl.php @@ -0,0 +1,174 @@ +/dev/null")); + $slices = str_replace("/dev/", "", $slices); + if($slices == "ls: No match.") + return; + $slices_array = explode(" ", $slices); + return $slices_array; +} + +function get_disks() { + global $g, $debug; + $disks_array = array(); + $disks_s = explode(" ", get_single_sysctl("kern.disks")); + foreach($disks_s as $disk) + if(trim($disk)) + $disks_array[] = $disk; + return $disks_array; +} + +function discover_config($mountpoint) { + global $g, $debug; + $locations_to_check = array("/", "/config"); + foreach($locations_to_check as $ltc) { + $tocheck = "/tmp/mnt/cf{$ltc}config.xml"; + if($debug) { + echo "\nChecking for $tocheck"; + if(file_exists($tocheck)) + echo " -> found!"; + } + if(file_exists($tocheck)) + return $tocheck; + } + return ""; +} + +function test_config($file_location) { + global $g, $debug; + if(!$file_location) + return; + // config.xml was found. ensure it is sound. + $root_obj = trim("<{$g['xml_rootobj']}>"); + $xml_file_head = exec("/usr/bin/head -2 " . escapeshellarg($file_location) . " | /usr/bin/tail -n1"); + if($debug) { + echo "\nroot obj = $root_obj"; + echo "\nfile head = $xml_file_head"; + } + if($xml_file_head == $root_obj) { + // Now parse config to make sure + $config_status = config_validate($file_location); + if($config_status) + return true; + } + return false; +} + +// Probes all disks looking for config.xml +function find_config_xml() { + global $g, $debug; + $disks = get_disks(); + // Safety check. + if(!is_array($disks)) + return; + $boot_disk = get_boot_disk(); + $swap_disks = get_swap_disks(); + exec("/bin/mkdir -p /tmp/mnt/cf"); + foreach($disks as $disk) { + $slices = get_disk_slices($disk); + if(is_array($slices)) { + foreach($slices as $slice) { + if($slice == "") + continue; + if(stristr($slice, $boot_disk)) { + if($debug) + echo "\nSkipping boot device slice $slice"; + continue; + } + if(in_array($slice, $swap_disks)) { + if($debug) + echo "\nSkipping swap device slice $slice"; + continue; + } + echo " $slice"; + // First try msdos fs + if($debug) + echo "\n/sbin/mount -t msdosfs /dev/{$slice} /tmp/mnt/cf 2>/dev/null \n"; + $result = exec("/sbin/mount -t msdosfs /dev/{$slice} /tmp/mnt/cf 2>/dev/null"); + // Next try regular fs (ufs) + if(!$result) { + if($debug) + echo "\n/sbin/mount /dev/{$slice} /tmp/mnt/cf 2>/dev/null \n"; + $result = exec("/sbin/mount /dev/{$slice} /tmp/mnt/cf 2>/dev/null"); + } + $mounted = trim(exec("/sbin/mount | /usr/bin/grep -v grep | /usr/bin/grep '/tmp/mnt/cf' | /usr/bin/wc -l")); + if($debug) + echo "\nmounted: $mounted "; + if(intval($mounted) > 0) { + // Item was mounted - look for config.xml file + $config_location = discover_config($slice); + if($config_location) { + if(test_config($config_location)) { + // We have a valid configuration. Install it. + echo " -> found config.xml\n"; + echo "Backing up old configuration...\n"; + backup_config(); + echo "Restoring [{$slice}] {$config_location}...\n"; + restore_backup($config_location); + echo "Cleaning up...\n"; + exec("/sbin/umount /tmp/mnt/cf"); + exit; + } + } + exec("/sbin/umount /tmp/mnt/cf"); + } + } + } + } +} + +echo "External config loader 1.0 is now starting..."; +find_config_xml(); +echo "\n"; + +?> diff --git a/etc/fbtab b/etc/fbtab new file mode 100644 index 000000000..06d2d6127 --- /dev/null +++ b/etc/fbtab @@ -0,0 +1,4 @@ +# $FreeBSD: src/etc/fbtab,v 1.3 1999/09/13 17:09:07 peter Exp $ +# +#/dev/ttyv0 0600 /dev/console +#/dev/ttyv0 0600 /dev/pcaudio:/dev/pcaudioctl diff --git a/etc/gettytab b/etc/gettytab new file mode 100644 index 000000000..5af5aaede --- /dev/null +++ b/etc/gettytab @@ -0,0 +1,235 @@ +# $FreeBSD: stable/10/etc/gettytab 241708 2012-10-18 22:20:02Z peterj $ +# from: @(#)gettytab 5.14 (Berkeley) 3/27/91 +# +# Most of the table entries here are just copies of the old getty table, +# it is by no means certain, or even likely, that any of them are optimal +# for any purpose whatever. Nor is it likely that more than a couple are +# even correct. +# +# The default gettytab entry, used to set defaults for all other +# entries, and in cases where getty is called with no table name. +# +# cb, ce and ck are desirable on most crt's. The non-crt entries need to +# be changed to turn them off (:cb@:ce@:ck@:). +# +# lc should always be on; it's a remainder of some stone age when there +# have been terminals around not being able of handling lower-case +# characters. Those terminals aren't supported any longer, but getty is +# `smart' about them by default. +# +# Parity defaults to even, but the Pc entry and all the `std' entries +# specify no parity. The different parities are: +# (none): same as ep for getty. login will use terminal as is. +# ep: getty will use raw mode (cs8 -parenb) (unless rw is set) and +# fake parity. login will use even parity (cs7 parenb -parodd). +# op: same as ep except odd parity (cs7 parenb parodd) for login. +# getty will fake odd parity as well. +# ap: same as ep except -inpck instead of inpck for login. +# ap overrides op and ep. +# np: 1. don't fake parity in getty. The fake parity garbles +# characters on non-terminals (like pccons) that don't +# support parity. It would probably better for getty not to +# try to fake parity. It could just use cbreak mode so as +# not to force cs8 and let the hardware handle the parity. +# login has to be rely on the hardware anyway. +# 2. set cs8 -parenb -istrip -inpck. +# ep:op: same as ap. +# +default:\ + :cb:ce:ck:lc:fd#1000:im=\r\n%s/%m (%h) (%t)\r\n\r\n:sp#1200:\ + :if=/etc/issue: + +# +# Fixed speed entries +# +# The "std.NNN" names are known to the special case +# portselector code in getty, however they can +# be assigned to any table desired. +# The "NNN-baud" names are known to the special case +# autobaud code in getty, and likewise can +# be assigned to any table desired (hopefully the same speed). +# +a|std.110|110-baud:\ + :np:nd#1:cd#1:uc:sp#110: +b|std.134|134.5-baud:\ + :np:nd#1:cd#2:ff#1:td#1:sp#134:ht:nl: +1|std.150|150-baud:\ + :np:nd#1:cd#2:td#1:fd#1:sp#150:ht:nl:lm=\E\72\6\6\17login\72 : +c|std.300|300-baud:\ + :np:nd#1:cd#1:sp#300: +d|std.600|600-baud:\ + :np:nd#1:cd#1:sp#600: +f|std.1200|1200-baud:\ + :np:fd#1:sp#1200: +6|std.2400|2400-baud:\ + :np:sp#2400: +7|std.4800|4800-baud:\ + :np:sp#4800: +2|std.9600|9600-baud:\ + :np:sp#9600: +g|std.19200|19200-baud:\ + :np:sp#19200: +std.38400|38400-baud:\ + :np:sp#38400: +std.57600|57600-baud:\ + :np:sp#57600: +std.115200|115200-baud:\ + :np:sp#115200: +std.230400|230400-baud:\ + :np:sp#230400: + +# +# Entry specifying explicit device settings. See termios(4) and +# /usr/include/termios.h, too. The entry forces the tty into +# CLOCAL mode (so no DCD is required), and uses Xon/Xoff flow control. +# +# cflags: CLOCAL | HUPCL | CREAD | CS8 +# oflags: OPOST | ONLCR | OXTABS +# iflags: IXOFF | IXON | ICRNL | IGNPAR +# lflags: IEXTEN | ICANON | ISIG | ECHOCTL | ECHO | ECHOK | ECHOE | ECHOKE +# +# The `0' flags don't have input enabled. The `1' flags don't echo. +# (Echoing is done inside getty itself.) +# +local.9600|CLOCAL tty @ 9600 Bd:\ + :c0#0x0000c300:c1#0x0000cb00:c2#0x0000cb00:\ + :o0#0x00000007:o1#0x00000002:o2#0x00000007:\ + :i0#0x00000704:i1#0x00000000:i2#0x00000704:\ + :l0#0x000005cf:l1#0x00000000:l2#0x000005cf:\ + :sp#9600:np: + +# +# Dial in rotary tables, speed selection via 'break' +# +0|d300|Dial-300:\ + :nx=d1200:cd#2:sp#300: +d1200|Dial-1200:\ + :nx=d150:fd#1:sp#1200: +d150|Dial-150:\ + :nx=d110:lm@:tc=150-baud: +d110|Dial-110:\ + :nx=d300:tc=300-baud: + +# +# Fast dialup terminals, 2400/1200/300 rotary (can start either way) +# +D2400|d2400|Fast-Dial-2400:\ + :nx=D1200:tc=2400-baud: +3|D1200|Fast-Dial-1200:\ + :nx=D300:tc=1200-baud: +5|D300|Fast-Dial-300:\ + :nx=D2400:tc=300-baud: + +# +#telebit (19200) +# +t19200:\ + :nx=t2400:tc=19200-baud: +t2400:\ + :nx=t1200:tc=2400-baud: +t1200:\ + :nx=t19200:tc=1200-baud: + +# +#telebit (9600) +# +t9600:\ + :nx=t2400a:tc=9600-baud: +t2400a:\ + :nx=t1200a:tc=2400-baud: +t1200a:\ + :nx=t9600:tc=1200-baud: + +# +# Odd special case terminals +# +-|tty33|asr33|Pity the poor user of this beast:\ + :tc=110-baud: + +4|Console|Console Decwriter II:\ + :nd@:cd@:rw:tc=300-baud: + +e|Console-1200|Console Decwriter III:\ + :fd@:nd@:cd@:rw:tc=1200-baud: + +i|Interdata console:\ + :uc:sp#0: + +l|lsi chess terminal:\ + :sp#300: + +X|Xwindow|X window system:\ + :fd@:nd@:cd@:rw:sp#9600: + +P|Pc|Pc console:\ + :ht:np:sp#9600: + +al.Pc:\ + :ht:np:sp#9600:al=root: + +# Weirdo special case for fast crt's with hardcopy devices +# +8|T9600|CRT with hardcopy:\ + :nx=T300:tc=9600-baud: +9|T300|CRT with hardcopy (300):\ + :nx=T9600:tc=300-baud: + +# +# Plugboard, and misc other terminals +# +plug-9600|Plugboard-9600:\ + :pf#1:tc=9600-baud: +p|P9600|Plugboard-9600-rotary:\ + :pf#1:nx=P300:tc=9600-baud: +q|P300|Plugboard-300:\ + :pf#1:nx=P1200:tc=300-baud: +r|P1200|Plugboard-1200:\ + :pf#1:nx=P9600:tc=1200-baud: + +# +# XXXX Port selector +# +s|DSW|Port Selector:\ + :ps:sp#2400: + +# +# Auto-baud speed detect entry for Micom 600. +# Special code in getty will switch this out +# to one of the NNN-baud entries. +# +A|Auto-baud:\ + :ab:sp#2400:f0#040: + +# +# autologin - automatically log in as root +# + +autologin|al.9600:\ + :al=root:tc=std.9600: +al.19200:\ + :al=root:tc=std.19200: +al.38400:\ + :al=root:tc=std.38400: +al.57600:\ + :al=root:tc=std.57600: +al.115200:\ + :al=root:tc=std.115200: +al.230400:\ + :al=root:tc=std.230400: + +# +# Entries for 3-wire serial terminals. These don't supply carrier, so +# clocal needs to be set, and crtscts needs to be unset. +# +3wire.9600|9600-3wire:\ + :np:nc:sp#9600: +3wire.19200|19200-3wire:\ + :np:nc:sp#19200: +3wire.38400|38400-3wire:\ + :np:nc:sp#38400: +3wire.57600|57600-3wire:\ + :np:nc:sp#57600: +3wire.115200|115200-3wire:\ + :np:nc:sp#115200: +3wire.230400|230400-3wire:\ + :np:nc:sp#230400: diff --git a/etc/group b/etc/group new file mode 100644 index 000000000..a0ca8cebf --- /dev/null +++ b/etc/group @@ -0,0 +1,31 @@ +wheel:*:0:root,admin +daemon:*:1:daemon +kmem:*:2:root +sys:*:3:root +tty:*:4:root +operator:*:5:root +mail:*:6: +bin:*:7: +news:*:8: +man:*:9: +games:*:13: +staff:*:20:root +sshd:*:22: +smmsp:*:25: +mailnull:*:26: +guest:*:31:root +bind:*:53: +unbound:*:59: +proxy:*:62: +_pflogd:*:64: +_dhcp:*:65: +authpf:*:63: +uucp:*:66: +dialer:*:68: +network:*:69: +www:*:80: +nogroup:*:65533: +nobody:*:65534: +audit:*:77: +_ntp:*:123: +_relayd:*:913: diff --git a/etc/host.conf b/etc/host.conf new file mode 100644 index 000000000..6643c7f51 --- /dev/null +++ b/etc/host.conf @@ -0,0 +1,7 @@ +# $FreeBSD: src/etc/host.conf,v 1.6 1999/08/27 23:23:41 peter Exp $ +# First try the /etc/hosts file +hosts +# Now try the nameserver next. +bind +# If you have YP/NIS configured, uncomment the next line +# nis diff --git a/etc/hosts.allow b/etc/hosts.allow new file mode 100644 index 000000000..ab11cc029 --- /dev/null +++ b/etc/hosts.allow @@ -0,0 +1,5 @@ +# +# hosts.allow access control file for "tcp wrapped" applications. +# +ALL : ALL : allow + diff --git a/etc/inc/CHAP.inc b/etc/inc/CHAP.inc new file mode 100644 index 000000000..6eb22f728 --- /dev/null +++ b/etc/inc/CHAP.inc @@ -0,0 +1,463 @@ + +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. +3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. + +This code cannot simply be copied and put under the GNU Public License or +any other GPL-like (LGPL, GPL2) License. + + $Id: CHAP.php 302857 2010-08-28 21:12:59Z mbretter $ +*/ + +require_once 'PEAR.inc'; + +/** +* Classes for generating packets for various CHAP Protocols: +* CHAP-MD5: RFC1994 +* MS-CHAPv1: RFC2433 +* MS-CHAPv2: RFC2759 +* +* @package Crypt_CHAP +* @author Michael Bretterklieber +* @access public +* @version $Revision: 302857 $ +*/ + +/** + * class Crypt_CHAP + * + * Abstract base class for CHAP + * + * @package Crypt_CHAP + */ +class Crypt_CHAP extends PEAR +{ + /** + * Random binary challenge + * @var string + */ + var $challenge = null; + + /** + * Binary response + * @var string + */ + var $response = null; + + /** + * User password + * @var string + */ + var $password = null; + + /** + * Id of the authentication request. Should incremented after every request. + * @var integer + */ + var $chapid = 1; + + /** + * Constructor + * + * Generates a random challenge + * @return void + */ + function Crypt_CHAP() + { + $this->PEAR(); + $this->generateChallenge(); + } + + /** + * Generates a random binary challenge + * + * @param string $varname Name of the property + * @param integer $size Size of the challenge in Bytes + * @return void + */ + function generateChallenge($varname = 'challenge', $size = 8) + { + $this->$varname = ''; + for ($i = 0; $i < $size; $i++) { + $this->$varname .= pack('C', 1 + mt_rand() % 255); + } + return $this->$varname; + } + + /** + * Generates the response. Overwrite this. + * + * @return void + */ + function challengeResponse() + { + } + +} + +/** + * class Crypt_CHAP_MD5 + * + * Generate CHAP-MD5 Packets + * + * @package Crypt_CHAP + */ +class Crypt_CHAP_MD5 extends Crypt_CHAP +{ + + /** + * Generates the response. + * + * CHAP-MD5 uses MD5-Hash for generating the response. The Hash consists + * of the chapid, the plaintext password and the challenge. + * + * @return string + */ + function challengeResponse() + { + return pack('H*', md5(pack('C', $this->chapid) . $this->password . $this->challenge)); + } +} + +/** + * class Crypt_CHAP_MSv1 + * + * Generate MS-CHAPv1 Packets. MS-CHAP doesen't use the plaintext password, it uses the + * NT-HASH wich is stored in the SAM-Database or in the smbpasswd, if you are using samba. + * The NT-HASH is MD4(str2unicode(plaintextpass)). + * You need the hash extension for this class. + * + * @package Crypt_CHAP + */ +class Crypt_CHAP_MSv1 extends Crypt_CHAP +{ + /** + * Wether using deprecated LM-Responses or not. + * 0 = use LM-Response, 1 = use NT-Response + * @var bool + */ + var $flags = 1; + + /** + * Constructor + * + * Loads the hash extension + * @return void + */ + function Crypt_CHAP_MSv1() + { + $this->Crypt_CHAP(); + $this->loadExtension('hash'); + } + + /** + * Generates the NT-HASH from the given plaintext password. + * + * @access public + * @return string + */ + function ntPasswordHash($password = null) + { + if (isset($password)) { + return pack('H*',hash('md4', $this->str2unicode($password))); + } else { + return pack('H*',hash('md4', $this->str2unicode($this->password))); + } + } + + /** + * Converts ascii to unicode. + * + * @access public + * @return string + */ + function str2unicode($str) + { + $uni = ''; + $str = (string) $str; + for ($i = 0; $i < strlen($str); $i++) { + $a = ord($str{$i}) << 8; + $uni .= sprintf("%X", $a); + } + return pack('H*', $uni); + } + + /** + * Generates the NT-Response. + * + * @access public + * @return string + */ + function challengeResponse() + { + return $this->_challengeResponse(); + } + + /** + * Generates the NT-Response. + * + * @access public + * @return string + */ + function ntChallengeResponse() + { + return $this->_challengeResponse(false); + } + + /** + * Generates the LAN-Manager-Response. + * + * @access public + * @return string + */ + function lmChallengeResponse() + { + return $this->_challengeResponse(true); + } + + /** + * Generates the response. + * + * Generates the response using DES. + * + * @param bool $lm wether generating LAN-Manager-Response + * @access private + * @return string + */ + function _challengeResponse($lm = false) + { + if ($lm) { + $hash = $this->lmPasswordHash(); + } else { + $hash = $this->ntPasswordHash(); + } + + while (strlen($hash) < 21) { + $hash .= "\0"; + } + + $td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, ''); + $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); + $key = $this->_desAddParity(substr($hash, 0, 7)); + mcrypt_generic_init($td, $key, $iv); + $resp1 = mcrypt_generic($td, $this->challenge); + mcrypt_generic_deinit($td); + + $key = $this->_desAddParity(substr($hash, 7, 7)); + mcrypt_generic_init($td, $key, $iv); + $resp2 = mcrypt_generic($td, $this->challenge); + mcrypt_generic_deinit($td); + + $key = $this->_desAddParity(substr($hash, 14, 7)); + mcrypt_generic_init($td, $key, $iv); + $resp3 = mcrypt_generic($td, $this->challenge); + mcrypt_generic_deinit($td); + mcrypt_module_close($td); + + return $resp1 . $resp2 . $resp3; + } + + /** + * Generates the LAN-Manager-HASH from the given plaintext password. + * + * @access public + * @return string + */ + function lmPasswordHash($password = null) + { + $plain = isset($password) ? $password : $this->password; + + $plain = substr(strtoupper($plain), 0, 14); + while (strlen($plain) < 14) { + $plain .= "\0"; + } + + return $this->_desHash(substr($plain, 0, 7)) . $this->_desHash(substr($plain, 7, 7)); + } + + /** + * Generates an irreversible HASH. + * + * @access private + * @return string + */ + function _desHash($plain) + { + $key = $this->_desAddParity($plain); + $td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, ''); + $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); + mcrypt_generic_init($td, $key, $iv); + $hash = mcrypt_generic($td, 'KGS!@#$%'); + mcrypt_generic_deinit($td); + mcrypt_module_close($td); + return $hash; + } + + /** + * Adds the parity bit to the given DES key. + * + * @access private + * @param string $key 7-Bytes Key without parity + * @return string + */ + function _desAddParity($key) + { + static $odd_parity = array( + 1, 1, 2, 2, 4, 4, 7, 7, 8, 8, 11, 11, 13, 13, 14, 14, + 16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31, + 32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47, + 49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62, + 64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79, + 81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94, + 97, 97, 98, 98,100,100,103,103,104,104,107,107,109,109,110,110, + 112,112,115,115,117,117,118,118,121,121,122,122,124,124,127,127, + 128,128,131,131,133,133,134,134,137,137,138,138,140,140,143,143, + 145,145,146,146,148,148,151,151,152,152,155,155,157,157,158,158, + 161,161,162,162,164,164,167,167,168,168,171,171,173,173,174,174, + 176,176,179,179,181,181,182,182,185,185,186,186,188,188,191,191, + 193,193,194,194,196,196,199,199,200,200,203,203,205,205,206,206, + 208,208,211,211,213,213,214,214,217,217,218,218,220,220,223,223, + 224,224,227,227,229,229,230,230,233,233,234,234,236,236,239,239, + 241,241,242,242,244,244,247,247,248,248,251,251,253,253,254,254); + + $bin = ''; + for ($i = 0; $i < strlen($key); $i++) { + $bin .= sprintf('%08s', decbin(ord($key{$i}))); + } + + $str1 = explode('-', substr(chunk_split($bin, 7, '-'), 0, -1)); + $x = ''; + foreach($str1 as $s) { + $x .= sprintf('%02s', dechex($odd_parity[bindec($s . '0')])); + } + + return pack('H*', $x); + + } + + /** + * Generates the response-packet. + * + * @param bool $lm wether including LAN-Manager-Response + * @access private + * @return string + */ + function response($lm = false) + { + $ntresp = $this->ntChallengeResponse(); + if ($lm) { + $lmresp = $this->lmChallengeResponse(); + } else { + $lmresp = str_repeat ("\0", 24); + } + + // Response: LM Response, NT Response, flags (0 = use LM Response, 1 = use NT Response) + return $lmresp . $ntresp . pack('C', !$lm); + } +} + +/** + * class Crypt_CHAP_MSv2 + * + * Generate MS-CHAPv2 Packets. This version of MS-CHAP uses a 16 Bytes authenticator + * challenge and a 16 Bytes peer Challenge. LAN-Manager responses no longer exists + * in this version. The challenge is already a SHA1 challenge hash of both challenges + * and of the username. + * + * @package Crypt_CHAP + */ +class Crypt_CHAP_MSv2 extends Crypt_CHAP_MSv1 +{ + /** + * The username + * @var string + */ + var $username = null; + + /** + * The 16 Bytes random binary peer challenge + * @var string + */ + var $peerChallenge = null; + + /** + * The 16 Bytes random binary authenticator challenge + * @var string + */ + var $authChallenge = null; + + /** + * Constructor + * + * Generates the 16 Bytes peer and authentication challenge + * @return void + */ + function Crypt_CHAP_MSv2() + { + $this->Crypt_CHAP_MSv1(); + $this->generateChallenge('peerChallenge', 16); + $this->generateChallenge('authChallenge', 16); + } + + /** + * Generates a hash from the NT-HASH. + * + * @access public + * @param string $nthash The NT-HASH + * @return string + */ + function ntPasswordHashHash($nthash) + { + return pack('H*',hash('md4', $nthash)); + } + + /** + * Generates the challenge hash from the peer and the authenticator challenge and + * the username. SHA1 is used for this, but only the first 8 Bytes are used. + * + * @access public + * @return string + */ + function challengeHash() + { + return substr(pack('H*',hash('sha1', $this->peerChallenge . $this->authChallenge . $this->username)), 0, 8); + } + + /** + * Generates the response. + * + * @access public + * @return string + */ + function challengeResponse() + { + $this->challenge = $this->challengeHash(); + return $this->_challengeResponse(); + } +} + + +?> diff --git a/etc/inc/IPv6.inc b/etc/inc/IPv6.inc new file mode 100644 index 000000000..ab9aa657e --- /dev/null +++ b/etc/inc/IPv6.inc @@ -0,0 +1,1104 @@ + + * @copyright 2003-2005 The PHP Group + * @license BSD License http://www.opensource.org/licenses/bsd-license.php + * @version CVS: $Id$ + * @link http://pear.php.net/package/Net_IPv6 + */ + +// {{{ constants + +/** + * Error message if netmask bits was not found + * @see isInNetmask + */ +define("NET_IPV6_NO_NETMASK_MSG", "Netmask length not found"); + +/** + * Error code if netmask bits was not found + * @see isInNetmask + */ +define("NET_IPV6_NO_NETMASK", 10); + +/** + * Address Type: Unassigned (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_UNASSIGNED", 1); + +/** + * Address Type: Reserved (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_RESERVED", 11); + +/** + * Address Type: Reserved for NSAP Allocation (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_RESERVED_NSAP", 12); + +/** + * Address Type: Reserved for IPX Allocation (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_RESERVED_IPX", 13); + +/** + * Address Type: Reserved for Geographic-Based Unicast Addresses + * (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_RESERVED_UNICAST_GEOGRAPHIC", 14); + +/** + * Address Type: Provider-Based Unicast Address (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_UNICAST_PROVIDER", 22); + +/** + * Address Type: Multicast Addresses (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_MULTICAST", 31); + +/** + * Address Type: Link Local Use Addresses (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_LOCAL_LINK", 42); + +/** + * Address Type: Link Local Use Addresses (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_LOCAL_SITE", 43); + +/** + * Address Type: Address range to embedded IPv4 ip in an IPv6 address (RFC 4291, Section 2.5.5) + * @see getAddressType() + */ +define("NET_IPV6_IPV4MAPPING", 51); + +/** + * Address Type: Unspecified (RFC 4291, Section 2.5.2) + * @see getAddressType() + */ +define("NET_IPV6_UNSPECIFIED", 52); + +/** + * Address Type: Unspecified (RFC 4291, Section 2.5.3) + * @see getAddressType() + */ +define("NET_IPV6_LOOPBACK", 53); + +/** + * Address Type: address can not assigned to a specific type + * @see getAddressType() + */ +define("NET_IPV6_UNKNOWN_TYPE", 1001); + +// }}} +// {{{ Net_IPv6 + +/** + * Class to validate and to work with IPv6 addresses. + * + * @category Net + * @package Net_IPv6 + * @author Alexander Merz + * @author + * @author Josh Peck + * @copyright 2003-2010 The PHP Group + * @license BSD License http://www.opensource.org/licenses/bsd-license.php + * @version Release: 1.1.0RC5 + * @link http://pear.php.net/package/Net_IPv6 + */ +class Net_IPv6 +{ + + // {{{ separate() + /** + * Separates an IPv6 address into the address and a prefix length part + * + * @param String $ip the (compressed) IP as Hex representation + * + * @return Array the first element is the IP, the second the prefix length + * @since 1.2.0 + * @access public + * @static + */ + function separate($ip) + { + + $addr = $ip; + $spec = ''; + + if(false === strrpos($ip, '/')) { + + return array($addr, $spec); + + } + + $elements = explode('/', $ip); + + if(2 == count($elements)) { + + $addr = $elements[0]; + $spec = $elements[1]; + + } + + return array($addr, $spec); + + } + // }}} + + // {{{ removeNetmaskSpec() + + /** + * Removes a possible existing prefix length/ netmask specification at an IP address. + * + * @param String $ip the (compressed) IP as Hex representation + * + * @return String the IP without netmask length + * @since 1.1.0 + * @access public + * @static + */ + function removeNetmaskSpec($ip) + { + + $elements = Net_IPv6::separate($ip); + + return $elements[0]; + + } + // }}} + // {{{ removePrefixLength() + + /** + * Tests for a prefix length specification in the address + * and removes the prefix length, if exists + * + * The method is technically identical to removeNetmaskSpec() and + * will be dropped in a future release. + * + * @param String $ip a valid ipv6 address + * + * @return String the address without a prefix length + * @access public + * @static + * @see removeNetmaskSpec() + * @deprecated + */ + function removePrefixLength($ip) + { + $pos = strrpos($ip, '/'); + + if (false !== $pos) { + + return substr($ip, 0, $pos); + + } + + return $ip; + } + + // }}} + // {{{ getNetmaskSpec() + + /** + * Returns a possible existing prefix length/netmask specification on an IP address. + * + * @param String $ip the (compressed) IP as Hex representation + * + * @return String the netmask spec + * @since 1.1.0 + * @access public + * @static + */ + function getNetmaskSpec($ip) + { + + $elements = Net_IPv6::separate($ip); + + return $elements[1]; + + } + + // }}} + // {{{ getPrefixLength() + + /** + * Tests for a prefix length specification in the address + * and returns the prefix length, if exists + * + * The method is technically identical to getNetmaskSpec() and + * will be dropped in a future release. + * + * @param String $ip a valid ipv6 address + * + * @return Mixed the prefix as String or false, if no prefix was found + * @access public + * @static + * @deprecated + */ + function getPrefixLength($ip) + { + if (preg_match("/^([0-9a-fA-F:]{2,39})\/(\d{1,3})*$/", + $ip, $matches)) { + + return $matches[2]; + + } else { + + return false; + + } + + } + + // }}} + // {{{ getNetmask() + + /** + * Calculates the network prefix based on the netmask bits. + * + * @param String $ip the (compressed) IP in Hex format + * @param int $bits if the number of netmask bits is not part of the IP + * you must provide the number of bits + * + * @return String the network prefix + * @since 1.1.0 + * @access public + * @static + */ + function getNetmask($ip, $bits = null) + { + if (null==$bits) { + + $elements = explode('/', $ip); + + if (2 == count($elements)) { + + $addr = $elements[0]; + $bits = $elements[1]; + + } else { + + include_once 'PEAR.inc'; + + return PEAR::raiseError(NET_IPV6_NO_NETMASK_MSG, + NET_IPV6_NO_NETMASK); + } + + } else { + + $addr = $ip; + + } + + $addr = Net_IPv6::uncompress($addr); + $binNetmask = str_repeat('1', $bits).str_repeat('0', 128 - $bits); + + return Net_IPv6::_bin2Ip(Net_IPv6::_ip2Bin($addr) & $binNetmask); + } + + // }}} + // {{{ isInNetmask() + + /** + * Checks if an (compressed) IP is in a specific address space. + * + * If the IP does not contain the number of netmask bits (F8000::FFFF/16) + * then you have to use the $bits parameter. + * + * @param String $ip the IP to check (eg. F800::FFFF) + * @param String $netmask the netmask (eg F800::) + * @param int $bits the number of netmask bits to compare, + * if not given in $ip + * + * @return boolean true if $ip is in the netmask + * @since 1.1.0 + * @access public + * @static + */ + function isInNetmask($ip, $netmask, $bits=null) + { + // try to get the bit count + + if (null == $bits) { + + $elements = explode('/', $ip); + + if (2 == count($elements)) { + + $ip = $elements[0]; + $bits = $elements[1]; + + } else if (null == $bits) { + + $elements = explode('/', $netmask); + + if (2 == count($elements)) { + + $netmask = $elements[0]; + $bits = $elements[1]; + + } + + if (null == $bits) { + + include_once 'PEAR.inc'; + return PEAR::raiseError(NET_IPV6_NO_NETMASK_MSG, + NET_IPV6_NO_NETMASK); + + } + + } + + } + + $binIp = Net_IPv6::_ip2Bin(Net_IPv6::removeNetmaskSpec($ip)); + $binNetmask = Net_IPv6::_ip2Bin(Net_IPv6::removeNetmaskSpec($netmask)); + + if (null != $bits + && "" != $bits + && 0 == strncmp($binNetmask, $binIp, $bits)) { + + return true; + + } + + return false; + } + + // }}} + // {{{ getAddressType() + + /** + * Returns the type of an IPv6 address. + * + * RFC 2373, Section 2.3 describes several types of addresses in + * the IPv6 address space. + * Several address types are markers for reserved spaces and as + * a consequence are subject to change. + * + * @param String $ip the IP address in Hex format, + * compressed IPs are allowed + * + * @return int one of the address type constants + * @access public + * @since 1.1.0 + * @static + * + * @see NET_IPV6_UNASSIGNED + * @see NET_IPV6_RESERVED + * @see NET_IPV6_RESERVED_NSAP + * @see NET_IPV6_RESERVED_IPX + * @see NET_IPV6_RESERVED_UNICAST_GEOGRAPHIC + * @see NET_IPV6_UNICAST_PROVIDER + * @see NET_IPV6_MULTICAST + * @see NET_IPV6_LOCAL_LINK + * @see NET_IPV6_LOCAL_SITE + * @see NET_IPV6_IPV4MAPPING + * @see NET_IPV6_UNSPECIFIED + * @see NET_IPV6_LOOPBACK + * @see NET_IPV6_UNKNOWN_TYPE + */ + function getAddressType($ip) + { + $ip = Net_IPv6::removeNetmaskSpec($ip); + $binip = Net_IPv6::_ip2Bin($ip); + + if(0 == strncmp(str_repeat('0', 128), $binip, 128)) { // ::/128 + + return NET_IPV6_UNSPECIFIED; + + } else if(0 == strncmp(str_repeat('0', 127).'1', $binip, 128)) { // ::/128 + + return NET_IPV6_LOOPBACK; + + } else if (0 == strncmp(str_repeat('0', 80).str_repeat('1', 16), $binip, 96)) { // ::ffff/96 + + return NET_IPV6_IPV4MAPPING; + + } else if (0 == strncmp('1111111010', $binip, 10)) { + + return NET_IPV6_LOCAL_LINK; + + } else if (0 == strncmp('1111111011', $binip, 10)) { + + return NET_IPV6_LOCAL_SITE; + + } else if (0 == strncmp('111111100', $binip, 9)) { + + return NET_IPV6_UNASSIGNED; + + } else if (0 == strncmp('11111111', $binip, 8)) { + + return NET_IPV6_MULTICAST; + + } else if (0 == strncmp('00000000', $binip, 8)) { + + return NET_IPV6_RESERVED; + + } else if (0 == strncmp('00000001', $binip, 8) + || 0 == strncmp('1111110', $binip, 7)) { + + return NET_IPV6_UNASSIGNED; + + } else if (0 == strncmp('0000001', $binip, 7)) { + + return NET_IPV6_RESERVED_NSAP; + + } else if (0 == strncmp('0000010', $binip, 7)) { + + return NET_IPV6_RESERVED_IPX; + + } else if (0 == strncmp('0000011', $binip, 7) || + 0 == strncmp('111110', $binip, 6) || + 0 == strncmp('11110', $binip, 5) || + 0 == strncmp('00001', $binip, 5) || + 0 == strncmp('1110', $binip, 4) || + 0 == strncmp('0001', $binip, 4) || + 0 == strncmp('001', $binip, 3) || + 0 == strncmp('011', $binip, 3) || + 0 == strncmp('101', $binip, 3) || + 0 == strncmp('110', $binip, 3)) { + + return NET_IPV6_UNASSIGNED; + + } else if (0 == strncmp('010', $binip, 3)) { + + return NET_IPV6_UNICAST_PROVIDER; + + } else if (0 == strncmp('100', $binip, 3)) { + + return NET_IPV6_RESERVED_UNICAST_GEOGRAPHIC; + + } + + return NET_IPV6_UNKNOWN_TYPE; + } + + // }}} + // {{{ Uncompress() + + /** + * Uncompresses an IPv6 address + * + * RFC 2373 allows you to compress zeros in an address to '::'. This + * function expects a valid IPv6 address and expands the '::' to + * the required zeros. + * + * Example: FF01::101 -> FF01:0:0:0:0:0:0:101 + * ::1 -> 0:0:0:0:0:0:0:1 + * + * Note: You can also pass an invalid IPv6 address (usually as part of the process + * of validation by checkIPv6, which will validate the return string). + * This function will insert the "0" between "::" even if this results in too many + * numbers in total. It is NOT the purpose of this function to validate your input. + * + * Example of calling with invalid input: 1::2:3:4:5:6:7:8:9 -> 1:0:2:3:4:5:6:7:8:9 + * + * @param String $ip a (possibly) valid IPv6-address (hex format) + * @param Boolean $leadingZeros if true, leading zeros are added to each + * block of the address + * (FF01::101 -> + * FF01:0000:0000:0000:0000:0000:0000:0101) + * + * @return String the uncompressed IPv6-address (hex format) + * @access public + * @see Compress() + * @static + * @author Pascal Uhlmann + */ + function uncompress($ip, $leadingZeros = false) + { + + $prefix = Net_IPv6::getPrefixLength($ip); + + if (false === $prefix) { + + $prefix = ''; + + } else { + + $ip = Net_IPv6::removePrefixLength($ip); + $prefix = '/'.$prefix; + + } + + $netmask = Net_IPv6::getNetmaskSpec($ip); + $uip = Net_IPv6::removeNetmaskSpec($ip); + + $c1 = -1; + $c2 = -1; + + if (false !== strpos($uip, '::') ) { + + list($ip1, $ip2) = explode('::', $uip); + + if ("" == $ip1) { + + $c1 = -1; + + } else { + + $pos = 0; + + if (0 < ($pos = substr_count($ip1, ':'))) { + + $c1 = $pos; + + } else { + + $c1 = 0; + + } + } + if ("" == $ip2) { + + $c2 = -1; + + } else { + + $pos = 0; + + if (0 < ($pos = substr_count($ip2, ':'))) { + + $c2 = $pos; + + } else { + + $c2 = 0; + + } + + } + + if (strstr($ip2, '.')) { + + $c2++; + + } + if (-1 == $c1 && -1 == $c2) { // :: + + $uip = "0:0:0:0:0:0:0:0"; + + } else if (-1 == $c1) { // ::xxx + + $fill = str_repeat('0:', 7-$c2); + $uip = str_replace('::', $fill, $uip); + + } else if (-1 == $c2) { // xxx:: + + $fill = str_repeat(':0', 7-$c1); + $uip = str_replace('::', $fill, $uip); + + } else { // xxx::xxx + + $fill = str_repeat(':0:', max(1, 6-$c2-$c1)); + $uip = str_replace('::', $fill, $uip); + $uip = str_replace('::', ':', $uip); + + } + } + + if(true == $leadingZeros) { + + $uipT = array(); + $uiparts = explode(':', $uip); + + foreach($uiparts as $p) { + + $uipT[] = sprintf('%04s', $p); + + } + + $uip = implode(':', $uipT); + } + + if ('' != $netmask) { + + $uip = $uip.'/'.$netmask; + + } + + return $uip.$prefix; + } + + // }}} + // {{{ Compress() + + /** + * Compresses an IPv6 address + * + * RFC 2373 allows you to compress zeros in an address to '::'. This + * function expects a valid IPv6 address and compresses successive zeros + * to '::' + * + * Example: FF01:0:0:0:0:0:0:101 -> FF01::101 + * 0:0:0:0:0:0:0:1 -> ::1 + * + * When $ip is an already compressed address and $force is false, the method returns + * the value as is, even if the address can be compressed further. + * + * Example: FF01::0:1 -> FF01::0:1 + * + * To enforce maximum compression, you can set the second argument $force to true. + * + * Example: FF01::0:1 -> FF01::1 + * + * @param String $ip a valid IPv6-address (hex format) + * @param boolean $force if true the address will be compressed as best as possible (since 1.2.0) + * + * @return String the compressed IPv6-address (hex format) + * @access public + * @see Uncompress() + * @static + * @author elfrink at introweb dot nl + */ + function compress($ip, $force = false) + { + + if(false !== strpos($ip, '::')) { // its already compressed + + if(true == $force) { + + $ip = Net_IPv6::uncompress($ip); + + } else { + + return $ip; + + } + + } + + $prefix = Net_IPv6::getPrefixLength($ip); + + if (false === $prefix) { + + $prefix = ''; + + } else { + + $ip = Net_IPv6::removePrefixLength($ip); + $prefix = '/'.$prefix; + + } + + $netmask = Net_IPv6::getNetmaskSpec($ip); + $ip = Net_IPv6::removeNetmaskSpec($ip); + + $ipp = explode(':', $ip); + + for ($i = 0; $i < count($ipp); $i++) { + + $ipp[$i] = dechex(hexdec($ipp[$i])); + + } + + $cip = ':' . join(':', $ipp) . ':'; + + preg_match_all("/(:0)(:0)+/", $cip, $zeros); + + if (count($zeros[0]) > 0) { + + $match = ''; + + foreach ($zeros[0] as $zero) { + + if (strlen($zero) > strlen($match)) { + + $match = $zero; + + } + } + + $cip = preg_replace('/' . $match . '/', ':', $cip, 1); + + } + + $cip = preg_replace('/((^:)|(:$))/', '', $cip); + $cip = preg_replace('/((^:)|(:$))/', '::', $cip); + + if ('' != $netmask) { + + $cip = $cip.'/'.$netmask; + + } + + return $cip.$prefix; + + } + + // }}} + // {{{ recommendedFormat() + /** + * Represent IPv6 address in RFC5952 format. + * + * @param String $ip a valid IPv6-address (hex format) + * + * @return String the recommended representation of IPv6-address (hex format) + * @access public + * @see compress() + * @static + * @author koyama at hoge dot org + * @todo This method may become a part of compress() in a further releases + */ + function recommendedFormat($ip) + { + $compressed = self::compress($ip, true); + // RFC5952 4.2.2 + // The symbol "::" MUST NOT be used to shorten just one + // 16-bit 0 field. + if ((substr_count($compressed, ':') == 7) && + (strpos($compressed, '::') !== false)) { + $compressed = str_replace('::', ':0:', $compressed); + } + return $compressed; + } + // }}} + + // {{{ isCompressible() + + /** + * Checks, if an IPv6 address can be compressed + * + * @param String $ip a valid IPv6 address + * + * @return Boolean true, if address can be compressed + * + * @access public + * @since 1.2.0b + * @static + * @author Manuel Schmitt + */ + function isCompressible($ip) + { + + return (bool)($ip != Net_IPv6::compress($address)); + + } + + // }}} + // {{{ SplitV64() + + /** + * Splits an IPv6 address into the IPv6 and a possible IPv4 part + * + * RFC 2373 allows you to note the last two parts of an IPv6 address as + * an IPv4 compatible address + * + * Example: 0:0:0:0:0:0:13.1.68.3 + * 0:0:0:0:0:FFFF:129.144.52.38 + * + * @param String $ip a valid IPv6-address (hex format) + * @param Boolean $uncompress if true, the address will be uncompressed + * before processing + * + * @return Array [0] contains the IPv6 part, + * [1] the IPv4 part (hex format) + * @access public + * @static + */ + function SplitV64($ip, $uncompress = true) + { + $ip = Net_IPv6::removeNetmaskSpec($ip); + + if ($uncompress) { + + $ip = Net_IPv6::Uncompress($ip); + + } + + if (strstr($ip, '.')) { + + $pos = strrpos($ip, ':'); + $ip{$pos} = '_'; + $ipPart = explode('_', $ip); + + return $ipPart; + + } else { + + return array($ip, ""); + + } + } + + // }}} + // {{{ checkIPv6() + + /** + * Checks an IPv6 address + * + * Checks if the given IP is IPv6-compatible + * + * @param String $ip a valid IPv6-address + * + * @return Boolean true if $ip is an IPv6 address + * @access public + * @static + */ + function checkIPv6($ip) + { + + $elements = Net_IPv6::separate($ip); + + $ip = $elements[0]; + + if('' != $elements[1] && ( !is_numeric($elements[1]) || 0 > $elements[1] || 128 < $elements[1])) { + + return false; + + } + + $ipPart = Net_IPv6::SplitV64($ip); + $count = 0; + + if (!empty($ipPart[0])) { + $ipv6 = explode(':', $ipPart[0]); + + foreach($ipv6 as $element) { // made a validate precheck + if(!preg_match('/[0-9a-fA-F]*/', $element)) { + return false; + } + } + + for ($i = 0; $i < count($ipv6); $i++) { + + if(4 < strlen($ipv6[$i])) { + + return false; + + } + + $dec = hexdec($ipv6[$i]); + $hex = strtoupper(preg_replace("/^[0]{1,3}(.*[0-9a-fA-F])$/", + "\\1", + $ipv6[$i])); + + if ($ipv6[$i] >= 0 && $dec <= 65535 + && $hex == strtoupper(dechex($dec))) { + + $count++; + + } + + } + + if (8 == $count) { + + return true; + + } else if (6 == $count and !empty($ipPart[1])) { + + $ipv4 = explode('.', $ipPart[1]); + $count = 0; + + for ($i = 0; $i < count($ipv4); $i++) { + + if ($ipv4[$i] >= 0 && (integer)$ipv4[$i] <= 255 + && preg_match("/^\d{1,3}$/", $ipv4[$i])) { + + $count++; + + } + + } + + if (4 == $count) { + + return true; + + } + + } else { + + return false; + + } + + } else { + + return false; + + } + + } + + // }}} + + // {{{ _parseAddress() + + /** + * Returns the lowest and highest IPv6 address + * for a given IP and netmask specification + * + * The netmask may be a part of the $ip or + * the number of netmask bits is provided via $bits + * + * The result is an indexed array. The key 'start' + * contains the lowest possible IP address. The key + * 'end' the highest address. + * + * @param String $ipToParse the IPv6 address + * @param String $bits the optional count of netmask bits + * + * @return Array ['start', 'end'] the lowest and highest IPv6 address + * @access public + * @static + * @author Nicholas Williams + */ + + function parseAddress($ipToParse, $bits = null) + { + + $ip = null; + $bitmask = null; + + if ( null == $bits ) { + + $elements = explode('/', $ipToParse); + + if ( 2 == count($elements) ) { + + $ip = Net_IPv6::uncompress($elements[0]); + $bitmask = $elements[1]; + + } else { + + include_once 'PEAR.inc'; + + return PEAR::raiseError(NET_IPV6_NO_NETMASK_MSG, + NET_IPV6_NO_NETMASK); + } + } else { + + $ip = Net_IPv6::uncompress($ipToParse); + $bitmask = $bits; + + } + + $binNetmask = str_repeat('1', $bitmask). + str_repeat('0', 128 - $bitmask); + $maxNetmask = str_repeat('1', 128); + $netmask = Net_IPv6::_bin2Ip($binNetmask); + + $startAddress = Net_IPv6::_bin2Ip(Net_IPv6::_ip2Bin($ip) + & $binNetmask); + $endAddress = Net_IPv6::_bin2Ip(Net_IPv6::_ip2Bin($ip) + | ($binNetmask ^ $maxNetmask)); + + return array('start' => $startAddress, 'end' => $endAddress); + } + + // }}} + + // {{{ _ip2Bin() + + /** + * Converts an IPv6 address from Hex into Binary representation. + * + * @param String $ip the IP to convert (a:b:c:d:e:f:g:h), + * compressed IPs are allowed + * + * @return String the binary representation + * @access private + @ @since 1.1.0 + */ + function _ip2Bin($ip) + { + $binstr = ''; + + $ip = Net_IPv6::removeNetmaskSpec($ip); + $ip = Net_IPv6::Uncompress($ip); + + $parts = explode(':', $ip); + + foreach ( $parts as $v ) { + + $str = base_convert($v, 16, 2); + $binstr .= str_pad($str, 16, '0', STR_PAD_LEFT); + + } + + return $binstr; + } + + // }}} + // {{{ _bin2Ip() + + /** + * Converts an IPv6 address from Binary into Hex representation. + * + * @param String $bin the IP address as binary + * + * @return String the uncompressed Hex representation + * @access private + @ @since 1.1.0 + */ + function _bin2Ip($bin) + { + $ip = ""; + + if (strlen($bin) < 128) { + + $bin = str_pad($bin, 128, '0', STR_PAD_LEFT); + + } + + $parts = str_split($bin, "16"); + + foreach ( $parts as $v ) { + + $str = base_convert($v, 2, 16); + $ip .= $str.":"; + + } + + $ip = substr($ip, 0, -1); + + return $ip; + } + + // }}} +} +// }}} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * c-hanging-comment-ender-p: nil + * End: + */ + +?> diff --git a/etc/inc/PEAR.inc b/etc/inc/PEAR.inc new file mode 100644 index 000000000..e7b4731b0 --- /dev/null +++ b/etc/inc/PEAR.inc @@ -0,0 +1,1103 @@ + + * @author Stig Bakken + * @author Tomas V.V.Cox + * @author Greg Beaver + * @copyright 1997-2010 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version CVS: $Id$ + * @link http://pear.php.net/package/PEAR + * @since File available since Release 0.1 + */ + +/**#@+ + * ERROR constants + */ +define('PEAR_ERROR_RETURN', 1); +define('PEAR_ERROR_PRINT', 2); +define('PEAR_ERROR_TRIGGER', 4); +define('PEAR_ERROR_DIE', 8); +define('PEAR_ERROR_CALLBACK', 16); +/** + * WARNING: obsolete + * @deprecated + */ +define('PEAR_ERROR_EXCEPTION', 32); +/**#@-*/ +define('PEAR_ZE2', (function_exists('version_compare') && + version_compare(zend_version(), "2-dev", "ge"))); + +if (substr(PHP_OS, 0, 3) == 'WIN') { + define('OS_WINDOWS', true); + define('OS_UNIX', false); + define('PEAR_OS', 'Windows'); +} else { + define('OS_WINDOWS', false); + define('OS_UNIX', true); + define('PEAR_OS', 'Unix'); // blatant assumption +} + +$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN; +$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE; +$GLOBALS['_PEAR_destructor_object_list'] = array(); +$GLOBALS['_PEAR_shutdown_funcs'] = array(); +$GLOBALS['_PEAR_error_handler_stack'] = array(); + +@ini_set('track_errors', true); + +/** + * Base class for other PEAR classes. Provides rudimentary + * emulation of destructors. + * + * If you want a destructor in your class, inherit PEAR and make a + * destructor method called _yourclassname (same name as the + * constructor, but with a "_" prefix). Also, in your constructor you + * have to call the PEAR constructor: $this->PEAR();. + * The destructor method will be called without parameters. Note that + * at in some SAPI implementations (such as Apache), any output during + * the request shutdown (in which destructors are called) seems to be + * discarded. If you need to get any debug information from your + * destructor, use error_log(), syslog() or something similar. + * + * IMPORTANT! To use the emulated destructors you need to create the + * objects by reference: $obj =& new PEAR_child; + * + * @category pear + * @package PEAR + * @author Stig Bakken + * @author Tomas V.V. Cox + * @author Greg Beaver + * @copyright 1997-2006 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/package/PEAR + * @see PEAR_Error + * @since Class available since PHP 4.0.2 + * @link http://pear.php.net/manual/en/core.pear.php#core.pear.pear + */ +class PEAR +{ + /** + * Whether to enable internal debug messages. + * + * @var bool + * @access private + */ + var $_debug = false; + + /** + * Default error mode for this object. + * + * @var int + * @access private + */ + var $_default_error_mode = null; + + /** + * Default error options used for this object when error mode + * is PEAR_ERROR_TRIGGER. + * + * @var int + * @access private + */ + var $_default_error_options = null; + + /** + * Default error handler (callback) for this object, if error mode is + * PEAR_ERROR_CALLBACK. + * + * @var string + * @access private + */ + var $_default_error_handler = ''; + + /** + * Which class to use for error objects. + * + * @var string + * @access private + */ + var $_error_class = 'PEAR_Error'; + + /** + * An array of expected errors. + * + * @var array + * @access private + */ + var $_expected_errors = array(); + + /** + * Constructor. Registers this object in + * $_PEAR_destructor_object_list for destructor emulation if a + * destructor object exists. + * + * @param string $error_class (optional) which class to use for + * error objects, defaults to PEAR_Error. + * @access public + * @return void + */ + function PEAR($error_class = null) + { + $classname = strtolower(get_class($this)); + if ($this->_debug) { + print "PEAR constructor called, class=$classname\n"; + } + + if ($error_class !== null) { + $this->_error_class = $error_class; + } + + while ($classname && strcasecmp($classname, "pear")) { + $destructor = "_$classname"; + if (method_exists($this, $destructor)) { + global $_PEAR_destructor_object_list; + $_PEAR_destructor_object_list[] = &$this; + if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { + register_shutdown_function("_PEAR_call_destructors"); + $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; + } + break; + } else { + $classname = get_parent_class($classname); + } + } + } + + /** + * Destructor (the emulated type of...). Does nothing right now, + * but is included for forward compatibility, so subclass + * destructors should always call it. + * + * See the note in the class desciption about output from + * destructors. + * + * @access public + * @return void + */ + function _PEAR() { + if ($this->_debug) { + printf("PEAR destructor called, class=%s\n", strtolower(get_class($this))); + } + } + + /** + * If you have a class that's mostly/entirely static, and you need static + * properties, you can use this method to simulate them. Eg. in your method(s) + * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar'); + * You MUST use a reference, or they will not persist! + * + * @access public + * @param string $class The calling classname, to prevent clashes + * @param string $var The variable to retrieve. + * @return mixed A reference to the variable. If not set it will be + * auto initialised to NULL. + */ + function &getStaticProperty($class, $var) + { + static $properties; + if (!isset($properties[$class])) { + $properties[$class] = array(); + } + + if (!array_key_exists($var, $properties[$class])) { + $properties[$class][$var] = null; + } + + return $properties[$class][$var]; + } + + /** + * Use this function to register a shutdown method for static + * classes. + * + * @access public + * @param mixed $func The function name (or array of class/method) to call + * @param mixed $args The arguments to pass to the function + * @return void + */ + function registerShutdownFunc($func, $args = array()) + { + // if we are called statically, there is a potential + // that no shutdown func is registered. Bug #6445 + if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { + register_shutdown_function("_PEAR_call_destructors"); + $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; + } + $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args); + } + + /** + * Tell whether a value is a PEAR error. + * + * @param mixed $data the value to test + * @param int $code if $data is an error object, return true + * only if $code is a string and + * $obj->getMessage() == $code or + * $code is an integer and $obj->getCode() == $code + * @access public + * @return bool true if parameter is an error + */ + function isError($data, $code = null) + { + if (!is_object($data)) { + return false; + } + if (!is_a($data, 'PEAR_Error')) { + return false; + } + + if (is_null($code)) { + return true; + } elseif (is_string($code)) { + return $data->getMessage() == $code; + } + + return $data->getCode() == $code; + } + + /** + * Sets how errors generated by this object should be handled. + * Can be invoked both in objects and statically. If called + * statically, setErrorHandling sets the default behaviour for all + * PEAR objects. If called in an object, setErrorHandling sets + * the default behaviour for that object. + * + * @param int $mode + * One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION. + * + * @param mixed $options + * When $mode is PEAR_ERROR_TRIGGER, this is the error level (one + * of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * + * When $mode is PEAR_ERROR_CALLBACK, this parameter is expected + * to be the callback function or method. A callback + * function is a string with the name of the function, a + * callback method is an array of two elements: the element + * at index 0 is the object, and the element at index 1 is + * the name of the method to call in the object. + * + * When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is + * a printf format string used when printing the error + * message. + * + * @access public + * @return void + * @see PEAR_ERROR_RETURN + * @see PEAR_ERROR_PRINT + * @see PEAR_ERROR_TRIGGER + * @see PEAR_ERROR_DIE + * @see PEAR_ERROR_CALLBACK + * @see PEAR_ERROR_EXCEPTION + * + * @since PHP 4.0.5 + */ + function setErrorHandling($mode = null, $options = null) + { + if (isset($this) && is_a($this, 'PEAR')) { + $setmode = &$this->_default_error_mode; + $setoptions = &$this->_default_error_options; + } else { + $setmode = &$GLOBALS['_PEAR_default_error_mode']; + $setoptions = &$GLOBALS['_PEAR_default_error_options']; + } + + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $setmode = $mode; + $setoptions = $options; + break; + + case PEAR_ERROR_CALLBACK: + $setmode = $mode; + // class/object method callback + if (is_callable($options)) { + $setoptions = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + } + + /** + * This method is used to tell which errors you expect to get. + * Expected errors are always returned with error mode + * PEAR_ERROR_RETURN. Expected error codes are stored in a stack, + * and this method pushes a new element onto it. The list of + * expected errors are in effect until they are popped off the + * stack with the popExpect() method. + * + * Note that this method can not be called statically + * + * @param mixed $code a single error code or an array of error codes to expect + * + * @return int the new depth of the "expected errors" stack + * @access public + */ + function expectError($code = '*') + { + if (is_array($code)) { + array_push($this->_expected_errors, $code); + } else { + array_push($this->_expected_errors, array($code)); + } + return count($this->_expected_errors); + } + + /** + * This method pops one element off the expected error codes + * stack. + * + * @return array the list of error codes that were popped + */ + function popExpect() + { + return array_pop($this->_expected_errors); + } + + /** + * This method checks unsets an error code if available + * + * @param mixed error code + * @return bool true if the error code was unset, false otherwise + * @access private + * @since PHP 4.3.0 + */ + function _checkDelExpect($error_code) + { + $deleted = false; + foreach ($this->_expected_errors as $key => $error_array) { + if (in_array($error_code, $error_array)) { + unset($this->_expected_errors[$key][array_search($error_code, $error_array)]); + $deleted = true; + } + + // clean up empty arrays + if (0 == count($this->_expected_errors[$key])) { + unset($this->_expected_errors[$key]); + } + } + + return $deleted; + } + + /** + * This method deletes all occurences of the specified element from + * the expected error codes stack. + * + * @param mixed $error_code error code that should be deleted + * @return mixed list of error codes that were deleted or error + * @access public + * @since PHP 4.3.0 + */ + function delExpect($error_code) + { + $deleted = false; + if ((is_array($error_code) && (0 != count($error_code)))) { + // $error_code is a non-empty array here; we walk through it trying + // to unset all values + foreach ($error_code as $key => $error) { + $deleted = $this->_checkDelExpect($error) ? true : false; + } + + return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } elseif (!empty($error_code)) { + // $error_code comes alone, trying to unset it + if ($this->_checkDelExpect($error_code)) { + return true; + } + + return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } + + // $error_code is empty + return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME + } + + /** + * This method is a wrapper that returns an instance of the + * configured error class with this object's default error + * handling applied. If the $mode and $options parameters are not + * specified, the object's defaults are used. + * + * @param mixed $message a text error message or a PEAR error object + * + * @param int $code a numeric error code (it is up to your class + * to define these if you want to use codes) + * + * @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION. + * + * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter + * specifies the PHP-internal error level (one of + * E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * If $mode is PEAR_ERROR_CALLBACK, this + * parameter specifies the callback function or + * method. In other error modes this parameter + * is ignored. + * + * @param string $userinfo If you need to pass along for example debug + * information, this parameter is meant for that. + * + * @param string $error_class The returned error object will be + * instantiated from this class, if specified. + * + * @param bool $skipmsg If true, raiseError will only pass error codes, + * the error message parameter will be dropped. + * + * @access public + * @return object a PEAR error object + * @see PEAR::setErrorHandling + * @since PHP 4.0.5 + */ + function &raiseError($message = null, + $code = null, + $mode = null, + $options = null, + $userinfo = null, + $error_class = null, + $skipmsg = false) + { + // The error is yet a PEAR error object + if (is_object($message)) { + $code = $message->getCode(); + $userinfo = $message->getUserInfo(); + $error_class = $message->getType(); + $message->error_message_prefix = ''; + $message = $message->getMessage(); + + // Make sure right data gets passed. + $r = new ReflectionClass($error_class); + $c = $r->getConstructor(); + $p = array_shift($c->getParameters()); + $skipmsg = ($p->getName() != 'message'); + } + + if ( + isset($this) && + isset($this->_expected_errors) && + count($this->_expected_errors) > 0 && + count($exp = end($this->_expected_errors)) + ) { + if ($exp[0] == "*" || + (is_int(reset($exp)) && in_array($code, $exp)) || + (is_string(reset($exp)) && in_array($message, $exp)) + ) { + $mode = PEAR_ERROR_RETURN; + } + } + + // No mode given, try global ones + if ($mode === null) { + // Class error handler + if (isset($this) && isset($this->_default_error_mode)) { + $mode = $this->_default_error_mode; + $options = $this->_default_error_options; + // Global error handler + } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) { + $mode = $GLOBALS['_PEAR_default_error_mode']; + $options = $GLOBALS['_PEAR_default_error_options']; + } + } + + if ($error_class !== null) { + $ec = $error_class; + } elseif (isset($this) && isset($this->_error_class)) { + $ec = $this->_error_class; + } else { + $ec = 'PEAR_Error'; + } + + if (intval(PHP_VERSION) < 5) { + // little non-eval hack to fix bug #12147 + include 'PEAR/FixPHP5PEARWarnings.php'; + return $a; + } + + if ($skipmsg) { + $a = new $ec($code, $mode, $options, $userinfo); + } else { + $a = new $ec($message, $code, $mode, $options, $userinfo); + } + + return $a; + } + + /** + * Simpler form of raiseError with fewer options. In most cases + * message, code and userinfo are enough. + * + * @param mixed $message a text error message or a PEAR error object + * + * @param int $code a numeric error code (it is up to your class + * to define these if you want to use codes) + * + * @param string $userinfo If you need to pass along for example debug + * information, this parameter is meant for that. + * + * @access public + * @return object a PEAR error object + * @see PEAR::raiseError + */ + function &throwError($message = null, $code = null, $userinfo = null) + { + if (isset($this) && is_a($this, 'PEAR')) { + $a = &$this->raiseError($message, $code, null, null, $userinfo); + return $a; + } + + $a = &PEAR::raiseError($message, $code, null, null, $userinfo); + return $a; + } + + function staticPushErrorHandling($mode, $options = null) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + $def_mode = &$GLOBALS['_PEAR_default_error_mode']; + $def_options = &$GLOBALS['_PEAR_default_error_options']; + $stack[] = array($def_mode, $def_options); + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $def_mode = $mode; + $def_options = $options; + break; + + case PEAR_ERROR_CALLBACK: + $def_mode = $mode; + // class/object method callback + if (is_callable($options)) { + $def_options = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + $stack[] = array($mode, $options); + return true; + } + + function staticPopErrorHandling() + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + $setmode = &$GLOBALS['_PEAR_default_error_mode']; + $setoptions = &$GLOBALS['_PEAR_default_error_options']; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $setmode = $mode; + $setoptions = $options; + break; + + case PEAR_ERROR_CALLBACK: + $setmode = $mode; + // class/object method callback + if (is_callable($options)) { + $setoptions = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + return true; + } + + /** + * Push a new error handler on top of the error handler options stack. With this + * you can easily override the actual error handler for some code and restore + * it later with popErrorHandling. + * + * @param mixed $mode (same as setErrorHandling) + * @param mixed $options (same as setErrorHandling) + * + * @return bool Always true + * + * @see PEAR::setErrorHandling + */ + function pushErrorHandling($mode, $options = null) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + if (isset($this) && is_a($this, 'PEAR')) { + $def_mode = &$this->_default_error_mode; + $def_options = &$this->_default_error_options; + } else { + $def_mode = &$GLOBALS['_PEAR_default_error_mode']; + $def_options = &$GLOBALS['_PEAR_default_error_options']; + } + $stack[] = array($def_mode, $def_options); + + if (isset($this) && is_a($this, 'PEAR')) { + $this->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + $stack[] = array($mode, $options); + return true; + } + + /** + * Pop the last error handler used + * + * @return bool Always true + * + * @see PEAR::pushErrorHandling + */ + function popErrorHandling() + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + if (isset($this) && is_a($this, 'PEAR')) { + $this->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + return true; + } + + /** + * OS independant PHP extension load. Remember to take care + * on the correct extension name for case sensitive OSes. + * + * @param string $ext The extension name + * @return bool Success or not on the dl() call + */ + function loadExtension($ext) + { + if (extension_loaded($ext)) { + return true; + } + + // if either returns true dl() will produce a FATAL error, stop that + if ( + function_exists('dl') === false || + ini_get('enable_dl') != 1 || + ini_get('safe_mode') == 1 + ) { + return false; + } + + if (OS_WINDOWS) { + $suffix = '.dll'; + } elseif (PHP_OS == 'HP-UX') { + $suffix = '.sl'; + } elseif (PHP_OS == 'AIX') { + $suffix = '.a'; + } elseif (PHP_OS == 'OSX') { + $suffix = '.bundle'; + } else { + $suffix = '.so'; + } + + return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); + } +} + +if (PEAR_ZE2) { + /** + * This is only meant for PHP 5 to get rid of certain strict warning + * that doesn't get hidden since it's in the shutdown function + */ + class PEAR5 + { + /** + * If you have a class that's mostly/entirely static, and you need static + * properties, you can use this method to simulate them. Eg. in your method(s) + * do this: $myVar = &PEAR5::getStaticProperty('myclass', 'myVar'); + * You MUST use a reference, or they will not persist! + * + * @access public + * @param string $class The calling classname, to prevent clashes + * @param string $var The variable to retrieve. + * @return mixed A reference to the variable. If not set it will be + * auto initialised to NULL. + */ + static function &getStaticProperty($class, $var) + { + static $properties; + if (!isset($properties[$class])) { + $properties[$class] = array(); + } + + if (!array_key_exists($var, $properties[$class])) { + $properties[$class][$var] = null; + } + + return $properties[$class][$var]; + } + } +} + +function _PEAR_call_destructors() +{ + global $_PEAR_destructor_object_list; + if (is_array($_PEAR_destructor_object_list) && + sizeof($_PEAR_destructor_object_list)) + { + reset($_PEAR_destructor_object_list); + if (PEAR_ZE2) { + $destructLifoExists = PEAR5::getStaticProperty('PEAR', 'destructlifo'); + } else { + $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo'); + } + + if ($destructLifoExists) { + $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list); + } + + while (list($k, $objref) = each($_PEAR_destructor_object_list)) { + $classname = get_class($objref); + while ($classname) { + $destructor = "_$classname"; + if (method_exists($objref, $destructor)) { + $objref->$destructor(); + break; + } else { + $classname = get_parent_class($classname); + } + } + } + // Empty the object list to ensure that destructors are + // not called more than once. + $_PEAR_destructor_object_list = array(); + } + + // Now call the shutdown functions + if ( + isset($GLOBALS['_PEAR_shutdown_funcs']) && + is_array($GLOBALS['_PEAR_shutdown_funcs']) && + !empty($GLOBALS['_PEAR_shutdown_funcs']) + ) { + foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) { + call_user_func_array($value[0], $value[1]); + } + } +} + +/** + * Standard PEAR error class for PHP 4 + * + * This class is supserseded by {@link PEAR_Exception} in PHP 5 + * + * @category pear + * @package PEAR + * @author Stig Bakken + * @author Tomas V.V. Cox + * @author Gregory Beaver + * @copyright 1997-2006 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/manual/en/core.pear.pear-error.php + * @see PEAR::raiseError(), PEAR::throwError() + * @since Class available since PHP 4.0.2 + */ +class PEAR_Error +{ + var $error_message_prefix = ''; + var $mode = PEAR_ERROR_RETURN; + var $level = E_USER_NOTICE; + var $code = -1; + var $message = ''; + var $userinfo = ''; + var $backtrace = null; + + /** + * PEAR_Error constructor + * + * @param string $message message + * + * @param int $code (optional) error code + * + * @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN, + * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION + * + * @param mixed $options (optional) error level, _OR_ in the case of + * PEAR_ERROR_CALLBACK, the callback function or object/method + * tuple. + * + * @param string $userinfo (optional) additional user/debug info + * + * @access public + * + */ + function PEAR_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + if ($mode === null) { + $mode = PEAR_ERROR_RETURN; + } + $this->message = $message; + $this->code = $code; + $this->mode = $mode; + $this->userinfo = $userinfo; + + if (PEAR_ZE2) { + $skiptrace = PEAR5::getStaticProperty('PEAR_Error', 'skiptrace'); + } else { + $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace'); + } + + if (!$skiptrace) { + $this->backtrace = debug_backtrace(); + if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) { + unset($this->backtrace[0]['object']); + } + } + + if ($mode & PEAR_ERROR_CALLBACK) { + $this->level = E_USER_NOTICE; + $this->callback = $options; + } else { + if ($options === null) { + $options = E_USER_NOTICE; + } + + $this->level = $options; + $this->callback = null; + } + + if ($this->mode & PEAR_ERROR_PRINT) { + if (is_null($options) || is_int($options)) { + $format = "%s"; + } else { + $format = $options; + } + + printf($format, $this->getMessage()); + } + + if ($this->mode & PEAR_ERROR_TRIGGER) { + trigger_error($this->getMessage(), $this->level); + } + + if ($this->mode & PEAR_ERROR_DIE) { + $msg = $this->getMessage(); + if (is_null($options) || is_int($options)) { + $format = "%s"; + if (substr($msg, -1) != "\n") { + $msg .= "\n"; + } + } else { + $format = $options; + } + die(sprintf($format, $msg)); + } + + if ($this->mode & PEAR_ERROR_CALLBACK && is_callable($this->callback)) { + call_user_func($this->callback, $this); + } + + if ($this->mode & PEAR_ERROR_EXCEPTION) { + trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING); + eval('$e = new Exception($this->message, $this->code);throw($e);'); + } + } + + /** + * Get the error mode from an error object. + * + * @return int error mode + * @access public + */ + function getMode() + { + return $this->mode; + } + + /** + * Get the callback function/method from an error object. + * + * @return mixed callback function or object/method array + * @access public + */ + function getCallback() + { + return $this->callback; + } + + /** + * Get the error message from an error object. + * + * @return string full error message + * @access public + */ + function getMessage() + { + return ($this->error_message_prefix . $this->message); + } + + /** + * Get error code from an error object + * + * @return int error code + * @access public + */ + function getCode() + { + return $this->code; + } + + /** + * Get the name of this error/exception. + * + * @return string error/exception name (type) + * @access public + */ + function getType() + { + return get_class($this); + } + + /** + * Get additional user-supplied information. + * + * @return string user-supplied information + * @access public + */ + function getUserInfo() + { + return $this->userinfo; + } + + /** + * Get additional debug information supplied by the application. + * + * @return string debug information + * @access public + */ + function getDebugInfo() + { + return $this->getUserInfo(); + } + + /** + * Get the call backtrace from where the error was generated. + * Supported with PHP 4.3.0 or newer. + * + * @param int $frame (optional) what frame to fetch + * @return array Backtrace, or NULL if not available. + * @access public + */ + function getBacktrace($frame = null) + { + if (defined('PEAR_IGNORE_BACKTRACE')) { + return null; + } + if ($frame === null) { + return $this->backtrace; + } + return $this->backtrace[$frame]; + } + + function addUserInfo($info) + { + if (empty($this->userinfo)) { + $this->userinfo = $info; + } else { + $this->userinfo .= " ** $info"; + } + } + + function __toString() + { + return $this->getMessage(); + } + + /** + * Make a string representation of this object. + * + * @return string a string with an object summary + * @access public + */ + function toString() + { + $modes = array(); + $levels = array(E_USER_NOTICE => 'notice', + E_USER_WARNING => 'warning', + E_USER_ERROR => 'error'); + if ($this->mode & PEAR_ERROR_CALLBACK) { + if (is_array($this->callback)) { + $callback = (is_object($this->callback[0]) ? + strtolower(get_class($this->callback[0])) : + $this->callback[0]) . '::' . + $this->callback[1]; + } else { + $callback = $this->callback; + } + return sprintf('[%s: message="%s" code=%d mode=callback '. + 'callback=%s prefix="%s" info="%s"]', + strtolower(get_class($this)), $this->message, $this->code, + $callback, $this->error_message_prefix, + $this->userinfo); + } + if ($this->mode & PEAR_ERROR_PRINT) { + $modes[] = 'print'; + } + if ($this->mode & PEAR_ERROR_TRIGGER) { + $modes[] = 'trigger'; + } + if ($this->mode & PEAR_ERROR_DIE) { + $modes[] = 'die'; + } + if ($this->mode & PEAR_ERROR_RETURN) { + $modes[] = 'return'; + } + return sprintf('[%s: message="%s" code=%d mode=%s level=%s '. + 'prefix="%s" info="%s"]', + strtolower(get_class($this)), $this->message, $this->code, + implode("|", $modes), $levels[$this->level], + $this->error_message_prefix, + $this->userinfo); + } +} + +/* + * Local Variables: + * mode: php + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/etc/inc/array_intersect_key.inc b/etc/inc/array_intersect_key.inc new file mode 100644 index 000000000..c1416ad1c --- /dev/null +++ b/etc/inc/array_intersect_key.inc @@ -0,0 +1,67 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id$ + + +/** + * Replace array_intersect_key() + * + * @category PHP + * @package PHP_Compat + * @link http://php.net/function.array_intersect_key + * @author Tom Buskens + * @version $Revision$ + * @since PHP 5.0.2 + * @require PHP 4.0.0 (user_error) + */ +if (!function_exists('array_intersect_key')) { + function array_intersect_key() + { + $args = func_get_args(); + if (count($args) < 2) { + user_error(gettext('Wrong parameter count for array_intersect_key()'), E_USER_WARNING); + return; + } + + // Check arrays + $array_count = count($args); + for ($i = 0; $i !== $array_count; $i++) { + if (!is_array($args[$i])) { + user_error(gettext('array_intersect_key() Argument #') . + ($i + 1) . gettext(' is not an array'), E_USER_WARNING); + return; + } + } + + // Compare entries + $result = array(); + foreach ($args[0] as $key1 => $value1) { + for ($i = 1; $i !== $array_count; $i++) { + foreach ($args[$i] as $key2 => $value2) { + if ((string) $key1 === (string) $key2) { + $result[$key1] = $value1; + } + } + } + } + + return $result; + } +} + +?> diff --git a/etc/inc/auth.inc b/etc/inc/auth.inc new file mode 100644 index 000000000..fb045809a --- /dev/null +++ b/etc/inc/auth.inc @@ -0,0 +1,1474 @@ + + All rights reserved. + + Copyright (C) 2005-2006 Bill Marquette + All rights reserved. + + Copyright (C) 2006 Paul Taylor . + All rights reserved. + + Copyright (C) 2003-2006 Manuel Kasper . + 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. + + DISABLE_PHP_LINT_CHECKING + pfSense_BUILDER_BINARIES: /usr/sbin/pw /bin/cp + pfSense_MODULE: auth +*/ + +/* + * NOTE : Portions of the mschapv2 support was based on the BSD licensed CHAP.php + * file courtesy of Michael Retterklieber. + */ +if(!$do_not_include_config_gui_inc) + require_once("config.gui.inc"); + +// Will be changed to false if security checks fail +$security_passed = true; + +/* If this function doesn't exist, we're being called from Captive Portal or + another internal subsystem which does not include authgui.inc */ +if (function_exists("display_error_form") && !isset($config['system']['webgui']['nodnsrebindcheck'])) { + /* DNS ReBinding attack prevention. https://redmine.pfsense.org/issues/708 */ + $found_host = false; + + /* Either a IPv6 address with or without a alternate port */ + if(strstr($_SERVER['HTTP_HOST'], "]")) { + $http_host_port = explode("]", $_SERVER['HTTP_HOST']); + /* v6 address has more parts, drop the last part */ + if(count($http_host_port) > 1) { + array_pop($http_host_port); + $http_host = str_replace(array("[", "]"), "", implode(":", $http_host_port)); + } else { + $http_host = str_replace(array("[", "]"), "", implode(":", $http_host_port)); + } + } else { + $http_host = explode(":", $_SERVER['HTTP_HOST']); + $http_host = $http_host[0]; + } + if(is_ipaddr($http_host) or $_SERVER['SERVER_ADDR'] == "127.0.0.1" or + strcasecmp($http_host, "localhost") == 0 or $_SERVER['SERVER_ADDR'] == "::1") + $found_host = true; + if(strcasecmp($http_host, $config['system']['hostname'] . "." . $config['system']['domain']) == 0 or + strcasecmp($http_host, $config['system']['hostname']) == 0) + $found_host = true; + + if(is_array($config['dyndnses']['dyndns']) && !$found_host) + foreach($config['dyndnses']['dyndns'] as $dyndns) + if(strcasecmp($dyndns['host'], $http_host) == 0) { + $found_host = true; + break; + } + + if(is_array($config['dnsupdates']['dnsupdate']) && !$found_host) + foreach($config['dnsupdates']['dnsupdate'] as $rfc2136) + if(strcasecmp($rfc2136['host'], $http_host) == 0) { + $found_host = true; + break; + } + + if(!empty($config['system']['webgui']['althostnames']) && !$found_host) { + $althosts = explode(" ", $config['system']['webgui']['althostnames']); + foreach ($althosts as $ah) + if(strcasecmp($ah, $http_host) == 0 or strcasecmp($ah, $_SERVER['SERVER_ADDR']) == 0) { + $found_host = true; + break; + } + } + + if($found_host == false) { + if(!security_checks_disabled()) { + display_error_form("501", gettext("Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/DNS_rebinding
Try accessing the router by IP address instead of by hostname.")); + exit; + } + $security_passed = false; + } +} + +// If the HTTP_REFERER is something other than ourselves then disallow. +if(function_exists("display_error_form") && !isset($config['system']['webgui']['nohttpreferercheck'])) { + if($_SERVER['HTTP_REFERER']) { + if(file_exists("{$g['tmp_path']}/setupwizard_lastreferrer")) { + if($_SERVER['HTTP_REFERER'] == file_get_contents("{$g['tmp_path']}/setupwizard_lastreferrer")) { + unlink("{$g['tmp_path']}/setupwizard_lastreferrer"); + header("Refresh: 1; url=index.php"); + echo ""; + echo "" . gettext("Redirecting...") . "" . gettext("Redirecting to the dashboard...") . ""; + exit; + } + } + $found_host = false; + $referrer_host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST); + $referrer_host = str_replace(array("[", "]"), "", $referrer_host); + if($referrer_host) { + if(strcasecmp($referrer_host, $config['system']['hostname'] . "." . $config['system']['domain']) == 0 + || strcasecmp($referrer_host, $config['system']['hostname']) == 0) + $found_host = true; + + if(!empty($config['system']['webgui']['althostnames']) && !$found_host) { + $althosts = explode(" ", $config['system']['webgui']['althostnames']); + foreach ($althosts as $ah) { + if(strcasecmp($referrer_host, $ah) == 0) { + $found_host = true; + break; + } + } + } + + if(is_array($config['dyndnses']['dyndns']) && !$found_host) + foreach($config['dyndnses']['dyndns'] as $dyndns) + if(strcasecmp($dyndns['host'], $referrer_host) == 0) { + $found_host = true; + break; + } + + if(is_array($config['dnsupdates']['dnsupdate']) && !$found_host) + foreach($config['dnsupdates']['dnsupdate'] as $rfc2136) + if(strcasecmp($rfc2136['host'], $referrer_host) == 0) { + $found_host = true; + break; + } + + if(!$found_host) { + $interface_list_ips = get_configured_ip_addresses(); + foreach($interface_list_ips as $ilips) { + if(strcasecmp($referrer_host, $ilips) == 0) { + $found_host = true; + break; + } + } + $interface_list_ipv6s = get_configured_ipv6_addresses(); + foreach($interface_list_ipv6s as $ilipv6s) { + if(strcasecmp($referrer_host, $ilipv6s) == 0) { + $found_host = true; + break; + } + } + if($referrer_host == "127.0.0.1" || $referrer_host == "localhost") { + // allow SSH port forwarded connections and links from localhost + $found_host = true; + } + } + } + if($found_host == false) { + if(!security_checks_disabled()) { + display_error_form("501", "An HTTP_REFERER was detected other than what is defined in System -> Advanced (" . htmlspecialchars($_SERVER['HTTP_REFERER']) . "). You can disable this check if needed in System -> Advanced -> Admin."); + exit; + } + $security_passed = false; + } + } else + $security_passed = false; +} + +if (function_exists("display_error_form") && $security_passed) + /* Security checks passed, so it should be OK to turn them back on */ + restore_security_checks(); +unset($security_passed); + +$groupindex = index_groups(); +$userindex = index_users(); + +function index_groups() { + global $g, $debug, $config, $groupindex; + + $groupindex = array(); + + if (is_array($config['system']['group'])) { + $i = 0; + foreach($config['system']['group'] as $groupent) { + $groupindex[$groupent['name']] = $i; + $i++; + } + } + + return ($groupindex); +} + +function index_users() { + global $g, $debug, $config; + + if (is_array($config['system']['user'])) { + $i = 0; + foreach($config['system']['user'] as $userent) { + $userindex[$userent['name']] = $i; + $i++; + } + } + + return ($userindex); +} + +function & getUserEntry($name) { + global $debug, $config, $userindex; + if (isset($userindex[$name])) + return $config['system']['user'][$userindex[$name]]; +} + +function & getUserEntryByUID($uid) { + global $debug, $config; + + if (is_array($config['system']['user'])) + foreach ($config['system']['user'] as & $user) + if ($user['uid'] == $uid) + return $user; + + return false; +} + +function & getGroupEntry($name) { + global $debug, $config, $groupindex; + if (isset($groupindex[$name])) + return $config['system']['group'][$groupindex[$name]]; +} + +function & getGroupEntryByGID($gid) { + global $debug, $config; + + if (is_array($config['system']['group'])) + foreach ($config['system']['group'] as & $group) + if ($group['gid'] == $gid) + return $group; + + return false; +} + +function get_user_privileges(& $user) { + + $privs = $user['priv']; + if (!is_array($privs)) + $privs = array(); + + $names = local_user_get_groups($user, true); + + foreach ($names as $name) { + $group = getGroupEntry($name); + if (is_array($group['priv'])) + $privs = array_merge( $privs, $group['priv']); + } + + return $privs; +} + +function userHasPrivilege($userent, $privid = false) { + + if (!$privid || !is_array($userent)) + return false; + + $privs = get_user_privileges($userent); + + if (!is_array($privs)) + return false; + + if (!in_array($privid, $privs)) + return false; + + return true; +} + +function local_backed($username, $passwd) { + + $user = getUserEntry($username); + if (!$user) + return false; + + if (is_account_disabled($username) || is_account_expired($username)) + return false; + + if ($user['password']) + { + $passwd = crypt($passwd, $user['password']); + if ($passwd == $user['password']) + return true; + } + + if ($user['md5-hash']) + { + $passwd = md5($passwd); + if ($passwd == $user['md5-hash']) + return true; + } + + return false; +} + +function local_sync_accounts() { + global $debug, $config; + conf_mount_rw(); + + /* remove local users to avoid uid conflicts */ + $fd = popen("/usr/sbin/pw usershow -a", "r"); + if ($fd) { + while (!feof($fd)) { + $line = explode(":",fgets($fd)); + if (((!strncmp($line[0], "_", 1)) || ($line[2] < 2000) || ($line[2] > 65000)) && ($line[0] != "admin")) + continue; + /* + * If a crontab was created to user, pw userdel will be interactive and + * can cause issues. Just remove crontab before run it when necessary + */ + unlink_if_exists("/var/cron/tabs/{$line[0]}"); + $cmd = "/usr/sbin/pw userdel -n '{$line[0]}'"; + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + mwexec($cmd); + } + pclose($fd); + } + + /* remove local groups to avoid gid conflicts */ + $gids = array(); + $fd = popen("/usr/sbin/pw groupshow -a", "r"); + if ($fd) { + while (!feof($fd)) { + $line = explode(":",fgets($fd)); + if (!strncmp($line[0], "_", 1)) + continue; + if ($line[2] < 2000) + continue; + if ($line[2] > 65000) + continue; + $cmd = "/usr/sbin/pw groupdel {$line[2]}"; + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + mwexec($cmd); + } + pclose($fd); + } + + /* make sure the all group exists */ + $allgrp = getGroupEntryByGID(1998); + local_group_set($allgrp, true); + + /* sync all local users */ + if (is_array($config['system']['user'])) + foreach ($config['system']['user'] as $user) + local_user_set($user); + + /* sync all local groups */ + if (is_array($config['system']['group'])) + foreach ($config['system']['group'] as $group) + local_group_set($group); + + conf_mount_ro(); + +} + +function local_user_set(& $user) { + global $g, $debug; + + if (empty($user['password'])) { + log_error("There is something wrong in your config because user {$user['name']} password is missing!"); + return; + } + + conf_mount_rw(); + + $home_base = "/home/"; + $user_uid = $user['uid']; + $user_name = $user['name']; + $user_home = "{$home_base}{$user_name}"; + $user_shell = "/etc/rc.initial"; + $user_group = "nobody"; + + // Ensure $home_base exists and is writable + if (!is_dir($home_base)) + mkdir($home_base, 0755); + + $lock_account = false; + /* configure shell type */ + /* Cases here should be ordered by most privileged to least privileged. */ + if (userHasPrivilege($user, "user-shell-access") || userHasPrivilege($user, "page-all")) { + $user_shell = "/bin/tcsh"; + } elseif (userHasPrivilege($user, "user-copy-files")) { + $user_shell = "/usr/local/bin/scponly"; + } elseif (userHasPrivilege($user, "user-ssh-tunnel")) { + $user_shell = "/usr/local/sbin/ssh_tunnel_shell"; + } elseif (userHasPrivilege($user, "user-ipsec-xauth-dialin")) { + $user_shell = "/sbin/nologin"; + } else { + $user_shell = "/sbin/nologin"; + $lock_account = true; + } + + /* Lock out disabled or expired users, unless it's root/admin. */ + if ((is_account_disabled($user_name) || is_account_expired($user_name)) && ($user_uid != 0)) { + $user_shell = "/sbin/nologin"; + $lock_account = true; + } + + /* root user special handling */ + if ($user_uid == 0) { + $cmd = "/usr/sbin/pw usermod -q -n root -s /bin/sh -H 0"; + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + $fd = popen($cmd, "w"); + fwrite($fd, $user['password']); + pclose($fd); + $user_group = "wheel"; + $user_home = "/root"; + $user_shell = "/etc/rc.initial"; + } + + /* read from pw db */ + $fd = popen("/usr/sbin/pw usershow -n {$user_name} 2>&1", "r"); + $pwread = fgets($fd); + pclose($fd); + $userattrs = explode(":", trim($pwread)); + + /* determine add or mod */ + if (($userattrs[0] != $user['name']) || (!strncmp($pwread, "pw:", 3))) { + $user_op = "useradd -m -k /etc/skel -o"; + } else { + $user_op = "usermod"; + } + + $comment = str_replace(array(":", "!", "@"), " ", $user['descr']); + /* add or mod pw db */ + $cmd = "/usr/sbin/pw {$user_op} -q -u {$user_uid} -n {$user_name}". + " -g {$user_group} -s {$user_shell} -d {$user_home}". + " -c ".escapeshellarg($comment)." -H 0 2>&1"; + + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + $fd = popen($cmd, "w"); + fwrite($fd, $user['password']); + pclose($fd); + + /* create user directory if required */ + if (!is_dir($user_home)) { + mkdir($user_home, 0700); + mwexec("/bin/cp /root/.* {$home_base}/", true); + } + @chown($user_home, $user_name); + @chgrp($user_home, $user_group); + + /* write out ssh authorized key file */ + if($user['authorizedkeys']) { + if (!is_dir("{$user_home}/.ssh")) { + @mkdir("{$user_home}/.ssh", 0700); + @chown("{$user_home}/.ssh", $user_name); + } + $keys = base64_decode($user['authorizedkeys']); + @file_put_contents("{$user_home}/.ssh/authorized_keys", $keys); + @chown("{$user_home}/.ssh/authorized_keys", $user_name); + } else + unlink_if_exists("{$user_home}/.ssh/authorized_keys"); + + $un = $lock_account ? "" : "un"; + exec("/usr/sbin/pw {$un}lock {$user_name} -q"); + + conf_mount_ro(); +} + +function local_user_del($user) { + global $debug; + + /* remove all memberships */ + local_user_set_groups($user); + + /* Don't remove /root */ + if ($user['uid'] != 0) + $rmhome = "-r"; + + /* read from pw db */ + $fd = popen("/usr/sbin/pw usershow -n {$user['name']} 2>&1", "r"); + $pwread = fgets($fd); + pclose($fd); + $userattrs = explode(":", trim($pwread)); + + if ($userattrs[0] != $user['name']) { + log_error("Tried to remove user {$user['name']} but got user {$userattrs[0]} instead. Bailing."); + return; + } + + /* delete from pw db */ + $cmd = "/usr/sbin/pw userdel -n {$user['name']} {$rmhome}"; + + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + mwexec($cmd); + + /* Delete user from groups needs a call to write_config() */ + local_group_del_user($user); +} + +function local_user_set_password(& $user, $password) { + + $user['password'] = crypt($password); + $user['md5-hash'] = md5($password); + + // Converts ascii to unicode. + $astr = (string) $password; + $ustr = ''; + for ($i = 0; $i < strlen($astr); $i++) { + $a = ord($astr{$i}) << 8; + $ustr.= sprintf("%X", $a); + } + + // Generate the NT-HASH from the unicode string + $user['nt-hash'] = bin2hex(hash("md4", $ustr)); +} + +function local_user_get_groups($user, $all = false) { + global $debug, $config; + + $groups = array(); + if (!is_array($config['system']['group'])) + return $groups; + + foreach ($config['system']['group'] as $group) + if ( $all || ( !$all && ($group['name'] != "all"))) + if (is_array($group['member'])) + if (in_array($user['uid'], $group['member'])) + $groups[] = $group['name']; + + if ( $all ) + $groups[] = "all"; + + sort($groups); + + return $groups; + +} + +function local_user_set_groups($user, $new_groups = NULL ) { + global $debug, $config, $groupindex; + + if (!is_array($config['system']['group'])) + return; + + $cur_groups = local_user_get_groups($user, true); + $mod_groups = array(); + + if (!is_array($new_groups)) + $new_groups = array(); + + if (!is_array($cur_groups)) + $cur_groups = array(); + + /* determine which memberships to add */ + foreach ($new_groups as $groupname) { + if (in_array($groupname,$cur_groups)) + continue; + $group = & $config['system']['group'][$groupindex[$groupname]]; + $group['member'][] = $user['uid']; + $mod_groups[] = $group; + } + unset($group); + + /* determine which memberships to remove */ + foreach ($cur_groups as $groupname) { + if (in_array($groupname,$new_groups)) + continue; + if (!isset($config['system']['group'][$groupindex[$groupname]])) + continue; + $group = & $config['system']['group'][$groupindex[$groupname]]; + if (is_array($group['member'])) { + $index = array_search($user['uid'], $group['member']); + array_splice($group['member'], $index, 1); + $mod_groups[] = $group; + } + } + unset($group); + + /* sync all modified groups */ + foreach ($mod_groups as $group) + local_group_set($group); +} + +function local_group_del_user($user) { + global $config; + + if (!is_array($config['system']['group'])) + return; + + foreach ($config['system']['group'] as $group) { + if (is_array($group['member'])) { + foreach ($group['member'] as $idx => $uid) { + if ($user['uid'] == $uid) + unset($config['system']['group']['member'][$idx]); + } + } + } +} + +function local_group_set($group, $reset = false) { + global $debug; + + $group_name = $group['name']; + $group_gid = $group['gid']; + $group_members = "''"; + if (!$reset && !empty($group['member']) && count($group['member']) > 0) + $group_members = implode(",",$group['member']); + + /* read from group db */ + $fd = popen("/usr/sbin/pw groupshow {$group_name} 2>&1", "r"); + $pwread = fgets($fd); + pclose($fd); + + /* determine add or mod */ + if (!strncmp($pwread, "pw:", 3)) + $group_op = "groupadd"; + else + $group_op = "groupmod"; + + /* add or mod group db */ + $cmd = "/usr/sbin/pw {$group_op} {$group_name} -g {$group_gid} -M {$group_members} 2>&1"; + + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + mwexec($cmd); + +} + +function local_group_del($group) { + global $debug; + + /* delete from group db */ + $cmd = "/usr/sbin/pw groupdel {$group['name']}"; + + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + mwexec($cmd); +} + +function ldap_test_connection($authcfg) { + global $debug, $config, $g; + + if ($authcfg) { + if (strstr($authcfg['ldap_urltype'], "Standard")) + $ldapproto = "ldap"; + else + $ldapproto = "ldaps"; + $ldapserver = "{$ldapproto}://" . ldap_format_host($authcfg['host']); + $ldapport = $authcfg['ldap_port']; + if (!empty($ldapport)) + $ldapserver .= ":{$ldapport}"; + $ldapbasedn = $authcfg['ldap_basedn']; + $ldapbindun = $authcfg['ldap_binddn']; + $ldapbindpw = $authcfg['ldap_bindpw']; + } else + return false; + + /* first check if there is even an LDAP server populated */ + if(!$ldapserver) + return false; + + /* Setup CA environment if needed. */ + ldap_setup_caenv($authcfg); + + /* connect and see if server is up */ + $error = false; + if (!($ldap = ldap_connect($ldapserver))) + $error = true; + + if ($error == true) { + log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname)); + return false; + } + + return true; +} + +function ldap_setup_caenv($authcfg) { + global $g; + require_once("certs.inc"); + + unset($caref); + if (empty($authcfg['ldap_caref']) || !strstr($authcfg['ldap_urltype'], "SSL")) { + putenv('LDAPTLS_REQCERT=never'); + return; + } else { + $caref = lookup_ca($authcfg['ldap_caref']); + if (!$caref) { + log_error(sprintf(gettext("LDAP: Could not lookup CA by reference for host %s."), $authcfg['ldap_caref'])); + /* XXX: Prevent for credential leaking since we cannot setup the CA env. Better way? */ + putenv('LDAPTLS_REQCERT=hard'); + return; + } + if (!is_dir("{$g['varrun_path']}/certs")) + @mkdir("{$g['varrun_path']}/certs"); + if (file_exists("{$g['varrun_path']}/certs/{$caref['refid']}.ca")) + @unlink("{$g['varrun_path']}/certs/{$caref['refid']}.ca"); + file_put_contents("{$g['varrun_path']}/certs/{$caref['refid']}.ca", base64_decode($caref['crt'])); + @chmod("{$g['varrun_path']}/certs/{$caref['refid']}.ca", 0600); + putenv('LDAPTLS_REQCERT=hard'); + /* XXX: Probably even the hashed link should be created for this? */ + putenv("LDAPTLS_CACERTDIR={$g['varrun_path']}/certs"); + putenv("LDAPTLS_CACERT={$g['varrun_path']}/certs/{$caref['refid']}.ca"); + } +} + +function ldap_test_bind($authcfg) { + global $debug, $config, $g; + + if ($authcfg) { + if (strstr($authcfg['ldap_urltype'], "Standard")) + $ldapproto = "ldap"; + else + $ldapproto = "ldaps"; + $ldapserver = "{$ldapproto}://" . ldap_format_host($authcfg['host']); + $ldapport = $authcfg['ldap_port']; + if (!empty($ldapport)) + $ldapserver .= ":{$ldapport}"; + $ldapbasedn = $authcfg['ldap_basedn']; + $ldapbindun = $authcfg['ldap_binddn']; + $ldapbindpw = $authcfg['ldap_bindpw']; + $ldapver = $authcfg['ldap_protver']; + if (empty($ldapbndun) || empty($ldapbindpw)) + $ldapanon = true; + else + $ldapanon = false; + } else + return false; + + /* first check if there is even an LDAP server populated */ + if(!$ldapserver) + return false; + + /* Setup CA environment if needed. */ + ldap_setup_caenv($authcfg); + + /* connect and see if server is up */ + $error = false; + if (!($ldap = ldap_connect($ldapserver))) + $error = true; + + if ($error == true) { + log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname)); + return false; + } + + ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); + ldap_set_option($ldap, LDAP_OPT_DEREF, LDAP_DEREF_SEARCHING); + ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, (int)$ldapver); + + $ldapbindun = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindun) : $ldapbindun; + $ldapbindpw = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindpw) : $ldapbindpw; + if ($ldapanon == true) { + if (!($res = @ldap_bind($ldap))) { + @ldap_close($ldap); + return false; + } + } else if (!($res = @ldap_bind($ldap, $ldapbindun, $ldapbindpw))) { + @ldap_close($ldap); + return false; + } + + @ldap_unbind($ldap); + + return true; +} + +function ldap_get_user_ous($show_complete_ou=true, $authcfg) { + global $debug, $config, $g; + + if(!function_exists("ldap_connect")) + return; + + $ous = array(); + + if ($authcfg) { + if (strstr($authcfg['ldap_urltype'], "Standard")) + $ldapproto = "ldap"; + else + $ldapproto = "ldaps"; + $ldapserver = "{$ldapproto}://" . ldap_format_host($authcfg['host']); + $ldapport = $authcfg['ldap_port']; + if (!empty($ldapport)) + $ldapserver .= ":{$ldapport}"; + $ldapbasedn = $authcfg['ldap_basedn']; + $ldapbindun = $authcfg['ldap_binddn']; + $ldapbindpw = $authcfg['ldap_bindpw']; + $ldapver = $authcfg['ldap_protver']; + if (empty($ldapbindun) || empty($ldapbindpw)) + $ldapanon = true; + else + $ldapanon = false; + $ldapname = $authcfg['name']; + $ldapfallback = false; + $ldapscope = $authcfg['ldap_scope']; + } else + return false; + + /* first check if there is even an LDAP server populated */ + if(!$ldapserver) { + log_error(gettext("ERROR! ldap_get_user_ous() backed selected with no LDAP authentication server defined.")); + return $ous; + } + + /* Setup CA environment if needed. */ + ldap_setup_caenv($authcfg); + + /* connect and see if server is up */ + $error = false; + if (!($ldap = ldap_connect($ldapserver))) + $error = true; + + if ($error == true) { + log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname)); + return $ous; + } + + $ldapfilter = "(|(ou=*)(cn=Users))"; + + ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); + ldap_set_option($ldap, LDAP_OPT_DEREF, LDAP_DEREF_SEARCHING); + ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, (int)$ldapver); + + $ldapbindun = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindun) : $ldapbindun; + $ldapbindpw = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindpw) : $ldapbindpw; + if ($ldapanon == true) { + if (!($res = @ldap_bind($ldap))) { + log_error(sprintf(gettext("ERROR! ldap_get_user_ous() could not bind anonymously to server %s."), $ldapname)); + @ldap_close($ldap); + return $ous; + } + } else if (!($res = @ldap_bind($ldap, $ldapbindun, $ldapbindpw))) { + log_error(sprintf(gettext("ERROR! ldap_get_user_ous() could not bind to server %s."), $ldapname)); + @ldap_close($ldap); + return $ous; + } + + if ($ldapscope == "one") + $ldapfunc = "ldap_list"; + else + $ldapfunc = "ldap_search"; + + $search = @$ldapfunc($ldap, $ldapbasedn, $ldapfilter); + $info = @ldap_get_entries($ldap, $search); + + if (is_array($info)) { + foreach ($info as $inf) { + if (!$show_complete_ou) { + $inf_split = explode(",", $inf['dn']); + $ou = $inf_split[0]; + $ou = str_replace("OU=","", $ou); + $ou = str_replace("CN=","", $ou); + } else + if($inf['dn']) + $ou = $inf['dn']; + if($ou) + $ous[] = $ou; + } + } + + @ldap_unbind($ldap); + + return $ous; +} + +function ldap_get_groups($username, $authcfg) { + global $debug, $config; + + if(!function_exists("ldap_connect")) + return; + + if(!$username) + return false; + + if(!isset($authcfg['ldap_nostrip_at']) && stristr($username, "@")) { + $username_split = explode("@", $username); + $username = $username_split[0]; + } + + if(stristr($username, "\\")) { + $username_split = explode("\\", $username); + $username = $username_split[0]; + } + + //log_error("Getting LDAP groups for {$username}."); + if ($authcfg) { + if (strstr($authcfg['ldap_urltype'], "Standard")) + $ldapproto = "ldap"; + else + $ldapproto = "ldaps"; + $ldapserver = "{$ldapproto}://" . ldap_format_host($authcfg['host']); + $ldapport = $authcfg['ldap_port']; + if (!empty($ldapport)) + $ldapserver .= ":{$ldapport}"; + $ldapbasedn = $authcfg['ldap_basedn']; + $ldapbindun = $authcfg['ldap_binddn']; + $ldapbindpw = $authcfg['ldap_bindpw']; + $ldapauthcont = $authcfg['ldap_authcn']; + $ldapnameattribute = strtolower($authcfg['ldap_attr_user']); + $ldapgroupattribute = strtolower($authcfg['ldap_attr_member']); + $ldapfilter = "({$ldapnameattribute}={$username})"; + $ldaptype = ""; + $ldapver = $authcfg['ldap_protver']; + if (empty($ldapbindun) || empty($ldapbindpw)) + $ldapanon = true; + else + $ldapanon = false; + $ldapname = $authcfg['name']; + $ldapfallback = false; + $ldapscope = $authcfg['ldap_scope']; + } else + return false; + + $ldapdn = $_SESSION['ldapdn']; + + /*Convert attribute to lowercase. php ldap arrays put everything in lowercase */ + $ldapgroupattribute = strtolower($ldapgroupattribute); + $memberof = array(); + + /* Setup CA environment if needed. */ + ldap_setup_caenv($authcfg); + + /* connect and see if server is up */ + $error = false; + if (!($ldap = ldap_connect($ldapserver))) + $error = true; + + if ($error == true) { + log_error(sprintf(gettext("ERROR! ldap_get_groups() Could not connect to server %s."), $ldapname)); + return memberof; + } + + ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); + ldap_set_option($ldap, LDAP_OPT_DEREF, LDAP_DEREF_SEARCHING); + ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, (int)$ldapver); + + /* bind as user that has rights to read group attributes */ + $ldapbindun = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindun) : $ldapbindun; + $ldapbindpw = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindpw) : $ldapbindpw; + if ($ldapanon == true) { + if (!($res = @ldap_bind($ldap))) { + log_error(sprintf(gettext("ERROR! ldap_get_groups() could not bind anonymously to server %s."), $ldapname)); + @ldap_close($ldap); + return false; + } + } else if (!($res = @ldap_bind($ldap, $ldapbindun, $ldapbindpw))) { + log_error(sprintf(gettext("ERROR! ldap_get_groups() could not bind to server %s."), $ldapname)); + @ldap_close($ldap); + return memberof; + } + + /* get groups from DN found */ + /* use ldap_read instead of search so we don't have to do a bunch of extra work */ + /* since we know the DN is in $_SESSION['ldapdn'] */ + //$search = ldap_read($ldap, $ldapdn, "(objectclass=*)", array($ldapgroupattribute)); + if ($ldapscope == "one") + $ldapfunc = "ldap_list"; + else + $ldapfunc = "ldap_search"; + + $search = @$ldapfunc($ldap, $ldapdn, $ldapfilter, array($ldapgroupattribute)); + $info = @ldap_get_entries($ldap, $search); + + $countem = $info["count"]; + + if(is_array($info[0][$ldapgroupattribute])) { + /* Iterate through the groups and throw them into an array */ + foreach ($info[0][$ldapgroupattribute] as $member) { + if (stristr($member, "CN=") !== false) { + $membersplit = explode(",", $member); + $memberof[] = preg_replace("/CN=/i", "", $membersplit[0]); + } + } + } + + /* Time to close LDAP connection */ + @ldap_unbind($ldap); + + $groups = print_r($memberof,true); + + //log_error("Returning groups ".$groups." for user $username"); + + return $memberof; +} + +function ldap_format_host($host) { + return is_ipaddrv6($host) ? "[$host]" : $host ; +} + +function ldap_backed($username, $passwd, $authcfg) { + global $debug, $config; + + if(!$username) + return; + + if(!function_exists("ldap_connect")) + return; + + if(!isset($authcfg['ldap_nostrip_at']) && stristr($username, "@")) { + $username_split = explode("@", $username); + $username = $username_split[0]; + } + if(stristr($username, "\\")) { + $username_split = explode("\\", $username); + $username = $username_split[0]; + } + + if ($authcfg) { + if (strstr($authcfg['ldap_urltype'], "Standard")) + $ldapproto = "ldap"; + else + $ldapproto = "ldaps"; + $ldapserver = "{$ldapproto}://" . ldap_format_host($authcfg['host']); + $ldapport = $authcfg['ldap_port']; + if (!empty($ldapport)) + $ldapserver .= ":{$ldapport}"; + $ldapbasedn = $authcfg['ldap_basedn']; + $ldapbindun = $authcfg['ldap_binddn']; + $ldapbindpw = $authcfg['ldap_bindpw']; + if (empty($ldapbindun) || empty($ldapbindpw)) + $ldapanon = true; + else + $ldapanon = false; + $ldapauthcont = $authcfg['ldap_authcn']; + $ldapnameattribute = strtolower($authcfg['ldap_attr_user']); + $ldapextendedqueryenabled = $authcfg['ldap_extended_enabled']; + $ldapextendedquery = $authcfg['ldap_extended_query']; + $ldapfilter = ""; + if(!$ldapextendedqueryenabled) + { + $ldapfilter = "({$ldapnameattribute}={$username})"; + } + else + { + $ldapfilter = +"(&({$ldapnameattribute}={$username})({$ldapextendedquery}))"; + } + $ldaptype = ""; + $ldapver = $authcfg['ldap_protver']; + $ldapname = $authcfg['name']; + $ldapscope = $authcfg['ldap_scope']; + } else + return false; + + /* first check if there is even an LDAP server populated */ + if(!$ldapserver) { + if ($ldapfallback) { + log_error(gettext("ERROR! ldap_backed() called with no LDAP authentication server defined. Defaulting to local user database. Visit System -> User Manager.")); + return local_backed($username, $passwd); + } else + log_error(gettext("ERROR! ldap_backed() called with no LDAP authentication server defined.")); + + return false; + } + + /* Setup CA environment if needed. */ + ldap_setup_caenv($authcfg); + + ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); + ldap_set_option($ldap, LDAP_OPT_DEREF, LDAP_DEREF_SEARCHING); + ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, (int)$ldapver); + + /* Make sure we can connect to LDAP */ + $error = false; + if (!($ldap = ldap_connect($ldapserver))) + $error = true; + + if ($error == true) { + log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname)); + return false; + } + + /* ok, its up. now, lets bind as the bind user so we can search it */ + $error = false; + $ldapbindun = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindun) : $ldapbindun; + $ldapbindpw = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindpw) : $ldapbindpw; + if ($ldapanon == true) { + if (!($res = @ldap_bind($ldap))) + $error = true; + } else if (!($res = @ldap_bind($ldap, $ldapbindun, $ldapbindpw))) + $error = true; + + if ($error == true) { + @ldap_close($ldap); + log_error(sprintf(gettext("ERROR! Could not bind to server %s."), $ldapname)); + return false; + } + + /* Get LDAP Authcontainers and split em up. */ + $ldac_splits = explode(";", $ldapauthcont); + + /* setup the usercount so we think we havn't found anyone yet */ + $usercount = 0; + + /*****************************************************************/ + /* We First find the user based on username and filter */ + /* Then, once we find the first occurance of that person */ + /* We set seesion variables to ponit to the OU and DN of the */ + /* Person. To later be used by ldap_get_groups. */ + /* that way we don't have to search twice. */ + /*****************************************************************/ + if ($debug) + log_auth(sprintf(gettext("Now Searching for %s in directory."), $username)); + /* Iterate through the user containers for search */ + foreach ($ldac_splits as $i => $ldac_split) { + $ldac_split = isset($authcfg['ldap_utf8']) ? utf8_encode($ldac_split) : $ldac_split; + $ldapfilter = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapfilter) : $ldapfilter; + $ldapsearchbasedn = isset($authcfg['ldap_utf8']) ? utf8_encode("{$ldac_split},{$ldapbasedn}") : "{$ldac_split},{$ldapbasedn}"; + /* Make sure we just use the first user we find */ + if ($debug) + log_auth(sprintf(gettext('Now Searching in server %1$s, container %2$s with filter %3$s.'), $ldapname, utf8_decode($ldac_split), utf8_decode($ldapfilter))); + if ($ldapscope == "one") + $ldapfunc = "ldap_list"; + else + $ldapfunc = "ldap_search"; + /* Support legacy auth container specification. */ + if (stristr($ldac_split, "DC=") || empty($ldapbasedn)) + $search = @$ldapfunc($ldap,$ldac_split,$ldapfilter); + else + $search = @$ldapfunc($ldap,$ldapsearchbasedn,$ldapfilter); + if (!$search) { + log_error(sprintf(gettext("Search resulted in error: %s"), ldap_error($ldap))); + continue; + } + $info = ldap_get_entries($ldap,$search); + $matches = $info['count']; + if ($matches == 1){ + $userdn = $_SESSION['ldapdn'] = $info[0]['dn']; + $_SESSION['ldapou'] = $ldac_split[$i]; + $_SESSION['ldapon'] = "true"; + $usercount = 1; + break; + } + } + + if ($usercount != 1){ + @ldap_unbind($ldap); + log_error(gettext("ERROR! Either LDAP search failed, or multiple users were found.")); + return false; + } + + /* Now lets bind as the user we found */ + $passwd = isset($authcfg['ldap_utf8']) ? utf8_encode($passwd) : $passwd; + if (!($res = @ldap_bind($ldap, $userdn, $passwd))) { + log_error(sprintf(gettext('ERROR! Could not login to server %1$s as user %2$s: %3$s'), $ldapname, $username, ldap_error($ldap))); + @ldap_unbind($ldap); + return false; + } + + if ($debug) { + $userdn = isset($authcfg['ldap_utf8']) ? utf8_decode($userdn) : $userdn; + log_auth(sprintf(gettext('Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s.'), $username, $ldapname, $userdn)); + } + + /* At this point we are bound to LDAP so the user was auth'd okay. Close connection. */ + @ldap_unbind($ldap); + + return true; +} + +function radius_backed($username, $passwd, $authcfg, &$attributes = array()) { + global $debug, $config; + $ret = false; + + require_once("radius.inc"); + + $rauth = new Auth_RADIUS_PAP($username, $passwd); + if ($authcfg) { + $radiusservers = array(); + $radiusservers[0]['ipaddr'] = $authcfg['host']; + $radiusservers[0]['port'] = $authcfg['radius_auth_port']; + $radiusservers[0]['sharedsecret'] = $authcfg['radius_secret']; + $radiusservers[0]['timeout'] = $authcfg['radius_timeout']; + } else + return false; + + /* Add a new servers to our instance */ + foreach ($radiusservers as $radsrv) { + $timeout = (is_numeric($radsrv['timeout'])) ? $radsrv['timeout'] : 5; + $rauth->addServer($radsrv['ipaddr'], $radsrv['port'], $radsrv['sharedsecret'], $timeout); + } + + if (PEAR::isError($rauth->start())) { + $retvalue['auth_val'] = 1; + $retvalue['error'] = $rauth->getError(); + if ($debug) + printf(gettext("Radius start: %s
\n"), $retvalue['error']); + } + + // XXX - billm - somewhere in here we need to handle securid challenge/response + + /* Send request */ + $result = $rauth->send(); + if (PEAR::isError($result)) { + $retvalue['auth_val'] = 1; + $retvalue['error'] = $result->getMessage(); + if ($debug) + printf(gettext("Radius send failed: %s
\n"), $retvalue['error']); + } else if ($result === true) { + if ($rauth->getAttributes()) + $attributes = $rauth->listAttributes(); + $retvalue['auth_val'] = 2; + if ($debug) + printf(gettext("Radius Auth succeeded")."
\n"); + $ret = true; + } else { + $retvalue['auth_val'] = 3; + if ($debug) + printf(gettext("Radius Auth rejected")."
\n"); + } + + // close OO RADIUS_AUTHENTICATION + $rauth->close(); + + return $ret; +} + +function get_user_expiration_date($username) { + $user = getUserEntry($username); + if ($user['expires']) + return $user['expires']; +} + +function is_account_expired($username) { + $expirydate = get_user_expiration_date($username); + if ($expirydate) { + if (strtotime("-1 day") > strtotime(date("m/d/Y",strtotime($expirydate)))) + return true; + } + + return false; +} + +function is_account_disabled($username) { + $user = getUserEntry($username); + if (isset($user['disabled'])) + return true; + + return false; +} + +function auth_get_authserver($name) { + global $config; + + if (is_array($config['system']['authserver'])) { + foreach ($config['system']['authserver'] as $authcfg) { + if ($authcfg['name'] == $name) + return $authcfg; + } + } + if ($name == "Local Database") + return array("name" => gettext("Local Database"), "type" => "Local Auth", "host" => $config['system']['hostname']); +} + +function auth_get_authserver_list() { + global $config; + + $list = array(); + + if (is_array($config['system']['authserver'])) { + foreach ($config['system']['authserver'] as $authcfg) { + /* Add support for disabled entries? */ + $list[$authcfg['name']] = $authcfg; + } + } + + $list["Local Database"] = array( "name" => gettext("Local Database"), "type" => "Local Auth", "host" => $config['system']['hostname']); + return $list; +} + +function getUserGroups($username, $authcfg) { + global $config; + + $allowed_groups = array(); + + switch($authcfg['type']) { + case 'ldap': + $allowed_groups = @ldap_get_groups($username, $authcfg); + break; + case 'radius': + break; + default: + $user = getUserEntry($username); + $allowed_groups = @local_user_get_groups($user, true); + break; + } + + $member_groups = array(); + if (is_array($config['system']['group'])) { + foreach ($config['system']['group'] as $group) + if (in_array($group['name'], $allowed_groups)) + $member_groups[] = $group['name']; + } + + return $member_groups; +} + +function authenticate_user($username, $password, $authcfg = NULL, &$attributes = array()) { + + if (!$authcfg) { + return local_backed($username, $password); + } + + $authenticated = false; + switch($authcfg['type']) { + case 'ldap': + if (ldap_backed($username, $password, $authcfg)) + $authenticated = true; + break; + case 'radius': + if (radius_backed($username, $password, $authcfg, $attributes)) + $authenticated = true; + break; + default: + /* lookup user object by name */ + if (local_backed($username, $password)) + $authenticated = true; + break; + } + + return $authenticated; +} + +function session_auth() { + global $config, $_SESSION, $page; + + // Handle HTTPS httponly and secure flags + $currentCookieParams = session_get_cookie_params(); + session_set_cookie_params( + $currentCookieParams["lifetime"], + $currentCookieParams["path"], + NULL, + ($config['system']['webgui']['protocol'] == "https"), + true + ); + + if (!session_id()) + session_start(); + + // Detect protocol change + if (!isset($_POST['login']) && !empty($_SESSION['Logged_In']) && $_SESSION['protocol'] != $config['system']['webgui']['protocol']) + return false; + + /* Validate incoming login request */ + if (isset($_POST['login']) && !empty($_POST['usernamefld']) && !empty($_POST['passwordfld'])) { + $authcfg = auth_get_authserver($config['system']['webgui']['authmode']); + if (authenticate_user($_POST['usernamefld'], $_POST['passwordfld'], $authcfg) || + authenticate_user($_POST['usernamefld'], $_POST['passwordfld'])) { + // Generate a new id to avoid session fixation + session_regenerate_id(); + $_SESSION['Logged_In'] = "True"; + $_SESSION['Username'] = $_POST['usernamefld']; + $_SESSION['last_access'] = time(); + $_SESSION['protocol'] = $config['system']['webgui']['protocol']; + if(! isset($config['system']['webgui']['quietlogin'])) { + log_auth(sprintf(gettext("Successful login for user '%1\$s' from: %2\$s"), $_POST['usernamefld'], $_SERVER['REMOTE_ADDR'])); + } + if (isset($_POST['postafterlogin'])) + return true; + else { + if (empty($page)) + $page = "/"; + header("Location: {$page}"); + } + exit; + } else { + /* give the user an error message */ + $_SESSION['Login_Error'] = "Username or Password incorrect"; + log_auth("webConfigurator authentication error for '{$_POST['usernamefld']}' from {$_SERVER['REMOTE_ADDR']}"); + if(isAjax()) { + echo "showajaxmessage('{$_SESSION['Login_Error']}');"; + return; + } + } + } + + /* Show login page if they aren't logged in */ + if (empty($_SESSION['Logged_In'])) + return false; + + /* If session timeout isn't set, we don't mark sessions stale */ + if (!isset($config['system']['webgui']['session_timeout'])) { + /* Default to 4 hour timeout if one is not set */ + if ($_SESSION['last_access'] < (time() - 14400)) { + $_GET['logout'] = true; + $_SESSION['Logout'] = true; + } else + $_SESSION['last_access'] = time(); + } else if (intval($config['system']['webgui']['session_timeout']) == 0) { + /* only update if it wasn't ajax */ + if (!isAjax()) + $_SESSION['last_access'] = time(); + } else { + /* Check for stale session */ + if ($_SESSION['last_access'] < (time() - ($config['system']['webgui']['session_timeout'] * 60))) { + $_GET['logout'] = true; + $_SESSION['Logout'] = true; + } else { + /* only update if it wasn't ajax */ + if (!isAjax()) + $_SESSION['last_access'] = time(); + } + } + + /* user hit the logout button */ + if (isset($_GET['logout'])) { + + if ($_SESSION['Logout']) + log_error(sprintf(gettext("Session timed out for user '%1\$s' from: %2\$s"), $_SESSION['Username'], $_SERVER['REMOTE_ADDR'])); + else + log_error(sprintf(gettext("User logged out for user '%1\$s' from: %2\$s"), $_SESSION['Username'], $_SERVER['REMOTE_ADDR'])); + + /* wipe out $_SESSION */ + $_SESSION = array(); + + if (isset($_COOKIE[session_name()])) + setcookie(session_name(), '', time()-42000, '/'); + + /* and destroy it */ + session_destroy(); + + $scriptName = explode("/", $_SERVER["SCRIPT_FILENAME"]); + $scriptElms = count($scriptName); + $scriptName = $scriptName[$scriptElms-1]; + + if (isAjax()) + return false; + + /* redirect to page the user is on, it'll prompt them to login again */ + header("Location: {$scriptName}"); + + return false; + } + + /* + * this is for debugging purpose if you do not want to use Ajax + * to submit a HTML form. It basically diables the observation + * of the submit event and hence does not trigger Ajax. + */ + if ($_GET['disable_ajax']) + $_SESSION['NO_AJAX'] = "True"; + + /* + * Same to re-enable Ajax. + */ + if ($_GET['enable_ajax']) + unset($_SESSION['NO_AJAX']); + + return true; +} + +?> diff --git a/etc/inc/authgui.inc b/etc/inc/authgui.inc new file mode 100644 index 000000000..a9d7c9dec --- /dev/null +++ b/etc/inc/authgui.inc @@ -0,0 +1,312 @@ + + All rights reserved. + + Copyright (C) 2005-2006 Bill Marquette + All rights reserved. + + Copyright (C) 2006 Paul Taylor . + All rights reserved. + + Copyright (C) 2003-2006 Manuel Kasper . + 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. + + pfSense_MODULE: authgui +*/ + +include_once("auth.inc"); +include_once("priv.inc"); + +/* Authenticate user - exit if failed */ +if (!session_auth()) { + display_login_form(); + exit; +} + +/* + * Once here, the user has authenticated with the web server. + * We give them access only to the appropriate pages based on + * the user or group privileges. + */ +$allowedpages = getAllowedPages($_SESSION['Username']); + +/* + * redirect to first allowed page if requesting a wrong url + */ +if (!isAllowedPage($_SERVER['REQUEST_URI'])) { + if (count($allowedpages) > 0) { + $page = str_replace('*', '', $allowedpages[0]); + $_SESSION['Post_Login'] = true; + require_once("functions.inc"); + pfSenseHeader("/{$page}"); + + $username = empty($_SESSION["Username"]) ? "(system)" : $_SESSION['Username']; + if (!empty($_SERVER['REMOTE_ADDR'])) + $username .= '@' . $_SERVER['REMOTE_ADDR']; + log_error("{$username} attempted to access {$_SERVER['SCRIPT_NAME']} but does not have access to that page. Redirecting to {$page}."); + + exit; + } else { + display_error_form("201", gettext("No page assigned to this user! Click here to logout.")); + exit; + } +} else + $_SESSION['Post_Login'] = true; + +/* + * redirect browsers post-login to avoid pages + * taking action in reponse to a POST request + */ +if (!$_SESSION['Post_Login']) { + $_SESSION['Post_Login'] = true; + require_once("functions.inc"); + pfSenseHeader($_SERVER['REQUEST_URI']); + exit; +} + +/* + * Close session data to allow other scripts from same host to come in. + * A session can be reactivated from calling session_start again + */ +session_commit(); + +/* + * determine if the user is allowed access to the requested page + */ +function display_error_form($http_code, $desc) { + global $config, $g; + $g['theme'] = get_current_theme(); + if(isAjax()) { + printf(gettext('Error: %1$s Description: %2$s'), $http_code, $desc); + return; + } + +?> + + + + + + + <?=$http_code?> + + + + + + + + + + + + + + + + "True") { + isset($_SESSION['Login_Error']) ? $login_error = $_SESSION['Login_Error'] : $login_error = gettext("unknown reason"); + printf("showajaxmessage('" . gettext("Invalid login (%s).") . "')", $login_error); + } + if (file_exists("{$g['tmp_path']}/webconfigurator.lock")) { + // TODO: add the IP from the user who did lock the device + $whom = file_get_contents("{$g['tmp_path']}/webconfigurator.lock"); + printf("showajaxmessage('" . gettext("This device is currently being maintained by: %s.") . "');", $whom); + } + } + exit; + } + +/* Check against locally configured IP addresses, which will catch when someone + port forwards WebGUI access from WAN to an internal IP on the router. */ +global $FilterIflist, $nifty_background; +$local_ip = false; +if(strstr($_SERVER['HTTP_HOST'], ":")) { + $http_host_port = explode(":", $_SERVER['HTTP_HOST']); + $http_host = $http_host_port[0]; +} else { + $http_host = $_SERVER['HTTP_HOST']; +} +if (empty($FilterIflist)) { + require_once('filter.inc'); + require_once('shaper.inc'); + filter_generate_optcfg_array(); +} +foreach ($FilterIflist as $iflist) { + if($iflist['ip'] == $http_host) + $local_ip = true; + if($iflist['ipv6'] == $http_host) + $local_ip = true; +} +unset($FilterIflist); + +if($config['virtualip']) { + if($config['virtualip']['vip']) { + foreach($config['virtualip']['vip'] as $vip) { + if($vip['subnet'] == $http_host) + $local_ip = true; + } + } +} +if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as $ovpns) { + if (is_ipaddrv4($http_host) && !empty($ovpns['tunnel_network']) && ip_in_subnet($http_host, $ovpns['tunnel_network'])) { + $local_ip = true; + break; + } + + if (is_ipaddrv6($http_host) && !empty($ovpns['tunnel_networkv6']) && ip_in_subnet($http_host, $ovpns['tunnel_networkv6'])) { + $local_ip = true; + break; + } + } +} +setcookie("cookie_test", time() + 3600); +$have_cookies = isset($_COOKIE["cookie_test"]); + +?> + + + + + + + + + <?=gettext("Login"); ?> + + + + + + + + + + + +
+
If you did not setup this forwarding, you may be the target of a man-in-the-middle attack.")); + } + $loginautocomplete = isset($config['system']['webgui']['loginautocomplete']) ? '' : 'autocomplete="off"'; + ?> +
action=""> +

 

+
+

+ +
+ +
+

+

+
+ +
+ +
+

+

+
+ + + + + +

+ + + + +

+

+ + " tabindex="3" /> + +

+
+
+ + + diff --git a/etc/inc/basic_sasl_client.inc b/etc/inc/basic_sasl_client.inc new file mode 100644 index 000000000..b2972b5d8 --- /dev/null +++ b/etc/inc/basic_sasl_client.inc @@ -0,0 +1,61 @@ +state!=SASL_BASIC_STATE_START) + { + $client->error="Basic authentication state is not at the start"; + return(SASL_FAIL); + } + $this->credentials=array( + "user"=>"", + "password"=>"" + ); + $defaults=array( + ); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + { + $message=$this->credentials["user"].":".$this->credentials["password"]; + $this->state=SASL_BASIC_STATE_DONE; + } + else + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { + case SASL_BASIC_STATE_DONE: + $client->error="Basic authentication was finished without success"; + return(SASL_FAIL); + default: + $client->error="invalid Basic authentication step state"; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> \ No newline at end of file diff --git a/etc/inc/captiveportal.inc b/etc/inc/captiveportal.inc new file mode 100644 index 000000000..000db23a3 --- /dev/null +++ b/etc/inc/captiveportal.inc @@ -0,0 +1,2187 @@ + + Copyright (C) 2009-2012 Ermal Lu�i + Copyright (C) 2003-2006 Manuel Kasper . + + originally part of m0n0wall (http://m0n0.ch/wall) + 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. + + This version of captiveportal.inc has been modified by Rob Parker + to include changes for per-user bandwidth management + via returned RADIUS attributes. This page has been modified to delete any + added rules which may have been created by other per-user code (index.php, etc). + These changes are (c) 2004 Keycom PLC. + + pfSense_BUILDER_BINARIES: /sbin/ipfw /sbin/route + pfSense_BUILDER_BINARIES: /usr/local/sbin/lighttpd /usr/local/bin/minicron /sbin/pfctl + pfSense_BUILDER_BINARIES: /bin/hostname /bin/cp + pfSense_MODULE: captiveportal +*/ + +/* include all configuration functions */ +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("radius.inc"); +require_once("voucher.inc"); + +function get_default_captive_portal_html() { + global $config, $g, $cpzone; + + $htmltext = << + +
+ + +
+ + + + + + + +
+ + + {$g['product_name']} captive portal + + +
+
+
+ + + + +
+
+
+
+ + + + +
+
+
+
+ + + \$PORTAL_MESSAGE\$ + + +
+
+
+ + + + + + + +EOD; + + if(isset($config['voucher'][$cpzone]['enable'])) { + $htmltext .= << + + + + +EOD; + } + + $htmltext .= << + + +
Welcome to the {$g['product_name']} Captive Portal!
 
Username:
Password:
 
Enter Voucher Code:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + +EOD; + + return $htmltext; +} + +function captiveportal_load_modules() { + global $config; + + mute_kernel_msgs(); + if (!is_module_loaded("ipfw.ko")) { + mwexec("/sbin/kldload ipfw"); + /* make sure ipfw is not on pfil hooks */ + set_sysctl(array( + "net.inet.ip.pfil.inbound" => "pf", "net.inet6.ip6.pfil.inbound" => "pf", + "net.inet.ip.pfil.outbound" => "pf", "net.inet6.ip6.pfil.outbound" => "pf") + ); + } + /* Activate layer2 filtering */ + set_sysctl(array("net.link.ether.ipfw" => "1", "net.inet.ip.fw.one_pass" => "1")); + + /* Always load dummynet now that even allowed ip and mac passthrough use it. */ + if (!is_module_loaded("dummynet.ko")) { + mwexec("/sbin/kldload dummynet"); + set_sysctl(array("net.inet.ip.dummynet.io_fast" => "1", "net.inet.ip.dummynet.hash_size" => "256")); + } + unmute_kernel_msgs(); +} + +function captiveportal_configure() { + global $config, $cpzone, $cpzoneid; + + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpkey => $cp) { + $cpzone = $cpkey; + $cpzoneid = $cp['zoneid']; + captiveportal_configure_zone($cp); + } + } +} + +function captiveportal_configure_zone($cpcfg) { + global $config, $g, $cpzone, $cpzoneid; + + $captiveportallck = lock("captiveportal{$cpzone}", LOCK_EX); + + if (isset($cpcfg['enable'])) { + + if ($g['booting']) { + echo "Starting captive portal({$cpcfg['zone']})... "; + + /* remove old information */ + unlink_if_exists("{$g['vardb_path']}/captiveportal{$cpzone}.db"); + } else + captiveportal_syslog("Reconfiguring captive portal({$cpcfg['zone']})."); + + /* init ipfw rules */ + captiveportal_init_rules(true); + + /* kill any running minicron */ + killbypid("{$g['varrun_path']}/cp_prunedb_{$cpzone}.pid"); + + /* initialize minicron interval value */ + $croninterval = $cpcfg['croninterval'] ? $cpcfg['croninterval'] : 60; + + /* double check if the $croninterval is numeric and at least 10 seconds. If not we set it to 60 to avoid problems */ + if ((!is_numeric($croninterval)) || ($croninterval < 10)) + $croninterval = 60; + + /* write portal page */ + if (is_array($cpcfg['page']) && $cpcfg['page']['htmltext']) + $htmltext = base64_decode($cpcfg['page']['htmltext']); + else { + /* example/template page */ + $htmltext = get_default_captive_portal_html(); + } + + $fd = @fopen("{$g['varetc_path']}/captiveportal_{$cpzone}.html", "w"); + if ($fd) { + // Special case handling. Convert so that we can pass this page + // through the PHP interpreter later without clobbering the vars. + $htmltext = str_replace("\$PORTAL_ZONE\$", "#PORTAL_ZONE#", $htmltext); + $htmltext = str_replace("\$PORTAL_REDIRURL\$", "#PORTAL_REDIRURL#", $htmltext); + $htmltext = str_replace("\$PORTAL_MESSAGE\$", "#PORTAL_MESSAGE#", $htmltext); + $htmltext = str_replace("\$CLIENT_MAC\$", "#CLIENT_MAC#", $htmltext); + $htmltext = str_replace("\$CLIENT_IP\$", "#CLIENT_IP#", $htmltext); + $htmltext = str_replace("\$ORIGINAL_PORTAL_IP\$", "#ORIGINAL_PORTAL_IP#", $htmltext); + $htmltext = str_replace("\$PORTAL_ACTION\$", "#PORTAL_ACTION#", $htmltext); + if($cpcfg['preauthurl']) { + $htmltext = str_replace("\$PORTAL_REDIRURL\$", "{$cpcfg['preauthurl']}", $htmltext); + $htmltext = str_replace("#PORTAL_REDIRURL#", "{$cpcfg['preauthurl']}", $htmltext); + } + fwrite($fd, $htmltext); + fclose($fd); + } + unset($htmltext); + + /* write error page */ + if (is_array($cpcfg['page']) && $cpcfg['page']['errtext']) + $errtext = base64_decode($cpcfg['page']['errtext']); + else { + /* example page */ + $errtext = get_default_captive_portal_html(); + } + + $fd = @fopen("{$g['varetc_path']}/captiveportal-{$cpzone}-error.html", "w"); + if ($fd) { + // Special case handling. Convert so that we can pass this page + // through the PHP interpreter later without clobbering the vars. + $errtext = str_replace("\$PORTAL_ZONE\$", "#PORTAL_ZONE#", $errtext); + $errtext = str_replace("\$PORTAL_REDIRURL\$", "#PORTAL_REDIRURL#", $errtext); + $errtext = str_replace("\$PORTAL_MESSAGE\$", "#PORTAL_MESSAGE#", $errtext); + $errtext = str_replace("\$CLIENT_MAC\$", "#CLIENT_MAC#", $errtext); + $errtext = str_replace("\$CLIENT_IP\$", "#CLIENT_IP#", $errtext); + $errtext = str_replace("\$ORIGINAL_PORTAL_IP\$", "#ORIGINAL_PORTAL_IP#", $errtext); + $errtext = str_replace("\$PORTAL_ACTION\$", "#PORTAL_ACTION#", $errtext); + if($cpcfg['preauthurl']) { + $errtext = str_replace("\$PORTAL_REDIRURL\$", "{$cpcfg['preauthurl']}", $errtext); + $errtext = str_replace("#PORTAL_REDIRURL#", "{$cpcfg['preauthurl']}", $errtext); + } + fwrite($fd, $errtext); + fclose($fd); + } + unset($errtext); + + /* write logout page */ + if (is_array($cpcfg['page']) && $cpcfg['page']['logouttext']) + $logouttext = base64_decode($cpcfg['page']['logouttext']); + else { + /* example page */ + $logouttext = << +Redirecting... + + +Redirecting to
... + + + + + +EOD; + } + + $fd = @fopen("{$g['varetc_path']}/captiveportal-{$cpzone}-logout.html", "w"); + if ($fd) { + fwrite($fd, $logouttext); + fclose($fd); + } + unset($logouttext); + + /* write elements */ + captiveportal_write_elements(); + + /* kill any running mini_httpd */ + killbypid("{$g['varrun_path']}/lighty-{$cpzone}-CaptivePortal.pid"); + killbypid("{$g['varrun_path']}/lighty-{$cpzone}-CaptivePortal-SSL.pid"); + + /* start up the webserving daemon */ + captiveportal_init_webgui_zone($cpcfg); + + /* Kill any existing prunecaptiveportal processes */ + if (file_exists("{$g['varrun_path']}/cp_prunedb_{$cpzone}.pid")) + killbypid("{$g['varrun_path']}/cp_prunedb_{$cpzone}.pid"); + + /* start pruning process (interval defaults to 60 seconds) */ + mwexec("/usr/local/bin/minicron $croninterval {$g['varrun_path']}/cp_prunedb_{$cpzone}.pid " . + "/etc/rc.prunecaptiveportal {$cpzone}"); + + /* generate radius server database */ + unlink_if_exists("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db"); + captiveportal_init_radius_servers(); + + if ($g['booting']) { + /* send Accounting-On to server */ + captiveportal_send_server_accounting(); + echo "done\n"; + } + + } else { + killbypid("{$g['varrun_path']}/lighty-{$cpzone}-CaptivePortal.pid"); + killbypid("{$g['varrun_path']}/lighty-{$cpzone}-CaptivePortal-SSL.pid"); + killbypid("{$g['varrun_path']}/cp_prunedb_{$cpzone}.pid"); + @unlink("{$g['varetc_path']}/captiveportal_{$cpzone}.html"); + @unlink("{$g['varetc_path']}/captiveportal-{$cpzone}-error.html"); + @unlink("{$g['varetc_path']}/captiveportal-{$cpzone}-logout.html"); + + captiveportal_radius_stop_all(); + + /* send Accounting-Off to server */ + if (!$g['booting']) { + captiveportal_send_server_accounting(true); + } + + /* remove old information */ + unlink_if_exists("{$g['vardb_path']}/captiveportal{$cpzone}.db"); + unlink_if_exists("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db"); + unlink_if_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules"); + /* Release allocated pipes for this zone */ + captiveportal_free_dnrules(); + + mwexec("/sbin/ipfw zone {$cpzoneid} destroy", true); + + if (empty($config['captiveportal'])) + set_single_sysctl("net.link.ether.ipfw", "0"); + else { + /* Deactivate ipfw(4) if not needed */ + $cpactive = false; + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpkey => $cp) { + if (isset($cp['enable'])) { + $cpactive = true; + break; + } + } + } + if ($cpactive === false) + set_single_sysctl("net.link.ether.ipfw", "0"); + + } + } + + unlock($captiveportallck); + + return 0; +} + +function captiveportal_init_webgui() { + global $config, $cpzone; + + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpkey => $cp) { + $cpzone = $cpkey; + captiveportal_init_webgui_zone($cp); + } + } +} + +function captiveportal_init_webgui_zonename($zone) { + global $config, $cpzone; + + if (isset($config['captiveportal'][$zone])) { + $cpzone = $zone; + captiveportal_init_webgui_zone($config['captiveportal'][$zone]); + } +} + +function captiveportal_init_webgui_zone($cpcfg) { + global $g, $config, $cpzone; + + if (!isset($cpcfg['enable'])) + return; + + if (isset($cpcfg['httpslogin'])) { + $cert = lookup_cert($cpcfg['certref']); + $crt = base64_decode($cert['crt']); + $key = base64_decode($cert['prv']); + $ca = ca_chain($cert); + + /* generate lighttpd configuration */ + if (!empty($cpcfg['listenporthttps'])) + $listenporthttps = $cpcfg['listenporthttps']; + else + $listenporthttps = 8001 + $cpcfg['zoneid']; + system_generate_lighty_config("{$g['varetc_path']}/lighty-{$cpzone}-CaptivePortal-SSL.conf", + $crt, $key, $ca, "lighty-{$cpzone}-CaptivePortal-SSL.pid", $listenporthttps, "/usr/local/captiveportal", + "cert-{$cpzone}-portal.pem", "ca-{$cpzone}-portal.pem", $cpzone); + } + + /* generate lighttpd configuration */ + if (!empty($cpcfg['listenporthttp'])) + $listenporthttp = $cpcfg['listenporthttp']; + else + $listenporthttp = 8000 + $cpcfg['zoneid']; + system_generate_lighty_config("{$g['varetc_path']}/lighty-{$cpzone}-CaptivePortal.conf", + "", "", "", "lighty-{$cpzone}-CaptivePortal.pid", $listenporthttp, "/usr/local/captiveportal", + "", "", $cpzone); + + @unlink("{$g['varrun']}/lighty-{$cpzone}-CaptivePortal.pid"); + /* attempt to start lighttpd */ + $res = mwexec("/usr/local/sbin/lighttpd -f {$g['varetc_path']}/lighty-{$cpzone}-CaptivePortal.conf"); + + /* fire up https instance */ + if (isset($cpcfg['httpslogin'])) { + @unlink("{$g['varrun']}/lighty-{$cpzone}-CaptivePortal-SSL.pid"); + $res = mwexec("/usr/local/sbin/lighttpd -f {$g['varetc_path']}/lighty-{$cpzone}-CaptivePortal-SSL.conf"); + } +} + +/* reinit will disconnect all users, be careful! */ +function captiveportal_init_rules($reinit = false) { + global $config, $g, $cpzone, $cpzoneid; + + if (!isset($config['captiveportal'][$cpzone]['enable'])) + return; + + captiveportal_load_modules(); + mwexec("/sbin/ipfw zone {$cpzoneid} create", true); + + $cpips = array(); + $ifaces = get_configured_interface_list(); + $cpinterfaces = explode(",", $config['captiveportal'][$cpzone]['interface']); + $firsttime = 0; + foreach ($cpinterfaces as $cpifgrp) { + if (!isset($ifaces[$cpifgrp])) + continue; + $tmpif = get_real_interface($cpifgrp); + if (!empty($tmpif)) { + $cpipm = get_interface_ip($cpifgrp); + if (is_ipaddr($cpipm)) { + $carpif = link_ip_to_carp_interface($cpipm); + if (!empty($carpif)) { + $carpsif = explode(" ", $carpif); + foreach ($carpsif as $cpcarp) { + mwexec("/sbin/ipfw zone {$cpzoneid} madd {$cpcarp}", true); + $carpip = find_interface_ip($cpcarp); + if (is_ipaddr($carpip)) + $cpips[] = $carpip; + } + } + $cpips[] = $cpipm; + } + mwexec("/sbin/ipfw zone {$cpzoneid} madd {$tmpif}", true); + } + } + if (count($cpips) > 0) { + $cpactive = true; + } else + return false; + + if ($reinit == false) + $captiveportallck = lock("captiveportal{$cpzone}"); + + $cprules = "add 65291 allow pfsync from any to any\n"; + $cprules .= "add 65292 allow carp from any to any\n"; + + $cprules .= <<= $timeout) { + $timedout = true; + $term_cause = 5; // Session-Timeout + } + } + + /* Session-Terminate-Time */ + if (!$timedout && !empty($cpentry[9])) { + if ($pruning_time >= $cpentry[9]) { + $timedout = true; + $term_cause = 5; // Session-Timeout + } + } + + /* check if the radius idle_timeout attribute has been set and if its set change the idletimeout to this value */ + $uidletimeout = (is_numeric($cpentry[8])) ? $cpentry[8] : $idletimeout; + /* if an idle timeout is specified, get last activity timestamp from ipfw */ + if (!$timedout && $uidletimeout > 0) { + $lastact = captiveportal_get_last_activity($cpentry[2], $cpentry[3]); + /* If the user has logged on but not sent any traffic they will never be logged out. + * We "fix" this by setting lastact to the login timestamp. + */ + $lastact = $lastact ? $lastact : $cpentry[0]; + if ($lastact && (($pruning_time - $lastact) >= $uidletimeout)) { + $timedout = true; + $term_cause = 4; // Idle-Timeout + $stop_time = $lastact; // Entry added to comply with WISPr + } + } + + /* if vouchers are configured, activate session timeouts */ + if (!$timedout && isset($vcpcfg['enable']) && !empty($cpentry[7])) { + if ($pruning_time >= ($cpentry[0] + $cpentry[7])) { + $timedout = true; + $term_cause = 5; // Session-Timeout + $voucher_needs_sync = true; + } + } + + /* if radius session_timeout is enabled and the session_timeout is not null, then check if the user should be logged out */ + if (!$timedout && isset($cpcfg['radiussession_timeout']) && !empty($cpentry[7])) { + if ($pruning_time >= ($cpentry[0] + $cpentry[7])) { + $timedout = true; + $term_cause = 5; // Session-Timeout + } + } + + if ($timedout) { + captiveportal_disconnect($cpentry, $radiusservers,$term_cause,$stop_time); + captiveportal_logportalauth($cpentry[4], $cpentry[3], $cpentry[2], "TIMEOUT"); + $unsetindexes[] = $cpentry[5]; + } + + /* do periodic RADIUS reauthentication? */ + if (!$timedout && !empty($radiusservers)) { + if (isset($cpcfg['radacct_enable'])) { + if ($cpcfg['reauthenticateacct'] == "stopstart") { + /* stop and restart accounting */ + RADIUS_ACCOUNTING_STOP($cpentry[1], // ruleno + $cpentry[4], // username + $cpentry[5], // sessionid + $cpentry[0], // start time + $radiusservers, + $cpentry[2], // clientip + $cpentry[3], // clientmac + 10); // NAS Request + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XZEROENTRY, 1, $cpentry[2], $cpentry[3]); + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XZEROENTRY, 2, $cpentry[2], $cpentry[3]); + RADIUS_ACCOUNTING_START($cpentry[1], // ruleno + $cpentry[4], // username + $cpentry[5], // sessionid + $radiusservers, + $cpentry[2], // clientip + $cpentry[3]); // clientmac + } else if ($cpcfg['reauthenticateacct'] == "interimupdate") { + $session_time = $pruning_time - $cpentry[0]; + if (!empty($cpentry[10]) && $cpentry[10] > 60) + $interval = $cpentry[10]; + else + $interval = 0; + $past_interval_min = ($session_time > $interval); + if ($interval != 0) + $within_interval = ($session_time % $interval >= 0 && $session_time % $interval <= 59); + if ($interval === 0 || ($interval > 0 && $past_interval_min && $within_interval)) { + RADIUS_ACCOUNTING_STOP($cpentry[1], // ruleno + $cpentry[4], // username + $cpentry[5], // sessionid + $cpentry[0], // start time + $radiusservers, + $cpentry[2], // clientip + $cpentry[3], // clientmac + 10, // NAS Request + true); // Interim Updates + } + } + } + + /* check this user against RADIUS again */ + if (isset($cpcfg['reauthenticate'])) { + $auth_list = RADIUS_AUTHENTICATION($cpentry[4], // username + base64_decode($cpentry[6]), // password + $radiusservers, + $cpentry[2], // clientip + $cpentry[3], // clientmac + $cpentry[1]); // ruleno + if ($auth_list['auth_val'] == 3) { + captiveportal_disconnect($cpentry, $radiusservers, 17); + captiveportal_logportalauth($cpentry[4], $cpentry[3], $cpentry[2], "RADIUS_DISCONNECT", $auth_list['reply_message']); + $unsetindexes[] = $cpentry[5]; + } else if ($auth_list['auth_val'] == 2) + captiveportal_reapply_attributes($cpentry, $auth_list); + } + } + } + unset($cpdb); + + captiveportal_prune_old_automac(); + + if ($voucher_needs_sync == true) + /* Triger a sync of the vouchers on config */ + send_event("service sync vouchers"); + + /* write database */ + if (!empty($unsetindexes)) + captiveportal_remove_entries($unsetindexes); +} + +function captiveportal_prune_old_automac() { + global $g, $config, $cpzone, $cpzoneid; + + if (is_array($config['captiveportal'][$cpzone]['passthrumac']) && isset($config['captiveportal'][$cpzone]['passthrumacaddusername'])) { + $tmpvoucherdb = array(); + $macrules = ""; + $writecfg = false; + foreach ($config['captiveportal'][$cpzone]['passthrumac'] as $eid => $emac) { + if ($emac['logintype'] == "voucher") { + if (isset($config['captiveportal'][$cpzone]['noconcurrentlogins'])) { + if (isset($tmpvoucherdb[$emac['username']])) { + $temac = $config['captiveportal'][$cpzone]['passthrumac'][$tmpvoucherdb[$emac['username']]]; + $ruleno = captiveportal_get_ipfw_passthru_ruleno($temac['mac']); + $pipeno = captiveportal_get_dn_passthru_ruleno($temac['mac']); + if ($ruleno) { + captiveportal_free_ipfw_ruleno($ruleno); + $macrules .= "delete {$ruleno}"; + ++$ruleno; + $macrules .= "delete {$ruleno}"; + } + if ($pipeno) { + captiveportal_free_dn_ruleno($pipeno); + $macrules .= "pipe delete {$pipeno}\n"; + ++$pipeno; + $macrules .= "pipe delete {$pipeno}\n"; + } + $writecfg = true; + captiveportal_logportalauth($temac['username'], $temac['mac'], $temac['ip'], "DUPLICATE {$temac['username']} LOGIN - TERMINATING OLD SESSION"); + unset($config['captiveportal'][$cpzone]['passthrumac'][$tmpvoucherdb[$emac['username']]]); + } + $tmpvoucherdb[$emac['username']] = $eid; + } + if (voucher_auth($emac['username']) <= 0) { + $ruleno = captiveportal_get_ipfw_passthru_ruleno($emac['mac']); + $pipeno = captiveportal_get_dn_passthru_ruleno($emac['mac']); + if ($ruleno) { + captiveportal_free_ipfw_ruleno($ruleno); + $macrules .= "delete {$ruleno}"; + ++$ruleno; + $macrules .= "delete {$ruleno}"; + } + if ($pipeno) { + captiveportal_free_dn_ruleno($pipeno); + $macrules .= "pipe delete {$pipeno}\n"; + ++$pipeno; + $macrules .= "pipe delete {$pipeno}\n"; + } + $writecfg = true; + captiveportal_logportalauth($emac['username'], $emac['mac'], $emac['ip'], "EXPIRED {$emac['username']} LOGIN - TERMINATING SESSION"); + unset($config['captiveportal'][$cpzone]['passthrumac'][$eid]); + } + } + } + unset($tmpvoucherdb); + if (!empty($macrules)) { + @file_put_contents("{$g['tmp_path']}/macentry.prunerules.tmp", $macrules); + unset($macrules); + mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/macentry.prunerules.tmp"); + } + if ($writecfg === true) + write_config("Prune session for auto-added macs"); + } +} + +/* remove a single client according to the DB entry */ +function captiveportal_disconnect($dbent, $radiusservers,$term_cause = 1,$stop_time = null) { + global $g, $config, $cpzone, $cpzoneid; + + $stop_time = (empty($stop_time)) ? time() : $stop_time; + + /* this client needs to be deleted - remove ipfw rules */ + if (isset($config['captiveportal'][$cpzone]['radacct_enable']) && !empty($radiusservers)) { + RADIUS_ACCOUNTING_STOP($dbent[1], // ruleno + $dbent[4], // username + $dbent[5], // sessionid + $dbent[0], // start time + $radiusservers, + $dbent[2], // clientip + $dbent[3], // clientmac + $term_cause, // Acct-Terminate-Cause + false, + $stop_time); + } + + if (is_ipaddr($dbent[2])) { + /* Delete client's ip entry from tables 1 and 2. */ + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 1, $dbent[2], $dbent[3]); + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 2, $dbent[2], $dbent[3]); + /* XXX: Redundant?! Ensure all pf(4) states are killed. */ + $_gb = @pfSense_kill_states($dbent[2]); + $_gb = @pfSense_kill_srcstates($dbent[2]); + } + + /* + * These are the pipe numbers we use to control traffic shaping for each logged in user via captive portal + * We could get an error if the pipe doesn't exist but everything should still be fine + */ + if (!empty($dbent[1])) { + $_gb = @pfSense_pipe_action("pipe delete {$dbent[1]}"); + $_gb = @pfSense_pipe_action("pipe delete " . ($dbent[1]+1)); + + /* Release the ruleno so it can be reallocated to new clients. */ + captiveportal_free_dn_ruleno($dbent[1]); + } + + // XMLRPC Call over to the master Voucher node + if(!empty($config['voucher'][$cpzone]['vouchersyncdbip'])) { + $syncip = $config['voucher'][$cpzone]['vouchersyncdbip']; + $syncport = $config['voucher'][$cpzone]['vouchersyncport']; + $syncpass = $config['voucher'][$cpzone]['vouchersyncpass']; + $vouchersyncusername = $config['voucher'][$cpzone]['vouchersyncusername']; + $remote_status = xmlrpc_sync_voucher_disconnect($dbent, $syncip, $syncport, $syncpass, $vouchersyncusername, $term_cause, $stop_time); + } + +} + +/* remove a single client by sessionid */ +function captiveportal_disconnect_client($sessionid, $term_cause = 1, $logoutReason = "LOGOUT") { + global $g, $config; + + $radiusservers = captiveportal_get_radius_servers(); + + /* read database */ + $result = captiveportal_read_db("WHERE sessionid = '{$sessionid}'"); + + /* find entry */ + if (!empty($result)) { + captiveportal_write_db("DELETE FROM captiveportal WHERE sessionid = '{$sessionid}'"); + + foreach ($result as $cpentry) { + if (empty($cpentry[11])) + $cpentry[11] = 'first'; + captiveportal_disconnect($cpentry, $radiusservers[$cpentry[11]], $term_cause); + captiveportal_logportalauth($cpentry[4], $cpentry[3], $cpentry[2], "DISCONNECT"); + } + unset($result); + } +} + +/* send RADIUS acct stop for all current clients */ +function captiveportal_radius_stop_all() { + global $config, $cpzone; + + if (!isset($config['captiveportal'][$cpzone]['radacct_enable'])) + return; + + $radiusservers = captiveportal_get_radius_servers(); + if (!empty($radiusservers)) { + $cpdb = captiveportal_read_db(); + foreach ($cpdb as $cpentry) { + if (empty($cpentry[11])) + $cpentry[11] = 'first'; + if (!empty($radiusservers[$cpentry[11]])) { + RADIUS_ACCOUNTING_STOP($cpentry[1], // ruleno + $cpentry[4], // username + $cpentry[5], // sessionid + $cpentry[0], // start time + $radiusservers[$cpentry[11]], + $cpentry[2], // clientip + $cpentry[3], // clientmac + 7); // Admin Reboot + } + } + } +} + +function captiveportal_passthrumac_configure_entry($macent) { + global $config, $g, $cpzone; + + $bwUp = 0; + if (!empty($macent['bw_up'])) + $bwUp = $macent['bw_up']; + else if (isset($config['captiveportal'][$cpzone]['bwdefaultup'])) + $bwUp = $config['captiveportal'][$cpzone]['bwdefaultup']; + $bwDown = 0; + if (!empty($macent['bw_down'])) + $bwDown = $macent['bw_down']; + else if (isset($config['captiveportal'][$cpzone]['bwdefaultdn'])) + $bwDown = $config['captiveportal'][$cpzone]['bwdefaultdn']; + + $ruleno = captiveportal_get_next_ipfw_ruleno(); + + if ($macent['action'] == 'pass') { + $pipeno = captiveportal_get_next_dn_ruleno(); + + $pipeup = $pipeno; + $_gb = @pfSense_pipe_action("pipe {$pipeno} config bw {$bwUp}Kbit/s queue 100 buckets 16"); + $pipedown = $pipeno + 1; + $_gb = @pfSense_pipe_action("pipe {$pipedown} config bw {$bwDown}Kbit/s queue 100 buckets 16"); + + $rules = "add {$ruleno} pipe {$pipeup} ip from any to any MAC any {$macent['mac']}\n"; + $ruleno++; + $rules .= "add {$ruleno} pipe {$pipedown} ip from any to any MAC {$macent['mac']} any\n"; + } + + return $rules; +} + +function captiveportal_passthrumac_delete_entry($macent) { + $rules = ""; + + if ($macent['action'] == 'pass') { + $ruleno = captiveportal_get_ipfw_passthru_ruleno($macent['mac']); + + if (!$ruleno) + return $rules; + + captiveportal_free_ipfw_ruleno($ruleno); + + $rules .= "delete {$ruleno}\n"; + $rules .= "delete " . ++$ruleno . "\n"; + + $pipeno = captiveportal_get_dn_passthru_ruleno($macent['mac']); + + if (!empty($pipeno)) { + captiveportal_free_dn_ruleno($pipeno); + $rules .= "pipe delete " . $pipeno . "\n"; + $rules .= "pipe delete " . ++$pipeno . "\n"; + } + } + + return $rules; +} + +function captiveportal_passthrumac_configure($lock = false) { + global $config, $g, $cpzone; + + $rules = ""; + + if (is_array($config['captiveportal'][$cpzone]['passthrumac'])) + foreach ($config['captiveportal'][$cpzone]['passthrumac'] as $macent) + $rules .= captiveportal_passthrumac_configure_entry($macent); + + return $rules; +} + +function captiveportal_passthrumac_findbyname($username) { + global $config, $cpzone; + + if (is_array($config['captiveportal'][$cpzone]['passthrumac'])) { + foreach ($config['captiveportal'][$cpzone]['passthrumac'] as $macent) { + if ($macent['username'] == $username) + return $macent; + } + } + return NULL; +} + +/* + * table (3=IN)/(4=OUT) hold allowed ip's without bw limits + */ +function captiveportal_allowedip_configure_entry($ipent, $ishostname = false) { + global $g; + + /* Instead of copying this entire function for something + * easy such as hostname vs ip address add this check + */ + if ($ishostname === true) { + if (!$g['booting']) { + $ipaddress = gethostbyname($ipent['hostname']); + if (!is_ipaddr($ipaddress)) + return; + } else + $ipaddress = ""; + } else + $ipaddress = $ipent['ip']; + + $rules = ""; + $cp_filterdns_conf = ""; + $enBwup = 0; + if (!empty($ipent['bw_up'])) + $enBwup = intval($ipent['bw_up']); + else if (isset($config['captiveportal'][$cpzone]['bwdefaultup'])) + $enBwup = $config['captiveportal'][$cpzone]['bwdefaultup']; + $enBwdown = 0; + if (!empty($ipent['bw_down'])) + $enBwdown = intval($ipent['bw_down']); + else if (isset($config['captiveportal'][$cpzone]['bwdefaultdn'])) + $enBwdown = $config['captiveportal'][$cpzone]['bwdefaultdn']; + + $pipeno = captiveportal_get_next_dn_ruleno(); + $_gb = @pfSense_pipe_action("pipe {$pipeno} config bw {$enBwup}Kbit/s queue 100 buckets 16"); + $pipedown = $pipeno + 1; + $_gb = @pfSense_pipe_action("pipe {$pipedown} config bw {$enBwdown}Kbit/s queue 100 buckets 16"); + if ($ishostname === true) { + $cp_filterdns_conf .= "ipfw {$ipent['hostname']} 3 pipe {$pipeno}\n"; + $cp_filterdns_conf .= "ipfw {$ipent['hostname']} 4 pipe {$pipedown}\n"; + if (!is_ipaddr($ipaddress)) + return array("", $cp_filterdns_conf); + } + $subnet = ""; + if (!empty($ipent['sn'])) + $subnet = "/{$ipent['sn']}"; + $rules .= "table 3 add {$ipaddress}{$subnet} {$pipeno}\n"; + $rules .= "table 4 add {$ipaddress}{$subnet} {$pipedown}\n"; + + if ($ishostname === true) + return array($rules, $cp_filterdns_conf); + else + return $rules; +} + +function captiveportal_allowedhostname_configure() { + global $config, $g, $cpzone; + + $rules = ""; + if (is_array($config['captiveportal'][$cpzone]['allowedhostname'])) { + $rules = "\n# captiveportal_allowedhostname_configure()\n"; + $cp_filterdns_conf = ""; + foreach ($config['captiveportal'][$cpzone]['allowedhostname'] as $hostnameent) { + $tmprules = captiveportal_allowedip_configure_entry($hostnameent, true); + $rules .= $tmprules[0]; + $cp_filterdns_conf .= $tmprules[1]; + } + $cp_filterdns_filename = "{$g['varetc_path']}/filterdns-{$cpzone}-captiveportal.conf"; + @file_put_contents($cp_filterdns_filename, $cp_filterdns_conf); + unset($cp_filterdns_conf); + if (isvalidpid("{$g['varrun_path']}/filterdns-{$cpzone}-cpah.pid")) + sigkillbypid("{$g['varrun_path']}/filterdns-{$cpzone}-cpah.pid", "HUP"); + else + mwexec("/usr/local/sbin/filterdns -p {$g['varrun_path']}/filterdns-{$cpzone}-cpah.pid -i 300 -c {$cp_filterdns_filename} -y {$cpzone} -d 1"); + } else { + killbypid("{$g['varrun_path']}/filterdns-{$cpzone}-cpah.pid"); + @unlink("{$g['varrun_path']}/filterdns-{$cpzone}-cpah.pid"); + } + + return $rules; +} + +function captiveportal_allowedip_configure() { + global $config, $g, $cpzone; + + $rules = ""; + if (is_array($config['captiveportal'][$cpzone]['allowedip'])) { + foreach ($config['captiveportal'][$cpzone]['allowedip'] as $ipent) + $rules .= captiveportal_allowedip_configure_entry($ipent); + } + + return $rules; +} + +/* get last activity timestamp given client IP address */ +function captiveportal_get_last_activity($ip, $mac = NULL) { + global $cpzone; + + $ipfwoutput = pfSense_ipfw_getTablestats($cpzone, 1, $ip, $mac); + /* Reading only from one of the tables is enough of approximation. */ + if (is_array($ipfwoutput)) { + return $ipfwoutput['timestamp']; + } + + return 0; +} + +function captiveportal_init_radius_servers() { + global $config, $g, $cpzone; + + /* generate radius server database */ + if ($config['captiveportal'][$cpzone]['radiusip'] && (!isset($config['captiveportal'][$cpzone]['auth_method']) || + ($config['captiveportal'][$cpzone]['auth_method'] == "radius"))) { + $radiusip = $config['captiveportal'][$cpzone]['radiusip']; + $radiusip2 = ($config['captiveportal'][$cpzone]['radiusip2']) ? $config['captiveportal'][$cpzone]['radiusip2'] : null; + $radiusip3 = ($config['captiveportal'][$cpzone]['radiusip3']) ? $config['captiveportal'][$cpzone]['radiusip3'] : null; + $radiusip4 = ($config['captiveportal'][$cpzone]['radiusip4']) ? $config['captiveportal'][$cpzone]['radiusip4'] : null; + + if ($config['captiveportal'][$cpzone]['radiusport']) + $radiusport = $config['captiveportal'][$cpzone]['radiusport']; + else + $radiusport = 1812; + if ($config['captiveportal'][$cpzone]['radiusacctport']) + $radiusacctport = $config['captiveportal'][$cpzone]['radiusacctport']; + else + $radiusacctport = 1813; + if ($config['captiveportal'][$cpzone]['radiusport2']) + $radiusport2 = $config['captiveportal'][$cpzone]['radiusport2']; + else + $radiusport2 = 1812; + if ($config['captiveportal'][$cpzone]['radiusport3']) + $radiusport3 = $config['captiveportal'][$cpzone]['radiusport3']; + else + $radiusport3 = 1812; + if ($config['captiveportal'][$cpzone]['radiusport4']) + $radiusport4 = $config['captiveportal'][$cpzone]['radiusport4']; + else + $radiusport4 = 1812; + + $radiuskey = $config['captiveportal'][$cpzone]['radiuskey']; + $radiuskey2 = $config['captiveportal'][$cpzone]['radiuskey2']; + $radiuskey3 = $config['captiveportal'][$cpzone]['radiuskey3']; + $radiuskey4 = $config['captiveportal'][$cpzone]['radiuskey4']; + + $cprdsrvlck = lock("captiveportalradius{$cpzone}", LOCK_EX); + $fd = @fopen("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db", "w"); + if (!$fd) { + captiveportal_syslog("Error: cannot open radius DB file in captiveportal_configure().\n"); + unlock($cprdsrvlck); + return 1; + } + if (isset($radiusip)) + fwrite($fd,$radiusip . "," . $radiusport . "," . $radiusacctport . "," . $radiuskey . ",first"); + if (isset($radiusip2)) + fwrite($fd,"\n" . $radiusip2 . "," . $radiusport2 . "," . $radiusacctport . "," . $radiuskey2 . ",first"); + if (isset($radiusip3)) + fwrite($fd,"\n" . $radiusip3 . "," . $radiusport3 . "," . $radiusacctport . "," . $radiuskey3 . ",second"); + if (isset($radiusip4)) + fwrite($fd,"\n" . $radiusip4 . "," . $radiusport4 . "," . $radiusacctport . "," . $radiuskey4 . ",second"); + + + fclose($fd); + unlock($cprdsrvlck); + } +} + +/* read RADIUS servers into array */ +function captiveportal_get_radius_servers() { + global $g, $cpzone; + + $cprdsrvlck = lock("captiveportalradius{$cpzone}"); + if (file_exists("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db")) { + $radiusservers = array(); + $cpradiusdb = file("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db", + FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if ($cpradiusdb) { + foreach($cpradiusdb as $cpradiusentry) { + $line = trim($cpradiusentry); + if ($line) { + $radsrv = array(); + list($radsrv['ipaddr'],$radsrv['port'],$radsrv['acctport'],$radsrv['key'], $context) = explode(",",$line); + } + if (empty($context)) { + if (!is_array($radiusservers['first'])) + $radiusservers['first'] = array(); + $radiusservers['first'] = $radsrv; + } else { + if (!is_array($radiusservers[$context])) + $radiusservers[$context] = array(); + $radiusservers[$context][] = $radsrv; + } + } + } + unlock($cprdsrvlck); + return $radiusservers; + } + + unlock($cprdsrvlck); + return false; +} + +/* log successful captive portal authentication to syslog */ +/* part of this code from php.net */ +function captiveportal_logportalauth($user,$mac,$ip,$status, $message = null) { + // Log it + if (!$message) + $message = "{$status}: {$user}, {$mac}, {$ip}"; + else { + $message = trim($message); + $message = "{$status}: {$user}, {$mac}, {$ip}, {$message}"; + } + captiveportal_syslog($message); +} + +/* log simple messages to syslog */ +function captiveportal_syslog($message) { + global $cpzone; + + $message = trim($message); + $message .= "Zone: {$cpzone} - {$message}"; + openlog("logportalauth", LOG_PID, LOG_LOCAL4); + // Log it + syslog(LOG_INFO, $message); + closelog(); +} + +function radius($username,$password,$clientip,$clientmac,$type, $radiusctx = null) { + global $g, $config, $cpzoneid; + + $pipeno = captiveportal_get_next_dn_ruleno(); + + /* If the pool is empty, return appropriate message and fail authentication */ + if (empty($pipeno)) { + $auth_list = array(); + $auth_list['auth_val'] = 1; + $auth_list['error'] = "System reached maximum login capacity"; + return $auth_list; + } + + $radiusservers = captiveportal_get_radius_servers(); + + if (is_null($radiusctx)) + $radiusctx = 'first'; + + $auth_list = RADIUS_AUTHENTICATION($username, + $password, + $radiusservers[$radiusctx], + $clientip, + $clientmac, + $pipeno); + + if ($auth_list['auth_val'] == 2) { + captiveportal_logportalauth($username,$clientmac,$clientip,$type); + $sessionid = portal_allow($clientip, + $clientmac, + $username, + $password, + $auth_list, + $pipeno, + $radiusctx); + } else { + captiveportal_free_dn_ruleno($pipeno); + } + + return $auth_list; +} + +function captiveportal_opendb() { + global $g, $cpzone; + + $DB = new SQLite3("{$g['vardb_path']}/captiveportal{$cpzone}.db"); + if (! $DB->exec("CREATE TABLE IF NOT EXISTS captiveportal (" . + "allow_time INTEGER, pipeno INTEGER, ip TEXT, mac TEXT, username TEXT, " . + "sessionid TEXT, bpassword TEXT, session_timeout INTEGER, idle_timeout INTEGER, " . + "session_terminate_time INTEGER, interim_interval INTEGER, radiusctx TEXT); " . + "CREATE UNIQUE INDEX IF NOT EXISTS idx_active ON captiveportal (sessionid, username); " . + "CREATE INDEX IF NOT EXISTS user ON captiveportal (username); " . + "CREATE INDEX IF NOT EXISTS ip ON captiveportal (ip); " . + "CREATE INDEX IF NOT EXISTS starttime ON captiveportal (allow_time)")) + captiveportal_syslog("Error during table {$cpzone} creation. Error message: {$DB->lastErrorMsg()}"); + + return $DB; +} + +/* read captive portal DB into array */ +function captiveportal_read_db($query = "") { + $cpdb = array(); + + $DB = captiveportal_opendb(); + if ($DB) { + $response = $DB->query("SELECT * FROM captiveportal {$query}"); + while ($row = $response->fetchArray()) + $cpdb[] = $row; + $DB->close(); + } + + return $cpdb; +} + +function captiveportal_remove_entries($remove) { + + if (!is_array($remove) || empty($remove)) + return; + + $query = "DELETE FROM captiveportal WHERE sessionid in ("; + foreach($remove as $idx => $unindex) { + $query .= "'{$unindex}'"; + if ($idx < (count($remove) - 1)) + $query .= ","; + } + $query .= ")"; + captiveportal_write_db($query); +} + +/* write captive portal DB */ +function captiveportal_write_db($queries) { + global $g; + + if (is_array($queries)) + $query = implode(";", $queries); + else + $query = $queries; + + $DB = captiveportal_opendb(); + if ($DB) { + $DB->exec("BEGIN TRANSACTION"); + $result = $DB->exec($query); + if (!$result) + captiveportal_syslog("Trying to modify DB returned error: {$DB->lastErrorMsg()}"); + else + $DB->exec("END TRANSACTION"); + $DB->close(); + return $result; + } else + return true; +} + +function captiveportal_write_elements() { + global $g, $config, $cpzone; + + $cpcfg = $config['captiveportal'][$cpzone]; + + if (!is_dir($g['captiveportal_element_path'])) + @mkdir($g['captiveportal_element_path']); + + if (is_array($cpcfg['element'])) { + conf_mount_rw(); + foreach ($cpcfg['element'] as $data) { + if (!@file_put_contents("{$g['captiveportal_element_path']}/{$data['name']}", base64_decode($data['content']))) { + printf(gettext("Error: cannot open '%s' in captiveportal_write_elements()%s"), $data['name'], "\n"); + return 1; + } + if (!file_exists("{$g['captiveportal_path']}/{$data['name']}")) + @symlink("{$g['captiveportal_element_path']}/{$data['name']}", "{$g['captiveportal_path']}/{$data['name']}"); + } + conf_mount_ro(); + } + + return 0; +} + +function captiveportal_free_dnrules($rulenos_start = 2000, $rulenos_range_max = 64500) { + global $cpzone; + + $cpruleslck = lock("captiveportalrulesdn", LOCK_EX); + if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules")); + $ridx = $rulenos_start; + while ($ridx < $rulenos_range_max) { + if ($rules[$ridx] == $cpzone) { + $rules[$ridx] = false; + $ridx++; + $rules[$ridx] = false; + $ridx++; + } else + $ridx += 2; + } + file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules)); + unset($rules); + } + unlock($cpruleslck); +} + +function captiveportal_get_next_dn_ruleno($rulenos_start = 2000, $rulenos_range_max = 64500) { + global $config, $g, $cpzone; + + $cpruleslck = lock("captiveportalrulesdn", LOCK_EX); + $ruleno = 0; + if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules")); + $ridx = $rulenos_start; + while ($ridx < $rulenos_range_max) { + if (empty($rules[$ridx])) { + $ruleno = $ridx; + $rules[$ridx] = $cpzone; + $ridx++; + $rules[$ridx] = $cpzone; + break; + } else { + $ridx += 2; + } + } + } else { + $rules = array_pad(array(), $rulenos_range_max, false); + $ruleno = $rulenos_start; + $rules[$rulenos_start] = $cpzone; + $rulenos_start++; + $rules[$rulenos_start] = $cpzone; + } + file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules)); + unlock($cpruleslck); + unset($rules); + + return $ruleno; +} + +function captiveportal_free_dn_ruleno($ruleno) { + global $config, $g; + + $cpruleslck = lock("captiveportalrulesdn", LOCK_EX); + if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules")); + $rules[$ruleno] = false; + $ruleno++; + $rules[$ruleno] = false; + file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules)); + unset($rules); + } + unlock($cpruleslck); +} + +function captiveportal_get_dn_passthru_ruleno($value) { + global $config, $g, $cpzone, $cpzoneid; + + $cpcfg = $config['captiveportal'][$cpzone]; + if(!isset($cpcfg['enable'])) + return NULL; + + $cpruleslck = lock("captiveportalrulesdn", LOCK_EX); + $ruleno = NULL; + if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules")); + unset($output); + $_gb = exec("/sbin/ipfw -x {$cpzoneid} show | /usr/bin/grep " . escapeshellarg($value) . " | /usr/bin/grep -v grep | /usr/bin/awk '{print $5}' | /usr/bin/head -n 1", $output); + $ruleno = intval($output[0]); + if (!$rules[$ruleno]) + $ruleno = NULL; + unset($rules); + } + unlock($cpruleslck); + + return $ruleno; +} + +/* + * This function will calculate the lowest free firewall ruleno + * within the range specified based on the actual logged on users + * + */ +function captiveportal_get_next_ipfw_ruleno($rulenos_start = 2, $rulenos_range_max = 64500) { + global $config, $g, $cpzone; + + $cpcfg = $config['captiveportal'][$cpzone]; + if(!isset($cpcfg['enable'])) + return NULL; + + $cpruleslck = lock("captiveportalrules{$cpzone}", LOCK_EX); + $ruleno = 0; + if (file_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")); + $ridx = $rulenos_start; + while ($ridx < $rulenos_range_max) { + if (empty($rules[$ridx])) { + $ruleno = $ridx; + $rules[$ridx] = $cpzone; + $ridx++; + $rules[$ridx] = $cpzone; + break; + } else { + /* + * This allows our traffic shaping pipes to be the in pipe the same as ruleno + * and the out pipe ruleno + 1. + */ + $ridx += 2; + } + } + } else { + $rules = array_pad(array(), $rulenos_range_max, false); + $ruleno = $rulenos_start; + $rules[$rulenos_start] = $cpzone; + $rulenos_start++; + $rules[$rulenos_start] = $cpzone; + } + file_put_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules", serialize($rules)); + unlock($cpruleslck); + unset($rules); + + return $ruleno; +} + +function captiveportal_free_ipfw_ruleno($ruleno) { + global $config, $g, $cpzone; + + $cpcfg = $config['captiveportal'][$cpzone]; + if(!isset($cpcfg['enable'])) + return NULL; + + $cpruleslck = lock("captiveportalrules{$cpzone}", LOCK_EX); + if (file_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")); + $rules[$ruleno] = false; + $ruleno++; + $rules[$ruleno] = false; + file_put_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules", serialize($rules)); + unset($rules); + } + unlock($cpruleslck); +} + +function captiveportal_get_ipfw_passthru_ruleno($value) { + global $config, $g, $cpzone, $cpzoneid; + + $cpcfg = $config['captiveportal'][$cpzone]; + if(!isset($cpcfg['enable'])) + return NULL; + + $cpruleslck = lock("captiveportalrules{$cpzone}", LOCK_EX); + $ruleno = NULL; + if (file_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")); + unset($output); + $_gb = exec("/sbin/ipfw -x {$cpzoneid} show | /usr/bin/grep " . escapeshellarg($value) . " | /usr/bin/grep -v grep | /usr/bin/awk '{print $1}' | /usr/bin/head -n 1", $output); + $ruleno = intval($output[0]); + if (!$rules[$ruleno]) + $ruleno = NULL; + unset($rules); + } + unlock($cpruleslck); + + return $ruleno; +} + +/** + * This function will calculate the traffic produced by a client + * based on its firewall rule + * + * Point of view: NAS + * + * Input means: from the client + * Output means: to the client + * + */ + +function getVolume($ip, $mac = NULL) { + global $config, $cpzone; + + $reverse = empty($config['captiveportal'][$cpzone]['reverseacct']) ? false : true; + $volume = array(); + // Initialize vars properly, since we don't want NULL vars + $volume['input_pkts'] = $volume['input_bytes'] = $volume['output_pkts'] = $volume['output_bytes'] = 0 ; + + $ipfw = pfSense_ipfw_getTablestats($cpzone, 1, $ip, $mac); + if (is_array($ipfw)) { + if ($reverse) { + $volume['output_pkts'] = $ipfw['packets']; + $volume['output_bytes'] = $ipfw['bytes']; + } + else { + $volume['input_pkts'] = $ipfw['packets']; + $volume['input_bytes'] = $ipfw['bytes']; + } + } + + $ipfw = pfSense_ipfw_getTablestats($cpzone, 2, $ip); + if (is_array($ipfw)) { + if ($reverse) { + $volume['input_pkts'] = $ipfw['packets']; + $volume['input_bytes'] = $ipfw['bytes']; + } + else { + $volume['output_pkts'] = $ipfw['packets']; + $volume['output_bytes'] = $ipfw['bytes']; + } + } + + return $volume; +} + +/** + * Get the NAS-IP-Address based on the current wan address + * + * Use functions in interfaces.inc to find this out + * + */ + +function getNasIP() +{ + global $config, $cpzone; + + if (empty($config['captiveportal'][$cpzone]['radiussrcip_attribute'])) { + $nasIp = get_interface_ip(); + } else { + if (is_ipaddr($config['captiveportal'][$cpzone]['radiussrcip_attribute'])) + $nasIp = $config['captiveportal'][$cpzone]['radiussrcip_attribute']; + else + $nasIp = get_interface_ip($config['captiveportal'][$cpzone]['radiussrcip_attribute']); + } + + if(!is_ipaddr($nasIp)) + $nasIp = "0.0.0.0"; + + return $nasIp; +} + +function portal_ip_from_client_ip($cliip) { + global $config, $cpzone; + + $isipv6 = is_ipaddrv6($cliip); + $interfaces = explode(",", $config['captiveportal'][$cpzone]['interface']); + foreach ($interfaces as $cpif) { + if ($isipv6) { + $ip = get_interface_ipv6($cpif); + $sn = get_interface_subnetv6($cpif); + } else { + $ip = get_interface_ip($cpif); + $sn = get_interface_subnet($cpif); + } + if (ip_in_subnet($cliip, "{$ip}/{$sn}")) + return $ip; + } + + $inet = ($isipv6) ? '-inet6' : '-inet'; + $iface = exec_command("/sbin/route -n get {$inet} {$cliip} | /usr/bin/awk '/interface/ { print \$2; };'"); + $iface = trim($iface, "\n"); + if (!empty($iface)) { + $ip = ($isipv6) ? find_interface_ipv6($iface) : find_interface_ip($iface); + if (is_ipaddr($ip)) + return $ip; + } + + // doesn't match up to any particular interface + // so let's set the portal IP to what PHP says + // the server IP issuing the request is. + // allows same behavior as 1.2.x where IP isn't + // in the subnet of any CP interface (static routes, etc.) + // rather than forcing to DNS hostname resolution + $ip = $_SERVER['SERVER_ADDR']; + if (is_ipaddr($ip)) + return $ip; + + return false; +} + +function portal_hostname_from_client_ip($cliip) { + global $config, $cpzone; + + $cpcfg = $config['captiveportal'][$cpzone]; + + if (isset($cpcfg['httpslogin'])) { + $listenporthttps = $cpcfg['listenporthttps'] ? $cpcfg['listenporthttps'] : ($cpcfg['zoneid'] + 8001); + $ourhostname = $cpcfg['httpsname']; + + if ($listenporthttps != 443) + $ourhostname .= ":" . $listenporthttps; + } else { + $listenporthttp = $cpcfg['listenporthttp'] ? $cpcfg['listenporthttp'] : ($cpcfg['zoneid'] + 8000); + $ifip = portal_ip_from_client_ip($cliip); + if (!$ifip) + $ourhostname = "{$config['system']['hostname']}.{$config['system']['domain']}"; + else + $ourhostname = (is_ipaddrv6($ifip)) ? "[{$ifip}]" : "{$ifip}"; + + if ($listenporthttp != 80) + $ourhostname .= ":" . $listenporthttp; + } + + return $ourhostname; +} + +/* functions move from index.php */ + +function portal_reply_page($redirurl, $type = null, $message = null, $clientmac = null, $clientip = null, $username = null, $password = null) { + global $g, $config, $cpzone; + + /* Get captive portal layout */ + if ($type == "redir") { + header("Location: {$redirurl}"); + return; + } else if ($type == "login") + $htmltext = get_include_contents("{$g['varetc_path']}/captiveportal_{$cpzone}.html"); + else + $htmltext = get_include_contents("{$g['varetc_path']}/captiveportal-{$cpzone}-error.html"); + + $cpcfg = $config['captiveportal'][$cpzone]; + + /* substitute the PORTAL_REDIRURL variable */ + if ($cpcfg['preauthurl']) { + $htmltext = str_replace("\$PORTAL_REDIRURL\$", "{$cpcfg['preauthurl']}", $htmltext); + $htmltext = str_replace("#PORTAL_REDIRURL#", "{$cpcfg['preauthurl']}", $htmltext); + } + + /* substitute other variables */ + $ourhostname = portal_hostname_from_client_ip($clientip); + $protocol = (isset($cpcfg['httpslogin'])) ? 'https://' : 'http://'; + $htmltext = str_replace("\$PORTAL_ACTION\$", "{$protocol}{$ourhostname}/", $htmltext); + $htmltext = str_replace("#PORTAL_ACTION#", "{$protocol}{$ourhostname}/", $htmltext); + + $htmltext = str_replace("\$PORTAL_ZONE\$", htmlspecialchars($cpzone), $htmltext); + $htmltext = str_replace("\$PORTAL_REDIRURL\$", htmlspecialchars($redirurl), $htmltext); + $htmltext = str_replace("\$PORTAL_MESSAGE\$", htmlspecialchars($message), $htmltext); + $htmltext = str_replace("\$CLIENT_MAC\$", htmlspecialchars($clientmac), $htmltext); + $htmltext = str_replace("\$CLIENT_IP\$", htmlspecialchars($clientip), $htmltext); + + // Special handling case for captive portal master page so that it can be ran + // through the PHP interpreter using the include method above. We convert the + // $VARIABLE$ case to #VARIABLE# in /etc/inc/captiveportal.inc before writing out. + $htmltext = str_replace("#PORTAL_ZONE#", htmlspecialchars($cpzone), $htmltext); + $htmltext = str_replace("#PORTAL_REDIRURL#", htmlspecialchars($redirurl), $htmltext); + $htmltext = str_replace("#PORTAL_MESSAGE#", htmlspecialchars($message), $htmltext); + $htmltext = str_replace("#CLIENT_MAC#", htmlspecialchars($clientmac), $htmltext); + $htmltext = str_replace("#CLIENT_IP#", htmlspecialchars($clientip), $htmltext); + $htmltext = str_replace("#USERNAME#", htmlspecialchars($username), $htmltext); + $htmltext = str_replace("#PASSWORD#", htmlspecialchars($password), $htmltext); + + echo $htmltext; +} + +function portal_mac_radius($clientmac,$clientip) { + global $config, $cpzone; + + $radmac_secret = $config['captiveportal'][$cpzone]['radmac_secret']; + + /* authentication against the radius server */ + $username = mac_format($clientmac); + $auth_list = radius($username,$radmac_secret,$clientip,$clientmac,"MACHINE LOGIN"); + if ($auth_list['auth_val'] == 2) + return TRUE; + + if (!empty($auth_list['url_redirection'])) + portal_reply_page($auth_list['url_redirection'], "redir"); + + return FALSE; +} + +function captiveportal_reapply_attributes($cpentry, $attributes) { + global $config, $cpzone, $g; + + $dwfaultbw_up = isset($config['captiveportal'][$cpzone]['bwdefaultup']) ? $config['captiveportal'][$cpzone]['bwdefaultup'] : 0; + $dwfaultbw_down = isset($config['captiveportal'][$cpzone]['bwdefaultdn']) ? $config['captiveportal'][$cpzone]['bwdefaultdn'] : 0; + $bw_up = isset($attributes['bw_up']) ? round(intval($attributes['bw_up'])/1000, 2) : $dwfaultbw_up; + $bw_down = isset($attributes['bw_down']) ? round(intval($attributes['bw_down'])/1000, 2) : $dwfaultbw_down; + $bw_up_pipeno = $cpentry[1]; + $bw_down_pipeno = $cpentry[1]+1; + + $_gb = @pfSense_pipe_action("pipe {$bw_up_pipeno} config bw {$bw_up}Kbit/s queue 100 buckets 16"); + $_gb = @pfSense_pipe_action("pipe {$bw_down_pipeno} config bw {$bw_down}Kbit/s queue 100 buckets 16"); + //captiveportal_logportalauth($cpentry[4], $cpentry[3], $cpentry[2], "RADIUS_BANDWIDTH_REAPPLY", "{$bw_up}/{$bw_down}"); + + unset($bw_up_pipeno, $bw_down_pipeno, $bw_up, $bw_down); +} + +function portal_allow($clientip,$clientmac,$username,$password = null, $attributes = null, $pipeno = null, $radiusctx = null) { + global $redirurl, $g, $config, $type, $passthrumac, $_POST, $cpzone, $cpzoneid; + + // Ensure we create an array if we are missing attributes + if (!is_array($attributes)) + $attributes = array(); + + unset($sessionid); + + /* Do not allow concurrent login execution. */ + $cpdblck = lock("captiveportaldb{$cpzone}", LOCK_EX); + + if ($attributes['voucher']) + $remaining_time = $attributes['session_timeout']; + + $writecfg = false; + /* Find an existing session */ + if ((isset($config['captiveportal'][$cpzone]['noconcurrentlogins'])) && $passthrumac) { + if (isset($config['captiveportal'][$cpzone]['passthrumacadd'])) { + $mac = captiveportal_passthrumac_findbyname($username); + if (!empty($mac)) { + if ($_POST['replacemacpassthru']) { + foreach ($config['captiveportal'][$cpzone]['passthrumac'] as $idx => $macent) { + if ($macent['mac'] == $mac['mac']) { + $macrules = ""; + $ruleno = captiveportal_get_ipfw_passthru_ruleno($mac['mac']); + $pipeno = captiveportal_get_dn_passthru_ruleno($mac['mac']); + if ($ruleno) { + captiveportal_free_ipfw_ruleno($ruleno); + $macrules .= "delete {$ruleno}\n"; + ++$ruleno; + $macrules .= "delete {$ruleno}\n"; + } + if ($pipeno) { + captiveportal_free_dn_ruleno($pipeno); + $macrules .= "pipe delete {$pipeno}\n"; + ++$pipeno; + $macrules .= "pipe delete {$pipeno}\n"; + } + unset($config['captiveportal'][$cpzone]['passthrumac'][$idx]); + $mac['action'] = 'pass'; + $mac['mac'] = $clientmac; + $config['captiveportal'][$cpzone]['passthrumac'][] = $mac; + $macrules .= captiveportal_passthrumac_configure_entry($mac); + file_put_contents("{$g['tmp_path']}/macentry_{$cpzone}.rules.tmp", $macrules); + mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/macentry_{$cpzone}.rules.tmp"); + $writecfg = true; + $sessionid = true; + break; + } + } + } else { + portal_reply_page($redirurl, "error", "Username: {$username} is already authenticated using another MAC address.", + $clientmac, $clientip, $username, $password); + unlock($cpdblck); + return; + } + } + } + } + + /* read in client database */ + $query = "WHERE ip = '{$clientip}'"; + $tmpusername = strtolower($username); + if (isset($config['captiveportal'][$cpzone]['noconcurrentlogins'])) + $query .= " OR (username != 'unauthenticated' AND lower(username) = '{$tmpusername}')"; + $cpdb = captiveportal_read_db($query); + + /* Snapshot the timestamp */ + $allow_time = time(); + $radiusservers = captiveportal_get_radius_servers(); + $unsetindexes = array(); + if (is_null($radiusctx)) + $radiusctx = 'first'; + + foreach ($cpdb as $cpentry) { + if (empty($cpentry[11])) { + $cpentry[11] = 'first'; + } + /* on the same ip */ + if ($cpentry[2] == $clientip) { + if (isset($config['captiveportal'][$cpzone]['nomacfilter']) || $cpentry[3] == $clientmac) + captiveportal_logportalauth($cpentry[4],$cpentry[3],$cpentry[2],"CONCURRENT LOGIN - REUSING OLD SESSION"); + else + captiveportal_logportalauth($cpentry[4],$cpentry[3],$cpentry[2],"CONCURRENT LOGIN - REUSING IP {$cpentry[2]} WITH DIFFERENT MAC ADDRESS {$cpentry[3]}"); + $sessionid = $cpentry[5]; + break; + } + elseif (($attributes['voucher']) && ($username != 'unauthenticated') && ($cpentry[4] == $username)) { + // user logged in with an active voucher. Check for how long and calculate + // how much time we can give him (voucher credit - used time) + $remaining_time = $cpentry[0] + $cpentry[7] - $allow_time; + if ($remaining_time < 0) // just in case. + $remaining_time = 0; + + /* This user was already logged in so we disconnect the old one */ + captiveportal_disconnect($cpentry,$radiusservers[$cpentry[11]],13); + captiveportal_logportalauth($cpentry[4],$cpentry[3],$cpentry[2],"CONCURRENT LOGIN - TERMINATING OLD SESSION"); + $unsetindexes[] = $cpentry[5]; + break; + } + elseif ((isset($config['captiveportal'][$cpzone]['noconcurrentlogins'])) && ($username != 'unauthenticated')) { + /* on the same username */ + if (strcasecmp($cpentry[4], $username) == 0) { + /* This user was already logged in so we disconnect the old one */ + captiveportal_disconnect($cpentry,$radiusservers[$cpentry[11]],13); + captiveportal_logportalauth($cpentry[4],$cpentry[3],$cpentry[2],"CONCURRENT LOGIN - TERMINATING OLD SESSION"); + $unsetindexes[] = $cpentry[5]; + break; + } + } + } + unset($cpdb); + + if (!empty($unsetindexes)) + captiveportal_remove_entries($unsetindexes); + + if ($attributes['voucher'] && $remaining_time <= 0) + return 0; // voucher already used and no time left + + if (!isset($sessionid)) { + /* generate unique session ID */ + $tod = gettimeofday(); + $sessionid = substr(md5(mt_rand() . $tod['sec'] . $tod['usec'] . $clientip . $clientmac), 0, 16); + + if ($passthrumac) { + $mac = array(); + $mac['action'] = 'pass'; + $mac['mac'] = $clientmac; + $mac['ip'] = $clientip; /* Used only for logging */ + if (isset($config['captiveportal'][$cpzone]['passthrumacaddusername'])) { + $mac['username'] = $username; + if ($attributes['voucher']) + $mac['logintype'] = "voucher"; + } + $mac['descr'] = "Auto added pass-through MAC for user {$username}"; + if (!empty($bw_up)) + $mac['bw_up'] = $bw_up; + if (!empty($bw_down)) + $mac['bw_down'] = $bw_down; + if (!is_array($config['captiveportal'][$cpzone]['passthrumac'])) + $config['captiveportal'][$cpzone]['passthrumac'] = array(); + $config['captiveportal'][$cpzone]['passthrumac'][] = $mac; + unlock($cpdblck); + $macrules = captiveportal_passthrumac_configure_entry($mac); + file_put_contents("{$g['tmp_path']}/macentry_{$cpzone}.rules.tmp", $macrules); + mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/macentry_{$cpzone}.rules.tmp"); + $writecfg = true; + } else { + /* See if a pipeno is passed, if not start sessions because this means there isn't one atm */ + if (is_null($pipeno)) + $pipeno = captiveportal_get_next_dn_ruleno(); + + /* if the pool is empty, return appropriate message and exit */ + if (is_null($pipeno)) { + portal_reply_page($redirurl, "error", "System reached maximum login capacity"); + log_error("Zone: {$cpzone} - WARNING! Captive portal has reached maximum login capacity"); + unlock($cpdblck); + return; + } + + $dwfaultbw_up = isset($config['captiveportal'][$cpzone]['bwdefaultup']) ? $config['captiveportal'][$cpzone]['bwdefaultup'] : 0; + $dwfaultbw_down = isset($config['captiveportal'][$cpzone]['bwdefaultdn']) ? $config['captiveportal'][$cpzone]['bwdefaultdn'] : 0; + $bw_up = isset($attributes['bw_up']) ? round(intval($attributes['bw_up'])/1000, 2) : $dwfaultbw_up; + $bw_down = isset($attributes['bw_down']) ? round(intval($attributes['bw_down'])/1000, 2) : $dwfaultbw_down; + + $bw_up_pipeno = $pipeno; + $bw_down_pipeno = $pipeno + 1; + //$bw_up /= 1000; // Scale to Kbit/s + $_gb = @pfSense_pipe_action("pipe {$bw_up_pipeno} config bw {$bw_up}Kbit/s queue 100 buckets 16"); + $_gb = @pfSense_pipe_action("pipe {$bw_down_pipeno} config bw {$bw_down}Kbit/s queue 100 buckets 16"); + + $clientsn = (is_ipaddrv6($clientip)) ? 128 : 32; + if (!isset($config['captiveportal'][$cpzone]['nomacfilter'])) + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XADD, 1, $clientip, $clientsn, $clientmac, $bw_up_pipeno); + else + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XADD, 1, $clientip, $clientsn, NULL, $bw_up_pipeno); + + if (!isset($config['captiveportal'][$cpzone]['nomacfilter'])) + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XADD, 2, $clientip, $clientsn, $clientmac, $bw_down_pipeno); + else + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XADD, 2, $clientip, $clientsn, NULL, $bw_down_pipeno); + + if ($attributes['voucher']) + $attributes['session_timeout'] = $remaining_time; + + /* handle empty attributes */ + $session_timeout = (!empty($attributes['session_timeout'])) ? $attributes['session_timeout'] : 'NULL'; + $idle_timeout = (!empty($attributes['idle_timeout'])) ? $attributes['idle_timeout'] : 'NULL'; + $session_terminate_time = (!empty($attributes['session_terminate_time'])) ? $attributes['session_terminate_time'] : 'NULL'; + $interim_interval = (!empty($attributes['interim_interval'])) ? $attributes['interim_interval'] : 'NULL'; + + /* escape username */ + $safe_username = SQLite3::escapeString($username); + + /* encode password in Base64 just in case it contains commas */ + $bpassword = base64_encode($password); + $insertquery = "INSERT INTO captiveportal (allow_time, pipeno, ip, mac, username, sessionid, bpassword, session_timeout, idle_timeout, session_terminate_time, interim_interval, radiusctx) "; + $insertquery .= "VALUES ({$allow_time}, {$pipeno}, '{$clientip}', '{$clientmac}', '{$safe_username}', '{$sessionid}', '{$bpassword}', "; + $insertquery .= "{$session_timeout}, {$idle_timeout}, {$session_terminate_time}, {$interim_interval}, '{$radiusctx}')"; + + /* store information to database */ + captiveportal_write_db($insertquery); + unlock($cpdblck); + unset($insertquery, $bpassword); + + if (isset($config['captiveportal'][$cpzone]['radacct_enable']) && !empty($radiusservers[$radiusctx])) { + $acct_val = RADIUS_ACCOUNTING_START($pipeno, $username, $sessionid, $radiusservers[$radiusctx], $clientip, $clientmac); + if ($acct_val == 1) + captiveportal_logportalauth($username,$clientmac,$clientip,$type,"RADIUS ACCOUNTING FAILED"); + } + } + } else { + /* NOTE: #3062-11 If the pipeno has been allocated free it to not DoS the CP and maintain proper operation as in radius() case */ + if (!is_null($pipeno)) + captiveportal_free_dn_ruleno($pipeno); + + unlock($cpdblck); + } + + if ($writecfg == true) + write_config(); + + /* redirect user to desired destination */ + if (!empty($attributes['url_redirection'])) + $my_redirurl = $attributes['url_redirection']; + else if (!empty($redirurl)) + $my_redirurl = $redirurl; + else if (!empty($config['captiveportal'][$cpzone]['redirurl'])) + $my_redirurl = $config['captiveportal'][$cpzone]['redirurl']; + + if(isset($config['captiveportal'][$cpzone]['logoutwin_enable']) && !$passthrumac) { + $ourhostname = portal_hostname_from_client_ip($clientip); + $protocol = (isset($config['captiveportal'][$cpzone]['httpslogin'])) ? 'https://' : 'http://'; + $logouturl = "{$protocol}{$ourhostname}/"; + + if (isset($attributes['reply_message'])) + $message = $attributes['reply_message']; + else + $message = 0; + + include("{$g['varetc_path']}/captiveportal-{$cpzone}-logout.html"); + + } else { + portal_reply_page($my_redirurl, "redir", "Just redirect the user."); + } + + return $sessionid; +} + + +/* + * Used for when pass-through credits are enabled. + * Returns true when there was at least one free login to deduct for the MAC. + * Expired entries are removed as they are seen. + * Active entries are updated according to the configuration. + */ +function portal_consume_passthrough_credit($clientmac) { + global $config, $cpzone; + + if (!empty($config['captiveportal'][$cpzone]['freelogins_count']) && is_numeric($config['captiveportal'][$cpzone]['freelogins_count'])) + $freeloginscount = $config['captiveportal'][$cpzone]['freelogins_count']; + else + return false; + + if (!empty($config['captiveportal'][$cpzone]['freelogins_resettimeout']) && is_numeric($config['captiveportal'][$cpzone]['freelogins_resettimeout'])) + $resettimeout = $config['captiveportal'][$cpzone]['freelogins_resettimeout']; + else + return false; + + if ($freeloginscount < 1 || $resettimeout <= 0 || !$clientmac) + return false; + + $updatetimeouts = isset($config['captiveportal'][$cpzone]['freelogins_updatetimeouts']); + + /* + * Read database of used MACs. Lines are a comma-separated list + * of the time, MAC, then the count of pass-through credits remaining. + */ + $usedmacs = captiveportal_read_usedmacs_db(); + + $currenttime = time(); + $found = false; + foreach ($usedmacs as $key => $usedmac) { + $usedmac = explode(",", $usedmac); + + if ($usedmac[1] == $clientmac) { + if ($usedmac[0] + ($resettimeout * 3600) > $currenttime) { + if ($usedmac[2] < 1) { + if ($updatetimeouts) { + $usedmac[0] = $currenttime; + unset($usedmacs[$key]); + $usedmacs[] = implode(",", $usedmac); + captiveportal_write_usedmacs_db($usedmacs); + } + + return false; + } else { + $usedmac[2] -= 1; + $usedmacs[$key] = implode(",", $usedmac); + } + + $found = true; + } else + unset($usedmacs[$key]); + + break; + } else if ($usedmac[0] + ($resettimeout * 3600) <= $currenttime) + unset($usedmacs[$key]); + } + + if (!$found) { + $usedmac = array($currenttime, $clientmac, $freeloginscount - 1); + $usedmacs[] = implode(",", $usedmac); + } + + captiveportal_write_usedmacs_db($usedmacs); + return true; +} + +function captiveportal_read_usedmacs_db() { + global $g, $cpzone; + + $cpumaclck = lock("captiveusedmacs{$cpzone}"); + if (file_exists("{$g['vardb_path']}/captiveportal_usedmacs_{$cpzone}.db")) { + $usedmacs = file("{$g['vardb_path']}/captiveportal_usedmacs_{$cpzone}.db", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if (!$usedmacs) + $usedmacs = array(); + } else + $usedmacs = array(); + + unlock($cpumaclck); + return $usedmacs; +} + +function captiveportal_write_usedmacs_db($usedmacs) { + global $g, $cpzone; + + $cpumaclck = lock("captiveusedmacs{$cpzone}", LOCK_EX); + @file_put_contents("{$g['vardb_path']}/captiveportal_usedmacs_{$cpzone}.db", implode("\n", $usedmacs)); + unlock($cpumaclck); +} + +function captiveportal_blocked_mac($mac) { + global $config, $g, $cpzone; + + if (empty($mac) || !is_macaddr($mac)) + return false; + + if (!is_array($config['captiveportal'][$cpzone]['passthrumac'])) + return false; + + foreach ($config['captiveportal'][$cpzone]['passthrumac'] as $passthrumac) + if (($passthrumac['action'] == 'block') && + ($passthrumac['mac'] == strtolower($mac))) + return true; + + return false; + +} + +function captiveportal_send_server_accounting($off = false) { + global $cpzone, $config; + + if (!isset($config['captiveportal'][$cpzone]['radacct_enable'])) { + return; + } + if ($off) { + $racct = new Auth_RADIUS_Acct_Off; + } else { + $racct = new Auth_RADIUS_Acct_On; + } + $radiusservers = captiveportal_get_radius_servers(); + if (empty($radiusservers)) { + return; + } + foreach ($radiusservers['first'] as $radsrv) { + // Add a new server to our instance + $racct->addServer($radsrv['ipaddr'], $radsrv['acctport'], $radsrv['key']); + } + if (PEAR::isError($racct->start())) { + $retvalue['acct_val'] = 1; + $retvalue['error'] = $racct->getMessage(); + + // If we encounter an error immediately stop this function and go back + $racct->close(); + return $retvalue; + } + // Send request + $result = $racct->send(); + // Evaluation of the response + // 5 -> Accounting-Response + // See RFC2866 for this. + if (PEAR::isError($result)) { + $retvalue['acct_val'] = 1; + $retvalue['error'] = $result->getMessage(); + } else if ($result === true) { + $retvalue['acct_val'] = 5 ; + } else { + $retvalue['acct_val'] = 1 ; + } + + $racct->close(); + return $retvalue; +} +?> diff --git a/etc/inc/certs.inc b/etc/inc/certs.inc new file mode 100644 index 000000000..8df3e5d21 --- /dev/null +++ b/etc/inc/certs.inc @@ -0,0 +1,755 @@ + + 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. + + DISABLE_PHP_LINT_CHECKING + pfSense_MODULE: certificate_managaer +*/ + +define("OPEN_SSL_CONF_PATH", "/etc/ssl/openssl.cnf"); + +require_once("functions.inc"); + +global $openssl_digest_algs; +$openssl_digest_algs = array("sha1", "sha224", "sha256", "sha384", "sha512"); + +global $openssl_crl_status; +$openssl_crl_status = array( + OCSP_REVOKED_STATUS_NOSTATUS => "No Status (default)", + OCSP_REVOKED_STATUS_UNSPECIFIED => "Unspecified", + OCSP_REVOKED_STATUS_KEYCOMPROMISE => "Key Compromise", + OCSP_REVOKED_STATUS_CACOMPROMISE => "CA Compromise", + OCSP_REVOKED_STATUS_AFFILIATIONCHANGED => "Affiliation Changed", + OCSP_REVOKED_STATUS_SUPERSEDED => "Superseded", + OCSP_REVOKED_STATUS_CESSATIONOFOPERATION => "Cessation of Operation", + OCSP_REVOKED_STATUS_CERTIFICATEHOLD => "Certificate Hold" +); + +function & lookup_ca($refid) { + global $config; + + if (is_array($config['ca'])) + foreach ($config['ca'] as & $ca) + if ($ca['refid'] == $refid) + return $ca; + + return false; +} + +function & lookup_ca_by_subject($subject) { + global $config; + + if (is_array($config['ca'])) + foreach ($config['ca'] as & $ca) + { + $ca_subject = cert_get_subject($ca['crt']); + if ($ca_subject == $subject) + return $ca; + } + + return false; +} + +function & lookup_cert($refid) { + global $config; + + if (is_array($config['cert'])) + foreach ($config['cert'] as & $cert) + if ($cert['refid'] == $refid) + return $cert; + + return false; +} + +function & lookup_cert_by_name($name) { + global $config; + if (is_array($config['cert'])) + foreach ($config['cert'] as & $cert) + if ($cert['descr'] == $name) + return $cert; +} + +function & lookup_crl($refid) { + global $config; + + if (is_array($config['crl'])) + foreach ($config['crl'] as & $crl) + if ($crl['refid'] == $refid) + return $crl; + + return false; +} + +function ca_chain_array(& $cert) { + if($cert['caref']) { + $chain = array(); + $crt = lookup_ca($cert['caref']); + $chain[] = $crt; + while ($crt) { + $caref = $crt['caref']; + if($caref) + $crt = lookup_ca($caref); + else + $crt = false; + if($crt) + $chain[] = $crt; + } + return $chain; + } + return false; +} + +function ca_chain(& $cert) { + if($cert['caref']) { + $ca = ""; + $cas = ca_chain_array($cert); + if (is_array($cas)) + foreach ($cas as & $ca_cert) + { + $ca .= base64_decode($ca_cert['crt']); + $ca .= "\n"; + } + return $ca; + } + return ""; +} + +function ca_import(& $ca, $str, $key="", $serial=0) { + global $config; + + $ca['crt'] = base64_encode($str); + if (!empty($key)) + $ca['prv'] = base64_encode($key); + if (!empty($serial)) + $ca['serial'] = $serial; + $subject = cert_get_subject($str, false); + $issuer = cert_get_issuer($str, false); + + // Find my issuer unless self-signed + if($issuer <> $subject) { + $issuer_crt =& lookup_ca_by_subject($issuer); + if($issuer_crt) + $ca['caref'] = $issuer_crt['refid']; + } + + /* Correct if child certificate was loaded first */ + if (is_array($config['ca'])) + foreach ($config['ca'] as & $oca) + { + $issuer = cert_get_issuer($oca['crt']); + if($ca['refid']<>$oca['refid'] && $issuer==$subject) + $oca['caref'] = $ca['refid']; + } + if (is_array($config['cert'])) + foreach ($config['cert'] as & $cert) + { + $issuer = cert_get_issuer($cert['crt']); + if($issuer==$subject) + $cert['caref'] = $ca['refid']; + } + return true; +} + +function ca_create(& $ca, $keylen, $lifetime, $dn, $digest_alg = "sha256") { + + $args = array( + "x509_extensions" => "v3_ca", + "digest_alg" => $digest_alg, + "private_key_bits" => (int)$keylen, + "private_key_type" => OPENSSL_KEYTYPE_RSA, + "encrypt_key" => false); + + // generate a new key pair + $res_key = openssl_pkey_new($args); + if (!$res_key) return false; + + // generate a certificate signing request + $res_csr = openssl_csr_new($dn, $res_key, $args); + if (!$res_csr) return false; + + // self sign the certificate + $res_crt = openssl_csr_sign($res_csr, null, $res_key, $lifetime, $args); + if (!$res_crt) return false; + + // export our certificate data + if (!openssl_pkey_export($res_key, $str_key) || + !openssl_x509_export($res_crt, $str_crt)) + return false; + + // return our ca information + $ca['crt'] = base64_encode($str_crt); + $ca['prv'] = base64_encode($str_key); + $ca['serial'] = 0; + + return true; +} + +function ca_inter_create(& $ca, $keylen, $lifetime, $dn, $caref, $digest_alg = "sha256") { + // Create Intermediate Certificate Authority + $signing_ca =& lookup_ca($caref); + if (!$signing_ca) + return false; + + $signing_ca_res_crt = openssl_x509_read(base64_decode($signing_ca['crt'])); + $signing_ca_res_key = openssl_pkey_get_private(array(0 => base64_decode($signing_ca['prv']) , 1 => "")); + if (!$signing_ca_res_crt || !$signing_ca_res_key) return false; + $signing_ca_serial = ++$signing_ca['serial']; + + $args = array( + "x509_extensions" => "v3_ca", + "digest_alg" => $digest_alg, + "private_key_bits" => (int)$keylen, + "private_key_type" => OPENSSL_KEYTYPE_RSA, + "encrypt_key" => false); + + // generate a new key pair + $res_key = openssl_pkey_new($args); + if (!$res_key) return false; + + // generate a certificate signing request + $res_csr = openssl_csr_new($dn, $res_key, $args); + if (!$res_csr) return false; + + // Sign the certificate + $res_crt = openssl_csr_sign($res_csr, $signing_ca_res_crt, $signing_ca_res_key, $lifetime, $args, $signing_ca_serial); + if (!$res_crt) return false; + + // export our certificate data + if (!openssl_pkey_export($res_key, $str_key) || + !openssl_x509_export($res_crt, $str_crt)) + return false; + + // return our ca information + $ca['crt'] = base64_encode($str_crt); + $ca['prv'] = base64_encode($str_key); + $ca['serial'] = 0; + + return true; +} + +function cert_import(& $cert, $crt_str, $key_str) { + + $cert['crt'] = base64_encode($crt_str); + $cert['prv'] = base64_encode($key_str); + + $subject = cert_get_subject($crt_str, false); + $issuer = cert_get_issuer($crt_str, false); + + // Find my issuer unless self-signed + if($issuer <> $subject) { + $issuer_crt =& lookup_ca_by_subject($issuer); + if($issuer_crt) + $cert['caref'] = $issuer_crt['refid']; + } + return true; +} + +function cert_create(& $cert, $caref, $keylen, $lifetime, $dn, $type="user", $digest_alg = "sha256") { + + $ca =& lookup_ca($caref); + if (!$ca) + return false; + + $ca_str_crt = base64_decode($ca['crt']); + $ca_str_key = base64_decode($ca['prv']); + $ca_res_crt = openssl_x509_read($ca_str_crt); + $ca_res_key = openssl_pkey_get_private(array(0 => $ca_str_key, 1 => "")); + if(!$ca_res_key) return false; + $ca_serial = ++$ca['serial']; + + switch ($type) { + case "ca": + $cert_type = "v3_ca"; + break; + case "server": + $cert_type = "server"; + break; + default: + $cert_type = "usr_cert"; + break; + } + + // in case of using Subject Alternative Names use other sections (with postfix '_san') + // pass subjectAltName over environment variable 'SAN' + if ($dn['subjectAltName']) { + putenv("SAN={$dn['subjectAltName']}"); // subjectAltName can be set _only_ via configuration file + $cert_type .= '_san'; + unset($dn['subjectAltName']); + } + + $args = array( + "x509_extensions" => $cert_type, + "digest_alg" => $digest_alg, + "private_key_bits" => (int)$keylen, + "private_key_type" => OPENSSL_KEYTYPE_RSA, + "encrypt_key" => false); + + // generate a new key pair + $res_key = openssl_pkey_new($args); + if(!$res_key) return false; + + // generate a certificate signing request + $res_csr = openssl_csr_new($dn, $res_key, $args); + if(!$res_csr) return false; + + // self sign the certificate + $res_crt = openssl_csr_sign($res_csr, $ca_res_crt, $ca_res_key, $lifetime, + $args, $ca_serial); + if(!$res_crt) return false; + + // export our certificate data + if (!openssl_pkey_export($res_key, $str_key) || + !openssl_x509_export($res_crt, $str_crt)) + return false; + + // return our certificate information + $cert['caref'] = $caref; + $cert['crt'] = base64_encode($str_crt); + $cert['prv'] = base64_encode($str_key); + $cert['type'] = $type; + + return true; +} + +function csr_generate(& $cert, $keylen, $dn, $digest_alg = "sha256") { + + $args = array( + "x509_extensions" => "v3_req", + "digest_alg" => $digest_alg, + "private_key_bits" => (int)$keylen, + "private_key_type" => OPENSSL_KEYTYPE_RSA, + "encrypt_key" => false); + + // generate a new key pair + $res_key = openssl_pkey_new($args); + if(!$res_key) return false; + + // generate a certificate signing request + $res_csr = openssl_csr_new($dn, $res_key, $args); + if(!$res_csr) return false; + + // export our request data + if (!openssl_pkey_export($res_key, $str_key) || + !openssl_csr_export($res_csr, $str_csr)) + return false; + + // return our request information + $cert['csr'] = base64_encode($str_csr); + $cert['prv'] = base64_encode($str_key); + + return true; +} + +function csr_complete(& $cert, $str_crt) { + + // return our request information + $cert['crt'] = base64_encode($str_crt); + unset($cert['csr']); + + return true; +} + +function csr_get_subject($str_crt, $decode = true) { + + if ($decode) + $str_crt = base64_decode($str_crt); + + $components = openssl_csr_get_subject($str_crt); + + if (empty($components) || !is_array($components)) + return "unknown"; + + ksort($components); + foreach ($components as $a => $v) { + if (!strlen($subject)) + $subject = "{$a}={$v}"; + else + $subject = "{$a}={$v}, {$subject}"; + } + + return $subject; +} + +function cert_get_subject($str_crt, $decode = true) { + + if ($decode) + $str_crt = base64_decode($str_crt); + + $inf_crt = openssl_x509_parse($str_crt); + $components = $inf_crt['subject']; + + if (empty($components) || !is_array($components)) + return "unknown"; + + ksort($components); + foreach ($components as $a => $v) { + if (is_array($v)) { + ksort($v); + foreach ($v as $w) { + $asubject = "{$a}={$w}"; + $subject = (strlen($subject)) ? "{$asubject}, {$subject}" : $asubject; + } + } else { + $asubject = "{$a}={$v}"; + $subject = (strlen($subject)) ? "{$asubject}, {$subject}" : $asubject; + } + } + + return $subject; +} + +function cert_get_subject_array($crt) { + $str_crt = base64_decode($crt); + $inf_crt = openssl_x509_parse($str_crt); + $components = $inf_crt['subject']; + + if (!is_array($components)) + return; + + $subject_array = array(); + + foreach($components as $a => $v) + $subject_array[] = array('a' => $a, 'v' => $v); + + return $subject_array; +} + +function cert_get_subject_hash($crt) { + $str_crt = base64_decode($crt); + $inf_crt = openssl_x509_parse($str_crt); + return $inf_crt['subject']; +} + +function cert_get_issuer($str_crt, $decode = true) { + + if ($decode) + $str_crt = base64_decode($str_crt); + + $inf_crt = openssl_x509_parse($str_crt); + $components = $inf_crt['issuer']; + + if (empty($components) || !is_array($components)) + return "unknown"; + + ksort($components); + foreach ($components as $a => $v) { + if (is_array($v)) { + ksort($v); + foreach ($v as $w) { + $aissuer = "{$a}={$w}"; + $issuer = (strlen($issuer)) ? "{$aissuer}, {$issuer}" : $aissuer; + } + } else { + $aissuer = "{$a}={$v}"; + $issuer = (strlen($issuer)) ? "{$aissuer}, {$issuer}" : $aissuer; + } + } + + return $issuer; +} + +/* this function works on x509 (crt), rsa key (prv), and req(csr) */ +function cert_get_modulus($str_crt, $decode = true, $type = "crt"){ + if ($decode) + $str_crt = base64_decode($str_crt); + + $modulus = ""; + if ( in_array($type, array("crt", "prv", "csr")) ) { + $type = str_replace( array("crt","prv","csr"), array("x509","rsa","req"), $type); + $modulus = exec("echo \"{$str_crt}\" | openssl {$type} -noout -modulus"); + } + return $modulus; +} +function csr_get_modulus($str_crt, $decode = true){ + return cert_get_modulus($str_crt, $decode, "csr"); +} + +function cert_get_purpose($str_crt, $decode = true) { + if ($decode) + $str_crt = base64_decode($str_crt); + $crt_details = openssl_x509_parse($str_crt); + $purpose = array(); + $purpose['ca'] = (stristr($crt_details['extensions']['basicConstraints'], 'CA:TRUE') === false) ? 'No': 'Yes'; + $purpose['server'] = ($crt_details['extensions']['nsCertType'] == "SSL Server") ? 'Yes': 'No'; + return $purpose; +} + +function cert_get_dates($str_crt, $decode = true) { + if ($decode) + $str_crt = base64_decode($str_crt); + $crt_details = openssl_x509_parse($str_crt); + if ($crt_details['validFrom_time_t'] > 0) + $start = date('r', $crt_details['validFrom_time_t']); + if ($crt_details['validTo_time_t'] > 0) + $end = date('r', $crt_details['validTo_time_t']); + return array($start, $end); +} + +function cert_get_serial($str_crt, $decode = true) { + if ($decode) + $str_crt = base64_decode($str_crt); + $crt_details = openssl_x509_parse($str_crt); + if (isset($crt_details['serialNumber']) && !empty($crt_details['serialNumber'])) + return $crt_details['serialNumber']; + else + return NULL; +} + +function prv_get_modulus($str_crt, $decode = true){ + return cert_get_modulus($str_crt, $decode, "prv"); +} + +function is_user_cert($certref) { + global $config; + if (!is_array($config['system']['user'])) + return; + foreach ($config['system']['user'] as $user) { + if (!is_array($user['cert'])) + continue; + foreach ($user['cert'] as $cert) { + if ($certref == $cert) + return true; + } + } + return false; +} + +function is_openvpn_server_cert($certref) { + global $config; + if (!is_array($config['openvpn']['openvpn-server'])) + return; + foreach ($config['openvpn']['openvpn-server'] as $ovpns) { + if ($ovpns['certref'] == $certref) + return true; + } + return false; +} + +function is_openvpn_client_cert($certref) { + global $config; + if (!is_array($config['openvpn']['openvpn-client'])) + return; + foreach ($config['openvpn']['openvpn-client'] as $ovpnc) { + if ($ovpnc['certref'] == $certref) + return true; + } + return false; +} + +function is_ipsec_cert($certref) { + global $config; + if (!is_array($config['ipsec']['phase1'])) + return; + foreach ($config['ipsec']['phase1'] as $ipsec) { + if ($ipsec['certref'] == $certref) + return true; + } + return false; +} + +function is_webgui_cert($certref) { + global $config; + if (($config['system']['webgui']['ssl-certref'] == $certref) + && ($config['system']['webgui']['protocol'] != "http")) + return true; +} + +function is_captiveportal_cert($certref) { + global $config; + if (!is_array($config['captiveportal'])) + return; + foreach ($config['captiveportal'] as $portal) { + if (isset($portal['enable']) && isset($portal['httpslogin']) && ($portal['certref'] == $certref)) + return true; + } + return false; +} + +function cert_in_use($certref) { + return (is_webgui_cert($certref) || + is_user_cert($certref) || + is_openvpn_server_cert($certref) || + is_openvpn_client_cert($certref) || + is_ipsec_cert($certref) || + is_captiveportal_cert($certref)); +} + +function crl_create(& $crl, $caref, $name, $serial=0, $lifetime=9999) { + global $config; + $ca =& lookup_ca($caref); + if (!$ca) + return false; + $crl['descr'] = $name; + $crl['caref'] = $caref; + $crl['serial'] = $serial; + $crl['lifetime'] = $lifetime; + $crl['cert'] = array(); + $crl_res = crl_update($crl); + $config['crl'][] = $crl; + return $crl_res; +} + +function crl_update(& $crl) { + global $config; + $ca =& lookup_ca($crl['caref']); + if (!$ca) + return false; + // If we have text but no certs, it was imported and cannot be updated. + if (($crl["method"] != "internal") && (!empty($crl['text']) && empty($crl['cert']))) + return false; + $crl['serial']++; + $ca_str_crt = base64_decode($ca['crt']); + $ca_str_key = base64_decode($ca['prv']); + $crl_res = openssl_crl_new($ca_str_crt, $crl['serial'], $crl['lifetime']); + if (is_array($crl['cert']) && (count($crl['cert']) > 0)) { + foreach ($crl['cert'] as $cert) { + openssl_crl_revoke_cert($crl_res, base64_decode($cert["crt"]), $cert["revoke_time"], $cert["reason"]); + } + } + openssl_crl_export($crl_res, $crl_text, $ca_str_key); + $crl['text'] = base64_encode($crl_text); + return $crl_res; +} + +function cert_revoke($cert, & $crl, $reason=OCSP_REVOKED_STATUS_UNSPECIFIED) { + global $config; + if (is_cert_revoked($cert, $crl['refid'])) + return true; + // If we have text but no certs, it was imported and cannot be updated. + if (!is_crl_internal($crl)) + return false; + $cert["reason"] = $reason; + $cert["revoke_time"] = time(); + $crl["cert"][] = $cert; + crl_update($crl); + return true; +} + +function cert_unrevoke($cert, & $crl) { + global $config; + if (!is_crl_internal($crl)) + return false; + foreach ($crl['cert'] as $id => $rcert) { + if (($rcert['refid'] == $cert['refid']) || ($rcert['descr'] == $cert['descr'])) { + unset($crl['cert'][$id]); + if (count($crl['cert']) == 0) { + // Protect against accidentally switching the type to imported, for older CRLs + if (!isset($crl['method'])) + $crl['method'] = "internal"; + crl_update($crl); + } else + crl_update($crl); + return true; + } + } + return false; +} + +/* Compare two certificates to see if they match. */ +function cert_compare($cert1, $cert2) { + /* Ensure two certs are identical by first checking that their issuers match, then + subjects, then serial numbers, and finally the moduli. Anything less strict + could accidentally count two similar, but different, certificates as + being identical. */ + $c1 = base64_decode($cert1['crt']); + $c2 = base64_decode($cert2['crt']); + if ((cert_get_issuer($c1, false) == cert_get_issuer($c2, false)) + && (cert_get_subject($c1, false) == cert_get_subject($c2, false)) + && (cert_get_serial($c1, false) == cert_get_serial($c2, false)) + && (cert_get_modulus($c1, false) == cert_get_modulus($c2, false))) + return true; + return false; +} + +function is_cert_revoked($cert, $crlref = "") { + global $config; + if (!is_array($config['crl'])) + return false; + + if (!empty($crlref)) { + $crl = lookup_crl($crlref); + if (!is_array($crl['cert'])) + return false; + foreach ($crl['cert'] as $rcert) { + if (cert_compare($rcert, $cert)) + return true; + } + } else { + foreach ($config['crl'] as $crl) { + if (!is_array($crl['cert'])) + continue; + foreach ($crl['cert'] as $rcert) { + if (cert_compare($rcert, $cert)) + return true; + } + } + } + return false; +} + +function is_openvpn_server_crl($crlref) { + global $config; + if (!is_array($config['openvpn']['openvpn-server'])) + return; + foreach ($config['openvpn']['openvpn-server'] as $ovpns) { + if (!empty($ovpns['crlref']) && ($ovpns['crlref'] == $crlref)) + return true; + } + return false; +} + +// Keep this general to allow for future expansion. See cert_in_use() above. +function crl_in_use($crlref) { + return (is_openvpn_server_crl($crlref)); +} + +function is_crl_internal($crl) { + return (!(!empty($crl['text']) && empty($crl['cert'])) || ($crl["method"] == "internal")); +} + +function cert_get_cn($crt, $isref = false) { + /* If this is a certref, not an actual cert, look up the cert first */ + if ($isref) { + $cert = lookup_cert($crt); + /* If it's not a valid cert, bail. */ + if (!(is_array($cert) && !empty($cert['crt']))) + return ""; + $cert = $cert['crt']; + } else { + $cert = $crt; + } + $sub = cert_get_subject_array($cert); + if (is_array($sub)) { + foreach ($sub as $s) { + if (strtoupper($s['a']) == "CN") + return $s['v']; + } + } + return ""; +} + +?> diff --git a/etc/inc/config.console.inc b/etc/inc/config.console.inc new file mode 100644 index 000000000..474f4a045 --- /dev/null +++ b/etc/inc/config.console.inc @@ -0,0 +1,530 @@ +. + 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. + + + pfSense_BUILDER_BINARIES: /sbin/mount /sbin/umount /sbin/halt /sbin/fsck + pfSense_MODULE: config +*/ + +function set_networking_interfaces_ports() { + global $noreboot; + global $config; + global $g; + global $fp; + + $fp = fopen('php://stdin', 'r'); + + $memory = get_memory(); + $physmem = $memory[0]; + $realmem = $memory[1]; + + if($physmem < $g['minimum_ram_warning']) { + echo "\n\n\n"; + echo gettext("DANGER! WARNING! ACHTUNG!") . "\n\n"; + printf(gettext("%s requires *AT LEAST* %s RAM to function correctly.%s"), $g['product_name'], $g['minimum_ram_warning_text'], "\n"); + printf(gettext("Only (%s) MB RAM has been detected, with (%s) available to %s.%s"), $realmem, $physmem, $g['product_name'], "\n"); + echo "\n" . gettext("Press ENTER to continue.") . " "; + fgets($fp); + echo "\n"; + } + + $iflist = get_interface_list(); + +/* Function flow is based on $key and $auto_assign or the lack thereof */ + $key = null; + +/* Only present auto interface option if running from LiveCD and interface mismatch*/ + if ((preg_match("/cdrom/", $g['platform'])) && is_interface_mismatch()) + $auto_assign = false; + + echo << $ifa) { + echo sprintf("% -7s%s %s %s\n", $iface, $ifa['mac'], + $ifa['up'] ? " (up)" : "(down)", $ifa['dmesg']); + } + } + + if ($auto_assign) { + echo << $ifa) { + if ($ifa['up']) + $plugged_in[] = $iface; + + } + + $lanif = array_shift($plugged_in); + $wanif = array_shift($plugged_in); + + if(isset($lanif) && !isset($wanif)) { + foreach ($iflist as $iface => $ifa) { + if ($iface != $lanif) { + $wanif = $iface; + break; + } + } + } + + echo << "") { + while (1) { + if ($optif[$i]) + $i++; + $io = $i + 1; + + if($config['interfaces']['opt' . $io]['descr']) + printf(gettext("%sOptional interface %s description found: %s"), "\n", $io, $config['interfaces']['opt' . $io]['descr']); + + printf(gettext("%sEnter the Optional %s interface name or 'a' for auto-detection%s" . + "(or nothing if finished):%s"), "\n", $io, "\n", " "); + + $optif[$i] = chop(fgets($fp)); + + if ($optif[$i]) { + if ($optif[$i] === "a") { + $ad = autodetect_interface(gettext("Optional") . " " . $io, $fp); + if ($ad) + $optif[$i] = $ad; + else + unset($optif[$i]); + } else if (!array_key_exists($optif[$i], $iflist)) { + printf(gettext("%sInvalid interface name '%s'%s"), "\n", $optif[$i], "\n"); + unset($optif[$i]); + continue; + } + } else { + unset($optif[$i]); + break; + } + } + } + + /* check for double assignments */ + $ifarr = array_merge(array($lanif, $wanif), $optif); + + for ($i = 0; $i < (count($ifarr)-1); $i++) { + for ($j = ($i+1); $j < count($ifarr); $j++) { + if ($ifarr[$i] == $ifarr[$j]) { + echo << " . $wanif . "\n"; + if ($lanif != "") + echo "LAN -> " . $lanif . "\n"; + for ($i = 0; $i < count($optif); $i++) { + echo "OPT" . ($i+1) . " -> " . $optif[$i] . "\n"; + } + + echo << $ifa) { + if (!$ifa['up'] && $iflist[$ifn]['up']) { + printf(gettext("Detected link-up on interface %s.%s"), $ifn, "\n"); + return $ifn; + } + } + + printf(gettext("No link-up detected.%s"), "\n"); + + return null; +} + +function interfaces_setup() { + global $iflist, $config, $g, $fp; + + $iflist = get_interface_list(); + + +} + +function vlan_setup() { + global $iflist, $config, $g, $fp; + + $iflist = get_interface_list(); + + if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { + + echo << $ifa) { + if (is_jumbo_capable($iface)) { + echo sprintf("% -8s%s%s\n", $iface, $ifa['mac'], + $ifa['up'] ? " (up)" : ""); + $vlan_capable++; + } + } + } + + if($vlan_capable == 0) { + echo gettext("No VLAN capable interfaces detected.") . "\n"; + return; + } + + echo "\n" . gettext("Enter the parent interface name for the new VLAN (or nothing if finished):") . " "; + $vlan['if'] = chop(fgets($fp)); + + if ($vlan['if']) { + if (!array_key_exists($vlan['if'], $iflist) or + !is_jumbo_capable($vlan['if'])) { + printf(gettext("%sInvalid interface name '%s'%s"), "\n", $vlan['if'], "\n"); + continue; + } + } else { + break; + } + + echo gettext("Enter the VLAN tag (1-4094):") . " "; + $vlan['tag'] = chop(fgets($fp)); + $vlan['vlanif'] = "{$vlan['if']}_vlan{$vlan['tag']}"; + if (!is_numericint($vlan['tag']) || ($vlan['tag'] < 1) || ($vlan['tag'] > 4094)) { + printf(gettext("%sInvalid VLAN tag '%s'%s"), "\n", $vlan['tag'], "\n"); + continue; + } + + $config['vlans']['vlan'][] = $vlan; + $vlanif++; + } +} + +?> diff --git a/etc/inc/config.gui.inc b/etc/inc/config.gui.inc new file mode 100644 index 000000000..3eec79515 --- /dev/null +++ b/etc/inc/config.gui.inc @@ -0,0 +1,87 @@ +. + 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. + + + pfSense_BUILDER_BINARIES: /sbin/mount /sbin/umount /sbin/halt /sbin/fsck + pfSense_MODULE: config +*/ + +require_once("globals.inc"); + +/* do not load this file twice. */ +if($config_parsed == true) + return; +else + $config_parsed = true; + +/* include globals from notices.inc /utility/XML parser files */ +require_once('config.lib.inc'); +require_once("notices.inc"); +require_once("util.inc"); +require_once("IPv6.inc"); +if(file_exists("/cf/conf/use_xmlreader")) + require_once("xmlreader.inc"); +else + require_once("xmlparse.inc"); +require_once("crypt.inc"); + +/* read platform */ +if (file_exists("{$g['etc_path']}/platform")) { + $g['platform'] = chop(file_get_contents("{$g['etc_path']}/platform")); +} else { + $g['platform'] = "unknown"; +} + +/* if /debugging exists, lets set $debugging + so we can output more information */ +if(file_exists("/debugging")) { + $debugging = true; + $g['debug'] = true; +} + +$config = parse_config(); + +if($config_parsed == true) { + /* process packager manager custom rules */ + if(is_dir("/usr/local/pkg/parse_config")) { + run_plugins("/usr/local/pkg/parse_config/"); + } +} + +?> diff --git a/etc/inc/config.inc b/etc/inc/config.inc new file mode 100644 index 000000000..e02706276 --- /dev/null +++ b/etc/inc/config.inc @@ -0,0 +1,224 @@ +. + 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. + + + pfSense_BUILDER_BINARIES: /sbin/mount /sbin/umount /sbin/halt /sbin/fsck + pfSense_MODULE: config +*/ + +if($g['booting']) echo "."; + +/* do not load this file twice. */ +//if (in_array("/etc/inc/config.inc", get_included_files())) +// return; + +// Set the memory limit to 128M on i386. When someone has something like 500+ tunnels +// the parser needs quite a bit of ram. Do not remove this line unless you +// know what you are doing. If in doubt, check with dev@ _/FIRST/_! +if(!$ARCH) + $ARCH = php_uname("m"); + +// Set memory limit to 256M on amd64. +if($ARCH == "amd64") + ini_set("memory_limit","256M"); +else + ini_set("memory_limit","128M"); + +/* include globals from notices.inc /utility/XML parser files */ +require_once("notices.inc"); +if($g['booting']) echo "."; +require_once("util.inc"); +if($g['booting']) echo "."; +require_once("IPv6.inc"); +if($g['booting']) echo "."; +require_once('config.lib.inc'); +if($g['booting']) echo "."; +if(file_exists("/cf/conf/use_xmlreader")) + require_once("xmlreader.inc"); +else + require_once("xmlparse.inc"); +if($g['booting']) echo "."; +require_once("crypt.inc"); + +/* read platform */ +if($g['booting']) echo "."; +if (file_exists("{$g['etc_path']}/platform")) { + $g['platform'] = chop(file_get_contents("{$g['etc_path']}/platform")); +} else { + $g['platform'] = "unknown"; +} + +/* if /debugging exists, lets set $debugging + so we can output more information */ +if(file_exists("/debugging")) { + $debugging = true; + $g['debug'] = true; +} + +if($g['booting']) echo "."; +if($g['booting'] && file_exists("/cf/conf/config.xml")) { + $config_contents = file_get_contents("/cf/conf/config.xml"); + if(stristr($config_contents, "") == true) { + if($g['booting']) echo "."; + /* user has just upgraded to m0n0wall, replace root xml tags */ + log_error(gettext("Upgrading m0n0wall configuration to pfSense... ")); + $config_contents = str_replace("m0n0wall","pfsense", $config_contents); + if (!config_validate("{$g['conf_path']}/config.xml")) + log_error(gettext("ERROR! Could not convert m0n0wall -> pfsense in config.xml")); + conf_mount_rw(); + $fd = fopen("/cf/conf/config.xml", "w"); + fwrite($fd, $config_contents); + fclose($fd); + conf_mount_ro(); + } +} + +/* if our config file exists bail out, we're already set. */ +else if ($g['booting'] and !file_exists($g['cf_conf_path'] . "/config.xml") ) { + if($g['booting']) echo "."; + /* find the device where config.xml resides and write out an fstab */ + unset($cfgdevice); + if($g['booting']) echo "."; + /* check if there's already an fstab (NFS booting?) */ + if (!file_exists("{$g['etc_path']}/fstab")) { + if($g['booting']) echo "."; + if (strstr($g['platform'], "cdrom")) { + /* config is on floppy disk for CD-ROM version */ + $cfgdevice = $cfgpartition = "fd0"; + $_gb = exec('/sbin/dmesg -a', $dmesg); + if(preg_match("/da0/", $dmesg) == true) { + $cfgdevice = $cfgpartition = "da0" ; + if (mwexec("/sbin/mount -r /dev/{$cfgdevice} /cf")) { + /* could not mount, fallback to floppy */ + $cfgdevice = $cfgpartition = "fd0"; + } + } + $cfgfstype = "msdosfs"; + echo gettext("CDROM build") . "\n"; + echo " " . gettext("CFG:") . " {$cfgpartition}\n"; + echo " " . gettext("CFG:") . " {$cfgpartition}\n"; + echo " " . gettext("TYPE:") . " {$cfgfstype}\n"; + } else { + if($g['booting']) echo "."; + /* probe kernel known disks until we find one with config.xml */ + $disks = explode(" ", get_single_sysctl("kern.disks")); + foreach ($disks as $mountdisk) { + /* skip mfs mounted filesystems */ + if (strstr($mountdisk, "md")) + continue; + if (mwexec("/sbin/mount -r /dev/{$mountdisk}a {$g['cf_path']}") == 0) { + if (file_exists("{$g['cf_conf_path']}/config.xml")) { + /* found it */ + $cfgdevice = $mountdisk; + $cfgpartition = $cfgdevice . "a"; + $cfgfstype = "ufs"; + printf(gettext("Found configuration on %s.%s"), $cfgdevice, "\n"); + } + + mwexec("/sbin/umount -f {$g['cf_path']}"); + + if ($cfgdevice) + break; + } + if (mwexec("/sbin/mount -r /dev/{$mountdisk}d {$g['cf_path']}") == 0) { + if($g['booting']) echo "."; + if (file_exists("{$g['cf_conf_path']}/config.xml")) { + /* found it */ + $cfgdevice = $mountdisk; + $cfgpartition = $cfgdevice . "d"; + $cfgfstype = "ufs"; + printf(gettext("Found configuration on %s.%s"), $cfgdevice, "\n"); + } + + mwexec("/sbin/umount -f {$g['cf_path']}"); + + if ($cfgdevice) + break; + } + } + } + if($g['booting']) echo "."; + if (!$cfgdevice) { + $last_backup = discover_last_backup(); + if($last_backup) { + log_error(gettext("No config.xml found, attempting last known config restore.")); + file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", ""); + restore_backup("/cf/conf/backup/{$last_backup}"); + } else { + log_error(gettext("No config.xml or config backups found, resetting to factory defaults.")); + restore_backup('/conf.default/config.xml'); + } + } + + /* write device name to a file for rc.firmware */ + $fd = fopen("{$g['varetc_path']}/cfdevice", "w"); + fwrite($fd, $cfgdevice . "\n"); + fclose($fd); + + /* write out an fstab */ + $fd = fopen("{$g['etc_path']}/fstab", "w"); + + $fstab = "/dev/{$cfgpartition} {$g['cf_path']} {$cfgfstype} ro,noatime 1 1\n"; + $fstab .= "proc /proc procfs rw 0 0\n"; + + fwrite($fd, $fstab); + fclose($fd); + } + if($g['booting']) echo "."; + /* mount all filesystems */ + mwexec("/sbin/mount -a"); +} + +if($g['booting']) echo "."; +$config = parse_config(); + +/* set timezone */ +$timezone = $config['system']['timezone']; +if (!$timezone) + $timezone = "Etc/UTC"; +date_default_timezone_set("$timezone"); + +if($config_parsed == true) { + /* process packager manager custom rules */ + if(is_dir("/usr/local/pkg/parse_config")) { + run_plugins("/usr/local/pkg/parse_config/"); + } +} + +?> diff --git a/etc/inc/config.lib.inc b/etc/inc/config.lib.inc new file mode 100644 index 000000000..8dd2918af --- /dev/null +++ b/etc/inc/config.lib.inc @@ -0,0 +1,941 @@ +. + 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. + + + pfSense_BUILDER_BINARIES: /sbin/mount /sbin/umount /sbin/halt /sbin/fsck + pfSense_MODULE: config +*/ + +/****f* config/encrypted_configxml + * NAME + * encrypted_configxml - Checks to see if config.xml is encrypted and if so, prompts to unlock. + * INPUTS + * None + * RESULT + * $config - rewrites config.xml without encryption + ******/ +function encrypted_configxml() { + global $g, $config; + + if (!file_exists($g['conf_path'] . "/config.xml")) + return; + + if (!$g['booting']) + return; + + $configtxt = file_get_contents($g['conf_path'] . "/config.xml"); + if(tagfile_deformat($configtxt, $configtxt, "config.xml")) { + $fp = fopen('php://stdin', 'r'); + $data = ""; + echo "\n\n*** Encrypted config.xml detected ***\n"; + while($data == "") { + echo "\nEnter the password to decrypt config.xml: "; + $decrypt_password = chop(fgets($fp)); + $data = decrypt_data($configtxt, $decrypt_password); + if(!strstr($data, "")) + $data = ""; + if($data) { + $fd = fopen($g['conf_path'] . "/config.xml.tmp", "w"); + fwrite($fd, $data); + fclose($fd); + exec("/bin/mv {$g['conf_path']}/config.xml.tmp {$g['conf_path']}/config.xml"); + echo "\n" . gettext("Config.xml unlocked.") . "\n"; + fclose($fp); + } else { + echo "\n" . gettext("Invalid password entered. Please try again.") . "\n"; + } + } + } +} + +/****f* config/parse_config + * NAME + * parse_config - Read in config.cache or config.xml if needed and return $config array + * INPUTS + * $parse - boolean to force parse_config() to read config.xml and generate config.cache + * RESULT + * $config - array containing all configuration variables + ******/ +function parse_config($parse = false) { + global $g, $config_parsed, $config_extra; + + $lockkey = lock('config'); + $config_parsed = false; + + if (!file_exists("{$g['conf_path']}/config.xml") || filesize("{$g['conf_path']}/config.xml") == 0) { + $last_backup = discover_last_backup(); + if($last_backup) { + log_error(gettext("No config.xml found, attempting last known config restore.")); + file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", ""); + restore_backup("{$g['conf_path']}/backup/{$last_backup}"); + } else { + unlock($lockkey); + die(gettext("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup.")); + } + } + + if($g['booting']) + echo "."; + + // Check for encrypted config.xml + encrypted_configxml(); + + if(!$parse) { + if (file_exists($g['tmp_path'] . '/config.cache')) { + $config = unserialize(file_get_contents($g['tmp_path'] . '/config.cache')); + if (is_null($config)) + $parse = true; + } else + $parse = true; + } + if ($parse == true) { + if(!file_exists($g['conf_path'] . "/config.xml")) { + if($g['booting']) + echo "."; + log_error("No config.xml found, attempting last known config restore."); + file_notice("config.xml", "No config.xml found, attempting last known config restore.", "pfSenseConfigurator", ""); + $last_backup = discover_last_backup(); + if ($last_backup) + restore_backup("/cf/conf/backup/{$last_backup}"); + else { + log_error(gettext("Could not restore config.xml.")); + unlock($lockkey); + die(gettext("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup.")); + } + } + $config = parse_xml_config($g['conf_path'] . '/config.xml', array($g['xml_rootobj'], 'pfsense')); + if($config == -1) { + $last_backup = discover_last_backup(); + if ($last_backup) + restore_backup("/cf/conf/backup/{$last_backup}"); + else { + log_error(gettext("Could not restore config.xml.")); + unlock($lockkey); + die("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup."); + } + } + generate_config_cache($config); + } + + if($g['booting']) + echo "."; + + $config_parsed = true; + unlock($lockkey); + + alias_make_table($config); + + return $config; +} + +/****f* config/generate_config_cache + * NAME + * generate_config_cache - Write serialized configuration to cache. + * INPUTS + * $config - array containing current firewall configuration + * RESULT + * boolean - true on completion + ******/ +function generate_config_cache($config) { + global $g, $config_extra; + + $configcache = fopen($g['tmp_path'] . '/config.cache', "w"); + fwrite($configcache, serialize($config)); + fclose($configcache); + unset($configcache); + /* Used for config.extra.xml */ + if(file_exists($g['tmp_path'] . '/config.extra.cache') && $config_extra) { + $configcacheextra = fopen($g['tmp_path'] . '/config.extra.cache', "w"); + fwrite($configcacheextra, serialize($config_extra)); + fclose($configcacheextra); + unset($configcacheextra); + } +} + +function discover_last_backup() { + $backups = glob('/cf/conf/backup/*.xml'); + $last_backup = ""; + $last_mtime = 0; + foreach($backups as $backup) { + if(filemtime($backup) > $last_mtime) { + $last_mtime = filemtime($backup); + $last_backup = $backup; + } + } + + return basename($last_backup); +} + +function restore_backup($file) { + global $g; + + if (file_exists($file)) { + conf_mount_rw(); + unlink_if_exists("{$g['tmp_path']}/config.cache"); + copy("$file","/cf/conf/config.xml"); + disable_security_checks(); + log_error(sprintf(gettext('%1$s is restoring the configuration %2$s'), $g['product_name'], $file)); + file_notice("config.xml", sprintf(gettext('%1$s is restoring the configuration %2$s'), $g['product_name'], $file), "pfSenseConfigurator", ""); + conf_mount_ro(); + } +} + +/****f* config/parse_config_bootup + * NAME + * parse_config_bootup - Bootup-specific configuration checks. + * RESULT + * null + ******/ +function parse_config_bootup() { + global $config, $g; + + if($g['booting']) + echo "."; + + $lockkey = lock('config'); + if (!file_exists("{$g['conf_path']}/config.xml")) { + if ($g['booting']) { + if (strstr($g['platform'], "cdrom")) { + /* try copying the default config. to the floppy */ + echo gettext("Resetting factory defaults...") . "\n"; + reset_factory_defaults(true); + if (!file_exists("{$g['conf_path']}/config.xml")) { + echo gettext("No XML configuration file found - using factory defaults.\n" . + "Make sure that the configuration floppy disk with the conf/config.xml\n" . + "file is inserted. If it isn't, your configuration changes will be lost\n" . + "on reboot.\n"); + } + } else { + $last_backup = discover_last_backup(); + if($last_backup) { + log_error("No config.xml found, attempting last known config restore."); + file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", ""); + restore_backup("/cf/conf/backup/{$last_backup}"); + } + if(!file_exists("{$g['conf_path']}/config.xml")) { + echo sprintf(gettext("XML configuration file not found. %s cannot continue booting."), $g['product_name']) . "\n"; + unlock($lockkey); + mwexec("/sbin/halt"); + exit; + } + log_error("Last known config found and restored. Please double check your configuration file for accuracy."); + file_notice("config.xml", gettext("Last known config found and restored. Please double check your configuration file for accuracy."), "pfSenseConfigurator", ""); + } + } else { + unlock($lockkey); + log_error(gettext("Could not find a usable configuration file! Exiting....")); + exit(0); + } + } + + if (filesize("{$g['conf_path']}/config.xml") == 0) { + $last_backup = discover_last_backup(); + if($last_backup) { + log_error(gettext("No config.xml found, attempting last known config restore.")); + file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", ""); + restore_backup("{$g['conf_path']}/backup/{$last_backup}"); + } else { + unlock($lockkey); + die(gettext("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup.")); + } + } + unlock($lockkey); + + $config = parse_config(true); + + if ((float)$config['version'] > (float)$g['latest_config']) { + echo << 1) && is_writable("/")) + return; + + $status = mwexec("/sbin/mount -u -w -o sync,noatime {$g['cf_path']}"); + if($status <> 0) { + if($g['booting']) + echo gettext("Disk is dirty. Running fsck -y") . "\n"; + mwexec("/sbin/fsck -y {$g['cf_path']}"); + $status = mwexec("/sbin/mount -u -w -o sync,noatime {$g['cf_path']}"); + } + + /* if the platform is soekris or wrap or pfSense, lets mount the + * compact flash cards root. + */ + $status = mwexec("/sbin/mount -u -w -o sync,noatime /"); + /* we could not mount this correctly. kick off fsck */ + if($status <> 0) { + log_error(gettext("File system is dirty. Launching FSCK for /")); + mwexec("/sbin/fsck -y /"); + $status = mwexec("/sbin/mount -u -w -o sync,noatime /"); + } + + mark_subsystem_dirty('mount'); +} + +/****f* config/conf_mount_ro + * NAME + * conf_mount_ro - Mount filesystems readonly. + * RESULT + * null + ******/ +function conf_mount_ro() { + global $g, $config; + + /* Do not trust $g['platform'] since this can be clobbered during factory reset. */ + $platform = trim(file_get_contents("/etc/platform")); + /* do not umount on cdrom or pfSense platforms */ + if($platform == "cdrom" or $platform == "pfSense") + return; + + if (refcount_unreference(1000) > 0) + return; + + if(isset($config['system']['nanobsd_force_rw'])) + return; + + if($g['booting']) + return; + + clear_subsystem_dirty('mount'); + /* sync data, then force a remount of /cf */ + pfSense_sync(); + mwexec("/sbin/mount -u -r -f -o sync,noatime {$g['cf_path']}"); + mwexec("/sbin/mount -u -r -f -o sync,noatime /"); +} + +/****f* config/convert_config + * NAME + * convert_config - Attempt to update config.xml. + * DESCRIPTION + * convert_config() reads the current global configuration + * and attempts to convert it to conform to the latest + * config.xml version. This allows major formatting changes + * to be made with a minimum of breakage. + * RESULT + * null + ******/ +/* convert configuration, if necessary */ +function convert_config() { + global $config, $g; + $now = date("H:i:s"); + log_error(sprintf(gettext("Start Configuration upgrade at %s, set execution timeout to 15 minutes"), $now)); + //ini_set("max_execution_time", "900"); + + /* special case upgrades */ + /* fix every minute crontab bogons entry */ + if (is_array($config['cron'])) { + $cron_item_count = count($config['cron']['item']); + for($x=0; $x<$cron_item_count; $x++) { + if(stristr($config['cron']['item'][$x]['command'], "rc.update_bogons.sh")) { + if($config['cron']['item'][$x]['hour'] == "*" ) { + $config['cron']['item'][$x]['hour'] = "3"; + write_config(gettext("Updated bogon update frequency to 3am")); + log_error(gettext("Updated bogon update frequency to 3am")); + } + } + } + } + if ($config['version'] == $g['latest_config']) + return; /* already at latest version */ + + // Save off config version + $prev_version = $config['version']; + + include_once('auth.inc'); + include_once('upgrade_config.inc'); + if (file_exists("/etc/inc/upgrade_config_custom.inc")) + include_once("upgrade_config_custom.inc"); + /* Loop and run upgrade_VER_to_VER() until we're at current version */ + while ($config['version'] < $g['latest_config']) { + $cur = $config['version'] * 10; + $next = $cur + 1; + $migration_function = sprintf('upgrade_%03d_to_%03d', $cur, $next); + if (function_exists($migration_function)) + $migration_function(); + $migration_function = "{$migration_function}_custom"; + if (function_exists($migration_function)) + $migration_function(); + $config['version'] = sprintf('%.1f', $next / 10); + if($g['booting']) + echo "."; + } + + $now = date("H:i:s"); + log_error(sprintf(gettext("Ended Configuration upgrade at %s"), $now)); + + if ($prev_version != $config['version']) + write_config(sprintf(gettext('Upgraded config version level from %1$s to %2$s'), $prev_version, $config['version'])); +} + +/****f* config/safe_write_file + * NAME + * safe_write_file - Write a file out atomically + * DESCRIPTION + * safe_write_file() Writes a file out atomically by first writing to a + * temporary file of the same name but ending with the pid of the current + * process, them renaming the temporary file over the original. + * INPUTS + * $filename - string containing the filename of the file to write + * $content - string containing the file content to write to file + * $force_binary - boolean denoting whether we should force binary + * mode writing. + * RESULT + * boolean - true if successful, false if not + ******/ +function safe_write_file($file, $content, $force_binary) { + $tmp_file = $file . "." . getmypid(); + $write_mode = $force_binary ? "wb" : "w"; + + $fd = fopen($tmp_file, $write_mode); + if (!$fd) { + // Unable to open temporary file for writing + return false; + } + if (!fwrite($fd, $content)) { + // Unable to write to temporary file + fclose($fd); + return false; + } + fflush($fd); + fclose($fd); + + if (!rename($tmp_file, $file)) { + // Unable to move temporary file to original + @unlink($tmp_file); + return false; + } + + // Sync file before returning + pfSense_sync(); + + return true; +} + +/****f* config/write_config + * NAME + * write_config - Backup and write the firewall configuration. + * DESCRIPTION + * write_config() handles backing up the current configuration, + * applying changes, and regenerating the configuration cache. + * INPUTS + * $desc - string containing the a description of configuration changes + * $backup - boolean: do not back up current configuration if false. + * RESULT + * null + ******/ +/* save the system configuration */ +function write_config($desc="Unknown", $backup = true) { + global $config, $g; + + if (!empty($_SERVER['REMOTE_ADDR'])) { + if (!session_id()) + @session_start(); + if (!empty($_SESSION['Username']) && ($_SESSION['Username'] != "admin")) { + $user = getUserEntry($_SESSION['Username']); + if (is_array($user) && userHasPrivilege($user, "user-config-readonly")) { + session_commit(); + return false; + } + } + } + + if (!isset($argc)) + session_commit(); + + if($backup) + backup_config(); + + $config['revision'] = make_config_revision_entry($desc); + + conf_mount_rw(); + $lockkey = lock('config', LOCK_EX); + + /* generate configuration XML */ + $xmlconfig = dump_xml_config($config, $g['xml_rootobj']); + + /* write new configuration */ + if (!safe_write_file("{$g['cf_conf_path']}/config.xml", $xmlconfig, false)) { + log_error(gettext("WARNING: Config contents could not be save. Could not open file!")); + unlock($lockkey); + file_notice("config.xml", sprintf(gettext("Unable to open %s/config.xml for writing in write_config()%s"), $g['cf_conf_path'], "\n")); + return -1; + } + + cleanup_backupcache(true); + + /* re-read configuration */ + /* NOTE: We assume that the file can be parsed since we wrote it. */ + $config = parse_xml_config("{$g['conf_path']}/config.xml", $g['xml_rootobj']); + if ($config == -1) { + copy("{$g['conf_path']}/config.xml", "{$g['conf_path']}/config.xml.bad"); + $last_backup = discover_last_backup(); + if ($last_backup) { + restore_backup("/cf/conf/backup/{$last_backup}"); + $config = parse_xml_config("{$g['conf_path']}/config.xml", $g['xml_rootobj']); + if ($g['booting']) { + echo "\n\n ************** WARNING **************"; + echo "\n\n Configuration could not be validated. A previous configuration was restored. \n"; + echo "\n The failed configuration file has been saved as {$g['conf_path']}/config.xml.bad \n\n"; + } + } else + log_error(gettext("Could not restore config.xml.")); + } else + generate_config_cache($config); + + unlock($lockkey); + + unlink_if_exists("/usr/local/pkg/pf/carp_sync_client.php"); + + /* tell kernel to sync fs data */ + conf_mount_ro(); + + /* sync carp entries to other firewalls */ + carp_sync_client(); + + if(is_dir("/usr/local/pkg/write_config")) { + /* process packager manager custom rules */ + run_plugins("/usr/local/pkg/write_config/"); + } + + return $config; +} + +/****f* config/reset_factory_defaults + * NAME + * reset_factory_defaults - Reset the system to its default configuration. + * RESULT + * integer - indicates completion + ******/ +function reset_factory_defaults($lock = false) { + global $g; + + conf_mount_rw(); + if (!$lock) + $lockkey = lock('config', LOCK_EX); + + /* create conf directory, if necessary */ + safe_mkdir("{$g['cf_conf_path']}"); + + /* clear out /conf */ + $dh = opendir($g['conf_path']); + while ($filename = readdir($dh)) { + if (($filename != ".") && ($filename != "..")) { + unlink_if_exists($g['conf_path'] . "/" . $filename); + } + } + closedir($dh); + unlink_if_exists($g['tmp_path'] . "/config.cache"); + + /* copy default configuration */ + copy("{$g['conf_default_path']}/config.xml", "{$g['conf_path']}/config.xml"); + + disable_security_checks(); + + /* call the wizard */ + touch("/conf/trigger_initial_wizard"); + if (!$lock) + unlock($lockkey); + conf_mount_ro(); + setup_serial_port(); + return 0; +} + +function config_restore($conffile) { + global $config, $g; + + if (!file_exists($conffile)) + return 1; + + backup_config(); + + conf_mount_rw(); + + $lockkey = lock('config', LOCK_EX); + + unlink_if_exists("{$g['tmp_path']}/config.cache"); + copy($conffile, "{$g['cf_conf_path']}/config.xml"); + + disable_security_checks(); + + unlock($lockkey); + + $config = parse_config(true); + + conf_mount_ro(); + + write_config(gettext("Reverted to") . " " . array_pop(explode("/", $conffile)) . ".", false); + + return 0; +} + +function config_install($conffile) { + global $config, $g; + + if (!file_exists($conffile)) + return 1; + + if (!config_validate("{$conffile}")) + return 1; + + if($g['booting'] == true) + echo gettext("Installing configuration...") . "\n"; + else + log_error(gettext("Installing configuration ....")); + + conf_mount_rw(); + $lockkey = lock('config', LOCK_EX); + + copy($conffile, "{$g['conf_path']}/config.xml"); + + disable_security_checks(); + + /* unlink cache file if it exists */ + if(file_exists("{$g['tmp_path']}/config.cache")) + unlink("{$g['tmp_path']}/config.cache"); + + unlock($lockkey); + conf_mount_ro(); + + return 0; +} + +/* + * Disable security checks for DNS rebind and HTTP referrer until next time + * they pass (or reboot), to aid in preventing accidental lockout when + * restoring settings like hostname, domain, IP addresses, and settings + * related to the DNS rebind and HTTP referrer checks. + * Intended for use when restoring a configuration or directly + * modifying config.xml without an unconditional reboot. + */ +function disable_security_checks() { + global $g; + touch("{$g['tmp_path']}/disable_security_checks"); +} + +/* Restores security checks. Should be called after all succeed. */ +function restore_security_checks() { + global $g; + unlink_if_exists("{$g['tmp_path']}/disable_security_checks"); +} + +/* Returns status of security check temporary disable. */ +function security_checks_disabled() { + global $g; + return file_exists("{$g['tmp_path']}/disable_security_checks"); +} + +function config_validate($conffile) { + + global $g, $xmlerr; + + $xml_parser = xml_parser_create(); + + if (!($fp = fopen($conffile, "r"))) { + $xmlerr = gettext("XML error: unable to open file"); + return false; + } + + while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + $xmlerr = sprintf(gettext('%1$s at line %2$d'), + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser)); + return false; + } + } + xml_parser_free($xml_parser); + + fclose($fp); + + return true; +} + +function cleanup_backupcache($lock = false) { + global $g; + $i = false; + + $revisions = get_config_backup_count(); + + if (!$lock) + $lockkey = lock('config'); + + conf_mount_rw(); + + $backups = get_backups(); + if ($backups) { + $baktimes = $backups['versions']; + unset($backups['versions']); + } else { + $backups = array(); + $baktimes = array(); + } + $newbaks = array(); + $bakfiles = glob($g['cf_conf_path'] . "/backup/config-*"); + $tocache = array(); + + foreach($bakfiles as $backup) { // Check for backups in the directory not represented in the cache. + $backupsize = filesize($backup); + if($backupsize == 0) { + unlink($backup); + continue; + } + $tocheck = array_shift(explode('.', array_pop(explode('-', $backup)))); + if(!in_array($tocheck, $baktimes)) { + $i = true; + if($g['booting']) + echo "."; + $newxml = parse_xml_config($backup, array($g['xml_rootobj'], 'pfsense')); + if($newxml == "-1") { + log_error(sprintf(gettext("The backup cache file %s is corrupted. Unlinking."), $backup)); + unlink($backup); + log_error(sprintf(gettext("The backup cache file %s is corrupted. Unlinking."), $backup)); + continue; + } + if($newxml['revision']['description'] == "") + $newxml['revision']['description'] = "Unknown"; + if($newxml['version'] == "") + $newxml['version'] = "?"; + $tocache[$tocheck] = array('description' => $newxml['revision']['description'], 'version' => $newxml['version'], 'filesize' => $backupsize); + } + } + foreach($backups as $checkbak) { + if(count(preg_grep('/' . $checkbak['time'] . '/i', $bakfiles)) != 0) { + $newbaks[] = $checkbak; + } else { + $i = true; + if($g['booting']) print " " . $tocheck . "r"; + } + } + foreach($newbaks as $todo) $tocache[$todo['time']] = array('description' => $todo['description'], 'version' => $todo['version'], 'filesize' => $todo['filesize']); + if(is_int($revisions) and (count($tocache) > $revisions)) { + $toslice = array_slice(array_keys($tocache), 0, $revisions); + foreach($toslice as $sliced) + $newcache[$sliced] = $tocache[$sliced]; + foreach($tocache as $version => $versioninfo) { + if(!in_array($version, array_keys($newcache))) { + unlink_if_exists($g['conf_path'] . '/backup/config-' . $version . '.xml'); + //if($g['booting']) print " " . $tocheck . "d"; + } + } + $tocache = $newcache; + } + $bakout = fopen($g['cf_conf_path'] . '/backup/backup.cache', "w"); + fwrite($bakout, serialize($tocache)); + fclose($bakout); + conf_mount_ro(); + + if (!$lock) + unlock($lockkey); +} + +function get_backups() { + global $g; + if(file_exists("{$g['cf_conf_path']}/backup/backup.cache")) { + $confvers = unserialize(file_get_contents("{$g['cf_conf_path']}/backup/backup.cache")); + $bakvers = array_keys($confvers); + $toreturn = array(); + sort($bakvers); + // $bakvers = array_reverse($bakvers); + foreach(array_reverse($bakvers) as $bakver) + $toreturn[] = array('time' => $bakver, 'description' => $confvers[$bakver]['description'], 'version' => $confvers[$bakver]['version'], 'filesize' => $confvers[$bakver]['filesize']); + } else { + return false; + } + $toreturn['versions'] = $bakvers; + return $toreturn; +} + +function backup_config() { + global $config, $g; + + if($g['platform'] == "cdrom") + return; + + conf_mount_rw(); + + /* Create backup directory if needed */ + safe_mkdir("{$g['cf_conf_path']}/backup"); + + if($config['revision']['time'] == "") { + $baktime = 0; + } else { + $baktime = $config['revision']['time']; + } + if($config['revision']['description'] == "") { + $bakdesc = "Unknown"; + } else { + $bakdesc = $config['revision']['description']; + } + + $bakver = ($config['version'] == "") ? "?" : $config['version']; + $bakfilename = $g['cf_conf_path'] . '/backup/config-' . $baktime . '.xml'; + copy($g['cf_conf_path'] . '/config.xml', $bakfilename); + if(file_exists($g['cf_conf_path'] . '/backup/backup.cache')) { + $backupcache = unserialize(file_get_contents($g['cf_conf_path'] . '/backup/backup.cache')); + } else { + $backupcache = array(); + } + $backupcache[$baktime] = array('description' => $bakdesc, 'version' => $bakver, 'filesize' => filesize($bakfilename)); + $bakout = fopen($g['cf_conf_path'] . '/backup/backup.cache', "w"); + fwrite($bakout, serialize($backupcache)); + fclose($bakout); + + conf_mount_ro(); + + return true; +} + +function set_device_perms() { + $devices = array( + 'pf' => array( 'user' => 'root', + 'group' => 'proxy', + 'mode' => 0660), + ); + + foreach ($devices as $name => $attr) { + $path = "/dev/$name"; + if (file_exists($path)) { + chown($path, $attr['user']); + chgrp($path, $attr['group']); + chmod($path, $attr['mode']); + } + } +} + +function get_config_user() { + if (empty($_SESSION["Username"])) { + $username = getenv("USER"); + if (empty($conuser) || $conuser == "root") + $username = "(system)"; + } else + $username = $_SESSION["Username"]; + + if (!empty($_SERVER['REMOTE_ADDR'])) + $username .= '@' . $_SERVER['REMOTE_ADDR']; + + return $username; +} + +function make_config_revision_entry($desc = null, $override_user = null) { + if (empty($override_user)) + $username = get_config_user(); + else + $username = $override_user; + + $revision = array(); + + if (time() > mktime(0, 0, 0, 9, 1, 2004)) /* make sure the clock settings are plausible */ + $revision['time'] = time(); + + /* Log the running script so it's not entirely unlogged what changed */ + if ($desc == "Unknown") + $desc = sprintf(gettext("%s made unknown change"), $_SERVER['SCRIPT_NAME']); + if (!empty($desc)) + $revision['description'] = "{$username}: " . $desc; + $revision['username'] = $username; + return $revision; +} + +function get_config_backup_count() { + global $config, $g; + if (isset($config['system']['backupcount']) && is_numeric($config['system']['backupcount']) && ($config['system']['backupcount'] >= 0)) { + return intval($config['system']['backupcount']); + } elseif ($g['platform'] == "nanobsd") { + return 5; + } else { + return 30; + } +} + +function pfSense_clear_globals() { + global $config, $FilterIfList, $GatewaysList, $filterdns, $aliases, $aliastable; + + if (isset($FilterIfList)) + unset($FilterIfList); + + if (isset($GatewaysList)) + unset($GatewaysList); + + /* Used for the hostname dns resolver */ + if (isset($filterdns)) + unset($filterdns); + + /* Used for aliases and interface macros */ + if (isset($aliases)) + unset($aliases); + if (isset($aliastable)) + unset($aliastable); + + unset($config); +} + +register_shutdown_function('pfSense_clear_globals'); + +?> diff --git a/etc/inc/cram_md5_sasl_client.inc b/etc/inc/cram_md5_sasl_client.inc new file mode 100644 index 000000000..69bd625a4 --- /dev/null +++ b/etc/inc/cram_md5_sasl_client.inc @@ -0,0 +1,67 @@ +state!=SASL_CRAM_MD5_STATE_START) + { + $client->error="CRAM-MD5 authentication state is not at the start"; + return(SASL_FAIL); + } + $this->credentials=array( + "user"=>"", + "password"=>"" + ); + $defaults=array(); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + $this->state=SASL_CRAM_MD5_STATE_RESPOND_CHALLENGE; + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { + case SASL_CRAM_MD5_STATE_RESPOND_CHALLENGE: + $message=$this->credentials["user"]." ".$this->HMACMD5($this->credentials["password"], $response); + $this->state=SASL_CRAM_MD5_STATE_DONE; + break; + case SASL_CRAM_MD5_STATE_DONE: + $client->error="CRAM-MD5 authentication was finished without success"; + return(SASL_FAIL); + default: + $client->error="invalid CRAM-MD5 authentication step state"; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> \ No newline at end of file diff --git a/etc/inc/crypt.inc b/etc/inc/crypt.inc new file mode 100644 index 000000000..8515c84e1 --- /dev/null +++ b/etc/inc/crypt.inc @@ -0,0 +1,101 @@ += 64) { + $line = substr($in, $oset, 64); + $out .= $line."\n"; + $size = strlen($line); + $oset += $size; + } + + $out .= "---- END {$tag} ----\n"; + + return true; + } + + function tagfile_deformat($in, & $out, $tag) { + + $btag_val = "---- BEGIN {$tag} ----"; + $etag_val = "---- END {$tag} ----"; + + $btag_len = strlen($btag_val); + $etag_len = strlen($etag_val); + + $btag_pos = stripos($in, $btag_val); + $etag_pos = stripos($in, $etag_val); + + if (($btag_pos === false) || ($etag_pos === false)) + return false; + + $body_pos = $btag_pos + $btag_len; + $body_len = strlen($in); + $body_len -= $btag_len; + $body_len -= $etag_len + 1; + + $out = substr($in, $body_pos, $body_len); + + return true; + } + +?> diff --git a/etc/inc/digest_sasl_client.inc b/etc/inc/digest_sasl_client.inc new file mode 100644 index 000000000..924887d15 --- /dev/null +++ b/etc/inc/digest_sasl_client.inc @@ -0,0 +1,135 @@ +H($secret.':'.$data); + } + + Function Initialize(&$client) + { + return(1); + } + + Function Start(&$client, &$message, &$interactions) + { + if($this->state!=SASL_DIGEST_STATE_START) + { + $client->error='Digest authentication state is not at the start'; + return(SASL_FAIL); + } + $this->credentials=array( + 'user'=>'', + 'password'=>'', + 'uri'=>'', + 'method'=>'', + 'session'=>'' + ); + $defaults=array(); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + $this->state=SASL_DIGEST_STATE_RESPOND_CHALLENGE; + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { + case SASL_DIGEST_STATE_RESPOND_CHALLENGE: + $values=explode(',',$response); + $parameters=array(); + for($v=0; $vcredentials['user'].'"'; + if(!IsSet($parameters[$p='realm']) + && !IsSet($parameters[$p='nonce'])) + { + $client->error='Digest authentication parameter '.$p.' is missing from the server response'; + return(SASL_FAIL); + } + $message.=', realm='.$parameters['realm']; + $message.=', nonce='.$parameters['nonce']; + $message.=', uri="'.$this->credentials['uri'].'"'; + if(IsSet($parameters['algorithm'])) + { + $algorithm=$this->unq($parameters['algorithm']); + $message.=', algorithm='.$parameters['algorithm']; + } + else + $algorithm=''; + + $realm=$this->unq($parameters['realm']); + $nonce=$this->unq($parameters['nonce']); + if(IsSet($parameters['qop'])) + { + switch($qop=$this->unq($parameters['qop'])) + { + case "auth": + $cnonce=$this->credentials['session']; + break; + default: + $client->error='Digest authentication quality of protection '.$qop.' is not yet supported'; + return(SASL_FAIL); + } + } + $nc_value='00000001'; + if(IsSet($parameters['qop']) + && !strcmp($algorithm, 'MD5-sess')) + $A1=$this->H($this->credentials['user'].':'. $realm.':'. $this->credentials['password']).':'.$nonce.':'.$cnonce; + else + $A1=$this->credentials['user'].':'. $realm.':'. $this->credentials['password']; + $A2=$this->credentials['method'].':'.$this->credentials['uri']; + if(IsSet($parameters['qop'])) + $response=$this->KD($this->H($A1), $nonce.':'. $nc_value.':'. $cnonce.':'. $qop.':'. $this->H($A2)); + else + $response=$this->KD($this->H($A1), $nonce.':'. $this->H($A2)); + $message.=', response="'.$response.'"'; + if(IsSet($parameters['opaque'])) + $message.=', opaque='.$parameters['opaque']; + if(IsSet($parameters['qop'])) + $message.=', qop="'.$qop.'"'; + $message.=', nc='.$nc_value; + if(IsSet($parameters['qop'])) + $message.=', cnonce="'.$cnonce.'"'; + $client->encode_response=0; + $this->state=SASL_DIGEST_STATE_DONE; + break; + case SASL_DIGEST_STATE_DONE: + $client->error='Digest authentication was finished without success'; + return(SASL_FAIL); + default: + $client->error='invalid Digest authentication step state'; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> \ No newline at end of file diff --git a/etc/inc/dyndns.class b/etc/inc/dyndns.class new file mode 100644 index 000000000..217736014 --- /dev/null +++ b/etc/inc/dyndns.class @@ -0,0 +1,1427 @@ +_cacheFile = "{$g['conf_path']}/dyndns_{$dnsIf}{$dnsService}" . escapeshellarg($dnsHost) . "{$dnsID}.cache"; + $this->_cacheFile_v6 = "{$g['conf_path']}/dyndns_{$dnsIf}{$dnsService}" . escapeshellarg($dnsHost) . "{$dnsID}_v6.cache"; + $this->_debugFile = "{$g['varetc_path']}/dyndns_{$dnsIf}{$dnsService}" . escapeshellarg($dnsHost) . "{$dnsID}.debug"; + + $this->_curlIpresolveV4 = $curlIpresolveV4; + $this->_curlSslVerifypeer = $curlSslVerifypeer; + $this->_dnsVerboseLog = $dnsVerboseLog; + if ($this->_dnsVerboseLog) + log_error("DynDns: updatedns() starting"); + + $dyndnslck = lock("DDNS".$dnsID, LOCK_EX); + + if (!$dnsService) $this->_error(2); + switch ($dnsService) { + case 'freedns': + if (!$dnsHost) $this->_error(5); + break; + case 'namecheap': + if (!$dnsPass) $this->_error(4); + if (!$dnsHost) $this->_error(5); + break; + case 'route53': + if (!$dnsZoneID) $this->_error(8); + if (!$dnsTTL) $this->_error(9); + break; + case 'custom': + if (!$dnsUpdateURL) $this->_error(7); + break; + default: + if (!$dnsUser) $this->_error(3); + if (!$dnsPass) $this->_error(4); + if (!$dnsHost) $this->_error(5); + } + + switch ($dnsService) { + case 'he-net-v6': + case 'custom-v6': + $this->_useIPv6 = true; + break; + default: + $this->_useIPv6 = false; + } + $this->_dnsService = strtolower($dnsService); + $this->_dnsUser = $dnsUser; + $this->_dnsPass = $dnsPass; + $this->_dnsHost = $dnsHost; + $this->_dnsServer = $dnsServer; + $this->_dnsPort = $dnsPort; + $this->_dnsWildcard = $dnsWildcard; + $this->_dnsMX = $dnsMX; + $this->_dnsZoneID = $dnsZoneID; + $this->_dnsTTL = $dnsTTL; + $this->_if = get_failover_interface($dnsIf); + $this->_checkIP(); + $this->_dnsUpdateURL = $dnsUpdateURL; + $this->_dnsResultMatch = $dnsResultMatch; + $this->_dnsRequestIf = get_failover_interface($dnsRequestIf); + if ($this->_dnsVerboseLog) + log_error("DynDNS ({$this->_dnsHost}): running get_failover_interface for {$dnsRequestIf}. found {$this->_dnsRequestIf}"); + $this->_dnsRequestIfIP = get_interface_ip($dnsRequestIf); + $this->_dnsMaxCacheAgeDays = 25; + $this->_dnsDummyUpdateDone = false; + $this->_forceUpdateNeeded = $forceUpdate; + + // Ensure that we were able to lookup the IP + if(!is_ipaddr($this->_dnsIP)) { + log_error("DynDNS ({$this->_dnsHost}) There was an error trying to determine the public IP for interface - {$dnsIf}({$this->_if}). Probably interface is not a WAN interface."); + unlock($dyndnslck); + return; + } + + $this->_debugID = rand(1000000, 9999999); + + if ($forceUpdate == false && $this->_detectChange() == false) { + $this->_error(10); + } else { + switch ($this->_dnsService) { + case 'dnsomatic': + case 'dyndns': + case 'dyndns-static': + case 'dyndns-custom': + case 'dhs': + case 'noip': + case 'noip-free': + case 'easydns': + case 'hn': + case 'zoneedit': + case 'dyns': + case 'ods': + case 'freedns': + case 'loopia': + case 'staticcling': + case 'dnsexit': + case 'custom': + case 'custom-v6': + case 'opendns': + case 'namecheap': + case 'he-net': + case 'he-net-v6': + case 'selfhost': + case 'he-net-tunnelbroker': + case 'route53': + case 'cloudflare': + case 'eurodns': + case 'gratisdns': + case 'ovh-dynhost': + case 'citynetwork': + $this->_update(); + if($this->_dnsDummyUpdateDone == true) { + // If a dummy update was needed, then sleep a while and do the update again to put the proper address back. + // Some providers (e.g. No-IP free accounts) need to have at least 1 address change every month. + // If the address has not changed recently, or the user did "Force Update", then the code does + // a dummy address change for providers like this. + sleep(10); + $this->_update(); + } + break; + default: + $this->_error(6); + break; + } + } + + unlock($dyndnslck); + } + + /* + * Private Function (added 12 July 05) [beta] + * Send Update To Selected Service. + */ + function _update() { + + if ($this->_dnsVerboseLog) + log_error("DynDNS ({$this->_dnsHost}): DynDns _update() starting."); + + if ($this->_dnsService != 'ods' and $this->_dnsService != 'route53 ') { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_USERAGENT, $this->_UserAgent); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ch, CURLOPT_INTERFACE, $this->_dnsRequestIfIP); + curl_setopt($ch, CURLOPT_TIMEOUT, 120); // Completely empirical + } + + switch ($this->_dnsService) { + case 'dyndns': + case 'dyndns-static': + case 'dyndns-custom': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("DynDNS: ({$this->_dnsHost}) DNS update() starting."); + if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://members.dyndns.org/nic/update"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port . '?system=dyndns&hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP . '&wildcard='.$this->_dnsWildcard . '&mx=' . $this->_dnsMX . '&backmx=NO'); + break; + case 'dhs': + $needsIP = TRUE; + $post_data['hostscmd'] = 'edit'; + $post_data['hostscmdstage'] = '2'; + $post_data['type'] = '4'; + $post_data['updatetype'] = 'Online'; + $post_data['mx'] = $this->_dnsMX; + $post_data['mx2'] = ''; + $post_data['txt'] = ''; + $post_data['offline_url'] = ''; + $post_data['cloak'] = 'Y'; + $post_data['cloak_title'] = ''; + $post_data['ip'] = $this->_dnsIP; + $post_data['domain'] = 'dyn.dhs.org'; + $post_data['hostname'] = $this->_dnsHost; + $post_data['submit'] = 'Update'; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + $server = "https://members.dhs.org/nic/hosts"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, '{$server}{$port}'); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); + break; + case 'noip': + case 'noip-free': + $needsIP = TRUE; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + $server = "https://dynupdate.no-ip.com/ducupdate.php"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + if(($this->_dnsService == "noip-free") && + ($this->_forceUpdateNeeded == true) && + ($this->_dnsDummyUpdateDone == false)) { + // Update the IP to a dummy value to force No-IP free accounts to see a change. + $iptoset = "192.168.1.1"; + $this->_dnsDummyUpdateDone = true; + log_error("DynDNS ({$this->_dnsHost}): Processing dummy update on No-IP free account. IP temporarily set to " . $iptoset); + } else { + $iptoset = $this->_dnsIP; + } + curl_setopt($ch, CURLOPT_URL, $server . $port . '?username=' . urlencode($this->_dnsUser) . '&pass=' . urlencode($this->_dnsPass) . '&hostname=' . $this->_dnsHost.'&ip=' . $iptoset); + break; + case 'easydns': + $needsIP = TRUE; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://members.easydns.com/dyn/dyndns.php"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server . $port . '?hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP . '&wildcard=' . $this->_dnsWildcard . '&mx=' . $this->_dnsMX . '&backmx=' . $this->_dnsBackMX); + break; + case 'hn': + $needsIP = TRUE; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "http://dup.hn.org/vanity/update"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server . $port . '?ver=1&IP=' . $this->_dnsIP); + break; + case 'zoneedit': + $needsIP = FALSE; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + + $server = "https://dynamic.zoneedit.com/auth/dynamic.html"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, "{$server}{$port}?host=" .$this->_dnsHost); + break; + case 'dyns': + $needsIP = FALSE; + $server = "https://www.dyns.cx/postscript011.php"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server . $port . '?username=' . urlencode($this->_dnsUser) . '&password=' . $this->_dnsPass . '&host=' . $this->_dnsHost); + break; + case 'ods': + $needsIP = FALSE; + $misc_errno = 0; + $misc_error = ""; + $server = "ods.org"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + $this->con['socket'] = fsockopen("{$server}{$port}", "7070", $misc_errno, $misc_error, 30); + /* Check that we have connected */ + if (!$this->con['socket']) { + print "error! could not connect."; + break; + } + /* Here is the loop. Read the incoming data (from the socket connection) */ + while (!feof($this->con['socket'])) { + $this->con['buffer']['all'] = trim(fgets($this->con['socket'], 4096)); + $code = substr($this->con['buffer']['all'], 0, 3); + sleep(1); + switch($code) { + case 100: + fputs($this->con['socket'], "LOGIN ".$this->_dnsUser." ".$this->_dnsPass."\n"); + break; + case 225: + fputs($this->con['socket'], "DELRR ".$this->_dnsHost." A\n"); + break; + case 901: + fputs($this->con['socket'], "ADDRR ".$this->_dnsHost." A ".$this->_dnsIP."\n"); + break; + case 795: + fputs($this->con['socket'], "QUIT\n"); + break; + } + } + $this->_checkStatus(0, $code); + break; + case 'freedns': + $needIP = FALSE; + curl_setopt($ch, CURLOPT_URL, 'https://freedns.afraid.org/dynamic/update.php?' . $this->_dnsPass); + break; + case 'dnsexit': + $needsIP = TRUE; + curl_setopt($ch, CURLOPT_URL, 'https://www.dnsexit.com/RemoteUpdate.sv?login='.$this->_dnsUser. '&password='.$this->_dnsPass.'&host='.$this->_dnsHost.'&myip='.$this->_dnsIP); + break; + case 'loopia': + $needsIP = TRUE; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + curl_setopt($ch, CURLOPT_URL, 'https://dns.loopia.se/XDynDNSServer/XDynDNS.php?hostname='.$this->_dnsHost.'&myip='.$this->_dnsIP); + break; + case 'opendns': + $needsIP = FALSE; + if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://updates.opendns.com/nic/update?hostname=". $this->_dnsHost; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port); + break; + + case 'staticcling': + $needsIP = FALSE; + curl_setopt($ch, CURLOPT_URL, 'https://www.staticcling.org/update.html?login='.$this->_dnsUser.'&pass='.$this->_dnsPass); + break; + case 'dnsomatic': + /* Example syntax + https://username:password@updates.dnsomatic.com/nic/update?hostname=yourhostname&myip=ipaddress&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG + */ + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("DNS-O-Matic: DNS update() starting."); + if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + /* + Reference: https://www.dnsomatic.com/wiki/api + DNS-O-Matic usernames are 3-25 characters. + DNS-O-Matic passwords are 6-20 characters. + All ASCII letters and numbers accepted. + Dots, dashes, and underscores allowed, but not at the beginning or end of the string. + Required: "rawurlencode" http://www.php.net/manual/en/function.rawurlencode.php + Encodes the given string according to RFC 3986. + */ + $server = "https://" . rawurlencode($this->_dnsUser) . ":" . rawurlencode($this->_dnsPass) . "@updates.dnsomatic.com/nic/update?hostname="; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server . $this->_dnsHost . '&myip=' . $this->_dnsIP . '&wildcard='.$this->_dnsWildcard . '&mx=' . $this->_dnsMX . '&backmx=NOCHG'); + break; + case 'namecheap': + /* Example: + https://dynamicdns.park-your-domain.com/update?host=[host_name]&domain=[domain.com]&password=[domain_password]&ip=[your_ip] + */ + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("Namecheap ({$this->_dnsHost}): DNS update() starting."); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + $dparts = explode(".", trim($this->_dnsHost)); + $domain_part_count = ($dparts[count($dparts)-1] == "uk") ? 3 : 2; + $domain_offset = count($dparts) - $domain_part_count; + $hostname = implode(".", array_slice($dparts, 0, $domain_offset)); + $domain = implode(".", array_slice($dparts, $domain_offset)); + $dnspass = trim($this->_dnsPass); + $server = "https://dynamicdns.park-your-domain.com/update?host={$hostname}&domain={$domain}&password={$dnspass}&ip={$this->_dnsIP}"; + curl_setopt($ch, CURLOPT_URL, $server); + break; + case 'he-net': + case 'he-net-v6': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("HE.net ({$this->_dnsHost}): DNS update() starting."); + $server = "https://dyn.dns.he.net/nic/update?"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); + curl_setopt($ch, CURLOPT_URL, $server . 'hostname=' . $this->_dnsHost . '&password=' . $this->_dnsPass . '&myip=' . $this->_dnsIP); + break; + case 'he-net-tunnelbroker': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("HE.net Tunnelbroker: DNS update() starting."); + $server = "https://ipv4.tunnelbroker.net/ipv4_end.php?"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser . ':' . $this->_dnsPass); + curl_setopt($ch, CURLOPT_URL, $server . 'tid=' . $this->_dnsHost); + break; + case 'selfhost': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("SelfHost: DNS update() starting."); + if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://carol.selfhost.de/nic/update"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port . '?system=dyndns&hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP . '&wildcard='.$this->_dnsWildcard . '&mx=' . $this->_dnsMX . '&backmx=NO'); + break; + case 'route53': + if ($this->_dnsVerboseLog) + log_error("Route53 ({$this->_dnsHost}): DNS update() starting."); + + /* Setting Variables */ + $hostname = "{$this->_dnsHost}."; + $ZoneID = $this->_dnsZoneID; + $AccessKeyId=$this->_dnsUser; + $SecretAccessKey=$this->_dnsPass; + $NewIP=$this->_dnsIP; + $NewTTL=$this->_dnsTTL; + + /* Include Route 53 Library Class */ + require_once('/etc/inc/r53.class'); + + /* Set Amazon AWS Credentials for this record */ + $r53 = new Route53($AccessKeyId, $SecretAccessKey); + + /* Function to find old values of records in Route 53 */ + if(!function_exists('Searchrecords')) { + function SearchRecords($records, $name) { + $result = array(); + foreach($records as $record) { + if(strtolower($record['Name']) == strtolower($name)) { + $result [] = $record; + } + } + return ($result) ? $result : false; + } + } + + $records = $r53->listResourceRecordSets("/hostedzone/$ZoneID"); + + /* Get IP for your hostname in Route 53 */ + if(false !== ($a_result = SearchRecords($records['ResourceRecordSets'], "$hostname"))) { + $OldTTL=$a_result[0][TTL]; + $OldIP=$a_result[0][ResourceRecords][0]; + } else { + $OldIP=""; + } + + /* Check if we need to update DNS Record */ + if ($OldIP !== $NewIP) { + if(!empty($OldIP)) { + /* Your Hostname already exists, deleting and creating it again */ + $changes = array(); + $changes[] = $r53->prepareChange(DELETE, $hostname, A, $OldTTL, $OldIP); + $changes[] = $r53->prepareChange(CREATE, $hostname, A, $NewTTL, $NewIP); + $result = $r53->changeResourceRecordSets("/hostedzone/$ZoneID", $changes); + } else { + /* Your Hostname does not exist yet, creating it */ + $changes = $r53->prepareChange(CREATE, $hostname, A, $NewTTL, $NewIP); + $result = $r53->changeResourceRecordSets("/hostedzone/$ZoneID", $changes); + } + } + $this->_checkStatus(0, $result); + break; + case 'custom': + case 'custom-v6': + if ($this->_dnsVerboseLog) + log_error("Custom DDNS ({$this->_dnsHost}): DNS update() starting."); + if (strstr($this->dnsUpdateURL, "%IP%")) {$needsIP = TRUE;} else {$needsIP = FALSE;} + if ($this->_dnsUser != '') { + if ($this->_curlIpresolveV4) + curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); + if ($this->_curlSslVerifypeer) + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE); + else + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); + curl_setopt($ch, CURLOPT_USERPWD, "{$this->_dnsUser}:{$this->_dnsPass}"); + } + $server = str_replace("%IP%", $this->_dnsIP, $this->_dnsUpdateURL); + if ($this->_dnsVerboseLog) + log_error("Sending request to: ".$server); + curl_setopt($ch, CURLOPT_URL, $server); + break; + case 'cloudflare': + $needsIP = TRUE; + $dnsServer ='www.cloudflare.com'; + $dnsHost = str_replace(' ','', $this->_dnsHost); + $URL = "https://{$dnsServer}/api.html?a=DIUP&email={$this->_dnsUser}&tkn={$this->_dnsPass}&ip={$this->_dnsIP}&hosts={$dnsHost}"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_URL, $URL); + break; + case 'eurodns': + $needsIP = TRUE; + if ($this->_dnsVerboseLog) + log_error("EuroDynDns ({$this->_dnsHost}) DNS update() starting."); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://eurodyndns.org/update/"; + $port = ""; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port . '?hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP); + break; + case 'gratisdns': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("GratisDNS.dk ({$this->_dnsHost}): DNS update() starting."); + $server = "https://ssl.gratisdns.dk/ddns.phtml"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + list($hostname, $domain) = explode(".", $this->_dnsHost, 2); + curl_setopt($ch, CURLOPT_URL, $server . '?u=' . $this->_dnsUser . '&p=' . $this->_dnsPass . '&h=' . $this->_dnsHost . '&d=' . $domain); + break; + case 'ovh-dynhost': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("OVH DynHOST: ({$this->_dnsHost}) DNS update() starting."); + if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://www.ovh.com/nic/update"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port . '?system=dyndns&hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP . '&wildcard='.$this->_dnsWildcard . '&mx=' . $this->_dnsMX . '&backmx=NO'); + break; + case 'citynetwork': + $needsIP = TRUE; + if ($this->_dnsVerboseLog) + log_error("City Network: ({$this->_dnsHost}) DNS update() starting."); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = 'https://dyndns.citynetwork.se/nic/update'; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port . '?hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP); + break; + default: + break; + } + if ($this->_dnsService != 'ods' and $this->_dnsService != 'route53') { + $data = curl_exec($ch); + $this->_checkStatus($ch, $data); + @curl_close($ch); + } + } + + /* + * Private Function (added 12 July 2005) [beta] + * Retrieve Update Status + */ + function _checkStatus($ch, $data) { + if ($this->_dnsVerboseLog) { + log_error("DynDNS ({$this->_dnsHost}): DynDns _checkStatus() starting."); + log_error("DynDNS ({$this->_dnsHost}): Current Service: {$this->_dnsService}"); + } + $successful_update = false; + if ($this->_dnsService != 'ods' and $this->_dnsService != 'route53' && @curl_error($ch)) { + $status = "Curl error occurred: " . curl_error($ch); + log_error($status); + $this->status = $status; + return; + } + switch ($this->_dnsService) { + case 'dnsomatic': + if (preg_match('/badauth/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): The DNS-O-Matic username or password specified are incorrect. No updates will be distributed to services until this is resolved."; + } else if (preg_match('/notfqdn /i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): The hostname specified is not a fully-qualified domain name. If no hostnames included, notfqdn will be returned once."; + } else if (preg_match('/nohost/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): The hostname passed could not be matched to any services configured. The service field will be blank in the return code."; + } else if (preg_match('/numhost/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): You may update up to 20 hosts. numhost is returned if you try to update more than 20 or update a round-robin."; + } else if (preg_match('/abuse/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): The hostname is blocked for update abuse."; + } else if (preg_match('/good/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/dnserr/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): DNS error encountered. Stop updating for 30 minutes."; + } else { + $status = "DNS-O-Matic ({$this->_dnsHost}): (Unknown Response)"; + log_error("DNS-O-Matic ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'citynetwork': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Not A FQDN!"; + } else if (preg_match('/nohost/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) No such host"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/badauth/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'ovh-dynhost': + case 'dyndns': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Not A FQDN!"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/noauth/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'dyndns-static': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Not A FQDN!"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully!"; + $successful_update = true; + } else if (preg_match('/noauth/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'dyndns-custom': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Not A FQDN!"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS: (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully!"; + $successful_update = true; + } else if (preg_match('/noauth/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'dhs': + break; + case 'noip': + case 'noip-free': + list($ip,$code) = explode(":",$data); + switch ($code) { + case 0: + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP address is current, no update performed."; + $successful_update = true; + break; + case 1: + $status = "phpDynDNS ({$this->_dnsHost}): (Success) DNS hostname update successful."; + $successful_update = true; + break; + case 2: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Hostname supplied does not exist."; + break; + case 3: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Invalid Username."; + break; + case 4: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Invalid Password."; + break; + case 5: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) To many updates sent."; + break; + case 6: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Account disabled due to violation of No-IP terms of service."; + break; + case 7: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Invalid IP. IP Address submitted is improperly formatted or is a private IP address or is on a blacklist."; + break; + case 8: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Disabled / Locked Hostname."; + break; + case 9: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Host updated is configured as a web redirect and no update was performed."; + break; + case 10: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Group supplied does not exist."; + break; + case 11: + $status = "phpDynDNS ({$this->_dnsHost}): (Success) DNS group update is successful."; + $successful_update = true; + break; + case 12: + $status = "phpDynDNS ({$this->_dnsHost}): (Success) DNS group is current, no update performed."; + $successful_update = true; + break; + case 13: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Update client support not available for supplied hostname or group."; + break; + case 14: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Hostname supplied does not have offline settings configured."; + break; + case 99: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Client disabled. Client should exit and not perform any more updates without user intervention."; + break; + case 100: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Client disabled. Client should exit and not perform any more updates without user intervention."; + break; + default: + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + $this->_debug("Unknown Response: ".$data); + break; + } + break; + case 'easydns': + if (preg_match('/NOACCESS/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Authentication Failed: Username and/or Password was Incorrect."; + } else if (preg_match('/NOSERVICE/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) No Service: Dynamic DNS Service has been disabled for this domain."; + } else if (preg_match('/ILLEGAL INPUT/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Illegal Input: Self-Explanatory"; + } else if (preg_match('/TOOSOON/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Too Soon: Not Enough Time Has Elapsed Since Last Update"; + } else if (preg_match('/NOERROR/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'hn': + /* FIXME: add checks */ + break; + case 'zoneedit': + if (preg_match('/799/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error 799) Update Failed!"; + } else if (preg_match('/700/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error 700) Update Failed!"; + } else if (preg_match('/200/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else if (preg_match('/201/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'dyns': + if (preg_match("/400/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Bad Request - The URL was malformed. Required parameters were not provided."; + } else if (preg_match('/402/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Update Too Soon - You have tried updating to quickly since last change."; + } else if (preg_match('/403/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Database Error - There was a server-sided database error."; + } else if (preg_match('/405/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Hostname Error - The hostname (".$this->_dnsHost.") doesn't belong to you."; + } else if (preg_match('/200/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'ods': + if (preg_match("/299/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'freedns': + if (preg_match("/has not changed./i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match("/Updated/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'dnsexit': + if (preg_match("/is the same/i", $data)) { + $status = "phpDynDns ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match("/Success/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'loopia': + if (preg_match("/nochg/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match("/good/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully!"; + $successful_update = true; + } else if (preg_match('/badauth/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'opendns': + if (preg_match('/badauth/i', $data)) { + $status = "phpDynDNS({$this->_dnsHost}): (Error) Not a valid username or password!"; + } else if (preg_match('/nohost/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Hostname you are trying to update does not exist."; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/yours/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) hostname specified exists, but not under the username specified."; + } else if (preg_match('/abuse/i', $data)) { + $status = "phpDynDns ({$this->_dnsHost}): (Error) Updating too frequently, considered abuse."; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'staticcling': + if (preg_match("/invalid ip/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Bad Request - The IP provided was invalid."; + } else if (preg_match('/required info missing/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Bad Request - Required parameters were not provided."; + } else if (preg_match('/invalid characters/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Bad Request - Illegal characters in either the username or the password."; + } else if (preg_match('/bad password/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Invalid password."; + } else if (preg_match('/account locked/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) This account has been administratively locked."; + } else if (preg_match('/update too frequent/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Updating too frequently."; + } else if (preg_match('/DB error/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Server side error."; + } else if (preg_match('/success/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'namecheap': + $tmp = str_replace("^M", "", $data); + $ncresponse = @xml2array($tmp); + if (preg_match("/internal server error/i", $data)) { + $status = "phpDynDNS: (Error) Server side error."; + } else if (preg_match("/request is badly formed/i", $data)) { + $status = "phpDynDNS: (Error) Badly Formed Request (check your settings)."; + } else if ($ncresponse['interface-response']['ErrCount'] === "0") { + $status = "phpDynDNS: (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else if (is_numeric($ncresponse['interface-response']['ErrCount']) && ($ncresponse['interface-response']['ErrCount'] > 0)) { + $status = "phpDynDNS: (Error) " . implode(", ", $ncresponse["interface-response"]["errors"]); + $successful_update = true; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + + case 'he-net': + case 'he-net-v6': + if (preg_match("/badip/i", $data)) { + $status = "phpDynDNS: (Error) Bad Request - The IP provided was invalid."; + } else if (preg_match('/nohost/i', $data)) { + $status = "phpDynDNS: (Error) Bad Request - A hostname was not provided."; + } else if (preg_match('/badauth/i', $data)) { + $status = "phpDynDNS: (Error) Invalid username or password."; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS: (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS: (Success) No Change In IP Address."; + $successful_update = true; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'he-net-tunnelbroker': + /* + -ERROR: Missing parameter(s). + -ERROR: Invalid API key or password + -ERROR: Tunnel not found + -ERROR: Another tunnel exists for this IP. + -ERROR: This tunnel is already associated with this IP address + +OK: Tunnel endpoint updated to: x.x.x.x + */ + if (preg_match("/Missing parameter/i", $data)) { + $status = "phpDynDNS: (Error) Bad Request - Missing/Invalid Parameters."; + } else if (preg_match('/Tunnel not found/i', $data)) { + $status = "phpDynDNS: (Error) Bad Request - Invalid Tunnel ID."; + } else if (preg_match('/Invalid API key or password/i', $data)) { + $status = "phpDynDNS: (Error) Invalid username or password."; + } else if (preg_match('/OK:/i', $data)) { + $status = "phpDynDNS: (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else if (preg_match('/This tunnel is already associated with this IP address/i', $data)) { + $status = "phpDynDNS: (Success) No Change In IP Address."; + $successful_update = true; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'selfhost': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS: (Error) Not A FQDN!"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS: (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS: (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/noauth/i', $data)) { + $status = "phpDynDNS: (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'route53': + $successful_update = true; + break; + case 'custom': + case 'custom-v6': + $successful_update = false; + if ($this->_dnsResultMatch == "") { + $successful_update = true; + }else { + $this->_dnsResultMatch = str_replace("%IP%", $this->_dnsIP, $this->_dnsResultMatch); + $matches = preg_split("/(?_dnsResultMatch); + foreach($matches as $match) { + $match= str_replace("\\|", "|", $match); + if(strcmp($match, trim($data, "\t\n\r")) == 0) + $successful_update = true; + } + unset ($matches); + } + if ($successful_update == true) + $status = "phpDynDNS: (Success) IP Address Updated Successfully!"; + else + $status = "phpDynDNS: (Error) Result did not match."; + break; + case 'cloudflare': + // recieve multipe results + $data = explode("\n",$data); + $lines = count($data)-1; + + // loop over the lines + for ($pos=0; ($successful_update || $pos == 0) && $pos < $lines; $pos++){ + $resp = $data[$pos]; + if (preg_match('/UAUTH/i', $resp)) { + $status = "DynDNS: The username specified is not authorized to update this hostname and domain."; + } else if (preg_match('/NOHOST/i', $resp)) { + $status = "DynDNS: No valid FQDN (fully qualified domain name) was specified"; + } else if (preg_match('/INVLDHST/i', $resp)) { + $status = "DynDNS: An invalid hostname was specified. This may be due to the fact the hostname has not been created in the system. Creating new host names via clients is not supported."; + } else if (preg_match('/INVLDIP/i', $resp)) { + $status = "DynDNS: The IP address given is not valid."; + } else if (preg_match('/DUPHST/i', $resp)) { + $status = "DynDNS: Duplicate values exist for a record. Only single values for records are supported currently."; + } else if (preg_match('/NOUPDATE/i', $resp)) { + $status = "DynDNS: No changes made to the hostname (".strtok($resp,' ')."). Continual updates with no changes lead to blocked clients."; + $successful_update = true; //success if it is the same so that it saves + } else if (preg_match('/OK/i', $resp)) { + $status = "DynDNS: (Success) (".strtok($resp,' ').") IP Address for Changed Successfully!"; + $successful_update = true; + } else { + $status = "DynDNS: (Unknown Response)"; + log_error("DynDNS: PAYLOAD: {$resp}"); + $this->_debug($resp); + } + log_error($status); + } + break; + case 'eurodns': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS: (Error) Not A FQDN!"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS: (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS: (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/badauth/i', $data)) { + $status = "phpDynDNS: (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'gratisdns': + if (preg_match('/Forkerte værdier/i', $data)) { + $status = "phpDynDNS: (Error) Wrong values - Update could not be completed."; + } else if (preg_match('/Bruger login: Bruger eksistere ikke/i', $data)) { + $status = "phpDynDNS: (Error) Unknown username - User does not exist."; + } else if (preg_match('/Bruger login: 1Fejl i kodeord/i', $data)) { + $status = "phpDynDNS: (Error) Wrong password - Remember password is case sensitive."; + } else if (preg_match('/Domæne kan IKKE administreres af bruger/i', $data)) { + $status = "phpDynDNS: (Error) User unable to administer the selected domain."; + } else if (preg_match('/OK/i', $data)) { + $status = "phpDynDNS: (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + } + + if($successful_update == true) { + /* Write WAN IP to cache file */ + $wan_ip = $this->_checkIP(); + conf_mount_rw(); + if ($this->_useIPv6 == false && $wan_ip > 0) { + $currentTime = time(); + notify_all_remote(sprintf(gettext("DynDNS updated IP Address on %s (%s) to %s"), convert_real_interface_to_friendly_descr($this->_if), $this->_if, $wan_ip)); + log_error("phpDynDNS: updating cache file {$this->_cacheFile}: {$wan_ip}"); + @file_put_contents($this->_cacheFile, "{$wan_ip}:{$currentTime}"); + } else + @unlink($this->_cacheFile); + if ($this->_useIPv6 == true && $wan_ip > 0) { + $currentTime = time(); + notify_all_remote(sprintf(gettext("DynDNS updated IPv6 Address on %s (%s) to %s"), convert_real_interface_to_friendly_descr($this->_if), $this->_if, $wan_ip)); + log_error("phpDynDNS: updating cache file {$this->_cacheFile_v6}: {$wan_ip}"); + @file_put_contents($this->_cacheFile_v6, "{$wan_ip}|{$currentTime}"); + } else + @unlink($this->_cacheFile_v6); + conf_mount_ro(); + } + $this->status = $status; + log_error($status); + } + + /* + * Private Function (added 12 July 05) [beta] + * Return Error, Set Last Error, and Die. + */ + function _error($errorNumber = '1') { + switch ($errorNumber) { + case 0: + break; + case 2: + $error = 'phpDynDNS: (ERROR!) No Dynamic DNS Service provider was selected.'; + break; + case 3: + $error = 'phpDynDNS: (ERROR!) No Username Provided.'; + break; + case 4: + $error = 'phpDynDNS: (ERROR!) No Password Provided.'; + break; + case 5: + $error = 'phpDynDNS: (ERROR!) No Hostname Provided.'; + break; + case 6: + $error = 'phpDynDNS: (ERROR!) The Dynamic DNS Service provided is not yet supported.'; + break; + case 7: + $error = 'phpDynDNS: (ERROR!) No Update URL Provided.'; + break; + case 8: + $status = "Route 53: (Error) Invalid ZoneID"; + break; + case 9: + $status = "Route 53: (Error) Invalid TTL"; + break; + case 10: + $error = "phpDynDNS ({$this->_dnsHost}): No change in my IP address and/or " . $this->_dnsMaxCacheAgeDays . " days has not passed. Not updating dynamic DNS entry."; + break; + default: + $error = "phpDynDNS: (ERROR!) Unknown Response."; + /* FIXME: $data isn't in scope here */ + /* $this->_debug($data); */ + break; + } + $this->lastError = $error; + log_error($error); + } + + /* + * Private Function (added 12 July 05) [beta] + * - Detect whether or not IP needs to be updated. + * | Written Specifically for pfSense (https://www.pfsense.org) may + * | work with other systems. pfSense base is FreeBSD. + */ + function _detectChange() { + global $debug; + + if ($debug) + log_error("DynDns ({$this->_dnsHost}): _detectChange() starting."); + + $currentTime = time(); + + $wan_ip = $this->_checkIP(); + if ($wan_ip == 0) { + log_error("DynDns ({$this->_dnsHost}): Current WAN IP could not be determined, skipping update process."); + return false; + } + $log_error = "DynDns ({$this->_dnsHost}): Current WAN IP: {$wan_ip} "; + + if ($this->_useIPv6 == true) { + if (file_exists($this->_cacheFile_v6)) { + $contents = file_get_contents($this->_cacheFile_v6); + list($cacheIP,$cacheTime) = explode('|', $contents); + $this->_debug($cacheIP.'/'.$cacheTime); + $initial = false; + $log_error .= "Cached IPv6: {$cacheIP} "; + } else { + conf_mount_rw(); + $cacheIP = '::'; + @file_put_contents($this->_cacheFile, "::|{$currentTime}"); + conf_mount_ro(); + $cacheTime = $currentTime; + $initial = true; + $log_error .= "No Cached IPv6 found."; + } + } else { + if (file_exists($this->_cacheFile)) { + $contents = file_get_contents($this->_cacheFile); + list($cacheIP,$cacheTime) = explode(':', $contents); + $this->_debug($cacheIP.'/'.$cacheTime); + $initial = false; + $log_error .= "Cached IP: {$cacheIP} "; + } else { + conf_mount_rw(); + $cacheIP = '0.0.0.0'; + @file_put_contents($this->_cacheFile, "0.0.0.0:{$currentTime}"); + conf_mount_ro(); + $cacheTime = $currentTime; + $initial = true; + $log_error .= "No Cached IP found."; + } + } + if ($this->_dnsVerboseLog) + log_error($log_error); + + // Convert seconds = days * hr/day * min/hr * sec/min + $maxCacheAgeSecs = $this->_dnsMaxCacheAgeDays * 24 * 60 * 60; + + $needs_updating = FALSE; + /* lets determine if the item needs updating */ + if ($cacheIP != $wan_ip) { + $needs_updating = true; + $update_reason = "DynDns: cacheIP != wan_ip. Updating. "; + $update_reason .= "Cached IP: {$cacheIP} WAN IP: {$wan_ip} "; + } + if (($currentTime - $cacheTime) > $maxCacheAgeSecs) { + $needs_updating = true; + $this->_forceUpdateNeeded = true; + $update_reason = "DynDns: More than " . $this->_dnsMaxCacheAgeDays . " days. Updating. "; + $update_reason .= "{$currentTime} - {$cacheTime} > {$maxCacheAgeSecs} "; + } + if ($initial == true) { + $needs_updating = true; + $update_reason .= "Initial update. "; + } + + /* finally if we need updating then store the + * new cache value and return true + */ + if ($needs_updating == true) { + if ($this->_dnsVerboseLog) + log_error("DynDns ({$this->_dnsHost}): {$update_reason}"); + return true; + } + + return false; + } + + /* + * Private Function (added 16 July 05) [beta] + * - Writes debug information to a file. + * - This function is only called when a unknown response + * - status is returned from a DynDNS service provider. + */ + function _debug($data) { + global $g; + + if (!$g['debug']) + return; + $string = date('m-d-y h:i:s').' - ('.$this->_debugID.') - ['.$this->_dnsService.'] - '.$data."\n"; + conf_mount_rw(); + $file = fopen($this->_debugFile, 'a'); + fwrite($file, $string); + fclose($file); + conf_mount_ro(); + } + function _checkIP() { + global $debug; + + if ($debug) + log_error("DynDns ({$this->_dnsHost}): _checkIP() starting."); + + if ($this->_useIPv6 == true) { + $ip_address = find_interface_ipv6($this->_if); + if (!is_ipaddrv6($ip_address)) + return 0; + } else { + $ip_address = find_interface_ip($this->_if); + if (!is_ipaddr($ip_address)) + return 0; + } + if ($this->_useIPv6 == false && is_private_ip($ip_address)) { + $hosttocheck = "checkip.dyndns.org"; + $try = 0; + while ($try < 3) { + $checkip = gethostbyname($hosttocheck); + if (is_ipaddr($checkip)) + break; + $try++; + } + if ($try >= 3) { + log_error("Dyndns debug information ({$this->_dnsHost}): Could not resolve {$hosttocheck} to ip using interface ip {$ip_address}."); + return 0; + } + $ip_ch = curl_init("http://{$checkip}"); + curl_setopt($ip_ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ip_ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ip_ch, CURLOPT_INTERFACE, $ip_address); + curl_setopt($ip_ch, CURLOPT_CONNECTTIMEOUT, '30'); + curl_setopt($ip_ch, CURLOPT_TIMEOUT, 120); + if ($this->_useIPv6 == false) { + curl_setopt($ip_ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + } + $ip_result_page = curl_exec($ip_ch); + curl_close($ip_ch); + $ip_result_decoded = urldecode($ip_result_page); + preg_match('/Current IP Address: (.*)<\/body>/', $ip_result_decoded, $matches); + $ip_address = trim($matches[1]); + if (is_ipaddr($ip_address)) { + if ($this->_dnsVerboseLog) + log_error("DynDns ({$this->_dnsHost}): {$ip_address} extracted from {$hosttocheck}"); + } else { + log_error("DynDns ({$this->_dnsHost}): IP address could not be extracted from {$hosttocheck}"); + return 0; + } + } else { + if ($this->_dnsVerboseLog) + log_error("DynDns ({$this->_dnsHost}): {$ip_address} extracted from local system."); + } + $this->_dnsIP = $ip_address; + + return $ip_address; + } + + } + +?> diff --git a/etc/inc/easyrule.inc b/etc/inc/easyrule.inc new file mode 100644 index 000000000..669684479 --- /dev/null +++ b/etc/inc/easyrule.inc @@ -0,0 +1,377 @@ + $ifd) { + if (strtolower($int) == strtolower($ifd)) + return $if; + } + + if (substr($int, 0, 4) == "ovpn") + return "openvpn"; + + return false; +} + +function easyrule_block_rule_exists($int = 'wan', $ipproto = "inet") { + global $blockaliasname, $config; + /* No rules, we we know it doesn't exist */ + if (!is_array($config['filter']['rule'])) { + return false; + } + + /* Search through the rules for one referencing our alias */ + foreach ($config['filter']['rule'] as $rule) { + if (!is_array($rule) || !is_array($rule['source'])) + continue; + $checkproto = isset($rule['ipprotocol']) ? $rule['ipprotocol'] : "inet"; + if ($rule['source']['address'] == $blockaliasname . strtoupper($int) && ($rule['interface'] == $int) && ($checkproto == $ipproto)) + return true; + } + return false; +} + +function easyrule_block_rule_create($int = 'wan', $ipproto = "inet") { + global $blockaliasname, $config; + /* If the alias doesn't exist, exit. + * Can't create an empty alias, and we don't know a host */ + if (easyrule_block_alias_getid($int) === false) + return false; + + /* If the rule already exists, no need to do it again */ + if (easyrule_block_rule_exists($int, $ipproto)) + return true; + + /* No rules, start a new array */ + if (!is_array($config['filter']['rule'])) { + $config['filter']['rule'] = array(); + } + + filter_rules_sort(); + $a_filter = &$config['filter']['rule']; + + /* Make up a new rule */ + $filterent = array(); + $filterent['type'] = 'block'; + $filterent['interface'] = $int; + $filterent['ipprotocol'] = $ipproto; + $filterent['source']['address'] = $blockaliasname . strtoupper($int); + $filterent['destination']['any'] = ''; + $filterent['descr'] = gettext("Easy Rule: Blocked from Firewall Log View"); + $filterent['created'] = make_config_revision_entry(null, gettext("Easy Rule")); + + array_splice($a_filter, 0, 0, array($filterent)); + + return true; +} + +function easyrule_block_alias_getid($int = 'wan') { + global $blockaliasname, $config; + if (!is_array($config['aliases'])) + return false; + + /* Hunt down an alias with the name we want, return its id */ + foreach ($config['aliases']['alias'] as $aliasid => $alias) + if ($alias['name'] == $blockaliasname . strtoupper($int)) + return $aliasid; + + return false; +} + +function easyrule_block_alias_add($host, $int = 'wan') { + global $blockaliasname, $config; + /* If the host isn't a valid IP address, bail */ + $host = trim($host, "[]"); + if (!is_ipaddr($host) && !is_subnet($host)) + return false; + + /* If there are no aliases, start an array */ + if (!is_array($config['aliases']['alias'])) + $config['aliases']['alias'] = array(); + + $a_aliases = &$config['aliases']['alias']; + + /* Try to get the ID if the alias already exists */ + $id = easyrule_block_alias_getid($int); + if ($id === false) + unset($id); + + $alias = array(); + + if (is_subnet($host)) { + list($host, $mask) = explode("/", $host); + } elseif (is_specialnet($host)) { + $mask = 0; + } elseif (is_ipaddrv6($host)) { + $mask = 128; + } else { + $mask = 32; + } + + if (isset($id) && $a_aliases[$id]) { + /* Make sure this IP isn't already in the list. */ + if (in_array($host.'/'.$mask, explode(" ", $a_aliases[$id]['address']))) + return true; + /* Since the alias already exists, just add to it. */ + $alias['name'] = $a_aliases[$id]['name']; + $alias['type'] = $a_aliases[$id]['type']; + $alias['descr'] = $a_aliases[$id]['descr']; + + $alias['address'] = $a_aliases[$id]['address'] . ' ' . $host . '/' . $mask; + $alias['detail'] = $a_aliases[$id]['detail'] . gettext('Entry added') . ' ' . date('r') . '||'; + } else { + /* Create a new alias with all the proper information */ + $alias['name'] = $blockaliasname . strtoupper($int); + $alias['type'] = 'network'; + $alias['descr'] = gettext("Hosts blocked from Firewall Log view"); + + $alias['address'] = $host . '/' . $mask; + $alias['detail'] = gettext('Entry added') . ' ' . date('r') . '||'; + } + + /* Replace the old alias if needed, otherwise tack it on the end */ + if (isset($id) && $a_aliases[$id]) + $a_aliases[$id] = $alias; + else + $a_aliases[] = $alias; + + // Sort list + $a_aliases = msort($a_aliases, "name"); + + return true; +} + +function easyrule_block_host_add($host, $int = 'wan', $ipproto = "inet") { + global $retval; + /* Bail if the supplied host is not a valid IP address */ + $host = trim($host, "[]"); + if (!is_ipaddr($host) && !is_subnet($host)) + return false; + + /* Flag whether or not we need to reload the filter */ + $dirty = false; + + /* Attempt to add this host to the alias */ + if (easyrule_block_alias_add($host, $int)) { + $dirty = true; + } else { + /* Couldn't add the alias, or adding the host failed. */ + return false; + } + + /* Attempt to add the firewall rule if it doesn't exist. + * Failing to add the rule isn't necessarily an error, it may + * have been modified by the user in some way. Adding to the + * Alias is what's important. + */ + if (!easyrule_block_rule_exists($int, $ipproto)) { + if (easyrule_block_rule_create($int, $ipproto)) { + $dirty = true; + } else { + return false; + } + } + + /* If needed, write the config and reload the filter */ + if ($dirty) { + write_config(); + $retval = filter_configure(); + if (!empty($_SERVER['DOCUMENT_ROOT'])) { + header("Location: firewall_aliases.php"); + exit; + } else { + return true; + } + } else { + return false; + } +} + +function easyrule_pass_rule_add($int, $proto, $srchost, $dsthost, $dstport, $ipproto) { + global $config; + + /* No rules, start a new array */ + if (!is_array($config['filter']['rule'])) { + $config['filter']['rule'] = array(); + } + + filter_rules_sort(); + $a_filter = &$config['filter']['rule']; + + /* Make up a new rule */ + $filterent = array(); + $filterent['type'] = 'pass'; + $filterent['interface'] = $int; + $filterent['ipprotocol'] = $ipproto; + $filterent['descr'] = gettext("Easy Rule: Passed from Firewall Log View"); + + if ($proto != "any") + $filterent['protocol'] = $proto; + else + unset($filterent['protocol']); + + /* Default to only allow echo requests, since that's what most people want and + * it should be a safe choice. */ + if ($proto == "icmp") + $filterent['icmptype'] = 'echoreq'; + + if ((strtolower($proto) == "icmp6") || (strtolower($proto) == "icmpv6")) + $filterent['protocol'] = "icmp"; + + if (is_subnet($srchost)) { + list($srchost, $srcmask) = explode("/", $srchost); + } elseif (is_specialnet($srchost)) { + $srcmask = 0; + } elseif (is_ipaddrv6($srchost)) { + $srcmask = 128; + } else { + $srcmask = 32; + } + + if (is_subnet($dsthost)) { + list($dsthost, $dstmask) = explode("/", $dsthost); + } elseif (is_specialnet($dsthost)) { + $dstmask = 0; + } elseif (is_ipaddrv6($dsthost)) { + $dstmask = 128; + } else { + $dstmask = 32; + } + + pconfig_to_address($filterent['source'], $srchost, $srcmask); + pconfig_to_address($filterent['destination'], $dsthost, $dstmask, '', $dstport, $dstport); + + $filterent['created'] = make_config_revision_entry(null, gettext("Easy Rule")); + $a_filter[] = $filterent; + + write_config($filterent['descr']); + $retval = filter_configure(); + if (!empty($_SERVER['DOCUMENT_ROOT'])) { + header("Location: firewall_rules.php?if={$int}"); + exit; + } else { + return true; + } +} + +function easyrule_parse_block($int, $src, $ipproto = "inet") { + if (!empty($src) && !empty($int)) { + $src = trim($src, "[]"); + if (!is_ipaddr($src) && !is_subnet($src)) { + return gettext("Tried to block invalid IP:") . ' ' . htmlspecialchars($src); + } + $int = easyrule_find_rule_interface($int); + if ($int === false) { + return gettext("Invalid interface for block rule:") . ' ' . htmlspecialchars($int); + } + if (easyrule_block_host_add($src, $int, $ipproto)) { + return gettext("Host added successfully"); + } else { + return gettext("Failed to create block rule, alias, or add host."); + } + } else { + return gettext("Tried to block but had no host IP or interface"); + } + return gettext("Unknown block error."); +} +function easyrule_parse_pass($int, $proto, $src, $dst, $dstport = 0, $ipproto = "inet") { + /* Check for valid int, srchost, dsthost, dstport, and proto */ + global $protocols_with_ports; + $src = trim($src, "[]"); + $dst = trim($dst, "[]"); + + if (!empty($int) && !empty($proto) && !empty($src) && !empty($dst)) { + $int = easyrule_find_rule_interface($int); + if ($int === false) { + return gettext("Invalid interface for pass rule:") . ' ' . htmlspecialchars($int); + } + if (getprotobyname($proto) == -1) { + return gettext("Invalid protocol for pass rule:") . ' ' . htmlspecialchars($proto); + } + if (!is_ipaddr($src) && !is_subnet($src) && !is_ipaddroralias($src) && !is_specialnet($src)) { + return gettext("Tried to pass invalid source IP:") . ' ' . htmlspecialchars($src); + } + if (!is_ipaddr($dst) && !is_subnet($dst) && !is_ipaddroralias($dst) && !is_specialnet($dst)) { + return gettext("Tried to pass invalid destination IP:") . ' ' . htmlspecialchars($dst); + } + if (in_array($proto, $protocols_with_ports)) { + if (empty($dstport)) { + return gettext("Missing destination port:") . ' ' . htmlspecialchars($dstport); + } + if (!is_port($dstport) && ($dstport != "any")) { + return gettext("Tried to pass invalid destination port:") . ' ' . htmlspecialchars($dstport); + } + } else { + $dstport = 0; + } + /* Should have valid input... */ + if (easyrule_pass_rule_add($int, $proto, $src, $dst, $dstport, $ipproto)) { + return gettext("Successfully added pass rule!"); + } else { + return gettext("Failed to add pass rule."); + } + } else { + return gettext("Missing parameters for pass rule."); + } + return gettext("Unknown pass error."); +} + +?> diff --git a/etc/inc/filter.inc b/etc/inc/filter.inc new file mode 100644 index 000000000..c7f9693a1 --- /dev/null +++ b/etc/inc/filter.inc @@ -0,0 +1,3748 @@ +. + 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. + + pfSense_BUILDER_BINARIES: /sbin/kldload /usr/sbin/tcpdump /sbin/pfctl /bin/rm + pfSense_BUILDER_BINARIES: /usr/sbin/inetd + pfSense_MODULE: filter +*/ + +/* DISABLE_PHP_LINT_CHECKING */ + +/* holds the items that will be executed *AFTER* the filter is fully loaded */ +$after_filter_configure_run = array(); + +/* For installing cron job of schedules */ +$time_based_rules = false; + +/* Used to hold the interface list that will be used on ruleset creation. */ +$FilterIflist = array(); + +/* Create a global array to avoid errors on rulesets. */ +$GatewaysList = array(); + +/* Used for the hostname dns resolver */ +$filterdns = array(); + +/* Used for aliases and interface macros */ +$aliases = ""; + +global $tracker; +$tracker = 1000000000; + +function filter_rule_tracker($tracker) { + global $tracker; + + return (++$tracker); + +} + +function fix_rule_label($descr) { + $descr = str_replace('"', '', $descr); + if (strlen($descr) > 63) + return substr($descr, 0, 60) . "..."; + else + return $descr; +} + +function is_bogonsv6_used() { + global $config, $g; + # Only use bogonsv6 table if IPv6 Allow is on, and at least 1 enabled interface also has "blockbogons" enabled. + $usebogonsv6 = false; + if (isset($config['system']['ipv6allow'])) { + foreach ($config['interfaces'] as $ifacedata) { + if(isset($ifacedata['enable']) && isset($ifacedata['blockbogons'])) { + $usebogonsv6 = true; + break; + } + } + } + return $usebogonsv6; +} + +function flowtable_configure() { + global $config, $g; + + if (empty($config['system']['flowtable'])) { + set_single_sysctl("net.inet.flowtable.enable", "0"); + return; + } + + // Figure out how many flows we should reserve + // sized 2x larger than the number of unique connection destinations. + if($config['system']['maximumstates'] <> "" && is_numeric($config['system']['maximumstates'])) + $maxstates = $config['system']['maximumstates']; + else + $maxstates = 150000; + // nmbflows cpu count * ($maxstates * 2) + $cpus = get_single_sysctl('kern.smp.cpus'); + $nmbflows = ($cpus*($maxstates*2)); + // Flowtable currently only works on 8.0 + if(get_freebsd_version() == "8") { + set_sysctl(array( + "net.inet.flowtable.nmbflows" => $nmbflows, + "net.inet.ip.output_flowtable_size" => $maxstates, + "net.inet.flowtable.enable" => "1") + ); + } +} + +function filter_pflog_start($kill_first = false) { + global $config, $g; + if ($g['platform'] == 'jail') + return; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_pflog_start() being called $mt\n"; + } + if (!file_exists("{$g['varrun_path']}/filterlog.pid") || + !isvalidpid("{$g['varrun_path']}/filterlog.pid")) + mwexec("/usr/local/sbin/filterlog -i pflog0 -p {$g['varrun_path']}/filterlog.pid"); +} + +/* reload filter async */ +function filter_configure() { + global $g; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_configure() being called $mt\n"; + } + + /* + * NOTE: Check here for bootup status since this should not be triggered during bootup. + * The reason is that rc.bootup calls filter_configure_sync directly which does this too. + */ + if (!$g['booting']) + send_event("filter reload"); +} + +function filter_delete_states_for_down_gateways() { + global $config, $GatewaysList; + + if (isset($config['system']['kill_states'])) + return; + + $any_gateway_down = false; + $a_gateways = return_gateways_status(); + if (is_array($GatewaysList)) { + foreach ($GatewaysList as $gwname => $gateway) { + if (empty($gateway['monitor'])) + continue; + if (!is_ipaddr($gateway['monitor'])) + continue; + if (strstr($gateway['monitor'], "127.0.0.")) + continue; + if (empty($a_gateways[$gateway['monitor']])) + continue; + $gwstatus =& $a_gateways[$gateway['monitor']]; + if (strstr($gwstatus['status'], "down")) { + $any_gateway_down = true; + break; + } + } + } + if ($any_gateway_down == true) + mwexec("/sbin/pfctl -Fs"); +} + +/* reload filter sync */ +function filter_configure_sync($delete_states_if_needed = true) { + global $config, $g, $after_filter_configure_run, $FilterIflist; + global $time_based_rules, $filterdns, $aliases, $dummynet_name_list; + + /* Use filter lock to not allow concurrent filter reloads during this run. */ + $filterlck = lock('filter', LOCK_EX); + + + filter_pflog_start(); + update_filter_reload_status(gettext("Initializing")); + + /* invalidate interface cache */ + get_interface_arr(true); + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_configure_sync() being called $mt\n"; + } + /* Get interface list to work with. */ + filter_generate_optcfg_array(); + if($g['booting'] == true) + echo gettext("Configuring firewall"); + + /* generate aliases */ + if($g['booting'] == true) + echo "."; + update_filter_reload_status(gettext("Creating aliases")); + $aliases = filter_generate_aliases(); + $gateways = filter_generate_gateways(); + if($g['booting'] == true) + echo "."; + update_filter_reload_status(gettext("Generating Limiter rules")); + $dummynet_rules = filter_generate_dummynet_rules(); + $dummynet_name_list = get_unique_dnqueue_list(); + update_filter_reload_status(gettext("Generating NAT rules")); + /* generate nat rules */ + $natrules = filter_nat_rules_generate(); + if($g['booting'] == true) + echo "."; + update_filter_reload_status(gettext("Generating filter rules")); + /* generate pfctl rules */ + $pfrules = filter_rules_generate(); + /* generate altq, limiter */ + if($g['booting'] == true) + echo "."; + update_filter_reload_status(gettext("Generating ALTQ queues")); + $altq_queues = filter_generate_altq_queues(); + update_filter_reload_status(gettext("Generating Layer7 rules")); + generate_layer7_files(); + if($g['booting'] == true) + echo "."; + update_filter_reload_status(gettext("Loading filter rules")); + /* enable pf if we need to, otherwise disable */ + if(!isset ($config['system']['disablefilter'])) { + mwexec("/sbin/pfctl -e", true); + } else { + mwexec("/sbin/pfctl -d", true); + unlink_if_exists("{$g['tmp_path']}/filter_loading"); + update_filter_reload_status(gettext("Filter is disabled. Not loading rules.")); + if($g['booting'] == true) + echo gettext("done.") . "\n"; + unlock($filterlck); + return; + } + + $limitrules = ""; + /* User defined maximum table entries in Advanced menu. */ + if ($config['system']['maximumtableentries'] <> "" && is_numeric($config['system']['maximumtableentries'])) + $limitrules .= "set limit table-entries {$config['system']['maximumtableentries']}\n"; + + if ($config['system']['optimization'] <> "") { + $limitrules .= "set optimization {$config['system']['optimization']}\n"; + if($config['system']['optimization'] == "conservative") { + $limitrules .= "set timeout { udp.first 300, udp.single 150, udp.multiple 900 }\n"; + } + } else + $limitrules .= "set optimization normal\n"; + + if (!empty($config['system']['adaptivestart']) && !empty($config['system']['adaptiveend'])) + $limitrules .= "set timeout { adaptive.start {$config['system']['adaptivestart']}, adaptive.end {$config['system']['adaptiveend']} }\n"; + else + $limitrules .= "set timeout { adaptive.start 0, adaptive.end 0 }\n"; + + if ($config['system']['maximumstates'] <> "" && is_numeric($config['system']['maximumstates'])) { + /* User defined maximum states in Advanced menu. */ + $limitrules .= "set limit states {$config['system']['maximumstates']}\n"; + $limitrules .= "set limit src-nodes {$config['system']['maximumstates']}\n"; + } else { + $max_states = pfsense_default_state_size(); + $limitrules .= "set limit states {$max_states}\n"; + $limitrules .= "set limit src-nodes {$max_states}\n"; + } + + if (isset($config['system']['lb_use_sticky']) && is_numeric($config['system']['srctrack']) && ($config['system']['srctrack'] > 0)) + $limitrules .= "set timeout src.track {$config['system']['srctrack']}\n"; + + // Configure flowtable support if enabled. + flowtable_configure(); + + $rules = ""; + $rules = "{$limitrules}\n"; + $rules .= "{$aliases} \n"; + $rules .= "{$gateways} \n"; + update_filter_reload_status(gettext("Setting up logging information")); + $rules .= filter_setup_logging_interfaces(); + $rules .= "\n"; + $rules .= "set skip on pfsync0\n"; + $rules .= "\n"; + update_filter_reload_status(gettext("Setting up SCRUB information")); + $rules .= filter_generate_scrubing(); + $rules .= "\n"; + $rules .= "{$altq_queues}\n"; + $rules .= "{$natrules}\n"; + $rules .= "{$pfrules}\n"; + $rules .= discover_pkg_rules("filter"); + + unset($aliases, $gateways, $altq_queues, $natrules, $pfrules); + + // Copy rules.debug to rules.debug.old + if(file_exists("{$g['tmp_path']}/rules.debug")) + @copy("{$g['tmp_path']}/rules.debug", "{$g['tmp_path']}/rules.debug.old"); + + if (!@file_put_contents("{$g['tmp_path']}/rules.debug", $rules, LOCK_EX)) { + log_error("WARNING: Could not write new rules!"); + unlock($filterlck); + return; + } + + @file_put_contents("{$g['tmp_path']}/rules.limits", $limitrules); + mwexec("/sbin/pfctl -Of {$g['tmp_path']}/rules.limits"); + unset($rules, $limitrules); + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "pfctl being called at $mt\n"; + } + unset($rules_loading, $rules_error); + $_grbg = exec("/sbin/pfctl -o basic -f {$g['tmp_path']}/rules.debug 2>&1", $rules_error, $rules_loading); + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "pfctl done at $mt\n"; + } + /* + * check for a error while loading the rules file. if an error has occurred + * then output the contents of the error to the caller + */ + if($rules_loading <> 0) { + $saved_line_error = $rules_error[0]; + $line_error = explode(":", $rules_error[0]); + $line_number = $line_error[1]; + $line_split = file("{$g['tmp_path']}/rules.debug"); + if(is_array($line_split)) + $line_error = sprintf(gettext('The line in question reads [%1$d]: %2$s'), $line_number, $line_split[$line_number-1]); + unset($line_split); + + /* Brutal ugly hack but required -- PF is stuck, unwedge */ + if (strstr("$rules_error[0]", "busy")) { + exec("/sbin/pfctl -d; /sbin/pfctl -e; /sbin/pfctl -f {$g['tmp_path']}/rules.debug"); + $error_msg = gettext("PF was wedged/busy and has been reset."); + file_notice("pf_busy", $error_msg, "pf_busy", ""); + } else { + $_grbg = exec("/sbin/pfctl -o basic -f {$g['tmp_path']}/rules.debug.old 2>&1"); + } + unset($rules_loading, $rules_error); + + if ($line_error and $line_number) { + file_notice("filter_load", sprintf(gettext('There were error(s) loading the rules: %1$s - %2$s'), $saved_line_error, $line_error), "Filter Reload", ""); + update_filter_reload_status(sprintf(gettext('There were error(s) loading the rules: %1$s - %2$s'), $saved_line_error, $line_error)); + unlock($filterlck); + return; + } + } + + # If we are not using bogonsv6 then we can remove any bogonsv6 table from the running pf (if the table is not there, the kill is still fine). + if (!is_bogonsv6_used()) + $_grbg = exec("/sbin/pfctl -t bogonsv6 -T kill 2>/dev/null"); + + update_filter_reload_status(gettext("Starting up layer7 daemon")); + layer7_start_l7daemon(); + + if(!empty($filterdns)) { + @file_put_contents("{$g['varetc_path']}/filterdns.conf", implode("", $filterdns)); + unset($filterdns); + if (isvalidpid("{$g['varrun_path']}/filterdns.pid")) + sigkillbypid("{$g['varrun_path']}/filterdns.pid", "HUP"); + else { + /* + * FilterDNS has three debugging levels. The default choosen is 1. + * Availabe are level 2 and greater then 2. + */ + if (isset($config['system']['aliasesresolveinterval']) && is_numeric($config['system']['aliasesresolveinterval'])) + $resolve_interval = $config['system']['aliasesresolveinterval']; + else + $resolve_interval = 300; + mwexec("/usr/local/sbin/filterdns -p {$g['varrun_path']}/filterdns.pid -i {$resolve_interval} -c {$g['varetc_path']}/filterdns.conf -d 1"); + } + } else { + killbypid("{$g['varrun_path']}/filterdns.pid"); + @unlink("{$g['varrun_path']}/filterdns.pid"); + } + + /* run items scheduled for after filter configure run */ + $fda = fopen("{$g['tmp_path']}/commands.txt", "w"); + if($fda) { + if($after_filter_configure_run) { + foreach($after_filter_configure_run as $afcr) + fwrite($fda, $afcr . "\n"); + unset($after_filter_configure_run); + } + + /* + * we need a way to let a user run a shell cmd after each + * filter_configure() call. run this xml command after + * each change. + */ + if($config['system']['afterfilterchangeshellcmd'] <> "") + fwrite($fda, $config['system']['afterfilterchangeshellcmd'] . "\n"); + + fclose($fda); + } + + if(file_exists("{$g['tmp_path']}/commands.txt")) { + mwexec("sh {$g['tmp_path']}/commands.txt &"); + unlink("{$g['tmp_path']}/commands.txt"); + } + + /* if time based rules are enabled then swap in the set */ + if($time_based_rules == true) + filter_tdr_install_cron(true); + else + filter_tdr_install_cron(false); + + if($g['booting'] == true) + echo "."; + + if($delete_states_if_needed) { + update_filter_reload_status(gettext("Processing down interface states")); + filter_delete_states_for_down_gateways(); + } + + update_filter_reload_status(gettext("Running plugins")); + + if(is_dir("/usr/local/pkg/pf/")) { + /* process packager manager custom rules */ + update_filter_reload_status(gettext("Running plugins (pf)")); + run_plugins("/usr/local/pkg/pf/"); + update_filter_reload_status(gettext("Plugins completed.")); + } + + update_filter_reload_status(gettext("Done")); + if($g['booting'] == true) + echo gettext("done.") . "\n"; + + unlock($filterlck); + return 0; +} + +function filter_generate_scrubing() { + global $config, $FilterIflist; + $scrubrules = ""; + + if (isset($config['system']['maxmss_enable'])) { + $maxmss = 1400; + if (!empty($config['system']['maxmss'])) + $maxmss = $config['system']['maxmss']; + + $scrubrules .= "scrub from any to max-mss {$maxmss}\n"; + } + /* disable scrub option */ + foreach ($FilterIflist as $scrubif => $scrubcfg) { + if(isset($scrubcfg['virtual']) || empty($scrubcfg['descr'])) + continue; + /* set up MSS clamping */ + if($scrubcfg['mss'] <> "" && is_numeric($scrubcfg['mss']) && $scrubcfg['if'] != "pppoe" && $scrubcfg['if'] != "pptp" && + $scrubif['if'] != "l2tp") + $mssclamp = "max-mss " . (intval($scrubcfg['mss'] - 40)); + else + $mssclamp = ""; + /* configure no-df for linux nfs and others */ + if($config['system']['scrubnodf']) + $scrubnodf = "no-df"; + else + $scrubnodf = ""; + if($config['system']['scrubrnid']) + $scrubrnid = "random-id"; + else + $scrubrnid = ""; + if(!isset($config['system']['disablescrub'])) + $scrubrules .= "scrub on \${$scrubcfg['descr']} all {$scrubnodf} {$scrubrnid} {$mssclamp} fragment reassemble\n"; // reassemble all directions + else if(!empty($mssclamp)) + $scrubrules .= "scrub on \${$scrubcfg['descr']} {$mssclamp}\n"; + } + return $scrubrules; +} + +function filter_generate_nested_alias($name, $alias, &$aliasnesting, &$aliasaddrnesting) { + global $aliastable, $filterdns; + + $addresses = explode(" ", $alias); + $finallist = ""; + $builtlist = ""; + $urltable_nesting = ""; + $aliasnesting[$name] = $name; + foreach ($addresses as $address) { + if (empty($address)) + continue; + $linelength = strlen($builtlist); + $tmpline = ""; + if(is_alias($address)) { + if (alias_get_type($address) == 'urltable') { + // Feature#1603. For this type of alias we do not need to recursively call filter_generate_nested_alias. Just load IPs from the file. + $urltable_netsting = alias_expand_urltable($address); + if (!empty($urltable_nesting)) { + $urlfile_as_arr = file($urltable_nesting); + foreach($urlfile_as_arr as $line) { + $address= rtrim($line); + if ((strlen($tmpline) + $linelength) > 4036) { + $finallist .= "{$tmpline} \\\n"; + $tmpline = ""; + } + $tmpline .= " {$address}"; + } + } + } + /* We already expanded this alias so there is no neccessity to do it again. */ + else if(!isset($aliasnesting[$address])) + $tmpline = filter_generate_nested_alias($name, $aliastable[$address], $aliasnesting, $aliasaddrnesting); + } else if(!isset($aliasaddrnesting[$address])) { + if (!is_ipaddr($address) && !is_subnet($address) && !is_port($address) && !is_portrange($address) && is_hostname($address)) { + if (!isset($filterdns["{$address}{$name}"])) + $filterdns["{$address}{$name}"] = "pf {$address} {$name}\n"; + continue; + } + $aliasaddrnesting[$address] = $address; + $tmpline = " {$address}"; + } + if ((strlen($tmpline)+ $linelength) > 4036) { + $finallist .= "{$builtlist} \\\n"; + $builtlist = ""; + } + if (!empty($tmpline)) + $builtlist .= " {$tmpline}"; + } + $finallist .= $builtlist; + return $finallist; +} + +function filter_expand_alias($alias_name) +{ + global $config; + + if(isset($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $aliased) { + if($aliased['name'] == $alias_name) { + $aliasnesting = array(); + $aliasaddrnesting = array(); + return filter_generate_nested_alias($aliased['name'], $aliased['address'], $aliasnesting, $aliasaddrnesting); + } + } + } +} + +function filter_expand_alias_array($alias_name) { + $expansion = filter_expand_alias($alias_name); + return explode(" ", preg_replace('/\s+/', ' ', trim($expansion))); +} + +function filter_generate_aliases() { + global $config, $FilterIflist, $after_filter_configure_run; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_generate_aliases() being called $mt\n"; + } + + $alias = "#System aliases\n "; + $aliases = "loopback = \"{ lo0 }\"\n"; + + foreach ($FilterIflist as $if => $ifcfg) { + if (is_array($ifcfg[0])) { + if ($ifcfg[0]['if'] == 'pppoe') { + $aliases .= "{$ifcfg[0]['descr']} = \"{ {$ifcfg[0]['if']}"; + $aliases .= " }\"\n"; + } + } elseif (!empty($ifcfg['descr']) && !empty($ifcfg['if'])) { + if ($ifcfg['type6'] == '6rd') + $aliases .= "{$ifcfg['descr']} = \"{ {$ifcfg['if']} {$if}_stf"; + else if ($ifcfg['type6'] == '6to4') + $aliases .= "{$ifcfg['descr']} = \"{ {$ifcfg['if']} {$if}_stf"; + else { + $aliases .= "{$ifcfg['descr']} = \"{ {$ifcfg['if']}"; + + if ($ifcfg['type'] == 'pptp') { + foreach (get_parent_interface($ifcfg['if']) as $parent_if) { + if ($parent_if != $ifcfg['if']) { + $aliases .= " {$parent_if}"; + } + } + } + } + $aliases .= " }\"\n"; + } + } + + $aliases .= "\n#SSH Lockout Table\n"; + $aliases .= "table persist\n"; + $aliases .= "table persist\n"; + + $aliases .= "#Snort tables\n"; + $aliases .= "table \n"; + $aliases .= "table \n"; + if (!file_exists("/etc/bogons")) + @file_put_contents("/etc/bogons", ""); + if (!file_exists("/etc/bogonsv6")) + @file_put_contents("/etc/bogonsv6", ""); + $aliases .= "table persist file \"/etc/bogons\"\n"; + if (is_bogonsv6_used()) + $aliases .= "table persist file \"/etc/bogonsv6\"\n"; + + $vpns_list = filter_get_vpns_list(); + if($vpns_list) + $aliases .= "table { $vpns_list }\n"; + + /* add a Negate_networks table */ + $aliases .= "table "; + if($vpns_list) + $aliases .= "{ $vpns_list }"; + $aliases .= "\n"; + + $aliases .= "\n# User Aliases \n"; + /* Setup pf groups */ + if(isset($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $aliased) { + $extralias = ""; + /* + * XXX: i am not sure what this does so i am commenting it out for now, because as it is + * its quite dangerous! + * $ip = find_interface_ip($aliased['address']); + * $extraalias = " " . link_ip_to_carp_interface($ip); + */ + $aliasnesting = array(); + $aliasaddrnesting = array(); + $addrlist = filter_generate_nested_alias($aliased['name'], $aliased['address'], $aliasnesting, $aliasaddrnesting); + switch ($aliased['type']) { + case "host": + case "network": + case "url": + $tableaddrs = "{$addrlist}{$extralias}"; + if(empty($tableaddrs)) { + $aliases .= "table <{$aliased['name']}> persist\n"; + if (empty($aliased['address'])) + $after_filter_configure_run[] = "/sbin/pfctl -T flush -t " . escapeshellarg($aliased['name']); + } else + $aliases .= "table <{$aliased['name']}> { {$addrlist}{$extralias} } \n"; + + $aliases .= "{$aliased['name']} = \"<{$aliased['name']}>\"\n"; + break; + case "openvpn": + $openvpncfg = array(); + if($config['openvpn']['user']) { + /* XXX: Check if we have a correct ip? */ + foreach ($config['openvpn']['user'] as $openvpn) + $openvpncfg[$openvpn['name']] = $openvpn['ip']; + } + $vpn_lines = explode("\n", $addrlist); + foreach ($vpn_lines as $vpn_line) { + $vpn_address_split = explode(" ", $vpn_line); + foreach($vpn_address_split as $vpnsplit) { + if(isset($openvpncfg[$vpnsplit])) { + $newaddress .= " "; + $newaddress .= $openvpn[$vpnsplit]; + break; + } + } + } + $aliases .= "table <{$aliased['name']}> { {$newaddress}{$extralias} } \n"; + $aliases .= "{$aliased['name']} = \"<{$aliased['name']}>\"\n"; + break; + case "urltable": + $urlfn = alias_expand_urltable($aliased['name']); + if ($urlfn) { + $aliases .= "table <{$aliased['name']}> persist file \"{$urlfn}\"\n"; + $aliases .= "{$aliased['name']} = \"<{$aliased['name']}>\"\n"; + } + break; + case "urltable_ports": + // TODO: Change it when pf supports tables with ports + $urlfn = alias_expand_urltable($aliased['name']); + if ($urlfn) + $aliases .= "{$aliased['name']} = \"{ " . preg_replace("/\n/", " ", file_get_contents($urlfn)) . " }\"\n"; + break; + case "port": + case "url_ports": + $aliases .= "{$aliased['name']} = \"{ {$addrlist} }\"\n"; + break; + default: + $aliases .= "{$aliased['name']} = \"{ {$aliased['address']}{$extralias} }\"\n"; + break; + } + } + } + $result = "{$alias} \n"; + $result .= "{$aliases}"; + + return $result; +} + +function filter_generate_gateways() { + global $config, $g, $GatewaysList; + + $rules = "# Gateways\n"; + + update_filter_reload_status(gettext("Creating gateway group item...")); + + /* Lookup Gateways to be used in filter rules once */ + $GatewaysList = return_gateways_array(); + $GatewayGroupsList = return_gateway_groups_array(); + + if (is_array($GatewaysList)) { + foreach ($GatewaysList as $gwname => $gateway) { + $int = $gateway['interface']; + $gwip = $gateway['gateway']; + $route = ""; + if (!is_ipaddr($gwip)) + $gwip = get_interface_gateway($gateway['friendlyiface']); + if (is_ipaddr($gwip) && !empty($int)) + $route = "route-to ( {$int} {$gwip} )"; + if (($route === "") && isset($config['system']['skip_rules_gw_down'])) + unset($GatewaysList[$gwname]); + else + $rules .= "GW{$gwname} = \" {$route} \"\n"; + } + } + + if (is_array($GatewayGroupsList)) { + foreach ($GatewayGroupsList as $gateway => $members) { + $route = ""; + /* hey, that's not a group member! */ + unset($members['ipprotocol']); + if (count($members) > 0) { + $foundlb = 0; + $routeto = ""; + foreach($members as $idx => $member) { + $int = $member['int']; + $gatewayip = $member['gwip']; + if (($int <> "") && is_ipaddr($gatewayip)) { + if ($g['debug']) + log_error(sprintf(gettext('Setting up route with %1$s on %2$s'), $gatewayip, $int)); + if ($member['weight'] > 1) { + $routeto .= str_repeat("( {$int} {$gatewayip} ) ", $member['weight']); + } else + $routeto .= "( {$int} {$gatewayip} ) "; + $foundlb++; + } else + log_error(sprintf(gettext("An error occurred while trying to find the interface got %s . The rule has not been added."), $gatewayip)); + } + $route = ""; + if ($foundlb > 0) { + $route = " route-to { {$routeto} } "; + if($foundlb > 1) { + $route .= " round-robin "; + if (isset($config['system']['lb_use_sticky'])) + $route .= " sticky-address "; + } + } + } + if (($route === "") && isset($config['system']['skip_rules_gw_down'])) + unset($GatewayGroupsList[$gateway]); + else + $rules .= "GW{$gateway} = \" {$route} \"\n"; + } + } + + /* Create a global array to avoid errors on rulesets. */ + $GatewaysList = $GatewaysList + $GatewayGroupsList; + + $rules .= "\n"; + + return $rules; +} + +/* returns space separated list of vpn subnets */ +function filter_get_vpns_list() { + global $config; + + $vpns = ""; + $vpns_arr = array(); + + /* ipsec */ + if (isset($config['ipsec']['enable'])) { + if (is_array($config['ipsec']['phase2'])) { + foreach ($config['ipsec']['phase2'] as $ph2ent) { + if ((!$ph2ent['mobile']) && ($ph2ent['mode'] != 'transport')) { + if (!function_exists('ipsec_idinfo_to_cidr')) + require_once("ipsec.inc"); + if (!is_array($ph2ent['remoteid'])) + continue; + $ph2ent['remoteid']['mode'] = $ph2ent['mode']; + $vpns_subnet = ipsec_idinfo_to_cidr($ph2ent['remoteid']); + if ($vpns_subnet == "0.0.0.0/0") + continue; + $vpns_arr[] = $vpns_subnet; + } + } + } + } + + /* openvpn */ + foreach (array('client', 'server') as $type) { + if(is_array($config['openvpn']["openvpn-$type"])) { + foreach ($config['openvpn']["openvpn-$type"] as $settings) { + if(is_array($settings)) { + if (!isset($settings['disable'])) { + $remote_networks = explode(',', $settings['remote_network']); + foreach ($remote_networks as $remote_network) { + if (is_subnet($remote_network) && ($remote_network <> "0.0.0.0/0")) + $vpns_arr[] = $remote_network; + } + if (is_subnet($settings['tunnel_network']) && $settings['tunnel_network'] <> "0.0.0.0/0") + $vpns_arr[] = $settings['tunnel_network']; + } + } + } + } + } + /* pppoe */ + if (is_array($config['pppoes']['pppoe'])) { + foreach($config['pppoes']['pppoe'] as $pppoe) { + if ($pppoe['mode'] == "server") { + if(is_ipaddr($pppoe['remoteip'])) { + $pppoesub = gen_subnet($pppoe['remoteip'], $pppoe['pppoe_subnet']); + if (is_subnet($pppoesub)) + $vpns_arr[] = $pppoesub; + } + } + } + } + + if (!empty($vpns_arr)) + $vpns = implode(" ", $vpns_arr); + + return $vpns; +} + +/* returns space separated list of directly connected networks + * optionally returns an array instead, including friendly interface and gateway (if applicable) + */ +function filter_get_direct_networks_list($returnsubnetsonly = true) { + global $config, $FilterIflist, $GatewaysList; + /* build list of directly connected interfaces and networks */ + $networks = ""; + $networks_arr = array(); + if(empty($FilterIflist)) { + filter_generate_optcfg_array(); + } + foreach ($FilterIflist as $ifent => $ifcfg) { + $subnet = "{$ifcfg['sa']}/{$ifcfg['sn']}"; + if(is_subnet($subnet)) { + if($returnsubnetsonly) { + $networks_arr[] = $subnet; + } else { + $networks_arr[] = array( + 'subnet' => $subnet, + 'if' => $ifent, + 'ip' => $ifcfg['ip']); + } + } + } + foreach(get_configured_ip_aliases_list(true) as $vip) { + $subnet = "{$vip['subnet']}/{$vip['subnet_bits']}"; + if(is_subnet($subnet) && !(is_subnetv4($subnet) && $vip['subnet_bits'] == 32) && !(is_subnetv6($subnet) && $vip['subnet_bits'] == 128)) { + if(is_subnetv4($subnet)) + $subnet = gen_subnet($vip['subnet'], $vip['subnet_bits']) . "/{$vip['subnet_bits']}"; + else if(is_subnetv6($subnet)) + $subnet = gen_subnetv6($vip['subnet'], $vip['subnet_bits']) . "/{$vip['subnet_bits']}"; + if($returnsubnetsonly) { + $networks_arr[] = $subnet; + } else { + $networks_arr[] = array( + 'subnet' => $subnet, + 'if' => $vip['interface'], + 'ip' => $vip['subnet']); + } + } + } + foreach(get_staticroutes() as $netent) { + if(is_subnet($netent['network'])) { + if($returnsubnetsonly) { + $networks_arr[] = $netent['network']; + } else if(isset($GatewaysList[$netent['gateway']])) { + $networks_arr[] = array( + 'subnet' => $netent['network'], + 'if' => $GatewaysList[$netent['gateway']]['friendlyiface'], + 'gateway' => $GatewaysList[$netent['gateway']]['gateway']); + } + } + } + if($returnsubnetsonly) { + if(!empty($networks_arr)) { + $networks = implode(" ", $networks_arr); + } + return $networks; + } else { + return $networks_arr; + } +} + +function filter_generate_optcfg_array() { + global $config, $FilterIflist; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_generate_optcfg_array() being called $mt\n"; + } + + read_layer7_config(); + /* if list */ + $iflist = get_configured_interface_with_descr(); + foreach ($iflist as $if => $ifdetail) { + $oc = $config['interfaces'][$if]; + $oic = array(); + $oic['if'] = get_real_interface($if); + if (!does_interface_exist($oic['if'])) + continue; + $oic['ifv6'] = get_real_interface($if, "inet6"); + $oic['ip'] = get_interface_ip($if); + $oic['ipv6'] = get_interface_ipv6($if); + if(!is_ipaddrv4($oc['ipaddr']) && !empty($oc['ipaddr'])) + $oic['type'] = $oc['ipaddr']; + if(!is_ipaddrv6($oc['ipaddrv6']) && !empty($oc['ipaddrv6'])) + $oic['type6'] = $oc['ipaddrv6']; + if (!empty($oc['track6-interface'])) + $oic['track6-interface'] = $oc['track6-interface']; + $oic['sn'] = get_interface_subnet($if); + $oic['snv6'] = get_interface_subnetv6($if); + $oic['mtu'] = empty($oc['mtu']) ? 1500 : $oc['mtu']; + $oic['mss'] = empty($oc['mss']) ? '' : $oc['mss']; + $oic['descr'] = $ifdetail; + $oic['sa'] = gen_subnet($oic['ip'], $oic['sn']); + $oic['sav6'] = gen_subnetv6($oic['ipv6'], $oic['snv6']); + $oic['nonat'] = $oc['nonat']; + $oic['alias-address'] = $oc['alias-address']; + $oic['alias-subnet'] = $oc['alias-subnet']; + $oic['gateway'] = $oc['gateway']; + $oic['gatewayv6'] = $oc['gatewayv6']; + $oic['spoofcheck'] = "yes"; + $oic['bridge'] = link_interface_to_bridge($if); + $vips = link_interface_to_vips($if); + if (!empty($vips)) { + foreach ($vips as $vipidx => $vip) { + if (is_ipaddrv4($vip['subnet'])) { + if (!is_array($oic['vips'])) + $oic['vips'] = array(); + $oic['vips'][$vipidx]['ip'] = $vip['subnet']; + if (empty($vip['subnet_bits'])) + $oic['vips'][$vipidx]['sn'] = 32; + else + $oic['vips'][$vipidx]['sn'] = $vip['subnet_bits']; + } else if (is_ipaddrv6($vip['subnet'])) { + if (!is_array($oic['vips6'])) + $oic['vips6'] = array(); + $oic['vips6'][$vipidx]['ip'] = $vip['subnet']; + if (empty($vip['subnet_bits'])) + $oic['vips6'][$vipidx]['sn'] = 128; + else + $oic['vips6'][$vipidx]['sn'] = $vip['subnet_bits']; + } + } + } + unset($vips); + $FilterIflist[$if] = $oic; + } + + if($config['pptpd']['mode'] == "server" || $config['pptpd']['mode'] == "redir") { + $oic = array(); + $oic['if'] = 'pptp'; + $oic['descr'] = 'pptp'; + $oic['ip'] = $config['pptpd']['localip']; + $oic['sa'] = $config['pptpd']['remoteip']; + $oic['mode'] = $config['pptpd']['mode']; + $oic['virtual'] = true; + if($config['pptpd']['pptp_subnet'] <> "") + $oic['sn'] = $config['pptpd']['pptp_subnet']; + else + $oic['sn'] = "32"; + $FilterIflist['pptp'] = $oic; + } + if($config['l2tp']['mode'] == "server") { + $oic = array(); + $oic['if'] = 'l2tp'; + $oic['descr'] = 'L2TP'; + $oic['ip'] = $config['l2tp']['localip']; + $oic['sa'] = $config['l2tp']['remoteip']; + if($config['l2tp']['l2tp_subnet'] <> "") + $oic['sn'] = $config['l2tp']['l2tp_subnet']; + else + $oic['sn'] = "32"; + $oic['mode'] = $config['l2tp']['mode']; + $oic['virtual'] = true; + $FilterIflist['l2tp'] = $oic; + } + if (is_array($config['pppoes']['pppoe']) && (count($config['pppoes']['pppoe']) > 0)) { + $pppoeifs = array(); + foreach($config['pppoes']['pppoe'] as $pppoe) { + if ($pppoe['mode'] == "server") { + $oic = array(); + $oic['if'] = 'pppoe'; + $oic['descr'] = 'pppoe'; + $oic['ip'] = $pppoe['localip']; + $oic['sa'] = $pppoe['remoteip']; + $oic['mode'] = $pppoe['mode']; + $oic['virtual'] = true; + if($pppoe['pppoe_subnet'] <> "") + $oic['sn'] = $pppoe['pppoe_subnet']; + else + $oic['sn'] = "32"; + $pppoeifs[] = $oic; + } + } + if (count($pppoeifs)) + $FilterIflist['pppoe'] = $pppoeifs; + } + /* add ipsec interfaces */ + if(isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) { + $oic = array(); + $oic['if'] = 'enc0'; + $oic['descr'] = 'IPsec'; + $oic['type'] = "none"; + $oic['virtual'] = true; + $FilterIflist['enc0'] = $oic; + } + /* add openvpn interfaces */ + if($config['openvpn']['openvpn-server'] || $config['openvpn']['openvpn-client']) { + $oic = array(); + $oic['if'] = "openvpn"; + $oic['descr'] = 'OpenVPN'; + $oic['type'] = "none"; + $oic['virtual'] = true; + $FilterIflist['openvpn'] = $oic; + } + /* add interface groups */ + if(is_array($config['ifgroups']['ifgroupentry'])) { + foreach($config['ifgroups']['ifgroupentry'] as $ifgen) { + $oc = array(); + $oc['if'] = $ifgen['ifname']; + $oc['descr'] = $ifgen['ifname']; + $oc['virtual'] = true; + $FilterIflist[$ifgen['ifname']] = $oc; + } + } +} + +function filter_flush_nat_table() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_flush_nat_table() being called $mt\n"; + } + return mwexec("/sbin/pfctl -F nat"); +} + +function filter_flush_state_table() { + return mwexec("/sbin/pfctl -F state"); +} + +function filter_get_reflection_interfaces($natif = "") { + global $FilterIflist; + + $nat_if_list = array(); + + foreach ($FilterIflist as $ifent => $ifname) { + if($ifname['if'] == $natif) + continue; + + /* Do not add reflection redirects for interfaces with gateways */ + if(interface_has_gateway($ifent)) + continue; + + $nat_if_list[] = $ifname['if']; + } + + return $nat_if_list; +} + +function filter_generate_reflection_nat($rule, &$route_table, $nat_ifs, $protocol, $target, $target_ip, $target_subnet = "") { + global $config, $FilterIflist; + + if(!isset($config['system']['enablenatreflectionhelper'])) + return ""; + + // Initialize natrules holder string + $natrules = ""; + + update_filter_reload_status(sprintf(gettext("Creating reflection NAT rule for %s..."), $rule['descr'])); + + /* TODO: Add this option to port forwards page. */ + if(isset($rule['staticnatport'])) { + $static_port = " static-port"; + } else { + $static_port = " port 1024:65535"; + } + + if(!empty($protocol)) { + $protocol_text = " proto {$protocol}"; + } else { + $protocol_text = ""; + } + + if(empty($target_subnet) || !is_numeric($target_subnet)) + $target_subnet = 32; + + if(!is_array($route_table)) { + /* get a simulated IPv4-only route table based on the config */ + $route_table = filter_get_direct_networks_list(false); + foreach($route_table as $rt_key => $rt_ent) { + if(!is_subnetv4($rt_ent['subnet'])) + unset($route_table[$rt_key]); + if(isset($route_table[$rt_key]) && isset($FilterIflist[$rt_ent['if']]['if'])) + $route_table[$rt_key]['if'] = $FilterIflist[$rt_ent['if']]['if']; + } + } + + /* Check if the target is accessed through a static route */ + foreach($route_table as $route) { + if(isset($route['gateway']) && is_ipaddr($route['gateway'])) { + $subnet_split = explode("/", $route['subnet']); + if(in_array($route['if'], $nat_ifs) && check_subnets_overlap($target_ip, $target_subnet, $subnet_split[0], $subnet_split[1])) { + $target_ip = $route['gateway']; + $target_subnet = 32; + break; + } + } + } + + /* Search for matching subnets in the routing table */ + foreach($route_table as $route) { + $subnet = $route['subnet']; + $subnet_split = explode("/", $subnet); + $subnet_if = $route['if']; + if(in_array($subnet_if, $nat_ifs) && check_subnets_overlap($target_ip, $target_subnet, $subnet_split[0], $subnet_split[1])) { + $ifsubnet_ip = ""; + /* Find interface IP to use for NAT */ + foreach ($route_table as $ifnetwork) { + if(isset($ifnetwork['ip']) && is_ipaddr($ifnetwork['ip']) && $ifnetwork['if'] == $subnet_if && ip_in_subnet($ifnetwork['ip'], $subnet)) { + $ifsubnet_ip = $ifnetwork['ip']; + break; + } + } + if(!empty($ifsubnet_ip)) { + $subnets = array($subnet); + /* Find static routes that also need to be referenced in the NAT rule */ + foreach($route_table as $rtentry) { + if(isset($rtentry['gateway']) && is_ipaddr($rtentry['gateway']) && $rtentry['if'] == $subnet_if && ip_in_subnet($rtentry['gateway'], $subnet)) + $subnets[] = $rtentry['subnet']; + } + if(count($subnets) > 1) + $subnet = "{ " . implode(" ", $subnets) . " }"; + $natrules .= "no nat on {$subnet_if}{$protocol_text} from {$subnet_if} to {$target}\n"; + $natrules .= "nat on {$subnet_if}{$protocol_text} from {$subnet} to {$target} -> {$ifsubnet_ip}{$static_port}\n"; + } + } + } + + if(!empty($natrules)) + $natrules .= "\n"; + + return $natrules; +} + +function filter_generate_reflection_proxy($rule, $nordr, $rdr_ifs, $srcaddr, $dstaddr_port, &$starting_localhost_port, &$reflection_txt) { + global $FilterIflist, $config; + + // Initialize natrules holder string + $natrules = ""; + $reflection_txt = array(); + + if(!empty($rdr_ifs)) { + if($config['system']['reflectiontimeout']) + $reflectiontimeout = $config['system']['reflectiontimeout']; + else + $reflectiontimeout = "2000"; + + update_filter_reload_status(sprintf(gettext("Creating reflection rule for %s..."), $rule['descr'])); + + $rdr_if_list = implode(" ", $rdr_ifs); + if(count($rdr_ifs) > 1) + $rdr_if_list = "{ {$rdr_if_list} }"; + + $natrules .= "\n# Reflection redirects\n"; + + $localport = $rule['local-port']; + if(!empty($localport) && is_alias($localport)) { + $localport = filter_expand_alias($localport); + $localport = explode(" ", trim($localport)); + // The translation port for rdr, when specified, does not support more than one port or range. + // Emulating for behavior consistent with the original port forward. + $localport = $localport[0]; + } + + if(is_alias($rule['destination']['port'])) { + if(empty($localport) || $rule['destination']['port'] == $rule['local-port']) { + $dstport = filter_expand_alias($rule['destination']['port']); + $dstport = array_filter(explode(" ", trim($dstport))); + $localport = ""; + } else if(!empty($localport)) { + $dstport = array($localport); + } + } else { + $dstport = array(str_replace("-", ":", $rule['destination']['port'])); + $dstport_split = explode(":", $dstport[0]); + + if(!empty($localport) && $dstport_split[0] != $rule['local-port']) { + if(!is_alias($rule['local-port']) && $dstport_split[1] && $dstport_split[0] != $dstport_split[1]) { + $localendport = $localport + ($dstport_split[1] - $dstport_split[0]); + $localport .= ":$localendport"; + } + + $dstport = array($localport); + } else + $localport = ""; + } + + $dstaddr = explode(" ", $dstaddr_port); + if($dstaddr[2]) { + $rflctintrange = array_pop($dstaddr); + array_pop($dstaddr); + } else + return ""; + $dstaddr = implode(" ", $dstaddr); + if(empty($dstaddr) || trim($dstaddr) == "0.0.0.0" || strtolower(trim($dstaddr)) == "port") + return ""; + + if(isset($rule['destination']['any'])) { + if(!$rule['interface']) + $natif = "wan"; + else + $natif = $rule['interface']; + + if(!isset($FilterIflist[$natif])) + return ""; + if(is_ipaddr($FilterIflist[$natif]['ip'])) + $dstaddr = $FilterIflist[$natif]['ip']; + else + return ""; + + if(!empty($FilterIflist[$natif]['sn'])) + $dstaddr = gen_subnet($dstaddr, $FilterIflist[$natif]['sn']) . '/' . $FilterIflist[$natif]['sn']; + } + + switch($rule['protocol']) { + case "tcp/udp": + $protocol = "{ tcp udp }"; + $reflect_protos = array('tcp', 'udp'); + break; + case "tcp": + case "udp": + $protocol = $rule['protocol']; + $reflect_protos = array($rule['protocol']); + break; + default: + return ""; + break; + } + + if(!empty($nordr)) { + $natrules .= "no rdr on {$rdr_if_list} proto {$protocol} from {$srcaddr} to {$dstaddr} port {$rflctintrange}\n"; + return $natrules; + } + + if (is_alias($rule['target'])) + $target = filter_expand_alias($rule['target']); + else if(is_ipaddr($rule['target'])) + $target = $rule['target']; + else if (is_ipaddr($FilterIflist[$rule['target']]['ip'])) + $target = $FilterIflist[$rule['target']]['ip']; + else + return ""; + $starting_localhost_port_tmp = $starting_localhost_port; + $toomanyports = false; + /* only install reflection rules for < 19991 items */ + foreach($dstport as $loc_pt) { + if($starting_localhost_port < 19991) { + $toadd_array = array(); + $inetdport = $starting_localhost_port; + $rflctrange = $starting_localhost_port; + + $loc_pt = explode(":", $loc_pt); + if($loc_pt[1] && $loc_pt[1] > $loc_pt[0]) + $delta = $loc_pt[1] - $loc_pt[0]; + else + $delta = 0; + + if(($inetdport + $delta + 1) - $starting_localhost_port_tmp > 500) { + log_error("Not installing NAT reflection rules for a port range > 500"); + $inetdport = $starting_localhost_port; + $toadd_array = array(); + $toomanyports = true; + break; + } else if(($inetdport + $delta) > 19990) { + log_error("Installing partial NAT reflection rules. Maximum 1,000 reached."); + $delta = 19990 - $inetdport; + $loc_pt[1] = $loc_pt[0] + $delta; + if($delta == 0) + unset($loc_pt[1]); + $toomanyports = true; + + if(!empty($localport)) { + if(is_alias($rule['destination']['port'])) { + $rflctintrange = alias_expand($rule['destination']['port']); + } else { + if($dstport_split[1]) + $dstport_split[1] = $dstport_split[0] + $inetdport + $delta - $starting_localhost_port; + $rflctintrange = implode(":", $dstport_split); + } + } + } + + if(empty($localport)) + $rflctintrange = implode(":", $loc_pt); + if($inetdport + $delta > $starting_localhost_port) + $rflctrange .= ":" . ($inetdport + $delta); + $starting_localhost_port = $inetdport + $delta + 1; + $toadd_array = array_merge($toadd_array, range($loc_pt[0], $loc_pt[0] + $delta)); + + if(!empty($toadd_array)) { + $rtarget = explode(" ", trim($target)); + foreach($toadd_array as $tda) { + if (empty($tda)) + continue; + foreach($reflect_protos as $reflect_proto) { + if($reflect_proto == "udp") { + $socktype = "dgram"; + $dash_u = "-u "; + $wait = "wait\t"; + } else { + $socktype = "stream"; + $dash_u = ""; + $wait = "nowait/0"; + } + foreach ($rtarget as $targip) { + if (empty($targip)) + continue; + $reflection_txt[] = "{$inetdport}\t{$socktype}\t{$reflect_proto}\t{$wait}\tnobody\t/usr/bin/nc\tnc {$dash_u}-w {$reflectiontimeout} {$targip} {$tda}\n"; + } + } + $inetdport++; + } + $natrules .= "rdr on {$rdr_if_list} proto {$protocol} from {$srcaddr} to {$dstaddr} port {$rflctintrange} tag PFREFLECT -> 127.0.0.1 port {$rflctrange}\n"; + } + } + + if($toomanyports) + break; + } + + $reflection_txt = array_unique($reflection_txt); + } + + return $natrules; +} + +function filter_nat_rules_automatic_tonathosts($with_descr = false) { + global $config, $FilterIflist, $GatewaysList; + + $tonathosts = array("127.0.0.0/8"); + $descriptions = array(gettext("localhost")); + + foreach (get_staticroutes() as $route) { + $netip = explode("/", $route['network']); + if (isset($GatewaysList[$route['gateway']])) { + $gateway =& $GatewaysList[$route['gateway']]; + if(!interface_has_gateway($gateway['interface']) && is_private_ip($netip[0])) { + $tonathosts[] = $route['network']; + $descriptions[] = gettext("static route"); + } + } + } + + /* create outbound nat entries for all local networks */ + foreach($FilterIflist as $ocname => $oc) { + if(interface_has_gateway($ocname)) + continue; + if(is_ipaddr($oc['alias-address'])) { + $tonathosts[] = "{$oc['alias-address']}/{$oc['alias-subnet']}"; + $descriptions[] = $oc['descr'] . " " . gettext("DHCP alias address"); + } + if($oc['sa']) { + $tonathosts[] = "{$oc['sa']}/{$oc['sn']}"; + $descriptions[] = $oc['descr']; + if (isset($oc['vips']) && is_array($oc['vips'])) { + $if_subnets = array("{$oc['sa']}/{$oc['sn']}"); + foreach ($oc['vips'] as $vip) { + if (!is_ipaddrv4($vip['ip'])) + continue; + + foreach ($if_subnets as $subnet) + if (ip_in_subnet($vip['ip'], $subnet)) + continue 2; + + $network = gen_subnet($vip['ip'], $vip['sn']); + array_unshift($tonathosts, $network . '/' . $vip['sn']); + array_unshift($descriptions, "Virtual IP ({$oc['descr']})"); + $if_subnets[] = $network . '/' . $vip['sn']; + unset($network); + } + unset($if_subnets); + } + } + } + + /* PPTP subnet */ + if(($config['pptpd']['mode'] == "server" ) && is_private_ip($config['pptpd']['remoteip'])) { + if (isset($config['pptpd']['n_pptp_units']) && is_numeric($config['pptpd']['n_pptp_units'])) + $pptp_subnets = ip_range_to_subnet_array($config['pptpd']['remoteip'], + long2ip32(ip2long($config['pptpd']['remoteip'])+($config['pptpd']['n_pptp_units']-1))); + else + $pptp_subnets = ip_range_to_subnet_array($config['pptpd']['remoteip'], + long2ip32(ip2long($config['pptpd']['remoteip']))); + + foreach ($pptp_subnets as $subnet) { + $tonathosts[] = $subnet; + $descriptions[] = gettext("PPTP server"); + } + } + + /* PPPoE subnet */ + if (is_array($FilterIflist['pppoe'])) + foreach ($FilterIflist['pppoe'] as $pppoe) + if(is_private_ip($pppoe['ip'])) { + $tonathosts[] = "{$pppoe['sa']}/{$pppoe['sn']}"; + $descriptions[] = gettext("PPPoE server"); + } + + /* L2TP subnet */ + if(isset($FilterIflist['l2tp']) && $FilterIflist['l2tp']['mode'] == "server") { + $l2tp_sa = $FilterIflist['l2tp']['sa']; + $l2tp_sn = $FilterIflist['l2tp']['sn']; + if(is_private_ip($l2tp_sa) && !empty($l2tp_sn)) { + $tonathosts[] = "{$l2tp_sa}/{$l2tp_sn}"; + $descriptions[] = gettext("L2TP server"); + } + } + + /* add openvpn interfaces */ + if(is_array($config['openvpn']['openvpn-server'])) + foreach ($config['openvpn']['openvpn-server'] as $ovpnsrv) + if (!isset($ovpnsrv['disable']) && !empty($ovpnsrv['tunnel_network'])) { + $tonathosts[] = $ovpnsrv['tunnel_network']; + $descriptions[] = gettext("OpenVPN server"); + } + + if(is_array($config['openvpn']['openvpn-client'])) + foreach ($config['openvpn']['openvpn-client'] as $ovpncli) + if (!isset($ovpncli['disable']) && !empty($ovpncli['tunnel_network'])) { + $tonathosts[] = $ovpncli['tunnel_network']; + $descriptions[] = gettext("OpenVPN client"); + } + + /* IPsec mode_cfg subnet */ + if (isset($config['ipsec']['client']['enable']) && + !empty($config['ipsec']['client']['pool_address']) && + !empty($config['ipsec']['client']['pool_netbits'])) { + $tonathosts[] = "{$config['ipsec']['client']['pool_address']}/{$config['ipsec']['client']['pool_netbits']}"; + $descriptions[] = gettext("IPsec client"); + } + + if ($with_descr) { + $combined = array(); + foreach ($tonathosts as $idx => $subnet) { + $combined[] = array( + "subnet" => $subnet, + "descr" => $descriptions[$idx]); + } + + return $combined; + } else + return $tonathosts; +} + +function filter_nat_rules_outbound_automatic($src) { + global $config, $FilterIflist; + + $rules = array(); + foreach ($FilterIflist as $if => $ifcfg) { + if (substr($ifcfg['if'], 0, 4) == "ovpn") + continue; + if (!interface_has_gateway($if)) + continue; + + $natent = array(); + $natent['interface'] = $if; + $natent['source']['network'] = $src; + $natent['dstport'] = "500"; + $natent['target'] = $ifcfg['ip']; + $natent['destination']['any'] = true; + $natent['staticnatport'] = true; + $natent['descr'] = gettext('Auto created rule for ISAKMP'); + $rules[] = $natent; + + $natent = array(); + $natent['interface'] = $if; + $natent['source']['network'] = $src; + $natent['sourceport'] = ""; + $natent['target'] = $ifcfg['ip']; + $natent['destination']['any'] = true; + $natent['natport'] = ""; + $natent['descr'] = gettext('Auto created rule'); + if (isset($ifcfg['nonat'])) + $natent['nonat'] = true; + $rules[] = $natent; + } + + return $rules; +} + +/* Generate a 'nat on' or 'no nat on' rule for given interface */ +function filter_nat_rules_generate_if($if, $src = "any", $srcport = "", $dst = "any", $dstport = "", $natip = "", $natport = "", $nonat = false, $staticnatport = false, $proto = "", $poolopts = "") { + global $config, $FilterIflist; + /* XXX: billm - any idea if this code is needed? */ + if($src == "/32" || $src{0} == "/") + return "# src incorrectly specified\n"; + if($natip != "") { + if (is_subnet($natip)) + $tgt = $natip; + elseif (is_alias($natip)) + $tgt = "\${$natip}"; + else + $tgt = "{$natip}/32"; + } else { + $natip = get_interface_ip($if); + if(is_ipaddr($natip)) + $tgt = "{$natip}/32"; + else + $tgt = "(" . $FilterIflist[$if]['if'] . ")"; + } + /* Add the protocol, if defined */ + if (!empty($proto) && $proto != "any") { + if ($proto == "tcp/udp") + $protocol = " proto { tcp udp }"; + else + $protocol = " proto {$proto}"; + } else + $protocol = ""; + /* Set tgt for IPv6 */ + if ($proto == "ipv6") { + $natip = get_interface_ipv6($if); + if(is_ipaddrv6($natip)) + $tgt = "{$natip}/128"; + } + /* Add the hard set source port (useful for ISAKMP) */ + if($natport != "") + $tgt .= " port {$natport}"; + /* sometimes this gets called with "" instead of a value */ + if($src == "") + $src = "any"; + /* Match on this source port */ + if($srcport != "") { + $srcportexpand = alias_expand($srcport); + if(!$srcportexpand) + $srcportexpand = $srcport; + $src .= " port {$srcportexpand}"; + } + /* sometimes this gets called with "" instead of a value */ + if($dst == "") + $dst = "any"; + /* Match on this dest port */ + if($dstport != "") { + $dstportexpand = alias_expand($dstport); + if(!$dstportexpand) + $dstportexpand = $dstport; + $dst .= " port {$dstportexpand}"; + } + /* outgoing static-port option, hamachi, Grandstream, VOIP, etc */ + $staticnatport_txt = ""; + if($staticnatport) + $staticnatport_txt = "static-port"; + elseif(!$natport) + $tgt .= " port 1024:65535"; // set source port range + /* Allow for negating NAT entries */ + if($nonat) { + $nat = "no nat"; + $target = ""; + $staticnatport_txt = ""; + $poolopts = ""; + } else { + $nat = "nat"; + $target = "-> {$tgt}"; + } + $if_friendly = $FilterIflist[$if]['descr']; + /* Put all the pieces together */ + if($if_friendly) + $natrule = "{$nat} on \${$if_friendly} {$protocol} from {$src} to {$dst} {$target} {$poolopts} {$staticnatport_txt}\n"; + else + $natrule .= "# Could not convert {$if} to friendly name(alias)\n"; + return $natrule; +} + +function filter_nat_rules_generate() { + global $config, $g, $after_filter_configure_run, $FilterIflist, $GatewaysList, $aliases; + + $natrules = "no nat proto carp\n"; + $natrules .= "no rdr proto carp\n"; + $natrules .= "nat-anchor \"natearly/*\"\n"; + + $natrules .= "nat-anchor \"natrules/*\"\n\n"; + update_filter_reload_status(gettext("Creating 1:1 rules...")); + + $reflection_txt = ""; + $route_table = ""; + + /* any 1:1 mappings? */ + if(is_array($config['nat']['onetoone'])) { + foreach ($config['nat']['onetoone'] as $rule) { + if (isset($rule['disabled'])) + continue; + + $sn = ""; + $sn1 = ""; + $target = alias_expand($rule['external']); + if (!$target) { + $natrules .= "# Unresolvable alias {$rule['target']}\n"; + continue; /* unresolvable alias */ + } + + if (!$rule['interface']) + $natif = "wan"; + else + $natif = $rule['interface']; + if (!isset($FilterIflist[$natif])) + continue; + + $srcaddr = filter_generate_address($rule, 'source'); + $dstaddr = filter_generate_address($rule, 'destination'); + if(!$dstaddr) + $dstaddr = $FilterIflist[$natif]['ip']; + + $srcaddr = trim($srcaddr); + $dstaddr = trim($dstaddr); + + $tmp = explode('/', $srcaddr); + $srcip = $tmp[0]; + if (!empty($tmp[1]) && is_numeric($tmp[1])) { + $sn = $tmp[1]; + $sn1 = "/{$sn}"; + } + + $natif = $FilterIflist[$natif]['if']; + + /* + * If reflection is enabled, turn on extra redirections + * for this rule by adding other interfaces to an rdr rule. + */ + if ((isset($config['system']['enablebinatreflection']) || $rule['natreflection'] == "enable") + && $rule['natreflection'] != "disable") + $nat_if_list = filter_get_reflection_interfaces($natif); + else + $nat_if_list = array(); + + $natrules .= "binat on {$natif} from {$srcaddr} to {$dstaddr} -> {$target}{$sn1}\n"; + if (!empty($nat_if_list)) { + $binat_if_list = implode(" ", $nat_if_list); + $binat_if_list = "{ {$binat_if_list} }"; + $reflection_txt .= "rdr on {$binat_if_list} from {$dstaddr} to {$target}{$sn1} -> {$srcaddr} bitmask\n"; + } + + $nat_if_list = array_merge(array($natif), $nat_if_list); + $reflection_txt .= filter_generate_reflection_nat($rule, $route_table, $nat_if_list, "", $srcaddr, $srcip, $sn); + } + } + + /* Add binat rules for Network Prefix translation */ + if(is_array($config['nat']['npt'])) { + foreach ($config['nat']['npt'] as $rule) { + if (isset($rule['disabled'])) + continue; + + if (!$rule['interface']) + $natif = "wan"; + else + $natif = $rule['interface']; + if (!isset($FilterIflist[$natif])) + continue; + + $srcaddr = filter_generate_address($rule, 'source'); + $dstaddr = filter_generate_address($rule, 'destination'); + + $srcaddr = trim($srcaddr); + $dstaddr = trim($dstaddr); + + $natif = $FilterIflist[$natif]['descr']; + + $natrules .= "binat on \${$natif} from {$srcaddr} to any -> {$dstaddr}\n"; + $natrules .= "binat on \${$natif} from any to {$dstaddr} -> {$srcaddr}\n"; + + } + } + + /* ipsec nat */ + if (is_array($config['ipsec']) && isset($config['ipsec']['enable'])) { + if (is_array($config['ipsec']['phase2'])) { + foreach ($config['ipsec']['phase2'] as $ph2ent) { + if ($ph2ent['mode'] != 'transport' && !empty($ph2ent['natlocalid'])) { + if (!function_exists('ipsec_idinfo_to_cidr')) + require_once("ipsec.inc"); + if (!is_array($ph2ent['localid'])) + $ph2ent['localid'] = array(); + $ph2ent['localid']['mode'] = $ph2ent['mode']; + $local_subnet = ipsec_idinfo_to_cidr($ph2ent['localid']); + if (empty($local_subnet) || $local_subnet == "0.0.0.0/0") + continue; + if (!is_subnet($local_subnet) && !is_ipaddr($local_subnet)) + continue; + if (!is_array($ph2ent['natlocalid'])) + $ph2ent['natlocalid'] = array(); + $ph2ent['natlocalid']['mode'] = $ph2ent['mode']; + $natlocal_subnet = ipsec_idinfo_to_cidr($ph2ent['natlocalid']); + if (empty($natlocal_subnet) || $natlocal_subnet == "0.0.0.0/0") + continue; + if (!is_subnet($natlocal_subnet) && !is_ipaddr($natlocal_subnet)) + continue; + if (!is_array($ph2ent['remoteid'])) + $ph2ent['remoteid'] = array(); + $ph2ent['remoteid']['mode'] = $ph2ent['mode']; + $remote_subnet = ipsec_idinfo_to_cidr($ph2ent['remoteid']); + if (empty($remote_subnet)) + continue; + if (!is_subnet($remote_subnet) && !is_ipaddr($remote_subnet)) + continue; + if ($remote_subnet == "0.0.0.0/0") + $remote_subnet = "any"; + if (is_ipaddr($natlocal_subnet) && !is_ipaddr($local_subnet) ) + $nattype = "nat"; + else + $nattype = "binat"; + $natrules .= "{$nattype} on enc0 from {$local_subnet} to {$remote_subnet} -> {$natlocal_subnet}\n"; + } + } + } + } + + if ($config['nat']['outbound']['mode'] == "disabled") + $natrules .= "\n# Outbound NAT rules are disabled\n"; + + if ($config['nat']['outbound']['mode'] == "advanced" || $config['nat']['outbound']['mode'] == "hybrid") { + $natrules .= "\n# Outbound NAT rules (manual)\n"; + /* advanced outbound rules */ + if(is_array($config['nat']['outbound']['rule'])) { + foreach ($config['nat']['outbound']['rule'] as $obent) { + if (isset($obent['disabled'])) + continue; + update_filter_reload_status(sprintf(gettext("Creating advanced outbound rule %s"), $obent['descr'])); + $src = alias_expand($obent['source']['network']); + if(!$src) + $src = $obent['source']['network']; + $dst = alias_expand($obent['destination']['address']); + if(!$dst) + $dst = $obent['destination']['address']; + if(isset($obent['destination']['not']) && !isset($obent['destination']['any'])) + $dst = "!" . $dst; + + if(!$obent['interface'] || !isset($FilterIflist[$obent['interface']])) + continue; + + $obtarget = ($obent['target'] == "other-subnet") ? $obent['targetip'] . '/' . $obent['targetip_subnet']: $obent['target']; + $poolopts = (is_subnet($obtarget) || is_alias($obtarget)) ? $obent['poolopts'] : ""; + + $natrules .= filter_nat_rules_generate_if($obent['interface'], + $src, + $obent['sourceport'], + $dst, + $obent['dstport'], + $obtarget, + $obent['natport'], + isset($obent['nonat']), + isset($obent['staticnatport']), + $obent['protocol'], + $poolopts + ); + } + } + } + + /* outbound rules */ + if (!isset($config['nat']['outbound']['mode']) || + $config['nat']['outbound']['mode'] == "automatic" || + $config['nat']['outbound']['mode'] == "hybrid") { + $natrules .= "\n# Outbound NAT rules (automatic)\n"; + /* standard outbound rules (one for each interface) */ + update_filter_reload_status(gettext("Creating outbound NAT rules")); + $tonathosts_array = filter_nat_rules_automatic_tonathosts(); + $tonathosts = implode(" ", $tonathosts_array); + $numberofnathosts = count($tonathosts_array); + + $natrules .= "\n# Subnets to NAT \n"; + if ($numberofnathosts > 0) { + update_filter_reload_status(gettext('Creating automatic outbound rules')); + + if ($numberofnathosts > 4) { + $natrules .= "table { {$tonathosts} }\n"; + $macroortable = ""; + } else { + $natrules .= "tonatsubnets = \"{ {$tonathosts} }\"\n"; + $macroortable = "\$tonatsubnets"; + } + + $a_outs = filter_nat_rules_outbound_automatic($macroortable); + foreach ($a_outs as $a_out) { + $natrules .= filter_nat_rules_generate_if($a_out['interface'], + $a_out['source']['network'], + $a_out['sourceport'], + $a_out['destination']['address'], + $a_out['dstport'], + $a_out['target'], + $a_out['natport'], + isset($a_out['nonat']), + isset($a_out['staticnatport'])); + } + } + unset($tonathosts, $tonathosts_array, $numberofnathosts); + } + + /* load balancer anchor */ + $natrules .= "\n# Load balancing anchor\n"; + $natrules .= "rdr-anchor \"relayd/*\"\n"; + + update_filter_reload_status(gettext("Setting up TFTP helper")); + $natrules .= "# TFTP proxy\n"; + $natrules .= "rdr-anchor \"tftp-proxy/*\"\n"; + + if (!empty($config['system']['tftpinterface'])) { + $tftpifs = explode(",", $config['system']['tftpinterface']); + foreach($tftpifs as $tftpif) { + if ($FilterIflist[$tftpif]) + $natrules .= "rdr pass on {$FilterIflist[$tftpif]['if']} proto udp from any to any port tftp -> 127.0.0.1 port 6969\n"; + } + } + + /* DIAG: add ipv6 NAT, if requested */ + if(isset($config['diag']['ipv6nat']['enable']) && + is_ipaddr($config['diag']['ipv6nat']['ipaddr']) && + is_array($FilterIflist['wan'])) { + /* XXX: FIX ME! IPV6 */ + $natrules .= "rdr on \${$FilterIflist['wan']['descr']} proto ipv6 from any to any -> {$config['diag']['ipv6nat']['ipaddr']}\n"; + } + + if(file_exists("/var/etc/inetd.conf")) + @unlink("/var/etc/inetd.conf"); + // Open inetd.conf write handle + $inetd_fd = fopen("/var/etc/inetd.conf","w"); + /* add tftp protocol helper */ + fwrite($inetd_fd, "tftp-proxy\tdgram\tudp\twait\t\troot\t/usr/libexec/tftp-proxy\ttftp-proxy -v\n"); + + if(isset($config['nat']['rule'])) { + /* start reflection redirects on port 19000 of localhost */ + $starting_localhost_port = 19000; + $natrules .= "# NAT Inbound Redirects\n"; + foreach ($config['nat']['rule'] as $rule) { + update_filter_reload_status(sprintf(gettext("Creating NAT rule %s"), $rule['descr'])); + + if(isset($rule['disabled'])) + continue; + + /* if item is an alias, expand */ + $dstport = ""; + $dstport[0] = alias_expand($rule['destination']['port']); + if(!$dstport[0]) + $dstport = explode("-", $rule['destination']['port']); + + /* if item is an alias, expand */ + $localport = alias_expand($rule['local-port']); + if(!$localport || $dstport[0] == $localport) { + $localport = ""; + } else if(is_alias($rule['local-port'])) { + $localport = filter_expand_alias($rule['local-port']); + if($localport) { + $localport = explode(" ", trim($localport)); + $localport = $localport[0]; + $localport = " port {$localport}"; + } + } else if(is_alias($rule['destination']['port'])) { + $localport = " port {$localport}"; + } else { + if(($dstport[1]) && ($dstport[0] != $dstport[1])) { + $localendport = $localport + ($dstport[1] - $dstport[0]); + + $localport .= ":$localendport"; + } + + $localport = " port {$localport}"; + } + + switch(strtolower($rule['protocol'])) { + case "tcp/udp": + $protocol = "{ tcp udp }"; + break; + case "tcp": + case "udp": + $protocol = strtolower($rule['protocol']); + break; + default: + $protocol = strtolower($rule['protocol']); + $localport = ""; + break; + } + + $target = alias_expand($rule['target']); + if(!$target && !isset($rule['nordr'])) { + $natrules .= "# Unresolvable alias {$rule['target']}\n"; + continue; /* unresolvable alias */ + } + + if(is_alias($rule['target'])) + $target_ip = filter_expand_alias($rule['target']); + else if(is_ipaddr($rule['target'])) + $target_ip = $rule['target']; + else if(is_ipaddr($FilterIflist[$rule['target']]['ip'])) + $target_ip = $FilterIflist[$rule['target']]['ip']; + else + $target_ip = $rule['target']; + $target_ip = trim($target_ip); + + if($rule['associated-rule-id'] == "pass") + $rdrpass = "pass "; + else + $rdrpass = ""; + + if (isset($rule['nordr'])) { + $nordr = "no "; + $rdrpass = ""; + } else + $nordr = ""; + + if(!$rule['interface']) + $natif = "wan"; + else + $natif = $rule['interface']; + + if (!isset($FilterIflist[$natif])) + continue; + + $srcaddr = filter_generate_address($rule, 'source', true); + $dstaddr = filter_generate_address($rule, 'destination', true); + $srcaddr = trim($srcaddr); + $dstaddr = trim($dstaddr); + + if(!$dstaddr) + $dstaddr = $FilterIflist[$natif]['ip']; + + $dstaddr_port = explode(" ", $dstaddr); + if(empty($dstaddr_port[0]) || strtolower(trim($dstaddr_port[0])) == "port") + continue; // Skip port forward if no destination address found + $dstaddr_reflect = $dstaddr; + if(isset($rule['destination']['any'])) { + /* With reflection enabled, destination of 'any' has side effects + * that most people would not expect, so change it on reflection rules. */ + $dstaddr_reflect = $FilterIflist[$natif]['ip']; + if(!empty($FilterIflist[$natif]['sn'])) + $dstaddr_reflect = gen_subnet($dstaddr_reflect, $FilterIflist[$natif]['sn']) . '/' . $FilterIflist[$natif]['sn']; + + if($dstaddr_port[2]) + $dstaddr_reflect .= " port " . $dstaddr_port[2]; + } + + $natif = $FilterIflist[$natif]['if']; + + $reflection_type = "none"; + if($rule['natreflection'] != "disable" && $dstaddr_port[0] != "0.0.0.0") { + if($rule['natreflection'] == "enable") + $reflection_type = "proxy"; + else if($rule['natreflection'] == "purenat") + $reflection_type = "purenat"; + else if(!isset($config['system']['disablenatreflection'])) { + if(isset($config['system']['enablenatreflectionpurenat'])) + $reflection_type = "purenat"; + else + $reflection_type = "proxy"; + } + } + + if($reflection_type != "none") + $nat_if_list = filter_get_reflection_interfaces($natif); + else + $nat_if_list = array(); + + if(empty($nat_if_list)) + $reflection_type = "none"; + + $localport_nat = $localport; + if(empty($localport_nat) && $dstaddr_port[2]) + $localport_nat = " port " . $dstaddr_port[2]; + + if($srcaddr <> "" && $dstaddr <> "" && $natif) { + $natrules .= "{$nordr}rdr {$rdrpass}on {$natif} proto {$protocol} from {$srcaddr} to {$dstaddr}" . ($nordr == "" ? " -> {$target}{$localport}" : ""); + + /* Does this rule redirect back to a internal host? */ + if(isset($rule['destination']['any']) && !isset($rule['nordr']) && !isset($config['system']['enablenatreflectionhelper']) && !interface_has_gateway($rule['interface'])) { + $rule_interface_ip = find_interface_ip($natif); + $rule_interface_subnet = find_interface_subnet($natif); + if(!empty($rule_interface_ip) && !empty($rule_interface_subnet)) { + $rule_subnet = gen_subnet($rule_interface_ip, $rule_interface_subnet); + $natrules .= "\n"; + $natrules .= "no nat on {$natif} proto tcp from ({$natif}) to {$rule_subnet}/{$rule_interface_subnet}\n"; + $natrules .= "nat on {$natif} proto tcp from {$rule_subnet}/{$rule_interface_subnet} to {$target} port {$dstport[0]} -> ({$natif})\n"; + } + } + + if ($reflection_type != "none") { + if($reflection_type == "proxy" && !isset($rule['nordr'])) { + $natrules .= filter_generate_reflection_proxy($rule, $nordr, $nat_if_list, $srcaddr, $dstaddr, $starting_localhost_port, $reflection_rules); + $nat_if_list = array($natif); + foreach ($reflection_rules as $txtline) + fwrite($inetd_fd, $txtline); + } else if($reflection_type == "purenat" || isset($rule['nordr'])) { + $rdr_if_list = implode(" ", $nat_if_list); + if(count($nat_if_list) > 1) + $rdr_if_list = "{ {$rdr_if_list} }"; + $natrules .= "\n# Reflection redirect\n"; + $natrules .= "{$nordr}rdr {$rdrpass}on {$rdr_if_list} proto {$protocol} from {$srcaddr} to {$dstaddr_reflect}" . ($nordr == "" ? " -> {$target}{$localport}" : ""); + $nat_if_list = array_merge(array($natif), $nat_if_list); + } + } + + if(empty($nat_if_list)) + $nat_if_list = array($natif); + + $natrules .= "\n"; + if(!isset($rule['nordr'])) + $natrules .= filter_generate_reflection_nat($rule, $route_table, $nat_if_list, $protocol, "{$target}{$localport_nat}", $target_ip); + } + } + } + fclose($inetd_fd); // Close file handle + + if (isset($config['pptpd']['mode']) && ($config['pptpd']['mode'] != "off")) { + if ($config['pptpd']['mode'] == "redir") { + $pptpdtarget = $config['pptpd']['redir']; + $natrules .= "# PPTP\n"; + $natrules .= "rdr on \${$FilterIflist['wan']['descr']} proto gre from any to any -> {$pptpdtarget}\n"; + $natrules .= "rdr on \${$FilterIflist['wan']['descr']} proto tcp from any to any port 1723 -> {$pptpdtarget}\n"; + } + } + + $natrules .= discover_pkg_rules("nat"); + + $natrules .= "# UPnPd rdr anchor\n"; + $natrules .= "rdr-anchor \"miniupnpd\"\n"; + + if(!empty($reflection_txt)) + $natrules .= "\n# Reflection redirects and NAT for 1:1 mappings\n" . $reflection_txt; + + // Check if inetd is running, if not start it. If so, restart it gracefully. + $helpers = isvalidproc("inetd"); + if(file_exists("/var/etc/inetd.conf")) { + if(!$helpers) + mwexec("/usr/sbin/inetd -wW -R 0 -a 127.0.0.1 /var/etc/inetd.conf"); + else + sigkillbypid("/var/run/inetd.pid", "HUP"); + } + + return $natrules; +} + +function filter_generate_user_rule_arr($rule) { + global $config; + update_filter_reload_status(sprintf(gettext("Creating filter rule %s ..."), $rule['descr'])); + $ret = array(); + $line = filter_generate_user_rule($rule); + $ret['rule'] = $line; + $ret['interface'] = $rule['interface']; + if($rule['descr'] != "" and $line != "") + $ret['descr'] = "label \"" . fix_rule_label("USER_RULE: {$rule['descr']}") . "\""; + else + $ret['descr'] = "label \"USER_RULE\""; + + return $ret; +} + +function filter_generate_port(& $rule, $target = "source", $isnat = false) { + + $src = ""; + + $rule['protocol'] = strtolower($rule['protocol']); + if(in_array($rule['protocol'], array("tcp","udp","tcp/udp"))) { + if($rule[$target]['port']) { + $srcport = explode("-", $rule[$target]['port']); + $srcporta = alias_expand($srcport[0]); + if(!$srcporta) + log_error(sprintf(gettext("filter_generate_port: %s is not a valid {$target} port."), $srcport[0])); + else if((!$srcport[1]) || ($srcport[0] == $srcport[1])) { + $src .= " port {$srcporta} "; + } else if(($srcport[0] == 1) && ($srcport[1] == 65535)) { + /* no need for a port statement here */ + } else if ($isnat) { + $src .= " port {$srcport[0]}:{$srcport[1]}"; + } else { + if(is_port($srcporta) && $srcport[1] == 65535) { + $src .= " port >= {$srcporta} "; + } else if($srcport[0] == 1) { + $src .= " port <= {$srcport[1]} "; + } else { + $srcport[0]--; + $srcport[1]++; + $src .= " port {$srcport[0]} >< {$srcport[1]} "; + } + } + } + } + + return $src; +} + +function filter_address_add_vips_subnets(&$subnets, $if, $not) { + global $FilterIflist; + + $if_subnets = array($subnets); + + if ($not == true) + $subnets = "!{$subnets}"; + + if (!isset($FilterIflist[$if]['vips']) || !is_array($FilterIflist[$if]['vips'])) + return; + + foreach ($FilterIflist[$if]['vips'] as $vip) { + foreach ($if_subnets as $subnet) + if (ip_in_subnet($vip['ip'], $subnet)) + continue 2; + + if (is_ipaddrv4($vip['ip'])) { + if (!is_subnetv4($if_subnets[0])) + continue; + + $network = gen_subnet($vip['ip'], $vip['sn']); + } else if (is_ipaddrv6($vip['ip'])) { + if (!is_subnetv6($if_subnets[0])) + continue; + + $network = gen_subnetv6($vip['ip'], $vip['sn']); + } else + continue; + + $subnets .= ' ' . ($not == true ? '!' : '') . $network . '/' . $vip['sn']; + $if_subnets[] = $network . '/' . $vip['sn']; + } + unset($if_subnets); + + if (strpos($subnets, ' ') !== false) + $subnets = "{ {$subnets} }"; +} + +function filter_generate_address(& $rule, $target = "source", $isnat = false) { + global $FilterIflist, $config; + $src = ""; + + if(isset($rule[$target]['any'])) { + $src = "any"; + } else if($rule[$target]['network']) { + if(strstr($rule[$target]['network'], "opt")) { + $optmatch = ""; + $matches = ""; + if($rule['ipprotocol'] == "inet6") { + if(preg_match("/opt([0-9]*)$/", $rule[$target]['network'], $optmatch)) { + $opt_ip = $FilterIflist["opt{$optmatch[1]}"]['ipv6']; + if(!is_ipaddrv6($opt_ip)) + return ""; + $src = $opt_ip . "/" . $FilterIflist["opt{$optmatch[1]}"]['snv6']; + /* check for opt$NUMip here */ + } else if(preg_match("/opt([0-9]*)ip/", $rule[$target]['network'], $matches)) { + $src = $FilterIflist["opt{$matches[1]}"]['ipv6']; + if(!is_ipaddrv6($src)) + return ""; + if(isset($rule[$target]['not'])) + $src = " !{$src}"; + } + } else { + if(preg_match("/opt([0-9]*)$/", $rule[$target]['network'], $optmatch)) { + $opt_ip = $FilterIflist["opt{$optmatch[1]}"]['ip']; + if(!is_ipaddrv4($opt_ip)) + return ""; + $src = $opt_ip . "/" . $FilterIflist["opt{$optmatch[1]}"]['sn']; + /* check for opt$NUMip here */ + } else if(preg_match("/opt([0-9]*)ip/", $rule[$target]['network'], $matches)) { + $src = $FilterIflist["opt{$matches[1]}"]['ip']; + if(!is_ipaddrv4($src)) + return ""; + if(isset($rule[$target]['not'])) + $src = " !{$src}"; + } + } + } else { + if($rule['ipprotocol'] == "inet6") { + switch ($rule[$target]['network']) { + case 'wan': + $wansa = $FilterIflist['wan']['sav6']; + if (!is_ipaddrv6($wansa)) + return ""; + $wansn = $FilterIflist['wan']['snv6']; + $src = "{$wansa}/{$wansn}"; + break; + case 'wanip': + $src = $FilterIflist["wan"]['ipv6']; + if (!is_ipaddrv6($src)) + return ""; + break; + case 'lanip': + $src = $FilterIflist["lan"]['ipv6']; + if (!is_ipaddrv6($src)) + return ""; + break; + case 'lan': + $lansa = $FilterIflist['lan']['sav6']; + if (!is_ipaddrv6($lansa)) + return ""; + $lansn = $FilterIflist['lan']['snv6']; + $src = "{$lansa}/{$lansn}"; + break; + case '(self)': + $src = "(self)"; + break; + case 'pptp': + $pptpsav6 = gen_subnetv6($FilterIflist['pptp']['sav6'], $FilterIflist['pptp']['snv6']); + $pptpsnv6 = $FilterIflist['pptp']['snv6']; + $src = "{$pptpsav6}/{$pptpsnv6}"; + break; + case 'pppoe': + if (is_array($FilterIflist['pppoe'])) { + $pppoesav6 = gen_subnetv6($FilterIflist['pppoe'][0]['ipv6'], $FilterIflist['pppoe'][0]['snv6']); + $pppoesnv6 = $FilterIflist['pppoe'][0]['snv6']; + $src = "{$pppoesav6}/{$pppoesnv6}"; + } + } + if(isset($rule[$target]['not']) && !is_subnet($src)) + $src = " !{$src}"; + } else { + switch ($rule[$target]['network']) { + case 'wan': + $wansa = $FilterIflist['wan']['sa']; + if (!is_ipaddrv4($wansa)) + return ""; + $wansn = $FilterIflist['wan']['sn']; + $src = "{$wansa}/{$wansn}"; + break; + case 'wanip': + $src = $FilterIflist["wan"]['ip']; + break; + case 'lanip': + $src = $FilterIflist["lan"]['ip']; + break; + case 'lan': + $lansa = $FilterIflist['lan']['sa']; + if (!is_ipaddrv4($lansa)) + return ""; + $lansn = $FilterIflist['lan']['sn']; + $src = "{$lansa}/{$lansn}"; + break; + case '(self)': + $src = "(self)"; + break; + case 'pptp': + if (isset($config['pptpd']['n_pptp_units']) && is_numeric($config['pptpd']['n_pptp_units'])) + $pptp_subnets = ip_range_to_subnet_array($config['pptpd']['remoteip'], long2ip32(ip2long($config['pptpd']['remoteip'])+($config['pptpd']['n_pptp_units']-1))); + else + $pptp_subnets = ip_range_to_subnet_array($config['pptpd']['remoteip'], long2ip32(ip2long($config['pptpd']['remoteip']))); + if (empty($pptp_subnets)) + return ""; + if(isset($rule[$target]['not'])) + array_walk($pptp_subnets, function (&$value, $key) { + $value="!{$value}"; + }); + $src = "{ " . implode(" ", $pptp_subnets) . " }"; + break; + case 'pppoe': + /* XXX: This needs to be fixed somehow! */ + if (is_array($FilterIflist['pppoe'])) { + $pppoesa = gen_subnet($FilterIflist['pppoe'][0]['ip'], $FilterIflist['pppoe'][0]['sn']); + $pppoesn = $FilterIflist['pppoe'][0]['sn']; + $src = "{$pppoesa}/{$pppoesn}"; + } + break; + } + if(isset($rule[$target]['not']) && !is_subnet($src) && + (strpos($src, '{') === false)) + $src = " !{$src}"; + } + } + if (is_subnet($src)) + filter_address_add_vips_subnets($src, $rule[$target]['network'], isset($rule[$target]['not'])); + } else if($rule[$target]['address']) { + $expsrc = alias_expand($rule[$target]['address']); + if(isset($rule[$target]['not'])) + $not = "!"; + else + $not = ""; + $src = " {$not} {$expsrc}"; + } + + $src .= filter_generate_port($rule, $target, $isnat); + + return $src; +} + +function filter_generate_user_rule($rule) { + global $config, $g, $FilterIflist, $GatewaysList; + global $layer7_rules_list, $dummynet_name_list; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_generate_user_rule() being called $mt\n"; + } + /* don't include disabled rules */ + if(isset($rule['disabled'])) { + return "# rule " . $rule['descr'] . " disabled \n"; + } + update_filter_reload_status("Creating filter rules {$rule['descr']} ..."); + $pptpdcfg = $config['pptpd']; + $int = ""; + $aline = array(); + + /* Check to see if the interface is in our list */ + if(isset($rule['floating'])) { + if(isset($rule['interface']) && $rule['interface'] <> "") { + $interfaces = explode(",", $rule['interface']); + $ifliste = ""; + foreach ($interfaces as $iface) { + if(array_key_exists($iface, $FilterIflist)) + $ifliste .= " " . $FilterIflist[$iface]['if'] . " "; + } + if($ifliste <> "") + $aline['interface'] = " on { {$ifliste} } "; + else + $aline['interface'] = ""; + } else + $aline['interface'] = ""; + } else if(!array_key_exists($rule['interface'], $FilterIflist)) { + foreach($FilterIflist as $oc) + $items .= $oc['descr'] . " "; + return "# array key \"{$rule['interface']}\" does not exist for \"" . $rule['descr'] . "\" in array: {{$items}}"; + } else if((array_key_exists($rule['interface'], $FilterIflist)) + && (is_array($FilterIflist[$rule['interface']])) + && (is_array($FilterIflist[$rule['interface']][0]))) { + /* Currently this only case for this is the pppoe server. There should be an existing macro with this name. */ + $aline['interface'] = " on \$" . $rule['interface'] . " "; + } else + $aline['interface'] = " on \$" . $FilterIflist[$rule['interface']]['descr'] . " "; + $ifcfg = $FilterIflist[$rule['interface']]; + if($pptpdcfg['mode'] != "server") { + if(($rule['source']['network'] == "pptp") || + ($rule['destination']['network'] == "pptp")) + return "# source network or destination network == pptp on " . $rule['descr']; + } + + switch($rule['ipprotocol']) { + case "inet": + $aline['ipprotocol'] = "inet"; + break; + case "inet6": + $aline['ipprotocol'] = "inet6"; + break; + default: + $aline['ipprotocol'] = ""; + break; + } + + /* check for unresolvable aliases */ + if($rule['source']['address'] && !alias_expand($rule['source']['address'])) { + $error_text = "Unresolvable source alias '{$rule['source']['address']}' for rule '{$rule['descr']}'"; + file_notice("Filter_Reload", $error_text); + return "# {$error_text}"; + } + if($rule['destination']['address'] && !alias_expand($rule['destination']['address'])) { + $error_text = "Unresolvable destination alias '{$rule['destination']['address']}' for rule '{$rule['descr']}'"; + file_notice("Filter_Reload", $error_text); + return "# {$error_text}"; + } + update_filter_reload_status("Setting up pass/block rules"); + $type = $rule['type']; + if($type != "pass" && $type != "block" && $type != "reject" && $type != "match") { + /* default (for older rules) is pass */ + $type = "pass"; + } + if($type == "reject") { + $aline['type'] = "block return "; + } else + $aline['type'] = $type . " "; + if(isset($rule['floating']) && $rule['floating'] == "yes") { + if($rule['direction'] != "any") + $aline['direction'] = " " . $rule['direction'] . " "; + } else { + /* ensure the direction is in */ + $aline['direction'] = " in "; + } + if(isset($rule['log'])) + $aline['log'] = "log "; + if(!isset($rule['floating']) || isset($rule['quick'])) + $aline['quick'] = " quick "; + + /* set the gateway interface */ + update_filter_reload_status(sprintf(gettext("Setting up pass/block rules %s"), $rule['descr'])); + + /* do not process reply-to for gateway'd rules */ + if($rule['gateway'] == "" && $aline['direction'] <> "" && (interface_has_gateway($rule['interface']) || interface_has_gatewayv6($rule['interface'])) && !isset($config['system']['disablereplyto']) && !isset($rule['disablereplyto']) && $type != "match") { + if ($rule['ipprotocol'] == "inet6") { + $rg = get_interface_gateway_v6($rule['interface']); + if (is_ipaddrv6($rg)) + $aline['reply'] = "reply-to ( {$ifcfg['ifv6']} {$rg} ) "; + else if ($rule['interface'] <> "pptp") + log_error("Could not find IPv6 gateway for interface({$rule['interface']})."); + } else { + $rg = get_interface_gateway($rule['interface']); + if (is_ipaddrv4($rg)) + $aline['reply'] = "reply-to ( {$ifcfg['if']} {$rg} ) "; + else if ($rule['interface'] <> "pptp") + log_error(sprintf(gettext("Could not find IPv4 gateway for interface (%s)."), $rule['interface'])); + } + } + /* if user has selected a custom gateway, lets work with it */ + else if($rule['gateway'] <> "" && $type == "pass") { + if (isset($GatewaysList[$rule['gateway']])) + /* Add the load balanced gateways */ + $aline['route'] = " \$GW{$rule['gateway']} "; + else if (isset($config['system']['skip_rules_gw_down'])) + return "# rule " . $rule['descr'] . " disabled because gateway " . $rule['gateway'] . " is down "; + else + log_error("The gateway: {$rule['gateway']} is invalid or unknown, not using it."); + } + + if (isset($rule['protocol']) && !empty($rule['protocol'])) { + if($rule['protocol'] == "tcp/udp") + $aline['prot'] = " proto { tcp udp } "; + elseif(($rule['protocol'] == "icmp") && ($rule['ipprotocol'] == "inet6")) + $aline['prot'] = " proto ipv6-icmp "; + elseif($rule['protocol'] == "icmp") + $aline['prot'] = " proto icmp "; + else + $aline['prot'] = " proto {$rule['protocol']} "; + } else { + if($rule['source']['port'] <> "" || $rule['destination']['port'] <> "") + $aline['prot'] = " proto tcp "; + } + update_filter_reload_status(sprintf(gettext("Creating rule %s"), $rule['descr'])); + + /* source address */ + $src = trim(filter_generate_address($rule, "source")); + if (empty($src) || ($src == "/")) { + return "# at the break!"; + } + $aline['src'] = " from $src "; + + /* OS signatures */ + if(($rule['protocol'] == "tcp") && ($rule['os'] <> "")) + $aline['os'] = " os \"{$rule['os']}\" "; + + /* destination address */ + $dst = trim(filter_generate_address($rule, "destination")); + if (empty($dst) || ($dst == "/")) { + return "# returning at dst $dst == \"/\""; + } + $aline['dst'] = "to $dst "; + + //Layer7 support + $l7_present = false; + $l7_structures = array(); + if(isset($rule['l7container']) && $rule['l7container'] != "none") { + $l7_present = true; + $l7rule =& $layer7_rules_list[$rule['l7container']]; + $l7_structures = $l7rule->get_unique_structures(); + $aline['divert'] = "divert-to " . $l7rule->GetRPort() . " "; + } + if (($rule['protocol'] == "icmp") && $rule['icmptype'] && ($rule['ipprotocol'] == "inet")) + $aline['icmp-type'] = "icmp-type {$rule['icmptype']} "; + if (($rule['protocol'] == "icmp") && $rule['icmptype'] && ($rule['ipprotocol'] == "inet6")) + $aline['icmp6-type'] = "icmp6-type {$rule['icmptype']} "; + if (!empty($rule['tag'])) + $aline['tag'] = " tag " .$rule['tag']. " "; + if (!empty($rule['tagged'])) + $aline['tagged'] = " tagged " .$rule['tagged'] . " "; + if (!empty($rule['dscp'])) { + switch (strtolower($rule['dscp'])) { + case 'va': $aline['dscp'] = " dscp 44 "; break; + case 'cs1': $aline['dscp'] = " dscp 8 "; break; + case 'cs2': $aline['dscp'] = " dscp 16 "; break; + case 'cs3': $aline['dscp'] = " dscp 24 "; break; + case 'cs4': $aline['dscp'] = " dscp 32 "; break; + case 'cs5': $aline['dscp'] = " dscp 40 "; break; + case 'cs6': $aline['dscp'] = " dscp 48 "; break; + case 'cs7': $aline['dscp'] = " dscp 56 "; break; + default: $aline['dscp'] = " dscp " . $rule['dscp'] . " "; break; + } + } + if (!empty($rule['vlanprio']) && ($rule['vlanprio'] != "none")) + $aline['vlanprio'] = " ieee8021q-pcp " . $rule['vlanprio'] . " "; + if (!empty($rule['vlanprioset']) && ($rule['vlanprioset'] != "none")) + $aline['vlanprioset'] = " ieee8021q-setpcp " . $rule['vlanprioset'] . " "; + if ($type == "pass") { + if (isset($rule['allowopts'])) + $aline['allowopts'] = " allow-opts "; + } + $aline['flags'] = ""; + if ($rule['protocol'] == "tcp") { + if (isset($rule['tcpflags_any'])) + $aline['flags'] = "flags any "; + else if (!empty($rule['tcpflags2'])) { + $aline['flags'] = "flags "; + if (!empty($rule['tcpflags1'])) { + $flags1 = explode(",", $rule['tcpflags1']); + foreach ($flags1 as $flag1) { + // CWR flag needs special treatment + if($flag1[0] == "c") + $aline['flags'] .= "W"; + else + $aline['flags'] .= strtoupper($flag1[0]); + } + } + $aline['flags'] .= "/"; + if (!empty($rule['tcpflags2'])) { + $flags2 = explode(",", $rule['tcpflags2']); + foreach ($flags2 as $flag2) { + // CWR flag needs special treatment + if($flag2[0] == "c") + $aline['flags'] .= "W"; + else + $aline['flags'] .= strtoupper($flag2[0]); + } + } + $aline['flags'] .= " "; + } else { + $aline['flags'] = "flags S/SA "; + } + } + if ($type == "pass") { + /* + * # keep state + * works with TCP, UDP, and ICMP. + * # modulate state + * works only with TCP. pfSense will generate strong Initial Sequence Numbers (ISNs) + * for packets matching this rule. + * # synproxy state + * proxies incoming TCP connections to help protect servers from spoofed TCP SYN floods. + * This option includes the functionality of keep state and modulate state combined. + * # none + * do not use state mechanisms to keep track. this is only useful if your doing advanced + * queueing in certain situations. please check the faq. + */ + $noadvoptions = false; + if (isset($rule['statetype']) && $rule['statetype'] <> "") { + switch($rule['statetype']) { + case "none": + $noadvoptions = true; + $aline['flags'] .= " no state "; + break; + case "modulate state": + case "synproxy state": + if ($rule['protocol'] == "tcp") + $aline['flags'] .= "{$rule['statetype']} "; + break; + case "sloppy state": + $aline['flags'] .= "keep state "; + $rule['sloppy'] = true; + break; + default: + $aline['flags'] .= "{$rule['statetype']} "; + break; + } + } else + $aline['flags'] .= "keep state "; + + if ($noadvoptions == false && isset($rule['nopfsync'])) + $rule['nopfsync'] = true; + + if ($noadvoptions == false || $l7_present) + if ((isset($rule['source-track']) and $rule['source-track'] <> "") or + (isset($rule['max']) and $rule['max'] <> "") or + (isset($rule['max-src-nodes']) and $rule['max-src-nodes'] <> "") or + (isset($rule['max-src-states']) and $rule['max-src-states'] <> "") or + ((in_array($rule['protocol'], array("tcp","tcp/udp"))) and + ((isset($rule['statetimeout']) and $rule['statetimeout'] <> "") or + (isset($rule['max-src-conn']) and $rule['max-src-conn'] <> "") or + (isset($rule['max-src-conn-rate']) and $rule['max-src-conn-rate'] <> "") or + (isset($rule['max-src-conn-rates']) and $rule['max-src-conn-rates'] <> ""))) or + isset($rule['sloppy']) or isset($rule['nopfsync']) or $l7_present) { + $aline['flags'] .= "( "; + if (isset($rule['sloppy'])) + $aline['flags'] .= "sloppy "; + if (isset($rule['nopfsync'])) + $aline['flags'] .= "no-sync "; + if (isset($rule['source-track']) and $rule['source-track'] <> "") + $aline['flags'] .= "source-track rule "; + if (isset($rule['max']) and $rule['max'] <> "") + $aline['flags'] .= "max " . $rule['max'] . " "; + if (isset($rule['max-src-nodes']) and $rule['max-src-nodes'] <> "") + $aline['flags'] .= "max-src-nodes " . $rule['max-src-nodes'] . " "; + if ((in_array($rule['protocol'], array("tcp","tcp/udp"))) + and isset($rule['max-src-conn']) + and $rule['max-src-conn'] <> "") + $aline['flags'] .= "max-src-conn " . $rule['max-src-conn'] . " "; + if (isset($rule['max-src-states']) and $rule['max-src-states'] <> "") + $aline['flags'] .= "max-src-states " . $rule['max-src-states'] . " "; + if ((in_array($rule['protocol'], array("tcp","tcp/udp"))) + and isset($rule['statetimeout']) + and $rule['statetimeout'] <> "") + $aline['flags'] .= "tcp.established " . $rule['statetimeout'] . " "; + if ((in_array($rule['protocol'], array("tcp","tcp/udp"))) + and isset($rule['max-src-conn-rate']) + and $rule['max-src-conn-rate'] <> "" + and isset($rule['max-src-conn-rates']) + and $rule['max-src-conn-rates'] <> "") { + $aline['flags'] .= "max-src-conn-rate " . $rule['max-src-conn-rate'] . " "; + $aline['flags'] .= "/" . $rule['max-src-conn-rates'] . ", overload flush global "; + } + + if(!empty($aline['divert'])) + $aline['flags'] .= "max-packets 8 "; + + $aline['flags'] .= " ) "; + } + } + if($rule['defaultqueue'] <> "") { + $aline['queue'] = " queue (".$rule['defaultqueue']; + if($rule['ackqueue'] <> "") + $aline['queue'] .= ",".$rule['ackqueue']; + $aline['queue'] .= ") "; + } + if($rule['dnpipe'] <> "") { + if (!empty($dummynet_name_list[$rule['dnpipe']])) { + if($dummynet_name_list[$rule['dnpipe']][0] == "?") { + $aline['dnpipe'] = " dnqueue( "; + $aline['dnpipe'] .= substr($dummynet_name_list[$rule['dnpipe']],1); + if($rule['pdnpipe'] <> "") + $aline['dnpipe'] .= ",".substr($dummynet_name_list[$rule['pdnpipe']], 1); + } else { + $aline['dnpipe'] = " dnpipe ( " . $dummynet_name_list[$rule['dnpipe']]; + if($rule['pdnpipe'] <> "") + $aline['dnpipe'] .= "," . $dummynet_name_list[$rule['pdnpipe']]; + } + $aline['dnpipe'] .= ") "; + } + } + + /* is a time based rule schedule attached? */ + if(!empty($rule['sched']) && !empty($config['schedules'])) { + $aline['schedlabel'] = ""; + foreach ($config['schedules']['schedule'] as $sched) { + if($sched['name'] == $rule['sched']) { + if(!filter_get_time_based_rule_status($sched)) { + if(!isset($config['system']['schedule_states'])) + mwexec("/sbin/pfctl -y {$sched['schedlabel']}"); + return "# schedule finished - {$rule['descr']}"; + } else if($g['debug']) + log_error("[TDR DEBUG] status true -- rule type '$type'"); + + $aline['schedlabel'] = " schedule \"{$sched['schedlabel']}\" "; + break; + } + } + } + + if (!empty($rule['tracker'])) + $aline['tracker'] = "tracker {$rule['tracker']} "; + + $line = ""; + /* exception(s) to a user rules can go here. */ + /* rules with a gateway or pool should create another rule for routing to vpns */ + if((($aline['route'] <> "") && (trim($aline['type']) == "pass") && strstr($dst, "any")) && (!isset($config['system']['disablenegate']))) { + /* negate VPN/PPTP/PPPoE/Static Route networks for load balancer/gateway rules */ + $negate_networks = " to " . filter_generate_port($rule, "destination"); + $line .= $aline['type'] . $aline['direction'] . $aline['log'] . $aline['quick'] . + $aline['interface'] . $aline['ipprotocol'] . $aline['prot'] . $aline['src'] . $aline['os'] . + $negate_networks . $aline['icmp-type'] . $aline['icmp6-type'] . $aline['tag'] . $aline['tagged'] . + $aline['vlanprio'] . $aline['vlanprioset'] . $aline['dscp'] . $aline['tracker'] . $aline['allowopts'] . $aline['flags'] . + $aline['queue'] . $aline['dnpipe'] . $aline['schedlabel'] . + " label \"NEGATE_ROUTE: Negate policy routing for destination\"\n"; + + } + /* piece together the actual user rule */ + $line .= $aline['type'] . $aline['direction'] . $aline['log'] . $aline['quick'] . $aline['interface'] . + $aline['reply'] . $aline['route'] . $aline['ipprotocol'] . $aline['prot'] . $aline['src'] . $aline['os'] . $aline['dst'] . + $aline['divert'] . $aline['icmp-type'] . $aline['icmp6-type'] . $aline['tag'] . $aline['tagged'] . $aline['dscp'] . $aline['tracker'] . + $aline['vlanprio'] . $aline['vlanprioset'] . $aline['allowopts'] . $aline['flags'] . $aline['queue'] . $aline['dnpipe'] . $aline['schedlabel']; + + unset($aline); + + return $line; +} + +function filter_rules_generate() { + global $config, $g, $FilterIflist, $time_based_rules, $GatewaysList, $tracker; + + $fix_rule_label = 'fix_rule_label'; + $increment_tracker = 'filter_rule_tracker'; + + update_filter_reload_status(gettext("Creating default rules")); + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_rules_generate() being called $mt\n"; + } + + $pptpdcfg = $config['pptpd']; + + $ipfrules = ""; + $ipfrules .= discover_pkg_rules("pfearly"); + + /* relayd */ + $ipfrules .= "anchor \"relayd/*\"\n"; + /* OpenVPN user rules from radius */ + $ipfrules .= "anchor \"openvpn/*\"\n"; + /* IPsec user rules from radius */ + $ipfrules .= "anchor \"ipsec/*\"\n"; + # BEGIN OF firewall rules + /* default block logging? */ + $log = array(); + if(!isset($config['syslog']['nologdefaultblock'])) + $log['block'] = "log"; + if(isset($config['syslog']['nologdefaultpass'])) + $log['pass'] = "log"; + + $saved_tracker = $tracker; + + if(!isset($config['system']['ipv6allow'])) { + $ipfrules .= "# Block all IPv6\n"; + $ipfrules .= "block in {$log['block']} quick inet6 all tracker {$increment_tracker($tracker)} label \"Block all IPv6\"\n"; + $ipfrules .= "block out {$log['block']} quick inet6 all tracker {$increment_tracker($tracker)} label \"Block all IPv6\"\n"; + } + + $saved_tracker += 100; + $tracker = $saved_tracker; + + $ipfrules .= << to any tracker {$increment_tracker($tracker)} label "Block snort2c hosts" +block {$log['block']} quick from any to tracker {$increment_tracker($tracker)} label "Block snort2c hosts" + +EOD; + + $saved_tracker += 100; + $tracker = $saved_tracker; + + $ipfrules .= filter_process_carp_rules($log); + + $saved_tracker += 100; + $tracker = $saved_tracker; + + $ipfrules .= "\n# SSH lockout\n"; + if(is_array($config['system']['ssh']) && !empty($config['system']['ssh']['port'])) { + $ipfrules .= "block in {$log['block']} quick proto tcp from to (self) port "; + $ipfrules .= $config['system']['ssh']['port']; + $ipfrules .= " tracker {$increment_tracker($tracker)} label \"sshlockout\"\n"; + } else { + if($config['system']['ssh']['port'] <> "") + $sshport = $config['system']['ssh']['port']; + else + $sshport = 22; + if($sshport) + $ipfrules .= "block in {$log['block']} quick proto tcp from to (self) port {$sshport} tracker {$increment_tracker($tracker)} label \"sshlockout\"\n"; + } + + $saved_tracker += 50; + $tracker = $saved_tracker; + + $ipfrules .= "\n# webConfigurator lockout\n"; + if(!$config['system']['webgui']['port']) { + if($config['system']['webgui']['protocol'] == "http") + $webConfiguratorlockoutport = "80"; + else + $webConfiguratorlockoutport = "443"; + } else { + $webConfiguratorlockoutport = $config['system']['webgui']['port']; + } + if($webConfiguratorlockoutport) + $ipfrules .= "block in {$log['block']} quick proto tcp from to (self) port {$webConfiguratorlockoutport} tracker {$increment_tracker($tracker)} label \"webConfiguratorlockout\"\n"; + + $saved_tracker += 100; + $tracker = $saved_tracker; + + /* + * Support for allow limiting of TCP connections by establishment rate + * Useful for protecting against sudden outburts, etc. + */ + $ipfrules .= "block in {$log['block']} quick from to any tracker 1000000400 label \"virusprot overload table\"\n"; + + $saved_tracker += 100; + $tracker = $saved_tracker; + + /* if captive portal is enabled, ensure that access to this port + * is allowed on a locked down interface + */ + if(is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpcfg) { + if(!isset($cpcfg['enable'])) + continue; + $cpinterfaces = explode(",", $cpcfg['interface']); + $cpiflist = array(); + $cpiplist = array(); + foreach ($cpinterfaces as $cpifgrp) { + if(!isset($FilterIflist[$cpifgrp])) + continue; + $tmpif = get_real_interface($cpifgrp); + if(!empty($tmpif)) { + $cpiflist[] = "{$tmpif}"; + $cpipm = get_interface_ip($cpifgrp); + if(is_ipaddr($cpipm)) { + $carpif = link_ip_to_carp_interface($cpipm); + if (!empty($carpif)) { + $cpiflist[] = $carpif; + $carpsif = explode(" ", $carpif); + foreach ($carpsif as $cpcarp) { + $carpip = find_interface_ip($cpcarp); + if (is_ipaddr($carpip)) + $cpiplist[] = $carpip; + } + } + $cpiplist[] = $cpipm; + } + } + } + if (count($cpiplist) > 0 && count($cpiflist) > 0) { + $cpinterface = implode(" ", $cpiflist); + $cpaddresses = implode(" ", $cpiplist); + $listenporthttps = $cpcfg['listenporthttps'] ? $cpcfg['listenporthttps'] : ($cpcfg['zoneid'] + 1); + $listenporthttp = $cpcfg['listenporthttp'] ? $cpcfg['listenporthttp'] : $cpcfg['zoneid']; + $portalias = $listenporthttps; + $portalias .= " {$listenporthttp}"; + $ipfrules .= "pass in {$log['pass']} quick on { {$cpinterface} } proto tcp from any to { {$cpaddresses} } port { {$portalias} } tracker {$increment_tracker($tracker)} keep state(sloppy)\n"; + $ipfrules .= "pass out {$log['pass']} quick on { {$cpinterface} } proto tcp from any to any flags any tracker {$increment_tracker($tracker)} keep state(sloppy)\n"; + } + } + } + + $bogontableinstalled = 0; + foreach ($FilterIflist as $on => $oc) { + /* XXX: Not static but give a step of 1000 for each interface to at least be able to match rules. */ + $saved_tracker += 1000; + $tracker = $saved_tracker; + + /* block bogon networks */ + /* http://www.cymru.com/Documents/bogon-bn-nonagg.txt */ + /* file is automatically in cron every 3000 minutes */ + if(!isset($config['syslog']['nologbogons'])) + $bogonlog = "log"; + else + $bogonlog = ""; + + if(isset($config['interfaces'][$on]['blockbogons'])) { + $ipfrules .= << to any tracker {$increment_tracker($tracker)} label "{$fix_rule_label("block bogon IPv4 networks from {$oc['descr']}")}" + +EOD; + + if(isset($config['system']['ipv6allow'])) { + $ipfrules .= << to any tracker {$increment_tracker($tracker)} label "{$fix_rule_label("block bogon IPv6 networks from {$oc['descr']}")}" + +EOD; + } + } + + + $saved_tracker += 10; + $tracker = $saved_tracker; + + if(isset($config['system']['ipv6allow']) && ($oc['type6'] == "slaac" || $oc['type6'] == "dhcp6")) { + $ipfrules .= << "") { + $ipfrules .= << $ifcfg) { + if(isset($ifcfg['virtual'])) + continue; + + $gw = get_interface_gateway($ifdescr); + if (is_ipaddrv4($gw) && is_ipaddrv4($ifcfg['ip'])) { + $ipfrules .= "pass out {$log['pass']} route-to ( {$ifcfg['if']} {$gw} ) from {$ifcfg['ip']} to !{$ifcfg['sa']}/{$ifcfg['sn']} tracker {$increment_tracker($tracker)} keep state allow-opts label \"let out anything from firewall host itself\"\n"; + if (is_array($ifcfg['vips'])) { + foreach ($ifcfg['vips'] as $vip) + if (ip_in_subnet($vip['ip'], "{$ifcfg['sa']}/{$ifcfg['sn']}")) + $ipfrules .= "pass out {$log['pass']} route-to ( {$ifcfg['if']} {$gw} ) from {$vip['ip']} to !{$ifcfg['sa']}/{$ifcfg['sn']} tracker {$increment_tracker($tracker)} keep state allow-opts label \"let out anything from firewall host itself\"\n"; + else + $ipfrules .= "pass out {$log['pass']} route-to ( {$ifcfg['if']} {$gw} ) from {$vip['ip']} to !" . gen_subnet($vip['ip'], $vip['sn']) . "/{$vip['sn']} tracker {$increment_tracker($tracker)} keep state allow-opts label \"let out anything from firewall host itself\"\n"; + } + } + + $gwv6 = get_interface_gateway_v6($ifdescr); + $stf = get_real_interface($ifdescr, "inet6"); + $pdlen = 64 - calculate_ipv6_delegation_length($ifdescr); + if (is_ipaddrv6($gwv6) && is_ipaddrv6($ifcfg['ipv6'])) { + $ipfrules .= "pass out {$log['pass']} route-to ( {$stf} {$gwv6} ) inet6 from {$ifcfg['ipv6']} to !{$ifcfg['ipv6']}/{$pdlen} tracker {$increment_tracker($tracker)} keep state allow-opts label \"let out anything from firewall host itself\"\n"; + if (is_array($ifcfg['vips6'])) { + foreach ($ifcfg['vips6'] as $vip) + $ipfrules .= "pass out {$log['pass']} route-to ( {$stf} {$gwv6} ) inet6 from {$vip['ip']} to !{$vip['ip']}/{$pdlen} tracker {$increment_tracker($tracker)} keep state allow-opts label \"let out anything from firewall host itself\"\n"; + } + } + } + + + $saved_tracker += 300; + $tracker = $saved_tracker; + /* add ipsec interfaces */ + if(isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) + $ipfrules .= "pass out {$log['pass']} on \$IPsec all tracker {$increment_tracker($tracker)} tracker {$increment_tracker($tracker)} keep state label \"IPsec internal host to host\"\n"; + + $saved_tracker += 10; + $tracker = $saved_tracker; + if(is_array($config['system']['webgui']) && !isset($config['system']['webgui']['noantilockout'])) { + $alports = filter_get_antilockout_ports(); + + if(count($config['interfaces']) > 1 && !empty($FilterIflist['lan']['if'])) { + /* if antilockout is enabled, LAN exists and has + * an IP and subnet mask assigned + */ + $lanif = $FilterIflist['lan']['if']; + $ipfrules .= << + + ScheduleMultipleTime + main descr + + + + +*/ +function filter_get_time_based_rule_status($schedule) { + + /* no schedule? rule should be installed */ + if (empty($schedule)) + return true; + /* + * iterate through time blocks and determine + * if the rule should be installed or not. + */ + foreach($schedule['timerange'] as $timeday) { + if (empty($timeday['month'])) + $monthstatus = true; + else + $monthstatus = filter_tdr_month($timeday['month']); + if (empty($timeday['day'])) + $daystatus = true; + else + $daystatus = filter_tdr_day($timeday['day']); + if (empty($timeday['hour'])) + $hourstatus = true; + else + $hourstatus = filter_tdr_hour($timeday['hour']); + if (empty($timeday['position'])) + $positionstatus = true; + else + $positionstatus = filter_tdr_position($timeday['position']); + + if ($monthstatus == true && $daystatus == true && $positionstatus == true && $hourstatus == true) + return true; + } + + return false; +} + +function filter_tdr_day($schedule) { + global $g; + + if($g['debug']) + log_error("[TDR DEBUG] filter_tdr_day($schedule)"); + + /* + * Calculate day of month. + * IE: 29th of may + */ + $date = date("d"); + $defined_days = explode(",", $schedule); + foreach($defined_days as $dd) { + if ($date == $dd) + return true; + } + return false; +} +function filter_tdr_hour($schedule) { + global $g; + + /* $schedule should be a string such as 16:00-19:00 */ + $tmp = explode("-", $schedule); + $starting_time = strtotime($tmp[0]); + $ending_time = strtotime($tmp[1]); + $now = strtotime("now"); + if($g['debug']) + log_error("[TDR DEBUG] S: $starting_time E: $ending_time N: $now"); + if($now >= $starting_time and $now < $ending_time) + return true; + return false; +} + +function filter_tdr_position($schedule) { + global $g; + + /* + * Calculate position, ie: day of week. + * Sunday = 7, Monday = 1, Tuesday = 2 + * Weds = 3, Thursday = 4, Friday = 5, + * Saturday = 6 + * ... + */ + $weekday = date("w"); + if($g['debug']) + log_error("[TDR DEBUG] filter_tdr_position($schedule) $weekday"); + if($weekday == 0) + $weekday = 7; + $schedule_days = explode(",", $schedule); + foreach($schedule_days as $day) { + if($day == $weekday) + return true; + } + return false; +} + +function filter_tdr_month($schedule) { + global $g; + + /* + * Calculate month + */ + $todays_month = date("n"); + $months = explode(",", $schedule); + if($g['debug']) + log_error("[TDR DEBUG] filter_tdr_month($schedule)"); + foreach($months as $month) { + if($month == $todays_month) + return true; + } + return false; +} + +function filter_setup_logging_interfaces() { + global $config, $FilterIflist; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_setup_logging_interfaces() being called $mt\n"; + } + $rules = ""; + if (isset($FilterIflist['lan'])) + $rules .= "set loginterface {$FilterIflist['lan']['if']}\n"; + else if (isset($FilterIflist['wan'])) + $rules .= "set loginterface {$FilterIflist['wan']['if']}\n"; + + return $rules; +} + +function filter_process_carp_rules($log) { + global $g, $config, $tracker; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_process_carp_rules() being called $mt\n"; + } + + $increment_tracker = 'filter_rule_tracker'; + $lines = ""; + /* return if there are no carp configured items */ + if (!empty($config['hasync']) or !empty($config['virtualip']['vip'])) { + $lines .= "block in {$log['block']} quick proto carp from (self) to any tracker {$increment_tracker($tracker)}\n"; + $lines .= "pass {$log['pass']} quick proto carp tracker {$increment_tracker($tracker)}\n"; + } + return $lines; +} + +/* Generate IPsec Filter Items */ +function filter_generate_ipsec_rules($log = array()) { + global $config, $g, $FilterIflist, $tracker; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_generate_ipsec_rules() being called $mt\n"; + } + + if (isset($config['system']['disablevpnrules'])) + return "\n# VPN Rules not added disabled in System->Advanced.\n"; + + $increment_tracker = 'filter_rule_tracker'; + + $ipfrules = "\n# VPN Rules\n"; + /* Is IP Compression enabled? */ + if(isset($config['ipsec']['ipcomp'])) + set_single_sysctl("net.inet.ipcomp.ipcomp_enable" , "1"); + else + set_single_sysctl("net.inet.ipcomp.ipcomp_enable" , "0"); + + if(isset($config['ipsec']['enable']) && + is_array($config['ipsec']['phase1'])) { + /* step through all phase1 entries */ + foreach ($config['ipsec']['phase1'] as $ph1ent) { + $tracker += 10; + + if(isset ($ph1ent['disabled'])) + continue; + /* determine local and remote peer addresses */ + if(!isset($ph1ent['mobile'])) { + if (!function_exists('ipsec_get_phase1_dst')) + require_once("ipsec.inc"); + $rgip = ipsec_get_phase1_dst($ph1ent); + if(!$rgip) { + $ipfrules .= "# ERROR! Unable to determine remote IPsec peer address for {$ph1ent['remote-gateway']}\n"; + continue; + } + } else + $rgip = " any "; + /* Determine best description */ + if($ph1ent['descr']) + $descr = $ph1ent['descr']; + else + $descr = $rgip; + /* + * Step through all phase2 entries and determine + * which protocols are in use with this peer + */ + $prot_used_esp = false; + $prot_used_ah = false; + if(is_array($config['ipsec']['phase2'])) { + foreach ($config['ipsec']['phase2'] as $ph2ent) { + /* only evaluate ph2's bound to our ph1 */ + if($ph2ent['ikeid'] != $ph1ent['ikeid']) + continue; + if($ph2ent['protocol'] == 'esp') + $prot_used_esp = true; + if($ph2ent['protocol'] == 'ah') + $prot_used_ah = true; + } + } + + if (strstr($ph1ent['interface'], "_vip")) + list($parentinterface, $vhid) = explode("_vhid", $ph1ent['interface']); + else + $parentinterface = $ph1ent['interface']; + if (empty($FilterIflist[$parentinterface]['descr'])) { + $ipfrules .= "# Could not locate interface for IPsec: {$descr}\n"; + continue; + } + + unset($gateway); + /* add endpoint routes to correct gateway on interface */ + if((is_ipaddrv4($rgip)) && (interface_has_gateway($parentinterface))) { + $gateway = get_interface_gateway($parentinterface); + $interface = $FilterIflist[$parentinterface]['if']; + + $route_to = " route-to ( $interface $gateway ) "; + $reply_to = " reply-to ( $interface $gateway ) "; + + } + if((is_ipaddrv6($rgip)) && (interface_has_gatewayv6($parentinterface))) { + $gateway = get_interface_gateway_v6($parentinterface); + $interface = $FilterIflist[$parentinterface]['if']; + + $route_to = " route-to ( $interface $gateway ) "; + $reply_to = " reply-to ( $interface $gateway ) "; + } + + /* Just in case */ + if((!is_ipaddr($gateway) || empty($interface))) { + $route_to = " "; + $reply_to = " "; + } + + /* Add rules to allow IKE to pass */ + $shorttunneldescr = substr($descr, 0, 35); + $ipfrules .= << 0) { + $errorrules = sprintf(gettext("There was an error while parsing the package filter rules for %s."), $pkg_inc) . "\n"; + log_error($errorrules); + file_put_contents("{$g['tmp_path']}/rules.packages.{$pkg}", "#{$errorrules}\n{$tmprules}\n"); + continue; + } + $rules .= $tmprules; + } + } + return $rules; +} + +function filter_get_antilockout_ports($wantarray = false) { + global $config; + + $lockoutports = array(); + $guiport = ($config['system']['webgui']['protocol'] == "https") ? "443" : "80"; + $guiport = empty($config['system']['webgui']['port']) ? $guiport : $config['system']['webgui']['port']; + $lockoutports[] = $guiport; + + if (($config['system']['webgui']['protocol'] == "https") && !isset($config['system']['webgui']['disablehttpredirect']) && ($guiport != "80")) + $lockoutports[] = "80"; + + if (isset($config['system']['enablesshd'])) + $lockoutports[] = empty($config['system']['ssh']['port']) ? "22" : $config['system']['ssh']['port']; + + if ($wantarray) + return $lockoutports; + else + return implode(" ", $lockoutports); + +} + +?> diff --git a/etc/inc/filter_log.inc b/etc/inc/filter_log.inc new file mode 100644 index 000000000..b6d2eb2a2 --- /dev/null +++ b/etc/inc/filter_log.inc @@ -0,0 +1,415 @@ +@.org + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/sbin/fifolog_reader /usr/bin/tail /usr/local/sbin/clog + pfSense_MODULE: filter +*/ + +require 'config.inc'; + +global $buffer_rules_rdr, $buffer_rules_normal; +$buffer_rules_rdr = array(); +$buffer_rules_normal = array(); + +/* format filter logs */ +function conv_log_filter($logfile, $nentries, $tail = 50, $filtertext = "", $filterinterface = null) { + global $config, $g; + + /* Make sure this is a number before using it in a system call */ + if (!(is_numeric($tail))) + return; + + if ($filtertext) + $tail = 5000; + + /* Always do a reverse tail, to be sure we're grabbing the 'end' of the log. */ + $logarr = ""; + + if(isset($config['system']['usefifolog'])) + exec("/usr/sbin/fifolog_reader " . escapeshellarg($logfile) . " | /usr/bin/grep 'filterlog:' | /usr/bin/tail -r -n {$tail}", $logarr); + else + exec("/usr/local/sbin/clog " . escapeshellarg($logfile) . " | grep -v \"CLOG\" | grep -v \"\033\" | /usr/bin/grep 'filterlog:' | /usr/bin/tail -r -n {$tail}", $logarr); + + $filterlog = array(); + $counter = 0; + + $filterinterface = strtoupper($filterinterface); + foreach ($logarr as $logent) { + if($counter >= $nentries) + break; + + $flent = parse_filter_line($logent); + if (!$filterinterface || ($filterinterface == $flent['interface'])) + { + if ( ( ($flent != "") && (!is_array($filtertext)) && (match_filter_line ($flent, $filtertext))) || + ( ($flent != "") && ( is_array($filtertext)) && (match_filter_field($flent, $filtertext)) ) ) { + $counter++; + $filterlog[] = $flent; + } + } + } + /* Since the lines are in reverse order, flip them around if needed based on the user's preference */ + return isset($config['syslog']['reverse']) ? $filterlog : array_reverse($filterlog); +} + +function escape_filter_regex($filtertext) { + /* If the caller (user) has not already put a backslash before a slash, to escape it in the regex, */ + /* then this will do it. Take out any "\/" already there, then turn all ordinary "/" into "\/". */ + return str_replace('/', '\/', str_replace('\/', '/', $filtertext)); +} + +function match_filter_line($flent, $filtertext = "") { + if (!$filtertext) + return true; + $filtertext = escape_filter_regex(str_replace(' ', '\s+', $filtertext)); + return @preg_match("/{$filtertext}/i", implode(" ", array_values($flent))); +} + +function match_filter_field($flent, $fields) { + foreach ($fields as $key => $field) { + if ($field == "All") + continue; + if ((strpos($field, '!') === 0)) { + $field = substr($field, 1); + if (strtolower($key) == 'act') { + if (in_arrayi($flent[$key], explode(" ", $field))) + return false; + } else { + $field_regex = escape_filter_regex($field); + if (@preg_match("/{$field_regex}/i", $flent[$key])) + return false; + } + } else { + if (strtolower($key) == 'act') { + if (!in_arrayi($flent[$key], explode(" ", $field))) + return false; + } else { + $field_regex = escape_filter_regex($field); + if (!@preg_match("/{$field_regex}/i", $flent[$key])) + return false; + } + } + } + return true; +} + +// Case Insensitive in_array function +function in_arrayi($needle, $haystack) { + return in_array(strtolower($needle), array_map('strtolower', $haystack)); +} + +function parse_filter_line($line) { + global $config, $g; + + $flent = array(); + $log_split = ""; + + if (!preg_match("/(.*)\s(.*)\sfilterlog:\s(.*)$/", $line, $log_split)) + return ""; + + list($all, $flent['time'], $host, $rule) = $log_split; + + $rule_data = explode(",", $rule); + $field = 0; + + $flent['rulenum'] = $rule_data[$field++]; + $flent['subrulenum'] = $rule_data[$field++]; + $flent['anchor'] = $rule_data[$field++]; + $flent['tracker'] = $rule_data[$field++]; + $flent['realint'] = $rule_data[$field++]; + $flent['interface'] = convert_real_interface_to_friendly_descr($flent['realint']); + $flent['reason'] = $rule_data[$field++]; + $flent['act'] = $rule_data[$field++]; + $flent['direction'] = $rule_data[$field++]; + $flent['version'] = $rule_data[$field++]; + + if ($flent['version'] == '4' || $flent['version'] == '6') { + if ($flent['version'] == '4') { + $flent['tos'] = $rule_data[$field++]; + $flent['ecn'] = $rule_data[$field++]; + $flent['ttl'] = $rule_data[$field++]; + $flent['id'] = $rule_data[$field++]; + $flent['offset'] = $rule_data[$field++]; + $flent['flags'] = $rule_data[$field++]; + $flent['protoid'] = $rule_data[$field++]; + $flent['proto'] = strtoupper($rule_data[$field++]); + } else { + $flent['class'] = $rule_data[$field++]; + $flent['flowlabel'] = $rule_data[$field++]; + $flent['hlim'] = $rule_data[$field++]; + $flent['proto'] = $rule_data[$field++]; + $flent['protoid'] = $rule_data[$field++]; + } + + $flent['length'] = $rule_data[$field++]; + $flent['srcip'] = $rule_data[$field++]; + $flent['dstip'] = $rule_data[$field++]; + + if ($flent['protoid'] == '6' || $flent['protoid'] == '17') { // TCP or UDP + $flent['srcport'] = $rule_data[$field++]; + $flent['dstport'] = $rule_data[$field++]; + + $flent['src'] = $flent['srcip'] . ':' . $flent['srcport']; + $flent['dst'] = $flent['dstip'] . ':' . $flent['dstport']; + + $flent['datalen'] = $rule_data[$field++]; + if ($flent['protoid'] == '6') { // TCP + $flent['tcpflags'] = $rule_data[$field++]; + $flent['seq'] = $rule_data[$field++]; + $flent['ack'] = $rule_data[$field++]; + $flent['window'] = $rule_data[$field++]; + $flent['urg'] = $rule_data[$field++]; + $flent['options'] = explode(";",$rule_data[$field++]); + } + } else if ($flent['protoid'] == '1') { // ICMP + $flent['src'] = $flent['srcip']; + $flent['dst'] = $flent['dstip']; + + $flent['icmp_type'] = $rule_data[$field++]; + + switch ($flent['icmp_type']) { + case "request": + case "reply": + $flent['icmp_id'] = $rule_data[$field++]; + $flent['icmp_seq'] = $rule_data[$field++]; + break; + case "unreachproto": + $flent['icmp_dstip'] = $rule_data[$field++]; + $flent['icmp_protoid'] = $rule_data[$field++]; + break; + case "unreachport": + $flent['icmp_dstip'] = $rule_data[$field++]; + $flent['icmp_protoid'] = $rule_data[$field++]; + $flent['icmp_port'] = $rule_data[$field++]; + break; + case "unreach": + case "timexceed": + case "paramprob": + case "redirect": + case "maskreply": + $flent['icmp_descr'] = $rule_data[$field++]; + break; + case "needfrag": + $flent['icmp_dstip'] = $rule_data[$field++]; + $flent['icmp_mtu'] = $rule_data[$field++]; + break; + case "tstamp": + $flent['icmp_id'] = $rule_data[$field++]; + $flent['icmp_seq'] = $rule_data[$field++]; + break; + case "tstampreply": + $flent['icmp_id'] = $rule_data[$field++]; + $flent['icmp_seq'] = $rule_data[$field++]; + $flent['icmp_otime'] = $rule_data[$field++]; + $flent['icmp_rtime'] = $rule_data[$field++]; + $flent['icmp_ttime'] = $rule_data[$field++]; + break; + default : + $flent['icmp_descr'] = $rule_data[$field++]; + break; + } + + } else if ($flent['protoid'] == '112') { // CARP + $flent['type'] = $rule_data[$field++]; + $flent['ttl'] = $rule_data[$field++]; + $flent['vhid'] = $rule_data[$field++]; + $flent['version'] = $rule_data[$field++]; + $flent['advskew'] = $rule_data[$field++]; + $flent['advbase'] = $rule_data[$field++]; + } + } else { + if($g['debug']) + log_error(sprintf(gettext("There was a error parsing rule number: %s. Please report to mailing list or forum."), $flent['rulenum'])); + return ""; + } + + /* If there is a src, a dst, and a time, then the line should be usable/good */ + if (!((trim($flent['src']) == "") || (trim($flent['dst']) == "") || (trim($flent['time']) == ""))) { + return $flent; + } else { + if($g['debug']) { + log_error(sprintf(gettext("There was a error parsing rule: %s. Please report to mailing list or forum."), $errline)); + } + return ""; + } +} + +function get_port_with_service($port, $proto) { + if (!$port) + return ''; + + $service = getservbyport($port, $proto); + $portstr = ""; + if ($service) { + $portstr = sprintf('' . htmlspecialchars($port) . '', $port, $proto, $service); + } else { + $portstr = htmlspecialchars($port); + } + return ':' . $portstr; +} + +function find_rule_by_number($rulenum, $trackernum, $type="block") { + global $g; + + /* Passing arbitrary input to grep could be a Very Bad Thing(tm) */ + if (!is_numeric($rulenum) || !is_numeric($trackernum) || !in_array($type, array('pass', 'block', 'match', 'rdr'))) + return; + + if ($trackernum == "0") + $lookup_pattern = "^@{$rulenum}\([0-9]+\)[[:space:]]{$type}[[:space:]].*[[:space:]]log[[:space:]]"; + else + $lookup_pattern = "^@[0-9]+\({$trackernum}\)[[:space:]]{$type}[[:space:]].*[[:space:]]log[[:space:]]"; + + /* At the moment, miniupnpd is the only thing I know of that + generates logging rdr rules */ + unset($buffer); + if ($type == "rdr") + $_gb = exec("/sbin/pfctl -vvPsn -a \"miniupnpd\" | /usr/bin/egrep " . escapeshellarg("^@{$rulenum}"), $buffer); + else { + if (file_exists("{$g['tmp_path']}/rules.debug")) + $_gb = exec("/sbin/pfctl -vvPnf {$g['tmp_path']}/rules.debug 2>/dev/null | /usr/bin/egrep " . escapeshellarg($lookup_pattern), $buffer); + else + $_gb = exec("/sbin/pfctl -vvPsr | /usr/bin/egrep " . escapeshellarg($lookup_pattern), $buffer); + } + if (is_array($buffer)) + return $buffer[0]; + + return ""; +} + +function buffer_rules_load() { + global $g, $buffer_rules_rdr, $buffer_rules_normal; + unset($buffer, $buffer_rules_rdr, $buffer_rules_normal); + /* Redeclare globals after unset to work around PHP */ + global $buffer_rules_rdr, $buffer_rules_normal; + $buffer_rules_rdr = array(); + $buffer_rules_normal = array(); + + $_gb = exec("/sbin/pfctl -vvPsn -a \"miniupnpd\" | grep '^@'", $buffer); + if (is_array($buffer)) { + foreach ($buffer as $line) { + list($key, $value) = explode (" ", $line, 2); + $buffer_rules_rdr[$key] = $value; + } + } + unset($buffer, $_gb); + if (file_exists("{$g['tmp_path']}/rules.debug")) + $_gb = exec("/sbin/pfctl -vvPnf {$g['tmp_path']}/rules.debug 2>/dev/null | /usr/bin/egrep '^@[0-9]+\([0-9]+\)[[:space:]].*[[:space:]]log[[:space:]]' | /usr/bin/egrep -v '^@[0-9]+\([0-9]+\)[[:space:]](nat|rdr|binat|no|scrub)'", $buffer); + else + $_gb = exec("/sbin/pfctl -vvPsr | /usr/bin/egrep '^@[0-9]+\([0-9]+\)[[:space:]].*[[:space:]]log[[:space:]]'", $buffer); + + if (is_array($buffer)) { + foreach ($buffer as $line) { + list($key, $value) = explode (" ", $line, 2); + # pfctl rule number output with tracker number: @dd(dddddddddd) + $matches = array(); + if (preg_match('/\@(?P\d+)\((?\d+)\)/', $key, $matches) == 1) { + if ($matches['trackernum'] > 0) + $key = $matches['trackernum']; + else + $key = "@{$matches['rulenum']}"; + } + $buffer_rules_normal[$key] = $value; + } + } + unset($_gb, $buffer); +} + +function buffer_rules_clear() { + unset($GLOBALS['buffer_rules_normal']); + unset($GLOBALS['buffer_rules_rdr']); +} + +function find_rule_by_number_buffer($rulenum, $trackernum, $type){ + global $g, $buffer_rules_rdr, $buffer_rules_normal; + + if ($trackernum == "0") + $lookup_key = "@{$rulenum}"; + else + $lookup_key = $trackernum; + + if ($type == "rdr") { + $ruleString = $buffer_rules_rdr[$lookup_key]; + //TODO: get the correct 'description' part of a RDR log line. currently just first 30 characters.. + $rulename = substr($ruleString,0,30); + } else { + $ruleString = $buffer_rules_normal[$lookup_key]; + list(,$rulename,) = explode("\"",$ruleString); + $rulename = str_replace("USER_RULE: ",'USER_RULE ',$rulename); + } + return "{$rulename} ({$lookup_key})"; +} + +function find_action_image($action) { + global $g; + if ((strstr(strtolower($action), "p")) || (strtolower($action) == "rdr")) + return "/themes/{$g['theme']}/images/icons/icon_pass.gif"; + else if(strstr(strtolower($action), "r")) + return "/themes/{$g['theme']}/images/icons/icon_reject.gif"; + else + return "/themes/{$g['theme']}/images/icons/icon_block.gif"; +} + +/* AJAX specific handlers */ +function handle_ajax($nentries, $tail = 50) { + global $config; + if($_GET['lastsawtime'] or $_POST['lastsawtime']) { + global $filter_logfile,$filterent; + if($_GET['lastsawtime']) + $lastsawtime = $_GET['lastsawtime']; + if($_POST['lastsawtime']) + $lastsawtime = $_POST['lastsawtime']; + /* compare lastsawrule's time stamp to filter logs. + * afterwards return the newer records so that client + * can update AJAX interface screen. + */ + $new_rules = ""; + $filterlog = conv_log_filter($filter_logfile, $nentries, $tail); + /* We need this to always be in forward order for the AJAX update to work properly */ + $filterlog = isset($config['syslog']['reverse']) ? array_reverse($filterlog) : $filterlog; + foreach($filterlog as $log_row) { + $row_time = strtotime($log_row['time']); + $img = "{$log_row['act']}"; + if($row_time > $lastsawtime) { + if ($log_row['proto'] == "TCP") + $log_row['proto'] .= ":{$log_row['tcpflags']}"; + + $img = "{$img}"; + $new_rules .= "{$img}||{$log_row['time']}||{$log_row['interface']}||{$log_row['srcip']}||{$log_row['dst']}||{$log_row['proto']}||" . time() . "||\n"; + } + } + echo $new_rules; + exit; + } +} + +?> diff --git a/etc/inc/functions.inc b/etc/inc/functions.inc new file mode 100644 index 000000000..a89aeff4a --- /dev/null +++ b/etc/inc/functions.inc @@ -0,0 +1,151 @@ +. + 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. + + pfSense_MODULE: utils + +*/ + +/* BEGIN compatibility goo with HEAD */ +if(!function_exists("gettext")) { + function gettext($text) { + return $text; + } +} + +if(!function_exists("pfSenseHeader")) { + /****f* pfsense-utils/pfSenseHeader + * NAME + * pfSenseHeader + * INPUTS + * none + * RESULT + * Javascript header change or browser Location: + ******/ + function pfSenseHeader($text) { + global $_SERVER; + if (isAjax()) { + if ($_SERVER['HTTPS'] == "on") + $protocol = "https"; + else + $protocol = "http"; + + $port = ":{$_SERVER['SERVER_PORT']}"; + if ($_SERVER['SERVER_PORT'] == "80" && $protocol == "http") + $port = ""; + if ($_SERVER['SERVER_PORT'] == "443" && $protocol == "https") + $port = ""; + $complete_url = "{$protocol}://{$_SERVER['SERVER_NAME']}{$port}/{$text}"; + echo "\ndocument.location.href = '{$complete_url}';\n"; + } else { + header("Location: $text"); + } + } +} +/* END compatibility goo with HEAD */ + +/*fetch menu notices function*/ +if(!function_exists("get_menu_messages")) { + function get_menu_messages(){ + global $g,$config; + if (are_notices_pending()) { + $notices = get_notices(); + $requests=array(); + + ## Get Query Arguments from URL ### + foreach ($_REQUEST as $key => $value) { + if ($key != "PHPSESSID") + $requests[] = $key.'='.$value; + } + if(is_array($requests)) + $request_string = implode("&", $requests); + + if(is_array($notices)) { + $notice_msgs = ""; + $alert_style="style=\'color:#ffffff; filter:Glow(color=#ff0000, strength=12);\' "; + $notice = "".gettext("Acknowledge All Notices").""; + $alert_link="title=\'".gettext("Click to Acknowledge")."\' {$alert_style}"; + $domtt_width=500; + foreach ($notices as $key => $value) { + $date = date("m-d-y H:i:s", $key); + $noticemsg = ($value['notice'] != "" ? $value['notice'] : $value['id']); + $noticemsg = preg_replace("/(\"|\'|\n|<.?\w+>)/i","",$noticemsg); + if ((strlen($noticemsg)* 8) > $domtt_width) + $domtt_width=(strlen($noticemsg) *8); + if ((strlen($noticemsg)* 8) > 900) + $domtt_width= 900; + $alert_action ="onclick=notice_action(\'acknowledge\',\'{$key}\');domTT_close(this);jQuery(this).parent().parent().remove();"; + $notice_msgs .= ""; + } + $notice_msgs .="
{$date}[ ".htmlspecialchars($noticemsg)."]
"; + + $domtt= "onclick=\"domTT_activate(this, event, 'caption', '{$notice}','content', '
{$notice_msgs}', 'trail', false, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle','width','{$domtt_width}','y',5,'type', 'sticky');\""; + $menu_messages="
\n"; + if(count($notices)==1) + $msg= sprintf("%1$02d",count($notices))." ".gettext("unread notice"); + else + $msg= sprintf("%1$02d",count($notices))." ".gettext("unread notices"); + $menu_messages.="\n"; + $menu_messages.="
\n"; + } + } + else { + $menu_messages='
'; + $menu_messages.=$config['system']['hostname'] . "." . $config['system']['domain']; + $menu_messages.='
'; + } + return ($menu_messages); + } +} + +if(!function_exists("dom_title")) { + function dom_title($title_msg,$width=NULL){ + $width=preg_replace("/\D+/","",$width); + if (!empty($width)){ + $width=",'width',$width"; + } + if (!empty($title_msg)){ + $title_msg=preg_replace("/\s+/"," ",$title_msg); + $title_msg=preg_replace("/'/","\'",$title_msg); + return "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '{$title_msg}', 'trail', true, 'delay', 250, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle' $width);\""; + } + } + } +/* include all configuration functions */ +require_once("interfaces.inc"); +require_once("gwlb.inc"); +require_once("services.inc"); +require_once("pfsense-utils.inc"); +require_once("certs.inc"); +require_once("system.inc"); +require_once("vslb.inc"); + +?> diff --git a/etc/inc/globals.inc b/etc/inc/globals.inc new file mode 100644 index 000000000..59cf61577 --- /dev/null +++ b/etc/inc/globals.inc @@ -0,0 +1,164 @@ +. + 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. + + pfSense_MODULE: utils + +*/ + +global $g; +$g = array( + "base_packages" => "siproxd", + "event_address" => "unix:///var/run/check_reload_status", + "factory_shipped_username" => "admin", + "factory_shipped_password" => "pfsense", + "upload_path" => "/root", + "dhcpd_chroot_path" => "/var/dhcpd", + "unbound_chroot_path" => "/var/unbound", + "varrun_path" => "/var/run", + "varetc_path" => "/var/etc", + "vardb_path" => "/var/db", + "varlog_path" => "/var/log", + "etc_path" => "/etc", + "tmp_path" => "/tmp", + "conf_path" => "/conf", + "ftmp_path" => "/ftmp", + "conf_default_path" => "/conf.default", + "cf_path" => "/cf", + "cf_conf_path" => "/cf/conf", + "www_path" => "/usr/local/www", + "xml_rootobj" => "pfsense", + "admin_group" => "admins", + "product_name" => "pfSense", + "product_copyright" => "Electric Sheep Fencing LLC", + "product_copyright_url" => "http://www.electricsheepfencing.com", + "product_copyright_years" => "2004 - ".date("Y"), + "product_website" => "www.pfsense.org", + "product_website_footer" => "https://www.pfsense.org/?gui22", + "product_email" => "coreteam@pfsense.org", + "hideplatform" => false, + "hidedownloadbackup" => false, + "hidebackupbeforeupgrade" => false, + "disablethemeselection" => false, + "disablehelpmenu" => false, + "disablehelpicon" => false, + "disablecrashreporter" => false, + "crashreporterurl" => "https://crashreporter.pfsense.org/crash_reporter.php", + "debug" => false, + "latest_config" => "11.1", + "nopkg_platforms" => array("cdrom"), + "minimum_ram_warning" => "101", + "minimum_ram_warning_text" => "128 MB", + "wan_interface_name" => "wan", + "nopccard_platforms" => array("wrap", "net48xx"), + "xmlrpcbaseurl" => "https://packages.pfsense.org", + "captiveportal_path" => "/usr/local/captiveportal", + "captiveportal_element_path" => "/var/db/cpelements", + "captiveportal_element_sizelimit" => 1048576, + "xmlrpcpath" => "/xmlrpc.php", + "embeddedbootupslice" => "/dev/ad0a", + "services_dhcp_server_enable" => true, + "wireless_regex" => "/^(ndis|wi|ath|an|ral|ural|iwi|wlan|rum|run|bwn|zyd|mwl|bwi|ipw|iwn|malo|uath|upgt|urtw|wpi)/", + "help_base_url" => "/help.php" +); + +/* IP TOS flags */ +$iptos = array("lowdelay", "throughput", "reliability"); + +/* TCP flags */ +$tcpflags = array("syn", "ack", "fin", "rst", "psh", "urg", "ece", "cwr"); + +if(file_exists("/etc/platform")) { + $arch = php_uname("m"); + /* Do not remove this, it is not needed for the snapshots URL but is needed later for the -RELEASE/stable URLs */ + //$arch = ($arch == "i386") ? "" : '/' . $arch; + + /* Full installs and NanoBSD use the same update directory and manifest in 2.x */ + $g['update_url']="https://snapshots.pfsense.org/FreeBSD_releng/10.1/{$arch}/pfSense_HEAD/.updaters/"; + $g['update_manifest']="https://updates.pfSense.org/manifest"; + + $g['platform'] = trim(file_get_contents("/etc/platform")); + if($g['platform'] == "nanobsd") { + $g['firmware_update_text']="pfSense-*.img.gz"; + $g['hidedownloadbackup'] = true; + $g['hidebackupbeforeupgrade'] = true; + + } else { + $g['firmware_update_text']="pfSense-*.tgz"; + } +} + +/* Default sysctls */ +$sysctls = array("net.inet.ip.portrange.first" => "1024", + "net.inet.tcp.blackhole" => "2", + "net.inet.udp.blackhole" => "1", + "net.inet.ip.random_id" => "1", + "net.inet.tcp.drop_synfin" => "1", + "net.inet.ip.redirect" => "1", + "net.inet6.ip6.redirect" => "1", + "net.inet6.ip6.use_tempaddr" => "0", + "net.inet6.ip6.prefer_tempaddr" => "0", + "net.inet.tcp.syncookies" => "1", + "net.inet.tcp.recvspace" => "65228", + "net.inet.tcp.sendspace" => "65228", + "net.inet.ip.fastforwarding" => "0", + "net.inet.tcp.delayed_ack" => "0", + "net.inet.udp.maxdgram" => "57344", + "net.link.bridge.pfil_onlyip" => "0", + "net.link.bridge.pfil_member" => "1", + "net.link.bridge.pfil_bridge" => "0", + "net.link.tap.user_open" => "1", + "kern.randompid" => "347", + "net.inet.ip.intr_queue_maxlen" => "1000", + "hw.syscons.kbd_reboot" => "0", + "net.inet.tcp.log_debug" => "0", + "net.inet.tcp.tso" => "1", + "net.inet.icmp.icmplim" => "0", + "vfs.read_max" => "32", + "kern.ipc.maxsockbuf" => "4262144", + "debug.pfftpproxy" => "0", + "net.inet.ip.process_options" => 0, + "kern.random.sys.harvest.interrupt" => 0, + "kern.random.sys.harvest.point_to_point" => 0, + "kern.random.sys.harvest.ethernet" => 0, + "net.route.netisr_maxqlen" => 1024, + "net.inet.udp.checksum" => 1, + "net.bpf.zerocopy_enable" => 1, + "net.inet.icmp.reply_from_interface" => 1 +); + +/* Include override values for the above if needed. If the file doesn't exist, don't try to load it. */ +if (file_exists("/etc/inc/globals_override.inc")) + @include("globals_override.inc"); + +$config_parsed = false; + +?> diff --git a/etc/inc/gmirror.inc b/etc/inc/gmirror.inc new file mode 100644 index 000000000..cd6eb5f72 --- /dev/null +++ b/etc/inc/gmirror.inc @@ -0,0 +1,314 @@ + 0) { + /* Loop through gmirror status output. */ + foreach ($status as $line) { + /* Split the line by whitespace */ + $all = preg_split("/[\s\t]+/", trim($line), 3); + if (count($all) == 3) { + /* If there are three items on a line, it is mirror name, status, and component */ + $currentmirror = basename($all[0]); + $mirrors[$currentmirror]['name'] = basename($all[0]); + $mirrors[$currentmirror]['status'] = $all[1]; + if (!is_array($mirrors[$currentmirror]['components'])) + $mirrors[$currentmirror]['components'] = array(); + $mirrors[$currentmirror]['components'][] = $all[2]; + } + } + } + /* Return an hash of mirrors and components */ + return $mirrors; +} + +/* Get only status word for a single mirror. */ +function gmirror_get_status_single($mirror) { + $status = ""; + $mirror_status = gmirror_get_status(); + var_dump($mirror_status); + return $mirror_status[$mirror]['status']; +} + +/* Generate an HTML formatted status for mirrors and disks in a small format for the widget */ +function gmirror_html_status() { + $mirrors = gmirror_get_status(); + $output = ""; + if (count($mirrors) > 0) { + $output .= "\n"; + $output .= "Name\n"; + $output .= "Status\n"; + $output .= "Component\n"; + $output .= "\n"; + foreach ($mirrors as $mirror => $name) { + $components = count($name["components"]); + $output .= "\n"; + $output .= "{$name['name']}\n"; + $output .= "{$name['status']}\n"; + $output .= "{$name['components'][0]}\n"; + $output .= "\n"; + if (count($name["components"]) > 1) { + $morecomponents = array_slice($name["components"], 1); + foreach ($morecomponents as $component) { + $output .= "\n"; + $output .= "{$component}\n"; + $output .= "\n"; + } + } + } + } else { + $output .= "No Mirrors Found\n"; + } + // $output .= "Updated at " . date("F j, Y, g:i:s a") . "\n"; + return $output; +} + +/* List all disks in the system (potential gmirror targets) */ +function gmirror_get_disks() { + $disklist = ""; + /* Get a list of disks in a scriptable way, exclude optical drives */ + exec("/sbin/geom disk status -s | /usr/bin/grep -v '[[:blank:]]*cd[[:digit:]]*' | /usr/bin/awk '{print $1;}'", $disklist); + return $disklist; +} + +/* List all potential gmirror consumers */ +function gmirror_get_unused_consumers() { + $consumerlist = ""; + /* Get a list of consumers, exclude existing mirrors and diskid entries */ + exec("/sbin/geom part status -s | /usr/bin/egrep -v '(mirror|diskid)' | /usr/bin/awk '{print $1, $3;}'", $consumerlist); + $all_consumers = array(); + foreach ($consumerlist as $cl) { + $parts = explode(" ", $cl); + foreach ($parts as $part) + $all_consumers[] = $part; + } + return $all_consumers; +} + +/* List all existing geom mirrors */ +function gmirror_get_mirrors() { + $mirrorlist = ""; + exec("/sbin/gmirror list | /usr/bin/grep '^Geom name:' | /usr/bin/awk '{print $3;}'", $mirrorlist); + return $mirrorlist; +} + + +/* List all consumers for a given mirror */ +function gmirror_get_consumers_in_mirror($mirror) { + if (!is_valid_mirror($mirror)) + return array(); + + $consumers = array(); + exec("/sbin/gmirror status -s " . escapeshellarg($mirror) . " | /usr/bin/awk '{print $3;}'", $consumers); + return $consumers; +} + +/* Test if a given consumer is a member of an existing mirror */ +function is_consumer_in_mirror($consumer, $mirror) { + if (!is_valid_consumer($consumer) || !is_valid_mirror($mirror)) + return false; + + $mirrorconsumers = gmirror_get_consumers_in_mirror($mirror); + return in_array(basename($consumer), $mirrorconsumers); +} + +/* Test if a mirror exists */ +function is_valid_mirror($mirror) { + $mirrors = gmirror_get_mirrors(); + return in_array($mirror, $mirrors); +} + +/* Test if a disk is valid/exists */ +function is_valid_disk($disk) { + $adisks = gmirror_get_disks(); + return in_array(basename($disk), $adisks); +} + +/* Test if a consumer is valid and in use in a mirror */ +function is_consumer_used($consumer) { + $found = false; + $mirrors = gmirror_get_mirrors(); + foreach ($mirrors as $mirror) { + $consumers = gmirror_get_consumers_in_mirror($mirror); + if (in_array($consumer, $consumers)) + return true; + } + return false; +} + +/* Test if a consumer is valid and not in use */ +function is_consumer_unused($consumer) { + $consumers = gmirror_get_unused_consumers(); + return in_array($consumer, $consumers); +} + +/* Test if a consumer is valid (either a disk or partition) */ +function is_valid_consumer($consumer) { + return (is_consumer_unused($consumer) || is_consumer_used($consumer)); +} + +/* Remove all disconnected drives from a mirror */ +function gmirror_forget_disconnected($mirror) { + if (!is_valid_mirror($mirror)) + return false; + return mwexec("/sbin/gmirror forget " . escapeshellarg($mirror)); +} + +/* Insert another consumer into a mirror */ +function gmirror_insert_consumer($mirror, $consumer) { + if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror insert " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); +} + +/* Remove consumer from a mirror and clear its metadata */ +function gmirror_remove_consumer($mirror, $consumer) { + if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror remove " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); +} + +/* Wipe geom info from drive (if mirror is not running) */ +function gmirror_clear_consumer($consumer) { + if (!is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror clear " . escapeshellarg($consumer)); +} + +/* Find the balance method used by a given mirror */ +function gmirror_get_mirror_balance($mirror) { + if (!is_valid_mirror($mirror)) + return false; + $balancemethod = ""; + exec("/sbin/gmirror list " . escapeshellarg($mirror) . " | /usr/bin/grep '^Balance:' | /usr/bin/awk '{print $2;}'", $balancemethod); + return $balancemethod[0]; +} + +/* Change balance algorithm of the mirror */ +function gmirror_configure_balance($mirror, $balancemethod) { + global $balance_methods; + if (!is_valid_mirror($mirror) || !in_array($balancemethod, $balance_methods)) + return false; + return mwexec("/sbin/gmirror configure -b " . escapeshellarg($balancemethod) . " " . escapeshellarg($mirror)); +} + +/* Force a mirror member to rebuild */ +function gmirror_force_rebuild($mirror, $consumer) { + if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror rebuild " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); +} + +/* Show all metadata on the physical consumer */ +function gmirror_get_consumer_metadata($consumer) { + if (!is_valid_consumer($consumer)) + return array(); + $output = ""; + exec("/sbin/gmirror dump " . escapeshellarg($consumer), $output); + return array_map('trim', $output); +} + +/* Test if a consumer has metadata, indicating it is a member of a mirror (active or inactive) */ +function gmirror_consumer_has_metadata($consumer) { + return (count(gmirror_get_consumer_metadata($consumer)) > 0); +} + +/* Find the mirror to which this consumer belongs */ +function gmirror_get_consumer_metadata_mirror($consumer) { + if (!is_valid_consumer($consumer)) + return array(); + $metadata = gmirror_get_consumer_metadata($consumer); + foreach ($metadata as $line) { + if (substr($line, 0, 5) == "name:") { + list ($key, $value) = explode(":", $line, 2); + return trim($value); + } + } +} + +/* Deactivate consumer, removing it from service in the mirror, but leave metadata intact */ +function gmirror_deactivate_consumer($mirror, $consumer) { + if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror deactivate " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); +} + +/* Reactivate a deactivated consumer */ +function gmirror_activate_consumer($mirror, $consumer) { + if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror activate " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); +} + +/* Find the size of the given mirror */ +function gmirror_get_mirror_size($mirror) { + if (!is_valid_mirror($mirror)) + return false; + $mirrorsize = ""; + exec("/sbin/gmirror list " . escapeshellarg($mirror) . " | /usr/bin/grep 'Mediasize:' | /usr/bin/head -n 1 | /usr/bin/awk '{print $2;}'", $mirrorsize); + return $mirrorsize[0]; +} + +/* Return a list of all potential consumers on a disk with sizes. The geom part + list output is a little odd, we can't get the output for just the disk, if the disk contains + slices those get output also. */ +function gmirror_get_all_unused_consumer_sizes_on_disk($disk) { + if (!is_valid_disk($disk) || !is_consumer_unused($disk)) + return array(); + $output = ""; + exec("/sbin/geom part list " . escapeshellarg($disk) . " | /usr/bin/egrep '(Name:|Mediasize:)' | /usr/bin/cut -c4- | /usr/bin/sed -l -e 'N;s/\\nMediasize://;P;D;' | /usr/bin/cut -c7-", $output); + $disk_contents = array(); + foreach ($output as $line) { + list($name, $size, $humansize) = explode(" ", $line, 3); + $consumer = array(); + $consumer['name'] = $name; + $consumer['size'] = $size; + $consumer['humansize'] = $humansize; + $disk_contents[] = $consumer; + } + return $disk_contents; +} + +/* Get only the size for one specific potential consumer. */ +function gmirror_get_unused_consumer_size($consumer) { + $consumersizes = gmirror_get_all_unused_consumer_sizes_on_disk($consumer); + foreach ($consumersizes as $csize) { + if ($csize['name'] == $consumer) + return $csize['size']; + } + return -1; +} +?> \ No newline at end of file diff --git a/etc/inc/growl.class b/etc/inc/growl.class new file mode 100644 index 000000000..33650ca8d --- /dev/null +++ b/etc/inc/growl.class @@ -0,0 +1,102 @@ +appName = utf8_encode($app_name); + $this->address = $address; + $this->notifications = array(); + $this->password = $password; + $this->port = 9887; + } + + public function addNotification($name, $enabled = true) + { + $this->notifications[] = array('name' => utf8_encode($name), 'enabled' => $enabled); + } + + public function register() + { + $data = ''; + $defaults = ''; + $num_defaults = 0; + + for($i = 0; $i < count($this->notifications); $i++) + { + $data .= pack('n', strlen($this->notifications[$i]['name'])) . $this->notifications[$i]['name']; + if($this->notifications[$i]['enabled']) + { + $defaults .= pack('c', $i); + $num_defaults++; + } + } + + // pack(Protocol version, type, app name, number of notifications to register) + $data = pack('c2nc2', 1, 0, strlen($this->appName), count($this->notifications), $num_defaults) . $this->appName . $data . $defaults; + $data .= pack('H32', md5($data . $this->password)); + + return $this->send($data); + } + + public function notify($name, $title, $message, $priority = 0, $sticky = false) + { + $name = utf8_encode($name); + $title = utf8_encode($title); + $message = utf8_encode($message); + $priority = intval($priority); + + $flags = ($priority & 7) * 2; + if($priority < 0) $flags |= 8; + if($sticky) $flags |= 1; + + // pack(protocol version, type, priority/sticky flags, notification name length, title length, message length. app name length) + $data = pack('c2n5', 1, 1, $flags, strlen($name), strlen($title), strlen($message), strlen($this->appName)); + $data .= $name . $title . $message . $this->appName; + $data .= pack('H32', md5($data . $this->password)); + + return $this->send($data); + } + + private function send($data) + { + if(function_exists('socket_create') && function_exists('socket_sendto')) + { + $sck = @socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + if ($sck) { + socket_sendto($sck, $data, strlen($data), 0x100, $this->address, $this->port); + return true; + } + } + elseif(function_exists('fsockopen')) + { + if ($this->address) { + $fp = @fsockopen('udp://' . $this->address, $this->port); + if ($fp) { + fwrite($fp, $data); + fclose($fp); + return true; + } + } + } + + return false; + } + } + +?> \ No newline at end of file diff --git a/etc/inc/gwlb.inc b/etc/inc/gwlb.inc new file mode 100644 index 000000000..c5121feed --- /dev/null +++ b/etc/inc/gwlb.inc @@ -0,0 +1,1112 @@ + "200", + "latencyhigh" => "500", + "losslow" => "10", + "losshigh" => "20", + "interval" => "1", + "down" => "10", + "avg_delay_samples" => "10", + "avg_loss_samples" => "50", + "avg_loss_delay_samples" => "20"); +} + +/* + * Creates monitoring configuration file and + * adds appropriate static routes. + */ +function setup_gateways_monitor() { + global $config, $g; + + $gateways_arr = return_gateways_array(); + if (!is_array($gateways_arr)) { + log_error("No gateways to monitor. Apinger will not be run."); + killbypid("{$g['varrun_path']}/apinger.pid"); + @unlink("{$g['varrun_path']}/apinger.status"); + return; + } + + $apinger_debug = ""; + if (isset($config['system']['apinger_debug'])) + $apinger_debug = "debug on"; + + $apinger_default = return_apinger_defaults(); + $apingerconfig = << $gateway) { + /* Do not monitor if such was requested */ + if (isset($gateway['monitor_disable'])) + continue; + if (empty($gateway['monitor']) || !is_ipaddr($gateway['monitor'])) { + if (is_ipaddr($gateway['gateway'])) + $gateway['monitor'] = $gateway['gateway']; + else /* No chance to get an ip to monitor skip target. */ + continue; + } + + /* if the monitor address is already used before, skip */ + if(in_array($gateway['monitor'], $monitor_ips)) + continue; + + /* Interface ip is needed since apinger will bind a socket to it. + * However the config GUI should already have checked this and when + * PPoE is used the IP address is set to "dynamic". So using is_ipaddrv4 + * or is_ipaddrv6 to identify packet type would be wrong, especially as + * further checks (that can cope with the "dynamic" case) are present inside + * the if block. So using $gateway['ipprotocol'] is the better option. + */ + if ($gateway['ipprotocol'] == "inet") { // This is an IPv4 gateway... + $gwifip = find_interface_ip($gateway['interface'], true); + if (!is_ipaddrv4($gwifip)) + continue; //Skip this target + + /* + * If the gateway is the same as the monitor we do not add a + * route as this will break the routing table. + * Add static routes for each gateway with their monitor IP + * not strictly necessary but is a added level of protection. + */ + if (is_ipaddrv4($gateway['gateway']) && $gateway['monitor'] != $gateway['gateway']) { + log_error("Removing static route for monitor {$gateway['monitor']} and adding a new route through {$gateway['gateway']}"); + mwexec("/sbin/route change -host " . escapeshellarg($gateway['monitor']) . + " " . escapeshellarg($gateway['gateway']), true); + } + } else if ($gateway['ipprotocol'] == "inet6") { // This is an IPv6 gateway... + if ($gateway['monitor'] == $gateway['gateway']) { + /* link locals really need a different src ip */ + if (is_linklocal($gateway['gateway'])) { + $gwifip = find_interface_ipv6_ll($gateway['interface'], true); + } else { + $gwifip = find_interface_ipv6($gateway['interface'], true); + } + } else { + /* 'monitor' has been set, so makes sure it has precedence over + * 'gateway' in defining the source IP. Otherwise if 'gateway' + * is a local link and 'monitor' is global routable then the + * ICMP6 response would not find its way back home... + */ + $gwifip = find_interface_ipv6($gateway['interface'], true); + if (is_linklocal($gateway['monitor'])) { + if (!strstr($gateway['monitor'], '%')) { + $gateway['monitor'] .= "%{$gateway['interface']}"; + } + } else { + // Monitor is a routable address, so use a routable address for the "src" part + $gwifip = find_interface_ipv6($gateway['interface'], true); + } + } + + if (!is_ipaddrv6($gwifip)) + continue; //Skip this target + + /* + * If the gateway is the same as the monitor we do not add a + * route as this will break the routing table. + * Add static routes for each gateway with their monitor IP + * not strictly necessary but is a added level of protection. + */ + if (is_ipaddrv6($gateway['gateway']) && $gateway['monitor'] != $gateway['gateway']) { + log_error("Removing static route for monitor {$gateway['monitor']} and adding a new route through {$gateway['gateway']}"); + mwexec("/sbin/route change -host -inet6 " . escapeshellarg($gateway['monitor']) . + " " . escapeshellarg($gateway['gateway']), true); + } + } else + continue; + + $monitor_ips[] = $gateway['monitor']; + $apingercfg = "target \"{$gateway['monitor']}\" {\n"; + $apingercfg .= " description \"{$name}\"\n"; + $apingercfg .= " srcip \"{$gwifip}\"\n"; + + ## How often the probe should be sent + if (!empty($gateway['interval']) && is_numeric($gateway['interval'])) { + $interval = intval($gateway['interval']); # Restrict to Integer + if ($interval < 1) $interval = 1; # Minimum + if ($interval != $apinger_default['interval']) # If not default value + $apingercfg .= " interval " . $interval . "s\n"; + } + + ## How many replies should be used to compute average delay + ## for controlling "delay" alarms + if (!empty($gateway['avg_delay_samples']) && is_numeric($gateway['avg_delay_samples'])) { + $avg_delay_samples = intval($gateway['avg_delay_samples']); # Restrict to Integer + if ($avg_delay_samples < 1) $avg_delay_samples = 1; # Minimum + if ($avg_delay_samples != $apinger_default['avg_delay_samples']) # If not default value + $apingercfg .= " avg_delay_samples " . $avg_delay_samples . "\n"; + } + + ## How many probes should be used to compute average loss + if (!empty($gateway['avg_loss_samples']) && is_numeric($gateway['avg_loss_samples'])) { + $avg_loss_samples = intval($gateway['avg_loss_samples']); # Restrict to Integer + if ($avg_loss_samples < 1) $avg_loss_samples = 1; # Minimum + if ($avg_loss_samples != $apinger_default['avg_loss_samples']) # If not default value + $apingercfg .= " avg_loss_samples " . $avg_loss_samples . "\n"; + } + + ## The delay (in samples) after which loss is computed + ## without this delays larger than interval would be treated as loss + if (!empty($gateway['avg_loss_delay_samples']) && is_numeric($gateway['avg_loss_delay_samples'])) { + $avg_loss_delay_samples = intval($gateway['avg_loss_delay_samples']); # Restrict to Integer + if ($avg_loss_delay_samples < 1) $avg_loss_delay_samples = 1; # Minimum + if ($avg_loss_delay_samples != $apinger_default['avg_loss_delay_samples']) # If not default value + $apingercfg .= " avg_loss_delay_samples " . $avg_loss_delay_samples . "\n"; + } + + $alarms = ""; + $alarmscfg = ""; + $override = false; + if (!empty($gateway['losslow'])) { + $alarmscfg .= "alarm loss \"{$name}loss\" {\n"; + $alarmscfg .= "\tpercent_low {$gateway['losslow']}\n"; + $alarmscfg .= "\tpercent_high {$gateway['losshigh']}\n"; + $alarmscfg .= "}\n"; + $alarms .= "\"{$name}loss\""; + $override = true; + } else { + if ($override == true) + $alarms .= ","; + $alarms .= "\"loss\""; + $override = true; + } + if (!empty($gateway['latencylow'])) { + $alarmscfg .= "alarm delay \"{$name}delay\" {\n"; + $alarmscfg .= "\tdelay_low {$gateway['latencylow']}ms\n"; + $alarmscfg .= "\tdelay_high {$gateway['latencyhigh']}ms\n"; + $alarmscfg .= "}\n"; + if ($override == true) + $alarms .= ","; + $alarms .= "\"{$name}delay\""; + $override = true; + } else { + if ($override == true) + $alarms .= ","; + $alarms .= "\"delay\""; + $override = true; + } + if (!empty($gateway['down'])) { + $alarmscfg .= "alarm down \"{$name}down\" {\n"; + $alarmscfg .= "\ttime {$gateway['down']}s\n"; + $alarmscfg .= "}\n"; + if ($override == true) + $alarms .= ","; + $alarms .= "\"{$name}down\""; + $override = true; + } else { + if ($override == true) + $alarms .= ","; + $alarms .= "\"down\""; + $override = true; + } + if ($override == true) + $apingercfg .= "\talarms override {$alarms};\n"; + + if (isset($gateway['force_down'])) + $apingercfg .= "\tforce_down on\n"; + + $apingercfg .= " rrd file \"{$g['vardb_path']}/rrd/{$gateway['name']}-quality.rrd\"\n"; + $apingercfg .= "}\n"; + $apingercfg .= "\n"; + + $apingerconfig .= $alarmscfg; + $apingerconfig .= $apingercfg; + + # Create gateway quality RRD with settings more suitable for pfSense graph set, + # since apinger uses default step (300; 5 minutes) and other settings that don't + # match the pfSense gateway quality graph set. + create_gateway_quality_rrd("{$g['vardb_path']}/rrd/{$gateway['name']}-quality.rrd"); + } + @file_put_contents("{$g['varetc_path']}/apinger.conf", $apingerconfig); + unset($apingerconfig); + + if (is_dir("{$g['tmp_path']}")) + chmod("{$g['tmp_path']}", 01777); + if (!is_dir("{$g['vardb_path']}/rrd")) + mkdir("{$g['vardb_path']}/rrd", 0775); + + @chown("{$g['vardb_path']}/rrd", "nobody"); + + /* Restart apinger process */ + if (isvalidpid("{$g['varrun_path']}/apinger.pid")) + sigkillbypid("{$g['varrun_path']}/apinger.pid", "HUP"); + else { + /* start a new apinger process */ + @unlink("{$g['varrun_path']}/apinger.status"); + sleep(1); + mwexec_bg("/usr/local/sbin/apinger -c {$g['varetc_path']}/apinger.conf"); + sleep(1); + sigkillbypid("{$g['varrun_path']}/apinger.pid", "USR1"); + } + + return 0; +} + +/* return the status of the apinger targets as a array */ +function return_gateways_status($byname = false) { + global $config, $g; + + $apingerstatus = array(); + /* Always get the latest status from apinger */ + if (file_exists("{$g['varrun_path']}/apinger.pid")) + sigkillbypid("{$g['varrun_path']}/apinger.pid", "USR1"); + if (file_exists("{$g['varrun_path']}/apinger.status")) { + $apingerstatus = file("{$g['varrun_path']}/apinger.status"); + } else + $apingerstatus = array(); + + $status = array(); + foreach($apingerstatus as $line) { + $info = explode("|", $line); + if ($byname == false) + $target = $info[0]; + else + $target = $info[2]; + + $status[$target] = array(); + $status[$target]['monitorip'] = $info[0]; + $status[$target]['srcip'] = $info[1]; + $status[$target]['name'] = $info[2]; + $status[$target]['lastcheck'] = $info[5] ? date('r', $info[5]) : date('r'); + $status[$target]['delay'] = empty($info[6]) ? "0ms" : round($info[6], 1) ."ms" ; + $status[$target]['loss'] = empty($info[7]) ? "0.0%" : round($info[7], 1) . "%"; + $status[$target]['status'] = trim($info[8]); + } + + /* tack on any gateways that have monitoring disabled + * or are down, which could cause gateway groups to fail */ + $gateways_arr = return_gateways_array(); + foreach($gateways_arr as $gwitem) { + if(!isset($gwitem['monitor_disable'])) + continue; + if(!is_ipaddr($gwitem['monitorip'])) { + $realif = $gwitem['interface']; + $tgtip = get_interface_gateway($realif); + if (!is_ipaddr($tgtip)) + $tgtip = "none"; + $srcip = find_interface_ip($realif); + } else { + $tgtip = $gwitem['monitorip']; + $srcip = find_interface_ip($realif); + } + if($byname == true) + $target = $gwitem['name']; + else + $target = $tgtip; + + /* failsafe for down interfaces */ + if($target == "none") { + $target = $gwitem['name']; + $status[$target]['name'] = $gwitem['name']; + $status[$target]['lastcheck'] = date('r'); + $status[$target]['delay'] = "0.0ms"; + $status[$target]['loss'] = "100.0%"; + $status[$target]['status'] = "down"; + } else { + $status[$target]['monitorip'] = $tgtip; + $status[$target]['srcip'] = $srcip; + $status[$target]['name'] = $gwitem['name']; + $status[$target]['lastcheck'] = date('r'); + $status[$target]['delay'] = "0.0ms"; + $status[$target]['loss'] = "0.0%"; + $status[$target]['status'] = "none"; + } + } + return($status); +} + +/* Return all configured gateways on the system */ +function return_gateways_array($disabled = false, $localhost = false, $inactive = false) { + global $config, $g; + + $gateways_arr = array(); + + $found_defaultv4 = 0; + $found_defaultv6 = 0; + + // Ensure the interface cache is up to date first + $interfaces = get_interface_arr(true); + $interfaces_v4 = array(); + $interfaces_v6 = array(); + + $i = -1; + /* Process/add all the configured gateways. */ + if (is_array($config['gateways']['gateway_item'])) { + foreach ($config['gateways']['gateway_item'] as $gateway) { + /* Increment it here to do not skip items */ + $i++; + + if (empty($config['interfaces'][$gateway['interface']])) { + if ($inactive === false) + continue; + else + $gateway['inactive'] = true; + } + $wancfg = $config['interfaces'][$gateway['interface']]; + + /* skip disabled interfaces */ + if ($disabled === false && (!isset($wancfg['enable']) || isset($gateway['disabled']))) + continue; + + /* if the gateway is dynamic and we can find the IPv4, Great! */ + if (empty($gateway['gateway']) || $gateway['gateway'] == "dynamic") { + if ($gateway['ipprotocol'] == "inet") { + /* we know which interfaces is dynamic, this should be made a function */ + $gateway['gateway'] = get_interface_gateway($gateway['interface']); + /* no IP address found, set to dynamic */ + if (!is_ipaddrv4($gateway['gateway'])) + $gateway['gateway'] = "dynamic"; + $gateway['dynamic'] = true; + } + + /* if the gateway is dynamic and we can find the IPv6, Great! */ + else if ($gateway['ipprotocol'] == "inet6") { + /* we know which interfaces is dynamic, this should be made a function, and for v6 too */ + $gateway['gateway'] = get_interface_gateway_v6($gateway['interface']); + /* no IPv6 address found, set to dynamic */ + if (!is_ipaddrv6($gateway['gateway'])) + $gateway['gateway'] = "dynamic"; + $gateway['dynamic'] = true; + } + } else { + /* getting this detection right is hard at this point because we still don't + * store the address family in the gateway item */ + if (is_ipaddrv4($gateway['gateway'])) + $gateway['ipprotocol'] = "inet"; + else if(is_ipaddrv6($gateway['gateway'])) + $gateway['ipprotocol'] = "inet6"; + } + + if (isset($gateway['monitor_disable'])) + $gateway['monitor_disable'] = true; + else if (empty($gateway['monitor'])) + $gateway['monitor'] = $gateway['gateway']; + + $gateway['friendlyiface'] = $gateway['interface']; + + /* special treatment for tunnel interfaces */ + if ($gateway['ipprotocol'] == "inet6") { + $gateway['interface'] = get_real_interface($gateway['interface'], "inet6", false, false); + $interfaces_v6[$gateway['friendlyiface']] = $gateway['friendlyiface']; + } else { + $gateway['interface'] = get_real_interface($gateway['interface'], "all", false, false); + $interfaces_v4[$gateway['friendlyiface']] = $gateway['friendlyiface']; + } + + /* entry has a default flag, use it */ + if (isset($gateway['defaultgw'])) { + if ($gateway['ipprotocol'] == "inet") { + $gateway['defaultgw'] = true; + $found_defaultv4 = 1; + } else if ($gateway['ipprotocol'] == "inet6") { + $gateway['defaultgw'] = true; + $found_defaultv6 = 1; + } + } + /* include the gateway index as the attribute */ + $gateway['attribute'] = $i; + + $gateways_arr[$gateway['name']] = $gateway; + } + } + unset($gateway); + + /* Loop through all interfaces with a gateway and add it to a array */ + if ($disabled == false) + $iflist = get_configured_interface_with_descr(); + else + $iflist = get_configured_interface_with_descr(false, true); + + /* Process/add dynamic v4 gateways. */ + foreach($iflist as $ifname => $friendly ) { + if(! interface_has_gateway($ifname)) + continue; + + if (empty($config['interfaces'][$ifname])) + continue; + + $ifcfg = &$config['interfaces'][$ifname]; + if(!isset($ifcfg['enable'])) + continue; + + if(!empty($ifcfg['ipaddr']) && is_ipaddrv4($ifcfg['ipaddr'])) + continue; + + if (isset($interfaces_v4[$ifname])) + continue; + + $ctype = ""; + switch($ifcfg['ipaddr']) { + case "dhcp": + case "pppoe": + case "pptp": + case "ppp": + $ctype = strtoupper($ifcfg['ipaddr']); + break; + default: + if (substr($ifcfg['if'], 0, 4) == "ovpn") { + // if current iface is an ovpn server endpoint then skip it + if (substr($ifcfg['if'], 4, 1) == 's') + continue 2; + + $ctype = "VPNv4"; + } + break; + } + $ctype = "_". strtoupper($ctype); + + $gateway = array(); + $gateway['dynamic'] = false; + $gateway['ipprotocol'] = "inet"; + $gateway['gateway'] = get_interface_gateway($ifname, $gateway['dynamic']); + $gateway['interface'] = get_real_interface($ifname); + $gateway['friendlyiface'] = $ifname; + $gateway['name'] = "{$friendly}{$ctype}"; + $gateway['attribute'] = "system"; + + if (($gateway['dynamic'] === "default") && ($found_defaultv4 == 0)) { + $gateway['defaultgw'] = true; + $gateway['dynamic'] = true; + $found_defaultv4 = 1; + } + /* Loopback dummy for dynamic interfaces without a IP */ + if (!is_ipaddrv4($gateway['gateway']) && $gateway['dynamic'] == true) + $gateway['gateway'] = "dynamic"; + + /* automatically skip known static and dynamic gateways we have a array entry for */ + foreach($gateways_arr as $gateway_item) { + if ((($ifname == $gateway_item['friendlyiface'] && $friendly == $gateway_item['name'])&& ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) || + ($ifname == $gateway_item['friendlyiface'] && $gateway_item['dynamic'] == true) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) + continue 2; + } + + if (is_ipaddrv4($gateway['gateway'])) + $gateway['monitor'] = $gateway['gateway']; + + $gateway['descr'] = "Interface {$friendly}{$ctype} Gateway"; + $gateways_arr[$gateway['name']] = $gateway; + } + unset($gateway); + + /* Process/add dynamic v6 gateways. */ + foreach($iflist as $ifname => $friendly ) { + /* If the user has disabled IPv6, they probably don't want any IPv6 gateways. */ + if (!isset($config['system']['ipv6allow'])) + break; + + if(! interface_has_gatewayv6($ifname)) + continue; + + if (empty($config['interfaces'][$ifname])) + continue; + + $ifcfg = &$config['interfaces'][$ifname]; + if(!isset($ifcfg['enable'])) + continue; + + if(!empty($ifcfg['ipaddrv6']) && is_ipaddrv6($ifcfg['ipaddrv6'])) + continue; + + if(isset($interfaces_v6[$ifname])) + continue; + + $ctype = ""; + switch($ifcfg['ipaddrv6']) { + case "slaac": + case "dhcp6": + case "6to4": + case "6rd": + $ctype = strtoupper($ifcfg['ipaddrv6']); + break; + default: + $tunnelif = substr($ifcfg['if'], 0, 3); + if (substr($ifcfg['if'], 0, 4) == "ovpn") { + // if current iface is an ovpn server endpoint then skip it + if (substr($ifcfg['if'], 4, 1) == 's') + continue 2; + + $ctype = "VPNv6"; + } else if ($tunnelif == "gif" || $tunnelif == "gre") + $ctype = "TUNNELv6"; + break; + } + $ctype = "_". strtoupper($ctype); + + $gateway = array(); + $gateway['dynamic'] = false; + $gateway['ipprotocol'] = "inet6"; + $gateway['gateway'] = get_interface_gateway_v6($ifname, $gateway['dynamic']); + $gateway['interface'] = get_real_interface($ifname, "inet6"); + switch($ifcfg['ipaddrv6']) { + case "6rd": + case "6to4": + $gateway['dynamic'] = "default"; + break; + } + $gateway['friendlyiface'] = $ifname; + $gateway['name'] = "{$friendly}{$ctype}"; + $gateway['attribute'] = "system"; + + if (($gateway['dynamic'] === "default") && ($found_defaultv6 == 0)) { + $gateway['defaultgw'] = true; + $gateway['dynamic'] = true; + $found_defaultv6 = 1; + } + + /* Loopback dummy for dynamic interfaces without a IP */ + if (!is_ipaddrv6($gateway['gateway']) && $gateway['dynamic'] == true) + $gateway['gateway'] = "dynamic"; + + /* automatically skip known static and dynamic gateways we have a array entry for */ + foreach($gateways_arr as $gateway_item) { + if ((($ifname == $gateway_item['friendlyiface'] && $friendly == $gateway_item['name']) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) || + ($ifname == $gateway_item['friendlyiface'] && $gateway_item['dynamic'] == true) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) + continue 2; + } + + if (is_ipaddrv6($gateway['gateway'])) + $gateway['monitor'] = $gateway['gateway']; + + $gateway['descr'] = "Interface {$friendly}{$ctype} Gateway"; + $gateways_arr[$gateway['name']] = $gateway; + } + unset($gateway); + + /* FIXME: Should this be enabled. + * Some interface like wan might be default but have no info recorded + * the config. */ + /* this is a fallback if all else fails and we want to get packets out @smos */ + if ($found_defaultv4 == 0 || $found_defaultv6 == 0) { + foreach ($gateways_arr as &$gateway) { + if (($gateway['friendlyiface'] == "wan") && ($found_defaultv4 == 0) && (!isset($gateway['ipprotocol']) || ($gateway['ipprotocol'] == "inet"))) { + if (file_exists("{$g['tmp_path']}/{$gateway['interface']}_defaultgw")) { + $gateway['defaultgw'] = true; + $found_defaultv4 = 1; + } + } + if (($gateway['friendlyiface'] == "wan") && ($found_defaultv6 == 0) && ($gateway['ipprotocol'] == "inet6")) { + if (file_exists("{$g['tmp_path']}/{$gateway['interface']}_defaultgwv6")) { + $gateway['defaultgw'] = true; + $found_defaultv6 = 1; + } + } + } + } + + if($localhost === true) { + /* attach localhost for Null routes */ + $gwlo4 = array(); + $gwlo4['name'] = "Null4"; + $gwlo4['interface'] = "lo0"; + $gwlo4['ipprotocol'] = "inet"; + $gwlo4['gateway'] = "127.0.0.1"; + $gwlo6 = array(); + $gwlo6['name'] = "Null6"; + $gwlo6['interface'] = "lo0"; + $gwlo6['ipprotocol'] = "inet6"; + $gwlo6['gateway'] = "::1"; + $gateways_arr['Null4'] = $gwlo4; + $gateways_arr['Null6'] = $gwlo6; + } + return($gateways_arr); +} + +function fixup_default_gateway($ipprotocol, $gateways_status, $gateways_arr) { + global $config, $g; + /* + * NOTE: The code below is meant to replace the default gateway when it goes down. + * This facilitates services running on pfSense itself and are not handled by a PBR to continue working. + */ + $upgw = ""; + $dfltgwdown = false; + $dfltgwfound = false; + foreach ($gateways_arr as $gwname => $gwsttng) { + if (($gwsttng['ipprotocol'] == $ipprotocol) && isset($gwsttng['defaultgw'])) { + $dfltgwfound = true; + $dfltgwname = $gwname; + if (!isset($gwsttng['monitor_disable']) && stristr($gateways_status[$gwname]['status'], "down")) + $dfltgwdown = true; + } + /* Keep a record of the last up gateway */ + /* XXX: Blacklist lan for now since it might cause issues to those who have a gateway set for it */ + if (empty($upgw) && ($gwsttng['ipprotocol'] == $ipprotocol) && (isset($gwsttng['monitor_disable']) || !stristr($gateways_status[$gwname]['status'], "down")) && $gwsttng[$gwname]['friendlyiface'] != "lan") + $upgw = $gwname; + if ($dfltgwdown == true && !empty($upgw)) + break; + } + if ($dfltgwfound == false) { + $gwname = convert_friendly_interface_to_friendly_descr("wan"); + if (!empty($gateways_status[$gwname]) && stristr($gateways_status[$gwname]['status'], "down")) + $dfltgwdown = true; + } + if ($dfltgwdown == true && !empty($upgw)) { + if ($gateways_arr[$upgw]['gateway'] == "dynamic") + $gateways_arr[$upgw]['gateway'] = get_interface_gateway($gateways_arr[$upgw]['friendlyiface']); + if (is_ipaddr($gateways_arr[$upgw]['gateway'])) { + log_error("Default gateway down setting {$upgw} as default!"); + if(is_ipaddrv6($gateways_arr[$upgw]['gateway'])) { + $inetfamily = "-inet6"; + } else { + $inetfamily = "-inet"; + } + mwexec("/sbin/route change {$inetfamily} default {$gateways_arr[$upgw]['gateway']}"); + } + } else { + $defaultgw = trim(exec("/sbin/route -n get -{$ipprotocol} default | /usr/bin/awk '/gateway:/ {print $2}'"), " \n"); + if(is_ipaddrv6($gateways_arr[$dfltgwname]['gateway'])) { + $inetfamily = "-inet6"; + } else { + $inetfamily = "-inet"; + } + if ($defaultgw != $gateways_arr[$dfltgwname]['gateway']) + mwexec("/sbin/route change {$inetfamily} default {$gateways_arr[$dfltgwname]['gateway']}"); + } +} + +/* + * Return an array with all gateway groups with name as key + * All gateway groups will be processed before returning the array. + */ +function return_gateway_groups_array() { + global $config, $g; + + /* fetch the current gateways status */ + $gateways_status = return_gateways_status(true); + $gateways_arr = return_gateways_array(); + $gateway_groups_array = array(); + + if (isset($config['system']['gw_switch_default'])) { + fixup_default_gateway("inet", $gateways_status, $gateways_arr); + fixup_default_gateway("inet6", $gateways_status, $gateways_arr); + } + if (is_array($config['gateways']['gateway_group'])) { + $carplist = get_configured_carp_interface_list(); + foreach ($config['gateways']['gateway_group'] as $group) { + /* create array with group gateways members separated by tier */ + $tiers = array(); + $backupplan = array(); + $gwvip_arr = array(); + foreach ($group['item'] as $item) { + list($gwname, $tier, $vipname) = explode("|", $item); + + if (is_ipaddr($carplist[$vipname])) { + if (!is_array($gwvip_arr[$group['name']])) + $gwvip_arr[$group['name']] = array(); + $gwvip_arr[$group['name']][$gwname] = $vipname; + } + + /* Do it here rather than reiterating again the group in case no member is up. */ + if (!is_array($backupplan[$tier])) + $backupplan[$tier] = array(); + $backupplan[$tier][] = $gwname; + + /* check if the gateway is available before adding it to the array */ + if (is_array($gateways_status[$gwname])) { + $status = $gateways_status[$gwname]; + $gwdown = false; + if (stristr($status['status'], "down")) { + $msg = sprintf(gettext("MONITOR: %s is down, removing from routing group {$group['name']}"), $gwname); + $gwdown = true; + } else if (stristr($status['status'], "loss") && strstr($group['trigger'], "loss")) { + /* packet loss */ + $msg = sprintf(gettext("MONITOR: %s has packet loss, removing from routing group {$group['name']}"), $gwname); + $gwdown = true; + } else if (stristr($status['status'], "delay") && strstr($group['trigger'] , "latency")) { + /* high latency */ + $msg = sprintf(gettext("MONITOR: %s has high latency, removing from routing group {$group['name']}"), $gwname); + $gwdown = true; + } + if ($gwdown == true) { + log_error($msg); + notify_via_growl($msg); + notify_via_smtp($msg); + } else { + /* Online add member */ + if (!is_array($tiers[$tier])) + $tiers[$tier] = array(); + $tiers[$tier][] = $gwname; + } + } else if (isset($gateways_arr[$gwname]['monitor_disable'])) + $tiers[$tier][] = $gwname; + } + $tiers_count = count($tiers); + if ($tiers_count == 0) { + /* Oh dear, we have no members! Engage Plan B */ + if (!$g['booting']) { + $msg = gettext("Gateways status could not be determined, considering all as up/active. (Group: {$group['name']})"); + log_error($msg); + notify_via_growl($msg); + //notify_via_smtp($msg); + } + $tiers = $backupplan; + } + /* sort the tiers array by the tier key */ + ksort($tiers); + + /* we do not really foreach the tiers as we stop after the first tier */ + foreach ($tiers as $tieridx => $tier) { + /* process all gateways in this tier */ + foreach ($tier as $member) { + /* determine interface gateway */ + if (isset($gateways_arr[$member])) { + $gateway = $gateways_arr[$member]; + $int = $gateway['interface']; + $gatewayip = ""; + if(is_ipaddr($gateway['gateway'])) + $gatewayip = $gateway['gateway']; + else if (!empty($int)) + $gatewayip = get_interface_gateway($gateway['friendlyiface']); + + if (!empty($int)) { + $gateway_groups_array[$group['name']]['ipprotocol'] = $gateway['ipprotocol']; + if (is_ipaddr($gatewayip)) { + $groupmember = array(); + $groupmember['int'] = $int; + $groupmember['gwip'] = $gatewayip; + $groupmember['weight'] = isset($gateway['weight']) ? $gateway['weight'] : 1; + if (is_array($gwvip_arr[$group['name']])&& !empty($gwvip_arr[$group['name']][$member])) + $groupmember['vip'] = $gwvip_arr[$group['name']][$member]; + $gateway_groups_array[$group['name']][] = $groupmember; + } + } + } + } + /* we should have the 1st available tier now, exit stage left */ + if (count($gateway_groups_array[$group['name']]) > 0) + break; + else + log_error("GATEWAYS: Group {$group['name']} did not have any gateways up on tier {$tieridx}!"); + } + } + } + + return ($gateway_groups_array); +} + +/* Update DHCP WAN Interface ip address in gateway group item */ +function dhclient_update_gateway_groups_defaultroute($interface = "wan") { + global $config, $g; + foreach($config['gateways']['gateway_item'] as & $gw) { + if($gw['interface'] == $interface) { + $current_gw = get_interface_gateway($interface); + if($gw['gateway'] <> $current_gw) { + $gw['gateway'] = $current_gw; + $changed = true; + } + } + } + if($changed && $current_gw) + write_config(sprintf(gettext('Updating gateway group gateway for %1$s - new gateway is %2$s'), $interfac, $current_gw)); +} + +function lookup_gateway_ip_by_name($name) { + + $gateways_arr = return_gateways_array(false, true); + foreach ($gateways_arr as $gname => $gw) { + if ($gw['name'] === $name || $gname === $name) + return $gw['gateway']; + } + + return false; +} + +function lookup_gateway_monitor_ip_by_name($name) { + + $gateways_arr = return_gateways_array(false, true); + if (!empty($gateways_arr[$name])) { + $gateway = $gateways_arr[$name]; + if(!is_ipaddr($gateway['monitor'])) + return $gateway['gateway']; + + return $gateway['monitor']; + } + + return (false); +} + +function lookup_gateway_interface_by_name($name) { + + $gateways_arr = return_gateways_array(false, true); + if (!empty($gateways_arr[$name])) { + $interfacegw = $gateways_arr[$name]['friendlyiface']; + return ($interfacegw); + } + + return (false); +} + +function get_interface_gateway($interface, &$dynamic = false) { + global $config, $g; + + $gw = NULL; + + $gwcfg = $config['interfaces'][$interface]; + if (!empty($gwcfg['gateway']) && is_array($config['gateways']['gateway_item'])) { + foreach($config['gateways']['gateway_item'] as $gateway) { + if(($gateway['name'] == $gwcfg['gateway']) && (is_ipaddrv4($gateway['gateway']))) { + $gw = $gateway['gateway']; + break; + } + } + } + + // for dynamic interfaces we handle them through the $interface_router file. + if (!is_ipaddrv4($gw) && !is_ipaddrv4($gwcfg['ipaddr'])) { + $realif = get_real_interface($interface); + if (file_exists("{$g['tmp_path']}/{$realif}_router")) { + $gw = trim(file_get_contents("{$g['tmp_path']}/{$realif}_router"), " \n"); + $dynamic = true; + } + if (file_exists("{$g['tmp_path']}/{$realif}_defaultgw")) + $dynamic = "default"; + + } + + /* return gateway */ + return ($gw); +} + +function get_interface_gateway_v6($interface, &$dynamic = false) { + global $config, $g; + + $gw = NULL; + $gwcfg = $config['interfaces'][$interface]; + if (!empty($gwcfg['gatewayv6']) && is_array($config['gateways']['gateway_item'])) { + foreach($config['gateways']['gateway_item'] as $gateway) { + if(($gateway['name'] == $gwcfg['gatewayv6']) && (is_ipaddrv6($gateway['gateway']))) { + $gw = $gateway['gateway']; + break; + } + } + } + + // for dynamic interfaces we handle them through the $interface_router file. + if (!is_ipaddrv6($gw) && !is_ipaddrv6($gwcfg['ipaddrv6'])) { + $realif = get_real_interface($interface); + if (file_exists("{$g['tmp_path']}/{$realif}_routerv6")) { + $gw = trim(file_get_contents("{$g['tmp_path']}/{$realif}_routerv6"), " \n"); + $dynamic = true; + } + if (file_exists("{$g['tmp_path']}/{$realif}_defaultgwv6")) + $dynamic = "default"; + + } + /* return gateway */ + return ($gw); +} + +/* Check a IP address against a gateway IP or name + * to verify it's address family */ +function validate_address_family($ipaddr, $gwname) { + $v4ip = false; + $v6ip = false; + $v4gw = false; + $v6gw = false; + + if(is_ipaddrv4($ipaddr)) + $v4ip = true; + if(is_ipaddrv6($ipaddr)) + $v6ip = true; + if(is_ipaddrv4($gwname)) + $v4gw = true; + if(is_ipaddrv6($gwname)) + $v6gw = true; + + if($v4ip && $v4gw) + return true; + if($v6ip && $v6gw) + return true; + + /* still no match, carry on, lookup gateways */ + if(is_ipaddrv4(lookup_gateway_ip_by_name($gwname))) + $v4gw = true; + if(is_ipaddrv6(lookup_gateway_ip_by_name($gwname))) + $v6gw = true; + + $gw_array = return_gateways_array(); + if(is_array($gw_array[$gwname])) { + switch($gw_array[$gwname]['ipprotocol']) { + case "inet": + $v4gw = true; + break; + case "inet6": + $v6gw = true; + break; + } + } + + if($v4ip && $v4gw) + return true; + if($v6ip && $v6gw) + return true; + + return false; +} + +/* check if a interface is part of a gateway group */ +function interface_gateway_group_member($interface) { + global $config; + + if (is_array($config['gateways']['gateway_group'])) + $groups = $config['gateways']['gateway_group']; + else + return false; + + $gateways_arr = return_gateways_array(false, true); + foreach($groups as $group) { + if(is_array($group['item'])) { + foreach($group['item'] as $item) { + $elements = explode("|", $item); + $gwname = $elements[0]; + if ($interface == $gateways_arr[$gwname]['interface']) { + unset($gateways_arr); + return true; + } + } + } + } + unset($gateways_arr); + + return false; +} + +function gateway_is_gwgroup_member($name) { + global $config; + + if (is_array($config['gateways']['gateway_group'])) + $groups = $config['gateways']['gateway_group']; + else + return false; + + $members = array(); + foreach($groups as $group) { + if (is_array($group['item'])) { + foreach($group['item'] as $item) { + $elements = explode("|", $item); + $gwname = $elements[0]; + if ($name == $elements[0]) + $members[] = $group['name']; + } + } + } + + return $members; +} +?> diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc new file mode 100644 index 000000000..488fb2015 --- /dev/null +++ b/etc/inc/interfaces.inc @@ -0,0 +1,5332 @@ +. + 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 notices, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notices, 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. + + pfSense_BUILDER_BINARIES: /sbin/dhclient /bin/sh /usr/bin/grep /usr/bin/xargs /usr/bin/awk /usr/local/sbin/choparp + pfSense_BUILDER_BINARIES: /sbin/ifconfig /sbin/route /usr/sbin/ngctl /usr/sbin/arp /bin/kill /usr/local/sbin/mpd5 + pfSense_BUILDER_BINARIES: /usr/local/sbin/dhcp6c + pfSense_MODULE: interfaces + +*/ + +/* include all configuration functions */ +require_once("globals.inc"); +require_once("util.inc"); +require_once("gwlb.inc"); + +function interfaces_bring_up($interface) { + if(!$interface) { + log_error(gettext("interfaces_bring_up() was called but no variable defined.")); + log_error( "Backtrace: " . debug_backtrace() ); + return; + } + pfSense_interface_flags($interface, IFF_UP); +} + +/* + * Return the interface array + */ +function get_interface_arr($flush = false) { + global $interface_arr_cache; + + /* If the cache doesn't exist, build it */ + if (!isset($interface_arr_cache) or $flush) + $interface_arr_cache = pfSense_interface_listget(); + + return $interface_arr_cache; +} + +/* + * does_interface_exist($interface): return true or false if a interface is + * detected. + */ +function does_interface_exist($interface, $flush = true) { + global $config; + + if(!$interface) + return false; + + $ints = get_interface_arr($flush); + if (in_array($interface, $ints)) + return true; + else + return false; +} + +/* + * does_vip_exist($vip): return true or false if a vip is + * configured. + */ +function does_vip_exist($vip) { + global $config; + + if(!$vip) + return false; + + + switch ($vip['mode']) { + case "carp": + case "ipalias": + /* XXX: Make proper checks? */ + $realif = get_real_interface($vip['interface']); + if (!does_interface_exist($realif)) { + return false; + } + break; + case "proxyarp": + /* XXX: Implement this */ + default: + return false; + } + + $ifacedata = pfSense_getall_interface_addresses($realif); + foreach ($ifacedata as $vipips) { + if ($vipips == "{$vip['subnet']}/{$vip['subnet_bits']}") + return true; + } + + return false; +} + +function interface_netgraph_needed($interface = "wan") { + global $config; + + $found = false; + if (!empty($config['pptpd']) && + $config['pptpd']['mode'] == "server") + $found = true; + if ($found == false && !empty($config['l2tp']) && + $config['l2tp']['mode'] == "server") + $found = true; + if ($found == false && is_array($config['pppoes']['pppoe'])) { + foreach ($config['pppoes']['pppoe'] as $pppoe) { + if ($pppoe['mode'] != "server") + continue; + if ($pppoe['interface'] == $interface) + $found = true; + break; + } + } + if ($found == false) { + if (!empty($config['interfaces'][$interface])) { + switch ($config['interfaces'][$interface]['ipaddr']) { + case "ppp": + case "pppoe": + case "l2tp": + case "pptp": + $found = true; + break; + default: + $found = false; + break; + } + } + } + if ($found == false) { + $realif = get_real_interface($interface); + if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($config['ppps']['ppp'] as $pppid => $ppp) { + +/* This if block doesn't do anything. It can be deleted. +PPP interfaces are found above in the previous if ($found == false) block. +This block of code is only entered for OPTx interfaces that are configured for PPPoE modem access, so $realif != $ppp['if'] + + if ($realif == $ppp['if']) { + $found = true; + break; + } +*/ + $ports = explode(',',$ppp['ports']); + foreach($ports as $pid => $port){ + $port = get_real_interface($port); + if ($realif == $port) { + $found = true; + break; + } + /* Find the parent interfaces of the vlans in the MLPPP configs + * there should be only one element in the array here + * -- this could be better . . . */ + $parent_if = get_parent_interface($port); + if ($realif == $parent_if[0]) { + $found = true; + break; + } + } + } + } + } + + if ($found == false) { + $realif = get_real_interface($interface); + pfSense_ngctl_detach("{$realif}:", $realif); + } + /* NOTE: We make sure for this on interface_ppps_configure() + * no need to do it here agan. + * else + * pfSense_ngctl_attach(".", $realif); + */ +} + +function interfaces_loopback_configure() { + global $g; + + if ($g['platform'] == 'jail') + return; + if($g['booting']) + echo gettext("Configuring loopback interface..."); + pfSense_interface_setaddress("lo0", "127.0.0.1"); + interfaces_bring_up("lo0"); + if($g['booting']) + echo gettext("done.") . "\n"; + return 0; +} + +function interfaces_vlan_configure($realif = "") { + global $config, $g; + if($g['booting']) + echo gettext("Configuring VLAN interfaces..."); + if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { + foreach ($config['vlans']['vlan'] as $vlan) { + if (empty($vlan['vlanif'])) + $vlan['vlanif'] = "{$vlan['if']}_vlan{$vlan['tag']}"; + if (!empty($realif) && $realif != $vlan['vlanif']) + continue; + + /* XXX: Maybe we should report any errors?! */ + interface_vlan_configure($vlan); + } + } + if($g['booting']) + echo gettext("done.") . "\n"; +} + +function interface_vlan_configure(&$vlan) { + global $config, $g; + + if (!is_array($vlan)) { + log_error(gettext("VLAN: called with wrong options. Problems with config!")); + return; + } + $if = $vlan['if']; + $vlanif = empty($vlan['vlanif']) ? "{$if}_vlan{$vlan['tag']}" : $vlan['vlanif']; + $tag = $vlan['tag']; + + if (empty($if)) { + log_error(gettext("interface_vlan_configure called with if undefined.")); + return; + } + + /* make sure the parent interface is up */ + interfaces_bring_up($if); + /* Since we are going to add vlan(4) try to enable all that hardware supports. */ + pfSense_interface_capabilities($if, IFCAP_VLAN_HWTAGGING|IFCAP_VLAN_MTU|IFCAP_VLAN_HWFILTER); + + if (!empty($vlanif) && does_interface_exist($vlanif)) { + interface_bring_down($vlanif, true); + } else { + $tmpvlanif = pfSense_interface_create("vlan"); + pfSense_interface_rename($tmpvlanif, $vlanif); + pfSense_ngctl_name("{$tmpvlanif}:", $vlanif); + } + + pfSense_vlan_create($vlanif, $if, $tag); + + interfaces_bring_up($vlanif); + + /* invalidate interface cache */ + get_interface_arr(true); + + /* XXX: ermal -- for now leave it here at the moment it does not hurt. */ + interfaces_bring_up($if); + + return $vlanif; +} + +function interface_qinq_configure(&$vlan, $fd = NULL) { + global $config, $g; + + if (!is_array($vlan)) { + log_error(sprintf(gettext("QinQ compat VLAN: called with wrong options. Problems with config!%s"), "\n")); + return; + } + + $qinqif = $vlan['if']; + $tag = $vlan['tag']; + if(empty($qinqif)) { + log_error(sprintf(gettext("interface_qinq_configure called with if undefined.%s"), "\n")); + return; + } + + if(!does_interface_exist($qinqif)) { + log_error(sprintf(gettext("interface_qinq_configure called with invalid if.%s"), "\n")); + return; + } + + $vlanif = interface_vlan_configure($vlan); + + if ($fd == NULL) { + $exec = true; + $fd = fopen("{$g['tmp_path']}/netgraphcmd", "w"); + } else + $exec = false; + /* make sure the parent is converted to ng_vlan(4) and is up */ + interfaces_bring_up($qinqif); + + pfSense_ngctl_attach(".", $qinqif); + if (!empty($vlanif) && does_interface_exist($vlanif)) { + fwrite($fd, "shutdown {$qinqif}qinq:\n"); + exec("/usr/sbin/ngctl msg {$qinqif}qinq: gettable", $result); + if (empty($result)) { + fwrite($fd, "mkpeer {$qinqif}: vlan lower downstream\n"); + fwrite($fd, "name {$qinqif}:lower {$vlanif}qinq\n"); + fwrite($fd, "connect {$qinqif}: {$vlanif}qinq: upper nomatch\n"); + } + } else { + fwrite($fd, "mkpeer {$qinqif}: vlan lower downstream\n"); + fwrite($fd, "name {$qinqif}:lower {$vlanif}qinq\n"); + fwrite($fd, "connect {$qinqif}: {$vlanif}qinq: upper nomatch\n"); + } + + /* invalidate interface cache */ + get_interface_arr(true); + + if (!stristr($qinqif, "_vlan")) + mwexec("/sbin/ifconfig {$qinqif} promisc\n"); + + $macaddr = get_interface_mac($qinqif); + if (!empty($vlan['members'])) { + $members = explode(" ", $vlan['members']); + foreach ($members as $qtag) { + $qinq = array(); + $qinq['tag'] = $qtag; + $qinq['if'] = $vlanif; + interface_qinq2_configure($qinq, $fd, $macaddr); + } + } + if ($exec == true) { + fclose($fd); + mwexec("/usr/sbin/ngctl -f {$g['tmp_path']}/netgraphcmd"); + } + + interfaces_bring_up($qinqif); + if (!empty($vlan['members'])) { + $members = explode(" ", $vlan['members']); + foreach ($members as $qif) + interfaces_bring_up("{$vlanif}_{$qif}"); + } + + return $vlanif; +} + +function interfaces_qinq_configure() { + global $config, $g; + if($g['booting']) + echo gettext("Configuring QinQ interfaces..."); + if (is_array($config['qinqs']['qinqentry']) && count($config['qinqs']['qinqentry'])) { + foreach ($config['qinqs']['qinqentry'] as $qinq) { + /* XXX: Maybe we should report any errors?! */ + interface_qinq_configure($qinq); + } + } + if($g['booting']) + echo gettext( "done.") . "\n"; +} + +function interface_qinq2_configure(&$qinq, $fd, $macaddr) { + global $config, $g; + + if (!is_array($qinq)) { + log_error(sprintf(gettext("QinQ compat VLAN: called with wrong options. Problems with config!%s"), "\n")); + return; + } + + $if = $qinq['if']; + $tag = $qinq['tag']; + $vlanif = "{$if}_{$tag}"; + if(empty($if)) { + log_error(sprintf(gettext("interface_qinq2_configure called with if undefined.%s"), "\n")); + return; + } + + fwrite($fd, "shutdown {$if}h{$tag}:\n"); + fwrite($fd, "mkpeer {$if}qinq: eiface {$if}{$tag} ether\n"); + fwrite($fd, "name {$if}qinq:{$if}{$tag} {$if}h{$tag}\n"); + fwrite($fd, "msg {$if}qinq: addfilter { vlan={$tag} hook=\"{$if}{$tag}\" }\n"); + fwrite($fd, "msg {$if}h{$tag}: setifname \"{$vlanif}\"\n"); + fwrite($fd, "msg {$if}h{$tag}: set {$macaddr}\n"); + + /* invalidate interface cache */ + get_interface_arr(true); + + return $vlanif; +} + +function interfaces_create_wireless_clones() { + global $config, $g; + + if($g['booting']) + echo gettext("Creating wireless clone interfaces..."); + + $iflist = get_configured_interface_list(); + + foreach ($iflist as $if) { + $realif = $config['interfaces'][$if]['if']; + if (is_interface_wireless($realif)) + interface_wireless_clone(interface_get_wireless_clone($realif), $config['interfaces'][$if]); + } + + if (isset($config['wireless']['clone']) && is_array($config['wireless']['clone']) && count($config['wireless']['clone'])) { + foreach ($config['wireless']['clone'] as $clone) { + if(empty($clone['cloneif'])) + continue; + if(does_interface_exist($clone['cloneif'])) + continue; + /* XXX: Maybe we should report any errors?! */ + interface_wireless_clone($clone['cloneif'], $clone); + } + } + if($g['booting']) + echo gettext("done.") . "\n"; + +} + +function interfaces_bridge_configure($checkmember = 0, $realif = "") { + global $config; + + $i = 0; + if (is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) { + foreach ($config['bridges']['bridged'] as $bridge) { + if (empty($bridge['bridgeif'])) + $bridge['bridgeif'] = "bridge{$i}"; + if (!empty($realif) && $realif != $bridge['bridgeif']) + continue; + + if ($checkmember == 1) { + if (strstr($bridge['if'], "_vip")) + continue; + $members = explode(',', $bridge['members']); + foreach ($members as $member) { + if (!empty($config['interfaces'][$bridge['if']]) && $config['interfaces'][$bridge['if']]['ipaddrv6'] == "track6") + continue 2; + } + } + else if ($checkmember == 2) { + if (strstr($bridge['if'], "_vip")) + continue; + $members = explode(',', $bridge['members']); + foreach ($members as $member) { + if (empty($config['interfaces'][$bridge['if']]) || $config['interfaces'][$bridge['if']]['ipaddrv6'] != "track6") + continue 2; + } + } + /* XXX: Maybe we should report any errors?! */ + interface_bridge_configure($bridge, $checkmember); + $i++; + } + } +} + +function interface_bridge_configure(&$bridge, $checkmember = 0) { + global $config, $g; + + if (!is_array($bridge)) + return; + + if (empty($bridge['members'])) { + log_error(sprintf(gettext("No members found on %s"), $bridge['bridgeif'])); + return; + } + + $members = explode(',', $bridge['members']); + if (!count($members)) + return; + + /* Calculate smaller mtu and enforce it */ + $smallermtu = 0; + $commonrx = true; + $commontx = true; + $foundgif = false; + foreach ($members as $member) { + $realif = get_real_interface($member); + $opts = pfSense_get_interface_addresses($realif); + $mtu = $opts['mtu']; + if (substr($realif, 0, 3) == "gif") { + $foundgif = true; + if ($checkmember == 1) + return; + if ($mtu <= 1500) + continue; + } + if (!isset($opts['caps']['txcsum'])) + $commontx = false; + if (!isset($opts['caps']['rxcsum'])) + $commonrx = false; + if (!isset($opts['caps']['tso4'])) + $commontso4 = false; + if (!isset($opts['caps']['tso6'])) + $commontso6 = false; + if (!isset($opts['caps']['lro'])) + $commonlro = false; + if ($smallermtu == 0 && !empty($mtu)) + $smallermtu = $mtu; + else if (!empty($mtu) && $mtu < $smallermtu) + $smallermtu = $mtu; + } + if ($foundgif == false && $checkmember == 2) + return; + + /* Just in case anything is not working well */ + if ($smallermtu == 0) + $smallermtu = 1500; + + $flags_on = 0; + $flags_off = 0; + if (isset($config['system']['disablechecksumoffloading']) || ($commonrx === false)) + $flags_off |= IFCAP_RXCSUM; + else + $flags_on |= IFCAP_RXCSUM; + if (isset($config['system']['disablechecksumoffloading']) || ($commontx === false)) + $flags_off |= IFCAP_TXCSUM; + else + $flags_on |= IFCAP_TXCSUM; + if (isset($config['system']['disablesegmentationoffloading']) || ($commontso4 === false)) + $flags_off |= IFCAP_TSO4; + else + $flags_on |= IFCAP_TSO4; + if (isset($config['system']['disablesegmentationoffloading']) || ($commontso6 === false)) + $flags_off |= IFCAP_TSO6; + else + $flags_on |= IFCAP_TSO6; + if (isset($config['system']['disablelargereceiveoffloading']) || ($commonlro === false)) + $flags_off |= IFCAP_LRO; + else + $flags_on |= IFCAP_LRO; + + if ($g['booting'] || !empty($bridge['bridgeif'])) { + pfSense_interface_destroy($bridge['bridgeif']); + pfSense_interface_create($bridge['bridgeif']); + $bridgeif = escapeshellarg($bridge['bridgeif']); + } else { + $bridgeif = pfSense_interface_create("bridge"); + $bridge['bridgeif'] = $bridgeif; + } + + $checklist = get_configured_interface_list(); + + /* Add interfaces to bridge */ + foreach ($members as $member) { + if (empty($checklist[$member])) + continue; + $realif = get_real_interface($member); + if (!$realif) { + log_error(gettext("realif not defined in interfaces bridge - up")); + continue; + } + /* make sure the parent interface is up */ + pfSense_interface_mtu($realif, $smallermtu); + pfSense_interface_capabilities($realif, -$flags_off); + pfSense_interface_capabilities($realif, $flags_on); + interfaces_bring_up($realif); + pfSense_bridge_add_member($bridge['bridgeif'], $realif); + } + + if (isset($bridge['enablestp'])) { + /* Choose spanning tree proto */ + mwexec("/sbin/ifconfig {$bridgeif} proto " . escapeshellarg($bridge['proto'])); + + if (!empty($bridge['stp'])) { + $stpifs = explode(',', $bridge['stp']); + foreach ($stpifs as $stpif) { + $realif = get_real_interface($stpif); + mwexec("/sbin/ifconfig {$bridgeif} stp {$realif}"); + } + } + if (!empty($bridge['maxage'])) + mwexec("/sbin/ifconfig {$bridgeif} maxage " . escapeshellarg($bridge['maxage'])); + if (!empty($bridge['fwdelay'])) + mwexec("/sbin/ifconfig {$bridgeif} fwddelay " . escapeshellarg($bridge['fwdelay'])); + if (!empty($bridge['hellotime'])) + mwexec("/sbin/ifconfig {$bridgeif} hellotime " . escapeshellarg($bridge['hellotime'])); + if (!empty($bridge['priority'])) + mwexec("/sbin/ifconfig {$bridgeif} priority " . escapeshellarg($bridge['priority'])); + if (!empty($bridge['holdcnt'])) + mwexec("/sbin/ifconfig {$bridgeif} holdcnt " . escapeshellarg($bridge['holdcnt'])); + if (!empty($bridge['ifpriority'])) { + $pconfig = explode(",", $bridge['ifpriority']); + $ifpriority = array(); + foreach ($pconfig as $cfg) { + $embcfg = explode_assoc(":", $cfg); + foreach ($embcfg as $key => $value) + $ifpriority[$key] = $value; + } + foreach ($ifpriority as $key => $value) { + $realif = get_real_interface($key); + mwexec("/sbin/ifconfig ${bridgeif} ifpriority {$realif} " . escapeshellarg($value)); + } + } + if (!empty($bridge['ifpathcost'])) { + $pconfig = explode(",", $bridge['ifpathcost']); + $ifpathcost = array(); + foreach ($pconfig as $cfg) { + $embcfg = explode_assoc(":", $cfg); + foreach ($embcfg as $key => $value) + $ifpathcost[$key] = $value; + } + foreach ($ifpathcost as $key => $value) { + $realif = get_real_interface($key); + mwexec("/sbin/ifconfig ${bridgeif} ifpathcost {$realif} " . escapeshellarg($value)); + } + } + } + + if ($bridge['maxaddr'] <> "") + mwexec("/sbin/ifconfig {$bridgeif} maxaddr " . escapeshellarg($bridge['maxaddr'])); + if ($bridge['timeout'] <> "") + mwexec("/sbin/ifconfig {$bridgeif} timeout " . escapeshellarg($bridge['timeout'])); + if ($bridge['span'] <> "") { + $realif = get_real_interface($bridge['span']); + mwexec("/sbin/ifconfig {$bridgeif} span {$realif}"); + } + if (!empty($bridge['edge'])) { + $edgeifs = explode(',', $bridge['edge']); + foreach ($edgeifs as $edgeif) { + $realif = get_real_interface($edgeif); + mwexec("/sbin/ifconfig {$bridgeif} edge {$realif}"); + } + } + if (!empty($bridge['autoedge'])) { + $edgeifs = explode(',', $bridge['autoedge']); + foreach ($edgeifs as $edgeif) { + $realif = get_real_interface($edgeif); + mwexec("/sbin/ifconfig {$bridgeif} -autoedge {$realif}"); + } + } + if (!empty($bridge['ptp'])) { + $ptpifs = explode(',', $bridge['ptp']); + foreach ($ptpifs as $ptpif) { + $realif = get_real_interface($ptpif); + mwexec("/sbin/ifconfig {$bridgeif} ptp {$realif}"); + } + } + if (!empty($bridge['autoptp'])) { + $ptpifs = explode(',', $bridge['autoptp']); + foreach ($ptpifs as $ptpif) { + $realif = get_real_interface($ptpif); + mwexec("/sbin/ifconfig {$bridgeif} -autoptp {$realif}"); + } + } + if (!empty($bridge['static'])) { + $stickyifs = explode(',', $bridge['static']); + foreach ($stickyifs as $stickyif) { + $realif = get_real_interface($stickyif); + mwexec("/sbin/ifconfig {$bridgeif} sticky {$realif}"); + } + } + if (!empty($bridge['private'])) { + $privateifs = explode(',', $bridge['private']); + foreach ($privateifs as $privateif) { + $realif = get_real_interface($privateif); + mwexec("/sbin/ifconfig {$bridgeif} private {$realif}"); + } + } + + if ($bridge['bridgeif']) + interfaces_bring_up($bridge['bridgeif']); + else + log_error(gettext("bridgeif not defined -- could not bring interface up")); +} + +function interface_bridge_add_member($bridgeif, $interface) { + + if (!does_interface_exist($bridgeif) || !does_interface_exist($interface)) + return; + + $mtu = get_interface_mtu($bridgeif); + $mtum = get_interface_mtu($interface); + + if ($mtu != $mtum && !(substr($interface, 0, 3) == "gif" && $mtu <= 1500)) + pfSense_interface_mtu($interface, $mtu); + + $options = pfSense_get_interface_addresses($bridgeif); + $flags_on = 0; + $flags_off = 0; + if (isset($options['encaps']['txcsum'])) + $flags_on |= IFCAP_TXCSUM; + else + $flags_off |= IFCAP_TXCSUM; + if (isset($options['encaps']['rxcsum'])) + $flags_on |= IFCAP_RXCSUM; + else + $flags_off |= IFCAP_RXCSUM; + if (isset($options['encaps']['tso4'])) + $flags_on |= IFCAP_TSO4; + else + $flags_off |= IFCAP_TSO4; + if (isset($options['encaps']['tso6'])) + $flags_on |= IFCAP_TSO6; + else + $flags_off |= IFCAP_TSO6; + if (isset($options['encaps']['lro'])) + $flags_on |= IFCAP_LRO; + else + $flags_off |= IFCAP_LRO; + + pfSense_interface_capabilities($interface, -$flags_off); + pfSense_interface_capabilities($interface, $flags_on); + + interfaces_bring_up($interface); + pfSense_bridge_add_member($bridgeif, $interface); +} + +function interfaces_lagg_configure($realif = "") { + global $config, $g; + if($g['booting']) + echo gettext("Configuring LAGG interfaces..."); + $i = 0; + if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) { + foreach ($config['laggs']['lagg'] as $lagg) { + if(empty($lagg['laggif'])) + $lagg['laggif'] = "lagg{$i}"; + if (!empty($realif) && $realif != $lagg['laggif']) + continue; + /* XXX: Maybe we should report any errors?! */ + interface_lagg_configure($lagg); + $i++; + } + } + if($g['booting']) + echo gettext("done.") . "\n"; +} + +function interface_lagg_configure(&$lagg) { + global $config, $g; + + if (!is_array($lagg)) + return -1; + + $members = explode(',', $lagg['members']); + if (!count($members)) + return -1; + + if ($g['booting'] || !(empty($lagg['laggif']))) { + pfSense_interface_destroy($lagg['laggif']); + pfSense_interface_create($lagg['laggif']); + $laggif = $lagg['laggif']; + } else + $laggif = pfSense_interface_create("lagg"); + + /* Calculate smaller mtu and enforce it */ + $smallermtu = 0; + foreach ($members as $member) { + $opts = pfSense_get_interface_addresses($member); + $mtu = $opts['mtu']; + if (!isset($opts['caps']['txcsum'])) + $commontx = false; + if (!isset($opts['caps']['rxcsum'])) + $commonrx = false; + if (!isset($opts['caps']['tso4'])) + $commontso4 = false; + if (!isset($opts['caps']['tso6'])) + $commontso6 = false; + if (!isset($opts['caps']['lro'])) + $commonlro = false; + if ($smallermtu == 0 && !empty($mtu)) + $smallermtu = $mtu; + else if (!empty($mtu) && $mtu < $smallermtu) + $smallermtu = $mtu; + } + + /* Just in case anything is not working well */ + if ($smallermtu == 0) + $smallermtu = 1500; + + $flags_on = 0; + $flags_off = 0; + if (isset($config['system']['disablechecksumoffloading']) || ($commonrx === false)) + $flags_off |= IFCAP_RXCSUM; + else + $flags_on |= IFCAP_RXCSUM; + if (isset($config['system']['disablechecksumoffloading']) || ($commontx === false)) + $flags_off |= IFCAP_TXCSUM; + else + $flags_on |= IFCAP_TXCSUM; + if (isset($config['system']['disablesegmentationoffloading']) || ($commontso4 === false)) + $flags_off |= IFCAP_TSO4; + else + $flags_on |= IFCAP_TSO4; + if (isset($config['system']['disablesegmentationoffloading']) || ($commontso6 === false)) + $flags_off |= IFCAP_TSO6; + else + $flags_on |= IFCAP_TSO6; + if (isset($config['system']['disablelargereceiveoffloading']) || ($commonlro === false)) + $flags_off |= IFCAP_LRO; + else + $flags_on |= IFCAP_LRO; + + $checklist = get_interface_list(); + + foreach ($members as $member) { + if (!array_key_exists($member, $checklist)) + continue; + /* make sure the parent interface is up */ + pfSense_interface_mtu($member, $smallermtu); + pfSense_interface_capabilities($member, -$flags_off); + pfSense_interface_capabilities($member, $flags_on); + interfaces_bring_up($member); + mwexec("/sbin/ifconfig {$laggif} laggport {$member}"); + } + + mwexec("/sbin/ifconfig {$laggif} laggproto " . escapeshellarg($lagg['proto'])); + + interfaces_bring_up($laggif); + + return $laggif; +} + +function interfaces_gre_configure($checkparent = 0, $realif = "") { + global $config; + + if (is_array($config['gres']['gre']) && count($config['gres']['gre'])) { + foreach ($config['gres']['gre'] as $i => $gre) { + if (empty($gre['greif'])) + $gre['greif'] = "gre{$i}"; + if (!empty($realif) && $realif != $gre['greif']) + continue; + + if ($checkparent == 1) { + if (strstr($gre['if'], "_vip")) + continue; + if (!empty($config['interfaces'][$gre['if']]) && $config['interfaces'][$gre['if']]['ipaddrv6'] == "track6") + continue; + } + else if ($checkparent == 2) { + if (strstr($gre['if'], "_vip")) + continue; + if (empty($config['interfaces'][$gre['if']]) || $config['interfaces'][$gre['if']]['ipaddrv6'] != "track6") + continue; + } + /* XXX: Maybe we should report any errors?! */ + interface_gre_configure($gre); + } + } +} + +/* NOTE: $grekey is not used but useful for passing this function to array_walk. */ +function interface_gre_configure(&$gre, $grekey = "") { + global $config, $g; + + if (!is_array($gre)) + return -1; + + $realif = get_real_interface($gre['if']); + $realifip = get_interface_ip($gre['if']); + + /* make sure the parent interface is up */ + interfaces_bring_up($realif); + + if ($g['booting'] || !(empty($gre['greif']))) { + pfSense_interface_destroy($gre['greif']); + pfSense_interface_create($gre['greif']); + $greif = $gre['greif']; + } else + $greif = pfSense_interface_create("gre"); + + /* Do not change the order here for more see gre(4) NOTES section. */ + mwexec("/sbin/ifconfig {$greif} tunnel {$realifip} " . escapeshellarg($gre['remote-addr'])); + if((is_ipaddrv6($gre['tunnel-local-addr'])) || (is_ipaddrv6($gre['tunnel-remote-addr']))) { + /* XXX: The prefixlen argument for tunnels of ipv6 is useless since it needs to be 128 as enforced by kernel */ + //mwexec("/sbin/ifconfig {$greif} inet6 " . escapeshellarg($gre['tunnel-local-addr']) . " " . escapeshellarg($gre['tunnel-remote-addr']) . " prefixlen /" . escapeshellarg($gre['tunnel-remote-net'])); + mwexec("/sbin/ifconfig {$greif} inet6 " . escapeshellarg($gre['tunnel-local-addr']) . " " . escapeshellarg($gre['tunnel-remote-addr']) . " prefixlen 128"); + } else { + mwexec("/sbin/ifconfig {$greif} " . escapeshellarg($gre['tunnel-local-addr']) . " " . escapeshellarg($gre['tunnel-remote-addr']) . " netmask " . gen_subnet_mask($gre['tunnel-remote-net'])); + } + if (isset($gre['link0'])) + pfSense_interface_flags($greif, IFF_LINK0); + if (isset($gre['link1'])) + pfSense_interface_flags($greif, IFF_LINK1); + if (isset($gre['link2'])) + pfSense_interface_flags($greif, IFF_LINK2); + + if($greif) + interfaces_bring_up($greif); + else + log_error(gettext("Could not bring greif up -- variable not defined.")); + + if (isset($gre['link1']) && $gre['link1']) + mwexec("/sbin/route add " . escapeshellarg($gre['tunnel-remote-addr']) . "/" . escapeshellarg($gre['tunnel-remote-net']) . " " . escapeshellarg($gre['tunnel-local-addr'])); + if(is_ipaddrv4($gre['tunnel-remote-addr'])) + file_put_contents("{$g['tmp_path']}/{$greif}_router", $gre['tunnel-remote-addr']); + if(is_ipaddrv6($gre['tunnel-remote-addr'])) + file_put_contents("{$g['tmp_path']}/{$greif}_routerv6", $gre['tunnel-remote-addr']); + + interfaces_bring_up($greif); + + return $greif; +} + +function interfaces_gif_configure($checkparent = 0, $realif = "") { + global $config; + + if (is_array($config['gifs']['gif']) && count($config['gifs']['gif'])) { + foreach ($config['gifs']['gif'] as $i => $gif) { + if (empty($gif['gifif'])) + $gre['gifif'] = "gif{$i}"; + if (!empty($realif) && $realif != $gif['gifif']) + continue; + + if ($checkparent == 1) { + if (strstr($gif['if'], "_vip")) + continue; + if (!empty($config['interfaces'][$gif['if']]) && $config['interfaces'][$gif['if']]['ipaddrv6'] == "track6") + continue; + } + else if ($checkparent == 2) { + if (strstr($gif['if'], "_vip")) + continue; + if (empty($config['interfaces'][$gif['if']]) || $config['interfaces'][$gif['if']]['ipaddrv6'] != "track6") + continue; + } + /* XXX: Maybe we should report any errors?! */ + interface_gif_configure($gif); + } + } +} + +/* NOTE: $gifkey is not used but useful for passing this function to array_walk. */ +function interface_gif_configure(&$gif, $gifkey = "") { + global $config, $g; + + if (!is_array($gif)) + return -1; + + $realif = get_real_interface($gif['if']); + $ipaddr = $gif['ipaddr']; + + if (is_ipaddrv4($gif['remote-addr'])) { + if (is_ipaddrv4($ipaddr)) + $realifip = $ipaddr; + else + $realifip = get_interface_ip($gif['if']); + $realifgw = get_interface_gateway($gif['if']); + } else if (is_ipaddrv6($gif['remote-addr'])) { + if (is_ipaddrv6($ipaddr)) + $realifip = $ipaddr; + else + $realifip = get_interface_ipv6($gif['if']); + $realifgw = get_interface_gateway_v6($gif['if']); + } + /* make sure the parent interface is up */ + if($realif) + interfaces_bring_up($realif); + else + log_error(gettext("could not bring realif up -- variable not defined -- interface_gif_configure()")); + + if ($g['booting'] || !(empty($gif['gifif']))) { + pfSense_interface_destroy($gif['gifif']); + pfSense_interface_create($gif['gifif']); + $gifif = $gif['gifif']; + } else + $gifif = pfSense_interface_create("gif"); + + /* Do not change the order here for more see gif(4) NOTES section. */ + mwexec("/sbin/ifconfig {$gifif} tunnel {$realifip} " . escapeshellarg($gif['remote-addr'])); + if((is_ipaddrv6($gif['tunnel-local-addr'])) || (is_ipaddrv6($gif['tunnel-remote-addr']))) { + /* XXX: The prefixlen argument for tunnels of ipv6 is useless since it needs to be 128 as enforced by kernel */ + //mwexec("/sbin/ifconfig {$gifif} inet6 " . escapeshellarg($gif['tunnel-local-addr']) . " " . escapeshellarg($gif['tunnel-remote-addr']) . " prefixlen /" . escapeshellarg($gif['tunnel-remote-net'])); + mwexec("/sbin/ifconfig {$gifif} inet6 " . escapeshellarg($gif['tunnel-local-addr']) . " " . escapeshellarg($gif['tunnel-remote-addr']) . " prefixlen 128"); + } else { + mwexec("/sbin/ifconfig {$gifif} " . escapeshellarg($gif['tunnel-local-addr']) . " " . escapeshellarg($gif['tunnel-remote-addr']) . " netmask " . gen_subnet_mask($gif['tunnel-remote-net'])); + } + if (isset($gif['link0'])) + pfSense_interface_flags($gifif, IFF_LINK0); + if (isset($gif['link1'])) + pfSense_interface_flags($gifif, IFF_LINK1); + if($gifif) + interfaces_bring_up($gifif); + else + log_error(gettext("could not bring gifif up -- variable not defined")); + + $iflist = get_configured_interface_list(); + foreach($iflist as $ifname) { + if($config['interfaces'][$ifname]['if'] == $gifif) { + if(get_interface_gateway($ifname)) { + system_routing_configure($ifname); + break; + } + if(get_interface_gateway_v6($ifname)) { + system_routing_configure($ifname); + break; + } + } + } + + + if(is_ipaddrv4($gif['tunnel-remote-addr'])) + file_put_contents("{$g['tmp_path']}/{$gifif}_router", $gif['tunnel-remote-addr']); + if(is_ipaddrv6($gif['tunnel-remote-addr'])) + file_put_contents("{$g['tmp_path']}/{$gifif}_routerv6", $gif['tunnel-remote-addr']); + + if (is_ipaddrv4($realifgw)) { + mwexec("/sbin/route change -host " . escapeshellarg($gif['remote-addr']) . " {$realifgw}"); + } + if (is_ipaddrv6($realifgw)) { + mwexec("/sbin/route change -host -inet6 " . escapeshellarg($gif['remote-addr']) . " {$realifgw}"); + } + + interfaces_bring_up($gifif); + + return $gifif; +} + +function interfaces_configure() { + global $config, $g; + + if ($g['platform'] == 'jail') + return; + + /* Set up our loopback interface */ + interfaces_loopback_configure(); + + /* create the unconfigured wireless clones */ + interfaces_create_wireless_clones(); + + /* set up LAGG virtual interfaces */ + interfaces_lagg_configure(); + + /* set up VLAN virtual interfaces */ + interfaces_vlan_configure(); + + interfaces_qinq_configure(); + + $iflist = get_configured_interface_with_descr(); + $delayed_list = array(); + $bridge_list = array(); + $track6_list = array(); + + /* This is needed to speedup interfaces on bootup. */ + $reload = false; + if (!$g['booting']) + $reload = true; + + foreach($iflist as $if => $ifname) { + $realif = $config['interfaces'][$if]['if']; + if (strstr($realif, "bridge")) + $bridge_list[$if] = $ifname; + else if (strstr($realif, "gre")) + $delayed_list[$if] = $ifname; + else if (strstr($realif, "gif")) + $delayed_list[$if] = $ifname; + else if (strstr($realif, "ovpn")) { + //echo "Delaying OpenVPN interface configuration...done.\n"; + continue; + } else if (!empty($config['interfaces'][$if]['ipaddrv6']) && $config['interfaces'][$if]['ipaddrv6'] == "track6") { + $track6_list[$if] = $ifname; + } else { + if ($g['booting']) + printf(gettext("Configuring %s interface..."), $ifname); + + if($g['debug']) + log_error(sprintf(gettext("Configuring %s"), $ifname)); + interface_configure($if, $reload); + if ($g['booting']) + echo gettext( "done.") . "\n"; + } + } + + /* + * NOTE: The following function parameter consists of + * 1 - Do not load gre/gif/bridge with parent/member as vip + * 2 - Do load gre/gif/bridge with parent/member as vip + */ + + /* set up GRE virtual interfaces */ + interfaces_gre_configure(1); + + /* set up GIF virtual interfaces */ + interfaces_gif_configure(1); + + /* set up BRIDGe virtual interfaces */ + interfaces_bridge_configure(1); + + foreach ($track6_list as $if => $ifname) { + if ($g['booting']) + printf(gettext("Configuring %s interface..."), $ifname); + if ($g['debug']) + log_error(sprintf(gettext("Configuring %s"), $ifname)); + + interface_configure($if, $reload); + + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + /* bring up vip interfaces */ + interfaces_vips_configure(); + + /* set up GRE virtual interfaces */ + interfaces_gre_configure(2); + + /* set up GIF virtual interfaces */ + interfaces_gif_configure(2); + + foreach ($delayed_list as $if => $ifname) { + if ($g['booting']) + printf(gettext("Configuring %s interface..."), $ifname); + if ($g['debug']) + log_error(sprintf(gettext("Configuring %s"), $ifname)); + + interface_configure($if, $reload); + + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + /* set up BRIDGe virtual interfaces */ + interfaces_bridge_configure(2); + + foreach ($bridge_list as $if => $ifname) { + if ($g['booting']) + printf(gettext("Configuring %s interface..."), $ifname); + if($g['debug']) + log_error(sprintf(gettext("Configuring %s"), $ifname)); + + interface_configure($if, $reload); + + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + /* configure interface groups */ + interfaces_group_setup(); + + if (!$g['booting']) { + /* reconfigure static routes (kernel may have deleted them) */ + system_routing_configure(); + + /* reload IPsec tunnels */ + vpn_ipsec_configure(); + + /* reload dhcpd (interface enabled/disabled status may have changed) */ + services_dhcpd_configure(); + + /* restart dnsmasq or unbound */ + if (isset($config['dnsmasq']['enable'])) + services_dnsmasq_configure(); + elseif (isset($config['unbound']['enable'])) + services_unbound_configure(); + } + + return 0; +} + +function interface_reconfigure($interface = "wan", $reloadall = false) { + interface_bring_down($interface); + interface_configure($interface, $reloadall); +} + +function interface_vip_bring_down($vip) { + global $g; + + $vipif = get_real_interface($vip['interface']); + switch ($vip['mode']) { + case "proxyarp": + if (file_exists("{$g['varrun_path']}/choparp_{$vipif}.pid")) + killbypid("{$g['varrun_path']}/choparp_{$vipif}.pid"); + break; + case "ipalias": + if (does_interface_exist($vipif)) { + if (is_ipaddrv6($vip['subnet'])) + mwexec("/sbin/ifconfig {$vipif} inet6 " . escapeshellarg($vip['subnet']) . " -alias"); + else + pfSense_interface_deladdress($vipif, $vip['subnet']); + } + break; + case "carp": + /* XXX: Is enough to delete ip address? */ + if (does_interface_exist($vipif)) + pfSense_interface_deladdress($vipif, $vip['subnet']); + break; + } +} + +function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg = false) { + global $config, $g; + + if (!isset($config['interfaces'][$interface])) + return; + + if ($g['debug']) + log_error("Calling interface down for interface {$interface}, destroy is " . (($destroy) ? 'true' : 'false')); + + /* + * NOTE: The $realifv6 is needed when WANv4 is type PPP and v6 is DHCP and the option v6 from v4 is used. + * In this case the real $realif of v4 is different from that of v6 for operation. + * Keep this in mind while doing changes here! + */ + if ($ifacecfg === false) { + $ifcfg = $config['interfaces'][$interface]; + $ppps = $config['ppps']['ppp']; + $realif = get_real_interface($interface); + $realifv6 = get_real_interface($interface, "inet6", true); + } elseif (!is_array($ifacecfg)) { + log_error(gettext("Wrong parameters used during interface_bring_down")); + $ifcfg = $config['interfaces'][$interface]; + $ppps = $config['ppps']['ppp']; + $realif = get_real_interface($interface); + $realifv6 = get_real_interface($interface, "inet6", true); + } else { + $ifcfg = $ifacecfg['ifcfg']; + $ppps = $ifacecfg['ppps']; + if (isset($ifacecfg['ifcfg']['realif'])) { + $realif = $ifacecfg['ifcfg']['realif']; + /* XXX: Any better way? */ + $realifv6 = $realif; + } else { + $realif = get_real_interface($interface); + $realifv6 = get_real_interface($interface, "inet6", true); + } + } + + switch ($ifcfg['ipaddr']) { + case "ppp": + case "pppoe": + case "pptp": + case "l2tp": + if (is_array($ppps) && count($ppps)) { + foreach ($ppps as $pppid => $ppp) { + if ($realif == $ppp['if']) { + if (isset($ppp['ondemand']) && !$destroy){ + send_event("interface reconfigure {$interface}"); + break; + } + if (file_exists("{$g['varrun_path']}/{$ppp['type']}_{$interface}.pid")) { + killbypid("{$g['varrun_path']}/{$ppp['type']}_{$interface}.pid"); + sleep(2); + } + unlink_if_exists("{$g['varetc_path']}/mpd_{$interface}.conf"); + break; + } + } + } + break; + case "dhcp": + kill_dhclient_process($realif); + unlink_if_exists("{$g['varetc_path']}/dhclient_{$interface}.conf"); + if(does_interface_exist("$realif")) { + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " delete", true); + interface_ipalias_cleanup($interface); + if ($destroy == true) + pfSense_interface_flags($realif, -IFF_UP); + mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a"); + } + break; + default: + if(does_interface_exist("$realif")) { + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " delete", true); + interface_ipalias_cleanup($interface); + if ($destroy == true) + pfSense_interface_flags($realif, -IFF_UP); + mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a"); + } + break; + } + + $track6 = array(); + switch ($ifcfg['ipaddrv6']) { + case "slaac": + case "dhcp6": + $pidv6 = find_dhcp6c_process($realif); + if($pidv6) + posix_kill($pidv6, SIGTERM); + sleep(3); + unlink_if_exists("{$g['varetc_path']}/dhcp6c_{$interface}.conf"); + if (does_interface_exist($realifv6)) { + $ip6 = find_interface_ipv6($realifv6); + if (is_ipaddrv6($ip6) && $ip6 != "::") + mwexec("/sbin/ifconfig " . escapeshellarg($realifv6) . " inet6 {$ip6} delete", true); + interface_ipalias_cleanup($interface, "inet6"); + if ($destroy == true) + pfSense_interface_flags($realif, -IFF_UP); + mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a"); + } + $track6 = link_interface_to_track6($interface); + break; + case "6rd": + case "6to4": + $realif = "{$interface}_stf"; + if(does_interface_exist("$realif")) { + $ip6 = get_interface_ipv6($interface); + if (is_ipaddrv6($ip6)) + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$ip6} delete", true); + interface_ipalias_cleanup($interface, "inet6"); + if ($destroy == true) + pfSense_interface_flags($realif, -IFF_UP); + } + $track6 = link_interface_to_track6($interface); + break; + default: + if(does_interface_exist("$realif")) { + $ip6 = get_interface_ipv6($interface); + if (is_ipaddrv6($ip6)) + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$ip6} delete", true); + if (!empty($ifcfg['ipaddrv6']) && is_ipaddrv6($ifcfg['ipaddrv6'])) + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$ifcfg['ipaddrv6']} delete", true); + interface_ipalias_cleanup($interface, "inet6"); + if ($destroy == true) + pfSense_interface_flags($realif, -IFF_UP); + mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a"); + } + $track6 = link_interface_to_track6($interface); + break; + } + + if (!empty($track6) && is_array($track6)) { + if (!function_exists('services_dhcp_configure')) + require_once('services.inc'); + /* Bring down radvd and dhcp6 on these interfaces */ + services_dhcpd_configure('inet6', $track6); + } + + $old_router = ''; + if (file_exists("{$g['tmp_path']}/{$realif}_router")) + $old_router = trim(file_get_contents("{$g['tmp_path']}/{$realif}_router")); +// log_error("Checking for old router states: {$g['tmp_path']}/{$realif}_router = {$old_router}"); + if (!empty($old_router)) { + log_error("Clearing states to old gateway {$old_router}."); + mwexec("/sbin/pfctl -i " . escapeshellarg($realif) . " -Fs"); + } + + /* remove interface up file if it exists */ + unlink_if_exists("{$g['tmp_path']}/{$realif}up"); + unlink_if_exists("{$g['vardb_path']}/{$interface}ip"); + unlink_if_exists("{$g['vardb_path']}/{$interface}ipv6"); + unlink_if_exists("{$g['tmp_path']}/{$realif}_router"); + unlink_if_exists("{$g['tmp_path']}/{$realif}_routerv6"); + unlink_if_exists("{$g['varetc_path']}/nameserver_{$realif}"); + unlink_if_exists("{$g['varetc_path']}/searchdomain_{$realif}"); + + /* hostapd and wpa_supplicant do not need to be running when the interface is down. + * They will also use 100% CPU if running after the wireless clone gets deleted. */ + if (is_array($ifcfg['wireless'])) { + kill_hostapd($realif); + mwexec(kill_wpasupplicant($realif)); + } + + if ($destroy == true) { + if (preg_match("/^[a-z0-9]+^tun|^ovpn|^gif|^gre|^lagg|^bridge|vlan|_stf$/i", $realif)) + pfSense_interface_destroy($realif); + } + + return; +} + +function interfaces_carp_set_maintenancemode($carp_maintenancemode){ + global $config; + if (isset($config["virtualip_carp_maintenancemode"]) && $carp_maintenancemode == false) { + unset($config["virtualip_carp_maintenancemode"]); + write_config("Leave CARP maintenance mode"); + } else + if (!isset($config["virtualip_carp_maintenancemode"]) && $carp_maintenancemode == true) { + $config["virtualip_carp_maintenancemode"] = true; + write_config("Enter CARP maintenance mode"); + } + + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + if ($vip['mode'] == "carp") { + interface_carp_configure($vip); + } + } +} + +function interfaces_ptpid_used($ptpid) { + global $config; + + if (is_array($config['ppps']['ppp'])) + foreach ($config['ppps']['ppp'] as & $settings) + if ($ptpid == $settings['ptpid']) + return true; + + return false; +} + +function interfaces_ptpid_next() { + + $ptpid = 0; + while(interfaces_ptpid_used($ptpid)) + $ptpid++; + + return $ptpid; +} + +function getMPDCRONSettings($pppif) { + global $config; + + $cron_cmd_file = "{$g['varetc_path']}/pppoe_restart_{$pppif}"; + if (is_array($config['cron']['item'])) { + foreach ($config['cron']['item'] as $i => $item) { + if (stripos($item['command'], $cron_cmd_file) !== false) + return array("ID" => $i, "ITEM" => $item); + } + } + + return NULL; +} + +function handle_pppoe_reset($post_array) { + global $config, $g; + + $pppif = "{$post_array['type']}{$post_array['ptpid']}"; + $cron_cmd_file = "{$g['varetc_path']}/pppoe_restart_{$pppif}"; + + if (!is_array($config['cron']['item'])) + $config['cron']['item'] = array(); + + $itemhash = getMPDCRONSettings($pppif); + + // reset cron items if necessary and return + if (empty($post_array['pppoe-reset-type'])) { + if (isset($itemhash)) + unset($config['cron']['item'][$itemhash['ID']]); + sigkillbypid("{$g['varrun_path']}/cron.pid", "HUP"); + return; + } + + if (empty($itemhash)) + $itemhash = array(); + $item = array(); + if (isset($post_array['pppoe-reset-type']) && $post_array['pppoe-reset-type'] == "custom") { + $item['minute'] = $post_array['pppoe_resetminute']; + $item['hour'] = $post_array['pppoe_resethour']; + if (isset($post_array['pppoe_resetdate']) && $post_array['pppoe_resetdate'] <> "") { + $date = explode("/", $post_array['pppoe_resetdate']); + $item['mday'] = $date[1]; + $item['month'] = $date[0]; + } else { + $item['mday'] = "*"; + $item['month'] = "*"; + } + $item['wday'] = "*"; + $item['who'] = "root"; + $item['command'] = $cron_cmd_file; + } else if (isset($post_array['pppoe-reset-type']) && $post_array['pppoe-reset-type'] == "preset") { + switch ($post_array['pppoe_pr_preset_val']) { + case "monthly": + $item['minute'] = "0"; + $item['hour'] = "0"; + $item['mday'] = "1"; + $item['month'] = "*"; + $item['wday'] = "*"; + break; + case "weekly": + $item['minute'] = "0"; + $item['hour'] = "0"; + $item['mday'] = "*"; + $item['month'] = "*"; + $item['wday'] = "0"; + break; + case "daily": + $item['minute'] = "0"; + $item['hour'] = "0"; + $item['mday'] = "*"; + $item['month'] = "*"; + $item['wday'] = "*"; + break; + case "hourly": + $item['minute'] = "0"; + $item['hour'] = "*"; + $item['mday'] = "*"; + $item['month'] = "*"; + $item['wday'] = "*"; + break; + } // end switch + $item['who'] = "root"; + $item['command'] = $cron_cmd_file; + } + if (empty($item)) + return; + if (isset($itemhash['ID'])) + $config['cron']['item'][$itemhash['ID']] = $item; + else + $config['cron']['item'][] = $item; +} + +/* + * This function can configure PPPoE, MLPPP (PPPoE), PPTP. + * It writes the mpd config file to /var/etc every time the link is opened. + */ +function interface_ppps_configure($interface) { + global $config, $g; + + /* Return for unassigned interfaces. This is a minimum requirement. */ + if (empty($config['interfaces'][$interface])) + return 0; + $ifcfg = $config['interfaces'][$interface]; + if (!isset($ifcfg['enable'])) + return 0; + + // mpd5 requires a /var/spool/lock directory for PPP modem links. + if(!is_dir("/var/spool/lock")) { + mkdir("/var/spool/lock", 0777, true); + } + // mpd5 modem chat script expected in the same directory as the mpd_xxx.conf files + if (!file_exists("{$g['varetc_path']}/mpd.script")) + @symlink("/usr/local/sbin/mpd.script", "{$g['varetc_path']}/mpd.script"); + + if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($config['ppps']['ppp'] as $pppid => $ppp) { + if ($ifcfg['if'] == $ppp['if']) + break; + } + } + if (!$ppp || $ifcfg['if'] != $ppp['if']){ + log_error(sprintf(gettext("Can't find PPP config for %s in interface_ppps_configure()."), $ifcfg['if'])); + return 0; + } + $pppif = $ifcfg['if']; + if ($ppp['type'] == "ppp") + $type = "modem"; + else + $type = $ppp['type']; + $upper_type = strtoupper($ppp['type']); + + if($g['booting']) { + $descr = isset($ifcfg['descr']) ? $ifcfg['descr'] : strtoupper($interface); + echo "starting {$pppif} link..."; + // Do not re-configure the interface if we are booting and it's already been started + if(file_exists("{$g['varrun_path']}/{$ppp['type']}_{$interface}.pid")) + return 0; + } + + $ports = explode(',',$ppp['ports']); + if ($type != "modem") { + foreach ($ports as $pid => $port) { + $ports[$pid] = get_real_interface($port); + if (empty($ports[$pid])) + return 0; + } + } + $localips = explode(',',$ppp['localip']); + $gateways = explode(',',$ppp['gateway']); + $subnets = explode(',',$ppp['subnet']); + + /* We bring up the parent interface first because if DHCP is configured on the parent we need + * to obtain an address first so we can write it in the mpd .conf file for PPTP and L2TP configs + */ + foreach($ports as $pid => $port){ + switch ($ppp['type']) { + case "pppoe": + /* Bring the parent interface up */ + interfaces_bring_up($port); + pfSense_ngctl_attach(".", $port); + /* Enable setautosrc to automatically change mac address if parent interface's changes */ + mwexec("ngctl msg {$port}: setautosrc 1"); + break; + case "pptp": + case "l2tp": + /* configure interface */ + if(is_ipaddr($localips[$pid])){ + // Manually configure interface IP/subnet + pfSense_interface_setaddress($port, "{$localips[$pid]}/{$subnets[$pid]}"); + interfaces_bring_up($port); + } else if (empty($localips[$pid])) + $localips[$pid] = get_interface_ip($port); // try to get the interface IP from the port + + if(!is_ipaddr($localips[$pid])){ + log_error("Could not get a Local IP address for PPTP/L2TP link on {$port} in interfaces_ppps_configure. Using 0.0.0.0 ip!"); + $localips[$pid] = "0.0.0.0"; + } + if(!is_ipaddr($gateways[$pid])){ + log_error(sprintf(gettext('Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in interfaces_ppps_configure.'), $dhcp_gateway, $gway)); + return 0; + } + pfSense_ngctl_attach(".", $port); + break; + case "ppp": + if (!file_exists("{$port}")) { + log_error(sprintf(gettext("Device %s does not exist. PPP link cannot start without the modem device."), $port)); + return 0; + } + break; + default: + log_error(sprintf(gettext("Unkown %s configured as ppp interface."), $type)); + break; + } + } + + if (is_array($ports) && count($ports) > 1) + $multilink = "enable"; + else + $multilink = "disable"; + + if ($type == "modem"){ + if (is_ipaddr($ppp['localip'])) + $localip = $ppp['localip']; + else + $localip = '0.0.0.0'; + + if (is_ipaddr($ppp['gateway'])) + $gateway = $ppp['gateway']; + else + $gateway = "10.64.64.{$pppid}"; + $ranges = "{$localip}/0 {$gateway}/0"; + + if (empty($ppp['apnum'])) + $ppp['apnum'] = 1; + } else + $ranges = "0.0.0.0/0 0.0.0.0/0"; + + if (isset($ppp['ondemand'])) + $ondemand = "enable"; + else + $ondemand = "disable"; + if (!isset($ppp['idletimeout'])) + $ppp['idletimeout'] = 0; + + if (empty($ppp['username']) && $type == "modem"){ + $ppp['username'] = "user"; + $ppp['password'] = "none"; + } + if (empty($ppp['password']) && $type == "modem") + $passwd = "none"; + else + $passwd = base64_decode($ppp['password']); + + $bandwidths = explode(',',$ppp['bandwidth']); + $defaultmtu = "1492"; + if (!empty($ifcfg['mtu'])) + $defaultmtu = intval($ifcfg['mtu']); + $mtus = explode(',',$ppp['mtu']); + $mrus = explode(',',$ppp['mru']); + + if (isset($ppp['mrru'])) + $mrrus = explode(',',$ppp['mrru']); + + // Construct the mpd.conf file + $mpdconf = << $port){ + $port = get_real_interface($port); + $mpdconf .= <<&1", $out, $ret); + if($ret == 0) + break; + sleep(1); + $i++; + } + + /* we only support the 3gstats.php for huawei modems for now. Will add more later. */ + /* We should be able to launch the right version for each modem */ + /* We can also guess the mondev from the manufacturer */ + exec("usbconfig | egrep -ie '(huawei)'", $usbmodemoutput); + mwexec("/bin/ps auxww|grep \"{$interface}\" |grep \"[3]gstats\" | awk '{print $2}' |xargs kill"); + foreach($ports as $port) { + if(preg_match("/huawei/i", implode("\n", $usbmodemoutput))) { + $mondev = substr(basename($port), 0, -1); + $devlist = glob("/dev/{$mondev}?"); + $mondev = basename(end($devlist)); + } + if(preg_match("/zte/i", implode("\n", $usbmodemoutput))) { + $mondev = substr(basename($port), 0, -1) . "1"; + } + log_error("Starting 3gstats.php on device '{$mondev}' for interface '{$interface}'"); + mwexec_bg("/usr/local/bin/3gstats.php {$mondev} {$interface}"); + } + + return 1; +} + +function interfaces_carp_setup() { + global $g, $config; + + if (isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "interfaces_carp_setup() being called $mt\n"; + } + + if ($g['booting']) { + echo gettext("Configuring CARP settings..."); + mute_kernel_msgs(); + } + + /* suck in configuration items */ + if ($config['hasync']) { + $pfsyncenabled = $config['hasync']['pfsyncenabled']; + $pfsyncinterface = $config['hasync']['pfsyncinterface']; + $pfsyncpeerip = $config['hasync']['pfsyncpeerip']; + } else { + unset($pfsyncinterface); + unset($pfsyncenabled); + } + + set_sysctl(array( + "net.inet.carp.preempt" => "1", + "net.inet.carp.log" => "1") + ); + + if (!empty($pfsyncinterface)) + $carp_sync_int = get_real_interface($pfsyncinterface); + else + unset($carp_sync_int); + + /* setup pfsync interface */ + if ($carp_sync_int and $pfsyncenabled) { + if (is_ipaddr($pfsyncpeerip)) + $syncpeer = "syncpeer {$pfsyncpeerip}"; + else + $syncpeer = "-syncpeer"; + + mwexec("/sbin/ifconfig pfsync0 syncdev {$carp_sync_int} {$syncpeer} up", false); + + sleep(1); + + /* XXX: Handle an issue with pfsync(4) and carp(4). In a cluster carp will come up before pfsync(4) has updated and so will cause issues + * for existing sessions. + */ + log_error("waiting for pfsync..."); + $i = 0; + while (intval(trim(`/sbin/ifconfig pfsync0 | /usr/bin/grep 'syncok: 0' | /usr/bin/grep -v grep | /usr/bin/wc -l`)) == 0 && $i < 30) { + $i++; + sleep(1); + } + log_error("pfsync done in $i seconds."); + log_error("Configuring CARP settings finalize..."); + } else { + mwexec("/sbin/ifconfig pfsync0 -syncdev -syncpeer down", false); + } + + if($config['virtualip']['vip']) + set_single_sysctl("net.inet.carp.allow", "1"); + else + set_single_sysctl("net.inet.carp.allow", "0"); + + if ($g['booting']) { + unmute_kernel_msgs(); + echo gettext("done.") . "\n"; + } +} + +function interface_proxyarp_configure($interface = "") { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "interface_proxyarp_configure() being called $mt\n"; + } + + /* kill any running choparp */ + if (empty($interface)) + killbyname("choparp"); + else { + $vipif = get_real_interface($interface); + if (file_exists("{$g['varrun_path']}/choparp_{$vipif}.pid")) + killbypid("{$g['varrun_path']}/choparp_{$vipif}.pid"); + } + + $paa = array(); + if (!empty($config['virtualip']) && is_array($config['virtualip']['vip'])) { + + /* group by interface */ + foreach ($config['virtualip']['vip'] as $vipent) { + if ($vipent['mode'] === "proxyarp") { + if ($vipent['interface']) + $proxyif = $vipent['interface']; + else + $proxyif = "wan"; + + if (!empty($interface) && $interface != $proxyif) + continue; + + if (!is_array($paa[$proxyif])) + $paa[$proxyif] = array(); + + $paa[$proxyif][] = $vipent; + } + } + } + + if (!empty($interface)) { + if (is_array($paa[$interface])) { + $paaifip = get_interface_ip($interface); + if (!is_ipaddr($paaifip)) + return; + $args = get_real_interface($interface) . " auto"; + foreach ($paa[$interface] as $paent) { + if (isset($paent['subnet'])) + $args .= " " . escapeshellarg("{$paent['subnet']}/{$paent['subnet_bits']}"); + else if (isset($paent['range'])) + $args .= " " . escapeshellarg($paent['range']['from'] . "-" . $paent['range']['to']); + } + mwexec_bg("/usr/local/sbin/choparp " . $args); + } + } else if (count($paa) > 0) { + foreach ($paa as $paif => $paents) { + $paaifip = get_interface_ip($paif); + if (!is_ipaddr($paaifip)) + continue; + $args = get_real_interface($paif) . " auto"; + foreach ($paents as $paent) { + if (isset($paent['subnet'])) + $args .= " " . escapeshellarg("{$paent['subnet']}/{$paent['subnet_bits']}"); + else if (isset($paent['range'])) + $args .= " " . escapeshellarg($paent['range']['from'] . "-" . $paent['range']['to']); + } + mwexec_bg("/usr/local/sbin/choparp " . $args); + } + } +} + +function interface_ipalias_cleanup($interface, $inet = "inet4") { + global $g, $config; + + if (is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['mode'] == "ipalias" && $vip['interface'] == $interface) { + if ($inet == "inet6" && is_ipaddrv6($vip['subnet'])) + interface_vip_bring_down($vip); + else if ($inet == "inet4" && is_ipaddrv4($vip['subnet'])) + interface_vip_bring_down($vip); + } + } + } +} + +function interfaces_vips_configure($interface = "") { + global $g, $config; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "interfaces_vips_configure() being called $mt\n"; + } + $paa = array(); + if(is_array($config['virtualip']['vip'])) { + $carp_setuped = false; + $anyproxyarp = false; + foreach ($config['virtualip']['vip'] as $vip) { + switch ($vip['mode']) { + case "proxyarp": + /* nothing it is handled on interface_proxyarp_configure() */ + if ($interface <> "" && $vip['interface'] <> $interface) + continue; + $anyproxyarp = true; + break; + case "ipalias": + if ($interface <> "" && $vip['interface'] <> $interface) + continue; + interface_ipalias_configure($vip); + break; + case "carp": + if ($interface <> "" && $vip['interface'] <> $interface) + continue; + if ($carp_setuped == false) + $carp_setuped = true; + interface_carp_configure($vip); + break; + } + } + if ($carp_setuped == true) + interfaces_carp_setup(); + if ($anyproxyarp == true) + interface_proxyarp_configure(); + } +} + +function interface_ipalias_configure(&$vip) { + global $config; + + if ($vip['mode'] != "ipalias") + return; + + if ($vip['interface'] != 'lo0' && !isset($config['interfaces'][$vip['interface']])) + return; + + if ($vip['interface'] != 'lo0' && !isset($config['interfaces'][$vip['interface']]['enable'])) + return; + + $if = get_real_interface($vip['interface']); + $af = "inet"; + if(is_ipaddrv6($vip['subnet'])) + $af = "inet6"; + mwexec("/sbin/ifconfig " . escapeshellarg($if) ." {$af} ". escapeshellarg($vip['subnet']) ."/" . escapeshellarg($vip['subnet_bits']) . " alias"); +} + +function interface_reload_carps($cif) { + global $config; + + $carpifs = link_ip_to_carp_interface(find_interface_ip($cif)); + if (empty($carpifs)) + return; + + $carps = explode(" ", $carpifs); + if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + if (in_array($vip['carpif'], $carps)) { + switch ($vip['mode']) { + case "carp": + interface_vip_bring_down($vip); + sleep(1); + interface_carp_configure($vip); + break; + case "ipalias": + interface_vip_bring_down($vip); + sleep(1); + interface_ipalias_configure($vip); + break; + } + } + } + } +} + +function interface_carp_configure(&$vip) { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "interface_carp_configure() being called $mt\n"; + } + + if ($vip['mode'] != "carp") + return; + + /* NOTE: Maybe its useless nowdays */ + $realif = get_real_interface($vip['interface']); + if (!does_interface_exist($realif)) { + file_notice("CARP", sprintf(gettext("Interface specified for the virtual IP address %s does not exist. Skipping this VIP."), $vip['subnet']), "Firewall: Virtual IP", ""); + return; + } + + if (is_ipaddrv4($vip['subnet'])) { + /* Ensure a IP on this interface exists prior to configuring CARP. */ + $ww_subnet_ip = find_interface_ip($realif); + if (!is_ipaddrv4($ww_subnet_ip)) { + file_notice("CARP", sprintf(gettext("Sorry but we could not find a required assigned ip address on the interface for the virtual IP address %s."), $vip['subnet']), "Firewall: Virtual IP", ""); + return; + } + } else if (is_ipaddrv6($vip['subnet'])) { + /* Ensure a IP on this interface exists prior to configuring CARP. */ + $ww_subnet_ip = find_interface_ipv6($realif); + if (!is_ipaddrv6($ww_subnet_ip)) { + file_notice("CARP", sprintf(gettext("Sorry but we could not find a required assigned ip address on the interface for the virtual IPv6 address %s."), $vip['subnet']), "Firewall: Virtual IP", ""); + return; + } + } + + $vip_password = $vip['password']; + $vip_password = escapeshellarg(addslashes(str_replace(" ", "", $vip_password))); + if ($vip['password'] != "") + $password = " pass {$vip_password}"; + + $advbase = ""; + if (!empty($vip['advbase'])) + $advbase = "advbase " . escapeshellarg($vip['advbase']); + + $carp_maintenancemode = isset($config["virtualip_carp_maintenancemode"]); + if ($carp_maintenancemode) + $advskew = "advskew 254"; + else + $advskew = "advskew " . escapeshellarg($vip['advskew']); + + mwexec("/sbin/ifconfig {$realif} vhid " . escapeshellarg($vip['vhid']) . " {$advskew} {$advbase} {$password}"); + + if (is_ipaddrv4($vip['subnet'])) + mwexec("/sbin/ifconfig {$realif} " . escapeshellarg($vip['subnet']) . "/" . escapeshellarg($vip['subnet_bits']) . " alias vhid " . escapeshellarg($vip['vhid'])); + else if (is_ipaddrv6($vip['subnet'])) + mwexec("/sbin/ifconfig {$realif} inet6 " . escapeshellarg($vip['subnet']) . " prefixlen " . escapeshellarg($vip['subnet_bits']) . " alias vhid " . escapeshellarg($vip['vhid'])); + + return $realif; +} + +function interface_wireless_clone($realif, $wlcfg) { + global $config, $g; + /* Check to see if interface has been cloned as of yet. + * If it has not been cloned then go ahead and clone it. + */ + $needs_clone = false; + if(is_array($wlcfg['wireless'])) + $wlcfg_mode = $wlcfg['wireless']['mode']; + else + $wlcfg_mode = $wlcfg['mode']; + switch($wlcfg_mode) { + case "hostap": + $mode = "wlanmode hostap"; + break; + case "adhoc": + $mode = "wlanmode adhoc"; + break; + default: + $mode = ""; + break; + } + $baseif = interface_get_wireless_base($wlcfg['if']); + if(does_interface_exist($realif)) { + exec("/sbin/ifconfig " . escapeshellarg($realif), $output, $ret); + $ifconfig_str = implode($output); + if(($wlcfg_mode == "hostap") && (! preg_match("/hostap/si", $ifconfig_str))) { + log_error(sprintf(gettext("Interface %s changed to hostap mode"), $realif)); + $needs_clone = true; + } + if(($wlcfg_mode == "adhoc") && (! preg_match("/adhoc/si", $ifconfig_str))) { + log_error(sprintf(gettext("Interface %s changed to adhoc mode"), $realif)); + $needs_clone = true; + } + if(($wlcfg_mode == "bss") && (preg_match("/hostap|adhoc/si", $ifconfig_str))) { + log_error(sprintf(gettext("Interface %s changed to infrastructure mode"), $realif)); + $needs_clone = true; + } + } else { + $needs_clone = true; + } + + if($needs_clone == true) { + /* remove previous instance if it exists */ + if(does_interface_exist($realif)) + pfSense_interface_destroy($realif); + + log_error(sprintf(gettext("Cloning new wireless interface %s"), $realif)); + // Create the new wlan interface. FreeBSD returns the new interface name. + // example: wlan2 + exec("/sbin/ifconfig wlan create wlandev {$baseif} {$mode} bssid 2>&1", $out, $ret); + if($ret <> 0) { + log_error(sprintf(gettext('Failed to clone interface %1$s with error code %2$s, output %3$s'), $baseif, $ret, $out[0])); + return false; + } + $newif = trim($out[0]); + // Rename the interface to {$parentnic}_wlan{$number}#: EX: ath0_wlan0 + pfSense_interface_rename($newif, $realif); + // FIXME: not sure what ngctl is for. Doesn't work. + // mwexec("/usr/sbin/ngctl name {$newif}: {$realif}", false); + file_put_contents("{$g['tmp_path']}/{$realif}_oldmac", get_interface_mac($realif)); + } + return true; +} + +function interface_sync_wireless_clones(&$ifcfg, $sync_changes = false) { + global $config, $g; + + $shared_settings = array('standard', 'turbo', 'protmode', 'txpower', 'channel', + 'diversity', 'txantenna', 'rxantenna', 'distance', + 'regdomain', 'regcountry', 'reglocation'); + + if(!is_interface_wireless($ifcfg['if'])) + return; + + $baseif = interface_get_wireless_base($ifcfg['if']); + + // Sync shared settings for assigned clones + $iflist = get_configured_interface_list(false, true); + foreach ($iflist as $if) { + if ($baseif == interface_get_wireless_base($config['interfaces'][$if]['if']) && $ifcfg['if'] != $config['interfaces'][$if]['if']) { + if (isset($config['interfaces'][$if]['wireless']['standard']) || $sync_changes) { + foreach ($shared_settings as $setting) { + if ($sync_changes) { + if (isset($ifcfg['wireless'][$setting])) + $config['interfaces'][$if]['wireless'][$setting] = $ifcfg['wireless'][$setting]; + else if (isset($config['interfaces'][$if]['wireless'][$setting])) + unset($config['interfaces'][$if]['wireless'][$setting]); + } else { + if (isset($config['interfaces'][$if]['wireless'][$setting])) + $ifcfg['wireless'][$setting] = $config['interfaces'][$if]['wireless'][$setting]; + else if (isset($ifcfg['wireless'][$setting])) + unset($ifcfg['wireless'][$setting]); + } + } + if (!$sync_changes) + break; + } + } + } + + // Read or write settings at shared area + if (isset($config['wireless']['interfaces'][$baseif]) && is_array($config['wireless']['interfaces'][$baseif])) { + foreach ($shared_settings as $setting) { + if ($sync_changes) { + if (isset($ifcfg['wireless'][$setting])) + $config['wireless']['interfaces'][$baseif][$setting] = $ifcfg['wireless'][$setting]; + else if (isset($config['wireless']['interfaces'][$baseif][$setting])) + unset($config['wireless']['interfaces'][$baseif][$setting]); + } else if (isset($config['wireless']['interfaces'][$baseif][$setting])) { + if (isset($config['wireless']['interfaces'][$baseif][$setting])) + $ifcfg['wireless'][$setting] = $config['wireless']['interfaces'][$baseif][$setting]; + else if (isset($ifcfg['wireless'][$setting])) + unset($ifcfg['wireless'][$setting]); + } + } + } + + // Sync the mode on the clone creation page with the configured mode on the interface + if (interface_is_wireless_clone($ifcfg['if']) && isset($config['wireless']['clone']) && is_array($config['wireless']['clone'])) { + foreach ($config['wireless']['clone'] as &$clone) { + if ($clone['cloneif'] == $ifcfg['if']) { + if ($sync_changes) { + $clone['mode'] = $ifcfg['wireless']['mode']; + } else { + $ifcfg['wireless']['mode'] = $clone['mode']; + } + break; + } + } + unset($clone); + } +} + +function interface_wireless_configure($if, &$wl, &$wlcfg) { + global $config, $g; + + /* open up a shell script that will be used to output the commands. + * since wireless is changing a lot, these series of commands are fragile + * and will sometimes need to be verified by a operator by executing the command + * and returning the output of the command to the developers for inspection. please + * do not change this routine from a shell script to individual exec commands. -sullrich + */ + + // Remove script file + unlink_if_exists("{$g['tmp_path']}/{$if}_setup.sh"); + + // Clone wireless nic if needed. + interface_wireless_clone($if, $wl); + + // Reject inadvertent changes to shared settings in case the interface hasn't been configured. + interface_sync_wireless_clones($wl, false); + + $fd_set = fopen("{$g['tmp_path']}/{$if}_setup.sh","w"); + fwrite($fd_set, "#!/bin/sh\n"); + fwrite($fd_set, "# {$g['product_name']} wireless configuration script.\n\n"); + + /* set values for /path/program */ + $hostapd = "/usr/sbin/hostapd"; + $wpa_supplicant = "/usr/sbin/wpa_supplicant"; + $ifconfig = "/sbin/ifconfig"; + $sysctl = "/sbin/sysctl"; + $killall = "/usr/bin/killall"; + + /* Set all wireless ifconfig variables (split up to get rid of needed checking) */ + + $wlcmd = array(); + $wl_sysctl = array(); + /* Make sure it's up */ + $wlcmd[] = "up"; + /* Set a/b/g standard */ + $standard = str_replace(" Turbo", "", $wlcfg['standard']); + $wlcmd[] = "mode " . escapeshellarg($standard); + + /* XXX: Disable ampdu for now on mwl when running in 11n mode + * to prevent massive packet loss under certain conditions. */ + if(preg_match("/^mwl/i", $if) && ($standard == "11ng" || $standard == "11na")) + $wlcmd[] = "-ampdu"; + + /* Set ssid */ + if($wlcfg['ssid']) + $wlcmd[] = "ssid " .escapeshellarg($wlcfg['ssid']); + + /* Set 802.11g protection mode */ + $wlcmd[] = "protmode " . escapeshellarg($wlcfg['protmode']); + + /* set wireless channel value */ + if(isset($wlcfg['channel'])) { + if($wlcfg['channel'] == "0") { + $wlcmd[] = "channel any"; + } else { + $wlcmd[] = "channel " . escapeshellarg($wlcfg['channel']); + } + } + + /* Set antenna diversity value */ + if(isset($wlcfg['diversity'])) + $wl_sysctl[] = "diversity=" . escapeshellarg($wlcfg['diversity']); + + /* Set txantenna value */ + if(isset($wlcfg['txantenna'])) + $wl_sysctl[] = "txantenna=" . escapeshellarg($wlcfg['txantenna']); + + /* Set rxantenna value */ + if(isset($wlcfg['rxantenna'])) + $wl_sysctl[] = "rxantenna=" . escapeshellarg($wlcfg['rxantenna']); + + /* set Distance value */ + if($wlcfg['distance']) + $distance = escapeshellarg($wlcfg['distance']); + + /* Set wireless hostap mode */ + if ($wlcfg['mode'] == "hostap") { + $wlcmd[] = "mediaopt hostap"; + } else { + $wlcmd[] = "-mediaopt hostap"; + } + + /* Set wireless adhoc mode */ + if ($wlcfg['mode'] == "adhoc") { + $wlcmd[] = "mediaopt adhoc"; + } else { + $wlcmd[] = "-mediaopt adhoc"; + } + + /* Not neccesary to set BSS mode as this is default if adhoc and/or hostap is NOT set */ + + /* handle hide ssid option */ + if(isset($wlcfg['hidessid']['enable'])) { + $wlcmd[] = "hidessid"; + } else { + $wlcmd[] = "-hidessid"; + } + + /* handle pureg (802.11g) only option */ + if(isset($wlcfg['pureg']['enable'])) { + $wlcmd[] = "mode 11g pureg"; + } else { + $wlcmd[] = "-pureg"; + } + + /* handle puren (802.11n) only option */ + if(isset($wlcfg['puren']['enable'])) { + $wlcmd[] = "puren"; + } else { + $wlcmd[] = "-puren"; + } + + /* enable apbridge option */ + if(isset($wlcfg['apbridge']['enable'])) { + $wlcmd[] = "apbridge"; + } else { + $wlcmd[] = "-apbridge"; + } + + /* handle turbo option */ + if(isset($wlcfg['turbo']['enable'])) { + $wlcmd[] = "mediaopt turbo"; + } else { + $wlcmd[] = "-mediaopt turbo"; + } + + /* handle txpower setting */ + /* if($wlcfg['txpower'] <> "") + $wlcmd[] = "txpower " . escapeshellarg($wlcfg['txpower']); + */ + /* handle wme option */ + if(isset($wlcfg['wme']['enable'])) { + $wlcmd[] = "wme"; + } else { + $wlcmd[] = "-wme"; + } + + /* set up wep if enabled */ + $wepset = ""; + if (isset($wlcfg['wep']['enable']) && is_array($wlcfg['wep']['key'])) { + switch($wlcfg['wpa']['auth_algs']) { + case "1": + $wepset .= "authmode open wepmode on "; + break; + case "2": + $wepset .= "authmode shared wepmode on "; + break; + case "3": + $wepset .= "authmode mixed wepmode on "; + } + $i = 1; + foreach ($wlcfg['wep']['key'] as $wepkey) { + $wepset .= "wepkey " . escapeshellarg("{$i}:{$wepkey['value']}") . " "; + if (isset($wepkey['txkey'])) { + $wlcmd[] = "weptxkey {$i} "; + } + $i++; + } + $wlcmd[] = $wepset; + } else { + $wlcmd[] = "authmode open wepmode off "; + } + + kill_hostapd($if); + mwexec(kill_wpasupplicant("{$if}")); + + /* generate wpa_supplicant/hostap config if wpa is enabled */ + conf_mount_rw(); + + switch ($wlcfg['mode']) { + case 'bss': + if (isset($wlcfg['wpa']['enable'])) { + $wpa .= << $mtu) + $mtu = $portmtu; + } + } + } + + return $mtu; +} + +function interface_virtual_create($interface) { + global $config; + + if (strstr($interface, "_vlan")) { + interfaces_vlan_configure($vlan); + } else if (substr($interface, 0, 3) == "gre") { + interfaces_gre_configure(0, $interface); + } else if (substr($interface, 0, 3) == "gif") { + interfaces_gif_configure(0, $interface); + } else if (substr($interface, 0, 5) == "ovpns") { + if (is_array($config['openvpn']) && is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as $server) { + if ($interface == "ovpns{$server['vpnid']}") { + if (!function_exists('openvpn_resync')) + require_once('openvpn.inc'); + log_error("OpenVPN: Resync server {$server['description']}"); + openvpn_resync('server', $server); + } + } + unset($server); + } + } else if (substr($interface, 0, 5) == "ovpnc") { + if (is_array($config['openvpn']) && is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as $client) { + if ($interface == "ovpnc{$client['vpnid']}") { + if (!function_exists('openvpn_resync')) + require_once('openvpn.inc'); + log_error("OpenVPN: Resync server {$client['description']}"); + openvpn_resync('client', $client); + } + } + unset($client); + } + } else if (substr($interface, 0, 4) == "lagg") { + interfaces_lagg_configure($interface); + } else if (substr($interface, 0, 6) == "bridge") { + interfaces_bridge_configure(0, $interface); + } +} + +function interface_vlan_adapt_mtu($vlanifs, $mtu) { + global $config; + + if (!is_array($vlanifs)) + return; + + /* All vlans need to use the same mtu value as their parent. */ + foreach ($vlanifs as $vlan) { + $assignedport = convert_real_interface_to_friendly_interface_name($vlan['vlanif']); + if (!empty($assignedport)) { + if (!empty($config['interfaces'][$assignedport]['mtu'])) { + /* + * XXX: This is really never going to happen just keep the code for safety and readbility. + * It never happens since interface_vlan_mtu_configured finds the biggest mtu on vlans. + * Also if it has a lower mtu configured just respect user choice. + */ + if (intval($config['interfaces'][$assignedport]['mtu']) > $mtu) + pfSense_interface_mtu($vlan['vlanif'], $mtu); + } else { + if (get_interface_mtu($vlan['vlanif']) != $mtu) + pfSense_interface_mtu($vlan['vlanif'], $mtu); + } + } else if (get_interface_mtu($vlan['vlanif']) != $mtu) + pfSense_interface_mtu($vlan['vlanif'], $mtu); + } +} + +function interface_configure($interface = "wan", $reloadall = false, $linkupevent = false) { + global $config, $g; + global $interface_sn_arr_cache, $interface_ip_arr_cache; + global $interface_snv6_arr_cache, $interface_ipv6_arr_cache; + + $wancfg = $config['interfaces'][$interface]; + + if (!isset($wancfg['enable'])) + return; + + $realif = get_real_interface($interface); + $realhwif_array = get_parent_interface($interface); + // Need code to handle MLPPP if we ever use $realhwif for MLPPP handling + $realhwif = $realhwif_array[0]; + + if (!$g['booting'] && !(substr($realif, 0, 4) == "ovpn")) { + /* remove all IPv4 and IPv6 addresses */ + $tmpifaces = pfSense_getall_interface_addresses($realif); + if (is_array($tmpifaces)) { + foreach ($tmpifaces as $tmpiface) { + if (is_ipaddrv6($tmpiface) || is_subnetv6($tmpiface)) { + if (!is_linklocal($tmpiface)) + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$tmpiface} delete"); + } else { + if (is_subnetv4($tmpiface)) { + $tmpip = explode('/', $tmpiface); + $tmpip = $tmpip[0]; + } else + $tmpip = $tmpiface; + pfSense_interface_deladdress($realif, $tmpip); + } + } + } + + /* only bring down the interface when both v4 and v6 are set to NONE */ + if (empty($wancfg['ipaddr']) && empty($wancfg['ipaddrv6'])) + interface_bring_down($interface); + } + + $interface_to_check = $realif; + switch ($wancfg['ipaddr']) { + case 'pppoe': + case 'l2tp': + case 'pptp': + case 'ppp': + $interface_to_check = $realhwif; + break; + } + + /* Need to check that the interface exists or not in the case where its coming back from disabled state see #3270 */ + if (in_array(substr($realif, 0, 3), array("gre", "gif")) || !does_interface_exist($interface_to_check)) + interface_virtual_create($interface_to_check); + + /* Disable Accepting router advertisements unless specifically requested */ + if ($g['debug']) + log_error("Deny router advertisements for interface {$interface}"); + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 -accept_rtadv"); + + /* wireless configuration? */ + if (is_array($wancfg['wireless'])) + interface_wireless_configure($realif, $wancfg, $wancfg['wireless']); + + $mac = get_interface_mac($realhwif); + /* + * Don't try to reapply the spoofed MAC if it's already applied. + * When ifconfig link is used, it cycles the interface down/up, which triggers + * the interface config again, which attempts to spoof the MAC again, + * which cycles the link again... + */ + if ($wancfg['spoofmac'] && ($wancfg['spoofmac'] != $mac)) { + mwexec("/sbin/ifconfig " . escapeshellarg($realhwif) . + " link " . escapeshellarg($wancfg['spoofmac'])); + + /* + * All vlans need to spoof their parent mac address, too. see + * ticket #1514: http://cvstrac.pfsense.com/tktview?tn=1514,33 + */ + if (is_array($config['vlans']['vlan'])) { + foreach ($config['vlans']['vlan'] as $vlan) { + if ($vlan['if'] == $realhwif) + mwexec("/sbin/ifconfig " . escapeshellarg($vlan['vlanif']) . + " link " . escapeshellarg($wancfg['spoofmac'])); + } + } + } else { + + if ($mac == "ff:ff:ff:ff:ff:ff") { + /* this is not a valid mac address. generate a + * temporary mac address so the machine can get online. + */ + echo gettext("Generating new MAC address."); + $random_mac = generate_random_mac_address(); + mwexec("/sbin/ifconfig " . escapeshellarg($realhwif) . + " link " . escapeshellarg($random_mac)); + $wancfg['spoofmac'] = $random_mac; + write_config(); + file_notice("MAC Address altered", sprintf(gettext('The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been automatically replaced with %2$s'), $realif, $random_mac), "Interfaces"); + } + } + + /* media */ + if ($wancfg['media'] || $wancfg['mediaopt']) { + $cmd = "/sbin/ifconfig " . escapeshellarg($realhwif); + if ($wancfg['media']) + $cmd .= " media " . escapeshellarg($wancfg['media']); + if ($wancfg['mediaopt']) + $cmd .= " mediaopt " . escapeshellarg($wancfg['mediaopt']); + mwexec($cmd); + } + $options = pfSense_get_interface_addresses($realhwif); + + /* skip vlans for checksumming and polling */ + if (!stristr($realif, "_vlan") && is_array($options)) { + $flags_on = 0; + $flags_off = 0; + if(isset($config['system']['disablechecksumoffloading'])) { + if (isset($options['encaps']['txcsum'])) + $flags_off |= IFCAP_TXCSUM; + if (isset($options['encaps']['rxcsum'])) + $flags_off |= IFCAP_RXCSUM; + } else { + if (isset($options['caps']['txcsum'])) + $flags_on |= IFCAP_TXCSUM; + if (isset($options['caps']['rxcsum'])) + $flags_on |= IFCAP_RXCSUM; + } + + if(isset($config['system']['disablesegmentationoffloading'])) + $flags_off |= IFCAP_TSO; + else if (isset($options['caps']['tso']) || isset($options['caps']['tso4']) || isset($options['caps']['tso6'])) + $flags_on |= IFCAP_TSO; + + if(isset($config['system']['disablelargereceiveoffloading'])) + $flags_off |= IFCAP_LRO; + else if (isset($options['caps']['lro'])) + $flags_on |= IFCAP_LRO; + + /* if the NIC supports polling *AND* it is enabled in the GUI */ + if (!isset($config['system']['polling'])) + $flags_off |= IFCAP_POLLING; + else if (isset($options['caps']['polling'])) + $flags_on |= IFCAP_POLLING; + + pfSense_interface_capabilities($realhwif, -$flags_off); + pfSense_interface_capabilities($realhwif, $flags_on); + } + + /* invalidate interface/ip/sn cache */ + get_interface_arr(true); + unset($interface_ip_arr_cache[$realif]); + unset($interface_sn_arr_cache[$realif]); + unset($interface_ipv6_arr_cache[$realif]); + unset($interface_snv6_arr_cache[$realif]); + + $tunnelif = substr($realif, 0, 3); + switch ($wancfg['ipaddr']) { + case 'dhcp': + interface_dhcp_configure($interface); + break; + case 'pppoe': + case 'l2tp': + case 'pptp': + case 'ppp': + interface_ppps_configure($interface); + break; + default: + /* XXX: Kludge for now related to #3280 */ + if (!in_array($tunnelif, array("gif", "gre", "ovp"))) { + if (is_ipaddrv4($wancfg['ipaddr']) && $wancfg['subnet'] <> "") + pfSense_interface_setaddress($realif, "{$wancfg['ipaddr']}/{$wancfg['subnet']}"); + } + break; + } + + switch ($wancfg['ipaddrv6']) { + case 'slaac': + case 'dhcp6': + interface_dhcpv6_configure($interface, $wancfg); + break; + case '6rd': + interface_6rd_configure($interface, $wancfg); + break; + case '6to4': + interface_6to4_configure($interface, $wancfg); + break; + case 'track6': + interface_track6_configure($interface, $wancfg, $linkupevent); + break; + default: + /* XXX: Kludge for now related to #3280 */ + if (!in_array($tunnelif, array("gif", "gre", "ovp"))) { + if (is_ipaddrv6($wancfg['ipaddrv6']) && $wancfg['subnetv6'] <> "") { + //pfSense_interface_setaddress($realif, "{$wancfg['ipaddrv6']}/{$wancfg['subnetv6']}"); + // FIXME: Add IPv6 Support to the pfSense module + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$wancfg['ipaddrv6']} prefixlen " . escapeshellarg($wancfg['subnetv6'])); + } + } + break; + } + + if (!empty($wancfg['mtu'])) { + if (stristr($realif, "_vlan")) { + $assignedparent = convert_real_interface_to_friendly_interface_name($realhwif); + if (!empty($assignedparent) && !empty($config['interfaces'][$assignedparent]['mtu'])) + $parentmtu = $config['interfaces'][$assignedparent]['mtu']; + else + $parentmtu = interface_vlan_mtu_configured($realhwif, $wancfg['mtu']); + + if ($wancfg['mtu'] > $parentmtu) { + if (get_interface_mtu($realhwif) != $wancfg['mtu']) + pfSense_interface_mtu($realhwif, $wancfg['mtu']); + + /* All vlans need to use the same mtu value as their parent. */ + interface_vlan_adapt_mtu(link_interface_to_vlans($realhwif), $wancfg['mtu']); + } else + pfSense_interface_mtu($realif, $wancfg['mtu']); + } else { + if ($wancfg['mtu'] != get_interface_mtu($realif)) + pfSense_interface_mtu($realif, $wancfg['mtu']); + + /* This case is needed when the parent of vlans is being configured */ + interface_vlan_adapt_mtu(link_interface_to_vlans($realif), $wancfg['mtu']); + } + /* XXX: What about gre/gif/lagg/.. ? */ + } + + if (does_interface_exist($wancfg['if'])) + interfaces_bring_up($wancfg['if']); + + interface_netgraph_needed($interface); + + if (!$g['booting']) { + link_interface_to_vips($interface, "update"); + + unset($gre); + $gre = link_interface_to_gre($interface); + if (!empty($gre)) + array_walk($gre, 'interface_gre_configure'); + + unset($gif); + $gif = link_interface_to_gif($interface); + if (!empty($gif)) + array_walk($gif, 'interface_gif_configure'); + + if ($linkupevent == false || substr($realif, 0, 4) == "ovpn") { + unset($bridgetmp); + $bridgetmp = link_interface_to_bridge($interface); + if (!empty($bridgetmp)) + interface_bridge_add_member($bridgetmp, $realif); + } + + $grouptmp = link_interface_to_group($interface); + if (!empty($grouptmp)) + array_walk($grouptmp, 'interface_group_add_member'); + + if ($interface == "lan") + /* make new hosts file */ + system_hosts_generate(); + + if ($reloadall == true) { + + /* reconfigure static routes (kernel may have deleted them) */ + system_routing_configure($interface); + + /* reload ipsec tunnels */ + vpn_ipsec_configure(); + + /* restart dnsmasq or unbound */ + if (isset($config['dnsmasq']['enable'])) + services_dnsmasq_configure(); + elseif (isset($config['unbound']['enable'])) + services_unbound_configure(); + + /* update dyndns */ + send_event("service reload dyndns {$interface}"); + + /* XXX: which CPZONE? Needed? */ + /* reload captive portal */ + captiveportal_init_rules(); + } + } + + interfaces_staticarp_configure($interface); + return 0; +} + +function interface_track6_configure($interface = "lan", $wancfg, $linkupevent = false) { + global $config, $g; + + if (!is_array($wancfg)) + return; + + if (!isset($wancfg['enable'])) + return; + + /* If the interface is not configured via another, exit */ + if (empty($wancfg['track6-interface'])) + return; + + /* always configure a link-local of fe80::1:1 on the track6 interfaces */ + $realif = get_real_interface($interface); + $linklocal = find_interface_ipv6_ll($realif); + if (!empty($linklocal)) + mwexec("/sbin/ifconfig {$realif} inet6 {$linklocal} delete"); + /* XXX: This might break for good on a carp installation using link-local as network ips */ + /* XXX: Probably should remove? */ + mwexec("/sbin/ifconfig {$realif} inet6 fe80::1:1%{$realif}"); + + $trackcfg = $config['interfaces'][$wancfg['track6-interface']]; + if (!isset($trackcfg['enable'])) { + log_error("Interface {$interface} tracking non-existant interface {$wancfg['track6-interface']}"); + return; + } + + switch($trackcfg['ipaddrv6']) { + case "6to4": + if ($g['debug']) + log_error("Interface {$interface} configured via {$wancfg['track6-interface']} type {$type}"); + interface_track6_6to4_configure($interface, $wancfg); + break; + case "6rd": + if ($g['debug']) + log_error("Interface {$interface} configured via {$wancfg['track6-interface']} type {$type}"); + interface_track6_6rd_configure($interface, $wancfg); + break; + case "dhcp6": + if ($linkupevent == true) { + /* + * NOTE: Usually come here from rc.linkup calling so just call directly intead of generating event + * Instead of disrupting all other v4 configuration just restart DHCPv6 client for now + * + * XXX: Probably DHCPv6 client should handle this autmagically itself? + */ + $parentrealif = get_real_interface($wancfg['track6-interface']); + $pidv6 = find_dhcp6c_process($parentrealif); + if($pidv6) + posix_kill($pidv6, SIGHUP); + } + break; + } + + if (!$g['booting'] && $linkupevent == false) { + if (!function_exists('services_dhcpd_configure')) + require_once("services.inc"); + + services_dhcpd_configure("inet6"); + } + + return 0; +} + +function interface_track6_6rd_configure($interface = "lan", $lancfg) { + global $config, $g; + global $interface_ipv6_arr_cache; + global $interface_snv6_arr_cache; + + if (!is_array($lancfg)) + return; + + /* If the interface is not configured via another, exit */ + if (empty($lancfg['track6-interface'])) + return; + + $wancfg = $config['interfaces'][$lancfg['track6-interface']]; + if (empty($wancfg)) { + log_error("Interface {$interface} tracking non-existant interface {$lancfg['track6-interface']}"); + return; + } + + $ip4address = get_interface_ip($lancfg['track6-interface']); + if (!is_ipaddrv4($ip4address)) { /* XXX: This should not be needed by 6rd || (is_private_ip($ip4address))) { */ + log_error("The interface IPv4 '{$ip4address}' address on interface '{$lancfg['track6-interface']}' is not public, not configuring 6RD tunnel"); + return; + } + $hexwanv4 = return_hex_ipv4($ip4address); + + /* create the long prefix notation for math, save the prefix length */ + $rd6prefix = explode("/", $wancfg['prefix-6rd']); + $rd6prefixlen = $rd6prefix[1]; + $rd6prefix = Net_IPv6::uncompress($rd6prefix[0]); + + /* binary presentation of the prefix for all 128 bits. */ + $rd6lanbin = convert_ipv6_to_128bit($rd6prefix); + + /* just save the left prefix length bits */ + $rd6lanbin = substr($rd6lanbin, 0, $rd6prefixlen); + /* add the v4 address, offset n bits from the left */ + $rd6lanbin .= substr(sprintf("%032b", hexdec($hexwanv4)), (0 + $wancfg['prefix-6rd-v4plen']), 32); + + /* add the custom prefix id, max 32bits long? (64 bits - (prefixlen + (32 - v4plen)) */ + /* 64 - (37 + (32 - 17)) = 8 == /52 */ + $restbits = 64 - ($rd6prefixlen + (32 - $wancfg['prefix-6rd-v4plen'])); + // echo "64 - (prefixlen {$rd6prefixlen} + v4len (32 - {$wancfg['prefix-6rd-v4plen']})) = {$restbits} \n"; + $rd6lanbin .= substr(sprintf("%032b", str_pad($lancfg['track6-prefix-id'], 32, "0", STR_PAD_LEFT)), (32 - $restbits), 32); + /* fill the rest out with zeros */ + $rd6lanbin = str_pad($rd6lanbin, 128, "0", STR_PAD_RIGHT); + + /* convert the 128 bits for the lan address back into a valid IPv6 address */ + $rd6lan = convert_128bit_to_ipv6($rd6lanbin) ."1"; + + $lanif = get_real_interface($interface); + $oip = find_interface_ipv6($lanif); + if (is_ipaddrv6($oip)) + mwexec("/sbin/ifconfig {$lanif} inet6 {$oip} delete"); + unset($interface_ipv6_arr_cache[$lanif]); + unset($interface_snv6_arr_cache[$lanif]); + log_error("rd6 {$interface} with ipv6 address {$rd6lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}"); + mwexec("/sbin/ifconfig {$lanif} inet6 {$rd6lan} prefixlen 64"); + + return 0; +} + +function interface_track6_6to4_configure($interface = "lan", $lancfg) { + global $config, $g; + global $interface_ipv6_arr_cache; + global $interface_snv6_arr_cache; + + if (!is_array($lancfg)) + return; + + /* If the interface is not configured via another, exit */ + if (empty($lancfg['track6-interface'])) + return; + + $wancfg = $config['interfaces'][$lancfg['track6-interface']]; + if (empty($wancfg)) { + log_error("Interface {$interface} tracking non-existant interface {$lancfg['track6-interface']}"); + return; + } + + $ip4address = get_interface_ip($lancfg['track6-interface']); + if (!is_ipaddrv4($ip4address) || is_private_ip($ip4address)) { + log_error("The interface IPv4 '{$ip4address}' address on interface '{$lancfg['track6-interface']}' is not public, not configuring 6RD tunnel"); + return; + } + $hexwanv4 = return_hex_ipv4($ip4address); + + /* create the long prefix notation for math, save the prefix length */ + $sixto4prefix = "2002::"; + $sixto4prefixlen = 16; + $sixto4prefix = Net_IPv6::uncompress($sixto4prefix); + + /* binary presentation of the prefix for all 128 bits. */ + $sixto4lanbin = convert_ipv6_to_128bit($sixto4prefix); + + /* just save the left prefix length bits */ + $sixto4lanbin = substr($sixto4lanbin, 0, $sixto4prefixlen); + /* add the v4 address */ + $sixto4lanbin .= sprintf("%032b", hexdec($hexwanv4)); + /* add the custom prefix id */ + $sixto4lanbin .= sprintf("%016b", $lancfg['track6-prefix-id']); + /* fill the rest out with zeros */ + $sixto4lanbin = str_pad($sixto4lanbin, 128, "0", STR_PAD_RIGHT); + + /* convert the 128 bits for the lan address back into a valid IPv6 address */ + $sixto4lan = convert_128bit_to_ipv6($sixto4lanbin) ."1"; + + $lanif = get_real_interface($interface); + $oip = find_interface_ipv6($lanif); + if (is_ipaddrv6($oip)) + mwexec("/sbin/ifconfig {$lanif} inet6 {$oip} delete"); + unset($interface_ipv6_arr_cache[$lanif]); + unset($interface_snv6_arr_cache[$lanif]); + log_error("sixto4 {$interface} with ipv6 address {$sixto4lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}"); + mwexec("/sbin/ifconfig {$lanif} inet6 {$sixto4lan} prefixlen 64"); + + return 0; +} + +function interface_6rd_configure($interface = "wan", $wancfg) { + global $config, $g; + + /* because this is a tunnel interface we can only function + * with a public IPv4 address on the interface */ + + if (!is_array($wancfg)) + return; + + if (!is_module_loaded('if_stf.ko')) + mwexec('/sbin/kldload if_stf.ko'); + + $wanif = get_real_interface($interface); + $ip4address = find_interface_ip($wanif); + if ((!is_ipaddrv4($ip4address)) || (is_private_ip($ip4address))) { + log_error("The interface IPv4 '{$ip4address}' address on interface '{$wanif}' is not public, not configuring 6RD tunnel"); + return false; + } + $hexwanv4 = return_hex_ipv4($ip4address); + + if (!is_numeric($wancfg['prefix-6rd-v4plen'])) + $wancfg['prefix-6rd-v4plen'] = 0; + + /* create the long prefix notation for math, save the prefix length */ + $rd6prefix = explode("/", $wancfg['prefix-6rd']); + $rd6prefixlen = $rd6prefix[1]; + $rd6prefix = Net_IPv6::uncompress($rd6prefix[0]); + + /* binary presentation of the prefix for all 128 bits. */ + $rd6prefixbin = convert_ipv6_to_128bit($rd6prefix); + + /* just save the left prefix length bits */ + $rd6prefixbin = substr($rd6prefixbin, 0, $rd6prefixlen); + /* if the prefix length is not 32 bits we need to shave bits off from the left of the v4 address. */ + $rd6prefixbin .= substr(sprintf("%032b", hexdec($hexwanv4)), $wancfg['prefix-6rd-v4plen'], 32); + /* fill out the rest with 0's */ + $rd6prefixbin = str_pad($rd6prefixbin, 128, "0", STR_PAD_RIGHT); + + /* convert the 128 bits for the broker address back into a valid IPv6 address */ + $rd6prefix = convert_128bit_to_ipv6($rd6prefixbin); + + $rd6brgw = "{$rd6prefix}{$wancfg['gateway-6rd']}"; + + /* XXX: need to extend to support variable prefix size for v4 */ + if (!is_module_loaded("if_stf")) + mwexec("/sbin/kldload if_stf.ko"); + $stfiface = "{$interface}_stf"; + if (does_interface_exist($stfiface)) + pfSense_interface_destroy($stfiface); + $tmpstfiface = pfSense_interface_create("stf"); + pfSense_interface_rename($tmpstfiface, $stfiface); + pfSense_interface_flags($stfiface, IFF_LINK2); + if ($wancfg['prefix-6rd-v4plen'] > 0) + $rd6prefixlen += intval($wancfg['prefix-6rd-v4plen']); + else + $rd6prefixlen += 32; + mwexec("/sbin/ifconfig {$stfiface} inet6 {$rd6prefix}/{$rd6prefixlen}"); + mwexec("/sbin/ifconfig {$stfiface} stfv4br " . escapeshellarg($wancfg['gateway-6rd'])); + if ($wancfg['prefix-6rd-v4plen'] > 0 && $wancfg['prefix-6rd-v4plen'] < 32) + mwexec("/sbin/ifconfig {$stfiface} stfv4net {$ip4address}/{$wancfg['prefix-6rd-v4plen']}"); + if ($g['debug']) + log_error("Created 6rd interface {$stfiface} {$rd6prefix}/{$rd6prefixlen}"); + + /* write out a default router file */ + file_put_contents("{$g['tmp_path']}/{$wanif}_routerv6", "{$rd6brgw}\n"); + file_put_contents("{$g['tmp_path']}/{$wanif}_defaultgwv6", "{$rd6brgw}\n"); + + $ip4gateway = get_interface_gateway($interface); + if (is_ipaddrv4($ip4gateway)) + mwexec("/sbin/route change -host " . escapeshellarg($wancfg['gateway-6rd']) . " {$ip4gateway}"); + + /* configure dependent interfaces */ + if (!$g['booting']) + link_interface_to_track6($interface, "update"); + + return 0; +} + +function interface_6to4_configure($interface = "wan", $wancfg){ + global $config, $g; + + /* because this is a tunnel interface we can only function + * with a public IPv4 address on the interface */ + + if (!is_array($wancfg)) + return; + + $wanif = get_real_interface($interface); + $ip4address = find_interface_ip($wanif); + if((!is_ipaddrv4($ip4address)) || (is_private_ip($ip4address))) { + log_error("The interface IPv4 '{$ip4address}' address on interface '{$wanif}' is not public, not configuring 6RD tunnel"); + return false; + } + + /* create the long prefix notation for math, save the prefix length */ + $stfprefixlen = 16; + $stfprefix = Net_IPv6::uncompress("2002::"); + $stfarr = explode(":", $stfprefix); + $v4prefixlen = "0"; + + /* we need the hex form of the interface IPv4 address */ + $ip4arr = explode(".", $ip4address); + $hexwanv4 = ""; + foreach($ip4arr as $octet) + $hexwanv4 .= sprintf("%02x", $octet); + + /* we need the hex form of the broker IPv4 address */ + $ip4arr = explode(".", "192.88.99.1"); + $hexbrv4 = ""; + foreach($ip4arr as $octet) + $hexbrv4 .= sprintf("%02x", $octet); + + /* binary presentation of the prefix for all 128 bits. */ + $stfprefixbin = ""; + foreach($stfarr as $element) { + $stfprefixbin .= sprintf("%016b", hexdec($element)); + } + /* just save the left prefix length bits */ + $stfprefixstartbin = substr($stfprefixbin, 0, $stfprefixlen); + + /* if the prefix length is not 32 bits we need to shave bits off from the left of the v4 address. */ + $stfbrokerbin = substr(sprintf("%032b", hexdec($hexbrv4)), $v4prefixlen, 32); + $stfbrokerbin = str_pad($stfprefixstartbin . $stfbrokerbin, 128, "0", STR_PAD_RIGHT); + + /* for the local subnet too. */ + $stflanbin = substr(sprintf("%032b", hexdec($hexwanv4)), $v4prefixlen, 32); + $stflanbin = str_pad($stfprefixstartbin . $stflanbin, 128, "0", STR_PAD_RIGHT); + + /* convert the 128 bits for the broker address back into a valid IPv6 address */ + $stfbrarr = array(); + $stfbrbinarr = array(); + $stfbrbinarr = str_split($stfbrokerbin, 16); + foreach($stfbrbinarr as $bin) + $stfbrarr[] = dechex(bindec($bin)); + $stfbrgw = Net_IPv6::compress(implode(":", $stfbrarr)); + + /* convert the 128 bits for the broker address back into a valid IPv6 address */ + $stflanarr = array(); + $stflanbinarr = array(); + $stflanbinarr = str_split($stflanbin, 16); + foreach($stflanbinarr as $bin) + $stflanarr[] = dechex(bindec($bin)); + $stflanpr = Net_IPv6::compress(implode(":", $stflanarr)); + $stflanarr[7] = 1; + $stflan = Net_IPv6::compress(implode(":", $stflanarr)); + + /* setup the stf interface */ + if (!is_module_loaded("if_stf")) + mwexec("/sbin/kldload if_stf.ko"); + $stfiface = "{$interface}_stf"; + if (does_interface_exist($stfiface)) + pfSense_interface_destroy($stfiface); + $tmpstfiface = pfSense_interface_create("stf"); + pfSense_interface_rename($tmpstfiface, $stfiface); + pfSense_interface_flags($stfiface, IFF_LINK2); + mwexec("/sbin/ifconfig {$stfiface} inet6 {$stflanpr} prefixlen 16"); + + if ($g['debug']) + log_error("Set IPv6 address inet6 {$stflanpr} prefixlen 16 for {$stfiface}, route {$stfbrgw}"); + + /* write out a default router file */ + file_put_contents("{$g['tmp_path']}/{$wanif}_routerv6", "{$stfbrgw}"); + file_put_contents("{$g['tmp_path']}/{$wanif}_defaultgwv6", "{$stfbrgw}"); + + $ip4gateway = get_interface_gateway($interface); + if (is_ipaddrv4($ip4gateway)) + mwexec("/sbin/route change -host 192.88.99.1 {$ip4gateway}"); + + if (!$g['booting']) + link_interface_to_track6($interface, "update"); + + return 0; +} + +function interface_dhcpv6_configure($interface = "wan", $wancfg) { + global $config, $g; + + if (!is_array($wancfg)) + return; + + $wanif = get_real_interface($interface, "inet6"); + $dhcp6cconf = ""; + $dhcp6cconf .= "interface {$wanif} {\n"; + + /* for SLAAC interfaces we do fire off a dhcp6 client for just our name servers */ + if($wancfg['ipaddrv6'] == "slaac") { + $dhcp6cconf .= " information-only;\n"; + $dhcp6cconf .= " request domain-name-servers;\n"; + $dhcp6cconf .= " request domain-name;\n"; + $dhcp6cconf .= " script \"{$g['varetc_path']}/dhcp6c_{$interface}_script.sh\"; # we'd like some nameservers please\n"; + $dhcp6cconf .= "};\n"; + } else { + /* skip address request if this is set */ + if(!isset($wancfg['dhcp6prefixonly'])) + $dhcp6cconf .= " send ia-na 0; # request stateful address\n"; + if(is_numeric($wancfg['dhcp6-ia-pd-len'])) + $dhcp6cconf .= " send ia-pd 0; # request prefix delegation\n"; + + $dhcp6cconf .= "\trequest domain-name-servers;\n"; + $dhcp6cconf .= "\trequest domain-name;\n"; + $dhcp6cconf .= "\tscript \"{$g['varetc_path']}/dhcp6c_{$interface}_script.sh\"; # we'd like some nameservers please\n"; + + $dhcp6cconf .= "};\n"; + + if(!isset($wancfg['dhcp6prefixonly'])) + $dhcp6cconf .= "id-assoc na 0 { };\n"; + + if(is_numeric($wancfg['dhcp6-ia-pd-len'])) { + /* Setup the prefix delegation */ + $dhcp6cconf .= "id-assoc pd 0 {\n"; + $preflen = 64 - $wancfg['dhcp6-ia-pd-len']; + if (isset($wancfg['dhcp6-ia-pd-send-hint'])) + $dhcp6cconf .= " prefix ::/{$preflen} infinity;\n"; + $iflist = link_interface_to_track6($interface); + foreach ($iflist as $friendly => $ifcfg) { + if (is_numeric($ifcfg['track6-prefix-id'])) { + if ($g['debug']) + log_error("setting up $ifdescr - {$ifcfg['track6-prefix-id']}"); + $realif = get_real_interface($friendly); + $dhcp6cconf .= " prefix-interface {$realif} {\n"; + $dhcp6cconf .= " sla-id {$ifcfg['track6-prefix-id']};\n"; + $dhcp6cconf .= " sla-len {$wancfg['dhcp6-ia-pd-len']};\n"; + $dhcp6cconf .= " };\n"; + } + } + unset($preflen, $iflist, $ifcfg); + $dhcp6cconf .= "};\n"; + } + } + + // DHCP6 Config File Advanced + if ($wancfg['adv_dhcp6_config_advanced']) { $dhcp6cconf = DHCP6_Config_File_Advanced($interface, $wancfg, $wanif); } + + // DHCP6 Config File Override + if ($wancfg['adv_dhcp6_config_file_override']) { $dhcp6cconf = DHCP6_Config_File_Override($wancfg, $wanif); } + + /* wide-dhcp6c works for now. */ + if (!@file_put_contents("{$g['varetc_path']}/dhcp6c_{$interface}.conf", $dhcp6cconf)) { + printf("Error: cannot open dhcp6c_{$interface}.conf in interface_dhcpv6_configure() for writing.\n"); + unset($dhcp6cconf); + return 1; + } + unset($dhcp6cconf); + + $dhcp6cscript = "#!/bin/sh\n"; + $dhcp6cscript .= "# This shell script launches /etc/rc.newwanipv6 with a interface argument.\n"; + $dhcp6cscript .= "dmips=\${new_domain_name_servers}\n"; + $dhcp6cscript .= "dmnames=\${new_domain_name}\n"; + $dhcp6cscript .= "/usr/local/sbin/fcgicli -f /etc/rc.newwanipv6 -d \"interface={$wanif}&dmnames=\${dmnames}&dmips=\${dmips}\"\n"; + /* Add wide-dhcp6c shell script here. Because we can not pass a argument to it. */ + if (!@file_put_contents("{$g['varetc_path']}/dhcp6c_{$interface}_script.sh", $dhcp6cscript)) { + printf("Error: cannot open dhcp6c_{$interface}_script.sh in interface_dhcpv6_configure() for writing.\n"); + unset($dhcp6cscript); + return 1; + } + unset($dhcp6cscript); + @chmod("{$g['varetc_path']}/dhcp6c_{$interface}_script.sh", 0755); + + $rtsoldscript = "#!/bin/sh\n"; + $rtsoldscript .= "# This shell script launches dhcp6c and configured gateways for this interface.\n"; + $rtsoldscript .= "echo $2 > {$g['tmp_path']}/{$wanif}_routerv6\n"; + $rtsoldscript .= "echo $2 > {$g['tmp_path']}/{$wanif}_defaultgwv6\n"; + $rtsoldscript .= "if [ -f {$g['varrun_path']}/dhcp6c_{$wanif}.pid ]; then\n"; + $rtsoldscript .= "\t/bin/pkill -F {$g['varrun_path']}/dhcp6c_{$wanif}.pid\n"; + $rtsoldscript .= "\t/bin/sleep 1\n"; + $rtsoldscript .= "fi\n"; + $rtsoldscript .= "/usr/local/sbin/dhcp6c -d -c {$g['varetc_path']}/dhcp6c_{$interface}.conf -p {$g['varrun_path']}/dhcp6c_{$wanif}.pid {$wanif}\n"; + $rtsoldscript .= "/usr/bin/logger -t rtsold \"Starting dhcp6 client for interface {$interface}({$wanif})\"\n"; + /* Add wide-dhcp6c shell script here. Because we can not pass a argument to it. */ + if (!@file_put_contents("{$g['varetc_path']}/rtsold_{$wanif}_script.sh", $rtsoldscript)) { + printf("Error: cannot open rtsold_{$interface}_script.sh in interface_dhcpv6_configure() for writing.\n"); + unset($rtsoldscript); + return 1; + } + unset($rtsoldscript); + @chmod("{$g['varetc_path']}/rtsold_{$wanif}_script.sh", 0755); + + /* accept router advertisements for this interface */ + set_single_sysctl("net.inet6.ip6.accept_rtadv", "1"); + log_error("Accept router advertisements on interface {$wanif} "); + mwexec("/sbin/ifconfig {$wanif} inet6 accept_rtadv"); + + /* fire up rtsold for IPv6 RAs first, this backgrounds immediately. It will call dhcp6c */ + if (isvalidpid("{$g['varrun_path']}/rtsold_{$wanif}.pid")) { + killbypid("{$g['varrun_path']}/rtsold_{$wanif}.pid"); + sleep(2); + } + mwexec("/usr/sbin/rtsold -1 -p {$g['varrun_path']}/rtsold_{$wanif}.pid -O {$g['varetc_path']}/rtsold_{$wanif}_script.sh {$wanif}"); + + /* NOTE: will be called from rtsold invoked script + * link_interface_to_track6($interface, "update"); + */ + + return 0; +} + +function DHCP6_Config_File_Advanced($interface, $wancfg, $wanif) { + global $g; + + $send_options = ""; + if ($wancfg['adv_dhcp6_interface_statement_send_options'] != '') { + $options = split(",", $wancfg['adv_dhcp6_interface_statement_send_options']); + foreach ($options as $option) { + $send_options .= "\tsend " . trim($option) . ";\n"; + } + } + + $request_options = ""; + if ($wancfg['adv_dhcp6_interface_statement_request_options'] != '') { + $options = split(",", $wancfg['adv_dhcp6_interface_statement_request_options']); + foreach ($options as $option) { + $request_options .= "\trequest " . trim($option) . ";\n"; + } + } + + $information_only = ""; + if ($wancfg['adv_dhcp6_interface_statement_information_only_enable'] != '') + $information_only = "\tinformation-only;\n"; + + $script = "\tscript \"{$g['varetc_path']}/dhcp6c_{$interface}_script.sh\";\n"; + if ($wancfg['adv_dhcp6_interface_statement_script'] != '') + $script = "\tscript \"{$wancfg['adv_dhcp6_interface_statement_script']}\";\n"; + + $interface_statement = "interface"; + $interface_statement .= " {$wanif}"; + $interface_statement .= " {\n"; + $interface_statement .= "$send_options"; + $interface_statement .= "$request_options"; + $interface_statement .= "$information_only"; + $interface_statement .= "$script"; + $interface_statement .= "};\n"; + + $id_assoc_statement_address = ""; + if ($wancfg['adv_dhcp6_id_assoc_statement_address_enable'] != '') { + $id_assoc_statement_address .= "id-assoc"; + $id_assoc_statement_address .= " na"; + if (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_address_id'])) + $id_assoc_statement_address .= " {$wancfg['adv_dhcp6_id_assoc_statement_address_id']}"; + $id_assoc_statement_address .= " { "; + + if ( ($wancfg['adv_dhcp6_id_assoc_statement_address'] != '') && + (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_address_pltime']) || + ($wancfg['adv_dhcp6_id_assoc_statement_address_pltime'] == 'infinity')) ) { + $id_assoc_statement_address .= "\n\taddress"; + $id_assoc_statement_address .= " {$wancfg['adv_dhcp6_id_assoc_statement_address']}"; + $id_assoc_statement_address .= " {$wancfg['adv_dhcp6_id_assoc_statement_address_pltime']}"; + if ( (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_address_vltime'])) || + ($wancfg['adv_dhcp6_id_assoc_statement_address_vltime'] == 'infinity') ) + $id_assoc_statement_address .= " {$wancfg['adv_dhcp6_id_assoc_statement_address_vltime']}"; + $id_assoc_statement_address .= ";\n"; + } + + $id_assoc_statement_address .= "};\n"; + } + + $id_assoc_statement_prefix = ""; + if ($wancfg['adv_dhcp6_id_assoc_statement_prefix_enable'] != '') { + $id_assoc_statement_prefix .= "id-assoc"; + $id_assoc_statement_prefix .= " pd"; + if (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_prefix_id'])) + $id_assoc_statement_prefix .= " {$wancfg['adv_dhcp6_id_assoc_statement_prefix_id']}"; + $id_assoc_statement_prefix .= " { "; + + if ( ($wancfg['adv_dhcp6_id_assoc_statement_prefix'] != '') && + (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime']) || + ($wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime'] == 'infinity')) ) { + $id_assoc_statement_prefix .= "\n\tprefix"; + $id_assoc_statement_prefix .= " {$wancfg['adv_dhcp6_id_assoc_statement_prefix']}"; + $id_assoc_statement_prefix .= " {$wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime']}"; + if ( (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime'])) || + ($wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime'] == 'infinity') ) + $id_assoc_statement_prefix .= " {$wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime']}"; + $id_assoc_statement_prefix .= ";"; + } + + if (is_numeric($wancfg['adv_dhcp6_prefix_interface_statement_sla_id'])) { + $id_assoc_statement_prefix .= "\n\tprefix-interface"; + $id_assoc_statement_prefix .= " {$wanif}"; + $id_assoc_statement_prefix .= " {\n"; + $id_assoc_statement_prefix .= "\t\tsla-id {$wancfg['adv_dhcp6_prefix_interface_statement_sla_id']};\n"; + if ( ($wancfg['adv_dhcp6_prefix_interface_statement_sla_len'] >= 0) && + ($wancfg['adv_dhcp6_prefix_interface_statement_sla_len'] <= 128) ) + $id_assoc_statement_prefix .= "\t\tsla-len {$wancfg['adv_dhcp6_prefix_interface_statement_sla_len']};\n"; + $id_assoc_statement_prefix .= "\t};"; + } + + if ( ($wancfg['adv_dhcp6_id_assoc_statement_prefix'] != '') || + (is_numeric($wancfg['adv_dhcp6_prefix_interface_statement_sla_id'])) ) { + $id_assoc_statement_prefix .= "\n"; + } + + $id_assoc_statement_prefix .= "};\n"; + } + + $authentication_statement = ""; + if ( ($wancfg['adv_dhcp6_authentication_statement_authname'] != '') && + ($wancfg['adv_dhcp6_authentication_statement_protocol'] == 'delayed') ) { + $authentication_statement .= "authentication"; + $authentication_statement .= " {$wancfg['adv_dhcp6_authentication_statement_authname']}"; + $authentication_statement .= " {\n"; + $authentication_statement .= "\tprotocol {$wancfg['adv_dhcp6_authentication_statement_protocol']};\n"; + if (preg_match("/(hmac(-)?md5)||(HMAC(-)?MD5)/", $wancfg['adv_dhcp6_authentication_statement_algorithm'])) + $authentication_statement .= "\talgorithm {$wancfg['adv_dhcp6_authentication_statement_algorithm']};\n"; + if ($wancfg['adv_dhcp6_authentication_statement_rdm'] == 'monocounter') + $authentication_statement .= "\trdm {$wancfg['adv_dhcp6_authentication_statement_rdm']};\n"; + $authentication_statement .= "};\n"; + } + + $key_info_statement = ""; + if ( ($wancfg['adv_dhcp6_key_info_statement_keyname'] != '') && + ($wancfg['adv_dhcp6_key_info_statement_realm'] != '') && + (is_numeric($wancfg['adv_dhcp6_key_info_statement_keyid'])) && + ($wancfg['adv_dhcp6_key_info_statement_secret'] != '') ) { + $key_info_statement .= "keyinfo"; + $key_info_statement .= " {$wancfg['adv_dhcp6_key_info_statement_keyname']}"; + $key_info_statement .= " {\n"; + $key_info_statement .= "\trealm \"{$wancfg['adv_dhcp6_key_info_statement_realm']}\";\n"; + $key_info_statement .= "\tkeyid {$wancfg['adv_dhcp6_key_info_statement_keyid']};\n"; + $key_info_statement .= "\tsecret \"{$wancfg['adv_dhcp6_key_info_statement_secret']}\";\n"; + if (preg_match("/((([0-9]{4}-)?[0-9]{2}[0-9]{2} )?[0-9]{2}:[0-9]{2})||(foreever)/", $wancfg['adv_dhcp6_key_info_statement_expire'])) + $key_info_statement .= "\texpire \"{$wancfg['adv_dhcp6_key_info_statement_expire']}\";\n"; + $key_info_statement .= "};\n"; + } + + $dhcp6cconf = $interface_statement; + $dhcp6cconf .= $id_assoc_statement_address; + $dhcp6cconf .= $id_assoc_statement_prefix; + $dhcp6cconf .= $authentication_statement; + $dhcp6cconf .= $key_info_statement; + + $dhcp6cconf = DHCP6_Config_File_Substitutions($wancfg, $wanif, $dhcp6cconf); + + return $dhcp6cconf; +} + + +function DHCP6_Config_File_Override($wancfg, $wanif) { + + $dhcp6cconf = file_get_contents($wancfg['adv_dhcp6_config_file_override_path']); + $dhcp6cconf = DHCP6_Config_File_Substitutions($wancfg, $wanif, $dhcp6cconf); + + return $dhcp6cconf; +} + + +function DHCP6_Config_File_Substitutions($wancfg, $wanif, $dhcp6cconf) { + + $dhcp6cconf = DHCP_Config_File_Substitutions($wancfg, $wanif, $dhcp6cconf); + + return $dhcp6cconf; +} + + +function interface_dhcp_configure($interface = "wan") { + global $config, $g; + + $wancfg = $config['interfaces'][$interface]; + $wanif = $wancfg['if']; + if (empty($wancfg)) + $wancfg = array(); + + /* generate dhclient_wan.conf */ + $fd = fopen("{$g['varetc_path']}/dhclient_{$interface}.conf", "w"); + if (!$fd) { + printf(printf(gettext("Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for writing.%s"), $interface, "\n")); + return 1; + } + + if ($wancfg['dhcphostname']) { + $dhclientconf_hostname = "send dhcp-client-identifier \"{$wancfg['dhcphostname']}\";\n"; + $dhclientconf_hostname .= "\tsend host-name \"{$wancfg['dhcphostname']}\";\n"; + } else { + $dhclientconf_hostname = ""; + } + + $wanif = get_real_interface($interface); + if (empty($wanif)) { + log_error(sprintf(gettext("Invalid interface \"%s\" in interface_dhcp_configure()"), $interface)); + return 0; + } + $dhclientconf = ""; + + $dhclientconf .= << {$g['tmp_path']}/{$wanif}_output 2> {$g['tmp_path']}/{$wanif}_error_output"); + + return 0; +} + +function DHCP_Config_File_Advanced($interface, $wancfg, $wanif) { + + $hostname = ""; + if ($wancfg['dhcphostname'] != '') { + $hostname = "\tsend host-name \"{$wancfg['dhcphostname']}\";\n"; + } + + /* DHCP Protocol Timings */ + $protocol_timings = array ('adv_dhcp_pt_timeout' => "timeout", 'adv_dhcp_pt_retry' => "retry", 'adv_dhcp_pt_select_timeout' => "select-timeout", 'adv_dhcp_pt_reboot' => "reboot", 'adv_dhcp_pt_backoff_cutoff' => "backoff-cutoff", 'adv_dhcp_pt_initial_interval' => "initial-interval"); + foreach ($protocol_timings as $Protocol_Timing => $PT_Name) { + $pt_variable = "{$Protocol_Timing}"; + ${$pt_variable} = ""; + if ($wancfg[$Protocol_Timing] != "") { + ${$pt_variable} = "{$PT_Name} {$wancfg[$Protocol_Timing]};\n"; + } + } + + $send_options = ""; + if ($wancfg['adv_dhcp_send_options'] != '') { + $options = split(",", $wancfg['adv_dhcp_send_options']); + foreach ($options as $option) { + $send_options .= "\tsend " . trim($option) . ";\n"; + } + } + + $request_options = ""; + if ($wancfg['adv_dhcp_request_options'] != '') { + $request_options = "\trequest {$wancfg['adv_dhcp_request_options']};\n"; + } + + $required_options = ""; + if ($wancfg['adv_dhcp_required_options'] != '') { + $required_options = "\trequire {$wancfg['adv_dhcp_required_options']};\n"; + } + + $option_modifiers = ""; + if ($wancfg['adv_dhcp_option_modifiers'] != '') { + $modifiers = split(",", $wancfg['adv_dhcp_option_modifiers']); + foreach ($modifiers as $modifier) { + $option_modifiers .= "\t" . trim($modifier) . ";\n"; + } + } + + $dhclientconf = "interface \"{$wanif}\" {\n"; + $dhclientconf .= "\n"; + $dhclientconf .= "# DHCP Protocol Timing Values\n"; + $dhclientconf .= "{$adv_dhcp_pt_timeout}"; + $dhclientconf .= "{$adv_dhcp_pt_retry}"; + $dhclientconf .= "{$adv_dhcp_pt_select_timeout}"; + $dhclientconf .= "{$adv_dhcp_pt_reboot}"; + $dhclientconf .= "{$adv_dhcp_pt_backoff_cutoff}"; + $dhclientconf .= "{$adv_dhcp_pt_initial_interval}"; + $dhclientconf .= "\n"; + $dhclientconf .= "# DHCP Protocol Options\n"; + $dhclientconf .= "{$hostname}"; + $dhclientconf .= "{$send_options}"; + $dhclientconf .= "{$request_options}"; + $dhclientconf .= "{$required_options}"; + $dhclientconf .= "{$option_modifiers}"; + $dhclientconf .= "\n"; + $dhclientconf .= "\tscript \"/sbin/dhclient-script\";\n"; + $dhclientconf .= "}\n"; + + $dhclientconf = DHCP_Config_File_Substitutions($wancfg, $wanif, $dhclientconf); + + return $dhclientconf; +} + + +function DHCP_Config_File_Override($wancfg, $wanif) { + + $dhclientconf = file_get_contents($wancfg['adv_dhcp_config_file_override_path']); + $dhclientconf = DHCP_Config_File_Substitutions($wancfg, $wanif, $dhclientconf); + + return $dhclientconf; +} + + +function DHCP_Config_File_Substitutions($wancfg, $wanif, $dhclientconf) { + + /* Apply Interface Substitutions */ + $dhclientconf = str_replace("{interface}", "{$wanif}", $dhclientconf); + + /* Apply Hostname Substitutions */ + $dhclientconf = str_replace("{hostname}", $wancfg['dhcphostname'], $dhclientconf); + + /* Arrays of MAC Address Types, Cases, Delimiters */ + /* ASCII or HEX, Upper or Lower Case, Various Delimiters (none, space, colon, hyphen, period) */ + $various_mac_types = array("mac_addr_ascii", "mac_addr_hex"); + $various_mac_cases = array("U", "L"); + $various_mac_delimiters = array("", " ", ":", "-", "."); + + /* Apply MAC Address Substitutions */ + foreach ($various_mac_types as $various_mac_type) { + foreach ($various_mac_cases as $various_mac_case) { + foreach ($various_mac_delimiters as $various_mac_delimiter) { + + $res = stripos($dhclientconf, $various_mac_type . $various_mac_case . $various_mac_delimiter); + if ($res !== false) { + + /* Get MAC Address as ASCII String With Colon (:) Celimiters */ + if ("$various_mac_case" == "U") $dhcpclientconf_mac = strtoupper(get_interface_mac($wanif)); + if ("$various_mac_case" == "L") $dhcpclientconf_mac = strtolower(get_interface_mac($wanif)); + + if ("$various_mac_type" == "mac_addr_hex") { + /* Convert MAC ascii string to HEX with colon (:) delimiters. */ + $dhcpclientconf_mac = str_replace(":", "", $dhcpclientconf_mac); + $dhcpclientconf_mac_hex = ""; + $delimiter = ""; + for($i = 0; $i < strlen($dhcpclientconf_mac); $i++) { + $dhcpclientconf_mac_hex .= $delimiter. bin2hex($dhcpclientconf_mac[$i]); + $delimiter = ":"; + } + $dhcpclientconf_mac = $dhcpclientconf_mac_hex; + } + + /* MAC Address Delimiter Substitutions */ + $dhcpclientconf_mac = str_replace(":", $various_mac_delimiter, $dhcpclientconf_mac); + + /* Apply MAC Address Substitutions */ + $dhclientconf = str_replace("{" . $various_mac_type . $various_mac_case . $various_mac_delimiter . "}", $dhcpclientconf_mac, $dhclientconf); + } + } + } + } + + return $dhclientconf; +} + +function interfaces_group_setup() { + global $config; + + if (!is_array($config['ifgroups']['ifgroupentry'])) + return; + + foreach ($config['ifgroups']['ifgroupentry'] as $groupar) + interface_group_setup($groupar); + + return; +} + +function interface_group_setup(&$groupname /* The parameter is an array */) { + global $config; + + if (!is_array($groupname)) + return; + $members = explode(" ", $groupname['members']); + foreach($members as $ifs) { + $realif = get_real_interface($ifs); + if ($realif) + mwexec("/sbin/ifconfig {$realif} group {$groupname['ifname']}"); + } + + return; +} + +function is_interface_group($if) { + global $config; + + if (is_array($config['ifgroups']['ifgroupentry'])) + foreach ($config['ifgroups']['ifgroupentry'] as $groupentry) { + if ($groupentry['ifname'] === $if) + return true; + } + + return false; +} + +function interface_group_add_member($interface, $groupname) { + $interface = get_real_interface($interface); + mwexec("/sbin/ifconfig {$interface} group " . escapeshellarg($groupname), true); +} + +/* COMPAT Function */ +function convert_friendly_interface_to_real_interface_name($interface) { + return get_real_interface($interface); +} + +/* COMPAT Function */ +function get_real_wan_interface($interface = "wan") { + return get_real_interface($interface); +} + +/* COMPAT Function */ +function get_current_wan_address($interface = "wan") { + return get_interface_ip($interface); +} + +/* + * convert_real_interface_to_friendly_interface_name($interface): convert fxp0 -> wan, etc. + */ +function convert_real_interface_to_friendly_interface_name($interface = "wan") { + global $config; + + /* XXX: For speed reasons reference directly the interface array */ + $ifdescrs = &$config['interfaces']; + //$ifdescrs = get_configured_interface_list(false, true); + + foreach ($ifdescrs as $if => $ifname) { + if ($if == $interface || $ifname['if'] == $interface) + return $if; + + if (get_real_interface($if) == $interface) + return $if; + + $int = get_parent_interface($if, true); + if (is_array($int)) { + foreach ($int as $iface) { + if ($iface == $interface) + return $if; + } + } + } + + if ($interface == "enc0") + return 'IPsec'; + + return NULL; +} + +/* attempt to resolve interface to friendly descr */ +function convert_friendly_interface_to_friendly_descr($interface) { + global $config; + + switch ($interface) { + case "l2tp": + $ifdesc = "L2TP"; + break; + case "pptp": + $ifdesc = "PPTP"; + break; + case "pppoe": + $ifdesc = "PPPoE"; + break; + case "openvpn": + $ifdesc = "OpenVPN"; + break; + case "enc0": + case "ipsec": + case "IPsec": + $ifdesc = "IPsec"; + break; + default: + if (isset($config['interfaces'][$interface])) { + if (empty($config['interfaces'][$interface]['descr'])) + $ifdesc = strtoupper($interface); + else + $ifdesc = strtoupper($config['interfaces'][$interface]['descr']); + break; + } else if (stristr($interface, "_vip")) { + if (is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $counter => $vip) { + if ($vip['mode'] == "carp") { + if ($interface == "{$vip['interface']}_vip{$vip['vhid']}") + return "{$vip['subnet']} - {$vip['descr']}"; + } + } + } + } else { + /* if list */ + $ifdescrs = get_configured_interface_with_descr(false, true); + foreach ($ifdescrs as $if => $ifname) { + if ($if == $interface || $ifname == $interface) + return $ifname; + } + } + break; + } + + return $ifdesc; +} + +function convert_real_interface_to_friendly_descr($interface) { + + $ifdesc = convert_real_interface_to_friendly_interface_name("{$interface}"); + + if (!empty($ifdesc)) + return convert_friendly_interface_to_friendly_descr($ifdesc); + + return $interface; +} + +/* + * get_parent_interface($interface): + * --returns the (real or virtual) parent interface(s) array for a given interface friendly name (i.e. wan) + * or virtual interface (i.e. vlan) + * (We need array because MLPPP and bridge interfaces have more than one parent.) + * -- returns $interface passed in if $interface parent is not found + * -- returns empty array if an invalid interface is passed + * (Only handles ppps and vlans now.) + */ +function get_parent_interface($interface, $avoidrecurse = false) { + global $config; + + $parents = array(); + //Check that we got a valid interface passed + $realif = get_real_interface($interface); + if ($realif == NULL) + return $parents; + + // If we got a real interface, find it's friendly assigned name + if ($interface == $realif && $avoidrecurse == false) + $interface = convert_real_interface_to_friendly_interface_name($interface); + + if (!empty($interface) && isset($config['interfaces'][$interface])) { + $ifcfg = $config['interfaces'][$interface]; + switch ($ifcfg['ipaddr']) { + case "ppp": + case "pppoe": + case "pptp": + case "l2tp": + if (empty($parents)) + if (is_array($config['ppps']['ppp'])) + foreach ($config['ppps']['ppp'] as $pppidx => $ppp) { + if ($ifcfg['if'] == $ppp['if']) { + $ports = explode(',', $ppp['ports']); + foreach ($ports as $pid => $parent_if) + $parents[$pid] = get_real_interface($parent_if); + break; + } + } + break; + case "dhcp": + case "static": + default: + // Handle _vlans + if (stristr($realif,"_vlan")) + if (is_array($config['vlans']['vlan'])) + foreach ($config['vlans']['vlan'] as $vlanidx => $vlan) + if ($ifcfg['if'] == $vlan['vlanif']){ + $parents[0] = $vlan['if']; + break; + } + break; + } + } + + if (empty($parents)) + $parents[0] = $realif; + + return $parents; +} + +function interface_is_wireless_clone($wlif) { + if(!stristr($wlif, "_wlan")) { + return false; + } else { + return true; + } +} + +function interface_get_wireless_base($wlif) { + if(!stristr($wlif, "_wlan")) { + return $wlif; + } else { + return substr($wlif, 0, stripos($wlif, "_wlan")); + } +} + +function interface_get_wireless_clone($wlif) { + if(!stristr($wlif, "_wlan")) { + return $wlif . "_wlan0"; + } else { + return $wlif; + } +} + +function get_real_interface($interface = "wan", $family = "all", $realv6iface = false, $flush = true) { + global $config, $g; + + $wanif = NULL; + + switch ($interface) { + case "l2tp": + $wanif = "l2tp"; + break; + case "pptp": + $wanif = "pptp"; + break; + case "pppoe": + $wanif = "pppoe"; + break; + case "openvpn": + $wanif = "openvpn"; + break; + case "ipsec": + case "enc0": + $wanif = "enc0"; + break; + case "ppp": + $wanif = "ppp"; + break; + default: + // If a real interface was alread passed simply + // pass the real interface back. This encourages + // the usage of this function in more cases so that + // we can combine logic for more flexibility. + if(does_interface_exist($interface, $flush)) { + $wanif = $interface; + break; + } + + if (empty($config['interfaces'][$interface])) + break; + + $cfg = &$config['interfaces'][$interface]; + + if ($family == "inet6") { + switch ($cfg['ipaddrv6']) { + case "6rd": + case "6to4": + $wanif = "{$interface}_stf"; + break; + case 'pppoe': + case 'ppp': + case 'l2tp': + case 'pptp': + if( is_array($cfg['wireless']) || preg_match($g['wireless_regex'], $cfg['if'])) + $wanif = interface_get_wireless_clone($cfg['if']); + else + $wanif = $cfg['if']; + break; + default: + switch ($cfg['ipaddr']) { + case 'pppoe': + case 'ppp': + case 'l2tp': + case 'pptp': + if (isset($cfg['dhcp6usev4iface']) && $realv6iface === false) + $wanif = $cfg['if']; + else { + $parents = get_parent_interface($interface); + if (!empty($parents[0])) + $wanif = $parents[0]; + else + $wanif = $cfg['if']; + } + break; + default: + if( is_array($cfg['wireless']) || preg_match($g['wireless_regex'], $cfg['if'])) + $wanif = interface_get_wireless_clone($cfg['if']); + else + $wanif = $cfg['if']; + break; + } + break; + } + } else { + // Wireless cloned NIC support (FreeBSD 8+) + // interface name format: $parentnic_wlanparentnic# + // example: ath0_wlan0 + if( is_array($cfg['wireless']) || preg_match($g['wireless_regex'], $cfg['if'])) + $wanif = interface_get_wireless_clone($cfg['if']); + else + $wanif = $cfg['if']; + } + break; + } + + return $wanif; +} + +/* Guess the physical interface by providing a IP address */ +function guess_interface_from_ip($ipaddress) { + if(! is_ipaddr($ipaddress)) { + return false; + } + if(is_ipaddrv4($ipaddress)) { + /* create a route table we can search */ + exec("/usr/bin/netstat -rnWf inet", $output, $ret); + foreach($output as $line) { + if(preg_match("/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+[ ]+link[#]/", $line)) { + $fields = preg_split("/[ ]+/", $line); + if(ip_in_subnet($ipaddress, $fields[0])) { + return $fields[5]; + } + } + } + } + /* FIXME: This works from cursory testing, regexp might need fine tuning */ + if(is_ipaddrv6($ipaddress)) { + /* create a route table we can search */ + exec("/usr/bin/netstat -rnWf inet6", $output, $ret); + foreach($output as $line) { + if(preg_match("/[0-9a-f]+[:]+[0-9a-f]+[:]+[\/][0-9]+/", $line)) { + $fields = preg_split("/[ ]+/", $line); + if(ip_in_subnet($ipaddress, $fields[0])) { + return $fields[5]; + } + } + } + } + $ret = exec_command("/sbin/route -n get {$ipaddress} | /usr/bin/awk '/interface/ { print \$2; };'"); + if(empty($ret)) { + return false; + } + return $ret; +} + +/* + * find_ip_interface($ip): return the interface where an ip is defined + * (or if $bits is specified, where an IP within the subnet is defined) + */ +function find_ip_interface($ip, $bits = null) { + if (!is_ipaddr($ip)) + return false; + + $isv6ip = is_ipaddrv6($ip); + + /* if list */ + $ifdescrs = get_configured_interface_list(); + + foreach ($ifdescrs as $ifdescr => $ifname) { + $ifip = ($isv6ip) ? get_interface_ipv6($ifname) : get_interface_ip($ifname); + if (is_null($ifip)) + continue; + if (is_null($bits)) { + if ($ip == $ifip) { + $int = get_real_interface($ifname); + return $int; + } + } + else { + if (ip_in_subnet($ifip, $ip . "/" . $bits)) { + $int = get_real_interface($ifname); + return $int; + } + } + } + + return false; +} + +/* + * find_virtual_ip_alias($ip): return the virtual IP alias where an IP is found + * (or if $bits is specified, where an IP within the subnet is found) + */ +function find_virtual_ip_alias($ip, $bits = null) { + global $config; + + if (!is_array($config['virtualip']['vip'])) { + return false; + } + if (!is_ipaddr($ip)) + return false; + + $isv6ip = is_ipaddrv6($ip); + + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['mode'] === "ipalias") { + if (is_ipaddrv6($vip['subnet']) != $isv6ip) + continue; + if (is_null($bits)) { + if (ip_in_subnet($ip, $vip['subnet'] . "/" . $vip['subnet_bits'])) { + return $vip; + } + } + else { + if (($isv6ip && check_subnetsv6_overlap($ip, $bits, $vip['subnet'], $vip['subnet_bits'])) + || (!$isv6ip && check_subnets_overlap($ip, $bits, $vip['subnet'], $vip['subnet_bits']))) { + return $vip; + } + } + } + } + return false; +} + +/* + * find_number_of_created_carp_interfaces: return the number of carp interfaces + */ +function find_number_of_created_carp_interfaces() { + return `/sbin/ifconfig | grep "carp:" | wc -l`; +} + +/* + * find_carp_interface($ip): return the carp interface where an ip is defined + */ +function find_carp_interface($ip) { + global $config; + if (is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['mode'] == "carp") { + if(is_ipaddrv4($ip)) { + $carp_ip = get_interface_ip($vip['interface']); + } + if(is_ipaddrv6($ip)) { + $carp_ip = get_interface_ipv6($vip['interface']); + } + exec("/sbin/ifconfig", $output, $return); + foreach($output as $line) { + $elements = preg_split("/[ ]+/i", $line); + if(strstr($elements[0], "vip")) + $curif = str_replace(":", "", $elements[0]); + if(stristr($line, $ip)) { + $if = $curif; + continue; + } + } + + if ($if) + return $if; + } + } + } +} + +function link_carp_interface_to_parent($interface) { + global $config; + + if (empty($interface)) + return; + + $carp_ip = get_interface_ip($interface); + $carp_ipv6 = get_interface_ipv6($interface); + + if((!is_ipaddrv4($carp_ip)) && (!is_ipaddrv6($carp_ipv6))) + return; + + /* if list */ + $ifdescrs = get_configured_interface_list(); + foreach ($ifdescrs as $ifdescr => $ifname) { + /* check IPv4 */ + if(is_ipaddrv4($carp_ip)) { + $interfaceip = get_interface_ip($ifname); + $subnet_bits = get_interface_subnet($ifname); + $subnet_ip = gen_subnet("{$interfaceip}", "{$subnet_bits}"); + if(ip_in_subnet($carp_ip, "{$subnet_ip}/{$subnet_bits}")) + return $ifname; + } + /* Check IPv6 */ + if(is_ipaddrv6($carp_ipv6)) { + $interfaceipv6 = get_interface_ipv6($ifname); + $prefixlen = get_interface_subnetv6($ifname); + if(ip_in_subnet($carp_ipv6, "{$interfaceipv6}/{$prefixlen}")) + return $ifname; + } + } + return ""; +} + + +/****f* interfaces/link_ip_to_carp_interface + * NAME + * link_ip_to_carp_interface - Find where a CARP interface links to. + * INPUTS + * $ip + * RESULT + * $carp_ints + ******/ +function link_ip_to_carp_interface($ip) { + global $config; + + if (!is_ipaddr($ip)) + return; + + $carp_ints = ""; + if (is_array($config['virtualip']['vip'])) { + $first = 0; + $carp_int = array(); + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['mode'] == "carp") { + $carp_ip = $vip['subnet']; + $carp_sn = $vip['subnet_bits']; + $carp_nw = gen_subnet($carp_ip, $carp_sn); + if (ip_in_subnet($ip, "{$carp_nw}/{$carp_sn}")) { + $carp_int[] = get_real_interface($vip['interface']); + } + } + } + if (!empty($carp_int)) + $carp_ints = implode(" ", array_unique($carp_int)); + } + + return $carp_ints; +} + +function link_interface_to_track6($int, $action = "") { + global $config; + + if (empty($int)) + return; + + if (is_array($config['interfaces'])) { + $list = array(); + foreach ($config['interfaces'] as $ifname => $ifcfg) { + if (!isset($ifcfg['enable'])) + continue; + if (!empty($ifcfg['ipaddrv6']) && $ifcfg['track6-interface'] == $int) { + if ($action == "update") + interface_track6_configure($ifname, $ifcfg); + else if ($action == "") + $list[$ifname] = $ifcfg; + } + } + return $list; + } +} + +function link_interface_to_vlans($int, $action = "") { + global $config; + + if (empty($int)) + return; + + if (is_array($config['vlans']['vlan'])) { + $ifaces = array(); + foreach ($config['vlans']['vlan'] as $vlan) { + if ($int == $vlan['if']) { + if ($action == "update") { + interfaces_bring_up($int); + } else if ($action == "") + $ifaces[$vlan['tag']] = $vlan; + } + } + if (!empty($ifaces)) + return $ifaces; + } +} + +function link_interface_to_vips($int, $action = "") { + global $config; + + if (is_array($config['virtualip']['vip'])) { + $result = array(); + foreach ($config['virtualip']['vip'] as $vip) { + if ($int == $vip['interface']) { + if ($action == "update") + interfaces_vips_configure($int); + else + $result[] = $vip; + } + } + return $result; + } +} + +/****f* interfaces/link_interface_to_bridge + * NAME + * link_interface_to_bridge - Finds out a bridge group for an interface + * INPUTS + * $ip + * RESULT + * bridge[0-99] + ******/ +function link_interface_to_bridge($int) { + global $config; + + if (is_array($config['bridges']['bridged'])) { + foreach ($config['bridges']['bridged'] as $bridge) { + if (in_array($int, explode(',', $bridge['members']))) + return "{$bridge['bridgeif']}"; + } + } +} + +function link_interface_to_group($int) { + global $config; + + $result = array(); + + if (is_array($config['ifgroups']['ifgroupentry'])) { + foreach ($config['ifgroups']['ifgroupentry'] as $group) { + if (in_array($int, explode(" ", $group['members']))) + $result[$group['ifname']] = $int; + } + } + + return $result; +} + +function link_interface_to_gre($interface) { + global $config; + + $result = array(); + + if (is_array($config['gres']['gre'])) { + foreach ($config['gres']['gre'] as $gre) + if($gre['if'] == $interface) + $result[] = $gre; + } + + return $result; +} + +function link_interface_to_gif($interface) { + global $config; + + $result = array(); + + if (is_array($config['gifs']['gif'])) { + foreach ($config['gifs']['gif'] as $gif) + if($gif['if'] == $interface) + $result[] = $gif; + } + + return $result; +} + +/* + * find_interface_ip($interface): return the interface ip (first found) + */ +function find_interface_ip($interface, $flush = false) { + global $interface_ip_arr_cache; + global $interface_sn_arr_cache; + + $interface = str_replace("\n", "", $interface); + + if (!does_interface_exist($interface)) + return; + + /* Setup IP cache */ + if (!isset($interface_ip_arr_cache[$interface]) or $flush) { + $ifinfo = pfSense_get_interface_addresses($interface); + $interface_ip_arr_cache[$interface] = $ifinfo['ipaddr']; + $interface_sn_arr_cache[$interface] = $ifinfo['subnetbits']; + } + + return $interface_ip_arr_cache[$interface]; +} + +/* + * find_interface_ipv6($interface): return the interface ip (first found) + */ +function find_interface_ipv6($interface, $flush = false) { + global $interface_ipv6_arr_cache; + global $interface_snv6_arr_cache; + global $config; + + $interface = trim($interface); + $interface = get_real_interface($interface); + + if (!does_interface_exist($interface)) + return; + + /* Setup IP cache */ + if (!isset($interface_ipv6_arr_cache[$interface]) or $flush) { + $ifinfo = pfSense_get_interface_addresses($interface); + $interface_ipv6_arr_cache[$interface] = $ifinfo['ipaddr6']; + $interface_snv6_arr_cache[$interface] = $ifinfo['subnetbits6']; + } + + return $interface_ipv6_arr_cache[$interface]; +} + +/* + * find_interface_ipv6_ll($interface): return the interface ipv6 link local (first found) + */ +function find_interface_ipv6_ll($interface, $flush = false) { + global $interface_llv6_arr_cache; + global $config; + + $interface = str_replace("\n", "", $interface); + + if (!does_interface_exist($interface)) + return; + + /* Setup IP cache */ + if (!isset($interface_llv6_arr_cache[$interface]) or $flush) { + $ifinfo = pfSense_getall_interface_addresses($interface); + foreach($ifinfo as $line) { + if (strstr($line, ":")) { + $parts = explode("/", $line); + if(is_linklocal($parts[0])) { + $ifinfo['linklocal'] = $parts[0]; + } + } + } + $interface_llv6_arr_cache[$interface] = $ifinfo['linklocal']; + } + return $interface_llv6_arr_cache[$interface]; +} + +function find_interface_subnet($interface, $flush = false) { + global $interface_sn_arr_cache; + global $interface_ip_arr_cache; + + $interface = str_replace("\n", "", $interface); + if (does_interface_exist($interface) == false) + return; + + if (!isset($interface_sn_arr_cache[$interface]) or $flush) { + $ifinfo = pfSense_get_interface_addresses($interface); + $interface_ip_arr_cache[$interface] = $ifinfo['ipaddr']; + $interface_sn_arr_cache[$interface] = $ifinfo['subnetbits']; + } + + return $interface_sn_arr_cache[$interface]; +} + +function find_interface_subnetv6($interface, $flush = false) { + global $interface_snv6_arr_cache; + global $interface_ipv6_arr_cache; + + $interface = str_replace("\n", "", $interface); + if (does_interface_exist($interface) == false) + return; + + if (!isset($interface_snv6_arr_cache[$interface]) or $flush) { + $ifinfo = pfSense_get_interface_addresses($interface); + $interface_ipv6_arr_cache[$interface] = $ifinfo['ipaddr6']; + $interface_snv6_arr_cache[$interface] = $ifinfo['subnetbits6']; + } + + return $interface_snv6_arr_cache[$interface]; +} + +function ip_in_interface_alias_subnet($interface, $ipalias) { + global $config; + + if (empty($interface) || !is_ipaddr($ipalias)) + return false; + if (is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vip) { + switch ($vip['mode']) { + case "ipalias": + if ($vip['interface'] <> $interface) + break; + $subnet = is_ipaddrv6($ipalias) ? gen_subnetv6($vip['subnet'], $vip['subnet_bits']) : gen_subnet($vip['subnet'], $vip['subnet_bits']); + if (ip_in_subnet($ipalias, $subnet . "/" . $vip['subnet_bits'])) + return true; + break; + } + } + } + + return false; +} + +function get_interface_ip($interface = "wan") { + $realif = get_failover_interface($interface); + if (!$realif) { + if (strstr($interface, "_vip")) + return get_configured_carp_interface_list($interface); + else + return null; + } + + $curip = find_interface_ip($realif); + if ($curip && is_ipaddr($curip) && ($curip != "0.0.0.0")) + return $curip; + else + return null; +} + +function get_interface_ipv6($interface = "wan", $flush = false) { + global $config; + + $realif = get_failover_interface($interface, "inet6"); + if (!$realif) { + if (strstr($interface, "_vip")) + return get_configured_carp_interface_list($interface, "inet6"); + else + return null; + } + + /* + * NOTE: On the case when only the prefix is requested, + * the communication on WAN will be done over link-local. + */ + if (is_array($config['interfaces'][$interface])) { + switch ($config['interfaces'][$interface]['ipaddr']) { + case 'pppoe': + case 'l2tp': + case 'pptp': + case 'ppp': + if ($config['interfaces'][$interface]['ipaddrv6'] == 'dhcp6') + $realif = get_real_interface($interface, "inet6", true); + break; + } + if (isset($config['interfaces'][$interface]['dhcp6prefixonly'])) { + $curip = find_interface_ipv6_ll($realif, $flush); + if ($curip && is_ipaddrv6($curip) && ($curip != "::")) + return $curip; + } + } + + $curip = find_interface_ipv6($realif, $flush); + if ($curip && is_ipaddrv6($curip) && ($curip != "::")) + return $curip; + else + return null; +} + +function get_interface_linklocal($interface = "wan") { + + $realif = get_failover_interface($interface, "inet6"); + if (!$realif) { + if (strstr($interface, "_vip")) { + list($interface, $vhid) = explode("_vip", $interface); + $realif = get_real_interface($interface); + } else + return null; + } + + $curip = find_interface_ipv6_ll($realif); + if ($curip && is_ipaddrv6($curip) && ($curip != "::")) + return $curip; + else + return null; +} + +function get_interface_subnet($interface = "wan") { + $realif = get_real_interface($interface); + if (!$realif) { + if (strstr($interface, "_vip")) { + list($interface, $vhid) = explode("_vip", $interface); + $realif = get_real_interface($interface); + } else + return null; + } + + $cursn = find_interface_subnet($realif); + if (!empty($cursn)) + return $cursn; + + return null; +} + +function get_interface_subnetv6($interface = "wan") { + global $config; + + $realif = get_real_interface($interface, "inet6"); + if (!$realif) { + if (strstr($interface, "_vip")) { + list($interface, $vhid) = explode("_vip", $interface); + $realif = get_real_interface($interface); + } else + return null; + } + + $cursn = find_interface_subnetv6($realif); + if (!empty($cursn)) + return $cursn; + + return null; +} + +/* return outside interfaces with a gateway */ +function get_interfaces_with_gateway() { + global $config; + + $ints = array(); + + /* loop interfaces, check config for outbound */ + foreach($config['interfaces'] as $ifdescr => $ifname) { + switch ($ifname['ipaddr']) { + case "dhcp": + case "ppp"; + case "pppoe": + case "pptp": + case "l2tp": + case "ppp"; + $ints[$ifdescr] = $ifdescr; + break; + default: + if (substr($ifname['if'], 0, 4) == "ovpn" || + !empty($ifname['gateway'])) + $ints[$ifdescr] = $ifdescr; + break; + } + } + return $ints; +} + +/* return true if interface has a gateway */ +function interface_has_gateway($friendly) { + global $config; + + if (!empty($config['interfaces'][$friendly])) { + $ifname = &$config['interfaces'][$friendly]; + switch ($ifname['ipaddr']) { + case "dhcp": + case "pppoe": + case "pptp": + case "l2tp": + case "ppp"; + return true; + break; + default: + if (substr($ifname['if'], 0, 4) == "ovpn") + return true; + $tunnelif = substr($ifname['if'], 0, 3); + if ($tunnelif == "gif" || $tunnelif == "gre") + return true; + if (!empty($ifname['gateway'])) + return true; + break; + } + } + + return false; +} + +/* return true if interface has a gateway */ +function interface_has_gatewayv6($friendly) { + global $config; + + if (!empty($config['interfaces'][$friendly])) { + $ifname = &$config['interfaces'][$friendly]; + switch ($ifname['ipaddrv6']) { + case "slaac": + case "dhcp6": + case "6to4": + case "6rd": + return true; + break; + default: + if (substr($ifname['if'], 0, 4) == "ovpn") + return true; + $tunnelif = substr($ifname['if'], 0, 3); + if ($tunnelif == "gif" || $tunnelif == "gre") + return true; + if (!empty($ifname['gatewayv6'])) + return true; + break; + } + } + + return false; +} + +/****f* interfaces/is_altq_capable + * NAME + * is_altq_capable - Test if interface is capable of using ALTQ + * INPUTS + * $int - string containing interface name + * RESULT + * boolean - true or false + ******/ + +function is_altq_capable($int) { + /* Per: + * http://www.freebsd.org/cgi/man.cgi?query=altq&apropos=0&sektion=0&manpath=FreeBSD+8.3-RELEASE&arch=default&format=html + * Only the following drivers have ALTQ support + */ + $capable = array("ae", "age", "alc", "ale", "an", "ath", "aue", "axe", "awi", "bce", + "bfe", "bge", "bridge", "cas", "dc", "de", "ed", "em", "ep", "epair", "et", "fxp", "gem", + "hme", "igb", "ipw", "iwi", "ixgbe", "jme", "le", "lem", "msk", "mxge", "my", "nfe", + "nge", "npe", "nve", "ral", "re", "rl", "rum", "run", "bwn", "sf", "sge", "sis", "sk", + "ste", "stge", "ti", "txp", "udav", "ural", "vge", "vr", "vte", "wi", "xl", + "ndis", "tun", "ovpns", "ovpnc", "vlan", "pppoe", "pptp", "ng", + "l2tp", "ppp", "vtnet"); + + $int_family = remove_ifindex($int); + + if (in_array($int_family, $capable)) + return true; + else if (stristr($int, "l2tp")) /* VLANs are name $parent_$vlan now */ + return true; + else if (stristr($int, "_vlan")) /* VLANs are name $parent_$vlan now */ + return true; + else if (stristr($int, "_wlan")) /* WLANs are name $parent_$wlan now */ + return true; + else + return false; +} + +/****f* interfaces/is_interface_wireless + * NAME + * is_interface_wireless - Returns if an interface is wireless + * RESULT + * $tmp - Returns if an interface is wireless + ******/ +function is_interface_wireless($interface) { + global $config, $g; + + $friendly = convert_real_interface_to_friendly_interface_name($interface); + if(!isset($config['interfaces'][$friendly]['wireless'])) { + if (preg_match($g['wireless_regex'], $interface)) { + if (isset($config['interfaces'][$friendly])) + $config['interfaces'][$friendly]['wireless'] = array(); + return true; + } + return false; + } else + return true; +} + +function get_wireless_modes($interface) { + /* return wireless modes and channels */ + $wireless_modes = array(); + + $cloned_interface = get_real_interface($interface); + + if($cloned_interface && is_interface_wireless($cloned_interface)) { + $chan_list = "/sbin/ifconfig {$cloned_interface} list chan"; + $stack_list = "/usr/bin/awk -F\"Channel \" '{ gsub(/\\*/, \" \"); print \$2 \"\\\n\" \$3 }'"; + $format_list = "/usr/bin/awk '{print \$5 \" \" \$6 \",\" \$1}'"; + + $interface_channels = ""; + exec("$chan_list | $stack_list | sort -u | $format_list 2>&1", $interface_channels); + $interface_channel_count = count($interface_channels); + + $c = 0; + while ($c < $interface_channel_count) { + $channel_line = explode(",", $interface_channels["$c"]); + $wireless_mode = trim($channel_line[0]); + $wireless_channel = trim($channel_line[1]); + if(trim($wireless_mode) != "") { + /* if we only have 11g also set 11b channels */ + if($wireless_mode == "11g") { + if(!isset($wireless_modes["11b"])) + $wireless_modes["11b"] = array(); + } else if($wireless_mode == "11g ht") { + if(!isset($wireless_modes["11b"])) + $wireless_modes["11b"] = array(); + if(!isset($wireless_modes["11g"])) + $wireless_modes["11g"] = array(); + $wireless_mode = "11ng"; + } else if($wireless_mode == "11a ht") { + if(!isset($wireless_modes["11a"])) + $wireless_modes["11a"] = array(); + $wireless_mode = "11na"; + } + $wireless_modes["$wireless_mode"]["$c"] = $wireless_channel; + } + $c++; + } + } + return($wireless_modes); +} + +/* return channel numbers, frequency, max txpower, and max regulation txpower */ +function get_wireless_channel_info($interface) { + $wireless_channels = array(); + + $cloned_interface = get_real_interface($interface); + + if($cloned_interface && is_interface_wireless($cloned_interface)) { + $chan_list = "/sbin/ifconfig {$cloned_interface} list txpower"; + $stack_list = "/usr/bin/awk -F\"Channel \" '{ gsub(/\\*/, \" \"); print \$2 \"\\\n\" \$3 }'"; + $format_list = "/usr/bin/awk '{print \$1 \",\" \$3 \" \" \$4 \",\" \$5 \",\" \$7}'"; + + $interface_channels = ""; + exec("$chan_list | $stack_list | sort -u | $format_list 2>&1", $interface_channels); + + foreach ($interface_channels as $channel_line) { + $channel_line = explode(",", $channel_line); + if(!isset($wireless_channels[$channel_line[0]])) + $wireless_channels[$channel_line[0]] = $channel_line; + } + } + return($wireless_channels); +} + +/****f* interfaces/get_interface_mtu + * NAME + * get_interface_mtu - Return the mtu of an interface + * RESULT + * $tmp - Returns the mtu of an interface + ******/ +function get_interface_mtu($interface) { + $mtu = pfSense_get_interface_addresses($interface); + return $mtu['mtu']; +} + +function get_interface_mac($interface) { + + $macinfo = pfSense_get_interface_addresses($interface); + return $macinfo["macaddr"]; +} + +/****f* pfsense-utils/generate_random_mac_address + * NAME + * generate_random_mac - generates a random mac address + * INPUTS + * none + * RESULT + * $mac - a random mac address + ******/ +function generate_random_mac_address() { + $mac = "02"; + for($x=0; $x<5; $x++) + $mac .= ":" . dechex(rand(16, 255)); + return $mac; +} + +/****f* interfaces/is_jumbo_capable + * NAME + * is_jumbo_capable - Test if interface is jumbo frame capable. Useful for determining VLAN capability. + * INPUTS + * $int - string containing interface name + * RESULT + * boolean - true or false + ******/ +function is_jumbo_capable($iface) { + $iface = trim($iface); + $capable = pfSense_get_interface_addresses($iface); + + if (isset($capable['caps']['vlanmtu'])) + return true; + + return false; +} + +function interface_setup_pppoe_reset_file($pppif, $iface="") { + global $g; + + $cron_file = "{$g['varetc_path']}/pppoe_restart_{$pppif}"; + + if(!empty($iface) && !empty($pppif)){ + $cron_cmd = << /dev/null 2>&1 "); + if (is_array($config['dhcpd'][$if]['staticmap'])) { + + foreach ($config['dhcpd'][$if]['staticmap'] as $arpent) { + mwexec("/usr/sbin/arp -s " . escapeshellarg($arpent['ipaddr']) . " " . escapeshellarg($arpent['mac'])); + + } + + } + } else { + mwexec("/sbin/ifconfig " . escapeshellarg($ifcfg['if']) . " -staticarp " ); + mwexec("/usr/sbin/arp -d -i " . escapeshellarg($ifcfg['if']) . " -a > /dev/null 2>&1 "); + if (is_array($config['dhcpd'][$if]) && is_array($config['dhcpd'][$if]['staticmap'])) { + foreach ($config['dhcpd'][$if]['staticmap'] as $arpent) { + if (isset($arpent['arp_table_static_entry'])) { + mwexec("/usr/sbin/arp -s " . escapeshellarg($arpent['ipaddr']) . " " . escapeshellarg($arpent['mac'])); + } + } + } + } + + return 0; +} + +function get_failover_interface($interface, $family = "all") { + global $config; + + /* shortcut to get_real_interface if we find it in the config */ + if (is_array($config['interfaces'][$interface])) { + return get_real_interface($interface, $family); + } + + /* compare against gateway groups */ + $a_groups = return_gateway_groups_array(); + if (is_array($a_groups[$interface])) { + /* we found a gateway group, fetch the interface or vip */ + if ($a_groups[$interface][0]['vip'] <> "") + return $a_groups[$interface][0]['vip']; + else + return $a_groups[$interface][0]['int']; + } + /* fall through to get_real_interface */ + /* XXX: Really needed? */ + return get_real_interface($interface, $family); +} + +function remove_ifindex($ifname) { + return preg_replace("/[0-9]+$/", "", $ifname); +} + +?> diff --git a/etc/inc/ipsec.attributes.php b/etc/inc/ipsec.attributes.php new file mode 100644 index 000000000..ae7a85cf5 --- /dev/null +++ b/etc/inc/ipsec.attributes.php @@ -0,0 +1,184 @@ + diff --git a/etc/inc/ipsec.auth-user.php b/etc/inc/ipsec.auth-user.php new file mode 100755 index 000000000..8142b9926 --- /dev/null +++ b/etc/inc/ipsec.auth-user.php @@ -0,0 +1,166 @@ +#!/usr/local/bin/php -f + diff --git a/etc/inc/ipsec.inc b/etc/inc/ipsec.inc new file mode 100644 index 000000000..c8833c105 --- /dev/null +++ b/etc/inc/ipsec.inc @@ -0,0 +1,745 @@ + "Daemon", "mgr" => "SA Manager", "ike" => "IKE SA", "chd" => "IKE Child SA", + "job" => "Job Processing", "cfg" => "Configuration backend", "knl" => "Kernel Interface", + "net" => "Networking", "asn" => "ASN encoding", "enc" => "Message encoding", + "imc" => "Integrity checker", "imv" => "Integrity Verifier", "pts" => "Platform Trust Service", + "tls" => "TLS handler", "esp" => "IPsec traffic", "lib" => "StrongSWAN Lib"); + +$my_identifier_list = array( + 'myaddress' => array( 'desc' => gettext('My IP address'), 'mobile' => true ), + 'address' => array( 'desc' => gettext('IP address'), 'mobile' => true ), + 'fqdn' => array( 'desc' => gettext('Distinguished name'), 'mobile' => true ), + 'user_fqdn' => array( 'desc' => gettext('User distinguished name'), 'mobile' => true ), + 'asn1dn' => array( 'desc' => gettext('ASN.1 distinguished Name'), 'mobile' => true ), + 'keyid tag' => array( 'desc' => gettext('KeyID tag'), 'mobile' => true ), + 'dyn_dns' => array( 'desc' => gettext('Dynamic DNS'), 'mobile' => true )); + +$peer_identifier_list = array( + 'peeraddress' => array( 'desc' => gettext('Peer IP address'), 'mobile' => false ), + 'address' => array( 'desc' => gettext('IP address'), 'mobile' => false ), + 'fqdn' => array( 'desc' => gettext('Distinguished name'), 'mobile' => true ), + 'user_fqdn' => array( 'desc' => gettext('User distinguished name'), 'mobile' => true ), + 'asn1dn' => array( 'desc' => gettext('ASN.1 distinguished Name'), 'mobile' => true ), + 'keyid tag' => array( 'desc' =>gettext('KeyID tag'), 'mobile' => true )); + +$p1_ealgos = array( + 'aes' => array( 'name' => 'AES', 'keysel' => array( 'lo' => 128, 'hi' => 256, 'step' => 64 ) ), + 'aes128gcm' => array( 'name' => 'AES128-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'aes192gcm' => array( 'name' => 'AES192-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'aes256gcm' => array( 'name' => 'AES256-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'blowfish' => array( 'name' => 'Blowfish', 'keysel' => array( 'lo' => 128, 'hi' => 256, 'step' => 64 ) ), + '3des' => array( 'name' => '3DES' ), + 'cast128' => array( 'name' => 'CAST128' ), + 'des' => array( 'name' => 'DES' )); + +$p2_ealgos = array( + 'aes' => array( 'name' => 'AES', 'keysel' => array( 'lo' => 128, 'hi' => 256, 'step' => 64 ) ), + 'aes128gcm' => array( 'name' => 'AES128-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'aes192gcm' => array( 'name' => 'AES192-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'aes256gcm' => array( 'name' => 'AES256-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'blowfish' => array( 'name' => 'Blowfish', 'keysel' => array( 'lo' => 128, 'hi' => 256, 'step' => 64 ) ), + '3des' => array( 'name' => '3DES' ), + 'cast128' => array( 'name' => 'CAST128' ), + 'des' => array( 'name' => 'DES' )); + +$p1_halgos = array( + 'md5' => 'MD5', + 'sha1' => 'SHA1', + 'sha256' => 'SHA256', + 'sha384' => 'SHA384', + 'sha512' => 'SHA512', + 'aesxcbc' => 'AES-XCBC' +); + +$p1_dhgroups = array( + 1 => '1 (768 bit)', + 2 => '2 (1024 bit)', + 5 => '5 (1536 bit)', + 14 => '14 (2048 bit)', + 15 => '15 (3072 bit)', + 16 => '16 (4096 bit)', + 17 => '17 (6144 bit)', + 18 => '18 (8192 bit)', + 22 => '22 (1024(sub 160) bit)', + 23 => '23 (2048(sub 224) bit)', + 24 => '24 (2048(sub 256) bit)' +); + +$p2_halgos = array( + 'hmac_md5' => 'MD5', + 'hmac_sha1' => 'SHA1', + 'hmac_sha256' => 'SHA256', + 'hmac_sha384' => 'SHA384', + 'hmac_sha512' => 'SHA512', + 'aesxcbc' => 'AES-XCBC' +); + +$p1_authentication_methods = array( + 'hybrid_rsa_server' => array( 'name' => 'Hybrid RSA + Xauth', 'mobile' => true ), + 'xauth_rsa_server' => array( 'name' => 'Mutual RSA + Xauth', 'mobile' => true ), + 'xauth_psk_server' => array( 'name' => 'Mutual PSK + Xauth', 'mobile' => true ), + 'eap-tls' => array( 'name' => 'EAP-TLS', 'mobile' => true), + 'rsasig' => array( 'name' => 'Mutual RSA', 'mobile' => false ), + 'pre_shared_key' => array( 'name' => 'Mutual PSK', 'mobile' => false ) ); + +$p2_modes = array( + 'tunnel' => 'Tunnel IPv4', + 'tunnel6' => 'Tunnel IPv6', + 'transport' => 'Transport'); + +$p2_protos = array( + 'esp' => 'ESP', + 'ah' => 'AH'); + +$p2_pfskeygroups = array( + 0 => 'off', + 1 => '1 (768 bit)', + 2 => '2 (1024 bit)', + 5 => '5 (1536 bit)', + 14 => '14 (2048 bit)', + 15 => '15 (3072 bit)', + 16 => '16 (4096 bit)', + 17 => '17 (6144 bit)', + 18 => '18 (8192 bit)' +); + +/* + * ikeid management functions + */ + +function ipsec_ikeid_used($ikeid) { + global $config; + + foreach ($config['ipsec']['phase1'] as $ph1ent) + if( $ikeid == $ph1ent['ikeid'] ) + return true; + + return false; +} + +function ipsec_ikeid_next() { + + $ikeid = 1; + while(ipsec_ikeid_used($ikeid)) + $ikeid++; + + return $ikeid; +} + +/* + * Return phase1 local address + */ +function ipsec_get_phase1_src(& $ph1ent) { + + if ($ph1ent['interface']) { + if (!is_ipaddr($ph1ent['interface'])) { + if ($ph1ent['protocol'] == "inet6") { + $if = get_failover_interface($ph1ent['interface'], "inet6"); + $interfaceip = get_interface_ipv6($if); + } else { + $if = get_failover_interface($ph1ent['interface']); + $interfaceip = get_interface_ip($if); + } + } else { + $interfaceip=$ph1ent['interface']; + } + } else { + $if = "wan"; + if ($ph1ent['protocol'] == "inet6") + $interfaceip = get_interface_ipv6($if); + else + $interfaceip = get_interface_ip($if); + } + + return $interfaceip; +} + +/* + * Return phase1 local address + */ +function ipsec_get_phase1_dst(& $ph1ent) { + global $g; + + if (empty($ph1ent['remote-gateway'])) + return false; + $rg = $ph1ent['remote-gateway']; + if (!is_ipaddr($rg)) { + if(! $g['booting']) + return resolve_retry($rg); + } + if(!is_ipaddr($rg)) + return false; + + return $rg; +} + +/* + * Return phase2 idinfo in cidr format + */ +function ipsec_idinfo_to_cidr(& $idinfo, $addrbits = false, $mode = "") { + global $config; + + switch ($idinfo['type']) { + case "address": + if ($addrbits) { + if ($mode == "tunnel6") + return $idinfo['address']."/128"; + else + return $idinfo['address']."/32"; + } else + return $idinfo['address']; + break; /* NOTREACHED */ + case "network": + return "{$idinfo['address']}/{$idinfo['netbits']}"; + break; /* NOTREACHED */ + case "none": + case "mobile": + return "0.0.0.0/0"; + break; /* NOTREACHED */ + default: + if (empty($mode) && !empty($idinfo['mode'])) + $mode = $idinfo['mode']; + + if ($mode == "tunnel6") { + $address = get_interface_ipv6($idinfo['type']); + $netbits = get_interface_subnetv6($idinfo['type']); + $address = gen_subnetv6($address,$netbits); + return "{$address}/{$netbits}"; + } else { + $address = get_interface_ip($idinfo['type']); + $netbits = get_interface_subnet($idinfo['type']); + $address = gen_subnet($address,$netbits); + return "{$address}/{$netbits}"; + } + break; /* NOTREACHED */ + } +} + +/* + * Return phase2 idinfo in address/netmask format + */ +function ipsec_idinfo_to_subnet(& $idinfo,$addrbits = false) { + global $config; + + switch ($idinfo['type']) { + case "address": + if ($addrbits) { + if ($idinfo['mode'] == "tunnel6") + return $idinfo['address']."/128"; + else + return $idinfo['address']."/255.255.255.255"; + } else + return $idinfo['address']; + break; /* NOTREACHED */ + case "none": + case "network": + return $idinfo['address']."/".gen_subnet_mask($idinfo['netbits']); + break; /* NOTREACHED */ + case "mobile": + return "0.0.0.0/0"; + break; /* NOTREACHED */ + default: + if ($idinfo['mode'] == "tunnel6") { + $address = get_interface_ipv6($idinfo['type']); + $netbits = get_interface_subnetv6($idinfo['type']); + $address = gen_subnetv6($address,$netbits); + return $address."/".$netbits; + } else { + $address = get_interface_ip($idinfo['type']); + $netbits = get_interface_subnet($idinfo['type']); + $address = gen_subnet($address,$netbits); + return $address."/".$netbits; + } + break; /* NOTREACHED */ + } +} + +/* + * Return phase2 idinfo in text format + */ +function ipsec_idinfo_to_text(& $idinfo) { + global $config; + + switch ($idinfo['type']) { + case "address": + return $idinfo['address']; + break; /* NOTREACHED */ + case "network": + return $idinfo['address']."/".$idinfo['netbits']; + break; /* NOTREACHED */ + case "mobile": + return gettext("Mobile Client"); + break; /* NOTREACHED */ + case "none": + return gettext("None"); + break; /* NOTREACHED */ + default: + if (!empty($config['interfaces'][$idinfo['type']])) + return convert_friendly_interface_to_friendly_descr($idinfo['type']); + else + return strtoupper($idinfo['type']); + break; /* NOTREACHED */ + } +} + +/* + * Return phase1 association for phase2 + */ +function ipsec_lookup_phase1(& $ph2ent,& $ph1ent) { + global $config; + + if (!is_array($config['ipsec'])) + return false; + if (!is_array($config['ipsec']['phase1'])) + return false; + if (empty($config['ipsec']['phase1'])) + return false; + + foreach ($config['ipsec']['phase1'] as $ph1tmp) { + if ($ph1tmp['ikeid'] == $ph2ent['ikeid']) { + $ph1ent = $ph1tmp; + return $ph1ent; + } + } + + return false; +} + +/* + * Check phase1 communications status + */ +function ipsec_phase1_status($ipsec_status, $ikeid) { + + foreach ($ipsec_status as $ike) { + if ($ike['id'] != $ikeid) + continue; + if ($ike['status'] == 'established') + return true; + break; + } + + return false; +} + +/* + * Check phase2 communications status + */ +function ipsec_phase2_status($ipsec_status, &$phase2) { + + if (ipsec_lookup_phase1($ph2ent,$ph1ent)) + return ipsec_phase1_status($ipsec_status, $ph1ent['ikeid']); + + return false; +} + +/* + * Return ISAKMP SA details + */ +function ipsec_lookup_isakmp_sa($in_srcip,$in_dstip) { + /* TODO : use racconctl to lookup iskamp SA */ + return NULL; +} + +/* + * Return IPsec SA details + */ +function ipsec_lookup_ipsec_sa(& $spd,& $sad,$dir,$in_srcip,$in_dstip,$in_srcid,$in_dstid) { + + /* match the phase1/2 to an SP */ + $in_srcip = ipsec_fixup_ip($in_srcip); + $in_dstip = ipsec_fixup_ip($in_dstip); + $in_srcid = ipsec_fixup_ip($in_srcid); + $in_dstid = ipsec_fixup_ip($in_dstid); + + foreach($spd as $sp) { + + /* match direction */ + + if($dir != $sp['dir']) + continue; + + /* match IPs */ + + if($in_srcip != ipsec_fixup_ip($sp['src'])) + continue; + if($in_dstip != ipsec_fixup_ip($sp['dst'])) + continue; + + /* add netbits for address IDs */ + + $sp_srcid = $sp['srcid']; + $sp_dstid = $sp['dstid']; + + if (!strstr($sp_srcid,"/")) { + if (is_ipaddrv4($sp_srcid)) + $sp_srcid .= '/32'; + elseif (is_ipaddrv6($sp_srcid)) + $sp_srcid .= '/128'; + } + if (!strstr($sp_dstid,"/")) { + if (is_ipaddrv4($sp_dstid)) + $sp_dstid .= '/32'; + elseif (is_ipaddrv6($sp_dstid)) + $sp_dstid .= '/128'; + } + + /* match IDs */ + + if($in_srcid != ipsec_fixup_ip($sp_srcid)) + continue; + if($in_dstid != ipsec_fixup_ip($sp_dstid)) + continue; + + /* match the SP to a unique SA by reqid */ + + foreach($sad as $sa) { + + /* match REQIDs */ + + if($sa[reqid] != $sp[reqid]) + continue; + + /* sanitize for NAT-T ports */ + + $sa_srcip = $sa['src']; + $sa_dstip = $sa['dst']; + + if (strstr($sa_srcip,"[")) + $sa_srcip = substr($sa_srcip,0,strcspn($sa_srcip,"[")); + if (strstr($sa_dstip,"[")) + $sa_dstip = substr($sa_dstip,0,strcspn($sa_dstip,"[")); + + /* match IPs */ + + if($in_srcip != ipsec_fixup_ip($sa_srcip)) + continue; + if($in_dstip != ipsec_fixup_ip($sa_dstip)) + continue; + + return $sa; + } + } + + return NULL; +} + +function ipsec_smp_dump_status() { + global $config, $g, $custom_listtags; + + if (!file_exists("{$g['varrun_path']}/charon.xml")) { + log_error("IPsec daemon seems to have issues or not running!"); + return; + } + + $fd = @fsockopen("unix://{$g['varrun_path']}/charon.xml"); + if (!$fd) { + log_error("Could not read status from ipsec"); + return; + } + $query = ''; + $query .= ''; + + @fwrite($fd, $query); + $response = ""; + while (!strstr($sread, "")) { + $sread = fgets($fd); + $response .= $sread; + } + fclose($fd); + + @file_put_contents("{$g['tmp_path']}/smp_status.xml", $response); + unset($response, $sread); + + $custom_listtags = array('ikesa', 'childsa', 'network', 'auth'); + $response = parse_xml_config("{$g['tmp_path']}/smp_status.xml", "message"); + @unlink("{$g['tmp_path']}/smp_status.xml"); + unset($custom_listtags); + + return $response; +} + +/* + * Return dump of SPD table + */ +function ipsec_dump_spd() +{ + $fd = @popen("/sbin/setkey -DP", "r"); + $spd = array(); + if ($fd) { + while (!feof($fd)) { + $line = chop(fgets($fd)); + if (!$line) + continue; + if ($line == "No SPD entries.") + break; + if ($line[0] != "\t") { + if (is_array($cursp)) + $spd[] = $cursp; + $cursp = array(); + $linea = explode(" ", $line); + $cursp['srcid'] = substr($linea[0], 0, strpos($linea[0], "[")); + $cursp['dstid'] = substr($linea[1], 0, strpos($linea[1], "[")); + $i = 0; + } else if (is_array($cursp)) { + $linea = explode(" ", trim($line)); + switch($i) + { + case 1: + if ($linea[1] == "none") /* don't show default anti-lockout rule */ + unset($cursp); + else + $cursp['dir'] = $linea[0]; + break; + case 2: + $upperspec = explode("/", $linea[0]); + $cursp['proto'] = $upperspec[0]; + list($cursp['src'], $cursp['dst']) = explode("-", $upperspec[2]); + $cursp['reqid'] = substr($upperspec[3], strpos($upperspec[3], "#")+1); + break; + } + } + $i++; + } + if (is_array($cursp) && count($cursp)) + $spd[] = $cursp; + pclose($fd); + } + + return $spd; +} + +/* + * Return dump of SAD table + */ +function ipsec_dump_sad() +{ + $fd = @popen("/sbin/setkey -D", "r"); + $sad = array(); + if ($fd) { + while (!feof($fd)) { + $line = chop(fgets($fd)); + if (!$line || $line[0] == " ") + continue; + if ($line == "No SAD entries.") + break; + if ($line[0] != "\t") + { + if (is_array($cursa)) + $sad[] = $cursa; + $cursa = array(); + list($cursa['src'],$cursa['dst']) = explode(" ", $line); + $i = 0; + } + else + { + $linea = explode(" ", trim($line)); + switch ($i) { + case 1: + $cursa['proto'] = $linea[0]; + $cursa['spi'] = substr($linea[2], strpos($linea[2], "x")+1, -1); + $reqid = substr($linea[3], strpos($linea[3], "=")+1); + $cursa['reqid'] = substr($reqid, 0, strcspn($reqid,"(")); + break; + case 2: + $cursa['ealgo'] = $linea[1]; + break; + case 3: + $cursa['aalgo'] = $linea[1]; + break; + case 8: + $sadata = explode("(", $linea[1]); + $cursa['data'] = $sadata[0] . " B"; + break; + } + } + $i++; + } + if (is_array($cursa) && count($cursa)) + $sad[] = $cursa; + pclose($fd); + } + + return $sad; +} + +/* + * Return dump of mobile user list + */ +function ipsec_dump_mobile() { + global $g, $custom_listtags; + + $_gb = exec("/usr/local/sbin/ipsec stroke leases > {$g['tmp_path']}/strongswan_leases.xml"); + + if (!file_exists("{$g['tmp_path']}/strongswan_leases.xml")) { + log_error(gettext("IPsec daemon seems to have issues or not running! Could not display mobile user stats!")); + return array(); + } + + $custom_listtags = array('lease', 'pool'); + $response = parse_xml_config("{$g['tmp_path']}/strongswan_leases.xml", "leases"); + @unlink("{$g['tmp_path']}/strongswan_leases.xml"); + unset($custom_listtags, $_gb); + + return $response; +} + +function ipsec_mobilekey_sort() { + global $config; + + function mobilekeycmp($a, $b) { + return strcmp($a['ident'][0], $b['ident'][0]); + } + + usort($config['ipsec']['mobilekey'], "mobilekeycmp"); +} + +function ipsec_get_number_of_phase2($ikeid) { + global $config; + $a_phase2 = $config['ipsec']['phase2']; + + $nbph2=0; + + if (is_array($a_phase2) && count($a_phase2)) { + foreach ($a_phase2 as $ph2tmp) { + if ($ph2tmp['ikeid'] == $ikeid) { + $nbph2++; + } + } + } + + return $nbph2; +} + +function ipsec_get_descr($ikeid) { + global $config; + + if (!isset($config['ipsec']['phase1']) || + !is_array($config['ipsec']['phase1'])) + return ""; + + $descr = ''; + $a_phase1 = $config['ipsec']['phase1']; + foreach ($a_phase1 as $p1) { + if ($p1['ikeid'] == $ikeid) { + $descr = $p1['descr']; + break; + } + } + unset($a_phase1); + + return $descr; +} + +function ipsec_fixup_ip($ipaddr) { + if (is_ipaddrv6($ipaddr) || is_subnetv6($ipaddr)) + return Net_IPv6::compress(Net_IPv6::uncompress($ipaddr)); + else + return $ipaddr; +} + +function ipsec_find_id(& $ph1ent, $side = "local", $rgmap = array()) { + if ($side == "local") { + $id_type = $ph1ent['myid_type']; + $id_data = $ph1ent['myid_data']; + + $addr = ipsec_get_phase1_src($ph1ent); + if (!$addr) + return array(); + } elseif ($side = "peer") { + $id_type = $ph1ent['peerid_type']; + $id_data = $ph1ent['peerid_data']; + + if (isset($ph1ent['mobile'])) + $addr = "%any"; + else + $addr = $ph1ent['remote-gateway']; + } else { + return array(); + } + + + $thisid_type = $id_type; + switch ($thisid_type) { + case "myaddress": + $thisid_type = "address"; + $thisid_data = $addr; + break; + + case "dyn_dns": + $thisid_type = "address"; + $thisid_data = resolve_retry($id_data); + break; + + case "peeraddress": + $thisid_type = "address"; + $thisid_data = $rgmap[$ph1ent['remote-gateway']]; + break; + + case "address"; + $thisid_data = $id_data; + break; + + case "fqdn"; + case "keyid tag"; + case "user_fqdn"; + case "asn1dn"; + $thisid_data = $id_data; + if( $thisid_data ) + $thisid_data = "{$thisid_data}"; + break; + } + return array($thisid_type, $thisid_data); +} + +function ipsec_fixup_network($network) { + if (substr($network, -3) == '|/0') + $result = substr($network, 0, -3); + else { + $tmp = explode('|', $network); + if (isset($tmp[1])) + $result = $tmp[1]; + else + $result = $tmp[0]; + unset($tmp); + } + + return $result; +} + +?> diff --git a/etc/inc/itemid.inc b/etc/inc/itemid.inc new file mode 100644 index 000000000..787760d72 --- /dev/null +++ b/etc/inc/itemid.inc @@ -0,0 +1,106 @@ + + 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. + + DISABLE_PHP_LINT_CHECKING +*/ + +/****f* itemid/delete_id + * NAME + * delete_id - delete an item with ['id'] = $id from $array + * INPUTS + * $id - int: The ID to delete + * $array - array to delete the item from + * RESULT + * boolean - true if item was found and deleted + ******/ +function delete_id($id, &$array){ + // Index to delete + $delete_index = NULL; + + if (!is_array($array)) + return false; + + // Search for the item in the array + foreach ($array as $key => $item){ + // If this item is the one we want to delete + if(isset($item['associated-rule-id']) && $item['associated-rule-id']==$id ){ + $delete_index = $key; + break; + } + } + + // If we found the item, unset it + if( $delete_index!==NULL ){ + unset($array[$delete_index]); + return true; + } else { + return false; + } + +} + +/****f* itemid/get_id + * NAME + * get_id - Get an item id with ['associated-rule-id'] = $id from $array + * INPUTS + * $id - string: The ID to get + * $array - array to get the item from + * RESULT + * mixed - The id, NULL if not found + ******/ +function get_id($id, &$array) { + // Use $foo = &get_id('id', array('id'=>'value')); + + if (!is_array($array)) + return false; + + // Search for the item in the array + foreach ($array as $key => $item){ + // If this item is the one we want to delete + if (isset($item['associated-rule-id']) && $item['associated-rule-id']==$id) + return $key; + } + + return false; +} + +/****f* itemid/get_unique_id + * NAME + * get_unique_id - get a unique identifier + * RESULT + * string - unique id + ******/ +function get_unique_id(){ + + return uniqid("nat_", true); +} + +?> \ No newline at end of file diff --git a/etc/inc/led.inc b/etc/inc/led.inc new file mode 100644 index 000000000..9d060597c --- /dev/null +++ b/etc/inc/led.inc @@ -0,0 +1,354 @@ + + * + * LED control library that wraps around the functionality of led(4) + * + */ +/* + pfSense_BUILDER_BINARIES: /bin/echo + pfSense_MODULE: utils +*/ + +$led_root = "/dev/led/led"; + +/* + * Send the control string to an LED + */ +function led_ctl($led, $str) { + global $led_root; + if (led_exists($led)) { + exec("/bin/echo " . escapeshellarg($str) . " > {$led_root}{$led}"); + return true; + } + return false; +} + +/* + * Blink an LED at set speed from 1-9 (1=Very Fast, 9=Very Slow) + */ +function led_blink($led, $speed=0) { + switch ($speed) { + case "reallyfast": + case "veryfast": + $speed = 1; + break; + case "fast": + $speed = 3; + break; + case "medium": + $speed = 5; + break; + case "slow": + $speed = 7; + break; + case "reallyslow": + case "veryslow": + $speed = 9; + break; + } + if (is_numeric($speed) && ($speed > 0) && ($speed < 10)) { + return led_ctl($led, "f{$speed}"); + } + return false; +} + +/* + * Blink an LED in a specific pattern + * Letters A-J are on from 1/10s to 1s + * Letters a-j are off from 1/10s to 1s + */ +function led_pattern($led, $pattern, $repeat=true) { + /* End with a . to stop after one iteration. */ + $end = $repeat ? "" : "."; + return led_ctl($led, "s{$pattern}{$end}"); +} + +/* + * Encode a text message into morse code, and send it to an LED + */ +function led_morse($led, $message) { + return led_ctl($led, "m" . str_to_morse($message)); +} + +/* + * Blink digits out on LED at 1/10s intervals + * e.g 1=1 blink, 8=8 blinks + * 0 is 10 pulses. + * One second pause between digits. + */ +function led_digit($led, $digitstring) { + $i = 0; + $dstring = "d"; + while ($i < strlen($digitstring)) { + $thisdigit = substr($digitstring, $i++, 1); + if (is_numeric($thisdigit)) + $dstring .= $thisdigit; + } + led_ctl($led, $dstring); +} + +/* + * Turn an LED on + */ +function led_on($led) { + led_ctl($led, "1"); +} + +/* + * Turn an LED off + */ +function led_off($led) { + led_ctl($led, "0"); +} + +/* + * Find the number of LEDs present on the system. + */ +function led_count() { + global $led_root; + $count = 0; + $leds = array(); + if (is_dir(dirname($led_root))) { + $leds = glob("{$led_root}*"); + $count = count($leds); + } + return $count; +} + +/* + * Test to see if a given LED exists. + */ +function led_exists($led) { + global $led_root; + if (!is_numeric($led)) + return false; + return file_exists("{$led_root}{$led}"); +} + +/* + * Sweep across three LEDs in a K.I.T.T.-like way. + */ +function led_kitt() { + led_pattern(1, 'AaaaaA'); + led_pattern(2, 'aAaaAa'); + led_pattern(3, 'aaAAaa'); +} + +/* + * Custom pattern for assigning interfaces + */ +function led_assigninterfaces() { + led_pattern(1, 'AaaAaaaaaaaaaaaa'); + led_pattern(2, 'aaaaaAaaAaaaaaaa'); + led_pattern(3, 'aaaaaaaaaaAaaAaa'); +} + +/* + * Return the three LEDs to a standard setup (1=on, 2 and 3 = off) + */ +function led_normalize() { + led_on(1); + led_off(2); + led_off(3); +} + +/* + * Shut off ALL LEDs. + */ +function led_alloff() { + led_off(1); + led_off(2); + led_off(3); +} + +/* + * Translate a string to morse code. Characters not known to have a + * valid morse code representation will be ignored. + */ +function str_to_morse($string) { + $i = 0; + $morsestring = ""; + while ($i < strlen($string)) { + $morsestring .= char_to_morse(substr($string, $i++, 1)) . " "; + } + return $morsestring . "\n"; +} + +/* + * Translate a single character to morse code. Characters not known + * to have a valid morse code representation will be ignored. + */ +function char_to_morse($char) { + switch (strtoupper($char)) { + case "A": + return ".-"; + break; + case "B": + return "-..."; + break; + case "C": + return "-.-."; + break; + case "D": + return "-.."; + break; + case "E": + return "."; + break; + case "F": + return "..-."; + break; + case "G": + return "--."; + break; + case "H": + return "...."; + break; + case "I": + return ".."; + break; + case "J": + return ".---"; + break; + case "K": + return "-.-"; + break; + case "L": + return ".-.."; + break; + case "M": + return "--"; + break; + case "N": + return "-."; + break; + case "O": + return "---"; + break; + case "P": + return ".--."; + break; + case "Q": + return "--.-"; + break; + case "R": + return ".-."; + break; + case "S": + return "..."; + break; + case "T": + return "-"; + break; + case "U": + return "..-"; + break; + case "V": + return "...-"; + break; + case "W": + return ".--"; + break; + case "X": + return "-..-"; + break; + case "Y": + return "-.--"; + break; + case "Z": + return "--.."; + break; + case "0": + return "-----"; + break; + case "1": + return ".----"; + break; + case "2": + return "..---"; + break; + case "3": + return "...--"; + break; + case "4": + return "....-"; + break; + case "5": + return "....."; + break; + case "6": + return "-...."; + break; + case "7": + return "--..."; + break; + case "8": + return "---.."; + break; + case "9": + return "----."; + break; + case ".": + return ".-.-.-"; + break; + case ",": + return "--..--"; + break; + case "?": + return "..--.."; + break; + case "'": + return ".----."; + break; + case "!": + return "-.-.--"; + break; + case "/": + return "-..-."; + break; + case "(": + return "-.--."; + break; + case ")": + return "-.--.-"; + break; + case "&": + return ".-..."; + break; + case ":": + return "---..."; + break; + case ";": + return "-.-.-."; + break; + case "=": + return "-...-"; + break; + case "+": + return ".-.-."; + break; + case "-": + return "-....-"; + break; + case "_": + return "..--.-"; + break; + case "$": + return "...-..-"; + break; + case "@": + return ".--.-."; + break; + case '"': + return ".-..-."; + break; + default: + return ""; + break; + } +} + +?> \ No newline at end of file diff --git a/etc/inc/login_sasl_client.inc b/etc/inc/login_sasl_client.inc new file mode 100644 index 000000000..923d16efa --- /dev/null +++ b/etc/inc/login_sasl_client.inc @@ -0,0 +1,69 @@ +state!=SASL_LOGIN_STATE_START) + { + $client->error="LOGIN authentication state is not at the start"; + return(SASL_FAIL); + } + $this->credentials=array( + "user"=>"", + "password"=>"", + "realm"=>"" + ); + $defaults=array( + "realm"=>"" + ); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + $this->state=SASL_LOGIN_STATE_IDENTIFY_USER; + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { + case SASL_LOGIN_STATE_IDENTIFY_USER: + $message=$this->credentials["user"].(strlen($this->credentials["realm"]) ? "@".$this->credentials["realm"] : ""); + $this->state=SASL_LOGIN_STATE_IDENTIFY_PASSWORD; + break; + case SASL_LOGIN_STATE_IDENTIFY_PASSWORD: + $message=$this->credentials["password"]; + $this->state=SASL_LOGIN_STATE_DONE; + break; + case SASL_LOGIN_STATE_DONE: + $client->error="LOGIN authentication was finished without success"; + break; + default: + $client->error="invalid LOGIN authentication step state"; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> \ No newline at end of file diff --git a/etc/inc/meta.inc b/etc/inc/meta.inc new file mode 100644 index 000000000..11295f532 --- /dev/null +++ b/etc/inc/meta.inc @@ -0,0 +1,200 @@ +']['INFO']['BLAH'][0] == true + * metadata['']['INFO']['TEXT'][0] == "SOME TEXT" + * + * NOTE: All statements must be at the begining of a line and + * contiguous for a tag. The example shown above would not be + * processed due to the extra ' * ' comment chars. + * + */ + +/* + * locate php files for a given path + */ + +function list_phpfiles($path, & $found) { + + if (!is_array($found)) + $found = array(); + + $dir = opendir($path); + if (!$dir) { + printf(gettext("list_phpfiles: unable to examine path %s\n"), $path); + return; + } + + while($fname = readdir($dir)) { + if($fname == "." || $fname == ".." || $fname[0] == '.') + continue; + if (fnmatch('*.php', $fname)) + $found[] = $fname; + } +} + +/* + * read embedded metadata from a file + */ + +function read_file_metadata($fpath, & $metadata, $taglist = false) { + + if (!is_array($metadata)) + $metadata = array(); + + if ($taglist) + $taglist = explode(",", $taglist); + + $fname = $fpath; + $slash = strrpos($fname,"/"); + if ($slash) + $fname = substr($fname,$slash + 1); + + $fdata = @file_get_contents($fpath); + if (!$fdata) { + printf(gettext("unable to read %s\n"), $fpath); + continue; + } + + $offset = 0; + + $tags = array(); + + while (true) { + + $tagbeg_off = stripos($fdata, "##|+", $offset); + if ($tagbeg_off === false) + break; + + $tagbeg_trm = stripos($fdata, "\n", $tagbeg_off); + if ($tagbeg_trm === false) + break; + + $tagend_off = stripos($fdata, "##|-", $tagbeg_trm); + if ($tagend_off === false) + break; + + $tagend_trm = stripos($fdata, "\n", $tagend_off); + if ($tagend_trm === false) + break; + + $tagbeg_len = $tagbeg_trm - $tagbeg_off; + $tagend_len = $tagend_trm - $tagend_off; + + $tagbeg = substr($fdata, $tagbeg_off + 4, $tagbeg_len - 4); + $tagend = substr($fdata, $tagend_off + 4, $tagend_len - 4); + + if ($tagbeg != $tagend) { + printf(gettext("error: tag mismatch ( %1\$s != %2\$s ) in '%3\$s'%4\$s"), $tagbeg, $tagend, $fpath, "\n"); + break; + } + + $mdata_off = $tagbeg_trm + 1; + $mdata_trm = $tagend_off - 1; + $mdata_len = $mdata_trm - $mdata_off; + + $mdata = substr($fdata, $mdata_off, $mdata_len); + + if (!strlen($mdata)) { + printf(gettext("warning: tag %1\$s has no data in '%2\$s'%3\$s"), $tagbeg, $fpath, "\n"); + break; + } + + $offset = $tagend_trm + 1; + + if (is_array($taglist)) + if (!in_array($tagbeg,$taglist)) + continue; + + $vals = array(); + + $lines = explode("\n",$mdata); + foreach ($lines as $line) { + + if (!strlen($line)) + continue; + + $valtag = stripos($line, "##|*"); + if ($valtag === false || $valtag) { + printf(gettext("warning: tag %1\$s has malformed data in '%2\$s'%3\$s"), $tagbeg, $fpath, "\n"); + continue; + } + + $value = substr($line, 4, strlen($line) - 1); + $vlist = explode("=", $value); + + unset($vname); + unset($vdata); + + switch (count($vlist)) { + case 1: + $vname = $vlist[0]; + $vdata = true; + break; + case 2: + $vname = $vlist[0]; + $vdata = $vlist[1]; + break; + } + + if (!isset($vname) || !isset($vdata)) { + printf(gettext("warning: tag %1\$s has invalid data in '%2\$s'%3\$s"), $tagbeg, $fpath, "\n"); + continue; + } + + $vals[$vname][] = $vdata; + } + + if (count($vals)) + $tags[$tagbeg] = $vals; + } + + if (count($tags)) + $metadata[$fname] = $tags; +} + +?> diff --git a/etc/inc/notices.inc b/etc/inc/notices.inc new file mode 100644 index 000000000..ea8d22073 --- /dev/null +++ b/etc/inc/notices.inc @@ -0,0 +1,413 @@ + $id, + 'notice' => $notice, + 'url' => $url, + 'category' => $category, + 'priority' => $priority, + ); + $queue[$queuekey] = $toqueue; + $queueout = fopen($notice_path, "w"); + if(!$queueout) { + log_error(printf(gettext("Could not open %s for writing"), $notice_path)); + return; + } + fwrite($queueout, serialize($queue)); + fclose($queueout); + log_error("New alert found: $notice"); + /* soekris */ + if(file_exists("/dev/led/error")) + exec("/bin/echo 1 > /dev/led/error"); + /* wrap & alix */ + led_normalize(); + led_morse(1, 'sos'); + notify_via_growl($notice); + notify_via_smtp($notice); + return $queuekey; +} + +/****f* notices/get_notices + * NAME + * get_notices + * INPUTS + * $category + * RESULT + * Returns a specific notices text + ******/ +function get_notices($category = "all") { + global $g; + + if(file_exists("{$g['tmp_path']}/notices")) { + $queue = unserialize(file_get_contents("{$g['tmp_path']}/notices")); + if(!$queue) return false; + if($category != 'all') { + foreach($queue as $time => $notice) { + if(strtolower($notice['category']) == strtolower($category)) + $toreturn[$time] = $notice; + } + return $toreturn; + } else { + return $queue; + } + } else { + return false; + } +} + +/****f* notices/close_notice + * NAME + * close_notice + * INPUTS + * $id + * RESULT + * Removes a notice from the list + ******/ +function close_notice($id) { + global $notice_path; + require_once("util.inc"); + /* soekris */ + if(file_exists("/dev/led/error")) + exec("/bin/echo 0 > /dev/led/error"); + /* wrap & alix */ + led_normalize(); + $ids = array(); + if(!$notices = get_notices()) return; + if($id == "all") { + unlink_if_exists($notice_path); + return; + } + foreach(array_keys($notices) as $time) { + if($id == $time) { + unset($notices[$id]); + break; + } + } + foreach($notices as $key => $notice) { + $ids[$key] = $notice['id']; + } + foreach($ids as $time => $tocheck) { + if($id == $tocheck) { + unset($notices[$time]); + break; + } + } + if(count($notices) != 0) { + $queueout = fopen($notice_path, "w"); + fwrite($queueout, serialize($notices)); + fclose($queueout); + } else { + unlink_if_exists($notice_path); + } + + return; +} + +/****f* notices/dump_xml_notices + * NAME + * dump_xml_notices + * INPUTS + * NONE + * RESULT + * Outputs notices in XML formatted text + ******/ +function dump_xml_notices() { + if(file_exists("/cf/conf/use_xmlreader")) + require_once("xmlreader.inc"); + else + require_once("xmlparse.inc"); + global $notice_path, $listtags; + $listtags[] = 'notice'; + if(!$notices = get_notices()) return; + foreach($notices as $time => $notice) { + $notice['time'] = $time; + $toput['notice'][] = $notice; + } + $xml = dump_xml_config($toput, 'notices'); + return $xml; +} + +/****f* notices/print_notices + * NAME + * print_notices + * INPUTS + * $notices, $category + * RESULT + * prints notices to the GUI + ******/ +function print_notices($notices, $category = "all") { + foreach($notices as $notice) { + if($category != "all") { + if(in_array($notice['category'], $category)) $categories[] = $notice['category']; + } else { + $categories[] = $notice['category']; + } + } + $categories = array_unique($categories); + sort($categories); + foreach($categories as $category) { + $toreturn .= "
  • {$category}
      "; + foreach($notices as $notice) { + if(strtolower($notice['category']) == strtolower($category)) { + if($notice['id'] != "") { + if($notice['url'] != "") { + $toreturn .= "
    • {$notice['id']} - {$notice['notice']}
    • "; + } else { + $toreturn .= "
    • {$notice['id']} - {$notice['notice']}
    • "; + } + } + } + } + $toreturn .= "
"; + } + return $toreturn; +} + +/****f* notices/print_notice_box + * NAME + * print_notice_box + * INPUTS + * $category + * RESULT + * prints an info box to the GUI + ******/ +function print_notice_box($category = "all") { + $notices = get_notices(); + if(!$notices) return; + print_info_box_np(print_notices($notices, $category)); + return; +} + +/****f* notices/are_notices_pending + * NAME + * are_notices_pending + * INPUTS + * $category to check + * RESULT + * returns true if notices are pending, false if they are not + ******/ +function are_notices_pending($category = "all") { + global $notice_path; + if(file_exists($notice_path)) { + return true; + } + return false; +} + +/****f* notices/notify_via_smtp + * NAME + * notify_via_smtp + * INPUTS + * notification string to send as an email + * RESULT + * returns true if message was sent + ******/ +function notify_via_smtp($message, $force = false) { + global $config, $g; + if($g['booting']) + return; + + if(isset($config['notifications']['smtp']['disable']) && !$force) + return; + + /* Do NOT send the same message twice */ + if(file_exists("/var/db/notices_lastmsg.txt")) { + $lastmsg = trim(file_get_contents("/var/db/notices_lastmsg.txt")); + if($lastmsg == $message) + return; + } + + /* Store last message sent to avoid spamming */ + $fd = fopen("/var/db/notices_lastmsg.txt", "w"); + fwrite($fd, $message); + fclose($fd); + + send_smtp_message($message, "{$config['system']['hostname']}.{$config['system']['domain']} - Notification"); + return; +} + +function send_smtp_message($message, $subject = "(no subject)") { + global $config, $g; + require_once("sasl.inc"); + require_once("smtp.inc"); + + if(!$config['notifications']['smtp']['ipaddress']) + return; + + if(!$config['notifications']['smtp']['notifyemailaddress']) + return; + + $smtp = new smtp_class; + + $from = "pfsense@{$config['system']['hostname']}.{$config['system']['domain']}"; + $to = $config['notifications']['smtp']['notifyemailaddress']; + + $smtp->host_name = $config['notifications']['smtp']['ipaddress']; + $smtp->host_port = empty($config['notifications']['smtp']['port']) ? 25 : $config['notifications']['smtp']['port']; + + $smtp->direct_delivery = 0; + $smtp->ssl = (isset($config['notifications']['smtp']['ssl'])) ? 1 : 0; + $smtp->tls = (isset($config['notifications']['smtp']['tls'])) ? 1 : 0; + $smtp->debug = 0; + $smtp->html_debug = 0; + $smtp->localhost=$config['system']['hostname'].".".$config['system']['domain']; + + if($config['notifications']['smtp']['fromaddress']) + $from = $config['notifications']['smtp']['fromaddress']; + + // Use SMTP Auth if fields are filled out + if($config['notifications']['smtp']['username'] && + $config['notifications']['smtp']['password']) { + $smtp->authentication_mechanism = "PLAIN"; + $smtp->user = $config['notifications']['smtp']['username']; + $smtp->password = $config['notifications']['smtp']['password']; + } + + $headers = array( + "From: {$from}", + "To: {$to}", + "Subject: {$subject}", + "Date: ".date("r") + ); + + if($smtp->SendMessage($from, preg_split('/\s*,\s*/', trim($to)), $headers, $message)) { + log_error(sprintf(gettext("Message sent to %s OK"), $to)); + return; + } else { + log_error(sprintf(gettext('Could not send the message to %1$s -- Error: %2$s'), $to, $smtp->error)); + return(sprintf(gettext('Could not send the message to %1$s -- Error: %2$s'), $to, $smtp->error)); + } +} + +/****f* notices/notify_via_growl + * NAME + * notify_via_growl + * INPUTS + * notification string to send + * RESULT + * returns true if message was sent + ******/ +function notify_via_growl($message, $force=false) { + require_once("growl.class"); + global $config,$g; + + if (isset($config['notifications']['growl']['disable']) && !$force) + return; + + /* Do NOT send the same message twice */ + if(file_exists("/var/db/growlnotices_lastmsg.txt")) { + $lastmsg = trim(file_get_contents("/var/db/growlnotices_lastmsg.txt")); + if($lastmsg == $message) + return; + } + + $hostname = $config['system']['hostname'] . "." . $config['system']['domain']; + $growl_ip = $config['notifications']['growl']['ipaddress']; + $growl_password = $config['notifications']['growl']['password']; + $growl_name = $config['notifications']['growl']['name']; + $growl_notification = $config['notifications']['growl']['notification_name']; + + if(!empty($growl_ip)) { + $growl = new Growl($growl_ip, $growl_password, $growl_name); + $growl->notify("{$growl_notification}", gettext(sprintf("%s (%s) - Notification", $g['product_name'], $hostname)), "{$message}"); + } + + /* Store last message sent to avoid spamming */ + $fd = fopen("/var/db/growlnotices_lastmsg.txt", "w"); + fwrite($fd, $message); + fclose($fd); +} + +/****f* notices/register_via_growl + * NAME + * register_via_growl + * INPUTS + * none + * RESULT + * none + ******/ +function register_via_growl() { + require_once("growl.class"); + global $config; + $growl_ip = $config['notifications']['growl']['ipaddress']; + $growl_password = $config['notifications']['growl']['password']; + $growl_name = $config['notifications']['growl']['name']; + $growl_notification = $config['notifications']['growl']['notification_name']; + + if($growl_ip) { + $growl = new Growl($growl_ip, $growl_password, $growl_name); + $growl->addNotification($growl_notification); + $growl->register(); + } +} + +/* Notify via remote methods only - not via GUI. */ +function notify_all_remote($msg) { + notify_via_smtp($msg); + notify_via_growl($msg); +} + +?> diff --git a/etc/inc/ntlm_sasl_client.inc b/etc/inc/ntlm_sasl_client.inc new file mode 100644 index 000000000..f21fcb55c --- /dev/null +++ b/etc/inc/ntlm_sasl_client.inc @@ -0,0 +1,180 @@ +"mcrypt", + "hash"=>"hash" + ); + $client->error="the extension ".$extensions[$function]." required by the NTLM SASL client class is not available in this PHP configuration"; + return(0); + } + return(1); + } + + Function ASCIIToUnicode($ascii) + { + for($unicode="",$a=0;$aASCIIToUnicode($password); + $md4=hash("md4", $unicode); + $padded=$md4.str_repeat(chr(0),21-strlen($md4)); + $iv_size=mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB); + $iv=mcrypt_create_iv($iv_size,MCRYPT_RAND); + for($response="",$third=0;$third<21;$third+=7) + { + for($packed="",$p=$third;$p<$third+7;$p++) + $packed.=str_pad(decbin(ord(substr($padded,$p,1))),8,"0",STR_PAD_LEFT); + for($key="",$p=0;$pASCIIToUnicode($domain); + $domain_length=strlen($domain_unicode); + $domain_offset=64; + $user_unicode=$this->ASCIIToUnicode($user); + $user_length=strlen($user_unicode); + $user_offset=$domain_offset+$domain_length; + $workstation_unicode=$this->ASCIIToUnicode($workstation); + $workstation_length=strlen($workstation_unicode); + $workstation_offset=$user_offset+$user_length; + $lm=""; + $lm_length=strlen($lm); + $lm_offset=$workstation_offset+$workstation_length; + $ntlm=$ntlm_response; + $ntlm_length=strlen($ntlm); + $ntlm_offset=$lm_offset+$lm_length; + $session=""; + $session_length=strlen($session); + $session_offset=$ntlm_offset+$ntlm_length; + return( + "NTLMSSP\0". + "\x03\x00\x00\x00". + pack("v",$lm_length). + pack("v",$lm_length). + pack("V",$lm_offset). + pack("v",$ntlm_length). + pack("v",$ntlm_length). + pack("V",$ntlm_offset). + pack("v",$domain_length). + pack("v",$domain_length). + pack("V",$domain_offset). + pack("v",$user_length). + pack("v",$user_length). + pack("V",$user_offset). + pack("v",$workstation_length). + pack("v",$workstation_length). + pack("V",$workstation_offset). + pack("v",$session_length). + pack("v",$session_length). + pack("V",$session_offset). + "\x01\x02\x00\x00". + $domain_unicode. + $user_unicode. + $workstation_unicode. + $lm. + $ntlm + ); + } + + Function Start(&$client, &$message, &$interactions) + { + if($this->state!=SASL_NTLM_STATE_START) + { + $client->error="NTLM authentication state is not at the start"; + return(SASL_FAIL); + } + $this->credentials=array( + "user"=>"", + "password"=>"", + "realm"=>"", + "workstation"=>"" + ); + $defaults=array(); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + $this->state=SASL_NTLM_STATE_IDENTIFY_DOMAIN; + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { + case SASL_NTLM_STATE_IDENTIFY_DOMAIN: + $message=$this->TypeMsg1($this->credentials["realm"],$this->credentials["workstation"]); + $this->state=SASL_NTLM_STATE_RESPOND_CHALLENGE; + break; + case SASL_NTLM_STATE_RESPOND_CHALLENGE: + $ntlm_response=$this->NTLMResponse(substr($response,24,8),$this->credentials["password"]); + $message=$this->TypeMsg3($ntlm_response,$this->credentials["user"],$this->credentials["realm"],$this->credentials["workstation"]); + $this->state=SASL_NTLM_STATE_DONE; + break; + case SASL_NTLM_STATE_DONE: + $client->error="NTLM authentication was finished without success"; + return(SASL_FAIL); + default: + $client->error="invalid NTLM authentication step state"; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> diff --git a/etc/inc/openvpn.attributes.php b/etc/inc/openvpn.attributes.php new file mode 100644 index 000000000..942a8d80e --- /dev/null +++ b/etc/inc/openvpn.attributes.php @@ -0,0 +1,186 @@ + diff --git a/etc/inc/openvpn.auth-user.php b/etc/inc/openvpn.auth-user.php new file mode 100644 index 000000000..81991e97d --- /dev/null +++ b/etc/inc/openvpn.auth-user.php @@ -0,0 +1,206 @@ +#!/usr/local/bin/php -f + + +if (file_exists("{$g['varetc_path']}/openvpn/{$modeid}.ca")) { + putenv("LDAPTLS_CACERT={$g['varetc_path']}/openvpn/{$modeid}.ca"); + putenv("LDAPTLS_REQCERT=never"); +} + +$authenticated = false; + +if (($strictusercn === true) && ($common_name != $username)) { + syslog(LOG_WARNING, "Username does not match certificate common name ({$username} != {$common_name}), access denied.\n"); + if (isset($_GET)) { + echo "FAILED"; + closelog(); + return; + } else { + closelog(); + exit(1); + } +} + +if (!is_array($authmodes)) { + syslog(LOG_WARNING, "No authentication server has been selected to authenticate against. Denying authentication for user {$username}"); + if (isset($_GET)) { + echo "FAILED"; + closelog(); + return; + } else { + closelog(); + exit(1); + } +} + +$attributes = array(); +foreach ($authmodes as $authmode) { + $authcfg = auth_get_authserver($authmode); + if (!$authcfg && $authmode != "local") + continue; + + $authenticated = authenticate_user($username, $password, $authcfg, $attributes); + if ($authenticated == true) + break; +} + +if ($authenticated == false) { + syslog(LOG_WARNING, "user '{$username}' could not authenticate.\n"); + if (isset($_GET)) { + echo "FAILED"; + closelog(); + return; + } else { + closelog(); + exit(-1); + } +} + +if (file_exists("/etc/inc/openvpn.attributes.php")) + include_once("/etc/inc/openvpn.attributes.php"); + +$content = ""; +if (is_array($attributes['dns-servers'])) { + foreach ($attributes['dns-servers'] as $dnssrv) { + if (is_ipaddr($dnssrv)) + $content .= "push \"dhcp-option DNS {$dnssrv}\"\n"; + } +} +if (is_array($attributes['routes'])) { + foreach ($attributes['routes'] as $route) + $content .= "push \"route {$route} vpn_gateway\"\n"; +} + +if (isset($attributes['framed_ip'])) { +/* XXX: only use when TAP windows driver >= 8.2.x */ +/* if (isset($attributes['framed_mask'])) { + $content .= "topology subnet\n"; + $content .= "ifconfig-push {$attributes['framed_ip']} {$attributes['framed_mask']}"; + } else { +*/ + $content .= "topology net30\n"; + $content .= "ifconfig-push {$attributes['framed_ip']} ". long2ip((ip2long($attributes['framed_ip']) + 1)); +// } +} + +if (!empty($content)) + @file_put_contents("{$g['tmp_path']}/{$username}", $content); + +syslog(LOG_NOTICE, "user '{$username}' authenticated\n"); +closelog(); + +if (isset($_GET)) + echo "OK"; +else + exit(0); + +?> diff --git a/etc/inc/openvpn.inc b/etc/inc/openvpn.inc new file mode 100644 index 000000000..c7d918c69 --- /dev/null +++ b/etc/inc/openvpn.inc @@ -0,0 +1,1446 @@ + + All rights reserved. + + Copyright (C) 2006 Fernando Lemos + All rights reserved. + + This file was rewritten from scratch by Fernando Lemos but + *MIGHT* contain code previously written by: + + Copyright (C) 2005 Peter Allgeyer + All rights reserved. + + Copyright (C) 2004 Peter Curran (peter@closeconsultants.com). + 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 notices, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notices, 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. + + DISABLE_PHP_LINT_CHECKING + + pfSense_BUILDER_BINARIES: /usr/local/sbin/openvpn /usr/bin/openssl /sbin/ifconfig + pfSense_MODULE: openvpn + +*/ +require_once('config.inc'); +require_once("certs.inc"); +require_once('pfsense-utils.inc'); +require_once("auth.inc"); + +global $openvpn_prots; +$openvpn_prots = array("UDP", "UDP6", "TCP", "TCP6"); + +global $openvpn_dev_mode; +$openvpn_dev_mode = array("tun", "tap"); + +global $openvpn_verbosity_level; +$openvpn_verbosity_level = array( + 0 => "none", + 1 => "default", + 2 => "2", + 3 => "3 (recommended)", + 4 => "4", + 5 => "5", + 6 => "6", + 7 => "7", + 8 => "8", + 9 => "9", + 10 => "10", + 11 => "11" +); + +/* + * The User Auth mode below is disabled because + * OpenVPN erroneously requires that we provide + * a CA configuration parameter. In this mode, + * clients don't send a certificate so there is + * no need for a CA. If we require that admins + * provide one in the pfSense UI due to a bogus + * requirement imposed by OpenVPN, it could be + * considered very confusing ( I know I was ). + * + * -mgrooms + */ + +global $openvpn_dh_lengths; +$openvpn_dh_lengths = array( + 1024, 2048, 4096 ); + +global $openvpn_cert_depths; +$openvpn_cert_depths = array( + 1 => "One (Client+Server)", + 2 => "Two (Client+Intermediate+Server)", + 3 => "Three (Client+2xIntermediate+Server)", + 4 => "Four (Client+3xIntermediate+Server)", + 5 => "Five (Client+4xIntermediate+Server)" +); + +global $openvpn_server_modes; +$openvpn_server_modes = array( + 'p2p_tls' => gettext("Peer to Peer ( SSL/TLS )"), + 'p2p_shared_key' => gettext("Peer to Peer ( Shared Key )"), + 'server_tls' => gettext("Remote Access ( SSL/TLS )"), + 'server_user' => gettext("Remote Access ( User Auth )"), + 'server_tls_user' => gettext("Remote Access ( SSL/TLS + User Auth )")); + +global $openvpn_client_modes; +$openvpn_client_modes = array( + 'p2p_tls' => gettext("Peer to Peer ( SSL/TLS )"), + 'p2p_shared_key' => gettext("Peer to Peer ( Shared Key )") ); + +global $openvpn_compression_modes; +$openvpn_compression_modes = array( + '' => gettext("No Preference"), + 'no' => gettext("Disabled - No Compression"), + 'adaptive' => gettext("Enabled with Adaptive Compression"), + 'yes' => gettext("Enabled without Adaptive Compression")); + +function openvpn_create_key() { + + $fp = popen("/usr/local/sbin/openvpn --genkey --secret /dev/stdout 2>/dev/null", "r"); + if (!$fp) + return false; + + $rslt = stream_get_contents($fp); + pclose($fp); + + return $rslt; +} + +function openvpn_create_dhparams($bits) { + + $fp = popen("/usr/bin/openssl dhparam {$bits} 2>/dev/null", "r"); + if (!$fp) + return false; + + $rslt = stream_get_contents($fp); + pclose($fp); + + return $rslt; +} + +function openvpn_vpnid_used($vpnid) { + global $config; + + if (is_array($config['openvpn']['openvpn-server'])) + foreach ($config['openvpn']['openvpn-server'] as & $settings) + if ($vpnid == $settings['vpnid']) + return true; + + if (is_array($config['openvpn']['openvpn-client'])) + foreach ($config['openvpn']['openvpn-client'] as & $settings) + if ($vpnid == $settings['vpnid']) + return true; + + return false; +} + +function openvpn_vpnid_next() { + + $vpnid = 1; + while(openvpn_vpnid_used($vpnid)) + $vpnid++; + + return $vpnid; +} + +function openvpn_port_used($prot, $interface, $port, $curvpnid = 0) { + global $config; + + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as & $settings) { + if (isset($settings['disable'])) + continue; + + if ($curvpnid != 0 && $curvpnid == $settings['vpnid']) + continue; + + if ($port == $settings['local_port'] && $prot == $settings['protocol'] && + ($interface == $settings['interface'] || $interface == "any" || $settings['interface'] == "any")) + return $settings['vpnid']; + } + } + + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as & $settings) { + if (isset($settings['disable'])) + continue; + + if ($curvpnid != 0 && $curvpnid == $settings['vpnid']) + continue; + + if ($port == $settings['local_port'] && $prot == $settings['protocol'] && + ($interface == $settings['interface'] || $interface == "any" || $settings['interface'] == "any")) + return $settings['vpnid']; + } + } + + return 0; +} + +function openvpn_port_next($prot, $interface = "wan") { + + $port = 1194; + while(openvpn_port_used($prot, $interface, $port)) + $port++; + while(openvpn_port_used($prot, "any", $port)) + $port++; + + return $port; +} + +function openvpn_get_cipherlist() { + + $ciphers = array(); + $cipher_out = shell_exec('/usr/local/sbin/openvpn --show-ciphers | /usr/bin/grep "default key" | /usr/bin/awk \'{print $1, "(" $2 "-" $3 ")";}\''); + $cipher_lines = explode("\n", trim($cipher_out)); + sort($cipher_lines); + foreach ($cipher_lines as $line) { + $words = explode(' ', $line); + $ciphers[$words[0]] = "{$words[0]} {$words[1]}"; + } + $ciphers["none"] = gettext("None (No Encryption)"); + return $ciphers; +} + +function openvpn_get_digestlist() { + + $digests = array(); + $digest_out = shell_exec('/usr/local/sbin/openvpn --show-digests | /usr/bin/grep "digest size" | /usr/bin/awk \'{print $1, "(" $2 "-" $3 ")";}\''); + $digest_lines = explode("\n", trim($digest_out)); + sort($digest_lines); + foreach ($digest_lines as $line) { + $words = explode(' ', $line); + $digests[$words[0]] = "{$words[0]} {$words[1]}"; + } + $digests["none"] = gettext("None (No Authentication)"); + return $digests; +} + +function openvpn_get_engines() { + $openssl_engines = array('none' => 'No Hardware Crypto Acceleration'); + exec("/usr/bin/openssl engine -t -c", $openssl_engine_output); + $openssl_engine_output = implode("\n", $openssl_engine_output); + $openssl_engine_output = preg_replace("/\\n\\s+/", "|", $openssl_engine_output); + $openssl_engine_output = explode("\n", $openssl_engine_output); + + foreach ($openssl_engine_output as $oeo) { + $keep = true; + $details = explode("|", $oeo); + $engine = array_shift($details); + $linematch = array(); + preg_match("/\((.*)\)\s(.*)/", $engine, $linematch); + foreach ($details as $dt) { + if (strpos($dt, "unavailable") !== FALSE) + $keep = false; + if (strpos($dt, "available") !== FALSE) + continue; + if (strpos($dt, "[") !== FALSE) + $ciphers = trim($dt, "[]"); + } + if (!empty($ciphers)) + $ciphers = " - " . $ciphers; + if (strlen($ciphers) > 60) + $ciphers = substr($ciphers, 0, 60) . " ... "; + if ($keep) + $openssl_engines[$linematch[1]] = $linematch[2] . $ciphers; + } + return $openssl_engines; +} + +function openvpn_validate_engine($engine) { + $engines = openvpn_get_engines(); + return array_key_exists($engine, $engines); +} + +function openvpn_validate_host($value, $name) { + $value = trim($value); + if (empty($value) || (!is_domain($value) && !is_ipaddr($value))) + return sprintf(gettext("The field '%s' must contain a valid IP address or domain name."), $name); + return false; +} + +function openvpn_validate_port($value, $name) { + $value = trim($value); + if (empty($value) || !is_numeric($value) || $value < 0 || ($value > 65535)) + return sprintf(gettext("The field '%s' must contain a valid port, ranging from 0 to 65535."), $name); + return false; +} + +function openvpn_validate_cidr($value, $name, $multiple = false, $ipproto = "ipv4") { + $value = trim($value); + $error = false; + if (empty($value)) + return false; + $networks = explode(',', $value); + + if (!$multiple && (count($networks) > 1)) + return sprintf(gettext("The field '%s' must contain a single valid %s CIDR range."), $name, $ipproto); + + foreach ($networks as $network) { + if ($ipproto == "ipv4") + $error = !openvpn_validate_cidr_ipv4($network); + else + $error = !openvpn_validate_cidr_ipv6($network); + if ($error) + break; + } + + if ($error) + return sprintf(gettext("The field '%s' must contain only valid %s CIDR range(s) separated by commas."), $name, $ipproto); + else + return false; +} + +function openvpn_validate_cidr_ipv4($value) { + $value = trim($value); + if (!empty($value)) { + list($ip, $mask) = explode('/', $value); + if (!is_ipaddrv4($ip) or !is_numeric($mask) or ($mask > 32) or ($mask < 0)) + return false; + } + return true; +} + +function openvpn_validate_cidr_ipv6($value) { + $value = trim($value); + if (!empty($value)) { + list($ipv6, $prefix) = explode('/', $value); + if (empty($prefix)) + $prefix = "128"; + if (!is_ipaddrv6($ipv6) or !is_numeric($prefix) or ($prefix > 128) or ($prefix < 0)) + return false; + } + return true; +} + +function openvpn_add_dhcpopts(& $settings, & $conf) { + + if (!empty($settings['dns_domain'])) + $conf .= "push \"dhcp-option DOMAIN {$settings['dns_domain']}\"\n"; + + if (!empty($settings['dns_server1'])) + $conf .= "push \"dhcp-option DNS {$settings['dns_server1']}\"\n"; + if (!empty($settings['dns_server2'])) + $conf .= "push \"dhcp-option DNS {$settings['dns_server2']}\"\n"; + if (!empty($settings['dns_server3'])) + $conf .= "push \"dhcp-option DNS {$settings['dns_server3']}\"\n"; + if (!empty($settings['dns_server4'])) + $conf .= "push \"dhcp-option DNS {$settings['dns_server4']}\"\n"; + + if (!empty($settings['push_register_dns'])) + $conf .= "push \"register-dns\"\n"; + + if (!empty($settings['ntp_server1'])) + $conf .= "push \"dhcp-option NTP {$settings['ntp_server1']}\"\n"; + if (!empty($settings['ntp_server2'])) + $conf .= "push \"dhcp-option NTP {$settings['ntp_server2']}\"\n"; + + if ($settings['netbios_enable']) { + + if (!empty($settings['dhcp_nbttype']) && ($settings['dhcp_nbttype'] != 0)) + $conf .= "push \"dhcp-option NBT {$settings['dhcp_nbttype']}\"\n"; + if (!empty($settings['dhcp_nbtscope'])) + $conf .= "push \"dhcp-option NBS {$settings['dhcp_nbtscope']}\"\n"; + + if (!empty($settings['wins_server1'])) + $conf .= "push \"dhcp-option WINS {$settings['wins_server1']}\"\n"; + if (!empty($settings['wins_server2'])) + $conf .= "push \"dhcp-option WINS {$settings['wins_server2']}\"\n"; + + if (!empty($settings['nbdd_server1'])) + $conf .= "push \"dhcp-option NBDD {$settings['nbdd_server1']}\"\n"; + } + + if ($settings['gwredir']) + $conf .= "push \"redirect-gateway def1\"\n"; +} + +function openvpn_add_custom(& $settings, & $conf) { + + if ($settings['custom_options']) { + + $options = explode(';', $settings['custom_options']); + + if (is_array($options)) { + foreach ($options as $option) + $conf .= "$option\n"; + } else + $conf .= "{$settings['custom_options']}\n"; + } +} + +function openvpn_add_keyfile(& $data, & $conf, $mode_id, $directive, $opt = "") { + global $g; + + $fpath = $g['varetc_path']."/openvpn/{$mode_id}.{$directive}"; + openvpn_create_dirs(); + file_put_contents($fpath, base64_decode($data)); + //chown($fpath, 'nobody'); + //chgrp($fpath, 'nobody'); + @chmod($fpath, 0600); + + $conf .= "{$directive} {$fpath} {$opt}\n"; +} + +function openvpn_reconfigure($mode, $settings) { + global $g, $config; + + if (empty($settings)) + return; + if (isset($settings['disable'])) + return; + openvpn_create_dirs(); + /* + * NOTE: Deleting tap devices causes spontaneous reboots. Instead, + * we use a vpnid number which is allocated for a particular client + * or server configuration. ( see openvpn_vpnid_next() ) + */ + + $vpnid = $settings['vpnid']; + $mode_id = $mode.$vpnid; + + if (isset($settings['dev_mode'])) + $tunname = "{$settings['dev_mode']}{$vpnid}"; + else { /* defaults to tun */ + $tunname = "tun{$vpnid}"; + $settings['dev_mode'] = "tun"; + } + + if ($mode == "server") + $devname = "ovpns{$vpnid}"; + else + $devname = "ovpnc{$vpnid}"; + + /* is our device already configured */ + if (!does_interface_exist($devname)) { + + /* create the tap device if required */ + if (!file_exists("/dev/{$tunname}")) + exec("/sbin/ifconfig " . escapeshellarg($tunname) . " create"); + + /* rename the device */ + mwexec("/sbin/ifconfig " . escapeshellarg($tunname) . " name " . escapeshellarg($devname)); + + /* add the device to the openvpn group */ + mwexec("/sbin/ifconfig " . escapeshellarg($devname) . " group openvpn"); + } + + $pfile = $g['varrun_path'] . "/openvpn_{$mode_id}.pid"; + $proto = strtolower($settings['protocol']); + if (substr($settings['protocol'], 0, 3) == "TCP") + $proto = "{$proto}-{$mode}"; + $dev_mode = $settings['dev_mode']; + $cipher = $settings['crypto']; + // OpenVPN defaults to SHA1, so use it when unset to maintain compatibility. + $digest = !empty($settings['digest']) ? $settings['digest'] : "SHA1"; + + $interface = get_failover_interface($settings['interface']); + $ipaddr = $settings['ipaddr']; + $ipaddrv6 = $settings['ipaddrv6']; + + // If a specific ip address (VIP) is requested, use it. + // Otherwise, if a specific interface is requested, use it + // If "any" interface was selected, local directive will be ommited. + if (is_ipaddrv4($ipaddr)) { + $iface_ip=$ipaddr; + } else { + if ((!empty($interface)) && (strcmp($interface, "any"))) { + $iface_ip=get_interface_ip($interface); + } + } + if (is_ipaddrv6($ipaddrv6)) { + $iface_ipv6=$ipaddrv6; + } else { + if ((!empty($interface)) && (strcmp($interface, "any"))) { + $iface_ipv6=get_interface_ipv6($interface); + } + } + + + $conf = "dev {$devname}\n"; + if (isset($settings['verbosity_level'])) { + $conf .= "verb {$settings['verbosity_level']}\n"; + } + + $conf .= "dev-type {$settings['dev_mode']}\n"; + switch($settings['dev_mode']) { + case "tun": + if (!$settings['no_tun_ipv6']) { + $conf .= "tun-ipv6\n"; + } + break; + } + $conf .= "dev-node /dev/{$tunname}\n"; + $conf .= "writepid {$pfile}\n"; + $conf .= "#user nobody\n"; + $conf .= "#group nobody\n"; + $conf .= "script-security 3\n"; + $conf .= "daemon\n"; + $conf .= "keepalive 10 60\n"; + $conf .= "ping-timer-rem\n"; + $conf .= "persist-tun\n"; + $conf .= "persist-key\n"; + $conf .= "proto {$proto}\n"; + $conf .= "cipher {$cipher}\n"; + $conf .= "auth {$digest}\n"; + $conf .= "up /usr/local/sbin/ovpn-linkup\n"; + $conf .= "down /usr/local/sbin/ovpn-linkdown\n"; + if (file_exists("/usr/local/sbin/openvpn.attributes.sh")) { + switch($settings['mode']) { + case 'server_user': + case 'server_tls_user': + $conf .= "client-connect /usr/local/sbin/openvpn.attributes.sh\n"; + $conf .= "client-disconnect /usr/local/sbin/openvpn.attributes.sh\n"; + break; + } + } + + /* Determine the local IP to use - and make sure it matches with the selected protocol. */ + if (is_ipaddrv4($iface_ip) && (stristr($settings['protocol'], "6") === false)) { + $conf .= "local {$iface_ip}\n"; + } elseif (is_ipaddrv6($iface_ipv6) && (stristr($settings['protocol'], "6") !== false)) { + $conf .= "local {$iface_ipv6}\n"; + } + + if (openvpn_validate_engine($settings['engine']) && ($settings['engine'] != "none")) + $conf .= "engine {$settings['engine']}\n"; + + // server specific settings + if ($mode == 'server') { + + list($ip, $cidr) = explode('/', $settings['tunnel_network']); + list($ipv6, $prefix) = explode('/', $settings['tunnel_networkv6']); + $mask = gen_subnet_mask($cidr); + + // configure tls modes + switch($settings['mode']) { + case 'p2p_tls': + case 'server_tls': + case 'server_user': + case 'server_tls_user': + $conf .= "tls-server\n"; + break; + } + + // configure p2p/server modes + switch($settings['mode']) { + case 'p2p_tls': + // If the CIDR is less than a /30, OpenVPN will complain if you try to + // use the server directive. It works for a single client without it. + // See ticket #1417 + if (!empty($ip) && !empty($mask) && ($cidr < 30)) { + $conf .= "server {$ip} {$mask}\n"; + $conf .= "client-config-dir {$g['varetc_path']}/openvpn-csc\n"; + if(is_ipaddr($ipv6)) + $conf .= "server-ipv6 {$ipv6}/{$prefix}\n"; + } + case 'p2p_shared_key': + if (!empty($ip) && !empty($mask)) { + list($ip1, $ip2) = openvpn_get_interface_ip($ip, $mask); + if ($settings['dev_mode'] == 'tun') + $conf .= "ifconfig {$ip1} {$ip2}\n"; + else + $conf .= "ifconfig {$ip1} {$mask}\n"; + } + if (!empty($ipv6) && !empty($prefix)) { + list($ipv6_1, $ipv6_2) = openvpn_get_interface_ipv6($ipv6, $prefix); + if ($settings['dev_mode'] == 'tun') + $conf .= "ifconfig-ipv6 {$ipv6_1} {$ipv6_2}\n"; + else + $conf .= "ifconfig-ipv6 {$ipv6_1} {$prefix}\n"; + } + break; + case 'server_tls': + case 'server_user': + case 'server_tls_user': + if (!empty($ip) && !empty($mask)) { + $conf .= "server {$ip} {$mask}\n"; + if(is_ipaddr($ipv6)) + $conf .= "server-ipv6 {$ipv6}/{$prefix}\n"; + $conf .= "client-config-dir {$g['varetc_path']}/openvpn-csc\n"; + } else { + if ($settings['serverbridge_dhcp']) { + if ((!empty($settings['serverbridge_interface'])) && (strcmp($settings['serverbridge_interface'], "none"))) { + $biface_ip=get_interface_ip($settings['serverbridge_interface']); + $biface_sm=gen_subnet_mask(get_interface_subnet($settings['serverbridge_interface'])); + if (is_ipaddrv4($biface_ip) && is_ipaddrv4($settings['serverbridge_dhcp_start']) && is_ipaddrv4($settings['serverbridge_dhcp_end'])) { + $conf .= "server-bridge {$biface_ip} {$biface_sm} {$settings['serverbridge_dhcp_start']} {$settings['serverbridge_dhcp_end']}\n"; + $conf .= "client-config-dir {$g['varetc_path']}/openvpn-csc\n"; + } else { + $conf .= "mode server\n"; + } + } else { + $conf .= "mode server\n"; + } + } + } + break; + } + + // configure user auth modes + switch($settings['mode']) { + case 'server_user': + $conf .= "client-cert-not-required\n"; + case 'server_tls_user': + /* username-as-common-name is not compatible with server-bridge */ + if (stristr($conf, "server-bridge") === false) + $conf .= "username-as-common-name\n"; + if (!empty($settings['authmode'])) { + $strictusercn = "false"; + if ($settings['strictusercn']) + $strictusercn = "true"; + $conf .= "auth-user-pass-verify \"/usr/local/sbin/ovpn_auth_verify user '{$settings['authmode']}' {$strictusercn} {$mode_id}\" via-env\n"; + } + break; + } + if (!isset($settings['cert_depth']) && (strstr($settings['mode'], 'tls'))) + $settings['cert_depth'] = 1; + if (is_numeric($settings['cert_depth'])) { + if (($mode == 'client') && empty($settings['certref'])) + $cert = ""; + else { + $cert = lookup_cert($settings['certref']); + /* XXX: Seems not used at all! */ + $servercn = urlencode(cert_get_cn($cert['crt'])); + $conf .= "tls-verify \"/usr/local/sbin/ovpn_auth_verify tls '{$servercn}' {$settings['cert_depth']}\"\n"; + } + } + + // The local port to listen on + $conf .= "lport {$settings['local_port']}\n"; + + // The management port to listen on + // Use unix socket to overcome the problem on any type of server + $conf .= "management {$g['varetc_path']}/openvpn/{$mode_id}.sock unix\n"; + //$conf .= "management 127.0.0.1 {$settings['local_port']}\n"; + + if ($settings['maxclients']) + $conf .= "max-clients {$settings['maxclients']}\n"; + + // Can we push routes + if ($settings['local_network']) { + $conf .= openvpn_gen_routes($settings['local_network'], "ipv4", true); + } + if ($settings['local_networkv6']) { + $conf .= openvpn_gen_routes($settings['local_networkv6'], "ipv6", true); + } + + switch($settings['mode']) { + case 'server_tls': + case 'server_user': + case 'server_tls_user': + // Configure client dhcp options + openvpn_add_dhcpopts($settings, $conf); + if ($settings['client2client']) + $conf .= "client-to-client\n"; + break; + } + if (isset($settings['duplicate_cn'])) + $conf .= "duplicate-cn\n"; + } + + // client specific settings + + if ($mode == 'client') { + + // configure p2p mode + switch($settings['mode']) { + case 'p2p_tls': + $conf .= "tls-client\n"; + case 'shared_key': + $conf .= "client\n"; + break; + } + + // If there is no bind option at all (ip and/or port), add "nobind" directive + // Otherwise, use the local port if defined, failing that, use lport 0 to + // ensure a random source port. + if ((empty($iface_ip)) && (!$settings['local_port'])) + $conf .= "nobind\n"; + elseif ($settings['local_port']) + $conf .= "lport {$settings['local_port']}\n"; + else + $conf .= "lport 0\n"; + + // Use unix socket to overcome the problem on any type of server + $conf .= "management {$g['varetc_path']}/openvpn/{$mode_id}.sock unix\n"; + + // The remote server + $conf .= "remote {$settings['server_addr']} {$settings['server_port']}\n"; + + if (!empty($settings['use_shaper'])) + $conf .= "shaper {$settings['use_shaper']}\n"; + + if (!empty($settings['tunnel_network'])) { + list($ip, $mask) = explode('/', $settings['tunnel_network']); + $mask = gen_subnet_mask($mask); + list($ip1, $ip2) = openvpn_get_interface_ip($ip, $mask); + if ($settings['dev_mode'] == 'tun') + $conf .= "ifconfig {$ip2} {$ip1}\n"; + else + $conf .= "ifconfig {$ip2} {$mask}\n"; + } + + if (!empty($settings['tunnel_networkv6'])) { + list($ipv6, $prefix) = explode('/', $settings['tunnel_networkv6']); + list($ipv6_1, $ipv6_2) = openvpn_get_interface_ipv6($ipv6, $prefix); + if ($settings['dev_mode'] == 'tun') + $conf .= "ifconfig-ipv6 {$ipv6_2} {$ipv6_1}\n"; + else + $conf .= "ifconfig-ipv6 {$ipv6_2} {$prefix}\n"; + } + + if ($settings['auth_user'] && $settings['auth_pass']) { + $up_file = "{$g['varetc_path']}/openvpn/{$mode_id}.up"; + $conf .= "auth-user-pass {$up_file}\n"; + $userpass = "{$settings['auth_user']}\n"; + $userpass .= "{$settings['auth_pass']}\n"; + file_put_contents($up_file, $userpass); + } + + if ($settings['proxy_addr']) { + $conf .= "http-proxy {$settings['proxy_addr']} {$settings['proxy_port']}"; + if ($settings['proxy_authtype'] != "none") { + $conf .= " {$g['varetc_path']}/openvpn/{$mode_id}.pas {$settings['proxy_authtype']}"; + $proxypas = "{$settings['proxy_user']}\n"; + $proxypas .= "{$settings['proxy_passwd']}\n"; + file_put_contents("{$g['varetc_path']}/openvpn/{$mode_id}.pas", $proxypas); + } + $conf .= " \n"; + } + } + + // Add a remote network route if set, and only for p2p modes. + if ((substr($settings['mode'], 0, 3) == "p2p") && (openvpn_validate_cidr($settings['remote_network'], "", true, "ipv4") === FALSE)) { + $conf .= openvpn_gen_routes($settings['remote_network'], "ipv4", false); + } + // Add a remote network route if set, and only for p2p modes. + if ((substr($settings['mode'], 0, 3) == "p2p") && (openvpn_validate_cidr($settings['remote_networkv6'], "", true, "ipv6") === FALSE)) { + $conf .= openvpn_gen_routes($settings['remote_networkv6'], "ipv6", false); + } + + // Write the settings for the keys + switch($settings['mode']) { + case 'p2p_shared_key': + openvpn_add_keyfile($settings['shared_key'], $conf, $mode_id, "secret"); + break; + case 'p2p_tls': + case 'server_tls': + case 'server_tls_user': + case 'server_user': + $ca = lookup_ca($settings['caref']); + openvpn_add_keyfile($ca['crt'], $conf, $mode_id, "ca"); + + if (!empty($settings['certref'])) { + $cert = lookup_cert($settings['certref']); + openvpn_add_keyfile($cert['crt'], $conf, $mode_id, "cert"); + openvpn_add_keyfile($cert['prv'], $conf, $mode_id, "key"); + } + if ($mode == 'server') + $conf .= "dh {$g['etc_path']}/dh-parameters.{$settings['dh_length']}\n"; + if (!empty($settings['crlref'])) { + $crl = lookup_crl($settings['crlref']); + crl_update($crl); + openvpn_add_keyfile($crl['text'], $conf, $mode_id, "crl-verify"); + } + if ($settings['tls']) { + if ($mode == "server") + $tlsopt = 0; + else + $tlsopt = 1; + openvpn_add_keyfile($settings['tls'], $conf, $mode_id, "tls-auth", $tlsopt); + } + break; + } + + if (!empty($settings['compression'])) + $conf .= "comp-lzo {$settings['compression']}\n"; + + if ($settings['passtos']) + $conf .= "passtos\n"; + + if ($settings['resolve_retry']) + $conf .= "resolv-retry infinite\n"; + + if ($settings['dynamic_ip']) { + $conf .= "persist-remote-ip\n"; + $conf .= "float\n"; + } + + if ($settings['topology_subnet']) { + $conf .= "topology subnet\n"; + } + + // New client features + if ($mode == "client") { + // Dont pull routes checkbox + if ($settings['route_no_pull']) { + $conf .= "route-nopull\n"; + } + + // Dont add/remove routes checkbox + if ($settings['route_no_exec']) { + $conf .= "route-noexec\n"; + } + } + + openvpn_add_custom($settings, $conf); + + openvpn_create_dirs(); + $fpath = "{$g['varetc_path']}/openvpn/{$mode_id}.conf"; + file_put_contents($fpath, $conf); + unset($conf); + $fpath = "{$g['varetc_path']}/openvpn/{$mode_id}.interface"; + file_put_contents($fpath, $interface); + //chown($fpath, 'nobody'); + //chgrp($fpath, 'nobody'); + @chmod("{$g['varetc_path']}/openvpn/{$mode_id}.conf", 0600); + @chmod("{$g['varetc_path']}/openvpn/{$mode_id}.interface", 0600); + @chmod("{$g['varetc_path']}/openvpn/{$mode_id}.key", 0600); + @chmod("{$g['varetc_path']}/openvpn/{$mode_id}.tls-auth", 0600); + @chmod("{$g['varetc_path']}/openvpn/{$mode_id}.conf", 0600); +} + +function openvpn_restart($mode, $settings) { + global $g, $config; + + $vpnid = $settings['vpnid']; + $mode_id = $mode.$vpnid; + + /* kill the process if running */ + $pfile = $g['varrun_path']."/openvpn_{$mode_id}.pid"; + if (file_exists($pfile)) { + + /* read the pid file */ + $pid = rtrim(file_get_contents($pfile)); + unlink($pfile); + + /* send a term signal to the process */ + posix_kill($pid, SIGTERM); + + /* wait until the process exits */ + while(posix_kill($pid, 0)) + usleep(250000); + } + + if (isset($settings['disable'])) + return; + + /* Do not start a client if we are a CARP backup on this vip! */ + if (($mode == "client") && (strstr($settings['interface'], "_vip") && get_carp_interface_status($settings['interface']) == "BACKUP")) + return; + + /* Check if client is bound to a gateway group */ + $a_groups = return_gateway_groups_array(); + if (is_array($a_groups[$settings['interface']])) { + /* the interface is a gateway group. If a vip is defined and its a CARP backup then do not start */ + if (($a_groups[$settings['interface']][0]['vip'] <> "") && (get_carp_interface_status($a_groups[$settings['interface']][0]['vip']) == "BACKUP")) + return; + } + + /* start the new process */ + $fpath = $g['varetc_path']."/openvpn/{$mode_id}.conf"; + openvpn_clear_route($mode, $settings); + mwexec_bg("/usr/local/sbin/openvpn --config " . escapeshellarg($fpath)); + + if (!$g['booting']) + send_event("filter reload"); +} + +function openvpn_delete($mode, & $settings) { + global $g, $config; + + $vpnid = $settings['vpnid']; + $mode_id = $mode.$vpnid; + + if (isset($settings['dev_mode'])) + $tunname = "{$settings['dev_mode']}{$vpnid}"; + else { /* defaults to tun */ + $tunname = "tun{$vpnid}"; + } + + if ($mode == "server") + $devname = "ovpns{$vpnid}"; + else + $devname = "ovpnc{$vpnid}"; + + /* kill the process if running */ + $pfile = "{$g['varrun_path']}/openvpn_{$mode_id}.pid"; + if (file_exists($pfile)) { + + /* read the pid file */ + $pid = trim(file_get_contents($pfile)); + unlink($pfile); + + /* send a term signal to the process */ + posix_kill($pid, SIGTERM); + } + + /* remove the device from the openvpn group */ + mwexec("/sbin/ifconfig " . escapeshellarg($devname) . " -group openvpn"); + + /* restore the original adapter name */ + mwexec("/sbin/ifconfig " . escapeshellarg($devname) . " name " . escapeshellarg($tunname)); + + /* remove the configuration files */ + @array_map('unlink', glob("{$g['varetc_path']}/openvpn/{$mode_id}.*")); +} + +function openvpn_cleanup_csc($common_name) { + global $g, $config; + if (empty($common_name)) + return; + $fpath = "{$g['varetc_path']}/openvpn-csc/" . basename($common_name); + if (is_file($fpath)) + unlink_if_exists($fpath); + return; +} + +function openvpn_resync_csc(& $settings) { + global $g, $config; + + $fpath = $g['varetc_path']."/openvpn-csc/".$settings['common_name']; + + if (isset($settings['disable'])) { + unlink_if_exists($fpath); + return; + } + openvpn_create_dirs(); + + $conf = ''; + if ($settings['block']) + $conf .= "disable\n"; + + if ($settings['push_reset']) + $conf .= "push-reset\n"; + + if (!empty($settings['tunnel_network'])) { + list($ip, $mask) = explode('/', $settings['tunnel_network']); + $baselong = ip2long32($ip) & gen_subnet_mask_long($mask); + $serverip = long2ip32($baselong + 1); + $clientip = long2ip32($baselong + 2); + /* Because this is being pushed, the order from the client's point of view. */ + if ($settings['dev_mode'] != 'tap') + $conf .= "ifconfig-push {$clientip} {$serverip}\n"; + else + $conf .= "ifconfig-push {$clientip} {$mask}\n"; + } + + if ($settings['local_network']) { + $conf .= openvpn_gen_routes($settings['local_network'], "ipv4", true); + } + if ($settings['local_networkv6']) { + $conf .= openvpn_gen_routes($settings['local_networkv6'], "ipv6", true); + } + + // Add a remote network iroute if set + if (openvpn_validate_cidr($settings['remote_network'], "", true, "ipv4") === FALSE) { + $conf .= openvpn_gen_routes($settings['remote_network'], "ipv4", false, true); + } + // Add a remote network iroute if set + if (openvpn_validate_cidr($settings['remote_networkv6'], "", true, "ipv6") === FALSE) { + $conf .= openvpn_gen_routes($settings['remote_networkv6'], "ipv6", false, true); + } + + openvpn_add_dhcpopts($settings, $conf); + + if ($settings['gwredir']) + $conf .= "push \"redirect-gateway def1\"\n"; + + openvpn_add_custom($settings, $conf); + + file_put_contents($fpath, $conf); + chown($fpath, 'nobody'); + chgrp($fpath, 'nobody'); +} + +function openvpn_delete_csc(& $settings) { + global $g, $config; + + $fpath = $g['varetc_path']."/openvpn-csc/".$settings['common_name']; + unlink_if_exists($fpath); +} + +// Resync the configuration and restart the VPN +function openvpn_resync($mode, $settings) { + openvpn_reconfigure($mode, $settings); + openvpn_restart($mode, $settings); +} + +// Resync and restart all VPNs +function openvpn_resync_all($interface = "") { + global $g, $config; + + if ($g['platform'] == 'jail') + return; + openvpn_create_dirs(); + + if (!is_array($config['openvpn'])) + $config['openvpn'] = array(); + +/* + if (!$config['openvpn']['dh-parameters']) { + echo "Configuring OpenVPN Parameters ...\n"; + $dh_parameters = openvpn_create_dhparams(1024); + $dh_parameters = base64_encode($dh_parameters); + $config['openvpn']['dh-parameters'] = $dh_parameters; + write_config("OpenVPN DH parameters"); + } + + $path_ovdh = $g['varetc_path']."/openvpn/dh-parameters"; + if (!file_exists($path_ovdh)) { + $dh_parameters = $config['openvpn']['dh-parameters']; + $dh_parameters = base64_decode($dh_parameters); + file_put_contents($path_ovdh, $dh_parameters); + } +*/ + if ($interface <> "") + log_error("Resyncing OpenVPN instances for interface " . convert_friendly_interface_to_friendly_descr($interface) . "."); + else + log_error("Resyncing OpenVPN instances."); + + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as & $settings) { + if ($interface <> "" && $interface != $settings['interface']) + continue; + openvpn_resync('server', $settings); + } + } + + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as & $settings) { + if ($interface <> "" && $interface != $settings['interface']) + continue; + openvpn_resync('client', $settings); + } + } + + if (is_array($config['openvpn']['openvpn-csc'])) + foreach ($config['openvpn']['openvpn-csc'] as & $settings) + openvpn_resync_csc($settings); + +} + +// Resync and restart all VPNs using a gateway group. +function openvpn_resync_gwgroup($gwgroupname = "") { + global $g, $config; + + if ($gwgroupname <> "") { + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as & $settings) { + if ($gwgroupname == $settings['interface']) { + log_error("Resyncing OpenVPN for gateway group " . $gwgroupname . " server " . $settings["description"] . "."); + openvpn_resync('server', $settings); + } + } + } + + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as & $settings) { + if ($gwgroupname == $settings['interface']) { + log_error("Resyncing OpenVPN for gateway group " . $gwgroupname . " client " . $settings["description"] . "."); + openvpn_resync('client', $settings); + } + } + } + + // Note: no need to resysnc Client Specific (csc) here, as changes to the OpenVPN real interface do not effect these. + + } else + log_error("openvpn_resync_gwgroup called with null gwgroup parameter."); +} + +function openvpn_get_active_servers($type="multipoint") { + global $config, $g; + + $servers = array(); + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as & $settings) { + if (empty($settings) || isset($settings['disable'])) + continue; + + $prot = $settings['protocol']; + $port = $settings['local_port']; + + $server = array(); + $server['port'] = ($settings['local_port']) ? $settings['local_port'] : 1194; + $server['mode'] = $settings['mode']; + if ($settings['description']) + $server['name'] = "{$settings['description']} {$prot}:{$port}"; + else + $server['name'] = "Server {$prot}:{$port}"; + $server['conns'] = array(); + $server['vpnid'] = $settings['vpnid']; + $server['mgmt'] = "server{$server['vpnid']}"; + $socket = "unix://{$g['varetc_path']}/openvpn/{$server['mgmt']}.sock"; + list($tn, $sm) = explode('/', $settings['tunnel_network']); + + if ((($server['mode'] == "p2p_shared_key") || ($sm >= 30) ) && ($type == "p2p")) + $servers[] = openvpn_get_client_status($server, $socket); + elseif (($server['mode'] != "p2p_shared_key") && ($type == "multipoint") && ($sm < 30)) + $servers[] = openvpn_get_server_status($server, $socket); + + } + } + return $servers; +} + +function openvpn_get_server_status($server, $socket) { + $errval; + $errstr; + $fp = @stream_socket_client($socket, $errval, $errstr, 1); + if ($fp) { + stream_set_timeout($fp, 1); + + /* send our status request */ + fputs($fp, "status 2\n"); + + /* recv all response lines */ + while (!feof($fp)) { + + /* read the next line */ + $line = fgets($fp, 1024); + + $info = stream_get_meta_data($fp); + if ($info['timed_out']) + break; + + /* parse header list line */ + if (strstr($line, "HEADER")) + continue; + + /* parse end of output line */ + if (strstr($line, "END") || strstr($line, "ERROR")) + break; + + /* parse client list line */ + if (strstr($line, "CLIENT_LIST")) { + $list = explode(",", $line); + $conn = array(); + $conn['common_name'] = $list[1]; + $conn['remote_host'] = $list[2]; + $conn['virtual_addr'] = $list[3]; + $conn['bytes_recv'] = $list[4]; + $conn['bytes_sent'] = $list[5]; + $conn['connect_time'] = $list[6]; + $server['conns'][] = $conn; + } + /* parse routing table lines */ + if (strstr($line, "ROUTING_TABLE")) { + $list = explode(",", $line); + $conn = array(); + $conn['virtual_addr'] = $list[1]; + $conn['common_name'] = $list[2]; + $conn['remote_host'] = $list[3]; + $conn['last_time'] = $list[4]; + $server['routes'][] = $conn; + } + } + + /* cleanup */ + fclose($fp); + } else { + $conn = array(); + $conn['common_name'] = "[error]"; + $conn['remote_host'] = "Unable to contact daemon"; + $conn['virtual_addr'] = "Service not running?"; + $conn['bytes_recv'] = 0; + $conn['bytes_sent'] = 0; + $conn['connect_time'] = 0; + $server['conns'][] = $conn; + } + return $server; +} + +function openvpn_get_active_clients() { + global $config, $g; + + $clients = array(); + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as & $settings) { + + if (empty($settings) || isset($settings['disable'])) + continue; + + $prot = $settings['protocol']; + $port = ($settings['local_port']) ? ":{$settings['local_port']}" : ""; + + $client = array(); + $client['port'] = $settings['local_port']; + if ($settings['description']) + $client['name'] = "{$settings['description']} {$prot}{$port}"; + else + $client['name'] = "Client {$prot}{$port}"; + + $client['vpnid'] = $settings['vpnid']; + $client['mgmt'] = "client{$client['vpnid']}"; + $socket = "unix://{$g['varetc_path']}/openvpn/{$client['mgmt']}.sock"; + $client['status']="down"; + + $clients[] = openvpn_get_client_status($client, $socket); + } + } + return $clients; +} + +function openvpn_get_client_status($client, $socket) { + $errval; + $errstr; + $fp = @stream_socket_client($socket, $errval, $errstr, 1); + if ($fp) { + stream_set_timeout($fp, 1); + /* send our status request */ + fputs($fp, "state 1\n"); + + /* recv all response lines */ + while (!feof($fp)) { + /* read the next line */ + $line = fgets($fp, 1024); + + $info = stream_get_meta_data($fp); + if ($info['timed_out']) + break; + + /* Get the client state */ + if (strstr($line,"CONNECTED")) { + $client['status']="up"; + $list = explode(",", $line); + + $client['connect_time'] = date("D M j G:i:s Y", $list[0]); + $client['virtual_addr'] = $list[3]; + $client['remote_host'] = $list[4]; + } + if (strstr($line,"CONNECTING")) { + $client['status']="connecting"; + } + if (strstr($line,"ASSIGN_IP")) { + $client['status']="waiting"; + $list = explode(",", $line); + + $client['connect_time'] = date("D M j G:i:s Y", $list[0]); + $client['virtual_addr'] = $list[3]; + } + if (strstr($line,"RECONNECTING")) { + $client['status']="reconnecting"; + $list = explode(",", $line); + + $client['connect_time'] = date("D M j G:i:s Y", $list[0]); + $client['status'] .= "; " . $list[2]; + } + /* parse end of output line */ + if (strstr($line, "END") || strstr($line, "ERROR")) + break; + } + + /* If up, get read/write stats */ + if (strcmp($client['status'], "up") == 0) { + fputs($fp, "status 2\n"); + /* recv all response lines */ + while (!feof($fp)) { + /* read the next line */ + $line = fgets($fp, 1024); + + $info = stream_get_meta_data($fp); + if ($info['timed_out']) + break; + + if (strstr($line,"TCP/UDP read bytes")) { + $list = explode(",", $line); + $client['bytes_recv'] = $list[1]; + } + + if (strstr($line,"TCP/UDP write bytes")) { + $list = explode(",", $line); + $client['bytes_sent'] = $list[1]; + } + + /* parse end of output line */ + if (strstr($line, "END")) + break; + } + } + + fclose($fp); + + } else { + $DisplayNote=true; + $client['remote_host'] = "Unable to contact daemon"; + $client['virtual_addr'] = "Service not running?"; + $client['bytes_recv'] = 0; + $client['bytes_sent'] = 0; + $client['connect_time'] = 0; + } + return $client; +} + +function openvpn_refresh_crls() { + global $g, $config; + + openvpn_create_dirs(); + + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as $settings) { + if (empty($settings)) + continue; + if (isset($settings['disable'])) + continue; + // Write the settings for the keys + switch($settings['mode']) { + case 'p2p_tls': + case 'server_tls': + case 'server_tls_user': + case 'server_user': + if (!empty($settings['crlref'])) { + $crl = lookup_crl($settings['crlref']); + crl_update($crl); + $fpath = $g['varetc_path']."/openvpn/server{$settings['vpnid']}.crl-verify"; + file_put_contents($fpath, base64_decode($crl['text'])); + @chmod($fpath, 0644); + } + break; + } + } + } +} + +function openvpn_create_dirs() { + global $g; + if (!is_dir("{$g['varetc_path']}/openvpn")) + safe_mkdir("{$g['varetc_path']}/openvpn", 0750); + if (!is_dir("{$g['varetc_path']}/openvpn-csc")) + safe_mkdir("{$g['varetc_path']}/openvpn-csc", 0750); +} + +function openvpn_get_interface_ip($ip, $mask) { + $baselong = ip2long32($ip) & ip2long($mask); + $ip1 = long2ip32($baselong + 1); + $ip2 = long2ip32($baselong + 2); + return array($ip1, $ip2); +} + +function openvpn_get_interface_ipv6($ipv6, $prefix) { + $basev6 = gen_subnetv6($ipv6, $prefix); + // Is there a better way to do this math? + $ipv6_arr = explode(':', $basev6); + $last = hexdec(array_pop($ipv6_arr)); + $ipv6_1 = Net_IPv6::compress(Net_IPv6::uncompress(implode(':', $ipv6_arr) . ':' . dechex($last + 1))); + $ipv6_2 = Net_IPv6::compress(Net_IPv6::uncompress(implode(':', $ipv6_arr) . ':' . dechex($last + 2))); + return array($ipv6_1, $ipv6_2); +} + +function openvpn_clear_route($mode, $settings) { + if (empty($settings['tunnel_network'])) + return; + list($ip, $cidr) = explode('/', $settings['tunnel_network']); + $mask = gen_subnet_mask($cidr); + $clear_route = false; + + switch($settings['mode']) { + case 'shared_key': + $clear_route = true; + break; + case 'p2p_tls': + case 'p2p_shared_key': + if ($cidr == 30) + $clear_route = true; + break; + } + + if ($clear_route && !empty($ip) && !empty($mask)) { + list($ip1, $ip2) = openvpn_get_interface_ip($ip, $mask); + $ip_to_clear = ($mode == "server") ? $ip1 : $ip2; + /* XXX: Family for route? */ + mwexec("/sbin/route -q delete {$ip_to_clear}"); + } +} + +function openvpn_gen_routes($value, $ipproto = "ipv4", $push = false, $iroute = false) { + $routes = ""; + if (empty($value)) + return ""; + $networks = explode(',', $value); + + foreach ($networks as $network) { + if ($ipproto == "ipv4") + $route = openvpn_gen_route_ipv4($network, $iroute); + else + $route = openvpn_gen_route_ipv6($network, $iroute); + + if ($push) + $routes .= "push \"{$route}\"\n"; + else + $routes .= "{$route}\n"; + } + return $routes; +} + +function openvpn_gen_route_ipv4($network, $iroute = false) { + $i = ($iroute) ? "i" : ""; + list($ip, $mask) = explode('/', trim($network)); + $mask = gen_subnet_mask($mask); + return "{$i}route $ip $mask"; +} + +function openvpn_gen_route_ipv6($network, $iroute = false) { + $i = ($iroute) ? "i" : ""; + list($ipv6, $prefix) = explode('/', trim($network)); + if (empty($prefix)) + $prefix = "128"; + return "{$i}route-ipv6 ${ipv6}/${prefix}"; +} + +function openvpn_get_settings($mode, $vpnid) { + global $config; + + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as $settings) { + if (isset($settings['disable'])) + continue; + + if ($vpnid != 0 && $vpnid == $settings['vpnid']) + return $settings; + } + } + + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as $settings) { + if (isset($settings['disable'])) + continue; + + if ($vpnid != 0 && $vpnid == $settings['vpnid']) + return $settings; + } + } + + return array(); +} + +function openvpn_restart_by_vpnid($mode, $vpnid) { + $settings = openvpn_get_settings($mode, $vpnid); + openvpn_restart($mode, $settings); +} + +?> diff --git a/etc/inc/openvpn.tls-verify.php b/etc/inc/openvpn.tls-verify.php new file mode 100644 index 000000000..44d5d8441 --- /dev/null +++ b/etc/inc/openvpn.tls-verify.php @@ -0,0 +1,95 @@ +#!/usr/local/bin/php -f + + +if (isset($allowed_depth) && ($cert_depth > $allowed_depth)) { + syslog(LOG_WARNING, "Certificate depth {$cert_depth} exceeded max allowed depth of {$allowed_depth}.\n"); + if (isset($_GET)) { + echo "FAILED"; + closelog(); + return; + } else { + closelog(); + exit(1); + } +} + +// Debug +//syslog(LOG_WARNING, "Found certificate {$argv[2]} with depth {$cert_depth}\n"); + +closelog(); +if (isset($_GET)) + echo "OK"; +else + exit(0); + +?> diff --git a/etc/inc/pfsense-utils.inc b/etc/inc/pfsense-utils.inc new file mode 100644 index 000000000..acca2df2a --- /dev/null +++ b/etc/inc/pfsense-utils.inc @@ -0,0 +1,2921 @@ + real interface if needed */ + $int = get_real_interface($interface); + if(empty($int)) + return; + $int_family = preg_split("/[0-9]+/", $int); + $supported_ints = array('fxp'); + if (in_array($int_family, $supported_ints)) { + if(does_interface_exist($int)) + pfSense_interface_flags($int, IFF_LINK0); + } + + return; +} + +/****f* pfsense-utils/interface_supports_polling + * NAME + * checks to see if an interface supports polling according to man polling + * INPUTS + * + * RESULT + * true or false + * NOTES + * + ******/ +function interface_supports_polling($iface) { + $opts = pfSense_get_interface_addresses($iface); + if (is_array($opts) && isset($opts['caps']['polling'])) + return true; + + return false; +} + +/****f* pfsense-utils/is_alias_inuse + * NAME + * checks to see if an alias is currently in use by a rule + * INPUTS + * + * RESULT + * true or false + * NOTES + * + ******/ +function is_alias_inuse($alias) { + global $g, $config; + + if($alias == "") return false; + /* loop through firewall rules looking for alias in use */ + if(is_array($config['filter']['rule'])) + foreach($config['filter']['rule'] as $rule) { + if($rule['source']['address']) + if($rule['source']['address'] == $alias) + return true; + if($rule['destination']['address']) + if($rule['destination']['address'] == $alias) + return true; + } + /* loop through nat rules looking for alias in use */ + if(is_array($config['nat']['rule'])) + foreach($config['nat']['rule'] as $rule) { + if($rule['target'] && $rule['target'] == $alias) + return true; + if($rule['source']['address'] && $rule['source']['address'] == $alias) + return true; + if($rule['destination']['address'] && $rule['destination']['address'] == $alias) + return true; + } + return false; +} + +/****f* pfsense-utils/is_schedule_inuse + * NAME + * checks to see if a schedule is currently in use by a rule + * INPUTS + * + * RESULT + * true or false + * NOTES + * + ******/ +function is_schedule_inuse($schedule) { + global $g, $config; + + if($schedule == "") return false; + /* loop through firewall rules looking for schedule in use */ + if(is_array($config['filter']['rule'])) + foreach($config['filter']['rule'] as $rule) { + if($rule['sched'] == $schedule) + return true; + } + return false; +} + +/****f* pfsense-utils/setup_polling + * NAME + * sets up polling + * INPUTS + * + * RESULT + * null + * NOTES + * + ******/ +function setup_polling() { + global $g, $config; + + if (isset($config['system']['polling'])) + set_single_sysctl("kern.polling.idle_poll", "1"); + else + set_single_sysctl("kern.polling.idle_poll", "0"); + + if($config['system']['polling_each_burst']) + set_single_sysctl("kern.polling.each_burst", $config['system']['polling_each_burst']); + if($config['system']['polling_burst_max']) + set_single_sysctl("kern.polling.burst_max", $config['system']['polling_burst_max']); + if($config['system']['polling_user_frac']) + set_single_sysctl("kern.polling.user_frac", $config['system']['polling_user_frac']); +} + +/****f* pfsense-utils/setup_microcode + * NAME + * enumerates all interfaces and calls enable_hardware_offloading which + * enables a NIC's supported hardware features. + * INPUTS + * + * RESULT + * null + * NOTES + * This function only supports the fxp driver's loadable microcode. + ******/ +function setup_microcode() { + + /* if list */ + $ifs = get_interface_arr(); + + foreach($ifs as $if) + enable_hardware_offloading($if); +} + +/****f* pfsense-utils/get_carp_status + * NAME + * get_carp_status - Return whether CARP is enabled or disabled. + * RESULT + * boolean - true if CARP is enabled, false if otherwise. + ******/ +function get_carp_status() { + /* grab the current status of carp */ + $status = get_single_sysctl('net.inet.carp.allow'); + return (intval($status) > 0); +} + +/* + * convert_ip_to_network_format($ip, $subnet): converts an ip address to network form + + */ +function convert_ip_to_network_format($ip, $subnet) { + $ipsplit = explode('.', $ip); + $string = $ipsplit[0] . "." . $ipsplit[1] . "." . $ipsplit[2] . ".0/" . $subnet; + return $string; +} + +/* + * get_carp_interface_status($carpinterface): returns the status of a carp ip + */ +function get_carp_interface_status($carpinterface) { + $carp_query = ""; + + /* XXX: Need to fidn a better way for this! */ + list ($interface, $vhid) = explode("_vip", $carpinterface); + $interface = get_real_interface($interface); + exec("/sbin/ifconfig $interface | /usr/bin/grep -v grep | /usr/bin/grep carp: | /usr/bin/grep 'vhid {$vhid}'", $carp_query); + foreach($carp_query as $int) { + if(stristr($int, "MASTER")) + return gettext("MASTER"); + if(stristr($int, "BACKUP")) + return gettext("BACKUP"); + if(stristr($int, "INIT")) + return gettext("INIT"); + } + return; +} + +/* + * get_pfsync_interface_status($pfsyncinterface): returns the status of a pfsync + */ +function get_pfsync_interface_status($pfsyncinterface) { + if (!does_interface_exist($pfsyncinterface)) + return; + + return exec_command("/sbin/ifconfig {$pfsyncinterface} | /usr/bin/awk '/pfsync:/ {print \$5}'"); +} + +/* + * add_rule_to_anchor($anchor, $rule): adds the specified rule to an anchor + */ +function add_rule_to_anchor($anchor, $rule, $label) { + mwexec("echo " . escapeshellarg($rule) . " | /sbin/pfctl -a " . escapeshellarg($anchor) . ":" . escapeshellarg($label) . " -f -"); +} + +/* + * remove_text_from_file + * remove $text from file $file + */ +function remove_text_from_file($file, $text) { + if(!file_exists($file) && !is_writable($file)) + return; + $filecontents = file_get_contents($file); + $text = str_replace($text, "", $filecontents); + @file_put_contents($file, $text); +} + +/* + * add_text_to_file($file, $text): adds $text to $file. + * replaces the text if it already exists. + */ +function add_text_to_file($file, $text, $replace = false) { + if(file_exists($file) and is_writable($file)) { + $filecontents = file($file); + $filecontents = array_map('rtrim', $filecontents); + array_push($filecontents, $text); + if ($replace) + $filecontents = array_unique($filecontents); + + $file_text = implode("\n", $filecontents); + + @file_put_contents($file, $file_text); + return true; + } + return false; +} + +/* + * after_sync_bump_adv_skew(): create skew values by 1S + */ +function after_sync_bump_adv_skew() { + global $config, $g; + $processed_skew = 1; + $a_vip = &$config['virtualip']['vip']; + foreach ($a_vip as $vipent) { + if($vipent['advskew'] <> "") { + $processed_skew = 1; + $vipent['advskew'] = $vipent['advskew']+1; + } + } + if($processed_skew == 1) + write_config(gettext("After synch increase advertising skew")); +} + +/* + * get_filename_from_url($url): converts a url to its filename. + */ +function get_filename_from_url($url) { + return basename($url); +} + +/* + * get_dir: return an array of $dir + */ +function get_dir($dir) { + $dir_array = array(); + $d = dir($dir); + while (false !== ($entry = $d->read())) { + array_push($dir_array, $entry); + } + $d->close(); + return $dir_array; +} + +/****f* pfsense-utils/WakeOnLan + * NAME + * WakeOnLan - Wake a machine up using the wake on lan format/protocol + * RESULT + * true/false - true if the operation was successful + ******/ +function WakeOnLan($addr, $mac) +{ + $addr_byte = explode(':', $mac); + $hw_addr = ''; + + for ($a=0; $a < 6; $a++) + $hw_addr .= chr(hexdec($addr_byte[$a])); + + $msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255); + + for ($a = 1; $a <= 16; $a++) + $msg .= $hw_addr; + + // send it to the broadcast address using UDP + $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + if ($s == false) { + log_error(gettext("Error creating socket!")); + log_error(sprintf(gettext("Error code is '%1\$s' - %2\$s"), socket_last_error($s), socket_strerror(socket_last_error($s)))); + } else { + // setting a broadcast option to socket: + $opt_ret = socket_set_option($s, 1, 6, TRUE); + if($opt_ret < 0) + log_error(sprintf(gettext("setsockopt() failed, error: %s"), strerror($opt_ret))); + $e = socket_sendto($s, $msg, strlen($msg), 0, $addr, 2050); + socket_close($s); + log_error(sprintf(gettext('Magic Packet sent (%1$s) to {%2$s} MAC=%3$s'), $e, $addr, $mac)); + return true; + } + + return false; +} + +/* + * reverse_strrchr($haystack, $needle): Return everything in $haystack up to the *last* instance of $needle. + * Useful for finding paths and stripping file extensions. + */ +function reverse_strrchr($haystack, $needle) { + if (!is_string($haystack)) + return; + return strrpos($haystack, $needle) ? substr($haystack, 0, strrpos($haystack, $needle) +1 ) : false; +} + +/* + * backup_config_section($section): returns as an xml file string of + * the configuration section + */ +function backup_config_section($section_name) { + global $config; + $new_section = &$config[$section_name]; + /* generate configuration XML */ + $xmlconfig = dump_xml_config($new_section, $section_name); + $xmlconfig = str_replace("", "", $xmlconfig); + return $xmlconfig; +} + +/* + * restore_config_section($section_name, new_contents): restore a configuration section, + * and write the configuration out + * to disk/cf. + */ +function restore_config_section($section_name, $new_contents) { + global $config, $g; + conf_mount_rw(); + $fout = fopen("{$g['tmp_path']}/tmpxml","w"); + fwrite($fout, $new_contents); + fclose($fout); + + $xml = parse_xml_config($g['tmp_path'] . "/tmpxml", null); + if ($xml['pfsense']) { + $xml = $xml['pfsense']; + } + else if ($xml['m0n0wall']) { + $xml = $xml['m0n0wall']; + } + if ($xml[$section_name]) { + $section_xml = $xml[$section_name]; + } else { + $section_xml = -1; + } + + @unlink($g['tmp_path'] . "/tmpxml"); + if ($section_xml === -1) { + return false; + } + $config[$section_name] = &$section_xml; + if(file_exists("{$g['tmp_path']}/config.cache")) + unlink("{$g['tmp_path']}/config.cache"); + write_config(sprintf(gettext("Restored %s of config file (maybe from CARP partner)"), $section_name)); + disable_security_checks(); + conf_mount_ro(); + return true; +} + +/* + * merge_config_section($section_name, new_contents): restore a configuration section, + * and write the configuration out + * to disk/cf. But preserve the prior + * structure if needed + */ +function merge_config_section($section_name, $new_contents) { + global $config; + conf_mount_rw(); + $fname = get_tmp_filename(); + $fout = fopen($fname, "w"); + fwrite($fout, $new_contents); + fclose($fout); + $section_xml = parse_xml_config($fname, $section_name); + $config[$section_name] = $section_xml; + unlink($fname); + write_config(sprintf(gettext("Restored %s of config file (maybe from CARP partner)"), $section_name)); + disable_security_checks(); + conf_mount_ro(); + return; +} + +/* + * http_post($server, $port, $url, $vars): does an http post to a web server + * posting the vars array. + * written by nf@bigpond.net.au + */ +function http_post($server, $port, $url, $vars) { + $user_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)"; + $urlencoded = ""; + while (list($key,$value) = each($vars)) + $urlencoded.= urlencode($key) . "=" . urlencode($value) . "&"; + $urlencoded = substr($urlencoded,0,-1); + $content_length = strlen($urlencoded); + $headers = "POST $url HTTP/1.1 +Accept: */* +Accept-Language: en-au +Content-Type: application/x-www-form-urlencoded +User-Agent: $user_agent +Host: $server +Connection: Keep-Alive +Cache-Control: no-cache +Content-Length: $content_length + +"; + + $errno = ""; + $errstr = ""; + $fp = fsockopen($server, $port, $errno, $errstr); + if (!$fp) { + return false; + } + + fputs($fp, $headers); + fputs($fp, $urlencoded); + + $ret = ""; + while (!feof($fp)) + $ret.= fgets($fp, 1024); + fclose($fp); + + return $ret; +} + +/* + * php_check_syntax($code_tocheck, $errormessage): checks $code_to_check for errors + */ +if (!function_exists('php_check_syntax')){ + global $g; + function php_check_syntax($code_to_check, &$errormessage){ + return false; + $fout = fopen("{$g['tmp_path']}/codetocheck.php","w"); + $code = $_POST['content']; + $code = str_replace("", "", $code); + fwrite($fout, "\n"); + fclose($fout); + $command = "/usr/local/bin/php -l {$g['tmp_path']}/codetocheck.php"; + $output = exec_command($command); + if (stristr($output, "Errors parsing") == false) { + echo "false\n"; + $errormessage = ''; + return(false); + } else { + $errormessage = $output; + return(true); + } + } +} + +/* + * php_check_filename_syntax($filename, $errormessage): checks the file $filename for errors + */ +if (!function_exists('php_check_syntax')){ + function php_check_syntax($code_to_check, &$errormessage){ + return false; + $command = "/usr/local/bin/php -l " . escapeshellarg($code_to_check); + $output = exec_command($command); + if (stristr($output, "Errors parsing") == false) { + echo "false\n"; + $errormessage = ''; + return(false); + } else { + $errormessage = $output; + return(true); + } + } +} + +/* + * rmdir_recursive($path,$follow_links=false) + * Recursively remove a directory tree (rm -rf path) + * This is for directories _only_ + */ +function rmdir_recursive($path,$follow_links=false) { + $to_do = glob($path); + if(!is_array($to_do)) $to_do = array($to_do); + foreach($to_do as $workingdir) { // Handle wildcards by foreaching. + if(file_exists($workingdir)) { + if(is_dir($workingdir)) { + $dir = opendir($workingdir); + while ($entry = readdir($dir)) { + if (is_file("$workingdir/$entry") || ((!$follow_links) && is_link("$workingdir/$entry"))) + unlink("$workingdir/$entry"); + elseif (is_dir("$workingdir/$entry") && $entry!='.' && $entry!='..') + rmdir_recursive("$workingdir/$entry"); + } + closedir($dir); + rmdir($workingdir); + } elseif (is_file($workingdir)) { + unlink($workingdir); + } + } + } + return; +} + +/* + * call_pfsense_method(): Call a method exposed by the pfsense.org XMLRPC server. + */ +function call_pfsense_method($method, $params, $timeout = 0) { + global $g, $config; + + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + $xmlrpc_path = $g['xmlrpcpath']; + + $xmlrpcfqdn = preg_replace("(https?://)", "", $xmlrpc_base_url); + $ip = gethostbyname($xmlrpcfqdn); + if($ip == $xmlrpcfqdn) + return false; + + $msg = new XML_RPC_Message($method, array(XML_RPC_Encode($params))); + $port = 0; + $proxyurl = ""; + $proxyport = 0; + $proxyuser = ""; + $proxypass = ""; + if (!empty($config['system']['proxyurl'])) + $proxyurl = $config['system']['proxyurl']; + if (!empty($config['system']['proxyport']) && is_numeric($config['system']['proxyport'])) + $proxyport = $config['system']['proxyport']; + if (!empty($config['system']['proxyuser'])) + $proxyuser = $config['system']['proxyuser']; + if (!empty($config['system']['proxypass'])) + $proxypass = $config['system']['proxypass']; + $cli = new XML_RPC_Client($xmlrpc_path, $xmlrpc_base_url, $port, $proxyurl, $proxyport, $proxyuser, $proxypass); + // If the ALT PKG Repo has a username/password set, use it. + if($config['system']['altpkgrepo']['username'] && + $config['system']['altpkgrepo']['password']) { + $username = $config['system']['altpkgrepo']['username']; + $password = $config['system']['altpkgrepo']['password']; + $cli->setCredentials($username, $password); + } + $resp = $cli->send($msg, $timeout); + if(!is_object($resp)) { + log_error(sprintf(gettext("XMLRPC communication error: %s"), $cli->errstr)); + return false; + } elseif($resp->faultCode()) { + log_error(sprintf(gettext('XMLRPC request failed with error %1$s: %2$s'), $resp->faultCode(), $resp->faultString())); + return false; + } else { + return XML_RPC_Decode($resp->value()); + } +} + +/* + * check_firmware_version(): Check whether the current firmware installed is the most recently released. + */ +function check_firmware_version($tocheck = "all", $return_php = true) { + global $g, $config; + + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + $xmlrpcfqdn = preg_replace("(https?://)", "", $xmlrpc_base_url); + $ip = gethostbyname($xmlrpcfqdn); + if($ip == $xmlrpcfqdn) + return false; + $version = php_uname('r'); + $version = explode('-', $version); + $rawparams = array("firmware" => array("version" => trim(file_get_contents('/etc/version'))), + "kernel" => array("version" => $version[0]), + "base" => array("version" => $version[0]), + "platform" => trim(file_get_contents('/etc/platform')), + "config_version" => $config['version'] + ); + unset($version); + + if($tocheck == "all") { + $params = $rawparams; + } else { + foreach($tocheck as $check) { + $params['check'] = $rawparams['check']; + $params['platform'] = $rawparams['platform']; + } + } + if($config['system']['firmware']['branch']) + $params['branch'] = $config['system']['firmware']['branch']; + + /* XXX: What is this method? */ + if(!($versions = call_pfsense_method('pfsense.get_firmware_version', $params))) { + return false; + } else { + $versions["current"] = $params; + } + + return $versions; +} + +/* + * host_firmware_version(): Return the versions used in this install + */ +function host_firmware_version($tocheck = "") { + global $g, $config; + + $os_version = trim(substr(php_uname("r"), 0, strpos(php_uname("r"), '-'))); + + return array( + "firmware" => array("version" => trim(file_get_contents('/etc/version', " \n"))), + "kernel" => array("version" => $os_version), + "base" => array("version" => $os_version), + "platform" => trim(file_get_contents('/etc/platform', " \n")), + "config_version" => $config['version'] + ); +} + +function get_disk_info() { + $diskout = ""; + exec("/bin/df -h | /usr/bin/grep -w '/' | /usr/bin/awk '{ print $2, $3, $4, $5 }'", $diskout); + return explode(' ', $diskout[0]); +} + +/****f* pfsense-utils/strncpy + * NAME + * strncpy - copy strings + * INPUTS + * &$dst, $src, $length + * RESULT + * none + ******/ +function strncpy(&$dst, $src, $length) { + if (strlen($src) > $length) { + $dst = substr($src, 0, $length); + } else { + $dst = $src; + } +} + +/****f* pfsense-utils/reload_interfaces_sync + * NAME + * reload_interfaces - reload all interfaces + * INPUTS + * none + * RESULT + * none + ******/ +function reload_interfaces_sync() { + global $config, $g; + + if($g['debug']) + log_error(gettext("reload_interfaces_sync() is starting.")); + + /* parse config.xml again */ + $config = parse_config(true); + + /* enable routing */ + system_routing_enable(); + if($g['debug']) + log_error(gettext("Enabling system routing")); + + if($g['debug']) + log_error(gettext("Cleaning up Interfaces")); + + /* set up interfaces */ + interfaces_configure(); +} + +/****f* pfsense-utils/reload_all + * NAME + * reload_all - triggers a reload of all settings + * * INPUTS + * none + * RESULT + * none + ******/ +function reload_all() { + send_event("service reload all"); +} + +/****f* pfsense-utils/reload_interfaces + * NAME + * reload_interfaces - triggers a reload of all interfaces + * INPUTS + * none + * RESULT + * none + ******/ +function reload_interfaces() { + send_event("interface all reload"); +} + +/****f* pfsense-utils/reload_all_sync + * NAME + * reload_all - reload all settings + * * INPUTS + * none + * RESULT + * none + ******/ +function reload_all_sync() { + global $config, $g; + + $g['booting'] = false; + + /* parse config.xml again */ + $config = parse_config(true); + + /* set up our timezone */ + system_timezone_configure(); + + /* set up our hostname */ + system_hostname_configure(); + + /* make hosts file */ + system_hosts_generate(); + + /* generate resolv.conf */ + system_resolvconf_generate(); + + /* enable routing */ + system_routing_enable(); + + /* set up interfaces */ + interfaces_configure(); + + /* start dyndns service */ + services_dyndns_configure(); + + /* configure cron service */ + configure_cron(); + + /* start the NTP client */ + system_ntp_configure(); + + /* sync pw database */ + conf_mount_rw(); + unlink_if_exists("/etc/spwd.db.tmp"); + mwexec("/usr/sbin/pwd_mkdb -d /etc/ /etc/master.passwd"); + conf_mount_ro(); + + /* restart sshd */ + send_event("service restart sshd"); + + /* restart webConfigurator if needed */ + send_event("service restart webgui"); +} + +function setup_serial_port($when="save", $path="") { + global $g, $config; + conf_mount_rw(); + $prefix = ""; + if (($when == "upgrade") && (!empty($path)) && is_dir($path.'/boot/')) + $prefix = "/tmp/{$path}"; + $boot_config_file = "{$path}/boot.config"; + $loader_conf_file = "{$path}/boot/loader.conf"; + /* serial console - write out /boot.config */ + if(file_exists($boot_config_file)) + $boot_config = file_get_contents($boot_config_file); + else + $boot_config = ""; + + $serialspeed = (is_numeric($config['system']['serialspeed'])) ? $config['system']['serialspeed'] : "115200"; + if ($g['platform'] != "cdrom") { + $boot_config_split = explode("\n", $boot_config); + $fd = fopen($boot_config_file,"w"); + if($fd) { + foreach($boot_config_split as $bcs) { + if(stristr($bcs, "-D") || stristr($bcs, "-h")) { + /* DONT WRITE OUT, WE'LL DO IT LATER */ + } else { + if($bcs <> "") + fwrite($fd, "{$bcs}\n"); + } + } + if (($g['platform'] == "nanobsd") && !file_exists("/etc/nano_use_vga.txt")) + fwrite($fd, "-S{$serialspeed} -h"); + else if (is_serial_enabled()) + fwrite($fd, "-S{$serialspeed} -D"); + fclose($fd); + } + + /* serial console - write out /boot/loader.conf */ + if ($when == "upgrade") + system("echo \"Reading {$loader_conf_file}...\" >> /conf/upgrade_log.txt"); + $boot_config = file_get_contents($loader_conf_file); + $boot_config_split = explode("\n", $boot_config); + if(count($boot_config_split) > 0) { + $new_boot_config = array(); + // Loop through and only add lines that are not empty, and which + // do not contain a console directive. + foreach($boot_config_split as $bcs) + if(!empty($bcs) + && (stripos($bcs, "console") === false) + && (stripos($bcs, "boot_multicons") === false) + && (stripos($bcs, "boot_serial") === false) + && (stripos($bcs, "hw.usb.no_pf") === false)) + $new_boot_config[] = $bcs; + + if (($g['platform'] == "nanobsd") && !file_exists("/etc/nano_use_vga.txt")) { + $new_boot_config[] = 'boot_serial="YES"'; + $new_boot_config[] = 'console="comconsole"'; + } else if (is_serial_enabled()) { + $new_boot_config[] = 'boot_multicons="YES"'; + $new_boot_config[] = 'boot_serial="YES"'; + $primaryconsole = isset($g['primaryconsole_force']) ? $g['primaryconsole_force'] : $config['system']['primaryconsole']; + switch ($primaryconsole) { + case "video": + $new_boot_config[] = 'console="vidconsole,comconsole"'; + break; + case "serial": + default: + $new_boot_config[] = 'console="comconsole,vidconsole"'; + } + } + $new_boot_config[] = 'comconsole_speed="' . $serialspeed . '"'; + $new_boot_config[] = 'hw.usb.no_pf="1"'; + + file_put_contents($loader_conf_file, implode("\n", $new_boot_config) . "\n"); + } + } + $ttys = file_get_contents("/etc/ttys"); + $ttys_split = explode("\n", $ttys); + $fd = fopen("/etc/ttys", "w"); + + $on_off = (is_serial_enabled() ? 'on' : 'off'); + + if (isset($config['system']['disableconsolemenu'])) { + $console_type = 'Pc'; + $serial_type = 'std.' . $serialspeed; + } else { + $console_type = 'al.Pc'; + $serial_type = 'al.' . $serialspeed; + } + foreach($ttys_split as $tty) { + if (stristr($tty, "ttyv0")) + fwrite($fd, "ttyv0 \"/usr/libexec/getty {$console_type}\" cons25 on secure\n"); + else if (stristr($tty, "ttyu0")) + fwrite($fd, "ttyu0 \"/usr/libexec/getty {$serial_type}\" cons25 {$on_off} secure\n"); + else + fwrite($fd, $tty . "\n"); + } + unset($on_off, $console_type, $serial_type); + fclose($fd); + reload_ttys(); + + conf_mount_ro(); + return; +} + +function is_serial_enabled() { + global $g, $config; + + if (!isset($g['enableserial_force']) && + !isset($config['system']['enableserial']) && + ($g['platform'] == "pfSense" || $g['platform'] == "cdrom" || file_exists("/etc/nano_use_vga.txt"))) + return false; + + return true; +} + +function reload_ttys() { + // Send a HUP signal to init will make it reload /etc/ttys + posix_kill(1, SIGHUP); +} + +function print_value_list($list, $count = 10, $separator = ",") { + $list = implode($separator, array_slice($list, 0, $count)); + if(count($list) < $count) { + $list .= "."; + } else { + $list .= "..."; + } + return $list; +} + +/* DHCP enabled on any interfaces? */ +function is_dhcp_server_enabled() { + global $config; + + if (!is_array($config['dhcpd'])) + return false; + + foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) { + if (isset($dhcpifconf['enable']) && !empty($config['interfaces'][$dhcpif])) + return true; + } + + return false; +} + +/* DHCP enabled on any interfaces? */ +function is_dhcpv6_server_enabled() { + global $config; + + if (is_array($config['interfaces'])) { + foreach ($config['interfaces'] as $ifcfg) { + if (isset($ifcfg['enable']) && !empty($ifcfg['track6-interface'])) + return true; + } + } + + if (!is_array($config['dhcpdv6'])) + return false; + + foreach ($config['dhcpdv6'] as $dhcpv6if => $dhcpv6ifconf) { + if (isset($dhcpv6ifconf['enable']) && !empty($config['interfaces'][$dhcpv6if])) + return true; + } + + return false; +} + +/* radvd enabled on any interfaces? */ +function is_radvd_enabled() { + global $config; + + if (!is_array($config['dhcpdv6'])) + $config['dhcpdv6'] = array(); + + $dhcpdv6cfg = $config['dhcpdv6']; + $Iflist = get_configured_interface_list(); + + /* handle manually configured DHCP6 server settings first */ + foreach ($dhcpdv6cfg as $dhcpv6if => $dhcpv6ifconf) { + if(!isset($config['interfaces'][$dhcpv6if]['enable'])) + continue; + + if(!isset($dhcpv6ifconf['ramode'])) + $dhcpv6ifconf['ramode'] = $dhcpv6ifconf['mode']; + + if($dhcpv6ifconf['ramode'] == "disabled") + continue; + + $ifcfgipv6 = get_interface_ipv6($dhcpv6if); + if(!is_ipaddrv6($ifcfgipv6)) + continue; + + return true; + } + + /* handle DHCP-PD prefixes and 6RD dynamic interfaces */ + foreach ($Iflist as $if => $ifdescr) { + if(!isset($config['interfaces'][$if]['track6-interface'])) + continue; + if(!isset($config['interfaces'][$if]['enable'])) + continue; + + $ifcfgipv6 = get_interface_ipv6($if); + if(!is_ipaddrv6($ifcfgipv6)) + continue; + + $ifcfgsnv6 = get_interface_subnetv6($if); + $subnetv6 = gen_subnetv6($ifcfgipv6, $ifcfgsnv6); + + if(!is_ipaddrv6($subnetv6)) + continue; + + return true; + } + + return false; +} + +/* Any PPPoE servers enabled? */ +function is_pppoe_server_enabled() { + global $config; + + $pppoeenable = false; + + if (!is_array($config['pppoes']) || !is_array($config['pppoes']['pppoe'])) + return false; + + foreach ($config['pppoes']['pppoe'] as $pppoes) + if ($pppoes['mode'] == 'server') + $pppoeenable = true; + + return $pppoeenable; +} + +function convert_seconds_to_hms($sec){ + $min=$hrs=0; + if ($sec != 0){ + $min = floor($sec/60); + $sec %= 60; + } + if ($min != 0){ + $hrs = floor($min/60); + $min %= 60; + } + if ($sec < 10) + $sec = "0".$sec; + if ($min < 10) + $min = "0".$min; + if ($hrs < 10) + $hrs = "0".$hrs; + $result = $hrs.":".$min.":".$sec; + return $result; +} + +/* Compute the total uptime from the ppp uptime log file in the conf directory */ + +function get_ppp_uptime($port){ + if (file_exists("/conf/{$port}.log")){ + $saved_time = file_get_contents("/conf/{$port}.log"); + $uptime_data = explode("\n",$saved_time); + $sec=0; + foreach($uptime_data as $upt) { + $sec += substr($upt, 1 + strpos($upt, " ")); + } + return convert_seconds_to_hms($sec); + } else { + $total_time = gettext("No history data found!"); + return $total_time; + } +} + +//returns interface information +function get_interface_info($ifdescr) { + global $config, $g; + + $ifinfo = array(); + if (empty($config['interfaces'][$ifdescr])) + return; + $ifinfo['hwif'] = $config['interfaces'][$ifdescr]['if']; + $ifinfo['if'] = get_real_interface($ifdescr); + + $chkif = $ifinfo['if']; + $ifinfotmp = pfSense_get_interface_addresses($chkif); + $ifinfo['status'] = $ifinfotmp['status']; + if (empty($ifinfo['status'])) + $ifinfo['status'] = "down"; + $ifinfo['macaddr'] = $ifinfotmp['macaddr']; + $ifinfo['ipaddr'] = $ifinfotmp['ipaddr']; + $ifinfo['subnet'] = $ifinfotmp['subnet']; + $ifinfo['linklocal'] = get_interface_linklocal($ifdescr); + $ifinfo['ipaddrv6'] = get_interface_ipv6($ifdescr); + $ifinfo['subnetv6'] = get_interface_subnetv6($ifdescr); + if (isset($ifinfotmp['link0'])) + $link0 = "down"; + $ifinfotmp = pfSense_get_interface_stats($chkif); + // $ifinfo['inpkts'] = $ifinfotmp['inpkts']; + // $ifinfo['outpkts'] = $ifinfotmp['outpkts']; + $ifinfo['inerrs'] = $ifinfotmp['inerrs']; + $ifinfo['outerrs'] = $ifinfotmp['outerrs']; + $ifinfo['collisions'] = $ifinfotmp['collisions']; + + /* Use pfctl for non wrapping 64 bit counters */ + /* Pass */ + exec("/sbin/pfctl -vvsI -i {$chkif}", $pfctlstats); + $pf_in4_pass = preg_split("/ +/ ", $pfctlstats[3]); + $pf_out4_pass = preg_split("/ +/", $pfctlstats[5]); + $pf_in6_pass = preg_split("/ +/ ", $pfctlstats[7]); + $pf_out6_pass = preg_split("/ +/", $pfctlstats[9]); + $in4_pass = $pf_in4_pass[5]; + $out4_pass = $pf_out4_pass[5]; + $in4_pass_packets = $pf_in4_pass[3]; + $out4_pass_packets = $pf_out4_pass[3]; + $in6_pass = $pf_in6_pass[5]; + $out6_pass = $pf_out6_pass[5]; + $in6_pass_packets = $pf_in6_pass[3]; + $out6_pass_packets = $pf_out6_pass[3]; + $ifinfo['inbytespass'] = $in4_pass + $in6_pass; + $ifinfo['outbytespass'] = $out4_pass + $out6_pass; + $ifinfo['inpktspass'] = $in4_pass_packets + $in6_pass_packets; + $ifinfo['outpktspass'] = $out4_pass_packets + $out6_pass_packets; + + /* Block */ + $pf_in4_block = preg_split("/ +/", $pfctlstats[4]); + $pf_out4_block = preg_split("/ +/", $pfctlstats[6]); + $pf_in6_block = preg_split("/ +/", $pfctlstats[8]); + $pf_out6_block = preg_split("/ +/", $pfctlstats[10]); + $in4_block = $pf_in4_block[5]; + $out4_block = $pf_out4_block[5]; + $in4_block_packets = $pf_in4_block[3]; + $out4_block_packets = $pf_out4_block[3]; + $in6_block = $pf_in6_block[5]; + $out6_block = $pf_out6_block[5]; + $in6_block_packets = $pf_in6_block[3]; + $out6_block_packets = $pf_out6_block[3]; + $ifinfo['inbytesblock'] = $in4_block + $in6_block; + $ifinfo['outbytesblock'] = $out4_block + $out6_block; + $ifinfo['inpktsblock'] = $in4_block_packets + $in6_block_packets; + $ifinfo['outpktsblock'] = $out4_block_packets + $out6_block_packets; + + $ifinfo['inbytes'] = $in4_pass + $in6_pass; + $ifinfo['outbytes'] = $out4_pass + $out6_pass; + $ifinfo['inpkts'] = $in4_pass_packets + $in6_pass_packets; + $ifinfo['outpkts'] = $out4_pass_packets + $out6_pass_packets; + + $ifconfiginfo = ""; + $link_type = $config['interfaces'][$ifdescr]['ipaddr']; + switch ($link_type) { + /* DHCP? -> see if dhclient is up */ + case "dhcp": + /* see if dhclient is up */ + if (find_dhclient_process($ifinfo['if']) != 0) + $ifinfo['dhcplink'] = "up"; + else + $ifinfo['dhcplink'] = "down"; + + break; + /* PPPoE/PPTP/L2TP interface? -> get status from virtual interface */ + case "pppoe": + case "pptp": + case "l2tp": + if ($ifinfo['status'] == "up" && !isset($link0)) + /* get PPPoE link status for dial on demand */ + $ifinfo["{$link_type}link"] = "up"; + else + $ifinfo["{$link_type}link"] = "down"; + + break; + /* PPP interface? -> get uptime for this session and cumulative uptime from the persistant log file in conf */ + case "ppp": + if ($ifinfo['status'] == "up") + $ifinfo['ppplink'] = "up"; + else + $ifinfo['ppplink'] = "down" ; + + if (empty($ifinfo['status'])) + $ifinfo['status'] = "down"; + + if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($config['ppps']['ppp'] as $pppid => $ppp) { + if ($config['interfaces'][$ifdescr]['if'] == $ppp['if']) + break; + } + } + $dev = $ppp['ports']; + if ($config['interfaces'][$ifdescr]['if'] != $ppp['if'] || empty($dev)) + break; + if (!file_exists($dev)) { + $ifinfo['nodevice'] = 1; + $ifinfo['pppinfo'] = $dev . " " . gettext("device not present! Is the modem attached to the system?"); + } + + $usbmodemoutput = array(); + exec("usbconfig", $usbmodemoutput); + $mondev = "{$g['tmp_path']}/3gstats.{$ifdescr}"; + if(file_exists($mondev)) { + $cellstats = file($mondev); + /* skip header */ + $a_cellstats = explode(",", $cellstats[1]); + if(preg_match("/huawei/i", implode("\n", $usbmodemoutput))) { + $ifinfo['cell_rssi'] = huawei_rssi_to_string($a_cellstats[1]); + $ifinfo['cell_mode'] = huawei_mode_to_string($a_cellstats[2], $a_cellstats[3]); + $ifinfo['cell_simstate'] = huawei_simstate_to_string($a_cellstats[10]); + $ifinfo['cell_service'] = huawei_service_to_string(trim($a_cellstats[11])); + } + if(preg_match("/zte/i", implode("\n", $usbmodemoutput))) { + $ifinfo['cell_rssi'] = zte_rssi_to_string($a_cellstats[1]); + $ifinfo['cell_mode'] = zte_mode_to_string($a_cellstats[2], $a_cellstats[3]); + $ifinfo['cell_simstate'] = zte_simstate_to_string($a_cellstats[10]); + $ifinfo['cell_service'] = zte_service_to_string(trim($a_cellstats[11])); + } + $ifinfo['cell_upstream'] = $a_cellstats[4]; + $ifinfo['cell_downstream'] = trim($a_cellstats[5]); + $ifinfo['cell_sent'] = $a_cellstats[6]; + $ifinfo['cell_received'] = trim($a_cellstats[7]); + $ifinfo['cell_bwupstream'] = $a_cellstats[8]; + $ifinfo['cell_bwdownstream'] = trim($a_cellstats[9]); + } + // Calculate cumulative uptime for PPP link. Useful for connections that have per minute/hour contracts so you don't go over! + if (isset($ppp['uptime'])) + $ifinfo['ppp_uptime_accumulated'] = "(".get_ppp_uptime($ifinfo['if']).")"; + break; + default: + break; + } + + if (file_exists("{$g['varrun_path']}/{$link_type}_{$ifdescr}.pid")) { + $sec = trim(`/usr/local/sbin/ppp-uptime.sh {$ifinfo['if']}`); + $ifinfo['ppp_uptime'] = convert_seconds_to_hms($sec); + } + + if ($ifinfo['status'] == "up") { + /* try to determine media with ifconfig */ + unset($ifconfiginfo); + exec("/sbin/ifconfig " . $ifinfo['if'], $ifconfiginfo); + $wifconfiginfo = array(); + if(is_interface_wireless($ifdescr)) { + exec("/sbin/ifconfig {$ifinfo['if']} list sta", $wifconfiginfo); + array_shift($wifconfiginfo); + } + $matches = ""; + foreach ($ifconfiginfo as $ici) { + + /* don't list media/speed for wireless cards, as it always + displays 2 Mbps even though clients can connect at 11 Mbps */ + if (preg_match("/media: .*? \((.*?)\)/", $ici, $matches)) { + $ifinfo['media'] = $matches[1]; + } else if (preg_match("/media: Ethernet (.*)/", $ici, $matches)) { + $ifinfo['media'] = $matches[1]; + } else if (preg_match("/media: IEEE 802.11 Wireless Ethernet (.*)/", $ici, $matches)) { + $ifinfo['media'] = $matches[1]; + } + + if (preg_match("/status: (.*)$/", $ici, $matches)) { + if ($matches[1] != "active") + $ifinfo['status'] = $matches[1]; + if($ifinfo['status'] == gettext("running")) + $ifinfo['status'] = gettext("up"); + } + if (preg_match("/channel (\S*)/", $ici, $matches)) { + $ifinfo['channel'] = $matches[1]; + } + if (preg_match("/ssid (\".*?\"|\S*)/", $ici, $matches)) { + if ($matches[1][0] == '"') + $ifinfo['ssid'] = substr($matches[1], 1, -1); + else + $ifinfo['ssid'] = $matches[1]; + } + if (preg_match("/laggproto (.*)$/", $ici, $matches)) { + $ifinfo['laggproto'] = $matches[1]; + } + if (preg_match("/laggport: (.*)$/", $ici, $matches)) { + $ifinfo['laggport'][] = $matches[1]; + } + } + foreach($wifconfiginfo as $ici) { + $elements = preg_split("/[ ]+/i", $ici); + if ($elements[0] != "") { + $ifinfo['bssid'] = $elements[0]; + } + if ($elements[3] != "") { + $ifinfo['rate'] = $elements[3]; + } + if ($elements[4] != "") { + $ifinfo['rssi'] = $elements[4]; + } + + } + /* lookup the gateway */ + if (interface_has_gateway($ifdescr)) { + $ifinfo['gateway'] = get_interface_gateway($ifdescr); + $ifinfo['gatewayv6'] = get_interface_gateway_v6($ifdescr); + } + } + + $bridge = ""; + $bridge = link_interface_to_bridge($ifdescr); + if($bridge) { + $bridge_text = `/sbin/ifconfig {$bridge}`; + if(stristr($bridge_text, "blocking") <> false) { + $ifinfo['bridge'] = "" . gettext("blocking") . " - " . gettext("check for ethernet loops"); + $ifinfo['bridgeint'] = $bridge; + } else if(stristr($bridge_text, "learning") <> false) { + $ifinfo['bridge'] = gettext("learning"); + $ifinfo['bridgeint'] = $bridge; + } else if(stristr($bridge_text, "forwarding") <> false) { + $ifinfo['bridge'] = gettext("forwarding"); + $ifinfo['bridgeint'] = $bridge; + } + } + + return $ifinfo; +} + +//returns cpu speed of processor. Good for determining capabilities of machine +function get_cpu_speed() { + return get_single_sysctl("hw.clockrate"); +} + +function get_uptime_sec() { + $boottime = ""; + $matches = ""; + $boottime = get_single_sysctl("kern.boottime"); + preg_match("/sec = (\d+)/", $boottime, $matches); + $boottime = $matches[1]; + if(intval($boottime) == 0) + return 0; + + $uptime = time() - $boottime; + return $uptime; +} + +function add_hostname_to_watch($hostname) { + if(!is_dir("/var/db/dnscache")) { + mkdir("/var/db/dnscache"); + } + $result = array(); + if((is_fqdn($hostname)) && (!is_ipaddr($hostname))) { + $domrecords = array(); + $domips = array(); + exec("host -t A " . escapeshellarg($hostname), $domrecords, $rethost); + if($rethost == 0) { + foreach($domrecords as $domr) { + $doml = explode(" ", $domr); + $domip = $doml[3]; + /* fill array with domain ip addresses */ + if(is_ipaddr($domip)) { + $domips[] = $domip; + } + } + } + sort($domips); + $contents = ""; + if(! empty($domips)) { + foreach($domips as $ip) { + $contents .= "$ip\n"; + } + } + file_put_contents("/var/db/dnscache/$hostname", $contents); + /* Remove empty elements */ + $result = array_filter(explode("\n", $contents), 'strlen'); + } + return $result; +} + +function is_fqdn($fqdn) { + $hostname = false; + if(preg_match("/[-A-Z0-9\.]+\.[-A-Z0-9\.]+/i", $fqdn)) { + $hostname = true; + } + if(preg_match("/\.\./", $fqdn)) { + $hostname = false; + } + if(preg_match("/^\./i", $fqdn)) { + $hostname = false; + } + if(preg_match("/\//i", $fqdn)) { + $hostname = false; + } + return($hostname); +} + +function pfsense_default_state_size() { + /* get system memory amount */ + $memory = get_memory(); + $physmem = $memory[0]; + /* Be cautious and only allocate 10% of system memory to the state table */ + $max_states = (int) ($physmem/10)*1000; + return $max_states; +} + +function pfsense_default_tables_size() { + $current = `pfctl -sm | grep ^tables | awk '{print $4};'`; + return $current; +} + +function pfsense_default_table_entries_size() { + $current = `pfctl -sm | grep table-entries | awk '{print $4};'`; + return $current; +} + +/* Compare the current hostname DNS to the DNS cache we made + * if it has changed we return the old records + * if no change we return false */ +function compare_hostname_to_dnscache($hostname) { + if(!is_dir("/var/db/dnscache")) { + mkdir("/var/db/dnscache"); + } + $hostname = trim($hostname); + if(is_readable("/var/db/dnscache/{$hostname}")) { + $oldcontents = file_get_contents("/var/db/dnscache/{$hostname}"); + } else { + $oldcontents = ""; + } + if((is_fqdn($hostname)) && (!is_ipaddr($hostname))) { + $domrecords = array(); + $domips = array(); + exec("host -t A " . escapeshellarg($hostname), $domrecords, $rethost); + if($rethost == 0) { + foreach($domrecords as $domr) { + $doml = explode(" ", $domr); + $domip = $doml[3]; + /* fill array with domain ip addresses */ + if(is_ipaddr($domip)) { + $domips[] = $domip; + } + } + } + sort($domips); + $contents = ""; + if(! empty($domips)) { + foreach($domips as $ip) { + $contents .= "$ip\n"; + } + } + } + + if(trim($oldcontents) != trim($contents)) { + if($g['debug']) { + log_error(sprintf(gettext('DNSCACHE: Found old IP %1$s and new IP %2$s'), $oldcontents, $contents)); + } + return ($oldcontents); + } else { + return false; + } +} + +/* + * load_crypto() - Load crypto modules if enabled in config. + */ +function load_crypto() { + global $config, $g; + $crypto_modules = array('glxsb', 'aesni'); + + if (!in_array($config['system']['crypto_hardware'], $crypto_modules)) + return false; + + if (!empty($config['system']['crypto_hardware']) && !is_module_loaded($config['system']['crypto_hardware'])) { + log_error("Loading {$config['system']['crypto_hardware']} cryptographic accelerator module."); + mwexec("/sbin/kldload {$config['system']['crypto_hardware']}"); + } +} + +/* + * load_thermal_hardware() - Load temperature monitor kernel module + */ +function load_thermal_hardware() { + global $config, $g; + $thermal_hardware_modules = array('coretemp', 'amdtemp'); + + if (!in_array($config['system']['thermal_hardware'], $thermal_hardware_modules)) + return false; + + if (!empty($config['system']['thermal_hardware']) && !is_module_loaded($config['system']['thermal_hardware'])) { + log_error("Loading {$config['system']['thermal_hardware']} thermal monitor module."); + mwexec("/sbin/kldload {$config['system']['thermal_hardware']}"); + } +} + +/****f* pfsense-utils/isvm + * NAME + * isvm + * INPUTS + * none + * RESULT + * returns true if machine is running under a virtual environment + ******/ +function isvm() { + $virtualenvs = array("vmware", "parallels", "qemu", "bochs", "plex86"); + $bios_product = trim(`/bin/kenv smbios.system.product`); + foreach ($virtualenvs as $virtualenv) + if (stripos($bios_product, $virtualenv) !== false) + return true; + + return false; +} + +function get_freebsd_version() { + $version = explode(".", php_uname("r")); + return $version[0]; +} + +function download_file($url, $destination, $verify_ssl = false, $connect_timeout = 60, $timeout = 0) { + global $config, $g; + + $fp = fopen($destination, "wb"); + + if (!$fp) + return false; + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $verify_ssl); + curl_setopt($ch, CURLOPT_FILE, $fp); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connect_timeout); + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_USERAGENT, $g['product_name'] . '/' . rtrim(file_get_contents("/etc/version"))); + + if (!empty($config['system']['proxyurl'])) { + curl_setopt($ch, CURLOPT_PROXY, $config['system']['proxyurl']); + if (!empty($config['system']['proxyport'])) + curl_setopt($ch, CURLOPT_PROXYPORT, $config['system']['proxyport']); + if (!empty($config['system']['proxyuser']) && !empty($config['system']['proxypass'])) { + @curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_ANY | CURLAUTH_ANYSAFE); + curl_setopt($ch, CURLOPT_PROXYUSERPWD, "{$config['system']['proxyuser']}:{$config['system']['proxypass']}"); + } + } + + @curl_exec($ch); + $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + fclose($fp); + curl_close($ch); + return ($http_code == 200) ? true : $http_code; +} + +function download_file_with_progress_bar($url_file, $destination_file, $readbody = 'read_body', $connect_timeout=60, $timeout=0) { + global $ch, $fout, $file_size, $downloaded, $config, $first_progress_update; + $file_size = 1; + $downloaded = 1; + $first_progress_update = TRUE; + /* open destination file */ + $fout = fopen($destination_file, "wb"); + + /* + * Originally by Author: Keyvan Minoukadeh + * Modified by Scott Ullrich to return Content-Length size + */ + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url_file); + curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header'); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + /* Don't verify SSL peers since we don't have the certificates to do so. */ + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_WRITEFUNCTION, $readbody); + curl_setopt($ch, CURLOPT_NOPROGRESS, '1'); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connect_timeout); + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + curl_setopt($ch, CURLOPT_USERAGENT, $g['product_name'] . '/' . rtrim(file_get_contents("/etc/version"))); + + if (!empty($config['system']['proxyurl'])) { + curl_setopt($ch, CURLOPT_PROXY, $config['system']['proxyurl']); + if (!empty($config['system']['proxyport'])) + curl_setopt($ch, CURLOPT_PROXYPORT, $config['system']['proxyport']); + if (!empty($config['system']['proxyuser']) && !empty($config['system']['proxypass'])) { + @curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_ANY | CURLAUTH_ANYSAFE); + curl_setopt($ch, CURLOPT_PROXYUSERPWD, "{$config['system']['proxyuser']}:{$config['system']['proxypass']}"); + } + } + + @curl_exec($ch); + $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + if($fout) + fclose($fout); + curl_close($ch); + return ($http_code == 200) ? true : $http_code; +} + +function read_header($ch, $string) { + global $file_size, $fout; + $length = strlen($string); + $regs = ""; + preg_match("/(Content-Length:) (.*)/", $string, $regs); + if($regs[2] <> "") { + $file_size = intval($regs[2]); + } + ob_flush(); + return $length; +} + +function read_body($ch, $string) { + global $fout, $file_size, $downloaded, $sendto, $static_status, $static_output, $lastseen, $first_progress_update; + global $pkg_interface; + $length = strlen($string); + $downloaded += intval($length); + if($file_size > 0) { + $downloadProgress = round(100 * (1 - $downloaded / $file_size), 0); + $downloadProgress = 100 - $downloadProgress; + } else + $downloadProgress = 0; + if($lastseen <> $downloadProgress and $downloadProgress < 101) { + if($sendto == "status") { + if($pkg_interface == "console") { + if(($downloadProgress % 10) == 0 || $downloadProgress < 10) { + $tostatus = $static_status . $downloadProgress . "%"; + if ($downloadProgress == 100) { + $tostatus = $tostatus . "\r"; + } + update_status($tostatus); + } + } else { + $tostatus = $static_status . $downloadProgress . "%"; + update_status($tostatus); + } + } else { + if($pkg_interface == "console") { + if(($downloadProgress % 10) == 0 || $downloadProgress < 10) { + $tooutput = $static_output . $downloadProgress . "%"; + if ($downloadProgress == 100) { + $tooutput = $tooutput . "\r"; + } + update_output_window($tooutput); + } + } else { + $tooutput = $static_output . $downloadProgress . "%"; + update_output_window($tooutput); + } + } + if(($pkg_interface != "console") || (($downloadProgress % 10) == 0) || ($downloadProgress < 10)) { + update_progress_bar($downloadProgress, $first_progress_update); + $first_progress_update = FALSE; + } + $lastseen = $downloadProgress; + } + if($fout) + fwrite($fout, $string); + ob_flush(); + return $length; +} + +/* + * update_output_window: update bottom textarea dynamically. + */ +function update_output_window($text) { + global $pkg_interface; + $log = preg_replace("/\n/", "\\n", $text); + if($pkg_interface != "console") { + echo "\n"; + } + /* ensure that contents are written out */ + ob_flush(); +} + +/* + * update_status: update top textarea dynamically. + */ +function update_status($status) { + global $pkg_interface; + if($pkg_interface == "console") { + echo "\r{$status}"; + } else { + echo "\n"; + } + /* ensure that contents are written out */ + ob_flush(); +} + +/* + * update_progress_bar($percent, $first_time): updates the javascript driven progress bar. + */ +function update_progress_bar($percent, $first_time) { + global $pkg_interface; + if($percent > 100) $percent = 1; + if($pkg_interface <> "console") { + echo "\n"; + } else { + if(!($first_time)) + echo "\x08\x08\x08\x08\x08"; + echo sprintf("%4d%%", $percent); + } +} + +/* Split() is being DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged. */ +if(!function_exists("split")) { + function split($separator, $haystack, $limit = null) { + log_error("deprecated split() call with separator '{$separator}'"); + return preg_split($separator, $haystack, $limit); + } +} + +function update_alias_names_upon_change($section, $field, $new_alias_name, $origname) { + global $g, $config, $pconfig, $debug; + if(!$origname) + return; + + $sectionref = &$config; + foreach($section as $sectionname) { + if(is_array($sectionref) && isset($sectionref[$sectionname])) + $sectionref = &$sectionref[$sectionname]; + else + return; + } + + if($debug) $fd = fopen("{$g['tmp_path']}/print_r", "a"); + if($debug) fwrite($fd, print_r($pconfig, true)); + + if(is_array($sectionref)) { + foreach($sectionref as $itemkey => $item) { + if($debug) fwrite($fd, "$itemkey\n"); + + $fieldfound = true; + $fieldref = &$sectionref[$itemkey]; + foreach($field as $fieldname) { + if(is_array($fieldref) && isset($fieldref[$fieldname])) + $fieldref = &$fieldref[$fieldname]; + else { + $fieldfound = false; + break; + } + } + if($fieldfound && $fieldref == $origname) { + if($debug) fwrite($fd, "Setting old alias value $origname to $new_alias_name\n"); + $fieldref = $new_alias_name; + } + } + } + + if($debug) fclose($fd); + +} + +function update_alias_url_data() { + global $config, $g; + + $updated = false; + + /* item is a url type */ + $lockkey = lock('aliasurl'); + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $x => $alias) { + if (empty($alias['aliasurl'])) + continue; + + $address = ""; + $isfirst = 0; + foreach ($alias['aliasurl'] as $alias_url) { + /* fetch down and add in */ + $temp_filename = tempnam("{$g['tmp_path']}/", "alias_import"); + unlink($temp_filename); + $verify_ssl = isset($config['system']['checkaliasesurlcert']); + mkdir($temp_filename); + download_file($alias_url, $temp_filename . "/aliases", $verify_ssl); + + /* if the item is tar gzipped then extract */ + if (stripos($alias_url, '.tgz')) { + if (!process_alias_tgz($temp_filename)) + continue; + } else if (stripos($alias_url, '.zip')) { + if (!process_alias_unzip($temp_filename)) + continue; + } + if (file_exists("{$temp_filename}/aliases")) { + $fd = @fopen("{$temp_filename}/aliases", 'r'); + if (!$fd) { + log_error(gettext("Could not process aliases from alias: {$alias_url}")); + continue; + } + /* NOTE: fgetss() is not a typo RTFM before being smart */ + while (($fc = fgetss($fd)) !== FALSE) { + $tmp = trim($fc, " \t\n\r"); + if (empty($tmp)) + continue; + $tmp_str = strstr($tmp, '#', true); + if (!empty($tmp_str)) + $tmp = $tmp_str; + if ($isfirst == 1) + $address .= ' '; + $address .= $tmp; + $isfirst = 1; + } + fclose($fd); + mwexec("/bin/rm -rf {$temp_filename}"); + } + } + if (!empty($address)) { + $config['aliases']['alias'][$x]['address'] = $address; + $updated = true; + } + } + } + unlock($lockkey); + + /* Report status to callers as well */ + return $updated; +} + +function process_alias_unzip($temp_filename) { + if(!file_exists("/usr/local/bin/unzip")) { + log_error(gettext("Alias archive is a .zip file which cannot be decompressed because utility is missing!")); + return false; + } + rename("{$temp_filename}/aliases", "{$temp_filename}/aliases.zip"); + mwexec("/usr/local/bin/unzip {$temp_filename}/aliases.tgz -d {$temp_filename}/aliases/"); + unlink("{$temp_filename}/aliases.zip"); + $files_to_process = return_dir_as_array("{$temp_filename}/"); + /* foreach through all extracted files and build up aliases file */ + $fd = @fopen("{$temp_filename}/aliases", "w"); + if (!$fd) { + log_error(gettext("Could not open {$temp_filename}/aliases for writing!")); + return false; + } + foreach($files_to_process as $f2p) { + $tmpfd = @fopen($f2p, 'r'); + if (!$tmpfd) { + log_error(gettext("The following file could not be read {$f2p} from {$temp_filename}")); + continue; + } + while (($tmpbuf = fread($tmpfd, 65536)) !== FALSE) + fwrite($fd, $tmpbuf); + fclose($tmpfd); + unlink($f2p); + } + fclose($fd); + unset($tmpbuf); + + return true; +} + +function process_alias_tgz($temp_filename) { + if(!file_exists('/usr/bin/tar')) { + log_error(gettext("Alias archive is a .tar/tgz file which cannot be decompressed because utility is missing!")); + return false; + } + rename("{$temp_filename}/aliases", "{$temp_filename}/aliases.tgz"); + mwexec("/usr/bin/tar xzf {$temp_filename}/aliases.tgz -C {$temp_filename}/aliases/"); + unlink("{$temp_filename}/aliases.tgz"); + $files_to_process = return_dir_as_array("{$temp_filename}/"); + /* foreach through all extracted files and build up aliases file */ + $fd = @fopen("{$temp_filename}/aliases", "w"); + if (!$fd) { + log_error(gettext("Could not open {$temp_filename}/aliases for writing!")); + return false; + } + foreach($files_to_process as $f2p) { + $tmpfd = @fopen($f2p, 'r'); + if (!$tmpfd) { + log_error(gettext("The following file could not be read {$f2p} from {$temp_filename}")); + continue; + } + while (($tmpbuf = fread($tmpfd, 65536)) !== FALSE) + fwrite($fd, $tmpbuf); + fclose($tmpfd); + unlink($f2p); + } + fclose($fd); + unset($tmpbuf); + + return true; +} + +function version_compare_dates($a, $b) { + $a_time = strtotime($a); + $b_time = strtotime($b); + + if ((!$a_time) || (!$b_time)) { + return FALSE; + } else { + if ($a_time < $b_time) + return -1; + elseif ($a_time == $b_time) + return 0; + else + return 1; + } +} +function version_get_string_value($a) { + $strs = array( + 0 => "ALPHA-ALPHA", + 2 => "ALPHA", + 3 => "BETA", + 4 => "B", + 5 => "C", + 6 => "D", + 7 => "RC", + 8 => "RELEASE", + 9 => "*" // Matches all release levels + ); + $major = 0; + $minor = 0; + foreach ($strs as $num => $str) { + if (substr($a, 0, strlen($str)) == $str) { + $major = $num; + $n = substr($a, strlen($str)); + if (is_numeric($n)) + $minor = $n; + break; + } + } + return "{$major}.{$minor}"; +} +function version_compare_string($a, $b) { + // Only compare string parts if both versions give a specific release + // (If either version lacks a string part, assume intended to match all release levels) + if (isset($a) && isset($b)) + return version_compare_numeric(version_get_string_value($a), version_get_string_value($b)); + else + return 0; +} +function version_compare_numeric($a, $b) { + $a_arr = explode('.', rtrim($a, '.0')); + $b_arr = explode('.', rtrim($b, '.0')); + + foreach ($a_arr as $n => $val) { + if (array_key_exists($n, $b_arr)) { + // So far so good, both have values at this minor version level. Compare. + if ($val > $b_arr[$n]) + return 1; + elseif ($val < $b_arr[$n]) + return -1; + } else { + // a is greater, since b doesn't have any minor version here. + return 1; + } + } + if (count($b_arr) > count($a_arr)) { + // b is longer than a, so it must be greater. + return -1; + } else { + // Both a and b are of equal length and value. + return 0; + } +} +function pfs_version_compare($cur_time, $cur_text, $remote) { + // First try date compare + $v = version_compare_dates($cur_time, $remote); + if ($v === FALSE) { + // If that fails, try to compare by string + // Before anything else, simply test if the strings are equal + if (($cur_text == $remote) || ($cur_time == $remote)) + return 0; + list($cur_num, $cur_str) = explode('-', $cur_text); + list($rem_num, $rem_str) = explode('-', $remote); + + // First try to compare the numeric parts of the version string. + $v = version_compare_numeric($cur_num, $rem_num); + + // If the numeric parts are the same, compare the string parts. + if ($v == 0) + return version_compare_string($cur_str, $rem_str); + } + return $v; +} +function process_alias_urltable($name, $url, $freq, $forceupdate=false) { + global $config; + + $urltable_prefix = "/var/db/aliastables/"; + $urltable_filename = $urltable_prefix . $name . ".txt"; + + // Make the aliases directory if it doesn't exist + if (!file_exists($urltable_prefix)) { + mkdir($urltable_prefix); + } elseif (!is_dir($urltable_prefix)) { + unlink($urltable_prefix); + mkdir($urltable_prefix); + } + + // If the file doesn't exist or is older than update_freq days, fetch a new copy. + if (!file_exists($urltable_filename) + || ((time() - filemtime($urltable_filename)) > ($freq * 86400 - 90)) + || $forceupdate) { + + // Try to fetch the URL supplied + conf_mount_rw(); + unlink_if_exists($urltable_filename . ".tmp"); + $verify_ssl = isset($config['system']['checkaliasesurlcert']); + if (download_file($url, $urltable_filename . ".tmp", $verify_ssl)) { + mwexec("/usr/bin/sed -E 's/\;.*//g; /^[[:space:]]*($|#)/d' ". escapeshellarg($urltable_filename . ".tmp") . " > " . escapeshellarg($urltable_filename)); + if (alias_get_type($name) == "urltable_ports") { + $ports = explode("\n", file_get_contents($urltable_filename)); + $ports = group_ports($ports); + file_put_contents($urltable_filename, implode("\n", $ports)); + } + unlink_if_exists($urltable_filename . ".tmp"); + } else + touch($urltable_filename); + conf_mount_ro(); + return true; + } else { + // File exists, and it doesn't need updated. + return -1; + } +} +function get_real_slice_from_glabel($label) { + $label = escapeshellarg($label); + return trim(`/sbin/glabel list | /usr/bin/grep -B2 ufs/{$label} | /usr/bin/head -n 1 | /usr/bin/cut -f3 -d' '`); +} +function nanobsd_get_boot_slice() { + return trim(`/sbin/mount | /usr/bin/grep pfsense | /usr/bin/cut -d'/' -f4 | /usr/bin/cut -d' ' -f1`); +} +function nanobsd_get_boot_drive() { + return trim(`/sbin/glabel list | /usr/bin/grep -B2 ufs/pfsense | /usr/bin/head -n 1 | /usr/bin/cut -f3 -d' ' | /usr/bin/cut -d's' -f1`); +} +function nanobsd_get_active_slice() { + $boot_drive = nanobsd_get_boot_drive(); + $active = trim(`gpart show $boot_drive | grep '\[active\]' | awk '{print $3;}'`); + + return "{$boot_drive}s{$active}"; +} +function nanobsd_get_size() { + return strtoupper(file_get_contents("/etc/nanosize.txt")); +} +function nanobsd_switch_boot_slice() { + global $SLICE, $OLDSLICE, $TOFLASH, $COMPLETE_PATH, $COMPLETE_BOOT_PATH; + global $GLABEL_SLICE, $UFS_ID, $OLD_UFS_ID, $BOOTFLASH; + global $BOOT_DEVICE, $REAL_BOOT_DEVICE, $BOOT_DRIVE, $ACTIVE_SLICE; + nanobsd_detect_slice_info(); + + if ($BOOTFLASH == $ACTIVE_SLICE) { + $slice = $TOFLASH; + } else { + $slice = $BOOTFLASH; + } + + for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } + ob_implicit_flush(1); + if(strstr($slice, "s2")) { + $ASLICE="2"; + $AOLDSLICE="1"; + $AGLABEL_SLICE="pfsense1"; + $AUFS_ID="1"; + $AOLD_UFS_ID="0"; + } else { + $ASLICE="1"; + $AOLDSLICE="2"; + $AGLABEL_SLICE="pfsense0"; + $AUFS_ID="0"; + $AOLD_UFS_ID="1"; + } + $ATOFLASH="{$BOOT_DRIVE}s{$ASLICE}"; + $ACOMPLETE_PATH="{$BOOT_DRIVE}s{$ASLICE}a"; + $ABOOTFLASH="{$BOOT_DRIVE}s{$AOLDSLICE}"; + conf_mount_rw(); + set_single_sysctl("kern.geom.debugflags", "16"); + exec("gpart set -a active -i {$ASLICE} {$BOOT_DRIVE}"); + exec("/usr/sbin/boot0cfg -s {$ASLICE} -v /dev/{$BOOT_DRIVE}"); + // We can't update these if they are mounted now. + if ($BOOTFLASH != $slice) { + exec("/sbin/tunefs -L ${AGLABEL_SLICE} /dev/$ACOMPLETE_PATH"); + nanobsd_update_fstab($AGLABEL_SLICE, $ACOMPLETE_PATH, $AOLD_UFS_ID, $AUFS_ID); + } + set_single_sysctl("kern.geom.debugflags", "0"); + conf_mount_ro(); +} +function nanobsd_clone_slice() { + global $SLICE, $OLDSLICE, $TOFLASH, $COMPLETE_PATH, $COMPLETE_BOOT_PATH; + global $GLABEL_SLICE, $UFS_ID, $OLD_UFS_ID, $BOOTFLASH; + global $BOOT_DEVICE, $REAL_BOOT_DEVICE, $BOOT_DRIVE, $ACTIVE_SLICE; + nanobsd_detect_slice_info(); + + for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } + ob_implicit_flush(1); + set_single_sysctl("kern.geom.debugflags", "16"); + exec("/bin/dd if=/dev/zero of=/dev/{$TOFLASH} bs=1m count=1"); + exec("/bin/dd if=/dev/{$BOOTFLASH} of=/dev/{$TOFLASH} bs=64k"); + exec("/sbin/tunefs -L {$GLABEL_SLICE} /dev/{$COMPLETE_PATH}"); + $status = nanobsd_update_fstab($GLABEL_SLICE, $COMPLETE_PATH, $OLD_UFS_ID, $UFS_ID); + set_single_sysctl("kern.geom.debugflags", "0"); + if($status) { + return false; + } else { + return true; + } +} +function nanobsd_update_fstab($gslice, $complete_path, $oldufs, $newufs) { + $tmppath = "/tmp/{$gslice}"; + $fstabpath = "/tmp/{$gslice}/etc/fstab"; + + mkdir($tmppath); + exec("/sbin/fsck_ufs -y /dev/{$complete_path}"); + exec("/sbin/mount /dev/ufs/{$gslice} {$tmppath}"); + copy("/etc/fstab", $fstabpath); + + if (!file_exists($fstabpath)) { + $fstab = << $val) + { + if ($priority == 'tag') + $attributes_data[$attr] = $val; + else + $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr' + } + } + if ($type == "open") + { + $parent[$level -1] = & $current; + if (!is_array($current) or (!in_array($tag, array_keys($current)))) + { + $current[$tag] = $result; + if ($attributes_data) + $current[$tag . '_attr'] = $attributes_data; + $repeated_tag_index[$tag . '_' . $level] = 1; + $current = & $current[$tag]; + } + else + { + if (isset ($current[$tag][0])) + { + $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result; + $repeated_tag_index[$tag . '_' . $level]++; + } + else + { + $current[$tag] = array ( + $current[$tag], + $result + ); + $repeated_tag_index[$tag . '_' . $level] = 2; + if (isset ($current[$tag . '_attr'])) + { + $current[$tag]['0_attr'] = $current[$tag . '_attr']; + unset ($current[$tag . '_attr']); + } + } + $last_item_index = $repeated_tag_index[$tag . '_' . $level] - 1; + $current = & $current[$tag][$last_item_index]; + } + } + elseif ($type == "complete") + { + if (!isset ($current[$tag])) + { + $current[$tag] = $result; + $repeated_tag_index[$tag . '_' . $level] = 1; + if ($priority == 'tag' and $attributes_data) + $current[$tag . '_attr'] = $attributes_data; + } + else + { + if (isset ($current[$tag][0]) and is_array($current[$tag])) + { + $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result; + if ($priority == 'tag' and $get_attributes and $attributes_data) + { + $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data; + } + $repeated_tag_index[$tag . '_' . $level]++; + } + else + { + $current[$tag] = array ( + $current[$tag], + $result + ); + $repeated_tag_index[$tag . '_' . $level] = 1; + if ($priority == 'tag' and $get_attributes) + { + if (isset ($current[$tag . '_attr'])) + { + $current[$tag]['0_attr'] = $current[$tag . '_attr']; + unset ($current[$tag . '_attr']); + } + if ($attributes_data) + { + $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data; + } + } + $repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken + } + } + } + elseif ($type == 'close') + { + $current = & $parent[$level -1]; + } + } + return ($xml_array); +} + +function get_country_name($country_code) { + if ($country_code != "ALL" && strlen($country_code) != 2) + return ""; + + $country_names_xml = "/usr/local/share/mobile-broadband-provider-info/iso_3166-1_list_en.xml"; + $country_names_contents = file_get_contents($country_names_xml); + $country_names = xml2array($country_names_contents); + + if($country_code == "ALL") { + $country_list = array(); + foreach($country_names['ISO_3166-1_List_en']['ISO_3166-1_Entry'] as $country) { + $country_list[] = array("code" => $country['ISO_3166-1_Alpha-2_Code_element'], + "name" => ucwords(strtolower($country['ISO_3166-1_Country_name'])) ); + } + return $country_list; + } + + foreach ($country_names['ISO_3166-1_List_en']['ISO_3166-1_Entry'] as $country) { + if ($country['ISO_3166-1_Alpha-2_Code_element'] == strtoupper($country_code)) { + return ucwords(strtolower($country['ISO_3166-1_Country_name'])); + } + } + return ""; +} + +/* sort by interface only, retain the original order of rules that apply to + the same interface */ +function filter_rules_sort() { + global $config; + + /* mark each rule with the sequence number (to retain the order while sorting) */ + for ($i = 0; isset($config['filter']['rule'][$i]); $i++) + $config['filter']['rule'][$i]['seq'] = $i; + + usort($config['filter']['rule'], "filter_rules_compare"); + + /* strip the sequence numbers again */ + for ($i = 0; isset($config['filter']['rule'][$i]); $i++) + unset($config['filter']['rule'][$i]['seq']); +} +function filter_rules_compare($a, $b) { + if (isset($a['floating']) && isset($b['floating'])) + return $a['seq'] - $b['seq']; + else if (isset($a['floating'])) + return -1; + else if (isset($b['floating'])) + return 1; + else if ($a['interface'] == $b['interface']) + return $a['seq'] - $b['seq']; + else + return compare_interface_friendly_names($a['interface'], $b['interface']); +} + +function generate_ipv6_from_mac($mac) { + $elements = explode(":", $mac); + if(count($elements) <> 6) + return false; + + $i = 0; + $ipv6 = "fe80::"; + foreach($elements as $byte) { + if($i == 0) { + $hexadecimal = substr($byte, 1, 2); + $bitmap = base_convert($hexadecimal, 16, 2); + $bitmap = str_pad($bitmap, 4, "0", STR_PAD_LEFT); + $bitmap = substr($bitmap, 0, 2) ."1". substr($bitmap, 3,4); + $byte = substr($byte, 0, 1) . base_convert($bitmap, 2, 16); + } + $ipv6 .= $byte; + if($i == 1) { + $ipv6 .= ":"; + } + if($i == 3) { + $ipv6 .= ":"; + } + if($i == 2) { + $ipv6 .= "ff:fe"; + } + + $i++; + } + return $ipv6; +} + +/****f* pfsense-utils/load_mac_manufacturer_table + * NAME + * load_mac_manufacturer_table + * INPUTS + * none + * RESULT + * returns associative array with MAC-Manufacturer pairs + ******/ +function load_mac_manufacturer_table() { + /* load MAC-Manufacture data from the file */ + $macs = false; + if (file_exists("/usr/local/share/nmap/nmap-mac-prefixes")) + $macs=file("/usr/local/share/nmap/nmap-mac-prefixes"); + if ($macs){ + foreach ($macs as $line){ + if (preg_match('/([0-9A-Fa-f]{6}) (.*)$/', $line, $matches)){ + /* store values like this $mac_man['000C29']='VMware' */ + $mac_man["$matches[1]"]=$matches[2]; + } + } + return $mac_man; + } else + return -1; + +} + +/****f* pfsense-utils/is_ipaddr_configured + * NAME + * is_ipaddr_configured + * INPUTS + * IP Address to check. + * If ignore_if is a VIP (not carp), vip array index is passed after string _virtualip + * RESULT + * returns true if the IP Address is + * configured and present on this device. +*/ +function is_ipaddr_configured($ipaddr, $ignore_if = "", $check_localip = false, $check_subnets = false) { + global $config; + + $pos = strpos($ignore_if, '_virtualip'); + if ($pos !== false) { + $ignore_vip_id = substr($ignore_if, $pos+10); + $ignore_vip_if = substr($ignore_if, 0, $pos); + } else { + $ignore_vip_id = -1; + $ignore_vip_if = $ignore_if; + } + + $isipv6 = is_ipaddrv6($ipaddr); + + if ($check_subnets) { + $iflist = get_configured_interface_list(); + foreach ($iflist as $if => $ifname) { + if ($ignore_if == $if) + continue; + + if ($isipv6 === true) { + $bitmask = get_interface_subnetv6($if); + $subnet = gen_subnetv6(get_interface_ipv6($if), $bitmask); + } else { + $bitmask = get_interface_subnet($if); + $subnet = gen_subnet(get_interface_ip($if), $bitmask); + } + + if (ip_in_subnet($ipaddr, $subnet . '/' . $bitmask)) + return true; + } + } else { + if ($isipv6 === true) + $interface_list_ips = get_configured_ipv6_addresses(); + else + $interface_list_ips = get_configured_ip_addresses(); + + foreach($interface_list_ips as $if => $ilips) { + if ($ignore_if == $if) + continue; + if (strcasecmp($ipaddr, $ilips) == 0) + return true; + } + } + + $interface_list_vips = get_configured_vips_list(true); + foreach ($interface_list_vips as $id => $vip) { + /* Skip CARP interfaces here since they were already checked above */ + if ($id == $ignore_vip_id || (strstr($ignore_if, '_vip') && $ignore_vip_if == $vip['if'])) + continue; + if (strcasecmp($ipaddr, $vip['ipaddr']) == 0) + return true; + } + + if ($check_localip) { + if (is_array($config['pptpd']) && !empty($config['pptpd']['localip']) && (strcasecmp($ipaddr, $config['pptpd']['localip']) == 0)) + return true; + + if (!is_array($config['l2tp']) && !empty($config['l2tp']['localip']) && (strcasecmp($ipaddr, $config['l2tp']['localip']) == 0)) + return true; + } + + return false; +} + +/****f* pfsense-utils/pfSense_handle_custom_code + * NAME + * pfSense_handle_custom_code + * INPUTS + * directory name to process + * RESULT + * globs the directory and includes the files + */ +function pfSense_handle_custom_code($src_dir) { + // Allow extending of the nat edit page and include custom input validation + if(is_dir("$src_dir")) { + $cf = glob($src_dir . "/*.inc"); + foreach($cf as $nf) { + if($nf == "." || $nf == "..") + continue; + // Include the extra handler + include("$nf"); + } + } +} + +function set_language($lang = 'en_US', $encoding = "UTF-8") { + putenv("LANG={$lang}.{$encoding}"); + setlocale(LC_ALL, "{$lang}.{$encoding}"); + textdomain("pfSense"); + bindtextdomain("pfSense","/usr/local/share/locale"); + bind_textdomain_codeset("pfSense","{$lang}.{$encoding}"); +} + +function get_locale_list() { + $locales = array( + "en_US" => gettext("English"), + "pt_BR" => gettext("Portuguese (Brazil)"), + "tr" => gettext("Turkish"), + ); + asort($locales); + return $locales; +} + +function system_get_language_code() { + global $config, $g_languages; + + // a language code, as per [RFC3066] + $language = $config['system']['language']; + //$code = $g_languages[$language]['code']; + $code = str_replace("_", "-", $language); + + if (empty($code)) + $code = "en-US"; // Set default code. + + return $code; +} + +function system_get_language_codeset() { + global $config, $g_languages; + + $language = $config['system']['language']; + $codeset = $g_languages[$language]['codeset']; + + if (empty($codeset)) + $codeset = "UTF-8"; // Set default codeset. + + return $codeset; +} + +/* Available languages/locales */ +$g_languages = array ( + "sq" => array("codeset" => "UTF-8", "desc" => gettext("Albanian")), + "bg" => array("codeset" => "UTF-8", "desc" => gettext("Bulgarian")), + "zh_CN" => array("codeset" => "UTF-8", "desc" => gettext("Chinese (Simplified)")), + "zh_TW" => array("codeset" => "UTF-8", "desc" => gettext("Chinese (Traditional)")), + "nl" => array("codeset" => "UTF-8", "desc" => gettext("Dutch")), + "da" => array("codeset" => "UTF-8", "desc" => gettext("Danish")), + "en_US" => array("codeset" => "UTF-8", "desc" => gettext("English")), + "fi" => array("codeset" => "UTF-8", "desc" => gettext("Finnish")), + "fr" => array("codeset" => "UTF-8", "desc" => gettext("French")), + "de" => array("codeset" => "UTF-8", "desc" => gettext("German")), + "el" => array("codeset" => "UTF-8", "desc" => gettext("Greek")), + "hu" => array("codeset" => "UTF-8", "desc" => gettext("Hungarian")), + "it" => array("codeset" => "UTF-8", "desc" => gettext("Italian")), + "ja" => array("codeset" => "UTF-8", "desc" => gettext("Japanese")), + "ko" => array("codeset" => "UTF-8", "desc" => gettext("Korean")), + "lv" => array("codeset" => "UTF-8", "desc" => gettext("Latvian")), + "nb" => array("codeset" => "UTF-8", "desc" => gettext("Norwegian (Bokmal)")), + "pl" => array("codeset" => "UTF-8", "desc" => gettext("Polish")), + "pt_BR" => array("codeset" => "ISO-8859-1", "desc" => gettext("Portuguese (Brazil)")), + "pt" => array("codeset" => "UTF-8", "desc" => gettext("Portuguese (Portugal)")), + "ro" => array("codeset" => "UTF-8", "desc" => gettext("Romanian")), + "ru" => array("codeset" => "UTF-8", "desc" => gettext("Russian")), + "sl" => array("codeset" => "UTF-8", "desc" => gettext("Slovenian")), + "tr" => array("codeset" => "UTF-8", "desc" => gettext("Turkish")), + "es" => array("codeset" => "UTF-8", "desc" => gettext("Spanish")), + "sv" => array("codeset" => "UTF-8", "desc" => gettext("Swedish")), + "sk" => array("codeset" => "UTF-8", "desc" => gettext("Slovak")), + "cs" => array("codeset" => "UTF-8", "desc" => gettext("Czech")) +); + +function return_hex_ipv4($ipv4) { + if(!is_ipaddrv4($ipv4)) + return(false); + + /* we need the hex form of the interface IPv4 address */ + $ip4arr = explode(".", $ipv4); + return (sprintf("%02x%02x%02x%02x", $ip4arr[0], $ip4arr[1], $ip4arr[2], $ip4arr[3])); +} + +function convert_ipv6_to_128bit($ipv6) { + if(!is_ipaddrv6($ipv6)) + return(false); + + $ip6arr = array(); + $ip6prefix = Net_IPv6::uncompress($ipv6); + $ip6arr = explode(":", $ip6prefix); + /* binary presentation of the prefix for all 128 bits. */ + $ip6prefixbin = ""; + foreach($ip6arr as $element) { + $ip6prefixbin .= sprintf("%016b", hexdec($element)); + } + return($ip6prefixbin); +} + +function convert_128bit_to_ipv6($ip6bin) { + if(strlen($ip6bin) <> 128) + return(false); + + $ip6arr = array(); + $ip6binarr = array(); + $ip6binarr = str_split($ip6bin, 16); + foreach($ip6binarr as $binpart) + $ip6arr[] = dechex(bindec($binpart)); + $ip6addr = Net_IPv6::compress(implode(":", $ip6arr)); + + return($ip6addr); +} + + +/* Returns the calculated bit length of the prefix delegation from the WAN interface */ +/* DHCP-PD is variable, calculate from the prefix-len on the WAN interface */ +/* 6rd is variable, calculate from 64 - (v6 prefixlen - (32 - v4 prefixlen)) */ +/* 6to4 is 16 bits, e.g. 65535 */ +function calculate_ipv6_delegation_length($if) { + global $config; + + if(!is_array($config['interfaces'][$if])) + return false; + + switch($config['interfaces'][$if]['ipaddrv6']) { + case "6to4": + $pdlen = 16; + break; + case "6rd": + $rd6cfg = $config['interfaces'][$if]; + $rd6plen = explode("/", $rd6cfg['prefix-6rd']); + $pdlen = (64 - ($rd6plen[1] + (32 - $rd6cfg['prefix-6rd-v4plen']))); + break; + case "dhcp6": + $dhcp6cfg = $config['interfaces'][$if]; + $pdlen = $dhcp6cfg['dhcp6-ia-pd-len']; + break; + default: + $pdlen = 0; + break; + } + return($pdlen); +} + +function huawei_rssi_to_string($rssi) { + $dbm = array(); + $i = 0; + $dbstart = -113; + while($i < 32) { + $dbm[$i] = $dbstart + ($i * 2); + $i++; + } + $percent = round(($rssi / 31) * 100); + $string = "rssi:{$rssi} level:{$dbm[$rssi]}dBm percent:{$percent}%"; + return $string; +} + +function huawei_mode_to_string($mode, $submode) { + $modes[0] = "None"; + $modes[1] = "AMPS"; + $modes[2] = "CDMA"; + $modes[3] = "GSM/GPRS"; + $modes[4] = "HDR"; + $modes[5] = "WCDMA"; + $modes[6] = "GPS"; + + $submodes[0] = "No Service"; + $submodes[1] = "GSM"; + $submodes[2] = "GPRS"; + $submodes[3] = "EDGE"; + $submodes[4] = "WCDMA"; + $submodes[5] = "HSDPA"; + $submodes[6] = "HSUPA"; + $submodes[7] = "HSDPA+HSUPA"; + $submodes[8] = "TD-SCDMA"; + $submodes[9] = "HSPA+"; + $string = "{$modes[$mode]}, {$submodes[$submode]} Mode"; + return $string; +} + +function huawei_service_to_string($state) { + $modes[0] = "No"; + $modes[1] = "Restricted"; + $modes[2] = "Valid"; + $modes[3] = "Restricted Regional"; + $modes[4] = "Powersaving"; + $string = "{$modes[$state]} Service"; + return $string; +} + +function huawei_simstate_to_string($state) { + $modes[0] = "Invalid SIM/locked"; + $modes[1] = "Valid SIM"; + $modes[2] = "Invalid SIM CS"; + $modes[3] = "Invalid SIM PS"; + $modes[4] = "Invalid SIM CS/PS"; + $modes[255] = "Missing SIM"; + $string = "{$modes[$state]} State"; + return $string; +} + +function zte_rssi_to_string($rssi) { + return huawei_rssi_to_string($rssi); +} + +function zte_mode_to_string($mode, $submode) { + $modes[0] = "No Service"; + $modes[1] = "Limited Service"; + $modes[2] = "GPRS"; + $modes[3] = "GSM"; + $modes[4] = "UMTS"; + $modes[5] = "EDGE"; + $modes[6] = "HSDPA"; + + $submodes[0] = "CS_ONLY"; + $submodes[1] = "PS_ONLY"; + $submodes[2] = "CS_PS"; + $submodes[3] = "CAMPED"; + $string = "{$modes[$mode]}, {$submodes[$submode]} Mode"; + return $string; +} + +function zte_service_to_string($state) { + $modes[0] = "Initializing"; + $modes[1] = "Network Lock error"; + $modes[2] = "Network Locked"; + $modes[3] = "Unlocked or correct MCC/MNC"; + $string = "{$modes[$state]} Service"; + return $string; +} + +function zte_simstate_to_string($state) { + $modes[0] = "No action"; + $modes[1] = "Network lock"; + $modes[2] = "(U)SIM card lock"; + $modes[3] = "Network Lock and (U)SIM card Lock"; + $string = "{$modes[$state]} State"; + return $string; +} + +function get_configured_pppoe_server_interfaces() { + global $config; + $iflist = array(); + if (is_array($config['pppoes']['pppoe'])) { + foreach($config['pppoes']['pppoe'] as $pppoe) { + if ($pppoe['mode'] == "server") { + $int = "poes". $pppoe['pppoeid']; + $iflist[$int] = strtoupper($int); + } + } + } + return $iflist; +} + +function get_pppoes_child_interfaces($ifpattern) { + $if_arr = array(); + if($ifpattern == "") + return; + + exec("ifconfig", $out, $ret); + foreach($out as $line) { + if(preg_match("/^({$ifpattern}[0-9]+):/i", $line, $match)) { + $if_arr[] = $match[1]; + } + } + return $if_arr; + +} + +/****f* pfsense-utils/pkg_call_plugins + * NAME + * pkg_call_plugins + * INPUTS + * $plugin_type value used to search in package configuration if the plugin is used, also used to create the function name + * $plugin_params parameters to pass to the plugin function for passing multiple parameters a array can be used. + * RESULT + * returns associative array results from the plugin calls for each package + * NOTES + * This generic function can be used to notify or retrieve results from functions that are defined in packages. + ******/ +function pkg_call_plugins($plugin_type, $plugin_params) { + global $g, $config; + $results = array(); + if (!is_array($config['installedpackages']['package'])) + return $results; + foreach ($config['installedpackages']['package'] as $package) { + if(!file_exists("/usr/local/pkg/" . $package['configurationfile'])) + continue; + $pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $package['configurationfile'], 'packagegui'); + $pkgname = substr(reverse_strrchr($package['configurationfile'], "."),0,-1); + if (is_array($pkg_config['plugins']['item'])) + foreach ($pkg_config['plugins']['item'] as $plugin) { + if ($plugin['type'] == $plugin_type) { + if (file_exists($pkg_config['include_file'])) + require_once($pkg_config['include_file']); + else + continue; + $plugin_function = $pkgname . '_'. $plugin_type; + $results[$pkgname] = @eval($plugin_function($plugin_params)); + } + } + } + return $results; +} + +/* Function to find and return the active XML RPC base URL to avoid code duplication */ +function get_active_xml_rpc_base_url() { + global $config, $g; + /* If the user has activated the option to enable an alternate xmlrpcbaseurl, and it's not empty, then use it */ + if (isset($config['system']['altpkgrepo']['enable']) && !empty($config['system']['altpkgrepo']['xmlrpcbaseurl'])) { + return $config['system']['altpkgrepo']['xmlrpcbaseurl']; + } else { + return $g['xmlrpcbaseurl']; + } +} + +?> diff --git a/etc/inc/pkg-utils.inc b/etc/inc/pkg-utils.inc new file mode 100644 index 000000000..923d1306d --- /dev/null +++ b/etc/inc/pkg-utils.inc @@ -0,0 +1,1545 @@ +>/tmp/pbi_delete_errors.txt"); +} + +/****f* pkg-utils/is_package_installed + * NAME + * is_package_installed - Check whether a package is installed. + * INPUTS + * $packagename - name of the package to check + * RESULT + * boolean - true if the package is installed, false otherwise + * NOTES + * This function is deprecated - get_pkg_id() can already check for installation. + ******/ +function is_package_installed($packagename) { + $pkg = get_pkg_id($packagename); + if($pkg == -1) + return false; + return true; +} + +/****f* pkg-utils/get_pkg_id + * NAME + * get_pkg_id - Find a package's numeric ID. + * INPUTS + * $pkg_name - name of the package to check + * RESULT + * integer - -1 if package is not found, >-1 otherwise + ******/ +function get_pkg_id($pkg_name) { + global $config; + + if (is_array($config['installedpackages']['package'])) { + foreach($config['installedpackages']['package'] as $idx => $pkg) { + if($pkg['name'] == $pkg_name) + return $idx; + } + } + return -1; +} + +/****f* pkg-utils/get_pkg_internal_name + * NAME + * get_pkg_internal_name - Find a package's internal name (e.g. squid3 internal name is squid) + * INPUTS + * $package - array of package data from config + * RESULT + * string - internal name (if defined) or default to package name + ******/ +function get_pkg_internal_name($package) { + if (isset($package['internal_name']) && ($package['internal_name'] != "")) { + /* e.g. name is Ipguard-dev, internal name is ipguard */ + $pkg_internal_name = $package['internal_name']; + } else { + $pkg_internal_name = $package['name']; + } + return $pkg_internal_name; +} + +/****f* pkg-utils/get_pkg_info + * NAME + * get_pkg_info - Retrieve package information from package server. + * INPUTS + * $pkgs - 'all' to retrieve all packages, an array containing package names otherwise + * $info - 'all' to retrieve all information, an array containing keys otherwise + * RESULT + * $raw_versions - Array containing retrieved information, indexed by package name. + ******/ +function get_pkg_info($pkgs = 'all', $info = 'all') { + global $g; + + $freebsd_machine = php_uname("m"); + $params = array( + "pkg" => $pkgs, + "info" => $info, + "freebsd_version" => get_freebsd_version(), + "freebsd_machine" => $freebsd_machine + ); + $resp = call_pfsense_method('pfsense.get_pkgs', $params, 10); + return $resp ? $resp : array(); +} + +function get_pkg_sizes($pkgs = 'all') { + global $config, $g; + + $freebsd_machine = php_uname("m"); + $params = array( + "pkg" => $pkgs, + "freebsd_version" => get_freebsd_version(), + "freebsd_machine" => $freebsd_machine + ); + $msg = new XML_RPC_Message('pfsense.get_pkg_sizes', array(php_value_to_xmlrpc($params))); + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + $cli = new XML_RPC_Client($g['xmlrpcpath'], $xmlrpc_base_url); + $resp = $cli->send($msg, 10); + if(!is_object($resp)) + log_error("Could not get response from XMLRPC server!"); + else if (!$resp->faultCode()) { + $raw_versions = $resp->value(); + return xmlrpc_value_to_php($raw_versions); + } + + return array(); +} + +/* + * resync_all_package_configs() Force packages to setup their configuration and rc.d files. + * This function may also print output to the terminal indicating progress. + */ +function resync_all_package_configs($show_message = false) { + global $config, $pkg_interface, $g; + + log_error(gettext("Resyncing configuration for all packages.")); + + if (!is_array($config['installedpackages']['package'])) + return; + + if($show_message == true) + echo "Syncing packages:"; + + conf_mount_rw(); + + foreach($config['installedpackages']['package'] as $idx => $package) { + if (empty($package['name'])) + continue; + if($show_message == true) + echo " " . $package['name']; + get_pkg_depends($package['name'], "all"); + if($g['booting'] != true) + stop_service(get_pkg_internal_name($package)); + sync_package($idx, true, true); + if($pkg_interface == "console") + echo "\n" . gettext("Syncing packages:"); + } + + if($show_message == true) + echo " done.\n"; + + @unlink("/conf/needs_package_sync"); + conf_mount_ro(); +} + +/* + * is_freebsd_pkg_installed() - Check /var/db/pkg to determine whether or not a FreeBSD + * package is installed. + */ +function is_freebsd_pkg_installed($pkg) { + if(!$pkg) + return; + $output = ""; + $_gb = exec("/usr/local/sbin/pbi_info " . escapeshellarg($pkg) . ' 2>/dev/null', $output, $retval); + + return (intval($retval) == 0); +} + +/* + * get_pkg_depends($pkg_name, $filetype = ".xml", $format = "files", return_nosync = 1): Return a package's dependencies. + * + * $filetype = "all" || ".xml", ".tgz", etc. + * $format = "files" (full filenames) || "names" (stripped / parsed depend names) + * $return_nosync = 1 (return depends that have nosync set) | 0 (ignore packages with nosync) + * + */ +function get_pkg_depends($pkg_name, $filetype = ".xml", $format = "files", $return_nosync = 1) { + global $config; + + $pkg_id = get_pkg_id($pkg_name); + if($pkg_id == -1) + return -1; // This package doesn't really exist - exit the function. + else if (!isset($config['installedpackages']['package'][$pkg_id])) + return; // No package belongs to the pkg_id passed to this function. + + $package =& $config['installedpackages']['package'][$pkg_id]; + if(!file_exists("/usr/local/pkg/" . $package['configurationfile'])) { + log_error(sprintf(gettext('The %1$s package is missing required dependencies and must be reinstalled. %2$s'), $package['name'], $package['configurationfile'])); + uninstall_package($package['name']); + if (install_package($package['name']) < 0) { + log_error("Failed reinstalling package {$package['name']}."); + return false; + } + } + $pkg_xml = parse_xml_config_pkg("/usr/local/pkg/" . $package['configurationfile'], "packagegui"); + if (!empty($pkg_xml['additional_files_needed'])) { + foreach($pkg_xml['additional_files_needed'] as $item) { + if ($return_nosync == 0 && isset($item['nosync'])) + continue; // Do not return depends with nosync set if not required. + $depend_file = substr(strrchr($item['item']['0'], '/'),1); // Strip URLs down to filenames. + $depend_name = substr(substr($depend_file,0,strpos($depend_file,".")+1),0,-1); // Strip filename down to dependency name. + if (($filetype != "all") && (!preg_match("/{$filetype}/i", $depend_file))) + if (($filetype != "all") && (strtolower(substr($depend_file, -strlen($filetype))) != strtolower($filetype))) + continue; + if ($item['prefix'] != "") + $prefix = $item['prefix']; + else + $prefix = "/usr/local/pkg/"; + // Ensure that the prefix exists to avoid installation errors. + if(!is_dir($prefix)) + exec("/bin/mkdir -p {$prefix}"); + if(!file_exists($prefix . $depend_file)) + log_error(sprintf(gettext("The %s package is missing required dependencies and must be reinstalled."), $package['name'])); + switch ($format) { + case "files": + $depends[] = $prefix . $depend_file; + break; + case "names": + switch ($filetype) { + case "all": + if(preg_match("/\.xml/i", $depend_file)) { + $depend_xml = parse_xml_config_pkg("/usr/local/pkg/{$depend_file}", "packagegui"); + if (!empty($depend_xml)) + $depends[] = $depend_xml['name']; + } else + $depends[] = $depend_name; // If this dependency isn't package XML, use the stripped filename. + break; + case ".xml": + $depend_xml = parse_xml_config_pkg("/usr/local/pkg/" . $depend_file, "packagegui"); + if (!empty($depend_xml)) + $depends[] = $depend_xml['name']; + break; + default: + $depends[] = $depend_name; // If we aren't looking for XML, use the stripped filename (it's all we have). + break; + } + } + } + return $depends; + } +} + +function uninstall_package($pkg_name) { + global $config, $static_output; + global $builder_package_install; + + $id = get_pkg_id($pkg_name); + if ($id >= 0) { + stop_service(get_pkg_internal_name($config['installedpackages']['package'][$id])); + $pkg_depends =& $config['installedpackages']['package'][$id]['depends_on_package_pbi']; + $static_output .= "Removing package...\n"; + update_output_window($static_output); + if (is_array($pkg_depends)) { + foreach ($pkg_depends as $pkg_depend) + delete_package($pkg_depend); + } else { + // The packages (1 or more) are all in one long string. + // We need to pass them 1 at a time to delete_package. + // Compress any multiple whitespace (sp, tab, cr, lf...) into a single space char. + $pkg_dep_str = preg_replace("'\s+'", ' ', $pkg_depends); + // Get rid of any leading or trailing space. + $pkg_dep_str = trim($pkg_dep_str); + // Now we have a space-separated string. Make it into an array and process it. + $pkg_dep_array = explode(" ", $pkg_dep_str); + foreach ($pkg_dep_array as $pkg_depend) { + delete_package($pkg_depend); + } + } + } + delete_package_xml($pkg_name); + + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); +} + +function force_remove_package($pkg_name) { + delete_package_xml($pkg_name); +} + +/* + * sync_package($pkg_name, $sync_depends = true, $show_message = false) Force a package to setup its configuration and rc.d files. + */ +function sync_package($pkg_name, $sync_depends = true, $show_message = false) { + global $config, $config_parsed; + global $builder_package_install; + + // If this code is being called by pfspkg_installer + // which the builder system uses then return (ignore). + if($builder_package_install) + return; + + if(empty($config['installedpackages']['package'])) + return; + if(!is_numeric($pkg_name)) { + $pkg_id = get_pkg_id($pkg_name); + if($pkg_id == -1) + return -1; // This package doesn't really exist - exit the function. + } else { + $pkg_id = $pkg_name; + if(empty($config['installedpackages']['package'][$pkg_id])) + return; // No package belongs to the pkg_id passed to this function. + } + if (is_array($config['installedpackages']['package'][$pkg_id])) + $package =& $config['installedpackages']['package'][$pkg_id]; + else + return; /* empty package tag */ + if(!file_exists("/usr/local/pkg/" . $package['configurationfile'])) { + log_error(sprintf(gettext("The %s package is missing its configuration file and must be reinstalled."), $package['name'])); + force_remove_package($package['name']); + return -1; + } + $pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $package['configurationfile'], "packagegui"); + if(isset($pkg_config['nosync'])) + return; + /* Bring in package include files */ + if (!empty($pkg_config['include_file'])) { + $include_file = $pkg_config['include_file']; + if (file_exists($include_file)) + require_once($include_file); + else { + /* XXX: What the heck is this?! */ + log_error("Reinstalling package {$package['name']} because its include file({$include_file}) is missing!"); + uninstall_package($package['name']); + if (install_package($package['name']) < 0) { + log_error("Reinstalling package {$package['name']} failed. Take appropriate measures!!!"); + return -1; + } + } + } + + if(!empty($pkg_config['custom_php_global_functions'])) + eval($pkg_config['custom_php_global_functions']); + if(!empty($pkg_config['custom_php_resync_config_command'])) + eval($pkg_config['custom_php_resync_config_command']); + if($sync_depends == true) { + $depends = get_pkg_depends($pkg_name, ".xml", "files", 1); // Call dependency handler and do a little more error checking. + if(is_array($depends)) { + foreach($depends as $item) { + if(!file_exists($item)) { + require_once("notices.inc"); + file_notice($package['name'], sprintf(gettext("The %s package is missing required dependencies and must be reinstalled."), $package['name']), "Packages", "/pkg_mgr_install.php?mode=reinstallpkg&pkg={$package['name']}", 1); + log_error("Could not find {$item}. Reinstalling package."); + uninstall_package($pkg_name); + if (install_package($pkg_name) < 0) { + log_error("Reinstalling package {$package['name']} failed. Take appropriate measures!!!"); + return -1; + } + } else { + $item_config = parse_xml_config_pkg($item, "packagegui"); + if (empty($item_config)) + continue; + if(isset($item_config['nosync'])) + continue; + if (!empty($item_config['include_file'])) { + if (file_exists($item_config['include_file'])) + require_once($item_config['include_file']); + else { + log_error("Not calling package sync code for dependency {$item_config['name']} of {$package['name']} because some include files are missing."); + continue; + } + } + if($item_config['custom_php_global_functions'] <> "") + eval($item_config['custom_php_global_functions']); + if($item_config['custom_php_resync_config_command'] <> "") + eval($item_config['custom_php_resync_config_command']); + if($show_message == true) + print " " . $item_config['name']; + } + } + } + } +} + +/* + * pkg_fetch_recursive: Download and install a FreeBSD PBI package. This function provides output to + * a progress bar and output window. + */ +function pkg_fetch_recursive($pkgname, $filename, $dependlevel = 0, $base_url = "") { + global $static_output, $g, $config; + + // Clean up incoming filenames + $filename = str_replace(" ", " ", $filename); + $filename = str_replace("\n", " ", $filename); + $filename = str_replace(" ", " ", $filename); + + $pkgs = explode(" ", $filename); + foreach($pkgs as $filename) { + $filename = trim($filename); + if ($g['platform'] == "nanobsd") { + $pkgtmpdir = "/usr/bin/env PKG_TMPDIR=/root/ "; + $pkgstagingdir = "/root/tmp"; + if (!is_dir($pkgstagingdir)) + mkdir($pkgstagingdir); + $pkgstaging = "-o {$pkgstagingdir}/instmp.XXXXXX"; + $fetchdir = $pkgstagingdir; + } else { + $fetchdir = $g['tmp_path']; + } + + /* FreeBSD has no PBI's hosted, so fall back to our own URL for now. (Maybe fail to PC-BSD?) */ + $rel = get_freebsd_version(); + $priv_url = "https://files.pfsense.org/packages/{$rel}/All/"; + if (empty($base_url)) + $base_url = $priv_url; + if (substr($base_url, -1) == "/") + $base_url = substr($base_url, 0, -1); + $fetchto = "{$fetchdir}/apkg_{$filename}"; + $static_output .= "\n" . str_repeat(" ", $dependlevel * 2 + 1) . "Downloading {$base_url}/{$filename} ... "; + if (download_file_with_progress_bar("{$base_url}/{$filename}", $fetchto) !== true) { + if ($base_url != $priv_url && download_file_with_progress_bar("{$priv_url}/{$filename}", $fetchto) !== true) { + $static_output .= " could not download from there or {$priv_url}/{$filename}.\n"; + update_output_window($static_output); + return false; + } else if ($base_url == $priv_url) { + $static_output .= " failed to download.\n"; + update_output_window($static_output); + return false; + } else { + $static_output .= " [{$osname} repository]\n"; + update_output_window($static_output); + } + } + $static_output .= " (extracting)\n"; + update_output_window($static_output); + + $pkgaddout = ""; + + $no_checksig = ""; + if (isset($config['system']['pkg_nochecksig'])) + $no_checksig = "--no-checksig"; + + $result = exec("/usr/local/sbin/pbi_add " . $pkgstaging . " -f -v {$no_checksig} " . escapeshellarg($fetchto) . " 2>&1", $pkgaddout, $rc); + pkg_debug($pkgname . " " . print_r($pkgaddout, true) . "\n"); + if ($rc == 0) { + $pbi_name = preg_replace('/\.pbi$/','',$filename); + + $gb = exec("/usr/local/sbin/pbi_info {$pbi_name} | /usr/bin/awk '/Prefix/ {print $2}'", $pbi_prefix); + $pbi_prefix = $pbi_prefix[0]; + + $links = get_pbi_binaries(escapeshellarg($pbi_name)); + foreach($links as $link) { + @unlink("/usr/local/{$link['link_name']}"); + @symlink("{$link['target']}","/usr/local/{$link['link_name']}"); + } + + $extra_links = array( + array("target" => "bin", "link_name" => "sbin"), + array("target" => "local/lib", "link_name" => "lib"), + array("target" => "local/libexec", "link_name" => "libexec"), + array("target" => "local/share", "link_name" => "share"), + array("target" => "local/www", "link_name" => "www"), + array("target" => "local/etc", "link_name" => "etc") + ); + + foreach ($extra_links as $link) { + if (!file_exists($pbi_prefix . "/" . $link['target'])) + continue; + @rmdir("{$pbi_prefix}/{$link['link_name']}"); + unlink_if_exists("{$pbi_prefix}/{$link['link_name']}"); + @symlink("{$pbi_prefix}/{$link['target']}", "{$pbi_prefix}/{$link['link_name']}"); + } + pkg_debug("pbi_add successfully completed.\n"); + } else { + if (is_array($pkgaddout)) + foreach ($pkgaddout as $line) + $static_output .= " " . $line .= "\n"; + + update_output_window($static_output); + pkg_debug("pbi_add failed.\n"); + return false; + } + } + return true; +} + +function get_pbi_binaries($pbi) { + $result = array(); + + if (empty($pbi)) + return $result; + + $gb = exec("/usr/local/sbin/pbi_info {$pbi} | /usr/bin/awk '/Prefix/ {print $2}'", $pbi_prefix); + $pbi_prefix = $pbi_prefix[0]; + + if (empty($pbi_prefix)) + return $result; + + foreach(array('bin', 'sbin') as $dir) { + if(!is_dir("{$pbi_prefix}/{$dir}")) + continue; + + $files = glob("{$pbi_prefix}/{$dir}/*.pbiopt"); + foreach($files as $f) { + $pbiopts = file($f, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + foreach($pbiopts as $pbiopt) { + if (!preg_match('/^TARGET:\s+(.*)$/', $pbiopt, $matches)) + continue; + + $result[] = array( + 'target' => preg_replace('/\.pbiopt$/', '', $f), + 'link_name' => $matches[1]); + } + } + } + + return $result; +} + + +function install_package($package, $pkg_info = "", $force_install = false) { + global $g, $config, $static_output, $pkg_interface; + + /* safe side. Write config below will send to ro again. */ + conf_mount_rw(); + + if($pkg_interface == "console") + echo "\n"; + /* fetch package information if needed */ + if(empty($pkg_info) or !is_array($pkg_info[$package])) { + $pkg_info = get_pkg_info(array($package)); + $pkg_info = $pkg_info[$package]; // We're only dealing with one package, so we can strip away the extra array. + if (empty($pkg_info)) { + conf_mount_ro(); + return -1; + } + } + if (!$force_install) { + $compatible = true; + $version = rtrim(file_get_contents("/etc/version")); + + if (isset($pkg_info['required_version'])) + $compatible = (pfs_version_compare("", $version, $pkg_info['required_version']) >= 0); + if (isset($pkg_info['maximum_version'])) + $compatible = $compatible && (pfs_version_compare("", $version, $pkg_info['maximum_version']) <= 0); + + if (!$compatible) { + log_error(sprintf(gettext('Package %s is not supported on this version.'), $pkg_info['name'])); + $static_output .= sprintf(gettext("Package %s is not supported on this version."), $pkg_info['name']); + update_status($static_output); + + conf_mount_ro(); + return -1; + } + } + pkg_debug(gettext("Beginning package installation.") . "\n"); + log_error(sprintf(gettext('Beginning package installation for %s .'), $pkg_info['name'])); + $static_output .= sprintf(gettext("Beginning package installation for %s ."), $pkg_info['name']); + update_status($static_output); + + /* fetch the package's configuration file */ + pkg_fetch_config_file($package, $pkg_info); + + /* add package information to config.xml */ + $pkgid = get_pkg_id($pkg_info['name']); + $static_output .= gettext("Saving updated package information...") . " "; + update_output_window($static_output); + if($pkgid == -1) { + $config['installedpackages']['package'][] = $pkg_info; + $changedesc = sprintf(gettext("Installed %s package."),$pkg_info['name']); + $to_output = gettext("done.") . "\n"; + } else { + $config['installedpackages']['package'][$pkgid] = $pkg_info; + $changedesc = sprintf(gettext("Overwrote previous installation of %s."), $pkg_info['name']); + $to_output = gettext("overwrite!") . "\n"; + } + if(file_exists('/conf/needs_package_sync')) + @unlink('/conf/needs_package_sync'); + conf_mount_ro(); + write_config("Intermediate config write during package install for {$pkg_info['name']}."); + $static_output .= $to_output; + update_output_window($static_output); + /* install other package components */ + if (!install_package_xml($package)) { + uninstall_package($package); + write_config($changedesc); + $static_output .= gettext("Failed to install package.") . "\n"; + update_output_window($static_output); + return -1; + } else { + $static_output .= gettext("Writing configuration... "); + update_output_window($static_output); + write_config($changedesc); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + if($pkg_info['after_install_info']) + update_output_window($pkg_info['after_install_info']); + } +} + +function get_after_install_info($package) { + global $pkg_info; + /* fetch package information if needed */ + if(!$pkg_info or !is_array($pkg_info[$package])) { + $pkg_info = get_pkg_info(array($package)); + $pkg_info = $pkg_info[$package]; // We're only dealing with one package, so we can strip away the extra array. + } + if($pkg_info['after_install_info']) + return $pkg_info['after_install_info']; +} + +function eval_once($toeval) { + global $evaled; + if(!$evaled) $evaled = array(); + $evalmd5 = md5($toeval); + if(!in_array($evalmd5, $evaled)) { + @eval($toeval); + $evaled[] = $evalmd5; + } + return; +} + +function install_package_xml($pkg) { + global $g, $config, $static_output, $pkg_interface, $config_parsed; + + if(($pkgid = get_pkg_id($pkg)) == -1) { + $static_output .= sprintf(gettext("The %s package is not installed.%sInstallation aborted."), $pkg, "\n\n"); + update_output_window($static_output); + if($pkg_interface <> "console") { + echo "\n"; + echo "\n"; + } + sleep(1); + return false; + } else + $pkg_info = $config['installedpackages']['package'][$pkgid]; + + /* pkg_add the package and its dependencies */ + if($pkg_info['depends_on_package_base_url'] != "") { + if($pkg_interface == "console") + echo "\n"; + update_status(gettext("Installing") . " " . $pkg_info['name'] . " " . gettext("and its dependencies.")); + $static_output .= gettext("Downloading") . " " . $pkg_info['name'] . " " . gettext("and its dependencies... "); + $static_orig = $static_output; + $static_output .= "\n"; + update_output_window($static_output); + foreach((array) $pkg_info['depends_on_package_pbi'] as $pkgdep) { + $pkg_name = substr(reverse_strrchr($pkgdep, "."), 0, -1); + $static_output = $static_orig . "\nChecking for package installation... "; + update_output_window($static_output); + if (!is_freebsd_pkg_installed($pkg_name)) { + if (!pkg_fetch_recursive($pkg_name, $pkgdep, 0, $pkg_info['depends_on_package_base_url'])) { + $static_output .= "of {$pkg_name} failed!\n\nInstallation aborted."; + update_output_window($static_output); + pkg_debug(gettext("Package WAS NOT installed properly.") . "\n"); + if($pkg_interface <> "console") { + echo "\n"; + echo "\n"; + } + sleep(1); + return false; + } + } + } + } + + $configfile = substr(strrchr($pkg_info['config_file'], '/'), 1); + if(file_exists("/usr/local/pkg/" . $configfile)) { + $static_output .= gettext("Loading package configuration... "); + update_output_window($static_output); + $pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $configfile, "packagegui"); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + $static_output .= gettext("Configuring package components...\n"); + if (!empty($pkg_config['filter_rules_needed'])) + $config['installedpackages']['package'][$pkgid]['filter_rule_function'] = $pkg_config['filter_rules_needed']; + update_output_window($static_output); + /* modify system files */ + if(is_array($pkg_config['modify_system']) && is_array($pkg_config['modify_system']['item'])) { + $static_output .= gettext("System files... "); + update_output_window($static_output); + foreach($pkg_config['modify_system']['item'] as $ms) { + if($ms['textneeded']) { + add_text_to_file($ms['modifyfilename'], $ms['textneeded']); + } + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + + pkg_fetch_additional_files($pkg, $pkg_info); + + /* if a require exists, include it. this will + * show us where an error exists in a package + * instead of making us blindly guess + */ + $missing_include = false; + if($pkg_config['include_file'] <> "") { + $static_output .= gettext("Loading package instructions...") . "\n"; + update_output_window($static_output); + pkg_debug("require_once('{$pkg_config['include_file']}')\n"); + if (file_exists($pkg_config['include_file'])) + require_once($pkg_config['include_file']); + else { + $missing_include = true; + $static_output .= "Include " . basename($pkg_config['include_file']) . " is missing!\n"; + update_output_window($static_output); + /* XXX: Should undo the steps before this?! */ + return false; + } + } + + /* custom commands */ + $static_output .= gettext("Custom commands...") . "\n"; + update_output_window($static_output); + if ($missing_include == false) { + if($pkg_config['custom_php_global_functions'] <> "") { + $static_output .= gettext("Executing custom_php_global_functions()..."); + update_output_window($static_output); + eval_once($pkg_config['custom_php_global_functions']); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + if($pkg_config['custom_php_install_command']) { + $static_output .= gettext("Executing custom_php_install_command()..."); + update_output_window($static_output); + /* XXX: create symlinks for conf files into the PBI directories. + * change packages to store configs at /usr/pbi/pkg/etc and remove this + */ + eval_once($pkg_config['custom_php_install_command']); + // Note: pkg may be mixed-case, e.g. "squidGuard" but the PBI names are lowercase. + // e.g. "squidguard-1.4_4-i386" so feed lowercase to pbi_info below. + // Also add the "-" so that examples like "squid-" do not match "squidguard-". + $pkg_name_for_pbi_match = strtolower($pkg) . "-"; + exec("/usr/local/sbin/pbi_info | grep '^{$pkg_name_for_pbi_match}' | xargs /usr/local/sbin/pbi_info | awk '/Prefix/ {print $2}'",$pbidirarray); + $pbidir0 = $pbidirarray[0]; + exec("find /usr/local/etc/ -name *.conf | grep " . escapeshellarg($pkg),$files); + foreach($files as $f) { + $pbiconf = str_replace('/usr/local',$pbidir0,$f); + if(is_file($pbiconf) || is_link($pbiconf)) { + unlink($pbiconf); + } + if(is_dir(dirname($pbiconf))) { + symlink($f,$pbiconf); + } else { + log_error("The dir for {$pbiconf} does not exist. Cannot add symlink to {$f}."); + } + } + eval_once($pkg_config['custom_php_install_command']); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + if($pkg_config['custom_php_resync_config_command'] <> "") { + $static_output .= gettext("Executing custom_php_resync_config_command()..."); + update_output_window($static_output); + eval_once($pkg_config['custom_php_resync_config_command']); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + } + /* sidebar items */ + if(is_array($pkg_config['menu'])) { + $static_output .= gettext("Menu items... "); + update_output_window($static_output); + foreach($pkg_config['menu'] as $menu) { + if(is_array($config['installedpackages']['menu'])) { + foreach($config['installedpackages']['menu'] as $amenu) + if($amenu['name'] == $menu['name']) + continue 2; + } else + $config['installedpackages']['menu'] = array(); + $config['installedpackages']['menu'][] = $menu; + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* integrated tab items */ + if(is_array($pkg_config['tabs']['tab'])) { + $static_output .= gettext("Integrated Tab items... "); + update_output_window($static_output); + foreach($pkg_config['tabs']['tab'] as $tab) { + if(is_array($config['installedpackages']['tab'])) { + foreach($config['installedpackages']['tab'] as $atab) + if($atab['name'] == $tab['name']) + continue 2; + } else + $config['installedpackages']['tab'] = array(); + $config['installedpackages']['tab'][] = $tab; + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* services */ + if(is_array($pkg_config['service'])) { + $static_output .= gettext("Services... "); + update_output_window($static_output); + foreach($pkg_config['service'] as $service) { + if(is_array($config['installedpackages']['service'])) { + foreach($config['installedpackages']['service'] as $aservice) + if($aservice['name'] == $service['name']) + continue 2; + } else + $config['installedpackages']['service'] = array(); + $config['installedpackages']['service'][] = $service; + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + } else { + $static_output .= gettext("Loading package configuration... failed!") . "\n\n" . gettext("Installation aborted."); + update_output_window($static_output); + pkg_debug(gettext("Unable to load package configuration. Installation aborted.") ."\n"); + if($pkg_interface <> "console") { + echo "\n"; + echo "\n"; + } + sleep(1); + return false; + } + + /* set up package logging streams */ + if($pkg_info['logging']) { + mwexec("/usr/sbin/fifolog_create -s 32768 {$g['varlog_path']}/{$pkg_info['logging']['logfilename']}"); + @chmod($g['varlog_path'] . '/' . $pkg_info['logging']['logfilename'], 0600); + add_text_to_file("/etc/syslog.conf", $pkg_info['logging']['facilityname'] . "\t\t\t\t" . $pkg_info['logging']['logfilename']); + pkg_debug("Adding text to file /etc/syslog.conf\n"); + system_syslogd_start(); + } + + return true; +} + +function does_package_depend($pkg) { + // Should not happen, but just in case. + if(!$pkg) + return; + $pkg_var_db_dir = glob("/var/db/pkg/{$pkg}*"); + // If this package has dependency then return true + foreach($pkg_var_db_dir as $pvdd) { + if (file_exists("{$vardb}/{$pvdd}/+REQUIRED_BY") && count(file("{$vardb}/{$pvdd}/+REQUIRED_BY")) > 0) + return true; + } + // Did not find a record of dependencies, so return false. + return false; +} + +function delete_package($pkg) { + global $config, $g, $static_output, $vardb; + + if(!$pkg) + return; + + // Note: $pkg has the full PBI package name followed by ".pbi". Strip off ".pbi". + $pkg = substr(reverse_strrchr($pkg, "."), 0, -1); + + if($pkg) + $static_output .= sprintf(gettext("Starting package deletion for %s..."),$pkg); + update_output_window($static_output); + + remove_freebsd_package($pkg); + $static_output .= "done.\n"; + update_output_window($static_output); + + /* Rescan directories for what has been left and avoid fooling other programs. */ + mwexec("/sbin/ldconfig"); + + return; +} + +function delete_package_xml($pkg) { + global $g, $config, $static_output, $pkg_interface; + + conf_mount_rw(); + + $pkgid = get_pkg_id($pkg); + if ($pkgid == -1) { + $static_output .= sprintf(gettext("The %s package is not installed.%sDeletion aborted."), $pkg, "\n\n"); + update_output_window($static_output); + if($pkg_interface <> "console") { + echo "\n"; + echo "\n"; + } + ob_flush(); + sleep(1); + conf_mount_ro(); + return; + } + pkg_debug(sprintf(gettext("Removing %s package... "),$pkg)); + $static_output .= sprintf(gettext("Removing %s components..."),$pkg) . "\n"; + update_output_window($static_output); + /* parse package configuration */ + $packages = &$config['installedpackages']['package']; + $tabs =& $config['installedpackages']['tab']; + $menus =& $config['installedpackages']['menu']; + $services = &$config['installedpackages']['service']; + $pkg_info =& $packages[$pkgid]; + if(file_exists("/usr/local/pkg/" . $pkg_info['configurationfile'])) { + $pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $packages[$pkgid]['configurationfile'], "packagegui"); + /* remove tab items */ + if(is_array($pkg_config['tabs'])) { + $static_output .= gettext("Tabs items... "); + update_output_window($static_output); + if(is_array($pkg_config['tabs']['tab']) && is_array($tabs)) { + foreach($pkg_config['tabs']['tab'] as $tab) { + foreach($tabs as $key => $insttab) { + if($insttab['name'] == $tab['name']) { + unset($tabs[$key]); + break; + } + } + } + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* remove menu items */ + if(is_array($pkg_config['menu'])) { + $static_output .= gettext("Menu items... "); + update_output_window($static_output); + if (is_array($pkg_config['menu']) && is_array($menus)) { + foreach($pkg_config['menu'] as $menu) { + foreach($menus as $key => $instmenu) { + if($instmenu['name'] == $menu['name']) { + unset($menus[$key]); + break; + } + } + } + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* remove services */ + if(is_array($pkg_config['service'])) { + $static_output .= gettext("Services... "); + update_output_window($static_output); + if (is_array($pkg_config['service']) && is_array($services)) { + foreach($pkg_config['service'] as $service) { + foreach($services as $key => $instservice) { + if($instservice['name'] == $service['name']) { + if($g['booting'] != true) + stop_service($service['name']); + if($service['rcfile']) { + $prefix = RCFILEPREFIX; + if (!empty($service['prefix'])) + $prefix = $service['prefix']; + if (file_exists("{$prefix}{$service['rcfile']}")) + @unlink("{$prefix}{$service['rcfile']}"); + } + unset($services[$key]); + } + } + } + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* + * XXX: Otherwise inclusion of config.inc again invalidates actions taken. + * Same is done during installation. + */ + write_config("Intermediate config write during package removal for {$pkg}."); + + /* + * If a require exists, include it. this will + * show us where an error exists in a package + * instead of making us blindly guess + */ + $missing_include = false; + if($pkg_config['include_file'] <> "") { + $static_output .= gettext("Loading package instructions...") . "\n"; + update_output_window($static_output); + pkg_debug("require_once(\"{$pkg_config['include_file']}\")\n"); + if (file_exists($pkg_config['include_file'])) + require_once($pkg_config['include_file']); + else { + $missing_include = true; + update_output_window($static_output); + $static_output .= "Include file " . basename($pkg_config['include_file']) . " could not be found for inclusion.\n"; + } + } + /* ermal + * NOTE: It is not possible to handle parse errors on eval. + * So we prevent it from being run at all to not interrupt all the other code. + */ + if ($missing_include == false) { + /* evalate this package's global functions and pre deinstall commands */ + if($pkg_config['custom_php_global_functions'] <> "") + eval_once($pkg_config['custom_php_global_functions']); + if($pkg_config['custom_php_pre_deinstall_command'] <> "") + eval_once($pkg_config['custom_php_pre_deinstall_command']); + } + /* system files */ + if(is_array($pkg_config['modify_system']) && is_array($pkg_config['modify_system']['item'])) { + $static_output .= gettext("System files... "); + update_output_window($static_output); + foreach($pkg_config['modify_system']['item'] as $ms) + if($ms['textneeded']) remove_text_from_file($ms['modifyfilename'], $ms['textneeded']); + + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* deinstall commands */ + if($pkg_config['custom_php_deinstall_command'] <> "") { + $static_output .= gettext("Deinstall commands... "); + update_output_window($static_output); + if ($missing_include == false) { + eval_once($pkg_config['custom_php_deinstall_command']); + $static_output .= gettext("done.") . "\n"; + } else + $static_output .= "\nNot executing custom deinstall hook because an include is missing.\n"; + update_output_window($static_output); + } + if($pkg_config['include_file'] <> "") { + $static_output .= gettext("Removing package instructions..."); + update_output_window($static_output); + pkg_debug(sprintf(gettext("Remove '%s'"), $pkg_config['include_file']) . "\n"); + unlink_if_exists("/usr/local/pkg/" . $pkg_config['include_file']); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* remove all additional files */ + if(is_array($pkg_config['additional_files_needed'])) { + $static_output .= gettext("Auxiliary files... "); + update_output_window($static_output); + foreach($pkg_config['additional_files_needed'] as $afn) { + $filename = get_filename_from_url($afn['item'][0]); + if($afn['prefix'] <> "") + $prefix = $afn['prefix']; + else + $prefix = "/usr/local/pkg/"; + unlink_if_exists($prefix . $filename); + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* package XML file */ + $static_output .= gettext("Package XML... "); + update_output_window($static_output); + unlink_if_exists("/usr/local/pkg/" . $packages[$pkgid]['configurationfile']); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* syslog */ + if(is_array($pkg_info['logging']) && $pkg_info['logging']['logfile_name'] <> "") { + $static_output .= "Syslog entries... "; + update_output_window($static_output); + remove_text_from_file("/etc/syslog.conf", $pkg_info['logging']['facilityname'] . "\t\t\t\t" . $pkg_info['logging']['logfilename']); + system_syslogd_start(); + @unlink("{$g['varlog_path']}/{$pkg_info['logging']['logfilename']}"); + $static_output .= "done.\n"; + update_output_window($static_output); + } + + conf_mount_ro(); + /* remove config.xml entries */ + $static_output .= gettext("Configuration... "); + update_output_window($static_output); + unset($config['installedpackages']['package'][$pkgid]); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + write_config("Removed {$pkg} package.\n"); +} + +function expand_to_bytes($size) { + $conv = array( + "G" => "3", + "M" => "2", + "K" => "1", + "B" => "0" + ); + $suffix = substr($size, -1); + if(!in_array($suffix, array_keys($conv))) return $size; + $size = substr($size, 0, -1); + for($i = 0; $i < $conv[$suffix]; $i++) { + $size *= 1024; + } + return $size; +} + +function get_pkg_db() { + global $g; + return return_dir_as_array($g['vardb_path'] . '/pkg'); +} + +function walk_depend($depend, $pkgdb = "", $alreadyseen = "") { + if(!$pkgdb) + $pkgdb = get_pkg_db(); + if(!is_array($alreadyseen)) + $alreadyseen = array(); + if (!is_array($depend)) + $depend = array(); + foreach($depend as $adepend) { + $pkgname = reverse_strrchr($adepend['name'], '.'); + if(in_array($pkgname, $alreadyseen)) { + continue; + } elseif(!in_array($pkgname, $pkgdb)) { + $size += expand_to_bytes($adepend['size']); + $alreadyseen[] = $pkgname; + if(is_array($adepend['depend'])) $size += walk_depend($adepend['depend'], $pkgdb, $alreadyseen); + } + } + return $size; +} + +function get_package_install_size($pkg = 'all', $pkg_info = "") { + global $config, $g; + if((!is_array($pkg)) and ($pkg != 'all')) + $pkg = array($pkg); + $pkgdb = get_pkg_db(); + if(!$pkg_info) + $pkg_info = get_pkg_sizes($pkg); + foreach($pkg as $apkg) { + if(!$pkg_info[$apkg]) + continue; + $toreturn[$apkg] = expand_to_bytes(walk_depend(array($pkg_info[$apkg]), $pkgdb)); + } + return $toreturn; +} + +function squash_from_bytes($size, $round = "") { + $conv = array(1 => "B", "K", "M", "G"); + foreach($conv as $div => $suffix) { + $sizeorig = $size; + if(($size /= 1024) < 1) { + if($round) { + $sizeorig = round($sizeorig, $round); + } + return $sizeorig . $suffix; + } + } + return; +} + +function pkg_reinstall_all() { + global $g, $config; + + @unlink('/conf/needs_package_sync'); + if (is_array($config['installedpackages']['package'])) { + echo gettext("One moment please, reinstalling packages...\n"); + echo gettext(" >>> Trying to fetch package info..."); + log_error(gettext("Attempting to reinstall all packages")); + $pkg_info = get_pkg_info(); + if ($pkg_info) { + echo " Done.\n"; + } else { + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + $error = sprintf(gettext(' >>> Unable to communicate with %1$s. Please verify DNS and interface configuration, and that %2$s has functional Internet connectivity.'), $xmlrpc_base_url, $g['product_name']); + echo "\n{$error}\n"; + log_error(gettext("Cannot reinstall packages: ") . $error); + return; + } + $todo = array(); + $all_names = array(); + foreach($config['installedpackages']['package'] as $package) { + $todo[] = array('name' => $package['name'], 'version' => $package['version']); + $all_names[] = $package['name']; + } + $package_name_list = gettext("List of packages to reinstall: ") . implode(", ", $all_names); + echo " >>> {$package_name_list}\n"; + log_error($package_name_list); + + foreach($todo as $pkgtodo) { + $static_output = ""; + if($pkgtodo['name']) { + log_error(gettext("Uninstalling package") . " {$pkgtodo['name']}"); + uninstall_package($pkgtodo['name']); + log_error(gettext("Finished uninstalling package") . " {$pkgtodo['name']}"); + log_error(gettext("Reinstalling package") . " {$pkgtodo['name']}"); + install_package($pkgtodo['name']); + log_error(gettext("Finished installing package") . " {$pkgtodo['name']}"); + } + } + log_error(gettext("Finished reinstalling all packages.")); + } else + echo "No packages are installed."; +} + +function stop_packages() { + require_once("config.inc"); + require_once("functions.inc"); + require_once("filter.inc"); + require_once("shaper.inc"); + require_once("captiveportal.inc"); + require_once("pkg-utils.inc"); + require_once("pfsense-utils.inc"); + require_once("service-utils.inc"); + + global $config, $g; + + log_error("Stopping all packages."); + + $rcfiles = glob(RCFILEPREFIX . "*.sh"); + if (!$rcfiles) + $rcfiles = array(); + else { + $rcfiles = array_flip($rcfiles); + if (!$rcfiles) + $rcfiles = array(); + } + + if (is_array($config['installedpackages']['package'])) { + foreach($config['installedpackages']['package'] as $package) { + echo " Stopping package {$package['name']}..."; + $internal_name = get_pkg_internal_name($package); + stop_service($internal_name); + unset($rcfiles[RCFILEPREFIX . strtolower($internal_name) . ".sh"]); + echo "done.\n"; + } + } + + foreach ($rcfiles as $rcfile => $number) { + $shell = @popen("/bin/sh", "w"); + if ($shell) { + echo " Stopping {$rcfile}..."; + if (!@fwrite($shell, "{$rcfile} stop >>/tmp/bootup_messages 2>&1")) { + if ($shell) + pclose($shell); + $shell = @popen("/bin/sh", "w"); + } + echo "done.\n"; + pclose($shell); + } + } +} + +function package_skip_tests($index,$requested_version){ + global $config, $g; + + /* Get pfsense version*/ + $version = rtrim(file_get_contents("/etc/version")); + + if($g['platform'] == "nanobsd") + if($index['noembedded']) + return true; + + /* If we are on not on HEAD, and the package wants it, skip */ + if ($version <> "HEAD" && $index['required_version'] == "HEAD" && $requested_version <> "other") + return true; + + /* If there is no required version, and the requested package version is not 'none', then skip */ + if (empty($index['required_version']) && $requested_version <> "none") + return true; + + /* If the requested version is not 'other', and the required version is newer than what we have, skip. */ + if($requested_version <> "other" && (pfs_version_compare("", $version, $index['required_version']) < 0)) + return true; + + /* If the requestion version is 'other' and we are on the version requested, skip. */ + if($requested_version == "other" && (pfs_version_compare("", $version, $index['required_version']) == 0)) + return true; + + /* Package is only for an older version, lets skip */ + if($index['maximum_version'] && (pfs_version_compare("", $version, $index['maximum_version']) > 0)) + return true; + + /* Do not skip package list */ + return false; +} + +function get_pkg_interfaces_select_source($include_localhost=false) { + $interfaces = get_configured_interface_with_descr(); + $ssifs = array(); + foreach ($interfaces as $iface => $ifacename) { + $tmp["name"] = $ifacename; + $tmp["value"] = $iface; + $ssifs[] = $tmp; + } + if ($include_localhost) { + $tmp["name"] = "Localhost"; + $tmp["value"] = "lo0"; + $ssifs[] = $tmp; + } + return $ssifs; +} + +function verify_all_package_servers() { + return verify_package_server(get_active_xml_rpc_base_url()); +} + +/* Check if the active package server is a valid default or if it has been + altered. */ +function verify_package_server($server) { + /* Define the expected default package server domains. Include + preceding "." to prevent matching from being too liberal. */ + $default_package_domains = array('.pfsense.org', '.pfsense.com', '.netgate.com'); + + /* For this test we only need to check the hostname. */ + $xmlrpcbase = parse_url($server, PHP_URL_HOST); + + foreach ($default_package_domains as $dom) { + if (substr($xmlrpcbase, -(strlen($dom))) == $dom) { + return true; + } + } + return false; +} + +/* Test the package server certificate to ensure that it validates properly */ +function check_package_server_ssl() { + global $g; + $xmlrpcurl = get_active_xml_rpc_base_url() . $g['xmlrpcpath']; + + /* If the package server is using HTTP, we can't verify SSL */ + if (substr($xmlrpcurl, 0, 5) == "http:") { + return "http"; + } + + /* Setup a basic cURL connection. We do not care about the content of + the result, only the SSL verification. */ + $ch = curl_init($xmlrpcurl); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, '30'); + curl_setopt($ch, CURLOPT_TIMEOUT, 60); + curl_setopt($ch, CURLOPT_USERAGENT, $g['product_name'] . '/' . rtrim(file_get_contents("/etc/version"))); + $result_page = curl_exec($ch); + $verifyfail = curl_getinfo($ch, CURLINFO_SSL_VERIFYRESULT); + curl_close($ch); + + /* The result from curl is 1 on failure, 0 on success. */ + if ($verifyfail == 0) + return true; + else + return false; +} + +/* Keep this message centrally since it will be used several times on pages + in the GUI. */ +function package_server_ssl_failure_message() { + $msg = "The package server's SSL certificate could not be verified. " + . "The SSL certificate itself may be invalid, its chain of trust may " + . "have failed validation, or the server may have been impersonated. " + . "Downloaded packages may come from an untrusted source. " + . "Proceed with caution."; + + return sprintf(gettext($msg), htmlspecialchars(get_active_xml_rpc_base_url())); +} + +/* Keep this message centrally since it will be used several times on pages + in the GUI. */ +function package_server_mismatch_message() { + $msg = "The package server currently configured on " + . "this firewall (%s) is NOT an official package server. The contents " + . "of such servers cannot be verified and may contain malicious files. " + . "Return the package server settings to their default values to " + . "ensure that verifiable and trusted packages are received."; + + return sprintf(gettext($msg), htmlspecialchars(get_active_xml_rpc_base_url())) . '

' + . '' . gettext("Package Manager Settings") . ''; +} + + +function pkg_fetch_config_file($package, $pkg_info = "") { + global $g, $config, $static_output, $pkg_interface; + conf_mount_rw(); + + if(empty($pkg_info) or !is_array($pkg_info[$package])) { + $pkg_info = get_pkg_info(array($package)); + $pkg_info = $pkg_info[$package]; // We're only dealing with one package, so we can strip away the extra array. + if (empty($pkg_info)) { + conf_mount_ro(); + return -1; + } + } + + /* fetch the package's configuration file */ + if($pkg_info['config_file'] != "") { + $static_output .= "\n" . gettext("Downloading package configuration file... "); + update_output_window($static_output); + pkg_debug(gettext("Downloading package configuration file...") . "\n"); + $fetchto = substr(strrchr($pkg_info['config_file'], '/'), 1); + download_file_with_progress_bar($pkg_info['config_file'], '/usr/local/pkg/' . $fetchto); + if(!file_exists('/usr/local/pkg/' . $fetchto)) { + pkg_debug(gettext("ERROR! Unable to fetch package configuration file. Aborting installation.") . "\n"); + if($pkg_interface == "console") + print "\n" . gettext("ERROR! Unable to fetch package configuration file. Aborting package installation.") . "\n"; + else { + $static_output .= gettext("failed!\n\nInstallation aborted.\n"); + update_output_window($static_output); + echo "
Show install log"; + } + conf_mount_ro(); + return -1; + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + conf_mount_ro(); + return true; +} + + +function pkg_fetch_additional_files($package, $pkg_info = "") { + global $g, $config, $static_output, $pkg_interface; + conf_mount_rw(); + + if(empty($pkg_info) or !is_array($pkg_info[$package])) { + $pkg_info = get_pkg_info(array($package)); + $pkg_info = $pkg_info[$package]; // We're only dealing with one package, so we can strip away the extra array. + if (empty($pkg_info)) { + conf_mount_ro(); + return -1; + } + } + + $configfile = substr(strrchr($pkg_info['config_file'], '/'), 1); + if(file_exists("/usr/local/pkg/" . $configfile)) { + $static_output .= gettext("Loading package configuration... "); + update_output_window($static_output); + $pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $configfile, "packagegui"); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + /* download additional files */ + if(is_array($pkg_config['additional_files_needed'])) { + $static_output .= gettext("Additional files... "); + $static_orig = $static_output; + update_output_window($static_output); + foreach($pkg_config['additional_files_needed'] as $afn) { + $filename = get_filename_from_url($afn['item'][0]); + if($afn['chmod'] <> "") + $pkg_chmod = $afn['chmod']; + else + $pkg_chmod = ""; + + if($afn['prefix'] <> "") + $prefix = $afn['prefix']; + else + $prefix = "/usr/local/pkg/"; + + if(!is_dir($prefix)) + safe_mkdir($prefix); + $static_output .= $filename . " "; + update_output_window($static_output); + if (download_file_with_progress_bar($afn['item'][0], $prefix . $filename) !== true) { + $static_output .= "failed.\n"; + @unlink($prefix . $filename); + update_output_window($static_output); + return false; + } + if(stristr($filename, ".tgz") <> "") { + pkg_debug(gettext("Extracting tarball to -C for ") . $filename . "...\n"); + $tarout = ""; + exec("/usr/bin/tar xvzf " . escapeshellarg($prefix . $filename) . " -C / 2>&1", $tarout); + pkg_debug(print_r($tarout, true) . "\n"); + } + if($pkg_chmod <> "") { + pkg_debug(sprintf(gettext('Changing file mode to %1$s for %2$s%3$s%4$s'), $pkg_chmod, $prefix, $filename, "\n")); + @chmod($prefix . $filename, $pkg_chmod); + system("/bin/chmod {$pkg_chmod} {$prefix}{$filename}"); + } + $static_output = $static_orig; + update_output_window($static_output); + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + conf_mount_ro(); + return true; + } +} + +?> diff --git a/etc/inc/plain_sasl_client.inc b/etc/inc/plain_sasl_client.inc new file mode 100644 index 000000000..c7feed029 --- /dev/null +++ b/etc/inc/plain_sasl_client.inc @@ -0,0 +1,99 @@ +state!=SASL_PLAIN_STATE_START) + { + $client->error="PLAIN authentication state is not at the start"; + return(SASL_FAIL); + } + $this->credentials=array( + "user"=>"", + "password"=>"", + "realm"=>"", + "mode"=>"" + ); + $defaults=array( + "realm"=>"", + "mode"=>"" + ); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + { + switch($this->credentials["mode"]) + { + case SASL_PLAIN_EXIM_MODE: + $message=$this->credentials["user"]."\0".$this->credentials["password"]."\0"; + break; + case SASL_PLAIN_EXIM_DOCUMENTATION_MODE: + $message="\0".$this->credentials["user"]."\0".$this->credentials["password"]; + break; + default: + $message=$this->credentials["user"]."\0".$this->credentials["user"].(strlen($this->credentials["realm"]) ? "@".$this->credentials["realm"] : "")."\0".$this->credentials["password"]; + break; + } + $this->state=SASL_PLAIN_STATE_DONE; + } + else + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { +/* + case SASL_PLAIN_STATE_IDENTIFY: + switch($this->credentials["mode"]) + { + case SASL_PLAIN_EXIM_MODE: + $message=$this->credentials["user"]."\0".$this->credentials["password"]."\0"; + break; + case SASL_PLAIN_EXIM_DOCUMENTATION_MODE: + $message="\0".$this->credentials["user"]."\0".$this->credentials["password"]; + break; + default: + $message=$this->credentials["user"]."\0".$this->credentials["user"].(strlen($this->credentials["realm"]) ? "@".$this->credentials["realm"] : "")."\0".$this->credentials["password"]; + break; + } + var_dump($message); + $this->state=SASL_PLAIN_STATE_DONE; + break; +*/ + case SASL_PLAIN_STATE_DONE: + $client->error="PLAIN authentication was finished without success"; + return(SASL_FAIL); + default: + $client->error="invalid PLAIN authentication step state"; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> \ No newline at end of file diff --git a/etc/inc/priv.defs.inc b/etc/inc/priv.defs.inc new file mode 100644 index 000000000..352ac2e39 --- /dev/null +++ b/etc/inc/priv.defs.inc @@ -0,0 +1,1427 @@ + diff --git a/etc/inc/priv.inc b/etc/inc/priv.inc new file mode 100644 index 000000000..c100a238d --- /dev/null +++ b/etc/inc/priv.inc @@ -0,0 +1,291 @@ + + All rights reserved. + + Copyright (C) 2005-2006 Bill Marquette + All rights reserved. + + Copyright (C) 2006 Paul Taylor . + All rights reserved. + + Copyright (C) 2003-2006 Manuel Kasper . + 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. + + DISABLE_PHP_LINT_CHECKING +*/ + +/* + pfSense_MODULE: auth +*/ + +require_once("priv.defs.inc"); + +/* Load and process custom privs. */ +function get_priv_files($directory) { + $dir_array = array(); + if(!is_dir($directory)) + return; + if ($dh = opendir($directory)) { + while (($file = readdir($dh)) !== false) { + $canadd = 0; + if($file == ".") + $canadd = 1; + if($file == "..") + $canadd = 1; + if($canadd == 0) + array_push($dir_array, $file); + } + closedir($dh); + } + if(!is_array($dir_array)) + return; + return $dir_array; +} + +// Load and sort privs +$dir_array = get_priv_files("/etc/inc/priv"); +foreach ($dir_array as $file) + if (!is_dir("/etc/inc/priv/{$file}") && stristr($file,".inc")) + include("/etc/inc/priv/{$file}"); +if(is_dir("/usr/local/pkg/priv")) { + $dir_array = get_priv_files("/usr/local/pkg/priv"); + foreach ($dir_array as $file) + if (!is_dir("/usr/local/pkg/priv/{$file}") && stristr($file,".inc")) + include("/usr/local/pkg/priv/{$file}"); +} + +if(is_array($priv_list)) + sort_privs($priv_list); + +function cmp_privkeys($a, $b) { + /* user privs at the top */ + $auser = strncmp("user-", $a, 5); + $buser = strncmp("user-", $b, 5); + if($auser != $buser) + return $auser - $buser; + + /* name compare others */ + return strcasecmp($a, $b); +} + +function sort_privs(& $privs) { + uksort($privs, "cmp_privkeys"); +} + +function cmp_page_matches($page, & $matches, $fullwc = true) { + +// $dbg_matches = implode(",", $matches); +// log_error("debug: checking page {$page} match with {$dbg_matches}"); + + if (!is_array($matches)) + return false; + + /* skip any leading fwdslash */ + $test = strpos($page, "/"); + if ($test !== false && $test == 0) + $page = substr($page, 1); + + /* look for a match */ + foreach ($matches as $match) { + + /* possibly ignore full wildcard match */ + if (!$fullwc && !strcmp($match ,"*")) + continue; + + /* compare exact or wildcard match */ + $match = str_replace(array(".", "*","?"), array("\.", ".*","\?"), $match); + $result = preg_match("@^/{$match}$@", "/{$page}"); + + if ($result) + return true; + } + + return false; +} + +function map_page_privname($page) { + global $priv_list; + + foreach ($priv_list as $pname => $pdata) { + if (strncmp($pname, "page-", 5)) + continue; + $fullwc = false; + if (!strcasecmp($page,"any")||!strcmp($page,"*")) + $fullwc = true; + if (cmp_page_matches($page, $pdata['match'], $fullwc)) + return $pname; + } + + return false; +} + +function get_user_privdesc(& $user) { + global $priv_list; + + $privs = array(); + + $user_privs = $user['priv']; + if (!is_array($user_privs)) + $user_privs = array(); + + $names = local_user_get_groups($user, true); + + foreach ($names as $name) { + $group = getGroupEntry($name); + $group_privs = $group['priv']; + if (!is_array($group_privs)) + continue; + foreach ($group_privs as $pname) { + if (in_array($pname,$user_privs)) + continue; + if (!$priv_list[$pname]) + continue; + $priv = $priv_list[$pname]; + $priv['group'] = $group['name']; + $privs[] = $priv; + } + } + + foreach ($user_privs as $pname) + if($priv_list[$pname]) + $privs[] = $priv_list[$pname]; + + return $privs; +} + +function isAllowed($username, $page) { + global $_SESSION; + + if (!isset($username)) + return false; + + /* admin/root access check */ + $user = getUserEntry($username); + if (isset($user)) + if (isset($user['uid'])) + if ($user['uid']==0) + return true; + + /* user privelege access check */ + if (cmp_page_matches($page, $_SESSION['page-match'])) + return true; + + return false; +} + + +function isAllowedPage($page) { + global $_SESSION; + + + $username = $_SESSION['Username']; + + if (!isset($username)) + return false; + + /* admin/root access check */ + $user = getUserEntry($username); + if (isset($user)) + if (isset($user['uid'])) + if ($user['uid']==0) + return true; + + /* user privelege access check */ + return cmp_page_matches($page, $_SESSION['page-match']); +} + +function getPrivPages(& $entry, & $allowed_pages) { + global $priv_list; + + if (!is_array($entry['priv'])) + return; + + foreach ($entry['priv'] as $pname) { + if (strncmp($pname, "page-", 5)) + continue; + $priv = &$priv_list[$pname]; + if (!is_array($priv)) + continue; + $matches = &$priv['match']; + if (!is_array($matches)) + continue; + foreach ($matches as $match) + $allowed_pages[] = $match; + } +} + +function getAllowedPages($username) { + global $config, $_SESSION; + + if (!function_exists("ldap_connect")) + return; + + $allowed_pages = array(); + $allowed_groups = array(); + + $authcfg = auth_get_authserver($config['system']['webgui']['authmode']); + // obtain ldap groups if we are in ldap mode + if ($authcfg['type'] == "ldap") + $allowed_groups = @ldap_get_groups($username, $authcfg); + else { + // search for a local user by name + $local_user = getUserEntry($username); + getPrivPages($local_user, $allowed_pages); + + // obtain local groups if we have a local user + if ($local_user) + $allowed_groups = local_user_get_groups($local_user); + } + + // build a list of allowed pages + if (is_array($config['system']['group']) && is_array($allowed_groups)) + foreach ($config['system']['group'] as $group) + if (in_array($group['name'], $allowed_groups)) + getPrivPages($group, $allowed_pages); + +// $dbg_pages = implode(",", $allowed_pages); +// $dbg_groups = implode(",", $allowed_groups); +// log_error("debug: user {$username} groups = {$dbg_groups}"); +// log_error("debug: user {$username} pages = {$dbg_pages}"); + + $_SESSION['page-match'] = $allowed_pages; + + return $allowed_pages; +} + +function sort_user_privs($privs) { + // Privileges to place first, to redirect properly. + $priority_privs = array("page-dashboard-all", "page-system-login/logout"); + + $fprivs = array_intersect($privs, $priority_privs); + $sprivs = array_diff($privs, $priority_privs); + + return array_merge($fprivs, $sprivs); +} +?> \ No newline at end of file diff --git a/etc/inc/priv/user.priv.inc b/etc/inc/priv/user.priv.inc new file mode 100644 index 000000000..5cd56803c --- /dev/null +++ b/etc/inc/priv/user.priv.inc @@ -0,0 +1,74 @@ + diff --git a/etc/inc/r53.class b/etc/inc/r53.class new file mode 100644 index 000000000..89faa26ba --- /dev/null +++ b/etc/inc/r53.class @@ -0,0 +1,754 @@ +__accessKey; } + public function getSecretKey() { return $this->__secretKey; } + public function getHost() { return $this->__host; } + + protected $__verifyHost = 1; + protected $__verifyPeer = 1; + + // verifyHost and verifyPeer determine whether curl verifies ssl certificates. + // It may be necessary to disable these checks on certain systems. + // These only have an effect if SSL is enabled. + public function verifyHost() { return $this->__verifyHost; } + public function enableVerifyHost($enable = true) { $this->__verifyHost = $enable; } + + public function verifyPeer() { return $this->__verifyPeer; } + public function enableVerifyPeer($enable = true) { $this->__verifyPeer = $enable; } + + /** + * Constructor + * + * @param string $accessKey Access key + * @param string $secretKey Secret key + * @return void + */ + public function __construct($accessKey = null, $secretKey = null, $host = 'route53.amazonaws.com') { + if ($accessKey !== null && $secretKey !== null) { + $this->setAuth($accessKey, $secretKey); + } + $this->__host = $host; + } + + /** + * Set AWS access key and secret key + * + * @param string $accessKey Access key + * @param string $secretKey Secret key + * @return void + */ + public function setAuth($accessKey, $secretKey) { + $this->__accessKey = $accessKey; + $this->__secretKey = $secretKey; + } + + /** + * Lists the hosted zones on the account + * + * @param string marker A pagination marker returned by a previous truncated call + * @param int maxItems The maximum number of items per page. The service uses min($maxItems, 100). + * @return A list of hosted zones + */ + public function listHostedZones($marker = null, $maxItems = 100) { + $rest = new Route53Request($this, 'hostedzone', 'GET'); + + if($marker !== null) { + $rest->setParameter('marker', $marker); + } + if($maxItems !== 100) { + $rest->setParameter('maxitems', $maxItems); + } + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('listHostedZones', $rest->error); + return false; + } + + $response = array(); + if (!isset($rest->body)) + { + return $response; + } + + $zones = array(); + foreach($rest->body->HostedZones->HostedZone as $z) + { + $zones[] = $this->parseHostedZone($z); + } + $response['HostedZone'] = $zones; + + if(isset($rest->body->MaxItems)) { + $response['MaxItems'] = (string)$rest->body->MaxItems; + } + + if(isset($rest->body->IsTruncated)) { + $response['IsTruncated'] = (string)$rest->body->IsTruncated; + if($response['IsTruncated'] == 'true') { + $response['NextMarker'] = (string)$rest->body->NextMarker; + } + } + + return $response; + } + + /** + * Retrieves information on a specified hosted zone + * + * @param string zoneId The id of the hosted zone, as returned by CreateHostedZoneResponse or ListHostedZoneResponse + * In other words, if ListHostedZoneResponse shows the zone's Id as '/hostedzone/Z1PA6795UKMFR9', + * then that full value should be passed here, including the '/hostedzone/' prefix. + * @return A data structure containing information about the specified zone + */ + public function getHostedZone($zoneId) { + // we'll strip off the leading forward slash, so we can use it as the action directly. + $zoneId = trim($zoneId, '/'); + + $rest = new Route53Request($this, $zoneId, 'GET'); + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('getHostedZone', $rest->error); + return false; + } + + $response = array(); + if (!isset($rest->body)) + { + return $response; + } + + $response['HostedZone'] = $this->parseHostedZone($rest->body->HostedZone); + $response['NameServers'] = $this->parseDelegationSet($rest->body->DelegationSet); + + return $response; + } + + /** + * Creates a new hosted zone + * + * @param string name The name of the hosted zone (e.g. "example.com.") + * @param string reference A user-specified unique reference for this request + * @param string comment An optional user-specified comment to attach to the zone + * @return A data structure containing information about the newly created zone + */ + public function createHostedZone($name, $reference, $comment = '') { + // hosted zone names must end with a period, but people will forget this a lot... + if(strrpos($name, '.') != (strlen($name) - 1)) { + $name .= '.'; + } + + $data = "\n"; + $data .= '\n"; + $data .= ''.$name."\n"; + $data .= ''.$reference."\n"; + if(strlen($comment) > 0) { + $data .= "\n"; + $data .= ''.$comment."\n"; + $data .= "\n"; + } + $data .= "\n"; + + $rest = new Route53Request($this, 'hostedzone', 'POST', $data); + + $rest = $rest->getResponse(); + + if($rest->error === false && !in_array($rest->code, array(200, 201, 202, 204)) ) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('createHostedZone', $rest->error); + return false; + } + + $response = array(); + if (!isset($rest->body)) + { + return $response; + } + + $response['HostedZone'] = $this->parseHostedZone($rest->body->HostedZone); + $response['ChangeInfo'] = $this->parseChangeInfo($rest->body->ChangeInfo); + $response['NameServers'] = $this->parseDelegationSet($rest->body->DelegationSet); + + return $response; + } + + /** + * Retrieves information on a specified hosted zone + * + * @param string zoneId The id of the hosted zone, as returned by CreateHostedZoneResponse or ListHostedZoneResponse + * In other words, if ListHostedZoneResponse shows the zone's Id as '/hostedzone/Z1PA6795UKMFR9', + * then that full value should be passed here, including the '/hostedzone/' prefix. + * @return The change request data corresponding to this delete + */ + public function deleteHostedZone($zoneId) { + // we'll strip off the leading forward slash, so we can use it as the action directly. + $zoneId = trim($zoneId, '/'); + + $rest = new Route53Request($this, $zoneId, 'DELETE'); + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('deleteHostedZone', $rest->error); + return false; + } + + if (!isset($rest->body)) + { + return array(); + } + + return $this->parseChangeInfo($rest->body->ChangeInfo); + } + + /** + * Retrieves a list of resource record sets for a given zone + * + * @param string zoneId The id of the hosted zone, as returned by CreateHostedZoneResponse or ListHostedZoneResponse + * In other words, if ListHostedZoneResponse shows the zone's Id as '/hostedzone/Z1PA6795UKMFR9', + * then that full value should be passed here, including the '/hostedzone/' prefix. + * @param string type The type of resource record set to begin listing from. If this is specified, $name must also be specified. + * Must be one of: A, AAAA, CNAME, MX, NS, PTR, SOA, SPF, SRV, TXT + * @param string name The name at which to begin listing resource records (in the lexographic order of records). + * @param int maxItems The maximum number of results to return. The service uses min($maxItems, 100). + * @return The list of matching resource record sets + */ + public function listResourceRecordSets($zoneId, $type = '', $name = '', $maxItems = 100) { + // we'll strip off the leading forward slash, so we can use it as the action directly. + $zoneId = trim($zoneId, '/'); + + $rest = new Route53Request($this, $zoneId.'/rrset', 'GET'); + + if(strlen($type) > 0) { + $rest->setParameter('type', $type); + } + if(strlen($name) > 0) { + $rest->setParameter('name', $name); + } + if($maxItems != 100) { + $rest->setParameter('maxitems', $maxItems); + } + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('listResourceRecordSets', $rest->error); + return false; + } + + $response = array(); + if (!isset($rest->body)) + { + return $response; + } + + $recordSets = array(); + foreach($rest->body->ResourceRecordSets->ResourceRecordSet as $set) { + $recordSets[] = $this->parseResourceRecordSet($set); + } + + $response['ResourceRecordSets'] = $recordSets; + + if(isset($rest->body->MaxItems)) { + $response['MaxItems'] = (string)$rest->body->MaxItems; + } + + if(isset($rest->body->IsTruncated)) { + $response['IsTruncated'] = (string)$rest->body->IsTruncated; + if($response['IsTruncated'] == 'true') { + $response['NextRecordName'] = (string)$rest->body->NextRecordName; + $response['NextRecordType'] = (string)$rest->body->NextRecordType; + } + } + + return $response; + } + + /** + * Makes the specified resource record set changes (create or delete). + * + * @param string zoneId The id of the hosted zone, as returned by CreateHostedZoneResponse or ListHostedZoneResponse + * In other words, if ListHostedZoneResponse shows the zone's Id as '/hostedzone/Z1PA6795UKMFR9', + * then that full value should be passed here, including the '/hostedzone/' prefix. + * @param array changes An array of change objects, as they are returned by the prepareChange utility method. + * You may also pass a single change object. + * @param string comment An optional comment to attach to the change request + * @return The status of the change request + */ + public function changeResourceRecordSets($zoneId, $changes, $comment = '') { + // we'll strip off the leading forward slash, so we can use it as the action directly. + $zoneId = trim($zoneId, '/'); + + $data = "\n"; + $data .= '\n"; + $data .= "\n"; + + if(strlen($comment) > 0) { + $data .= ''.$comment."\n"; + } + + if(!is_array($changes)) { + $changes = array($changes); + } + + $data .= "\n"; + foreach($changes as $change) { + $data .= $change; + } + $data .= "\n"; + + $data .= "\n"; + $data .= "\n"; + + $rest = new Route53Request($this, $zoneId.'/rrset', 'POST', $data); + + $rest = $rest->getResponse(); + if($rest->error === false && !in_array($rest->code, array(200, 201, 202, 204))) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('changeResourceRecordSets', $rest->error); + return false; + } + + if (!isset($rest->body)) + { + return array(); + } + + return $this->parseChangeInfo($rest->body->ChangeInfo); + } + + /** + * Retrieves information on a specified change request + * + * @param string changeId The id of the change, as returned by CreateHostedZoneResponse or ChangeResourceRecordSets + * In other words, if CreateHostedZoneResponse showed the change's Id as '/change/C2682N5HXP0BZ4', + * then that full value should be passed here, including the '/change/' prefix. + * @return The status of the change request + */ + public function getChange($changeId) { + // we'll strip off the leading forward slash, so we can use it as the action directly. + $zoneId = trim($changeId, '/'); + + $rest = new Route53Request($this, $changeId, 'GET'); + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('getChange', $rest->error); + return false; + } + + if (!isset($rest->body)) + { + return array(); + } + + return $this->parseChangeInfo($rest->body->ChangeInfo); + } + + + + /** + * Utility function to parse a HostedZone tag structure + */ + private function parseHostedZone($tag) { + $zone = array(); + $zone['Id'] = (string)$tag->Id; + $zone['Name'] = (string)$tag->Name; + $zone['CallerReference'] = (string)$tag->CallerReference; + + // these might always be set, but check just in case, since + // their values are option on CreateHostedZone requests + if(isset($tag->Config) && isset($tag->Config->Comment)) { + $zone['Config'] = array('Comment' => (string)$tag->Config->Comment); + } + + return $zone; + } + + /** + * Utility function to parse a ChangeInfo tag structure + */ + private function parseChangeInfo($tag) { + $info = array(); + $info['Id'] = (string)$tag->Id; + $info['Status'] = (string)$tag->Status; + $info['SubmittedAt'] = (string)$tag->SubmittedAt; + return $info; + } + + /** + * Utility function to parse a DelegationSet tag structure + */ + private function parseDelegationSet($tag) { + $servers = array(); + foreach($tag->NameServers->NameServer as $ns) { + $servers[] = (string)$ns; + } + return $servers; + } + + /** + * Utility function to parse a ResourceRecordSet tag structure + */ + private function parseResourceRecordSet($tag) { + $rrs = array(); + $rrs['Name'] = (string)$tag->Name; + $rrs['Type'] = (string)$tag->Type; + $rrs['TTL'] = (string)$tag->TTL; + $rrs['ResourceRecords'] = array(); + foreach($tag->ResourceRecords->ResourceRecord as $rr) { + $rrs['ResourceRecords'][] = (string)$rr->Value; + } + return $rrs; + } + + /** + * Utility function to prepare a Change object for ChangeResourceRecordSets requests. + * All fields are required. + * + * @param string action The action to perform. One of: CREATE, DELETE + * @param string name The name to perform the action on. + * If it does not end with '.', then AWS treats the name as relative to the zone root. + * @param string type The type of record being modified. + * Must be one of: A, AAAA, CNAME, MX, NS, PTR, SOA, SPF, SRV, TXT + * @param int ttl The time-to-live value for this record, in seconds. + * @param array records An array of resource records to attach to this change. + * Each member of this array can either be a string, or an array of strings. + * Passing an array of strings will attach multiple values to a single resource record. + * If a single string is passed as $records instead of an array, + * it will be treated as a single-member array. + * @return object An opaque object containing the change request. + * Do not write code that depends on the contents of this object, as it may change at any time. + */ + public function prepareChange($action, $name, $type, $ttl, $records) { + $change = "\n"; + $change .= ''.$action."\n"; + $change .= "\n"; + $change .= ''.$name."\n"; + $change .= ''.$type."\n"; + $change .= ''.$ttl."\n"; + $change .= "\n"; + + if(!is_array($records)) { + $records = array($records); + } + + foreach($records as $record) { + $change .= "\n"; + if(is_array($record)) { + foreach($record as $value) { + $change .= ''.$value."\n"; + } + } + else { + $change .= ''.$record."\n"; + } + $change .= "\n"; + } + + $change .= "\n"; + $change .= "\n"; + $change .= "\n"; + + return $change; + } + + /** + * Trigger an error message + * + * @internal Used by member functions to output errors + * @param array $error Array containing error information + * @return string + */ + public function __triggerError($functionname, $error) + { + if($error == false) { + trigger_error(sprintf("Route53::%s(): Encountered an error, but no description given", $functionname), E_USER_WARNING); + } + else if(isset($error['curl']) && $error['curl']) + { + trigger_error(sprintf("Route53::%s(): %s %s", $functionname, $error['code'], $error['message']), E_USER_WARNING); + } + else if(isset($error['Error'])) + { + $e = $error['Error']; + $message = sprintf("Route53::%s(): %s - %s: %s\nRequest Id: %s\n", $functionname, $e['Type'], $e['Code'], $e['Message'], $error['RequestId']); + trigger_error($message, E_USER_WARNING); + } + } + + /** + * Callback handler for 503 retries. + * + * @internal Used by SimpleDBRequest to call the user-specified callback, if set + * @param $attempt The number of failed attempts so far + * @return The retry delay in microseconds, or 0 to stop retrying. + */ + public function __executeServiceTemporarilyUnavailableRetryDelay($attempt) + { + if(is_callable($this->__serviceUnavailableRetryDelayCallback)) { + $callback = $this->__serviceUnavailableRetryDelayCallback; + return $callback($attempt); + } + return 0; + } +} + +final class Route53Request +{ + private $r53, $action, $verb, $data, $parameters = array(); + public $response; + + /** + * Constructor + * + * @param string $r53 The Route53 object making this request + * @param string $action SimpleDB action + * @param string $verb HTTP verb + * @param string $data For POST requests, the data being posted (optional) + * @return mixed + */ + function __construct($r53, $action, $verb, $data = '') { + $this->r53 = $r53; + $this->action = $action; + $this->verb = $verb; + $this->data = $data; + $this->response = new STDClass; + $this->response->error = false; + } + + /** + * Set request parameter + * + * @param string $key Key + * @param string $value Value + * @param boolean $replace Whether to replace the key if it already exists (default true) + * @return void + */ + public function setParameter($key, $value, $replace = true) { + if(!$replace && isset($this->parameters[$key])) + { + $temp = (array)($this->parameters[$key]); + $temp[] = $value; + $this->parameters[$key] = $temp; + } + else + { + $this->parameters[$key] = $value; + } + } + + /** + * Get the response + * + * @return object | false + */ + public function getResponse() { + + $params = array(); + foreach ($this->parameters as $var => $value) + { + if(is_array($value)) + { + foreach($value as $v) + { + $params[] = $var.'='.$this->__customUrlEncode($v); + } + } + else + { + $params[] = $var.'='.$this->__customUrlEncode($value); + } + } + + sort($params, SORT_STRING); + + $query = implode('&', $params); + + // must be in format 'Sun, 06 Nov 1994 08:49:37 GMT' + $date = gmdate('D, d M Y H:i:s e'); + + $headers = array(); + $headers[] = 'Date: '.$date; + $headers[] = 'Host: '.$this->r53->getHost(); + + $auth = 'AWS3-HTTPS AWSAccessKeyId='.$this->r53->getAccessKey(); + $auth .= ',Algorithm=HmacSHA256,Signature='.$this->__getSignature($date); + $headers[] = 'X-Amzn-Authorization: '.$auth; + + $url = 'https://'.$this->r53->getHost().'/'.Route53::API_VERSION.'/'.$this->action.'?'.$query; + + // Basic setup + $curl = curl_init(); + curl_setopt($curl, CURLOPT_USERAGENT, 'Route53/php'); + + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, ($this->r53->verifyHost() ? 1 : 0)); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, ($this->r53->verifyPeer() ? 1 : 0)); + + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, false); + curl_setopt($curl, CURLOPT_WRITEFUNCTION, array(&$this, '__responseWriteCallback')); + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + + // Request types + switch ($this->verb) { + case 'GET': break; + case 'POST': + curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->verb); + if(strlen($this->data) > 0) { + curl_setopt($curl, CURLOPT_POSTFIELDS, $this->data); + $headers[] = 'Content-Type: text/plain'; + $headers[] = 'Content-Length: '.strlen($this->data); + } + break; + case 'DELETE': + curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); + break; + default: break; + } + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + curl_setopt($curl, CURLOPT_HEADER, false); + + // Execute, grab errors + if (curl_exec($curl)) { + $this->response->code = curl_getinfo($curl, CURLINFO_HTTP_CODE); + } else { + $this->response->error = array( + 'curl' => true, + 'code' => curl_errno($curl), + 'message' => curl_error($curl), + 'resource' => $this->resource + ); + } + + @curl_close($curl); + + // Parse body into XML + if ($this->response->error === false && isset($this->response->body)) { + $this->response->body = simplexml_load_string($this->response->body); + + // Grab Route53 errors + if (!in_array($this->response->code, array(200, 201, 202, 204)) + && isset($this->response->body->Error)) { + $error = $this->response->body->Error; + $output = array(); + $output['curl'] = false; + $output['Error'] = array(); + $output['Error']['Type'] = (string)$error->Type; + $output['Error']['Code'] = (string)$error->Code; + $output['Error']['Message'] = (string)$error->Message; + $output['RequestId'] = (string)$this->response->body->RequestId; + + $this->response->error = $output; + unset($this->response->body); + } + } + + return $this->response; + } + + /** + * CURL write callback + * + * @param resource &$curl CURL resource + * @param string &$data Data + * @return integer + */ + private function __responseWriteCallback(&$curl, &$data) { + $this->response->body .= $data; + return strlen($data); + } + + /** + * Contributed by afx114 + * URL encode the parameters as per http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?Query_QueryAuth.html + * PHP's rawurlencode() follows RFC 1738, not RFC 3986 as required by Amazon. The only difference is the tilde (~), so convert it back after rawurlencode + * See: http://www.morganney.com/blog/API/AWS-Product-Advertising-API-Requires-a-Signed-Request.php + * + * @param string $var String to encode + * @return string + */ + private function __customUrlEncode($var) { + return str_replace('%7E', '~', rawurlencode($var)); + } + + /** + * Generate the auth string using Hmac-SHA256 + * + * @internal Used by SimpleDBRequest::getResponse() + * @param string $string String to sign + * @return string + */ + private function __getSignature($string) { + return base64_encode(hash_hmac('sha256', $string, $this->r53->getSecretKey(), true)); + } +} diff --git a/etc/inc/radius.inc b/etc/inc/radius.inc new file mode 100644 index 000000000..36b304a96 --- /dev/null +++ b/etc/inc/radius.inc @@ -0,0 +1,1208 @@ + + 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. + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. + + This code cannot simply be copied and put under the GNU Public License or + any other GPL-like (LGPL, GPL2) License. + + This version of RADIUS.php has been modified by + Jonathan De Graeve to integrate with M0n0wall + + Changes made include: + * StandardAttributes for M0n0wall use + * Removed internal Session-Id creation + * Adding of ReplyMessage to getAttributes() + * Adding of listAttributes() + * Adding of VENDOR Bay Networks (Nortel) + * Adding of VENDOR Nomadix + * Adding of VENDOR WISPr (Wi-Fi Alliance) + * Adding of VENDOR ChilliSpot (bandwidth-attributes only) + +*/ + +/* + pfSense_MODULE: auth +*/ + +require_once("PEAR.inc"); +require_once("radius_authentication.inc"); +require_once("radius_accounting.inc"); + +/** +* Client implementation of RADIUS. This are wrapper classes for +* the RADIUS PECL +* Provides RADIUS Authentication (RFC2865) and RADIUS Accounting (RFC2866). +* +* @package Auth_RADIUS +* @author Michael Bretterklieber +* @access public +* @version $Revision: 1.5 $ +*/ + +PEAR::loadExtension('radius'); + +/** + * class Auth_RADIUS + * + * Abstract base class for RADIUS + * + * @package Auth_RADIUS + */ +class Auth_RADIUS extends PEAR { + + /** + * List of RADIUS servers. + * @var array + * @see addServer(), putServer() + */ + var $_servers = array(); + + /** + * Path to the configuration-file. + * @var string + * @see setConfigFile() + */ + var $_configfile = null; + + /** + * Resource. + * @var resource + * @see open(), close() + */ + var $res = null; + + /** + * Username for authentication and accounting requests. + * @var string + */ + var $username = null; + + /** + * Password for plaintext-authentication (PAP). + * @var string + */ + var $password = null; + + /** + * List of known attributes. + * @var array + * @see dumpAttributes(), getAttributes() + */ + var $attributes = array(); + + /** + * List of raw attributes. + * @var array + * @see dumpAttributes(), getAttributes() + */ + var $rawAttributes = array(); + + /** + * List of raw vendor specific attributes. + * @var array + * @see dumpAttributes(), getAttributes() + */ + var $rawVendorAttributes = array(); + + /** + * Constructor + * + * Loads the RADIUS PECL/extension + * + * @return void + */ + function Auth_RADIUS() + { + $this->PEAR(); + } + + /** + * Adds a RADIUS server to the list of servers for requests. + * + * At most 10 servers may be specified. When multiple servers + * are given, they are tried in round-robin fashion until a + * valid response is received + * + * @access public + * @param string $servername Servername or IP-Address + * @param integer $port Portnumber + * @param string $sharedSecret Shared secret + * @param integer $timeout Timeout for each request + * @param integer $maxtries Max. retries for each request + * @return void + */ + function addServer($servername = 'localhost', $port = 0, $sharedSecret = 'testing123', $timeout = 3, $maxtries = 2) + { + $this->_servers[] = array($servername, $port, $sharedSecret, $timeout, $maxtries); + } + + /** + * Returns an error message, if an error occurred. + * + * @access public + * @return string + */ + function getError() + { + return radius_strerror($this->res); + } + + /** + * Sets the configuration-file. + * + * @access public + * @param string $file Path to the configuration file + * @return void + */ + function setConfigfile($file) + { + $this->_configfile = $file; + } + + /** + * Puts an attribute. + * + * @access public + * @param integer $attrib Attribute-number + * @param mixed $port Attribute-value + * @param type $type Attribute-type + * @return bool true on success, false on error + */ + function putAttribute($attrib, $value, $type = null) + { + if ($type == null) { + $type = gettype($value); + } + + switch ($type) { + case 'integer': + // Fix a conversion error so we should be able to handle 4GB values + return radius_put_int($this->res, $attrib, (float)$value); + + case 'addr': + return radius_put_addr($this->res, $attrib, $value); + + case 'string': + default: + return radius_put_attr($this->res, $attrib, $value); + } + + } + + /** + * Puts a vendor-specific attribute. + * + * @access public + * @param integer $vendor Vendor (MSoft, Cisco, ...) + * @param integer $attrib Attribute-number + * @param mixed $port Attribute-value + * @param type $type Attribute-type + * @return bool true on success, false on error + */ + function putVendorAttribute($vendor, $attrib, $value, $type = null) + { + + if ($type == null) { + $type = gettype($value); + } + + switch ($type) { + case 'integer': + return radius_put_vendor_int($this->res, $vendor, $attrib, $value); + + case 'addr': + return radius_put_vendor_addr($this->res, $vendor,$attrib, $value); + + case 'string': + default: + return radius_put_vendor_attr($this->res, $vendor, $attrib, $value); + } + + } + + /** + * Prints known attributes received from the server. + * + * @access public + */ + function dumpAttributes() + { + foreach ($this->attributes as $name => $data) { + echo "$name:$data
\n"; + } + } + + /** + * Return our know attributes array received from the server. + * + * @access public + */ + function listAttributes() + { + return $this->attributes; + } + + /** + * Overwrite this. + * + * @access public + */ + function open() + { + } + + /** + * Overwrite this. + * + * @access public + */ + function createRequest() + { + } + + /** + * Puts standard attributes. + * + * These attributes will always be present in a radius request + * + * @access public + */ + function putStandardAttributes() + { + global $config, $cpzone; + + if (!function_exists("getNasIp")) { + $ipaddr = "0.0.0.0"; + } else { + $ipaddr = getNasIP(); + } + // Add support for sending NAS-IP-Address, set this explicitly as an ip_addr + $this->putAttribute(RADIUS_NAS_IP_ADDRESS, $ipaddr, "addr"); + + // Add support for sending NAS-Identifier + if (empty($config["captiveportal"][$cpzone]["radiusnasid"])) { + $nasId = php_uname("n"); + } else { + $nasId = $config["captiveportal"][$cpzone]["radiusnasid"]; + } + $this->putAttribute(RADIUS_NAS_IDENTIFIER, $nasId); + } + + /** + * Puts custom attributes. + * + * @access public + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + } + + /** + * Configures the radius library. + * + * @access public + * @param string $servername Servername or IP-Address + * @param integer $port Portnumber + * @param string $sharedSecret Shared secret + * @param integer $timeout Timeout for each request + * @param integer $maxtries Max. retries for each request + * @return bool true on success, false on error + * @see addServer() + */ + function putServer($servername, $port = 0, $sharedsecret = 'testing123', $timeout = 3, $maxtries = 3) + { + if (!radius_add_server($this->res, $servername, $port, $sharedsecret, $timeout, $maxtries)) { + return false; + } + return true; + } + + /** + * Configures the radius library via external configurationfile + * + * @access public + * @param string $servername Servername or IP-Address + * @return bool true on success, false on error + */ + function putConfigfile($file) + { + if (!radius_config($this->res, $file)) { + return false; + } + return true; + } + + /** + * Initiates a RADIUS request. + * + * @access public + * @return bool true on success, false on errors + */ + function start() + { + if (!$this->open()) { + return false; + } + + foreach ($this->_servers as $s) { + // Servername, port, sharedsecret, timeout, retries + if (!$this->putServer($s[0], $s[1], $s[2], $s[3], $s[4])) { + return false; + } + } + + if (!empty($this->_configfile)) { + if (!$this->putConfigfile($this->_configfile)) { + return false; + } + } + + $this->createRequest(); + $this->putStandardAttributes(); + $this->putAuthAttributes(); + return true; + } + + /** + * Sends a prepared RADIUS request and waits for a response + * + * @access public + * @return mixed true on success, false on reject, PEAR_Error on error + */ + function send() + { + $req = radius_send_request($this->res); + if (!$req) { + return $this->raiseError(gettext('Error sending request:') . ' ' . $this->getError()); + } + + switch($req) { + case RADIUS_ACCESS_ACCEPT: + if (is_subclass_of($this, 'auth_radius_acct')) { + return $this->raiseError(gettext('RADIUS_ACCESS_ACCEPT is unexpected for accounting')); + } + return true; + + case RADIUS_ACCESS_REJECT: + return false; + + case RADIUS_ACCOUNTING_RESPONSE: + if (is_subclass_of($this, 'auth_radius_pap')) { + return $this->raiseError(gettext('RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication')); + } + return true; + + default: + return $this->raiseError(sprintf(gettext("Unexpected return value: %s"),$req)); + } + + } + + /** + * Reads all received attributes after sending the request. + * + * This methos stores know attributes in the property attributes, + * all attributes (including known attibutes) are stored in rawAttributes + * or rawVendorAttributes. + * NOTE: call this functio also even if the request was rejected, because the + * Server returns usualy an errormessage + * + * @access public + * @return bool true on success, false on error + */ + function getAttributes() + { + + while ($attrib = radius_get_attr($this->res)) { + + if (!is_array($attrib)) { + return false; + } + + $attr = $attrib['attr']; + $data = $attrib['data']; + + $this->rawAttributes[$attr] = $data; + + switch ($attr) { + case RADIUS_FRAMED_IP_ADDRESS: + $this->attributes['framed_ip'] = radius_cvt_addr($data); + break; + + case RADIUS_FRAMED_IP_NETMASK: + $this->attributes['framed_mask'] = radius_cvt_addr($data); + break; + + case RADIUS_FRAMED_MTU: + $this->attributes['framed_mtu'] = radius_cvt_int($data); + break; + + case RADIUS_FRAMED_COMPRESSION: + $this->attributes['framed_compression'] = radius_cvt_int($data); + break; + + case RADIUS_SESSION_TIMEOUT: + $this->attributes['session_timeout'] = radius_cvt_int($data); + break; + + case RADIUS_IDLE_TIMEOUT: + $this->attributes['idle_timeout'] = radius_cvt_int($data); + break; + + case RADIUS_SERVICE_TYPE: + $this->attributes['service_type'] = radius_cvt_int($data); + break; + + case RADIUS_CLASS: + $this->attributes['class'] = radius_cvt_int($data); + break; + + case RADIUS_FRAMED_PROTOCOL: + $this->attributes['framed_protocol'] = radius_cvt_int($data); + break; + + case RADIUS_FRAMED_ROUTING: + $this->attributes['framed_routing'] = radius_cvt_int($data); + break; + + case RADIUS_FILTER_ID: + $this->attributes['filter_id'] = radius_cvt_string($data); + break; + + case RADIUS_REPLY_MESSAGE: + $this->attributes['reply_message'] = radius_cvt_string($data); + break; + + case RADIUS_VENDOR_SPECIFIC: + $attribv = radius_get_vendor_attr($data); + if (!is_array($attribv)) { + return false; + } + + $vendor = $attribv['vendor']; + $attrv = $attribv['attr']; + $datav = $attribv['data']; + + $this->rawVendorAttributes[$vendor][$attrv] = $datav; + + if ($vendor == RADIUS_VENDOR_MICROSOFT) { + + switch ($attrv) { + case RADIUS_MICROSOFT_MS_CHAP2_SUCCESS: + $this->attributes['ms_chap2_success'] = radius_cvt_string($datav); + break; + + case RADIUS_MICROSOFT_MS_CHAP_ERROR: + $this->attributes['ms_chap_error'] = radius_cvt_string(substr($datav,1)); + break; + + case RADIUS_MICROSOFT_MS_CHAP_DOMAIN: + $this->attributes['ms_chap_domain'] = radius_cvt_string($datav); + break; + + case RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_POLICY: + $this->attributes['ms_mppe_encryption_policy'] = radius_cvt_int($datav); + break; + + case RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_TYPES: + $this->attributes['ms_mppe_encryption_types'] = radius_cvt_int($datav); + break; + + case RADIUS_MICROSOFT_MS_CHAP_MPPE_KEYS: + $demangled = radius_demangle($this->res, $datav); + $this->attributes['ms_chap_mppe_lm_key'] = substr($demangled, 0, 8); + $this->attributes['ms_chap_mppe_nt_key'] = substr($demangled, 8, RADIUS_MPPE_KEY_LEN); + break; + + case RADIUS_MICROSOFT_MS_MPPE_SEND_KEY: + $this->attributes['ms_chap_mppe_send_key'] = radius_demangle_mppe_key($this->res, $datav); + break; + + case RADIUS_MICROSOFT_MS_MPPE_RECV_KEY: + $this->attributes['ms_chap_mppe_recv_key'] = radius_demangle_mppe_key($this->res, $datav); + break; + + case RADIUS_MICROSOFT_MS_PRIMARY_DNS_SERVER: + $this->attributes['ms_primary_dns_server'] = radius_cvt_string($datav); + break; + } + } + + elseif ($vendor == 1584) { + + switch ($attrv) { + case 102: + $this->attributes['ces_group'] = radius_cvt_string($datav); + break; + } + } + + elseif ($vendor == 3309) { /* RADIUS_VENDOR_NOMADIX */ + + switch ($attrv) { + case 1: /* RADIUS_NOMADIX_BW_UP */ + $this->attributes['bw_up'] = radius_cvt_int($datav); + break; + case 2: /* RADIUS_NOMADIX_BW_DOWN */ + $this->attributes['bw_down'] = radius_cvt_int($datav); + break; + case 3: /* RADIUS_NOMADIX_URL_REDIRECTION */ + $this->attributes['url_redirection'] = radius_cvt_string($datav); + break; + case 5: /* RADIUS_NOMADIX_EXPIRATION */ + $this->attributes['expiration'] = radius_cvt_string($datav); + break; + case 7: /* RADIUS_NOMADIX_MAXBYTESUP */ + $this->attributes['maxbytesup'] = radius_cvt_int($datav); + break; + case 8: /* RADIUS_NOMADIX_MAXBYTESDOWN */ + $this->attributes['maxbytesdown'] = radius_cvt_int($datav); + break; + case 10: /* RADIUS_NOMADIX_LOGOFF_URL */ + $this->attributes['url_logoff'] = radius_cvt_string($datav); + break; + } + } + + elseif ($vendor == 14122) { /* RADIUS_VENDOR_WISPr Wi-Fi Alliance */ + + switch ($attrv) { + case 1: /* WISPr-Location-ID */ + $this->attributes['location_id'] = radius_cvt_string($datav); + break; + case 2: /* WISPr-Location-Name */ + $this->attributes['location_name'] = radius_cvt_string($datav); + break; + case 3: /* WISPr-Logoff-URL */ + $this->attributes['url_logoff'] = radius_cvt_string($datav); + break; + case 4: /* WISPr-Redirection-URL */ + $this->attributes['url_redirection'] = radius_cvt_string($datav); + break; + case 5: /* WISPr-Bandwidth-Min-Up */ + $this->attributes['bw_up_min'] = radius_cvt_int($datav); + break; + case 6: /* WISPr-Bandwidth-Min-Down */ + $this->attributes['bw_down_min'] = radius_cvt_int($datav); + break; + case 7: /* WISPr-Bandwidth-Max-Up */ + $this->attributes['bw_up'] = radius_cvt_int($datav); + break; + case 8: /* WISPr-Bandwidth-Max-Down */ + $this->attributes['bw_down'] = radius_cvt_int($datav); + break; + case 9: /* WISPr-Session-Terminate-Time */ + $this->attributes['session_terminate_time'] = radius_cvt_string($datav); + break; + case 10: /* WISPr-Session-Terminate-End-Of-Day */ + $this->attributes['session_terminate_endofday'] = radius_cvt_int($datav); + break; + case 11: /* WISPr-Billing-Class-Of-Service */ + $this->attributes['billing_class_of_service'] = radius_cvt_string($datav); + break; + } + } + + elseif ($vendor == 14559) { /* RADIUS_VENDOR_ChilliSpot */ + switch ($attrv) { + case 4: /* ChilliSpot-Bandwidth-Max-Up */ + $this->attributes['bw_up'] = radius_cvt_int($datav); + break; + case 5: /* ChilliSpot-Bandwidth-Max-Down */ + $this->attributes['bw_down'] = radius_cvt_int($datav); + break; + } + } + + elseif ($vendor == 9) { /* RADIUS_VENDOR_CISCO */ + switch ($attrv) { + case 1: /* Cisco-AVPair */ + if (!is_array($this->attributes['ciscoavpair'])) + $this->attributes['ciscoavpair'] = array(); + $this->attributes['ciscoavpair'][] = radius_cvt_string($datav); + break; + } + } + + elseif ($vendor == 8744) { /* Colubris / HP MSM wireless */ + //documented at http://bizsupport1.austin.hp.com/bc/docs/support/SupportManual/c02704528/c02704528.pdf pg 15-67 + if ($attrv == 0) { /* Colubris AV-Pair */ + $datav = explode('=', $datav); + switch ($datav[0]) { + case 'max-input-rate': + // "Controls the data rate [kbps] at which traffic can be transferred from the user to the [router]." + $this->attributes['bw_up'] = radius_cvt_int($datav[1]); + break; + case 'max-output-rate': + //"Controls the data rate [kbps] at which traffic can be transferred from the [router] to the user." + $this->attributes['bw_down'] = radius_cvt_int($datav[1]); + break; + case 'max-input-octets': + $this->attributes['maxbytesup'] = radius_cvt_int($datav[1]); + break; + case 'max-output-octets': + $this->attributes['maxbytesdown'] = radius_cvt_int($datav[1]); + break; + case 'welcome-url': + $this->attributes['url_redirection'] = radius_cvt_string($datav[1]); + break; + case 'goodbye-url': + $this->attributes['url_logoff'] = radius_cvt_string($datav[1]); + break; + } + } + } + + break; + + case 85: /* Acct-Interim-Interval: RFC 2869 */ + $this->attributes['interim_interval'] = radius_cvt_int($data); + break; + } + } + + return true; + } + + /** + * Frees resources. + * + * Calling this method is always a good idea, because all security relevant + * attributes are filled with Nullbytes to leave nothing in the mem. + * + * @access public + */ + function close() + { + if ($this->res != null) { + radius_close($this->res); + $this->res = null; + } + $this->username = str_repeat("\0", strlen($this->username)); + $this->password = str_repeat("\0", strlen($this->password)); + } + +} + +/** + * class Auth_RADIUS_PAP + * + * Class for authenticating using PAP (Plaintext) + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_PAP extends Auth_RADIUS +{ + + /** + * Constructor + * + * @param string $username Username + * @param string $password Password + * @return void + */ + function Auth_RADIUS_PAP($username = null, $password = null) + { + $this->Auth_RADIUS(); + $this->username = $username; + $this->password = $password; + } + + /** + * Creates a RADIUS resource + * + * Creates a RADIUS resource for authentication. This should be the first + * call before you make any other things with the library. + * + * @return bool true on success, false on error + */ + function open() + { + $this->res = radius_auth_open(); + if (!$this->res) { + return false; + } + return true; + } + + /** + * Creates an authentication request + * + * Creates an authentication request. + * You MUST call this method before you can put any attribute + * + * @return bool true on success, false on error + */ + function createRequest() + { + if (!radius_create_request($this->res, RADIUS_ACCESS_REQUEST)) { + return false; + } + return true; + } + + /** + * Put authentication specific attributes + * + * @return void + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + if (isset($this->password)) { + $this->putAttribute(RADIUS_USER_PASSWORD, $this->password); + } + } + +} + +/** + * class Auth_RADIUS_CHAP_MD5 + * + * Class for authenticating using CHAP-MD5 see RFC1994. + * Instead og the plaintext password the challenge and + * the response are needed. + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_CHAP_MD5 extends Auth_RADIUS_PAP +{ + /** + * 8 Bytes binary challenge + * @var string + */ + var $challenge = null; + + /** + * 16 Bytes MD5 response binary + * @var string + */ + var $response = null; + + /** + * Id of the authentication request. Should incremented after every request. + * @var integer + */ + var $chapid = 1; + + /** + * Constructor + * + * @param string $username Username + * @param string $challenge 8 Bytes Challenge (binary) + * @param integer $chapid Requestnumber + * @return void + */ + function Auth_RADIUS_CHAP_MD5($username = null, $challenge = null, $chapid = 1) + { + $this->Auth_RADIUS_PAP(); + $this->username = $username; + $this->challenge = $challenge; + $this->chapid = $chapid; + } + + /** + * Put CHAP-MD5 specific attributes + * + * For authenticating using CHAP-MD5 via RADIUS you have to put the challenge + * and the response. The chapid is inserted in the first byte of the response. + * + * @return void + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + if (isset($this->response)) { + $response = pack('C', $this->chapid) . $this->response; + $this->putAttribute(RADIUS_CHAP_PASSWORD, $response); + } + if (isset($this->challenge)) { + $this->putAttribute(RADIUS_CHAP_CHALLENGE, $this->challenge); + } + } + + /** + * Frees resources. + * + * Calling this method is always a good idea, because all security relevant + * attributes are filled with Nullbytes to leave nothing in the mem. + * + * @access public + */ + function close() + { + Auth_RADIUS_PAP::close(); + $this->challenge = str_repeat("\0", strlen($this->challenge)); + $this->response = str_repeat("\0", strlen($this->response)); + } + +} + +/** + * class Auth_RADIUS_MSCHAPv1 + * + * Class for authenticating using MS-CHAPv1 see RFC2433 + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_MSCHAPv1 extends Auth_RADIUS_CHAP_MD5 +{ + /** + * LAN-Manager-Response + * @var string + */ + var $lmResponse = null; + + /** + * Wether using deprecated LM-Responses or not. + * 0 = use LM-Response, 1 = use NT-Response + * @var bool + */ + var $flags = 1; + + /** + * Put MS-CHAPv1 specific attributes + * + * For authenticating using MS-CHAPv1 via RADIUS you have to put the challenge + * and the response. The response has this structure: + * struct rad_mschapvalue { + * u_char ident; + * u_char flags; + * u_char lm_response[24]; + * u_char response[24]; + * }; + * + * @return void + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + if (isset($this->response) || isset($this->lmResponse)) { + $lmResp = isset($this->lmResponse) ? $this->lmResponse : str_repeat ("\0", 24); + $ntResp = isset($this->response) ? $this->response : str_repeat ("\0", 24); + $resp = pack('CC', $this->chapid, $this->flags) . $lmResp . $ntResp; + $this->putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP_RESPONSE, $resp); + } + if (isset($this->challenge)) { + $this->putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP_CHALLENGE, $this->challenge); + } + } +} + +/** + * class Auth_RADIUS_MSCHAPv2 + * + * Class for authenticating using MS-CHAPv2 see RFC2759 + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_MSCHAPv2 extends Auth_RADIUS_MSCHAPv1 +{ + /** + * 16 Bytes binary challenge + * @var string + */ + var $challenge = null; + + /** + * 16 Bytes binary Peer Challenge + * @var string + */ + var $peerChallenge = null; + + /** + * Put MS-CHAPv2 specific attributes + * + * For authenticating using MS-CHAPv1 via RADIUS you have to put the challenge + * and the response. The response has this structure: + * struct rad_mschapv2value { + * u_char ident; + * u_char flags; + * u_char pchallenge[16]; + * u_char reserved[8]; + * u_char response[24]; + * }; + * where pchallenge is the peer challenge. Like for MS-CHAPv1 we set the flags field to 1. + * @return void + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + if (isset($this->response) && isset($this->peerChallenge)) { + // Response: chapid, flags (1 = use NT Response), Peer challenge, reserved, Response + $resp = pack('CCa16a8a24',$this->chapid , 1, $this->peerChallenge, str_repeat("\0", 8), $this->response); + $this->putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP2_RESPONSE, $resp); + } + if (isset($this->challenge)) { + $this->putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP_CHALLENGE, $this->challenge); + } + } + + /** + * Frees resources. + * + * Calling this method is always a good idea, because all security relevant + * attributes are filled with Nullbytes to leave nothing in the mem. + * + * @access public + */ + function close() + { + Auth_RADIUS_MSCHAPv1::close(); + $this->peerChallenge = str_repeat("\0", strlen($this->peerChallenge)); + } +} + +/** + * class Auth_RADIUS_Acct + * + * Class for RADIUS accounting + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct extends Auth_RADIUS +{ + /** + * Defines where the Authentication was made, possible values are: + * RADIUS_AUTH_RADIUS, RADIUS_AUTH_LOCAL, RADIUS_AUTH_REMOTE + * @var integer + */ + var $authentic = null; + + /** + * Defines the type of the accounting request, on of: + * RADIUS_START, RADIUS_STOP, RADIUS_ACCOUNTING_ON, RADIUS_ACCOUNTING_OFF + * @var integer + */ + var $status_type = null; + + /** + * The time the user was logged in in seconds + * @var integer + */ + var $session_time = null; + + /** + * A uniq identifier for the session of the user, maybe the PHP-Session-Id + * @var string + */ + var $session_id = null; + + /** + * Constructor + * + * This function is disabled for M0n0wall since we use our own session_id + * + * Generates a predefined session_id. We use the Remote-Address, the PID, and the Current user. + * @return void + * + function Auth_RADIUS_Acct() + { + $this->Auth_RADIUS(); + + if (isset($_SERVER)) { + $var = &$_SERVER; + } else { + $var = &$GLOBALS['HTTP_SERVER_VARS']; + } + + $this->session_id = sprintf("%s:%d-%s", isset($var['REMOTE_ADDR']) ? $var['REMOTE_ADDR'] : '127.0.0.1' , getmypid(), get_current_user()); + } + */ + + /** + * Constructor + * + */ + + function Auth_RADIUS_Acct() + { + $this->Auth_RADIUS(); + } + + /** + * Creates a RADIUS resource + * + * Creates a RADIUS resource for accounting. This should be the first + * call before you make any other things with the library. + * + * @return bool true on success, false on error + */ + function open() + { + $this->res = radius_acct_open(); + if (!$this->res) { + return false; + } + return true; + } + + /** + * Creates an accounting request + * + * Creates an accounting request. + * You MUST call this method before you can put any attribute. + * + * @return bool true on success, false on error + */ + function createRequest() + { + if (!radius_create_request($this->res, RADIUS_ACCOUNTING_REQUEST)) { + return false; + } + return true; + } + + /** + * Put attributes for accounting. + * + * Here we put some accounting values. There many more attributes for accounting, + * but for web-applications only certain attributes make sense. + * @return void + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + $this->putAttribute(RADIUS_ACCT_STATUS_TYPE, $this->status_type); + //if (isset($this->session_time) && $this->status_type == RADIUS_STOP) { + if (isset($this->session_time)) { + $this->putAttribute(RADIUS_ACCT_SESSION_TIME, $this->session_time); + } + if (isset($this->authentic)) { + $this->putAttribute(RADIUS_ACCT_AUTHENTIC, $this->authentic); + } + + $this->putStandardAttributes(); + } + +} + +/** + * class Auth_RADIUS_Acct_Start + * + * Class for RADIUS accounting. Its usualy used, after the user has logged in. + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct_Start extends Auth_RADIUS_Acct +{ + /** + * Defines the type of the accounting request. + * It is set to RADIUS_START by default in this class. + * @var integer + */ + var $status_type = RADIUS_START; +} + +/** + * class Auth_RADIUS_Acct_Start + * + * Class for RADIUS accounting. Its usualy used, after the user has logged out. + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct_Stop extends Auth_RADIUS_Acct +{ + /** + * Defines the type of the accounting request. + * It is set to RADIUS_STOP by default in this class. + * @var integer + */ + var $status_type = RADIUS_STOP; +} + +if (!defined('RADIUS_UPDATE')) + define('RADIUS_UPDATE', 3); + +/** + * class Auth_RADIUS_Acct_Update + * + * Class for interim RADIUS accounting updates. + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct_Update extends Auth_RADIUS_Acct +{ + /** + * Defines the type of the accounting request. + * It is set to RADIUS_UPDATE by default in this class. + * @var integer + */ + var $status_type = RADIUS_UPDATE; +} + +/** + * class Auth_RADIUS_Acct_On + * + * Class for sending Accounting-On updates + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct_On extends Auth_RADIUS_Acct +{ + /** + * Defines the type of the accounting request. + * It is set to RADIUS_ACCOUNTING_ON by default in this class. + * @var integer + */ + var $status_type = RADIUS_ACCOUNTING_ON; +} + +/** + * class Auth_RADIUS_Acct_Off + * + * Class for sending Accounting-Off updates + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct_Off extends Auth_RADIUS_Acct +{ + /** + * Defines the type of the accounting request. + * It is set to RADIUS_ACCOUNTING_OFF by default in this class. + * @var integer + */ + var $status_type = RADIUS_ACCOUNTING_OFF; +} + +?> diff --git a/etc/inc/rrd.inc b/etc/inc/rrd.inc new file mode 100644 index 000000000..6e6481534 --- /dev/null +++ b/etc/inc/rrd.inc @@ -0,0 +1,964 @@ + + 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. + + */ + +/* + pfSense_BUILDER_BINARIES: /bin/rm /usr/bin/nice /usr/local/bin/rrdtool /bin/cd + pfSense_MODULE: rrd +*/ + +/* include all configuration functions */ + +function dump_rrd_to_xml($rrddatabase, $xmldumpfile) { + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + unlink_if_exists($xmldumpfile); + + exec("$rrdtool dump " . escapeshellarg($rrddatabase) . " {$xmldumpfile} 2>&1", $dumpout, $dumpret); + if ($dumpret <> 0) { + $dumpout = implode(" ", $dumpout); + log_error(sprintf(gettext('RRD dump failed exited with %1$s, the error is: %2$s'), $dumpret, $dumpout)); + } + return($dumpret); +} + +function restore_rrd() { + global $g, $config; + + $rrddbpath = "/var/db/rrd/"; + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + + $rrdrestore = ""; + $rrdreturn = ""; + if (file_exists("{$g['cf_conf_path']}/rrd.tgz")) { + foreach (glob("{$rrddbpath}/*.xml") as $xml_file) { + @unlink($xml_file); + } + $_gb = exec("cd /;LANG=C /usr/bin/tar -xzf {$g['cf_conf_path']}/rrd.tgz 2>&1", $rrdrestore, $rrdreturn); + $rrdrestore = implode(" ", $rrdrestore); + if($rrdreturn != 0) { + log_error("RRD restore failed exited with $rrdreturn, the error is: $rrdrestore\n"); + } + unset($rrdrestore); + foreach (glob("{$rrddbpath}/*.xml") as $xml_file) { + $rrd_file = preg_replace('/\.xml$/', ".rrd", $xml_file); + if (file_exists("{$rrd_file}")) { + @unlink($rrd_file); + } + $output = array(); + $status = null; + $_gb = exec("$rrdtool restore -f '{$xml_file}' '{$rrd_file}'", $output, $status); + if ($status) { + log_error("rrdtool restore -f '{$xml_file}' '{$rrd_file}' failed returning {$status}."); + continue; + } + unset($output); + @unlink($xml_file); + } + /* If this backup is still there on a full install, but we aren't going to use ram disks, remove the archive since this is a transition. */ + if (($g['platform'] == "pfSense") && !isset($config['system']['use_mfs_tmpvar'])) { + unlink_if_exists("{$g['cf_conf_path']}/rrd.tgz"); + } + return true; + } + return false; +} + +function create_new_rrd($rrdcreatecmd) { + $rrdcreateoutput = array(); + $rrdcreatereturn = 0; + $_gb = exec("$rrdcreatecmd 2>&1", $rrdcreateoutput, $rrdcreatereturn); + if ($rrdcreatereturn <> 0) { + $rrdcreateoutput = implode(" ", $rrdcreateoutput); + log_error(sprintf(gettext('RRD create failed exited with %1$s, the error is: %2$s'), $rrdcreatereturn, $rrdcreateoutput)); + } + unset($rrdcreateoutput); + return $rrdcreatereturn; +} + +function migrate_rrd_format($rrdoldxml, $rrdnewxml) { + if(!file_exists("/tmp/rrd_notice_sent.txt")) { + $_gb = exec("echo 'Converting RRD configuration to new format. This might take a bit...' | wall"); + @touch("/tmp/rrd_notice_sent.txt"); + } + $numrraold = count($rrdoldxml['rra']); + $numrranew = count($rrdnewxml['rra']); + $numdsold = count($rrdoldxml['ds']); + $numdsnew = count($rrdnewxml['ds']); + log_error(sprintf(gettext('Import RRD has %1$s DS values and %2$s RRA databases, new format RRD has %3$s DS values and %4$s RRA databases'), $numdsold, $numrraold, $numdsnew ,$numrranew)); + + /* add data sources not found in the old array from the new array */ + $i = 0; + foreach($rrdnewxml['ds'] as $ds) { + if(!is_array($rrdoldxml['ds'][$i])) { + $rrdoldxml['ds'][$i] = $rrdnewxml['ds'][$i]; + /* set unknown values to 0 */ + $rrdoldxml['ds'][$i]['last_ds'] = " 0.0000000000e+00 "; + $rrdoldxml['ds'][$i]['value'] = " 0.0000000000e+00 "; + $rrdoldxml['ds'][$i]['unknown_sec'] = "0"; + } + $i++; + } + + $i = 0; + $rracountold = count($rrdoldxml['rra']); + $rracountnew = count($rrdnewxml['rra']); + /* process each RRA, which contain a database */ + foreach($rrdnewxml['rra'] as $rra) { + if(!is_array($rrdoldxml['rra'][$i])) { + $rrdoldxml['rra'][$i] = $rrdnewxml['rra'][$i]; + } + + $d = 0; + /* process cdp_prep */ + $cdp_prep = $rra['cdp_prep']; + foreach($cdp_prep['ds'] as $ds) { + if(!is_array($rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d])) { + $rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d] = $rrdnewxml['rra'][$i]['cdp_prep']['ds'][$d]; + $rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d]['primary_value'] = " 0.0000000000e+00 "; + $rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d]['secondary_value'] = " 0.0000000000e+00 "; + $rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d]['value'] = " 0.0000000000e+00 "; + $rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d]['unknown_datapoints'] = "0"; + } + $d++; + } + + /* process database */ + $rows = $rra['database']; + $k = 0; + $rowcountold = count($rrdoldxml['rra'][$i]['database']['row']); + $rowcountnew = count($rrdnewxml['rra'][$i]['database']['row']); + $rowcountdiff = $rowcountnew - $rowcountold; + /* save old rows for a bit before we put the required empty rows before it */ + $rowsdata = $rows; + $rowsempty = array(); + $r = 0; + while($r < $rowcountdiff) { + $rowsempty[] = $rrdnewxml['rra'][$i]['database']['row'][$r]; + $r++; + } + $rows = $rowsempty + $rowsdata; + /* now foreach the rows in the database */ + foreach($rows['row'] as $row) { + if(!is_array($rrdoldxml['rra'][$i]['database']['row'][$k])) { + $rrdoldxml['rra'][$i]['database']['row'][$k] = $rrdnewxml['rra'][$i]['database']['row'][$k]; + } + $m = 0; + $vcountold = count($rrdoldxml['rra'][$i]['database']['row'][$k]['v']); + $vcountnew = count($rrdnewxml['rra'][$i]['database']['row'][$k]['v']); + foreach($row['v'] as $value) { + if(empty($rrdoldxml['rra'][$i]['database']['row'][$k]['v'][$m])) { + if(isset($valid)) { + $rrdoldxml['rra'][$i]['database']['row'][$k]['v'][$m] = "0.0000000000e+00 "; + } else { + $rrdoldxml['rra'][$i]['database']['row'][$k]['v'][$m] = $rrdnewxml['rra'][$i]['database']['row'][$k]['v'][$m]; + } + } else { + if($value <> " NaN ") { + $valid = true; + } else { + $valid = false; + } + } + $m++; + } + $k++; + } + $i++; + } + + $numrranew = count($rrdoldxml['rra']); + $numdsnew = count($rrdoldxml['ds']); + log_error(sprintf(gettext('The new RRD now has %1$s DS values and %2$s RRA databases'), $numdsnew, $numrranew)); + return $rrdoldxml; +} + +function enable_rrd_graphing() { + global $config, $g, $altq_list_queues; + + if($g['booting']) + echo gettext("Generating RRD graphs..."); + + $rrddbpath = "/var/db/rrd/"; + $rrdgraphpath = "/usr/local/www/rrd"; + + $traffic = "-traffic.rrd"; + $packets = "-packets.rrd"; + $states = "-states.rrd"; + $wireless = "-wireless.rrd"; + $queues = "-queues.rrd"; + $queuesdrop = "-queuedrops.rrd"; + $spamd = "-spamd.rrd"; + $proc = "-processor.rrd"; + $mem = "-memory.rrd"; + $mbuf = "-mbuf.rrd"; + $cellular = "-cellular.rrd"; + $vpnusers = "-vpnusers.rrd"; + $captiveportalconcurrent = "-concurrent.rrd"; + $captiveportalloggedin = "-loggedin.rrd"; + $ntpd = "ntpd.rrd"; + + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + $netstat = "/usr/bin/netstat"; + $awk = "/usr/bin/awk"; + $tar = "/usr/bin/tar"; + $pfctl = "/sbin/pfctl"; + $sysctl = "/sbin/sysctl"; + $php = "/usr/local/bin/php"; + $cpustats = "/usr/local/sbin/cpustats"; + $spamd_gather = "/usr/local/bin/spamd_gather_stats.php"; + $ifconfig = "/sbin/ifconfig"; + $captiveportal_gather = "/usr/local/bin/captiveportal_gather_stats.php"; + $ntpq = "/usr/local/sbin/ntpq"; + + $rrdtrafficinterval = 60; + $rrdwirelessinterval = 60; + $rrdqueuesinterval = 60; + $rrdqueuesdropinterval = 60; + $rrdpacketsinterval = 60; + $rrdstatesinterval = 60; + $rrdspamdinterval = 60; + $rrdlbpoolinterval = 60; + $rrdprocinterval = 60; + $rrdmeminterval = 60; + $rrdmbufinterval = 60; + $rrdcellularinterval = 60; + $rrdvpninterval = 60; + $rrdcaptiveportalinterval = 60; + $rrdntpdinterval = 60; + + $trafficvalid = $rrdtrafficinterval * 2; + $wirelessvalid = $rrdwirelessinterval * 2; + $queuesvalid = $rrdqueuesinterval * 2; + $queuesdropvalid = $rrdqueuesdropinterval * 2; + $packetsvalid = $rrdpacketsinterval * 2; + $statesvalid = $rrdstatesinterval*2; + $spamdvalid = $rrdspamdinterval * 2; + $lbpoolvalid = $rrdlbpoolinterval * 2; + $procvalid = $rrdlbpoolinterval * 2; + $memvalid = $rrdmeminterval * 2; + $mbufvalid = $rrdmbufinterval * 2; + $cellularvalid = $rrdcellularinterval * 2; + $vpnvalid = $rrdvpninterval * 2; + $captiveportalvalid = $rrdcaptiveportalinterval * 2; + $ntpdvalid = $rrdntpdinterval * 2; + + /* Assume 2*10GigE for now */ + $downstream = 2500000000; + $upstream = 2500000000; + + /* read the shaper config */ + read_altq_config(); + + if (isset ($config['rrd']['enable'])) { + + /* create directory if needed */ + if (!is_dir($rrddbpath)) { + mkdir($rrddbpath, 0775); + } + chown($rrddbpath, "nobody"); + + if ($g['booting']) { + restore_rrd(); + } + + /* db update script */ + $rrdupdatesh = "#!/bin/sh\n"; + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "export TERM=dumb\n"; + $rrdupdatesh .= "\n"; + $rrdupdatesh .= 'echo $$ > ' . $g['varrun_path'] . '/updaterrd.sh.pid'; + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "counter=1\n"; + $rrdupdatesh .= "while [ \"\$counter\" -ne 0 ]\n"; + $rrdupdatesh .= "do\n"; + $rrdupdatesh .= ""; + + $i = 0; + $ifdescrs = get_configured_interface_with_descr(); + /* IPsec counters */ + $ifdescrs['ipsec'] = "IPsec"; + /* OpenVPN server counters */ + if(is_array($config['openvpn']['openvpn-server'])) { + foreach($config['openvpn']['openvpn-server'] as $server) { + $serverid = "ovpns" . $server['vpnid']; + $ifdescrs[$serverid] = "{$server['description']}"; + } + } + + /* process all real and pseudo interfaces */ + foreach ($ifdescrs as $ifname => $ifdescr) { + $temp = get_real_interface($ifname); + if($temp <> "") { + $realif = $temp; + } + + /* TRAFFIC, set up the rrd file */ + if (!file_exists("$rrddbpath$ifname$traffic")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$traffic --step $rrdtrafficinterval "; + $rrdcreate .= "DS:inpass:COUNTER:$trafficvalid:0:$downstream "; + $rrdcreate .= "DS:outpass:COUNTER:$trafficvalid:0:$upstream "; + $rrdcreate .= "DS:inblock:COUNTER:$trafficvalid:0:$downstream "; + $rrdcreate .= "DS:outblock:COUNTER:$trafficvalid:0:$upstream "; + $rrdcreate .= "DS:inpass6:COUNTER:$trafficvalid:0:$downstream "; + $rrdcreate .= "DS:outpass6:COUNTER:$trafficvalid:0:$upstream "; + $rrdcreate .= "DS:inblock6:COUNTER:$trafficvalid:0:$downstream "; + $rrdcreate .= "DS:outblock6:COUNTER:$trafficvalid:0:$upstream "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$traffic N:U:U:U:U:U:U:U:U"); + } + + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling traffic for interface $ifname $realif IPv4/IPv6 counters \n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$traffic N:"; + $rrdupdatesh .= "`$pfctl -vvsI -i {$realif} | awk '\\\n"; + $rrdupdatesh .= "/In4\/Pass/ { b4pi = \$6 };/Out4\/Pass/ { b4po = \$6 };/In4\/Block/ { b4bi = \$6 };/Out4\/Block/ { b4bo = \$6 };\\\n"; + $rrdupdatesh .= "/In6\/Pass/ { b6pi = \$6 };/Out6\/Pass/ { b6po = \$6 };/In6\/Block/ { b6bi = \$6 };/Out6\/Block/ { b6bo = \$6 };\\\n"; + $rrdupdatesh .= "END {print b4pi \":\" b4po \":\" b4bi \":\" b4bo \":\" b6pi \":\" b6po \":\" b6bi \":\" b6bo};'`\n"; + + /* PACKETS, set up the rrd file */ + if (!file_exists("$rrddbpath$ifname$packets")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$packets --step $rrdpacketsinterval "; + $rrdcreate .= "DS:inpass:COUNTER:$packetsvalid:0:$downstream "; + $rrdcreate .= "DS:outpass:COUNTER:$packetsvalid:0:$upstream "; + $rrdcreate .= "DS:inblock:COUNTER:$packetsvalid:0:$downstream "; + $rrdcreate .= "DS:outblock:COUNTER:$packetsvalid:0:$upstream "; + $rrdcreate .= "DS:inpass6:COUNTER:$packetsvalid:0:$downstream "; + $rrdcreate .= "DS:outpass6:COUNTER:$packetsvalid:0:$upstream "; + $rrdcreate .= "DS:inblock6:COUNTER:$packetsvalid:0:$downstream "; + $rrdcreate .= "DS:outblock6:COUNTER:$packetsvalid:0:$upstream "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$packets N:U:U:U:U:U:U:U:U"); + } + + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling packets for interface $ifname $realif \n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$packets N:"; + $rrdupdatesh .= "`$pfctl -vvsI -i {$realif} | awk '\\\n"; + $rrdupdatesh .= "/In4\/Pass/ { b4pi = \$4 };/Out4\/Pass/ { b4po = \$4 };/In4\/Block/ { b4bi = \$4 };/Out4\/Block/ { b4bo = \$4 };\\\n"; + $rrdupdatesh .= "/In6\/Pass/ { b6pi = \$4 };/Out6\/Pass/ { b6po = \$4 };/In6\/Block/ { b6bi = \$4 };/Out6\/Block/ { b6bo = \$4 };\\\n"; + $rrdupdatesh .= "END {print b4pi \":\" b4po \":\" b4bi \":\" b4bo \":\" b6pi \":\" b6po \":\" b6bi \":\" b6bo};'`\n"; + + /* WIRELESS, set up the rrd file */ + if($config['interfaces'][$ifname]['wireless']['mode'] == "bss") { + if (!file_exists("$rrddbpath$ifname$wireless")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$wireless --step $rrdwirelessinterval "; + $rrdcreate .= "DS:snr:GAUGE:$wirelessvalid:0:1000 "; + $rrdcreate .= "DS:rate:GAUGE:$wirelessvalid:0:1000 "; + $rrdcreate .= "DS:channel:GAUGE:$wirelessvalid:0:1000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$wireless N:U:U:U"); + } + + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling wireless for interface $ifname $realif \n"; + $rrdupdatesh .= "WIFI=`$ifconfig {$realif} list sta| $awk 'gsub(\"M\", \"\") {getline 2;print substr(\$5, 0, length(\$5)-2) \":\" $4 \":\" $3}'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$wireless N:\${WIFI}\n"; + } + + /* OpenVPN, set up the rrd file */ + if(stristr($ifname, "ovpns")) { + if (!file_exists("$rrddbpath$ifname$vpnusers")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$vpnusers --step $rrdvpninterval "; + $rrdcreate .= "DS:users:GAUGE:$vpnvalid:0:10000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$vpnusers N:U"); + } + + if(is_array($config['openvpn']['openvpn-server'])) { + foreach($config['openvpn']['openvpn-server'] as $server) { + if("ovpns{$server['vpnid']}" == $ifname) { + $port = $server['local_port']; + $vpnid = $server['vpnid']; + } + } + } + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling vpn users for interface $ifname $realif port $port\n"; + $rrdupdatesh .= "list_current_users() {\n"; + $rrdupdatesh .= " sleep 0.2\n"; + $rrdupdatesh .= " echo \"status 2\"\n"; + $rrdupdatesh .= " sleep 0.2\n"; + $rrdupdatesh .= " echo \"quit\"\n"; + $rrdupdatesh .= "}\n"; + $rrdupdatesh .= "OVPN=`list_current_users | nc -U {$g['varetc_path']}/openvpn/server{$vpnid}.sock | awk -F\",\" '/^CLIENT_LIST/ {print \$2}' | wc -l | awk '{print $1}'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$vpnusers N:\${OVPN}\n"; + } + + /* QUEUES, set up the queues databases */ + if ($altq_list_queues[$ifname]) { + $altq =& $altq_list_queues[$ifname]; + /* NOTE: Is it worth as its own function?! */ + switch ($altq->GetBwscale()) { + case "Gb": + $factor = 1024 * 1024 * 1024; + break; + case "Mb": + $factor = 1024 * 1024; + break; + case "Kb": + $factor = 1024; + break; + case "b": + default: + $factor = 1; + break; + } + $qbandwidth = $altq->GetBandwidth() * $factor; + if ($qbandwidth <=0) { + $qbandwidth = 100 * 1000 * 1000; /* 100Mbit */ + } + $qlist =& $altq->get_queue_list($notused); + if (!file_exists("$rrddbpath$ifname$queues")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$queues --step $rrdqueuesinterval "; + /* loop list of shaper queues */ + $q = 0; + foreach ($qlist as $qname => $q) { + $rrdcreate .= "DS:$qname:COUNTER:$queuesvalid:0:$qbandwidth "; + } + + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + if (!file_exists("$rrddbpath$ifname$queuesdrop")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$queuesdrop --step $rrdqueuesdropinterval "; + /* loop list of shaper queues */ + $q = 0; + foreach ($qlist as $qname => $q) { + $rrdcreate .= "DS:$qname:COUNTER:$queuesdropvalid:0:$qbandwidth "; + } + + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + if($g['booting']) { + $rrdqcommand = "-t "; + $rrducommand = "N"; + $qi = 0; + foreach ($qlist as $qname => $q) { + if($qi == 0) { + $rrdqcommand .= "{$qname}"; + } else { + $rrdqcommand .= ":{$qname}"; + } + $qi++; + $rrducommand .= ":U"; + } + mwexec("$rrdtool update $rrddbpath$ifname$queues $rrdqcommand $rrducommand"); + mwexec("$rrdtool update $rrddbpath$ifname$queuesdrop $rrdqcommand $rrducommand"); + } + + /* awk function to gather shaper data */ + /* yes, it's special */ + $rrdupdatesh .= "` pfctl -vsq -i {$realif} | awk 'BEGIN {printf \"$rrdtool update $rrddbpath$ifname$queues \" } "; + $rrdupdatesh .= "{ "; + $rrdupdatesh .= "if ((\$1 == \"queue\") && ( \$2 ~ /^q/ )) { "; + $rrdupdatesh .= " dsname = dsname \":\" \$2 ; "; + $rrdupdatesh .= " q=1; "; + $rrdupdatesh .= "} "; + $rrdupdatesh .= " else if ((\$4 == \"bytes:\") && ( q == 1 ) ) { "; + $rrdupdatesh .= " dsdata = dsdata \":\" \$5 ; "; + $rrdupdatesh .= " q=0; "; + $rrdupdatesh .= "} "; + $rrdupdatesh .= "} END { "; + $rrdupdatesh .= " dsname = substr(dsname,2); "; + $rrdupdatesh .= " dsdata = substr(dsdata,2); "; + $rrdupdatesh .= " printf \"-t \" dsname \" N:\" dsdata }' "; + $rrdupdatesh .= " dsname=\"\" dsdata=\"\"`\n\n"; + + $rrdupdatesh .= "` pfctl -vsq -i {$realif} | awk 'BEGIN {printf \"$rrdtool update $rrddbpath$ifname$queuesdrop \" } "; + $rrdupdatesh .= "{ "; + $rrdupdatesh .= "if ((\$1 == \"queue\") && ( \$2 ~ /^q/ )) { "; + $rrdupdatesh .= " dsname = dsname \":\" \$2 ; "; + $rrdupdatesh .= " q=1; "; + $rrdupdatesh .= "} "; + $rrdupdatesh .= " else if ((\$4 == \"bytes:\") && ( q == 1 ) ) { "; + $rrdupdatesh .= " dsdata = dsdata \":\" \$8 ; "; + $rrdupdatesh .= " q=0; "; + $rrdupdatesh .= "} "; + $rrdupdatesh .= "} END { "; + $rrdupdatesh .= " dsname = substr(dsname,2); "; + $rrdupdatesh .= " dsdata = substr(dsdata,2); "; + $rrdupdatesh .= " printf \"-t \" dsname \" N:\" dsdata }' "; + $rrdupdatesh .= " dsname=\"\" dsdata=\"\"`\n\n"; + } + + /* 3G interfaces */ + if(preg_match("/ppp[0-9]+/i", $realif)) { + if (!file_exists("$rrddbpath$ifname$cellular")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$cellular --step $rrdcellularinterval "; + $rrdcreate .= "DS:rssi:GAUGE:$cellularvalid:0:100 "; + $rrdcreate .= "DS:upstream:GAUGE:$cellularvalid:0:100000000 "; + $rrdcreate .= "DS:downstream:GAUGE:$cellularvalid:0:100000000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$cellular N:U:U:U"); + } + + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling 3G\n"; + $rrdupdatesh .= "GSTATS=`awk -F, 'getline 2 {print \$2 \":\" \$8 \":\" \$9}' < /tmp/3gstats.$ifname`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$cellular N:\"\$GSTATS\""; + } + + } + $i++; + + /* System only statistics */ + $ifname = "system"; + + /* STATES, create pf states database */ + if(! file_exists("$rrddbpath$ifname$states")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$states --step $rrdstatesinterval "; + $rrdcreate .= "DS:pfrate:GAUGE:$statesvalid:0:10000000 "; + $rrdcreate .= "DS:pfstates:GAUGE:$statesvalid:0:10000000 "; + $rrdcreate .= "DS:pfnat:GAUGE:$statesvalid:0:10000000 "; + $rrdcreate .= "DS:srcip:GAUGE:$statesvalid:0:10000000 "; + $rrdcreate .= "DS:dstip:GAUGE:$statesvalid:0:10000000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$states N:U:U:U:U:U"); + } + + /* the pf states gathering function. */ + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "pfctl_si_out=\"` $pfctl -si > /tmp/pfctl_si_out `\"\n"; + $rrdupdatesh .= "pfctl_ss_out=\"` $pfctl -ss > /tmp/pfctl_ss_out`\"\n"; + $rrdupdatesh .= "pfrate=\"` cat /tmp/pfctl_si_out | egrep \"inserts|removals\" | awk '{ pfrate = \$3 + pfrate } {print pfrate}'|tail -1 `\"\n"; + $rrdupdatesh .= "pfstates=\"` cat /tmp/pfctl_ss_out | egrep -v \"<\\-.*?<\\-|\\->.*?\\->\" | wc -l|sed 's/ //g'`\"\n"; + $rrdupdatesh .= "pfnat=\"` cat /tmp/pfctl_ss_out | egrep '<\\-.*?<\\-|\\->.*?\\->' | wc -l|sed 's/ //g' `\"\n"; + $rrdupdatesh .= "srcip=\"` cat /tmp/pfctl_ss_out | egrep -v '<\\-.*?<\\-|\\->.*?\\->' | grep '\\->' | awk '{print \$3}' | awk -F: '{print \$1}' | sort -u|wc -l|sed 's/ //g' `\"\n"; + $rrdupdatesh .= "dstip=\"` cat /tmp/pfctl_ss_out | egrep -v '<\\-.*?<\\-|\\->.*?\\->' | grep '<\\-' | awk '{print \$3}' | awk -F: '{print \$1}' | sort -u|wc -l|sed 's/ //g' `\"\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$states N:\$pfrate:\$pfstates:\$pfnat:\$srcip:\$dstip\n\n"; + + /* End pf states statistics */ + + /* CPU, create CPU statistics database */ + if(! file_exists("$rrddbpath$ifname$proc")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$proc --step $rrdprocinterval "; + $rrdcreate .= "DS:user:GAUGE:$procvalid:0:10000000 "; + $rrdcreate .= "DS:nice:GAUGE:$procvalid:0:10000000 "; + $rrdcreate .= "DS:system:GAUGE:$procvalid:0:10000000 "; + $rrdcreate .= "DS:interrupt:GAUGE:$procvalid:0:10000000 "; + $rrdcreate .= "DS:processes:GAUGE:$procvalid:0:10000000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$proc N:U:U:U:U:U"); + } + + /* the CPU stats gathering function. */ + $rrdupdatesh .= "CPU=`$cpustats | cut -f1-4 -d':'`\n"; + /* Using ps uxaH will count all processes including system threads. Top was undercounting. */ + $rrdupdatesh .= "PROCS=`ps uxaH | wc -l | awk '{print \$1;}'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$proc N:\${CPU}:\${PROCS}\n"; + + /* End CPU statistics */ + + /* Memory, create Memory statistics database */ + if(! file_exists("$rrddbpath$ifname$mem")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$mem --step $rrdmeminterval "; + $rrdcreate .= "DS:active:GAUGE:$memvalid:0:10000000 "; + $rrdcreate .= "DS:inactive:GAUGE:$memvalid:0:10000000 "; + $rrdcreate .= "DS:free:GAUGE:$memvalid:0:10000000 "; + $rrdcreate .= "DS:cache:GAUGE:$memvalid:0:10000000 "; + $rrdcreate .= "DS:wire:GAUGE:$memvalid:0:10000000 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284"; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$mem N:U:U:U:U:U"); + } + + /* the Memory stats gathering function. */ + $rrdupdatesh .= "MEM=`$sysctl -n vm.stats.vm.v_page_count vm.stats.vm.v_active_count vm.stats.vm.v_inactive_count vm.stats.vm.v_free_count vm.stats.vm.v_cache_count vm.stats.vm.v_wire_count | "; + $rrdupdatesh .= " $awk '{getline active;getline inactive;getline free;getline cache;getline wire;printf "; + $rrdupdatesh .= "((active/$0) * 100)\":\"((inactive/$0) * 100)\":\"((free/$0) * 100)\":\"((cache/$0) * 100)\":\"(wire/$0 * 100)}'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$mem N:\${MEM}\n"; + + /* End Memory statistics */ + + /* mbuf, create mbuf statistics database */ + if(! file_exists("$rrddbpath$ifname$mbuf")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$mbuf --step $rrdmbufinterval "; + $rrdcreate .= "DS:current:GAUGE:$mbufvalid:0:10000000 "; + $rrdcreate .= "DS:cache:GAUGE:$mbufvalid:0:10000000 "; + $rrdcreate .= "DS:total:GAUGE:$mbufvalid:0:10000000 "; + $rrdcreate .= "DS:max:GAUGE:$mbufvalid:0:10000000 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284"; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$mbuf N:U:U:U:U"); + } + + /* the mbuf stats gathering function. */ + $rrdupdatesh .= "MBUF=`$netstat -m | "; + $rrdupdatesh .= " $awk '/mbuf clusters in use/ { gsub(/\//, \":\", $1); print $1; }'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$mbuf N:\${MBUF}\n"; + + /* End mbuf statistics */ + + /* SPAMD, set up the spamd rrd file */ + if (isset($config['installedpackages']['spamdsettings']) && + $config['installedpackages']['spamdsettings']['config'][0]['enablerrd']) { + /* set up the spamd rrd file */ + if (!file_exists("$rrddbpath$ifname$spamd")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$spamd --step $rrdspamdinterval "; + $rrdcreate .= "DS:conn:GAUGE:$spamdvalid:0:10000 "; + $rrdcreate .= "DS:time:GAUGE:$spamdvalid:0:86400 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling spamd for connections and tarpitness \n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$spamd \\\n"; + $rrdupdatesh .= "`$php -q $spamd_gather`\n"; + + } + /* End System statistics */ + + /* Captive Portal statistics, set up the rrd file */ + if(is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpkey => $cp) { + if (!isset($cp['enable'])) + continue; + + $ifname= "captiveportal"; + $concurrent_filename = $rrddbpath . $ifname . '-' . $cpkey . $captiveportalconcurrent; + if (!file_exists("$concurrent_filename")) { + $rrdcreate = "$rrdtool create $concurrent_filename --step $rrdcaptiveportalinterval "; + $rrdcreate .= "DS:concurrentusers:GAUGE:$captiveportalvalid:0:10000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284 "; + $rrdcreate .= "RRA:LAST:0.5:1:1200 "; + $rrdcreate .= "RRA:LAST:0.5:5:720 "; + $rrdcreate .= "RRA:LAST:0.5:60:1860 "; + $rrdcreate .= "RRA:LAST:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $concurrent_filename N:U"); + } + + /* the Captive Portal stats gathering function. */ + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling Captive Portal for number of concurrent users\n"; + $rrdupdatesh .= "CP=`${php} -q ${captiveportal_gather} '${cpkey}' 'concurrent'`\n"; + $rrdupdatesh .= "$rrdtool update $concurrent_filename \${CP}\n"; + + $loggedin_filename = $rrddbpath . $ifname . '-' . $cpkey . $captiveportalloggedin; + if (!file_exists("$loggedin_filename")) { + $rrdcreate = "$rrdtool create $loggedin_filename --step $rrdcaptiveportalinterval "; + $rrdcreate .= "DS:loggedinusers:GAUGE:$captiveportalvalid:0:10000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284 "; + $rrdcreate .= "RRA:LAST:0.5:1:1200 "; + $rrdcreate .= "RRA:LAST:0.5:5:720 "; + $rrdcreate .= "RRA:LAST:0.5:60:1860 "; + $rrdcreate .= "RRA:LAST:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $loggedin_filename N:U"); + } + + /* the Captive Portal stats gathering function. */ + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling Captive Portal for number of logged in users\n"; + $rrdupdatesh .= "CP=`${php} -q ${captiveportal_gather} '${cpkey}' 'loggedin'`\n"; + $rrdupdatesh .= "$rrdtool update $loggedin_filename \${CP}\n"; + + } + } + /* End Captive Portal statistics */ + + /* NTP, set up the ntpd rrd file */ + if (isset($config['ntpd']['statsgraph'])) { + /* set up the ntpd rrd file */ + if (!file_exists("$rrddbpath$ntpd")) { + $rrdcreate = "$rrdtool create $rrddbpath$ntpd --step $rrdntpdinterval "; + $rrdcreate .= "DS:offset:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "DS:sjit:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "DS:cjit:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "DS:wander:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "DS:freq:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "DS:disp:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ntpd N:U:U:U:U:U:U"); + } + + /* the ntp stats gathering function. */ + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "$ntpq -c rv | $awk 'BEGIN{ RS=\",\"}{ print }' >> /tmp/ntp-rrdstats.$$\n"; + $rrdupdatesh .= "NOFFSET=`grep offset /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "NFREQ=`grep frequency /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "NSJIT=`grep sys_jitter /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "NCJIT=`grep clk_jitter /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "NWANDER=`grep clk_wander /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "NDISPER=`grep rootdisp /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ntpd \N:\${NOFFSET}:\${NSJIT}:\${NCJIT}:\${NWANDER}:\${NFREQ}:\${NDISPER}\n"; + $rrdupdatesh .= "rm /tmp/ntp-rrdstats.$$\n"; + $rrdupdatesh .= "\n"; + + } + /* End NTP statistics */ + + $rrdupdatesh .= "sleep 60\n"; + $rrdupdatesh .= "done\n"; + log_error(gettext("Creating rrd update script")); + /* write the rrd update script */ + $updaterrdscript = "{$g['vardb_path']}/rrd/updaterrd.sh"; + $fd = fopen("$updaterrdscript", "w"); + fwrite($fd, "$rrdupdatesh"); + fclose($fd); + + unset($rrdupdatesh); + + /* kill off traffic collectors */ + kill_traffic_collector(); + + /* start traffic collector */ + mwexec_bg("/usr/bin/nice -n20 /bin/sh $updaterrdscript"); + + } else { + /* kill off traffic collectors */ + kill_traffic_collector(); + } + + $databases = glob("{$rrddbpath}/*.rrd"); + foreach($databases as $database) { + chown($database, "nobody"); + } + + if($g['booting']) + echo gettext("done.") . "\n"; + +} + +# Create gateway quality RRD with settings suitable for pfSense graph set. +function create_gateway_quality_rrd($rrd_file) { + global $g; + $rrdinterval = 60; + $valid = $rrdinterval * 2; + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + + /* GATEWAY QUALITY, set up the rrd file */ + if (!file_exists("$rrd_file")) { + $rrdcreate = "$rrdtool create $rrd_file --step $rrdinterval "; + $rrdcreate .= "DS:loss:GAUGE:$valid:0:100 "; + $rrdcreate .= "DS:delay:GAUGE:$valid:0:100000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrd_file N:U:U"); + } + unset($rrdtool, $rrdinterval, $valid, $rrd_file); +} + +function kill_traffic_collector() { + global $g; + + killbypid("{$g['varrun_path']}/updaterrd.sh.pid"); +} + +?> diff --git a/etc/inc/sasl.inc b/etc/inc/sasl.inc new file mode 100644 index 000000000..f6a8d0b26 --- /dev/null +++ b/etc/inc/sasl.inc @@ -0,0 +1,422 @@ + + + + net.manuellemos.sasl + + @(#) $Id: sasl.php,v 1.11 2005/10/31 18:43:27 mlemos Exp $ + Copyright © (C) Manuel Lemos 2004 + Simple Authentication and Security Layer client + Manuel Lemos + mlemos-at-acm.org + + + en + Provide a common interface to plug-in driver classes that + implement different mechanisms for authentication used by clients of + standard protocols like SMTP, POP3, IMAP, HTTP, etc.. Currently the + supported authentication mechanisms are: PLAIN, + LOGIN, CRAM-MD5, Digest and NTML + (Windows or Samba). + . + + +{/metadocument} +*/ + +class sasl_client_class +{ + /* Public variables */ + +/* +{metadocument} + + error + STRING + + + Store the message that is returned when an error + occurs. + Check this variable to understand what happened when a call to + any of the class functions has failed. + This class uses cumulative error handling. This means that if one + class functions that may fail is called and this variable was + already set to an error message due to a failure in a previous call + to the same or other function, the function will also fail and does + not do anything. + This allows programs using this class to safely call several + functions that may fail and only check the failure condition after + the last function call. + Just set this variable to an empty string to clear the error + condition. + + +{/metadocument} +*/ + var $error=''; + +/* +{metadocument} + + mechanism + STRING + + + Store the name of the mechanism that was selected during the + call to the Start function. + You can access this variable but do not change it. + + +{/metadocument} +*/ + var $mechanism=''; + +/* +{metadocument} + + encode_response + BOOLEAN + 1 + + Let the drivers inform the applications whether responses + need to be encoded. + Applications should check this variable before sending + authentication responses to the server to determine if the + responses need to be encoded, eventually with base64 algorithm. + + +{/metadocument} +*/ + var $encode_response=1; + + /* Private variables */ + + var $driver; + var $drivers=array( + "Digest" => array("digest_sasl_client_class", "digest_sasl_client.inc" ), + "CRAM-MD5" => array("cram_md5_sasl_client_class", "cram_md5_sasl_client.inc" ), + "LOGIN" => array("login_sasl_client_class", "login_sasl_client.inc" ), + "NTLM" => array("ntlm_sasl_client_class", "ntlm_sasl_client.inc" ), + "PLAIN" => array("plain_sasl_client_class", "plain_sasl_client.inc" ), + "Basic" => array("basic_sasl_client_class", "basic_sasl_client.inc" ) + ); + var $credentials=array(); + + /* Public functions */ + +/* +{metadocument} + + SetCredential + VOID + + Store the value of a credential that may be used by any of + the supported mechanisms to process the authentication messages and + responses. + Call this function before starting the authentication dialog + to pass all the credential values that be needed to use the type + of authentication that the applications may need. + . + + + key + STRING + + Specify the name of the credential key. + + + + value + STRING + + Specify the value for the credential. + + + +{/metadocument} +*/ + Function SetCredential($key,$value) + { + $this->credentials[$key]=$value; + } +/* +{metadocument} + + +{/metadocument} +*/ + +/* +{metadocument} + + GetCredentials + INTEGER + + Retrieve the values of one or more credentials to be used by + the authentication mechanism classes. + This is meant to be used by authentication mechanism driver + classes to retrieve the credentials that may be neede. + The function may return SASL_CONTINUE if it + succeeded, or SASL_NOMECH if it was not possible to + retrieve one of the requested credentials. + + + credentials + HASH + + Reference to an associative array variable with all the + credentials that are being requested. The function initializes + this associative array values. + + + + defaults + HASH + + Associative arrays with default values for credentials + that may have not been defined. + + + + interactions + ARRAY + + Not yet in use. It is meant to provide context + information to retrieve credentials that may be obtained + interacting with the user. + + + +{/metadocument} +*/ + Function GetCredentials(&$credentials,$defaults,&$interactions) + { + Reset($credentials); + $end=(GetType($key=Key($credentials))!="string"); + for(;!$end;) + { + if(!IsSet($this->credentials[$key])) + { + if(IsSet($defaults[$key])) + $credentials[$key]=$defaults[$key]; + else + { + $this->error="the requested credential ".$key." is not defined"; + return(SASL_NOMECH); + } + } + else + $credentials[$key]=$this->credentials[$key]; + Next($credentials); + $end=(GetType($key=Key($credentials))!="string"); + } + return(SASL_CONTINUE); + } +/* +{metadocument} + + +{/metadocument} +*/ + +/* +{metadocument} + + Start + INTEGER + + Process the initial authentication step initializing the + driver class that implements the first of the list of requested + mechanisms that is supported by this SASL client library + implementation. + Call this function specifying a list of mechanisms that the + server supports. If the + message + Start + argument returns a string, it should be sent to + the server as initial message. Check the + encode_response variable to determine + whether the initial message needs to be encoded, eventually with + base64 algorithm, before it is sent to the server. + The function may return SASL_CONTINUE if it + could start one of the requested authentication mechanisms. It + may return SASL_NOMECH if it was not possible to start + any of the requested mechanisms. It returns SASL_FAIL or + other value in case of error. + + + mechanisms + ARRAY + + + Define the list of names of authentication mechanisms + supported by the that should be tried. + + + + message + STRING + + + Return the initial message that should be sent to the + server to start the authentication dialog. If this value is + undefined, no message should be sent to the server. + + + + interactions + ARRAY + + Not yet in use. It is meant to provide context + information to interact with the end user. + + + +{/metadocument} +*/ + Function Start($mechanisms, &$message, &$interactions) + { + if(strlen($this->error)) + return(SASL_FAIL); + if(IsSet($this->driver)) + return($this->driver->Start($this,$message,$interactions)); + $no_mechanism_error=""; + for($m=0;$mdrivers[$mechanism])) + { + if(!class_exists($this->drivers[$mechanism][0])) + require(dirname(__FILE__)."/".$this->drivers[$mechanism][1]); + $this->driver=new $this->drivers[$mechanism][0]; + if($this->driver->Initialize($this)) + { + $this->encode_response=1; + $status=$this->driver->Start($this,$message,$interactions); + switch($status) + { + case SASL_NOMECH: + Unset($this->driver); + if(strlen($no_mechanism_error)==0) + $no_mechanism_error=$this->error; + $this->error=""; + break; + case SASL_CONTINUE: + $this->mechanism=$mechanism; + return($status); + default: + Unset($this->driver); + $this->error=""; + return($status); + } + } + else + { + Unset($this->driver); + if(strlen($no_mechanism_error)==0) + $no_mechanism_error=$this->error; + $this->error=""; + } + } + } + $this->error=(strlen($no_mechanism_error) ? $no_mechanism_error : "it was not requested any of the authentication mechanisms that are supported"); + return(SASL_NOMECH); + } +/* +{metadocument} + + +{/metadocument} +*/ + +/* +{metadocument} + + Step + INTEGER + + Process the authentication steps after the initial step, + until the authetication iteration dialog is complete. + Call this function iteratively after a successful initial + step calling the Start function. + The function returns SASL_CONTINUE if step was + processed successfully, or returns SASL_FAIL in case of + error. + + + response + STRING + + + Pass the response returned by the server to the previous + step. + + + + message + STRING + + + Return the message that should be sent to the server to + continue the authentication dialog. If this value is undefined, + no message should be sent to the server. + + + + interactions + ARRAY + + Not yet in use. It is meant to provide context + information to interact with the end user. + + + +{/metadocument} +*/ + Function Step($response, &$message, &$interactions) + { + if(strlen($this->error)) + return(SASL_FAIL); + return($this->driver->Step($this,$response,$message,$interactions)); + } +/* +{metadocument} + + +{/metadocument} +*/ + +}; + +/* + +{metadocument} + +{/metadocument} + +*/ + +?> diff --git a/etc/inc/service-utils.inc b/etc/inc/service-utils.inc new file mode 100644 index 000000000..297a283ab --- /dev/null +++ b/etc/inc/service-utils.inc @@ -0,0 +1,716 @@ + "") { + eval("\$rc={$aservice['custom_php_service_status_command']};"); + return $rc; + } + if(empty($aservice['executable'])) + return false; + if (is_process_running($aservice['executable'])) + return true; + + return false; + } + } + } + + if (is_process_running($service)) + return true; + + return false; +} + +function get_services() { + global $config; + if (is_array($config['installedpackages']['service'])) + $services = $config['installedpackages']['service']; + else + $services = array(); + + /* Add services that are in the base. + * + */ + if (is_radvd_enabled()) { + $pconfig = array(); + $pconfig['name'] = "radvd"; + $pconfig['description'] = gettext("Router Advertisement Daemon"); + $services[] = $pconfig; + } + + if (isset($config['dnsmasq']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "dnsmasq"; + $pconfig['description'] = gettext("DNS Forwarder"); + $services[] = $pconfig; + } + + if (isset($config['unbound']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "unbound"; + $pconfig['description'] = gettext("Unbound DNS Forwarder"); + $services[] = $pconfig; + } + + $pconfig = array(); + $pconfig['name'] = "ntpd"; + $pconfig['description'] = gettext("NTP clock sync"); + $services[] = $pconfig; + + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $zone => $setting) { + if (isset($setting['enable'])) { + $pconfig = array(); + $pconfig['name'] = "captiveportal"; + $pconfig['zone'] = $zone; + $pconfig['description'] = gettext("Captive Portal") . ": ".htmlspecialchars($setting['zone']); + $services[] = $pconfig; + } + } + } + + $iflist = array(); + $ifdescrs = get_configured_interface_list(); + foreach ($ifdescrs as $if) { + $oc = $config['interfaces'][$if]; + if ($oc['if'] && (!link_interface_to_bridge($if))) + $iflist[$if] = $if; + } + + if (isset($config['dhcrelay']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "dhcrelay"; + $pconfig['description'] = gettext("DHCP Relay"); + $services[] = $pconfig; + } + + if (isset($config['dhcrelay6']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "dhcrelay6"; + $pconfig['description'] = gettext("DHCPv6 Relay"); + $services[] = $pconfig; + } + + if (is_dhcp_server_enabled()) { + $pconfig = array(); + $pconfig['name'] = "dhcpd"; + $pconfig['description'] = gettext("DHCP Service"); + $services[] = $pconfig; + } + + $gateways_arr = return_gateways_array(); + if (is_array($gateways_arr)) { + $pconfig = array(); + $pconfig['name'] = "apinger"; + $pconfig['description'] = gettext("Gateway Monitoring Daemon"); + $services[] = $pconfig; + } + + if (isset($config['snmpd']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "bsnmpd"; + $pconfig['description'] = gettext("SNMP Service"); + $services[] = $pconfig; + } + + if (is_array($config['igmpproxy']['igmpentry']) && (count($config['igmpproxy']['igmpentry']) > 0)) { + $pconfig = array(); + $pconfig['name'] = "igmpproxy"; + $pconfig['description'] = gettext("IGMP proxy"); + $services[] = $pconfig; + } + + if (isset($config['installedpackages']['miniupnpd']) && $config['installedpackages']['miniupnpd']['config'][0]['enable']) { + $pconfig = array(); + $pconfig['name'] = "miniupnpd"; + $pconfig['description'] = gettext("UPnP Service"); + $services[] = $pconfig; + } + + if (isset($config['installedpackages']['routed']) && $config['installedpackages']['routed']['config'][0]['enable']) { + $pconfig = array(); + $pconfig['name'] = "routed"; + $pconfig['description'] = gettext("RIP Daemon"); + $services[] = $pconfig; + } + + if (isset($config['ipsec']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "ipsec"; + $pconfig['description'] = gettext("IPsec VPN"); + $services[] = $pconfig; + } + + if (isset($config['system']['enablesshd'])) { + $pconfig = array(); + $pconfig['name'] = "sshd"; + $pconfig['description'] = gettext("Secure Shell Daemon"); + $services[] = $pconfig; + } + + foreach (array('server', 'client') as $mode) { + if (is_array($config['openvpn']["openvpn-{$mode}"])) { + foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) { + if (!isset($setting['disable'])) { + $pconfig = array(); + $pconfig['name'] = "openvpn"; + $pconfig['mode'] = $mode; + $pconfig['id'] = $id; + $pconfig['vpnid'] = $setting['vpnid']; + $pconfig['description'] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']); + $services[] = $pconfig; + } + } + } + } + + if (count($config['load_balancer']['virtual_server']) && count($config['load_balancer']['lbpool'])) { + $pconfig = array(); + $pconfig['name'] = "relayd"; + $pconfig['description'] = gettext("Server load balancing daemon"); + $services[] = $pconfig; + } + return $services; +} + +function find_service_by_name($name) { + $services = get_services(); + foreach ($services as $service) + if ($service["name"] == $name) + return $service; + return array(); +} + +function find_service_by_openvpn_vpnid($vpnid) { + $services = get_services(); + foreach ($services as $service) + if (($service["name"] == "openvpn") && isset($service["vpnid"]) && ($service["vpnid"] == $vpnid)) + return $service; + return array(); +} + +function find_service_by_cp_zone($zone) { + $services = get_services(); + foreach ($services as $service) + if (($service["name"] == "captiveportal") && isset($service["zone"]) && ($service["zone"] == $zone)) + return $service; + return array(); +} + +function service_name_compare($a, $b) { + if (strtolower($a['name']) == strtolower($b['name'])) + return 0; + return (strtolower($a['name']) < strtolower($b['name'])) ? -1 : 1; +} + +function get_pkg_descr($package_name) { + global $config; + if (is_array($config['installedpackages']['package'])) { + foreach($config['installedpackages']['package'] as $pkg) { + if($pkg['name'] == $package_name) + return $pkg['descr']; + } + } + return gettext("Not available."); +} + +function get_service_status($service) { + global $g; + switch ($service['name']) { + case "openvpn": + $running = is_pid_running("{$g['varrun_path']}/openvpn_{$service['mode']}{$service['vpnid']}.pid"); + break; + case "captiveportal": + $running = is_pid_running("{$g['varrun_path']}/lighty-{$service['zone']}-CaptivePortal.pid"); + if (isset($config['captiveportal'][$service['zone']]['httpslogin'])) + $running = $running && is_pid_running("{$g['varrun_path']}/lighty-{$service['zone']}-CaptivePortal-SSL.pid"); + break; + case "vhosts-http": + $running = is_pid_running("{$g['varrun_path']}/vhosts-http.pid"); + break; + case "dhcrelay6": + $running = is_pid_running("{$g['varrun_path']}/dhcrelay6.pid"); + break; + case 'ipsec': + $running = is_pid_running("{$g['varrun_path']}/charon.pid"); + break; + default: + $running = is_service_running($service['name']); + } + return $running; +} + +function get_service_status_icon($service, $withtext = true, $smallicon = false) { + global $g; + $output = ""; + if(get_service_status($service)) { + $statustext = gettext("Running"); + $output .= "\"status\" "; + if ($withtext) + $output .= " " . $statustext; + } else { + $service_enabled = is_service_enabled($service['name']); + $statustext = ($service_enabled) ? gettext("Stopped") : gettext("Disabled"); + $output .= "\"status\" "; + if ($withtext) + $output .= " {$statustext}"; + } + return $output; +} + +function get_service_control_links($service, $addname = false) { + global $g; + $output = ""; + $stitle = ($addname) ? $service['name'] . " " : ""; + if(get_service_status($service)) { + switch ($service['name']) { + case "openvpn": + $output .= ""; + break; + case "captiveportal": + $output .= ""; + break; + default: + $output .= ""; + } + $output .= "restart\n"; + switch ($service['name']) { + case "openvpn": + $output .= ""; + break; + case "captiveportal": + $output .= ""; + break; + default: + $output .= ""; + } + $output .= "stop"; + $output .= ""; + } else { + $service_enabled = is_service_enabled($service['name']); + switch ($service['name']) { + case "openvpn": + $output .= ""; + break; + case "captiveportal": + $output .= ""; + break; + default: + if ($service_enabled) + $output .= ""; + } + if ($service_enabled) + $output .= "start\n"; + } + return $output; +} + +function service_control_start($name, $extras) { + global $g; + switch($name) { + case 'radvd': + services_radvd_configure(); + break; + case 'captiveportal': + $zone = htmlspecialchars($extras['zone']); + captiveportal_init_webgui_zonename($zone); + break; + case 'ntpd': + case 'openntpd': + system_ntp_configure(); + break; + case 'apinger': + setup_gateways_monitor(); + break; + case 'bsnmpd': + services_snmpd_configure(); + break; + case 'dhcrelay': + services_dhcrelay_configure(); + break; + case 'dhcrelay6': + services_dhcrelay6_configure(); + break; + case 'dnsmasq': + services_dnsmasq_configure(); + break; + case 'dhcpd': + services_dhcpd_configure(); + break; + case 'igmpproxy': + services_igmpproxy_configure(); + break; + case 'miniupnpd': + upnp_action('start'); + break; + case 'ipsec': + vpn_ipsec_force_reload(); + break; + case 'sshd': + send_event("service restart sshd"); + break; + case 'openvpn': + $vpnmode = isset($extras['vpnmode']) ? htmlspecialchars($extras['vpnmode']) : htmlspecialchars($extras['mode']); + if (($vpnmode == "server") || ($vpnmode == "client")) { + $id = isset($extras['vpnid']) ? htmlspecialchars($extras['vpnid']) : htmlspecialchars($extras['id']); + $configfile = "{$g['varetc_path']}/openvpn/{$vpnmode}{$id}.conf"; + if (file_exists($configfile)) + openvpn_restart_by_vpnid($vpnmode, $id); + } + break; + case 'relayd': + relayd_configure(); + break; + default: + start_service($name); + break; + } + return sprintf(gettext("%s has been started."),htmlspecialchars($name)); +} +function service_control_stop($name, $extras) { + global $g; + switch($name) { + case 'radvd': + killbypid("{$g['varrun_path']}/radvd.pid"); + break; + case 'captiveportal': + $zone = htmlspecialchars($extras['zone']); + killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal.pid"); + killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal-SSL.pid"); + break; + case 'ntpd': + killbyname("ntpd"); + break; + case 'openntpd': + killbyname("openntpd"); + break; + case 'apinger': + killbypid("{$g['varrun_path']}/apinger.pid"); + break; + case 'bsnmpd': + killbypid("{$g['varrun_path']}/snmpd.pid"); + break; + case 'choparp': + killbyname("choparp"); + break; + case 'dhcpd': + killbyname("dhcpd"); + break; + case 'dhcrelay': + killbypid("{$g['varrun_path']}/dhcrelay.pid"); + break; + case 'dhcrelay6': + killbypid("{$g['varrun_path']}/dhcrelay6.pid"); + break; + case 'dnsmasq': + killbypid("{$g['varrun_path']}/dnsmasq.pid"); + break; + case 'unbound': + killbypid("{$g['varrun_path']}/unbound.pid"); + break; + case 'igmpproxy': + killbyname("igmpproxy"); + break; + case 'miniupnpd': + upnp_action('stop'); + break; + case 'sshd': + killbyname("sshd"); + break; + case 'ipsec': + exec("/usr/local/sbin/ipsec stop"); + break; + case 'openvpn': + $vpnmode = htmlspecialchars($extras['vpnmode']); + if (($vpnmode == "server") or ($vpnmode == "client")) { + $id = htmlspecialchars($extras['id']); + $pidfile = "{$g['varrun_path']}/openvpn_{$vpnmode}{$id}.pid"; + killbypid($pidfile); + } + break; + case 'relayd': + mwexec('pkill relayd'); + break; + default: + stop_service($name); + break; + } + return sprintf(gettext("%s has been stopped."), htmlspecialchars($name)); +} + +function service_control_restart($name, $extras) { + global $g; + switch($name) { + case 'radvd': + services_radvd_configure(); + break; + case 'captiveportal': + $zone = htmlspecialchars($extras['zone']); + killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal.pid"); + killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal-SSL.pid"); + captiveportal_init_webgui_zonename($zone); + break; + case 'ntpd': + case 'openntpd': + system_ntp_configure(); + break; + case 'apinger': + killbypid("{$g['varrun_path']}/apinger.pid"); + setup_gateways_monitor(); + break; + case 'bsnmpd': + services_snmpd_configure(); + break; + case 'dhcrelay': + services_dhcrelay_configure(); + break; + case 'dhcrelay6': + services_dhcrelay6_configure(); + break; + case 'dnsmasq': + services_dnsmasq_configure(); + break; + case 'unbound': + services_unbound_configure(); + break; + case 'dhcpd': + services_dhcpd_configure(); + break; + case 'igmpproxy': + services_igmpproxy_configure(); + break; + case 'miniupnpd': + upnp_action('restart'); + break; + case 'ipsec': + vpn_ipsec_force_reload(); + break; + case 'sshd': + send_event("service restart sshd"); + break; + case 'openvpn': + $vpnmode = htmlspecialchars($extras['vpnmode']); + if ($vpnmode == "server" || $vpnmode == "client") { + $id = htmlspecialchars($extras['id']); + $configfile = "{$g['varetc_path']}/openvpn/{$vpnmode}{$id}.conf"; + if (file_exists($configfile)) + openvpn_restart_by_vpnid($vpnmode, $id); + } + break; + case 'relayd': + relayd_configure(true); + break; + default: + restart_service($name); + break; + } + return sprintf(gettext("%s has been restarted."),htmlspecialchars($name)); +} + +?> diff --git a/etc/inc/services.inc b/etc/inc/services.inc new file mode 100644 index 000000000..79e205d75 --- /dev/null +++ b/etc/inc/services.inc @@ -0,0 +1,2374 @@ +. + Copyright (C) 2010 Ermal Luci + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/bin/killall /bin/pgrep /bin/sh /usr/local/sbin/dhcpd /usr/local/sbin/igmpproxy + pfSense_BUILDER_BINARIES: /sbin/ifconfig /usr/local/sbin/dnsmasq + pfSense_BUILDER_BINARIES: /usr/local/sbin/miniupnpd /usr/sbin/radvd + pfSense_BUILDER_BINARIES: /usr/local/sbin/dhcleases6 /usr/sbin/bsnmpd + pfSense_MODULE: utils +*/ + +define('DYNDNS_PROVIDER_VALUES', 'dnsomatic dyndns dyndns-static dyndns-custom dhs dyns easydns noip noip-free ods zoneedit loopia freedns dnsexit opendns namecheap he-net he-net-v6 he-net-tunnelbroker selfhost route53 cloudflare custom custom-v6 eurodns gratisdns ovh-dynhost citynetwork'); +define('DYNDNS_PROVIDER_DESCRIPTIONS', 'DNS-O-Matic,DynDNS (dynamic),DynDNS (static),DynDNS (custom),DHS,DyNS,easyDNS,No-IP,No-IP (free),ODS.org,ZoneEdit,Loopia,freeDNS,DNSexit,OpenDNS,Namecheap,HE.net,HE.net (v6),HE.net Tunnelbroker,SelfHost,Route 53,CloudFlare,Custom,Custom (v6),Euro Dns,GratisDNS,OVH DynHOST,City Network'); + +/* implement ipv6 route advertising deamon */ +function services_radvd_configure($blacklist = array()) { + global $config, $g; + + if ($g['platform'] == 'jail') + return; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_radvd_configure() being called $mt\n"; + } + + if (!is_array($config['dhcpdv6'])) + $config['dhcpdv6'] = array(); + + $Iflist = get_configured_interface_list(); + $Iflist = array_merge($Iflist, get_configured_pppoe_server_interfaces()); + $carplist = get_configured_carp_interface_list(); + + $radvdconf = "# Automatically Generated, do not edit\n"; + + /* Process all links which need the router advertise daemon */ + $radvdifs = array(); + + /* handle manually configured DHCP6 server settings first */ + foreach ($config['dhcpdv6'] as $dhcpv6if => $dhcpv6ifconf) { + if (!is_array($config['interfaces'][$dhcpv6if])) + continue; + if (!isset($config['interfaces'][$dhcpv6if]['enable'])) + continue; + + /* Do not put in the config an interface which is down */ + if (isset($blacklist[$dhcpv6if])) + continue; + if (!isset($dhcpv6ifconf['ramode'])) + $dhcpv6ifconf['ramode'] = $dhcpv6ifconf['mode']; + + /* are router advertisements enabled? */ + if ($dhcpv6ifconf['ramode'] == "disabled") + continue; + + if (!isset($dhcpv6ifconf['rapriority'])) + $dhcpv6ifconf['rapriority'] = "medium"; + + /* always start with the real parent, we override with the carp if later */ + $carpif = false; + /* check if we need to listen on a CARP interface */ + if (!empty($dhcpv6ifconf['rainterface'])) { + if (!empty($carplist[$dhcpv6ifconf['rainterface']])) { + $dhcpv6if = $dhcpv6ifconf['rainterface']; + $carpif = true; + } + } + + $realif = get_real_interface($dhcpv6if, "inet6"); + if (isset($radvdifs[$realif])) + continue; + + $ifcfgipv6 = get_interface_ipv6($dhcpv6if); + if (!is_ipaddrv6($ifcfgipv6)) + continue; + + $ifcfgsnv6 = get_interface_subnetv6($dhcpv6if); + $subnetv6 = gen_subnetv6($ifcfgipv6, $ifcfgsnv6); + $radvdifs[$realif] = $realif; + + $radvdconf .= "# Generated for DHCPv6 Server $dhcpv6if\n"; + $radvdconf .= "interface {$realif} {\n"; + $radvdconf .= "\tAdvSendAdvert on;\n"; + $radvdconf .= "\tMinRtrAdvInterval 5;\n"; + $radvdconf .= "\tMaxRtrAdvInterval 20;\n"; + $mtu = get_interface_mtu($realif); + if (is_numeric($mtu)) + $radvdconf .= "\tAdvLinkMTU {$mtu};\n"; + else + $radvdconf .= "\tAdvLinkMTU 1280;\n"; + // $radvdconf .= "\tDeprecatePrefix on;\n"; + switch($dhcpv6ifconf['rapriority']) { + case "low": + $radvdconf .= "\tAdvDefaultPreference low;\n"; + break; + case "high": + $radvdconf .= "\tAdvDefaultPreference high;\n"; + break; + default: + $radvdconf .= "\tAdvDefaultPreference medium;\n"; + break; + } + switch($dhcpv6ifconf['ramode']) { + case "managed": + case "assist": + $radvdconf .= "\tAdvManagedFlag on;\n"; + $radvdconf .= "\tAdvOtherConfigFlag on;\n"; + break; + } + $radvdconf .= "\tprefix {$subnetv6}/{$ifcfgsnv6} {\n"; + if($carpif == true) { + $radvdconf .= "\t\tDeprecatePrefix off;\n"; + } else { + $radvdconf .= "\t\tDeprecatePrefix on;\n"; + } + switch($dhcpv6ifconf['ramode']) { + case "managed": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous off;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "router": + $radvdconf .= "\t\tAdvOnLink off;\n"; + $radvdconf .= "\t\tAdvAutonomous off;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "assist": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous on;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "unmanaged": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous on;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + } + $radvdconf .= "\t};\n"; + + if($carpif === true) { + $radvdconf .= "\troute ::/0 {\n"; + $radvdconf .= "\t\tRemoveRoute off;\n"; + $radvdconf .= "\t};\n"; + } else { + $radvdconf .= "\troute ::/0 {\n"; + $radvdconf .= "\t\tRemoveRoute on;\n"; + $radvdconf .= "\t};\n"; + } + + /* add DNS servers */ + $dnslist = array(); + if (isset($dhcpv6ifconf['rasamednsasdhcp6']) && is_array($dhcpv6ifconf['dnsserver']) && !empty($dhcpv6ifconf['dnsserver'])) { + foreach($dhcpv6ifconf['dnsserver'] as $server) + if (is_ipaddrv6($server)) + $dnslist[] = $server; + } elseif (!isset($dhcpv6ifconf['rasamednsasdhcp6']) && isset($dhcpv6ifconf['radnsserver']) && is_array($dhcpv6ifconf['radnsserver'])) { + foreach($dhcpv6ifconf['radnsserver'] as $server) + if (is_ipaddrv6($server)) + $dnslist[] = $server; + } elseif (isset($config['dnsmasq']['enable'])) { + $dnslist[] = get_interface_ipv6($realif); + } elseif (is_array($config['system']['dnsserver']) && !empty($config['system']['dnsserver'])) { + foreach($config['system']['dnsserver'] as $server) { + if (is_ipaddrv6($server)) + $dnslist[] = $server; + } + } + if (count($dnslist) > 0) { + $dnsstring = implode(" ", $dnslist); + if ($dnsstring <> "") + $radvdconf .= "\tRDNSS {$dnsstring} { };\n"; + } + if (!empty($dhcpv6ifconf['domain'])) { + $radvdconf .= "\tDNSSL {$dhcpv6ifconf['domain']} { };\n"; + } elseif (!empty($config['system']['domain'])) { + $radvdconf .= "\tDNSSL {$config['system']['domain']} { };\n"; + } + $radvdconf .= "};\n"; + } + + /* handle DHCP-PD prefixes and 6RD dynamic interfaces */ + foreach ($Iflist as $if => $ifdescr) { + if(!isset($config['interfaces'][$if]['track6-interface'])) + continue; + if(!isset($config['interfaces'][$if]['enable'])) + continue; + /* Do not put in the config an interface which is down */ + if (isset($blacklist[$if])) + continue; + $trackif = $config['interfaces'][$if]['track6-interface']; + if (empty($config['interfaces'][$trackif])) + continue; + + $realif = get_real_interface($if, "inet6"); + /* prevent duplicate entries, manual overrides */ + if (isset($radvdifs[$realif])) + continue; + + $ifcfgipv6 = get_interface_ipv6($if); + if(!is_ipaddrv6($ifcfgipv6)) { + $subnetv6 = "::"; + $ifcfgsnv6 = "64"; + } else { + $ifcfgsnv6 = get_interface_subnetv6($if); + $subnetv6 = gen_subnetv6($ifcfgipv6, $ifcfgsnv6); + } + $radvdifs[$realif] = $realif; + + $autotype = $config['interfaces'][$trackif]['ipaddrv6']; + + if ($g['debug']) + log_error("configuring RA on {$if} for type {$autotype} radvd subnet {$subnetv6}/{$ifcfgsnv6}"); + + $radvdconf .= "# Generated config for {$autotype} delegation from {$trackif} on {$if}\n"; + $radvdconf .= "interface {$realif} {\n"; + $radvdconf .= "\tAdvSendAdvert on;\n"; + $radvdconf .= "\tMinRtrAdvInterval 3;\n"; + $radvdconf .= "\tMaxRtrAdvInterval 10;\n"; + $mtu = get_interface_mtu($realif); + if (is_numeric($mtu)) + $radvdconf .= "\tAdvLinkMTU {$mtu};\n"; + else + $radvdconf .= "\tAdvLinkMTU 1280;\n"; + $radvdconf .= "\tAdvOtherConfigFlag on;\n"; + $radvdconf .= "\t\tprefix {$subnetv6}/{$ifcfgsnv6} {\n"; + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous on;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + $radvdconf .= "\t};\n"; + + /* add DNS servers */ + $dnslist = array(); + if (isset($config['dnsmasq']['enable'])) { + $dnslist[] = $ifcfgipv6; + } elseif (is_array($config['system']['dnsserver']) && !empty($config['system']['dnsserver'])) { + foreach($config['system']['dnsserver'] as $server) { + if(is_ipaddrv6($server)) + $dnslist[] = $server; + } + } + if (count($dnslist) > 0) { + $dnsstring = implode(" ", $dnslist); + if (!empty($dnsstring)) + $radvdconf .= "\tRDNSS {$dnsstring} { };\n"; + } + if (!empty($config['system']['domain'])) { + $radvdconf .= "\tDNSSL {$config['system']['domain']} { };\n"; + } + $radvdconf .= "};\n"; + } + + /* write radvd.conf */ + if (!@file_put_contents("{$g['varetc_path']}/radvd.conf", $radvdconf)) { + log_error("Error: cannot open radvd.conf in services_radvd_configure().\n"); + if ($g['booting']) + printf("Error: cannot open radvd.conf in services_radvd_configure().\n"); + } + unset($radvdconf); + + if (count($radvdifs) > 0) { + if (isvalidpid("{$g['varrun_path']}/radvd.pid")) + sigkillbypid("{$g['varrun_path']}/radvd.pid", "HUP"); + else + mwexec("/usr/local/sbin/radvd -p {$g['varrun_path']}/radvd.pid -C {$g['varetc_path']}/radvd.conf -m syslog"); + } else { + /* we need to shut down the radvd cleanly, it will send out the prefix + * information with a lifetime of 0 to notify clients of a (possible) new prefix */ + if (isvalidpid("{$g['varrun_path']}/radvd.pid")) { + log_error("Shutting down Router Advertisment daemon cleanly"); + killbypid("{$g['varrun_path']}/radvd.pid"); + @unlink("{$g['varrun_path']}/radvd.pid"); + } + } + return 0; +} + +function services_dhcpd_configure($family = "all", $blacklist = array()) { + global $config, $g; + + /* configure DHCPD chroot once */ + $fd = fopen("{$g['tmp_path']}/dhcpd.sh","w"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/dev\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/etc\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/usr/local/sbin\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/var/db\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/var/run\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/usr\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/lib\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/run\n"); + fwrite($fd, "/usr/sbin/chown -R dhcpd:_dhcp {$g['dhcpd_chroot_path']}/*\n"); + fwrite($fd, "/bin/cp -n /lib/libc.so.* {$g['dhcpd_chroot_path']}/lib/\n"); + fwrite($fd, "/bin/cp -n /usr/local/sbin/dhcpd {$g['dhcpd_chroot_path']}/usr/local/sbin/\n"); + fwrite($fd, "/bin/chmod a+rx {$g['dhcpd_chroot_path']}/usr/local/sbin/dhcpd\n"); + + $status = `/sbin/mount | /usr/bin/grep -v grep | /usr/bin/grep "{$g['dhcpd_chroot_path']}/dev"`; + if (!trim($status)) + fwrite($fd, "/sbin/mount -t devfs devfs {$g['dhcpd_chroot_path']}/dev\n"); + fclose($fd); + mwexec("/bin/sh {$g['tmp_path']}/dhcpd.sh"); + + if ($family == "all" || $family == "inet") + services_dhcpdv4_configure(); + if ($family == "all" || $family == "inet6") { + services_dhcpdv6_configure($blacklist); + services_radvd_configure($blacklist); + } +} + +function services_dhcpdv4_configure() { + global $config, $g; + $need_ddns_updates = false; + $ddns_zones = array(); + + if($g['services_dhcp_server_enable'] == false) + return; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dhcpdv4_configure($if) being called $mt\n"; + } + + /* kill any running dhcpd */ + if (isvalidpid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpd.pid")) + killbypid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpd.pid"); + + /* DHCP enabled on any interfaces? */ + if (!is_dhcp_server_enabled()) + return 0; + + /* if OLSRD is enabled, allow WAN to house DHCP. */ + if (!function_exists('is_package_installed')) + require_once('pkg-utils.inc'); + if (is_package_installed('olsrd') && isset($config['installedpackages']['olsrd'])) + foreach($config['installedpackages']['olsrd']['config'] as $olsrd) + if (isset($olsrd['enable']) && $olsrd['enable'] == "on") { + $is_olsr_enabled = true; + break; + } + + if ($g['booting']) { + /* restore the leases, if we have them */ + if (file_exists("{$g['cf_conf_path']}/dhcpleases.tgz")) { + $dhcprestore = ""; + $dhcpreturn = ""; + exec("cd /;LANG=C /usr/bin/tar -xzf {$g['cf_conf_path']}/dhcpleases.tgz 2>&1", $dhcprestore, $dhcpreturn); + $dhcprestore = implode(" ", $dhcprestore); + if($dhcpreturn <> 0) { + log_error(sprintf(gettext('DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s'), $dhcpreturn, $dhcprestore, "\n")); + } + } + /* If this backup is still there on a full install, but we aren't going to use ram disks, remove the archive since this is a transition. */ + if (($g['platform'] == "pfSense") && !isset($config['system']['use_mfs_tmpvar'])) { + unlink_if_exists("{$g['cf_conf_path']}/dhcpleases.tgz"); + } + } + + $syscfg = $config['system']; + if (!is_array($config['dhcpd'])) + $config['dhcpd'] = array(); + $dhcpdcfg = $config['dhcpd']; + $Iflist = get_configured_interface_list(); + + /* Only consider DNS servers with IPv4 addresses for the IPv4 DHCP server. */ + $dns_arrv4 = array(); + if (is_array($syscfg['dnsserver'])) { + foreach($syscfg['dnsserver'] as $dnsserver) { + if (is_ipaddrv4($dnsserver)) { + $dns_arrv4[] = $dnsserver; + } + } + } + + if ($g['booting']) + echo gettext("Starting DHCP service..."); + else + sleep(1); + + $custoptions = ""; + foreach ($dhcpdcfg as $dhcpif => $dhcpifconf) { + if(is_array($dhcpifconf['numberoptions']) && is_array($dhcpifconf['numberoptions']['item'])) { + foreach($dhcpifconf['numberoptions']['item'] as $itemidx => $item) { + if(!empty($item['type'])) + $itemtype = $item['type']; + else + $itemtype = "text"; + $custoptions .= "option custom-{$dhcpif}-{$itemidx} code {$item['number']} = {$itemtype};\n"; + } + } + } + + $dhcpdconf = << $dhcpifconf) { + + interfaces_staticarp_configure($dhcpif); + + if (!isset($dhcpifconf['enable'])) + continue; + + if($dhcpifconf['failover_peerip'] <> "") { + $intip = get_interface_ip($dhcpif); + /* + * yep, failover peer is defined. + * does it match up to a defined vip? + */ + $skew = 110; + if(is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vipent) { + if($vipent['interface'] == $dhcpif) { + $carp_nw = gen_subnet($vipent['subnet'], $vipent['subnet_bits']); + if (ip_in_subnet($dhcpifconf['failover_peerip'], "{$carp_nw}/{$vipent['subnet_bits']}")) { + /* this is the interface! */ + if(is_numeric($vipent['advskew']) && (intval($vipent['advskew']) < 20)) { + $skew = 0; + break; + } + } + } + } + } else { + log_error(gettext("Warning! DHCP Failover setup and no CARP virtual IPs defined!")); + } + if($skew > 10) { + $type = "secondary"; + $my_port = "520"; + $peer_port = "519"; + } else { + $my_port = "519"; + $peer_port = "520"; + $type = "primary"; + $dhcpdconf_pri = "split 128;\n"; + $dhcpdconf_pri .= " mclt 600;\n"; + } + + if (is_ipaddrv4($intip)) { + $dhcpdconf .= << $dhcpifconf) { + + $newzone = array(); + $ifcfg = $config['interfaces'][$dhcpif]; + + if (!isset($dhcpifconf['enable']) || !isset($Iflist[$dhcpif])) + continue; + $ifcfgip = get_interface_ip($dhcpif); + $ifcfgsn = get_interface_subnet($dhcpif); + $subnet = gen_subnet($ifcfgip, $ifcfgsn); + $subnetmask = gen_subnet_mask($ifcfgsn); + + if (!is_ipaddr($subnet)) + continue; + + if($is_olsr_enabled == true) + if($dhcpifconf['netmask']) + $subnetmask = gen_subnet_mask($dhcpifconf['netmask']); + + $all_pools = array(); + $all_pools[] = $dhcpifconf; + if (is_array($dhcpifconf['pool'])) { + $all_pools = array_merge($all_pools, $dhcpifconf['pool']); + } + + $dnscfg = ""; + + if ($dhcpifconf['domain']) { + $dnscfg .= " option domain-name \"{$dhcpifconf['domain']}\";\n"; + } + + if($dhcpifconf['domainsearchlist'] <> "") { + $dnscfg .= " option domain-search \"" . join("\",\"", preg_split("/[ ;]+/", $dhcpifconf['domainsearchlist'])) . "\";\n"; + } + + if (isset($dhcpifconf['ddnsupdate'])) { + $need_ddns_updates = true; + $newzone = array(); + if($dhcpifconf['ddnsdomain'] <> "") { + $newzone['domain-name'] = $dhcpifconf['ddnsdomain']; + $dnscfg .= " ddns-domainname \"{$dhcpifconf['ddnsdomain']}\";\n"; + } else { + $newzone['domain-name'] = $config['system']['domain']; + } + $revsubnet = explode(".", $subnet); + $revsubnet = array_reverse($revsubnet); + foreach ($revsubnet as $octet) { + if ($octet != "0") + break; + array_shift($revsubnet); + } + $newzone['ptr-domain'] = implode(".", $revsubnet) . ".in-addr.arpa"; + } + + if (is_array($dhcpifconf['dnsserver']) && ($dhcpifconf['dnsserver'][0])) { + $dnscfg .= " option domain-name-servers " . join(",", $dhcpifconf['dnsserver']) . ";"; + if ($newzone['domain-name']) + $newzone['dns-servers'] = $dhcpifconf['dnsserver']; + } else if (isset($config['dnsmasq']['enable'])) { + $dnscfg .= " option domain-name-servers {$ifcfgip};"; + if ($newzone['domain-name'] && is_array($syscfg['dnsserver']) && ($syscfg['dnsserver'][0])) + $newzone['dns-servers'] = $syscfg['dnsserver']; + } else if (!empty($dns_arrv4)) { + $dnscfg .= " option domain-name-servers " . join(",", $dns_arrv4) . ";"; + if ($newzone['domain-name']) + $newzone['dns-servers'] = $dns_arrv4; + } + + /* Create classes - These all contain comma separated lists. Join them into one + big comma separated string then split them all up. */ + $all_mac_strings = array(); + if (is_array($dhcpifconf['pool'])) { + foreach($all_pools as $poolconf) { + $all_mac_strings[] = $poolconf['mac_allow']; + $all_mac_strings[] = $poolconf['mac_deny']; + } + } + $all_mac_strings[] = $dhcpifconf['mac_allow']; + $all_mac_strings[] = $dhcpifconf['mac_deny']; + $all_mac_list = array_unique(explode(',', implode(',', $all_mac_strings))); + foreach ($all_mac_list as $mac) { + if (empty($mac)) + continue; + $dhcpdconf .= 'class "' . str_replace(':', '', $mac) . '" {' . "\n"; + // Skip the first octet of the MAC address - for media type, typically Ethernet ("01") and match the rest. + $dhcpdconf .= ' match if substring (hardware, 1, ' . (substr_count($mac, ':') + 1) . ') = ' . $mac . ';' . "\n"; + $dhcpdconf .= '}' . "\n"; + } + + $dhcpdconf .= "subnet {$subnet} netmask {$subnetmask} {\n"; + +// Setup pool options + foreach($all_pools as $poolconf) { + $dhcpdconf .= " pool {\n"; + /* is failover dns setup? */ + if (is_array($poolconf['dnsserver']) && $poolconf['dnsserver'][0] <> "") { + $dhcpdconf .= " option domain-name-servers {$poolconf['dnsserver'][0]}"; + if($poolconf['dnsserver'][1] <> "") + $dhcpdconf .= ",{$poolconf['dnsserver'][1]}"; + $dhcpdconf .= ";\n"; + } + + /* allow/deny MACs */ + $mac_allow_list = array_unique(explode(',', $poolconf['mac_allow'])); + foreach ($mac_allow_list as $mac) { + if (empty($mac)) + continue; + $dhcpdconf .= " allow members of \"" . str_replace(':', '', $mac) . "\";\n"; + } + $mac_deny_list = array_unique(explode(',', $poolconf['mac_deny'])); + foreach ($mac_deny_list as $mac) { + if (empty($mac)) + continue; + $dhcpdconf .= " deny members of \"" . str_replace(':', '', $mac) . "\";\n"; + } + + if($poolconf['failover_peerip'] <> "") + $dhcpdconf .= " deny dynamic bootp clients;\n"; + + if (isset($poolconf['denyunknown'])) + $dhcpdconf .= " deny unknown-clients;\n"; + + if ($poolconf['gateway'] && $poolconf['gateway'] != "none" && ($poolconf['gateway'] != $dhcpifconf['gateway'])) + $dhcpdconf .= " option routers {$poolconf['gateway']};\n"; + + if($dhcpifconf['failover_peerip'] <> "") { + $dhcpdconf .= " failover peer \"dhcp_{$dhcpif}\";\n"; + } + + $pdnscfg = ""; + + if ($poolconf['domain'] && ($poolconf['domain'] != $dhcpifconf['domain'])) { + $pdnscfg .= " option domain-name \"{$poolconf['domain']}\";\n"; + } + + if(!empty($poolconf['domainsearchlist']) && ($poolconf['domainsearchlist'] != $dhcpifconf['domainsearchlist'])) { + $pdnscfg .= " option domain-search \"" . join("\",\"", preg_split("/[ ;]+/", $poolconf['domainsearchlist'])) . "\";\n"; + } + + if (isset($poolconf['ddnsupdate'])) { + if (($poolconf['ddnsdomain'] <> "") && ($poolconf['ddnsdomain'] != $dhcpifconf['ddnsdomain'])) + $pdnscfg .= " ddns-domainname \"{$poolconf['ddnsdomain']}\";\n"; + $pdnscfg .= " ddns-update-style interim;\n"; + } + + if (is_array($poolconf['dnsserver']) && ($poolconf['dnsserver'][0]) && ($poolconf['dnsserver'][0] != $dhcpifconf['dnsserver'][0])) { + $pdnscfg .= " option domain-name-servers " . join(",", $poolconf['dnsserver']) . ";\n"; + } + $dhcpdconf .= "{$pdnscfg}"; + + // default-lease-time + if ($poolconf['defaultleasetime'] && ($poolconf['defaultleasetime'] != $dhcpifconf['defaultleasetime'])) + $dhcpdconf .= " default-lease-time {$poolconf['defaultleasetime']};\n"; + + // max-lease-time + if ($poolconf['maxleasetime'] && ($poolconf['maxleasetime'] != $dhcpifconf['maxleasetime'])) + $dhcpdconf .= " max-lease-time {$poolconf['maxleasetime']};\n"; + + // netbios-name* + if (is_array($poolconf['winsserver']) && $poolconf['winsserver'][0] && ($poolconf['winsserver'][0] != $dhcpifconf['winsserver'][0])) { + $dhcpdconf .= " option netbios-name-servers " . join(",", $poolconf['winsserver']) . ";\n"; + $dhcpdconf .= " option netbios-node-type 8;\n"; + } + + // ntp-servers + if (is_array($poolconf['ntpserver']) && $poolconf['ntpserver'][0] && ($poolconf['ntpserver'][0] != $dhcpifconf['ntpserver'][0])) + $dhcpdconf .= " option ntp-servers " . join(",", $poolconf['ntpserver']) . ";\n"; + + // tftp-server-name + if (!empty($poolconf['tftp']) && ($poolconf['tftp'] != $dhcpifconf['tftp'])) + $dhcpdconf .= " option tftp-server-name \"{$poolconf['tftp']}\";\n"; + + // ldap-server + if (!empty($poolconf['ldap']) && ($poolconf['ldap'] != $dhcpifconf['ldap'])) + $dhcpdconf .= " option ldap-server \"{$poolconf['ldap']}\";\n"; + + // net boot information + if(isset($poolconf['netboot'])) { + if (!empty($poolconf['nextserver']) && ($poolconf['nextserver'] != $dhcpifconf['nextserver'])) { + $dhcpdconf .= " next-server {$poolconf['nextserver']};\n"; + } + if (!empty($poolconf['filename']) && ($poolconf['filename'] != $dhcpifconf['filename'])) { + $dhcpdconf .= " filename \"{$poolconf['filename']}\";\n"; + } + if (!empty($poolconf['rootpath']) && ($poolconf['rootpath'] != $dhcpifconf['rootpath'])) { + $dhcpdconf .= " option root-path \"{$poolconf['rootpath']}\";\n"; + } + } + $dhcpdconf .= " range {$poolconf['range']['from']} {$poolconf['range']['to']};\n"; + $dhcpdconf .= " }\n\n"; + } +// End of settings inside pools + + if ($dhcpifconf['gateway'] && $dhcpifconf['gateway'] != "none") { + $routers = $dhcpifconf['gateway']; + $add_routers = true; + } elseif ($dhcpifconf['gateway'] == "none") { + $add_routers = false; + } else { + $routers = $ifcfgip; + } + if($add_routers) + $dhcpdconf .= " option routers {$routers};\n"; + + $dhcpdconf .= << "") + $dhcpdconf .= " option tftp-server-name \"{$dhcpifconf['tftp']}\";\n"; + + // Handle option, number rowhelper values + $dhcpdconf .= "\n"; + if($dhcpifconf['numberoptions']['item']) { + foreach($dhcpifconf['numberoptions']['item'] as $itemidx => $item) { + if(empty($item['type']) || $item['type'] == "text") + $dhcpdconf .= " option custom-{$dhcpif}-{$itemidx} \"{$item['value']}\";\n"; + else + $dhcpdconf .= " option custom-{$dhcpif}-{$itemidx} {$item['value']};\n"; + } + } + + // ldap-server + if ($dhcpifconf['ldap'] <> "") + $dhcpdconf .= " option ldap-server \"{$dhcpifconf['ldap']}\";\n"; + + // net boot information + if(isset($dhcpifconf['netboot'])) { + if ($dhcpifconf['nextserver'] <> "") { + $dhcpdconf .= " next-server {$dhcpifconf['nextserver']};\n"; + } + if (!empty($dhcpifconf['filename']) && !empty($dhcpifconf['filename32']) && !empty($dhcpifconf['filename64'])) { + $dhcpdconf .= " if option arch = 00:06 {\n"; + $dhcpdconf .= " filename \"{$dhcpifconf['filename32']}\";\n"; + $dhcpdconf .= " } else if option arch = 00:07 {\n"; + $dhcpdconf .= " filename \"{$dhcpifconf['filename64']}\";\n"; + $dhcpdconf .= " } else {\n"; + $dhcpdconf .= " filename \"{$dhcpifconf['filename']}\";\n"; + $dhcpdconf .= " }\n\n"; + } elseif (!empty($dhcpifconf['filename'])) { + $dhcpdconf .= " filename \"{$dhcpifconf['filename']}\";\n"; + } + if (!empty($dhcpifconf['rootpath'])) { + $dhcpdconf .= " option root-path \"{$dhcpifconf['rootpath']}\";\n"; + } + } + + $dhcpdconf .= << "") && ($sm['ddnsdomain'] != $dhcpifconf['ddnsdomain'])) + $pdnscfg .= " ddns-domainname \"{$sm['ddnsdomain']}\";\n"; + $pdnscfg .= " ddns-update-style interim;\n"; + } + + if (is_array($sm['dnsserver']) && ($sm['dnsserver'][0]) && ($sm['dnsserver'][0] != $dhcpifconf['dnsserver'][0])) { + $smdnscfg .= " option domain-name-servers " . join(",", $sm['dnsserver']) . ";\n"; + } + $dhcpdconf .= "{$smdnscfg}"; + + // default-lease-time + if ($sm['defaultleasetime'] && ($sm['defaultleasetime'] != $dhcpifconf['defaultleasetime'])) + $dhcpdconf .= " default-lease-time {$sm['defaultleasetime']};\n"; + + // max-lease-time + if ($sm['maxleasetime'] && ($sm['maxleasetime'] != $dhcpifconf['maxleasetime'])) + $dhcpdconf .= " max-lease-time {$sm['maxleasetime']};\n"; + + // netbios-name* + if (is_array($sm['winsserver']) && $sm['winsserver'][0] && ($sm['winsserver'][0] != $dhcpifconf['winsserver'][0])) { + $dhcpdconf .= " option netbios-name-servers " . join(",", $sm['winsserver']) . ";\n"; + $dhcpdconf .= " option netbios-node-type 8;\n"; + } + + // ntp-servers + if (is_array($sm['ntpserver']) && $sm['ntpserver'][0] && ($sm['ntpserver'][0] != $dhcpifconf['ntpserver'][0])) + $dhcpdconf .= " option ntp-servers " . join(",", $sm['ntpserver']) . ";\n"; + + // tftp-server-name + if (!empty($sm['tftp']) && ($sm['tftp'] != $dhcpifconf['tftp'])) + $dhcpdconf .= " option tftp-server-name \"{$sm['tftp']}\";\n"; + + $dhcpdconf .= "}\n"; + $i++; + } + } + + $dhcpdifs[] = get_real_interface($dhcpif); + if ($newzone['domain-name']) + { + if ($need_ddns_updates) + { + $newzone['dns-servers'] = array($dhcpifconf['ddnsdomainprimary']); + } + $ddns_zones[] = $newzone; + } + } + + if ($need_ddns_updates) { + $dhcpdconf .= "ddns-update-style interim;\n"; + $dhcpdconf .= "update-static-leases on;\n"; + + $dhcpdconf .= dhcpdkey($dhcpifconf); + $dhcpdconf .= dhcpdzones($ddns_zones, $dhcpifconf); + } + + /* write dhcpd.conf */ + if (!@file_put_contents("{$g['dhcpd_chroot_path']}/etc/dhcpd.conf", $dhcpdconf)) { + printf(gettext("Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s"), "\n"); + unset($dhcpdconf); + return 1; + } + unset($dhcpdconf); + + /* create an empty leases database */ + if (!file_exists("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases")) + @touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases"); + + /* make sure there isn't a stale dhcpd.pid file, which can make dhcpd fail to start. */ + /* if we get here, dhcpd has been killed and is not started yet */ + unlink_if_exists("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpd.pid"); + + /* fire up dhcpd in a chroot */ + if (count($dhcpdifs) > 0) { + mwexec("/usr/local/sbin/dhcpd -user dhcpd -group _dhcp -chroot {$g['dhcpd_chroot_path']} -cf /etc/dhcpd.conf -pf {$g['varrun_path']}/dhcpd.pid " . + join(" ", $dhcpdifs)); + } + + if ($g['booting']) + print "done.\n"; + + return 0; +} + +function dhcpdkey($dhcpifconf) +{ + $dhcpdconf = ""; + if ($dhcpifconf['ddnsdomainkeyname'] <> "" && $dhcpifconf['ddnsdomainkey'] <> "") + { + $dhcpdconf .= "key {$dhcpifconf['ddnsdomainkeyname']} {\n"; + $dhcpdconf .= " algorithm hmac-md5;\n"; + $dhcpdconf .= " secret {$dhcpifconf['ddnsdomainkey']};\n"; + $dhcpdconf .= "}\n"; + } + + return $dhcpdconf; +} + +function dhcpdzones($ddns_zones, $dhcpifconf) +{ + $dhcpdconf = ""; + + if (is_array($ddns_zones)) { + $added_zones = array(); + foreach ($ddns_zones as $zone) { + if (!is_array($zone) || empty($zone) || !is_array($zone['dns-servers'])) + continue; + $primary = $zone['dns-servers'][0]; + $secondary = empty($zone['dns-servers'][1]) ? "" : $zone['dns-servers'][1]; + + // Make sure we aren't using any invalid or IPv6 DNS servers. + if (!is_ipaddrv4($primary)) { + if (is_ipaddrv4($secondary)) { + $primary = $secondary; + $secondary = ""; + } else { + continue; + } + } + + // We don't need to add zones multiple times. + if ($zone['domain-name'] && !in_array($zone['domain-name'], $added_zones)) { + $dhcpdconf .= "zone {$zone['domain-name']}. {\n"; + $dhcpdconf .= " primary {$primary};\n"; + if (is_ipaddrv4($secondary)) + $dhcpdconf .= " secondary {$secondary};\n"; + if($dhcpifconf['ddnsdomainkeyname'] <> "" && $dhcpifconf['ddnsdomainkey'] <> "") + $dhcpdconf .= " key {$dhcpifconf['ddnsdomainkeyname']};\n"; + $dhcpdconf .= "}\n"; + $added_zones[] = $zone['domain-name']; + } + if ($zone['ptr-domain'] && !in_array($zone['ptr-domain'], $added_zones)) { + $dhcpdconf .= "zone {$zone['ptr-domain']} {\n"; + $dhcpdconf .= " primary {$primary};\n"; + if (is_ipaddrv4($secondary)) + $dhcpdconf .= " secondary {$secondary};\n"; + if($dhcpifconf['ddnsdomainkeyname'] <> "" && $dhcpifconf['ddnsdomainkey'] <> "") + $dhcpdconf .= " key {$dhcpifconf['ddnsdomainkeyname']};\n"; + $dhcpdconf .= "}\n"; + $added_zones[] = $zone['ptr-domain']; + } + } + } + + return $dhcpdconf; +} + +function services_dhcpdv6_configure($blacklist = array()) { + global $config, $g; + + if($g['services_dhcp_server_enable'] == false) + return; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dhcpd_configure($if) being called $mt\n"; + } + + /* kill any running dhcpd */ + if (isvalidpid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpdv6.pid")) + killbypid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpdv6.pid"); + if (isvalidpid("{$g['varrun_path']}/dhcpleases6.pid")) + killbypid("{$g['varrun_path']}/dhcpleases6.pid"); + + /* DHCP enabled on any interfaces? */ + if (!is_dhcpv6_server_enabled()) + return 0; + + if ($g['booting']) { + if ($g['platform'] != "pfSense") { + /* restore the leases, if we have them */ + if (file_exists("{$g['cf_conf_path']}/dhcp6leases.tgz")) { + $dhcprestore = ""; + $dhcpreturn = ""; + exec("cd /;LANG=C /usr/bin/tar -xzf {$g['cf_conf_path']}/dhcp6leases.tgz 2>&1", $dhcprestore, $dhcpreturn); + $dhcprestore = implode(" ", $dhcprestore); + if($dhcpreturn <> 0) { + log_error("DHCP leases v6 restore failed exited with $dhcpreturn, the error is: $dhcprestore\n"); + } + } + } + } + + $syscfg = $config['system']; + if (!is_array($config['dhcpdv6'])) + $config['dhcpdv6'] = array(); + $dhcpdv6cfg = $config['dhcpdv6']; + $Iflist = get_configured_interface_list(); + $Iflist = array_merge($Iflist, get_configured_pppoe_server_interfaces()); + + + if ($g['booting']) + echo "Starting DHCPv6 service..."; + else + sleep(1); + + /* we add a fake entry for interfaces that are set to track6 another WAN */ + foreach ($Iflist as $ifname) { + /* Do not put in the config an interface which is down */ + if (isset($blacklist[$ifname])) + continue; + if (!empty($config['interfaces'][$ifname]['track6-interface'])) { + $realif = get_real_interface($ifname, "inet6"); + $ifcfgipv6 = get_interface_ipv6($ifname); + if(!is_ipaddrv6($ifcfgipv6)) + continue; + $ifcfgipv6 = Net_IPv6::getNetmask($ifcfgipv6, 64); + $trackifname = $config['interfaces'][$ifname]['track6-interface']; + $trackcfg = $config['interfaces'][$trackifname]; + $pdlen = calculate_ipv6_delegation_length($trackifname); + $ifcfgipv6arr =explode(":", $ifcfgipv6); + $dhcpdv6cfg[$ifname] = array(); + $dhcpdv6cfg[$ifname]['enable'] = true; + /* range */ + $ifcfgipv6arr[7] = "1000"; + $dhcpdv6cfg[$ifname]['range'] = array(); + $dhcpdv6cfg[$ifname]['range']['from'] = Net_IPv6::compress(implode(":", $ifcfgipv6arr)); + $ifcfgipv6arr[7] = "2000"; + $dhcpdv6cfg[$ifname]['range']['to'] = Net_IPv6::compress(implode(":", $ifcfgipv6arr)); + /* prefix length > 0? We can add dhcp6 prefix delegation server */ + if($pdlen > 2) { + $pdlenmax = $pdlen; + $pdlenhalf = $pdlenmax -1; + $pdlenmin = (64 - ceil($pdlenhalf / 4)); + $dhcpdv6cfg[$ifname]['prefixrange'] = array(); + $dhcpdv6cfg[$ifname]['prefixrange']['prefixlength'] = $pdlenmin; + + /* set the delegation start to half the current address block */ + $range = Net_IPv6::parseAddress($ifcfgipv6, (64 - $pdlenmax)); + $range['start'] = Net_IPv6::getNetmask($range['end'], (64 - $pdlenhalf)); + + /* set the end range to a multiple of the prefix delegation size, required by dhcpd */ + $range = Net_IPv6::parseAddress($range['end'], (64 - $pdlenhalf)); + $range['end'] = Net_IPv6::getNetmask($range['end'], (64 - round($pdlen / 2))); + + $dhcpdv6cfg[$ifname]['prefixrange']['from'] = Net_IPv6::compress($range['start']); + $dhcpdv6cfg[$ifname]['prefixrange']['to'] = Net_IPv6::compress($range['end']); + $dhcpdv6cfg[$ifname]['dns6ip'] = get_interface_ipv6($ifname); + } + } + } + + $custoptionsv6 = ""; + foreach ($dhcpdv6cfg as $dhcpv6if => $dhcpv6ifconf) { + if(is_array($dhcpv6ifconf['numberoptions']) && is_array($dhcpv6ifconf['numberoptions']['item'])) { + foreach($dhcpv6ifconf['numberoptions']['item'] as $itemv6idx => $itemv6) { + $custoptionsv6 .= "option custom-{$dhcpv6if}-{$itemv6idx} code {$itemv6['number']} = text;\n"; + } + } + } + + if(isset($dhcpv6ifconf['netboot']) && !empty($dhcpv6ifconf['bootfile_url'])) + $custoptionsv6 .= "option dhcp6.bootfile-url code 59 = string;\n"; + + $dhcpdv6conf = << $dhcpv6ifconf) { + + $ddns_zones = array(); + + $ifcfgv6 = $config['interfaces'][$dhcpv6if]; + + if (!isset($dhcpv6ifconf['enable']) || !isset($Iflist[$dhcpv6if])) + continue; + $ifcfgipv6 = get_interface_ipv6($dhcpv6if); + $ifcfgsnv6 = get_interface_subnetv6($dhcpv6if); + $subnetv6 = gen_subnetv6($ifcfgipv6, $ifcfgsnv6); + + if ($is_olsr_enabled == true) { + if($dhcpv6ifconf['netmask']) + $subnetmask = gen_subnet_maskv6($dhcpv6ifconf['netmask']); + } + + $dnscfgv6 = ""; + + if ($dhcpv6ifconf['domain']) { + $dnscfgv6 .= " option domain-name \"{$dhcpv6ifconf['domain']}\";\n"; + } + + if ($dhcpv6ifconf['domainsearchlist'] <> "") { + $dnscfgv6 .= " option domain-search \"" . join("\",\"", preg_split("/[ ;]+/", $dhcpv6ifconf['domainsearchlist'])) . "\";\n"; + } + + if (isset($dhcpv6ifconf['ddnsupdate'])) { + if($dhcpv6ifconf['ddnsdomain'] <> "") { + $dnscfgv6 .= " ddns-domainname \"{$dhcpv6ifconf['ddnsdomain']}\";\n"; + } + $dnscfgv6 .= " ddns-update-style interim;\n"; + $nsupdate = true; + } + + if (is_array($dhcpv6ifconf['dnsserver']) && ($dhcpv6ifconf['dnsserver'][0])) { + $dnscfgv6 .= " option dhcp6.name-servers " . join(",", $dhcpv6ifconf['dnsserver']) . ";"; + } else if ((isset($config['dnsmasq']['enable'])) && (is_ipaddrv6($ifcfgipv6))) { + $dnscfgv6 .= " option dhcp6.name-servers {$ifcfgipv6};"; + } else if (is_array($syscfg['dnsserver']) && ($syscfg['dnsserver'][0])) { + $dns_arrv6 = array(); + foreach($syscfg['dnsserver'] as $dnsserver) { + if (is_ipaddrv6($dnsserver)) { + $dns_arrv6[] = $dnsserver; + } + } + if(!empty($dns_arrv6)) + $dnscfgv6 .= " option dhcp6.name-servers " . join(",", $dns_arrv6) . ";"; + } + + if ($dhcpv6ifconf['domain']) { + $newzone = array(); + $newzone['domain-name'] = $dhcpv6ifconf['domain']; + $newzone['dns-servers'][] = $dhcpv6ifconf['ddnsdomainprimary']; + $ddns_zones[] = $newzone; + } + + if (is_ipaddrv6($ifcfgipv6)) { + $dhcpdv6conf .= "subnet6 {$subnetv6}/{$ifcfgsnv6}"; + } else { + $subnet6 = gen_subnetv6($dhcpv6ifconf['range']['from'], "64"); + $dhcpdv6conf .= "subnet6 {$subnet6}/64"; + } + $dhcpdv6conf .= " {\n"; + + $dhcpdv6conf .= << 0 ) + $dhcpdv6conf .= " option dhcp6.sntp-servers " . join(",", $dhcpv6ifconf['ntpserver']) . ";\n"; + } + // tftp-server-name + /* Needs ISC DHCPD support + if ($dhcpv6ifconf['tftp'] <> "") + $dhcpdv6conf .= " option tftp-server-name \"{$dhcpv6ifconf['tftp']}\";\n"; + */ + + // Handle option, number rowhelper values + $dhcpdv6conf .= "\n"; + if ($dhcpv6ifconf['numberoptions']['item']) { + foreach($dhcpv6ifconf['numberoptions']['item'] as $itemv6idx => $itemv6) { + $dhcpdv6conf .= " option custom-{$dhcpv6if}-{$itemv6idx} \"{$itemv6['value']}\";\n"; + } + } + + // ldap-server + if ($dhcpv6ifconf['ldap'] <> "") + $dhcpdv6conf .= " option ldap-server \"{$dhcpv6ifconf['ldap']}\";\n"; + + // net boot information + if(isset($dhcpv6ifconf['netboot'])) { + if (!empty($dhcpv6ifconf['bootfile_url'])) { + $dhcpdv6conf .= " option dhcp6.bootfile-url \"{$dhcpv6ifconf['bootfile_url']}\";\n"; + } + } + + $dhcpdv6conf .= "}\n"; + + /* add static mappings */ + /* Needs to use DUID */ + if (is_array($dhcpv6ifconf['staticmap'])) { + $i = 0; + foreach ($dhcpv6ifconf['staticmap'] as $sm) { + $dhcpdv6conf .= << "unmanaged") { + if(preg_match("/poes/si", $dhcpv6if)) { + /* magic here */ + $dhcpdv6ifs = array_merge($dhcpdv6ifs, get_pppoes_child_interfaces($dhcpv6if)); + } else { + $realif = get_real_interface($dhcpv6if, "inet6"); + if (stristr("$realif", "bridge")) { + $mac = get_interface_mac($realif); + $v6address = generate_ipv6_from_mac($mac); + /* Create link local address for bridges */ + mwexec("/sbin/ifconfig {$realif} inet6 {$v6address}"); + } + $realif = escapeshellcmd($realif); + $dhcpdv6ifs[] = $realif; + } + } + } + + if ($nsupdate) + { + $dhcpdv6conf .= "ddns-update-style interim;\n"; + } + else + { + $dhcpdv6conf .= "ddns-update-style none;\n"; + } + + /* write dhcpdv6.conf */ + if (!@file_put_contents("{$g['dhcpd_chroot_path']}/etc/dhcpdv6.conf", $dhcpdv6conf)) { + log_error("Error: cannot open {$g['dhcpd_chroot_path']}/etc/dhcpdv6.conf in services_dhcpdv6_configure().\n"); + if ($g['booting']) + printf("Error: cannot open {$g['dhcpd_chroot_path']}/etc/dhcpdv6.conf in services_dhcpdv6_configure().\n"); + unset($dhcpdv6conf); + return 1; + } + unset($dhcpdv6conf); + + /* create an empty leases v6 database */ + if (!file_exists("{$g['dhcpd_chroot_path']}/var/db/dhcpd6.leases")) + @touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd6.leases"); + + /* make sure there isn't a stale dhcpdv6.pid file, which may make dhcpdv6 fail to start. */ + /* if we get here, dhcpdv6 has been killed and is not started yet */ + unlink_if_exists("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpdv6.pid"); + + /* fire up dhcpd in a chroot */ + if (count($dhcpdv6ifs) > 0) { + mwexec("/usr/local/sbin/dhcpd -6 -user dhcpd -group _dhcp -chroot {$g['dhcpd_chroot_path']} -cf /etc/dhcpdv6.conf -pf {$g['varrun_path']}/dhcpdv6.pid " . + join(" ", $dhcpdv6ifs)); + mwexec("/usr/local/sbin/dhcpleases6 -c \"/usr/local/bin/php -f /usr/local/sbin/prefixes.php|/bin/sh\" -l {$g['dhcpd_chroot_path']}/var/db/dhcpd6.leases"); + } + if ($g['booting']) + print gettext("done.") . "\n"; + + return 0; +} + +function services_igmpproxy_configure() { + global $config, $g; + + /* kill any running igmpproxy */ + killbyname("igmpproxy"); + + if (!is_array($config['igmpproxy']['igmpentry']) || (count($config['igmpproxy']['igmpentry']) == 0)) + return 1; + + $iflist = get_configured_interface_list(); + + $igmpconf = << "") { + $item = explode(" ", $igmpcf['address']); + foreach($item as $iww) + $igmpconf .= "altnet {$iww}\n"; + } + $igmpconf .= "\n"; + } + foreach ($iflist as $ifn) { + $realif = get_real_interface($ifn); + $igmpconf .= "phyint {$realif} disabled\n"; + } + $igmpconf .= "\n"; + + $igmpfl = fopen($g['tmp_path'] . "/igmpproxy.conf", "w"); + if (!$igmpfl) { + log_error(gettext("Could not write Igmpproxy configuration file!")); + return; + } + fwrite($igmpfl, $igmpconf); + fclose($igmpfl); + unset($igmpconf); + + /* NOTE: -d4 means everything LOG_WARNING and smaller */ + mwexec("/usr/local/sbin/igmpproxy -d4 -c {$g['tmp_path']}/igmpproxy.conf"); + log_error(gettext("Started IGMP proxy service.")); + + return 0; +} + +function services_dhcrelay_configure() { + global $config, $g; + if ($g['platform'] == 'jail') + return; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dhcrelay_configure() being called $mt\n"; + } + + /* kill any running dhcrelay */ + killbypid("{$g['varrun_path']}/dhcrelay.pid"); + + $dhcrelaycfg =& $config['dhcrelay']; + + /* DHCPRelay enabled on any interfaces? */ + if (!isset($dhcrelaycfg['enable'])) + return 0; + + if ($g['booting']) + echo gettext("Starting DHCP relay service..."); + else + sleep(1); + + $iflist = get_configured_interface_list(); + + $dhcifaces = explode(",", $dhcrelaycfg['interface']); + foreach ($dhcifaces as $dhcrelayif) { + if (!isset($iflist[$dhcrelayif]) || + link_interface_to_bridge($dhcrelayif)) + continue; + + if (is_ipaddr(get_interface_ip($dhcrelayif))) + $dhcrelayifs[] = get_real_interface($dhcrelayif); + } + + /* + * In order for the relay to work, it needs to be active + * on the interface in which the destination server sits. + */ + $srvips = explode(",", $dhcrelaycfg['server']); + foreach ($srvips as $srcidx => $srvip) { + unset($destif); + foreach ($iflist as $ifname) { + $subnet = get_interface_ip($ifname); + if (!is_ipaddr($subnet)) + continue; + $subnet .= "/" . get_interface_subnet($ifname); + if (ip_in_subnet($srvip, $subnet)) { + $destif = get_real_interface($ifname); + break; + } + } + if (!isset($destif)) { + foreach (get_staticroutes() as $rtent) { + if (ip_in_subnet($srvip, $rtent['network'])) { + $a_gateways = return_gateways_array(true); + $destif = $a_gateways[$rtent['gateway']]['interface']; + break; + } + } + } + + if (!isset($destif)) { + /* Create a array from the existing route table */ + exec("/usr/bin/netstat -rnWf inet", $route_str); + array_shift($route_str); + array_shift($route_str); + array_shift($route_str); + array_shift($route_str); + $route_arr = array(); + foreach($route_str as $routeline) { + $items = preg_split("/[ ]+/i", $routeline); + if (is_subnetv4($items[0])) { + $subnet = $items[0]; + } elseif (is_ipaddrv4($items[0])) { + $subnet = "{$items[0]}/32"; + } else { + // Not a subnet or IP address, skip to the next line. + continue; + } + if (ip_in_subnet($srvip, $subnet)) { + $destif = trim($items[6]); + break; + } + } + } + + if (!isset($destif)) { + if (is_array($config['gateways']['gateway_item'])) { + foreach ($config['gateways']['gateway_item'] as $gateway) { + if (isset($gateway['defaultgw'])) { + $destif = get_real_interface($gateway['interface']); + break; + } + } + } else + $destif = get_real_interface("wan"); + } + + if (!empty($destif)) + $dhcrelayifs[] = $destif; + } + $dhcrelayifs = array_unique($dhcrelayifs); + + /* fire up dhcrelay */ + if (empty($dhcrelayifs)) { + log_error("No suitable interface found for running dhcrelay!"); + return; /* XXX */ + } + + $cmd = "/usr/local/sbin/dhcrelay -i " . implode(" -i ", $dhcrelayifs); + + if (isset($dhcrelaycfg['agentoption'])) + $cmd .= " -a -m replace"; + + $cmd .= " " . implode(" ", $srvips); + mwexec($cmd); + unset($cmd); + + return 0; +} + +function services_dhcrelay6_configure() { + global $config, $g; + if ($g['platform'] == 'jail') + return; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dhcrelay6_configure() being called $mt\n"; + } + + /* kill any running dhcrelay */ + killbypid("{$g['varrun_path']}/dhcrelay6.pid"); + + $dhcrelaycfg =& $config['dhcrelay6']; + + /* DHCPv6 Relay enabled on any interfaces? */ + if (!isset($dhcrelaycfg['enable'])) + return 0; + + if ($g['booting']) + echo gettext("Starting DHCPv6 relay service..."); + else + sleep(1); + + $iflist = get_configured_interface_list(); + + $dhcifaces = explode(",", $dhcrelaycfg['interface']); + foreach ($dhcifaces as $dhcrelayif) { + if (!isset($iflist[$dhcrelayif]) || + link_interface_to_bridge($dhcrelayif)) + continue; + + if (is_ipaddrv6(get_interface_ipv6($dhcrelayif))) + $dhcrelayifs[] = get_real_interface($dhcrelayif); + } + $dhcrelayifs = array_unique($dhcrelayifs); + + /* + * In order for the relay to work, it needs to be active + * on the interface in which the destination server sits. + */ + $srvips = explode(",", $dhcrelaycfg['server']); + $srvifaces = array(); + foreach ($srvips as $srcidx => $srvip) { + unset($destif); + foreach ($iflist as $ifname) { + $subnet = get_interface_ipv6($ifname); + if (!is_ipaddrv6($subnet)) + continue; + $subnet .= "/" . get_interface_subnetv6($ifname); + if (ip_in_subnet($srvip, $subnet)) { + $destif = get_real_interface($ifname); + break; + } + } + if (!isset($destif)) { + if (is_array($config['staticroutes']['route'])) { + foreach ($config['staticroutes']['route'] as $rtent) { + if (ip_in_subnet($srvip, $rtent['network'])) { + $a_gateways = return_gateways_array(true); + $destif = $a_gateways[$rtent['gateway']]['interface']; + break; + } + } + } + } + + if (!isset($destif)) { + /* Create a array from the existing route table */ + exec("/usr/bin/netstat -rnWf inet6", $route_str); + array_shift($route_str); + array_shift($route_str); + array_shift($route_str); + array_shift($route_str); + $route_arr = array(); + foreach($route_str as $routeline) { + $items = preg_split("/[ ]+/i", $routeline); + if (ip_in_subnet($srvip, $items[0])) { + $destif = trim($items[6]); + break; + } + } + } + + if (!isset($destif)) { + if (is_array($config['gateways']['gateway_item'])) { + foreach ($config['gateways']['gateway_item'] as $gateway) { + if (isset($gateway['defaultgw'])) { + $destif = $gateway['interface']; + break; + } + } + } else + $destif = get_real_interface("wan"); + } + + if (!empty($destif)) { + $srvifaces[] = "{$srvip}%{$destif}"; + } + } + + /* fire up dhcrelay */ + if (empty($dhcrelayifs) || empty($srvifaces) ) { + log_error("No suitable interface found for running dhcrelay -6!"); + return; /* XXX */ + } + + $cmd = "/usr/local/sbin/dhcrelay -6 -pf \"{$g['varrun_path']}/dhcrelay6.pid\""; + foreach ($dhcrelayifs as $dhcrelayif) { + $cmd .= " -l {$dhcrelayif}"; + } + foreach ($srvifaces as $srviface) { + $cmd .= " -u \"{$srviface}\""; + } + mwexec($cmd); + unset($cmd); + + return 0; +} + +function services_dyndns_configure_client($conf) { + + if (!isset($conf['enable'])) + return; + + /* load up the dyndns.class */ + require_once("dyndns.class"); + + $dns = new updatedns($dnsService = $conf['type'], + $dnsHost = $conf['host'], + $dnsUser = $conf['username'], + $dnsPass = $conf['password'], + $dnsWilcard = $conf['wildcard'], + $dnsMX = $conf['mx'], + $dnsIf = "{$conf['interface']}", + $dnsBackMX = NULL, + $dnsServer = NULL, + $dnsPort = NULL, + $dnsUpdateURL = "{$conf['updateurl']}", + $forceUpdate = $conf['force'], + $dnsZoneID=$conf['zoneid'], + $dnsTTL=$conf['ttl'], + $dnsResultMatch = "{$conf['resultmatch']}", + $dnsRequestIf = "{$conf['requestif']}", + $dnsID = "{$conf['id']}", + $dnsVerboseLog = $conf['verboselog'], + $curlIpresolveV4 = $conf['curl_ipresolve_v4'], + $curlSslVerifypeer = $conf['curl_ssl_verifypeer']); +} + +function services_dyndns_configure($int = "") { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dyndns_configure() being called $mt\n"; + } + + $dyndnscfg = $config['dyndnses']['dyndns']; + $gwgroups = return_gateway_groups_array(); + if (is_array($dyndnscfg)) { + if ($g['booting']) + echo gettext("Starting DynDNS clients..."); + + foreach ($dyndnscfg as $dyndns) { + if ((empty($int)) || ($int == $dyndns['interface']) || (is_array($gwgroups[$dyndns['interface']]))) { + $dyndns['verboselog'] = isset($dyndns['verboselog']); + $dyndns['curl_ipresolve_v4'] = isset($dyndns['curl_ipresolve_v4']); + $dyndns['curl_ssl_verifypeer'] = isset($dyndns['curl_ssl_verifypeer']); + services_dyndns_configure_client($dyndns); + sleep(1); + } + } + + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + return 0; +} + +function dyndnsCheckIP($int) { + global $config; + $ip_address = get_interface_ip($int); + if (is_private_ip($ip_address)) { + $gateways_status = return_gateways_status(true); + // If the gateway for this interface is down, then the external check cannot work. + // Avoid the long wait for the external check to timeout. + if (stristr($gateways_status[$config['interfaces'][$int]['gateway']]['status'],"down")) + return "down"; + $hosttocheck = "http://checkip.dyndns.org"; + $ip_ch = curl_init($hosttocheck); + curl_setopt($ip_ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ip_ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ip_ch, CURLOPT_INTERFACE, $ip_address); + curl_setopt($ip_ch, CURLOPT_CONNECTTIMEOUT, '30'); + curl_setopt($ip_ch, CURLOPT_TIMEOUT, 120); + curl_setopt($ip_ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + $ip_result_page = curl_exec($ip_ch); + curl_close($ip_ch); + $ip_result_decoded = urldecode($ip_result_page); + preg_match('=Current IP Address: (.*)=siU', $ip_result_decoded, $matches); + $ip_address = trim($matches[1]); + } + return $ip_address; +} + +function services_dnsmasq_configure() { + global $config, $g; + $return = 0; + + // hard coded args: will be removed to avoid duplication if specified in custom_options + $standard_args = array( + "dns-forward-max" => "--dns-forward-max=5000", + "cache-size" => "--cache-size=10000", + "local-ttl" => "--local-ttl=1" + ); + + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dnsmasq_configure() being called $mt\n"; + } + + /* kill any running dnsmasq */ + if (file_exists("{$g['varrun_path']}/dnsmasq.pid")) + sigkillbypid("{$g['varrun_path']}/dnsmasq.pid", "TERM"); + + if (isset($config['dnsmasq']['enable'])) { + + if ($g['booting']) + echo gettext("Starting DNS forwarder..."); + else + sleep(1); + + $args = ""; + + if (isset($config['dnsmasq']['regdhcp'])) { + $args .= " --dhcp-hostsfile={$g['varetc_path']}/hosts "; + } + + /* Setup listen port, if non-default */ + if (is_port($config['dnsmasq']['port'])) + $args .= " --port={$config['dnsmasq']['port']} "; + + $listen_addresses = ""; + if(isset($config['dnsmasq']['interface'])) { + $interfaces = explode(",", $config['dnsmasq']['interface']); + foreach ($interfaces as $interface) { + if (is_ipaddrv4($interface)) { + $listen_addresses .= " --listen-address={$interface} "; + } else if (is_ipaddrv6($interface)) { + /* + * XXX: Since dnsmasq does not support link-local address + * with scope specified. These checks are being done. + */ + if (is_linklocal($interface) && strstr($interface, "%")) { + $tmpaddrll6 = explode("%", $interface); + $listen_addresses .= " --listen-address={$tmpaddrll6[0]} "; + } else + $listen_addresses .= " --listen-address={$interface} "; + } else { + $if = get_real_interface($interface); + if (does_interface_exist($if)) { + $laddr = find_interface_ip($if); + if (is_ipaddrv4($laddr)) + $listen_addresses .= " --listen-address={$laddr} "; + $laddr6 = find_interface_ipv6($if); + if (is_ipaddrv6($laddr6) && !isset($config['dnsmasq']['strictbind'])) { + /* + * XXX: Since dnsmasq does not support link-local address + * with scope specified. These checks are being done. + */ + if (is_linklocal($laddr6) && strstr($laddr6, "%")) { + $tmpaddrll6 = explode("%", $laddr6); + $listen_addresses .= " --listen-address={$tmpaddrll6[0]} "; + } else + $listen_addresses .= " --listen-address={$laddr6} "; + } + } + } + } + if (!empty($listen_addresses)) { + $args .= " {$listen_addresses} "; + if (isset($config['dnsmasq']['strictbind'])) + $args .= " --bind-interfaces "; + } + } + + /* If selected, then first forward reverse lookups for private IPv4 addresses to nowhere. */ + /* If any of these are duplicated by a user-specified domain override (e.g. 10.in-addr.arpa) then */ + /* the user-specified entry made later on the command line below will be the one that is effective. */ + if (isset($config['dnsmasq']['no_private_reverse'])) { + /* Note: Carrier Grade NAT (CGN) addresses 100.64.0.0/10 are intentionally not here. */ + /* End-users should not be aware of CGN addresses, so reverse lookups for these should not happen. */ + /* Just the pfSense WAN might get a CGN address from an ISP. */ + $args .= " --server=/10.in-addr.arpa/ "; + $args .= " --server=/168.192.in-addr.arpa/ "; + /* Unfortunately the 172.16.0.0/12 range does not map nicely to the in-addr.arpa scheme. */ + for ($subnet_num = 16; $subnet_num < 32; $subnet_num++) { + $args .= " --server=/" . $subnet_num . ".172.in-addr.arpa/ "; + } + } + + /* Setup forwarded domains */ + if (isset($config['dnsmasq']['domainoverrides']) && is_array($config['dnsmasq']['domainoverrides'])) { + foreach($config['dnsmasq']['domainoverrides'] as $override) { + if ($override['ip'] == "!") + $override[ip] = ""; + $args .= ' --server=/' . $override['domain'] . '/' . $override['ip']; + } + } + + /* Allow DNS Rebind for forwarded domains */ + if (isset($config['dnsmasq']['domainoverrides']) && is_array($config['dnsmasq']['domainoverrides'])) { + if(!isset($config['system']['webgui']['nodnsrebindcheck'])) { + foreach($config['dnsmasq']['domainoverrides'] as $override) { + $args .= ' --rebind-domain-ok=/' . $override['domain'] . '/ '; + } + } + } + + if(!isset($config['system']['webgui']['nodnsrebindcheck'])) + $dns_rebind = "--rebind-localhost-ok --stop-dns-rebind"; + + if (isset($config['dnsmasq']['strict_order'])) { + $args .= " --strict-order "; + } + + if (isset($config['dnsmasq']['domain_needed'])) { + $args .= " --domain-needed "; + } + + if ($config['dnsmasq']['custom_options']) + foreach (preg_split('/\s+/', $config['dnsmasq']['custom_options']) as $c) { + $args .= " " . escapeshellarg("--{$c}"); + $p = explode('=', $c); + if (array_key_exists($p[0], $standard_args)) + unset($standard_args[$p[0]]); + } + $args .= ' ' . implode(' ', array_values($standard_args)); + + /* run dnsmasq */ + $cmd = "/usr/local/sbin/dnsmasq --all-servers {$dns_rebind} {$args}"; + //log_error("dnsmasq command: {$cmd}"); + mwexec_bg($cmd); + unset($args); + + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + if (!$g['booting']) { + if(services_dhcpd_configure()!=0) + $return = 1; + } + + return $return; +} + +function services_unbound_configure() { + global $config, $g; + $return = 0; + + if (isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_unbound_configure() being called $mt\n"; + } + + // kill any running Unbound instance + if (file_exists("{$g['varrun_path']}/unbound.pid")) + sigkillbypid("{$g['varrun_path']}/unbound.pid", "TERM"); + + if (isset($config['unbound']['enable'])) { + if ($g['booting']) + echo gettext("Starting DNS Resolver..."); + else + sleep(1); + + require_once('/etc/inc/unbound.inc'); + sync_unbound_service(); + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + if (!$g['booting']) { + if (services_dhcpd_configure()!=0) + $return = 1; + } + + return $return; +} + +function services_snmpd_configure() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_snmpd_configure() being called $mt\n"; + } + + /* kill any running snmpd */ + sigkillbypid("{$g['varrun_path']}/snmpd.pid", "TERM"); + sleep(2); + if(is_process_running("bsnmpd")) + mwexec("/usr/bin/killall bsnmpd", true); + + if (isset($config['snmpd']['enable'])) { + + if ($g['booting']) + echo gettext("Starting SNMP daemon... "); + + /* generate snmpd.conf */ + $fd = fopen("{$g['varetc_path']}/snmpd.conf", "w"); + if (!$fd) { + printf(gettext("Error: cannot open snmpd.conf in services_snmpd_configure().%s"),"\n"); + return 1; + } + + + $snmpdconf = << $dnsupdate) { + if (!isset($dnsupdate['enable'])) + continue; + if (!empty($int) && $int != $dnsupdate['interface']) + continue; + if (!empty($updatehost) && ($updatehost != $dnsupdate['host'])) + continue; + + /* determine interface name */ + $if = get_real_interface($dnsupdate['interface']); + + if (isset($dnsupdate['usepublicip'])) + $wanip = dyndnsCheckIP($dnsupdate['interface']); + else + $wanip = get_interface_ip($dnsupdate['interface']); + + $wanipv6 = get_interface_ipv6($dnsupdate['interface']); + $cacheFile = "{$g['conf_path']}/dyndns_{$dnsupdate['interface']}_rfc2136_" . escapeshellarg($dnsupdate['host']) . "_{$dnsupdate['server']}.cache"; + $currentTime = time(); + + if ($wanip || $wanipv6) { + $keyname = $dnsupdate['keyname']; + /* trailing dot */ + if (substr($keyname, -1) != ".") + $keyname .= "."; + + $hostname = $dnsupdate['host']; + /* trailing dot */ + if (substr($hostname, -1) != ".") + $hostname .= "."; + + /* write private key file + this is dumb - public and private keys are the same for HMAC-MD5, + but nsupdate insists on having both */ + $fd = fopen("{$g['varetc_path']}/K{$i}{$keyname}+157+00000.private", "w"); + $privkey = << $maxCacheAgeSecs) || $forced) { + $upinst .= "update delete {$dnsupdate['host']}. A\n"; + $upinst .= "update add {$dnsupdate['host']}. {$dnsupdate['ttl']} A {$wanip}\n"; + $notify_text .= sprintf(gettext("DynDNS updated IP Address (A) for {$dnsupdate['host']} on %s (%s) to %s"), convert_real_interface_to_friendly_descr($if), $if, $wanip) . "\n"; + @file_put_contents($cacheFile, "{$wanip}|{$currentTime}"); + log_error("phpDynDNS: updating cache file {$cacheFile}: {$wanip}"); + $need_update = true; + } else { + log_error("phpDynDNS: Not updating {$dnsupdate['host']} A record because the IP address has not changed."); + } + } else + @unlink($cacheFile); + + /* Update IPv6 if we have it. */ + if (is_ipaddrv6($wanipv6)) { + if (($wanipv6 != $cachedipv6) || (($currentTime - $cacheTimev6) > $maxCacheAgeSecs) || $forced) { + $upinst .= "update delete {$dnsupdate['host']}. AAAA\n"; + $upinst .= "update add {$dnsupdate['host']}. {$dnsupdate['ttl']} AAAA {$wanipv6}\n"; + $notify_text .= sprintf(gettext("DynDNS updated IPv6 Address (AAAA) for {$dnsupdate['host']} on %s (%s) to %s"), convert_real_interface_to_friendly_descr($if), $if, $wanipv6) . "\n"; + @file_put_contents("{$cacheFile}.ipv6", "{$wanipv6}|{$currentTime}"); + log_error("phpDynDNS: updating cache file {$cacheFile}.ipv6: {$wanipv6}"); + $need_update = true; + } else { + log_error("phpDynDNS: Not updating {$dnsupdate['host']} AAAA record because the IPv6 address has not changed."); + } + } else + @unlink("{$cacheFile}.ipv6"); + conf_mount_ro(); + + $upinst .= "\n"; /* mind that trailing newline! */ + + if ($need_update) { + @file_put_contents("{$g['varetc_path']}/nsupdatecmds{$i}", $upinst); + unset($upinst); + /* invoke nsupdate */ + $cmd = "/usr/local/bin/nsupdate -k {$g['varetc_path']}/K{$i}{$keyname}+157+00000.key"; + if (isset($dnsupdate['usetcp'])) + $cmd .= " -v"; + $cmd .= " {$g['varetc_path']}/nsupdatecmds{$i}"; + mwexec_bg($cmd); + unset($cmd); + } + } + } + if (!empty($notify_text)) { + notify_all_remote($notify_text); + } + } + + return 0; +} + +/* configure cron service */ +function configure_cron() { + global $g, $config; + + conf_mount_rw(); + /* preserve existing crontab entries */ + $crontab_contents = file("/etc/crontab", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + + for ($i = 0; $i < count($crontab_contents); $i++) { + $cron_item =& $crontab_contents[$i]; + if (strpos($cron_item, "# pfSense specific crontab entries") !== false) { + array_splice($crontab_contents, $i - 1); + break; + } + } + $crontab_contents = implode("\n", $crontab_contents) . "\n"; + + + if (is_array($config['cron']['item'])) { + $crontab_contents .= "#\n"; + $crontab_contents .= "# " . gettext("pfSense specific crontab entries") . "\n"; + $crontab_contents .= "# " .gettext( "Created:") . " " . date("F j, Y, g:i a") . "\n"; + $crontab_contents .= "#\n"; + + foreach ($config['cron']['item'] as $item) { + $crontab_contents .= "\n{$item['minute']}\t"; + $crontab_contents .= "{$item['hour']}\t"; + $crontab_contents .= "{$item['mday']}\t"; + $crontab_contents .= "{$item['month']}\t"; + $crontab_contents .= "{$item['wday']}\t"; + $crontab_contents .= "{$item['who']}\t"; + $crontab_contents .= "{$item['command']}"; + } + + $crontab_contents .= "\n#\n"; + $crontab_contents .= "# " . gettext("If possible do not add items to this file manually.") . "\n"; + $crontab_contents .= "# " . gettext("If you do so, this file must be terminated with a blank line (e.g. new line)") . "\n"; + $crontab_contents .= "#\n\n"; + } + + /* please maintain the newline at the end of file */ + file_put_contents("/etc/crontab", $crontab_contents); + unset($crontab_contents); + + /* do a HUP kill to force sync changes */ + sigkillbypid("{$g['varrun_path']}/cron.pid", "HUP"); + + conf_mount_ro(); +} + +function upnp_action ($action) { + global $g, $config; + switch($action) { + case "start": + if (file_exists('/var/etc/miniupnpd.conf')) { + @unlink("{$g['varrun_path']}/miniupnpd.pid"); + mwexec_bg("/usr/local/sbin/miniupnpd -f /var/etc/miniupnpd.conf -P {$g['varrun_path']}/miniupnpd.pid"); + } + break; + case "stop": + killbypid("{$g['varrun_path']}/miniupnpd.pid"); + while((int)exec("/bin/pgrep -a miniupnpd | wc -l") > 0) + mwexec('killall miniupnpd 2>/dev/null', true); + mwexec('/sbin/pfctl -aminiupnpd -Fr 2>&1 >/dev/null'); + mwexec('/sbin/pfctl -aminiupnpd -Fn 2>&1 >/dev/null'); + break; + case "restart": + upnp_action('stop'); + upnp_action('start'); + break; + } +} + +function upnp_start() { + global $config; + + if(!isset($config['installedpackages']['miniupnpd']['config'])) + return; + + if($config['installedpackages']['miniupnpd']['config'][0]['enable']) { + echo gettext("Starting UPnP service... "); + require_once('/usr/local/pkg/miniupnpd.inc'); + sync_package_miniupnpd(); + echo "done.\n"; + } +} + +function install_cron_job($command, $active=false, $minute="0", $hour="*", $monthday="*", $month="*", $weekday="*", $who="root") { + global $config, $g; + + $is_installed = false; + + if (!is_array($config['cron'])) + $config['cron'] = array(); + if (!is_array($config['cron']['item'])) + $config['cron']['item'] = array(); + + $x=0; + foreach($config['cron']['item'] as $item) { + if(strstr($item['command'], $command)) { + $is_installed = true; + break; + } + $x++; + } + + if($active) { + $cron_item = array(); + $cron_item['minute'] = $minute; + $cron_item['hour'] = $hour; + $cron_item['mday'] = $monthday; + $cron_item['month'] = $month; + $cron_item['wday'] = $weekday; + $cron_item['who'] = $who; + $cron_item['command'] = $command; + if(!$is_installed) { + $config['cron']['item'][] = $cron_item; + write_config(sprintf(gettext("Installed cron job for %s"), $command)); + } else { + $config['cron']['item'][$x] = $cron_item; + write_config(sprintf(gettext("Updated cron job for %s"), $command)); + } + } else { + if($is_installed == true) { + unset($config['cron']['item'][$x]); + write_config(sprintf(gettext("Removed cron job for %s"), $command)); + } + } + configure_cron(); +} + +?> diff --git a/etc/inc/shaper.inc b/etc/inc/shaper.inc new file mode 100644 index 000000000..fddff9262 --- /dev/null +++ b/etc/inc/shaper.inc @@ -0,0 +1,4529 @@ +GetInterface(); + $altq =& $altq_list_queues[$int]; + if ($altq) { + $bw_3 = $altq->GetBandwidth(); + $bw_3 = $bw_3 * get_bandwidthtype_scale($altq->GetBwscale()); + return floatval($bw_3); + } else + return 0; +} + +/* + * This is duplicated here since we cannot include guiconfig.inc. + * Including it makes all stuff break. + */ +function shaper_do_input_validation($postdata, $reqdfields, $reqdfieldsn, $input_errors) +{ + + /* check for bad control characters */ + foreach ($postdata as $pn => $pd) { + if (is_string($pd) && preg_match("/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/", $pd)) { + $input_errors[] = sprintf(gettext("The field '%s' contains invalid characters."), $pn); + } + } + + for ($i = 0; $i < count($reqdfields); $i++) { + if ($postdata[$reqdfields[$i]] == "") { + $input_errors[] = sprintf(gettext("The field '%s' is required."), $reqdfieldsn[$i]); + } + } +} + +function cleanup_queue_from_rules($queue) +{ + global $config; + + foreach ($config['filter']['rule'] as $rule) { + if ($rule['defaultqueue'] == $queue) + unset($rule['defaultqueue']); + if ($rule['ackqueue'] == $queue) + unset($rule['ackqueue']); + } +} + +function cleanup_dnqueue_from_rules($queue) +{ + global $config; + + foreach ($config['filter']['rule'] as $rule) { + if ($rule['dnpipe'] == $queue) + unset($rule['dnpipe']); + if ($rule['pdnpipe'] == $queue) + unset($rule['pdnpipe']); + } +} + +class altq_root_queue { + var $interface; + var $tbrconfig ; + var $bandwidth; + var $bandwidthtype; /* b, Kb, Mb */ + var $scheduler; + var $qlimit; + var $queues = array(); + var $qenabled = false; + var $link; + var $available_bw; /* in b/s */ + + /* Accesor functions */ + function GetAvailableBandwidth() { + return $this->available_bw; + } + function SetAvailableBandwidth($bw) { + $this->available_bw = $bw; + } + function GetDefaultQueuePresent() { + if (!empty($this->queues)) { + foreach ($this->queues as $q) { + if ($q->GetDefault()) + return true; + } + } + + return false; + } + function SetLink($link) { + $this->link = $link; + } + function GetLink() { + return $this->link; + } + function GetEnabled() { + return $this->qenabled; + } + function SetEnabled($value) { + $this->qenabled = $value; + } + function CanHaveChildren() { + if ($this->GetScheduler() == "CODELQ") + return false; + else + return true; + } + function CanBeDeleted() { + return false; + } + function GetQname() { + return $this->interface; + } + function SetQname($name) { + $this->interface = trim($name); + } + function GetInterface() { + return $this->interface; + } + function SetInterface($name) { + $this->interface = trim($name); + } + function GetTbrConfig() { + return $this->tbrconfig; + } + function SetTbrConfig($tbrconfig) { + $this->tbrconfig = $tbrconfig; + } + function GetBandwidth() { + return $this->bandwidth; + } + function SetBandwidth($bw) { + $this->bandwidth = $bw; + } + function GetBwscale() { + return $this->bandwidthtype; + } + function SetBwscale($bwscale) { + $this->bandwidthtype = $bwscale; + } + function GetScheduler() { + return $this->scheduler; + } + function SetScheduler($scheduler) { + $this->scheduler = trim($scheduler); + } + function GetQlimit() { + return $this->qlimit; + } + function SetQlimit($limit) { + $this->qlimit = $limit; + } + + function validate_input($data, &$input_errors) { + + $reqdfields[] = "bandwidth"; + $reqdfieldsn[] = gettext("Bandwidth"); + $reqdfields[] = "bandwidthtype"; + $reqdfieldsn[] = gettext("Bandwidthtype"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if ($data['bandwidth'] && (!is_numeric($data['bandwidth']))) + $input_errors[] = gettext("Bandwidth must be an integer."); + if ($data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth cannot be negative."); + if ($data['qlimit'] && (!is_numeric($data['qlimit']))) + $input_errors[] = gettext("Qlimit must be an integer."); + if ($data['qlimit'] < 0) + $input_errors[] = gettext("Qlimit must be positive."); + if ($data['tbrconfig'] && (!is_numeric($data['tbrconfig']))) + $input_errors[] = gettext("Tbrsize must be an integer."); + if ($data['tbrconfig'] < 0) + $input_errors[] = gettext("Tbrsize must be positive."); + } + + /* Implement this to shorten some code on the frontend page */ + function ReadConfig(&$conf) { + if (isset($conf['tbrconfig'])) + $this->SetTbrConfig($conf['tbrconfig']); + else + $this->SetTbrConfig($conf['tbrconfig']); + $this->SetBandwidth($conf['bandwidth']); + if ($conf['bandwidthtype'] <> "") + $this->SetBwscale($conf['bandwidthtype']); + if (isset($conf['scheduler'])) { + if ($this->GetScheduler() != $conf['scheduler']) { + foreach ($this->queues as $q) { + clean_child_queues($conf['scheduler'], $this->GetLink()); + $q->clean_queue($conf['scheduler']); + } + } + $this->SetScheduler($conf['scheduler']); + } + if (isset($conf['qlimit']) && $conf['qlimit'] <> "") + $this->SetQlimit($conf['qlimit']); + else + $this->SetQlimit(""); + if (isset($conf['name'])) + $this->SetQname($conf['name']); + if (!empty($conf['enabled'])) + $this->SetEnabled($conf['enabled']); + else + $this->SetEnabled(""); + } + + function copy_queue($interface, &$cflink) { + $cflink['interface'] = $interface; + $cflink['name'] = $interface; + $cflink['scheduler'] = $this->GetScheduler(); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['qlimit'] = $this->GetQlimit(); + $cflink['tbrconfig'] = $this->GetTbrConfig(); + $cflink['enabled'] = $this->GetEnabled(); + if (is_array($this->queues)) { + $cflink['queue'] = array(); + foreach ($this->queues as $q) { + $cflink['queue'][$q->GetQname()] = array(); + $q->copy_queue($interface, $cflink['queue'][$q->GetQname()]); + } + } + } + + function &get_queue_list(&$q = null) { + $qlist = array(); + + //$qlist[$this->GetQname()] = & $this; + if (is_array($this->queues)) { + foreach ($this->queues as $queue) + $queue->get_queue_list($qlist); + } + return $qlist; + } + + function &add_queue($interface, &$queue, &$path, &$input_errors) { + + if (!is_array($this->queues)) + $this->queues = array(); + + switch ($this->GetScheduler()) { + case "PRIQ": + $q =& new priq_queue(); + break; + case "HFSC": + $q =& new hfsc_queue(); + break; + case "CBQ": + $q =& new cbq_queue(); + break; + case "FAIRQ": + $q =& new fairq_queue(); + break; + default: + /* XXX: but should not happen anyway */ + return; + break; + } + $q->SetLink($path); + $q->SetInterface($this->GetInterface()); + $q->SetEnabled("on"); + $q->SetParent($this); + $q->ReadConfig($queue); + $q->validate_input($queue, $input_errors); + if (count($input_errors)) { + log_error("SHAPER: could not create queue " . $q->GetQname() . " on interface {$interface} because: " . print_r($input_errors, true)); + return $q; + } + + if (isset($queue['bandwidth'])) { + switch ($queue['bandwidthtype']) { + case "%": + $myBw = $this->GetAvailableBandwidth() * $queue['bandwidth'] / 100; + break; + default: + $myBw = $queue['bandwidth'] * get_bandwidthtype_scale($queue['bandwdithtype']); + break; + } + } + $q->SetAvailableBandwidth($myBw); + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() - $myBw); + $this->queues[$q->GetQname()] = &$q; + ref_on_altq_queue_list($this->GetQname(), $q->GetQname()); + if (is_array($queue['queue'])) { + foreach ($queue['queue'] as $key1 => $que) { + array_push($path, $key1); + $q->add_queue($q->GetInterface(), $que, $path, $input_errors); + array_pop($path); + } + } + + return $q; + } + + /* interface here might be optional */ + function &find_queue($interface, $qname) { + if ($qname == $this->GetQname()) { + return $this; + } + foreach ($this->queues as $q) { + $result =& $q->find_queue("", $qname); + if ($result) + return $result; + } + } + + function &find_parentqueue($interface, $qname) { + if ($qname == $interface) { + $result = NULL; + } else if ($this->queues[$qname]) { + $result = $this; + } else if ($this->GetScheduler() <> "PRIQ") { + foreach ($this->queues as $q) { + $result = $q->find_parentqueue("", $qname); + if ($result) + return $result; + } + } + } + + function build_tree() { + global $shaperIFlist; + + $tree = "
  • GetInterface()."&queue=". $this->GetInterface()."&action=show"; + $tree .= "\">" . $shaperIFlist[$this->GetInterface()] . ""; + if (is_array($this->queues)) { + $tree .= "
      "; + foreach ($this->queues as $q) { + $tree .= $q->build_tree(); + } + $tree .= "
    "; + } + $tree .= "
  • "; + return $tree; + } + + function delete_queue() { + foreach ($this->queues as $q) { + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() + $q->GetAvailableBandwidth()); + $q->delete_queue(); + } + unset_object_by_reference($this->GetLink()); + } + + function delete_all() { + if (count($this->queues)) { + foreach ($this->queues as $q) { + $q->delete_all(); + unset_object_by_reference($q->GetLink()); + unset($q); + } + unset($this->queues); + } + } + + /* + * First it spits: + * altq on $interface .............. + * then it goes like + * foreach ($queues as $qkey => $queue) + * this->queues[$qkey]->build_rule(); + */ + function build_rules(&$default = false) { + if (count($this->queues) > 0 && $this->GetEnabled() == "on") { + $default = false; + $rules = " altq on " . get_real_interface($this->GetInterface()); + if ($this->GetScheduler()) + $rules .= " ".strtolower($this->GetScheduler()); + if ($this->GetQlimit() > 0) + $rules .= " qlimit " . $this->GetQlimit() . " "; + if ($this->GetBandwidth()) { + $rules .= " bandwidth ".trim($this->GetBandwidth()); + if ($this->GetBwscale()) + $rules .= $this->GetBwscale(); + } + if ($this->GetTbrConfig()) + $rules .= " tbrsize ".$this->GetTbrConfig(); + if (count($this->queues)) { + $i = count($this->queues); + $rules .= " queue { "; + foreach ($this->queues as $qkey => $qnone) { + if ($i > 1) { + $i--; + $rules .= " {$qkey}, "; + } else + $rules .= " {$qkey} "; + } + $rules .= " } \n"; + foreach ($this->queues as $q) { + $rules .= $q->build_rules($default); + } + } + + if ($default == false) { + $error = "SHAPER: no default queue specified for interface ". $this->GetInterface() . ". The interface queue will be enforced as default."; + file_notice("Shaper", $error, "Error occurred", ""); + unset($error); + return "\n"; + } + $frule .= $rules; + } else if ($this->GetEnabled() == "on" && $this->GetScheduler() == "CODELQ") { + $rules = " altq on " . get_real_interface($this->GetInterface()); + if ($this->GetScheduler()) + $rules .= " ".strtolower($this->GetScheduler()); + if ($this->GetQlimit() > 0) + $rules .= " ( qlimit " . $this->GetQlimit() . " ) "; + if ($this->GetBandwidth()) { + $rules .= " bandwidth ".trim($this->GetBandwidth()); + if ($this->GetBwscale()) + $rules .= $this->GetBwscale(); + } + if ($this->GetTbrConfig()) + $rules .= " tbrsize ".$this->GetTbrConfig(); + + $rules .= " queue"; + } + + $rules .= " \n"; + return $rules; + } + + function build_javascript() { + $javascript = ""; + + return $javascript; + } + + function build_shortform() { + global $g; + + $altq =& $this; + if ($altq) + $scheduler = ": " . $altq->GetScheduler(); + $form = ""; + $form .= "GetInterface() . "&queue=". $this->GetInterface()."&action=show\">". $shaperIFlist[$this->GetInterface()] .": ".$scheduler.""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "Bandwidth: " . $this->GetBandwidth().$this->GetBwscale(); + $form .= ""; + $form .= ""; + $form .= "GetInterface() . "&queue="; + $form .= $this->GetQname() . "&action=delete\">"; + $form .= "\"disable\""; + $form .= "Disable shaper on interface"; + + return $form; + + } + /* + * For requesting the parameters of the root queues + * to the user like the traffic wizard does. + */ + function build_form() { + $form = "
    "; + $form .= gettext("Enable/Disable"); + $form .= "
    "; + $form .= " GetEnabled() == "on") + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Enable/disable discipline and its children") . ""; + $form .= ""; + $form .= "
    " . gettext("Name") . ""; + $form .= ""; + $form .= "".$this->GetQname().""; + $form .= ""; + $form .= "" . gettext("Scheduler Type "); + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "
    "; + $form .= gettext("NOTE: Changing this changes all child queues!"); + $form .= gettext(" Beware you can lose information."); + $form .= ""; + $form .= ""; + $form .= "" . gettext("Bandwidth"); + $form .= ""; + $form .= "GetBandwidth() . "\" />"; + $form .= ""; + $form .= ""; + $form .= "Queue Limit"; + $form .= ""; + $form .= "GetQlimit(); + $form .= "\" />"; + $form .= ""; + $form .= "TBR Size"; + $form .= ""; + $form .= "
    GetTbrConfig(); + $form .= "\" />"; + $form .= "
    "; + $form .= gettext("Adjusts the size, in bytes, of the token bucket regulator. " + . "If not specified, heuristics based on the interface " + . "bandwidth are used to determine the size."); + $form .= ""; + $form .= "GetInterface() . "\" />"; + $form .= "GetQname()."\" />"; + + + return $form; + } + + function update_altq_queue_data(&$data) { + $this->ReadConfig($data); + } + + /* + * Should call on each of it queues and subqueues + * the same function much like build_rules(); + */ + function wconfig() { + $cflink = &get_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['interface'] = $this->GetInterface(); + $cflink['name'] = $this->GetQname(); + $cflink['scheduler'] = $this->GetScheduler(); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['tbrconfig'] = trim($this->GetTbrConfig()); + if (empty($cflink['tbrconfig'])) + unset($cflink['tbrconfig']); + $cflink['enabled'] = $this->GetEnabled(); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + } + +} + +class priq_queue { + var $qname; + var $qinterface; + var $qlimit; + var $qpriority; + var $description; + var $isparent; + var $qbandwidth; + var $qbandwidthtype; + var $qdefault = ""; + var $qrio = ""; + var $qred = ""; + var $qcodel = ""; + var $qecn = ""; + var $qack; + var $qenabled = ""; + var $qparent; + var $link; + var $available_bw; /* in b/s */ + + /* This is here to help with form building and building rules/lists */ + var $subqueues = array(); + + /* Accesor functions */ + function GetAvailableBandwidth() { + return $this->available_bw; + } + function SetAvailableBandwidth($bw) { + $this->available_bw = $bw; + } + function SetLink($link) { + $this->link = $link; + } + function GetLink() { + return $this->link; + } + function &GetParent() { + return $this->qparent; + } + function SetParent(&$parent) { + $this->qparent = &$parent; + } + function GetEnabled() { + return $this->qenabled; + } + function SetEnabled($value) { + $this->qenabled = $value; + } + function CanHaveChildren() { + return false; + } + function CanBeDeleted() { + return true; + } + function GetQname() { + return $this->qname; + } + function SetQname($name) { + $this->qname = trim($name); + } + function GetBandwidth() { + return $this->qbandwidth; + } + function SetBandwidth($bandwidth) { + $this->qbandwidth = $bandwidth; + } + function GetInterface() { + return $this->qinterface; + } + function SetInterface($name) { + $this->qinterface = trim($name); + } + function GetQlimit() { + return $this->qlimit; + } + function SetQlimit($limit) { + $this->qlimit = $limit; + } + function GetQpriority() { + return $this->qpriority; + } + function SetQpriority($priority) { + $this->qpriority = $priority; + } + function GetDescription() { + return $this->description; + } + function SetDescription($str) { + $this->description = trim($str); + } + function GetFirstime() { + return $this->firsttime; + } + function SetFirsttime($number) { + $this->firsttime = $number; + } + function GetBwscale() { + return $this->qbandwidthtype; + } + function SetBwscale($scale) { + $this->qbandwidthtype = $scale; + } + function GetDefaultQueuePresent() { + if ($this->GetDefault()) + return true; + if (!empty($this->subqueues)) { + foreach ($this->subqueues as $q) { + if ($q->GetDefault()) + return true; + } + } + + return false; + } + function GetDefault() { + return $this->qdefault; + } + function SetDefault($value = false) { + $this->qdefault = $value; + } + function GetCodel() { + return $this->codel; + } + function SetCodel($codel = false) { + $this->codel = $codel; + } + function GetRed() { + return $this->qred; + } + function SetRed($red = false) { + $this->qred = $red; + } + function GetRio() { + return $this->qrio; + } + function SetRio($rio = false) { + $this->qrio = $rio; + } + function GetEcn() { + return $this->qecn; + } + function SetEcn($ecn = false) { + $this->qecn = $ecn; + } + function GetAck() { + return $this->qack; + } + function SetAck($ack = false) { + $this->qack = $ack; + } + + function build_javascript() { + $javascript = ""; + + return $javascript; + } + + function &add_queue($interface, &$qname, &$path, &$input_errors) { return; } + + /* + * Currently this will not be called unless we decide to clone a whole + * queue tree on the 'By Queues' view or support drag&drop on the tree/list + */ + function copy_queue($interface, &$cflink) { + + $cflink['name'] = $this->GetQname(); + $cflink['interface'] = $interface; + $cflink['qlimit'] = $this->GetQlimit(); + $cflink['priority'] = $this->GetQpriority(); + $cflink['description'] = $this->GetDescription(); + $cflink['enabled'] = $this->GetEnabled(); + $cflink['default'] = $this->GetDefault(); + $cflink['red'] = $this->GetRed(); + $cflink['codel'] = $this->GetCodel(); + $cflink['rio'] = $this->GetRio(); + $cflink['ecn'] = $this->GetEcn(); + + if (is_array($this->subqueues)) { + $cflinkp['queue'] = array(); + foreach ($this->subqueues as $q) { + $cflink['queue'][$q->GetQname()] = array(); + $q->copy_queue($interface, $cflink['queue'][$q->GetQname()]); + } + } + + } + + function clean_queue($sched) { + clean_child_queues($sched, $this->GetLink()); + if (is_array($this->subqueues)) { + foreach ($this->subqueues as $q) + $q->clean_queue($sched); + } + } + + function &get_queue_list(&$qlist) { + + $qlist[$this->GetQname()] = & $this; + if (is_array($this->subqueues)) { + foreach ($this->subqueues as $queue) + $queue->get_queue_list($qlist); + } + } + + function delete_queue() { + unref_on_altq_queue_list($this->GetQname()); + cleanup_queue_from_rules($this->GetQname()); + unset_object_by_reference($this->GetLink()); + } + + function delete_all() { + if (count($this->subqueues)) { + foreach ($this->subqueues as $q) { + $q->delete_all(); + unset_object_by_reference($q->GetLink()); + unset($q); + } + unset($this->subqueues); + } + } + + function &find_queue($interface, $qname) { + if ($qname == $this->GetQname()) + return $this; + } + + function find_parentqueue($interface, $qname) { return; } + + function validate_input($data, &$input_errors) { + + $reqdfields[] = "name"; + $reqdfieldsn[] = gettext("Name"); + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if ($data['bandwidth'] && (!is_numeric($data['bandwidth']))) + $input_errors[] = "Bandwidth must be an integer."; + if ($data['bandwidth'] < 0) + $input_errors[] = "Bandwidth cannot be negative."; + if ($data['priority'] && (!is_numeric($data['priority']) + || ($data['priority'] < 1) || ($data['priority'] > 15))) { + $input_errors[] = gettext("The priority must be an integer between 1 and 15."); + } + if ($data['qlimit'] && (!is_numeric($data['qlimit']))) + $input_errors[] = gettext("Queue limit must be an integer"); + if ($data['qlimit'] < 0) + $input_errors[] = gettext("Queue limit must be positive"); + if (!empty($data['newname']) && !preg_match("/^[a-zA-Z0-9_-]*$/", $data['newname'])) + $input_errors[] = gettext("Queue names must be alphanumeric and _ or - only."); + if (!empty($data['name']) && !preg_match("/^[a-zA-Z0-9_-]*$/", $data['name'])) + $input_errors[] = gettext("Queue names must be alphanumeric and _ or - only."); + $default = $this->GetDefault(); + if (!empty($data['default']) && altq_get_default_queue($data['interface']) && empty($default)) + $input_errors[] = gettext("Only one default queue per interface is allowed."); + } + + function ReadConfig(&$q) { + if (!empty($q['name']) && !empty($q['newname']) && $q['name'] != $q['newname']) { + $this->SetQname($q['newname']); + } else if (!empty($q['newname'])) { + $this->SetQname($q['newname']); + } else if (isset($q['name'])) + $this->SetQname($q['name']); + if (isset($q['interface'])) + $this->SetInterface($q['interface']); + $this->SetBandwidth($q['bandwidth']); + if ($q['bandwidthtype'] <> "") + $this->SetBwscale($q['bandwidthtype']); + if (!empty($q['qlimit'])) + $this->SetQlimit($q['qlimit']); + else + $this->SetQlimit(""); // Default + if (!empty($q['priority'])) + $this->SetQPriority($q['priority']); + else + $this->SetQpriority(""); + if (!empty($q['description'])) + $this->SetDescription($q['description']); + else + $this->SetDescription(""); + if (!empty($q['red'])) + $this->SetRed($q['red']); + else + $this->SetRed(); + if (!empty($q['codel'])) + $this->SetCodel($q['codel']); + else + $this->SetCodel(); + if (!empty($q['rio'])) + $this->SetRio($q['rio']); + else + $this->SetRio(); + if (!empty($q['ecn'])) + $this->SetEcn($q['ecn']); + else + $this->SetEcn(); + if (!empty($q['default'])) + $this->SetDefault($q['default']); + else + $this->SetDefault(); + if (!empty($q['enabled'])) + $this->SetEnabled($q['enabled']); + else + $this->SetEnabled(""); + + } + + function build_tree() { + $tree = "
  • GetInterface()."&queue=". $this->GetQname()."&action=show"; + $tree .= "\" "; + $tmpvalue = $this->GetDefault(); + if (!empty($tmpvalue)) + $tree .= " class=\"navlnk\""; + $tree .= " >" . $this->GetQname() . ""; + /* + * Not needed here! + * if (is_array($queues) { + * $tree .= "
      "; + * foreach ($q as $queues) + * $tree .= $queues['$q->GetName()']->build_tree(); + * endforeach + * $tree .= "
    "; + * } + */ + + $tree .= "
  • "; + + return $tree; + } + + /* Should return something like: + * queue $qname on $qinterface bandwidth .... + */ + function build_rules(&$default = false) { + $pfq_rule = " queue ". $this->qname; + if ($this->GetInterface()) + $pfq_rule .= " on ".get_real_interface($this->GetInterface()); + $tmpvalue = $this->GetQpriority(); + if (!empty($tmpvalue)) + $pfq_rule .= " priority ".$this->GetQpriority(); + $tmpvalue = $this->GetQlimit(); + if (!empty($tmpvalue)) + $pfq_rule .= " qlimit " . $this->GetQlimit(); + if ($this->GetRed() || $this->GetRio() || $this->GetEcn() || $this->GetDefault() || $this->GetCodel()) { + $pfq_rule .= " priq ( "; + $tmpvalue = $this->GetRed(); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " red "; + } + $tmpvalue = $this->GetRio(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " rio "; + } + $tmpvalue = $this->GetEcn(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " ecn "; + } + $tmpvalue = $this->GetCodel(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " codel "; + } + $tmpvalue = $this->GetDefault(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $pfq_rule .= " default "; + $default = true; + } + $pfq_rule .= " ) "; + } + + $pfq_rule .= " \n"; + + return $pfq_rule; + } + + /* + * To return the html form to show to user + * for getting the parameters. + * Should do even for first time when the + * object is created and later when we may + * need to update it. + */ + function build_form() { + $form = "
    "; + $form .= gettext("Enable/Disable"); + $form .= "
    "; + $form .= " GetEnabled() == "on") + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Enable/Disable queue and its children") . ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= gettext("Queue Name") . ""; + $form .= "GetQname()); + $form .= "\" />"; + $form .= "GetQname()); + $form .= "\" />"; + $form .= "
    " . gettext("Enter the name of the queue here. Do not use spaces and limit the size to 15 characters."); + $form .= "
    "; + $form .= ""; + $form .= "" . gettext("Priority") . ""; + $form .= " GetQpriority()); + $form .= "\" />"; + $form .= "
    " . gettext("For hfsc, the range is 0 to 7. The default is 1. Hfsc queues with a higher priority are preferred in the case of overload.") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Queue limit") . ""; + $form .= " GetQlimit()); + $form .= "\" />"; + $form .= "
    " . gettext("Queue limit in packets."); + $form .= ""; + $form .= ""; + $form .= "" . gettext("Scheduler options") . ""; + $form .= ""; + if (empty($this->subqueues)) { + if ($this->GetDefault()) { + $form .= ""; + } else { + $form .= ""; + } + } + $form .= "GetRed(); + if(!empty($tmpvalue)) + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Random Early Detection") . "
    "; + $form .= "GetRio(); + if(!empty($tmpvalue)) + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Random Early Detection In and Out") . "
    "; + $form .= "GetEcn(); + if(!empty($tmpvalue)) + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Explicit Congestion Notification") . "
    "; + $form .= "GetCodel(); + if(!empty($tmpvalue)) + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Codel Active Queue") . "
    "; + $form .= "
    " . gettext("Select options for this queue"); + $form .= "
    "; + $form .= "" . gettext("Description") . ""; + $form .= ""; + $form .= "GetDescription() . "\" />"; + $form .= ""; + $form .= "GetInterface()."\" />"; + + return $form; + } + + function build_shortform() { + /* XXX: Hacks in site. Mostly layer violations! */ + global $g, $altq_list_queues; + global $shaperIFlist; + + $altq =& $altq_list_queues[$this->GetInterface()]; + if ($altq) + $scheduler = ": " . $altq->GetScheduler(); + $form = ""; + $form .= "GetInterface() . "&queue=" . $this->GetQname()."&action=show\">". $shaperIFlist[$this->GetInterface()] .$scheduler.""; + $form .= ""; + /* + * XXX: Hack in sight maybe fix with a class that wraps all + * of this layer violations + */ + $form .= ""; + $form .= ""; + $form .= gettext("Bandwidth:") . " " . $this->GetBandwidth().$this->GetBwscale(); + $form .= ""; + $tmpvalue = $this->GetQpriority(); + if (!empty($tmpvalue)) + $form .= "" .gettext("Priority: on") . " "; + $tmpvalue = $this->GetDefault(); + if (!empty($tmpvalue)) + $form .= "" . gettext("Default: on") . " "; + $form .= ""; + $form .= "GetInterface() . "&queue="; + $form .= $this->GetQname() . "&action=delete\">"; + $form .= "\"delete\""; + $form .= "" . gettext("Delete queue from interface") . ""; + + return $form; + + } + + function update_altq_queue_data(&$q) { + $this->ReadConfig($q); + } + + function wconfig() { + $cflink =& get_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['name'] = $this->GetQname(); + $cflink['interface'] = $this->GetInterface(); + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = trim($this->GetQpriority()); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['description'] = trim($this->GetDescription()); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['enabled'] = trim($this->GetEnabled()); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = trim($this->GetDefault()); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['codel'] = trim($this->GetCodel()); + if (empty($cflink['codel'])) + unset($cflink['codel']); + $cflink['rio'] = trim($this->GetRio()); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + } +} + +class hfsc_queue extends priq_queue { + /* realtime */ + var $realtime; + var $r_m1; + var $r_d; + var $r_m2; + /* linkshare */ + var $linkshare; + var $l_m1; + var $l_d; + var $l_m2; + /* upperlimit */ + var $upperlimit; + var $u_m1; + var $u_d; + var $u_m2; + + /* + * HFSC can have nested queues. + */ + function CanHaveChildren() { + return true; + } + function GetRealtime() { + return $this->realtime; + } + function GetR_m1() { + return $this->r_m1; + } + function GetR_d() { + return $this->r_d; + } + function GetR_m2() { + return $this->r_m2; + } + function SetRealtime() { + $this->realtime = "on"; + } + function DisableRealtime() { + $this->realtime = ""; + } + function SetR_m1($value) { + $this->r_m1 = $value; + } + function SetR_d($value) { + $this->r_d = $value; + } + function SetR_m2($value) { + $this->r_m2 = $value; + } + function GetLinkshare() { + return $this->linkshare; + } + function DisableLinkshare() { + $this->linkshare = ""; + } + function GetL_m1() { + return $this->l_m1; + } + function GetL_d() { + return $this->l_d; + } + function GetL_m2() { + return $this->l_m2; + } + function SetLinkshare() { + $this->linkshare = "on"; + } + function SetL_m1($value) { + $this->l_m1 = $value; + } + function SetL_d($value) { + $this->l_d = $value; + } + function SetL_m2($value) { + $this->l_m2 = $value; + } + function GetUpperlimit() { + return $this->upperlimit; + } + function GetU_m1() { + return $this->u_m1; + } + function GetU_d() { + return $this->u_d; + } + function GetU_m2() { + return $this->u_m2; + } + function SetUpperlimit() { + $this->upperlimit = "on"; + } + function DisableUpperlimit() { + $this->upperlimit = ""; + } + function SetU_m1($value) { + $this->u_m1 = $value; + } + function SetU_d($value) { + $this->u_d = $value; + } + function SetU_m2($value) { + $this->u_m2 = $value; + } + + function &add_queue($interface, &$qname, &$path, &$input_errors) { + + if (!is_array($this->subqueues)) + $this->subqueues = array(); + $q =& new hfsc_queue(); + $q->SetInterface($this->GetInterface()); + $q->SetParent($this); + $q->ReadConfig($qname); + $q->validate_input($qname, $input_errors); + if (count($input_errors)) { + log_error("SHAPER: could not create queue " . $q->GetQname() . " on interface {$interface} because: " . print_r($input_errors, true)); + return $q; + } + + $q->SetEnabled("on"); + $q->SetLink($path); + switch ($q->GetBwscale()) { + case "%": + $myBw = $this->GetAvailableBandwidth() * $qname['bandwidth'] / 100; + break; + default: + $myBw = $qname['bandwidth'] * get_bandwidthtype_scale($q->GetBwscale()); + break; + } + $q->SetAvailableBandwidth($myBw); + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() - $myBw); + + $this->subqueues[$q->GetQname()] =& $q; //new hfsc_queue() + ref_on_altq_queue_list($this->GetQname(), $q->GetQname()); + if (is_array($qname['queue'])) { + foreach ($qname['queue'] as $key1 => $que) { + array_push($path, $key1); + $q->add_queue($q->GetInterface(), $que, $path, $input_errors); + array_pop($path); + } + } + + return $q; + } + + function copy_queue($interface, &$cflink) { + + $cflink['name'] = $this->GetQname(); + $cflink['interface'] = $interface; + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = trim($this->GetQpriority()); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['description'] = trim($this->GetDescription()); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = trim($this->GetEnabled()); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = trim($this->GetDefault()); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['rio'] = trim($this->GetRio()); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + if ($this->GetLinkshare() <> "") { + if ($this->GetL_m1() <> "") { + $cflink['linkshare1'] = $this->GetL_m1(); + $cflink['linkshare2'] = $this->GetL_d(); + $cflink['linkshare'] = "on"; + } else { + unset($cflink['linkshare1']); + unset($cflink['linkshare2']); + unset($cflink['linkshare']); + } + if ($this->GetL_m2() <> "") { + $cflink['linkshare3'] = $this->GetL_m2(); + $cflink['linkshare'] = "on"; + } else { + unset($cflink['linkshare3']); + unset($cflink['linkshare']); + } + } + if ($this->GetRealtime() <> "") { + if ($this->GetR_m1() <> "") { + $cflink['realtime1'] = $this->GetR_m1(); + $cflink['realtime2'] = $this->GetR_d(); + $cflink['realtime'] = "on"; + } else { + unset($cflink['realtime1']); + unset($cflink['realtime2']); + unset($cflink['realtime']); + } + if ($this->GetR_m2() <> "") { + $cflink['realtime3'] = $this->GetR_m2(); + $cflink['realtime'] = "on"; + } else { + unset($cflink['realtime3']); + unset($cflink['realtime']); + } + } + if ($this->GetUpperlimit() <> "") { + if ($this->GetU_m1() <> "") { + $cflink['upperlimit1'] = $this->GetU_m1(); + $cflink['upperlimit2'] = $this->GetU_d(); + $cflink['upperlimit'] = "on"; + } else { + unset($cflink['upperlimit']); + unset($cflink['upperlimit1']); + unset($cflink['upperlimit2']); + } + if ($this->GetU_m2() <> "") { + $cflink['upperlimit3'] = $this->GetU_m2(); + $cflink['upperlimit'] = "on"; + } else { + unset($cflink['upperlimit3']); + unset($cflink['upperlimit']); + } + } + + if (is_array($this->subqueues)) { + $cflinkp['queue'] = array(); + foreach ($this->subqueues as $q) { + $cflink['queue'][$q->GetQname()] = array(); + $q->copy_queue($interface, $cflink['queue'][$q->GetQname()]); + } + } + } + + function delete_queue() { + unref_on_altq_queue_list($this->GetQname()); + cleanup_queue_from_rules($this->GetQname()); + $parent =& $this->GetParent(); + foreach ($this->subqueues as $q) { + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() + $q->GetAvailableBandwidth()); + $q->delete_queue(); + } + unset_object_by_reference($this->GetLink()); + } + + /* + * Should search even its children + */ + function &find_queue($interface, $qname) { + if ($qname == $this->GetQname()) + return $this; + + foreach ($this->subqueues as $q) { + $result =& $q->find_queue("", $qname); + if ($result) + return $result; + } + } + + function &find_parentqueue($interface, $qname) { + if ($this->subqueues[$qname]) + return $this; + foreach ($this->subqueues as $q) { + $result = $q->find_parentqueue("", $qname); + if ($result) + return $result; + } + } + + function validate_input($data, &$input_errors) { + parent::validate_input($data, $input_errors); + + $reqdfields[] = "bandwidth"; + $reqdfieldsn[] = gettext("Bandwidth"); + $reqdfields[] = "bandwidthtype"; + $reqdfieldsn[] = gettext("Bandwidthtype"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if (isset($data['linkshare3']) && $data['linkshare3'] <> "") { + if ($data['bandwidth'] && (!is_numeric($data['bandwidth']))) + $input_errors[] = gettext("Bandwidth must be an integer."); + + if ($data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth cannot be negative."); + + if ($data['bandwidthtype'] == "%") { + if ($data['bandwidth'] > 100 || $data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth in percentage should be between 1 and 100 bounds."); + } + /* + $parent =& $this->GetParent(); + switch ($data['bandwidthtype']) { + case "%": + $myBw = $parent->GetAvailableBandwidth() * floatval($data['bandwidth']) / 100; + default: + $mybw = floatval($data['bandwidth']) * get_bandwidthtype_scale($data['bandwidthtype']); + break; + } + if ($parent->GetAvailableBandwidth() < $myBw) + $input_errors[] = "The sum of children bandwidth exceeds that of the parent."; + */ + } + + if ($data['upperlimit1'] <> "" && $data['upperlimit2'] == "") + $input_errors[] = gettext("upperlimit service curve defined but missing (d) value"); + if ($data['upperlimit2'] <> "" && $data['upperlimit1'] == "") + $input_errors[] = gettext("upperlimit service curve defined but missing initial bandwidth (m1) value"); + if ($data['upperlimit1'] <> "" && !is_valid_shaperbw($data['upperlimit1'])) + $input_errors[] = gettext("upperlimit m1 value needs to be Kb, Mb, Gb, or %"); + if ($data['upperlimit2'] <> "" && !is_numeric($data['upperlimit2'])) + $input_errors[] = gettext("upperlimit d value needs to be numeric"); + if ($data['upperlimit3'] <> "" && !is_valid_shaperbw($data['upperlimit3'])) + $input_errors[] = gettext("upperlimit m2 value needs to be Kb, Mb, Gb, or %"); + + /* + if (isset($data['upperlimit']) && $data['upperlimit3'] <> "" && $data['upperlimit1'] <> "") { + $bw_1 = get_hfsc_bandwidth($this, $data['upperlimit1']); + $bw_2 = get_hfsc_bandwidth($this, $data['upperlimit3']); + if (floatval($bw_1) < floatval($bw_2)) + $input_errors[] = ("upperlimit m1 cannot be smaller than m2"); + + if (get_interface_bandwidth($this) < (0.8 * (floatval($bw_1) + floatval($bw_2)))) + $input_errors[] = ("upperlimit specification exceeds 80% of allowable allocation."); + } + */ + if ($data['linkshare1'] <> "" && $data['linkshare2'] == "") + $input_errors[] = gettext("linkshare service curve defined but missing (d) value"); + if ($data['linkshare2'] <> "" && $data['linkshare1'] == "") + $input_errors[] = gettext("linkshare service curve defined but missing initial bandwidth (m1) value"); + if ($data['linkshare1'] <> "" && !is_valid_shaperbw($data['linkshare1'])) + $input_errors[] = gettext("linkshare m1 value needs to be Kb, Mb, Gb, or %"); + if ($data['linkshare2'] <> "" && !is_numeric($data['linkshare2'])) + $input_errors[] = gettext("linkshare d value needs to be numeric"); + if ($data['linkshare3'] <> "" && !is_valid_shaperbw($data['linkshare3'])) + $input_errors[] = gettext("linkshare m2 value needs to be Kb, Mb, Gb, or %"); + if ($data['realtime1'] <> "" && $data['realtime2'] == "") + $input_errors[] = gettext("realtime service curve defined but missing (d) value"); + if ($data['realtime2'] <> "" && $data['realtime1'] == "") + $input_errors[] = gettext("realtime service curve defined but missing initial bandwidth (m1) value"); + + /* + if (isset($data['linkshare']) && $data['linkshare3'] <> "" && $data['linkshare1'] <> "" && 0) { + $bw_1 = get_hfsc_bandwidth($this, $data['linkshare1']); + $bw_2 = get_hfsc_bandwidth($this, $data['linkshare3']); + if (floatval($bw_1) < floatval($bw_2)) + $input_errors[] = ("linkshare m1 cannot be smaller than m2"); + + if (get_interface_bandwidth($this) < (0.8 * (floatval($bw_1) + floatval($bw_2)))) + $input_errors[] = ("linkshare specification exceeds 80% of allowable allocation."); + } + */ + + if ($data['realtime1'] <> "" && !is_valid_shaperbw($data['realtime1'])) + $input_errors[] = gettext("realtime m1 value needs to be Kb, Mb, Gb, or %"); + if ($data['realtime2'] <> "" && !is_numeric($data['realtime2'])) + $input_errors[] = gettext("realtime d value needs to be numeric"); + if ($data['realtime3'] <> "" && !is_valid_shaperbw($data['realtime3'])) + $input_errors[] = gettext("realtime m2 value needs to be Kb, Mb, Gb, or %"); + + /* + if (isset($data['realtime']) && $data['realtime3'] <> "" && $data['realtime1'] <> "" && 0) { + $bw_1 = get_hfsc_bandwidth($this, $data['realtime1']); + $bw_2 = get_hfsc_bandwidth($this, $data['realtime3']); + if (floatval($bw_1) < floatval($bw_2)) + $input_errors[] = ("realtime m1 cannot be smaller than m2"); + + if (get_interface_bandwidth($this) < (0.8 * (floatval($bw_1) + floatval($bw_2)))) + $input_errors[] = ("realtime specification exceeds 80% of allowable allocation."); + } + */ + } + + function ReadConfig(&$cflink) { + if (!empty($cflink['linkshare'])) { + if (!empty($cflink['linkshare1'])) { + $this->SetL_m1($cflink['linkshare1']); + $this->SetL_d($cflink['linkshare2']); + $this->SetLinkshare(); + } else { + $this->SetL_m1(""); + $this->SetL_d(""); + $this->DisableLinkshare(); + } + if (!empty($cflink['linkshare3'])) { + $this->SetL_m2($cflink['linkshare3']); + $this->SetLinkshare(); + } + } else + $this->DisableLinkshare(); + if (!empty($cflink['realtime'])) { + if (!empty($cflink['realtime1'])) { + $this->SetR_m1($cflink['realtime1']); + $this->SetR_d($cflink['realtime2']); + $this->SetRealtime(); + } else { + $this->SetR_m1(""); + $this->SetR_d(""); + $this->DisableRealtime(); + } + if (!empty($cflink['realtime3'])) { + $this->SetR_m2($cflink['realtime3']); + $this->SetRealtime(); + } + } else + $this->DisableRealtime(); + if (!empty($cflink['upperlimit'])) { + if (!empty($cflink['upperlimit1'])) { + $this->SetU_m1($cflink['upperlimit1']); + $this->SetU_d($cflink['upperlimit2']); + $this->SetUpperlimit(); + } else { + $this->SetU_m1(""); + $this->SetU_d(""); + $this->DisableUpperlimit(); + } + if (!empty($cflink['upperlimit3'])) { + $this->SetU_m2($cflink['upperlimit3']); + $this->SetUpperlimit(); + } + } else + $this->DisableUpperlimit(); + parent::ReadConfig($cflink); + } + + function build_tree() { + $tree = "
  • GetInterface() ."&queue=" . $this->GetQname()."&action=show"; + $tree .= "\" "; + $tmpvalue = $this->GetDefault(); + if (!empty($tmpvalue)) + $tree .= " class=\"navlnk\""; + $tree .= " >" . $this->GetQname() . ""; + if (is_array($this->subqueues)) { + $tree .= "
      "; + foreach ($this->subqueues as $q) { + $tree .= $q->build_tree(); + } + $tree .= "
    "; + } + $tree .= "
  • "; + return $tree; + } + + /* Even this should take children into consideration */ + function build_rules(&$default = false) { + + $pfq_rule = " queue ". $this->qname; + if ($this->GetInterface()) + $pfq_rule .= " on ".get_real_interface($this->GetInterface()); + if ($this->GetBandwidth() && $this->GetBwscale()) + $pfq_rule .= " bandwidth ".trim($this->GetBandwidth()).$this->GetBwscale(); + + $tmpvalue = $this->GetQlimit(); + if (!empty($tmpvalue)) + $pfq_rule .= " qlimit " . $this->GetQlimit(); + if ($this->GetDefault() || $this->GetRed() || $this->GetRio() || $this->GetEcn() || $this->GetCodel() || $this->GetRealtime() <> "" || $this->GetLinkshare() <> "" || $this->GetUpperlimit() <> "") { + $pfq_rule .= " hfsc ( "; + $tmpvalue = $this->GetRed(); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " red "; + } + + $tmpvalue = $this->GetRio(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " rio "; + } + $tmpvalue = $this->GetEcn(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " ecn "; + } + $tmpvalue = $this->GetCodel(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " codel "; + } + $tmpvalue = $this->GetDefault(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " default "; + $default = true; + } + + if ($this->GetRealtime() <> "") { + if ($comma) + $pfq_rule .= " , "; + if ($this->GetR_m1() <> "" && $this->GetR_d() <> "" && $this->GetR_m2() <> "") + $pfq_rule .= " realtime (".$this->GetR_m1() . ", " . $this->GetR_d().", ". $this->GetR_m2() .") "; + else if ($this->GetR_m2() <> "") + $pfq_rule .= " realtime " . $this->GetR_m2(); + $comma = 1; + } + if ($this->GetLinkshare() <> "") { + if ($comma) + $pfq_rule .= " ,"; + if ($this->GetL_m1() <> "" && $this->GetL_d() <> "" && $this->GetL_m2() <> "") + $pfq_rule .= " linkshare (".$this->GetL_m1(). ", ". $this->GetL_d(). ", ". $this->GetL_m2(). ") "; + else if ($this->GetL_m2() <> "") + $pfq_rule .= " linkshare " . $this->GetL_m2() . " "; + $comma = 1; + } + if ($this->GetUpperlimit() <> "") { + if ($comma) + $pfq_rule .= " ,"; + if ($this->GetU_m1() <> "" && $this->GetU_d() <> "" && $this->GetU_m2() <> "") + $pfq_rule .= " upperlimit (".$this->GetU_m1().", ". $this->GetU_d().", ". $this->GetU_m2(). ") "; + else if ($this->GetU_m2() <> "") + $pfq_rule .= " upperlimit " . $this->GetU_m2() . " "; + } + $pfq_rule .= " ) "; + } + if (count($this->subqueues)) { + $i = count($this->subqueues); + $pfq_rule .= " { "; + foreach ($this->subqueues as $qkey => $qnone) { + if ($i > 1) { + $i--; + $pfq_rule .= " {$qkey}, "; + } else + $pfq_rule .= " {$qkey} "; + } + $pfq_rule .= " } \n"; + foreach ($this->subqueues as $q) + $pfq_rule .= $q->build_rules($default); + } + + $pfq_rule .= " \n"; + + return $pfq_rule; + } + + function build_javascript() { + $javascript = parent::build_javascript(); + $javascript .= ""; + + return $javascript; + } + + function build_form() { + $form = parent::build_form(); + $form .= ""; + $form .= "" . gettext("Bandwidth") . ""; + $form .= " GetBandwidth()); + $form .= "\" />"; + $form .= "
    "; + $form .= "" . gettext("Choose the amount of bandwidth for this queue"); + $form .= ""; + $form .= ""; + $form .= "" . gettext("Service Curve (sc)") . ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "
     
    m1
    d
    m2
    GetUpperlimit()<> "") + $form .= " checked=\"checked\" "; + $form .= "onchange=\"enable_upperlimit()\" /> " . gettext("Upperlimit:") . "GetU_m1()); + $form .= "\" id=\"upperlimit1\" name=\"upperlimit1\" "; + if ($this->GetUpperlimit() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetU_d()); + $form .= "\" id=\"upperlimi2\" name=\"upperlimit2\" "; + if ($this->GetUpperlimit() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetU_m2()); + $form .= "\" id=\"upperlimit3\" name=\"upperlimit3\" "; + if ($this->GetUpperlimit() == "") + $form .= " disabled=\"disabled\""; + $form .= " />" . gettext("The maximum allowed bandwidth for the queue.") . "
    GetRealtime() <> "") + $form .= " checked=\"checked\" "; + $form .= "onchange=\"enable_realtime()\" /> " . gettext("Real time:") . "GetR_m1()); + $form .= "\" id=\"realtime1\" name=\"realtime1\" "; + if ($this->GetRealtime() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetR_d()); + $form .= "\" id=\"realtime2\" name=\"realtime2\" "; + if ($this->GetRealtime() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetR_m2()); + $form .= "\" id=\"realtime3\" name=\"realtime3\" "; + if ($this->GetRealtime() == "") + $form .= " disabled=\"disabled\""; + $form .= " />" . gettext("The minimum required bandwidth for the queue.") . "
    GetLinkshare() <> "") + $form .= " checked=\"checked\" "; + $form .= "onchange=\"enable_linkshare()\" /> " . gettext("Link share:") . "GetL_m1()); + $form .= "\" id=\"linkshare1\" name=\"linkshare1\" "; + if ($this->GetLinkshare() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetL_d()); + $form .= "\" id=\"linkshare2\" name=\"linkshare2\" "; + if ($this->GetLinkshare() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetL_m2()); + $form .= "\" id=\"linkshare3\" name=\"linkshare3\" "; + if ($this->GetLinkshare() == "") + $form .= " disabled=\"disabled\""; + $form .= " />" . gettext("The bandwidth share of a backlogged queue - this overrides priority.") . "

    "; + $form .= gettext("The format for service curve specifications is (m1, d, m2). m2 controls " + . "the bandwidth assigned to the queue. m1 and d are optional and can be " + . "used to control the initial bandwidth assignment. For the first d milliseconds the queue gets the bandwidth given as m1, afterwards the value " + . "given in m2."); + $form .= ""; + $form .= ""; + + return $form; + } + + function update_altq_queue_data(&$data) { + $this->ReadConfig($data); + } + + function wconfig() { + $cflink =& get_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['name'] = $this->GetQname(); + $cflink['interface'] = $this->GetInterface(); + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = $this->GetQpriority(); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['description'] = $this->GetDescription(); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = $this->GetEnabled(); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = $this->GetDefault(); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['rio'] = $this->GetRio(); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + $cflink['codel'] = trim($this->GetCodel()); + if (empty($cflink['codel'])) + unset($cflink['codel']); + if ($this->GetLinkshare() <> "") { + if ($this->GetL_m1() <> "") { + $cflink['linkshare1'] = $this->GetL_m1(); + $cflink['linkshare2'] = $this->GetL_d(); + $cflink['linkshare'] = "on"; + } else { + unset($cflink['linkshare']); + unset($cflink['linkshare1']); + unset($cflink['linkshare2']); + } + if ($this->GetL_m2() <> "") { + $cflink['linkshare3'] = $this->GetL_m2(); + $cflink['linkshare'] = "on"; + } else { + unset($cflink['linkshare']); + unset($cflink['linkshare3']); + } + } else { + unset($cflink['linkshare']); + unset($cflink['linkshare1']); + unset($cflink['linkshare2']); + unset($cflink['linkshare3']); + } + if ($this->GetRealtime() <> "") { + if ($this->GetR_m1() <> "") { + $cflink['realtime1'] = $this->GetR_m1(); + $cflink['realtime2'] = $this->GetR_d(); + $cflink['realtime'] = "on"; + } else { + unset($cflink['realtime']); + unset($cflink['realtime1']); + unset($cflink['realtime2']); + } + if ($this->GetR_m2() <> "") { + $cflink['realtime3'] = $this->GetR_m2(); + $cflink['realtime'] = "on"; + } else { + unset($cflink['realtime']); + unset($cflink['realtime3']); + } + } else { + unset($cflink['realtime']); + unset($cflink['realtime1']); + unset($cflink['realtime2']); + unset($cflink['realtime3']); + } + if ($this->GetUpperlimit() <> "") { + if ($this->GetU_m1() <> "") { + $cflink['upperlimit1'] = $this->GetU_m1(); + $cflink['upperlimit2'] = $this->GetU_d(); + $cflink['upperlimit'] = "on"; + } else { + unset($cflink['upperlimit']); + unset($cflink['upperlimit1']); + unset($cflink['upperlimit2']); + } + if ($this->GetU_m2() <> "") { + $cflink['upperlimit3'] = $this->GetU_m2(); + $cflink['upperlimit'] = "on"; + } else { + unset($cflink['upperlimit']); + unset($cflink['upperlimit3']); + } + } else { + unset($cflink['upperlimit']); + unset($cflink['upperlimit1']); + unset($cflink['upperlimit2']); + unset($cflink['upperlimit3']); + } + } +} + +class cbq_queue extends priq_queue { + var $qborrow = ""; + + function GetBorrow() { + return $this->qborrow; + } + function SetBorrow($borrow) { + $this->qborrow = $borrow; + } + function CanHaveChildren() { + return true; + } + + function &add_queue($interface, &$qname, &$path, &$input_errors) { + + if (!is_array($this->subqueues)) + $this->subqueues = array(); + $q =& new cbq_queue(); + $q->SetInterface($this->GetInterface()); + $q->SetParent($this); + $q->ReadConfig($qname); + $q->validate_input($qname, $input_errors); + if (count($input_errors)) { + log_error("SHAPER: could not create queue " . $q->GetQname() . " on interface {$interface} because: " . print_r($input_errors, true)); + return $q; + } + switch ($q->GetBwscale()) { + case "%": + $myBw = $this->GetAvailableBandwidth() * $qname['bandwidth'] / 100; + break; + default: + $myBw = $qname['bandwidth'] * get_bandwidthtype_scale($q->GetBwscale()); + break; + } + $q->SetAvailableBandwidth($myBw); + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() - $myBw); + + $q->SetEnabled("on"); + $q->SetLink($path); + $this->subqueues[$q->GetQName()] = &$q; + ref_on_altq_queue_list($this->GetQname(), $q->GetQname()); + if (is_array($qname['queue'])) { + foreach ($qname['queue'] as $key1 => $que) { + array_push($path, $key1); + $q->add_queue($q->GetInterface(), $que, $path, $input_errors); + array_pop($path); + } + } + + return $q; + } + + function copy_queue($interface, &$cflink) { + + $cflink['interface'] = $interface; + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($clink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = trim($this->GetQpriority()); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['name'] = $this->GetQname(); + $cflink['description'] = trim($this->GetDescription()); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = trim($this->GetEnabled()); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = trim($this->GetDefault()); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['rio'] = trim($this->GetRio()); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + $cflink['borrow'] = trim($this->GetBorrow()); + if (empty($cflink['borrow'])) + unset($cflink['borrow']); + if (is_array($this->queues)) { + $cflinkp['queue'] = array(); + foreach ($this->subqueues as $q) { + $cflink['queue'][$q->GetQname()] = array(); + $q->copy_queue($interface, $cflink['queue'][$q->GetQname()]); + } + } + } + + /* + * Should search even its children + */ + function &find_queue($interface, $qname) { + if ($qname == $this->GetQname()) + return $this; + foreach ($this->subqueues as $q) { + $result =& $q->find_queue("", $qname); + if ($result) + return $result; + } + } + + function &find_parentqueue($interface, $qname) { + if ($this->subqueues[$qname]) + return $this; + foreach ($this->subqueues as $q) { + $result = $q->find_parentqueue("", $qname); + if ($result) + return $result; + } + } + + function delete_queue() { + unref_on_altq_queue_list($this->GetQname()); + cleanup_queue_from_rules($this->GetQname()); + foreach ($this->subqueues as $q) { + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() + $q->GetAvailableBandwidth()); + $q->delete_queue(); + } + unset_object_by_reference($this->GetLink()); + } + + function validate_input($data, &$input_errors) { + parent::validate_input($data, $input_errors); + + if ($data['priority'] > 7) + $input_errors[] = gettext("Priority must be an integer between 1 and 7."); + $reqdfields[] = "bandwidth"; + $reqdfieldsn[] = gettext("Bandwidth"); + $reqdfields[] = "bandwidthtype"; + $reqdfieldsn[] = gettext("Bandwidthtype"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if ($data['bandwidth'] && !is_numeric($data['bandwidth'])) + $input_errors[] = gettext("Bandwidth must be an integer."); + + + if ($data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth cannot be negative."); + + if ($data['bandwidthtype'] == "%") { + if ($data['bandwidth'] > 100 || $data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth in percentage should be between 1 and 100 bounds."); + } + +/* + $parent =& $this->GetParent(); + switch ($data['bandwidthtype']) { + case "%": + $myBw = $parent->GetAvailableBandwidth() * floatval($data['bandwidth']) / 100; + break; + default: + $mybw = floatval($data['bandwidth']) * get_bandwidthtype_scale($data['bandwidthtype']); + break; + } + if ($parent->GetAvailableBandwidth() < floatval($myBw)) + $input_errors[] = "The sum of the children bandwidth exceeds that of the parent."; + */ + } + + function ReadConfig(&$q) { + parent::ReadConfig($q); + if (!empty($q['borrow'])) + $this->SetBorrow("on"); + else + $this->SetBorrow(""); + } + + function build_javascript() { + return parent::build_javascript(); + } + + function build_tree() { + $tree = "
  • GetInterface()."&queue=" . $this->GetQname()."&action=show"; + $tree .= "\" "; + $tmpvalue = trim($this->GetDefault()); + if (!empty($tmpvalue)) + $tree .= " class=\"navlnk\""; + $tree .= " >" . $this->GetQname() . ""; + if (is_array($this->subqueues)) { + $tree .= "
      "; + foreach ($this->subqueues as $q) { + $tree .= $q->build_tree(); + } + $tree .= "
    "; + } + $tree .= "
  • "; + return $tree; + } + + /* Even this should take children into consideration */ + function build_rules(&$default = false) { + $pfq_rule = "queue ". $this->qname; + if ($this->GetInterface()) + $pfq_rule .= " on ".get_real_interface($this->GetInterface()); + if ($this->GetBandwidth() && $this->GetBwscale()) + $pfq_rule .= " bandwidth ".trim($this->GetBandwidth()).$this->GetBwscale(); + $tmpvalue = $this->GetQpriority(); + if (!empty($tmpvalue)) + $pfq_rule .= " priority " . $this->GetQpriority(); + $tmpvalue = trim($this->GetQlimit()); + if (!empty($tmpvalue)) + $pfq_rule .= " qlimit " . $this->GetQlimit(); + if ($this->GetDefault() || $this->GetRed() || $this->GetRio() || $this->GetEcn() || $this->GetBorrow() || $this->GetCodel()) { + $pfq_rule .= " cbq ( "; + $tmpvalue = trim($this->GetRed()); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " red "; + } + $tmpvalue = trim($this->GetCodel()); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " codel "; + } + $tmpvalue = trim($this->GetRio()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " rio "; + } + $tmpvalue = trim($this->GetEcn()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " ecn "; + } + $tmpvalue = trim($this->GetDefault()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " default "; + $default = true; + } + $tmpvalue = trim($this->GetBorrow()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= ", "; + $pfq_rule .= " borrow "; + } + $pfq_rule .= " ) "; + } + if (count($this->subqueues)) { + $i = count($this->subqueues); + $pfq_rule .= " { "; + foreach ($this->subqueues as $qkey => $qnone) { + if ($i > 1) { + $i--; + $pfq_rule .= " {$qkey}, "; + } else + $pfq_rule .= " {$qkey} "; + } + $pfq_rule .= " } \n"; + foreach ($this->subqueues as $q) + $pfq_rule .= $q->build_rules($default); + } + + $pfq_rule .= " \n"; + return $pfq_rule; + } + + function build_form() { + $form = parent::build_form(); + $form .= ""; + $form .= "" . gettext("Bandwidth") . ""; + $form .= " GetBandwidth() > 0) + $form .= htmlspecialchars($this->GetBandwidth()); + $form .= "\" />"; + $form .= "
    "; + $form .= "" . gettext("Choose the amount of bandwidth for this queue"); + $form .= ""; + $form .= "" . gettext("Scheduler specific options") . ""; + $form .= "GetBorrow() == "on") + $form .= " checked=\"checked\" "; + $form .= " /> " . gettext("Borrow from other queues when available") . "
    "; + + return $form; + } + + function update_altq_queue_data(&$data) { + $this->ReadConfig($data); + } + + function wconfig() { + $cflink =& get_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['interface'] = $this->GetInterface(); + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = $this->GetQpriority(); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['name'] = $this->GetQname(); + $cflink['description'] = $this->GetDescription(); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = trim($this->GetEnabled()); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = trim($this->GetDefault()); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['rio'] = trim($this->GetRio()); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + $cflink['codel'] = trim($this->GetCodel()); + if (empty($cflink['codel'])) + unset($cflink['codel']); + $cflink['borrow'] = trim($this->GetBorrow()); + if (empty($cflink['borrow'])) + unset($cflink['borrow']); + } +} + +class fairq_queue extends priq_queue { + var $hogs; + var $buckets; + + function GetBuckets() { + return $this->buckets; + } + function SetBuckets($buckets) { + $this->buckets = $buckets; + } + function GetHogs() { + return $this->hogs; + } + function SetHogs($hogs) { + $this->hogs = $hogs; + } + function CanHaveChildren() { + return false; + } + + + function copy_queue($interface, &$cflink) { + $cflink['interface'] = $interface; + $cflink['qlimit'] = $this->GetQlimit(); + $cflink['priority'] = $this->GetQpriority(); + $cflink['name'] = $this->GetQname(); + $cflink['description'] = $this->GetDescription(); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = $this->GetEnabled(); + $cflink['default'] = $this->GetDefault(); + $cflink['red'] = $this->GetRed(); + $cflink['rio'] = $this->GetRio(); + $cflink['ecn'] = $this->GetEcn(); + $cflink['buckets'] = $this->GetBuckets(); + $cflink['hogs'] = $this->GetHogs(); + } + + /* + * Should search even its children + */ + function &find_queue($interface, $qname) { + if ($qname == $this->GetQname()) + return $this; + } + + function find_parentqueue($interface, $qname) { return; } + + function delete_queue() { + unref_on_altq_queue_list($this->GetQname()); + cleanup_queue_from_rules($this->GetQname()); + unset_object_by_reference($this->GetLink()); + } + + function validate_input($data, &$input_errors) { + parent::validate_input($data, $input_errors); + + if ($data['priority'] > 255) + $input_errors[] = gettext("Priority must be an integer between 1 and 255."); + $reqdfields[] = "bandwidth"; + $reqdfieldsn[] = gettext("Bandwidth"); + $reqdfields[] = "bandwidthtype"; + $reqdfieldsn[] = gettext("Bandwidthtype"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if ($data['bandwidth'] && !is_numeric($data['bandwidth'])) + $input_errors[] = gettext("Bandwidth must be an integer."); + + + if ($data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth cannot be negative."); + + + if ($data['bandwidthtype'] == "%") { + if ($data['bandwidth'] > 100 || $data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth in percentage should be between 1 and 100 bounds."); + } + +/* + $parent =& $this->GetParent(); + switch ($data['bandwidthtype']) { + case "%": + $myBw = $parent->GetAvailableBandwidth() * floatval($data['bandwidth']) / 100; + default: + $mybw = floatval($data['bandwidth']) * get_bandwidthtype_scale($data['bandwidthtype']); + break; + } + if ($parent->GetAvailableBandwidth() < floatval($myBw)) + $input_errors[] = "The sum of children bandwidth exceeds that of the parent."; +*/ + } + + function ReadConfig(&$q) { + parent::ReadConfig($q); + if (!empty($q['buckets'])) + $this->SetBuckets($q['buckets']); + else + $this->SetBuckets(""); + if (!empty($q['hogs']) && is_valid_shaperbw($q['hogs'])) + $this->SetHogs($q['hogs']); + else + $this->SetHogs(""); + } + + function build_javascript() { + return parent::build_javascript(); + } + + function build_tree() { + $tree = "
  • GetInterface()."&queue=" . $this->GetQname()."&action=show"; + $tree .= "\" "; + $tmpvalue = trim($this->GetDefault()); + if (!empty($tmpvalue)) + $tree .= " class=\"navlnk\""; + $tree .= " >" . $this->GetQname() . ""; + $tree .= "
  • "; + return $tree; + } + + /* Even this should take children into consideration */ + function build_rules(&$default = false) { + $pfq_rule = "queue ". $this->qname; + if ($this->GetInterface()) + $pfq_rule .= " on ".get_real_interface($this->GetInterface()); + if ($this->GetBandwidth() && $this->GetBwscale()) + $pfq_rule .= " bandwidth ".trim($this->GetBandwidth()).$this->GetBwscale(); + $tmpvalue = trim($this->GetQpriority()); + if (!empty($tmpvalue)) + $pfq_rule .= " priority " . $this->GetQpriority(); + $tmpvalue = trim($this->GetQlimit()); + if (!empty($tmpvalue)) + $pfq_rule .= " qlimit " . $this->GetQlimit(); + if ($this->GetDefault() || $this->GetRed() || $this->GetRio() + || $this->GetEcn() || $this->GetBuckets() || $this->GetHogs() || $this->GetCodel()) { + $pfq_rule .= " fairq ( "; + $tmpvalue = trim($this->GetRed()); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " red "; + } + $tmpvalue = trim($this->GetCodel()); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " codel "; + } + $tmpvalue = trim($this->GetRio()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " rio "; + } + $tmpvalue = trim($this->GetEcn()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " ecn "; + } + $tmpvalue = trim($this->GetDefault()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " default "; + $default = true; + } + $tmpvalue = trim($this->GetBuckets()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= ", "; + $pfq_rule .= " buckets " . $this->GetBuckets() . " "; + } + $tmpvalue = trim($this->GetHogs()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= ", "; + $pfq_rule .= " hogs " . $this->GetHogs() . " "; + } + $pfq_rule .= " ) "; + } + + $pfq_rule .= " \n"; + return $pfq_rule; + } + + function build_form() { + $form = parent::build_form(); + $form .= ""; + $form .= "" . gettext("Bandwidth") . ""; + $form .= " GetBandwidth() > 0) + $form .= htmlspecialchars($this->GetBandwidth()); + $form .= "\" />"; + $form .= "
    "; + $form .= "" . gettext("Choose the amount of bandwidth for this queue"); + $form .= ""; + $form .= "" . gettext("Scheduler specific options") . ""; + $form .= ""; + $form .= ""; + $form .= "
    "; + $form .= "GetBuckets()); + if(!empty($tmpvalue)) + $form .= $this->GetBuckets(); + $form .= "\" /> " . gettext("Number of buckets available.") . "
    GetHogs()); + if(!empty($tmpvalue)) + $form .= $this->GetHogs(); + $form .= "\" /> " . gettext("Bandwidth limit for hosts to not saturate link.") . "
    "; + return $form; + } + + function update_altq_queue_data(&$data) { + $this->ReadConfig($data); + } + + function wconfig() { + $cflink =& get_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['interface'] = $this->GetInterface(); + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = trim($this->GetQpriority()); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['name'] = $this->GetQname(); + $cflink['description'] = trim($this->GetDescription()); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = $this->GetEnabled(); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = trim($this->GetDefault()); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['rio'] = trim($this->GetRio()); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + $cflink['codel'] = trim($this->GetCodel()); + if (empty($cflink['codel'])) + unset($cflink['codel']); + $cflink['buckets'] = trim($this->GetBuckets()); + if (empty($cflink['buckets'])) + unset($cflink['buckets']); + $cflink['hogs'] = trim($this->GetHogs()); + if (empty($cflink['hogs'])) + unset($cflink['hogs']); + } +} + + +/* + * dummynet(4) wrappers. + */ + + +/* + * List of respective objects! + */ +$dummynet_pipe_list = array(); + +class dummynet_class { + var $qname; + var $qnumber; /* dummynet(4) uses numbers instead of names; maybe integrate with pf the same as altq does?! */ + var $qlimit; + var $description; + var $qenabled; + var $link; + var $qparent; /* link to upper class so we do things easily on WF2Q+ rule creation */ + var $plr; + + var $buckets; + /* mask parameters */ + var $mask; + var $noerror; + + /* Accessor functions */ + function SetLink($link) { + $this->link = $link; + } + function GetLink() { + return $this->link; + } + function GetMask() { + if (!isset($this->mask["type"])) + $this->mask["type"] = "none"; + return $this->mask; + } + function SetMask($mask) { + $this->mask = $mask; + } + function &GetParent() { + return $this->qparent; + } + function SetParent(&$parent) { + $this->qparent = &$parent; + } + function GetEnabled() { + return $this->qenabled; + } + function SetEnabled($value) { + $this->qenabled = $value; + } + function CanHaveChildren() { + return false; + } + function CanBeDeleted() { + return true; + } + function GetQname() { + return $this->qname; + } + function SetQname($name) { + $this->qname = trim($name); + } + function GetQlimit() { + return $this->qlimit; + } + function SetQlimit($limit) { + $this->qlimit = $limit; + } + function GetDescription() { + return $this->description; + } + function SetDescription($str) { + $this->description = trim($str); + } + function GetFirstime() { + return $this->firsttime; + } + function SetFirsttime($number) { + $this->firsttime = $number; + } + function GetBuckets() { + return $this->buckets; + } + function SetBuckets($buckets) { + $this->buckets = $buckets; + } + function SetNumber($number) { + $this->qnumber = $number; + } + function GetNumber() { + return $this->qnumber; + } + function GetPlr() { + return $this->plr; + } + function SetPlr($plr) { + $this->plr = $plr; + } + + function build_javascript() { + $javascript .= "\n"; + return $javascript; + } + + function validate_input($data, &$input_errors) { + $reqdfields[] = "bandwidth"; + $reqdfieldsn[] = gettext("Bandwidth"); + $reqdfields[] = "burst"; + $reqdfieldsn[] = gettext("Burst"); + $reqdfields[] = "bandwidthtype"; + $reqdfieldsn[] = gettext("Bandwidthtype"); + $reqdfields[] = "newname"; + $reqdfieldsn[] = gettext("Name"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if ($data['plr'] && (!is_numeric($data['plr']) || + ($data['plr'] < 0) || ($data['plr'] > 1))) + $input_errors[] = gettext("Plr must be a value between 0 and 1."); + if ($data['buckets'] && (!is_numeric($data['buckets']) || + ($data['buckets'] < 16) || ($data['buckets'] > 65535))) + $input_errors[] = gettext("Buckets must be an integer between 16 and 65535."); + if ($data['qlimit'] && (!is_numeric($data['qlimit']))) + $input_errors[] = gettext("Queue limit must be an integer"); + if (!empty($data['newname']) && !preg_match("/^[a-zA-Z0-9_-]+$/", $data['newname'])) + $input_errors[] = gettext("Queue names must be alphanumeric and _ or - only."); + if (!empty($data['name']) && !preg_match("/^[a-zA-Z0-9_-]+$/", $data['name'])) + $input_errors[] = gettext("Queue names must be alphanumeric and _ or - only."); + if (isset($data['maskbits']) && ($data['maskbits'] <> "")) + if ((!is_numeric($data['maskbits'])) || ($data['maskbits'] <= 0) || ($data['maskbits'] > 32)) + $input_errors[] = gettext("IPV4 bit mask must be blank or numeric value between 1 and 32."); + if (isset($data['maskbitsv6']) && ($data['maskbitsv6'] <> "")) + if ((!is_numeric($data['maskbitsv6'])) || ($data['maskbitsv6'] <= 0) || ($data['maskbitsv6'] > 128)) + $input_errors[] = gettext("IPV6 bit mask must be blank or numeric value between 1 and 128."); + } + + function build_mask_rules(&$pfq_rule) { + $mask = $this->GetMask(); + if (!empty($mask['type'])) { + if ($mask['type'] <> 'none') + $pfq_rule .= " mask"; + switch ($mask['type']) { + case 'srcaddress': + if (!empty($mask['bitsv6']) && ($mask['bitsv6'] <> "")) + $pfq_rule .= " src-ip6 /" . $mask['bitsv6']; + else + $pfq_rule .= " src-ip6 /128"; + if (!empty($mask['bits']) && ($mask['bits'] <> "")) + $pfq_rule .= sprintf(" src-ip 0x%x", gen_subnet_mask_long($mask['bits'])); + else + $pfq_rule .= " src-ip 0xffffffff"; + break; + case 'dstaddress': + if (!empty($mask['bitsv6']) && ($mask['bitsv6'] <> "")) + $pfq_rule .= " dst-ip6 /" . $mask['bitsv6']; + else + $pfq_rule .= " dst-ip6 /128"; + if (!empty($mask['bits']) && ($mask['bits'] <> "")) + $pfq_rule .= sprintf(" dst-ip 0x%x", gen_subnet_mask_long($mask['bits'])); + else + $pfq_rule .= " dst-ip 0xffffffff"; + break; + default: + break; + } + } + } + +} + +class dnpipe_class extends dummynet_class { + var $delay; + var $qbandwidth = array(); + var $qbandwidthtype; + + /* This is here to help on form building and building rules/lists */ + var $subqueues = array(); + + function CanHaveChildren() { + return true; + } + function SetDelay($delay) { + $this->delay = $delay; + } + function GetDelay() { + return $this->delay; + } + function delete_queue() { + cleanup_dnqueue_from_rules($this->GetQname()); + foreach ($this->subqueues as $q) + $q->delete_queue(); + unset_dn_object_by_reference($this->GetLink()); + @pfSense_pipe_action("pipe delete " . $this->GetNumber()); + } + function GetBandwidth() { + return $this->qbandwidth; + } + function SetBandwidth($bandwidth) { + $this->qbandwidth = $bandwidth; + } + function GetBurst() { + return $this->qburst; + } + function SetBurst($burst) { + $this->qburst = $burst; + } + + function &add_queue($interface, &$queue, &$path, &$input_errors) { + + if (!is_array($this->subqueues)) + $this->subqueues = array(); + + $q =& new dnqueue_class(); + $q->SetLink($path); + $q->SetEnabled("on"); + $q->SetPipe($this->GetQname()); + $q->SetParent($this); + $q->ReadConfig($queue); + $q->validate_input($queue, $input_errors); + if (count($input_errors)) { + log_error("SHAPER: could not create queue " . $q->GetQname() . " on interface {$interface} because: " . print_r($input_errors, true)); + return $q; + } + $number = dnqueue_find_nextnumber(); + $q->SetNumber($number); + $this->subqueues[$q->GetQname()] = &$q; + + return $q; + } + + function &get_queue_list(&$q = null) { + $qlist = array(); + + $qlist[$this->GetQname()] = $this->GetNumber(); + if (is_array($this->subqueues)) { + foreach ($this->subqueues as $queue) + $queue->get_queue_list($qlist); + } + return $qlist; + } + + /* + * Should search even its children + */ + function &find_queue($pipe, $qname) { + if ($qname == $this->GetQname()) + return $this; + foreach ($this->subqueues as $q) { + $result =& $q->find_queue("", $qname); + if ($result) + return $result; + } + } + + function &find_parentqueue($pipe, $qname) { + return NULL; + } + + function validate_input($data, &$input_errors) { + parent::validate_input($data, $input_errors); + + $schedule = 0; + $schedulenone = 0; + $entries = 0; + for ($i = 0; $i < 30; $i++) { + if (!empty($data["bwsched{$i}"])) { + if ($data["bwsched{$i}"] != "none") + $schedule++; + else + $schedulenone++; + } + if (!empty($data["bandwidth{$i}"])) { + if (!is_numeric($data["bandwidth{$i}"])) + $input_errors[] = sprintf(gettext("Bandwidth for schedule %s must be an integer."), $data["bwsched{$i}"]); + else if (($data["burst{$i}"] != "") && (!is_numeric($data["burst{$i}"]))) + $input_errors[] = sprintf(gettext("Burst for schedule %s must be an integer."), $data["bwsched{$i}"]); + else + $entries++; + } + } + if ($schedule == 0 && $entries > 1) + $input_errors[] = gettext("You need to specify a schedule for every additional entry"); + if ($schedulenone > 0 && $entries > 1) + $input_errors[] = gettext("If more than one bandwidth configured all schedules need to be selected"); + if ($entries == 0) + $input_errors[] = gettext("At least one bw specification is necessary"); + if ($data['delay'] && (!is_numeric($data['delay']))) + $input_errors[] = gettext("Delay must be an integer."); + } + + function ReadConfig(&$q) { + if (!empty($q['name']) && !empty($q['newname']) && $q['name'] != $q['newname']) { + $this->SetQname($q['newname']); + } else if (!empty($q['newname'])) { + $this->SetQname($q['newname']); + } else { + $this->SetQname($q['name']); + } + $this->SetNumber($q['number']); + + if (!empty($_POST)) { + $bandwidth = array(); + for ($i = 0; $i < 30; $i++) { + if (isset($q["bandwidth{$i}"]) && $q["bandwidth{$i}"] <> "") { + $bw = array(); + $bw['bw'] = $q["bandwidth{$i}"]; + $bw['burst'] = $q["burst{$i}"]; + if (isset($q["bwtype{$i}"]) && $q["bwtype{$i}"]) + $bw['bwscale'] = $q["bwtype{$i}"]; + if (isset($q["bwsched{$i}"]) && $q["bwsched{$i}"]) + $bw['bwsched'] = $q["bwsched{$i}"]; + $bandwidth[] = $bw; + } + } + $this->SetBandwidth($bandwidth); + } + + if (is_array($q['bandwidth']) && is_array($q['bandwidth']['item'])) { + $this->SetBandwidth($q['bandwidth']['item']); + $this->SetBurst($q['burst']['item']); + } + + if (isset($q['qlimit']) && $q['qlimit'] <> "") + $this->SetQlimit($q['qlimit']); + else + $this->SetQlimit(""); + if (isset($q['mask']) && $q['mask'] <> "") + $masktype = $q['mask']; + else + $masktype = ""; + if (isset($q['maskbits']) && $q['maskbits'] <> "") + $maskbits = $q['maskbits']; + else + $maskbits = ""; + if (isset($q['maskbitsv6']) && $q['maskbitsv6'] <> "") + $maskbitsv6 = $q['maskbitsv6']; + else + $maskbitsv6 = ""; + $this->SetMask(array("type" => $masktype, "bits" => $maskbits, "bitsv6" => $maskbitsv6)); + if (isset($q['buckets']) && $q['buckets'] <> "") + $this->SetBuckets($q['buckets']); + else + $this->SetBuckets(""); + if (isset($q['plr']) && $q['plr'] <> "") + $this->SetPlr($q['plr']); + else + $this->SetPlr(""); + if (isset($q['delay']) && $q['delay'] <> "") + $this->SetDelay($q['delay']); + else + $this->SetDelay(0); + if (isset($q['description']) && $q['description'] <> "") + $this->SetDescription($q['description']); + else + $this->SetDescription(""); + $this->SetEnabled($q['enabled']); + + } + + function build_tree() { + $tree = "
  • GetQname() ."&queue=".$this->GetQname() ."&action=show\">"; + $tree .= $this->GetQname() . ""; + if (is_array($this->subqueues)) { + $tree .= "
      "; + foreach ($this->subqueues as $q) { + $tree .= $q->build_tree(); + } + $tree .= "
    "; + } + $tree .= "
  • "; + + return $tree; + } + + function build_rules() { + global $config, $time_based_rules; + + if ($this->GetEnabled() == "") + return; + + $pfq_rule = "\npipe ". $this->GetNumber() . " config "; + $found = false; + $bandwidth = $this->GetBandwidth(); + if (is_array($bandwidth)) { + foreach ($bandwidth as $bw) { + if ($bw['bwsched'] != "none") { + $time_based_rules = true; + if (is_array($config['schedules']) && is_array($config['schedules']['schedule'])) { + foreach ($config['schedules']['schedule'] as $schedule) { + if ($bw['bwsched'] == $schedule['name']) { + if (filter_get_time_based_rule_status($schedule)) { + $pfq_rule .= " bw ".trim($bw['bw']).$bw['bwscale']; + if (is_numeric($bw['burst']) && ($bw['burst'] > 0)) + $pfq_rule .= " burst ".trim($bw['burst']); + $found = true; + break; + } + } + } + } else { + $pfq_rule .= " bw 0"; + $found = true; + break; + } + } else { + $pfq_rule .= " bw ".trim($bw['bw']).$bw['bwscale']; + if (is_numeric($bw['burst']) && ($bw['burst'] > 0)) + $pfq_rule .= " burst ".trim($bw['burst']); + $found = true; + break; + } + } + if ($found == false) + $pfq_rule .= " bw 0"; + } else + $pfq_rule .= " bw 0"; + + if ($this->GetQlimit()) + $pfq_rule .= " queue " . $this->GetQlimit(); + if ($this->GetPlr()) + $pfq_rule .= " plr " . $this->GetPlr(); + if ($this->GetBuckets()) + $pfq_rule .= " buckets " . $this->GetBuckets(); + if ($this->GetDelay()) + $pfq_rule .= " delay " . $this->GetDelay(); + $this->build_mask_rules($pfq_rule); + + $pfq_rule .= "\n"; + + if (!empty($this->subqueues) && count($this->subqueues) > 0) { + foreach ($this->subqueues as $q) + $pfq_rule .= $q->build_rules(); + } + $pfq_rule .= " \n"; + + return $pfq_rule; + } + + function update_dn_data(&$data) { + $this->ReadConfig($data); + } + + function build_javascript() { + global $g, $config; + + $javasr = parent::build_javascript(); + + //build list of schedules + $schedules = ""; + if (is_array($config['schedules']) && is_array($config['schedules']['schedule'])) { + foreach ($config['schedules']['schedule'] as $schedule) { + if ($schedule['name'] <> "") + $schedules .= ""; + } + } + $bwopt = ""; + foreach (array("Kb" => "Kbit/s", "Mb" => "Mbit/s", "Gb" => "Gbit/s", "b" => "Bit/s") as $bwidx => $bw) + $bwopt .= ""; + + $javasr .= << +//"; + tr.appendChild(td); + td = d.createElement("td"); + td.innerHTML=""; + tr.appendChild(td); + td = d.createElement("td"); + td.innerHTML=""; + tr.appendChild(td); + td = d.createElement("td"); + td.innerHTML=""; + tr.appendChild(td); + td = d.createElement("td"); + td.rowSpan = "1"; + td.innerHTML = 'remove'; + tr.appendChild(td); + tbody.appendChild(tr); + totalrows++; + }); +})(); + +function removeBwRow(el) { + var cel; + while (el && el.nodeName.toLowerCase() != "tr") + el = el.parentNode; + if (el && el.parentNode) { + cel = el.getElementsByTagName("td").item(0); + el.parentNode.removeChild(el); + } +} +//]]> + + +EOD; + + return $javasr; + } + + function build_form() { + global $g, $config; + + //build list of schedules + $schedules = array(); + $schedules[] = "none";//leave none to leave rule enabled all the time + if (is_array($config['schedules']) && is_array($config['schedules']['schedule'])) { + foreach ($config['schedules']['schedule'] as $schedule) { + if ($schedule['name'] <> "") + $schedules[] = $schedule['name']; + } + } + + $form = "
    "; + $form .= gettext("Enable"); + $form .= ""; + $form .= " GetEnabled() == "on") + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Enable limiter and its children") . ""; + $form .= ""; + $form .= "
    " . gettext("Name") . ""; + $form .= ""; + $form .= "GetQname()."\" />"; + $form .= "GetQname()."\" />"; + if ($this->GetNumber() > 0) { + $form .= "GetNumber()."\" />"; + } + $form .= ""; + $form .= "" . gettext("Bandwidth"); + $bandwidth = $this->GetBandwidth(); + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + if (is_array($bandwidth)) { + foreach ($bandwidth as $bwidx => $bw) { + $form .= "\n"; + } + } + $form .= "
    Bandwidth
    Burst
    Bw type
    Schedule
    "; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "remove"; + $form .= "
    "; + $form .= ""; + $form .= "add"; + $form .= "
    " . gettext("Bandwidth is a rate (e.g. Mbit/s), burst is a total amount of data that will be transferred at full speed after an idle period.") . "
    "; + $form .= ""; + $form .= "" . gettext("Mask") . ""; + $form .= ""; + $form .= ""; + $form .= " 
    "; + $form .= "" . gettext("If 'source' or 'destination' slots is chosen, \n" + . "a dynamic pipe with the bandwidth, delay, packet loss and queue size given above will \n" + . "be created for each source/destination IP address encountered, \n" + . "respectively. This makes it possible to easily specify bandwidth \n" + . "limits per host.") . "
    "; + $form .= "255.255.255.255/  "none") + $form .= $mask['bits']; + $form .= "\""; + if ($mask['type'] == "none") + $form .= " disabled"; + $form .= " />"; + $form .= "  IPV4 mask bits (1-32)
    "; + $form .= "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/  "none") + $form .= $mask['bitsv6']; + $form .= "\""; + if ($mask['type'] == "none") + $form .= " disabled"; + $form .= " />"; + $form .= "  IPV6 mask bits (1-128)
    "; + $form .= "" . gettext("If 'source' or 'destination' slots is chosen, \n" + . "leaving the mask bits blank will create one pipe per host. Otherwise specify \n" + . "the number of 'one' bits in the subnet mask used to group multiple hosts \n" + . "per pipe.") . ""; + $form .= ""; + $form .= "" . gettext("Description") . ""; + $form .= ""; + $form .= "GetDescription(); + $form .= "\" />"; + $form .= "
    "; + $form .= gettext("You may enter a description here for your reference (not parsed).") . ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "
    "; + $form .= "

    "; + $form .= "

    "; + $form .= ""; + + $form .= "" . gettext("Delay") . ""; + $form .= ""; + $form .= "GetDelay() . "\" />"; + $form .= " ms
    " . gettext("Hint: in most cases, you " + . "should specify 0 here (or leave the field empty)") . "
    "; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Packet loss rate") . ""; + $form .= ""; + $form .= "GetPlr() . "\" />"; + $form .= " 
    " . gettext("Hint: in most cases, you " + . "should specify 0 here (or leave the field empty). " + . "A value of 0.001 means one packet in 1000 gets dropped") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Queue Size") . ""; + $form .= ""; + $form .= "GetQlimit() . "\" />"; + $form .= " slots
    "; + $form .= "" . gettext("Hint: in most cases, you " + . "should leave the field empty. All packets in this pipe are placed into a fixed-size queue first, " + . "then they are delayed by value specified in the Delay field, and then they " + . "are delivered to their destination.") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Bucket Size") . ""; + $form .= ""; + $form .= "GetBuckets() . "\" />"; + $form .= " slots
    "; + $form .= "" . gettext("Hint: in most cases, you " + . "should leave the field empty. It increases the hash size set."); + $form .= ""; + + return $form; + + } + + function wconfig() { + $cflink =& get_dn_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['name'] = $this->GetQname(); + $cflink['number'] = $this->GetNumber(); + $cflink['qlimit'] = $this->GetQlimit(); + $cflink['plr'] = $this->GetPlr(); + $cflink['description'] = $this->GetDescription(); + + $bandwidth = $this->GetBandwidth(); + if (is_array($bandwidth)) { + $cflink['bandwidth'] = array(); + $cflink['bandwidth']['item'] = array(); + foreach ($bandwidth as $bwidx => $bw) + $cflink['bandwidth']['item'][] = $bw; + } + + $cflink['enabled'] = $this->GetEnabled(); + $cflink['buckets'] = $this->GetBuckets(); + $mask = $this->GetMask(); + $cflink['mask'] = $mask['type']; + $cflink['maskbits'] = $mask['bits']; + $cflink['maskbitsv6'] = $mask['bitsv6']; + $cflink['delay'] = $this->GetDelay(); + } + +} + +class dnqueue_class extends dummynet_class { + var $pipeparent; + var $weight; + + function GetWeight() { + return $this->weight; + } + function SetWeight($weight) { + $this->weight = $weight; + } + function GetPipe() { + return $this->pipeparent; + } + function SetPipe($pipe) { + $this->pipeparent = $pipe; + } + + /* Just a stub in case we ever try to call this from the frontend. */ + function &add_queue($interface, &$queue, &$path, &$input_errors) { return; } + + function delete_queue() { + cleanup_dnqueue_from_rules($this->GetQname()); + unset_dn_object_by_reference($this->GetLink()); + @pfSense_pipe_action("queue delete " . $this->GetNumber()); + } + + function validate_input($data, &$input_errors) { + parent::validate_input($data, $input_errors); + + if ($data['weight'] && ((!is_numeric($data['weight'])) || + ($data['weight'] < 1 && $data['weight'] > 100))) + $input_errors[] = gettext("Weight must be an integer between 1 and 100."); + } + + /* + * Should search even its children + */ + function &find_queue($pipe, $qname) { + if ($qname == $this->GetQname()) + return $this; + else + return NULL; + } + + function &find_parentqueue($pipe, $qname) { + return $this->qparent; + } + + function &get_queue_list(&$qlist) { + if ($this->GetEnabled() == "") + return; + $qlist[$this->GetQname()] = "?" .$this->GetNumber(); + } + + function ReadConfig(&$q) { + if (!empty($q['name']) && !empty($q['newname']) && $q['name'] != $q['newname']) { + $this->SetQname($q['newname']); + } else if (!empty($q['newname'])) { + $this->SetQname($q['newname']); + } else { + $this->SetQname($q['name']); + } + $this->SetNumber($q['number']); + if (isset($q['qlimit']) && $q['qlimit'] <> "") + $this->SetQlimit($q['qlimit']); + else + $this->SetQlimit(""); + if (isset($q['mask']) && $q['mask'] <> "") + $masktype = $q['mask']; + else + $masktype = ""; + if (isset($q['maskbits']) && $q['maskbits'] <> "") + $maskbits = $q['maskbits']; + else + $maskbits = ""; + if (isset($q['maskbitsv6']) && $q['maskbitsv6'] <> "") + $maskbitsv6 = $q['maskbitsv6']; + else + $maskbitsv6 = ""; + $this->SetMask(array("type" => $masktype, "bits" => $maskbits, "bitsv6" => $maskbitsv6)); + if (isset($q['buckets']) && $q['buckets'] <> "") + $this->SetBuckets($q['buckets']); + else + $this->SetBuckets(""); + if (isset($q['plr']) && $q['plr'] <> "") + $this->SetPlr($q['plr']); + else + $this->SetPlr(""); + if (isset($q['weight']) && $q['weight'] <> "") + $this->SetWeight($q['weight']); + else + $this->SetWeight(""); + if (isset($q['description']) && $q['description'] <> "") + $this->SetDescription($q['description']); + else + $this->SetDescription(""); + $this->SetEnabled($q['enabled']); + } + + function build_tree() { + $parent =& $this->GetParent(); + $tree = "
  • GetQname() ."&queue=" . $this->GetQname() ."&action=show\">"; + $tree .= $this->GetQname() . ""; + $tree .= "
  • "; + + return $tree; + } + + function build_rules() { + if ($this->GetEnabled() == "") + return; + + $parent =& $this->GetParent(); + $pfq_rule = "queue ". $this->GetNumber() . " config pipe " . $parent->GetNumber(); + if ($this->GetQlimit()) + $pfq_rule .= " queue " . $this->GetQlimit(); + if ($this->GetWeight()) + $pfq_rule .= " weight " . $this->GetWeight(); + if ($this->GetBuckets()) + $pfq_rule .= " buckets " . $this->GetBuckets(); + $this->build_mask_rules($pfq_rule); + $pfq_rule .= "\n"; + + return $pfq_rule; + } + + function build_javascript() { + return parent::build_javascript(); + } + + + function build_form() { + $form = "
    "; + $form .= gettext("Enable/Disable"); + $form .= ""; + $form .= " GetEnabled() == "on") + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Enable/Disable queue") . ""; + $form .= ""; + $form .= "
    " . gettext("Name") . ""; + $form .= ""; + $form .= "GetQname()."\" />"; + $form .= "GetQname()."\" />"; + if ($this->GetNumber() > 0) { + $form .= "GetNumber()."\" />"; + } + $form .= ""; + $form .= "" . gettext("Mask") . ""; + $form .= ""; + $form .= ""; + $form .= " slots
    "; + $form .= "" . gettext("If 'source' or 'destination' slots is chosen, \n" + . "a dynamic pipe with the bandwidth, delay, packet loss and queue size given above will \n" + . "be created for each source/destination IP address encountered, \n" + . "respectively. This makes it possible to easily specify bandwidth \n" + . "limits per host.") . "
    "; + $form .= "255.255.255.255/  "none") + $form .= $mask['bits']; + $form .= "\""; + if ($mask['type'] == "none") + $form .= " disabled"; + $form .= " />"; + $form .= "  IPV4 mask bits (1-32)
    "; + $form .= "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/  "none") + $form .= $mask['bitsv6']; + $form .= "\""; + if ($mask['type'] == "none") + $form .= " disabled"; + $form .= " />"; + $form .= "  IPV6 mask bits (1-128)
    "; + $form .= "" . gettext("If 'source' or 'destination' slots is chosen, \n" + . "leaving the mask bits blank will create one pipe per host. Otherwise specify \n" + . "the number of 'one' bits in the subnet mask used to group multiple hosts \n" + . "per queue.") . ""; + $form .= ""; + $form .= "" . gettext("Description") . ""; + $form .= ""; + $form .= "GetDescription(); + $form .= "\" />"; + $form .= "
    "; + $form .= gettext("You may enter a description here for your reference (not parsed).") . ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "
    "; + $form .= "

    "; + $form .= "

    "; + $form .= ""; + $form .= "" . gettext("Weight") . ""; + $form .= ""; + $form .= "GetWeight() . "\" />"; + $form .= " 
    " . gettext("Hint: For queues under the same parent " + . "this specifies the share that a queue gets(values range from 1 to 100, you can leave it blank otherwise)") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Packet loss rate") . ""; + $form .= ""; + $form .= "GetPlr() . "\" />"; + $form .= " 
    " . gettext("Hint: in most cases, you " + . "should specify 0 here (or leave the field empty). " + . "A value of 0.001 means one packet in 1000 gets dropped") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Queue Size") . ""; + $form .= ""; + $form .= "GetQlimit() . "\" />"; + $form .= " slots
    "; + $form .= "" . gettext("Hint: in most cases, you " + . "should leave the field empty. All packets in this pipe are placed into a fixed-size queue first, " + . "then they are delayed by value specified in the Delay field, and then they " + . "are delivered to their destination.") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Bucket Size") . ""; + $form .= ""; + $form .= "GetBuckets() . "\" />"; + $form .= " " . gettext("slots") . "
    "; + $form .= "" . gettext("Hint: in most cases, you " + . "should leave the field empty. It increases the hash size set."); + $form .= ""; + + $form .= "GetPipe() . "\" />"; + + return $form; + + } + + function update_dn_data(&$data) { + $this->ReadConfig($data); + } + + function wconfig() { + $cflink =& get_dn_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['name'] = $this->GetQname(); + $cflink['number'] = $this->GetNumber(); + $cflink['qlimit'] = $this->GetQlimit(); + $cflink['description'] = $this->GetDescription(); + $cflink['weight'] = $this->GetWeight(); + $cflink['enabled'] = $this->GetEnabled(); + $cflink['buckets'] = $this->GetBuckets(); + $mask = $this->GetMask(); + $cflink['mask'] = $mask['type']; + $cflink['maskbits'] = $mask['bits']; + $cflink['maskbitsv6'] = $mask['bitsv6']; + } +} + +// List of layer7 objects +$layer7_rules_list = array(); + +class layer7 { + + var $rname; //alias + var $rdescription; //alias description + var $rport; //divert port + var $renabled; //rule enabled + var $rsets = array(); //array of l7 associations + + // Auxiliary functions + + function GetRName() { + return $this->rname; + } + function SetRName($rname) { + $this->rname = $rname; + } + function GetRDescription() { + return $this->rdescription; + } + function SetRDescription($rdescription) { + $this->rdescription = $rdescription; + } + function GetRPort() { + return $this->rport; + } + function SetRPort($rport) { + $this->rport = $rport; + } + function GetREnabled() { + return $this->renabled; + } + function SetREnabled($value) { + $this->renabled = $value; + } + function GetRl7() { + return $this->rsets; + } + function SetRl7($rsets) { + $this->rsets = $rsets; + } + + //Add a tuple (rule,sctructure,element) to the $rsets + + function add_rule($l7set) { + $this->rsets[] = $l7set; + } + + // Build the layer7 rules + function build_l7_rules() { + if($this->GetREnabled() == "") { + return; + } + //$l7rules = "#" . $this->rdescription . "\n"; + foreach ($this->rsets as $rl7) { + $l7rules .= $rl7->build_rules(); + } + return $l7rules; + } + + // Read the config from array + function ReadConfig(&$qname, &$q) { + $this->SetRName($qname); + $this->SetREnabled($q['enabled']); + $this->SetRPort($q['divert_port']); + if(isset($q['description']) && $q['description'] <> "") + $this->SetRDescription($q['description']); + $rsets = $q['l7rules']; + //Put individual rules in the array + if(is_array($rsets)) { + $this->rsets = array(); // XXX: ugly hack + foreach($rsets as $l7r) { + $l7obj = new l7rule(); + $l7obj->SetRProtocol($l7r['protocol']); + $l7obj->SetRStructure($l7r['structure']); + $l7obj->SetRBehaviour($l7r['behaviour']); + $this->add_rule($l7obj); + } + } + } + + //Generate a random port for the divert socket + function gen_divert_port() { + $dports = get_divert_ports(); //array of used ports + $divert_port = 1; // Initialize + while (($divert_port % 2) != 0 || in_array($divert_port, $dports)) { + $divert_port = rand(40000, 60000); + } + return $divert_port; + } + + //Helps building the left tree + function build_tree() { + $tree = "
  • GetRName() ."&action=show\">"; + $tree .= $this->GetRName() . ""; + $tree .= "
  • "; + + return $tree; + } + + function build_form() { + $form = "
    "; + $form .= gettext("Enable/Disable"); + $form .= ""; + $form .= " GetREnabled() == "on") { + $form .= "checked=\"checked\""; + } + $form .= " /> " . gettext("Enable/Disable layer7 Container") . ""; + $form .= ""; + $form .= "
    " . gettext("Name") . ""; + $form .= ""; + $form .= "GetRName()."\" />"; + $form .= ""; + $form .= "" . gettext("Description") . ""; + $form .= ""; + $form .= "GetRDescription(); + $form .= "\" />"; + $form .= "
    "; + $form .= gettext("You may enter a description here for your reference (not parsed).") . ""; + $form .= ""; + + return $form; + } + + //Write the setting to the $config array + function wconfig() { + global $config; + + if(!is_array($config['l7shaper']['container'])) { + $config['l7shaper']['container'] = array(); + } + // + $cflink =& get_l7c_reference_to_me_in_config($this->GetRName()); + // Test if this rule does exists already + if(!$cflink) { + $cflink =& $config['l7shaper']['container'][]; + } + $cflink['name'] = $this->GetRName(); + $cflink['enabled'] = $this->GetREnabled(); + $cflink['description'] = $this->GetRDescription(); + $cflink['divert_port'] = $this->GetRPort(); + + //Destroy previously existent rules + if(is_array($cflink['rules'])) { + unset($cflink['l7rules']); + } + + $cflink['l7rules'] = array(); + + $i = 0; + foreach($this->rsets as $rulel7) { + $cflink['l7rules'][$i]['protocol'] = $rulel7->GetRProtocol(); + $cflink['l7rules'][$i]['structure'] = $rulel7->GetRStructure(); + $cflink['l7rules'][$i]['behaviour'] = $rulel7->GetRBehaviour(); + $i++; + } + } + + //This function is necessary to help producing the overload options for keep state + function get_unique_structures() { + + $unique_structures = array("action" => false, "dummynet" => false, "altq" => false); + foreach($this->rsets as $l7rule) { + if($l7rule->GetRStructure() == "action") + $unique_structures['action'] = true; + else if($l7rule->GetRStructure() == "limiter") + $unique_structures['dummynet'] = true; + else + $unique_structures['altq'] = true; + } + //Delete non used structures so we don't have to check this in filter.inc + foreach($unique_structures as $key => $value) + if(!$value) + unset($unique_structures[$key]); + return $unique_structures; + } + + function validate_input($data, &$input_errors) { + $reqdfields[] = "container"; + $reqdfieldsn[] = gettext("Name"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if (!preg_match("/^[a-zA-Z0-9_-]+$/", $data['container'])) + $input_errors[] = gettext("Queue names must be alphanumeric and _ or - only."); + } + + function delete_l7c() { + mwexec("/bin/pkill -f 'ipfw-classifyd .* -p ". $this->GetRPort() . "'", true); + unset_l7_object_by_reference($this->GetRName()); + cleanup_l7_from_rules($this->GetRName()); + } +} + +class l7rule { + + var $rprotocol; //protocol + var $rstructure; //action, limiter, queue + var $rbehaviour; //allow, block, queue_name, pipe_number ... + + //Auxiliary Functions + + function GetRProtocol() { + return $this->rprotocol; + } + function SetRProtocol($rprotocol) { + $this->rprotocol = $rprotocol; + } + function GetRStructure() { + return $this->rstructure; + } + function SetRStructure($rstructure) { + $this->rstructure = $rstructure; + } + function GetRBehaviour() { + return $this->rbehaviour; + } + function SetRBehaviour($rbehaviour) { + $this->rbehaviour = $rbehaviour; + } + + //XXX Do we need to test any particularity for AltQ queues? + function build_rules() { + global $dummynet_pipe_list; + switch ($this->GetRStructure()) { + case "limiter": + read_dummynet_config(); + $dn_list =& get_unique_dnqueue_list(); + $found = false; + if(is_array($dn_list)) { + foreach($dn_list as $key => $value) { + if($key == $this->GetRBehaviour()) { + if($value[0] == "?") + $l7rule = $this->GetRProtocol() . " = dnqueue " . substr($value, 1) . "\n"; + else + $l7rule = $this->GetRProtocol() . " = dnpipe " . $value . "\n"; + $found = true; + } + if($found) + break; + } + } + break; + default: //This is for action and for altq + $l7rule = $this->GetRProtocol() . " = " . $this->GetRStructure() . " " . $this->GetRBehaviour() . "\n"; + break; + } + return $l7rule; + } +} + +/* + * This function allows to return an array with all the used divert socket ports + */ +function get_divert_ports() { + global $layer7_rules_list; + $dports = array(); + + foreach($layer7_rules_list as $l7r) + $dports[] = $l7r->GetRPort(); + + return $dports; +} + +function &get_l7c_reference_to_me_in_config(&$name) { + global $config; + + $ptr = NULL; + + if(is_array($config['l7shaper']['container'])) { + foreach($config['l7shaper']['container'] as $key => $value) { + if($value['name'] == $name) + $ptr =& $config['l7shaper']['container'][$key]; + } + } + return $ptr; + // $ptr can be null. has to be checked later +} + +function unset_l7_object_by_reference(&$name) { + global $config; + + if(is_array($config['l7shaper']['container'])) { + foreach($config['l7shaper']['container'] as $key => $value) { + if($value['name'] == $name) { + unset($config['l7shaper']['container'][$key]['l7rules']); + unset($config['l7shaper']['container'][$key]); + break; + } + } + } +} + +function read_layer7_config() { + global $layer7_rules_list, $config; + + if (!is_array($config['l7shaper']['container']) || !count($config['l7shaper']['container'])) { + $layer7_rules_list = array(); + return; + } + + $l7cs = &$config['l7shaper']['container']; + + $layer7_rules_list = array(); + + foreach ($l7cs as $conf) { + if (empty($conf['name'])) + continue; /* XXX: grrrrrr at php */ + $root =& new layer7(); + $root->ReadConfig($conf['name'],$conf); + $layer7_rules_list[$root->GetRName()] = &$root; + } +} + +function update_layer7_custom_patterns() { + global $config; + + if (!is_array($config['l7shaper']['custom_pat'])) + return; + + foreach ($config['l7shaper']['custom_pat'] as $filename => $filecontent) + if (!file_exists("/usr/local/share/protocols/" . $filename)) + @file_put_contents("/usr/local/share/protocols/" . $filename, base64_decode($filecontent)); +} + +function generate_layer7_files() { + global $layer7_rules_list, $g; + + read_layer7_config(); + + if (!empty($layer7_rules_list)) { + if (!is_module_loaded("ipdivert.ko")) + mwexec("/sbin/kldload ipdivert.ko"); + + array_map('unlink', glob("{$g['tmp_path']}/*.l7")); + } + + update_layer7_custom_patterns(); + + foreach($layer7_rules_list as $l7rules) { + if($l7rules->GetREnabled()) { + $filename = $l7rules->GetRName() . ".l7"; + $path = "{$g['tmp_path']}/" . $filename; + + $rules = $l7rules->build_l7_rules(); + + $fp = fopen($path,'w'); + fwrite($fp,$rules); + fclose($fp); + } + } +} + +function layer7_start_l7daemon() { + global $layer7_rules_list, $g; + + /* + * XXX: ermal - Needed ?! + * read_layer7_config(); + */ + + foreach($layer7_rules_list as $l7rules) { + if($l7rules->GetREnabled()) { + $filename = $l7rules->GetRName() . ".l7"; + $path = "{$g['tmp_path']}/" . $filename; + + unset($l7pid); + /* Only reread the configuration rather than restart to avoid losing information. */ + exec("/bin/pgrep -f 'ipfw-classifyd .* -p ". $l7rules->GetRPort() . "'", $l7pid); + if (count($l7pid) > 0) { + log_error(sprintf(gettext("Sending HUP signal to %s"), $l7pid[0])); + mwexec("/bin/kill -HUP {$l7pid[0]}"); + } else { + // XXX: Hardcoded number of packets to garbage collect and queue length.. + $ipfw_classifyd_init = "/usr/local/sbin/ipfw-classifyd -n 8 -q 700 -c {$path} -p " . $l7rules->GetRPort() . " -P /usr/local/share/protocols"; + mwexec_bg($ipfw_classifyd_init); + } + } + } +} + +// This function uses /usr/local/share/protocols as a default directory for searching .pat files +function generate_protocols_array() { + + update_layer7_custom_patterns(); + + $protocols = return_dir_as_array("/usr/local/share/protocols"); + $protocols_new = array(); + if(is_array($protocols)) { + foreach($protocols as $key => $proto) { + if (strstr($proto, ".pat")) + $protocols_new[$key] =& str_replace(".pat", "", $proto); + } + sort($protocols_new); + } + return $protocols_new; +} + +function get_l7_unique_list() { + global $layer7_rules_list; + + $l7list = array(); + if(is_array($layer7_rules_list)) + foreach($layer7_rules_list as $l7c) + if($l7c->GetREnabled()) + $l7list[] = $l7c->GetRName(); + + return $l7list; +} + +// Disable a removed l7 container from the filter +function cleanup_l7_from_rules(&$name) { + global $config; + + if(is_array($config['filter']['rule'])) + foreach ($config['filter']['rule'] as $key => $rule) { + if ($rule['l7container'] == $name) + unset($config['filter']['rule'][$key]['l7container']); + } +} + +function get_dummynet_name_list() { + + $dn_name_list =& get_unique_dnqueue_list(); + $dn_name = array(); + if(is_array($dn_name_list)) + foreach($dn_name_list as $key => $value) + $dn_name[] = $key; + + return $dn_name; + +} + +function get_altq_name_list() { + $altq_name_list =& get_unique_queue_list(); + $altq_name = array(); + if(is_array($altq_name_list)) + foreach($altq_name_list as $key => $aqobj) + $altq_name[] = $key; + + return $altq_name; +} + +/* + * XXX: TODO Make a class shaper to hide all these function + * from the global namespace. + */ + +/* + * This is a layer violation but for now there is no way + * i can find to properly do this with PHP. + */ +function altq_get_default_queue($interface) { + global $altq_list_queues; + + $altq_tmp = $altq_list_queues[$interface]; + if ($altq_tmp) + return $altq_tmp->GetDefaultQueuePresent(); + else + return false; +} + +function altq_check_default_queues() { + global $altq_list_queues; + + $count = 0; + if (is_array($altq_list_queues)) { + foreach($altq_list_queues as $altq) { + if ($altq->GetDefaultQueuePresent()) + $count++; + } + } + else $count++; + + return 0; +} + +function &get_unique_queue_list() { + global $altq_list_queues; + + $qlist = array(); + if (is_array($altq_list_queues)) { + foreach ($altq_list_queues as $altq) { + if ($altq->GetEnabled() == "") + continue; + $tmplist =& $altq->get_queue_list(); + foreach ($tmplist as $qname => $link) { + if ($link->GetEnabled() <> "") + $qlist[$qname] = $link; + } + } + } + return $qlist; +} + +function &get_unique_dnqueue_list() { + global $dummynet_pipe_list; + + $qlist = array(); + if (is_array($dummynet_pipe_list)) { + foreach ($dummynet_pipe_list as $dn) { + if ($dn->GetEnabled() == "") + continue; + $tmplist =& $dn->get_queue_list(); + foreach ($tmplist as $qname => $link) { + $qlist[$qname] = $link; + } + } + } + return $qlist; +} + +function ref_on_altq_queue_list($parent, $qname) { + if (isset($GLOBALS['queue_list'][$qname])) + $GLOBALS['queue_list'][$qname]++; + else + $GLOBALS['queue_list'][$qname] = 1; + + unref_on_altq_queue_list($parent); +} + +function unref_on_altq_queue_list($qname) { + $GLOBALS['queue_list'][$qname]--; + if ($GLOBALS['queue_list'][$qname] <= 1) + unset($GLOBALS['queue_list'][$qname]); +} + +function read_altq_config() { + global $altq_list_queues, $config; + $path = array(); + + if (!is_array($config['shaper'])) + $config['shaper'] = array(); + if (!is_array($config['shaper']['queue'])) + $config['shaper']['queue'] = array(); + $a_int = &$config['shaper']['queue']; + + $altq_list_queues = array(); + + if (!is_array($config['shaper']['queue'])) + return; + + foreach ($a_int as $key => $conf) { + $int = $conf['interface']; + $root =& new altq_root_queue(); + $root->SetInterface($int); + $altq_list_queues[$root->GetInterface()] = &$root; + $root->ReadConfig($conf); + array_push($path, $key); + $root->SetLink($path); + if (is_array($conf['queue'])) { + foreach ($conf['queue'] as $key1 => $q) { + array_push($path, $key1); + /* + * XXX: we completely ignore errors here but anyway we must have + * checked them before so no harm should be come from this. + */ + $root->add_queue($root->GetInterface(), $q, $path, $input_errors); + array_pop($path); + } + } + array_pop($path); + } +} + +function read_dummynet_config() { + global $dummynet_pipe_list, $config; + $path = array(); + + if (!is_array($config['dnshaper'])) + $config['dnshaper'] = array(); + if (!is_array($config['dnshaper']['queue'])) + $config['dnshaper']['queue'] = array(); + $a_int = &$config['dnshaper']['queue']; + + $dummynet_pipe_list = array(); + + if (!is_array($config['dnshaper']['queue']) + || !count($config['dnshaper']['queue'])) + return; + + foreach ($a_int as $key => $conf) { + if (empty($conf['name'])) + continue; /* XXX: grrrrrr at php */ + $root =& new dnpipe_class(); + $root->ReadConfig($conf); + $dummynet_pipe_list[$root->GetQname()] = &$root; + array_push($path, $key); + $root->SetLink($path); + if (is_array($conf['queue'])) { + foreach ($conf['queue'] as $key1 => $q) { + array_push($path, $key1); + /* + * XXX: we completely ignore errors here but anyway we must have + * checked them before so no harm should be come from this. + */ + $root->add_queue($root->GetQname(), $q, $path, $input_errors); + array_pop($path); + } + } + array_pop($path); + } +} + +function get_interface_list_to_show() { + global $altq_list_queues, $config; + global $shaperIFlist; + + $tree = ""; + foreach ($shaperIFlist as $shif => $shDescr) { + if ($altq_list_queues[$shif]) { + continue; + } else { + if (!is_altq_capable(get_real_interface($shif))) + continue; + $tree .= "
  • ".$shDescr."
  • "; + } + } + + return $tree; +} + +function filter_generate_altq_queues() { + global $altq_list_queues; + + read_altq_config(); + + $altq_rules = ""; + foreach ($altq_list_queues as $altq) + $altq_rules .= $altq->build_rules(); + + return $altq_rules; +} + +function dnqueue_find_nextnumber() { + global $dummynet_pipe_list; + + $dnused = array(); + if (is_array($dummynet_pipe_list)) { + foreach ($dummynet_pipe_list as $dn) { + $tmplist =& $dn->get_queue_list(); + foreach ($tmplist as $qname => $link) { + if ($link[0] == "?") + $dnused[$qname] = substr($link, 1); + } + } + } + + sort($dnused, SORT_NUMERIC); + $dnnumber = 0; + $found = false; + foreach ($dnused as $dnnum) { + if (($dnnum - $dnnumber) > 1) { + $dnnumber = $dnnum + 1; + $found = true; + break; + } else + $dnnumber = $dnnum; + } + + if ($found == false) + $dnnumber++; + + unset($dnused, $dnnum, $found); + return $dnnumber; +} + +function dnpipe_find_nextnumber() { + global $dummynet_pipe_list; + + $dnused = array(); + foreach ($dummynet_pipe_list as $dn) + $dnused[] = $dn->GetNumber(); + + sort($dnused, SORT_NUMERIC); + $dnnumber = 0; + $found = false; + foreach ($dnused as $dnnum) { + if (($dnnum - $dnnumber) > 1) { + $dnnumber = $dnnum + 1; + $found = true; + break; + } else + $dnnumber = $dnnum; + } + + if ($found == false) + $dnnumber++; + + unset($dnused, $dnnum, $found); + return $dnnumber; +} + +function filter_generate_dummynet_rules() { + global $g, $dummynet_pipe_list; + + read_dummynet_config(); + + $dn_rules = ""; + foreach ($dummynet_pipe_list as $dn) + $dn_rules .= $dn->build_rules(); + + if (!empty($dn_rules)) { + if (!is_module_loaded("dummynet.ko")) { + mwexec("/sbin/kldload dummynet"); + set_sysctl(array( + "net.inet.ip.dummynet.io_fast" => "1", + "net.inet.ip.dummynet.hash_size" => "256" + )); + } + file_put_contents("{$g['tmp_path']}/rules.limiter", $dn_rules); + mwexec("/sbin/ipfw {$g['tmp_path']}/rules.limiter"); + } +} + +function build_iface_without_this_queue($iface, $qname) { + global $g, $altq_list_queues; + global $shaperIFlist; + + $altq =& $altq_list_queues[$iface]; + if ($altq) + $scheduler = ": " . $altq->GetScheduler(); + $form = ""; + $form .= "". $shaperIFlist[$iface] . $scheduler.""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "\"clone\""; + $form .= gettext(" Clone shaper/queue on this interface") . ""; + + return $form; + +} + + +$default_shaper_msg = ""; +$default_shaper_msg .= "" . sprintf(gettext("Welcome to the %s Traffic Shaper."), $g['product_name']) . "
    "; +$default_shaper_msg .= gettext("The tree on the left helps you navigate through the queues
    " + . "buttons at the bottom represent queue actions and are activated accordingly."); +$default_shaper_msg .= "
    "; +$default_shaper_msg .= ""; + +$dn_default_shaper_msg = ""; +$dn_default_shaper_msg .= "" . sprintf(gettext("Welcome to the %s Traffic Shaper."), $g['product_name']) . "
    "; +$dn_default_shaper_msg .= gettext("The tree on the left helps you navigate through the queues
    " + . "buttons at the bottom represent queue actions and are activated accordingly."); +$dn_default_shaper_msg .= "
    "; +$dn_default_shaper_msg .= ""; + +?> diff --git a/etc/inc/simplepie/LICENSE.txt b/etc/inc/simplepie/LICENSE.txt new file mode 100644 index 000000000..a822a4bd9 --- /dev/null +++ b/etc/inc/simplepie/LICENSE.txt @@ -0,0 +1,26 @@ +Copyright (c) 2004-2007, Ryan Parman and Geoffrey Sneddon. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + * 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. + + * Neither the name of the SimplePie Team nor the names of its contributors may be used + to endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS +AND CONTRIBUTORS 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. \ No newline at end of file diff --git a/etc/inc/simplepie/simplepie.inc b/etc/inc/simplepie/simplepie.inc new file mode 100644 index 000000000..7052eb4b4 --- /dev/null +++ b/etc/inc/simplepie/simplepie.inc @@ -0,0 +1,13672 @@ +' . SIMPLEPIE_NAME . ''); + +/** + * No Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_NONE', 0); + +/** + * Feed Link Element Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', 1); + +/** + * Local Feed Extension Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', 2); + +/** + * Local Feed Body Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_LOCAL_BODY', 4); + +/** + * Remote Feed Extension Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', 8); + +/** + * Remote Feed Body Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_REMOTE_BODY', 16); + +/** + * All Feed Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_ALL', 31); + +/** + * No known feed type + */ +define('SIMPLEPIE_TYPE_NONE', 0); + +/** + * RSS 0.90 + */ +define('SIMPLEPIE_TYPE_RSS_090', 1); + +/** + * RSS 0.91 (Netscape) + */ +define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', 2); + +/** + * RSS 0.91 (Userland) + */ +define('SIMPLEPIE_TYPE_RSS_091_USERLAND', 4); + +/** + * RSS 0.91 (both Netscape and Userland) + */ +define('SIMPLEPIE_TYPE_RSS_091', 6); + +/** + * RSS 0.92 + */ +define('SIMPLEPIE_TYPE_RSS_092', 8); + +/** + * RSS 0.93 + */ +define('SIMPLEPIE_TYPE_RSS_093', 16); + +/** + * RSS 0.94 + */ +define('SIMPLEPIE_TYPE_RSS_094', 32); + +/** + * RSS 1.0 + */ +define('SIMPLEPIE_TYPE_RSS_10', 64); + +/** + * RSS 2.0 + */ +define('SIMPLEPIE_TYPE_RSS_20', 128); + +/** + * RDF-based RSS + */ +define('SIMPLEPIE_TYPE_RSS_RDF', 65); + +/** + * Non-RDF-based RSS (truly intended as syndication format) + */ +define('SIMPLEPIE_TYPE_RSS_SYNDICATION', 190); + +/** + * All RSS + */ +define('SIMPLEPIE_TYPE_RSS_ALL', 255); + +/** + * Atom 0.3 + */ +define('SIMPLEPIE_TYPE_ATOM_03', 256); + +/** + * Atom 1.0 + */ +define('SIMPLEPIE_TYPE_ATOM_10', 512); + +/** + * All Atom + */ +define('SIMPLEPIE_TYPE_ATOM_ALL', 768); + +/** + * All feed types + */ +define('SIMPLEPIE_TYPE_ALL', 1023); + +/** + * No construct + */ +define('SIMPLEPIE_CONSTRUCT_NONE', 0); + +/** + * Text construct + */ +define('SIMPLEPIE_CONSTRUCT_TEXT', 1); + +/** + * HTML construct + */ +define('SIMPLEPIE_CONSTRUCT_HTML', 2); + +/** + * XHTML construct + */ +define('SIMPLEPIE_CONSTRUCT_XHTML', 4); + +/** + * base64-encoded construct + */ +define('SIMPLEPIE_CONSTRUCT_BASE64', 8); + +/** + * IRI construct + */ +define('SIMPLEPIE_CONSTRUCT_IRI', 16); + +/** + * A construct that might be HTML + */ +define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32); + +/** + * All constructs + */ +define('SIMPLEPIE_CONSTRUCT_ALL', 63); + +/** + * PCRE for HTML attributes + */ +define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*'); + +/** + * PCRE for XML attributes + */ +define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*'); + +/** + * XML Namespace + */ +define('SIMPLEPIE_NAMESPACE_XML', 'http://www.w3.org/XML/1998/namespace'); + +/** + * Atom 1.0 Namespace + */ +define('SIMPLEPIE_NAMESPACE_ATOM_10', 'http://www.w3.org/2005/Atom'); + +/** + * Atom 0.3 Namespace + */ +define('SIMPLEPIE_NAMESPACE_ATOM_03', 'http://purl.org/atom/ns#'); + +/** + * RDF Namespace + */ +define('SIMPLEPIE_NAMESPACE_RDF', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); + +/** + * RSS 0.90 Namespace + */ +define('SIMPLEPIE_NAMESPACE_RSS_090', 'http://my.netscape.com/rdf/simple/0.9/'); + +/** + * RSS 1.0 Namespace + */ +define('SIMPLEPIE_NAMESPACE_RSS_10', 'http://purl.org/rss/1.0/'); + +/** + * RSS 1.0 Content Module Namespace + */ +define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', 'http://purl.org/rss/1.0/modules/content/'); + +/** + * RSS 2.0 Namespace + * (Stupid, I know, but I'm certain it will confuse people less with support.) + */ +define('SIMPLEPIE_NAMESPACE_RSS_20', ''); + +/** + * DC 1.0 Namespace + */ +define('SIMPLEPIE_NAMESPACE_DC_10', 'http://purl.org/dc/elements/1.0/'); + +/** + * DC 1.1 Namespace + */ +define('SIMPLEPIE_NAMESPACE_DC_11', 'http://purl.org/dc/elements/1.1/'); + +/** + * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace + */ +define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', 'http://www.w3.org/2003/01/geo/wgs84_pos#'); + +/** + * GeoRSS Namespace + */ +define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss'); + +/** + * Media RSS Namespace + */ +define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/'); + +/** + * Wrong Media RSS Namespace + */ +define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', 'http://search.yahoo.com/mrss'); + +/** + * iTunes RSS Namespace + */ +define('SIMPLEPIE_NAMESPACE_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd'); + +/** + * XHTML Namespace + */ +define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml'); + +/** + * IANA Link Relations Registry + */ +define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/'); + +/** + * Whether we're running on PHP5 + */ +define('SIMPLEPIE_PHP5', version_compare(PHP_VERSION, '5.0.0', '>=')); + +/** + * No file source + */ +define('SIMPLEPIE_FILE_SOURCE_NONE', 0); + +/** + * Remote file source + */ +define('SIMPLEPIE_FILE_SOURCE_REMOTE', 1); + +/** + * Local file source + */ +define('SIMPLEPIE_FILE_SOURCE_LOCAL', 2); + +/** + * fsockopen() file source + */ +define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', 4); + +/** + * cURL file source + */ +define('SIMPLEPIE_FILE_SOURCE_CURL', 8); + +/** + * file_get_contents() file source + */ +define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', 16); + +/** + * SimplePie + * + * @package SimplePie + * @version "Razzleberry" + * @copyright 2004-2007 Ryan Parman, Geoffrey Sneddon + * @author Ryan Parman + * @author Geoffrey Sneddon + * @todo Option for type of fetching (cache, not modified header, fetch, etc.) + */ +class SimplePie +{ + /** + * @var array Raw data + * @access private + */ + var $data = array(); + + /** + * @var mixed Error string + * @access private + */ + var $error; + + /** + * @var object Instance of SimplePie_Sanitize (or other class) + * @see SimplePie::set_sanitize_class() + * @access private + */ + var $sanitize; + + /** + * @var string SimplePie Useragent + * @see SimplePie::set_useragent() + * @access private + */ + var $useragent = SIMPLEPIE_USERAGENT; + + /** + * @var string Feed URL + * @see SimplePie::set_feed_url() + * @access private + */ + var $feed_url; + + /** + * @var object Instance of SimplePie_File to use as a feed + * @see SimplePie::set_file() + * @access private + */ + var $file; + + /** + * @var string Raw feed data + * @see SimplePie::set_raw_data() + * @access private + */ + var $raw_data; + + /** + * @var int Timeout for fetching remote files + * @see SimplePie::set_timeout() + * @access private + */ + var $timeout = 10; + + /** + * @var bool Forces fsockopen() to be used for remote files instead + * of cURL, even if a new enough version is installed + * @see SimplePie::force_fsockopen() + * @access private + */ + var $force_fsockopen = false; + + /** + * @var bool Force the given data/URL to be treated as a feed no matter what + * it appears like + * @see SimplePie::force_feed() + * @access private + */ + var $force_feed = false; + + /** + * @var bool Enable/Disable XML dump + * @see SimplePie::enable_xml_dump() + * @access private + */ + var $xml_dump = false; + + /** + * @var bool Enable/Disable Caching + * @see SimplePie::enable_cache() + * @access private + */ + var $cache = true; + + /** + * @var int Cache duration (in seconds) + * @see SimplePie::set_cache_duration() + * @access private + */ + var $cache_duration = 3600; + + /** + * @var int Auto-discovery cache duration (in seconds) + * @see SimplePie::set_autodiscovery_cache_duration() + * @access private + */ + var $autodiscovery_cache_duration = 604800; // 7 Days. + + /** + * @var string Cache location (relative to executing script) + * @see SimplePie::set_cache_location() + * @access private + */ + var $cache_location = './cache'; + + /** + * @var string Function that creates the cache filename + * @see SimplePie::set_cache_name_function() + * @access private + */ + var $cache_name_function = 'md5'; + + /** + * @var bool Reorder feed by date descending + * @see SimplePie::enable_order_by_date() + * @access private + */ + var $order_by_date = true; + + /** + * @var mixed Force input encoding to be set to the follow value + * (false, or anything type-cast to false, disables this feature) + * @see SimplePie::set_input_encoding() + * @access private + */ + var $input_encoding = false; + + /** + * @var int Feed Autodiscovery Level + * @see SimplePie::set_autodiscovery_level() + * @access private + */ + var $autodiscovery = SIMPLEPIE_LOCATOR_ALL; + + /** + * @var string Class used for caching feeds + * @see SimplePie::set_cache_class() + * @access private + */ + var $cache_class = 'SimplePie_Cache'; + + /** + * @var string Class used for locating feeds + * @see SimplePie::set_locator_class() + * @access private + */ + var $locator_class = 'SimplePie_Locator'; + + /** + * @var string Class used for parsing feeds + * @see SimplePie::set_parser_class() + * @access private + */ + var $parser_class = 'SimplePie_Parser'; + + /** + * @var string Class used for fetching feeds + * @see SimplePie::set_file_class() + * @access private + */ + var $file_class = 'SimplePie_File'; + + /** + * @var string Class used for items + * @see SimplePie::set_item_class() + * @access private + */ + var $item_class = 'SimplePie_Item'; + + /** + * @var string Class used for authors + * @see SimplePie::set_author_class() + * @access private + */ + var $author_class = 'SimplePie_Author'; + + /** + * @var string Class used for categories + * @see SimplePie::set_category_class() + * @access private + */ + var $category_class = 'SimplePie_Category'; + + /** + * @var string Class used for enclosures + * @see SimplePie::set_enclosures_class() + * @access private + */ + var $enclosure_class = 'SimplePie_Enclosure'; + + /** + * @var string Class used for Media RSS captions + * @see SimplePie::set_caption_class() + * @access private + */ + var $caption_class = 'SimplePie_Caption'; + + /** + * @var string Class used for Media RSS + * @see SimplePie::set_copyright_class() + * @access private + */ + var $copyright_class = 'SimplePie_Copyright'; + + /** + * @var string Class used for Media RSS + * @see SimplePie::set_credit_class() + * @access private + */ + var $credit_class = 'SimplePie_Credit'; + + /** + * @var string Class used for Media RSS + * @see SimplePie::set_rating_class() + * @access private + */ + var $rating_class = 'SimplePie_Rating'; + + /** + * @var string Class used for Media RSS + * @see SimplePie::set_restriction_class() + * @access private + */ + var $restriction_class = 'SimplePie_Restriction'; + + /** + * @var string Class used for content-type sniffing + * @see SimplePie::set_content_type_sniffer_class() + * @access private + */ + var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer'; + + /** + * @var string Class used for item sources. + * @see SimplePie::set_source_class() + * @access private + */ + var $source_class = 'SimplePie_Source'; + + /** + * @var mixed Set javascript query string parameter (false, or + * anything type-cast to false, disables this feature) + * @see SimplePie::set_javascript() + * @access private + */ + var $javascript = 'js'; + + /** + * @var int Maximum number of feeds to check with autodiscovery + * @see SimplePie::set_max_checked_feeds() + * @access private + */ + var $max_checked_feeds = 10; + + /** + * @var string Web-accessible path to the handler_favicon.php file. + * @see SimplePie::set_favicon_handler() + * @access private + */ + var $favicon_handler = ''; + + /** + * @var string Web-accessible path to the handler_image.php file. + * @see SimplePie::set_image_handler() + * @access private + */ + var $image_handler = ''; + + /** + * @var array Stores the URLs when multiple feeds are being initialized. + * @see SimplePie::set_feed_url() + * @access private + */ + var $multifeed_url = array(); + + /** + * @var array Stores SimplePie objects when multiple feeds initialized. + * @access private + */ + var $multifeed_objects = array(); + + /** + * @var array Stores the get_object_vars() array for use with multifeeds. + * @see SimplePie::set_feed_url() + * @access private + */ + var $config_settings = null; + + /** + * @var integer Stores the number of items to return per-feed with multifeeds. + * @see SimplePie::set_item_limit() + * @access private + */ + var $item_limit = 0; + + /** + * @var array Stores the default attributes to be stripped by strip_attributes(). + * @see SimplePie::strip_attributes() + * @access private + */ + var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); + + /** + * @var array Stores the default tags to be stripped by strip_htmltags(). + * @see SimplePie::strip_htmltags() + * @access private + */ + var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); + + /** + * The SimplePie class contains feed level data and options + * + * There are two ways that you can create a new SimplePie object. The first + * is by passing a feed URL as a parameter to the SimplePie constructor + * (as well as optionally setting the cache location and cache expiry). This + * will initialise the whole feed with all of the default settings, and you + * can begin accessing methods and properties immediately. + * + * The second way is to create the SimplePie object with no parameters + * at all. This will enable you to set configuration options. After setting + * them, you must initialise the feed using $feed->init(). At that point the + * object's methods and properties will be available to you. This format is + * what is used throughout this documentation. + * + * @access public + * @since 1.0 Preview Release + * @param string $feed_url This is the URL you want to parse. + * @param string $cache_location This is where you want the cache to be stored. + * @param int $cache_duration This is the number of seconds that you want to store the cache file for. + */ + function SimplePie($feed_url = null, $cache_location = null, $cache_duration = null) + { + // Other objects, instances created here so we can set options on them + $this->sanitize =& new SimplePie_Sanitize; + + // Set options if they're passed to the constructor + if ($cache_location !== null) + { + $this->set_cache_location($cache_location); + } + + if ($cache_duration !== null) + { + $this->set_cache_duration($cache_duration); + } + + // Only init the script if we're passed a feed URL + if ($feed_url !== null) + { + $this->set_feed_url($feed_url); + $this->init(); + } + } + + /** + * Used for converting object to a string + */ + function __toString() + { + return md5(serialize($this->data)); + } + + /** + * Remove items that link back to this before destroying this object + */ + function __destruct() + { + if (!empty($this->data['items'])) + { + foreach ($this->data['items'] as $item) + { + $item->__destruct(); + } + unset($this->data['items']); + } + if (!empty($this->data['ordered_items'])) + { + foreach ($this->data['ordered_items'] as $item) + { + $item->__destruct(); + } + unset($this->data['ordered_items']); + } + } + + /** + * Force the given data/URL to be treated as a feed no matter what it + * appears like + * + * @access public + * @since 1.1 + * @param bool $enable Force the given data/URL to be treated as a feed + */ + function force_feed($enable = false) + { + $this->force_feed = (bool) $enable; + } + + /** + * This is the URL of the feed you want to parse. + * + * This allows you to enter the URL of the feed you want to parse, or the + * website you want to try to use auto-discovery on. This takes priority + * over any set raw data. + * + * You can set multiple feeds to mash together by passing an array instead + * of a string for the $url. Remember that with each additional feed comes + * additional processing and resources. + * + * @access public + * @since 1.0 Preview Release + * @param mixed $url This is the URL (or array of URLs) that you want to parse. + * @see SimplePie::set_raw_data() + */ + function set_feed_url($url) + { + if (is_array($url)) + { + $this->multifeed_url = array(); + foreach ($url as $value) + { + $this->multifeed_url[] = SimplePie_Misc::fix_protocol($value, 1); + } + } + else + { + $this->feed_url = SimplePie_Misc::fix_protocol($url, 1); + } + } + + /** + * Provides an instance of SimplePie_File to use as a feed + * + * @access public + * @param object &$file Instance of SimplePie_File (or subclass) + * @return bool True on success, false on failure + */ + function set_file(&$file) + { + if (is_a($file, 'SimplePie_File')) + { + $this->feed_url = $file->url; + $this->file =& $file; + return true; + } + return false; + } + + /** + * Allows you to use a string of RSS/Atom data instead of a remote feed. + * + * If you have a feed available as a string in PHP, you can tell SimplePie + * to parse that data string instead of a remote feed. Any set feed URL + * takes precedence. + * + * @access public + * @since 1.0 Beta 3 + * @param string $data RSS or Atom data as a string. + * @see SimplePie::set_feed_url() + */ + function set_raw_data($data) + { + $this->raw_data = $data; + } + + /** + * Allows you to override the default timeout for fetching remote feeds. + * + * This allows you to change the maximum time the feed's server to respond + * and send the feed back. + * + * @access public + * @since 1.0 Beta 3 + * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed. + */ + function set_timeout($timeout = 10) + { + $this->timeout = (int) $timeout; + } + + /** + * Forces SimplePie to use fsockopen() instead of the preferred cURL + * functions. + * + * @access public + * @since 1.0 Beta 3 + * @param bool $enable Force fsockopen() to be used + */ + function force_fsockopen($enable = false) + { + $this->force_fsockopen = (bool) $enable; + } + + /** + * Outputs the raw XML content of the feed, after it has gone through + * SimplePie's filters. + * + * Used only for debugging, this function will output the XML content as + * text/xml. When SimplePie reads in a feed, it does a bit of cleaning up + * before trying to parse it. Many parts of the feed are re-written in + * memory, and in the end, you have a parsable feed. XML dump shows you the + * actual XML that SimplePie tries to parse, which may or may not be very + * different from the original feed. + * + * @access public + * @since 1.0 Preview Release + * @param bool $enable Enable XML dump + */ + function enable_xml_dump($enable = false) + { + $this->xml_dump = (bool) $enable; + } + + /** + * Enables/disables caching in SimplePie. + * + * This option allows you to disable caching all-together in SimplePie. + * However, disabling the cache can lead to longer load times. + * + * @access public + * @since 1.0 Preview Release + * @param bool $enable Enable caching + */ + function enable_cache($enable = true) + { + $this->cache = (bool) $enable; + } + + /** + * Set the length of time (in seconds) that the contents of a feed + * will be cached. + * + * @access public + * @param int $seconds The feed content cache duration. + */ + function set_cache_duration($seconds = 3600) + { + $this->cache_duration = (int) $seconds; + } + + /** + * Set the length of time (in seconds) that the autodiscovered feed + * URL will be cached. + * + * @access public + * @param int $seconds The autodiscovered feed URL cache duration. + */ + function set_autodiscovery_cache_duration($seconds = 604800) + { + $this->autodiscovery_cache_duration = (int) $seconds; + } + + /** + * Set the file system location where the cached files should be stored. + * + * @access public + * @param string $location The file system location. + */ + function set_cache_location($location = './cache') + { + $this->cache_location = (string) $location; + } + + /** + * Determines whether feed items should be sorted into reverse chronological order. + * + * @access public + * @param bool $enable Sort as reverse chronological order. + */ + function enable_order_by_date($enable = true) + { + $this->order_by_date = (bool) $enable; + } + + /** + * Allows you to override the character encoding reported by the feed. + * + * @access public + * @param string $encoding Character encoding. + */ + function set_input_encoding($encoding = false) + { + if ($encoding) + { + $this->input_encoding = (string) $encoding; + } + else + { + $this->input_encoding = false; + } + } + + /** + * Set how much feed autodiscovery to do + * + * @access public + * @see SIMPLEPIE_LOCATOR_NONE + * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY + * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION + * @see SIMPLEPIE_LOCATOR_LOCAL_BODY + * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION + * @see SIMPLEPIE_LOCATOR_REMOTE_BODY + * @see SIMPLEPIE_LOCATOR_ALL + * @param int $level Feed Autodiscovery Level (level can be a + * combination of the above constants, see bitwise OR operator) + */ + function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL) + { + $this->autodiscovery = (int) $level; + } + + /** + * Allows you to change which class SimplePie uses for caching. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_cache_class($class = 'SimplePie_Cache') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Cache')) + { + $this->cache_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for auto-discovery. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_locator_class($class = 'SimplePie_Locator') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Locator')) + { + $this->locator_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for XML parsing. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_parser_class($class = 'SimplePie_Parser') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Parser')) + { + $this->parser_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for remote file fetching. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_file_class($class = 'SimplePie_File') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_File')) + { + $this->file_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for data sanitization. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_sanitize_class($class = 'SimplePie_Sanitize') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Sanitize')) + { + $this->sanitize =& new $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for handling feed items. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_item_class($class = 'SimplePie_Item') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Item')) + { + $this->item_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for handling author data. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_author_class($class = 'SimplePie_Author') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Author')) + { + $this->author_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for handling category data. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_category_class($class = 'SimplePie_Category') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Category')) + { + $this->category_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for feed enclosures. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_enclosure_class($class = 'SimplePie_Enclosure') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Enclosure')) + { + $this->enclosure_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for captions + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_caption_class($class = 'SimplePie_Caption') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Caption')) + { + $this->caption_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_copyright_class($class = 'SimplePie_Copyright') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Copyright')) + { + $this->copyright_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_credit_class($class = 'SimplePie_Credit') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Credit')) + { + $this->credit_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_rating_class($class = 'SimplePie_Rating') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Rating')) + { + $this->rating_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_restriction_class($class = 'SimplePie_Restriction') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Restriction')) + { + $this->restriction_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for content-type sniffing. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_content_type_sniffer_class($class = 'SimplePie_Content_Type_Sniffer') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Content_Type_Sniffer')) + { + $this->content_type_sniffer_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses item sources. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_source_class($class = 'SimplePie_Source') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Source')) + { + $this->source_class = $class; + return true; + } + return false; + } + + /** + * Allows you to override the default user agent string. + * + * @access public + * @param string $ua New user agent string. + */ + function set_useragent($ua = SIMPLEPIE_USERAGENT) + { + $this->useragent = (string) $ua; + } + + /** + * Set callback function to create cache filename with + * + * @access public + * @param mixed $function Callback function + */ + function set_cache_name_function($function = 'md5') + { + if (is_callable($function)) + { + $this->cache_name_function = $function; + } + } + + /** + * Set javascript query string parameter + * + * @access public + * @param mixed $get Javascript query string parameter + */ + function set_javascript($get = 'js') + { + if ($get) + { + $this->javascript = (string) $get; + } + else + { + $this->javascript = false; + } + } + + /** + * Set options to make SP as fast as possible. Forgoes a + * substantial amount of data sanitization in favor of speed. + * + * @access public + * @param bool $set Whether to set them or not + */ + function set_stupidly_fast($set = false) + { + if ($set) + { + $this->enable_order_by_date(false); + $this->remove_div(false); + $this->strip_comments(false); + $this->strip_htmltags(false); + $this->strip_attributes(false); + $this->set_image_handler(false); + } + } + + /** + * Set maximum number of feeds to check with autodiscovery + * + * @access public + * @param int $max Maximum number of feeds to check + */ + function set_max_checked_feeds($max = 10) + { + $this->max_checked_feeds = (int) $max; + } + + function remove_div($enable = true) + { + $this->sanitize->remove_div($enable); + } + + function strip_htmltags($tags = '', $encode = null) + { + if ($tags === '') + { + $tags = $this->strip_htmltags; + } + $this->sanitize->strip_htmltags($tags); + if ($encode !== null) + { + $this->sanitize->encode_instead_of_strip($tags); + } + } + + function encode_instead_of_strip($enable = true) + { + $this->sanitize->encode_instead_of_strip($enable); + } + + function strip_attributes($attribs = '') + { + if ($attribs === '') + { + $attribs = $this->strip_attributes; + } + $this->sanitize->strip_attributes($attribs); + } + + function set_output_encoding($encoding = 'UTF-8') + { + $this->sanitize->set_output_encoding($encoding); + } + + function strip_comments($strip = false) + { + $this->sanitize->strip_comments($strip); + } + + /** + * Set element/attribute key/value pairs of HTML attributes + * containing URLs that need to be resolved relative to the feed + * + * @access public + * @since 1.0 + * @param array $element_attribute Element/attribute key/value pairs + */ + function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite')) + { + $this->sanitize->set_url_replacements($element_attribute); + } + + /** + * Set the handler to enable the display of cached favicons. + * + * @access public + * @param str $page Web-accessible path to the handler_favicon.php file. + * @param str $qs The query string that the value should be passed to. + */ + function set_favicon_handler($page = false, $qs = 'i') + { + if ($page != false) + { + $this->favicon_handler = $page . '?' . $qs . '='; + } + else + { + $this->favicon_handler = ''; + } + } + + /** + * Set the handler to enable the display of cached images. + * + * @access public + * @param str $page Web-accessible path to the handler_image.php file. + * @param str $qs The query string that the value should be passed to. + */ + function set_image_handler($page = false, $qs = 'i') + { + if ($page != false) + { + $this->sanitize->set_image_handler($page . '?' . $qs . '='); + } + else + { + $this->image_handler = ''; + } + } + + /** + * Set the limit for items returned per-feed with multifeeds. + * + * @access public + * @param integer $limit The maximum number of items to return. + */ + function set_item_limit($limit = 0) + { + $this->item_limit = (int) $limit; + } + + function init() + { + if ((function_exists('version_compare') && version_compare(PHP_VERSION, '4.3.0', '<')) || !extension_loaded('xml') || !extension_loaded('pcre')) + { + return false; + } + if (isset($_GET[$this->javascript])) + { + if (function_exists('ob_gzhandler')) + { + ob_start('ob_gzhandler'); + } + header('Content-type: text/javascript; charset: UTF-8'); + header('Cache-Control: must-revalidate'); + header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days + ?> +function embed_odeo(link) { + document.writeln(''); +} + +function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) { + if (placeholder != '') { + document.writeln(''); + } + else { + document.writeln(''); + } +} + +function embed_flash(bgcolor, width, height, link, loop, type) { + document.writeln(''); +} + +function embed_flv(width, height, link, placeholder, loop, player) { + document.writeln(''); +} + +function embed_wmedia(width, height, link) { + document.writeln(''); +} + sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->cache_class); + $this->sanitize->pass_file_data($this->file_class, $this->timeout, $this->useragent, $this->force_fsockopen); + + if ($this->feed_url !== null || $this->raw_data !== null) + { + $this->data = array(); + $this->multifeed_objects = array(); + $cache = false; + + if ($this->feed_url !== null) + { + $parsed_feed_url = SimplePie_Misc::parse_url($this->feed_url); + // Decide whether to enable caching + if ($this->cache && $parsed_feed_url['scheme'] !== '') + { + $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc'); + } + // If it's enabled and we don't want an XML dump, use the cache + if ($cache && !$this->xml_dump) + { + // Load the Cache + $this->data = $cache->load(); + if (!empty($this->data)) + { + // If the cache is for an outdated build of SimplePie + if (!isset($this->data['build']) || $this->data['build'] != SIMPLEPIE_BUILD) + { + $cache->unlink(); + $this->data = array(); + } + // If we've hit a collision just rerun it with caching disabled + elseif (isset($this->data['url']) && $this->data['url'] != $this->feed_url) + { + $cache = false; + $this->data = array(); + } + // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL. + elseif (isset($this->data['feed_url'])) + { + // If the autodiscovery cache is still valid use it. + if ($cache->mtime() + $this->autodiscovery_cache_duration > time()) + { + // Do not need to do feed autodiscovery yet. + if ($this->data['feed_url'] == $this->data['url']) + { + $cache->unlink(); + $this->data = array(); + } + else + { + $this->set_feed_url($this->data['feed_url']); + return $this->init(); + } + } + } + // Check if the cache has been updated + elseif ($cache->mtime() + $this->cache_duration < time()) + { + // If we have last-modified and/or etag set + if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag'])) + { + $headers = array(); + if (isset($this->data['headers']['last-modified'])) + { + $headers['if-modified-since'] = $this->data['headers']['last-modified']; + } + if (isset($this->data['headers']['etag'])) + { + $headers['if-none-match'] = '"' . $this->data['headers']['etag'] . '"'; + } + $file =& new $this->file_class($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen); + if ($file->success) + { + if ($file->status_code == 304) + { + $cache->touch(); + return true; + } + else + { + $headers = $file->headers; + } + } + else + { + unset($file); + } + } + } + // If the cache is still valid, just return true + else + { + return true; + } + } + // If the cache is empty, delete it + else + { + $cache->unlink(); + $this->data = array(); + } + } + // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it. + if (!isset($file)) + { + if (is_a($this->file, 'SimplePie_File') && $this->file->url == $this->feed_url) + { + $file =& $this->file; + } + else + { + $file =& new $this->file_class($this->feed_url, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen); + } + } + // If the file connection has an error, set SimplePie::error to that and quit + if (!$file->success) + { + $this->error = $file->error; + if (!empty($this->data)) + { + return true; + } + else + { + return false; + } + } + + if (!$this->force_feed) + { + // Check if the supplied URL is a feed, if it isn't, look for it. + $locate =& new $this->locator_class($file, $this->timeout, $this->useragent, $this->file_class, $this->max_checked_feeds, $this->content_type_sniffer_class); + if (!$locate->is_feed($file)) + { + // We need to unset this so that if SimplePie::set_file() has been called that object is untouched + unset($file); + if ($file = $locate->find($this->autodiscovery)) + { + if ($cache) + { + $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD); + if (!$cache->save($this)) + { + trigger_error("$cache->name is not writeable", E_USER_WARNING); + } + $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc'); + } + $this->feed_url = $file->url; + } + else + { + $this->error = "A feed could not be found at $this->feed_url"; + SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); + return false; + } + } + $locate = null; + } + + $headers = $file->headers; + $data = $file->body; + $sniffer = new $this->content_type_sniffer_class($file); + $sniffed = $sniffer->get_type(); + } + else + { + $data = $this->raw_data; + } + + // Set up array of possible encodings + $encodings = array(); + + // First check to see if input has been overridden. + if ($this->input_encoding !== false) + { + $encodings[] = $this->input_encoding; + } + + $application_types = array('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity'); + $text_types = array('text/xml', 'text/xml-external-parsed-entity'); + + // RFC 3023 (only applies to sniffed content) + if (isset($sniffed)) + { + if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml') + { + if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) + { + $encodings[] = strtoupper($charset[1]); + } + $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data)); + $encodings[] = 'UTF-8'; + } + elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml') + { + if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) + { + $encodings[] = $charset[1]; + } + $encodings[] = 'US-ASCII'; + } + // Text MIME-type default + elseif (substr($sniffed, 0, 5) === 'text/') + { + $encodings[] = 'US-ASCII'; + } + } + + // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1 + $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data)); + $encodings[] = 'UTF-8'; + $encodings[] = 'ISO-8859-1'; + + // There's no point in trying an encoding twice + $encodings = array_unique($encodings); + + // If we want the XML, just output that with the most likely encoding and quit + if ($this->xml_dump) + { + header('Content-type: text/xml; charset=' . $encodings[0]); + echo $data; + exit; + } + + // Loop through each possible encoding, till we return something, or run out of possibilities + foreach ($encodings as $encoding) + { + // Change the encoding to UTF-8 (as we always use UTF-8 internally) + if ($utf8_data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8')) + { + // Create new parser + $parser =& new $this->parser_class(); + + // If it's parsed fine + if ($parser->parse($utf8_data, 'UTF-8')) + { + $this->data = $parser->get_data(); + if ($this->get_type() & ~SIMPLEPIE_TYPE_NONE) + { + if (isset($headers)) + { + $this->data['headers'] = $headers; + } + $this->data['build'] = SIMPLEPIE_BUILD; + + // Cache the file if caching is enabled + if ($cache && !$cache->save($this)) + { + trigger_error("$cache->name is not writeable", E_USER_WARNING); + } + return true; + } + else + { + $this->error = "A feed could not be found at $this->feed_url"; + SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); + return false; + } + } + } + } + // We have an error, just set SimplePie::error to it and quit + $this->error = sprintf('XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column()); + SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); + return false; + } + elseif (!empty($this->multifeed_url)) + { + $i = 0; + $success = 0; + $this->multifeed_objects = array(); + foreach ($this->multifeed_url as $url) + { + if (SIMPLEPIE_PHP5) + { + // This keyword needs to defy coding standards for PHP4 compatibility + $this->multifeed_objects[$i] = clone($this); + } + else + { + $this->multifeed_objects[$i] = $this; + } + $this->multifeed_objects[$i]->set_feed_url($url); + $success |= $this->multifeed_objects[$i]->init(); + $i++; + } + return (bool) $success; + } + else + { + return false; + } + } + + /** + * Return the error message for the occurred error + * + * @access public + * @return string Error message + */ + function error() + { + return $this->error; + } + + function get_encoding() + { + return $this->sanitize->output_encoding; + } + + function handle_content_type($mime = 'text/html') + { + if (!headers_sent()) + { + $header = "Content-type: $mime;"; + if ($this->get_encoding()) + { + $header .= ' charset=' . $this->get_encoding(); + } + else + { + $header .= ' charset=UTF-8'; + } + header($header); + } + } + + function get_type() + { + if (!isset($this->data['type'])) + { + $this->data['type'] = SIMPLEPIE_TYPE_ALL; + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_10; + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_03; + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'])) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['channel']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['image']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['textinput'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_10; + } + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['channel']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['image']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['textinput'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090; + } + } + elseif (isset($this->data['child']['']['rss'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL; + if (isset($this->data['child']['']['rss'][0]['attribs']['']['version'])) + { + switch (trim($this->data['child']['']['rss'][0]['attribs']['']['version'])) + { + case '0.91': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091; + if (isset($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data'])) + { + switch (trim($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data'])) + { + case '0': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE; + break; + + case '24': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_USERLAND; + break; + } + } + break; + + case '0.92': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_092; + break; + + case '0.93': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_093; + break; + + case '0.94': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_094; + break; + + case '2.0': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_20; + break; + } + } + } + else + { + $this->data['type'] = SIMPLEPIE_TYPE_NONE; + } + } + return $this->data['type']; + } + + /** + * Returns the URL for the favicon of the feed's website. + * + * @todo Cache atom:icon + * @access public + * @since 1.0 + */ + function get_favicon() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif (($url = $this->get_link()) !== null && preg_match('/^http(s)?:\/\//i', $url)) + { + $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $url); + + if ($this->cache && $this->favicon_handler) + { + $favicon_filename = call_user_func($this->cache_name_function, $favicon); + $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $favicon_filename, 'spi'); + + if ($cache->load()) + { + return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + $file =& new $this->file_class($favicon, $this->timeout / 10, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen); + + if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300)) && strlen($file->body) > 0) + { + $sniffer = new $this->content_type_sniffer_class($file); + if (substr($sniffer->get_type(), 0, 6) === 'image/') + { + if ($cache->save(array('headers' => $file->headers, 'body' => $file->body))) + { + return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + trigger_error("$cache->name is not writeable", E_USER_WARNING); + return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI); + } + } + } + } + } + else + { + return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI); + } + } + return false; + } + + /** + * @todo If we have a perm redirect we should return the new URL + * @todo When we make the above change, let's support as well + * @todo Also, |atom:link|@rel=self + */ + function subscribe_url() + { + if ($this->feed_url !== null) + { + return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + return null; + } + } + + function subscribe_feed() + { + if ($this->feed_url !== null) + { + return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + return null; + } + } + + function subscribe_outlook() + { + if ($this->feed_url !== null) + { + return 'outlook' . $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + return null; + } + } + + function subscribe_podcast() + { + if ($this->feed_url !== null) + { + return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 3), SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + return null; + } + } + + function subscribe_itunes() + { + if ($this->feed_url !== null) + { + return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 4), SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + return null; + } + } + + /** + * Creates the subscribe_* methods' return data + * + * @access private + * @param string $feed_url String to prefix to the feed URL + * @param string $site_url String to prefix to the site URL (and + * suffix to the feed URL) + * @return mixed URL if feed exists, false otherwise + */ + function subscribe_service($feed_url, $site_url = null) + { + if ($this->subscribe_url()) + { + $return = $this->sanitize($feed_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->feed_url); + if ($site_url !== null && $this->get_link() !== null) + { + $return .= $this->sanitize($site_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_link()); + } + return $return; + } + else + { + return null; + } + } + + function subscribe_aol() + { + return $this->subscribe_service('http://feeds.my.aol.com/add.jsp?url='); + } + + function subscribe_bloglines() + { + return urldecode($this->subscribe_service('http://www.bloglines.com/sub/')); + } + + function subscribe_eskobo() + { + return $this->subscribe_service('http://www.eskobo.com/?AddToMyPage='); + } + + function subscribe_feedfeeds() + { + return $this->subscribe_service('http://www.feedfeeds.com/add?feed='); + } + + function subscribe_feedster() + { + return $this->subscribe_service('http://www.feedster.com/myfeedster.php?action=addrss&confirm=no&rssurl='); + } + + function subscribe_google() + { + return $this->subscribe_service('http://fusion.google.com/add?feedurl='); + } + + function subscribe_gritwire() + { + return $this->subscribe_service('http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl='); + } + + function subscribe_msn() + { + return $this->subscribe_service('http://my.msn.com/addtomymsn.armx?id=rss&ut=', '&ru='); + } + + function subscribe_netvibes() + { + return $this->subscribe_service('http://www.netvibes.com/subscribe.php?url='); + } + + function subscribe_newsburst() + { + return $this->subscribe_service('http://www.newsburst.com/Source/?add='); + } + + function subscribe_newsgator() + { + return $this->subscribe_service('http://www.newsgator.com/ngs/subscriber/subext.aspx?url='); + } + + function subscribe_odeo() + { + return $this->subscribe_service('http://www.odeo.com/listen/subscribe?feed='); + } + + function subscribe_podnova() + { + return $this->subscribe_service('http://www.podnova.com/index_your_podcasts.srf?action=add&url='); + } + + function subscribe_rojo() + { + return $this->subscribe_service('http://www.rojo.com/add-subscription?resource='); + } + + function subscribe_yahoo() + { + return $this->subscribe_service('http://add.my.yahoo.com/rss?url='); + } + + function get_feed_tags($namespace, $tag) + { + $type = $this->get_type(); + if ($type & SIMPLEPIE_TYPE_ATOM_10) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag])) + { + return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag]; + } + } + if ($type & SIMPLEPIE_TYPE_ATOM_03) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag])) + { + return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag]; + } + } + if ($type & SIMPLEPIE_TYPE_RSS_RDF) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag])) + { + return $this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag]; + } + } + if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) + { + if (isset($this->data['child']['']['rss'][0]['child'][$namespace][$tag])) + { + return $this->data['child']['']['rss'][0]['child'][$namespace][$tag]; + } + } + return null; + } + + function get_channel_tags($namespace, $tag) + { + $type = $this->get_type(); + if ($type & SIMPLEPIE_TYPE_ATOM_ALL) + { + if ($return = $this->get_feed_tags($namespace, $tag)) + { + return $return; + } + } + if ($type & SIMPLEPIE_TYPE_RSS_10) + { + if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'channel')) + { + if (isset($channel[0]['child'][$namespace][$tag])) + { + return $channel[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_090) + { + if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'channel')) + { + if (isset($channel[0]['child'][$namespace][$tag])) + { + return $channel[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) + { + if ($channel = $this->get_feed_tags('', 'channel')) + { + if (isset($channel[0]['child'][$namespace][$tag])) + { + return $channel[0]['child'][$namespace][$tag]; + } + } + } + return null; + } + + function get_image_tags($namespace, $tag) + { + $type = $this->get_type(); + if ($type & SIMPLEPIE_TYPE_RSS_10) + { + if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'image')) + { + if (isset($image[0]['child'][$namespace][$tag])) + { + return $image[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_090) + { + if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'image')) + { + if (isset($image[0]['child'][$namespace][$tag])) + { + return $image[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) + { + if ($image = $this->get_channel_tags('', 'image')) + { + if (isset($image[0]['child'][$namespace][$tag])) + { + return $image[0]['child'][$namespace][$tag]; + } + } + } + return null; + } + + function get_base($element = array()) + { + if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base'])) + { + return $element['xml_base']; + } + elseif ($this->get_link() !== null) + { + return $this->get_link(); + } + else + { + return $this->subscribe_url(); + } + } + + function sanitize($data, $type, $base = '') + { + return $this->sanitize->sanitize($data, $type, $base); + } + + function get_title() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags('', 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + function get_categories() + { + $categories = array(); + + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['attribs']['']['term'])) + { + $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->category_class($term, $scheme, $label); + } + foreach ((array) $this->get_channel_tags('', 'category') as $category) + { + $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) + { + $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) + { + $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($categories)) + { + return SimplePie_Misc::array_unique($categories); + } + else + { + return null; + } + } + + function get_author($key = 0) + { + $authors = $this->get_authors(); + if (isset($authors[$key])) + { + return $authors[$key]; + } + else + { + return null; + } + } + + function get_authors() + { + $authors = array(); + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) + { + $name = null; + $uri = null; + $email = null; + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $authors[] =& new $this->author_class($name, $uri, $email); + } + } + if ($author = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) + { + $name = null; + $url = null; + $email = null; + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $authors[] =& new $this->author_class($name, $url, $email); + } + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) + { + $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) + { + $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) + { + $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($authors)) + { + return SimplePie_Misc::array_unique($authors); + } + else + { + return null; + } + } + + function get_contributor($key = 0) + { + $contributors = $this->get_contributors(); + if (isset($contributors[$key])) + { + return $contributors[$key]; + } + else + { + return null; + } + } + + function get_contributors() + { + $contributors = array(); + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) + { + $name = null; + $uri = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $contributors[] =& new $this->author_class($name, $uri, $email); + } + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) + { + $name = null; + $url = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $contributors[] =& new $this->author_class($name, $url, $email); + } + } + + if (!empty($contributors)) + { + return SimplePie_Misc::array_unique($contributors); + } + else + { + return null; + } + } + + function get_link($key = 0, $rel = 'alternate') + { + $links = $this->get_links($rel); + if (isset($links[$key])) + { + return $links[$key]; + } + else + { + return null; + } + } + + /** + * Added for parity between the parent-level and the item/entry-level. + */ + function get_permalink() + { + return $this->get_link(0); + } + + function get_links($rel = 'alternate') + { + if (!isset($this->data['links'])) + { + $this->data['links'] = array(); + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + } + } + } + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + + } + } + } + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_channel_tags('', 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + + $keys = array_keys($this->data['links']); + foreach ($keys as $key) + { + if (SimplePie_Misc::is_isegment_nz_nc($key)) + { + if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); + $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; + } + else + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; + } + } + elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) + { + $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; + } + $this->data['links'][$key] = array_unique($this->data['links'][$key]); + } + } + + if (isset($this->data['links'][$rel])) + { + return $this->data['links'][$rel]; + } + else + { + return null; + } + } + + function get_description() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags('', 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + else + { + return null; + } + } + + function get_copyright() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags('', 'copyright')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_language() + { + if ($return = $this->get_channel_tags('', 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'])) + { + return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'])) + { + return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'])) + { + return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['headers']['content-language'])) + { + return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_latitude() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[1]; + } + else + { + return null; + } + } + + function get_longitude() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) + { + return (float) $return[0]['data']; + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[2]; + } + else + { + return null; + } + } + + function get_image_title() + { + if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags('', 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_image_url() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) + { + return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'url')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'url')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags('', 'url')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + else + { + return null; + } + } + + function get_image_link() + { + if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags('', 'link')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + else + { + return null; + } + } + + function get_image_width() + { + if ($return = $this->get_image_tags('', 'width')) + { + return round($return[0]['data']); + } + elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url')) + { + return 88.0; + } + else + { + return null; + } + } + + function get_image_height() + { + if ($return = $this->get_image_tags('', 'height')) + { + return round($return[0]['data']); + } + elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url')) + { + return 31.0; + } + else + { + return null; + } + } + + function get_item_quantity($max = 0) + { + $qty = count($this->get_items()); + if ($max == 0) + { + return $qty; + } + else + { + return ($qty > $max) ? $max : $qty; + } + } + + function get_item($key = 0) + { + $items = $this->get_items(); + if (isset($items[$key])) + { + return $items[$key]; + } + else + { + return null; + } + } + + function get_items($start = 0, $end = 0) + { + if (!empty($this->multifeed_objects)) + { + return SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit); + } + elseif (!isset($this->data['items'])) + { + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] =& new $this->item_class($this, $items[$key]); + } + } + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] =& new $this->item_class($this, $items[$key]); + } + } + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] =& new $this->item_class($this, $items[$key]); + } + } + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] =& new $this->item_class($this, $items[$key]); + } + } + if ($items = $this->get_channel_tags('', 'item')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] =& new $this->item_class($this, $items[$key]); + } + } + } + + if (!empty($this->data['items'])) + { + // If we want to order it by date, check if all items have a date, and then sort it + if ($this->order_by_date) + { + if (!isset($this->data['ordered_items'])) + { + $do_sort = true; + foreach ($this->data['items'] as $item) + { + if (!$item->get_date('U')) + { + $do_sort = false; + break; + } + } + $item = null; + $this->data['ordered_items'] = $this->data['items']; + if ($do_sort) + { + usort($this->data['ordered_items'], array(&$this, 'sort_items')); + } + } + $items = $this->data['ordered_items']; + } + else + { + $items = $this->data['items']; + } + + // Slice the data as desired + if ($end == 0) + { + return array_slice($items, $start); + } + else + { + return array_slice($items, $start, $end); + } + } + else + { + return array(); + } + } + + function sort_items($a, $b) + { + return $a->get_date('U') <= $b->get_date('U'); + } + + function merge_items($urls, $start = 0, $end = 0, $limit = 0) + { + if (is_array($urls) && sizeof($urls) > 0) + { + $items = array(); + foreach ($urls as $arg) + { + if (is_a($arg, 'SimplePie')) + { + $items = array_merge($items, $arg->get_items(0, $limit)); + } + else + { + trigger_error('Arguments must be SimplePie objects', E_USER_WARNING); + } + } + + $do_sort = true; + foreach ($items as $item) + { + if (!$item->get_date('U')) + { + $do_sort = false; + break; + } + } + $item = null; + if ($do_sort) + { + usort($items, array('SimplePie', 'sort_items')); + } + + if ($end == 0) + { + return array_slice($items, $start); + } + else + { + return array_slice($items, $start, $end); + } + } + else + { + trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING); + return array(); + } + } +} + +class SimplePie_Item +{ + var $feed; + var $data = array(); + + function SimplePie_Item($feed, $data) + { + $this->feed = $feed; + $this->data = $data; + } + + function __toString() + { + return md5(serialize($this->data)); + } + + /** + * Remove items that link back to this before destroying this object + */ + function __destruct() + { + unset($this->feed); + } + + function get_item_tags($namespace, $tag) + { + if (isset($this->data['child'][$namespace][$tag])) + { + return $this->data['child'][$namespace][$tag]; + } + else + { + return null; + } + } + + function get_base($element = array()) + { + return $this->feed->get_base($element); + } + + function sanitize($data, $type, $base = '') + { + return $this->feed->sanitize($data, $type, $base); + } + + function get_feed() + { + return $this->feed; + } + + function get_id($hash = false) + { + if (!$hash) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags('', 'guid')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (($return = $this->get_permalink()) !== null) + { + return $return; + } + elseif (($return = $this->get_title()) !== null) + { + return $return; + } + } + if ($this->get_permalink() !== null || $this->get_title() !== null) + { + return md5($this->get_permalink() . $this->get_title()); + } + else + { + return md5(serialize($this->data)); + } + } + + function get_title() + { + if (!isset($this->data['title'])) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags('', 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $this->data['title'] = null; + } + } + return $this->data['title']; + } + + function get_description($description_only = false) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags('', 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (!$description_only) + { + return $this->get_content(true); + } + else + { + return null; + } + } + + function get_content($content_only = false) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_content_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif (!$content_only) + { + return $this->get_description(true); + } + else + { + return null; + } + } + + function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + function get_categories() + { + $categories = array(); + + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['attribs']['']['term'])) + { + $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->feed->category_class($term, $scheme, $label); + } + foreach ((array) $this->get_item_tags('', 'category') as $category) + { + $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) + { + $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) + { + $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($categories)) + { + return SimplePie_Misc::array_unique($categories); + } + else + { + return null; + } + } + + function get_author($key = 0) + { + $authors = $this->get_authors(); + if (isset($authors[$key])) + { + return $authors[$key]; + } + else + { + return null; + } + } + + function get_contributor($key = 0) + { + $contributors = $this->get_contributors(); + if (isset($contributors[$key])) + { + return $contributors[$key]; + } + else + { + return null; + } + } + + function get_contributors() + { + $contributors = array(); + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) + { + $name = null; + $uri = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $contributors[] =& new $this->feed->author_class($name, $uri, $email); + } + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) + { + $name = null; + $url = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $contributors[] =& new $this->feed->author_class($name, $url, $email); + } + } + + if (!empty($contributors)) + { + return SimplePie_Misc::array_unique($contributors); + } + else + { + return null; + } + } + + /** + * @todo Atom inheritance (item author, source author, feed author) + */ + function get_authors() + { + $authors = array(); + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) + { + $name = null; + $uri = null; + $email = null; + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $authors[] =& new $this->feed->author_class($name, $uri, $email); + } + } + if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) + { + $name = null; + $url = null; + $email = null; + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $authors[] =& new $this->feed->author_class($name, $url, $email); + } + } + if ($author = $this->get_item_tags('', 'author')) + { + $authors[] =& new $this->feed->author_class(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) + { + $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) + { + $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) + { + $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($authors)) + { + return SimplePie_Misc::array_unique($authors); + } + elseif (($source = $this->get_source()) && ($authors = $source->get_authors())) + { + return $authors; + } + elseif ($authors = $this->feed->get_authors()) + { + return $authors; + } + else + { + return null; + } + } + + function get_copyright() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_date($date_format = 'j F Y, g:i a') + { + if (!isset($this->data['date'])) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags('', 'pubDate')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + + if (!empty($this->data['date']['raw'])) + { + $parser = SimplePie_Parse_Date::get(); + $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']); + } + else + { + $this->data['date'] = null; + } + } + if ($this->data['date']) + { + $date_format = (string) $date_format; + switch ($date_format) + { + case '': + return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT); + + case 'U': + return $this->data['date']['parsed']; + + default: + return date($date_format, $this->data['date']['parsed']); + } + } + else + { + return null; + } + } + + function get_local_date($date_format = '%c') + { + if (!$date_format) + { + return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (($date = $this->get_date('U')) !== null) + { + return strftime($date_format, $date); + } + else + { + return null; + } + } + + function get_permalink() + { + $link = $this->get_link(); + $enclosure = $this->get_enclosure(0); + if ($link !== null) + { + return $link; + } + elseif ($enclosure !== null) + { + return $enclosure->get_link(); + } + else + { + return null; + } + } + + function get_link($key = 0, $rel = 'alternate') + { + $links = $this->get_links($rel); + if ($links[$key] !== null) + { + return $links[$key]; + } + else + { + return null; + } + } + + function get_links($rel = 'alternate') + { + if (!isset($this->data['links'])) + { + $this->data['links'] = array(); + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + + } + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + } + } + if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_item_tags('', 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_item_tags('', 'guid')) + { + if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) == 'true') + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + } + + $keys = array_keys($this->data['links']); + foreach ($keys as $key) + { + if (SimplePie_Misc::is_isegment_nz_nc($key)) + { + if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); + $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; + } + else + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; + } + } + elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) + { + $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; + } + $this->data['links'][$key] = array_unique($this->data['links'][$key]); + } + } + if (isset($this->data['links'][$rel])) + { + return $this->data['links'][$rel]; + } + else + { + return null; + } + } + + /** + * @todo Add ability to prefer one type of content over another (in a media group). + */ + function get_enclosure($key = 0, $prefer = null) + { + $enclosures = $this->get_enclosures(); + if (isset($enclosures[$key])) + { + return $enclosures[$key]; + } + else + { + return null; + } + } + + /** + * Grabs all available enclosures (podcasts, etc.) + * + * Supports the RSS tag, as well as Media RSS and iTunes RSS. + * + * At this point, we're pretty much assuming that all enclosures for an item are the same content. Anything else is too complicated to properly support. + * + * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4). + * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists). + */ + function get_enclosures() + { + if (!isset($this->data['enclosures'])) + { + $this->data['enclosures'] = array(); + + // Elements + $captions_parent = null; + $categories_parent = null; + $copyrights_parent = null; + $credits_parent = null; + $description_parent = null; + $duration_parent = null; + $hashes_parent = null; + $keywords_parent = null; + $player_parent = null; + $ratings_parent = null; + $restrictions_parent = null; + $thumbnails_parent = null; + $title_parent = null; + + // Let's do the channel and item-level ones first, and just re-use them if we need to. + $parent = $this->get_feed(); + + // CAPTIONS + if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) + { + foreach ($captions as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + } + } + elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) + { + foreach ($captions as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + } + } + if (is_array($captions_parent)) + { + $captions_parent = array_values(SimplePie_Misc::array_unique($captions_parent)); + } + + // CATEGORIES + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label); + } + foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label); + } + foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category) + { + $term = null; + $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd'; + $label = null; + if (isset($category['attribs']['']['text'])) + { + $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label); + + if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'])) + { + foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory) + { + if (isset($subcategory['attribs']['']['text'])) + { + $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label); + } + } + } + if (is_array($categories_parent)) + { + $categories_parent = array_values(SimplePie_Misc::array_unique($categories_parent)); + } + + // COPYRIGHT + if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) + { + $copyright_url = null; + $copyright_label = null; + if (isset($copyright[0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($copyright[0]['data'])) + { + $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label); + } + elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) + { + $copyright_url = null; + $copyright_label = null; + if (isset($copyright[0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($copyright[0]['data'])) + { + $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label); + } + + // CREDITS + if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) + { + foreach ($credits as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); + } + } + elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) + { + foreach ($credits as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); + } + } + if (is_array($credits_parent)) + { + $credits_parent = array_values(SimplePie_Misc::array_unique($credits_parent)); + } + + // DESCRIPTION + if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) + { + if (isset($description_parent[0]['data'])) + { + $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) + { + if (isset($description_parent[0]['data'])) + { + $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + + // DURATION + if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration')) + { + $seconds = null; + $minutes = null; + $hours = null; + if (isset($duration_parent[0]['data'])) + { + $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + if (sizeof($temp) > 0) + { + (int) $seconds = array_pop($temp); + } + if (sizeof($temp) > 0) + { + (int) $minutes = array_pop($temp); + $seconds += $minutes * 60; + } + if (sizeof($temp) > 0) + { + (int) $hours = array_pop($temp); + $seconds += $hours * 3600; + } + unset($temp); + $duration_parent = $seconds; + } + } + + // HASHES + if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) + { + foreach ($hashes_iterator as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes_parent[] = $algo.':'.$value; + } + } + elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) + { + foreach ($hashes_iterator as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes_parent[] = $algo.':'.$value; + } + } + if (is_array($hashes_parent)) + { + $hashes_parent = array_values(SimplePie_Misc::array_unique($hashes_parent)); + } + + // KEYWORDS + if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + if (is_array($keywords_parent)) + { + $keywords_parent = array_values(SimplePie_Misc::array_unique($keywords_parent)); + } + + // PLAYER + if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) + { + if (isset($player_parent[0]['attribs']['']['url'])) + { + $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) + { + if (isset($player_parent[0]['attribs']['']['url'])) + { + $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + + // RATINGS + if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) + { + foreach ($ratings as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + } + elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) + { + foreach ($ratings as $rating) + { + $rating_scheme = 'urn:itunes'; + $rating_value = null; + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + } + elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) + { + foreach ($ratings as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + } + elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) + { + foreach ($ratings as $rating) + { + $rating_scheme = 'urn:itunes'; + $rating_value = null; + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + } + if (is_array($ratings_parent)) + { + $ratings_parent = array_values(SimplePie_Misc::array_unique($ratings_parent)); + } + + // RESTRICTIONS + if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + } + elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = 'allow'; + $restriction_type = null; + $restriction_value = 'itunes'; + if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes') + { + $restriction_relationship = 'deny'; + } + $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + } + elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + } + elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = 'allow'; + $restriction_type = null; + $restriction_value = 'itunes'; + if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes') + { + $restriction_relationship = 'deny'; + } + $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + } + if (is_array($restrictions_parent)) + { + $restrictions_parent = array_values(SimplePie_Misc::array_unique($restrictions_parent)); + } + + // THUMBNAILS + if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) + { + foreach ($thumbnails as $thumbnail) + { + if (isset($thumbnail['attribs']['']['url'])) + { + $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + } + elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) + { + foreach ($thumbnails as $thumbnail) + { + if (isset($thumbnail['attribs']['']['url'])) + { + $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + } + + // TITLES + if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) + { + if (isset($title_parent[0]['data'])) + { + $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) + { + if (isset($title_parent[0]['data'])) + { + $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + + // Clear the memory + unset($parent); + + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + // Elements + $captions = null; + $categories = null; + $copyrights = null; + $credits = null; + $description = null; + $hashes = null; + $keywords = null; + $player = null; + $ratings = null; + $restrictions = null; + $thumbnails = null; + $title = null; + + // If we have media:group tags, loop through them. + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group) + { + // If we have media:content tags, loop through them. + foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) + { + if (isset($content['attribs']['']['url'])) + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + // Elements + $captions = null; + $categories = null; + $copyrights = null; + $credits = null; + $description = null; + $hashes = null; + $keywords = null; + $player = null; + $ratings = null; + $restrictions = null; + $thumbnails = null; + $title = null; + + // Start checking the attributes of media:content + if (isset($content['attribs']['']['bitrate'])) + { + $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['channels'])) + { + $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['duration'])) + { + $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $duration = $duration_parent; + } + if (isset($content['attribs']['']['expression'])) + { + $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['framerate'])) + { + $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['height'])) + { + $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['lang'])) + { + $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['fileSize'])) + { + $length = ceil($content['attribs']['']['fileSize']); + } + if (isset($content['attribs']['']['medium'])) + { + $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['samplingrate'])) + { + $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['type'])) + { + $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['width'])) + { + $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + + // Checking the other optional media: elements. Priority: media:content, media:group, item, channel + + // CAPTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + } + if (is_array($captions)) + { + $captions = array_values(SimplePie_Misc::array_unique($captions)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + } + if (is_array($captions)) + { + $captions = array_values(SimplePie_Misc::array_unique($captions)); + } + } + else + { + $captions = $captions_parent; + } + + // CATEGORIES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) + { + foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->feed->category_class($term, $scheme, $label); + } + } + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) + { + foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->feed->category_class($term, $scheme, $label); + } + } + if (is_array($categories) && is_array($categories_parent)) + { + $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent))); + } + elseif (is_array($categories)) + { + $categories = array_values(SimplePie_Misc::array_unique($categories)); + } + elseif (is_array($categories_parent)) + { + $categories = array_values(SimplePie_Misc::array_unique($categories_parent)); + } + + // COPYRIGHTS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) + { + $copyright_url = null; + $copyright_label = null; + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + { + $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) + { + $copyright_url = null; + $copyright_label = null; + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + { + $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label); + } + else + { + $copyrights = $copyrights_parent; + } + + // CREDITS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); + } + if (is_array($credits)) + { + $credits = array_values(SimplePie_Misc::array_unique($credits)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); + } + if (is_array($credits)) + { + $credits = array_values(SimplePie_Misc::array_unique($credits)); + } + } + else + { + $credits = $credits_parent; + } + + // DESCRIPTION + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) + { + $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) + { + $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $description = $description_parent; + } + + // HASHES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes[] = $algo.':'.$value; + } + if (is_array($hashes)) + { + $hashes = array_values(SimplePie_Misc::array_unique($hashes)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes[] = $algo.':'.$value; + } + if (is_array($hashes)) + { + $hashes = array_values(SimplePie_Misc::array_unique($hashes)); + } + } + else + { + $hashes = $hashes_parent; + } + + // KEYWORDS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) + { + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) + { + $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords[] = trim($word); + } + unset($temp); + } + if (is_array($keywords)) + { + $keywords = array_values(SimplePie_Misc::array_unique($keywords)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) + { + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) + { + $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords[] = trim($word); + } + unset($temp); + } + if (is_array($keywords)) + { + $keywords = array_values(SimplePie_Misc::array_unique($keywords)); + } + } + else + { + $keywords = $keywords_parent; + } + + // PLAYER + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) + { + $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) + { + $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + $player = $player_parent; + } + + // RATINGS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + if (is_array($ratings)) + { + $ratings = array_values(SimplePie_Misc::array_unique($ratings)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + if (is_array($ratings)) + { + $ratings = array_values(SimplePie_Misc::array_unique($ratings)); + } + } + else + { + $ratings = $ratings_parent; + } + + // RESTRICTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + if (is_array($restrictions)) + { + $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + if (is_array($restrictions)) + { + $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); + } + } + else + { + $restrictions = $restrictions_parent; + } + + // THUMBNAILS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) + { + $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + if (is_array($thumbnails)) + { + $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) + { + $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + if (is_array($thumbnails)) + { + $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); + } + } + else + { + $thumbnails = $thumbnails_parent; + } + + // TITLES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) + { + $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) + { + $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $title = $title_parent; + } + + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width); + } + } + } + + // If we have standalone media:content tags, loop through them. + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'])) + { + foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) + { + if (isset($content['attribs']['']['url'])) + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + // Elements + $captions = null; + $categories = null; + $copyrights = null; + $credits = null; + $description = null; + $hashes = null; + $keywords = null; + $player = null; + $ratings = null; + $restrictions = null; + $thumbnails = null; + $title = null; + + // Start checking the attributes of media:content + if (isset($content['attribs']['']['bitrate'])) + { + $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['channels'])) + { + $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['duration'])) + { + $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $duration = $duration_parent; + } + if (isset($content['attribs']['']['expression'])) + { + $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['framerate'])) + { + $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['height'])) + { + $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['lang'])) + { + $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['fileSize'])) + { + $length = ceil($content['attribs']['']['fileSize']); + } + if (isset($content['attribs']['']['medium'])) + { + $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['samplingrate'])) + { + $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['type'])) + { + $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['width'])) + { + $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + + // Checking the other optional media: elements. Priority: media:content, media:group, item, channel + + // CAPTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + } + if (is_array($captions)) + { + $captions = array_values(SimplePie_Misc::array_unique($captions)); + } + } + else + { + $captions = $captions_parent; + } + + // CATEGORIES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) + { + foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->feed->category_class($term, $scheme, $label); + } + } + if (is_array($categories) && is_array($categories_parent)) + { + $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent))); + } + elseif (is_array($categories)) + { + $categories = array_values(SimplePie_Misc::array_unique($categories)); + } + elseif (is_array($categories_parent)) + { + $categories = array_values(SimplePie_Misc::array_unique($categories_parent)); + } + else + { + $categories = null; + } + + // COPYRIGHTS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) + { + $copyright_url = null; + $copyright_label = null; + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + { + $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label); + } + else + { + $copyrights = $copyrights_parent; + } + + // CREDITS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); + } + if (is_array($credits)) + { + $credits = array_values(SimplePie_Misc::array_unique($credits)); + } + } + else + { + $credits = $credits_parent; + } + + // DESCRIPTION + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) + { + $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $description = $description_parent; + } + + // HASHES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes[] = $algo.':'.$value; + } + if (is_array($hashes)) + { + $hashes = array_values(SimplePie_Misc::array_unique($hashes)); + } + } + else + { + $hashes = $hashes_parent; + } + + // KEYWORDS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) + { + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) + { + $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords[] = trim($word); + } + unset($temp); + } + if (is_array($keywords)) + { + $keywords = array_values(SimplePie_Misc::array_unique($keywords)); + } + } + else + { + $keywords = $keywords_parent; + } + + // PLAYER + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) + { + $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + $player = $player_parent; + } + + // RATINGS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + if (is_array($ratings)) + { + $ratings = array_values(SimplePie_Misc::array_unique($ratings)); + } + } + else + { + $ratings = $ratings_parent; + } + + // RESTRICTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + if (is_array($restrictions)) + { + $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); + } + } + else + { + $restrictions = $restrictions_parent; + } + + // THUMBNAILS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) + { + $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + if (is_array($thumbnails)) + { + $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); + } + } + else + { + $thumbnails = $thumbnails_parent; + } + + // TITLES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) + { + $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $title = $title_parent; + } + + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width); + } + } + } + + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) + { + if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure') + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + if (isset($link['attribs']['']['type'])) + { + $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($link['attribs']['']['length'])) + { + $length = ceil($link['attribs']['']['length']); + } + + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); + } + } + + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) + { + if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure') + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + if (isset($link['attribs']['']['type'])) + { + $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($link['attribs']['']['length'])) + { + $length = ceil($link['attribs']['']['length']); + } + + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); + } + } + + if ($enclosure = $this->get_item_tags('', 'enclosure')) + { + if (isset($enclosure[0]['attribs']['']['url'])) + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0])); + if (isset($enclosure[0]['attribs']['']['type'])) + { + $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($enclosure[0]['attribs']['']['length'])) + { + $length = ceil($enclosure[0]['attribs']['']['length']); + } + + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); + } + } + + if (sizeof($this->data['enclosures']) == 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width)) + { + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); + } + + $this->data['enclosures'] = array_values(SimplePie_Misc::array_unique($this->data['enclosures'])); + } + if (!empty($this->data['enclosures'])) + { + return $this->data['enclosures']; + } + else + { + return null; + } + } + + function get_latitude() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[1]; + } + else + { + return null; + } + } + + function get_longitude() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) + { + return (float) $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[2]; + } + else + { + return null; + } + } + + function get_source() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source')) + { + return new $this->feed->source_class($this, $return[0]); + } + else + { + return null; + } + } + + /** + * Creates the add_to_* methods' return data + * + * @access private + * @param string $item_url String to prefix to the item permalink + * @param string $title_url String to prefix to the item title + * (and suffix to the item permalink) + * @return mixed URL if feed exists, false otherwise + */ + function add_to_service($item_url, $title_url = null, $summary_url = null) + { + if ($this->get_permalink() !== null) + { + $return = $this->sanitize($item_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_permalink()); + if ($title_url !== null && $this->get_title() !== null) + { + $return .= $this->sanitize($title_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_title()); + } + if ($summary_url !== null && $this->get_description() !== null) + { + $return .= $this->sanitize($summary_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_description()); + } + return $return; + } + else + { + return null; + } + } + + function add_to_blinklist() + { + return $this->add_to_service('http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=&Url=', '&Title='); + } + + function add_to_blogmarks() + { + return $this->add_to_service('http://blogmarks.net/my/new.php?mini=1&simple=1&url=', '&title='); + } + + function add_to_delicious() + { + return $this->add_to_service('http://del.icio.us/post/?v=4&url=', '&title='); + } + + function add_to_digg() + { + return $this->add_to_service('http://digg.com/submit?url=', '&title=', '&bodytext='); + } + + function add_to_furl() + { + return $this->add_to_service('http://www.furl.net/storeIt.jsp?u=', '&t='); + } + + function add_to_magnolia() + { + return $this->add_to_service('http://ma.gnolia.com/bookmarklet/add?url=', '&title='); + } + + function add_to_myweb20() + { + return $this->add_to_service('http://myweb2.search.yahoo.com/myresults/bookmarklet?u=', '&t='); + } + + function add_to_newsvine() + { + return $this->add_to_service('http://www.newsvine.com/_wine/save?u=', '&h='); + } + + function add_to_reddit() + { + return $this->add_to_service('http://reddit.com/submit?url=', '&title='); + } + + function add_to_segnalo() + { + return $this->add_to_service('http://segnalo.com/post.html.php?url=', '&title='); + } + + function add_to_simpy() + { + return $this->add_to_service('http://www.simpy.com/simpy/LinkAdd.do?href=', '&title='); + } + + function add_to_spurl() + { + return $this->add_to_service('http://www.spurl.net/spurl.php?v=3&url=', '&title='); + } + + function add_to_wists() + { + return $this->add_to_service('http://wists.com/r.php?c=&r=', '&title='); + } + + function search_technorati() + { + return $this->add_to_service('http://www.technorati.com/search/'); + } +} + +class SimplePie_Source +{ + var $item; + var $data = array(); + + function SimplePie_Source($item, $data) + { + $this->item = $item; + $this->data = $data; + } + + function __toString() + { + return md5(serialize($this->data)); + } + + /** + * Remove items that link back to this before destroying this object + */ + function __destruct() + { + unset($this->item); + } + + function get_source_tags($namespace, $tag) + { + if (isset($this->data['child'][$namespace][$tag])) + { + return $this->data['child'][$namespace][$tag]; + } + else + { + return null; + } + } + + function get_base($element = array()) + { + return $this->item->get_base($element); + } + + function sanitize($data, $type, $base = '') + { + return $this->item->sanitize($data, $type, $base); + } + + function get_item() + { + return $this->item; + } + + function get_title() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags('', 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + function get_categories() + { + $categories = array(); + + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['attribs']['']['term'])) + { + $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->item->feed->category_class($term, $scheme, $label); + } + foreach ((array) $this->get_source_tags('', 'category') as $category) + { + $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) + { + $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) + { + $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($categories)) + { + return SimplePie_Misc::array_unique($categories); + } + else + { + return null; + } + } + + function get_author($key = 0) + { + $authors = $this->get_authors(); + if (isset($authors[$key])) + { + return $authors[$key]; + } + else + { + return null; + } + } + + function get_authors() + { + $authors = array(); + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) + { + $name = null; + $uri = null; + $email = null; + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $authors[] =& new $this->item->feed->author_class($name, $uri, $email); + } + } + if ($author = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) + { + $name = null; + $url = null; + $email = null; + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $authors[] =& new $this->item->feed->author_class($name, $url, $email); + } + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) + { + $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) + { + $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) + { + $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($authors)) + { + return SimplePie_Misc::array_unique($authors); + } + else + { + return null; + } + } + + function get_contributor($key = 0) + { + $contributors = $this->get_contributors(); + if (isset($contributors[$key])) + { + return $contributors[$key]; + } + else + { + return null; + } + } + + function get_contributors() + { + $contributors = array(); + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) + { + $name = null; + $uri = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $contributors[] =& new $this->item->feed->author_class($name, $uri, $email); + } + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) + { + $name = null; + $url = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $contributors[] =& new $this->item->feed->author_class($name, $url, $email); + } + } + + if (!empty($contributors)) + { + return SimplePie_Misc::array_unique($contributors); + } + else + { + return null; + } + } + + function get_link($key = 0, $rel = 'alternate') + { + $links = $this->get_links($rel); + if (isset($links[$key])) + { + return $links[$key]; + } + else + { + return null; + } + } + + /** + * Added for parity between the parent-level and the item/entry-level. + */ + function get_permalink() + { + return $this->get_link(0); + } + + function get_links($rel = 'alternate') + { + if (!isset($this->data['links'])) + { + $this->data['links'] = array(); + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + } + } + } + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + + } + } + } + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_source_tags('', 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + + $keys = array_keys($this->data['links']); + foreach ($keys as $key) + { + if (SimplePie_Misc::is_isegment_nz_nc($key)) + { + if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); + $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; + } + else + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; + } + } + elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) + { + $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; + } + $this->data['links'][$key] = array_unique($this->data['links'][$key]); + } + } + + if (isset($this->data['links'][$rel])) + { + return $this->data['links'][$rel]; + } + else + { + return null; + } + } + + function get_description() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags('', 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + else + { + return null; + } + } + + function get_copyright() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags('', 'copyright')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_language() + { + if ($return = $this->get_source_tags('', 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['xml_lang'])) + { + return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_latitude() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[1]; + } + else + { + return null; + } + } + + function get_longitude() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) + { + return (float) $return[0]['data']; + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[2]; + } + else + { + return null; + } + } + + function get_image_url() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) + { + return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + else + { + return null; + } + } +} + +class SimplePie_Author +{ + var $name; + var $link; + var $email; + + // Constructor, used to input the data + function SimplePie_Author($name = null, $link = null, $email = null) + { + $this->name = $name; + $this->link = $link; + $this->email = $email; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_name() + { + if ($this->name !== null) + { + return $this->name; + } + else + { + return null; + } + } + + function get_link() + { + if ($this->link !== null) + { + return $this->link; + } + else + { + return null; + } + } + + function get_email() + { + if ($this->email !== null) + { + return $this->email; + } + else + { + return null; + } + } +} + +class SimplePie_Category +{ + var $term; + var $scheme; + var $label; + + // Constructor, used to input the data + function SimplePie_Category($term = null, $scheme = null, $label = null) + { + $this->term = $term; + $this->scheme = $scheme; + $this->label = $label; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_term() + { + if ($this->term !== null) + { + return $this->term; + } + else + { + return null; + } + } + + function get_scheme() + { + if ($this->scheme !== null) + { + return $this->scheme; + } + else + { + return null; + } + } + + function get_label() + { + if ($this->label !== null) + { + return $this->label; + } + else + { + return $this->get_term(); + } + } +} + +class SimplePie_Enclosure +{ + var $bitrate; + var $captions; + var $categories; + var $channels; + var $copyright; + var $credits; + var $description; + var $duration; + var $expression; + var $framerate; + var $handler; + var $hashes; + var $height; + var $javascript; + var $keywords; + var $lang; + var $length; + var $link; + var $medium; + var $player; + var $ratings; + var $restrictions; + var $samplingrate; + var $thumbnails; + var $title; + var $type; + var $width; + + // Constructor, used to input the data + function SimplePie_Enclosure($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null) + { + $this->bitrate = $bitrate; + $this->captions = $captions; + $this->categories = $categories; + $this->channels = $channels; + $this->copyright = $copyright; + $this->credits = $credits; + $this->description = $description; + $this->duration = $duration; + $this->expression = $expression; + $this->framerate = $framerate; + $this->hashes = $hashes; + $this->height = $height; + $this->javascript = $javascript; + $this->keywords = $keywords; + $this->lang = $lang; + $this->length = $length; + $this->link = $link; + $this->medium = $medium; + $this->player = $player; + $this->ratings = $ratings; + $this->restrictions = $restrictions; + $this->samplingrate = $samplingrate; + $this->thumbnails = $thumbnails; + $this->title = $title; + $this->type = $type; + $this->width = $width; + if (class_exists('idna_convert')) + { + $idn =& new idna_convert; + $parsed = SimplePie_Misc::parse_url($link); + $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); + } + $this->handler = $this->get_handler(); // Needs to load last + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_bitrate() + { + if ($this->bitrate !== null) + { + return $this->bitrate; + } + else + { + return null; + } + } + + function get_caption($key = 0) + { + $captions = $this->get_captions(); + if (isset($captions[$key])) + { + return $captions[$key]; + } + else + { + return null; + } + } + + function get_captions() + { + if ($this->captions !== null) + { + return $this->captions; + } + else + { + return null; + } + } + + function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + function get_categories() + { + if ($this->categories !== null) + { + return $this->categories; + } + else + { + return null; + } + } + + function get_channels() + { + if ($this->channels !== null) + { + return $this->channels; + } + else + { + return null; + } + } + + function get_copyright() + { + if ($this->copyright !== null) + { + return $this->copyright; + } + else + { + return null; + } + } + + function get_credit($key = 0) + { + $credits = $this->get_credits(); + if (isset($credits[$key])) + { + return $credits[$key]; + } + else + { + return null; + } + } + + function get_credits() + { + if ($this->credits !== null) + { + return $this->credits; + } + else + { + return null; + } + } + + function get_description() + { + if ($this->description !== null) + { + return $this->description; + } + else + { + return null; + } + } + + function get_duration($convert = false) + { + if ($this->duration !== null) + { + if ($convert) + { + $time = SimplePie_Misc::time_hms($this->duration); + return $time; + } + else + { + return $this->duration; + } + } + else + { + return null; + } + } + + function get_expression() + { + if ($this->expression !== null) + { + return $this->expression; + } + else + { + return 'full'; + } + } + + function get_extension() + { + if ($this->link !== null) + { + $url = SimplePie_Misc::parse_url($this->link); + if ($url['path'] !== '') + { + return pathinfo($url['path'], PATHINFO_EXTENSION); + } + } + return null; + } + + function get_framerate() + { + if ($this->framerate !== null) + { + return $this->framerate; + } + else + { + return null; + } + } + + function get_handler() + { + return $this->get_real_type(true); + } + + function get_hash($key = 0) + { + $hashes = $this->get_hashes(); + if (isset($hashes[$key])) + { + return $hashes[$key]; + } + else + { + return null; + } + } + + function get_hashes() + { + if ($this->hashes !== null) + { + return $this->hashes; + } + else + { + return null; + } + } + + function get_height() + { + if ($this->height !== null) + { + return $this->height; + } + else + { + return null; + } + } + + function get_language() + { + if ($this->lang !== null) + { + return $this->lang; + } + else + { + return null; + } + } + + function get_keyword($key = 0) + { + $keywords = $this->get_keywords(); + if (isset($keywords[$key])) + { + return $keywords[$key]; + } + else + { + return null; + } + } + + function get_keywords() + { + if ($this->keywords !== null) + { + return $this->keywords; + } + else + { + return null; + } + } + + function get_length() + { + if ($this->length !== null) + { + return $this->length; + } + else + { + return null; + } + } + + function get_link() + { + if ($this->link !== null) + { + return urldecode($this->link); + } + else + { + return null; + } + } + + function get_medium() + { + if ($this->medium !== null) + { + return $this->medium; + } + else + { + return null; + } + } + + function get_player() + { + if ($this->player !== null) + { + return $this->player; + } + else + { + return null; + } + } + + function get_rating($key = 0) + { + $ratings = $this->get_ratings(); + if (isset($ratings[$key])) + { + return $ratings[$key]; + } + else + { + return null; + } + } + + function get_ratings() + { + if ($this->ratings !== null) + { + return $this->ratings; + } + else + { + return null; + } + } + + function get_restriction($key = 0) + { + $restrictions = $this->get_restrictions(); + if (isset($restrictions[$key])) + { + return $restrictions[$key]; + } + else + { + return null; + } + } + + function get_restrictions() + { + if ($this->restrictions !== null) + { + return $this->restrictions; + } + else + { + return null; + } + } + + function get_sampling_rate() + { + if ($this->samplingrate !== null) + { + return $this->samplingrate; + } + else + { + return null; + } + } + + function get_size() + { + $length = $this->get_length(); + if ($length !== null) + { + return round($length/1048576, 2); + } + else + { + return null; + } + } + + function get_thumbnail($key = 0) + { + $thumbnails = $this->get_thumbnails(); + if (isset($thumbnails[$key])) + { + return $thumbnails[$key]; + } + else + { + return null; + } + } + + function get_thumbnails() + { + if ($this->thumbnails !== null) + { + return $this->thumbnails; + } + else + { + return null; + } + } + + function get_title() + { + if ($this->title !== null) + { + return $this->title; + } + else + { + return null; + } + } + + function get_type() + { + if ($this->type !== null) + { + return $this->type; + } + else + { + return null; + } + } + + function get_width() + { + if ($this->width !== null) + { + return $this->width; + } + else + { + return null; + } + } + + function native_embed($options='') + { + return $this->embed($options, true); + } + + /** + * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'. + */ + function embed($options = '', $native = false) + { + // Set up defaults + $audio = ''; + $video = ''; + $alt = ''; + $altclass = ''; + $loop = 'false'; + $width = 'auto'; + $height = 'auto'; + $bgcolor = '#ffffff'; + $mediaplayer = ''; + $widescreen = false; + $handler = $this->get_handler(); + $type = $this->get_real_type(); + + // Process options and reassign values as necessary + if (is_array($options)) + { + extract($options); + } + else + { + $options = explode(',', $options); + foreach($options as $option) + { + $opt = explode(':', $option, 2); + if (isset($opt[0], $opt[1])) + { + $opt[0] = trim($opt[0]); + $opt[1] = trim($opt[1]); + switch ($opt[0]) + { + case 'audio': + $audio = $opt[1]; + break; + + case 'video': + $video = $opt[1]; + break; + + case 'alt': + $alt = $opt[1]; + break; + + case 'altclass': + $altclass = $opt[1]; + break; + + case 'loop': + $loop = $opt[1]; + break; + + case 'width': + $width = $opt[1]; + break; + + case 'height': + $height = $opt[1]; + break; + + case 'bgcolor': + $bgcolor = $opt[1]; + break; + + case 'mediaplayer': + $mediaplayer = $opt[1]; + break; + + case 'widescreen': + $widescreen = $opt[1]; + break; + } + } + } + } + + $mime = explode('/', $type, 2); + $mime = $mime[0]; + + // Process values for 'auto' + if ($width == 'auto') + { + if ($mime == 'video') + { + if ($height == 'auto') + { + $width = 480; + } + elseif ($widescreen) + { + $width = round((intval($height)/9)*16); + } + else + { + $width = round((intval($height)/3)*4); + } + } + else + { + $width = '100%'; + } + } + + if ($height == 'auto') + { + if ($mime == 'audio') + { + $height = 0; + } + elseif ($mime == 'video') + { + if ($width == 'auto') + { + if ($widescreen) + { + $height = 270; + } + else + { + $height = 360; + } + } + elseif ($widescreen) + { + $height = round((intval($width)/16)*9); + } + else + { + $height = round((intval($width)/4)*3); + } + } + else + { + $height = 376; + } + } + elseif ($mime == 'audio') + { + $height = 0; + } + + // Set proper placeholder value + if ($mime == 'audio') + { + $placeholder = $audio; + } + elseif ($mime == 'video') + { + $placeholder = $video; + } + + $embed = ''; + + // Make sure the JS library is included + if (!$native) + { + static $javascript_outputted = null; + if (!$javascript_outputted && $this->javascript) + { + $embed .= ''; + $javascript_outputted = true; + } + } + + // Odeo Feed MP3's + if ($handler == 'odeo') + { + if ($native) + { + $embed .= ''; + } + else + { + $embed .= ''; + } + } + + // Flash + elseif ($handler == 'flash') + { + if ($native) + { + $embed .= "get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\">"; + } + else + { + $embed .= ""; + } + } + + // Flash Media Player file types. + // Preferred handler for MP3 file types. + elseif ($handler == 'fmedia' || ($handler == 'mp3' && $mediaplayer != '')) + { + $height += 20; + if ($native) + { + $embed .= "get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\">"; + } + else + { + $embed .= ""; + } + } + + // QuickTime 7 file types. Need to test with QuickTime 6. + // Only handle MP3's if the Flash Media Player is not present. + elseif ($handler == 'quicktime' || ($handler == 'mp3' && $mediaplayer == '')) + { + $height += 16; + if ($native) + { + if ($placeholder != ""){ + $embed .= "get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\">"; + } + else { + $embed .= "get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\">"; + } + } + else + { + $embed .= ""; + } + } + + // Windows Media + elseif ($handler == 'wmedia') + { + $height += 45; + if ($native) + { + $embed .= "get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\">"; + } + else + { + $embed .= ""; + } + } + + // Everything else + else $embed .= '' . $alt . ''; + + return $embed; + } + + function get_real_type($find_handler = false) + { + // If it's Odeo, let's get it out of the way. + if (substr(strtolower($this->get_link()), 0, 15) == 'http://odeo.com') + { + return 'odeo'; + } + + // Mime-types by handler. + $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash + $types_fmedia = array('video/flv', 'video/x-flv','flv-application/octet-stream'); // Flash Media Player + $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime + $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media + $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3 + + if ($this->get_type() !== null) + { + $type = strtolower($this->type); + } + else + { + $type = null; + } + + // If we encounter an unsupported mime-type, check the file extension and guess intelligently. + if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3))) + { + switch (strtolower($this->get_extension())) + { + // Audio mime-types + case 'aac': + case 'adts': + $type = 'audio/acc'; + break; + + case 'aif': + case 'aifc': + case 'aiff': + case 'cdda': + $type = 'audio/aiff'; + break; + + case 'bwf': + $type = 'audio/wav'; + break; + + case 'kar': + case 'mid': + case 'midi': + case 'smf': + $type = 'audio/midi'; + break; + + case 'm4a': + $type = 'audio/x-m4a'; + break; + + case 'mp3': + case 'swa': + $type = 'audio/mp3'; + break; + + case 'wav': + $type = 'audio/wav'; + break; + + case 'wax': + $type = 'audio/x-ms-wax'; + break; + + case 'wma': + $type = 'audio/x-ms-wma'; + break; + + // Video mime-types + case '3gp': + case '3gpp': + $type = 'video/3gpp'; + break; + + case '3g2': + case '3gp2': + $type = 'video/3gpp2'; + break; + + case 'asf': + $type = 'video/x-ms-asf'; + break; + + case 'flv': + $type = 'video/x-flv'; + break; + + case 'm1a': + case 'm1s': + case 'm1v': + case 'm15': + case 'm75': + case 'mp2': + case 'mpa': + case 'mpeg': + case 'mpg': + case 'mpm': + case 'mpv': + $type = 'video/mpeg'; + break; + + case 'm4v': + $type = 'video/x-m4v'; + break; + + case 'mov': + case 'qt': + $type = 'video/quicktime'; + break; + + case 'mp4': + case 'mpg4': + $type = 'video/mp4'; + break; + + case 'sdv': + $type = 'video/sd-video'; + break; + + case 'wm': + $type = 'video/x-ms-wm'; + break; + + case 'wmv': + $type = 'video/x-ms-wmv'; + break; + + case 'wvx': + $type = 'video/x-ms-wvx'; + break; + + // Flash mime-types + case 'spl': + $type = 'application/futuresplash'; + break; + + case 'swf': + $type = 'application/x-shockwave-flash'; + break; + } + } + + if ($find_handler) + { + if (in_array($type, $types_flash)) + { + return 'flash'; + } + elseif (in_array($type, $types_fmedia)) + { + return 'fmedia'; + } + elseif (in_array($type, $types_quicktime)) + { + return 'quicktime'; + } + elseif (in_array($type, $types_wmedia)) + { + return 'wmedia'; + } + elseif (in_array($type, $types_mp3)) + { + return 'mp3'; + } + else + { + return null; + } + } + else + { + return $type; + } + } +} + +class SimplePie_Caption +{ + var $type; + var $lang; + var $startTime; + var $endTime; + var $text; + + // Constructor, used to input the data + function SimplePie_Caption($type = null, $lang = null, $startTime = null, $endTime = null, $text = null) + { + $this->type = $type; + $this->lang = $lang; + $this->startTime = $startTime; + $this->endTime = $endTime; + $this->text = $text; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_endtime() + { + if ($this->endTime !== null) + { + return $this->endTime; + } + else + { + return null; + } + } + + function get_language() + { + if ($this->lang !== null) + { + return $this->lang; + } + else + { + return null; + } + } + + function get_starttime() + { + if ($this->startTime !== null) + { + return $this->startTime; + } + else + { + return null; + } + } + + function get_text() + { + if ($this->text !== null) + { + return $this->text; + } + else + { + return null; + } + } + + function get_type() + { + if ($this->type !== null) + { + return $this->type; + } + else + { + return null; + } + } +} + +class SimplePie_Credit +{ + var $role; + var $scheme; + var $name; + + // Constructor, used to input the data + function SimplePie_Credit($role = null, $scheme = null, $name = null) + { + $this->role = $role; + $this->scheme = $scheme; + $this->name = $name; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_role() + { + if ($this->role !== null) + { + return $this->role; + } + else + { + return null; + } + } + + function get_scheme() + { + if ($this->scheme !== null) + { + return $this->scheme; + } + else + { + return null; + } + } + + function get_name() + { + if ($this->name !== null) + { + return $this->name; + } + else + { + return null; + } + } +} + +class SimplePie_Copyright +{ + var $url; + var $label; + + // Constructor, used to input the data + function SimplePie_Copyright($url = null, $label = null) + { + $this->url = $url; + $this->label = $label; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_url() + { + if ($this->url !== null) + { + return $this->url; + } + else + { + return null; + } + } + + function get_attribution() + { + if ($this->label !== null) + { + return $this->label; + } + else + { + return null; + } + } +} + +class SimplePie_Rating +{ + var $scheme; + var $value; + + // Constructor, used to input the data + function SimplePie_Rating($scheme = null, $value = null) + { + $this->scheme = $scheme; + $this->value = $value; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_scheme() + { + if ($this->scheme !== null) + { + return $this->scheme; + } + else + { + return null; + } + } + + function get_value() + { + if ($this->value !== null) + { + return $this->value; + } + else + { + return null; + } + } +} + +class SimplePie_Restriction +{ + var $relationship; + var $type; + var $value; + + // Constructor, used to input the data + function SimplePie_Restriction($relationship = null, $type = null, $value = null) + { + $this->relationship = $relationship; + $this->type = $type; + $this->value = $value; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_relationship() + { + if ($this->relationship !== null) + { + return $this->relationship; + } + else + { + return null; + } + } + + function get_type() + { + if ($this->type !== null) + { + return $this->type; + } + else + { + return null; + } + } + + function get_value() + { + if ($this->value !== null) + { + return $this->value; + } + else + { + return null; + } + } +} + +/** + * @todo Move to properly supporting RFC2616 (HTTP/1.1) + */ +class SimplePie_File +{ + var $url; + var $useragent; + var $success = true; + var $headers = array(); + var $body; + var $status_code; + var $redirects = 0; + var $error; + var $method = SIMPLEPIE_FILE_SOURCE_NONE; + + function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false) + { + if (class_exists('idna_convert')) + { + $idn =& new idna_convert; + $parsed = SimplePie_Misc::parse_url($url); + $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); + } + $this->url = $url; + $this->useragent = $useragent; + if (preg_match('/^http(s)?:\/\//i', $url)) + { + if ($useragent === null) + { + $useragent = ini_get('user_agent'); + $this->useragent = $useragent; + } + if (!is_array($headers)) + { + $headers = array(); + } + if (!$force_fsockopen && function_exists('curl_exec')) + { + $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_CURL; + $fp = curl_init(); + $headers2 = array(); + foreach ($headers as $key => $value) + { + $headers2[] = "$key: $value"; + } + if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>=')) + { + curl_setopt($fp, CURLOPT_ENCODING, ''); + } + curl_setopt($fp, CURLOPT_URL, $url); + curl_setopt($fp, CURLOPT_HEADER, 1); + curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($fp, CURLOPT_TIMEOUT, $timeout); + curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout); + curl_setopt($fp, CURLOPT_REFERER, $url); + curl_setopt($fp, CURLOPT_USERAGENT, $useragent); + curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2); + if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>=')) + { + curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1); + curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects); + } + + $this->headers = curl_exec($fp); + if (curl_errno($fp) == 23 || curl_errno($fp) == 61) + { + curl_setopt($fp, CURLOPT_ENCODING, 'none'); + $this->headers = curl_exec($fp); + } + if (curl_errno($fp)) + { + $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp); + $this->success = false; + } + else + { + $info = curl_getinfo($fp); + curl_close($fp); + $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1); + $this->headers = array_pop($this->headers); + $parser =& new SimplePie_HTTP_Parser($this->headers); + if ($parser->parse()) + { + $this->headers = $parser->headers; + $this->body = $parser->body; + $this->status_code = $parser->status_code; + if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) + { + $this->redirects++; + $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); + return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); + } + } + } + } + else + { + $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN; + $url_parts = parse_url($url); + if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) == 'https') + { + $url_parts['host'] = "ssl://$url_parts[host]"; + $url_parts['port'] = 443; + } + if (!isset($url_parts['port'])) + { + $url_parts['port'] = 80; + } + $fp = @fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout); + if (!$fp) + { + $this->error = 'fsockopen error: ' . $errstr; + $this->success = false; + } + else + { + stream_set_timeout($fp, $timeout); + if (isset($url_parts['path'])) + { + if (isset($url_parts['query'])) + { + $get = "$url_parts[path]?$url_parts[query]"; + } + else + { + $get = $url_parts['path']; + } + } + else + { + $get = '/'; + } + $out = "GET $get HTTP/1.0\r\n"; + $out .= "Host: $url_parts[host]\r\n"; + $out .= "User-Agent: $useragent\r\n"; + if (extension_loaded('zlib')) + { + $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n"; + } + + if (isset($url_parts['user']) && isset($url_parts['pass'])) + { + $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n"; + } + foreach ($headers as $key => $value) + { + $out .= "$key: $value\r\n"; + } + $out .= "Connection: Close\r\n\r\n"; + fwrite($fp, $out); + + $info = stream_get_meta_data($fp); + + $this->headers = ''; + while (!$info['eof'] && !$info['timed_out']) + { + $this->headers .= fread($fp, 1160); + $info = stream_get_meta_data($fp); + } + if (!$info['timed_out']) + { + $parser =& new SimplePie_HTTP_Parser($this->headers); + if ($parser->parse()) + { + $this->headers = $parser->headers; + $this->body = $parser->body; + $this->status_code = $parser->status_code; + if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) + { + $this->redirects++; + $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); + return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); + } + if (isset($this->headers['content-encoding'])) + { + // Hey, we act dumb elsewhere, so let's do that here too + switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20"))) + { + case 'gzip': + case 'x-gzip': + $decoder = new SimplePie_gzdecode($this->body); + if (!$decoder->parse()) + { + $this->error = 'Unable to decode HTTP "gzip" stream'; + $this->success = false; + } + else + { + $this->body = $decoder->data; + } + break; + + case 'deflate': + if (($body = gzuncompress($this->body)) === false) + { + if (($body = gzinflate($this->body)) === false) + { + $this->error = 'Unable to decode HTTP "deflate" stream'; + $this->success = false; + } + } + $this->body = $body; + break; + + default: + $this->error = 'Unknown content coding'; + $this->success = false; + } + } + } + } + else + { + $this->error = 'fsocket timed out'; + $this->success = false; + } + fclose($fp); + } + } + } + else + { + $this->method = SIMPLEPIE_FILE_SOURCE_LOCAL | SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS; + if (!$this->body = file_get_contents($url)) + { + $this->error = 'file_get_contents could not read the file'; + $this->success = false; + } + } + } +} + +/** + * HTTP Response Parser + * + * @package SimplePie + */ +class SimplePie_HTTP_Parser +{ + /** + * HTTP Version + * + * @access public + * @var float + */ + var $http_version = 0.0; + + /** + * Status code + * + * @access public + * @var int + */ + var $status_code = 0; + + /** + * Reason phrase + * + * @access public + * @var string + */ + var $reason = ''; + + /** + * Key/value pairs of the headers + * + * @access public + * @var array + */ + var $headers = array(); + + /** + * Body of the response + * + * @access public + * @var string + */ + var $body = ''; + + /** + * Current state of the state machine + * + * @access private + * @var string + */ + var $state = 'http_version'; + + /** + * Input data + * + * @access private + * @var string + */ + var $data = ''; + + /** + * Input data length (to avoid calling strlen() everytime this is needed) + * + * @access private + * @var int + */ + var $data_length = 0; + + /** + * Current position of the pointer + * + * @var int + * @access private + */ + var $position = 0; + + /** + * Name of the hedaer currently being parsed + * + * @access private + * @var string + */ + var $name = ''; + + /** + * Value of the hedaer currently being parsed + * + * @access private + * @var string + */ + var $value = ''; + + /** + * Create an instance of the class with the input data + * + * @access public + * @param string $data Input data + */ + function SimplePie_HTTP_Parser($data) + { + $this->data = $data; + $this->data_length = strlen($this->data); + } + + /** + * Parse the input data + * + * @access public + * @return bool true on success, false on failure + */ + function parse() + { + while ($this->state && $this->state !== 'emit' && $this->has_data()) + { + $state = $this->state; + $this->$state(); + } + $this->data = ''; + if ($this->state === 'emit' || $this->state === 'body') + { + return true; + } + else + { + $this->http_version = ''; + $this->status_code = ''; + $this->reason = ''; + $this->headers = array(); + $this->body = ''; + return false; + } + } + + /** + * Check whether there is data beyond the pointer + * + * @access private + * @return bool true if there is further data, false if not + */ + function has_data() + { + return (bool) ($this->position < $this->data_length); + } + + /** + * See if the next character is LWS + * + * @access private + * @return bool true if the next character is LWS, false if not + */ + function is_linear_whitespace() + { + return (bool) ($this->data[$this->position] === "\x09" + || $this->data[$this->position] === "\x20" + || ($this->data[$this->position] === "\x0A" + && isset($this->data[$this->position + 1]) + && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20"))); + } + + /** + * Parse the HTTP version + * + * @access private + */ + function http_version() + { + if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/') + { + $len = strspn($this->data, '0123456789.', 5); + $this->http_version = substr($this->data, 5, $len); + $this->position += 5 + $len; + if (substr_count($this->http_version, '.') <= 1) + { + $this->http_version = (float) $this->http_version; + $this->position += strspn($this->data, "\x09\x20", $this->position); + $this->state = 'status'; + } + else + { + $this->state = false; + } + } + else + { + $this->state = false; + } + } + + /** + * Parse the status code + * + * @access private + */ + function status() + { + if ($len = strspn($this->data, '0123456789', $this->position)) + { + $this->status_code = (int) substr($this->data, $this->position, $len); + $this->position += $len; + $this->state = 'reason'; + } + else + { + $this->state = false; + } + } + + /** + * Parse the reason phrase + * + * @access private + */ + function reason() + { + $len = strcspn($this->data, "\x0A", $this->position); + $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20"); + $this->position += $len + 1; + $this->state = 'new_line'; + } + + /** + * Deal with a new line, shifting data around as needed + * + * @access private + */ + function new_line() + { + $this->value = trim($this->value, "\x0D\x20"); + if ($this->name !== '' && $this->value !== '') + { + $this->name = strtolower($this->name); + if (isset($this->headers[$this->name])) + { + $this->headers[$this->name] .= ', ' . $this->value; + } + else + { + $this->headers[$this->name] = $this->value; + } + } + $this->name = ''; + $this->value = ''; + if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A") + { + $this->position += 2; + $this->state = 'body'; + } + elseif ($this->data[$this->position] === "\x0A") + { + $this->position++; + $this->state = 'body'; + } + else + { + $this->state = 'name'; + } + } + + /** + * Parse a header name + * + * @access private + */ + function name() + { + $len = strcspn($this->data, "\x0A:", $this->position); + if (isset($this->data[$this->position + $len])) + { + if ($this->data[$this->position + $len] === "\x0A") + { + $this->position += $len; + $this->state = 'new_line'; + } + else + { + $this->name = substr($this->data, $this->position, $len); + $this->position += $len + 1; + $this->state = 'value'; + } + } + else + { + $this->state = false; + } + } + + /** + * Parse LWS, replacing consecutive LWS characters with a single space + * + * @access private + */ + function linear_whitespace() + { + do + { + if (substr($this->data, $this->position, 2) === "\x0D\x0A") + { + $this->position += 2; + } + elseif ($this->data[$this->position] === "\x0A") + { + $this->position++; + } + $this->position += strspn($this->data, "\x09\x20", $this->position); + } while ($this->has_data() && $this->is_linear_whitespace()); + $this->value .= "\x20"; + } + + /** + * See what state to move to while within non-quoted header values + * + * @access private + */ + function value() + { + if ($this->is_linear_whitespace()) + { + $this->linear_whitespace(); + } + else + { + switch ($this->data[$this->position]) + { + case '"': + $this->position++; + $this->state = 'quote'; + break; + + case "\x0A": + $this->position++; + $this->state = 'new_line'; + break; + + default: + $this->state = 'value_char'; + break; + } + } + } + + /** + * Parse a header value while outside quotes + * + * @access private + */ + function value_char() + { + $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position); + $this->value .= substr($this->data, $this->position, $len); + $this->position += $len; + $this->state = 'value'; + } + + /** + * See what state to move to while within quoted header values + * + * @access private + */ + function quote() + { + if ($this->is_linear_whitespace()) + { + $this->linear_whitespace(); + } + else + { + switch ($this->data[$this->position]) + { + case '"': + $this->position++; + $this->state = 'value'; + break; + + case "\x0A": + $this->position++; + $this->state = 'new_line'; + break; + + case '\\': + $this->position++; + $this->state = 'quote_escaped'; + break; + + default: + $this->state = 'quote_char'; + break; + } + } + } + + /** + * Parse a header value while within quotes + * + * @access private + */ + function quote_char() + { + $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position); + $this->value .= substr($this->data, $this->position, $len); + $this->position += $len; + $this->state = 'value'; + } + + /** + * Parse an escaped character within quotes + * + * @access private + */ + function quote_escaped() + { + $this->value .= $this->data[$this->position]; + $this->position++; + $this->state = 'quote'; + } + + /** + * Parse the body + * + * @access private + */ + function body() + { + $this->body = substr($this->data, $this->position); + $this->state = 'emit'; + } +} + +/** + * gzdecode + * + * @package SimplePie + */ +class SimplePie_gzdecode +{ + /** + * Compressed data + * + * @access private + * @see gzdecode::$data + */ + var $compressed_data; + + /** + * Size of compressed data + * + * @access private + */ + var $compressed_size; + + /** + * Minimum size of a valid gzip string + * + * @access private + */ + var $min_compressed_size = 18; + + /** + * Current position of pointer + * + * @access private + */ + var $position = 0; + + /** + * Flags (FLG) + * + * @access private + */ + var $flags; + + /** + * Uncompressed data + * + * @access public + * @see gzdecode::$compressed_data + */ + var $data; + + /** + * Modified time + * + * @access public + */ + var $MTIME; + + /** + * Extra Flags + * + * @access public + */ + var $XFL; + + /** + * Operating System + * + * @access public + */ + var $OS; + + /** + * Subfield ID 1 + * + * @access public + * @see gzdecode::$extra_field + * @see gzdecode::$SI2 + */ + var $SI1; + + /** + * Subfield ID 2 + * + * @access public + * @see gzdecode::$extra_field + * @see gzdecode::$SI1 + */ + var $SI2; + + /** + * Extra field content + * + * @access public + * @see gzdecode::$SI1 + * @see gzdecode::$SI2 + */ + var $extra_field; + + /** + * Original filename + * + * @access public + */ + var $filename; + + /** + * Human readable comment + * + * @access public + */ + var $comment; + + /** + * Don't allow anything to be set + * + * @access public + */ + function __set($name, $value) + { + trigger_error("Cannot write property $name", E_USER_ERROR); + } + + /** + * Set the compressed string and related properties + * + * @access public + */ + function SimplePie_gzdecode($data) + { + $this->compressed_data = $data; + $this->compressed_size = strlen($data); + } + + /** + * Decode the GZIP stream + * + * @access public + */ + function parse() + { + if ($this->compressed_size >= $this->min_compressed_size) + { + // Check ID1, ID2, and CM + if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08") + { + return false; + } + + // Get the FLG (FLaGs) + $this->flags = ord($this->compressed_data[3]); + + // FLG bits above (1 << 4) are reserved + if ($this->flags > 0x1F) + { + return false; + } + + // Advance the pointer after the above + $this->position += 4; + + // MTIME + $mtime = substr($this->compressed_data, $this->position, 4); + // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness + if (current(unpack('S', "\x00\x01")) === 1) + { + $mtime = strrev($mtime); + } + $this->MTIME = current(unpack('l', $mtime)); + $this->position += 4; + + // Get the XFL (eXtra FLags) + $this->XFL = ord($this->compressed_data[$this->position++]); + + // Get the OS (Operating System) + $this->OS = ord($this->compressed_data[$this->position++]); + + // Parse the FEXTRA + if ($this->flags & 4) + { + // Read subfield IDs + $this->SI1 = $this->compressed_data[$this->position++]; + $this->SI2 = $this->compressed_data[$this->position++]; + + // SI2 set to zero is reserved for future use + if ($this->SI2 === "\x00") + { + return false; + } + + // Get the length of the extra field + $len = current(unpack('v', substr($this->compressed_data, $this->position, 2))); + $position += 2; + + // Check the length of the string is still valid + $this->min_compressed_size += $len + 4; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Set the extra field to the given data + $this->extra_field = substr($this->compressed_data, $this->position, $len); + $this->position += $len; + } + else + { + return false; + } + } + + // Parse the FNAME + if ($this->flags & 8) + { + // Get the length of the filename + $len = strspn($this->compressed_data, "\x00", $this->position); + + // Check the length of the string is still valid + $this->min_compressed_size += $len + 1; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Set the original filename to the given string + $this->filename = substr($this->compressed_data, $this->position, $len); + $this->position += $len + 1; + } + else + { + return false; + } + } + + // Parse the FCOMMENT + if ($this->flags & 16) + { + // Get the length of the comment + $len = strspn($this->compressed_data, "\x00", $this->position); + + // Check the length of the string is still valid + $this->min_compressed_size += $len + 1; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Set the original comment to the given string + $this->comment = substr($this->compressed_data, $this->position, $len); + $this->position += $len + 1; + } + else + { + return false; + } + } + + // Parse the FHCRC + if ($this->flags & 2) + { + // Check the length of the string is still valid + $this->min_compressed_size += $len + 2; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Read the CRC + $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2))); + + // Check the CRC matches + if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc) + { + $this->position += 2; + } + else + { + return false; + } + } + else + { + return false; + } + } + + // Decompress the actual data + if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false) + { + return false; + } + else + { + $this->position = $this->compressed_size - 8; + } + + // Check CRC of data + $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4))); + $this->position += 4; + /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc)) + { + return false; + }*/ + + // Check ISIZE of data + $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4))); + $this->position += 4; + if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize)) + { + return false; + } + + // Wow, against all odds, we've actually got a valid gzip string + return true; + } + else + { + return false; + } + } +} + +class SimplePie_Cache +{ + /** + * Don't call the constructor. Please. + * + * @access private + */ + function SimplePie_Cache() + { + trigger_error('Please call SimplePie_Cache::create() instead of the constructor', E_USER_ERROR); + } + + /** + * Create a new SimplePie_Cache object + * + * @static + * @access public + */ + function create($location, $filename, $extension) + { + return new SimplePie_Cache_File($location, $filename, $extension); + } +} + +class SimplePie_Cache_File +{ + var $location; + var $filename; + var $extension; + var $name; + + function SimplePie_Cache_File($location, $filename, $extension) + { + $this->location = $location; + $this->filename = rawurlencode($filename); + $this->extension = rawurlencode($extension); + $this->name = "$location/$this->filename.$this->extension"; + } + + function save($data) + { + if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location)) + { + if (is_a($data, 'SimplePie')) + { + $data = $data->data; + } + + $data = serialize($data); + + if (function_exists('file_put_contents')) + { + return (bool) file_put_contents($this->name, $data); + } + else + { + $fp = fopen($this->name, 'wb'); + if ($fp) + { + fwrite($fp, $data); + fclose($fp); + return true; + } + } + } + return false; + } + + function load() + { + if (file_exists($this->name) && is_readable($this->name)) + { + return unserialize(file_get_contents($this->name)); + } + return false; + } + + function mtime() + { + if (file_exists($this->name)) + { + return filemtime($this->name); + } + return false; + } + + function touch() + { + if (file_exists($this->name)) + { + return touch($this->name); + } + return false; + } + + function unlink() + { + if (file_exists($this->name)) + { + return unlink($this->name); + } + return false; + } +} + +class SimplePie_Misc +{ + function time_hms($seconds) + { + $time = ''; + + $hours = floor($seconds / 3600); + $remainder = $seconds % 3600; + if ($hours > 0) + { + $time .= $hours.':'; + } + + $minutes = floor($remainder / 60); + $seconds = $remainder % 60; + if ($minutes < 10 && $hours > 0) + { + $minutes = '0' . $minutes; + } + if ($seconds < 10) + { + $seconds = '0' . $seconds; + } + + $time .= $minutes.':'; + $time .= $seconds; + + return $time; + } + + function absolutize_url($relative, $base) + { + if ($relative !== '') + { + $relative = SimplePie_Misc::parse_url($relative); + if ($relative['scheme'] !== '') + { + $target = $relative; + } + elseif ($base !== '') + { + $base = SimplePie_Misc::parse_url($base); + $target = SimplePie_Misc::parse_url(''); + if ($relative['authority'] !== '') + { + $target = $relative; + $target['scheme'] = $base['scheme']; + } + else + { + $target['scheme'] = $base['scheme']; + $target['authority'] = $base['authority']; + if ($relative['path'] !== '') + { + if (strpos($relative['path'], '/') === 0) + { + $target['path'] = $relative['path']; + } + elseif ($base['authority'] !== '' && $base['path'] === '') + { + $target['path'] = '/' . $relative['path']; + } + elseif (($last_segment = strrpos($base['path'], '/')) !== false) + { + $target['path'] = substr($base['path'], 0, $last_segment + 1) . $relative['path']; + } + else + { + $target['path'] = $relative['path']; + } + $target['query'] = $relative['query']; + } + else + { + $target['path'] = $base['path']; + if ($relative['query'] !== '') + { + $target['query'] = $relative['query']; + } + elseif ($base['query'] !== '') + { + $target['query'] = $base['query']; + } + } + } + $target['fragment'] = $relative['fragment']; + } + else + { + // No base URL, just return the relative URL + $target = $relative; + } + $return = SimplePie_Misc::compress_parse_url($target['scheme'], $target['authority'], $target['path'], $target['query'], $target['fragment']); + } + else + { + $return = $base; + } + $return = SimplePie_Misc::normalize_url($return); + return $return; + } + + function remove_dot_segments($input) + { + $output = ''; + while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input == '.' || $input == '..') + { + // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, + if (strpos($input, '../') === 0) + { + $input = substr($input, 3); + } + elseif (strpos($input, './') === 0) + { + $input = substr($input, 2); + } + // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise, + elseif (strpos($input, '/./') === 0) + { + $input = substr_replace($input, '/', 0, 3); + } + elseif ($input == '/.') + { + $input = '/'; + } + // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise, + elseif (strpos($input, '/../') === 0) + { + $input = substr_replace($input, '/', 0, 4); + $output = substr_replace($output, '', strrpos($output, '/')); + } + elseif ($input == '/..') + { + $input = '/'; + $output = substr_replace($output, '', strrpos($output, '/')); + } + // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, + elseif ($input == '.' || $input == '..') + { + $input = ''; + } + // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer + elseif (($pos = strpos($input, '/', 1)) !== false) + { + $output .= substr($input, 0, $pos); + $input = substr_replace($input, '', 0, $pos); + } + else + { + $output .= $input; + $input = ''; + } + } + return $output . $input; + } + + function get_element($realname, $string) + { + $return = array(); + $name = preg_quote($realname, '/'); + if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) + { + for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++) + { + $return[$i]['tag'] = $realname; + $return[$i]['full'] = $matches[$i][0][0]; + $return[$i]['offset'] = $matches[$i][0][1]; + if (strlen($matches[$i][3][0]) <= 2) + { + $return[$i]['self_closing'] = true; + } + else + { + $return[$i]['self_closing'] = false; + $return[$i]['content'] = $matches[$i][4][0]; + } + $return[$i]['attribs'] = array(); + if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER)) + { + for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++) + { + if (count($attribs[$j]) == 2) + { + $attribs[$j][2] = $attribs[$j][1]; + } + $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8'); + } + } + } + } + return $return; + } + + function element_implode($element) + { + $full = "<$element[tag]"; + foreach ($element['attribs'] as $key => $value) + { + $key = strtolower($key); + $full .= " $key=\"" . htmlspecialchars($value['data']) . '"'; + } + if ($element['self_closing']) + { + $full .= ' />'; + } + else + { + $full .= ">$element[content]"; + } + return $full; + } + + function error($message, $level, $file, $line) + { + switch ($level) + { + case E_USER_ERROR: + $note = 'PHP Error'; + break; + case E_USER_WARNING: + $note = 'PHP Warning'; + break; + case E_USER_NOTICE: + $note = 'PHP Notice'; + break; + default: + $note = 'Unknown Error'; + break; + } + error_log("$note: $message in $file on line $line", 0); + return $message; + } + + /** + * If a file has been cached, retrieve and display it. + * + * This is most useful for caching images (get_favicon(), etc.), + * however it works for all cached files. This WILL NOT display ANY + * file/image/page/whatever, but rather only display what has already + * been cached by SimplePie. + * + * @access public + * @see SimplePie::get_favicon() + * @param str $identifier_url URL that is used to identify the content. + * This may or may not be the actual URL of the live content. + * @param str $cache_location Location of SimplePie's cache. Defaults + * to './cache'. + * @param str $cache_extension The file extension that the file was + * cached with. Defaults to 'spc'. + * @param str $cache_class Name of the cache-handling class being used + * in SimplePie. Defaults to 'SimplePie_Cache', and should be left + * as-is unless you've overloaded the class. + * @param str $cache_name_function Obsolete. Exists for backwards + * compatibility reasons only. + */ + function display_cached_file($identifier_url, $cache_location = './cache', $cache_extension = 'spc', $cache_class = 'SimplePie_Cache', $cache_name_function = 'md5') + { + $cache = call_user_func(array($cache_class, 'create'), $cache_location, $identifier_url, $cache_extension); + + if ($file = $cache->load()) + { + if (isset($file['headers']['content-type'])) + { + header('Content-type:' . $file['headers']['content-type']); + } + else + { + header('Content-type: application/octet-stream'); + } + header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days + echo $file['body']; + exit; + } + + die('Cached file for ' . $identifier_url . ' cannot be found.'); + } + + function fix_protocol($url, $http = 1) + { + $url = SimplePie_Misc::normalize_url($url); + $parsed = SimplePie_Misc::parse_url($url); + if ($parsed['scheme'] !== '' && $parsed['scheme'] != 'http' && $parsed['scheme'] != 'https') + { + return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http); + } + + if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url)) + { + return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http); + } + + if ($http == 2 && $parsed['scheme'] !== '') + { + return "feed:$url"; + } + elseif ($http == 3 && strtolower($parsed['scheme']) == 'http') + { + return substr_replace($url, 'podcast', 0, 4); + } + elseif ($http == 4 && strtolower($parsed['scheme']) == 'http') + { + return substr_replace($url, 'itpc', 0, 4); + } + else + { + return $url; + } + } + + function parse_url($url) + { + static $cache = array(); + if (isset($cache[$url])) + { + return $cache[$url]; + } + elseif (preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/', $url, $match)) + { + for ($i = count($match); $i <= 9; $i++) + { + $match[$i] = ''; + } + return $cache[$url] = array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]); + } + else + { + return $cache[$url] = array('scheme' => '', 'authority' => '', 'path' => '', 'query' => '', 'fragment' => ''); + } + } + + function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '') + { + $return = ''; + if ($scheme !== '') + { + $return .= "$scheme:"; + } + if ($authority !== '') + { + $return .= "//$authority"; + } + if ($path !== '') + { + $return .= $path; + } + if ($query !== '') + { + $return .= "?$query"; + } + if ($fragment !== '') + { + $return .= "#$fragment"; + } + return $return; + } + + function normalize_url($url) + { + $url = preg_replace_callback('/%([0-9A-Fa-f]{2})/', array('SimplePie_Misc', 'percent_encoding_normalization'), $url); + $url = SimplePie_Misc::parse_url($url); + $url['scheme'] = strtolower($url['scheme']); + if ($url['authority'] !== '') + { + $url['authority'] = strtolower($url['authority']); + $url['path'] = SimplePie_Misc::remove_dot_segments($url['path']); + } + return SimplePie_Misc::compress_parse_url($url['scheme'], $url['authority'], $url['path'], $url['query'], $url['fragment']); + } + + function percent_encoding_normalization($match) + { + $integer = hexdec($match[1]); + if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer == 0x2D || $integer == 0x2E || $integer == 0x5F || $integer == 0x7E) + { + return chr($integer); + } + else + { + return strtoupper($match[0]); + } + } + + /** + * Remove bad UTF-8 bytes + * + * PCRE Pattern to locate bad bytes in a UTF-8 string comes from W3C + * FAQ: Multilingual Forms (modified to include full ASCII range) + * + * @author Geoffrey Sneddon + * @see http://www.w3.org/International/questions/qa-forms-utf-8 + * @param string $str String to remove bad UTF-8 bytes from + * @return string UTF-8 string + */ + function utf8_bad_replace($str) + { + if (function_exists('iconv') && ($return = @iconv('UTF-8', 'UTF-8//IGNORE', $str))) + { + return $return; + } + elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($str, 'UTF-8', 'UTF-8'))) + { + return $return; + } + elseif (preg_match_all('/(?:[\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})+/', $str, $matches)) + { + return implode("\xEF\xBF\xBD", $matches[0]); + } + elseif ($str !== '') + { + return "\xEF\xBF\xBD"; + } + else + { + return ''; + } + } + + /** + * Converts a Windows-1252 encoded string to a UTF-8 encoded string + * + * @static + * @access public + * @param string $string Windows-1252 encoded string + * @return string UTF-8 encoded string + */ + function windows_1252_to_utf8($string) + { + static $convert_table = array("\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF"); + + return strtr($string, $convert_table); + } + + function change_encoding($data, $input, $output) + { + $input = SimplePie_Misc::encoding($input); + $output = SimplePie_Misc::encoding($output); + + // We fail to fail on non US-ASCII bytes + if ($input === 'US-ASCII') + { + static $non_ascii_octects = ''; + if (!$non_ascii_octects) + { + for ($i = 0x80; $i <= 0xFF; $i++) + { + $non_ascii_octects .= chr($i); + } + } + $data = substr($data, 0, strcspn($data, $non_ascii_octects)); + } + + // This is first, as behaviour of this is completely predictable + if ($input === 'Windows-1252' && $output === 'UTF-8') + { + return SimplePie_Misc::windows_1252_to_utf8($data); + } + // This is second, as behaviour of this varies only with PHP version + elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($data, $output, $input))) + { + return $return; + } + // This is last, as behaviour of this varies with OS userland and PHP version + elseif (function_exists('iconv') && ($return = @iconv($input, $output, $data))) + { + return $return; + } + // If we can't do anything, just fail + else + { + return false; + } + } + + function encoding($charset) + { + /* Character sets are case-insensitive, and also need some further + normalization in the real world (though we'll return them in the form given + in their registration). */ + switch (strtolower(preg_replace('/[\x09-\x0D\x20-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]/', '', $charset))) + { + case 'adobestandardencoding': + case 'csadobestandardencoding': + return 'Adobe-Standard-Encoding'; + + case 'adobesymbolencoding': + case 'cshppsmath': + return 'Adobe-Symbol-Encoding'; + + case 'ami1251': + case 'ami1251': + case 'amiga1251': + case 'amiga1251': + return 'Amiga-1251'; + + case 'ansix31101983': + case 'csat5001983': + case 'csiso99naplps': + case 'isoir99': + case 'naplps': + return 'ANSI_X3.110-1983'; + + case 'arabic7': + case 'asmo449': + case 'csiso89asmo449': + case 'isoir89': + case 'iso9036': + return 'ASMO_449'; + + case 'big5': + case 'csbig5': + case 'xxbig5': + return 'Big5'; + + case 'big5hkscs': + return 'Big5-HKSCS'; + + case 'bocu1': + case 'csbocu1': + return 'BOCU-1'; + + case 'brf': + case 'csbrf': + return 'BRF'; + + case 'bs4730': + case 'csiso4unitedkingdom': + case 'gb': + case 'isoir4': + case 'iso646gb': + case 'uk': + return 'BS_4730'; + + case 'bsviewdata': + case 'csiso47bsviewdata': + case 'isoir47': + return 'BS_viewdata'; + + case 'cesu8': + case 'cscesu8': + return 'CESU-8'; + + case 'ca': + case 'csa71': + case 'csaz243419851': + case 'csiso121canadian1': + case 'isoir121': + case 'iso646ca': + return 'CSA_Z243.4-1985-1'; + + case 'csa72': + case 'csaz243419852': + case 'csiso122canadian2': + case 'isoir122': + case 'iso646ca2': + return 'CSA_Z243.4-1985-2'; + + case 'csaz24341985gr': + case 'csiso123csaz24341985gr': + case 'isoir123': + return 'CSA_Z243.4-1985-gr'; + + case 'csiso139csn369103': + case 'csn369103': + case 'isoir139': + return 'CSN_369103'; + + case 'csdecmcs': + case 'dec': + case 'decmcs': + return 'DEC-MCS'; + + case 'csiso21german': + case 'de': + case 'din66003': + case 'isoir21': + case 'iso646de': + return 'DIN_66003'; + + case 'csdkus': + case 'dkus': + return 'dk-us'; + + case 'csiso646danish': + case 'dk': + case 'ds2089': + case 'ds2089': + case 'iso646dk': + return 'DS_2089'; + + case 'csibmebcdicatde': + case 'ebcdicatde': + return 'EBCDIC-AT-DE'; + + case 'csebcdicatdea': + case 'ebcdicatdea': + return 'EBCDIC-AT-DE-A'; + + case 'csebcdiccafr': + case 'ebcdiccafr': + return 'EBCDIC-CA-FR'; + + case 'csebcdicdkno': + case 'ebcdicdkno': + return 'EBCDIC-DK-NO'; + + case 'csebcdicdknoa': + case 'ebcdicdknoa': + return 'EBCDIC-DK-NO-A'; + + case 'csebcdices': + case 'ebcdices': + return 'EBCDIC-ES'; + + case 'csebcdicesa': + case 'ebcdicesa': + return 'EBCDIC-ES-A'; + + case 'csebcdicess': + case 'ebcdicess': + return 'EBCDIC-ES-S'; + + case 'csebcdicfise': + case 'ebcdicfise': + return 'EBCDIC-FI-SE'; + + case 'csebcdicfisea': + case 'ebcdicfisea': + return 'EBCDIC-FI-SE-A'; + + case 'csebcdicfr': + case 'ebcdicfr': + return 'EBCDIC-FR'; + + case 'csebcdicit': + case 'ebcdicit': + return 'EBCDIC-IT'; + + case 'csebcdicpt': + case 'ebcdicpt': + return 'EBCDIC-PT'; + + case 'csebcdicuk': + case 'ebcdicuk': + return 'EBCDIC-UK'; + + case 'csebcdicus': + case 'ebcdicus': + return 'EBCDIC-US'; + + case 'csiso111ecmacyrillic': + case 'ecmacyrillic': + case 'isoir111': + case 'koi8e': + return 'ECMA-cyrillic'; + + case 'csiso17spanish': + case 'es': + case 'isoir17': + case 'iso646es': + return 'ES'; + + case 'csiso85spanish2': + case 'es2': + case 'isoir85': + case 'iso646es2': + return 'ES2'; + + case 'cseucfixwidjapanese': + case 'extendedunixcodefixedwidthforjapanese': + return 'Extended_UNIX_Code_Fixed_Width_for_Japanese'; + + case 'cseucpkdfmtjapanese': + case 'eucjp': + case 'extendedunixcodepackedformatforjapanese': + return 'Extended_UNIX_Code_Packed_Format_for_Japanese'; + + case 'gb18030': + return 'GB18030'; + + case 'cp936': + case 'gbk': + case 'ms936': + case 'windows936': + case 'csgb2312': + case 'gb2312': + case 'chinese': + case 'csiso58gb231280': + case 'gb231280': + case 'isoir58': + return 'GBK'; + + case 'cn': + case 'csiso57gb1988': + case 'gb198880': + case 'isoir57': + case 'iso646cn': + return 'GB_1988-80'; + + case 'csiso153gost1976874': + case 'gost1976874': + case 'isoir153': + case 'stsev35888': + return 'GOST_19768-74'; + + case 'csiso150': + case 'csiso150greekccitt': + case 'greekccitt': + case 'isoir150': + return 'greek-ccitt'; + + case 'csiso88greek7': + case 'greek7': + case 'isoir88': + return 'greek7'; + + case 'csiso18greek7old': + case 'greek7old': + case 'isoir18': + return 'greek7-old'; + + case 'cshpdesktop': + case 'hpdesktop': + return 'HP-DeskTop'; + + case 'cshplegal': + case 'hplegal': + return 'HP-Legal'; + + case 'cshpmath8': + case 'hpmath8': + return 'HP-Math8'; + + case 'cshppifont': + case 'hppifont': + return 'HP-Pi-font'; + + case 'cshproman8': + case 'hproman8': + case 'r8': + case 'roman8': + return 'hp-roman8'; + + case 'hzgb2312': + return 'HZ-GB-2312'; + + case 'csibmsymbols': + case 'ibmsymbols': + return 'IBM-Symbols'; + + case 'csibmthai': + case 'ibmthai': + return 'IBM-Thai'; + + case 'ccsid00858': + case 'cp00858': + case 'ibm00858': + case 'pcmultilingual850euro': + return 'IBM00858'; + + case 'ccsid00924': + case 'cp00924': + case 'ebcdiclatin9euro': + case 'ibm00924': + return 'IBM00924'; + + case 'ccsid01140': + case 'cp01140': + case 'ebcdicus37euro': + case 'ibm01140': + return 'IBM01140'; + + case 'ccsid01141': + case 'cp01141': + case 'ebcdicde273euro': + case 'ibm01141': + return 'IBM01141'; + + case 'ccsid01142': + case 'cp01142': + case 'ebcdicdk277euro': + case 'ebcdicno277euro': + case 'ibm01142': + return 'IBM01142'; + + case 'ccsid01143': + case 'cp01143': + case 'ebcdicfi278euro': + case 'ebcdicse278euro': + case 'ibm01143': + return 'IBM01143'; + + case 'ccsid01144': + case 'cp01144': + case 'ebcdicit280euro': + case 'ibm01144': + return 'IBM01144'; + + case 'ccsid01145': + case 'cp01145': + case 'ebcdices284euro': + case 'ibm01145': + return 'IBM01145'; + + case 'ccsid01146': + case 'cp01146': + case 'ebcdicgb285euro': + case 'ibm01146': + return 'IBM01146'; + + case 'ccsid01147': + case 'cp01147': + case 'ebcdicfr297euro': + case 'ibm01147': + return 'IBM01147'; + + case 'ccsid01148': + case 'cp01148': + case 'ebcdicinternational500euro': + case 'ibm01148': + return 'IBM01148'; + + case 'ccsid01149': + case 'cp01149': + case 'ebcdicis871euro': + case 'ibm01149': + return 'IBM01149'; + + case 'cp037': + case 'csibm037': + case 'ebcdiccpca': + case 'ebcdiccpnl': + case 'ebcdiccpus': + case 'ebcdiccpwt': + case 'ibm037': + return 'IBM037'; + + case 'cp038': + case 'csibm038': + case 'ebcdicint': + case 'ibm038': + return 'IBM038'; + + case 'cp273': + case 'csibm273': + case 'ibm273': + return 'IBM273'; + + case 'cp274': + case 'csibm274': + case 'ebcdicbe': + case 'ibm274': + return 'IBM274'; + + case 'cp275': + case 'csibm275': + case 'ebcdicbr': + case 'ibm275': + return 'IBM275'; + + case 'csibm277': + case 'ebcdiccpdk': + case 'ebcdiccpno': + case 'ibm277': + return 'IBM277'; + + case 'cp278': + case 'csibm278': + case 'ebcdiccpfi': + case 'ebcdiccpse': + case 'ibm278': + return 'IBM278'; + + case 'cp280': + case 'csibm280': + case 'ebcdiccpit': + case 'ibm280': + return 'IBM280'; + + case 'cp281': + case 'csibm281': + case 'ebcdicjpe': + case 'ibm281': + return 'IBM281'; + + case 'cp284': + case 'csibm284': + case 'ebcdiccpes': + case 'ibm284': + return 'IBM284'; + + case 'cp285': + case 'csibm285': + case 'ebcdiccpgb': + case 'ibm285': + return 'IBM285'; + + case 'cp290': + case 'csibm290': + case 'ebcdicjpkana': + case 'ibm290': + return 'IBM290'; + + case 'cp297': + case 'csibm297': + case 'ebcdiccpfr': + case 'ibm297': + return 'IBM297'; + + case 'cp420': + case 'csibm420': + case 'ebcdiccpar1': + case 'ibm420': + return 'IBM420'; + + case 'cp423': + case 'csibm423': + case 'ebcdiccpgr': + case 'ibm423': + return 'IBM423'; + + case 'cp424': + case 'csibm424': + case 'ebcdiccphe': + case 'ibm424': + return 'IBM424'; + + case '437': + case 'cp437': + case 'cspc8codepage437': + case 'ibm437': + return 'IBM437'; + + case 'cp500': + case 'csibm500': + case 'ebcdiccpbe': + case 'ebcdiccpch': + case 'ibm500': + return 'IBM500'; + + case 'cp775': + case 'cspc775baltic': + case 'ibm775': + return 'IBM775'; + + case '850': + case 'cp850': + case 'cspc850multilingual': + case 'ibm850': + return 'IBM850'; + + case '851': + case 'cp851': + case 'csibm851': + case 'ibm851': + return 'IBM851'; + + case '852': + case 'cp852': + case 'cspcp852': + case 'ibm852': + return 'IBM852'; + + case '855': + case 'cp855': + case 'csibm855': + case 'ibm855': + return 'IBM855'; + + case '857': + case 'cp857': + case 'csibm857': + case 'ibm857': + return 'IBM857'; + + case '860': + case 'cp860': + case 'csibm860': + case 'ibm860': + return 'IBM860'; + + case '861': + case 'cpis': + case 'cp861': + case 'csibm861': + case 'ibm861': + return 'IBM861'; + + case '862': + case 'cp862': + case 'cspc862latinhebrew': + case 'ibm862': + return 'IBM862'; + + case '863': + case 'cp863': + case 'csibm863': + case 'ibm863': + return 'IBM863'; + + case 'cp864': + case 'csibm864': + case 'ibm864': + return 'IBM864'; + + case '865': + case 'cp865': + case 'csibm865': + case 'ibm865': + return 'IBM865'; + + case '866': + case 'cp866': + case 'csibm866': + case 'ibm866': + return 'IBM866'; + + case 'cpar': + case 'cp868': + case 'csibm868': + case 'ibm868': + return 'IBM868'; + + case '869': + case 'cpgr': + case 'cp869': + case 'csibm869': + case 'ibm869': + return 'IBM869'; + + case 'cp870': + case 'csibm870': + case 'ebcdiccproece': + case 'ebcdiccpyu': + case 'ibm870': + return 'IBM870'; + + case 'cp871': + case 'csibm871': + case 'ebcdiccpis': + case 'ibm871': + return 'IBM871'; + + case 'cp880': + case 'csibm880': + case 'ebcdiccyrillic': + case 'ibm880': + return 'IBM880'; + + case 'cp891': + case 'csibm891': + case 'ibm891': + return 'IBM891'; + + case 'cp903': + case 'csibm903': + case 'ibm903': + return 'IBM903'; + + case '904': + case 'cp904': + case 'csibbm904': + case 'ibm904': + return 'IBM904'; + + case 'cp905': + case 'csibm905': + case 'ebcdiccptr': + case 'ibm905': + return 'IBM905'; + + case 'cp918': + case 'csibm918': + case 'ebcdiccpar2': + case 'ibm918': + return 'IBM918'; + + case 'cp1026': + case 'csibm1026': + case 'ibm1026': + return 'IBM1026'; + + case 'ibm1047': + case 'ibm1047': + return 'IBM1047'; + + case 'csiso143iecp271': + case 'iecp271': + case 'isoir143': + return 'IEC_P27-1'; + + case 'csiso49inis': + case 'inis': + case 'isoir49': + return 'INIS'; + + case 'csiso50inis8': + case 'inis8': + case 'isoir50': + return 'INIS-8'; + + case 'csiso51iniscyrillic': + case 'iniscyrillic': + case 'isoir51': + return 'INIS-cyrillic'; + + case 'csinvariant': + case 'invariant': + return 'INVARIANT'; + + case 'iso2022cn': + return 'ISO-2022-CN'; + + case 'iso2022cnext': + return 'ISO-2022-CN-EXT'; + + case 'csiso2022jp': + case 'iso2022jp': + return 'ISO-2022-JP'; + + case 'csiso2022jp2': + case 'iso2022jp2': + return 'ISO-2022-JP-2'; + + case 'csiso2022kr': + case 'iso2022kr': + return 'ISO-2022-KR'; + + case 'cswindows30latin1': + case 'iso88591windows30latin1': + return 'ISO-8859-1-Windows-3.0-Latin-1'; + + case 'cswindows31latin1': + case 'iso88591windows31latin1': + return 'ISO-8859-1-Windows-3.1-Latin-1'; + + case 'csisolatin2': + case 'iso88592': + case 'isoir101': + case 'iso88592': + case 'iso885921987': + case 'l2': + case 'latin2': + return 'ISO-8859-2'; + + case 'cswindows31latin2': + case 'iso88592windowslatin2': + return 'ISO-8859-2-Windows-Latin-2'; + + case 'csisolatin3': + case 'iso88593': + case 'isoir109': + case 'iso88593': + case 'iso885931988': + case 'l3': + case 'latin3': + return 'ISO-8859-3'; + + case 'csisolatin4': + case 'iso88594': + case 'isoir110': + case 'iso88594': + case 'iso885941988': + case 'l4': + case 'latin4': + return 'ISO-8859-4'; + + case 'csisolatincyrillic': + case 'cyrillic': + case 'iso88595': + case 'isoir144': + case 'iso88595': + case 'iso885951988': + return 'ISO-8859-5'; + + case 'arabic': + case 'asmo708': + case 'csisolatinarabic': + case 'ecma114': + case 'iso88596': + case 'isoir127': + case 'iso88596': + case 'iso885961987': + return 'ISO-8859-6'; + + case 'csiso88596e': + case 'iso88596e': + case 'iso88596e': + return 'ISO-8859-6-E'; + + case 'csiso88596i': + case 'iso88596i': + case 'iso88596i': + return 'ISO-8859-6-I'; + + case 'csisolatingreek': + case 'ecma118': + case 'elot928': + case 'greek': + case 'greek8': + case 'iso88597': + case 'isoir126': + case 'iso88597': + case 'iso885971987': + return 'ISO-8859-7'; + + case 'csisolatinhebrew': + case 'hebrew': + case 'iso88598': + case 'isoir138': + case 'iso88598': + case 'iso885981988': + return 'ISO-8859-8'; + + case 'csiso88598e': + case 'iso88598e': + case 'iso88598e': + return 'ISO-8859-8-E'; + + case 'csiso88598i': + case 'iso88598i': + case 'iso88598i': + return 'ISO-8859-8-I'; + + case 'cswindows31latin5': + case 'iso88599windowslatin5': + return 'ISO-8859-9-Windows-Latin-5'; + + case 'csisolatin6': + case 'iso885910': + case 'isoir157': + case 'iso8859101992': + case 'l6': + case 'latin6': + return 'ISO-8859-10'; + + case 'iso885913': + return 'ISO-8859-13'; + + case 'iso885914': + case 'isoceltic': + case 'isoir199': + case 'iso885914': + case 'iso8859141998': + case 'l8': + case 'latin8': + return 'ISO-8859-14'; + + case 'iso885915': + case 'iso885915': + case 'latin9': + return 'ISO-8859-15'; + + case 'iso885916': + case 'isoir226': + case 'iso885916': + case 'iso8859162001': + case 'l10': + case 'latin10': + return 'ISO-8859-16'; + + case 'iso10646j1': + return 'ISO-10646-J-1'; + + case 'csunicode': + case 'iso10646ucs2': + return 'ISO-10646-UCS-2'; + + case 'csucs4': + case 'iso10646ucs4': + return 'ISO-10646-UCS-4'; + + case 'csunicodeascii': + case 'iso10646ucsbasic': + return 'ISO-10646-UCS-Basic'; + + case 'csunicodelatin1': + case 'iso10646': + case 'iso10646unicodelatin1': + return 'ISO-10646-Unicode-Latin1'; + + case 'csiso10646utf1': + case 'iso10646utf1': + return 'ISO-10646-UTF-1'; + + case 'csiso115481': + case 'iso115481': + case 'iso115481': + case 'isotr115481': + return 'ISO-11548-1'; + + case 'csiso90': + case 'isoir90': + return 'iso-ir-90'; + + case 'csunicodeibm1261': + case 'isounicodeibm1261': + return 'ISO-Unicode-IBM-1261'; + + case 'csunicodeibm1264': + case 'isounicodeibm1264': + return 'ISO-Unicode-IBM-1264'; + + case 'csunicodeibm1265': + case 'isounicodeibm1265': + return 'ISO-Unicode-IBM-1265'; + + case 'csunicodeibm1268': + case 'isounicodeibm1268': + return 'ISO-Unicode-IBM-1268'; + + case 'csunicodeibm1276': + case 'isounicodeibm1276': + return 'ISO-Unicode-IBM-1276'; + + case 'csiso646basic1983': + case 'iso646basic1983': + case 'ref': + return 'ISO_646.basic:1983'; + + case 'csiso2intlrefversion': + case 'irv': + case 'isoir2': + case 'iso646irv1983': + return 'ISO_646.irv:1983'; + + case 'csiso2033': + case 'e13b': + case 'isoir98': + case 'iso20331983': + return 'ISO_2033-1983'; + + case 'csiso5427cyrillic': + case 'isoir37': + case 'iso5427': + return 'ISO_5427'; + + case 'isoir54': + case 'iso5427cyrillic1981': + case 'iso54271981': + return 'ISO_5427:1981'; + + case 'csiso5428greek': + case 'isoir55': + case 'iso54281980': + return 'ISO_5428:1980'; + + case 'csiso6937add': + case 'isoir152': + case 'iso6937225': + return 'ISO_6937-2-25'; + + case 'csisotextcomm': + case 'isoir142': + case 'iso69372add': + return 'ISO_6937-2-add'; + + case 'csiso8859supp': + case 'isoir154': + case 'iso8859supp': + case 'latin125': + return 'ISO_8859-supp'; + + case 'csiso10367box': + case 'isoir155': + case 'iso10367box': + return 'ISO_10367-box'; + + case 'csiso15italian': + case 'isoir15': + case 'iso646it': + case 'it': + return 'IT'; + + case 'csiso13jisc6220jp': + case 'isoir13': + case 'jisc62201969': + case 'jisc62201969jp': + case 'katakana': + case 'x02017': + return 'JIS_C6220-1969-jp'; + + case 'csiso14jisc6220ro': + case 'isoir14': + case 'iso646jp': + case 'jisc62201969ro': + case 'jp': + return 'JIS_C6220-1969-ro'; + + case 'csiso42jisc62261978': + case 'isoir42': + case 'jisc62261978': + return 'JIS_C6226-1978'; + + case 'csiso87jisx0208': + case 'isoir87': + case 'jisc62261983': + case 'jisx02081983': + case 'x0208': + return 'JIS_C6226-1983'; + + case 'csiso91jisc62291984a': + case 'isoir91': + case 'jisc62291984a': + case 'jpocra': + return 'JIS_C6229-1984-a'; + + case 'csiso92jisc62991984b': + case 'isoir92': + case 'iso646jpocrb': + case 'jisc62291984b': + case 'jpocrb': + return 'JIS_C6229-1984-b'; + + case 'csiso93jis62291984badd': + case 'isoir93': + case 'jisc62291984badd': + case 'jpocrbadd': + return 'JIS_C6229-1984-b-add'; + + case 'csiso94jis62291984hand': + case 'isoir94': + case 'jisc62291984hand': + case 'jpocrhand': + return 'JIS_C6229-1984-hand'; + + case 'csiso95jis62291984handadd': + case 'isoir95': + case 'jisc62291984handadd': + case 'jpocrhandadd': + return 'JIS_C6229-1984-hand-add'; + + case 'csiso96jisc62291984kana': + case 'isoir96': + case 'jisc62291984kana': + return 'JIS_C6229-1984-kana'; + + case 'csjisencoding': + case 'jisencoding': + return 'JIS_Encoding'; + + case 'cshalfwidthkatakana': + case 'jisx0201': + case 'x0201': + return 'JIS_X0201'; + + case 'csiso159jisx02121990': + case 'isoir159': + case 'jisx02121990': + case 'x0212': + return 'JIS_X0212-1990'; + + case 'csiso141jusib1002': + case 'isoir141': + case 'iso646yu': + case 'js': + case 'jusib1002': + case 'yu': + return 'JUS_I.B1.002'; + + case 'csiso147macedonian': + case 'isoir147': + case 'jusib1003mac': + case 'macedonian': + return 'JUS_I.B1.003-mac'; + + case 'csiso146serbian': + case 'isoir146': + case 'jusib1003serb': + case 'serbian': + return 'JUS_I.B1.003-serb'; + + case 'koi7switched': + return 'KOI7-switched'; + + case 'cskoi8r': + case 'koi8r': + return 'KOI8-R'; + + case 'koi8u': + return 'KOI8-U'; + + case 'csksc5636': + case 'iso646kr': + case 'ksc5636': + return 'KSC5636'; + + case 'cskz1048': + case 'kz1048': + case 'rk1048': + case 'strk10482002': + return 'KZ-1048'; + + case 'csiso19latingreek': + case 'isoir19': + case 'latingreek': + return 'latin-greek'; + + case 'csiso27latingreek1': + case 'isoir27': + case 'latingreek1': + return 'Latin-greek-1'; + + case 'csiso158lap': + case 'isoir158': + case 'lap': + case 'latinlap': + return 'latin-lap'; + + case 'csmacintosh': + case 'mac': + case 'macintosh': + return 'macintosh'; + + case 'csmicrosoftpublishing': + case 'microsoftpublishing': + return 'Microsoft-Publishing'; + + case 'csmnem': + case 'mnem': + return 'MNEM'; + + case 'csmnemonic': + case 'mnemonic': + return 'MNEMONIC'; + + case 'csiso86hungarian': + case 'hu': + case 'isoir86': + case 'iso646hu': + case 'msz77953': + return 'MSZ_7795.3'; + + case 'csnatsdano': + case 'isoir91': + case 'natsdano': + return 'NATS-DANO'; + + case 'csnatsdanoadd': + case 'isoir92': + case 'natsdanoadd': + return 'NATS-DANO-ADD'; + + case 'csnatssefi': + case 'isoir81': + case 'natssefi': + return 'NATS-SEFI'; + + case 'csnatssefiadd': + case 'isoir82': + case 'natssefiadd': + return 'NATS-SEFI-ADD'; + + case 'csiso151cuba': + case 'cuba': + case 'isoir151': + case 'iso646cu': + case 'ncnc001081': + return 'NC_NC00-10:81'; + + case 'csiso69french': + case 'fr': + case 'isoir69': + case 'iso646fr': + case 'nfz62010': + return 'NF_Z_62-010'; + + case 'csiso25french': + case 'isoir25': + case 'iso646fr1': + case 'nfz620101973': + return 'NF_Z_62-010_(1973)'; + + case 'csiso60danishnorwegian': + case 'csiso60norwegian1': + case 'isoir60': + case 'iso646no': + case 'no': + case 'ns45511': + return 'NS_4551-1'; + + case 'csiso61norwegian2': + case 'isoir61': + case 'iso646no2': + case 'no2': + case 'ns45512': + return 'NS_4551-2'; + + case 'osdebcdicdf03irv': + return 'OSD_EBCDIC_DF03_IRV'; + + case 'osdebcdicdf041': + return 'OSD_EBCDIC_DF04_1'; + + case 'osdebcdicdf0415': + return 'OSD_EBCDIC_DF04_15'; + + case 'cspc8danishnorwegian': + case 'pc8danishnorwegian': + return 'PC8-Danish-Norwegian'; + + case 'cspc8turkish': + case 'pc8turkish': + return 'PC8-Turkish'; + + case 'csiso16portuguese': + case 'isoir16': + case 'iso646pt': + case 'pt': + return 'PT'; + + case 'csiso84portuguese2': + case 'isoir84': + case 'iso646pt2': + case 'pt2': + return 'PT2'; + + case 'cp154': + case 'csptcp154': + case 'cyrillicasian': + case 'pt154': + case 'ptcp154': + return 'PTCP154'; + + case 'scsu': + return 'SCSU'; + + case 'csiso10swedish': + case 'fi': + case 'isoir10': + case 'iso646fi': + case 'iso646se': + case 'se': + case 'sen850200b': + return 'SEN_850200_B'; + + case 'csiso11swedishfornames': + case 'isoir11': + case 'iso646se2': + case 'se2': + case 'sen850200c': + return 'SEN_850200_C'; + + case 'csshiftjis': + case 'mskanji': + case 'shiftjis': + return 'Shift_JIS'; + + case 'csiso102t617bit': + case 'isoir102': + case 't617bit': + return 'T.61-7bit'; + + case 'csiso103t618bit': + case 'isoir103': + case 't61': + case 't618bit': + return 'T.61-8bit'; + + case 'csiso128t101g2': + case 'isoir128': + case 't101g2': + return 'T.101-G2'; + + case 'cstscii': + case 'tscii': + return 'TSCII'; + + case 'csunicode11': + case 'unicode11': + return 'UNICODE-1-1'; + + case 'csunicode11utf7': + case 'unicode11utf7': + return 'UNICODE-1-1-UTF-7'; + + case 'csunknown8bit': + case 'unknown8bit': + return 'UNKNOWN-8BIT'; + + case 'ansix341968': + case 'ansix341986': + case 'ascii': + case 'cp367': + case 'csascii': + case 'ibm367': + case 'isoir6': + case 'iso646us': + case 'iso646irv1991': + case 'us': + case 'usascii': + return 'US-ASCII'; + + case 'csusdk': + case 'usdk': + return 'us-dk'; + + case 'utf7': + return 'UTF-7'; + + case 'utf8': + return 'UTF-8'; + + case 'utf16': + return 'UTF-16'; + + case 'utf16be': + return 'UTF-16BE'; + + case 'utf16le': + return 'UTF-16LE'; + + case 'utf32': + return 'UTF-32'; + + case 'utf32be': + return 'UTF-32BE'; + + case 'utf32le': + return 'UTF-32LE'; + + case 'csventurainternational': + case 'venturainternational': + return 'Ventura-International'; + + case 'csventuramath': + case 'venturamath': + return 'Ventura-Math'; + + case 'csventuraus': + case 'venturaus': + return 'Ventura-US'; + + case 'csiso70videotexsupp1': + case 'isoir70': + case 'videotexsuppl': + return 'videotex-suppl'; + + case 'csviqr': + case 'viqr': + return 'VIQR'; + + case 'csviscii': + case 'viscii': + return 'VISCII'; + + case 'cswindows31j': + case 'windows31j': + return 'Windows-31J'; + + case 'iso885911': + case 'tis620': + return 'Windows-874'; + + case 'cseuckr': + case 'euckr': + case 'windows949': + case 'csksc56011987': + case 'isoir149': + case 'korean': + case 'ksc5601': + case 'ksc56011987': + case 'ksc56011989': + return 'Windows-949'; + + case 'windows1250': + return 'windows-1250'; + + case 'windows1251': + return 'windows-1251'; + + case 'cp819': + case 'csisolatin1': + case 'ibm819': + case 'iso88591': + case 'isoir100': + case 'iso885911987': + case 'l1': + case 'latin1': + case 'windows1252': + return 'Windows-1252'; + + case 'windows1252': + return 'windows-1252'; + + case 'windows1253': + return 'windows-1253'; + + case 'csisolatin5': + case 'iso88599': + case 'isoir148': + case 'iso885991989': + case 'l5': + case 'latin5': + case 'windows1254': + return 'Windows-1254'; + + case 'windows1254': + return 'windows-1254'; + + case 'windows1255': + return 'windows-1255'; + + case 'windows1256': + return 'windows-1256'; + + case 'windows1257': + return 'windows-1257'; + + case 'windows1258': + return 'windows-1258'; + + default: + return $charset; + } + } + + function get_curl_version() + { + if (is_array($curl = curl_version())) + { + $curl = $curl['version']; + } + elseif (substr($curl, 0, 5) == 'curl/') + { + $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5)); + } + elseif (substr($curl, 0, 8) == 'libcurl/') + { + $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8)); + } + else + { + $curl = 0; + } + return $curl; + } + + function is_subclass_of($class1, $class2) + { + if (func_num_args() != 2) + { + trigger_error('Wrong parameter count for SimplePie_Misc::is_subclass_of()', E_USER_WARNING); + } + elseif (version_compare(PHP_VERSION, '5.0.3', '>=') || is_object($class1)) + { + return is_subclass_of($class1, $class2); + } + elseif (is_string($class1) && is_string($class2)) + { + if (class_exists($class1)) + { + if (class_exists($class2)) + { + $class2 = strtolower($class2); + while ($class1 = strtolower(get_parent_class($class1))) + { + if ($class1 == $class2) + { + return true; + } + } + } + } + else + { + trigger_error('Unknown class passed as parameter', E_USER_WARNNG); + } + } + return false; + } + + /** + * Strip HTML comments + * + * @access public + * @param string $data Data to strip comments from + * @return string Comment stripped string + */ + function strip_comments($data) + { + $output = ''; + while (($start = strpos($data, '', $start)) !== false) + { + $data = substr_replace($data, '', 0, $end + 3); + } + else + { + $data = ''; + } + } + return $output . $data; + } + + function parse_date($dt) + { + $parser = SimplePie_Parse_Date::get(); + return $parser->parse($dt); + } + + /** + * Decode HTML entities + * + * @static + * @access public + * @param string $data Input data + * @return string Output data + */ + function entities_decode($data) + { + $decoder = new SimplePie_Decode_HTML_Entities($data); + return $decoder->parse(); + } + + /** + * Remove RFC822 comments + * + * @access public + * @param string $data Data to strip comments from + * @return string Comment stripped string + */ + function uncomment_rfc822($string) + { + $string = (string) $string; + $position = 0; + $length = strlen($string); + $depth = 0; + + $output = ''; + + while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) + { + $output .= substr($string, $position, $pos - $position); + $position = $pos + 1; + if ($string[$pos - 1] !== '\\') + { + $depth++; + while ($depth && $position < $length) + { + $position += strcspn($string, '()', $position); + if ($string[$position - 1] === '\\') + { + $position++; + continue; + } + elseif (isset($string[$position])) + { + switch ($string[$position]) + { + case '(': + $depth++; + break; + + case ')': + $depth--; + break; + } + $position++; + } + else + { + break; + } + } + } + else + { + $output .= '('; + } + } + $output .= substr($string, $position); + + return $output; + } + + function parse_mime($mime) + { + if (($pos = strpos($mime, ';')) === false) + { + return trim($mime); + } + else + { + return trim(substr($mime, 0, $pos)); + } + } + + function htmlspecialchars_decode($string, $quote_style) + { + if (function_exists('htmlspecialchars_decode')) + { + return htmlspecialchars_decode($string, $quote_style); + } + else + { + return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style))); + } + } + + function atom_03_construct_type($attribs) + { + if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) == 'base64')) + { + $mode = SIMPLEPIE_CONSTRUCT_BASE64; + } + else + { + $mode = SIMPLEPIE_CONSTRUCT_NONE; + } + if (isset($attribs['']['type'])) + { + switch (strtolower(trim($attribs['']['type']))) + { + case 'text': + case 'text/plain': + return SIMPLEPIE_CONSTRUCT_TEXT | $mode; + + case 'html': + case 'text/html': + return SIMPLEPIE_CONSTRUCT_HTML | $mode; + + case 'xhtml': + case 'application/xhtml+xml': + return SIMPLEPIE_CONSTRUCT_XHTML | $mode; + + default: + return SIMPLEPIE_CONSTRUCT_NONE | $mode; + } + } + else + { + return SIMPLEPIE_CONSTRUCT_TEXT | $mode; + } + } + + function atom_10_construct_type($attribs) + { + if (isset($attribs['']['type'])) + { + switch (strtolower(trim($attribs['']['type']))) + { + case 'text': + return SIMPLEPIE_CONSTRUCT_TEXT; + + case 'html': + return SIMPLEPIE_CONSTRUCT_HTML; + + case 'xhtml': + return SIMPLEPIE_CONSTRUCT_XHTML; + + default: + return SIMPLEPIE_CONSTRUCT_NONE; + } + } + return SIMPLEPIE_CONSTRUCT_TEXT; + } + + function atom_10_content_construct_type($attribs) + { + if (isset($attribs['']['type'])) + { + $type = strtolower(trim($attribs['']['type'])); + switch ($type) + { + case 'text': + return SIMPLEPIE_CONSTRUCT_TEXT; + + case 'html': + return SIMPLEPIE_CONSTRUCT_HTML; + + case 'xhtml': + return SIMPLEPIE_CONSTRUCT_XHTML; + } + if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) == 'text/') + { + return SIMPLEPIE_CONSTRUCT_NONE; + } + else + { + return SIMPLEPIE_CONSTRUCT_BASE64; + } + } + else + { + return SIMPLEPIE_CONSTRUCT_TEXT; + } + } + + function is_isegment_nz_nc($string) + { + return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string); + } + + function space_separated_tokens($string) + { + $space_characters = "\x20\x09\x0A\x0B\x0C\x0D"; + $string_length = strlen($string); + + $position = strspn($string, $space_characters); + $tokens = array(); + + while ($position < $string_length) + { + $len = strcspn($string, $space_characters, $position); + $tokens[] = substr($string, $position, $len); + $position += $len; + $position += strspn($string, $space_characters, $position); + } + + return $tokens; + } + + function array_unique($array) + { + if (version_compare(PHP_VERSION, '5.2', '>=')) + { + return array_unique($array); + } + else + { + $array = (array) $array; + $new_array = array(); + $new_array_strings = array(); + foreach ($array as $key => $value) + { + if (is_object($value)) + { + if (method_exists($value, '__toString')) + { + $cmp = $value->__toString(); + } + else + { + trigger_error('Object of class ' . get_class($value) . ' could not be converted to string', E_USER_ERROR); + } + } + elseif (is_array($value)) + { + $cmp = (string) reset($value); + } + else + { + $cmp = (string) $value; + } + if (!in_array($cmp, $new_array_strings)) + { + $new_array[$key] = $value; + $new_array_strings[] = $cmp; + } + } + return $new_array; + } + } + + /** + * Converts a unicode codepoint to a UTF-8 character + * + * @static + * @access public + * @param int $codepoint Unicode codepoint + * @return string UTF-8 character + */ + function codepoint_to_utf8($codepoint) + { + static $cache = array(); + $codepoint = (int) $codepoint; + if (isset($cache[$codepoint])) + { + return $cache[$codepoint]; + } + elseif ($codepoint < 0) + { + return $cache[$codepoint] = false; + } + else if ($codepoint <= 0x7f) + { + return $cache[$codepoint] = chr($codepoint); + } + else if ($codepoint <= 0x7ff) + { + return $cache[$codepoint] = chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f)); + } + else if ($codepoint <= 0xffff) + { + return $cache[$codepoint] = chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); + } + else if ($codepoint <= 0x10ffff) + { + return $cache[$codepoint] = chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); + } + else + { + // U+FFFD REPLACEMENT CHARACTER + return $cache[$codepoint] = "\xEF\xBF\xBD"; + } + } + + /** + * Re-implementation of PHP 5's stripos() + * + * Returns the numeric position of the first occurrence of needle in the + * haystack string. + * + * @static + * @access string + * @param object $haystack + * @param string $needle Note that the needle may be a string of one or more + * characters. If needle is not a string, it is converted to an integer + * and applied as the ordinal value of a character. + * @param int $offset The optional offset parameter allows you to specify which + * character in haystack to start searching. The position returned is still + * relative to the beginning of haystack. + * @return bool If needle is not found, stripos() will return boolean false. + */ + function stripos($haystack, $needle, $offset = 0) + { + if (function_exists('stripos')) + { + return stripos($haystack, $needle, $offset); + } + else + { + if (is_string($needle)) + { + $needle = strtolower($needle); + } + elseif (is_int($needle) || is_bool($needle) || is_double($needle)) + { + $needle = strtolower(chr($needle)); + } + else + { + trigger_error('needle is not a string or an integer', E_USER_WARNING); + return false; + } + + return strpos(strtolower($haystack), $needle, $offset); + } + } + + /** + * Similar to parse_str() + * + * Returns an associative array of name/value pairs, where the value is an + * array of values that have used the same name + * + * @static + * @access string + * @param string $str The input string. + * @return array + */ + function parse_str($str) + { + $return = array(); + $str = explode('&', $str); + + foreach ($str as $section) + { + if (strpos($section, '=') !== false) + { + list($name, $value) = explode('=', $section, 2); + $return[urldecode($name)][] = urldecode($value); + } + else + { + $return[urldecode($section)][] = null; + } + } + + return $return; + } + + /** + * Detect XML encoding, as per XML 1.0 Appendix F.1 + * + * @todo Add support for EBCDIC + * @param string $data XML data + * @return array Possible encodings + */ + function xml_encoding($data) + { + // UTF-32 Big Endian BOM + if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") + { + $encoding[] = 'UTF-32BE'; + } + // UTF-32 Little Endian BOM + elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") + { + $encoding[] = 'UTF-32LE'; + } + // UTF-16 Big Endian BOM + elseif (substr($data, 0, 2) === "\xFE\xFF") + { + $encoding[] = 'UTF-16BE'; + } + // UTF-16 Little Endian BOM + elseif (substr($data, 0, 2) === "\xFF\xFE") + { + $encoding[] = 'UTF-16LE'; + } + // UTF-8 BOM + elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") + { + $encoding[] = 'UTF-8'; + } + // UTF-32 Big Endian Without BOM + elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C") + { + if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E")) + { + $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8')); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-32BE'; + } + // UTF-32 Little Endian Without BOM + elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00") + { + if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00")) + { + $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8')); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-32LE'; + } + // UTF-16 Big Endian Without BOM + elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C") + { + if ($pos = strpos($data, "\x00\x3F\x00\x3E")) + { + $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8')); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-16BE'; + } + // UTF-16 Little Endian Without BOM + elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00") + { + if ($pos = strpos($data, "\x3F\x00\x3E\x00")) + { + $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8')); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-16LE'; + } + // US-ASCII (or superset) + elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C") + { + if ($pos = strpos($data, "\x3F\x3E")) + { + $parser = new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5)); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-8'; + } + // Fallback to UTF-8 + else + { + $encoding[] = 'UTF-8'; + } + return $encoding; + } +} + +/** + * Decode HTML Entities + * + * This implements HTML5 as of revision 967 (2007-06-28) + * + * @package SimplePie + */ +class SimplePie_Decode_HTML_Entities +{ + /** + * Data to be parsed + * + * @access private + * @var string + */ + var $data = ''; + + /** + * Currently consumed bytes + * + * @access private + * @var string + */ + var $consumed = ''; + + /** + * Position of the current byte being parsed + * + * @access private + * @var int + */ + var $position = 0; + + /** + * Create an instance of the class with the input data + * + * @access public + * @param string $data Input data + */ + function SimplePie_Decode_HTML_Entities($data) + { + $this->data = $data; + } + + /** + * Parse the input data + * + * @access public + * @return string Output data + */ + function parse() + { + while (($this->position = strpos($this->data, '&', $this->position)) !== false) + { + $this->consume(); + $this->entity(); + $this->consumed = ''; + } + return $this->data; + } + + /** + * Consume the next byte + * + * @access private + * @return mixed The next byte, or false, if there is no more data + */ + function consume() + { + if (isset($this->data[$this->position])) + { + $this->consumed .= $this->data[$this->position]; + return $this->data[$this->position++]; + } + else + { + $this->consumed = false; + return false; + } + } + + /** + * Consume a range of characters + * + * @access private + * @param string $chars Characters to consume + * @return mixed A series of characters that match the range, or false + */ + function consume_range($chars) + { + if ($len = strspn($this->data, $chars, $this->position)) + { + $data = substr($this->data, $this->position, $len); + $this->consumed .= $data; + $this->position += $len; + return $data; + } + else + { + $this->consumed = false; + return false; + } + } + + /** + * Unconsume one byte + * + * @access private + */ + function unconsume() + { + $this->consumed = substr($this->consumed, 0, -1); + $this->position--; + } + + /** + * Decode an entity + * + * @access private + */ + function entity() + { + switch ($this->consume()) + { + case "\x09": + case "\x0A": + case "\x0B": + case "\x0B": + case "\x0C": + case "\x20": + case "\x3C": + case "\x26": + case false: + break; + + case "\x23": + switch ($this->consume()) + { + case "\x78": + case "\x58": + $range = '0123456789ABCDEFabcdef'; + $hex = true; + break; + + default: + $range = '0123456789'; + $hex = false; + $this->unconsume(); + break; + } + + if ($codepoint = $this->consume_range($range)) + { + static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8"); + + if ($hex) + { + $codepoint = hexdec($codepoint); + } + else + { + $codepoint = intval($codepoint); + } + + if (isset($windows_1252_specials[$codepoint])) + { + $replacement = $windows_1252_specials[$codepoint]; + } + else + { + $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint); + } + + if ($this->consume() != ';') + { + $this->unconsume(); + } + + $consumed_length = strlen($this->consumed); + $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length); + $this->position += strlen($replacement) - $consumed_length; + } + break; + + default: + static $entities = array('Aacute' => "\xC3\x81", 'aacute' => "\xC3\xA1", 'Aacute;' => "\xC3\x81", 'aacute;' => "\xC3\xA1", 'Acirc' => "\xC3\x82", 'acirc' => "\xC3\xA2", 'Acirc;' => "\xC3\x82", 'acirc;' => "\xC3\xA2", 'acute' => "\xC2\xB4", 'acute;' => "\xC2\xB4", 'AElig' => "\xC3\x86", 'aelig' => "\xC3\xA6", 'AElig;' => "\xC3\x86", 'aelig;' => "\xC3\xA6", 'Agrave' => "\xC3\x80", 'agrave' => "\xC3\xA0", 'Agrave;' => "\xC3\x80", 'agrave;' => "\xC3\xA0", 'alefsym;' => "\xE2\x84\xB5", 'Alpha;' => "\xCE\x91", 'alpha;' => "\xCE\xB1", 'AMP' => "\x26", 'amp' => "\x26", 'AMP;' => "\x26", 'amp;' => "\x26", 'and;' => "\xE2\x88\xA7", 'ang;' => "\xE2\x88\xA0", 'apos;' => "\x27", 'Aring' => "\xC3\x85", 'aring' => "\xC3\xA5", 'Aring;' => "\xC3\x85", 'aring;' => "\xC3\xA5", 'asymp;' => "\xE2\x89\x88", 'Atilde' => "\xC3\x83", 'atilde' => "\xC3\xA3", 'Atilde;' => "\xC3\x83", 'atilde;' => "\xC3\xA3", 'Auml' => "\xC3\x84", 'auml' => "\xC3\xA4", 'Auml;' => "\xC3\x84", 'auml;' => "\xC3\xA4", 'bdquo;' => "\xE2\x80\x9E", 'Beta;' => "\xCE\x92", 'beta;' => "\xCE\xB2", 'brvbar' => "\xC2\xA6", 'brvbar;' => "\xC2\xA6", 'bull;' => "\xE2\x80\xA2", 'cap;' => "\xE2\x88\xA9", 'Ccedil' => "\xC3\x87", 'ccedil' => "\xC3\xA7", 'Ccedil;' => "\xC3\x87", 'ccedil;' => "\xC3\xA7", 'cedil' => "\xC2\xB8", 'cedil;' => "\xC2\xB8", 'cent' => "\xC2\xA2", 'cent;' => "\xC2\xA2", 'Chi;' => "\xCE\xA7", 'chi;' => "\xCF\x87", 'circ;' => "\xCB\x86", 'clubs;' => "\xE2\x99\xA3", 'cong;' => "\xE2\x89\x85", 'COPY' => "\xC2\xA9", 'copy' => "\xC2\xA9", 'COPY;' => "\xC2\xA9", 'copy;' => "\xC2\xA9", 'crarr;' => "\xE2\x86\xB5", 'cup;' => "\xE2\x88\xAA", 'curren' => "\xC2\xA4", 'curren;' => "\xC2\xA4", 'Dagger;' => "\xE2\x80\xA1", 'dagger;' => "\xE2\x80\xA0", 'dArr;' => "\xE2\x87\x93", 'darr;' => "\xE2\x86\x93", 'deg' => "\xC2\xB0", 'deg;' => "\xC2\xB0", 'Delta;' => "\xCE\x94", 'delta;' => "\xCE\xB4", 'diams;' => "\xE2\x99\xA6", 'divide' => "\xC3\xB7", 'divide;' => "\xC3\xB7", 'Eacute' => "\xC3\x89", 'eacute' => "\xC3\xA9", 'Eacute;' => "\xC3\x89", 'eacute;' => "\xC3\xA9", 'Ecirc' => "\xC3\x8A", 'ecirc' => "\xC3\xAA", 'Ecirc;' => "\xC3\x8A", 'ecirc;' => "\xC3\xAA", 'Egrave' => "\xC3\x88", 'egrave' => "\xC3\xA8", 'Egrave;' => "\xC3\x88", 'egrave;' => "\xC3\xA8", 'empty;' => "\xE2\x88\x85", 'emsp;' => "\xE2\x80\x83", 'ensp;' => "\xE2\x80\x82", 'Epsilon;' => "\xCE\x95", 'epsilon;' => "\xCE\xB5", 'equiv;' => "\xE2\x89\xA1", 'Eta;' => "\xCE\x97", 'eta;' => "\xCE\xB7", 'ETH' => "\xC3\x90", 'eth' => "\xC3\xB0", 'ETH;' => "\xC3\x90", 'eth;' => "\xC3\xB0", 'Euml' => "\xC3\x8B", 'euml' => "\xC3\xAB", 'Euml;' => "\xC3\x8B", 'euml;' => "\xC3\xAB", 'euro;' => "\xE2\x82\xAC", 'exist;' => "\xE2\x88\x83", 'fnof;' => "\xC6\x92", 'forall;' => "\xE2\x88\x80", 'frac12' => "\xC2\xBD", 'frac12;' => "\xC2\xBD", 'frac14' => "\xC2\xBC", 'frac14;' => "\xC2\xBC", 'frac34' => "\xC2\xBE", 'frac34;' => "\xC2\xBE", 'frasl;' => "\xE2\x81\x84", 'Gamma;' => "\xCE\x93", 'gamma;' => "\xCE\xB3", 'ge;' => "\xE2\x89\xA5", 'GT' => "\x3E", 'gt' => "\x3E", 'GT;' => "\x3E", 'gt;' => "\x3E", 'hArr;' => "\xE2\x87\x94", 'harr;' => "\xE2\x86\x94", 'hearts;' => "\xE2\x99\xA5", 'hellip;' => "\xE2\x80\xA6", 'Iacute' => "\xC3\x8D", 'iacute' => "\xC3\xAD", 'Iacute;' => "\xC3\x8D", 'iacute;' => "\xC3\xAD", 'Icirc' => "\xC3\x8E", 'icirc' => "\xC3\xAE", 'Icirc;' => "\xC3\x8E", 'icirc;' => "\xC3\xAE", 'iexcl' => "\xC2\xA1", 'iexcl;' => "\xC2\xA1", 'Igrave' => "\xC3\x8C", 'igrave' => "\xC3\xAC", 'Igrave;' => "\xC3\x8C", 'igrave;' => "\xC3\xAC", 'image;' => "\xE2\x84\x91", 'infin;' => "\xE2\x88\x9E", 'int;' => "\xE2\x88\xAB", 'Iota;' => "\xCE\x99", 'iota;' => "\xCE\xB9", 'iquest' => "\xC2\xBF", 'iquest;' => "\xC2\xBF", 'isin;' => "\xE2\x88\x88", 'Iuml' => "\xC3\x8F", 'iuml' => "\xC3\xAF", 'Iuml;' => "\xC3\x8F", 'iuml;' => "\xC3\xAF", 'Kappa;' => "\xCE\x9A", 'kappa;' => "\xCE\xBA", 'Lambda;' => "\xCE\x9B", 'lambda;' => "\xCE\xBB", 'lang;' => "\xE3\x80\x88", 'laquo' => "\xC2\xAB", 'laquo;' => "\xC2\xAB", 'lArr;' => "\xE2\x87\x90", 'larr;' => "\xE2\x86\x90", 'lceil;' => "\xE2\x8C\x88", 'ldquo;' => "\xE2\x80\x9C", 'le;' => "\xE2\x89\xA4", 'lfloor;' => "\xE2\x8C\x8A", 'lowast;' => "\xE2\x88\x97", 'loz;' => "\xE2\x97\x8A", 'lrm;' => "\xE2\x80\x8E", 'lsaquo;' => "\xE2\x80\xB9", 'lsquo;' => "\xE2\x80\x98", 'LT' => "\x3C", 'lt' => "\x3C", 'LT;' => "\x3C", 'lt;' => "\x3C", 'macr' => "\xC2\xAF", 'macr;' => "\xC2\xAF", 'mdash;' => "\xE2\x80\x94", 'micro' => "\xC2\xB5", 'micro;' => "\xC2\xB5", 'middot' => "\xC2\xB7", 'middot;' => "\xC2\xB7", 'minus;' => "\xE2\x88\x92", 'Mu;' => "\xCE\x9C", 'mu;' => "\xCE\xBC", 'nabla;' => "\xE2\x88\x87", 'nbsp' => "\xC2\xA0", 'nbsp;' => "\xC2\xA0", 'ndash;' => "\xE2\x80\x93", 'ne;' => "\xE2\x89\xA0", 'ni;' => "\xE2\x88\x8B", 'not' => "\xC2\xAC", 'not;' => "\xC2\xAC", 'notin;' => "\xE2\x88\x89", 'nsub;' => "\xE2\x8A\x84", 'Ntilde' => "\xC3\x91", 'ntilde' => "\xC3\xB1", 'Ntilde;' => "\xC3\x91", 'ntilde;' => "\xC3\xB1", 'Nu;' => "\xCE\x9D", 'nu;' => "\xCE\xBD", 'Oacute' => "\xC3\x93", 'oacute' => "\xC3\xB3", 'Oacute;' => "\xC3\x93", 'oacute;' => "\xC3\xB3", 'Ocirc' => "\xC3\x94", 'ocirc' => "\xC3\xB4", 'Ocirc;' => "\xC3\x94", 'ocirc;' => "\xC3\xB4", 'OElig;' => "\xC5\x92", 'oelig;' => "\xC5\x93", 'Ograve' => "\xC3\x92", 'ograve' => "\xC3\xB2", 'Ograve;' => "\xC3\x92", 'ograve;' => "\xC3\xB2", 'oline;' => "\xE2\x80\xBE", 'Omega;' => "\xCE\xA9", 'omega;' => "\xCF\x89", 'Omicron;' => "\xCE\x9F", 'omicron;' => "\xCE\xBF", 'oplus;' => "\xE2\x8A\x95", 'or;' => "\xE2\x88\xA8", 'ordf' => "\xC2\xAA", 'ordf;' => "\xC2\xAA", 'ordm' => "\xC2\xBA", 'ordm;' => "\xC2\xBA", 'Oslash' => "\xC3\x98", 'oslash' => "\xC3\xB8", 'Oslash;' => "\xC3\x98", 'oslash;' => "\xC3\xB8", 'Otilde' => "\xC3\x95", 'otilde' => "\xC3\xB5", 'Otilde;' => "\xC3\x95", 'otilde;' => "\xC3\xB5", 'otimes;' => "\xE2\x8A\x97", 'Ouml' => "\xC3\x96", 'ouml' => "\xC3\xB6", 'Ouml;' => "\xC3\x96", 'ouml;' => "\xC3\xB6", 'para' => "\xC2\xB6", 'para;' => "\xC2\xB6", 'part;' => "\xE2\x88\x82", 'permil;' => "\xE2\x80\xB0", 'perp;' => "\xE2\x8A\xA5", 'Phi;' => "\xCE\xA6", 'phi;' => "\xCF\x86", 'Pi;' => "\xCE\xA0", 'pi;' => "\xCF\x80", 'piv;' => "\xCF\x96", 'plusmn' => "\xC2\xB1", 'plusmn;' => "\xC2\xB1", 'pound' => "\xC2\xA3", 'pound;' => "\xC2\xA3", 'Prime;' => "\xE2\x80\xB3", 'prime;' => "\xE2\x80\xB2", 'prod;' => "\xE2\x88\x8F", 'prop;' => "\xE2\x88\x9D", 'Psi;' => "\xCE\xA8", 'psi;' => "\xCF\x88", 'QUOT' => "\x22", 'quot' => "\x22", 'QUOT;' => "\x22", 'quot;' => "\x22", 'radic;' => "\xE2\x88\x9A", 'rang;' => "\xE3\x80\x89", 'raquo' => "\xC2\xBB", 'raquo;' => "\xC2\xBB", 'rArr;' => "\xE2\x87\x92", 'rarr;' => "\xE2\x86\x92", 'rceil;' => "\xE2\x8C\x89", 'rdquo;' => "\xE2\x80\x9D", 'real;' => "\xE2\x84\x9C", 'REG' => "\xC2\xAE", 'reg' => "\xC2\xAE", 'REG;' => "\xC2\xAE", 'reg;' => "\xC2\xAE", 'rfloor;' => "\xE2\x8C\x8B", 'Rho;' => "\xCE\xA1", 'rho;' => "\xCF\x81", 'rlm;' => "\xE2\x80\x8F", 'rsaquo;' => "\xE2\x80\xBA", 'rsquo;' => "\xE2\x80\x99", 'sbquo;' => "\xE2\x80\x9A", 'Scaron;' => "\xC5\xA0", 'scaron;' => "\xC5\xA1", 'sdot;' => "\xE2\x8B\x85", 'sect' => "\xC2\xA7", 'sect;' => "\xC2\xA7", 'shy' => "\xC2\xAD", 'shy;' => "\xC2\xAD", 'Sigma;' => "\xCE\xA3", 'sigma;' => "\xCF\x83", 'sigmaf;' => "\xCF\x82", 'sim;' => "\xE2\x88\xBC", 'spades;' => "\xE2\x99\xA0", 'sub;' => "\xE2\x8A\x82", 'sube;' => "\xE2\x8A\x86", 'sum;' => "\xE2\x88\x91", 'sup;' => "\xE2\x8A\x83", 'sup1' => "\xC2\xB9", 'sup1;' => "\xC2\xB9", 'sup2' => "\xC2\xB2", 'sup2;' => "\xC2\xB2", 'sup3' => "\xC2\xB3", 'sup3;' => "\xC2\xB3", 'supe;' => "\xE2\x8A\x87", 'szlig' => "\xC3\x9F", 'szlig;' => "\xC3\x9F", 'Tau;' => "\xCE\xA4", 'tau;' => "\xCF\x84", 'there4;' => "\xE2\x88\xB4", 'Theta;' => "\xCE\x98", 'theta;' => "\xCE\xB8", 'thetasym;' => "\xCF\x91", 'thinsp;' => "\xE2\x80\x89", 'THORN' => "\xC3\x9E", 'thorn' => "\xC3\xBE", 'THORN;' => "\xC3\x9E", 'thorn;' => "\xC3\xBE", 'tilde;' => "\xCB\x9C", 'times' => "\xC3\x97", 'times;' => "\xC3\x97", 'TRADE;' => "\xE2\x84\xA2", 'trade;' => "\xE2\x84\xA2", 'Uacute' => "\xC3\x9A", 'uacute' => "\xC3\xBA", 'Uacute;' => "\xC3\x9A", 'uacute;' => "\xC3\xBA", 'uArr;' => "\xE2\x87\x91", 'uarr;' => "\xE2\x86\x91", 'Ucirc' => "\xC3\x9B", 'ucirc' => "\xC3\xBB", 'Ucirc;' => "\xC3\x9B", 'ucirc;' => "\xC3\xBB", 'Ugrave' => "\xC3\x99", 'ugrave' => "\xC3\xB9", 'Ugrave;' => "\xC3\x99", 'ugrave;' => "\xC3\xB9", 'uml' => "\xC2\xA8", 'uml;' => "\xC2\xA8", 'upsih;' => "\xCF\x92", 'Upsilon;' => "\xCE\xA5", 'upsilon;' => "\xCF\x85", 'Uuml' => "\xC3\x9C", 'uuml' => "\xC3\xBC", 'Uuml;' => "\xC3\x9C", 'uuml;' => "\xC3\xBC", 'weierp;' => "\xE2\x84\x98", 'Xi;' => "\xCE\x9E", 'xi;' => "\xCE\xBE", 'Yacute' => "\xC3\x9D", 'yacute' => "\xC3\xBD", 'Yacute;' => "\xC3\x9D", 'yacute;' => "\xC3\xBD", 'yen' => "\xC2\xA5", 'yen;' => "\xC2\xA5", 'yuml' => "\xC3\xBF", 'Yuml;' => "\xC5\xB8", 'yuml;' => "\xC3\xBF", 'Zeta;' => "\xCE\x96", 'zeta;' => "\xCE\xB6", 'zwj;' => "\xE2\x80\x8D", 'zwnj;' => "\xE2\x80\x8C"); + + for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++) + { + $consumed = substr($this->consumed, 1); + if (isset($entities[$consumed])) + { + $match = $consumed; + } + } + + if ($match !== null) + { + $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1); + $this->position += strlen($entities[$match]) - strlen($consumed) - 1; + } + break; + } + } +} + +/** + * Date Parser + * + * @package SimplePie + */ +class SimplePie_Parse_Date +{ + /** + * Input data + * + * @access protected + * @var string + */ + var $date; + + /** + * List of days, calendar day name => ordinal day number in the week + * + * @access protected + * @var array + */ + var $day = array( + // English + 'mon' => 1, + 'monday' => 1, + 'tue' => 2, + 'tuesday' => 2, + 'wed' => 3, + 'wednesday' => 3, + 'thu' => 4, + 'thursday' => 4, + 'fri' => 5, + 'friday' => 5, + 'sat' => 6, + 'saturday' => 6, + 'sun' => 7, + 'sunday' => 7, + // Dutch + 'maandag' => 1, + 'dinsdag' => 2, + 'woensdag' => 3, + 'donderdag' => 4, + 'vrijdag' => 5, + 'zaterdag' => 6, + 'zondag' => 7, + // French + 'lundi' => 1, + 'mardi' => 2, + 'mercredi' => 3, + 'jeudi' => 4, + 'vendredi' => 5, + 'samedi' => 6, + 'dimanche' => 7, + // German + 'montag' => 1, + 'dienstag' => 2, + 'mittwoch' => 3, + 'donnerstag' => 4, + 'freitag' => 5, + 'samstag' => 6, + 'sonnabend' => 6, + 'sonntag' => 7, + // Italian + 'lunedì' => 1, + 'martedì' => 2, + 'mercoledì' => 3, + 'giovedì' => 4, + 'venerdì' => 5, + 'sabato' => 6, + 'domenica' => 7, + // Spanish + 'lunes' => 1, + 'martes' => 2, + 'miércoles' => 3, + 'jueves' => 4, + 'viernes' => 5, + 'sábado' => 6, + 'domingo' => 7, + // Finnish + 'maanantai' => 1, + 'tiistai' => 2, + 'keskiviikko' => 3, + 'torstai' => 4, + 'perjantai' => 5, + 'lauantai' => 6, + 'sunnuntai' => 7, + // Hungarian + 'hétfÅ‘' => 1, + 'kedd' => 2, + 'szerda' => 3, + 'csütörtok' => 4, + 'péntek' => 5, + 'szombat' => 6, + 'vasárnap' => 7, + // Greek + 'Δευ' => 1, + 'ΤÏι' => 2, + 'Τετ' => 3, + 'Πεμ' => 4, + 'ΠαÏ' => 5, + 'Σαβ' => 6, + 'ΚυÏ' => 7, + ); + + /** + * List of months, calendar month name => calendar month number + * + * @access protected + * @var array + */ + var $month = array( + // English + 'jan' => 1, + 'january' => 1, + 'feb' => 2, + 'february' => 2, + 'mar' => 3, + 'march' => 3, + 'apr' => 4, + 'april' => 4, + 'may' => 5, + // No long form of May + 'jun' => 6, + 'june' => 6, + 'jul' => 7, + 'july' => 7, + 'aug' => 8, + 'august' => 8, + 'sep' => 9, + 'september' => 8, + 'oct' => 10, + 'october' => 10, + 'nov' => 11, + 'november' => 11, + 'dec' => 12, + 'december' => 12, + // Dutch + 'januari' => 1, + 'februari' => 2, + 'maart' => 3, + 'april' => 4, + 'mei' => 5, + 'juni' => 6, + 'juli' => 7, + 'augustus' => 8, + 'september' => 9, + 'oktober' => 10, + 'november' => 11, + 'december' => 12, + // French + 'janvier' => 1, + 'février' => 2, + 'mars' => 3, + 'avril' => 4, + 'mai' => 5, + 'juin' => 6, + 'juillet' => 7, + 'août' => 8, + 'septembre' => 9, + 'octobre' => 10, + 'novembre' => 11, + 'décembre' => 12, + // German + 'januar' => 1, + 'februar' => 2, + 'märz' => 3, + 'april' => 4, + 'mai' => 5, + 'juni' => 6, + 'juli' => 7, + 'august' => 8, + 'september' => 9, + 'oktober' => 10, + 'november' => 11, + 'dezember' => 12, + // Italian + 'gennaio' => 1, + 'febbraio' => 2, + 'marzo' => 3, + 'aprile' => 4, + 'maggio' => 5, + 'giugno' => 6, + 'luglio' => 7, + 'agosto' => 8, + 'settembre' => 9, + 'ottobre' => 10, + 'novembre' => 11, + 'dicembre' => 12, + // Spanish + 'enero' => 1, + 'febrero' => 2, + 'marzo' => 3, + 'abril' => 4, + 'mayo' => 5, + 'junio' => 6, + 'julio' => 7, + 'agosto' => 8, + 'septiembre' => 9, + 'setiembre' => 9, + 'octubre' => 10, + 'noviembre' => 11, + 'diciembre' => 12, + // Finnish + 'tammikuu' => 1, + 'helmikuu' => 2, + 'maaliskuu' => 3, + 'huhtikuu' => 4, + 'toukokuu' => 5, + 'kesäkuu' => 6, + 'heinäkuu' => 7, + 'elokuu' => 8, + 'suuskuu' => 9, + 'lokakuu' => 10, + 'marras' => 11, + 'joulukuu' => 12, + // Hungarian + 'január' => 1, + 'február' => 2, + 'március' => 3, + 'április' => 4, + 'május' => 5, + 'június' => 6, + 'július' => 7, + 'augusztus' => 8, + 'szeptember' => 9, + 'október' => 10, + 'november' => 11, + 'december' => 12, + // Greek + 'Ιαν' => 1, + 'Φεβ' => 2, + 'Μάώ' => 3, + 'Μαώ' => 3, + 'ΑπÏ' => 4, + 'Μάι' => 5, + 'Μαϊ' => 5, + 'Μαι' => 5, + 'ΙοÏν' => 6, + 'Ιον' => 6, + 'ΙοÏλ' => 7, + 'Ιολ' => 7, + 'ΑÏγ' => 8, + 'Αυγ' => 8, + 'Σεπ' => 9, + 'Οκτ' => 10, + 'Îοέ' => 11, + 'Δεκ' => 12, + ); + + /** + * List of timezones, abbreviation => offset from UTC + * + * @access protected + * @var array + */ + var $timezone = array( + 'ACDT' => 37800, + 'ACIT' => 28800, + 'ACST' => 34200, + 'ACT' => -18000, + 'ACWDT' => 35100, + 'ACWST' => 31500, + 'AEDT' => 39600, + 'AEST' => 36000, + 'AFT' => 16200, + 'AKDT' => -28800, + 'AKST' => -32400, + 'AMDT' => 18000, + 'AMT' => -14400, + 'ANAST' => 46800, + 'ANAT' => 43200, + 'ART' => -10800, + 'AZOST' => -3600, + 'AZST' => 18000, + 'AZT' => 14400, + 'BIOT' => 21600, + 'BIT' => -43200, + 'BOT' => -14400, + 'BRST' => -7200, + 'BRT' => -10800, + 'BST' => 3600, + 'BTT' => 21600, + 'CAST' => 18000, + 'CAT' => 7200, + 'CCT' => 23400, + 'CDT' => -18000, + 'CEDT' => 7200, + 'CET' => 3600, + 'CGST' => -7200, + 'CGT' => -10800, + 'CHADT' => 49500, + 'CHAST' => 45900, + 'CIST' => -28800, + 'CKT' => -36000, + 'CLDT' => -10800, + 'CLST' => -14400, + 'COT' => -18000, + 'CST' => -21600, + 'CVT' => -3600, + 'CXT' => 25200, + 'DAVT' => 25200, + 'DTAT' => 36000, + 'EADT' => -18000, + 'EAST' => -21600, + 'EAT' => 10800, + 'ECT' => -18000, + 'EDT' => -14400, + 'EEST' => 10800, + 'EET' => 7200, + 'EGT' => -3600, + 'EKST' => 21600, + 'EST' => -18000, + 'FJT' => 43200, + 'FKDT' => -10800, + 'FKST' => -14400, + 'FNT' => -7200, + 'GALT' => -21600, + 'GEDT' => 14400, + 'GEST' => 10800, + 'GFT' => -10800, + 'GILT' => 43200, + 'GIT' => -32400, + 'GST' => 14400, + 'GST' => -7200, + 'GYT' => -14400, + 'HAA' => -10800, + 'HAC' => -18000, + 'HADT' => -32400, + 'HAE' => -14400, + 'HAP' => -25200, + 'HAR' => -21600, + 'HAST' => -36000, + 'HAT' => -9000, + 'HAY' => -28800, + 'HKST' => 28800, + 'HMT' => 18000, + 'HNA' => -14400, + 'HNC' => -21600, + 'HNE' => -18000, + 'HNP' => -28800, + 'HNR' => -25200, + 'HNT' => -12600, + 'HNY' => -32400, + 'IRDT' => 16200, + 'IRKST' => 32400, + 'IRKT' => 28800, + 'IRST' => 12600, + 'JFDT' => -10800, + 'JFST' => -14400, + 'JST' => 32400, + 'KGST' => 21600, + 'KGT' => 18000, + 'KOST' => 39600, + 'KOVST' => 28800, + 'KOVT' => 25200, + 'KRAST' => 28800, + 'KRAT' => 25200, + 'KST' => 32400, + 'LHDT' => 39600, + 'LHST' => 37800, + 'LINT' => 50400, + 'LKT' => 21600, + 'MAGST' => 43200, + 'MAGT' => 39600, + 'MAWT' => 21600, + 'MDT' => -21600, + 'MESZ' => 7200, + 'MEZ' => 3600, + 'MHT' => 43200, + 'MIT' => -34200, + 'MNST' => 32400, + 'MSDT' => 14400, + 'MSST' => 10800, + 'MST' => -25200, + 'MUT' => 14400, + 'MVT' => 18000, + 'MYT' => 28800, + 'NCT' => 39600, + 'NDT' => -9000, + 'NFT' => 41400, + 'NMIT' => 36000, + 'NOVST' => 25200, + 'NOVT' => 21600, + 'NPT' => 20700, + 'NRT' => 43200, + 'NST' => -12600, + 'NUT' => -39600, + 'NZDT' => 46800, + 'NZST' => 43200, + 'OMSST' => 25200, + 'OMST' => 21600, + 'PDT' => -25200, + 'PET' => -18000, + 'PETST' => 46800, + 'PETT' => 43200, + 'PGT' => 36000, + 'PHOT' => 46800, + 'PHT' => 28800, + 'PKT' => 18000, + 'PMDT' => -7200, + 'PMST' => -10800, + 'PONT' => 39600, + 'PST' => -28800, + 'PWT' => 32400, + 'PYST' => -10800, + 'PYT' => -14400, + 'RET' => 14400, + 'ROTT' => -10800, + 'SAMST' => 18000, + 'SAMT' => 14400, + 'SAST' => 7200, + 'SBT' => 39600, + 'SCDT' => 46800, + 'SCST' => 43200, + 'SCT' => 14400, + 'SEST' => 3600, + 'SGT' => 28800, + 'SIT' => 28800, + 'SRT' => -10800, + 'SST' => -39600, + 'SYST' => 10800, + 'SYT' => 7200, + 'TFT' => 18000, + 'THAT' => -36000, + 'TJT' => 18000, + 'TKT' => -36000, + 'TMT' => 18000, + 'TOT' => 46800, + 'TPT' => 32400, + 'TRUT' => 36000, + 'TVT' => 43200, + 'TWT' => 28800, + 'UYST' => -7200, + 'UYT' => -10800, + 'UZT' => 18000, + 'VET' => -14400, + 'VLAST' => 39600, + 'VLAT' => 36000, + 'VOST' => 21600, + 'VUT' => 39600, + 'WAST' => 7200, + 'WAT' => 3600, + 'WDT' => 32400, + 'WEST' => 3600, + 'WFT' => 43200, + 'WIB' => 25200, + 'WIT' => 32400, + 'WITA' => 28800, + 'WKST' => 18000, + 'WST' => 28800, + 'YAKST' => 36000, + 'YAKT' => 32400, + 'YAPT' => 36000, + 'YEKST' => 21600, + 'YEKT' => 18000, + ); + + /** + * Cached PCRE for SimplePie_Parse_Date::$day + * + * @access protected + * @var string + */ + var $day_pcre; + + /** + * Cached PCRE for SimplePie_Parse_Date::$month + * + * @access protected + * @var string + */ + var $month_pcre; + + /** + * Array of user-added callback methods + * + * @access private + * @var array + */ + var $built_in = array(); + + /** + * Array of user-added callback methods + * + * @access private + * @var array + */ + var $user = array(); + + /** + * Create new SimplePie_Parse_Date object, and set self::day_pcre, + * self::month_pcre, and self::built_in + * + * @access private + */ + function SimplePie_Parse_Date() + { + $this->day_pcre = '(' . implode(array_keys($this->day), '|') . ')'; + $this->month_pcre = '(' . implode(array_keys($this->month), '|') . ')'; + + static $cache; + if (!isset($cache[get_class($this)])) + { + if (extension_loaded('Reflection')) + { + $class = new ReflectionClass(get_class($this)); + $methods = $class->getMethods(); + $all_methods = array(); + foreach ($methods as $method) + { + $all_methods[] = $method->getName(); + } + } + else + { + $all_methods = get_class_methods($this); + } + + foreach ($all_methods as $method) + { + if (strtolower(substr($method, 0, 5)) === 'date_') + { + $cache[get_class($this)][] = $method; + } + } + } + + foreach ($cache[get_class($this)] as $method) + { + $this->built_in[] = $method; + } + } + + /** + * Get the object + * + * @access public + */ + function get() + { + static $object; + if (!$object) + { + $object = new SimplePie_Parse_Date; + } + return $object; + } + + /** + * Parse a date + * + * @final + * @access public + * @param string $date Date to parse + * @return int Timestamp corresponding to date string, or false on failure + */ + function parse($date) + { + foreach ($this->user as $method) + { + if (($returned = call_user_func($method, $date)) !== false) + { + return $returned; + } + } + + foreach ($this->built_in as $method) + { + if (($returned = call_user_func(array(&$this, $method), $date)) !== false) + { + return $returned; + } + } + + return false; + } + + /** + * Add a callback method to parse a date + * + * @final + * @access public + * @param callback $callback + */ + function add_callback($callback) + { + if (is_callable($callback)) + { + $this->user[] = $callback; + } + else + { + trigger_error('User-supplied function must be a valid callback', E_USER_WARNING); + } + } + + /** + * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as + * well as allowing any of upper or lower case "T", horizontal tabs, or + * spaces to be used as the time separator (including more than one)) + * + * @access protected + * @return int Timestamp + */ + function date_w3cdtf($date) + { + static $pcre; + if (!$pcre) + { + $year = '([0-9]{4})'; + $month = $day = $hour = $minute = $second = '([0-9]{2})'; + $decimal = '([0-9]*)'; + $zone = '(?:(Z)|([+\-])([0-9]{1,2}):?([0-9]{1,2}))'; + $pcre = '/^' . $year . '(?:-?' . $month . '(?:-?' . $day . '(?:[Tt\x09\x20]+' . $hour . '(?::?' . $minute . '(?::?' . $second . '(?:.' . $decimal . ')?)?)?' . $zone . ')?)?)?$/'; + } + if (preg_match($pcre, $date, $match)) + { + /* + Capturing subpatterns: + 1: Year + 2: Month + 3: Day + 4: Hour + 5: Minute + 6: Second + 7: Decimal fraction of a second + 8: Zulu + 9: Timezone ± + 10: Timezone hours + 11: Timezone minutes + */ + + // Fill in empty matches + for ($i = count($match); $i <= 3; $i++) + { + $match[$i] = '1'; + } + + for ($i = count($match); $i <= 7; $i++) + { + $match[$i] = '0'; + } + + // Numeric timezone + if (isset($match[9]) && $match[9] !== '') + { + $timezone = $match[10] * 3600; + $timezone += $match[11] * 60; + if ($match[9] === '-') + { + $timezone = 0 - $timezone; + } + } + else + { + $timezone = 0; + } + + // Convert the number of seconds to an integer, taking decimals into account + $second = round($match[6] + $match[7] / pow(10, strlen($match[7]))); + + return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone; + } + else + { + return false; + } + } + + /** + * Remove RFC822 comments + * + * @access protected + * @param string $data Data to strip comments from + * @return string Comment stripped string + */ + function remove_rfc2822_comments($string) + { + $string = (string) $string; + $position = 0; + $length = strlen($string); + $depth = 0; + + $output = ''; + + while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) + { + $output .= substr($string, $position, $pos - $position); + $position = $pos + 1; + if ($string[$pos - 1] !== '\\') + { + $depth++; + while ($depth && $position < $length) + { + $position += strcspn($string, '()', $position); + if ($string[$position - 1] === '\\') + { + $position++; + continue; + } + elseif (isset($string[$position])) + { + switch ($string[$position]) + { + case '(': + $depth++; + break; + + case ')': + $depth--; + break; + } + $position++; + } + else + { + break; + } + } + } + else + { + $output .= '('; + } + } + $output .= substr($string, $position); + + return $output; + } + + /** + * Parse RFC2822's date format + * + * @access protected + * @return int Timestamp + */ + function date_rfc2822($date) + { + static $pcre; + if (!$pcre) + { + $wsp = '[\x09\x20]'; + $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)'; + $optional_fws = $fws . '?'; + $day_name = $this->day_pcre; + $month = $this->month_pcre; + $day = '([0-9]{1,2})'; + $hour = $minute = $second = '([0-9]{2})'; + $year = '([0-9]{2,4})'; + $num_zone = '([+\-])([0-9]{2})([0-9]{2})'; + $character_zone = '([A-Z]{1,5})'; + $zone = '(?:' . $num_zone . '|' . $character_zone . ')'; + $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i'; + } + if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match)) + { + /* + Capturing subpatterns: + 1: Day name + 2: Day + 3: Month + 4: Year + 5: Hour + 6: Minute + 7: Second + 8: Timezone ± + 9: Timezone hours + 10: Timezone minutes + 11: Alphabetic timezone + */ + + // Find the month number + $month = $this->month[strtolower($match[3])]; + + // Numeric timezone + if ($match[8] !== '') + { + $timezone = $match[9] * 3600; + $timezone += $match[10] * 60; + if ($match[8] === '-') + { + $timezone = 0 - $timezone; + } + } + // Character timezone + elseif (isset($this->timezone[strtoupper($match[11])])) + { + $timezone = $this->timezone[strtoupper($match[11])]; + } + // Assume everything else to be -0000 + else + { + $timezone = 0; + } + + // Deal with 2/3 digit years + if ($match[4] < 50) + { + $match[4] += 2000; + } + elseif ($match[4] < 1000) + { + $match[4] += 1900; + } + + // Second is optional, if it is empty set it to zero + if ($match[7] !== '') + { + $second = $match[7]; + } + else + { + $second = 0; + } + + return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone; + } + else + { + return false; + } + } + + /** + * Parse RFC850's date format + * + * @access protected + * @return int Timestamp + */ + function date_rfc850($date) + { + static $pcre; + if (!$pcre) + { + $space = '[\x09\x20]+'; + $day_name = $this->day_pcre; + $month = $this->month_pcre; + $day = '([0-9]{1,2})'; + $year = $hour = $minute = $second = '([0-9]{2})'; + $zone = '([A-Z]{1,5})'; + $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i'; + } + if (preg_match($pcre, $date, $match)) + { + /* + Capturing subpatterns: + 1: Day name + 2: Day + 3: Month + 4: Year + 5: Hour + 6: Minute + 7: Second + 8: Timezone + */ + + // Month + $month = $this->month[strtolower($match[3])]; + + // Character timezone + if (isset($this->timezone[strtoupper($match[8])])) + { + $timezone = $this->timezone[strtoupper($match[8])]; + } + // Assume everything else to be -0000 + else + { + $timezone = 0; + } + + // Deal with 2 digit year + if ($match[4] < 50) + { + $match[4] += 2000; + } + else + { + $match[4] += 1900; + } + + return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone; + } + else + { + return false; + } + } + + /** + * Parse C99's asctime()'s date format + * + * @access protected + * @return int Timestamp + */ + function date_asctime($date) + { + static $pcre; + if (!$pcre) + { + $space = '[\x09\x20]+'; + $wday_name = $this->day_pcre; + $mon_name = $this->month_pcre; + $day = '([0-9]{1,2})'; + $hour = $sec = $min = '([0-9]{2})'; + $year = '([0-9]{4})'; + $terminator = '\x0A?\x00?'; + $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i'; + } + if (preg_match($pcre, $date, $match)) + { + /* + Capturing subpatterns: + 1: Day name + 2: Month + 3: Day + 4: Hour + 5: Minute + 6: Second + 7: Year + */ + + $month = $this->month[strtolower($match[2])]; + return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]); + } + else + { + return false; + } + } + + /** + * Parse dates using strtotime() + * + * @access protected + * @return int Timestamp + */ + function date_strtotime($date) + { + $strtotime = strtotime($date); + if ($strtotime === -1 || $strtotime === false) + { + return false; + } + else + { + return $strtotime; + } + } +} + +/** + * Content-type sniffing + * + * @package SimplePie + */ +class SimplePie_Content_Type_Sniffer +{ + /** + * File object + * + * @var SimplePie_File + * @access private + */ + var $file; + + /** + * Create an instance of the class with the input file + * + * @access public + * @param SimplePie_Content_Type_Sniffer $file Input file + */ + function SimplePie_Content_Type_Sniffer($file) + { + $this->file = $file; + } + + /** + * Get the Content-Type of the specified file + * + * @access public + * @return string Actual Content-Type + */ + function get_type() + { + if (isset($this->file->headers['content-type'])) + { + if (!isset($this->file->headers['content-encoding']) + && ($this->file->headers['content-type'] === 'text/plain' + || $this->file->headers['content-type'] === 'text/plain; charset=ISO-8859-1' + || $this->file->headers['content-type'] === 'text/plain; charset=iso-8859-1')) + { + return $this->text_or_binary(); + } + + if (($pos = strpos($this->file->headers['content-type'], ';')) !== false) + { + $official = substr($this->file->headers['content-type'], 0, $pos); + } + else + { + $official = $this->file->headers['content-type']; + } + $official = strtolower($official); + + if ($official === 'unknown/unknown' + || $official === 'application/unknown') + { + return $this->unknown(); + } + elseif (substr($official, -4) === '+xml' + || $official === 'text/xml' + || $official === 'application/xml') + { + return $official; + } + elseif (substr($official, 0, 6) === 'image/') + { + if ($return = $this->image()) + { + return $return; + } + else + { + return $official; + } + } + elseif ($official === 'text/html') + { + return $this->feed_or_html(); + } + else + { + return $official; + } + } + else + { + return $this->unknown(); + } + } + + /** + * Sniff text or binary + * + * @access private + * @return string Actual Content-Type + */ + function text_or_binary() + { + if (substr($this->file->body, 0, 2) === "\xFE\xFF" + || substr($this->file->body, 0, 2) === "\xFF\xFE" + || substr($this->file->body, 0, 4) === "\x00\x00\xFE\xFF" + || substr($this->file->body, 0, 3) === "\xEF\xBB\xBF") + { + return 'text/plain'; + } + elseif (preg_match('/[\x00-\x08\x0E-\x1A\x1C-\x1F]/', $this->file->body)) + { + return 'application/octect-stream'; + } + else + { + return 'text/plain'; + } + } + + /** + * Sniff unknown + * + * @access private + * @return string Actual Content-Type + */ + function unknown() + { + $ws = strspn($this->file->body, "\x09\x0A\x0B\x0C\x0D\x20"); + if (strtolower(substr($this->file->body, $ws, 14)) === 'file->body, $ws, 5)) === 'file->body, $ws, 7)) === 'file->body, 0, 5) === '%PDF-') + { + return 'application/pdf'; + } + elseif (substr($this->file->body, 0, 11) === '%!PS-Adobe-') + { + return 'application/postscript'; + } + elseif (substr($this->file->body, 0, 6) === 'GIF87a' + || substr($this->file->body, 0, 6) === 'GIF89a') + { + return 'image/gif'; + } + elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") + { + return 'image/png'; + } + elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") + { + return 'image/jpeg'; + } + elseif (substr($this->file->body, 0, 2) === "\x42\x4D") + { + return 'image/bmp'; + } + else + { + return $this->text_or_binary(); + } + } + + /** + * Sniff images + * + * @access private + * @return string Actual Content-Type + */ + function image() + { + if (substr($this->file->body, 0, 6) === 'GIF87a' + || substr($this->file->body, 0, 6) === 'GIF89a') + { + return 'image/gif'; + } + elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") + { + return 'image/png'; + } + elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") + { + return 'image/jpeg'; + } + elseif (substr($this->file->body, 0, 2) === "\x42\x4D") + { + return 'image/bmp'; + } + else + { + return false; + } + } + + /** + * Sniff HTML + * + * @access private + * @return string Actual Content-Type + */ + function feed_or_html() + { + $len = strlen($this->file->body); + $pos = strspn($this->file->body, "\x09\x0A\x0D\x20"); + + while ($pos < $len) + { + switch ($this->file->body[$pos]) + { + case "\x09": + case "\x0A": + case "\x0D": + case "\x20": + $pos += strspn($this->file->body, "\x09\x0A\x0D\x20", $pos); + continue 2; + + case '<': + $pos++; + break; + + default: + return 'text/html'; + } + + if (substr($this->file->body, $pos, 3) === '!--') + { + $pos += 3; + if ($pos < $len && ($pos = strpos($this->file->body, '-->', $pos)) !== false) + { + $pos += 3; + } + else + { + return 'text/html'; + } + } + elseif (substr($this->file->body, $pos, 1) === '!') + { + if ($pos < $len && ($pos = strpos($this->file->body, '>', $pos)) !== false) + { + $pos++; + } + else + { + return 'text/html'; + } + } + elseif (substr($this->file->body, $pos, 1) === '?') + { + if ($pos < $len && ($pos = strpos($this->file->body, '?>', $pos)) !== false) + { + $pos += 2; + } + else + { + return 'text/html'; + } + } + elseif (substr($this->file->body, $pos, 3) === 'rss' + || substr($this->file->body, $pos, 7) === 'rdf:RDF') + { + return 'application/rss+xml'; + } + elseif (substr($this->file->body, $pos, 4) === 'feed') + { + return 'application/atom+xml'; + } + else + { + return 'text/html'; + } + } + + return 'text/html'; + } +} + +/** + * Parses the XML Declaration + * + * @package SimplePie + */ +class SimplePie_XML_Declaration_Parser +{ + /** + * XML Version + * + * @access public + * @var string + */ + var $version = '1.0'; + + /** + * Encoding + * + * @access public + * @var string + */ + var $encoding = 'UTF-8'; + + /** + * Standalone + * + * @access public + * @var bool + */ + var $standalone = false; + + /** + * Current state of the state machine + * + * @access private + * @var string + */ + var $state = 'before_version_name'; + + /** + * Input data + * + * @access private + * @var string + */ + var $data = ''; + + /** + * Input data length (to avoid calling strlen() everytime this is needed) + * + * @access private + * @var int + */ + var $data_length = 0; + + /** + * Current position of the pointer + * + * @var int + * @access private + */ + var $position = 0; + + /** + * Create an instance of the class with the input data + * + * @access public + * @param string $data Input data + */ + function SimplePie_XML_Declaration_Parser($data) + { + $this->data = $data; + $this->data_length = strlen($this->data); + } + + /** + * Parse the input data + * + * @access public + * @return bool true on success, false on failure + */ + function parse() + { + while ($this->state && $this->state !== 'emit' && $this->has_data()) + { + $state = $this->state; + $this->$state(); + } + $this->data = ''; + if ($this->state === 'emit') + { + return true; + } + else + { + $this->version = ''; + $this->encoding = ''; + $this->standalone = ''; + return false; + } + } + + /** + * Check whether there is data beyond the pointer + * + * @access private + * @return bool true if there is further data, false if not + */ + function has_data() + { + return (bool) ($this->position < $this->data_length); + } + + /** + * Advance past any whitespace + * + * @return int Number of whitespace characters passed + */ + function skip_whitespace() + { + $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position); + $this->position += $whitespace; + return $whitespace; + } + + /** + * Read value + */ + function get_value() + { + $quote = substr($this->data, $this->position, 1); + if ($quote === '"' || $quote === "'") + { + $this->position++; + $len = strcspn($this->data, $quote, $this->position); + if ($this->has_data()) + { + $value = substr($this->data, $this->position, $len); + $this->position += $len + 1; + return $value; + } + } + return false; + } + + function before_version_name() + { + if ($this->skip_whitespace()) + { + $this->state = 'version_name'; + } + else + { + $this->state = false; + } + } + + function version_name() + { + if (substr($this->data, $this->position, 7) === 'version') + { + $this->position += 7; + $this->skip_whitespace(); + $this->state = 'version_equals'; + } + else + { + $this->state = false; + } + } + + function version_equals() + { + if (substr($this->data, $this->position, 1) === '=') + { + $this->position++; + $this->skip_whitespace(); + $this->state = 'version_value'; + } + else + { + $this->state = false; + } + } + + function version_value() + { + if ($this->version = $this->get_value()) + { + $this->skip_whitespace(); + if ($this->has_data()) + { + $this->state = 'encoding_name'; + } + else + { + $this->state = 'emit'; + } + } + else + { + $this->state = 'standalone_name'; + } + } + + function encoding_name() + { + if (substr($this->data, $this->position, 8) === 'encoding') + { + $this->position += 8; + $this->skip_whitespace(); + $this->state = 'encoding_equals'; + } + else + { + $this->state = false; + } + } + + function encoding_equals() + { + if (substr($this->data, $this->position, 1) === '=') + { + $this->position++; + $this->skip_whitespace(); + $this->state = 'encoding_value'; + } + else + { + $this->state = false; + } + } + + function encoding_value() + { + if ($this->encoding = $this->get_value()) + { + $this->skip_whitespace(); + if ($this->has_data()) + { + $this->state = 'standalone_name'; + } + else + { + $this->state = 'emit'; + } + } + else + { + $this->state = false; + } + } + + function standalone_name() + { + if (substr($this->data, $this->position, 10) === 'standalone') + { + $this->position += 10; + $this->skip_whitespace(); + $this->state = 'standalone_equals'; + } + else + { + $this->state = false; + } + } + + function standalone_equals() + { + if (substr($this->data, $this->position, 1) === '=') + { + $this->position++; + $this->skip_whitespace(); + $this->state = 'standalone_value'; + } + else + { + $this->state = false; + } + } + + function standalone_value() + { + if ($standalone = $this->get_value()) + { + switch ($standalone) + { + case 'yes': + $this->standalone = true; + break; + + case 'no': + $this->standalone = false; + break; + + default: + $this->state = false; + return; + } + + $this->skip_whitespace(); + if ($this->has_data()) + { + $this->state = false; + } + else + { + $this->state = 'emit'; + } + } + else + { + $this->state = false; + } + } +} + +class SimplePie_Locator +{ + var $useragent; + var $timeout; + var $file; + var $local = array(); + var $elsewhere = array(); + var $file_class = 'SimplePie_File'; + var $cached_entities = array(); + var $http_base; + var $base; + var $base_location = 0; + var $checked_feeds = 0; + var $max_checked_feeds = 10; + var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer'; + + function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File', $max_checked_feeds = 10, $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer') + { + $this->file =& $file; + $this->file_class = $file_class; + $this->useragent = $useragent; + $this->timeout = $timeout; + $this->max_checked_feeds = $max_checked_feeds; + $this->content_type_sniffer_class = $content_type_sniffer_class; + } + + function find($type = SIMPLEPIE_LOCATOR_ALL) + { + if ($this->is_feed($this->file)) + { + return $this->file; + } + + if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) + { + $sniffer = new $this->content_type_sniffer_class($this->file); + if ($sniffer->get_type() !== 'text/html') + { + return null; + } + } + + if ($type & ~SIMPLEPIE_LOCATOR_NONE) + { + $this->get_base(); + } + + if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery()) + { + return $working; + } + + if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links()) + { + if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local)) + { + return $working; + } + + if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local)) + { + return $working; + } + + if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere)) + { + return $working; + } + + if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere)) + { + return $working; + } + } + return null; + } + + function is_feed(&$file) + { + if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) + { + $sniffer = new $this->content_type_sniffer_class($file); + $sniffed = $sniffer->get_type(); + if (in_array($sniffed, array('application/rss+xml', 'application/rdf+xml', 'text/rdf', 'application/atom+xml', 'text/xml', 'application/xml'))) + { + return true; + } + else + { + return false; + } + } + elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL) + { + return true; + } + else + { + return false; + } + } + + function get_base() + { + $this->http_base = $this->file->url; + $this->base = $this->http_base; + $elements = SimplePie_Misc::get_element('base', $this->file->body); + foreach ($elements as $element) + { + if ($element['attribs']['href']['data'] !== '') + { + $this->base = SimplePie_Misc::absolutize_url(trim($element['attribs']['href']['data']), $this->http_base); + $this->base_location = $element['offset']; + break; + } + } + } + + function autodiscovery() + { + $links = array_merge(SimplePie_Misc::get_element('link', $this->file->body), SimplePie_Misc::get_element('a', $this->file->body), SimplePie_Misc::get_element('area', $this->file->body)); + $done = array(); + foreach ($links as $link) + { + if ($this->checked_feeds == $this->max_checked_feeds) + { + break; + } + if (isset($link['attribs']['href']['data']) && isset($link['attribs']['rel']['data'])) + { + $rel = array_unique(SimplePie_Misc::space_separated_tokens(strtolower($link['attribs']['rel']['data']))); + + if ($this->base_location < $link['offset']) + { + $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base); + } + else + { + $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base); + } + + if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !empty($link['attribs']['type']['data']) && in_array(strtolower(SimplePie_Misc::parse_mime($link['attribs']['type']['data'])), array('application/rss+xml', 'application/atom+xml')))) + { + $this->checked_feeds++; + $feed =& new $this->file_class($href, $this->timeout, 5, null, $this->useragent); + if ($this->is_feed($feed)) + { + return $feed; + } + } + $done[] = $href; + } + } + return null; + } + + function get_links() + { + $links = SimplePie_Misc::get_element('a', $this->file->body); + foreach ($links as $link) + { + if (isset($link['attribs']['href']['data'])) + { + $href = trim($link['attribs']['href']['data']); + $parsed = SimplePie_Misc::parse_url($href); + if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme'])) + { + if ($this->base_location < $link['offset']) + { + $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base); + } + else + { + $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base); + } + + $current = SimplePie_Misc::parse_url($this->file->url); + + if ($parsed['authority'] === '' || $parsed['authority'] == $current['authority']) + { + $this->local[] = $href; + } + else + { + $this->elsewhere[] = $href; + } + } + } + } + $this->local = array_unique($this->local); + $this->elsewhere = array_unique($this->elsewhere); + if (!empty($this->local) || !empty($this->elsewhere)) + { + return true; + } + return null; + } + + function extension(&$array) + { + foreach ($array as $key => $value) + { + if ($this->checked_feeds == $this->max_checked_feeds) + { + break; + } + if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml'))) + { + $this->checked_feeds++; + $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent); + if ($this->is_feed($feed)) + { + return $feed; + } + else + { + unset($array[$key]); + } + } + } + return null; + } + + function body(&$array) + { + foreach ($array as $key => $value) + { + if ($this->checked_feeds == $this->max_checked_feeds) + { + break; + } + if (preg_match('/(rss|rdf|atom|xml)/i', $value)) + { + $this->checked_feeds++; + $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent); + if ($this->is_feed($feed)) + { + return $feed; + } + else + { + unset($array[$key]); + } + } + } + return null; + } +} + +class SimplePie_Parser +{ + var $error_code; + var $error_string; + var $current_line; + var $current_column; + var $current_byte; + var $separator = ' '; + var $feed = false; + var $namespace = array(''); + var $element = array(''); + var $xml_base = array(''); + var $xml_base_explicit = array(false); + var $xml_lang = array(''); + var $data = array(); + var $datas = array(array()); + var $current_xhtml_construct = -1; + var $encoding; + + function parse(&$data, $encoding) + { + // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character + if (strtoupper($encoding) == 'US-ASCII') + { + $this->encoding = 'UTF-8'; + } + else + { + $this->encoding = $encoding; + } + + // Strip BOM: + // UTF-32 Big Endian BOM + if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") + { + $data = substr($data, 4); + } + // UTF-32 Little Endian BOM + elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") + { + $data = substr($data, 4); + } + // UTF-16 Big Endian BOM + elseif (substr($data, 0, 2) === "\xFE\xFF") + { + $data = substr($data, 2); + } + // UTF-16 Little Endian BOM + elseif (substr($data, 0, 2) === "\xFF\xFE") + { + $data = substr($data, 2); + } + // UTF-8 BOM + elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") + { + $data = substr($data, 3); + } + + if (substr($data, 0, 5) === '')) !== false) + { + $declaration = new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5)); + if ($declaration->parse()) + { + $data = substr($data, $pos + 2); + $data = 'version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' . $data; + } + else + { + $this->error_string = 'SimplePie bug! Please report this!'; + return false; + } + } + + // Work around libxml bug + $data = str_replace('<', '<', $data); + $data = str_replace('>', '>', $data); + $data = str_replace('&', '&', $data); + $data = str_replace(''', ''', $data); + $data = str_replace('"', '"', $data); + + $return = true; + + // Create the parser + $xml = xml_parser_create_ns($this->encoding, $this->separator); + xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1); + xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0); + xml_set_object($xml, $this); + xml_set_character_data_handler($xml, 'cdata'); + xml_set_element_handler($xml, 'tag_open', 'tag_close'); + + // Parse! + if (!xml_parse($xml, $data, true)) + { + $this->error_code = xml_get_error_code($xml); + $this->error_string = xml_error_string($this->error_code); + $return = false; + } + $this->current_line = xml_get_current_line_number($xml); + $this->current_column = xml_get_current_column_number($xml); + $this->current_byte = xml_get_current_byte_index($xml); + xml_parser_free($xml); + return $return; + } + + function get_error_code() + { + return $this->error_code; + } + + function get_error_string() + { + return $this->error_string; + } + + function get_current_line() + { + return $this->current_line; + } + + function get_current_column() + { + return $this->current_column; + } + + function get_current_byte() + { + return $this->current_byte; + } + + function get_data() + { + return $this->data; + } + + function tag_open($parser, $tag, $attributes) + { + if ($this->feed === 0) + { + return; + } + elseif ($this->feed == false) + { + if (in_array($tag, array( + SIMPLEPIE_NAMESPACE_ATOM_10 . $this->separator . 'feed', + SIMPLEPIE_NAMESPACE_ATOM_03 . $this->separator . 'feed', + 'rss', + SIMPLEPIE_NAMESPACE_RDF . $this->separator . 'RDF' + ))) + { + $this->feed = 1; + } + } + else + { + $this->feed++; + } + + list($this->namespace[], $this->element[]) = $this->split_ns($tag); + + $attribs = array(); + foreach ($attributes as $name => $value) + { + list($attrib_namespace, $attribute) = $this->split_ns($name); + $attribs[$attrib_namespace][$attribute] = $value; + } + + if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base'])) + { + $this->xml_base[] = SimplePie_Misc::absolutize_url($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base)); + $this->xml_base_explicit[] = true; + } + else + { + $this->xml_base[] = end($this->xml_base); + $this->xml_base_explicit[] = end($this->xml_base_explicit); + } + + if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang'])) + { + $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang']; + } + else + { + $this->xml_lang[] = end($this->xml_lang); + } + + if ($this->current_xhtml_construct >= 0) + { + $this->current_xhtml_construct++; + if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML) + { + $this->data['data'] .= '<' . end($this->element); + if (isset($attribs[''])) + { + foreach ($attribs[''] as $name => $value) + { + $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"'; + } + } + $this->data['data'] .= '>'; + } + } + else + { + $this->datas[] =& $this->data; + $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][]; + $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang)); + if ((end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] == 'xml') + || (end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] == 'xhtml')) + { + $this->current_xhtml_construct = 0; + } + } + } + + function cdata($parser, $cdata) + { + if ($this->current_xhtml_construct >= 0) + { + $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding); + } + elseif ($this->feed > 1) + { + $this->data['data'] .= $cdata; + } + } + + function tag_close($parser, $tag) + { + if (!$this->feed) + { + return; + } + + if ($this->current_xhtml_construct >= 0) + { + $this->current_xhtml_construct--; + if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'))) + { + $this->data['data'] .= 'element) . '>'; + } + } + if ($this->current_xhtml_construct == -1) + { + $this->data =& $this->datas[$this->feed]; + array_pop($this->datas); + } + + array_pop($this->element); + array_pop($this->namespace); + array_pop($this->xml_base); + array_pop($this->xml_base_explicit); + array_pop($this->xml_lang); + $this->feed--; + } + + function split_ns($string) + { + static $cache = array(); + if (!isset($cache[$string])) + { + if ($pos = strpos($string, $this->separator)) + { + static $separator_length; + if (!$separator_length) + { + $separator_length = strlen($this->separator); + } + $namespace = substr($string, 0, $pos); + $local_name = substr($string, $pos + $separator_length); + if (strtolower($namespace) === SIMPLEPIE_NAMESPACE_ITUNES) + { + $namespace = SIMPLEPIE_NAMESPACE_ITUNES; + } + + // Normalize the Media RSS namespaces + if ($namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG) + { + $namespace = SIMPLEPIE_NAMESPACE_MEDIARSS; + } + $cache[$string] = array($namespace, $local_name); + } + else + { + $cache[$string] = array('', $string); + } + } + return $cache[$string]; + } +} + +/** + * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags + */ +class SimplePie_Sanitize +{ + // Private vars + var $base; + + // Options + var $remove_div = true; + var $image_handler = ''; + var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); + var $encode_instead_of_strip = false; + var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); + var $strip_comments = false; + var $output_encoding = 'UTF-8'; + var $enable_cache = true; + var $cache_location = './cache'; + var $cache_name_function = 'md5'; + var $cache_class = 'SimplePie_Cache'; + var $file_class = 'SimplePie_File'; + var $timeout = 10; + var $useragent = ''; + var $force_fsockopen = false; + + var $replace_url_attributes = array( + 'a' => 'href', + 'area' => 'href', + 'blockquote' => 'cite', + 'del' => 'cite', + 'form' => 'action', + 'img' => array('longdesc', 'src'), + 'input' => 'src', + 'ins' => 'cite', + 'q' => 'cite' + ); + + function remove_div($enable = true) + { + $this->remove_div = (bool) $enable; + } + + function set_image_handler($page = false) + { + if ($page) + { + $this->image_handler = (string) $page; + } + else + { + $this->image_handler = false; + } + } + + function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache') + { + if (isset($enable_cache)) + { + $this->enable_cache = (bool) $enable_cache; + } + + if ($cache_location) + { + $this->cache_location = (string) $cache_location; + } + + if ($cache_name_function) + { + $this->cache_name_function = (string) $cache_name_function; + } + + if ($cache_class) + { + $this->cache_class = (string) $cache_class; + } + } + + function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false) + { + if ($file_class) + { + $this->file_class = (string) $file_class; + } + + if ($timeout) + { + $this->timeout = (string) $timeout; + } + + if ($useragent) + { + $this->useragent = (string) $useragent; + } + + if ($force_fsockopen) + { + $this->force_fsockopen = (string) $force_fsockopen; + } + } + + function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style')) + { + if ($tags) + { + if (is_array($tags)) + { + $this->strip_htmltags = $tags; + } + else + { + $this->strip_htmltags = explode(',', $tags); + } + } + else + { + $this->strip_htmltags = false; + } + } + + function encode_instead_of_strip($encode = false) + { + $this->encode_instead_of_strip = (bool) $encode; + } + + function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc')) + { + if ($attribs) + { + if (is_array($attribs)) + { + $this->strip_attributes = $attribs; + } + else + { + $this->strip_attributes = explode(',', $attribs); + } + } + else + { + $this->strip_attributes = false; + } + } + + function strip_comments($strip = false) + { + $this->strip_comments = (bool) $strip; + } + + function set_output_encoding($encoding = 'UTF-8') + { + $this->output_encoding = (string) $encoding; + } + + /** + * Set element/attribute key/value pairs of HTML attributes + * containing URLs that need to be resolved relative to the feed + * + * @access public + * @since 1.0 + * @param array $element_attribute Element/attribute key/value pairs + */ + function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite')) + { + $this->replace_url_attributes = (array) $element_attribute; + } + + function sanitize($data, $type, $base = '') + { + $data = trim($data); + if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI) + { + if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML) + { + if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data)) + { + $type |= SIMPLEPIE_CONSTRUCT_HTML; + } + else + { + $type |= SIMPLEPIE_CONSTRUCT_TEXT; + } + } + + if ($type & SIMPLEPIE_CONSTRUCT_BASE64) + { + $data = base64_decode($data); + } + + if ($type & SIMPLEPIE_CONSTRUCT_XHTML) + { + if ($this->remove_div) + { + $data = preg_replace('/^/', '', $data); + $data = preg_replace('/<\/div>$/', '', $data); + } + else + { + $data = preg_replace('/^/', '
    ', $data); + } + } + + if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML)) + { + // Strip comments + if ($this->strip_comments) + { + $data = SimplePie_Misc::strip_comments($data); + } + + // Strip out HTML tags and attributes that might cause various security problems. + // Based on recommendations by Mark Pilgrim at: + // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely + if ($this->strip_htmltags) + { + foreach ($this->strip_htmltags as $tag) + { + $pcre = "/<($tag)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$tag" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>|(\/)?>)/siU'; + while (preg_match($pcre, $data)) + { + $data = preg_replace_callback($pcre, array(&$this, 'do_strip_htmltags'), $data); + } + } + } + + if ($this->strip_attributes) + { + foreach ($this->strip_attributes as $attrib) + { + $data = preg_replace('/(<[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*)' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . trim($attrib) . '(?:\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>/', '\1\2\3>', $data); + } + } + + // Replace relative URLs + $this->base = $base; + foreach ($this->replace_url_attributes as $element => $attributes) + { + $data = $this->replace_urls($data, $element, $attributes); + } + + // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags. + if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache) + { + $images = SimplePie_Misc::get_element('img', $data); + foreach ($images as $img) + { + if (isset($img['attribs']['src']['data'])) + { + $image_url = call_user_func($this->cache_name_function, $img['attribs']['src']['data']); + $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $image_url, 'spi'); + + if ($cache->load()) + { + $img['attribs']['src']['data'] = $this->image_handler . $image_url; + $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data); + } + else + { + $file =& new $this->file_class($img['attribs']['src']['data'], $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen); + $headers = $file->headers; + + if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300))) + { + if ($cache->save(array('headers' => $file->headers, 'body' => $file->body))) + { + $img['attribs']['src']['data'] = $this->image_handler . $image_url; + $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data); + } + else + { + trigger_error("$cache->name is not writeable", E_USER_WARNING); + } + } + } + } + } + } + + // Having (possibly) taken stuff out, there may now be whitespace at the beginning/end of the data + $data = trim($data); + } + + if ($type & SIMPLEPIE_CONSTRUCT_IRI) + { + $data = SimplePie_Misc::absolutize_url($data, $base); + } + + if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI)) + { + $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8'); + } + + if ($this->output_encoding != 'UTF-8') + { + $data = SimplePie_Misc::change_encoding($data, 'UTF-8', $this->output_encoding); + } + } + return $data; + } + + function replace_urls($data, $tag, $attributes) + { + if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags)) + { + $elements = SimplePie_Misc::get_element($tag, $data); + foreach ($elements as $element) + { + if (is_array($attributes)) + { + foreach ($attributes as $attribute) + { + if (isset($element['attribs'][$attribute]['data'])) + { + $element['attribs'][$attribute]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attribute]['data'], $this->base); + $new_element = SimplePie_Misc::element_implode($element); + $data = str_replace($element['full'], $new_element, $data); + $element['full'] = $new_element; + } + } + } + elseif (isset($element['attribs'][$attributes]['data'])) + { + $element['attribs'][$attributes]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attributes]['data'], $this->base); + $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data); + } + } + } + return $data; + } + + function do_strip_htmltags($match) + { + if ($this->encode_instead_of_strip) + { + if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) + { + $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8'); + $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8'); + return "<$match[1]$match[2]>$match[3]</$match[1]>"; + } + else + { + return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8'); + } + } + elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) + { + return $match[4]; + } + else + { + return ''; + } + } +} + +?> diff --git a/etc/inc/smtp.inc b/etc/inc/smtp.inc new file mode 100644 index 000000000..525bb3364 --- /dev/null +++ b/etc/inc/smtp.inc @@ -0,0 +1,862 @@ +next_token; + } + for($character=0;$characternext_token=substr($string,$found+1); + return(substr($string,0,$found)); + } + else + { + $this->next_token=""; + return($string); + } + } + + Function OutputDebug($message) + { + $message.="\n"; + if($this->html_debug) + $message=str_replace("\n","
    \n",HtmlEntities($message)); + echo $message; + flush(); + } + + Function SetDataAccessError($error) + { + $this->error=$error; + if(function_exists("socket_get_status")) + { + $status=socket_get_status($this->connection); + if($status["timed_out"]) + $this->error.=gettext(": data access time out"); + elseif($status["eof"]) + { + $this->error.=gettext(": the server disconnected"); + $this->disconnected_error=1; + } + } + } + + Function GetLine() + { + for($line="";;) + { + if(feof($this->connection)) + { + $this->error=gettext("reached the end of data while reading from the SMTP server conection"); + return(""); + } + if(GetType($data=@fgets($this->connection,100))!="string" + || strlen($data)==0) + { + $this->SetDataAccessError(gettext("it was not possible to read line from the SMTP server")); + return(""); + } + $line.=$data; + $length=strlen($line); + if($length>=2 + && substr($line,$length-2,2)=="\r\n") + { + $line=substr($line,0,$length-2); + if($this->debug) + $this->OutputDebug("S $line"); + return($line); + } + } + } + + Function PutLine($line) + { + if($this->debug) + $this->OutputDebug("C $line"); + if(!@fputs($this->connection,"$line\r\n")) + { + $this->SetDataAccessError(gettext("it was not possible to send a line to the SMTP server")); + return(0); + } + return(1); + } + + Function PutData(&$data) + { + if(strlen($data)) + { + if($this->debug) + $this->OutputDebug("C $data"); + if(!@fputs($this->connection,$data)) + { + $this->SetDataAccessError(gettext("it was not possible to send data to the SMTP server")); + return(0); + } + } + return(1); + } + + Function VerifyResultLines($code,&$responses) + { + $responses=array(); + Unset($this->result_code); + while(strlen($line=$this->GetLine($this->connection))) + { + if(IsSet($this->result_code)) + { + if(strcmp($this->Tokenize($line," -"),$this->result_code)) + { + $this->error=$line; + return(0); + } + } + else + { + $this->result_code=$this->Tokenize($line," -"); + if(GetType($code)=="array") + { + for($codes=0;$codesresult_code,$code[$codes]);$codes++); + if($codes>=count($code)) + { + $this->error=$line; + return(0); + } + } + else + { + if(strcmp($this->result_code,$code)) + { + $this->error=$line; + return(0); + } + } + } + $responses[]=$this->Tokenize(""); + if(!strcmp($this->result_code,$this->Tokenize($line," "))) + return(1); + } + return(-1); + } + + Function FlushRecipients() + { + if($this->pending_sender) + { + if($this->VerifyResultLines("250",$responses)<=0) + return(0); + $this->pending_sender=0; + } + for(;$this->pending_recipients;$this->pending_recipients--) + { + if($this->VerifyResultLines(array("250","251"),$responses)<=0) + return(0); + } + return(1); + } + + Function ConnectToHost($domain, $port, $resolve_message) + { + if($this->ssl || $this->tls) + { + $version=explode(".",function_exists("phpversion") ? phpversion() : "3.0.7"); + $php_version=intval($version[0])*1000000+intval($version[1])*1000+intval($version[2]); + if($php_version<4003000) + return(gettext("establishing SSL connections requires at least PHP version 4.3.0")); + if(!function_exists("extension_loaded") + || !extension_loaded("openssl")) + return(gettext("establishing SSL connections requires the OpenSSL extension enabled")); + } + if(preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/',$domain)) + $ip=$domain; + else + { + if($this->debug) + $this->OutputDebug($resolve_message); + if(!strcmp($ip=@gethostbyname($domain),$domain)) + return(sprintf(gettext("could not resolve host \"%s\""), $domain)); + } + if(strlen($this->exclude_address) + && !strcmp(@gethostbyname($this->exclude_address),$ip)) + return(sprintf(gettext("domain \"%s\" resolved to an address excluded to be valid"), $domain)); + if($this->debug) + $this->OutputDebug(sprintf(gettext('Connecting to host address "%1$s" port %2$s...'), $ip, $port)); + if(($this->connection=($this->timeout ? @fsockopen(($this->ssl ? "ssl://" : "").$ip,$port,$errno,$error,$this->timeout) : @fsockopen(($this->ssl ? "ssl://" : "").$ip,$port)))) + return(""); + $error=($this->timeout ? strval($error) : "??"); + switch($error) + { + case "-3": + return(gettext("-3 socket could not be created")); + case "-4": + return(sprintf(gettext("-4 dns lookup on hostname \"%s\" failed"), $domain)); + case "-5": + return(gettext("-5 connection refused or timed out")); + case "-6": + return(gettext("-6 fdopen() call failed")); + case "-7": + return(gettext("-7 setvbuf() call failed")); + } + return(sprintf(gettext('could not connect to the host "%1$s": %2$s'), $domain, $error)); + } + + Function SASLAuthenticate($mechanisms, $credentials, &$authenticated, &$mechanism) + { + $authenticated=0; + if(!function_exists("class_exists") + || !class_exists("sasl_client_class")) + { + $this->error=gettext("it is not possible to authenticate using the specified mechanism because the SASL library class is not loaded"); + return(0); + } + $sasl=new sasl_client_class; + $sasl->SetCredential("user",$credentials["user"]); + $sasl->SetCredential("password",$credentials["password"]); + if(IsSet($credentials["realm"])) + $sasl->SetCredential("realm",$credentials["realm"]); + if(IsSet($credentials["workstation"])) + $sasl->SetCredential("workstation",$credentials["workstation"]); + if(IsSet($credentials["mode"])) + $sasl->SetCredential("mode",$credentials["mode"]); + do + { + $status=$sasl->Start($mechanisms,$message,$interactions); + } + while($status==SASL_INTERACT); + switch($status) + { + case SASL_CONTINUE: + break; + case SASL_NOMECH: + if(strlen($this->authentication_mechanism)) + { + $this->error=printf(gettext('authenticated mechanism %1$s may not be used: %2$s'), $this->authentication_mechanism, $sasl->error); + return(0); + } + break; + default: + $this->error=gettext("Could not start the SASL authentication client:") . " ".$sasl->error; + return(0); + } + if(strlen($mechanism=$sasl->mechanism)) + { + if($this->PutLine("AUTH ".$sasl->mechanism.(IsSet($message) ? " ".base64_encode($message) : ""))==0) + { + $this->error=gettext("Could not send the AUTH command"); + return(0); + } + if(!$this->VerifyResultLines(array("235","334"),$responses)) + return(0); + switch($this->result_code) + { + case "235": + $response=""; + $authenticated=1; + break; + case "334": + $response=base64_decode($responses[0]); + break; + default: + $this->error=gettext("Authentication error:") . " ".$responses[0]; + return(0); + } + for(;!$authenticated;) + { + do + { + $status=$sasl->Step($response,$message,$interactions); + } + while($status==SASL_INTERACT); + switch($status) + { + case SASL_CONTINUE: + if($this->PutLine(base64_encode($message))==0) + { + $this->error=gettext("Could not send the authentication step message"); + return(0); + } + if(!$this->VerifyResultLines(array("235","334"),$responses)) + return(0); + switch($this->result_code) + { + case "235": + $response=""; + $authenticated=1; + break; + case "334": + $response=base64_decode($responses[0]); + break; + default: + $this->error=gettext("Authentication error:") . " ".$responses[0]; + return(0); + } + break; + default: + $this->error=gettext("Could not process the SASL authentication step:") . " ".$sasl->error; + return(0); + } + } + } + return(1); + } + + /* Public methods */ + + Function Connect($domain="") + { + if(strcmp($this->state,"Disconnected")) + { + $this->error=gettext("connection is already established"); + return(0); + } + $this->disconnected_error=0; + $this->error=$error=""; + $this->esmtp_host=""; + $this->esmtp_extensions=array(); + $hosts=array(); + if($this->direct_delivery) + { + if(strlen($domain)==0) + return(1); + $hosts=$weights=$mxhosts=array(); + $getmxrr=$this->getmxrr; + if(function_exists($getmxrr) + && $getmxrr($domain,$hosts,$weights)) + { + for($host=0;$hosthost_name)) + $hosts[]=$this->host_name; + if(strlen($this->pop3_auth_host)) + { + $user=$this->user; + if(strlen($user)==0) + { + $this->error=gettext("it was not specified the POP3 authentication user"); + return(0); + } + $password=$this->password; + if(strlen($password)==0) + { + $this->error=gettext("it was not specified the POP3 authentication password"); + return(0); + } + $domain=$this->pop3_auth_host; + $this->error=$this->ConnectToHost($domain, $this->pop3_auth_port, sprintf(gettext("Resolving POP3 authentication host \"%s\"..."), $domain)); + if(strlen($this->error)) + return(0); + if(strlen($response=$this->GetLine())==0) + return(0); + if(strcmp($this->Tokenize($response," "),"+OK")) + { + $this->error=gettext("POP3 authentication server greeting was not found"); + return(0); + } + if(!$this->PutLine("USER ".$this->user) + || strlen($response=$this->GetLine())==0) + return(0); + if(strcmp($this->Tokenize($response," "),"+OK")) + { + $this->error=gettext("POP3 authentication user was not accepted:") . " ".$this->Tokenize("\r\n"); + return(0); + } + if(!$this->PutLine("PASS ".$password) + || strlen($response=$this->GetLine())==0) + return(0); + if(strcmp($this->Tokenize($response," "),"+OK")) + { + $this->error=gettext("POP3 authentication password was not accepted:") . " ".$this->Tokenize("\r\n"); + return(0); + } + fclose($this->connection); + $this->connection=0; + } + } + if(count($hosts)==0) + { + $this->error=gettext("could not determine the SMTP to connect"); + return(0); + } + for($host=0, $error="not connected";strlen($error) && $hostConnectToHost($domain, $this->host_port, sprintf(gettext("Resolving SMTP server domain \"%s\"..."), $domain)); + } + if(strlen($error)) + { + $this->error=$error; + return(0); + } + $timeout=($this->data_timeout ? $this->data_timeout : $this->timeout); + if($timeout + && function_exists("socket_set_timeout")) + socket_set_timeout($this->connection,$timeout,0); + if($this->debug) + $this->OutputDebug(sprintf(gettext("Connected to SMTP server \"%s\"."), $domain)); + if($this->VerifyResultLines("220",$responses)>0) + { + // Send our HELLO + $success = $this->hello($this->hostname()); + if ($this->tls) + $success = $this->startTLS(); + + if($success + && strlen($this->user) + && strlen($this->pop3_auth_host)==0) + { + if(!IsSet($this->esmtp_extensions["AUTH"])) + { + $this->error = gettext("server does not require authentication"); + $success=0; + } + else + { + if(strlen($this->authentication_mechanism)) + $mechanisms=array($this->authentication_mechanism); + else + { + $mechanisms=array(); + for($authentication=$this->Tokenize($this->esmtp_extensions["AUTH"]," ");strlen($authentication);$authentication=$this->Tokenize(" ")) + $mechanisms[]=$authentication; + } + $credentials=array( + "user"=>$this->user, + "password"=>$this->password + ); + if(strlen($this->realm)) + $credentials["realm"]=$this->realm; + if(strlen($this->workstation)) + $credentials["workstation"]=$this->workstation; + $success=$this->SASLAuthenticate($mechanisms,$credentials,$authenticated,$mechanism); + if(!$success + && !strcmp($mechanism,"PLAIN")) + { + /* + * Author: Russell Robinson, 25 May 2003, http://www.tectite.com/ + * Purpose: Try various AUTH PLAIN authentication methods. + */ + $mechanisms=array("PLAIN"); + $credentials=array( + "user"=>$this->user, + "password"=>$this->password + ); + if(strlen($this->realm)) + { + /* + * According to: http://www.sendmail.org/~ca/email/authrealms.html#authpwcheck_method + * some sendmails won't accept the realm, so try again without it + */ + $success=$this->SASLAuthenticate($mechanisms,$credentials,$authenticated,$mechanism); + } + if(!$success) + { + /* + * It was seen an EXIM configuration like this: + * user^password^unused + */ + $credentials["mode"]=SASL_PLAIN_EXIM_DOCUMENTATION_MODE; + $success=$this->SASLAuthenticate($mechanisms,$credentials,$authenticated,$mechanism); + } + if(!$success) + { + /* + * ... though: http://exim.work.de/exim-html-3.20/doc/html/spec_36.html + * specifies: ^user^password + */ + $credentials["mode"]=SASL_PLAIN_EXIM_MODE; + $success=$this->SASLAuthenticate($mechanisms,$credentials,$authenticated,$mechanism); + } + } + if($success + && strlen($mechanism)==0) + { + $this->error=gettext("it is not supported any of the authentication mechanisms required by the server"); + $success=0; + } + } + } + } + if($success) + { + $this->state="Connected"; + $this->connected_domain=$domain; + } + else + { + fclose($this->connection); + $this->connection=0; + } + return($success); + } + + Function hostname() { + if(!strcmp($localhost=$this->localhost,"") + && !strcmp($localhost=getenv("SERVER_NAME"),"") + && !strcmp($localhost=getenv("HOST"),"") + && !strcmp($localhost=getenv("HOSTNAME"),"") + && !strcmp($localhost=gethostname(),"")) + $localhost="localhost"; + + return $localhost; + } + + Function hello() + { + $success = 0; + $fallback = 1; + if ($this->esmtp || strlen($this->user)) { + if ($this->PutLine("EHLO ".$this->hostname())) { + if (($success_code = $this->VerifyResultLines("250",$responses)) > 0) { + $this->esmtp_host = $this->Tokenize($responses[0]," "); + for($response=1;$responseTokenize($responses[$response]," ")); + $this->esmtp_extensions[$extension]=$this->Tokenize(""); + } + $success = 1; + $fallback = 0; + } else { + if ($success_code == 0) { + $code = $this->Tokenize($this->error," -"); + switch($code) { + case "421": + $fallback=0; + break; + } + } + } + } else + $fallback=0; + } + + if ($fallback) { + if ($this->PutLine("HELO $localhost") && $this->VerifyResultLines("250",$responses)>0) + $success=1; + } + return $success; + } + + Function startTLS() { + if ($this->PutLine("STARTTLS") && $this->VerifyResultLines("220",$responses)>0) { + if (!stream_socket_enable_crypto($this->connection,true,STREAM_CRYPTO_METHOD_TLS_CLIENT)) { + return false; + } else { + // Resend HELO since session has been reset + return $this->hello($this->hostname); + } + } else + return false; + } + + Function MailFrom($sender) + { + if($this->direct_delivery) + { + switch($this->state) + { + case "Disconnected": + $this->direct_sender=$sender; + return(1); + case "Connected": + $sender=$this->direct_sender; + break; + default: + $this->error=gettext("direct delivery connection is already established and sender is already set"); + return(0); + } + } + else + { + if(strcmp($this->state,"Connected")) + { + $this->error=gettext("connection is not in the initial state"); + return(0); + } + } + $this->error=""; + if(!$this->PutLine("MAIL FROM:<$sender>")) + return(0); + if(!IsSet($this->esmtp_extensions["PIPELINING"]) + && $this->VerifyResultLines("250",$responses)<=0) + return(0); + $this->state="SenderSet"; + if(IsSet($this->esmtp_extensions["PIPELINING"])) + $this->pending_sender=1; + $this->pending_recipients=0; + return(1); + } + + Function SetRecipient($recipient) + { + if($this->direct_delivery) + { + if(GetType($at=strrpos($recipient,"@"))!="integer") + return(gettext("it was not specified a valid direct recipient")); + $domain=substr($recipient,$at+1); + switch($this->state) + { + case "Disconnected": + if(!$this->Connect($domain)) + return(0); + if(!$this->MailFrom("")) + { + $error=$this->error; + $this->Disconnect(); + $this->error=$error; + return(0); + } + break; + case "SenderSet": + case "RecipientSet": + if(strcmp($this->connected_domain,$domain)) + { + $this->error=gettext("it is not possible to deliver directly to recipients of different domains"); + return(0); + } + break; + default: + $this->error=gettext("connection is already established and the recipient is already set"); + return(0); + } + } + else + { + switch($this->state) + { + case "SenderSet": + case "RecipientSet": + break; + default: + $this->error=gettext("connection is not in the recipient setting state"); + return(0); + } + } + $this->error=""; + if(!$this->PutLine("RCPT TO:<$recipient>")) + return(0); + if(IsSet($this->esmtp_extensions["PIPELINING"])) + { + $this->pending_recipients++; + if($this->pending_recipients>=$this->maximum_piped_recipients) + { + if(!$this->FlushRecipients()) + return(0); + } + } + else + { + if($this->VerifyResultLines(array("250","251"),$responses)<=0) + return(0); + } + $this->state="RecipientSet"; + return(1); + } + + Function StartData() + { + if(strcmp($this->state,"RecipientSet")) + { + $this->error=gettext("connection is not in the start sending data state"); + return(0); + } + $this->error=""; + if(!$this->PutLine("DATA")) + return(0); + if($this->pending_recipients) + { + if(!$this->FlushRecipients()) + return(0); + } + if($this->VerifyResultLines("354",$responses)<=0) + return(0); + $this->state="SendingData"; + return(1); + } + + Function PrepareData(&$data,&$output,$preg=1) + { + if($preg + && function_exists("preg_replace")) + $output=preg_replace(array("/\n\n|\r\r/","/(^|[^\r])\n/","/\r([^\n]|\$)/D","/(^|\n)\\./"),array("\r\n\r\n","\\1\r\n","\r\n\\1","\\1.."),$data); + else + $output=ereg_replace("(^|\n)\\.","\\1..",ereg_replace("\r([^\n]|\$)","\r\n\\1",ereg_replace("(^|[^\r])\n","\\1\r\n",ereg_replace("\n\n|\r\r","\r\n\r\n",$data)))); + } + + Function SendData($data) + { + if(strcmp($this->state,"SendingData")) + { + $this->error=gettext("connection is not in the sending data state"); + return(0); + } + $this->error=""; + return($this->PutData($data)); + } + + Function EndSendingData() + { + if(strcmp($this->state,"SendingData")) + { + $this->error=gettext("connection is not in the sending data state"); + return(0); + } + $this->error=""; + if(!$this->PutLine("\r\n.") + || $this->VerifyResultLines("250",$responses)<=0) + return(0); + $this->state="Connected"; + return(1); + } + + Function ResetConnection() + { + switch($this->state) + { + case "Connected": + return(1); + case "SendingData": + $this->error="can not reset the connection while sending data"; + return(0); + case "Disconnected": + $this->error="can not reset the connection before it is established"; + return(0); + } + $this->error=""; + if(!$this->PutLine("RSET") + || $this->VerifyResultLines("250",$responses)<=0) + return(0); + $this->state="Connected"; + return(1); + } + + Function Disconnect($quit=1) + { + if(!strcmp($this->state,"Disconnected")) + { + $this->error=gettext("it was not previously established a SMTP connection"); + return(0); + } + $this->error=""; + if(!strcmp($this->state,"Connected") + && $quit + && (!$this->PutLine("QUIT") + || ($this->VerifyResultLines("221",$responses)<=0 + && !$this->disconnected_error))) + return(0); + if($this->disconnected_error) + $this->disconnected_error=0; + else + fclose($this->connection); + $this->connection=0; + $this->state="Disconnected"; + if($this->debug) + $this->OutputDebug("Disconnected."); + return(1); + } + + Function SendMessage($sender,$recipients,$headers,$body) + { + if(($success=$this->Connect())) + { + if(($success=$this->MailFrom($sender))) + { + for($recipient=0;$recipientSetRecipient($recipients[$recipient]))) + break; + } + if($success + && ($success=$this->StartData())) + { + for($header_data="",$header=0;$headerSendData($header_data."\r\n"))) + { + $this->PrepareData($body,$body_data); + $success=$this->SendData($body_data); + } + if($success) + $success=$this->EndSendingData(); + } + } + $error=$this->error; + $disconnect_success=$this->Disconnect($success); + if($success) + $success=$disconnect_success; + else + $this->error=$error; + } + return($success); + } + +}; + +?> diff --git a/etc/inc/system.inc b/etc/inc/system.inc new file mode 100644 index 000000000..3dead2878 --- /dev/null +++ b/etc/inc/system.inc @@ -0,0 +1,2016 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/sbin/powerd /usr/bin/killall /sbin/route + pfSense_BUILDER_BINARIES: /bin/hostname /bin/ls /usr/sbin/syslogd + pfSense_BUILDER_BINARIES: /usr/sbin/pccardd /usr/local/sbin/lighttpd /bin/chmod /bin/mkdir + pfSense_BUILDER_BINARIES: /usr/bin/tar /usr/local/sbin/ntpd /usr/local/sbin/ntpdate + pfSense_BUILDER_BINARIES: /usr/bin/nohup /sbin/dmesg /usr/local/sbin/atareinit /sbin/kldload + pfSense_BUILDER_BINARIES: /usr/local/sbin/filterdns + pfSense_MODULE: utils +*/ + +function activate_powerd() { + global $config, $g; + if ($g['platform'] == 'jail') + return; + if(is_process_running("powerd")) + exec("/usr/bin/killall powerd"); + if(isset($config['system']['powerd_enable'])) { + if ($g["platform"] == "nanobsd") + exec("/sbin/kldload cpufreq"); + + $ac_mode = "hadp"; + if (!empty($config['system']['powerd_ac_mode'])) + $ac_mode = $config['system']['powerd_ac_mode']; + + $battery_mode = "hadp"; + if (!empty($config['system']['powerd_battery_mode'])) + $battery_mode = $config['system']['powerd_battery_mode']; + + $normal_mode = "hadp"; + if (!empty($config['system']['powerd_normal_mode'])) + $normal_mode = $config['system']['powerd_normal_mode']; + + mwexec("/usr/sbin/powerd -b $battery_mode -a $ac_mode -n $normal_mode"); + } +} + +function get_default_sysctl_value($id) { + global $sysctls; + + if (isset($sysctls[$id])) + return $sysctls[$id]; +} + +function activate_sysctls() { + global $config, $g; + + if ($g['platform'] == 'jail') + return; + + $sysctls = array( + "net.enc.out.ipsec_bpf_mask" => "0x0001", + "net.enc.out.ipsec_filter_mask" => "0x0001", + "net.enc.in.ipsec_bpf_mask" => "0x0002", + "net.enc.in.ipsec_filter_mask" => "0x0002" + ); + + if(is_array($config['sysctl'])) { + foreach($config['sysctl']['item'] as $tunable) { + if($tunable['value'] == "default") + $value = get_default_sysctl_value($tunable['tunable']); + else + $value = $tunable['value']; + + $sysctls[$tunable['tunable']] = $value; + } + } + + set_sysctl($sysctls); +} + +function system_resolvconf_generate($dynupdate = false) { + global $config, $g; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_resolvconf_generate() being called $mt\n"; + } + + $syscfg = $config['system']; + + // Do not create blank domain lines, it breaks tools like dig. + if($syscfg['domain']) + $resolvconf = "domain {$syscfg['domain']}\n"; + + if (((isset($config['dnsmasq']['enable']) && (empty($config['dnsmasq']['interface']) || in_array("lo0", explode(",", $config['dnsmasq']['interface'])))) + || (isset($config['unbound']['enable'])) && (empty($config['unbound']['active_interface']) || in_array("lo0", explode(",", $config['unbound']['active_interface'])))) + && !isset($config['system']['dnslocalhost'])) + $resolvconf .= "nameserver 127.0.0.1\n"; + + if (isset($syscfg['dnsallowoverride'])) { + /* get dynamically assigned DNS servers (if any) */ + $ns = array_unique(get_searchdomains()); + foreach($ns as $searchserver) { + if($searchserver) + $resolvconf .= "search {$searchserver}\n"; + } + $ns = array_unique(get_nameservers()); + foreach($ns as $nameserver) { + if($nameserver) + $resolvconf .= "nameserver $nameserver\n"; + } + } + if (is_array($syscfg['dnsserver'])) { + foreach ($syscfg['dnsserver'] as $ns) { + if ($ns) + $resolvconf .= "nameserver $ns\n"; + } + } + + // Add EDNS support + if (isset($config['unbound']['enable']) && isset($config['unbound']['edns'])) + $resolvconf .= "options edns0\n"; + + $dnslock = lock('resolvconf', LOCK_EX); + + $fd = fopen("{$g['varetc_path']}/resolv.conf", "w"); + if (!$fd) { + printf("Error: cannot open resolv.conf in system_resolvconf_generate().\n"); + unlock($dnslock); + return 1; + } + + fwrite($fd, $resolvconf); + fclose($fd); + + if (!$g['booting']) { + /* restart dhcpd (nameservers may have changed) */ + if (!$dynupdate) + services_dhcpd_configure(); + } + + /* setup static routes for DNS servers. */ + for ($dnscounter=1; $dnscounter<5; $dnscounter++) { + /* setup static routes for dns servers */ + $dnsgw = "dns{$dnscounter}gw"; + if (isset($config['system'][$dnsgw])) { + $gwname = $config['system'][$dnsgw]; + if (($gwname <> "") && ($gwname <> "none")) { + $gatewayip = lookup_gateway_ip_by_name($gwname); + if (is_ipaddrv4($gatewayip)) { + /* dns server array starts at 0 */ + $dnscountermo = $dnscounter - 1; + mwexec("/sbin/route change -host " . $syscfg['dnsserver'][$dnscountermo] . " {$gatewayip}"); + } + if (is_ipaddrv6($gatewayip)) { + /* dns server array starts at 0 */ + $dnscountermo = $dnscounter - 1; + mwexec("/sbin/route change -host -inet6 " . $syscfg['dnsserver'][$dnscountermo] . " {$gatewayip}"); + } + } + } + } + + unlock($dnslock); + + return 0; +} + +function get_searchdomains() { + global $config, $g; + + $master_list = array(); + + // Read in dhclient nameservers + $search_list = glob("/var/etc/searchdomain_*"); + if (is_array($search_list)) { + foreach($search_list as $fdns) { + $contents = file($fdns, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if (!is_array($contents)) + continue; + foreach ($contents as $dns) { + if(is_hostname($dns)) + $master_list[] = $dns; + } + } + } + + return $master_list; +} + +function get_nameservers() { + global $config, $g; + $master_list = array(); + + // Read in dhclient nameservers + $dns_lists = glob("/var/etc/nameserver_*"); + if (is_array($dns_lists)) { + foreach($dns_lists as $fdns) { + $contents = file($fdns, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if (!is_array($contents)) + continue; + foreach ($contents as $dns) { + if(is_ipaddr($dns)) + $master_list[] = $dns; + } + } + } + + // Read in any extra nameservers + if(file_exists("/var/etc/nameservers.conf")) { + $dns_s = file("/var/etc/nameservers.conf", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if(is_array($dns_s)) { + foreach($dns_s as $dns) + if (is_ipaddr($dns)) + $master_list[] = $dns; + } + } + + return $master_list; +} + +function system_hosts_generate() { + global $config, $g; + if (isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_hosts_generate() being called $mt\n"; + } + + $syscfg = $config['system']; + $dnsmasqcfg = $config['dnsmasq']; + + $hosts = "127.0.0.1 localhost localhost.{$syscfg['domain']}\n"; + $lhosts = ""; + $dhosts = ""; + + if ($config['interfaces']['lan']) { + $cfgip = get_interface_ip("lan"); + if (is_ipaddr($cfgip)) + $hosts .= "{$cfgip} {$syscfg['hostname']}.{$syscfg['domain']} {$syscfg['hostname']}\n"; + } else { + $sysiflist = get_configured_interface_list(); + foreach ($sysiflist as $sysif) { + if (!interface_has_gateway($sysif)) { + $cfgip = get_interface_ip($sysif); + if (is_ipaddr($cfgip)) { + $hosts .= "{$cfgip} {$syscfg['hostname']}.{$syscfg['domain']} {$syscfg['hostname']}\n"; + break; + } + } + } + } + + if (isset($dnsmasqcfg['enable'])) { + if (!is_array($dnsmasqcfg['hosts'])) + $dnsmasqcfg['hosts'] = array(); + + foreach ($dnsmasqcfg['hosts'] as $host) { + if ($host['host']) + $lhosts .= "{$host['ip']} {$host['host']}.{$host['domain']} {$host['host']}\n"; + else + $lhosts .= "{$host['ip']} {$host['domain']}\n"; + if (!is_array($host['aliases']) || !is_array($host['aliases']['item'])) + continue; + foreach ($host['aliases']['item'] as $alias) { + if ($alias['host']) + $lhosts .= "{$host['ip']} {$alias['host']}.{$alias['domain']} {$alias['host']}\n"; + else + $lhosts .= "{$host['ip']} {$alias['domain']}\n"; + } + } + if (isset($dnsmasqcfg['regdhcpstatic']) && is_array($config['dhcpd'])) { + foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) + if(is_array($dhcpifconf['staticmap']) && isset($dhcpifconf['enable'])) + foreach ($dhcpifconf['staticmap'] as $host) + if ($host['ipaddr'] && $host['hostname'] && $host['domain']) + $dhosts .= "{$host['ipaddr']} {$host['hostname']}.{$host['domain']} {$host['hostname']}\n"; + else if ($host['ipaddr'] && $host['hostname'] && $dhcpifconf['domain']) + $dhosts .= "{$host['ipaddr']} {$host['hostname']}.{$dhcpifconf['domain']} {$host['hostname']}\n"; + else if ($host['ipaddr'] && $host['hostname']) + $dhosts .= "{$host['ipaddr']} {$host['hostname']}.{$syscfg['domain']} {$host['hostname']}\n"; + } + if (isset($dnsmasqcfg['regdhcpstatic']) && is_array($config['dhcpdv6'])) { + foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf) + if(is_array($dhcpifconf['staticmap']) && isset($dhcpifconf['enable'])) + foreach ($dhcpifconf['staticmap'] as $host) + if ($host['ipaddrv6'] && $host['hostname'] && $host['domain']) + $dhosts .= "{$host['ipaddrv6']} {$host['hostname']}.{$host['domain']} {$host['hostname']}\n"; + else if ($host['ipaddrv6'] && $host['hostname'] && $dhcpifconf['domain']) + $dhosts .= "{$host['ipaddrv6']} {$host['hostname']}.{$dhcpifconf['domain']} {$host['hostname']}\n"; + else if ($host['ipaddrv6'] && $host['hostname']) + $dhosts .= "{$host['ipaddrv6']} {$host['hostname']}.{$syscfg['domain']} {$host['hostname']}\n"; + } + + if (isset($dnsmasqcfg['dhcpfirst'])) + $hosts .= $dhosts . $lhosts; + else + $hosts .= $lhosts . $dhosts; + } + + /* + * Do not remove this because dhcpleases monitors with kqueue it needs to be + * killed before writing to hosts files. + */ + if (file_exists("{$g['varrun_path']}/dhcpleases.pid")) { + sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "TERM"); + @unlink("{$g['varrun_path']}/dhcpleases.pid"); + } + $fd = fopen("{$g['varetc_path']}/hosts", "w"); + if (!$fd) { + log_error("Error: cannot open hosts file in system_hosts_generate().\n"); + return 1; + } + fwrite($fd, $hosts); + fclose($fd); + + if (isset($config['unbound']['enable'])) { + require_once("unbound.inc"); + unbound_hosts_generate(); + } + + system_dhcpleases_configure(); + + return 0; +} + +function system_dhcpleases_configure() { + global $config, $g; + + if ($g['platform'] == 'jail') + return; + /* Start the monitoring process for dynamic dhcpclients. */ + if ((isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcp'])) + || (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcp']))) { + /* Make sure we do not error out */ + mwexec("/bin/mkdir -p {$g['dhcpd_chroot_path']}/var/db"); + if (!file_exists("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases")) + @touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases"); + if (isvalidpid("{$g['varrun_path']}/dhcpleases.pid")) + sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "HUP"); + else { + /* To ensure we do not start multiple instances of dhcpleases, perform some clean-up first. */ + if (is_process_running("dhcpleases")) + mwexec('/bin/pkill dhcpleases'); + @unlink("{$g['varrun_path']}/dhcpleases.pid"); + if (isset($config['unbound']['enable'])) + $dns_pid = "unbound.pid"; + else + $dns_pid = "dnsmasq.pid"; + mwexec("/usr/local/sbin/dhcpleases -l {$g['dhcpd_chroot_path']}/var/db/dhcpd.leases -d {$config['system']['domain']} -p {$g['varrun_path']}/{$dns_pid} -h {$g['varetc_path']}/hosts"); + } + } else { + sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "TERM"); + @unlink("{$g['varrun_path']}/dhcpleases.pid"); + } +} + +function system_hostname_configure() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_hostname_configure() being called $mt\n"; + } + + $syscfg = $config['system']; + + /* set hostname */ + $status = mwexec("/bin/hostname " . + escapeshellarg("{$syscfg['hostname']}.{$syscfg['domain']}")); + + /* Setup host GUID ID. This is used by ZFS. */ + mwexec("/etc/rc.d/hostid start"); + + return $status; +} + +function system_routing_configure($interface = "") { + global $config, $g; + if ($g['platform'] == 'jail') + return; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_routing_configure() being called $mt\n"; + } + + $gatewayip = ""; + $interfacegw = ""; + $foundgw = false; + $gatewayipv6 = ""; + $interfacegwv6 = ""; + $foundgwv6 = false; + /* tack on all the hard defined gateways as well */ + if (is_array($config['gateways']['gateway_item'])) { + array_map('unlink', glob("{$g['tmp_path']}/*_defaultgw{,v6}", GLOB_BRACE)); + foreach ($config['gateways']['gateway_item'] as $gateway) { + if (isset($gateway['defaultgw'])) { + if ($gateway['ipprotocol'] != "inet6" && (is_ipaddrv4($gateway['gateway']) || $gateway['gateway'] == "dynamic")) { + if(strstr($gateway['gateway'], ":")) + continue; + if ($gateway['gateway'] == "dynamic") + $gateway['gateway'] = get_interface_gateway($gateway['interface']); + $gatewayip = $gateway['gateway']; + $interfacegw = $gateway['interface']; + if (!empty($gateway['interface'])) { + $defaultif = get_real_interface($gateway['interface']); + if ($defaultif) + @file_put_contents("{$g['tmp_path']}/{$defaultif}_defaultgw", $gateway['gateway']); + } + $foundgw = true; + } else if ($gateway['ipprotocol'] == "inet6" && (is_ipaddrv6($gateway['gateway']) || $gateway['gateway'] == "dynamic")) { + if ($gateway['gateway'] == "dynamic") + $gateway['gateway'] = get_interface_gateway_v6($gateway['interface']); + $gatewayipv6 = $gateway['gateway']; + $interfacegwv6 = $gateway['interface']; + if (!empty($gateway['interface'])) { + $defaultifv6 = get_real_interface($gateway['interface']); + if ($defaultifv6) + @file_put_contents("{$g['tmp_path']}/{$defaultifv6}_defaultgwv6", $gateway['gateway']); + } + $foundgwv6 = true; + } + } + if ($foundgw === true && $foundgwv6 === true) + break; + } + } + if ($foundgw == false) { + $defaultif = get_real_interface("wan"); + $interfacegw = "wan"; + $gatewayip = get_interface_gateway("wan"); + @touch("{$g['tmp_path']}/{$defaultif}_defaultgw"); + } + if ($foundgwv6 == false) { + $defaultifv6 = get_real_interface("wan"); + $interfacegwv6 = "wan"; + $gatewayipv6 = get_interface_gateway_v6("wan"); + @touch("{$g['tmp_path']}/{$defaultif}_defaultgwv6"); + } + $dont_add_route = false; + /* if OLSRD is enabled, allow WAN to house DHCP. */ + if (is_array($config['installedpackages']['olsrd'])) { + foreach($config['installedpackages']['olsrd']['config'] as $olsrd) { + if(($olsrd['enabledyngw'] == "on") && ($olsrd['enable'] == "on")) { + $dont_add_route = true; + log_error(sprintf(gettext("Not adding default route because OLSR dynamic gateway is enabled."))); + break; + } + } + } + + if ($dont_add_route == false ) { + if (!empty($interface) && $interface != $interfacegw) + ; + else if (is_ipaddrv4($gatewayip)) { + log_error("ROUTING: setting default route to $gatewayip"); + mwexec("/sbin/route change -inet default " . escapeshellarg($gatewayip)); + } + + if (!empty($interface) && $interface != $interfacegwv6) + ; + else if (is_ipaddrv6($gatewayipv6)) { + $ifscope = ""; + if (is_linklocal($gatewayipv6)) + $ifscope = "%{$defaultifv6}"; + log_error("ROUTING: setting IPv6 default route to {$gatewayipv6}{$ifscope}"); + mwexec("/sbin/route change -inet6 default " . escapeshellarg("{$gatewayipv6}{$ifscope}")); + } + } + + system_staticroutes_configure($interface, false); + + return 0; +} + +function system_staticroutes_configure($interface = "", $update_dns = false) { + global $config, $g, $aliastable; + + $filterdns_list = array(); + + $static_routes = get_staticroutes(false, true); + if (count($static_routes)) { + $gateways_arr = return_gateways_array(false, true); + + foreach ($static_routes as $rtent) { + if (empty($gateways_arr[$rtent['gateway']])) { + log_error(sprintf(gettext("Static Routes: Gateway IP could not be found for %s"), $rtent['network'])); + continue; + } + $gateway = $gateways_arr[$rtent['gateway']]; + if (!empty($interface) && $interface != $gateway['friendlyiface']) + continue; + + $gatewayip = $gateway['gateway']; + $interfacegw = $gateway['interface']; + + $blackhole = ""; + if (!strcasecmp("Null", substr($rtent['gateway'], 0, 3))) + $blackhole = "-blackhole"; + + if (!is_fqdn($rtent['network']) && !is_subnet($rtent['network'])) + continue; + + $dnscache = array(); + if ($update_dns === true) { + if (is_subnet($rtent['network'])) + continue; + $dnscache = explode("\n", trim(compare_hostname_to_dnscache($rtent['network']))); + if (empty($dnscache)) + continue; + } + + if (is_subnet($rtent['network'])) + $ips = array($rtent['network']); + else { + if (!isset($rtent['disabled'])) + $filterdns_list[] = $rtent['network']; + $ips = add_hostname_to_watch($rtent['network']); + } + + foreach ($dnscache as $ip) { + if (in_array($ip, $ips)) + continue; + mwexec("/sbin/route delete " . escapeshellarg($ip), true); + } + + if (isset($rtent['disabled'])) { + /* XXX: This is a bit dangerous in case of routing daemons!? */ + foreach ($ips as $ip) + mwexec("/sbin/route delete " . escapeshellarg($ip), true); + continue; + } + + foreach ($ips as $ip) { + if (is_ipaddrv4($ip)) + $ip .= "/32"; + else if (is_ipaddrv6($ip)) + $ip .= "/128"; + + $inet = (is_subnetv6($ip) ? "-inet6" : "-inet"); + + $cmd = "/sbin/route change {$inet} {$blackhole} " . escapeshellarg($ip) . " "; + + if (is_subnet($ip)) + if (is_ipaddr($gatewayip)) + mwexec($cmd . escapeshellarg($gatewayip)); + else if (!empty($interfacegw)) + mwexec($cmd . "-iface " . escapeshellarg($interfacegw)); + } + } + unset($gateways_arr); + } + unset($static_routes); + + if ($update_dns === false) { + if (count($filterdns_list)) { + $interval = 60; + $hostnames = ""; + array_unique($filterdns_list); + foreach ($filterdns_list as $hostname) + $hostnames .= "cmd {$hostname} '/usr/local/sbin/pfSctl -c \"service reload routedns\"'\n"; + file_put_contents("{$g['varetc_path']}/filterdns-route.hosts", $hostnames); + unset($hostnames); + + if (isvalidpid("{$g['varrun_path']}/filterdns-route.pid")) + sigkillbypid("{$g['varrun_path']}/filterdns-route.pid", "HUP"); + else + mwexec("/usr/local/sbin/filterdns -p {$g['varrun_path']}/filterdns-route.pid -i {$interval} -c {$g['varetc_path']}/filterdns-route.hosts -d 1"); + } else { + killbypid("{$g['varrun_path']}/filterdns-route.pid"); + @unlink("{$g['varrun_path']}/filterdns-route.pid"); + } + } + unset($filterdns_list); + + return 0; +} + +function system_routing_enable() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_routing_enable() being called $mt\n"; + } + + set_sysctl(array( + "net.inet.ip.forwarding" => "1", + "net.inet6.ip6.forwarding" => "1" + )); + + return; +} + +function system_syslogd_fixup_server($server) { + /* If it's an IPv6 IP alone, encase it in brackets */ + if (is_ipaddrv6($server)) + return "[$server]"; + else + return $server; +} + +function system_syslogd_get_remote_servers($syslogcfg, $facility = "*.*") { + // Rather than repeatedly use the same code, use this function to build a list of remote servers. + $facility .= " ". + $remote_servers = ""; + $pad_to = 56; + $padding = ceil(($pad_to - strlen($facility))/8)+1; + if($syslogcfg['remoteserver']) + $remote_servers .= "{$facility}" . str_repeat("\t", $padding) . "@" . system_syslogd_fixup_server($syslogcfg['remoteserver']) . "\n"; + if($syslogcfg['remoteserver2']) + $remote_servers .= "{$facility}" . str_repeat("\t", $padding) . "@" . system_syslogd_fixup_server($syslogcfg['remoteserver2']) . "\n"; + if($syslogcfg['remoteserver3']) + $remote_servers .= "{$facility}" . str_repeat("\t", $padding) . "@" . system_syslogd_fixup_server($syslogcfg['remoteserver3']) . "\n"; + return $remote_servers; +} + +function system_syslogd_start() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_syslogd_start() being called $mt\n"; + } + + mwexec("/etc/rc.d/hostid start"); + + $syslogcfg = $config['syslog']; + + if ($g['booting']) + echo gettext("Starting syslog..."); + + if (is_process_running("fifolog_writer")) + mwexec('/bin/pkill fifolog_writer'); + + // Which logging type are we using this week?? + if (isset($config['system']['disablesyslogclog'])) { + $log_directive = ""; + $log_create_directive = "/usr/bin/touch "; + $log_size = ""; + } else if (isset($config['system']['usefifolog'])) { + $log_directive = "|/usr/sbin/fifolog_writer "; + $log_size = isset($config['syslog']['logfilesize']) ? $config['syslog']['logfilesize'] : "10240"; + $log_create_directive = "/usr/sbin/fifolog_create -s "; + } else { // Defaults to CLOG + $log_directive = "%"; + $log_size = isset($config['syslog']['logfilesize']) ? $config['syslog']['logfilesize'] : "10240"; + $log_create_directive = "/usr/local/sbin/clog -i -s "; + } + + $syslogd_extra = ""; + if (isset($syslogcfg)) { + $separatelogfacilities = array('ntp','ntpd','ntpdate','charon','openvpn','pptps','poes','l2tps','relayd','hostapd','dnsmasq','filterdns','unbound','dhcpd','dhcrelay','dhclient','dhcp6c','apinger','radvd','routed','olsrd','zebra','ospfd','bgpd','miniupnpd','filterlog'); + $syslogconf = ""; + if($config['installedpackages']['package']) { + foreach($config['installedpackages']['package'] as $package) { + if($package['logging']) { + array_push($separatelogfacilities, $package['logging']['facilityname']); + mwexec("{$log_create_directive} {$log_size} {$g['varlog_path']}/{$package['logging']['logfilename']}"); + $syslogconf .= "!{$package['logging']['facilityname']}\n*.*\t\t\t\t\t\t {$log_directive}{$g['varlog_path']}/{$package['logging']['logfilename']}\n"; + } + } + } + $facilitylist = implode(',', array_unique($separatelogfacilities)); + $syslogconf .= "!radvd,routed,olsrd,zebra,ospfd,bgpd,miniupnpd\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/routing.log\n"; + + $syslogconf .= "!ntp,ntpd,ntpdate\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/ntpd.log\n"; + + $syslogconf .= "!ppp\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/ppp.log\n"; + + $syslogconf .= "!pptps\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/pptps.log\n"; + + $syslogconf .= "!poes\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/poes.log\n"; + + $syslogconf .= "!l2tps\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/l2tps.log\n"; + + $syslogconf .= "!charon\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/ipsec.log\n"; + if (isset($syslogcfg['vpn'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!openvpn\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/openvpn.log\n"; + if (isset($syslogcfg['vpn'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!apinger\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/gateways.log\n"; + if (isset($syslogcfg['apinger'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!dnsmasq,filterdns,unbound\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/resolver.log\n"; + + $syslogconf .= "!dhcpd,dhcrelay,dhclient,dhcp6c\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/dhcpd.log\n"; + if (isset($syslogcfg['dhcp'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!relayd\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/relayd.log\n"; + if (isset($syslogcfg['relayd'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!hostapd\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/wireless.log\n"; + if (isset($syslogcfg['hostapd'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!filterlog\n"; + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/filter.log\n"; + if (isset($syslogcfg['filter'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!-{$facilitylist}\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= << "") + $portarg = "{$config['system']['webgui']['port']}"; + + if ($config['system']['webgui']['protocol'] == "https") { + // Ensure that we have a webConfigurator CERT + $cert =& lookup_cert($config['system']['webgui']['ssl-certref']); + if(!is_array($cert) && !$cert['crt'] && !$cert['prv']) { + if (!is_array($config['ca'])) + $config['ca'] = array(); + $a_ca =& $config['ca']; + if (!is_array($config['cert'])) + $config['cert'] = array(); + $a_cert =& $config['cert']; + log_error("Creating SSL Certificate for this host"); + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = gettext("webConfigurator default"); + mwexec("/usr/bin/openssl genrsa 1024 > {$g['tmp_path']}/ssl.key"); + mwexec("/usr/bin/openssl req -new -x509 -nodes -sha256 -days 2000 -key {$g['tmp_path']}/ssl.key > {$g['tmp_path']}/ssl.crt"); + $crt = file_get_contents("{$g['tmp_path']}/ssl.crt"); + $key = file_get_contents("{$g['tmp_path']}/ssl.key"); + unlink("{$g['tmp_path']}/ssl.key"); + unlink("{$g['tmp_path']}/ssl.crt"); + cert_import($cert, $crt, $key); + $a_cert[] = $cert; + $config['system']['webgui']['ssl-certref'] = $cert['refid']; + write_config(gettext("Importing HTTPS certificate")); + if(!$config['system']['webgui']['port']) + $portarg = "443"; + $ca = ca_chain($cert); + } else { + $crt = base64_decode($cert['crt']); + $key = base64_decode($cert['prv']); + if(!$config['system']['webgui']['port']) + $portarg = "443"; + $ca = ca_chain($cert); + } + } + + /* generate lighttpd configuration */ + system_generate_lighty_config("{$g['varetc_path']}/lighty-webConfigurator.conf", + $crt, $key, $ca, "lighty-webConfigurator.pid", $portarg, "/usr/local/www/", + "cert.pem", "ca.pem"); + + /* kill any running lighttpd */ + killbypid("{$g['varrun_path']}/lighty-webConfigurator.pid"); + + sleep(1); + + @unlink("{$g['varrun_path']}/lighty-webConfigurator.pid"); + + /* attempt to start lighthttpd */ + $res = mwexec("/usr/local/sbin/lighttpd -f {$g['varetc_path']}/lighty-webConfigurator.conf"); + + if ($g['booting']) { + if ($res == 0) + echo gettext("done.") . "\n"; + else + echo gettext("failed!") . "\n"; + } + + return $res; +} + +function system_generate_lighty_config($filename, + $cert, + $key, + $ca, + $pid_file, + $port = 80, + $document_root = "/usr/local/www/", + $cert_location = "cert.pem", + $ca_location = "ca.pem", + $captive_portal = false) { + + global $config, $g; + + if(!is_dir("{$g['tmp_path']}/lighttpdcompress")) + mkdir("{$g['tmp_path']}/lighttpdcompress"); + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_generate_lighty_config() being called $mt\n"; + } + + if ($captive_portal !== false) { + $captiveportal = ",\"mod_rewrite\",\"mod_evasive\""; + $captive_portal_rewrite = "url.rewrite-once = ( \"(.*captiveportal.*)\" => \"$1\", \"(.*)\" => \"/index.php?zone={$captive_portal}&redirurl=$1\" )\n"; + + $maxprocperip = $config['captiveportal'][$captive_portal]['maxprocperip']; + if (empty($maxprocperip)) + $maxprocperip = 10; + $captive_portal_mod_evasive = "evasive.max-conns-per-ip = {$maxprocperip}"; + + $server_upload_dirs = "server.upload-dirs = ( \"{$g['tmp_path']}/captiveportal/\" )\n"; + if(!is_dir("{$g['tmp_path']}/captiveportal")) + @mkdir("{$g['tmp_path']}/captiveportal", 0555); + $server_max_request_size = "server.max-request-size = 384"; + $cgi_config = ""; + } else { + $captiveportal = ",\"mod_cgi\""; + $captive_portal_rewrite = ""; + $captive_portal_mod_evasive = ""; + $server_upload_dirs = "server.upload-dirs = ( \"{$g['upload_path']}/\", \"{$g['tmp_path']}/\", \"/var/\" )\n"; + $server_max_request_size = "server.max-request-size = 2097152"; + $cgi_config = "cgi.assign = ( \".cgi\" => \"\" )"; + } + + if (empty($port)) + $lighty_port = "80"; + else + $lighty_port = $port; + + $memory = get_memory(); + $realmem = $memory[1]; + + // Determine web GUI process settings and take into account low memory systems + if ($realmem < 255) + $max_procs = 1; + else + $max_procs = ($config['system']['webgui']['max_procs']) ? $config['system']['webgui']['max_procs'] : 2; + + // Ramp up captive portal max procs, assuming each PHP process can consume up to 64MB RAM + if ($captive_portal !== false) { + if ($realmem > 135 and $realmem < 256) { + $max_procs += 1; // 2 worker processes + } else if ($realmem > 255 and $realmem < 513) { + $max_procs += 2; // 3 worker processes + } else if ($realmem > 512) { + $max_procs += 4; // 6 worker processes + } + if ($max_procs > 1) + $max_php_children = intval($max_procs/2); + else + $max_php_children = 1; + + } else { + if ($realmem < 78) + $max_php_children = 0; + else + $max_php_children = 1; + } + + if(!isset($config['syslog']['nologlighttpd'])) { + $lighty_use_syslog = << + ( "localhost" => + ( + "socket" => "{$fast_cgi_path}", + "max-procs" => {$max_procs}, + "bin-environment" => ( + "PHP_FCGI_CHILDREN" => "{$max_php_children}", + "PHP_FCGI_MAX_REQUESTS" => "500" + ), + "bin-path" => "/usr/local/bin/php" + ) + ) +) + +EOD; + } else { + $fast_cgi_path = "{$g['varrun_path']}/php-fpm.socket"; + $fastcgi_config = << + ( "localhost" => + ( + "socket" => "{$fast_cgi_path}", + "broken-scriptfilename" => "enable" + ) + ) +) + +EOD; + } + + + $lighty_config = << "application/pdf", + ".sig" => "application/pgp-signature", + ".spl" => "application/futuresplash", + ".class" => "application/octet-stream", + ".ps" => "application/postscript", + ".torrent" => "application/x-bittorrent", + ".dvi" => "application/x-dvi", + ".gz" => "application/x-gzip", + ".pac" => "application/x-ns-proxy-autoconfig", + ".swf" => "application/x-shockwave-flash", + ".tar.gz" => "application/x-tgz", + ".tgz" => "application/x-tgz", + ".tar" => "application/x-tar", + ".zip" => "application/zip", + ".mp3" => "audio/mpeg", + ".m3u" => "audio/x-mpegurl", + ".wma" => "audio/x-ms-wma", + ".wax" => "audio/x-ms-wax", + ".ogg" => "audio/x-wav", + ".wav" => "audio/x-wav", + ".gif" => "image/gif", + ".jpg" => "image/jpeg", + ".jpeg" => "image/jpeg", + ".png" => "image/png", + ".xbm" => "image/x-xbitmap", + ".xpm" => "image/x-xpixmap", + ".xwd" => "image/x-xwindowdump", + ".css" => "text/css", + ".html" => "text/html", + ".htm" => "text/html", + ".js" => "text/javascript", + ".asc" => "text/plain", + ".c" => "text/plain", + ".conf" => "text/plain", + ".text" => "text/plain", + ".txt" => "text/plain", + ".dtd" => "text/xml", + ".xml" => "text/xml", + ".mpeg" => "video/mpeg", + ".mpg" => "video/mpeg", + ".mov" => "video/quicktime", + ".qt" => "video/quicktime", + ".avi" => "video/x-msvideo", + ".asf" => "video/x-ms-asf", + ".asx" => "video/x-ms-asf", + ".wmv" => "video/x-ms-wmv", + ".bz2" => "application/x-bzip", + ".tbz" => "application/x-bzip-compressed-tar", + ".tar.bz2" => "application/x-bzip-compressed-tar" + ) + +# Use the "Content-Type" extended attribute to obtain mime type if possible +#mimetypes.use-xattr = "enable" + +## deny access the file-extensions +# +# ~ is for backupfiles from vi, emacs, joe, ... +# .inc is often used for code includes which should in general not be part +# of the document-root +url.access-deny = ( "~", ".inc" ) + + +######### Options that are good to be but not neccesary to be changed ####### + +## bind to port (default: 80) + +EOD; + + $lighty_config .= "server.bind = \"0.0.0.0\"\n"; + $lighty_config .= "server.port = {$lighty_port}\n"; + $lighty_config .= "\$SERVER[\"socket\"] == \"0.0.0.0:{$lighty_port}\" { }\n"; + $lighty_config .= "\$SERVER[\"socket\"] == \"[::]:{$lighty_port}\" { \n"; + if($cert <> "" and $key <> "") { + $lighty_config .= "\n"; + $lighty_config .= "## ssl configuration\n"; + $lighty_config .= "ssl.engine = \"enable\"\n"; + $lighty_config .= "ssl.pemfile = \"{$g['varetc_path']}/{$cert_location}\"\n\n"; + if($ca <> "") + $lighty_config .= "ssl.ca-file = \"{$g['varetc_path']}/{$ca_location}\"\n\n"; + } + $lighty_config .= " }\n"; + + + $lighty_config .= << "access 50 hours", + ) + +EOD; + + $cert = str_replace("\r", "", $cert); + $key = str_replace("\r", "", $key); + $ca = str_replace("\r", "", $ca); + + $cert = str_replace("\n\n", "\n", $cert); + $key = str_replace("\n\n", "\n", $key); + $ca = str_replace("\n\n", "\n", $ca); + + if($cert <> "" and $key <> "") { + $fd = fopen("{$g['varetc_path']}/{$cert_location}", "w"); + if (!$fd) { + printf(gettext("Error: cannot open cert.pem in system_webgui_start().%s"), "\n"); + return 1; + } + chmod("{$g['varetc_path']}/{$cert_location}", 0600); + fwrite($fd, $cert); + fwrite($fd, "\n"); + fwrite($fd, $key); + fclose($fd); + if(!(empty($ca) || (strlen(trim($ca)) == 0))) { + $fd = fopen("{$g['varetc_path']}/{$ca_location}", "w"); + if (!$fd) { + printf(gettext("Error: cannot open ca.pem in system_webgui_start().%s"), "\n"); + return 1; + } + chmod("{$g['varetc_path']}/{$ca_location}", 0600); + fwrite($fd, $ca); + fclose($fd); + } + $lighty_config .= "\n"; + $lighty_config .= "## " . gettext("ssl configuration") . "\n"; + $lighty_config .= "ssl.engine = \"enable\"\n"; + $lighty_config .= "ssl.pemfile = \"{$g['varetc_path']}/{$cert_location}\"\n\n"; + + // Harden SSL a bit for PCI conformance testing + $lighty_config .= "ssl.use-sslv2 = \"disable\"\n"; + + /* Hifn accelerators do NOT work with the BEAST mitigation code. Do not allow it to be enabled if a Hifn card has been detected. */ + $fd = @fopen("{$g['varlog_path']}/dmesg.boot", "r"); + if ($fd) { + while (!feof($fd)) { + $dmesgl = fgets($fd); + if (preg_match("/^hifn.: (.*?),/", $dmesgl, $matches) && isset($config['system']['webgui']['beast_protection'])) { + unset($config['system']['webgui']['beast_protection']); + log_error("BEAST Protection disabled because a conflicting cryptographic accelerator card has been detected (" . $matches[1] . ")"); + break; + } + } + fclose($fd); + } + + if (isset($config['system']['webgui']['beast_protection'])) { + $lighty_config .= "ssl.honor-cipher-order = \"enable\"\n"; + $lighty_config .= "ssl.cipher-list = \"ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4-SHA:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM\"\n"; + } else { + $lighty_config .= "ssl.cipher-list = \"DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:CAMELLIA256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-DSS-CAMELLIA128-SHA:CAMELLIA128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:RC4-SHA:RC4-MD5:!aNULL:!eNULL:!3DES:@STRENGTH\"\n"; + } + + if(!(empty($ca) || (strlen(trim($ca)) == 0))) + $lighty_config .= "ssl.ca-file = \"{$g['varetc_path']}/{$ca_location}\"\n\n"; + } + + // Add HTTP to HTTPS redirect + if ($captive_portal === false && $config['system']['webgui']['protocol'] == "https" && !isset($config['system']['webgui']['disablehttpredirect'])) { + if($lighty_port != "443") + $redirectport = ":{$lighty_port}"; + $lighty_config .= << "https://%1{$redirectport}/$1" ) + } +} +\$SERVER["socket"] == "[::]:80" { + \$HTTP["host"] =~ "(.*)" { + url.redirect = ( "^/(.*)" => "https://%1{$redirectport}/$1" ) + } +} +EOD; + } + + $fd = fopen("{$filename}", "w"); + if (!$fd) { + printf(gettext("Error: cannot open %s in system_generate_lighty_config().%s"), $filename, "\n"); + return 1; + } + fwrite($fd, $lighty_config); + fclose($fd); + + return 0; + +} + +function system_timezone_configure() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_timezone_configure() being called $mt\n"; + } + + $syscfg = $config['system']; + + if ($g['booting']) + echo gettext("Setting timezone..."); + + /* extract appropriate timezone file */ + $timezone = $syscfg['timezone']; + if ($timezone) { + exec('/usr/bin/tar -tvzf /usr/share/zoneinfo.tgz', $tzs); + foreach ($tzs as $tz) { + if (preg_match(",{$timezone}$,", $tz)) + break; + if (preg_match(",{$timezone} link to *(.*)$,", $tz, $matches)) { + $timezone = $matches[1]; + break; + } + } + } else + $timezone = "Etc/UTC"; + + conf_mount_rw(); + + exec("LANG=C /usr/bin/tar xzfO /usr/share/zoneinfo.tgz " . + escapeshellarg($timezone) . " > /etc/localtime"); + + mwexec("sync"); + conf_mount_ro(); + + if ($g['booting']) + echo gettext("done.") . "\n"; +} + +function system_ntp_setup_gps($serialport) { + global $config, $g; + $gps_device = '/dev/gps0'; + $serialport = '/dev/'.$serialport; + + if (!file_exists($serialport)) + return false; + + conf_mount_rw(); + // Create symlink that ntpd requires + unlink_if_exists($gps_device); + symlink($serialport, $gps_device); + + /* Send the following to the GPS port to initialize the GPS */ + if (is_array($config['ntpd']) && is_array($config['ntpd']['gps']) && !empty($config['ntpd']['gps']['type'])) { + $gps_init = base64_decode($config['ntpd']['gps']['initcmd']); + }else{ + $gps_init = base64_decode('JFBVQlgsNDAsR1NWLDAsMCwwLDAqNTkNCiRQVUJYLDQwLEdMTCwwLDAsMCwwKjVDDQokUFVCWCw0MCxaREEsMCwwLDAsMCo0NA0KJFBVQlgsNDAsVlRHLDAsMCwwLDAqNUUNCiRQVUJYLDQwLEdTViwwLDAsMCwwKjU5DQokUFVCWCw0MCxHU0EsMCwwLDAsMCo0RQ0KJFBVQlgsNDAsR0dBLDAsMCwwLDANCiRQVUJYLDQwLFRYVCwwLDAsMCwwDQokUFVCWCw0MCxSTUMsMCwwLDAsMCo0Ng0KJFBVQlgsNDEsMSwwMDA3LDAwMDMsNDgwMCwwDQokUFVCWCw0MCxaREEsMSwxLDEsMQ=='); + } + + /* XXX: Why not file_put_contents to the device */ + @file_put_contents('/tmp/gps.init', $gps_init); + `cat /tmp/gps.init > $serialport`; + + /* Add /etc/remote entry in case we need to read from the GPS with tip */ + if (intval(`grep -c '^gps0' /etc/remote`) == 0) { + $gpsbaud = '4800'; + if (is_array($config['ntpd']) && is_array($config['ntpd']['gps']) && !empty($config['ntpd']['gps']['speed'])) { + switch($config['ntpd']['gps']['speed']) { + case '16': + $gpsbaud = '9600'; + break; + case '32': + $gpsbaud = '19200'; + break; + case '48': + $gpsbaud = '38400'; + break; + case '64': + $gpsbaud = '57600'; + break; + case '80': + $gpsbaud = '115200'; + break; + } + } + @file_put_contents("/etc/remote", "gps0:dv={$serialport}:br#{$gpsbaud}:pa=none:", FILE_APPEND); + } + + conf_mount_ro(); + + return true; +} + +function system_ntp_setup_pps($serialport) { + global $config, $g; + + $pps_device = '/dev/pps0'; + $serialport = '/dev/'.$serialport; + + if (!file_exists($serialport)) + return false; + + conf_mount_rw(); + // Create symlink that ntpd requires + unlink_if_exists($pps_device); + @symlink($serialport, $pps_device); + + conf_mount_ro(); + + return true; +} + + +function system_ntp_configure($start_ntpd=true) { + global $config, $g; + + $driftfile = "/var/db/ntpd.drift"; + $statsdir = "/var/log/ntp"; + $gps_device = '/dev/gps0'; + + if ($g['platform'] == 'jail') + return; + + safe_mkdir($statsdir); + + if (!is_array($config['ntpd'])) + $config['ntpd'] = array(); + + $ntpcfg = "# \n"; + $ntpcfg .= "# pfSense ntp configuration file \n"; + $ntpcfg .= "# \n\n"; + $ntpcfg .= "tinker panic 0 \n"; + + /* Add Orphan mode */ + $ntpcfg .= "# Orphan mode stratum\n"; + $ntpcfg .= 'tos orphan '; + if (!empty($config['ntpd']['orphan'])) { + $ntpcfg .= $config['ntpd']['orphan']; + }else{ + $ntpcfg .= '12'; + } + $ntpcfg .= "\n"; + + /* Add PPS configuration */ + if (!empty($config['ntpd']['pps']) + && file_exists('/dev/'.$config['ntpd']['pps']['port']) + && system_ntp_setup_pps($config['ntpd']['pps']['port'])) { + $ntpcfg .= "\n"; + $ntpcfg .= "# PPS Setup\n"; + $ntpcfg .= 'server 127.127.22.0'; + $ntpcfg .= ' minpoll 4 maxpoll 4'; + if (empty($config['ntpd']['pps']['prefer'])) { /*note: this one works backwards */ + $ntpcfg .= ' prefer'; + } + if (!empty($config['ntpd']['pps']['noselect'])) { + $ntpcfg .= ' noselect '; + } + $ntpcfg .= "\n"; + $ntpcfg .= 'fudge 127.127.22.0'; + if (!empty($config['ntpd']['pps']['fudge1'])) { + $ntpcfg .= ' time1 '; + $ntpcfg .= $config['ntpd']['pps']['fudge1']; + } + if (!empty($config['ntpd']['pps']['flag2'])) { + $ntpcfg .= ' flag2 1'; + } + if (!empty($config['ntpd']['pps']['flag3'])) { + $ntpcfg .= ' flag3 1'; + }else{ + $ntpcfg .= ' flag3 0'; + } + if (!empty($config['ntpd']['pps']['flag4'])) { + $ntpcfg .= ' flag4 1'; + } + if (!empty($config['ntpd']['pps']['refid'])) { + $ntpcfg .= ' refid '; + $ntpcfg .= $config['ntpd']['pps']['refid']; + } + $ntpcfg .= "\n"; + } + /* End PPS configuration */ + + /* Add GPS configuration */ + if (!empty($config['ntpd']['gps']) + && file_exists('/dev/'.$config['ntpd']['gps']['port']) + && system_ntp_setup_gps($config['ntpd']['gps']['port'])) { + $ntpcfg .= "\n"; + $ntpcfg .= "# GPS Setup\n"; + $ntpcfg .= 'server 127.127.20.0 mode '; + if (!empty($config['ntpd']['gps']['nmea']) || !empty($config['ntpd']['gps']['speed']) || !empty($config['ntpd']['gps']['subsec'])) { + if (!empty($config['ntpd']['gps']['nmea'])) { + $ntpmode = (int) $config['ntpd']['gps']['nmea']; + } + if (!empty($config['ntpd']['gps']['speed'])) { + $ntpmode += (int) $config['ntpd']['gps']['speed']; + } + if (!empty($config['ntpd']['gps']['subsec'])) { + $ntpmode += 128; + } + $ntpcfg .= (string) $ntpmode; + }else{ + $ntpcfg .= '0'; + } + $ntpcfg .= ' minpoll 4 maxpoll 4'; + if (empty($config['ntpd']['gps']['prefer'])) { /*note: this one works backwards */ + $ntpcfg .= ' prefer'; + } + if (!empty($config['ntpd']['gps']['noselect'])) { + $ntpcfg .= ' noselect '; + } + $ntpcfg .= "\n"; + $ntpcfg .= 'fudge 127.127.20.0'; + if (!empty($config['ntpd']['gps']['fudge1'])) { + $ntpcfg .= ' time1 '; + $ntpcfg .= $config['ntpd']['gps']['fudge1']; + } + if (!empty($config['ntpd']['gps']['fudge2'])) { + $ntpcfg .= ' time2 '; + $ntpcfg .= $config['ntpd']['gps']['fudge2']; + } + if (!empty($config['ntpd']['gps']['flag1'])) { + $ntpcfg .= ' flag1 1'; + }else{ + $ntpcfg .= ' flag1 0'; + } + if (!empty($config['ntpd']['gps']['flag2'])) { + $ntpcfg .= ' flag2 1'; + } + if (!empty($config['ntpd']['gps']['flag3'])) { + $ntpcfg .= ' flag3 1'; + }else{ + $ntpcfg .= ' flag3 0'; + } + if (!empty($config['ntpd']['gps']['flag4'])) { + $ntpcfg .= ' flag4 1'; + } + if (!empty($config['ntpd']['gps']['refid'])) { + $ntpcfg .= ' refid '; + $ntpcfg .= $config['ntpd']['gps']['refid']; + } + $ntpcfg .= "\n"; + }elseif (!empty($config['ntpd']['gpsport']) + && file_exists('/dev/'.$config['ntpd']['gpsport']) + && system_ntp_setup_gps($config['ntpd']['gpsport'])) { + /* This handles a 2.1 and earlier config */ + $ntpcfg .= "# GPS Setup\n"; + $ntpcfg .= "server 127.127.20.0 mode 0 minpoll 4 maxpoll 4 prefer\n"; + $ntpcfg .= "fudge 127.127.20.0 time1 0.155 time2 0.000 flag1 1 flag2 0 flag3 1\n"; + // Fall back to local clock if GPS is out of sync? + $ntpcfg .= "server 127.127.1.0\n"; + $ntpcfg .= "fudge 127.127.1.0 stratum 12\n"; + } + /* End GPS configuration */ + + $ntpcfg .= "\n\n# Upstream Servers\n"; + /* foreach through ntp servers and write out to ntpd.conf */ + foreach (explode(' ', $config['system']['timeservers']) as $ts) { + $ntpcfg .= "server {$ts} iburst maxpoll 9"; + if (substr_count($config['ntpd']['prefer'], $ts)) $ntpcfg .= ' prefer'; + if (substr_count($config['ntpd']['noselect'], $ts)) $ntpcfg .= ' noselect'; + $ntpcfg .= "\n"; + } + unset($ts); + + $ntpcfg .= "\n\n"; + $ntpcfg .= "disable monitor\n"; //prevent NTP reflection attack, see https://forum.pfsense.org/index.php/topic,67189.msg389132.html#msg389132 + if (!empty($config['ntpd']['clockstats']) || !empty($config['ntpd']['loopstats']) || !empty($config['ntpd']['peerstats'])) { + $ntpcfg .= "enable stats\n"; + $ntpcfg .= 'statistics'; + if (!empty($config['ntpd']['clockstats'])) { + $ntpcfg .= ' clockstats'; + } + if (!empty($config['ntpd']['loopstats'])) { + $ntpcfg .= ' loopstats'; + } + if (!empty($config['ntpd']['peerstats'])) { + $ntpcfg .= ' peerstats'; + } + $ntpcfg .= "\n"; + } + $ntpcfg .= "statsdir {$statsdir}\n"; + $ntpcfg .= 'logconfig =syncall +clockall'; + if (!empty($config['ntpd']['logpeer'])) { + $ntpcfg .= ' +peerall'; + } + if (!empty($config['ntpd']['logsys'])) { + $ntpcfg .= ' +sysall'; + } + $ntpcfg .= "\n"; + $ntpcfg .= "driftfile {$driftfile}\n"; + /* Access restrictions */ + $ntpcfg .= 'restrict default'; + if (empty($config['ntpd']['kod'])) { /*note: this one works backwards */ + $ntpcfg .= ' kod limited'; + } + if (empty($config['ntpd']['nomodify'])) { /*note: this one works backwards */ + $ntpcfg .= ' nomodify'; + } + if (!empty($config['ntpd']['noquery'])) { + $ntpcfg .= ' noquery'; + } + if (empty($config['ntpd']['nopeer'])) { /*note: this one works backwards */ + $ntpcfg .= ' nopeer'; + } + if (empty($config['ntpd']['notrap'])) { /*note: this one works backwards */ + $ntpcfg .= ' notrap'; + } + if (!empty($config['ntpd']['noserve'])) { + $ntpcfg .= ' noserve'; + } + $ntpcfg .= "\nrestrict -6 default"; + if (empty($config['ntpd']['kod'])) { /*note: this one works backwards */ + $ntpcfg .= ' kod limited'; + } + if (empty($config['ntpd']['nomodify'])) { /*note: this one works backwards */ + $ntpcfg .= ' nomodify'; + } + if (!empty($config['ntpd']['noquery'])) { + $ntpcfg .= ' noquery'; + } + if (empty($config['ntpd']['nopeer'])) { /*note: this one works backwards */ + $ntpcfg .= ' nopeer'; + } + if (!empty($config['ntpd']['noserve'])) { + $ntpcfg .= ' noserve'; + } + if (empty($config['ntpd']['notrap'])) { /*note: this one works backwards */ + $ntpcfg .= ' notrap'; + } + $ntpcfg .= "\n"; + + /* A leapseconds file is really only useful if this clock is stratum 1 */ + $ntpcfg .= "\n"; + if (!empty($config['ntpd']['leapsec'])) { + $leapsec .= base64_decode($config['ntpd']['leapsec']); + file_put_contents('/var/db/leap-seconds', $leapsec); + $ntpcfg .= "leapfile /var/db/leap-seconds\n"; + } + + + if (empty($config['ntpd']['interface'])) + if (is_array($config['installedpackages']['openntpd']) && !empty($config['installedpackages']['openntpd']['config'][0]['interface'])) + $interfaces = explode(",", $config['installedpackages']['openntpd']['config'][0]['interface']); + else + $interfaces = array(); + else + $interfaces = explode(",", $config['ntpd']['interface']); + + if (is_array($interfaces) && count($interfaces)) { + $ntpcfg .= "interface ignore all\n"; + foreach ($interfaces as $interface) { + if (!is_ipaddr($interface)) { + $interface = get_real_interface($interface); + } + if (!empty($interface)) + $ntpcfg .= "interface listen {$interface}\n"; + } + } + + /* open configuration for wrting or bail */ + if (!@file_put_contents("{$g['varetc_path']}/ntpd.conf", $ntpcfg)) { + log_error("Could not open {$g['varetc_path']}/ntpd.conf for writing"); + return; + } + + /* At bootup we just want to write out the config. */ + if (!$start_ntpd) + return; + + /* if ntpd is running, kill it */ + while (isvalidpid("{$g['varrun_path']}/ntpd.pid")) { + killbypid("{$g['varrun_path']}/ntpd.pid"); + } + @unlink("{$g['varrun_path']}/ntpd.pid"); + + /* if /var/empty does not exist, create it */ + if(!is_dir("/var/empty")) + mkdir("/var/empty", 0775, true); + + /* start opentpd, set time now and use /var/etc/ntpd.conf */ + mwexec("/usr/local/sbin/ntpd -g -c {$g['varetc_path']}/ntpd.conf -p {$g['varrun_path']}/ntpd.pid", false, true); + + // Note that we are starting up + log_error("NTPD is starting up."); + return; +} + +function sync_system_time() { + global $config, $g; + + if ($g['booting']) + echo gettext("Syncing system time before startup..."); + + /* foreach through servers and write out to ntpd.conf */ + foreach (explode(' ', $config['system']['timeservers']) as $ts) { + mwexec("/usr/local/sbin/ntpdate -s $ts"); + } + + if ($g['booting']) + echo gettext("done.") . "\n"; + +} + +function system_halt() { + global $g; + + system_reboot_cleanup(); + + mwexec("/usr/bin/nohup /etc/rc.halt > /dev/null 2>&1 &"); +} + +function system_reboot() { + global $g; + + system_reboot_cleanup(); + + mwexec("nohup /etc/rc.reboot > /dev/null 2>&1 &"); +} + +function system_reboot_sync() { + global $g; + + system_reboot_cleanup(); + + mwexec("/etc/rc.reboot > /dev/null 2>&1"); +} + +function system_reboot_cleanup() { + global $config, $cpzone; + + mwexec("/usr/local/bin/beep.sh stop"); + require_once("captiveportal.inc"); + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpzone=>$cp) { + captiveportal_radius_stop_all(); + captiveportal_send_server_accounting(true); + } + } + require_once("voucher.inc"); + voucher_save_db_to_config(); + require_once("pkg-utils.inc"); + stop_packages(); +} + +function system_do_shell_commands($early = 0) { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_do_shell_commands() being called $mt\n"; + } + + if ($early) + $cmdn = "earlyshellcmd"; + else + $cmdn = "shellcmd"; + + if (is_array($config['system'][$cmdn])) { + + /* *cmd is an array, loop through */ + foreach ($config['system'][$cmdn] as $cmd) { + exec($cmd); + } + + } elseif($config['system'][$cmdn] <> "") { + + /* execute single item */ + exec($config['system'][$cmdn]); + + } +} + +function system_console_configure() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_console_configure() being called $mt\n"; + } + + if (isset($config['system']['disableconsolemenu'])) { + touch("{$g['varetc_path']}/disableconsole"); + } else { + unlink_if_exists("{$g['varetc_path']}/disableconsole"); + } +} + +function system_dmesg_save() { + global $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_dmesg_save() being called $mt\n"; + } + + $dmesg = ""; + $_gb = exec("/sbin/dmesg", $dmesg); + + /* find last copyright line (output from previous boots may be present) */ + $lastcpline = 0; + + for ($i = 0; $i < count($dmesg); $i++) { + if (strstr($dmesg[$i], "Copyright (c) 1992-")) + $lastcpline = $i; + } + + $fd = fopen("{$g['varlog_path']}/dmesg.boot", "w"); + if (!$fd) { + printf(gettext("Error: cannot open dmesg.boot in system_dmesg_save().%s"), "\n"); + return 1; + } + + for ($i = $lastcpline; $i < count($dmesg); $i++) + fwrite($fd, $dmesg[$i] . "\n"); + + fclose($fd); + unset($dmesg); + + return 0; +} + +function system_set_harddisk_standby() { + global $g, $config; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_set_harddisk_standby() being called $mt\n"; + } + + if (isset($config['system']['harddiskstandby'])) { + if ($g['booting']) { + echo gettext('Setting hard disk standby... '); + } + + $standby = $config['system']['harddiskstandby']; + // Check for a numeric value + if (is_numeric($standby)) { + // Sync the disk(s) + pfSense_sync(); + if (set_single_sysctl('hw.ata.standby', (int)$standby)) { + // Reinitialize ATA-drives + mwexec('/usr/local/sbin/atareinit'); + if ($g['booting']) { + echo gettext("done.") . "\n"; + } + } else if ($g['booting']) { + echo gettext("failed!") . "\n"; + } + } else if ($g['booting']) { + echo gettext("failed!") . "\n"; + } + } +} + +function system_setup_sysctl() { + global $config; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_setup_sysctl() being called $mt\n"; + } + + activate_sysctls(); + + if (isset($config['system']['sharednet'])) { + system_disable_arp_wrong_if(); + } +} + +function system_disable_arp_wrong_if() { + global $config; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_disable_arp_wrong_if() being called $mt\n"; + } + set_sysctl(array( + "net.link.ether.inet.log_arp_wrong_iface" => "0", + "net.link.ether.inet.log_arp_movements" => "0" + )); +} + +function system_enable_arp_wrong_if() { + global $config; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_enable_arp_wrong_if() being called $mt\n"; + } + set_sysctl(array( + "net.link.ether.inet.log_arp_wrong_iface" => "1", + "net.link.ether.inet.log_arp_movements" => "1" + )); +} + +function enable_watchdog() { + global $config; + return; + $install_watchdog = false; + $supported_watchdogs = array("Geode"); + $file = file_get_contents("/var/log/dmesg.boot"); + foreach($supported_watchdogs as $sd) { + if(stristr($file, "Geode")) { + $install_watchdog = true; + } + } + if($install_watchdog == true) { + if(is_process_running("watchdogd")) + mwexec("/usr/bin/killall watchdogd", true); + exec("/usr/sbin/watchdogd"); + } +} + +function system_check_reset_button() { + global $g; + if($g['platform'] != "nanobsd") + return 0; + + $specplatform = system_identify_specific_platform(); + + if ($specplatform['name'] != "wrap" && $specplatform['name'] != "alix") + return 0; + + $retval = mwexec("/usr/local/sbin/" . $specplatform['name'] . "resetbtn"); + + if ($retval == 99) { + /* user has pressed reset button for 2 seconds - + reset to factory defaults */ + echo << platform string (e.g. 'wrap', 'alix' etc.) + descr => human-readable description (e.g. "PC Engines WRAP") +*/ +function system_identify_specific_platform() { + global $g; + + if ($g['platform'] == 'generic-pc') + return array('name' => 'generic-pc', 'descr' => gettext("Generic PC")); + + if ($g['platform'] == 'generic-pc-cdrom') + return array('name' => 'generic-pc-cdrom', 'descr' => gettext("Generic PC (CD-ROM)")); + + /* the rest of the code only deals with 'embedded' platforms */ + if ($g['platform'] != 'nanobsd') + return array('name' => $g['platform'], 'descr' => $g['platform']); + + $dmesg = get_single_sysctl('hw.model'); + + if (strpos($dmesg, "PC Engines WRAP") !== false) + return array('name' => 'wrap', 'descr' => gettext('PC Engines WRAP')); + + if (strpos($dmesg, "PC Engines ALIX") !== false) + return array('name' => 'alix', 'descr' => gettext('PC Engines ALIX')); + + if (preg_match("/Soekris net45../", $dmesg, $matches)) + return array('name' => 'net45xx', 'descr' => $matches[0]); + + if (preg_match("/Soekris net48../", $dmesg, $matches)) + return array('name' => 'net48xx', 'descr' => $matches[0]); + + if (preg_match("/Soekris net55../", $dmesg, $matches)) + return array('name' => 'net55xx', 'descr' => $matches[0]); + + /* unknown embedded platform */ + return array('name' => 'embedded', 'descr' => gettext('embedded (unknown)')); +} + +function system_get_dmesg_boot() { + global $g; + + return file_get_contents("{$g['varlog_path']}/dmesg.boot"); +} + +function get_possible_listen_ips($include_ipv6_link_local=false) { + $interfaces = get_configured_interface_with_descr(); + $carplist = get_configured_carp_interface_list(); + $listenips = array(); + foreach ($carplist as $cif => $carpip) + $interfaces[$cif] = $carpip." (".get_vip_descr($carpip).")"; + $aliaslist = get_configured_ip_aliases_list(); + foreach ($aliaslist as $aliasip => $aliasif) + $interfaces[$aliasip] = $aliasip." (".get_vip_descr($aliasip).")"; + foreach ($interfaces as $iface => $ifacename) { + $tmp["name"] = $ifacename; + $tmp["value"] = $iface; + $listenips[] = $tmp; + if ($include_ipv6_link_local) { + $llip = find_interface_ipv6_ll(get_real_interface($iface)); + if (!empty($llip)) { + $tmp["name"] = "{$ifacename} IPv6 Link-Local"; + $tmp["value"] = $llip; + $listenips[] = $tmp; + } + } + } + $tmp["name"] = "Localhost"; + $tmp["value"] = "lo0"; + $listenips[] = $tmp; + return $listenips; +} + +function get_possible_traffic_source_addresses($include_ipv6_link_local=false) { + global $config; + $sourceips = get_possible_listen_ips($include_ipv6_link_local); + foreach (array('server', 'client') as $mode) { + if (is_array($config['openvpn']["openvpn-{$mode}"])) { + foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) { + if (!isset($setting['disable'])) { + $vpn = array(); + $vpn['value'] = 'ovpn' . substr($mode, 0, 1) . $setting['vpnid']; + $vpn['name'] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']); + $sourceips[] = $vpn; + } + } + } + } + return $sourceips; +} +?> diff --git a/etc/inc/unbound.inc b/etc/inc/unbound.inc new file mode 100644 index 000000000..8cd922712 --- /dev/null +++ b/etc/inc/unbound.inc @@ -0,0 +1,685 @@ + + 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. + + pfSense_BUILDER_BINARIES: /usr/sbin/unbound /usr/sbin/unbound-anchor /usr/sbin/unbound-checkconf + pfSense_BUILDER_BINARIES: /usr/sbin/unbound-control /usr/sbin/unbound-control-setup + pfSense_MODULE: unbound +*/ + +/* include all configuration functions */ +require_once("config.inc"); +require_once("functions.inc"); + +/* Optimize Unbound for environment */ +function unbound_optimization() { + global $config; + + $optimization_settings = array(); + + /* + * Set the number of threads equal to number of CPUs. + * Use 1 to disable threading, if for some reason this sysctl fails. + */ + $numprocs = intval(get_single_sysctl('kern.smp.cpus')); + if ($numprocs > 0) + $optimization['number_threads'] = "num-threads: {$numprocs}"; + else + $optimization['number_threads'] = "num-threads: 1"; + + // Slabs to help reduce lock contention. + if ($numprocs > 4) { + $optimization['msg_cache_slabs'] = "msg-cache-slabs: {$numprocs}"; + $optimization['rrset_cache_slabs'] = "rrset-cache-slabs: {$numprocs}"; + $optimization['infra_cache_slabs'] = "infra-cache-slabs: {$numprocs}"; + $optimization['key_cache_slabs'] = "key-cache-slabs: {$numprocs}"; + } else { + $optimization['msg_cache_slabs'] = "msg-cache-slabs: 4"; + $optimization['rrset_cache_slabs'] = "rrset-cache-slabs: 4"; + $optimization['infra_cache_slabs'] = "infra-cache-slabs: 4"; + $optimization['key_cache_slabs'] = "key-cache-slabs: 4"; + } + + // Memory usage default of 4MB + $optimization['msg_cache_size'] = "msg-cache-size: 4m"; + $optimization['rrset_cache_size'] = "rrset-cache-size: 8m"; + + // More outgoing connections per thread otherwise assign a default of 4096 for a single thread + if ($numprocs > 0) { + $or = (1024/$numprocs) - 50; + $optimization['outgoing_range'] = "outgoing-range: {$or}"; + } else + $optimization['outgoing_range'] = "outgoing-range: {4096}"; + + /* + * Larger socket buffer for busy servers + * Check that it is set to 4MB (by default the OS has it configured to 4MB) + */ + foreach ($config['sysctl']['item'] as $tunable) { + if ($tunable['tunable'] == 'kern.ipc.maxsockbuf') { + $so = floor(($tunable['value']/1024/1024)-1); + // Check to ensure that the number is not a negative + if ($so > 0) + $optimization['so_rcvbuf'] = "so-rcvbuf: {$so}m"; + else + unset($optimization['so_rcvbuf']); + } + } + // Safety check in case kern.ipc.maxsockbuf is not available. + if (!isset($optimization['so_rcvbuf'])) + $optimization['so_rcvbuf'] = "#so-rcvbuf: 4m"; + + return $optimization; + +} + +function unbound_generate_config() { + global $config, $g; + + // Setup optimization + $optimization = unbound_optimization(); + + // Setup DNSSEC support + if (isset($config['unbound']['dnssec'])) { + $module_config = "validator iterator"; + $anchor_file = "auto-trust-anchor-file: {$g['unbound_chroot_path']}/root.key"; + } else + $module_config = "iterator"; + + // Setup DNS Rebinding + if (!isset($config['system']['webgui']['nodnsrebindcheck'])) { + // Private-addresses for DNS Rebinding + $private_addr = << "$ip", fqdn => "$fqdn", name => "$name")); + else + array_push($etc_hosts, array(ipaddr => "$ip", fqdn => "$fqdn")); + } + } + } + return $etc_hosts; +} + +function sync_unbound_service() { + global $config, $g; + + // Configure chroot + if (!is_dir($g['unbound_chroot_path'])) { + mkdir($g['unbound_chroot_path']); + chown($g['unbound_chroot_path'], "unbound"); + chgrp($g['unbound_chroot_path'], "unbound"); + } + + // Configure our Unbound service + do_as_unbound_user("unbound-anchor"); + unbound_remote_control_setup(); + unbound_generate_config(); + do_as_unbound_user("start"); + require_once("service-utils.inc"); + if (is_service_running("unbound")) + do_as_unbound_user("restore_cache"); + +} + +function unbound_acl_id_used($id) { + global $config; + + if (is_array($config['unbound']['acls'])) + foreach($config['unbound']['acls'] as & $acls) + if ($id == $acls['aclid']) + return true; + + return false; +} + +function unbound_get_next_id() { + $aclid = 0; + while(unbound_acl_id_used($aclid)) + $aclid++; + return $aclid; +} + +// Execute commands as the user unbound +function do_as_unbound_user($cmd) { + global $g; + + switch ($cmd) { + case "start": + mwexec("/usr/sbin/unbound -c {$g['unbound_chroot_path']}/unbound.conf"); + break; + case "stop": + mwexec("echo '/usr/sbin/unbound-control stop' | /usr/bin/su -m unbound", true); + break; + case "unbound-anchor": + mwexec("echo '/usr/sbin/unbound-anchor -a {$g['unbound_chroot_path']}/root.key' | /usr/bin/su -m unbound", true); + break; + case "unbound-control-setup": + mwexec("echo '/usr/sbin/unbound-control-setup -d {$g['unbound_chroot_path']}' | /usr/bin/su -m unbound", true); + break; + default: + break; + } +} + +function unbound_add_domain_overrides($pvt=false) { + global $config, $g; + + $domains = $config['unbound']['domainoverrides']; + + $sorted_domains = msort($domains, "domain"); + $result = array(); + foreach($sorted_domains as $domain) { + $domain_key = current($domain); + if (!isset($result[$domain_key])) + $result[$domain_key] = array(); + $result[$domain_key][] = $domain['ip']; + } + + // Domain overrides that have multiple entries need multiple stub-addr: added + $domain_entries = ""; + foreach($result as $domain=>$ips) { + if ($pvt == true) { + $domain_entries .= "private-domain: \"$domain\"\n"; + $domain_entries .= "domain-insecure: \"$domain\"\n"; + } else { + $domain_entries .= "stub-zone:\n"; + $domain_entries .= "\tname: \"$domain\"\n"; + foreach($ips as $ip) + $domain_entries .= "\tstub-addr: $ip\n"; + $domain_entries .= "\tstub-prime: no\n"; + } + } + + if ($pvt == true) + return $domain_entries; + else + file_put_contents("{$g['unbound_chroot_path']}/domainoverrides.conf", $domain_entries); +} + +function unbound_add_host_entries() { + global $config, $g; + + $unbound_entries = "local-zone: \"{$config['system']['domain']}\" transparent\n"; + // IPv4 entries + $unbound_entries .= "local-data-ptr: \"127.0.0.1 localhost\"\n"; + $unbound_entries .= "local-data: \"localhost A 127.0.0.1\"\n"; + $unbound_entries .= "local-data: \"localhost.{$config['system']['domain']} A 127.0.0.1\"\n"; + // IPv6 entries + $unbound_entries .= "local-data-ptr: \"::1 localhost\"\n"; + $unbound_entries .= "local-data: \"localhost AAAA ::1\"\n"; + $unbound_entries .= "local-data: \"localhost.{$config['system']['domain']} AAAA ::1\"\n"; + + $listen_addresses = ""; + if (isset($config['unbound']['interface'])) { + $interfaces = explode(",", $config['unbound']['interface']); + foreach ($interfaces as $interface) { + if (is_ipaddrv4($interface)) { + $unbound_entries .= "local-data-ptr: \"{$interface} {$config['system']['hostname']}.{$config['system']['domain']}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']}.{$config['system']['domain']} A {$interface}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']} A {$interface}\"\n"; + } else if (is_ipaddrv6($interface)) { + $unbound_entries .= "local-data: \"{$config['system']['hostname']}.{$config['system']['domain']} AAAA {$interface}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']} AAAA {$interface}\"\n"; + } else { + $if = get_real_interface($interface); + if (does_interface_exist($if)) { + $laddr = find_interface_ip($if); + if (is_ipaddrv4($laddr)) { + $unbound_entries .= "local-data-ptr: \"{$laddr} {$config['system']['hostname']}.{$config['system']['domain']}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']}.{$config['system']['domain']} A {$laddr}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']} A {$laddr}\"\n"; + } + $laddr6 = find_interface_ipv6($if); + if (is_ipaddrv6($laddr6) && !isset($config['dnsmasq']['strictbind'])) { + $unbound_entries .= "local-data-ptr: \"{$laddr6} {$config['system']['hostname']}.{$config['system']['domain']}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']}.{$config['system']['domain']} AAAA {$laddr}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']} AAAA {$laddr}\"\n"; + } + } + } + } + } + + // Static Host entries + if (isset($config['unbound']['hosts'])) { + $host_entries = ""; + $added_item = array(); + foreach($config['unbound']['hosts'] as $host) { + $current_host = $host['host']; + if ($host['host'] != "") + $host['host'] = $host['host']."."; + if (!$added_item[$current_host]) { + $host_entries .= "local-data-ptr: \"{$host['ip']} {$host['host']}{$host['domain']}\"\n"; + if (is_ipaddrv6($host['ip'])) + $host_entries .= "local-data: \"{$host['host']}{$host['domain']} IN AAAA {$host['ip']}\"\n"; + else + $host_entries .= "local-data: \"{$host['host']}{$host['domain']} IN A {$host['ip']}\"\n"; + if (!empty($host['descr']) && isset($config['unbound']['txtsupport'])) + $host_entries .= "local-data: '{$host['host']}{$host['domain']} TXT \"".addslashes($host['descr'])."\"'\n"; + + // Do not add duplicate entries + $added_item[$current_host] = true; + } + } + $unbound_entries .= $host_entries; + } + + // Static DHCP entries + $host_entries = ""; + if (isset($config['unbound']['regdhcpstatic']) && is_array($config['dhcpd'])) { + foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) + if (is_array($dhcpifconf['staticmap']) && isset($dhcpifconf['enable'])) + foreach ($dhcpifconf['staticmap'] as $host) + if ($host['ipaddr'] && $host['hostname']) { + $host_entries .= "local-data-ptr: \"{$host['ipaddr']} {$host['hostname']}.{$config['system']['domain']}\"\n"; + $host_entries .= "local-data: \"{$host['hostname']}.{$config['system']['domain']} IN A {$host['ipaddr']}\"\n"; + if (!empty($host['descr']) && $unboundcfg['txtsupport'] == 'on') + $host_entries .= "local-data: '{$host['hostname']}.{$config['system']['domain']} TXT \"".addslashes($host['descr'])."\"'\n"; + } + $unbound_entries .= $host_entries; + } + + // Handle DHCPLeases added host entries + $dhcplcfg = read_hosts(); + $host_entries = ""; + if (is_array($dhcplcfg)) { + foreach($dhcplcfg as $key=>$host) { + $host_entries .= "local-data-ptr: \"{$host['ipaddr']} {$host['fqdn']}\"\n"; + $host_entries .= "local-data: \"{$host['fqdn']} IN A {$host['ipaddr']}\"\n"; + if (!empty($host['name'])) { + $host_entries .= "local-data-ptr: \"{$host['ipaddr']} {$host['name']}\"\n"; + $host_entries .= "local-data: \"{$host['name']} IN A {$host['ipaddr']}\"\n"; + } + } + $unbound_entries .= $host_entries; + } + + // Write out entries + file_put_contents("{$g['unbound_chroot_path']}/host_entries.conf", $unbound_entries); +} + +function unbound_control($action) { + global $config, $g; + + $cache_dumpfile = "/var/tmp/unbound_cache"; + + switch ($action) { + case "start": + // Start Unbound + if ($config['unbound']['enable'] == "on") { + if (!is_service_running("unbound")) + do_as_unbound_user("start"); + } + break; + case "stop": + if ($config['unbound']['enable'] == "on") + do_as_unbound_user("stop"); + break; + case "reload": + if ($config['unbound']['enable'] == "on") + do_as_unbound_user("reload"); + break; + case "dump_cache": + // Dump Unbound's Cache + if ($config['unbound']['dumpcache'] == "on") + do_as_unbound_user("dump_cache"); + break; + case "restore_cache": + // Restore Unbound's Cache + if ((is_service_running("unbound")) && ($config['unbound']['dumpcache'] == "on")) { + if (file_exists($cache_dumpfile) && filesize($cache_dumpfile) > 0) + do_as_unbound_user("load_cache < /var/tmp/unbound_cache"); + } + break; + default: + break; + + } +} + +// Generation of Unbound statistics +function unbound_statistics() { + global $config; + + if ($config['stats'] == "on") { + $stats_interval = $config['unbound']['stats_interval']; + $cumulative_stats = $config['cumulative_stats']; + if ($config['extended_stats'] == "on") + $extended_stats = "yes"; + else + $extended_stats = "no"; + } else { + $stats_interval = "0"; + $cumulative_stats = "no"; + $extended_stats = "no"; + } + /* XXX To do - add RRD graphs */ + $stats = << $ifdesc) { + $ifip = get_interface_ip($ubif); + if (!is_null($ifip)) { + $subnet_bits = get_interface_subnet($ubif); + $subnet_ip = gen_subnet($ifip, $subnet_bits); + $aclcfg .= "access-control: {$subnet_ip}/{$subnet_bits} allow\n"; + } + $ifip = get_interface_ipv6($ubif); + if (!is_null($ifip)) { + $subnet_bits = get_interface_subnetv6($ubif); + $subnet_ip = gen_subnetv6($ifip, $subnet_bits); + $aclcfg .= "access-control: {$subnet_ip}/{$subnet_bits} allow\n"; + } + } + + // Configure the custom ACLs + if (is_array($config['unbound']['acls'])) { + foreach($config['unbound']['acls'] as $unbound_acl) { + $aclcfg .= "#{$unbound_acl['aclname']}\n"; + foreach($unbound_acl['row'] as $network) { + if ($unbound_acl['aclaction'] == "allow snoop") + $unbound_acl['aclaction'] = "allow_snoop"; + $aclcfg .= "access-control: {$network['acl_network']}/{$network['mask']} {$unbound_acl['aclaction']}\n"; + } + } + } + // Write out Access list + file_put_contents("{$g['unbound_chroot_path']}/access_lists.conf", $aclcfg); + +} + +// Generate hosts and reload services +function unbound_hosts_generate() { + // Generate our hosts file + unbound_add_host_entries(); + + // Reload our service to read the updates + unbound_control("reload"); +} + +?> diff --git a/etc/inc/upgrade_config.inc b/etc/inc/upgrade_config.inc new file mode 100644 index 000000000..0d65db6b4 --- /dev/null +++ b/etc/inc/upgrade_config.inc @@ -0,0 +1,3502 @@ + + All rights reserved. + + originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2004 Manuel Kasper . + 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. + */ + +/* + pfSense_BUILDER_BINARIES: /usr/bin/find /bin/cd /usr/local/bin/rrdtool /usr/bin/nice + pfSense_MODULE: config +*/ + +if(!function_exists("dump_rrd_to_xml")) + require("rrd.inc"); + +/* Upgrade functions must be named: +* upgrade_XXX_to_YYY + * where XXX == previous version, zero padded, and YYY == next version, zero padded + */ +function upgrade_010_to_011() { + global $config; + $opti = 1; + $ifmap = array('lan' => 'lan', 'wan' => 'wan', 'pptp' => 'pptp'); + + /* convert DMZ to optional, if necessary */ + if (isset($config['interfaces']['dmz'])) { + + $dmzcfg = &$config['interfaces']['dmz']; + + if ($dmzcfg['if']) { + $config['interfaces']['opt' . $opti] = array(); + $optcfg = &$config['interfaces']['opt' . $opti]; + + $optcfg['enable'] = $dmzcfg['enable']; + $optcfg['descr'] = "DMZ"; + $optcfg['if'] = $dmzcfg['if']; + $optcfg['ipaddr'] = $dmzcfg['ipaddr']; + $optcfg['subnet'] = $dmzcfg['subnet']; + + $ifmap['dmz'] = "opt" . $opti; + $opti++; + } + + unset($config['interfaces']['dmz']); + } + + /* convert WLAN1/2 to optional, if necessary */ + for ($i = 1; isset($config['interfaces']['wlan' . $i]); $i++) { + + if (!$config['interfaces']['wlan' . $i]['if']) { + unset($config['interfaces']['wlan' . $i]); + continue; + } + + $wlancfg = &$config['interfaces']['wlan' . $i]; + $config['interfaces']['opt' . $opti] = array(); + $optcfg = &$config['interfaces']['opt' . $opti]; + + $optcfg['enable'] = $wlancfg['enable']; + $optcfg['descr'] = "WLAN" . $i; + $optcfg['if'] = $wlancfg['if']; + $optcfg['ipaddr'] = $wlancfg['ipaddr']; + $optcfg['subnet'] = $wlancfg['subnet']; + $optcfg['bridge'] = $wlancfg['bridge']; + + $optcfg['wireless'] = array(); + $optcfg['wireless']['mode'] = $wlancfg['mode']; + $optcfg['wireless']['ssid'] = $wlancfg['ssid']; + $optcfg['wireless']['channel'] = $wlancfg['channel']; + $optcfg['wireless']['wep'] = $wlancfg['wep']; + + $ifmap['wlan' . $i] = "opt" . $opti; + + unset($config['interfaces']['wlan' . $i]); + $opti++; + } + + /* convert filter rules */ + $n = count($config['filter']['rule']); + for ($i = 0; $i < $n; $i++) { + + $fr = &$config['filter']['rule'][$i]; + + /* remap interface */ + if (array_key_exists($fr['interface'], $ifmap)) + $fr['interface'] = $ifmap[$fr['interface']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: filter rule removed " . + "(interface '%s' does not exist anymore)."), "\n", $fr['interface']); + unset($config['filter']['rule'][$i]); + continue; + } + + /* remap source network */ + if (isset($fr['source']['network'])) { + if (array_key_exists($fr['source']['network'], $ifmap)) + $fr['source']['network'] = $ifmap[$fr['source']['network']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: filter rule removed " . + "(source network '%s' does not exist anymore)."), "\n", $fr['source']['network']); + unset($config['filter']['rule'][$i]); + continue; + } + } + + /* remap destination network */ + if (isset($fr['destination']['network'])) { + if (array_key_exists($fr['destination']['network'], $ifmap)) + $fr['destination']['network'] = $ifmap[$fr['destination']['network']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: filter rule removed " . + "(destination network '%s' does not exist anymore)."), "\n", $fr['destination']['network']); + unset($config['filter']['rule'][$i]); + continue; + } + } + } + + /* convert shaper rules */ + $n = count($config['pfqueueing']['rule']); + if (is_array($config['pfqueueing']['rule'])) + for ($i = 0; $i < $n; $i++) { + + $fr = &$config['pfqueueing']['rule'][$i]; + + /* remap interface */ + if (array_key_exists($fr['interface'], $ifmap)) + $fr['interface'] = $ifmap[$fr['interface']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: traffic shaper rule removed " . + "(interface '%s' does not exist anymore)."), "\n", $fr['interface']); + unset($config['pfqueueing']['rule'][$i]); + continue; + } + + /* remap source network */ + if (isset($fr['source']['network'])) { + if (array_key_exists($fr['source']['network'], $ifmap)) + $fr['source']['network'] = $ifmap[$fr['source']['network']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: traffic shaper rule removed " . + "(source network '%s' does not exist anymore)."), "\n", $fr['source']['network']); + unset($config['pfqueueing']['rule'][$i]); + continue; + } + } + + /* remap destination network */ + if (isset($fr['destination']['network'])) { + if (array_key_exists($fr['destination']['network'], $ifmap)) + $fr['destination']['network'] = $ifmap[$fr['destination']['network']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: traffic shaper rule removed " . + "(destination network '%s' does not exist anymore)."), "\n", $fr['destination']['network']); + unset($config['pfqueueing']['rule'][$i]); + continue; + } + } + } +} + + +function upgrade_011_to_012() { + global $config; + /* move LAN DHCP server config */ + $tmp = $config['dhcpd']; + $config['dhcpd'] = array(); + $config['dhcpd']['lan'] = $tmp; + + /* encrypt password */ + $config['system']['password'] = crypt($config['system']['password']); +} + + +function upgrade_012_to_013() { + global $config; + /* convert advanced outbound NAT config */ + for ($i = 0; isset($config['nat']['advancedoutbound']['rule'][$i]); $i++) { + $curent = &$config['nat']['advancedoutbound']['rule'][$i]; + $src = $curent['source']; + $curent['source'] = array(); + $curent['source']['network'] = $src; + $curent['destination'] = array(); + $curent['destination']['any'] = true; + } + + /* add an explicit type="pass" to all filter rules to make things consistent */ + for ($i = 0; isset($config['filter']['rule'][$i]); $i++) { + $config['filter']['rule'][$i]['type'] = "pass"; + } +} + + +function upgrade_013_to_014() { + global $config; + /* convert shaper rules (make pipes) */ + if (is_array($config['pfqueueing']['rule'])) { + $config['pfqueueing']['pipe'] = array(); + + for ($i = 0; isset($config['pfqueueing']['rule'][$i]); $i++) { + $curent = &$config['pfqueueing']['rule'][$i]; + + /* make new pipe and associate with this rule */ + $newpipe = array(); + $newpipe['descr'] = $curent['descr']; + $newpipe['bandwidth'] = $curent['bandwidth']; + $newpipe['delay'] = $curent['delay']; + $newpipe['mask'] = $curent['mask']; + $config['pfqueueing']['pipe'][$i] = $newpipe; + + $curent['targetpipe'] = $i; + + unset($curent['bandwidth']); + unset($curent['delay']); + unset($curent['mask']); + } + } +} + + +function upgrade_014_to_015() { + global $config; + /* Default route moved */ + if (isset($config['interfaces']['wan']['gateway'])) + if ($config['interfaces']['wan']['gateway'] <> "") + $config['interfaces']['wan']['gateway'] = $config['interfaces']['wan']['gateway']; + unset($config['interfaces']['wan']['gateway']); + + /* Queues are no longer interface specific */ + if (isset($config['interfaces']['lan']['schedulertype'])) + unset($config['interfaces']['lan']['schedulertype']); + if (isset($config['interfaces']['wan']['schedulertype'])) + unset($config['interfaces']['wan']['schedulertype']); + + for ($i = 1; isset($config['interfaces']['opt' . $i]); $i++) { + if(isset($config['interfaces']['opt' . $i]['schedulertype'])) + unset($config['interfaces']['opt' . $i]['schedulertype']); + } +} + + +function upgrade_015_to_016() { + global $config; + /* Alternate firmware URL moved */ + if (isset($config['system']['firmwareurl']) && isset($config['system']['firmwarename'])) { // Only convert if *both* are defined. + $config['system']['alt_firmware_url'] = array(); + $config['system']['alt_firmware_url']['enabled'] = ""; + $config['system']['alt_firmware_url']['firmware_base_url'] = $config['system']['firmwareurl']; + $config['system']['alt_firmware_url']['firmware_filename'] = $config['system']['firmwarename']; + unset($config['system']['firmwareurl'], $config['system']['firmwarename']); + } else { + unset($config['system']['firmwareurl'], $config['system']['firmwarename']); + } +} + + +function upgrade_016_to_017() { + global $config; + /* wipe previous shaper configuration */ + unset($config['shaper']['queue']); + unset($config['shaper']['rule']); + unset($config['interfaces']['wan']['bandwidth']); + unset($config['interfaces']['wan']['bandwidthtype']); + unset($config['interfaces']['lan']['bandwidth']); + unset($config['interfaces']['lan']['bandwidthtype']); + $config['shaper']['enable'] = FALSE; +} + + +function upgrade_017_to_018() { + global $config; + if(isset($config['proxyarp']) && is_array($config['proxyarp']['proxyarpnet'])) { + $proxyarp = &$config['proxyarp']['proxyarpnet']; + foreach($proxyarp as $arpent){ + $vip = array(); + $vip['mode'] = "proxyarp"; + $vip['interface'] = $arpent['interface']; + $vip['descr'] = $arpent['descr']; + if (isset($arpent['range'])) { + $vip['range'] = $arpent['range']; + $vip['type'] = "range"; + } else { + $subnet = explode('/', $arpent['network']); + $vip['subnet'] = $subnet[0]; + if (isset($subnet[1])) { + $vip['subnet_bits'] = $subnet[1]; + $vip['type'] = "network"; + } else { + $vip['subnet_bits'] = "32"; + $vip['type'] = "single"; + } + } + $config['virtualip']['vip'][] = $vip; + } + unset($config['proxyarp']); + } + if(isset($config['installedpackages']) && isset($config['installedpackages']['carp']) && is_array($config['installedpackages']['carp']['config'])) { + $carp = &$config['installedpackages']['carp']['config']; + foreach($carp as $carpent){ + $vip = array(); + $vip['mode'] = "carp"; + $vip['interface'] = "AUTO"; + $vip['descr'] = sprintf(gettext("CARP vhid %s"), $carpent['vhid']); + $vip['type'] = "single"; + $vip['vhid'] = $carpent['vhid']; + $vip['advskew'] = $carpent['advskew']; + $vip['password'] = $carpent['password']; + $vip['subnet'] = $carpent['ipaddress']; + $vip['subnet_bits'] = $carpent['netmask']; + $config['virtualip']['vip'][] = $vip; + } + unset($config['installedpackages']['carp']); + } + /* Server NAT is no longer needed */ + unset($config['nat']['servernat']); + + /* enable SSH */ + if ($config['version'] == "1.8") { + $config['system']['sshenabled'] = true; + } +} + + +function upgrade_018_to_019() { + global $config; + $config['theme']="metallic"; +} + + +function upgrade_019_to_020() { + global $config; + if(is_array($config['ipsec']['tunnel'])) { + reset($config['ipsec']['tunnel']); + while (list($index, $tunnel) = each($config['ipsec']['tunnel'])) { + /* Sanity check on required variables */ + /* This fixes bogus entries - remnant of bug #393 */ + if (!isset($tunnel['local-subnet']) && !isset($tunnel['remote-subnet'])) { + unset($config['ipsec']['tunnel'][$tunnel]); + } + } + } +} + +function upgrade_020_to_021() { + global $config; + /* shaper scheduler moved */ + if(isset($config['system']['schedulertype'])) { + $config['shaper']['schedulertype'] = $config['system']['schedulertype']; + unset($config['system']['schedulertype']); + } +} + + +function upgrade_021_to_022() { + global $config; + /* move gateway to wan interface */ + $config['interfaces']['wan']['gateway'] = $config['system']['gateway']; +} + +function upgrade_022_to_023() { + global $config; + if(isset($config['shaper'])) { + /* wipe previous shaper configuration */ + unset($config['shaper']); + } +} + + +function upgrade_023_to_024() { + global $config; +} + + +function upgrade_024_to_025() { + global $config; + $config['interfaces']['wan']['use_rrd_gateway'] = $config['system']['use_rrd_gateway']; + unset($config['system']['use_rrd_gateway']); +} + + +function upgrade_025_to_026() { + global $config; + $cron_item = array(); + $cron_item['minute'] = "0"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 newsyslog"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "1,31"; + $cron_item['hour'] = "0-5"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 adjkerntz -a"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "1"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "1"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /etc/rc.update_bogons.sh"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "*/60"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 sshlockout"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "1"; + $cron_item['hour'] = "1"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /etc/rc.dyndns.update"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "*/60"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 virusprot"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "*/60"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /usr/local/sbin/expiretable -t 1800 snort2c"; + + $config['cron']['item'][] = $cron_item; +} + + +function upgrade_026_to_027() { + global $config; +} + + +function upgrade_027_to_028() { + global $config; +} + + +function upgrade_028_to_029() { + global $config; + $rule_item = array(); + $a_filter = &$config['filter']['rule']; + $rule_item['interface'] = "enc0"; + $rule_item['type'] = "pass"; + $rule_item['source']['any'] = true; + $rule_item['destination']['any'] = true; + $rule_item['descr'] = gettext("Permit IPsec traffic."); + $rule_item['statetype'] = "keep state"; + $a_filter[] = $rule_item; +} + + +function upgrade_029_to_030() { + global $config; + /* enable the rrd config setting by default */ + $config['rrd']['enable'] = true; +} + + +function upgrade_030_to_031() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_031_to_032() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_032_to_033() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_033_to_034() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_034_to_035() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_035_to_036() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_036_to_037() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_037_to_038() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_038_to_039() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_039_to_040() { + global $config, $g; + $config['system']['webgui']['auth_method'] = "session"; + $config['system']['webgui']['backing_method'] = "htpasswd"; + + if (isset ($config['system']['username'])) { + $config['system']['group'] = array(); + $config['system']['group'][0]['name'] = "admins"; + $config['system']['group'][0]['description'] = gettext("System Administrators"); + $config['system']['group'][0]['scope'] = "system"; + $config['system']['group'][0]['priv'] = "page-all"; + $config['system']['group'][0]['home'] = "index.php"; + $config['system']['group'][0]['gid'] = "110"; + + $config['system']['user'] = array(); + $config['system']['user'][0]['name'] = "{$config['system']['username']}"; + $config['system']['user'][0]['descr'] = "System Administrator"; + $config['system']['user'][0]['scope'] = "system"; + $config['system']['user'][0]['groupname'] = "admins"; + $config['system']['user'][0]['password'] = "{$config['system']['password']}"; + $config['system']['user'][0]['uid'] = "0"; + /* Ensure that we follow what this new "admin" username should be in the session. */ + $_SESSION["Username"] = "{$config['system']['username']}"; + + $config['system']['user'][0]['priv'] = array(); + $config['system']['user'][0]['priv'][0]['id'] = "lockwc"; + $config['system']['user'][0]['priv'][0]['name'] = "Lock webConfigurator"; + $config['system']['user'][0]['priv'][0]['descr'] = gettext("Indicates whether this user will lock access to the webConfigurator for other users."); + $config['system']['user'][0]['priv'][1]['id'] = "lock-ipages"; + $config['system']['user'][0]['priv'][1]['name'] = "Lock individual pages"; + $config['system']['user'][0]['priv'][1]['descr'] = gettext("Indicates whether this user will lock individual HTML pages after having accessed a particular page (the lock will be freed if the user leaves or saves the page form)."); + $config['system']['user'][0]['priv'][2]['id'] = "hasshell"; + $config['system']['user'][0]['priv'][2]['name'] = "Has shell access"; + $config['system']['user'][0]['priv'][2]['descr'] = gettext("Indicates whether this user is able to login for example via SSH."); + $config['system']['user'][0]['priv'][3]['id'] = "copyfiles"; + $config['system']['user'][0]['priv'][3]['name'] = "Is allowed to copy files"; + $config['system']['user'][0]['priv'][3]['descr'] = sprintf(gettext("Indicates whether this user is allowed to copy files onto the %s appliance via SCP/SFTP. If you are going to use this privilege, you must install scponly on the appliance (Hint: pkg_add -r scponly)."), $g['product_name']); + $config['system']['user'][0]['priv'][4]['id'] = "isroot"; + $config['system']['user'][0]['priv'][4]['name'] = "Is root user"; + $config['system']['user'][0]['priv'][4]['descr'] = gettext("This user is associated with the UNIX root user (you should associate this privilege only with one single user)."); + + $config['system']['nextuid'] = "111"; + $config['system']['nextgid'] = "111"; + + /* wipe previous auth configuration */ + unset ($config['system']['username']); + unset ($config['system']['password']); + } +} + +function upgrade_040_to_041() { + global $config; + if(!$config['sysctl']) { + $config['sysctl']['item'] = array(); + + $config['sysctl']['item'][0]['tunable'] = "net.inet.tcp.blackhole"; + $config['sysctl']['item'][0]['descr'] = gettext("Drop packets to closed TCP ports without returning a RST"); + $config['sysctl']['item'][0]['value'] = "default"; + + $config['sysctl']['item'][1]['tunable'] = "net.inet.udp.blackhole"; + $config['sysctl']['item'][1]['descr'] = gettext("Do not send ICMP port unreachable messages for closed UDP ports"); + $config['sysctl']['item'][1]['value'] = "default"; + + $config['sysctl']['item'][2]['tunable'] = "net.inet.ip.random_id"; + $config['sysctl']['item'][2]['descr'] = gettext("Randomize the ID field in IP packets (default is 0: sequential IP IDs)"); + $config['sysctl']['item'][2]['value'] = "default"; + + $config['sysctl']['item'][3]['tunable'] = "net.inet.tcp.drop_synfin"; + $config['sysctl']['item'][3]['descr'] = gettext("Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)"); + $config['sysctl']['item'][3]['value'] = "default"; + + $config['sysctl']['item'][4]['tunable'] = "net.inet.ip.redirect"; + $config['sysctl']['item'][4]['descr'] = gettext("Sending of IPv4 ICMP redirects"); + $config['sysctl']['item'][4]['value'] = "default"; + + $config['sysctl']['item'][5]['tunable'] = "net.inet6.ip6.redirect"; + $config['sysctl']['item'][5]['descr'] = gettext("Sending of IPv6 ICMP redirects"); + $config['sysctl']['item'][5]['value'] = "default"; + + $config['sysctl']['item'][6]['tunable'] = "net.inet.tcp.syncookies"; + $config['sysctl']['item'][6]['descr'] = gettext("Generate SYN cookies for outbound SYN-ACK packets"); + $config['sysctl']['item'][6]['value'] = "default"; + + $config['sysctl']['item'][7]['tunable'] = "net.inet.tcp.recvspace"; + $config['sysctl']['item'][7]['descr'] = gettext("Maximum incoming TCP datagram size"); + $config['sysctl']['item'][7]['value'] = "default"; + + $config['sysctl']['item'][8]['tunable'] = "net.inet.tcp.sendspace"; + $config['sysctl']['item'][8]['descr'] = gettext("Maximum outgoing TCP datagram size"); + $config['sysctl']['item'][8]['value'] = "default"; + + $config['sysctl']['item'][9]['tunable'] = "net.inet.ip.fastforwarding"; + $config['sysctl']['item'][9]['descr'] = gettext("Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-January/002534.html)"); + $config['sysctl']['item'][9]['value'] = "default"; + + $config['sysctl']['item'][10]['tunable'] = "net.inet.tcp.delayed_ack"; + $config['sysctl']['item'][10]['descr'] = gettext("Do not delay ACK to try and piggyback it onto a data packet"); + $config['sysctl']['item'][10]['value'] = "default"; + + $config['sysctl']['item'][11]['tunable'] = "net.inet.udp.maxdgram"; + $config['sysctl']['item'][11]['descr'] = gettext("Maximum outgoing UDP datagram size"); + $config['sysctl']['item'][11]['value'] = "default"; + + $config['sysctl']['item'][12]['tunable'] = "net.link.bridge.pfil_onlyip"; + $config['sysctl']['item'][12]['descr'] = gettext("Handling of non-IP packets which are not passed to pfil (see if_bridge(4))"); + $config['sysctl']['item'][12]['value'] = "default"; + + $config['sysctl']['item'][13]['tunable'] = "net.link.tap.user_open"; + $config['sysctl']['item'][13]['descr'] = gettext("Allow unprivileged access to tap(4) device nodes"); + $config['sysctl']['item'][13]['value'] = "default"; + + $config['sysctl']['item'][15]['tunable'] = "kern.randompid"; + $config['sysctl']['item'][15]['descr'] = gettext("Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())"); + $config['sysctl']['item'][15]['value'] = "default"; + + $config['sysctl']['item'][16]['tunable'] = "net.inet.tcp.inflight.enable"; + $config['sysctl']['item'][16]['descr'] = gettext("The system will attempt to calculate the bandwidth delay product for each connection and limit the amount of data queued to the network to just the amount required to maintain optimum throughput. "); + $config['sysctl']['item'][16]['value'] = "default"; + + $config['sysctl']['item'][17]['tunable'] = "net.inet.icmp.icmplim"; + $config['sysctl']['item'][17]['descr'] = gettext("Set ICMP Limits"); + $config['sysctl']['item'][17]['value'] = "default"; + + $config['sysctl']['item'][18]['tunable'] = "net.inet.tcp.tso"; + $config['sysctl']['item'][18]['descr'] = gettext("TCP Offload engine"); + $config['sysctl']['item'][18]['value'] = "default"; + + $config['sysctl']['item'][19]['tunable'] = "net.inet.ip.portrange.first"; + $config['sysctl']['item'][19]['descr'] = "Set the ephemeral port range starting port"; + $config['sysctl']['item'][19]['value'] = "default"; + + $config['sysctl']['item'][20]['tunable'] = "hw.syscons.kbd_reboot"; + $config['sysctl']['item'][20]['descr'] = "Enables ctrl+alt+delete"; + $config['sysctl']['item'][20]['value'] = "default"; + + $config['sysctl']['item'][21]['tunable'] = "kern.ipc.maxsockbuf"; + $config['sysctl']['item'][21]['descr'] = "Maximum socket buffer size"; + $config['sysctl']['item'][21]['value'] = "default"; + + } +} + + +function upgrade_041_to_042() { + global $config; + if (isset($config['shaper'])) + unset($config['shaper']); + if (isset($config['ezshaper'])) + unset($config['ezshaper']); +} + + +function upgrade_042_to_043() { + global $config; + /* migrate old interface gateway to the new gateways config */ + $iflist = get_configured_interface_list(false, true); + $gateways = array(); + $i = 0; + foreach($iflist as $ifname => $interface) { + if(! interface_has_gateway($ifname)) { + continue; + } + $config['gateways']['gateway_item'][$i] = array(); + if(is_ipaddr($config['interfaces'][$ifname]['gateway'])) { + $config['gateways']['gateway_item'][$i]['gateway'] = $config['interfaces'][$ifname]['gateway']; + $config['gateways']['gateway_item'][$i]['descr'] = sprintf(gettext("Interface %s Static Gateway"), $ifname); + } else { + $config['gateways']['gateway_item'][$i]['gateway'] = "dynamic"; + $config['gateways']['gateway_item'][$i]['descr'] = sprintf(gettext("Interface %s Dynamic Gateway"), $ifname); + } + $config['gateways']['gateway_item'][$i]['interface'] = $ifname; + $config['gateways']['gateway_item'][$i]['name'] = "GW_" . strtoupper($ifname); + /* add default gateway bit for wan on upgrade */ + if($ifname == "wan") { + $config['gateways']['gateway_item'][$i]['defaultgw'] = true; + } + if(is_ipaddr($config['interfaces'][$ifname]['use_rrd_gateway'])) { + $config['gateways']['gateway_item'][$i]['monitor'] = $config['interfaces'][$ifname]['use_rrd_gateway']; + unset($config['interfaces'][$ifname]['use_rrd_gateway']); + } + $config['interfaces'][$ifname]['gateway'] = $config['gateways']['gateway_item'][$i]['name']; + + /* Update all filter rules which might reference this gateway */ + $j = 0; + foreach($config['filter']['rule'] as $rule) { + if(is_ipaddr($rule['gateway'])) { + if ($rule['gateway'] == $config['gateways']['gateway_item'][$i]['gateway']) + $config['filter']['rule'][$j]['gateway'] = $config['gateways']['gateway_item'][$i]['name']; + else if ($rule['gateway'] == $ifname) + $config['filter']['rule'][$j]['gateway'] = $config['gateways']['gateway_item'][$i]['name']; + } + $j++; + } + + /* rename old Quality RRD files in the process */ + $rrddbpath = "/var/db/rrd"; + $gwname = "GW_" . strtoupper($ifname); + if(is_readable("{$rrddbpath}/{$ifname}-quality.rrd")) { + rename("{$rrddbpath}/{$ifname}-quality.rrd", "{$rrddbpath}/{$gwname}-quality.rrd"); + } + $i++; + } +} + + +function upgrade_043_to_044() { + global $config; + + /* migrate static routes to the new gateways config */ + $gateways = return_gateways_array(true); + $i = 0; + if (is_array($config['staticroutes']['route'])) { + $gwmap = array(); + foreach ($config['staticroutes']['route'] as $idx => $sroute) { + $found = false; + foreach ($gateways as $gwname => $gw) { + if ($gw['gateway'] == $sroute['gateway']) { + $config['staticroutes']['route'][$idx]['gateway'] = $gwname; + $found = true; + break; + } + } + if($gwmap[$sroute['gateway']]) { + /* We already added a gateway name for this IP */ + $config['staticroutes']['route'][$idx]['gateway'] = "{$gwmap[$sroute['gateway']]}"; + $found = true; + } + + if ($found == false) { + $gateway = array(); + $gateway['name'] = "SROUTE{$i}"; + $gwmap[$sroute['gateway']] = $gateway['name']; + $gateway['gateway'] = $sroute['gateway']; + $gateway['interface'] = $sroute['interface']; + $gateway['descr'] = sprintf(gettext("Upgraded static route for %s"), $sroute['network']); + if (!is_array($config['gateways']['gateway_item'])) + $config['gateways']['gateway_item'] = array(); + $config['gateways']['gateway_item'][] = $gateway; + $config['staticroutes']['route'][$idx]['gateway'] = $gateway['name']; + $i++; + } + } + } +} + + +function upgrade_044_to_045() { + global $config; + $iflist = get_configured_interface_list(false, true); + if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { + $i = 0; + foreach ($config['vlans']['vlan'] as $id => $vlan) { + /* Make sure to update the interfaces section with the right name */ + $vlan_name = "{$vlan['if']}_vlan{$vlan['tag']}"; + foreach($iflist as $ifname) { + if($config['interfaces'][$ifname]['if'] == "vlan{$i}") { + $config['interfaces'][$ifname]['if'] = $vlan_name; + continue; + } + } + $config['vlans']['vlan'][$i]['vlanif'] = "{$vlan_name}"; + $i++; + } + } +} + + +function upgrade_045_to_046() { + global $config; + /* Load up monitors that are in the default config for 2.0 but not in 1.2.3 + thus wouldn't be in an upgraded config. */ + $config['load_balancer']['monitor_type'] = array ( + array ( 'name' => 'ICMP', + 'type' => 'icmp', + 'descr' => 'ICMP', + 'options' => '', + ), + array ( 'name' => 'TCP', + 'type' => 'tcp', + 'descr' => 'Generic TCP', + 'options' => '', + ), + array ( 'name' => 'HTTP', + 'type' => 'http', + 'descr' => 'Generic HTTP', + 'options' => + array ( 'path' => '/', + 'host' => '', + 'code' => '200', + ), + ), + array ( 'name' => 'HTTPS', + 'type' => 'https', + 'descr' => 'Generic HTTPS', + 'options' => + array ( 'path' => '/', + 'host' => '', + 'code' => '200', + ), + ), + array ( 'name' => 'SMTP', + 'type' => 'send', + 'descr' => 'Generic SMTP', + 'options' => + array ( 'send' => '', + 'expect' => '220 *', + ), + ), + ); + /* Upgrade load balancer from slb to relayd */ + if (is_array($config['load_balancer']['virtual_server']) && count($config['load_balancer']['virtual_server'])) { + $vs_a = &$config['load_balancer']['virtual_server']; + $pool_a = &$config['load_balancer']['lbpool']; + $pools = array(); + /* Index pools by name */ + if(is_array($pool_a)) { + for ($i = 0; isset($pool_a[$i]); $i++) { + if($pool_a[$i]['type'] == "server") { + $pools[$pool_a[$i]['name']] = $pool_a[$i]; + } + } + } + /* Convert sitedown entries to pools and re-attach */ + for ($i = 0; isset($vs_a[$i]); $i++) { + /* Set mode while we're here. */ + $vs_a[$i]['mode'] = "redirect_mode"; + if (isset($vs_a[$i]['sitedown'])) { + $pool = array(); + $pool['type'] = 'server'; + $pool['behaviour'] = 'balance'; + $pool['name'] = "{$vs_a[$i]['name']}-sitedown"; + $pool['descr'] = sprintf(gettext("Sitedown pool for VS: %s"), $vs_a[$i]['name']); + if (is_array($vs_a[$i]['pool'])) + $vs_a[$i]['pool'] = $vs_a[$i]['pool'][0]; + $pool['port'] = $pools[$vs_a[$i]['pool']]['port']; + $pool['servers'] = array(); + $pool['servers'][] = $vs_a[$i]['sitedown']; + $pool['monitor'] = $pools[$vs_a[$i]['pool']]['monitor']; + $pool_a[] = $pool; + $vs_a[$i]['sitedown'] = $pool['name']; + } + } + } + if(count($config['load_balancer']) == 0) { + unset($config['load_balancer']); + } + mwexec('/usr/sbin/pw groupadd -n _relayd -g 913'); + mwexec('/usr/sbin/pw useradd -n _relayd -c "Relay Daemon" -d /var/empty -s /usr/sbin/nologin -u 913 -g 913'); +} + + +function upgrade_046_to_047() { + global $config; + /* Upgrade IPsec from tunnel to phase1/phase2 */ + + if(is_array($config['ipsec']['tunnel'])) { + + $a_phase1 = array(); + $a_phase2 = array(); + $ikeid = 0; + + foreach ($config['ipsec']['tunnel'] as $tunnel) { + + unset($ph1ent); + unset($ph2ent); + + /* + * attempt to locate an enabled phase1 + * entry that matches the peer gateway + */ + + if (!isset($tunnel['disabled'])) { + + $remote_gateway = $tunnel['remote-gateway']; + + foreach ($a_phase1 as $ph1tmp) { + if ($ph1tmp['remote-gateway'] == $remote_gateway) { + $ph1ent = $ph1tmp; + break; + } + } + } + + /* none found, create a new one */ + + if (!isset( $ph1ent )) { + + /* build new phase1 entry */ + + $ph1ent = array(); + + $ph1ent['ikeid'] = ++$ikeid; + + if (isset($tunnel['disabled'])) + $ph1ent['disabled'] = $tunnel['disabled']; + + /* convert to the new vip[$vhid] name */ + if(preg_match("/^carp/", $tunnel['interface'])) { + $carpid = str_replace("carp", "", $tunnel['interface']); + $tunnel['interface'] = "vip" . $config['virtualip']['vip'][$carpid]['vhid']; + } + $ph1ent['interface'] = $tunnel['interface']; + $ph1ent['remote-gateway'] = $tunnel['remote-gateway']; + $ph1ent['descr'] = $tunnel['descr']; + + $ph1ent['mode'] = $tunnel['p1']['mode']; + + if (isset($tunnel['p1']['myident']['myaddress'])) + $ph1ent['myid_type'] = "myaddress"; + if (isset($tunnel['p1']['myident']['address'])) { + $ph1ent['myid_type'] = "address"; + $ph1ent['myid_data'] = $tunnel['p1']['myident']['address']; + } + if (isset($tunnel['p1']['myident']['fqdn'])) { + $ph1ent['myid_type'] = "fqdn"; + $ph1ent['myid_data'] = $tunnel['p1']['myident']['fqdn']; + } + if (isset($tunnel['p1']['myident']['ufqdn'])) { + $ph1ent['myid_type'] = "user_fqdn"; + $ph1ent['myid_data'] = $tunnel['p1']['myident']['ufqdn']; + } + if (isset($tunnel['p1']['myident']['asn1dn'])) { + $ph1ent['myid_type'] = "asn1dn"; + $ph1ent['myid_data'] = $tunnel['p1']['myident']['asn1dn']; + } + if (isset($tunnel['p1']['myident']['dyn_dns'])) { + $ph1ent['myid_type'] = "dyn_dns"; + $ph1ent['myid_data'] = $tunnel['p1']['myident']['dyn_dns']; + } + + $ph1ent['peerid_type'] = "peeraddress"; + + switch ($tunnel['p1']['encryption-algorithm']) { + case "des": + $ph1alg = array( 'name' => 'des' ); + break; + case "3des": + $ph1alg = array( 'name' => '3des' ); + break; + case "blowfish": + $ph1alg = array( 'name' => 'blowfish', 'keylen' => '128' ); + break; + case "cast128": + $ph1alg = array( 'name' => 'cast128' ); + break; + case "rijndael": + $ph1alg = array( 'name' => 'aes', 'keylen' => '128' ); + break; + case "rijndael 256": + case "aes 256": + $ph1alg = array( 'name' => 'aes', 'keylen' => '256' ); + break; + } + + $ph1ent['encryption-algorithm'] = $ph1alg; + $ph1ent['hash-algorithm'] = $tunnel['p1']['hash-algorithm']; + $ph1ent['dhgroup'] = $tunnel['p1']['dhgroup']; + $ph1ent['lifetime'] = $tunnel['p1']['lifetime']; + $ph1ent['authentication_method'] = $tunnel['p1']['authentication_method']; + + if (isset($tunnel['p1']['pre-shared-key'])) + $ph1ent['pre-shared-key'] = $tunnel['p1']['pre-shared-key']; + if (isset($tunnel['p1']['cert'])) + $ph1ent['cert'] = $tunnel['p1']['cert']; + if (isset($tunnel['p1']['peercert'])) + $ph1ent['peercert'] = $tunnel['p1']['peercert']; + if (isset($tunnel['p1']['private-key'])) + $ph1ent['private-key'] = $tunnel['p1']['private-key']; + + $ph1ent['nat_traversal'] = "on"; + $ph1ent['dpd_enable'] = 1; + $ph1ent['dpd_delay'] = 10; + $ph1ent['dpd_maxfail'] = 5; + + $a_phase1[] = $ph1ent; + } + + /* build new phase2 entry */ + + $ph2ent = array(); + + $ph2ent['ikeid'] = $ph1ent['ikeid']; + + if (isset($tunnel['disabled'])) + $ph1ent['disabled'] = $tunnel['disabled']; + + $ph2ent['descr'] = sprintf(gettext("phase2 for %s"), $tunnel['descr']); + + $type = "lan"; + if ($tunnel['local-subnet']['network']) + $type = $tunnel['local-subnet']['network']; + if ($tunnel['local-subnet']['address']) { + list($address,$netbits) = explode("/",$tunnel['local-subnet']['address']); + if (is_null($netbits)) + $type = "address"; + else + $type = "network"; + } + + switch ($type) { + case "address": + $ph2ent['localid'] = array('type' => $type,'address' => $address); + break; + case "network": + $ph2ent['localid'] = array('type' => $type,'address' => $address,'netbits' => $netbits); + break; + default: + $ph2ent['localid'] = array('type' => $type); + break; + } + + list($address,$netbits) = explode("/",$tunnel['remote-subnet']); + $ph2ent['remoteid'] = array('type' => 'network','address' => $address,'netbits' => $netbits); + + $ph2ent['protocol'] = $tunnel['p2']['protocol']; + + $aes_count = 0; + foreach( $tunnel['p2']['encryption-algorithm-option'] as $tunalg ) { + $aes_found = false; + switch ($tunalg) { + case "des": + $ph2alg = array( 'name' => 'des' ); + break; + case "3des": + $ph2alg = array( 'name' => '3des' ); + break; + case "blowfish": + $ph2alg = array( 'name' => 'blowfish', 'keylen' => 'auto' ); + break; + case "cast128": + $ph2alg = array( 'name' => 'cast128' ); + break; + case "rijndael": + case "rijndael 256": + case "aes 256": + $ph2alg = array( 'name' => 'aes', 'keylen' => 'auto' ); + $aes_found = true; + $aes_count++; + break; + } + + if( !$aes_found || ($aes_count < 2)) + $ph2ent['encryption-algorithm-option'][] = $ph2alg; + } + + $ph2ent['hash-algorithm-option'] = $tunnel['p2']['hash-algorithm-option']; + $ph2ent['pfsgroup'] = $tunnel['p2']['pfsgroup']; + $ph2ent['lifetime'] = $tunnel['p2']['lifetime']; + + if (isset($tunnel['pinghost']['pinghost'])) + $ph2ent['pinghost'] = $tunnel['pinghost']; + + $a_phase2[] = $ph2ent; + } + + unset($config['ipsec']['tunnel']); + $config['ipsec']['phase1'] = $a_phase1; + $config['ipsec']['phase2'] = $a_phase2; + } + + /* Upgrade Mobile IPsec */ + if (isset($config['ipsec']['mobileclients']) + && is_array($config['ipsec']['mobileclients']) + && is_array($config['ipsec']['mobileclients']['p1']) + && is_array($config['ipsec']['mobileclients']['p2'])) { + + if (isset($config['ipsec']['mobileclients']['enable'])) { + $config['ipsec']['client']['enable'] = true; + $config['ipsec']['client']['user_source'] = 'system'; + $config['ipsec']['client']['group_source'] = 'system'; + } + + $mobilecfg = $config['ipsec']['mobileclients']; + + $ph1ent = array(); + $ph1ent['ikeid'] = ++$ikeid; + + if (!isset($mobilecfg['enable'])) + $ph1ent['disabled'] = true; + + /* Assume WAN since mobile tunnels couldn't be on a separate interface on 1.2.x */ + $ph1ent['interface'] = 'wan'; + $ph1ent['descr'] = "Mobile Clients (upgraded)"; + $ph1ent['mode'] = $mobilecfg['p1']['mode']; + + if (isset($mobilecfg['p1']['myident']['myaddress'])) + $ph1ent['myid_type'] = "myaddress"; + if (isset($mobilecfg['p1']['myident']['address'])) { + $ph1ent['myid_type'] = "address"; + $ph1ent['myid_data'] = $mobilecfg['p1']['myident']['address']; + } + if (isset($mobilecfg['p1']['myident']['fqdn'])) { + $ph1ent['myid_type'] = "fqdn"; + $ph1ent['myid_data'] = $mobilecfg['p1']['myident']['fqdn']; + } + if (isset($mobilecfg['p1']['myident']['ufqdn'])) { + $ph1ent['myid_type'] = "user_fqdn"; + $ph1ent['myid_data'] = $mobilecfg['p1']['myident']['ufqdn']; + } + if (isset($mobilecfg['p1']['myident']['asn1dn'])) { + $ph1ent['myid_type'] = "asn1dn"; + $ph1ent['myid_data'] = $mobilecfg['p1']['myident']['asn1dn']; + } + if (isset($mobilecfg['p1']['myident']['dyn_dns'])) { + $ph1ent['myid_type'] = "dyn_dns"; + $ph1ent['myid_data'] = $mobilecfg['p1']['myident']['dyn_dns']; + } + $ph1ent['peerid_type'] = "fqdn"; + $ph1ent['peerid_data'] = ""; + + switch ($mobilecfg['p1']['encryption-algorithm']) { + case "des": + $ph1alg = array( 'name' => 'des' ); + break; + case "3des": + $ph1alg = array( 'name' => '3des' ); + break; + case "blowfish": + $ph1alg = array( 'name' => 'blowfish', 'keylen' => '128' ); + break; + case "cast128": + $ph1alg = array( 'name' => 'cast128' ); + break; + case "rijndael": + $ph1alg = array( 'name' => 'aes', 'keylen' => '128' ); + break; + case "rijndael 256": + case "aes 256": + $ph1alg = array( 'name' => 'aes', 'keylen' => '256' ); + break; + } + + $ph1ent['encryption-algorithm'] = $ph1alg; + $ph1ent['hash-algorithm'] = $mobilecfg['p1']['hash-algorithm']; + $ph1ent['dhgroup'] = $mobilecfg['p1']['dhgroup']; + $ph1ent['lifetime'] = $mobilecfg['p1']['lifetime']; + $ph1ent['authentication_method'] = $mobilecfg['p1']['authentication_method']; + + if (isset($mobilecfg['p1']['cert'])) + $ph1ent['cert'] = $mobilecfg['p1']['cert']; + if (isset($mobilecfg['p1']['peercert'])) + $ph1ent['peercert'] = $mobilecfg['p1']['peercert']; + if (isset($mobilecfg['p1']['private-key'])) + $ph1ent['private-key'] = $mobilecfg['p1']['private-key']; + + $ph1ent['nat_traversal'] = "on"; + $ph1ent['dpd_enable'] = 1; + $ph1ent['dpd_delay'] = 10; + $ph1ent['dpd_maxfail'] = 5; + $ph1ent['mobile'] = true; + + $ph2ent = array(); + $ph2ent['ikeid'] = $ph1ent['ikeid']; + $ph2ent['descr'] = "phase2 for ".$mobilecfg['descr']; + $ph2ent['localid'] = array('type' => 'none'); + $ph2ent['remoteid'] = array('type' => 'mobile'); + $ph2ent['protocol'] = $mobilecfg['p2']['protocol']; + + $aes_count = 0; + foreach( $mobilecfg['p2']['encryption-algorithm-option'] as $tunalg ) { + $aes_found = false; + switch ($tunalg) { + case "des": + $ph2alg = array( 'name' => 'des' ); + break; + case "3des": + $ph2alg = array( 'name' => '3des' ); + break; + case "blowfish": + $ph2alg = array( 'name' => 'blowfish', 'keylen' => 'auto' ); + break; + case "cast128": + $ph2alg = array( 'name' => 'cast128' ); + break; + case "rijndael": + case "rijndael 256": + case "aes 256": + $ph2alg = array( 'name' => 'aes', 'keylen' => 'auto' ); + $aes_found = true; + $aes_count++; + break; + } + + if( !$aes_found || ($aes_count < 2)) + $ph2ent['encryption-algorithm-option'][] = $ph2alg; + } + $ph2ent['hash-algorithm-option'] = $mobilecfg['p2']['hash-algorithm-option']; + $ph2ent['pfsgroup'] = $mobilecfg['p2']['pfsgroup']; + $ph2ent['lifetime'] = $mobilecfg['p2']['lifetime']; + $ph2ent['mobile'] = true; + + $config['ipsec']['phase1'][] = $ph1ent; + $config['ipsec']['phase2'][] = $ph2ent; + unset($config['ipsec']['mobileclients']); + } +} + + +function upgrade_047_to_048() { + global $config; + if (!empty($config['dyndns'])) { + $config['dyndnses'] = array(); + $config['dyndnses']['dyndns'] = array(); + if(isset($config['dyndns'][0]['host'])) { + $tempdyn = array(); + $tempdyn['enable'] = isset($config['dyndns'][0]['enable']); + $tempdyn['type'] = $config['dyndns'][0]['type']; + $tempdyn['wildcard'] = isset($config['dyndns'][0]['wildcard']); + $tempdyn['username'] = $config['dyndns'][0]['username']; + $tempdyn['password'] = $config['dyndns'][0]['password']; + $tempdyn['host'] = $config['dyndns'][0]['host']; + $tempdyn['mx'] = $config['dyndns'][0]['mx']; + $tempdyn['interface'] = "wan"; + $tempdyn['descr'] = sprintf(gettext("Upgraded Dyndns %s"), $tempdyn['type']); + $config['dyndnses']['dyndns'][] = $tempdyn; + } + unset($config['dyndns']); + } + if (!empty($config['dnsupdate'])) { + $pconfig = $config['dnsupdate'][0]; + if (!$pconfig['ttl']) + $pconfig['ttl'] = 60; + if (!$pconfig['keytype']) + $pconfig['keytype'] = "zone"; + $pconfig['interface'] = "wan"; + $config['dnsupdates']['dnsupdate'][] = $pconfig; + unset($config['dnsupdate']); + } + + if (is_array($config['pppoe']) && is_array($config['pppoe'][0])) { + $pconfig = array(); + $pconfig['username'] = $config['pppoe'][0]['username']; + $pconfig['password'] = $config['pppoe'][0]['password']; + $pconfig['provider'] = $config['pppoe'][0]['provider']; + $pconfig['ondemand'] = isset($config['pppoe'][0]['ondemand']); + $pconfig['timeout'] = $config['pppoe'][0]['timeout']; + unset($config['pppoe']); + $config['interfaces']['wan']['pppoe_username'] = $pconfig['username']; + $config['interfaces']['wan']['pppoe_password'] = $pconfig['password']; + $config['interfaces']['wan']['provider'] = $pconfig['provider']; + $config['interfaces']['wan']['ondemand'] = isset($pconfig['ondemand']); + $config['interfaces']['wan']['timeout'] = $pconfig['timeout']; + } + if (is_array($config['pptp'])) { + $pconfig = array(); + $pconfig['username'] = $config['pptp']['username']; + $pconfig['password'] = $config['pptp']['password']; + $pconfig['provider'] = $config['pptp']['provider']; + $pconfig['ondemand'] = isset($config['pptp']['ondemand']); + $pconfig['timeout'] = $config['pptp']['timeout']; + unset($config['pptp']); + $config['interfaces']['wan']['pptp_username'] = $pconfig['username']; + $config['interfaces']['wan']['pptp_password'] = $pconfig['password']; + $config['interfaces']['wan']['provider'] = $pconfig['provider']; + $config['interfaces']['wan']['ondemand'] = isset($pconfig['ondemand'] ); + $config['interfaces']['wan']['timeout'] = $pconfig['timeout']; + } +} + + +function upgrade_048_to_049() { + global $config; + /* setup new all users group */ + $all = array(); + $all['name'] = "all"; + $all['description'] = gettext("All Users"); + $all['scope'] = "system"; + $all['gid'] = 1998; + $all['member'] = array(); + + if (!is_array($config['system']['user'])) + $config['system']['user'] = array(); + if (!is_array($config['system']['group'])) + $config['system']['group'] = array(); + + /* work around broken uid assignments */ + $config['system']['nextuid'] = 2000; + foreach ($config['system']['user'] as & $user) { + if (isset($user['uid']) && !$user['uid']) + continue; + $user['uid'] = $config['system']['nextuid']++; + } + + /* work around broken gid assignments */ + $config['system']['nextgid'] = 2000; + foreach ($config['system']['group'] as & $group) { + if ($group['name'] == $g['admin_group']) + $group['gid'] = 1999; + else + $group['gid'] = $config['system']['nextgid']++; + } + + /* build group membership information */ + foreach ($config['system']['group'] as & $group) { + $group['member'] = array(); + foreach ($config['system']['user'] as & $user) { + $groupnames = explode(",", $user['groupname']); + if (in_array($group['name'],$groupnames)) + $group['member'][] = $user['uid']; + } + } + + /* reset user group information */ + foreach ($config['system']['user'] as & $user) { + unset($user['groupname']); + $all['member'][] = $user['uid']; + } + + /* reset group scope information */ + foreach ($config['system']['group'] as & $group) + if ($group['name'] != $g['admin_group']) + $group['scope'] = "user"; + + /* insert new all group */ + $groups = Array(); + $groups[] = $all; + $groups = array_merge($config['system']['group'],$groups); + $config['system']['group'] = $groups; +} + + +function upgrade_049_to_050() { + global $config; + + if (!is_array($config['system']['user'])) + $config['system']['user'] = array(); + /* update user privileges */ + foreach ($config['system']['user'] as & $user) { + $privs = array(); + if (!is_array($user['priv'])) { + unset($user['priv']); + continue; + } + foreach ($user['priv'] as $priv) { + switch($priv['id']) { + case "hasshell": + $privs[] = "user-shell-access"; + break; + case "copyfiles": + $privs[] = "user-copy-files"; + break; + } + } + $user['priv'] = $privs; + } + + /* update group privileges */ + foreach ($config['system']['group'] as & $group) { + $privs = array(); + if (!is_array($group['pages'])) { + unset($group['pages']); + continue; + } + foreach ($group['pages'] as $page) { + $priv = map_page_privname($page); + if ($priv) + $privs[] = $priv; + } + unset($group['pages']); + $group['priv'] = $privs; + } + + /* sync all local account information */ + local_sync_accounts(); +} + + +function upgrade_050_to_051() { + global $config; + $pconfig = array(); + $pconfig['descr'] = "Set to 0 to disable filtering on the incoming and outgoing member interfaces."; + $pconfig['tunable'] = "net.link.bridge.pfil_member"; + $pconfig['value'] = "1"; + $config['sysctl']['item'][] = $pconfig; + $pconfig = array(); + $pconfig['descr'] = "Set to 1 to enable filtering on the bridge interface"; + $pconfig['tunable'] = "net.link.bridge.pfil_bridge"; + $pconfig['value'] = "0"; + $config['sysctl']['item'][] = $pconfig; + + unset($config['bridge']); + + $convert_bridges = false; + foreach($config['interfaces'] as $intf) { + if (isset($intf['bridge']) && $intf['bridge'] <> "") { + $config['bridges'] = array(); + $config['bridges']['bridged'] = array(); + $convert_bridges = true; + break; + } + } + if ($convert_bridges == true) { + $i = 0; + foreach ($config['interfaces'] as $ifr => &$intf) { + if (isset($intf['bridge']) && $intf['bridge'] <> "") { + $nbridge = array(); + $nbridge['members'] = "{$ifr},{$intf['bridge']}"; + $nbridge['descr'] = sprintf(gettext("Converted bridged %s"), $ifr); + $nbridge['bridgeif'] = "bridge{$i}"; + $config['bridges']['bridged'][] = $nbridge; + unset($intf['bridge']); + $i++; + } + } + } +} + + +function upgrade_051_to_052() { + global $config; + $config['openvpn'] = array(); + if (!is_array($config['ca'])) + $config['ca'] = array(); + if (!is_array($config['cert'])) + $config['cert'] = array(); + + $vpnid = 1; + + /* openvpn server configurations */ + if (is_array($config['installedpackages']['openvpnserver'])) { + $config['openvpn']['openvpn-server'] = array(); + + $index = 1; + foreach($config['installedpackages']['openvpnserver']['config'] as $server) { + + if (!is_array($server)) + continue; + + if ($server['auth_method'] == "pki") { + + /* create ca entry */ + $ca = array(); + $ca['refid'] = uniqid(); + $ca['descr'] = "OpenVPN Server CA #{$index}"; + $ca['crt'] = $server['ca_cert']; + $config['ca'][] = $ca; + + /* create ca reference */ + unset($server['ca_cert']); + $server['caref'] = $ca['refid']; + + /* create a crl entry if needed */ + if (!empty($server['crl'][0])) { + $crl = array(); + $crl['refid'] = uniqid(); + $crl['descr'] = "Imported OpenVPN CRL #{$index}"; + $crl['caref'] = $ca['refid']; + $crl['text'] = $server['crl'][0]; + if(!is_array($config['crl'])) + $config['crl'] = array(); + $config['crl'][] = $crl; + $server['crlref'] = $crl['refid']; + } + unset($server['crl']); + + /* create cert entry */ + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = "OpenVPN Server Certificate #{$index}"; + $cert['crt'] = $server['server_cert']; + $cert['prv'] = $server['server_key']; + $config['cert'][] = $cert; + + /* create cert reference */ + unset($server['server_cert']); + unset($server['server_key']); + $server['certref'] = $cert['refid']; + + $index++; + } + + /* determine operational mode */ + if ($server['auth_method'] == 'pki') { + if($server['nopool']) { + $server['mode'] = "p2p_tls"; + } else { + $server['mode'] = "server_tls"; + } + } else { + $server['mode'] = "p2p_shared_key"; + } + unset($server['auth_method']); + + /* modify configuration values */ + $server['dh_length'] = 1024; + unset($server['dh_params']); + if (!$server['interface']) + $server['interface'] = 'any'; + $server['tunnel_network'] = $server['addresspool']; + unset($server['addresspool']); + if (isset($server['use_lzo']) && ($server['use_lzo'] == "on")) { + $server['compression'] = "on"; + unset($server['use_lzo']); + } + if ($server['nopool']) + $server['pool_enable'] = false; + else + $server['pool_enable'] = "yes"; + unset($server['nopool']); + $server['dns_domain'] = $server['dhcp_domainname']; + unset($server['dhcp_domainname']); + + $tmparr = explode(";", $server['dhcp_dns'], 4); + $d=1; + foreach ($tmparr as $tmpa) { + $server["dns_server{$d}"] = $tmpa; + $d++; + } + unset($server['dhcp_dns']); + + $tmparr = explode(";", $server['dhcp_ntp'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $server["ntp_server{$d}"] = $tmpa; + $d++; + } + unset($server['dhcp_ntp']); + + if ($server['dhcp_nbtdisable']) + $server['netbios_enable'] = false; + else + $server['netbios_enable'] = "yes"; + unset($server['dhcp_nbtdisable']); + $server['netbios_ntype'] = $server['dhcp_nbttype']; + unset($server['dhcp_nbttype']); + $server['netbios_scope'] = $server['dhcp_nbtscope']; + unset($server['dhcp_nbtscope']); + + $tmparr = explode(";", $server['dhcp_nbdd'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $server["nbdd_server{$d}"] = $tmpa; + $d++; + } + unset($server['dhcp_nbdd']); + + $tmparr = explode(";", $server['dhcp_wins'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $server["wins_server{$d}"] = $tmpa; + $d++; + } + unset($server['dhcp_wins']); + + if (!empty($server['disable'])) + $server['disable'] = true; + else + unset($server['disable']); + + /* allocate vpnid */ + $server['vpnid'] = $vpnid++; + + if (!empty($server['custom_options'])) { + $cstmopts = array(); + $tmpcstmopts = explode(";", $server['custom_options']); + $assigned_if = ""; + $tmpstr = ""; + foreach ($tmpcstmopts as $tmpcstmopt) { + $tmpstr = str_replace(" ", "", $tmpcstmopt); + if (substr($tmpstr,0 ,6) == "devtun") { + $assigned_if = substr($tmpstr, 3); + continue; + } else if (substr($tmpstr, 0, 5) == "local") { + $localip = substr($tmpstr, 5); + $server['ipaddr'] = str_replace("\n", "", $localip); + } else + $cstmopts[] = $tmpcstmopt; + } + $server['custom_options'] = implode(";", $cstmopts); + if (!empty($assigned_if)) { + foreach ($config['interfaces'] as $iface => $cfgif) { + if ($cfgif['if'] == $assigned_if) { + $config['interfaces'][$iface]['if'] = "ovpns{$server['vpnid']}"; + break; + } + } + } + } + + $config['openvpn']['openvpn-server'][] = $server; + } + unset($config['installedpackages']['openvpnserver']); + } + + /* openvpn client configurations */ + if (is_array($config['installedpackages']['openvpnclient'])) { + $config['openvpn']['openvpn-client'] = array(); + + $index = 1; + foreach($config['installedpackages']['openvpnclient']['config'] as $client) { + + if (!is_array($client)) + continue; + + if ($client['auth_method'] == "pki") { + + /* create ca entry */ + $ca = array(); + $ca['refid'] = uniqid(); + $ca['descr'] = "OpenVPN Client CA #{$index}"; + $ca['crt'] = $client['ca_cert']; + $ca['crl'] = $client['crl']; + $config['ca'][] = $ca; + + /* create ca reference */ + unset($client['ca_cert']); + unset($client['crl']); + $client['caref'] = $ca['refid']; + + /* create cert entry */ + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = "OpenVPN Client Certificate #{$index}"; + $cert['crt'] = $client['client_cert']; + $cert['prv'] = $client['client_key']; + $config['cert'][] = $cert; + + /* create cert reference */ + unset($client['client_cert']); + unset($client['client_key']); + $client['certref'] = $cert['refid']; + + $index++; + } + + /* determine operational mode */ + if ($client['auth_method'] == 'pki') + $client['mode'] = "p2p_tls"; + else + $client['mode'] = "p2p_shared_key"; + unset($client['auth_method']); + + /* modify configuration values */ + if (!$client['interface']) + $client['interface'] = 'wan'; + $client['tunnel_network'] = $client['interface_ip']; + unset($client['interface_ip']); + $client['server_addr'] = $client['serveraddr']; + unset($client['serveraddr']); + $client['server_port'] = $client['serverport']; + unset($client['serverport']); + $client['proxy_addr'] = $client['poxy_hostname']; + unset($client['proxy_addr']); + if (isset($client['use_lzo']) && ($client['use_lzo'] == "on")) { + $client['compression'] = "on"; + unset($client['use_lzo']); + } + $client['resolve_retry'] = $client['infiniteresolvretry']; + unset($client['infiniteresolvretry']); + + /* allocate vpnid */ + $client['vpnid'] = $vpnid++; + + if (!empty($client['custom_options'])) { + $cstmopts = array(); + $tmpcstmopts = explode(";", $client['custom_options']); + $assigned_if = ""; + $tmpstr = ""; + foreach ($tmpcstmopts as $tmpcstmopt) { + $tmpstr = str_replace(" ", "", $tmpcstmopt); + if (substr($tmpstr,0 ,6) == "devtun") { + $assigned_if = substr($tmpstr, 3); + continue; + } else if (substr($tmpstr, 0, 5) == "local") { + $localip = substr($tmpstr, 5); + $client['ipaddr'] = str_replace("\n", "", $localip); + } else + $cstmopts[] = $tmpcstmopt; + } + $client['custom_options'] = implode(";", $cstmopts); + if (!empty($assigned_if)) { + foreach ($config['interfaces'] as $iface => $cfgif) { + if ($cfgif['if'] == $assigned_if) { + $config['interfaces'][$iface]['if'] = "ovpnc{$client['vpnid']}"; + break; + } + } + } + } + + if (!empty($client['disable'])) + $client['disable'] = true; + else + unset($client['disable']); + + $config['openvpn']['openvpn-client'][] = $client; + } + + unset($config['installedpackages']['openvpnclient']); + } + + /* openvpn client specific configurations */ + if (is_array($config['installedpackages']['openvpncsc'])) { + $config['openvpn']['openvpn-csc'] = array(); + + foreach($config['installedpackages']['openvpncsc']['config'] as $csc) { + + if (!is_array($csc)) + continue; + + /* modify configuration values */ + $csc['common_name'] = $csc['commonname']; + unset($csc['commonname']); + $csc['tunnel_network'] = $csc['ifconfig_push']; + unset($csc['ifconfig_push']); + $csc['dns_domain'] = $csc['dhcp_domainname']; + unset($csc['dhcp_domainname']); + + $tmparr = explode(";", $csc['dhcp_dns'], 4); + $d=1; + foreach ($tmparr as $tmpa) { + $csc["dns_server{$d}"] = $tmpa; + $d++; + } + unset($csc['dhcp_dns']); + + $tmparr = explode(";", $csc['dhcp_ntp'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $csc["ntp_server{$d}"] = $tmpa; + $d++; + } + unset($csc['dhcp_ntp']); + + if ($csc['dhcp_nbtdisable']) + $csc['netbios_enable'] = false; + else + $csc['netbios_enable'] = "yes"; + unset($csc['dhcp_nbtdisable']); + $csc['netbios_ntype'] = $csc['dhcp_nbttype']; + unset($csc['dhcp_nbttype']); + $csc['netbios_scope'] = $csc['dhcp_nbtscope']; + unset($csc['dhcp_nbtscope']); + + $tmparr = explode(";", $csc['dhcp_nbdd'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $csc["nbdd_server{$d}"] = $tmpa; + $d++; + } + unset($csc['dhcp_nbdd']); + + $tmparr = explode(";", $csc['dhcp_wins'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $csc["wins_server{$d}"] = $tmpa; + $d++; + } + unset($csc['dhcp_wins']); + + if (!empty($csc['disable'])) + $csc['disable'] = true; + else + unset($csc['disable']); + + $config['openvpn']['openvpn-csc'][] = $csc; + } + + unset($config['installedpackages']['openvpncsc']); + } + + if (count($config['openvpn']['openvpn-server']) > 0 || + count($config['openvpn']['openvpn-client']) > 0) { + $ovpnrule = array(); + $ovpnrule['type'] = "pass"; + $ovpnrule['interface'] = "openvpn"; + $ovpnrule['statetype'] = "keep state"; + $ovpnrule['source'] = array(); + $ovpnrule['destination'] = array(); + $ovpnrule['source']['any'] = true; + $ovpnrule['destination']['any'] = true; + $ovpnrule['descr'] = gettext("Auto added OpenVPN rule from config upgrade."); + $config['filter']['rule'][] = $ovpnrule; + } + + /* + * FIXME: hack to keep things working with no installedpackages + * or carp array in the configuration data. + */ + if (!is_array($config['installedpackages'])) + $config['installedpackages'] = array(); + if (!is_array($config['installedpackages']['carp'])) + $config['installedpackages']['carp'] = array(); + +} + + +function upgrade_052_to_053() { + global $config; + if (!is_array($config['ca'])) + $config['ca'] = array(); + if (!is_array($config['cert'])) + $config['cert'] = array(); + + /* migrate advanced admin page webui ssl to certifcate mngr */ + if ($config['system']['webgui']['certificate'] && + $config['system']['webgui']['private-key']) { + + /* create cert entry */ + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = "webConfigurator SSL Certificate"; + $cert['crt'] = $config['system']['webgui']['certificate']; + $cert['prv'] = $config['system']['webgui']['private-key']; + $config['cert'][] = $cert; + + /* create cert reference */ + unset($config['system']['webgui']['certificate']); + unset($config['system']['webgui']['private-key']); + $config['system']['webgui']['ssl-certref'] = $cert['refid']; + } + + /* migrate advanced admin page ssh keys to user manager */ + if ($config['system']['ssh']['authorizedkeys']) { + $admin_user =& getUserEntryByUID(0); + $admin_user['authorizedkeys'] = $config['system']['ssh']['authorizedkeys']; + unset($config['system']['ssh']['authorizedkeys']); + } +} + + +function upgrade_053_to_054() { + global $config; + if(is_array($config['load_balancer']['lbpool'])) { + $lbpool_arr = $config['load_balancer']['lbpool']; + $lbpool_srv_arr = array(); + $gateway_group_arr = array(); + $gateways = return_gateways_array(); + $group_name_changes = array(); + if (! is_array($config['gateways']['gateway_item'])) + $config['gateways']['gateway_item'] = array(); + + $a_gateways =& $config['gateways']['gateway_item']; + foreach($lbpool_arr as $lbpool) { + if($lbpool['type'] == "gateway") { + // Gateway Groups have to have valid names in pf, old lb pools did not. Clean them up. + $group_name = preg_replace("/[^A-Za-z0-9]/", "", $lbpool['name'] ); + // If we made and changes, check for collisions and note the change. + if ($group_name != $lbpool['name']) { + // Make sure the name isn't already in use. + foreach ($gateway_group_arr as $gwg) { + // If the name is in use, add some random bits to avoid collision. + if ($gwg['name'] == $group_name) + $group_name .= uniqid(); + } + $group_name_changes[$lbpool['name']] = $group_name; + } + $gateway_group['name'] = $group_name; + $gateway_group['descr'] = $lbpool['descr']; + $gateway_group['trigger'] = "down"; + $gateway_group['item'] = array(); + $i = 0; + foreach($lbpool['servers'] as $member) { + $split = explode("|", $member); + $interface = $split[0]; + $monitor = $split[1]; + /* on static upgraded configuration we automatically prepend GW_ */ + $static_name = "GW_" . strtoupper($interface); + if(is_ipaddr($monitor)) + foreach ($a_gateways as & $gw) + if ($gw['name'] == $static_name) + $gw['monitor'] = $monitor; + + /* on failover increment tier. Else always assign 1 */ + if($lbpool['behaviour'] == "failover") { + $i++; + } else { + $i = 1; + } + $gateway_group['item'][] = "$static_name|$i"; + } + $gateway_group_arr[] = $gateway_group; + } else { + $lbpool_srv_arr[] = $lbpool; + } + } + $config['load_balancer']['lbpool'] = $lbpool_srv_arr; + $config['gateways']['gateway_group'] = $gateway_group_arr; + } + // Unset lbpool if we no longer have any server pools + if (count($lbpool_srv_arr) == 0) { + if(empty($config['load_balancer'])) { + unset($config['load_balancer']); + } else { + unset($config['load_balancer']['lbpool']); + } + } else { + $config['load_balancer']['lbpool'] = $lbpool_srv_arr; + } + // Only set the gateway group array if we converted any + if (count($gateway_group_arr) != 0) { + $config['gateways']['gateway_group'] = $gateway_group_arr; + // Update any rules that had a gateway change, if any. + if (count($group_name_changes) > 0) + foreach ($config['filter']['rule'] as & $rule) + if (!empty($rule["gateway"]) && array_key_exists($rule["gateway"], $group_name_changes)) + $rule["gateway"] = $group_name_changes[$rule["gateway"]]; + } +} + + +function upgrade_054_to_055() { + global $config; + global $g; + + /* RRD files changed for quality, traffic and packets graphs */ + //ini_set("max_execution_time", "1800"); + /* convert traffic RRD file */ + global $parsedcfg, $listtags; + $listtags = array("ds", "v", "rra", "row"); + + $rrddbpath = "/var/db/rrd/"; + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + if ($g['platform'] != "pfSense") { + /* restore the databases, if we have one */ + if (restore_rrd()) { + /* Make sure to move the rrd backup out of the way. We will make a new one after converting. */ + rename("{$g['cf_conf_path']}/rrd.tgz", "{$g['cf_conf_path']}/backup"); + } + } + + $rrdinterval = 60; + $valid = $rrdinterval * 2; + + /* Asume GigE for now */ + $downstream = 125000000; + $upstream = 125000000; + + /* build a list of quality databases */ + /* roundtrip has become delay */ + function divide_delay($delayval) { + $delayval = floatval($delayval); + $delayval = ($delayval / 1000); + $delayval = " ". sprintf("%1.10e", $delayval) ." "; + return $delayval; + } + /* the roundtrip times need to be divided by 1000 to get seconds, really */ + $databases = array(); + if (!file_exists($rrddbpath)) + @mkdir($rrddbpath); + chdir($rrddbpath); + $databases = glob("*-quality.rrd"); + rsort($databases); + foreach($databases as $database) { + $xmldump = "{$database}.old.xml"; + $xmldumpnew = "{$database}.new.xml"; + + if ($g['booting']) + echo "Migrate RRD database {$database} to new format for IPv6 \n"; + mwexec("$rrdtool tune {$rrddbpath}{$database} -r roundtrip:delay 2>&1"); + + dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}"); + $rrdold = xml2array(file_get_contents("{$g['tmp_path']}/{$xmldump}"), 1, "tag"); + $rrdold = $rrdold['rrd']; + + $i = 0; + foreach($rrdold['rra'] as $rra) { + $l = 0; + foreach($rra['database']['row'] as $row) { + $vnew = divide_delay($row['v'][1]); + $rrdold['rra'][$i]['database']['row'][$l]['v'][1] = $vnew; + $l++; + } + $i++; + } + + file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", dump_xml_config_raw($rrdold, "rrd")); + mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1"); + + unset($rrdold); + } + /* let apinger recreate required files */ + setup_gateways_monitor(); + + /* build a list of traffic and packets databases */ + $databases = return_dir_as_array($rrddbpath, '/-(traffic|packets)\.rrd$/'); + rsort($databases); + foreach($databases as $database) { + $databasetmp = "{$database}.tmp"; + $xmldump = "{$database}.old.xml"; + $xmldumptmp = "{$database}.tmp.xml"; + $xmldumpnew = "{$database}.new.xml"; + + if ($g['booting']) + echo "Migrate RRD database {$database} to new format \n"; + /* rename DS source */ + mwexec("$rrdtool tune {$rrddbpath}/{$database} -r in:inpass 2>&1"); + mwexec("$rrdtool tune {$rrddbpath}/{$database} -r out:outpass 2>71"); + + /* dump contents to xml and move database out of the way */ + dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}"); + + /* create new rrd database file */ + $rrdcreate = "$rrdtool create {$g['tmp_path']}/{$databasetmp} --step $rrdinterval "; + $rrdcreate .= "DS:inpass:COUNTER:$valid:0:$downstream "; + $rrdcreate .= "DS:outpass:COUNTER:$valid:0:$upstream "; + $rrdcreate .= "DS:inblock:COUNTER:$valid:0:$downstream "; + $rrdcreate .= "DS:outblock:COUNTER:$valid:0:$upstream "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:1000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:720:1000 "; + + create_new_rrd("$rrdcreate"); + /* create temporary xml from new RRD */ + dump_rrd_to_xml("{$g['tmp_path']}/{$databasetmp}", "{$g['tmp_path']}/{$xmldumptmp}"); + + $rrdold = xml2array(file_get_contents("{$g['tmp_path']}/{$xmldump}"), 1, "tag"); + $rrdold = $rrdold['rrd']; + + $rrdnew = xml2array(file_get_contents("{$g['tmp_path']}/{$xmldumptmp}"), 1, "tag"); + $rrdnew = $rrdnew['rrd']; + + /* remove any MAX RRA's. Not needed for traffic. */ + $i = 0; + foreach ($rrdold['rra'] as $rra) { + if(trim($rra['cf']) == "MAX") { + unset($rrdold['rra'][$i]); + } + $i++; + } + + file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", dump_xml_config_raw(migrate_rrd_format($rrdold, $rrdnew), "rrd")); + mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1"); + /* we now have the rrd with the new fields, adjust the size now. */ + /* RRA 2 is 60 minutes, RRA 3 is 720 minutes */ + mwexec("/bin/sync"); + mwexec("$rrdtool resize {$rrddbpath}/{$database} 2 GROW 2000;/bin/mv resize.rrd {$rrddbpath}/{$database} 2>&1"); + mwexec("/bin/sync"); + mwexec("$rrdtool resize {$rrddbpath}/{$database} 3 GROW 2000;/bin/mv resize.rrd {$rrddbpath}/{$database} 2>&1"); + unset($rrdxmlarray); + } + enable_rrd_graphing(); + /* Let's save the RRD graphs after we run enable RRD graphing */ + /* The function will restore the rrd.tgz so we will save it after */ + exec("cd /; LANG=C NO_REMOUNT=1 RRDDBPATH='{$rrddbpath}' CF_CONF_PATH='{$g['cf_conf_path']}' /etc/rc.backup_rrd.sh"); + unlink_if_exists("{$g['vardb_path']}/rrd/*.xml"); + if ($g['booting']) + echo "Updating configuration..."; +} + + +function upgrade_055_to_056() { + global $config; + + if (!is_array($config['ca'])) + $config['ca'] = array(); + if (!is_array($config['cert'])) + $config['cert'] = array(); + + /* migrate ipsec ca's to cert manager */ + if (is_array($config['ipsec']['cacert'])) { + foreach($config['ipsec']['cacert'] as & $cacert) { + $ca = array(); + $ca['refid'] = uniqid(); + if (is_array($cacert['cert'])) + $ca['crt'] = $cacert['cert'][0]; + else + $ca['crt'] = $cacert['cert']; + $ca['descr'] = $cacert['ident']; + $config['ca'][] = $ca; + } + unset($config['ipsec']['cacert']); + } + + /* migrate phase1 certificates to cert manager */ + if (is_array($config['ipsec']['phase1'])) { + foreach($config['ipsec']['phase1'] as & $ph1ent) { + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = "IPsec Peer {$ph1ent['remote-gateway']} Certificate"; + if (is_array($ph1ent['cert'])) + $cert['crt'] = $ph1ent['cert'][0]; + else + $cert['crt'] = $ph1ent['cert']; + $cert['prv'] = $ph1ent['private-key']; + $config['cert'][] = $cert; + $ph1ent['certref'] = $cert['refid']; + if ($ph1ent['cert']) + unset($ph1ent['cert']); + if ($ph1ent['private-key']) + unset($ph1ent['private-key']); + if ($ph1ent['peercert']) + unset($ph1ent['peercert']); + } + } +} + + +function upgrade_056_to_057() { + global $config; + + if (!is_array($config['system']['user'])) + $config['system']['user'] = array(); + /* migrate captivate portal to user manager */ + if (is_array($config['captiveportal']['user'])) { + foreach($config['captiveportal']['user'] as $user) { + // avoid user conflicts + $found = false; + foreach ($config['system']['user'] as $userent) { + if ($userent['name'] == $user['name']) { + $found = true; + break; + } + } + if ($found) + continue; + $user['scope'] = "user"; + if (isset($user['expirationdate'])) { + $user['expires'] = $user['expirationdate']; + unset($user['expirationdate']); + } + if (isset($user['password'])) { + $user['md5-hash'] = $user['password']; + unset($user['password']); + } + $user['uid'] = $config['system']['nextuid']++; + $config['system']['user'][] = $user; + } + unset($config['captiveportal']['user']); + } +} + +function upgrade_057_to_058() { + global $config; + /* set all phase2 entries to tunnel mode */ + if (is_array($config['ipsec']['phase2'])) + foreach($config['ipsec']['phase2'] as & $ph2ent) + $ph2ent['mode'] = 'tunnel'; +} + +function upgrade_058_to_059() { + global $config; + + if (is_array($config['schedules']['schedule'])) { + foreach ($config['schedules']['schedule'] as & $schedl) + $schedl['schedlabel'] = uniqid(); + } +} + +function upgrade_059_to_060() { + global $config; + require_once("/etc/inc/certs.inc"); + if (is_array($config['ca'])) { + /* Locate issuer for all CAs */ + foreach ($config['ca'] as & $ca) { + $subject = cert_get_subject($ca['crt']); + $issuer = cert_get_issuer($ca['crt']); + if($issuer <> $subject) { + $issuer_crt =& lookup_ca_by_subject($issuer); + if($issuer_crt) + $ca['caref'] = $issuer_crt['refid']; + } + } + + /* Locate issuer for all certificates */ + if (is_array($config['cert'])) { + foreach ($config['cert'] as & $cert) { + $subject = cert_get_subject($cert['crt']); + $issuer = cert_get_issuer($cert['crt']); + if($issuer <> $subject) { + $issuer_crt =& lookup_ca_by_subject($issuer); + if($issuer_crt) + $cert['caref'] = $issuer_crt['refid']; + } + } + } + } +} + +function upgrade_060_to_061() { + global $config; + + if (is_array($config['interfaces']['wan'])) + $config['interfaces']['wan']['enable'] = true; + if (is_array($config['interfaces']['lan'])) + $config['interfaces']['lan']['enable'] = true; + + /* On 1.2.3 the "mtu" field adjusted MSS. + On 2.x the "mtu" field is actually the MTU. Rename accordingly. + See redmine ticket #1886 + */ + foreach ($config['interfaces'] as $ifr => &$intf) { + if (isset($intf['mtu']) && is_numeric($intf['mtu'])) { + $intf['mss'] = $intf['mtu']; + unset($intf['mtu']); + } + } +} + +function upgrade_061_to_062() { + global $config; + + /* Convert NAT port forwarding rules */ + if (is_array($config['nat']['rule'])) { + $a_nat = &$config['nat']['rule']; + + foreach ($a_nat as &$natent) { + $natent['disabled'] = false; + $natent['nordr'] = false; + + $natent['source'] = array( + "not" => false, + "any" => true, + "port" => "" + ); + + $natent['destination'] = array( + "not" => false, + "address" => $natent['external-address'], + "port" => $natent['external-port'] + ); + + if (empty($natent['destination']['address'])) { + unset($natent['destination']['address']); + $natent['destination']['network'] = $natent['interface'] . 'ip'; + } else if ($natent['destination']['address'] == 'any') { + unset($natent['destination']['address']); + $natent['destination']['any'] = true; + } + + unset($natent['external-address']); + unset($natent['external-port']); + } + + unset($natent); + } +} + +function upgrade_062_to_063() { + /* Upgrade legacy Themes to the new pfsense_ng */ + global $config; + + switch($config['theme']) { + case "nervecenter": + $config['theme'] = "pfsense_ng"; + break; + } + +} + +function upgrade_063_to_064() { + global $config; + $j=0; + $ifcfg = &$config['interfaces']; + + if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($config['ppps']['ppp'] as $pppid => $ppp) { + $config['ppps']['ppp'][$pppid]['if'] = "ppp".$j; + $config['ppps']['ppp'][$pppid]['ptpid'] = $j; + $j++; + if (isset($ppp['port'])){ + $config['ppps']['ppp'][$pppid]['ports'] = $ppp['port']; + unset($config['ppps']['ppp'][$pppid]['port']); + } + if (!isset($ppp['type'])){ + $config['ppps']['ppp'][$pppid]['type'] = "ppp"; + } + if (isset($ppp['defaultgw'])) + unset($config['ppps']['ppp'][$pppid]['defaultgw']); + } + } + + if (!is_array($config['ppps']['ppp'])) + $config['ppps']['ppp'] = array(); + $a_ppps = &$config['ppps']['ppp']; + + foreach ($ifcfg as $ifname => $ifinfo) { + $ppp = array(); + // For pppoe conversion + if ($ifinfo['ipaddr'] == "pppoe" || $ifinfo['ipaddr'] == "pptp"){ + if (isset($ifinfo['ptpid'])) + continue; + $ppp['ptpid'] = $j; + $ppp['type'] = $ifinfo['ipaddr']; + $ppp['if'] = $ifinfo['ipaddr'].$j; + $ppp['ports'] = $ifinfo['if']; + if ($ifinfo['ipaddr'] == "pppoe"){ + $ppp['username'] = $ifinfo['pppoe_username']; + $ppp['password'] = base64_encode($ifinfo['pppoe_password']); + } + if ($ifinfo['ipaddr'] == "pptp"){ + $ppp['username'] = $ifinfo['pptp_username']; + $ppp['password'] = base64_encode($ifinfo['pptp_password']); + } + + if (isset($ifinfo['provider'])) + $ppp['provider'] = $ifinfo['provider']; + if (isset($ifinfo['ondemand'])) + $ppp['ondemand'] = true; + if (isset($ifinfo['timeout'])) + $ppp['idletimeout'] = $ifinfo['timeout']; + if (isset($ifinfo['pppoe']['pppoe-reset-type'])){ + $ppp['pppoe-reset-type'] = $ifinfo['pppoe']['pppoe-reset-type']; + if (is_array($config['cron']['item'])) { + for ($i = 0; $i < count($config['cron']['item']); $i++) { + $item = $config['cron']['item'][$i]; + if (strpos($item['command'], "/conf/pppoe{$ifname}restart") !== false) + $config['cron']['item'][$i]['command'] = "/var/etc/pppoe_restart_" . $ppp['if']; + } + } + } + if (isset($ifinfo['local'])) + $ppp['localip'] = $ifinfo['local']; + if (isset($ifinfo['subnet'])) + $ppp['subnet'] = $ifinfo['subnet']; + if (isset($ifinfo['remote'])) + $ppp['gateway'] = $ifinfo['remote']; + + $ifcfg[$ifname]['if'] = $ifinfo['ipaddr'].$j; + $j++; + + unset($ifcfg[$ifname]['pppoe_username']); + unset($ifcfg[$ifname]['pppoe_password']); + unset($ifcfg[$ifname]['provider']); + unset($ifcfg[$ifname]['ondemand']); + unset($ifcfg[$ifname]['timeout']); + unset($ifcfg[$ifname]['pppoe_reset']); + unset($ifcfg[$ifname]['pppoe_preset']); + unset($ifcfg[$ifname]['pppoe']); + unset($ifcfg[$ifname]['pptp_username']); + unset($ifcfg[$ifname]['pptp_password']); + unset($ifcfg[$ifname]['local']); + unset($ifcfg[$ifname]['subnet']); + unset($ifcfg[$ifname]['remote']); + + $a_ppps[] = $ppp; + + } + } +} + +function upgrade_064_to_065() { + /* Disable TSO and LRO in upgraded configs */ + global $config; + $config['system']['disablesegmentationoffloading'] = true; + $config['system']['disablelargereceiveoffloading'] = true; +} + +function upgrade_065_to_066() { + global $config; + + $dhcrelaycfg =& $config['dhcrelay']; + + if (is_array($dhcrelaycfg)) { + $dhcrelayifs = array(); + $foundifs = false; + /* DHCPRelay enabled on any interfaces? */ + foreach ($dhcrelaycfg as $dhcrelayif => $dhcrelayifconf) { + if (isset($dhcrelayifconf['enable'])) { + $dhcrelayifs[] = $dhcrelayif; + unset($dhcrelaycfg['dhcrelayif']); + $foundifs = true; + } + } + if ($foundifs == true) + $dhcrelaycfg['interface'] = implode(",", $dhcrelayifs); + } +} + +function upgrade_066_to_067() { + global $config; + if (isset($config['system']['ca'])) { + $config['ca'] = $config['system']['ca']; + } + if (isset($config['system']['cert'])) { + $config['cert'] = $config['system']['cert']; + } +} + +function upgrade_067_to_068() { + global $config; + + if (!empty($config['pppoe'])) { + $config['pppoes'] = array(); + $config['pppoes']['pppoe'] = array(); + $config['pppoes']['pppoe'][] = $config['pppoe'][0]; + + if (is_array($config['pppoe']['user'])) { + $username = array(); + foreach ($config['pppoe']['user'] as $user) { + $usr = $user['name'] . ":" . base64_encode($user['password']); + if ($user['ip']) + $usr .= ":{$user['ip']}"; + $username[] = $usr; + } + $config['pppoes']['pppoe'][0]['username'] = implode(" ", $username); + } + unset($config['pppoe']); + } +} + +function upgrade_068_to_069() { + global $config; + if (!is_array($config['system']['user'])) + return; + foreach ($config['system']['user'] as & $user) { + if (!is_array($user['cert'])) + continue; + $rids = array(); + foreach ($user['cert'] as $id => $cert) { + if (!isset($cert['descr'])) + continue; + $tcert = $cert; + // Make sure each cert gets a refid + if (!isset($tcert['refid'])) + $tcert['refid'] = uniqid(); + // Keep the cert references for this user + $rids[] = $tcert['refid']; + $config['cert'][] = $tcert; + } + // Replace user certs with cert references instead. + if (count($rids) > 0) + $user['cert'] = $rids; + } +} + +function upgrade_069_to_070() { + global $config; + + /* Convert NAT 1:1 rules */ + if (is_array($config['nat']['onetoone'])) { + foreach ($config['nat']['onetoone'] as $nidx => $natent) { + if ($natent['subnet'] == 32) + $config['nat']['onetoone'][$nidx]['source'] = array("address" => $natent['internal']); + else + $config['nat']['onetoone'][$nidx]['source'] = array("address" => $natent['internal'] . "/" . $natent['subnet']); + + $config['nat']['onetoone'][$nidx]['destination'] = array("any" => true); + + unset($config['nat']['onetoone'][$nidx]['internal']); + unset($config['nat']['onetoone'][$nidx]['subnet']); + } + + unset($natent); + } +} + +function upgrade_070_to_071() { + global $config; + + if (is_array($config['cron']['item'])) { + foreach($config['cron']['item'] as $idx => $cronitem) { + if(stristr($cronitem['command'], "checkreload.sh")) { + unset($config['cron']['item'][$idx]); + break; + } + } + } +} + +function rename_field(& $section, $oldname, $newname) { + if (is_array($section)) { + foreach($section as & $item) { + if (is_array($item) && !empty($item[$oldname])) + $item[$newname] = $item[$oldname]; + if (is_array($item) && isset($item[$oldname])) + unset($item[$oldname]); + } + } +} + +function upgrade_071_to_072() { + global $config; + if (is_array($config['sysctl']) && is_array($config['sysctl']['item'])) + rename_field($config['sysctl']['item'], 'desc', 'descr'); +} + +function upgrade_072_to_073() { + global $config; + if (!is_array($config['load_balancer'])) + return; + if (is_array($config['load_balancer']['monitor_type'])) + rename_field($config['load_balancer']['monitor_type'], 'desc', 'descr'); + if (is_array($config['load_balancer']['lbpool'])) + rename_field($config['load_balancer']['lbpool'], 'desc', 'descr'); + if (is_array($config['load_balancer']['lbaction'])) + rename_field($config['load_balancer']['lbaction'], 'desc', 'descr'); + if (is_array($config['load_balancer']['lbprotocol'])) + rename_field($config['load_balancer']['lbprotocol'], 'desc', 'descr'); + if (is_array($config['load_balancer']['virtual_server'])) + rename_field($config['load_balancer']['virtual_server'], 'desc', 'descr'); +} + +function upgrade_073_to_074() { + global $config; + rename_field($config['system']['user'], 'fullname', 'descr'); +} + +function upgrade_074_to_075() { + global $config; + if (is_array($config['ca'])) + rename_field($config['ca'], 'name', 'descr'); + if (is_array($config['cert'])) + rename_field($config['cert'], 'name', 'descr'); + if (is_array($config['crl'])) + rename_field($config['crl'], 'name', 'descr'); +} + +function upgrade_075_to_076() { + global $config; + $cron_item = array(); + $cron_item['minute'] = "30"; + $cron_item['hour'] = "12"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /etc/rc.update_urltables"; + $config['cron']['item'][] = $cron_item; +} + +function upgrade_076_to_077() { + global $config; + foreach($config['filter']['rule'] as & $rule) { + if (isset($rule['protocol']) && !empty($rule['protocol'])) + $rule['protocol'] = strtolower($rule['protocol']); + } +} + +function upgrade_077_to_078() { + global $config; + if (is_array($config['pptpd']) && is_array($config['pptpd']['radius']) + && !is_array($config['pptpd']['radius']['server'])) { + $radarr = array(); + $radsvr = array(); + $radsvr['ip'] = $config['pptpd']['radius']['server']; + $radsvr['secret'] = $config['pptpd']['radius']['secret']; + $radsvr['port'] = 1812; + $radsvr['acctport'] = 1813; + $radsvr['enable'] = isset($config['pptpd']['radius']['enable']); + $radarr['accounting'] = isset($config['pptpd']['radius']['accounting']); + if ($radarr['accounting']) + $radarr['acct_update'] = $radsvr['ip']; + $radarr['server'] = $radsvr; + $config['pptpd']['radius'] = $radarr; + } + if (is_array($config['pptpd'])) { + $config['pptpd']['n_pptp_units'] = empty($config['pptpd']['n_pptp_units']) ? 16 : $config['pptpd']['n_pptp_units']; + } +} +function upgrade_078_to_079() { + global $g; + /* Delete old and unused RRD file */ + unlink_if_exists("{$g['vardb_path']}/rrd/captiveportal-totalusers.rrd"); +} + +function upgrade_079_to_080() { + global $config; + + /* Upgrade config in 1.2.3 specifying a username other than admin for synching. */ + if (!empty($config['system']['username']) && is_array($config['installedpackages']['carpsettings']) && + is_array($config['installedpackages']['carpsettings']['config'])) { + $config['installedpackages']['carpsettings']['config'][0]['username'] = $config['system']['username']; + unset($config['system']['username']); + } +} + +function upgrade_080_to_081() { + global $config; + global $g; + /* Welcome to the 2.1 migration path */ + + /* tag all the existing gateways as being IPv4 */ + $i = 0; + if(is_array($config['gateways']['gateway_item'])) { + foreach($config['gateways']['gateway_item'] as $gw) { + $config['gateways']['gateway_item'][$i]['ipprotocol'] = "inet"; + $i++; + } + } + + /* RRD files changed for quality, traffic and packets graphs */ + /* convert traffic RRD file */ + global $parsedcfg, $listtags; + $listtags = array("ds", "v", "rra", "row"); + + $rrddbpath = "/var/db/rrd/"; + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + + if ($g['platform'] != "pfSense") { + /* restore the databases, if we have one */ + if (restore_rrd()) { + /* Make sure to move the rrd backup out of the way. We will make a new one after converting. */ + @rename("{$g['cf_conf_path']}/rrd.tgz", "{$g['cf_conf_path']}/backup/rrd.tgz"); + } + } + + $rrdinterval = 60; + $valid = $rrdinterval * 2; + + /* Asume GigE for now */ + $downstream = 125000000; + $upstream = 125000000; + + /* build a list of traffic and packets databases */ + $databases = return_dir_as_array($rrddbpath, '/-(traffic|packets)\.rrd$/'); + rsort($databases); + foreach($databases as $database) { + $xmldump = "{$database}.old.xml"; + $xmldumpnew = "{$database}.new.xml"; + + if ($g['booting']) + echo "Migrate RRD database {$database} to new format for IPv6.\n"; + + /* dump contents to xml and move database out of the way */ + dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}"); + + /* search and replace tags to add data sources */ + $ds_search = ""; + $ds_arr = array(); + $ds_arr[] = " + inpass6 + COUNTER + {$valid} + 0.0000000000e+00 + 1.2500000000e+08 + + + 0 + NaN + 3 + + "; + $ds_arr[] = " + outpass6 + COUNTER + {$valid} + 0.0000000000e+00 + 1.2500000000e+08 + + + 0 + NaN + 3 + + "; + $ds_arr[] = " + inblock6 + COUNTER + {$valid} + 0.0000000000e+00 + 1.2500000000e+08 + + + 0 + NaN + 3 + + "; + $ds_arr[] = " + outblock6 + COUNTER + {$valid} + 0.0000000000e+00 + 1.2500000000e+08 + + + 0 + NaN + 3 + + "; + + $cdp_search = "<\/cdp_prep>"; + $cdp_replace = ""; + $cdp_arr = array(); + $cdp_arr[] = " + NaN + 0.0000000000e+00 + NaN + 0 + + "; + $cdp_arr[] = " + NaN + 0.0000000000e+00 + NaN + 0 + + "; + $cdp_arr[] = " + NaN + 0.0000000000e+00 + NaN + 0 + + "; + $cdp_arr[] = " + NaN + 0.0000000000e+00 + NaN + 0 + + "; + + $value_search = "<\/row>"; + $value_replace = ""; + $value = " NaN "; + + $xml = file_get_contents("{$g['tmp_path']}/{$xmldump}"); + foreach($ds_arr as $ds) { + $xml = preg_replace("/$ds_search/s", "$ds{$ds_search}", $xml); + } + foreach($cdp_arr as $cdp) { + $xml = preg_replace("/$cdp_search/s", "$cdp{$cdp_replace}", $xml); + } + foreach($ds_arr as $ds) { + $xml = preg_replace("/$value_search/s", "$value{$value_replace}", $xml); + } + + file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", $xml); + mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1"); + unset($xml); + # Default /tmp tmpfs is ~40mb, do not leave temp files around + unlink_if_exists("{$g['tmp_path']}/{$xmldump}"); + unlink_if_exists("{$g['tmp_path']}/{$xmldumpnew}"); + } + enable_rrd_graphing(); + /* Let's save the RRD graphs after we run enable RRD graphing */ + /* The function will restore the rrd.tgz so we will save it after */ + exec("cd /; LANG=C NO_REMOUNT=1 RRDDBPATH='{$rrddbpath}' CF_CONF_PATH='{$g['cf_conf_path']}' /etc/rc.backup_rrd.sh"); + if ($g['booting']) + echo "Updating configuration..."; + foreach($config['filter']['rule'] as & $rule) { + if (isset($rule['protocol']) && !empty($rule['protocol'])) + $rule['protocol'] = strtolower($rule['protocol']); + } + unset($rule); +} + +function upgrade_081_to_082() { + /* don't enable the allow IPv6 toggle */ +} + +function upgrade_082_to_083() { + global $config; + + /* Upgrade captiveportal config */ + if (!empty($config['captiveportal'])) { + $tmpcp = $config['captiveportal']; + $config['captiveportal'] = array(); + $config['captiveportal']['cpzone'] = array(); + $config['captiveportal']['cpzone'] = $tmpcp; + $config['captiveportal']['cpzone']['zoneid'] = 8000; + $config['captiveportal']['cpzone']['zone'] = "cpzone"; + if ($config['captiveportal']['cpzone']['auth_method'] == "radius") + $config['captiveportal']['cpzone']['radius_protocol'] = "PAP"; + } + if (!empty($config['voucher'])) { + $tmpcp = $config['voucher']; + $config['voucher'] = array(); + $config['voucher']['cpzone'] = array(); + $config['voucher']['cpzone'] = $tmpcp; + } +} + +function upgrade_083_to_084() { + global $config; + if (!isset($config['hasync'])) { + if (!empty($config['installedpackages']) && + !empty($config['installedpackages']['carpsettings']) && + !empty($config['installedpackages']['carpsettings']['config'])) { + $config['hasync'] = $config['installedpackages']['carpsettings']['config'][0]; + unset($config['installedpackages']['carpsettings']); + } + if (empty($config['installedpackages']['carpsettings'])) { + unset($config['installedpackages']['carpsettings']); + } + if (empty($config['installedpackages'])) { + unset($config['installedpackages']); + } + } +} + +function upgrade_084_to_085() { + global $config; + + $gateway_group_arr = array(); + $gateways = return_gateways_array(); + $oldnames = array(); + /* setup translation array */ + foreach($gateways as $name => $gw) { + if(isset($gw['dynamic'])){ + $oldname = strtoupper($config['interfaces'][$gw['friendlyiface']]['descr']); + $oldnames[$oldname] = $name; + } else { + $oldnames[$name] = $name; + } + } + + /* process the old array */ + if(is_array($config['gateways']['gateway_group'])) { + $group_array_new = array(); + foreach($config['gateways']['gateway_group'] as $name => $group) { + if(is_array($group['item'])) { + $newlist = array(); + foreach($group['item'] as $entry) { + $elements = explode("|", $entry); + if($oldnames[$elements[0]] <> "") { + $newlist[] = "{$oldnames[$elements[0]]}|{$elements[1]}"; + } else { + $newlist[] = "{$elements[0]}|{$elements[1]}"; + } + } + $group['item'] = $newlist; + $group_array_new[$name] = $group; + } + } + $config['gateways']['gateway_group'] = $group_array_new; + } + /* rename old Quality RRD files in the process */ + $rrddbpath = "/var/db/rrd"; + foreach($oldnames as $old => $new) { + if(is_readable("{$rrddbpath}/{$old}-quality.rrd")) { + @rename("{$rrddbpath}/{$old}-quality.rrd", "{$rrddbpath}/{$new}-quality.rrd"); + } + } + unset($gateways, $oldnames, $gateway_group_arr); +} + +function upgrade_085_to_086() { + global $config, $g; + + /* XXX: Gross hacks in sight */ + if (is_array($config['virtualip']['vip'])) { + $vipchg = array(); + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['mode'] != "carp") + continue; + $config = array_replace_values_recursive( + $config, + '^vip' . $vip['vhid'] . '$', + "{$vip['interface']}_vip{$vip['vhid']}" + ); + } + } +} + +function upgrade_086_to_087() { + global $config, $dummynet_pipe_list; + + if (!is_array($config['filter']) || !is_array($config['filter']['rule'])) + return; + if (!is_array($config['dnshaper']) || !is_array($config['dnshaper']['queue'])) + return; + + $dnqueue_number = 1; + $dnpipe_number = 1; + + foreach ($config['dnshaper']['queue'] as $idx => $dnpipe) { + $config['dnshaper']['queue'][$idx]['number'] = $dnpipe_number; + $dnpipe_number++; + if (is_array($dnpipe['queue'])) { + foreach ($dnpipe['queue'] as $qidx => $dnqueue) { + $config['dnshaper']['queue'][$idx]['queue'][$qidx]['number'] = $dnqueue_number; + $dnqueue_number++; + } + } + } + + unset($dnqueue_number, $dnpipe_number, $qidx, $idx, $dnpipe, $dnqueue); + + require_once("shaper.inc"); + read_dummynet_config(); + + $dn_list = array(); + if (is_array($dummynet_pipe_list)) { + foreach ($dummynet_pipe_list as $dn) { + $tmplist =& $dn->get_queue_list(); + foreach ($tmplist as $qname => $link) { + $dn_list[$link] = $qname; + } + } + unset($dummynet_pipe_list); + } + + foreach ($config['filter']['rule'] as $idx => $rule) { + if (!empty($rule['dnpipe'])) { + if (!empty($dn_list[$rule['dnpipe']])) + $config['filter']['rule'][$idx]['dnpipe'] = $dn_list[$rule['dnpipe']]; + } + if (!empty($rule['pdnpipe'])) { + if (!empty($dn_list[$rule['pdnpipe']])) + $config['filter']['rule'][$idx]['pdnpipe'] = $dn_list[$rule['pdnpipe']]; + } + } +} +function upgrade_087_to_088() { + global $config; + if (isset($config['system']['glxsb_enable'])) { + unset($config['system']['glxsb_enable']); + $config['system']['crypto_hardware'] = "glxsb"; + } +} + +function upgrade_088_to_089() { + global $config; + if (!is_array($config['ca'])) + $config['ca'] = array(); + if (!is_array($config['cert'])) + $config['cert'] = array(); + + /* migrate captive portal ssl to certifcate mngr */ + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $id => &$setting) { + if (isset($setting['httpslogin'])) { + /* create cert entry */ + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = "Captive Portal Cert - {$setting['zone']}"; + $cert['crt'] = $setting['certificate']; + $cert['prv'] = $setting['private-key']; + + if (!empty($setting['cacertificate'])) { + /* create ca entry */ + $ca = array(); + $ca['refid'] = uniqid(); + $ca['descr'] = "Captive Portal CA - {$setting['zone']}"; + $ca['crt'] = $setting['cacertificate']; + $config['ca'][] = $ca; + + /* add ca reference to certificate */ + $cert['caref'] = $ca['refid']; + } + + $config['cert'][] = $cert; + + /* create cert reference */ + $setting['certref'] = $cert['refid']; + + unset($setting['certificate']); + unset($setting['private-key']); + unset($setting['cacertificate']); + + } + } + } +} + +function upgrade_089_to_090() { + global $config; + if (is_array($config['load_balancer']['virtual_server']) && count($config['load_balancer']['virtual_server'])) { + $vs_a = &$config['load_balancer']['virtual_server']; + for ($i = 0; isset($vs_a[$i]); $i++) { + if (is_array($vs_a[$i]['pool'])) { + $vs_a[$i]['poolname'] = $vs_a[$i]['pool'][0]; + unset($vs_a[$i]['pool']); + } elseif (!empty($vs_a[$i]['pool'])) { + $vs_a[$i]['poolname'] = $vs_a[$i]['pool']; + unset($vs_a[$i]['pool']); + } + } + } +} + +function upgrade_090_to_091() { + global $config; + + if (is_array($config['dnshaper']) && is_array($config['dnshaper']['queue'])) { + foreach ($config['dnshaper']['queue'] as $idx => $dnqueue) { + if (!empty($dnqueue['bandwidth'])) { + $bw = array(); + $bw['bw'] = $dnqueue['bandwidth']; + $bw['bwscale'] = $dnqueue['bandwidthtype']; + $bw['bwsched'] = "none"; + $config['dnshaper']['queue'][$idx]['bandwidth'] = array(); + $config['dnshaper']['queue'][$idx]['bandwidth']['item'] = array(); + $config['dnshaper']['queue'][$idx]['bandwidth']['item'][] = $bw; + } + } + } +} + +function upgrade_091_to_092() { + global $config; + + if (is_array($config['nat']['advancedoutbound']) && is_array($config['nat']['advancedoutbound']['rule'])) { + $nat_rules = &$config['nat']['advancedoutbound']['rule']; + for ($i = 0; isset($nat_rules[$i]); $i++) { + if (empty($nat_rules[$i]['interface'])) { + $nat_rules[$i]['interface'] = 'wan'; + } + } + } +} + +function upgrade_092_to_093() { + global $g; + + $suffixes = array("concurrent", "loggedin"); + + foreach ($suffixes as $suffix) + if (file_exists("{$g['vardb_path']}/rrd/captiveportal-{$suffix}.rrd")) + rename("{$g['vardb_path']}/rrd/captiveportal-{$suffix}.rrd", + "{$g['vardb_path']}/rrd/captiveportal-cpZone-{$suffix}.rrd"); + + enable_rrd_graphing(); +} + +function upgrade_093_to_094() { + global $config; + + if (isset($config['system']['powerd_mode'])) { + $config['system']['powerd_ac_mode'] = $config['system']['powerd_mode']; + $config['system']['powerd_battery_mode'] = $config['system']['powerd_mode']; + unset($config['system']['powerd_mode']); + } +} + +function upgrade_094_to_095() { + global $config; + + if (!isset($config['interfaces']) || !is_array($config['interfaces'])) + return; + + foreach ($config['interfaces'] as $iface => $cfg) + if (isset($cfg['ipaddrv6']) && ($cfg['ipaddrv6'] == "track6")) + if (!isset($cfg['track6-prefix-id']) || ($cfg['track6-prefix-id'] == "")) + $config['interfaces'][$iface]['track6-prefix-id'] = 0; +} + +function upgrade_095_to_096() { + global $config, $g; + + $names = array("inpass", "outpass", "inblock", "outblock", + "inpass6", "outpass6", "inblock6", "outblock6"); + $rrddbpath = "/var/db/rrd"; + $rrdtool = "/usr/local/bin/rrdtool"; + + if ($g['platform'] != "pfSense") { + /* restore the databases, if we have one */ + if (restore_rrd()) { + /* Make sure to move the rrd backup out of the way. We will make a new one after converting. */ + rename("{$g['cf_conf_path']}/rrd.tgz", "{$g['cf_conf_path']}/backup"); + } + } + + /* Assume 2*10GigE for now */ + $stream = 2500000000; + + /* build a list of traffic and packets databases */ + $databases = return_dir_as_array($rrddbpath, '/-(traffic|packets)\.rrd$/'); + rsort($databases); + foreach($databases as $database) { + if ($g['booting']) + echo "Update RRD database {$database}.\n"; + + $cmd = "{$rrdtool} tune {$rrddbpath}/{$database}"; + foreach ($names as $name) + $cmd .= " -a {$name}:{$stream}"; + mwexec("{$cmd} 2>&1"); + + } + enable_rrd_graphing(); + /* Let's save the RRD graphs after we run enable RRD graphing */ + /* The function will restore the rrd.tgz so we will save it after */ + exec("cd /; LANG=C NO_REMOUNT=1 RRDDBPATH='{$rrddbpath}' CF_CONF_PATH='{$g['cf_conf_path']}' /etc/rc.backup_rrd.sh"); +} + +function upgrade_096_to_097() { + global $config, $g; + /* If the user had disabled default block rule logging before, then bogon/private network logging was already off, so respect their choice. */ + if (isset($config['syslog']['nologdefaultblock'])) { + $config['syslog']['nologbogons'] = true; + $config['syslog']['nologprivatenets'] = true; + } +} + +function upgrade_097_to_098() { + global $config, $g; + /* Disable kill_states by default */ + $config['system']['kill_states'] = true; +} + +function upgrade_098_to_099() { + global $config; + + if (empty($config['dhcpd']) || !is_array($config['dhcpd'])) + return; + + foreach ($config['dhcpd'] as & $dhcpifconf) { + if (isset($dhcpifconf['next-server'])) { + $dhcpifconf['nextserver'] = $dhcpifconf['next-server']; + unset($dhcpifconf['next-server']); + } + } +} + +function upgrade_099_to_100() { + require_once("/etc/inc/services.inc"); + install_cron_job("/usr/bin/nice -n20 newsyslog", false); +} + +function upgrade_100_to_101() { + global $config, $g; + + if (!is_array($config['voucher'])) + return; + + foreach ($config['voucher'] as $cpzone => $cp) { + if (!is_array($cp['roll'])) + continue; + foreach ($cp['roll'] as $ridx => $rcfg) { + if (!empty($rcfg['comment'])) + $config['voucher'][$cpzone]['roll'][$ridx]['descr'] = $rcfg['comment']; + } + } +} + +function upgrade_101_to_102() { + global $config, $g; + + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpzone => $cp) { + if (!is_array($cp['passthrumac'])) + continue; + + foreach ($cp['passthrumac'] as $idx => $passthrumac) + $config['captiveportal'][$cpzone]['passthrumac'][$idx]['action'] = 'pass'; + } + } + + /* Convert OpenVPN Compression option to the new style */ + // Nothing to do if there is no OpenVPN tag + if (isset($config['openvpn']) && is_array($config['openvpn'])) { + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as &$vpn) { + if (!empty($vpn['compression'])) + $vpn['compression'] = "adaptive"; + } + } + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as &$vpn) { + if (!empty($vpn['compression'])) + $vpn['compression'] = "adaptive"; + } + } + } +} + +function upgrade_102_to_103() { + global $config; + + if (isset($config['nat']['advancedoutbound']['enable'])) { + $config['nat']['advancedoutbound']['mode'] = "advanced"; + unset($config['nat']['advancedoutbound']['enable']); + } else + $config['nat']['advancedoutbound']['mode'] = "automatic"; + + $config['nat']['outbound'] = $config['nat']['advancedoutbound']; + + unset($config['nat']['ipsecpassthru']); + unset($config['nat']['advancedoutbound']); +} + +function upgrade_103_to_104() { + global $config; + + $changed_privs = array( + "page-diag-system-activity" => "page-diagnostics-system-activity", + "page-interfacess-groups" => "page-interfaces-groups", + "page-interfacess-lagg" => "page-interfaces-lagg", + "page-interfacess-qinq" => "page-interfaces-qinq" + ); + + /* update user privileges */ + foreach ($config['system']['user'] as & $user) { + if (!is_array($user['priv'])) + continue; + foreach ($user['priv'] as & $priv) { + if (array_key_exists($priv, $changed_privs)) + $priv = $changed_privs[$priv]; + } + } + + /* update group privileges */ + foreach ($config['system']['group'] as & $group) { + if (!is_array($group['priv'])) + continue; + foreach ($group['priv'] as & $priv) { + if (array_key_exists($priv, $changed_privs)) + $priv = $changed_privs[$priv]; + } + } + + /* sync all local account information */ + local_sync_accounts(); +} + +function upgrade_104_to_105() { + global $config; + + if (is_array($config['captiveportal'])) { + $zoneid = 2; + foreach ($config['captiveportal'] as $cpzone => $cpcfg) { + if (empty($cpfg['zoneid'])) { + $config['captiveportal'][$cpzone]['zoneid'] = $zoneid; + $zoneid += 2; + } else if ($cpcfg['zoneid'] > 4000) { + $config['captiveportal'][$cpzone]['zoneid'] = $zoneid; + $zoneid += 2; + } + } + } +} + +function upgrade_105_to_106() { + global $config; + + if (is_array($config['virtualip']) && is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vipidx => $vip) { + if ($vip['mode'] == "ipalias" && strstr($vip['interface'], "_vip")) { + /* Convert to a carp with same properties as its carp version */ + $converted = false; + foreach ($config['virtualip']['vip'] as $bvip) { + if ($bvip['mode'] == "carp" && "{$bvip['interface']}_vip{$bvip['vhid']}" == $vip['interface']) { + $ipaaddr = $vip['subnet']; + $ipamask = $vip['subnet_bits']; + $config['virtualip']['vip'][$vipidx] = $bvip; + $config['virtualip']['vip'][$vipidx]['subnet'] = $ipaaddr; + $config['virtualip']['vip'][$vipidx]['subnet_bits'] = $ipamask; + $converted = true; + break; + } + } + if ($converted === false) + log_error("WARNING: IPalias {$vip['subnet']}/{$vip['subnet_bits']} was not completed successfully. Upgrading it yourself is the only remaining option!"); + } + } + unset($vip, $bvip, $vipidx); + } +} + +function upgrade_106_to_107() { + global $config; + + if (is_array($config['filter']) && is_array($config['filter']['rule'])) { + $tracker = (int)microtime(true); + foreach ($config['filter']['rule'] as $ridx => $rule) { + if (empty($rule['tracker'])) { + $config['filter']['rule'][$ridx]['tracker'] = $tracker; + $tracker++; + } + } + unset($tracker, $ridx); + } + if (is_array($config['nat']) && is_array($config['nat']['rule'])) { + $tracker = (int)microtime(true); + foreach ($config['nat']['rule'] as $ridx => $rule) { + if (empty($rule['tracker'])) { + $config['nat']['rule'][$ridx]['tracker'] = $tracker; + $tracker++; + } + + } + unset($tracker, $ridx); + } +} + +function upgrade_107_to_108() { + global $config; + + if (isset($config['system']['webgui']['noautocomplete'])) + unset($config['system']['webgui']['noautocomplete']); + else + $config['system']['webgui']['loginautocomplete'] = true; +} + +function upgrade_108_to_109() { + global $config; + + if (!isset($config['filter']['rule']) || !is_array($config['filter']['rule'])) + return; + + foreach ($config['filter']['rule'] as &$rule) { + if (!isset($rule['dscp']) || empty($rule['dscp'])) + continue; + + $pos = strpos($rule['dscp'], ' '); + if ($pos !== false) + $rule['dscp'] = substr($rule['dscp'], 0, $pos); + unset($pos); + } +} + +function upgrade_109_to_110() { + global $config; + + if (!is_array($config['ipsec']) || !is_array($config['ipsec']['phase2'])) + return; + + foreach ($config['ipsec']['phase2'] as &$rule) { + if (!empty($rule['uniqid'])) + continue; + + $rule['uniqid'] = uniqid(); + } +} + +function upgrade_110_to_111() { + global $config; + + /* Make sure unbound user exist */ + mwexec('/usr/sbin/pw groupadd -n unbound -g 59', true); + mwexec('/usr/sbin/pw useradd -n unbound -c "Unbound DNS Resolver" -d /var/unbound -s /usr/sbin/nologin -u 59 -g 59', true); + + /* cleanup old unbound package stuffs */ + unlink_if_exists("/usr/local/pkg/unbound.xml"); + unlink_if_exists("/usr/local/pkg/unbound.inc"); + unlink_if_exists("/usr/local/pkg/unbound_advanced.xml"); + unlink_if_exists("/usr/local/www/unbound_status.php"); + unlink_if_exists("/usr/local/www/unbound_acls.php"); + unlink_if_exists("/usr/local/bin/unbound_monitor.sh"); + unlink_if_exists("/usr/local/etc/rc.d/unbound.sh"); + + /* Remove old menu and service entries */ + if (isset($config['installedpackages']['menu']) && is_array($config['installedpackages']['menu'])) { + foreach ($config['installedpackages']['menu'] as $idx => $menu) { + if ($menu['name'] != 'Unbound DNS') + continue; + + unset($config['installedpackages']['menu'][$idx]); + break; + } + } + + if (isset($config['installedpackages']['service']) && is_array($config['installedpackages']['service'])) { + foreach ($config['installedpackages']['service'] as $idx => $service) { + if ($service['name'] != 'unbound') + continue; + unset($config['installedpackages']['service'][$idx]); + break; + } + } + + if (!isset($config['installedpackages']['unbound']['config'][0])) + return; + + $pkg = $config['installedpackages']['unbound']['config'][0]; + + if (isset($config['installedpackages']['unboundadvanced']['config'][0])) + $pkg = array_merge($pkg, $config['installedpackages']['unboundadvanced']['config'][0]); + + $new = array(); + + /* deal first with boolean fields */ + $fields = array( + "enable" => "enable", + "dnssec_status" => "dnssec", + "forwarding_mode" => "forwarding", + "regdhcp" => "regdhcp", + "regdhcpstatic" => "regdhcpstatic", + "txtsupport" => "txtsupport", + "hide_id" => "hideidentity", + "hide_version" => "hideversion", + "prefetch" => "prefetch", + "prefetch_key" => "prefetchkey", + "harden_glue" => "hardenglue", + "harden_dnssec_stripped" => "dnssec_stripped"); + + foreach ($fields as $oldk => $newk) { + if (isset($pkg[$oldk])) { + if ($pkg[$oldk] == 'on') + $new[$newk] = true; + unset($pkg[$oldk]); + } + } + + $fields = array( + "active_interface" => "network_interface", + "query_interface" => "outgoing_interface", + "unbound_verbosity" => "log_verbosity", + "unbound_verbosity" => "log_verbosity", + "msg_cache_size" => "msgcachesize", + "outgoing_num_tcp" => "outgoing_num_tcp", + "incoming_num_tcp" => "incoming_num_tcp", + "edns_buffer_size" => "edns_buffer_size", + "num_queries_per_thread" => "num_queries_per_thread", + "jostle_timeout" => "jostle_timeout", + "cache_max_ttl" => "cache_max_ttl", + "cache_min_ttl" => "cache_min_ttl", + "infra_host_ttl" => "infra_host_ttl", + "infra_cache_numhosts" => "infra_cache_numhosts", + "unwanted_reply_threshold" => "unwanted_reply_threshold", + "custom_options" => "custom_options"); + + foreach ($fields as $oldk => $newk) { + if (isset($pkg[$oldk])) { + $new[$newk] = $pkg[$oldk]; + unset($pkg[$oldk]); + } + } + + /* Following options were removed, bring them as custom_options */ + if (isset($pkg['stats']) && $pkg['stats'] == "on") { + if (isset($pkg['stats_interval'])) + $new['custom_options'] .= (empty($new['custom_options']) ? "" : ";") . "statistics-interval: {$pkg['stats_interval']}"; + if (isset($pkg['cumulative_stats'])) + $new['custom_options'] .= (empty($new['custom_options']) ? "" : ";") . "statistics-cumulative: {$pkg['cumulative_stats']}"; + if (isset($pkg['extended_stats']) && $pkg['extended_stats'] == "on") + $new['custom_options'] .= (empty($new['custom_options']) ? "" : ";") . "extended-statistics: yes"; + else + $new['custom_options'] .= (empty($new['custom_options']) ? "" : ";") . "extended-statistics: no"; + } + + $new['acls'] = array(); + if (isset($config['installedpackages']['unboundacls']['config']) && + is_array($config['installedpackages']['unboundacls']['config'])) { + foreach ($config['installedpackages']['unboundacls']['config'] as $acl) + $new['acls'][] = $acl; + } + + $config['unbound'] = $new; + + if(isset($config['installedpackages']['unbound'])) + unset($config['installedpackages']['unbound']); + if(isset($config['installedpackages']['unboundadvanced'])) + unset($config['installedpackages']['unboundadvanced']); + if(isset($config['installedpackages']['unboundacls'])) + unset($config['installedpackages']['unboundacls']); + + unset($pkg, $new); +} + +?> diff --git a/etc/inc/util.inc b/etc/inc/util.inc new file mode 100644 index 000000000..a924637ea --- /dev/null +++ b/etc/inc/util.inc @@ -0,0 +1,2034 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /bin/ps /bin/kill /usr/bin/killall /sbin/ifconfig /usr/bin/netstat + pfSense_BUILDER_BINARIES: /usr/bin/awk /sbin/dmesg /sbin/ping /usr/local/sbin/gzsig /usr/sbin/arp + pfSense_BUILDER_BINARIES: /sbin/conscontrol /sbin/devd /bin/ps + pfSense_MODULE: utils +*/ + +/* kill a process by pid file */ +function killbypid($pidfile) { + return sigkillbypid($pidfile, "TERM"); +} + +function isvalidpid($pidfile) { + $output = ""; + if (file_exists($pidfile)) { + exec("/bin/pgrep -nF {$pidfile}", $output, $retval); + return (intval($retval) == 0); + } + return false; +} + +function is_process_running($process) { + $output = ""; + exec("/bin/pgrep -anx " . escapeshellarg($process), $output, $retval); + + return (intval($retval) == 0); +} + +function isvalidproc($proc) { + return is_process_running($proc); +} + +/* sigkill a process by pid file */ +/* return 1 for success and 0 for a failure */ +function sigkillbypid($pidfile, $sig) { + if (file_exists($pidfile)) + return mwexec("/bin/pkill " . escapeshellarg("-{$sig}") . " -F {$pidfile}", true); + + return 0; +} + +/* kill a process by name */ +function sigkillbyname($procname, $sig) { + if(isvalidproc($procname)) + return mwexec("/usr/bin/killall " . escapeshellarg("-{$sig}") . " " . escapeshellarg($procname), true); +} + +/* kill a process by name */ +function killbyname($procname) { + if(isvalidproc($procname)) + mwexec("/usr/bin/killall " . escapeshellarg($procname)); +} + +function is_subsystem_dirty($subsystem = "") { + global $g; + + if ($subsystem == "") + return false; + + if (file_exists("{$g['varrun_path']}/{$subsystem}.dirty")) + return true; + + return false; +} + +function mark_subsystem_dirty($subsystem = "") { + global $g; + + if (!file_put_contents("{$g['varrun_path']}/{$subsystem}.dirty", "DIRTY")) + log_error(sprintf(gettext("WARNING: Could not mark subsystem: %s dirty"), $subsystem)); +} + +function clear_subsystem_dirty($subsystem = "") { + global $g; + + @unlink("{$g['varrun_path']}/{$subsystem}.dirty"); +} + +function config_lock() { + return; +} +function config_unlock() { + return; +} + +/* lock configuration file */ +function lock($lock, $op = LOCK_SH) { + global $g, $cfglckkeyconsumers; + if (!$lock) + die(gettext("WARNING: You must give a name as parameter to lock() function.")); + if (!file_exists("{$g['tmp_path']}/{$lock}.lock")) { + @touch("{$g['tmp_path']}/{$lock}.lock"); + @chmod("{$g['tmp_path']}/{$lock}.lock", 0666); + } + $cfglckkeyconsumers++; + if ($fp = fopen("{$g['tmp_path']}/{$lock}.lock", "w")) { + if (flock($fp, $op)) + return $fp; + else + fclose($fp); + } +} + +function try_lock($lock, $timeout = 5) { + global $g, $cfglckkeyconsumers; + if (!$lock) + die(gettext("WARNING: You must give a name as parameter to try_lock() function.")); + if (!file_exists("{$g['tmp_path']}/{$lock}.lock")) { + @touch("{$g['tmp_path']}/{$lock}.lock"); + @chmod("{$g['tmp_path']}/{$lock}.lock", 0666); + } + $cfglckkeyconsumers++; + if ($fp = fopen("{$g['tmp_path']}/{$lock}.lock", "w")) { + $trycounter = 0; + while(!flock($fp, LOCK_EX | LOCK_NB)) { + if ($trycounter >= $timeout) { + fclose($fp); + return NULL; + } + sleep(1); + $trycounter++; + } + + return $fp; + } + + return NULL; +} + +/* unlock configuration file */ +function unlock($cfglckkey = 0) { + global $g, $cfglckkeyconsumers; + flock($cfglckkey, LOCK_UN); + fclose($cfglckkey); + return; +} + +/* unlock forcefully configuration file */ +function unlock_force($lock) { + global $g; + + @unlink("{$g['tmp_path']}/{$lock}.lock"); +} + +function send_event($cmd) { + global $g; + + if(!isset($g['event_address'])) + $g['event_address'] = "unix:///var/run/check_reload_status"; + + $try = 0; + while ($try < 3) { + $fd = @fsockopen($g['event_address']); + if ($fd) { + fwrite($fd, $cmd); + $resp = fread($fd, 4096); + if ($resp != "OK\n") + log_error("send_event: sent {$cmd} got {$resp}"); + fclose($fd); + $try = 3; + } + $try++; + } +} + +function send_multiple_events($cmds) { + global $g; + + if(!isset($g['event_address'])) + $g['event_address'] = "unix:///var/run/check_reload_status"; + + if (!is_array($cmds)) + return; + + while ($try < 3) { + $fd = @fsockopen($g['event_address']); + if ($fd) { + foreach ($cmds as $cmd) { + fwrite($fd, $cmd); + $resp = fread($fd, 4096); + if ($resp != "OK\n") + log_error("send_event: sent {$cmd} got {$resp}"); + } + fclose($fd); + $try = 3; + } + $try++; + } +} + +function refcount_init($reference) { + $shmid = @shmop_open($reference, "c", 0644, 10); + @shmop_write($shmid, str_pad("0", 10, "\x0", STR_PAD_RIGHT), 0); + @shmop_close($shmid); +} + +function refcount_reference($reference) { + /* Take out a lock across the shared memory read, increment, write sequence to make it atomic. */ + $shm_lck = lock("shm{$reference}", LOCK_EX); + try { + /* NOTE: A warning is generated when shared memory does not exist */ + $shmid = @shmop_open($reference, "w", 0, 0); + if (!$shmid) { + refcount_init($reference); + $shmid = @shmop_open($reference, "w", 0, 0); + if (!$shmid) { + log_error(gettext("Could not open shared memory {$reference}")); + unlock($shm_lck); + return; + } + } + $shm_data = @shmop_read($shmid, 0, 10); + $shm_data = intval($shm_data) + 1; + @shmop_write($shmid, str_pad($shm_data, 10, "\x0", STR_PAD_RIGHT), 0); + @shmop_close($shmid); + unlock($shm_lck); + } catch (Exception $e) { + log_error($e->getMessage()); + unlock($shm_lck); + } + + return $shm_data; +} + +function refcount_unreference($reference) { + /* Take out a lock across the shared memory read, decrement, write sequence to make it atomic. */ + $shm_lck = lock("shm{$reference}", LOCK_EX); + try { + $shmid = @shmop_open($reference, "w", 0, 0); + if (!$shmid) { + refcount_init($reference); + log_error(gettext("Could not open shared memory {$reference}")); + unlock($shm_lck); + return; + } + $shm_data = @shmop_read($shmid, 0, 10); + $shm_data = intval($shm_data) - 1; + if ($shm_data < 0) { + //debug_backtrace(); + log_error(sprintf(gettext("Reference %s is going negative, not doing unreference."), $reference)); + } else + @shmop_write($shmid, str_pad($shm_data, 10, "\x0", STR_PAD_RIGHT), 0); + @shmop_close($shmid); + unlock($shm_lck); + } catch (Exception $e) { + log_error($e->getMessage()); + unlock($shm_lck); + } + + return $shm_data; +} + +function refcount_read($reference) { + /* This function just reads the current value of the refcount for information. */ + /* There is no need for locking. */ + $shmid = @shmop_open($reference, "a", 0, 0); + if (!$shmid) { + log_error(gettext("Could not open shared memory for read {$reference}")); + return -1; + } + $shm_data = @shmop_read($shmid, 0, 10); + @shmop_close($shmid); + return $shm_data; +} + +function is_module_loaded($module_name) { + $module_name = str_replace(".ko", "", $module_name); + $running = 0; + $_gb = exec("/sbin/kldstat -qn {$module_name} 2>&1", $_gb, $running); + if (intval($running) == 0) + return true; + else + return false; +} + +/* validate non-negative numeric string, or equivalent numeric variable */ +function is_numericint($arg) { + return (((is_int($arg) && $arg >= 0) || (is_string($arg) && strlen($arg) > 0 && ctype_digit($arg))) ? true : false); +} + +/* return the subnet address given a host address and a subnet bit count */ +function gen_subnet($ipaddr, $bits) { + if (!is_ipaddr($ipaddr) || !is_numeric($bits)) + return ""; + return long2ip(ip2long($ipaddr) & gen_subnet_mask_long($bits)); +} + +/* return the subnet address given a host address and a subnet bit count */ +function gen_subnetv6($ipaddr, $bits) { + if (!is_ipaddrv6($ipaddr) || !is_numeric($bits)) + return ""; + + $address = Net_IPv6::getNetmask($ipaddr, $bits); + $address = Net_IPv6::compress($address); + return $address; +} + +/* return the highest (broadcast) address in the subnet given a host address and a subnet bit count */ +function gen_subnet_max($ipaddr, $bits) { + if (!is_ipaddr($ipaddr) || !is_numeric($bits)) + return ""; + + return long2ip32(ip2long($ipaddr) | ~gen_subnet_mask_long($bits)); +} + +/* Generate end number for a given ipv6 subnet mask */ +function gen_subnetv6_max($ipaddr, $bits) { + if(!is_ipaddrv6($ipaddr)) + return false; + + $mask = Net_IPv6::getNetmask('FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF',$bits); + + $inet_ip = (binary)inet_pton($ipaddr); + $inet_mask = (binary)inet_pton($mask); + + $inet_end = $inet_ip | ~$inet_mask; + + return (inet_ntop($inet_end)); +} + +/* returns a subnet mask (long given a bit count) */ +function gen_subnet_mask_long($bits) { + $sm = 0; + for ($i = 0; $i < $bits; $i++) { + $sm >>= 1; + $sm |= 0x80000000; + } + return $sm; +} + +/* same as above but returns a string */ +function gen_subnet_mask($bits) { + return long2ip(gen_subnet_mask_long($bits)); +} + +/* Convert long int to IP address, truncating to 32-bits. */ +function long2ip32($ip) { + return long2ip($ip & 0xFFFFFFFF); +} + +/* Convert IP address to long int, truncated to 32-bits to avoid sign extension on 64-bit platforms. */ +function ip2long32($ip) { + return ( ip2long($ip) & 0xFFFFFFFF ); +} + +/* Convert IP address to unsigned long int. */ +function ip2ulong($ip) { + return sprintf("%u", ip2long32($ip)); +} + +/* Find out how many IPs are contained within a given IP range + * e.g. 192.168.0.0 to 192.168.0.255 returns 256 + */ +function ip_range_size($startip, $endip) { + if (is_ipaddr($startip) && is_ipaddr($endip)) { + // Operate as unsigned long because otherwise it wouldn't work + // when crossing over from 127.255.255.255 / 128.0.0.0 barrier + return abs(ip2ulong($startip) - ip2ulong($endip)) + 1; + } + return -1; +} + +/* Find the smallest possible subnet mask which can contain a given number of IPs + * e.g. 512 IPs can fit in a /23, but 513 IPs need a /22 + */ +function find_smallest_cidr($number) { + $smallest = 1; + for ($b=32; $b > 0; $b--) { + $smallest = ($number <= pow(2,$b)) ? $b : $smallest; + } + return (32-$smallest); +} + +/* Return the previous IP address before the given address */ +function ip_before($ip) { + return long2ip32(ip2long($ip)-1); +} + +/* Return the next IP address after the given address */ +function ip_after($ip) { + return long2ip32(ip2long($ip)+1); +} + +/* Return true if the first IP is 'before' the second */ +function ip_less_than($ip1, $ip2) { + // Compare as unsigned long because otherwise it wouldn't work when + // crossing over from 127.255.255.255 / 128.0.0.0 barrier + return ip2ulong($ip1) < ip2ulong($ip2); +} + +/* Return true if the first IP is 'after' the second */ +function ip_greater_than($ip1, $ip2) { + // Compare as unsigned long because otherwise it wouldn't work + // when crossing over from 127.255.255.255 / 128.0.0.0 barrier + return ip2ulong($ip1) > ip2ulong($ip2); +} + +/* Convert a range of IPs to an array of subnets which can contain the range. */ +function ip_range_to_subnet_array($startip, $endip) { + if (!is_ipaddr($startip) || !is_ipaddr($endip)) { + return array(); + } + + // Container for subnets within this range. + $rangesubnets = array(); + + // Figure out what the smallest subnet is that holds the number of IPs in the given range. + $cidr = find_smallest_cidr(ip_range_size($startip, $endip)); + + // Loop here to reduce subnet size and retest as needed. We need to make sure + // that the target subnet is wholly contained between $startip and $endip. + for ($cidr; $cidr <= 32; $cidr++) { + // Find the network and broadcast addresses for the subnet being tested. + $targetsub_min = gen_subnet($startip, $cidr); + $targetsub_max = gen_subnet_max($startip, $cidr); + + // Check best case where the range is exactly one subnet. + if (($targetsub_min == $startip) && ($targetsub_max == $endip)) { + // Hooray, the range is exactly this subnet! + return array("{$startip}/{$cidr}"); + } + + // These remaining scenarios will find a subnet that uses the largest + // chunk possible of the range being tested, and leave the rest to be + // tested recursively after the loop. + + // Check if the subnet begins with $startip and ends before $endip + if (($targetsub_min == $startip) && ip_less_than($targetsub_max, $endip)) { + break; + } + + // Check if the subnet ends at $endip and starts after $startip + if (ip_greater_than($targetsub_min, $startip) && ($targetsub_max == $endip)) { + break; + } + + // Check if the subnet is between $startip and $endip + if (ip_greater_than($targetsub_min, $startip) && ip_less_than($targetsub_max, $endip)) { + break; + } + } + + // Some logic that will recursivly search from $startip to the first IP before the start of the subnet we just found. + // NOTE: This may never be hit, the way the above algo turned out, but is left for completeness. + if ($startip != $targetsub_min) { + $rangesubnets = array_merge($rangesubnets, ip_range_to_subnet_array($startip, ip_before($targetsub_min))); + } + + // Add in the subnet we found before, to preserve ordering + $rangesubnets[] = "{$targetsub_min}/{$cidr}"; + + // And some more logic that will search after the subnet we found to fill in to the end of the range. + if ($endip != $targetsub_max) { + $rangesubnets = array_merge($rangesubnets, ip_range_to_subnet_array(ip_after($targetsub_max), $endip)); + } + return $rangesubnets; +} + +function is_iprange($range) { + if (substr_count($range, '-') != 1) { + return false; + } + list($ip1, $ip2) = explode ('-', $range); + return (is_ipaddr($ip1) && is_ipaddr($ip2)); +} + +/* returns true if $ipaddr is a valid dotted IPv4 address or a IPv6 */ +function is_ipaddr($ipaddr) { + if(is_ipaddrv4($ipaddr)) { + return true; + } + if(is_ipaddrv6($ipaddr)) { + return true; + } + return false; +} + +/* returns true if $ipaddr is a valid IPv6 address */ +function is_ipaddrv6($ipaddr) { + if (!is_string($ipaddr) || empty($ipaddr)) + return false; + if (strstr($ipaddr, "%") && is_linklocal($ipaddr)) { + $tmpip = explode("%", $ipaddr); + $ipaddr = $tmpip[0]; + } + return Net_IPv6::checkIPv6($ipaddr); +} + +/* returns true if $ipaddr is a valid dotted IPv4 address */ +function is_ipaddrv4($ipaddr) { + if (!is_string($ipaddr) || empty($ipaddr)) + return false; + + $ip_long = ip2long($ipaddr); + $ip_reverse = long2ip32($ip_long); + + if ($ipaddr == $ip_reverse) + return true; + else + return false; +} + +/* returns true if $ipaddr is a valid linklocal address */ +function is_linklocal($ipaddr) { + return (strtolower(substr($ipaddr, 0, 5)) == "fe80:"); +} + +/* returns scope of a linklocal address */ +function get_ll_scope($addr) { + if (!is_linklocal($addr) || !strstr($addr, "%")) + return ""; + list ($ll, $scope) = explode("%", $addr); + return $scope; +} + +/* returns true if $ipaddr is a valid literal IPv6 address */ +function is_literalipaddrv6($ipaddr) { + if(preg_match("/\[([0-9a-f:]+)\]/i", $ipaddr, $match)) + $ipaddr = $match[1]; + else + return false; + + return is_ipaddrv6($ipaddr); +} + +function is_ipaddrwithport($ipport) { + $parts = explode(":", $ipport); + $port = array_pop($parts); + if (count($parts) == 1) { + return is_ipaddrv4($parts[0]) && is_port($port); + } elseif (count($parts) > 1) { + return is_literalipaddrv6(implode(":", $parts)) && is_port($port); + } else { + return false; + } +} + +function is_hostnamewithport($hostport) { + $parts = explode(":", $hostport); + $port = array_pop($parts); + if (count($parts) == 1) { + return is_hostname($parts[0]) && is_port($port); + } else { + return false; + } +} + +/* returns true if $ipaddr is a valid dotted IPv4 address or an alias thereof */ +function is_ipaddroralias($ipaddr) { + global $config; + + if (is_alias($ipaddr)) { + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if ($alias['name'] == $ipaddr && !preg_match("/port/i", $alias['type'])) + return true; + } + } + return false; + } else + return is_ipaddr($ipaddr); + +} + +/* returns true if $subnet is a valid IPv4 or IPv6 subnet in CIDR format + false - if not a valid subnet + true (numeric 4 or 6) - if valid, gives type of subnet */ +function is_subnet($subnet) { + if (is_string($subnet) && preg_match('/^(?:([0-9.]{7,15})|([0-9a-f:]{2,39}))\/(\d{1,3})$/i', $subnet, $parts)) { + if (is_ipaddrv4($parts[1]) && $parts[3] <= 32) + return 4; + if (is_ipaddrv6($parts[2]) && $parts[3] <= 128) + return 6; + } + return false; +} + +/* same as is_subnet() but accepts IPv4 only */ +function is_subnetv4($subnet) { + return (is_subnet($subnet) == 4); +} + +/* same as is_subnet() but accepts IPv6 only */ +function is_subnetv6($subnet) { + return (is_subnet($subnet) == 6); +} + +/* returns true if $subnet is a valid subnet in CIDR format or an alias thereof */ +function is_subnetoralias($subnet) { + global $aliastable; + + if (isset($aliastable[$subnet]) && is_subnet($aliastable[$subnet])) + return true; + else + return is_subnet($subnet); +} + +/* returns true if $hostname is a valid hostname */ +function is_hostname($hostname) { + if (!is_string($hostname)) + return false; + + if (preg_match('/^(?:(?:[a-z0-9_]|[a-z0-9_][a-z0-9_\-]*[a-z0-9_])\.)*(?:[a-z0-9_]|[a-z0-9_][a-z0-9_\-]*[a-z0-9_])$/i', $hostname)) + return true; + else + return false; +} + +/* returns true if $domain is a valid domain name */ +function is_domain($domain) { + if (!is_string($domain)) + return false; + + if (preg_match('/^(?:(?:[a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*(?:[a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])$/i', $domain)) + return true; + else + return false; +} + +/* returns true if $macaddr is a valid MAC address */ +function is_macaddr($macaddr, $partial=false) { + $repeat = ($partial) ? '1,5' : '5'; + return preg_match('/^[0-9A-F]{2}(?:[:][0-9A-F]{2}){'.$repeat.'}$/i', $macaddr) == 1 ? true : false; +} + +/* returns true if $name is a valid name for an alias + returns NULL if a reserved word is used + returns FALSE for bad chars in the name - this allows calling code to determine what the problem was. + aliases cannot be: + bad chars: anything except a-z 0-9 and underscore + bad names: empty string, pure numeric, pure underscore + reserved words: pre-defined service/protocol/port names which should not be ambiguous, and the words "port" and "pass" */ + +function is_validaliasname($name) { + /* Array of reserved words */ + $reserved = array("port", "pass"); + + if (!is_string($name) || strlen($name) >= 32 || preg_match('/(^_*$|^\d*$|[^a-z0-9_])/i', $name)) + return false; + if (in_array($name, $reserved, true) || getservbyname($name, "tcp") || getservbyname($name, "udp") || getprotobyname($name)) + return; /* return NULL */ + return true; +} + +/* returns true if $port is a valid TCP/UDP port */ +function is_port($port) { + if (getservbyname($port, "tcp") || getservbyname($port, "udp")) + return true; + if (!ctype_digit($port)) + return false; + else if ((intval($port) < 1) || (intval($port) > 65535)) + return false; + return true; +} + +/* returns true if $portrange is a valid TCP/UDP portrange (":") */ +function is_portrange($portrange) { + $ports = explode(":", $portrange); + + return (count($ports) == 2 && is_port($ports[0]) && is_port($ports[1])); +} + +/* returns true if $port is a valid port number or an alias thereof */ +function is_portoralias($port) { + global $config; + + if (is_alias($port)) { + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if ($alias['name'] == $port && preg_match("/port/i", $alias['type'])) + return true; + } + } + return false; + } else + return is_port($port); +} + +/* create ranges of sequential port numbers (200:215) and remove duplicates */ +function group_ports($ports) { + if (!is_array($ports) || empty($ports)) + return; + + $uniq = array(); + foreach ($ports as $port) { + if (is_portrange($port)) { + list($begin, $end) = explode(":", $port); + if ($begin > $end) { + $aux = $begin; + $begin = $end; + $end = $aux; + } + for ($i = $begin; $i <= $end; $i++) + if (!in_array($i, $uniq)) + $uniq[] = $i; + } else if (is_port($port)) { + if (!in_array($port, $uniq)) + $uniq[] = $port; + } + } + sort($uniq, SORT_NUMERIC); + + $result = array(); + foreach ($uniq as $idx => $port) { + if ($idx == 0) { + $result[] = $port; + continue; + } + + $last = end($result); + if (is_portrange($last)) + list($begin, $end) = explode(":", $last); + else + $begin = $end = $last; + + if ($port == ($end+1)) { + $end++; + $result[count($result)-1] = "{$begin}:{$end}"; + } else { + $result[] = $port; + } + } + + return $result; +} + +/* returns true if $val is a valid shaper bandwidth value */ +function is_valid_shaperbw($val) { + return (preg_match("/^(\d+(?:\.\d+)?)([MKG]?b|%)$/", $val)); +} + +/* returns true if $test is in the range between $start and $end */ +function is_inrange_v4($test, $start, $end) { + if ( (ip2ulong($test) <= ip2ulong($end)) && (ip2ulong($test) >= ip2ulong($start)) ) + return true; + else + return false; +} + +/* returns true if $test is in the range between $start and $end */ +function is_inrange_v6($test, $start, $end) { + if ( (inet_pton($test) <= inet_pton($end)) && (inet_pton($test) >= inet_pton($start)) ) + return true; + else + return false; +} + +/* returns true if $test is in the range between $start and $end */ +function is_inrange($test, $start, $end) { + return is_ipaddrv6($test) ? is_inrange_v6($test, $start, $end) : is_inrange_v4($test, $start, $end); +} + +/* XXX: return the configured carp interface list */ +function get_configured_carp_interface_list($carpinterface = "", $family = "inet") { + global $config; + + $iflist = array(); + + if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + switch ($vip['mode']) { + case "carp": + if (!empty($carpinterface)) { + if ($carpinterface == "{$vip['interface']}_vip{$vip['vhid']}") { + if ($family == "inet" && is_ipaddrv4($vip['subnet'])) + return $vip['subnet']; + else if ($family == "inet6" && is_ipaddrv6($vip['subnet'])) + return $vip['subnet']; + } + } else { + $iflist["{$vip['interface']}_vip{$vip['vhid']}"] = $vip['subnet']; + } + break; + } + } + } + + return $iflist; +} + +/* return the configured IP aliases list */ +function get_configured_ip_aliases_list($returnfullentry = false) { + global $config; + + $alias_list=array(); + + if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + if ($vip['mode']=="ipalias") { + if ($returnfullentry) + $alias_list[$vip['subnet']] = $vip; + else + $alias_list[$vip['subnet']] = $vip['interface']; + } + } + } + + return $alias_list; +} + +/* return all configured aliases list (IP, carp, proxyarp and other) */ +function get_configured_vips_list() { + global $config; + + $alias_list=array(); + + if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + if ($vip['mode'] == "carp") + $alias_list[] = array("ipaddr" => $vip['subnet'], "if" => "{$vip['interface']}_vip{$vip['vhid']}"); + else + $alias_list[] = array("ipaddr" => $vip['subnet'], "if" => $vip['interface']); + } + } + + return $alias_list; +} + +/* comparison function for sorting by the order in which interfaces are normally created */ +function compare_interface_friendly_names($a, $b) { + if ($a == $b) + return 0; + else if ($a == 'wan') + return -1; + else if ($b == 'wan') + return 1; + else if ($a == 'lan') + return -1; + else if ($b == 'lan') + return 1; + + return strnatcmp($a, $b); +} + +/* return the configured interfaces list. */ +function get_configured_interface_list($only_opt = false, $withdisabled = false) { + global $config; + + $iflist = array(); + + /* if list */ + foreach($config['interfaces'] as $if => $ifdetail) { + if ($only_opt && ($if == "wan" || $if == "lan")) + continue; + if (isset($ifdetail['enable']) || $withdisabled == true) + $iflist[$if] = $if; + } + + return $iflist; +} + +/* return the configured interfaces list. */ +function get_configured_interface_list_by_realif($only_opt = false, $withdisabled = false) { + global $config; + + $iflist = array(); + + /* if list */ + foreach($config['interfaces'] as $if => $ifdetail) { + if ($only_opt && ($if == "wan" || $if == "lan")) + continue; + if (isset($ifdetail['enable']) || $withdisabled == true) { + $tmpif = get_real_interface($if); + if (!empty($tmpif)) + $iflist[$tmpif] = $if; + } + } + + return $iflist; +} + +/* return the configured interfaces list with their description. */ +function get_configured_interface_with_descr($only_opt = false, $withdisabled = false) { + global $config; + + $iflist = array(); + + /* if list */ + foreach($config['interfaces'] as $if => $ifdetail) { + if ($only_opt && ($if == "wan" || $if == "lan")) + continue; + if (isset($ifdetail['enable']) || $withdisabled == true) { + if(empty($ifdetail['descr'])) + $iflist[$if] = strtoupper($if); + else + $iflist[$if] = strtoupper($ifdetail['descr']); + } + } + + return $iflist; +} + +/* + * get_configured_ip_addresses() - Return a list of all configured + * interfaces IP Addresses + * + */ +function get_configured_ip_addresses() { + global $config; + + if (!function_exists('get_interface_ip')) + require_once("interfaces.inc"); + $ip_array = array(); + $interfaces = get_configured_interface_list(); + if (is_array($interfaces)) { + foreach($interfaces as $int) { + $ipaddr = get_interface_ip($int); + $ip_array[$int] = $ipaddr; + } + } + $interfaces = get_configured_carp_interface_list(); + if (is_array($interfaces)) + foreach($interfaces as $int => $ipaddr) + $ip_array[$int] = $ipaddr; + + /* pppoe server */ + if (is_array($config['pppoes']) && is_array($config['pppoes']['pppoe'])) { + foreach($config['pppoes']['pppoe'] as $pppoe) { + if ($pppoe['mode'] == "server") { + if(is_ipaddr($pppoe['localip'])) { + $int = "pppoes". $pppoe['pppoeid']; + $ip_array[$int] = $pppoe['localip']; + } + } + } + } + + return $ip_array; +} + +/* + * get_configured_ipv6_addresses() - Return a list of all configured + * interfaces IPv6 Addresses + * + */ +function get_configured_ipv6_addresses() { + require_once("interfaces.inc"); + $ipv6_array = array(); + $interfaces = get_configured_interface_list(); + if(is_array($interfaces)) { + foreach($interfaces as $int) { + $ipaddrv6 = get_interface_ipv6($int); + $ipv6_array[$int] = $ipaddrv6; + } + } + $interfaces = get_configured_carp_interface_list(); + if(is_array($interfaces)) + foreach($interfaces as $int => $ipaddrv6) + $ipv6_array[$int] = $ipaddrv6; + return $ipv6_array; +} + +/* + * get_interface_list() - Return a list of all physical interfaces + * along with MAC and status. + * + * $mode = "active" - use ifconfig -lu + * "media" - use ifconfig to check physical connection + * status (much slower) + */ +function get_interface_list($mode = "active", $keyby = "physical", $vfaces = "") { + global $config; + $upints = array(); + /* get a list of virtual interface types */ + if(!$vfaces) { + $vfaces = array ( + 'bridge', + 'ppp', + 'pppoe', + 'pptp', + 'l2tp', + 'sl', + 'gif', + 'gre', + 'faith', + 'lo', + 'ng', + '_vlan', + '_wlan', + 'pflog', + 'plip', + 'pfsync', + 'enc', + 'tun', + 'carp', + 'lagg', + 'vip', + 'ipfw' + ); + } + switch($mode) { + case "active": + $upints = pfSense_interface_listget(IFF_UP); + break; + case "media": + $intlist = pfSense_interface_listget(); + $ifconfig = ""; + exec("/sbin/ifconfig -a", $ifconfig); + $regexp = '/(' . implode('|', $intlist) . '):\s/'; + $ifstatus = preg_grep('/status:/', $ifconfig); + foreach($ifstatus as $status) { + $int = array_shift($intlist); + if(stristr($status, "active")) $upints[] = $int; + } + break; + default: + $upints = pfSense_interface_listget(); + break; + } + /* build interface list with netstat */ + $linkinfo = ""; + exec("/usr/bin/netstat -inW -f link | awk '{ print $1, $4 }'", $linkinfo); + array_shift($linkinfo); + /* build ip address list with netstat */ + $ipinfo = ""; + exec("/usr/bin/netstat -inW -f inet | awk '{ print $1, $4 }'", $ipinfo); + array_shift($ipinfo); + foreach($linkinfo as $link) { + $friendly = ""; + $alink = explode(" ", $link); + $ifname = rtrim(trim($alink[0]), '*'); + /* trim out all numbers before checking for vfaces */ + if (!in_array(array_shift(preg_split('/\d/', $ifname)), $vfaces) && + !stristr($ifname, "_vlan") && !stristr($ifname, "_wlan")) { + $toput = array( + "mac" => trim($alink[1]), + "up" => in_array($ifname, $upints) + ); + foreach($ipinfo as $ip) { + $aip = explode(" ", $ip); + if($aip[0] == $ifname) { + $toput['ipaddr'] = $aip[1]; + } + } + if (is_array($config['interfaces'])) { + foreach($config['interfaces'] as $name => $int) + if($int['if'] == $ifname) $friendly = $name; + } + switch($keyby) { + case "physical": + if($friendly != "") { + $toput['friendly'] = $friendly; + } + $dmesg_arr = array(); + exec("/sbin/dmesg |grep $ifname | head -n1", $dmesg_arr); + preg_match_all("/<(.*?)>/i", $dmesg_arr[0], $dmesg); + $toput['dmesg'] = $dmesg[1][0]; + $iflist[$ifname] = $toput; + break; + case "ppp": + + case "friendly": + if($friendly != "") { + $toput['if'] = $ifname; + $iflist[$friendly] = $toput; + } + break; + } + } + } + return $iflist; +} + +/****f* util/log_error +* NAME +* log_error - Sends a string to syslog. +* INPUTS +* $error - string containing the syslog message. +* RESULT +* null +******/ +function log_error($error) { + global $g; + $page = $_SERVER['SCRIPT_NAME']; + if (empty($page)) { + $files = get_included_files(); + $page = basename($files[0]); + } + syslog(LOG_ERR, "$page: $error"); + if ($g['debug']) + syslog(LOG_WARNING, var_dump(debug_backtrace())); + return; +} + +/****f* util/log_auth +* NAME +* log_auth - Sends a string to syslog as LOG_AUTH facility +* INPUTS +* $error - string containing the syslog message. +* RESULT +* null +******/ +function log_auth($error) { + global $g; + $page = $_SERVER['SCRIPT_NAME']; + syslog(LOG_AUTH, "$page: $error"); + if ($g['debug']) + syslog(LOG_WARNING, var_dump(debug_backtrace())); + return; +} + +/****f* util/exec_command + * NAME + * exec_command - Execute a command and return a string of the result. + * INPUTS + * $command - String of the command to be executed. + * RESULT + * String containing the command's result. + * NOTES + * This function returns the command's stdout and stderr. + ******/ +function exec_command($command) { + $output = array(); + exec($command . ' 2>&1', $output); + return(implode("\n", $output)); +} + +/* wrapper for exec() */ +function mwexec($command, $mute = false, $clearsigmask = false) { + global $g; + + if ($g['debug']) { + if (!$_SERVER['REMOTE_ADDR']) + echo "mwexec(): $command\n"; + } + $oarr = array(); + $retval = 0; + + if ($clearsigmask) { + $oldset = array(); + pcntl_sigprocmask(SIG_SETMASK, array(), $oldset); + } + $garbage = exec("$command 2>&1", $oarr, $retval); + if ($clearsigmask) { + pcntl_sigprocmask(SIG_SETMASK, $oldset); + } + + if(isset($config['system']['developerspew'])) + $mute = false; + if(($retval <> 0) && ($mute === false)) { + $output = implode(" ", $oarr); + log_error(sprintf(gettext("The command '%1\$s' returned exit code '%2\$d', the output was '%3\$s' "), $command, $retval, $output)); + unset($output); + } + unset($oarr); + return $retval; +} + +/* wrapper for exec() in background */ +function mwexec_bg($command, $clearsigmask = false) { + global $g; + + if ($g['debug']) { + if (!$_SERVER['REMOTE_ADDR']) + echo "mwexec(): $command\n"; + } + + if ($clearsigmask) { + $oldset = array(); + pcntl_sigprocmask(SIG_SETMASK, array(), $oldset); + } + $_gb = exec("/usr/bin/nohup $command > /dev/null 2>&1 &"); + if ($clearsigmask) { + pcntl_sigprocmask(SIG_SETMASK, $oldset); + } + unset($_gb); +} + +/* unlink a file, if it exists */ +function unlink_if_exists($fn) { + $to_do = glob($fn); + if(is_array($to_do)) { + foreach($to_do as $filename) + @unlink($filename); + } else { + @unlink($fn); + } +} +/* make a global alias table (for faster lookups) */ +function alias_make_table($config) { + global $aliastable; + + $aliastable = array(); + + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if ($alias['name']) + $aliastable[$alias['name']] = $alias['address']; + } + } +} + +/* check if an alias exists */ +function is_alias($name) { + global $aliastable; + + return isset($aliastable[$name]); +} + +function alias_get_type($name) { + global $config; + + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if ($name == $alias['name']) + return $alias['type']; + } + } + + return ""; +} + +/* expand a host or network alias, if necessary */ +function alias_expand($name) { + global $aliastable; + + if (isset($aliastable[$name])) + return "\${$name}"; + else if (is_ipaddr($name) || is_subnet($name) || is_port($name) || is_portrange($name)) + return "{$name}"; + else + return null; +} + +function alias_expand_urltable($name) { + global $config; + $urltable_prefix = "/var/db/aliastables/"; + $urltable_filename = $urltable_prefix . $name . ".txt"; + + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if (preg_match("/urltable/i", $alias['type']) && ($alias['name'] == $name)) { + if (is_URL($alias["url"]) && file_exists($urltable_filename) && filesize($urltable_filename)) + return $urltable_filename; + else if (process_alias_urltable($name, $alias["url"], 0, true)) + return $urltable_filename; + } + } + } + return null; +} + +function subnet_size($subnet) { + if (is_subnetv4($subnet)) { + list ($ip, $bits) = explode("/", $subnet); + return round(exp(log(2) * (32 - $bits))); + } + else if (is_subnetv6($subnet)) { + list ($ip, $bits) = explode("/", $subnet); + return round(exp(log(2) * (128 - $bits))); + } + else { + return 0; + } +} + +function subnet_expand($subnet) { + if (is_subnetv4($subnet)) { + return subnetv4_expand($subnet); + } else if (is_subnetv6($subnet)) { + return subnetv6_expand($subnet); + } else { + return $subnet; + } +} + +function subnetv4_expand($subnet) { + $result = array(); + list ($ip, $bits) = explode("/", $subnet); + $net = ip2long($ip); + $mask = (0xffffffff << (32 - $bits)); + $net &= $mask; + $size = round(exp(log(2) * (32 - $bits))); + for ($i = 0; $i < $size; $i += 1) { + $result[] = long2ip($net | $i); + } + return $result; +} + +/* find out whether two subnets overlap */ +function check_subnets_overlap($subnet1, $bits1, $subnet2, $bits2) { + + if (!is_numeric($bits1)) + $bits1 = 32; + if (!is_numeric($bits2)) + $bits2 = 32; + + if ($bits1 < $bits2) + $relbits = $bits1; + else + $relbits = $bits2; + + $sn1 = gen_subnet_mask_long($relbits) & ip2long($subnet1); + $sn2 = gen_subnet_mask_long($relbits) & ip2long($subnet2); + + return ($sn1 == $sn2); +} + +/* find out whether two IPv6 subnets overlap */ +function check_subnetsv6_overlap($subnet1, $bits1, $subnet2, $bits2) { + $sub1_min = gen_subnetv6($subnet1, $bits1); + $sub1_max = gen_subnetv6_max($subnet1, $bits1); + $sub2_min = gen_subnetv6($subnet2, $bits2); + $sub2_max = gen_subnetv6_max($subnet2, $bits2); + + return (is_inrange_v6($sub1_min, $sub2_min, $sub2_max) || is_inrange_v6($sub1_max, $sub2_min, $sub2_max) || is_inrange_v6($sub2_min, $sub1_min, $sub1_max)); +} + +/* compare two IP addresses */ +function ipcmp($a, $b) { + if (ip_less_than($a, $b)) + return -1; + else if (ip_greater_than($a, $b)) + return 1; + else + return 0; +} + +/* return true if $addr is in $subnet, false if not */ +function ip_in_subnet($addr,$subnet) { + if(is_ipaddrv6($addr)) { + return (Net_IPv6::isInNetmask($addr, $subnet)); + } else { /* XXX: Maybe check for IPv4 */ + list($ip, $mask) = explode('/', $subnet); + $mask = (0xffffffff << (32 - $mask)) & 0xffffffff; + return ((ip2long($addr) & $mask) == (ip2long($ip) & $mask)); + } +} + +/* verify (and remove) the digital signature on a file - returns 0 if OK */ +function verify_digital_signature($fname) { + global $g; + + if(!file_exists("/usr/local/sbin/gzsig")) + return 4; + + return mwexec("/usr/local/sbin/gzsig verify {$g['etc_path']}/pubkey.pem < " . escapeshellarg($fname)); +} + +/* obtain MAC address given an IP address by looking at the ARP table */ +function arp_get_mac_by_ip($ip) { + mwexec("/sbin/ping -c 1 -t 1 " . escapeshellarg($ip), true); + $arpoutput = ""; + exec("/usr/sbin/arp -n " . escapeshellarg($ip), $arpoutput); + + if ($arpoutput[0]) { + $arpi = explode(" ", $arpoutput[0]); + $macaddr = $arpi[3]; + if (is_macaddr($macaddr)) + return $macaddr; + else + return false; + } + + return false; +} + +/* return a fieldname that is safe for xml usage */ +function xml_safe_fieldname($fieldname) { + $replace = array('/', '-', ' ', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', + '_', '+', '=', '{', '}', '[', ']', '|', '/', '<', '>', '?', + ':', ',', '.', '\'', '\\' + ); + return strtolower(str_replace($replace, "", $fieldname)); +} + +function mac_format($clientmac) { + global $config, $cpzone; + + $mac = explode(":", $clientmac); + $mac_format = $cpzone ? $config['captiveportal'][$cpzone]['radmac_format'] : false; + + switch($mac_format) { + case 'singledash': + return "$mac[0]$mac[1]$mac[2]-$mac[3]$mac[4]$mac[5]"; + + case 'ietf': + return "$mac[0]-$mac[1]-$mac[2]-$mac[3]-$mac[4]-$mac[5]"; + + case 'cisco': + return "$mac[0]$mac[1].$mac[2]$mac[3].$mac[4]$mac[5]"; + + case 'unformatted': + return "$mac[0]$mac[1]$mac[2]$mac[3]$mac[4]$mac[5]"; + + default: + return $clientmac; + } +} + +function resolve_retry($hostname, $retries = 5) { + + if (is_ipaddr($hostname)) + return $hostname; + + for ($i = 0; $i < $retries; $i++) { + // FIXME: gethostbyname does not work for AAAA hostnames, boo, hiss + $ip = gethostbyname($hostname); + + if ($ip && $ip != $hostname) { + /* success */ + return $ip; + } + + sleep(1); + } + + return false; +} + +function format_bytes($bytes) { + if ($bytes >= 1073741824) { + return sprintf("%.2f GB", $bytes/1073741824); + } else if ($bytes >= 1048576) { + return sprintf("%.2f MB", $bytes/1048576); + } else if ($bytes >= 1024) { + return sprintf("%.0f KB", $bytes/1024); + } else { + return sprintf("%d bytes", $bytes); + } +} + +function update_filter_reload_status($text) { + global $g; + + file_put_contents("{$g['varrun_path']}/filter_reload_status", $text); +} + +/****** util/return_dir_as_array + * NAME + * return_dir_as_array - Return a directory's contents as an array. + * INPUTS + * $dir - string containing the path to the desired directory. + * $filter_regex - string containing a regular expression to filter file names. Default empty. + * RESULT + * $dir_array - array containing the directory's contents. This array will be empty if the path specified is invalid. + ******/ +function return_dir_as_array($dir, $filter_regex = '') { + $dir_array = array(); + if (is_dir($dir)) { + if ($dh = opendir($dir)) { + while (($file = readdir($dh)) !== false) { + if (($file == ".") || ($file == "..")) + continue; + + if (empty($filter_regex) || preg_match($filter_regex, $file)) + array_push($dir_array, $file); + } + closedir($dh); + } + } + return $dir_array; +} + +function run_plugins($directory) { + global $config, $g; + + /* process packager manager custom rules */ + $files = return_dir_as_array($directory); + if (is_array($files)) { + foreach ($files as $file) { + if (stristr($file, ".sh") == true) + mwexec($directory . $file . " start"); + else if (!is_dir($directory . "/" . $file) && stristr($file,".inc")) + require_once($directory . "/" . $file); + } + } +} + +/* + * safe_mkdir($path, $mode = 0755) + * create directory if it doesn't already exist and isn't a file! + */ +function safe_mkdir($path, $mode=0755) { + global $g; + + if (!is_file($path) && !is_dir($path)) { + return @mkdir($path, $mode, true); + } else { + return false; + } +} + +/* + * make_dirs($path, $mode = 0755) + * create directory tree recursively (mkdir -p) + */ +function make_dirs($path, $mode = 0755) { + $base = ''; + foreach (explode('/', $path) as $dir) { + $base .= "/$dir"; + if (!is_dir($base)) { + if (!@mkdir($base, $mode)) + return false; + } + } + return true; +} + +/* + * get_sysctl($names) + * Get values of sysctl OID's listed in $names (accepts an array or a single + * name) and return an array of key/value pairs set for those that exist + */ +function get_sysctl($names) { + if (empty($names)) + return array(); + + if (is_array($names)) { + $name_list = array(); + foreach ($names as $name) { + $name_list[] = escapeshellarg($name); + } + } else + $name_list = array(escapeshellarg($names)); + + exec("/sbin/sysctl -i " . implode(" ", $name_list), $output); + $values = array(); + foreach ($output as $line) { + $line = explode(": ", $line, 2); + if (count($line) == 2) + $values[$line[0]] = $line[1]; + } + + return $values; +} + +/* + * get_single_sysctl($name) + * Wrapper for get_sysctl() to simplify read of a single sysctl value + * return the value for sysctl $name or empty string if it doesn't exist + */ +function get_single_sysctl($name) { + if (empty($name)) + return ""; + + $value = get_sysctl($name); + if (empty($value) || !isset($value[$name])) + return ""; + + return $value[$name]; +} + +/* + * set_sysctl($value_list) + * Set sysctl OID's listed as key/value pairs and return + * an array with keys set for those that succeeded + */ +function set_sysctl($values) { + if (empty($values)) + return array(); + + $value_list = array(); + foreach ($values as $key => $value) { + $value_list[] = escapeshellarg($key) . "=" . escapeshellarg($value); + } + + exec("/sbin/sysctl -i " . implode(" ", $value_list), $output, $success); + + /* Retry individually if failed (one or more read-only) */ + if ($success <> 0 && count($value_list) > 1) { + foreach ($value_list as $value) { + exec("/sbin/sysctl -i " . $value, $output); + } + } + + $ret = array(); + foreach ($output as $line) { + $line = explode(": ", $line, 2); + if (count($line) == 2) + $ret[$line[0]] = true; + } + + return $ret; +} + +/* + * set_single_sysctl($name, $value) + * Wrapper to set_sysctl() to make it simple to set only one sysctl + * returns boolean meaning if it suceed + */ +function set_single_sysctl($name, $value) { + if (empty($name)) + return false; + + $result = set_sysctl(array($name => $value)); + + if (!isset($result[$name]) || $result[$name] != $value) + return false; + + return true; +} + +/* + * get_memory() + * returns an array listing the amount of + * memory installed in the hardware + * [0] net memory available for the OS (FreeBSD) after some is taken by BIOS, video or whatever - e.g. 235 MBytes + * [1] real (actual) memory of the system, should be the size of the RAM card/s - e.g. 256 MBytes + */ +function get_memory() { + $physmem = get_single_sysctl("hw.physmem"); + $realmem = get_single_sysctl("hw.realmem"); + /* convert from bytes to megabytes */ + return array(($physmem/1048576),($realmem/1048576)); +} + +function mute_kernel_msgs() { + global $config; + // Do not mute serial console. The kernel gets very very cranky + // and will start dishing you cannot control tty errors. + switch (trim(file_get_contents("/etc/platform"))) { + case "nanobsd": + case "jail": + return; + } + if($config['system']['enableserial']) + return; + exec("/sbin/conscontrol mute on"); +} + +function unmute_kernel_msgs() { + global $config; + // Do not mute serial console. The kernel gets very very cranky + // and will start dishing you cannot control tty errors. + switch (trim(file_get_contents("/etc/platform"))) { + case "nanobsd": + case "jail": + return; + } + exec("/sbin/conscontrol mute off"); +} + +function start_devd() { + global $g; + + if ($g['platform'] == 'jail') + return; + exec("/sbin/devd"); + sleep(1); +} + +function is_interface_vlan_mismatch() { + global $config, $g; + + if (is_array($config['vlans']['vlan'])) { + foreach ($config['vlans']['vlan'] as $vlan) { + if (does_interface_exist($vlan['if']) == false) + return true; + } + } + + return false; +} + +function is_interface_mismatch() { + global $config, $g; + + $do_assign = false; + $i = 0; + $missing_interfaces = array(); + if (is_array($config['interfaces'])) { + foreach ($config['interfaces'] as $ifname => $ifcfg) { + if (preg_match("/^enc|^cua|^tun|^tap|^l2tp|^pptp|^ppp|^ovpn|^gif|^gre|^lagg|^bridge|vlan|_wlan/i", $ifcfg['if'])) { + // Do not check these interfaces. + $i++; + continue; + } + else if (does_interface_exist($ifcfg['if']) == false) { + $missing_interfaces[] = $ifcfg['if']; + $do_assign = true; + } else + $i++; + } + } + + if (file_exists("{$g['tmp_path']}/assign_complete")) + $do_assign = false; + + if (!empty($missing_interfaces) && $do_assign) + file_put_contents("{$g['tmp_path']}/missing_interfaces", implode(' ', $missing_interfaces)); + else + @unlink("{$g['tmp_path']}/missing_interfaces"); + + return $do_assign; +} + +/* sync carp entries to other firewalls */ +function carp_sync_client() { + global $g; + send_event("filter sync"); +} + +/****f* util/isAjax + * NAME + * isAjax - reports if the request is driven from prototype + * INPUTS + * none + * RESULT + * true/false + ******/ +function isAjax() { + return isset ($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'; +} + +/****f* util/timeout + * NAME + * timeout - console input with timeout countdown. Note: erases 2 char of screen for timer. Leave space. + * INPUTS + * optional, seconds to wait before timeout. Default 9 seconds. + * RESULT + * returns 1 char of user input or null if no input. + ******/ +function timeout($timer = 9) { + while(!isset($key)) { + if ($timer >= 9) { echo chr(8) . chr(8) . ($timer==9 ? chr(32) : null) . "{$timer}"; } + else { echo chr(8). "{$timer}"; } + `/bin/stty -icanon min 0 time 25`; + $key = trim(`KEY=\`dd count=1 2>/dev/null\`; echo \$KEY`); + `/bin/stty icanon`; + if ($key == '') + unset($key); + $timer--; + if ($timer == 0) + break; + } + return $key; +} + +/****f* util/msort + * NAME + * msort - sort array + * INPUTS + * $array to be sorted, field to sort by, direction of sort + * RESULT + * returns newly sorted array + ******/ +function msort($array, $id="id", $sort_ascending=true) { + $temp_array = array(); + while(count($array)>0) { + $lowest_id = 0; + $index=0; + foreach ($array as $item) { + if (isset($item[$id])) { + if ($array[$lowest_id][$id]) { + if (strtolower($item[$id]) < strtolower($array[$lowest_id][$id])) { + $lowest_id = $index; + } + } + } + $index++; + } + $temp_array[] = $array[$lowest_id]; + $array = array_merge(array_slice($array, 0,$lowest_id), array_slice($array, $lowest_id+1)); + } + if ($sort_ascending) { + return $temp_array; + } else { + return array_reverse($temp_array); + } +} + +/****f* util/is_URL + * NAME + * is_URL + * INPUTS + * string to check + * RESULT + * Returns true if item is a URL + ******/ +function is_URL($url) { + $match = preg_match("'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))'", $url); + if($match) + return true; + return false; +} + +function is_file_included($file = "") { + $files = get_included_files(); + if (in_array($file, $files)) + return true; + + return false; +} + +/* + * Replace a value on a deep associative array using regex + */ +function array_replace_values_recursive($data, $match, $replace) { + if (empty($data)) + return $data; + + if (is_string($data)) + $data = preg_replace("/{$match}/", $replace, $data); + else if (is_array($data)) + foreach ($data as $k => $v) + $data[$k] = array_replace_values_recursive($v, $match, $replace); + + return $data; +} + +/* + This function was borrowed from a comment on PHP.net at the following URL: + http://www.php.net/manual/en/function.array-merge-recursive.php#73843 + */ +function array_merge_recursive_unique($array0, $array1) { + + $arrays = func_get_args(); + $remains = $arrays; + + // We walk through each arrays and put value in the results (without + // considering previous value). + $result = array(); + + // loop available array + foreach($arrays as $array) { + + // The first remaining array is $array. We are processing it. So + // we remove it from remaing arrays. + array_shift($remains); + + // We don't care non array param, like array_merge since PHP 5.0. + if(is_array($array)) { + // Loop values + foreach($array as $key => $value) { + if(is_array($value)) { + // we gather all remaining arrays that have such key available + $args = array(); + foreach($remains as $remain) { + if(array_key_exists($key, $remain)) { + array_push($args, $remain[$key]); + } + } + + if(count($args) > 2) { + // put the recursion + $result[$key] = call_user_func_array(__FUNCTION__, $args); + } else { + foreach($value as $vkey => $vval) { + $result[$key][$vkey] = $vval; + } + } + } else { + // simply put the value + $result[$key] = $value; + } + } + } + } + return $result; +} + + +/* + * converts a string like "a,b,c,d" + * into an array like array("a" => "b", "c" => "d") + */ +function explode_assoc($delimiter, $string) { + $array = explode($delimiter, $string); + $result = array(); + $numkeys = floor(count($array) / 2); + for ($i = 0; $i < $numkeys; $i += 1) { + $result[$array[$i * 2]] = $array[$i * 2 + 1]; + } + return $result; +} + +function get_staticroutes($returnsubnetsonly = false, $returnhostnames = false) { + global $config, $aliastable; + + /* Bail if there are no routes, but return an array always so callers don't have to check. */ + if (!is_array($config['staticroutes']['route'])) + return array(); + + $allstaticroutes = array(); + $allsubnets = array(); + /* Loop through routes and expand aliases as we find them. */ + foreach ($config['staticroutes']['route'] as $route) { + if (is_alias($route['network'])) { + if (!isset($aliastable[$route['network']])) + continue; + + $subnets = preg_split('/\s+/', $aliastable[$route['network']]); + foreach ($subnets as $net) { + if (!is_subnet($net)) { + if (is_ipaddrv4($net)) + $net .= "/32"; + else if (is_ipaddrv6($net)) + $net .= "/128"; + else if ($returnhostnames === false || !is_fqdn($net)) + continue; + } + $temproute = $route; + $temproute['network'] = $net; + $allstaticroutes[] = $temproute; + $allsubnets[] = $net; + } + } elseif (is_subnet($route['network'])) { + $allstaticroutes[] = $route; + $allsubnets[] = $route['network']; + } + } + if ($returnsubnetsonly) + return $allsubnets; + else + return $allstaticroutes; +} + +/****f* util/get_alias_list + * NAME + * get_alias_list - Provide a list of aliases. + * INPUTS + * $type - Optional, can be a string or array specifying what type(s) of aliases you need. + * RESULT + * Array containing list of aliases. + * If $type is unspecified, all aliases are returned. + * If $type is a string, all aliases of the type specified in $type are returned. + * If $type is an array, all aliases of any type specified in any element of $type are returned. + */ +function get_alias_list($type = null) { + global $config; + $result = array(); + if ($config['aliases']['alias'] <> "" && is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if ($type === null) { + $result[] = $alias['name']; + } + else if (is_array($type)) { + if (in_array($alias['type'], $type)) { + $result[] = $alias['name']; + } + } + else if ($type === $alias['type']) { + $result[] = $alias['name']; + } + } + } + return $result; +} + +/* returns an array consisting of every element of $haystack that is not equal to $needle. */ +function array_exclude($needle, $haystack) { + $result = array(); + if (is_array($haystack)) { + foreach ($haystack as $thing) { + if ($needle !== $thing) { + $result[] = $thing; + } + } + } + return $result; +} + +function get_current_theme() { + global $config, $g; + /* + * if user has selected a custom template, use it. + * otherwise default to pfsense tempalte + */ + if (($g["disablethemeselection"] === true) && !empty($g["default_theme"]) && (is_dir($g["www_path"].'/themes/'.$g["default_theme"]))) + $theme = $g["default_theme"]; + elseif($config['theme'] <> "" && (is_dir($g["www_path"].'/themes/'.$config['theme']))) + $theme = $config['theme']; + else + $theme = "pfsense"; + /* + * If this device is an apple ipod/iphone + * switch the theme to one that works with it. + */ + $lowres_ua = array("iPhone", "iPod", "iPad", "Android", "BlackBerry", "Opera Mini", "Opera Mobi", "PlayBook", "IEMobile"); + foreach($lowres_ua as $useragent) + if(strstr($_SERVER['HTTP_USER_AGENT'], $useragent)) + $theme = (empty($g['theme_lowres']) && (is_dir($g["www_path"].'/themes/'.$g['theme_lowres']))) ? "pfsense" : $g['theme_lowres']; + return $theme; +} + +/* Define what is preferred, IPv4 or IPv6 */ +function prefer_ipv4_or_ipv6() { + global $config; + + if (isset($config['system']['prefer_ipv4'])) + mwexec("/etc/rc.d/ip6addrctl prefer_ipv4"); + else + mwexec("/etc/rc.d/ip6addrctl prefer_ipv6"); +} + +/* Redirect to page passing parameters via POST */ +function post_redirect($page, $params) { + if (!is_array($params)) + return; + + print "
    \n"; + foreach ($params as $key => $value) { + print "\n"; + } + print "
    \n"; + print "\n"; +} + +?> diff --git a/etc/inc/uuid.php b/etc/inc/uuid.php new file mode 100644 index 000000000..9eaf2fdf7 --- /dev/null +++ b/etc/inc/uuid.php @@ -0,0 +1,327 @@ + 0, /* 32-bit */ + 'time_mid' => 0, /* 16-bit */ + 'time_hi' => 0, /* 16-bit */ + 'clock_seq_hi' => 0, /* 8-bit */ + 'clock_seq_low' => 0, /* 8-bit */ + 'node' => array() /* 48-bit */ + ); + + static private $m_generate = array( + self::UUID_TIME => "generateTime", + self::UUID_RANDOM => "generateRandom", + self::UUID_NAME_MD5 => "generateNameMD5", + self::UUID_NAME_SHA1 => "generateNameSHA1" + ); + + static private $m_convert = array( + self::FMT_FIELD => array( + self::FMT_BYTE => "conv_field2byte", + self::FMT_STRING => "conv_field2string", + self::FMT_BINARY => "conv_field2binary" + ), + self::FMT_BYTE => array( + self::FMT_FIELD => "conv_byte2field", + self::FMT_STRING => "conv_byte2string", + self::FMT_BINARY => "conv_byte2binary" + ), + self::FMT_STRING => array( + self::FMT_BYTE => "conv_string2byte", + self::FMT_FIELD => "conv_string2field", + self::FMT_BINARY => "conv_string2binary" + ), + ); + + /* Swap byte order of a 32-bit number */ + static private function swap32($x) { + return (($x & 0x000000ff) << 24) | (($x & 0x0000ff00) << 8) | + (($x & 0x00ff0000) >> 8) | (($x & 0xff000000) >> 24); + } + + /* Swap byte order of a 16-bit number */ + static private function swap16($x) { + return (($x & 0x00ff) << 8) | (($x & 0xff00) >> 8); + } + + /* Auto-detect UUID format */ + static private function detectFormat($src) { + if (is_string($src)) + return self::FMT_STRING; + else if (is_array($src)) { + $len = count($src); + if ($len == 1 || ($len % 2) == 0) + return $len; + else + return (-1); + } + else + return self::FMT_BINARY; + } + + /* + * Public API, generate a UUID of 'type' in format 'fmt' for + * the given namespace 'ns' and node 'node' + */ + static public function generate($type, $fmt = self::FMT_BYTE, + $node = "", $ns = "") { + $func = self::$m_generate[$type]; + if (!isset($func)) + return null; + $conv = self::$m_convert[self::FMT_FIELD][$fmt]; + + $uuid = self::$func($ns, $node); + return self::$conv($uuid); + } + + /* + * Public API, convert a UUID from one format to another + */ + static public function convert($uuid, $from, $to) { + $conv = self::$m_convert[$from][$to]; + if (!isset($conv)) + return ($uuid); + + return (self::$conv($uuid)); + } + + /* + * Generate an UUID version 4 (pseudo random) + */ + static private function generateRandom($ns, $node) { + $uuid = self::$m_uuid_field; + + $uuid['time_hi'] = (4 << 12) | (mt_rand(0, 0x1000)); + $uuid['clock_seq_hi'] = (1 << 7) | mt_rand(0, 128); + $uuid['time_low'] = mt_rand(0, 0xffffffff); + $uuid['time_mid'] = mt_rand(0, 0x0000ffff); + $uuid['clock_seq_low'] = mt_rand(0, 255); + for ($i = 0; $i < 6; $i++) + $uuid['node'][$i] = mt_rand(0, 255); + return ($uuid); + } + + /* + * Generate UUID version 3 and 5 (name based) + */ + static private function generateName($ns, $node, $hash, $version) { + $ns_fmt = self::detectFormat($ns); + $field = self::convert($ns, $ns_fmt, self::FMT_FIELD); + + /* Swap byte order to keep it in big endian on all platforms */ + $field['time_low'] = self::swap32($field['time_low']); + $field['time_mid'] = self::swap16($field['time_mid']); + $field['time_hi'] = self::swap16($field['time_hi']); + + /* Convert the namespace to binary and concatenate node */ + $raw = self::convert($field, self::FMT_FIELD, self::FMT_BINARY); + $raw .= $node; + + /* Hash the namespace and node and convert to a byte array */ + $val = $hash($raw, true); + $tmp = unpack('C16', $val); + foreach (array_keys($tmp) as $key) + $byte[$key - 1] = $tmp[$key]; + + /* Convert byte array to a field array */ + $field = self::conv_byte2field($byte); + + $field['time_low'] = self::swap32($field['time_low']); + $field['time_mid'] = self::swap16($field['time_mid']); + $field['time_hi'] = self::swap16($field['time_hi']); + + /* Apply version and constants */ + $field['clock_seq_hi'] &= 0x3f; + $field['clock_seq_hi'] |= (1 << 7); + $field['time_hi'] &= 0x0fff; + $field['time_hi'] |= ($version << 12); + + return ($field); + } + static private function generateNameMD5($ns, $node) { + return self::generateName($ns, $node, "md5", + self::UUID_NAME_MD5); + } + static private function generateNameSHA1($ns, $node) { + return self::generateName($ns, $node, "sha1", + self::UUID_NAME_SHA1); + } + + /* + * Generate UUID version 1 (time based) + */ + static private function generateTime($ns, $node) { + $uuid = self::$m_uuid_field; + + /* + * Get current time in 100 ns intervals. The magic value + * is the offset between UNIX epoch and the UUID UTC + * time base October 15, 1582. + */ + $tp = gettimeofday(); + $time = ($tp['sec'] * 10000000) + ($tp['usec'] * 10) + + 0x01B21DD213814000; + + /* Work around PHP 32-bit bit-operation limits */ + $q = intval($time / 0xffffffff); + $low = $time - ($q * (0xffffffff + 1)); + $high = intval(($time - $low) / 0xffffffff); + + $uuid['time_low'] = $low; + $uuid['time_mid'] = $high & 0x0000ffff; + $uuid['time_hi'] = ($high & 0x0fff) | (self::UUID_TIME << 12); + + /* + * We don't support saved state information and generate + * a random clock sequence each time. + */ + $uuid['clock_seq_hi'] = (1 << 7) | mt_rand(0, 128); + $uuid['clock_seq_low'] = mt_rand(0, 255); + + /* + * Node should be set to the 48-bit IEEE node identifier, but + * we leave it for the user to supply the node. + */ + for ($i = 0; $i < 6; $i++) + $uuid['node'][$i] = ord(substr($node, $i, 1)); + + return ($uuid); + } + + /* Assumes correct byte order */ + static private function conv_field2byte($src) { + $uuid[0] = ($src['time_low'] & 0xff000000) >> 24; + $uuid[1] = ($src['time_low'] & 0x00ff0000) >> 16; + $uuid[2] = ($src['time_low'] & 0x0000ff00) >> 8; + $uuid[3] = ($src['time_low'] & 0x000000ff); + $uuid[4] = ($src['time_mid'] & 0xff00) >> 8; + $uuid[5] = ($src['time_mid'] & 0x00ff); + $uuid[6] = ($src['time_hi'] & 0xff00) >> 8; + $uuid[7] = ($src['time_hi'] & 0x00ff); + $uuid[8] = $src['clock_seq_hi']; + $uuid[9] = $src['clock_seq_low']; + + for ($i = 0; $i < 6; $i++) + $uuid[10+$i] = $src['node'][$i]; + + return ($uuid); + } + + static private function conv_field2string($src) { + $str = sprintf( + '%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x', + ($src['time_low']), ($src['time_mid']), ($src['time_hi']), + $src['clock_seq_hi'], $src['clock_seq_low'], + $src['node'][0], $src['node'][1], $src['node'][2], + $src['node'][3], $src['node'][4], $src['node'][5]); + return ($str); + } + + static private function conv_field2binary($src) { + $byte = self::conv_field2byte($src); + return self::conv_byte2binary($byte); + } + + static private function conv_byte2field($uuid) { + $field = self::$m_uuid_field; + $field['time_low'] = ($uuid[0] << 24) | ($uuid[1] << 16) | + ($uuid[2] << 8) | $uuid[3]; + $field['time_mid'] = ($uuid[4] << 8) | $uuid[5]; + $field['time_hi'] = ($uuid[6] << 8) | $uuid[7]; + $field['clock_seq_hi'] = $uuid[8]; + $field['clock_seq_low'] = $uuid[9]; + + for ($i = 0; $i < 6; $i++) + $field['node'][$i] = $uuid[10+$i]; + return ($field); + } + + static public function conv_byte2string($src) { + $field = self::conv_byte2field($src); + return self::conv_field2string($field); + } + + static private function conv_byte2binary($src) { + $raw = pack('C16', $src[0], $src[1], $src[2], $src[3], + $src[4], $src[5], $src[6], $src[7], $src[8], $src[9], + $src[10], $src[11], $src[12], $src[13], $src[14], $src[15]); + return ($raw); + } + + static private function conv_string2field($src) { + $parts = sscanf($src, '%x-%x-%x-%x-%02x%02x%02x%02x%02x%02x'); + $field = self::$m_uuid_field; + $field['time_low'] = ($parts[0]); + $field['time_mid'] = ($parts[1]); + $field['time_hi'] = ($parts[2]); + $field['clock_seq_hi'] = ($parts[3] & 0xff00) >> 8; + $field['clock_seq_low'] = $parts[3] & 0x00ff; + for ($i = 0; $i < 6; $i++) + $field['node'][$i] = $parts[4+$i]; + + return ($field); + } + + static private function conv_string2byte($src) { + $field = self::conv_string2field($src); + return self::conv_field2byte($field); + } + + static private function conv_string2binary($src) { + $byte = self::conv_string2byte($src); + return self::conv_byte2binary($byte); + } +} + +?> \ No newline at end of file diff --git a/etc/inc/voucher.inc b/etc/inc/voucher.inc new file mode 100644 index 000000000..56329dfb6 --- /dev/null +++ b/etc/inc/voucher.inc @@ -0,0 +1,741 @@ + + Copyright (C) 2010 Scott Ullrich + Copyright (C) 2007 Marcel Wiget + 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. + +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/local/bin/voucher + pfSense_MODULE: captiveportal +*/ + +/* include all configuration functions */ +if(!function_exists('captiveportal_syslog')) + require_once("captiveportal.inc"); + +function xmlrpc_sync_voucher_expire($vouchers, $syncip, $port, $password, $username) { + global $g, $config, $cpzone; + require_once("xmlrpc.inc"); + + $protocol = "http"; + if (is_array($config['system']) && is_array($config['system']['webgui']) && !empty($config['system']['webgui']['protocol']) && + $config['system']['webgui']['protocol'] == "https") + $protocol = "https"; + if ($protocol == "https" || $port == "443") + $url = "https://{$syncip}"; + else + $url = "http://{$syncip}"; + + /* Construct code that is run on remote machine */ + $method = 'pfsense.exec_php'; + $execcmd = <<setCredentials($username, $password); + $resp = $cli->send($msg, "250"); + if(!is_object($resp)) { + $error = "A communications error occurred while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} (pfsense.exec_php)."; + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Communications error occurred", ""); + return false; + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Error code received", ""); + return false; + } else { + log_error("CaptivePortalVoucherSync XMLRPC reload data success with {$url}:{$port} (pfsense.exec_php)."); + } + + $toreturn = XML_RPC_Decode($resp->value()); + + return $toreturn; +} + +function xmlrpc_sync_voucher_disconnect($dbent, $syncip, $port, $password, $username, $term_cause = 1, $stop_time = null) { + global $g, $config, $cpzone; + require_once("xmlrpc.inc"); + + $protocol = "http"; + if (is_array($config['system']) && is_array($config['system']['webgui']) && !empty($config['system']['webgui']['protocol']) && + $config['system']['webgui']['protocol'] == "https") + $protocol = "https"; + if ($protocol == "https" || $port == "443") + $url = "https://{$syncip}"; + else + $url = "http://{$syncip}"; + + /* Construct code that is run on remote machine */ + $dbent_str = serialize($dbent); + $tmp_stop_time = (isset($stop_time)) ? $stop_time : "null"; + $method = 'pfsense.exec_php'; + $execcmd = <<setCredentials($username, $password); + $resp = $cli->send($msg, "250"); + if(!is_object($resp)) { + $error = "A communications error occurred while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} (pfsense.exec_php)."; + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Communications error occurred", ""); + return false; + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Error code received", ""); + return false; + } else { + log_error("CaptivePortalVoucherSync XMLRPC reload data success with {$url}:{$port} (pfsense.exec_php)."); + } + + $toreturn = XML_RPC_Decode($resp->value()); + + return $toreturn; +} + +function xmlrpc_sync_used_voucher($voucher_received, $syncip, $port, $password, $username) { + global $g, $config, $cpzone; + require_once("xmlrpc.inc"); + + $protocol = "http"; + if (is_array($config['system']) && is_array($config['system']['webgui']) && !empty($config['system']['webgui']['protocol']) && + $config['system']['webgui']['protocol'] == "https") + $protocol = "https"; + if ($protocol == "https" || $port == "443") + $url = "https://{$syncip}"; + else + $url = "http://{$syncip}"; + + /* Construct code that is run on remote machine */ + $method = 'pfsense.exec_php'; + $execcmd = <<setCredentials($username, $password); + $resp = $cli->send($msg, "250"); + if(!is_object($resp)) { + $error = "A communications error occurred while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} (pfsense.exec_php)."; + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Communications error occurred", ""); + return null; // $timeleft + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Error code received", ""); + return null; // $timeleft + } else { + log_error("CaptivePortalVoucherSync XMLRPC reload data success with {$url}:{$port} (pfsense.exec_php)."); + } + $toreturn = XML_RPC_Decode($resp->value()); + if (!is_array($config['voucher'])) + $config['voucher'] = array(); + + if (is_array($toreturn['voucher']) && is_array($toreturn['voucher']['roll'])) { + $config['voucher'][$cpzone]['roll'] = $toreturn['voucher']['roll']; + write_config("Captive Portal Voucher database synchronized with {$url}"); + voucher_configure_zone(true); + unset($toreturn['voucher']); + } else if (!isset($toreturn['timeleft'])) + return null; + + return $toreturn['timeleft']; +} + +function voucher_expire($voucher_received) { + global $g, $config, $cpzone; + + // XMLRPC Call over to the master Voucher node + if(!empty($config['voucher'][$cpzone]['vouchersyncdbip'])) { + $syncip = $config['voucher'][$cpzone]['vouchersyncdbip']; + $syncport = $config['voucher'][$cpzone]['vouchersyncport']; + $syncpass = $config['voucher'][$cpzone]['vouchersyncpass']; + $vouchersyncusername = $config['voucher'][$cpzone]['vouchersyncusername']; + xmlrpc_sync_voucher_expire($voucher_received, $syncip, $syncport, $syncpass, $vouchersyncusername); + } + + $voucherlck = lock("voucher{$cpzone}", LOCK_EX); + + // read rolls into assoc array with rollid as key and minutes as value + $tickets_per_roll = array(); + $minutes_per_roll = array(); + if (is_array($config['voucher'][$cpzone]['roll'])) { + foreach ($config['voucher'][$cpzone]['roll'] as $rollent) { + $tickets_per_roll[$rollent['number']] = $rollent['count']; + $minutes_per_roll[$rollent['number']] = $rollent['minutes']; + } + } + + // split into an array. Useful for multiple vouchers given + $a_vouchers_received = preg_split("/[\t\n\r ]+/s", $voucher_received); + $active_dirty = false; + $unsetindexes = array(); + + // go through all received vouchers, check their valid and extract + // Roll# and Ticket# using the external readvoucher binary + foreach ($a_vouchers_received as $voucher) { + $v = escapeshellarg($voucher); + if (strlen($voucher) < 3) + continue; // seems too short to be a voucher! + + unset($output); + $_gb = exec("/usr/local/bin/voucher -c {$g['varetc_path']}/voucher_{$cpzone}.cfg -k {$g['varetc_path']}/voucher_{$cpzone}.public -- $v", $output); + list($status, $roll, $nr) = explode(" ", $output[0]); + if ($status == "OK") { + // check if we have this ticket on a registered roll for this ticket + if ($tickets_per_roll[$roll] && ($nr <= $tickets_per_roll[$roll])) { + // voucher is from a registered roll. + if (!isset($active_vouchers[$roll])) + $active_vouchers[$roll] = voucher_read_active_db($roll); + // valid voucher. Store roll# and ticket# + if (!empty($active_vouchers[$roll][$voucher])) { + $active_dirty = true; + unset($active_vouchers[$roll][$voucher]); + } + // check if voucher already marked as used + if (!isset($bitstring[$roll])) + $bitstring[$roll] = voucher_read_used_db($roll); + $pos = $nr >> 3; // divide by 8 -> octet + $mask = 1 << ($nr % 8); + // mark bit for this voucher as used + if (!(ord($bitstring[$roll][$pos]) & $mask)) + $bitstring[$roll][$pos] = chr(ord($bitstring[$roll][$pos]) | $mask); + captiveportal_syslog("{$voucher} ({$roll}/{$nr}) forced to expire"); + + /* Check if this voucher has any active sessions */ + $cpentry = captiveportal_read_db("WHERE username = '{$voucher}'"); + if (!empty($cpentry)) { + captiveportal_disconnect($cpentry,null,13); + captiveportal_logportalauth($cpentry[4],$cpentry[3],$cpentry[2],"FORCLY TERMINATING VOUCHER {$voucher} SESSION"); + $unsetindexes[] = $cpentry[5]; + } + } else + captiveportal_syslog("$voucher ($roll/$nr): not found on any registererd Roll"); + } else + // hmm, thats weird ... not what I expected + captiveportal_syslog("$voucher invalid: {$output[0]}!!"); + } + + // Refresh active DBs + if ($active_dirty == true) { + foreach ($active_vouchers as $roll => $active) + voucher_write_active_db($roll, $active); + unset($active_vouchers); + + /* Triger a sync of the vouchers on config */ + send_event("service sync vouchers"); + } + + // Write back the used DB's + if (is_array($bitstring)) { + foreach ($bitstring as $roll => $used) { + if(is_array($used)) { + foreach($used as $u) + voucher_write_used_db($roll, base64_encode($u)); + } else { + voucher_write_used_db($roll, base64_encode($used)); + } + } + unset($bitstring); + } + + unlock($voucherlck); + + /* Write database */ + if (!empty($unsetindexes)) + captiveportal_remove_entries($unsetindexes); + + return true; +} + +/* + * Authenticate a voucher and return the remaining time credit in minutes + * if $test is set, don't mark the voucher as used nor add it to the list + * of active vouchers + * If $test is set, simply test the voucher. Don't change anything + * but return a more verbose error and result message back + */ +function voucher_auth($voucher_received, $test = 0) { + global $g, $config, $cpzone, $dbc; + + if (!isset($config['voucher'][$cpzone]['enable'])) + return 0; + + // XMLRPC Call over to the master Voucher node + if(!empty($config['voucher'][$cpzone]['vouchersyncdbip'])) { + $syncip = $config['voucher'][$cpzone]['vouchersyncdbip']; + $syncport = $config['voucher'][$cpzone]['vouchersyncport']; + $syncpass = $config['voucher'][$cpzone]['vouchersyncpass']; + $vouchersyncusername = $config['voucher'][$cpzone]['vouchersyncusername']; + $remote_time_used = xmlrpc_sync_used_voucher($voucher_received, $syncip, $syncport, $syncpass, $vouchersyncusername); + } + + $voucherlck = lock("voucher{$cpzone}", LOCK_EX); + + // read rolls into assoc array with rollid as key and minutes as value + $tickets_per_roll = array(); + $minutes_per_roll = array(); + if (is_array($config['voucher'][$cpzone]['roll'])) { + foreach ($config['voucher'][$cpzone]['roll'] as $rollent) { + $tickets_per_roll[$rollent['number']] = $rollent['count']; + $minutes_per_roll[$rollent['number']] = $rollent['minutes']; + } + } + + // split into an array. Useful for multiple vouchers given + $a_vouchers_received = preg_split("/[\t\n\r ]+/s", $voucher_received); + $error = 0; + $test_result = array(); // used to display for voucher test option in GUI + $total_minutes = 0; + $first_voucher = ""; + $first_voucher_roll = 0; + + // go through all received vouchers, check their valid and extract + // Roll# and Ticket# using the external readvoucher binary + foreach ($a_vouchers_received as $voucher) { + $v = escapeshellarg($voucher); + if (strlen($voucher) < 3) + continue; // seems too short to be a voucher! + + $result = exec("/usr/local/bin/voucher -c {$g['varetc_path']}/voucher_{$cpzone}.cfg -k {$g['varetc_path']}/voucher_{$cpzone}.public -- $v"); + list($status, $roll, $nr) = explode(" ", $result); + if ($status == "OK") { + if (!$first_voucher) { + // store first voucher. Thats the one we give the timecredit + $first_voucher = $voucher; + $first_voucher_roll = $roll; + } + // check if we have this ticket on a registered roll for this ticket + if ($tickets_per_roll[$roll] && ($nr <= $tickets_per_roll[$roll])) { + // voucher is from a registered roll. + if (!isset($active_vouchers[$roll])) + $active_vouchers[$roll] = voucher_read_active_db($roll); + // valid voucher. Store roll# and ticket# + if (!empty($active_vouchers[$roll][$voucher])) { + list($timestamp,$minutes) = explode(",", $active_vouchers[$roll][$voucher]); + // we have an already active voucher here. + $remaining = intval((($timestamp + (60*$minutes)) - time())/60); + $test_result[] = sprintf(gettext('%1$s (%2$s/%3$s) active and good for %4$d Minutes'), $voucher, $roll, $nr, $remaining); + $total_minutes += $remaining; + } else { + // voucher not used. Check if ticket Id is on the roll (not too high) + // and if the ticket is marked used. + // check if voucher already marked as used + if (!isset($bitstring[$roll])) + $bitstring[$roll] = voucher_read_used_db($roll); + $pos = $nr >> 3; // divide by 8 -> octet + $mask = 1 << ($nr % 8); + if (ord($bitstring[$roll][$pos]) & $mask) { + $test_result[] = "$voucher ($roll/$nr) already used and expired"; + captiveportal_syslog("$voucher ($roll/$nr) already used and expired"); + $total_minutes = -1; // voucher expired + $error++; + } else { + // mark bit for this voucher as used + $bitstring[$roll][$pos] = chr(ord($bitstring[$roll][$pos]) | $mask); + $test_result[] = "$voucher ($roll/$nr) good for {$minutes_per_roll[$roll]} Minutes"; + $total_minutes += $minutes_per_roll[$roll]; + } + } + } else { + $test_result[] = "$voucher ($roll/$nr): not found on any registererd Roll"; + captiveportal_syslog("$voucher ($roll/$nr): not found on any registererd Roll"); + } + } else { + // hmm, thats weird ... not what I expected + $test_result[] = "$voucher invalid: $result !!"; + captiveportal_syslog("$voucher invalid: $result !!"); + $error++; + } + } + + // if this was a test call, we're done. Return the result. + if ($test) { + if ($error) { + $test_result[] = gettext("Access denied!"); + } else { + $test_result[] = sprintf(gettext("Access granted for %d Minutes in total."),$total_minutes); + } + unlock($voucherlck); + + return $test_result; + } + + // if we had an error (one of the vouchers is invalid), return 0. + // Discussion: we could return the time remaining for good vouchers, but then + // the user wouldn't know that he used at least one invalid voucher. + if ($error) { + unlock($voucherlck); + if ($total_minutes > 0) // probably not needed, but want to make sure + $total_minutes = 0; // we only report -1 (expired) or 0 (no access) + return $total_minutes; // well, at least one voucher had errors. Say NO ACCESS + } + + // If we did a XMLRPC sync earlier check the timeleft + if (!empty($config['voucher'][$cpzone]['vouchersyncdbip'])) { + if (!is_null($remote_time_used)) + $total_minutes = $remote_time_used; + else if ($remote_time_used < $total_minutes) + $total_minutes -= $remote_time_used; + } + + // All given vouchers were valid and this isn't simply a test. + // Write back the used DB's + if (is_array($bitstring)) { + foreach ($bitstring as $roll => $used) { + if(is_array($used)) { + foreach($used as $u) + voucher_write_used_db($roll, base64_encode($u)); + } else { + voucher_write_used_db($roll, base64_encode($used)); + } + } + } + + // Active DB: we only add the first voucher if multiple given + // and give that one all the time credit. This allows the user to logout and + // log in later using just the first voucher. It also keeps username limited + // to one voucher and that voucher shows the correct time credit in 'active vouchers' + if (!empty($active_vouchers[$first_voucher_roll][$first_voucher])) { + list($timestamp, $minutes) = explode(",", $active_vouchers[$first_voucher_roll][$first_voucher]); + } else { + $timestamp = time(); // new voucher + $minutes = $total_minutes; + } + + $active_vouchers[$first_voucher_roll][$first_voucher] = "$timestamp,$minutes"; + voucher_write_active_db($first_voucher_roll, $active_vouchers[$first_voucher_roll]); + + /* Triger a sync of the vouchers on config */ + send_event("service sync vouchers"); + + unlock($voucherlck); + + return $total_minutes; +} + +function voucher_configure($sync = false) { + global $config, $g, $cpzone; + + if (is_array($config['voucher'])) { + foreach ($config['voucher'] as $voucherzone => $vcfg) { + if ($g['booting']) + echo gettext("Enabling voucher support... "); + $cpzone = $voucherzone; + $error = voucher_configure_zone($sync); + if ($g['booting']) { + if ($error) + echo "error\n"; + else + echo "done\n"; + } + } + } +} + +function voucher_configure_zone($sync = false) { + global $config, $g, $cpzone; + + if (!isset($config['voucher'][$cpzone]['enable'])) + return 0; + + if ($sync == true) + captiveportal_syslog("Writing voucher db from sync data..."); + + $voucherlck = lock("voucher{$cpzone}", LOCK_EX); + + /* write public key used to verify vouchers */ + $pubkey = base64_decode($config['voucher'][$cpzone]['publickey']); + $fd = fopen("{$g['varetc_path']}/voucher_{$cpzone}.public", "w"); + if (!$fd) { + captiveportal_syslog("Voucher error: cannot write voucher.public\n"); + unlock($voucherlck); + return 1; + } + fwrite($fd, $pubkey); + fclose($fd); + @chmod("{$g['varetc_path']}/voucher_{$cpzone}.public", 0600); + + /* write config file used by voucher binary to decode vouchers */ + $fd = fopen("{$g['varetc_path']}/voucher_{$cpzone}.cfg", "w"); + if (!$fd) { + printf(gettext("Error: cannot write voucher.cfg") . "\n"); + unlock($voucherlck); + return 1; + } + fwrite($fd, "{$config['voucher'][$cpzone]['rollbits']},{$config['voucher'][$cpzone]['ticketbits']},{$config['voucher'][$cpzone]['checksumbits']},{$config['voucher'][$cpzone]['magic']},{$config['voucher'][$cpzone]['charset']}\n"); + fclose($fd); + @chmod("{$g['varetc_path']}/voucher_{$cpzone}.cfg", 0600); + unlock($voucherlck); + + if (($g['booting'] || $sync == true) && is_array($config['voucher'][$cpzone]['roll'])) { + + $voucherlck = lock("voucher{$cpzone}", LOCK_EX); + + // create active and used DB per roll on ramdisk from config + foreach ($config['voucher'][$cpzone]['roll'] as $rollent) { + + $roll = $rollent['number']; + voucher_write_used_db($roll, $rollent['used']); + $minutes = $rollent['minutes']; + $active_vouchers = array(); + $a_active = &$rollent['active']; + if (is_array($a_active)) { + foreach ($a_active as $activent) { + $voucher = $activent['voucher']; + $timestamp = $activent['timestamp']; + $minutes = $activent['minutes']; + // its tempting to check for expired timestamps, but during + // bootup, we most likely don't have the correct time time. + $active_vouchers[$voucher] = "$timestamp,$minutes"; + } + } + voucher_write_active_db($roll, $active_vouchers); + } + + unlock($voucherlck); + } + + return 0; +} + +/* write bitstring of used vouchers to ramdisk. + * Bitstring must already be base64_encoded! + */ +function voucher_write_used_db($roll, $vdb) { + global $g, $cpzone; + + $fd = fopen("{$g['vardb_path']}/voucher_{$cpzone}_used_$roll.db", "w"); + if ($fd) { + fwrite($fd, $vdb . "\n"); + fclose($fd); + } else + voucher_log(LOG_ERR, sprintf(gettext('cant write %1$s/voucher_%s_used_%2$s.db'), $g['vardb_path'], $cpzone, $roll)); +} + +/* return assoc array of active vouchers with activation timestamp + * voucher is index. + */ +function voucher_read_active_db($roll) { + global $g, $cpzone; + + $active = array(); + $dirty = 0; + $file = "{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db"; + if (file_exists($file)) { + $fd = fopen($file, "r"); + if ($fd) { + while (!feof($fd)) { + $line = trim(fgets($fd)); + if ($line) { + list($voucher,$timestamp,$minutes) = explode(",", $line); // voucher,timestamp + if ((($timestamp + (60*$minutes)) - time()) > 0) + $active[$voucher] = "$timestamp,$minutes"; + else + $dirty=1; + } + } + fclose($fd); + if ($dirty) { // if we found expired entries, lets save our snapshot + voucher_write_active_db($roll, $active); + + /* Triger a sync of the vouchers on config */ + send_event("service sync vouchers"); + } + } + } + return $active; +} + +/* store array of active vouchers back to DB */ +function voucher_write_active_db($roll, $active) { + global $g, $cpzone; + + if (!is_array($active)) + return; + $fd = fopen("{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db", "w"); + if ($fd) { + foreach($active as $voucher => $value) + fwrite($fd, "$voucher,$value\n"); + fclose($fd); + } +} + +/* return how many vouchers are marked used on a roll */ +function voucher_used_count($roll) { + global $g, $cpzone; + + $bitstring = voucher_read_used_db($roll); + $max = strlen($bitstring) * 8; + $used = 0; + for ($i = 1; $i <= $max; $i++) { + // check if ticket already used or not. + $pos = $i >> 3; // divide by 8 -> octet + $mask = 1 << ($i % 8); // mask to test bit in octet + if (ord($bitstring[$pos]) & $mask) + $used++; + } + unset($bitstring); + + return $used; +} + +function voucher_read_used_db($roll) { + global $g, $cpzone; + + $vdb = ""; + $file = "{$g['vardb_path']}/voucher_{$cpzone}_used_$roll.db"; + if (file_exists($file)) { + $fd = fopen($file, "r"); + if ($fd) { + $vdb = trim(fgets($fd)); + fclose($fd); + } else { + voucher_log(LOG_ERR, sprintf(gettext('cant read %1$s/voucher_%s_used_%2$s.db'), $g['vardb_path'], $cpzone, $roll)); + } + } + return base64_decode($vdb); +} + +function voucher_unlink_db($roll) { + global $g, $cpzone; + @unlink("{$g['vardb_path']}/voucher_{$cpzone}_used_$roll.db"); + @unlink("{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db"); +} + +/* we share the log with captiveportal for now */ +function voucher_log($priority, $message) { + + $message = trim($message); + openlog("logportalauth", LOG_PID, LOG_LOCAL4); + syslog($priority, sprintf(gettext("Voucher: %s"),$message)); + closelog(); +} + +/* Save active and used voucher DB into XML config and write it to flash + * Called during reboot -> system_reboot_cleanup() and every active voucher change + */ +function voucher_save_db_to_config() { + global $config, $g, $cpzone; + + if (is_array($config['voucher'])) { + foreach ($config['voucher'] as $voucherzone => $vcfg) { + $cpzone = $voucherzone; + voucher_save_db_to_config_zone(); + } + } +} + +function voucher_save_db_to_config_zone() { + global $config, $g, $cpzone; + + if (!isset($config['voucher'][$cpzone]['enable'])) + return; // no vouchers or don't want to save DB's + + if (!is_array($config['voucher'][$cpzone]['roll'])) + return; + + $voucherlck = lock("voucher{$cpzone}", LOCK_EX); + + // walk all active rolls and save runtime DB's to flash + $a_roll = &$config['voucher'][$cpzone]['roll']; + while (list($key, $value) = each($a_roll)) { + $rollent = &$a_roll[$key]; + $roll = $rollent['number']; + $bitmask = voucher_read_used_db($roll); + $rollent['used'] = base64_encode($bitmask); + $active_vouchers = voucher_read_active_db($roll); + $db = array(); + $dbi = 1; + foreach($active_vouchers as $voucher => $line) { + list($timestamp,$minutes) = explode(",", $line); + $activent['voucher'] = $voucher; + $activent['timestamp'] = $timestamp; + $activent['minutes'] = $minutes; + $db["v{$dbi}"] = $activent; + $dbi++; + } + $rollent['active'] = $db; + unset($active_vouchers); + } + + unlock($voucherlck); + + write_config("Synching vouchers"); + return; +} + +?> diff --git a/etc/inc/vpn.inc b/etc/inc/vpn.inc new file mode 100644 index 000000000..e92f30875 --- /dev/null +++ b/etc/inc/vpn.inc @@ -0,0 +1,1578 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig + pfSense_BUILDER_BINARIES: /usr/local/sbin/ipsec /usr/local/libexec/ipsec/charon /usr/local/libexec/ipsec/starter + pfSense_BUILDER_BINARIES: /usr/local/sbin/filterdns /usr/local/sbin/mpd4 + pfSense_MODULE: vpn +*/ + +require_once("ipsec.inc"); + +function vpn_ipsec_configure_loglevels($forconfig = false) +{ + global $config, $ipsec_loglevels; + + $cfgtext = array(); + foreach ($ipsec_loglevels as $lkey => $ldescr) { + if (!isset($config['ipsec']["ipsec_{$lkey}"]) && !$forconfig) + mwexec("/usr/local/sbin/ipsec stroke loglevel {$lkey} -- -1", false); + else if (is_numeric($config['ipsec']["ipsec_{$lkey}"]) && + intval($config['ipsec']["ipsec_{$lkey}"]) >= 1 && intval($config['ipsec']["ipsec_{$lkey}"]) <= 5) + $forconfig ? $cfgtext[] = "${lkey} " . (intval($config['ipsec']["ipsec_{$lkey}"]) - 1) : + mwexec("/usr/local/sbin/ipsec stroke loglevel {$lkey} " . (intval($config['ipsec']["ipsec_{$lkey}"]) - 1) , false); + } + if ($forconfig) + return implode(',', $cfgtext); +} + +/* include all configuration functions */ +function vpn_ipsec_convert_to_modp($index) +{ + + $convertion = ""; + switch ($index) { + case '1': + $convertion = "modp768"; + break; + case '2': + $convertion = "modp1024"; + break; + case '5': + $convertion = "modp1536"; + break; + case '14': + $convertion = "modp2048"; + break; + case '15': + $convertion = "modp3072"; + break; + case '16': + $convertion = "modp4096"; + break; + case '17': + $convertion = "modp6144"; + break; + case '18': + $convertion = "modp8192"; + break; + } + + return $convertion; +} + +function vpn_ipsec_configure($ipchg = false) +{ + global $config, $g, $sa, $sn, $p1_ealgos, $p2_ealgos; + + if ($g['platform'] == 'jail') + return; + + /* get the automatic ping_hosts.sh ready */ + unlink_if_exists("{$g['vardb_path']}/ipsecpinghosts"); + touch("{$g['vardb_path']}/ipsecpinghosts"); + + vpn_ipsec_configure_preferoldsa(); + + $syscfg = $config['system']; + $ipseccfg = $config['ipsec']; + $a_phase1 = $config['ipsec']['phase1']; + $a_phase2 = $config['ipsec']['phase2']; + $a_client = $config['ipsec']['client']; + + if (!isset($ipseccfg['enable'])) { + /* try to stop charon */ + mwexec("/usr/local/sbin/ipsec stop"); + /* Stop dynamic monitoring */ + killbypid("{$g['varrun_path']}/filterdns-ipsec.pid"); + + /* wait for process to die */ + sleep(2); + + /* disallow IPSEC, it is off */ + mwexec("/sbin/ifconfig enc0 down"); + set_single_sysctl("net.inet.ip.ipsec_in_use", "0"); + + return 0; + } else { + $certpath = "{$g['varetc_path']}/ipsec/ipsec.d/certs"; + $capath = "{$g['varetc_path']}/ipsec/ipsec.d/cacerts"; + $keypath = "{$g['varetc_path']}/ipsec/ipsec.d/private"; + + mwexec("/sbin/ifconfig enc0 up"); + set_single_sysctl("net.inet.ip.ipsec_in_use", "1"); + /* needed for config files */ + if (!is_dir("{$g['varetc_path']}/ipsec")) + mkdir("{$g['varetc_path']}/ipsec"); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d"); + if (!is_dir($capath)) + mkdir($capath); + if (!is_dir($keypath)) + mkdir($keypath); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d/crls")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d/crls"); + if (!is_dir($certpath)) + mkdir($certpath); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d/aacerts")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d/aacerts"); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d/acerts")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d/acerts"); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d/ocspcerts")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d/ocspcerts"); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d/reqs")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d/reqs"); + + + if ($g['booting']) + echo gettext("Configuring IPsec VPN... "); + + /* fastforwarding is not compatible with ipsec tunnels */ + set_single_sysctl("net.inet.ip.fastforwarding", "0"); + + /* resolve all local, peer addresses and setup pings */ + $ipmap = array(); + $rgmap = array(); + $filterdns_list = array(); + $listeniflist = array(); + unset($iflist); + if (is_array($a_phase1) && count($a_phase1)) { + + $ipsecpinghosts = ""; + /* step through each phase1 entry */ + foreach ($a_phase1 as $ph1ent) { + if (isset($ph1ent['disabled'])) + continue; + + $ikeid = $ph1ent['ikeid']; + $listeniflist = get_real_interface($a_phase1['interface']); + + $ep = ipsec_get_phase1_src($ph1ent); + if (!is_ipaddr($ep)) + continue; + + if(!in_array($ep,$ipmap)) + $ipmap[] = $ep; + + /* see if this tunnel has a hostname for the remote-gateway. If so, + try to resolve it now and add it to the list for filterdns */ + + if (isset ($ph1ent['mobile'])) + continue; + + $rg = $ph1ent['remote-gateway']; + + if (!is_ipaddr($rg)) { + $filterdns_list[] = "{$rg}"; + add_hostname_to_watch($rg); + if(! $g['booting']) + $rg = resolve_retry($rg); + if (!is_ipaddr($rg)) + continue; + } + if(array_search($rg, $rgmap)) { + log_error("The remote gateway {$rg} already exists on another phase 1 entry"); + continue; + } + $rgmap[$ph1ent['remote-gateway']] = $rg; + + if (is_array($a_phase2)) { + /* step through each phase2 entry */ + foreach ($a_phase2 as $ph2ent) { + if (isset($ph2ent['disabled'])) + continue; + + if ($ikeid != $ph2ent['ikeid']) + continue; + + /* add an ipsec pinghosts entry */ + if ($ph2ent['pinghost']) { + if (!is_array($iflist)) + $iflist = get_configured_interface_list(); + $viplist = get_configured_vips_list(); + $srcip = null; + $local_subnet = ipsec_idinfo_to_cidr($ph2ent['localid'], true, $ph2ent['mode']); + if(is_ipaddrv6($ph2ent['pinghost'])) { + foreach ($iflist as $ifent => $ifname) { + $interface_ip = get_interface_ipv6($ifent); + if(!is_ipaddrv6($interface_ip)) + continue; + if (ip_in_subnet($interface_ip, $local_subnet)) { + $srcip = $interface_ip; + break; + } + } + } else { + foreach ($iflist as $ifent => $ifname) { + $interface_ip = get_interface_ip($ifent); + if(!is_ipaddrv4($interface_ip)) + continue; + if ($local_subnet == "0.0.0.0/0" || ip_in_subnet($interface_ip, $local_subnet)) { + $srcip = $interface_ip; + break; + } + } + } + /* if no valid src IP was found in configured interfaces, try the vips */ + if (is_null($srcip)) { + foreach ($viplist as $vip) { + if (ip_in_subnet($vip['ipaddr'], $local_subnet)) { + $srcip = $vip['ipaddr']; + break; + } + } + } + $dstip = $ph2ent['pinghost']; + if(is_ipaddrv6($dstip)) { + $family = "inet6"; + } else { + $family = "inet"; + } + if (is_ipaddr($srcip)) + $ipsecpinghosts[] = "{$srcip}|{$dstip}|3|||||{$family}|\n"; + } + } + } + } + @file_put_contents("{$g['vardb_path']}/ipsecpinghosts", $ipsecpinghosts); + unset($ipsecpinghosts); + } + unset($iflist); + + $strongswan = << 0) + $strongswan .= ","; + if ($authcfg == "system") + $authcfg = "Local Database"; + $strongswan .= $authcfg; + $firstsed = 1; + } + $strongswan .= "\n"; + $strongswan .= "\t}\n"; + } + } + + $strongswan .= "\t}\n}\n"; + @file_put_contents("{$g['varetc_path']}/ipsec/strongswan.conf", $strongswan); + unset($strongswan); + + /* generate CA certificates files */ + if (is_array($config['ca']) && count($config['ca'])) { + foreach ($config['ca'] as $ca) { + if (!isset($ca['crt'])) { + log_error(sprintf(gettext("Error: Invalid certificate info for %s"), $ca['descr'])); + continue; + } + $cert = base64_decode($ca['crt']); + $x509cert = openssl_x509_parse(openssl_x509_read($cert)); + if (!is_array($x509cert) || !isset($x509cert['hash'])) { + log_error(sprintf(gettext("Error: Invalid certificate hash info for %s"), $ca['descr'])); + continue; + } + $fname = "{$capath}/{$x509cert['hash']}.0.crt"; + if (!@file_put_contents($fname, $cert)) { + log_error(sprintf(gettext("Error: Cannot write IPsec CA file for %s"), $ca['descr'])); + continue; + } + unset($cert); + } + } + + $pskconf = ""; + + if (is_array($a_phase1) && count($a_phase1)) { + foreach ($a_phase1 as $ph1ent) { + + if (isset($ph1ent['disabled'])) + continue; + + if (strpos($ph1ent['authentication_method'], 'rsa') || $ph1ent['authentication_method'] == 'eap-tls') { + $certline = ''; + + $ikeid = $ph1ent['ikeid']; + $cert = lookup_cert($ph1ent['certref']); + + if (!$cert) { + log_error(sprintf(gettext("Error: Invalid phase1 certificate reference for %s"), $ph1ent['name'])); + continue; + } + + @chmod($certpath, 0600); + + $ph1keyfile = "{$keypath}/cert-{$ikeid}.key"; + if (!file_put_contents($ph1keyfile, base64_decode($cert['prv']))) { + log_error(sprintf(gettext("Error: Cannot write phase1 key file for %s"), $ph1ent['name'])); + continue; + } + @chmod($ph1keyfile, 0600); + + $ph1certfile = "{$certpath}/cert-{$ikeid}.crt"; + if (!file_put_contents($ph1certfile, base64_decode($cert['crt']))) { + log_error(sprintf(gettext("Error: Cannot write phase1 certificate file for %s"), $ph1ent['name'])); + @unlink($ph1keyfile); + continue; + } + @chmod($ph1certfile, 0600); + + /* XXX" Traffic selectors? */ + $pskconf .= " : RSA {$ph1keyfile}\n"; + } else { + list ($myid_type, $myid_data) = ipsec_find_id($ph1ent, "local"); + list ($peerid_type, $peerid_data) = ipsec_find_id($ph1ent, "peer", $rgmap); + + if (empty($peerid_data)) + continue; + + $myid = isset($ph1ent['mobile']) ? trim($myid_data) . " " : ""; + $peerid = ($peerid_data != "allusers") ? trim($peerid_data) : ""; + if (!empty($ph1ent['pre-shared-key'])) + $pskconf .= $myid . $peerid . " : PSK \"" . trim($ph1ent['pre-shared-key']) . "\"\n"; + } + } + } + + /* Add user PSKs */ + if (is_array($config['system']) && is_array($config['system']['user'])) { + foreach ($config['system']['user'] as $user) { + if (!empty($user['ipsecpsk'])) { + $pskconf .= "{$user['name']} : PSK \"{$user['ipsecpsk']}\"\n"; + } + } + unset($user); + } + + /* add PSKs for mobile clients */ + if (is_array($ipseccfg['mobilekey'])) { + foreach ($ipseccfg['mobilekey'] as $key) { + if ($key['ident'] == "allusers") + $key['ident'] = ''; + $pskconf .= "{$key['ident']} : PSK \"{$key['pre-shared-key']}\"\n"; + } + unset($key); + } + + @file_put_contents("{$g['varetc_path']}/ipsec/ipsec.secrets", $pskconf); + chmod("{$g['varetc_path']}/ipsec/ipsec.secrets", 0600); + unset($pskconf); + + $natfilterrules = false; + /* begin ipsec.conf */ + $ipsecconf = ""; + if (is_array($a_phase1) && count($a_phase1)) { + + $ipsecconf .= "# This file is automatically generated. Do not edit\n"; + $ipsecconf .= "config setup\n\tuniqueids = yes\n"; + $ipsecconf .= "\tcharondebug=\"" . vpn_ipsec_configure_loglevels(true) . "\"\n"; + + foreach ($a_phase1 as $ph1ent) { + if (isset($ph1ent['disabled'])) + continue; + + if ($ph1ent['mode'] == "aggressive") + $aggressive = "yes"; + else + $aggressive = "no"; + + $ep = ipsec_get_phase1_src($ph1ent); + if (!$ep) + continue; + + $ikeid = $ph1ent['ikeid']; + $keyexchange = "ikev1"; + $passive = "route"; + if (!empty($ph1ent['iketype']) && $ph1ent['iketype'] != "ikev1") { + $keyexchange = "ikev2"; + //$passive = "start"; + } else + $passive = "route"; + + if (isset($ph1ent['mobile'])) { + $right_spec = "%any"; + $passive = 'add'; + } else + $right_spec = $ph1ent['remote-gateway']; + + list ($myid_type, $myid_data) = ipsec_find_id($ph1ent, "local"); + list ($peerid_type, $peerid_data) = ipsec_find_id($ph1ent, "peer", $rgmap); + + /* Only specify peer ID if we are not dealing with a mobile PSK-only tunnel */ + $peerid_spec = ''; + if (!isset($ph1ent['mobile'])) + $peerid_spec = $peerid_data; + + if (is_array($ph1ent['encryption-algorithm']) && !empty($ph1ent['encryption-algorithm']['name']) && !empty($ph1ent['hash-algorithm'])) { + $ealgosp1 = ''; + $ealg_id = $ph1ent['encryption-algorithm']['name']; + $ealg_kl = $ph1ent['encryption-algorithm']['keylen']; + if ($ealg_kl) + $ealgosp1 = "ike = {$ealg_id}{$ealg_kl}-{$ph1ent['hash-algorithm']}"; + else + $ealgosp1 = "ike = {$ealg_id}-{$ph1ent['hash-algorithm']}"; + + $modp = vpn_ipsec_convert_to_modp($ph1ent['dhgroup']); + if (!empty($modp)) + $ealgosp1 .= "-{$modp}"; + + $ealgosp1 .= "!"; + } + + if ($ph1ent['dpd_delay'] && $ph1ent['dpd_maxfail']) { + if ($passive == "route") + $dpdline = "dpdaction = restart"; + else + $dpdline = "dpdaction = clear"; + $dpdline .= "\n\tdpddelay = {$ph1ent['dpd_delay']}s"; + $dpdtimeout = $ph1ent['dpd_delay'] * ($ph1ent['dpd_maxfail'] + 1); + $dpdline .= "\n\tdpdtimeout = {$dpdtimeout}s"; + } else + $dpdline = "dpdaction = none"; + + $ikelifeline = ''; + if ($ph1ent['lifetime']) + $ikelifeline = "ikelifetime = {$ph1ent['lifetime']}s"; + + $rightsourceip = NULL; + if (!empty($a_client['pool_address'])) + $rightsourceip = "\trightsourceip = {$a_client['pool_address']}/{$a_client['pool_netbits']}\n"; + + $authentication = ""; + switch ($ph1ent['authentication_method']) { + case 'eap-tls': + $authentication = "leftauth=eap-tls\n\trightauth=eap-tls"; + if (!empty($ph1ent['certref'])) + $authentication .= "\n\tleftcert={$certpath}/cert-{$ph1ent['ikeid']}.crt"; + break; + case 'xauth_rsa_server': + $authentication = "leftauth = pubkey\n\trightauth = pubkey"; + $authentication .= "\n\trightauth2 = xauth-generic"; + break; + case 'xauth_psk_server': + $authentication = "leftauth = psk\n\trightauth = psk"; + $authentication .= "\n\trightauth2 = xauth-generic"; + break; + case 'pre_shared_key': + $authentication = "leftauth = psk\n\trightauth = psk"; + break; + case 'rsasig': + $authentication = "leftauth = pubkey\n\trightauth = pubkey"; + break; + case 'hybrid_rsa_server': + $authentication = "leftauth = xauth-generic\n\trightauth = pubkey"; + $authentication .= "\n\trightauth2 = xauth"; + break; + } + + $left_spec = $ep; + + if (isset($ph1ent['reauth_enable'])) + $reauth = "reauth = no"; + else + $reauth = "reauth = yes"; + if (isset($ph1ent['rekey_enable'])) + $rekey = "rekey = no"; + else + $rekey = "rekey = yes"; + + $ipseclifetime = 0; + $rightsubnet_spec = array(); + $leftsubnet_spec = array(); + $ealgoAHsp2arr = array(); + $ealgoESPsp2arr = array(); + if (is_array($a_phase2) && count($a_phase2)) { + foreach ($a_phase2 as $ph2ent) { + if ($ikeid != $ph2ent['ikeid']) + continue; + + if (isset($ph2ent['disabled'])) + continue; + + if (isset($ph2ent['mobile']) && !isset($a_client['enable'])) + continue; + + if (($ph2ent['mode'] == 'tunnel') or ($ph2ent['mode'] == 'tunnel6')) { + $tunneltype = "type = tunnel"; + + $localid_type = $ph2ent['localid']['type']; + $leftsubnet_data = ipsec_idinfo_to_cidr($ph2ent['localid'], false, $ph2ent['mode']); + /* Do not print localid in some cases, such as a pure-psk or psk/xauth single phase2 mobile tunnel */ + if (($localid_type == "none" || $localid_type == "mobile") + && isset($ph1ent['mobile']) && (ipsec_get_number_of_phase2($ikeid)==1)) { + $left_spec = '%any'; + } else { + if ($localid_type != "address") { + $localid_type = "subnet"; + } + // Don't let an empty subnet into config, it can cause parse errors. Ticket #2201. + if (!is_ipaddr($leftsubnet_data) && !is_subnet($leftsubnet_data) && ($leftsubnet_data != "0.0.0.0/0")) { + log_error("Invalid IPsec Phase 2 \"{$ph2ent['descr']}\" - {$ph2ent['localid']['type']} has no subnet."); + continue; + } + if (!empty($ph2ent['natlocalid'])) { + $natleftsubnet_data = ipsec_idinfo_to_cidr($ph2ent['natlocalid'], false, $ph2ent['mode']); + if ($ph2ent['natlocalid']['type'] != "address") { + if (is_subnet($natleftsubnet_data)) + $leftsubnet_data = "{$natleftsubnet_data}|{$leftsubnet_data}"; + } else { + if (is_ipaddr($natleftsubnet_data)) + $leftsubnet_data = "{$natleftsubnet_data}|{$leftsubnet_data}"; + } + $natfilterrules = true; + } + } + + if (empty($leftsubnet_spec[$leftsubnet_data])) + $leftsubnet_spec[$leftsubnet_data] = $leftsubnet_data; + + if (!isset($ph2ent['mobile'])) { + $tmpsubnet = ipsec_idinfo_to_cidr($ph2ent['remoteid'], false, $ph2ent['mode']); + if (empty($rightsubnet_spec[$tmpsubnet])) + $rightsubnet_spec[$tmpsubnet] = $tmpsubnet; + } else if (!empty($a_client['pool_address'])) { + if (empty($rightsubnet_spec["{$a_client['pool_address']}/{$a_client['pool_netbits']}"])) + $rightsubnet_spec["{$a_client['pool_address']}/{$a_client['pool_netbits']}"] = "{$a_client['pool_address']}/{$a_client['pool_netbits']}"; + } + } else { + $tunneltype = "type = transport"; + + if ((($ph1ent['authentication_method'] == "xauth_psk_server") || + ($ph1ent['authentication_method'] == "pre_shared_key")) && isset($ph1ent['mobile'])) { + $left_spec = "%any"; + } else { + $tmpsubnet = ipsec_get_phase1_src($ph1ent); + if ($leftsubnet_spec[$tmpsubnet]) + $leftsubnet_spec[$tmpsubnet] = $tmpsubnet; + } + + if (!isset($ph2ent['mobile'])) { + if (empty($rightsubnet_spec[$right_spec])) + $rightsubnet_spec[$right_spec] = $right_spec; + } + } + + if (isset($a_client['pfs_group'])) + $ph2ent['pfsgroup'] = $a_client['pfs_group']; + + if ($ph2ent['protocol'] == 'esp') { + if (is_array($ph2ent['encryption-algorithm-option'])) { + foreach ($ph2ent['encryption-algorithm-option'] as $ealg) { + $ealg_id = $ealg['name']; + $ealg_kl = $ealg['keylen']; + + if (!empty($ealg_kl) && $ealg_kl == "auto") { + if (empty($p2_ealgos) || !is_array($p2_ealgos)) + require("ipsec.inc"); + $key_hi = $p2_ealgos[$ealg_id]['keysel']['hi']; + $key_lo = $p2_ealgos[$ealg_id]['keysel']['lo']; + $key_step = $p2_ealgos[$ealg_id]['keysel']['step']; + /* XXX: in some cases where include ordering is suspect these variables + * are somehow 0 and we enter this loop forever and timeout after 900 + * seconds wrecking bootup */ + if ($key_hi != 0 and $key_lo !=0 and $key_step !=0) { + for ($keylen = $key_hi; $keylen >= $key_lo; $keylen -= $key_step) { + if (!empty($ph2ent['hash-algorithm-option']) && is_array($ph2ent['hash-algorithm-option'])) { + foreach ($ph2ent['hash-algorithm-option'] as $halgo) { + $halgo = str_replace('hmac_', '', $halgo); + $tmpealgo = "{$ealg_id}{$keylen}-{$halgo}"; + $modp = vpn_ipsec_convert_to_modp($ph2ent['pfsgroup']); + if (!empty($modp)) + $tmpealgo .= "-{$modp}"; + $ealgoESPsp2arr[] = $tmpealgo; + } + } else { + $tmpealgo = "{$ealg_id}{$keylen}"; + $modp = vpn_ipsec_convert_to_modp($ph2ent['pfsgroup']); + if (!empty($modp)) + $tmpealgo .= "-{$modp}"; + $ealgoESPsp2arr[] = $tmpealgo; + } + } + } + } else { + if (!empty($ph2ent['hash-algorithm-option']) && is_array($ph2ent['hash-algorithm-option'])) { + foreach ($ph2ent['hash-algorithm-option'] as $halgo) { + $halgo = str_replace('hmac_', '', $halgo); + $tmpealgo = "{$ealg_id}{$ealg_kl}-{$halgo}"; + $modp = vpn_ipsec_convert_to_modp($ph2ent['pfsgroup']); + if (!empty($modp)) + $tmpealgo .= "-{$modp}"; + $ealgoESPsp2arr[] = $tmpealgo; + } + } else { + $tmpealgo = "{$ealg_id}{$ealg_kl}"; + $modp = vpn_ipsec_convert_to_modp($ph2ent['pfsgroup']); + if (!empty($modp)) + $tmpealgo .= "-{$modp}"; + $ealgoESPsp2arr[] = $tmpealgo; + } + } + } + } + } else if ($ph2ent['protocol'] == 'ah') { + if (!empty($ph2ent['hash-algorithm-option']) && is_array($ph2ent['hash-algorithm-option'])) { + $modp = vpn_ipsec_convert_to_modp($ph2ent['pfsgroup']); + foreach ($ph2ent['hash-algorithm-option'] as $tmpAHalgo) { + $tmpAHalgo = str_replace('hmac_', '', $tmpAHalgo); + if (!empty($modp)) + $tmpAHalgo = "-{$modp}"; + $ealgoAHsp2arr[] = $tmpAHalgo; + } + } + } + + + if (!empty($ph2ent['lifetime'])) { + if ($ipseclifetime == 0 || intval($ipseclifetime) > intval($ph2ent['lifetime'])) + $ipseclifetime = intval($ph2ent['lifetime']); + } + } + } + + $ipsecconf .=<< 0) + $ipsecconf .= "\tlifetime = {$ipseclifetime}s\n"; + if (!empty($rightsourceip)) + $ipsecconf .= "{$rightsourceip}"; + if (!empty($rightsubnet_spec)) + $ipsecconf .= "\trightsubnet = " . join(",", $rightsubnet_spec) . "\n"; + if (!empty($leftsubnet_spec)) + $ipsecconf .= "\tleftsubnet = " . join(",", $leftsubnet_spec) . "\n"; + if (!empty($ealgosp1)) + $ipsecconf .= "\t{$ealgosp1}\n"; + if (!empty($ealgoAHsp2arr)) + $ipsecconf .= "\tah = " . join(',', $ealgoAHsp2arr) . "!\n"; + if (!empty($ealgoESPsp2arr)) { + file_put_contents("/var/etc/ipsec/dump_test", print_r($ealgoESPsp2arr, true)); + $ipsecconf .= "\tesp = " . join(',', $ealgoESPsp2arr) . "!\n"; + } + if (!empty($authentication)) + $ipsecconf .= "\t{$authentication}\n"; + if (!empty($peerid_spec)) + $ipsecconf .= "\trightid = {$peerid_spec}\n"; + } + } + } + @file_put_contents("{$g['varetc_path']}/ipsec/ipsec.conf", $ipsecconf); + unset($ipsecconf); + /* end ipsec.conf */ + + /* mange process */ + if (isvalidpid("{$g['varrun_path']}/charon.pid")) { + /* Read secrets */ + mwexec("/usr/local/sbin/ipsec rereadall", false); + /* Update configuration changes */ + mwexec("/usr/local/sbin/ipsec reload", false); + } else { + mwexec("/usr/local/sbin/ipsec start", false); + } + + if ($natfilterrules == true) + filter_configure(); + /* start filterdns, if necessary */ + if (count($filterdns_list) > 0) { + $interval = 60; + if (!empty($ipseccfg['dns-interval']) && is_numeric($ipseccfg['dns-interval'])) + $interval = $ipseccfg['dns-interval']; + + $hostnames = ""; + array_unique($filterdns_list); + foreach ($filterdns_list as $hostname) + $hostnames .= "cmd {$hostname} '/usr/local/sbin/pfSctl -c \"service reload ipsecdns\"'\n"; + file_put_contents("{$g['varetc_path']}/ipsec/filterdns-ipsec.hosts", $hostnames); + unset($hostnames); + + if (isvalidpid("{$g['varrun_path']}/filterdns-ipsec.pid")) + sigkillbypid("{$g['varrun_path']}/filterdns-ipsec.pid", "HUP"); + else { + mwexec("/usr/local/sbin/filterdns -p {$g['varrun_path']}/filterdns-ipsec.pid -i {$interval} -c {$g['varetc_path']}/ipsec/filterdns-ipsec.hosts -d 1"); + } + } else { + killbypid("{$g['varrun_path']}/filterdns-ipsec.pid"); + @unlink("{$g['varrun_path']}/filterdns-ipsec.pid"); + } + + if ($g['booting']) + echo "done\n"; + + return count($filterdns_list); +} + +/* + * Forcefully restart IPsec + * This is required for when dynamic interfaces reload + * For all other occasions the normal vpn_ipsec_configure() + * will gracefully reload the settings without restarting + */ +function vpn_ipsec_force_reload($interface = "") { + global $g, $config; + + $ipseccfg = $config['ipsec']; + + if (!empty($interface) && is_array($ipseccfg['phase1'])) { + $found = false; + foreach ($ipseccfg['phase1'] as $ipsec) { + if (!isset($ipsec['disabled']) && ($ipsec['interface'] == $interface)) { + $found = true; + break; + } + } + if (!$found) { + log_error(sprintf(gettext("Ignoring IPsec reload since there are no tunnels on interface %s"), $interface)); + return; + } + } + + /* if ipsec is enabled, start up again */ + if (isset($ipseccfg['enable'])) { + log_error(gettext("Forcefully reloading IPsec")); + vpn_ipsec_configure(); + } +} + +/* master setup for vpn (mpd) */ +function vpn_setup() { + global $g; + + if ($g['platform'] == 'jail') + return; + + /* start pptpd */ + vpn_pptpd_configure(); + + /* start pppoe server */ + vpn_pppoes_configure(); + + /* setup l2tp */ + vpn_l2tp_configure(); +} + +function vpn_netgraph_support() { + $iflist = get_configured_interface_list(); + foreach ($iflist as $iface) { + $realif = get_real_interface($iface); + /* Get support for netgraph(4) from the nic */ + $ifinfo = pfSense_get_interface_addresses($realif); + if (!empty($ifinfo) && in_array($ifinfo['iftype'], array("ether", "vlan", "bridge"))) + pfSense_ngctl_attach(".", $realif); + } +} + +function vpn_pptpd_configure() { + global $config, $g; + + $syscfg = $config['system']; + $pptpdcfg = $config['pptpd']; + + if ($g['booting']) { + if (!$pptpdcfg['mode'] || ($pptpdcfg['mode'] == "off")) + return 0; + + echo gettext("Configuring PPTP VPN service... "); + } else { + /* kill mpd */ + killbypid("{$g['varrun_path']}/pptp-vpn.pid"); + + /* wait for process to die */ + sleep(3); + + if (is_process_running("mpd -b")) { + killbypid("{$g['varrun_path']}/pptp-vpn.pid"); + log_error(gettext("Could not kill mpd within 3 seconds. Trying again.")); + } + + /* remove mpd.conf, if it exists */ + unlink_if_exists("{$g['varetc_path']}/pptp-vpn/mpd.conf"); + unlink_if_exists("{$g['varetc_path']}/pptp-vpn/mpd.links"); + unlink_if_exists("{$g['varetc_path']}/pptp-vpn/mpd.secret"); + } + + if (empty($pptpdcfg['n_pptp_units'])) { + log_error("Something wrong in the PPTPd configuration. Preventing starting the daemon because issues would arise."); + return; + } + + /* make sure pptp-vpn directory exists */ + if (!file_exists("{$g['varetc_path']}/pptp-vpn")) + mkdir("{$g['varetc_path']}/pptp-vpn"); + + switch ($pptpdcfg['mode']) { + case 'server' : + /* write mpd.conf */ + $fd = fopen("{$g['varetc_path']}/pptp-vpn/mpd.conf", "w"); + if (!$fd) { + printf(gettext("Error: cannot open mpd.conf in vpn_pptpd_configure().") . "\n"); + return 1; + } + + $mpdconf = << 1) ? $pptpdcfg['radius']['server']['port'] : 1812; + $acctport = $authport + 1; + $mpdconf .=<< 1) ? $pptpdcfg['radius']['server2']['port'] : 1812; + $acctport = $authport + 1; + $mpdconf .=<< diff --git a/etc/inc/vslb.inc b/etc/inc/vslb.inc new file mode 100644 index 000000000..49089a242 --- /dev/null +++ b/etc/inc/vslb.inc @@ -0,0 +1,560 @@ +conf = $config; + } + + public function p() { + return "check {$this->get('proto')}"; + } + private function get($var) { + return isset($this->$var) ? $this->$var : ""; + } + protected function config($element) { + return isset($this->conf[$element]) ? $this->conf[$element] : ""; + } +} + +class TCPMonitor extends Monitor { + protected $proto = 'tcp'; +} + +class SSLMonitor extends Monitor { + protected $proto = 'ssl'; +} + +class ICMPMonitor extends Monitor { + protected $proto = 'icmp'; +} + +class HTTPMonitor extends Monitor { + protected $proto = 'http'; + function __construct($config) { + parent::__construct($config); + } + public function p() { + $method = ($this->code() != "") ? $this->code() : $this->digest(); + return "check {$this->proto} {$this->path()} {$this->host()} {$method}"; + } + + private function path() { + return $this->config('path') != "" ? "'{$this->config('path')}'" : ""; + } + + private function host() { + return $this->config('host') != "" ? "host {$this->config('host')}" : ""; + } + + private function code() { + return $this->config('code') != "" ? "code {$this->config('code')}" : ""; + } + + private function digest() { + return $this->config('digest') != "" ? "digest {$this->config('digest')}" : ""; + } +} + +class HTTPSMonitor extends HTTPMonitor { + protected $proto = 'https'; +} + +class SendMonitor extends Monitor { + private $proto = 'send'; + function __construct($config) { + parent::__construct($config); + } + public function p() { + return "check {$this->proto} {$this->data()} expect {$this->pattern()} {$this->ssl()}"; + } + + + private function data() { + return $this->config('send') != "" ? "\"{$this->config('send')}\"" : "\"\""; + } + + private function pattern() { + return $this->config('expect') != "" ? "\"{$this->config('expect')}\"" : "\"\""; + } + + private function ssl() { + return $this->config('ssl') == true ? "ssl" : ""; + } +} + +function echo_lbaction($action) { + global $config; + + // Index actions by name + $actions_a = array(); + for ($i=0; isset($config['load_balancer']['lbaction'][$i]); $i++) + $actions_a[$config['load_balancer']['lbaction'][$i]['name']] = $config['load_balancer']['lbaction'][$i]; + + $ret = ""; + $ret .= "{$actions_a[$action]['direction']} {$actions_a[$action]['type']} {$actions_a[$action]['action']}"; + switch($actions_a[$action]['action']) { + case 'append': + $ret .= " \"{$actions_a[$action]['options']['value']}\" to \"{$actions_a[$action]['options']['akey']}\""; + break; + case 'change': + $ret .= " \"{$actions_a[$action]['options']['akey']}\" to \"{$actions_a[$action]['options']['value']}\""; + break; + case 'expect': + $ret .= " \"{$actions_a[$action]['options']['value']}\" from \"{$actions_a[$action]['options']['akey']}\""; + break; + case 'filter': + $ret .= " \"{$actions_a[$action]['options']['value']}\" from \"{$actions_a[$action]['options']['akey']}\""; + break; + case 'hash': + $ret .= " \"{$actions_a[$action]['options']['akey']}\""; + break; + case 'log': + $ret .= " \"{$actions_a[$action]['options']['akey']}\""; + break; + } + return $ret; +} + +function relayd_configure($kill_first=false) { + global $config, $g; + + // have to do this until every call to filter.inc is + // require_once() instead of require(). + if (!function_exists('filter_expand_alias_array')) { + require_once("filter.inc"); + } + + $vs_a = $config['load_balancer']['virtual_server']; + $pool_a = $config['load_balancer']['lbpool']; + $protocol_a = $config['load_balancer']['lbprotocol']; + $setting = $config['load_balancer']['setting']; + + $check_a = array(); + + foreach ((array)$config['load_balancer']['monitor_type'] as $type) { + switch($type['type']) { + case 'icmp': + $mon = new ICMPMonitor($type['options']); + break; + case 'tcp': + $mon = new TCPMonitor($type['options']); + break; + case 'http': + $mon = new HTTPMonitor($type['options']); + break; + case 'https': + $mon = new HTTPSMonitor($type['options']); + break; + case 'send': + $mon = new SendMonitor($type['options']); + break; + } + if($mon) { + $check_a[$type['name']] = $mon->p(); + } + } + + + $fd = fopen("{$g['varetc_path']}/relayd.conf", "w"); + $conf .= "log updates \n"; + + /* Global timeout, interval and prefork settings + if not specified by the user: + - use a 1000 ms timeout value as in pfsense 2.0.1 and above + - leave interval and prefork empty, relayd will use its default values */ + + if (isset($setting['timeout']) && !empty($setting['timeout'])) { + $conf .= "timeout ".$setting['timeout']." \n"; + } else { + $conf .= "timeout 1000 \n"; + } + + if (isset($setting['interval']) && !empty($setting['interval'])) { + $conf .= "interval ".$setting['interval']." \n"; + } + + if (isset($setting['prefork']) && !empty($setting['prefork'])) { + $conf .= "prefork ".$setting['prefork']." \n"; + } + + /* reindex pools by name as we loop through the pools array */ + $pools = array(); + /* Virtual server pools */ + if(is_array($pool_a)) { + for ($i = 0; isset($pool_a[$i]); $i++) { + if(is_array($pool_a[$i]['servers'])) { + if (!empty($pool_a[$i]['retry'])) { + $retrytext = " retry {$pool_a[$i]['retry']}"; + } else { + $retrytext = ""; + } + $conf .= "table <{$pool_a[$i]['name']}> {\n"; + foreach ($pool_a[$i]['servers'] as $server) { + if (is_subnetv4($server)) { + foreach (subnetv4_expand($server) as $ip) { + $conf .= "\t{$ip}{$retrytext}\n"; + } + } + else { + $conf .= "\t{$server}{$retrytext}\n"; + } + } + $conf .= "}\n"; + /* Index by name for easier fetching when we loop through the virtual servers */ + $pools[$pool_a[$i]['name']] = $pool_a[$i]; + } + } + } +// if(is_array($protocol_a)) { +// for ($i = 0; isset($protocol_a[$i]); $i++) { +// $proto = "{$protocol_a[$i]['type']} protocol \"{$protocol_a[$i]['name']}\" {\n"; +// if(is_array($protocol_a[$i]['lbaction'])) { +// if($protocol_a[$i]['lbaction'][0] == "") { +// continue; +// } +// for ($a = 0; isset($protocol_a[$i]['lbaction'][$a]); $a++) { +// $proto .= " " . echo_lbaction($protocol_a[$i]['lbaction'][$a]) . "\n"; +// } +// } +// $proto .= "}\n"; +// $conf .= $proto; +// } +// } + + $conf .= "dns protocol \"dnsproto\" {\n"; + $conf .= "\t" . "tcp { nodelay, sack, socket buffer 1024, backlog 1000 }\n"; + $conf .= "}\n"; + + if(is_array($vs_a)) { + for ($i = 0; isset($vs_a[$i]); $i++) { + + $append_port_to_name = false; + if (is_alias($pools[$vs_a[$i]['poolname']]['port'])) { + $dest_port_array = filter_expand_alias_array($pools[$vs_a[$i]['poolname']]['port']); + $append_port_to_name = true; + } + else { + $dest_port_array = array($pools[$vs_a[$i]['poolname']]['port']); + } + if (is_alias($vs_a[$i]['port'])) { + $src_port_array = filter_expand_alias_array($vs_a[$i]['port']); + $append_port_to_name = true; + } + else if ($vs_a[$i]['port']) { + $src_port_array = array($vs_a[$i]['port']); + } + else { + $src_port_array = $dest_port_array; + } + + $append_ip_to_name = false; + if (is_alias($vs_a[$i]['ipaddr'])) { + $ip_list = array(); + foreach (filter_expand_alias_array($vs_a[$i]['ipaddr']) as $item) { + log_error("item is $item"); + if (is_subnetv4($item)) { + $ip_list = array_merge($ip_list, subnetv4_expand($item)); + } + else { + $ip_list[] = $item; + } + } + $append_ip_to_name = true; + } + else if (is_subnetv4($vs_a[$i]['ipaddr'])) { + $ip_list = subnetv4_expand($vs_a[$i]['ipaddr']); + $append_ip_to_name = true; + } + else { + $ip_list = array($vs_a[$i]['ipaddr']); + } + + for ($j = 0; $j < count($ip_list); $j += 1) { + $ip = $ip_list[$j]; + for ($k = 0; $k < count($src_port_array) && $k < count($dest_port_array); $k += 1) { + $src_port = $src_port_array[$k]; + $dest_port = $dest_port_array[$k]; + + $name = $vs_a[$i]['name']; + if ($append_ip_to_name) { + $name .= "_" . $j; + } + if ($append_port_to_name) { + $name .= "_" . $src_port; + } + + if (($vs_a[$i]['mode'] == 'relay') || ($vs_a[$i]['relay_protocol'] == 'dns')) { + $conf .= "relay \"{$name}\" {\n"; + $conf .= " listen on {$ip} port {$src_port}\n"; + + if ($vs_a[$i]['relay_protocol'] == "dns") { + $conf .= " protocol \"dnsproto\"\n"; + } else { + $conf .= " protocol \"{$vs_a[$i]['relay_protocol']}\"\n"; + } + $lbmode = ""; + if ( $pools[$vs_a[$i]['poolname']]['mode'] == "loadbalance" ) { + $lbmode = "mode loadbalance"; + } + + $conf .= " forward to <{$vs_a[$i]['poolname']}> port {$dest_port} {$lbmode} {$check_a[$pools[$vs_a[$i]['poolname']]['monitor']]} \n"; + + if (isset($vs_a[$i]['sitedown']) && strlen($vs_a[$i]['sitedown']) > 0 && ($vs_a[$i]['relay_protocol'] != 'dns')) + $conf .= " forward to <{$vs_a[$i]['sitedown']}> port {$dest_port} {$lbmode} {$check_a[$pools[$vs_a[$i]['poolname']]['monitor']]} \n"; + $conf .= "}\n"; + } else { + $conf .= "redirect \"{$name}\" {\n"; + $conf .= " listen on {$ip} port {$src_port}\n"; + $conf .= " forward to <{$vs_a[$i]['poolname']}> port {$dest_port} {$check_a[$pools[$vs_a[$i]['poolname']]['monitor']]} \n"; + + if (isset($config['system']['lb_use_sticky'])) + $conf .= " sticky-address\n"; + + /* sitedown MUST use the same port as the primary pool - sucks, but it's a relayd thing */ + if (isset($vs_a[$i]['sitedown']) && strlen($vs_a[$i]['sitedown']) > 0 && ($vs_a[$i]['relay_protocol'] != 'dns')) + $conf .= " forward to <{$vs_a[$i]['sitedown']}> port {$dest_port} {$check_a[$pools[$vs_a[$i]['sitedown']]['monitor']]} \n"; + + $conf .= "}\n"; + } + } + } + } + } + fwrite($fd, $conf); + fclose($fd); + + if (is_process_running('relayd')) { + if (! empty($vs_a)) { + if ($kill_first) { + mwexec('pkill relayd'); + /* Remove all active relayd anchors now that relayd is no longer running. */ + cleanup_lb_anchor("*"); + mwexec("/usr/local/sbin/relayd -f {$g['varetc_path']}/relayd.conf"); + } else { + // it's running and there is a config, just reload + mwexec("/usr/local/sbin/relayctl reload"); + } + } else { + /* + * XXX: Something breaks our control connection with relayd + * and makes 'relayctl stop' not work + * rule reloads are the current suspect + * mwexec('/usr/local/sbin/relayctl stop'); + * returns "command failed" + */ + mwexec('pkill relayd'); + /* Remove all active relayd anchors now that relayd is no longer running. */ + cleanup_lb_anchor("*"); + } + } else { + if (! empty($vs_a)) { + // not running and there is a config, start it + /* Remove all active relayd anchors so it can start fresh. */ + cleanup_lb_anchor("*"); + mwexec("/usr/local/sbin/relayd -f {$g['varetc_path']}/relayd.conf"); + } + } +} + +function get_lb_redirects() { +/* +# relayctl show summary +Id Type Name Avlblty Status +1 redirect testvs2 active +5 table test2:80 active (3 hosts up) +11 host 192.168.1.2 91.55% up +10 host 192.168.1.3 100.00% up +9 host 192.168.1.4 88.73% up +3 table test:80 active (1 hosts up) +7 host 192.168.1.2 66.20% down +6 host 192.168.1.3 97.18% up +0 redirect testvs active +3 table test:80 active (1 hosts up) +7 host 192.168.1.2 66.20% down +6 host 192.168.1.3 97.18% up +4 table testvs-sitedown:80 active (1 hosts up) +8 host 192.168.1.4 84.51% up +# relayctl show redirects +Id Type Name Avlblty Status +1 redirect testvs2 active +0 redirect testvs active +# relayctl show redirects +Id Type Name Avlblty Status +1 redirect testvs2 active + total: 2 sessions + last: 2/60s 2/h 2/d sessions + average: 1/60s 0/h 0/d sessions +0 redirect testvs active +*/ + $rdr_a = array(); + exec('/usr/local/sbin/relayctl show redirects 2>&1', $rdr_a); + $relay_a = array(); + exec('/usr/local/sbin/relayctl show relays 2>&1', $relay_a); + $vs = array(); + $cur_entry = ""; + for ($i = 0; isset($rdr_a[$i]); $i++) { + $line = $rdr_a[$i]; + if (preg_match("/^[0-9]+/", $line)) { + $regs = array(); + if($x = preg_match("/^[0-9]+\s+redirect\s+([^\s]+)\s+([^\s]+)/", $line, $regs)) { + $cur_entry = trim($regs[1]); + $vs[trim($regs[1])] = array(); + $vs[trim($regs[1])]['status'] = trim($regs[2]); + } + } elseif (($x = preg_match("/^\s+total:\s(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['total'] = trim($regs[1]); + } elseif (($x = preg_match("/^\s+last:\s(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['last'] = trim($regs[1]); + } elseif (($x = preg_match("/^\s+average:(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['average'] = trim($regs[1]); + } + } + $cur_entry = ""; + for ($i = 0; isset($relay_a[$i]); $i++) { + $line = $relay_a[$i]; + if (preg_match("/^[0-9]+/", $line)) { + $regs = array(); + if($x = preg_match("/^[0-9]+\s+relay\s+([^\s]+)\s+([^\s]+)/", $line, $regs)) { + $cur_entry = trim($regs[1]); + $vs[trim($regs[1])] = array(); + $vs[trim($regs[1])]['status'] = trim($regs[2]); + } + } elseif (($x = preg_match("/^\s+total:\s(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['total'] = trim($regs[1]); + } elseif (($x = preg_match("/^\s+last:\s(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['last'] = trim($regs[1]); + } elseif (($x = preg_match("/^\s+average:(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['average'] = trim($regs[1]); + } + } + return $vs; +} + +function get_lb_summary() { + $relayctl = array(); + exec('/usr/local/sbin/relayctl show summary 2>&1', $relayctl); + $relay_hosts=Array(); + foreach( (array) $relayctl as $line) { + $t = explode("\t", $line); + switch (trim($t[1])) { + case "table": + $curpool=trim($t[2]); + break; + case "host": + $curhost=trim($t[2]); + $relay_hosts[$curpool][$curhost]['avail']=trim($t[3]); + $relay_hosts[$curpool][$curhost]['state']=trim($t[4]); + break; + } + } + return $relay_hosts; +} + +/* Get a list of all relayd virtual server anchors */ +function get_lb_anchors() { + /* NOTE: These names come back prepended with "relayd/" e.g. "relayd/MyVSName" */ + return explode("\n", trim(`/sbin/pfctl -sA -a relayd | /usr/bin/awk '{print $1;}'`)); +} + +/* Remove NAT rules from a relayd anchor that is no longer in use. + $anchorname can either be * to clear all anchors or a specific anchor name.*/ +function cleanup_lb_anchor($anchorname = "*") { + $lbanchors = get_lb_anchors(); + foreach ($lbanchors as $lba) { + if (($anchorname == "*") || ($lba == "relayd/{$anchorname}")) { + /* Flush both the NAT and the Table for the anchor, so it will be completely removed by pf. */ + mwexec("/sbin/pfctl -a " . escapeshellarg($lba) . " -F nat"); + mwexec("/sbin/pfctl -a " . escapeshellarg($lba) . " -F Tables"); + } + } +} + +/* Mark an anchor for later cleanup. This will allow us to remove an old VS name */ +function cleanup_lb_mark_anchor($name) { + global $g; + /* Nothing to do! */ + if (empty($name)) + return; + $filename = "{$g['tmp_path']}/relayd_anchors_remove"; + $cleanup_anchors = array(); + /* Read in any currently unapplied name changes */ + if (file_exists($filename)) + $cleanup_anchors = explode("\n", file_get_contents($filename)); + /* Only add the anchor to the list if it's not already there. */ + if (!in_array($name, $cleanup_anchors)) + $cleanup_anchors[] = $name; + file_put_contents($filename, implode("\n", $cleanup_anchors)); +} + +/* Cleanup relayd anchors that have been marked for cleanup. */ +function cleanup_lb_marked() { + global $g, $config; + $filename = "{$g['tmp_path']}/relayd_anchors_remove"; + $cleanup_anchors = array(); + /* Nothing to do! */ + if (!file_exists($filename)) { + return; + } else { + $cleanup_anchors = explode("\n", file_get_contents($filename)); + /* Nothing to do! */ + if (empty($cleanup_anchors)) + return; + } + + /* Load current names so we can make sure we don't remove an anchor that is still in use. */ + $vs_a = $config['load_balancer']['virtual_server']; + $active_vsnames = array(); + if(is_array($vs_a)) { + foreach ($vs_a as $vs) { + $active_vsnames[] = $vs['name']; + } + } + + foreach ($cleanup_anchors as $anchor) { + /* Only cleanup an anchor if it is not still active. */ + if (!in_array($anchor, $active_vsnames)) { + cleanup_lb_anchor($anchor); + } + } + unlink_if_exists($filename); +} + +?> diff --git a/etc/inc/wizardapp.inc b/etc/inc/wizardapp.inc new file mode 100644 index 000000000..53bd7ac30 --- /dev/null +++ b/etc/inc/wizardapp.inc @@ -0,0 +1,663 @@ + diff --git a/etc/inc/xmlparse.inc b/etc/inc/xmlparse.inc new file mode 100644 index 000000000..3b3271984 --- /dev/null +++ b/etc/inc/xmlparse.inc @@ -0,0 +1,326 @@ +. + 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. +*/ + +/* The following items will be treated as arrays in config.xml */ +function listtags() { + /* + * Please keep this list alpha sorted and no longer than 80 characters + * I know it's a pain, but it's a pain to find stuff too if it's not + */ + $ret = array( + 'acls', 'alias', 'aliasurl', 'allowedip', 'allowedhostname', 'authserver', + 'bridged', 'build_port_path', + 'ca', 'cacert', 'cert', 'crl', 'clone', 'config', 'container', 'columnitem', + 'depends_on_package', 'disk', 'dnsserver', 'dnsupdate', 'domainoverrides', 'dyndns', + 'earlyshellcmd', 'element', 'encryption-algorithm-option', + 'field', 'fieldname', + 'gateway_item', 'gateway_group', 'gif', 'gre', 'group', + 'hash-algorithm-option', 'hosts', 'member', 'ifgroupentry', 'igmpentry', 'interface_array', 'item', 'key', + 'lagg', 'lbaction', 'lbpool', 'l7rules', 'lbprotocol', + 'member', 'menu', 'tab', 'mobilekey', 'monitor_type', 'mount', + 'npt', 'ntpserver', + 'onetoone', 'openvpn-server', 'openvpn-client', 'openvpn-csc', 'option', + 'package', 'passthrumac', 'phase1', 'phase2', 'ppp', 'pppoe', 'priv', 'proxyarpnet', 'pool', + 'qinqentry', 'queue', + 'pages', 'pipe', 'radnsserver', 'roll', 'route', 'row', 'rrddatafile', 'rule', + 'schedule', 'service', 'servernat', 'servers', + 'serversdisabled', 'shellcmd', 'staticmap', 'subqueue', + 'timerange', 'tunnel', 'user', 'vip', 'virtual_server', 'vlan', + 'winsserver', 'wolentry', 'widget' + ); + return array_flip($ret); +} + +/* Package XML tags that should be treat as a list not as a traditional array */ +function listtags_pkg() { + $ret = array('build_port_path', 'depends_on_package', 'onetoone', 'queue', 'rule', 'servernat', 'alias', 'additional_files_needed', 'tab', 'template', 'menu', 'rowhelperfield', 'service', 'step', 'package', 'columnitem', 'option', 'item', 'field', 'package', 'file'); + + return array_flip($ret); +} + +function startElement($parser, $name, $attrs) { + global $parsedcfg, $depth, $curpath, $havedata, $listtags; + + array_push($curpath, strtolower($name)); + + $ptr =& $parsedcfg; + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + } + + /* is it an element that belongs to a list? */ + if (isset($listtags[strtolower($name)])) { + + /* is there an array already? */ + if (!is_array($ptr)) { + /* make an array */ + $ptr = array(); + } + + array_push($curpath, count($ptr)); + + } else if (isset($ptr)) { + /* multiple entries not allowed for this element, bail out */ + die(sprintf(gettext('XML error: %1$s at line %2$d cannot occur more than once') . "\n", + $name, + xml_get_current_line_number($parser))); + } + + $depth++; + $havedata = $depth; +} + +function endElement($parser, $name) { + global $depth, $curpath, $parsedcfg, $havedata, $listtags; + + if ($havedata == $depth) { + $ptr =& $parsedcfg; + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + } + $ptr = ""; + } + + array_pop($curpath); + + if (isset($listtags[strtolower($name)])) + array_pop($curpath); + + $depth--; +} + +function cData($parser, $data) { + global $depth, $curpath, $parsedcfg, $havedata; + + $data = trim($data, "\t\n\r"); + + if ($data != "") { + $ptr =& $parsedcfg; + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + } + + if (is_string($ptr)) { + $ptr .= html_entity_decode($data); + } else { + if (trim($data, " ") != "") { + $ptr = html_entity_decode($data); + $havedata++; + } + } + } +} + +function parse_xml_config($cffile, $rootobj, $isstring = "false") { + global $listtags; + $listtags = listtags(); + if (isset($GLOBALS['custom_listtags'])) { + foreach($GLOBALS['custom_listtags'] as $tag) { + $listtags[$tag] = $tag; + } + } + return parse_xml_config_raw($cffile, $rootobj, $isstring); +} + +function parse_xml_config_pkg($cffile, $rootobj, $isstring = "false") { + global $listtags; + $listtags = listtags_pkg(); + if (isset($GLOBALS['custom_listtags_pkg'])) { + foreach($GLOBALS['custom_listtags_pkg'] as $tag) { + $listtags[$tag] = $tag; + } + } + $cfg =parse_xml_config_raw($cffile, $rootobj, $isstring); + if ($cfg == -1) + return array(); + + return $cfg; +} + +function parse_xml_config_raw($cffile, $rootobj, $isstring = "false") { + + global $depth, $curpath, $parsedcfg, $havedata, $listtags; + $parsedcfg = array(); + $curpath = array(); + $depth = 0; + $havedata = 0; + + $xml_parser = xml_parser_create(); + + xml_set_element_handler($xml_parser, "startElement", "endElement"); + xml_set_character_data_handler($xml_parser, "cdata"); + xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE, 1); + + if (!($fp = fopen($cffile, "r"))) { + log_error(gettext("Error: could not open XML input") . "\n"); + return -1; + } + + while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + log_error(sprintf(gettext('XML error: %1$s at line %2$d in %3$s') . "\n", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser), + $cffile)); + return -1; + } + } + xml_parser_free($xml_parser); + + if ($rootobj) { + if (!is_array($rootobj)) + $rootobj = array($rootobj); + foreach ($rootobj as $rootobj_name) + if ($parsedcfg[$rootobj_name]) + break; + + if (!$parsedcfg[$rootobj_name]) { + log_error(sprintf(gettext("XML error: no %s object found!") . "\n", implode(" or ", $rootobj))); + return -1; + } + return $parsedcfg[$rootobj_name]; + } else { + return $parsedcfg; + } +} + +function dump_xml_config_sub($arr, $indent) { + + global $listtags; + + $xmlconfig = ""; + + foreach ($arr as $ent => $val) { + if (is_array($val)) { + /* is it just a list of multiple values? */ + if (isset($listtags[strtolower($ent)])) { + foreach ($val as $cval) { + if (is_array($cval)) { + if (empty($cval)) { + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "<$ent/>\n"; + } else { + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "<$ent>\n"; + $xmlconfig .= dump_xml_config_sub($cval, $indent + 1); + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "\n"; + } + } else { + if($cval === false) continue; + $xmlconfig .= str_repeat("\t", $indent); + if((is_bool($cval) && $cval == true) || ($cval === "")) { + $xmlconfig .= "<$ent/>\n"; + } else if ((substr($ent, 0, 5) == "descr") + || (substr($ent, 0, 6) == "detail") + || (substr($ent, 0, 12) == "login_banner") + || (substr($ent, 0, 9) == "ldap_attr") + || (substr($ent, 0, 9) == "ldap_bind") + || (substr($ent, 0, 11) == "ldap_basedn") + || (substr($ent, 0, 18) == "ldap_authcn") + || (substr($ent, 0, 19) == "ldap_extended_query")) { + $xmlconfig .= "<$ent>\n"; + } else { + $xmlconfig .= "<$ent>" . htmlentities($cval) . "\n"; + } + } + } + } else if (empty($val)) { + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "<$ent/>\n"; + } else { + /* it's an array */ + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "<$ent>\n"; + $xmlconfig .= dump_xml_config_sub($val, $indent + 1); + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "\n"; + } + } else { + if ((is_bool($val) && ($val == true)) || ($val === "")) { + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "<$ent/>\n"; + } else if (!is_bool($val)) { + $xmlconfig .= str_repeat("\t", $indent); + if ((substr($ent, 0, 5) == "descr") + || (substr($ent, 0, 6) == "detail") + || (substr($ent, 0, 12) == "login_banner") + || (substr($ent, 0, 9) == "ldap_attr") + || (substr($ent, 0, 9) == "ldap_bind") + || (substr($ent, 0, 11) == "ldap_basedn") + || (substr($ent, 0, 18) == "ldap_authcn") + || (substr($ent, 0, 19) == "ldap_extended_query")) + $xmlconfig .= "<$ent>\n"; + else + $xmlconfig .= "<$ent>" . htmlentities($val) . "\n"; + } + } + } + + return $xmlconfig; +} + +function dump_xml_config($arr, $rootobj) { + global $listtags; + $listtags = listtags(); + if (isset($GLOBALS['custom_listtags'])) { + foreach($GLOBALS['custom_listtags'] as $tag) { + $listtags[$tag] = $tag; + } + } + return dump_xml_config_raw($arr, $rootobj); +} + +function dump_xml_config_pkg($arr, $rootobj) { + global $listtags; + $listtags = listtags_pkg(); + if (isset($GLOBALS['custom_listtags_pkg'])) { + foreach($GLOBALS['custom_listtags_pkg'] as $tag) { + $listtags[$tag] = $tag; + } + } + return dump_xml_config_raw($arr, $rootobj); +} + +function dump_xml_config_raw($arr, $rootobj) { + + $xmlconfig = "\n"; + $xmlconfig .= "<$rootobj>\n"; + + $xmlconfig .= dump_xml_config_sub($arr, 1); + + $xmlconfig .= "\n"; + + return $xmlconfig; +} + +?> diff --git a/etc/inc/xmlparse_attr.inc b/etc/inc/xmlparse_attr.inc new file mode 100644 index 000000000..933caba69 --- /dev/null +++ b/etc/inc/xmlparse_attr.inc @@ -0,0 +1,227 @@ +. + 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. +*/ + +/* The following items will be treated as arrays in regdomain.xml */ +function listtags_rd() { + $ret = explode(" ", + "band country flags freqband netband rd" + ); + return $ret; +} + +function startElement_attr($parser, $name, $attrs) { + global $parsedcfg, $depth, $curpath, $havedata, $listtags, $parsedattrs; + + array_push($curpath, strtolower($name)); + + $ptr =& $parsedcfg; + if (!empty($attrs)) { + $attrptr =& $parsedattrs; + $writeattrs = true; + } + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + if (isset($writeattrs)) + $attrptr =& $attrptr[$path]; + } + + /* is it an element that belongs to a list? */ + if (in_array(strtolower($name), $listtags)) { + + /* is there an array already? */ + if (!is_array($ptr)) { + /* make an array */ + $ptr = array(); + } + + array_push($curpath, count($ptr)); + + if (isset($writeattrs)) { + if (!is_array($attrptr)) + $attrptr = array(); + $attrptr[count($ptr)] = $attrs; + } + + } else if (isset($ptr)) { + /* multiple entries not allowed for this element, bail out */ + die(sprintf(gettext('XML error: %1$s at line %2$d cannot occur more than once') . "\n", + $name, + xml_get_current_line_number($parser))); + } else if (isset($writeattrs)) { + $attrptr = $attrs; + } + + $depth++; + $havedata = $depth; +} + +function endElement_attr($parser, $name) { + global $depth, $curpath, $parsedcfg, $havedata, $listtags; + + if ($havedata == $depth) { + $ptr =& $parsedcfg; + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + } + $ptr = ""; + } + + array_pop($curpath); + + if (in_array(strtolower($name), $listtags)) + array_pop($curpath); + + $depth--; +} + +function cData_attr($parser, $data) { + global $depth, $curpath, $parsedcfg, $havedata; + + $data = trim($data, "\t\n\r"); + + if ($data != "") { + $ptr =& $parsedcfg; + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + } + + if (is_string($ptr)) { + $ptr .= html_entity_decode($data); + } else { + if (trim($data, " ") != "") { + $ptr = html_entity_decode($data); + $havedata++; + } + } + } +} + +function parse_xml_regdomain(&$rdattributes, $rdfile = '', $rootobj = 'regulatory-data') { + global $g, $listtags; + + if (empty($rdfile)) + $rdfile = $g['etc_path'] . '/regdomain.xml'; + $listtags = listtags_rd(); + $parsed_xml = array(); + + if (file_exists($g['tmp_path'] . '/regdomain.cache')) { + $parsed_xml = unserialize(file_get_contents($g['tmp_path'] . '/regdomain.cache')); + if (!empty($parsed_xml)) { + $rdmain = $parsed_xml['main']; + $rdattributes = $parsed_xml['attributes']; + } + } + if (empty($parsed_xml) && file_exists($g['etc_path'] . '/regdomain.xml')) { + $rdmain = parse_xml_config_raw_attr($rdfile, $rootobj, $rdattributes); + + // unset parts that aren't used before making cache + foreach ($rdmain['regulatory-domains']['rd'] as $rdkey => $rdentry) { + if (isset($rdmain['regulatory-domains']['rd'][$rdkey]['netband'])) + unset($rdmain['regulatory-domains']['rd'][$rdkey]['netband']); + if (isset($rdattributes['regulatory-domains']['rd'][$rdkey]['netband'])) + unset($rdattributes['regulatory-domains']['rd'][$rdkey]['netband']); + } + if (isset($rdmain['shared-frequency-bands'])) + unset($rdmain['shared-frequency-bands']); + if (isset($rdattributes['shared-frequency-bands'])) + unset($rdattributes['shared-frequency-bands']); + + $parsed_xml = array('main' => $rdmain, 'attributes' => $rdattributes); + $rdcache = fopen($g['tmp_path'] . '/regdomain.cache', "w"); + fwrite($rdcache, serialize($parsed_xml)); + fclose($rdcache); + } + + return $rdmain; +} + +function parse_xml_config_raw_attr($cffile, $rootobj, &$parsed_attributes, $isstring = "false") { + + global $depth, $curpath, $parsedcfg, $havedata, $listtags, $parsedattrs; + $parsedcfg = array(); + $curpath = array(); + $depth = 0; + $havedata = 0; + + if (isset($parsed_attributes)) + $parsedattrs = array(); + + $xml_parser = xml_parser_create(); + + xml_set_element_handler($xml_parser, "startElement_attr", "endElement_attr"); + xml_set_character_data_handler($xml_parser, "cData_attr"); + xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE, 1); + + if (!($fp = fopen($cffile, "r"))) { + log_error(gettext("Error: could not open XML input") . "\n"); + if (isset($parsed_attributes)) { + $parsed_attributes = array(); + unset($parsedattrs); + } + return -1; + } + + while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + log_error(sprintf(gettext('XML error: %1$s at line %2$d') . "\n", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser))); + if (isset($parsed_attributes)) { + $parsed_attributes = array(); + unset($parsedattrs); + } + return -1; + } + } + xml_parser_free($xml_parser); + + if (!$parsedcfg[$rootobj]) { + log_error(sprintf(gettext("XML error: no %s object found!") . "\n", $rootobj)); + if (isset($parsed_attributes)) { + $parsed_attributes = array(); + unset($parsedattrs); + } + return -1; + } + + if (isset($parsed_attributes)) { + if ($parsedattrs[$rootobj]) + $parsed_attributes = $parsedattrs[$rootobj]; + unset($parsedattrs); + } + + return $parsedcfg[$rootobj]; +} + +?> diff --git a/etc/inc/xmlreader.inc b/etc/inc/xmlreader.inc new file mode 100644 index 000000000..6da34e1bb --- /dev/null +++ b/etc/inc/xmlreader.inc @@ -0,0 +1,266 @@ +. + 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. +*/ + +/* + pfSense_MODULE: utils +*/ + +/* The following items will be treated as arrays in config.xml */ +function listtags() { + /* + * Please keep this list alpha sorted and no longer than 80 characters + * I know it's a pain, but it's a pain to find stuff too if it's not + */ + $ret = array( + 'acls', 'alias', 'aliasurl', 'allowedip', 'allowedhostname', 'authserver', + 'bridged', 'build_port_path', + 'ca', 'cacert', 'cert', 'crl', 'clone', 'config', 'container', 'columnitem', + 'depends_on_package', 'disk', 'dnsserver', 'dnsupdate', 'domainoverrides', 'dyndns', + 'earlyshellcmd', 'element', 'encryption-algorithm-option', + 'field', 'fieldname', + 'gateway_item', 'gateway_group', 'gif', 'gre', 'group', + 'hash-algorithm-option', 'hosts', 'member', 'ifgroupentry', 'igmpentry', 'interface_array', 'item', 'key', + 'lagg', 'lbaction', 'lbpool', 'l7rules', 'lbprotocol', + 'member', 'menu', 'tab', 'mobilekey', 'monitor_type', 'mount', + 'npt', 'ntpserver', + 'onetoone', 'openvpn-server', 'openvpn-client', 'openvpn-csc', 'option', + 'package', 'passthrumac', 'phase1', 'phase2', 'ppp', 'pppoe', 'priv', 'proxyarpnet', 'pool', + 'qinqentry', 'queue', + 'pages', 'pipe', 'radnsserver', 'roll', 'route', 'row', 'rrddatafile', 'rule', + 'schedule', 'service', 'servernat', 'servers', + 'serversdisabled', 'shellcmd', 'staticmap', 'subqueue', + 'timerange', 'tunnel', 'user', 'vip', 'virtual_server', 'vlan', + 'winsserver', 'wolentry', 'widget' + ); + return array_flip($ret); +} + +/* Package XML tags that should be treat as a list not as a traditional array */ +function listtags_pkg() { + $ret = array('depends_on_package', 'onetoone', 'queue', 'rule', 'servernat', 'alias', 'additional_files_needed', 'tab', 'template', 'menu', 'rowhelperfield', 'service', 'step', 'package', 'columnitem', 'option', 'item', 'field', 'package', 'file'); + + return array_flip($ret); +} + +function add_elements(&$cfgarray, &$parser) { + global $listtags; + + while ($parser->read()) { + switch ($parser->nodeType) { + case XMLReader::WHITESPACE: + case XMLReader::SIGNIFICANT_WHITESPACE: + break; + case XMLReader::ELEMENT: + if (isset($listtags[strtolower($parser->name)])) { + $cfgref =& $cfgarray[$parser->name][count($cfgarray[$parser->name])]; + if (!$parser->isEmptyElement) { + add_elements($cfgref, $parser); + } else + $cfgref = array(); + + } else { + if (isset($cfgarray[$parser->name]) && (!is_array($cfgarray[$parser->name]) || !isset($cfgarray[$parser->name][0]))) { + $nodebkp = $cfgarray[$parser->name]; + $cfgarray[$parser->name] = array(); + $cfgarray[$parser->name][] = $nodebkp; + $cfgref =& $cfgarray[$parser->name][0]; + unset($nodebkp); + } else + $cfgref =& $cfgarray[$parser->name]; + + if ($parser->isEmptyElement) { + if (is_array($cfgref)) + $cfgref[] = array(); + else + $cfgref = ""; + } else { + if (is_array($cfgref)) { + $cfgref =& $cfgarray[$parser->name][count($cfgarray[$parser->name])]; + add_elements($cfgref, $parser); + } else + add_elements($cfgref, $parser); + } + } + + $i = 0; + while ($parser->moveToAttributeNo($i)) { + $cfgref[$parser->name] = $parser->value; + $i++; + } + break; + case XMLReader::TEXT: + case XMLReader::CDATA: + $cfgarray = $parser->value; + break; + case XMLReader::END_ELEMENT: + return; + break; + default: + break; + } + } +} + +function parse_xml_config($cffile, $rootobj, $isstring = "false") { + global $listtags; + + $listtags = listtags(); + if (isset($GLOBALS['custom_listtags'])) { + foreach($GLOBALS['custom_listtags'] as $tag) { + $listtags[$tag] = $tag; + } + } + + return parse_xml_config_raw($cffile, $rootobj); +} + +function parse_xml_config_pkg($cffile, $rootobj, $isstring = "false") { + global $listtags; + + $listtags = listtags_pkg(); + if (isset($GLOBALS['custom_listtags_pkg'])) { + foreach($GLOBALS['custom_listtags_pkg'] as $tag) { + $listtags[$tag] = $tag; + } + } + return parse_xml_config_raw($cffile, $rootobj, $isstring); +} + +function parse_xml_config_raw($cffile, $rootobj, $isstring = "false") { + global $listtags; + + $parsedcfg = array(); + + $par = new XMLReader(); + if ($par->open($cffile, "UTF-8", LIBXML_NOERROR | LIBXML_NOWARNING)) { + add_elements($parsedcfg, $par); + $par->close(); + } else + log_error(sprintf(gettext("Error returned while trying to parse %s"), $cffile)); + + if ($rootobj) { + if (!is_array($rootobj)) + $rootobj = array($rootobj); + foreach ($rootobj as $rootobj_name) + if ($parsedcfg[$rootobj_name]) + break; + + return $parsedcfg[$rootobj_name]; + } else { + return $parsedcfg; + } +} + +function dump_xml_config_sub(& $writer, $arr) { + global $listtags; + + foreach ($arr as $ent => $val) { + if (is_array($val)) { + /* is it just a list of multiple values? */ + if (isset($listtags[strtolower($ent)])) { + foreach ($val as $cval) { + if (is_array($cval)) { + if (empty($cval)) + $writer->writeElement($ent); + else { + $writer->startElement($ent); + dump_xml_config_sub($writer, $cval); + $writer->endElement(); + } + } else { + if($cval === false) continue; + if ((is_bool($val) && ($val == true)) || ($val === "")) + $writer->writeElement($ent); + else if (!is_bool($val)) + $writer->writeElement($ent, $cval); + } + } + } else if (empty($val)) { + $writer->writeElement($ent); + } else { + /* it's an array */ + $writer->startElement($ent); + dump_xml_config_sub($writer, $val); + $writer->endElement(); + } + } else { + if ((is_bool($val) && ($val == true)) || ($val === "")) + $writer->writeElement($ent); + else if (!is_bool($val)) + $writer->writeElement($ent, $val); + } + } +} + +function dump_xml_config($arr, $rootobj) { + global $listtags; + + $listtags = listtags(); + if (isset($GLOBALS['custom_listtags'])) { + foreach($GLOBALS['custom_listtags'] as $tag) { + $listtags[$tag] = $tag; + } + } + return dump_xml_config_raw($arr, $rootobj); +} + +function dump_xml_config_pkg($arr, $rootobj) { + global $listtags; + + $listtags = listtags_pkg(); + if (isset($GLOBALS['custom_listtags_pkg'])) { + foreach($GLOBALS['custom_listtags_pkg'] as $tag) { + $listtags[$tag] = $tag; + } + } + return dump_xml_config_raw($arr, $rootobj); +} + +function dump_xml_config_raw($arr, $rootobj) { + + $writer = new XMLWriter(); + $writer->openMemory(); + $writer->setIndent(true); + $writer->setIndentString("\t"); + $writer->startDocument("1.0", "UTF-8"); + $writer->startElement($rootobj); + + dump_xml_config_sub($writer, $arr); + + $writer->endElement(); + $writer->endDocument(); + $xmlconfig = $writer->outputMemory(true); + + return $xmlconfig; +} + +?> diff --git a/etc/inc/xmlrpc.inc b/etc/inc/xmlrpc.inc new file mode 100644 index 000000000..ca07cee5c --- /dev/null +++ b/etc/inc/xmlrpc.inc @@ -0,0 +1,144 @@ +getNumParams(); $i++) { + $value = $params->getParam($i); + $array[] = XML_RPC_decode($value); + } + return $array; +} + +/* + * xmlrpc_value_to_php: Convert an XMLRPC value into a PHP scalar/array and return it. + */ +function xmlrpc_value_to_php($raw_value) { + /* + switch($raw_value->kindOf()) { + case "scalar": + if($raw_value->scalartyp() == "boolean") $return = (boolean) $raw_value->scalarval(); + $return = $raw_value->scalarval(); + break; + case "array": + $return = array(); + for($i = 0; $i < $raw_value->arraysize(); $i++) { + $value = $raw_value->arraymem($i); + $return[] = xmlrpc_value_to_php($value); + } + break; + case "struct": + $return = array(); + for($i = 0; $i < $raw_value->arraysize(); $i++) { + list($key, $value) = $raw_value->structeach(); + $return[$key] = xmlrpc_value_to_php($value); + } + break; + } + */ + return XML_RPC_decode($raw_value); +} + +/* + * php_value_to_xmlrpc: Convert a PHP scalar or array into its XMLRPC equivalent. + */ +function php_value_to_xmlrpc($value, $force_array = false) { + $toreturn = XML_RPC_encode($value); + return $force_array ? array($toreturn) : $toreturn; + /* + if(gettype($value) == "array") { + $xmlrpc_type = "array"; + $toreturn = array(); + foreach($value as $key => $val) { + if(is_string($key)) $xmlrpc_type = "struct"; + $toreturn[$key] = php_value_to_xmlrpc($val); + } + return new XML_RPC_Value($toreturn, $xmlrpc_type); + } else { + if($force_array == true) { + return new XML_RPC_Value(array(new XML_RPC_Value($value, gettype($value))), "array"); + } else { + return new XML_RPC_Value($value, gettype($value)); + } + } + */ +} + +/* + * xmlrpc_auth: Handle basic crypt() authentication of an XMLRPC request. This function assumes that + * $params[0] contains the local system's plaintext password and removes the password from + * the array before returning it. + */ +function xmlrpc_auth(&$params) { + global $config, $_SERVER; + + /* XXX: Should teach caller to pass username and use it here. */ + /* XXX: Should clarify from old behaviour what is in params[0] that differs from params['xmlrpcauth'] */ + if (isset($config['system']['webgui']['authmode'])) { + $authcfg = auth_get_authserver($config['system']['webgui']['authmode']); + if (authenticate_user("admin", $params[0], $authcfg) || + authenticate_user("admin", $params[0])) { + array_shift($params); + unset($params['xmlrpcauth']); + return true; + } else if (!empty($params['xmlrpcauth']) && (authenticate_user("admin", $params['xmlrpcauth'], $authcfg) || + authenticate_user("admin", $params['xmlrpcauth']))) { + array_shift($params); + unset($params['xmlrpcauth']); + return true; + } + } else if (authenticate_user("admin", $params[0])) { + array_shift($params); + unset($params['xmlrpcauth']); + return true; + } else if (!empty($params['xmlrpcauth']) && authenticate_user("admin", $params['xmlrpcauth'])) { + array_shift($params); + unset($params['xmlrpcauth']); + return true; + } + + array_shift($params); + unset($params['xmlrpcauth']); + log_error("webConfigurator authentication error for 'admin' from {$_SERVER['REMOTE_ADDR']} during sync settings."); + return false; +} + +?> diff --git a/etc/inc/xmlrpc_client.inc b/etc/inc/xmlrpc_client.inc new file mode 100644 index 000000000..fbbf97732 --- /dev/null +++ b/etc/inc/xmlrpc_client.inc @@ -0,0 +1,2060 @@ + + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version SVN: $Id: RPC.php 300961 2010-07-03 02:17:34Z danielc $ + * @link http://pear.php.net/package/XML_RPC + */ + + +if (!function_exists('xml_parser_create')) { + include_once 'PEAR.inc'; + PEAR::loadExtension('xml'); +} + +/**#@+ + * Error constants + */ +/** + * Parameter values don't match parameter types + */ +define('XML_RPC_ERROR_INVALID_TYPE', 101); +/** + * Parameter declared to be numeric but the values are not + */ +define('XML_RPC_ERROR_NON_NUMERIC_FOUND', 102); +/** + * Communication error + */ +define('XML_RPC_ERROR_CONNECTION_FAILED', 103); +/** + * The array or struct has already been started + */ +define('XML_RPC_ERROR_ALREADY_INITIALIZED', 104); +/** + * Incorrect parameters submitted + */ +define('XML_RPC_ERROR_INCORRECT_PARAMS', 105); +/** + * Programming error by developer + */ +define('XML_RPC_ERROR_PROGRAMMING', 106); +/**#@-*/ + + +/** + * Data types + * @global string $GLOBALS['XML_RPC_I4'] + */ +$GLOBALS['XML_RPC_I4'] = 'i4'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Int'] + */ +$GLOBALS['XML_RPC_Int'] = 'int'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Boolean'] + */ +$GLOBALS['XML_RPC_Boolean'] = 'boolean'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Double'] + */ +$GLOBALS['XML_RPC_Double'] = 'double'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_String'] + */ +$GLOBALS['XML_RPC_String'] = 'string'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_DateTime'] + */ +$GLOBALS['XML_RPC_DateTime'] = 'dateTime.iso8601'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Base64'] + */ +$GLOBALS['XML_RPC_Base64'] = 'base64'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Array'] + */ +$GLOBALS['XML_RPC_Array'] = 'array'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Struct'] + */ +$GLOBALS['XML_RPC_Struct'] = 'struct'; + + +/** + * Data type meta-types + * @global array $GLOBALS['XML_RPC_Types'] + */ +$GLOBALS['XML_RPC_Types'] = array( + $GLOBALS['XML_RPC_I4'] => 1, + $GLOBALS['XML_RPC_Int'] => 1, + $GLOBALS['XML_RPC_Boolean'] => 1, + $GLOBALS['XML_RPC_String'] => 1, + $GLOBALS['XML_RPC_Double'] => 1, + $GLOBALS['XML_RPC_DateTime'] => 1, + $GLOBALS['XML_RPC_Base64'] => 1, + $GLOBALS['XML_RPC_Array'] => 2, + $GLOBALS['XML_RPC_Struct'] => 3, +); + + +/** + * Error message numbers + * @global array $GLOBALS['XML_RPC_err'] + */ +$GLOBALS['XML_RPC_err'] = array( + 'unknown_method' => 1, + 'invalid_return' => 2, + 'incorrect_params' => 3, + 'introspect_unknown' => 4, + 'http_error' => 5, + 'not_response_object' => 6, + 'invalid_request' => 7, +); + +/** + * Error message strings + * @global array $GLOBALS['XML_RPC_str'] + */ +$GLOBALS['XML_RPC_str'] = array( + 'unknown_method' => gettext("Unknown method"), + 'invalid_return' => gettext("Invalid return payload: enable debugging to examine incoming payload"), + 'incorrect_params' => gettext("Incorrect parameters passed to method"), + 'introspect_unknown' => gettext("Can't introspect: method unknown"), + 'http_error' => gettext("Didn't receive 200 OK from remote server."), + 'not_response_object' => gettext("The requested method didn't return an XML_RPC_Response object."), + 'invalid_request' => gettext("Invalid request payload"), +); + + +/** + * Default XML encoding (ISO-8859-1, UTF-8 or US-ASCII) + * @global string $GLOBALS['XML_RPC_defencoding'] + */ +$GLOBALS['XML_RPC_defencoding'] = 'UTF-8'; + +/** + * User error codes start at 800 + * @global int $GLOBALS['XML_RPC_erruser'] + */ +$GLOBALS['XML_RPC_erruser'] = 800; + +/** + * XML parse error codes start at 100 + * @global int $GLOBALS['XML_RPC_errxml'] + */ +$GLOBALS['XML_RPC_errxml'] = 100; + + +/** + * Compose backslashes for escaping regexp + * @global string $GLOBALS['XML_RPC_backslash'] + */ +$GLOBALS['XML_RPC_backslash'] = chr(92) . chr(92); + + +/** + * Should we automatically base64 encode strings that contain characters + * which can cause PHP's SAX-based XML parser to break? + * @global boolean $GLOBALS['XML_RPC_auto_base64'] + */ +$GLOBALS['XML_RPC_auto_base64'] = true; + + +/** + * Valid parents of XML elements + * @global array $GLOBALS['XML_RPC_valid_parents'] + */ +$GLOBALS['XML_RPC_valid_parents'] = array( + 'BOOLEAN' => array('VALUE'), + 'I4' => array('VALUE'), + 'INT' => array('VALUE'), + 'STRING' => array('VALUE'), + 'DOUBLE' => array('VALUE'), + 'DATETIME.ISO8601' => array('VALUE'), + 'BASE64' => array('VALUE'), + 'ARRAY' => array('VALUE'), + 'STRUCT' => array('VALUE'), + 'PARAM' => array('PARAMS'), + 'METHODNAME' => array('METHODCALL'), + 'PARAMS' => array('METHODCALL', 'METHODRESPONSE'), + 'MEMBER' => array('STRUCT'), + 'NAME' => array('MEMBER'), + 'DATA' => array('ARRAY'), + 'FAULT' => array('METHODRESPONSE'), + 'VALUE' => array('MEMBER', 'DATA', 'PARAM', 'FAULT'), +); + + +/** + * Stores state during parsing + * + * quick explanation of components: + * + ac = accumulates values + * + qt = decides if quotes are needed for evaluation + * + cm = denotes struct or array (comma needed) + * + isf = indicates a fault + * + lv = indicates "looking for a value": implements the logic + * to allow values with no types to be strings + * + params = stores parameters in method calls + * + method = stores method name + * + * @global array $GLOBALS['XML_RPC_xh'] + */ +$GLOBALS['XML_RPC_xh'] = array(); + + +/** + * Start element handler for the XML parser + * + * @return void + */ +function XML_RPC_se($parser_resource, $name, $attrs) +{ + global $XML_RPC_xh, $XML_RPC_valid_parents; + + $parser = (int) $parser_resource; + + // if invalid xmlrpc already detected, skip all processing + if ($XML_RPC_xh[$parser]['isf'] >= 2) { + return; + } + + // check for correct element nesting + // top level element can only be of 2 types + if (count($XML_RPC_xh[$parser]['stack']) == 0) { + if ($name != 'METHODRESPONSE' && $name != 'METHODCALL') { + $XML_RPC_xh[$parser]['isf'] = 2; + $XML_RPC_xh[$parser]['isf_reason'] = gettext('missing top level xmlrpc element'); + return; + } + } else { + // not top level element: see if parent is OK + if (!in_array($XML_RPC_xh[$parser]['stack'][0], $XML_RPC_valid_parents[$name])) { + $name = preg_replace('@[^a-zA-Z0-9._-]@', '', $name); + $XML_RPC_xh[$parser]['isf'] = 2; + $XML_RPC_xh[$parser]['isf_reason'] = sprintf(gettext('xmlrpc element %1$s cannot be child of %2$s'), $name, $XML_RPC_xh[$parser]['stack'][0]); + return; + } + } + + switch ($name) { + case 'STRUCT': + $XML_RPC_xh[$parser]['cm']++; + + // turn quoting off + $XML_RPC_xh[$parser]['qt'] = 0; + + $cur_val = array(); + $cur_val['value'] = array(); + $cur_val['members'] = 1; + array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val); + break; + + case 'ARRAY': + $XML_RPC_xh[$parser]['cm']++; + + // turn quoting off + $XML_RPC_xh[$parser]['qt'] = 0; + + $cur_val = array(); + $cur_val['value'] = array(); + $cur_val['members'] = 0; + array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val); + break; + + case 'NAME': + $XML_RPC_xh[$parser]['ac'] = ''; + break; + + case 'FAULT': + $XML_RPC_xh[$parser]['isf'] = 1; + break; + + case 'PARAM': + $XML_RPC_xh[$parser]['valuestack'] = array(); + break; + + case 'VALUE': + $XML_RPC_xh[$parser]['lv'] = 1; + $XML_RPC_xh[$parser]['vt'] = $GLOBALS['XML_RPC_String']; + $XML_RPC_xh[$parser]['ac'] = ''; + $XML_RPC_xh[$parser]['qt'] = 0; + // look for a value: if this is still 1 by the + // time we reach the first data segment then the type is string + // by implication and we need to add in a quote + break; + + case 'I4': + case 'INT': + case 'STRING': + case 'BOOLEAN': + case 'DOUBLE': + case 'DATETIME.ISO8601': + case 'BASE64': + $XML_RPC_xh[$parser]['ac'] = ''; // reset the accumulator + + if ($name == 'DATETIME.ISO8601' || $name == 'STRING') { + $XML_RPC_xh[$parser]['qt'] = 1; + + if ($name == 'DATETIME.ISO8601') { + $XML_RPC_xh[$parser]['vt'] = $GLOBALS['XML_RPC_DateTime']; + } + + } elseif ($name == 'BASE64') { + $XML_RPC_xh[$parser]['qt'] = 2; + } else { + // No quoting is required here -- but + // at the end of the element we must check + // for data format errors. + $XML_RPC_xh[$parser]['qt'] = 0; + } + break; + + case 'MEMBER': + $XML_RPC_xh[$parser]['ac'] = ''; + break; + + case 'DATA': + case 'METHODCALL': + case 'METHODNAME': + case 'METHODRESPONSE': + case 'PARAMS': + // valid elements that add little to processing + break; + } + + + // Save current element to stack + array_unshift($XML_RPC_xh[$parser]['stack'], $name); + + if ($name != 'VALUE') { + $XML_RPC_xh[$parser]['lv'] = 0; + } +} + +/** + * End element handler for the XML parser + * + * @return void + */ +function XML_RPC_ee($parser_resource, $name) +{ + global $XML_RPC_xh; + + $parser = (int) $parser_resource; + + if ($XML_RPC_xh[$parser]['isf'] >= 2) { + return; + } + + // push this element from stack + // NB: if XML validates, correct opening/closing is guaranteed and + // we do not have to check for $name == $curr_elem. + // we also checked for proper nesting at start of elements... + $curr_elem = array_shift($XML_RPC_xh[$parser]['stack']); + + switch ($name) { + case 'STRUCT': + case 'ARRAY': + $cur_val = array_shift($XML_RPC_xh[$parser]['valuestack']); + $XML_RPC_xh[$parser]['value'] = $cur_val['value']; + $XML_RPC_xh[$parser]['vt'] = strtolower($name); + $XML_RPC_xh[$parser]['cm']--; + break; + + case 'NAME': + $XML_RPC_xh[$parser]['valuestack'][0]['name'] = $XML_RPC_xh[$parser]['ac']; + break; + + case 'BOOLEAN': + // special case here: we translate boolean 1 or 0 into PHP + // constants true or false + if ($XML_RPC_xh[$parser]['ac'] == '1') { + $XML_RPC_xh[$parser]['ac'] = 'true'; + } else { + $XML_RPC_xh[$parser]['ac'] = 'false'; + } + + $XML_RPC_xh[$parser]['vt'] = strtolower($name); + // Drop through intentionally. + + case 'I4': + case 'INT': + case 'STRING': + case 'DOUBLE': + case 'DATETIME.ISO8601': + case 'BASE64': + if ($XML_RPC_xh[$parser]['qt'] == 1) { + // we use double quotes rather than single so backslashification works OK + $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac']; + } elseif ($XML_RPC_xh[$parser]['qt'] == 2) { + $XML_RPC_xh[$parser]['value'] = base64_decode($XML_RPC_xh[$parser]['ac']); + } elseif ($name == 'BOOLEAN') { + $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac']; + } else { + // we have an I4, INT or a DOUBLE + // we must check that only 0123456789-. are characters here + if (!preg_match("@^[+-]?[0123456789 \t\.]+$@", $XML_RPC_xh[$parser]['ac'])) { + XML_RPC_Base::raiseError(gettext('Non-numeric value received in INT or DOUBLE'), + XML_RPC_ERROR_NON_NUMERIC_FOUND); + $XML_RPC_xh[$parser]['value'] = XML_RPC_ERROR_NON_NUMERIC_FOUND; + } else { + // it's ok, add it on + $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac']; + } + } + + $XML_RPC_xh[$parser]['ac'] = ''; + $XML_RPC_xh[$parser]['qt'] = 0; + $XML_RPC_xh[$parser]['lv'] = 3; // indicate we've found a value + break; + + case 'VALUE': + if ($XML_RPC_xh[$parser]['vt'] == $GLOBALS['XML_RPC_String']) { + if (strlen($XML_RPC_xh[$parser]['ac']) > 0) { + $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac']; + } elseif ($XML_RPC_xh[$parser]['lv'] == 1) { + // The element was empty. + $XML_RPC_xh[$parser]['value'] = ''; + } + } + + $temp = new XML_RPC_Value($XML_RPC_xh[$parser]['value'], $XML_RPC_xh[$parser]['vt']); + + $cur_val = array_shift($XML_RPC_xh[$parser]['valuestack']); + if (is_array($cur_val)) { + if ($cur_val['members']==0) { + $cur_val['value'][] = $temp; + } else { + $XML_RPC_xh[$parser]['value'] = $temp; + } + array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val); + } else { + $XML_RPC_xh[$parser]['value'] = $temp; + } + break; + + case 'MEMBER': + $XML_RPC_xh[$parser]['ac'] = ''; + $XML_RPC_xh[$parser]['qt'] = 0; + + $cur_val = array_shift($XML_RPC_xh[$parser]['valuestack']); + if (is_array($cur_val)) { + if ($cur_val['members']==1) { + $cur_val['value'][$cur_val['name']] = $XML_RPC_xh[$parser]['value']; + } + array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val); + } + break; + + case 'DATA': + $XML_RPC_xh[$parser]['ac'] = ''; + $XML_RPC_xh[$parser]['qt'] = 0; + break; + + case 'PARAM': + $XML_RPC_xh[$parser]['params'][] = $XML_RPC_xh[$parser]['value']; + break; + + case 'METHODNAME': + case 'RPCMETHODNAME': + $XML_RPC_xh[$parser]['method'] = preg_replace("@^[\n\r\t ]+@", '', + $XML_RPC_xh[$parser]['ac']); + break; + } + + // if it's a valid type name, set the type + if (isset($GLOBALS['XML_RPC_Types'][strtolower($name)])) { + $XML_RPC_xh[$parser]['vt'] = strtolower($name); + } +} + +/** + * Character data handler for the XML parser + * + * @return void + */ +function XML_RPC_cd($parser_resource, $data) +{ + global $XML_RPC_xh, $XML_RPC_backslash; + + $parser = (int) $parser_resource; + + if ($XML_RPC_xh[$parser]['lv'] != 3) { + // "lookforvalue==3" means that we've found an entire value + // and should discard any further character data + + if ($XML_RPC_xh[$parser]['lv'] == 1) { + // if we've found text and we're just in a then + // turn quoting on, as this will be a string + $XML_RPC_xh[$parser]['qt'] = 1; + // and say we've found a value + $XML_RPC_xh[$parser]['lv'] = 2; + } + + // replace characters that eval would + // do special things with + if (!isset($XML_RPC_xh[$parser]['ac'])) { + $XML_RPC_xh[$parser]['ac'] = ''; + } + $XML_RPC_xh[$parser]['ac'] .= $data; + } +} + +/** + * The common methods and properties for all of the XML_RPC classes + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Base { + + /** + * PEAR Error handling + * + * @return object PEAR_Error object + */ + function raiseError($msg, $code) + { + include_once 'PEAR.inc'; + if (is_object(@$this)) { + log_error(get_class($this) . ': ' . $msg . " {$code}"); + return PEAR::raiseError(get_class($this) . ': ' . $msg, $code); + } else { + log_error("XML_RPC: " . ': ' . $msg . " {$code}"); + return PEAR::raiseError('XML_RPC: ' . $msg, $code); + } + } + + /** + * Tell whether something is a PEAR_Error object + * + * @param mixed $value the item to check + * + * @return bool whether $value is a PEAR_Error object or not + * + * @access public + */ + function isError($value) + { + return is_a($value, 'PEAR_Error'); + } +} + +/** + * The methods and properties for submitting XML RPC requests + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Client extends XML_RPC_Base { + + /** + * The path and name of the RPC server script you want the request to go to + * @var string + */ + var $path = ''; + + /** + * The name of the remote server to connect to + * @var string + */ + var $server = ''; + + /** + * The protocol to use in contacting the remote server + * @var string + */ + var $protocol = 'http://'; + + /** + * The port for connecting to the remote server + * + * The default is 80 for http:// connections + * and 443 for https:// and ssl:// connections. + * + * @var integer + */ + var $port = 80; + + /** + * A user name for accessing the RPC server + * @var string + * @see XML_RPC_Client::setCredentials() + */ + var $username = ''; + + /** + * A password for accessing the RPC server + * @var string + * @see XML_RPC_Client::setCredentials() + */ + var $password = ''; + + /** + * The name of the proxy server to use, if any + * @var string + */ + var $proxy = ''; + + /** + * The protocol to use in contacting the proxy server, if any + * @var string + */ + var $proxy_protocol = 'http://'; + + /** + * The port for connecting to the proxy server + * + * The default is 8080 for http:// connections + * and 443 for https:// and ssl:// connections. + * + * @var integer + */ + var $proxy_port = 8080; + + /** + * A user name for accessing the proxy server + * @var string + */ + var $proxy_user = ''; + + /** + * A password for accessing the proxy server + * @var string + */ + var $proxy_pass = ''; + + /** + * The error number, if any + * @var integer + */ + var $errno = 0; + + /** + * The error message, if any + * @var string + */ + var $errstr = ''; + + /** + * The current debug mode (1 = on, 0 = off) + * @var integer + */ + var $debug = 0; + + /** + * The HTTP headers for the current request. + * @var string + */ + var $headers = ''; + + + /** + * Sets the object's properties + * + * @param string $path the path and name of the RPC server script + * you want the request to go to + * @param string $server the URL of the remote server to connect to. + * If this parameter doesn't specify a + * protocol and $port is 443, ssl:// is + * assumed. + * @param integer $port a port for connecting to the remote server. + * Defaults to 80 for http:// connections and + * 443 for https:// and ssl:// connections. + * @param string $proxy the URL of the proxy server to use, if any. + * If this parameter doesn't specify a + * protocol and $port is 443, ssl:// is + * assumed. + * @param integer $proxy_port a port for connecting to the remote server. + * Defaults to 8080 for http:// connections and + * 443 for https:// and ssl:// connections. + * @param string $proxy_user a user name for accessing the proxy server + * @param string $proxy_pass a password for accessing the proxy server + * + * @return void + */ + function XML_RPC_Client($path, $server, $port = 0, + $proxy = '', $proxy_port = 0, + $proxy_user = '', $proxy_pass = '') + { + $this->path = $path; + $this->proxy_user = $proxy_user; + $this->proxy_pass = $proxy_pass; + + preg_match('@^(http://|https://|ssl://)?(.*)$@', $server, $match); + if ($match[1] == '') { + if ($port == 443) { + $this->server = $match[2]; + $this->protocol = 'ssl://'; + $this->port = 443; + } else { + $this->server = $match[2]; + if ($port) { + $this->port = $port; + } + } + } elseif ($match[1] == 'http://') { + $this->server = $match[2]; + if ($port) { + $this->port = $port; + } + } else { + $this->server = $match[2]; + $this->protocol = 'ssl://'; + if ($port) { + $this->port = $port; + } else { + $this->port = 443; + } + } + + if ($proxy) { + preg_match('@^(http://|https://|ssl://)?(.*)$@', $proxy, $match); + if ($match[1] == '') { + if ($proxy_port == 443) { + $this->proxy = $match[2]; + $this->proxy_protocol = 'ssl://'; + $this->proxy_port = 443; + } else { + $this->proxy = $match[2]; + if ($proxy_port) { + $this->proxy_port = $proxy_port; + } + } + } elseif ($match[1] == 'http://') { + $this->proxy = $match[2]; + if ($proxy_port) { + $this->proxy_port = $proxy_port; + } + } else { + $this->proxy = $match[2]; + $this->proxy_protocol = 'ssl://'; + if ($proxy_port) { + $this->proxy_port = $proxy_port; + } else { + $this->proxy_port = 443; + } + } + } + } + + /** + * Change the current debug mode + * + * @param int $in where 1 = on, 0 = off + * + * @return void + */ + function setDebug($in) + { + if ($in) { + $this->debug = 1; + } else { + $this->debug = 0; + } + } + + /** + * Sets whether strings that contain characters which may cause PHP's + * SAX-based XML parser to break should be automatically base64 encoded + * + * This is is a workaround for systems that don't have PHP's mbstring + * extension available. + * + * @param int $in where 1 = on, 0 = off + * + * @return void + */ + function setAutoBase64($in) + { + if ($in) { + $GLOBALS['XML_RPC_auto_base64'] = true; + } else { + $GLOBALS['XML_RPC_auto_base64'] = false; + } + } + + /** + * Set username and password properties for connecting to the RPC server + * + * @param string $u the user name + * @param string $p the password + * + * @return void + * + * @see XML_RPC_Client::$username, XML_RPC_Client::$password + */ + function setCredentials($u, $p) + { + $this->username = $u; + $this->password = $p; + } + + /** + * Transmit the RPC request via HTTP 1.0 protocol + * + * @param object $msg the XML_RPC_Message object + * @param int $timeout how many seconds to wait for the request + * + * @return object an XML_RPC_Response object. 0 is returned if any + * problems happen. + * + * @see XML_RPC_Message, XML_RPC_Client::XML_RPC_Client(), + * XML_RPC_Client::setCredentials() + */ + function send($msg, $timeout = 0) + { + if (!is_a($msg, 'XML_RPC_Message')) { + $this->errstr = sprintf( + gettext( + "send()'s %s parameter must be an XML_RPC_Message object." + ), $msg); + $this->raiseError($this->errstr, XML_RPC_ERROR_PROGRAMMING); + return 0; + } + $msg->debug = $this->debug; + return $this->sendPayloadHTTP10($msg, $this->server, $this->port, + $timeout, $this->username, + $this->password); + } + + /** + * Transmit the RPC request via HTTP 1.0 protocol + * + * Requests should be sent using XML_RPC_Client send() rather than + * calling this method directly. + * + * @param object $msg the XML_RPC_Message object + * @param string $server the server to send the request to + * @param int $port the server port send the request to + * @param int $timeout how many seconds to wait for the request + * before giving up + * @param string $username a user name for accessing the RPC server + * @param string $password a password for accessing the RPC server + * + * @return object an XML_RPC_Response object. 0 is returned if any + * problems happen. + * + * @access protected + * @see XML_RPC_Client::send() + */ + function sendPayloadHTTP10($msg, $server, $port, $timeout = 0, + $username = '', $password = '') + { + // Pre-emptive BC hacks for fools calling sendPayloadHTTP10() directly + if ($username != $this->username) { + $this->setCredentials($username, $password); + } + + // Only create the payload if it was not created previously + if (empty($msg->payload)) { + $msg->createPayload(); + } + $this->createHeaders($msg); + + $op = $this->headers . "\r\n\r\n"; + $op .= $msg->payload; + + if ($this->debug) { + print "\n
    ---SENT---\n";
    +            print $op;
    +            print "\n---END---
    \n"; + } + + /* + * If we're using a proxy open a socket to the proxy server + * instead to the xml-rpc server + */ + if ($this->proxy) { + if ($this->proxy_protocol == 'http://') { + $protocol = ''; + } else { + $protocol = $this->proxy_protocol; + } + if ($timeout > 0) { + $fp = @fsockopen($protocol . $this->proxy, $this->proxy_port, + $this->errno, $this->errstr, $timeout); + } else { + $fp = @fsockopen($protocol . $this->proxy, $this->proxy_port, + $this->errno, $this->errstr); + } + } else { + if ($this->protocol == 'http://') { + $protocol = ''; + } else { + $protocol = $this->protocol; + } + if ($timeout > 0) { + $fp = @fsockopen($protocol . $server, $port, + $this->errno, $this->errstr, $timeout); + } else { + $fp = @fsockopen($protocol . $server, $port, + $this->errno, $this->errstr); + } + } + + /* + * Just raising the error without returning it is strange, + * but keep it here for backwards compatibility. + */ + if (!$fp && $this->proxy) { + $this->raiseError(sprintf(gettext('Connection to proxy server + %1$s:%2$s failed. %3$s') + ,$this->proxy,$this->proxy_port,$this->errstr), + XML_RPC_ERROR_CONNECTION_FAILED); + return 0; + } elseif (!$fp) { + $this->raiseError(sprintf(gettext('Connection to RPC server + %1$s:%2$s failed. %3$s') + ,$server,$port,$this->errstr), + XML_RPC_ERROR_CONNECTION_FAILED); + return 0; + } + + if ($timeout) { + /* + * Using socket_set_timeout() because stream_set_timeout() + * was introduced in 4.3.0, but we need to support 4.2.0. + */ + socket_set_timeout($fp, $timeout); + } + + if (!fputs($fp, $op, strlen($op))) { + $this->errstr = 'Write error'; + return 0; + } + $resp = $msg->parseResponseFile($fp); + + $meta = socket_get_status($fp); + if ($meta['timed_out']) { + fclose($fp); + $this->errstr = 'RPC server did not send response before timeout.'; + $this->raiseError($this->errstr, XML_RPC_ERROR_CONNECTION_FAILED); + return 0; + } + + fclose($fp); + return $resp; + } + + /** + * Determines the HTTP headers and puts it in the $headers property + * + * @param object $msg the XML_RPC_Message object + * + * @return boolean TRUE if okay, FALSE if the message payload isn't set. + * + * @access protected + */ + function createHeaders($msg) + { + if (empty($msg->payload)) { + return false; + } + if ($this->proxy) { + $this->headers = 'POST ' . ($this->protocol=='ssl://'?'https://':$this->protocol). $this->server; + if ($this->proxy_port) { + $this->headers .= ':' . $this->port; + } + } else { + $this->headers = 'POST '; + } + $this->headers .= $this->path. " HTTP/1.0\r\n"; + + $this->headers .= "User-Agent: PEAR XML_RPC\r\n"; + $this->headers .= 'Host: ' . $this->server . "\r\n"; + + if ($this->proxy && $this->proxy_user) { + $this->headers .= 'Proxy-Authorization: Basic ' + . base64_encode("$this->proxy_user:$this->proxy_pass") + . "\r\n"; + } + + // thanks to Grant Rauscher for this + if ($this->username) { + $this->headers .= 'Authorization: Basic ' + . base64_encode("$this->username:$this->password") + . "\r\n"; + } + + $this->headers .= "Content-Type: text/xml\r\n"; + $this->headers .= 'Content-Length: ' . strlen($msg->payload); + return true; + } +} + +/** + * The methods and properties for interpreting responses to XML RPC requests + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Response extends XML_RPC_Base +{ + var $xv; + var $fn; + var $fs; + var $hdrs; + + /** + * @return void + */ + function XML_RPC_Response($val, $fcode = 0, $fstr = '') + { + if ($fcode != 0) { + $this->fn = $fcode; + $this->fs = htmlspecialchars($fstr); + } else { + $this->xv = $val; + } + } + + /** + * @return int the error code + */ + function faultCode() + { + if (isset($this->fn)) { + return $this->fn; + } else { + return 0; + } + } + + /** + * @return string the error string + */ + function faultString() + { + return $this->fs; + } + + /** + * @return mixed the value + */ + function value() + { + return $this->xv; + } + + /** + * @return string the error message in XML format + */ + function serialize() + { + $rs = "\n"; + if ($this->fn) { + $rs .= " + + + + faultCode + " . $this->fn . " + + + faultString + " . $this->fs . " + + + +"; + } else { + $rs .= "\n\n" . $this->xv->serialize() . + "\n"; + } + $rs .= "\n"; + return $rs; + } +} + +/** + * The methods and properties for composing XML RPC messages + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Message extends XML_RPC_Base +{ + /** + * Should the payload's content be passed through mb_convert_encoding()? + * + * @see XML_RPC_Message::setConvertPayloadEncoding() + * @since Property available since Release 1.5.1 + * @var boolean + */ + var $convert_payload_encoding = false; + + /** + * The current debug mode (1 = on, 0 = off) + * @var integer + */ + var $debug = 0; + + /** + * The encoding to be used for outgoing messages + * + * Defaults to the value of $GLOBALS['XML_RPC_defencoding'] + * + * @var string + * @see XML_RPC_Message::setSendEncoding(), + * $GLOBALS['XML_RPC_defencoding'], XML_RPC_Message::xml_header() + */ + var $send_encoding = ''; + + /** + * The method presently being evaluated + * @var string + */ + var $methodname = ''; + + /** + * @var array + */ + var $params = array(); + + /** + * The XML message being generated + * @var string + */ + var $payload = ''; + + /** + * Should extra line breaks be removed from the payload? + * @since Property available since Release 1.4.6 + * @var boolean + */ + var $remove_extra_lines = true; + + /** + * The XML response from the remote server + * @since Property available since Release 1.4.6 + * @var string + */ + var $response_payload = ''; + + + /** + * @return void + */ + function XML_RPC_Message($meth, $pars = 0) + { + $this->methodname = $meth; + if (is_array($pars) && sizeof($pars) > 0) { + for ($i = 0; $i < sizeof($pars); $i++) { + $this->addParam($pars[$i]); + } + } + } + + /** + * Produces the XML declaration including the encoding attribute + * + * The encoding is determined by this class' $send_encoding + * property. If the $send_encoding property is not set, use + * $GLOBALS['XML_RPC_defencoding']. + * + * @return string the XML declaration and element + * + * @see XML_RPC_Message::setSendEncoding(), + * XML_RPC_Message::$send_encoding, $GLOBALS['XML_RPC_defencoding'] + */ + function xml_header() + { + global $XML_RPC_defencoding; + + if (!$this->send_encoding) { + $this->send_encoding = $XML_RPC_defencoding; + } + return 'send_encoding . '"?>' + . "\n\n"; + } + + /** + * @return string the closing tag + */ + function xml_footer() + { + return "\n"; + } + + /** + * Fills the XML_RPC_Message::$payload property + * + * Part of the process makes sure all line endings are in DOS format + * (CRLF), which is probably required by specifications. + * + * If XML_RPC_Message::setConvertPayloadEncoding() was set to true, + * the payload gets passed through mb_convert_encoding() + * to ensure the payload matches the encoding set in the + * XML declaration. The encoding type can be manually set via + * XML_RPC_Message::setSendEncoding(). + * + * @return void + * + * @uses XML_RPC_Message::xml_header(), XML_RPC_Message::xml_footer() + * @see XML_RPC_Message::setSendEncoding(), $GLOBALS['XML_RPC_defencoding'], + * XML_RPC_Message::setConvertPayloadEncoding() + */ + function createPayload() + { + $this->payload = $this->xml_header(); + $this->payload .= '' . $this->methodname . "\n"; + $this->payload .= "\n"; + for ($i = 0; $i < sizeof($this->params); $i++) { + $p = $this->params[$i]; + $this->payload .= "\n" . $p->serialize() . "\n"; + } + $this->payload .= "\n"; + $this->payload .= $this->xml_footer(); + if ($this->remove_extra_lines) { + $this->payload = preg_replace("@[\r\n]+@", "\r\n", $this->payload); + } else { + $this->payload = preg_replace("@\r\n|\n|\r|\n\r@", "\r\n", $this->payload); + } + if ($this->convert_payload_encoding) { + $this->payload = mb_convert_encoding($this->payload, $this->send_encoding); + } + } + + /** + * @return string the name of the method + */ + function method($meth = '') + { + if ($meth != '') { + $this->methodname = $meth; + } + return $this->methodname; + } + + /** + * @return string the payload + */ + function serialize() + { + $this->createPayload(); + return $this->payload; + } + + /** + * @return void + */ + function addParam($par) + { + $this->params[] = $par; + } + + /** + * Obtains an XML_RPC_Value object for the given parameter + * + * @param int $i the index number of the parameter to obtain + * + * @return object the XML_RPC_Value object. + * If the parameter doesn't exist, an XML_RPC_Response object. + * + * @since Returns XML_RPC_Response object on error since Release 1.3.0 + */ + function getParam($i) + { + global $XML_RPC_err, $XML_RPC_str; + + if (isset($this->params[$i])) { + return $this->params[$i]; + } else { + $this->raiseError(gettext('The submitted request did not contain this parameter'), + XML_RPC_ERROR_INCORRECT_PARAMS); + return new XML_RPC_Response(0, $XML_RPC_err['incorrect_params'], + $XML_RPC_str['incorrect_params']); + } + } + + /** + * @return int the number of parameters + */ + function getNumParams() + { + return sizeof($this->params); + } + + /** + * Sets whether the payload's content gets passed through + * mb_convert_encoding() + * + * Returns PEAR_ERROR object if mb_convert_encoding() isn't available. + * + * @param int $in where 1 = on, 0 = off + * + * @return void + * + * @see XML_RPC_Message::setSendEncoding() + * @since Method available since Release 1.5.1 + */ + function setConvertPayloadEncoding($in) + { + if ($in && !function_exists('mb_convert_encoding')) { + return $this->raiseError(gettext('mb_convert_encoding() is not available'), + XML_RPC_ERROR_PROGRAMMING); + } + $this->convert_payload_encoding = $in; + } + + /** + * Sets the XML declaration's encoding attribute + * + * @param string $type the encoding type (ISO-8859-1, UTF-8 or US-ASCII) + * + * @return void + * + * @see XML_RPC_Message::setConvertPayloadEncoding(), XML_RPC_Message::xml_header() + * @since Method available since Release 1.2.0 + */ + function setSendEncoding($type) + { + $this->send_encoding = $type; + } + + /** + * Determine the XML's encoding via the encoding attribute + * in the XML declaration + * + * If the encoding parameter is not set or is not ISO-8859-1, UTF-8 + * or US-ASCII, $XML_RPC_defencoding will be returned. + * + * @param string $data the XML that will be parsed + * + * @return string the encoding to be used + * + * @link http://php.net/xml_parser_create + * @since Method available since Release 1.2.0 + */ + function getEncoding($data) + { + global $XML_RPC_defencoding; + + if (preg_match('@<\?xml[^>]*\s*encoding\s*=\s*[\'"]([^"\']*)[\'"]@', + $data, $match)) + { + $match[1] = trim(strtoupper($match[1])); + switch ($match[1]) { + case 'ISO-8859-1': + case 'UTF-8': + case 'US-ASCII': + return $match[1]; + break; + + default: + return $XML_RPC_defencoding; + } + } else { + return $XML_RPC_defencoding; + } + } + + /** + * @return object a new XML_RPC_Response object + */ + function parseResponseFile($fp) + { + $ipd = ''; + while ($data = @fread($fp, 8192)) { + $ipd .= $data; + } + return $this->parseResponse($ipd); + } + + /** + * @return object a new XML_RPC_Response object + */ + function parseResponse($data = '') + { + global $XML_RPC_xh, $XML_RPC_err, $XML_RPC_str, $XML_RPC_defencoding; + + $encoding = $this->getEncoding($data); + $parser_resource = xml_parser_create($encoding); + $parser = (int) $parser_resource; + + $XML_RPC_xh = array(); + $XML_RPC_xh[$parser] = array(); + + $XML_RPC_xh[$parser]['cm'] = 0; + $XML_RPC_xh[$parser]['isf'] = 0; + $XML_RPC_xh[$parser]['ac'] = ''; + $XML_RPC_xh[$parser]['qt'] = ''; + $XML_RPC_xh[$parser]['stack'] = array(); + $XML_RPC_xh[$parser]['valuestack'] = array(); + + xml_parser_set_option($parser_resource, XML_OPTION_CASE_FOLDING, true); + xml_set_element_handler($parser_resource, 'XML_RPC_se', 'XML_RPC_ee'); + xml_set_character_data_handler($parser_resource, 'XML_RPC_cd'); + + $hdrfnd = 0; + if ($this->debug) { + print "\n
    ---GOT---\n";
    +            print isset($_SERVER['SERVER_PROTOCOL']) ? htmlspecialchars($data) : $data;
    +            print "\n---END---
    \n"; + } + + // See if response is a 200 or a 100 then a 200, else raise error. + // But only do this if we're using the HTTP protocol. + if (preg_match('@^HTTP@', $data) && + !preg_match('@^HTTP/[0-9\.]+ 200 @', $data) && + !preg_match('@^HTTP/[0-9\.]+ 10[0-9]([A-Z ]+)?[\r\n]+HTTP/[0-9\.]+ 200@', $data)) + { + $errstr = substr($data, 0, strpos($data, "\n") - 1); + error_log(sprintf(gettext("HTTP error, got response: %s"),$errstr)); + $r = new XML_RPC_Response(0, $XML_RPC_err['http_error'], + $XML_RPC_str['http_error'] . ' (' . + $errstr . ')'); + xml_parser_free($parser_resource); + return $r; + } + + // gotta get rid of headers here + if (!$hdrfnd && ($brpos = strpos($data,"\r\n\r\n"))) { + $XML_RPC_xh[$parser]['ha'] = substr($data, 0, $brpos); + $data = substr($data, $brpos + 4); + $hdrfnd = 1; + } + + /* + * be tolerant of junk after methodResponse + * (e.g. javascript automatically inserted by free hosts) + * thanks to Luca Mariano + */ + $data = substr($data, 0, strpos($data, "") + 17); + $this->response_payload = $data; + + if (!xml_parse($parser_resource, $data, sizeof($data))) { + // thanks to Peter Kocks + if (xml_get_current_line_number($parser_resource) == 1) { + /* We already error on this in the GUI, no need to log it and cause a PHP error. */ + //$errstr = gettext("XML error at line 1, check URL"); + } else { + $errstr = sprintf('XML error: %s at line %d', + xml_error_string(xml_get_error_code($parser_resource)), + xml_get_current_line_number($parser_resource)); + } + if (!empty($errstr)) + error_log($errstr); + $r = new XML_RPC_Response(0, $XML_RPC_err['invalid_return'], + $XML_RPC_str['invalid_return']); + xml_parser_free($parser_resource); + return $r; + } + + xml_parser_free($parser_resource); + + if ($this->debug) { + print "\n
    ---PARSED---\n";
    +            var_dump($XML_RPC_xh[$parser]['value']);
    +            print "---END---
    \n"; + } + + if ($XML_RPC_xh[$parser]['isf'] > 1) { + $r = new XML_RPC_Response(0, $XML_RPC_err['invalid_return'], + $XML_RPC_str['invalid_return'].' '.$XML_RPC_xh[$parser]['isf_reason']); + } elseif (!is_object($XML_RPC_xh[$parser]['value'])) { + // then something odd has happened + // and it's time to generate a client side error + // indicating something odd went on + $r = new XML_RPC_Response(0, $XML_RPC_err['invalid_return'], + $XML_RPC_str['invalid_return']); + } else { + $v = $XML_RPC_xh[$parser]['value']; + if ($XML_RPC_xh[$parser]['isf']) { + $f = $v->structmem('faultCode'); + $fs = $v->structmem('faultString'); + $r = new XML_RPC_Response($v, $f->scalarval(), + $fs->scalarval()); + } else { + $r = new XML_RPC_Response($v); + } + } + $r->hdrs = preg_split("@\r?\n@", $XML_RPC_xh[$parser]['ha'][1]); + return $r; + } +} + +/** + * The methods and properties that represent data in XML RPC format + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Value extends XML_RPC_Base +{ + var $me = array(); + var $mytype = 0; + + /** + * @return void + */ + function XML_RPC_Value($val = -1, $type = '') + { + $this->me = array(); + $this->mytype = 0; + if ($val != -1 || $type != '') { + if ($type == '') { + $type = 'string'; + } + if (!array_key_exists($type, $GLOBALS['XML_RPC_Types'])) { + // XXX + // need some way to report this error + } elseif ($GLOBALS['XML_RPC_Types'][$type] == 1) { + $this->addScalar($val, $type); + } elseif ($GLOBALS['XML_RPC_Types'][$type] == 2) { + $this->addArray($val); + } elseif ($GLOBALS['XML_RPC_Types'][$type] == 3) { + $this->addStruct($val); + } + } + } + + /** + * @return int returns 1 if successful or 0 if there are problems + */ + function addScalar($val, $type = 'string') + { + if ($this->mytype == 1) { + $this->raiseError(gettext('Scalar can have only one value'), + XML_RPC_ERROR_INVALID_TYPE); + return 0; + } + $typeof = $GLOBALS['XML_RPC_Types'][$type]; + if ($typeof != 1) { + $this->raiseError( + sprintf(gettext("Not a scalar type (%s)"), $typeof), + XML_RPC_ERROR_INVALID_TYPE); + return 0; + } + + if ($type == $GLOBALS['XML_RPC_Boolean']) { + if (strcasecmp($val, 'true') == 0 + || $val == 1 + || ($val == true && strcasecmp($val, 'false'))) + { + $val = 1; + } else { + $val = 0; + } + } + + if ($this->mytype == 2) { + // we're adding to an array here + $ar = $this->me['array']; + $ar[] = new XML_RPC_Value($val, $type); + $this->me['array'] = $ar; + } else { + // a scalar, so set the value and remember we're scalar + $this->me[$type] = $val; + $this->mytype = $typeof; + } + return 1; + } + + /** + * @return int returns 1 if successful or 0 if there are problems + */ + function addArray($vals) + { + if ($this->mytype != 0) { + $this->raiseError( + sprintf(gettext('Already initialized as a [%s]'), $this->kindOf()), + XML_RPC_ERROR_ALREADY_INITIALIZED); + return 0; + } + $this->mytype = $GLOBALS['XML_RPC_Types']['array']; + $this->me['array'] = $vals; + return 1; + } + + /** + * @return int returns 1 if successful or 0 if there are problems + */ + function addStruct($vals) + { + if ($this->mytype != 0) { + $this->raiseError( + sprintf(gettext('Already initialized as a [%s]'), $this->kindOf()), + XML_RPC_ERROR_ALREADY_INITIALIZED); + return 0; + } + $this->mytype = $GLOBALS['XML_RPC_Types']['struct']; + $this->me['struct'] = $vals; + return 1; + } + + /** + * @return void + */ + function dump($ar) + { + reset($ar); + foreach ($ar as $key => $val) { + echo "$key => $val
    "; + if ($key == 'array') { + foreach ($val as $key2 => $val2) { + echo "-- $key2 => $val2
    "; + } + } + } + } + + /** + * @return string the data type of the current value + */ + function kindOf() + { + switch ($this->mytype) { + case 3: + return 'struct'; + + case 2: + return 'array'; + + case 1: + return 'scalar'; + + default: + return 'undef'; + } + } + + /** + * @return string the data in XML format + */ + function serializedata($typ, $val) + { + $rs = ''; + if (!array_key_exists($typ, $GLOBALS['XML_RPC_Types'])) { + // XXX + // need some way to report this error + return; + } + switch ($GLOBALS['XML_RPC_Types'][$typ]) { + case 3: + // struct + $rs .= "\n"; + reset($val); + foreach ($val as $key2 => $val2) { + $rs .= "" . htmlspecialchars($key2) . "\n"; + $rs .= $this->serializeval($val2); + $rs .= "\n"; + } + $rs .= ''; + break; + + case 2: + // array + $rs .= "\n\n"; + foreach ($val as $value) { + $rs .= $this->serializeval($value); + } + $rs .= "\n"; + break; + + case 1: + switch ($typ) { + case $GLOBALS['XML_RPC_Base64']: + $rs .= "<${typ}>" . base64_encode($val) . ""; + break; + case $GLOBALS['XML_RPC_Boolean']: + $rs .= "<${typ}>" . ($val ? '1' : '0') . ""; + break; + case $GLOBALS['XML_RPC_String']: + $rs .= "<${typ}>" . htmlspecialchars($val). ""; + break; + default: + $rs .= "<${typ}>${val}"; + } + } + return $rs; + } + + /** + * @return string the data in XML format + */ + function serialize() + { + return $this->serializeval($this); + } + + /** + * @return string the data in XML format + */ + function serializeval($o) + { + if (!is_object($o) || empty($o->me) || !is_array($o->me)) { + return ''; + } + $ar = $o->me; + reset($ar); + list($typ, $val) = each($ar); + return '' . $this->serializedata($typ, $val) . "\n"; + } + + /** + * @return mixed the contents of the element requested + */ + function structmem($m) + { + return $this->me['struct'][$m]; + } + + /** + * @return void + */ + function structreset() + { + reset($this->me['struct']); + } + + /** + * @return the key/value pair of the struct's current element + */ + function structeach() + { + return each($this->me['struct']); + } + + /** + * @return mixed the current value + */ + function getval() + { + // UNSTABLE + + reset($this->me); + $b = current($this->me); + + // contributed by I Sofer, 2001-03-24 + // add support for nested arrays to scalarval + // i've created a new method here, so as to + // preserve back compatibility + + if (is_array($b)) { + foreach ($b as $id => $cont) { + $b[$id] = $cont->scalarval(); + } + } + + // add support for structures directly encoding php objects + if (is_object($b)) { + $t = get_object_vars($b); + foreach ($t as $id => $cont) { + $t[$id] = $cont->scalarval(); + } + foreach ($t as $id => $cont) { + $b->$id = $cont; + } + } + + // end contrib + return $b; + } + + /** + * @return mixed the current element's scalar value. If the value is + * not scalar, FALSE is returned. + */ + function scalarval() + { + reset($this->me); + $v = current($this->me); + if (!is_scalar($v)) { + $v = false; + } + return $v; + } + + /** + * @return string + */ + function scalartyp() + { + reset($this->me); + $a = key($this->me); + if ($a == $GLOBALS['XML_RPC_I4']) { + $a = $GLOBALS['XML_RPC_Int']; + } + return $a; + } + + /** + * @return mixed the struct's current element + */ + function arraymem($m) + { + return $this->me['array'][$m]; + } + + /** + * @return int the number of elements in the array + */ + function arraysize() + { + reset($this->me); + list($a, $b) = each($this->me); + return sizeof($b); + } + + /** + * Determines if the item submitted is an XML_RPC_Value object + * + * @param mixed $val the variable to be evaluated + * + * @return bool TRUE if the item is an XML_RPC_Value object + * + * @static + * @since Method available since Release 1.3.0 + */ + function isValue($val) + { + return (strtolower(get_class($val)) == 'xml_rpc_value'); + } +} + +/** + * Return an ISO8601 encoded string + * + * While timezones ought to be supported, the XML-RPC spec says: + * + * "Don't assume a timezone. It should be specified by the server in its + * documentation what assumptions it makes about timezones." + * + * This routine always assumes localtime unless $utc is set to 1, in which + * case UTC is assumed and an adjustment for locale is made when encoding. + * + * @return string the formatted date + */ +function XML_RPC_iso8601_encode($timet, $utc = 0) +{ + if (!$utc) { + $t = strftime('%Y%m%dT%H:%M:%S', $timet); + } else { + if (function_exists('gmstrftime')) { + // gmstrftime doesn't exist in some versions + // of PHP + $t = gmstrftime('%Y%m%dT%H:%M:%S', $timet); + } else { + $t = strftime('%Y%m%dT%H:%M:%S', $timet - date('Z')); + } + } + return $t; +} + +/** + * Convert a datetime string into a Unix timestamp + * + * While timezones ought to be supported, the XML-RPC spec says: + * + * "Don't assume a timezone. It should be specified by the server in its + * documentation what assumptions it makes about timezones." + * + * This routine always assumes localtime unless $utc is set to 1, in which + * case UTC is assumed and an adjustment for locale is made when encoding. + * + * @return int the unix timestamp of the date submitted + */ +function XML_RPC_iso8601_decode($idate, $utc = 0) +{ + $t = 0; + if (preg_match('@([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})@', $idate, $regs)) { + if ($utc) { + $t = gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]); + } else { + $t = mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]); + } + } + return $t; +} + +/** + * Converts an XML_RPC_Value object into native PHP types + * + * @param object $XML_RPC_val the XML_RPC_Value object to decode + * + * @return mixed the PHP values + */ +function XML_RPC_decode($XML_RPC_val) +{ + $kind = $XML_RPC_val->kindOf(); + + if ($kind == 'scalar') { + return $XML_RPC_val->scalarval(); + + } elseif ($kind == 'array') { + $size = $XML_RPC_val->arraysize(); + $arr = array(); + for ($i = 0; $i < $size; $i++) { + $arr[] = XML_RPC_decode($XML_RPC_val->arraymem($i)); + } + return $arr; + + } elseif ($kind == 'struct') { + $XML_RPC_val->structreset(); + $arr = array(); + while (list($key, $value) = $XML_RPC_val->structeach()) { + $arr[$key] = XML_RPC_decode($value); + } + return $arr; + } +} + +/** + * Converts native PHP types into an XML_RPC_Value object + * + * @param mixed $php_val the PHP value or variable you want encoded + * + * @return object the XML_RPC_Value object + */ +function XML_RPC_encode($php_val) +{ + $type = gettype($php_val); + $XML_RPC_val = new XML_RPC_Value; + + switch ($type) { + case 'array': + if (empty($php_val)) { + $XML_RPC_val->addArray($php_val); + break; + } + $tmp = array_diff(array_keys($php_val), range(0, count($php_val)-1)); + if (empty($tmp)) { + $arr = array(); + foreach ($php_val as $k => $v) { + $arr[$k] = XML_RPC_encode($v); + } + $XML_RPC_val->addArray($arr); + break; + } + // fall though if it's not an enumerated array + + case 'object': + $arr = array(); + foreach ($php_val as $k => $v) { + $arr[$k] = XML_RPC_encode($v); + } + $XML_RPC_val->addStruct($arr); + break; + + case 'integer': + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_Int']); + break; + + case 'double': + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_Double']); + break; + + case 'string': + case 'NULL': + if (preg_match('@^[0-9]{8}\T{1}[0-9]{2}\:[0-9]{2}\:[0-9]{2}$@', $php_val)) { + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_DateTime']); + } elseif ($GLOBALS['XML_RPC_auto_base64'] + && preg_match("@[^ -~\t\r\n]@", $php_val)) + { + // Characters other than alpha-numeric, punctuation, SP, TAB, + // LF and CR break the XML parser, encode value via Base 64. + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_Base64']); + } else { + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_String']); + } + break; + + case 'boolean': + // Add support for encoding/decoding of booleans, since they + // are supported in PHP + // by + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_Boolean']); + break; + + case 'unknown type': + default: + $XML_RPC_val = false; + } + return $XML_RPC_val; +} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * c-hanging-comment-ender-p: nil + * End: + */ + +?> diff --git a/etc/inc/xmlrpc_server.inc b/etc/inc/xmlrpc_server.inc new file mode 100644 index 000000000..f4d8a4611 --- /dev/null +++ b/etc/inc/xmlrpc_server.inc @@ -0,0 +1,678 @@ + + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version SVN: $Id: Server.php 300961 2010-07-03 02:17:34Z danielc $ + * @link http://pear.php.net/package/XML_RPC + */ + + +/** + * Pull in the XML_RPC class + */ +require_once 'xmlrpc_client.inc'; + + +/** + * signature for system.listMethods: return = array, + * parameters = a string or nothing + * @global array $GLOBALS['XML_RPC_Server_listMethods_sig'] + */ +$GLOBALS['XML_RPC_Server_listMethods_sig'] = array( + array($GLOBALS['XML_RPC_Array'], + $GLOBALS['XML_RPC_String'] + ), + array($GLOBALS['XML_RPC_Array']) +); + +/** + * docstring for system.listMethods + * @global string $GLOBALS['XML_RPC_Server_listMethods_doc'] + */ +$GLOBALS['XML_RPC_Server_listMethods_doc'] = gettext('This method lists all the' + . ' methods that the XML-RPC server knows how to dispatch'); + +/** + * signature for system.methodSignature: return = array, + * parameters = string + * @global array $GLOBALS['XML_RPC_Server_methodSignature_sig'] + */ +$GLOBALS['XML_RPC_Server_methodSignature_sig'] = array( + array($GLOBALS['XML_RPC_Array'], + $GLOBALS['XML_RPC_String'] + ) +); + +/** + * docstring for system.methodSignature + * @global string $GLOBALS['XML_RPC_Server_methodSignature_doc'] + */ +$GLOBALS['XML_RPC_Server_methodSignature_doc'] = gettext('Returns an array of known' + . ' signatures (an array of arrays) for the method name passed. If' + . ' no signatures are known, returns a none-array (test for type !=' + . ' array to detect missing signature)'); + +/** + * signature for system.methodHelp: return = string, + * parameters = string + * @global array $GLOBALS['XML_RPC_Server_methodHelp_sig'] + */ +$GLOBALS['XML_RPC_Server_methodHelp_sig'] = array( + array($GLOBALS['XML_RPC_String'], + $GLOBALS['XML_RPC_String'] + ) +); + +/** + * docstring for methodHelp + * @global string $GLOBALS['XML_RPC_Server_methodHelp_doc'] + */ +$GLOBALS['XML_RPC_Server_methodHelp_doc'] = gettext('Returns help text if defined' + . ' for the method passed, otherwise returns an empty string'); + +/** + * dispatch map for the automatically declared XML-RPC methods. + * @global array $GLOBALS['XML_RPC_Server_dmap'] + */ +$GLOBALS['XML_RPC_Server_dmap'] = array( + 'system.listMethods' => array( + 'function' => 'XML_RPC_Server_listMethods', + 'signature' => $GLOBALS['XML_RPC_Server_listMethods_sig'], + 'docstring' => $GLOBALS['XML_RPC_Server_listMethods_doc'] + ), + 'system.methodHelp' => array( + 'function' => 'XML_RPC_Server_methodHelp', + 'signature' => $GLOBALS['XML_RPC_Server_methodHelp_sig'], + 'docstring' => $GLOBALS['XML_RPC_Server_methodHelp_doc'] + ), + 'system.methodSignature' => array( + 'function' => 'XML_RPC_Server_methodSignature', + 'signature' => $GLOBALS['XML_RPC_Server_methodSignature_sig'], + 'docstring' => $GLOBALS['XML_RPC_Server_methodSignature_doc'] + ) +); + +/** + * @global string $GLOBALS['XML_RPC_Server_debuginfo'] + */ +$GLOBALS['XML_RPC_Server_debuginfo'] = ''; + + +/** + * Lists all the methods that the XML-RPC server knows how to dispatch + * + * @return object a new XML_RPC_Response object + */ +function XML_RPC_Server_listMethods($server, $m) +{ + global $XML_RPC_err, $XML_RPC_str, $XML_RPC_Server_dmap; + + $v = new XML_RPC_Value(); + $outAr = array(); + foreach ($server->dmap as $key => $val) { + $outAr[] = new XML_RPC_Value($key, 'string'); + } + foreach ($XML_RPC_Server_dmap as $key => $val) { + $outAr[] = new XML_RPC_Value($key, 'string'); + } + $v->addArray($outAr); + return new XML_RPC_Response($v); +} + +/** + * Returns an array of known signatures (an array of arrays) + * for the given method + * + * If no signatures are known, returns a none-array + * (test for type != array to detect missing signature) + * + * @return object a new XML_RPC_Response object + */ +function XML_RPC_Server_methodSignature($server, $m) +{ + global $XML_RPC_err, $XML_RPC_str, $XML_RPC_Server_dmap; + + $methName = $m->getParam(0); + $methName = $methName->scalarval(); + if (strpos($methName, 'system.') === 0) { + $dmap = $XML_RPC_Server_dmap; + $sysCall = 1; + } else { + $dmap = $server->dmap; + $sysCall = 0; + } + // print "\n"; + if (isset($dmap[$methName])) { + if ($dmap[$methName]['signature']) { + $sigs = array(); + $thesigs = $dmap[$methName]['signature']; + for ($i = 0; $i < sizeof($thesigs); $i++) { + $cursig = array(); + $inSig = $thesigs[$i]; + for ($j = 0; $j < sizeof($inSig); $j++) { + $cursig[] = new XML_RPC_Value($inSig[$j], 'string'); + } + $sigs[] = new XML_RPC_Value($cursig, 'array'); + } + $r = new XML_RPC_Response(new XML_RPC_Value($sigs, 'array')); + } else { + $r = new XML_RPC_Response(new XML_RPC_Value('undef', 'string')); + } + } else { + $r = new XML_RPC_Response(0, $XML_RPC_err['introspect_unknown'], + $XML_RPC_str['introspect_unknown']); + } + return $r; +} + +/** + * Returns help text if defined for the method passed, otherwise returns + * an empty string + * + * @return object a new XML_RPC_Response object + */ +function XML_RPC_Server_methodHelp($server, $m) +{ + global $XML_RPC_err, $XML_RPC_str, $XML_RPC_Server_dmap; + + $methName = $m->getParam(0); + $methName = $methName->scalarval(); + if (strpos($methName, 'system.') === 0) { + $dmap = $XML_RPC_Server_dmap; + $sysCall = 1; + } else { + $dmap = $server->dmap; + $sysCall = 0; + } + + if (isset($dmap[$methName])) { + if ($dmap[$methName]['docstring']) { + $r = new XML_RPC_Response(new XML_RPC_Value($dmap[$methName]['docstring']), + 'string'); + } else { + $r = new XML_RPC_Response(new XML_RPC_Value('', 'string')); + } + } else { + $r = new XML_RPC_Response(0, $XML_RPC_err['introspect_unknown'], + $XML_RPC_str['introspect_unknown']); + } + return $r; +} + +/** + * @return void + */ +function XML_RPC_Server_debugmsg($m) +{ + global $XML_RPC_Server_debuginfo; + $XML_RPC_Server_debuginfo = $XML_RPC_Server_debuginfo . $m . "\n"; +} + + +/** + * A server for receiving and replying to XML RPC requests + * + * + * $server = new XML_RPC_Server( + * array( + * 'isan8' => + * array( + * 'function' => 'is_8', + * 'signature' => + * array( + * array('boolean', 'int'), + * array('boolean', 'int', 'boolean'), + * array('boolean', 'string'), + * array('boolean', 'string', 'boolean'), + * ), + * 'docstring' => 'Is the value an 8?' + * ), + * ), + * 1, + * 0 + * ); + * + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Server +{ + /** + * Should the payload's content be passed through mb_convert_encoding()? + * + * @see XML_RPC_Server::setConvertPayloadEncoding() + * @since Property available since Release 1.5.1 + * @var boolean + */ + var $convert_payload_encoding = false; + + /** + * The dispatch map, listing the methods this server provides. + * @var array + */ + var $dmap = array(); + + /** + * The present response's encoding + * @var string + * @see XML_RPC_Message::getEncoding() + */ + var $encoding = ''; + + /** + * Debug mode (0 = off, 1 = on) + * @var integer + */ + var $debug = 0; + + /** + * The response's HTTP headers + * @var string + */ + var $server_headers = ''; + + /** + * The response's XML payload + * @var string + */ + var $server_payload = ''; + + + /** + * The HTTP request data + * @null + */ + var $client_data = ''; + + /** + * Constructor for the XML_RPC_Server class + * + * @param array $dispMap the dispatch map. An associative array + * explaining each function. The keys of the main + * array are the procedure names used by the + * clients. The value is another associative array + * that contains up to three elements: + * + The 'function' element's value is the name + * of the function or method that gets called. + * To define a class' method: 'class::method'. + * + The 'signature' element (optional) is an + * array describing the return values and + * parameters + * + The 'docstring' element (optional) is a + * string describing what the method does + * @param int $serviceNow should the HTTP response be sent now? + * (1 = yes, 0 = no) + * @param int $debug should debug output be displayed? + * (1 = yes, 0 = no) + * + * @return void + */ + function XML_RPC_Server($dispMap, $serviceNow = 1, $debug = 0) + { + + if ($debug) { + $this->debug = 1; + } else { + $this->debug = 0; + } + + $this->dmap = $dispMap; + + if ($serviceNow) { + $this->service(); + } else { + $this->createServerPayload(); + $this->createServerHeaders(); + } + } + + /** + * @return string the debug information if debug debug mode is on + */ + function serializeDebug() + { + global $XML_RPC_Server_debuginfo; + + if ($this->debug) { + XML_RPC_Server_debugmsg('vvv POST DATA RECEIVED BY SERVER vvv' . "\n" + . $this->server_payload . $this->client_data + . "\n" . '^^^ END POST DATA ^^^'); + } + + if ($XML_RPC_Server_debuginfo != '') { + return "\n"; + } else { + return ''; + } + } + + /** + * Sets whether the payload's content gets passed through + * mb_convert_encoding() + * + * Returns PEAR_ERROR object if mb_convert_encoding() isn't available. + * + * @param int $in where 1 = on, 0 = off + * + * @return void + * + * @see XML_RPC_Message::getEncoding() + * @since Method available since Release 1.5.1 + */ + function setConvertPayloadEncoding($in) + { + if ($in && !function_exists('mb_convert_encoding')) { + return $this->raiseError('mb_convert_encoding() is not available', + XML_RPC_ERROR_PROGRAMMING); + } + $this->convert_payload_encoding = $in; + } + + /** + * Sends the response + * + * The encoding and content-type are determined by + * XML_RPC_Message::getEncoding() + * + * @return void + * + * @uses XML_RPC_Server::createServerPayload(), + * XML_RPC_Server::createServerHeaders() + */ + function service() + { + if (!$this->server_payload) { + $this->createServerPayload(); + } + if (!$this->server_headers) { + $this->createServerHeaders(); + } + + /* + * $server_headers needs to remain a string for compatibility with + * old scripts using this package, but PHP 4.4.2 no longer allows + * line breaks in header() calls. So, we split each header into + * an individual call. The initial replace handles the off chance + * that someone composed a single header with multiple lines, which + * the RFCs allow. + */ + $this->server_headers = preg_replace("@[\r\n]+[ \t]+@", + ' ', trim($this->server_headers)); + $headers = preg_split("@[\r\n]+@", $this->server_headers); + foreach ($headers as $header) + { + header($header); + } + + print $this->server_payload; + } + + /** + * Generates the payload and puts it in the $server_payload property + * + * If XML_RPC_Server::setConvertPayloadEncoding() was set to true, + * the payload gets passed through mb_convert_encoding() + * to ensure the payload matches the encoding set in the + * XML declaration. The encoding type can be manually set via + * XML_RPC_Message::setSendEncoding(). + * + * @return void + * + * @uses XML_RPC_Server::parseRequest(), XML_RPC_Server::$encoding, + * XML_RPC_Response::serialize(), XML_RPC_Server::serializeDebug() + * @see XML_RPC_Server::setConvertPayloadEncoding() + */ + function createServerPayload() + { + $this->client_data = file_get_contents("php://input"); + + $r = $this->parseRequest($this->client_data); + $this->server_payload = 'encoding . '"?>' . "\n" + . $this->serializeDebug() + . $r->serialize(); + if ($this->convert_payload_encoding) { + $this->server_payload = mb_convert_encoding($this->server_payload, + $this->encoding); + } + } + + /** + * Determines the HTTP headers and puts them in the $server_headers + * property + * + * @return boolean TRUE if okay, FALSE if $server_payload isn't set. + * + * @uses XML_RPC_Server::createServerPayload(), + * XML_RPC_Server::$server_headers + */ + function createServerHeaders() + { + if (!$this->server_payload) { + return false; + } + $this->server_headers = 'Content-Length: ' + . strlen($this->server_payload) . "\r\n" + . 'Content-Type: text/xml;' + . ' charset=' . $this->encoding; + return true; + } + + /** + * @return array + */ + function verifySignature($in, $sig) + { + for ($i = 0; $i < sizeof($sig); $i++) { + // check each possible signature in turn + $cursig = $sig[$i]; + if (sizeof($cursig) == $in->getNumParams() + 1) { + $itsOK = 1; + for ($n = 0; $n < $in->getNumParams(); $n++) { + $p = $in->getParam($n); + // print "\n"; + if ($p->kindOf() == 'scalar') { + $pt = $p->scalartyp(); + } else { + $pt = $p->kindOf(); + } + // $n+1 as first type of sig is return type + if ($pt != $cursig[$n+1]) { + $itsOK = 0; + $pno = $n+1; + $wanted = $cursig[$n+1]; + $got = $pt; + break; + } + } + if ($itsOK) { + return array(1); + } + } + } + if (isset($wanted)) { + return array(0, "Wanted ${wanted}, got ${got} at param ${pno}"); + } else { + $allowed = array(); + foreach ($sig as $val) { + end($val); + $allowed[] = key($val); + } + $allowed = array_unique($allowed); + $last = count($allowed) - 1; + if ($last > 0) { + $allowed[$last] = 'or ' . $allowed[$last]; + } + return array(0, + 'Signature permits ' . implode(', ', $allowed) + . ' parameters but the request had ' + . $in->getNumParams()); + } + } + + /** + * @return object a new XML_RPC_Response object + * + * @uses XML_RPC_Message::getEncoding(), XML_RPC_Server::$encoding + */ + function parseRequest($data = '') + { + global $XML_RPC_xh, + $XML_RPC_err, $XML_RPC_str, $XML_RPC_errxml, + $XML_RPC_defencoding, $XML_RPC_Server_dmap; + + if ($data == '') { + $data = file_get_contents("php://input"); + $this->client_data = $data; + } + + $this->encoding = XML_RPC_Message::getEncoding($data); + $parser_resource = xml_parser_create($this->encoding); + $parser = (int) $parser_resource; + + $XML_RPC_xh[$parser] = array(); + $XML_RPC_xh[$parser]['cm'] = 0; + $XML_RPC_xh[$parser]['isf'] = 0; + $XML_RPC_xh[$parser]['params'] = array(); + $XML_RPC_xh[$parser]['method'] = ''; + $XML_RPC_xh[$parser]['stack'] = array(); + $XML_RPC_xh[$parser]['valuestack'] = array(); + + $plist = ''; + + // decompose incoming XML into request structure + + xml_parser_set_option($parser_resource, XML_OPTION_CASE_FOLDING, true); + xml_set_element_handler($parser_resource, 'XML_RPC_se', 'XML_RPC_ee'); + xml_set_character_data_handler($parser_resource, 'XML_RPC_cd'); + if (!xml_parse($parser_resource, $data, 1)) { + // return XML error as a faultCode + $r = new XML_RPC_Response(0, + $XML_RPC_errxml+xml_get_error_code($parser_resource), + sprintf('XML error: %s at line %d', + xml_error_string(xml_get_error_code($parser_resource)), + xml_get_current_line_number($parser_resource))); + xml_parser_free($parser_resource); + } elseif ($XML_RPC_xh[$parser]['isf']>1) { + $r = new XML_RPC_Response(0, + $XML_RPC_err['invalid_request'], + $XML_RPC_str['invalid_request'] + . ': ' + . $XML_RPC_xh[$parser]['isf_reason']); + xml_parser_free($parser_resource); + } else { + xml_parser_free($parser_resource); + $m = new XML_RPC_Message($XML_RPC_xh[$parser]['method']); + // now add parameters in + for ($i = 0; $i < sizeof($XML_RPC_xh[$parser]['params']); $i++) { + // print '\n"; + $plist .= "$i - " . var_export($XML_RPC_xh[$parser]['params'][$i], true) . " \n"; + $m->addParam($XML_RPC_xh[$parser]['params'][$i]); + } + + if ($this->debug) { + XML_RPC_Server_debugmsg($plist); + } + + // now to deal with the method + $methName = $XML_RPC_xh[$parser]['method']; + if (strpos($methName, 'system.') === 0) { + $dmap = $XML_RPC_Server_dmap; + $sysCall = 1; + } else { + $dmap = $this->dmap; + $sysCall = 0; + } + + if (isset($dmap[$methName]['function']) + && is_string($dmap[$methName]['function']) + && strpos($dmap[$methName]['function'], '::') !== false) + { + $dmap[$methName]['function'] = + explode('::', $dmap[$methName]['function']); + } + + if (isset($dmap[$methName]['function']) + && is_callable($dmap[$methName]['function'])) + { + // dispatch if exists + if (isset($dmap[$methName]['signature'])) { + $sr = $this->verifySignature($m, + $dmap[$methName]['signature'] ); + } + if (!isset($dmap[$methName]['signature']) || $sr[0]) { + // if no signature or correct signature + if ($sysCall) { + $r = call_user_func($dmap[$methName]['function'], $this, $m); + } else { + $r = call_user_func($dmap[$methName]['function'], $m); + } + if (!is_a($r, 'XML_RPC_Response')) { + $r = new XML_RPC_Response(0, $XML_RPC_err['not_response_object'], + $XML_RPC_str['not_response_object']); + } + } else { + $r = new XML_RPC_Response(0, $XML_RPC_err['incorrect_params'], + $XML_RPC_str['incorrect_params'] + . ': ' . $sr[1]); + } + } else { + // else prepare error response + $r = new XML_RPC_Response(0, $XML_RPC_err['unknown_method'], + $XML_RPC_str['unknown_method']); + } + } + return $r; + } + + /** + * Echos back the input packet as a string value + * + * @return void + * + * Useful for debugging. + */ + function echoInput() + { + $r = new XML_RPC_Response(0); + $r->xv = new XML_RPC_Value("'Aha said I: '" . $this->client_data, 'string'); + print $r->serialize(); + } +} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * c-hanging-comment-ender-p: nil + * End: + */ + +?> diff --git a/etc/inc/zeromq.inc b/etc/inc/zeromq.inc new file mode 100644 index 000000000..db40ce958 --- /dev/null +++ b/etc/inc/zeromq.inc @@ -0,0 +1,313 @@ + + 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('ZEROMQ_AUTH_FAIL', 'authfail'); +define('ZEROMQ_TRUE', 'true'); +define('ZEROMQ_FASLE', 'false'); + +$do_not_include_config_gui_inc = true; +require("auth.inc"); + +//$debug = true; + +/* zeromq_send: Send a message to a member node */ +function zeromq_send($protocol = "tcp", $ipaddress = "127.0.0.1", $port = "8888", + $method, $params, $username, $password) { + + global $debug; + + /* Set calling function and auth information */ + $xmlparams = array( + $username, + $password, + $method, + $params + ); + + /* Create new queue object */ + $queue = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REQ, "MySock1"); + $queue->connect("{$protocol}://{$ipaddress}:{$port}"); + + /* Assign socket 1 to the queue, send and receive */ + $result = $queue->send(serialize($xmlparams))->recv(); + + /* xmlrpc_params_to_php() the result and return */ + $unserializedresult = unserialize($result); + + /* Return the result to the caller */ + return $unserializedresult; +} + +function zeromq_server($protocol = "tcp", $ipaddress = "127.0.0.1", $port = "8888") { + global $debug; + if(!$ipaddress || !$port) { + if($debug) + echo "ERROR: You must pass, proto, ipaddress and port\n"; + return; + } + if($debug) + echo "Creating ZMQSocket()\n"; + $server = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REP); + if($debug) + echo "Binding to {$protocol}://{$ipaddress}:{$port}\n"; + $server->bind("{$protocol}://{$ipaddress}:{$port}"); + if($debug) + echo "Entering while() loop\n"; + while ($msg = $server->recv()) { + // Convert the XML to a PHP array + $message = unserialize($msg); + if($debug) { + echo "Message received:\n"; + print_r($message); + } + switch ($message[2]) { + case "pfsense.exec_shell": + $function_to_call = "exec_shell_zeromq"; + break; + case "pfsense.exec_php": + $function_to_call = "exec_php_zeromq"; + break; + case "pfsense.filter_configure": + $function_to_call = "filter_configure_zeromq"; + break; + case "pfsense.interfaces_carp_configure": + $function_to_call = "interfaces_carp_configure_zeromq"; + break; + case "pfsense.backup_config_section": + $function_to_call = "backup_config_section_zeromq"; + break; + case "pfsense.restore_config_section": + $function_to_call = "restore_config_section_zeromq"; + break; + case "pfsense.merge_config_section": + $function_to_call = "merge_config_section_zeromq"; + break; + case "pfsense.merge_installedpackages_section_zeromq": + $function_to_call = "merge_installedpackages_section_zeromq"; + break; + case "pfsense.check_firmware_version": + $function_to_call = "check_firmware_version_zeromq"; + break; + case "pfsense.reboot": + $function_to_call = "reboot_zeromq"; + break; + case "pfsense.get_notices": + $function_to_call = "get_notices_zeromq"; + break; + } + if(!$function_to_call) { + if($debug) + echo "ERROR: Could not find a function to call"; + return; + } else { + if($debug) + echo "Invoking function {$message[2]}()\n;"; + } + /* Call function that is being invoked */ + $result = $function_to_call($message); + /* echo back the result */ + $server->send($result); + } +} + +function zeromq_auth($params) { + global $config, $g, $debug; + + $username = $params[0]; + $passwd = $params[1]; + + $user = getUserEntry($username); + if (!$user) { + if($debug) + echo "Could not locate user $username with getUserEntry()\n"; + return false; + } + + if (is_account_disabled($username) || is_account_expired($username)) { + if($debug) + echo "Returning account expired/disabled\n"; + return false; + } + + if ($user['password']) { + $passwd = crypt($passwd, $user['password']); + if ($passwd == $user['password']) + return true; + } + + if ($user['md5-hash']) { + $passwd = md5($passwd); + if ($passwd == $user['md5-hash']) + return true; + } + + if($debug) + echo "zeromq_auth() fall through == false\n"; + + return false; +} + +function exec_php_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) { + if($debug) + echo "Auth failed in exec_shell_zeromq()\n"; + return ZEROMQ_AUTH_FAIL; + } + $exec_php = $params[3]; + if($debug) + echo "Running exec_php_zeromq(): {$exec_php}\n"; + eval($exec_php); + if($toreturn) { + return serialize($toreturn); + } else + return ZEROMQ_FASLE; +} + +function exec_shell_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) { + if($debug) + echo "Auth failed in exec_shell_zeromq()\n"; + return ZEROMQ_AUTH_FAIL; + } + $shell_cmd = $params[3]; + if($debug) + echo "Running exec_shell_zeromq(): {$shell_cmd}\n"; + mwexec($shell_cmd); + return ZEROMQ_FASLE; +} + +function backup_config_section_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + $val = array_intersect_key($config, array_flip($params[3])); + return serialize($val); +} + +function restore_config_section_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + $config = array_merge($config, $params[3]); + $mergedkeys = implode(",", array_keys($params[3])); + write_config(sprintf(gettext("Merged in config (%s sections) from ZeroMQ client."),$mergedkeys)); + return ZEROMQ_FASLE; +} + +function merge_installedpackages_section_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + $config['installedpackages'] = array_merge($config['installedpackages'], $params[0]); + $mergedkeys = implode(",", array_keys($params[3])); + write_config(sprintf(gettext("Merged in config (%s sections) from ZeroMQ client."),$mergedkeys)); + return ZEROMQ_FASLE; +} + +function merge_config_section_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + $config = array_merge_recursive_unique($config, $params[0]); + $mergedkeys = implode(",", array_keys($params[3])); + write_config("Merged in config ({$mergedkeys} sections) from ZeroMQ client."); + return ZEROMQ_FASLE; +} + +function filter_configure_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + filter_configure(); + system_routing_configure(); + setup_gateways_monitor(); + relayd_configure(); + require_once("openvpn.inc"); + openvpn_resync_all(); + services_dhcpd_configure(); + if (isset($config['dnsmasq']['enable'])) + services_dnsmasq_configure(); + elseif (isset($config['unbound']['enable'])) + services_unbound_configure(); + local_sync_accounts(); + return ZEROMQ_FASLE; +} + +function interfaces_carp_configure_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + interfaces_carp_setup(); + interfaces_vips_configure(); + return ZEROMQ_FASLE; +} + +function check_firmware_version_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + return serialize(check_firmware_version(false)); +} + +function reboot_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + mwexec_bg("/etc/rc.reboot"); + return ZEROMQ_FASLE; +} + +function get_notices_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + if(!function_exists("get_notices")) + require("notices.inc"); + if(!$params) { + $toreturn = get_notices(); + } else { + $toreturn = get_notices($params); + } + return serialize($toreturn); +} + +?> diff --git a/etc/inetd.conf b/etc/inetd.conf new file mode 100644 index 000000000..0ff37aeab --- /dev/null +++ b/etc/inetd.conf @@ -0,0 +1 @@ +tftp-proxy dgram udp wait root /usr/libexec/tftp-proxy tftp-proxy \ No newline at end of file diff --git a/etc/login.conf b/etc/login.conf new file mode 100644 index 000000000..7d26d3a92 --- /dev/null +++ b/etc/login.conf @@ -0,0 +1,317 @@ +# login.conf - login class capabilities database. +# +# Remember to rebuild the database after each change to this file: +# +# cap_mkdb /etc/login.conf +# +# This file controls resource limits, accounting limits and +# default user environment settings. +# +# $FreeBSD: src/etc/login.conf,v 1.34.2.6 2002/07/02 20:06:18 dillon Exp $ +# + +# Default settings effectively disable resource limits, see the +# examples below for a starting point to enable them. + +# defaults +# These settings are used by login(1) by default for classless users +# Note that entries like "cputime" set both "cputime-cur" and "cputime-max" + +default:\ + :passwd_format=md5:\ + :copyright=/etc/COPYRIGHT:\ + :welcome=/etc/motd:\ + :setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES:\ + :path=/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin ~/bin:\ + :nologin=/var/run/nologin:\ + :cputime=unlimited:\ + :datasize=unlimited:\ + :stacksize=unlimited:\ + :memorylocked=unlimited:\ + :memoryuse=unlimited:\ + :filesize=unlimited:\ + :coredumpsize=unlimited:\ + :openfiles=unlimited:\ + :maxproc=unlimited:\ + :sbsize=unlimited:\ + :vmemoryuse=unlimited:\ + :idletime=unlimited:\ + :priority=0:\ + :ignoretime@:\ + :umask=022: + + +# +# A collection of common class names - forward them all to 'default' +# (login would normally do this anyway, but having a class name +# here suppresses the diagnostic) +# +standard:\ + :tc=default: +xuser:\ + :tc=default: +staff:\ + :tc=default: +daemon:\ + :tc=default: +news:\ + :tc=default: +dialer:\ + :tc=default: + +# +# Root can always login +# +# N.B. login_getpwclass(3) will use this entry for the root account, +# in preference to 'default'. +root:\ + :ignorenologin:\ + :tc=default: + +# +# Russian Users Accounts. Setup proper environment variables. +# +russian|Russian Users Accounts:\ + :charset=KOI8-R:\ + :lang=ru_RU.KOI8-R:\ + :tc=default: + + +###################################################################### +###################################################################### +## +## Example entries +## +###################################################################### +###################################################################### + +## Example defaults +## These settings are used by login(1) by default for classless users +## Note that entries like "cputime" set both "cputime-cur" and "cputime-max" +# +#default:\ +# :cputime=infinity:\ +# :datasize-cur=22M:\ +# :stacksize-cur=8M:\ +# :memorylocked-cur=10M:\ +# :memoryuse-cur=30M:\ +# :filesize=infinity:\ +# :coredumpsize=infinity:\ +# :maxproc-cur=64:\ +# :openfiles-cur=64:\ +# :priority=0:\ +# :requirehome@:\ +# :umask=022:\ +# :tc=auth-defaults: +# +# +## +## standard - standard user defaults +## +#standard:\ +# :copyright=/etc/COPYRIGHT:\ +# :welcome=/etc/motd:\ +# :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ +# :path=~/bin /bin /usr/bin /usr/local/bin:\ +# :manpath=/usr/share/man /usr/local/man:\ +# :nologin=/var/run/nologin:\ +# :cputime=1h30m:\ +# :datasize=8M:\ +# :vmemoryuse=100M:\ +# :stacksize=2M:\ +# :memorylocked=4M:\ +# :memoryuse=8M:\ +# :filesize=8M:\ +# :coredumpsize=8M:\ +# :openfiles=24:\ +# :maxproc=32:\ +# :priority=0:\ +# :requirehome:\ +# :passwordtime=90d:\ +# :umask=002:\ +# :ignoretime@:\ +# :tc=default: +# +# +## +## users of X (needs more resources!) +## +#xuser:\ +# :manpath=/usr/share/man /usr/X11R6/man /usr/local/man:\ +# :cputime=4h:\ +# :datasize=12M:\ +# :vmemoryuse=infinity:\ +# :stacksize=4M:\ +# :filesize=8M:\ +# :memoryuse=16M:\ +# :openfiles=32:\ +# :maxproc=48:\ +# :tc=standard: +# +# +## +## Staff users - few restrictions and allow login anytime +## +#staff:\ +# :ignorenologin:\ +# :ignoretime:\ +# :requirehome@:\ +# :accounted@:\ +# :path=~/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin:\ +# :umask=022:\ +# :tc=standard: +# +# +## +## root - fallback for root logins +## +#root:\ +# :path=~/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin:\ +# :cputime=infinity:\ +# :datasize=infinity:\ +# :stacksize=infinity:\ +# :memorylocked=infinity:\ +# :memoryuse=infinity:\ +# :filesize=infinity:\ +# :coredumpsize=infinity:\ +# :openfiles=infinity:\ +# :maxproc=infinity:\ +# :memoryuse-cur=32M:\ +# :maxproc-cur=64:\ +# :openfiles-cur=1024:\ +# :priority=0:\ +# :requirehome@:\ +# :umask=022:\ +# :tc=auth-root-defaults: +# +# +## +## Settings used by /etc/rc +## +#daemon:\ +# :coredumpsize@:\ +# :coredumpsize-cur=0:\ +# :datasize=infinity:\ +# :datasize-cur@:\ +# :maxproc=512:\ +# :maxproc-cur@:\ +# :memoryuse-cur=64M:\ +# :memorylocked-cur=64M:\ +# :openfiles=1024:\ +# :openfiles-cur@:\ +# :stacksize=16M:\ +# :stacksize-cur@:\ +# :tc=default: +# +# +## +## Settings used by news subsystem +## +#news:\ +# :path=/usr/local/news/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin:\ +# :cputime=infinity:\ +# :filesize=128M:\ +# :datasize-cur=64M:\ +# :stacksize-cur=32M:\ +# :coredumpsize-cur=0:\ +# :maxmemorysize-cur=128M:\ +# :memorylocked=32M:\ +# :maxproc=128:\ +# :openfiles=256:\ +# :tc=default: +# +# +## +## The dialer class should be used for a dialup PPP/SLIP accounts +## Welcome messages/news suppressed +## +#dialer:\ +# :hushlogin:\ +# :requirehome@:\ +# :cputime=unlimited:\ +# :filesize=2M:\ +# :datasize=2M:\ +# :stacksize=4M:\ +# :coredumpsize=0:\ +# :memoryuse=4M:\ +# :memorylocked=1M:\ +# :maxproc=16:\ +# :openfiles=32:\ +# :tc=standard: +# +# +## +## Site full-time 24/7 PPP/SLIP connections +## - no time accounting, restricted to access via dialin lines +## +#site:\ +# :ignoretime:\ +# :passwordtime@:\ +# :refreshtime@:\ +# :refreshperiod@:\ +# :sessionlimit@:\ +# :autodelete@:\ +# :expireperiod@:\ +# :graceexpire@:\ +# :gracetime@:\ +# :warnexpire@:\ +# :warnpassword@:\ +# :idletime@:\ +# :sessiontime@:\ +# :daytime@:\ +# :weektime@:\ +# :monthtime@:\ +# :warntime@:\ +# :accounted@:\ +# :tc=dialer:\ +# :tc=staff: +# +# +## +## Example standard accounting entries for subscriber levels +## +# +#subscriber|Subscribers:\ +# :accounted:\ +# :refreshtime=180d:\ +# :refreshperiod@:\ +# :sessionlimit@:\ +# :autodelete=30d:\ +# :expireperiod=180d:\ +# :graceexpire=7d:\ +# :gracetime=10m:\ +# :warnexpire=7d:\ +# :warnpassword=7d:\ +# :idletime=30m:\ +# :sessiontime=4h:\ +# :daytime=6h:\ +# :weektime=40h:\ +# :monthtime=120h:\ +# :warntime=4h:\ +# :tc=standard: +# +# +## +## Subscriber accounts. These accounts have their login times +## accounted and have access limits applied. +## +#subppp|PPP Subscriber Accounts:\ +# :tc=dialer:\ +# :tc=subscriber: +# +# +#subslip|SLIP Subscriber Accounts:\ +# :tc=dialer:\ +# :tc=subscriber: +# +# +#subshell|Shell Subscriber Accounts:\ +# :tc=subscriber: +# +## +## If you want some of the accounts to use traditional UNIX DES based +## password hashes. +## +#des_users:\ +# :passwd_format=des:\ +# :tc=default: diff --git a/etc/master.passwd b/etc/master.passwd new file mode 100644 index 000000000..bb46954b4 --- /dev/null +++ b/etc/master.passwd @@ -0,0 +1,29 @@ +# $FreeBSD: src/etc/master.passwd,v 1.39 2004/08/01 21:33:47 markm Exp $ +# +root:$1$9ZCIHWSF$/6MpmsZXSQbkARathg3cX1:0:0::0:0:Charlie &:/root:/bin/sh +toor:*:0:0::0:0:Bourne-again Superuser:/root: +daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin +operator:*:2:5::0:0:System &:/:/usr/sbin/nologin +bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin +tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin +kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin +games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin +news:*:8:8::0:0:News Subsystem:/:/usr/sbin/nologin +man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin +sshd:*:22:22::0:0:Secure Shell Daemon:/var/empty:/usr/sbin/nologin +smmsp:*:25:25::0:0:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin +mailnull:*:26:26::0:0:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin +bind:*:53:53::0:0:Bind Sandbox:/:/usr/sbin/nologin +unbound:*:59:59::0:0:Unbound DNS Resolver:/var/unbound:/usr/sbin/nologin +proxy:*:62:62::0:0:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin +_pflogd:*:64:64::0:0:pflogd privsep user:/var/empty:/usr/sbin/nologin +www:*:80:80::0:0:World Wide Web Owner:/nonexistent:/usr/sbin/nologin +nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin +dhcpd:*:1002:1002::0:0:DHCP Daemon:/nonexistent:/sbin/nologin +admin:$1$9ZCIHWSF$/6MpmsZXSQbkARathg3cX1:0:0::0:0:Admin User:/root:/bin/sh +_dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin +_isakmpd:*:68:68::0:0:isakmpd privsep:/var/empty:/sbin/nologin +uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico +pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin +_ntp:*:123:123::0:0:NTP daemon:/var/empty:/sbin/nologin +_relayd:*:913:913::0:0:Relay Daemon:/var/empty:/usr/sbin/nologin diff --git a/etc/motd b/etc/motd new file mode 100644 index 000000000..e69de29bb diff --git a/etc/mtree/BSD.local.dist b/etc/mtree/BSD.local.dist new file mode 100644 index 000000000..e69de29bb diff --git a/etc/networks b/etc/networks new file mode 100644 index 000000000..92982b5b2 --- /dev/null +++ b/etc/networks @@ -0,0 +1,17 @@ +# $FreeBSD: src/etc/networks,v 1.3 1999/08/27 23:23:42 peter Exp $ +# @(#)networks 5.1 (Berkeley) 6/30/90 +# +# Your Local Networks Database +# +your-net 127 # your comment +your-netmask 255.255.255 # subnet mask for your-net + +# +# Your subnets +# +subnet1 127.0.1 alias1 # comment 1 +subnet2 127.0.2 alias2 # comment 2 + +# +# Internet networks (from nic.ddn.mil) +# diff --git a/etc/passwd b/etc/passwd new file mode 100644 index 000000000..040f3e535 --- /dev/null +++ b/etc/passwd @@ -0,0 +1,26 @@ +root:*:0:0:Charlie &:/root:/bin/sh +toor:*:0:0:Bourne-again Superuser:/root: +daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin +operator:*:2:5:System &:/:/usr/sbin/nologin +bin:*:3:7:Binaries Commands and Source:/:/usr/sbin/nologin +tty:*:4:65533:Tty Sandbox:/:/usr/sbin/nologin +kmem:*:5:65533:KMem Sandbox:/:/usr/sbin/nologin +games:*:7:13:Games pseudo-user:/usr/games:/usr/sbin/nologin +news:*:8:8:News Subsystem:/:/usr/sbin/nologin +man:*:9:9:Mister Man Pages:/usr/share/man:/usr/sbin/nologin +sshd:*:22:22:Secure Shell Daemon:/var/empty:/usr/sbin/nologin +smmsp:*:25:25:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin +mailnull:*:26:26:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin +bind:*:53:53:Bind Sandbox:/:/usr/sbin/nologin +unbound:*:59:59:Unbound DNS Resolver:/var/unbound:/usr/sbin/nologin +proxy:*:62:62:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin +_pflogd:*:64:64:pflogd privsep user:/var/empty:/usr/sbin/nologin +uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico +pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin +www:*:80:80:World Wide Web Owner:/nonexistent:/usr/sbin/nologin +nobody:*:65534:65534:Unprivileged user:/nonexistent:/usr/sbin/nologin +distcc:*:1001:1001:Distcc:/home/distcc:/sbin/nologin +dhcpd:*:1002:1002:DHCP Daemon:/nonexistent:/sbin/nologin +admin:*:0:0:Admin User:/home/admin:/bin/sh +_ntp:*:123:123:NTP daemon:/var/empty:/sbin/nologin +_relayd:*:913:913:Relay Daemon:/var/empty:/usr/sbin/nologin diff --git a/etc/pf.os b/etc/pf.os new file mode 100644 index 000000000..56c7cbf5a --- /dev/null +++ b/etc/pf.os @@ -0,0 +1,698 @@ +# $FreeBSD: stable/10/etc/pf.os 244096 2012-12-10 20:52:52Z delphij $ +# $OpenBSD: pf.os,v 1.26 2012/08/03 12:25:16 jsg Exp $ +# passive OS fingerprinting +# ------------------------- +# +# SYN signatures. Those signatures work for SYN packets only (duh!). +# +# (C) Copyright 2000-2003 by Michal Zalewski +# (C) Copyright 2003 by Mike Frantzen +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# +# This fingerprint database is adapted from Michal Zalewski's p0f passive +# operating system package. The last database sync was from a Nov 3 2003 +# p0f.fp. +# +# +# Each line in this file specifies a single fingerprint. Please read the +# information below carefully before attempting to append any signatures +# reported as UNKNOWN to this file to avoid mistakes. +# +# We use the following set metrics for fingerprinting: +# +# - Window size (WSS) - a highly OS dependent setting used for TCP/IP +# performance control (max. amount of data to be sent without ACK). +# Some systems use a fixed value for initial packets. On other +# systems, it is a multiple of MSS or MTU (MSS+40). In some rare +# cases, the value is just arbitrary. +# +# NEW SIGNATURE: if p0f reported a special value of 'Snn', the number +# appears to be a multiple of MSS (MSS*nn); a special value of 'Tnn' +# means it is a multiple of MTU ((MSS+40)*nn). Unless you notice the +# value of nn is not fixed (unlikely), just copy the Snn or Tnn token +# literally. If you know this device has a simple stack and a fixed +# MTU, you can however multiply S value by MSS, or T value by MSS+40, +# and put it instead of Snn or Tnn. +# +# If WSS otherwise looks like a fixed value (for example a multiple +# of two), or if you can confirm the value is fixed, please quote +# it literally. If there's no apparent pattern in WSS chosen, you +# should consider wildcarding this value. +# +# - Overall packet size - a function of all IP and TCP options and bugs. +# +# NEW SIGNATURE: Copy this value literally. +# +# - Initial TTL - We check the actual TTL of a received packet. It can't +# be higher than the initial TTL, and also shouldn't be dramatically +# lower (maximum distance is defined as 40 hops). +# +# NEW SIGNATURE: *Never* copy TTL from a p0f-reported signature literally. +# You need to determine the initial TTL. The best way to do it is to +# check the documentation for a remote system, or check its settings. +# A fairly good method is to simply round the observed TTL up to +# 32, 64, 128, or 255, but it should be noted that some obscure devices +# might not use round TTLs (in particular, some shoddy appliances use +# "original" initial TTL settings). If not sure, you can see how many +# hops you're away from the remote party with traceroute or mtr. +# +# - Don't fragment flag (DF) - some modern OSes set this to implement PMTU +# discovery. Others do not bother. +# +# NEW SIGNATURE: Copy this value literally. +# +# - Maximum segment size (MSS) - this setting is usually link-dependent. P0f +# uses it to determine link type of the remote host. +# +# NEW SIGNATURE: Always wildcard this value, except for rare cases when +# you have an appliance with a fixed value, know the system supports only +# a very limited number of network interface types, or know the system +# is using a value it pulled out of nowhere. Specific unique MSS +# can be used to tell Google crawlbots from the rest of the population. +# +# - Window scaling (WSCALE) - this feature is used to scale WSS. +# It extends the size of a TCP/IP window to 32 bits. Some modern +# systems implement this feature. +# +# NEW SIGNATURE: Observe several signatures. Initial WSCALE is often set +# to zero or other low value. There's usually no need to wildcard this +# parameter. +# +# - Timestamp - some systems that implement timestamps set them to +# zero in the initial SYN. This case is detected and handled appropriately. +# +# - Selective ACK permitted - a flag set by systems that implement +# selective ACK functionality. +# +# - The sequence of TCP all options (MSS, window scaling, selective ACK +# permitted, timestamp, NOP). Other than the options previously +# discussed, p0f also checks for timestamp option (a silly +# extension to broadcast your uptime ;-), NOP options (used for +# header padding) and sackOK option (selective ACK feature). +# +# NEW SIGNATURE: Copy the sequence literally. +# +# To wildcard any value (except for initial TTL or TCP options), replace +# it with '*'. You can also use a modulo operator to match any values +# that divide by nnn - '%nnn'. +# +# Fingerprint entry format: +# +# wwww:ttt:D:ss:OOO...:OS:Version:Subtype:Details +# +# wwww - window size (can be *, %nnn, Snn or Tnn). The special values +# "S" and "T" which are a multiple of MSS or a multiple of MTU +# respectively. +# ttt - initial TTL +# D - don't fragment bit (0 - not set, 1 - set) +# ss - overall SYN packet size +# OOO - option value and order specification (see below) +# OS - OS genre (Linux, Solaris, Windows) +# Version - OS Version (2.0.27 on x86, etc) +# Subtype - OS subtype or patchlevel (SP3, lo0) +# details - Generic OS details +# +# If OS genre starts with '*', p0f will not show distance, link type +# and timestamp data. It is useful for userland TCP/IP stacks of +# network scanners and so on, where many settings are randomized or +# bogus. +# +# If OS genre starts with @, it denotes an approximate hit for a group +# of operating systems (signature reporting still enabled in this case). +# Use this feature at the end of this file to catch cases for which +# you don't have a precise match, but can tell it's Windows or FreeBSD +# or whatnot by looking at, say, flag layout alone. +# +# Option block description is a list of comma or space separated +# options in the order they appear in the packet: +# +# N - NOP option +# Wnnn - window scaling option, value nnn (or * or %nnn) +# Mnnn - maximum segment size option, value nnn (or * or %nnn) +# S - selective ACK OK +# T - timestamp +# T0 - timestamp with a zero value +# +# To denote no TCP options, use a single '.'. +# +# Please report any additions to this file, or any inaccuracies or +# problems spotted, to the maintainers: lcamtuf@coredump.cx, +# frantzen@openbsd.org and bugs@openbsd.org with a tcpdump packet +# capture of the relevant SYN packet(s) +# +# A test and submission page is available at +# http://lcamtuf.coredump.cx/p0f-help/ +# +# +# WARNING WARNING WARNING +# ----------------------- +# +# Do not add a system X as OS Y just because NMAP says so. It is often +# the case that X is a NAT firewall. While nmap is talking to the +# device itself, p0f is fingerprinting the guy behind the firewall +# instead. +# +# When in doubt, use common sense, don't add something that looks like +# a completely different system as Linux or FreeBSD or LinkSys router. +# Check DNS name, establish a connection to the remote host and look +# at SYN+ACK - does it look similar? +# +# Some users tweak their TCP/IP settings - enable or disable RFC1323 +# functionality, enable or disable timestamps or selective ACK, +# disable PMTU discovery, change MTU and so on. Always compare a new rule +# to other fingerprints for this system, and verify the system isn't +# "customized" before adding it. It is OK to add signature variants +# caused by a commonly used software (personal firewalls, security +# packages, etc), but it makes no sense to try to add every single +# possible /proc/sys/net/ipv4 tweak on Linux or so. +# +# KEEP IN MIND: Some packet firewalls configured to normalize outgoing +# traffic (OpenBSD pf with "scrub" enabled, for example) will, well, +# normalize packets. Signatures will not correspond to the originating +# system (and probably not quite to the firewall either). +# +# NOTE: Try to keep this file in some reasonable order, from most to +# least likely systems. This will speed up operation. Also keep most +# generic and broad rules near the end. +# + +########################## +# Standard OS signatures # +########################## + +# ----------------- AIX --------------------- + +# AIX is first because its signatures are close to NetBSD, MacOS X and +# Linux 2.0, but it uses a fairly rare MSSes, at least sometimes... +# This is a shoddy hack, though. + +45046:64:0:44:M*: AIX:4.3::AIX 4.3 +16384:64:0:44:M512: AIX:4.3:2-3:AIX 4.3.2 and earlier + +16384:64:0:60:M512,N,W%2,N,N,T: AIX:4.3:3:AIX 4.3.3-5.2 +16384:64:0:60:M512,N,W%2,N,N,T: AIX:5.1-5.2::AIX 4.3.3-5.2 +32768:64:0:60:M512,N,W%2,N,N,T: AIX:4.3:3:AIX 4.3.3-5.2 +32768:64:0:60:M512,N,W%2,N,N,T: AIX:5.1-5.2::AIX 4.3.3-5.2 +65535:64:0:60:M512,N,W%2,N,N,T: AIX:4.3:3:AIX 4.3.3-5.2 +65535:64:0:60:M512,N,W%2,N,N,T: AIX:5.1-5.2::AIX 4.3.3-5.2 +65535:64:0:64:M*,N,W1,N,N,T,N,N,S: AIX:5.3:ML1:AIX 5.3 ML1 + +# ----------------- Linux ------------------- + +# S1:64:0:44:M*:A: Linux:1.2::Linux 1.2.x (XXX quirks support) +512:64:0:44:M*: Linux:2.0:3x:Linux 2.0.3x +16384:64:0:44:M*: Linux:2.0:3x:Linux 2.0.3x + +# Endian snafu! Nelson says "ha-ha": +2:64:0:44:M*: Linux:2.0:3x:Linux 2.0.3x (MkLinux) on Mac +64:64:0:44:M*: Linux:2.0:3x:Linux 2.0.3x (MkLinux) on Mac + + +S4:64:1:60:M1360,S,T,N,W0: Linux:google::Linux (Google crawlbot) + +S2:64:1:60:M*,S,T,N,W0: Linux:2.4::Linux 2.4 (big boy) +S3:64:1:60:M*,S,T,N,W0: Linux:2.4:.18-21:Linux 2.4.18 and newer +S4:64:1:60:M*,S,T,N,W0: Linux:2.4::Linux 2.4/2.6 <= 2.6.7 +S4:64:1:60:M*,S,T,N,W0: Linux:2.6:.1-7:Linux 2.4/2.6 <= 2.6.7 + +S4:64:1:60:M*,S,T,N,W5: Linux:2.6::Linux 2.6 (newer, 1) +S4:64:1:60:M*,S,T,N,W6: Linux:2.6::Linux 2.6 (newer, 2) +S4:64:1:60:M*,S,T,N,W7: Linux:2.6::Linux 2.6 (newer, 3) +T4:64:1:60:M*,S,T,N,W7: Linux:2.6::Linux 2.6 (newer, 4) + +S10:64:1:60:M*,S,T,N,W4: Linux:3.0::Linux 3.0 + +S3:64:1:60:M*,S,T,N,W1: Linux:2.5::Linux 2.5 (sometimes 2.4) +S4:64:1:60:M*,S,T,N,W1: Linux:2.5-2.6::Linux 2.5/2.6 +S3:64:1:60:M*,S,T,N,W2: Linux:2.5::Linux 2.5 (sometimes 2.4) +S4:64:1:60:M*,S,T,N,W2: Linux:2.5::Linux 2.5 (sometimes 2.4) + +S20:64:1:60:M*,S,T,N,W0: Linux:2.2:20-25:Linux 2.2.20 and newer +S22:64:1:60:M*,S,T,N,W0: Linux:2.2::Linux 2.2 +S11:64:1:60:M*,S,T,N,W0: Linux:2.2::Linux 2.2 + +# Popular cluster config scripts disable timestamps and +# selective ACK: +S4:64:1:48:M1460,N,W0: Linux:2.4:cluster:Linux 2.4 in cluster + +# This needs to be investigated. On some systems, WSS +# is selected as a multiple of MTU instead of MSS. I got +# many submissions for this for many late versions of 2.4: +T4:64:1:60:M1412,S,T,N,W0: Linux:2.4::Linux 2.4 (late, uncommon) + +# This happens only over loopback, but let's make folks happy: +32767:64:1:60:M16396,S,T,N,W0: Linux:2.4:lo0:Linux 2.4 (local) +S8:64:1:60:M3884,S,T,N,W0: Linux:2.2:lo0:Linux 2.2 (local) + +# Opera visitors: +16384:64:1:60:M*,S,T,N,W0: Linux:2.2:Opera:Linux 2.2 (Opera?) +32767:64:1:60:M*,S,T,N,W0: Linux:2.4:Opera:Linux 2.4 (Opera?) + +# Some fairly common mods: +S4:64:1:52:M*,N,N,S,N,W0: Linux:2.4:ts:Linux 2.4 w/o timestamps +S22:64:1:52:M*,N,N,S,N,W0: Linux:2.2:ts:Linux 2.2 w/o timestamps + + +# ----------------- FreeBSD ----------------- + +16384:64:1:44:M*: FreeBSD:2.0-2.2::FreeBSD 2.0-4.2 +16384:64:1:44:M*: FreeBSD:3.0-3.5::FreeBSD 2.0-4.2 +16384:64:1:44:M*: FreeBSD:4.0-4.2::FreeBSD 2.0-4.2 +16384:64:1:60:M*,N,W0,N,N,T: FreeBSD:4.4::FreeBSD 4.4 + +1024:64:1:60:M*,N,W0,N,N,T: FreeBSD:4.4::FreeBSD 4.4 + +57344:64:1:44:M*: FreeBSD:4.6-4.8:noRFC1323:FreeBSD 4.6-4.8 (no RFC1323) +57344:64:1:60:M*,N,W0,N,N,T: FreeBSD:4.6-4.9::FreeBSD 4.6-4.9 + +32768:64:1:60:M*,N,W0,N,N,T: FreeBSD:4.8-4.11::FreeBSD 4.8-5.1 (or MacOS X) +32768:64:1:60:M*,N,W0,N,N,T: FreeBSD:5.0-5.1::FreeBSD 4.8-5.1 (or MacOS X) +65535:64:1:60:M*,N,W0,N,N,T: FreeBSD:4.8-4.11::FreeBSD 4.8-5.2 (or MacOS X) +65535:64:1:60:M*,N,W0,N,N,T: FreeBSD:5.0-5.2::FreeBSD 4.8-5.2 (or MacOS X) +65535:64:1:60:M*,N,W1,N,N,T: FreeBSD:4.7-4.11::FreeBSD 4.7-5.2 +65535:64:1:60:M*,N,W1,N,N,T: FreeBSD:5.0-5.2::FreeBSD 4.7-5.2 + +# XXX need quirks support +# 65535:64:1:60:M*,N,W0,N,N,T:Z:FreeBSD:5.1-5.4::5.1-current (1) +# 65535:64:1:60:M*,N,W1,N,N,T:Z:FreeBSD:5.1-5.4::5.1-current (2) +# 65535:64:1:60:M*,N,W2,N,N,T:Z:FreeBSD:5.1-5.4::5.1-current (3) +# 65535:64:1:44:M*:Z:FreeBSD:5.2::FreeBSD 5.2 (no RFC1323) + +# 16384:64:1:60:M*,N,N,N,N,N,N,T:FreeBSD:4.4:noTS:FreeBSD 4.4 (w/o timestamps) + +# ----------------- NetBSD ------------------ + +16384:64:0:60:M*,N,W0,N,N,T: NetBSD:1.3::NetBSD 1.3 +65535:64:0:60:M*,N,W0,N,N,T0: NetBSD:1.6:opera:NetBSD 1.6 (Opera) +16384:64:0:60:M*,N,W0,N,N,T0: NetBSD:1.6::NetBSD 1.6 +16384:64:1:60:M*,N,W0,N,N,T0: NetBSD:1.6:df:NetBSD 1.6 (DF) +65535:64:1:60:M*,N,W1,N,N,T0: NetBSD:1.6::NetBSD 1.6W-current (DF) +65535:64:1:60:M*,N,W0,N,N,T0: NetBSD:1.6::NetBSD 1.6X (DF) +32768:64:1:60:M*,N,W0,N,N,T0: NetBSD:1.6:randomization:NetBSD 1.6ZH-current (w/ ip_id randomization) + +# ----------------- OpenBSD ----------------- + +16384:64:0:60:M*,N,W0,N,N,T: OpenBSD:2.6::NetBSD 1.3 (or OpenBSD 2.6) +16384:64:1:64:M*,N,N,S,N,W0,N,N,T: OpenBSD:3.0-4.8::OpenBSD 3.0-4.8 +16384:64:0:64:M*,N,N,S,N,W0,N,N,T: OpenBSD:3.0-4.8:no-df:OpenBSD 3.0-4.8 (scrub no-df) +57344:64:1:64:M*,N,N,S,N,W0,N,N,T: OpenBSD:3.3-4.0::OpenBSD 3.3-4.0 +57344:64:0:64:M*,N,N,S,N,W0,N,N,T: OpenBSD:3.3-4.0:no-df:OpenBSD 3.3-4.0 (scrub no-df) + +65535:64:1:64:M*,N,N,S,N,W0,N,N,T: OpenBSD:3.0-4.0:opera:OpenBSD 3.0-4.0 (Opera) + +16384:64:1:64:M*,N,N,S,N,W3,N,N,T: OpenBSD:4.9::OpenBSD 4.9 +16384:64:0:64:M*,N,N,S,N,W3,N,N,T: OpenBSD:4.9:no-df:OpenBSD 4.9 (scrub no-df) + +# ----------------- Solaris ----------------- + +S17:64:1:64:N,W3,N,N,T0,N,N,S,M*: Solaris:8:RFC1323:Solaris 8 RFC1323 +S17:64:1:48:N,N,S,M*: Solaris:8::Solaris 8 +S17:255:1:44:M*: Solaris:2.5-2.7::Solaris 2.5 to 7 + +S6:255:1:44:M*: Solaris:2.6-2.7::Solaris 2.6 to 7 +S23:255:1:44:M*: Solaris:2.5:1:Solaris 2.5.1 +S34:64:1:48:M*,N,N,S: Solaris:2.9::Solaris 9 +S44:255:1:44:M*: Solaris:2.7::Solaris 7 + +4096:64:0:44:M1460: SunOS:4.1::SunOS 4.1.x + +S34:64:1:52:M*,N,W0,N,N,S: Solaris:10:beta:Solaris 10 (beta) +32850:64:1:64:M*,N,N,T,N,W1,N,N,S: Solaris:10::Solaris 10 1203 + +# ----------------- IRIX -------------------- + +49152:64:0:44:M*: IRIX:6.4::IRIX 6.4 +61440:64:0:44:M*: IRIX:6.2-6.5::IRIX 6.2-6.5 +49152:64:0:52:M*,N,W2,N,N,S: IRIX:6.5:RFC1323:IRIX 6.5 (RFC1323) +49152:64:0:52:M*,N,W3,N,N,S: IRIX:6.5:RFC1323:IRIX 6.5 (RFC1323) + +61440:64:0:48:M*,N,N,S: IRIX:6.5:12-21:IRIX 6.5.12 - 6.5.21 +49152:64:0:48:M*,N,N,S: IRIX:6.5:15-21:IRIX 6.5.15 - 6.5.21 + +49152:60:0:64:M*,N,W2,N,N,T,N,N,S: IRIX:6.5:IP27:IRIX 6.5 IP27 + + +# ----------------- Tru64 ------------------- + +32768:64:1:48:M*,N,W0: Tru64:4.0::Tru64 4.0 (or OS/2 Warp 4) +32768:64:0:48:M*,N,W0: Tru64:5.0::Tru64 5.0 +8192:64:0:44:M1460: Tru64:5.1:noRFC1323:Tru64 6.1 (no RFC1323) (or QNX 6) +61440:64:0:48:M*,N,W0: Tru64:5.1a:JP4:Tru64 v5.1a JP4 (or OpenVMS 7.x on Compaq 5.x stack) + +# ----------------- OpenVMS ----------------- + +6144:64:1:60:M*,N,W0,N,N,T: OpenVMS:7.2::OpenVMS 7.2 (Multinet 4.4 stack) + +# ----------------- MacOS ------------------- + +# XXX Need EOL tcp opt support +# S2:255:1:48:M*,W0,E:.:MacOS:8.6 classic + +# XXX some of these use EOL too +16616:255:1:48:M*,W0: MacOS:7.3-7.6:OTTCP:MacOS 7.3-8.6 (OTTCP) +16616:255:1:48:M*,W0: MacOS:8.0-8.6:OTTCP:MacOS 7.3-8.6 (OTTCP) +16616:255:1:48:M*,N,N,N: MacOS:8.1-8.6:OTTCP:MacOS 8.1-8.6 (OTTCP) +32768:255:1:48:M*,W0,N: MacOS:9.0-9.2::MacOS 9.0-9.2 +65535:255:1:48:M*,N,N,N,N: MacOS:9.1::MacOS 9.1 (OT 2.7.4) + + +# ----------------- Windows ----------------- + +# Windows TCP/IP stack is a mess. For most recent XP, 2000 and +# even 98, the patchlevel, not the actual OS version, is more +# relevant to the signature. They share the same code, so it would +# seem. Luckily for us, almost all Windows 9x boxes have an +# awkward MSS of 536, which I use to tell one from another +# in most difficult cases. + +8192:32:1:44:M*: Windows:3.11::Windows 3.11 (Tucows) +S44:64:1:64:M*,N,W0,N,N,T0,N,N,S: Windows:95::Windows 95 +8192:128:1:64:M*,N,W0,N,N,T0,N,N,S: Windows:95:b:Windows 95b + +# There were so many tweaking tools and so many stack versions for +# Windows 98 it is no longer possible to tell them from each other +# without some very serious research. Until then, there's an insane +# number of signatures, for your amusement: + +S44:32:1:48:M*,N,N,S: Windows:98:lowTTL:Windows 98 (low TTL) +8192:32:1:48:M*,N,N,S: Windows:98:lowTTL:Windows 98 (low TTL) +%8192:64:1:48:M536,N,N,S: Windows:98::Windows 98 +%8192:128:1:48:M536,N,N,S: Windows:98::Windows 98 +S4:64:1:48:M*,N,N,S: Windows:98::Windows 98 +S6:64:1:48:M*,N,N,S: Windows:98::Windows 98 +S12:64:1:48:M*,N,N,S: Windows:98::Windows 98 +T30:64:1:64:M1460,N,W0,N,N,T0,N,N,S: Windows:98::Windows 98 +32767:64:1:48:M*,N,N,S: Windows:98::Windows 98 +37300:64:1:48:M*,N,N,S: Windows:98::Windows 98 +46080:64:1:52:M*,N,W3,N,N,S: Windows:98:RFC1323:Windows 98 (RFC1323) +65535:64:1:44:M*: Windows:98:noSack:Windows 98 (no sack) +S16:128:1:48:M*,N,N,S: Windows:98::Windows 98 +S16:128:1:64:M*,N,W0,N,N,T0,N,N,S: Windows:98::Windows 98 +S26:128:1:48:M*,N,N,S: Windows:98::Windows 98 +T30:128:1:48:M*,N,N,S: Windows:98::Windows 98 +32767:128:1:52:M*,N,W0,N,N,S: Windows:98::Windows 98 +60352:128:1:48:M*,N,N,S: Windows:98::Windows 98 +60352:128:1:64:M*,N,W2,N,N,T0,N,N,S: Windows:98::Windows 98 + +# What's with 1414 on NT? +T31:128:1:44:M1414: Windows:NT:4.0:Windows NT 4.0 SP6a +64512:128:1:44:M1414: Windows:NT:4.0:Windows NT 4.0 SP6a +8192:128:1:44:M*: Windows:NT:4.0:Windows NT 4.0 (older) + +# Windows XP and 2000. Most of the signatures that were +# either dubious or non-specific (no service pack data) +# were deleted and replaced with generics at the end. + +65535:128:1:48:M*,N,N,S: Windows:2000:SP4:Windows 2000 SP4, XP SP1 +65535:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows 2000 SP4, XP SP1 +%8192:128:1:48:M*,N,N,S: Windows:2000:SP2+:Windows 2000 SP2, XP SP1 (seldom 98 4.10.2222) +%8192:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows 2000 SP2, XP SP1 (seldom 98 4.10.2222) +S20:128:1:48:M*,N,N,S: Windows:2000::Windows 2000/XP SP3 +S20:128:1:48:M*,N,N,S: Windows:XP:SP3:Windows 2000/XP SP3 +S45:128:1:48:M*,N,N,S: Windows:2000:SP4:Windows 2000 SP4, XP SP 1 +S45:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows 2000 SP4, XP SP 1 +40320:128:1:48:M*,N,N,S: Windows:2000:SP4:Windows 2000 SP4 + +S6:128:1:48:M*,N,N,S: Windows:2000:SP2:Windows XP, 2000 SP2+ +S6:128:1:48:M*,N,N,S: Windows:XP::Windows XP, 2000 SP2+ +S12:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows XP SP1 +S44:128:1:48:M*,N,N,S: Windows:2000:SP3:Windows Pro SP1, 2000 SP3 +S44:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows Pro SP1, 2000 SP3 +64512:128:1:48:M*,N,N,S: Windows:2000:SP3:Windows SP1, 2000 SP3 +64512:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows SP1, 2000 SP3 +32767:128:1:48:M*,N,N,S: Windows:2000:SP4:Windows SP1, 2000 SP4 +32767:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows SP1, 2000 SP4 + +8192:128:1:52:M*,N,W2,N,N,S: Windows:Vista::Windows Vista/7 + +# Odds, ends, mods: + +S52:128:1:48:M1260,N,N,S: Windows:2000:cisco:Windows XP/2000 via Cisco +S52:128:1:48:M1260,N,N,S: Windows:XP:cisco:Windows XP/2000 via Cisco +65520:128:1:48:M*,N,N,S: Windows:XP::Windows XP bare-bone +16384:128:1:52:M536,N,W0,N,N,S: Windows:2000:ZoneAlarm:Windows 2000 w/ZoneAlarm? +2048:255:0:40:.: Windows:.NET::Windows .NET Enterprise Server + +44620:64:0:48:M*,N,N,S: Windows:ME::Windows ME no SP (?) +S6:255:1:48:M536,N,N,S: Windows:95:winsock2:Windows 95 winsock 2 +32768:32:1:52:M1460,N,W0,N,N,S: Windows:2003:AS:Windows 2003 AS + + +# No need to be more specific, it passes: +# *:128:1:48:M*,N,N,S:U:-Windows:XP/2000 while downloading (leak!) XXX quirk +# there is an equiv similar generic sig w/o the quirk + +# ----------------- HP/UX ------------------- + +32768:64:1:44:M*: HP-UX:B.10.20::HP-UX B.10.20 +32768:64:0:48:M*,W0,N: HP-UX:11.0::HP-UX 11.0 +32768:64:1:48:M*,W0,N: HP-UX:11.10::HP-UX 11.0 or 11.11 +32768:64:1:48:M*,W0,N: HP-UX:11.11::HP-UX 11.0 or 11.11 + +# Whoa. Hardcore WSS. +0:64:0:48:M*,W0,N: HP-UX:B.11.00:A:HP-UX B.11.00 A (RFC1323) + +# ----------------- RiscOS ------------------ + +# We don't yet support the ?12 TCP option +#16384:64:1:68:M1460,N,W0,N,N,T,N,N,?12: RISCOS:3.70-4.36::RISC OS 3.70-4.36 +12288:32:0:44:M536: RISC OS:3.70:4.10:RISC OS 3.70 inet 4.10 + +# XXX quirk +# 4096:64:1:56:M1460,N,N,T:T: RISC OS:3.70:freenet:RISC OS 3.70 freenet 2.00 + + + +# ----------------- BSD/OS ------------------ + +# Once again, power of two WSS is also shared by MacOS X with DF set +8192:64:1:60:M1460,N,W0,N,N,T: BSD/OS:3.1::BSD/OS 3.1-4.3 (or MacOS X 10.2 w/DF) +8192:64:1:60:M1460,N,W0,N,N,T: BSD/OS:4.0-4.3::BSD/OS 3.1-4.3 (or MacOS X 10.2) + + +# ---------------- NewtonOS ----------------- + +4096:64:0:44:M1420: NewtonOS:2.1::NewtonOS 2.1 + +# ---------------- NeXTSTEP ----------------- + +S4:64:0:44:M1024: NeXTSTEP:3.3::NeXTSTEP 3.3 +S8:64:0:44:M512: NeXTSTEP:3.3::NeXTSTEP 3.3 + +# ------------------ BeOS ------------------- + +1024:255:0:48:M*,N,W0: BeOS:5.0-5.1::BeOS 5.0-5.1 +12288:255:0:44:M1402: BeOS:5.0::BeOS 5.0.x + +# ------------------ OS/400 ----------------- + +8192:64:1:60:M1440,N,W0,N,N,T: OS/400:VR4::OS/400 VR4/R5 +8192:64:1:60:M1440,N,W0,N,N,T: OS/400:VR5::OS/400 VR4/R5 +4096:64:1:60:M1440,N,W0,N,N,T: OS/400:V4R5:CF67032:OS/400 V4R5 + CF67032 + +# XXX quirk +# 28672:64:0:44:M1460:A:OS/390:? + +# ------------------ ULTRIX ----------------- + +16384:64:0:40:.: ULTRIX:4.5::ULTRIX 4.5 + +# ------------------- QNX ------------------- + +S16:64:0:44:M512: QNX:::QNX demodisk + +# ------------------ Novell ----------------- + +16384:128:1:44:M1460: Novell:NetWare:5.0:Novel Netware 5.0 +6144:128:1:44:M1460: Novell:IntranetWare:4.11:Novell IntranetWare 4.11 +6144:128:1:44:M1368: Novell:BorderManager::Novell BorderManager ? + +6144:128:1:52:M*,W0,N,S,N,N: Novell:Netware:6:Novell Netware 6 SP3 + + +# ----------------- SCO ------------------ +S3:64:1:60:M1460,N,W0,N,N,T: SCO:UnixWare:7.1:SCO UnixWare 7.1 +S17:64:1:60:M1380,N,W0,N,N,T: SCO:UnixWare:7.1:SCO UnixWare 7.1.3 MP3 +S23:64:1:44:M1380: SCO:OpenServer:5.0:SCO OpenServer 5.0 + +# ------------------- DOS ------------------- + +2048:255:0:44:M536: DOS:WATTCP:1.05:DOS Arachne via WATTCP/1.05 +T2:255:0:44:M984: DOS:WATTCP:1.05Arachne:Arachne via WATTCP/1.05 (eepro) + +# ------------------ OS/2 ------------------- + +S56:64:0:44:M512: OS/2:4::OS/2 4 +28672:64:0:44:M1460: OS/2:4::OS/2 Warp 4.0 + +# ----------------- TOPS-20 ----------------- + +# Another hardcore MSS, one of the ACK leakers hunted down. +# XXX QUIRK 0:64:0:44:M1460:A:TOPS-20:version 7 +0:64:0:44:M1460: TOPS-20:7::TOPS-20 version 7 + +# ----------------- FreeMiNT ---------------- + +S44:255:0:44:M536: FreeMiNT:1:16A:FreeMiNT 1 patch 16A (Atari) + +# ------------------ AMIGA ------------------ + +# XXX TCP option 12 +# S32:64:1:56:M*,N,N,S,N,N,?12:.:AMIGA:3.9 BB2 with Miami stack + +# ------------------ Plan9 ------------------ + +65535:255:0:48:M1460,W0,N: Plan9:4::Plan9 edition 4 + +# ----------------- AMIGAOS ----------------- + +16384:64:1:48:M1560,N,N,S: AMIGAOS:3.9::AMIGAOS 3.9 BB2 MiamiDX + +########################################### +# Appliance / embedded / other signatures # +########################################### + +# ---------- Firewalls / routers ------------ + +S12:64:1:44:M1460: @Checkpoint:::Checkpoint (unknown 1) +S12:64:1:48:N,N,S,M1460: @Checkpoint:::Checkpoint (unknown 2) +4096:32:0:44:M1460: ExtremeWare:4.x::ExtremeWare 4.x + +# XXX TCP option 12 +# S32:64:0:68:M512,N,W0,N,N,T,N,N,?12:.:Nokia:IPSO w/Checkpoint NG FP3 +# S16:64:0:68:M1024,N,W0,N,N,T,N,N,?12:.:Nokia:IPSO 3.7 build 026 + +S4:64:1:60:W0,N,S,T,M1460: FortiNet:FortiGate:50:FortiNet FortiGate 50 + +8192:64:1:44:M1460: Eagle:::Eagle Secure Gateway + +S52:128:1:48:M1260,N,N,N,N: LinkSys:WRV54G::LinkSys WRV54G VPN router + + + +# ------- Switches and other stuff ---------- + +4128:255:0:44:M*: Cisco:::Cisco Catalyst 3500, 7500 etc +S8:255:0:44:M*: Cisco:12008::Cisco 12008 +60352:128:1:64:M1460,N,W2,N,N,T,N,N,S: Alteon:ACEswitch::Alteon ACEswitch +64512:128:1:44:M1370: Nortel:Contivity Client::Nortel Conectivity Client + + +# ---------- Caches and whatnots ------------ + +S4:64:1:52:M1460,N,N,S,N,W0: AOL:web cache::AOL web cache + +32850:64:1:64:N,W1,N,N,T,N,N,S,M*: NetApp:5.x::NetApp Data OnTap 5.x +16384:64:1:64:M1460,N,N,S,N,W0,N: NetApp:5.3:1:NetApp 5.3.1 +65535:64:0:64:M1460,N,N,S,N,W*,N,N,T: NetApp:5.3-5.5::NetApp 5.3-5.5 +65535:64:0:60:M1460,N,W0,N,N,T: NetApp:CacheFlow::NetApp CacheFlow +8192:64:1:64:M1460,N,N,S,N,W0,N,N,T: NetApp:5.2:1:NetApp NetCache 5.2.1 +20480:64:1:64:M1460,N,N,S,N,W0,N,N,T: NetApp:4.1::NetApp NetCache4.1 + +65535:64:0:60:M1460,N,W0,N,N,T: CacheFlow:4.1::CacheFlow CacheOS 4.1 +8192:64:0:60:M1380,N,N,N,N,N,N,T: CacheFlow:1.1::CacheFlow CacheOS 1.1 + +S4:64:0:48:M1460,N,N,S: Cisco:Content Engine::Cisco Content Engine + +27085:128:0:40:.: Dell:PowerApp cache::Dell PowerApp (Linux-based) + +65535:255:1:48:N,W1,M1460: Inktomi:crawler::Inktomi crawler +S1:255:1:60:M1460,S,T,N,W0: LookSmart:ZyBorg::LookSmart ZyBorg + +16384:255:0:40:.: Proxyblocker:::Proxyblocker (what's this?) + +65535:255:0:48:M*,N,N,S: Redline:::Redline T|X 2200 + +32696:128:0:40:M1460: Spirent:Avalanche::Spirent Web Avalanche HTTP benchmarking engine + +# ----------- Embedded systems -------------- + +S9:255:0:44:M536: PalmOS:Tungsten:C:PalmOS Tungsten C +S5:255:0:44:M536: PalmOS:3::PalmOS 3/4 +S5:255:0:44:M536: PalmOS:4::PalmOS 3/4 +S4:255:0:44:M536: PalmOS:3:5:PalmOS 3.5 +2948:255:0:44:M536: PalmOS:3:5:PalmOS 3.5.3 (Handera) +S29:255:0:44:M536: PalmOS:5::PalmOS 5.0 +16384:255:0:44:M1398: PalmOS:5.2:Clie:PalmOS 5.2 (Clie) +S14:255:0:44:M1350: PalmOS:5.2:Treo:PalmOS 5.2.1 (Treo) + +S23:64:1:64:N,W1,N,N,T,N,N,S,M1460: SymbianOS:7::SymbianOS 7 + +8192:255:0:44:M1460: SymbianOS:6048::Symbian OS 6048 (Nokia 7650?) +8192:255:0:44:M536: SymbianOS:9210::Symbian OS (Nokia 9210?) +S22:64:1:56:M1460,T,S: SymbianOS:P800::Symbian OS ? (SE P800?) +S36:64:1:56:M1360,T,S: SymbianOS:6600::Symbian OS 60xx (Nokia 6600?) + + +# Perhaps S4? +5840:64:1:60:M1452,S,T,N,W1: Zaurus:3.10::Zaurus 3.10 + +32768:128:1:64:M1460,N,W0,N,N,T0,N,N,S: PocketPC:2002::PocketPC 2002 + +S1:255:0:44:M346: Contiki:1.1:rc0:Contiki 1.1-rc0 + +4096:128:0:44:M1460: Sega:Dreamcast:3.0:Sega Dreamcast Dreamkey 3.0 +T5:64:0:44:M536: Sega:Dreamcast:HKT-3020:Sega Dreamcast HKT-3020 (browser disc 51027) +S22:64:1:44:M1460: Sony:PS2::Sony Playstation 2 (SOCOM?) + +S12:64:0:44:M1452: AXIS:5600:v5.64:AXIS Printer Server 5600 v5.64 + +3100:32:1:44:M1460: Windows:CE:2.0:Windows CE 2.0 + +#################### +# Fancy signatures # +#################### + +1024:64:0:40:.: *NMAP:syn scan:1:NMAP syn scan (1) +2048:64:0:40:.: *NMAP:syn scan:2:NMAP syn scan (2) +3072:64:0:40:.: *NMAP:syn scan:3:NMAP syn scan (3) +4096:64:0:40:.: *NMAP:syn scan:4:NMAP syn scan (4) + +# Requires quirks support +# 1024:64:0:40:.:A:*NMAP:TCP sweep probe (1) +# 2048:64:0:40:.:A:*NMAP:TCP sweep probe (2) +# 3072:64:0:40:.:A:*NMAP:TCP sweep probe (3) +# 4096:64:0:40:.:A:*NMAP:TCP sweep probe (4) + +1024:64:0:60:W10,N,M265,T: *NMAP:OS:1:NMAP OS detection probe (1) +2048:64:0:60:W10,N,M265,T: *NMAP:OS:2:NMAP OS detection probe (2) +3072:64:0:60:W10,N,M265,T: *NMAP:OS:3:NMAP OS detection probe (3) +4096:64:0:60:W10,N,M265,T: *NMAP:OS:4:NMAP OS detection probe (4) + +32767:64:0:40:.: *NAST:::NASTsyn scan + +# Requires quirks support +# 12345:255:0:40:.:A:-p0f:sendsyn utility + + +##################################### +# Generic signatures - just in case # +##################################### + +#*:64:1:60:M*,N,W*,N,N,T: @FreeBSD:4.0-4.9::FreeBSD 4.x/5.x +#*:64:1:60:M*,N,W*,N,N,T: @FreeBSD:5.0-5.1::FreeBSD 4.x/5.x + +*:128:1:52:M*,N,W0,N,N,S: @Windows:XP:RFC1323:Windows XP/2000 (RFC1323 no tstamp) +*:128:1:52:M*,N,W0,N,N,S: @Windows:2000:RFC1323:Windows XP/2000 (RFC1323 no tstamp) +*:128:1:52:M*,N,W*,N,N,S: @Windows:XP:RFC1323:Windows XP/2000 (RFC1323 no tstamp) +*:128:1:52:M*,N,W*,N,N,S: @Windows:2000:RFC1323:Windows XP/2000 (RFC1323 no tstamp) +*:128:1:64:M*,N,W0,N,N,T0,N,N,S: @Windows:XP:RFC1323:Windows XP/2000 (RFC1323) +*:128:1:64:M*,N,W0,N,N,T0,N,N,S: @Windows:2000:RFC1323:Windows XP/2000 (RFC1323) +*:128:1:64:M*,N,W*,N,N,T0,N,N,S: @Windows:XP:RFC1323:Windows XP (RFC1323, w+) +*:128:1:48:M536,N,N,S: @Windows:98::Windows 98 +*:128:1:48:M*,N,N,S: @Windows:XP::Windows XP/2000 +*:128:1:48:M*,N,N,S: @Windows:2000::Windows XP/2000 + + diff --git a/etc/pfSense.obsoletedfiles b/etc/pfSense.obsoletedfiles new file mode 100644 index 000000000..6c60bfb6f --- /dev/null +++ b/etc/pfSense.obsoletedfiles @@ -0,0 +1,151 @@ +/etc/rc.parse-isc-dhcpd +/etc/rc.linkup.sh +/etc/phpshellsessions/cvssync +/etc/inc/cmd_chain.inc +/etc/inc/regdomain.inc +/etc/inc/sysctl.inc +/usr/local/www/diag_showbogons.php +/usr/local/www/interfaces_wan.php +/usr/local/www/interfaces_lan.php +/usr/local/www/interfaces_opt.php +/usr/local/www/interfaces_ppp.php +/usr/local/www/interfaces_ppp_edit.php +/usr/local/www/interfaces_wlan.inc +/usr/local/www/ifstats.cgi +/usr/local/www/easyrule.inc +/usr/local/www/exec_raw.php +/etc/rc.initial_firmware_update +/usr/local/www/javascript/index/sajax.js +/usr/local/www/sajax/index.sajax.php +/usr/local/www/interfaces_wlan_scan.php +/usr/local/www/firewall_nat_server.php +/usr/local/www/firewall_nat_server_edit.php +/usr/local/www/services_usermanager.php +/usr/local/www/firewall_rules_schedule_logic.php +/usr/local/www/firewall_shaper_edit.php +/usr/local/www/firewall_shaper_queues_edit.php +/usr/local/www/services_captiveportal_users.php +/usr/local/www/services_captiveportal_users_edit.php +/usr/local/www/system_advanced.php +/usr/local/www/system_advanced_create_certs.php +/usr/local/www/vpn_pppoe_users.php +/usr/local/www/vpn_pppoe_users_edit.php +/usr/local/www/vpn_ipsec_ca.php +/usr/local/www/vpn_ipsec_ca_edit.php +/usr/local/www/vpn_ipsec_ca_edit_create_cert.php +/usr/local/www/vpn_ipsec_edit.php +/usr/local/www/vpn_openvpn.php +/usr/local/www/vpn_openvpn_ccd.php +/usr/local/www/vpn_openvpn_ccd_edit.php +/usr/local/www/vpn_openvpn_cli.php +/usr/local/www/vpn_openvpn_cli_edit.php +/usr/local/www/vpn_openvpn_create_certs.php +/usr/local/www/vpn_openvpn_crl.php +/usr/local/www/vpn_openvpn_crl_edit.php +/usr/local/www/vpn_openvpn_srv.php +/usr/local/www/vpn_openvpn_srv_edit.php +/usr/local/www/dfuife.cgi +/usr/local/www/fred.png +/usr/local/www/index.html +/usr/local/www/system_usermanager_addcert.php +/usr/local/www/filter_log.inc +/usr/local/pkg/routed/routed.inc +/usr/local/pkg/routed/routed.xml +/usr/local/pkg/sasyncd.xml +/usr/local/pkg/carp.xml +/usr/local/www/javascript/diag_backup/diag_backup.js +/usr/local/www/progress.php +/usr/local/www/upload_progress.php +/usr/sbin/ntpd +/usr/sbin/ntpdate +/usr/sbin/ntpdc +/usr/sbin/ntptrace +/usr/sbin/ntptime +/usr/sbin/ntp-keygen +/usr/bin/ntpq +/usr/local/bin/ntp-wait +/usr/local/bin/ntpd +/usr/local/bin/ntpdate +/usr/local/bin/ntpdc +/usr/local/bin/ntpq +/usr/local/bin/ntptime +/usr/local/bin/ntptrace +/usr/local/bin/sntp +/usr/local/bin/tickadj +/usr/local/bin/c_rehash +/usr/local/bin/openssl +/usr/local/lib/libcrypto.a +/usr/local/lib/libssl.a +/usr/local/libdata/pkgconfig/libcrypto.pc +/usr/local/libdata/pkgconfig/libssl.pc +/usr/local/libdata/pkgconfig/openssl.pc +/usr/local/openssl/misc/CA.pl +/usr/local/openssl/misc/CA.sh +/usr/local/openssl/misc/c_hash +/usr/local/openssl/misc/c_info +/usr/local/openssl/misc/c_issuer +/usr/local/openssl/misc/c_name +/usr/local/openssl/misc/tsget +/usr/local/openssl/openssl.cnf.sample +/usr/local/lib/engines/lib4758cca.so +/usr/local/lib/engines/libaep.so +/usr/local/lib/engines/libatalla.so +/usr/local/lib/engines/libcapi.so +/usr/local/lib/engines/libchil.so +/usr/local/lib/engines/libcswift.so +/usr/local/lib/engines/libgmp.so +/usr/local/lib/engines/libgost.so +/usr/local/lib/engines/libnuron.so +/usr/local/lib/engines/libpadlock.so +/usr/local/lib/engines/libsureware.so +/usr/local/lib/engines/libubsec.so +/usr/local/lib/libcrypto.so +/usr/local/lib/libcrypto.so.8 +/usr/local/lib/libssl.so +/usr/local/lib/libssl.so.8 +/usr/bin/nsupdate +/usr/local/lib/libipsec.so +/usr/local/lib/libipsec.so.0 +/usr/local/sbin/racoon +/usr/local/sbin/racoonctl +/usr/local/sbin/setkey +/usr/local/lib/php/20090626/apc.so +/usr/local/lib/php/20090626/bcmath.so +/usr/local/lib/php/20090626/bz2.so +/usr/local/lib/php/20090626/ctype.so +/usr/local/lib/php/20090626/curl.so +/usr/local/lib/php/20090626/dom.so +/usr/local/lib/php/20090626/gettext.so +/usr/local/lib/php/20090626/hash.so +/usr/local/lib/php/20090626/json.so +/usr/local/lib/php/20090626/ldap.so +/usr/local/lib/php/20090626/mbstring.so +/usr/local/lib/php/20090626/mcrypt.so +/usr/local/lib/php/20090626/mysql.so +/usr/local/lib/php/20090626/openssl.so +/usr/local/lib/php/20090626/pcntl.so +/usr/local/lib/php/20090626/pdo.so +/usr/local/lib/php/20090626/pdo_sqlite.so +/usr/local/lib/php/20090626/pfSense.so +/usr/local/lib/php/20090626/posix.so +/usr/local/lib/php/20090626/radius.so +/usr/local/lib/php/20090626/readline.so +/usr/local/lib/php/20090626/session.so +/usr/local/lib/php/20090626/shmop.so +/usr/local/lib/php/20090626/simplexml.so +/usr/local/lib/php/20090626/sockets.so +/usr/local/lib/php/20090626/sqlite.so +/usr/local/lib/php/20090626/ssh2.so +/usr/local/lib/php/20090626/suhosin.so +/usr/local/lib/php/20090626/sysvmsg.so +/usr/local/lib/php/20090626/sysvsem.so +/usr/local/lib/php/20090626/sysvshm.so +/usr/local/lib/php/20090626/tokenizer.so +/usr/local/lib/php/20090626/xdebug.so +/usr/local/lib/php/20090626/xml.so +/usr/local/lib/php/20090626/xmlreader.so +/usr/local/lib/php/20090626/xmlwriter.so +/usr/local/lib/php/20090626/zlib.so +/usr/local/lib/php/20090626/zmq.so +/usr/sbin/clog +/etc/ttys_wrap diff --git a/etc/phpshellsessions/changepassword b/etc/phpshellsessions/changepassword new file mode 100644 index 000000000..6243fb8a3 --- /dev/null +++ b/etc/phpshellsessions/changepassword @@ -0,0 +1,79 @@ +require_once("config.inc"); +require("auth.inc"); +require_once("functions.inc"); + +global $g, $config, $argv, $userindex; +$userindex = index_users(); + +$args = array_slice($argv, 3); + +$password = ""; +$confpassword = ""; +$username = ""; + +$fp = fopen('php://stdin', 'r'); + +// If the first parameter is empty, ask for username +if (empty($args[0])) { + echo gettext("Enter username: "); + $username = fgets($fp); +} else { + $username = $args[0]; +} +$username = trim($username); + +// If the user does not exist, bail +$user =& getUserEntry($username); +if ($user == NULL) { + printf(gettext("User '%s' does not exist.\n"), $username); + exit(-1); +} else { + printf(gettext("Changing password for '%s'.\n"), $username); +} + +// If the user does exist, prompt for password +while (empty($password)) { + echo gettext("New Password") . ": "; + exec('/bin/stty -echo'); + $password = trim(fgets($fp)); + exec('/bin/stty echo'); + echo "\n"; +} + +// Confirm password +while (empty($confpassword)) { + echo gettext("Confirm New Password") . ": "; + exec('/bin/stty -echo'); + $confpassword = trim(fgets($fp)); + exec('/bin/stty echo'); + echo "\n"; +} + +// Check if user is disabled +if (is_account_disabled($username)) { + echo gettext("Account is disabled, would you like to re-enable? [y|n]") . ": "; + if (strcasecmp(chop(fgets($fp)), "y") == 0) { + unset($user['disabled']); + } +} +// Check if user is expired +if (is_account_expired($username)) { + echo gettext("Account is expired, would you like to clear the expiration date? [y|n]") . ": "; + if (strcasecmp(chop(fgets($fp)), "y") == 0) { + unset($user['expires']); + } +} + +fclose($fp); + +// Compare password and confirm +if ($password == $confpassword) { + //Reset password + local_user_set_password($user, $password); + local_user_set($user); + write_config(sprintf(gettext("password changed for user '%s' from console."), $username)); + exit(0); +} else { + echo gettext("New and Confirm passwords did not match.") . "\n"; + exit(-1); +} \ No newline at end of file diff --git a/etc/phpshellsessions/disablecarp b/etc/phpshellsessions/disablecarp new file mode 100644 index 000000000..1ad71aea8 --- /dev/null +++ b/etc/phpshellsessions/disablecarp @@ -0,0 +1,17 @@ +! echo "Disabling CARP..." +require_once("config.inc"); +require_once("interfaces.inc"); +require_once("util.inc"); + +set_single_sysctl("net.inet.carp.allow", "0"); +if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + switch ($vip['mode']) { + case "carp": + interface_vip_bring_down($vip); + sleep(1); + break; + } + } +} diff --git a/etc/phpshellsessions/disabledhcpd b/etc/phpshellsessions/disabledhcpd new file mode 100644 index 000000000..4dc029c63 --- /dev/null +++ b/etc/phpshellsessions/disabledhcpd @@ -0,0 +1,13 @@ +global $config; + +$config = parse_config(true); + +unset($config['dhcpd']); + +echo "Disabling DHCP Server on all interfaces..."; + +write_config("pfSsh.php disabled dhcp on all interfaces"); + +services_dhcpd_configure(); + +echo "done.\n"; \ No newline at end of file diff --git a/etc/phpshellsessions/disablereferercheck b/etc/phpshellsessions/disablereferercheck new file mode 100644 index 000000000..97d444a26 --- /dev/null +++ b/etc/phpshellsessions/disablereferercheck @@ -0,0 +1,11 @@ +global $config; + +$config = parse_config(true); + +$config['system']['webgui']['nohttpreferercheck'] = true; + +echo "Disabling HTTP referer check..."; + +write_config("PHP shell disabled HTTP referer check"); + +echo "done.\n"; diff --git a/etc/phpshellsessions/enableallowallwan b/etc/phpshellsessions/enableallowallwan new file mode 100644 index 000000000..94c0b7bcd --- /dev/null +++ b/etc/phpshellsessions/enableallowallwan @@ -0,0 +1,34 @@ +global $config; +require_once("filter.inc"); +require("shaper.inc"); +$config = parse_config(true); +echo "Adding allow all rule...\n"; +$filterent = array(); +$filterent["type"] = "pass"; +$filterent["interface"] = "wan"; +$filterent["source"]["any"] = ""; +$filterent["destination"]["any"] = ""; +$filterent["statetype"] = "keep state"; +$filterent["os"] = ""; +$filterent["descr"] = "Allow all ipv4 via pfSsh.php"; +$config["filter"]["rule"][] = $filterent; +$filterent = array(); +$filterent["type"] = "pass"; +$filterent["ipprotocol"] = "inet6"; +$filterent["interface"] = "wan"; +$filterent["source"]["any"] = ""; +$filterent["destination"]["any"] = ""; +$filterent["statetype"] = "keep state"; +$filterent["os"] = ""; +$filterent["descr"] = "Allow all ipv6 via pfSsh.php"; +$config["filter"]["rule"][] = $filterent; +echo "Turning off block private networks (if on)...\n"; +unset($config["interfaces"]["wan"]["blockpriv"]); +unlink_if_exists("/tmp/config.cache"); +write_config("pfSsh.php added allow all wan rule"); +unlink_if_exists("/tmp/config.cache"); +unset($config['interfaces']['wan']['blockbogons']); +$config = parse_config(true); +echo "Reloading the filter configuration..."; +filter_configure_sync(); +echo "\n\n"; \ No newline at end of file diff --git a/etc/phpshellsessions/enablecarp b/etc/phpshellsessions/enablecarp new file mode 100644 index 000000000..d486c0413 --- /dev/null +++ b/etc/phpshellsessions/enablecarp @@ -0,0 +1,18 @@ +! echo "Enabling CARP..." +require_once("config.inc"); +require_once("interfaces.inc"); +require_once("util.inc"); + +if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + switch ($vip['mode']) { + case "carp": + interface_carp_configure($vip); + sleep(1); + break; + } + } +} +interfaces_carp_setup(); +set_single_sysctl("net.inet.carp.allow", "1"); diff --git a/etc/phpshellsessions/enablesshd b/etc/phpshellsessions/enablesshd new file mode 100644 index 000000000..0dc76de57 --- /dev/null +++ b/etc/phpshellsessions/enablesshd @@ -0,0 +1,12 @@ +global $config; +echo "Starting enablesshd..."; +require("config.inc"); +echo "."; +$config = parse_config(true); +echo "."; +$config['system']['enablesshd'] = true; +echo "."; +write_config("pfSsh.php enabled sshd"); +echo "\nEnabling SSHD, please wait..."; +send_event("service reload sshd"); +echo "\n\n"; diff --git a/etc/phpshellsessions/externalconfiglocator b/etc/phpshellsessions/externalconfiglocator new file mode 100644 index 000000000..84534b3d5 --- /dev/null +++ b/etc/phpshellsessions/externalconfiglocator @@ -0,0 +1,3 @@ + +include("/etc/ecl.php"); + diff --git a/etc/phpshellsessions/gitsync b/etc/phpshellsessions/gitsync new file mode 100644 index 000000000..0d6ac07bc --- /dev/null +++ b/etc/phpshellsessions/gitsync @@ -0,0 +1,429 @@ +/* cvs_sync + * Written by Scott Ullrich + * (C)2005-2007 Scott Ullrich + * (C)2010-2012 Erik Fonnesbeck + * Part of the pfSense project pfSsh.php subsystem + */ + +require_once("globals.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("rrd.inc"); +require_once("pfsense-utils.inc"); + +$GIT_PKG = "git"; // Either "git" or the full package URL +$GIT_BIN= "/usr/pbi/bin/git"; +$GIT_REPO = "git://github.com/pfsense/pfsense.git"; +$DEFAULT_BRANCH = "master"; +$CODIR = "/root/pfsense"; +$GITSYNC_MERGE = "/root/.gitsync_merge"; + +/* NOTE: Set branches here */ +$branches = array( + "master" => "2.2 development branch", + "RELENG_2_1" => "2.1.* release branch", + "RELENG_2_0" => "2.0.* release branch", + "RELENG_1_2" => "1.2.* release branch", + "build_commit" => "The commit originally used to build the image" +); + +global $g; +global $argv; +global $command_split; + +if(is_array($command_split)) + $temp_args = array_slice($command_split, 2); +else + $temp_args = array_slice($argv, 3); + +$valid_args = array( + "--minimal" => "\tPerform a minimal copy of only the updated files.\n" . + "\tNot recommended if the system has files modified by any method other\n" . + "\tthan gitsync.\n", + "--help" => "\tDisplay this help list.\n" + ); +$args = array(); +$arg_count = 0; +while(!empty($temp_args)) { + $arg = array_shift($temp_args); + if($arg[0] == '-') { + switch($arg) { + case "--help": + echo "Usage: playback gitsync [options] [[repository] ]\nOptions:\n"; + foreach($valid_args as $arg_name => $arg_desc) + echo $arg_name . "\n" . $arg_desc; + exit; + case "--upgrading": + // Disables all interactive functions and neither PHP + // nor the web GUI will be killed or restarted. + $upgrading = true; + case (isset($valid_args[$arg])): + $args[$arg] = true; + break; + default: + echo "Invalid option: {$arg}\nUse --help for usage information.\n"; + exit; + } + } else { + $args[$arg_count++] = $arg; + } +} + +unlink_if_exists("/tmp/config.cache"); +conf_mount_rw(); + +if(!file_exists($GIT_BIN)) { + echo "Cannot find git, fetching...\n"; + require_once("config.inc"); + require_once("util.inc"); + require_once("pkg-utils.inc"); + + echo "Trying to fetch package info..."; + $pkg_info = get_pkg_info(); + if ($pkg_info) { + echo " Done.\n"; + } else { + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + echo "\n" . sprintf(gettext(' >>> Unable to communicate with %1$s. Please verify DNS and interface configuration, and that %2$s has functional Internet connectivity.'), $xmlrpc_base_url, $g['product_name']) . "\n"; + return; + } + if (empty($pkg_info["git"])) { + echo "Can't locate git package in pfSense repo. Using FreeBSD pkg repo.."; + + if (($g['platform'] == "nanobsd")) { + $pkgtmpdir = "/usr/bin/env PKG_TMPDIR=/root/ "; + $pkgstagingdir = "/root/tmp"; + if (!is_dir($pkgstagingdir)) + mkdir($pkgstagingdir); + $pkgstaging = "-t {$pkgstagingdir}/instmp.XXXXXX"; + } + system("{$pkgtmpdir}/usr/sbin/pkg_add {$pkgstaging} -r {$GIT_PKG}"); + + } else { + install_package("git", $pkg_info["git"], true); + echo "Done.\n"; + } +} + +# Remove mainline if exists (older) +if(is_dir("/root/pfsense/mainline")) + exec("rm -rf /root/pfsense/mainline"); + +# Remove RELENG_1_2 if exists (older) +if(is_dir("/root/pfsense/RELENG_1_2")) + exec("rm -rf /root/pfsense/RELENG_1_2"); + +# Remove HEAD if exists (older) +if(is_dir("/root/pfsense/HEAD")) + exec("rm -rf /root/pfsense/HEAD"); + +if(file_exists("/root/cvssync_backup.tgz")) { + $backup_date = `ls -lah /root/cvssync_backup.tgz | awk '{ print $6,$7,$8 }'`; + $tmp = array("RESTORE" => "Restores prior CVSSync backup data performed at {$backup_date}"); + $branches = array_merge($branches, $tmp); +} + +if(is_dir("$CODIR/pfSenseGITREPO/pfSenseGITREPO")) { + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} config remote.origin.url", $output_str, $ret); + if(is_array($output_str) && !empty($output_str[0])) + $GIT_REPO = $output_str[0]; + unset($output_str); +} + +if(!$args[0] && !$upgrading) { + echo "\nCurrent repository is $GIT_REPO\n"; + echo "\nPlease select which branch you would like to sync against:\n\n"; + foreach($branches as $branchname => $branchdesc) { + echo "{$branchname} \t {$branchdesc}\n"; + } + echo "\nOr alternatively you may enter a custom RCS branch URL (Git or HTTP).\n\n"; + $branch = readline("> "); + echo "\n"; +} else { + $branch = $args[0]; +} + +if($args[1] == "NOBACKUP") + $nobackup = true; +else + $nobackup = false; + +// If the repository has been fetched before, build a list of its branches. +if(is_dir("$CODIR/pfSenseGITREPO/pfSenseGITREPO")) { + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} branch -r", $branch_list, $ret); + if($ret == 0 && is_array($branch_list)) { + foreach ($branch_list as $branch_item) { + $branch_item = substr(strrchr($branch_item, "/"), 1); + if (!isset($branches[$branch_item])) + $branches[$branch_item] = " "; + } + } +} + +$found = false; +foreach($branches as $branchname => $branchdesc) { + if($branchname == $branch) + $found = true; +} +if(!$found) { + if(isURL($branch) && !$upgrading) { + if($args[1]) { + $GIT_REPO = $branch; + $branch = $args[1]; + $found = true; + } + else { + echo "\n"; + echo "NOTE: $branch was not found.\n\n"; + $command = readline("Is this a custom GIT URL? [y]? "); + if(strtolower($command) == "y" or $command == "") { + $GIT_REPO = $branch; + $command = readline("Checkout which branch [${DEFAULT_BRANCH}]? "); + if($command == "") + $branch = $DEFAULT_BRANCH; + if($command) + $branch = $command; + $found = true; + } + } + } + if(!$found) { + echo "\nNo valid branch found. Exiting.\n\n"; + conf_mount_ro(); + exit; + } +} + +$merge_repos = array(); +if(file_exists($GITSYNC_MERGE)) { + $gitsync_merges = file($GITSYNC_MERGE, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if(!empty($gitsync_merges) && is_array($gitsync_merges)) { + echo "\n===> Automatic merge list read from ${GITSYNC_MERGE}\n"; + foreach($gitsync_merges as $merge_line_num => $merge_line) { + $merge_comments = explode("#", trim($merge_line)); + if(empty($merge_comments[0])) + continue; + + $merge_line = explode(" ", trim($merge_comments[0])); + if(count($merge_line) != 2 || empty($merge_line[0]) || empty($merge_line[1])) { + echo "\nLine " . ($merge_line_num + 1) . " does not have the correct parameter count or has improper spacing.\n"; + echo "Expected parameters: repository_url branch\n"; + echo "Line read: " . implode(" ", $merge_line) . "\n\n"; + echo "Aborting automatic merge.\n\n"; + $merge_repos = array(); + break; + } + $merge_repos[] = array('repo' => $merge_line[0], 'branch' => $merge_line[1]); + } + } +} +if(!$args[0] && !$upgrading) { + do { + echo "\nAdd a custom RCS branch URL (Git or HTTP) to merge in or press enter if done.\n\n"; + $merge_repo = readline("> "); + if(!empty($merge_repo)) { + $merge_branch = readline("Merge which branch [${DEFAULT_BRANCH}]? "); + if($merge_branch == "") + $merge_repos[] = array('repo' => $merge_repo, 'branch' => $DEFAULT_BRANCH); + else if($merge_branch) + $merge_repos[] = array('repo' => $merge_repo, 'branch' => $merge_branch); + } + } while(!empty($merge_repo)); +} + +if($branch == "RESTORE" && $g['platform'] == "pfSense") { + if(!file_exists("/root/cvssync_backup.tgz")) { + echo "Sorry, we could not find a previous CVSSync backup file.\n"; + conf_mount_ro(); + exit(); + } + echo "===> Restoring previous CVSSync backup... Please wait...\n"; + exec("tar Uxpf /root/cvssync_backup.tgz -C /"); + post_cvssync_commands(); + conf_mount_ro(); + exit(); +} else { + $nobackup = true; // do not backup embedded, livecd +} + +if($nobackup == false) { + echo "===> Backing up current pfSense information...\n"; + echo "===> Please wait... "; + exec("tar czPf /root/cvssync_backup.tgz --exclude /root --exclude /dev --exclude /tmp --exclude /var/run --exclude /var/empty /"); + $size = filesize("/root/cvssync_backup.tgz"); + echo "{$size} bytes.\n\n"; + sleep(5); +} + +echo "===> Checking out $branch\n"; + +// Git commands for resetting to the specified branch +if($branch == "build_commit") { + $git_cmd = array( + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} branch " . escapeshellarg($branch) . " 2>/dev/null", + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} checkout -f " . escapeshellarg($branch) . " 2>/dev/null", + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} reset --hard " . escapeshellarg(trim(file_get_contents("/etc/version.lastcommit"))) + ); +} else { + $git_cmd = array( + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} branch " . escapeshellarg($branch) . " " . escapeshellarg("origin/{$branch}") . " 2>/dev/null", + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} checkout -f " . escapeshellarg($branch) . " 2>/dev/null", + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} reset --hard " . escapeshellarg("origin/{$branch}") + ); +} + +// Git 'er done! +if(is_dir("$CODIR/pfSenseGITREPO/pfSenseGITREPO")) { + echo "===> Fetching updates...\n"; + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} config remote.origin.url " . escapeshellarg($GIT_REPO)); + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} fetch"); + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} clean -f -f -x -d"); + run_cmds($git_cmd); +} else { + exec("mkdir -p $CODIR/pfSenseGITREPO"); + echo "Executing cd $CODIR/pfSenseGITREPO && {$GIT_BIN} clone $GIT_REPO pfSenseGITREPO\n"; + exec("cd $CODIR/pfSenseGITREPO && {$GIT_BIN} clone " . escapeshellarg($GIT_REPO) . " pfSenseGITREPO"); + if(is_dir("$CODIR/pfSenseGITREPO/pfSense")) + exec("mv $CODIR/pfSenseGITREPO/pfSense $CODIR/pfSenseGITREPO/pfSenseGITREPO"); + if(is_dir("$CODIR/pfSenseGITREPO/mainline")) + exec("mv $CODIR/pfSenseGITREPO/mainline $CODIR/pfSenseGITREPO/pfSenseGITREPO"); + run_cmds($git_cmd); +} + +foreach($merge_repos as $merge_repo) { + echo "===> Merging branch {$merge_repo['branch']} from {$merge_repo['repo']}\n"; + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} pull " . escapeshellarg($merge_repo['repo']) . " " . escapeshellarg($merge_repo['branch']), $output_str, $ret); + unset($output_str); + if($ret <> 0) { + echo "\nMerge failed. Aborting sync.\n\n"; + run_cmds($git_cmd); + conf_mount_ro(); + exit; + } +} + +if(isset($args["--minimal"])) { + if(file_exists("/etc/version.gitsync")) + $old_revision = trim(file_get_contents("/etc/version.gitsync")); + else if(file_exists("/etc/version.lastcommit")) + $old_revision = trim(file_get_contents("/etc/version.lastcommit")); + $files_to_copy = strtr(shell_exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} diff --name-only " . escapeshellarg($old_revision)), "\n", " "); +} else + $files_to_copy = '--exclude .git .'; + +// Save new commit ID for later minimal file copies +exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} rev-parse -q --verify HEAD > /etc/version.gitsync"); + +exec("mkdir -p /tmp/lighttpd/cache/compress/"); + +// Nuke CVS and pfSense tarballs +exec("cd ${CODIR}/pfSenseGITREPO/pfSenseGITREPO && find . -name CVS -exec rm -rf {} \; 2>/dev/null"); +exec("cd ${CODIR}/pfSenseGITREPO/pfSenseGITREPO && find . -name pfSense.tgz -exec rm {} \; 2>/dev/null"); + +// Remove files that we do not want to overwrite the system with +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/crontab 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/master.passwd 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/passwd 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/fstab 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/ttys 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/group 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/fstab 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/platform 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/boot/device.hints 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/boot/loader.conf 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/boot/loader.rc 2>/dev/null"); +exec("rm -rf ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/conf*"); +exec("rm -rf ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/cf 2>/dev/null"); +exec("rm -rf ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/root/.shrc"); +exec("rm -rf ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/root/.tcshrc"); +exec("rm -f ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/syslog.conf 2>/dev/null"); + +echo "===> Installing new files...\n"; + +if($g['platform'] == "pfSense") + $command = "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO ; tar -cpf - {$files_to_copy} | (cd / ; tar -Uxpf -)"; +else + $command = "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO ; tar -cpf - {$files_to_copy} | (cd / ; tar -xpf -) 2>/dev/null"; +if(!empty($files_to_copy)) + exec($command); +else { + echo "Already up-to-date.\n"; + $upgrading = true; +} + +// Reset the repository to restore the deleted files +exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} reset --hard >/dev/null 2>/dev/null"); + +// Remove obsolete files +$files_to_remove = file("/etc/pfSense.obsoletedfiles"); +foreach($files_to_remove as $file_to_remove) + if(file_exists($file_to_remove)) + exec("/bin/rm -f $file_to_remove"); + +if(!$upgrading) + post_cvssync_commands(); + +echo "===> Checkout complete.\n"; +echo "\n"; +if(!$upgrading) + echo "Your system is now sync'd and PHP and Lighty will be restarted in 5 seconds.\n\n"; +else + echo "Your system is now sync'd.\n\n"; + +function post_cvssync_commands() { + echo "===> Removing FAST-CGI temporary files...\n"; + exec("find /tmp -name \"php-fastcgi.socket*\" -exec rm -rf {} \;"); + exec("find /tmp -name \"*.tmp\" -exec rm -rf {} \;"); + + exec("rm -rf /tmp/xcache/* 2>/dev/null"); + + echo "===> Upgrading configuration (if needed)...\n"; + convert_config(); + + echo "===> Configuring filter..."; + exec("/etc/rc.filter_configure_sync"); + exec("pfctl -f /tmp/rules.debug"); + echo "\n"; + + if(file_exists("/etc/rc.php_ini_setup")) { + echo "===> Running /etc/rc.php_ini_setup..."; + exec("/etc/rc.php_ini_setup"); + echo "\n"; + } + + /* lock down console if necessary */ + echo "===> Locking down the console if needed...\n"; + reload_ttys(); + + echo "===> Signaling PHP and Lighty restart..."; + $fd = fopen("/tmp/restart_lighty", "w"); + fwrite($fd, "#!/bin/sh\n"); + fwrite($fd, "sleep 5\n"); + fwrite($fd, "/usr/local/sbin/pfSctl -c 'service restart webgui'\n"); + if(file_exists("/var/etc/lighty-CaptivePortal.conf")) + fwrite($fd, "/usr/local/sbin/lighttpd -f /var/etc/lighty-CaptivePortal.conf\n"); + fclose($fd); + mwexec_bg("sh /tmp/restart_lighty"); + echo "\n"; + +} + +function isUrl($url = "") { + if($url) + if(strstr($url, "rcs.pfsense.org") or + strstr($url, "mainline") or + strstr($url, ".git") or strstr($url, "git://")) + return true; + return false; +} + +function run_cmds($cmds) { + global $debug; + foreach($cmds as $cmd) { + if($debug) + echo "Running $cmd"; + exec($cmd); + } +} + +conf_mount_ro(); diff --git a/etc/phpshellsessions/installpkg b/etc/phpshellsessions/installpkg new file mode 100644 index 000000000..30228abc0 --- /dev/null +++ b/etc/phpshellsessions/installpkg @@ -0,0 +1,39 @@ +require_once("config.inc"); +require_once("util.inc"); +require_once("pkg-utils.inc"); + +global $g, $config, $argv, $command_split; + +if(is_array($command_split)) + $args = array_slice($command_split, 2); +else + $args = array_slice($argv, 3); + +$pkg_name = $args[0]; +$install_type = empty($args[1]) ? "normal" : $args[1]; + +echo "Installing package \"{$pkg_name}\"...\n"; + +echo "Trying to fetch package info..."; +$pkg_info = get_pkg_info(); +if ($pkg_info) { + echo " Done.\n"; +} else { + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + echo "\n" . sprintf(gettext(' >>> Unable to communicate with %1$s. Please verify DNS and interface configuration, and that %2$s has functional Internet connectivity.'), $xmlrpc_base_url, $g['product_name']) . "\n"; + return; +} + +$static_output = ""; +$pkg_interface = "console"; + +if (empty($pkg_info[$pkg_name])) + echo "\nPackage not found.\n"; +elseif ($install_type == "normal") + install_package($pkg_name, $pkg_info[$pkg_name], true); +elseif ($install_type == "xmlonly") + install_package_xml($pkg_name); +else + echo "Invalid install type. Valid values are: normal, xmlonly.\n"; + +echo "\nDone.\n"; diff --git a/etc/phpshellsessions/listpkg b/etc/phpshellsessions/listpkg new file mode 100644 index 000000000..9c13b457a --- /dev/null +++ b/etc/phpshellsessions/listpkg @@ -0,0 +1,15 @@ +require_once("config.inc"); +require_once("util.inc"); + +global $g, $config; + +echo "Installed packages:\n"; + +foreach($config['installedpackages']['package'] as $package) { + $name = str_pad("{$package['name']}-{$package['version']}", 30); + $descr = $package['descr']; + $line = "{$name} {$descr}"; + if (strlen($line) > 80) + $line = substr($line, 0, 77) . "..."; + echo "{$line}\n"; +} diff --git a/etc/phpshellsessions/removepkgconfig b/etc/phpshellsessions/removepkgconfig new file mode 100644 index 000000000..ea365bfb9 --- /dev/null +++ b/etc/phpshellsessions/removepkgconfig @@ -0,0 +1,8 @@ +global $config; +$config = parse_config(true); +unset($config['installedpackages']); +echo "Clearing package configuration information...\n"; +write_config("pfSsh.php cleared package configuration data."); +$config = parse_config(true); +echo "Removing startup files from /usr/local/etc/rc.d/...\n"; +exec("rm /usr/local/etc/rc.d/*"); diff --git a/etc/phpshellsessions/removeshaper b/etc/phpshellsessions/removeshaper new file mode 100644 index 000000000..2a221cd93 --- /dev/null +++ b/etc/phpshellsessions/removeshaper @@ -0,0 +1,24 @@ +require("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("rrd.inc"); + +/* Much of this borrowed from firewall_shaper.php */ + +echo gettext("Removing shaper settings...\n"); + +unset($config['shaper']['queue']); +unset($queue); +unset($altq); + +foreach ($config['filter']['rule'] as $key => $rule) { + if (isset($rule['wizard']) && $rule['wizard'] == "yes") + unset($config['filter']['rule'][$key]); +} +if (write_config()) { + echo gettext("Shaper Successfully Removed.\n"); +} else { + echo gettext("Unable to write config.xml (Access Denied?)\n"); +} +filter_configure(); \ No newline at end of file diff --git a/etc/phpshellsessions/restartdhcpd b/etc/phpshellsessions/restartdhcpd new file mode 100644 index 000000000..e24c8421e --- /dev/null +++ b/etc/phpshellsessions/restartdhcpd @@ -0,0 +1,4 @@ +! echo "Killing dhcp server..." +! killall dhcpd +! echo "Restarting dhcp server..." +services_dhcpd_configure(); diff --git a/etc/phpshellsessions/restartipsec b/etc/phpshellsessions/restartipsec new file mode 100644 index 000000000..66f9eb351 --- /dev/null +++ b/etc/phpshellsessions/restartipsec @@ -0,0 +1,5 @@ +! echo "Restarting ipsec..." +require_once("config.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); +vpn_ipsec_configure(); diff --git a/etc/phpshellsessions/svc b/etc/phpshellsessions/svc new file mode 100644 index 000000000..5c47507ea --- /dev/null +++ b/etc/phpshellsessions/svc @@ -0,0 +1,98 @@ +require_once("config.inc"); +require_once("util.inc"); +require_once("service-utils.inc"); + +function usage() { + echo "Usage: playback svc [service-specific options]\n\n"; + echo "Examples:\n"; + echo "playback svc stop dhcpd\n"; + echo "playback svc restart openvpn client 2\n"; + echo "playback svc stop captiveportal zone1\n"; + echo "\n"; +} + +global $g, $config, $argv, $command_split; + +if(is_array($command_split)) + $args = array_slice($command_split, 2); +else + $args = array_slice($argv, 3); + +if (empty($args[0])) { + usage(); +} + +$extras = array(); + +// start, stop, restart +$action = $args[0]; + +// dhcpd, openvpn, etc. +$svc_name = $args[1]; + +// Handle servive-specific options. +switch ($svc_name) { + case "openvpn": + if (in_array($args[2], array("server", "client"))) { + $extras['vpnmode'] = $args[2]; + } else { + echo "Invalid OpenVPN mode (server, client)\n"; + return; + } + if (is_numeric($args[3])) { + $extras['id'] = $args[3]; + } else { + echo "Invalid OpenVPN ID, must be numeric\n"; + return; + } + $vpnsvc = find_service_by_openvpn_vpnid($extras['id']); + if (empty($vpnsvc)) { + echo "No OpenVPN client or server found with that ID.\n"; + return; + } + break; + case "captiveportal": + if (is_validaliasname($args[2])) { + $extras['zone'] = $args[2]; + } else { + echo "Invalid Captive Portal Zone.\n"; + return; + } + $cpzone = find_service_by_cp_zone($extras['zone']); + if (empty($cpzone)) { + echo "No Captive Portal Zone found with that name.\n"; + return; + } + break; +} + +switch ($action) { + case "restart": + echo "Attempting to issue {$action} to {$svc_name} service...\n"; + $savemsg = service_control_restart($svc_name, $extras); + break; + case "start": + echo "Attempting to issue {$action} to {$svc_name} service...\n"; + $savemsg = service_control_start($svc_name, $extras); + break; + case "stop": + echo "Attempting to issue {$action} to {$svc_name} service...\n"; + $savemsg = service_control_stop($svc_name, $extras); + break; + case "status": + switch ($svc_name) { + case "openvpn": + $service = $vpnsvc; + break; + case "captiveportal": + $service = $cpzone; + break; + default: + $service = find_service_by_name($svc_name); + break; + } + $savemsg = get_service_status($service) ? "Service {$svc_name} is running." : "Service {$svc_name} is stopped."; + break; +} + +echo "\n{$savemsg}\n"; diff --git a/etc/phpshellsessions/uninstallpkg b/etc/phpshellsessions/uninstallpkg new file mode 100644 index 000000000..484ccc8ef --- /dev/null +++ b/etc/phpshellsessions/uninstallpkg @@ -0,0 +1,35 @@ +require_once("config.inc"); +require_once("util.inc"); +require_once("pkg-utils.inc"); + +global $g, $config, $argv, $command_split; + +if(is_array($command_split)) + $args = array_slice($command_split, 2); +else + $args = array_slice($argv, 3); + +$pkg_name = $args[0]; +$remove_type = empty($args[1]) ? "normal" : $args[1]; +$pkg_info = array(); + +echo "Removing package \"{$pkg_name}\"...\n"; + +foreach($config['installedpackages']['package'] as $package) { + if ($pkg_name == $package['name']) + $pkg_info = $package; +} + +$static_output = ""; +$pkg_interface = "console"; + +if (empty($pkg_info)) + echo "\nPackage not installed.\n"; +elseif ($remove_type == "normal") + uninstall_package($pkg_name); +elseif ($remove_type == "xmlonly") + delete_package_xml($pkg_name); +else + echo "Invalid removal type. Valid values are: normal, xmlonly.\n"; + +echo "\nDone.\n"; \ No newline at end of file diff --git a/etc/platform b/etc/platform new file mode 100644 index 000000000..2838fb1b3 --- /dev/null +++ b/etc/platform @@ -0,0 +1 @@ +cdrom diff --git a/etc/printcap b/etc/printcap new file mode 100644 index 000000000..e69de29bb diff --git a/etc/protocols b/etc/protocols new file mode 100644 index 000000000..763cbcdfc --- /dev/null +++ b/etc/protocols @@ -0,0 +1,158 @@ +# +# Internet protocols +# +# $FreeBSD: stable/10/etc/protocols 250453 2013-05-10 13:57:44Z eadler $ +# from: @(#)protocols 5.1 (Berkeley) 4/17/89 +# +# See also http://www.iana.org/assignments/protocol-numbers +# +ip 0 IP # internet protocol, pseudo protocol number +#hopopt 0 HOPOPT # hop-by-hop options for ipv6 +icmp 1 ICMP # internet control message protocol +igmp 2 IGMP # internet group management protocol +ggp 3 GGP # gateway-gateway protocol +ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'') +st2 5 ST2 # ST2 datagram mode (RFC 1819) (officially ``ST'') +tcp 6 TCP # transmission control protocol +cbt 7 CBT # CBT, Tony Ballardie +egp 8 EGP # exterior gateway protocol +igp 9 IGP # any private interior gateway (Cisco: for IGRP) +bbn-rcc 10 BBN-RCC-MON # BBN RCC Monitoring +nvp 11 NVP-II # Network Voice Protocol +pup 12 PUP # PARC universal packet protocol +argus 13 ARGUS # ARGUS +emcon 14 EMCON # EMCON +xnet 15 XNET # Cross Net Debugger +chaos 16 CHAOS # Chaos +udp 17 UDP # user datagram protocol +mux 18 MUX # Multiplexing protocol +dcn 19 DCN-MEAS # DCN Measurement Subsystems +hmp 20 HMP # host monitoring protocol +prm 21 PRM # packet radio measurement protocol +xns-idp 22 XNS-IDP # Xerox NS IDP +trunk-1 23 TRUNK-1 # Trunk-1 +trunk-2 24 TRUNK-2 # Trunk-2 +leaf-1 25 LEAF-1 # Leaf-1 +leaf-2 26 LEAF-2 # Leaf-2 +rdp 27 RDP # "reliable datagram" protocol +irtp 28 IRTP # Internet Reliable Transaction Protocol +iso-tp4 29 ISO-TP4 # ISO Transport Protocol Class 4 +netblt 30 NETBLT # Bulk Data Transfer Protocol +mfe-nsp 31 MFE-NSP # MFE Network Services Protocol +merit-inp 32 MERIT-INP # MERIT Internodal Protocol +dccp 33 DCCP # Datagram Congestion Control Protocol +3pc 34 3PC # Third Party Connect Protocol +idpr 35 IDPR # Inter-Domain Policy Routing Protocol +xtp 36 XTP # Xpress Tranfer Protocol +ddp 37 DDP # Datagram Delivery Protocol +idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport Proto +tp++ 39 TP++ # TP++ Transport Protocol +il 40 IL # IL Transport Protocol +ipv6 41 IPV6 # ipv6 +sdrp 42 SDRP # Source Demand Routing Protocol +ipv6-route 43 IPV6-ROUTE # routing header for ipv6 +ipv6-frag 44 IPV6-FRAG # fragment header for ipv6 +idrp 45 IDRP # Inter-Domain Routing Protocol +rsvp 46 RSVP # Resource ReSerVation Protocol +gre 47 GRE # Generic Routing Encapsulation +dsr 48 DSR # Dynamic Source Routing Protocol +bna 49 BNA # BNA +esp 50 ESP # encapsulating security payload +ah 51 AH # authentication header +i-nlsp 52 I-NLSP # Integrated Net Layer Security TUBA +swipe 53 SWIPE # IP with Encryption +narp 54 NARP # NBMA Address Resolution Protocol +mobile 55 MOBILE # IP Mobility +tlsp 56 TLSP # Transport Layer Security Protocol +skip 57 SKIP # SKIP +ipv6-icmp 58 IPV6-ICMP icmp6 # ICMP for IPv6 +ipv6-nonxt 59 IPV6-NONXT # no next header for ipv6 +ipv6-opts 60 IPV6-OPTS # destination options for ipv6 +# 61 # any host internal protocol +cftp 62 CFTP # CFTP +# 63 # any local network +sat-expak 64 SAT-EXPAK # SATNET and Backroom EXPAK +kryptolan 65 KRYPTOLAN # Kryptolan +rvd 66 RVD # MIT Remote Virtual Disk Protocol +ippc 67 IPPC # Internet Pluribus Packet Core +# 68 # any distributed filesystem +sat-mon 69 SAT-MON # SATNET Monitoring +visa 70 VISA # VISA Protocol +ipcv 71 IPCV # Internet Packet Core Utility +cpnx 72 CPNX # Computer Protocol Network Executive +cphb 73 CPHB # Computer Protocol Heart Beat +wsn 74 WSN # Wang Span Network +pvp 75 PVP # Packet Video Protocol +br-sat-mon 76 BR-SAT-MON # Backroom SATNET Monitoring +sun-nd 77 SUN-ND # SUN ND PROTOCOL-Temporary +wb-mon 78 WB-MON # WIDEBAND Monitoring +wb-expak 79 WB-EXPAK # WIDEBAND EXPAK +iso-ip 80 ISO-IP # ISO Internet Protocol +vmtp 81 VMTP # Versatile Message Transport +secure-vmtp 82 SECURE-VMTP # SECURE-VMTP +vines 83 VINES # VINES +ttp 84 TTP # TTP +#iptm 84 IPTM # Protocol Internet Protocol Traffic +nsfnet-igp 85 NSFNET-IGP # NSFNET-IGP +dgp 86 DGP # Dissimilar Gateway Protocol +tcf 87 TCF # TCF +eigrp 88 EIGRP # Enhanced Interior Routing Protocol (Cisco) +ospf 89 OSPFIGP # Open Shortest Path First IGP +sprite-rpc 90 Sprite-RPC # Sprite RPC Protocol +larp 91 LARP # Locus Address Resolution Protocol +mtp 92 MTP # Multicast Transport Protocol +ax.25 93 AX.25 # AX.25 Frames +ipip 94 IPIP # Yet Another IP encapsulation +micp 95 MICP # Mobile Internetworking Control Pro. +scc-sp 96 SCC-SP # Semaphore Communications Sec. Pro. +etherip 97 ETHERIP # Ethernet-within-IP Encapsulation +encap 98 ENCAP # Yet Another IP encapsulation +# 99 # any private encryption scheme +gmtp 100 GMTP # GMTP +ifmp 101 IFMP # Ipsilon Flow Management Protocol +pnni 102 PNNI # PNNI over IP +pim 103 PIM # Protocol Independent Multicast +aris 104 ARIS # ARIS +scps 105 SCPS # SCPS +qnx 106 QNX # QNX +a/n 107 A/N # Active Networks +ipcomp 108 IPComp # IP Payload Compression Protocol +snp 109 SNP # Sitara Networks Protocol +compaq-peer 110 Compaq-Peer # Compaq Peer Protocol +ipx-in-ip 111 IPX-in-IP # IPX in IP +carp 112 CARP vrrp # Common Address Redundancy Protocol +pgm 113 PGM # PGM Reliable Transport Protocol +# 114 # any 0-hop protocol +l2tp 115 L2TP # Layer Two Tunneling Protocol +ddx 116 DDX # D-II Data Exchange +iatp 117 IATP # Interactive Agent Transfer Protocol +stp 118 STP # Schedule Transfer Protocol +srp 119 SRP # SpectraLink Radio Protocol +uti 120 UTI # UTI +smp 121 SMP # Simple Message Protocol +sm 122 SM # SM +ptp 123 PTP # Performance Transparency Protocol +isis 124 ISIS # ISIS over IPv4 +fire 125 FIRE +crtp 126 CRTP # Combat Radio Transport Protocol +crudp 127 CRUDP # Combat Radio User Datagram +sscopmce 128 SSCOPMCE +iplt 129 IPLT +sps 130 SPS # Secure Packet Shield +pipe 131 PIPE # Private IP Encapsulation within IP +sctp 132 SCTP # Stream Control Transmission Protocol +fc 133 FC # Fibre Channel +rsvp-e2e-ignore 134 RSVP-E2E-IGNORE # Aggregation of RSVP for IP reservations +mobility-header 135 Mobility-Header # Mobility Support in IPv6 +udplite 136 UDPLite # The UDP-Lite Protocol +mpls-in-ip 137 MPLS-IN-IP # Encapsulating MPLS in IP +manet 138 MANET # MANET Protocols (RFC5498) +hip 139 HIP # Host Identity Protocol (RFC5201) +shim6 140 SHIM6 # Shim6 Protocol (RFC5533) +wesp 141 WESP # Wrapped Encapsulating Security Payload (RFC5840) +rohc 142 ROHC # Robust Header Compression (RFC5858) +# 138-254 # Unassigned +pfsync 240 PFSYNC # PF Synchronization +# 253-254 # Use for experimentation and testing (RFC3692) +# 255 # Reserved +divert 258 DIVERT # Divert pseudo-protocol [non IANA] diff --git a/etc/pubkey.pem b/etc/pubkey.pem new file mode 100644 index 000000000..7dd575d00 --- /dev/null +++ b/etc/pubkey.pem @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAN08c22jym3KCRUF8/rKNXgU/J0vv6UC9eCta/ATTNgeW/z2rp/HsjcPkMLx9dLaqufShC0VzsUbGlqCsdQT8jfwBiLG2pjUkX20qTStRG/rs9Tv0rS/8eVNT/DbQ6zL3PTdp+XAIq+KQLucqcBazTqSzyF7ghZ7OVmsX1/ixTP3AAAAFQCYcP378X/dQ08l6u8O5uvEtxbvEwAAAIEAyOOuWttXGrprzBhKrjhop58bZTOZp0J0IMHMwi/J+K3HUuPZnaltGoW21MjqSvVor4m22r/3b8aUIom+jp4I/bmpxTOUgO6owTlCVX614fGPWcCw2M017aghQ/vUa/92DaMLO//FYD8X2b7WgyPNrJh9ckZ14oncBleJUfXmue8AAACBAKw00/IkoMJzTumFfT9+Jb442O1KZvtGyj1YWpyYXf3xbQFGXND7m4rTIS2zPvTcOauCHbZwZ9uBxE4zTdlGJ4XirPEbWwOl1TU71bZ3OqonVesyqSC04LLiuLGlIHyXxyc/UCzg1UL8mCBlLzqmPUkJoL0ZINo8Raqip8WM63KM root@freebsd-nexus-computers.pfsense.org diff --git a/etc/rc b/etc/rc new file mode 100755 index 000000000..c260b41eb --- /dev/null +++ b/etc/rc @@ -0,0 +1,468 @@ +#!/bin/sh + +# $Id$ + +# /etc/rc - master bootup script, invokes php setup +# part of pfSense by Scott Ullrich +# Copyright (C) 2004-2010 Scott Ullrich, All rights reserved. +# originally based on m0n0wall (http://neon1.net/m0n0wall) +# Copyright (C) 2003-2004 Manuel Kasper . +# All rights reserved. + +#/bin/stty status '^T' +#/bin/stty susp '^-' intr '^-' quit '^-' + +#trap : 2 +#trap : 3 + +HOME=/ +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin +export HOME PATH + +# Set our operating platform +PLATFORM=`/bin/cat /etc/platform` + +# Set our current version +version=`/bin/cat /etc/version` + +# Setup dumpdev/ddb/savecore" +echo "Configuring crash dumps..." +if [ "$PLATFORM" = "pfSense" ]; then + /etc/rc.dumpon +fi + +if [ -e /root/force_fsck ]; then + echo "Forcing filesystem check..." + /sbin/fsck -y -t ufs / + if [ "$PLATFORM" = "nanobsd" ]; then + /sbin/fsck -y -t ufs /cf + fi +fi + +if [ "${PLATFORM}" = "nanobsd" ]; then + kldstat -qm zfs + if [ $? = 0 ]; then + kldunload zfs + fi +fi + +# Mount memory file system if it exists +echo "Mounting filesystems..." + +kldstat -qm zfs +# Handle ZFS read-only case +if [ "$PLATFORM" = "pfSense" ]; then + kldstat -qm zfs + if [ $? = 0 ]; then + ZFSFSAVAILABLE=$(/sbin/zfs mount 2>/dev/null | wc -l) + if [ $ZFSAVAILABLE -eq 0 ]; then + kldunload zfs + elif [ -f /usr/bin/grep ]; then + ZFSROOT=`/sbin/zfs mount | /usr/bin/grep ' /$' | /usr/bin/cut -d ' ' -f 1` + if [ "$ZFSROOT" != "" ]; then + /sbin/zfs set readonly=off $ZFSROOT + fi + fi + fi +fi + +if [ "${PLATFORM}" = "cdrom" ]; then + /etc/rc.cdrom +else + # Mount /. If it fails run a fsck. + if [ "$PLATFORM" = "nanobsd" ]; then + export PKG_TMPDIR=/root/ + /sbin/mount -uw / 2>/dev/null + mount_rc=$? + attempts=0 + while [ ${mount_rc} != 0 -a ${attempts} -lt 3 ]; do + /sbin/fsck -y / + /sbin/fsck -y /cf + /sbin/mount -uw / 2>/dev/null + mount_rc=$? + attempts=$((attempts+1)) + done + else + /sbin/mount -a 2>/dev/null + mount_rc=$? + attempts=0 + while [ ${mount_rc} != 0 -a ${attempts} -lt 3 ]; do + /sbin/fsck -y / + /sbin/mount -a 2>/dev/null + mount_rc=$? + attempts=$((attempts+1)) + done + fi + + # If /conf is a directory, convert it to a symlink to /cf/conf + if [ -d "/conf" ]; then + # If item is not a symlink then rm and recreate + CONFPOINTSTO=`readlink /conf` + if ! test "x$CONFPOINTSTO" = "x/cf/conf"; then + /bin/rm -rf /conf + /bin/ln -s /cf/conf /conf + fi + fi + + if [ ! "$PLATFORM" = "jail" ]; then + # Check to see if a compact flash mountpoint exists + # If it fails to mount then run a fsck -y + if grep -q cf /etc/fstab; then + /sbin/mount -w /cf 2>/dev/null + /sbin/mount -uw /cf 2>/dev/null + mount_rc=$? + attempts=0 + while [ ${mount_rc} != 0 -a ${attempts} -lt 3 ]; do + /sbin/umount /cf + /sbin/fsck -y /cf + /sbin/mount -w /cf 2>/dev/null + mount_rc=$? + attempts=$((attempts+1)) + done + fi + fi + + USE_MFS_TMPVAR=`/usr/bin/grep -c use_mfs_tmpvar /cf/conf/config.xml` + if [ "${PLATFORM}" = "nanobsd" ] || [ ${USE_MFS_TMPVAR} -gt 0 ]; then + /etc/rc.embedded + fi +fi + +/bin/rm -f /root/force_fsck +/bin/rm -f /root/TRIM_set +/bin/rm -f /root/TRIM_unset + +# Disable APM on ATA drives. Leaving this on will kill drives long-term, especially laptop drives, by generating excessive Load Cycles. +if [ -f /etc/rc.disable_hdd_apm ]; then + /etc/rc.disable_hdd_apm +fi + +#Eject CD devices on 3G modems +MANUFACTURER="huawei|zte" +CDDEVICE=`dmesg |egrep -ie "($MANUFACTURER)" | awk -F: '/cd/ {print $1}'` +if [ "$CDDEVICE" != "" ]; then + cdcontrol -f /dev/"$CDDEVICE" eject +fi + +# sync pw database after mount. +rm -f /etc/spwd.db.tmp +/usr/sbin/pwd_mkdb -d /etc/ /etc/master.passwd + +product=`/usr/bin/grep product_name /etc/inc/globals.inc | /usr/bin/cut -d'"' -f4` +hideplatform=`/usr/bin/grep hideplatform /etc/inc/globals.inc | /usr/bin/wc -l` +varrunpath=`/usr/bin/grep varrun_path /etc/inc/globals.inc | /usr/bin/cut -d'"' -f4` + +if [ "$PLATFORM" = "pfSense" ] && [ ${USE_MFS_TMPVAR} -eq 0 ]; then + /sbin/mdmfs -S -M -s 4m md $varrunpath +fi + +if [ "$hideplatform" -gt "0" ]; then + platformbanner="" # hide the platform +else + platformbanner=" on the '${PLATFORM}' platform" +fi + +echo +cat /etc/ascii-art/pfsense-logo-small.txt +echo +echo +echo "Welcome to ${product} ${version} ${platformbanner} ..." +echo + +if [ ! "$PLATFORM" = "jail" ]; then + # Enable console output if its muted. + /sbin/conscontrol mute off >/dev/null +fi + +if [ "$PLATFORM" = "cdrom" ] ; then + # do nothing for cdrom platform +elif [ "$PLATFORM" = "nanobsd" ] || [ ${USE_MFS_TMPVAR} -gt 0 ]; then + # Ensure that old-style PKG packages can be persistent across reboots + /bin/mkdir -p /root/var/db/pkg + /bin/rm -rf /var/db/pkg + /bin/ln -s /root/var/db/pkg/ /var/db/pkg + # Ensure that PBI packages can be persistent across reboots + /bin/mkdir -p /root/var/db/pbi + /bin/rm -rf /var/db/pbi + /bin/ln -s /root/var/db/pbi/ /var/db/pbi +elif [ "$PLATFORM" = "jail" ]; then + # do nothing for jail platform +else + SWAPDEVICE=`/bin/cat /etc/fstab | /usr/bin/grep swap | /usr/bin/cut -f1` + /sbin/swapon -a 2>/dev/null >/dev/null + /etc/rc.savecore + + if [ -d /root/var/db/pkg ]; then + # User must have just disabled RAM disks, move these back into place. + /bin/mkdir -p /var/db/pkg + /bin/mv /root/var/db/pkg /var/db/pkg + /bin/mkdir -p /var/db/pbi + /bin/mv /root/var/db/pbi /var/db/pbi + fi +fi + +# Copy PBI keys +if ls /usr/local/share/pbi-keys/*.ssl >/dev/null 2>&1; then + if [ ! -d "/var/db/pbi/keys" ]; then + mkdir -p /var/db/pbi/keys + fi + cp -f /usr/local/share/pbi-keys/*.ssl /var/db/pbi/keys +fi + +if [ "$PLATFORM" = "cdrom" ] ; then + echo -n "Mounting unionfs directories..." + /bin/mkdir /tmp/unionfs + /bin/mkdir /tmp/unionfs/usr + /bin/mkdir /tmp/unionfs/root + /bin/mkdir /tmp/unionfs/sbin + /bin/mkdir /tmp/unionfs/bin + /bin/mkdir /tmp/unionfs/boot + /bin/mkdir /tmp/unionfs/confdefault + /sbin/mount_unionfs /tmp/unionfs/usr /usr/ + /sbin/mount_unionfs /tmp/unionfs/root /root/ + /sbin/mount_unionfs /tmp/unionfs/bin /bin/ + /sbin/mount_unionfs /tmp/unionfs/sbin /sbin/ + /sbin/mount_unionfs /tmp/unionfs/boot /boot/ + /sbin/mount_unionfs /tmp/unionfs/confdefault /conf.default/ + echo "done." +fi + +# make some directories in /var +/bin/mkdir -p $varrunpath /var/log /var/etc /var/db/entropy /var/at/jobs/ /var/empty 2>/dev/null +/bin/rm -rf $varrunpath/* +if [ "$PLATFORM" != "pfSense" ]; then + /bin/rm /var/log/* 2>/dev/null +fi + +# Cleanup configuration files from previous instance +/bin/rm -rf /var/etc/* +/bin/rm -rf /var/tmp/* + +echo -n "Creating symlinks..." +# Make sure symlink is correct on nanobsd +if [ "$PLATFORM" = "nanobsd" ] ; then + /bin/rm /conf + /bin/ln -s /cf/conf/ /conf +fi + +# Repair symlinks if they are broken +if [ -f /etc/newsyslog.conf ]; then + /bin/rm -f /etc/newsyslog.conf +fi +if [ ! -L /etc/syslog.conf ]; then + /bin/rm -rf /etc/syslog.conf + if [ ! -f /var/etc/syslog.conf ]; then + touch /var/etc/syslog.conf + fi + /bin/ln -s /var/etc/syslog.conf /etc/syslog.conf +fi + +# Repair symlinks if they are broken +if [ ! -L /etc/hosts ]; then + /bin/rm -rf /etc/hosts + /bin/ln -s /var/etc/hosts /etc/hosts +fi + +if [ ! -L /etc/resolv.conf ]; then + /bin/rm -rf /etc/resolv.conf + /bin/ln -s /var/etc/resolv.conf /etc/resolv.conf +fi + +# Setup compatibility link for packages that +# have trouble overriding the PREFIX configure +# argument since we build our packages in a +# separated PREFIX area +# Only create if symlink does not exist. +if [ ! -h /tmp/tmp ]; then + /bin/ln -hfs / /tmp/tmp +fi + +# Make sure our /tmp is 777 + Sticky +if [ ! "$PLATFORM" = "cdrom" ] ; then + /bin/rm -rf /tmp/* +fi +/bin/chmod 1777 /tmp + +if [ ! "$PLATFORM" = "cdrom" ] ; then + # Malloc debugging check + if [ -L /etc/malloc.conf ]; then + #ln -s aj /etc/malloc.conf + /bin/rm /etc/malloc.conf + fi +fi + +if [ ! -L /etc/dhclient.conf ]; then + /bin/rm -rf /etc/dhclient.conf +fi + +if [ ! -d /var/tmp ]; then + /bin/mkdir -p /var/tmp +fi + +if [ ! -d /cf/conf/backup/ ]; then + /bin/mkdir -p /cf/conf/backup/ +fi + +set -T +trap "echo 'Reboot interrupted'; exit 1" 3 + +# Remove old nameserver resolution files +/bin/rm -f /var/etc/nameserver* + +# Create uploadbar tmp directory +/bin/mkdir -p /tmp/uploadbar +/bin/chmod 0777 /tmp/uploadbar + +echo -n "." +DISABLESYSLOGCLOG=`/usr/bin/grep -c disablesyslogclog /cf/conf/config.xml` +ENABLEFIFOLOG=`/usr/bin/grep -c usefifolog /cf/conf/config.xml` +LOG_FILES="system filter dhcpd vpn pptps poes l2tps openvpn portalauth ipsec ppp relayd wireless lighttpd ntpd gateways resolver routing" + +DEFAULT_LOG_FILE_SIZE=`/usr/local/bin/xmllint --xpath 'string(//pfsense/syslog/logfilesize)' /conf/config.xml` +if [ ! ${DEFAULT_LOG_FILE_SIZE} ]; then + DEFAULT_LOG_FILE_SIZE=511488 +fi + +for logfile in $LOG_FILES; do + if [ "$DISABLESYSLOGCLOG" -gt "0" ]; then + /usr/bin/touch /var/log/$logfile.log + else + if [ ! -f /var/log/$logfile.log ]; then + if [ "$ENABLEFIFOLOG" -gt "0" ]; then + # generate fifolog files + /usr/sbin/fifolog_create -s ${DEFAULT_LOG_FILE_SIZE} /var/log/$logfile.log + else + /usr/local/sbin/clog -i -s ${DEFAULT_LOG_FILE_SIZE} /var/log/$logfile.log + fi + fi + fi +done + +# change permissions on newly created fifolog files. +/bin/chmod 0600 /var/log/*.log + +echo -n "." +if [ ! "$PLATFORM" = "jail" ]; then + DEVFS=`/sbin/mount | /usr/bin/grep devfs | /usr/bin/wc -l | /usr/bin/cut -d" " -f8` + if [ "$DEVFS" = "0" ]; then + mount_devfs devfs /dev + fi +fi + +# Create an initial utmp file +cd $varrunpath && /bin/cp /dev/null utmp && /bin/chmod 644 utmp + +echo -n "." +/sbin/ldconfig -elf /usr/lib /usr/local/lib /lib +/etc/rc.d/ldconfig start 2>/dev/null + +# Make sure /etc/rc.conf doesn't exist. +if [ -f /etc/rc.conf ]; then + /bin/rm -rf /etc/rc.conf +fi + +if [ ! "$PLATFORM" = "jail" ]; then + # Launching kbdmux(4) + if [ -f "/dev/kbdmux0" ]; then + echo -n "." + /usr/sbin/kbdcontrol -k /dev/kbdmux0 < /dev/console + [ -c "/dev/atkbd0" ] && kbdcontrol -a atkbd0 < /dev/console + [ -c "/dev/ukbd0" ] && kbdcontrol -a ukbd0 < /dev/console + fi + + # Fire up unionfs if mount points exist. + if [ -f /dist/uniondirs ]; then + echo -n "." + /etc/rc.d/unionfs start + fi +fi + +echo "done." + +# Recreate capabilities DB +/usr/bin/cap_mkdb /etc/login.conf + +# Run the php.ini setup file and populate +# /usr/local/etc/php.ini and /usr/local/lib/php.ini +/etc/rc.php_ini_setup 2>/tmp/php_errors.txt +/usr/local/sbin/php-fpm -c /usr/local/lib/php.ini -y /usr/local/lib/php-fpm.conf -RD 2>&1 >/dev/null + +# Launch external configuration loader for supported platforms +if [ "$PLATFORM" = "nanobsd" ]; then + /usr/local/sbin/fcgicli -f /etc/ecl.php +fi + +# Launch external configuration loader for supported platforms +if [ "$PLATFORM" = "pfSense" ]; then + /usr/local/sbin/fcgicli -f /etc/ecl.php +fi + +if [ -f /etc/rc.custom_boot_early ]; then + /bin/echo -n "Launching /etc/rc.custom_boot_early..."; + /etc/rc.custom_boot_early + echo "Done" +fi + +export fcgipath=/var/run/php-fpm.socket +/usr/bin/nice -n20 /usr/local/opnsense/check_reload_status.py + +# let the PHP-based configuration subsystem set up the system now +echo -n "Launching the init system..." +/bin/rm -f /cf/conf/backup/backup.cache +/bin/rm -f /root/lighttpd* +/usr/bin/touch $varrunpath/booting +/etc/rc.bootup + +# /etc/rc.bootup unset $g['booting'], remove file right now to be +# consistent +/bin/rm $varrunpath/booting + +# If a shell was selected from recovery +# console then just drop to the shell now. +if [ -f "/tmp/donotbootup" ]; then + echo "Dropping to recovery shell." + exit 0 +fi + +echo -n "Starting CRON... " +cd /tmp && /usr/sbin/cron -s 2>/dev/null +echo "done." + +# Start packages +/usr/local/sbin/fcgicli -f /etc/rc.start_packages + +/bin/rm -rf /usr/local/pkg/pf/CVS + +# Start ping handler every 240 seconds +/usr/local/bin/minicron 240 $varrunpath/ping_hosts.pid /usr/local/bin/ping_hosts.sh + +# Start account expire handler every hour +/usr/local/bin/minicron 3600 $varrunpath/expire_accounts.pid '/usr/local/sbin/fcgicli -f /etc/rc.expireaccounts' + +# Start alias url updater every 24 hours +/usr/local/bin/minicron 86400 $varrunpath/update_alias_url_data.pid '/usr/local/sbin/fcgicli -f /etc/rc.update_alias_url_data' + +/bin/chmod a+rw /tmp/. + +# Check for GEOM mirrors +GMIRROR_STATUS=`/sbin/gmirror status` +if [ "${GMIRROR_STATUS}" != "" ]; then + # Using a flag file at bootup saves an expensive exec/check on each page load. + /usr/bin/touch /var/run/gmirror_active + # Setup monitoring/notifications + /usr/local/bin/minicron 60 /var/run/gmirror_status_check.pid /usr/local/sbin/gmirror_status_check.php +fi + +# Log product version to syslog +BUILDTIME=`cat /etc/version.buildtime` +ARCH=`uname -m` +echo "$product ($PLATFORM) $version $ARCH $BUILDTIME" + +echo "Bootup complete" + +/usr/local/bin/beep.sh start 2>&1 >/dev/null + +# Reset the cache. read-only requires this. +/bin/rm -f /tmp/config.cache + +exit 0 diff --git a/etc/rc.backup_dhcpleases.sh b/etc/rc.backup_dhcpleases.sh new file mode 100755 index 000000000..73f83a8e5 --- /dev/null +++ b/etc/rc.backup_dhcpleases.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +# Save the DHCP lease database to the config path. +if [ -d "/var/dhcpd/var/db" ]; then + /etc/rc.conf_mount_rw + cd / && tar -czf /cf/conf/dhcpleases.tgz -C / var/dhcpd/var/db/ + /etc/rc.conf_mount_ro +fi diff --git a/etc/rc.backup_rrd.sh b/etc/rc.backup_rrd.sh new file mode 100755 index 000000000..0ae89fe08 --- /dev/null +++ b/etc/rc.backup_rrd.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +: ${RRDDBPATH:=/var/db/rrd} +: ${CF_CONF_PATH:=/cf/conf} + +# Save the rrd databases to the config path. +if [ -d "${RRDDBPATH}" ]; then + [ -z "$NO_REMOUNT" ] && /etc/rc.conf_mount_rw + for rrdfile in "${RRDDBPATH}"/*.rrd ; do + xmlfile="${rrdfile%.rrd}.xml" + /usr/bin/nice -n20 /usr/local/bin/rrdtool dump "$rrdfile" "$xmlfile" + done + cd / && tar -czf "${CF_CONF_PATH}"/rrd.tgz -C / "${RRDDBPATH#/}"/*.xml + rm "${RRDDBPATH}"/*.xml + [ -z "$NO_REMOUNT" ] && /etc/rc.conf_mount_ro +fi + diff --git a/etc/rc.banner b/etc/rc.banner new file mode 100755 index 000000000..901286f8c --- /dev/null +++ b/etc/rc.banner @@ -0,0 +1,123 @@ +#!/usr/local/bin/php -f + $friendly) { + /* point to this interface's config */ + $ifconf = $config['interfaces'][$ifname]; + /* look for 'special cases' */ + switch($ifconf['ipaddr']) { + case "dhcp": + $class = "/DHCP4"; + break; + case "pppoe": + $class = "/PPPoE"; + break; + case "pptp": + $class = "/PPTP"; + break; + case "l2tp": + $class = "/L2TP"; + break; + default: + $class = ""; + break; + } + switch($ifconf['ipaddrv6']) { + case "dhcp6": + $class6 = "/DHCP6"; + break; + case "slaac": + $class6 = "/SLAAC"; + break; + case "6rd": + $class6 = "/6RD"; + break; + case "6to4": + $class6 = "/6to4"; + break; + case "track6": + $class6 = "/t6"; + break; + } + $ipaddr = get_interface_ip($ifname); + $subnet = get_interface_subnet($ifname); + $ipaddr6 = get_interface_ipv6($ifname); + $subnet6 = get_interface_subnetv6($ifname); + $realif = get_real_interface($ifname); + $tobanner = "{$friendly} ({$ifname})"; + + printf("\n %-15s -> %-10s -> ", + $tobanner, + $realif + ); + $v6first = false; + if (!empty($ipaddr) && !empty($subnet)) { + printf("v4%s: %s/%s", + $class, + $ipaddr, + $subnet + ); + } else { + $v6first = true; + } + if (!empty($ipaddr6) && !empty($subnet6)) { + if (!$v6first) { + printf("\n%s", str_repeat(" ",34)); + } + printf("v6%s: %s/%s", + $class6, + $ipaddr6, + $subnet6 + ); + } + } + +?> diff --git a/etc/rc.bootup b/etc/rc.bootup new file mode 100755 index 000000000..69eb48624 --- /dev/null +++ b/etc/rc.bootup @@ -0,0 +1,455 @@ +#!/usr/local/bin/php -f +. + Copyright (C) 2003-2004 Manuel Kasper . + Copyright (C) 2009 Erik Kristensen + 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 rescue_detect_keypress() { + // How long do you want the script to wait before moving on (in seconds) + $timeout=9; + echo "\n"; + echo "[ Press R to enter recovery mode or ]\n"; + echo "[ press I to launch the installer ]\n\n"; + echo "(R)ecovery mode can assist by rescuing config.xml\n"; + echo "from a broken hard disk installation, etc.\n\n"; + echo "(I)nstaller may be invoked now if you do \n"; + echo "not wish to boot into the liveCD environment at this time.\n\n"; + echo "(C) continues the LiveCD bootup without further pause.\n\n"; + echo "Timeout before auto boot continues (seconds): {$timeout}"; + $key = null; + exec("/bin/stty erase " . chr(8)); + while(!in_array($key, array("c", "C", "r","R", "i", "I", "~", "!"))) { + echo chr(8) . "{$timeout}"; + `/bin/stty -icanon min 0 time 25`; + $key = trim(`KEY=\`dd count=1 2>/dev/null\`; echo \$KEY`); + `/bin/stty icanon`; + // Decrement our timeout value + $timeout--; + // If we have reached 0 exit and continue on + if ($timeout == 0) + break; + } + // If R or I was pressed do our logic here + if (in_array($key, array("r", "R"))) { + putenv("TERM=cons25"); + echo "\n\nRecovery mode selected...\n"; + passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer_rescue"); + } elseif (in_array($key, array("i", "I"))) { + putenv("TERM=cons25"); + echo "\n\nInstaller mode selected...\n"; + passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer"); + if(file_exists("/tmp/install_complete")) { + passthru("/etc/rc.reboot"); + exit; + } + } elseif (in_array($key, array("!", "~"))) { + putenv("TERM=cons25"); + echo "\n\nRecovery shell selected...\n"; + echo "\n"; + touch("/tmp/donotbootup"); + exit; + } else { + echo "\n\n"; + } +} + +echo " done.\n"; + +echo "Initializing..."; +echo "."; +require_once("/etc/inc/globals.inc"); +echo "."; +require_once("/etc/inc/led.inc"); +led_normalize(); +echo "."; +if (led_count() >= 3) { + led_kitt(); +} + +/* let the other functions know we're booting */ +$pkg_interface = 'console'; +$g['booting'] = true; + +/* parse the configuration and include all functions used below */ +require_once("/etc/inc/config.inc"); +echo "."; +require_once("/etc/inc/config.console.inc"); +echo "."; +require_once("/etc/inc/auth.inc"); +echo "."; +require_once("/etc/inc/functions.inc"); +echo "."; +require_once("/etc/inc/filter.inc"); +echo "."; +require_once("/etc/inc/shaper.inc"); +echo "."; +require_once("/etc/inc/ipsec.inc"); +echo "."; +require_once("/etc/inc/vpn.inc"); +echo "."; +require_once("/etc/inc/openvpn.inc"); +echo "."; +require_once("/etc/inc/captiveportal.inc"); +echo "."; +require_once("/etc/inc/rrd.inc"); +echo "."; +require_once("/etc/inc/pfsense-utils.inc"); +echo "."; + +/* get system memory amount */ +$memory = get_memory(); +$physmem = $memory[0]; +$realmem = $memory[1]; +echo " done.\n"; + +conf_mount_rw(); + +/* save dmesg output to file */ +system_dmesg_save(); + +/* check whether config reset is desired (via hardware button on WRAP/ALIX) */ +system_check_reset_button(); + +/* remove previous firmware upgrade if present */ +if (file_exists("/root/firmware.tgz")) + unlink("/root/firmware.tgz"); + +/* start devd (dhclient now uses it) */ +echo "Starting device manager (devd)..."; +mute_kernel_msgs(); +start_devd(); +set_device_perms(); +unmute_kernel_msgs(); +echo "done.\n"; + +// Display rescue configuration option +if($g['platform'] == "cdrom") + rescue_detect_keypress(); + +echo "Loading configuration..."; +parse_config_bootup(); +echo "done.\n"; + +if($g['platform'] == "jail") { + /* We must determine what network settings have been configured for us */ + $wanif = "lo0"; /* defaults, if the jail admin hasn't set us up */ + $ipaddr = "127.0.0.1"; + $iflist = get_interface_list(); + foreach ($iflist as $iface => $ifa) { + if (isset($ifa['ipaddr'])) { + $wanif = $iface; + $ipaddr = $ifa['ipaddr']; + break; + } + } + $config['interfaces'] = array(); + $config['interfaces']['lan'] = array(); + $config['interfaces']['lan']['enable'] = false; + $config['interfaces']['wan'] = array(); + /* XXX, todo */ + $config['interfaces']['wan']['if'] = $wanif; + $config['interfaces']['wan']['ipaddr'] = $ipaddr; + $config['interfaces']['wan']['subnet'] = "32"; /* XXX right? */ + $config['interfaces']['wan']['enable'] = true; + if($config['dhcpd']['lan']) + unset($config['dhcpd']['lan']['enable']); + unlink_if_exists('/conf/trigger_initial_wizard'); + write_config(); +} else { + /* + * Determine if we need to throw a interface exception + * and ask the user to reassign interfaces. This will + * avoid a reboot and thats a good thing. + */ + while(is_interface_mismatch() == true) { + led_assigninterfaces(); + if (isset($config['revision'])) { + if (file_exists("{$g['tmp_path']}/missing_interfaces")) + echo "Warning: Configuration references interfaces that do not exist: " . file_get_contents("{$g['tmp_path']}/missing_interfaces") . "\n"; + echo "\nNetwork interface mismatch -- Running interface assignment option.\n"; + } else + echo "\nDefault interfaces not found -- Running interface assignment option.\n"; + $ifaces = get_interface_list(); + if (is_array($ifaces)) { + foreach($ifaces as $iface => $ifdata) + interfaces_bring_up($iface); + } + set_networking_interfaces_ports(); + led_kitt(); + } +} + +/* convert config and clean backups */ +echo "Updating configuration..."; +convert_config(); +echo "done.\n"; + +echo "Cleaning backup cache..."; +cleanup_backupcache(true); +echo "done.\n"; + +/* read in /etc/sysctl.conf and set values if needed */ +echo "Setting up extended sysctls..."; +system_setup_sysctl(); +echo "done.\n"; + +/* enable optional crypto modules */ +load_crypto(); + +/* enable optional thermal sensor modules */ +load_thermal_hardware(); + +/* run any early shell commands specified in config.xml */ +system_do_shell_commands(1); + +/* set up our timezone */ +system_timezone_configure(); + +/* set up our hostname */ +system_hostname_configure(); + +/* make hosts file */ +system_hosts_generate(); + +/* configure loopback interface */ +interfaces_loopback_configure(); + +/* start syslogd */ +system_syslogd_start(); + +echo "Starting Secure Shell Services..."; +send_event("service reload sshd"); +echo "done.\n"; + +/* setup polling */ +echo "Setting up polling defaults..."; +setup_polling(); +echo "done.\n"; + +/* setup interface microcode which improves tcp/ip speed */ +echo "Setting up interfaces microcode..."; +setup_microcode(); +echo "done.\n"; + +/* set up interfaces */ +if(!$debugging) + mute_kernel_msgs(); +interfaces_configure(); +if(!$debugging) + unmute_kernel_msgs(); + +/* re-make hosts file after configuring interfaces */ +system_hosts_generate(); + +/* start OpenVPN server & clients */ +echo "Syncing OpenVPN settings..."; +openvpn_resync_all(); +echo "done.\n"; + +/* generate resolv.conf */ +system_resolvconf_generate(); + +/* setup altq + pf */ +filter_configure_sync(); + +/* start pflog */ +echo "Starting PFLOG..."; +filter_pflog_start(); +echo "done.\n"; + +/* reconfigure our gateway monitor */ +echo "Setting up gateway monitors..."; +setup_gateways_monitor(); +echo "done.\n"; + +echo "Synchronizing user settings..."; +local_sync_accounts(); +echo "done.\n"; + +if($realmem > 0 and $realmem < 65) { + echo "System has less than 65 megabytes of ram {$realmem}. Delaying webConfigurator startup.\n"; + /* start webConfigurator up on final pass */ + mwexec("/usr/local/sbin/pfSctl -c 'service restart webgui'"); +} else { + /* start web server */ + system_webgui_start(); +} + +/* configure cron service */ +echo "Configuring CRON..."; +configure_cron(); +echo "done.\n"; + +/* set up static routes */ +system_routing_configure(); + +/* enable routing */ +system_routing_enable(); + +/* start dnsmasq service */ +services_dnsmasq_configure(); + +/* start unbound service */ +services_unbound_configure(); + +/* Do an initial time sync */ +echo "Starting NTP time client..."; +/* At bootup this will just write the config, ntpd will launch from ntpdate_sync_once.sh */ +system_ntp_configure(false); +mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh", true); +echo "done.\n"; + +/* start load balancer daemon */ +relayd_configure(); + +/* configure console menu */ +system_console_configure(); + +/* start DHCP service */ +services_dhcpd_configure(); + +/* start dhcpleases dhpcp hosts leases program */ +system_dhcpleases_configure(); + +/* start DHCP relay */ +services_dhcrelay_configure(); + +/* start DHCP6 relay */ +services_dhcrelay6_configure(); + +/* dyndns service updates */ +send_event("service reload dyndnsall"); + +/* Run a filter configure now that most all services have started */ +filter_configure_sync(); + +/* setup pppoe and pptp */ +vpn_setup(); + +/* start the captive portal */ +captiveportal_configure(); + +/* start Voucher support */ +voucher_configure(); + +/* run any shell commands specified in config.xml */ +system_do_shell_commands(); + +/* start IPsec tunnels */ +$ipsec_dynamic_hosts = vpn_ipsec_configure(); + +/* start SNMP service */ +services_snmpd_configure(); + +/* power down hard drive if needed/set */ +system_set_harddisk_standby(); + +/* lock down console if necessary */ +reload_ttys(); + +/* load graphing functions */ +enable_rrd_graphing(); + +/* enable watchdog if supported */ +enable_watchdog(); + +/* if exists, execute the command */ +if($config['system']['afterbootupshellcmd'] <> "") { + echo "Running afterbootupshellcmd {$config['system']['afterbootupshellcmd']}\n"; + mwexec($config['system']['afterbootupshellcmd']); +} + +if($physmem < $g['minimum_ram_warning']) { + require_once("/etc/inc/notices.inc"); + file_notice("{$g['product_name']}MemoryRequirements", "{$g['product_name']} requires at least {$g['minimum_ram_warning_text']} of RAM. Expect unusual performance. This platform is not supported.", "Memory", "", 1); + set_sysctl(array( + "net.inet.tcp.recvspace" => "4096", + "net.inet.tcp.sendspace" => "4096" + )); +} + +/* if we are operating at 1000 then increase timeouts. + this was never accounted for after moving to 1000 hz */ +$kern_hz = get_single_sysctl('kern.clockrate'); +$kern_hz = substr($kern_hz, strpos($kern_hz, "hz = ") + 5); +$kern_hz = substr($kern_hz, 0, strpos($kern_hz, ",")); +if($kern_hz == "1000") + set_single_sysctl("net.inet.tcp.rexmit_min" , "30"); + +/* start the igmpproxy daemon */ +services_igmpproxy_configure(); + +/* start the upnp daemon if it is enabled */ +upnp_start(); + +/* If powerd is enabled, lets launch it */ +activate_powerd(); + +/* Set preferred protocol */ +prefer_ipv4_or_ipv6(); + +/* Remove the old shutdown binary if we kept it. */ +if (file_exists("/sbin/shutdown.old")) + @unlink("/sbin/shutdown.old"); + +/* Resync / Reinstall packages if need be */ +if(file_exists('/conf/needs_package_sync')) { + if($config['installedpackages'] <> '' && is_array($config['installedpackages']['package'])) { + require_once("pkg-utils.inc"); + if($g['platform'] == "pfSense" || $g['platform'] == "nanobsd") { + mark_subsystem_dirty('packagelock'); + pkg_reinstall_all(); + clear_subsystem_dirty('packagelock'); + } + } + @unlink('/conf/needs_package_sync'); +} + +/* Give syslogd a kick after everything else has been initialized, otherwise it can occasionally + fail to route syslog messages properly on both IPv4 and IPv6 */ +system_syslogd_start(); + +/* done */ +unset($g['booting']); + +/* If there are ipsec dynamic hosts try again to reload the tunnels as rc.newipsecdns does */ +if ($ipsec_dynamic_hosts) { + vpn_ipsec_configure(); + filter_configure(); +} + +led_normalize(); + +conf_mount_ro(); + +?> diff --git a/etc/rc.captiveportal_configure b/etc/rc.captiveportal_configure new file mode 100755 index 000000000..bd59361a1 --- /dev/null +++ b/etc/rc.captiveportal_configure @@ -0,0 +1,40 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.carpbackup b/etc/rc.carpbackup new file mode 100755 index 000000000..439c21452 --- /dev/null +++ b/etc/rc.carpbackup @@ -0,0 +1,73 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.carpmaster b/etc/rc.carpmaster new file mode 100755 index 000000000..d22b267f8 --- /dev/null +++ b/etc/rc.carpmaster @@ -0,0 +1,81 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.cdrom b/etc/rc.cdrom new file mode 100755 index 000000000..2018fe9ee --- /dev/null +++ b/etc/rc.cdrom @@ -0,0 +1,44 @@ +#!/bin/sh +# +# rc.cdrom - livedisc specific routines +# For pfSense + +# Size of memory file system /conf /home partitions +partsize="6m" + +# Run some initialization routines +/etc/rc.d/uzip start + +export VARMFS_COPYDBPKG=yes + +for i in tmp varmfs etcmfs; do + if [ -f /etc/rc.d/$i ]; then + sh /etc/rc.d/$i start + fi +done + +# Start PFI +/bin/sh /scripts/pfi start + +# If PFI did not find a config, we should create +# a tiny mfs under /conf and populate with stock +# configuration. +if [ ! -f /conf/config.xml ]; then + echo -n "Generating a MFS /conf partition... " + device=$(mdconfig -a -t malloc -s ${partsize}) + newfs /dev/${device} > /dev/null 2>&1 + mount /dev/${device} /conf + cp /conf.default/* /conf + mount_nullfs /conf /cf/conf + echo "done." +fi + +echo -n "Generating a MFS /home partition... " +device=$(mdconfig -a -t malloc -s ${partsize}) +newfs /dev/${device} > /dev/null 2>&1 +mount /dev/${device} /home +echo "done." + +# Create some needed directories +/bin/mkdir -p /var/db/pkg/ +/bin/mkdir -p /var/tmp/vi.recover/ diff --git a/etc/rc.conf_mount_ro b/etc/rc.conf_mount_ro new file mode 100755 index 000000000..9e82fecdf --- /dev/null +++ b/etc/rc.conf_mount_ro @@ -0,0 +1,36 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.conf_mount_rw b/etc/rc.conf_mount_rw new file mode 100755 index 000000000..45d25e29a --- /dev/null +++ b/etc/rc.conf_mount_rw @@ -0,0 +1,36 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.create_full_backup b/etc/rc.create_full_backup new file mode 100755 index 000000000..048e68bb5 --- /dev/null +++ b/etc/rc.create_full_backup @@ -0,0 +1,18 @@ +#!/bin/sh + +FILENAME="pfSense-full-backup-`date "+%Y%m%d-%H%M"`.tgz" +echo ">>> Creating full backup to /root/$FILENAME" +tar czPf /root/$FILENAME \ + --exclude dev/* \ + --exclude tmp/* \ + --exclude var/db \ + --exclude var/run/* \ + --exclude root/* \ + --exclude var/empty/* \ + --exclude var/empty \ + --exclude var/etc \ + / + +echo ">>> Backup completed. Note: this backup includes config.xml!" +echo ">>> To restore this backup run this command:" +echo " /etc/rc.restore_full_backup /root/$FILENAME" diff --git a/etc/rc.dhclient_cron b/etc/rc.dhclient_cron new file mode 100755 index 000000000..3ffb46eda --- /dev/null +++ b/etc/rc.dhclient_cron @@ -0,0 +1,53 @@ +#!/usr/local/bin/php -f + $interface) { + $real_interface = get_real_interface($ifname); + if($config['interfaces'][$ifname]['ipaddr'] == "dhcp") { + $pid = find_dhclient_process($real_interface); + if($pid == 0 or !$pid) { + /* dhclient is not running for interface, kick it */ + log_error("DHCLIENT was not running for {$real_interface} ... Launching new instance."); + exec("/sbin/dhclient $real_interface"); + } + } +} + +?> diff --git a/etc/rc.disable_hdd_apm b/etc/rc.disable_hdd_apm new file mode 100755 index 000000000..e9b3ba5af --- /dev/null +++ b/etc/rc.disable_hdd_apm @@ -0,0 +1,13 @@ +#!/bin/sh + +ATAIDLE=/usr/local/sbin/ataidle +for i in /dev/ad?; do + if [ ! -e ${i} ]; then + continue; + fi + SUPPORTED=`${ATAIDLE} ${i} | grep "APM Supported" | awk '{print $3;}'` + if [ "${SUPPORTED}" = "yes" ] ; then + echo Disabling APM on $i + ${ATAIDLE} -P 0 ${i} + fi +done diff --git a/etc/rc.dumpon b/etc/rc.dumpon new file mode 100755 index 000000000..fad1a8249 --- /dev/null +++ b/etc/rc.dumpon @@ -0,0 +1,35 @@ +#!/bin/sh +# Based on: +# FreeBSD: src/etc/rc.d/dumpon,v 1.12.2.1.4.1 2010/06/14 02:09:06 kensmith Exp + +# dumpon + +dumpon_try() +{ + if /sbin/dumpon "${1}" ; then + # Make a symlink in devfs for savecore + echo "Using ${1} for dump device." + ln -fs "${1}" /dev/dumpdev + return 0 + fi + echo "Unable to specify $1 as a dump device." + return 1 +} + +# Enable dumpdev so that savecore can see it. Enable it +# early so a crash early in the boot process can be caught. +# +while read dev mp type more ; do + [ "${type}" = "swap" ] || continue + [ -c "${dev}" ] || continue + dumpon_try "${dev}" && works=true +done &2 + exit +fi + +# ddb +if [ ! -z "`sysctl -Nq debug.ddb.scripting.scripts`" ]; then + /sbin/ddb /etc/ddb.conf +fi diff --git a/etc/rc.dyndns.update b/etc/rc.dyndns.update new file mode 100755 index 000000000..ac56f3562 --- /dev/null +++ b/etc/rc.dyndns.update @@ -0,0 +1,56 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.embedded b/etc/rc.embedded new file mode 100755 index 000000000..b4c60fba0 --- /dev/null +++ b/etc/rc.embedded @@ -0,0 +1,34 @@ +#!/bin/sh +# +# rc.embedded - embedded system specific startup information +# For pfSense + +# Size of /tmp +USE_MFS_TMP_SIZE=`/usr/bin/grep use_mfs_tmp_size /cf/conf/config.xml | /usr/bin/cut -f2 -d'>' | /usr/bin/cut -f1 -d'<'` +if [ ! -z ${USE_MFS_TMP_SIZE} ] && [ ${USE_MFS_TMP_SIZE} -gt 0 ]; then + tmpsize="${USE_MFS_TMP_SIZE}m" +else + tmpsize="40m" +fi + +# Size of /var +USE_MFS_VAR_SIZE=`/usr/bin/grep use_mfs_var_size /cf/conf/config.xml | /usr/bin/cut -f2 -d'>' | /usr/bin/cut -f1 -d'<'` +if [ ! -z ${USE_MFS_VAR_SIZE} ] && [ ${USE_MFS_VAR_SIZE} -gt 0 ]; then + varsize="${USE_MFS_VAR_SIZE}m" +else + varsize="60m" +fi + +# Run some initialization routines +[ -f /etc/rc.d/uzip ] && /etc/rc.d/uzip start + +echo -n "Setting up memory disks..." +mdmfs -S -M -s ${tmpsize} md /tmp +mdmfs -S -M -s ${varsize} md /var + +# Create some needed directories +/bin/mkdir -p /var/db + +# Ensure vi's recover directory is present +/bin/mkdir -p /var/tmp/vi.recover/ +echo " done." diff --git a/etc/rc.expireaccounts b/etc/rc.expireaccounts new file mode 100755 index 000000000..53e38748b --- /dev/null +++ b/etc/rc.expireaccounts @@ -0,0 +1,66 @@ +#!/usr/local/bin/php -f + strtotime($user['expires'])) { + echo "Disabling user {$user['name']} at index #{$index}\n"; + //unset($config['system']['user'][$index]); + $user['disabled'] = true; + $removed++; + $count--; + $index--; + } + } + + if($removed > 0) + write_config("Expired {$removed} user accounts"); + + //print_r($config); + +?> diff --git a/etc/rc.filter_configure b/etc/rc.filter_configure new file mode 100755 index 000000000..92be68da1 --- /dev/null +++ b/etc/rc.filter_configure @@ -0,0 +1,43 @@ +#!/usr/local/bin/php -f + \ No newline at end of file diff --git a/etc/rc.filter_configure_sync b/etc/rc.filter_configure_sync new file mode 100755 index 000000000..1f3668141 --- /dev/null +++ b/etc/rc.filter_configure_sync @@ -0,0 +1,41 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.filter_configure_xmlrpc b/etc/rc.filter_configure_xmlrpc new file mode 100755 index 000000000..bd1f78515 --- /dev/null +++ b/etc/rc.filter_configure_xmlrpc @@ -0,0 +1,53 @@ +#!/usr/local/bin/php -f +. + 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. + +*/ + +require_once("globals.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("xmlrpc.inc"); +require_once("interfaces.inc"); + +system_routing_configure(); +setup_gateways_monitor(); +relayd_configure(); +require_once("openvpn.inc"); +openvpn_resync_all(); +services_dhcpd_configure(); + +?> diff --git a/etc/rc.filter_synchronize b/etc/rc.filter_synchronize new file mode 100755 index 000000000..ccb745ca1 --- /dev/null +++ b/etc/rc.filter_synchronize @@ -0,0 +1,436 @@ +#!/usr/local/bin/php -f +. + 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. + +*/ + +require_once("globals.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("xmlrpc.inc"); +require_once("interfaces.inc"); + +/* + * backup_vip_config_section($section): returns as an xml file string of + * the configuration section + */ +function backup_vip_config_section() { + global $config; + + if (!is_array($config['virtualip']['vip'])) + return; + $temp = array(); + $temp['vip'] = array(); + foreach($config['virtualip']['vip'] as $section) { + if ($section['mode'] != "carp") + continue; + if ($section['advskew'] <> "") { + $section_val = intval($section['advskew']); + $section_val=$section_val+100; + if ($section_val > 254) + $section_val = 254; + $section['advskew'] = $section_val; + } + if ($section['advbase'] <> "") { + $section_val = intval($section['advbase']); + if ($section_val > 254) + $section_val = 254; + $section['advbase'] = $section_val; + } + $temp['vip'][] = $section; + } + return $temp; +} + +function remove_special_characters($string) { + $match_array = ""; + preg_match_all("/[a-zA-Z0-9\_\-]+/",$string,$match_array); + $string = ""; + foreach ($match_array[0] as $ma) { + if ($string <> "") + $string .= " "; + $string .= $ma; + } + return $string; +} + +function carp_check_version($url, $username, $password, $port = 80, $method = 'pfsense.host_firmware_version') { + global $config, $g; + + if(file_exists("{$g['varrun_path']}/booting") || $g['booting']) + return; + + $params = array( + XML_RPC_encode($password) + ); + + $numberofruns = 0; + while ($numberofruns < 2) { + $msg = new XML_RPC_Message($method, $params); + $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port); + $cli->setCredentials($username, $password); + if($numberofruns > 0) + $cli->setDebug(1); + /* send our XMLRPC message and timeout after 240 seconds */ + $resp = $cli->send($msg, "240"); + if(!is_object($resp)) { + $error = "A communications error occurred while attempting XMLRPC sync with username {$username} {$url}:{$port}."; + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting XMLRPC sync with username {$username} {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + } else { + $parsed_response = XML_RPC_decode($resp->value()); + if(!is_array($parsed_response)) { + if (trim($parsed_response) == "Authentication failed") { + $error = "An authentication failure occurred while trying to access {$url}:{$port} ({$method})."; + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + exit; + } + } else { + if (!isset($parsed_response['config_version']) || + $parsed_response['config_version'] < $config['version']) { + update_filter_reload_status("The other member is on older configuration version of {$g['product_name']}. Sync will not be done to prevent problems!"); + log_error("The other member is on older configuration version of {$g['product_name']}. Sync will not be done to prevent problems!"); + return false; + } else + return true; + } + } + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + $numberofruns++; + } + + return false; +} + +function carp_sync_xml($url, $username, $password, $sections, $port = 80, $method = 'pfsense.restore_config_section') { + global $config, $g; + + if(file_exists("{$g['varrun_path']}/booting") || $g['booting']) + return; + + update_filter_reload_status("Syncing CARP data to {$url}"); + + /* make a copy of config */ + $config_copy = $config; + + /* strip out nosync items */ + if (is_array($config_copy['nat']['outbound']['rule'])) { + $rulescnt = count($config_copy['nat']['outbound']['rule']); + for ($x = 0; $x < $rulescnt; $x++) { + $config_copy['nat']['outbound']['rule'][$x]['descr'] = remove_special_characters($config_copy['nat']['outbound']['rule'][$x]['descr']); + if (isset ($config_copy['nat']['outbound']['rule'][$x]['nosync'])) + unset ($config_copy['nat']['outbound']['rule'][$x]); + } + } + if (is_array($config_copy['nat']['rule'])) { + $natcnt = count($config_copy['nat']['rule']); + for ($x = 0; $x < $natcnt; $x++) { + $config_copy['nat']['rule'][$x]['descr'] = remove_special_characters($config_copy['nat']['rule'][$x]['descr']); + if (isset ($config_copy['nat']['rule'][$x]['nosync'])) + unset ($config_copy['nat']['rule'][$x]); + } + } + if (is_array($config_copy['filter']['rule'])) { + $filtercnt = count($config_copy['filter']['rule']); + for ($x = 0; $x < $filtercnt; $x++) { + $config_copy['filter']['rule'][$x]['descr'] = remove_special_characters($config_copy['filter']['rule'][$x]['descr']); + if (isset ($config_copy['filter']['rule'][$x]['nosync'])) + unset ($config_copy['filter']['rule'][$x]); + } + } + if (is_array($config_copy['aliases']['alias'])) { + $aliascnt = count($config_copy['aliases']['alias']); + for ($x = 0; $x < $aliascnt; $x++) { + $config_copy['aliases']['alias'][$x]['descr'] = remove_special_characters($config_copy['aliases']['alias'][$x]['descr']); + if (isset ($config_copy['aliases']['alias'][$x]['nosync'])) + unset ($config_copy['aliases']['alias'][$x]); + } + } + if (is_array($config_copy['dnsmasq']['hosts'])) { + $dnscnt = count($config_copy['dnsmasq']['hosts']); + for ($x = 0; $x < $dnscnt; $x++) { + $config_copy['dnsmasq']['hosts'][$x]['descr'] = remove_special_characters($config_copy['dnsmasq']['hosts'][$x]['descr']); + if (isset ($config_copy['dnsmasq']['hosts'][$x]['nosync'])) + unset ($config_copy['dnsmasq']['hosts'][$x]); + } + } + if (is_array($config_copy['ipsec']['tunnel'])) { + $ipseccnt = count($config_copy['ipsec']['tunnel']); + for ($x = 0; $x < $ipseccnt; $x++) { + $config_copy['ipsec']['tunnel'][$x]['descr'] = remove_special_characters($config_copy['ipsec']['tunnel'][$x]['descr']); + if (isset ($config_copy['ipsec']['tunnel'][$x]['nosync'])) + unset ($config_copy['ipsec']['tunnel'][$x]); + } + } + + if (is_array($config_copy['dhcpd'])) { + foreach($config_copy['dhcpd'] as $dhcpif => $dhcpifconf) { + if($dhcpifconf['failover_peerip'] <> "") { + $int = guess_interface_from_ip($dhcpifconf['failover_peerip']); + $intip = find_interface_ip($int); + $config_copy['dhcpd'][$dhcpif]['failover_peerip'] = $intip; + } + } + } + + foreach ($sections as $section) { + /* we can't use array_intersect_key() + * due to the vip 'special case' + */ + switch ($section) { + case 'virtualip': + $xml[$section] = backup_vip_config_section(); + break; + case 'user': + $xml['system'][$section] = $config_copy['system'][$section]; + $xml['system']['nextuid'] = $config_copy['system']['nextuid']; + break; + case 'group': + $xml['system'][$section] = $config_copy['system'][$section]; + $xml['system']['nextgid'] = $config_copy['system']['nextgid']; + break; + case 'authserver': + $xml['system'][$section] = $config_copy['system'][$section]; + default: + $xml[$section] = $config_copy[$section]; + } + } + + $params = array( + XML_RPC_encode($password), + XML_RPC_encode($xml) + ); + + $numberofruns = 0; + while ($numberofruns < 2) { + log_error("Beginning XMLRPC sync to {$url}:{$port}."); + $msg = new XML_RPC_Message($method, $params); + $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port); + $cli->setCredentials($username, $password); + if($numberofruns > 0) + $cli->setDebug(1); + /* send our XMLRPC message and timeout after 240 seconds */ + $resp = $cli->send($msg, "240"); + if(!is_object($resp)) { + $error = "A communications error occurred while attempting XMLRPC sync with username {$username} {$url}:{$port}."; + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting XMLRPC sync with username {$username} {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + } else { + $parsed_response = XML_RPC_decode($resp->value()); + if(!is_array($parsed_response) && trim($parsed_response) == "Authentication failed") { + $error = "An authentication failure occurred while trying to access {$url}:{$port} ($method)."; + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + exit; + } else { + log_error("XMLRPC sync successfully completed with {$url}:{$port}."); + update_filter_reload_status("XMLRPC sync successfully completed with {$url}:{$port}."); + } + $numberofruns = 3; + } + $numberofruns++; + } +} + +global $g; +if (file_exists("{$g['varrun_path']}/booting") || $g['booting']) + return; + +if (is_array($config['hasync'])) { + update_filter_reload_status("Building high availability sync information"); + $hasync = $config['hasync']; + + if (empty($hasync['synchronizetoip'])) { + log_error("Config sync not being done because of missing sync IP (this is normal on secondary systems)."); + exit; + } + + /* + * XXX: The way we're finding the port right now is really suboptimal - + * we can't assume that the other machine is setup identically. + */ + if (!empty($config['system']['webgui']['protocol'])) { + $synchronizetoip = $config['system']['webgui']['protocol']; + $synchronizetoip .= "://"; + } + + /* if port is empty lets rely on the protocol selection */ + $port = $config['system']['webgui']['port']; + if (empty($port)) { + if ($config['system']['webgui']['protocol'] == "http") + $port = "80"; + else + $port = "443"; + } + + if(is_ipaddrv6($hasync['synchronizetoip'])) + $hasync['synchronizetoip'] = "[{$hasync['synchronizetoip']}]"; + $synchronizetoip .= $hasync['synchronizetoip']; + if ($hasync['synchronizerules'] != "") { + if (!is_array($config['filter'])) + $config['filter'] = array(); + $sections[] = 'filter'; + } + if ($hasync['synchronizenat'] != "") { + if (!is_array($config['nat'])) + $config['nat'] = array(); + $sections[] = 'nat'; + } + if ($hasync['synchronizealiases'] != "") { + if (!is_array($config['aliases'])) + $config['aliases'] = array(); + $sections[] = 'aliases'; + } + if ($hasync['synchronizedhcpd'] != "" and is_array($config['dhcpd'])) + $sections[] = 'dhcpd'; + if ($hasync['synchronizewol'] != "") { + if (!is_array($config['wol'])) + $config['wol'] = array(); + $sections[] = 'wol'; + } + if ($hasync['synchronizetrafficshaper'] != "" and is_array($config['shaper'])) + $sections[] = 'shaper'; + if ($hasync['synchronizetrafficshaperlimiter'] != "" and is_array($config['dnshaper'])) + $sections[] = 'dnshaper'; + if ($hasync['synchronizetrafficshaperlayer7'] != "" and is_array($config['l7shaper'])) + $sections[] = 'l7shaper'; + if ($hasync['synchronizestaticroutes'] != "") { + if (!is_array($config['staticroutes'])) + $config['staticroutes'] = array(); + if (!is_array($config['staticroutes']['route'])) + $config['staticroutes']['route'] = array(); + $sections[] = 'staticroutes'; + if (!is_array($config['gateways'])) + $config['gateways'] = array(); + $sections[] = 'gateways'; + } + if ($hasync['synchronizevirtualip'] != "") { + if (!is_array($config['virtualip'])) + $config['virtualip'] = array(); + $sections[] = 'virtualip'; + } + if ($hasync['synchronizelb'] != "") { + if (!is_array($config['load_balancer'])) + $config['load_balancer'] = array(); + $sections[] = 'load_balancer'; + } + if ($hasync['synchronizeipsec'] != "") { + if (!is_array($config['ipsec'])) + $config['ipsec'] = array(); + $sections[] = 'ipsec'; + } + if ($hasync['synchronizeopenvpn'] != "") { + if (!is_array($config['openvpn'])) + $config['openvpn'] = array(); + $sections[] = 'openvpn'; + } + if ($hasync['synchronizecerts'] != "" || $hasync['synchronizeopenvpn'] != "") { + if (!is_array($config['cert'])) + $config['cert'] = array(); + $sections[] = 'cert'; + + if (!is_array($config['ca'])) + $config['ca'] = array(); + $sections[] = 'ca'; + + if (!is_array($config['crl'])) + $config['crl'] = array(); + $sections[] = 'crl'; + } + if ($hasync['synchronizeusers'] != "") { + $sections[] = 'user'; + $sections[] = 'group'; + } + if ($hasync['synchronizeauthservers'] != "") { + $sections[] = 'authserver'; + } + if ($hasync['synchronizednsforwarder'] != "" and is_array($config['dnsmasq'])) + $sections[] = 'dnsmasq'; + if ($hasync['synchronizeschedules'] != "" || $hasync['synchronizerules'] != "") { + if (!is_array($config['schedules'])) + $config['schedules'] = array(); + $sections[] = 'schedules'; + } + if ($hasync['synchronizecaptiveportal'] != "" and is_array($config['captiveportal'])) + $sections[] = 'captiveportal'; + if ($hasync['synchronizecaptiveportal'] != "" and is_array($config['vouchers'])) + $sections[] = 'vouchers'; + + if (count($sections) <= 0) { + log_error("Nothing has been configured to be synched. Skipping...."); + exit; + } + + if (empty($hasync['username'])) + $username = "admin"; + else + $username = $hasync['username']; + + if (!carp_check_version($synchronizetoip, $username, $hasync['password'], $port)) + exit; + + update_filter_reload_status("Signaling CARP reload signal..."); + carp_sync_xml($synchronizetoip, $username, $hasync['password'], $sections, $port); + $cli = new XML_RPC_Client('/xmlrpc.php', $synchronizetoip, $port); + $params = array( + XML_RPC_encode($hasync['password']) + ); + + $msg = new XML_RPC_Message('pfsense.filter_configure', $params); + $cli->setCredentials($username, $hasync['password']); + $resp = $cli->send($msg, "900"); + + if (!is_object($resp)) { + $error = "A communications error occurred while attempting Filter sync with username {$username} {$synchronizetoip}:{$port}."; + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting Filter sync with username {$username} {$synchronizetoip}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + } else { + log_error("Filter sync successfully completed with {$synchronizetoip}:{$port}."); + $numberofruns = 3; + } +} + +?> diff --git a/etc/rc.firmware b/etc/rc.firmware new file mode 100755 index 000000000..32ee44be9 --- /dev/null +++ b/etc/rc.firmware @@ -0,0 +1,542 @@ +#!/bin/sh + +# /etc/rc.firmware +# originally part of m0n0wall (http://neon1.net/m0n0wall) +# Copyright (C) 2005-2009 Scott Ullrich . +# Copyright (C) 2003 Manuel Kasper . +# All rights reserved. + +# mount /cf +/etc/rc.conf_mount_rw + +# Reset file(s) +echo "" >/conf/upgrade_log.txt +echo "" >/conf/firmware_update_misc_log.txt +echo "" >/conf/fdisk_upgrade_log.txt + +exec 3>&2 2>>/conf/firmware_update_misc_log.txt + +export ACTION=$1 +export IMG=$2 +if [ $# -eq 3 ]; then + export CUSTOMIMG=$3 +fi + +if [ $ACTION != "upgrade" ]; then + /sbin/umount -f /ftmp > /dev/null 2>&1 +fi + +file_notice() { + /usr/local/bin/php -q -d auto_prepend_file=config.inc < +ENDOFF +} + +output_env_to_log() { + date >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + ls -lah /dev/ >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + ls -lah $IMG >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + md5 $IMG >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + mount >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + top >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt +} + +backup_chflags() { + TOPROCESS="bin lib libexec sbin usr" + for files in $TOPROCESS; do + /usr/sbin/mtree -Pcp /${files} | bzip2 -9 > /tmp/chflags.dist.${files}.bz2 2>> /conf/upgrade_log.txt + done +} + +restore_chflags() { + TOPROCESS="bin lib libexec sbin usr" + for files in $TOPROCESS; do + cd / && /usr/bin/bzcat /tmp/chflags.dist.${files}.bz2 | /usr/sbin/mtree -PU -p /${files} >> /conf/upgrade_log.txt 2>&1 + done +} + +remove_chflags() { + TOPROCESS="bin lib libexec sbin usr" + for files in $TOPROCESS; do + /bin/chflags -R noschg /${files} + /bin/chmod -R u+rw /${files} + done +} + +binary_update() { + TGZ=$1 + ERR_F="/tmp/bdiff.log" + rm ${ERR_F} 2>/dev/null + /bin/mkdir /tmp/patched /tmp/patches 2>>${ERR_F} + # Save the old shutdown binary. If we switch from i386 to amd64 (or back) the reboot binary won't run at the end since it doesn't match up. + /bin/cp -p /sbin/shutdown /sbin/shutdown.old + backup_chflags + remove_chflags + cd /tmp/patches + for i in `/usr/bin/tar tvzf $TGZ | egrep -v "(^d|_md5)" | nawk '{print $9;}'`; + do + FILE=`basename ${i}` + echo "Working on ${i}" + # Untar patch file and md5 files + /usr/bin/tar xzf ${TGZ} ${i} ${i}.old_file_md5 ${i}.new_patch_md5 ${i}.new_file_md5 2>>${ERR_F} + + # Apply patch - oldfile newfile patchfile + /usr/local/bin/bspatch /${i} /tmp/patched/${FILE} /tmp/patches/${i} 2>>${ERR_F} + + OLD_FILE_MD5=`cat /tmp/patches/${i}.old_file_md5 2>/dev/null` + NEW_PATCH_MD5=`cat /tmp/patches/${i}.new_patch_md5 2>/dev/null` + NEW_FILE_MD5=`cat /tmp/patches/${i}.new_file_md5 2>/dev/null` + PATCHED_MD5=`/sbin/md5 -q /tmp/patched/${FILE} 2>/dev/null` + + if [ "$PATCHED_MD5" = "$NEW_PATCH_MD5" ]; then + /usr/bin/install -S /tmp/patched/${FILE} /${i} + else + #echo "${i} file does not match intended final md5." + echo "${i} file does not match intended final md5." >> ${ERR_F} + fi + + /bin/rm /tmp/patched/${FILE} >> ${ERR_F} + /bin/rm /tmp/patches/${i} >> ${ERR_F} + /bin/rm /tmp/patches/${i}.* >> ${ERR_F} + done + /bin/rm -rf /tmp/patched /tmp/patches >> ${ERR_F} + restore_chflags +} + +case $ACTION in +enable) + touch /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + echo "Enable" >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + /etc/rc.conf_mount_ro + ;; +auto) + touch /var/run/firmwarelock.dirty + backup_chflags + remove_chflags + /etc/rc.firmware_auto + restore_chflags + /etc/rc.conf_mount_ro + ;; +pfSenseNanoBSDupgrade) + + # Sanity check - bail early if there's no firmware file! + if [ ! -r $IMG ]; then + echo "2nd parameter has not been passed or file does not exist. Exiting." >> /conf/upgrade_log.txt 2>&1 + /etc/rc.conf_mount_ro + exit 1 + fi + + # Prevent full upgrade file from being used to upgrade + if [ `echo $IMG | grep "full"` ]; then + echo "You cannot use a full file for upgrade. Please use a file labeled nanobsd upgrade." + file_notice "NanoBSDUpgradeFailure" "You have attemped to use a full NanoBSD installation file as an upgrade. Please use a NanoBSD file labeled 'upgrade' instead." + rm -f $IMG + /etc/rc.conf_mount_ro + exit 1 + fi + + touch /var/run/firmwarelock.dirty + + echo "NanoBSD Firmware upgrade in progress..." >> /conf/upgrade_log.txt 2>&1 + echo "NanoBSD Firmware upgrade in progress..." | wall + /etc/rc.notify_message -e -g -m "NanoBSD Firmware upgrade in progress..." + + # backup config + /bin/mkdir -p /tmp/configbak + cp -Rp /conf/* /tmp/configbak 2>/dev/null + + # Remove logs from backup dir to avoid clobbering upon restore. + rm /tmp/configbak/*_log.txt 2>/dev/null + + echo "" >> /conf/upgrade_log.txt + + echo "Installing ${IMG}." >> /conf/upgrade_log.txt 2>&1 + echo "Installing ${IMG}." | wall + + # resolve glabel label that we booted from + BOOT_DEVICE=`/sbin/mount | /usr/bin/grep pfsense | /usr/bin/cut -d'/' -f4 | /usr/bin/cut -d' ' -f1` + # resolve glabel to the real boot dev entry + REAL_BOOT_DEVICE=`/sbin/glabel list | /usr/bin/grep -B2 ufs/${BOOT_DEVICE} | /usr/bin/head -n 1 | /usr/bin/cut -f3 -d' '` + # grab the boot device, example ad1, ad0 + BOOT_DRIVE=`/sbin/glabel list | /usr/bin/grep -B2 ufs/pfsense | /usr/bin/head -n 1 | /usr/bin/cut -f3 -d' ' | /usr/bin/cut -d's' -f1` + # test the slice. if we are on slice 1 we need to flash 2 and vica versa + if [ `echo $REAL_BOOT_DEVICE | /usr/bin/grep "s1"` ]; then + SLICE="2" + OLDSLICE="1" + TOFLASH="${BOOT_DRIVE}s${SLICE}" + COMPLETE_PATH="${BOOT_DRIVE}s${SLICE}a" + GLABEL_SLICE="pfsense1" + UFS_ID="1" + OLD_UFS_ID="0" + else + SLICE="1" + OLDSLICE="2" + TOFLASH="${BOOT_DRIVE}s${SLICE}" + COMPLETE_PATH="${BOOT_DRIVE}s${SLICE}a" + GLABEL_SLICE="pfsense0" + UFS_ID="0" + OLD_UFS_ID="1" + fi + + # Output specifc information that this script is using + echo "SLICE ${SLICE}" >> /conf/upgrade_log.txt + echo "OLDSLICE ${OLDSLICE}" >> /conf/upgrade_log.txt + echo "TOFLASH ${TOFLASH}" >> /conf/upgrade_log.txt + echo "COMPLETE_PATH ${COMPLETE_PATH}" >> /conf/upgrade_log.txt + echo "GLABEL_SLICE ${GLABEL_SLICE}" >> /conf/upgrade_log.txt + + # First ensure the new file can fit inside the + # slice that we are going to be operating on. + NEW_IMG_SIZE=`echo $((\`gzip -l ${IMG} | grep -v compressed | awk '{ print $2}'\` / 1024 / 1024))` + SIZE=`/sbin/fdisk ${COMPLETE_PATH} | /usr/bin/grep Meg | /usr/bin/awk '{ print $5 }' | /usr/bin/cut -d"(" -f2` + # USB slices are under-reported even more than CF slices when viewed + # directly, instead of when looking at the entire disk. Compensate + # by adding exactly 6MB. 4MB was consistently 2MB too few, and + # was resulting in failing upgrades on USB Flash based installs. + SIZE=`expr $SIZE + 6` + if [ "$SIZE" -lt "$NEW_IMG_SIZE" ]; then + file_notice "UpgradeFailure" "Upgrade failed due to the upgrade image being larger than the partition that is configured on disk. Halting. Size on disk: $SIZE < Size of new image: $NEW_IMG_SIZE" + echo "Upgrade failed. Please check the system log file for more information" | wall + rm -f $IMG + rm -f /var/run/firmwarelock.dirty + rm -f /var/run/firmware.lock + rm -f ${IMG} + /etc/rc.conf_mount_ro + exit 1 + fi + + # Output environment information to log file + output_env_to_log + + # Grab a before upgrade look at fdisk + echo "" >> /conf/fdisk_upgrade_log.txt + echo "Before upgrade fdisk/bsdlabel" >> /conf/fdisk_upgrade_log.txt + fdisk $BOOT_DRIVE >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s1 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s2 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s3 >> /conf/fdisk_upgrade_log.txt + echo "---------------------------------------------------------------" >> /conf/fdisk_upgrade_log.txt + echo "" >> /conf/fdisk_upgrade_log.txt + + # Log that we are really doing a NanoBSD upgrade + echo "" >> /conf/upgrade_log.txt + echo "NanoBSD upgrade starting" >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + # Remove TOFLASH and get ready for new flash image + echo "" >> /conf/upgrade_log.txt + echo "dd if=/dev/zero of=/dev/${TOFLASH} bs=1m count=1" >> /conf/upgrade_log.txt + dd if=/dev/zero of=/dev/${TOFLASH} bs=1m count=1 >> /conf/upgrade_log.txt 2>&1 + + # Stream gzipped image to dd and explode image to new area + echo "" >> /conf/upgrade_log.txt + echo "/usr/bin/gzip -dc $IMG | /bin/dd of=/dev/${TOFLASH} obs=64k" >> /conf/upgrade_log.txt + /usr/bin/gzip -dc $IMG | /bin/dd of=/dev/${TOFLASH} obs=64k >> /conf/upgrade_log.txt 2>&1 + + # Grab a after upgrade look at fdisk + echo "" >> /conf/fdisk_upgrade_log.txt + echo "After upgrade fdisk/bsdlabel" >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVE >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s1 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s2 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s3 >> /conf/fdisk_upgrade_log.txt + echo "---------------------------------------------------------------" >> /conf/fdisk_upgrade_log.txt + echo "" >> /conf/fdisk_upgrade_log.txt + + # Ensure that our new system is sound and bail if it is not and file a notice + echo "" >> /conf/upgrade_log.txt + echo "/sbin/fsck_ufs -y /dev/${COMPLETE_PATH}" >> /conf/upgrade_log.txt + /sbin/fsck_ufs -y /dev/${COMPLETE_PATH} >> /conf/upgrade_log.txt 2>&1 + if [ $? != 0 ]; then + file_notice "UpgradeFailure" "{\$g['product_name']} upgrade has failed. Your system has been left in a usable state." + rm -f $IMG + rm -f /var/run/firmwarelock.dirty + rm -f /var/run/firmware.lock + /etc/rc.conf_mount_ro + exit 1 + fi + + # Enable foot shooting + sysctl kern.geom.debugflags=16 + + # Add back the corresponding glabel + echo "" >> /conf/upgrade_log.txt + echo "/sbin/tunefs -L ${GLABEL_SLICE} /dev/${COMPLETE_PATH}" >> /conf/upgrade_log.txt + /sbin/tunefs -L ${GLABEL_SLICE} /dev/${COMPLETE_PATH} >> /conf/upgrade_log.txt 2>&1 + + # restore config + cp -Rp /tmp/configbak/* /conf 2>/dev/null + + # Remove upgrade file + rm -f $IMG + + # Mount newly prepared slice + mkdir /tmp/$GLABEL_SLICE + mount /dev/ufs/$GLABEL_SLICE /tmp/$GLABEL_SLICE + + # If /boot/loader.conf.local exists + # copy to the other slice. + if [ -f /boot/loader.conf.local ]; then + cp /boot/loader.conf.local /tmp/$GLABEL_SLICE/boot/loader.conf.local + fi + + # If /tmp/$GLABEL_SLICE/tmp/post_upgrade_command exists + # after update then execute the command. + echo "Checking for post_upgrade_command..." >> /conf/upgrade_log.txt + if [ -f /tmp/$GLABEL_SLICE/tmp/post_upgrade_command ]; then + echo "Found post_upgrade_command, executing ($GLABEL_SLICE)..." >> /conf/upgrade_log.txt + sh /tmp/$GLABEL_SLICE/tmp/post_upgrade_command $GLABEL_SLICE >> /conf/upgrade_log.txt 2>&1 + fi + + # Update fstab + cp /etc/fstab /tmp/$GLABEL_SLICE/etc/fstab + sed -i "" "s/pfsense${OLD_UFS_ID}/pfsense${UFS_ID}/g" /tmp/$GLABEL_SLICE/etc/fstab + if [ $? != 0 ]; then + echo "Something went wrong when trying to update the fstab entry. Aborting upgrade." + file_notice "UpgradeFailure" "Something went wrong when trying to update the fstab entry. Aborting upgrade." + rm -f $IMG + rm -f /var/run/firmwarelock.dirty + rm -f /var/run/firmware.lock + umount /tmp/$GLABEL_SLICE + /etc/rc.conf_mount_ro + exit 1 + fi + echo "" >> /conf/upgrade_log.txt + cat /tmp/$GLABEL_SLICE/etc/fstab >> /conf/upgrade_log.txt + + echo "" >> /conf/upgrade_log.txt + find /tmp/$GLABEL_SLICE >/conf/file_upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + # Unmount newly prepared slice + umount /tmp/$GLABEL_SLICE + + sync + + # Set active mount slice in fdisk + echo "" >> /conf/upgrade_log.txt + echo "gpart set -a active -i ${SLICE} ${BOOT_DRIVE}" >> /conf/upgrade_log.txt + gpart set -a active -i ${SLICE} ${BOOT_DRIVE} >> /conf/upgrade_log.txt 2>&1 + + sync + + # Set active boot source - NanoBSD does not do this but otherwise we + # end up with the wrong partition being active. + echo "" >> /conf/upgrade_log.txt + echo "/usr/sbin/boot0cfg -s ${SLICE} -v /dev/${BOOT_DRIVE}" >> /conf/upgrade_log.txt + /usr/sbin/boot0cfg -s ${SLICE} -v /dev/${BOOT_DRIVE} >> /conf/upgrade_log.txt 2>&1 + + # Disable foot shooting + sysctl kern.geom.debugflags=0 + + # Grab a final look at fdisk + echo "" >> /conf/fdisk_upgrade_log.txt + echo "Final upgrade fdisk/bsdlabel" >> /conf/fdisk_upgrade_log.txt + fdisk $BOOT_DRIVE >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s1 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s2 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s3 >> /conf/fdisk_upgrade_log.txt + echo "---------------------------------------------------------------" >> /conf/fdisk_upgrade_log.txt + echo "" >> /conf/fdisk_upgrade_log.txt + + # Remove extra stuff + rm -rf /etc/rc.conf + rm -rf /etc/motd + rm -rf /usr/savecore/* + + date >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + # Trigger a package reinstallation on reobot + touch /conf/needs_package_sync + + # remount /cf ro + /etc/rc.conf_mount_ro + /bin/sync + + echo "NanoBSD Firmware upgrade is complete. Rebooting in 10 seconds." >> /conf/upgrade_log.txt 2>&1 + echo "NanoBSD Firmware upgrade is complete. Rebooting in 10 seconds." | wall + /etc/rc.notify_message -e -g -m "NanoBSD Firmware upgrade is complete. Rebooting in 10 seconds." + + sleep 10 + + rm -f /var/run/firmwarelock.dirty + rm -f /var/run/firmware.lock + . /etc/rc.reboot + + ;; +pfSenseupgrade) + + # Sanity check - bail early if there's no firmware file! + if [ ! -r $IMG ]; then + echo "2nd parameter has not been passed or file does not exist. Exiting." >> /conf/upgrade_log.txt 2>&1 + /etc/rc.conf_mount_ro + exit + fi + + # wait 1 seconds before beginning + sleep 1 + + # Log that we are really doing a pfSense upgrade + echo "" >> /conf/upgrade_log.txt + echo "pfSenseupgrade upgrade starting" >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + touch /var/run/firmwarelock.dirty + + if [ -f /tmp/perform_full_backup.txt ]; then + echo "Performing full backup" >> /conf/upgrade_log.txt + /etc/rc.create_full_backup + rm /tmp/perform_full_backup.txt + fi + + touch /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + # Output environment information to log file + output_env_to_log + + backup_chflags + remove_chflags + + # Do we have a pre-upgrade hook in the update file? + if [ `tar tvzf $IMG | grep /tmp/pre_upgrade_command | wc -l` -gt 0 ]; then + tar xzvf $IMG -C / ./tmp/pre_upgrade_command >> /conf/upgrade_log.txt 2>&1 + chmod a+rx /tmp/pre_upgrade_command >> /conf/upgrade_log.txt 2>&1 + sh /tmp/pre_upgrade_command >> /conf/upgrade_log.txt 2>&1 + fi + + echo "Firmware upgrade in progress..." >> /conf/upgrade_log.txt 2>&1 + echo "Firmware upgrade in progress..." | wall + /etc/rc.notify_message -e -g -m "Firmware upgrade in progress..." + + # backup config + [ -d /tmp/configbak ] && rm -rf /tmp/configbak + /bin/mkdir -p /tmp/configbak + cp -Rp /conf/* /tmp/configbak 2>/dev/null + + # Remove logs from backup dir to avoid clobbering upon restore. + rm /tmp/configbak/*_log.txt 2>/dev/null + + # tar explode image onto hd + ps -a | grep "check_reload_status" | awk '{print $1;}' | kill -9 + echo "Installing $IMG." >> /conf/upgrade_log.txt 2>&1 + cd / && /usr/bin/tar --exclude=./dev -xzUPf $IMG >> /conf/upgrade_log.txt 2>&1 + /usr/bin/nice -n20 /usr/local/opnsense/check_reload_status.py + echo "Image installed $IMG." >> /conf/upgrade_log.txt 2>&1 + + # process custom image if its passed + if [ $# -eq 3 ]; then + if [ -f $CUSTOMIMG ]; then + echo "Custom image $CUSTOMIMG found." >> /conf/upgrade_log.txt 2>&1 + echo "Custom image ($CUSTOMIMG) found." >> /conf/upgrade_log.txt 2>&1 + PWD_DIR=`pwd` + cd / && /usr/bin/tar xzPUf $CUSTOMIMG >> /conf/upgrade_log.txt 2>&1 + cd $PWD_DIR + echo "Custom image $CUSTOMIMG installed." >> /conf/upgrade_log.txt 2>&1 + fi + fi + + # restore config + cp -Rp /tmp/configbak/* /conf 2>/dev/null + + # restore /etc symlinks + rm /etc/hosts + ln -s /var/etc/hosts /etc/hosts + + restore_chflags + + # Remove upgrade file + rm -f $IMG + + if [ -e /etc/init_bootloader.sh ]; then + if [ ! -x /etc/init_bootloader.sh ]; then + chmod ug+x /etc/init_bootloader.sh + fi + /etc/init_bootloader.sh >> /conf/upgrade_log.txt 2>&1 + fi + + # Remove saved commit ID for gitsync + rm -f /etc/version.gitsync + + # If /tmp/post_upgrade_command exists after update + # then execute the command. + if [ -f /tmp/post_upgrade_command ]; then + if [ ! -x /tmp/post_upgrade_command ]; then + chmod ug+x /tmp/post_upgrade_command + fi + /tmp/post_upgrade_command >> /conf/upgrade_log.txt 2>&1 + fi + + # remove unused files + rm -rf /etc/rc.conf + rm -rf /etc/motd + rm -rf /usr/savecore/* + + date >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + # remount /cf ro + /etc/rc.conf_mount_ro + + # release the firmware lock + rm -f /var/run/firmwarelock.dirty + rm -f /var/run/firmware.lock + /bin/sync + + echo "Firmware upgrade is complete. Rebooting in 10 seconds." >> /conf/upgrade_log.txt 2>&1 + echo "Firmware upgrade is complete. Rebooting in 10 seconds." | wall + /etc/rc.notify_message -e -g -m "Firmware upgrade is complete. Rebooting in 10 seconds." + + # Sleep and allow disks to catch up + sleep 10 + + # If the archive has unpacked a file called + # /tmp/no_upgrade_reboot_required then do + # not reboot after upgrade. + if [ -f /tmp/no_upgrade_reboot_required ]; then + rm /tmp/no_upgrade_reboot_required + else + . /etc/rc.reboot + fi + + ;; +delta_update) + touch /var/run/firmwarelock.dirty + backup_chflags + remove_chflags + binary_update $IMG + restore_chflags + rm -rf /etc/rc.conf + rm -rf /etc/motd + find / -name CVS -type d -exec rm {} \; + rm -rf /usr/savecore/* + /etc/rc.conf_mount_ro + /sbin/umount -f /cf 2>/dev/null + /sbin/mount -r /cf 2>/dev/null + /sbin/umount -f / 2>/dev/null + /sbin/mount -r / 2>/dev/null + if [ -e /etc/init_bootloader.sh ]; then + sh /etc/init_bootloader.sh + fi + + ;; +esac + diff --git a/etc/rc.firmware_auto b/etc/rc.firmware_auto new file mode 100755 index 000000000..be5da9196 --- /dev/null +++ b/etc/rc.firmware_auto @@ -0,0 +1,88 @@ +#!/bin/sh + +# $Id$ + +FMBASEURL=$1 +FMFILENAME=$2 +FETCHFILENAME=$1/$2 + +product=`cat /etc/inc/globals.inc | grep product_name | cut -d'"' -f4` + +# wait 5 seconds before beginning +sleep 5 + +logger -p daemon.info -i -t AutoUpgrade "Auto Upgrade started" + +HTTP_AUTH="" + +# if username and password is passed, let fetch utilize. +if [ $# -gt 3 ]; then +HTTP_AUTH="basic:*:$3:$4" +fi + +#echo "Downloading $FMFILENAME from $FMBASEURL ..." | logger -p daemon.info -i -t AutoUpgrade +#/usr/bin/fetch -o /tmp/latest.tgz $FETCHFILENAME | logger -p daemon.info -i -t AutoUpgrade +#echo "Downloading $FMFILENAME.md5 from $FMBASEURL ..." | logger -p daemon.info -i -t AutoUpgrade +#/usr/bin/fetch -o /tmp/latest.tgz.md5 $FETCHFILENAME.md5 | logger -p daemon.info -i -t AutoUpgrade + +PMD=`/bin/cat /tmp/latest.tgz.md5 | cut -d" " -f4 ` +MD=`/sbin/md5 /tmp/latest.tgz | cut -d" " -f4` + +PLATFORM=`cat /etc/platform` + +echo " Package MD5: ${PMD}" | logger -p daemon.info -i -t AutoUpgrade +echo "Downloaded MD5: ${MD}" | logger -p daemon.info -i -t AutoUpgrade + +if [ "$PMD" = "" ]; then + echo "Package MD5 is null md5. Require proxy auth?" | logger -p daemon.info -i -t AutoUpgrade + exit 1 +fi + +if [ "$MD" = "" ]; then + echo "Downloaded MD5 is null md5. Require proxy auth?" | logger -p daemon.info -i -t AutoUpgrade + exit 1 +fi + +if [ "$PMD" = "$MD" ]; then + echo "MD5's match." | logger -p daemon.info -i -t AutoUpgrade + echo "Beginning ${product} upgrade." | wall + if [ "$PLATFORM" = "net45xx" ]; then + /usr/local/bin/php /etc/rc.conf_mount_rw + fi + if [ "$PLATFORM" = "wrap" ]; then + /usr/local/bin/php /etc/rc.conf_mount_rw + fi + if [ "$PLATFORM" = "nanobsd" ]; then + /usr/local/bin/php /etc/rc.conf_mount_rw + fi + if [ -r "/tmp/custom.tgz" ]; then + sh /etc/rc.firmware pfSenseupgrade /tmp/latest.tgz /tmp/custom.tgz + else + if [ "$PLATFORM" = "nanobsd" ]; then + sh /etc/rc.firmware pfSenseNanoBSDupgrade /tmp/latest.tgz + else + sh /etc/rc.firmware pfSenseupgrade /tmp/latest.tgz + fi + fi + if [ "$PLATFORM" = "wrap" ]; then + /bin/sync + sleep 5 + /usr/local/bin/php /etc/rc.conf_mount_ro + if [ -e /etc/init_bootloader.sh ]; then + sh /etc/init_bootloader.sh + fi + fi + if [ "$PLATFORM" = "net45xx" ]; then + /bin/sync + sleep 5 + /usr/local/bin/php /etc/rc.conf_mount_ro + if [ -e /etc/init_bootloader.sh ]; then + sh /etc/init_bootloader.sh + fi + fi + exit 0 +fi + +echo "MD5's do not match. Upgrade aborted." | logger -p daemon.info -i -t AutoUpgrade +rm /tmp/latest* +exit 1 diff --git a/etc/rc.halt b/etc/rc.halt new file mode 100755 index 000000000..fd6318ba6 --- /dev/null +++ b/etc/rc.halt @@ -0,0 +1,13 @@ +#!/bin/sh + +# $Id$ + +if ! /usr/bin/lockf -s -t 30 /tmp/config.lock /usr/bin/true; then + echo "Cannot halt at this moment, a config write operation is in progress and 30 seconds have passed." + exit -1 +fi + +sleep 1 + +/sbin/shutdown -p now + diff --git a/etc/rc.initial b/etc/rc.initial new file mode 100755 index 000000000..deb4d193f --- /dev/null +++ b/etc/rc.initial @@ -0,0 +1,184 @@ +#!/bin/sh + +# /etc/rc.initial +# part of pfSense by Scott Ullrich +# Copyright (C) 2004-2011 Scott Ullrich, All rights reserved. +# originally based on m0n0wall (http://neon1.net/m0n0wall) +# Copyright (C) 2003-2004 Manuel Kasper . +# All rights reserved. + +# make sure the user can't kill us by pressing Ctrl-C, +# ctrl-z, etc. +#trap : 2 +#trap : 3 +#trap : 4 + +# If recovery console shell option has been specified +if [ -f "/tmp/donotbootup" ]; then + /usr/bin/env prompt="%B[%n@%m]%b%/(%h)||RecoveryConsoleShell: " /bin/tcsh + rm "/tmp/donotbootup" + echo "Rebooting in 5 seconds... CTRL-C to abort..." + sleep 5 + /etc/rc.reboot + exit +fi + +if [ -f /etc/rc.local ]; then + RCLOCALPWD=`ps awux | grep rc.local | grep -v grep | awk '{ print $2 }'` + if [ "$RCLOCALPWD" = "" ]; then + echo ">>> Launching rc.local in background..." + sh /etc/rc.local & + sleep 1 + sh /etc/rc.local.running & + else + if [ -f /etc/rc.local.running ]; then + echo ">>> Launching rc.local.running in background..." + sh /etc/rc.local.running & + fi + fi +fi + +CONFIG="/cf/conf/config.xml" +WORD="https" + +# Set our operating platform +PLATFORM=`cat /etc/platform` + +if [ "$PLATFORM" = "jail" ]; then + exit +fi + +# endless loop +while : ; do + +if [ -f /tmp/ttybug ]; then + rm /tmp/ttybug + exit && exit && logout +fi + +/etc/rc.banner + +product=`grep product_name /etc/inc/globals.inc | cut -d'"' -f4` +hidebanner=`grep hidebanner /etc/inc/globals.inc | cut -d'"' -f4` + +# Check to see if SSH is running. +if pgrep -q -a -F /var/run/sshd.pid sshd >/dev/null 2>&1; then + sshd_option="14) Disable Secure Shell (sshd)"; +else + sshd_option="14) Enable Secure Shell (sshd)"; +fi + +for i in /var/db/pfi/capable_*; do + if [ -f $i -a ! -L /cf/conf ]; then + option98="98) Move configuration file to removable device" + break + fi +done + +if [ "$PLATFORM" = "cdrom" ]; then + option99="99) Install ${product} to a hard drive, etc." +fi + +# display a cheap menu +echo "" +echo " 0) Logout (SSH only) 8) Shell" +echo " 1) Assign Interfaces 9) pfTop" +echo " 2) Set interface(s) IP address 10) Filter Logs" +echo " 3) Reset webConfigurator password 11) Restart webConfigurator" +echo " 4) Reset to factory defaults 12) ${product} Developer Shell" +echo " 5) Reboot system 13) Upgrade from console" +echo " 6) Halt system ${sshd_option}" +echo " 7) Ping host 15) Restore recent configuration" +echo " 17) Restart PHP-FPM " +echo " ${option98} " + +if [ "${option99}" != "" ]; then + /bin/echo "${option99}" +fi + +echo +read -p "Enter an option: " opmode +echo + +# see what the user has chosen +case ${opmode} in +0) + exit && exit && logout + ;; +1) + /etc/rc.initial.setports + ;; +2) + /etc/rc.initial.setlanip + ;; +3) + /etc/rc.initial.password + ;; +4) + /etc/rc.initial.defaults + ;; +5) + /etc/rc.initial.reboot + ;; +6) + /etc/rc.initial.halt + ;; +7) + /etc/rc.initial.ping + ;; +8) + /bin/tcsh + ;; +9) + /usr/local/sbin/pftop + ;; +10) + /usr/sbin/tcpdump -s 256 -v -S -l -n -e -ttt -i pflog0 + ;; +11 | 111) + /etc/rc.restart_webgui + ;; +12) + /usr/local/sbin/pfSsh.php + ;; +13) + php -f /etc/rc.initial.firmware_update + ;; +14) + php -f /etc/rc.initial.toggle_sshd + ;; +15) + /etc/rc.restore_config_backup + ;; +16) + /etc/rc.banner + ;; +17) + /etc/rc.php-fpm_restart + ;; +98) + if [ ! -f /tmp/config_moved ]; then + /etc/rc.initial.store_config_to_removable_device + fi + ;; +99) + if [ -e /dev/ukbd0 ]; then + env TERM=cons25 /scripts/lua_installer + else + /scripts/lua_installer + fi + ;; +100) + if grep "$WORD" "$CONFIG"; then + links "https://localhost" + else + links "http://localhost" + fi + ;; +"") + kill $PPID ; exit + ;; +esac + +done + diff --git a/etc/rc.initial.defaults b/etc/rc.initial.defaults new file mode 100755 index 000000000..5e7442c1a --- /dev/null +++ b/etc/rc.initial.defaults @@ -0,0 +1,62 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("util.inc"); + require_once("config.lib.inc"); + require_once("functions.inc"); + + $fp = fopen('php://stdin', 'r'); + + echo << diff --git a/etc/rc.initial.firmware_update b/etc/rc.initial.firmware_update new file mode 100755 index 000000000..b8c1ed64f --- /dev/null +++ b/etc/rc.initial.firmware_update @@ -0,0 +1,193 @@ +#!/usr/local/bin/php -f + + "; + $url = chop(fgets($fp)); + if(!$url) { + fclose($fp); + die; + } + if($url == "auto") { + $url = $autoupdateurl; + } + $status = does_url_exist($url); + if($status) { + conf_mount_rw(); + mark_subsystem_dirty('firmware'); + unlink_if_exists("/root/firmware.tgz"); + echo "\nFetching file... "; + download_file_with_progress_bar($url, '/root/firmware.tgz'); + if(!file_exists("/root/firmware.tgz")) { + echo "Something went wrong during file transfer. Exiting.\n\n"; + fclose($fp); + clear_subsystem_dirty('firmware'); + die; + } + $status = does_url_exist("$url.sha256"); + if($status) { + echo "\nFetching sha256... "; + download_file_with_progress_bar($url . ".sha256", '/root/firmware.tgz.sha256'); + echo "\n"; + } else { + echo "\n\nWARNING.\n"; + echo "\nCould not locate a sha256 file. We cannot verify the download once completed.\n\n"; + sleep(15); + } + if(file_exists("/root/firmware.tgz.sha256")) { + $source_sha256 = trim(`cat /root/firmware.tgz.sha256 | awk '{ print \$4 }'`,"\r"); + $file_sha256 = trim(`sha256 /root/firmware.tgz | awk '{ print \$4 }'`,"\r"); + echo "URL sha256: $source_sha256\n"; + echo "Downloaded file sha256: $file_sha256\n"; + if($source_sha256 <> $file_sha256) { + echo "\n\nsha256 checksum does not match. Cancelling upgrade.\n\n"; + unlink_if_exists("/root/firmware.tgz.sha256"); + fclose($fp); + clear_subsystem_dirty('firmware'); + die -1; + } + echo "\nsha256 checksum matches.\n"; + unlink_if_exists("/root/firmware.tgz.sha256"); + } + if(strstr($url,"bdiff")) { + echo "Binary DIFF upgrade file detected...\n"; + $type = "bdiff"; + } elseif(strstr($url,"nanobsd")) { + echo "NanoBSD upgrade file detected...\n"; + $type = "nanobsd"; + } else { + $type = "normal"; + } + do_upgrade("/root/firmware.tgz", $type); + clear_subsystem_dirty('firmware'); + exit; + } + case "2": + echo "\nEnter the complete path to the .tgz or .img.gz update file: "; + $path = chop(fgets($fp)); + if(!$path) { + fclose($fp); + die; + } + if(stristr($path,"bdiff")) + $type = "bdiff"; + if(stristr($path,"nanobsd")) + $type = "nanobsd"; + if(file_exists($path)) { + mark_subsystem_dirty('firmware'); + do_upgrade($path, $type); + clear_subsystem_dirty('firmware'); + } else { + echo "\nCould not find file.\n\n"; + fclose($fp); + die -1; + } +} + +function do_upgrade($path, $type) { + global $g, $fp; + + $sigchk = verify_digital_signature($path); + if ($sigchk == 1) + $sig_warning = "The digital signature on this image is invalid."; + else if ($sigchk == 2) + $sig_warning = "This image is not digitally signed."; + else if (($sigchk == 3) || ($sigchk == 4)) + $sig_warning = "There has been an error verifying the signature on this image."; + if($sig_warning) { + $sig_warning = "\nWARNING! ACHTUNG! DANGER!\n\n{$sig_warning}\n\n" . + "This means that the image you uploaded is not an official/supported image and\n" . + "may lead to unexpected behavior or security compromises.\n\n" . + "Only install images that come from sources that you trust, and make sure\n". + "that the image has not been tampered with.\n\n". + "Do you want to install this image anyway at your own risk [n]?"; + echo $sig_warning; + $command = strtoupper(chop(fgets($fp))); + if(strtoupper($command) == "Y" or strtoupper($command) == "Y" or strtoupper($command) == "YES") { + echo "\nContinuing upgrade..."; + } else { + echo "\nUpgrade cancelled.\n\n"; + die; + } + } + mark_subsystem_dirty('firmwarelock'); + echo "\nOne moment please...\nInvoking firmware upgrade..."; + if($type == "bdiff") + mwexec_bg("/etc/rc.firmware delta_update $path"); + elseif($type == "nanobsd") + mwexec_bg("/etc/rc.firmware pfSenseNanoBSDupgrade $path"); + else + mwexec_bg("/etc/rc.firmware pfSenseupgrade $path"); + sleep(10); + while(is_subsystem_dirty('firmwarelock')) { + sleep(1); + echo "."; + } + sleep(10); + echo "Done. Rebooting...\n\n"; + clear_subsystem_dirty('firmwarelock'); +} + +exec("rm -f /root/*.sha256"); +fclose($fp); + +?> diff --git a/etc/rc.initial.halt b/etc/rc.initial.halt new file mode 100755 index 000000000..b26a49e0f --- /dev/null +++ b/etc/rc.initial.halt @@ -0,0 +1,61 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + + $fp = fopen('php://stdin', 'r'); + + echo << diff --git a/etc/rc.initial.password b/etc/rc.initial.password new file mode 100755 index 000000000..1de1a798b --- /dev/null +++ b/etc/rc.initial.password @@ -0,0 +1,86 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + + require_once("config.inc"); + require("auth.inc"); + require_once("functions.inc"); + require_once("shaper.inc"); + + $fp = fopen('php://stdin', 'r'); + + echo "\n" . gettext(' +The webConfigurator admin password and privileges will be reset to the default (which is "' . strtolower($g['product_name']) . '").') . "\n" . + gettext('Do you want to proceed [y|n]?'); + + if (strcasecmp(chop(fgets($fp)), "y") == 0) { + if (isset($config['system']['webgui']['authmode']) && + $config['system']['webgui']['authmode'] != "Local Database") { + echo "\n" . gettext(' +The User manager authentication server is set to "' . $config['system']['webgui']['authmode'] . '".') . "\n" . + gettext('Do you want to set it back to Local Database [y|n]?'); + if (strcasecmp(chop(fgets($fp)), "y") == 0) + $config['system']['webgui']['authmode'] = "Local Database"; + } + $admin_user =& getUserEntryByUID(0); + if (!$admin_user) { + echo "Failed to locate the admin user account! Attempting to restore access.\n"; + $admin_user = array(); + $admin_user['uid'] = 0; + if (!is_array($config['system']['user'])) + $config['system']['user'] = array(); + $config['system']['user'][] = $admin_user; + } + + $admin_user['name'] = "admin"; + $admin_user['scope'] = "system"; + $admin_user['priv'] = array("user-shell-access"); + + if (isset($admin_user['disabled'])) + unset($admin_user['disabled']); + + local_user_set_password($admin_user, strtolower($g['product_name'])); + local_user_set($admin_user); + write_config(gettext("password changed from console menu")); + + echo "\n" . gettext(' +The password for the webConfigurator has been reset and +the default username has been set to "admin".') . "\n" . + gettext(' +Remember to set the password to something else than +the default as soon as you have logged into the webConfigurator.') . "\n" . + gettext("Press ENTER to continue."); + + fgets($fp); + } +?> diff --git a/etc/rc.initial.ping b/etc/rc.initial.ping new file mode 100755 index 000000000..ff1048774 --- /dev/null +++ b/etc/rc.initial.ping @@ -0,0 +1,55 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + + $fp = fopen('php://stdin', 'r'); + + echo "\nEnter a host name or IP address: "; + + $pinghost = chop(fgets($fp)); + if (is_ipaddrv4($pinghost) || is_hostname($pinghost)) { + $command = "ping"; + } elseif (is_ipaddrv6($pinghost)) { + $command = "ping6"; + } + if ($command) { + echo "\n"; + passthru("/sbin/{$command} -c 3 -n " . escapeshellarg($pinghost)); + echo "\nPress ENTER to continue.\n"; + fgets($fp); + } + + fclose($fp); +?> diff --git a/etc/rc.initial.reboot b/etc/rc.initial.reboot new file mode 100755 index 000000000..f3143e0ba --- /dev/null +++ b/etc/rc.initial.reboot @@ -0,0 +1,61 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + require_once("filter.inc"); + require_once("captiveportal.inc"); + + $fp = fopen('php://stdin', 'r'); + + echo << diff --git a/etc/rc.initial.setlanip b/etc/rc.initial.setlanip new file mode 100755 index 000000000..8b3a82014 --- /dev/null +++ b/etc/rc.initial.setlanip @@ -0,0 +1,537 @@ +#!/usr/local/bin/php -q +. + 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. +*/ + + + +$options = getopt("hn", array("dry-run", "help")); + +if (isset($options["h"]) || isset($options["help"])) { + echo "usage: /etc/rc.initial.setlanip [option ...]\n"; + echo " -h, --help show this message\n"; + echo " -n, --dry-run do not make any configuration changes\n"; + exit(0); +} + +$dry_run = isset($options["n"]) || isset($options["dry-run"]); +if ($dry_run) { + echo "DRY RUN MODE IS ON\n"; +} + + + +/* parse the configuration and include all functions used below */ +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("rrd.inc"); + +function console_get_interface_from_ppp($realif) { + global $config; + + if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($config['ppps']['ppp'] as $pppid => $ppp) { + if ($realif == $ppp['if']) { + $ifaces = explode(",", $ppp['ports']); + return $ifaces[0]; + } + } + } + + return ""; +} + +function prompt_for_enable_dhcp_server($version = 4) { + global $config, $fp, $interface; + if($interface == "wan") { + if($config['interfaces']['lan']) + return "n"; + } + /* only allow DHCP server to be enabled when static IP is + configured on this interface */ + if ($version === 6) { + $is_ipaddr = is_ipaddrv6($config['interfaces'][$interface]['ipaddrv6']); + } else { + $is_ipaddr = is_ipaddrv4($config['interfaces'][$interface]['ipaddr']); + } + if ($is_ipaddr) { + $label_DHCP = ($version === 6) ? "DHCP6" : "DHCP"; + do { + $good = false; + $upperifname = strtoupper($interface); + echo "\n" . sprintf(gettext("Do you want to enable the %s server on %s? [y|n]"), + $label_DHCP, $upperifname) . " "; + $yn = strtolower(chop(fgets($fp))); + if ($yn[0] == "y" or $yn[0] == "n") + $good = true; + } while (!$good); + } + return $yn; +} + +function get_interface_config_description($iface) { + global $config; + $c = $config['interfaces'][$iface]; + if (!$c) { return null; } + $if = $c['if']; + $result = $if; + $result2 = array(); + $ipaddr = $c['ipaddr']; + $ipaddrv6 = $c['ipaddrv6']; + if (is_ipaddr($ipaddr)) { + $result2[] = "static"; + } else if ($ipaddr == "dhcp") { + $result2[] = "dhcp"; + } + if (is_ipaddr($ipaddrv6)) { + $result2[] = "staticv6"; + } else if ($ipaddrv6 == "dhcp6") { + $result2[] = "dhcp6"; + } + if (count($result2)) { + $result .= " - " . implode(", ", $result2); + } + return $result; +} + +$fp = fopen('php://stdin', 'r'); + +/* build an interface collection */ +$ifdescrs = get_configured_interface_with_descr(false, true); +$count = count($ifdescrs); + +/* grab interface that we will operate on, unless there is only one + interface */ +if ($count > 1) { + echo "Available interfaces:\n\n"; + $x=1; + foreach($ifdescrs as $iface => $ifdescr) { + $config_descr = get_interface_config_description($iface); + echo "{$x} - {$ifdescr} ({$config_descr})\n"; + $x++; + } + echo "\nEnter the number of the interface you wish to configure: "; + $intnum = chop(fgets($fp)); +} else { + $intnum = $count; +} + +if($intnum < 1) + exit; +if($intnum > $count) + exit; + +$index = 1; +foreach ($ifdescrs as $ifname => $ifdesc) { + if ($intnum == $index) { + $interface = $ifname; + break; + } else { + $index++; + } +} +if(!$interface) { + echo "Invalid interface!\n"; + exit; +} + +$ifaceassigned = ""; + +function next_unused_gateway_name($interface) { + global $g, $config; + $new_name = "GW_" . strtoupper($interface); + + if (!is_array($config['gateways']['gateway_item'])) { return $new_name; } + $count = 1; + do { + $existing = false; + foreach ($config['gateways']['gateway_item'] as $item) { + if ($item['name'] === $new_name) { + $existing = true; + break; + } + } + if ($existing) { + $count += 1; + $new_name = "GW_" . strtoupper($interface) . "_" . $count; + } + } while ($existing); + return $new_name; +} + +function add_gateway_to_config($interface, $gatewayip, $inet_type) { + global $g, $config, $dry_run; + if (!is_array($config['gateways']['gateway_item'])) { + $config['gateways']['gateway_item'] = array(); + } + $a_gateways = &$config['gateways']['gateway_item']; + if ($dry_run) { + print_r($a_gateways); + } + $new_name = ''; + $is_default = true; + foreach ($a_gateways as $item) { + if ($item['ipprotocol'] === $inet_type) { + if (isset($item['defaultgw'])) + $is_default = false; + if (($item['interface'] === $interface) && ($item['gateway'] === $gatewayip)) + $new_name = $item['name']; + } + } + if ($new_name == '') { + $new_name = next_unused_gateway_name($interface); + $item = array( + "interface" => $interface, + "gateway" => $gatewayip, + "name" => $new_name, + "weight" => 1, + "ipprotocol" => $inet_type, + "interval" => true, + "descr" => "Interface $interface Gateway", + "defaultgw" => $is_default + ); + if ($dry_run) { + print_r($item); + } + $a_gateways[] = $item; + } + + return $new_name; +} + +function console_configure_ip_address($version) { + global $g, $config, $interface, $restart_dhcpd, $ifaceassigned, $fp; + + $label_IPvX = ($version === 6) ? "IPv6" : "IPv4"; + $maxbits = ($version === 6) ? 127 : 31; + $label_DHCP = ($version === 6) ? "DHCP6" : "DHCP"; + + $upperifname = strtoupper($interface); + + if($interface == "wan") { + echo sprintf(gettext("Configure %s address %s interface via %s? [y|n]"), + $label_IPvX, $upperifname, $label_DHCP) . "\n> "; + $intdhcp = chop(fgets($fp)); + if(strtolower($intdhcp) == "y" || strtolower($intdhcp) == "yes") { + $ifppp = console_get_interface_from_ppp(get_real_interface("wan")); + if (!empty($ifppp)) + $ifaceassigned = $ifppp; + $intip = ($version === 6) ? "dhcp6" : "dhcp"; + $intbits = ""; + $isintdhcp = true; + $restart_dhcpd = true; + } + } + + if($isintdhcp == false or $interface <> "wan") { + while(true) { + do { + echo "\n" . sprintf(gettext("Enter the new %s %s address. Press for none:"), + $upperifname, $label_IPvX) . "\n> "; + $intip = chop(fgets($fp)); + $is_ipaddr = ($version === 6) ? is_ipaddrv6($intip) : is_ipaddrv4($intip); + if ($is_ipaddr && is_ipaddr_configured($intip, $interface, true)) { + $ip_conflict = true; + echo gettext("This IP address conflicts with another interface or a VIP") . "\n"; + } else + $ip_conflict = false; + } while (($ip_conflict === true) || !($is_ipaddr || $intip == '')); + if ($intip != '') { + echo "\n" . sprintf(gettext("Subnet masks are entered as bit counts (as in CIDR notation) in %s."), + $g['product_name']) . "\n"; + if ($version === 6) { + echo "e.g. ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00 = 120\n"; + echo " ffff:ffff:ffff:ffff:ffff:ffff:ffff:0 = 112\n"; + echo " ffff:ffff:ffff:ffff:ffff:ffff:0:0 = 96\n"; + echo " ffff:ffff:ffff:ffff:ffff:0:0:0 = 80\n"; + echo " ffff:ffff:ffff:ffff:0:0:0:0 = 64\n"; + } else { + echo "e.g. 255.255.255.0 = 24\n"; + echo " 255.255.0.0 = 16\n"; + echo " 255.0.0.0 = 8\n"; + } + do { + $upperifname = strtoupper($interface); + echo "\n" . sprintf(gettext("Enter the new %s %s subnet bit count:"), + $upperifname, $label_IPvX) . "\n> "; + $intbits = chop(fgets($fp)); + $intbits_ok = is_numeric($intbits) && (($intbits >= 1) || ($intbits <= $maxbits)); + $restart_dhcpd = true; + + if ($version === 4 && $intbits < $maxbits) { + if ($intip == gen_subnet($intip, $intbits)) { + echo gettext("You cannot set network address to an interface"); + continue 2; + $intbits_ok = false; + } else if ($intip == gen_subnet_max($intip, $intbits)) { + echo gettext("You cannot set broadcast address to an interface"); + continue 2; + $intbits_ok = false; + } + } + } while (!$intbits_ok); + + if ($version === 6) { + $subnet = gen_subnetv6($intip, $intbits); + } else { + $subnet = gen_subnet($intip, $intbits); + } + do { + echo "\n" . sprintf(gettext("For a WAN, enter the new %s %s upstream gateway address."), $upperifname, $label_IPvX) . "\n" . + gettext("For a LAN, press for none:") . "\n> "; + $gwip = chop(fgets($fp)); + $is_ipaddr = ($version === 6) ? is_ipaddrv6($gwip) : is_ipaddrv4($gwip); + $is_in_subnet = $is_ipaddr && ip_in_subnet($gwip, $subnet . "/" . $intbits); + if ($gwip != '') { + if (!$is_ipaddr) { + echo sprintf(gettext("not an %s IP address!"), $label_IPvX) . "\n"; + } else if (!$is_in_subnet) { + echo gettext("not in subnet!") . "\n"; + } + } + } while (!($gwip == '' || ($is_ipaddr && $is_in_subnet))); + + if ($gwip != '') { + $inet_type = ($version === 6) ? "inet6" : "inet"; + $gwname = add_gateway_to_config($interface, $gwip, $inet_type); + } + } + $ifppp = console_get_interface_from_ppp(get_real_interface($interface)); + if (!empty($ifppp)) + $ifaceassigned = $ifppp; + break; + } + } + + return array($intip, $intbits, $gwname); +} + +list($intip, $intbits, $gwname) = console_configure_ip_address(4); +list($intip6, $intbits6, $gwname6) = console_configure_ip_address(6); + +if (!empty($ifaceassigned)) + $config['interfaces'][$interface]['if'] = $ifaceassigned; +$config['interfaces'][$interface]['ipaddr'] = $intip; +$config['interfaces'][$interface]['subnet'] = $intbits; +$config['interfaces'][$interface]['gateway'] = $gwname; +$config['interfaces'][$interface]['ipaddrv6'] = $intip6; +$config['interfaces'][$interface]['subnetv6'] = $intbits6; +$config['interfaces'][$interface]['gatewayv6'] = $gwname6; +$config['interfaces'][$interface]['enable'] = true; + +function console_configure_dhcpd($version = 4) { + global $g, $config, $restart_dhcpd, $fp, $interface, $dry_run, $intip, $intbits, $intip6, $intbits6; + + $label_IPvX = ($version === 6) ? "IPv6" : "IPv4"; + $dhcpd = ($version === 6) ? "dhcpdv6" : "dhcpd"; + + if($g['services_dhcp_server_enable']) + $yn = prompt_for_enable_dhcp_server($version); + if ($yn == "y") { + $subnet_start = ($version === 6) ? gen_subnetv6($intip6, $intbits6) : gen_subnet($intip, $intbits); + $subnet_end = ($version === 6) ? gen_subnetv6_max($intip6, $intbits6) : gen_subnet_max($intip, $intbits); + do { + do { + echo sprintf(gettext("Enter the start address of the %s client address range:"), $label_IPvX) . " "; + $dhcpstartip = chop(fgets($fp)); + if ($dhcpstartip === "") { + fclose($fp); + exit(0); + } + $is_ipaddr = ($version === 6) ? is_ipaddrv6($dhcpstartip) : is_ipaddrv4($dhcpstartip); + $is_inrange = is_inrange($dhcpstartip, $subnet_start, $subnet_end); + if (!$is_inrange) + echo gettext("This IP address must be in the interface's subnet") . "\n"; + } while (!$is_ipaddr || !$is_inrange); + + do { + echo sprintf(gettext("Enter the end address of the %s client address range:"), $label_IPvX) . " "; + $dhcpendip = chop(fgets($fp)); + if ($dhcpendip === "") { + fclose($fp); + exit(0); + } + $is_ipaddr = ($version === 6) ? is_ipaddrv6($dhcpendip) : is_ipaddrv4($dhcpendip); + $is_inrange = is_inrange($dhcpendip, $subnet_start, $subnet_end); + if (!$is_inrange) + echo gettext("This IP address must be in the interface's subnet") . "\n"; + $not_inorder = ($version === 6) ? (inet_pton($dhcpendip) < inet_pton($dhcpstartip)) : ip_less_than($dhcpendip, $dhcpstartip); + if ($not_inorder) { + echo gettext("The end address of the DHCP range must be >= the start address") . "\n"; + } + } while (!$is_ipaddr || !$is_inrange); + } while ($not_inorder); + $restart_dhcpd = true; + $config[$dhcpd][$interface]['enable'] = true; + $config[$dhcpd][$interface]['range']['from'] = $dhcpstartip; + $config[$dhcpd][$interface]['range']['to'] = $dhcpendip; + } else { + /* TODO - this line is causing a "Fatal error: Cannot unset + string offsets in /etc/rc.initial.setlanip" on below line + number */ + if($config[$dhcpd][$interface]) + unset($config[$dhcpd][$interface]['enable']); + echo "Disabling DHCPD..."; + if (!$dry_run) { + services_dhcpd_configure(); + } + echo "Done!\n"; + } +} + +console_configure_dhcpd(4); +console_configure_dhcpd(6); + +//***************************************************************************** + +if ($config['system']['webgui']['protocol'] == "https") { + + do { + $good = false; + echo "\n" . gettext("Do you want to revert to HTTP as the webConfigurator protocol? (y/n)") . " "; + $yn = strtolower(chop(fgets($fp))); + if ($yn[0] == "y" or $yn[0] == "n") + $good = true; + } while (!$good); + + if ($yn == "y") { + $config['system']['webgui']['protocol'] = "http"; + $restart_webgui = true; + } +} + +if (isset($config['system']['webgui']['noantilockout'])) { + echo "\n" . sprintf(gettext("Note: the anti-lockout rule on %s has been re-enabled."), $interface) . "\n"; + unset($config['system']['webgui']['noantilockout']); +} + +if($config['interfaces']['lan']) { + if($config['dhcpd']) + if($config['dhcpd']['wan']) + unset($config['dhcpd']['wan']); + if($config['dhcpdv6']) + if($config['dhcpdv6']['wan']) + unset($config['dhcpdv6']['wan']); +} + +if(!$config['interfaces']['lan']) { + unset($config['interfaces']['lan']); + if($config['dhcpd']['lan']) + unset($config['dhcpd']['lan']); + if($config['dhcpdv6']['lan']) + unset($config['dhcpdv6']['lan']); + unset($config['shaper']); + unset($config['ezshaper']); + unset($config['nat']); + if (!$dry_run) { + system("rm /var/dhcpd/var/db/* >/dev/null 2>/dev/null"); + services_dhcpd_configure(); + } +} + +$upperifname = strtoupper($interface); +if (!$dry_run) { + echo "\nPlease wait while the changes are saved to {$upperifname}..."; + write_config(sprintf(gettext("%s IP configuration from console menu"), $interface)); + interface_reconfigure(strtolower($upperifname)); + echo " Reloading filter..."; + filter_configure_sync(); + echo "\n"; + if($restart_dhcpd) { + echo " DHCPD..."; + services_dhcpd_configure(); + } + if($restart_webgui) { + echo " restarting webConfigurator... "; + mwexec("/etc/rc.restart_webgui"); + } +} + +if ($intip != '') { + if (is_ipaddr($intip)) { + echo "\n\n" . sprintf(gettext("The IPv4 %s address has been set to %s"), + $upperifname, "{$intip}/{$intbits}") . "\n"; + } else { + echo "\n\n" . sprintf(gettext("The IPv4 %s address has been set to %s"), + $upperifname, $intip) . "\n"; + } +} +if ($intip6 != '') { + if (is_ipaddr($intip6)) { + echo "\n\n" . sprintf(gettext("The IPv6 %s address has been set to %s"), + $upperifname, "${intip6}/${intbits6}") . "\n"; + } else { + echo "\n\n" . sprintf(gettext("The IPv6 %s address has been set to %s"), + $upperifname, $intip6) . "\n"; + } +} + +if ($intip != '' || $intip6 != '') { + if (count($ifdescrs) == "1" or $interface = "lan") { + if ($debug) { + echo "ifdescrs count is " . count($ifdescrs) . "\n"; + echo "interface is {$interface} \n"; + } + echo gettext('You can now access the webConfigurator by opening the following URL in your web browser:') . "\n"; + if(!empty($config['system']['webgui']['port'])) { + $webuiport = $config['system']['webgui']['port']; + if ($intip != '') { + echo " {$config['system']['webgui']['protocol']}://{$intip}:{$webuiport}/\n"; + } + if ($intip6 != '') { + if (is_ipaddr($intip6)) { + echo " {$config['system']['webgui']['protocol']}://[{$intip6}]:{$webuiport}/\n"; + } else { + echo " {$config['system']['webgui']['protocol']}://{$intip6}:{$webuiport}/\n"; + } + } + } else { + if ($intip != '') { + echo " {$config['system']['webgui']['protocol']}://{$intip}/\n"; + } + if ($intip6 != '') { + if (is_ipaddr($intip6)) { + echo " {$config['system']['webgui']['protocol']}://[{$intip6}]/\n"; + } else { + echo " {$config['system']['webgui']['protocol']}://{$intip6}/\n"; + } + } + } + } +} + +echo "\n" . gettext('Press to continue.'); + +fgets($fp); +fclose($fp); + +?> diff --git a/etc/rc.initial.setports b/etc/rc.initial.setports new file mode 100755 index 000000000..aca541934 --- /dev/null +++ b/etc/rc.initial.setports @@ -0,0 +1,51 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("config.console.inc"); + require_once("functions.inc"); + require_once("filter.inc"); + require_once("shaper.inc"); + require_once("ipsec.inc"); + require_once("vpn.inc"); + require_once("captiveportal.inc"); + require_once("rrd.inc"); + + set_networking_interfaces_ports(); + + reload_interfaces_sync(); + + /* reload graphing functions */ + enable_rrd_graphing(); + +?> \ No newline at end of file diff --git a/etc/rc.initial.store_config_to_removable_device b/etc/rc.initial.store_config_to_removable_device new file mode 100755 index 000000000..19fa70e1e --- /dev/null +++ b/etc/rc.initial.store_config_to_removable_device @@ -0,0 +1,90 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + require_once("util.inc"); + + $fp = fopen('php://stdin', 'r'); + + do { + $dirs = array(); + $dirs = return_dir_as_array("/var/db/pfi/"); + if(!is_array($dirs)) { + echo "\nNo capable storage devices detected.\n"; + exit; + } + echo "\nDevices capable of config.xml storage:\n"; + foreach($dirs as $dir) { + preg_match_all("/capable\_(.*)/",$dir,$match_array); + echo $match_array[1][0] . " "; + } + echo "\n\n"; + echo "Enter the device that you wish the"; + echo "\n"; + echo "{$g['product_name']} configuration file to reside on: "; + $move_config_to_device = chop(fgets($fp)); + if ($move_config_to_device == "") { + exit(0); + } + } while (!$move_config_to_device); + + mwexec("/bin/mkdir -p /tmp/mnt/cf"); + + $status = mwexec("/sbin/mount -w -t msdosfs /dev/{$move_config_to_device} /tmp/mnt/cf"); + if(!$status) { + echo "Error while mounting {$move_config_to_device}.\n"; + exit; + } + + echo "\n\nProcessing: "; + $lockkey = lock('config'); + echo "moving..."; + mwexec("mkdir -p /tmp/mnt/cf/conf/"); + mwexec("/bin/mv /cf/conf/config.xml /tmp/mnt/cf/conf/"); + echo "removing old..."; + echo " nullfs... "; + system("/sbin/umount /cf/conf"); + system("/sbin/umount /conf"); + mwexec("/bin/rm -rf /conf/*.*"); + /* use nullfs to mount */ + system("/sbin/mount_nullfs /tmp/mnt/cf/conf /conf"); + system("/sbin/mount_nullfs /tmp/mnt/cf /cf"); + echo "linking..."; + mwexec("/bin/rm -rf /var/db/pfi"); + unlock($lockkey); + echo "done.\n"; + echo "\nYour configuration has been moved to {$move_config_to_device}\n"; + touch("/tmp/config_moved"); + fclose($fp); +?> diff --git a/etc/rc.initial.toggle_sshd b/etc/rc.initial.toggle_sshd new file mode 100755 index 000000000..50dd26153 --- /dev/null +++ b/etc/rc.initial.toggle_sshd @@ -0,0 +1,74 @@ +#! /usr/local/bin/php -f +. + 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. +*/ + +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); + +conf_mount_rw(); + +$fp = fopen('php://stdin', 'r'); + +if (isset($config['system']['enablesshd'])) { + echo "SSHD is currently enabled. Would you like to disable? [y/n]? "; + $yn = chop(fgets($fp)); + if ($yn[0] == "y") { + unset($config['system']['enablesshd']); + echo "\nWriting configuration..."; + write_config(); + echo " done.\n"; + echo "\nDisabling SSHD..."; + send_event("service reload sshd"); + echo "\nReloading firewall rules."; + filter_configure(); + echo " done.\n"; + exec("ps awux | grep '/usr/sbin/sshd' | grep -v grep | awk '{print $2}' | xargs kill"); + } + +} else { + echo "SSHD is currently disabled. Would you like to enable? [y/n]? "; + $yn = chop(fgets($fp)); + if ($yn[0] == "y") { + $config['system']['enablesshd'] = true; + echo "\nWriting configuration..."; + write_config(); + echo " done.\n"; + echo "\nEnabling SSHD..."; + send_event("service reload sshd"); + echo "\nReloading firewall rules."; + filter_configure(); + echo " done.\n\n"; + } +} + +fclose($fp); + +conf_mount_ro(); diff --git a/etc/rc.interfaces_carp_configure b/etc/rc.interfaces_carp_configure new file mode 100755 index 000000000..fb1f1131a --- /dev/null +++ b/etc/rc.interfaces_carp_configure @@ -0,0 +1,39 @@ +#!/usr/local/bin/php -f + \ No newline at end of file diff --git a/etc/rc.interfaces_lan_configure b/etc/rc.interfaces_lan_configure new file mode 100755 index 000000000..eafe74d44 --- /dev/null +++ b/etc/rc.interfaces_lan_configure @@ -0,0 +1,39 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.interfaces_opt_configure b/etc/rc.interfaces_opt_configure new file mode 100755 index 000000000..57da3419e --- /dev/null +++ b/etc/rc.interfaces_opt_configure @@ -0,0 +1,41 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.interfaces_wan_configure b/etc/rc.interfaces_wan_configure new file mode 100755 index 000000000..fbdc5e437 --- /dev/null +++ b/etc/rc.interfaces_wan_configure @@ -0,0 +1,48 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.kill_states b/etc/rc.kill_states new file mode 100755 index 000000000..5db889253 --- /dev/null +++ b/etc/rc.kill_states @@ -0,0 +1,90 @@ +#!/usr/local/bin/php -f + +{$local_ip}:[0-9]+ +\->'"); + + $cleared_states = array(); + foreach(explode("\n", $nat_states) as $nat_state) { + if (preg_match_all('/([\d\.]+):[\d]+[\s->]+/i', $nat_state, $matches, PREG_SET_ORDER) != 3) + continue; + + $src = $matches[0][1]; + $dst = $matches[2][1]; + + if (empty($src) || empty($dst) || in_array("{$src},{$dst}", $cleared_states)) + continue; + + $cleared_states[] = "{$src},{$dst}"; + mwexec("/sbin/pfctl -k {$src} -k {$dst}", true); + } + + mwexec("/sbin/pfctl -k 0.0.0.0/0 -k {$local_ip}/{$subnet_bits}", true); + mwexec("/sbin/pfctl -k {$local_ip}/{$subnet_bits}", true); + mwexec("/sbin/pfctl -K {$local_ip}/{$subnet_bits}", true); + } + log_error("rc.kill_states: Removing states for interface {$interface}"); + mwexec("/sbin/pfctl -i {$interface} -Fs", true); +} diff --git a/etc/rc.linkup b/etc/rc.linkup new file mode 100755 index 000000000..6f7d1589a --- /dev/null +++ b/etc/rc.linkup @@ -0,0 +1,113 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("globals.inc"); +require_once("config.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("interfaces.inc"); + +function handle_argument_group($iface, $argument2) { + global $config; + + if (!is_array($config['interfaces'][$iface])) + return; + + $ipaddr = $config['interfaces'][$iface]['ipaddr']; + $ip6addr = $config['interfaces'][$iface]['ipaddrv6']; + $staticv4 = false; + if (empty($ipaddr)) + $staticv4 = true; + else + $staticv4 = is_ipaddrv4($ipaddr); + $staticv6 = false; + if (empty($ip6addr)) + $staticv6 = true; + else + $staticv6 = is_ipaddrv6($ip6addr); + if ($staticv4 === true && $staticv6 === true) { + $friendly = convert_friendly_interface_to_friendly_descr($iface); + log_error("Hotplug event detected for {$friendly}({$iface}) but ignoring since interface is configured with static IP ({$ipaddr} {$ip6addr})"); + interfaces_staticarp_configure($iface); + $iface = get_real_interface($iface); + interfaces_bring_up($iface); + /* NOTE: Do not generate event for OpenVPN since the daemon does that for us. */ + if (($argument2 == "start" || $argument2 == "up") && substr($iface, 0, 4) != "ovpn") + send_event("interface newip {$iface}"); + } else { + switch ($argument2) { + case "stop": + case "down": + log_error("DEVD Ethernet detached event for {$iface}"); + interface_bring_down($iface); + break; + case "start": + case "up": + log_error("DEVD Ethernet attached event for {$iface}"); + log_error("HOTPLUG: Configuring interface {$iface}"); + require_once("vpn.inc"); + require_once("captiveportal.inc"); + // Do not try to readd to bridge otherwise em(4) has problems + interface_configure($iface, true, true); + break; + } + } +} + +global $g; +if (!file_exists("{$g['varrun_path']}/booting") && empty($g['booting'])) { +if (isset($_GET)) { + if (!empty($_GET['interface'])) + handle_argument_group($_GET['interface'], $_GET['action']); +} else { + if ($argc < 3) { + log_error("HOTPLUG event: The number of required parameters not passed!"); + exit; + } + $action = $argv[1]; + switch($action) { + case "start": + case "stop": + break; + default: + log_error("HOTPLUG event: The action parameter passed is wrong($action) only start/stop/up/down are allowed!"); + exit; + /* NOTREACHED */ + break; + } + $interface = convert_real_interface_to_friendly_interface_name($argv[2]); + if (!empty($interface)) + handle_argument_group($interface, $action); +} +} + +?> diff --git a/etc/rc.nanobsd_switch_boot_slice b/etc/rc.nanobsd_switch_boot_slice new file mode 100755 index 000000000..ccbed9ce7 --- /dev/null +++ b/etc/rc.nanobsd_switch_boot_slice @@ -0,0 +1,27 @@ +#!/usr/local/bin/php -q + \ No newline at end of file diff --git a/etc/rc.newipsecdns b/etc/rc.newipsecdns new file mode 100755 index 000000000..854c8d702 --- /dev/null +++ b/etc/rc.newipsecdns @@ -0,0 +1,61 @@ +#!/usr/local/bin/php -f +. + Copyright (C) 2009 Seth Mos . + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("util.inc"); +require_once("config.inc"); +require_once("gwlb.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); + +/* make sure to wait until the boot scripts have finished */ +if (file_exists("{$g['varrun_path']}/booting")) + return; + +if (isset($config['ipsec']['enable'])) { + sleep(15); + log_error("IPSEC: One or more IPsec tunnel endpoints has changed its IP. Refreshing."); +} else + return; + +$ipseclck = lock('ipsecdns', LOCK_EX); + +vpn_ipsec_configure(); + +if (isset($config['ipsec']['failoverforcereload'])) + vpn_ipsec_force_reload(); + +unlock($ipseclck); +?> diff --git a/etc/rc.newroutedns b/etc/rc.newroutedns new file mode 100755 index 000000000..9e5139eff --- /dev/null +++ b/etc/rc.newroutedns @@ -0,0 +1,56 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("util.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("system.inc"); + +/* make sure to wait until the boot scripts have finished */ +if (file_exists("{$g['varrun_path']}/booting")) + return; + +$staticroutes = get_staticroutes(); + +if (count($staticroutes)) + log_error("Static Routes: One or more aliases used for routing has changed its IP. Refreshing."); +else + return; + +$routelck = lock('routedns', LOCK_EX); + +/* We will walk the list of hostnames found in static routes + * configuration. Since we are already triggered by filterdns + * that a hostname has changed we can proceed to compare the + * new IP address with the old address from the DNS cache. + */ +system_staticroutes_configure(); + +unlock($routelck); +?> diff --git a/etc/rc.newwanip b/etc/rc.newwanip new file mode 100755 index 000000000..46c41fe70 --- /dev/null +++ b/etc/rc.newwanip @@ -0,0 +1,225 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("globals.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); +require_once("openvpn.inc"); +require_once("IPv6.inc"); +require_once("rrd.inc"); + +// Do not process while booting +if($g['booting']) + return; + +function restart_packages() { + global $oldip, $curwanip, $g; + + /* restart packages */ + system_ntp_configure(false); + mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh", true); + log_error("{$g['product_name']} package system has detected an ip change $oldip -> $curwanip ... Restarting packages."); + send_event("service reload packages"); +} + +/* Interface IP address has changed */ +if (isset($_GET['interface'])) + $argument = $_GET['interface']; +else + $argument = str_replace("\n", "", $argv[1]); + +log_error("rc.newwanip: Informational is starting {$argument}."); + +if (empty($argument)) { + $interface = "wan"; + $interface_real = get_real_interface(); +} else { + $interface = convert_real_interface_to_friendly_interface_name($argument); + $interface_real = $argument; +} + +$interface_descr = convert_friendly_interface_to_friendly_descr($interface); + +/* If the interface is configured and not enabled, bail. We do not need to change settings for disabled interfaces. #3313 */ +if (is_array($config['interfaces'][$interface]) && !isset($config['interfaces'][$interface]['enable'])) { + log_error("Interface is disabled, nothing to do."); + return; +} + +if (empty($argument)) + $curwanip = get_interface_ip(); +else { + $curwanip = find_interface_ip($interface_real, true); + if($curwanip == "") + $curwanip = get_interface_ip($interface); +} + +log_error("rc.newwanip: on (IP address: {$curwanip}) (interface: {$interface_descr}[{$interface}]) (real interface: {$interface_real})."); + +/* + * NOTE: Take care of openvpn, no-ip or similar interfaces if you generate the event to reconfigure an interface. + * i.e. OpenVPN might be in tap mode and not have an ip. + */ +if ($curwanip == "0.0.0.0" || !is_ipaddr($curwanip)) { + if (substr($interface_real, 0, 4) != "ovpn") { + if (!empty($config['interfaces'][$interface]['ipaddr'])) { + log_error("rc.newwanip: Failed to update {$interface} IP, restarting..."); + send_event("interface reconfigure {$interface}"); + return; + } + } +} + +/* XXX: This really possible? */ +if (empty($interface)) { + filter_configure(); + restart_packages(); + return; +} + +$oldip = "0.0.0.0"; +if (file_exists("{$g['vardb_path']}/{$interface}_cacheip")) + $oldip = file_get_contents("{$g['vardb_path']}/{$interface}_cacheip"); + +/* regenerate resolv.conf if DNS overrides are allowed */ +system_resolvconf_generate(true); + +/* write current WAN IP to file */ +if (is_ipaddr($curwanip)) + @file_put_contents("{$g['vardb_path']}/{$interface}_ip", $curwanip); + +link_interface_to_vips($interface, "update"); + +unset($gre); +$gre = link_interface_to_gre($interface); +if (!empty($gre)) + array_walk($gre, 'interface_gre_configure'); +unset($gif); +$gif = link_interface_to_gif($interface); +if (!empty($gif)) + array_walk($gif, 'interface_gif_configure'); + +$grouptmp = link_interface_to_group($interface); +if (!empty($grouptmp)) + array_walk($grouptmp, 'interface_group_add_member'); + +unset($bridgetmp); +$bridgetmp = link_interface_to_bridge($interface); +if (!empty($bridgetmp)) + interface_bridge_add_member($bridgetmp, $interface_real); + +/* make new hosts file */ +system_hosts_generate(); + +/* check tunneled IPv6 interface tracking */ +switch($config['interfaces'][$interface]['ipaddrv6']) { + case "6to4": + interface_6to4_configure($interface, $config['interfaces'][$interface]); + break; + case "6rd": + interface_6rd_configure($interface, $config['interfaces'][$interface]); + break; + case "dhcp6": + if (isset($config['interfaces'][$interface]['dhcp6usev4iface'])) + interface_dhcpv6_configure($interface, $config['interfaces'][$interface]); + break; +} + +/* Check Gif tunnels */ +if(is_array($config['gifs']['gif'])){ + foreach($config['gifs']['gif'] as $gif) { + if($gif['if'] == $interface) { + foreach($config['interfaces'] as $ifname => $ifparent) { + // echo "interface $ifparent, ifname $ifname, gif {$gif['gifif']}\n"; + if(($ifparent['if'] == $gif['gifif']) && (isset($ifparent['enable']))) { + // echo "Running routing configure for $ifname\n"; + $gif['gifif'] = interface_gif_configure($gif); + $confif = convert_real_interface_to_friendly_interface_name($gif['gifif']); + if ($confif <> "") + interface_configure($confif); + system_routing_configure($ifname); + } + } + } + } +} + +/* + * We need to force sync VPNs on such even when the IP is the same for dynamic interfaces. + * Even with the same IP the VPN software is unhappy with the IP disappearing, and we + * could be failing back in which case we need to switch IPs back anyhow. + */ +if (!is_ipaddr($oldip) || $curwanip != $oldip || !is_ipaddrv4($config['interfaces'][$interface]['ipaddr'])) { + /* reconfigure static routes (kernel may have deleted them) */ + system_routing_configure($interface); + + /* reconfigure our gateway monitor */ + setup_gateways_monitor(); + + if (is_ipaddr($curwanip)) + @file_put_contents("{$g['vardb_path']}/{$interface}_cacheip", $curwanip); + + /* perform RFC 2136 DNS update */ + services_dnsupdate_process($interface); + + /* signal dyndns update */ + services_dyndns_configure($interface); + + /* reconfigure IPsec tunnels */ + vpn_ipsec_force_reload($interface); + + /* start OpenVPN server & clients */ + if (substr($interface_real, 0, 4) != "ovpn") + openvpn_resync_all($interface); + + /* reload graphing functions */ + enable_rrd_graphing(); + + /* reload igmpproxy */ + services_igmpproxy_configure(); + + /* restart snmp */ + services_snmpd_configure(); + + restart_packages(); +} + +/* signal filter reload */ +filter_configure(); + +?> diff --git a/etc/rc.newwanipv6 b/etc/rc.newwanipv6 new file mode 100755 index 000000000..6fc1cc8ac --- /dev/null +++ b/etc/rc.newwanipv6 @@ -0,0 +1,186 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("globals.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); +require_once("openvpn.inc"); +require_once("IPv6.inc"); +require_once("services.inc"); +require_once("rrd.inc"); + +function restart_packages() { + global $oldipv6, $curwanipv6, $g; + + /* restart packages */ + system_ntp_configure(false); + mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh", true); + log_error("{$g['product_name']} package system has detected an ip change $oldipv6 -> $curwanipv6 ... Restarting packages."); + send_event("service reload packages"); +} + +/* Interface IP address has changed */ +if (isset($_GET)) + $argument = $_GET['interface']; +else + $argument = trim($argv[1], " \n\t"); + +log_error("rc.newwanipv6: Informational is starting {$argument}."); + +if (empty($argument)) { + $interface = "wan"; + $interface_real = get_real_interface($interface, "inet6"); + $curwanipv6 = get_interface_ipv6($interface, true); +} else { + $interface_real = $argument; + $interface = convert_real_interface_to_friendly_interface_name($interface_real); + $curwanipv6 = get_interface_ipv6($interface, true); +} + +$interface_descr = convert_friendly_interface_to_friendly_descr($interface); + +if (empty($interface)) { + filter_configure(); + // restart_packages(); + return; +} + +//Do not process while booting +if ($g['booting'] && $config['interfaces'][$interface]['ipaddrv6'] != "dhcp6") + return; + +/* + * NOTE: Take care of openvpn and similar if you generate the event to reconfigure an interface. + * i.e. OpenVPN might be in tap mode and not have an ip. + */ +if ((empty($curwanipv6) || !is_ipaddrv6($curwanipv6)) && substr($interface_real, 0, 4) != "ovpn") { + log_error("rc.newwanipv6: Failed to update {$interface_descr}[{$interface}] IPv6, restarting..."); + // send_event("interface reconfigure {$interface}"); + return; +} + +if (isset($_GET)) + $new_domain_name_servers = $_GET['dmips']; +else + $new_domain_name_servers = getenv("new_domain_name_servers"); +if (!empty($new_domain_name_servers)) { + $name_servers = explode(" ", $new_domain_name_servers); + $valid_ns = array(); + foreach($name_servers as $ns) { + if (is_ipaddrv6(trim($ns))) + $valid_ns[] = trim($ns); + } + + if (count($valid_ns > 0)) + file_put_contents("{$g['varetc_path']}/nameserver_v6{$interface}", implode("\n", $valid_ns)); +} +if (isset($_GET)) + $new_domain_name = $_GET['dmnames']; +else + $new_domain_name = getenv("new_domain_name"); +if (!empty($new_domain_name)) + file_put_contents("{$g['varetc_path']}/searchdomain_v6{$interface}", $new_domain_name); + +/* write current WAN IPv6 to file */ +if (is_ipaddrv6($curwanipv6)) + @file_put_contents("{$g['vardb_path']}/{$interface}_ipv6", $curwanipv6); + +log_error("rc.newwanipv6: on (IP address: {$curwanipv6}) (interface: {$interface}) (real interface: {$interface_real})."); + +$oldipv6 = ""; +if (file_exists("{$g['vardb_path']}/{$interface}_cacheipv6")) + $oldipv6 = file_get_contents("{$g['vardb_path']}/{$interface}_cacheipv6"); + +$grouptmp = link_interface_to_group($interface); +if (!empty($grouptmp)) + array_walk($grouptmp, 'interface_group_add_member'); + +link_interface_to_track6($interface, "update"); + +/* regenerate resolv.conf if DNS overrides are allowed */ +system_resolvconf_generate(true); + +/* reconfigure static routes (kernel may have deleted them) */ +system_routing_configure($interface); + +/* reconfigure our gateway monitor */ +setup_gateways_monitor(); + +/* signal filter reload */ +filter_configure(); + +if (is_ipaddrv6($oldipv6)) { + if ($curwanipv6 == $oldipv6) { + // Still need to sync VPNs on PPPoE and such, as even with the same IP the VPN software is unhappy with the IP disappearing. + if (in_array($config['interfaces'][$interface]['ipaddrv6'], array('pppoe', 'pptp', 'ppp'))) { + /* reconfigure IPsec tunnels */ + vpn_ipsec_force_reload($interface); + + /* start OpenVPN server & clients */ + if (substr($interface_real, 0, 4) != "ovpn") + openvpn_resync_all($interface); + } + return; + } else if (does_interface_exist($interface_real)) + mwexec("/sbin/ifconfig {$interface_real} inet6 {$oldipv6} delete"); + + file_put_contents("{$g['vardb_path']}/{$interface}_cacheipv6", $curwanipv6); +} + +/* perform RFC 2136 DNS update */ +services_dnsupdate_process($interface); + +/* signal dyndns update */ +services_dyndns_configure($interface); + +/* reconfigure IPsec tunnels */ +vpn_ipsec_force_reload($interface); + +/* start OpenVPN server & clients */ +if (substr($interface_real, 0, 4) != "ovpn") + openvpn_resync_all($interface); + +/* reload graphing functions */ +enable_rrd_graphing(); + +/* reload igmpproxy */ +services_igmpproxy_configure(); + +restart_packages(); + +?> diff --git a/etc/rc.notify_message b/etc/rc.notify_message new file mode 100755 index 000000000..5075e8bd2 --- /dev/null +++ b/etc/rc.notify_message @@ -0,0 +1,64 @@ +#!/usr/local/bin/php + + 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. +*/ + +require_once("config.inc"); +require_once("functions.inc"); +require_once("notices.inc"); + +$arguments = getopt("egm:"); + +$send_email = false; +$send_growl = false; +$message = ""; + +foreach($arguments as $item => $arg) { + switch($item) { + case "e": + $send_email = true; + break; + case "g": + $send_growl = true; + break; + case "m": + $message = $arg; + break; + } +} + +if($message) { + if($send_email) { + notify_via_smtp($message); + } + if($send_growl) { + notify_via_growl($message); + } +} + +?> diff --git a/etc/rc.ntpdate b/etc/rc.ntpdate new file mode 100755 index 000000000..4d6457774 --- /dev/null +++ b/etc/rc.ntpdate @@ -0,0 +1,39 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + require_once("filter.inc"); + require_once("shaper.inc"); + + system_ntp_configure(); +?> diff --git a/etc/rc.openvpn b/etc/rc.openvpn new file mode 100755 index 000000000..3148e4f22 --- /dev/null +++ b/etc/rc.openvpn @@ -0,0 +1,128 @@ +#!/usr/local/bin/php -f +. + Copyright (C) 2009 Seth Mos . + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("util.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("gwlb.inc"); +require_once("openvpn.inc"); + +function openvpn_resync_if_needed ($mode, $ovpn_settings, $interface) { + global $g, $config; + + $resync_needed = true; + if (isset($ovpn_settings['disable'])) { + $resync_needed = false; + } else { + if (!empty($interface)) { + $mode_id = $mode . $ovpn_settings['vpnid']; + $fpath = "{$g['varetc_path']}/openvpn/{$mode_id}.interface"; + if (file_exists($fpath)) { + $current_device = file_get_contents($fpath); + $current_device = trim($current_device, " \t\n"); + $new_device = get_failover_interface($ovpn_settings['interface']); + if (isset($config['interfaces'][$interface])) { + $this_device = $config['interfaces'][$interface]['if']; + if (($current_device == $new_device) && ($current_device != $this_device)) + $resync_needed = false; + } + } + } + } + if ($resync_needed == true) { + log_error("OpenVPN: Resync " . $mode_id . " " . $ovpn_settings['description']); + openvpn_resync($mode, $ovpn_settings); + } +} + +/* make sure to wait until the boot scripts have finished */ +if (file_exists("{$g['varrun_path']}/booting")) + return; + +/* Input argument is a comma-separated list of gateway names, blank or "all". */ +if (isset($_GET)) + $argument = $_GET['interface']; +else + $argument = trim($argv[1], " \n"); + +if(is_array($config['openvpn']['openvpn-server']) || is_array($config['openvpn']['openvpn-client'])) { + if (empty($argument) || $argument == "all") { + $argument = "all"; + $log_text = "all"; + } else { + $log_text = "endpoints that may use " . $argument; + } + log_error("OpenVPN: One or more OpenVPN tunnel endpoints may have changed its IP. Reloading " . $log_text . "."); +} else + return; + +$openvpnlck = try_lock('openvpn', 10); +if (!$openvpnlck) { + log_error(gettext("Could not obtain openvpn lock for executing rc.openvpn for more than 10 seconds continuing...")); + unlock_force('openvpn'); + $openvpnlck = lock('openvpn', LOCK_EX); +} + +$arg_array = explode(",",$argument); +foreach ($arg_array as $arg_element) { + $gwgroups = array(); + if ($arg_element == "all") + $interface = ""; + else { + // e.g. $arg_element = "WANGW", $interface = "wan" + $interface = lookup_gateway_interface_by_name($arg_element); + if (empty($interface)) + $interface = $arg_element; + else + // e.g. $arg_element = "WANGW", $gwgroups = array of gateway groups that use "wan" + $gwgroups = gateway_is_gwgroup_member($arg_element); + } + + if(is_array($config['openvpn']['openvpn-server'])) { + foreach($config['openvpn']['openvpn-server'] as &$server) { + if ($server['interface'] == $interface || empty($interface) || (!empty($gwgroups) && in_array($server['interface'], $gwgroups))) + openvpn_resync_if_needed('server', $server, $interface); + } + } + + if (is_array($config['openvpn']['openvpn-client'])) { + foreach($config['openvpn']['openvpn-client'] as &$client) { + if ($client['interface'] == $interface || empty($interface) || (!empty($gwgroups) && in_array($client['interface'], $gwgroups))) + openvpn_resync_if_needed('client', $client, $interface); + } + } +} + +unlock($openvpnlck); +?> diff --git a/etc/rc.packages b/etc/rc.packages new file mode 100755 index 000000000..c56cf84ca --- /dev/null +++ b/etc/rc.packages @@ -0,0 +1,45 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.php-fpm_restart b/etc/rc.php-fpm_restart new file mode 100755 index 000000000..422b951ec --- /dev/null +++ b/etc/rc.php-fpm_restart @@ -0,0 +1,11 @@ +#!/bin/sh + +/bin/pkill -F /var/run/php-fpm.pid +sleep 2 + +# Run the php.ini setup file and populate +# /usr/local/etc/php.ini and /usr/local/lib/php.ini +/etc/rc.php_ini_setup 2>/tmp/php_errors.txt +echo ">>> Restarting php-fpm" | /usr/bin/logger -p daemon.info -i -t rc.php-fpm_restart +/usr/local/sbin/php-fpm -c /usr/local/lib/php.ini -y /usr/local/lib/php-fpm.conf -RD 2>&1 >/dev/null + diff --git a/etc/rc.php_ini_setup b/etc/rc.php_ini_setup new file mode 100755 index 000000000..ad04f2530 --- /dev/null +++ b/etc/rc.php_ini_setup @@ -0,0 +1,418 @@ +#!/bin/sh +# +# rc.php_ini_setup +# Copyright (C) 2010 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. + +# Set our operating platform +PLATFORM=`/bin/cat /etc/platform` +MIN_REALMEM_FOR_APC=512 + +if [ -d /usr/local/lib/php/20121212 ]; then + EXTENSIONSDIR="/usr/local/lib/php/20121212/" +elif [ -d /usr/local/lib/php/20090626 ]; then + EXTENSIONSDIR="/usr/local/lib/php/20090626/" +else + EXTENSIONSDIR="/usr/local/lib/php/20060613/" +fi + +# Grab amount of memory that is detected +if [ -f /var/log/dmesg.boot ]; then + AVAILMEM=`/bin/cat /var/log/dmesg.boot |/usr/bin/awk '/avail memory/ { memory=($4 / 1048576); printf("%0.0f\n", memory); exit}'` +else + AVAILMEM=`/sbin/dmesg -a |/usr/bin/awk '/avail memory/ { memory=($4 / 1048576); printf("%0.0f\n", memory); exit}'` +fi + +if [ -z "$AVAILMEM" ]; then + MEM=`/sbin/sysctl hw.physmem | cut -d':' -f2` + AVAILMEM=`/bin/expr $MEM / 1048576` +fi + + +# Get amount of ram installed on this system +REALMEM=`/sbin/sysctl hw.realmem | /usr/bin/awk '{print $2/1048576}' | /usr/bin/awk -F '.' '{print $1}'` +export REALMEM +export LOWMEM + +if [ ${REALMEM} -lt $MIN_REALMEM_FOR_APC ]; then + LOWMEM="TRUE" + echo ">>> Under $MIN_REALMEM_FOR_APC megabytes of ram detected. Not enabling APC." + echo ">>> Under $MIN_REALMEM_FOR_APC megabytes of ram detected. Not enabling APC." | /usr/bin/logger -p daemon.info -i -t rc.php_ini_setup +else + + # Calculate APC SHM size according + # to detected memory values + if [ "$AVAILMEM" -gt "135" ]; then + APCSHMEMSIZE="10M" + fi + if [ "$AVAILMEM" -gt "256" ]; then + APCSHMEMSIZE="20M" + fi + if [ "$AVAILMEM" -gt "384" ]; then + APCSHMEMSIZE="25M" + fi + if [ "$AVAILMEM" -gt "512" ]; then + APCSHMEMSIZE="30M" + fi + if [ "$AVAILMEM" -gt "784" ]; then + APCSHMEMSIZE="50M" + fi +fi + +# Set upload directory +if [ "$PLATFORM" = "nanobsd" ]; then + UPLOADTMPDIR=`/usr/bin/grep upload_path /etc/inc/globals.inc | /usr/bin/cut -d'"' -f4` +else + UPLOADTMPDIR="/tmp" +fi + +# Define php modules. Do not add .so, it will +# be done automatically by the script below. +PHPMODULES="standard" +if [ "$LOWMEM" != "TRUE" ]; then + PHPMODULES="$PHPMODULES apc" +fi +# Config read/write +PHPMODULES="$PHPMODULES xml libxml dom" +PHPMODULES="$PHPMODULES simplexml xmlreader xmlwriter" +# Downloading via HTTP/FTP (pkg mgr, etc) +PHPMODULES="$PHPMODULES curl date" +# Internationalization +PHPMODULES="$PHPMODULES gettext" +# User manager +PHPMODULES="$PHPMODULES ldap openssl pcntl" +PHPMODULES="$PHPMODULES hash" +PHPMODULES="$PHPMODULES mcrypt" +# Regexs, PERL style! +PHPMODULES="$PHPMODULES pcre" +# The mighty posix! +PHPMODULES="$PHPMODULES posix" +PHPMODULES="$PHPMODULES readline" +# Login sessions +PHPMODULES="$PHPMODULES session" +# Extra sanity seatbelts +PHPMODULES="$PHPMODULES suhosin" +# Firewall rules edit +PHPMODULES="$PHPMODULES ctype" +# firewall_rules_edit.php +PHPMODULES="$PHPMODULES mbstring" +# Synchronization primitives +PHPMODULES="$PHPMODULES shmop" +# Page compression +PHPMODULES="$PHPMODULES zlib" +# SQLlite & Database +PHPMODULES="$PHPMODULES spl" +PHPMODULES="$PHPMODULES pdo" +PHPMODULES="$PHPMODULES sqlite3" +# RADIUS +PHPMODULES="$PHPMODULES radius" +# ZeroMQ +PHPMODULES="$PHPMODULES zmq" +# SSH2 +PHPMODULES="$PHPMODULES ssh2" +# pfSense extensions +PHPMODULES="$PHPMODULES pfSense" +# json +PHPMODULES="$PHPMODULES json" +# bcmath +PHPMODULES="$PHPMODULES bcmath" +# filter +PHPMODULES="$PHPMODULES filter" + +PHP_ZEND_MODULES="ioncube_loader" +PHP_ZEND_MODULES_TS="ioncube_loader_ts" + +# Modules previously included. +# can be turned on by touching +# /etc/php_dynamodules/$modulename +# sysvmsg \ +# sysvsem \ +# sysvshm \ +# bcmath \ +# tokenizer \ +# uploadprogress \ +# sockets \ +# Reflection \ +# mysql \ +# bz2 \ + +# Clear the .ini file to make sure we are clean +if [ -f /usr/local/etc/php.ini ]; then + /bin/rm /usr/local/etc/php.ini +fi +if [ -f /usr/local/lib/php.ini ]; then + /bin/rm /usr/local/lib/php.ini +fi +LOADED_MODULES=`/usr/local/bin/php -m | /usr/bin/grep -v "\["` + +# Fetch the timezone from the XML and set it here. We set it later too in the running scripts +TIMEZONE=`cat /conf/config.xml | egrep -E '(.*?)' | awk -F'>' '{print $2}'|awk -F'<' '{print $1}'` + +# Get a loaded module list in the stock php +# Populate a dummy php.ini to avoid +# the file being clobbered and the firewall +# not being able to boot back up. +/bin/cat >/usr/local/lib/php.ini <> /usr/local/lib/php.ini + fi + fi +done + +# Zend modules +for EXT in $PHP_ZEND_MODULES; do + # Ensure extension exists before adding. + if [ -f "${EXTENSIONSDIR}/ioncube/${EXT}.so" ]; then + echo "zend_extension=${EXTENSIONSDIR}/ioncube/${EXT}.so" >> /usr/local/lib/php.ini + fi +done + +# Zend threaded modules +for EXT in $PHP_ZEND_MODULES_TS; do + # Ensure extension exists before adding. + if [ -f "${EXTENSIONSDIR}/ioncube/${EXT}.so" ]; then + echo "zend_extension_ts=${EXTENSIONSDIR}/ioncube/${EXT}.so" >> /usr/local/lib/php.ini + fi +done + + +if [ "$LOWMEM" != "TRUE" ]; then + + /bin/cat >>/usr/local/lib/php.ini <>/usr/local/lib/php.ini < /usr/local/lib/php-fpm.conf <> /usr/local/lib/php-fpm.conf <> /usr/local/lib/php-fpm.conf <> /usr/local/lib/php-fpm.conf </dev/null | /usr/bin/grep -v "\["` +for EXT in $PHPMODULESLC; do + SHOULDREMOVE="true" + for LM in $LOADED_MODULES; do + if [ "$EXT" = "$LM" ]; then + SHOULDREMOVE="false" + fi + done + # Handle low memory situations + if [ "$LOWMEM" = "TRUE" ]; then + if [ "$EXT" = "apc" ]; then + SHOULDREMOVE="true" + fi + if [ "$EXT" = "xcache" ]; then + SHOULDREMOVE="true" + fi + fi + if [ "$SHOULDREMOVE" = "true" ]; then + if [ -f "${EXTENSIONSDIR}${EXT}.so" ]; then + echo ">>> ${EXT} did not load correctly. Removing from php.ini..." >> /var/run/php_modules_load_errors.txt + /bin/cat /usr/local/lib/php.ini | /usr/bin/grep -v $EXT > /tmp/php.ini + /bin/rm -f /usr/local/lib/php.ini + /bin/mv /tmp/php.ini /usr/local/lib/php.ini + fi + fi +done + +# Copy php.ini file to etc/ too (cli) +/bin/cp /usr/local/lib/php.ini /usr/local/etc/php.ini diff --git a/etc/rc.prunecaptiveportal b/etc/rc.prunecaptiveportal new file mode 100755 index 000000000..c7011a55d --- /dev/null +++ b/etc/rc.prunecaptiveportal @@ -0,0 +1,66 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + +/* parse the configuration and include all functions used below */ +/* config.inc retrives the util.inc and globals.inc */ +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("captiveportal.inc"); + +global $g; +global $cpzone; +global $cpzoneid; + +$cpzone = str_replace("\n", "", $argv[1]); +if (!is_array($config['captiveportal'][$cpzone])) { + log_error("{$cpzone} is not a valid zone in the configuration!"); + return; +} +$cpzoneid = $config['captiveportal'][$cpzone]['zoneid']; + +if (file_exists("{$g['tmp_path']}/.rc.prunecaptiveportal.{$cpzone}.running")) { + $stat = stat("{$g['tmp_path']}/.rc.prunecaptiveportal.{$cpzone}.running"); + if (time() - $stat['mtime'] >= 120) + @unlink("{$g['tmp_path']}/.rc.prunecaptiveportal.{$cpzone}.running"); + else { + log_error("Skipping CP prunning process because previous/another instance is already running"); + return; + } +} + +@file_put_contents("{$g['tmp_path']}/.rc.prunecaptiveportal.{$cpzone}.running", ""); +captiveportal_prune_old(); +@unlink("{$g['tmp_path']}/.rc.prunecaptiveportal.{$cpzone}.running"); + +?> diff --git a/etc/rc.reboot b/etc/rc.reboot new file mode 100755 index 000000000..afdc93cf0 --- /dev/null +++ b/etc/rc.reboot @@ -0,0 +1,35 @@ +#!/bin/sh + +# $Id$ + +if ! /usr/bin/lockf -s -t 30 /tmp/config.lock /usr/bin/true; then + echo "Cannot reboot at this moment, a config write operation is in progress, and 30 seconds have passed." + exit 1 +fi + +sleep 1 + +# If PLATFORM is pfSense then remove +# temporary files on shutdown from /tmp/ +PLATFORM=`cat /etc/platform` +if [ "$PLATFORM" = "pfSense" ]; then + rm -rf /tmp/* +fi + +USE_MFS_TMPVAR=`/usr/bin/grep -c use_mfs_tmpvar /cf/conf/config.xml` +DISK_NAME=`/bin/df /var/db/rrd | /usr/bin/tail -1 | /usr/bin/awk '{print $1;}'` +DISK_TYPE=`/usr/bin/basename ${DISK_NAME} | /usr/bin/cut -c1-2` +# If we are not on a full install, or if the full install wants RAM disks, or if the full install _was_ using RAM disks, but isn't for the next boot... +if [ "${PLATFORM}" != "pfSense" ] || [ ${USE_MFS_TMPVAR} -gt 0 ] || [ "${DISK_TYPE}" = "md" ]; then + /etc/rc.backup_rrd.sh + /etc/rc.backup_dhcpleases.sh +fi + +sleep 1 + +SHUTDOWN=/sbin/shutdown +if [ -f /sbin/shutdown.old ]; then + SHUTDOWN=/sbin/shutdown.old +fi + +$SHUTDOWN -r now diff --git a/etc/rc.reload_all b/etc/rc.reload_all new file mode 100755 index 000000000..00dc4efc5 --- /dev/null +++ b/etc/rc.reload_all @@ -0,0 +1,46 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.reload_interfaces b/etc/rc.reload_interfaces new file mode 100755 index 000000000..329bf476e --- /dev/null +++ b/etc/rc.reload_interfaces @@ -0,0 +1,45 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.resolv_conf_generate b/etc/rc.resolv_conf_generate new file mode 100755 index 000000000..022431c36 --- /dev/null +++ b/etc/rc.resolv_conf_generate @@ -0,0 +1,35 @@ +#!/usr/local/bin/php -f + diff --git a/etc/rc.restart_webgui b/etc/rc.restart_webgui new file mode 100755 index 000000000..eef8c0162 --- /dev/null +++ b/etc/rc.restart_webgui @@ -0,0 +1,28 @@ +#!/usr/local/bin/php -f + + diff --git a/etc/rc.restore_config_backup b/etc/rc.restore_config_backup new file mode 100755 index 000000000..ca1728d32 --- /dev/null +++ b/etc/rc.restore_config_backup @@ -0,0 +1,126 @@ +#!/usr/local/bin/php -q += 0; $c--) { + if (is_numeric($which) && ($c != $which)) + continue; + print_backup_info($confvers[$c], $c+1); + echo "\n"; + } +} + +function choose_backup() { + global $fp, $confvers; + if (count($confvers) == 0) { + echo gettext("No backups found in the configuration history."); + return -1; + } + echo gettext("Which configuration would you like to restore?") . "\n"; + echo " 1-" . count($confvers) . " : "; + $number = strtoupper(chop(fgets($fp))); + if (is_numeric($number) && ($number > 0) && ($number <= count($confvers))) { + return $number; + } else { + echo gettext("That is not a valid backup number.\n"); + return -1; + } +} + +function restore_history_backup($number) { + global $g, $fp, $confvers; + if (is_numeric($number) && ($number > 0) && ($number <= count($confvers))) { + $realnumber = $number - 1; + echo "\n" . gettext("Is this the backup you wish to restore?") . "\n"; + list_backups($realnumber); + $thisbackup = $confvers[$realnumber]; + echo gettext("Y/N?") . " : "; + $confirm = strtoupper(chop(fgets($fp))); + if ($confirm == gettext("Y")) { + conf_mount_rw(); + if(config_restore($g['conf_path'] . '/backup/config-' . $thisbackup['time'] . '.xml') == 0) { + echo "\n"; + echo sprintf(gettext('Successfully reverted to timestamp %1$s with description "%2$s".'), date(gettext("n/j/y H:i:s"), $thisbackup['time']), $thisbackup['description']); + echo "\n" . gettext("You may need to reboot the firewall or restart services before the restored configuration is fully active.") . "\n\n"; + } else { + echo gettext("Unable to revert to the selected configuration.") . "\n"; + } + conf_mount_ro(); + } else { + echo gettext("Restore canceled.") . "\n"; + } + } else { + echo gettext("Restore canceled due to invalid input.") . "\n"; + } +} + +while (true) { + + echo "\n"; + echo gettext("Restore Backup from Configuration History") . "\n\n"; + echo "1) " . gettext("List Backups") . "\n"; + echo "2) " . gettext("Restore Backup") . "\n"; + echo "Q) " . gettext("Quit") . "\n"; + echo "\n\n"; + echo gettext("Please select an option to continue") . ": "; + + $command = strtolower(chop(fgets($fp))); + + // Make sure we can detect a foreign language "quit" command. + if (strtolower($command) == gettext("quit")) + $command = "quit"; + + switch ($command) { + case "q": + case "quit": + echo "\n"; + fclose($fp); + die; + break; + case "1": + list_backups(); + break; + case "2": + $number = choose_backup(); + restore_history_backup($number); + fclose($fp); + die; + break; + } +} + +fclose($fp); +die; +?> \ No newline at end of file diff --git a/etc/rc.restore_full_backup b/etc/rc.restore_full_backup new file mode 100755 index 000000000..05bb060af --- /dev/null +++ b/etc/rc.restore_full_backup @@ -0,0 +1,19 @@ +#!/bin/sh + +echo -n "Checking..." +if [ `tar tzPf $1 /etc/rc 2>/dev/null` ]; then + echo " Backup file looks OK." + echo "One moment, restoring ${1}..." + if [ -f /tmp/do_not_restore_config.xml ]; then + EXCLUDE="--exclude /cf/conf/config.xml" + rm /tmp/do_not_restore_config.xml + else + EXCLUDE="" + fi + tar xzPfU $1 $EXCLUDE -C / 2>/var/etc/restore_log.txt + echo "Restore of $1 complete." +else + echo " Error." + echo "File not found or invalid backup file. Available backups:" + ls -lah /root | grep backup | more +fi diff --git a/etc/rc.savecore b/etc/rc.savecore new file mode 100755 index 000000000..1612a4051 --- /dev/null +++ b/etc/rc.savecore @@ -0,0 +1,22 @@ +#!/bin/sh +# Based on: +# FreeBSD: src/etc/rc.d/savecore,v 1.16.2.2.4.1 2010/06/14 02:09:06 kensmith Exp + +dumpdev=`/bin/realpath /dev/dumpdev` +dumpdir='/var/crash' + +if [ ! -c "${dumpdev}" ]; then + echo "Dump device does not exist. Savecore not run." + exit +fi + +if [ ! -d "${dumpdir}" ]; then + echo "Dump directory does not exist. Savecore not run." + exit +fi + +if savecore -C "${dumpdev}" >/dev/null; then + savecore ${dumpdir} ${dumpdev} +else + echo 'No core dumps found.' +fi diff --git a/etc/rc.savevoucher b/etc/rc.savevoucher new file mode 100755 index 000000000..29b18d696 --- /dev/null +++ b/etc/rc.savevoucher @@ -0,0 +1,40 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + require_once("filter.inc"); + require_once("shaper.inc"); + require_once("captiveportal.inc"); + require_once("voucher.inc"); + + voucher_save_db_to_config(); +?> diff --git a/etc/rc.shutdown b/etc/rc.shutdown new file mode 100755 index 000000000..2102ff476 --- /dev/null +++ b/etc/rc.shutdown @@ -0,0 +1,37 @@ +#!/bin/sh + +if ! /usr/bin/lockf -s -t 30 /tmp/config.lock /usr/bin/true; then + echo "Cannot shutdown at this moment, a config write operation is in progress and 30 seconds have passed." + exit -1 +fi + +product=`cat /etc/inc/globals.inc | grep product_name | cut -d'"' -f4` + +echo +echo "${product} is now shutting down ..." +echo + +stty status '^T' + +# Set shell to ignore SIGINT (2), but not children; +trap : 2 + +HOME=/; export HOME +PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH + +# If PLATFORM is pfSense then remove +# temporary files on shutdown from /tmp/ +PLATFORM=`cat /etc/platform` +if [ "$PLATFORM" = "pfSense" ]; then + find -x /tmp/* -type f -exec rm -f {} \; >/dev/null 2>&1 +fi + +USE_MFS_TMPVAR=`/usr/bin/grep -c use_mfs_tmpvar /cf/conf/config.xml` +DISK_NAME=`/bin/df /var/db/rrd | /usr/bin/tail -1 | /usr/bin/awk '{print $1;}'` +DISK_TYPE=`/usr/bin/basename ${DISK_NAME} | /usr/bin/cut -c1-2` +# If we are not on a full install, or if the full install wants RAM disks, or if the full install _was_ using RAM disks, but isn't for the next boot... +if [ "${PLATFORM}" != "pfSense" ] || [ ${USE_MFS_TMPVAR} -gt 0 ] || [ "${DISK_TYPE}" = "md" ]; then + /etc/rc.backup_rrd.sh + /etc/rc.backup_dhcpleases.sh +fi diff --git a/etc/rc.start_packages b/etc/rc.start_packages new file mode 100755 index 000000000..4ddd908d1 --- /dev/null +++ b/etc/rc.start_packages @@ -0,0 +1,74 @@ +#!/usr/local/bin/php -f + $package) { + echo " Starting package {$package['name']}..."; + sync_package($pkgid); + $internal_name = get_pkg_internal_name($package); + start_service($internal_name); + unset($rcfiles[RCFILEPREFIX . strtolower($internal_name) . ".sh"]); + echo "done.\n"; + } +} + +$shell = @popen("/bin/sh", "w"); +if ($shell) { + foreach ($rcfiles as $rcfile => $number) { + echo " Starting {$rcfile}..."; + fwrite($shell, "{$rcfile} start >>/tmp/bootup_messages 2>&1 &"); + echo "done.\n"; + } + + pclose($shell); +} + +?> diff --git a/etc/rc.stop_packages b/etc/rc.stop_packages new file mode 100755 index 000000000..b7a87f191 --- /dev/null +++ b/etc/rc.stop_packages @@ -0,0 +1,5 @@ +#!/usr/local/bin/php -f + \ No newline at end of file diff --git a/etc/rc.update_alias_url_data b/etc/rc.update_alias_url_data new file mode 100755 index 000000000..5cc608854 --- /dev/null +++ b/etc/rc.update_alias_url_data @@ -0,0 +1,43 @@ +#!/usr/local/bin/php -f + + 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. +*/ + +/* parse the configuration and include all functions used below */ +/* config.inc retrives the util.inc and globals.inc */ + +require_once("config.inc"); +require_once("functions.inc"); + +if (update_alias_url_data()) { + write_config(); + send_event("filter reload"); +} +?> diff --git a/etc/rc.update_bogons.sh b/etc/rc.update_bogons.sh new file mode 100755 index 000000000..331fbc525 --- /dev/null +++ b/etc/rc.update_bogons.sh @@ -0,0 +1,157 @@ +#!/bin/sh + +# +# TODO: opnSense, drop/replace? +# + +sys.exit(0) +# Update bogons file +# Part of the pfSense project +# https://www.pfsense.org + +# Global variables +proc_error="" + +# Download and extract if necessary +process_url() { + local file=$1 + local url=$2 + local filename=${url##*/} + local ext=${filename#*.} + + /usr/bin/fetch -a -T 30 -q -o $file "${url}" + + if [ ! -f $file ]; then + echo "Could not download ${url}" | logger + proc_error="true" + fi + + case "$ext" in + tar) + mv $file $file.tmp + /usr/bin/tar -xf $file.tmp -O > $file 2> /dev/null + ;; + tar.gz) + mv $file $file.tmp + /usr/bin/tar -xzf $file.tmp -O > $file 2> /dev/null + ;; + tgz) + mv $file $file.tmp + /usr/bin/tar -xzf $file.tmp -O > $file 2> /dev/null + ;; + tar.bz2) + mv $file $file.tmp + /usr/bin/tar -xjf $file.tmp -O > $file 2> /dev/null + ;; + *) + ;; + esac + + if [ -f $file.tmp ]; then + rm $file.tmp + fi + + if [ ! -f $file ]; then + echo "Could not extract ${filename}" | logger + proc_error="true" + fi +} + +echo "rc.update_bogons.sh is starting up." | logger + +# Sleep for some time, unless an argument is specified. +if [ "$1" = "" ]; then + # Grab a random value + value=`od -A n -d -N2 /dev/random | awk '{ print $1 }'` + echo "rc.update_bogons.sh is sleeping for $value" | logger + sleep $value +fi + +echo "rc.update_bogons.sh is beginning the update cycle." | logger + +# Load custom bogon configuration +if [ -f /var/etc/bogon_custom ]; then + . /var/etc/bogon_custom +fi + +# Set default values if not overriden +v4url=${v4url:-"https://files.pfsense.org/lists/fullbogons-ipv4.txt"} +v6url=${v6url:-"https://files.pfsense.org/lists/fullbogons-ipv6.txt"} +v4urlcksum=${v4urlcksum:-"${v4url}.md5"} +v6urlcksum=${v6urlcksum:-"${v6url}.md5"} + +process_url /tmp/bogons "${v4url}" +process_url /tmp/bogonsv6 "${v6url}" + +if [ "$proc_error" != "" ]; then + # Relaunch and sleep + sh /etc/rc.update_bogons.sh & + exit +fi + +BOGON_V4_CKSUM=`/usr/bin/fetch -T 30 -q -o - "${v4urlcksum}" | awk '{ print $4 }'` +ON_DISK_V4_CKSUM=`md5 /tmp/bogons | awk '{ print $4 }'` +BOGON_V6_CKSUM=`/usr/bin/fetch -T 30 -q -o - "${v6urlcksum}" | awk '{ print $4 }'` +ON_DISK_V6_CKSUM=`md5 /tmp/bogonsv6 | awk '{ print $4 }'` + +if [ "$BOGON_V4_CKSUM" = "$ON_DISK_V4_CKSUM" ] || [ "$BOGON_V6_CKSUM" = "$ON_DISK_V6_CKSUM" ]; then + # At least one of the downloaded checksums matches, so mount RW + /etc/rc.conf_mount_rw + + ENTRIES_MAX=`pfctl -s memory | awk '/table-entries/ { print $4 }'` + + if [ "$BOGON_V4_CKSUM" = "$ON_DISK_V4_CKSUM" ]; then + ENTRIES_TOT=`pfctl -vvsTables | awk '/Addresses/ {s+=$2}; END {print s}'` + ENTRIES_V4=`pfctl -vvsTables | awk '/-\tbogons$/ {getline; print $2}'` + LINES_V4=`wc -l /tmp/bogons | awk '{ print $1 }'` + if [ $ENTRIES_MAX -gt $((2*ENTRIES_TOT-${ENTRIES_V4:-0}+LINES_V4)) ]; then + egrep -v "^192.168.0.0/16|^172.16.0.0/12|^10.0.0.0/8" /tmp/bogons > /etc/bogons + RESULT=`/sbin/pfctl -t bogons -T replace -f /etc/bogons 2>&1` + echo "$RESULT" | awk '{ print "Bogons V4 file downloaded: " $0 }' | logger + else + echo "Not updating IPv4 bogons (increase table-entries limit)" | logger + fi + rm /tmp/bogons + else + echo "Could not download ${v4url} (checksum mismatch)" | logger + checksum_error="true" + fi + + if [ "$BOGON_V6_CKSUM" = "$ON_DISK_V6_CKSUM" ]; then + BOGONS_V6_TABLE_COUNT=`pfctl -sTables | grep ^bogonsv6$ | wc -l | awk '{ print $1 }'` + ENTRIES_TOT=`pfctl -vvsTables | awk '/Addresses/ {s+=$2}; END {print s}'` + LINES_V6=`wc -l /tmp/bogonsv6 | awk '{ print $1 }'` + if [ $BOGONS_V6_TABLE_COUNT -gt 0 ]; then + ENTRIES_V6=`pfctl -vvsTables | awk '/-\tbogonsv6$/ {getline; print $2}'` + if [ $ENTRIES_MAX -gt $((2*ENTRIES_TOT-${ENTRIES_V6:-0}+LINES_V6)) ]; then + egrep -iv "^fc00::/7" /tmp/bogonsv6 > /etc/bogonsv6 + RESULT=`/sbin/pfctl -t bogonsv6 -T replace -f /etc/bogonsv6 2>&1` + echo "$RESULT" | awk '{ print "Bogons V6 file downloaded: " $0 }' | logger + else + echo "Not saving or updating IPv6 bogons (increase table-entries limit)" | logger + fi + else + if [ $ENTRIES_MAX -gt $((2*ENTRIES_TOT+LINES_V6)) ]; then + egrep -iv "^fc00::/7" /tmp/bogonsv6 > /etc/bogonsv6 + echo "Bogons V6 file downloaded but not updating IPv6 bogons table because IPv6 Allow is off" | logger + else + echo "Not saving IPv6 bogons table (IPv6 Allow is off and table-entries limit is potentially too low)" | logger + fi + fi + rm /tmp/bogonsv6 + else + echo "Could not download ${v6url} (checksum mismatch)" | logger + checksum_error="true" + fi + + # We mounted RW, so switch back to RO + /etc/rc.conf_mount_ro +fi + +if [ "$checksum_error" != "" ]; then + # Relaunch and sleep + sh /etc/rc.update_bogons.sh & + exit +fi + +echo "rc.update_bogons.sh is ending the update cycle." | logger diff --git a/etc/rc.update_urltables b/etc/rc.update_urltables new file mode 100755 index 000000000..ca8ed3810 --- /dev/null +++ b/etc/rc.update_urltables @@ -0,0 +1,58 @@ +#!/usr/local/bin/php -q + 0) { + log_error("{$argv[0]}: Starting up."); + + if ($argv[1] != "now") { + // Wait a little before updating. + $wait = mt_rand(5, 60); + log_error("{$argv[0]}: Sleeping for {$wait} seconds."); + sleep($wait); + } + + log_error("{$argv[0]}: Starting URL table alias updates"); + + $filter_reload = false; + foreach ($todo as $t) { + $r = process_alias_urltable($t['name'], $t['url'], $t['freq']); + if ($r == 1) { + $result = ""; + // TODO: Change it when pf supports tables with ports + if ($t['type'] == "urltable") + exec("/sbin/pfctl -t " . escapeshellarg($t['name']) . " -T replace -f /var/db/aliastables/" . escapeshellarg($t['name']) . ".txt 2>&1", $result); + else + $filter_reload = true; + log_error("{$argv[0]}: Updated {$t['name']} content from {$t['url']}: {$result[0]}"); + } elseif ($r == -1) { + log_error("{$argv[0]}: {$t['name']} does not need updating."); + } else { + log_error("{$argv[0]}: ERROR: could not update {$t['name']} content from {$t['url']}"); + } + } + + if ($filter_reload) + send_event("filter reload"); +} +?> diff --git a/etc/services b/etc/services new file mode 100644 index 000000000..1f85da00c --- /dev/null +++ b/etc/services @@ -0,0 +1,4111 @@ +# +# Network services, Internet style +# +# Note that it is presently the policy of IANA to assign a single well-known +# port number for both TCP and UDP; hence, most entries here have two entries +# even if the protocol doesn't support UDP operations. +# +# The latest IANA port assignments can be gotten from +# +# http://www.iana.org/assignments/port-numbers +# +# The Well Known Ports are those from 0 through 1023. +# The Registered Ports are those from 1024 through 49151 +# The Dynamic and/or Private Ports are those from 49152 through 65535 +# +# Kerberos services are for Kerberos v4, and are unofficial. Sites running +# v5 should uncomment v5 entries and comment v4 entries. +# +# $FreeBSD: src/etc/services,v 1.62.2.12 2003/02/01 16:48:17 schweikh Exp $ +# From: @(#)services 5.8 (Berkeley) 5/9/91 +# +# WELL KNOWN PORT NUMBERS +# +rtmp 1/ddp #Routing Table Maintenance Protocol +tcpmux 1/tcp #TCP Port Service Multiplexer +tcpmux 1/udp #TCP Port Service Multiplexer +nbp 2/ddp #Name Binding Protocol +compressnet 2/tcp #Management Utility +compressnet 2/udp #Management Utility +compressnet 3/tcp #Compression Process +compressnet 3/udp #Compression Process +echo 4/ddp #AppleTalk Echo Protocol +rje 5/tcp #Remote Job Entry +rje 5/udp #Remote Job Entry +zip 6/ddp #Zone Information Protocol +echo 7/tcp +echo 7/udp +discard 9/tcp sink null +discard 9/udp sink null +systat 11/tcp users #Active Users +systat 11/udp users #Active Users +daytime 13/tcp +daytime 13/udp +qotd 17/tcp quote #Quote of the Day +qotd 17/udp quote #Quote of the Day +msp 18/tcp #Message Send Protocol +msp 18/udp #Message Send Protocol +chargen 19/tcp ttytst source #Character Generator +chargen 19/udp ttytst source #Character Generator +ftp-data 20/tcp #File Transfer [Default Data] +ftp-data 20/udp #File Transfer [Default Data] +ftp 21/tcp #File Transfer [Control] +ftp 21/udp #File Transfer [Control] +ssh 22/tcp #Secure Shell Login +ssh 22/udp #Secure Shell Login +telnet 23/tcp +telnet 23/udp +# 24/tcp any private mail system +# 24/udp any private mail system +smtp 25/tcp mail #Simple Mail Transfer +smtp 25/udp mail #Simple Mail Transfer +nsw-fe 27/tcp #NSW User System FE +nsw-fe 27/udp #NSW User System FE +msg-icp 29/tcp #MSG ICP +msg-icp 29/udp #MSG ICP +msg-auth 31/tcp #MSG Authentication +msg-auth 31/udp #MSG Authentication +dsp 33/tcp #Display Support Protocol +dsp 33/udp #Display Support Protocol +# 35/tcp any private printer server +# 35/udp any private printer server +time 37/tcp timserver +time 37/udp timserver +rap 38/tcp #Route Access Protocol +rap 38/udp #Route Access Protocol +rlp 39/tcp resource #Resource Location Protocol +rlp 39/udp resource #Resource Location Protocol +graphics 41/tcp +graphics 41/udp +nameserver 42/tcp name #Host Name Server +nameserver 42/udp name #Host Name Server +nicname 43/tcp whois +nicname 43/udp whois +mpm-flags 44/tcp #MPM FLAGS Protocol +mpm-flags 44/udp #MPM FLAGS Protocol +mpm 45/tcp #Message Processing Module [recv] +mpm 45/udp #Message Processing Module [recv] +mpm-snd 46/tcp #MPM [default send] +mpm-snd 46/udp #MPM [default send] +ni-ftp 47/tcp #NI FTP +ni-ftp 47/udp #NI FTP +auditd 48/tcp #Digital Audit Daemon +auditd 48/udp #Digital Audit Daemon +tacacs 49/tcp #Login Host Protocol (TACACS) +tacacs 49/udp #Login Host Protocol (TACACS) +re-mail-ck 50/tcp #Remote Mail Checking Protocol +re-mail-ck 50/udp #Remote Mail Checking Protocol +la-maint 51/tcp #IMP Logical Address Maintenance +la-maint 51/udp #IMP Logical Address Maintenance +xns-time 52/tcp #XNS Time Protocol +xns-time 52/udp #XNS Time Protocol +domain 53/tcp #Domain Name Server +domain 53/udp #Domain Name Server +xns-ch 54/tcp #XNS Clearinghouse +xns-ch 54/udp #XNS Clearinghouse +isi-gl 55/tcp #ISI Graphics Language +isi-gl 55/udp #ISI Graphics Language +xns-auth 56/tcp #XNS Authentication +xns-auth 56/udp #XNS Authentication +mtp 57/tcp # deprecated +#PROBLEMS!============================================================== +# 57/tcp any private terminal access +#PROBLEMS!============================================================== +# 57/udp any private terminal access +xns-mail 58/tcp #XNS Mail +xns-mail 58/udp #XNS Mail +# 59/tcp any private file service +# 59/udp any private file service +ni-mail 61/tcp #NI MAIL +ni-mail 61/udp #NI MAIL +acas 62/tcp #ACA Services +acas 62/udp #ACA Services +whois++ 63/tcp +whois++ 63/udp +covia 64/tcp #Communications Integrator (CI) +covia 64/udp #Communications Integrator (CI) +tacacs-ds 65/tcp #TACACS-Database Service +tacacs-ds 65/udp #TACACS-Database Service +sql*net 66/tcp #Oracle SQL*NET +sql*net 66/udp #Oracle SQL*NET +bootps 67/tcp dhcps #Bootstrap Protocol Server +bootps 67/udp dhcps #Bootstrap Protocol Server +bootpc 68/tcp dhcpc #Bootstrap Protocol Client +bootpc 68/udp dhcpc #Bootstrap Protocol Client +tftp 69/tcp #Trivial File Transfer +tftp 69/udp #Trivial File Transfer +tftp-proxy 6969/udp +gopher 70/tcp +gopher 70/udp +netrjs-1 71/tcp #Remote Job Service +netrjs-1 71/udp #Remote Job Service +netrjs-2 72/tcp #Remote Job Service +netrjs-2 72/udp #Remote Job Service +netrjs-3 73/tcp #Remote Job Service +netrjs-3 73/udp #Remote Job Service +netrjs-4 74/tcp #Remote Job Service +netrjs-4 74/udp #Remote Job Service +# 75/tcp any private dial out service +# 75/udp any private dial out service +deos 76/tcp #Distributed External Object Store +deos 76/udp #Distributed External Object Store +netrjs 77/tcp +#PROBLEMS!============================================================== +# 77/tcp any private RJE service +#PROBLEMS!============================================================== +# 77/udp any private RJE service +vettcp 78/tcp +vettcp 78/udp +finger 79/tcp +finger 79/udp +http 80/tcp www www-http #World Wide Web HTTP +http 80/udp www www-http #World Wide Web HTTP +hosts2-ns 81/tcp #HOSTS2 Name Server +hosts2-ns 81/udp #HOSTS2 Name Server +xfer 82/tcp #XFER Utility +xfer 82/udp #XFER Utility +mit-ml-dev 83/tcp #MIT ML Device +mit-ml-dev 83/udp #MIT ML Device +ctf 84/tcp #Common Trace Facility +ctf 84/udp #Common Trace Facility +mit-ml-dev 85/tcp #MIT ML Device +mit-ml-dev 85/udp #MIT ML Device +mfcobol 86/tcp #Micro Focus Cobol +mfcobol 86/udp #Micro Focus Cobol +ttylink 87/tcp +#PROBLEMS!=========================================================== +# 87/tcp any private terminal link +#PROBLEMS!=========================================================== +# 87/udp any private terminal link +kerberos-sec 88/tcp kerberos # krb5 # Kerberos (v5) +kerberos-sec 88/udp kerberos # krb5 # Kerberos (v5) +su-mit-tg 89/tcp #SU/MIT Telnet Gateway +su-mit-tg 89/udp #SU/MIT Telnet Gateway +dnsix 90/tcp #DNSIX Securit Attribute Token Map +dnsix 90/udp #DNSIX Securit Attribute Token Map +mit-dov 91/tcp #MIT Dover Spooler +mit-dov 91/udp #MIT Dover Spooler +npp 92/tcp #Network Printing Protocol +npp 92/udp #Network Printing Protocol +dcp 93/tcp #Device Control Protocol +dcp 93/udp #Device Control Protocol +objcall 94/tcp #Tivoli Object Dispatcher +objcall 94/udp #Tivoli Object Dispatcher +supdup 95/tcp +supdup 95/udp +dixie 96/tcp #DIXIE Protocol Specification +dixie 96/udp #DIXIE Protocol Specification +swift-rvf 97/tcp #Swift Remote Virtural File Protocol +swift-rvf 97/udp #Swift Remote Virtural File Protocol +tacnews 98/tcp #TAC News, Unofficial: Red Hat linuxconf +tacnews 98/udp #TAC News, Unofficial: Red Hat linuxconf +metagram 99/tcp #Metagram Relay +metagram 99/udp #Metagram Relay +newacct 100/tcp #[unauthorized use] +hostname 101/tcp hostnames #NIC Host Name Server +hostname 101/udp hostnames #NIC Host Name Server +iso-tsap 102/tcp tsap #ISO-TSAP Class 0 +iso-tsap 102/udp tsap #ISO-TSAP Class 0 +gppitnp 103/tcp #Genesis Point-to-Point Trans Net +gppitnp 103/udp #Genesis Point-to-Point Trans Net +acr-nema 104/tcp #ACR-NEMA Digital Imag. & Comm. 300 +acr-nema 104/udp #ACR-NEMA Digital Imag. & Comm. 300 +csnet-ns 105/tcp cso-ns cso #Mailbox Name Nameserver +csnet-ns 105/udp cso-ns cso #Mailbox Name Nameserver +pop3pw 106/tcp 3com-tsmux #Eudora compatible PW changer +3com-tsmux 106/udp +rtelnet 107/tcp #Remote Telnet Service +rtelnet 107/udp #Remote Telnet Service +snagas 108/tcp #SNA Gateway Access Server +snagas 108/udp #SNA Gateway Access Server +pop2 109/tcp postoffice #Post Office Protocol - Version 2 +pop2 109/udp postoffice #Post Office Protocol - Version 2 +pop3 110/tcp #Post Office Protocol - Version 3 +pop3 110/udp #Post Office Protocol - Version 3 +sunrpc 111/tcp rpcbind #SUN Remote Procedure Call +sunrpc 111/udp rpcbind #SUN Remote Procedure Call +mcidas 112/tcp #McIDAS Data Transmission Protocol +mcidas 112/udp #McIDAS Data Transmission Protocol +auth 113/tcp ident tap #Authentication Service +auth 113/udp ident tap #Authentication Service +audionews 114/tcp #Audio News Multicast +audionews 114/udp #Audio News Multicast +sftp 115/tcp #Simple File Transfer Protocol +sftp 115/udp #Simple File Transfer Protocol +ansanotify 116/tcp #ANSA REX Notify +ansanotify 116/udp #ANSA REX Notify +uucp-path 117/tcp #UUCP Path Service +uucp-path 117/udp #UUCP Path Service +sqlserv 118/tcp #SQL Services +sqlserv 118/udp #SQL Services +nntp 119/tcp usenet #Network News Transfer Protocol +nntp 119/udp usenet #Network News Transfer Protocol +cfdptkt 120/tcp +cfdptkt 120/udp +erpc 121/tcp #Encore Expedited Remote Pro.Call +erpc 121/udp #Encore Expedited Remote Pro.Call +smakynet 122/tcp +smakynet 122/udp +ntp 123/tcp #Network Time Protocol +ntp 123/udp #Network Time Protocol +ansatrader 124/tcp #ANSA REX Trader +ansatrader 124/udp #ANSA REX Trader +locus-map 125/tcp #Locus PC-Interface Net Map Ser +locus-map 125/udp #Locus PC-Interface Net Map Ser +unitary 126/tcp #Unisys Unitary Login +unitary 126/udp #Unisys Unitary Login +locus-con 127/tcp #Locus PC-Interface Conn Server +locus-con 127/udp #Locus PC-Interface Conn Server +gss-xlicen 128/tcp #GSS X License Verification +gss-xlicen 128/udp #GSS X License Verification +pwdgen 129/tcp #Password Generator Protocol +pwdgen 129/udp #Password Generator Protocol +cisco-fna 130/tcp #cisco FNATIVE +cisco-fna 130/udp #cisco FNATIVE +cisco-tna 131/tcp #cisco TNATIVE +cisco-tna 131/udp #cisco TNATIVE +cisco-sys 132/tcp #cisco SYSMAINT +cisco-sys 132/udp #cisco SYSMAINT +statsrv 133/tcp #Statistics Service +statsrv 133/udp #Statistics Service +ingres-net 134/tcp #INGRES-NET Service +ingres-net 134/udp #INGRES-NET Service +loc-srv 135/tcp epmap #Location Service +loc-srv 135/udp epmap #Location Service +profile 136/tcp #PROFILE Naming System +profile 136/udp #PROFILE Naming System +netbios-ns 137/tcp #NETBIOS Name Service +netbios-ns 137/udp #NETBIOS Name Service +netbios-dgm 138/tcp #NETBIOS Datagram Service +netbios-dgm 138/udp #NETBIOS Datagram Service +netbios-ssn 139/tcp #NETBIOS Session Service +netbios-ssn 139/udp #NETBIOS Session Service +emfis-data 140/tcp #EMFIS Data Service +emfis-data 140/udp #EMFIS Data Service +emfis-cntl 141/tcp #EMFIS Control Service +emfis-cntl 141/udp #EMFIS Control Service +bl-idm 142/tcp #Britton-Lee IDM +bl-idm 142/udp #Britton-Lee IDM +imap 143/tcp imap2 imap4 #Interim Mail Access Protocol v2 +imap 143/udp imap2 imap4 #Interim Mail Access Protocol v2 +NeWS 144/tcp # Window System +NeWS 144/udp # Window System +#PROBLEMS!============================================================== +#uma 144/tcp #Universal Management Architecture +#uma 144/udp #Universal Management Architecture +#PROBLEMS!============================================================== +uaac 145/tcp #UAAC Protocol +uaac 145/udp #UAAC Protocol +iso-tp0 146/tcp +iso-tp0 146/udp +iso-ip 147/tcp +iso-ip 147/udp +cronus 148/tcp jargon #CRONUS-SUPPORT +cronus 148/udp jargon #CRONUS-SUPPORT +aed-512 149/tcp #AED 512 Emulation Service +aed-512 149/udp #AED 512 Emulation Service +sql-net 150/tcp +sql-net 150/udp +hems 151/tcp +hems 151/udp +bftp 152/tcp #Background File Transfer Program +bftp 152/udp #Background File Transfer Program +sgmp 153/tcp +sgmp 153/udp +netsc-prod 154/tcp +netsc-prod 154/udp +netsc-dev 155/tcp +netsc-dev 155/udp +sqlsrv 156/tcp #SQL Service +sqlsrv 156/udp #SQL Service +knet-cmp 157/tcp #KNET/VM Command/Message Protocol +knet-cmp 157/udp #KNET/VM Command/Message Protocol +pcmail-srv 158/tcp #PCMail Server +pcmail-srv 158/udp #PCMail Server +nss-routing 159/tcp +nss-routing 159/udp +sgmp-traps 160/tcp +sgmp-traps 160/udp +snmp 161/tcp +snmp 161/udp +snmptrap 162/tcp snmp-trap +snmptrap 162/udp snmp-trap +cmip-man 163/tcp #CMIP/TCP Manager +cmip-man 163/udp #CMIP/TCP Manager +cmip-agent 164/tcp #CMIP/TCP Agent +smip-agent 164/udp #CMIP/TCP Agent +xns-courier 165/tcp #Xerox +xns-courier 165/udp #Xerox +s-net 166/tcp #Sirius Systems +s-net 166/udp #Sirius Systems +namp 167/tcp +namp 167/udp +rsvd 168/tcp +rsvd 168/udp +send 169/tcp +send 169/udp +print-srv 170/tcp #Network PostScript +print-srv 170/udp #Network PostScript +multiplex 171/tcp #Network Innovations Multiplex +multiplex 171/udp #Network Innovations Multiplex +cl/1 172/tcp #Network Innovations CL/1 +cl/1 172/udp #Network Innovations CL/1 +xyplex-mux 173/tcp +xyplex-mux 173/udp +mailq 174/tcp +mailq 174/udp +vmnet 175/tcp +vmnet 175/udp +genrad-mux 176/tcp +genrad-mux 176/udp +xdmcp 177/tcp #X Display Manager Control Protocol +xdmcp 177/udp #X Display Manager Control Protocol +NextStep 178/tcp nextstep NeXTStep #NextStep Window Server +NextStep 178/udp nextstep NeXTStep #NextStep Window Server +bgp 179/tcp #Border Gateway Protocol +bgp 179/udp #Border Gateway Protocol +ris 180/tcp #Intergraph +ris 180/udp #Intergraph +unify 181/tcp +unify 181/udp +audit 182/tcp #Unisys Audit SITP +audit 182/udp #Unisys Audit SITP +ocbinder 183/tcp +ocbinder 183/udp +ocserver 184/tcp +ocserver 184/udp +remote-kis 185/tcp +remote-kis 185/udp +kis 186/tcp #KIS Protocol +kis 186/udp #KIS Protocol +aci 187/tcp #Application Communication Interface +aci 187/udp #Application Communication Interface +mumps 188/tcp #Plus Five's MUMPS +mumps 188/udp #Plus Five's MUMPS +qft 189/tcp #Queued File Transport +qft 189/udp #Queued File Transport +gacp 190/tcp #Gateway Access Control Protocol +gacp 190/udp cacp #Gateway Access Control Protocol +prospero 191/tcp #Prospero Directory Service +prospero 191/udp #Prospero Directory Service +osu-nms 192/tcp #OSU Network Monitoring System +osu-nms 192/udp #OSU Network Monitoring System +srmp 193/tcp #Spider Remote Monitoring Protocol +srmp 193/udp #Spider Remote Monitoring Protocol +irc 194/tcp #Internet Relay Chat Protocol +irc 194/udp #Internet Relay Chat Protocol +dn6-nlm-aud 195/tcp #DNSIX Network Level Module Audit +dn6-nlm-aud 195/udp #DNSIX Network Level Module Audit +dn6-smm-red 196/tcp #DNSIX Session Mgt Module Audit Redir +dn6-smm-red 196/udp #DNSIX Session Mgt Module Audit Redir +dls 197/tcp #Directory Location Service +dls 197/udp #Directory Location Service +dls-mon 198/tcp #Directory Location Service Monitor +dls-mon 198/udp #Directory Location Service Monitor +smux 199/tcp +smux 199/udp +src 200/tcp #IBM System Resource Controller +src 200/udp #IBM System Resource Controller +at-rtmp 201/tcp #AppleTalk Routing Maintenance +at-rtmp 201/udp #AppleTalk Routing Maintenance +at-nbp 202/tcp #AppleTalk Name Binding +at-nbp 202/udp #AppleTalk Name Binding +at-3 203/tcp #AppleTalk Unused +at-3 203/udp #AppleTalk Unused +at-echo 204/tcp #AppleTalk Echo +at-echo 204/udp #AppleTalk Echo +at-5 205/tcp #AppleTalk Unused +at-5 205/udp #AppleTalk Unused +at-zis 206/tcp #AppleTalk Zone Information +at-zis 206/udp #AppleTalk Zone Information +at-7 207/tcp #AppleTalk Unused +at-7 207/udp #AppleTalk Unused +at-8 208/tcp #AppleTalk Unused +at-8 208/udp #AppleTalk Unused +qmtp 209/tcp #The Quick Mail Transfer Protocol +qmtp 209/udp #The Quick Mail Transfer Protocol +#PROBLEMS!============================================================== +#tam 209/tcp #Trivial Authenticated Mail Protocol +#tam 209/udp #Trivial Authenticated Mail Protocol +#PROBLEMS!============================================================== +z39.50 210/tcp wais #ANSI Z39.50 +z39.50 210/udp wais #ANSI Z39.50 +914c/g 211/tcp #Texas Instruments 914C/G Terminal +914c/g 211/udp #Texas Instruments 914C/G Terminal +anet 212/tcp #ATEXSSTR +anet 212/udp #ATEXSSTR +ipx 213/tcp +ipx 213/udp +vmpwscs 214/tcp +vmpwscs 214/udp +softpc 215/tcp #Insignia Solutions +softpc 215/udp #Insignia Solutions +CAIlic 216/tcp atls #Computer Associates Int'l License Server +CAIlic 216/udp atls #Computer Associates Int'l License Server +dbase 217/tcp #dBASE Unix +dbase 217/udp #dBASE Unix +mpp 218/tcp #Netix Message Posting Protocol +mpp 218/udp #Netix Message Posting Protocol +uarps 219/tcp #Unisys ARPs +uarps 219/udp #Unisys ARPs +#imap3@220 was never used and never should have been allocated. See PR 46294. +#imap3 220/tcp #Interactive Mail Access Protocol v3 +#imap3 220/udp #Interactive Mail Access Protocol v3 +fln-spx 221/tcp #Berkeley rlogind with SPX auth +fln-spx 221/udp #Berkeley rlogind with SPX auth +rsh-spx 222/tcp #Berkeley rshd with SPX auth +rsh-spx 222/udp #Berkeley rshd with SPX auth +cdc 223/tcp #Certificate Distribution Center +cdc 223/udp #Certificate Distribution Center +direct 242/tcp +direct 242/udp +sur-meas 243/tcp #Survey Measurement +sur-meas 243/udp #Survey Measurement +dayna 244/tcp +dayna 244/udp +link 245/tcp +link 245/udp +dsp3270 246/tcp #Display Systems Protocol +dsp3270 246/udp #Display Systems Protocol +subntbcst_tftp 247/tcp #subntbcst_tftp +subntbcst_tftp 247/udp #subntbcst_tftp +bhfhs 248/tcp +bhfhs 248/udp +# 249-255 reserved +rap 256/tcp +rap 256/udp +set 257/tcp #secure electronic transaction +set 257/udp #secure electronic transaction +yak-chat 258/tcp #yak winsock personal chat +yak-chat 258/udp #yak winsock personal chat +esro-gen 259/tcp #efficient short remote operations +esro-gen 259/udp #efficient short remote operations +openport 260/tcp +openport 260/udp +nsiiops 261/tcp #iiop name service over tls/ssl +nsiiops 261/udp #iiop name service over tls/ssl +arcisdms 262/tcp +arcisdms 262/udp +hdap 263/tcp +hdap 263/udp +bgmp 264/tcp +bgmp 264/udp +# 265-279 unassigned +http-mgmt 280/tcp +http-mgmt 280/udp +personal-link 281/tcp +personal-link 281/udp +cableport-ax 282/tcp #cable port a/x +cableport-ax 282/udp #cable port a/x +# 283-307 unassigned +novastorbakcup 308/tcp #novastor backup +novastorbakcup 308/udp #novastor backup +entrusttime 309/tcp +entrusttime 309/udp +bhmds 310/tcp +bhmds 310/udp +asip-webadmin 311/tcp #appleshare ip webadmin +asip-webadmin 311/udp #appleshare ip webadmin +vslmp 312/tcp +vslmp 312/udp +magenta-logic 313/tcp +magenta-logic 313/udp +opalis-robot 314/tcp +opalis-robot 314/udp +dpsi 315/tcp +dpsi 315/udp +decauth 316/tcp +decauth 316/udp +zannet 317/tcp +zannet 317/udp +# 318-320 #unassigned +pip 321/tcp +pip 321/udp +# 322-343 #unassigned +pdap 344/tcp #Prospero Data Access Protocol +pdap 344/udp #Prospero Data Access Protocol +pawserv 345/tcp #Perf Analysis Workbench +pawserv 345/udp #Perf Analysis Workbench +zserv 346/tcp #Zebra server +zserv 346/udp #Zebra server +fatserv 347/tcp #Fatmen Server +fatserv 347/udp #Fatmen Server +csi-sgwp 348/tcp #Cabletron Management Protocol +csi-sgwp 348/udp #Cabletron Management Protocol +mftp 349/tcp +mftp 349/udp +matip-type-a 350/tcp #MATIP Type A +matip-type-a 350/udp +matip-type-b 351/tcp #MATIP Type B +matip-type-b 351/udp +bhoetty 351/tcp #unassigned but widespread use +bhoetty 351/udp #unassigned but widespread use +dtag-ste-sb 352/tcp #DTAG +dtag-ste-sb 352/udp #DTAG +bhoedap4 352/tcp #unassigned but widespread use +bhoedap4 352/udp #unassigned but widespread use +ndsauth 353/tcp +ndsauth 353/udp +bh611 354/tcp +bh611 354/udp +datex-asn 355/tcp +datex-asn 355/udp +cloanto-net-1 356/tcp #Cloanto Net 1 +cloanto-net-1 356/udp +bhevent 357/tcp +bhevent 357/udp +shrinkwrap 358/tcp +shrinkwrap 358/udp +tenebris_nts 359/tcp #Tenebris Network Trace Service +tenebris_nts 359/udp #Tenebris Network Trace Service +scoi2odialog 360/tcp +scoi2odialog 360/udp +semantix 361/tcp +semantix 361/udp +srssend 362/tcp #SRS Send +srssend 362/udp #SRS Send +rsvp_tunnel 363/tcp +rsvp_tunnel 363/udp +aurora-cmgr 364/tcp +aurora-cmgr 364/udp +dtk 365/tcp #Deception Tool Kit - Fred Cohen +dtk 365/udp #Deception Tool Kit - Fred Cohen +odmr 366/tcp +odmr 366/udp +mortgageware 367/tcp +mortgageware 367/udp +qbikgdp 368/tcp #QbikGDP +qbikgdp 368/udp +rpc2portmap 369/tcp +rpc2portmap 369/udp +codaauth2 370/tcp +codaauth2 370/udp +clearcase 371/tcp +clearcase 371/udp +ulistserv 372/tcp ulistproc #Unix Listserv +ulistserv 372/udp ulistproc #Unix Listserv +legent-1 373/tcp #Legent Corporation (now Computer Associates Intl.) +legent-1 373/udp #Legent Corporation (now Computer Associates Intl.) +legent-2 374/tcp #Legent Corporation (now Computer Associates Intl.) +legent-2 374/udp #Legent Corporation (now Computer Associates Intl.) +hassle 375/tcp +hassle 375/udp +nip 376/tcp #Amiga Envoy Network Inquiry Proto +nip 376/udp #Amiga Envoy Network Inquiry Proto +tnETOS 377/tcp #NEC Corporation +tnETOS 377/udp #NEC Corporation +dsETOS 378/tcp #NEC Corporation +dsETOS 378/udp #NEC Corporation +is99c 379/tcp #TIA/EIA/IS-99 modem client +is99c 379/udp #TIA/EIA/IS-99 modem client +is99s 380/tcp #TIA/EIA/IS-99 modem server +is99s 380/udp #TIA/EIA/IS-99 modem server +hp-collector 381/tcp #hp performance data collector +hp-collector 381/udp #hp performance data collector +hp-managed-node 382/tcp #hp performance data managed node +hp-managed-node 382/udp #hp performance data managed node +hp-alarm-mgr 383/tcp #hp performance data alarm manager +hp-alarm-mgr 383/udp #hp performance data alarm manager +arns 384/tcp #A Remote Network Server System +arns 384/udp #A Remote Network Server System +ibm-app 385/tcp #IBM Application +ibm-app 385/udp #IBM Application +asa 386/tcp #ASA Message Router Object Def. +asa 386/udp #ASA Message Router Object Def. +aurp 387/tcp #Appletalk Update-Based Routing Pro. +aurp 387/udp #Appletalk Update-Based Routing Pro. +unidata-ldm 388/tcp #Unidata LDM Version 4 +unidata-ldm 388/udp #Unidata LDM Version 4 +ldap 389/tcp #Lightweight Directory Access Protocol +ldap 389/udp #Lightweight Directory Access Protocol +uis 390/tcp +uis 390/udp +synotics-relay 391/tcp #SynOptics SNMP Relay Port +synotics-relay 391/udp #SynOptics SNMP Relay Port +synotics-broker 392/tcp #SynOptics Port Broker Port +synotics-broker 392/udp #SynOptics Port Broker Port +dis 393/tcp #Data Interpretation System +dis 393/udp #Data Interpretation System +embl-ndt 394/tcp #EMBL Nucleic Data Transfer +embl-ndt 394/udp #EMBL Nucleic Data Transfer +netcp 395/tcp #NETscout Control Protocol +netcp 395/udp #NETscout Control Protocol +netware-ip 396/tcp #Novell Netware over IP +netware-ip 396/udp #Novell Netware over IP +mptn 397/tcp #Multi Protocol Trans. Net. +mptn 397/udp #Multi Protocol Trans. Net. +kryptolan 398/tcp +kryptolan 398/udp +iso-tsap-c2 399/tcp #ISO-TSAP Class 2 +iso-tsap-c2 399/udp #ISO-TSAP Class 2 +work-sol 400/tcp #Workstation Solutions +work-sol 400/udp #Workstation Solutions +ups 401/tcp #Uninterruptible Power Supply +ups 401/udp #Uninterruptible Power Supply +genie 402/tcp #Genie Protocol +genie 402/udp #Genie Protocol +decap 403/tcp +decap 403/udp +nced 404/tcp +nced 404/udp +ncld 405/tcp +ncld 405/udp +imsp 406/tcp #Interactive Mail Support Protocol +imsp 406/udp #Interactive Mail Support Protocol +timbuktu 407/tcp +timbuktu 407/udp +prm-sm 408/tcp #Prospero Resource Manager Sys. Man. +prm-sm 408/udp #Prospero Resource Manager Sys. Man. +prm-nm 409/tcp #Prospero Resource Manager Node Man. +prm-nm 409/udp #Prospero Resource Manager Node Man. +decladebug 410/tcp #DECLadebug Remote Debug Protocol +decladebug 410/udp #DECLadebug Remote Debug Protocol +rmt 411/tcp #Remote MT Protocol +rmt 411/udp #Remote MT Protocol +synoptics-trap 412/tcp #Trap Convention Port +synoptics-trap 412/udp #Trap Convention Port +smsp 413/tcp +smsp 413/udp +infoseek 414/tcp +infoseek 414/udp +bnet 415/tcp +bnet 415/udp +silverplatter 416/tcp +silverplatter 416/udp +onmux 417/tcp +onmux 417/udp +hyper-g 418/tcp +hyper-g 418/udp +ariel1 419/tcp +ariel1 419/udp +smpte 420/tcp +smpte 420/udp +ariel2 421/tcp +ariel2 421/udp +ariel3 422/tcp +ariel3 422/udp +opc-job-start 423/tcp #IBM Operations Planning and Control Start +opc-job-start 423/udp #IBM Operations Planning and Control Start +opc-job-track 424/tcp #IBM Operations Planning and Control Track +opc-job-track 424/udp #IBM Operations Planning and Control Track +icad-el 425/tcp +icad-el 425/udp +smartsdp 426/tcp +smartsdp 426/udp +svrloc 427/tcp #Server Location +svrloc 427/udp #Server Location +ocs_cmu 428/tcp +ocs_cmu 428/udp +ocs_amu 429/tcp +ocs_amu 429/udp +utmpsd 430/tcp +utmpsd 430/udp +utmpcd 431/tcp +utmpcd 431/udp +iasd 432/tcp +iasd 432/udp +nnsp 433/tcp +nnsp 433/udp +mobileip-agent 434/tcp +mobileip-agent 434/udp +mobilip-mn 435/tcp +mobilip-mn 435/udp +dna-cml 436/tcp +dna-cml 436/udp +comscm 437/tcp +comscm 437/udp +dsfgw 438/tcp +dsfgw 438/udp +dasp 439/tcp +dasp 439/udp +sgcp 440/tcp +sgcp 440/udp +decvms-sysmgt 441/tcp +decvms-sysmgt 441/udp +cvc_hostd 442/tcp +cvc_hostd 442/udp +https 443/tcp +https 443/udp +snpp 444/tcp #Simple Network Paging Protocol +snpp 444/udp #Simple Network Paging Protocol +# [RFC1568] +microsoft-ds 445/tcp +microsoft-ds 445/udp +ddm-rdb 446/tcp +ddm-rdb 446/udp +ddm-dfm 447/tcp +ddm-dfm 447/udp +ddm-ssl 448/tcp ddm-byte +ddm-ssl 448/udp ddm-byte +as-servermap 449/tcp #AS Server Mapper +as-servermap 449/udp #AS Server Mapper +tserver 450/tcp +tserver 450/udp +sfs-smp-net 451/tcp #Cray Network Semaphore server +sfs-smp-net 451/udp #Cray Network Semaphore server +sfs-config 452/tcp #Cray SFS config server +sfs-config 452/udp #Cray SFS config server +creativeserver 453/tcp #CreativeServer +creativeserver 453/udp #CreativeServer +contentserver 454/tcp #ContentServer +contentserver 454/udp #ContentServer +creativepartnr 455/tcp #CreativePartnr +creativepartnr 455/udp #CreativePartnr +macon-tcp 456/tcp +macon-udp 456/udp +scohelp 457/tcp +scohelp 457/udp +appleqtc 458/tcp #apple quick time +appleqtc 458/udp #apple quick time +ampr-rcmd 459/tcp +ampr-rcmd 459/udp +skronk 460/tcp +skronk 460/udp +datasurfsrv 461/tcp +datasurfsrv 461/udp +datasurfsrvsec 462/tcp +datasurfsrvsec 462/udp +alpes 463/tcp +alpes 463/udp +# +kpasswd5 464/tcp # Kerberos (v5) +kpasswd5 464/udp # Kerberos (v5) +#PROBLEMS!============================================================== +# IANA has offically assigned these two ports as ``kpasswd'' +#kpasswd 464/tcp # Kerberos (v5) +#kpasswd 464/udp # Kerberos (v5) +#PROBLEMS!============================================================== +smtps 465/tcp #smtp protocol over TLS/SSL (was ssmtp) +smtps 465/udp #smtp protocol over TLS/SSL (was ssmtp) +digital-vrc 466/tcp +digital-vrc 466/udp +mylex-mapd 467/tcp +mylex-mapd 467/udp +photuris 468/tcp +photuris 468/udp +rcp 469/tcp #Radio Control Protocol +rcp 469/udp #Radio Control Protocol +scx-proxy 470/tcp +scx-proxy 470/udp +mondex 471/tcp +mondex 471/udp +ljk-login 472/tcp +ljk-login 472/udp +hybrid-pop 473/tcp +hybrid-pop 473/udp +tn-tl-w1 474/tcp +tn-tl-w2 474/udp +tcpnethaspsrv 475/tcp +tcpnethaspsrv 475/udp +tn-tl-fd1 476/tcp +tn-tl-fd1 476/udp +ss7ns 477/tcp +ss7ns 477/udp +spsc 478/tcp +spsc 478/udp +iafserver 479/tcp +iafserver 479/udp +iafdbase 480/tcp +iafdbase 480/udp +ph 481/tcp +ph 481/udp +bgs-nsi 482/tcp +bgs-nsi 482/udp +ulpnet 483/tcp +ulpnet 483/udp +integra-sme 484/tcp #Integra Software Management Environment +integra-sme 484/udp #Integra Software Management Environment +powerburst 485/tcp #Air Soft Power Burst +powerburst 485/udp #Air Soft Power Burst +avian 486/tcp +avian 486/udp +saft 487/tcp #saft Simple Asynchronous File Transfer +saft 487/udp #saft Simple Asynchronous File Transfer +gss-http 488/tcp +gss-http 488/udp +nest-protocol 489/tcp +nest-protocol 489/udp +micom-pfs 490/tcp +micom-pfs 490/udp +go-login 491/tcp +go-login 491/udp +ticf-1 492/tcp #Transport Independent Convergence for FNA +ticf-1 492/udp #Transport Independent Convergence for FNA +ticf-2 493/tcp #Transport Independent Convergence for FNA +ticf-2 493/udp #Transport Independent Convergence for FNA +pov-ray 494/tcp +pov-ray 494/udp +intecourier 495/tcp +intecourier 495/udp +pim-rp-disc 496/tcp +pim-rp-disc 496/udp +dantz 497/tcp +dantz 497/udp +siam 498/tcp +siam 498/udp +iso-ill 499/tcp #ISO ILL Protocol +iso-ill 499/udp #ISO ILL Protocol +isakmp 500/tcp +isakmp 500/udp +stmf 501/tcp +stmf 501/udp +asa-appl-proto 502/tcp +asa-appl-proto 502/udp +intrinsa 503/tcp +intrinsa 503/udp +citadel 504/tcp +citadel 504/udp +mailbox-lm 505/tcp +mailbox-lm 505/udp +ohimsrv 506/tcp +ohimsrv 506/udp +crs 507/tcp +crs 507/udp +xvttp 508/tcp +xvttp 508/udp +snare 509/tcp +snare 509/udp +fcp 510/tcp #FirstClass Protocol +fcp 510/udp #FirstClass Protocol +passgo 511/tcp +passgo 511/udp +# +# Berkeley-specific services +# +exec 512/tcp #remote process execution; +# authentication performed using +# passwords and UNIX login names +biff 512/udp comsat #used by mail system to notify users +# of new mail received; currently +# receives messages only from +# processes on the same machine +login 513/tcp #remote login a la telnet; +# automatic authentication performed +# based on priviledged port numbers +# and distributed data bases which +# identify "authentication domains" +who 513/udp whod #maintains data bases showing who's +# logged in to machines on a local +# net and the load average of the +# machine +shell 514/tcp cmd #like exec, but automatic +# authentication is performed as for +# login server +syslog 514/udp +printer 515/tcp spooler +printer 515/udp spooler +videotex 516/tcp +videotex 516/udp +talk 517/tcp #like tenex link, but across +# machine - unfortunately, doesn't +# use link protocol (this is actually +# just a rendezvous port from which a +# tcp connection is established) +talk 517/udp #like tenex link, but across +# machine - unfortunately, doesn't +# use link protocol (this is actually +# just a rendezvous port from which a +# tcp connection is established) +ntalk 518/tcp +ntalk 518/udp +utime 519/tcp unixtime +utime 519/udp unixtime +efs 520/tcp #extended file name server +router 520/udp route routed #local routing process (on site); +# uses variant of Xerox NS routing +# information protocol +ripng 521/tcp +ripng 521/udp +ulp 522/tcp +ulp 522/udp +ibm-db2 523/tcp +ibm-db2 523/udp +ncp 524/tcp +ncp 524/udp +timed 525/tcp timeserver +timed 525/udp timeserver +tempo 526/tcp newdate +tempo 526/udp newdate +stx 527/tcp #Stock IXChange +stx 527/udp #Stock IXChange +custix 528/tcp #Customer IXChange +custix 528/udp #Customer IXChange +irc-serv 529/tcp +irc-serv 529/udp +courier 530/tcp rpc +courier 530/udp rpc +conference 531/tcp chat +conference 531/udp chat +netnews 532/tcp readnews +netnews 532/udp readnews +netwall 533/tcp #for emergency broadcasts +netwall 533/udp #for emergency broadcasts +mm-admin 534/tcp #MegaMedia Admin +mm-admin 534/udp #MegaMedia Admin +iiop 535/tcp +iiop 535/udp +opalis-rdv 536/tcp +opalis-rdv 536/udp +nmsp 537/tcp #Networked Media Streaming Protocol +nmsp 537/udp #Networked Media Streaming Protocol +gdomap 538/tcp +gdomap 538/udp +apertus-ldp 539/tcp #Apertus Technologies Load Determination +apertus-ldp 539/udp #Apertus Technologies Load Determination +uucp 540/tcp uucpd +uucp 540/udp uucpd +uucp-rlogin 541/tcp +uucp-rlogin 541/udp +commerce 542/tcp +commerce 542/udp +klogin 543/tcp # Kerberos (v4/v5) +klogin 543/udp # Kerberos (v4/v5) +kshell 544/tcp krcmd # Kerberos (v4/v5) +kshell 544/udp krcmd # Kerberos (v4/v5) +appleqtcsrvr 545/tcp +appleqtcsrvr 545/udp +dhcpv6-client 546/tcp #DHCPv6 Client +dhcpv6-client 546/udp #DHCPv6 Client +dhcpv6-server 547/tcp #DHCPv6 Server +dhcpv6-server 547/udp #DHCPv6 Server +afpovertcp 548/tcp #AFP over TCP +afpovertcp 548/udp #AFP over TCP +idfp 549/tcp +idfp 549/udp +new-rwho 550/tcp new-who +new-rwho 550/udp new-who +cybercash 551/tcp +cybercash 551/udp +deviceshare 552/tcp +deviceshare 552/udp +pirp 553/tcp +pirp 553/udp +rtsp 554/tcp #Real Time Stream Control Protocol +rtsp 554/udp #Real Time Stream Control Protocol +dsf 555/tcp +dsf 555/udp +remotefs 556/tcp rfs rfs_server # Brunhoff remote filesystem +remotefs 556/udp rfs rfs_server # Brunhoff remote filesystem +openvms-sysipc 557/tcp +openvms-sysipc 557/udp +sdnskmp 558/tcp +sdnskmp 558/udp +teedtap 559/tcp +teedtap 559/udp +rmonitor 560/tcp rmonitord +rmonitor 560/udp rmonitord +monitor 561/tcp +monitor 561/udp +chshell 562/tcp chcmd +chshell 562/udp chcmd +nntps 563/tcp snntp #nntp protocol over TLS/SSL +nntps 563/udp snntp #nntp protocol over TLS/SSL +9pfs 564/tcp #plan 9 file service +9pfs 564/udp #plan 9 file service +whoami 565/tcp +whoami 565/udp +streettalk 566/tcp +banyan-rpc 567/tcp +banyan-rpc 567/udp +ms-shuttle 568/tcp #Microsoft shuttle +ms-shuttle 568/udp #Microsoft shuttle +ms-rome 569/tcp #Microsoft rome +ms-rome 569/udp #Microsoft rome +meter 570/tcp #demon +meter 570/udp #demon +umeter 571/tcp #udemon +umeter 571/udp #udemon +sonar 572/tcp +sonar 572/udp +banyan-vip 573/tcp +banyan-vip 573/udp +ftp-agent 574/tcp #FTP Software Agent System +ftp-agent 574/udp #FTP Software Agent System +vemmi 575/tcp +vemmi 575/udp +ipcd 576/tcp +ipcd 576/udp +vnas 577/tcp +vnas 577/udp +ipdd 578/tcp +ipdd 578/udp +decbsrv 579/tcp +decbsrv 579/udp +sntp-heartbeat 580/tcp +sntp-heartbeat 580/udp +bdp 581/tcp #Bundle Discovery Protocol +bdp 581/udp #Bundle Discovery Protocol +scc-security 582/tcp +scc-security 582/udp +philips-vc 583/tcp #Philips Video-Conferencing +philips-vc 583/udp #Philips Video-Conferencing +keyserver 584/tcp +keyserver 584/udp +#imap4-ssl@585 never should have been allocated. See PR 46294. +#imap4-ssl 585/tcp #IMAP4+SSL (use of 585 is not recommended, +#imap4-ssl 585/udp # use 993 instead) +password-chg 586/tcp +password-chg 586/udp +submission 587/tcp +submission 587/udp +cal 588/tcp +cal 588/udp +eyelink 589/tcp +eyelink 589/udp +tns-cml 590/tcp +tns-cml 590/udp +http-alt 591/tcp #FileMaker, Inc. - HTTP Alternate (see Port 80) +http-alt 591/udp #FileMaker, Inc. - HTTP Alternate (see Port 80) +eudora-set 592/tcp +eudora-set 592/udp +http-rpc-epmap 593/tcp #HTTP RPC Ep Map +http-rpc-epmap 593/udp #HTTP RPC Ep Map +tpip 594/tcp +tpip 594/udp +cab-protocol 595/tcp +cab-protocol 595/udp +smsd 596/tcp +smsd 596/udp +ptcnameservice 597/tcp #PTC Name Service +ptcnameservice 597/udp #PTC Name Service +sco-websrvrmg3 598/tcp #SCO Web Server Manager 3 +sco-websrvrmg3 598/udp #SCO Web Server Manager 3 +acp 599/tcp #Aeolon Core Protocol +acp 599/udp #Aeolon Core Protocol +ipcserver 600/tcp #Sun IPC server +ipcserver 600/udp #Sun IPC server +nqs 607/tcp +nqs 607/udp +urm 606/tcp #Cray Unified Resource Manager +urm 606/udp #Cray Unified Resource Manager +sift-uft 608/tcp #Sender-Initiated/Unsolicited File Transfer +sift-uft 608/udp #Sender-Initiated/Unsolicited File Transfer +npmp-trap 609/tcp +npmp-trap 609/udp +npmp-local 610/tcp +npmp-local 610/udp +npmp-gui 611/tcp +npmp-gui 611/udp +sshell 614/tcp #SSLshell +sshell 614/udp +ipp 631/tcp #IPP (Internet Printing Protocol) +ipp 631/udp #IPP (Internet Printing Protocol) +ginad 634/tcp +ginad 634/udp +ldaps 636/tcp sldap #ldap protocol over TLS/SSL +ldaps 636/udp sldap +mdqs 666/tcp +mdqs 666/udp +#PROBLEMS!=============================================== +doom 666/tcp #doom Id Software +doom 666/udp #doom Id Software +#PROBLEMS!=============================================== +acap 674/tcp #Application Configuration Access Protocol +acap 674/udp #Application Configuration Access Protocol +elcsd 704/tcp #errlog copy/server daemon +elcsd 704/udp #errlog copy/server daemon +entrustmanager 709/tcp #EntrustManager +entrustmanager 709/udp #EntrustManager +netviewdm1 729/tcp #IBM NetView DM/6000 Server/Client +netviewdm1 729/udp #IBM NetView DM/6000 Server/Client +netviewdm2 730/tcp #IBM NetView DM/6000 send/tcp +netviewdm2 730/udp #IBM NetView DM/6000 send/tcp +netviewdm3 731/tcp #IBM NetView DM/6000 receive/tcp +netviewdm3 731/udp #IBM NetView DM/6000 receive/tcp +netgw 741/tcp +netgw 741/udp +netrcs 742/tcp #Network based Rev. Cont. Sys. +netrcs 742/udp #Network based Rev. Cont. Sys. +flexlm 744/tcp #Flexible License Manager +flexlm 744/udp #Flexible License Manager +fujitsu-dev 747/tcp #Fujitsu Device Control +fujitsu-dev 747/udp #Fujitsu Device Control +ris-cm 748/tcp #Russell Info Sci Calendar Manager +ris-cm 748/udp #Russell Info Sci Calendar Manager +kerberos-adm 749/tcp #Kerberos administration (v5) +kerberos-adm 749/udp #Kerberos administration (v5) +kerberos-iv 750/udp kdc # Kerberos (v4) +kerberos-iv 750/tcp kdc # Kerberos (v4) +#PROBLEMS!======================================================== +#rfile 750/tcp +#loadav 750/udp +#PROBLEMS!======================================================== +kerberos_master 751/tcp # Kerberos `kadmin' (v4) +kerberos_master 751/udp # Kerberos `kadmin' (v4) +#PROBLEMS!======================================================== +pump 751/tcp +pump 751/udp +#PROBLEMS!======================================================== +qrh 752/tcp +qrh 752/udp +rrh 753/tcp +rrh 753/udp +krb_prop 754/tcp krb5_prop # kerberos/v5 server propagation +#PROBLEMS!======================================================== +tell 754/tcp #send +#PROBLEMS!======================================================== +tell 754/udp #send +nlogin 758/tcp +nlogin 758/udp +con 759/tcp +con 759/udp +krbupdate 760/tcp kreg # Kerberos (v4) registration +#PROBLEMS!======================================================== +ns 760/tcp +#PROBLEMS!======================================================== +ns 760/udp +kpasswd 761/tcp kpwd # Kerberos (v4) "passwd" +#PROBLEMS!======================================================== +rxe 761/tcp +#PROBLEMS!======================================================== +rxe 761/udp +quotad 762/tcp +quotad 762/udp +cycleserv 763/tcp +cycleserv 763/udp +omserv 764/tcp +omserv 764/udp +webster 765/tcp +webster 765/udp +phonebook 767/tcp #phone +phonebook 767/udp #phone +vid 769/tcp +vid 769/udp +cadlock 770/tcp +cadlock 770/udp +rtip 771/tcp +rtip 771/udp +cycleserv2 772/tcp +cycleserv2 772/udp +submit 773/tcp +notify 773/udp +rpasswd 774/tcp +acmaint_dbd 774/udp +entomb 775/tcp +acmaint_transd 775/udp +wpages 776/tcp +wpages 776/udp +wpgs 780/tcp +wpgs 780/udp +concert 786/tcp +concert 786/udp +mdbs_daemon 800/tcp +mdbs_daemon 800/udp +device 801/tcp +device 801/udp +supfilesrv 871/tcp # for SUP +rsync 873/tcp +rsync 873/udp +accessbuilder 888/tcp +accessbuilder 888/udp +swat 901/tcp # samba web configuration tool +ftps-data 989/tcp # ftp protocol, data, over TLS/SSL +ftps-data 989/udp +ftps 990/tcp # ftp protocol, control, over TLS/SSL +ftps 990/udp +telnets 992/tcp # telnet protocol over TLS/SSL +telnets 992/udp +imaps 993/tcp # imap4 protocol over TLS/SSL +imaps 993/udp +ircs 994/tcp # irc protocol over TLS/SSL +ircs 994/udp +pop3s 995/tcp spop3 # pop3 protocol over TLS/SSL +pop3s 995/udp spop3 +vsinet 996/tcp +vsinet 996/udp +maitrd 997/tcp +maitrd 997/udp +busboy 998/tcp +puparp 998/udp +garcon 999/tcp +applix 999/udp #Applix ac +puprouter 999/tcp +puprouter 999/udp +cadlock 1000/tcp +ock 1000/udp +# +# REGISTERED PORT NUMBERS +# +blackjack 1025/tcp #network blackjack +blackjack 1025/udp #network blackjack +iad1 1030/tcp #BBN IAD +iad1 1030/udp #BBN IAD +iad2 1031/tcp #BBN IAD +iad2 1031/udp #BBN IAD +iad3 1032/tcp #BBN IAD +iad3 1032/udp #BBN IAD +nim 1058/tcp +nim 1058/udp +nimreg 1059/tcp +nimreg 1059/udp +instl_boots 1067/tcp #Installation Bootstrap Proto. Serv. +instl_boots 1067/udp #Installation Bootstrap Proto. Serv. +instl_bootc 1068/tcp #Installation Bootstrap Proto. Cli. +instl_bootc 1068/udp #Installation Bootstrap Proto. Cli. +socks 1080/tcp +socks 1080/udp +ansoft-lm-1 1083/tcp #Anasoft License Manager +ansoft-lm-1 1083/udp #Anasoft License Manager +ansoft-lm-2 1084/tcp #Anasoft License Manager +ansoft-lm-2 1084/udp #Anasoft License Manager +webobjects 1085/tcp #Web Objects +webobjects 1085/udp #Web Objects +kpop 1109/tcp #Unofficial +kpop 1109/udp #Unofficial +nfsd-status 1110/tcp #Cluster status info +nfsd-keepalive 1110/udp #Client status info +supfiledbg 1127/tcp # for SUP +nfa 1155/tcp #Network File Access +nfa 1155/udp #Network File Access +phone 1167/udp #conference calling +skkserv 1178/tcp #SKK (kanji input) +lupa 1212/tcp +lupa 1212/udp +nerv 1222/tcp #SNI R&D network +nerv 1222/udp #SNI R&D network +hermes 1248/tcp +hermes 1248/udp +healthd 1281/tcp #healthd +healthd 1281/udp #healthd +alta-ana-lm 1346/tcp #Alta Analytics License Manager +alta-ana-lm 1346/udp #Alta Analytics License Manager +bbn-mmc 1347/tcp #multi media conferencing +bbn-mmc 1347/udp #multi media conferencing +bbn-mmx 1348/tcp #multi media conferencing +bbn-mmx 1348/udp #multi media conferencing +sbook 1349/tcp #Registration Network Protocol +sbook 1349/udp #Registration Network Protocol +editbench 1350/tcp #Registration Network Protocol +editbench 1350/udp #Registration Network Protocol +equationbuilder 1351/tcp #Digital Tool Works (MIT) +equationbuilder 1351/udp #Digital Tool Works (MIT) +lotusnote 1352/tcp #Lotus Note +lotusnote 1352/udp #Lotus Note +relief 1353/tcp #Relief Consulting +relief 1353/udp #Relief Consulting +rightbrain 1354/tcp #RightBrain Software +rightbrain 1354/udp #RightBrain Software +intuitive-edge 1355/tcp #Intuitive Edge +intuitive-edge 1355/udp #Intuitive Edge +cuillamartin 1356/tcp #CuillaMartin Company +cuillamartin 1356/udp #CuillaMartin Company +pegboard 1357/tcp #Electronic PegBoard +pegboard 1357/udp #Electronic PegBoard +connlcli 1358/tcp +connlcli 1358/udp +ftsrv 1359/tcp +ftsrv 1359/udp +mimer 1360/tcp +mimer 1360/udp +linx 1361/tcp +linx 1361/udp +timeflies 1362/tcp +timeflies 1362/udp +ndm-requester 1363/tcp #Network DataMover Requester +ndm-requester 1363/udp #Network DataMover Requester +ndm-server 1364/tcp #Network DataMover Server +ndm-server 1364/udp #Network DataMover Server +adapt-sna 1365/tcp #Network Software Associates +adapt-sna 1365/udp #Network Software Associates +netware-csp 1366/tcp #Novell NetWare Comm Service Platform +netware-csp 1366/udp #Novell NetWare Comm Service Platform +dcs 1367/tcp +dcs 1367/udp +screencast 1368/tcp +screencast 1368/udp +gv-us 1369/tcp #GlobalView to Unix Shell +gv-us 1369/udp #GlobalView to Unix Shell +us-gv 1370/tcp #Unix Shell to GlobalView +us-gv 1370/udp #Unix Shell to GlobalView +fc-cli 1371/tcp #Fujitsu Config Protocol +fc-cli 1371/udp #Fujitsu Config Protocol +fc-ser 1372/tcp #Fujitsu Config Protocol +fc-ser 1372/udp #Fujitsu Config Protocol +chromagrafx 1373/tcp +chromagrafx 1373/udp +molly 1374/tcp #EPI Software Systems +molly 1374/udp #EPI Software Systems +bytex 1375/tcp +bytex 1375/udp +ibm-pps 1376/tcp #IBM Person to Person Software +ibm-pps 1376/udp #IBM Person to Person Software +cichlid 1377/tcp #Cichlid License Manager +cichlid 1377/udp #Cichlid License Manager +elan 1378/tcp #Elan License Manager +elan 1378/udp #Elan License Manager +dbreporter 1379/tcp #Integrity Solutions +dbreporter 1379/udp #Integrity Solutions +telesis-licman 1380/tcp #Telesis Network License Manager +telesis-licman 1380/udp #Telesis Network License Manager +apple-licman 1381/tcp #Apple Network License Manager +apple-licman 1381/udp #Apple Network License Manager +#udt_os 1382/tcp +#udt_os 1382/udp +gwha 1383/tcp #GW Hannaway Network License Manager +gwha 1383/udp #GW Hannaway Network License Manager +os-licman 1384/tcp #Objective Solutions License Manager +os-licman 1384/udp #Objective Solutions License Manager +atex_elmd 1385/tcp #Atex Publishing License Manager +atex_elmd 1385/udp #Atex Publishing License Manager +checksum 1386/tcp #CheckSum License Manager +checksum 1386/udp #CheckSum License Manager +cadsi-lm 1387/tcp #Computer Aided Design Software Inc LM +cadsi-lm 1387/udp #Computer Aided Design Software Inc LM +objective-dbc 1388/tcp #Objective Solutions DataBase Cache +objective-dbc 1388/udp #Objective Solutions DataBase Cache +iclpv-dm 1389/tcp #Document Manager +iclpv-dm 1389/udp #Document Manager +iclpv-sc 1390/tcp #Storage Controller +iclpv-sc 1390/udp #Storage Controller +iclpv-sas 1391/tcp #Storage Access Server +iclpv-sas 1391/udp #Storage Access Server +iclpv-pm 1392/tcp #Print Manager +iclpv-pm 1392/udp #Print Manager +iclpv-nls 1393/tcp #Network Log Server +iclpv-nls 1393/udp #Network Log Server +iclpv-nlc 1394/tcp #Network Log Client +iclpv-nlc 1394/udp #Network Log Client +iclpv-wsm 1395/tcp #PC Workstation Manager software +iclpv-wsm 1395/udp #PC Workstation Manager software +dvl-activemail 1396/tcp #DVL Active Mail +dvl-activemail 1396/udp #DVL Active Mail +audio-activmail 1397/tcp #Audio Active Mail +audio-activmail 1397/udp #Audio Active Mail +video-activmail 1398/tcp #Video Active Mail +video-activmail 1398/udp #Video Active Mail +cadkey-licman 1399/tcp #Cadkey License Manager +cadkey-licman 1399/udp #Cadkey License Manager +cadkey-tablet 1400/tcp #Cadkey Tablet Daemon +cadkey-tablet 1400/udp #Cadkey Tablet Daemon +goldleaf-licman 1401/tcp #Goldleaf License Manager +goldleaf-licman 1401/udp #Goldleaf License Manager +prm-sm-np 1402/tcp #Prospero Resource Manager +prm-sm-np 1402/udp #Prospero Resource Manager +prm-nm-np 1403/tcp #Prospero Resource Manager +prm-nm-np 1403/udp #Prospero Resource Manager +igi-lm 1404/tcp #Infinite Graphics License Manager +igi-lm 1404/udp #Infinite Graphics License Manager +ibm-res 1405/tcp #IBM Remote Execution Starter +ibm-res 1405/udp #IBM Remote Execution Starter +netlabs-lm 1406/tcp #NetLabs License Manager +netlabs-lm 1406/udp #NetLabs License Manager +dbsa-lm 1407/tcp #DBSA License Manager +dbsa-lm 1407/udp #DBSA License Manager +sophia-lm 1408/tcp #Sophia License Manager +sophia-lm 1408/udp #Sophia License Manager +here-lm 1409/tcp #Here License Manager +here-lm 1409/udp #Here License Manager +hiq 1410/tcp #HiQ License Manager +hiq 1410/udp #HiQ License Manager +af 1411/tcp #AudioFile +af 1411/udp #AudioFile +innosys 1412/tcp +innosys 1412/udp +innosys-acl 1413/tcp +innosys-acl 1413/udp +ibm-mqseries 1414/tcp #IBM MQSeries +ibm-mqseries 1414/udp #IBM MQSeries +dbstar 1415/tcp +dbstar 1415/udp +novell-lu6.2 1416/tcp #Novell LU6.2 +novell-lu6.2 1416/udp #Novell LU6.2 +timbuktu-srv1 1417/tcp #Timbuktu Service 1 Port +timbuktu-srv1 1417/udp #Timbuktu Service 1 Port +timbuktu-srv2 1418/tcp #Timbuktu Service 2 Port +timbuktu-srv2 1418/udp #Timbuktu Service 2 Port +timbuktu-srv3 1419/tcp #Timbuktu Service 3 Port +timbuktu-srv3 1419/udp #Timbuktu Service 3 Port +timbuktu-srv4 1420/tcp #Timbuktu Service 4 Port +timbuktu-srv4 1420/udp #Timbuktu Service 4 Port +gandalf-lm 1421/tcp #Gandalf License Manager +gandalf-lm 1421/udp #Gandalf License Manager +autodesk-lm 1422/tcp #Autodesk License Manager +autodesk-lm 1422/udp #Autodesk License Manager +essbase 1423/tcp #Essbase Arbor Software +essbase 1423/udp #Essbase Arbor Software +hybrid 1424/tcp #Hybrid Encryption Protocol +hybrid 1424/udp #Hybrid Encryption Protocol +zion-lm 1425/tcp #Zion Software License Manager +zion-lm 1425/udp #Zion Software License Manager +sas-1 1426/tcp #Satellite-data Acquisition System 1 +sas-1 1426/udp #Satellite-data Acquisition System 1 +mloadd 1427/tcp #mloadd monitoring tool +mloadd 1427/udp #mloadd monitoring tool +informatik-lm 1428/tcp #Informatik License Manager +informatik-lm 1428/udp #Informatik License Manager +nms 1429/tcp #Hypercom NMS +nms 1429/udp #Hypercom NMS +tpdu 1430/tcp #Hypercom TPDU +tpdu 1430/udp #Hypercom TPDU +rgtp 1431/tcp #Reverse Gossip Transport +rgtp 1431/udp #Reverse Gossip Transport +blueberry-lm 1432/tcp #Blueberry Software License Manager +blueberry-lm 1432/udp #Blueberry Software License Manager +ms-sql-s 1433/tcp #Microsoft-SQL-Server +ms-sql-s 1433/udp #Microsoft-SQL-Server +ms-sql-m 1434/tcp #Microsoft-SQL-Monitor +ms-sql-m 1434/udp #Microsoft-SQL-Monitor +ibm-cics 1435/tcp +ibm-cics 1435/udp +sas-2 1436/tcp #Satellite-data Acquisition System 2 +sas-2 1436/udp #Satellite-data Acquisition System 2 +tabula 1437/tcp +tabula 1437/udp +eicon-server 1438/tcp #Eicon Security Agent/Server +eicon-server 1438/udp #Eicon Security Agent/Server +eicon-x25 1439/tcp #Eicon X25/SNA Gateway +eicon-x25 1439/udp #Eicon X25/SNA Gateway +eicon-slp 1440/tcp #Eicon Service Location Protocol +eicon-slp 1440/udp #Eicon Service Location Protocol +cadis-1 1441/tcp #Cadis License Management +cadis-1 1441/udp #Cadis License Management +cadis-2 1442/tcp #Cadis License Management +cadis-2 1442/udp #Cadis License Management +ies-lm 1443/tcp #Integrated Engineering Software +ies-lm 1443/udp #Integrated Engineering Software +marcam-lm 1444/tcp #Marcam License Management +marcam-lm 1444/udp #Marcam License Management +proxima-lm 1445/tcp #Proxima License Manager +proxima-lm 1445/udp #Proxima License Manager +ora-lm 1446/tcp #Optical Research Associates License Manager +ora-lm 1446/udp #Optical Research Associates License Manager +apri-lm 1447/tcp #Applied Parallel Research LM +apri-lm 1447/udp #Applied Parallel Research LM +oc-lm 1448/tcp #OpenConnect License Manager +oc-lm 1448/udp #OpenConnect License Manager +peport 1449/tcp +peport 1449/udp +dwf 1450/tcp #Tandem Distributed Workbench Facility +dwf 1450/udp #Tandem Distributed Workbench Facility +infoman 1451/tcp #IBM Information Management +infoman 1451/udp #IBM Information Management +gtegsc-lm 1452/tcp #GTE Government Systems License Man +gtegsc-lm 1452/udp #GTE Government Systems License Man +genie-lm 1453/tcp #Genie License Manager +genie-lm 1453/udp #Genie License Manager +interhdl_elmd 1454/tcp #interHDL License Manager +interhdl_elmd 1454/udp #interHDL License Manager +esl-lm 1455/tcp #ESL License Manager +esl-lm 1455/udp #ESL License Manager +dca 1456/tcp +dca 1456/udp +valisys-lm 1457/tcp #Valisys License Manager +valisys-lm 1457/udp #Valisys License Manager +nrcabq-lm 1458/tcp #Nichols Research Corp. +nrcabq-lm 1458/udp #Nichols Research Corp. +proshare1 1459/tcp #Proshare Notebook Application +proshare1 1459/udp #Proshare Notebook Application +proshare2 1460/tcp #Proshare Notebook Application +proshare2 1460/udp #Proshare Notebook Application +ibm_wrless_lan 1461/tcp #IBM Wireless LAN +ibm_wrless_lan 1461/udp #IBM Wireless LAN +world-lm 1462/tcp #World License Manager +world-lm 1462/udp #World License Manager +nucleus 1463/tcp +nucleus 1463/udp +msl_lmd 1464/tcp #MSL License Manager +msl_lmd 1464/udp #MSL License Manager +pipes 1465/tcp #Pipes Platform +pipes 1465/udp #Pipes Platform mfarlin@peerlogic.com +oceansoft-lm 1466/tcp #Ocean Software License Manager +oceansoft-lm 1466/udp #Ocean Software License Manager +csdmbase 1467/tcp +csdmbase 1467/udp +csdm 1468/tcp +csdm 1468/udp +aal-lm 1469/tcp #Active Analysis Limited License Manager +aal-lm 1469/udp #Active Analysis Limited License Manager +uaiact 1470/tcp #Universal Analytics +uaiact 1470/udp #Universal Analytics +csdmbase 1471/tcp +csdmbase 1471/udp +csdm 1472/tcp +csdm 1472/udp +openmath 1473/tcp +openmath 1473/udp +telefinder 1474/tcp +telefinder 1474/udp +taligent-lm 1475/tcp #Taligent License Manager +taligent-lm 1475/udp #Taligent License Manager +clvm-cfg 1476/tcp +clvm-cfg 1476/udp +ms-sna-server 1477/tcp +ms-sna-server 1477/udp +ms-sna-base 1478/tcp +ms-sna-base 1478/udp +dberegister 1479/tcp +dberegister 1479/udp +pacerforum 1480/tcp +pacerforum 1480/udp +airs 1481/tcp +airs 1481/udp +miteksys-lm 1482/tcp #Miteksys License Manager +miteksys-lm 1482/udp #Miteksys License Manager +afs 1483/tcp #AFS License Manager +afs 1483/udp #AFS License Manager +confluent 1484/tcp #Confluent License Manager +confluent 1484/udp #Confluent License Manager +lansource 1485/tcp +lansource 1485/udp +nms_topo_serv 1486/tcp +nms_topo_serv 1486/udp +localinfosrvr 1487/tcp +localinfosrvr 1487/udp +docstor 1488/tcp +docstor 1488/udp +dmdocbroker 1489/tcp +dmdocbroker 1489/udp +insitu-conf 1490/tcp +insitu-conf 1490/udp +anynetgateway 1491/tcp +anynetgateway 1491/udp +stone-design-1 1492/tcp +stone-design-1 1492/udp +netmap_lm 1493/tcp +netmap_lm 1493/udp +ica 1494/tcp +ica 1494/udp +cvc 1495/tcp +cvc 1495/udp +liberty-lm 1496/tcp +liberty-lm 1496/udp +rfx-lm 1497/tcp +rfx-lm 1497/udp +watcom-sql 1498/tcp +watcom-sql 1498/udp +fhc 1499/tcp #Federico Heinz Consultora +fhc 1499/udp #Federico Heinz Consultora +vlsi-lm 1500/tcp #VLSI License Manager +vlsi-lm 1500/udp #VLSI License Manager +sas-3 1501/tcp #Satellite-data Acquisition System 3 +sas-3 1501/udp #Satellite-data Acquisition System 3 +shivadiscovery 1502/tcp #Shiva +shivadiscovery 1502/udp #Shiva +imtc-mcs 1503/tcp #Databeam +imtc-mcs 1503/udp #Databeam +evb-elm 1504/tcp #EVB Software Engineering License Manager +evb-elm 1504/udp #EVB Software Engineering License Manager +funkproxy 1505/tcp #Funk Software, Inc. +funkproxy 1505/udp #Funk Software, Inc. +utcd 1506/tcp #Universal Time daemon (utcd) +utcd 1506/udp #Universal Time daemon (utcd) +symplex 1507/tcp +symplex 1507/udp +diagmond 1508/tcp +diagmond 1508/udp +robcad-lm 1509/tcp #Robcad, Ltd. License Manager +robcad-lm 1509/udp #Robcad, Ltd. License Manager +mvx-lm 1510/tcp #Midland Valley Exploration Ltd. Lic. Man. +mvx-lm 1510/udp #Midland Valley Exploration Ltd. Lic. Man. +3l-l1 1511/tcp +3l-l1 1511/udp +wins 1512/tcp #Microsoft's Windows Internet Name Service +wins 1512/udp #Microsoft's Windows Internet Name Service +fujitsu-dtc 1513/tcp #Fujitsu Systems Business of America, Inc +fujitsu-dtc 1513/udp #Fujitsu Systems Business of America, Inc +fujitsu-dtcns 1514/tcp #Fujitsu Systems Business of America, Inc +fujitsu-dtcns 1514/udp #Fujitsu Systems Business of America, Inc +ifor-protocol 1515/tcp +ifor-protocol 1515/udp +vpad 1516/tcp #Virtual Places Audio data +vpad 1516/udp #Virtual Places Audio data +vpac 1517/tcp #Virtual Places Audio control +vpac 1517/udp #Virtual Places Audio control +vpvd 1518/tcp #Virtual Places Video data +vpvd 1518/udp #Virtual Places Video data +vpvc 1519/tcp #Virtual Places Video control +vpvc 1519/udp #Virtual Places Video control +atm-zip-office 1520/tcp #atm zip office +atm-zip-office 1520/udp #atm zip office +ncube-lm 1521/tcp #nCube License Manager +ncube-lm 1521/udp #nCube License Manager +rna-lm 1522/tcp #Ricardo North America License Manager +rna-lm 1522/udp #Ricardo North America License Manager +cichild-lm 1523/tcp +cichild-lm 1523/udp +ingreslock 1524/tcp #ingres +ingreslock 1524/udp #ingres +prospero-np 1525/tcp #Prospero Directory Service non-priv +prospero-np 1525/udp #Prospero Directory Service non-priv +#PROBLEMS!======================================================== +orasrv 1525/tcp #oracle +orasrv 1525/udp #oracle +#PROBLEMS!======================================================== +pdap-np 1526/tcp #Prospero Data Access Prot non-priv +pdap-np 1526/udp #Prospero Data Access Prot non-priv +tlisrv 1527/tcp #oracle +tlisrv 1527/udp #oracle +mciautoreg 1528/tcp +mciautoreg 1528/udp +support 1529/tcp prmsd gnatsd # cygnus bug tracker +coauthor 1529/tcp #oracle +coauthor 1529/udp #oracle +rap-service 1530/tcp +rap-service 1530/udp +rap-listen 1531/tcp +rap-listen 1531/udp +miroconnect 1532/tcp +miroconnect 1532/udp +virtual-places 1533/tcp #Virtual Places Software +virtual-places 1533/udp #Virtual Places Software +micromuse-lm 1534/tcp +micromuse-lm 1534/udp +ampr-info 1535/tcp +ampr-info 1535/udp +ampr-inter 1536/tcp +ampr-inter 1536/udp +sdsc-lm 1537/tcp +sdsc-lm 1537/udp +3ds-lm 1538/tcp +3ds-lm 1538/udp +intellistor-lm 1539/tcp #Intellistor License Manager +intellistor-lm 1539/udp #Intellistor License Manager +rds 1540/tcp +rds 1540/udp +rds2 1541/tcp +rds2 1541/udp +gridgen-elmd 1542/tcp +gridgen-elmd 1542/udp +simba-cs 1543/tcp +simba-cs 1543/udp +aspeclmd 1544/tcp +aspeclmd 1544/udp +vistium-share 1545/tcp +vistium-share 1545/udp +abbaccuray 1546/tcp +abbaccuray 1546/udp +laplink 1547/tcp +laplink 1547/udp +axon-lm 1548/tcp #Axon License Manager +axon-lm 1548/udp #Axon License Manager +shivahose 1549/tcp #Shiva Hose +shivasound 1549/udp #Shiva Sound +3m-image-lm 1550/tcp #Image Storage license manager 3M Company +3m-image-lm 1550/udp #Image Storage license manager 3M Company +hecmtl-db 1551/tcp +hecmtl-db 1551/udp +pciarray 1552/tcp +pciarray 1552/udp +issd 1600/tcp +issd 1600/udp +# IMPORTANT NOTE: Ports 1645/1646 are the traditional radius ports used by +# many vendors without obtaining official IANA assignment. The official +# assignment is now ports 1812/1813 and users are encouraged to migrate +# when possible to these new ports. +#radius 1645/udp #RADIUS authentication protocol (old) +#radacct 1646/udp #RADIUS accounting protocol (old) +nkd 1650/tcp +nkd 1650/udp +shiva_confsrvr 1651/tcp +shiva_confsrvr 1651/udp +xnmp 1652/tcp +xnmp 1652/udp +netview-aix-1 1661/tcp +netview-aix-1 1661/udp +netview-aix-2 1662/tcp +netview-aix-2 1662/udp +netview-aix-3 1663/tcp +netview-aix-3 1663/udp +netview-aix-4 1664/tcp +netview-aix-4 1664/udp +netview-aix-5 1665/tcp +netview-aix-5 1665/udp +netview-aix-6 1666/tcp +netview-aix-6 1666/udp +netview-aix-7 1667/tcp +netview-aix-7 1667/udp +netview-aix-8 1668/tcp +netview-aix-8 1668/udp +netview-aix-9 1669/tcp +netview-aix-9 1669/udp +netview-aix-10 1670/tcp +netview-aix-10 1670/udp +netview-aix-11 1671/tcp +netview-aix-11 1671/udp +netview-aix-12 1672/tcp +netview-aix-12 1672/udp +l2f 1701/tcp #l2f +l2f 1701/udp #l2f +l2tp 1701/tcp #Layer 2 Tunnelling Protocol +l2tp 1701/udp #Layer 2 Tunnelling Protocol +pptp 1723/tcp #Point-to-point tunnelling protocol +# IMPORTANT NOTE: See comments for ports 1645/1646 when using older equipment +radius 1812/udp #RADIUS authentication protocol (IANA sanctioned) +radacct 1813/udp #RADIUS accounting protocol (IANA sanctioned) +licensedaemon 1986/tcp #cisco license management +licensedaemon 1986/udp #cisco license management +tr-rsrb-p1 1987/tcp #cisco RSRB Priority 1 port +tr-rsrb-p1 1987/udp #cisco RSRB Priority 1 port +tr-rsrb-p2 1988/tcp #cisco RSRB Priority 2 port +tr-rsrb-p2 1988/udp #cisco RSRB Priority 2 port +tr-rsrb-p3 1989/tcp #cisco RSRB Priority 3 port +tr-rsrb-p3 1989/udp #cisco RSRB Priority 3 port +#PROBLEMS!=================================================== +mshnet 1989/tcp #MHSnet system +mshnet 1989/udp #MHSnet system +#PROBLEMS!=================================================== +stun-p1 1990/tcp #cisco STUN Priority 1 port +stun-p1 1990/udp #cisco STUN Priority 1 port +stun-p2 1991/tcp #cisco STUN Priority 2 port +stun-p2 1991/udp #cisco STUN Priority 2 port +stun-p3 1992/tcp #cisco STUN Priority 3 port +stun-p3 1992/udp #cisco STUN Priority 3 port +#PROBLEMS!=================================================== +ipsendmsg 1992/tcp +ipsendmsg 1992/udp +#PROBLEMS!=================================================== +snmp-tcp-port 1993/tcp #cisco SNMP TCP port +snmp-tcp-port 1993/udp #cisco SNMP TCP port +stun-port 1994/tcp #cisco serial tunnel port +stun-port 1994/udp #cisco serial tunnel port +perf-port 1995/tcp #cisco perf port +perf-port 1995/udp #cisco perf port +tr-rsrb-port 1996/tcp #cisco Remote SRB port +tr-rsrb-port 1996/udp #cisco Remote SRB port +gdp-port 1997/tcp #cisco Gateway Discovery Protocol +gdp-port 1997/udp #cisco Gateway Discovery Protocol +x25-svc-port 1998/tcp #cisco X.25 service (XOT) +x25-svc-port 1998/udp #cisco X.25 service (XOT) +tcp-id-port 1999/tcp #cisco identification port +tcp-id-port 1999/udp #cisco identification port +callbook 2000/tcp +callbook 2000/udp +dc 2001/tcp +wizard 2001/udp #curry +globe 2002/tcp +globe 2002/udp +cfingerd 2003/tcp #GNU finger +mailbox 2004/tcp +emce 2004/udp #CCWS mm conf +berknet 2005/tcp +oracle 2005/udp +invokator 2006/tcp +raid-cc 2006/udp #raid +dectalk 2007/tcp +raid-am 2007/udp +conf 2008/tcp +terminaldb 2008/udp +news 2009/tcp +whosockami 2009/udp +search 2010/tcp +pipe_server 2010/udp +raid-cc 2011/tcp #raid +servserv 2011/udp +ttyinfo 2012/tcp +raid-ac 2012/udp +raid-am 2013/tcp +raid-cd 2013/udp +troff 2014/tcp +raid-sf 2014/udp +cypress 2015/tcp +raid-cs 2015/udp +bootserver 2016/tcp +bootserver 2016/udp +cypress-stat 2017/tcp +bootclient 2017/udp +terminaldb 2018/tcp +rellpack 2018/udp +whosockami 2019/tcp +about 2019/udp +xinupageserver 2020/tcp +xinupageserver 2020/udp +servexec 2021/tcp +xinuexpansion1 2021/udp +down 2022/tcp +xinuexpansion2 2022/udp +xinuexpansion3 2023/tcp +xinuexpansion3 2023/udp +xinuexpansion4 2024/tcp +xinuexpansion4 2024/udp +ellpack 2025/tcp +xribs 2025/udp +scrabble 2026/tcp +scrabble 2026/udp +shadowserver 2027/tcp +shadowserver 2027/udp +submitserver 2028/tcp +submitserver 2028/udp +device2 2030/tcp +device2 2030/udp +blackboard 2032/tcp +blackboard 2032/udp +glogger 2033/tcp +glogger 2033/udp +scoremgr 2034/tcp +scoremgr 2034/udp +imsldoc 2035/tcp +imsldoc 2035/udp +objectmanager 2038/tcp +objectmanager 2038/udp +lam 2040/tcp +lam 2040/udp +interbase 2041/tcp +interbase 2041/udp +isis 2042/tcp +isis 2042/udp +isis-bcast 2043/tcp +isis-bcast 2043/udp +rimsl 2044/tcp +rimsl 2044/udp +cdfunc 2045/tcp +cdfunc 2045/udp +sdfunc 2046/tcp +sdfunc 2046/udp +#dls 2047/tcp +#dls 2047/udp +dls-monitor 2048/tcp +dls-monitor 2048/udp +nfsd 2049/tcp nfs # NFS server daemon +nfsd 2049/udp nfs # NFS server daemon +#PROBLEMS!============================================================= +#shilp 2049/tcp +#shilp 2049/udp +#PROBLEMS!============================================================= +dlsrpn 2065/tcp #Data Link Switch Read Port Number +dlsrpn 2065/udp #Data Link Switch Read Port Number +dlswpn 2067/tcp #Data Link Switch Write Port Number +dlswpn 2067/udp #Data Link Switch Write Port Number +zephyr-clt 2103/udp #Zephyr serv-hm connection +zephyr-hm 2104/udp #Zephyr hostmanager +#PROBLEMS!============================================================= +#zephyr-hm-srv 2105/udp #Zephyr hm-serv connection +#PROBLEMS!============================================================= +eklogin 2105/tcp #Kerberos (v4) encrypted rlogin +eklogin 2105/udp #Kerberos (v4) encrypted rlogin +ekshell 2106/tcp #Kerberos (v4) encrypted rshell +ekshell 2106/udp #Kerberos (v4) encrypted rshell +rkinit 2108/tcp #Kerberos (v4) remote initialization +rkinit 2108/udp #Kerberos (v4) remote initialization +ats 2201/tcp #Advanced Training System Program +ats 2201/udp #Advanced Training System Program +ivs-video 2232/tcp #IVS Video default +ivs-video 2232/udp #IVS Video default +ivsd 2241/tcp #IVS Daemon +ivsd 2241/udp #IVS Daemon +pehelp 2307/tcp +pehelp 2307/udp +cvspserver 2401/tcp #CVS network server +cvspserver 2401/udp #CVS network server +venus 2430/tcp #venus +venus 2430/udp #venus +venus-se 2431/tcp #venus-se +venus-se 2431/udp #venus-se +codasrv 2432/tcp #codasrv +codasrv 2432/udp #codasrv +codasrv-se 2433/tcp #codasrv-se +codasrv-se 2433/udp #codasrv-se +rtsserv 2500/tcp #Resource Tracking system server +rtsserv 2500/udp #Resource Tracking system server +rtsclient 2501/tcp #Resource Tracking system client +rtsclient 2501/udp #Resource Tracking system client +hp-3000-telnet 2564/tcp #HP 3000 NS/VT block mode telnet +zebrasrv 2600/tcp #zebra service +zebra 2601/tcp #zebra vty +ripd 2602/tcp #RIPd vty +ripngd 2603/tcp #RIPngd vty +ospfd 2604/tcp #OSPFd vty +bgpd 2605/tcp #BGPd vty +ospf6d 2606/tcp #OSPF6d vty +listen 2766/tcp #System V listener port +www-dev 2784/tcp #world wide web - development +www-dev 2784/udp #world wide web - development +dict 2628/tcp #RFC 2229 +dict 2628/udp #RFC 2229 +eppc 3031/tcp #Remote AppleEvents/PPC Toolbox +eppc 3031/udp #Remote AppleEvents/PPC Toolbox +NSWS 3049/tcp +NSWS 3049/udp +sj3 3086/tcp #SJ3 (kanji input) +vmodem 3141/tcp +vmodem 3141/udp +ccmail 3264/tcp #cc:mail/lotus +ccmail 3264/udp #cc:mail/lotus +dec-notes 3333/tcp #DEC Notes +dec-notes 3333/udp #DEC Notes +rsvp-encap 3455/udp #RSVP encapsulated in UDP +mapper-nodemgr 3984/tcp #MAPPER network node manager +mapper-nodemgr 3984/udp #MAPPER network node manager +mapper-mapethd 3985/tcp #MAPPER TCP/IP server +mapper-mapethd 3985/udp #MAPPER TCP/IP server +mapper-ws_ethd 3986/tcp #MAPPER workstation server +mapper-ws_ethd 3986/udp #MAPPER workstation server +bmap 3421/tcp #Bull Apprise portmapper +bmap 3421/udp #Bull Apprise portmapper +prsvp 3455/tcp #RSVP Port +prsvp 3455/udp #RSVP Port +vat 3456/tcp #VAT default data +vat 3456/udp #VAT default data +vat-control 3457/tcp #VAT default control +vat-control 3457/udp #VAT default control +udt_os 3900/tcp #Unidata UDT OS +udt_os 3900/udp #Unidata UDT OS +netcheque 4008/tcp #NetCheque accounting +netcheque 4008/udp #NetCheque accounting +lockd 4045/udp # NFS lock daemon/manager +lockd 4045/tcp +nuts_dem 4132/tcp #NUTS Daemon +nuts_dem 4132/udp #NUTS Daemon +nuts_bootp 4133/tcp #NUTS Bootp Server +nuts_bootp 4133/udp #NUTS Bootp Server +rwhois 4321/tcp #Remote Who Is +rwhois 4321/udp #Remote Who Is +unicall 4343/tcp +unicall 4343/udp +krb524 4444/tcp +krb524 4444/udp +# PROBLEM krb524 assigned the port, +# PROBLEM nv used it without an assignment +nv-video 4444/tcp #NV Video default +nv-video 4444/udp #NV Video default +sae-urn 4500/tcp +sae-urn 4500/udp +fax 4557/tcp #FAX transmission service +hylafax 4559/tcp #HylaFAX client-server protocol +rfa 4672/tcp #remote file access server +rfa 4672/udp #remote file access server +commplex-main 5000/tcp +commplex-main 5000/udp +commplex-link 5001/tcp +commplex-link 5001/udp +rfe 5002/tcp #radio free ethernet +rfe 5002/udp #radio free ethernet +telelpathstart 5010/tcp +telelpathstart 5010/udp +telelpathattack 5011/tcp +telelpathattack 5011/udp +mmcc 5050/tcp #multimedia conference control tool +mmcc 5050/udp #multimedia conference control tool +rmonitor_secure 5145/tcp +rmonitor_secure 5145/udp +aol 5190/tcp #America-Online +aol 5190/udp #America-Online +aol-1 5191/tcp #AmericaOnline1 +aol-1 5191/udp #AmericaOnline1 +aol-2 5192/tcp #AmericaOnline2 +aol-2 5192/udp #AmericaOnline2 +aol-3 5193/tcp #AmericaOnline3 +aol-3 5193/udp #AmericaOnline3 +jabber-client 5222/tcp #Jabber Client Connection +jabber-client 5222/udp #Jabber Client Connection +padl2sim 5236/tcp +padl2sim 5236/udp +jabber-server 5269/tcp #Jabber Server Connection +jabber-server 5269/udp #Jabber Server Connection +hacl-hb 5300/tcp # HA cluster heartbeat +hacl-hb 5300/udp # HA cluster heartbeat +hacl-gs 5301/tcp # HA cluster general services +hacl-gs 5301/udp # HA cluster general services +hacl-cfg 5302/tcp # HA cluster configuration +hacl-cfg 5302/udp # HA cluster configuration +hacl-probe 5303/tcp # HA cluster probing +hacl-probe 5303/udp # HA cluster probing +hacl-local 5304/tcp +hacl-local 5304/udp +hacl-test 5305/tcp +hacl-test 5305/udp +cfengine 5308/tcp +cfengine 5308/udp +postgresql 5432/tcp #PostgreSQL Database +postgresql 5432/udp #PostgreSQL Database +rplay 5555/udp +canna 5680/tcp #Canna (Japanese Input) +proshareaudio 5713/tcp #proshare conf audio +proshareaudio 5713/udp #proshare conf audio +prosharevideo 5714/tcp #proshare conf video +prosharevideo 5714/udp #proshare conf video +prosharedata 5715/tcp #proshare conf data +prosharedata 5715/udp #proshare conf data +prosharerequest 5716/tcp #proshare conf request +prosharerequest 5716/udp #proshare conf request +prosharenotify 5717/tcp #proshare conf notify +prosharenotify 5717/udp #proshare conf notify +cvsup 5999/tcp #CVSup file transfer/John Polstra/FreeBSD +x11 6000/tcp #6000-6063 are assigned to X Window System +x11 6000/udp +x11-ssh 6010/tcp #Unofficial name, for convenience +x11-ssh 6010/udp +softcm 6110/tcp #HP SoftBench CM +softcm 6110/udp #HP SoftBench CM +spc 6111/tcp #HP SoftBench Sub-Process Control +spc 6111/udp #HP SoftBench Sub-Process Control +meta-corp 6141/tcp #Meta Corporation License Manager +meta-corp 6141/udp #Meta Corporation License Manager +aspentec-lm 6142/tcp #Aspen Technology License Manager +aspentec-lm 6142/udp #Aspen Technology License Manager +watershed-lm 6143/tcp #Watershed License Manager +watershed-lm 6143/udp #Watershed License Manager +statsci1-lm 6144/tcp #StatSci License Manager - 1 +statsci1-lm 6144/udp #StatSci License Manager - 1 +statsci2-lm 6145/tcp #StatSci License Manager - 2 +statsci2-lm 6145/udp #StatSci License Manager - 2 +lonewolf-lm 6146/tcp #Lone Wolf Systems License Manager +lonewolf-lm 6146/udp #Lone Wolf Systems License Manager +montage-lm 6147/tcp #Montage License Manager +montage-lm 6147/udp #Montage License Manager +ricardo-lm 6148/tcp #Ricardo North America License Manager +ricardo-lm 6148/udp #Ricardo North America License Manager +xdsxdm 6558/tcp +xdsxdm 6558/udp +ircd 6667/tcp #Internet Relay Chat (unoffical) +acmsoda 6969/tcp +acmsoda 6969/udp +afs3-fileserver 7000/tcp #file server itself +afs3-fileserver 7000/udp #file server itself +afs3-callback 7001/tcp #callbacks to cache managers +afs3-callback 7001/udp #callbacks to cache managers +afs3-prserver 7002/tcp #users & groups database +afs3-prserver 7002/udp #users & groups database +afs3-vlserver 7003/tcp #volume location database +afs3-vlserver 7003/udp #volume location database +afs3-kaserver 7004/tcp #AFS/Kerberos authentication service +afs3-kaserver 7004/udp #AFS/Kerberos authentication service +afs3-volser 7005/tcp #volume management server +afs3-volser 7005/udp #volume management server +afs3-errors 7006/tcp #error interpretation service +afs3-errors 7006/udp #error interpretation service +afs3-bos 7007/tcp #basic overseer process +afs3-bos 7007/udp #basic overseer process +afs3-update 7008/tcp #server-to-server updater +afs3-update 7008/udp #server-to-server updater +afs3-rmtsys 7009/tcp #remote cache manager service +afs3-rmtsys 7009/udp #remote cache manager service +afs3-resserver 7010/tcp #MR-AFS residence server +afs3-resserver 7010/udp #MR-AFS residence server +afs3-remio 7011/tcp #MR-AFS remote IO server +afs3-remio 7011/udp #MR-AFS remote IO server +ups-onlinet 7010/tcp #onlinet uninterruptable power supplies +ups-onlinet 7010/udp #onlinet uninterruptable power supplies +font-service 7100/tcp #X Font Service +font-service 7100/udp #X Font Service +fodms 7200/tcp #FODMS FLIP +fodms 7200/udp #FODMS FLIP +dlip 7201/tcp +dlip 7201/udp +ftp-proxy 8021/tcp # pf ftp-proxy +spamd 8025/tcp # spamd(8) +spamd-sync 8025/udp # spamd(8) synchronisation +spamd-cfg 8026/tcp # spamd(8) configuration +natd 8668/divert # Network Address Translation +jetdirect 9100/tcp #HP JetDirect card +man 9535/tcp +man 9535/udp +sd 9876/tcp #Session Director +sd 9876/udp #Session Director +amanda 10080/udp #Dump server control +amandaidx 10082/tcp #Amanda indexing +amidxtape 10083/tcp #Amanda tape indexing +isode-dua 17007/tcp +isode-dua 17007/udp +biimenu 18000/tcp #Beckman Instruments, Inc. +biimenu 18000/udp #Beckman Instruments, Inc. +19000 19000/tcp # pfSense nat bouncing +19000 19000/udp # pfSense nat bouncing +19001 19001/tcp # pfSense nat bouncing +19001 19001/udp # pfSense nat bouncing +19002 19002/tcp # pfSense nat bouncing +19002 19002/udp # pfSense nat bouncing +19003 19003/tcp # pfSense nat bouncing +19003 19003/udp # pfSense nat bouncing +19004 19004/tcp # pfSense nat bouncing +19004 19004/udp # pfSense nat bouncing +19005 19005/tcp # pfSense nat bouncing +19005 19005/udp # pfSense nat bouncing +19006 19006/tcp # pfSense nat bouncing +19006 19006/udp # pfSense nat bouncing +19007 19007/tcp # pfSense nat bouncing +19007 19007/udp # pfSense nat bouncing +19008 19008/tcp # pfSense nat bouncing +19008 19008/udp # pfSense nat bouncing +19009 19009/tcp # pfSense nat bouncing +19009 19009/udp # pfSense nat bouncing +19010 19010/tcp # pfSense nat bouncing +19010 19010/udp # pfSense nat bouncing +19011 19011/tcp # pfSense nat bouncing +19011 19011/udp # pfSense nat bouncing +19012 19012/tcp # pfSense nat bouncing +19012 19012/udp # pfSense nat bouncing +19013 19013/tcp # pfSense nat bouncing +19013 19013/udp # pfSense nat bouncing +19014 19014/tcp # pfSense nat bouncing +19014 19014/udp # pfSense nat bouncing +19015 19015/tcp # pfSense nat bouncing +19015 19015/udp # pfSense nat bouncing +19016 19016/tcp # pfSense nat bouncing +19016 19016/udp # pfSense nat bouncing +19017 19017/tcp # pfSense nat bouncing +19017 19017/udp # pfSense nat bouncing +19018 19018/tcp # pfSense nat bouncing +19018 19018/udp # pfSense nat bouncing +19019 19019/tcp # pfSense nat bouncing +19019 19019/udp # pfSense nat bouncing +19020 19020/tcp # pfSense nat bouncing +19020 19020/udp # pfSense nat bouncing +19021 19021/tcp # pfSense nat bouncing +19021 19021/udp # pfSense nat bouncing +19022 19022/tcp # pfSense nat bouncing +19022 19022/udp # pfSense nat bouncing +19023 19023/tcp # pfSense nat bouncing +19023 19023/udp # pfSense nat bouncing +19024 19024/tcp # pfSense nat bouncing +19024 19024/udp # pfSense nat bouncing +19025 19025/tcp # pfSense nat bouncing +19025 19025/udp # pfSense nat bouncing +19026 19026/tcp # pfSense nat bouncing +19026 19026/udp # pfSense nat bouncing +19027 19027/tcp # pfSense nat bouncing +19027 19027/udp # pfSense nat bouncing +19028 19028/tcp # pfSense nat bouncing +19028 19028/udp # pfSense nat bouncing +19029 19029/tcp # pfSense nat bouncing +19029 19029/udp # pfSense nat bouncing +19030 19030/tcp # pfSense nat bouncing +19030 19030/udp # pfSense nat bouncing +19031 19031/tcp # pfSense nat bouncing +19031 19031/udp # pfSense nat bouncing +19032 19032/tcp # pfSense nat bouncing +19032 19032/udp # pfSense nat bouncing +19033 19033/tcp # pfSense nat bouncing +19033 19033/udp # pfSense nat bouncing +19034 19034/tcp # pfSense nat bouncing +19034 19034/udp # pfSense nat bouncing +19035 19035/tcp # pfSense nat bouncing +19035 19035/udp # pfSense nat bouncing +19036 19036/tcp # pfSense nat bouncing +19036 19036/udp # pfSense nat bouncing +19037 19037/tcp # pfSense nat bouncing +19037 19037/udp # pfSense nat bouncing +19038 19038/tcp # pfSense nat bouncing +19038 19038/udp # pfSense nat bouncing +19039 19039/tcp # pfSense nat bouncing +19039 19039/udp # pfSense nat bouncing +19040 19040/tcp # pfSense nat bouncing +19040 19040/udp # pfSense nat bouncing +19041 19041/tcp # pfSense nat bouncing +19041 19041/udp # pfSense nat bouncing +19042 19042/tcp # pfSense nat bouncing +19042 19042/udp # pfSense nat bouncing +19043 19043/tcp # pfSense nat bouncing +19043 19043/udp # pfSense nat bouncing +19044 19044/tcp # pfSense nat bouncing +19044 19044/udp # pfSense nat bouncing +19045 19045/tcp # pfSense nat bouncing +19045 19045/udp # pfSense nat bouncing +19046 19046/tcp # pfSense nat bouncing +19046 19046/udp # pfSense nat bouncing +19047 19047/tcp # pfSense nat bouncing +19047 19047/udp # pfSense nat bouncing +19048 19048/tcp # pfSense nat bouncing +19048 19048/udp # pfSense nat bouncing +19049 19049/tcp # pfSense nat bouncing +19049 19049/udp # pfSense nat bouncing +19050 19050/tcp # pfSense nat bouncing +19050 19050/udp # pfSense nat bouncing +19051 19051/tcp # pfSense nat bouncing +19051 19051/udp # pfSense nat bouncing +19052 19052/tcp # pfSense nat bouncing +19052 19052/udp # pfSense nat bouncing +19053 19053/tcp # pfSense nat bouncing +19053 19053/udp # pfSense nat bouncing +19054 19054/tcp # pfSense nat bouncing +19054 19054/udp # pfSense nat bouncing +19055 19055/tcp # pfSense nat bouncing +19055 19055/udp # pfSense nat bouncing +19056 19056/tcp # pfSense nat bouncing +19056 19056/udp # pfSense nat bouncing +19057 19057/tcp # pfSense nat bouncing +19057 19057/udp # pfSense nat bouncing +19058 19058/tcp # pfSense nat bouncing +19058 19058/udp # pfSense nat bouncing +19059 19059/tcp # pfSense nat bouncing +19059 19059/udp # pfSense nat bouncing +19060 19060/tcp # pfSense nat bouncing +19060 19060/udp # pfSense nat bouncing +19061 19061/tcp # pfSense nat bouncing +19061 19061/udp # pfSense nat bouncing +19062 19062/tcp # pfSense nat bouncing +19062 19062/udp # pfSense nat bouncing +19063 19063/tcp # pfSense nat bouncing +19063 19063/udp # pfSense nat bouncing +19064 19064/tcp # pfSense nat bouncing +19064 19064/udp # pfSense nat bouncing +19065 19065/tcp # pfSense nat bouncing +19065 19065/udp # pfSense nat bouncing +19066 19066/tcp # pfSense nat bouncing +19066 19066/udp # pfSense nat bouncing +19067 19067/tcp # pfSense nat bouncing +19067 19067/udp # pfSense nat bouncing +19068 19068/tcp # pfSense nat bouncing +19068 19068/udp # pfSense nat bouncing +19069 19069/tcp # pfSense nat bouncing +19069 19069/udp # pfSense nat bouncing +19070 19070/tcp # pfSense nat bouncing +19070 19070/udp # pfSense nat bouncing +19071 19071/tcp # pfSense nat bouncing +19071 19071/udp # pfSense nat bouncing +19072 19072/tcp # pfSense nat bouncing +19072 19072/udp # pfSense nat bouncing +19073 19073/tcp # pfSense nat bouncing +19073 19073/udp # pfSense nat bouncing +19074 19074/tcp # pfSense nat bouncing +19074 19074/udp # pfSense nat bouncing +19075 19075/tcp # pfSense nat bouncing +19075 19075/udp # pfSense nat bouncing +19076 19076/tcp # pfSense nat bouncing +19076 19076/udp # pfSense nat bouncing +19077 19077/tcp # pfSense nat bouncing +19077 19077/udp # pfSense nat bouncing +19078 19078/tcp # pfSense nat bouncing +19078 19078/udp # pfSense nat bouncing +19079 19079/tcp # pfSense nat bouncing +19079 19079/udp # pfSense nat bouncing +19080 19080/tcp # pfSense nat bouncing +19080 19080/udp # pfSense nat bouncing +19081 19081/tcp # pfSense nat bouncing +19081 19081/udp # pfSense nat bouncing +19082 19082/tcp # pfSense nat bouncing +19082 19082/udp # pfSense nat bouncing +19083 19083/tcp # pfSense nat bouncing +19083 19083/udp # pfSense nat bouncing +19084 19084/tcp # pfSense nat bouncing +19084 19084/udp # pfSense nat bouncing +19085 19085/tcp # pfSense nat bouncing +19085 19085/udp # pfSense nat bouncing +19086 19086/tcp # pfSense nat bouncing +19086 19086/udp # pfSense nat bouncing +19087 19087/tcp # pfSense nat bouncing +19087 19087/udp # pfSense nat bouncing +19088 19088/tcp # pfSense nat bouncing +19088 19088/udp # pfSense nat bouncing +19089 19089/tcp # pfSense nat bouncing +19089 19089/udp # pfSense nat bouncing +19090 19090/tcp # pfSense nat bouncing +19090 19090/udp # pfSense nat bouncing +19091 19091/tcp # pfSense nat bouncing +19091 19091/udp # pfSense nat bouncing +19092 19092/tcp # pfSense nat bouncing +19092 19092/udp # pfSense nat bouncing +19093 19093/tcp # pfSense nat bouncing +19093 19093/udp # pfSense nat bouncing +19094 19094/tcp # pfSense nat bouncing +19094 19094/udp # pfSense nat bouncing +19095 19095/tcp # pfSense nat bouncing +19095 19095/udp # pfSense nat bouncing +19096 19096/tcp # pfSense nat bouncing +19096 19096/udp # pfSense nat bouncing +19097 19097/tcp # pfSense nat bouncing +19097 19097/udp # pfSense nat bouncing +19098 19098/tcp # pfSense nat bouncing +19098 19098/udp # pfSense nat bouncing +19099 19099/tcp # pfSense nat bouncing +19099 19099/udp # pfSense nat bouncing +19100 19100/tcp # pfSense nat bouncing +19100 19100/udp # pfSense nat bouncing +19101 19101/tcp # pfSense nat bouncing +19101 19101/udp # pfSense nat bouncing +19102 19102/tcp # pfSense nat bouncing +19102 19102/udp # pfSense nat bouncing +19103 19103/tcp # pfSense nat bouncing +19103 19103/udp # pfSense nat bouncing +19104 19104/tcp # pfSense nat bouncing +19104 19104/udp # pfSense nat bouncing +19105 19105/tcp # pfSense nat bouncing +19105 19105/udp # pfSense nat bouncing +19106 19106/tcp # pfSense nat bouncing +19106 19106/udp # pfSense nat bouncing +19107 19107/tcp # pfSense nat bouncing +19107 19107/udp # pfSense nat bouncing +19108 19108/tcp # pfSense nat bouncing +19108 19108/udp # pfSense nat bouncing +19109 19109/tcp # pfSense nat bouncing +19109 19109/udp # pfSense nat bouncing +19110 19110/tcp # pfSense nat bouncing +19110 19110/udp # pfSense nat bouncing +19111 19111/tcp # pfSense nat bouncing +19111 19111/udp # pfSense nat bouncing +19112 19112/tcp # pfSense nat bouncing +19112 19112/udp # pfSense nat bouncing +19113 19113/tcp # pfSense nat bouncing +19113 19113/udp # pfSense nat bouncing +19114 19114/tcp # pfSense nat bouncing +19114 19114/udp # pfSense nat bouncing +19115 19115/tcp # pfSense nat bouncing +19115 19115/udp # pfSense nat bouncing +19116 19116/tcp # pfSense nat bouncing +19116 19116/udp # pfSense nat bouncing +19117 19117/tcp # pfSense nat bouncing +19117 19117/udp # pfSense nat bouncing +19118 19118/tcp # pfSense nat bouncing +19118 19118/udp # pfSense nat bouncing +19119 19119/tcp # pfSense nat bouncing +19119 19119/udp # pfSense nat bouncing +19120 19120/tcp # pfSense nat bouncing +19120 19120/udp # pfSense nat bouncing +19121 19121/tcp # pfSense nat bouncing +19121 19121/udp # pfSense nat bouncing +19122 19122/tcp # pfSense nat bouncing +19122 19122/udp # pfSense nat bouncing +19123 19123/tcp # pfSense nat bouncing +19123 19123/udp # pfSense nat bouncing +19124 19124/tcp # pfSense nat bouncing +19124 19124/udp # pfSense nat bouncing +19125 19125/tcp # pfSense nat bouncing +19125 19125/udp # pfSense nat bouncing +19126 19126/tcp # pfSense nat bouncing +19126 19126/udp # pfSense nat bouncing +19127 19127/tcp # pfSense nat bouncing +19127 19127/udp # pfSense nat bouncing +19128 19128/tcp # pfSense nat bouncing +19128 19128/udp # pfSense nat bouncing +19129 19129/tcp # pfSense nat bouncing +19129 19129/udp # pfSense nat bouncing +19130 19130/tcp # pfSense nat bouncing +19130 19130/udp # pfSense nat bouncing +19131 19131/tcp # pfSense nat bouncing +19131 19131/udp # pfSense nat bouncing +19132 19132/tcp # pfSense nat bouncing +19132 19132/udp # pfSense nat bouncing +19133 19133/tcp # pfSense nat bouncing +19133 19133/udp # pfSense nat bouncing +19134 19134/tcp # pfSense nat bouncing +19134 19134/udp # pfSense nat bouncing +19135 19135/tcp # pfSense nat bouncing +19135 19135/udp # pfSense nat bouncing +19136 19136/tcp # pfSense nat bouncing +19136 19136/udp # pfSense nat bouncing +19137 19137/tcp # pfSense nat bouncing +19137 19137/udp # pfSense nat bouncing +19138 19138/tcp # pfSense nat bouncing +19138 19138/udp # pfSense nat bouncing +19139 19139/tcp # pfSense nat bouncing +19139 19139/udp # pfSense nat bouncing +19140 19140/tcp # pfSense nat bouncing +19140 19140/udp # pfSense nat bouncing +19141 19141/tcp # pfSense nat bouncing +19141 19141/udp # pfSense nat bouncing +19142 19142/tcp # pfSense nat bouncing +19142 19142/udp # pfSense nat bouncing +19143 19143/tcp # pfSense nat bouncing +19143 19143/udp # pfSense nat bouncing +19144 19144/tcp # pfSense nat bouncing +19144 19144/udp # pfSense nat bouncing +19145 19145/tcp # pfSense nat bouncing +19145 19145/udp # pfSense nat bouncing +19146 19146/tcp # pfSense nat bouncing +19146 19146/udp # pfSense nat bouncing +19147 19147/tcp # pfSense nat bouncing +19147 19147/udp # pfSense nat bouncing +19148 19148/tcp # pfSense nat bouncing +19148 19148/udp # pfSense nat bouncing +19149 19149/tcp # pfSense nat bouncing +19149 19149/udp # pfSense nat bouncing +19150 19150/tcp # pfSense nat bouncing +19150 19150/udp # pfSense nat bouncing +19151 19151/tcp # pfSense nat bouncing +19151 19151/udp # pfSense nat bouncing +19152 19152/tcp # pfSense nat bouncing +19152 19152/udp # pfSense nat bouncing +19153 19153/tcp # pfSense nat bouncing +19153 19153/udp # pfSense nat bouncing +19154 19154/tcp # pfSense nat bouncing +19154 19154/udp # pfSense nat bouncing +19155 19155/tcp # pfSense nat bouncing +19155 19155/udp # pfSense nat bouncing +19156 19156/tcp # pfSense nat bouncing +19156 19156/udp # pfSense nat bouncing +19157 19157/tcp # pfSense nat bouncing +19157 19157/udp # pfSense nat bouncing +19158 19158/tcp # pfSense nat bouncing +19158 19158/udp # pfSense nat bouncing +19159 19159/tcp # pfSense nat bouncing +19159 19159/udp # pfSense nat bouncing +19160 19160/tcp # pfSense nat bouncing +19160 19160/udp # pfSense nat bouncing +19161 19161/tcp # pfSense nat bouncing +19161 19161/udp # pfSense nat bouncing +19162 19162/tcp # pfSense nat bouncing +19162 19162/udp # pfSense nat bouncing +19163 19163/tcp # pfSense nat bouncing +19163 19163/udp # pfSense nat bouncing +19164 19164/tcp # pfSense nat bouncing +19164 19164/udp # pfSense nat bouncing +19165 19165/tcp # pfSense nat bouncing +19165 19165/udp # pfSense nat bouncing +19166 19166/tcp # pfSense nat bouncing +19166 19166/udp # pfSense nat bouncing +19167 19167/tcp # pfSense nat bouncing +19167 19167/udp # pfSense nat bouncing +19168 19168/tcp # pfSense nat bouncing +19168 19168/udp # pfSense nat bouncing +19169 19169/tcp # pfSense nat bouncing +19169 19169/udp # pfSense nat bouncing +19170 19170/tcp # pfSense nat bouncing +19170 19170/udp # pfSense nat bouncing +19171 19171/tcp # pfSense nat bouncing +19171 19171/udp # pfSense nat bouncing +19172 19172/tcp # pfSense nat bouncing +19172 19172/udp # pfSense nat bouncing +19173 19173/tcp # pfSense nat bouncing +19173 19173/udp # pfSense nat bouncing +19174 19174/tcp # pfSense nat bouncing +19174 19174/udp # pfSense nat bouncing +19175 19175/tcp # pfSense nat bouncing +19175 19175/udp # pfSense nat bouncing +19176 19176/tcp # pfSense nat bouncing +19176 19176/udp # pfSense nat bouncing +19177 19177/tcp # pfSense nat bouncing +19177 19177/udp # pfSense nat bouncing +19178 19178/tcp # pfSense nat bouncing +19178 19178/udp # pfSense nat bouncing +19179 19179/tcp # pfSense nat bouncing +19179 19179/udp # pfSense nat bouncing +19180 19180/tcp # pfSense nat bouncing +19180 19180/udp # pfSense nat bouncing +19181 19181/tcp # pfSense nat bouncing +19181 19181/udp # pfSense nat bouncing +19182 19182/tcp # pfSense nat bouncing +19182 19182/udp # pfSense nat bouncing +19183 19183/tcp # pfSense nat bouncing +19183 19183/udp # pfSense nat bouncing +19184 19184/tcp # pfSense nat bouncing +19184 19184/udp # pfSense nat bouncing +19185 19185/tcp # pfSense nat bouncing +19185 19185/udp # pfSense nat bouncing +19186 19186/tcp # pfSense nat bouncing +19186 19186/udp # pfSense nat bouncing +19187 19187/tcp # pfSense nat bouncing +19187 19187/udp # pfSense nat bouncing +19188 19188/tcp # pfSense nat bouncing +19188 19188/udp # pfSense nat bouncing +19189 19189/tcp # pfSense nat bouncing +19189 19189/udp # pfSense nat bouncing +19190 19190/tcp # pfSense nat bouncing +19190 19190/udp # pfSense nat bouncing +19191 19191/tcp # pfSense nat bouncing +19191 19191/udp # pfSense nat bouncing +19192 19192/tcp # pfSense nat bouncing +19192 19192/udp # pfSense nat bouncing +19193 19193/tcp # pfSense nat bouncing +19193 19193/udp # pfSense nat bouncing +19194 19194/tcp # pfSense nat bouncing +19194 19194/udp # pfSense nat bouncing +19195 19195/tcp # pfSense nat bouncing +19195 19195/udp # pfSense nat bouncing +19196 19196/tcp # pfSense nat bouncing +19196 19196/udp # pfSense nat bouncing +19197 19197/tcp # pfSense nat bouncing +19197 19197/udp # pfSense nat bouncing +19198 19198/tcp # pfSense nat bouncing +19198 19198/udp # pfSense nat bouncing +19199 19199/tcp # pfSense nat bouncing +19199 19199/udp # pfSense nat bouncing +19200 19200/tcp # pfSense nat bouncing +19200 19200/udp # pfSense nat bouncing +19201 19201/tcp # pfSense nat bouncing +19201 19201/udp # pfSense nat bouncing +19202 19202/tcp # pfSense nat bouncing +19202 19202/udp # pfSense nat bouncing +19203 19203/tcp # pfSense nat bouncing +19203 19203/udp # pfSense nat bouncing +19204 19204/tcp # pfSense nat bouncing +19204 19204/udp # pfSense nat bouncing +19205 19205/tcp # pfSense nat bouncing +19205 19205/udp # pfSense nat bouncing +19206 19206/tcp # pfSense nat bouncing +19206 19206/udp # pfSense nat bouncing +19207 19207/tcp # pfSense nat bouncing +19207 19207/udp # pfSense nat bouncing +19208 19208/tcp # pfSense nat bouncing +19208 19208/udp # pfSense nat bouncing +19209 19209/tcp # pfSense nat bouncing +19209 19209/udp # pfSense nat bouncing +19210 19210/tcp # pfSense nat bouncing +19210 19210/udp # pfSense nat bouncing +19211 19211/tcp # pfSense nat bouncing +19211 19211/udp # pfSense nat bouncing +19212 19212/tcp # pfSense nat bouncing +19212 19212/udp # pfSense nat bouncing +19213 19213/tcp # pfSense nat bouncing +19213 19213/udp # pfSense nat bouncing +19214 19214/tcp # pfSense nat bouncing +19214 19214/udp # pfSense nat bouncing +19215 19215/tcp # pfSense nat bouncing +19215 19215/udp # pfSense nat bouncing +19216 19216/tcp # pfSense nat bouncing +19216 19216/udp # pfSense nat bouncing +19217 19217/tcp # pfSense nat bouncing +19217 19217/udp # pfSense nat bouncing +19218 19218/tcp # pfSense nat bouncing +19218 19218/udp # pfSense nat bouncing +19219 19219/tcp # pfSense nat bouncing +19219 19219/udp # pfSense nat bouncing +19220 19220/tcp # pfSense nat bouncing +19220 19220/udp # pfSense nat bouncing +19221 19221/tcp # pfSense nat bouncing +19221 19221/udp # pfSense nat bouncing +19222 19222/tcp # pfSense nat bouncing +19222 19222/udp # pfSense nat bouncing +19223 19223/tcp # pfSense nat bouncing +19223 19223/udp # pfSense nat bouncing +19224 19224/tcp # pfSense nat bouncing +19224 19224/udp # pfSense nat bouncing +19225 19225/tcp # pfSense nat bouncing +19225 19225/udp # pfSense nat bouncing +19226 19226/tcp # pfSense nat bouncing +19226 19226/udp # pfSense nat bouncing +19227 19227/tcp # pfSense nat bouncing +19227 19227/udp # pfSense nat bouncing +19228 19228/tcp # pfSense nat bouncing +19228 19228/udp # pfSense nat bouncing +19229 19229/tcp # pfSense nat bouncing +19229 19229/udp # pfSense nat bouncing +19230 19230/tcp # pfSense nat bouncing +19230 19230/udp # pfSense nat bouncing +19231 19231/tcp # pfSense nat bouncing +19231 19231/udp # pfSense nat bouncing +19232 19232/tcp # pfSense nat bouncing +19232 19232/udp # pfSense nat bouncing +19233 19233/tcp # pfSense nat bouncing +19233 19233/udp # pfSense nat bouncing +19234 19234/tcp # pfSense nat bouncing +19234 19234/udp # pfSense nat bouncing +19235 19235/tcp # pfSense nat bouncing +19235 19235/udp # pfSense nat bouncing +19236 19236/tcp # pfSense nat bouncing +19236 19236/udp # pfSense nat bouncing +19237 19237/tcp # pfSense nat bouncing +19237 19237/udp # pfSense nat bouncing +19238 19238/tcp # pfSense nat bouncing +19238 19238/udp # pfSense nat bouncing +19239 19239/tcp # pfSense nat bouncing +19239 19239/udp # pfSense nat bouncing +19240 19240/tcp # pfSense nat bouncing +19240 19240/udp # pfSense nat bouncing +19241 19241/tcp # pfSense nat bouncing +19241 19241/udp # pfSense nat bouncing +19242 19242/tcp # pfSense nat bouncing +19242 19242/udp # pfSense nat bouncing +19243 19243/tcp # pfSense nat bouncing +19243 19243/udp # pfSense nat bouncing +19244 19244/tcp # pfSense nat bouncing +19244 19244/udp # pfSense nat bouncing +19245 19245/tcp # pfSense nat bouncing +19245 19245/udp # pfSense nat bouncing +19246 19246/tcp # pfSense nat bouncing +19246 19246/udp # pfSense nat bouncing +19247 19247/tcp # pfSense nat bouncing +19247 19247/udp # pfSense nat bouncing +19248 19248/tcp # pfSense nat bouncing +19248 19248/udp # pfSense nat bouncing +19249 19249/tcp # pfSense nat bouncing +19249 19249/udp # pfSense nat bouncing +19250 19250/tcp # pfSense nat bouncing +19250 19250/udp # pfSense nat bouncing +19251 19251/tcp # pfSense nat bouncing +19251 19251/udp # pfSense nat bouncing +19252 19252/tcp # pfSense nat bouncing +19252 19252/udp # pfSense nat bouncing +19253 19253/tcp # pfSense nat bouncing +19253 19253/udp # pfSense nat bouncing +19254 19254/tcp # pfSense nat bouncing +19254 19254/udp # pfSense nat bouncing +19255 19255/tcp # pfSense nat bouncing +19255 19255/udp # pfSense nat bouncing +19256 19256/tcp # pfSense nat bouncing +19256 19256/udp # pfSense nat bouncing +19257 19257/tcp # pfSense nat bouncing +19257 19257/udp # pfSense nat bouncing +19258 19258/tcp # pfSense nat bouncing +19258 19258/udp # pfSense nat bouncing +19259 19259/tcp # pfSense nat bouncing +19259 19259/udp # pfSense nat bouncing +19260 19260/tcp # pfSense nat bouncing +19260 19260/udp # pfSense nat bouncing +19261 19261/tcp # pfSense nat bouncing +19261 19261/udp # pfSense nat bouncing +19262 19262/tcp # pfSense nat bouncing +19262 19262/udp # pfSense nat bouncing +19263 19263/tcp # pfSense nat bouncing +19263 19263/udp # pfSense nat bouncing +19264 19264/tcp # pfSense nat bouncing +19264 19264/udp # pfSense nat bouncing +19265 19265/tcp # pfSense nat bouncing +19265 19265/udp # pfSense nat bouncing +19266 19266/tcp # pfSense nat bouncing +19266 19266/udp # pfSense nat bouncing +19267 19267/tcp # pfSense nat bouncing +19267 19267/udp # pfSense nat bouncing +19268 19268/tcp # pfSense nat bouncing +19268 19268/udp # pfSense nat bouncing +19269 19269/tcp # pfSense nat bouncing +19269 19269/udp # pfSense nat bouncing +19270 19270/tcp # pfSense nat bouncing +19270 19270/udp # pfSense nat bouncing +19271 19271/tcp # pfSense nat bouncing +19271 19271/udp # pfSense nat bouncing +19272 19272/tcp # pfSense nat bouncing +19272 19272/udp # pfSense nat bouncing +19273 19273/tcp # pfSense nat bouncing +19273 19273/udp # pfSense nat bouncing +19274 19274/tcp # pfSense nat bouncing +19274 19274/udp # pfSense nat bouncing +19275 19275/tcp # pfSense nat bouncing +19275 19275/udp # pfSense nat bouncing +19276 19276/tcp # pfSense nat bouncing +19276 19276/udp # pfSense nat bouncing +19277 19277/tcp # pfSense nat bouncing +19277 19277/udp # pfSense nat bouncing +19278 19278/tcp # pfSense nat bouncing +19278 19278/udp # pfSense nat bouncing +19279 19279/tcp # pfSense nat bouncing +19279 19279/udp # pfSense nat bouncing +19280 19280/tcp # pfSense nat bouncing +19280 19280/udp # pfSense nat bouncing +19281 19281/tcp # pfSense nat bouncing +19281 19281/udp # pfSense nat bouncing +19282 19282/tcp # pfSense nat bouncing +19282 19282/udp # pfSense nat bouncing +19283 19283/tcp # pfSense nat bouncing +19283 19283/udp # pfSense nat bouncing +19284 19284/tcp # pfSense nat bouncing +19284 19284/udp # pfSense nat bouncing +19285 19285/tcp # pfSense nat bouncing +19285 19285/udp # pfSense nat bouncing +19286 19286/tcp # pfSense nat bouncing +19286 19286/udp # pfSense nat bouncing +19287 19287/tcp # pfSense nat bouncing +19287 19287/udp # pfSense nat bouncing +19288 19288/tcp # pfSense nat bouncing +19288 19288/udp # pfSense nat bouncing +19289 19289/tcp # pfSense nat bouncing +19289 19289/udp # pfSense nat bouncing +19290 19290/tcp # pfSense nat bouncing +19290 19290/udp # pfSense nat bouncing +19291 19291/tcp # pfSense nat bouncing +19291 19291/udp # pfSense nat bouncing +19292 19292/tcp # pfSense nat bouncing +19292 19292/udp # pfSense nat bouncing +19293 19293/tcp # pfSense nat bouncing +19293 19293/udp # pfSense nat bouncing +19294 19294/tcp # pfSense nat bouncing +19294 19294/udp # pfSense nat bouncing +19295 19295/tcp # pfSense nat bouncing +19295 19295/udp # pfSense nat bouncing +19296 19296/tcp # pfSense nat bouncing +19296 19296/udp # pfSense nat bouncing +19297 19297/tcp # pfSense nat bouncing +19297 19297/udp # pfSense nat bouncing +19298 19298/tcp # pfSense nat bouncing +19298 19298/udp # pfSense nat bouncing +19299 19299/tcp # pfSense nat bouncing +19299 19299/udp # pfSense nat bouncing +19300 19300/tcp # pfSense nat bouncing +19300 19300/udp # pfSense nat bouncing +19301 19301/tcp # pfSense nat bouncing +19301 19301/udp # pfSense nat bouncing +19302 19302/tcp # pfSense nat bouncing +19302 19302/udp # pfSense nat bouncing +19303 19303/tcp # pfSense nat bouncing +19303 19303/udp # pfSense nat bouncing +19304 19304/tcp # pfSense nat bouncing +19304 19304/udp # pfSense nat bouncing +19305 19305/tcp # pfSense nat bouncing +19305 19305/udp # pfSense nat bouncing +19306 19306/tcp # pfSense nat bouncing +19306 19306/udp # pfSense nat bouncing +19307 19307/tcp # pfSense nat bouncing +19307 19307/udp # pfSense nat bouncing +19308 19308/tcp # pfSense nat bouncing +19308 19308/udp # pfSense nat bouncing +19309 19309/tcp # pfSense nat bouncing +19309 19309/udp # pfSense nat bouncing +19310 19310/tcp # pfSense nat bouncing +19310 19310/udp # pfSense nat bouncing +19311 19311/tcp # pfSense nat bouncing +19311 19311/udp # pfSense nat bouncing +19312 19312/tcp # pfSense nat bouncing +19312 19312/udp # pfSense nat bouncing +19313 19313/tcp # pfSense nat bouncing +19313 19313/udp # pfSense nat bouncing +19314 19314/tcp # pfSense nat bouncing +19314 19314/udp # pfSense nat bouncing +19315 19315/tcp # pfSense nat bouncing +19315 19315/udp # pfSense nat bouncing +19316 19316/tcp # pfSense nat bouncing +19316 19316/udp # pfSense nat bouncing +19317 19317/tcp # pfSense nat bouncing +19317 19317/udp # pfSense nat bouncing +19318 19318/tcp # pfSense nat bouncing +19318 19318/udp # pfSense nat bouncing +19319 19319/tcp # pfSense nat bouncing +19319 19319/udp # pfSense nat bouncing +19320 19320/tcp # pfSense nat bouncing +19320 19320/udp # pfSense nat bouncing +19321 19321/tcp # pfSense nat bouncing +19321 19321/udp # pfSense nat bouncing +19322 19322/tcp # pfSense nat bouncing +19322 19322/udp # pfSense nat bouncing +19323 19323/tcp # pfSense nat bouncing +19323 19323/udp # pfSense nat bouncing +19324 19324/tcp # pfSense nat bouncing +19324 19324/udp # pfSense nat bouncing +19325 19325/tcp # pfSense nat bouncing +19325 19325/udp # pfSense nat bouncing +19326 19326/tcp # pfSense nat bouncing +19326 19326/udp # pfSense nat bouncing +19327 19327/tcp # pfSense nat bouncing +19327 19327/udp # pfSense nat bouncing +19328 19328/tcp # pfSense nat bouncing +19328 19328/udp # pfSense nat bouncing +19329 19329/tcp # pfSense nat bouncing +19329 19329/udp # pfSense nat bouncing +19330 19330/tcp # pfSense nat bouncing +19330 19330/udp # pfSense nat bouncing +19331 19331/tcp # pfSense nat bouncing +19331 19331/udp # pfSense nat bouncing +19332 19332/tcp # pfSense nat bouncing +19332 19332/udp # pfSense nat bouncing +19333 19333/tcp # pfSense nat bouncing +19333 19333/udp # pfSense nat bouncing +19334 19334/tcp # pfSense nat bouncing +19334 19334/udp # pfSense nat bouncing +19335 19335/tcp # pfSense nat bouncing +19335 19335/udp # pfSense nat bouncing +19336 19336/tcp # pfSense nat bouncing +19336 19336/udp # pfSense nat bouncing +19337 19337/tcp # pfSense nat bouncing +19337 19337/udp # pfSense nat bouncing +19338 19338/tcp # pfSense nat bouncing +19338 19338/udp # pfSense nat bouncing +19339 19339/tcp # pfSense nat bouncing +19339 19339/udp # pfSense nat bouncing +19340 19340/tcp # pfSense nat bouncing +19340 19340/udp # pfSense nat bouncing +19341 19341/tcp # pfSense nat bouncing +19341 19341/udp # pfSense nat bouncing +19342 19342/tcp # pfSense nat bouncing +19342 19342/udp # pfSense nat bouncing +19343 19343/tcp # pfSense nat bouncing +19343 19343/udp # pfSense nat bouncing +19344 19344/tcp # pfSense nat bouncing +19344 19344/udp # pfSense nat bouncing +19345 19345/tcp # pfSense nat bouncing +19345 19345/udp # pfSense nat bouncing +19346 19346/tcp # pfSense nat bouncing +19346 19346/udp # pfSense nat bouncing +19347 19347/tcp # pfSense nat bouncing +19347 19347/udp # pfSense nat bouncing +19348 19348/tcp # pfSense nat bouncing +19348 19348/udp # pfSense nat bouncing +19349 19349/tcp # pfSense nat bouncing +19349 19349/udp # pfSense nat bouncing +19350 19350/tcp # pfSense nat bouncing +19350 19350/udp # pfSense nat bouncing +19351 19351/tcp # pfSense nat bouncing +19351 19351/udp # pfSense nat bouncing +19352 19352/tcp # pfSense nat bouncing +19352 19352/udp # pfSense nat bouncing +19353 19353/tcp # pfSense nat bouncing +19353 19353/udp # pfSense nat bouncing +19354 19354/tcp # pfSense nat bouncing +19354 19354/udp # pfSense nat bouncing +19355 19355/tcp # pfSense nat bouncing +19355 19355/udp # pfSense nat bouncing +19356 19356/tcp # pfSense nat bouncing +19356 19356/udp # pfSense nat bouncing +19357 19357/tcp # pfSense nat bouncing +19357 19357/udp # pfSense nat bouncing +19358 19358/tcp # pfSense nat bouncing +19358 19358/udp # pfSense nat bouncing +19359 19359/tcp # pfSense nat bouncing +19359 19359/udp # pfSense nat bouncing +19360 19360/tcp # pfSense nat bouncing +19360 19360/udp # pfSense nat bouncing +19361 19361/tcp # pfSense nat bouncing +19361 19361/udp # pfSense nat bouncing +19362 19362/tcp # pfSense nat bouncing +19362 19362/udp # pfSense nat bouncing +19363 19363/tcp # pfSense nat bouncing +19363 19363/udp # pfSense nat bouncing +19364 19364/tcp # pfSense nat bouncing +19364 19364/udp # pfSense nat bouncing +19365 19365/tcp # pfSense nat bouncing +19365 19365/udp # pfSense nat bouncing +19366 19366/tcp # pfSense nat bouncing +19366 19366/udp # pfSense nat bouncing +19367 19367/tcp # pfSense nat bouncing +19367 19367/udp # pfSense nat bouncing +19368 19368/tcp # pfSense nat bouncing +19368 19368/udp # pfSense nat bouncing +19369 19369/tcp # pfSense nat bouncing +19369 19369/udp # pfSense nat bouncing +19370 19370/tcp # pfSense nat bouncing +19370 19370/udp # pfSense nat bouncing +19371 19371/tcp # pfSense nat bouncing +19371 19371/udp # pfSense nat bouncing +19372 19372/tcp # pfSense nat bouncing +19372 19372/udp # pfSense nat bouncing +19373 19373/tcp # pfSense nat bouncing +19373 19373/udp # pfSense nat bouncing +19374 19374/tcp # pfSense nat bouncing +19374 19374/udp # pfSense nat bouncing +19375 19375/tcp # pfSense nat bouncing +19375 19375/udp # pfSense nat bouncing +19376 19376/tcp # pfSense nat bouncing +19376 19376/udp # pfSense nat bouncing +19377 19377/tcp # pfSense nat bouncing +19377 19377/udp # pfSense nat bouncing +19378 19378/tcp # pfSense nat bouncing +19378 19378/udp # pfSense nat bouncing +19379 19379/tcp # pfSense nat bouncing +19379 19379/udp # pfSense nat bouncing +19380 19380/tcp # pfSense nat bouncing +19380 19380/udp # pfSense nat bouncing +19381 19381/tcp # pfSense nat bouncing +19381 19381/udp # pfSense nat bouncing +19382 19382/tcp # pfSense nat bouncing +19382 19382/udp # pfSense nat bouncing +19383 19383/tcp # pfSense nat bouncing +19383 19383/udp # pfSense nat bouncing +19384 19384/tcp # pfSense nat bouncing +19384 19384/udp # pfSense nat bouncing +19385 19385/tcp # pfSense nat bouncing +19385 19385/udp # pfSense nat bouncing +19386 19386/tcp # pfSense nat bouncing +19386 19386/udp # pfSense nat bouncing +19387 19387/tcp # pfSense nat bouncing +19387 19387/udp # pfSense nat bouncing +19388 19388/tcp # pfSense nat bouncing +19388 19388/udp # pfSense nat bouncing +19389 19389/tcp # pfSense nat bouncing +19389 19389/udp # pfSense nat bouncing +19390 19390/tcp # pfSense nat bouncing +19390 19390/udp # pfSense nat bouncing +19391 19391/tcp # pfSense nat bouncing +19391 19391/udp # pfSense nat bouncing +19392 19392/tcp # pfSense nat bouncing +19392 19392/udp # pfSense nat bouncing +19393 19393/tcp # pfSense nat bouncing +19393 19393/udp # pfSense nat bouncing +19394 19394/tcp # pfSense nat bouncing +19394 19394/udp # pfSense nat bouncing +19395 19395/tcp # pfSense nat bouncing +19395 19395/udp # pfSense nat bouncing +19396 19396/tcp # pfSense nat bouncing +19396 19396/udp # pfSense nat bouncing +19397 19397/tcp # pfSense nat bouncing +19397 19397/udp # pfSense nat bouncing +19398 19398/tcp # pfSense nat bouncing +19398 19398/udp # pfSense nat bouncing +19399 19399/tcp # pfSense nat bouncing +19399 19399/udp # pfSense nat bouncing +19400 19400/tcp # pfSense nat bouncing +19400 19400/udp # pfSense nat bouncing +19401 19401/tcp # pfSense nat bouncing +19401 19401/udp # pfSense nat bouncing +19402 19402/tcp # pfSense nat bouncing +19402 19402/udp # pfSense nat bouncing +19403 19403/tcp # pfSense nat bouncing +19403 19403/udp # pfSense nat bouncing +19404 19404/tcp # pfSense nat bouncing +19404 19404/udp # pfSense nat bouncing +19405 19405/tcp # pfSense nat bouncing +19405 19405/udp # pfSense nat bouncing +19406 19406/tcp # pfSense nat bouncing +19406 19406/udp # pfSense nat bouncing +19407 19407/tcp # pfSense nat bouncing +19407 19407/udp # pfSense nat bouncing +19408 19408/tcp # pfSense nat bouncing +19408 19408/udp # pfSense nat bouncing +19409 19409/tcp # pfSense nat bouncing +19409 19409/udp # pfSense nat bouncing +19410 19410/tcp # pfSense nat bouncing +19410 19410/udp # pfSense nat bouncing +19411 19411/tcp # pfSense nat bouncing +19411 19411/udp # pfSense nat bouncing +19412 19412/tcp # pfSense nat bouncing +19412 19412/udp # pfSense nat bouncing +19413 19413/tcp # pfSense nat bouncing +19413 19413/udp # pfSense nat bouncing +19414 19414/tcp # pfSense nat bouncing +19414 19414/udp # pfSense nat bouncing +19415 19415/tcp # pfSense nat bouncing +19415 19415/udp # pfSense nat bouncing +19416 19416/tcp # pfSense nat bouncing +19416 19416/udp # pfSense nat bouncing +19417 19417/tcp # pfSense nat bouncing +19417 19417/udp # pfSense nat bouncing +19418 19418/tcp # pfSense nat bouncing +19418 19418/udp # pfSense nat bouncing +19419 19419/tcp # pfSense nat bouncing +19419 19419/udp # pfSense nat bouncing +19420 19420/tcp # pfSense nat bouncing +19420 19420/udp # pfSense nat bouncing +19421 19421/tcp # pfSense nat bouncing +19421 19421/udp # pfSense nat bouncing +19422 19422/tcp # pfSense nat bouncing +19422 19422/udp # pfSense nat bouncing +19423 19423/tcp # pfSense nat bouncing +19423 19423/udp # pfSense nat bouncing +19424 19424/tcp # pfSense nat bouncing +19424 19424/udp # pfSense nat bouncing +19425 19425/tcp # pfSense nat bouncing +19425 19425/udp # pfSense nat bouncing +19426 19426/tcp # pfSense nat bouncing +19426 19426/udp # pfSense nat bouncing +19427 19427/tcp # pfSense nat bouncing +19427 19427/udp # pfSense nat bouncing +19428 19428/tcp # pfSense nat bouncing +19428 19428/udp # pfSense nat bouncing +19429 19429/tcp # pfSense nat bouncing +19429 19429/udp # pfSense nat bouncing +19430 19430/tcp # pfSense nat bouncing +19430 19430/udp # pfSense nat bouncing +19431 19431/tcp # pfSense nat bouncing +19431 19431/udp # pfSense nat bouncing +19432 19432/tcp # pfSense nat bouncing +19432 19432/udp # pfSense nat bouncing +19433 19433/tcp # pfSense nat bouncing +19433 19433/udp # pfSense nat bouncing +19434 19434/tcp # pfSense nat bouncing +19434 19434/udp # pfSense nat bouncing +19435 19435/tcp # pfSense nat bouncing +19435 19435/udp # pfSense nat bouncing +19436 19436/tcp # pfSense nat bouncing +19436 19436/udp # pfSense nat bouncing +19437 19437/tcp # pfSense nat bouncing +19437 19437/udp # pfSense nat bouncing +19438 19438/tcp # pfSense nat bouncing +19438 19438/udp # pfSense nat bouncing +19439 19439/tcp # pfSense nat bouncing +19439 19439/udp # pfSense nat bouncing +19440 19440/tcp # pfSense nat bouncing +19440 19440/udp # pfSense nat bouncing +19441 19441/tcp # pfSense nat bouncing +19441 19441/udp # pfSense nat bouncing +19442 19442/tcp # pfSense nat bouncing +19442 19442/udp # pfSense nat bouncing +19443 19443/tcp # pfSense nat bouncing +19443 19443/udp # pfSense nat bouncing +19444 19444/tcp # pfSense nat bouncing +19444 19444/udp # pfSense nat bouncing +19445 19445/tcp # pfSense nat bouncing +19445 19445/udp # pfSense nat bouncing +19446 19446/tcp # pfSense nat bouncing +19446 19446/udp # pfSense nat bouncing +19447 19447/tcp # pfSense nat bouncing +19447 19447/udp # pfSense nat bouncing +19448 19448/tcp # pfSense nat bouncing +19448 19448/udp # pfSense nat bouncing +19449 19449/tcp # pfSense nat bouncing +19449 19449/udp # pfSense nat bouncing +19450 19450/tcp # pfSense nat bouncing +19450 19450/udp # pfSense nat bouncing +19451 19451/tcp # pfSense nat bouncing +19451 19451/udp # pfSense nat bouncing +19452 19452/tcp # pfSense nat bouncing +19452 19452/udp # pfSense nat bouncing +19453 19453/tcp # pfSense nat bouncing +19453 19453/udp # pfSense nat bouncing +19454 19454/tcp # pfSense nat bouncing +19454 19454/udp # pfSense nat bouncing +19455 19455/tcp # pfSense nat bouncing +19455 19455/udp # pfSense nat bouncing +19456 19456/tcp # pfSense nat bouncing +19456 19456/udp # pfSense nat bouncing +19457 19457/tcp # pfSense nat bouncing +19457 19457/udp # pfSense nat bouncing +19458 19458/tcp # pfSense nat bouncing +19458 19458/udp # pfSense nat bouncing +19459 19459/tcp # pfSense nat bouncing +19459 19459/udp # pfSense nat bouncing +19460 19460/tcp # pfSense nat bouncing +19460 19460/udp # pfSense nat bouncing +19461 19461/tcp # pfSense nat bouncing +19461 19461/udp # pfSense nat bouncing +19462 19462/tcp # pfSense nat bouncing +19462 19462/udp # pfSense nat bouncing +19463 19463/tcp # pfSense nat bouncing +19463 19463/udp # pfSense nat bouncing +19464 19464/tcp # pfSense nat bouncing +19464 19464/udp # pfSense nat bouncing +19465 19465/tcp # pfSense nat bouncing +19465 19465/udp # pfSense nat bouncing +19466 19466/tcp # pfSense nat bouncing +19466 19466/udp # pfSense nat bouncing +19467 19467/tcp # pfSense nat bouncing +19467 19467/udp # pfSense nat bouncing +19468 19468/tcp # pfSense nat bouncing +19468 19468/udp # pfSense nat bouncing +19469 19469/tcp # pfSense nat bouncing +19469 19469/udp # pfSense nat bouncing +19470 19470/tcp # pfSense nat bouncing +19470 19470/udp # pfSense nat bouncing +19471 19471/tcp # pfSense nat bouncing +19471 19471/udp # pfSense nat bouncing +19472 19472/tcp # pfSense nat bouncing +19472 19472/udp # pfSense nat bouncing +19473 19473/tcp # pfSense nat bouncing +19473 19473/udp # pfSense nat bouncing +19474 19474/tcp # pfSense nat bouncing +19474 19474/udp # pfSense nat bouncing +19475 19475/tcp # pfSense nat bouncing +19475 19475/udp # pfSense nat bouncing +19476 19476/tcp # pfSense nat bouncing +19476 19476/udp # pfSense nat bouncing +19477 19477/tcp # pfSense nat bouncing +19477 19477/udp # pfSense nat bouncing +19478 19478/tcp # pfSense nat bouncing +19478 19478/udp # pfSense nat bouncing +19479 19479/tcp # pfSense nat bouncing +19479 19479/udp # pfSense nat bouncing +19480 19480/tcp # pfSense nat bouncing +19480 19480/udp # pfSense nat bouncing +19481 19481/tcp # pfSense nat bouncing +19481 19481/udp # pfSense nat bouncing +19482 19482/tcp # pfSense nat bouncing +19482 19482/udp # pfSense nat bouncing +19483 19483/tcp # pfSense nat bouncing +19483 19483/udp # pfSense nat bouncing +19484 19484/tcp # pfSense nat bouncing +19484 19484/udp # pfSense nat bouncing +19485 19485/tcp # pfSense nat bouncing +19485 19485/udp # pfSense nat bouncing +19486 19486/tcp # pfSense nat bouncing +19486 19486/udp # pfSense nat bouncing +19487 19487/tcp # pfSense nat bouncing +19487 19487/udp # pfSense nat bouncing +19488 19488/tcp # pfSense nat bouncing +19488 19488/udp # pfSense nat bouncing +19489 19489/tcp # pfSense nat bouncing +19489 19489/udp # pfSense nat bouncing +19490 19490/tcp # pfSense nat bouncing +19490 19490/udp # pfSense nat bouncing +19491 19491/tcp # pfSense nat bouncing +19491 19491/udp # pfSense nat bouncing +19492 19492/tcp # pfSense nat bouncing +19492 19492/udp # pfSense nat bouncing +19493 19493/tcp # pfSense nat bouncing +19493 19493/udp # pfSense nat bouncing +19494 19494/tcp # pfSense nat bouncing +19494 19494/udp # pfSense nat bouncing +19495 19495/tcp # pfSense nat bouncing +19495 19495/udp # pfSense nat bouncing +19496 19496/tcp # pfSense nat bouncing +19496 19496/udp # pfSense nat bouncing +19497 19497/tcp # pfSense nat bouncing +19497 19497/udp # pfSense nat bouncing +19498 19498/tcp # pfSense nat bouncing +19498 19498/udp # pfSense nat bouncing +19499 19499/tcp # pfSense nat bouncing +19499 19499/udp # pfSense nat bouncing +19500 19500/tcp # pfSense nat bouncing +19500 19500/udp # pfSense nat bouncing +19501 19501/tcp # pfSense nat bouncing +19501 19501/udp # pfSense nat bouncing +19502 19502/tcp # pfSense nat bouncing +19502 19502/udp # pfSense nat bouncing +19503 19503/tcp # pfSense nat bouncing +19503 19503/udp # pfSense nat bouncing +19504 19504/tcp # pfSense nat bouncing +19504 19504/udp # pfSense nat bouncing +19505 19505/tcp # pfSense nat bouncing +19505 19505/udp # pfSense nat bouncing +19506 19506/tcp # pfSense nat bouncing +19506 19506/udp # pfSense nat bouncing +19507 19507/tcp # pfSense nat bouncing +19507 19507/udp # pfSense nat bouncing +19508 19508/tcp # pfSense nat bouncing +19508 19508/udp # pfSense nat bouncing +19509 19509/tcp # pfSense nat bouncing +19509 19509/udp # pfSense nat bouncing +19510 19510/tcp # pfSense nat bouncing +19510 19510/udp # pfSense nat bouncing +19511 19511/tcp # pfSense nat bouncing +19511 19511/udp # pfSense nat bouncing +19512 19512/tcp # pfSense nat bouncing +19512 19512/udp # pfSense nat bouncing +19513 19513/tcp # pfSense nat bouncing +19513 19513/udp # pfSense nat bouncing +19514 19514/tcp # pfSense nat bouncing +19514 19514/udp # pfSense nat bouncing +19515 19515/tcp # pfSense nat bouncing +19515 19515/udp # pfSense nat bouncing +19516 19516/tcp # pfSense nat bouncing +19516 19516/udp # pfSense nat bouncing +19517 19517/tcp # pfSense nat bouncing +19517 19517/udp # pfSense nat bouncing +19518 19518/tcp # pfSense nat bouncing +19518 19518/udp # pfSense nat bouncing +19519 19519/tcp # pfSense nat bouncing +19519 19519/udp # pfSense nat bouncing +19520 19520/tcp # pfSense nat bouncing +19520 19520/udp # pfSense nat bouncing +19521 19521/tcp # pfSense nat bouncing +19521 19521/udp # pfSense nat bouncing +19522 19522/tcp # pfSense nat bouncing +19522 19522/udp # pfSense nat bouncing +19523 19523/tcp # pfSense nat bouncing +19523 19523/udp # pfSense nat bouncing +19524 19524/tcp # pfSense nat bouncing +19524 19524/udp # pfSense nat bouncing +19525 19525/tcp # pfSense nat bouncing +19525 19525/udp # pfSense nat bouncing +19526 19526/tcp # pfSense nat bouncing +19526 19526/udp # pfSense nat bouncing +19527 19527/tcp # pfSense nat bouncing +19527 19527/udp # pfSense nat bouncing +19528 19528/tcp # pfSense nat bouncing +19528 19528/udp # pfSense nat bouncing +19529 19529/tcp # pfSense nat bouncing +19529 19529/udp # pfSense nat bouncing +19530 19530/tcp # pfSense nat bouncing +19530 19530/udp # pfSense nat bouncing +19531 19531/tcp # pfSense nat bouncing +19531 19531/udp # pfSense nat bouncing +19532 19532/tcp # pfSense nat bouncing +19532 19532/udp # pfSense nat bouncing +19533 19533/tcp # pfSense nat bouncing +19533 19533/udp # pfSense nat bouncing +19534 19534/tcp # pfSense nat bouncing +19534 19534/udp # pfSense nat bouncing +19535 19535/tcp # pfSense nat bouncing +19535 19535/udp # pfSense nat bouncing +19536 19536/tcp # pfSense nat bouncing +19536 19536/udp # pfSense nat bouncing +19537 19537/tcp # pfSense nat bouncing +19537 19537/udp # pfSense nat bouncing +19538 19538/tcp # pfSense nat bouncing +19538 19538/udp # pfSense nat bouncing +19539 19539/tcp # pfSense nat bouncing +19539 19539/udp # pfSense nat bouncing +19540 19540/tcp # pfSense nat bouncing +19540 19540/udp # pfSense nat bouncing +19541 19541/tcp # pfSense nat bouncing +19541 19541/udp # pfSense nat bouncing +19542 19542/tcp # pfSense nat bouncing +19542 19542/udp # pfSense nat bouncing +19543 19543/tcp # pfSense nat bouncing +19543 19543/udp # pfSense nat bouncing +19544 19544/tcp # pfSense nat bouncing +19544 19544/udp # pfSense nat bouncing +19545 19545/tcp # pfSense nat bouncing +19545 19545/udp # pfSense nat bouncing +19546 19546/tcp # pfSense nat bouncing +19546 19546/udp # pfSense nat bouncing +19547 19547/tcp # pfSense nat bouncing +19547 19547/udp # pfSense nat bouncing +19548 19548/tcp # pfSense nat bouncing +19548 19548/udp # pfSense nat bouncing +19549 19549/tcp # pfSense nat bouncing +19549 19549/udp # pfSense nat bouncing +19550 19550/tcp # pfSense nat bouncing +19550 19550/udp # pfSense nat bouncing +19551 19551/tcp # pfSense nat bouncing +19551 19551/udp # pfSense nat bouncing +19552 19552/tcp # pfSense nat bouncing +19552 19552/udp # pfSense nat bouncing +19553 19553/tcp # pfSense nat bouncing +19553 19553/udp # pfSense nat bouncing +19554 19554/tcp # pfSense nat bouncing +19554 19554/udp # pfSense nat bouncing +19555 19555/tcp # pfSense nat bouncing +19555 19555/udp # pfSense nat bouncing +19556 19556/tcp # pfSense nat bouncing +19556 19556/udp # pfSense nat bouncing +19557 19557/tcp # pfSense nat bouncing +19557 19557/udp # pfSense nat bouncing +19558 19558/tcp # pfSense nat bouncing +19558 19558/udp # pfSense nat bouncing +19559 19559/tcp # pfSense nat bouncing +19559 19559/udp # pfSense nat bouncing +19560 19560/tcp # pfSense nat bouncing +19560 19560/udp # pfSense nat bouncing +19561 19561/tcp # pfSense nat bouncing +19561 19561/udp # pfSense nat bouncing +19562 19562/tcp # pfSense nat bouncing +19562 19562/udp # pfSense nat bouncing +19563 19563/tcp # pfSense nat bouncing +19563 19563/udp # pfSense nat bouncing +19564 19564/tcp # pfSense nat bouncing +19564 19564/udp # pfSense nat bouncing +19565 19565/tcp # pfSense nat bouncing +19565 19565/udp # pfSense nat bouncing +19566 19566/tcp # pfSense nat bouncing +19566 19566/udp # pfSense nat bouncing +19567 19567/tcp # pfSense nat bouncing +19567 19567/udp # pfSense nat bouncing +19568 19568/tcp # pfSense nat bouncing +19568 19568/udp # pfSense nat bouncing +19569 19569/tcp # pfSense nat bouncing +19569 19569/udp # pfSense nat bouncing +19570 19570/tcp # pfSense nat bouncing +19570 19570/udp # pfSense nat bouncing +19571 19571/tcp # pfSense nat bouncing +19571 19571/udp # pfSense nat bouncing +19572 19572/tcp # pfSense nat bouncing +19572 19572/udp # pfSense nat bouncing +19573 19573/tcp # pfSense nat bouncing +19573 19573/udp # pfSense nat bouncing +19574 19574/tcp # pfSense nat bouncing +19574 19574/udp # pfSense nat bouncing +19575 19575/tcp # pfSense nat bouncing +19575 19575/udp # pfSense nat bouncing +19576 19576/tcp # pfSense nat bouncing +19576 19576/udp # pfSense nat bouncing +19577 19577/tcp # pfSense nat bouncing +19577 19577/udp # pfSense nat bouncing +19578 19578/tcp # pfSense nat bouncing +19578 19578/udp # pfSense nat bouncing +19579 19579/tcp # pfSense nat bouncing +19579 19579/udp # pfSense nat bouncing +19580 19580/tcp # pfSense nat bouncing +19580 19580/udp # pfSense nat bouncing +19581 19581/tcp # pfSense nat bouncing +19581 19581/udp # pfSense nat bouncing +19582 19582/tcp # pfSense nat bouncing +19582 19582/udp # pfSense nat bouncing +19583 19583/tcp # pfSense nat bouncing +19583 19583/udp # pfSense nat bouncing +19584 19584/tcp # pfSense nat bouncing +19584 19584/udp # pfSense nat bouncing +19585 19585/tcp # pfSense nat bouncing +19585 19585/udp # pfSense nat bouncing +19586 19586/tcp # pfSense nat bouncing +19586 19586/udp # pfSense nat bouncing +19587 19587/tcp # pfSense nat bouncing +19587 19587/udp # pfSense nat bouncing +19588 19588/tcp # pfSense nat bouncing +19588 19588/udp # pfSense nat bouncing +19589 19589/tcp # pfSense nat bouncing +19589 19589/udp # pfSense nat bouncing +19590 19590/tcp # pfSense nat bouncing +19590 19590/udp # pfSense nat bouncing +19591 19591/tcp # pfSense nat bouncing +19591 19591/udp # pfSense nat bouncing +19592 19592/tcp # pfSense nat bouncing +19592 19592/udp # pfSense nat bouncing +19593 19593/tcp # pfSense nat bouncing +19593 19593/udp # pfSense nat bouncing +19594 19594/tcp # pfSense nat bouncing +19594 19594/udp # pfSense nat bouncing +19595 19595/tcp # pfSense nat bouncing +19595 19595/udp # pfSense nat bouncing +19596 19596/tcp # pfSense nat bouncing +19596 19596/udp # pfSense nat bouncing +19597 19597/tcp # pfSense nat bouncing +19597 19597/udp # pfSense nat bouncing +19598 19598/tcp # pfSense nat bouncing +19598 19598/udp # pfSense nat bouncing +19599 19599/tcp # pfSense nat bouncing +19599 19599/udp # pfSense nat bouncing +19600 19600/tcp # pfSense nat bouncing +19600 19600/udp # pfSense nat bouncing +19601 19601/tcp # pfSense nat bouncing +19601 19601/udp # pfSense nat bouncing +19602 19602/tcp # pfSense nat bouncing +19602 19602/udp # pfSense nat bouncing +19603 19603/tcp # pfSense nat bouncing +19603 19603/udp # pfSense nat bouncing +19604 19604/tcp # pfSense nat bouncing +19604 19604/udp # pfSense nat bouncing +19605 19605/tcp # pfSense nat bouncing +19605 19605/udp # pfSense nat bouncing +19606 19606/tcp # pfSense nat bouncing +19606 19606/udp # pfSense nat bouncing +19607 19607/tcp # pfSense nat bouncing +19607 19607/udp # pfSense nat bouncing +19608 19608/tcp # pfSense nat bouncing +19608 19608/udp # pfSense nat bouncing +19609 19609/tcp # pfSense nat bouncing +19609 19609/udp # pfSense nat bouncing +19610 19610/tcp # pfSense nat bouncing +19610 19610/udp # pfSense nat bouncing +19611 19611/tcp # pfSense nat bouncing +19611 19611/udp # pfSense nat bouncing +19612 19612/tcp # pfSense nat bouncing +19612 19612/udp # pfSense nat bouncing +19613 19613/tcp # pfSense nat bouncing +19613 19613/udp # pfSense nat bouncing +19614 19614/tcp # pfSense nat bouncing +19614 19614/udp # pfSense nat bouncing +19615 19615/tcp # pfSense nat bouncing +19615 19615/udp # pfSense nat bouncing +19616 19616/tcp # pfSense nat bouncing +19616 19616/udp # pfSense nat bouncing +19617 19617/tcp # pfSense nat bouncing +19617 19617/udp # pfSense nat bouncing +19618 19618/tcp # pfSense nat bouncing +19618 19618/udp # pfSense nat bouncing +19619 19619/tcp # pfSense nat bouncing +19619 19619/udp # pfSense nat bouncing +19620 19620/tcp # pfSense nat bouncing +19620 19620/udp # pfSense nat bouncing +19621 19621/tcp # pfSense nat bouncing +19621 19621/udp # pfSense nat bouncing +19622 19622/tcp # pfSense nat bouncing +19622 19622/udp # pfSense nat bouncing +19623 19623/tcp # pfSense nat bouncing +19623 19623/udp # pfSense nat bouncing +19624 19624/tcp # pfSense nat bouncing +19624 19624/udp # pfSense nat bouncing +19625 19625/tcp # pfSense nat bouncing +19625 19625/udp # pfSense nat bouncing +19626 19626/tcp # pfSense nat bouncing +19626 19626/udp # pfSense nat bouncing +19627 19627/tcp # pfSense nat bouncing +19627 19627/udp # pfSense nat bouncing +19628 19628/tcp # pfSense nat bouncing +19628 19628/udp # pfSense nat bouncing +19629 19629/tcp # pfSense nat bouncing +19629 19629/udp # pfSense nat bouncing +19630 19630/tcp # pfSense nat bouncing +19630 19630/udp # pfSense nat bouncing +19631 19631/tcp # pfSense nat bouncing +19631 19631/udp # pfSense nat bouncing +19632 19632/tcp # pfSense nat bouncing +19632 19632/udp # pfSense nat bouncing +19633 19633/tcp # pfSense nat bouncing +19633 19633/udp # pfSense nat bouncing +19634 19634/tcp # pfSense nat bouncing +19634 19634/udp # pfSense nat bouncing +19635 19635/tcp # pfSense nat bouncing +19635 19635/udp # pfSense nat bouncing +19636 19636/tcp # pfSense nat bouncing +19636 19636/udp # pfSense nat bouncing +19637 19637/tcp # pfSense nat bouncing +19637 19637/udp # pfSense nat bouncing +19638 19638/tcp # pfSense nat bouncing +19638 19638/udp # pfSense nat bouncing +19639 19639/tcp # pfSense nat bouncing +19639 19639/udp # pfSense nat bouncing +19640 19640/tcp # pfSense nat bouncing +19640 19640/udp # pfSense nat bouncing +19641 19641/tcp # pfSense nat bouncing +19641 19641/udp # pfSense nat bouncing +19642 19642/tcp # pfSense nat bouncing +19642 19642/udp # pfSense nat bouncing +19643 19643/tcp # pfSense nat bouncing +19643 19643/udp # pfSense nat bouncing +19644 19644/tcp # pfSense nat bouncing +19644 19644/udp # pfSense nat bouncing +19645 19645/tcp # pfSense nat bouncing +19645 19645/udp # pfSense nat bouncing +19646 19646/tcp # pfSense nat bouncing +19646 19646/udp # pfSense nat bouncing +19647 19647/tcp # pfSense nat bouncing +19647 19647/udp # pfSense nat bouncing +19648 19648/tcp # pfSense nat bouncing +19648 19648/udp # pfSense nat bouncing +19649 19649/tcp # pfSense nat bouncing +19649 19649/udp # pfSense nat bouncing +19650 19650/tcp # pfSense nat bouncing +19650 19650/udp # pfSense nat bouncing +19651 19651/tcp # pfSense nat bouncing +19651 19651/udp # pfSense nat bouncing +19652 19652/tcp # pfSense nat bouncing +19652 19652/udp # pfSense nat bouncing +19653 19653/tcp # pfSense nat bouncing +19653 19653/udp # pfSense nat bouncing +19654 19654/tcp # pfSense nat bouncing +19654 19654/udp # pfSense nat bouncing +19655 19655/tcp # pfSense nat bouncing +19655 19655/udp # pfSense nat bouncing +19656 19656/tcp # pfSense nat bouncing +19656 19656/udp # pfSense nat bouncing +19657 19657/tcp # pfSense nat bouncing +19657 19657/udp # pfSense nat bouncing +19658 19658/tcp # pfSense nat bouncing +19658 19658/udp # pfSense nat bouncing +19659 19659/tcp # pfSense nat bouncing +19659 19659/udp # pfSense nat bouncing +19660 19660/tcp # pfSense nat bouncing +19660 19660/udp # pfSense nat bouncing +19661 19661/tcp # pfSense nat bouncing +19661 19661/udp # pfSense nat bouncing +19662 19662/tcp # pfSense nat bouncing +19662 19662/udp # pfSense nat bouncing +19663 19663/tcp # pfSense nat bouncing +19663 19663/udp # pfSense nat bouncing +19664 19664/tcp # pfSense nat bouncing +19664 19664/udp # pfSense nat bouncing +19665 19665/tcp # pfSense nat bouncing +19665 19665/udp # pfSense nat bouncing +19666 19666/tcp # pfSense nat bouncing +19666 19666/udp # pfSense nat bouncing +19667 19667/tcp # pfSense nat bouncing +19667 19667/udp # pfSense nat bouncing +19668 19668/tcp # pfSense nat bouncing +19668 19668/udp # pfSense nat bouncing +19669 19669/tcp # pfSense nat bouncing +19669 19669/udp # pfSense nat bouncing +19670 19670/tcp # pfSense nat bouncing +19670 19670/udp # pfSense nat bouncing +19671 19671/tcp # pfSense nat bouncing +19671 19671/udp # pfSense nat bouncing +19672 19672/tcp # pfSense nat bouncing +19672 19672/udp # pfSense nat bouncing +19673 19673/tcp # pfSense nat bouncing +19673 19673/udp # pfSense nat bouncing +19674 19674/tcp # pfSense nat bouncing +19674 19674/udp # pfSense nat bouncing +19675 19675/tcp # pfSense nat bouncing +19675 19675/udp # pfSense nat bouncing +19676 19676/tcp # pfSense nat bouncing +19676 19676/udp # pfSense nat bouncing +19677 19677/tcp # pfSense nat bouncing +19677 19677/udp # pfSense nat bouncing +19678 19678/tcp # pfSense nat bouncing +19678 19678/udp # pfSense nat bouncing +19679 19679/tcp # pfSense nat bouncing +19679 19679/udp # pfSense nat bouncing +19680 19680/tcp # pfSense nat bouncing +19680 19680/udp # pfSense nat bouncing +19681 19681/tcp # pfSense nat bouncing +19681 19681/udp # pfSense nat bouncing +19682 19682/tcp # pfSense nat bouncing +19682 19682/udp # pfSense nat bouncing +19683 19683/tcp # pfSense nat bouncing +19683 19683/udp # pfSense nat bouncing +19684 19684/tcp # pfSense nat bouncing +19684 19684/udp # pfSense nat bouncing +19685 19685/tcp # pfSense nat bouncing +19685 19685/udp # pfSense nat bouncing +19686 19686/tcp # pfSense nat bouncing +19686 19686/udp # pfSense nat bouncing +19687 19687/tcp # pfSense nat bouncing +19687 19687/udp # pfSense nat bouncing +19688 19688/tcp # pfSense nat bouncing +19688 19688/udp # pfSense nat bouncing +19689 19689/tcp # pfSense nat bouncing +19689 19689/udp # pfSense nat bouncing +19690 19690/tcp # pfSense nat bouncing +19690 19690/udp # pfSense nat bouncing +19691 19691/tcp # pfSense nat bouncing +19691 19691/udp # pfSense nat bouncing +19692 19692/tcp # pfSense nat bouncing +19692 19692/udp # pfSense nat bouncing +19693 19693/tcp # pfSense nat bouncing +19693 19693/udp # pfSense nat bouncing +19694 19694/tcp # pfSense nat bouncing +19694 19694/udp # pfSense nat bouncing +19695 19695/tcp # pfSense nat bouncing +19695 19695/udp # pfSense nat bouncing +19696 19696/tcp # pfSense nat bouncing +19696 19696/udp # pfSense nat bouncing +19697 19697/tcp # pfSense nat bouncing +19697 19697/udp # pfSense nat bouncing +19698 19698/tcp # pfSense nat bouncing +19698 19698/udp # pfSense nat bouncing +19699 19699/tcp # pfSense nat bouncing +19699 19699/udp # pfSense nat bouncing +19700 19700/tcp # pfSense nat bouncing +19700 19700/udp # pfSense nat bouncing +19701 19701/tcp # pfSense nat bouncing +19701 19701/udp # pfSense nat bouncing +19702 19702/tcp # pfSense nat bouncing +19702 19702/udp # pfSense nat bouncing +19703 19703/tcp # pfSense nat bouncing +19703 19703/udp # pfSense nat bouncing +19704 19704/tcp # pfSense nat bouncing +19704 19704/udp # pfSense nat bouncing +19705 19705/tcp # pfSense nat bouncing +19705 19705/udp # pfSense nat bouncing +19706 19706/tcp # pfSense nat bouncing +19706 19706/udp # pfSense nat bouncing +19707 19707/tcp # pfSense nat bouncing +19707 19707/udp # pfSense nat bouncing +19708 19708/tcp # pfSense nat bouncing +19708 19708/udp # pfSense nat bouncing +19709 19709/tcp # pfSense nat bouncing +19709 19709/udp # pfSense nat bouncing +19710 19710/tcp # pfSense nat bouncing +19710 19710/udp # pfSense nat bouncing +19711 19711/tcp # pfSense nat bouncing +19711 19711/udp # pfSense nat bouncing +19712 19712/tcp # pfSense nat bouncing +19712 19712/udp # pfSense nat bouncing +19713 19713/tcp # pfSense nat bouncing +19713 19713/udp # pfSense nat bouncing +19714 19714/tcp # pfSense nat bouncing +19714 19714/udp # pfSense nat bouncing +19715 19715/tcp # pfSense nat bouncing +19715 19715/udp # pfSense nat bouncing +19716 19716/tcp # pfSense nat bouncing +19716 19716/udp # pfSense nat bouncing +19717 19717/tcp # pfSense nat bouncing +19717 19717/udp # pfSense nat bouncing +19718 19718/tcp # pfSense nat bouncing +19718 19718/udp # pfSense nat bouncing +19719 19719/tcp # pfSense nat bouncing +19719 19719/udp # pfSense nat bouncing +19720 19720/tcp # pfSense nat bouncing +19720 19720/udp # pfSense nat bouncing +19721 19721/tcp # pfSense nat bouncing +19721 19721/udp # pfSense nat bouncing +19722 19722/tcp # pfSense nat bouncing +19722 19722/udp # pfSense nat bouncing +19723 19723/tcp # pfSense nat bouncing +19723 19723/udp # pfSense nat bouncing +19724 19724/tcp # pfSense nat bouncing +19724 19724/udp # pfSense nat bouncing +19725 19725/tcp # pfSense nat bouncing +19725 19725/udp # pfSense nat bouncing +19726 19726/tcp # pfSense nat bouncing +19726 19726/udp # pfSense nat bouncing +19727 19727/tcp # pfSense nat bouncing +19727 19727/udp # pfSense nat bouncing +19728 19728/tcp # pfSense nat bouncing +19728 19728/udp # pfSense nat bouncing +19729 19729/tcp # pfSense nat bouncing +19729 19729/udp # pfSense nat bouncing +19730 19730/tcp # pfSense nat bouncing +19730 19730/udp # pfSense nat bouncing +19731 19731/tcp # pfSense nat bouncing +19731 19731/udp # pfSense nat bouncing +19732 19732/tcp # pfSense nat bouncing +19732 19732/udp # pfSense nat bouncing +19733 19733/tcp # pfSense nat bouncing +19733 19733/udp # pfSense nat bouncing +19734 19734/tcp # pfSense nat bouncing +19734 19734/udp # pfSense nat bouncing +19735 19735/tcp # pfSense nat bouncing +19735 19735/udp # pfSense nat bouncing +19736 19736/tcp # pfSense nat bouncing +19736 19736/udp # pfSense nat bouncing +19737 19737/tcp # pfSense nat bouncing +19737 19737/udp # pfSense nat bouncing +19738 19738/tcp # pfSense nat bouncing +19738 19738/udp # pfSense nat bouncing +19739 19739/tcp # pfSense nat bouncing +19739 19739/udp # pfSense nat bouncing +19740 19740/tcp # pfSense nat bouncing +19740 19740/udp # pfSense nat bouncing +19741 19741/tcp # pfSense nat bouncing +19741 19741/udp # pfSense nat bouncing +19742 19742/tcp # pfSense nat bouncing +19742 19742/udp # pfSense nat bouncing +19743 19743/tcp # pfSense nat bouncing +19743 19743/udp # pfSense nat bouncing +19744 19744/tcp # pfSense nat bouncing +19744 19744/udp # pfSense nat bouncing +19745 19745/tcp # pfSense nat bouncing +19745 19745/udp # pfSense nat bouncing +19746 19746/tcp # pfSense nat bouncing +19746 19746/udp # pfSense nat bouncing +19747 19747/tcp # pfSense nat bouncing +19747 19747/udp # pfSense nat bouncing +19748 19748/tcp # pfSense nat bouncing +19748 19748/udp # pfSense nat bouncing +19749 19749/tcp # pfSense nat bouncing +19749 19749/udp # pfSense nat bouncing +19750 19750/tcp # pfSense nat bouncing +19750 19750/udp # pfSense nat bouncing +19751 19751/tcp # pfSense nat bouncing +19751 19751/udp # pfSense nat bouncing +19752 19752/tcp # pfSense nat bouncing +19752 19752/udp # pfSense nat bouncing +19753 19753/tcp # pfSense nat bouncing +19753 19753/udp # pfSense nat bouncing +19754 19754/tcp # pfSense nat bouncing +19754 19754/udp # pfSense nat bouncing +19755 19755/tcp # pfSense nat bouncing +19755 19755/udp # pfSense nat bouncing +19756 19756/tcp # pfSense nat bouncing +19756 19756/udp # pfSense nat bouncing +19757 19757/tcp # pfSense nat bouncing +19757 19757/udp # pfSense nat bouncing +19758 19758/tcp # pfSense nat bouncing +19758 19758/udp # pfSense nat bouncing +19759 19759/tcp # pfSense nat bouncing +19759 19759/udp # pfSense nat bouncing +19760 19760/tcp # pfSense nat bouncing +19760 19760/udp # pfSense nat bouncing +19761 19761/tcp # pfSense nat bouncing +19761 19761/udp # pfSense nat bouncing +19762 19762/tcp # pfSense nat bouncing +19762 19762/udp # pfSense nat bouncing +19763 19763/tcp # pfSense nat bouncing +19763 19763/udp # pfSense nat bouncing +19764 19764/tcp # pfSense nat bouncing +19764 19764/udp # pfSense nat bouncing +19765 19765/tcp # pfSense nat bouncing +19765 19765/udp # pfSense nat bouncing +19766 19766/tcp # pfSense nat bouncing +19766 19766/udp # pfSense nat bouncing +19767 19767/tcp # pfSense nat bouncing +19767 19767/udp # pfSense nat bouncing +19768 19768/tcp # pfSense nat bouncing +19768 19768/udp # pfSense nat bouncing +19769 19769/tcp # pfSense nat bouncing +19769 19769/udp # pfSense nat bouncing +19770 19770/tcp # pfSense nat bouncing +19770 19770/udp # pfSense nat bouncing +19771 19771/tcp # pfSense nat bouncing +19771 19771/udp # pfSense nat bouncing +19772 19772/tcp # pfSense nat bouncing +19772 19772/udp # pfSense nat bouncing +19773 19773/tcp # pfSense nat bouncing +19773 19773/udp # pfSense nat bouncing +19774 19774/tcp # pfSense nat bouncing +19774 19774/udp # pfSense nat bouncing +19775 19775/tcp # pfSense nat bouncing +19775 19775/udp # pfSense nat bouncing +19776 19776/tcp # pfSense nat bouncing +19776 19776/udp # pfSense nat bouncing +19777 19777/tcp # pfSense nat bouncing +19777 19777/udp # pfSense nat bouncing +19778 19778/tcp # pfSense nat bouncing +19778 19778/udp # pfSense nat bouncing +19779 19779/tcp # pfSense nat bouncing +19779 19779/udp # pfSense nat bouncing +19780 19780/tcp # pfSense nat bouncing +19780 19780/udp # pfSense nat bouncing +19781 19781/tcp # pfSense nat bouncing +19781 19781/udp # pfSense nat bouncing +19782 19782/tcp # pfSense nat bouncing +19782 19782/udp # pfSense nat bouncing +19783 19783/tcp # pfSense nat bouncing +19783 19783/udp # pfSense nat bouncing +19784 19784/tcp # pfSense nat bouncing +19784 19784/udp # pfSense nat bouncing +19785 19785/tcp # pfSense nat bouncing +19785 19785/udp # pfSense nat bouncing +19786 19786/tcp # pfSense nat bouncing +19786 19786/udp # pfSense nat bouncing +19787 19787/tcp # pfSense nat bouncing +19787 19787/udp # pfSense nat bouncing +19788 19788/tcp # pfSense nat bouncing +19788 19788/udp # pfSense nat bouncing +19789 19789/tcp # pfSense nat bouncing +19789 19789/udp # pfSense nat bouncing +19790 19790/tcp # pfSense nat bouncing +19790 19790/udp # pfSense nat bouncing +19791 19791/tcp # pfSense nat bouncing +19791 19791/udp # pfSense nat bouncing +19792 19792/tcp # pfSense nat bouncing +19792 19792/udp # pfSense nat bouncing +19793 19793/tcp # pfSense nat bouncing +19793 19793/udp # pfSense nat bouncing +19794 19794/tcp # pfSense nat bouncing +19794 19794/udp # pfSense nat bouncing +19795 19795/tcp # pfSense nat bouncing +19795 19795/udp # pfSense nat bouncing +19796 19796/tcp # pfSense nat bouncing +19796 19796/udp # pfSense nat bouncing +19797 19797/tcp # pfSense nat bouncing +19797 19797/udp # pfSense nat bouncing +19798 19798/tcp # pfSense nat bouncing +19798 19798/udp # pfSense nat bouncing +19799 19799/tcp # pfSense nat bouncing +19799 19799/udp # pfSense nat bouncing +19800 19800/tcp # pfSense nat bouncing +19800 19800/udp # pfSense nat bouncing +19801 19801/tcp # pfSense nat bouncing +19801 19801/udp # pfSense nat bouncing +19802 19802/tcp # pfSense nat bouncing +19802 19802/udp # pfSense nat bouncing +19803 19803/tcp # pfSense nat bouncing +19803 19803/udp # pfSense nat bouncing +19804 19804/tcp # pfSense nat bouncing +19804 19804/udp # pfSense nat bouncing +19805 19805/tcp # pfSense nat bouncing +19805 19805/udp # pfSense nat bouncing +19806 19806/tcp # pfSense nat bouncing +19806 19806/udp # pfSense nat bouncing +19807 19807/tcp # pfSense nat bouncing +19807 19807/udp # pfSense nat bouncing +19808 19808/tcp # pfSense nat bouncing +19808 19808/udp # pfSense nat bouncing +19809 19809/tcp # pfSense nat bouncing +19809 19809/udp # pfSense nat bouncing +19810 19810/tcp # pfSense nat bouncing +19810 19810/udp # pfSense nat bouncing +19811 19811/tcp # pfSense nat bouncing +19811 19811/udp # pfSense nat bouncing +19812 19812/tcp # pfSense nat bouncing +19812 19812/udp # pfSense nat bouncing +19813 19813/tcp # pfSense nat bouncing +19813 19813/udp # pfSense nat bouncing +19814 19814/tcp # pfSense nat bouncing +19814 19814/udp # pfSense nat bouncing +19815 19815/tcp # pfSense nat bouncing +19815 19815/udp # pfSense nat bouncing +19816 19816/tcp # pfSense nat bouncing +19816 19816/udp # pfSense nat bouncing +19817 19817/tcp # pfSense nat bouncing +19817 19817/udp # pfSense nat bouncing +19818 19818/tcp # pfSense nat bouncing +19818 19818/udp # pfSense nat bouncing +19819 19819/tcp # pfSense nat bouncing +19819 19819/udp # pfSense nat bouncing +19820 19820/tcp # pfSense nat bouncing +19820 19820/udp # pfSense nat bouncing +19821 19821/tcp # pfSense nat bouncing +19821 19821/udp # pfSense nat bouncing +19822 19822/tcp # pfSense nat bouncing +19822 19822/udp # pfSense nat bouncing +19823 19823/tcp # pfSense nat bouncing +19823 19823/udp # pfSense nat bouncing +19824 19824/tcp # pfSense nat bouncing +19824 19824/udp # pfSense nat bouncing +19825 19825/tcp # pfSense nat bouncing +19825 19825/udp # pfSense nat bouncing +19826 19826/tcp # pfSense nat bouncing +19826 19826/udp # pfSense nat bouncing +19827 19827/tcp # pfSense nat bouncing +19827 19827/udp # pfSense nat bouncing +19828 19828/tcp # pfSense nat bouncing +19828 19828/udp # pfSense nat bouncing +19829 19829/tcp # pfSense nat bouncing +19829 19829/udp # pfSense nat bouncing +19830 19830/tcp # pfSense nat bouncing +19830 19830/udp # pfSense nat bouncing +19831 19831/tcp # pfSense nat bouncing +19831 19831/udp # pfSense nat bouncing +19832 19832/tcp # pfSense nat bouncing +19832 19832/udp # pfSense nat bouncing +19833 19833/tcp # pfSense nat bouncing +19833 19833/udp # pfSense nat bouncing +19834 19834/tcp # pfSense nat bouncing +19834 19834/udp # pfSense nat bouncing +19835 19835/tcp # pfSense nat bouncing +19835 19835/udp # pfSense nat bouncing +19836 19836/tcp # pfSense nat bouncing +19836 19836/udp # pfSense nat bouncing +19837 19837/tcp # pfSense nat bouncing +19837 19837/udp # pfSense nat bouncing +19838 19838/tcp # pfSense nat bouncing +19838 19838/udp # pfSense nat bouncing +19839 19839/tcp # pfSense nat bouncing +19839 19839/udp # pfSense nat bouncing +19840 19840/tcp # pfSense nat bouncing +19840 19840/udp # pfSense nat bouncing +19841 19841/tcp # pfSense nat bouncing +19841 19841/udp # pfSense nat bouncing +19842 19842/tcp # pfSense nat bouncing +19842 19842/udp # pfSense nat bouncing +19843 19843/tcp # pfSense nat bouncing +19843 19843/udp # pfSense nat bouncing +19844 19844/tcp # pfSense nat bouncing +19844 19844/udp # pfSense nat bouncing +19845 19845/tcp # pfSense nat bouncing +19845 19845/udp # pfSense nat bouncing +19846 19846/tcp # pfSense nat bouncing +19846 19846/udp # pfSense nat bouncing +19847 19847/tcp # pfSense nat bouncing +19847 19847/udp # pfSense nat bouncing +19848 19848/tcp # pfSense nat bouncing +19848 19848/udp # pfSense nat bouncing +19849 19849/tcp # pfSense nat bouncing +19849 19849/udp # pfSense nat bouncing +19850 19850/tcp # pfSense nat bouncing +19850 19850/udp # pfSense nat bouncing +19851 19851/tcp # pfSense nat bouncing +19851 19851/udp # pfSense nat bouncing +19852 19852/tcp # pfSense nat bouncing +19852 19852/udp # pfSense nat bouncing +19853 19853/tcp # pfSense nat bouncing +19853 19853/udp # pfSense nat bouncing +19854 19854/tcp # pfSense nat bouncing +19854 19854/udp # pfSense nat bouncing +19855 19855/tcp # pfSense nat bouncing +19855 19855/udp # pfSense nat bouncing +19856 19856/tcp # pfSense nat bouncing +19856 19856/udp # pfSense nat bouncing +19857 19857/tcp # pfSense nat bouncing +19857 19857/udp # pfSense nat bouncing +19858 19858/tcp # pfSense nat bouncing +19858 19858/udp # pfSense nat bouncing +19859 19859/tcp # pfSense nat bouncing +19859 19859/udp # pfSense nat bouncing +19860 19860/tcp # pfSense nat bouncing +19860 19860/udp # pfSense nat bouncing +19861 19861/tcp # pfSense nat bouncing +19861 19861/udp # pfSense nat bouncing +19862 19862/tcp # pfSense nat bouncing +19862 19862/udp # pfSense nat bouncing +19863 19863/tcp # pfSense nat bouncing +19863 19863/udp # pfSense nat bouncing +19864 19864/tcp # pfSense nat bouncing +19864 19864/udp # pfSense nat bouncing +19865 19865/tcp # pfSense nat bouncing +19865 19865/udp # pfSense nat bouncing +19866 19866/tcp # pfSense nat bouncing +19866 19866/udp # pfSense nat bouncing +19867 19867/tcp # pfSense nat bouncing +19867 19867/udp # pfSense nat bouncing +19868 19868/tcp # pfSense nat bouncing +19868 19868/udp # pfSense nat bouncing +19869 19869/tcp # pfSense nat bouncing +19869 19869/udp # pfSense nat bouncing +19870 19870/tcp # pfSense nat bouncing +19870 19870/udp # pfSense nat bouncing +19871 19871/tcp # pfSense nat bouncing +19871 19871/udp # pfSense nat bouncing +19872 19872/tcp # pfSense nat bouncing +19872 19872/udp # pfSense nat bouncing +19873 19873/tcp # pfSense nat bouncing +19873 19873/udp # pfSense nat bouncing +19874 19874/tcp # pfSense nat bouncing +19874 19874/udp # pfSense nat bouncing +19875 19875/tcp # pfSense nat bouncing +19875 19875/udp # pfSense nat bouncing +19876 19876/tcp # pfSense nat bouncing +19876 19876/udp # pfSense nat bouncing +19877 19877/tcp # pfSense nat bouncing +19877 19877/udp # pfSense nat bouncing +19878 19878/tcp # pfSense nat bouncing +19878 19878/udp # pfSense nat bouncing +19879 19879/tcp # pfSense nat bouncing +19879 19879/udp # pfSense nat bouncing +19880 19880/tcp # pfSense nat bouncing +19880 19880/udp # pfSense nat bouncing +19881 19881/tcp # pfSense nat bouncing +19881 19881/udp # pfSense nat bouncing +19882 19882/tcp # pfSense nat bouncing +19882 19882/udp # pfSense nat bouncing +19883 19883/tcp # pfSense nat bouncing +19883 19883/udp # pfSense nat bouncing +19884 19884/tcp # pfSense nat bouncing +19884 19884/udp # pfSense nat bouncing +19885 19885/tcp # pfSense nat bouncing +19885 19885/udp # pfSense nat bouncing +19886 19886/tcp # pfSense nat bouncing +19886 19886/udp # pfSense nat bouncing +19887 19887/tcp # pfSense nat bouncing +19887 19887/udp # pfSense nat bouncing +19888 19888/tcp # pfSense nat bouncing +19888 19888/udp # pfSense nat bouncing +19889 19889/tcp # pfSense nat bouncing +19889 19889/udp # pfSense nat bouncing +19890 19890/tcp # pfSense nat bouncing +19890 19890/udp # pfSense nat bouncing +19891 19891/tcp # pfSense nat bouncing +19891 19891/udp # pfSense nat bouncing +19892 19892/tcp # pfSense nat bouncing +19892 19892/udp # pfSense nat bouncing +19893 19893/tcp # pfSense nat bouncing +19893 19893/udp # pfSense nat bouncing +19894 19894/tcp # pfSense nat bouncing +19894 19894/udp # pfSense nat bouncing +19895 19895/tcp # pfSense nat bouncing +19895 19895/udp # pfSense nat bouncing +19896 19896/tcp # pfSense nat bouncing +19896 19896/udp # pfSense nat bouncing +19897 19897/tcp # pfSense nat bouncing +19897 19897/udp # pfSense nat bouncing +19898 19898/tcp # pfSense nat bouncing +19898 19898/udp # pfSense nat bouncing +19899 19899/tcp # pfSense nat bouncing +19899 19899/udp # pfSense nat bouncing +19900 19900/tcp # pfSense nat bouncing +19900 19900/udp # pfSense nat bouncing +19901 19901/tcp # pfSense nat bouncing +19901 19901/udp # pfSense nat bouncing +19902 19902/tcp # pfSense nat bouncing +19902 19902/udp # pfSense nat bouncing +19903 19903/tcp # pfSense nat bouncing +19903 19903/udp # pfSense nat bouncing +19904 19904/tcp # pfSense nat bouncing +19904 19904/udp # pfSense nat bouncing +19905 19905/tcp # pfSense nat bouncing +19905 19905/udp # pfSense nat bouncing +19906 19906/tcp # pfSense nat bouncing +19906 19906/udp # pfSense nat bouncing +19907 19907/tcp # pfSense nat bouncing +19907 19907/udp # pfSense nat bouncing +19908 19908/tcp # pfSense nat bouncing +19908 19908/udp # pfSense nat bouncing +19909 19909/tcp # pfSense nat bouncing +19909 19909/udp # pfSense nat bouncing +19910 19910/tcp # pfSense nat bouncing +19910 19910/udp # pfSense nat bouncing +19911 19911/tcp # pfSense nat bouncing +19911 19911/udp # pfSense nat bouncing +19912 19912/tcp # pfSense nat bouncing +19912 19912/udp # pfSense nat bouncing +19913 19913/tcp # pfSense nat bouncing +19913 19913/udp # pfSense nat bouncing +19914 19914/tcp # pfSense nat bouncing +19914 19914/udp # pfSense nat bouncing +19915 19915/tcp # pfSense nat bouncing +19915 19915/udp # pfSense nat bouncing +19916 19916/tcp # pfSense nat bouncing +19916 19916/udp # pfSense nat bouncing +19917 19917/tcp # pfSense nat bouncing +19917 19917/udp # pfSense nat bouncing +19918 19918/tcp # pfSense nat bouncing +19918 19918/udp # pfSense nat bouncing +19919 19919/tcp # pfSense nat bouncing +19919 19919/udp # pfSense nat bouncing +19920 19920/tcp # pfSense nat bouncing +19920 19920/udp # pfSense nat bouncing +19921 19921/tcp # pfSense nat bouncing +19921 19921/udp # pfSense nat bouncing +19922 19922/tcp # pfSense nat bouncing +19922 19922/udp # pfSense nat bouncing +19923 19923/tcp # pfSense nat bouncing +19923 19923/udp # pfSense nat bouncing +19924 19924/tcp # pfSense nat bouncing +19924 19924/udp # pfSense nat bouncing +19925 19925/tcp # pfSense nat bouncing +19925 19925/udp # pfSense nat bouncing +19926 19926/tcp # pfSense nat bouncing +19926 19926/udp # pfSense nat bouncing +19927 19927/tcp # pfSense nat bouncing +19927 19927/udp # pfSense nat bouncing +19928 19928/tcp # pfSense nat bouncing +19928 19928/udp # pfSense nat bouncing +19929 19929/tcp # pfSense nat bouncing +19929 19929/udp # pfSense nat bouncing +19930 19930/tcp # pfSense nat bouncing +19930 19930/udp # pfSense nat bouncing +19931 19931/tcp # pfSense nat bouncing +19931 19931/udp # pfSense nat bouncing +19932 19932/tcp # pfSense nat bouncing +19932 19932/udp # pfSense nat bouncing +19933 19933/tcp # pfSense nat bouncing +19933 19933/udp # pfSense nat bouncing +19934 19934/tcp # pfSense nat bouncing +19934 19934/udp # pfSense nat bouncing +19935 19935/tcp # pfSense nat bouncing +19935 19935/udp # pfSense nat bouncing +19936 19936/tcp # pfSense nat bouncing +19936 19936/udp # pfSense nat bouncing +19937 19937/tcp # pfSense nat bouncing +19937 19937/udp # pfSense nat bouncing +19938 19938/tcp # pfSense nat bouncing +19938 19938/udp # pfSense nat bouncing +19939 19939/tcp # pfSense nat bouncing +19939 19939/udp # pfSense nat bouncing +19940 19940/tcp # pfSense nat bouncing +19940 19940/udp # pfSense nat bouncing +19941 19941/tcp # pfSense nat bouncing +19941 19941/udp # pfSense nat bouncing +19942 19942/tcp # pfSense nat bouncing +19942 19942/udp # pfSense nat bouncing +19943 19943/tcp # pfSense nat bouncing +19943 19943/udp # pfSense nat bouncing +19944 19944/tcp # pfSense nat bouncing +19944 19944/udp # pfSense nat bouncing +19945 19945/tcp # pfSense nat bouncing +19945 19945/udp # pfSense nat bouncing +19946 19946/tcp # pfSense nat bouncing +19946 19946/udp # pfSense nat bouncing +19947 19947/tcp # pfSense nat bouncing +19947 19947/udp # pfSense nat bouncing +19948 19948/tcp # pfSense nat bouncing +19948 19948/udp # pfSense nat bouncing +19949 19949/tcp # pfSense nat bouncing +19949 19949/udp # pfSense nat bouncing +19950 19950/tcp # pfSense nat bouncing +19950 19950/udp # pfSense nat bouncing +19951 19951/tcp # pfSense nat bouncing +19951 19951/udp # pfSense nat bouncing +19952 19952/tcp # pfSense nat bouncing +19952 19952/udp # pfSense nat bouncing +19953 19953/tcp # pfSense nat bouncing +19953 19953/udp # pfSense nat bouncing +19954 19954/tcp # pfSense nat bouncing +19954 19954/udp # pfSense nat bouncing +19955 19955/tcp # pfSense nat bouncing +19955 19955/udp # pfSense nat bouncing +19956 19956/tcp # pfSense nat bouncing +19956 19956/udp # pfSense nat bouncing +19957 19957/tcp # pfSense nat bouncing +19957 19957/udp # pfSense nat bouncing +19958 19958/tcp # pfSense nat bouncing +19958 19958/udp # pfSense nat bouncing +19959 19959/tcp # pfSense nat bouncing +19959 19959/udp # pfSense nat bouncing +19960 19960/tcp # pfSense nat bouncing +19960 19960/udp # pfSense nat bouncing +19961 19961/tcp # pfSense nat bouncing +19961 19961/udp # pfSense nat bouncing +19962 19962/tcp # pfSense nat bouncing +19962 19962/udp # pfSense nat bouncing +19963 19963/tcp # pfSense nat bouncing +19963 19963/udp # pfSense nat bouncing +19964 19964/tcp # pfSense nat bouncing +19964 19964/udp # pfSense nat bouncing +19965 19965/tcp # pfSense nat bouncing +19965 19965/udp # pfSense nat bouncing +19966 19966/tcp # pfSense nat bouncing +19966 19966/udp # pfSense nat bouncing +19967 19967/tcp # pfSense nat bouncing +19967 19967/udp # pfSense nat bouncing +19968 19968/tcp # pfSense nat bouncing +19968 19968/udp # pfSense nat bouncing +19969 19969/tcp # pfSense nat bouncing +19969 19969/udp # pfSense nat bouncing +19970 19970/tcp # pfSense nat bouncing +19970 19970/udp # pfSense nat bouncing +19971 19971/tcp # pfSense nat bouncing +19971 19971/udp # pfSense nat bouncing +19972 19972/tcp # pfSense nat bouncing +19972 19972/udp # pfSense nat bouncing +19973 19973/tcp # pfSense nat bouncing +19973 19973/udp # pfSense nat bouncing +19974 19974/tcp # pfSense nat bouncing +19974 19974/udp # pfSense nat bouncing +19975 19975/tcp # pfSense nat bouncing +19975 19975/udp # pfSense nat bouncing +19976 19976/tcp # pfSense nat bouncing +19976 19976/udp # pfSense nat bouncing +19977 19977/tcp # pfSense nat bouncing +19977 19977/udp # pfSense nat bouncing +19978 19978/tcp # pfSense nat bouncing +19978 19978/udp # pfSense nat bouncing +19979 19979/tcp # pfSense nat bouncing +19979 19979/udp # pfSense nat bouncing +19980 19980/tcp # pfSense nat bouncing +19980 19980/udp # pfSense nat bouncing +19981 19981/tcp # pfSense nat bouncing +19981 19981/udp # pfSense nat bouncing +19982 19982/tcp # pfSense nat bouncing +19982 19982/udp # pfSense nat bouncing +19983 19983/tcp # pfSense nat bouncing +19983 19983/udp # pfSense nat bouncing +19984 19984/tcp # pfSense nat bouncing +19984 19984/udp # pfSense nat bouncing +19985 19985/tcp # pfSense nat bouncing +19985 19985/udp # pfSense nat bouncing +19986 19986/tcp # pfSense nat bouncing +19986 19986/udp # pfSense nat bouncing +19987 19987/tcp # pfSense nat bouncing +19987 19987/udp # pfSense nat bouncing +19988 19988/tcp # pfSense nat bouncing +19988 19988/udp # pfSense nat bouncing +19989 19989/tcp # pfSense nat bouncing +19989 19989/udp # pfSense nat bouncing +19990 19990/tcp # pfSense nat bouncing +19990 19990/udp # pfSense nat bouncing +19991 19991/tcp # pfSense nat bouncing +19991 19991/udp # pfSense nat bouncing +19992 19992/tcp # pfSense nat bouncing +19992 19992/udp # pfSense nat bouncing +19993 19993/tcp # pfSense nat bouncing +19993 19993/udp # pfSense nat bouncing +19994 19994/tcp # pfSense nat bouncing +19994 19994/udp # pfSense nat bouncing +19995 19995/tcp # pfSense nat bouncing +19995 19995/udp # pfSense nat bouncing +19996 19996/tcp # pfSense nat bouncing +19996 19996/udp # pfSense nat bouncing +19997 19997/tcp # pfSense nat bouncing +19997 19997/udp # pfSense nat bouncing +19998 19998/tcp # pfSense nat bouncing +19998 19998/udp # pfSense nat bouncing +19999 19999/tcp # pfSense nat bouncing +19999 19999/udp # pfSense nat bouncing +dbbrowse 47557/tcp #Databeam Corporation +dbbrowse 47557/udp #Databeam Corporation +wnn4 22273/tcp #Wnn4 (Japanese input) +wnn4_Cn 22289/tcp #Wnn4 (Chinese input) +wnn4_Tw 22321/tcp #Wnn4 (Taiwanse input) +wnn4_Kr 22305/tcp #Wnn4 (Korean input) +wnn6 22273/tcp #Wnn6 (Japanese input) +wnn6_Cn 22289/tcp #Wnn6 (Chinese input) +wnn6_Tw 22321/tcp #Wnn6 (Taiwanse input) +wnn6_Kr 22305/tcp #Wnn6 (Korean input) +wnn6_DS 26208/tcp #Wnn6 (Dserver) diff --git a/etc/shells b/etc/shells new file mode 100644 index 000000000..3ccb4dc21 --- /dev/null +++ b/etc/shells @@ -0,0 +1,12 @@ +# $FreeBSD: src/etc/shells,v 1.5 2000/04/27 21:58:46 ache Exp $ +# +# List of acceptable shells for chpass(1). +# Ftpd will not allow users to connect who are not using +# one of these shells. + +/bin/sh +/bin/csh +/bin/tcsh +/etc/rc.initial +/usr/local/sbin/ssh_tunnel_shell + diff --git a/etc/skel/dot.tcshrc b/etc/skel/dot.tcshrc new file mode 100644 index 000000000..cd20f2dcc --- /dev/null +++ b/etc/skel/dot.tcshrc @@ -0,0 +1,21 @@ +set prompt="%{\033[0;1;33m%}[%{\033[0;1;37m%}`cat /etc/version`%{\033[0;1;33m%}]%{\033[0;1;33m%}%B[%{\033[0;1;37m%}%n%{\033[0;1;31m%}@%{\033[0;1;37m%}%M%{\033[0;1;33m%}]%{\033[0;1;32m%}%b%/%{\033[0;1;33m%}(%{\033[0;1;37m%}%h%{\033[0;1;33m%})%{\033[0;1;36m%}%{\033[0;1;31m%}:%{\033[0;0;0m%} " +set autologout="0" +set autolist set color set colorcat +setenv CLICOLOR "true" +setenv LSCOLORS "exfxcxdxbxegedabagacad" +if ($term == "xterm" || $term == "vt100" || $term == "vt102" || $term == "vt220" || $term !~ "con*") then + bindkey "\e[2~" overwrite-mode # Ins + bindkey "\e[3~" delete-char # Del + + bindkey "\e[1~" beginning-of-line # Home vt + bindkey "\e[4~" end-of-line # End vt + + bindkey "\eOH" beginning-of-line # Home vt220 + bindkey "\eOF" end-of-line # End vt220 + + bindkey "\e[H" beginning-of-line # Home kvt + bindkey "\e[F" end-of-line # End kvt + + bindkey "\e[7~" beginning-of-line # Home rxvt/konsole + bindkey "\e[8~" end-of-line # End rxvt/konsole +endif diff --git a/etc/ssh/sshd_config b/etc/ssh/sshd_config new file mode 100644 index 000000000..f2f288be7 --- /dev/null +++ b/etc/ssh/sshd_config @@ -0,0 +1,103 @@ +# $OpenBSD: sshd_config,v 1.68 2003/12/29 16:39:50 millert Exp $ +# $FreeBSD: src/crypto/openssh/sshd_config,v 1.40 2004/04/20 09:37:29 des Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options change a +# default value. + +# Note that some of FreeBSD's defaults differ from OpenBSD's, and +# FreeBSD has a few additional options. + +#VersionAddendum FreeBSD-20040419 + +#Port 22 +#Protocol 2 +#ListenAddress 0.0.0.0 +#ListenAddress :: + +# HostKey for protocol version 1 +#HostKey /etc/ssh/ssh_host_key +# HostKeys for protocol version 2 +#HostKey /etc/ssh/ssh_host_dsa_key + +# Lifetime and size of ephemeral version 1 server key +#KeyRegenerationInterval 1h +#ServerKeyBits 768 + +# Logging +#obsoletes QuietMode and FascistLogging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +PermitRootLogin yes +#StrictModes yes + +#RSAAuthentication yes +#PubkeyAuthentication yes +#AuthorizedKeysFile .ssh/authorized_keys + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#RhostsRSAAuthentication no +# similar for protocol version 2 +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# RhostsRSAAuthentication and HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# Change to yes to enable built-in password authentication. +#PasswordAuthentication no +#PermitEmptyPasswords no + +# Change to no to disable PAM authentication +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'no' to disable PAM authentication (via challenge-response) +# and session processing. +#UsePAM yes + +#AllowTcpForwarding yes +#GatewayPorts no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#UseLogin no +#UsePrivilegeSeparation yes +#PermitUserEnvironment no + +#PidFile /var/run/sshd.pid +#MaxStartups 10 + +# no default banner path +#Banner /some/path + +Compression yes +ClientAliveInterval 30 +ClientAliveCountMax 5 +UseDNS no +X11Forwarding no + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server diff --git a/etc/sshd b/etc/sshd new file mode 100755 index 000000000..90401698d --- /dev/null +++ b/etc/sshd @@ -0,0 +1,204 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + require_once("globals.inc"); + require_once("config.inc"); + require_once("functions.inc"); + require_once("shaper.inc"); + + if (!isset($config['system']['enablesshd'])) { + return; + } + + /* are we already running? if not, do conf_mount_rw(), otherwise it should already be rw */ + if (!is_subsystem_dirty('sshdkeys')) { + conf_mount_rw(); + } + + $keys = array( + 'ssh_host_key', + 'ssh_host_key.pub', + 'ssh_host_dsa_key', + 'ssh_host_dsa_key.pub', + 'ssh_host_rsa_key', + 'ssh_host_rsa_key.pub', + 'ssh_host_ecdsa_key', + 'ssh_host_ecdsa_key.pub', + 'ssh_host_ed25519_key', + 'ssh_host_ed25519_key.pub' + ); + + /* restore ssh data for nanobsd platform */ + if($g['platform'] == "nanobsd" and file_exists("/conf/sshd/ssh_host_key") and !file_exists("/etc/ssh/ssh_host_key.pub")) { + echo "Restoring SSH from /conf/sshd/"; + exec("/bin/cp -p /conf/sshd/* /etc/ssh/"); + + /* make sure host private key permissions aren't too open so sshd won't complain */ + foreach($keys as $f2c) { + if(file_exists("/etc/ssh/{$f2c}")) + chmod("/etc/ssh/{$f2c}", 0600); + } + } + + /* if any of these files are 0 bytes then they are corrupted. + * remove them + */ + foreach($keys as $f2c) { + if (file_exists("/etc/ssh/{$f2c}") && filesize("/etc/ssh/{$f2c}") == 0) { + unlink_if_exists('/etc/ssh/ssh_host*'); + break; + } + } + + if (!is_dir("/var/empty")) { + /* make ssh home directory */ + mkdir("/var/empty", 0555); + } + + if(!file_exists("/var/log/lastlog")) { + /* Login related files. */ + @touch("/var/log/lastlog"); + } + + $sshConfigDir = "/etc/ssh"; + + if (is_array($config['system']['ssh']) && !empty($config['system']['ssh']['port'])) + $sshport = $config['system']['ssh']['port']; + else + $sshport = 22; + + /* Include default configuration for pfSense */ + $sshconf = "# This file is automatically generated at startup\n"; + $sshconf .= "Ciphers aes128-ctr,aes256-ctr,arcfour256,arcfour,aes128-cbc,aes256-cbc\n"; + $sshconf .= "PermitRootLogin yes\n"; + $sshconf .= "Compression yes\n"; + $sshconf .= "ClientAliveInterval 30\n"; + $sshconf .= "UseDNS no\n"; + $sshconf .= "X11Forwarding no\n"; + if (isset($config['system']['ssh']['sshdkeyonly'])) { + $sshconf .= "# Login via Key only\n"; + $sshconf .= "PasswordAuthentication no\n"; + $sshconf .= "ChallengeResponseAuthentication no\n"; + $sshconf .= "PubkeyAuthentication yes\n"; + } else { + $sshconf .= "# Login via Key and Password\n"; + $sshconf .= "PasswordAuthentication yes\n"; + $sshconf .= "ChallengeResponseAuthentication yes\n"; + $sshconf .= "PubkeyAuthentication yes\n"; + } + $sshconf .= "# override default of no subsystems\n"; + $sshconf .= "Subsystem sftp /usr/libexec/sftp-server\n"; + /* Only allow protocol 2, because we say so */ + $sshconf .= "Protocol 2\n"; + /* Run the server on another port if we have one defined */ + $sshconf .= "Port $sshport\n"; + /* Hide FreeBSD version */ + $sshconf .= "VersionAddendum \n"; + + /* Apply package SSHDCond settings if config file exists */ + if (file_exists("/etc/sshd_extra")) { + $fdExtra = fopen("/etc/sshd_extra", 'r'); + $szExtra = fread($fdExtra, 1048576); // Read up to 1MB from extra file + $sshconf .= $szExtra; + fclose($fdExtra); + } + + /* Write the new sshd config file */ + @file_put_contents("/etc/ssh/sshd_config", $sshconf); + + /* mop up from a badly implemented ssh keys -> cf backup */ + if($config['ssh']['dsa_key'] <> "") { + unset($config['ssh']['dsa_key']); + unset($config['ssh']['ecdsa_key']); + unset($config['ssh']['ed25519_key']); + unset($config['ssh']['rsa_key']); + unset($config['ssh']['rsa1_key']); + unset($config['ssh']['dsa']); + unset($config['ssh']['rsa']); + unset($config['ssh']['rsa1']); + unset($config['ssh']['ak']); + write_config("Clearing SSH keys from config.xml"); + } + + /* are we already running? if so exit */ + if(is_subsystem_dirty('sshdkeys')) { + unset($keys); + return; + } + + // Check for all needed key files. If any are missing, the keys need to be regenerated. + $generate_keys = false; + foreach ($keys as $f2c) { + if (!file_exists("/etc/ssh/{$f2c}")) { + $generate_keys = true; + break; + } + } + + if ($generate_keys) { + /* remove previous keys and regen later */ + file_notice("SSH", "{$g['product_name']} has started creating your SSH keys. SSH Startup will be delayed. Please note that reloading the filter rules and changes will be delayed until this operation is completed.", "SSH KeyGen", ""); + unlink_if_exists('/etc/ssh/ssh_host_*'); + mark_subsystem_dirty('sshdkeys'); + echo " Generating Keys:\n"; + $_gb = exec("/usr/bin/nice -n20 /usr/bin/ssh-keygen -t rsa1 -N '' -f $sshConfigDir/ssh_host_key"); + $_gb = exec("/usr/bin/nice -n20 /usr/bin/ssh-keygen -t rsa -N '' -f $sshConfigDir/ssh_host_rsa_key"); + $_gb = exec("/usr/bin/nice -n20 /usr/bin/ssh-keygen -t dsa -N '' -f $sshConfigDir/ssh_host_dsa_key"); + $_gb = exec("/usr/bin/nice -n20 /usr/bin/ssh-keygen -t ecdsa -N '' -f $sshConfigDir/ssh_host_ecdsa_key"); + $_gb = exec("/usr/bin/nice -n20 /usr/bin/ssh-keygen -t ed25519 -N '' -f $sshConfigDir/ssh_host_ed25519_key"); + clear_subsystem_dirty('sshdkeys'); + file_notice("SSH", "{$g['product_name']} has completed creating your SSH keys. SSH is now started.", "SSH Startup", ""); + } + + /* kill existing sshd process, server only, not the childs */ + $sshd_pid = exec("ps ax | egrep '/usr/sbin/[s]shd' | awk '{print $1}'"); + if($sshd_pid <> "") { + echo "stopping ssh process $sshd_pid \n"; + @posix_kill($sshd_pid, SIGTERM); + } + /* Launch new server process */ + $status = mwexec("/usr/sbin/sshd"); + if($status <> 0) { + file_notice("sshd_startup", "SSHD failed to start.", "SSHD Daemon", ""); + echo "error!\n"; + } else { + echo "done.\n"; + } + + // NanoBSD + if($g['platform'] == "nanobsd") { + if(!is_dir("/conf/sshd")) + mkdir("/conf/sshd", 0750); + $_gb = exec("/bin/cp -p /etc/ssh/ssh_host* /conf/sshd"); + } + conf_mount_ro(); + unset($keys); +?> diff --git a/etc/ssl/openssl.cnf b/etc/ssl/openssl.cnf new file mode 100644 index 000000000..5f612fbd3 --- /dev/null +++ b/etc/ssl/openssl.cnf @@ -0,0 +1,309 @@ +# $FreeBSD: src/crypto/openssl/apps/openssl.cnf,v 1.6 2004/03/17 17:44:38 nectar Exp $ +# +# OpenSSL example configuration file. +# This is mostly being used for generation of certificate requests. +# +# +# This definition stops the following lines choking if HOME isn't +# defined. +HOME = . +RANDFILE = $ENV::HOME/.rnd + +# default SAN value if $ENV::SAN is not defined +# +SAN = + +# Extra OBJECT IDENTIFIER info: +#oid_file = $ENV::HOME/.oid +oid_section = new_oids + +# To use this configuration file with the "-extfile" option of the +# "openssl x509" utility, name here the section containing the +# X.509v3 extensions to use: +# extensions = +# (Alternatively, use a configuration file that has only +# X.509v3 extensions in its main [= default] section.) + +[ new_oids ] + +# We can add new OIDs in here for use by 'ca' and 'req'. +# Add a simple OID like this: +# testoid1=1.2.3.4 +# Or use config file substitution like this: +# testoid2=${testoid1}.5.6 + +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +[ CA_default ] + +dir = ./demoCA # Where everything is kept +certs = $dir/certs # Where the issued certs are kept +crl_dir = $dir/crl # Where the issued crl are kept +database = $dir/index.txt # database index file. +#unique_subject = no # Set to 'no' to allow creation of + # several ctificates with same subject. +new_certs_dir = $dir/newcerts # default place for new certs. + +certificate = $dir/cacert.pem # The CA certificate +serial = $dir/serial # The current serial number +#crlnumber = $dir/crlnumber # the current crl number + # must be commented out to leave a V1 CRL +crl = $dir/crl.pem # The current CRL +private_key = $dir/private/cakey.pem# The private key +RANDFILE = $dir/private/.rand # private random number file + +x509_extensions = usr_cert # The extentions to add to the cert + +# Comment out the following two lines for the "traditional" +# (and highly broken) format. +name_opt = ca_default # Subject Name options +cert_opt = ca_default # Certificate field options + +# Extension copying option: use with caution. +# copy_extensions = copy + +# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs +# so this is commented out by default to leave a V1 CRL. +# crlnumber must also be commented out to leave a V1 CRL. +# crl_extensions = crl_ext + +default_days = 365 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = md5 # which md to use. +preserve = no # keep passed DN ordering + +# A few difference way of specifying how similar the request should look +# For type CA, the listed attributes must be the same, and the optional +# and supplied fields are just that :-) +policy = policy_match + +# For the CA policy +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +# For the 'anything' policy +# At this point in time, you must list all acceptable 'object' +# types. +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ req ] +distinguished_name=req_distinguished_name +req_extensions = v3_req +prompt=no + +default_bits = 2048 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name +attributes = req_attributes +x509_extensions = v3_ca # The extentions to add to the self signed cert + +# Passwords for private keys if not present they will be prompted for +#input_password="" +#output_password="" + +# This sets a mask for permitted string types. There are several options. +# default: PrintableString, T61String, BMPString. +# pkix : PrintableString, BMPString. +# utf8only: only UTF8Strings. +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). +# MASK:XXXX a literal mask value. +# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings +# so use this option with caution! +string_mask = nombstr + +# req_extensions = v3_req # The extensions to add to a certificate request + +[ req_distinguished_name ] +countryName = US +#countryName_default = AU +#countryName_min = 2 +#countryName_max = 2 + +stateOrProvinceName = Somewhere +#stateOrProvinceName_default = Somestate + +localityName = Somecity + +0.organizationName = CompanyName +#0.organizationName_default = SampleNameDefault + +# we can do this but it is not needed normally :-) +#1.organizationName = Second Organization Name (eg, company) +#1.organizationName_default = World Wide Web Pty Ltd + +organizationalUnitName = Organizational Unit Name (eg, section) +#organizationalUnitName_default = + +commonName = Common Name (eg, YOUR name) +#commonName_max = 64 + +emailAddress = Email Address +#emailAddress_max = 64 + +# SET-ex3 = SET extension number 3 + +[ req_attributes ] +challengePassword = A challenge password +#challengePassword_min = 4 +#challengePassword_max = 20 + +unstructuredName = An optional company name + +[ usr_cert ] + +# These extensions are added when 'ca' signs a request. + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated User Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer:always + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +[ usr_cert_san ] + +# copy of [ usr_cert ] plus nonempty Subject Alternative Names +basicConstraints=CA:FALSE +nsComment = "OpenSSL Generated User Certificate" +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer:always +subjectAltName=$ENV::SAN + +[ server ] + +# Make a cert with nsCertType=server +basicConstraints=CA:FALSE +nsCertType = server +nsComment = "OpenSSL Generated Server Certificate" +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer:always +extendedKeyUsage=serverAuth +keyUsage = digitalSignature, keyEncipherment + +[ server_san ] + +# copy of [ server ] plus nonempty Subject Alternative Names +basicConstraints=CA:FALSE +nsCertType = server +nsComment = "OpenSSL Generated Server Certificate" +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer:always +extendedKeyUsage=serverAuth +keyUsage = digitalSignature, keyEncipherment +subjectAltName=$ENV::SAN + +[ v3_req ] + +# Extensions to add to a certificate request + +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v3_ca ] + + +# Extensions for a typical CA + + +# PKIX recommendation. + +subjectKeyIdentifier=hash + +authorityKeyIdentifier=keyid:always,issuer:always + +# This is what PKIX recommends but some broken software chokes on critical +# extensions. +#basicConstraints = critical,CA:true +# So we do this instead. +basicConstraints = CA:true + +# Key usage: this is typical for a CA certificate. However since it will +# prevent it being used as an test self-signed certificate it is best +# left out by default. +# keyUsage = cRLSign, keyCertSign + +# Some might want this also +# nsCertType = sslCA, emailCA + +# Include email address in subject alt name: another PKIX recommendation +# subjectAltName=email:copy +# Copy issuer details +# issuerAltName=issuer:copy + +# DER hex encoding of an extension: beware experts only! +# obj=DER:02:03 +# Where 'obj' is a standard or added object +# You can even override a supported extension: +# basicConstraints= critical, DER:30:03:01:01:FF + +[ v3_ca_san ] + +# copy of [ v3_ca ] plus nonempty Subject Alternative Names +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid:always,issuer:always +basicConstraints = CA:true +subjectAltName=$ENV::SAN + +[ crl_ext ] + +# CRL extensions. +# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. + +# issuerAltName=issuer:copy +authorityKeyIdentifier=keyid:always,issuer:always diff --git a/etc/syslog.conf b/etc/syslog.conf new file mode 100644 index 000000000..6f2953856 --- /dev/null +++ b/etc/syslog.conf @@ -0,0 +1,12 @@ +local0.* %/var/log/filter.log +local3.* %/var/log/vpn.log +local4.* %/var/log/portalauth.log +local7.* %/var/log/dhcpd.log +local7.none %/var/log/system.log +kern.debug;lpr.info;mail.crit; %/var/log/system.log +news.err;local3.none;local4.none; %/var/log/system.log +*.notice; %/var/log/system.log +local0.none;daemon.info %/var/log/system.log +daemon.info;security.* %/var/log/ipsec.log +auth.info;authpriv.info %/var/log/system.log +auth.info;authpriv.info |exec /usr/local/sbin/sshlockout_pf diff --git a/etc/ttys b/etc/ttys new file mode 100644 index 000000000..f04ca75c8 --- /dev/null +++ b/etc/ttys @@ -0,0 +1,49 @@ +# +# $FreeBSD: stable/10/etc/etc.amd64/ttys 267236 2014-06-08 17:50:07Z nwhitehorn $ +# @(#)ttys 5.1 (Berkeley) 4/17/89 +# +# This file specifies various information about terminals on the system. +# It is used by several different programs. Common entries for the +# various columns include: +# +# name The name of the terminal device. +# +# getty The program to start running on the terminal. Typically a +# getty program, as the name implies. Other common entries +# include none, when no getty is needed, and xdm, to start the +# X Window System. +# +# type The initial terminal type for this port. For hardwired +# terminal lines, this will contain the type of terminal used. +# For virtual consoles, the correct type is typically xterm. +# Other common values include dialup for incoming modem ports, and +# unknown when the terminal type cannot be predetermined. +# +# status Must be on or off. If on, init will run the getty program on +# the specified port. If the word "secure" appears, this tty +# allows root login. +# +# name getty type status comments +# +# If console is marked "insecure", then init will ask for the root password +# when going to single-user mode. +console none unknown off secure +# +ttyv0 "/usr/libexec/getty al.Pc" cons25 on secure +# Virtual terminals +ttyv1 "/usr/libexec/getty Pc" xterm off secure +ttyv2 "/usr/libexec/getty Pc" xterm off secure +ttyv3 "/usr/libexec/getty Pc" xterm off secure +ttyv4 "/usr/libexec/getty Pc" xterm off secure +ttyv5 "/usr/libexec/getty Pc" xterm off secure +ttyv6 "/usr/libexec/getty Pc" xterm off secure +ttyv7 "/usr/libexec/getty Pc" xterm off secure +ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure +# Serial terminals +# The 'dialup' keyword identifies dialin lines to login, fingerd etc. +ttyu0 "/usr/libexec/getty al.115200" cons25 on secure +ttyu1 "/usr/libexec/getty std.9600" dialup off secure +ttyu2 "/usr/libexec/getty std.9600" dialup off secure +ttyu3 "/usr/libexec/getty std.9600" dialup off secure +# Dumb console +dcons "/usr/libexec/getty std.9600" vt100 off secure diff --git a/etc/version b/etc/version new file mode 100644 index 000000000..7a0008a72 --- /dev/null +++ b/etc/version @@ -0,0 +1 @@ +2.2-BETA diff --git a/root/.hushlogin b/root/.hushlogin new file mode 100644 index 000000000..e69de29bb diff --git a/root/.profile b/root/.profile new file mode 100644 index 000000000..700597a4e --- /dev/null +++ b/root/.profile @@ -0,0 +1,5 @@ +# Detect interactive logins and display the shell +if [ -n "${SSH_TTY}" -o "${TERM}" = "cons25" ]; then + /etc/rc.initial + exit +fi diff --git a/root/.shrc b/root/.shrc new file mode 100644 index 000000000..700597a4e --- /dev/null +++ b/root/.shrc @@ -0,0 +1,5 @@ +# Detect interactive logins and display the shell +if [ -n "${SSH_TTY}" -o "${TERM}" = "cons25" ]; then + /etc/rc.initial + exit +fi diff --git a/root/.tcshrc b/root/.tcshrc new file mode 100644 index 000000000..cd20f2dcc --- /dev/null +++ b/root/.tcshrc @@ -0,0 +1,21 @@ +set prompt="%{\033[0;1;33m%}[%{\033[0;1;37m%}`cat /etc/version`%{\033[0;1;33m%}]%{\033[0;1;33m%}%B[%{\033[0;1;37m%}%n%{\033[0;1;31m%}@%{\033[0;1;37m%}%M%{\033[0;1;33m%}]%{\033[0;1;32m%}%b%/%{\033[0;1;33m%}(%{\033[0;1;37m%}%h%{\033[0;1;33m%})%{\033[0;1;36m%}%{\033[0;1;31m%}:%{\033[0;0;0m%} " +set autologout="0" +set autolist set color set colorcat +setenv CLICOLOR "true" +setenv LSCOLORS "exfxcxdxbxegedabagacad" +if ($term == "xterm" || $term == "vt100" || $term == "vt102" || $term == "vt220" || $term !~ "con*") then + bindkey "\e[2~" overwrite-mode # Ins + bindkey "\e[3~" delete-char # Del + + bindkey "\e[1~" beginning-of-line # Home vt + bindkey "\e[4~" end-of-line # End vt + + bindkey "\eOH" beginning-of-line # Home vt220 + bindkey "\eOF" end-of-line # End vt220 + + bindkey "\e[H" beginning-of-line # Home kvt + bindkey "\e[F" end-of-line # End kvt + + bindkey "\e[7~" beginning-of-line # Home rxvt/konsole + bindkey "\e[8~" end-of-line # End rxvt/konsole +endif diff --git a/sbin/athctrl.sh b/sbin/athctrl.sh new file mode 100755 index 000000000..6ba35ff01 --- /dev/null +++ b/sbin/athctrl.sh @@ -0,0 +1,41 @@ +#!/bin/sh +# +# Set the IFS parameters for an interface configured for +# point-to-point use at a specific distance. Based on a +# program by Gunter Burchardt. +# +DEV=ath0 +d=0 + +usage() +{ + echo "Usage: $0 [-i athX] [-d meters]" + exit 2 +} + +args=`getopt d:i: $*` +test $? -ne 0 && usage + +set -- $args +for i; do + case "$i" in + -i) DEV="$2"; shift; shift;; + -d) d="$2"; shift; shift;; + --) shift; break; + esac +done + +test $d -eq 0 && usage + +slottime=`expr 9 + \( $d / 300 \)` +if expr \( $d % 300 \) != 0 >/dev/null 2>&1; then + slottime=`expr $slottime + 1` +fi +timeout=`expr $slottime \* 2 + 3` + +printf "Setup IFS parameters on interface ${DEV} for %i meter p-2-p link\n" $d +ATHN=`echo $DEV | sed 's/ath//'` +sysctl dev.ath.$ATHN.slottime=$slottime +sysctl dev.ath.$ATHN.acktimeout=$timeout +sysctl dev.ath.$ATHN.ctstimeout=$timeout + diff --git a/sbin/dhclient-script b/sbin/dhclient-script new file mode 100755 index 000000000..11ce35b59 --- /dev/null +++ b/sbin/dhclient-script @@ -0,0 +1,407 @@ +#!/bin/sh +# $Id$ +# $OpenBSD: dhclient-script,v 1.6 2004/05/06 18:22:41 claudio Exp $ +# $FreeBSD: src/sbin/dhclient/dhclient-script,v 1.4 2005/06/10 03:41:18 brooks Exp $ +# +# Copyright (c) 2003 Kenneth R Westerback +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +NETSTAT=/usr/bin/netstat +GREP=/usr/bin/grep +AWK=/usr/bin/awk +HOSTNAME=/bin/hostname +GREP=/usr/bin/grep +ROUTE=/sbin/route +SED=/usr/bin/sed +ARP=/usr/sbin/arp +IFCONFIG=/sbin/ifconfig +PFCTL=/sbin/pfctl + +LOCALHOST=127.0.0.1 + +if [ -x /usr/bin/logger ]; then + LOGGER="/usr/bin/logger -s -p user.notice -t dhclient" +else + LOGGER="echo" +fi + +# +# Helper functions that implement common actions. +# + +check_hostname() { + current_hostname=`$HOSTNAME` + if [ -z "$current_hostname" ] || \ + [ "$current_hostname" = "$old_host_name" -a \ + "$new_hostname" != "$old_host_name" ]; then + $LOGGER "New Hostname ($interface): $new_host_name" + $HOSTNAME $new_host_name + fi +} + +arp_flush() { + $ARP -an -i $interface | \ + $SED -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' | \ + /bin/sh >/dev/null 2>&1 +} + +delete_old_states() { + $LOGGER "Starting delete_old_states()" + _FLUSHED=0 + # If the IP changed, remove states from the old one + if [ -f /var/db/${interface}_ip ]; then + OLD_IP=`cat /var/db/${interface}_ip` + $LOGGER "Comparing IPs: Old: ${OLD_IP} New: ${new_ip_address}" + if [ -n "${OLD_IP}" ] && [ "${OLD_IP}" != "${new_ip_address}" ]; then + $LOGGER "Removing states from old IP '${OLD_IP}' (new IP '${new_ip_address}')" + ${PFCTL} -i $interface -Fs + ${PFCTL} -K ${OLD_IP}/32 + _FLUSHED=1 + fi + fi + # Delete states through old gateway if it's not the same + OLD_ROUTER="" + if [ -n "${old_routers}" ]; then + OLD_ROUTER=$old_routers + elif [ -f /tmp/${interface}_router ]; then + OLD_ROUTER=`cat /tmp/${interface}_router` + fi + if [ ${_FLUSHED} -eq 0 -a -n "${OLD_ROUTER}" ]; then + $LOGGER "Comparing Routers: Old: ${OLD_ROUTER} New: ${new_routers}" + if [ "${OLD_ROUTER}" != "${new_routers}" ]; then + $LOGGER "Removing states through old gateway '${OLD_ROUTER}' (new gateway '${new_routers}')" + ${PFCTL} -i $interface -Fs + fi + fi +} + +delete_old_address() { + /bin/rm -f /var/db/${interface}_ip + $IFCONFIG $interface inet -alias $old_ip_address $medium +} + +add_new_address() { + + $LOGGER "Starting add_new_address()" + + $LOGGER "ifconfig $interface inet $new_ip_address netmask $new_subnet_mask broadcast $new_broadcast_address $medium" + + $IFCONFIG $interface \ + inet $new_ip_address \ + netmask $new_subnet_mask \ + broadcast $new_broadcast_address \ + $medium + $IFCONFIG $interface setfirst $new_ip_address + + $LOGGER "New IP Address ($interface): $new_ip_address" + $LOGGER "New Subnet Mask ($interface): $new_subnet_mask" + $LOGGER "New Broadcast Address ($interface): $new_broadcast_address" + $LOGGER "New Routers ($interface): $new_routers" + + + # This is necessary otherwise apinger will try to ping all 1s address + if [ -n "$new_routers" ] && [ "$new_routers" != "255.255.255.255" ]; then + echo $new_routers > /tmp/${interface}_router + fi + echo $new_ip_address > /var/db/${interface}_ip +} + +delete_old_alias() { + if [ -n "$alias_ip_address" ]; then + $IFCONFIG $interface inet -alias $alias_ip_address > /dev/null 2>&1 + $ROUTE delete $alias_ip_address $LOCALHOST > /dev/null 2>&1 + fi +} + +add_new_alias() { + if [ -n "$alias_ip_address" ]; then + $IFCONFIG $interface inet alias $alias_ip_address netmask \ + $alias_subnet_mask + $ROUTE add $alias_ip_address $LOCALHOST + fi +} + +fill_classless_routes() { + set $1 + while [ $# -ge 5 ]; do + if [ $1 -eq 0 ]; then + route="default" + elif [ $1 -le 8 ]; then + route="$2.0.0.0/$1" + shift + elif [ $1 -le 16 ]; then + route="$2.$3.0.0/$1" + shift; shift + elif [ $1 -le 24 ]; then + route="$2.$3.$4.0/$1" + shift; shift; shift + else + route="$2.$3.$4.$5/$1" + shift; shift; shift; shift + fi + shift + router="$1.$2.$3.$4" + classless_routes="$classless_routes $route $router" + shift; shift; shift; shift + done +} + +delete_old_routes() { + $LOGGER "Deleting old routes" + + if [ -n "$old_classless_routes" ]; then + fill_classless_routes "$old_classless_routes" + set $classless_routes + while [ $# -gt 1 ]; do + route delete "$1" "$2" + shift; shift + done + return 0; + fi + + # Only allow the default route to be overridden if it's on our own interface + if [ -f "/tmp/${interface}_defaultgw" ]; then + for router in $old_routers; do + $ROUTE delete default $router >/dev/null 2>&1 + /bin/rm -f /tmp/${interface}_router + done + fi + + if [ -n "$old_static_routes" ]; then + set $old_static_routes + while [ $# -gt 1 ]; do + $ROUTE delete "$1" "$2" + shift; shift + /bin/rm -f /tmp/${interface}_router + done + fi + + arp_flush +} + +add_new_routes() { + $LOGGER "Adding new routes to interface: $interface" + + # RFC 3442: If the DHCP server returns both a Classless Static + # Routes option and a Router option, the DHCP client MUST ignore + # the Router option. + # + # DHCP clients that support this option (Classless Static Routes) + # MUST NOT install the routes specified in the Static Routes + # option (option code 33) if both a Static Routes option and the + # Classless Static Routes option are provided. + if [ -n "$new_classless_routes" ]; then + fill_classless_routes "$new_classless_routes" + $LOGGER "New Classless Static Routes ($interface): $classless_routes" + set $classless_routes + while [ $# -gt 1 ]; do + if [ "0.0.0.0" = "$2" ]; then + route add "$1" -iface "$interface" + else + route add "$1" "$2" + fi + shift; shift + done + return + fi + + ADDED_ROUTE=no + EXISTSGW=`/bin/ls -l /tmp/*_defaultgw | /usr/bin/wc -l` + # Only allow the default route to be overridden if it's on our own interface + if [ -f "/tmp/${interface}_defaultgw" -o $EXISTSGW -eq 0 ]; then + $ROUTE delete default + for router in $new_routers; do + if [ "$new_ip_address" = "$router" -o "$router" = "255.255.255.255" ]; then + $ROUTE add default -iface $interface + echo $ROUTE add default -iface $interface | $LOGGER + # NOTE: Do not activate this for all ones address since pf(4) will try to forward packets to it. + if [ "$new_ip_address" = "$router" ]; then + echo $router > /tmp/${interface}_router + fi + else + $ROUTE add default $router + echo $ROUTE add default $router | $LOGGER + echo $router > /tmp/${interface}_router + fi + ADDED_ROUTE=yes + # 2nd and subsequent default routers error out, so explicitly + # stop processing the list after the first one. + break + done + fi + + if [ -n "$new_static_routes" ]; then + $LOGGER "New Static Routes ($interface): $new_static_routes" + set $new_static_routes + while [ $# -gt 1 ]; do + $ROUTE add $1 $2 + if [ "$ADDED_ROUTE" = "no" ]; then + echo $2 > /tmp/${interface}_router + fi + shift; shift + done + fi +} + +add_new_resolv_conf() { + $LOGGER "Creating resolv.conf" + if [ -f "/var/etc/nameserver_$interface" ]; then + # Remove old entries + for nameserver in `cat /var/etc/nameserver_$interface`; do + $ROUTE delete $nameserver >/dev/null 2>&1 + done + fi + if [ -n "$new_domain_name_servers" ]; then + /bin/rm -f /var/etc/nameserver_$interface + ALLOWOVERRIDE=`/usr/bin/grep dnsallowoverride /conf/config.xml | /usr/bin/wc -l` + for nameserver in $new_domain_name_servers; do + # Add a route to the nameserver out the correct interface + # so that mulitple wans work correctly with multiple dns + # also backup the nameserver for later route removal + if [ $ALLOWOVERRIDE -gt 0 ]; then + echo $nameserver >>/var/etc/nameserver_$interface + $ROUTE add $nameserver -iface $interface + fi + done + echo $new_domain_name >/var/etc/searchdomain_$interface + fi + + return 0 +} + +# Notify rc.newwanip of changes to an interface +notify_rc_newwanip() { + /usr/local/sbin/pfSctl -c "interface newip $interface" +} + +# +# Start of active code. +# + +# Invoke the local dhcp client enter hooks, if they exist. +if [ -f /etc/dhclient-enter-hooks ]; then + $LOGGER "dhclient-enter-hooks" + exit_status=0 + . /etc/dhclient-enter-hooks + # allow the local script to abort processing of this state + # local script must set exit_status variable to nonzero. + if [ $exit_status -ne 0 ]; then + exit $exit_status + fi +fi + +#if [ -x $ROUTE ]; then +# if_defaultroute=`$ROUTE -n get -inet default | $GREP interface | $AWK '{print $2}'` +#else +# $LOGGER "if_defaultroute" +# if_defaultroute="x" +#fi + +$LOGGER $reason +case $reason in +MEDIUM) + $IFCONFIG $interface $medium + $IFCONFIG $interface inet -alias 0.0.0.0 $medium >/dev/null 2>&1 + /bin/sleep 1 + ;; + +PREINIT) + delete_old_alias + $IFCONFIG $interface inet 0.0.0.0 netmask 0.0.0.0 broadcast 255.255.255.255 up + delete_old_states + /bin/rm -f /tmp/${interface}_router + ;; + +ARPCHECK|ARPSEND) + ;; + +BOUND|RENEW|REBIND|REBOOT) + check_hostname + changes="no" + if [ "$old_ip_address" != "$new_ip_address" ]; then + delete_old_states + fi + if [ -n "$old_ip_address" ]; then + if [ -n "$alias_ip_address" ] && \ + [ "$old_ip_address" != "$alias_ip_address" ]; then + delete_old_alias + changes="yes" + fi + if [ "$old_ip_address" != "$new_ip_address" ]; then + delete_old_address + delete_old_routes + changes="yes" + fi + fi + if [ "$reason" = BOUND ] || \ + [ "$reason" = REBOOT ] || \ + [ -z "$old_ip_address" ] || \ + [ "$old_ip_address" != "$new_ip_address" ]; then + add_new_address + add_new_routes + changes="yes" + fi + if [ -n "$alias_ip_address" ] && \ + [ "$new_ip_address" != "$alias_ip_address" ]; then + add_new_alias + changes="yes" + fi + add_new_resolv_conf + if [ "$changes" = "yes" ] ; then + notify_rc_newwanip + fi + ;; + +EXPIRE|FAIL) + delete_old_alias + delete_old_states + if [ -n "$old_ip_address" ]; then + delete_old_address + delete_old_routes + fi + ;; + +TIMEOUT) + delete_old_alias + add_new_address + /bin/sleep 1 + if [ -n "$new_routers" ]; then + $LOGGER "New Routers ($interface): $new_routers" + set "$new_routers" + if /sbin/ping -q -c 1 -t 1 "$1"; then + if [ "$new_ip_address" != "$alias_ip_address" ]; then + add_new_alias + fi + add_new_routes + if add_new_resolv_conf; then + notify_rc_newwanip + fi + fi + fi + $IFCONFIG $interface inet -alias $new_ip_address $medium + delete_old_states + delete_old_routes + ;; +esac + +# Invoke the local dhcp client exit hooks, if they exist. +if [ -f /etc/dhclient-exit-hooks ]; then + $LOGGER "dhclient-exit-hooks" + exit_status=0 + . /etc/dhclient-exit-hooks + # allow the local script to abort processing of this state + # local script must set exit_status variable to nonzero. + exit $exit_status +fi diff --git a/tmp/post_upgrade_command b/tmp/post_upgrade_command new file mode 100755 index 000000000..d5577f7a3 --- /dev/null +++ b/tmp/post_upgrade_command @@ -0,0 +1,45 @@ +#!/bin/sh + +/etc/rc.conf_mount_rw + +PFSENSETYPE=`cat /etc/platform` + +if [ $PFSENSETYPE = "pfSense" ] || [ $PFSENSETYPE = "nanobsd" ]; then + touch /conf/needs_package_sync +fi + +# Detect interactive logins and display the shell +detect_command='[ -n "$SSH_TTY" -o "$TERM" = "cons25" ] && exec /etc/rc.initial' +echo "$detect_command" > $CVS_CO_DIR/root/.shrc +echo "$detect_command" >> $CVS_CO_DIR/root/.profile + +# Now turn on or off serial console as needed +echo "Checking for /tmp/$1/tmp/post_upgrade_command.php... " >> /conf/upgrade_log.txt +if [ -x /tmp/$1/tmp/post_upgrade_command.php ]; then + echo "Running /tmp/$1/tmp/post_upgrade_command.php $1" >> /conf/upgrade_log.txt + /tmp/$1/tmp/post_upgrade_command.php $1 >> /conf/upgrade_log.txt 2>&1 +elif [ -f /tmp/post_upgrade_command.php ]; then + echo "Running /tmp/post_upgrade_command.php $1" >> /conf/upgrade_log.txt + /tmp/post_upgrade_command.php $1 +fi + +# Remove any previous MD5 sum files +rm -f /root/*.md5 + +# File moved to pfSense php shell (pfSsh.php) +rm -rf /usr/local/sbin/cvs_sync.sh + +# Fixup permissions on installed files +if [ "${PFSENSETYPE}" = "nanobsd" ]; then + MTREECHKDIR=/tmp/${1}/ +else + MTREECHKDIR=/ +fi +if [ -f ${MTREECHKDIR}etc/installed_filesystem.mtree ]; then + /usr/sbin/mtree -U -e -q -f ${MTREECHKDIR}etc/installed_filesystem.mtree -p ${MTREECHKDIR} > /conf/mtree.log; +fi; + +# Make sure to preserve existing time zone +if [ "${PFSENSETYPE}" = "nanobsd" ] && [ -f /etc/localtime ]; then + /bin/cp -p /etc/localtime /tmp/${1}/etc/localtime 2>/dev/null +fi diff --git a/tmp/post_upgrade_command.php b/tmp/post_upgrade_command.php new file mode 100755 index 000000000..5cbc8be9a --- /dev/null +++ b/tmp/post_upgrade_command.php @@ -0,0 +1,33 @@ +#!/usr/local/bin/php -f +> /conf/upgrade_log.txt"); + setup_serial_port("upgrade", $newslicedir); + + $files_to_process = file("/etc/pfSense.obsoletedfiles"); + foreach($files_to_process as $filename) + if(file_exists($filename)) + exec("/bin/rm -f $filename"); + +?> diff --git a/tmp/pre_upgrade_command b/tmp/pre_upgrade_command new file mode 100644 index 000000000..d1461875a --- /dev/null +++ b/tmp/pre_upgrade_command @@ -0,0 +1,30 @@ +#!/bin/sh + +/etc/rc.conf_mount_rw + +# Record the previous version +PRIOR_VERSION=`uname -r | cut -d'.' -f1` +echo $PRIOR_VERSION > /tmp/pre_upgrade_version + +# Hack to workaround ticket #3749 +if [ "${PRIOR_VERSION}" = "8" ] && grep -q 'sh /etc/rc.reboot' /etc/rc.firmware; then + PROC=$(ps axwww | grep '/etc/rc.firmware *pfSenseupgrade') + PID='' + IMG='' + if [ -n "${PROC}" ]; then + PID=$(echo "${PROC}" | awk '{print $1}') + IMG=$(echo "${PROC}" | sed 's,^.*pfSenseupgrade *,,') + fi + + if [ -n "${PID}" -a -n "${IMG}" -a -f "${IMG}" ]; then + cp -fp /bin/sh /tmp/sh.old + kill ${PID} >/dev/null 2>&1 + kill -9 ${PID} >/dev/null 2>&1 + sed -i '' -e 's,sh /,/tmp/sh.old /,' /etc/rc.firmware + /etc/rc.firmware pfSenseupgrade "${IMG}" + exit + fi +fi + +rm /boot/kernel/* + diff --git a/usr/boot/device.hints_wrap b/usr/boot/device.hints_wrap new file mode 100644 index 000000000..006fdd544 --- /dev/null +++ b/usr/boot/device.hints_wrap @@ -0,0 +1,93 @@ +hint.fdc.0.at="isa" +hint.fdc.0.port="0x3F0" +hint.fdc.0.irq="6" +hint.fdc.0.drq="2" +hint.fd.0.at="fdc0" +hint.fd.0.drive="0" +hint.fd.1.at="fdc0" +hint.fd.1.drive="1" +hint.hw.ata.ata_dma="0" +hint.hw.ata.atapi_dma="0" +hint.ata.0.at="isa" +hint.ata.0.port="0x1F0" +hint.ata.0.irq="14" +hint.ata.1.at="isa" +hint.ata.1.port="0x170" +hint.ata.1.irq="15" +hint.adv.0.at="isa" +hint.adv.0.disabled="1" +hint.bt.0.at="isa" +hint.bt.0.disabled="1" +hint.aha.0.at="isa" +hint.aha.0.disabled="1" +hint.aic.0.at="isa" +hint.aic.0.disabled="1" +hint.atkbdc.0.disabled="1" +hint.atkbdc.0.at="isa" +hint.atkbdc.0.port="0x060" +hint.atkbd.0.at="atkbdc" +hint.atkbd.0.irq="1" +hint.psm.0.at="atkbdc" +hint.psm.0.irq="12" +hint.vga.0.disabled="1" +#hint.vga.0.at="isa" +#hint.sc.0.disabled="1" +hint.sc.0.at="isa" +hint.sc.0.flags="0x100" +hint.vt.0.at="isa" +hint.vt.0.disabled="1" +hint.apm.0.disabled="1" +hint.apm.0.flags="0x20" +hint.pcic.0.at="isa" +# hint.pcic.0.irq="10" # Default to polling +hint.pcic.0.port="0x3e0" +hint.pcic.0.maddr="0xd0000" +hint.pcic.1.at="isa" +hint.pcic.1.irq="11" +hint.pcic.1.port="0x3e2" +hint.pcic.1.maddr="0xd4000" +hint.pcic.1.disabled="1" +hint.sio.0.at="isa" +hint.sio.0.port="0x3F8" +hint.sio.0.flags="0x30" +hint.sio.0.irq="4" +hint.sio.1.at="isa" +hint.sio.1.port="0x2F8" +hint.sio.1.irq="3" +hint.sio.2.at="isa" +hint.sio.2.disabled="1" +hint.sio.2.port="0x3E8" +hint.sio.2.irq="5" +hint.sio.3.at="isa" +hint.sio.3.disabled="1" +hint.sio.3.port="0x2E8" +hint.sio.3.irq="9" +hint.ppc.0.at="isa" +hint.ppc.0.irq="7" +hint.ed.0.at="isa" +hint.ed.0.disabled="1" +hint.ed.0.port="0x280" +hint.ed.0.irq="10" +hint.ed.0.maddr="0xd8000" +hint.cs.0.at="isa" +hint.cs.0.disabled="1" +hint.cs.0.port="0x300" +hint.sn.0.at="isa" +hint.sn.0.disabled="1" +hint.sn.0.port="0x300" +hint.sn.0.irq="10" +hint.ie.0.at="isa" +hint.ie.0.disabled="1" +hint.ie.0.port="0x300" +hint.ie.0.irq="10" +hint.ie.0.maddr="0xd0000" +hint.fe.0.at="isa" +hint.fe.0.disabled="1" +hint.fe.0.port="0x300" +hint.lnc.0.at="isa" +hint.lnc.0.disabled="1" +hint.lnc.0.port="0x280" +hint.lnc.0.irq="10" +hint.lnc.0.drq="0" +hint.psm.0.flags="0x100" +hint.acpi.0.disabled="1" \ No newline at end of file diff --git a/usr/boot/loader.conf_wrap b/usr/boot/loader.conf_wrap new file mode 100644 index 000000000..6e7d9aa9c --- /dev/null +++ b/usr/boot/loader.conf_wrap @@ -0,0 +1,11 @@ +hw.ata.atapi_dma="0" +hw.ata.ata_dma="0" +loader_color="NO" +console=comconsole +autoboot_delay="5" +hw.ata.wc="0" +kern.ipc.nmbclusters="0" +beastie_disable="YES" +vm.kmem_size="435544320" +vm.kmem_size_max="535544320" +hw.usb.no_pf="1" diff --git a/usr/cf/conf/trigger_initial_wizard b/usr/cf/conf/trigger_initial_wizard new file mode 100644 index 000000000..e69de29bb diff --git a/usr/conf.default/config.xml b/usr/conf.default/config.xml new file mode 100644 index 000000000..a0cabd501 --- /dev/null +++ b/usr/conf.default/config.xml @@ -0,0 +1,751 @@ + + + + 9.9 + + pfsense_ng + + + + debug.pfftpproxy + default + + + + vfs.read_max + default + + + + net.inet.ip.portrange.first + default + + + + net.inet.tcp.blackhole + default + + + + net.inet.udp.blackhole + default + + + + net.inet.ip.random_id + default + + + + net.inet.tcp.drop_synfin + default + + + + net.inet.ip.redirect + default + + + + net.inet6.ip6.redirect + default + + + + net.inet6.ip6.use_tempaddr + default + + + + net.inet6.ip6.prefer_tempaddr + default + + + + net.inet.tcp.syncookies + default + + + + net.inet.tcp.recvspace + default + + + + net.inet.tcp.sendspace + default + + + + net.inet.ip.fastforwarding + default + + + + net.inet.tcp.delayed_ack + default + + + + net.inet.udp.maxdgram + default + + + + net.link.bridge.pfil_onlyip + default + + + + net.link.bridge.pfil_member + default + + + + net.link.bridge.pfil_bridge + default + + + + net.link.tap.user_open + default + + + + kern.randompid + default + + + + net.inet.ip.intr_queue_maxlen + default + + + + hw.syscons.kbd_reboot + default + + + + net.inet.tcp.log_debug + default + + + + net.inet.icmp.icmplim + default + + + + net.inet.tcp.tso + default + + + + net.inet.udp.checksum + default + + + + kern.ipc.maxsockbuf + default + + + + normal + pfSense + localdomain + + + + all + + system + 1998 + 0 + + + admins + + system + 1999 + 0 + page-all + + + admin + + system + admins + $1$dSJImFph$GvZ7.1UbuWu.Yb8etC0re. + 0 + user-shell-access + + 2000 + 2000 + Etc/UTC + 300 + 0.pfsense.pool.ntp.org + + https + + yes + + + + + + + + + hadp + hadp + hadp + + monthly + + + + + + + vr1 + + dhcp + dhcp6 + + + + + + + + + + 0 + + + + + vr0 + 192.168.1.1 + 24 + track6 + 64 + + + wan + 0 + + + + + + + + + + + + + 192.168.1.100 + 192.168.1.199 + + + + + + + + + + + + + + + + + + + + + + + public + + + + + + + + + + + + + + + + + automatic + + + + + + + + + + pass + inet + + lan + 0100000101 + + lan + + + + + + + pass + inet6 + + lan + 0100000102 + + lan + + + + + + + + + + + + + + + + + + + + + + + + + 1,31 + 0-5 + * + * + * + root + /usr/bin/nice -n20 adjkerntz -a + + + 1 + 3 + 1 + * + * + root + /usr/bin/nice -n20 /etc/rc.update_bogons.sh + + + */60 + * + * + * + * + root + /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 sshlockout + + + 1 + 1 + * + * + * + root + /usr/bin/nice -n20 /etc/rc.dyndns.update + + + */60 + * + * + * + * + root + /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 virusprot + + + 30 + 12 + * + * + * + root + /usr/bin/nice -n20 /etc/rc.update_urltables + + + + + + + + + + + ICMP + icmp + + + + + TCP + tcp + + + + + HTTP + http + + + / + + 200 + + + + HTTPS + https + + + / + + 200 + + + + SMTP + send + + + + 220 * + + + + + system_information-container:col1:show,captive_portal_status-container:col1:close,carp_status-container:col1:close,cpu_graphs-container:col1:close,gateways-container:col1:close,gmirror_status-container:col1:close,installed_packages-container:col1:close,interface_statistics-container:col1:close,interfaces-container:col2:show,ipsec-container:col2:close,load_balancer_status-container:col2:close,log-container:col2:close,picture-container:col2:close,rss-container:col2:close,services_status-container:col2:close,traffic_graphs-container:col2:close + + diff --git a/usr/etc/ascii-art/pfsense-logo-small.txt b/usr/etc/ascii-art/pfsense-logo-small.txt new file mode 100644 index 000000000..01d8bc52d --- /dev/null +++ b/usr/etc/ascii-art/pfsense-logo-small.txt @@ -0,0 +1,5 @@ + ___ + ___/ f \ +/ p \___/ Sense +\___/ \ + \___/ \ No newline at end of file diff --git a/usr/etc/bogons b/usr/etc/bogons new file mode 100644 index 000000000..9be218d7b --- /dev/null +++ b/usr/etc/bogons @@ -0,0 +1,10 @@ +0.0.0.0/8 +127.0.0.0/8 +169.254.0.0/16 +192.0.0.0/24 +192.0.2.0/24 +198.18.0.0/15 +198.51.100.0/24 +203.0.113.0/24 +224.0.0.0/4 +240.0.0.0/4 diff --git a/usr/etc/bogonsv6 b/usr/etc/bogonsv6 new file mode 100644 index 000000000..e69de29bb diff --git a/usr/etc/ca_countries b/usr/etc/ca_countries new file mode 100644 index 000000000..1a9ca9e88 --- /dev/null +++ b/usr/etc/ca_countries @@ -0,0 +1,237 @@ +US United States of America +CA Canada +AX Aland Islands +AD Andorra +AE United Arab Emirates +AF Afghanistan +AG Antigua and Barbuda +AI Anguilla +AL Albania +AM Armenia +AN Netherlands Antilles +AO Angola +AQ Antarctica +AR Argentina +AS American Samoa +AT Austria +AU Australia +AW Aruba +AZ Azerbaijan +BA Bosnia and Herzegovina +BB Barbados +BD Bangladesh +BE Belgium +BF Burkina Faso +BG Bulgaria +BH Bahrain +BI Burundi +BJ Benin +BM Bermuda +BN Brunei Darussalam +BO Bolivia +BR Brazil +BS Bahamas +BT Bhutan +BV Bouvet Island +BW Botswana +BZ Belize +CA Canada +CC Cocos (Keeling) Islands +CF Central African Republic +CH Switzerland +CI Cote D'Ivoire (Ivory Coast) +CK Cook Islands +CL Chile +CM Cameroon +CN China +CO Colombia +CR Costa Rica +CS Czechoslovakia (former) +CV Cape Verde +CX Christmas Island +CY Cyprus +CZ Czech Republic +DE Germany +DJ Djibouti +DK Denmark +DM Dominica +DO Dominican Republic +DZ Algeria +EC Ecuador +EE Estonia +EG Egypt +EH Western Sahara +ER Eritrea +ES Spain +ET Ethiopia +FI Finland +FJ Fiji +FK Falkland Islands (Malvinas) +FM Micronesia +FO Faroe Islands +FR France +FX France, Metropolitan +GA Gabon +GB Great Britain (UK) +GD Grenada +GE Georgia +GF French Guiana +GG Guernsey +GH Ghana +GI Gibraltar +GL Greenland +GM Gambia +GN Guinea +GP Guadeloupe +GQ Equatorial Guinea +GR Greece +GS S. Georgia and S. Sandwich Isls. +GT Guatemala +GU Guam +GW Guinea-Bissau +GY Guyana +HK Hong Kong +HM Heard and McDonald Islands +HN Honduras +HR Croatia (Hrvatska) +HT Haiti +HU Hungary +ID Indonesia +IE Ireland +IL Israel +IM Isle of Man +IN India +IO British Indian Ocean Territory +IS Iceland +IT Italy +JE Jersey +JM Jamaica +JO Jordan +JP Japan +KE Kenya +KG Kyrgyzstan +KH Cambodia +KI Kiribati +KM Comoros +KN Saint Kitts and Nevis +KR Korea (South) +KW Kuwait +KY Cayman Islands +KZ Kazakhstan +LA Laos +LC Saint Lucia +LI Liechtenstein +LK Sri Lanka +LS Lesotho +LT Lithuania +LU Luxembourg +LV Latvia +LY Libya +MA Morocco +MC Monaco +MD Moldova +ME Montenegro +MG Madagascar +MH Marshall Islands +MK Macedonia +ML Mali +MM Myanmar +MN Mongolia +MO Macau +MP Northern Mariana Islands +MQ Martinique +MR Mauritania +MS Montserrat +MT Malta +MU Mauritius +MV Maldives +MW Malawi +MX Mexico +MY Malaysia +MZ Mozambique +NA Namibia +NC New Caledonia +NE Niger +NF Norfolk Island +NG Nigeria +NI Nicaragua +NL Netherlands +NO Norway +NP Nepal +NR Nauru +NT Neutral Zone +NU Niue +NZ New Zealand (Aotearoa) +OM Oman +PA Panama +PE Peru +PF French Polynesia +PG Papua New Guinea +PH Philippines +PK Pakistan +PL Poland +PM St. Pierre and Miquelon +PN Pitcairn +PR Puerto Rico +PS Palestinian Territory +PT Portugal +PW Palau +PY Paraguay +QA Qatar +RE Reunion +RO Romania +RS Serbia +RU Russian Federation +RW Rwanda +SA Saudi Arabia +SB Solomon Islands +SC Seychelles +SE Sweden +SG Singapore +SH St. Helena +SI Slovenia +SJ Svalbard and Jan Mayen Islands +SK Slovak Republic +SL Sierra Leone +SM San Marino +SN Senegal +SR Suriname +ST Sao Tome and Principe +SU USSR (former) +SV El Salvador +SZ Swaziland +TC Turks and Caicos Islands +TD Chad +TF French Southern Territories +TG Togo +TH Thailand +TJ Tajikistan +TK Tokelau +TM Turkmenistan +TN Tunisia +TO Tonga +TP East Timor +TR Turkey +TT Trinidad and Tobago +TV Tuvalu +TW Taiwan +TZ Tanzania +UA Ukraine +UG Uganda +UM US Minor Outlying Islands +US United States +UY Uruguay +UZ Uzbekistan +VA Vatican City State (Holy See) +VC Saint Vincent and the Grenadines +VE Venezuela +VG Virgin Islands (British) +VI Virgin Islands (U.S.) +VN Viet Nam +VU Vanuatu +WF Wallis and Futuna Islands +WS Samoa +YE Yemen +YT Mayotte +ZA South Africa +ZM Zambia \ No newline at end of file diff --git a/usr/etc/ddb.conf b/usr/etc/ddb.conf new file mode 100644 index 000000000..65f49c20e --- /dev/null +++ b/usr/etc/ddb.conf @@ -0,0 +1,3 @@ +script lockinfo=show locks; show alllocks; show lockedvnods +script kdb.enter.default=textdump set; capture on; run lockinfo; show pcpu; bt; ps; alltrace; capture off; call doadump; reset +script kdb.enter.witness=run lockinfo diff --git a/usr/etc/devd.conf b/usr/etc/devd.conf new file mode 100644 index 000000000..c0a2b2a90 --- /dev/null +++ b/usr/etc/devd.conf @@ -0,0 +1,74 @@ +# $Id$ +# $FreeBSD: src/etc/devd.conf,v 1.26.2.1 2005/09/03 22:49:22 sam Exp $ + +options { + directory "/etc/devd"; + directory "/usr/local/etc/devd"; + pid-file "/var/run/devd.pid"; + set scsi-controller-regex + "(aac|adv|adw|aha|ahb|ahc|ahd|aic|amd|amr|asr|bt|ciss|ct|dpt|\ + esp|ida|iir|ips|isp|mlx|mly|mpt|ncr|ncv|nsp|stg|sym|trm|wds)\ + [0-9]+"; +}; + +# CARP notify hooks. This will call carpup/carpdown with the +# interface (carp0, carp1) as the first parameter. +notify 100 { + match "system" "CARP"; + match "type" "MASTER"; + action "/usr/local/sbin/pfSctl -c 'interface carpmaster $subsystem'"; +}; + +notify 100 { + match "system" "CARP"; + match "type" "BACKUP"; + action "/usr/local/sbin/pfSctl -c 'interface carpbackup $subsystem'"; +}; + +# When a USB keyboard arrives, attach it as the console keyboard. +attach 100 { + device-name "ukbd0"; + action "kbdcontrol -k /dev/ukbd0 < /dev/console 2>/dev/null"; +}; + +detach 100 { + device-name "ukbd0"; + action "kbdcontrol -k /dev/kbd0 < /dev/console 2>/dev/null"; +}; + +# +# Signal upper levels that an event happened on ethernet class interface +# +notify 0 { + match "system" "IFNET"; + match "type" "LINK_UP"; + media-type "ethernet"; + action "/usr/local/sbin/pfSctl -c 'interface linkup start $subsystem'"; +}; + +notify 0 { + match "system" "IFNET"; + match "type" "LINK_DOWN"; + media-type "ethernet"; + action "/usr/local/sbin/pfSctl -c 'interface linkup stop $subsystem'"; +}; + +# +# Signal upper levels that an event happened on 802.11 class interface +# +notify 0 { + match "system" "IFNET"; + match "type" "LINK_UP"; + match "subsystem" "[a-z]+[0-9]+_wlan[0-9]+"; + action "/usr/local/sbin/pfSctl -c 'interface linkup start $subsystem'"; +}; + +# Notify all users before beginning emergency shutdown when we get +# a _CRT or _HOT thermal event and we're going to power down the system +# very soon. +notify 10 { + match "system" "ACPI"; + match "subsystem" "Thermal"; + match "notify" "0xcc"; + action "logger -p kern.emerg 'WARNING: system temperature too high, shutting down soon!'"; +}; diff --git a/usr/etc/dh-parameters.1024 b/usr/etc/dh-parameters.1024 new file mode 100644 index 000000000..3148f4c5e --- /dev/null +++ b/usr/etc/dh-parameters.1024 @@ -0,0 +1,5 @@ +-----BEGIN DH PARAMETERS----- +MIGHAoGBAINPWm4z+KHppuzSZFjreaLrKdI/wkP0ojutrSlkiszXsGkbU6++GB1C +7ZH2ZVpSIo4z31XyQnlraIkyY2pAItxqN8ozWaz84QLSHcwVcWKDEU7ZP0ISyTep +alnFPGG8nJBSzxch+7H3HOfM68y6kfMtFDWuZtYj/9Zw4W42fVDLAgEC +-----END DH PARAMETERS----- diff --git a/usr/etc/dh-parameters.2048 b/usr/etc/dh-parameters.2048 new file mode 100644 index 000000000..f0e1a5d35 --- /dev/null +++ b/usr/etc/dh-parameters.2048 @@ -0,0 +1,8 @@ +-----BEGIN DH PARAMETERS----- +MIIBCAKCAQEAmWwXhRjeqPYl1TvXeKZt5W8MHe0keJK7wC+uPMxpGFVXlvPnWdN+ +W/GyimtD2rHYWF1gyr5IbhiEkXSAuTCnwokwz9XiNQ3hKY/iwTPDo0Go8beB5Ezr +wz8DibSIv93Va5C+fHzwosuwTAqaOgpOzPqSmVS/UmUATssxOuCK6Crv7YyA5knW +v0JsJK3VfloeXq/p4skn/KRgL2twO5puJvZWGycMd3cv9+afsWjES/ItwzEHNSEG +sPen/kNDB4nH+WFKdXnP3fUAqPZCxiqaBC+UnuHngm7Se4smc7DeJkUsed7NLIeg +zDZ0a3bKZ3UB0lcLGbqXIhh74TtFQ1egmwIBAg== +-----END DH PARAMETERS----- diff --git a/usr/etc/dh-parameters.4096 b/usr/etc/dh-parameters.4096 new file mode 100644 index 000000000..30058a136 --- /dev/null +++ b/usr/etc/dh-parameters.4096 @@ -0,0 +1,13 @@ +-----BEGIN DH PARAMETERS----- +MIICCAKCAgEA1G0VaCFVkFFPB0pL1Y6NtAlysfvZaAXXmmJ89Xy5wrNLEZfTdmqT +NmABAhr0DD6+1rcI5d4LriRLhTFf77COjW/+FelEA5BZBsoQDL6QsxWt4VoLT6uK +bKVkbtwKycz0uOU1areS5gWHF71KRmKgooOuY2yl7a75uLn4QYCS7hKLXsAIB8eC +63nl81T5gXOAc3hMiKrk8hKLUA6zkMfqWIpG06wvicaPlg8GyQavwGxONDNl/Y2r +XyRoh/4ja7Moz0tUCmZV+iKtGgq5wekJ1fCN3zhXPX6h6WujoYqzcCmPLFCuIuEa +kxRy9XaDTe8V40p1RDc4yMYQrl2hxrO8YPRBewigILYxEfe+51qE5Sb//UZszwNL +kIhW9ObfAkotXoH81xke4EN0RX+rVK1ZYbeBIDCn62ZqNsUVkMh5Otsh0TiK7SP9 +O14IflklQqpyYc+aHMNknhsN30MFV3aD/785QS8zcWUdSdQeZlbjjFgJ4Xpt+r3p +X6Vv8cwEh8qDHn2CaOfZtyTx2V3B2LU1sJZQ9ynVzlxy2clQcVboXPM1xNgzHSsd +bFgPMJUAq9VjLGrbN6a3NqWwXnQPMuczX1G3T690fKF55e/boIAXZD1hEZqKt1f0 +DuCwyf/D4CEGyHhHIdVm7f1kTaErWzSgqcc2wGsjFi3ABTG2byxTnSsCAQI= +-----END DH PARAMETERS----- diff --git a/usr/etc/disktab b/usr/etc/disktab new file mode 100644 index 000000000..5726c4dbf --- /dev/null +++ b/usr/etc/disktab @@ -0,0 +1,204 @@ +# $FreeBSD: stable/10/etc/disktab 242462 2012-11-02 00:17:30Z eadler $ +# +# Disk geometry and partition layout tables. +# See disktab(5) for format of this file. +# + +# +# Floppy formats: +# +# To make a filesystem on a floppy: +# fdformat [-f ] fd[.] +# disklabel -B -r -w fd[.] fd +# newfs fd[.] +# +# with : +# -t 2 - two heads +# -u 9|15|18 - sectors per track +# (using the default value of 1/4096 is not much useful for floppies) +# -l 1 - interleave 1 (for most floppies) +# -i 65536 - bytes of data per i-node +# (the default -i value will render you with a floppy wasting way +# too much space in i-node areas) +# + +fd360:\ + :ty=floppy:se#512:nt#2:rm#300:ns#9:nc#40:\ + :pa#720:oa#0:ba#4096:fa#512:\ + :pc#720:oc#0:bc#4096:fc#512: + +fd720:\ + :ty=floppy:se#512:nt#2:rm#300:ns#9:nc#80:\ + :pa#1440:oa#0:ba#4096:fa#512:\ + :pc#1440:oc#0:bc#4096:fc#512: + +fd1200|floppy5|5in|5.25in High Density Floppy:\ + :ty=floppy:se#512:nt#2:rm#360:ns#15:nc#80:\ + :pa#2400:oa#0:ba#4096:fa#512:\ + :pc#2400:oc#0:bc#4096:fc#512: + +fd1440|floppy|floppy3|3in|3.5in High Density Floppy:\ + :ty=floppy:se#512:nt#2:rm#300:ns#18:nc#80:\ + :pa#2880:oa#0:ba#4096:fa#512:\ + :pc#2880:oc#0:bc#4096:fc#512: + +fd2880|2.88MB 3.5in Extra High Density Floppy:\ + :ty=floppy:se#512:nt#2:rm#300:ns#36:nc#80:\ + :pa#5760:oa#0:ba#4096:fa#512:\ + :pb#5760:ob#0:bb#4096:fa#512:\ + :pc#5760:oc#0:bb#4096:fa#512: + +# +# Stressed floppy-formats. No guarantees given. +# + +fd800:\ + :ty=floppy:se#512:nt#2:rm#300:ns#10:nc#80:\ + :pa#1600:oa#0:ba#4096:fa#512:\ + :pc#1600:oc#0:bc#4096:fc#512: + +fd820:\ + :ty=floppy:se#512:nt#2:rm#300:ns#10:nc#82:\ + :pa#1640:oa#0:ba#4096:fa#512:\ + :pc#1640:oc#0:bc#4096:fc#512: + +fd1480:\ + :ty=floppy:se#512:nt#2:rm#300:ns#18:nc#82:\ + :pa#2952:oa#0:ba#4096:fa#512:\ + :pc#2952:oc#0:bc#4096:fc#512: + +fd1720:\ + :ty=floppy:se#512:nt#2:rm#300:ns#21:nc#82:\ + :pa#3444:oa#0:ba#4096:fa#512:\ + :pc#3444:oc#0:bc#4096:fc#512: + +# +# LS-120 floppy-format. +# +fd120m|floppy120|floppy120m|3.5in LS-120 Floppy:\ + :ty=floppy:se#512:nt#8:rm#300:ns#32:nc#963:\ + :pa#246528:oa#0:ba#4096:fa#512:\ + :pc#246528:oc#0:bc#4096:fc#512: + +# +# Harddisk formats +# +qp120at|Quantum Peripherals 120MB IDE:\ + :dt=ESDI:ty=winchester:se#512:nt#9:ns#32:nc#813:sf: \ + :pa#13824:oa#0:ta=4.2BSD:ba#4096:fa#512: \ + :pb#13824:ob#13824:tb=swap: \ + :pc#234144:oc#0: \ + :ph#206496:oh#27648:th=4.2BSD:bh#4096:fh#512: + +pan60|Panasonic Laptop's 60MB IDE:\ + :dt=ST506:ty=winchester:se#512:nt#13:ns#17:nc#565:\ + :pa#13260:oa#0:ta=4.2BSD:ba#4096:fa#512:\ + :pb#13260:ob#13260:tb=swap: \ + :pc#124865:oc#0: \ + :ph#97682:oh#26520:th=4.2BSD:bh#4096:fh#512: + +mk156|toshiba156|Toshiba MK156 156Mb:\ + :dt=SCSI:ty=winchester:se#512:nt#10:ns#35:nc#825:\ + :pa#15748:oa#0:ba#4096:fa#512:ta=4.2BSD:\ + :pb#15748:ob#15748:tb=swap:\ + :pc#288750:oc#0:\ + :ph#257250:oh#31500:bh#4096:fh#512:th=4.2BSD: + +cp3100|Connor Peripherals 100MB IDE:\ + :dt=ST506:ty=winchester:se#512:nt#8:ns#33:nc#766: \ + :pa#12144:oa#0:ta=4.2BSD:ba#4096:fa#512: \ + :pb#12144:ob#12144:tb=swap: \ + :pc#202224:oc#0: \ + :ph#177936:oh#24288:th=4.2BSD:bh#4096:fh#512: + +# a == root +# b == swap +# c == d == whole disk +# e == /var +# f == scratch +# h == /usr + +cp3100new|Connor Peripherals 100MB IDE, with a different configuration:\ + :dt=ST506:ty=winchester:se#512:nt#8:ns#33:nc#766: \ + :pa#15840:oa#0:ta=4.2BSD:ba#4096:fa#512: \ + :pb#24288:ob#15840:tb=swap: \ + :pc#202224:oc#0: \ + :pd#202224:od#0: \ + :pe#15840:oe#40128:te=4.2BSD:be#4096:fe#512: \ + :pg#15840:og#55968:tg=4.2BSD:bg#4096:fg#512: \ + :ph#130416:oh#71808:th=4.2BSD:bh#4096:fh#512: + +maxtor4380|Maxtor XT4380E ESDI :\ + :dt=ESDI:ty=winchester:se#512:nt#15:ns#36:nc#1222:sf: \ + :pa#21600:oa#0:ta=4.2BSD:ba#4096:fa#512:\ + :pb#21600:ob#21600:tb=swap: \ + :pc#659880:oc#0: \ + :pd#216000:od#53200:td=4.2BSD:bd#4096:fd#512: \ + :ph#398520:oh#269200:th=4.2BSD:bh#4096:fh#512: + +miniscribe9380|compaq38|Miniscribe 9380 ESDI :\ + :ty=winchester:dt=ESDI:se#512:nt#15:ns#35:nc#1223:rm#3600:sf: \ + :pa#21000:oa#0:ba#8192:fa#1024:ta=4.2BSD: \ + :pb#42000:ob#21000:tb=swap: \ + :pc#642075:oc#0: \ + :pd#21000:od#63000:bd#8192:fd#1024:td=4.2BSD: \ + :ph#556500:oh#84000:bh#8192:fh#1024:th=4.2BSD: + +ida4|compaq88|Compaq IDA (4 drives) :\ + :ty=winchester:dt=IDA:se#512:nt#16:ns#63:nc#1644:rm#3600:\ + :pa#20160:oa#0:ba#8192:fa#1024:ta=4.2BSD: \ + :pb#80640:ob#20160:tb=swap: \ + :pc#1659168:oc#0: \ + :pd#201600:od#100800:bd#8192:fd#1024:td=4.2BSD: \ + :pe#20160:oe#1310400:be#8192:fe#1024:te=4.2BSD: \ + :ph#1008000:oh#302400:bh#8192:fh#1024:th=4.2BSD: \ + :pg#302400:og#1330560:bg#4096:fg#512:tg=4.2BSD: + +fuji513|Fujitsu M22XXXX: \ + :ty=winchester:dt=ESDI:se#512:nt#16:ns#63:nc#954:rm#3600:\ + :pa#20160:oa#82656:ba#4096:fa#512:ta=4.2BSD: \ + :pb#40320:ob#102816:tb=swap: \ + :pc#961632:oc#0: \ + :ph#656208:oh#143136:bh#4096:fh#512:th=4.2BSD: + +sony650|Sony 650 MB MOD|\ + :ty=removable:dt=SCSI:se#512:nt#1:ns#31:nc#18600:ts#1:rm#4800:\ + :pc#576600:oc#0:\ + :pa#576600:oa#0:ta=4.2BSD:ba#8192:fa#1024: + +mta3230|mo230|IBM MTA-3230 230 Meg 3.5inch Magneto-Optical:\ + :ty=removeable:dt=SCSI:rm#3600:\ + :se#512:nt#64:ns#32:nc#216:sc#2048:su#444384:\ + :pa#444384:oa#0:ba#4096:fa#0:ta=4.2BSD:\ + :pc#444384:oc#0: + +minimum:ty=mfs:se#512:nt#1:rm#300:\ + :ns#2880:nc#1:\ + :pa#2880:oa#0:ba#4096:fa#512:\ + :pc#2880:oc#0:bc#4096:fc#512: + +minimum2:ty=mfs:se#512:nt#1:rm#300:\ + :ns#5760:nc#1:\ + :pa#5760:oa#0:ba#4096:fa#512:\ + :pc#5760:oc#0:bc#4096:fc#512: + +minimum3:ty=mfs:se#512:nt#1:rm#300:\ + :ns#8640:nc#1:\ + :pa#8640:oa#0:ba#4096:fa#512:\ + :pc#8640:oc#0:bc#4096:fc#512: + +zip100|zip 100:\ + :ty=removable:se#512:nc#96:nt#64:ns#32:\ + :pa#196608:oa#0:ba#4096:fa#512:\ + :pc#196608:oc#0:bc#4096:fc#512: + +zip250|zip 250:\ + :ty=removable:se#512:nc#239:nt#64:ns#32:\ + :pa#489472:oa#0:ba#4096:fa#512:\ + :pc#489472:oc#0:bc#4096:fc#512: + +orb2200|orb22|orb:\ + :ty=removable:ns#63:nt#128:nc#4273:sc#1008:su#4307184:se#512:\ + :pa#4307184:oa#0:ba#8192:fa#1024:\ + :pc#4307184:oc#0:bc#8192:fc#1024: + diff --git a/usr/etc/ecl.php b/usr/etc/ecl.php new file mode 100755 index 000000000..683c2a7fb --- /dev/null +++ b/usr/etc/ecl.php @@ -0,0 +1,174 @@ +/dev/null")); + $slices = str_replace("/dev/", "", $slices); + if($slices == "ls: No match.") + return; + $slices_array = explode(" ", $slices); + return $slices_array; +} + +function get_disks() { + global $g, $debug; + $disks_array = array(); + $disks_s = explode(" ", get_single_sysctl("kern.disks")); + foreach($disks_s as $disk) + if(trim($disk)) + $disks_array[] = $disk; + return $disks_array; +} + +function discover_config($mountpoint) { + global $g, $debug; + $locations_to_check = array("/", "/config"); + foreach($locations_to_check as $ltc) { + $tocheck = "/tmp/mnt/cf{$ltc}config.xml"; + if($debug) { + echo "\nChecking for $tocheck"; + if(file_exists($tocheck)) + echo " -> found!"; + } + if(file_exists($tocheck)) + return $tocheck; + } + return ""; +} + +function test_config($file_location) { + global $g, $debug; + if(!$file_location) + return; + // config.xml was found. ensure it is sound. + $root_obj = trim("<{$g['xml_rootobj']}>"); + $xml_file_head = exec("/usr/bin/head -2 " . escapeshellarg($file_location) . " | /usr/bin/tail -n1"); + if($debug) { + echo "\nroot obj = $root_obj"; + echo "\nfile head = $xml_file_head"; + } + if($xml_file_head == $root_obj) { + // Now parse config to make sure + $config_status = config_validate($file_location); + if($config_status) + return true; + } + return false; +} + +// Probes all disks looking for config.xml +function find_config_xml() { + global $g, $debug; + $disks = get_disks(); + // Safety check. + if(!is_array($disks)) + return; + $boot_disk = get_boot_disk(); + $swap_disks = get_swap_disks(); + exec("/bin/mkdir -p /tmp/mnt/cf"); + foreach($disks as $disk) { + $slices = get_disk_slices($disk); + if(is_array($slices)) { + foreach($slices as $slice) { + if($slice == "") + continue; + if(stristr($slice, $boot_disk)) { + if($debug) + echo "\nSkipping boot device slice $slice"; + continue; + } + if(in_array($slice, $swap_disks)) { + if($debug) + echo "\nSkipping swap device slice $slice"; + continue; + } + echo " $slice"; + // First try msdos fs + if($debug) + echo "\n/sbin/mount -t msdosfs /dev/{$slice} /tmp/mnt/cf 2>/dev/null \n"; + $result = exec("/sbin/mount -t msdosfs /dev/{$slice} /tmp/mnt/cf 2>/dev/null"); + // Next try regular fs (ufs) + if(!$result) { + if($debug) + echo "\n/sbin/mount /dev/{$slice} /tmp/mnt/cf 2>/dev/null \n"; + $result = exec("/sbin/mount /dev/{$slice} /tmp/mnt/cf 2>/dev/null"); + } + $mounted = trim(exec("/sbin/mount | /usr/bin/grep -v grep | /usr/bin/grep '/tmp/mnt/cf' | /usr/bin/wc -l")); + if($debug) + echo "\nmounted: $mounted "; + if(intval($mounted) > 0) { + // Item was mounted - look for config.xml file + $config_location = discover_config($slice); + if($config_location) { + if(test_config($config_location)) { + // We have a valid configuration. Install it. + echo " -> found config.xml\n"; + echo "Backing up old configuration...\n"; + backup_config(); + echo "Restoring [{$slice}] {$config_location}...\n"; + restore_backup($config_location); + echo "Cleaning up...\n"; + exec("/sbin/umount /tmp/mnt/cf"); + exit; + } + } + exec("/sbin/umount /tmp/mnt/cf"); + } + } + } + } +} + +echo "External config loader 1.0 is now starting..."; +find_config_xml(); +echo "\n"; + +?> diff --git a/usr/etc/fbtab b/usr/etc/fbtab new file mode 100644 index 000000000..06d2d6127 --- /dev/null +++ b/usr/etc/fbtab @@ -0,0 +1,4 @@ +# $FreeBSD: src/etc/fbtab,v 1.3 1999/09/13 17:09:07 peter Exp $ +# +#/dev/ttyv0 0600 /dev/console +#/dev/ttyv0 0600 /dev/pcaudio:/dev/pcaudioctl diff --git a/usr/etc/gettytab b/usr/etc/gettytab new file mode 100644 index 000000000..5af5aaede --- /dev/null +++ b/usr/etc/gettytab @@ -0,0 +1,235 @@ +# $FreeBSD: stable/10/etc/gettytab 241708 2012-10-18 22:20:02Z peterj $ +# from: @(#)gettytab 5.14 (Berkeley) 3/27/91 +# +# Most of the table entries here are just copies of the old getty table, +# it is by no means certain, or even likely, that any of them are optimal +# for any purpose whatever. Nor is it likely that more than a couple are +# even correct. +# +# The default gettytab entry, used to set defaults for all other +# entries, and in cases where getty is called with no table name. +# +# cb, ce and ck are desirable on most crt's. The non-crt entries need to +# be changed to turn them off (:cb@:ce@:ck@:). +# +# lc should always be on; it's a remainder of some stone age when there +# have been terminals around not being able of handling lower-case +# characters. Those terminals aren't supported any longer, but getty is +# `smart' about them by default. +# +# Parity defaults to even, but the Pc entry and all the `std' entries +# specify no parity. The different parities are: +# (none): same as ep for getty. login will use terminal as is. +# ep: getty will use raw mode (cs8 -parenb) (unless rw is set) and +# fake parity. login will use even parity (cs7 parenb -parodd). +# op: same as ep except odd parity (cs7 parenb parodd) for login. +# getty will fake odd parity as well. +# ap: same as ep except -inpck instead of inpck for login. +# ap overrides op and ep. +# np: 1. don't fake parity in getty. The fake parity garbles +# characters on non-terminals (like pccons) that don't +# support parity. It would probably better for getty not to +# try to fake parity. It could just use cbreak mode so as +# not to force cs8 and let the hardware handle the parity. +# login has to be rely on the hardware anyway. +# 2. set cs8 -parenb -istrip -inpck. +# ep:op: same as ap. +# +default:\ + :cb:ce:ck:lc:fd#1000:im=\r\n%s/%m (%h) (%t)\r\n\r\n:sp#1200:\ + :if=/etc/issue: + +# +# Fixed speed entries +# +# The "std.NNN" names are known to the special case +# portselector code in getty, however they can +# be assigned to any table desired. +# The "NNN-baud" names are known to the special case +# autobaud code in getty, and likewise can +# be assigned to any table desired (hopefully the same speed). +# +a|std.110|110-baud:\ + :np:nd#1:cd#1:uc:sp#110: +b|std.134|134.5-baud:\ + :np:nd#1:cd#2:ff#1:td#1:sp#134:ht:nl: +1|std.150|150-baud:\ + :np:nd#1:cd#2:td#1:fd#1:sp#150:ht:nl:lm=\E\72\6\6\17login\72 : +c|std.300|300-baud:\ + :np:nd#1:cd#1:sp#300: +d|std.600|600-baud:\ + :np:nd#1:cd#1:sp#600: +f|std.1200|1200-baud:\ + :np:fd#1:sp#1200: +6|std.2400|2400-baud:\ + :np:sp#2400: +7|std.4800|4800-baud:\ + :np:sp#4800: +2|std.9600|9600-baud:\ + :np:sp#9600: +g|std.19200|19200-baud:\ + :np:sp#19200: +std.38400|38400-baud:\ + :np:sp#38400: +std.57600|57600-baud:\ + :np:sp#57600: +std.115200|115200-baud:\ + :np:sp#115200: +std.230400|230400-baud:\ + :np:sp#230400: + +# +# Entry specifying explicit device settings. See termios(4) and +# /usr/include/termios.h, too. The entry forces the tty into +# CLOCAL mode (so no DCD is required), and uses Xon/Xoff flow control. +# +# cflags: CLOCAL | HUPCL | CREAD | CS8 +# oflags: OPOST | ONLCR | OXTABS +# iflags: IXOFF | IXON | ICRNL | IGNPAR +# lflags: IEXTEN | ICANON | ISIG | ECHOCTL | ECHO | ECHOK | ECHOE | ECHOKE +# +# The `0' flags don't have input enabled. The `1' flags don't echo. +# (Echoing is done inside getty itself.) +# +local.9600|CLOCAL tty @ 9600 Bd:\ + :c0#0x0000c300:c1#0x0000cb00:c2#0x0000cb00:\ + :o0#0x00000007:o1#0x00000002:o2#0x00000007:\ + :i0#0x00000704:i1#0x00000000:i2#0x00000704:\ + :l0#0x000005cf:l1#0x00000000:l2#0x000005cf:\ + :sp#9600:np: + +# +# Dial in rotary tables, speed selection via 'break' +# +0|d300|Dial-300:\ + :nx=d1200:cd#2:sp#300: +d1200|Dial-1200:\ + :nx=d150:fd#1:sp#1200: +d150|Dial-150:\ + :nx=d110:lm@:tc=150-baud: +d110|Dial-110:\ + :nx=d300:tc=300-baud: + +# +# Fast dialup terminals, 2400/1200/300 rotary (can start either way) +# +D2400|d2400|Fast-Dial-2400:\ + :nx=D1200:tc=2400-baud: +3|D1200|Fast-Dial-1200:\ + :nx=D300:tc=1200-baud: +5|D300|Fast-Dial-300:\ + :nx=D2400:tc=300-baud: + +# +#telebit (19200) +# +t19200:\ + :nx=t2400:tc=19200-baud: +t2400:\ + :nx=t1200:tc=2400-baud: +t1200:\ + :nx=t19200:tc=1200-baud: + +# +#telebit (9600) +# +t9600:\ + :nx=t2400a:tc=9600-baud: +t2400a:\ + :nx=t1200a:tc=2400-baud: +t1200a:\ + :nx=t9600:tc=1200-baud: + +# +# Odd special case terminals +# +-|tty33|asr33|Pity the poor user of this beast:\ + :tc=110-baud: + +4|Console|Console Decwriter II:\ + :nd@:cd@:rw:tc=300-baud: + +e|Console-1200|Console Decwriter III:\ + :fd@:nd@:cd@:rw:tc=1200-baud: + +i|Interdata console:\ + :uc:sp#0: + +l|lsi chess terminal:\ + :sp#300: + +X|Xwindow|X window system:\ + :fd@:nd@:cd@:rw:sp#9600: + +P|Pc|Pc console:\ + :ht:np:sp#9600: + +al.Pc:\ + :ht:np:sp#9600:al=root: + +# Weirdo special case for fast crt's with hardcopy devices +# +8|T9600|CRT with hardcopy:\ + :nx=T300:tc=9600-baud: +9|T300|CRT with hardcopy (300):\ + :nx=T9600:tc=300-baud: + +# +# Plugboard, and misc other terminals +# +plug-9600|Plugboard-9600:\ + :pf#1:tc=9600-baud: +p|P9600|Plugboard-9600-rotary:\ + :pf#1:nx=P300:tc=9600-baud: +q|P300|Plugboard-300:\ + :pf#1:nx=P1200:tc=300-baud: +r|P1200|Plugboard-1200:\ + :pf#1:nx=P9600:tc=1200-baud: + +# +# XXXX Port selector +# +s|DSW|Port Selector:\ + :ps:sp#2400: + +# +# Auto-baud speed detect entry for Micom 600. +# Special code in getty will switch this out +# to one of the NNN-baud entries. +# +A|Auto-baud:\ + :ab:sp#2400:f0#040: + +# +# autologin - automatically log in as root +# + +autologin|al.9600:\ + :al=root:tc=std.9600: +al.19200:\ + :al=root:tc=std.19200: +al.38400:\ + :al=root:tc=std.38400: +al.57600:\ + :al=root:tc=std.57600: +al.115200:\ + :al=root:tc=std.115200: +al.230400:\ + :al=root:tc=std.230400: + +# +# Entries for 3-wire serial terminals. These don't supply carrier, so +# clocal needs to be set, and crtscts needs to be unset. +# +3wire.9600|9600-3wire:\ + :np:nc:sp#9600: +3wire.19200|19200-3wire:\ + :np:nc:sp#19200: +3wire.38400|38400-3wire:\ + :np:nc:sp#38400: +3wire.57600|57600-3wire:\ + :np:nc:sp#57600: +3wire.115200|115200-3wire:\ + :np:nc:sp#115200: +3wire.230400|230400-3wire:\ + :np:nc:sp#230400: diff --git a/usr/etc/group b/usr/etc/group new file mode 100644 index 000000000..a0ca8cebf --- /dev/null +++ b/usr/etc/group @@ -0,0 +1,31 @@ +wheel:*:0:root,admin +daemon:*:1:daemon +kmem:*:2:root +sys:*:3:root +tty:*:4:root +operator:*:5:root +mail:*:6: +bin:*:7: +news:*:8: +man:*:9: +games:*:13: +staff:*:20:root +sshd:*:22: +smmsp:*:25: +mailnull:*:26: +guest:*:31:root +bind:*:53: +unbound:*:59: +proxy:*:62: +_pflogd:*:64: +_dhcp:*:65: +authpf:*:63: +uucp:*:66: +dialer:*:68: +network:*:69: +www:*:80: +nogroup:*:65533: +nobody:*:65534: +audit:*:77: +_ntp:*:123: +_relayd:*:913: diff --git a/usr/etc/host.conf b/usr/etc/host.conf new file mode 100644 index 000000000..6643c7f51 --- /dev/null +++ b/usr/etc/host.conf @@ -0,0 +1,7 @@ +# $FreeBSD: src/etc/host.conf,v 1.6 1999/08/27 23:23:41 peter Exp $ +# First try the /etc/hosts file +hosts +# Now try the nameserver next. +bind +# If you have YP/NIS configured, uncomment the next line +# nis diff --git a/usr/etc/hosts.allow b/usr/etc/hosts.allow new file mode 100644 index 000000000..ab11cc029 --- /dev/null +++ b/usr/etc/hosts.allow @@ -0,0 +1,5 @@ +# +# hosts.allow access control file for "tcp wrapped" applications. +# +ALL : ALL : allow + diff --git a/usr/etc/inc/CHAP.inc b/usr/etc/inc/CHAP.inc new file mode 100644 index 000000000..6eb22f728 --- /dev/null +++ b/usr/etc/inc/CHAP.inc @@ -0,0 +1,463 @@ + +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. +3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. + +This code cannot simply be copied and put under the GNU Public License or +any other GPL-like (LGPL, GPL2) License. + + $Id: CHAP.php 302857 2010-08-28 21:12:59Z mbretter $ +*/ + +require_once 'PEAR.inc'; + +/** +* Classes for generating packets for various CHAP Protocols: +* CHAP-MD5: RFC1994 +* MS-CHAPv1: RFC2433 +* MS-CHAPv2: RFC2759 +* +* @package Crypt_CHAP +* @author Michael Bretterklieber +* @access public +* @version $Revision: 302857 $ +*/ + +/** + * class Crypt_CHAP + * + * Abstract base class for CHAP + * + * @package Crypt_CHAP + */ +class Crypt_CHAP extends PEAR +{ + /** + * Random binary challenge + * @var string + */ + var $challenge = null; + + /** + * Binary response + * @var string + */ + var $response = null; + + /** + * User password + * @var string + */ + var $password = null; + + /** + * Id of the authentication request. Should incremented after every request. + * @var integer + */ + var $chapid = 1; + + /** + * Constructor + * + * Generates a random challenge + * @return void + */ + function Crypt_CHAP() + { + $this->PEAR(); + $this->generateChallenge(); + } + + /** + * Generates a random binary challenge + * + * @param string $varname Name of the property + * @param integer $size Size of the challenge in Bytes + * @return void + */ + function generateChallenge($varname = 'challenge', $size = 8) + { + $this->$varname = ''; + for ($i = 0; $i < $size; $i++) { + $this->$varname .= pack('C', 1 + mt_rand() % 255); + } + return $this->$varname; + } + + /** + * Generates the response. Overwrite this. + * + * @return void + */ + function challengeResponse() + { + } + +} + +/** + * class Crypt_CHAP_MD5 + * + * Generate CHAP-MD5 Packets + * + * @package Crypt_CHAP + */ +class Crypt_CHAP_MD5 extends Crypt_CHAP +{ + + /** + * Generates the response. + * + * CHAP-MD5 uses MD5-Hash for generating the response. The Hash consists + * of the chapid, the plaintext password and the challenge. + * + * @return string + */ + function challengeResponse() + { + return pack('H*', md5(pack('C', $this->chapid) . $this->password . $this->challenge)); + } +} + +/** + * class Crypt_CHAP_MSv1 + * + * Generate MS-CHAPv1 Packets. MS-CHAP doesen't use the plaintext password, it uses the + * NT-HASH wich is stored in the SAM-Database or in the smbpasswd, if you are using samba. + * The NT-HASH is MD4(str2unicode(plaintextpass)). + * You need the hash extension for this class. + * + * @package Crypt_CHAP + */ +class Crypt_CHAP_MSv1 extends Crypt_CHAP +{ + /** + * Wether using deprecated LM-Responses or not. + * 0 = use LM-Response, 1 = use NT-Response + * @var bool + */ + var $flags = 1; + + /** + * Constructor + * + * Loads the hash extension + * @return void + */ + function Crypt_CHAP_MSv1() + { + $this->Crypt_CHAP(); + $this->loadExtension('hash'); + } + + /** + * Generates the NT-HASH from the given plaintext password. + * + * @access public + * @return string + */ + function ntPasswordHash($password = null) + { + if (isset($password)) { + return pack('H*',hash('md4', $this->str2unicode($password))); + } else { + return pack('H*',hash('md4', $this->str2unicode($this->password))); + } + } + + /** + * Converts ascii to unicode. + * + * @access public + * @return string + */ + function str2unicode($str) + { + $uni = ''; + $str = (string) $str; + for ($i = 0; $i < strlen($str); $i++) { + $a = ord($str{$i}) << 8; + $uni .= sprintf("%X", $a); + } + return pack('H*', $uni); + } + + /** + * Generates the NT-Response. + * + * @access public + * @return string + */ + function challengeResponse() + { + return $this->_challengeResponse(); + } + + /** + * Generates the NT-Response. + * + * @access public + * @return string + */ + function ntChallengeResponse() + { + return $this->_challengeResponse(false); + } + + /** + * Generates the LAN-Manager-Response. + * + * @access public + * @return string + */ + function lmChallengeResponse() + { + return $this->_challengeResponse(true); + } + + /** + * Generates the response. + * + * Generates the response using DES. + * + * @param bool $lm wether generating LAN-Manager-Response + * @access private + * @return string + */ + function _challengeResponse($lm = false) + { + if ($lm) { + $hash = $this->lmPasswordHash(); + } else { + $hash = $this->ntPasswordHash(); + } + + while (strlen($hash) < 21) { + $hash .= "\0"; + } + + $td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, ''); + $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); + $key = $this->_desAddParity(substr($hash, 0, 7)); + mcrypt_generic_init($td, $key, $iv); + $resp1 = mcrypt_generic($td, $this->challenge); + mcrypt_generic_deinit($td); + + $key = $this->_desAddParity(substr($hash, 7, 7)); + mcrypt_generic_init($td, $key, $iv); + $resp2 = mcrypt_generic($td, $this->challenge); + mcrypt_generic_deinit($td); + + $key = $this->_desAddParity(substr($hash, 14, 7)); + mcrypt_generic_init($td, $key, $iv); + $resp3 = mcrypt_generic($td, $this->challenge); + mcrypt_generic_deinit($td); + mcrypt_module_close($td); + + return $resp1 . $resp2 . $resp3; + } + + /** + * Generates the LAN-Manager-HASH from the given plaintext password. + * + * @access public + * @return string + */ + function lmPasswordHash($password = null) + { + $plain = isset($password) ? $password : $this->password; + + $plain = substr(strtoupper($plain), 0, 14); + while (strlen($plain) < 14) { + $plain .= "\0"; + } + + return $this->_desHash(substr($plain, 0, 7)) . $this->_desHash(substr($plain, 7, 7)); + } + + /** + * Generates an irreversible HASH. + * + * @access private + * @return string + */ + function _desHash($plain) + { + $key = $this->_desAddParity($plain); + $td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, ''); + $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); + mcrypt_generic_init($td, $key, $iv); + $hash = mcrypt_generic($td, 'KGS!@#$%'); + mcrypt_generic_deinit($td); + mcrypt_module_close($td); + return $hash; + } + + /** + * Adds the parity bit to the given DES key. + * + * @access private + * @param string $key 7-Bytes Key without parity + * @return string + */ + function _desAddParity($key) + { + static $odd_parity = array( + 1, 1, 2, 2, 4, 4, 7, 7, 8, 8, 11, 11, 13, 13, 14, 14, + 16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31, + 32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47, + 49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62, + 64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79, + 81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94, + 97, 97, 98, 98,100,100,103,103,104,104,107,107,109,109,110,110, + 112,112,115,115,117,117,118,118,121,121,122,122,124,124,127,127, + 128,128,131,131,133,133,134,134,137,137,138,138,140,140,143,143, + 145,145,146,146,148,148,151,151,152,152,155,155,157,157,158,158, + 161,161,162,162,164,164,167,167,168,168,171,171,173,173,174,174, + 176,176,179,179,181,181,182,182,185,185,186,186,188,188,191,191, + 193,193,194,194,196,196,199,199,200,200,203,203,205,205,206,206, + 208,208,211,211,213,213,214,214,217,217,218,218,220,220,223,223, + 224,224,227,227,229,229,230,230,233,233,234,234,236,236,239,239, + 241,241,242,242,244,244,247,247,248,248,251,251,253,253,254,254); + + $bin = ''; + for ($i = 0; $i < strlen($key); $i++) { + $bin .= sprintf('%08s', decbin(ord($key{$i}))); + } + + $str1 = explode('-', substr(chunk_split($bin, 7, '-'), 0, -1)); + $x = ''; + foreach($str1 as $s) { + $x .= sprintf('%02s', dechex($odd_parity[bindec($s . '0')])); + } + + return pack('H*', $x); + + } + + /** + * Generates the response-packet. + * + * @param bool $lm wether including LAN-Manager-Response + * @access private + * @return string + */ + function response($lm = false) + { + $ntresp = $this->ntChallengeResponse(); + if ($lm) { + $lmresp = $this->lmChallengeResponse(); + } else { + $lmresp = str_repeat ("\0", 24); + } + + // Response: LM Response, NT Response, flags (0 = use LM Response, 1 = use NT Response) + return $lmresp . $ntresp . pack('C', !$lm); + } +} + +/** + * class Crypt_CHAP_MSv2 + * + * Generate MS-CHAPv2 Packets. This version of MS-CHAP uses a 16 Bytes authenticator + * challenge and a 16 Bytes peer Challenge. LAN-Manager responses no longer exists + * in this version. The challenge is already a SHA1 challenge hash of both challenges + * and of the username. + * + * @package Crypt_CHAP + */ +class Crypt_CHAP_MSv2 extends Crypt_CHAP_MSv1 +{ + /** + * The username + * @var string + */ + var $username = null; + + /** + * The 16 Bytes random binary peer challenge + * @var string + */ + var $peerChallenge = null; + + /** + * The 16 Bytes random binary authenticator challenge + * @var string + */ + var $authChallenge = null; + + /** + * Constructor + * + * Generates the 16 Bytes peer and authentication challenge + * @return void + */ + function Crypt_CHAP_MSv2() + { + $this->Crypt_CHAP_MSv1(); + $this->generateChallenge('peerChallenge', 16); + $this->generateChallenge('authChallenge', 16); + } + + /** + * Generates a hash from the NT-HASH. + * + * @access public + * @param string $nthash The NT-HASH + * @return string + */ + function ntPasswordHashHash($nthash) + { + return pack('H*',hash('md4', $nthash)); + } + + /** + * Generates the challenge hash from the peer and the authenticator challenge and + * the username. SHA1 is used for this, but only the first 8 Bytes are used. + * + * @access public + * @return string + */ + function challengeHash() + { + return substr(pack('H*',hash('sha1', $this->peerChallenge . $this->authChallenge . $this->username)), 0, 8); + } + + /** + * Generates the response. + * + * @access public + * @return string + */ + function challengeResponse() + { + $this->challenge = $this->challengeHash(); + return $this->_challengeResponse(); + } +} + + +?> diff --git a/usr/etc/inc/IPv6.inc b/usr/etc/inc/IPv6.inc new file mode 100644 index 000000000..ab9aa657e --- /dev/null +++ b/usr/etc/inc/IPv6.inc @@ -0,0 +1,1104 @@ + + * @copyright 2003-2005 The PHP Group + * @license BSD License http://www.opensource.org/licenses/bsd-license.php + * @version CVS: $Id$ + * @link http://pear.php.net/package/Net_IPv6 + */ + +// {{{ constants + +/** + * Error message if netmask bits was not found + * @see isInNetmask + */ +define("NET_IPV6_NO_NETMASK_MSG", "Netmask length not found"); + +/** + * Error code if netmask bits was not found + * @see isInNetmask + */ +define("NET_IPV6_NO_NETMASK", 10); + +/** + * Address Type: Unassigned (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_UNASSIGNED", 1); + +/** + * Address Type: Reserved (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_RESERVED", 11); + +/** + * Address Type: Reserved for NSAP Allocation (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_RESERVED_NSAP", 12); + +/** + * Address Type: Reserved for IPX Allocation (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_RESERVED_IPX", 13); + +/** + * Address Type: Reserved for Geographic-Based Unicast Addresses + * (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_RESERVED_UNICAST_GEOGRAPHIC", 14); + +/** + * Address Type: Provider-Based Unicast Address (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_UNICAST_PROVIDER", 22); + +/** + * Address Type: Multicast Addresses (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_MULTICAST", 31); + +/** + * Address Type: Link Local Use Addresses (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_LOCAL_LINK", 42); + +/** + * Address Type: Link Local Use Addresses (RFC 1884, Section 2.3) + * @see getAddressType() + */ +define("NET_IPV6_LOCAL_SITE", 43); + +/** + * Address Type: Address range to embedded IPv4 ip in an IPv6 address (RFC 4291, Section 2.5.5) + * @see getAddressType() + */ +define("NET_IPV6_IPV4MAPPING", 51); + +/** + * Address Type: Unspecified (RFC 4291, Section 2.5.2) + * @see getAddressType() + */ +define("NET_IPV6_UNSPECIFIED", 52); + +/** + * Address Type: Unspecified (RFC 4291, Section 2.5.3) + * @see getAddressType() + */ +define("NET_IPV6_LOOPBACK", 53); + +/** + * Address Type: address can not assigned to a specific type + * @see getAddressType() + */ +define("NET_IPV6_UNKNOWN_TYPE", 1001); + +// }}} +// {{{ Net_IPv6 + +/** + * Class to validate and to work with IPv6 addresses. + * + * @category Net + * @package Net_IPv6 + * @author Alexander Merz + * @author + * @author Josh Peck + * @copyright 2003-2010 The PHP Group + * @license BSD License http://www.opensource.org/licenses/bsd-license.php + * @version Release: 1.1.0RC5 + * @link http://pear.php.net/package/Net_IPv6 + */ +class Net_IPv6 +{ + + // {{{ separate() + /** + * Separates an IPv6 address into the address and a prefix length part + * + * @param String $ip the (compressed) IP as Hex representation + * + * @return Array the first element is the IP, the second the prefix length + * @since 1.2.0 + * @access public + * @static + */ + function separate($ip) + { + + $addr = $ip; + $spec = ''; + + if(false === strrpos($ip, '/')) { + + return array($addr, $spec); + + } + + $elements = explode('/', $ip); + + if(2 == count($elements)) { + + $addr = $elements[0]; + $spec = $elements[1]; + + } + + return array($addr, $spec); + + } + // }}} + + // {{{ removeNetmaskSpec() + + /** + * Removes a possible existing prefix length/ netmask specification at an IP address. + * + * @param String $ip the (compressed) IP as Hex representation + * + * @return String the IP without netmask length + * @since 1.1.0 + * @access public + * @static + */ + function removeNetmaskSpec($ip) + { + + $elements = Net_IPv6::separate($ip); + + return $elements[0]; + + } + // }}} + // {{{ removePrefixLength() + + /** + * Tests for a prefix length specification in the address + * and removes the prefix length, if exists + * + * The method is technically identical to removeNetmaskSpec() and + * will be dropped in a future release. + * + * @param String $ip a valid ipv6 address + * + * @return String the address without a prefix length + * @access public + * @static + * @see removeNetmaskSpec() + * @deprecated + */ + function removePrefixLength($ip) + { + $pos = strrpos($ip, '/'); + + if (false !== $pos) { + + return substr($ip, 0, $pos); + + } + + return $ip; + } + + // }}} + // {{{ getNetmaskSpec() + + /** + * Returns a possible existing prefix length/netmask specification on an IP address. + * + * @param String $ip the (compressed) IP as Hex representation + * + * @return String the netmask spec + * @since 1.1.0 + * @access public + * @static + */ + function getNetmaskSpec($ip) + { + + $elements = Net_IPv6::separate($ip); + + return $elements[1]; + + } + + // }}} + // {{{ getPrefixLength() + + /** + * Tests for a prefix length specification in the address + * and returns the prefix length, if exists + * + * The method is technically identical to getNetmaskSpec() and + * will be dropped in a future release. + * + * @param String $ip a valid ipv6 address + * + * @return Mixed the prefix as String or false, if no prefix was found + * @access public + * @static + * @deprecated + */ + function getPrefixLength($ip) + { + if (preg_match("/^([0-9a-fA-F:]{2,39})\/(\d{1,3})*$/", + $ip, $matches)) { + + return $matches[2]; + + } else { + + return false; + + } + + } + + // }}} + // {{{ getNetmask() + + /** + * Calculates the network prefix based on the netmask bits. + * + * @param String $ip the (compressed) IP in Hex format + * @param int $bits if the number of netmask bits is not part of the IP + * you must provide the number of bits + * + * @return String the network prefix + * @since 1.1.0 + * @access public + * @static + */ + function getNetmask($ip, $bits = null) + { + if (null==$bits) { + + $elements = explode('/', $ip); + + if (2 == count($elements)) { + + $addr = $elements[0]; + $bits = $elements[1]; + + } else { + + include_once 'PEAR.inc'; + + return PEAR::raiseError(NET_IPV6_NO_NETMASK_MSG, + NET_IPV6_NO_NETMASK); + } + + } else { + + $addr = $ip; + + } + + $addr = Net_IPv6::uncompress($addr); + $binNetmask = str_repeat('1', $bits).str_repeat('0', 128 - $bits); + + return Net_IPv6::_bin2Ip(Net_IPv6::_ip2Bin($addr) & $binNetmask); + } + + // }}} + // {{{ isInNetmask() + + /** + * Checks if an (compressed) IP is in a specific address space. + * + * If the IP does not contain the number of netmask bits (F8000::FFFF/16) + * then you have to use the $bits parameter. + * + * @param String $ip the IP to check (eg. F800::FFFF) + * @param String $netmask the netmask (eg F800::) + * @param int $bits the number of netmask bits to compare, + * if not given in $ip + * + * @return boolean true if $ip is in the netmask + * @since 1.1.0 + * @access public + * @static + */ + function isInNetmask($ip, $netmask, $bits=null) + { + // try to get the bit count + + if (null == $bits) { + + $elements = explode('/', $ip); + + if (2 == count($elements)) { + + $ip = $elements[0]; + $bits = $elements[1]; + + } else if (null == $bits) { + + $elements = explode('/', $netmask); + + if (2 == count($elements)) { + + $netmask = $elements[0]; + $bits = $elements[1]; + + } + + if (null == $bits) { + + include_once 'PEAR.inc'; + return PEAR::raiseError(NET_IPV6_NO_NETMASK_MSG, + NET_IPV6_NO_NETMASK); + + } + + } + + } + + $binIp = Net_IPv6::_ip2Bin(Net_IPv6::removeNetmaskSpec($ip)); + $binNetmask = Net_IPv6::_ip2Bin(Net_IPv6::removeNetmaskSpec($netmask)); + + if (null != $bits + && "" != $bits + && 0 == strncmp($binNetmask, $binIp, $bits)) { + + return true; + + } + + return false; + } + + // }}} + // {{{ getAddressType() + + /** + * Returns the type of an IPv6 address. + * + * RFC 2373, Section 2.3 describes several types of addresses in + * the IPv6 address space. + * Several address types are markers for reserved spaces and as + * a consequence are subject to change. + * + * @param String $ip the IP address in Hex format, + * compressed IPs are allowed + * + * @return int one of the address type constants + * @access public + * @since 1.1.0 + * @static + * + * @see NET_IPV6_UNASSIGNED + * @see NET_IPV6_RESERVED + * @see NET_IPV6_RESERVED_NSAP + * @see NET_IPV6_RESERVED_IPX + * @see NET_IPV6_RESERVED_UNICAST_GEOGRAPHIC + * @see NET_IPV6_UNICAST_PROVIDER + * @see NET_IPV6_MULTICAST + * @see NET_IPV6_LOCAL_LINK + * @see NET_IPV6_LOCAL_SITE + * @see NET_IPV6_IPV4MAPPING + * @see NET_IPV6_UNSPECIFIED + * @see NET_IPV6_LOOPBACK + * @see NET_IPV6_UNKNOWN_TYPE + */ + function getAddressType($ip) + { + $ip = Net_IPv6::removeNetmaskSpec($ip); + $binip = Net_IPv6::_ip2Bin($ip); + + if(0 == strncmp(str_repeat('0', 128), $binip, 128)) { // ::/128 + + return NET_IPV6_UNSPECIFIED; + + } else if(0 == strncmp(str_repeat('0', 127).'1', $binip, 128)) { // ::/128 + + return NET_IPV6_LOOPBACK; + + } else if (0 == strncmp(str_repeat('0', 80).str_repeat('1', 16), $binip, 96)) { // ::ffff/96 + + return NET_IPV6_IPV4MAPPING; + + } else if (0 == strncmp('1111111010', $binip, 10)) { + + return NET_IPV6_LOCAL_LINK; + + } else if (0 == strncmp('1111111011', $binip, 10)) { + + return NET_IPV6_LOCAL_SITE; + + } else if (0 == strncmp('111111100', $binip, 9)) { + + return NET_IPV6_UNASSIGNED; + + } else if (0 == strncmp('11111111', $binip, 8)) { + + return NET_IPV6_MULTICAST; + + } else if (0 == strncmp('00000000', $binip, 8)) { + + return NET_IPV6_RESERVED; + + } else if (0 == strncmp('00000001', $binip, 8) + || 0 == strncmp('1111110', $binip, 7)) { + + return NET_IPV6_UNASSIGNED; + + } else if (0 == strncmp('0000001', $binip, 7)) { + + return NET_IPV6_RESERVED_NSAP; + + } else if (0 == strncmp('0000010', $binip, 7)) { + + return NET_IPV6_RESERVED_IPX; + + } else if (0 == strncmp('0000011', $binip, 7) || + 0 == strncmp('111110', $binip, 6) || + 0 == strncmp('11110', $binip, 5) || + 0 == strncmp('00001', $binip, 5) || + 0 == strncmp('1110', $binip, 4) || + 0 == strncmp('0001', $binip, 4) || + 0 == strncmp('001', $binip, 3) || + 0 == strncmp('011', $binip, 3) || + 0 == strncmp('101', $binip, 3) || + 0 == strncmp('110', $binip, 3)) { + + return NET_IPV6_UNASSIGNED; + + } else if (0 == strncmp('010', $binip, 3)) { + + return NET_IPV6_UNICAST_PROVIDER; + + } else if (0 == strncmp('100', $binip, 3)) { + + return NET_IPV6_RESERVED_UNICAST_GEOGRAPHIC; + + } + + return NET_IPV6_UNKNOWN_TYPE; + } + + // }}} + // {{{ Uncompress() + + /** + * Uncompresses an IPv6 address + * + * RFC 2373 allows you to compress zeros in an address to '::'. This + * function expects a valid IPv6 address and expands the '::' to + * the required zeros. + * + * Example: FF01::101 -> FF01:0:0:0:0:0:0:101 + * ::1 -> 0:0:0:0:0:0:0:1 + * + * Note: You can also pass an invalid IPv6 address (usually as part of the process + * of validation by checkIPv6, which will validate the return string). + * This function will insert the "0" between "::" even if this results in too many + * numbers in total. It is NOT the purpose of this function to validate your input. + * + * Example of calling with invalid input: 1::2:3:4:5:6:7:8:9 -> 1:0:2:3:4:5:6:7:8:9 + * + * @param String $ip a (possibly) valid IPv6-address (hex format) + * @param Boolean $leadingZeros if true, leading zeros are added to each + * block of the address + * (FF01::101 -> + * FF01:0000:0000:0000:0000:0000:0000:0101) + * + * @return String the uncompressed IPv6-address (hex format) + * @access public + * @see Compress() + * @static + * @author Pascal Uhlmann + */ + function uncompress($ip, $leadingZeros = false) + { + + $prefix = Net_IPv6::getPrefixLength($ip); + + if (false === $prefix) { + + $prefix = ''; + + } else { + + $ip = Net_IPv6::removePrefixLength($ip); + $prefix = '/'.$prefix; + + } + + $netmask = Net_IPv6::getNetmaskSpec($ip); + $uip = Net_IPv6::removeNetmaskSpec($ip); + + $c1 = -1; + $c2 = -1; + + if (false !== strpos($uip, '::') ) { + + list($ip1, $ip2) = explode('::', $uip); + + if ("" == $ip1) { + + $c1 = -1; + + } else { + + $pos = 0; + + if (0 < ($pos = substr_count($ip1, ':'))) { + + $c1 = $pos; + + } else { + + $c1 = 0; + + } + } + if ("" == $ip2) { + + $c2 = -1; + + } else { + + $pos = 0; + + if (0 < ($pos = substr_count($ip2, ':'))) { + + $c2 = $pos; + + } else { + + $c2 = 0; + + } + + } + + if (strstr($ip2, '.')) { + + $c2++; + + } + if (-1 == $c1 && -1 == $c2) { // :: + + $uip = "0:0:0:0:0:0:0:0"; + + } else if (-1 == $c1) { // ::xxx + + $fill = str_repeat('0:', 7-$c2); + $uip = str_replace('::', $fill, $uip); + + } else if (-1 == $c2) { // xxx:: + + $fill = str_repeat(':0', 7-$c1); + $uip = str_replace('::', $fill, $uip); + + } else { // xxx::xxx + + $fill = str_repeat(':0:', max(1, 6-$c2-$c1)); + $uip = str_replace('::', $fill, $uip); + $uip = str_replace('::', ':', $uip); + + } + } + + if(true == $leadingZeros) { + + $uipT = array(); + $uiparts = explode(':', $uip); + + foreach($uiparts as $p) { + + $uipT[] = sprintf('%04s', $p); + + } + + $uip = implode(':', $uipT); + } + + if ('' != $netmask) { + + $uip = $uip.'/'.$netmask; + + } + + return $uip.$prefix; + } + + // }}} + // {{{ Compress() + + /** + * Compresses an IPv6 address + * + * RFC 2373 allows you to compress zeros in an address to '::'. This + * function expects a valid IPv6 address and compresses successive zeros + * to '::' + * + * Example: FF01:0:0:0:0:0:0:101 -> FF01::101 + * 0:0:0:0:0:0:0:1 -> ::1 + * + * When $ip is an already compressed address and $force is false, the method returns + * the value as is, even if the address can be compressed further. + * + * Example: FF01::0:1 -> FF01::0:1 + * + * To enforce maximum compression, you can set the second argument $force to true. + * + * Example: FF01::0:1 -> FF01::1 + * + * @param String $ip a valid IPv6-address (hex format) + * @param boolean $force if true the address will be compressed as best as possible (since 1.2.0) + * + * @return String the compressed IPv6-address (hex format) + * @access public + * @see Uncompress() + * @static + * @author elfrink at introweb dot nl + */ + function compress($ip, $force = false) + { + + if(false !== strpos($ip, '::')) { // its already compressed + + if(true == $force) { + + $ip = Net_IPv6::uncompress($ip); + + } else { + + return $ip; + + } + + } + + $prefix = Net_IPv6::getPrefixLength($ip); + + if (false === $prefix) { + + $prefix = ''; + + } else { + + $ip = Net_IPv6::removePrefixLength($ip); + $prefix = '/'.$prefix; + + } + + $netmask = Net_IPv6::getNetmaskSpec($ip); + $ip = Net_IPv6::removeNetmaskSpec($ip); + + $ipp = explode(':', $ip); + + for ($i = 0; $i < count($ipp); $i++) { + + $ipp[$i] = dechex(hexdec($ipp[$i])); + + } + + $cip = ':' . join(':', $ipp) . ':'; + + preg_match_all("/(:0)(:0)+/", $cip, $zeros); + + if (count($zeros[0]) > 0) { + + $match = ''; + + foreach ($zeros[0] as $zero) { + + if (strlen($zero) > strlen($match)) { + + $match = $zero; + + } + } + + $cip = preg_replace('/' . $match . '/', ':', $cip, 1); + + } + + $cip = preg_replace('/((^:)|(:$))/', '', $cip); + $cip = preg_replace('/((^:)|(:$))/', '::', $cip); + + if ('' != $netmask) { + + $cip = $cip.'/'.$netmask; + + } + + return $cip.$prefix; + + } + + // }}} + // {{{ recommendedFormat() + /** + * Represent IPv6 address in RFC5952 format. + * + * @param String $ip a valid IPv6-address (hex format) + * + * @return String the recommended representation of IPv6-address (hex format) + * @access public + * @see compress() + * @static + * @author koyama at hoge dot org + * @todo This method may become a part of compress() in a further releases + */ + function recommendedFormat($ip) + { + $compressed = self::compress($ip, true); + // RFC5952 4.2.2 + // The symbol "::" MUST NOT be used to shorten just one + // 16-bit 0 field. + if ((substr_count($compressed, ':') == 7) && + (strpos($compressed, '::') !== false)) { + $compressed = str_replace('::', ':0:', $compressed); + } + return $compressed; + } + // }}} + + // {{{ isCompressible() + + /** + * Checks, if an IPv6 address can be compressed + * + * @param String $ip a valid IPv6 address + * + * @return Boolean true, if address can be compressed + * + * @access public + * @since 1.2.0b + * @static + * @author Manuel Schmitt + */ + function isCompressible($ip) + { + + return (bool)($ip != Net_IPv6::compress($address)); + + } + + // }}} + // {{{ SplitV64() + + /** + * Splits an IPv6 address into the IPv6 and a possible IPv4 part + * + * RFC 2373 allows you to note the last two parts of an IPv6 address as + * an IPv4 compatible address + * + * Example: 0:0:0:0:0:0:13.1.68.3 + * 0:0:0:0:0:FFFF:129.144.52.38 + * + * @param String $ip a valid IPv6-address (hex format) + * @param Boolean $uncompress if true, the address will be uncompressed + * before processing + * + * @return Array [0] contains the IPv6 part, + * [1] the IPv4 part (hex format) + * @access public + * @static + */ + function SplitV64($ip, $uncompress = true) + { + $ip = Net_IPv6::removeNetmaskSpec($ip); + + if ($uncompress) { + + $ip = Net_IPv6::Uncompress($ip); + + } + + if (strstr($ip, '.')) { + + $pos = strrpos($ip, ':'); + $ip{$pos} = '_'; + $ipPart = explode('_', $ip); + + return $ipPart; + + } else { + + return array($ip, ""); + + } + } + + // }}} + // {{{ checkIPv6() + + /** + * Checks an IPv6 address + * + * Checks if the given IP is IPv6-compatible + * + * @param String $ip a valid IPv6-address + * + * @return Boolean true if $ip is an IPv6 address + * @access public + * @static + */ + function checkIPv6($ip) + { + + $elements = Net_IPv6::separate($ip); + + $ip = $elements[0]; + + if('' != $elements[1] && ( !is_numeric($elements[1]) || 0 > $elements[1] || 128 < $elements[1])) { + + return false; + + } + + $ipPart = Net_IPv6::SplitV64($ip); + $count = 0; + + if (!empty($ipPart[0])) { + $ipv6 = explode(':', $ipPart[0]); + + foreach($ipv6 as $element) { // made a validate precheck + if(!preg_match('/[0-9a-fA-F]*/', $element)) { + return false; + } + } + + for ($i = 0; $i < count($ipv6); $i++) { + + if(4 < strlen($ipv6[$i])) { + + return false; + + } + + $dec = hexdec($ipv6[$i]); + $hex = strtoupper(preg_replace("/^[0]{1,3}(.*[0-9a-fA-F])$/", + "\\1", + $ipv6[$i])); + + if ($ipv6[$i] >= 0 && $dec <= 65535 + && $hex == strtoupper(dechex($dec))) { + + $count++; + + } + + } + + if (8 == $count) { + + return true; + + } else if (6 == $count and !empty($ipPart[1])) { + + $ipv4 = explode('.', $ipPart[1]); + $count = 0; + + for ($i = 0; $i < count($ipv4); $i++) { + + if ($ipv4[$i] >= 0 && (integer)$ipv4[$i] <= 255 + && preg_match("/^\d{1,3}$/", $ipv4[$i])) { + + $count++; + + } + + } + + if (4 == $count) { + + return true; + + } + + } else { + + return false; + + } + + } else { + + return false; + + } + + } + + // }}} + + // {{{ _parseAddress() + + /** + * Returns the lowest and highest IPv6 address + * for a given IP and netmask specification + * + * The netmask may be a part of the $ip or + * the number of netmask bits is provided via $bits + * + * The result is an indexed array. The key 'start' + * contains the lowest possible IP address. The key + * 'end' the highest address. + * + * @param String $ipToParse the IPv6 address + * @param String $bits the optional count of netmask bits + * + * @return Array ['start', 'end'] the lowest and highest IPv6 address + * @access public + * @static + * @author Nicholas Williams + */ + + function parseAddress($ipToParse, $bits = null) + { + + $ip = null; + $bitmask = null; + + if ( null == $bits ) { + + $elements = explode('/', $ipToParse); + + if ( 2 == count($elements) ) { + + $ip = Net_IPv6::uncompress($elements[0]); + $bitmask = $elements[1]; + + } else { + + include_once 'PEAR.inc'; + + return PEAR::raiseError(NET_IPV6_NO_NETMASK_MSG, + NET_IPV6_NO_NETMASK); + } + } else { + + $ip = Net_IPv6::uncompress($ipToParse); + $bitmask = $bits; + + } + + $binNetmask = str_repeat('1', $bitmask). + str_repeat('0', 128 - $bitmask); + $maxNetmask = str_repeat('1', 128); + $netmask = Net_IPv6::_bin2Ip($binNetmask); + + $startAddress = Net_IPv6::_bin2Ip(Net_IPv6::_ip2Bin($ip) + & $binNetmask); + $endAddress = Net_IPv6::_bin2Ip(Net_IPv6::_ip2Bin($ip) + | ($binNetmask ^ $maxNetmask)); + + return array('start' => $startAddress, 'end' => $endAddress); + } + + // }}} + + // {{{ _ip2Bin() + + /** + * Converts an IPv6 address from Hex into Binary representation. + * + * @param String $ip the IP to convert (a:b:c:d:e:f:g:h), + * compressed IPs are allowed + * + * @return String the binary representation + * @access private + @ @since 1.1.0 + */ + function _ip2Bin($ip) + { + $binstr = ''; + + $ip = Net_IPv6::removeNetmaskSpec($ip); + $ip = Net_IPv6::Uncompress($ip); + + $parts = explode(':', $ip); + + foreach ( $parts as $v ) { + + $str = base_convert($v, 16, 2); + $binstr .= str_pad($str, 16, '0', STR_PAD_LEFT); + + } + + return $binstr; + } + + // }}} + // {{{ _bin2Ip() + + /** + * Converts an IPv6 address from Binary into Hex representation. + * + * @param String $bin the IP address as binary + * + * @return String the uncompressed Hex representation + * @access private + @ @since 1.1.0 + */ + function _bin2Ip($bin) + { + $ip = ""; + + if (strlen($bin) < 128) { + + $bin = str_pad($bin, 128, '0', STR_PAD_LEFT); + + } + + $parts = str_split($bin, "16"); + + foreach ( $parts as $v ) { + + $str = base_convert($v, 2, 16); + $ip .= $str.":"; + + } + + $ip = substr($ip, 0, -1); + + return $ip; + } + + // }}} +} +// }}} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * c-hanging-comment-ender-p: nil + * End: + */ + +?> diff --git a/usr/etc/inc/PEAR.inc b/usr/etc/inc/PEAR.inc new file mode 100644 index 000000000..e7b4731b0 --- /dev/null +++ b/usr/etc/inc/PEAR.inc @@ -0,0 +1,1103 @@ + + * @author Stig Bakken + * @author Tomas V.V.Cox + * @author Greg Beaver + * @copyright 1997-2010 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version CVS: $Id$ + * @link http://pear.php.net/package/PEAR + * @since File available since Release 0.1 + */ + +/**#@+ + * ERROR constants + */ +define('PEAR_ERROR_RETURN', 1); +define('PEAR_ERROR_PRINT', 2); +define('PEAR_ERROR_TRIGGER', 4); +define('PEAR_ERROR_DIE', 8); +define('PEAR_ERROR_CALLBACK', 16); +/** + * WARNING: obsolete + * @deprecated + */ +define('PEAR_ERROR_EXCEPTION', 32); +/**#@-*/ +define('PEAR_ZE2', (function_exists('version_compare') && + version_compare(zend_version(), "2-dev", "ge"))); + +if (substr(PHP_OS, 0, 3) == 'WIN') { + define('OS_WINDOWS', true); + define('OS_UNIX', false); + define('PEAR_OS', 'Windows'); +} else { + define('OS_WINDOWS', false); + define('OS_UNIX', true); + define('PEAR_OS', 'Unix'); // blatant assumption +} + +$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN; +$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE; +$GLOBALS['_PEAR_destructor_object_list'] = array(); +$GLOBALS['_PEAR_shutdown_funcs'] = array(); +$GLOBALS['_PEAR_error_handler_stack'] = array(); + +@ini_set('track_errors', true); + +/** + * Base class for other PEAR classes. Provides rudimentary + * emulation of destructors. + * + * If you want a destructor in your class, inherit PEAR and make a + * destructor method called _yourclassname (same name as the + * constructor, but with a "_" prefix). Also, in your constructor you + * have to call the PEAR constructor: $this->PEAR();. + * The destructor method will be called without parameters. Note that + * at in some SAPI implementations (such as Apache), any output during + * the request shutdown (in which destructors are called) seems to be + * discarded. If you need to get any debug information from your + * destructor, use error_log(), syslog() or something similar. + * + * IMPORTANT! To use the emulated destructors you need to create the + * objects by reference: $obj =& new PEAR_child; + * + * @category pear + * @package PEAR + * @author Stig Bakken + * @author Tomas V.V. Cox + * @author Greg Beaver + * @copyright 1997-2006 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/package/PEAR + * @see PEAR_Error + * @since Class available since PHP 4.0.2 + * @link http://pear.php.net/manual/en/core.pear.php#core.pear.pear + */ +class PEAR +{ + /** + * Whether to enable internal debug messages. + * + * @var bool + * @access private + */ + var $_debug = false; + + /** + * Default error mode for this object. + * + * @var int + * @access private + */ + var $_default_error_mode = null; + + /** + * Default error options used for this object when error mode + * is PEAR_ERROR_TRIGGER. + * + * @var int + * @access private + */ + var $_default_error_options = null; + + /** + * Default error handler (callback) for this object, if error mode is + * PEAR_ERROR_CALLBACK. + * + * @var string + * @access private + */ + var $_default_error_handler = ''; + + /** + * Which class to use for error objects. + * + * @var string + * @access private + */ + var $_error_class = 'PEAR_Error'; + + /** + * An array of expected errors. + * + * @var array + * @access private + */ + var $_expected_errors = array(); + + /** + * Constructor. Registers this object in + * $_PEAR_destructor_object_list for destructor emulation if a + * destructor object exists. + * + * @param string $error_class (optional) which class to use for + * error objects, defaults to PEAR_Error. + * @access public + * @return void + */ + function PEAR($error_class = null) + { + $classname = strtolower(get_class($this)); + if ($this->_debug) { + print "PEAR constructor called, class=$classname\n"; + } + + if ($error_class !== null) { + $this->_error_class = $error_class; + } + + while ($classname && strcasecmp($classname, "pear")) { + $destructor = "_$classname"; + if (method_exists($this, $destructor)) { + global $_PEAR_destructor_object_list; + $_PEAR_destructor_object_list[] = &$this; + if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { + register_shutdown_function("_PEAR_call_destructors"); + $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; + } + break; + } else { + $classname = get_parent_class($classname); + } + } + } + + /** + * Destructor (the emulated type of...). Does nothing right now, + * but is included for forward compatibility, so subclass + * destructors should always call it. + * + * See the note in the class desciption about output from + * destructors. + * + * @access public + * @return void + */ + function _PEAR() { + if ($this->_debug) { + printf("PEAR destructor called, class=%s\n", strtolower(get_class($this))); + } + } + + /** + * If you have a class that's mostly/entirely static, and you need static + * properties, you can use this method to simulate them. Eg. in your method(s) + * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar'); + * You MUST use a reference, or they will not persist! + * + * @access public + * @param string $class The calling classname, to prevent clashes + * @param string $var The variable to retrieve. + * @return mixed A reference to the variable. If not set it will be + * auto initialised to NULL. + */ + function &getStaticProperty($class, $var) + { + static $properties; + if (!isset($properties[$class])) { + $properties[$class] = array(); + } + + if (!array_key_exists($var, $properties[$class])) { + $properties[$class][$var] = null; + } + + return $properties[$class][$var]; + } + + /** + * Use this function to register a shutdown method for static + * classes. + * + * @access public + * @param mixed $func The function name (or array of class/method) to call + * @param mixed $args The arguments to pass to the function + * @return void + */ + function registerShutdownFunc($func, $args = array()) + { + // if we are called statically, there is a potential + // that no shutdown func is registered. Bug #6445 + if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { + register_shutdown_function("_PEAR_call_destructors"); + $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; + } + $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args); + } + + /** + * Tell whether a value is a PEAR error. + * + * @param mixed $data the value to test + * @param int $code if $data is an error object, return true + * only if $code is a string and + * $obj->getMessage() == $code or + * $code is an integer and $obj->getCode() == $code + * @access public + * @return bool true if parameter is an error + */ + function isError($data, $code = null) + { + if (!is_object($data)) { + return false; + } + if (!is_a($data, 'PEAR_Error')) { + return false; + } + + if (is_null($code)) { + return true; + } elseif (is_string($code)) { + return $data->getMessage() == $code; + } + + return $data->getCode() == $code; + } + + /** + * Sets how errors generated by this object should be handled. + * Can be invoked both in objects and statically. If called + * statically, setErrorHandling sets the default behaviour for all + * PEAR objects. If called in an object, setErrorHandling sets + * the default behaviour for that object. + * + * @param int $mode + * One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION. + * + * @param mixed $options + * When $mode is PEAR_ERROR_TRIGGER, this is the error level (one + * of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * + * When $mode is PEAR_ERROR_CALLBACK, this parameter is expected + * to be the callback function or method. A callback + * function is a string with the name of the function, a + * callback method is an array of two elements: the element + * at index 0 is the object, and the element at index 1 is + * the name of the method to call in the object. + * + * When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is + * a printf format string used when printing the error + * message. + * + * @access public + * @return void + * @see PEAR_ERROR_RETURN + * @see PEAR_ERROR_PRINT + * @see PEAR_ERROR_TRIGGER + * @see PEAR_ERROR_DIE + * @see PEAR_ERROR_CALLBACK + * @see PEAR_ERROR_EXCEPTION + * + * @since PHP 4.0.5 + */ + function setErrorHandling($mode = null, $options = null) + { + if (isset($this) && is_a($this, 'PEAR')) { + $setmode = &$this->_default_error_mode; + $setoptions = &$this->_default_error_options; + } else { + $setmode = &$GLOBALS['_PEAR_default_error_mode']; + $setoptions = &$GLOBALS['_PEAR_default_error_options']; + } + + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $setmode = $mode; + $setoptions = $options; + break; + + case PEAR_ERROR_CALLBACK: + $setmode = $mode; + // class/object method callback + if (is_callable($options)) { + $setoptions = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + } + + /** + * This method is used to tell which errors you expect to get. + * Expected errors are always returned with error mode + * PEAR_ERROR_RETURN. Expected error codes are stored in a stack, + * and this method pushes a new element onto it. The list of + * expected errors are in effect until they are popped off the + * stack with the popExpect() method. + * + * Note that this method can not be called statically + * + * @param mixed $code a single error code or an array of error codes to expect + * + * @return int the new depth of the "expected errors" stack + * @access public + */ + function expectError($code = '*') + { + if (is_array($code)) { + array_push($this->_expected_errors, $code); + } else { + array_push($this->_expected_errors, array($code)); + } + return count($this->_expected_errors); + } + + /** + * This method pops one element off the expected error codes + * stack. + * + * @return array the list of error codes that were popped + */ + function popExpect() + { + return array_pop($this->_expected_errors); + } + + /** + * This method checks unsets an error code if available + * + * @param mixed error code + * @return bool true if the error code was unset, false otherwise + * @access private + * @since PHP 4.3.0 + */ + function _checkDelExpect($error_code) + { + $deleted = false; + foreach ($this->_expected_errors as $key => $error_array) { + if (in_array($error_code, $error_array)) { + unset($this->_expected_errors[$key][array_search($error_code, $error_array)]); + $deleted = true; + } + + // clean up empty arrays + if (0 == count($this->_expected_errors[$key])) { + unset($this->_expected_errors[$key]); + } + } + + return $deleted; + } + + /** + * This method deletes all occurences of the specified element from + * the expected error codes stack. + * + * @param mixed $error_code error code that should be deleted + * @return mixed list of error codes that were deleted or error + * @access public + * @since PHP 4.3.0 + */ + function delExpect($error_code) + { + $deleted = false; + if ((is_array($error_code) && (0 != count($error_code)))) { + // $error_code is a non-empty array here; we walk through it trying + // to unset all values + foreach ($error_code as $key => $error) { + $deleted = $this->_checkDelExpect($error) ? true : false; + } + + return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } elseif (!empty($error_code)) { + // $error_code comes alone, trying to unset it + if ($this->_checkDelExpect($error_code)) { + return true; + } + + return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } + + // $error_code is empty + return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME + } + + /** + * This method is a wrapper that returns an instance of the + * configured error class with this object's default error + * handling applied. If the $mode and $options parameters are not + * specified, the object's defaults are used. + * + * @param mixed $message a text error message or a PEAR error object + * + * @param int $code a numeric error code (it is up to your class + * to define these if you want to use codes) + * + * @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION. + * + * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter + * specifies the PHP-internal error level (one of + * E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * If $mode is PEAR_ERROR_CALLBACK, this + * parameter specifies the callback function or + * method. In other error modes this parameter + * is ignored. + * + * @param string $userinfo If you need to pass along for example debug + * information, this parameter is meant for that. + * + * @param string $error_class The returned error object will be + * instantiated from this class, if specified. + * + * @param bool $skipmsg If true, raiseError will only pass error codes, + * the error message parameter will be dropped. + * + * @access public + * @return object a PEAR error object + * @see PEAR::setErrorHandling + * @since PHP 4.0.5 + */ + function &raiseError($message = null, + $code = null, + $mode = null, + $options = null, + $userinfo = null, + $error_class = null, + $skipmsg = false) + { + // The error is yet a PEAR error object + if (is_object($message)) { + $code = $message->getCode(); + $userinfo = $message->getUserInfo(); + $error_class = $message->getType(); + $message->error_message_prefix = ''; + $message = $message->getMessage(); + + // Make sure right data gets passed. + $r = new ReflectionClass($error_class); + $c = $r->getConstructor(); + $p = array_shift($c->getParameters()); + $skipmsg = ($p->getName() != 'message'); + } + + if ( + isset($this) && + isset($this->_expected_errors) && + count($this->_expected_errors) > 0 && + count($exp = end($this->_expected_errors)) + ) { + if ($exp[0] == "*" || + (is_int(reset($exp)) && in_array($code, $exp)) || + (is_string(reset($exp)) && in_array($message, $exp)) + ) { + $mode = PEAR_ERROR_RETURN; + } + } + + // No mode given, try global ones + if ($mode === null) { + // Class error handler + if (isset($this) && isset($this->_default_error_mode)) { + $mode = $this->_default_error_mode; + $options = $this->_default_error_options; + // Global error handler + } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) { + $mode = $GLOBALS['_PEAR_default_error_mode']; + $options = $GLOBALS['_PEAR_default_error_options']; + } + } + + if ($error_class !== null) { + $ec = $error_class; + } elseif (isset($this) && isset($this->_error_class)) { + $ec = $this->_error_class; + } else { + $ec = 'PEAR_Error'; + } + + if (intval(PHP_VERSION) < 5) { + // little non-eval hack to fix bug #12147 + include 'PEAR/FixPHP5PEARWarnings.php'; + return $a; + } + + if ($skipmsg) { + $a = new $ec($code, $mode, $options, $userinfo); + } else { + $a = new $ec($message, $code, $mode, $options, $userinfo); + } + + return $a; + } + + /** + * Simpler form of raiseError with fewer options. In most cases + * message, code and userinfo are enough. + * + * @param mixed $message a text error message or a PEAR error object + * + * @param int $code a numeric error code (it is up to your class + * to define these if you want to use codes) + * + * @param string $userinfo If you need to pass along for example debug + * information, this parameter is meant for that. + * + * @access public + * @return object a PEAR error object + * @see PEAR::raiseError + */ + function &throwError($message = null, $code = null, $userinfo = null) + { + if (isset($this) && is_a($this, 'PEAR')) { + $a = &$this->raiseError($message, $code, null, null, $userinfo); + return $a; + } + + $a = &PEAR::raiseError($message, $code, null, null, $userinfo); + return $a; + } + + function staticPushErrorHandling($mode, $options = null) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + $def_mode = &$GLOBALS['_PEAR_default_error_mode']; + $def_options = &$GLOBALS['_PEAR_default_error_options']; + $stack[] = array($def_mode, $def_options); + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $def_mode = $mode; + $def_options = $options; + break; + + case PEAR_ERROR_CALLBACK: + $def_mode = $mode; + // class/object method callback + if (is_callable($options)) { + $def_options = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + $stack[] = array($mode, $options); + return true; + } + + function staticPopErrorHandling() + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + $setmode = &$GLOBALS['_PEAR_default_error_mode']; + $setoptions = &$GLOBALS['_PEAR_default_error_options']; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $setmode = $mode; + $setoptions = $options; + break; + + case PEAR_ERROR_CALLBACK: + $setmode = $mode; + // class/object method callback + if (is_callable($options)) { + $setoptions = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + return true; + } + + /** + * Push a new error handler on top of the error handler options stack. With this + * you can easily override the actual error handler for some code and restore + * it later with popErrorHandling. + * + * @param mixed $mode (same as setErrorHandling) + * @param mixed $options (same as setErrorHandling) + * + * @return bool Always true + * + * @see PEAR::setErrorHandling + */ + function pushErrorHandling($mode, $options = null) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + if (isset($this) && is_a($this, 'PEAR')) { + $def_mode = &$this->_default_error_mode; + $def_options = &$this->_default_error_options; + } else { + $def_mode = &$GLOBALS['_PEAR_default_error_mode']; + $def_options = &$GLOBALS['_PEAR_default_error_options']; + } + $stack[] = array($def_mode, $def_options); + + if (isset($this) && is_a($this, 'PEAR')) { + $this->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + $stack[] = array($mode, $options); + return true; + } + + /** + * Pop the last error handler used + * + * @return bool Always true + * + * @see PEAR::pushErrorHandling + */ + function popErrorHandling() + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + if (isset($this) && is_a($this, 'PEAR')) { + $this->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + return true; + } + + /** + * OS independant PHP extension load. Remember to take care + * on the correct extension name for case sensitive OSes. + * + * @param string $ext The extension name + * @return bool Success or not on the dl() call + */ + function loadExtension($ext) + { + if (extension_loaded($ext)) { + return true; + } + + // if either returns true dl() will produce a FATAL error, stop that + if ( + function_exists('dl') === false || + ini_get('enable_dl') != 1 || + ini_get('safe_mode') == 1 + ) { + return false; + } + + if (OS_WINDOWS) { + $suffix = '.dll'; + } elseif (PHP_OS == 'HP-UX') { + $suffix = '.sl'; + } elseif (PHP_OS == 'AIX') { + $suffix = '.a'; + } elseif (PHP_OS == 'OSX') { + $suffix = '.bundle'; + } else { + $suffix = '.so'; + } + + return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); + } +} + +if (PEAR_ZE2) { + /** + * This is only meant for PHP 5 to get rid of certain strict warning + * that doesn't get hidden since it's in the shutdown function + */ + class PEAR5 + { + /** + * If you have a class that's mostly/entirely static, and you need static + * properties, you can use this method to simulate them. Eg. in your method(s) + * do this: $myVar = &PEAR5::getStaticProperty('myclass', 'myVar'); + * You MUST use a reference, or they will not persist! + * + * @access public + * @param string $class The calling classname, to prevent clashes + * @param string $var The variable to retrieve. + * @return mixed A reference to the variable. If not set it will be + * auto initialised to NULL. + */ + static function &getStaticProperty($class, $var) + { + static $properties; + if (!isset($properties[$class])) { + $properties[$class] = array(); + } + + if (!array_key_exists($var, $properties[$class])) { + $properties[$class][$var] = null; + } + + return $properties[$class][$var]; + } + } +} + +function _PEAR_call_destructors() +{ + global $_PEAR_destructor_object_list; + if (is_array($_PEAR_destructor_object_list) && + sizeof($_PEAR_destructor_object_list)) + { + reset($_PEAR_destructor_object_list); + if (PEAR_ZE2) { + $destructLifoExists = PEAR5::getStaticProperty('PEAR', 'destructlifo'); + } else { + $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo'); + } + + if ($destructLifoExists) { + $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list); + } + + while (list($k, $objref) = each($_PEAR_destructor_object_list)) { + $classname = get_class($objref); + while ($classname) { + $destructor = "_$classname"; + if (method_exists($objref, $destructor)) { + $objref->$destructor(); + break; + } else { + $classname = get_parent_class($classname); + } + } + } + // Empty the object list to ensure that destructors are + // not called more than once. + $_PEAR_destructor_object_list = array(); + } + + // Now call the shutdown functions + if ( + isset($GLOBALS['_PEAR_shutdown_funcs']) && + is_array($GLOBALS['_PEAR_shutdown_funcs']) && + !empty($GLOBALS['_PEAR_shutdown_funcs']) + ) { + foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) { + call_user_func_array($value[0], $value[1]); + } + } +} + +/** + * Standard PEAR error class for PHP 4 + * + * This class is supserseded by {@link PEAR_Exception} in PHP 5 + * + * @category pear + * @package PEAR + * @author Stig Bakken + * @author Tomas V.V. Cox + * @author Gregory Beaver + * @copyright 1997-2006 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/manual/en/core.pear.pear-error.php + * @see PEAR::raiseError(), PEAR::throwError() + * @since Class available since PHP 4.0.2 + */ +class PEAR_Error +{ + var $error_message_prefix = ''; + var $mode = PEAR_ERROR_RETURN; + var $level = E_USER_NOTICE; + var $code = -1; + var $message = ''; + var $userinfo = ''; + var $backtrace = null; + + /** + * PEAR_Error constructor + * + * @param string $message message + * + * @param int $code (optional) error code + * + * @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN, + * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION + * + * @param mixed $options (optional) error level, _OR_ in the case of + * PEAR_ERROR_CALLBACK, the callback function or object/method + * tuple. + * + * @param string $userinfo (optional) additional user/debug info + * + * @access public + * + */ + function PEAR_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + if ($mode === null) { + $mode = PEAR_ERROR_RETURN; + } + $this->message = $message; + $this->code = $code; + $this->mode = $mode; + $this->userinfo = $userinfo; + + if (PEAR_ZE2) { + $skiptrace = PEAR5::getStaticProperty('PEAR_Error', 'skiptrace'); + } else { + $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace'); + } + + if (!$skiptrace) { + $this->backtrace = debug_backtrace(); + if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) { + unset($this->backtrace[0]['object']); + } + } + + if ($mode & PEAR_ERROR_CALLBACK) { + $this->level = E_USER_NOTICE; + $this->callback = $options; + } else { + if ($options === null) { + $options = E_USER_NOTICE; + } + + $this->level = $options; + $this->callback = null; + } + + if ($this->mode & PEAR_ERROR_PRINT) { + if (is_null($options) || is_int($options)) { + $format = "%s"; + } else { + $format = $options; + } + + printf($format, $this->getMessage()); + } + + if ($this->mode & PEAR_ERROR_TRIGGER) { + trigger_error($this->getMessage(), $this->level); + } + + if ($this->mode & PEAR_ERROR_DIE) { + $msg = $this->getMessage(); + if (is_null($options) || is_int($options)) { + $format = "%s"; + if (substr($msg, -1) != "\n") { + $msg .= "\n"; + } + } else { + $format = $options; + } + die(sprintf($format, $msg)); + } + + if ($this->mode & PEAR_ERROR_CALLBACK && is_callable($this->callback)) { + call_user_func($this->callback, $this); + } + + if ($this->mode & PEAR_ERROR_EXCEPTION) { + trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING); + eval('$e = new Exception($this->message, $this->code);throw($e);'); + } + } + + /** + * Get the error mode from an error object. + * + * @return int error mode + * @access public + */ + function getMode() + { + return $this->mode; + } + + /** + * Get the callback function/method from an error object. + * + * @return mixed callback function or object/method array + * @access public + */ + function getCallback() + { + return $this->callback; + } + + /** + * Get the error message from an error object. + * + * @return string full error message + * @access public + */ + function getMessage() + { + return ($this->error_message_prefix . $this->message); + } + + /** + * Get error code from an error object + * + * @return int error code + * @access public + */ + function getCode() + { + return $this->code; + } + + /** + * Get the name of this error/exception. + * + * @return string error/exception name (type) + * @access public + */ + function getType() + { + return get_class($this); + } + + /** + * Get additional user-supplied information. + * + * @return string user-supplied information + * @access public + */ + function getUserInfo() + { + return $this->userinfo; + } + + /** + * Get additional debug information supplied by the application. + * + * @return string debug information + * @access public + */ + function getDebugInfo() + { + return $this->getUserInfo(); + } + + /** + * Get the call backtrace from where the error was generated. + * Supported with PHP 4.3.0 or newer. + * + * @param int $frame (optional) what frame to fetch + * @return array Backtrace, or NULL if not available. + * @access public + */ + function getBacktrace($frame = null) + { + if (defined('PEAR_IGNORE_BACKTRACE')) { + return null; + } + if ($frame === null) { + return $this->backtrace; + } + return $this->backtrace[$frame]; + } + + function addUserInfo($info) + { + if (empty($this->userinfo)) { + $this->userinfo = $info; + } else { + $this->userinfo .= " ** $info"; + } + } + + function __toString() + { + return $this->getMessage(); + } + + /** + * Make a string representation of this object. + * + * @return string a string with an object summary + * @access public + */ + function toString() + { + $modes = array(); + $levels = array(E_USER_NOTICE => 'notice', + E_USER_WARNING => 'warning', + E_USER_ERROR => 'error'); + if ($this->mode & PEAR_ERROR_CALLBACK) { + if (is_array($this->callback)) { + $callback = (is_object($this->callback[0]) ? + strtolower(get_class($this->callback[0])) : + $this->callback[0]) . '::' . + $this->callback[1]; + } else { + $callback = $this->callback; + } + return sprintf('[%s: message="%s" code=%d mode=callback '. + 'callback=%s prefix="%s" info="%s"]', + strtolower(get_class($this)), $this->message, $this->code, + $callback, $this->error_message_prefix, + $this->userinfo); + } + if ($this->mode & PEAR_ERROR_PRINT) { + $modes[] = 'print'; + } + if ($this->mode & PEAR_ERROR_TRIGGER) { + $modes[] = 'trigger'; + } + if ($this->mode & PEAR_ERROR_DIE) { + $modes[] = 'die'; + } + if ($this->mode & PEAR_ERROR_RETURN) { + $modes[] = 'return'; + } + return sprintf('[%s: message="%s" code=%d mode=%s level=%s '. + 'prefix="%s" info="%s"]', + strtolower(get_class($this)), $this->message, $this->code, + implode("|", $modes), $levels[$this->level], + $this->error_message_prefix, + $this->userinfo); + } +} + +/* + * Local Variables: + * mode: php + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/usr/etc/inc/array_intersect_key.inc b/usr/etc/inc/array_intersect_key.inc new file mode 100644 index 000000000..c1416ad1c --- /dev/null +++ b/usr/etc/inc/array_intersect_key.inc @@ -0,0 +1,67 @@ + | +// +----------------------------------------------------------------------+ +// +// $Id$ + + +/** + * Replace array_intersect_key() + * + * @category PHP + * @package PHP_Compat + * @link http://php.net/function.array_intersect_key + * @author Tom Buskens + * @version $Revision$ + * @since PHP 5.0.2 + * @require PHP 4.0.0 (user_error) + */ +if (!function_exists('array_intersect_key')) { + function array_intersect_key() + { + $args = func_get_args(); + if (count($args) < 2) { + user_error(gettext('Wrong parameter count for array_intersect_key()'), E_USER_WARNING); + return; + } + + // Check arrays + $array_count = count($args); + for ($i = 0; $i !== $array_count; $i++) { + if (!is_array($args[$i])) { + user_error(gettext('array_intersect_key() Argument #') . + ($i + 1) . gettext(' is not an array'), E_USER_WARNING); + return; + } + } + + // Compare entries + $result = array(); + foreach ($args[0] as $key1 => $value1) { + for ($i = 1; $i !== $array_count; $i++) { + foreach ($args[$i] as $key2 => $value2) { + if ((string) $key1 === (string) $key2) { + $result[$key1] = $value1; + } + } + } + } + + return $result; + } +} + +?> diff --git a/usr/etc/inc/auth.inc b/usr/etc/inc/auth.inc new file mode 100644 index 000000000..fb045809a --- /dev/null +++ b/usr/etc/inc/auth.inc @@ -0,0 +1,1474 @@ + + All rights reserved. + + Copyright (C) 2005-2006 Bill Marquette + All rights reserved. + + Copyright (C) 2006 Paul Taylor . + All rights reserved. + + Copyright (C) 2003-2006 Manuel Kasper . + 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. + + DISABLE_PHP_LINT_CHECKING + pfSense_BUILDER_BINARIES: /usr/sbin/pw /bin/cp + pfSense_MODULE: auth +*/ + +/* + * NOTE : Portions of the mschapv2 support was based on the BSD licensed CHAP.php + * file courtesy of Michael Retterklieber. + */ +if(!$do_not_include_config_gui_inc) + require_once("config.gui.inc"); + +// Will be changed to false if security checks fail +$security_passed = true; + +/* If this function doesn't exist, we're being called from Captive Portal or + another internal subsystem which does not include authgui.inc */ +if (function_exists("display_error_form") && !isset($config['system']['webgui']['nodnsrebindcheck'])) { + /* DNS ReBinding attack prevention. https://redmine.pfsense.org/issues/708 */ + $found_host = false; + + /* Either a IPv6 address with or without a alternate port */ + if(strstr($_SERVER['HTTP_HOST'], "]")) { + $http_host_port = explode("]", $_SERVER['HTTP_HOST']); + /* v6 address has more parts, drop the last part */ + if(count($http_host_port) > 1) { + array_pop($http_host_port); + $http_host = str_replace(array("[", "]"), "", implode(":", $http_host_port)); + } else { + $http_host = str_replace(array("[", "]"), "", implode(":", $http_host_port)); + } + } else { + $http_host = explode(":", $_SERVER['HTTP_HOST']); + $http_host = $http_host[0]; + } + if(is_ipaddr($http_host) or $_SERVER['SERVER_ADDR'] == "127.0.0.1" or + strcasecmp($http_host, "localhost") == 0 or $_SERVER['SERVER_ADDR'] == "::1") + $found_host = true; + if(strcasecmp($http_host, $config['system']['hostname'] . "." . $config['system']['domain']) == 0 or + strcasecmp($http_host, $config['system']['hostname']) == 0) + $found_host = true; + + if(is_array($config['dyndnses']['dyndns']) && !$found_host) + foreach($config['dyndnses']['dyndns'] as $dyndns) + if(strcasecmp($dyndns['host'], $http_host) == 0) { + $found_host = true; + break; + } + + if(is_array($config['dnsupdates']['dnsupdate']) && !$found_host) + foreach($config['dnsupdates']['dnsupdate'] as $rfc2136) + if(strcasecmp($rfc2136['host'], $http_host) == 0) { + $found_host = true; + break; + } + + if(!empty($config['system']['webgui']['althostnames']) && !$found_host) { + $althosts = explode(" ", $config['system']['webgui']['althostnames']); + foreach ($althosts as $ah) + if(strcasecmp($ah, $http_host) == 0 or strcasecmp($ah, $_SERVER['SERVER_ADDR']) == 0) { + $found_host = true; + break; + } + } + + if($found_host == false) { + if(!security_checks_disabled()) { + display_error_form("501", gettext("Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/DNS_rebinding
    Try accessing the router by IP address instead of by hostname.")); + exit; + } + $security_passed = false; + } +} + +// If the HTTP_REFERER is something other than ourselves then disallow. +if(function_exists("display_error_form") && !isset($config['system']['webgui']['nohttpreferercheck'])) { + if($_SERVER['HTTP_REFERER']) { + if(file_exists("{$g['tmp_path']}/setupwizard_lastreferrer")) { + if($_SERVER['HTTP_REFERER'] == file_get_contents("{$g['tmp_path']}/setupwizard_lastreferrer")) { + unlink("{$g['tmp_path']}/setupwizard_lastreferrer"); + header("Refresh: 1; url=index.php"); + echo ""; + echo "" . gettext("Redirecting...") . "" . gettext("Redirecting to the dashboard...") . ""; + exit; + } + } + $found_host = false; + $referrer_host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST); + $referrer_host = str_replace(array("[", "]"), "", $referrer_host); + if($referrer_host) { + if(strcasecmp($referrer_host, $config['system']['hostname'] . "." . $config['system']['domain']) == 0 + || strcasecmp($referrer_host, $config['system']['hostname']) == 0) + $found_host = true; + + if(!empty($config['system']['webgui']['althostnames']) && !$found_host) { + $althosts = explode(" ", $config['system']['webgui']['althostnames']); + foreach ($althosts as $ah) { + if(strcasecmp($referrer_host, $ah) == 0) { + $found_host = true; + break; + } + } + } + + if(is_array($config['dyndnses']['dyndns']) && !$found_host) + foreach($config['dyndnses']['dyndns'] as $dyndns) + if(strcasecmp($dyndns['host'], $referrer_host) == 0) { + $found_host = true; + break; + } + + if(is_array($config['dnsupdates']['dnsupdate']) && !$found_host) + foreach($config['dnsupdates']['dnsupdate'] as $rfc2136) + if(strcasecmp($rfc2136['host'], $referrer_host) == 0) { + $found_host = true; + break; + } + + if(!$found_host) { + $interface_list_ips = get_configured_ip_addresses(); + foreach($interface_list_ips as $ilips) { + if(strcasecmp($referrer_host, $ilips) == 0) { + $found_host = true; + break; + } + } + $interface_list_ipv6s = get_configured_ipv6_addresses(); + foreach($interface_list_ipv6s as $ilipv6s) { + if(strcasecmp($referrer_host, $ilipv6s) == 0) { + $found_host = true; + break; + } + } + if($referrer_host == "127.0.0.1" || $referrer_host == "localhost") { + // allow SSH port forwarded connections and links from localhost + $found_host = true; + } + } + } + if($found_host == false) { + if(!security_checks_disabled()) { + display_error_form("501", "An HTTP_REFERER was detected other than what is defined in System -> Advanced (" . htmlspecialchars($_SERVER['HTTP_REFERER']) . "). You can disable this check if needed in System -> Advanced -> Admin."); + exit; + } + $security_passed = false; + } + } else + $security_passed = false; +} + +if (function_exists("display_error_form") && $security_passed) + /* Security checks passed, so it should be OK to turn them back on */ + restore_security_checks(); +unset($security_passed); + +$groupindex = index_groups(); +$userindex = index_users(); + +function index_groups() { + global $g, $debug, $config, $groupindex; + + $groupindex = array(); + + if (is_array($config['system']['group'])) { + $i = 0; + foreach($config['system']['group'] as $groupent) { + $groupindex[$groupent['name']] = $i; + $i++; + } + } + + return ($groupindex); +} + +function index_users() { + global $g, $debug, $config; + + if (is_array($config['system']['user'])) { + $i = 0; + foreach($config['system']['user'] as $userent) { + $userindex[$userent['name']] = $i; + $i++; + } + } + + return ($userindex); +} + +function & getUserEntry($name) { + global $debug, $config, $userindex; + if (isset($userindex[$name])) + return $config['system']['user'][$userindex[$name]]; +} + +function & getUserEntryByUID($uid) { + global $debug, $config; + + if (is_array($config['system']['user'])) + foreach ($config['system']['user'] as & $user) + if ($user['uid'] == $uid) + return $user; + + return false; +} + +function & getGroupEntry($name) { + global $debug, $config, $groupindex; + if (isset($groupindex[$name])) + return $config['system']['group'][$groupindex[$name]]; +} + +function & getGroupEntryByGID($gid) { + global $debug, $config; + + if (is_array($config['system']['group'])) + foreach ($config['system']['group'] as & $group) + if ($group['gid'] == $gid) + return $group; + + return false; +} + +function get_user_privileges(& $user) { + + $privs = $user['priv']; + if (!is_array($privs)) + $privs = array(); + + $names = local_user_get_groups($user, true); + + foreach ($names as $name) { + $group = getGroupEntry($name); + if (is_array($group['priv'])) + $privs = array_merge( $privs, $group['priv']); + } + + return $privs; +} + +function userHasPrivilege($userent, $privid = false) { + + if (!$privid || !is_array($userent)) + return false; + + $privs = get_user_privileges($userent); + + if (!is_array($privs)) + return false; + + if (!in_array($privid, $privs)) + return false; + + return true; +} + +function local_backed($username, $passwd) { + + $user = getUserEntry($username); + if (!$user) + return false; + + if (is_account_disabled($username) || is_account_expired($username)) + return false; + + if ($user['password']) + { + $passwd = crypt($passwd, $user['password']); + if ($passwd == $user['password']) + return true; + } + + if ($user['md5-hash']) + { + $passwd = md5($passwd); + if ($passwd == $user['md5-hash']) + return true; + } + + return false; +} + +function local_sync_accounts() { + global $debug, $config; + conf_mount_rw(); + + /* remove local users to avoid uid conflicts */ + $fd = popen("/usr/sbin/pw usershow -a", "r"); + if ($fd) { + while (!feof($fd)) { + $line = explode(":",fgets($fd)); + if (((!strncmp($line[0], "_", 1)) || ($line[2] < 2000) || ($line[2] > 65000)) && ($line[0] != "admin")) + continue; + /* + * If a crontab was created to user, pw userdel will be interactive and + * can cause issues. Just remove crontab before run it when necessary + */ + unlink_if_exists("/var/cron/tabs/{$line[0]}"); + $cmd = "/usr/sbin/pw userdel -n '{$line[0]}'"; + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + mwexec($cmd); + } + pclose($fd); + } + + /* remove local groups to avoid gid conflicts */ + $gids = array(); + $fd = popen("/usr/sbin/pw groupshow -a", "r"); + if ($fd) { + while (!feof($fd)) { + $line = explode(":",fgets($fd)); + if (!strncmp($line[0], "_", 1)) + continue; + if ($line[2] < 2000) + continue; + if ($line[2] > 65000) + continue; + $cmd = "/usr/sbin/pw groupdel {$line[2]}"; + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + mwexec($cmd); + } + pclose($fd); + } + + /* make sure the all group exists */ + $allgrp = getGroupEntryByGID(1998); + local_group_set($allgrp, true); + + /* sync all local users */ + if (is_array($config['system']['user'])) + foreach ($config['system']['user'] as $user) + local_user_set($user); + + /* sync all local groups */ + if (is_array($config['system']['group'])) + foreach ($config['system']['group'] as $group) + local_group_set($group); + + conf_mount_ro(); + +} + +function local_user_set(& $user) { + global $g, $debug; + + if (empty($user['password'])) { + log_error("There is something wrong in your config because user {$user['name']} password is missing!"); + return; + } + + conf_mount_rw(); + + $home_base = "/home/"; + $user_uid = $user['uid']; + $user_name = $user['name']; + $user_home = "{$home_base}{$user_name}"; + $user_shell = "/etc/rc.initial"; + $user_group = "nobody"; + + // Ensure $home_base exists and is writable + if (!is_dir($home_base)) + mkdir($home_base, 0755); + + $lock_account = false; + /* configure shell type */ + /* Cases here should be ordered by most privileged to least privileged. */ + if (userHasPrivilege($user, "user-shell-access") || userHasPrivilege($user, "page-all")) { + $user_shell = "/bin/tcsh"; + } elseif (userHasPrivilege($user, "user-copy-files")) { + $user_shell = "/usr/local/bin/scponly"; + } elseif (userHasPrivilege($user, "user-ssh-tunnel")) { + $user_shell = "/usr/local/sbin/ssh_tunnel_shell"; + } elseif (userHasPrivilege($user, "user-ipsec-xauth-dialin")) { + $user_shell = "/sbin/nologin"; + } else { + $user_shell = "/sbin/nologin"; + $lock_account = true; + } + + /* Lock out disabled or expired users, unless it's root/admin. */ + if ((is_account_disabled($user_name) || is_account_expired($user_name)) && ($user_uid != 0)) { + $user_shell = "/sbin/nologin"; + $lock_account = true; + } + + /* root user special handling */ + if ($user_uid == 0) { + $cmd = "/usr/sbin/pw usermod -q -n root -s /bin/sh -H 0"; + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + $fd = popen($cmd, "w"); + fwrite($fd, $user['password']); + pclose($fd); + $user_group = "wheel"; + $user_home = "/root"; + $user_shell = "/etc/rc.initial"; + } + + /* read from pw db */ + $fd = popen("/usr/sbin/pw usershow -n {$user_name} 2>&1", "r"); + $pwread = fgets($fd); + pclose($fd); + $userattrs = explode(":", trim($pwread)); + + /* determine add or mod */ + if (($userattrs[0] != $user['name']) || (!strncmp($pwread, "pw:", 3))) { + $user_op = "useradd -m -k /etc/skel -o"; + } else { + $user_op = "usermod"; + } + + $comment = str_replace(array(":", "!", "@"), " ", $user['descr']); + /* add or mod pw db */ + $cmd = "/usr/sbin/pw {$user_op} -q -u {$user_uid} -n {$user_name}". + " -g {$user_group} -s {$user_shell} -d {$user_home}". + " -c ".escapeshellarg($comment)." -H 0 2>&1"; + + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + $fd = popen($cmd, "w"); + fwrite($fd, $user['password']); + pclose($fd); + + /* create user directory if required */ + if (!is_dir($user_home)) { + mkdir($user_home, 0700); + mwexec("/bin/cp /root/.* {$home_base}/", true); + } + @chown($user_home, $user_name); + @chgrp($user_home, $user_group); + + /* write out ssh authorized key file */ + if($user['authorizedkeys']) { + if (!is_dir("{$user_home}/.ssh")) { + @mkdir("{$user_home}/.ssh", 0700); + @chown("{$user_home}/.ssh", $user_name); + } + $keys = base64_decode($user['authorizedkeys']); + @file_put_contents("{$user_home}/.ssh/authorized_keys", $keys); + @chown("{$user_home}/.ssh/authorized_keys", $user_name); + } else + unlink_if_exists("{$user_home}/.ssh/authorized_keys"); + + $un = $lock_account ? "" : "un"; + exec("/usr/sbin/pw {$un}lock {$user_name} -q"); + + conf_mount_ro(); +} + +function local_user_del($user) { + global $debug; + + /* remove all memberships */ + local_user_set_groups($user); + + /* Don't remove /root */ + if ($user['uid'] != 0) + $rmhome = "-r"; + + /* read from pw db */ + $fd = popen("/usr/sbin/pw usershow -n {$user['name']} 2>&1", "r"); + $pwread = fgets($fd); + pclose($fd); + $userattrs = explode(":", trim($pwread)); + + if ($userattrs[0] != $user['name']) { + log_error("Tried to remove user {$user['name']} but got user {$userattrs[0]} instead. Bailing."); + return; + } + + /* delete from pw db */ + $cmd = "/usr/sbin/pw userdel -n {$user['name']} {$rmhome}"; + + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + mwexec($cmd); + + /* Delete user from groups needs a call to write_config() */ + local_group_del_user($user); +} + +function local_user_set_password(& $user, $password) { + + $user['password'] = crypt($password); + $user['md5-hash'] = md5($password); + + // Converts ascii to unicode. + $astr = (string) $password; + $ustr = ''; + for ($i = 0; $i < strlen($astr); $i++) { + $a = ord($astr{$i}) << 8; + $ustr.= sprintf("%X", $a); + } + + // Generate the NT-HASH from the unicode string + $user['nt-hash'] = bin2hex(hash("md4", $ustr)); +} + +function local_user_get_groups($user, $all = false) { + global $debug, $config; + + $groups = array(); + if (!is_array($config['system']['group'])) + return $groups; + + foreach ($config['system']['group'] as $group) + if ( $all || ( !$all && ($group['name'] != "all"))) + if (is_array($group['member'])) + if (in_array($user['uid'], $group['member'])) + $groups[] = $group['name']; + + if ( $all ) + $groups[] = "all"; + + sort($groups); + + return $groups; + +} + +function local_user_set_groups($user, $new_groups = NULL ) { + global $debug, $config, $groupindex; + + if (!is_array($config['system']['group'])) + return; + + $cur_groups = local_user_get_groups($user, true); + $mod_groups = array(); + + if (!is_array($new_groups)) + $new_groups = array(); + + if (!is_array($cur_groups)) + $cur_groups = array(); + + /* determine which memberships to add */ + foreach ($new_groups as $groupname) { + if (in_array($groupname,$cur_groups)) + continue; + $group = & $config['system']['group'][$groupindex[$groupname]]; + $group['member'][] = $user['uid']; + $mod_groups[] = $group; + } + unset($group); + + /* determine which memberships to remove */ + foreach ($cur_groups as $groupname) { + if (in_array($groupname,$new_groups)) + continue; + if (!isset($config['system']['group'][$groupindex[$groupname]])) + continue; + $group = & $config['system']['group'][$groupindex[$groupname]]; + if (is_array($group['member'])) { + $index = array_search($user['uid'], $group['member']); + array_splice($group['member'], $index, 1); + $mod_groups[] = $group; + } + } + unset($group); + + /* sync all modified groups */ + foreach ($mod_groups as $group) + local_group_set($group); +} + +function local_group_del_user($user) { + global $config; + + if (!is_array($config['system']['group'])) + return; + + foreach ($config['system']['group'] as $group) { + if (is_array($group['member'])) { + foreach ($group['member'] as $idx => $uid) { + if ($user['uid'] == $uid) + unset($config['system']['group']['member'][$idx]); + } + } + } +} + +function local_group_set($group, $reset = false) { + global $debug; + + $group_name = $group['name']; + $group_gid = $group['gid']; + $group_members = "''"; + if (!$reset && !empty($group['member']) && count($group['member']) > 0) + $group_members = implode(",",$group['member']); + + /* read from group db */ + $fd = popen("/usr/sbin/pw groupshow {$group_name} 2>&1", "r"); + $pwread = fgets($fd); + pclose($fd); + + /* determine add or mod */ + if (!strncmp($pwread, "pw:", 3)) + $group_op = "groupadd"; + else + $group_op = "groupmod"; + + /* add or mod group db */ + $cmd = "/usr/sbin/pw {$group_op} {$group_name} -g {$group_gid} -M {$group_members} 2>&1"; + + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + mwexec($cmd); + +} + +function local_group_del($group) { + global $debug; + + /* delete from group db */ + $cmd = "/usr/sbin/pw groupdel {$group['name']}"; + + if($debug) + log_error(sprintf(gettext("Running: %s"), $cmd)); + mwexec($cmd); +} + +function ldap_test_connection($authcfg) { + global $debug, $config, $g; + + if ($authcfg) { + if (strstr($authcfg['ldap_urltype'], "Standard")) + $ldapproto = "ldap"; + else + $ldapproto = "ldaps"; + $ldapserver = "{$ldapproto}://" . ldap_format_host($authcfg['host']); + $ldapport = $authcfg['ldap_port']; + if (!empty($ldapport)) + $ldapserver .= ":{$ldapport}"; + $ldapbasedn = $authcfg['ldap_basedn']; + $ldapbindun = $authcfg['ldap_binddn']; + $ldapbindpw = $authcfg['ldap_bindpw']; + } else + return false; + + /* first check if there is even an LDAP server populated */ + if(!$ldapserver) + return false; + + /* Setup CA environment if needed. */ + ldap_setup_caenv($authcfg); + + /* connect and see if server is up */ + $error = false; + if (!($ldap = ldap_connect($ldapserver))) + $error = true; + + if ($error == true) { + log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname)); + return false; + } + + return true; +} + +function ldap_setup_caenv($authcfg) { + global $g; + require_once("certs.inc"); + + unset($caref); + if (empty($authcfg['ldap_caref']) || !strstr($authcfg['ldap_urltype'], "SSL")) { + putenv('LDAPTLS_REQCERT=never'); + return; + } else { + $caref = lookup_ca($authcfg['ldap_caref']); + if (!$caref) { + log_error(sprintf(gettext("LDAP: Could not lookup CA by reference for host %s."), $authcfg['ldap_caref'])); + /* XXX: Prevent for credential leaking since we cannot setup the CA env. Better way? */ + putenv('LDAPTLS_REQCERT=hard'); + return; + } + if (!is_dir("{$g['varrun_path']}/certs")) + @mkdir("{$g['varrun_path']}/certs"); + if (file_exists("{$g['varrun_path']}/certs/{$caref['refid']}.ca")) + @unlink("{$g['varrun_path']}/certs/{$caref['refid']}.ca"); + file_put_contents("{$g['varrun_path']}/certs/{$caref['refid']}.ca", base64_decode($caref['crt'])); + @chmod("{$g['varrun_path']}/certs/{$caref['refid']}.ca", 0600); + putenv('LDAPTLS_REQCERT=hard'); + /* XXX: Probably even the hashed link should be created for this? */ + putenv("LDAPTLS_CACERTDIR={$g['varrun_path']}/certs"); + putenv("LDAPTLS_CACERT={$g['varrun_path']}/certs/{$caref['refid']}.ca"); + } +} + +function ldap_test_bind($authcfg) { + global $debug, $config, $g; + + if ($authcfg) { + if (strstr($authcfg['ldap_urltype'], "Standard")) + $ldapproto = "ldap"; + else + $ldapproto = "ldaps"; + $ldapserver = "{$ldapproto}://" . ldap_format_host($authcfg['host']); + $ldapport = $authcfg['ldap_port']; + if (!empty($ldapport)) + $ldapserver .= ":{$ldapport}"; + $ldapbasedn = $authcfg['ldap_basedn']; + $ldapbindun = $authcfg['ldap_binddn']; + $ldapbindpw = $authcfg['ldap_bindpw']; + $ldapver = $authcfg['ldap_protver']; + if (empty($ldapbndun) || empty($ldapbindpw)) + $ldapanon = true; + else + $ldapanon = false; + } else + return false; + + /* first check if there is even an LDAP server populated */ + if(!$ldapserver) + return false; + + /* Setup CA environment if needed. */ + ldap_setup_caenv($authcfg); + + /* connect and see if server is up */ + $error = false; + if (!($ldap = ldap_connect($ldapserver))) + $error = true; + + if ($error == true) { + log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname)); + return false; + } + + ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); + ldap_set_option($ldap, LDAP_OPT_DEREF, LDAP_DEREF_SEARCHING); + ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, (int)$ldapver); + + $ldapbindun = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindun) : $ldapbindun; + $ldapbindpw = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindpw) : $ldapbindpw; + if ($ldapanon == true) { + if (!($res = @ldap_bind($ldap))) { + @ldap_close($ldap); + return false; + } + } else if (!($res = @ldap_bind($ldap, $ldapbindun, $ldapbindpw))) { + @ldap_close($ldap); + return false; + } + + @ldap_unbind($ldap); + + return true; +} + +function ldap_get_user_ous($show_complete_ou=true, $authcfg) { + global $debug, $config, $g; + + if(!function_exists("ldap_connect")) + return; + + $ous = array(); + + if ($authcfg) { + if (strstr($authcfg['ldap_urltype'], "Standard")) + $ldapproto = "ldap"; + else + $ldapproto = "ldaps"; + $ldapserver = "{$ldapproto}://" . ldap_format_host($authcfg['host']); + $ldapport = $authcfg['ldap_port']; + if (!empty($ldapport)) + $ldapserver .= ":{$ldapport}"; + $ldapbasedn = $authcfg['ldap_basedn']; + $ldapbindun = $authcfg['ldap_binddn']; + $ldapbindpw = $authcfg['ldap_bindpw']; + $ldapver = $authcfg['ldap_protver']; + if (empty($ldapbindun) || empty($ldapbindpw)) + $ldapanon = true; + else + $ldapanon = false; + $ldapname = $authcfg['name']; + $ldapfallback = false; + $ldapscope = $authcfg['ldap_scope']; + } else + return false; + + /* first check if there is even an LDAP server populated */ + if(!$ldapserver) { + log_error(gettext("ERROR! ldap_get_user_ous() backed selected with no LDAP authentication server defined.")); + return $ous; + } + + /* Setup CA environment if needed. */ + ldap_setup_caenv($authcfg); + + /* connect and see if server is up */ + $error = false; + if (!($ldap = ldap_connect($ldapserver))) + $error = true; + + if ($error == true) { + log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname)); + return $ous; + } + + $ldapfilter = "(|(ou=*)(cn=Users))"; + + ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); + ldap_set_option($ldap, LDAP_OPT_DEREF, LDAP_DEREF_SEARCHING); + ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, (int)$ldapver); + + $ldapbindun = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindun) : $ldapbindun; + $ldapbindpw = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindpw) : $ldapbindpw; + if ($ldapanon == true) { + if (!($res = @ldap_bind($ldap))) { + log_error(sprintf(gettext("ERROR! ldap_get_user_ous() could not bind anonymously to server %s."), $ldapname)); + @ldap_close($ldap); + return $ous; + } + } else if (!($res = @ldap_bind($ldap, $ldapbindun, $ldapbindpw))) { + log_error(sprintf(gettext("ERROR! ldap_get_user_ous() could not bind to server %s."), $ldapname)); + @ldap_close($ldap); + return $ous; + } + + if ($ldapscope == "one") + $ldapfunc = "ldap_list"; + else + $ldapfunc = "ldap_search"; + + $search = @$ldapfunc($ldap, $ldapbasedn, $ldapfilter); + $info = @ldap_get_entries($ldap, $search); + + if (is_array($info)) { + foreach ($info as $inf) { + if (!$show_complete_ou) { + $inf_split = explode(",", $inf['dn']); + $ou = $inf_split[0]; + $ou = str_replace("OU=","", $ou); + $ou = str_replace("CN=","", $ou); + } else + if($inf['dn']) + $ou = $inf['dn']; + if($ou) + $ous[] = $ou; + } + } + + @ldap_unbind($ldap); + + return $ous; +} + +function ldap_get_groups($username, $authcfg) { + global $debug, $config; + + if(!function_exists("ldap_connect")) + return; + + if(!$username) + return false; + + if(!isset($authcfg['ldap_nostrip_at']) && stristr($username, "@")) { + $username_split = explode("@", $username); + $username = $username_split[0]; + } + + if(stristr($username, "\\")) { + $username_split = explode("\\", $username); + $username = $username_split[0]; + } + + //log_error("Getting LDAP groups for {$username}."); + if ($authcfg) { + if (strstr($authcfg['ldap_urltype'], "Standard")) + $ldapproto = "ldap"; + else + $ldapproto = "ldaps"; + $ldapserver = "{$ldapproto}://" . ldap_format_host($authcfg['host']); + $ldapport = $authcfg['ldap_port']; + if (!empty($ldapport)) + $ldapserver .= ":{$ldapport}"; + $ldapbasedn = $authcfg['ldap_basedn']; + $ldapbindun = $authcfg['ldap_binddn']; + $ldapbindpw = $authcfg['ldap_bindpw']; + $ldapauthcont = $authcfg['ldap_authcn']; + $ldapnameattribute = strtolower($authcfg['ldap_attr_user']); + $ldapgroupattribute = strtolower($authcfg['ldap_attr_member']); + $ldapfilter = "({$ldapnameattribute}={$username})"; + $ldaptype = ""; + $ldapver = $authcfg['ldap_protver']; + if (empty($ldapbindun) || empty($ldapbindpw)) + $ldapanon = true; + else + $ldapanon = false; + $ldapname = $authcfg['name']; + $ldapfallback = false; + $ldapscope = $authcfg['ldap_scope']; + } else + return false; + + $ldapdn = $_SESSION['ldapdn']; + + /*Convert attribute to lowercase. php ldap arrays put everything in lowercase */ + $ldapgroupattribute = strtolower($ldapgroupattribute); + $memberof = array(); + + /* Setup CA environment if needed. */ + ldap_setup_caenv($authcfg); + + /* connect and see if server is up */ + $error = false; + if (!($ldap = ldap_connect($ldapserver))) + $error = true; + + if ($error == true) { + log_error(sprintf(gettext("ERROR! ldap_get_groups() Could not connect to server %s."), $ldapname)); + return memberof; + } + + ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); + ldap_set_option($ldap, LDAP_OPT_DEREF, LDAP_DEREF_SEARCHING); + ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, (int)$ldapver); + + /* bind as user that has rights to read group attributes */ + $ldapbindun = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindun) : $ldapbindun; + $ldapbindpw = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindpw) : $ldapbindpw; + if ($ldapanon == true) { + if (!($res = @ldap_bind($ldap))) { + log_error(sprintf(gettext("ERROR! ldap_get_groups() could not bind anonymously to server %s."), $ldapname)); + @ldap_close($ldap); + return false; + } + } else if (!($res = @ldap_bind($ldap, $ldapbindun, $ldapbindpw))) { + log_error(sprintf(gettext("ERROR! ldap_get_groups() could not bind to server %s."), $ldapname)); + @ldap_close($ldap); + return memberof; + } + + /* get groups from DN found */ + /* use ldap_read instead of search so we don't have to do a bunch of extra work */ + /* since we know the DN is in $_SESSION['ldapdn'] */ + //$search = ldap_read($ldap, $ldapdn, "(objectclass=*)", array($ldapgroupattribute)); + if ($ldapscope == "one") + $ldapfunc = "ldap_list"; + else + $ldapfunc = "ldap_search"; + + $search = @$ldapfunc($ldap, $ldapdn, $ldapfilter, array($ldapgroupattribute)); + $info = @ldap_get_entries($ldap, $search); + + $countem = $info["count"]; + + if(is_array($info[0][$ldapgroupattribute])) { + /* Iterate through the groups and throw them into an array */ + foreach ($info[0][$ldapgroupattribute] as $member) { + if (stristr($member, "CN=") !== false) { + $membersplit = explode(",", $member); + $memberof[] = preg_replace("/CN=/i", "", $membersplit[0]); + } + } + } + + /* Time to close LDAP connection */ + @ldap_unbind($ldap); + + $groups = print_r($memberof,true); + + //log_error("Returning groups ".$groups." for user $username"); + + return $memberof; +} + +function ldap_format_host($host) { + return is_ipaddrv6($host) ? "[$host]" : $host ; +} + +function ldap_backed($username, $passwd, $authcfg) { + global $debug, $config; + + if(!$username) + return; + + if(!function_exists("ldap_connect")) + return; + + if(!isset($authcfg['ldap_nostrip_at']) && stristr($username, "@")) { + $username_split = explode("@", $username); + $username = $username_split[0]; + } + if(stristr($username, "\\")) { + $username_split = explode("\\", $username); + $username = $username_split[0]; + } + + if ($authcfg) { + if (strstr($authcfg['ldap_urltype'], "Standard")) + $ldapproto = "ldap"; + else + $ldapproto = "ldaps"; + $ldapserver = "{$ldapproto}://" . ldap_format_host($authcfg['host']); + $ldapport = $authcfg['ldap_port']; + if (!empty($ldapport)) + $ldapserver .= ":{$ldapport}"; + $ldapbasedn = $authcfg['ldap_basedn']; + $ldapbindun = $authcfg['ldap_binddn']; + $ldapbindpw = $authcfg['ldap_bindpw']; + if (empty($ldapbindun) || empty($ldapbindpw)) + $ldapanon = true; + else + $ldapanon = false; + $ldapauthcont = $authcfg['ldap_authcn']; + $ldapnameattribute = strtolower($authcfg['ldap_attr_user']); + $ldapextendedqueryenabled = $authcfg['ldap_extended_enabled']; + $ldapextendedquery = $authcfg['ldap_extended_query']; + $ldapfilter = ""; + if(!$ldapextendedqueryenabled) + { + $ldapfilter = "({$ldapnameattribute}={$username})"; + } + else + { + $ldapfilter = +"(&({$ldapnameattribute}={$username})({$ldapextendedquery}))"; + } + $ldaptype = ""; + $ldapver = $authcfg['ldap_protver']; + $ldapname = $authcfg['name']; + $ldapscope = $authcfg['ldap_scope']; + } else + return false; + + /* first check if there is even an LDAP server populated */ + if(!$ldapserver) { + if ($ldapfallback) { + log_error(gettext("ERROR! ldap_backed() called with no LDAP authentication server defined. Defaulting to local user database. Visit System -> User Manager.")); + return local_backed($username, $passwd); + } else + log_error(gettext("ERROR! ldap_backed() called with no LDAP authentication server defined.")); + + return false; + } + + /* Setup CA environment if needed. */ + ldap_setup_caenv($authcfg); + + ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); + ldap_set_option($ldap, LDAP_OPT_DEREF, LDAP_DEREF_SEARCHING); + ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, (int)$ldapver); + + /* Make sure we can connect to LDAP */ + $error = false; + if (!($ldap = ldap_connect($ldapserver))) + $error = true; + + if ($error == true) { + log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname)); + return false; + } + + /* ok, its up. now, lets bind as the bind user so we can search it */ + $error = false; + $ldapbindun = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindun) : $ldapbindun; + $ldapbindpw = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapbindpw) : $ldapbindpw; + if ($ldapanon == true) { + if (!($res = @ldap_bind($ldap))) + $error = true; + } else if (!($res = @ldap_bind($ldap, $ldapbindun, $ldapbindpw))) + $error = true; + + if ($error == true) { + @ldap_close($ldap); + log_error(sprintf(gettext("ERROR! Could not bind to server %s."), $ldapname)); + return false; + } + + /* Get LDAP Authcontainers and split em up. */ + $ldac_splits = explode(";", $ldapauthcont); + + /* setup the usercount so we think we havn't found anyone yet */ + $usercount = 0; + + /*****************************************************************/ + /* We First find the user based on username and filter */ + /* Then, once we find the first occurance of that person */ + /* We set seesion variables to ponit to the OU and DN of the */ + /* Person. To later be used by ldap_get_groups. */ + /* that way we don't have to search twice. */ + /*****************************************************************/ + if ($debug) + log_auth(sprintf(gettext("Now Searching for %s in directory."), $username)); + /* Iterate through the user containers for search */ + foreach ($ldac_splits as $i => $ldac_split) { + $ldac_split = isset($authcfg['ldap_utf8']) ? utf8_encode($ldac_split) : $ldac_split; + $ldapfilter = isset($authcfg['ldap_utf8']) ? utf8_encode($ldapfilter) : $ldapfilter; + $ldapsearchbasedn = isset($authcfg['ldap_utf8']) ? utf8_encode("{$ldac_split},{$ldapbasedn}") : "{$ldac_split},{$ldapbasedn}"; + /* Make sure we just use the first user we find */ + if ($debug) + log_auth(sprintf(gettext('Now Searching in server %1$s, container %2$s with filter %3$s.'), $ldapname, utf8_decode($ldac_split), utf8_decode($ldapfilter))); + if ($ldapscope == "one") + $ldapfunc = "ldap_list"; + else + $ldapfunc = "ldap_search"; + /* Support legacy auth container specification. */ + if (stristr($ldac_split, "DC=") || empty($ldapbasedn)) + $search = @$ldapfunc($ldap,$ldac_split,$ldapfilter); + else + $search = @$ldapfunc($ldap,$ldapsearchbasedn,$ldapfilter); + if (!$search) { + log_error(sprintf(gettext("Search resulted in error: %s"), ldap_error($ldap))); + continue; + } + $info = ldap_get_entries($ldap,$search); + $matches = $info['count']; + if ($matches == 1){ + $userdn = $_SESSION['ldapdn'] = $info[0]['dn']; + $_SESSION['ldapou'] = $ldac_split[$i]; + $_SESSION['ldapon'] = "true"; + $usercount = 1; + break; + } + } + + if ($usercount != 1){ + @ldap_unbind($ldap); + log_error(gettext("ERROR! Either LDAP search failed, or multiple users were found.")); + return false; + } + + /* Now lets bind as the user we found */ + $passwd = isset($authcfg['ldap_utf8']) ? utf8_encode($passwd) : $passwd; + if (!($res = @ldap_bind($ldap, $userdn, $passwd))) { + log_error(sprintf(gettext('ERROR! Could not login to server %1$s as user %2$s: %3$s'), $ldapname, $username, ldap_error($ldap))); + @ldap_unbind($ldap); + return false; + } + + if ($debug) { + $userdn = isset($authcfg['ldap_utf8']) ? utf8_decode($userdn) : $userdn; + log_auth(sprintf(gettext('Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s.'), $username, $ldapname, $userdn)); + } + + /* At this point we are bound to LDAP so the user was auth'd okay. Close connection. */ + @ldap_unbind($ldap); + + return true; +} + +function radius_backed($username, $passwd, $authcfg, &$attributes = array()) { + global $debug, $config; + $ret = false; + + require_once("radius.inc"); + + $rauth = new Auth_RADIUS_PAP($username, $passwd); + if ($authcfg) { + $radiusservers = array(); + $radiusservers[0]['ipaddr'] = $authcfg['host']; + $radiusservers[0]['port'] = $authcfg['radius_auth_port']; + $radiusservers[0]['sharedsecret'] = $authcfg['radius_secret']; + $radiusservers[0]['timeout'] = $authcfg['radius_timeout']; + } else + return false; + + /* Add a new servers to our instance */ + foreach ($radiusservers as $radsrv) { + $timeout = (is_numeric($radsrv['timeout'])) ? $radsrv['timeout'] : 5; + $rauth->addServer($radsrv['ipaddr'], $radsrv['port'], $radsrv['sharedsecret'], $timeout); + } + + if (PEAR::isError($rauth->start())) { + $retvalue['auth_val'] = 1; + $retvalue['error'] = $rauth->getError(); + if ($debug) + printf(gettext("Radius start: %s
    \n"), $retvalue['error']); + } + + // XXX - billm - somewhere in here we need to handle securid challenge/response + + /* Send request */ + $result = $rauth->send(); + if (PEAR::isError($result)) { + $retvalue['auth_val'] = 1; + $retvalue['error'] = $result->getMessage(); + if ($debug) + printf(gettext("Radius send failed: %s
    \n"), $retvalue['error']); + } else if ($result === true) { + if ($rauth->getAttributes()) + $attributes = $rauth->listAttributes(); + $retvalue['auth_val'] = 2; + if ($debug) + printf(gettext("Radius Auth succeeded")."
    \n"); + $ret = true; + } else { + $retvalue['auth_val'] = 3; + if ($debug) + printf(gettext("Radius Auth rejected")."
    \n"); + } + + // close OO RADIUS_AUTHENTICATION + $rauth->close(); + + return $ret; +} + +function get_user_expiration_date($username) { + $user = getUserEntry($username); + if ($user['expires']) + return $user['expires']; +} + +function is_account_expired($username) { + $expirydate = get_user_expiration_date($username); + if ($expirydate) { + if (strtotime("-1 day") > strtotime(date("m/d/Y",strtotime($expirydate)))) + return true; + } + + return false; +} + +function is_account_disabled($username) { + $user = getUserEntry($username); + if (isset($user['disabled'])) + return true; + + return false; +} + +function auth_get_authserver($name) { + global $config; + + if (is_array($config['system']['authserver'])) { + foreach ($config['system']['authserver'] as $authcfg) { + if ($authcfg['name'] == $name) + return $authcfg; + } + } + if ($name == "Local Database") + return array("name" => gettext("Local Database"), "type" => "Local Auth", "host" => $config['system']['hostname']); +} + +function auth_get_authserver_list() { + global $config; + + $list = array(); + + if (is_array($config['system']['authserver'])) { + foreach ($config['system']['authserver'] as $authcfg) { + /* Add support for disabled entries? */ + $list[$authcfg['name']] = $authcfg; + } + } + + $list["Local Database"] = array( "name" => gettext("Local Database"), "type" => "Local Auth", "host" => $config['system']['hostname']); + return $list; +} + +function getUserGroups($username, $authcfg) { + global $config; + + $allowed_groups = array(); + + switch($authcfg['type']) { + case 'ldap': + $allowed_groups = @ldap_get_groups($username, $authcfg); + break; + case 'radius': + break; + default: + $user = getUserEntry($username); + $allowed_groups = @local_user_get_groups($user, true); + break; + } + + $member_groups = array(); + if (is_array($config['system']['group'])) { + foreach ($config['system']['group'] as $group) + if (in_array($group['name'], $allowed_groups)) + $member_groups[] = $group['name']; + } + + return $member_groups; +} + +function authenticate_user($username, $password, $authcfg = NULL, &$attributes = array()) { + + if (!$authcfg) { + return local_backed($username, $password); + } + + $authenticated = false; + switch($authcfg['type']) { + case 'ldap': + if (ldap_backed($username, $password, $authcfg)) + $authenticated = true; + break; + case 'radius': + if (radius_backed($username, $password, $authcfg, $attributes)) + $authenticated = true; + break; + default: + /* lookup user object by name */ + if (local_backed($username, $password)) + $authenticated = true; + break; + } + + return $authenticated; +} + +function session_auth() { + global $config, $_SESSION, $page; + + // Handle HTTPS httponly and secure flags + $currentCookieParams = session_get_cookie_params(); + session_set_cookie_params( + $currentCookieParams["lifetime"], + $currentCookieParams["path"], + NULL, + ($config['system']['webgui']['protocol'] == "https"), + true + ); + + if (!session_id()) + session_start(); + + // Detect protocol change + if (!isset($_POST['login']) && !empty($_SESSION['Logged_In']) && $_SESSION['protocol'] != $config['system']['webgui']['protocol']) + return false; + + /* Validate incoming login request */ + if (isset($_POST['login']) && !empty($_POST['usernamefld']) && !empty($_POST['passwordfld'])) { + $authcfg = auth_get_authserver($config['system']['webgui']['authmode']); + if (authenticate_user($_POST['usernamefld'], $_POST['passwordfld'], $authcfg) || + authenticate_user($_POST['usernamefld'], $_POST['passwordfld'])) { + // Generate a new id to avoid session fixation + session_regenerate_id(); + $_SESSION['Logged_In'] = "True"; + $_SESSION['Username'] = $_POST['usernamefld']; + $_SESSION['last_access'] = time(); + $_SESSION['protocol'] = $config['system']['webgui']['protocol']; + if(! isset($config['system']['webgui']['quietlogin'])) { + log_auth(sprintf(gettext("Successful login for user '%1\$s' from: %2\$s"), $_POST['usernamefld'], $_SERVER['REMOTE_ADDR'])); + } + if (isset($_POST['postafterlogin'])) + return true; + else { + if (empty($page)) + $page = "/"; + header("Location: {$page}"); + } + exit; + } else { + /* give the user an error message */ + $_SESSION['Login_Error'] = "Username or Password incorrect"; + log_auth("webConfigurator authentication error for '{$_POST['usernamefld']}' from {$_SERVER['REMOTE_ADDR']}"); + if(isAjax()) { + echo "showajaxmessage('{$_SESSION['Login_Error']}');"; + return; + } + } + } + + /* Show login page if they aren't logged in */ + if (empty($_SESSION['Logged_In'])) + return false; + + /* If session timeout isn't set, we don't mark sessions stale */ + if (!isset($config['system']['webgui']['session_timeout'])) { + /* Default to 4 hour timeout if one is not set */ + if ($_SESSION['last_access'] < (time() - 14400)) { + $_GET['logout'] = true; + $_SESSION['Logout'] = true; + } else + $_SESSION['last_access'] = time(); + } else if (intval($config['system']['webgui']['session_timeout']) == 0) { + /* only update if it wasn't ajax */ + if (!isAjax()) + $_SESSION['last_access'] = time(); + } else { + /* Check for stale session */ + if ($_SESSION['last_access'] < (time() - ($config['system']['webgui']['session_timeout'] * 60))) { + $_GET['logout'] = true; + $_SESSION['Logout'] = true; + } else { + /* only update if it wasn't ajax */ + if (!isAjax()) + $_SESSION['last_access'] = time(); + } + } + + /* user hit the logout button */ + if (isset($_GET['logout'])) { + + if ($_SESSION['Logout']) + log_error(sprintf(gettext("Session timed out for user '%1\$s' from: %2\$s"), $_SESSION['Username'], $_SERVER['REMOTE_ADDR'])); + else + log_error(sprintf(gettext("User logged out for user '%1\$s' from: %2\$s"), $_SESSION['Username'], $_SERVER['REMOTE_ADDR'])); + + /* wipe out $_SESSION */ + $_SESSION = array(); + + if (isset($_COOKIE[session_name()])) + setcookie(session_name(), '', time()-42000, '/'); + + /* and destroy it */ + session_destroy(); + + $scriptName = explode("/", $_SERVER["SCRIPT_FILENAME"]); + $scriptElms = count($scriptName); + $scriptName = $scriptName[$scriptElms-1]; + + if (isAjax()) + return false; + + /* redirect to page the user is on, it'll prompt them to login again */ + header("Location: {$scriptName}"); + + return false; + } + + /* + * this is for debugging purpose if you do not want to use Ajax + * to submit a HTML form. It basically diables the observation + * of the submit event and hence does not trigger Ajax. + */ + if ($_GET['disable_ajax']) + $_SESSION['NO_AJAX'] = "True"; + + /* + * Same to re-enable Ajax. + */ + if ($_GET['enable_ajax']) + unset($_SESSION['NO_AJAX']); + + return true; +} + +?> diff --git a/usr/etc/inc/authgui.inc b/usr/etc/inc/authgui.inc new file mode 100644 index 000000000..a9d7c9dec --- /dev/null +++ b/usr/etc/inc/authgui.inc @@ -0,0 +1,312 @@ + + All rights reserved. + + Copyright (C) 2005-2006 Bill Marquette + All rights reserved. + + Copyright (C) 2006 Paul Taylor . + All rights reserved. + + Copyright (C) 2003-2006 Manuel Kasper . + 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. + + pfSense_MODULE: authgui +*/ + +include_once("auth.inc"); +include_once("priv.inc"); + +/* Authenticate user - exit if failed */ +if (!session_auth()) { + display_login_form(); + exit; +} + +/* + * Once here, the user has authenticated with the web server. + * We give them access only to the appropriate pages based on + * the user or group privileges. + */ +$allowedpages = getAllowedPages($_SESSION['Username']); + +/* + * redirect to first allowed page if requesting a wrong url + */ +if (!isAllowedPage($_SERVER['REQUEST_URI'])) { + if (count($allowedpages) > 0) { + $page = str_replace('*', '', $allowedpages[0]); + $_SESSION['Post_Login'] = true; + require_once("functions.inc"); + pfSenseHeader("/{$page}"); + + $username = empty($_SESSION["Username"]) ? "(system)" : $_SESSION['Username']; + if (!empty($_SERVER['REMOTE_ADDR'])) + $username .= '@' . $_SERVER['REMOTE_ADDR']; + log_error("{$username} attempted to access {$_SERVER['SCRIPT_NAME']} but does not have access to that page. Redirecting to {$page}."); + + exit; + } else { + display_error_form("201", gettext("No page assigned to this user! Click here to logout.")); + exit; + } +} else + $_SESSION['Post_Login'] = true; + +/* + * redirect browsers post-login to avoid pages + * taking action in reponse to a POST request + */ +if (!$_SESSION['Post_Login']) { + $_SESSION['Post_Login'] = true; + require_once("functions.inc"); + pfSenseHeader($_SERVER['REQUEST_URI']); + exit; +} + +/* + * Close session data to allow other scripts from same host to come in. + * A session can be reactivated from calling session_start again + */ +session_commit(); + +/* + * determine if the user is allowed access to the requested page + */ +function display_error_form($http_code, $desc) { + global $config, $g; + $g['theme'] = get_current_theme(); + if(isAjax()) { + printf(gettext('Error: %1$s Description: %2$s'), $http_code, $desc); + return; + } + +?> + + + + + + + <?=$http_code?> + + + + + + + + + + + + + + + + "True") { + isset($_SESSION['Login_Error']) ? $login_error = $_SESSION['Login_Error'] : $login_error = gettext("unknown reason"); + printf("showajaxmessage('" . gettext("Invalid login (%s).") . "')", $login_error); + } + if (file_exists("{$g['tmp_path']}/webconfigurator.lock")) { + // TODO: add the IP from the user who did lock the device + $whom = file_get_contents("{$g['tmp_path']}/webconfigurator.lock"); + printf("showajaxmessage('" . gettext("This device is currently being maintained by: %s.") . "');", $whom); + } + } + exit; + } + +/* Check against locally configured IP addresses, which will catch when someone + port forwards WebGUI access from WAN to an internal IP on the router. */ +global $FilterIflist, $nifty_background; +$local_ip = false; +if(strstr($_SERVER['HTTP_HOST'], ":")) { + $http_host_port = explode(":", $_SERVER['HTTP_HOST']); + $http_host = $http_host_port[0]; +} else { + $http_host = $_SERVER['HTTP_HOST']; +} +if (empty($FilterIflist)) { + require_once('filter.inc'); + require_once('shaper.inc'); + filter_generate_optcfg_array(); +} +foreach ($FilterIflist as $iflist) { + if($iflist['ip'] == $http_host) + $local_ip = true; + if($iflist['ipv6'] == $http_host) + $local_ip = true; +} +unset($FilterIflist); + +if($config['virtualip']) { + if($config['virtualip']['vip']) { + foreach($config['virtualip']['vip'] as $vip) { + if($vip['subnet'] == $http_host) + $local_ip = true; + } + } +} +if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as $ovpns) { + if (is_ipaddrv4($http_host) && !empty($ovpns['tunnel_network']) && ip_in_subnet($http_host, $ovpns['tunnel_network'])) { + $local_ip = true; + break; + } + + if (is_ipaddrv6($http_host) && !empty($ovpns['tunnel_networkv6']) && ip_in_subnet($http_host, $ovpns['tunnel_networkv6'])) { + $local_ip = true; + break; + } + } +} +setcookie("cookie_test", time() + 3600); +$have_cookies = isset($_COOKIE["cookie_test"]); + +?> + + + + + + + + + <?=gettext("Login"); ?> + + + + + + + + + + + +
    +
    If you did not setup this forwarding, you may be the target of a man-in-the-middle attack.")); + } + $loginautocomplete = isset($config['system']['webgui']['loginautocomplete']) ? '' : 'autocomplete="off"'; + ?> +
    action=""> +

     

    +
    +

    + +
    + +
    +

    +

    +
    + +
    + +
    +

    +

    +
    + + + + + +

    + + + + +

    +

    + + " tabindex="3" /> + +

    +
    +
    + + + diff --git a/usr/etc/inc/basic_sasl_client.inc b/usr/etc/inc/basic_sasl_client.inc new file mode 100644 index 000000000..b2972b5d8 --- /dev/null +++ b/usr/etc/inc/basic_sasl_client.inc @@ -0,0 +1,61 @@ +state!=SASL_BASIC_STATE_START) + { + $client->error="Basic authentication state is not at the start"; + return(SASL_FAIL); + } + $this->credentials=array( + "user"=>"", + "password"=>"" + ); + $defaults=array( + ); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + { + $message=$this->credentials["user"].":".$this->credentials["password"]; + $this->state=SASL_BASIC_STATE_DONE; + } + else + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { + case SASL_BASIC_STATE_DONE: + $client->error="Basic authentication was finished without success"; + return(SASL_FAIL); + default: + $client->error="invalid Basic authentication step state"; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> \ No newline at end of file diff --git a/usr/etc/inc/captiveportal.inc b/usr/etc/inc/captiveportal.inc new file mode 100644 index 000000000..000db23a3 --- /dev/null +++ b/usr/etc/inc/captiveportal.inc @@ -0,0 +1,2187 @@ + + Copyright (C) 2009-2012 Ermal Lu�i + Copyright (C) 2003-2006 Manuel Kasper . + + originally part of m0n0wall (http://m0n0.ch/wall) + 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. + + This version of captiveportal.inc has been modified by Rob Parker + to include changes for per-user bandwidth management + via returned RADIUS attributes. This page has been modified to delete any + added rules which may have been created by other per-user code (index.php, etc). + These changes are (c) 2004 Keycom PLC. + + pfSense_BUILDER_BINARIES: /sbin/ipfw /sbin/route + pfSense_BUILDER_BINARIES: /usr/local/sbin/lighttpd /usr/local/bin/minicron /sbin/pfctl + pfSense_BUILDER_BINARIES: /bin/hostname /bin/cp + pfSense_MODULE: captiveportal +*/ + +/* include all configuration functions */ +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("radius.inc"); +require_once("voucher.inc"); + +function get_default_captive_portal_html() { + global $config, $g, $cpzone; + + $htmltext = << + +
    + + +
    + + + + + + + +
    + + + {$g['product_name']} captive portal + + +
    +
    +
    + + + + +
    +
    +
    +
    + + + + +
    +
    +
    +
    + + + \$PORTAL_MESSAGE\$ + + +
    +
    +
    + + + + + + + +EOD; + + if(isset($config['voucher'][$cpzone]['enable'])) { + $htmltext .= << + + + + +EOD; + } + + $htmltext .= << + + +
    Welcome to the {$g['product_name']} Captive Portal!
     
    Username:
    Password:
     
    Enter Voucher Code:
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +EOD; + + return $htmltext; +} + +function captiveportal_load_modules() { + global $config; + + mute_kernel_msgs(); + if (!is_module_loaded("ipfw.ko")) { + mwexec("/sbin/kldload ipfw"); + /* make sure ipfw is not on pfil hooks */ + set_sysctl(array( + "net.inet.ip.pfil.inbound" => "pf", "net.inet6.ip6.pfil.inbound" => "pf", + "net.inet.ip.pfil.outbound" => "pf", "net.inet6.ip6.pfil.outbound" => "pf") + ); + } + /* Activate layer2 filtering */ + set_sysctl(array("net.link.ether.ipfw" => "1", "net.inet.ip.fw.one_pass" => "1")); + + /* Always load dummynet now that even allowed ip and mac passthrough use it. */ + if (!is_module_loaded("dummynet.ko")) { + mwexec("/sbin/kldload dummynet"); + set_sysctl(array("net.inet.ip.dummynet.io_fast" => "1", "net.inet.ip.dummynet.hash_size" => "256")); + } + unmute_kernel_msgs(); +} + +function captiveportal_configure() { + global $config, $cpzone, $cpzoneid; + + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpkey => $cp) { + $cpzone = $cpkey; + $cpzoneid = $cp['zoneid']; + captiveportal_configure_zone($cp); + } + } +} + +function captiveportal_configure_zone($cpcfg) { + global $config, $g, $cpzone, $cpzoneid; + + $captiveportallck = lock("captiveportal{$cpzone}", LOCK_EX); + + if (isset($cpcfg['enable'])) { + + if ($g['booting']) { + echo "Starting captive portal({$cpcfg['zone']})... "; + + /* remove old information */ + unlink_if_exists("{$g['vardb_path']}/captiveportal{$cpzone}.db"); + } else + captiveportal_syslog("Reconfiguring captive portal({$cpcfg['zone']})."); + + /* init ipfw rules */ + captiveportal_init_rules(true); + + /* kill any running minicron */ + killbypid("{$g['varrun_path']}/cp_prunedb_{$cpzone}.pid"); + + /* initialize minicron interval value */ + $croninterval = $cpcfg['croninterval'] ? $cpcfg['croninterval'] : 60; + + /* double check if the $croninterval is numeric and at least 10 seconds. If not we set it to 60 to avoid problems */ + if ((!is_numeric($croninterval)) || ($croninterval < 10)) + $croninterval = 60; + + /* write portal page */ + if (is_array($cpcfg['page']) && $cpcfg['page']['htmltext']) + $htmltext = base64_decode($cpcfg['page']['htmltext']); + else { + /* example/template page */ + $htmltext = get_default_captive_portal_html(); + } + + $fd = @fopen("{$g['varetc_path']}/captiveportal_{$cpzone}.html", "w"); + if ($fd) { + // Special case handling. Convert so that we can pass this page + // through the PHP interpreter later without clobbering the vars. + $htmltext = str_replace("\$PORTAL_ZONE\$", "#PORTAL_ZONE#", $htmltext); + $htmltext = str_replace("\$PORTAL_REDIRURL\$", "#PORTAL_REDIRURL#", $htmltext); + $htmltext = str_replace("\$PORTAL_MESSAGE\$", "#PORTAL_MESSAGE#", $htmltext); + $htmltext = str_replace("\$CLIENT_MAC\$", "#CLIENT_MAC#", $htmltext); + $htmltext = str_replace("\$CLIENT_IP\$", "#CLIENT_IP#", $htmltext); + $htmltext = str_replace("\$ORIGINAL_PORTAL_IP\$", "#ORIGINAL_PORTAL_IP#", $htmltext); + $htmltext = str_replace("\$PORTAL_ACTION\$", "#PORTAL_ACTION#", $htmltext); + if($cpcfg['preauthurl']) { + $htmltext = str_replace("\$PORTAL_REDIRURL\$", "{$cpcfg['preauthurl']}", $htmltext); + $htmltext = str_replace("#PORTAL_REDIRURL#", "{$cpcfg['preauthurl']}", $htmltext); + } + fwrite($fd, $htmltext); + fclose($fd); + } + unset($htmltext); + + /* write error page */ + if (is_array($cpcfg['page']) && $cpcfg['page']['errtext']) + $errtext = base64_decode($cpcfg['page']['errtext']); + else { + /* example page */ + $errtext = get_default_captive_portal_html(); + } + + $fd = @fopen("{$g['varetc_path']}/captiveportal-{$cpzone}-error.html", "w"); + if ($fd) { + // Special case handling. Convert so that we can pass this page + // through the PHP interpreter later without clobbering the vars. + $errtext = str_replace("\$PORTAL_ZONE\$", "#PORTAL_ZONE#", $errtext); + $errtext = str_replace("\$PORTAL_REDIRURL\$", "#PORTAL_REDIRURL#", $errtext); + $errtext = str_replace("\$PORTAL_MESSAGE\$", "#PORTAL_MESSAGE#", $errtext); + $errtext = str_replace("\$CLIENT_MAC\$", "#CLIENT_MAC#", $errtext); + $errtext = str_replace("\$CLIENT_IP\$", "#CLIENT_IP#", $errtext); + $errtext = str_replace("\$ORIGINAL_PORTAL_IP\$", "#ORIGINAL_PORTAL_IP#", $errtext); + $errtext = str_replace("\$PORTAL_ACTION\$", "#PORTAL_ACTION#", $errtext); + if($cpcfg['preauthurl']) { + $errtext = str_replace("\$PORTAL_REDIRURL\$", "{$cpcfg['preauthurl']}", $errtext); + $errtext = str_replace("#PORTAL_REDIRURL#", "{$cpcfg['preauthurl']}", $errtext); + } + fwrite($fd, $errtext); + fclose($fd); + } + unset($errtext); + + /* write logout page */ + if (is_array($cpcfg['page']) && $cpcfg['page']['logouttext']) + $logouttext = base64_decode($cpcfg['page']['logouttext']); + else { + /* example page */ + $logouttext = << +Redirecting... + + +Redirecting to
    ... + + + + + +EOD; + } + + $fd = @fopen("{$g['varetc_path']}/captiveportal-{$cpzone}-logout.html", "w"); + if ($fd) { + fwrite($fd, $logouttext); + fclose($fd); + } + unset($logouttext); + + /* write elements */ + captiveportal_write_elements(); + + /* kill any running mini_httpd */ + killbypid("{$g['varrun_path']}/lighty-{$cpzone}-CaptivePortal.pid"); + killbypid("{$g['varrun_path']}/lighty-{$cpzone}-CaptivePortal-SSL.pid"); + + /* start up the webserving daemon */ + captiveportal_init_webgui_zone($cpcfg); + + /* Kill any existing prunecaptiveportal processes */ + if (file_exists("{$g['varrun_path']}/cp_prunedb_{$cpzone}.pid")) + killbypid("{$g['varrun_path']}/cp_prunedb_{$cpzone}.pid"); + + /* start pruning process (interval defaults to 60 seconds) */ + mwexec("/usr/local/bin/minicron $croninterval {$g['varrun_path']}/cp_prunedb_{$cpzone}.pid " . + "/etc/rc.prunecaptiveportal {$cpzone}"); + + /* generate radius server database */ + unlink_if_exists("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db"); + captiveportal_init_radius_servers(); + + if ($g['booting']) { + /* send Accounting-On to server */ + captiveportal_send_server_accounting(); + echo "done\n"; + } + + } else { + killbypid("{$g['varrun_path']}/lighty-{$cpzone}-CaptivePortal.pid"); + killbypid("{$g['varrun_path']}/lighty-{$cpzone}-CaptivePortal-SSL.pid"); + killbypid("{$g['varrun_path']}/cp_prunedb_{$cpzone}.pid"); + @unlink("{$g['varetc_path']}/captiveportal_{$cpzone}.html"); + @unlink("{$g['varetc_path']}/captiveportal-{$cpzone}-error.html"); + @unlink("{$g['varetc_path']}/captiveportal-{$cpzone}-logout.html"); + + captiveportal_radius_stop_all(); + + /* send Accounting-Off to server */ + if (!$g['booting']) { + captiveportal_send_server_accounting(true); + } + + /* remove old information */ + unlink_if_exists("{$g['vardb_path']}/captiveportal{$cpzone}.db"); + unlink_if_exists("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db"); + unlink_if_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules"); + /* Release allocated pipes for this zone */ + captiveportal_free_dnrules(); + + mwexec("/sbin/ipfw zone {$cpzoneid} destroy", true); + + if (empty($config['captiveportal'])) + set_single_sysctl("net.link.ether.ipfw", "0"); + else { + /* Deactivate ipfw(4) if not needed */ + $cpactive = false; + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpkey => $cp) { + if (isset($cp['enable'])) { + $cpactive = true; + break; + } + } + } + if ($cpactive === false) + set_single_sysctl("net.link.ether.ipfw", "0"); + + } + } + + unlock($captiveportallck); + + return 0; +} + +function captiveportal_init_webgui() { + global $config, $cpzone; + + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpkey => $cp) { + $cpzone = $cpkey; + captiveportal_init_webgui_zone($cp); + } + } +} + +function captiveportal_init_webgui_zonename($zone) { + global $config, $cpzone; + + if (isset($config['captiveportal'][$zone])) { + $cpzone = $zone; + captiveportal_init_webgui_zone($config['captiveportal'][$zone]); + } +} + +function captiveportal_init_webgui_zone($cpcfg) { + global $g, $config, $cpzone; + + if (!isset($cpcfg['enable'])) + return; + + if (isset($cpcfg['httpslogin'])) { + $cert = lookup_cert($cpcfg['certref']); + $crt = base64_decode($cert['crt']); + $key = base64_decode($cert['prv']); + $ca = ca_chain($cert); + + /* generate lighttpd configuration */ + if (!empty($cpcfg['listenporthttps'])) + $listenporthttps = $cpcfg['listenporthttps']; + else + $listenporthttps = 8001 + $cpcfg['zoneid']; + system_generate_lighty_config("{$g['varetc_path']}/lighty-{$cpzone}-CaptivePortal-SSL.conf", + $crt, $key, $ca, "lighty-{$cpzone}-CaptivePortal-SSL.pid", $listenporthttps, "/usr/local/captiveportal", + "cert-{$cpzone}-portal.pem", "ca-{$cpzone}-portal.pem", $cpzone); + } + + /* generate lighttpd configuration */ + if (!empty($cpcfg['listenporthttp'])) + $listenporthttp = $cpcfg['listenporthttp']; + else + $listenporthttp = 8000 + $cpcfg['zoneid']; + system_generate_lighty_config("{$g['varetc_path']}/lighty-{$cpzone}-CaptivePortal.conf", + "", "", "", "lighty-{$cpzone}-CaptivePortal.pid", $listenporthttp, "/usr/local/captiveportal", + "", "", $cpzone); + + @unlink("{$g['varrun']}/lighty-{$cpzone}-CaptivePortal.pid"); + /* attempt to start lighttpd */ + $res = mwexec("/usr/local/sbin/lighttpd -f {$g['varetc_path']}/lighty-{$cpzone}-CaptivePortal.conf"); + + /* fire up https instance */ + if (isset($cpcfg['httpslogin'])) { + @unlink("{$g['varrun']}/lighty-{$cpzone}-CaptivePortal-SSL.pid"); + $res = mwexec("/usr/local/sbin/lighttpd -f {$g['varetc_path']}/lighty-{$cpzone}-CaptivePortal-SSL.conf"); + } +} + +/* reinit will disconnect all users, be careful! */ +function captiveportal_init_rules($reinit = false) { + global $config, $g, $cpzone, $cpzoneid; + + if (!isset($config['captiveportal'][$cpzone]['enable'])) + return; + + captiveportal_load_modules(); + mwexec("/sbin/ipfw zone {$cpzoneid} create", true); + + $cpips = array(); + $ifaces = get_configured_interface_list(); + $cpinterfaces = explode(",", $config['captiveportal'][$cpzone]['interface']); + $firsttime = 0; + foreach ($cpinterfaces as $cpifgrp) { + if (!isset($ifaces[$cpifgrp])) + continue; + $tmpif = get_real_interface($cpifgrp); + if (!empty($tmpif)) { + $cpipm = get_interface_ip($cpifgrp); + if (is_ipaddr($cpipm)) { + $carpif = link_ip_to_carp_interface($cpipm); + if (!empty($carpif)) { + $carpsif = explode(" ", $carpif); + foreach ($carpsif as $cpcarp) { + mwexec("/sbin/ipfw zone {$cpzoneid} madd {$cpcarp}", true); + $carpip = find_interface_ip($cpcarp); + if (is_ipaddr($carpip)) + $cpips[] = $carpip; + } + } + $cpips[] = $cpipm; + } + mwexec("/sbin/ipfw zone {$cpzoneid} madd {$tmpif}", true); + } + } + if (count($cpips) > 0) { + $cpactive = true; + } else + return false; + + if ($reinit == false) + $captiveportallck = lock("captiveportal{$cpzone}"); + + $cprules = "add 65291 allow pfsync from any to any\n"; + $cprules .= "add 65292 allow carp from any to any\n"; + + $cprules .= <<= $timeout) { + $timedout = true; + $term_cause = 5; // Session-Timeout + } + } + + /* Session-Terminate-Time */ + if (!$timedout && !empty($cpentry[9])) { + if ($pruning_time >= $cpentry[9]) { + $timedout = true; + $term_cause = 5; // Session-Timeout + } + } + + /* check if the radius idle_timeout attribute has been set and if its set change the idletimeout to this value */ + $uidletimeout = (is_numeric($cpentry[8])) ? $cpentry[8] : $idletimeout; + /* if an idle timeout is specified, get last activity timestamp from ipfw */ + if (!$timedout && $uidletimeout > 0) { + $lastact = captiveportal_get_last_activity($cpentry[2], $cpentry[3]); + /* If the user has logged on but not sent any traffic they will never be logged out. + * We "fix" this by setting lastact to the login timestamp. + */ + $lastact = $lastact ? $lastact : $cpentry[0]; + if ($lastact && (($pruning_time - $lastact) >= $uidletimeout)) { + $timedout = true; + $term_cause = 4; // Idle-Timeout + $stop_time = $lastact; // Entry added to comply with WISPr + } + } + + /* if vouchers are configured, activate session timeouts */ + if (!$timedout && isset($vcpcfg['enable']) && !empty($cpentry[7])) { + if ($pruning_time >= ($cpentry[0] + $cpentry[7])) { + $timedout = true; + $term_cause = 5; // Session-Timeout + $voucher_needs_sync = true; + } + } + + /* if radius session_timeout is enabled and the session_timeout is not null, then check if the user should be logged out */ + if (!$timedout && isset($cpcfg['radiussession_timeout']) && !empty($cpentry[7])) { + if ($pruning_time >= ($cpentry[0] + $cpentry[7])) { + $timedout = true; + $term_cause = 5; // Session-Timeout + } + } + + if ($timedout) { + captiveportal_disconnect($cpentry, $radiusservers,$term_cause,$stop_time); + captiveportal_logportalauth($cpentry[4], $cpentry[3], $cpentry[2], "TIMEOUT"); + $unsetindexes[] = $cpentry[5]; + } + + /* do periodic RADIUS reauthentication? */ + if (!$timedout && !empty($radiusservers)) { + if (isset($cpcfg['radacct_enable'])) { + if ($cpcfg['reauthenticateacct'] == "stopstart") { + /* stop and restart accounting */ + RADIUS_ACCOUNTING_STOP($cpentry[1], // ruleno + $cpentry[4], // username + $cpentry[5], // sessionid + $cpentry[0], // start time + $radiusservers, + $cpentry[2], // clientip + $cpentry[3], // clientmac + 10); // NAS Request + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XZEROENTRY, 1, $cpentry[2], $cpentry[3]); + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XZEROENTRY, 2, $cpentry[2], $cpentry[3]); + RADIUS_ACCOUNTING_START($cpentry[1], // ruleno + $cpentry[4], // username + $cpentry[5], // sessionid + $radiusservers, + $cpentry[2], // clientip + $cpentry[3]); // clientmac + } else if ($cpcfg['reauthenticateacct'] == "interimupdate") { + $session_time = $pruning_time - $cpentry[0]; + if (!empty($cpentry[10]) && $cpentry[10] > 60) + $interval = $cpentry[10]; + else + $interval = 0; + $past_interval_min = ($session_time > $interval); + if ($interval != 0) + $within_interval = ($session_time % $interval >= 0 && $session_time % $interval <= 59); + if ($interval === 0 || ($interval > 0 && $past_interval_min && $within_interval)) { + RADIUS_ACCOUNTING_STOP($cpentry[1], // ruleno + $cpentry[4], // username + $cpentry[5], // sessionid + $cpentry[0], // start time + $radiusservers, + $cpentry[2], // clientip + $cpentry[3], // clientmac + 10, // NAS Request + true); // Interim Updates + } + } + } + + /* check this user against RADIUS again */ + if (isset($cpcfg['reauthenticate'])) { + $auth_list = RADIUS_AUTHENTICATION($cpentry[4], // username + base64_decode($cpentry[6]), // password + $radiusservers, + $cpentry[2], // clientip + $cpentry[3], // clientmac + $cpentry[1]); // ruleno + if ($auth_list['auth_val'] == 3) { + captiveportal_disconnect($cpentry, $radiusservers, 17); + captiveportal_logportalauth($cpentry[4], $cpentry[3], $cpentry[2], "RADIUS_DISCONNECT", $auth_list['reply_message']); + $unsetindexes[] = $cpentry[5]; + } else if ($auth_list['auth_val'] == 2) + captiveportal_reapply_attributes($cpentry, $auth_list); + } + } + } + unset($cpdb); + + captiveportal_prune_old_automac(); + + if ($voucher_needs_sync == true) + /* Triger a sync of the vouchers on config */ + send_event("service sync vouchers"); + + /* write database */ + if (!empty($unsetindexes)) + captiveportal_remove_entries($unsetindexes); +} + +function captiveportal_prune_old_automac() { + global $g, $config, $cpzone, $cpzoneid; + + if (is_array($config['captiveportal'][$cpzone]['passthrumac']) && isset($config['captiveportal'][$cpzone]['passthrumacaddusername'])) { + $tmpvoucherdb = array(); + $macrules = ""; + $writecfg = false; + foreach ($config['captiveportal'][$cpzone]['passthrumac'] as $eid => $emac) { + if ($emac['logintype'] == "voucher") { + if (isset($config['captiveportal'][$cpzone]['noconcurrentlogins'])) { + if (isset($tmpvoucherdb[$emac['username']])) { + $temac = $config['captiveportal'][$cpzone]['passthrumac'][$tmpvoucherdb[$emac['username']]]; + $ruleno = captiveportal_get_ipfw_passthru_ruleno($temac['mac']); + $pipeno = captiveportal_get_dn_passthru_ruleno($temac['mac']); + if ($ruleno) { + captiveportal_free_ipfw_ruleno($ruleno); + $macrules .= "delete {$ruleno}"; + ++$ruleno; + $macrules .= "delete {$ruleno}"; + } + if ($pipeno) { + captiveportal_free_dn_ruleno($pipeno); + $macrules .= "pipe delete {$pipeno}\n"; + ++$pipeno; + $macrules .= "pipe delete {$pipeno}\n"; + } + $writecfg = true; + captiveportal_logportalauth($temac['username'], $temac['mac'], $temac['ip'], "DUPLICATE {$temac['username']} LOGIN - TERMINATING OLD SESSION"); + unset($config['captiveportal'][$cpzone]['passthrumac'][$tmpvoucherdb[$emac['username']]]); + } + $tmpvoucherdb[$emac['username']] = $eid; + } + if (voucher_auth($emac['username']) <= 0) { + $ruleno = captiveportal_get_ipfw_passthru_ruleno($emac['mac']); + $pipeno = captiveportal_get_dn_passthru_ruleno($emac['mac']); + if ($ruleno) { + captiveportal_free_ipfw_ruleno($ruleno); + $macrules .= "delete {$ruleno}"; + ++$ruleno; + $macrules .= "delete {$ruleno}"; + } + if ($pipeno) { + captiveportal_free_dn_ruleno($pipeno); + $macrules .= "pipe delete {$pipeno}\n"; + ++$pipeno; + $macrules .= "pipe delete {$pipeno}\n"; + } + $writecfg = true; + captiveportal_logportalauth($emac['username'], $emac['mac'], $emac['ip'], "EXPIRED {$emac['username']} LOGIN - TERMINATING SESSION"); + unset($config['captiveportal'][$cpzone]['passthrumac'][$eid]); + } + } + } + unset($tmpvoucherdb); + if (!empty($macrules)) { + @file_put_contents("{$g['tmp_path']}/macentry.prunerules.tmp", $macrules); + unset($macrules); + mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/macentry.prunerules.tmp"); + } + if ($writecfg === true) + write_config("Prune session for auto-added macs"); + } +} + +/* remove a single client according to the DB entry */ +function captiveportal_disconnect($dbent, $radiusservers,$term_cause = 1,$stop_time = null) { + global $g, $config, $cpzone, $cpzoneid; + + $stop_time = (empty($stop_time)) ? time() : $stop_time; + + /* this client needs to be deleted - remove ipfw rules */ + if (isset($config['captiveportal'][$cpzone]['radacct_enable']) && !empty($radiusservers)) { + RADIUS_ACCOUNTING_STOP($dbent[1], // ruleno + $dbent[4], // username + $dbent[5], // sessionid + $dbent[0], // start time + $radiusservers, + $dbent[2], // clientip + $dbent[3], // clientmac + $term_cause, // Acct-Terminate-Cause + false, + $stop_time); + } + + if (is_ipaddr($dbent[2])) { + /* Delete client's ip entry from tables 1 and 2. */ + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 1, $dbent[2], $dbent[3]); + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 2, $dbent[2], $dbent[3]); + /* XXX: Redundant?! Ensure all pf(4) states are killed. */ + $_gb = @pfSense_kill_states($dbent[2]); + $_gb = @pfSense_kill_srcstates($dbent[2]); + } + + /* + * These are the pipe numbers we use to control traffic shaping for each logged in user via captive portal + * We could get an error if the pipe doesn't exist but everything should still be fine + */ + if (!empty($dbent[1])) { + $_gb = @pfSense_pipe_action("pipe delete {$dbent[1]}"); + $_gb = @pfSense_pipe_action("pipe delete " . ($dbent[1]+1)); + + /* Release the ruleno so it can be reallocated to new clients. */ + captiveportal_free_dn_ruleno($dbent[1]); + } + + // XMLRPC Call over to the master Voucher node + if(!empty($config['voucher'][$cpzone]['vouchersyncdbip'])) { + $syncip = $config['voucher'][$cpzone]['vouchersyncdbip']; + $syncport = $config['voucher'][$cpzone]['vouchersyncport']; + $syncpass = $config['voucher'][$cpzone]['vouchersyncpass']; + $vouchersyncusername = $config['voucher'][$cpzone]['vouchersyncusername']; + $remote_status = xmlrpc_sync_voucher_disconnect($dbent, $syncip, $syncport, $syncpass, $vouchersyncusername, $term_cause, $stop_time); + } + +} + +/* remove a single client by sessionid */ +function captiveportal_disconnect_client($sessionid, $term_cause = 1, $logoutReason = "LOGOUT") { + global $g, $config; + + $radiusservers = captiveportal_get_radius_servers(); + + /* read database */ + $result = captiveportal_read_db("WHERE sessionid = '{$sessionid}'"); + + /* find entry */ + if (!empty($result)) { + captiveportal_write_db("DELETE FROM captiveportal WHERE sessionid = '{$sessionid}'"); + + foreach ($result as $cpentry) { + if (empty($cpentry[11])) + $cpentry[11] = 'first'; + captiveportal_disconnect($cpentry, $radiusservers[$cpentry[11]], $term_cause); + captiveportal_logportalauth($cpentry[4], $cpentry[3], $cpentry[2], "DISCONNECT"); + } + unset($result); + } +} + +/* send RADIUS acct stop for all current clients */ +function captiveportal_radius_stop_all() { + global $config, $cpzone; + + if (!isset($config['captiveportal'][$cpzone]['radacct_enable'])) + return; + + $radiusservers = captiveportal_get_radius_servers(); + if (!empty($radiusservers)) { + $cpdb = captiveportal_read_db(); + foreach ($cpdb as $cpentry) { + if (empty($cpentry[11])) + $cpentry[11] = 'first'; + if (!empty($radiusservers[$cpentry[11]])) { + RADIUS_ACCOUNTING_STOP($cpentry[1], // ruleno + $cpentry[4], // username + $cpentry[5], // sessionid + $cpentry[0], // start time + $radiusservers[$cpentry[11]], + $cpentry[2], // clientip + $cpentry[3], // clientmac + 7); // Admin Reboot + } + } + } +} + +function captiveportal_passthrumac_configure_entry($macent) { + global $config, $g, $cpzone; + + $bwUp = 0; + if (!empty($macent['bw_up'])) + $bwUp = $macent['bw_up']; + else if (isset($config['captiveportal'][$cpzone]['bwdefaultup'])) + $bwUp = $config['captiveportal'][$cpzone]['bwdefaultup']; + $bwDown = 0; + if (!empty($macent['bw_down'])) + $bwDown = $macent['bw_down']; + else if (isset($config['captiveportal'][$cpzone]['bwdefaultdn'])) + $bwDown = $config['captiveportal'][$cpzone]['bwdefaultdn']; + + $ruleno = captiveportal_get_next_ipfw_ruleno(); + + if ($macent['action'] == 'pass') { + $pipeno = captiveportal_get_next_dn_ruleno(); + + $pipeup = $pipeno; + $_gb = @pfSense_pipe_action("pipe {$pipeno} config bw {$bwUp}Kbit/s queue 100 buckets 16"); + $pipedown = $pipeno + 1; + $_gb = @pfSense_pipe_action("pipe {$pipedown} config bw {$bwDown}Kbit/s queue 100 buckets 16"); + + $rules = "add {$ruleno} pipe {$pipeup} ip from any to any MAC any {$macent['mac']}\n"; + $ruleno++; + $rules .= "add {$ruleno} pipe {$pipedown} ip from any to any MAC {$macent['mac']} any\n"; + } + + return $rules; +} + +function captiveportal_passthrumac_delete_entry($macent) { + $rules = ""; + + if ($macent['action'] == 'pass') { + $ruleno = captiveportal_get_ipfw_passthru_ruleno($macent['mac']); + + if (!$ruleno) + return $rules; + + captiveportal_free_ipfw_ruleno($ruleno); + + $rules .= "delete {$ruleno}\n"; + $rules .= "delete " . ++$ruleno . "\n"; + + $pipeno = captiveportal_get_dn_passthru_ruleno($macent['mac']); + + if (!empty($pipeno)) { + captiveportal_free_dn_ruleno($pipeno); + $rules .= "pipe delete " . $pipeno . "\n"; + $rules .= "pipe delete " . ++$pipeno . "\n"; + } + } + + return $rules; +} + +function captiveportal_passthrumac_configure($lock = false) { + global $config, $g, $cpzone; + + $rules = ""; + + if (is_array($config['captiveportal'][$cpzone]['passthrumac'])) + foreach ($config['captiveportal'][$cpzone]['passthrumac'] as $macent) + $rules .= captiveportal_passthrumac_configure_entry($macent); + + return $rules; +} + +function captiveportal_passthrumac_findbyname($username) { + global $config, $cpzone; + + if (is_array($config['captiveportal'][$cpzone]['passthrumac'])) { + foreach ($config['captiveportal'][$cpzone]['passthrumac'] as $macent) { + if ($macent['username'] == $username) + return $macent; + } + } + return NULL; +} + +/* + * table (3=IN)/(4=OUT) hold allowed ip's without bw limits + */ +function captiveportal_allowedip_configure_entry($ipent, $ishostname = false) { + global $g; + + /* Instead of copying this entire function for something + * easy such as hostname vs ip address add this check + */ + if ($ishostname === true) { + if (!$g['booting']) { + $ipaddress = gethostbyname($ipent['hostname']); + if (!is_ipaddr($ipaddress)) + return; + } else + $ipaddress = ""; + } else + $ipaddress = $ipent['ip']; + + $rules = ""; + $cp_filterdns_conf = ""; + $enBwup = 0; + if (!empty($ipent['bw_up'])) + $enBwup = intval($ipent['bw_up']); + else if (isset($config['captiveportal'][$cpzone]['bwdefaultup'])) + $enBwup = $config['captiveportal'][$cpzone]['bwdefaultup']; + $enBwdown = 0; + if (!empty($ipent['bw_down'])) + $enBwdown = intval($ipent['bw_down']); + else if (isset($config['captiveportal'][$cpzone]['bwdefaultdn'])) + $enBwdown = $config['captiveportal'][$cpzone]['bwdefaultdn']; + + $pipeno = captiveportal_get_next_dn_ruleno(); + $_gb = @pfSense_pipe_action("pipe {$pipeno} config bw {$enBwup}Kbit/s queue 100 buckets 16"); + $pipedown = $pipeno + 1; + $_gb = @pfSense_pipe_action("pipe {$pipedown} config bw {$enBwdown}Kbit/s queue 100 buckets 16"); + if ($ishostname === true) { + $cp_filterdns_conf .= "ipfw {$ipent['hostname']} 3 pipe {$pipeno}\n"; + $cp_filterdns_conf .= "ipfw {$ipent['hostname']} 4 pipe {$pipedown}\n"; + if (!is_ipaddr($ipaddress)) + return array("", $cp_filterdns_conf); + } + $subnet = ""; + if (!empty($ipent['sn'])) + $subnet = "/{$ipent['sn']}"; + $rules .= "table 3 add {$ipaddress}{$subnet} {$pipeno}\n"; + $rules .= "table 4 add {$ipaddress}{$subnet} {$pipedown}\n"; + + if ($ishostname === true) + return array($rules, $cp_filterdns_conf); + else + return $rules; +} + +function captiveportal_allowedhostname_configure() { + global $config, $g, $cpzone; + + $rules = ""; + if (is_array($config['captiveportal'][$cpzone]['allowedhostname'])) { + $rules = "\n# captiveportal_allowedhostname_configure()\n"; + $cp_filterdns_conf = ""; + foreach ($config['captiveportal'][$cpzone]['allowedhostname'] as $hostnameent) { + $tmprules = captiveportal_allowedip_configure_entry($hostnameent, true); + $rules .= $tmprules[0]; + $cp_filterdns_conf .= $tmprules[1]; + } + $cp_filterdns_filename = "{$g['varetc_path']}/filterdns-{$cpzone}-captiveportal.conf"; + @file_put_contents($cp_filterdns_filename, $cp_filterdns_conf); + unset($cp_filterdns_conf); + if (isvalidpid("{$g['varrun_path']}/filterdns-{$cpzone}-cpah.pid")) + sigkillbypid("{$g['varrun_path']}/filterdns-{$cpzone}-cpah.pid", "HUP"); + else + mwexec("/usr/local/sbin/filterdns -p {$g['varrun_path']}/filterdns-{$cpzone}-cpah.pid -i 300 -c {$cp_filterdns_filename} -y {$cpzone} -d 1"); + } else { + killbypid("{$g['varrun_path']}/filterdns-{$cpzone}-cpah.pid"); + @unlink("{$g['varrun_path']}/filterdns-{$cpzone}-cpah.pid"); + } + + return $rules; +} + +function captiveportal_allowedip_configure() { + global $config, $g, $cpzone; + + $rules = ""; + if (is_array($config['captiveportal'][$cpzone]['allowedip'])) { + foreach ($config['captiveportal'][$cpzone]['allowedip'] as $ipent) + $rules .= captiveportal_allowedip_configure_entry($ipent); + } + + return $rules; +} + +/* get last activity timestamp given client IP address */ +function captiveportal_get_last_activity($ip, $mac = NULL) { + global $cpzone; + + $ipfwoutput = pfSense_ipfw_getTablestats($cpzone, 1, $ip, $mac); + /* Reading only from one of the tables is enough of approximation. */ + if (is_array($ipfwoutput)) { + return $ipfwoutput['timestamp']; + } + + return 0; +} + +function captiveportal_init_radius_servers() { + global $config, $g, $cpzone; + + /* generate radius server database */ + if ($config['captiveportal'][$cpzone]['radiusip'] && (!isset($config['captiveportal'][$cpzone]['auth_method']) || + ($config['captiveportal'][$cpzone]['auth_method'] == "radius"))) { + $radiusip = $config['captiveportal'][$cpzone]['radiusip']; + $radiusip2 = ($config['captiveportal'][$cpzone]['radiusip2']) ? $config['captiveportal'][$cpzone]['radiusip2'] : null; + $radiusip3 = ($config['captiveportal'][$cpzone]['radiusip3']) ? $config['captiveportal'][$cpzone]['radiusip3'] : null; + $radiusip4 = ($config['captiveportal'][$cpzone]['radiusip4']) ? $config['captiveportal'][$cpzone]['radiusip4'] : null; + + if ($config['captiveportal'][$cpzone]['radiusport']) + $radiusport = $config['captiveportal'][$cpzone]['radiusport']; + else + $radiusport = 1812; + if ($config['captiveportal'][$cpzone]['radiusacctport']) + $radiusacctport = $config['captiveportal'][$cpzone]['radiusacctport']; + else + $radiusacctport = 1813; + if ($config['captiveportal'][$cpzone]['radiusport2']) + $radiusport2 = $config['captiveportal'][$cpzone]['radiusport2']; + else + $radiusport2 = 1812; + if ($config['captiveportal'][$cpzone]['radiusport3']) + $radiusport3 = $config['captiveportal'][$cpzone]['radiusport3']; + else + $radiusport3 = 1812; + if ($config['captiveportal'][$cpzone]['radiusport4']) + $radiusport4 = $config['captiveportal'][$cpzone]['radiusport4']; + else + $radiusport4 = 1812; + + $radiuskey = $config['captiveportal'][$cpzone]['radiuskey']; + $radiuskey2 = $config['captiveportal'][$cpzone]['radiuskey2']; + $radiuskey3 = $config['captiveportal'][$cpzone]['radiuskey3']; + $radiuskey4 = $config['captiveportal'][$cpzone]['radiuskey4']; + + $cprdsrvlck = lock("captiveportalradius{$cpzone}", LOCK_EX); + $fd = @fopen("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db", "w"); + if (!$fd) { + captiveportal_syslog("Error: cannot open radius DB file in captiveportal_configure().\n"); + unlock($cprdsrvlck); + return 1; + } + if (isset($radiusip)) + fwrite($fd,$radiusip . "," . $radiusport . "," . $radiusacctport . "," . $radiuskey . ",first"); + if (isset($radiusip2)) + fwrite($fd,"\n" . $radiusip2 . "," . $radiusport2 . "," . $radiusacctport . "," . $radiuskey2 . ",first"); + if (isset($radiusip3)) + fwrite($fd,"\n" . $radiusip3 . "," . $radiusport3 . "," . $radiusacctport . "," . $radiuskey3 . ",second"); + if (isset($radiusip4)) + fwrite($fd,"\n" . $radiusip4 . "," . $radiusport4 . "," . $radiusacctport . "," . $radiuskey4 . ",second"); + + + fclose($fd); + unlock($cprdsrvlck); + } +} + +/* read RADIUS servers into array */ +function captiveportal_get_radius_servers() { + global $g, $cpzone; + + $cprdsrvlck = lock("captiveportalradius{$cpzone}"); + if (file_exists("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db")) { + $radiusservers = array(); + $cpradiusdb = file("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db", + FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if ($cpradiusdb) { + foreach($cpradiusdb as $cpradiusentry) { + $line = trim($cpradiusentry); + if ($line) { + $radsrv = array(); + list($radsrv['ipaddr'],$radsrv['port'],$radsrv['acctport'],$radsrv['key'], $context) = explode(",",$line); + } + if (empty($context)) { + if (!is_array($radiusservers['first'])) + $radiusservers['first'] = array(); + $radiusservers['first'] = $radsrv; + } else { + if (!is_array($radiusservers[$context])) + $radiusservers[$context] = array(); + $radiusservers[$context][] = $radsrv; + } + } + } + unlock($cprdsrvlck); + return $radiusservers; + } + + unlock($cprdsrvlck); + return false; +} + +/* log successful captive portal authentication to syslog */ +/* part of this code from php.net */ +function captiveportal_logportalauth($user,$mac,$ip,$status, $message = null) { + // Log it + if (!$message) + $message = "{$status}: {$user}, {$mac}, {$ip}"; + else { + $message = trim($message); + $message = "{$status}: {$user}, {$mac}, {$ip}, {$message}"; + } + captiveportal_syslog($message); +} + +/* log simple messages to syslog */ +function captiveportal_syslog($message) { + global $cpzone; + + $message = trim($message); + $message .= "Zone: {$cpzone} - {$message}"; + openlog("logportalauth", LOG_PID, LOG_LOCAL4); + // Log it + syslog(LOG_INFO, $message); + closelog(); +} + +function radius($username,$password,$clientip,$clientmac,$type, $radiusctx = null) { + global $g, $config, $cpzoneid; + + $pipeno = captiveportal_get_next_dn_ruleno(); + + /* If the pool is empty, return appropriate message and fail authentication */ + if (empty($pipeno)) { + $auth_list = array(); + $auth_list['auth_val'] = 1; + $auth_list['error'] = "System reached maximum login capacity"; + return $auth_list; + } + + $radiusservers = captiveportal_get_radius_servers(); + + if (is_null($radiusctx)) + $radiusctx = 'first'; + + $auth_list = RADIUS_AUTHENTICATION($username, + $password, + $radiusservers[$radiusctx], + $clientip, + $clientmac, + $pipeno); + + if ($auth_list['auth_val'] == 2) { + captiveportal_logportalauth($username,$clientmac,$clientip,$type); + $sessionid = portal_allow($clientip, + $clientmac, + $username, + $password, + $auth_list, + $pipeno, + $radiusctx); + } else { + captiveportal_free_dn_ruleno($pipeno); + } + + return $auth_list; +} + +function captiveportal_opendb() { + global $g, $cpzone; + + $DB = new SQLite3("{$g['vardb_path']}/captiveportal{$cpzone}.db"); + if (! $DB->exec("CREATE TABLE IF NOT EXISTS captiveportal (" . + "allow_time INTEGER, pipeno INTEGER, ip TEXT, mac TEXT, username TEXT, " . + "sessionid TEXT, bpassword TEXT, session_timeout INTEGER, idle_timeout INTEGER, " . + "session_terminate_time INTEGER, interim_interval INTEGER, radiusctx TEXT); " . + "CREATE UNIQUE INDEX IF NOT EXISTS idx_active ON captiveportal (sessionid, username); " . + "CREATE INDEX IF NOT EXISTS user ON captiveportal (username); " . + "CREATE INDEX IF NOT EXISTS ip ON captiveportal (ip); " . + "CREATE INDEX IF NOT EXISTS starttime ON captiveportal (allow_time)")) + captiveportal_syslog("Error during table {$cpzone} creation. Error message: {$DB->lastErrorMsg()}"); + + return $DB; +} + +/* read captive portal DB into array */ +function captiveportal_read_db($query = "") { + $cpdb = array(); + + $DB = captiveportal_opendb(); + if ($DB) { + $response = $DB->query("SELECT * FROM captiveportal {$query}"); + while ($row = $response->fetchArray()) + $cpdb[] = $row; + $DB->close(); + } + + return $cpdb; +} + +function captiveportal_remove_entries($remove) { + + if (!is_array($remove) || empty($remove)) + return; + + $query = "DELETE FROM captiveportal WHERE sessionid in ("; + foreach($remove as $idx => $unindex) { + $query .= "'{$unindex}'"; + if ($idx < (count($remove) - 1)) + $query .= ","; + } + $query .= ")"; + captiveportal_write_db($query); +} + +/* write captive portal DB */ +function captiveportal_write_db($queries) { + global $g; + + if (is_array($queries)) + $query = implode(";", $queries); + else + $query = $queries; + + $DB = captiveportal_opendb(); + if ($DB) { + $DB->exec("BEGIN TRANSACTION"); + $result = $DB->exec($query); + if (!$result) + captiveportal_syslog("Trying to modify DB returned error: {$DB->lastErrorMsg()}"); + else + $DB->exec("END TRANSACTION"); + $DB->close(); + return $result; + } else + return true; +} + +function captiveportal_write_elements() { + global $g, $config, $cpzone; + + $cpcfg = $config['captiveportal'][$cpzone]; + + if (!is_dir($g['captiveportal_element_path'])) + @mkdir($g['captiveportal_element_path']); + + if (is_array($cpcfg['element'])) { + conf_mount_rw(); + foreach ($cpcfg['element'] as $data) { + if (!@file_put_contents("{$g['captiveportal_element_path']}/{$data['name']}", base64_decode($data['content']))) { + printf(gettext("Error: cannot open '%s' in captiveportal_write_elements()%s"), $data['name'], "\n"); + return 1; + } + if (!file_exists("{$g['captiveportal_path']}/{$data['name']}")) + @symlink("{$g['captiveportal_element_path']}/{$data['name']}", "{$g['captiveportal_path']}/{$data['name']}"); + } + conf_mount_ro(); + } + + return 0; +} + +function captiveportal_free_dnrules($rulenos_start = 2000, $rulenos_range_max = 64500) { + global $cpzone; + + $cpruleslck = lock("captiveportalrulesdn", LOCK_EX); + if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules")); + $ridx = $rulenos_start; + while ($ridx < $rulenos_range_max) { + if ($rules[$ridx] == $cpzone) { + $rules[$ridx] = false; + $ridx++; + $rules[$ridx] = false; + $ridx++; + } else + $ridx += 2; + } + file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules)); + unset($rules); + } + unlock($cpruleslck); +} + +function captiveportal_get_next_dn_ruleno($rulenos_start = 2000, $rulenos_range_max = 64500) { + global $config, $g, $cpzone; + + $cpruleslck = lock("captiveportalrulesdn", LOCK_EX); + $ruleno = 0; + if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules")); + $ridx = $rulenos_start; + while ($ridx < $rulenos_range_max) { + if (empty($rules[$ridx])) { + $ruleno = $ridx; + $rules[$ridx] = $cpzone; + $ridx++; + $rules[$ridx] = $cpzone; + break; + } else { + $ridx += 2; + } + } + } else { + $rules = array_pad(array(), $rulenos_range_max, false); + $ruleno = $rulenos_start; + $rules[$rulenos_start] = $cpzone; + $rulenos_start++; + $rules[$rulenos_start] = $cpzone; + } + file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules)); + unlock($cpruleslck); + unset($rules); + + return $ruleno; +} + +function captiveportal_free_dn_ruleno($ruleno) { + global $config, $g; + + $cpruleslck = lock("captiveportalrulesdn", LOCK_EX); + if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules")); + $rules[$ruleno] = false; + $ruleno++; + $rules[$ruleno] = false; + file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules)); + unset($rules); + } + unlock($cpruleslck); +} + +function captiveportal_get_dn_passthru_ruleno($value) { + global $config, $g, $cpzone, $cpzoneid; + + $cpcfg = $config['captiveportal'][$cpzone]; + if(!isset($cpcfg['enable'])) + return NULL; + + $cpruleslck = lock("captiveportalrulesdn", LOCK_EX); + $ruleno = NULL; + if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules")); + unset($output); + $_gb = exec("/sbin/ipfw -x {$cpzoneid} show | /usr/bin/grep " . escapeshellarg($value) . " | /usr/bin/grep -v grep | /usr/bin/awk '{print $5}' | /usr/bin/head -n 1", $output); + $ruleno = intval($output[0]); + if (!$rules[$ruleno]) + $ruleno = NULL; + unset($rules); + } + unlock($cpruleslck); + + return $ruleno; +} + +/* + * This function will calculate the lowest free firewall ruleno + * within the range specified based on the actual logged on users + * + */ +function captiveportal_get_next_ipfw_ruleno($rulenos_start = 2, $rulenos_range_max = 64500) { + global $config, $g, $cpzone; + + $cpcfg = $config['captiveportal'][$cpzone]; + if(!isset($cpcfg['enable'])) + return NULL; + + $cpruleslck = lock("captiveportalrules{$cpzone}", LOCK_EX); + $ruleno = 0; + if (file_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")); + $ridx = $rulenos_start; + while ($ridx < $rulenos_range_max) { + if (empty($rules[$ridx])) { + $ruleno = $ridx; + $rules[$ridx] = $cpzone; + $ridx++; + $rules[$ridx] = $cpzone; + break; + } else { + /* + * This allows our traffic shaping pipes to be the in pipe the same as ruleno + * and the out pipe ruleno + 1. + */ + $ridx += 2; + } + } + } else { + $rules = array_pad(array(), $rulenos_range_max, false); + $ruleno = $rulenos_start; + $rules[$rulenos_start] = $cpzone; + $rulenos_start++; + $rules[$rulenos_start] = $cpzone; + } + file_put_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules", serialize($rules)); + unlock($cpruleslck); + unset($rules); + + return $ruleno; +} + +function captiveportal_free_ipfw_ruleno($ruleno) { + global $config, $g, $cpzone; + + $cpcfg = $config['captiveportal'][$cpzone]; + if(!isset($cpcfg['enable'])) + return NULL; + + $cpruleslck = lock("captiveportalrules{$cpzone}", LOCK_EX); + if (file_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")); + $rules[$ruleno] = false; + $ruleno++; + $rules[$ruleno] = false; + file_put_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules", serialize($rules)); + unset($rules); + } + unlock($cpruleslck); +} + +function captiveportal_get_ipfw_passthru_ruleno($value) { + global $config, $g, $cpzone, $cpzoneid; + + $cpcfg = $config['captiveportal'][$cpzone]; + if(!isset($cpcfg['enable'])) + return NULL; + + $cpruleslck = lock("captiveportalrules{$cpzone}", LOCK_EX); + $ruleno = NULL; + if (file_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")) { + $rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")); + unset($output); + $_gb = exec("/sbin/ipfw -x {$cpzoneid} show | /usr/bin/grep " . escapeshellarg($value) . " | /usr/bin/grep -v grep | /usr/bin/awk '{print $1}' | /usr/bin/head -n 1", $output); + $ruleno = intval($output[0]); + if (!$rules[$ruleno]) + $ruleno = NULL; + unset($rules); + } + unlock($cpruleslck); + + return $ruleno; +} + +/** + * This function will calculate the traffic produced by a client + * based on its firewall rule + * + * Point of view: NAS + * + * Input means: from the client + * Output means: to the client + * + */ + +function getVolume($ip, $mac = NULL) { + global $config, $cpzone; + + $reverse = empty($config['captiveportal'][$cpzone]['reverseacct']) ? false : true; + $volume = array(); + // Initialize vars properly, since we don't want NULL vars + $volume['input_pkts'] = $volume['input_bytes'] = $volume['output_pkts'] = $volume['output_bytes'] = 0 ; + + $ipfw = pfSense_ipfw_getTablestats($cpzone, 1, $ip, $mac); + if (is_array($ipfw)) { + if ($reverse) { + $volume['output_pkts'] = $ipfw['packets']; + $volume['output_bytes'] = $ipfw['bytes']; + } + else { + $volume['input_pkts'] = $ipfw['packets']; + $volume['input_bytes'] = $ipfw['bytes']; + } + } + + $ipfw = pfSense_ipfw_getTablestats($cpzone, 2, $ip); + if (is_array($ipfw)) { + if ($reverse) { + $volume['input_pkts'] = $ipfw['packets']; + $volume['input_bytes'] = $ipfw['bytes']; + } + else { + $volume['output_pkts'] = $ipfw['packets']; + $volume['output_bytes'] = $ipfw['bytes']; + } + } + + return $volume; +} + +/** + * Get the NAS-IP-Address based on the current wan address + * + * Use functions in interfaces.inc to find this out + * + */ + +function getNasIP() +{ + global $config, $cpzone; + + if (empty($config['captiveportal'][$cpzone]['radiussrcip_attribute'])) { + $nasIp = get_interface_ip(); + } else { + if (is_ipaddr($config['captiveportal'][$cpzone]['radiussrcip_attribute'])) + $nasIp = $config['captiveportal'][$cpzone]['radiussrcip_attribute']; + else + $nasIp = get_interface_ip($config['captiveportal'][$cpzone]['radiussrcip_attribute']); + } + + if(!is_ipaddr($nasIp)) + $nasIp = "0.0.0.0"; + + return $nasIp; +} + +function portal_ip_from_client_ip($cliip) { + global $config, $cpzone; + + $isipv6 = is_ipaddrv6($cliip); + $interfaces = explode(",", $config['captiveportal'][$cpzone]['interface']); + foreach ($interfaces as $cpif) { + if ($isipv6) { + $ip = get_interface_ipv6($cpif); + $sn = get_interface_subnetv6($cpif); + } else { + $ip = get_interface_ip($cpif); + $sn = get_interface_subnet($cpif); + } + if (ip_in_subnet($cliip, "{$ip}/{$sn}")) + return $ip; + } + + $inet = ($isipv6) ? '-inet6' : '-inet'; + $iface = exec_command("/sbin/route -n get {$inet} {$cliip} | /usr/bin/awk '/interface/ { print \$2; };'"); + $iface = trim($iface, "\n"); + if (!empty($iface)) { + $ip = ($isipv6) ? find_interface_ipv6($iface) : find_interface_ip($iface); + if (is_ipaddr($ip)) + return $ip; + } + + // doesn't match up to any particular interface + // so let's set the portal IP to what PHP says + // the server IP issuing the request is. + // allows same behavior as 1.2.x where IP isn't + // in the subnet of any CP interface (static routes, etc.) + // rather than forcing to DNS hostname resolution + $ip = $_SERVER['SERVER_ADDR']; + if (is_ipaddr($ip)) + return $ip; + + return false; +} + +function portal_hostname_from_client_ip($cliip) { + global $config, $cpzone; + + $cpcfg = $config['captiveportal'][$cpzone]; + + if (isset($cpcfg['httpslogin'])) { + $listenporthttps = $cpcfg['listenporthttps'] ? $cpcfg['listenporthttps'] : ($cpcfg['zoneid'] + 8001); + $ourhostname = $cpcfg['httpsname']; + + if ($listenporthttps != 443) + $ourhostname .= ":" . $listenporthttps; + } else { + $listenporthttp = $cpcfg['listenporthttp'] ? $cpcfg['listenporthttp'] : ($cpcfg['zoneid'] + 8000); + $ifip = portal_ip_from_client_ip($cliip); + if (!$ifip) + $ourhostname = "{$config['system']['hostname']}.{$config['system']['domain']}"; + else + $ourhostname = (is_ipaddrv6($ifip)) ? "[{$ifip}]" : "{$ifip}"; + + if ($listenporthttp != 80) + $ourhostname .= ":" . $listenporthttp; + } + + return $ourhostname; +} + +/* functions move from index.php */ + +function portal_reply_page($redirurl, $type = null, $message = null, $clientmac = null, $clientip = null, $username = null, $password = null) { + global $g, $config, $cpzone; + + /* Get captive portal layout */ + if ($type == "redir") { + header("Location: {$redirurl}"); + return; + } else if ($type == "login") + $htmltext = get_include_contents("{$g['varetc_path']}/captiveportal_{$cpzone}.html"); + else + $htmltext = get_include_contents("{$g['varetc_path']}/captiveportal-{$cpzone}-error.html"); + + $cpcfg = $config['captiveportal'][$cpzone]; + + /* substitute the PORTAL_REDIRURL variable */ + if ($cpcfg['preauthurl']) { + $htmltext = str_replace("\$PORTAL_REDIRURL\$", "{$cpcfg['preauthurl']}", $htmltext); + $htmltext = str_replace("#PORTAL_REDIRURL#", "{$cpcfg['preauthurl']}", $htmltext); + } + + /* substitute other variables */ + $ourhostname = portal_hostname_from_client_ip($clientip); + $protocol = (isset($cpcfg['httpslogin'])) ? 'https://' : 'http://'; + $htmltext = str_replace("\$PORTAL_ACTION\$", "{$protocol}{$ourhostname}/", $htmltext); + $htmltext = str_replace("#PORTAL_ACTION#", "{$protocol}{$ourhostname}/", $htmltext); + + $htmltext = str_replace("\$PORTAL_ZONE\$", htmlspecialchars($cpzone), $htmltext); + $htmltext = str_replace("\$PORTAL_REDIRURL\$", htmlspecialchars($redirurl), $htmltext); + $htmltext = str_replace("\$PORTAL_MESSAGE\$", htmlspecialchars($message), $htmltext); + $htmltext = str_replace("\$CLIENT_MAC\$", htmlspecialchars($clientmac), $htmltext); + $htmltext = str_replace("\$CLIENT_IP\$", htmlspecialchars($clientip), $htmltext); + + // Special handling case for captive portal master page so that it can be ran + // through the PHP interpreter using the include method above. We convert the + // $VARIABLE$ case to #VARIABLE# in /etc/inc/captiveportal.inc before writing out. + $htmltext = str_replace("#PORTAL_ZONE#", htmlspecialchars($cpzone), $htmltext); + $htmltext = str_replace("#PORTAL_REDIRURL#", htmlspecialchars($redirurl), $htmltext); + $htmltext = str_replace("#PORTAL_MESSAGE#", htmlspecialchars($message), $htmltext); + $htmltext = str_replace("#CLIENT_MAC#", htmlspecialchars($clientmac), $htmltext); + $htmltext = str_replace("#CLIENT_IP#", htmlspecialchars($clientip), $htmltext); + $htmltext = str_replace("#USERNAME#", htmlspecialchars($username), $htmltext); + $htmltext = str_replace("#PASSWORD#", htmlspecialchars($password), $htmltext); + + echo $htmltext; +} + +function portal_mac_radius($clientmac,$clientip) { + global $config, $cpzone; + + $radmac_secret = $config['captiveportal'][$cpzone]['radmac_secret']; + + /* authentication against the radius server */ + $username = mac_format($clientmac); + $auth_list = radius($username,$radmac_secret,$clientip,$clientmac,"MACHINE LOGIN"); + if ($auth_list['auth_val'] == 2) + return TRUE; + + if (!empty($auth_list['url_redirection'])) + portal_reply_page($auth_list['url_redirection'], "redir"); + + return FALSE; +} + +function captiveportal_reapply_attributes($cpentry, $attributes) { + global $config, $cpzone, $g; + + $dwfaultbw_up = isset($config['captiveportal'][$cpzone]['bwdefaultup']) ? $config['captiveportal'][$cpzone]['bwdefaultup'] : 0; + $dwfaultbw_down = isset($config['captiveportal'][$cpzone]['bwdefaultdn']) ? $config['captiveportal'][$cpzone]['bwdefaultdn'] : 0; + $bw_up = isset($attributes['bw_up']) ? round(intval($attributes['bw_up'])/1000, 2) : $dwfaultbw_up; + $bw_down = isset($attributes['bw_down']) ? round(intval($attributes['bw_down'])/1000, 2) : $dwfaultbw_down; + $bw_up_pipeno = $cpentry[1]; + $bw_down_pipeno = $cpentry[1]+1; + + $_gb = @pfSense_pipe_action("pipe {$bw_up_pipeno} config bw {$bw_up}Kbit/s queue 100 buckets 16"); + $_gb = @pfSense_pipe_action("pipe {$bw_down_pipeno} config bw {$bw_down}Kbit/s queue 100 buckets 16"); + //captiveportal_logportalauth($cpentry[4], $cpentry[3], $cpentry[2], "RADIUS_BANDWIDTH_REAPPLY", "{$bw_up}/{$bw_down}"); + + unset($bw_up_pipeno, $bw_down_pipeno, $bw_up, $bw_down); +} + +function portal_allow($clientip,$clientmac,$username,$password = null, $attributes = null, $pipeno = null, $radiusctx = null) { + global $redirurl, $g, $config, $type, $passthrumac, $_POST, $cpzone, $cpzoneid; + + // Ensure we create an array if we are missing attributes + if (!is_array($attributes)) + $attributes = array(); + + unset($sessionid); + + /* Do not allow concurrent login execution. */ + $cpdblck = lock("captiveportaldb{$cpzone}", LOCK_EX); + + if ($attributes['voucher']) + $remaining_time = $attributes['session_timeout']; + + $writecfg = false; + /* Find an existing session */ + if ((isset($config['captiveportal'][$cpzone]['noconcurrentlogins'])) && $passthrumac) { + if (isset($config['captiveportal'][$cpzone]['passthrumacadd'])) { + $mac = captiveportal_passthrumac_findbyname($username); + if (!empty($mac)) { + if ($_POST['replacemacpassthru']) { + foreach ($config['captiveportal'][$cpzone]['passthrumac'] as $idx => $macent) { + if ($macent['mac'] == $mac['mac']) { + $macrules = ""; + $ruleno = captiveportal_get_ipfw_passthru_ruleno($mac['mac']); + $pipeno = captiveportal_get_dn_passthru_ruleno($mac['mac']); + if ($ruleno) { + captiveportal_free_ipfw_ruleno($ruleno); + $macrules .= "delete {$ruleno}\n"; + ++$ruleno; + $macrules .= "delete {$ruleno}\n"; + } + if ($pipeno) { + captiveportal_free_dn_ruleno($pipeno); + $macrules .= "pipe delete {$pipeno}\n"; + ++$pipeno; + $macrules .= "pipe delete {$pipeno}\n"; + } + unset($config['captiveportal'][$cpzone]['passthrumac'][$idx]); + $mac['action'] = 'pass'; + $mac['mac'] = $clientmac; + $config['captiveportal'][$cpzone]['passthrumac'][] = $mac; + $macrules .= captiveportal_passthrumac_configure_entry($mac); + file_put_contents("{$g['tmp_path']}/macentry_{$cpzone}.rules.tmp", $macrules); + mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/macentry_{$cpzone}.rules.tmp"); + $writecfg = true; + $sessionid = true; + break; + } + } + } else { + portal_reply_page($redirurl, "error", "Username: {$username} is already authenticated using another MAC address.", + $clientmac, $clientip, $username, $password); + unlock($cpdblck); + return; + } + } + } + } + + /* read in client database */ + $query = "WHERE ip = '{$clientip}'"; + $tmpusername = strtolower($username); + if (isset($config['captiveportal'][$cpzone]['noconcurrentlogins'])) + $query .= " OR (username != 'unauthenticated' AND lower(username) = '{$tmpusername}')"; + $cpdb = captiveportal_read_db($query); + + /* Snapshot the timestamp */ + $allow_time = time(); + $radiusservers = captiveportal_get_radius_servers(); + $unsetindexes = array(); + if (is_null($radiusctx)) + $radiusctx = 'first'; + + foreach ($cpdb as $cpentry) { + if (empty($cpentry[11])) { + $cpentry[11] = 'first'; + } + /* on the same ip */ + if ($cpentry[2] == $clientip) { + if (isset($config['captiveportal'][$cpzone]['nomacfilter']) || $cpentry[3] == $clientmac) + captiveportal_logportalauth($cpentry[4],$cpentry[3],$cpentry[2],"CONCURRENT LOGIN - REUSING OLD SESSION"); + else + captiveportal_logportalauth($cpentry[4],$cpentry[3],$cpentry[2],"CONCURRENT LOGIN - REUSING IP {$cpentry[2]} WITH DIFFERENT MAC ADDRESS {$cpentry[3]}"); + $sessionid = $cpentry[5]; + break; + } + elseif (($attributes['voucher']) && ($username != 'unauthenticated') && ($cpentry[4] == $username)) { + // user logged in with an active voucher. Check for how long and calculate + // how much time we can give him (voucher credit - used time) + $remaining_time = $cpentry[0] + $cpentry[7] - $allow_time; + if ($remaining_time < 0) // just in case. + $remaining_time = 0; + + /* This user was already logged in so we disconnect the old one */ + captiveportal_disconnect($cpentry,$radiusservers[$cpentry[11]],13); + captiveportal_logportalauth($cpentry[4],$cpentry[3],$cpentry[2],"CONCURRENT LOGIN - TERMINATING OLD SESSION"); + $unsetindexes[] = $cpentry[5]; + break; + } + elseif ((isset($config['captiveportal'][$cpzone]['noconcurrentlogins'])) && ($username != 'unauthenticated')) { + /* on the same username */ + if (strcasecmp($cpentry[4], $username) == 0) { + /* This user was already logged in so we disconnect the old one */ + captiveportal_disconnect($cpentry,$radiusservers[$cpentry[11]],13); + captiveportal_logportalauth($cpentry[4],$cpentry[3],$cpentry[2],"CONCURRENT LOGIN - TERMINATING OLD SESSION"); + $unsetindexes[] = $cpentry[5]; + break; + } + } + } + unset($cpdb); + + if (!empty($unsetindexes)) + captiveportal_remove_entries($unsetindexes); + + if ($attributes['voucher'] && $remaining_time <= 0) + return 0; // voucher already used and no time left + + if (!isset($sessionid)) { + /* generate unique session ID */ + $tod = gettimeofday(); + $sessionid = substr(md5(mt_rand() . $tod['sec'] . $tod['usec'] . $clientip . $clientmac), 0, 16); + + if ($passthrumac) { + $mac = array(); + $mac['action'] = 'pass'; + $mac['mac'] = $clientmac; + $mac['ip'] = $clientip; /* Used only for logging */ + if (isset($config['captiveportal'][$cpzone]['passthrumacaddusername'])) { + $mac['username'] = $username; + if ($attributes['voucher']) + $mac['logintype'] = "voucher"; + } + $mac['descr'] = "Auto added pass-through MAC for user {$username}"; + if (!empty($bw_up)) + $mac['bw_up'] = $bw_up; + if (!empty($bw_down)) + $mac['bw_down'] = $bw_down; + if (!is_array($config['captiveportal'][$cpzone]['passthrumac'])) + $config['captiveportal'][$cpzone]['passthrumac'] = array(); + $config['captiveportal'][$cpzone]['passthrumac'][] = $mac; + unlock($cpdblck); + $macrules = captiveportal_passthrumac_configure_entry($mac); + file_put_contents("{$g['tmp_path']}/macentry_{$cpzone}.rules.tmp", $macrules); + mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/macentry_{$cpzone}.rules.tmp"); + $writecfg = true; + } else { + /* See if a pipeno is passed, if not start sessions because this means there isn't one atm */ + if (is_null($pipeno)) + $pipeno = captiveportal_get_next_dn_ruleno(); + + /* if the pool is empty, return appropriate message and exit */ + if (is_null($pipeno)) { + portal_reply_page($redirurl, "error", "System reached maximum login capacity"); + log_error("Zone: {$cpzone} - WARNING! Captive portal has reached maximum login capacity"); + unlock($cpdblck); + return; + } + + $dwfaultbw_up = isset($config['captiveportal'][$cpzone]['bwdefaultup']) ? $config['captiveportal'][$cpzone]['bwdefaultup'] : 0; + $dwfaultbw_down = isset($config['captiveportal'][$cpzone]['bwdefaultdn']) ? $config['captiveportal'][$cpzone]['bwdefaultdn'] : 0; + $bw_up = isset($attributes['bw_up']) ? round(intval($attributes['bw_up'])/1000, 2) : $dwfaultbw_up; + $bw_down = isset($attributes['bw_down']) ? round(intval($attributes['bw_down'])/1000, 2) : $dwfaultbw_down; + + $bw_up_pipeno = $pipeno; + $bw_down_pipeno = $pipeno + 1; + //$bw_up /= 1000; // Scale to Kbit/s + $_gb = @pfSense_pipe_action("pipe {$bw_up_pipeno} config bw {$bw_up}Kbit/s queue 100 buckets 16"); + $_gb = @pfSense_pipe_action("pipe {$bw_down_pipeno} config bw {$bw_down}Kbit/s queue 100 buckets 16"); + + $clientsn = (is_ipaddrv6($clientip)) ? 128 : 32; + if (!isset($config['captiveportal'][$cpzone]['nomacfilter'])) + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XADD, 1, $clientip, $clientsn, $clientmac, $bw_up_pipeno); + else + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XADD, 1, $clientip, $clientsn, NULL, $bw_up_pipeno); + + if (!isset($config['captiveportal'][$cpzone]['nomacfilter'])) + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XADD, 2, $clientip, $clientsn, $clientmac, $bw_down_pipeno); + else + $_gb = @pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XADD, 2, $clientip, $clientsn, NULL, $bw_down_pipeno); + + if ($attributes['voucher']) + $attributes['session_timeout'] = $remaining_time; + + /* handle empty attributes */ + $session_timeout = (!empty($attributes['session_timeout'])) ? $attributes['session_timeout'] : 'NULL'; + $idle_timeout = (!empty($attributes['idle_timeout'])) ? $attributes['idle_timeout'] : 'NULL'; + $session_terminate_time = (!empty($attributes['session_terminate_time'])) ? $attributes['session_terminate_time'] : 'NULL'; + $interim_interval = (!empty($attributes['interim_interval'])) ? $attributes['interim_interval'] : 'NULL'; + + /* escape username */ + $safe_username = SQLite3::escapeString($username); + + /* encode password in Base64 just in case it contains commas */ + $bpassword = base64_encode($password); + $insertquery = "INSERT INTO captiveportal (allow_time, pipeno, ip, mac, username, sessionid, bpassword, session_timeout, idle_timeout, session_terminate_time, interim_interval, radiusctx) "; + $insertquery .= "VALUES ({$allow_time}, {$pipeno}, '{$clientip}', '{$clientmac}', '{$safe_username}', '{$sessionid}', '{$bpassword}', "; + $insertquery .= "{$session_timeout}, {$idle_timeout}, {$session_terminate_time}, {$interim_interval}, '{$radiusctx}')"; + + /* store information to database */ + captiveportal_write_db($insertquery); + unlock($cpdblck); + unset($insertquery, $bpassword); + + if (isset($config['captiveportal'][$cpzone]['radacct_enable']) && !empty($radiusservers[$radiusctx])) { + $acct_val = RADIUS_ACCOUNTING_START($pipeno, $username, $sessionid, $radiusservers[$radiusctx], $clientip, $clientmac); + if ($acct_val == 1) + captiveportal_logportalauth($username,$clientmac,$clientip,$type,"RADIUS ACCOUNTING FAILED"); + } + } + } else { + /* NOTE: #3062-11 If the pipeno has been allocated free it to not DoS the CP and maintain proper operation as in radius() case */ + if (!is_null($pipeno)) + captiveportal_free_dn_ruleno($pipeno); + + unlock($cpdblck); + } + + if ($writecfg == true) + write_config(); + + /* redirect user to desired destination */ + if (!empty($attributes['url_redirection'])) + $my_redirurl = $attributes['url_redirection']; + else if (!empty($redirurl)) + $my_redirurl = $redirurl; + else if (!empty($config['captiveportal'][$cpzone]['redirurl'])) + $my_redirurl = $config['captiveportal'][$cpzone]['redirurl']; + + if(isset($config['captiveportal'][$cpzone]['logoutwin_enable']) && !$passthrumac) { + $ourhostname = portal_hostname_from_client_ip($clientip); + $protocol = (isset($config['captiveportal'][$cpzone]['httpslogin'])) ? 'https://' : 'http://'; + $logouturl = "{$protocol}{$ourhostname}/"; + + if (isset($attributes['reply_message'])) + $message = $attributes['reply_message']; + else + $message = 0; + + include("{$g['varetc_path']}/captiveportal-{$cpzone}-logout.html"); + + } else { + portal_reply_page($my_redirurl, "redir", "Just redirect the user."); + } + + return $sessionid; +} + + +/* + * Used for when pass-through credits are enabled. + * Returns true when there was at least one free login to deduct for the MAC. + * Expired entries are removed as they are seen. + * Active entries are updated according to the configuration. + */ +function portal_consume_passthrough_credit($clientmac) { + global $config, $cpzone; + + if (!empty($config['captiveportal'][$cpzone]['freelogins_count']) && is_numeric($config['captiveportal'][$cpzone]['freelogins_count'])) + $freeloginscount = $config['captiveportal'][$cpzone]['freelogins_count']; + else + return false; + + if (!empty($config['captiveportal'][$cpzone]['freelogins_resettimeout']) && is_numeric($config['captiveportal'][$cpzone]['freelogins_resettimeout'])) + $resettimeout = $config['captiveportal'][$cpzone]['freelogins_resettimeout']; + else + return false; + + if ($freeloginscount < 1 || $resettimeout <= 0 || !$clientmac) + return false; + + $updatetimeouts = isset($config['captiveportal'][$cpzone]['freelogins_updatetimeouts']); + + /* + * Read database of used MACs. Lines are a comma-separated list + * of the time, MAC, then the count of pass-through credits remaining. + */ + $usedmacs = captiveportal_read_usedmacs_db(); + + $currenttime = time(); + $found = false; + foreach ($usedmacs as $key => $usedmac) { + $usedmac = explode(",", $usedmac); + + if ($usedmac[1] == $clientmac) { + if ($usedmac[0] + ($resettimeout * 3600) > $currenttime) { + if ($usedmac[2] < 1) { + if ($updatetimeouts) { + $usedmac[0] = $currenttime; + unset($usedmacs[$key]); + $usedmacs[] = implode(",", $usedmac); + captiveportal_write_usedmacs_db($usedmacs); + } + + return false; + } else { + $usedmac[2] -= 1; + $usedmacs[$key] = implode(",", $usedmac); + } + + $found = true; + } else + unset($usedmacs[$key]); + + break; + } else if ($usedmac[0] + ($resettimeout * 3600) <= $currenttime) + unset($usedmacs[$key]); + } + + if (!$found) { + $usedmac = array($currenttime, $clientmac, $freeloginscount - 1); + $usedmacs[] = implode(",", $usedmac); + } + + captiveportal_write_usedmacs_db($usedmacs); + return true; +} + +function captiveportal_read_usedmacs_db() { + global $g, $cpzone; + + $cpumaclck = lock("captiveusedmacs{$cpzone}"); + if (file_exists("{$g['vardb_path']}/captiveportal_usedmacs_{$cpzone}.db")) { + $usedmacs = file("{$g['vardb_path']}/captiveportal_usedmacs_{$cpzone}.db", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if (!$usedmacs) + $usedmacs = array(); + } else + $usedmacs = array(); + + unlock($cpumaclck); + return $usedmacs; +} + +function captiveportal_write_usedmacs_db($usedmacs) { + global $g, $cpzone; + + $cpumaclck = lock("captiveusedmacs{$cpzone}", LOCK_EX); + @file_put_contents("{$g['vardb_path']}/captiveportal_usedmacs_{$cpzone}.db", implode("\n", $usedmacs)); + unlock($cpumaclck); +} + +function captiveportal_blocked_mac($mac) { + global $config, $g, $cpzone; + + if (empty($mac) || !is_macaddr($mac)) + return false; + + if (!is_array($config['captiveportal'][$cpzone]['passthrumac'])) + return false; + + foreach ($config['captiveportal'][$cpzone]['passthrumac'] as $passthrumac) + if (($passthrumac['action'] == 'block') && + ($passthrumac['mac'] == strtolower($mac))) + return true; + + return false; + +} + +function captiveportal_send_server_accounting($off = false) { + global $cpzone, $config; + + if (!isset($config['captiveportal'][$cpzone]['radacct_enable'])) { + return; + } + if ($off) { + $racct = new Auth_RADIUS_Acct_Off; + } else { + $racct = new Auth_RADIUS_Acct_On; + } + $radiusservers = captiveportal_get_radius_servers(); + if (empty($radiusservers)) { + return; + } + foreach ($radiusservers['first'] as $radsrv) { + // Add a new server to our instance + $racct->addServer($radsrv['ipaddr'], $radsrv['acctport'], $radsrv['key']); + } + if (PEAR::isError($racct->start())) { + $retvalue['acct_val'] = 1; + $retvalue['error'] = $racct->getMessage(); + + // If we encounter an error immediately stop this function and go back + $racct->close(); + return $retvalue; + } + // Send request + $result = $racct->send(); + // Evaluation of the response + // 5 -> Accounting-Response + // See RFC2866 for this. + if (PEAR::isError($result)) { + $retvalue['acct_val'] = 1; + $retvalue['error'] = $result->getMessage(); + } else if ($result === true) { + $retvalue['acct_val'] = 5 ; + } else { + $retvalue['acct_val'] = 1 ; + } + + $racct->close(); + return $retvalue; +} +?> diff --git a/usr/etc/inc/certs.inc b/usr/etc/inc/certs.inc new file mode 100644 index 000000000..8df3e5d21 --- /dev/null +++ b/usr/etc/inc/certs.inc @@ -0,0 +1,755 @@ + + 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. + + DISABLE_PHP_LINT_CHECKING + pfSense_MODULE: certificate_managaer +*/ + +define("OPEN_SSL_CONF_PATH", "/etc/ssl/openssl.cnf"); + +require_once("functions.inc"); + +global $openssl_digest_algs; +$openssl_digest_algs = array("sha1", "sha224", "sha256", "sha384", "sha512"); + +global $openssl_crl_status; +$openssl_crl_status = array( + OCSP_REVOKED_STATUS_NOSTATUS => "No Status (default)", + OCSP_REVOKED_STATUS_UNSPECIFIED => "Unspecified", + OCSP_REVOKED_STATUS_KEYCOMPROMISE => "Key Compromise", + OCSP_REVOKED_STATUS_CACOMPROMISE => "CA Compromise", + OCSP_REVOKED_STATUS_AFFILIATIONCHANGED => "Affiliation Changed", + OCSP_REVOKED_STATUS_SUPERSEDED => "Superseded", + OCSP_REVOKED_STATUS_CESSATIONOFOPERATION => "Cessation of Operation", + OCSP_REVOKED_STATUS_CERTIFICATEHOLD => "Certificate Hold" +); + +function & lookup_ca($refid) { + global $config; + + if (is_array($config['ca'])) + foreach ($config['ca'] as & $ca) + if ($ca['refid'] == $refid) + return $ca; + + return false; +} + +function & lookup_ca_by_subject($subject) { + global $config; + + if (is_array($config['ca'])) + foreach ($config['ca'] as & $ca) + { + $ca_subject = cert_get_subject($ca['crt']); + if ($ca_subject == $subject) + return $ca; + } + + return false; +} + +function & lookup_cert($refid) { + global $config; + + if (is_array($config['cert'])) + foreach ($config['cert'] as & $cert) + if ($cert['refid'] == $refid) + return $cert; + + return false; +} + +function & lookup_cert_by_name($name) { + global $config; + if (is_array($config['cert'])) + foreach ($config['cert'] as & $cert) + if ($cert['descr'] == $name) + return $cert; +} + +function & lookup_crl($refid) { + global $config; + + if (is_array($config['crl'])) + foreach ($config['crl'] as & $crl) + if ($crl['refid'] == $refid) + return $crl; + + return false; +} + +function ca_chain_array(& $cert) { + if($cert['caref']) { + $chain = array(); + $crt = lookup_ca($cert['caref']); + $chain[] = $crt; + while ($crt) { + $caref = $crt['caref']; + if($caref) + $crt = lookup_ca($caref); + else + $crt = false; + if($crt) + $chain[] = $crt; + } + return $chain; + } + return false; +} + +function ca_chain(& $cert) { + if($cert['caref']) { + $ca = ""; + $cas = ca_chain_array($cert); + if (is_array($cas)) + foreach ($cas as & $ca_cert) + { + $ca .= base64_decode($ca_cert['crt']); + $ca .= "\n"; + } + return $ca; + } + return ""; +} + +function ca_import(& $ca, $str, $key="", $serial=0) { + global $config; + + $ca['crt'] = base64_encode($str); + if (!empty($key)) + $ca['prv'] = base64_encode($key); + if (!empty($serial)) + $ca['serial'] = $serial; + $subject = cert_get_subject($str, false); + $issuer = cert_get_issuer($str, false); + + // Find my issuer unless self-signed + if($issuer <> $subject) { + $issuer_crt =& lookup_ca_by_subject($issuer); + if($issuer_crt) + $ca['caref'] = $issuer_crt['refid']; + } + + /* Correct if child certificate was loaded first */ + if (is_array($config['ca'])) + foreach ($config['ca'] as & $oca) + { + $issuer = cert_get_issuer($oca['crt']); + if($ca['refid']<>$oca['refid'] && $issuer==$subject) + $oca['caref'] = $ca['refid']; + } + if (is_array($config['cert'])) + foreach ($config['cert'] as & $cert) + { + $issuer = cert_get_issuer($cert['crt']); + if($issuer==$subject) + $cert['caref'] = $ca['refid']; + } + return true; +} + +function ca_create(& $ca, $keylen, $lifetime, $dn, $digest_alg = "sha256") { + + $args = array( + "x509_extensions" => "v3_ca", + "digest_alg" => $digest_alg, + "private_key_bits" => (int)$keylen, + "private_key_type" => OPENSSL_KEYTYPE_RSA, + "encrypt_key" => false); + + // generate a new key pair + $res_key = openssl_pkey_new($args); + if (!$res_key) return false; + + // generate a certificate signing request + $res_csr = openssl_csr_new($dn, $res_key, $args); + if (!$res_csr) return false; + + // self sign the certificate + $res_crt = openssl_csr_sign($res_csr, null, $res_key, $lifetime, $args); + if (!$res_crt) return false; + + // export our certificate data + if (!openssl_pkey_export($res_key, $str_key) || + !openssl_x509_export($res_crt, $str_crt)) + return false; + + // return our ca information + $ca['crt'] = base64_encode($str_crt); + $ca['prv'] = base64_encode($str_key); + $ca['serial'] = 0; + + return true; +} + +function ca_inter_create(& $ca, $keylen, $lifetime, $dn, $caref, $digest_alg = "sha256") { + // Create Intermediate Certificate Authority + $signing_ca =& lookup_ca($caref); + if (!$signing_ca) + return false; + + $signing_ca_res_crt = openssl_x509_read(base64_decode($signing_ca['crt'])); + $signing_ca_res_key = openssl_pkey_get_private(array(0 => base64_decode($signing_ca['prv']) , 1 => "")); + if (!$signing_ca_res_crt || !$signing_ca_res_key) return false; + $signing_ca_serial = ++$signing_ca['serial']; + + $args = array( + "x509_extensions" => "v3_ca", + "digest_alg" => $digest_alg, + "private_key_bits" => (int)$keylen, + "private_key_type" => OPENSSL_KEYTYPE_RSA, + "encrypt_key" => false); + + // generate a new key pair + $res_key = openssl_pkey_new($args); + if (!$res_key) return false; + + // generate a certificate signing request + $res_csr = openssl_csr_new($dn, $res_key, $args); + if (!$res_csr) return false; + + // Sign the certificate + $res_crt = openssl_csr_sign($res_csr, $signing_ca_res_crt, $signing_ca_res_key, $lifetime, $args, $signing_ca_serial); + if (!$res_crt) return false; + + // export our certificate data + if (!openssl_pkey_export($res_key, $str_key) || + !openssl_x509_export($res_crt, $str_crt)) + return false; + + // return our ca information + $ca['crt'] = base64_encode($str_crt); + $ca['prv'] = base64_encode($str_key); + $ca['serial'] = 0; + + return true; +} + +function cert_import(& $cert, $crt_str, $key_str) { + + $cert['crt'] = base64_encode($crt_str); + $cert['prv'] = base64_encode($key_str); + + $subject = cert_get_subject($crt_str, false); + $issuer = cert_get_issuer($crt_str, false); + + // Find my issuer unless self-signed + if($issuer <> $subject) { + $issuer_crt =& lookup_ca_by_subject($issuer); + if($issuer_crt) + $cert['caref'] = $issuer_crt['refid']; + } + return true; +} + +function cert_create(& $cert, $caref, $keylen, $lifetime, $dn, $type="user", $digest_alg = "sha256") { + + $ca =& lookup_ca($caref); + if (!$ca) + return false; + + $ca_str_crt = base64_decode($ca['crt']); + $ca_str_key = base64_decode($ca['prv']); + $ca_res_crt = openssl_x509_read($ca_str_crt); + $ca_res_key = openssl_pkey_get_private(array(0 => $ca_str_key, 1 => "")); + if(!$ca_res_key) return false; + $ca_serial = ++$ca['serial']; + + switch ($type) { + case "ca": + $cert_type = "v3_ca"; + break; + case "server": + $cert_type = "server"; + break; + default: + $cert_type = "usr_cert"; + break; + } + + // in case of using Subject Alternative Names use other sections (with postfix '_san') + // pass subjectAltName over environment variable 'SAN' + if ($dn['subjectAltName']) { + putenv("SAN={$dn['subjectAltName']}"); // subjectAltName can be set _only_ via configuration file + $cert_type .= '_san'; + unset($dn['subjectAltName']); + } + + $args = array( + "x509_extensions" => $cert_type, + "digest_alg" => $digest_alg, + "private_key_bits" => (int)$keylen, + "private_key_type" => OPENSSL_KEYTYPE_RSA, + "encrypt_key" => false); + + // generate a new key pair + $res_key = openssl_pkey_new($args); + if(!$res_key) return false; + + // generate a certificate signing request + $res_csr = openssl_csr_new($dn, $res_key, $args); + if(!$res_csr) return false; + + // self sign the certificate + $res_crt = openssl_csr_sign($res_csr, $ca_res_crt, $ca_res_key, $lifetime, + $args, $ca_serial); + if(!$res_crt) return false; + + // export our certificate data + if (!openssl_pkey_export($res_key, $str_key) || + !openssl_x509_export($res_crt, $str_crt)) + return false; + + // return our certificate information + $cert['caref'] = $caref; + $cert['crt'] = base64_encode($str_crt); + $cert['prv'] = base64_encode($str_key); + $cert['type'] = $type; + + return true; +} + +function csr_generate(& $cert, $keylen, $dn, $digest_alg = "sha256") { + + $args = array( + "x509_extensions" => "v3_req", + "digest_alg" => $digest_alg, + "private_key_bits" => (int)$keylen, + "private_key_type" => OPENSSL_KEYTYPE_RSA, + "encrypt_key" => false); + + // generate a new key pair + $res_key = openssl_pkey_new($args); + if(!$res_key) return false; + + // generate a certificate signing request + $res_csr = openssl_csr_new($dn, $res_key, $args); + if(!$res_csr) return false; + + // export our request data + if (!openssl_pkey_export($res_key, $str_key) || + !openssl_csr_export($res_csr, $str_csr)) + return false; + + // return our request information + $cert['csr'] = base64_encode($str_csr); + $cert['prv'] = base64_encode($str_key); + + return true; +} + +function csr_complete(& $cert, $str_crt) { + + // return our request information + $cert['crt'] = base64_encode($str_crt); + unset($cert['csr']); + + return true; +} + +function csr_get_subject($str_crt, $decode = true) { + + if ($decode) + $str_crt = base64_decode($str_crt); + + $components = openssl_csr_get_subject($str_crt); + + if (empty($components) || !is_array($components)) + return "unknown"; + + ksort($components); + foreach ($components as $a => $v) { + if (!strlen($subject)) + $subject = "{$a}={$v}"; + else + $subject = "{$a}={$v}, {$subject}"; + } + + return $subject; +} + +function cert_get_subject($str_crt, $decode = true) { + + if ($decode) + $str_crt = base64_decode($str_crt); + + $inf_crt = openssl_x509_parse($str_crt); + $components = $inf_crt['subject']; + + if (empty($components) || !is_array($components)) + return "unknown"; + + ksort($components); + foreach ($components as $a => $v) { + if (is_array($v)) { + ksort($v); + foreach ($v as $w) { + $asubject = "{$a}={$w}"; + $subject = (strlen($subject)) ? "{$asubject}, {$subject}" : $asubject; + } + } else { + $asubject = "{$a}={$v}"; + $subject = (strlen($subject)) ? "{$asubject}, {$subject}" : $asubject; + } + } + + return $subject; +} + +function cert_get_subject_array($crt) { + $str_crt = base64_decode($crt); + $inf_crt = openssl_x509_parse($str_crt); + $components = $inf_crt['subject']; + + if (!is_array($components)) + return; + + $subject_array = array(); + + foreach($components as $a => $v) + $subject_array[] = array('a' => $a, 'v' => $v); + + return $subject_array; +} + +function cert_get_subject_hash($crt) { + $str_crt = base64_decode($crt); + $inf_crt = openssl_x509_parse($str_crt); + return $inf_crt['subject']; +} + +function cert_get_issuer($str_crt, $decode = true) { + + if ($decode) + $str_crt = base64_decode($str_crt); + + $inf_crt = openssl_x509_parse($str_crt); + $components = $inf_crt['issuer']; + + if (empty($components) || !is_array($components)) + return "unknown"; + + ksort($components); + foreach ($components as $a => $v) { + if (is_array($v)) { + ksort($v); + foreach ($v as $w) { + $aissuer = "{$a}={$w}"; + $issuer = (strlen($issuer)) ? "{$aissuer}, {$issuer}" : $aissuer; + } + } else { + $aissuer = "{$a}={$v}"; + $issuer = (strlen($issuer)) ? "{$aissuer}, {$issuer}" : $aissuer; + } + } + + return $issuer; +} + +/* this function works on x509 (crt), rsa key (prv), and req(csr) */ +function cert_get_modulus($str_crt, $decode = true, $type = "crt"){ + if ($decode) + $str_crt = base64_decode($str_crt); + + $modulus = ""; + if ( in_array($type, array("crt", "prv", "csr")) ) { + $type = str_replace( array("crt","prv","csr"), array("x509","rsa","req"), $type); + $modulus = exec("echo \"{$str_crt}\" | openssl {$type} -noout -modulus"); + } + return $modulus; +} +function csr_get_modulus($str_crt, $decode = true){ + return cert_get_modulus($str_crt, $decode, "csr"); +} + +function cert_get_purpose($str_crt, $decode = true) { + if ($decode) + $str_crt = base64_decode($str_crt); + $crt_details = openssl_x509_parse($str_crt); + $purpose = array(); + $purpose['ca'] = (stristr($crt_details['extensions']['basicConstraints'], 'CA:TRUE') === false) ? 'No': 'Yes'; + $purpose['server'] = ($crt_details['extensions']['nsCertType'] == "SSL Server") ? 'Yes': 'No'; + return $purpose; +} + +function cert_get_dates($str_crt, $decode = true) { + if ($decode) + $str_crt = base64_decode($str_crt); + $crt_details = openssl_x509_parse($str_crt); + if ($crt_details['validFrom_time_t'] > 0) + $start = date('r', $crt_details['validFrom_time_t']); + if ($crt_details['validTo_time_t'] > 0) + $end = date('r', $crt_details['validTo_time_t']); + return array($start, $end); +} + +function cert_get_serial($str_crt, $decode = true) { + if ($decode) + $str_crt = base64_decode($str_crt); + $crt_details = openssl_x509_parse($str_crt); + if (isset($crt_details['serialNumber']) && !empty($crt_details['serialNumber'])) + return $crt_details['serialNumber']; + else + return NULL; +} + +function prv_get_modulus($str_crt, $decode = true){ + return cert_get_modulus($str_crt, $decode, "prv"); +} + +function is_user_cert($certref) { + global $config; + if (!is_array($config['system']['user'])) + return; + foreach ($config['system']['user'] as $user) { + if (!is_array($user['cert'])) + continue; + foreach ($user['cert'] as $cert) { + if ($certref == $cert) + return true; + } + } + return false; +} + +function is_openvpn_server_cert($certref) { + global $config; + if (!is_array($config['openvpn']['openvpn-server'])) + return; + foreach ($config['openvpn']['openvpn-server'] as $ovpns) { + if ($ovpns['certref'] == $certref) + return true; + } + return false; +} + +function is_openvpn_client_cert($certref) { + global $config; + if (!is_array($config['openvpn']['openvpn-client'])) + return; + foreach ($config['openvpn']['openvpn-client'] as $ovpnc) { + if ($ovpnc['certref'] == $certref) + return true; + } + return false; +} + +function is_ipsec_cert($certref) { + global $config; + if (!is_array($config['ipsec']['phase1'])) + return; + foreach ($config['ipsec']['phase1'] as $ipsec) { + if ($ipsec['certref'] == $certref) + return true; + } + return false; +} + +function is_webgui_cert($certref) { + global $config; + if (($config['system']['webgui']['ssl-certref'] == $certref) + && ($config['system']['webgui']['protocol'] != "http")) + return true; +} + +function is_captiveportal_cert($certref) { + global $config; + if (!is_array($config['captiveportal'])) + return; + foreach ($config['captiveportal'] as $portal) { + if (isset($portal['enable']) && isset($portal['httpslogin']) && ($portal['certref'] == $certref)) + return true; + } + return false; +} + +function cert_in_use($certref) { + return (is_webgui_cert($certref) || + is_user_cert($certref) || + is_openvpn_server_cert($certref) || + is_openvpn_client_cert($certref) || + is_ipsec_cert($certref) || + is_captiveportal_cert($certref)); +} + +function crl_create(& $crl, $caref, $name, $serial=0, $lifetime=9999) { + global $config; + $ca =& lookup_ca($caref); + if (!$ca) + return false; + $crl['descr'] = $name; + $crl['caref'] = $caref; + $crl['serial'] = $serial; + $crl['lifetime'] = $lifetime; + $crl['cert'] = array(); + $crl_res = crl_update($crl); + $config['crl'][] = $crl; + return $crl_res; +} + +function crl_update(& $crl) { + global $config; + $ca =& lookup_ca($crl['caref']); + if (!$ca) + return false; + // If we have text but no certs, it was imported and cannot be updated. + if (($crl["method"] != "internal") && (!empty($crl['text']) && empty($crl['cert']))) + return false; + $crl['serial']++; + $ca_str_crt = base64_decode($ca['crt']); + $ca_str_key = base64_decode($ca['prv']); + $crl_res = openssl_crl_new($ca_str_crt, $crl['serial'], $crl['lifetime']); + if (is_array($crl['cert']) && (count($crl['cert']) > 0)) { + foreach ($crl['cert'] as $cert) { + openssl_crl_revoke_cert($crl_res, base64_decode($cert["crt"]), $cert["revoke_time"], $cert["reason"]); + } + } + openssl_crl_export($crl_res, $crl_text, $ca_str_key); + $crl['text'] = base64_encode($crl_text); + return $crl_res; +} + +function cert_revoke($cert, & $crl, $reason=OCSP_REVOKED_STATUS_UNSPECIFIED) { + global $config; + if (is_cert_revoked($cert, $crl['refid'])) + return true; + // If we have text but no certs, it was imported and cannot be updated. + if (!is_crl_internal($crl)) + return false; + $cert["reason"] = $reason; + $cert["revoke_time"] = time(); + $crl["cert"][] = $cert; + crl_update($crl); + return true; +} + +function cert_unrevoke($cert, & $crl) { + global $config; + if (!is_crl_internal($crl)) + return false; + foreach ($crl['cert'] as $id => $rcert) { + if (($rcert['refid'] == $cert['refid']) || ($rcert['descr'] == $cert['descr'])) { + unset($crl['cert'][$id]); + if (count($crl['cert']) == 0) { + // Protect against accidentally switching the type to imported, for older CRLs + if (!isset($crl['method'])) + $crl['method'] = "internal"; + crl_update($crl); + } else + crl_update($crl); + return true; + } + } + return false; +} + +/* Compare two certificates to see if they match. */ +function cert_compare($cert1, $cert2) { + /* Ensure two certs are identical by first checking that their issuers match, then + subjects, then serial numbers, and finally the moduli. Anything less strict + could accidentally count two similar, but different, certificates as + being identical. */ + $c1 = base64_decode($cert1['crt']); + $c2 = base64_decode($cert2['crt']); + if ((cert_get_issuer($c1, false) == cert_get_issuer($c2, false)) + && (cert_get_subject($c1, false) == cert_get_subject($c2, false)) + && (cert_get_serial($c1, false) == cert_get_serial($c2, false)) + && (cert_get_modulus($c1, false) == cert_get_modulus($c2, false))) + return true; + return false; +} + +function is_cert_revoked($cert, $crlref = "") { + global $config; + if (!is_array($config['crl'])) + return false; + + if (!empty($crlref)) { + $crl = lookup_crl($crlref); + if (!is_array($crl['cert'])) + return false; + foreach ($crl['cert'] as $rcert) { + if (cert_compare($rcert, $cert)) + return true; + } + } else { + foreach ($config['crl'] as $crl) { + if (!is_array($crl['cert'])) + continue; + foreach ($crl['cert'] as $rcert) { + if (cert_compare($rcert, $cert)) + return true; + } + } + } + return false; +} + +function is_openvpn_server_crl($crlref) { + global $config; + if (!is_array($config['openvpn']['openvpn-server'])) + return; + foreach ($config['openvpn']['openvpn-server'] as $ovpns) { + if (!empty($ovpns['crlref']) && ($ovpns['crlref'] == $crlref)) + return true; + } + return false; +} + +// Keep this general to allow for future expansion. See cert_in_use() above. +function crl_in_use($crlref) { + return (is_openvpn_server_crl($crlref)); +} + +function is_crl_internal($crl) { + return (!(!empty($crl['text']) && empty($crl['cert'])) || ($crl["method"] == "internal")); +} + +function cert_get_cn($crt, $isref = false) { + /* If this is a certref, not an actual cert, look up the cert first */ + if ($isref) { + $cert = lookup_cert($crt); + /* If it's not a valid cert, bail. */ + if (!(is_array($cert) && !empty($cert['crt']))) + return ""; + $cert = $cert['crt']; + } else { + $cert = $crt; + } + $sub = cert_get_subject_array($cert); + if (is_array($sub)) { + foreach ($sub as $s) { + if (strtoupper($s['a']) == "CN") + return $s['v']; + } + } + return ""; +} + +?> diff --git a/usr/etc/inc/config.console.inc b/usr/etc/inc/config.console.inc new file mode 100644 index 000000000..474f4a045 --- /dev/null +++ b/usr/etc/inc/config.console.inc @@ -0,0 +1,530 @@ +. + 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. + + + pfSense_BUILDER_BINARIES: /sbin/mount /sbin/umount /sbin/halt /sbin/fsck + pfSense_MODULE: config +*/ + +function set_networking_interfaces_ports() { + global $noreboot; + global $config; + global $g; + global $fp; + + $fp = fopen('php://stdin', 'r'); + + $memory = get_memory(); + $physmem = $memory[0]; + $realmem = $memory[1]; + + if($physmem < $g['minimum_ram_warning']) { + echo "\n\n\n"; + echo gettext("DANGER! WARNING! ACHTUNG!") . "\n\n"; + printf(gettext("%s requires *AT LEAST* %s RAM to function correctly.%s"), $g['product_name'], $g['minimum_ram_warning_text'], "\n"); + printf(gettext("Only (%s) MB RAM has been detected, with (%s) available to %s.%s"), $realmem, $physmem, $g['product_name'], "\n"); + echo "\n" . gettext("Press ENTER to continue.") . " "; + fgets($fp); + echo "\n"; + } + + $iflist = get_interface_list(); + +/* Function flow is based on $key and $auto_assign or the lack thereof */ + $key = null; + +/* Only present auto interface option if running from LiveCD and interface mismatch*/ + if ((preg_match("/cdrom/", $g['platform'])) && is_interface_mismatch()) + $auto_assign = false; + + echo << $ifa) { + echo sprintf("% -7s%s %s %s\n", $iface, $ifa['mac'], + $ifa['up'] ? " (up)" : "(down)", $ifa['dmesg']); + } + } + + if ($auto_assign) { + echo << $ifa) { + if ($ifa['up']) + $plugged_in[] = $iface; + + } + + $lanif = array_shift($plugged_in); + $wanif = array_shift($plugged_in); + + if(isset($lanif) && !isset($wanif)) { + foreach ($iflist as $iface => $ifa) { + if ($iface != $lanif) { + $wanif = $iface; + break; + } + } + } + + echo << "") { + while (1) { + if ($optif[$i]) + $i++; + $io = $i + 1; + + if($config['interfaces']['opt' . $io]['descr']) + printf(gettext("%sOptional interface %s description found: %s"), "\n", $io, $config['interfaces']['opt' . $io]['descr']); + + printf(gettext("%sEnter the Optional %s interface name or 'a' for auto-detection%s" . + "(or nothing if finished):%s"), "\n", $io, "\n", " "); + + $optif[$i] = chop(fgets($fp)); + + if ($optif[$i]) { + if ($optif[$i] === "a") { + $ad = autodetect_interface(gettext("Optional") . " " . $io, $fp); + if ($ad) + $optif[$i] = $ad; + else + unset($optif[$i]); + } else if (!array_key_exists($optif[$i], $iflist)) { + printf(gettext("%sInvalid interface name '%s'%s"), "\n", $optif[$i], "\n"); + unset($optif[$i]); + continue; + } + } else { + unset($optif[$i]); + break; + } + } + } + + /* check for double assignments */ + $ifarr = array_merge(array($lanif, $wanif), $optif); + + for ($i = 0; $i < (count($ifarr)-1); $i++) { + for ($j = ($i+1); $j < count($ifarr); $j++) { + if ($ifarr[$i] == $ifarr[$j]) { + echo << " . $wanif . "\n"; + if ($lanif != "") + echo "LAN -> " . $lanif . "\n"; + for ($i = 0; $i < count($optif); $i++) { + echo "OPT" . ($i+1) . " -> " . $optif[$i] . "\n"; + } + + echo << $ifa) { + if (!$ifa['up'] && $iflist[$ifn]['up']) { + printf(gettext("Detected link-up on interface %s.%s"), $ifn, "\n"); + return $ifn; + } + } + + printf(gettext("No link-up detected.%s"), "\n"); + + return null; +} + +function interfaces_setup() { + global $iflist, $config, $g, $fp; + + $iflist = get_interface_list(); + + +} + +function vlan_setup() { + global $iflist, $config, $g, $fp; + + $iflist = get_interface_list(); + + if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { + + echo << $ifa) { + if (is_jumbo_capable($iface)) { + echo sprintf("% -8s%s%s\n", $iface, $ifa['mac'], + $ifa['up'] ? " (up)" : ""); + $vlan_capable++; + } + } + } + + if($vlan_capable == 0) { + echo gettext("No VLAN capable interfaces detected.") . "\n"; + return; + } + + echo "\n" . gettext("Enter the parent interface name for the new VLAN (or nothing if finished):") . " "; + $vlan['if'] = chop(fgets($fp)); + + if ($vlan['if']) { + if (!array_key_exists($vlan['if'], $iflist) or + !is_jumbo_capable($vlan['if'])) { + printf(gettext("%sInvalid interface name '%s'%s"), "\n", $vlan['if'], "\n"); + continue; + } + } else { + break; + } + + echo gettext("Enter the VLAN tag (1-4094):") . " "; + $vlan['tag'] = chop(fgets($fp)); + $vlan['vlanif'] = "{$vlan['if']}_vlan{$vlan['tag']}"; + if (!is_numericint($vlan['tag']) || ($vlan['tag'] < 1) || ($vlan['tag'] > 4094)) { + printf(gettext("%sInvalid VLAN tag '%s'%s"), "\n", $vlan['tag'], "\n"); + continue; + } + + $config['vlans']['vlan'][] = $vlan; + $vlanif++; + } +} + +?> diff --git a/usr/etc/inc/config.gui.inc b/usr/etc/inc/config.gui.inc new file mode 100644 index 000000000..3eec79515 --- /dev/null +++ b/usr/etc/inc/config.gui.inc @@ -0,0 +1,87 @@ +. + 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. + + + pfSense_BUILDER_BINARIES: /sbin/mount /sbin/umount /sbin/halt /sbin/fsck + pfSense_MODULE: config +*/ + +require_once("globals.inc"); + +/* do not load this file twice. */ +if($config_parsed == true) + return; +else + $config_parsed = true; + +/* include globals from notices.inc /utility/XML parser files */ +require_once('config.lib.inc'); +require_once("notices.inc"); +require_once("util.inc"); +require_once("IPv6.inc"); +if(file_exists("/cf/conf/use_xmlreader")) + require_once("xmlreader.inc"); +else + require_once("xmlparse.inc"); +require_once("crypt.inc"); + +/* read platform */ +if (file_exists("{$g['etc_path']}/platform")) { + $g['platform'] = chop(file_get_contents("{$g['etc_path']}/platform")); +} else { + $g['platform'] = "unknown"; +} + +/* if /debugging exists, lets set $debugging + so we can output more information */ +if(file_exists("/debugging")) { + $debugging = true; + $g['debug'] = true; +} + +$config = parse_config(); + +if($config_parsed == true) { + /* process packager manager custom rules */ + if(is_dir("/usr/local/pkg/parse_config")) { + run_plugins("/usr/local/pkg/parse_config/"); + } +} + +?> diff --git a/usr/etc/inc/config.inc b/usr/etc/inc/config.inc new file mode 100644 index 000000000..e02706276 --- /dev/null +++ b/usr/etc/inc/config.inc @@ -0,0 +1,224 @@ +. + 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. + + + pfSense_BUILDER_BINARIES: /sbin/mount /sbin/umount /sbin/halt /sbin/fsck + pfSense_MODULE: config +*/ + +if($g['booting']) echo "."; + +/* do not load this file twice. */ +//if (in_array("/etc/inc/config.inc", get_included_files())) +// return; + +// Set the memory limit to 128M on i386. When someone has something like 500+ tunnels +// the parser needs quite a bit of ram. Do not remove this line unless you +// know what you are doing. If in doubt, check with dev@ _/FIRST/_! +if(!$ARCH) + $ARCH = php_uname("m"); + +// Set memory limit to 256M on amd64. +if($ARCH == "amd64") + ini_set("memory_limit","256M"); +else + ini_set("memory_limit","128M"); + +/* include globals from notices.inc /utility/XML parser files */ +require_once("notices.inc"); +if($g['booting']) echo "."; +require_once("util.inc"); +if($g['booting']) echo "."; +require_once("IPv6.inc"); +if($g['booting']) echo "."; +require_once('config.lib.inc'); +if($g['booting']) echo "."; +if(file_exists("/cf/conf/use_xmlreader")) + require_once("xmlreader.inc"); +else + require_once("xmlparse.inc"); +if($g['booting']) echo "."; +require_once("crypt.inc"); + +/* read platform */ +if($g['booting']) echo "."; +if (file_exists("{$g['etc_path']}/platform")) { + $g['platform'] = chop(file_get_contents("{$g['etc_path']}/platform")); +} else { + $g['platform'] = "unknown"; +} + +/* if /debugging exists, lets set $debugging + so we can output more information */ +if(file_exists("/debugging")) { + $debugging = true; + $g['debug'] = true; +} + +if($g['booting']) echo "."; +if($g['booting'] && file_exists("/cf/conf/config.xml")) { + $config_contents = file_get_contents("/cf/conf/config.xml"); + if(stristr($config_contents, "") == true) { + if($g['booting']) echo "."; + /* user has just upgraded to m0n0wall, replace root xml tags */ + log_error(gettext("Upgrading m0n0wall configuration to pfSense... ")); + $config_contents = str_replace("m0n0wall","pfsense", $config_contents); + if (!config_validate("{$g['conf_path']}/config.xml")) + log_error(gettext("ERROR! Could not convert m0n0wall -> pfsense in config.xml")); + conf_mount_rw(); + $fd = fopen("/cf/conf/config.xml", "w"); + fwrite($fd, $config_contents); + fclose($fd); + conf_mount_ro(); + } +} + +/* if our config file exists bail out, we're already set. */ +else if ($g['booting'] and !file_exists($g['cf_conf_path'] . "/config.xml") ) { + if($g['booting']) echo "."; + /* find the device where config.xml resides and write out an fstab */ + unset($cfgdevice); + if($g['booting']) echo "."; + /* check if there's already an fstab (NFS booting?) */ + if (!file_exists("{$g['etc_path']}/fstab")) { + if($g['booting']) echo "."; + if (strstr($g['platform'], "cdrom")) { + /* config is on floppy disk for CD-ROM version */ + $cfgdevice = $cfgpartition = "fd0"; + $_gb = exec('/sbin/dmesg -a', $dmesg); + if(preg_match("/da0/", $dmesg) == true) { + $cfgdevice = $cfgpartition = "da0" ; + if (mwexec("/sbin/mount -r /dev/{$cfgdevice} /cf")) { + /* could not mount, fallback to floppy */ + $cfgdevice = $cfgpartition = "fd0"; + } + } + $cfgfstype = "msdosfs"; + echo gettext("CDROM build") . "\n"; + echo " " . gettext("CFG:") . " {$cfgpartition}\n"; + echo " " . gettext("CFG:") . " {$cfgpartition}\n"; + echo " " . gettext("TYPE:") . " {$cfgfstype}\n"; + } else { + if($g['booting']) echo "."; + /* probe kernel known disks until we find one with config.xml */ + $disks = explode(" ", get_single_sysctl("kern.disks")); + foreach ($disks as $mountdisk) { + /* skip mfs mounted filesystems */ + if (strstr($mountdisk, "md")) + continue; + if (mwexec("/sbin/mount -r /dev/{$mountdisk}a {$g['cf_path']}") == 0) { + if (file_exists("{$g['cf_conf_path']}/config.xml")) { + /* found it */ + $cfgdevice = $mountdisk; + $cfgpartition = $cfgdevice . "a"; + $cfgfstype = "ufs"; + printf(gettext("Found configuration on %s.%s"), $cfgdevice, "\n"); + } + + mwexec("/sbin/umount -f {$g['cf_path']}"); + + if ($cfgdevice) + break; + } + if (mwexec("/sbin/mount -r /dev/{$mountdisk}d {$g['cf_path']}") == 0) { + if($g['booting']) echo "."; + if (file_exists("{$g['cf_conf_path']}/config.xml")) { + /* found it */ + $cfgdevice = $mountdisk; + $cfgpartition = $cfgdevice . "d"; + $cfgfstype = "ufs"; + printf(gettext("Found configuration on %s.%s"), $cfgdevice, "\n"); + } + + mwexec("/sbin/umount -f {$g['cf_path']}"); + + if ($cfgdevice) + break; + } + } + } + if($g['booting']) echo "."; + if (!$cfgdevice) { + $last_backup = discover_last_backup(); + if($last_backup) { + log_error(gettext("No config.xml found, attempting last known config restore.")); + file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", ""); + restore_backup("/cf/conf/backup/{$last_backup}"); + } else { + log_error(gettext("No config.xml or config backups found, resetting to factory defaults.")); + restore_backup('/conf.default/config.xml'); + } + } + + /* write device name to a file for rc.firmware */ + $fd = fopen("{$g['varetc_path']}/cfdevice", "w"); + fwrite($fd, $cfgdevice . "\n"); + fclose($fd); + + /* write out an fstab */ + $fd = fopen("{$g['etc_path']}/fstab", "w"); + + $fstab = "/dev/{$cfgpartition} {$g['cf_path']} {$cfgfstype} ro,noatime 1 1\n"; + $fstab .= "proc /proc procfs rw 0 0\n"; + + fwrite($fd, $fstab); + fclose($fd); + } + if($g['booting']) echo "."; + /* mount all filesystems */ + mwexec("/sbin/mount -a"); +} + +if($g['booting']) echo "."; +$config = parse_config(); + +/* set timezone */ +$timezone = $config['system']['timezone']; +if (!$timezone) + $timezone = "Etc/UTC"; +date_default_timezone_set("$timezone"); + +if($config_parsed == true) { + /* process packager manager custom rules */ + if(is_dir("/usr/local/pkg/parse_config")) { + run_plugins("/usr/local/pkg/parse_config/"); + } +} + +?> diff --git a/usr/etc/inc/config.lib.inc b/usr/etc/inc/config.lib.inc new file mode 100644 index 000000000..8dd2918af --- /dev/null +++ b/usr/etc/inc/config.lib.inc @@ -0,0 +1,941 @@ +. + 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. + + + pfSense_BUILDER_BINARIES: /sbin/mount /sbin/umount /sbin/halt /sbin/fsck + pfSense_MODULE: config +*/ + +/****f* config/encrypted_configxml + * NAME + * encrypted_configxml - Checks to see if config.xml is encrypted and if so, prompts to unlock. + * INPUTS + * None + * RESULT + * $config - rewrites config.xml without encryption + ******/ +function encrypted_configxml() { + global $g, $config; + + if (!file_exists($g['conf_path'] . "/config.xml")) + return; + + if (!$g['booting']) + return; + + $configtxt = file_get_contents($g['conf_path'] . "/config.xml"); + if(tagfile_deformat($configtxt, $configtxt, "config.xml")) { + $fp = fopen('php://stdin', 'r'); + $data = ""; + echo "\n\n*** Encrypted config.xml detected ***\n"; + while($data == "") { + echo "\nEnter the password to decrypt config.xml: "; + $decrypt_password = chop(fgets($fp)); + $data = decrypt_data($configtxt, $decrypt_password); + if(!strstr($data, "")) + $data = ""; + if($data) { + $fd = fopen($g['conf_path'] . "/config.xml.tmp", "w"); + fwrite($fd, $data); + fclose($fd); + exec("/bin/mv {$g['conf_path']}/config.xml.tmp {$g['conf_path']}/config.xml"); + echo "\n" . gettext("Config.xml unlocked.") . "\n"; + fclose($fp); + } else { + echo "\n" . gettext("Invalid password entered. Please try again.") . "\n"; + } + } + } +} + +/****f* config/parse_config + * NAME + * parse_config - Read in config.cache or config.xml if needed and return $config array + * INPUTS + * $parse - boolean to force parse_config() to read config.xml and generate config.cache + * RESULT + * $config - array containing all configuration variables + ******/ +function parse_config($parse = false) { + global $g, $config_parsed, $config_extra; + + $lockkey = lock('config'); + $config_parsed = false; + + if (!file_exists("{$g['conf_path']}/config.xml") || filesize("{$g['conf_path']}/config.xml") == 0) { + $last_backup = discover_last_backup(); + if($last_backup) { + log_error(gettext("No config.xml found, attempting last known config restore.")); + file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", ""); + restore_backup("{$g['conf_path']}/backup/{$last_backup}"); + } else { + unlock($lockkey); + die(gettext("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup.")); + } + } + + if($g['booting']) + echo "."; + + // Check for encrypted config.xml + encrypted_configxml(); + + if(!$parse) { + if (file_exists($g['tmp_path'] . '/config.cache')) { + $config = unserialize(file_get_contents($g['tmp_path'] . '/config.cache')); + if (is_null($config)) + $parse = true; + } else + $parse = true; + } + if ($parse == true) { + if(!file_exists($g['conf_path'] . "/config.xml")) { + if($g['booting']) + echo "."; + log_error("No config.xml found, attempting last known config restore."); + file_notice("config.xml", "No config.xml found, attempting last known config restore.", "pfSenseConfigurator", ""); + $last_backup = discover_last_backup(); + if ($last_backup) + restore_backup("/cf/conf/backup/{$last_backup}"); + else { + log_error(gettext("Could not restore config.xml.")); + unlock($lockkey); + die(gettext("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup.")); + } + } + $config = parse_xml_config($g['conf_path'] . '/config.xml', array($g['xml_rootobj'], 'pfsense')); + if($config == -1) { + $last_backup = discover_last_backup(); + if ($last_backup) + restore_backup("/cf/conf/backup/{$last_backup}"); + else { + log_error(gettext("Could not restore config.xml.")); + unlock($lockkey); + die("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup."); + } + } + generate_config_cache($config); + } + + if($g['booting']) + echo "."; + + $config_parsed = true; + unlock($lockkey); + + alias_make_table($config); + + return $config; +} + +/****f* config/generate_config_cache + * NAME + * generate_config_cache - Write serialized configuration to cache. + * INPUTS + * $config - array containing current firewall configuration + * RESULT + * boolean - true on completion + ******/ +function generate_config_cache($config) { + global $g, $config_extra; + + $configcache = fopen($g['tmp_path'] . '/config.cache', "w"); + fwrite($configcache, serialize($config)); + fclose($configcache); + unset($configcache); + /* Used for config.extra.xml */ + if(file_exists($g['tmp_path'] . '/config.extra.cache') && $config_extra) { + $configcacheextra = fopen($g['tmp_path'] . '/config.extra.cache', "w"); + fwrite($configcacheextra, serialize($config_extra)); + fclose($configcacheextra); + unset($configcacheextra); + } +} + +function discover_last_backup() { + $backups = glob('/cf/conf/backup/*.xml'); + $last_backup = ""; + $last_mtime = 0; + foreach($backups as $backup) { + if(filemtime($backup) > $last_mtime) { + $last_mtime = filemtime($backup); + $last_backup = $backup; + } + } + + return basename($last_backup); +} + +function restore_backup($file) { + global $g; + + if (file_exists($file)) { + conf_mount_rw(); + unlink_if_exists("{$g['tmp_path']}/config.cache"); + copy("$file","/cf/conf/config.xml"); + disable_security_checks(); + log_error(sprintf(gettext('%1$s is restoring the configuration %2$s'), $g['product_name'], $file)); + file_notice("config.xml", sprintf(gettext('%1$s is restoring the configuration %2$s'), $g['product_name'], $file), "pfSenseConfigurator", ""); + conf_mount_ro(); + } +} + +/****f* config/parse_config_bootup + * NAME + * parse_config_bootup - Bootup-specific configuration checks. + * RESULT + * null + ******/ +function parse_config_bootup() { + global $config, $g; + + if($g['booting']) + echo "."; + + $lockkey = lock('config'); + if (!file_exists("{$g['conf_path']}/config.xml")) { + if ($g['booting']) { + if (strstr($g['platform'], "cdrom")) { + /* try copying the default config. to the floppy */ + echo gettext("Resetting factory defaults...") . "\n"; + reset_factory_defaults(true); + if (!file_exists("{$g['conf_path']}/config.xml")) { + echo gettext("No XML configuration file found - using factory defaults.\n" . + "Make sure that the configuration floppy disk with the conf/config.xml\n" . + "file is inserted. If it isn't, your configuration changes will be lost\n" . + "on reboot.\n"); + } + } else { + $last_backup = discover_last_backup(); + if($last_backup) { + log_error("No config.xml found, attempting last known config restore."); + file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", ""); + restore_backup("/cf/conf/backup/{$last_backup}"); + } + if(!file_exists("{$g['conf_path']}/config.xml")) { + echo sprintf(gettext("XML configuration file not found. %s cannot continue booting."), $g['product_name']) . "\n"; + unlock($lockkey); + mwexec("/sbin/halt"); + exit; + } + log_error("Last known config found and restored. Please double check your configuration file for accuracy."); + file_notice("config.xml", gettext("Last known config found and restored. Please double check your configuration file for accuracy."), "pfSenseConfigurator", ""); + } + } else { + unlock($lockkey); + log_error(gettext("Could not find a usable configuration file! Exiting....")); + exit(0); + } + } + + if (filesize("{$g['conf_path']}/config.xml") == 0) { + $last_backup = discover_last_backup(); + if($last_backup) { + log_error(gettext("No config.xml found, attempting last known config restore.")); + file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", ""); + restore_backup("{$g['conf_path']}/backup/{$last_backup}"); + } else { + unlock($lockkey); + die(gettext("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup.")); + } + } + unlock($lockkey); + + $config = parse_config(true); + + if ((float)$config['version'] > (float)$g['latest_config']) { + echo << 1) && is_writable("/")) + return; + + $status = mwexec("/sbin/mount -u -w -o sync,noatime {$g['cf_path']}"); + if($status <> 0) { + if($g['booting']) + echo gettext("Disk is dirty. Running fsck -y") . "\n"; + mwexec("/sbin/fsck -y {$g['cf_path']}"); + $status = mwexec("/sbin/mount -u -w -o sync,noatime {$g['cf_path']}"); + } + + /* if the platform is soekris or wrap or pfSense, lets mount the + * compact flash cards root. + */ + $status = mwexec("/sbin/mount -u -w -o sync,noatime /"); + /* we could not mount this correctly. kick off fsck */ + if($status <> 0) { + log_error(gettext("File system is dirty. Launching FSCK for /")); + mwexec("/sbin/fsck -y /"); + $status = mwexec("/sbin/mount -u -w -o sync,noatime /"); + } + + mark_subsystem_dirty('mount'); +} + +/****f* config/conf_mount_ro + * NAME + * conf_mount_ro - Mount filesystems readonly. + * RESULT + * null + ******/ +function conf_mount_ro() { + global $g, $config; + + /* Do not trust $g['platform'] since this can be clobbered during factory reset. */ + $platform = trim(file_get_contents("/etc/platform")); + /* do not umount on cdrom or pfSense platforms */ + if($platform == "cdrom" or $platform == "pfSense") + return; + + if (refcount_unreference(1000) > 0) + return; + + if(isset($config['system']['nanobsd_force_rw'])) + return; + + if($g['booting']) + return; + + clear_subsystem_dirty('mount'); + /* sync data, then force a remount of /cf */ + pfSense_sync(); + mwexec("/sbin/mount -u -r -f -o sync,noatime {$g['cf_path']}"); + mwexec("/sbin/mount -u -r -f -o sync,noatime /"); +} + +/****f* config/convert_config + * NAME + * convert_config - Attempt to update config.xml. + * DESCRIPTION + * convert_config() reads the current global configuration + * and attempts to convert it to conform to the latest + * config.xml version. This allows major formatting changes + * to be made with a minimum of breakage. + * RESULT + * null + ******/ +/* convert configuration, if necessary */ +function convert_config() { + global $config, $g; + $now = date("H:i:s"); + log_error(sprintf(gettext("Start Configuration upgrade at %s, set execution timeout to 15 minutes"), $now)); + //ini_set("max_execution_time", "900"); + + /* special case upgrades */ + /* fix every minute crontab bogons entry */ + if (is_array($config['cron'])) { + $cron_item_count = count($config['cron']['item']); + for($x=0; $x<$cron_item_count; $x++) { + if(stristr($config['cron']['item'][$x]['command'], "rc.update_bogons.sh")) { + if($config['cron']['item'][$x]['hour'] == "*" ) { + $config['cron']['item'][$x]['hour'] = "3"; + write_config(gettext("Updated bogon update frequency to 3am")); + log_error(gettext("Updated bogon update frequency to 3am")); + } + } + } + } + if ($config['version'] == $g['latest_config']) + return; /* already at latest version */ + + // Save off config version + $prev_version = $config['version']; + + include_once('auth.inc'); + include_once('upgrade_config.inc'); + if (file_exists("/etc/inc/upgrade_config_custom.inc")) + include_once("upgrade_config_custom.inc"); + /* Loop and run upgrade_VER_to_VER() until we're at current version */ + while ($config['version'] < $g['latest_config']) { + $cur = $config['version'] * 10; + $next = $cur + 1; + $migration_function = sprintf('upgrade_%03d_to_%03d', $cur, $next); + if (function_exists($migration_function)) + $migration_function(); + $migration_function = "{$migration_function}_custom"; + if (function_exists($migration_function)) + $migration_function(); + $config['version'] = sprintf('%.1f', $next / 10); + if($g['booting']) + echo "."; + } + + $now = date("H:i:s"); + log_error(sprintf(gettext("Ended Configuration upgrade at %s"), $now)); + + if ($prev_version != $config['version']) + write_config(sprintf(gettext('Upgraded config version level from %1$s to %2$s'), $prev_version, $config['version'])); +} + +/****f* config/safe_write_file + * NAME + * safe_write_file - Write a file out atomically + * DESCRIPTION + * safe_write_file() Writes a file out atomically by first writing to a + * temporary file of the same name but ending with the pid of the current + * process, them renaming the temporary file over the original. + * INPUTS + * $filename - string containing the filename of the file to write + * $content - string containing the file content to write to file + * $force_binary - boolean denoting whether we should force binary + * mode writing. + * RESULT + * boolean - true if successful, false if not + ******/ +function safe_write_file($file, $content, $force_binary) { + $tmp_file = $file . "." . getmypid(); + $write_mode = $force_binary ? "wb" : "w"; + + $fd = fopen($tmp_file, $write_mode); + if (!$fd) { + // Unable to open temporary file for writing + return false; + } + if (!fwrite($fd, $content)) { + // Unable to write to temporary file + fclose($fd); + return false; + } + fflush($fd); + fclose($fd); + + if (!rename($tmp_file, $file)) { + // Unable to move temporary file to original + @unlink($tmp_file); + return false; + } + + // Sync file before returning + pfSense_sync(); + + return true; +} + +/****f* config/write_config + * NAME + * write_config - Backup and write the firewall configuration. + * DESCRIPTION + * write_config() handles backing up the current configuration, + * applying changes, and regenerating the configuration cache. + * INPUTS + * $desc - string containing the a description of configuration changes + * $backup - boolean: do not back up current configuration if false. + * RESULT + * null + ******/ +/* save the system configuration */ +function write_config($desc="Unknown", $backup = true) { + global $config, $g; + + if (!empty($_SERVER['REMOTE_ADDR'])) { + if (!session_id()) + @session_start(); + if (!empty($_SESSION['Username']) && ($_SESSION['Username'] != "admin")) { + $user = getUserEntry($_SESSION['Username']); + if (is_array($user) && userHasPrivilege($user, "user-config-readonly")) { + session_commit(); + return false; + } + } + } + + if (!isset($argc)) + session_commit(); + + if($backup) + backup_config(); + + $config['revision'] = make_config_revision_entry($desc); + + conf_mount_rw(); + $lockkey = lock('config', LOCK_EX); + + /* generate configuration XML */ + $xmlconfig = dump_xml_config($config, $g['xml_rootobj']); + + /* write new configuration */ + if (!safe_write_file("{$g['cf_conf_path']}/config.xml", $xmlconfig, false)) { + log_error(gettext("WARNING: Config contents could not be save. Could not open file!")); + unlock($lockkey); + file_notice("config.xml", sprintf(gettext("Unable to open %s/config.xml for writing in write_config()%s"), $g['cf_conf_path'], "\n")); + return -1; + } + + cleanup_backupcache(true); + + /* re-read configuration */ + /* NOTE: We assume that the file can be parsed since we wrote it. */ + $config = parse_xml_config("{$g['conf_path']}/config.xml", $g['xml_rootobj']); + if ($config == -1) { + copy("{$g['conf_path']}/config.xml", "{$g['conf_path']}/config.xml.bad"); + $last_backup = discover_last_backup(); + if ($last_backup) { + restore_backup("/cf/conf/backup/{$last_backup}"); + $config = parse_xml_config("{$g['conf_path']}/config.xml", $g['xml_rootobj']); + if ($g['booting']) { + echo "\n\n ************** WARNING **************"; + echo "\n\n Configuration could not be validated. A previous configuration was restored. \n"; + echo "\n The failed configuration file has been saved as {$g['conf_path']}/config.xml.bad \n\n"; + } + } else + log_error(gettext("Could not restore config.xml.")); + } else + generate_config_cache($config); + + unlock($lockkey); + + unlink_if_exists("/usr/local/pkg/pf/carp_sync_client.php"); + + /* tell kernel to sync fs data */ + conf_mount_ro(); + + /* sync carp entries to other firewalls */ + carp_sync_client(); + + if(is_dir("/usr/local/pkg/write_config")) { + /* process packager manager custom rules */ + run_plugins("/usr/local/pkg/write_config/"); + } + + return $config; +} + +/****f* config/reset_factory_defaults + * NAME + * reset_factory_defaults - Reset the system to its default configuration. + * RESULT + * integer - indicates completion + ******/ +function reset_factory_defaults($lock = false) { + global $g; + + conf_mount_rw(); + if (!$lock) + $lockkey = lock('config', LOCK_EX); + + /* create conf directory, if necessary */ + safe_mkdir("{$g['cf_conf_path']}"); + + /* clear out /conf */ + $dh = opendir($g['conf_path']); + while ($filename = readdir($dh)) { + if (($filename != ".") && ($filename != "..")) { + unlink_if_exists($g['conf_path'] . "/" . $filename); + } + } + closedir($dh); + unlink_if_exists($g['tmp_path'] . "/config.cache"); + + /* copy default configuration */ + copy("{$g['conf_default_path']}/config.xml", "{$g['conf_path']}/config.xml"); + + disable_security_checks(); + + /* call the wizard */ + touch("/conf/trigger_initial_wizard"); + if (!$lock) + unlock($lockkey); + conf_mount_ro(); + setup_serial_port(); + return 0; +} + +function config_restore($conffile) { + global $config, $g; + + if (!file_exists($conffile)) + return 1; + + backup_config(); + + conf_mount_rw(); + + $lockkey = lock('config', LOCK_EX); + + unlink_if_exists("{$g['tmp_path']}/config.cache"); + copy($conffile, "{$g['cf_conf_path']}/config.xml"); + + disable_security_checks(); + + unlock($lockkey); + + $config = parse_config(true); + + conf_mount_ro(); + + write_config(gettext("Reverted to") . " " . array_pop(explode("/", $conffile)) . ".", false); + + return 0; +} + +function config_install($conffile) { + global $config, $g; + + if (!file_exists($conffile)) + return 1; + + if (!config_validate("{$conffile}")) + return 1; + + if($g['booting'] == true) + echo gettext("Installing configuration...") . "\n"; + else + log_error(gettext("Installing configuration ....")); + + conf_mount_rw(); + $lockkey = lock('config', LOCK_EX); + + copy($conffile, "{$g['conf_path']}/config.xml"); + + disable_security_checks(); + + /* unlink cache file if it exists */ + if(file_exists("{$g['tmp_path']}/config.cache")) + unlink("{$g['tmp_path']}/config.cache"); + + unlock($lockkey); + conf_mount_ro(); + + return 0; +} + +/* + * Disable security checks for DNS rebind and HTTP referrer until next time + * they pass (or reboot), to aid in preventing accidental lockout when + * restoring settings like hostname, domain, IP addresses, and settings + * related to the DNS rebind and HTTP referrer checks. + * Intended for use when restoring a configuration or directly + * modifying config.xml without an unconditional reboot. + */ +function disable_security_checks() { + global $g; + touch("{$g['tmp_path']}/disable_security_checks"); +} + +/* Restores security checks. Should be called after all succeed. */ +function restore_security_checks() { + global $g; + unlink_if_exists("{$g['tmp_path']}/disable_security_checks"); +} + +/* Returns status of security check temporary disable. */ +function security_checks_disabled() { + global $g; + return file_exists("{$g['tmp_path']}/disable_security_checks"); +} + +function config_validate($conffile) { + + global $g, $xmlerr; + + $xml_parser = xml_parser_create(); + + if (!($fp = fopen($conffile, "r"))) { + $xmlerr = gettext("XML error: unable to open file"); + return false; + } + + while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + $xmlerr = sprintf(gettext('%1$s at line %2$d'), + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser)); + return false; + } + } + xml_parser_free($xml_parser); + + fclose($fp); + + return true; +} + +function cleanup_backupcache($lock = false) { + global $g; + $i = false; + + $revisions = get_config_backup_count(); + + if (!$lock) + $lockkey = lock('config'); + + conf_mount_rw(); + + $backups = get_backups(); + if ($backups) { + $baktimes = $backups['versions']; + unset($backups['versions']); + } else { + $backups = array(); + $baktimes = array(); + } + $newbaks = array(); + $bakfiles = glob($g['cf_conf_path'] . "/backup/config-*"); + $tocache = array(); + + foreach($bakfiles as $backup) { // Check for backups in the directory not represented in the cache. + $backupsize = filesize($backup); + if($backupsize == 0) { + unlink($backup); + continue; + } + $tocheck = array_shift(explode('.', array_pop(explode('-', $backup)))); + if(!in_array($tocheck, $baktimes)) { + $i = true; + if($g['booting']) + echo "."; + $newxml = parse_xml_config($backup, array($g['xml_rootobj'], 'pfsense')); + if($newxml == "-1") { + log_error(sprintf(gettext("The backup cache file %s is corrupted. Unlinking."), $backup)); + unlink($backup); + log_error(sprintf(gettext("The backup cache file %s is corrupted. Unlinking."), $backup)); + continue; + } + if($newxml['revision']['description'] == "") + $newxml['revision']['description'] = "Unknown"; + if($newxml['version'] == "") + $newxml['version'] = "?"; + $tocache[$tocheck] = array('description' => $newxml['revision']['description'], 'version' => $newxml['version'], 'filesize' => $backupsize); + } + } + foreach($backups as $checkbak) { + if(count(preg_grep('/' . $checkbak['time'] . '/i', $bakfiles)) != 0) { + $newbaks[] = $checkbak; + } else { + $i = true; + if($g['booting']) print " " . $tocheck . "r"; + } + } + foreach($newbaks as $todo) $tocache[$todo['time']] = array('description' => $todo['description'], 'version' => $todo['version'], 'filesize' => $todo['filesize']); + if(is_int($revisions) and (count($tocache) > $revisions)) { + $toslice = array_slice(array_keys($tocache), 0, $revisions); + foreach($toslice as $sliced) + $newcache[$sliced] = $tocache[$sliced]; + foreach($tocache as $version => $versioninfo) { + if(!in_array($version, array_keys($newcache))) { + unlink_if_exists($g['conf_path'] . '/backup/config-' . $version . '.xml'); + //if($g['booting']) print " " . $tocheck . "d"; + } + } + $tocache = $newcache; + } + $bakout = fopen($g['cf_conf_path'] . '/backup/backup.cache', "w"); + fwrite($bakout, serialize($tocache)); + fclose($bakout); + conf_mount_ro(); + + if (!$lock) + unlock($lockkey); +} + +function get_backups() { + global $g; + if(file_exists("{$g['cf_conf_path']}/backup/backup.cache")) { + $confvers = unserialize(file_get_contents("{$g['cf_conf_path']}/backup/backup.cache")); + $bakvers = array_keys($confvers); + $toreturn = array(); + sort($bakvers); + // $bakvers = array_reverse($bakvers); + foreach(array_reverse($bakvers) as $bakver) + $toreturn[] = array('time' => $bakver, 'description' => $confvers[$bakver]['description'], 'version' => $confvers[$bakver]['version'], 'filesize' => $confvers[$bakver]['filesize']); + } else { + return false; + } + $toreturn['versions'] = $bakvers; + return $toreturn; +} + +function backup_config() { + global $config, $g; + + if($g['platform'] == "cdrom") + return; + + conf_mount_rw(); + + /* Create backup directory if needed */ + safe_mkdir("{$g['cf_conf_path']}/backup"); + + if($config['revision']['time'] == "") { + $baktime = 0; + } else { + $baktime = $config['revision']['time']; + } + if($config['revision']['description'] == "") { + $bakdesc = "Unknown"; + } else { + $bakdesc = $config['revision']['description']; + } + + $bakver = ($config['version'] == "") ? "?" : $config['version']; + $bakfilename = $g['cf_conf_path'] . '/backup/config-' . $baktime . '.xml'; + copy($g['cf_conf_path'] . '/config.xml', $bakfilename); + if(file_exists($g['cf_conf_path'] . '/backup/backup.cache')) { + $backupcache = unserialize(file_get_contents($g['cf_conf_path'] . '/backup/backup.cache')); + } else { + $backupcache = array(); + } + $backupcache[$baktime] = array('description' => $bakdesc, 'version' => $bakver, 'filesize' => filesize($bakfilename)); + $bakout = fopen($g['cf_conf_path'] . '/backup/backup.cache', "w"); + fwrite($bakout, serialize($backupcache)); + fclose($bakout); + + conf_mount_ro(); + + return true; +} + +function set_device_perms() { + $devices = array( + 'pf' => array( 'user' => 'root', + 'group' => 'proxy', + 'mode' => 0660), + ); + + foreach ($devices as $name => $attr) { + $path = "/dev/$name"; + if (file_exists($path)) { + chown($path, $attr['user']); + chgrp($path, $attr['group']); + chmod($path, $attr['mode']); + } + } +} + +function get_config_user() { + if (empty($_SESSION["Username"])) { + $username = getenv("USER"); + if (empty($conuser) || $conuser == "root") + $username = "(system)"; + } else + $username = $_SESSION["Username"]; + + if (!empty($_SERVER['REMOTE_ADDR'])) + $username .= '@' . $_SERVER['REMOTE_ADDR']; + + return $username; +} + +function make_config_revision_entry($desc = null, $override_user = null) { + if (empty($override_user)) + $username = get_config_user(); + else + $username = $override_user; + + $revision = array(); + + if (time() > mktime(0, 0, 0, 9, 1, 2004)) /* make sure the clock settings are plausible */ + $revision['time'] = time(); + + /* Log the running script so it's not entirely unlogged what changed */ + if ($desc == "Unknown") + $desc = sprintf(gettext("%s made unknown change"), $_SERVER['SCRIPT_NAME']); + if (!empty($desc)) + $revision['description'] = "{$username}: " . $desc; + $revision['username'] = $username; + return $revision; +} + +function get_config_backup_count() { + global $config, $g; + if (isset($config['system']['backupcount']) && is_numeric($config['system']['backupcount']) && ($config['system']['backupcount'] >= 0)) { + return intval($config['system']['backupcount']); + } elseif ($g['platform'] == "nanobsd") { + return 5; + } else { + return 30; + } +} + +function pfSense_clear_globals() { + global $config, $FilterIfList, $GatewaysList, $filterdns, $aliases, $aliastable; + + if (isset($FilterIfList)) + unset($FilterIfList); + + if (isset($GatewaysList)) + unset($GatewaysList); + + /* Used for the hostname dns resolver */ + if (isset($filterdns)) + unset($filterdns); + + /* Used for aliases and interface macros */ + if (isset($aliases)) + unset($aliases); + if (isset($aliastable)) + unset($aliastable); + + unset($config); +} + +register_shutdown_function('pfSense_clear_globals'); + +?> diff --git a/usr/etc/inc/cram_md5_sasl_client.inc b/usr/etc/inc/cram_md5_sasl_client.inc new file mode 100644 index 000000000..69bd625a4 --- /dev/null +++ b/usr/etc/inc/cram_md5_sasl_client.inc @@ -0,0 +1,67 @@ +state!=SASL_CRAM_MD5_STATE_START) + { + $client->error="CRAM-MD5 authentication state is not at the start"; + return(SASL_FAIL); + } + $this->credentials=array( + "user"=>"", + "password"=>"" + ); + $defaults=array(); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + $this->state=SASL_CRAM_MD5_STATE_RESPOND_CHALLENGE; + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { + case SASL_CRAM_MD5_STATE_RESPOND_CHALLENGE: + $message=$this->credentials["user"]." ".$this->HMACMD5($this->credentials["password"], $response); + $this->state=SASL_CRAM_MD5_STATE_DONE; + break; + case SASL_CRAM_MD5_STATE_DONE: + $client->error="CRAM-MD5 authentication was finished without success"; + return(SASL_FAIL); + default: + $client->error="invalid CRAM-MD5 authentication step state"; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> \ No newline at end of file diff --git a/usr/etc/inc/crypt.inc b/usr/etc/inc/crypt.inc new file mode 100644 index 000000000..8515c84e1 --- /dev/null +++ b/usr/etc/inc/crypt.inc @@ -0,0 +1,101 @@ += 64) { + $line = substr($in, $oset, 64); + $out .= $line."\n"; + $size = strlen($line); + $oset += $size; + } + + $out .= "---- END {$tag} ----\n"; + + return true; + } + + function tagfile_deformat($in, & $out, $tag) { + + $btag_val = "---- BEGIN {$tag} ----"; + $etag_val = "---- END {$tag} ----"; + + $btag_len = strlen($btag_val); + $etag_len = strlen($etag_val); + + $btag_pos = stripos($in, $btag_val); + $etag_pos = stripos($in, $etag_val); + + if (($btag_pos === false) || ($etag_pos === false)) + return false; + + $body_pos = $btag_pos + $btag_len; + $body_len = strlen($in); + $body_len -= $btag_len; + $body_len -= $etag_len + 1; + + $out = substr($in, $body_pos, $body_len); + + return true; + } + +?> diff --git a/usr/etc/inc/digest_sasl_client.inc b/usr/etc/inc/digest_sasl_client.inc new file mode 100644 index 000000000..924887d15 --- /dev/null +++ b/usr/etc/inc/digest_sasl_client.inc @@ -0,0 +1,135 @@ +H($secret.':'.$data); + } + + Function Initialize(&$client) + { + return(1); + } + + Function Start(&$client, &$message, &$interactions) + { + if($this->state!=SASL_DIGEST_STATE_START) + { + $client->error='Digest authentication state is not at the start'; + return(SASL_FAIL); + } + $this->credentials=array( + 'user'=>'', + 'password'=>'', + 'uri'=>'', + 'method'=>'', + 'session'=>'' + ); + $defaults=array(); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + $this->state=SASL_DIGEST_STATE_RESPOND_CHALLENGE; + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { + case SASL_DIGEST_STATE_RESPOND_CHALLENGE: + $values=explode(',',$response); + $parameters=array(); + for($v=0; $vcredentials['user'].'"'; + if(!IsSet($parameters[$p='realm']) + && !IsSet($parameters[$p='nonce'])) + { + $client->error='Digest authentication parameter '.$p.' is missing from the server response'; + return(SASL_FAIL); + } + $message.=', realm='.$parameters['realm']; + $message.=', nonce='.$parameters['nonce']; + $message.=', uri="'.$this->credentials['uri'].'"'; + if(IsSet($parameters['algorithm'])) + { + $algorithm=$this->unq($parameters['algorithm']); + $message.=', algorithm='.$parameters['algorithm']; + } + else + $algorithm=''; + + $realm=$this->unq($parameters['realm']); + $nonce=$this->unq($parameters['nonce']); + if(IsSet($parameters['qop'])) + { + switch($qop=$this->unq($parameters['qop'])) + { + case "auth": + $cnonce=$this->credentials['session']; + break; + default: + $client->error='Digest authentication quality of protection '.$qop.' is not yet supported'; + return(SASL_FAIL); + } + } + $nc_value='00000001'; + if(IsSet($parameters['qop']) + && !strcmp($algorithm, 'MD5-sess')) + $A1=$this->H($this->credentials['user'].':'. $realm.':'. $this->credentials['password']).':'.$nonce.':'.$cnonce; + else + $A1=$this->credentials['user'].':'. $realm.':'. $this->credentials['password']; + $A2=$this->credentials['method'].':'.$this->credentials['uri']; + if(IsSet($parameters['qop'])) + $response=$this->KD($this->H($A1), $nonce.':'. $nc_value.':'. $cnonce.':'. $qop.':'. $this->H($A2)); + else + $response=$this->KD($this->H($A1), $nonce.':'. $this->H($A2)); + $message.=', response="'.$response.'"'; + if(IsSet($parameters['opaque'])) + $message.=', opaque='.$parameters['opaque']; + if(IsSet($parameters['qop'])) + $message.=', qop="'.$qop.'"'; + $message.=', nc='.$nc_value; + if(IsSet($parameters['qop'])) + $message.=', cnonce="'.$cnonce.'"'; + $client->encode_response=0; + $this->state=SASL_DIGEST_STATE_DONE; + break; + case SASL_DIGEST_STATE_DONE: + $client->error='Digest authentication was finished without success'; + return(SASL_FAIL); + default: + $client->error='invalid Digest authentication step state'; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> \ No newline at end of file diff --git a/usr/etc/inc/dyndns.class b/usr/etc/inc/dyndns.class new file mode 100644 index 000000000..217736014 --- /dev/null +++ b/usr/etc/inc/dyndns.class @@ -0,0 +1,1427 @@ +_cacheFile = "{$g['conf_path']}/dyndns_{$dnsIf}{$dnsService}" . escapeshellarg($dnsHost) . "{$dnsID}.cache"; + $this->_cacheFile_v6 = "{$g['conf_path']}/dyndns_{$dnsIf}{$dnsService}" . escapeshellarg($dnsHost) . "{$dnsID}_v6.cache"; + $this->_debugFile = "{$g['varetc_path']}/dyndns_{$dnsIf}{$dnsService}" . escapeshellarg($dnsHost) . "{$dnsID}.debug"; + + $this->_curlIpresolveV4 = $curlIpresolveV4; + $this->_curlSslVerifypeer = $curlSslVerifypeer; + $this->_dnsVerboseLog = $dnsVerboseLog; + if ($this->_dnsVerboseLog) + log_error("DynDns: updatedns() starting"); + + $dyndnslck = lock("DDNS".$dnsID, LOCK_EX); + + if (!$dnsService) $this->_error(2); + switch ($dnsService) { + case 'freedns': + if (!$dnsHost) $this->_error(5); + break; + case 'namecheap': + if (!$dnsPass) $this->_error(4); + if (!$dnsHost) $this->_error(5); + break; + case 'route53': + if (!$dnsZoneID) $this->_error(8); + if (!$dnsTTL) $this->_error(9); + break; + case 'custom': + if (!$dnsUpdateURL) $this->_error(7); + break; + default: + if (!$dnsUser) $this->_error(3); + if (!$dnsPass) $this->_error(4); + if (!$dnsHost) $this->_error(5); + } + + switch ($dnsService) { + case 'he-net-v6': + case 'custom-v6': + $this->_useIPv6 = true; + break; + default: + $this->_useIPv6 = false; + } + $this->_dnsService = strtolower($dnsService); + $this->_dnsUser = $dnsUser; + $this->_dnsPass = $dnsPass; + $this->_dnsHost = $dnsHost; + $this->_dnsServer = $dnsServer; + $this->_dnsPort = $dnsPort; + $this->_dnsWildcard = $dnsWildcard; + $this->_dnsMX = $dnsMX; + $this->_dnsZoneID = $dnsZoneID; + $this->_dnsTTL = $dnsTTL; + $this->_if = get_failover_interface($dnsIf); + $this->_checkIP(); + $this->_dnsUpdateURL = $dnsUpdateURL; + $this->_dnsResultMatch = $dnsResultMatch; + $this->_dnsRequestIf = get_failover_interface($dnsRequestIf); + if ($this->_dnsVerboseLog) + log_error("DynDNS ({$this->_dnsHost}): running get_failover_interface for {$dnsRequestIf}. found {$this->_dnsRequestIf}"); + $this->_dnsRequestIfIP = get_interface_ip($dnsRequestIf); + $this->_dnsMaxCacheAgeDays = 25; + $this->_dnsDummyUpdateDone = false; + $this->_forceUpdateNeeded = $forceUpdate; + + // Ensure that we were able to lookup the IP + if(!is_ipaddr($this->_dnsIP)) { + log_error("DynDNS ({$this->_dnsHost}) There was an error trying to determine the public IP for interface - {$dnsIf}({$this->_if}). Probably interface is not a WAN interface."); + unlock($dyndnslck); + return; + } + + $this->_debugID = rand(1000000, 9999999); + + if ($forceUpdate == false && $this->_detectChange() == false) { + $this->_error(10); + } else { + switch ($this->_dnsService) { + case 'dnsomatic': + case 'dyndns': + case 'dyndns-static': + case 'dyndns-custom': + case 'dhs': + case 'noip': + case 'noip-free': + case 'easydns': + case 'hn': + case 'zoneedit': + case 'dyns': + case 'ods': + case 'freedns': + case 'loopia': + case 'staticcling': + case 'dnsexit': + case 'custom': + case 'custom-v6': + case 'opendns': + case 'namecheap': + case 'he-net': + case 'he-net-v6': + case 'selfhost': + case 'he-net-tunnelbroker': + case 'route53': + case 'cloudflare': + case 'eurodns': + case 'gratisdns': + case 'ovh-dynhost': + case 'citynetwork': + $this->_update(); + if($this->_dnsDummyUpdateDone == true) { + // If a dummy update was needed, then sleep a while and do the update again to put the proper address back. + // Some providers (e.g. No-IP free accounts) need to have at least 1 address change every month. + // If the address has not changed recently, or the user did "Force Update", then the code does + // a dummy address change for providers like this. + sleep(10); + $this->_update(); + } + break; + default: + $this->_error(6); + break; + } + } + + unlock($dyndnslck); + } + + /* + * Private Function (added 12 July 05) [beta] + * Send Update To Selected Service. + */ + function _update() { + + if ($this->_dnsVerboseLog) + log_error("DynDNS ({$this->_dnsHost}): DynDns _update() starting."); + + if ($this->_dnsService != 'ods' and $this->_dnsService != 'route53 ') { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_USERAGENT, $this->_UserAgent); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ch, CURLOPT_INTERFACE, $this->_dnsRequestIfIP); + curl_setopt($ch, CURLOPT_TIMEOUT, 120); // Completely empirical + } + + switch ($this->_dnsService) { + case 'dyndns': + case 'dyndns-static': + case 'dyndns-custom': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("DynDNS: ({$this->_dnsHost}) DNS update() starting."); + if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://members.dyndns.org/nic/update"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port . '?system=dyndns&hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP . '&wildcard='.$this->_dnsWildcard . '&mx=' . $this->_dnsMX . '&backmx=NO'); + break; + case 'dhs': + $needsIP = TRUE; + $post_data['hostscmd'] = 'edit'; + $post_data['hostscmdstage'] = '2'; + $post_data['type'] = '4'; + $post_data['updatetype'] = 'Online'; + $post_data['mx'] = $this->_dnsMX; + $post_data['mx2'] = ''; + $post_data['txt'] = ''; + $post_data['offline_url'] = ''; + $post_data['cloak'] = 'Y'; + $post_data['cloak_title'] = ''; + $post_data['ip'] = $this->_dnsIP; + $post_data['domain'] = 'dyn.dhs.org'; + $post_data['hostname'] = $this->_dnsHost; + $post_data['submit'] = 'Update'; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + $server = "https://members.dhs.org/nic/hosts"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, '{$server}{$port}'); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); + break; + case 'noip': + case 'noip-free': + $needsIP = TRUE; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + $server = "https://dynupdate.no-ip.com/ducupdate.php"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + if(($this->_dnsService == "noip-free") && + ($this->_forceUpdateNeeded == true) && + ($this->_dnsDummyUpdateDone == false)) { + // Update the IP to a dummy value to force No-IP free accounts to see a change. + $iptoset = "192.168.1.1"; + $this->_dnsDummyUpdateDone = true; + log_error("DynDNS ({$this->_dnsHost}): Processing dummy update on No-IP free account. IP temporarily set to " . $iptoset); + } else { + $iptoset = $this->_dnsIP; + } + curl_setopt($ch, CURLOPT_URL, $server . $port . '?username=' . urlencode($this->_dnsUser) . '&pass=' . urlencode($this->_dnsPass) . '&hostname=' . $this->_dnsHost.'&ip=' . $iptoset); + break; + case 'easydns': + $needsIP = TRUE; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://members.easydns.com/dyn/dyndns.php"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server . $port . '?hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP . '&wildcard=' . $this->_dnsWildcard . '&mx=' . $this->_dnsMX . '&backmx=' . $this->_dnsBackMX); + break; + case 'hn': + $needsIP = TRUE; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "http://dup.hn.org/vanity/update"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server . $port . '?ver=1&IP=' . $this->_dnsIP); + break; + case 'zoneedit': + $needsIP = FALSE; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + + $server = "https://dynamic.zoneedit.com/auth/dynamic.html"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, "{$server}{$port}?host=" .$this->_dnsHost); + break; + case 'dyns': + $needsIP = FALSE; + $server = "https://www.dyns.cx/postscript011.php"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server . $port . '?username=' . urlencode($this->_dnsUser) . '&password=' . $this->_dnsPass . '&host=' . $this->_dnsHost); + break; + case 'ods': + $needsIP = FALSE; + $misc_errno = 0; + $misc_error = ""; + $server = "ods.org"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + $this->con['socket'] = fsockopen("{$server}{$port}", "7070", $misc_errno, $misc_error, 30); + /* Check that we have connected */ + if (!$this->con['socket']) { + print "error! could not connect."; + break; + } + /* Here is the loop. Read the incoming data (from the socket connection) */ + while (!feof($this->con['socket'])) { + $this->con['buffer']['all'] = trim(fgets($this->con['socket'], 4096)); + $code = substr($this->con['buffer']['all'], 0, 3); + sleep(1); + switch($code) { + case 100: + fputs($this->con['socket'], "LOGIN ".$this->_dnsUser." ".$this->_dnsPass."\n"); + break; + case 225: + fputs($this->con['socket'], "DELRR ".$this->_dnsHost." A\n"); + break; + case 901: + fputs($this->con['socket'], "ADDRR ".$this->_dnsHost." A ".$this->_dnsIP."\n"); + break; + case 795: + fputs($this->con['socket'], "QUIT\n"); + break; + } + } + $this->_checkStatus(0, $code); + break; + case 'freedns': + $needIP = FALSE; + curl_setopt($ch, CURLOPT_URL, 'https://freedns.afraid.org/dynamic/update.php?' . $this->_dnsPass); + break; + case 'dnsexit': + $needsIP = TRUE; + curl_setopt($ch, CURLOPT_URL, 'https://www.dnsexit.com/RemoteUpdate.sv?login='.$this->_dnsUser. '&password='.$this->_dnsPass.'&host='.$this->_dnsHost.'&myip='.$this->_dnsIP); + break; + case 'loopia': + $needsIP = TRUE; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + curl_setopt($ch, CURLOPT_URL, 'https://dns.loopia.se/XDynDNSServer/XDynDNS.php?hostname='.$this->_dnsHost.'&myip='.$this->_dnsIP); + break; + case 'opendns': + $needsIP = FALSE; + if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://updates.opendns.com/nic/update?hostname=". $this->_dnsHost; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port); + break; + + case 'staticcling': + $needsIP = FALSE; + curl_setopt($ch, CURLOPT_URL, 'https://www.staticcling.org/update.html?login='.$this->_dnsUser.'&pass='.$this->_dnsPass); + break; + case 'dnsomatic': + /* Example syntax + https://username:password@updates.dnsomatic.com/nic/update?hostname=yourhostname&myip=ipaddress&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG + */ + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("DNS-O-Matic: DNS update() starting."); + if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + /* + Reference: https://www.dnsomatic.com/wiki/api + DNS-O-Matic usernames are 3-25 characters. + DNS-O-Matic passwords are 6-20 characters. + All ASCII letters and numbers accepted. + Dots, dashes, and underscores allowed, but not at the beginning or end of the string. + Required: "rawurlencode" http://www.php.net/manual/en/function.rawurlencode.php + Encodes the given string according to RFC 3986. + */ + $server = "https://" . rawurlencode($this->_dnsUser) . ":" . rawurlencode($this->_dnsPass) . "@updates.dnsomatic.com/nic/update?hostname="; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server . $this->_dnsHost . '&myip=' . $this->_dnsIP . '&wildcard='.$this->_dnsWildcard . '&mx=' . $this->_dnsMX . '&backmx=NOCHG'); + break; + case 'namecheap': + /* Example: + https://dynamicdns.park-your-domain.com/update?host=[host_name]&domain=[domain.com]&password=[domain_password]&ip=[your_ip] + */ + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("Namecheap ({$this->_dnsHost}): DNS update() starting."); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + $dparts = explode(".", trim($this->_dnsHost)); + $domain_part_count = ($dparts[count($dparts)-1] == "uk") ? 3 : 2; + $domain_offset = count($dparts) - $domain_part_count; + $hostname = implode(".", array_slice($dparts, 0, $domain_offset)); + $domain = implode(".", array_slice($dparts, $domain_offset)); + $dnspass = trim($this->_dnsPass); + $server = "https://dynamicdns.park-your-domain.com/update?host={$hostname}&domain={$domain}&password={$dnspass}&ip={$this->_dnsIP}"; + curl_setopt($ch, CURLOPT_URL, $server); + break; + case 'he-net': + case 'he-net-v6': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("HE.net ({$this->_dnsHost}): DNS update() starting."); + $server = "https://dyn.dns.he.net/nic/update?"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); + curl_setopt($ch, CURLOPT_URL, $server . 'hostname=' . $this->_dnsHost . '&password=' . $this->_dnsPass . '&myip=' . $this->_dnsIP); + break; + case 'he-net-tunnelbroker': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("HE.net Tunnelbroker: DNS update() starting."); + $server = "https://ipv4.tunnelbroker.net/ipv4_end.php?"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser . ':' . $this->_dnsPass); + curl_setopt($ch, CURLOPT_URL, $server . 'tid=' . $this->_dnsHost); + break; + case 'selfhost': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("SelfHost: DNS update() starting."); + if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://carol.selfhost.de/nic/update"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port . '?system=dyndns&hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP . '&wildcard='.$this->_dnsWildcard . '&mx=' . $this->_dnsMX . '&backmx=NO'); + break; + case 'route53': + if ($this->_dnsVerboseLog) + log_error("Route53 ({$this->_dnsHost}): DNS update() starting."); + + /* Setting Variables */ + $hostname = "{$this->_dnsHost}."; + $ZoneID = $this->_dnsZoneID; + $AccessKeyId=$this->_dnsUser; + $SecretAccessKey=$this->_dnsPass; + $NewIP=$this->_dnsIP; + $NewTTL=$this->_dnsTTL; + + /* Include Route 53 Library Class */ + require_once('/etc/inc/r53.class'); + + /* Set Amazon AWS Credentials for this record */ + $r53 = new Route53($AccessKeyId, $SecretAccessKey); + + /* Function to find old values of records in Route 53 */ + if(!function_exists('Searchrecords')) { + function SearchRecords($records, $name) { + $result = array(); + foreach($records as $record) { + if(strtolower($record['Name']) == strtolower($name)) { + $result [] = $record; + } + } + return ($result) ? $result : false; + } + } + + $records = $r53->listResourceRecordSets("/hostedzone/$ZoneID"); + + /* Get IP for your hostname in Route 53 */ + if(false !== ($a_result = SearchRecords($records['ResourceRecordSets'], "$hostname"))) { + $OldTTL=$a_result[0][TTL]; + $OldIP=$a_result[0][ResourceRecords][0]; + } else { + $OldIP=""; + } + + /* Check if we need to update DNS Record */ + if ($OldIP !== $NewIP) { + if(!empty($OldIP)) { + /* Your Hostname already exists, deleting and creating it again */ + $changes = array(); + $changes[] = $r53->prepareChange(DELETE, $hostname, A, $OldTTL, $OldIP); + $changes[] = $r53->prepareChange(CREATE, $hostname, A, $NewTTL, $NewIP); + $result = $r53->changeResourceRecordSets("/hostedzone/$ZoneID", $changes); + } else { + /* Your Hostname does not exist yet, creating it */ + $changes = $r53->prepareChange(CREATE, $hostname, A, $NewTTL, $NewIP); + $result = $r53->changeResourceRecordSets("/hostedzone/$ZoneID", $changes); + } + } + $this->_checkStatus(0, $result); + break; + case 'custom': + case 'custom-v6': + if ($this->_dnsVerboseLog) + log_error("Custom DDNS ({$this->_dnsHost}): DNS update() starting."); + if (strstr($this->dnsUpdateURL, "%IP%")) {$needsIP = TRUE;} else {$needsIP = FALSE;} + if ($this->_dnsUser != '') { + if ($this->_curlIpresolveV4) + curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); + if ($this->_curlSslVerifypeer) + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE); + else + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); + curl_setopt($ch, CURLOPT_USERPWD, "{$this->_dnsUser}:{$this->_dnsPass}"); + } + $server = str_replace("%IP%", $this->_dnsIP, $this->_dnsUpdateURL); + if ($this->_dnsVerboseLog) + log_error("Sending request to: ".$server); + curl_setopt($ch, CURLOPT_URL, $server); + break; + case 'cloudflare': + $needsIP = TRUE; + $dnsServer ='www.cloudflare.com'; + $dnsHost = str_replace(' ','', $this->_dnsHost); + $URL = "https://{$dnsServer}/api.html?a=DIUP&email={$this->_dnsUser}&tkn={$this->_dnsPass}&ip={$this->_dnsIP}&hosts={$dnsHost}"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_URL, $URL); + break; + case 'eurodns': + $needsIP = TRUE; + if ($this->_dnsVerboseLog) + log_error("EuroDynDns ({$this->_dnsHost}) DNS update() starting."); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://eurodyndns.org/update/"; + $port = ""; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port . '?hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP); + break; + case 'gratisdns': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("GratisDNS.dk ({$this->_dnsHost}): DNS update() starting."); + $server = "https://ssl.gratisdns.dk/ddns.phtml"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + list($hostname, $domain) = explode(".", $this->_dnsHost, 2); + curl_setopt($ch, CURLOPT_URL, $server . '?u=' . $this->_dnsUser . '&p=' . $this->_dnsPass . '&h=' . $this->_dnsHost . '&d=' . $domain); + break; + case 'ovh-dynhost': + $needsIP = FALSE; + if ($this->_dnsVerboseLog) + log_error("OVH DynHOST: ({$this->_dnsHost}) DNS update() starting."); + if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON"; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = "https://www.ovh.com/nic/update"; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port . '?system=dyndns&hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP . '&wildcard='.$this->_dnsWildcard . '&mx=' . $this->_dnsMX . '&backmx=NO'); + break; + case 'citynetwork': + $needsIP = TRUE; + if ($this->_dnsVerboseLog) + log_error("City Network: ({$this->_dnsHost}) DNS update() starting."); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass); + $server = 'https://dyndns.citynetwork.se/nic/update'; + $port = ""; + if($this->_dnsServer) + $server = $this->_dnsServer; + if($this->_dnsPort) + $port = ":" . $this->_dnsPort; + curl_setopt($ch, CURLOPT_URL, $server .$port . '?hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP); + break; + default: + break; + } + if ($this->_dnsService != 'ods' and $this->_dnsService != 'route53') { + $data = curl_exec($ch); + $this->_checkStatus($ch, $data); + @curl_close($ch); + } + } + + /* + * Private Function (added 12 July 2005) [beta] + * Retrieve Update Status + */ + function _checkStatus($ch, $data) { + if ($this->_dnsVerboseLog) { + log_error("DynDNS ({$this->_dnsHost}): DynDns _checkStatus() starting."); + log_error("DynDNS ({$this->_dnsHost}): Current Service: {$this->_dnsService}"); + } + $successful_update = false; + if ($this->_dnsService != 'ods' and $this->_dnsService != 'route53' && @curl_error($ch)) { + $status = "Curl error occurred: " . curl_error($ch); + log_error($status); + $this->status = $status; + return; + } + switch ($this->_dnsService) { + case 'dnsomatic': + if (preg_match('/badauth/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): The DNS-O-Matic username or password specified are incorrect. No updates will be distributed to services until this is resolved."; + } else if (preg_match('/notfqdn /i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): The hostname specified is not a fully-qualified domain name. If no hostnames included, notfqdn will be returned once."; + } else if (preg_match('/nohost/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): The hostname passed could not be matched to any services configured. The service field will be blank in the return code."; + } else if (preg_match('/numhost/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): You may update up to 20 hosts. numhost is returned if you try to update more than 20 or update a round-robin."; + } else if (preg_match('/abuse/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): The hostname is blocked for update abuse."; + } else if (preg_match('/good/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/dnserr/i', $data)) { + $status = "DNS-O-Matic ({$this->_dnsHost}): DNS error encountered. Stop updating for 30 minutes."; + } else { + $status = "DNS-O-Matic ({$this->_dnsHost}): (Unknown Response)"; + log_error("DNS-O-Matic ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'citynetwork': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Not A FQDN!"; + } else if (preg_match('/nohost/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) No such host"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/badauth/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'ovh-dynhost': + case 'dyndns': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Not A FQDN!"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/noauth/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'dyndns-static': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Not A FQDN!"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully!"; + $successful_update = true; + } else if (preg_match('/noauth/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'dyndns-custom': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Not A FQDN!"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS: (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully!"; + $successful_update = true; + } else if (preg_match('/noauth/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'dhs': + break; + case 'noip': + case 'noip-free': + list($ip,$code) = explode(":",$data); + switch ($code) { + case 0: + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP address is current, no update performed."; + $successful_update = true; + break; + case 1: + $status = "phpDynDNS ({$this->_dnsHost}): (Success) DNS hostname update successful."; + $successful_update = true; + break; + case 2: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Hostname supplied does not exist."; + break; + case 3: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Invalid Username."; + break; + case 4: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Invalid Password."; + break; + case 5: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) To many updates sent."; + break; + case 6: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Account disabled due to violation of No-IP terms of service."; + break; + case 7: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Invalid IP. IP Address submitted is improperly formatted or is a private IP address or is on a blacklist."; + break; + case 8: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Disabled / Locked Hostname."; + break; + case 9: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Host updated is configured as a web redirect and no update was performed."; + break; + case 10: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Group supplied does not exist."; + break; + case 11: + $status = "phpDynDNS ({$this->_dnsHost}): (Success) DNS group update is successful."; + $successful_update = true; + break; + case 12: + $status = "phpDynDNS ({$this->_dnsHost}): (Success) DNS group is current, no update performed."; + $successful_update = true; + break; + case 13: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Update client support not available for supplied hostname or group."; + break; + case 14: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Hostname supplied does not have offline settings configured."; + break; + case 99: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Client disabled. Client should exit and not perform any more updates without user intervention."; + break; + case 100: + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Client disabled. Client should exit and not perform any more updates without user intervention."; + break; + default: + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + $this->_debug("Unknown Response: ".$data); + break; + } + break; + case 'easydns': + if (preg_match('/NOACCESS/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Authentication Failed: Username and/or Password was Incorrect."; + } else if (preg_match('/NOSERVICE/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) No Service: Dynamic DNS Service has been disabled for this domain."; + } else if (preg_match('/ILLEGAL INPUT/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Illegal Input: Self-Explanatory"; + } else if (preg_match('/TOOSOON/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Too Soon: Not Enough Time Has Elapsed Since Last Update"; + } else if (preg_match('/NOERROR/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'hn': + /* FIXME: add checks */ + break; + case 'zoneedit': + if (preg_match('/799/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error 799) Update Failed!"; + } else if (preg_match('/700/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error 700) Update Failed!"; + } else if (preg_match('/200/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else if (preg_match('/201/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'dyns': + if (preg_match("/400/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Bad Request - The URL was malformed. Required parameters were not provided."; + } else if (preg_match('/402/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Update Too Soon - You have tried updating to quickly since last change."; + } else if (preg_match('/403/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Database Error - There was a server-sided database error."; + } else if (preg_match('/405/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Hostname Error - The hostname (".$this->_dnsHost.") doesn't belong to you."; + } else if (preg_match('/200/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'ods': + if (preg_match("/299/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'freedns': + if (preg_match("/has not changed./i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match("/Updated/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'dnsexit': + if (preg_match("/is the same/i", $data)) { + $status = "phpDynDns ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match("/Success/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'loopia': + if (preg_match("/nochg/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match("/good/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully!"; + $successful_update = true; + } else if (preg_match('/badauth/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'opendns': + if (preg_match('/badauth/i', $data)) { + $status = "phpDynDNS({$this->_dnsHost}): (Error) Not a valid username or password!"; + } else if (preg_match('/nohost/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Hostname you are trying to update does not exist."; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/yours/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) hostname specified exists, but not under the username specified."; + } else if (preg_match('/abuse/i', $data)) { + $status = "phpDynDns ({$this->_dnsHost}): (Error) Updating too frequently, considered abuse."; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'staticcling': + if (preg_match("/invalid ip/i", $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Bad Request - The IP provided was invalid."; + } else if (preg_match('/required info missing/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Bad Request - Required parameters were not provided."; + } else if (preg_match('/invalid characters/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Bad Request - Illegal characters in either the username or the password."; + } else if (preg_match('/bad password/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Invalid password."; + } else if (preg_match('/account locked/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) This account has been administratively locked."; + } else if (preg_match('/update too frequent/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Updating too frequently."; + } else if (preg_match('/DB error/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Error) Server side error."; + } else if (preg_match('/success/i', $data)) { + $status = "phpDynDNS ({$this->_dnsHost}): (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS ({$this->_dnsHost}): (Unknown Response)"; + log_error("phpDynDNS ({$this->_dnsHost}): PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'namecheap': + $tmp = str_replace("^M", "", $data); + $ncresponse = @xml2array($tmp); + if (preg_match("/internal server error/i", $data)) { + $status = "phpDynDNS: (Error) Server side error."; + } else if (preg_match("/request is badly formed/i", $data)) { + $status = "phpDynDNS: (Error) Badly Formed Request (check your settings)."; + } else if ($ncresponse['interface-response']['ErrCount'] === "0") { + $status = "phpDynDNS: (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else if (is_numeric($ncresponse['interface-response']['ErrCount']) && ($ncresponse['interface-response']['ErrCount'] > 0)) { + $status = "phpDynDNS: (Error) " . implode(", ", $ncresponse["interface-response"]["errors"]); + $successful_update = true; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + + case 'he-net': + case 'he-net-v6': + if (preg_match("/badip/i", $data)) { + $status = "phpDynDNS: (Error) Bad Request - The IP provided was invalid."; + } else if (preg_match('/nohost/i', $data)) { + $status = "phpDynDNS: (Error) Bad Request - A hostname was not provided."; + } else if (preg_match('/badauth/i', $data)) { + $status = "phpDynDNS: (Error) Invalid username or password."; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS: (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS: (Success) No Change In IP Address."; + $successful_update = true; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'he-net-tunnelbroker': + /* + -ERROR: Missing parameter(s). + -ERROR: Invalid API key or password + -ERROR: Tunnel not found + -ERROR: Another tunnel exists for this IP. + -ERROR: This tunnel is already associated with this IP address + +OK: Tunnel endpoint updated to: x.x.x.x + */ + if (preg_match("/Missing parameter/i", $data)) { + $status = "phpDynDNS: (Error) Bad Request - Missing/Invalid Parameters."; + } else if (preg_match('/Tunnel not found/i', $data)) { + $status = "phpDynDNS: (Error) Bad Request - Invalid Tunnel ID."; + } else if (preg_match('/Invalid API key or password/i', $data)) { + $status = "phpDynDNS: (Error) Invalid username or password."; + } else if (preg_match('/OK:/i', $data)) { + $status = "phpDynDNS: (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else if (preg_match('/This tunnel is already associated with this IP address/i', $data)) { + $status = "phpDynDNS: (Success) No Change In IP Address."; + $successful_update = true; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'selfhost': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS: (Error) Not A FQDN!"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS: (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS: (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/noauth/i', $data)) { + $status = "phpDynDNS: (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'route53': + $successful_update = true; + break; + case 'custom': + case 'custom-v6': + $successful_update = false; + if ($this->_dnsResultMatch == "") { + $successful_update = true; + }else { + $this->_dnsResultMatch = str_replace("%IP%", $this->_dnsIP, $this->_dnsResultMatch); + $matches = preg_split("/(?_dnsResultMatch); + foreach($matches as $match) { + $match= str_replace("\\|", "|", $match); + if(strcmp($match, trim($data, "\t\n\r")) == 0) + $successful_update = true; + } + unset ($matches); + } + if ($successful_update == true) + $status = "phpDynDNS: (Success) IP Address Updated Successfully!"; + else + $status = "phpDynDNS: (Error) Result did not match."; + break; + case 'cloudflare': + // recieve multipe results + $data = explode("\n",$data); + $lines = count($data)-1; + + // loop over the lines + for ($pos=0; ($successful_update || $pos == 0) && $pos < $lines; $pos++){ + $resp = $data[$pos]; + if (preg_match('/UAUTH/i', $resp)) { + $status = "DynDNS: The username specified is not authorized to update this hostname and domain."; + } else if (preg_match('/NOHOST/i', $resp)) { + $status = "DynDNS: No valid FQDN (fully qualified domain name) was specified"; + } else if (preg_match('/INVLDHST/i', $resp)) { + $status = "DynDNS: An invalid hostname was specified. This may be due to the fact the hostname has not been created in the system. Creating new host names via clients is not supported."; + } else if (preg_match('/INVLDIP/i', $resp)) { + $status = "DynDNS: The IP address given is not valid."; + } else if (preg_match('/DUPHST/i', $resp)) { + $status = "DynDNS: Duplicate values exist for a record. Only single values for records are supported currently."; + } else if (preg_match('/NOUPDATE/i', $resp)) { + $status = "DynDNS: No changes made to the hostname (".strtok($resp,' ')."). Continual updates with no changes lead to blocked clients."; + $successful_update = true; //success if it is the same so that it saves + } else if (preg_match('/OK/i', $resp)) { + $status = "DynDNS: (Success) (".strtok($resp,' ').") IP Address for Changed Successfully!"; + $successful_update = true; + } else { + $status = "DynDNS: (Unknown Response)"; + log_error("DynDNS: PAYLOAD: {$resp}"); + $this->_debug($resp); + } + log_error($status); + } + break; + case 'eurodns': + if (preg_match('/notfqdn/i', $data)) { + $status = "phpDynDNS: (Error) Not A FQDN!"; + } else if (preg_match('/nochg/i', $data)) { + $status = "phpDynDNS: (Success) No Change In IP Address"; + $successful_update = true; + } else if (preg_match('/good/i', $data)) { + $status = "phpDynDNS: (Success) IP Address Changed Successfully! (".$this->_dnsIP.")"; + $successful_update = true; + } else if (preg_match('/badauth/i', $data)) { + $status = "phpDynDNS: (Error) User Authorization Failed"; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + case 'gratisdns': + if (preg_match('/Forkerte værdier/i', $data)) { + $status = "phpDynDNS: (Error) Wrong values - Update could not be completed."; + } else if (preg_match('/Bruger login: Bruger eksistere ikke/i', $data)) { + $status = "phpDynDNS: (Error) Unknown username - User does not exist."; + } else if (preg_match('/Bruger login: 1Fejl i kodeord/i', $data)) { + $status = "phpDynDNS: (Error) Wrong password - Remember password is case sensitive."; + } else if (preg_match('/Domæne kan IKKE administreres af bruger/i', $data)) { + $status = "phpDynDNS: (Error) User unable to administer the selected domain."; + } else if (preg_match('/OK/i', $data)) { + $status = "phpDynDNS: (Success) IP Address Updated Successfully!"; + $successful_update = true; + } else { + $status = "phpDynDNS: (Unknown Response)"; + log_error("phpDynDNS: PAYLOAD: {$data}"); + $this->_debug($data); + } + break; + } + + if($successful_update == true) { + /* Write WAN IP to cache file */ + $wan_ip = $this->_checkIP(); + conf_mount_rw(); + if ($this->_useIPv6 == false && $wan_ip > 0) { + $currentTime = time(); + notify_all_remote(sprintf(gettext("DynDNS updated IP Address on %s (%s) to %s"), convert_real_interface_to_friendly_descr($this->_if), $this->_if, $wan_ip)); + log_error("phpDynDNS: updating cache file {$this->_cacheFile}: {$wan_ip}"); + @file_put_contents($this->_cacheFile, "{$wan_ip}:{$currentTime}"); + } else + @unlink($this->_cacheFile); + if ($this->_useIPv6 == true && $wan_ip > 0) { + $currentTime = time(); + notify_all_remote(sprintf(gettext("DynDNS updated IPv6 Address on %s (%s) to %s"), convert_real_interface_to_friendly_descr($this->_if), $this->_if, $wan_ip)); + log_error("phpDynDNS: updating cache file {$this->_cacheFile_v6}: {$wan_ip}"); + @file_put_contents($this->_cacheFile_v6, "{$wan_ip}|{$currentTime}"); + } else + @unlink($this->_cacheFile_v6); + conf_mount_ro(); + } + $this->status = $status; + log_error($status); + } + + /* + * Private Function (added 12 July 05) [beta] + * Return Error, Set Last Error, and Die. + */ + function _error($errorNumber = '1') { + switch ($errorNumber) { + case 0: + break; + case 2: + $error = 'phpDynDNS: (ERROR!) No Dynamic DNS Service provider was selected.'; + break; + case 3: + $error = 'phpDynDNS: (ERROR!) No Username Provided.'; + break; + case 4: + $error = 'phpDynDNS: (ERROR!) No Password Provided.'; + break; + case 5: + $error = 'phpDynDNS: (ERROR!) No Hostname Provided.'; + break; + case 6: + $error = 'phpDynDNS: (ERROR!) The Dynamic DNS Service provided is not yet supported.'; + break; + case 7: + $error = 'phpDynDNS: (ERROR!) No Update URL Provided.'; + break; + case 8: + $status = "Route 53: (Error) Invalid ZoneID"; + break; + case 9: + $status = "Route 53: (Error) Invalid TTL"; + break; + case 10: + $error = "phpDynDNS ({$this->_dnsHost}): No change in my IP address and/or " . $this->_dnsMaxCacheAgeDays . " days has not passed. Not updating dynamic DNS entry."; + break; + default: + $error = "phpDynDNS: (ERROR!) Unknown Response."; + /* FIXME: $data isn't in scope here */ + /* $this->_debug($data); */ + break; + } + $this->lastError = $error; + log_error($error); + } + + /* + * Private Function (added 12 July 05) [beta] + * - Detect whether or not IP needs to be updated. + * | Written Specifically for pfSense (https://www.pfsense.org) may + * | work with other systems. pfSense base is FreeBSD. + */ + function _detectChange() { + global $debug; + + if ($debug) + log_error("DynDns ({$this->_dnsHost}): _detectChange() starting."); + + $currentTime = time(); + + $wan_ip = $this->_checkIP(); + if ($wan_ip == 0) { + log_error("DynDns ({$this->_dnsHost}): Current WAN IP could not be determined, skipping update process."); + return false; + } + $log_error = "DynDns ({$this->_dnsHost}): Current WAN IP: {$wan_ip} "; + + if ($this->_useIPv6 == true) { + if (file_exists($this->_cacheFile_v6)) { + $contents = file_get_contents($this->_cacheFile_v6); + list($cacheIP,$cacheTime) = explode('|', $contents); + $this->_debug($cacheIP.'/'.$cacheTime); + $initial = false; + $log_error .= "Cached IPv6: {$cacheIP} "; + } else { + conf_mount_rw(); + $cacheIP = '::'; + @file_put_contents($this->_cacheFile, "::|{$currentTime}"); + conf_mount_ro(); + $cacheTime = $currentTime; + $initial = true; + $log_error .= "No Cached IPv6 found."; + } + } else { + if (file_exists($this->_cacheFile)) { + $contents = file_get_contents($this->_cacheFile); + list($cacheIP,$cacheTime) = explode(':', $contents); + $this->_debug($cacheIP.'/'.$cacheTime); + $initial = false; + $log_error .= "Cached IP: {$cacheIP} "; + } else { + conf_mount_rw(); + $cacheIP = '0.0.0.0'; + @file_put_contents($this->_cacheFile, "0.0.0.0:{$currentTime}"); + conf_mount_ro(); + $cacheTime = $currentTime; + $initial = true; + $log_error .= "No Cached IP found."; + } + } + if ($this->_dnsVerboseLog) + log_error($log_error); + + // Convert seconds = days * hr/day * min/hr * sec/min + $maxCacheAgeSecs = $this->_dnsMaxCacheAgeDays * 24 * 60 * 60; + + $needs_updating = FALSE; + /* lets determine if the item needs updating */ + if ($cacheIP != $wan_ip) { + $needs_updating = true; + $update_reason = "DynDns: cacheIP != wan_ip. Updating. "; + $update_reason .= "Cached IP: {$cacheIP} WAN IP: {$wan_ip} "; + } + if (($currentTime - $cacheTime) > $maxCacheAgeSecs) { + $needs_updating = true; + $this->_forceUpdateNeeded = true; + $update_reason = "DynDns: More than " . $this->_dnsMaxCacheAgeDays . " days. Updating. "; + $update_reason .= "{$currentTime} - {$cacheTime} > {$maxCacheAgeSecs} "; + } + if ($initial == true) { + $needs_updating = true; + $update_reason .= "Initial update. "; + } + + /* finally if we need updating then store the + * new cache value and return true + */ + if ($needs_updating == true) { + if ($this->_dnsVerboseLog) + log_error("DynDns ({$this->_dnsHost}): {$update_reason}"); + return true; + } + + return false; + } + + /* + * Private Function (added 16 July 05) [beta] + * - Writes debug information to a file. + * - This function is only called when a unknown response + * - status is returned from a DynDNS service provider. + */ + function _debug($data) { + global $g; + + if (!$g['debug']) + return; + $string = date('m-d-y h:i:s').' - ('.$this->_debugID.') - ['.$this->_dnsService.'] - '.$data."\n"; + conf_mount_rw(); + $file = fopen($this->_debugFile, 'a'); + fwrite($file, $string); + fclose($file); + conf_mount_ro(); + } + function _checkIP() { + global $debug; + + if ($debug) + log_error("DynDns ({$this->_dnsHost}): _checkIP() starting."); + + if ($this->_useIPv6 == true) { + $ip_address = find_interface_ipv6($this->_if); + if (!is_ipaddrv6($ip_address)) + return 0; + } else { + $ip_address = find_interface_ip($this->_if); + if (!is_ipaddr($ip_address)) + return 0; + } + if ($this->_useIPv6 == false && is_private_ip($ip_address)) { + $hosttocheck = "checkip.dyndns.org"; + $try = 0; + while ($try < 3) { + $checkip = gethostbyname($hosttocheck); + if (is_ipaddr($checkip)) + break; + $try++; + } + if ($try >= 3) { + log_error("Dyndns debug information ({$this->_dnsHost}): Could not resolve {$hosttocheck} to ip using interface ip {$ip_address}."); + return 0; + } + $ip_ch = curl_init("http://{$checkip}"); + curl_setopt($ip_ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ip_ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ip_ch, CURLOPT_INTERFACE, $ip_address); + curl_setopt($ip_ch, CURLOPT_CONNECTTIMEOUT, '30'); + curl_setopt($ip_ch, CURLOPT_TIMEOUT, 120); + if ($this->_useIPv6 == false) { + curl_setopt($ip_ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + } + $ip_result_page = curl_exec($ip_ch); + curl_close($ip_ch); + $ip_result_decoded = urldecode($ip_result_page); + preg_match('/Current IP Address: (.*)<\/body>/', $ip_result_decoded, $matches); + $ip_address = trim($matches[1]); + if (is_ipaddr($ip_address)) { + if ($this->_dnsVerboseLog) + log_error("DynDns ({$this->_dnsHost}): {$ip_address} extracted from {$hosttocheck}"); + } else { + log_error("DynDns ({$this->_dnsHost}): IP address could not be extracted from {$hosttocheck}"); + return 0; + } + } else { + if ($this->_dnsVerboseLog) + log_error("DynDns ({$this->_dnsHost}): {$ip_address} extracted from local system."); + } + $this->_dnsIP = $ip_address; + + return $ip_address; + } + + } + +?> diff --git a/usr/etc/inc/easyrule.inc b/usr/etc/inc/easyrule.inc new file mode 100644 index 000000000..669684479 --- /dev/null +++ b/usr/etc/inc/easyrule.inc @@ -0,0 +1,377 @@ + $ifd) { + if (strtolower($int) == strtolower($ifd)) + return $if; + } + + if (substr($int, 0, 4) == "ovpn") + return "openvpn"; + + return false; +} + +function easyrule_block_rule_exists($int = 'wan', $ipproto = "inet") { + global $blockaliasname, $config; + /* No rules, we we know it doesn't exist */ + if (!is_array($config['filter']['rule'])) { + return false; + } + + /* Search through the rules for one referencing our alias */ + foreach ($config['filter']['rule'] as $rule) { + if (!is_array($rule) || !is_array($rule['source'])) + continue; + $checkproto = isset($rule['ipprotocol']) ? $rule['ipprotocol'] : "inet"; + if ($rule['source']['address'] == $blockaliasname . strtoupper($int) && ($rule['interface'] == $int) && ($checkproto == $ipproto)) + return true; + } + return false; +} + +function easyrule_block_rule_create($int = 'wan', $ipproto = "inet") { + global $blockaliasname, $config; + /* If the alias doesn't exist, exit. + * Can't create an empty alias, and we don't know a host */ + if (easyrule_block_alias_getid($int) === false) + return false; + + /* If the rule already exists, no need to do it again */ + if (easyrule_block_rule_exists($int, $ipproto)) + return true; + + /* No rules, start a new array */ + if (!is_array($config['filter']['rule'])) { + $config['filter']['rule'] = array(); + } + + filter_rules_sort(); + $a_filter = &$config['filter']['rule']; + + /* Make up a new rule */ + $filterent = array(); + $filterent['type'] = 'block'; + $filterent['interface'] = $int; + $filterent['ipprotocol'] = $ipproto; + $filterent['source']['address'] = $blockaliasname . strtoupper($int); + $filterent['destination']['any'] = ''; + $filterent['descr'] = gettext("Easy Rule: Blocked from Firewall Log View"); + $filterent['created'] = make_config_revision_entry(null, gettext("Easy Rule")); + + array_splice($a_filter, 0, 0, array($filterent)); + + return true; +} + +function easyrule_block_alias_getid($int = 'wan') { + global $blockaliasname, $config; + if (!is_array($config['aliases'])) + return false; + + /* Hunt down an alias with the name we want, return its id */ + foreach ($config['aliases']['alias'] as $aliasid => $alias) + if ($alias['name'] == $blockaliasname . strtoupper($int)) + return $aliasid; + + return false; +} + +function easyrule_block_alias_add($host, $int = 'wan') { + global $blockaliasname, $config; + /* If the host isn't a valid IP address, bail */ + $host = trim($host, "[]"); + if (!is_ipaddr($host) && !is_subnet($host)) + return false; + + /* If there are no aliases, start an array */ + if (!is_array($config['aliases']['alias'])) + $config['aliases']['alias'] = array(); + + $a_aliases = &$config['aliases']['alias']; + + /* Try to get the ID if the alias already exists */ + $id = easyrule_block_alias_getid($int); + if ($id === false) + unset($id); + + $alias = array(); + + if (is_subnet($host)) { + list($host, $mask) = explode("/", $host); + } elseif (is_specialnet($host)) { + $mask = 0; + } elseif (is_ipaddrv6($host)) { + $mask = 128; + } else { + $mask = 32; + } + + if (isset($id) && $a_aliases[$id]) { + /* Make sure this IP isn't already in the list. */ + if (in_array($host.'/'.$mask, explode(" ", $a_aliases[$id]['address']))) + return true; + /* Since the alias already exists, just add to it. */ + $alias['name'] = $a_aliases[$id]['name']; + $alias['type'] = $a_aliases[$id]['type']; + $alias['descr'] = $a_aliases[$id]['descr']; + + $alias['address'] = $a_aliases[$id]['address'] . ' ' . $host . '/' . $mask; + $alias['detail'] = $a_aliases[$id]['detail'] . gettext('Entry added') . ' ' . date('r') . '||'; + } else { + /* Create a new alias with all the proper information */ + $alias['name'] = $blockaliasname . strtoupper($int); + $alias['type'] = 'network'; + $alias['descr'] = gettext("Hosts blocked from Firewall Log view"); + + $alias['address'] = $host . '/' . $mask; + $alias['detail'] = gettext('Entry added') . ' ' . date('r') . '||'; + } + + /* Replace the old alias if needed, otherwise tack it on the end */ + if (isset($id) && $a_aliases[$id]) + $a_aliases[$id] = $alias; + else + $a_aliases[] = $alias; + + // Sort list + $a_aliases = msort($a_aliases, "name"); + + return true; +} + +function easyrule_block_host_add($host, $int = 'wan', $ipproto = "inet") { + global $retval; + /* Bail if the supplied host is not a valid IP address */ + $host = trim($host, "[]"); + if (!is_ipaddr($host) && !is_subnet($host)) + return false; + + /* Flag whether or not we need to reload the filter */ + $dirty = false; + + /* Attempt to add this host to the alias */ + if (easyrule_block_alias_add($host, $int)) { + $dirty = true; + } else { + /* Couldn't add the alias, or adding the host failed. */ + return false; + } + + /* Attempt to add the firewall rule if it doesn't exist. + * Failing to add the rule isn't necessarily an error, it may + * have been modified by the user in some way. Adding to the + * Alias is what's important. + */ + if (!easyrule_block_rule_exists($int, $ipproto)) { + if (easyrule_block_rule_create($int, $ipproto)) { + $dirty = true; + } else { + return false; + } + } + + /* If needed, write the config and reload the filter */ + if ($dirty) { + write_config(); + $retval = filter_configure(); + if (!empty($_SERVER['DOCUMENT_ROOT'])) { + header("Location: firewall_aliases.php"); + exit; + } else { + return true; + } + } else { + return false; + } +} + +function easyrule_pass_rule_add($int, $proto, $srchost, $dsthost, $dstport, $ipproto) { + global $config; + + /* No rules, start a new array */ + if (!is_array($config['filter']['rule'])) { + $config['filter']['rule'] = array(); + } + + filter_rules_sort(); + $a_filter = &$config['filter']['rule']; + + /* Make up a new rule */ + $filterent = array(); + $filterent['type'] = 'pass'; + $filterent['interface'] = $int; + $filterent['ipprotocol'] = $ipproto; + $filterent['descr'] = gettext("Easy Rule: Passed from Firewall Log View"); + + if ($proto != "any") + $filterent['protocol'] = $proto; + else + unset($filterent['protocol']); + + /* Default to only allow echo requests, since that's what most people want and + * it should be a safe choice. */ + if ($proto == "icmp") + $filterent['icmptype'] = 'echoreq'; + + if ((strtolower($proto) == "icmp6") || (strtolower($proto) == "icmpv6")) + $filterent['protocol'] = "icmp"; + + if (is_subnet($srchost)) { + list($srchost, $srcmask) = explode("/", $srchost); + } elseif (is_specialnet($srchost)) { + $srcmask = 0; + } elseif (is_ipaddrv6($srchost)) { + $srcmask = 128; + } else { + $srcmask = 32; + } + + if (is_subnet($dsthost)) { + list($dsthost, $dstmask) = explode("/", $dsthost); + } elseif (is_specialnet($dsthost)) { + $dstmask = 0; + } elseif (is_ipaddrv6($dsthost)) { + $dstmask = 128; + } else { + $dstmask = 32; + } + + pconfig_to_address($filterent['source'], $srchost, $srcmask); + pconfig_to_address($filterent['destination'], $dsthost, $dstmask, '', $dstport, $dstport); + + $filterent['created'] = make_config_revision_entry(null, gettext("Easy Rule")); + $a_filter[] = $filterent; + + write_config($filterent['descr']); + $retval = filter_configure(); + if (!empty($_SERVER['DOCUMENT_ROOT'])) { + header("Location: firewall_rules.php?if={$int}"); + exit; + } else { + return true; + } +} + +function easyrule_parse_block($int, $src, $ipproto = "inet") { + if (!empty($src) && !empty($int)) { + $src = trim($src, "[]"); + if (!is_ipaddr($src) && !is_subnet($src)) { + return gettext("Tried to block invalid IP:") . ' ' . htmlspecialchars($src); + } + $int = easyrule_find_rule_interface($int); + if ($int === false) { + return gettext("Invalid interface for block rule:") . ' ' . htmlspecialchars($int); + } + if (easyrule_block_host_add($src, $int, $ipproto)) { + return gettext("Host added successfully"); + } else { + return gettext("Failed to create block rule, alias, or add host."); + } + } else { + return gettext("Tried to block but had no host IP or interface"); + } + return gettext("Unknown block error."); +} +function easyrule_parse_pass($int, $proto, $src, $dst, $dstport = 0, $ipproto = "inet") { + /* Check for valid int, srchost, dsthost, dstport, and proto */ + global $protocols_with_ports; + $src = trim($src, "[]"); + $dst = trim($dst, "[]"); + + if (!empty($int) && !empty($proto) && !empty($src) && !empty($dst)) { + $int = easyrule_find_rule_interface($int); + if ($int === false) { + return gettext("Invalid interface for pass rule:") . ' ' . htmlspecialchars($int); + } + if (getprotobyname($proto) == -1) { + return gettext("Invalid protocol for pass rule:") . ' ' . htmlspecialchars($proto); + } + if (!is_ipaddr($src) && !is_subnet($src) && !is_ipaddroralias($src) && !is_specialnet($src)) { + return gettext("Tried to pass invalid source IP:") . ' ' . htmlspecialchars($src); + } + if (!is_ipaddr($dst) && !is_subnet($dst) && !is_ipaddroralias($dst) && !is_specialnet($dst)) { + return gettext("Tried to pass invalid destination IP:") . ' ' . htmlspecialchars($dst); + } + if (in_array($proto, $protocols_with_ports)) { + if (empty($dstport)) { + return gettext("Missing destination port:") . ' ' . htmlspecialchars($dstport); + } + if (!is_port($dstport) && ($dstport != "any")) { + return gettext("Tried to pass invalid destination port:") . ' ' . htmlspecialchars($dstport); + } + } else { + $dstport = 0; + } + /* Should have valid input... */ + if (easyrule_pass_rule_add($int, $proto, $src, $dst, $dstport, $ipproto)) { + return gettext("Successfully added pass rule!"); + } else { + return gettext("Failed to add pass rule."); + } + } else { + return gettext("Missing parameters for pass rule."); + } + return gettext("Unknown pass error."); +} + +?> diff --git a/usr/etc/inc/filter.inc b/usr/etc/inc/filter.inc new file mode 100644 index 000000000..c7f9693a1 --- /dev/null +++ b/usr/etc/inc/filter.inc @@ -0,0 +1,3748 @@ +. + 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. + + pfSense_BUILDER_BINARIES: /sbin/kldload /usr/sbin/tcpdump /sbin/pfctl /bin/rm + pfSense_BUILDER_BINARIES: /usr/sbin/inetd + pfSense_MODULE: filter +*/ + +/* DISABLE_PHP_LINT_CHECKING */ + +/* holds the items that will be executed *AFTER* the filter is fully loaded */ +$after_filter_configure_run = array(); + +/* For installing cron job of schedules */ +$time_based_rules = false; + +/* Used to hold the interface list that will be used on ruleset creation. */ +$FilterIflist = array(); + +/* Create a global array to avoid errors on rulesets. */ +$GatewaysList = array(); + +/* Used for the hostname dns resolver */ +$filterdns = array(); + +/* Used for aliases and interface macros */ +$aliases = ""; + +global $tracker; +$tracker = 1000000000; + +function filter_rule_tracker($tracker) { + global $tracker; + + return (++$tracker); + +} + +function fix_rule_label($descr) { + $descr = str_replace('"', '', $descr); + if (strlen($descr) > 63) + return substr($descr, 0, 60) . "..."; + else + return $descr; +} + +function is_bogonsv6_used() { + global $config, $g; + # Only use bogonsv6 table if IPv6 Allow is on, and at least 1 enabled interface also has "blockbogons" enabled. + $usebogonsv6 = false; + if (isset($config['system']['ipv6allow'])) { + foreach ($config['interfaces'] as $ifacedata) { + if(isset($ifacedata['enable']) && isset($ifacedata['blockbogons'])) { + $usebogonsv6 = true; + break; + } + } + } + return $usebogonsv6; +} + +function flowtable_configure() { + global $config, $g; + + if (empty($config['system']['flowtable'])) { + set_single_sysctl("net.inet.flowtable.enable", "0"); + return; + } + + // Figure out how many flows we should reserve + // sized 2x larger than the number of unique connection destinations. + if($config['system']['maximumstates'] <> "" && is_numeric($config['system']['maximumstates'])) + $maxstates = $config['system']['maximumstates']; + else + $maxstates = 150000; + // nmbflows cpu count * ($maxstates * 2) + $cpus = get_single_sysctl('kern.smp.cpus'); + $nmbflows = ($cpus*($maxstates*2)); + // Flowtable currently only works on 8.0 + if(get_freebsd_version() == "8") { + set_sysctl(array( + "net.inet.flowtable.nmbflows" => $nmbflows, + "net.inet.ip.output_flowtable_size" => $maxstates, + "net.inet.flowtable.enable" => "1") + ); + } +} + +function filter_pflog_start($kill_first = false) { + global $config, $g; + if ($g['platform'] == 'jail') + return; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_pflog_start() being called $mt\n"; + } + if (!file_exists("{$g['varrun_path']}/filterlog.pid") || + !isvalidpid("{$g['varrun_path']}/filterlog.pid")) + mwexec("/usr/local/sbin/filterlog -i pflog0 -p {$g['varrun_path']}/filterlog.pid"); +} + +/* reload filter async */ +function filter_configure() { + global $g; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_configure() being called $mt\n"; + } + + /* + * NOTE: Check here for bootup status since this should not be triggered during bootup. + * The reason is that rc.bootup calls filter_configure_sync directly which does this too. + */ + if (!$g['booting']) + send_event("filter reload"); +} + +function filter_delete_states_for_down_gateways() { + global $config, $GatewaysList; + + if (isset($config['system']['kill_states'])) + return; + + $any_gateway_down = false; + $a_gateways = return_gateways_status(); + if (is_array($GatewaysList)) { + foreach ($GatewaysList as $gwname => $gateway) { + if (empty($gateway['monitor'])) + continue; + if (!is_ipaddr($gateway['monitor'])) + continue; + if (strstr($gateway['monitor'], "127.0.0.")) + continue; + if (empty($a_gateways[$gateway['monitor']])) + continue; + $gwstatus =& $a_gateways[$gateway['monitor']]; + if (strstr($gwstatus['status'], "down")) { + $any_gateway_down = true; + break; + } + } + } + if ($any_gateway_down == true) + mwexec("/sbin/pfctl -Fs"); +} + +/* reload filter sync */ +function filter_configure_sync($delete_states_if_needed = true) { + global $config, $g, $after_filter_configure_run, $FilterIflist; + global $time_based_rules, $filterdns, $aliases, $dummynet_name_list; + + /* Use filter lock to not allow concurrent filter reloads during this run. */ + $filterlck = lock('filter', LOCK_EX); + + + filter_pflog_start(); + update_filter_reload_status(gettext("Initializing")); + + /* invalidate interface cache */ + get_interface_arr(true); + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_configure_sync() being called $mt\n"; + } + /* Get interface list to work with. */ + filter_generate_optcfg_array(); + if($g['booting'] == true) + echo gettext("Configuring firewall"); + + /* generate aliases */ + if($g['booting'] == true) + echo "."; + update_filter_reload_status(gettext("Creating aliases")); + $aliases = filter_generate_aliases(); + $gateways = filter_generate_gateways(); + if($g['booting'] == true) + echo "."; + update_filter_reload_status(gettext("Generating Limiter rules")); + $dummynet_rules = filter_generate_dummynet_rules(); + $dummynet_name_list = get_unique_dnqueue_list(); + update_filter_reload_status(gettext("Generating NAT rules")); + /* generate nat rules */ + $natrules = filter_nat_rules_generate(); + if($g['booting'] == true) + echo "."; + update_filter_reload_status(gettext("Generating filter rules")); + /* generate pfctl rules */ + $pfrules = filter_rules_generate(); + /* generate altq, limiter */ + if($g['booting'] == true) + echo "."; + update_filter_reload_status(gettext("Generating ALTQ queues")); + $altq_queues = filter_generate_altq_queues(); + update_filter_reload_status(gettext("Generating Layer7 rules")); + generate_layer7_files(); + if($g['booting'] == true) + echo "."; + update_filter_reload_status(gettext("Loading filter rules")); + /* enable pf if we need to, otherwise disable */ + if(!isset ($config['system']['disablefilter'])) { + mwexec("/sbin/pfctl -e", true); + } else { + mwexec("/sbin/pfctl -d", true); + unlink_if_exists("{$g['tmp_path']}/filter_loading"); + update_filter_reload_status(gettext("Filter is disabled. Not loading rules.")); + if($g['booting'] == true) + echo gettext("done.") . "\n"; + unlock($filterlck); + return; + } + + $limitrules = ""; + /* User defined maximum table entries in Advanced menu. */ + if ($config['system']['maximumtableentries'] <> "" && is_numeric($config['system']['maximumtableentries'])) + $limitrules .= "set limit table-entries {$config['system']['maximumtableentries']}\n"; + + if ($config['system']['optimization'] <> "") { + $limitrules .= "set optimization {$config['system']['optimization']}\n"; + if($config['system']['optimization'] == "conservative") { + $limitrules .= "set timeout { udp.first 300, udp.single 150, udp.multiple 900 }\n"; + } + } else + $limitrules .= "set optimization normal\n"; + + if (!empty($config['system']['adaptivestart']) && !empty($config['system']['adaptiveend'])) + $limitrules .= "set timeout { adaptive.start {$config['system']['adaptivestart']}, adaptive.end {$config['system']['adaptiveend']} }\n"; + else + $limitrules .= "set timeout { adaptive.start 0, adaptive.end 0 }\n"; + + if ($config['system']['maximumstates'] <> "" && is_numeric($config['system']['maximumstates'])) { + /* User defined maximum states in Advanced menu. */ + $limitrules .= "set limit states {$config['system']['maximumstates']}\n"; + $limitrules .= "set limit src-nodes {$config['system']['maximumstates']}\n"; + } else { + $max_states = pfsense_default_state_size(); + $limitrules .= "set limit states {$max_states}\n"; + $limitrules .= "set limit src-nodes {$max_states}\n"; + } + + if (isset($config['system']['lb_use_sticky']) && is_numeric($config['system']['srctrack']) && ($config['system']['srctrack'] > 0)) + $limitrules .= "set timeout src.track {$config['system']['srctrack']}\n"; + + // Configure flowtable support if enabled. + flowtable_configure(); + + $rules = ""; + $rules = "{$limitrules}\n"; + $rules .= "{$aliases} \n"; + $rules .= "{$gateways} \n"; + update_filter_reload_status(gettext("Setting up logging information")); + $rules .= filter_setup_logging_interfaces(); + $rules .= "\n"; + $rules .= "set skip on pfsync0\n"; + $rules .= "\n"; + update_filter_reload_status(gettext("Setting up SCRUB information")); + $rules .= filter_generate_scrubing(); + $rules .= "\n"; + $rules .= "{$altq_queues}\n"; + $rules .= "{$natrules}\n"; + $rules .= "{$pfrules}\n"; + $rules .= discover_pkg_rules("filter"); + + unset($aliases, $gateways, $altq_queues, $natrules, $pfrules); + + // Copy rules.debug to rules.debug.old + if(file_exists("{$g['tmp_path']}/rules.debug")) + @copy("{$g['tmp_path']}/rules.debug", "{$g['tmp_path']}/rules.debug.old"); + + if (!@file_put_contents("{$g['tmp_path']}/rules.debug", $rules, LOCK_EX)) { + log_error("WARNING: Could not write new rules!"); + unlock($filterlck); + return; + } + + @file_put_contents("{$g['tmp_path']}/rules.limits", $limitrules); + mwexec("/sbin/pfctl -Of {$g['tmp_path']}/rules.limits"); + unset($rules, $limitrules); + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "pfctl being called at $mt\n"; + } + unset($rules_loading, $rules_error); + $_grbg = exec("/sbin/pfctl -o basic -f {$g['tmp_path']}/rules.debug 2>&1", $rules_error, $rules_loading); + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "pfctl done at $mt\n"; + } + /* + * check for a error while loading the rules file. if an error has occurred + * then output the contents of the error to the caller + */ + if($rules_loading <> 0) { + $saved_line_error = $rules_error[0]; + $line_error = explode(":", $rules_error[0]); + $line_number = $line_error[1]; + $line_split = file("{$g['tmp_path']}/rules.debug"); + if(is_array($line_split)) + $line_error = sprintf(gettext('The line in question reads [%1$d]: %2$s'), $line_number, $line_split[$line_number-1]); + unset($line_split); + + /* Brutal ugly hack but required -- PF is stuck, unwedge */ + if (strstr("$rules_error[0]", "busy")) { + exec("/sbin/pfctl -d; /sbin/pfctl -e; /sbin/pfctl -f {$g['tmp_path']}/rules.debug"); + $error_msg = gettext("PF was wedged/busy and has been reset."); + file_notice("pf_busy", $error_msg, "pf_busy", ""); + } else { + $_grbg = exec("/sbin/pfctl -o basic -f {$g['tmp_path']}/rules.debug.old 2>&1"); + } + unset($rules_loading, $rules_error); + + if ($line_error and $line_number) { + file_notice("filter_load", sprintf(gettext('There were error(s) loading the rules: %1$s - %2$s'), $saved_line_error, $line_error), "Filter Reload", ""); + update_filter_reload_status(sprintf(gettext('There were error(s) loading the rules: %1$s - %2$s'), $saved_line_error, $line_error)); + unlock($filterlck); + return; + } + } + + # If we are not using bogonsv6 then we can remove any bogonsv6 table from the running pf (if the table is not there, the kill is still fine). + if (!is_bogonsv6_used()) + $_grbg = exec("/sbin/pfctl -t bogonsv6 -T kill 2>/dev/null"); + + update_filter_reload_status(gettext("Starting up layer7 daemon")); + layer7_start_l7daemon(); + + if(!empty($filterdns)) { + @file_put_contents("{$g['varetc_path']}/filterdns.conf", implode("", $filterdns)); + unset($filterdns); + if (isvalidpid("{$g['varrun_path']}/filterdns.pid")) + sigkillbypid("{$g['varrun_path']}/filterdns.pid", "HUP"); + else { + /* + * FilterDNS has three debugging levels. The default choosen is 1. + * Availabe are level 2 and greater then 2. + */ + if (isset($config['system']['aliasesresolveinterval']) && is_numeric($config['system']['aliasesresolveinterval'])) + $resolve_interval = $config['system']['aliasesresolveinterval']; + else + $resolve_interval = 300; + mwexec("/usr/local/sbin/filterdns -p {$g['varrun_path']}/filterdns.pid -i {$resolve_interval} -c {$g['varetc_path']}/filterdns.conf -d 1"); + } + } else { + killbypid("{$g['varrun_path']}/filterdns.pid"); + @unlink("{$g['varrun_path']}/filterdns.pid"); + } + + /* run items scheduled for after filter configure run */ + $fda = fopen("{$g['tmp_path']}/commands.txt", "w"); + if($fda) { + if($after_filter_configure_run) { + foreach($after_filter_configure_run as $afcr) + fwrite($fda, $afcr . "\n"); + unset($after_filter_configure_run); + } + + /* + * we need a way to let a user run a shell cmd after each + * filter_configure() call. run this xml command after + * each change. + */ + if($config['system']['afterfilterchangeshellcmd'] <> "") + fwrite($fda, $config['system']['afterfilterchangeshellcmd'] . "\n"); + + fclose($fda); + } + + if(file_exists("{$g['tmp_path']}/commands.txt")) { + mwexec("sh {$g['tmp_path']}/commands.txt &"); + unlink("{$g['tmp_path']}/commands.txt"); + } + + /* if time based rules are enabled then swap in the set */ + if($time_based_rules == true) + filter_tdr_install_cron(true); + else + filter_tdr_install_cron(false); + + if($g['booting'] == true) + echo "."; + + if($delete_states_if_needed) { + update_filter_reload_status(gettext("Processing down interface states")); + filter_delete_states_for_down_gateways(); + } + + update_filter_reload_status(gettext("Running plugins")); + + if(is_dir("/usr/local/pkg/pf/")) { + /* process packager manager custom rules */ + update_filter_reload_status(gettext("Running plugins (pf)")); + run_plugins("/usr/local/pkg/pf/"); + update_filter_reload_status(gettext("Plugins completed.")); + } + + update_filter_reload_status(gettext("Done")); + if($g['booting'] == true) + echo gettext("done.") . "\n"; + + unlock($filterlck); + return 0; +} + +function filter_generate_scrubing() { + global $config, $FilterIflist; + $scrubrules = ""; + + if (isset($config['system']['maxmss_enable'])) { + $maxmss = 1400; + if (!empty($config['system']['maxmss'])) + $maxmss = $config['system']['maxmss']; + + $scrubrules .= "scrub from any to max-mss {$maxmss}\n"; + } + /* disable scrub option */ + foreach ($FilterIflist as $scrubif => $scrubcfg) { + if(isset($scrubcfg['virtual']) || empty($scrubcfg['descr'])) + continue; + /* set up MSS clamping */ + if($scrubcfg['mss'] <> "" && is_numeric($scrubcfg['mss']) && $scrubcfg['if'] != "pppoe" && $scrubcfg['if'] != "pptp" && + $scrubif['if'] != "l2tp") + $mssclamp = "max-mss " . (intval($scrubcfg['mss'] - 40)); + else + $mssclamp = ""; + /* configure no-df for linux nfs and others */ + if($config['system']['scrubnodf']) + $scrubnodf = "no-df"; + else + $scrubnodf = ""; + if($config['system']['scrubrnid']) + $scrubrnid = "random-id"; + else + $scrubrnid = ""; + if(!isset($config['system']['disablescrub'])) + $scrubrules .= "scrub on \${$scrubcfg['descr']} all {$scrubnodf} {$scrubrnid} {$mssclamp} fragment reassemble\n"; // reassemble all directions + else if(!empty($mssclamp)) + $scrubrules .= "scrub on \${$scrubcfg['descr']} {$mssclamp}\n"; + } + return $scrubrules; +} + +function filter_generate_nested_alias($name, $alias, &$aliasnesting, &$aliasaddrnesting) { + global $aliastable, $filterdns; + + $addresses = explode(" ", $alias); + $finallist = ""; + $builtlist = ""; + $urltable_nesting = ""; + $aliasnesting[$name] = $name; + foreach ($addresses as $address) { + if (empty($address)) + continue; + $linelength = strlen($builtlist); + $tmpline = ""; + if(is_alias($address)) { + if (alias_get_type($address) == 'urltable') { + // Feature#1603. For this type of alias we do not need to recursively call filter_generate_nested_alias. Just load IPs from the file. + $urltable_netsting = alias_expand_urltable($address); + if (!empty($urltable_nesting)) { + $urlfile_as_arr = file($urltable_nesting); + foreach($urlfile_as_arr as $line) { + $address= rtrim($line); + if ((strlen($tmpline) + $linelength) > 4036) { + $finallist .= "{$tmpline} \\\n"; + $tmpline = ""; + } + $tmpline .= " {$address}"; + } + } + } + /* We already expanded this alias so there is no neccessity to do it again. */ + else if(!isset($aliasnesting[$address])) + $tmpline = filter_generate_nested_alias($name, $aliastable[$address], $aliasnesting, $aliasaddrnesting); + } else if(!isset($aliasaddrnesting[$address])) { + if (!is_ipaddr($address) && !is_subnet($address) && !is_port($address) && !is_portrange($address) && is_hostname($address)) { + if (!isset($filterdns["{$address}{$name}"])) + $filterdns["{$address}{$name}"] = "pf {$address} {$name}\n"; + continue; + } + $aliasaddrnesting[$address] = $address; + $tmpline = " {$address}"; + } + if ((strlen($tmpline)+ $linelength) > 4036) { + $finallist .= "{$builtlist} \\\n"; + $builtlist = ""; + } + if (!empty($tmpline)) + $builtlist .= " {$tmpline}"; + } + $finallist .= $builtlist; + return $finallist; +} + +function filter_expand_alias($alias_name) +{ + global $config; + + if(isset($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $aliased) { + if($aliased['name'] == $alias_name) { + $aliasnesting = array(); + $aliasaddrnesting = array(); + return filter_generate_nested_alias($aliased['name'], $aliased['address'], $aliasnesting, $aliasaddrnesting); + } + } + } +} + +function filter_expand_alias_array($alias_name) { + $expansion = filter_expand_alias($alias_name); + return explode(" ", preg_replace('/\s+/', ' ', trim($expansion))); +} + +function filter_generate_aliases() { + global $config, $FilterIflist, $after_filter_configure_run; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_generate_aliases() being called $mt\n"; + } + + $alias = "#System aliases\n "; + $aliases = "loopback = \"{ lo0 }\"\n"; + + foreach ($FilterIflist as $if => $ifcfg) { + if (is_array($ifcfg[0])) { + if ($ifcfg[0]['if'] == 'pppoe') { + $aliases .= "{$ifcfg[0]['descr']} = \"{ {$ifcfg[0]['if']}"; + $aliases .= " }\"\n"; + } + } elseif (!empty($ifcfg['descr']) && !empty($ifcfg['if'])) { + if ($ifcfg['type6'] == '6rd') + $aliases .= "{$ifcfg['descr']} = \"{ {$ifcfg['if']} {$if}_stf"; + else if ($ifcfg['type6'] == '6to4') + $aliases .= "{$ifcfg['descr']} = \"{ {$ifcfg['if']} {$if}_stf"; + else { + $aliases .= "{$ifcfg['descr']} = \"{ {$ifcfg['if']}"; + + if ($ifcfg['type'] == 'pptp') { + foreach (get_parent_interface($ifcfg['if']) as $parent_if) { + if ($parent_if != $ifcfg['if']) { + $aliases .= " {$parent_if}"; + } + } + } + } + $aliases .= " }\"\n"; + } + } + + $aliases .= "\n#SSH Lockout Table\n"; + $aliases .= "table persist\n"; + $aliases .= "table persist\n"; + + $aliases .= "#Snort tables\n"; + $aliases .= "table \n"; + $aliases .= "table \n"; + if (!file_exists("/etc/bogons")) + @file_put_contents("/etc/bogons", ""); + if (!file_exists("/etc/bogonsv6")) + @file_put_contents("/etc/bogonsv6", ""); + $aliases .= "table persist file \"/etc/bogons\"\n"; + if (is_bogonsv6_used()) + $aliases .= "table persist file \"/etc/bogonsv6\"\n"; + + $vpns_list = filter_get_vpns_list(); + if($vpns_list) + $aliases .= "table { $vpns_list }\n"; + + /* add a Negate_networks table */ + $aliases .= "table "; + if($vpns_list) + $aliases .= "{ $vpns_list }"; + $aliases .= "\n"; + + $aliases .= "\n# User Aliases \n"; + /* Setup pf groups */ + if(isset($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $aliased) { + $extralias = ""; + /* + * XXX: i am not sure what this does so i am commenting it out for now, because as it is + * its quite dangerous! + * $ip = find_interface_ip($aliased['address']); + * $extraalias = " " . link_ip_to_carp_interface($ip); + */ + $aliasnesting = array(); + $aliasaddrnesting = array(); + $addrlist = filter_generate_nested_alias($aliased['name'], $aliased['address'], $aliasnesting, $aliasaddrnesting); + switch ($aliased['type']) { + case "host": + case "network": + case "url": + $tableaddrs = "{$addrlist}{$extralias}"; + if(empty($tableaddrs)) { + $aliases .= "table <{$aliased['name']}> persist\n"; + if (empty($aliased['address'])) + $after_filter_configure_run[] = "/sbin/pfctl -T flush -t " . escapeshellarg($aliased['name']); + } else + $aliases .= "table <{$aliased['name']}> { {$addrlist}{$extralias} } \n"; + + $aliases .= "{$aliased['name']} = \"<{$aliased['name']}>\"\n"; + break; + case "openvpn": + $openvpncfg = array(); + if($config['openvpn']['user']) { + /* XXX: Check if we have a correct ip? */ + foreach ($config['openvpn']['user'] as $openvpn) + $openvpncfg[$openvpn['name']] = $openvpn['ip']; + } + $vpn_lines = explode("\n", $addrlist); + foreach ($vpn_lines as $vpn_line) { + $vpn_address_split = explode(" ", $vpn_line); + foreach($vpn_address_split as $vpnsplit) { + if(isset($openvpncfg[$vpnsplit])) { + $newaddress .= " "; + $newaddress .= $openvpn[$vpnsplit]; + break; + } + } + } + $aliases .= "table <{$aliased['name']}> { {$newaddress}{$extralias} } \n"; + $aliases .= "{$aliased['name']} = \"<{$aliased['name']}>\"\n"; + break; + case "urltable": + $urlfn = alias_expand_urltable($aliased['name']); + if ($urlfn) { + $aliases .= "table <{$aliased['name']}> persist file \"{$urlfn}\"\n"; + $aliases .= "{$aliased['name']} = \"<{$aliased['name']}>\"\n"; + } + break; + case "urltable_ports": + // TODO: Change it when pf supports tables with ports + $urlfn = alias_expand_urltable($aliased['name']); + if ($urlfn) + $aliases .= "{$aliased['name']} = \"{ " . preg_replace("/\n/", " ", file_get_contents($urlfn)) . " }\"\n"; + break; + case "port": + case "url_ports": + $aliases .= "{$aliased['name']} = \"{ {$addrlist} }\"\n"; + break; + default: + $aliases .= "{$aliased['name']} = \"{ {$aliased['address']}{$extralias} }\"\n"; + break; + } + } + } + $result = "{$alias} \n"; + $result .= "{$aliases}"; + + return $result; +} + +function filter_generate_gateways() { + global $config, $g, $GatewaysList; + + $rules = "# Gateways\n"; + + update_filter_reload_status(gettext("Creating gateway group item...")); + + /* Lookup Gateways to be used in filter rules once */ + $GatewaysList = return_gateways_array(); + $GatewayGroupsList = return_gateway_groups_array(); + + if (is_array($GatewaysList)) { + foreach ($GatewaysList as $gwname => $gateway) { + $int = $gateway['interface']; + $gwip = $gateway['gateway']; + $route = ""; + if (!is_ipaddr($gwip)) + $gwip = get_interface_gateway($gateway['friendlyiface']); + if (is_ipaddr($gwip) && !empty($int)) + $route = "route-to ( {$int} {$gwip} )"; + if (($route === "") && isset($config['system']['skip_rules_gw_down'])) + unset($GatewaysList[$gwname]); + else + $rules .= "GW{$gwname} = \" {$route} \"\n"; + } + } + + if (is_array($GatewayGroupsList)) { + foreach ($GatewayGroupsList as $gateway => $members) { + $route = ""; + /* hey, that's not a group member! */ + unset($members['ipprotocol']); + if (count($members) > 0) { + $foundlb = 0; + $routeto = ""; + foreach($members as $idx => $member) { + $int = $member['int']; + $gatewayip = $member['gwip']; + if (($int <> "") && is_ipaddr($gatewayip)) { + if ($g['debug']) + log_error(sprintf(gettext('Setting up route with %1$s on %2$s'), $gatewayip, $int)); + if ($member['weight'] > 1) { + $routeto .= str_repeat("( {$int} {$gatewayip} ) ", $member['weight']); + } else + $routeto .= "( {$int} {$gatewayip} ) "; + $foundlb++; + } else + log_error(sprintf(gettext("An error occurred while trying to find the interface got %s . The rule has not been added."), $gatewayip)); + } + $route = ""; + if ($foundlb > 0) { + $route = " route-to { {$routeto} } "; + if($foundlb > 1) { + $route .= " round-robin "; + if (isset($config['system']['lb_use_sticky'])) + $route .= " sticky-address "; + } + } + } + if (($route === "") && isset($config['system']['skip_rules_gw_down'])) + unset($GatewayGroupsList[$gateway]); + else + $rules .= "GW{$gateway} = \" {$route} \"\n"; + } + } + + /* Create a global array to avoid errors on rulesets. */ + $GatewaysList = $GatewaysList + $GatewayGroupsList; + + $rules .= "\n"; + + return $rules; +} + +/* returns space separated list of vpn subnets */ +function filter_get_vpns_list() { + global $config; + + $vpns = ""; + $vpns_arr = array(); + + /* ipsec */ + if (isset($config['ipsec']['enable'])) { + if (is_array($config['ipsec']['phase2'])) { + foreach ($config['ipsec']['phase2'] as $ph2ent) { + if ((!$ph2ent['mobile']) && ($ph2ent['mode'] != 'transport')) { + if (!function_exists('ipsec_idinfo_to_cidr')) + require_once("ipsec.inc"); + if (!is_array($ph2ent['remoteid'])) + continue; + $ph2ent['remoteid']['mode'] = $ph2ent['mode']; + $vpns_subnet = ipsec_idinfo_to_cidr($ph2ent['remoteid']); + if ($vpns_subnet == "0.0.0.0/0") + continue; + $vpns_arr[] = $vpns_subnet; + } + } + } + } + + /* openvpn */ + foreach (array('client', 'server') as $type) { + if(is_array($config['openvpn']["openvpn-$type"])) { + foreach ($config['openvpn']["openvpn-$type"] as $settings) { + if(is_array($settings)) { + if (!isset($settings['disable'])) { + $remote_networks = explode(',', $settings['remote_network']); + foreach ($remote_networks as $remote_network) { + if (is_subnet($remote_network) && ($remote_network <> "0.0.0.0/0")) + $vpns_arr[] = $remote_network; + } + if (is_subnet($settings['tunnel_network']) && $settings['tunnel_network'] <> "0.0.0.0/0") + $vpns_arr[] = $settings['tunnel_network']; + } + } + } + } + } + /* pppoe */ + if (is_array($config['pppoes']['pppoe'])) { + foreach($config['pppoes']['pppoe'] as $pppoe) { + if ($pppoe['mode'] == "server") { + if(is_ipaddr($pppoe['remoteip'])) { + $pppoesub = gen_subnet($pppoe['remoteip'], $pppoe['pppoe_subnet']); + if (is_subnet($pppoesub)) + $vpns_arr[] = $pppoesub; + } + } + } + } + + if (!empty($vpns_arr)) + $vpns = implode(" ", $vpns_arr); + + return $vpns; +} + +/* returns space separated list of directly connected networks + * optionally returns an array instead, including friendly interface and gateway (if applicable) + */ +function filter_get_direct_networks_list($returnsubnetsonly = true) { + global $config, $FilterIflist, $GatewaysList; + /* build list of directly connected interfaces and networks */ + $networks = ""; + $networks_arr = array(); + if(empty($FilterIflist)) { + filter_generate_optcfg_array(); + } + foreach ($FilterIflist as $ifent => $ifcfg) { + $subnet = "{$ifcfg['sa']}/{$ifcfg['sn']}"; + if(is_subnet($subnet)) { + if($returnsubnetsonly) { + $networks_arr[] = $subnet; + } else { + $networks_arr[] = array( + 'subnet' => $subnet, + 'if' => $ifent, + 'ip' => $ifcfg['ip']); + } + } + } + foreach(get_configured_ip_aliases_list(true) as $vip) { + $subnet = "{$vip['subnet']}/{$vip['subnet_bits']}"; + if(is_subnet($subnet) && !(is_subnetv4($subnet) && $vip['subnet_bits'] == 32) && !(is_subnetv6($subnet) && $vip['subnet_bits'] == 128)) { + if(is_subnetv4($subnet)) + $subnet = gen_subnet($vip['subnet'], $vip['subnet_bits']) . "/{$vip['subnet_bits']}"; + else if(is_subnetv6($subnet)) + $subnet = gen_subnetv6($vip['subnet'], $vip['subnet_bits']) . "/{$vip['subnet_bits']}"; + if($returnsubnetsonly) { + $networks_arr[] = $subnet; + } else { + $networks_arr[] = array( + 'subnet' => $subnet, + 'if' => $vip['interface'], + 'ip' => $vip['subnet']); + } + } + } + foreach(get_staticroutes() as $netent) { + if(is_subnet($netent['network'])) { + if($returnsubnetsonly) { + $networks_arr[] = $netent['network']; + } else if(isset($GatewaysList[$netent['gateway']])) { + $networks_arr[] = array( + 'subnet' => $netent['network'], + 'if' => $GatewaysList[$netent['gateway']]['friendlyiface'], + 'gateway' => $GatewaysList[$netent['gateway']]['gateway']); + } + } + } + if($returnsubnetsonly) { + if(!empty($networks_arr)) { + $networks = implode(" ", $networks_arr); + } + return $networks; + } else { + return $networks_arr; + } +} + +function filter_generate_optcfg_array() { + global $config, $FilterIflist; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_generate_optcfg_array() being called $mt\n"; + } + + read_layer7_config(); + /* if list */ + $iflist = get_configured_interface_with_descr(); + foreach ($iflist as $if => $ifdetail) { + $oc = $config['interfaces'][$if]; + $oic = array(); + $oic['if'] = get_real_interface($if); + if (!does_interface_exist($oic['if'])) + continue; + $oic['ifv6'] = get_real_interface($if, "inet6"); + $oic['ip'] = get_interface_ip($if); + $oic['ipv6'] = get_interface_ipv6($if); + if(!is_ipaddrv4($oc['ipaddr']) && !empty($oc['ipaddr'])) + $oic['type'] = $oc['ipaddr']; + if(!is_ipaddrv6($oc['ipaddrv6']) && !empty($oc['ipaddrv6'])) + $oic['type6'] = $oc['ipaddrv6']; + if (!empty($oc['track6-interface'])) + $oic['track6-interface'] = $oc['track6-interface']; + $oic['sn'] = get_interface_subnet($if); + $oic['snv6'] = get_interface_subnetv6($if); + $oic['mtu'] = empty($oc['mtu']) ? 1500 : $oc['mtu']; + $oic['mss'] = empty($oc['mss']) ? '' : $oc['mss']; + $oic['descr'] = $ifdetail; + $oic['sa'] = gen_subnet($oic['ip'], $oic['sn']); + $oic['sav6'] = gen_subnetv6($oic['ipv6'], $oic['snv6']); + $oic['nonat'] = $oc['nonat']; + $oic['alias-address'] = $oc['alias-address']; + $oic['alias-subnet'] = $oc['alias-subnet']; + $oic['gateway'] = $oc['gateway']; + $oic['gatewayv6'] = $oc['gatewayv6']; + $oic['spoofcheck'] = "yes"; + $oic['bridge'] = link_interface_to_bridge($if); + $vips = link_interface_to_vips($if); + if (!empty($vips)) { + foreach ($vips as $vipidx => $vip) { + if (is_ipaddrv4($vip['subnet'])) { + if (!is_array($oic['vips'])) + $oic['vips'] = array(); + $oic['vips'][$vipidx]['ip'] = $vip['subnet']; + if (empty($vip['subnet_bits'])) + $oic['vips'][$vipidx]['sn'] = 32; + else + $oic['vips'][$vipidx]['sn'] = $vip['subnet_bits']; + } else if (is_ipaddrv6($vip['subnet'])) { + if (!is_array($oic['vips6'])) + $oic['vips6'] = array(); + $oic['vips6'][$vipidx]['ip'] = $vip['subnet']; + if (empty($vip['subnet_bits'])) + $oic['vips6'][$vipidx]['sn'] = 128; + else + $oic['vips6'][$vipidx]['sn'] = $vip['subnet_bits']; + } + } + } + unset($vips); + $FilterIflist[$if] = $oic; + } + + if($config['pptpd']['mode'] == "server" || $config['pptpd']['mode'] == "redir") { + $oic = array(); + $oic['if'] = 'pptp'; + $oic['descr'] = 'pptp'; + $oic['ip'] = $config['pptpd']['localip']; + $oic['sa'] = $config['pptpd']['remoteip']; + $oic['mode'] = $config['pptpd']['mode']; + $oic['virtual'] = true; + if($config['pptpd']['pptp_subnet'] <> "") + $oic['sn'] = $config['pptpd']['pptp_subnet']; + else + $oic['sn'] = "32"; + $FilterIflist['pptp'] = $oic; + } + if($config['l2tp']['mode'] == "server") { + $oic = array(); + $oic['if'] = 'l2tp'; + $oic['descr'] = 'L2TP'; + $oic['ip'] = $config['l2tp']['localip']; + $oic['sa'] = $config['l2tp']['remoteip']; + if($config['l2tp']['l2tp_subnet'] <> "") + $oic['sn'] = $config['l2tp']['l2tp_subnet']; + else + $oic['sn'] = "32"; + $oic['mode'] = $config['l2tp']['mode']; + $oic['virtual'] = true; + $FilterIflist['l2tp'] = $oic; + } + if (is_array($config['pppoes']['pppoe']) && (count($config['pppoes']['pppoe']) > 0)) { + $pppoeifs = array(); + foreach($config['pppoes']['pppoe'] as $pppoe) { + if ($pppoe['mode'] == "server") { + $oic = array(); + $oic['if'] = 'pppoe'; + $oic['descr'] = 'pppoe'; + $oic['ip'] = $pppoe['localip']; + $oic['sa'] = $pppoe['remoteip']; + $oic['mode'] = $pppoe['mode']; + $oic['virtual'] = true; + if($pppoe['pppoe_subnet'] <> "") + $oic['sn'] = $pppoe['pppoe_subnet']; + else + $oic['sn'] = "32"; + $pppoeifs[] = $oic; + } + } + if (count($pppoeifs)) + $FilterIflist['pppoe'] = $pppoeifs; + } + /* add ipsec interfaces */ + if(isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) { + $oic = array(); + $oic['if'] = 'enc0'; + $oic['descr'] = 'IPsec'; + $oic['type'] = "none"; + $oic['virtual'] = true; + $FilterIflist['enc0'] = $oic; + } + /* add openvpn interfaces */ + if($config['openvpn']['openvpn-server'] || $config['openvpn']['openvpn-client']) { + $oic = array(); + $oic['if'] = "openvpn"; + $oic['descr'] = 'OpenVPN'; + $oic['type'] = "none"; + $oic['virtual'] = true; + $FilterIflist['openvpn'] = $oic; + } + /* add interface groups */ + if(is_array($config['ifgroups']['ifgroupentry'])) { + foreach($config['ifgroups']['ifgroupentry'] as $ifgen) { + $oc = array(); + $oc['if'] = $ifgen['ifname']; + $oc['descr'] = $ifgen['ifname']; + $oc['virtual'] = true; + $FilterIflist[$ifgen['ifname']] = $oc; + } + } +} + +function filter_flush_nat_table() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_flush_nat_table() being called $mt\n"; + } + return mwexec("/sbin/pfctl -F nat"); +} + +function filter_flush_state_table() { + return mwexec("/sbin/pfctl -F state"); +} + +function filter_get_reflection_interfaces($natif = "") { + global $FilterIflist; + + $nat_if_list = array(); + + foreach ($FilterIflist as $ifent => $ifname) { + if($ifname['if'] == $natif) + continue; + + /* Do not add reflection redirects for interfaces with gateways */ + if(interface_has_gateway($ifent)) + continue; + + $nat_if_list[] = $ifname['if']; + } + + return $nat_if_list; +} + +function filter_generate_reflection_nat($rule, &$route_table, $nat_ifs, $protocol, $target, $target_ip, $target_subnet = "") { + global $config, $FilterIflist; + + if(!isset($config['system']['enablenatreflectionhelper'])) + return ""; + + // Initialize natrules holder string + $natrules = ""; + + update_filter_reload_status(sprintf(gettext("Creating reflection NAT rule for %s..."), $rule['descr'])); + + /* TODO: Add this option to port forwards page. */ + if(isset($rule['staticnatport'])) { + $static_port = " static-port"; + } else { + $static_port = " port 1024:65535"; + } + + if(!empty($protocol)) { + $protocol_text = " proto {$protocol}"; + } else { + $protocol_text = ""; + } + + if(empty($target_subnet) || !is_numeric($target_subnet)) + $target_subnet = 32; + + if(!is_array($route_table)) { + /* get a simulated IPv4-only route table based on the config */ + $route_table = filter_get_direct_networks_list(false); + foreach($route_table as $rt_key => $rt_ent) { + if(!is_subnetv4($rt_ent['subnet'])) + unset($route_table[$rt_key]); + if(isset($route_table[$rt_key]) && isset($FilterIflist[$rt_ent['if']]['if'])) + $route_table[$rt_key]['if'] = $FilterIflist[$rt_ent['if']]['if']; + } + } + + /* Check if the target is accessed through a static route */ + foreach($route_table as $route) { + if(isset($route['gateway']) && is_ipaddr($route['gateway'])) { + $subnet_split = explode("/", $route['subnet']); + if(in_array($route['if'], $nat_ifs) && check_subnets_overlap($target_ip, $target_subnet, $subnet_split[0], $subnet_split[1])) { + $target_ip = $route['gateway']; + $target_subnet = 32; + break; + } + } + } + + /* Search for matching subnets in the routing table */ + foreach($route_table as $route) { + $subnet = $route['subnet']; + $subnet_split = explode("/", $subnet); + $subnet_if = $route['if']; + if(in_array($subnet_if, $nat_ifs) && check_subnets_overlap($target_ip, $target_subnet, $subnet_split[0], $subnet_split[1])) { + $ifsubnet_ip = ""; + /* Find interface IP to use for NAT */ + foreach ($route_table as $ifnetwork) { + if(isset($ifnetwork['ip']) && is_ipaddr($ifnetwork['ip']) && $ifnetwork['if'] == $subnet_if && ip_in_subnet($ifnetwork['ip'], $subnet)) { + $ifsubnet_ip = $ifnetwork['ip']; + break; + } + } + if(!empty($ifsubnet_ip)) { + $subnets = array($subnet); + /* Find static routes that also need to be referenced in the NAT rule */ + foreach($route_table as $rtentry) { + if(isset($rtentry['gateway']) && is_ipaddr($rtentry['gateway']) && $rtentry['if'] == $subnet_if && ip_in_subnet($rtentry['gateway'], $subnet)) + $subnets[] = $rtentry['subnet']; + } + if(count($subnets) > 1) + $subnet = "{ " . implode(" ", $subnets) . " }"; + $natrules .= "no nat on {$subnet_if}{$protocol_text} from {$subnet_if} to {$target}\n"; + $natrules .= "nat on {$subnet_if}{$protocol_text} from {$subnet} to {$target} -> {$ifsubnet_ip}{$static_port}\n"; + } + } + } + + if(!empty($natrules)) + $natrules .= "\n"; + + return $natrules; +} + +function filter_generate_reflection_proxy($rule, $nordr, $rdr_ifs, $srcaddr, $dstaddr_port, &$starting_localhost_port, &$reflection_txt) { + global $FilterIflist, $config; + + // Initialize natrules holder string + $natrules = ""; + $reflection_txt = array(); + + if(!empty($rdr_ifs)) { + if($config['system']['reflectiontimeout']) + $reflectiontimeout = $config['system']['reflectiontimeout']; + else + $reflectiontimeout = "2000"; + + update_filter_reload_status(sprintf(gettext("Creating reflection rule for %s..."), $rule['descr'])); + + $rdr_if_list = implode(" ", $rdr_ifs); + if(count($rdr_ifs) > 1) + $rdr_if_list = "{ {$rdr_if_list} }"; + + $natrules .= "\n# Reflection redirects\n"; + + $localport = $rule['local-port']; + if(!empty($localport) && is_alias($localport)) { + $localport = filter_expand_alias($localport); + $localport = explode(" ", trim($localport)); + // The translation port for rdr, when specified, does not support more than one port or range. + // Emulating for behavior consistent with the original port forward. + $localport = $localport[0]; + } + + if(is_alias($rule['destination']['port'])) { + if(empty($localport) || $rule['destination']['port'] == $rule['local-port']) { + $dstport = filter_expand_alias($rule['destination']['port']); + $dstport = array_filter(explode(" ", trim($dstport))); + $localport = ""; + } else if(!empty($localport)) { + $dstport = array($localport); + } + } else { + $dstport = array(str_replace("-", ":", $rule['destination']['port'])); + $dstport_split = explode(":", $dstport[0]); + + if(!empty($localport) && $dstport_split[0] != $rule['local-port']) { + if(!is_alias($rule['local-port']) && $dstport_split[1] && $dstport_split[0] != $dstport_split[1]) { + $localendport = $localport + ($dstport_split[1] - $dstport_split[0]); + $localport .= ":$localendport"; + } + + $dstport = array($localport); + } else + $localport = ""; + } + + $dstaddr = explode(" ", $dstaddr_port); + if($dstaddr[2]) { + $rflctintrange = array_pop($dstaddr); + array_pop($dstaddr); + } else + return ""; + $dstaddr = implode(" ", $dstaddr); + if(empty($dstaddr) || trim($dstaddr) == "0.0.0.0" || strtolower(trim($dstaddr)) == "port") + return ""; + + if(isset($rule['destination']['any'])) { + if(!$rule['interface']) + $natif = "wan"; + else + $natif = $rule['interface']; + + if(!isset($FilterIflist[$natif])) + return ""; + if(is_ipaddr($FilterIflist[$natif]['ip'])) + $dstaddr = $FilterIflist[$natif]['ip']; + else + return ""; + + if(!empty($FilterIflist[$natif]['sn'])) + $dstaddr = gen_subnet($dstaddr, $FilterIflist[$natif]['sn']) . '/' . $FilterIflist[$natif]['sn']; + } + + switch($rule['protocol']) { + case "tcp/udp": + $protocol = "{ tcp udp }"; + $reflect_protos = array('tcp', 'udp'); + break; + case "tcp": + case "udp": + $protocol = $rule['protocol']; + $reflect_protos = array($rule['protocol']); + break; + default: + return ""; + break; + } + + if(!empty($nordr)) { + $natrules .= "no rdr on {$rdr_if_list} proto {$protocol} from {$srcaddr} to {$dstaddr} port {$rflctintrange}\n"; + return $natrules; + } + + if (is_alias($rule['target'])) + $target = filter_expand_alias($rule['target']); + else if(is_ipaddr($rule['target'])) + $target = $rule['target']; + else if (is_ipaddr($FilterIflist[$rule['target']]['ip'])) + $target = $FilterIflist[$rule['target']]['ip']; + else + return ""; + $starting_localhost_port_tmp = $starting_localhost_port; + $toomanyports = false; + /* only install reflection rules for < 19991 items */ + foreach($dstport as $loc_pt) { + if($starting_localhost_port < 19991) { + $toadd_array = array(); + $inetdport = $starting_localhost_port; + $rflctrange = $starting_localhost_port; + + $loc_pt = explode(":", $loc_pt); + if($loc_pt[1] && $loc_pt[1] > $loc_pt[0]) + $delta = $loc_pt[1] - $loc_pt[0]; + else + $delta = 0; + + if(($inetdport + $delta + 1) - $starting_localhost_port_tmp > 500) { + log_error("Not installing NAT reflection rules for a port range > 500"); + $inetdport = $starting_localhost_port; + $toadd_array = array(); + $toomanyports = true; + break; + } else if(($inetdport + $delta) > 19990) { + log_error("Installing partial NAT reflection rules. Maximum 1,000 reached."); + $delta = 19990 - $inetdport; + $loc_pt[1] = $loc_pt[0] + $delta; + if($delta == 0) + unset($loc_pt[1]); + $toomanyports = true; + + if(!empty($localport)) { + if(is_alias($rule['destination']['port'])) { + $rflctintrange = alias_expand($rule['destination']['port']); + } else { + if($dstport_split[1]) + $dstport_split[1] = $dstport_split[0] + $inetdport + $delta - $starting_localhost_port; + $rflctintrange = implode(":", $dstport_split); + } + } + } + + if(empty($localport)) + $rflctintrange = implode(":", $loc_pt); + if($inetdport + $delta > $starting_localhost_port) + $rflctrange .= ":" . ($inetdport + $delta); + $starting_localhost_port = $inetdport + $delta + 1; + $toadd_array = array_merge($toadd_array, range($loc_pt[0], $loc_pt[0] + $delta)); + + if(!empty($toadd_array)) { + $rtarget = explode(" ", trim($target)); + foreach($toadd_array as $tda) { + if (empty($tda)) + continue; + foreach($reflect_protos as $reflect_proto) { + if($reflect_proto == "udp") { + $socktype = "dgram"; + $dash_u = "-u "; + $wait = "wait\t"; + } else { + $socktype = "stream"; + $dash_u = ""; + $wait = "nowait/0"; + } + foreach ($rtarget as $targip) { + if (empty($targip)) + continue; + $reflection_txt[] = "{$inetdport}\t{$socktype}\t{$reflect_proto}\t{$wait}\tnobody\t/usr/bin/nc\tnc {$dash_u}-w {$reflectiontimeout} {$targip} {$tda}\n"; + } + } + $inetdport++; + } + $natrules .= "rdr on {$rdr_if_list} proto {$protocol} from {$srcaddr} to {$dstaddr} port {$rflctintrange} tag PFREFLECT -> 127.0.0.1 port {$rflctrange}\n"; + } + } + + if($toomanyports) + break; + } + + $reflection_txt = array_unique($reflection_txt); + } + + return $natrules; +} + +function filter_nat_rules_automatic_tonathosts($with_descr = false) { + global $config, $FilterIflist, $GatewaysList; + + $tonathosts = array("127.0.0.0/8"); + $descriptions = array(gettext("localhost")); + + foreach (get_staticroutes() as $route) { + $netip = explode("/", $route['network']); + if (isset($GatewaysList[$route['gateway']])) { + $gateway =& $GatewaysList[$route['gateway']]; + if(!interface_has_gateway($gateway['interface']) && is_private_ip($netip[0])) { + $tonathosts[] = $route['network']; + $descriptions[] = gettext("static route"); + } + } + } + + /* create outbound nat entries for all local networks */ + foreach($FilterIflist as $ocname => $oc) { + if(interface_has_gateway($ocname)) + continue; + if(is_ipaddr($oc['alias-address'])) { + $tonathosts[] = "{$oc['alias-address']}/{$oc['alias-subnet']}"; + $descriptions[] = $oc['descr'] . " " . gettext("DHCP alias address"); + } + if($oc['sa']) { + $tonathosts[] = "{$oc['sa']}/{$oc['sn']}"; + $descriptions[] = $oc['descr']; + if (isset($oc['vips']) && is_array($oc['vips'])) { + $if_subnets = array("{$oc['sa']}/{$oc['sn']}"); + foreach ($oc['vips'] as $vip) { + if (!is_ipaddrv4($vip['ip'])) + continue; + + foreach ($if_subnets as $subnet) + if (ip_in_subnet($vip['ip'], $subnet)) + continue 2; + + $network = gen_subnet($vip['ip'], $vip['sn']); + array_unshift($tonathosts, $network . '/' . $vip['sn']); + array_unshift($descriptions, "Virtual IP ({$oc['descr']})"); + $if_subnets[] = $network . '/' . $vip['sn']; + unset($network); + } + unset($if_subnets); + } + } + } + + /* PPTP subnet */ + if(($config['pptpd']['mode'] == "server" ) && is_private_ip($config['pptpd']['remoteip'])) { + if (isset($config['pptpd']['n_pptp_units']) && is_numeric($config['pptpd']['n_pptp_units'])) + $pptp_subnets = ip_range_to_subnet_array($config['pptpd']['remoteip'], + long2ip32(ip2long($config['pptpd']['remoteip'])+($config['pptpd']['n_pptp_units']-1))); + else + $pptp_subnets = ip_range_to_subnet_array($config['pptpd']['remoteip'], + long2ip32(ip2long($config['pptpd']['remoteip']))); + + foreach ($pptp_subnets as $subnet) { + $tonathosts[] = $subnet; + $descriptions[] = gettext("PPTP server"); + } + } + + /* PPPoE subnet */ + if (is_array($FilterIflist['pppoe'])) + foreach ($FilterIflist['pppoe'] as $pppoe) + if(is_private_ip($pppoe['ip'])) { + $tonathosts[] = "{$pppoe['sa']}/{$pppoe['sn']}"; + $descriptions[] = gettext("PPPoE server"); + } + + /* L2TP subnet */ + if(isset($FilterIflist['l2tp']) && $FilterIflist['l2tp']['mode'] == "server") { + $l2tp_sa = $FilterIflist['l2tp']['sa']; + $l2tp_sn = $FilterIflist['l2tp']['sn']; + if(is_private_ip($l2tp_sa) && !empty($l2tp_sn)) { + $tonathosts[] = "{$l2tp_sa}/{$l2tp_sn}"; + $descriptions[] = gettext("L2TP server"); + } + } + + /* add openvpn interfaces */ + if(is_array($config['openvpn']['openvpn-server'])) + foreach ($config['openvpn']['openvpn-server'] as $ovpnsrv) + if (!isset($ovpnsrv['disable']) && !empty($ovpnsrv['tunnel_network'])) { + $tonathosts[] = $ovpnsrv['tunnel_network']; + $descriptions[] = gettext("OpenVPN server"); + } + + if(is_array($config['openvpn']['openvpn-client'])) + foreach ($config['openvpn']['openvpn-client'] as $ovpncli) + if (!isset($ovpncli['disable']) && !empty($ovpncli['tunnel_network'])) { + $tonathosts[] = $ovpncli['tunnel_network']; + $descriptions[] = gettext("OpenVPN client"); + } + + /* IPsec mode_cfg subnet */ + if (isset($config['ipsec']['client']['enable']) && + !empty($config['ipsec']['client']['pool_address']) && + !empty($config['ipsec']['client']['pool_netbits'])) { + $tonathosts[] = "{$config['ipsec']['client']['pool_address']}/{$config['ipsec']['client']['pool_netbits']}"; + $descriptions[] = gettext("IPsec client"); + } + + if ($with_descr) { + $combined = array(); + foreach ($tonathosts as $idx => $subnet) { + $combined[] = array( + "subnet" => $subnet, + "descr" => $descriptions[$idx]); + } + + return $combined; + } else + return $tonathosts; +} + +function filter_nat_rules_outbound_automatic($src) { + global $config, $FilterIflist; + + $rules = array(); + foreach ($FilterIflist as $if => $ifcfg) { + if (substr($ifcfg['if'], 0, 4) == "ovpn") + continue; + if (!interface_has_gateway($if)) + continue; + + $natent = array(); + $natent['interface'] = $if; + $natent['source']['network'] = $src; + $natent['dstport'] = "500"; + $natent['target'] = $ifcfg['ip']; + $natent['destination']['any'] = true; + $natent['staticnatport'] = true; + $natent['descr'] = gettext('Auto created rule for ISAKMP'); + $rules[] = $natent; + + $natent = array(); + $natent['interface'] = $if; + $natent['source']['network'] = $src; + $natent['sourceport'] = ""; + $natent['target'] = $ifcfg['ip']; + $natent['destination']['any'] = true; + $natent['natport'] = ""; + $natent['descr'] = gettext('Auto created rule'); + if (isset($ifcfg['nonat'])) + $natent['nonat'] = true; + $rules[] = $natent; + } + + return $rules; +} + +/* Generate a 'nat on' or 'no nat on' rule for given interface */ +function filter_nat_rules_generate_if($if, $src = "any", $srcport = "", $dst = "any", $dstport = "", $natip = "", $natport = "", $nonat = false, $staticnatport = false, $proto = "", $poolopts = "") { + global $config, $FilterIflist; + /* XXX: billm - any idea if this code is needed? */ + if($src == "/32" || $src{0} == "/") + return "# src incorrectly specified\n"; + if($natip != "") { + if (is_subnet($natip)) + $tgt = $natip; + elseif (is_alias($natip)) + $tgt = "\${$natip}"; + else + $tgt = "{$natip}/32"; + } else { + $natip = get_interface_ip($if); + if(is_ipaddr($natip)) + $tgt = "{$natip}/32"; + else + $tgt = "(" . $FilterIflist[$if]['if'] . ")"; + } + /* Add the protocol, if defined */ + if (!empty($proto) && $proto != "any") { + if ($proto == "tcp/udp") + $protocol = " proto { tcp udp }"; + else + $protocol = " proto {$proto}"; + } else + $protocol = ""; + /* Set tgt for IPv6 */ + if ($proto == "ipv6") { + $natip = get_interface_ipv6($if); + if(is_ipaddrv6($natip)) + $tgt = "{$natip}/128"; + } + /* Add the hard set source port (useful for ISAKMP) */ + if($natport != "") + $tgt .= " port {$natport}"; + /* sometimes this gets called with "" instead of a value */ + if($src == "") + $src = "any"; + /* Match on this source port */ + if($srcport != "") { + $srcportexpand = alias_expand($srcport); + if(!$srcportexpand) + $srcportexpand = $srcport; + $src .= " port {$srcportexpand}"; + } + /* sometimes this gets called with "" instead of a value */ + if($dst == "") + $dst = "any"; + /* Match on this dest port */ + if($dstport != "") { + $dstportexpand = alias_expand($dstport); + if(!$dstportexpand) + $dstportexpand = $dstport; + $dst .= " port {$dstportexpand}"; + } + /* outgoing static-port option, hamachi, Grandstream, VOIP, etc */ + $staticnatport_txt = ""; + if($staticnatport) + $staticnatport_txt = "static-port"; + elseif(!$natport) + $tgt .= " port 1024:65535"; // set source port range + /* Allow for negating NAT entries */ + if($nonat) { + $nat = "no nat"; + $target = ""; + $staticnatport_txt = ""; + $poolopts = ""; + } else { + $nat = "nat"; + $target = "-> {$tgt}"; + } + $if_friendly = $FilterIflist[$if]['descr']; + /* Put all the pieces together */ + if($if_friendly) + $natrule = "{$nat} on \${$if_friendly} {$protocol} from {$src} to {$dst} {$target} {$poolopts} {$staticnatport_txt}\n"; + else + $natrule .= "# Could not convert {$if} to friendly name(alias)\n"; + return $natrule; +} + +function filter_nat_rules_generate() { + global $config, $g, $after_filter_configure_run, $FilterIflist, $GatewaysList, $aliases; + + $natrules = "no nat proto carp\n"; + $natrules .= "no rdr proto carp\n"; + $natrules .= "nat-anchor \"natearly/*\"\n"; + + $natrules .= "nat-anchor \"natrules/*\"\n\n"; + update_filter_reload_status(gettext("Creating 1:1 rules...")); + + $reflection_txt = ""; + $route_table = ""; + + /* any 1:1 mappings? */ + if(is_array($config['nat']['onetoone'])) { + foreach ($config['nat']['onetoone'] as $rule) { + if (isset($rule['disabled'])) + continue; + + $sn = ""; + $sn1 = ""; + $target = alias_expand($rule['external']); + if (!$target) { + $natrules .= "# Unresolvable alias {$rule['target']}\n"; + continue; /* unresolvable alias */ + } + + if (!$rule['interface']) + $natif = "wan"; + else + $natif = $rule['interface']; + if (!isset($FilterIflist[$natif])) + continue; + + $srcaddr = filter_generate_address($rule, 'source'); + $dstaddr = filter_generate_address($rule, 'destination'); + if(!$dstaddr) + $dstaddr = $FilterIflist[$natif]['ip']; + + $srcaddr = trim($srcaddr); + $dstaddr = trim($dstaddr); + + $tmp = explode('/', $srcaddr); + $srcip = $tmp[0]; + if (!empty($tmp[1]) && is_numeric($tmp[1])) { + $sn = $tmp[1]; + $sn1 = "/{$sn}"; + } + + $natif = $FilterIflist[$natif]['if']; + + /* + * If reflection is enabled, turn on extra redirections + * for this rule by adding other interfaces to an rdr rule. + */ + if ((isset($config['system']['enablebinatreflection']) || $rule['natreflection'] == "enable") + && $rule['natreflection'] != "disable") + $nat_if_list = filter_get_reflection_interfaces($natif); + else + $nat_if_list = array(); + + $natrules .= "binat on {$natif} from {$srcaddr} to {$dstaddr} -> {$target}{$sn1}\n"; + if (!empty($nat_if_list)) { + $binat_if_list = implode(" ", $nat_if_list); + $binat_if_list = "{ {$binat_if_list} }"; + $reflection_txt .= "rdr on {$binat_if_list} from {$dstaddr} to {$target}{$sn1} -> {$srcaddr} bitmask\n"; + } + + $nat_if_list = array_merge(array($natif), $nat_if_list); + $reflection_txt .= filter_generate_reflection_nat($rule, $route_table, $nat_if_list, "", $srcaddr, $srcip, $sn); + } + } + + /* Add binat rules for Network Prefix translation */ + if(is_array($config['nat']['npt'])) { + foreach ($config['nat']['npt'] as $rule) { + if (isset($rule['disabled'])) + continue; + + if (!$rule['interface']) + $natif = "wan"; + else + $natif = $rule['interface']; + if (!isset($FilterIflist[$natif])) + continue; + + $srcaddr = filter_generate_address($rule, 'source'); + $dstaddr = filter_generate_address($rule, 'destination'); + + $srcaddr = trim($srcaddr); + $dstaddr = trim($dstaddr); + + $natif = $FilterIflist[$natif]['descr']; + + $natrules .= "binat on \${$natif} from {$srcaddr} to any -> {$dstaddr}\n"; + $natrules .= "binat on \${$natif} from any to {$dstaddr} -> {$srcaddr}\n"; + + } + } + + /* ipsec nat */ + if (is_array($config['ipsec']) && isset($config['ipsec']['enable'])) { + if (is_array($config['ipsec']['phase2'])) { + foreach ($config['ipsec']['phase2'] as $ph2ent) { + if ($ph2ent['mode'] != 'transport' && !empty($ph2ent['natlocalid'])) { + if (!function_exists('ipsec_idinfo_to_cidr')) + require_once("ipsec.inc"); + if (!is_array($ph2ent['localid'])) + $ph2ent['localid'] = array(); + $ph2ent['localid']['mode'] = $ph2ent['mode']; + $local_subnet = ipsec_idinfo_to_cidr($ph2ent['localid']); + if (empty($local_subnet) || $local_subnet == "0.0.0.0/0") + continue; + if (!is_subnet($local_subnet) && !is_ipaddr($local_subnet)) + continue; + if (!is_array($ph2ent['natlocalid'])) + $ph2ent['natlocalid'] = array(); + $ph2ent['natlocalid']['mode'] = $ph2ent['mode']; + $natlocal_subnet = ipsec_idinfo_to_cidr($ph2ent['natlocalid']); + if (empty($natlocal_subnet) || $natlocal_subnet == "0.0.0.0/0") + continue; + if (!is_subnet($natlocal_subnet) && !is_ipaddr($natlocal_subnet)) + continue; + if (!is_array($ph2ent['remoteid'])) + $ph2ent['remoteid'] = array(); + $ph2ent['remoteid']['mode'] = $ph2ent['mode']; + $remote_subnet = ipsec_idinfo_to_cidr($ph2ent['remoteid']); + if (empty($remote_subnet)) + continue; + if (!is_subnet($remote_subnet) && !is_ipaddr($remote_subnet)) + continue; + if ($remote_subnet == "0.0.0.0/0") + $remote_subnet = "any"; + if (is_ipaddr($natlocal_subnet) && !is_ipaddr($local_subnet) ) + $nattype = "nat"; + else + $nattype = "binat"; + $natrules .= "{$nattype} on enc0 from {$local_subnet} to {$remote_subnet} -> {$natlocal_subnet}\n"; + } + } + } + } + + if ($config['nat']['outbound']['mode'] == "disabled") + $natrules .= "\n# Outbound NAT rules are disabled\n"; + + if ($config['nat']['outbound']['mode'] == "advanced" || $config['nat']['outbound']['mode'] == "hybrid") { + $natrules .= "\n# Outbound NAT rules (manual)\n"; + /* advanced outbound rules */ + if(is_array($config['nat']['outbound']['rule'])) { + foreach ($config['nat']['outbound']['rule'] as $obent) { + if (isset($obent['disabled'])) + continue; + update_filter_reload_status(sprintf(gettext("Creating advanced outbound rule %s"), $obent['descr'])); + $src = alias_expand($obent['source']['network']); + if(!$src) + $src = $obent['source']['network']; + $dst = alias_expand($obent['destination']['address']); + if(!$dst) + $dst = $obent['destination']['address']; + if(isset($obent['destination']['not']) && !isset($obent['destination']['any'])) + $dst = "!" . $dst; + + if(!$obent['interface'] || !isset($FilterIflist[$obent['interface']])) + continue; + + $obtarget = ($obent['target'] == "other-subnet") ? $obent['targetip'] . '/' . $obent['targetip_subnet']: $obent['target']; + $poolopts = (is_subnet($obtarget) || is_alias($obtarget)) ? $obent['poolopts'] : ""; + + $natrules .= filter_nat_rules_generate_if($obent['interface'], + $src, + $obent['sourceport'], + $dst, + $obent['dstport'], + $obtarget, + $obent['natport'], + isset($obent['nonat']), + isset($obent['staticnatport']), + $obent['protocol'], + $poolopts + ); + } + } + } + + /* outbound rules */ + if (!isset($config['nat']['outbound']['mode']) || + $config['nat']['outbound']['mode'] == "automatic" || + $config['nat']['outbound']['mode'] == "hybrid") { + $natrules .= "\n# Outbound NAT rules (automatic)\n"; + /* standard outbound rules (one for each interface) */ + update_filter_reload_status(gettext("Creating outbound NAT rules")); + $tonathosts_array = filter_nat_rules_automatic_tonathosts(); + $tonathosts = implode(" ", $tonathosts_array); + $numberofnathosts = count($tonathosts_array); + + $natrules .= "\n# Subnets to NAT \n"; + if ($numberofnathosts > 0) { + update_filter_reload_status(gettext('Creating automatic outbound rules')); + + if ($numberofnathosts > 4) { + $natrules .= "table { {$tonathosts} }\n"; + $macroortable = ""; + } else { + $natrules .= "tonatsubnets = \"{ {$tonathosts} }\"\n"; + $macroortable = "\$tonatsubnets"; + } + + $a_outs = filter_nat_rules_outbound_automatic($macroortable); + foreach ($a_outs as $a_out) { + $natrules .= filter_nat_rules_generate_if($a_out['interface'], + $a_out['source']['network'], + $a_out['sourceport'], + $a_out['destination']['address'], + $a_out['dstport'], + $a_out['target'], + $a_out['natport'], + isset($a_out['nonat']), + isset($a_out['staticnatport'])); + } + } + unset($tonathosts, $tonathosts_array, $numberofnathosts); + } + + /* load balancer anchor */ + $natrules .= "\n# Load balancing anchor\n"; + $natrules .= "rdr-anchor \"relayd/*\"\n"; + + update_filter_reload_status(gettext("Setting up TFTP helper")); + $natrules .= "# TFTP proxy\n"; + $natrules .= "rdr-anchor \"tftp-proxy/*\"\n"; + + if (!empty($config['system']['tftpinterface'])) { + $tftpifs = explode(",", $config['system']['tftpinterface']); + foreach($tftpifs as $tftpif) { + if ($FilterIflist[$tftpif]) + $natrules .= "rdr pass on {$FilterIflist[$tftpif]['if']} proto udp from any to any port tftp -> 127.0.0.1 port 6969\n"; + } + } + + /* DIAG: add ipv6 NAT, if requested */ + if(isset($config['diag']['ipv6nat']['enable']) && + is_ipaddr($config['diag']['ipv6nat']['ipaddr']) && + is_array($FilterIflist['wan'])) { + /* XXX: FIX ME! IPV6 */ + $natrules .= "rdr on \${$FilterIflist['wan']['descr']} proto ipv6 from any to any -> {$config['diag']['ipv6nat']['ipaddr']}\n"; + } + + if(file_exists("/var/etc/inetd.conf")) + @unlink("/var/etc/inetd.conf"); + // Open inetd.conf write handle + $inetd_fd = fopen("/var/etc/inetd.conf","w"); + /* add tftp protocol helper */ + fwrite($inetd_fd, "tftp-proxy\tdgram\tudp\twait\t\troot\t/usr/libexec/tftp-proxy\ttftp-proxy -v\n"); + + if(isset($config['nat']['rule'])) { + /* start reflection redirects on port 19000 of localhost */ + $starting_localhost_port = 19000; + $natrules .= "# NAT Inbound Redirects\n"; + foreach ($config['nat']['rule'] as $rule) { + update_filter_reload_status(sprintf(gettext("Creating NAT rule %s"), $rule['descr'])); + + if(isset($rule['disabled'])) + continue; + + /* if item is an alias, expand */ + $dstport = ""; + $dstport[0] = alias_expand($rule['destination']['port']); + if(!$dstport[0]) + $dstport = explode("-", $rule['destination']['port']); + + /* if item is an alias, expand */ + $localport = alias_expand($rule['local-port']); + if(!$localport || $dstport[0] == $localport) { + $localport = ""; + } else if(is_alias($rule['local-port'])) { + $localport = filter_expand_alias($rule['local-port']); + if($localport) { + $localport = explode(" ", trim($localport)); + $localport = $localport[0]; + $localport = " port {$localport}"; + } + } else if(is_alias($rule['destination']['port'])) { + $localport = " port {$localport}"; + } else { + if(($dstport[1]) && ($dstport[0] != $dstport[1])) { + $localendport = $localport + ($dstport[1] - $dstport[0]); + + $localport .= ":$localendport"; + } + + $localport = " port {$localport}"; + } + + switch(strtolower($rule['protocol'])) { + case "tcp/udp": + $protocol = "{ tcp udp }"; + break; + case "tcp": + case "udp": + $protocol = strtolower($rule['protocol']); + break; + default: + $protocol = strtolower($rule['protocol']); + $localport = ""; + break; + } + + $target = alias_expand($rule['target']); + if(!$target && !isset($rule['nordr'])) { + $natrules .= "# Unresolvable alias {$rule['target']}\n"; + continue; /* unresolvable alias */ + } + + if(is_alias($rule['target'])) + $target_ip = filter_expand_alias($rule['target']); + else if(is_ipaddr($rule['target'])) + $target_ip = $rule['target']; + else if(is_ipaddr($FilterIflist[$rule['target']]['ip'])) + $target_ip = $FilterIflist[$rule['target']]['ip']; + else + $target_ip = $rule['target']; + $target_ip = trim($target_ip); + + if($rule['associated-rule-id'] == "pass") + $rdrpass = "pass "; + else + $rdrpass = ""; + + if (isset($rule['nordr'])) { + $nordr = "no "; + $rdrpass = ""; + } else + $nordr = ""; + + if(!$rule['interface']) + $natif = "wan"; + else + $natif = $rule['interface']; + + if (!isset($FilterIflist[$natif])) + continue; + + $srcaddr = filter_generate_address($rule, 'source', true); + $dstaddr = filter_generate_address($rule, 'destination', true); + $srcaddr = trim($srcaddr); + $dstaddr = trim($dstaddr); + + if(!$dstaddr) + $dstaddr = $FilterIflist[$natif]['ip']; + + $dstaddr_port = explode(" ", $dstaddr); + if(empty($dstaddr_port[0]) || strtolower(trim($dstaddr_port[0])) == "port") + continue; // Skip port forward if no destination address found + $dstaddr_reflect = $dstaddr; + if(isset($rule['destination']['any'])) { + /* With reflection enabled, destination of 'any' has side effects + * that most people would not expect, so change it on reflection rules. */ + $dstaddr_reflect = $FilterIflist[$natif]['ip']; + if(!empty($FilterIflist[$natif]['sn'])) + $dstaddr_reflect = gen_subnet($dstaddr_reflect, $FilterIflist[$natif]['sn']) . '/' . $FilterIflist[$natif]['sn']; + + if($dstaddr_port[2]) + $dstaddr_reflect .= " port " . $dstaddr_port[2]; + } + + $natif = $FilterIflist[$natif]['if']; + + $reflection_type = "none"; + if($rule['natreflection'] != "disable" && $dstaddr_port[0] != "0.0.0.0") { + if($rule['natreflection'] == "enable") + $reflection_type = "proxy"; + else if($rule['natreflection'] == "purenat") + $reflection_type = "purenat"; + else if(!isset($config['system']['disablenatreflection'])) { + if(isset($config['system']['enablenatreflectionpurenat'])) + $reflection_type = "purenat"; + else + $reflection_type = "proxy"; + } + } + + if($reflection_type != "none") + $nat_if_list = filter_get_reflection_interfaces($natif); + else + $nat_if_list = array(); + + if(empty($nat_if_list)) + $reflection_type = "none"; + + $localport_nat = $localport; + if(empty($localport_nat) && $dstaddr_port[2]) + $localport_nat = " port " . $dstaddr_port[2]; + + if($srcaddr <> "" && $dstaddr <> "" && $natif) { + $natrules .= "{$nordr}rdr {$rdrpass}on {$natif} proto {$protocol} from {$srcaddr} to {$dstaddr}" . ($nordr == "" ? " -> {$target}{$localport}" : ""); + + /* Does this rule redirect back to a internal host? */ + if(isset($rule['destination']['any']) && !isset($rule['nordr']) && !isset($config['system']['enablenatreflectionhelper']) && !interface_has_gateway($rule['interface'])) { + $rule_interface_ip = find_interface_ip($natif); + $rule_interface_subnet = find_interface_subnet($natif); + if(!empty($rule_interface_ip) && !empty($rule_interface_subnet)) { + $rule_subnet = gen_subnet($rule_interface_ip, $rule_interface_subnet); + $natrules .= "\n"; + $natrules .= "no nat on {$natif} proto tcp from ({$natif}) to {$rule_subnet}/{$rule_interface_subnet}\n"; + $natrules .= "nat on {$natif} proto tcp from {$rule_subnet}/{$rule_interface_subnet} to {$target} port {$dstport[0]} -> ({$natif})\n"; + } + } + + if ($reflection_type != "none") { + if($reflection_type == "proxy" && !isset($rule['nordr'])) { + $natrules .= filter_generate_reflection_proxy($rule, $nordr, $nat_if_list, $srcaddr, $dstaddr, $starting_localhost_port, $reflection_rules); + $nat_if_list = array($natif); + foreach ($reflection_rules as $txtline) + fwrite($inetd_fd, $txtline); + } else if($reflection_type == "purenat" || isset($rule['nordr'])) { + $rdr_if_list = implode(" ", $nat_if_list); + if(count($nat_if_list) > 1) + $rdr_if_list = "{ {$rdr_if_list} }"; + $natrules .= "\n# Reflection redirect\n"; + $natrules .= "{$nordr}rdr {$rdrpass}on {$rdr_if_list} proto {$protocol} from {$srcaddr} to {$dstaddr_reflect}" . ($nordr == "" ? " -> {$target}{$localport}" : ""); + $nat_if_list = array_merge(array($natif), $nat_if_list); + } + } + + if(empty($nat_if_list)) + $nat_if_list = array($natif); + + $natrules .= "\n"; + if(!isset($rule['nordr'])) + $natrules .= filter_generate_reflection_nat($rule, $route_table, $nat_if_list, $protocol, "{$target}{$localport_nat}", $target_ip); + } + } + } + fclose($inetd_fd); // Close file handle + + if (isset($config['pptpd']['mode']) && ($config['pptpd']['mode'] != "off")) { + if ($config['pptpd']['mode'] == "redir") { + $pptpdtarget = $config['pptpd']['redir']; + $natrules .= "# PPTP\n"; + $natrules .= "rdr on \${$FilterIflist['wan']['descr']} proto gre from any to any -> {$pptpdtarget}\n"; + $natrules .= "rdr on \${$FilterIflist['wan']['descr']} proto tcp from any to any port 1723 -> {$pptpdtarget}\n"; + } + } + + $natrules .= discover_pkg_rules("nat"); + + $natrules .= "# UPnPd rdr anchor\n"; + $natrules .= "rdr-anchor \"miniupnpd\"\n"; + + if(!empty($reflection_txt)) + $natrules .= "\n# Reflection redirects and NAT for 1:1 mappings\n" . $reflection_txt; + + // Check if inetd is running, if not start it. If so, restart it gracefully. + $helpers = isvalidproc("inetd"); + if(file_exists("/var/etc/inetd.conf")) { + if(!$helpers) + mwexec("/usr/sbin/inetd -wW -R 0 -a 127.0.0.1 /var/etc/inetd.conf"); + else + sigkillbypid("/var/run/inetd.pid", "HUP"); + } + + return $natrules; +} + +function filter_generate_user_rule_arr($rule) { + global $config; + update_filter_reload_status(sprintf(gettext("Creating filter rule %s ..."), $rule['descr'])); + $ret = array(); + $line = filter_generate_user_rule($rule); + $ret['rule'] = $line; + $ret['interface'] = $rule['interface']; + if($rule['descr'] != "" and $line != "") + $ret['descr'] = "label \"" . fix_rule_label("USER_RULE: {$rule['descr']}") . "\""; + else + $ret['descr'] = "label \"USER_RULE\""; + + return $ret; +} + +function filter_generate_port(& $rule, $target = "source", $isnat = false) { + + $src = ""; + + $rule['protocol'] = strtolower($rule['protocol']); + if(in_array($rule['protocol'], array("tcp","udp","tcp/udp"))) { + if($rule[$target]['port']) { + $srcport = explode("-", $rule[$target]['port']); + $srcporta = alias_expand($srcport[0]); + if(!$srcporta) + log_error(sprintf(gettext("filter_generate_port: %s is not a valid {$target} port."), $srcport[0])); + else if((!$srcport[1]) || ($srcport[0] == $srcport[1])) { + $src .= " port {$srcporta} "; + } else if(($srcport[0] == 1) && ($srcport[1] == 65535)) { + /* no need for a port statement here */ + } else if ($isnat) { + $src .= " port {$srcport[0]}:{$srcport[1]}"; + } else { + if(is_port($srcporta) && $srcport[1] == 65535) { + $src .= " port >= {$srcporta} "; + } else if($srcport[0] == 1) { + $src .= " port <= {$srcport[1]} "; + } else { + $srcport[0]--; + $srcport[1]++; + $src .= " port {$srcport[0]} >< {$srcport[1]} "; + } + } + } + } + + return $src; +} + +function filter_address_add_vips_subnets(&$subnets, $if, $not) { + global $FilterIflist; + + $if_subnets = array($subnets); + + if ($not == true) + $subnets = "!{$subnets}"; + + if (!isset($FilterIflist[$if]['vips']) || !is_array($FilterIflist[$if]['vips'])) + return; + + foreach ($FilterIflist[$if]['vips'] as $vip) { + foreach ($if_subnets as $subnet) + if (ip_in_subnet($vip['ip'], $subnet)) + continue 2; + + if (is_ipaddrv4($vip['ip'])) { + if (!is_subnetv4($if_subnets[0])) + continue; + + $network = gen_subnet($vip['ip'], $vip['sn']); + } else if (is_ipaddrv6($vip['ip'])) { + if (!is_subnetv6($if_subnets[0])) + continue; + + $network = gen_subnetv6($vip['ip'], $vip['sn']); + } else + continue; + + $subnets .= ' ' . ($not == true ? '!' : '') . $network . '/' . $vip['sn']; + $if_subnets[] = $network . '/' . $vip['sn']; + } + unset($if_subnets); + + if (strpos($subnets, ' ') !== false) + $subnets = "{ {$subnets} }"; +} + +function filter_generate_address(& $rule, $target = "source", $isnat = false) { + global $FilterIflist, $config; + $src = ""; + + if(isset($rule[$target]['any'])) { + $src = "any"; + } else if($rule[$target]['network']) { + if(strstr($rule[$target]['network'], "opt")) { + $optmatch = ""; + $matches = ""; + if($rule['ipprotocol'] == "inet6") { + if(preg_match("/opt([0-9]*)$/", $rule[$target]['network'], $optmatch)) { + $opt_ip = $FilterIflist["opt{$optmatch[1]}"]['ipv6']; + if(!is_ipaddrv6($opt_ip)) + return ""; + $src = $opt_ip . "/" . $FilterIflist["opt{$optmatch[1]}"]['snv6']; + /* check for opt$NUMip here */ + } else if(preg_match("/opt([0-9]*)ip/", $rule[$target]['network'], $matches)) { + $src = $FilterIflist["opt{$matches[1]}"]['ipv6']; + if(!is_ipaddrv6($src)) + return ""; + if(isset($rule[$target]['not'])) + $src = " !{$src}"; + } + } else { + if(preg_match("/opt([0-9]*)$/", $rule[$target]['network'], $optmatch)) { + $opt_ip = $FilterIflist["opt{$optmatch[1]}"]['ip']; + if(!is_ipaddrv4($opt_ip)) + return ""; + $src = $opt_ip . "/" . $FilterIflist["opt{$optmatch[1]}"]['sn']; + /* check for opt$NUMip here */ + } else if(preg_match("/opt([0-9]*)ip/", $rule[$target]['network'], $matches)) { + $src = $FilterIflist["opt{$matches[1]}"]['ip']; + if(!is_ipaddrv4($src)) + return ""; + if(isset($rule[$target]['not'])) + $src = " !{$src}"; + } + } + } else { + if($rule['ipprotocol'] == "inet6") { + switch ($rule[$target]['network']) { + case 'wan': + $wansa = $FilterIflist['wan']['sav6']; + if (!is_ipaddrv6($wansa)) + return ""; + $wansn = $FilterIflist['wan']['snv6']; + $src = "{$wansa}/{$wansn}"; + break; + case 'wanip': + $src = $FilterIflist["wan"]['ipv6']; + if (!is_ipaddrv6($src)) + return ""; + break; + case 'lanip': + $src = $FilterIflist["lan"]['ipv6']; + if (!is_ipaddrv6($src)) + return ""; + break; + case 'lan': + $lansa = $FilterIflist['lan']['sav6']; + if (!is_ipaddrv6($lansa)) + return ""; + $lansn = $FilterIflist['lan']['snv6']; + $src = "{$lansa}/{$lansn}"; + break; + case '(self)': + $src = "(self)"; + break; + case 'pptp': + $pptpsav6 = gen_subnetv6($FilterIflist['pptp']['sav6'], $FilterIflist['pptp']['snv6']); + $pptpsnv6 = $FilterIflist['pptp']['snv6']; + $src = "{$pptpsav6}/{$pptpsnv6}"; + break; + case 'pppoe': + if (is_array($FilterIflist['pppoe'])) { + $pppoesav6 = gen_subnetv6($FilterIflist['pppoe'][0]['ipv6'], $FilterIflist['pppoe'][0]['snv6']); + $pppoesnv6 = $FilterIflist['pppoe'][0]['snv6']; + $src = "{$pppoesav6}/{$pppoesnv6}"; + } + } + if(isset($rule[$target]['not']) && !is_subnet($src)) + $src = " !{$src}"; + } else { + switch ($rule[$target]['network']) { + case 'wan': + $wansa = $FilterIflist['wan']['sa']; + if (!is_ipaddrv4($wansa)) + return ""; + $wansn = $FilterIflist['wan']['sn']; + $src = "{$wansa}/{$wansn}"; + break; + case 'wanip': + $src = $FilterIflist["wan"]['ip']; + break; + case 'lanip': + $src = $FilterIflist["lan"]['ip']; + break; + case 'lan': + $lansa = $FilterIflist['lan']['sa']; + if (!is_ipaddrv4($lansa)) + return ""; + $lansn = $FilterIflist['lan']['sn']; + $src = "{$lansa}/{$lansn}"; + break; + case '(self)': + $src = "(self)"; + break; + case 'pptp': + if (isset($config['pptpd']['n_pptp_units']) && is_numeric($config['pptpd']['n_pptp_units'])) + $pptp_subnets = ip_range_to_subnet_array($config['pptpd']['remoteip'], long2ip32(ip2long($config['pptpd']['remoteip'])+($config['pptpd']['n_pptp_units']-1))); + else + $pptp_subnets = ip_range_to_subnet_array($config['pptpd']['remoteip'], long2ip32(ip2long($config['pptpd']['remoteip']))); + if (empty($pptp_subnets)) + return ""; + if(isset($rule[$target]['not'])) + array_walk($pptp_subnets, function (&$value, $key) { + $value="!{$value}"; + }); + $src = "{ " . implode(" ", $pptp_subnets) . " }"; + break; + case 'pppoe': + /* XXX: This needs to be fixed somehow! */ + if (is_array($FilterIflist['pppoe'])) { + $pppoesa = gen_subnet($FilterIflist['pppoe'][0]['ip'], $FilterIflist['pppoe'][0]['sn']); + $pppoesn = $FilterIflist['pppoe'][0]['sn']; + $src = "{$pppoesa}/{$pppoesn}"; + } + break; + } + if(isset($rule[$target]['not']) && !is_subnet($src) && + (strpos($src, '{') === false)) + $src = " !{$src}"; + } + } + if (is_subnet($src)) + filter_address_add_vips_subnets($src, $rule[$target]['network'], isset($rule[$target]['not'])); + } else if($rule[$target]['address']) { + $expsrc = alias_expand($rule[$target]['address']); + if(isset($rule[$target]['not'])) + $not = "!"; + else + $not = ""; + $src = " {$not} {$expsrc}"; + } + + $src .= filter_generate_port($rule, $target, $isnat); + + return $src; +} + +function filter_generate_user_rule($rule) { + global $config, $g, $FilterIflist, $GatewaysList; + global $layer7_rules_list, $dummynet_name_list; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_generate_user_rule() being called $mt\n"; + } + /* don't include disabled rules */ + if(isset($rule['disabled'])) { + return "# rule " . $rule['descr'] . " disabled \n"; + } + update_filter_reload_status("Creating filter rules {$rule['descr']} ..."); + $pptpdcfg = $config['pptpd']; + $int = ""; + $aline = array(); + + /* Check to see if the interface is in our list */ + if(isset($rule['floating'])) { + if(isset($rule['interface']) && $rule['interface'] <> "") { + $interfaces = explode(",", $rule['interface']); + $ifliste = ""; + foreach ($interfaces as $iface) { + if(array_key_exists($iface, $FilterIflist)) + $ifliste .= " " . $FilterIflist[$iface]['if'] . " "; + } + if($ifliste <> "") + $aline['interface'] = " on { {$ifliste} } "; + else + $aline['interface'] = ""; + } else + $aline['interface'] = ""; + } else if(!array_key_exists($rule['interface'], $FilterIflist)) { + foreach($FilterIflist as $oc) + $items .= $oc['descr'] . " "; + return "# array key \"{$rule['interface']}\" does not exist for \"" . $rule['descr'] . "\" in array: {{$items}}"; + } else if((array_key_exists($rule['interface'], $FilterIflist)) + && (is_array($FilterIflist[$rule['interface']])) + && (is_array($FilterIflist[$rule['interface']][0]))) { + /* Currently this only case for this is the pppoe server. There should be an existing macro with this name. */ + $aline['interface'] = " on \$" . $rule['interface'] . " "; + } else + $aline['interface'] = " on \$" . $FilterIflist[$rule['interface']]['descr'] . " "; + $ifcfg = $FilterIflist[$rule['interface']]; + if($pptpdcfg['mode'] != "server") { + if(($rule['source']['network'] == "pptp") || + ($rule['destination']['network'] == "pptp")) + return "# source network or destination network == pptp on " . $rule['descr']; + } + + switch($rule['ipprotocol']) { + case "inet": + $aline['ipprotocol'] = "inet"; + break; + case "inet6": + $aline['ipprotocol'] = "inet6"; + break; + default: + $aline['ipprotocol'] = ""; + break; + } + + /* check for unresolvable aliases */ + if($rule['source']['address'] && !alias_expand($rule['source']['address'])) { + $error_text = "Unresolvable source alias '{$rule['source']['address']}' for rule '{$rule['descr']}'"; + file_notice("Filter_Reload", $error_text); + return "# {$error_text}"; + } + if($rule['destination']['address'] && !alias_expand($rule['destination']['address'])) { + $error_text = "Unresolvable destination alias '{$rule['destination']['address']}' for rule '{$rule['descr']}'"; + file_notice("Filter_Reload", $error_text); + return "# {$error_text}"; + } + update_filter_reload_status("Setting up pass/block rules"); + $type = $rule['type']; + if($type != "pass" && $type != "block" && $type != "reject" && $type != "match") { + /* default (for older rules) is pass */ + $type = "pass"; + } + if($type == "reject") { + $aline['type'] = "block return "; + } else + $aline['type'] = $type . " "; + if(isset($rule['floating']) && $rule['floating'] == "yes") { + if($rule['direction'] != "any") + $aline['direction'] = " " . $rule['direction'] . " "; + } else { + /* ensure the direction is in */ + $aline['direction'] = " in "; + } + if(isset($rule['log'])) + $aline['log'] = "log "; + if(!isset($rule['floating']) || isset($rule['quick'])) + $aline['quick'] = " quick "; + + /* set the gateway interface */ + update_filter_reload_status(sprintf(gettext("Setting up pass/block rules %s"), $rule['descr'])); + + /* do not process reply-to for gateway'd rules */ + if($rule['gateway'] == "" && $aline['direction'] <> "" && (interface_has_gateway($rule['interface']) || interface_has_gatewayv6($rule['interface'])) && !isset($config['system']['disablereplyto']) && !isset($rule['disablereplyto']) && $type != "match") { + if ($rule['ipprotocol'] == "inet6") { + $rg = get_interface_gateway_v6($rule['interface']); + if (is_ipaddrv6($rg)) + $aline['reply'] = "reply-to ( {$ifcfg['ifv6']} {$rg} ) "; + else if ($rule['interface'] <> "pptp") + log_error("Could not find IPv6 gateway for interface({$rule['interface']})."); + } else { + $rg = get_interface_gateway($rule['interface']); + if (is_ipaddrv4($rg)) + $aline['reply'] = "reply-to ( {$ifcfg['if']} {$rg} ) "; + else if ($rule['interface'] <> "pptp") + log_error(sprintf(gettext("Could not find IPv4 gateway for interface (%s)."), $rule['interface'])); + } + } + /* if user has selected a custom gateway, lets work with it */ + else if($rule['gateway'] <> "" && $type == "pass") { + if (isset($GatewaysList[$rule['gateway']])) + /* Add the load balanced gateways */ + $aline['route'] = " \$GW{$rule['gateway']} "; + else if (isset($config['system']['skip_rules_gw_down'])) + return "# rule " . $rule['descr'] . " disabled because gateway " . $rule['gateway'] . " is down "; + else + log_error("The gateway: {$rule['gateway']} is invalid or unknown, not using it."); + } + + if (isset($rule['protocol']) && !empty($rule['protocol'])) { + if($rule['protocol'] == "tcp/udp") + $aline['prot'] = " proto { tcp udp } "; + elseif(($rule['protocol'] == "icmp") && ($rule['ipprotocol'] == "inet6")) + $aline['prot'] = " proto ipv6-icmp "; + elseif($rule['protocol'] == "icmp") + $aline['prot'] = " proto icmp "; + else + $aline['prot'] = " proto {$rule['protocol']} "; + } else { + if($rule['source']['port'] <> "" || $rule['destination']['port'] <> "") + $aline['prot'] = " proto tcp "; + } + update_filter_reload_status(sprintf(gettext("Creating rule %s"), $rule['descr'])); + + /* source address */ + $src = trim(filter_generate_address($rule, "source")); + if (empty($src) || ($src == "/")) { + return "# at the break!"; + } + $aline['src'] = " from $src "; + + /* OS signatures */ + if(($rule['protocol'] == "tcp") && ($rule['os'] <> "")) + $aline['os'] = " os \"{$rule['os']}\" "; + + /* destination address */ + $dst = trim(filter_generate_address($rule, "destination")); + if (empty($dst) || ($dst == "/")) { + return "# returning at dst $dst == \"/\""; + } + $aline['dst'] = "to $dst "; + + //Layer7 support + $l7_present = false; + $l7_structures = array(); + if(isset($rule['l7container']) && $rule['l7container'] != "none") { + $l7_present = true; + $l7rule =& $layer7_rules_list[$rule['l7container']]; + $l7_structures = $l7rule->get_unique_structures(); + $aline['divert'] = "divert-to " . $l7rule->GetRPort() . " "; + } + if (($rule['protocol'] == "icmp") && $rule['icmptype'] && ($rule['ipprotocol'] == "inet")) + $aline['icmp-type'] = "icmp-type {$rule['icmptype']} "; + if (($rule['protocol'] == "icmp") && $rule['icmptype'] && ($rule['ipprotocol'] == "inet6")) + $aline['icmp6-type'] = "icmp6-type {$rule['icmptype']} "; + if (!empty($rule['tag'])) + $aline['tag'] = " tag " .$rule['tag']. " "; + if (!empty($rule['tagged'])) + $aline['tagged'] = " tagged " .$rule['tagged'] . " "; + if (!empty($rule['dscp'])) { + switch (strtolower($rule['dscp'])) { + case 'va': $aline['dscp'] = " dscp 44 "; break; + case 'cs1': $aline['dscp'] = " dscp 8 "; break; + case 'cs2': $aline['dscp'] = " dscp 16 "; break; + case 'cs3': $aline['dscp'] = " dscp 24 "; break; + case 'cs4': $aline['dscp'] = " dscp 32 "; break; + case 'cs5': $aline['dscp'] = " dscp 40 "; break; + case 'cs6': $aline['dscp'] = " dscp 48 "; break; + case 'cs7': $aline['dscp'] = " dscp 56 "; break; + default: $aline['dscp'] = " dscp " . $rule['dscp'] . " "; break; + } + } + if (!empty($rule['vlanprio']) && ($rule['vlanprio'] != "none")) + $aline['vlanprio'] = " ieee8021q-pcp " . $rule['vlanprio'] . " "; + if (!empty($rule['vlanprioset']) && ($rule['vlanprioset'] != "none")) + $aline['vlanprioset'] = " ieee8021q-setpcp " . $rule['vlanprioset'] . " "; + if ($type == "pass") { + if (isset($rule['allowopts'])) + $aline['allowopts'] = " allow-opts "; + } + $aline['flags'] = ""; + if ($rule['protocol'] == "tcp") { + if (isset($rule['tcpflags_any'])) + $aline['flags'] = "flags any "; + else if (!empty($rule['tcpflags2'])) { + $aline['flags'] = "flags "; + if (!empty($rule['tcpflags1'])) { + $flags1 = explode(",", $rule['tcpflags1']); + foreach ($flags1 as $flag1) { + // CWR flag needs special treatment + if($flag1[0] == "c") + $aline['flags'] .= "W"; + else + $aline['flags'] .= strtoupper($flag1[0]); + } + } + $aline['flags'] .= "/"; + if (!empty($rule['tcpflags2'])) { + $flags2 = explode(",", $rule['tcpflags2']); + foreach ($flags2 as $flag2) { + // CWR flag needs special treatment + if($flag2[0] == "c") + $aline['flags'] .= "W"; + else + $aline['flags'] .= strtoupper($flag2[0]); + } + } + $aline['flags'] .= " "; + } else { + $aline['flags'] = "flags S/SA "; + } + } + if ($type == "pass") { + /* + * # keep state + * works with TCP, UDP, and ICMP. + * # modulate state + * works only with TCP. pfSense will generate strong Initial Sequence Numbers (ISNs) + * for packets matching this rule. + * # synproxy state + * proxies incoming TCP connections to help protect servers from spoofed TCP SYN floods. + * This option includes the functionality of keep state and modulate state combined. + * # none + * do not use state mechanisms to keep track. this is only useful if your doing advanced + * queueing in certain situations. please check the faq. + */ + $noadvoptions = false; + if (isset($rule['statetype']) && $rule['statetype'] <> "") { + switch($rule['statetype']) { + case "none": + $noadvoptions = true; + $aline['flags'] .= " no state "; + break; + case "modulate state": + case "synproxy state": + if ($rule['protocol'] == "tcp") + $aline['flags'] .= "{$rule['statetype']} "; + break; + case "sloppy state": + $aline['flags'] .= "keep state "; + $rule['sloppy'] = true; + break; + default: + $aline['flags'] .= "{$rule['statetype']} "; + break; + } + } else + $aline['flags'] .= "keep state "; + + if ($noadvoptions == false && isset($rule['nopfsync'])) + $rule['nopfsync'] = true; + + if ($noadvoptions == false || $l7_present) + if ((isset($rule['source-track']) and $rule['source-track'] <> "") or + (isset($rule['max']) and $rule['max'] <> "") or + (isset($rule['max-src-nodes']) and $rule['max-src-nodes'] <> "") or + (isset($rule['max-src-states']) and $rule['max-src-states'] <> "") or + ((in_array($rule['protocol'], array("tcp","tcp/udp"))) and + ((isset($rule['statetimeout']) and $rule['statetimeout'] <> "") or + (isset($rule['max-src-conn']) and $rule['max-src-conn'] <> "") or + (isset($rule['max-src-conn-rate']) and $rule['max-src-conn-rate'] <> "") or + (isset($rule['max-src-conn-rates']) and $rule['max-src-conn-rates'] <> ""))) or + isset($rule['sloppy']) or isset($rule['nopfsync']) or $l7_present) { + $aline['flags'] .= "( "; + if (isset($rule['sloppy'])) + $aline['flags'] .= "sloppy "; + if (isset($rule['nopfsync'])) + $aline['flags'] .= "no-sync "; + if (isset($rule['source-track']) and $rule['source-track'] <> "") + $aline['flags'] .= "source-track rule "; + if (isset($rule['max']) and $rule['max'] <> "") + $aline['flags'] .= "max " . $rule['max'] . " "; + if (isset($rule['max-src-nodes']) and $rule['max-src-nodes'] <> "") + $aline['flags'] .= "max-src-nodes " . $rule['max-src-nodes'] . " "; + if ((in_array($rule['protocol'], array("tcp","tcp/udp"))) + and isset($rule['max-src-conn']) + and $rule['max-src-conn'] <> "") + $aline['flags'] .= "max-src-conn " . $rule['max-src-conn'] . " "; + if (isset($rule['max-src-states']) and $rule['max-src-states'] <> "") + $aline['flags'] .= "max-src-states " . $rule['max-src-states'] . " "; + if ((in_array($rule['protocol'], array("tcp","tcp/udp"))) + and isset($rule['statetimeout']) + and $rule['statetimeout'] <> "") + $aline['flags'] .= "tcp.established " . $rule['statetimeout'] . " "; + if ((in_array($rule['protocol'], array("tcp","tcp/udp"))) + and isset($rule['max-src-conn-rate']) + and $rule['max-src-conn-rate'] <> "" + and isset($rule['max-src-conn-rates']) + and $rule['max-src-conn-rates'] <> "") { + $aline['flags'] .= "max-src-conn-rate " . $rule['max-src-conn-rate'] . " "; + $aline['flags'] .= "/" . $rule['max-src-conn-rates'] . ", overload flush global "; + } + + if(!empty($aline['divert'])) + $aline['flags'] .= "max-packets 8 "; + + $aline['flags'] .= " ) "; + } + } + if($rule['defaultqueue'] <> "") { + $aline['queue'] = " queue (".$rule['defaultqueue']; + if($rule['ackqueue'] <> "") + $aline['queue'] .= ",".$rule['ackqueue']; + $aline['queue'] .= ") "; + } + if($rule['dnpipe'] <> "") { + if (!empty($dummynet_name_list[$rule['dnpipe']])) { + if($dummynet_name_list[$rule['dnpipe']][0] == "?") { + $aline['dnpipe'] = " dnqueue( "; + $aline['dnpipe'] .= substr($dummynet_name_list[$rule['dnpipe']],1); + if($rule['pdnpipe'] <> "") + $aline['dnpipe'] .= ",".substr($dummynet_name_list[$rule['pdnpipe']], 1); + } else { + $aline['dnpipe'] = " dnpipe ( " . $dummynet_name_list[$rule['dnpipe']]; + if($rule['pdnpipe'] <> "") + $aline['dnpipe'] .= "," . $dummynet_name_list[$rule['pdnpipe']]; + } + $aline['dnpipe'] .= ") "; + } + } + + /* is a time based rule schedule attached? */ + if(!empty($rule['sched']) && !empty($config['schedules'])) { + $aline['schedlabel'] = ""; + foreach ($config['schedules']['schedule'] as $sched) { + if($sched['name'] == $rule['sched']) { + if(!filter_get_time_based_rule_status($sched)) { + if(!isset($config['system']['schedule_states'])) + mwexec("/sbin/pfctl -y {$sched['schedlabel']}"); + return "# schedule finished - {$rule['descr']}"; + } else if($g['debug']) + log_error("[TDR DEBUG] status true -- rule type '$type'"); + + $aline['schedlabel'] = " schedule \"{$sched['schedlabel']}\" "; + break; + } + } + } + + if (!empty($rule['tracker'])) + $aline['tracker'] = "tracker {$rule['tracker']} "; + + $line = ""; + /* exception(s) to a user rules can go here. */ + /* rules with a gateway or pool should create another rule for routing to vpns */ + if((($aline['route'] <> "") && (trim($aline['type']) == "pass") && strstr($dst, "any")) && (!isset($config['system']['disablenegate']))) { + /* negate VPN/PPTP/PPPoE/Static Route networks for load balancer/gateway rules */ + $negate_networks = " to " . filter_generate_port($rule, "destination"); + $line .= $aline['type'] . $aline['direction'] . $aline['log'] . $aline['quick'] . + $aline['interface'] . $aline['ipprotocol'] . $aline['prot'] . $aline['src'] . $aline['os'] . + $negate_networks . $aline['icmp-type'] . $aline['icmp6-type'] . $aline['tag'] . $aline['tagged'] . + $aline['vlanprio'] . $aline['vlanprioset'] . $aline['dscp'] . $aline['tracker'] . $aline['allowopts'] . $aline['flags'] . + $aline['queue'] . $aline['dnpipe'] . $aline['schedlabel'] . + " label \"NEGATE_ROUTE: Negate policy routing for destination\"\n"; + + } + /* piece together the actual user rule */ + $line .= $aline['type'] . $aline['direction'] . $aline['log'] . $aline['quick'] . $aline['interface'] . + $aline['reply'] . $aline['route'] . $aline['ipprotocol'] . $aline['prot'] . $aline['src'] . $aline['os'] . $aline['dst'] . + $aline['divert'] . $aline['icmp-type'] . $aline['icmp6-type'] . $aline['tag'] . $aline['tagged'] . $aline['dscp'] . $aline['tracker'] . + $aline['vlanprio'] . $aline['vlanprioset'] . $aline['allowopts'] . $aline['flags'] . $aline['queue'] . $aline['dnpipe'] . $aline['schedlabel']; + + unset($aline); + + return $line; +} + +function filter_rules_generate() { + global $config, $g, $FilterIflist, $time_based_rules, $GatewaysList, $tracker; + + $fix_rule_label = 'fix_rule_label'; + $increment_tracker = 'filter_rule_tracker'; + + update_filter_reload_status(gettext("Creating default rules")); + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_rules_generate() being called $mt\n"; + } + + $pptpdcfg = $config['pptpd']; + + $ipfrules = ""; + $ipfrules .= discover_pkg_rules("pfearly"); + + /* relayd */ + $ipfrules .= "anchor \"relayd/*\"\n"; + /* OpenVPN user rules from radius */ + $ipfrules .= "anchor \"openvpn/*\"\n"; + /* IPsec user rules from radius */ + $ipfrules .= "anchor \"ipsec/*\"\n"; + # BEGIN OF firewall rules + /* default block logging? */ + $log = array(); + if(!isset($config['syslog']['nologdefaultblock'])) + $log['block'] = "log"; + if(isset($config['syslog']['nologdefaultpass'])) + $log['pass'] = "log"; + + $saved_tracker = $tracker; + + if(!isset($config['system']['ipv6allow'])) { + $ipfrules .= "# Block all IPv6\n"; + $ipfrules .= "block in {$log['block']} quick inet6 all tracker {$increment_tracker($tracker)} label \"Block all IPv6\"\n"; + $ipfrules .= "block out {$log['block']} quick inet6 all tracker {$increment_tracker($tracker)} label \"Block all IPv6\"\n"; + } + + $saved_tracker += 100; + $tracker = $saved_tracker; + + $ipfrules .= << to any tracker {$increment_tracker($tracker)} label "Block snort2c hosts" +block {$log['block']} quick from any to tracker {$increment_tracker($tracker)} label "Block snort2c hosts" + +EOD; + + $saved_tracker += 100; + $tracker = $saved_tracker; + + $ipfrules .= filter_process_carp_rules($log); + + $saved_tracker += 100; + $tracker = $saved_tracker; + + $ipfrules .= "\n# SSH lockout\n"; + if(is_array($config['system']['ssh']) && !empty($config['system']['ssh']['port'])) { + $ipfrules .= "block in {$log['block']} quick proto tcp from to (self) port "; + $ipfrules .= $config['system']['ssh']['port']; + $ipfrules .= " tracker {$increment_tracker($tracker)} label \"sshlockout\"\n"; + } else { + if($config['system']['ssh']['port'] <> "") + $sshport = $config['system']['ssh']['port']; + else + $sshport = 22; + if($sshport) + $ipfrules .= "block in {$log['block']} quick proto tcp from to (self) port {$sshport} tracker {$increment_tracker($tracker)} label \"sshlockout\"\n"; + } + + $saved_tracker += 50; + $tracker = $saved_tracker; + + $ipfrules .= "\n# webConfigurator lockout\n"; + if(!$config['system']['webgui']['port']) { + if($config['system']['webgui']['protocol'] == "http") + $webConfiguratorlockoutport = "80"; + else + $webConfiguratorlockoutport = "443"; + } else { + $webConfiguratorlockoutport = $config['system']['webgui']['port']; + } + if($webConfiguratorlockoutport) + $ipfrules .= "block in {$log['block']} quick proto tcp from to (self) port {$webConfiguratorlockoutport} tracker {$increment_tracker($tracker)} label \"webConfiguratorlockout\"\n"; + + $saved_tracker += 100; + $tracker = $saved_tracker; + + /* + * Support for allow limiting of TCP connections by establishment rate + * Useful for protecting against sudden outburts, etc. + */ + $ipfrules .= "block in {$log['block']} quick from to any tracker 1000000400 label \"virusprot overload table\"\n"; + + $saved_tracker += 100; + $tracker = $saved_tracker; + + /* if captive portal is enabled, ensure that access to this port + * is allowed on a locked down interface + */ + if(is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpcfg) { + if(!isset($cpcfg['enable'])) + continue; + $cpinterfaces = explode(",", $cpcfg['interface']); + $cpiflist = array(); + $cpiplist = array(); + foreach ($cpinterfaces as $cpifgrp) { + if(!isset($FilterIflist[$cpifgrp])) + continue; + $tmpif = get_real_interface($cpifgrp); + if(!empty($tmpif)) { + $cpiflist[] = "{$tmpif}"; + $cpipm = get_interface_ip($cpifgrp); + if(is_ipaddr($cpipm)) { + $carpif = link_ip_to_carp_interface($cpipm); + if (!empty($carpif)) { + $cpiflist[] = $carpif; + $carpsif = explode(" ", $carpif); + foreach ($carpsif as $cpcarp) { + $carpip = find_interface_ip($cpcarp); + if (is_ipaddr($carpip)) + $cpiplist[] = $carpip; + } + } + $cpiplist[] = $cpipm; + } + } + } + if (count($cpiplist) > 0 && count($cpiflist) > 0) { + $cpinterface = implode(" ", $cpiflist); + $cpaddresses = implode(" ", $cpiplist); + $listenporthttps = $cpcfg['listenporthttps'] ? $cpcfg['listenporthttps'] : ($cpcfg['zoneid'] + 1); + $listenporthttp = $cpcfg['listenporthttp'] ? $cpcfg['listenporthttp'] : $cpcfg['zoneid']; + $portalias = $listenporthttps; + $portalias .= " {$listenporthttp}"; + $ipfrules .= "pass in {$log['pass']} quick on { {$cpinterface} } proto tcp from any to { {$cpaddresses} } port { {$portalias} } tracker {$increment_tracker($tracker)} keep state(sloppy)\n"; + $ipfrules .= "pass out {$log['pass']} quick on { {$cpinterface} } proto tcp from any to any flags any tracker {$increment_tracker($tracker)} keep state(sloppy)\n"; + } + } + } + + $bogontableinstalled = 0; + foreach ($FilterIflist as $on => $oc) { + /* XXX: Not static but give a step of 1000 for each interface to at least be able to match rules. */ + $saved_tracker += 1000; + $tracker = $saved_tracker; + + /* block bogon networks */ + /* http://www.cymru.com/Documents/bogon-bn-nonagg.txt */ + /* file is automatically in cron every 3000 minutes */ + if(!isset($config['syslog']['nologbogons'])) + $bogonlog = "log"; + else + $bogonlog = ""; + + if(isset($config['interfaces'][$on]['blockbogons'])) { + $ipfrules .= << to any tracker {$increment_tracker($tracker)} label "{$fix_rule_label("block bogon IPv4 networks from {$oc['descr']}")}" + +EOD; + + if(isset($config['system']['ipv6allow'])) { + $ipfrules .= << to any tracker {$increment_tracker($tracker)} label "{$fix_rule_label("block bogon IPv6 networks from {$oc['descr']}")}" + +EOD; + } + } + + + $saved_tracker += 10; + $tracker = $saved_tracker; + + if(isset($config['system']['ipv6allow']) && ($oc['type6'] == "slaac" || $oc['type6'] == "dhcp6")) { + $ipfrules .= << "") { + $ipfrules .= << $ifcfg) { + if(isset($ifcfg['virtual'])) + continue; + + $gw = get_interface_gateway($ifdescr); + if (is_ipaddrv4($gw) && is_ipaddrv4($ifcfg['ip'])) { + $ipfrules .= "pass out {$log['pass']} route-to ( {$ifcfg['if']} {$gw} ) from {$ifcfg['ip']} to !{$ifcfg['sa']}/{$ifcfg['sn']} tracker {$increment_tracker($tracker)} keep state allow-opts label \"let out anything from firewall host itself\"\n"; + if (is_array($ifcfg['vips'])) { + foreach ($ifcfg['vips'] as $vip) + if (ip_in_subnet($vip['ip'], "{$ifcfg['sa']}/{$ifcfg['sn']}")) + $ipfrules .= "pass out {$log['pass']} route-to ( {$ifcfg['if']} {$gw} ) from {$vip['ip']} to !{$ifcfg['sa']}/{$ifcfg['sn']} tracker {$increment_tracker($tracker)} keep state allow-opts label \"let out anything from firewall host itself\"\n"; + else + $ipfrules .= "pass out {$log['pass']} route-to ( {$ifcfg['if']} {$gw} ) from {$vip['ip']} to !" . gen_subnet($vip['ip'], $vip['sn']) . "/{$vip['sn']} tracker {$increment_tracker($tracker)} keep state allow-opts label \"let out anything from firewall host itself\"\n"; + } + } + + $gwv6 = get_interface_gateway_v6($ifdescr); + $stf = get_real_interface($ifdescr, "inet6"); + $pdlen = 64 - calculate_ipv6_delegation_length($ifdescr); + if (is_ipaddrv6($gwv6) && is_ipaddrv6($ifcfg['ipv6'])) { + $ipfrules .= "pass out {$log['pass']} route-to ( {$stf} {$gwv6} ) inet6 from {$ifcfg['ipv6']} to !{$ifcfg['ipv6']}/{$pdlen} tracker {$increment_tracker($tracker)} keep state allow-opts label \"let out anything from firewall host itself\"\n"; + if (is_array($ifcfg['vips6'])) { + foreach ($ifcfg['vips6'] as $vip) + $ipfrules .= "pass out {$log['pass']} route-to ( {$stf} {$gwv6} ) inet6 from {$vip['ip']} to !{$vip['ip']}/{$pdlen} tracker {$increment_tracker($tracker)} keep state allow-opts label \"let out anything from firewall host itself\"\n"; + } + } + } + + + $saved_tracker += 300; + $tracker = $saved_tracker; + /* add ipsec interfaces */ + if(isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) + $ipfrules .= "pass out {$log['pass']} on \$IPsec all tracker {$increment_tracker($tracker)} tracker {$increment_tracker($tracker)} keep state label \"IPsec internal host to host\"\n"; + + $saved_tracker += 10; + $tracker = $saved_tracker; + if(is_array($config['system']['webgui']) && !isset($config['system']['webgui']['noantilockout'])) { + $alports = filter_get_antilockout_ports(); + + if(count($config['interfaces']) > 1 && !empty($FilterIflist['lan']['if'])) { + /* if antilockout is enabled, LAN exists and has + * an IP and subnet mask assigned + */ + $lanif = $FilterIflist['lan']['if']; + $ipfrules .= << + + ScheduleMultipleTime + main descr + + + + +*/ +function filter_get_time_based_rule_status($schedule) { + + /* no schedule? rule should be installed */ + if (empty($schedule)) + return true; + /* + * iterate through time blocks and determine + * if the rule should be installed or not. + */ + foreach($schedule['timerange'] as $timeday) { + if (empty($timeday['month'])) + $monthstatus = true; + else + $monthstatus = filter_tdr_month($timeday['month']); + if (empty($timeday['day'])) + $daystatus = true; + else + $daystatus = filter_tdr_day($timeday['day']); + if (empty($timeday['hour'])) + $hourstatus = true; + else + $hourstatus = filter_tdr_hour($timeday['hour']); + if (empty($timeday['position'])) + $positionstatus = true; + else + $positionstatus = filter_tdr_position($timeday['position']); + + if ($monthstatus == true && $daystatus == true && $positionstatus == true && $hourstatus == true) + return true; + } + + return false; +} + +function filter_tdr_day($schedule) { + global $g; + + if($g['debug']) + log_error("[TDR DEBUG] filter_tdr_day($schedule)"); + + /* + * Calculate day of month. + * IE: 29th of may + */ + $date = date("d"); + $defined_days = explode(",", $schedule); + foreach($defined_days as $dd) { + if ($date == $dd) + return true; + } + return false; +} +function filter_tdr_hour($schedule) { + global $g; + + /* $schedule should be a string such as 16:00-19:00 */ + $tmp = explode("-", $schedule); + $starting_time = strtotime($tmp[0]); + $ending_time = strtotime($tmp[1]); + $now = strtotime("now"); + if($g['debug']) + log_error("[TDR DEBUG] S: $starting_time E: $ending_time N: $now"); + if($now >= $starting_time and $now < $ending_time) + return true; + return false; +} + +function filter_tdr_position($schedule) { + global $g; + + /* + * Calculate position, ie: day of week. + * Sunday = 7, Monday = 1, Tuesday = 2 + * Weds = 3, Thursday = 4, Friday = 5, + * Saturday = 6 + * ... + */ + $weekday = date("w"); + if($g['debug']) + log_error("[TDR DEBUG] filter_tdr_position($schedule) $weekday"); + if($weekday == 0) + $weekday = 7; + $schedule_days = explode(",", $schedule); + foreach($schedule_days as $day) { + if($day == $weekday) + return true; + } + return false; +} + +function filter_tdr_month($schedule) { + global $g; + + /* + * Calculate month + */ + $todays_month = date("n"); + $months = explode(",", $schedule); + if($g['debug']) + log_error("[TDR DEBUG] filter_tdr_month($schedule)"); + foreach($months as $month) { + if($month == $todays_month) + return true; + } + return false; +} + +function filter_setup_logging_interfaces() { + global $config, $FilterIflist; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_setup_logging_interfaces() being called $mt\n"; + } + $rules = ""; + if (isset($FilterIflist['lan'])) + $rules .= "set loginterface {$FilterIflist['lan']['if']}\n"; + else if (isset($FilterIflist['wan'])) + $rules .= "set loginterface {$FilterIflist['wan']['if']}\n"; + + return $rules; +} + +function filter_process_carp_rules($log) { + global $g, $config, $tracker; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_process_carp_rules() being called $mt\n"; + } + + $increment_tracker = 'filter_rule_tracker'; + $lines = ""; + /* return if there are no carp configured items */ + if (!empty($config['hasync']) or !empty($config['virtualip']['vip'])) { + $lines .= "block in {$log['block']} quick proto carp from (self) to any tracker {$increment_tracker($tracker)}\n"; + $lines .= "pass {$log['pass']} quick proto carp tracker {$increment_tracker($tracker)}\n"; + } + return $lines; +} + +/* Generate IPsec Filter Items */ +function filter_generate_ipsec_rules($log = array()) { + global $config, $g, $FilterIflist, $tracker; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "filter_generate_ipsec_rules() being called $mt\n"; + } + + if (isset($config['system']['disablevpnrules'])) + return "\n# VPN Rules not added disabled in System->Advanced.\n"; + + $increment_tracker = 'filter_rule_tracker'; + + $ipfrules = "\n# VPN Rules\n"; + /* Is IP Compression enabled? */ + if(isset($config['ipsec']['ipcomp'])) + set_single_sysctl("net.inet.ipcomp.ipcomp_enable" , "1"); + else + set_single_sysctl("net.inet.ipcomp.ipcomp_enable" , "0"); + + if(isset($config['ipsec']['enable']) && + is_array($config['ipsec']['phase1'])) { + /* step through all phase1 entries */ + foreach ($config['ipsec']['phase1'] as $ph1ent) { + $tracker += 10; + + if(isset ($ph1ent['disabled'])) + continue; + /* determine local and remote peer addresses */ + if(!isset($ph1ent['mobile'])) { + if (!function_exists('ipsec_get_phase1_dst')) + require_once("ipsec.inc"); + $rgip = ipsec_get_phase1_dst($ph1ent); + if(!$rgip) { + $ipfrules .= "# ERROR! Unable to determine remote IPsec peer address for {$ph1ent['remote-gateway']}\n"; + continue; + } + } else + $rgip = " any "; + /* Determine best description */ + if($ph1ent['descr']) + $descr = $ph1ent['descr']; + else + $descr = $rgip; + /* + * Step through all phase2 entries and determine + * which protocols are in use with this peer + */ + $prot_used_esp = false; + $prot_used_ah = false; + if(is_array($config['ipsec']['phase2'])) { + foreach ($config['ipsec']['phase2'] as $ph2ent) { + /* only evaluate ph2's bound to our ph1 */ + if($ph2ent['ikeid'] != $ph1ent['ikeid']) + continue; + if($ph2ent['protocol'] == 'esp') + $prot_used_esp = true; + if($ph2ent['protocol'] == 'ah') + $prot_used_ah = true; + } + } + + if (strstr($ph1ent['interface'], "_vip")) + list($parentinterface, $vhid) = explode("_vhid", $ph1ent['interface']); + else + $parentinterface = $ph1ent['interface']; + if (empty($FilterIflist[$parentinterface]['descr'])) { + $ipfrules .= "# Could not locate interface for IPsec: {$descr}\n"; + continue; + } + + unset($gateway); + /* add endpoint routes to correct gateway on interface */ + if((is_ipaddrv4($rgip)) && (interface_has_gateway($parentinterface))) { + $gateway = get_interface_gateway($parentinterface); + $interface = $FilterIflist[$parentinterface]['if']; + + $route_to = " route-to ( $interface $gateway ) "; + $reply_to = " reply-to ( $interface $gateway ) "; + + } + if((is_ipaddrv6($rgip)) && (interface_has_gatewayv6($parentinterface))) { + $gateway = get_interface_gateway_v6($parentinterface); + $interface = $FilterIflist[$parentinterface]['if']; + + $route_to = " route-to ( $interface $gateway ) "; + $reply_to = " reply-to ( $interface $gateway ) "; + } + + /* Just in case */ + if((!is_ipaddr($gateway) || empty($interface))) { + $route_to = " "; + $reply_to = " "; + } + + /* Add rules to allow IKE to pass */ + $shorttunneldescr = substr($descr, 0, 35); + $ipfrules .= << 0) { + $errorrules = sprintf(gettext("There was an error while parsing the package filter rules for %s."), $pkg_inc) . "\n"; + log_error($errorrules); + file_put_contents("{$g['tmp_path']}/rules.packages.{$pkg}", "#{$errorrules}\n{$tmprules}\n"); + continue; + } + $rules .= $tmprules; + } + } + return $rules; +} + +function filter_get_antilockout_ports($wantarray = false) { + global $config; + + $lockoutports = array(); + $guiport = ($config['system']['webgui']['protocol'] == "https") ? "443" : "80"; + $guiport = empty($config['system']['webgui']['port']) ? $guiport : $config['system']['webgui']['port']; + $lockoutports[] = $guiport; + + if (($config['system']['webgui']['protocol'] == "https") && !isset($config['system']['webgui']['disablehttpredirect']) && ($guiport != "80")) + $lockoutports[] = "80"; + + if (isset($config['system']['enablesshd'])) + $lockoutports[] = empty($config['system']['ssh']['port']) ? "22" : $config['system']['ssh']['port']; + + if ($wantarray) + return $lockoutports; + else + return implode(" ", $lockoutports); + +} + +?> diff --git a/usr/etc/inc/filter_log.inc b/usr/etc/inc/filter_log.inc new file mode 100644 index 000000000..b6d2eb2a2 --- /dev/null +++ b/usr/etc/inc/filter_log.inc @@ -0,0 +1,415 @@ +@.org + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/sbin/fifolog_reader /usr/bin/tail /usr/local/sbin/clog + pfSense_MODULE: filter +*/ + +require 'config.inc'; + +global $buffer_rules_rdr, $buffer_rules_normal; +$buffer_rules_rdr = array(); +$buffer_rules_normal = array(); + +/* format filter logs */ +function conv_log_filter($logfile, $nentries, $tail = 50, $filtertext = "", $filterinterface = null) { + global $config, $g; + + /* Make sure this is a number before using it in a system call */ + if (!(is_numeric($tail))) + return; + + if ($filtertext) + $tail = 5000; + + /* Always do a reverse tail, to be sure we're grabbing the 'end' of the log. */ + $logarr = ""; + + if(isset($config['system']['usefifolog'])) + exec("/usr/sbin/fifolog_reader " . escapeshellarg($logfile) . " | /usr/bin/grep 'filterlog:' | /usr/bin/tail -r -n {$tail}", $logarr); + else + exec("/usr/local/sbin/clog " . escapeshellarg($logfile) . " | grep -v \"CLOG\" | grep -v \"\033\" | /usr/bin/grep 'filterlog:' | /usr/bin/tail -r -n {$tail}", $logarr); + + $filterlog = array(); + $counter = 0; + + $filterinterface = strtoupper($filterinterface); + foreach ($logarr as $logent) { + if($counter >= $nentries) + break; + + $flent = parse_filter_line($logent); + if (!$filterinterface || ($filterinterface == $flent['interface'])) + { + if ( ( ($flent != "") && (!is_array($filtertext)) && (match_filter_line ($flent, $filtertext))) || + ( ($flent != "") && ( is_array($filtertext)) && (match_filter_field($flent, $filtertext)) ) ) { + $counter++; + $filterlog[] = $flent; + } + } + } + /* Since the lines are in reverse order, flip them around if needed based on the user's preference */ + return isset($config['syslog']['reverse']) ? $filterlog : array_reverse($filterlog); +} + +function escape_filter_regex($filtertext) { + /* If the caller (user) has not already put a backslash before a slash, to escape it in the regex, */ + /* then this will do it. Take out any "\/" already there, then turn all ordinary "/" into "\/". */ + return str_replace('/', '\/', str_replace('\/', '/', $filtertext)); +} + +function match_filter_line($flent, $filtertext = "") { + if (!$filtertext) + return true; + $filtertext = escape_filter_regex(str_replace(' ', '\s+', $filtertext)); + return @preg_match("/{$filtertext}/i", implode(" ", array_values($flent))); +} + +function match_filter_field($flent, $fields) { + foreach ($fields as $key => $field) { + if ($field == "All") + continue; + if ((strpos($field, '!') === 0)) { + $field = substr($field, 1); + if (strtolower($key) == 'act') { + if (in_arrayi($flent[$key], explode(" ", $field))) + return false; + } else { + $field_regex = escape_filter_regex($field); + if (@preg_match("/{$field_regex}/i", $flent[$key])) + return false; + } + } else { + if (strtolower($key) == 'act') { + if (!in_arrayi($flent[$key], explode(" ", $field))) + return false; + } else { + $field_regex = escape_filter_regex($field); + if (!@preg_match("/{$field_regex}/i", $flent[$key])) + return false; + } + } + } + return true; +} + +// Case Insensitive in_array function +function in_arrayi($needle, $haystack) { + return in_array(strtolower($needle), array_map('strtolower', $haystack)); +} + +function parse_filter_line($line) { + global $config, $g; + + $flent = array(); + $log_split = ""; + + if (!preg_match("/(.*)\s(.*)\sfilterlog:\s(.*)$/", $line, $log_split)) + return ""; + + list($all, $flent['time'], $host, $rule) = $log_split; + + $rule_data = explode(",", $rule); + $field = 0; + + $flent['rulenum'] = $rule_data[$field++]; + $flent['subrulenum'] = $rule_data[$field++]; + $flent['anchor'] = $rule_data[$field++]; + $flent['tracker'] = $rule_data[$field++]; + $flent['realint'] = $rule_data[$field++]; + $flent['interface'] = convert_real_interface_to_friendly_descr($flent['realint']); + $flent['reason'] = $rule_data[$field++]; + $flent['act'] = $rule_data[$field++]; + $flent['direction'] = $rule_data[$field++]; + $flent['version'] = $rule_data[$field++]; + + if ($flent['version'] == '4' || $flent['version'] == '6') { + if ($flent['version'] == '4') { + $flent['tos'] = $rule_data[$field++]; + $flent['ecn'] = $rule_data[$field++]; + $flent['ttl'] = $rule_data[$field++]; + $flent['id'] = $rule_data[$field++]; + $flent['offset'] = $rule_data[$field++]; + $flent['flags'] = $rule_data[$field++]; + $flent['protoid'] = $rule_data[$field++]; + $flent['proto'] = strtoupper($rule_data[$field++]); + } else { + $flent['class'] = $rule_data[$field++]; + $flent['flowlabel'] = $rule_data[$field++]; + $flent['hlim'] = $rule_data[$field++]; + $flent['proto'] = $rule_data[$field++]; + $flent['protoid'] = $rule_data[$field++]; + } + + $flent['length'] = $rule_data[$field++]; + $flent['srcip'] = $rule_data[$field++]; + $flent['dstip'] = $rule_data[$field++]; + + if ($flent['protoid'] == '6' || $flent['protoid'] == '17') { // TCP or UDP + $flent['srcport'] = $rule_data[$field++]; + $flent['dstport'] = $rule_data[$field++]; + + $flent['src'] = $flent['srcip'] . ':' . $flent['srcport']; + $flent['dst'] = $flent['dstip'] . ':' . $flent['dstport']; + + $flent['datalen'] = $rule_data[$field++]; + if ($flent['protoid'] == '6') { // TCP + $flent['tcpflags'] = $rule_data[$field++]; + $flent['seq'] = $rule_data[$field++]; + $flent['ack'] = $rule_data[$field++]; + $flent['window'] = $rule_data[$field++]; + $flent['urg'] = $rule_data[$field++]; + $flent['options'] = explode(";",$rule_data[$field++]); + } + } else if ($flent['protoid'] == '1') { // ICMP + $flent['src'] = $flent['srcip']; + $flent['dst'] = $flent['dstip']; + + $flent['icmp_type'] = $rule_data[$field++]; + + switch ($flent['icmp_type']) { + case "request": + case "reply": + $flent['icmp_id'] = $rule_data[$field++]; + $flent['icmp_seq'] = $rule_data[$field++]; + break; + case "unreachproto": + $flent['icmp_dstip'] = $rule_data[$field++]; + $flent['icmp_protoid'] = $rule_data[$field++]; + break; + case "unreachport": + $flent['icmp_dstip'] = $rule_data[$field++]; + $flent['icmp_protoid'] = $rule_data[$field++]; + $flent['icmp_port'] = $rule_data[$field++]; + break; + case "unreach": + case "timexceed": + case "paramprob": + case "redirect": + case "maskreply": + $flent['icmp_descr'] = $rule_data[$field++]; + break; + case "needfrag": + $flent['icmp_dstip'] = $rule_data[$field++]; + $flent['icmp_mtu'] = $rule_data[$field++]; + break; + case "tstamp": + $flent['icmp_id'] = $rule_data[$field++]; + $flent['icmp_seq'] = $rule_data[$field++]; + break; + case "tstampreply": + $flent['icmp_id'] = $rule_data[$field++]; + $flent['icmp_seq'] = $rule_data[$field++]; + $flent['icmp_otime'] = $rule_data[$field++]; + $flent['icmp_rtime'] = $rule_data[$field++]; + $flent['icmp_ttime'] = $rule_data[$field++]; + break; + default : + $flent['icmp_descr'] = $rule_data[$field++]; + break; + } + + } else if ($flent['protoid'] == '112') { // CARP + $flent['type'] = $rule_data[$field++]; + $flent['ttl'] = $rule_data[$field++]; + $flent['vhid'] = $rule_data[$field++]; + $flent['version'] = $rule_data[$field++]; + $flent['advskew'] = $rule_data[$field++]; + $flent['advbase'] = $rule_data[$field++]; + } + } else { + if($g['debug']) + log_error(sprintf(gettext("There was a error parsing rule number: %s. Please report to mailing list or forum."), $flent['rulenum'])); + return ""; + } + + /* If there is a src, a dst, and a time, then the line should be usable/good */ + if (!((trim($flent['src']) == "") || (trim($flent['dst']) == "") || (trim($flent['time']) == ""))) { + return $flent; + } else { + if($g['debug']) { + log_error(sprintf(gettext("There was a error parsing rule: %s. Please report to mailing list or forum."), $errline)); + } + return ""; + } +} + +function get_port_with_service($port, $proto) { + if (!$port) + return ''; + + $service = getservbyport($port, $proto); + $portstr = ""; + if ($service) { + $portstr = sprintf('' . htmlspecialchars($port) . '', $port, $proto, $service); + } else { + $portstr = htmlspecialchars($port); + } + return ':' . $portstr; +} + +function find_rule_by_number($rulenum, $trackernum, $type="block") { + global $g; + + /* Passing arbitrary input to grep could be a Very Bad Thing(tm) */ + if (!is_numeric($rulenum) || !is_numeric($trackernum) || !in_array($type, array('pass', 'block', 'match', 'rdr'))) + return; + + if ($trackernum == "0") + $lookup_pattern = "^@{$rulenum}\([0-9]+\)[[:space:]]{$type}[[:space:]].*[[:space:]]log[[:space:]]"; + else + $lookup_pattern = "^@[0-9]+\({$trackernum}\)[[:space:]]{$type}[[:space:]].*[[:space:]]log[[:space:]]"; + + /* At the moment, miniupnpd is the only thing I know of that + generates logging rdr rules */ + unset($buffer); + if ($type == "rdr") + $_gb = exec("/sbin/pfctl -vvPsn -a \"miniupnpd\" | /usr/bin/egrep " . escapeshellarg("^@{$rulenum}"), $buffer); + else { + if (file_exists("{$g['tmp_path']}/rules.debug")) + $_gb = exec("/sbin/pfctl -vvPnf {$g['tmp_path']}/rules.debug 2>/dev/null | /usr/bin/egrep " . escapeshellarg($lookup_pattern), $buffer); + else + $_gb = exec("/sbin/pfctl -vvPsr | /usr/bin/egrep " . escapeshellarg($lookup_pattern), $buffer); + } + if (is_array($buffer)) + return $buffer[0]; + + return ""; +} + +function buffer_rules_load() { + global $g, $buffer_rules_rdr, $buffer_rules_normal; + unset($buffer, $buffer_rules_rdr, $buffer_rules_normal); + /* Redeclare globals after unset to work around PHP */ + global $buffer_rules_rdr, $buffer_rules_normal; + $buffer_rules_rdr = array(); + $buffer_rules_normal = array(); + + $_gb = exec("/sbin/pfctl -vvPsn -a \"miniupnpd\" | grep '^@'", $buffer); + if (is_array($buffer)) { + foreach ($buffer as $line) { + list($key, $value) = explode (" ", $line, 2); + $buffer_rules_rdr[$key] = $value; + } + } + unset($buffer, $_gb); + if (file_exists("{$g['tmp_path']}/rules.debug")) + $_gb = exec("/sbin/pfctl -vvPnf {$g['tmp_path']}/rules.debug 2>/dev/null | /usr/bin/egrep '^@[0-9]+\([0-9]+\)[[:space:]].*[[:space:]]log[[:space:]]' | /usr/bin/egrep -v '^@[0-9]+\([0-9]+\)[[:space:]](nat|rdr|binat|no|scrub)'", $buffer); + else + $_gb = exec("/sbin/pfctl -vvPsr | /usr/bin/egrep '^@[0-9]+\([0-9]+\)[[:space:]].*[[:space:]]log[[:space:]]'", $buffer); + + if (is_array($buffer)) { + foreach ($buffer as $line) { + list($key, $value) = explode (" ", $line, 2); + # pfctl rule number output with tracker number: @dd(dddddddddd) + $matches = array(); + if (preg_match('/\@(?P\d+)\((?\d+)\)/', $key, $matches) == 1) { + if ($matches['trackernum'] > 0) + $key = $matches['trackernum']; + else + $key = "@{$matches['rulenum']}"; + } + $buffer_rules_normal[$key] = $value; + } + } + unset($_gb, $buffer); +} + +function buffer_rules_clear() { + unset($GLOBALS['buffer_rules_normal']); + unset($GLOBALS['buffer_rules_rdr']); +} + +function find_rule_by_number_buffer($rulenum, $trackernum, $type){ + global $g, $buffer_rules_rdr, $buffer_rules_normal; + + if ($trackernum == "0") + $lookup_key = "@{$rulenum}"; + else + $lookup_key = $trackernum; + + if ($type == "rdr") { + $ruleString = $buffer_rules_rdr[$lookup_key]; + //TODO: get the correct 'description' part of a RDR log line. currently just first 30 characters.. + $rulename = substr($ruleString,0,30); + } else { + $ruleString = $buffer_rules_normal[$lookup_key]; + list(,$rulename,) = explode("\"",$ruleString); + $rulename = str_replace("USER_RULE: ",'USER_RULE ',$rulename); + } + return "{$rulename} ({$lookup_key})"; +} + +function find_action_image($action) { + global $g; + if ((strstr(strtolower($action), "p")) || (strtolower($action) == "rdr")) + return "/themes/{$g['theme']}/images/icons/icon_pass.gif"; + else if(strstr(strtolower($action), "r")) + return "/themes/{$g['theme']}/images/icons/icon_reject.gif"; + else + return "/themes/{$g['theme']}/images/icons/icon_block.gif"; +} + +/* AJAX specific handlers */ +function handle_ajax($nentries, $tail = 50) { + global $config; + if($_GET['lastsawtime'] or $_POST['lastsawtime']) { + global $filter_logfile,$filterent; + if($_GET['lastsawtime']) + $lastsawtime = $_GET['lastsawtime']; + if($_POST['lastsawtime']) + $lastsawtime = $_POST['lastsawtime']; + /* compare lastsawrule's time stamp to filter logs. + * afterwards return the newer records so that client + * can update AJAX interface screen. + */ + $new_rules = ""; + $filterlog = conv_log_filter($filter_logfile, $nentries, $tail); + /* We need this to always be in forward order for the AJAX update to work properly */ + $filterlog = isset($config['syslog']['reverse']) ? array_reverse($filterlog) : $filterlog; + foreach($filterlog as $log_row) { + $row_time = strtotime($log_row['time']); + $img = "{$log_row['act']}"; + if($row_time > $lastsawtime) { + if ($log_row['proto'] == "TCP") + $log_row['proto'] .= ":{$log_row['tcpflags']}"; + + $img = "{$img}"; + $new_rules .= "{$img}||{$log_row['time']}||{$log_row['interface']}||{$log_row['srcip']}||{$log_row['dst']}||{$log_row['proto']}||" . time() . "||\n"; + } + } + echo $new_rules; + exit; + } +} + +?> diff --git a/usr/etc/inc/functions.inc b/usr/etc/inc/functions.inc new file mode 100644 index 000000000..a89aeff4a --- /dev/null +++ b/usr/etc/inc/functions.inc @@ -0,0 +1,151 @@ +. + 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. + + pfSense_MODULE: utils + +*/ + +/* BEGIN compatibility goo with HEAD */ +if(!function_exists("gettext")) { + function gettext($text) { + return $text; + } +} + +if(!function_exists("pfSenseHeader")) { + /****f* pfsense-utils/pfSenseHeader + * NAME + * pfSenseHeader + * INPUTS + * none + * RESULT + * Javascript header change or browser Location: + ******/ + function pfSenseHeader($text) { + global $_SERVER; + if (isAjax()) { + if ($_SERVER['HTTPS'] == "on") + $protocol = "https"; + else + $protocol = "http"; + + $port = ":{$_SERVER['SERVER_PORT']}"; + if ($_SERVER['SERVER_PORT'] == "80" && $protocol == "http") + $port = ""; + if ($_SERVER['SERVER_PORT'] == "443" && $protocol == "https") + $port = ""; + $complete_url = "{$protocol}://{$_SERVER['SERVER_NAME']}{$port}/{$text}"; + echo "\ndocument.location.href = '{$complete_url}';\n"; + } else { + header("Location: $text"); + } + } +} +/* END compatibility goo with HEAD */ + +/*fetch menu notices function*/ +if(!function_exists("get_menu_messages")) { + function get_menu_messages(){ + global $g,$config; + if (are_notices_pending()) { + $notices = get_notices(); + $requests=array(); + + ## Get Query Arguments from URL ### + foreach ($_REQUEST as $key => $value) { + if ($key != "PHPSESSID") + $requests[] = $key.'='.$value; + } + if(is_array($requests)) + $request_string = implode("&", $requests); + + if(is_array($notices)) { + $notice_msgs = ""; + $alert_style="style=\'color:#ffffff; filter:Glow(color=#ff0000, strength=12);\' "; + $notice = "".gettext("Acknowledge All Notices").""; + $alert_link="title=\'".gettext("Click to Acknowledge")."\' {$alert_style}"; + $domtt_width=500; + foreach ($notices as $key => $value) { + $date = date("m-d-y H:i:s", $key); + $noticemsg = ($value['notice'] != "" ? $value['notice'] : $value['id']); + $noticemsg = preg_replace("/(\"|\'|\n|<.?\w+>)/i","",$noticemsg); + if ((strlen($noticemsg)* 8) > $domtt_width) + $domtt_width=(strlen($noticemsg) *8); + if ((strlen($noticemsg)* 8) > 900) + $domtt_width= 900; + $alert_action ="onclick=notice_action(\'acknowledge\',\'{$key}\');domTT_close(this);jQuery(this).parent().parent().remove();"; + $notice_msgs .= ""; + } + $notice_msgs .="
    {$date}[ ".htmlspecialchars($noticemsg)."]
    "; + + $domtt= "onclick=\"domTT_activate(this, event, 'caption', '{$notice}','content', '
    {$notice_msgs}', 'trail', false, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle','width','{$domtt_width}','y',5,'type', 'sticky');\""; + $menu_messages="
    \n"; + if(count($notices)==1) + $msg= sprintf("%1$02d",count($notices))." ".gettext("unread notice"); + else + $msg= sprintf("%1$02d",count($notices))." ".gettext("unread notices"); + $menu_messages.="\n"; + $menu_messages.="
    \n"; + } + } + else { + $menu_messages='
    '; + $menu_messages.=$config['system']['hostname'] . "." . $config['system']['domain']; + $menu_messages.='
    '; + } + return ($menu_messages); + } +} + +if(!function_exists("dom_title")) { + function dom_title($title_msg,$width=NULL){ + $width=preg_replace("/\D+/","",$width); + if (!empty($width)){ + $width=",'width',$width"; + } + if (!empty($title_msg)){ + $title_msg=preg_replace("/\s+/"," ",$title_msg); + $title_msg=preg_replace("/'/","\'",$title_msg); + return "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '{$title_msg}', 'trail', true, 'delay', 250, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle' $width);\""; + } + } + } +/* include all configuration functions */ +require_once("interfaces.inc"); +require_once("gwlb.inc"); +require_once("services.inc"); +require_once("pfsense-utils.inc"); +require_once("certs.inc"); +require_once("system.inc"); +require_once("vslb.inc"); + +?> diff --git a/usr/etc/inc/globals.inc b/usr/etc/inc/globals.inc new file mode 100644 index 000000000..59cf61577 --- /dev/null +++ b/usr/etc/inc/globals.inc @@ -0,0 +1,164 @@ +. + 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. + + pfSense_MODULE: utils + +*/ + +global $g; +$g = array( + "base_packages" => "siproxd", + "event_address" => "unix:///var/run/check_reload_status", + "factory_shipped_username" => "admin", + "factory_shipped_password" => "pfsense", + "upload_path" => "/root", + "dhcpd_chroot_path" => "/var/dhcpd", + "unbound_chroot_path" => "/var/unbound", + "varrun_path" => "/var/run", + "varetc_path" => "/var/etc", + "vardb_path" => "/var/db", + "varlog_path" => "/var/log", + "etc_path" => "/etc", + "tmp_path" => "/tmp", + "conf_path" => "/conf", + "ftmp_path" => "/ftmp", + "conf_default_path" => "/conf.default", + "cf_path" => "/cf", + "cf_conf_path" => "/cf/conf", + "www_path" => "/usr/local/www", + "xml_rootobj" => "pfsense", + "admin_group" => "admins", + "product_name" => "pfSense", + "product_copyright" => "Electric Sheep Fencing LLC", + "product_copyright_url" => "http://www.electricsheepfencing.com", + "product_copyright_years" => "2004 - ".date("Y"), + "product_website" => "www.pfsense.org", + "product_website_footer" => "https://www.pfsense.org/?gui22", + "product_email" => "coreteam@pfsense.org", + "hideplatform" => false, + "hidedownloadbackup" => false, + "hidebackupbeforeupgrade" => false, + "disablethemeselection" => false, + "disablehelpmenu" => false, + "disablehelpicon" => false, + "disablecrashreporter" => false, + "crashreporterurl" => "https://crashreporter.pfsense.org/crash_reporter.php", + "debug" => false, + "latest_config" => "11.1", + "nopkg_platforms" => array("cdrom"), + "minimum_ram_warning" => "101", + "minimum_ram_warning_text" => "128 MB", + "wan_interface_name" => "wan", + "nopccard_platforms" => array("wrap", "net48xx"), + "xmlrpcbaseurl" => "https://packages.pfsense.org", + "captiveportal_path" => "/usr/local/captiveportal", + "captiveportal_element_path" => "/var/db/cpelements", + "captiveportal_element_sizelimit" => 1048576, + "xmlrpcpath" => "/xmlrpc.php", + "embeddedbootupslice" => "/dev/ad0a", + "services_dhcp_server_enable" => true, + "wireless_regex" => "/^(ndis|wi|ath|an|ral|ural|iwi|wlan|rum|run|bwn|zyd|mwl|bwi|ipw|iwn|malo|uath|upgt|urtw|wpi)/", + "help_base_url" => "/help.php" +); + +/* IP TOS flags */ +$iptos = array("lowdelay", "throughput", "reliability"); + +/* TCP flags */ +$tcpflags = array("syn", "ack", "fin", "rst", "psh", "urg", "ece", "cwr"); + +if(file_exists("/etc/platform")) { + $arch = php_uname("m"); + /* Do not remove this, it is not needed for the snapshots URL but is needed later for the -RELEASE/stable URLs */ + //$arch = ($arch == "i386") ? "" : '/' . $arch; + + /* Full installs and NanoBSD use the same update directory and manifest in 2.x */ + $g['update_url']="https://snapshots.pfsense.org/FreeBSD_releng/10.1/{$arch}/pfSense_HEAD/.updaters/"; + $g['update_manifest']="https://updates.pfSense.org/manifest"; + + $g['platform'] = trim(file_get_contents("/etc/platform")); + if($g['platform'] == "nanobsd") { + $g['firmware_update_text']="pfSense-*.img.gz"; + $g['hidedownloadbackup'] = true; + $g['hidebackupbeforeupgrade'] = true; + + } else { + $g['firmware_update_text']="pfSense-*.tgz"; + } +} + +/* Default sysctls */ +$sysctls = array("net.inet.ip.portrange.first" => "1024", + "net.inet.tcp.blackhole" => "2", + "net.inet.udp.blackhole" => "1", + "net.inet.ip.random_id" => "1", + "net.inet.tcp.drop_synfin" => "1", + "net.inet.ip.redirect" => "1", + "net.inet6.ip6.redirect" => "1", + "net.inet6.ip6.use_tempaddr" => "0", + "net.inet6.ip6.prefer_tempaddr" => "0", + "net.inet.tcp.syncookies" => "1", + "net.inet.tcp.recvspace" => "65228", + "net.inet.tcp.sendspace" => "65228", + "net.inet.ip.fastforwarding" => "0", + "net.inet.tcp.delayed_ack" => "0", + "net.inet.udp.maxdgram" => "57344", + "net.link.bridge.pfil_onlyip" => "0", + "net.link.bridge.pfil_member" => "1", + "net.link.bridge.pfil_bridge" => "0", + "net.link.tap.user_open" => "1", + "kern.randompid" => "347", + "net.inet.ip.intr_queue_maxlen" => "1000", + "hw.syscons.kbd_reboot" => "0", + "net.inet.tcp.log_debug" => "0", + "net.inet.tcp.tso" => "1", + "net.inet.icmp.icmplim" => "0", + "vfs.read_max" => "32", + "kern.ipc.maxsockbuf" => "4262144", + "debug.pfftpproxy" => "0", + "net.inet.ip.process_options" => 0, + "kern.random.sys.harvest.interrupt" => 0, + "kern.random.sys.harvest.point_to_point" => 0, + "kern.random.sys.harvest.ethernet" => 0, + "net.route.netisr_maxqlen" => 1024, + "net.inet.udp.checksum" => 1, + "net.bpf.zerocopy_enable" => 1, + "net.inet.icmp.reply_from_interface" => 1 +); + +/* Include override values for the above if needed. If the file doesn't exist, don't try to load it. */ +if (file_exists("/etc/inc/globals_override.inc")) + @include("globals_override.inc"); + +$config_parsed = false; + +?> diff --git a/usr/etc/inc/gmirror.inc b/usr/etc/inc/gmirror.inc new file mode 100644 index 000000000..cd6eb5f72 --- /dev/null +++ b/usr/etc/inc/gmirror.inc @@ -0,0 +1,314 @@ + 0) { + /* Loop through gmirror status output. */ + foreach ($status as $line) { + /* Split the line by whitespace */ + $all = preg_split("/[\s\t]+/", trim($line), 3); + if (count($all) == 3) { + /* If there are three items on a line, it is mirror name, status, and component */ + $currentmirror = basename($all[0]); + $mirrors[$currentmirror]['name'] = basename($all[0]); + $mirrors[$currentmirror]['status'] = $all[1]; + if (!is_array($mirrors[$currentmirror]['components'])) + $mirrors[$currentmirror]['components'] = array(); + $mirrors[$currentmirror]['components'][] = $all[2]; + } + } + } + /* Return an hash of mirrors and components */ + return $mirrors; +} + +/* Get only status word for a single mirror. */ +function gmirror_get_status_single($mirror) { + $status = ""; + $mirror_status = gmirror_get_status(); + var_dump($mirror_status); + return $mirror_status[$mirror]['status']; +} + +/* Generate an HTML formatted status for mirrors and disks in a small format for the widget */ +function gmirror_html_status() { + $mirrors = gmirror_get_status(); + $output = ""; + if (count($mirrors) > 0) { + $output .= "\n"; + $output .= "Name\n"; + $output .= "Status\n"; + $output .= "Component\n"; + $output .= "\n"; + foreach ($mirrors as $mirror => $name) { + $components = count($name["components"]); + $output .= "\n"; + $output .= "{$name['name']}\n"; + $output .= "{$name['status']}\n"; + $output .= "{$name['components'][0]}\n"; + $output .= "\n"; + if (count($name["components"]) > 1) { + $morecomponents = array_slice($name["components"], 1); + foreach ($morecomponents as $component) { + $output .= "\n"; + $output .= "{$component}\n"; + $output .= "\n"; + } + } + } + } else { + $output .= "No Mirrors Found\n"; + } + // $output .= "Updated at " . date("F j, Y, g:i:s a") . "\n"; + return $output; +} + +/* List all disks in the system (potential gmirror targets) */ +function gmirror_get_disks() { + $disklist = ""; + /* Get a list of disks in a scriptable way, exclude optical drives */ + exec("/sbin/geom disk status -s | /usr/bin/grep -v '[[:blank:]]*cd[[:digit:]]*' | /usr/bin/awk '{print $1;}'", $disklist); + return $disklist; +} + +/* List all potential gmirror consumers */ +function gmirror_get_unused_consumers() { + $consumerlist = ""; + /* Get a list of consumers, exclude existing mirrors and diskid entries */ + exec("/sbin/geom part status -s | /usr/bin/egrep -v '(mirror|diskid)' | /usr/bin/awk '{print $1, $3;}'", $consumerlist); + $all_consumers = array(); + foreach ($consumerlist as $cl) { + $parts = explode(" ", $cl); + foreach ($parts as $part) + $all_consumers[] = $part; + } + return $all_consumers; +} + +/* List all existing geom mirrors */ +function gmirror_get_mirrors() { + $mirrorlist = ""; + exec("/sbin/gmirror list | /usr/bin/grep '^Geom name:' | /usr/bin/awk '{print $3;}'", $mirrorlist); + return $mirrorlist; +} + + +/* List all consumers for a given mirror */ +function gmirror_get_consumers_in_mirror($mirror) { + if (!is_valid_mirror($mirror)) + return array(); + + $consumers = array(); + exec("/sbin/gmirror status -s " . escapeshellarg($mirror) . " | /usr/bin/awk '{print $3;}'", $consumers); + return $consumers; +} + +/* Test if a given consumer is a member of an existing mirror */ +function is_consumer_in_mirror($consumer, $mirror) { + if (!is_valid_consumer($consumer) || !is_valid_mirror($mirror)) + return false; + + $mirrorconsumers = gmirror_get_consumers_in_mirror($mirror); + return in_array(basename($consumer), $mirrorconsumers); +} + +/* Test if a mirror exists */ +function is_valid_mirror($mirror) { + $mirrors = gmirror_get_mirrors(); + return in_array($mirror, $mirrors); +} + +/* Test if a disk is valid/exists */ +function is_valid_disk($disk) { + $adisks = gmirror_get_disks(); + return in_array(basename($disk), $adisks); +} + +/* Test if a consumer is valid and in use in a mirror */ +function is_consumer_used($consumer) { + $found = false; + $mirrors = gmirror_get_mirrors(); + foreach ($mirrors as $mirror) { + $consumers = gmirror_get_consumers_in_mirror($mirror); + if (in_array($consumer, $consumers)) + return true; + } + return false; +} + +/* Test if a consumer is valid and not in use */ +function is_consumer_unused($consumer) { + $consumers = gmirror_get_unused_consumers(); + return in_array($consumer, $consumers); +} + +/* Test if a consumer is valid (either a disk or partition) */ +function is_valid_consumer($consumer) { + return (is_consumer_unused($consumer) || is_consumer_used($consumer)); +} + +/* Remove all disconnected drives from a mirror */ +function gmirror_forget_disconnected($mirror) { + if (!is_valid_mirror($mirror)) + return false; + return mwexec("/sbin/gmirror forget " . escapeshellarg($mirror)); +} + +/* Insert another consumer into a mirror */ +function gmirror_insert_consumer($mirror, $consumer) { + if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror insert " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); +} + +/* Remove consumer from a mirror and clear its metadata */ +function gmirror_remove_consumer($mirror, $consumer) { + if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror remove " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); +} + +/* Wipe geom info from drive (if mirror is not running) */ +function gmirror_clear_consumer($consumer) { + if (!is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror clear " . escapeshellarg($consumer)); +} + +/* Find the balance method used by a given mirror */ +function gmirror_get_mirror_balance($mirror) { + if (!is_valid_mirror($mirror)) + return false; + $balancemethod = ""; + exec("/sbin/gmirror list " . escapeshellarg($mirror) . " | /usr/bin/grep '^Balance:' | /usr/bin/awk '{print $2;}'", $balancemethod); + return $balancemethod[0]; +} + +/* Change balance algorithm of the mirror */ +function gmirror_configure_balance($mirror, $balancemethod) { + global $balance_methods; + if (!is_valid_mirror($mirror) || !in_array($balancemethod, $balance_methods)) + return false; + return mwexec("/sbin/gmirror configure -b " . escapeshellarg($balancemethod) . " " . escapeshellarg($mirror)); +} + +/* Force a mirror member to rebuild */ +function gmirror_force_rebuild($mirror, $consumer) { + if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror rebuild " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); +} + +/* Show all metadata on the physical consumer */ +function gmirror_get_consumer_metadata($consumer) { + if (!is_valid_consumer($consumer)) + return array(); + $output = ""; + exec("/sbin/gmirror dump " . escapeshellarg($consumer), $output); + return array_map('trim', $output); +} + +/* Test if a consumer has metadata, indicating it is a member of a mirror (active or inactive) */ +function gmirror_consumer_has_metadata($consumer) { + return (count(gmirror_get_consumer_metadata($consumer)) > 0); +} + +/* Find the mirror to which this consumer belongs */ +function gmirror_get_consumer_metadata_mirror($consumer) { + if (!is_valid_consumer($consumer)) + return array(); + $metadata = gmirror_get_consumer_metadata($consumer); + foreach ($metadata as $line) { + if (substr($line, 0, 5) == "name:") { + list ($key, $value) = explode(":", $line, 2); + return trim($value); + } + } +} + +/* Deactivate consumer, removing it from service in the mirror, but leave metadata intact */ +function gmirror_deactivate_consumer($mirror, $consumer) { + if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror deactivate " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); +} + +/* Reactivate a deactivated consumer */ +function gmirror_activate_consumer($mirror, $consumer) { + if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) + return false; + return mwexec("/sbin/gmirror activate " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); +} + +/* Find the size of the given mirror */ +function gmirror_get_mirror_size($mirror) { + if (!is_valid_mirror($mirror)) + return false; + $mirrorsize = ""; + exec("/sbin/gmirror list " . escapeshellarg($mirror) . " | /usr/bin/grep 'Mediasize:' | /usr/bin/head -n 1 | /usr/bin/awk '{print $2;}'", $mirrorsize); + return $mirrorsize[0]; +} + +/* Return a list of all potential consumers on a disk with sizes. The geom part + list output is a little odd, we can't get the output for just the disk, if the disk contains + slices those get output also. */ +function gmirror_get_all_unused_consumer_sizes_on_disk($disk) { + if (!is_valid_disk($disk) || !is_consumer_unused($disk)) + return array(); + $output = ""; + exec("/sbin/geom part list " . escapeshellarg($disk) . " | /usr/bin/egrep '(Name:|Mediasize:)' | /usr/bin/cut -c4- | /usr/bin/sed -l -e 'N;s/\\nMediasize://;P;D;' | /usr/bin/cut -c7-", $output); + $disk_contents = array(); + foreach ($output as $line) { + list($name, $size, $humansize) = explode(" ", $line, 3); + $consumer = array(); + $consumer['name'] = $name; + $consumer['size'] = $size; + $consumer['humansize'] = $humansize; + $disk_contents[] = $consumer; + } + return $disk_contents; +} + +/* Get only the size for one specific potential consumer. */ +function gmirror_get_unused_consumer_size($consumer) { + $consumersizes = gmirror_get_all_unused_consumer_sizes_on_disk($consumer); + foreach ($consumersizes as $csize) { + if ($csize['name'] == $consumer) + return $csize['size']; + } + return -1; +} +?> \ No newline at end of file diff --git a/usr/etc/inc/growl.class b/usr/etc/inc/growl.class new file mode 100644 index 000000000..33650ca8d --- /dev/null +++ b/usr/etc/inc/growl.class @@ -0,0 +1,102 @@ +appName = utf8_encode($app_name); + $this->address = $address; + $this->notifications = array(); + $this->password = $password; + $this->port = 9887; + } + + public function addNotification($name, $enabled = true) + { + $this->notifications[] = array('name' => utf8_encode($name), 'enabled' => $enabled); + } + + public function register() + { + $data = ''; + $defaults = ''; + $num_defaults = 0; + + for($i = 0; $i < count($this->notifications); $i++) + { + $data .= pack('n', strlen($this->notifications[$i]['name'])) . $this->notifications[$i]['name']; + if($this->notifications[$i]['enabled']) + { + $defaults .= pack('c', $i); + $num_defaults++; + } + } + + // pack(Protocol version, type, app name, number of notifications to register) + $data = pack('c2nc2', 1, 0, strlen($this->appName), count($this->notifications), $num_defaults) . $this->appName . $data . $defaults; + $data .= pack('H32', md5($data . $this->password)); + + return $this->send($data); + } + + public function notify($name, $title, $message, $priority = 0, $sticky = false) + { + $name = utf8_encode($name); + $title = utf8_encode($title); + $message = utf8_encode($message); + $priority = intval($priority); + + $flags = ($priority & 7) * 2; + if($priority < 0) $flags |= 8; + if($sticky) $flags |= 1; + + // pack(protocol version, type, priority/sticky flags, notification name length, title length, message length. app name length) + $data = pack('c2n5', 1, 1, $flags, strlen($name), strlen($title), strlen($message), strlen($this->appName)); + $data .= $name . $title . $message . $this->appName; + $data .= pack('H32', md5($data . $this->password)); + + return $this->send($data); + } + + private function send($data) + { + if(function_exists('socket_create') && function_exists('socket_sendto')) + { + $sck = @socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + if ($sck) { + socket_sendto($sck, $data, strlen($data), 0x100, $this->address, $this->port); + return true; + } + } + elseif(function_exists('fsockopen')) + { + if ($this->address) { + $fp = @fsockopen('udp://' . $this->address, $this->port); + if ($fp) { + fwrite($fp, $data); + fclose($fp); + return true; + } + } + } + + return false; + } + } + +?> \ No newline at end of file diff --git a/usr/etc/inc/gwlb.inc b/usr/etc/inc/gwlb.inc new file mode 100644 index 000000000..c5121feed --- /dev/null +++ b/usr/etc/inc/gwlb.inc @@ -0,0 +1,1112 @@ + "200", + "latencyhigh" => "500", + "losslow" => "10", + "losshigh" => "20", + "interval" => "1", + "down" => "10", + "avg_delay_samples" => "10", + "avg_loss_samples" => "50", + "avg_loss_delay_samples" => "20"); +} + +/* + * Creates monitoring configuration file and + * adds appropriate static routes. + */ +function setup_gateways_monitor() { + global $config, $g; + + $gateways_arr = return_gateways_array(); + if (!is_array($gateways_arr)) { + log_error("No gateways to monitor. Apinger will not be run."); + killbypid("{$g['varrun_path']}/apinger.pid"); + @unlink("{$g['varrun_path']}/apinger.status"); + return; + } + + $apinger_debug = ""; + if (isset($config['system']['apinger_debug'])) + $apinger_debug = "debug on"; + + $apinger_default = return_apinger_defaults(); + $apingerconfig = << $gateway) { + /* Do not monitor if such was requested */ + if (isset($gateway['monitor_disable'])) + continue; + if (empty($gateway['monitor']) || !is_ipaddr($gateway['monitor'])) { + if (is_ipaddr($gateway['gateway'])) + $gateway['monitor'] = $gateway['gateway']; + else /* No chance to get an ip to monitor skip target. */ + continue; + } + + /* if the monitor address is already used before, skip */ + if(in_array($gateway['monitor'], $monitor_ips)) + continue; + + /* Interface ip is needed since apinger will bind a socket to it. + * However the config GUI should already have checked this and when + * PPoE is used the IP address is set to "dynamic". So using is_ipaddrv4 + * or is_ipaddrv6 to identify packet type would be wrong, especially as + * further checks (that can cope with the "dynamic" case) are present inside + * the if block. So using $gateway['ipprotocol'] is the better option. + */ + if ($gateway['ipprotocol'] == "inet") { // This is an IPv4 gateway... + $gwifip = find_interface_ip($gateway['interface'], true); + if (!is_ipaddrv4($gwifip)) + continue; //Skip this target + + /* + * If the gateway is the same as the monitor we do not add a + * route as this will break the routing table. + * Add static routes for each gateway with their monitor IP + * not strictly necessary but is a added level of protection. + */ + if (is_ipaddrv4($gateway['gateway']) && $gateway['monitor'] != $gateway['gateway']) { + log_error("Removing static route for monitor {$gateway['monitor']} and adding a new route through {$gateway['gateway']}"); + mwexec("/sbin/route change -host " . escapeshellarg($gateway['monitor']) . + " " . escapeshellarg($gateway['gateway']), true); + } + } else if ($gateway['ipprotocol'] == "inet6") { // This is an IPv6 gateway... + if ($gateway['monitor'] == $gateway['gateway']) { + /* link locals really need a different src ip */ + if (is_linklocal($gateway['gateway'])) { + $gwifip = find_interface_ipv6_ll($gateway['interface'], true); + } else { + $gwifip = find_interface_ipv6($gateway['interface'], true); + } + } else { + /* 'monitor' has been set, so makes sure it has precedence over + * 'gateway' in defining the source IP. Otherwise if 'gateway' + * is a local link and 'monitor' is global routable then the + * ICMP6 response would not find its way back home... + */ + $gwifip = find_interface_ipv6($gateway['interface'], true); + if (is_linklocal($gateway['monitor'])) { + if (!strstr($gateway['monitor'], '%')) { + $gateway['monitor'] .= "%{$gateway['interface']}"; + } + } else { + // Monitor is a routable address, so use a routable address for the "src" part + $gwifip = find_interface_ipv6($gateway['interface'], true); + } + } + + if (!is_ipaddrv6($gwifip)) + continue; //Skip this target + + /* + * If the gateway is the same as the monitor we do not add a + * route as this will break the routing table. + * Add static routes for each gateway with their monitor IP + * not strictly necessary but is a added level of protection. + */ + if (is_ipaddrv6($gateway['gateway']) && $gateway['monitor'] != $gateway['gateway']) { + log_error("Removing static route for monitor {$gateway['monitor']} and adding a new route through {$gateway['gateway']}"); + mwexec("/sbin/route change -host -inet6 " . escapeshellarg($gateway['monitor']) . + " " . escapeshellarg($gateway['gateway']), true); + } + } else + continue; + + $monitor_ips[] = $gateway['monitor']; + $apingercfg = "target \"{$gateway['monitor']}\" {\n"; + $apingercfg .= " description \"{$name}\"\n"; + $apingercfg .= " srcip \"{$gwifip}\"\n"; + + ## How often the probe should be sent + if (!empty($gateway['interval']) && is_numeric($gateway['interval'])) { + $interval = intval($gateway['interval']); # Restrict to Integer + if ($interval < 1) $interval = 1; # Minimum + if ($interval != $apinger_default['interval']) # If not default value + $apingercfg .= " interval " . $interval . "s\n"; + } + + ## How many replies should be used to compute average delay + ## for controlling "delay" alarms + if (!empty($gateway['avg_delay_samples']) && is_numeric($gateway['avg_delay_samples'])) { + $avg_delay_samples = intval($gateway['avg_delay_samples']); # Restrict to Integer + if ($avg_delay_samples < 1) $avg_delay_samples = 1; # Minimum + if ($avg_delay_samples != $apinger_default['avg_delay_samples']) # If not default value + $apingercfg .= " avg_delay_samples " . $avg_delay_samples . "\n"; + } + + ## How many probes should be used to compute average loss + if (!empty($gateway['avg_loss_samples']) && is_numeric($gateway['avg_loss_samples'])) { + $avg_loss_samples = intval($gateway['avg_loss_samples']); # Restrict to Integer + if ($avg_loss_samples < 1) $avg_loss_samples = 1; # Minimum + if ($avg_loss_samples != $apinger_default['avg_loss_samples']) # If not default value + $apingercfg .= " avg_loss_samples " . $avg_loss_samples . "\n"; + } + + ## The delay (in samples) after which loss is computed + ## without this delays larger than interval would be treated as loss + if (!empty($gateway['avg_loss_delay_samples']) && is_numeric($gateway['avg_loss_delay_samples'])) { + $avg_loss_delay_samples = intval($gateway['avg_loss_delay_samples']); # Restrict to Integer + if ($avg_loss_delay_samples < 1) $avg_loss_delay_samples = 1; # Minimum + if ($avg_loss_delay_samples != $apinger_default['avg_loss_delay_samples']) # If not default value + $apingercfg .= " avg_loss_delay_samples " . $avg_loss_delay_samples . "\n"; + } + + $alarms = ""; + $alarmscfg = ""; + $override = false; + if (!empty($gateway['losslow'])) { + $alarmscfg .= "alarm loss \"{$name}loss\" {\n"; + $alarmscfg .= "\tpercent_low {$gateway['losslow']}\n"; + $alarmscfg .= "\tpercent_high {$gateway['losshigh']}\n"; + $alarmscfg .= "}\n"; + $alarms .= "\"{$name}loss\""; + $override = true; + } else { + if ($override == true) + $alarms .= ","; + $alarms .= "\"loss\""; + $override = true; + } + if (!empty($gateway['latencylow'])) { + $alarmscfg .= "alarm delay \"{$name}delay\" {\n"; + $alarmscfg .= "\tdelay_low {$gateway['latencylow']}ms\n"; + $alarmscfg .= "\tdelay_high {$gateway['latencyhigh']}ms\n"; + $alarmscfg .= "}\n"; + if ($override == true) + $alarms .= ","; + $alarms .= "\"{$name}delay\""; + $override = true; + } else { + if ($override == true) + $alarms .= ","; + $alarms .= "\"delay\""; + $override = true; + } + if (!empty($gateway['down'])) { + $alarmscfg .= "alarm down \"{$name}down\" {\n"; + $alarmscfg .= "\ttime {$gateway['down']}s\n"; + $alarmscfg .= "}\n"; + if ($override == true) + $alarms .= ","; + $alarms .= "\"{$name}down\""; + $override = true; + } else { + if ($override == true) + $alarms .= ","; + $alarms .= "\"down\""; + $override = true; + } + if ($override == true) + $apingercfg .= "\talarms override {$alarms};\n"; + + if (isset($gateway['force_down'])) + $apingercfg .= "\tforce_down on\n"; + + $apingercfg .= " rrd file \"{$g['vardb_path']}/rrd/{$gateway['name']}-quality.rrd\"\n"; + $apingercfg .= "}\n"; + $apingercfg .= "\n"; + + $apingerconfig .= $alarmscfg; + $apingerconfig .= $apingercfg; + + # Create gateway quality RRD with settings more suitable for pfSense graph set, + # since apinger uses default step (300; 5 minutes) and other settings that don't + # match the pfSense gateway quality graph set. + create_gateway_quality_rrd("{$g['vardb_path']}/rrd/{$gateway['name']}-quality.rrd"); + } + @file_put_contents("{$g['varetc_path']}/apinger.conf", $apingerconfig); + unset($apingerconfig); + + if (is_dir("{$g['tmp_path']}")) + chmod("{$g['tmp_path']}", 01777); + if (!is_dir("{$g['vardb_path']}/rrd")) + mkdir("{$g['vardb_path']}/rrd", 0775); + + @chown("{$g['vardb_path']}/rrd", "nobody"); + + /* Restart apinger process */ + if (isvalidpid("{$g['varrun_path']}/apinger.pid")) + sigkillbypid("{$g['varrun_path']}/apinger.pid", "HUP"); + else { + /* start a new apinger process */ + @unlink("{$g['varrun_path']}/apinger.status"); + sleep(1); + mwexec_bg("/usr/local/sbin/apinger -c {$g['varetc_path']}/apinger.conf"); + sleep(1); + sigkillbypid("{$g['varrun_path']}/apinger.pid", "USR1"); + } + + return 0; +} + +/* return the status of the apinger targets as a array */ +function return_gateways_status($byname = false) { + global $config, $g; + + $apingerstatus = array(); + /* Always get the latest status from apinger */ + if (file_exists("{$g['varrun_path']}/apinger.pid")) + sigkillbypid("{$g['varrun_path']}/apinger.pid", "USR1"); + if (file_exists("{$g['varrun_path']}/apinger.status")) { + $apingerstatus = file("{$g['varrun_path']}/apinger.status"); + } else + $apingerstatus = array(); + + $status = array(); + foreach($apingerstatus as $line) { + $info = explode("|", $line); + if ($byname == false) + $target = $info[0]; + else + $target = $info[2]; + + $status[$target] = array(); + $status[$target]['monitorip'] = $info[0]; + $status[$target]['srcip'] = $info[1]; + $status[$target]['name'] = $info[2]; + $status[$target]['lastcheck'] = $info[5] ? date('r', $info[5]) : date('r'); + $status[$target]['delay'] = empty($info[6]) ? "0ms" : round($info[6], 1) ."ms" ; + $status[$target]['loss'] = empty($info[7]) ? "0.0%" : round($info[7], 1) . "%"; + $status[$target]['status'] = trim($info[8]); + } + + /* tack on any gateways that have monitoring disabled + * or are down, which could cause gateway groups to fail */ + $gateways_arr = return_gateways_array(); + foreach($gateways_arr as $gwitem) { + if(!isset($gwitem['monitor_disable'])) + continue; + if(!is_ipaddr($gwitem['monitorip'])) { + $realif = $gwitem['interface']; + $tgtip = get_interface_gateway($realif); + if (!is_ipaddr($tgtip)) + $tgtip = "none"; + $srcip = find_interface_ip($realif); + } else { + $tgtip = $gwitem['monitorip']; + $srcip = find_interface_ip($realif); + } + if($byname == true) + $target = $gwitem['name']; + else + $target = $tgtip; + + /* failsafe for down interfaces */ + if($target == "none") { + $target = $gwitem['name']; + $status[$target]['name'] = $gwitem['name']; + $status[$target]['lastcheck'] = date('r'); + $status[$target]['delay'] = "0.0ms"; + $status[$target]['loss'] = "100.0%"; + $status[$target]['status'] = "down"; + } else { + $status[$target]['monitorip'] = $tgtip; + $status[$target]['srcip'] = $srcip; + $status[$target]['name'] = $gwitem['name']; + $status[$target]['lastcheck'] = date('r'); + $status[$target]['delay'] = "0.0ms"; + $status[$target]['loss'] = "0.0%"; + $status[$target]['status'] = "none"; + } + } + return($status); +} + +/* Return all configured gateways on the system */ +function return_gateways_array($disabled = false, $localhost = false, $inactive = false) { + global $config, $g; + + $gateways_arr = array(); + + $found_defaultv4 = 0; + $found_defaultv6 = 0; + + // Ensure the interface cache is up to date first + $interfaces = get_interface_arr(true); + $interfaces_v4 = array(); + $interfaces_v6 = array(); + + $i = -1; + /* Process/add all the configured gateways. */ + if (is_array($config['gateways']['gateway_item'])) { + foreach ($config['gateways']['gateway_item'] as $gateway) { + /* Increment it here to do not skip items */ + $i++; + + if (empty($config['interfaces'][$gateway['interface']])) { + if ($inactive === false) + continue; + else + $gateway['inactive'] = true; + } + $wancfg = $config['interfaces'][$gateway['interface']]; + + /* skip disabled interfaces */ + if ($disabled === false && (!isset($wancfg['enable']) || isset($gateway['disabled']))) + continue; + + /* if the gateway is dynamic and we can find the IPv4, Great! */ + if (empty($gateway['gateway']) || $gateway['gateway'] == "dynamic") { + if ($gateway['ipprotocol'] == "inet") { + /* we know which interfaces is dynamic, this should be made a function */ + $gateway['gateway'] = get_interface_gateway($gateway['interface']); + /* no IP address found, set to dynamic */ + if (!is_ipaddrv4($gateway['gateway'])) + $gateway['gateway'] = "dynamic"; + $gateway['dynamic'] = true; + } + + /* if the gateway is dynamic and we can find the IPv6, Great! */ + else if ($gateway['ipprotocol'] == "inet6") { + /* we know which interfaces is dynamic, this should be made a function, and for v6 too */ + $gateway['gateway'] = get_interface_gateway_v6($gateway['interface']); + /* no IPv6 address found, set to dynamic */ + if (!is_ipaddrv6($gateway['gateway'])) + $gateway['gateway'] = "dynamic"; + $gateway['dynamic'] = true; + } + } else { + /* getting this detection right is hard at this point because we still don't + * store the address family in the gateway item */ + if (is_ipaddrv4($gateway['gateway'])) + $gateway['ipprotocol'] = "inet"; + else if(is_ipaddrv6($gateway['gateway'])) + $gateway['ipprotocol'] = "inet6"; + } + + if (isset($gateway['monitor_disable'])) + $gateway['monitor_disable'] = true; + else if (empty($gateway['monitor'])) + $gateway['monitor'] = $gateway['gateway']; + + $gateway['friendlyiface'] = $gateway['interface']; + + /* special treatment for tunnel interfaces */ + if ($gateway['ipprotocol'] == "inet6") { + $gateway['interface'] = get_real_interface($gateway['interface'], "inet6", false, false); + $interfaces_v6[$gateway['friendlyiface']] = $gateway['friendlyiface']; + } else { + $gateway['interface'] = get_real_interface($gateway['interface'], "all", false, false); + $interfaces_v4[$gateway['friendlyiface']] = $gateway['friendlyiface']; + } + + /* entry has a default flag, use it */ + if (isset($gateway['defaultgw'])) { + if ($gateway['ipprotocol'] == "inet") { + $gateway['defaultgw'] = true; + $found_defaultv4 = 1; + } else if ($gateway['ipprotocol'] == "inet6") { + $gateway['defaultgw'] = true; + $found_defaultv6 = 1; + } + } + /* include the gateway index as the attribute */ + $gateway['attribute'] = $i; + + $gateways_arr[$gateway['name']] = $gateway; + } + } + unset($gateway); + + /* Loop through all interfaces with a gateway and add it to a array */ + if ($disabled == false) + $iflist = get_configured_interface_with_descr(); + else + $iflist = get_configured_interface_with_descr(false, true); + + /* Process/add dynamic v4 gateways. */ + foreach($iflist as $ifname => $friendly ) { + if(! interface_has_gateway($ifname)) + continue; + + if (empty($config['interfaces'][$ifname])) + continue; + + $ifcfg = &$config['interfaces'][$ifname]; + if(!isset($ifcfg['enable'])) + continue; + + if(!empty($ifcfg['ipaddr']) && is_ipaddrv4($ifcfg['ipaddr'])) + continue; + + if (isset($interfaces_v4[$ifname])) + continue; + + $ctype = ""; + switch($ifcfg['ipaddr']) { + case "dhcp": + case "pppoe": + case "pptp": + case "ppp": + $ctype = strtoupper($ifcfg['ipaddr']); + break; + default: + if (substr($ifcfg['if'], 0, 4) == "ovpn") { + // if current iface is an ovpn server endpoint then skip it + if (substr($ifcfg['if'], 4, 1) == 's') + continue 2; + + $ctype = "VPNv4"; + } + break; + } + $ctype = "_". strtoupper($ctype); + + $gateway = array(); + $gateway['dynamic'] = false; + $gateway['ipprotocol'] = "inet"; + $gateway['gateway'] = get_interface_gateway($ifname, $gateway['dynamic']); + $gateway['interface'] = get_real_interface($ifname); + $gateway['friendlyiface'] = $ifname; + $gateway['name'] = "{$friendly}{$ctype}"; + $gateway['attribute'] = "system"; + + if (($gateway['dynamic'] === "default") && ($found_defaultv4 == 0)) { + $gateway['defaultgw'] = true; + $gateway['dynamic'] = true; + $found_defaultv4 = 1; + } + /* Loopback dummy for dynamic interfaces without a IP */ + if (!is_ipaddrv4($gateway['gateway']) && $gateway['dynamic'] == true) + $gateway['gateway'] = "dynamic"; + + /* automatically skip known static and dynamic gateways we have a array entry for */ + foreach($gateways_arr as $gateway_item) { + if ((($ifname == $gateway_item['friendlyiface'] && $friendly == $gateway_item['name'])&& ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) || + ($ifname == $gateway_item['friendlyiface'] && $gateway_item['dynamic'] == true) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) + continue 2; + } + + if (is_ipaddrv4($gateway['gateway'])) + $gateway['monitor'] = $gateway['gateway']; + + $gateway['descr'] = "Interface {$friendly}{$ctype} Gateway"; + $gateways_arr[$gateway['name']] = $gateway; + } + unset($gateway); + + /* Process/add dynamic v6 gateways. */ + foreach($iflist as $ifname => $friendly ) { + /* If the user has disabled IPv6, they probably don't want any IPv6 gateways. */ + if (!isset($config['system']['ipv6allow'])) + break; + + if(! interface_has_gatewayv6($ifname)) + continue; + + if (empty($config['interfaces'][$ifname])) + continue; + + $ifcfg = &$config['interfaces'][$ifname]; + if(!isset($ifcfg['enable'])) + continue; + + if(!empty($ifcfg['ipaddrv6']) && is_ipaddrv6($ifcfg['ipaddrv6'])) + continue; + + if(isset($interfaces_v6[$ifname])) + continue; + + $ctype = ""; + switch($ifcfg['ipaddrv6']) { + case "slaac": + case "dhcp6": + case "6to4": + case "6rd": + $ctype = strtoupper($ifcfg['ipaddrv6']); + break; + default: + $tunnelif = substr($ifcfg['if'], 0, 3); + if (substr($ifcfg['if'], 0, 4) == "ovpn") { + // if current iface is an ovpn server endpoint then skip it + if (substr($ifcfg['if'], 4, 1) == 's') + continue 2; + + $ctype = "VPNv6"; + } else if ($tunnelif == "gif" || $tunnelif == "gre") + $ctype = "TUNNELv6"; + break; + } + $ctype = "_". strtoupper($ctype); + + $gateway = array(); + $gateway['dynamic'] = false; + $gateway['ipprotocol'] = "inet6"; + $gateway['gateway'] = get_interface_gateway_v6($ifname, $gateway['dynamic']); + $gateway['interface'] = get_real_interface($ifname, "inet6"); + switch($ifcfg['ipaddrv6']) { + case "6rd": + case "6to4": + $gateway['dynamic'] = "default"; + break; + } + $gateway['friendlyiface'] = $ifname; + $gateway['name'] = "{$friendly}{$ctype}"; + $gateway['attribute'] = "system"; + + if (($gateway['dynamic'] === "default") && ($found_defaultv6 == 0)) { + $gateway['defaultgw'] = true; + $gateway['dynamic'] = true; + $found_defaultv6 = 1; + } + + /* Loopback dummy for dynamic interfaces without a IP */ + if (!is_ipaddrv6($gateway['gateway']) && $gateway['dynamic'] == true) + $gateway['gateway'] = "dynamic"; + + /* automatically skip known static and dynamic gateways we have a array entry for */ + foreach($gateways_arr as $gateway_item) { + if ((($ifname == $gateway_item['friendlyiface'] && $friendly == $gateway_item['name']) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) || + ($ifname == $gateway_item['friendlyiface'] && $gateway_item['dynamic'] == true) && ($gateway['ipprotocol'] == $gateway_item['ipprotocol'])) + continue 2; + } + + if (is_ipaddrv6($gateway['gateway'])) + $gateway['monitor'] = $gateway['gateway']; + + $gateway['descr'] = "Interface {$friendly}{$ctype} Gateway"; + $gateways_arr[$gateway['name']] = $gateway; + } + unset($gateway); + + /* FIXME: Should this be enabled. + * Some interface like wan might be default but have no info recorded + * the config. */ + /* this is a fallback if all else fails and we want to get packets out @smos */ + if ($found_defaultv4 == 0 || $found_defaultv6 == 0) { + foreach ($gateways_arr as &$gateway) { + if (($gateway['friendlyiface'] == "wan") && ($found_defaultv4 == 0) && (!isset($gateway['ipprotocol']) || ($gateway['ipprotocol'] == "inet"))) { + if (file_exists("{$g['tmp_path']}/{$gateway['interface']}_defaultgw")) { + $gateway['defaultgw'] = true; + $found_defaultv4 = 1; + } + } + if (($gateway['friendlyiface'] == "wan") && ($found_defaultv6 == 0) && ($gateway['ipprotocol'] == "inet6")) { + if (file_exists("{$g['tmp_path']}/{$gateway['interface']}_defaultgwv6")) { + $gateway['defaultgw'] = true; + $found_defaultv6 = 1; + } + } + } + } + + if($localhost === true) { + /* attach localhost for Null routes */ + $gwlo4 = array(); + $gwlo4['name'] = "Null4"; + $gwlo4['interface'] = "lo0"; + $gwlo4['ipprotocol'] = "inet"; + $gwlo4['gateway'] = "127.0.0.1"; + $gwlo6 = array(); + $gwlo6['name'] = "Null6"; + $gwlo6['interface'] = "lo0"; + $gwlo6['ipprotocol'] = "inet6"; + $gwlo6['gateway'] = "::1"; + $gateways_arr['Null4'] = $gwlo4; + $gateways_arr['Null6'] = $gwlo6; + } + return($gateways_arr); +} + +function fixup_default_gateway($ipprotocol, $gateways_status, $gateways_arr) { + global $config, $g; + /* + * NOTE: The code below is meant to replace the default gateway when it goes down. + * This facilitates services running on pfSense itself and are not handled by a PBR to continue working. + */ + $upgw = ""; + $dfltgwdown = false; + $dfltgwfound = false; + foreach ($gateways_arr as $gwname => $gwsttng) { + if (($gwsttng['ipprotocol'] == $ipprotocol) && isset($gwsttng['defaultgw'])) { + $dfltgwfound = true; + $dfltgwname = $gwname; + if (!isset($gwsttng['monitor_disable']) && stristr($gateways_status[$gwname]['status'], "down")) + $dfltgwdown = true; + } + /* Keep a record of the last up gateway */ + /* XXX: Blacklist lan for now since it might cause issues to those who have a gateway set for it */ + if (empty($upgw) && ($gwsttng['ipprotocol'] == $ipprotocol) && (isset($gwsttng['monitor_disable']) || !stristr($gateways_status[$gwname]['status'], "down")) && $gwsttng[$gwname]['friendlyiface'] != "lan") + $upgw = $gwname; + if ($dfltgwdown == true && !empty($upgw)) + break; + } + if ($dfltgwfound == false) { + $gwname = convert_friendly_interface_to_friendly_descr("wan"); + if (!empty($gateways_status[$gwname]) && stristr($gateways_status[$gwname]['status'], "down")) + $dfltgwdown = true; + } + if ($dfltgwdown == true && !empty($upgw)) { + if ($gateways_arr[$upgw]['gateway'] == "dynamic") + $gateways_arr[$upgw]['gateway'] = get_interface_gateway($gateways_arr[$upgw]['friendlyiface']); + if (is_ipaddr($gateways_arr[$upgw]['gateway'])) { + log_error("Default gateway down setting {$upgw} as default!"); + if(is_ipaddrv6($gateways_arr[$upgw]['gateway'])) { + $inetfamily = "-inet6"; + } else { + $inetfamily = "-inet"; + } + mwexec("/sbin/route change {$inetfamily} default {$gateways_arr[$upgw]['gateway']}"); + } + } else { + $defaultgw = trim(exec("/sbin/route -n get -{$ipprotocol} default | /usr/bin/awk '/gateway:/ {print $2}'"), " \n"); + if(is_ipaddrv6($gateways_arr[$dfltgwname]['gateway'])) { + $inetfamily = "-inet6"; + } else { + $inetfamily = "-inet"; + } + if ($defaultgw != $gateways_arr[$dfltgwname]['gateway']) + mwexec("/sbin/route change {$inetfamily} default {$gateways_arr[$dfltgwname]['gateway']}"); + } +} + +/* + * Return an array with all gateway groups with name as key + * All gateway groups will be processed before returning the array. + */ +function return_gateway_groups_array() { + global $config, $g; + + /* fetch the current gateways status */ + $gateways_status = return_gateways_status(true); + $gateways_arr = return_gateways_array(); + $gateway_groups_array = array(); + + if (isset($config['system']['gw_switch_default'])) { + fixup_default_gateway("inet", $gateways_status, $gateways_arr); + fixup_default_gateway("inet6", $gateways_status, $gateways_arr); + } + if (is_array($config['gateways']['gateway_group'])) { + $carplist = get_configured_carp_interface_list(); + foreach ($config['gateways']['gateway_group'] as $group) { + /* create array with group gateways members separated by tier */ + $tiers = array(); + $backupplan = array(); + $gwvip_arr = array(); + foreach ($group['item'] as $item) { + list($gwname, $tier, $vipname) = explode("|", $item); + + if (is_ipaddr($carplist[$vipname])) { + if (!is_array($gwvip_arr[$group['name']])) + $gwvip_arr[$group['name']] = array(); + $gwvip_arr[$group['name']][$gwname] = $vipname; + } + + /* Do it here rather than reiterating again the group in case no member is up. */ + if (!is_array($backupplan[$tier])) + $backupplan[$tier] = array(); + $backupplan[$tier][] = $gwname; + + /* check if the gateway is available before adding it to the array */ + if (is_array($gateways_status[$gwname])) { + $status = $gateways_status[$gwname]; + $gwdown = false; + if (stristr($status['status'], "down")) { + $msg = sprintf(gettext("MONITOR: %s is down, removing from routing group {$group['name']}"), $gwname); + $gwdown = true; + } else if (stristr($status['status'], "loss") && strstr($group['trigger'], "loss")) { + /* packet loss */ + $msg = sprintf(gettext("MONITOR: %s has packet loss, removing from routing group {$group['name']}"), $gwname); + $gwdown = true; + } else if (stristr($status['status'], "delay") && strstr($group['trigger'] , "latency")) { + /* high latency */ + $msg = sprintf(gettext("MONITOR: %s has high latency, removing from routing group {$group['name']}"), $gwname); + $gwdown = true; + } + if ($gwdown == true) { + log_error($msg); + notify_via_growl($msg); + notify_via_smtp($msg); + } else { + /* Online add member */ + if (!is_array($tiers[$tier])) + $tiers[$tier] = array(); + $tiers[$tier][] = $gwname; + } + } else if (isset($gateways_arr[$gwname]['monitor_disable'])) + $tiers[$tier][] = $gwname; + } + $tiers_count = count($tiers); + if ($tiers_count == 0) { + /* Oh dear, we have no members! Engage Plan B */ + if (!$g['booting']) { + $msg = gettext("Gateways status could not be determined, considering all as up/active. (Group: {$group['name']})"); + log_error($msg); + notify_via_growl($msg); + //notify_via_smtp($msg); + } + $tiers = $backupplan; + } + /* sort the tiers array by the tier key */ + ksort($tiers); + + /* we do not really foreach the tiers as we stop after the first tier */ + foreach ($tiers as $tieridx => $tier) { + /* process all gateways in this tier */ + foreach ($tier as $member) { + /* determine interface gateway */ + if (isset($gateways_arr[$member])) { + $gateway = $gateways_arr[$member]; + $int = $gateway['interface']; + $gatewayip = ""; + if(is_ipaddr($gateway['gateway'])) + $gatewayip = $gateway['gateway']; + else if (!empty($int)) + $gatewayip = get_interface_gateway($gateway['friendlyiface']); + + if (!empty($int)) { + $gateway_groups_array[$group['name']]['ipprotocol'] = $gateway['ipprotocol']; + if (is_ipaddr($gatewayip)) { + $groupmember = array(); + $groupmember['int'] = $int; + $groupmember['gwip'] = $gatewayip; + $groupmember['weight'] = isset($gateway['weight']) ? $gateway['weight'] : 1; + if (is_array($gwvip_arr[$group['name']])&& !empty($gwvip_arr[$group['name']][$member])) + $groupmember['vip'] = $gwvip_arr[$group['name']][$member]; + $gateway_groups_array[$group['name']][] = $groupmember; + } + } + } + } + /* we should have the 1st available tier now, exit stage left */ + if (count($gateway_groups_array[$group['name']]) > 0) + break; + else + log_error("GATEWAYS: Group {$group['name']} did not have any gateways up on tier {$tieridx}!"); + } + } + } + + return ($gateway_groups_array); +} + +/* Update DHCP WAN Interface ip address in gateway group item */ +function dhclient_update_gateway_groups_defaultroute($interface = "wan") { + global $config, $g; + foreach($config['gateways']['gateway_item'] as & $gw) { + if($gw['interface'] == $interface) { + $current_gw = get_interface_gateway($interface); + if($gw['gateway'] <> $current_gw) { + $gw['gateway'] = $current_gw; + $changed = true; + } + } + } + if($changed && $current_gw) + write_config(sprintf(gettext('Updating gateway group gateway for %1$s - new gateway is %2$s'), $interfac, $current_gw)); +} + +function lookup_gateway_ip_by_name($name) { + + $gateways_arr = return_gateways_array(false, true); + foreach ($gateways_arr as $gname => $gw) { + if ($gw['name'] === $name || $gname === $name) + return $gw['gateway']; + } + + return false; +} + +function lookup_gateway_monitor_ip_by_name($name) { + + $gateways_arr = return_gateways_array(false, true); + if (!empty($gateways_arr[$name])) { + $gateway = $gateways_arr[$name]; + if(!is_ipaddr($gateway['monitor'])) + return $gateway['gateway']; + + return $gateway['monitor']; + } + + return (false); +} + +function lookup_gateway_interface_by_name($name) { + + $gateways_arr = return_gateways_array(false, true); + if (!empty($gateways_arr[$name])) { + $interfacegw = $gateways_arr[$name]['friendlyiface']; + return ($interfacegw); + } + + return (false); +} + +function get_interface_gateway($interface, &$dynamic = false) { + global $config, $g; + + $gw = NULL; + + $gwcfg = $config['interfaces'][$interface]; + if (!empty($gwcfg['gateway']) && is_array($config['gateways']['gateway_item'])) { + foreach($config['gateways']['gateway_item'] as $gateway) { + if(($gateway['name'] == $gwcfg['gateway']) && (is_ipaddrv4($gateway['gateway']))) { + $gw = $gateway['gateway']; + break; + } + } + } + + // for dynamic interfaces we handle them through the $interface_router file. + if (!is_ipaddrv4($gw) && !is_ipaddrv4($gwcfg['ipaddr'])) { + $realif = get_real_interface($interface); + if (file_exists("{$g['tmp_path']}/{$realif}_router")) { + $gw = trim(file_get_contents("{$g['tmp_path']}/{$realif}_router"), " \n"); + $dynamic = true; + } + if (file_exists("{$g['tmp_path']}/{$realif}_defaultgw")) + $dynamic = "default"; + + } + + /* return gateway */ + return ($gw); +} + +function get_interface_gateway_v6($interface, &$dynamic = false) { + global $config, $g; + + $gw = NULL; + $gwcfg = $config['interfaces'][$interface]; + if (!empty($gwcfg['gatewayv6']) && is_array($config['gateways']['gateway_item'])) { + foreach($config['gateways']['gateway_item'] as $gateway) { + if(($gateway['name'] == $gwcfg['gatewayv6']) && (is_ipaddrv6($gateway['gateway']))) { + $gw = $gateway['gateway']; + break; + } + } + } + + // for dynamic interfaces we handle them through the $interface_router file. + if (!is_ipaddrv6($gw) && !is_ipaddrv6($gwcfg['ipaddrv6'])) { + $realif = get_real_interface($interface); + if (file_exists("{$g['tmp_path']}/{$realif}_routerv6")) { + $gw = trim(file_get_contents("{$g['tmp_path']}/{$realif}_routerv6"), " \n"); + $dynamic = true; + } + if (file_exists("{$g['tmp_path']}/{$realif}_defaultgwv6")) + $dynamic = "default"; + + } + /* return gateway */ + return ($gw); +} + +/* Check a IP address against a gateway IP or name + * to verify it's address family */ +function validate_address_family($ipaddr, $gwname) { + $v4ip = false; + $v6ip = false; + $v4gw = false; + $v6gw = false; + + if(is_ipaddrv4($ipaddr)) + $v4ip = true; + if(is_ipaddrv6($ipaddr)) + $v6ip = true; + if(is_ipaddrv4($gwname)) + $v4gw = true; + if(is_ipaddrv6($gwname)) + $v6gw = true; + + if($v4ip && $v4gw) + return true; + if($v6ip && $v6gw) + return true; + + /* still no match, carry on, lookup gateways */ + if(is_ipaddrv4(lookup_gateway_ip_by_name($gwname))) + $v4gw = true; + if(is_ipaddrv6(lookup_gateway_ip_by_name($gwname))) + $v6gw = true; + + $gw_array = return_gateways_array(); + if(is_array($gw_array[$gwname])) { + switch($gw_array[$gwname]['ipprotocol']) { + case "inet": + $v4gw = true; + break; + case "inet6": + $v6gw = true; + break; + } + } + + if($v4ip && $v4gw) + return true; + if($v6ip && $v6gw) + return true; + + return false; +} + +/* check if a interface is part of a gateway group */ +function interface_gateway_group_member($interface) { + global $config; + + if (is_array($config['gateways']['gateway_group'])) + $groups = $config['gateways']['gateway_group']; + else + return false; + + $gateways_arr = return_gateways_array(false, true); + foreach($groups as $group) { + if(is_array($group['item'])) { + foreach($group['item'] as $item) { + $elements = explode("|", $item); + $gwname = $elements[0]; + if ($interface == $gateways_arr[$gwname]['interface']) { + unset($gateways_arr); + return true; + } + } + } + } + unset($gateways_arr); + + return false; +} + +function gateway_is_gwgroup_member($name) { + global $config; + + if (is_array($config['gateways']['gateway_group'])) + $groups = $config['gateways']['gateway_group']; + else + return false; + + $members = array(); + foreach($groups as $group) { + if (is_array($group['item'])) { + foreach($group['item'] as $item) { + $elements = explode("|", $item); + $gwname = $elements[0]; + if ($name == $elements[0]) + $members[] = $group['name']; + } + } + } + + return $members; +} +?> diff --git a/usr/etc/inc/interfaces.inc b/usr/etc/inc/interfaces.inc new file mode 100644 index 000000000..488fb2015 --- /dev/null +++ b/usr/etc/inc/interfaces.inc @@ -0,0 +1,5332 @@ +. + 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 notices, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notices, 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. + + pfSense_BUILDER_BINARIES: /sbin/dhclient /bin/sh /usr/bin/grep /usr/bin/xargs /usr/bin/awk /usr/local/sbin/choparp + pfSense_BUILDER_BINARIES: /sbin/ifconfig /sbin/route /usr/sbin/ngctl /usr/sbin/arp /bin/kill /usr/local/sbin/mpd5 + pfSense_BUILDER_BINARIES: /usr/local/sbin/dhcp6c + pfSense_MODULE: interfaces + +*/ + +/* include all configuration functions */ +require_once("globals.inc"); +require_once("util.inc"); +require_once("gwlb.inc"); + +function interfaces_bring_up($interface) { + if(!$interface) { + log_error(gettext("interfaces_bring_up() was called but no variable defined.")); + log_error( "Backtrace: " . debug_backtrace() ); + return; + } + pfSense_interface_flags($interface, IFF_UP); +} + +/* + * Return the interface array + */ +function get_interface_arr($flush = false) { + global $interface_arr_cache; + + /* If the cache doesn't exist, build it */ + if (!isset($interface_arr_cache) or $flush) + $interface_arr_cache = pfSense_interface_listget(); + + return $interface_arr_cache; +} + +/* + * does_interface_exist($interface): return true or false if a interface is + * detected. + */ +function does_interface_exist($interface, $flush = true) { + global $config; + + if(!$interface) + return false; + + $ints = get_interface_arr($flush); + if (in_array($interface, $ints)) + return true; + else + return false; +} + +/* + * does_vip_exist($vip): return true or false if a vip is + * configured. + */ +function does_vip_exist($vip) { + global $config; + + if(!$vip) + return false; + + + switch ($vip['mode']) { + case "carp": + case "ipalias": + /* XXX: Make proper checks? */ + $realif = get_real_interface($vip['interface']); + if (!does_interface_exist($realif)) { + return false; + } + break; + case "proxyarp": + /* XXX: Implement this */ + default: + return false; + } + + $ifacedata = pfSense_getall_interface_addresses($realif); + foreach ($ifacedata as $vipips) { + if ($vipips == "{$vip['subnet']}/{$vip['subnet_bits']}") + return true; + } + + return false; +} + +function interface_netgraph_needed($interface = "wan") { + global $config; + + $found = false; + if (!empty($config['pptpd']) && + $config['pptpd']['mode'] == "server") + $found = true; + if ($found == false && !empty($config['l2tp']) && + $config['l2tp']['mode'] == "server") + $found = true; + if ($found == false && is_array($config['pppoes']['pppoe'])) { + foreach ($config['pppoes']['pppoe'] as $pppoe) { + if ($pppoe['mode'] != "server") + continue; + if ($pppoe['interface'] == $interface) + $found = true; + break; + } + } + if ($found == false) { + if (!empty($config['interfaces'][$interface])) { + switch ($config['interfaces'][$interface]['ipaddr']) { + case "ppp": + case "pppoe": + case "l2tp": + case "pptp": + $found = true; + break; + default: + $found = false; + break; + } + } + } + if ($found == false) { + $realif = get_real_interface($interface); + if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($config['ppps']['ppp'] as $pppid => $ppp) { + +/* This if block doesn't do anything. It can be deleted. +PPP interfaces are found above in the previous if ($found == false) block. +This block of code is only entered for OPTx interfaces that are configured for PPPoE modem access, so $realif != $ppp['if'] + + if ($realif == $ppp['if']) { + $found = true; + break; + } +*/ + $ports = explode(',',$ppp['ports']); + foreach($ports as $pid => $port){ + $port = get_real_interface($port); + if ($realif == $port) { + $found = true; + break; + } + /* Find the parent interfaces of the vlans in the MLPPP configs + * there should be only one element in the array here + * -- this could be better . . . */ + $parent_if = get_parent_interface($port); + if ($realif == $parent_if[0]) { + $found = true; + break; + } + } + } + } + } + + if ($found == false) { + $realif = get_real_interface($interface); + pfSense_ngctl_detach("{$realif}:", $realif); + } + /* NOTE: We make sure for this on interface_ppps_configure() + * no need to do it here agan. + * else + * pfSense_ngctl_attach(".", $realif); + */ +} + +function interfaces_loopback_configure() { + global $g; + + if ($g['platform'] == 'jail') + return; + if($g['booting']) + echo gettext("Configuring loopback interface..."); + pfSense_interface_setaddress("lo0", "127.0.0.1"); + interfaces_bring_up("lo0"); + if($g['booting']) + echo gettext("done.") . "\n"; + return 0; +} + +function interfaces_vlan_configure($realif = "") { + global $config, $g; + if($g['booting']) + echo gettext("Configuring VLAN interfaces..."); + if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { + foreach ($config['vlans']['vlan'] as $vlan) { + if (empty($vlan['vlanif'])) + $vlan['vlanif'] = "{$vlan['if']}_vlan{$vlan['tag']}"; + if (!empty($realif) && $realif != $vlan['vlanif']) + continue; + + /* XXX: Maybe we should report any errors?! */ + interface_vlan_configure($vlan); + } + } + if($g['booting']) + echo gettext("done.") . "\n"; +} + +function interface_vlan_configure(&$vlan) { + global $config, $g; + + if (!is_array($vlan)) { + log_error(gettext("VLAN: called with wrong options. Problems with config!")); + return; + } + $if = $vlan['if']; + $vlanif = empty($vlan['vlanif']) ? "{$if}_vlan{$vlan['tag']}" : $vlan['vlanif']; + $tag = $vlan['tag']; + + if (empty($if)) { + log_error(gettext("interface_vlan_configure called with if undefined.")); + return; + } + + /* make sure the parent interface is up */ + interfaces_bring_up($if); + /* Since we are going to add vlan(4) try to enable all that hardware supports. */ + pfSense_interface_capabilities($if, IFCAP_VLAN_HWTAGGING|IFCAP_VLAN_MTU|IFCAP_VLAN_HWFILTER); + + if (!empty($vlanif) && does_interface_exist($vlanif)) { + interface_bring_down($vlanif, true); + } else { + $tmpvlanif = pfSense_interface_create("vlan"); + pfSense_interface_rename($tmpvlanif, $vlanif); + pfSense_ngctl_name("{$tmpvlanif}:", $vlanif); + } + + pfSense_vlan_create($vlanif, $if, $tag); + + interfaces_bring_up($vlanif); + + /* invalidate interface cache */ + get_interface_arr(true); + + /* XXX: ermal -- for now leave it here at the moment it does not hurt. */ + interfaces_bring_up($if); + + return $vlanif; +} + +function interface_qinq_configure(&$vlan, $fd = NULL) { + global $config, $g; + + if (!is_array($vlan)) { + log_error(sprintf(gettext("QinQ compat VLAN: called with wrong options. Problems with config!%s"), "\n")); + return; + } + + $qinqif = $vlan['if']; + $tag = $vlan['tag']; + if(empty($qinqif)) { + log_error(sprintf(gettext("interface_qinq_configure called with if undefined.%s"), "\n")); + return; + } + + if(!does_interface_exist($qinqif)) { + log_error(sprintf(gettext("interface_qinq_configure called with invalid if.%s"), "\n")); + return; + } + + $vlanif = interface_vlan_configure($vlan); + + if ($fd == NULL) { + $exec = true; + $fd = fopen("{$g['tmp_path']}/netgraphcmd", "w"); + } else + $exec = false; + /* make sure the parent is converted to ng_vlan(4) and is up */ + interfaces_bring_up($qinqif); + + pfSense_ngctl_attach(".", $qinqif); + if (!empty($vlanif) && does_interface_exist($vlanif)) { + fwrite($fd, "shutdown {$qinqif}qinq:\n"); + exec("/usr/sbin/ngctl msg {$qinqif}qinq: gettable", $result); + if (empty($result)) { + fwrite($fd, "mkpeer {$qinqif}: vlan lower downstream\n"); + fwrite($fd, "name {$qinqif}:lower {$vlanif}qinq\n"); + fwrite($fd, "connect {$qinqif}: {$vlanif}qinq: upper nomatch\n"); + } + } else { + fwrite($fd, "mkpeer {$qinqif}: vlan lower downstream\n"); + fwrite($fd, "name {$qinqif}:lower {$vlanif}qinq\n"); + fwrite($fd, "connect {$qinqif}: {$vlanif}qinq: upper nomatch\n"); + } + + /* invalidate interface cache */ + get_interface_arr(true); + + if (!stristr($qinqif, "_vlan")) + mwexec("/sbin/ifconfig {$qinqif} promisc\n"); + + $macaddr = get_interface_mac($qinqif); + if (!empty($vlan['members'])) { + $members = explode(" ", $vlan['members']); + foreach ($members as $qtag) { + $qinq = array(); + $qinq['tag'] = $qtag; + $qinq['if'] = $vlanif; + interface_qinq2_configure($qinq, $fd, $macaddr); + } + } + if ($exec == true) { + fclose($fd); + mwexec("/usr/sbin/ngctl -f {$g['tmp_path']}/netgraphcmd"); + } + + interfaces_bring_up($qinqif); + if (!empty($vlan['members'])) { + $members = explode(" ", $vlan['members']); + foreach ($members as $qif) + interfaces_bring_up("{$vlanif}_{$qif}"); + } + + return $vlanif; +} + +function interfaces_qinq_configure() { + global $config, $g; + if($g['booting']) + echo gettext("Configuring QinQ interfaces..."); + if (is_array($config['qinqs']['qinqentry']) && count($config['qinqs']['qinqentry'])) { + foreach ($config['qinqs']['qinqentry'] as $qinq) { + /* XXX: Maybe we should report any errors?! */ + interface_qinq_configure($qinq); + } + } + if($g['booting']) + echo gettext( "done.") . "\n"; +} + +function interface_qinq2_configure(&$qinq, $fd, $macaddr) { + global $config, $g; + + if (!is_array($qinq)) { + log_error(sprintf(gettext("QinQ compat VLAN: called with wrong options. Problems with config!%s"), "\n")); + return; + } + + $if = $qinq['if']; + $tag = $qinq['tag']; + $vlanif = "{$if}_{$tag}"; + if(empty($if)) { + log_error(sprintf(gettext("interface_qinq2_configure called with if undefined.%s"), "\n")); + return; + } + + fwrite($fd, "shutdown {$if}h{$tag}:\n"); + fwrite($fd, "mkpeer {$if}qinq: eiface {$if}{$tag} ether\n"); + fwrite($fd, "name {$if}qinq:{$if}{$tag} {$if}h{$tag}\n"); + fwrite($fd, "msg {$if}qinq: addfilter { vlan={$tag} hook=\"{$if}{$tag}\" }\n"); + fwrite($fd, "msg {$if}h{$tag}: setifname \"{$vlanif}\"\n"); + fwrite($fd, "msg {$if}h{$tag}: set {$macaddr}\n"); + + /* invalidate interface cache */ + get_interface_arr(true); + + return $vlanif; +} + +function interfaces_create_wireless_clones() { + global $config, $g; + + if($g['booting']) + echo gettext("Creating wireless clone interfaces..."); + + $iflist = get_configured_interface_list(); + + foreach ($iflist as $if) { + $realif = $config['interfaces'][$if]['if']; + if (is_interface_wireless($realif)) + interface_wireless_clone(interface_get_wireless_clone($realif), $config['interfaces'][$if]); + } + + if (isset($config['wireless']['clone']) && is_array($config['wireless']['clone']) && count($config['wireless']['clone'])) { + foreach ($config['wireless']['clone'] as $clone) { + if(empty($clone['cloneif'])) + continue; + if(does_interface_exist($clone['cloneif'])) + continue; + /* XXX: Maybe we should report any errors?! */ + interface_wireless_clone($clone['cloneif'], $clone); + } + } + if($g['booting']) + echo gettext("done.") . "\n"; + +} + +function interfaces_bridge_configure($checkmember = 0, $realif = "") { + global $config; + + $i = 0; + if (is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) { + foreach ($config['bridges']['bridged'] as $bridge) { + if (empty($bridge['bridgeif'])) + $bridge['bridgeif'] = "bridge{$i}"; + if (!empty($realif) && $realif != $bridge['bridgeif']) + continue; + + if ($checkmember == 1) { + if (strstr($bridge['if'], "_vip")) + continue; + $members = explode(',', $bridge['members']); + foreach ($members as $member) { + if (!empty($config['interfaces'][$bridge['if']]) && $config['interfaces'][$bridge['if']]['ipaddrv6'] == "track6") + continue 2; + } + } + else if ($checkmember == 2) { + if (strstr($bridge['if'], "_vip")) + continue; + $members = explode(',', $bridge['members']); + foreach ($members as $member) { + if (empty($config['interfaces'][$bridge['if']]) || $config['interfaces'][$bridge['if']]['ipaddrv6'] != "track6") + continue 2; + } + } + /* XXX: Maybe we should report any errors?! */ + interface_bridge_configure($bridge, $checkmember); + $i++; + } + } +} + +function interface_bridge_configure(&$bridge, $checkmember = 0) { + global $config, $g; + + if (!is_array($bridge)) + return; + + if (empty($bridge['members'])) { + log_error(sprintf(gettext("No members found on %s"), $bridge['bridgeif'])); + return; + } + + $members = explode(',', $bridge['members']); + if (!count($members)) + return; + + /* Calculate smaller mtu and enforce it */ + $smallermtu = 0; + $commonrx = true; + $commontx = true; + $foundgif = false; + foreach ($members as $member) { + $realif = get_real_interface($member); + $opts = pfSense_get_interface_addresses($realif); + $mtu = $opts['mtu']; + if (substr($realif, 0, 3) == "gif") { + $foundgif = true; + if ($checkmember == 1) + return; + if ($mtu <= 1500) + continue; + } + if (!isset($opts['caps']['txcsum'])) + $commontx = false; + if (!isset($opts['caps']['rxcsum'])) + $commonrx = false; + if (!isset($opts['caps']['tso4'])) + $commontso4 = false; + if (!isset($opts['caps']['tso6'])) + $commontso6 = false; + if (!isset($opts['caps']['lro'])) + $commonlro = false; + if ($smallermtu == 0 && !empty($mtu)) + $smallermtu = $mtu; + else if (!empty($mtu) && $mtu < $smallermtu) + $smallermtu = $mtu; + } + if ($foundgif == false && $checkmember == 2) + return; + + /* Just in case anything is not working well */ + if ($smallermtu == 0) + $smallermtu = 1500; + + $flags_on = 0; + $flags_off = 0; + if (isset($config['system']['disablechecksumoffloading']) || ($commonrx === false)) + $flags_off |= IFCAP_RXCSUM; + else + $flags_on |= IFCAP_RXCSUM; + if (isset($config['system']['disablechecksumoffloading']) || ($commontx === false)) + $flags_off |= IFCAP_TXCSUM; + else + $flags_on |= IFCAP_TXCSUM; + if (isset($config['system']['disablesegmentationoffloading']) || ($commontso4 === false)) + $flags_off |= IFCAP_TSO4; + else + $flags_on |= IFCAP_TSO4; + if (isset($config['system']['disablesegmentationoffloading']) || ($commontso6 === false)) + $flags_off |= IFCAP_TSO6; + else + $flags_on |= IFCAP_TSO6; + if (isset($config['system']['disablelargereceiveoffloading']) || ($commonlro === false)) + $flags_off |= IFCAP_LRO; + else + $flags_on |= IFCAP_LRO; + + if ($g['booting'] || !empty($bridge['bridgeif'])) { + pfSense_interface_destroy($bridge['bridgeif']); + pfSense_interface_create($bridge['bridgeif']); + $bridgeif = escapeshellarg($bridge['bridgeif']); + } else { + $bridgeif = pfSense_interface_create("bridge"); + $bridge['bridgeif'] = $bridgeif; + } + + $checklist = get_configured_interface_list(); + + /* Add interfaces to bridge */ + foreach ($members as $member) { + if (empty($checklist[$member])) + continue; + $realif = get_real_interface($member); + if (!$realif) { + log_error(gettext("realif not defined in interfaces bridge - up")); + continue; + } + /* make sure the parent interface is up */ + pfSense_interface_mtu($realif, $smallermtu); + pfSense_interface_capabilities($realif, -$flags_off); + pfSense_interface_capabilities($realif, $flags_on); + interfaces_bring_up($realif); + pfSense_bridge_add_member($bridge['bridgeif'], $realif); + } + + if (isset($bridge['enablestp'])) { + /* Choose spanning tree proto */ + mwexec("/sbin/ifconfig {$bridgeif} proto " . escapeshellarg($bridge['proto'])); + + if (!empty($bridge['stp'])) { + $stpifs = explode(',', $bridge['stp']); + foreach ($stpifs as $stpif) { + $realif = get_real_interface($stpif); + mwexec("/sbin/ifconfig {$bridgeif} stp {$realif}"); + } + } + if (!empty($bridge['maxage'])) + mwexec("/sbin/ifconfig {$bridgeif} maxage " . escapeshellarg($bridge['maxage'])); + if (!empty($bridge['fwdelay'])) + mwexec("/sbin/ifconfig {$bridgeif} fwddelay " . escapeshellarg($bridge['fwdelay'])); + if (!empty($bridge['hellotime'])) + mwexec("/sbin/ifconfig {$bridgeif} hellotime " . escapeshellarg($bridge['hellotime'])); + if (!empty($bridge['priority'])) + mwexec("/sbin/ifconfig {$bridgeif} priority " . escapeshellarg($bridge['priority'])); + if (!empty($bridge['holdcnt'])) + mwexec("/sbin/ifconfig {$bridgeif} holdcnt " . escapeshellarg($bridge['holdcnt'])); + if (!empty($bridge['ifpriority'])) { + $pconfig = explode(",", $bridge['ifpriority']); + $ifpriority = array(); + foreach ($pconfig as $cfg) { + $embcfg = explode_assoc(":", $cfg); + foreach ($embcfg as $key => $value) + $ifpriority[$key] = $value; + } + foreach ($ifpriority as $key => $value) { + $realif = get_real_interface($key); + mwexec("/sbin/ifconfig ${bridgeif} ifpriority {$realif} " . escapeshellarg($value)); + } + } + if (!empty($bridge['ifpathcost'])) { + $pconfig = explode(",", $bridge['ifpathcost']); + $ifpathcost = array(); + foreach ($pconfig as $cfg) { + $embcfg = explode_assoc(":", $cfg); + foreach ($embcfg as $key => $value) + $ifpathcost[$key] = $value; + } + foreach ($ifpathcost as $key => $value) { + $realif = get_real_interface($key); + mwexec("/sbin/ifconfig ${bridgeif} ifpathcost {$realif} " . escapeshellarg($value)); + } + } + } + + if ($bridge['maxaddr'] <> "") + mwexec("/sbin/ifconfig {$bridgeif} maxaddr " . escapeshellarg($bridge['maxaddr'])); + if ($bridge['timeout'] <> "") + mwexec("/sbin/ifconfig {$bridgeif} timeout " . escapeshellarg($bridge['timeout'])); + if ($bridge['span'] <> "") { + $realif = get_real_interface($bridge['span']); + mwexec("/sbin/ifconfig {$bridgeif} span {$realif}"); + } + if (!empty($bridge['edge'])) { + $edgeifs = explode(',', $bridge['edge']); + foreach ($edgeifs as $edgeif) { + $realif = get_real_interface($edgeif); + mwexec("/sbin/ifconfig {$bridgeif} edge {$realif}"); + } + } + if (!empty($bridge['autoedge'])) { + $edgeifs = explode(',', $bridge['autoedge']); + foreach ($edgeifs as $edgeif) { + $realif = get_real_interface($edgeif); + mwexec("/sbin/ifconfig {$bridgeif} -autoedge {$realif}"); + } + } + if (!empty($bridge['ptp'])) { + $ptpifs = explode(',', $bridge['ptp']); + foreach ($ptpifs as $ptpif) { + $realif = get_real_interface($ptpif); + mwexec("/sbin/ifconfig {$bridgeif} ptp {$realif}"); + } + } + if (!empty($bridge['autoptp'])) { + $ptpifs = explode(',', $bridge['autoptp']); + foreach ($ptpifs as $ptpif) { + $realif = get_real_interface($ptpif); + mwexec("/sbin/ifconfig {$bridgeif} -autoptp {$realif}"); + } + } + if (!empty($bridge['static'])) { + $stickyifs = explode(',', $bridge['static']); + foreach ($stickyifs as $stickyif) { + $realif = get_real_interface($stickyif); + mwexec("/sbin/ifconfig {$bridgeif} sticky {$realif}"); + } + } + if (!empty($bridge['private'])) { + $privateifs = explode(',', $bridge['private']); + foreach ($privateifs as $privateif) { + $realif = get_real_interface($privateif); + mwexec("/sbin/ifconfig {$bridgeif} private {$realif}"); + } + } + + if ($bridge['bridgeif']) + interfaces_bring_up($bridge['bridgeif']); + else + log_error(gettext("bridgeif not defined -- could not bring interface up")); +} + +function interface_bridge_add_member($bridgeif, $interface) { + + if (!does_interface_exist($bridgeif) || !does_interface_exist($interface)) + return; + + $mtu = get_interface_mtu($bridgeif); + $mtum = get_interface_mtu($interface); + + if ($mtu != $mtum && !(substr($interface, 0, 3) == "gif" && $mtu <= 1500)) + pfSense_interface_mtu($interface, $mtu); + + $options = pfSense_get_interface_addresses($bridgeif); + $flags_on = 0; + $flags_off = 0; + if (isset($options['encaps']['txcsum'])) + $flags_on |= IFCAP_TXCSUM; + else + $flags_off |= IFCAP_TXCSUM; + if (isset($options['encaps']['rxcsum'])) + $flags_on |= IFCAP_RXCSUM; + else + $flags_off |= IFCAP_RXCSUM; + if (isset($options['encaps']['tso4'])) + $flags_on |= IFCAP_TSO4; + else + $flags_off |= IFCAP_TSO4; + if (isset($options['encaps']['tso6'])) + $flags_on |= IFCAP_TSO6; + else + $flags_off |= IFCAP_TSO6; + if (isset($options['encaps']['lro'])) + $flags_on |= IFCAP_LRO; + else + $flags_off |= IFCAP_LRO; + + pfSense_interface_capabilities($interface, -$flags_off); + pfSense_interface_capabilities($interface, $flags_on); + + interfaces_bring_up($interface); + pfSense_bridge_add_member($bridgeif, $interface); +} + +function interfaces_lagg_configure($realif = "") { + global $config, $g; + if($g['booting']) + echo gettext("Configuring LAGG interfaces..."); + $i = 0; + if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) { + foreach ($config['laggs']['lagg'] as $lagg) { + if(empty($lagg['laggif'])) + $lagg['laggif'] = "lagg{$i}"; + if (!empty($realif) && $realif != $lagg['laggif']) + continue; + /* XXX: Maybe we should report any errors?! */ + interface_lagg_configure($lagg); + $i++; + } + } + if($g['booting']) + echo gettext("done.") . "\n"; +} + +function interface_lagg_configure(&$lagg) { + global $config, $g; + + if (!is_array($lagg)) + return -1; + + $members = explode(',', $lagg['members']); + if (!count($members)) + return -1; + + if ($g['booting'] || !(empty($lagg['laggif']))) { + pfSense_interface_destroy($lagg['laggif']); + pfSense_interface_create($lagg['laggif']); + $laggif = $lagg['laggif']; + } else + $laggif = pfSense_interface_create("lagg"); + + /* Calculate smaller mtu and enforce it */ + $smallermtu = 0; + foreach ($members as $member) { + $opts = pfSense_get_interface_addresses($member); + $mtu = $opts['mtu']; + if (!isset($opts['caps']['txcsum'])) + $commontx = false; + if (!isset($opts['caps']['rxcsum'])) + $commonrx = false; + if (!isset($opts['caps']['tso4'])) + $commontso4 = false; + if (!isset($opts['caps']['tso6'])) + $commontso6 = false; + if (!isset($opts['caps']['lro'])) + $commonlro = false; + if ($smallermtu == 0 && !empty($mtu)) + $smallermtu = $mtu; + else if (!empty($mtu) && $mtu < $smallermtu) + $smallermtu = $mtu; + } + + /* Just in case anything is not working well */ + if ($smallermtu == 0) + $smallermtu = 1500; + + $flags_on = 0; + $flags_off = 0; + if (isset($config['system']['disablechecksumoffloading']) || ($commonrx === false)) + $flags_off |= IFCAP_RXCSUM; + else + $flags_on |= IFCAP_RXCSUM; + if (isset($config['system']['disablechecksumoffloading']) || ($commontx === false)) + $flags_off |= IFCAP_TXCSUM; + else + $flags_on |= IFCAP_TXCSUM; + if (isset($config['system']['disablesegmentationoffloading']) || ($commontso4 === false)) + $flags_off |= IFCAP_TSO4; + else + $flags_on |= IFCAP_TSO4; + if (isset($config['system']['disablesegmentationoffloading']) || ($commontso6 === false)) + $flags_off |= IFCAP_TSO6; + else + $flags_on |= IFCAP_TSO6; + if (isset($config['system']['disablelargereceiveoffloading']) || ($commonlro === false)) + $flags_off |= IFCAP_LRO; + else + $flags_on |= IFCAP_LRO; + + $checklist = get_interface_list(); + + foreach ($members as $member) { + if (!array_key_exists($member, $checklist)) + continue; + /* make sure the parent interface is up */ + pfSense_interface_mtu($member, $smallermtu); + pfSense_interface_capabilities($member, -$flags_off); + pfSense_interface_capabilities($member, $flags_on); + interfaces_bring_up($member); + mwexec("/sbin/ifconfig {$laggif} laggport {$member}"); + } + + mwexec("/sbin/ifconfig {$laggif} laggproto " . escapeshellarg($lagg['proto'])); + + interfaces_bring_up($laggif); + + return $laggif; +} + +function interfaces_gre_configure($checkparent = 0, $realif = "") { + global $config; + + if (is_array($config['gres']['gre']) && count($config['gres']['gre'])) { + foreach ($config['gres']['gre'] as $i => $gre) { + if (empty($gre['greif'])) + $gre['greif'] = "gre{$i}"; + if (!empty($realif) && $realif != $gre['greif']) + continue; + + if ($checkparent == 1) { + if (strstr($gre['if'], "_vip")) + continue; + if (!empty($config['interfaces'][$gre['if']]) && $config['interfaces'][$gre['if']]['ipaddrv6'] == "track6") + continue; + } + else if ($checkparent == 2) { + if (strstr($gre['if'], "_vip")) + continue; + if (empty($config['interfaces'][$gre['if']]) || $config['interfaces'][$gre['if']]['ipaddrv6'] != "track6") + continue; + } + /* XXX: Maybe we should report any errors?! */ + interface_gre_configure($gre); + } + } +} + +/* NOTE: $grekey is not used but useful for passing this function to array_walk. */ +function interface_gre_configure(&$gre, $grekey = "") { + global $config, $g; + + if (!is_array($gre)) + return -1; + + $realif = get_real_interface($gre['if']); + $realifip = get_interface_ip($gre['if']); + + /* make sure the parent interface is up */ + interfaces_bring_up($realif); + + if ($g['booting'] || !(empty($gre['greif']))) { + pfSense_interface_destroy($gre['greif']); + pfSense_interface_create($gre['greif']); + $greif = $gre['greif']; + } else + $greif = pfSense_interface_create("gre"); + + /* Do not change the order here for more see gre(4) NOTES section. */ + mwexec("/sbin/ifconfig {$greif} tunnel {$realifip} " . escapeshellarg($gre['remote-addr'])); + if((is_ipaddrv6($gre['tunnel-local-addr'])) || (is_ipaddrv6($gre['tunnel-remote-addr']))) { + /* XXX: The prefixlen argument for tunnels of ipv6 is useless since it needs to be 128 as enforced by kernel */ + //mwexec("/sbin/ifconfig {$greif} inet6 " . escapeshellarg($gre['tunnel-local-addr']) . " " . escapeshellarg($gre['tunnel-remote-addr']) . " prefixlen /" . escapeshellarg($gre['tunnel-remote-net'])); + mwexec("/sbin/ifconfig {$greif} inet6 " . escapeshellarg($gre['tunnel-local-addr']) . " " . escapeshellarg($gre['tunnel-remote-addr']) . " prefixlen 128"); + } else { + mwexec("/sbin/ifconfig {$greif} " . escapeshellarg($gre['tunnel-local-addr']) . " " . escapeshellarg($gre['tunnel-remote-addr']) . " netmask " . gen_subnet_mask($gre['tunnel-remote-net'])); + } + if (isset($gre['link0'])) + pfSense_interface_flags($greif, IFF_LINK0); + if (isset($gre['link1'])) + pfSense_interface_flags($greif, IFF_LINK1); + if (isset($gre['link2'])) + pfSense_interface_flags($greif, IFF_LINK2); + + if($greif) + interfaces_bring_up($greif); + else + log_error(gettext("Could not bring greif up -- variable not defined.")); + + if (isset($gre['link1']) && $gre['link1']) + mwexec("/sbin/route add " . escapeshellarg($gre['tunnel-remote-addr']) . "/" . escapeshellarg($gre['tunnel-remote-net']) . " " . escapeshellarg($gre['tunnel-local-addr'])); + if(is_ipaddrv4($gre['tunnel-remote-addr'])) + file_put_contents("{$g['tmp_path']}/{$greif}_router", $gre['tunnel-remote-addr']); + if(is_ipaddrv6($gre['tunnel-remote-addr'])) + file_put_contents("{$g['tmp_path']}/{$greif}_routerv6", $gre['tunnel-remote-addr']); + + interfaces_bring_up($greif); + + return $greif; +} + +function interfaces_gif_configure($checkparent = 0, $realif = "") { + global $config; + + if (is_array($config['gifs']['gif']) && count($config['gifs']['gif'])) { + foreach ($config['gifs']['gif'] as $i => $gif) { + if (empty($gif['gifif'])) + $gre['gifif'] = "gif{$i}"; + if (!empty($realif) && $realif != $gif['gifif']) + continue; + + if ($checkparent == 1) { + if (strstr($gif['if'], "_vip")) + continue; + if (!empty($config['interfaces'][$gif['if']]) && $config['interfaces'][$gif['if']]['ipaddrv6'] == "track6") + continue; + } + else if ($checkparent == 2) { + if (strstr($gif['if'], "_vip")) + continue; + if (empty($config['interfaces'][$gif['if']]) || $config['interfaces'][$gif['if']]['ipaddrv6'] != "track6") + continue; + } + /* XXX: Maybe we should report any errors?! */ + interface_gif_configure($gif); + } + } +} + +/* NOTE: $gifkey is not used but useful for passing this function to array_walk. */ +function interface_gif_configure(&$gif, $gifkey = "") { + global $config, $g; + + if (!is_array($gif)) + return -1; + + $realif = get_real_interface($gif['if']); + $ipaddr = $gif['ipaddr']; + + if (is_ipaddrv4($gif['remote-addr'])) { + if (is_ipaddrv4($ipaddr)) + $realifip = $ipaddr; + else + $realifip = get_interface_ip($gif['if']); + $realifgw = get_interface_gateway($gif['if']); + } else if (is_ipaddrv6($gif['remote-addr'])) { + if (is_ipaddrv6($ipaddr)) + $realifip = $ipaddr; + else + $realifip = get_interface_ipv6($gif['if']); + $realifgw = get_interface_gateway_v6($gif['if']); + } + /* make sure the parent interface is up */ + if($realif) + interfaces_bring_up($realif); + else + log_error(gettext("could not bring realif up -- variable not defined -- interface_gif_configure()")); + + if ($g['booting'] || !(empty($gif['gifif']))) { + pfSense_interface_destroy($gif['gifif']); + pfSense_interface_create($gif['gifif']); + $gifif = $gif['gifif']; + } else + $gifif = pfSense_interface_create("gif"); + + /* Do not change the order here for more see gif(4) NOTES section. */ + mwexec("/sbin/ifconfig {$gifif} tunnel {$realifip} " . escapeshellarg($gif['remote-addr'])); + if((is_ipaddrv6($gif['tunnel-local-addr'])) || (is_ipaddrv6($gif['tunnel-remote-addr']))) { + /* XXX: The prefixlen argument for tunnels of ipv6 is useless since it needs to be 128 as enforced by kernel */ + //mwexec("/sbin/ifconfig {$gifif} inet6 " . escapeshellarg($gif['tunnel-local-addr']) . " " . escapeshellarg($gif['tunnel-remote-addr']) . " prefixlen /" . escapeshellarg($gif['tunnel-remote-net'])); + mwexec("/sbin/ifconfig {$gifif} inet6 " . escapeshellarg($gif['tunnel-local-addr']) . " " . escapeshellarg($gif['tunnel-remote-addr']) . " prefixlen 128"); + } else { + mwexec("/sbin/ifconfig {$gifif} " . escapeshellarg($gif['tunnel-local-addr']) . " " . escapeshellarg($gif['tunnel-remote-addr']) . " netmask " . gen_subnet_mask($gif['tunnel-remote-net'])); + } + if (isset($gif['link0'])) + pfSense_interface_flags($gifif, IFF_LINK0); + if (isset($gif['link1'])) + pfSense_interface_flags($gifif, IFF_LINK1); + if($gifif) + interfaces_bring_up($gifif); + else + log_error(gettext("could not bring gifif up -- variable not defined")); + + $iflist = get_configured_interface_list(); + foreach($iflist as $ifname) { + if($config['interfaces'][$ifname]['if'] == $gifif) { + if(get_interface_gateway($ifname)) { + system_routing_configure($ifname); + break; + } + if(get_interface_gateway_v6($ifname)) { + system_routing_configure($ifname); + break; + } + } + } + + + if(is_ipaddrv4($gif['tunnel-remote-addr'])) + file_put_contents("{$g['tmp_path']}/{$gifif}_router", $gif['tunnel-remote-addr']); + if(is_ipaddrv6($gif['tunnel-remote-addr'])) + file_put_contents("{$g['tmp_path']}/{$gifif}_routerv6", $gif['tunnel-remote-addr']); + + if (is_ipaddrv4($realifgw)) { + mwexec("/sbin/route change -host " . escapeshellarg($gif['remote-addr']) . " {$realifgw}"); + } + if (is_ipaddrv6($realifgw)) { + mwexec("/sbin/route change -host -inet6 " . escapeshellarg($gif['remote-addr']) . " {$realifgw}"); + } + + interfaces_bring_up($gifif); + + return $gifif; +} + +function interfaces_configure() { + global $config, $g; + + if ($g['platform'] == 'jail') + return; + + /* Set up our loopback interface */ + interfaces_loopback_configure(); + + /* create the unconfigured wireless clones */ + interfaces_create_wireless_clones(); + + /* set up LAGG virtual interfaces */ + interfaces_lagg_configure(); + + /* set up VLAN virtual interfaces */ + interfaces_vlan_configure(); + + interfaces_qinq_configure(); + + $iflist = get_configured_interface_with_descr(); + $delayed_list = array(); + $bridge_list = array(); + $track6_list = array(); + + /* This is needed to speedup interfaces on bootup. */ + $reload = false; + if (!$g['booting']) + $reload = true; + + foreach($iflist as $if => $ifname) { + $realif = $config['interfaces'][$if]['if']; + if (strstr($realif, "bridge")) + $bridge_list[$if] = $ifname; + else if (strstr($realif, "gre")) + $delayed_list[$if] = $ifname; + else if (strstr($realif, "gif")) + $delayed_list[$if] = $ifname; + else if (strstr($realif, "ovpn")) { + //echo "Delaying OpenVPN interface configuration...done.\n"; + continue; + } else if (!empty($config['interfaces'][$if]['ipaddrv6']) && $config['interfaces'][$if]['ipaddrv6'] == "track6") { + $track6_list[$if] = $ifname; + } else { + if ($g['booting']) + printf(gettext("Configuring %s interface..."), $ifname); + + if($g['debug']) + log_error(sprintf(gettext("Configuring %s"), $ifname)); + interface_configure($if, $reload); + if ($g['booting']) + echo gettext( "done.") . "\n"; + } + } + + /* + * NOTE: The following function parameter consists of + * 1 - Do not load gre/gif/bridge with parent/member as vip + * 2 - Do load gre/gif/bridge with parent/member as vip + */ + + /* set up GRE virtual interfaces */ + interfaces_gre_configure(1); + + /* set up GIF virtual interfaces */ + interfaces_gif_configure(1); + + /* set up BRIDGe virtual interfaces */ + interfaces_bridge_configure(1); + + foreach ($track6_list as $if => $ifname) { + if ($g['booting']) + printf(gettext("Configuring %s interface..."), $ifname); + if ($g['debug']) + log_error(sprintf(gettext("Configuring %s"), $ifname)); + + interface_configure($if, $reload); + + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + /* bring up vip interfaces */ + interfaces_vips_configure(); + + /* set up GRE virtual interfaces */ + interfaces_gre_configure(2); + + /* set up GIF virtual interfaces */ + interfaces_gif_configure(2); + + foreach ($delayed_list as $if => $ifname) { + if ($g['booting']) + printf(gettext("Configuring %s interface..."), $ifname); + if ($g['debug']) + log_error(sprintf(gettext("Configuring %s"), $ifname)); + + interface_configure($if, $reload); + + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + /* set up BRIDGe virtual interfaces */ + interfaces_bridge_configure(2); + + foreach ($bridge_list as $if => $ifname) { + if ($g['booting']) + printf(gettext("Configuring %s interface..."), $ifname); + if($g['debug']) + log_error(sprintf(gettext("Configuring %s"), $ifname)); + + interface_configure($if, $reload); + + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + /* configure interface groups */ + interfaces_group_setup(); + + if (!$g['booting']) { + /* reconfigure static routes (kernel may have deleted them) */ + system_routing_configure(); + + /* reload IPsec tunnels */ + vpn_ipsec_configure(); + + /* reload dhcpd (interface enabled/disabled status may have changed) */ + services_dhcpd_configure(); + + /* restart dnsmasq or unbound */ + if (isset($config['dnsmasq']['enable'])) + services_dnsmasq_configure(); + elseif (isset($config['unbound']['enable'])) + services_unbound_configure(); + } + + return 0; +} + +function interface_reconfigure($interface = "wan", $reloadall = false) { + interface_bring_down($interface); + interface_configure($interface, $reloadall); +} + +function interface_vip_bring_down($vip) { + global $g; + + $vipif = get_real_interface($vip['interface']); + switch ($vip['mode']) { + case "proxyarp": + if (file_exists("{$g['varrun_path']}/choparp_{$vipif}.pid")) + killbypid("{$g['varrun_path']}/choparp_{$vipif}.pid"); + break; + case "ipalias": + if (does_interface_exist($vipif)) { + if (is_ipaddrv6($vip['subnet'])) + mwexec("/sbin/ifconfig {$vipif} inet6 " . escapeshellarg($vip['subnet']) . " -alias"); + else + pfSense_interface_deladdress($vipif, $vip['subnet']); + } + break; + case "carp": + /* XXX: Is enough to delete ip address? */ + if (does_interface_exist($vipif)) + pfSense_interface_deladdress($vipif, $vip['subnet']); + break; + } +} + +function interface_bring_down($interface = "wan", $destroy = false, $ifacecfg = false) { + global $config, $g; + + if (!isset($config['interfaces'][$interface])) + return; + + if ($g['debug']) + log_error("Calling interface down for interface {$interface}, destroy is " . (($destroy) ? 'true' : 'false')); + + /* + * NOTE: The $realifv6 is needed when WANv4 is type PPP and v6 is DHCP and the option v6 from v4 is used. + * In this case the real $realif of v4 is different from that of v6 for operation. + * Keep this in mind while doing changes here! + */ + if ($ifacecfg === false) { + $ifcfg = $config['interfaces'][$interface]; + $ppps = $config['ppps']['ppp']; + $realif = get_real_interface($interface); + $realifv6 = get_real_interface($interface, "inet6", true); + } elseif (!is_array($ifacecfg)) { + log_error(gettext("Wrong parameters used during interface_bring_down")); + $ifcfg = $config['interfaces'][$interface]; + $ppps = $config['ppps']['ppp']; + $realif = get_real_interface($interface); + $realifv6 = get_real_interface($interface, "inet6", true); + } else { + $ifcfg = $ifacecfg['ifcfg']; + $ppps = $ifacecfg['ppps']; + if (isset($ifacecfg['ifcfg']['realif'])) { + $realif = $ifacecfg['ifcfg']['realif']; + /* XXX: Any better way? */ + $realifv6 = $realif; + } else { + $realif = get_real_interface($interface); + $realifv6 = get_real_interface($interface, "inet6", true); + } + } + + switch ($ifcfg['ipaddr']) { + case "ppp": + case "pppoe": + case "pptp": + case "l2tp": + if (is_array($ppps) && count($ppps)) { + foreach ($ppps as $pppid => $ppp) { + if ($realif == $ppp['if']) { + if (isset($ppp['ondemand']) && !$destroy){ + send_event("interface reconfigure {$interface}"); + break; + } + if (file_exists("{$g['varrun_path']}/{$ppp['type']}_{$interface}.pid")) { + killbypid("{$g['varrun_path']}/{$ppp['type']}_{$interface}.pid"); + sleep(2); + } + unlink_if_exists("{$g['varetc_path']}/mpd_{$interface}.conf"); + break; + } + } + } + break; + case "dhcp": + kill_dhclient_process($realif); + unlink_if_exists("{$g['varetc_path']}/dhclient_{$interface}.conf"); + if(does_interface_exist("$realif")) { + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " delete", true); + interface_ipalias_cleanup($interface); + if ($destroy == true) + pfSense_interface_flags($realif, -IFF_UP); + mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a"); + } + break; + default: + if(does_interface_exist("$realif")) { + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " delete", true); + interface_ipalias_cleanup($interface); + if ($destroy == true) + pfSense_interface_flags($realif, -IFF_UP); + mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a"); + } + break; + } + + $track6 = array(); + switch ($ifcfg['ipaddrv6']) { + case "slaac": + case "dhcp6": + $pidv6 = find_dhcp6c_process($realif); + if($pidv6) + posix_kill($pidv6, SIGTERM); + sleep(3); + unlink_if_exists("{$g['varetc_path']}/dhcp6c_{$interface}.conf"); + if (does_interface_exist($realifv6)) { + $ip6 = find_interface_ipv6($realifv6); + if (is_ipaddrv6($ip6) && $ip6 != "::") + mwexec("/sbin/ifconfig " . escapeshellarg($realifv6) . " inet6 {$ip6} delete", true); + interface_ipalias_cleanup($interface, "inet6"); + if ($destroy == true) + pfSense_interface_flags($realif, -IFF_UP); + mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a"); + } + $track6 = link_interface_to_track6($interface); + break; + case "6rd": + case "6to4": + $realif = "{$interface}_stf"; + if(does_interface_exist("$realif")) { + $ip6 = get_interface_ipv6($interface); + if (is_ipaddrv6($ip6)) + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$ip6} delete", true); + interface_ipalias_cleanup($interface, "inet6"); + if ($destroy == true) + pfSense_interface_flags($realif, -IFF_UP); + } + $track6 = link_interface_to_track6($interface); + break; + default: + if(does_interface_exist("$realif")) { + $ip6 = get_interface_ipv6($interface); + if (is_ipaddrv6($ip6)) + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$ip6} delete", true); + if (!empty($ifcfg['ipaddrv6']) && is_ipaddrv6($ifcfg['ipaddrv6'])) + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$ifcfg['ipaddrv6']} delete", true); + interface_ipalias_cleanup($interface, "inet6"); + if ($destroy == true) + pfSense_interface_flags($realif, -IFF_UP); + mwexec("/usr/sbin/arp -d -i " . escapeshellarg($realif) . " -a"); + } + $track6 = link_interface_to_track6($interface); + break; + } + + if (!empty($track6) && is_array($track6)) { + if (!function_exists('services_dhcp_configure')) + require_once('services.inc'); + /* Bring down radvd and dhcp6 on these interfaces */ + services_dhcpd_configure('inet6', $track6); + } + + $old_router = ''; + if (file_exists("{$g['tmp_path']}/{$realif}_router")) + $old_router = trim(file_get_contents("{$g['tmp_path']}/{$realif}_router")); +// log_error("Checking for old router states: {$g['tmp_path']}/{$realif}_router = {$old_router}"); + if (!empty($old_router)) { + log_error("Clearing states to old gateway {$old_router}."); + mwexec("/sbin/pfctl -i " . escapeshellarg($realif) . " -Fs"); + } + + /* remove interface up file if it exists */ + unlink_if_exists("{$g['tmp_path']}/{$realif}up"); + unlink_if_exists("{$g['vardb_path']}/{$interface}ip"); + unlink_if_exists("{$g['vardb_path']}/{$interface}ipv6"); + unlink_if_exists("{$g['tmp_path']}/{$realif}_router"); + unlink_if_exists("{$g['tmp_path']}/{$realif}_routerv6"); + unlink_if_exists("{$g['varetc_path']}/nameserver_{$realif}"); + unlink_if_exists("{$g['varetc_path']}/searchdomain_{$realif}"); + + /* hostapd and wpa_supplicant do not need to be running when the interface is down. + * They will also use 100% CPU if running after the wireless clone gets deleted. */ + if (is_array($ifcfg['wireless'])) { + kill_hostapd($realif); + mwexec(kill_wpasupplicant($realif)); + } + + if ($destroy == true) { + if (preg_match("/^[a-z0-9]+^tun|^ovpn|^gif|^gre|^lagg|^bridge|vlan|_stf$/i", $realif)) + pfSense_interface_destroy($realif); + } + + return; +} + +function interfaces_carp_set_maintenancemode($carp_maintenancemode){ + global $config; + if (isset($config["virtualip_carp_maintenancemode"]) && $carp_maintenancemode == false) { + unset($config["virtualip_carp_maintenancemode"]); + write_config("Leave CARP maintenance mode"); + } else + if (!isset($config["virtualip_carp_maintenancemode"]) && $carp_maintenancemode == true) { + $config["virtualip_carp_maintenancemode"] = true; + write_config("Enter CARP maintenance mode"); + } + + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + if ($vip['mode'] == "carp") { + interface_carp_configure($vip); + } + } +} + +function interfaces_ptpid_used($ptpid) { + global $config; + + if (is_array($config['ppps']['ppp'])) + foreach ($config['ppps']['ppp'] as & $settings) + if ($ptpid == $settings['ptpid']) + return true; + + return false; +} + +function interfaces_ptpid_next() { + + $ptpid = 0; + while(interfaces_ptpid_used($ptpid)) + $ptpid++; + + return $ptpid; +} + +function getMPDCRONSettings($pppif) { + global $config; + + $cron_cmd_file = "{$g['varetc_path']}/pppoe_restart_{$pppif}"; + if (is_array($config['cron']['item'])) { + foreach ($config['cron']['item'] as $i => $item) { + if (stripos($item['command'], $cron_cmd_file) !== false) + return array("ID" => $i, "ITEM" => $item); + } + } + + return NULL; +} + +function handle_pppoe_reset($post_array) { + global $config, $g; + + $pppif = "{$post_array['type']}{$post_array['ptpid']}"; + $cron_cmd_file = "{$g['varetc_path']}/pppoe_restart_{$pppif}"; + + if (!is_array($config['cron']['item'])) + $config['cron']['item'] = array(); + + $itemhash = getMPDCRONSettings($pppif); + + // reset cron items if necessary and return + if (empty($post_array['pppoe-reset-type'])) { + if (isset($itemhash)) + unset($config['cron']['item'][$itemhash['ID']]); + sigkillbypid("{$g['varrun_path']}/cron.pid", "HUP"); + return; + } + + if (empty($itemhash)) + $itemhash = array(); + $item = array(); + if (isset($post_array['pppoe-reset-type']) && $post_array['pppoe-reset-type'] == "custom") { + $item['minute'] = $post_array['pppoe_resetminute']; + $item['hour'] = $post_array['pppoe_resethour']; + if (isset($post_array['pppoe_resetdate']) && $post_array['pppoe_resetdate'] <> "") { + $date = explode("/", $post_array['pppoe_resetdate']); + $item['mday'] = $date[1]; + $item['month'] = $date[0]; + } else { + $item['mday'] = "*"; + $item['month'] = "*"; + } + $item['wday'] = "*"; + $item['who'] = "root"; + $item['command'] = $cron_cmd_file; + } else if (isset($post_array['pppoe-reset-type']) && $post_array['pppoe-reset-type'] == "preset") { + switch ($post_array['pppoe_pr_preset_val']) { + case "monthly": + $item['minute'] = "0"; + $item['hour'] = "0"; + $item['mday'] = "1"; + $item['month'] = "*"; + $item['wday'] = "*"; + break; + case "weekly": + $item['minute'] = "0"; + $item['hour'] = "0"; + $item['mday'] = "*"; + $item['month'] = "*"; + $item['wday'] = "0"; + break; + case "daily": + $item['minute'] = "0"; + $item['hour'] = "0"; + $item['mday'] = "*"; + $item['month'] = "*"; + $item['wday'] = "*"; + break; + case "hourly": + $item['minute'] = "0"; + $item['hour'] = "*"; + $item['mday'] = "*"; + $item['month'] = "*"; + $item['wday'] = "*"; + break; + } // end switch + $item['who'] = "root"; + $item['command'] = $cron_cmd_file; + } + if (empty($item)) + return; + if (isset($itemhash['ID'])) + $config['cron']['item'][$itemhash['ID']] = $item; + else + $config['cron']['item'][] = $item; +} + +/* + * This function can configure PPPoE, MLPPP (PPPoE), PPTP. + * It writes the mpd config file to /var/etc every time the link is opened. + */ +function interface_ppps_configure($interface) { + global $config, $g; + + /* Return for unassigned interfaces. This is a minimum requirement. */ + if (empty($config['interfaces'][$interface])) + return 0; + $ifcfg = $config['interfaces'][$interface]; + if (!isset($ifcfg['enable'])) + return 0; + + // mpd5 requires a /var/spool/lock directory for PPP modem links. + if(!is_dir("/var/spool/lock")) { + mkdir("/var/spool/lock", 0777, true); + } + // mpd5 modem chat script expected in the same directory as the mpd_xxx.conf files + if (!file_exists("{$g['varetc_path']}/mpd.script")) + @symlink("/usr/local/sbin/mpd.script", "{$g['varetc_path']}/mpd.script"); + + if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($config['ppps']['ppp'] as $pppid => $ppp) { + if ($ifcfg['if'] == $ppp['if']) + break; + } + } + if (!$ppp || $ifcfg['if'] != $ppp['if']){ + log_error(sprintf(gettext("Can't find PPP config for %s in interface_ppps_configure()."), $ifcfg['if'])); + return 0; + } + $pppif = $ifcfg['if']; + if ($ppp['type'] == "ppp") + $type = "modem"; + else + $type = $ppp['type']; + $upper_type = strtoupper($ppp['type']); + + if($g['booting']) { + $descr = isset($ifcfg['descr']) ? $ifcfg['descr'] : strtoupper($interface); + echo "starting {$pppif} link..."; + // Do not re-configure the interface if we are booting and it's already been started + if(file_exists("{$g['varrun_path']}/{$ppp['type']}_{$interface}.pid")) + return 0; + } + + $ports = explode(',',$ppp['ports']); + if ($type != "modem") { + foreach ($ports as $pid => $port) { + $ports[$pid] = get_real_interface($port); + if (empty($ports[$pid])) + return 0; + } + } + $localips = explode(',',$ppp['localip']); + $gateways = explode(',',$ppp['gateway']); + $subnets = explode(',',$ppp['subnet']); + + /* We bring up the parent interface first because if DHCP is configured on the parent we need + * to obtain an address first so we can write it in the mpd .conf file for PPTP and L2TP configs + */ + foreach($ports as $pid => $port){ + switch ($ppp['type']) { + case "pppoe": + /* Bring the parent interface up */ + interfaces_bring_up($port); + pfSense_ngctl_attach(".", $port); + /* Enable setautosrc to automatically change mac address if parent interface's changes */ + mwexec("ngctl msg {$port}: setautosrc 1"); + break; + case "pptp": + case "l2tp": + /* configure interface */ + if(is_ipaddr($localips[$pid])){ + // Manually configure interface IP/subnet + pfSense_interface_setaddress($port, "{$localips[$pid]}/{$subnets[$pid]}"); + interfaces_bring_up($port); + } else if (empty($localips[$pid])) + $localips[$pid] = get_interface_ip($port); // try to get the interface IP from the port + + if(!is_ipaddr($localips[$pid])){ + log_error("Could not get a Local IP address for PPTP/L2TP link on {$port} in interfaces_ppps_configure. Using 0.0.0.0 ip!"); + $localips[$pid] = "0.0.0.0"; + } + if(!is_ipaddr($gateways[$pid])){ + log_error(sprintf(gettext('Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in interfaces_ppps_configure.'), $dhcp_gateway, $gway)); + return 0; + } + pfSense_ngctl_attach(".", $port); + break; + case "ppp": + if (!file_exists("{$port}")) { + log_error(sprintf(gettext("Device %s does not exist. PPP link cannot start without the modem device."), $port)); + return 0; + } + break; + default: + log_error(sprintf(gettext("Unkown %s configured as ppp interface."), $type)); + break; + } + } + + if (is_array($ports) && count($ports) > 1) + $multilink = "enable"; + else + $multilink = "disable"; + + if ($type == "modem"){ + if (is_ipaddr($ppp['localip'])) + $localip = $ppp['localip']; + else + $localip = '0.0.0.0'; + + if (is_ipaddr($ppp['gateway'])) + $gateway = $ppp['gateway']; + else + $gateway = "10.64.64.{$pppid}"; + $ranges = "{$localip}/0 {$gateway}/0"; + + if (empty($ppp['apnum'])) + $ppp['apnum'] = 1; + } else + $ranges = "0.0.0.0/0 0.0.0.0/0"; + + if (isset($ppp['ondemand'])) + $ondemand = "enable"; + else + $ondemand = "disable"; + if (!isset($ppp['idletimeout'])) + $ppp['idletimeout'] = 0; + + if (empty($ppp['username']) && $type == "modem"){ + $ppp['username'] = "user"; + $ppp['password'] = "none"; + } + if (empty($ppp['password']) && $type == "modem") + $passwd = "none"; + else + $passwd = base64_decode($ppp['password']); + + $bandwidths = explode(',',$ppp['bandwidth']); + $defaultmtu = "1492"; + if (!empty($ifcfg['mtu'])) + $defaultmtu = intval($ifcfg['mtu']); + $mtus = explode(',',$ppp['mtu']); + $mrus = explode(',',$ppp['mru']); + + if (isset($ppp['mrru'])) + $mrrus = explode(',',$ppp['mrru']); + + // Construct the mpd.conf file + $mpdconf = << $port){ + $port = get_real_interface($port); + $mpdconf .= <<&1", $out, $ret); + if($ret == 0) + break; + sleep(1); + $i++; + } + + /* we only support the 3gstats.php for huawei modems for now. Will add more later. */ + /* We should be able to launch the right version for each modem */ + /* We can also guess the mondev from the manufacturer */ + exec("usbconfig | egrep -ie '(huawei)'", $usbmodemoutput); + mwexec("/bin/ps auxww|grep \"{$interface}\" |grep \"[3]gstats\" | awk '{print $2}' |xargs kill"); + foreach($ports as $port) { + if(preg_match("/huawei/i", implode("\n", $usbmodemoutput))) { + $mondev = substr(basename($port), 0, -1); + $devlist = glob("/dev/{$mondev}?"); + $mondev = basename(end($devlist)); + } + if(preg_match("/zte/i", implode("\n", $usbmodemoutput))) { + $mondev = substr(basename($port), 0, -1) . "1"; + } + log_error("Starting 3gstats.php on device '{$mondev}' for interface '{$interface}'"); + mwexec_bg("/usr/local/bin/3gstats.php {$mondev} {$interface}"); + } + + return 1; +} + +function interfaces_carp_setup() { + global $g, $config; + + if (isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "interfaces_carp_setup() being called $mt\n"; + } + + if ($g['booting']) { + echo gettext("Configuring CARP settings..."); + mute_kernel_msgs(); + } + + /* suck in configuration items */ + if ($config['hasync']) { + $pfsyncenabled = $config['hasync']['pfsyncenabled']; + $pfsyncinterface = $config['hasync']['pfsyncinterface']; + $pfsyncpeerip = $config['hasync']['pfsyncpeerip']; + } else { + unset($pfsyncinterface); + unset($pfsyncenabled); + } + + set_sysctl(array( + "net.inet.carp.preempt" => "1", + "net.inet.carp.log" => "1") + ); + + if (!empty($pfsyncinterface)) + $carp_sync_int = get_real_interface($pfsyncinterface); + else + unset($carp_sync_int); + + /* setup pfsync interface */ + if ($carp_sync_int and $pfsyncenabled) { + if (is_ipaddr($pfsyncpeerip)) + $syncpeer = "syncpeer {$pfsyncpeerip}"; + else + $syncpeer = "-syncpeer"; + + mwexec("/sbin/ifconfig pfsync0 syncdev {$carp_sync_int} {$syncpeer} up", false); + + sleep(1); + + /* XXX: Handle an issue with pfsync(4) and carp(4). In a cluster carp will come up before pfsync(4) has updated and so will cause issues + * for existing sessions. + */ + log_error("waiting for pfsync..."); + $i = 0; + while (intval(trim(`/sbin/ifconfig pfsync0 | /usr/bin/grep 'syncok: 0' | /usr/bin/grep -v grep | /usr/bin/wc -l`)) == 0 && $i < 30) { + $i++; + sleep(1); + } + log_error("pfsync done in $i seconds."); + log_error("Configuring CARP settings finalize..."); + } else { + mwexec("/sbin/ifconfig pfsync0 -syncdev -syncpeer down", false); + } + + if($config['virtualip']['vip']) + set_single_sysctl("net.inet.carp.allow", "1"); + else + set_single_sysctl("net.inet.carp.allow", "0"); + + if ($g['booting']) { + unmute_kernel_msgs(); + echo gettext("done.") . "\n"; + } +} + +function interface_proxyarp_configure($interface = "") { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "interface_proxyarp_configure() being called $mt\n"; + } + + /* kill any running choparp */ + if (empty($interface)) + killbyname("choparp"); + else { + $vipif = get_real_interface($interface); + if (file_exists("{$g['varrun_path']}/choparp_{$vipif}.pid")) + killbypid("{$g['varrun_path']}/choparp_{$vipif}.pid"); + } + + $paa = array(); + if (!empty($config['virtualip']) && is_array($config['virtualip']['vip'])) { + + /* group by interface */ + foreach ($config['virtualip']['vip'] as $vipent) { + if ($vipent['mode'] === "proxyarp") { + if ($vipent['interface']) + $proxyif = $vipent['interface']; + else + $proxyif = "wan"; + + if (!empty($interface) && $interface != $proxyif) + continue; + + if (!is_array($paa[$proxyif])) + $paa[$proxyif] = array(); + + $paa[$proxyif][] = $vipent; + } + } + } + + if (!empty($interface)) { + if (is_array($paa[$interface])) { + $paaifip = get_interface_ip($interface); + if (!is_ipaddr($paaifip)) + return; + $args = get_real_interface($interface) . " auto"; + foreach ($paa[$interface] as $paent) { + if (isset($paent['subnet'])) + $args .= " " . escapeshellarg("{$paent['subnet']}/{$paent['subnet_bits']}"); + else if (isset($paent['range'])) + $args .= " " . escapeshellarg($paent['range']['from'] . "-" . $paent['range']['to']); + } + mwexec_bg("/usr/local/sbin/choparp " . $args); + } + } else if (count($paa) > 0) { + foreach ($paa as $paif => $paents) { + $paaifip = get_interface_ip($paif); + if (!is_ipaddr($paaifip)) + continue; + $args = get_real_interface($paif) . " auto"; + foreach ($paents as $paent) { + if (isset($paent['subnet'])) + $args .= " " . escapeshellarg("{$paent['subnet']}/{$paent['subnet_bits']}"); + else if (isset($paent['range'])) + $args .= " " . escapeshellarg($paent['range']['from'] . "-" . $paent['range']['to']); + } + mwexec_bg("/usr/local/sbin/choparp " . $args); + } + } +} + +function interface_ipalias_cleanup($interface, $inet = "inet4") { + global $g, $config; + + if (is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['mode'] == "ipalias" && $vip['interface'] == $interface) { + if ($inet == "inet6" && is_ipaddrv6($vip['subnet'])) + interface_vip_bring_down($vip); + else if ($inet == "inet4" && is_ipaddrv4($vip['subnet'])) + interface_vip_bring_down($vip); + } + } + } +} + +function interfaces_vips_configure($interface = "") { + global $g, $config; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "interfaces_vips_configure() being called $mt\n"; + } + $paa = array(); + if(is_array($config['virtualip']['vip'])) { + $carp_setuped = false; + $anyproxyarp = false; + foreach ($config['virtualip']['vip'] as $vip) { + switch ($vip['mode']) { + case "proxyarp": + /* nothing it is handled on interface_proxyarp_configure() */ + if ($interface <> "" && $vip['interface'] <> $interface) + continue; + $anyproxyarp = true; + break; + case "ipalias": + if ($interface <> "" && $vip['interface'] <> $interface) + continue; + interface_ipalias_configure($vip); + break; + case "carp": + if ($interface <> "" && $vip['interface'] <> $interface) + continue; + if ($carp_setuped == false) + $carp_setuped = true; + interface_carp_configure($vip); + break; + } + } + if ($carp_setuped == true) + interfaces_carp_setup(); + if ($anyproxyarp == true) + interface_proxyarp_configure(); + } +} + +function interface_ipalias_configure(&$vip) { + global $config; + + if ($vip['mode'] != "ipalias") + return; + + if ($vip['interface'] != 'lo0' && !isset($config['interfaces'][$vip['interface']])) + return; + + if ($vip['interface'] != 'lo0' && !isset($config['interfaces'][$vip['interface']]['enable'])) + return; + + $if = get_real_interface($vip['interface']); + $af = "inet"; + if(is_ipaddrv6($vip['subnet'])) + $af = "inet6"; + mwexec("/sbin/ifconfig " . escapeshellarg($if) ." {$af} ". escapeshellarg($vip['subnet']) ."/" . escapeshellarg($vip['subnet_bits']) . " alias"); +} + +function interface_reload_carps($cif) { + global $config; + + $carpifs = link_ip_to_carp_interface(find_interface_ip($cif)); + if (empty($carpifs)) + return; + + $carps = explode(" ", $carpifs); + if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + if (in_array($vip['carpif'], $carps)) { + switch ($vip['mode']) { + case "carp": + interface_vip_bring_down($vip); + sleep(1); + interface_carp_configure($vip); + break; + case "ipalias": + interface_vip_bring_down($vip); + sleep(1); + interface_ipalias_configure($vip); + break; + } + } + } + } +} + +function interface_carp_configure(&$vip) { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "interface_carp_configure() being called $mt\n"; + } + + if ($vip['mode'] != "carp") + return; + + /* NOTE: Maybe its useless nowdays */ + $realif = get_real_interface($vip['interface']); + if (!does_interface_exist($realif)) { + file_notice("CARP", sprintf(gettext("Interface specified for the virtual IP address %s does not exist. Skipping this VIP."), $vip['subnet']), "Firewall: Virtual IP", ""); + return; + } + + if (is_ipaddrv4($vip['subnet'])) { + /* Ensure a IP on this interface exists prior to configuring CARP. */ + $ww_subnet_ip = find_interface_ip($realif); + if (!is_ipaddrv4($ww_subnet_ip)) { + file_notice("CARP", sprintf(gettext("Sorry but we could not find a required assigned ip address on the interface for the virtual IP address %s."), $vip['subnet']), "Firewall: Virtual IP", ""); + return; + } + } else if (is_ipaddrv6($vip['subnet'])) { + /* Ensure a IP on this interface exists prior to configuring CARP. */ + $ww_subnet_ip = find_interface_ipv6($realif); + if (!is_ipaddrv6($ww_subnet_ip)) { + file_notice("CARP", sprintf(gettext("Sorry but we could not find a required assigned ip address on the interface for the virtual IPv6 address %s."), $vip['subnet']), "Firewall: Virtual IP", ""); + return; + } + } + + $vip_password = $vip['password']; + $vip_password = escapeshellarg(addslashes(str_replace(" ", "", $vip_password))); + if ($vip['password'] != "") + $password = " pass {$vip_password}"; + + $advbase = ""; + if (!empty($vip['advbase'])) + $advbase = "advbase " . escapeshellarg($vip['advbase']); + + $carp_maintenancemode = isset($config["virtualip_carp_maintenancemode"]); + if ($carp_maintenancemode) + $advskew = "advskew 254"; + else + $advskew = "advskew " . escapeshellarg($vip['advskew']); + + mwexec("/sbin/ifconfig {$realif} vhid " . escapeshellarg($vip['vhid']) . " {$advskew} {$advbase} {$password}"); + + if (is_ipaddrv4($vip['subnet'])) + mwexec("/sbin/ifconfig {$realif} " . escapeshellarg($vip['subnet']) . "/" . escapeshellarg($vip['subnet_bits']) . " alias vhid " . escapeshellarg($vip['vhid'])); + else if (is_ipaddrv6($vip['subnet'])) + mwexec("/sbin/ifconfig {$realif} inet6 " . escapeshellarg($vip['subnet']) . " prefixlen " . escapeshellarg($vip['subnet_bits']) . " alias vhid " . escapeshellarg($vip['vhid'])); + + return $realif; +} + +function interface_wireless_clone($realif, $wlcfg) { + global $config, $g; + /* Check to see if interface has been cloned as of yet. + * If it has not been cloned then go ahead and clone it. + */ + $needs_clone = false; + if(is_array($wlcfg['wireless'])) + $wlcfg_mode = $wlcfg['wireless']['mode']; + else + $wlcfg_mode = $wlcfg['mode']; + switch($wlcfg_mode) { + case "hostap": + $mode = "wlanmode hostap"; + break; + case "adhoc": + $mode = "wlanmode adhoc"; + break; + default: + $mode = ""; + break; + } + $baseif = interface_get_wireless_base($wlcfg['if']); + if(does_interface_exist($realif)) { + exec("/sbin/ifconfig " . escapeshellarg($realif), $output, $ret); + $ifconfig_str = implode($output); + if(($wlcfg_mode == "hostap") && (! preg_match("/hostap/si", $ifconfig_str))) { + log_error(sprintf(gettext("Interface %s changed to hostap mode"), $realif)); + $needs_clone = true; + } + if(($wlcfg_mode == "adhoc") && (! preg_match("/adhoc/si", $ifconfig_str))) { + log_error(sprintf(gettext("Interface %s changed to adhoc mode"), $realif)); + $needs_clone = true; + } + if(($wlcfg_mode == "bss") && (preg_match("/hostap|adhoc/si", $ifconfig_str))) { + log_error(sprintf(gettext("Interface %s changed to infrastructure mode"), $realif)); + $needs_clone = true; + } + } else { + $needs_clone = true; + } + + if($needs_clone == true) { + /* remove previous instance if it exists */ + if(does_interface_exist($realif)) + pfSense_interface_destroy($realif); + + log_error(sprintf(gettext("Cloning new wireless interface %s"), $realif)); + // Create the new wlan interface. FreeBSD returns the new interface name. + // example: wlan2 + exec("/sbin/ifconfig wlan create wlandev {$baseif} {$mode} bssid 2>&1", $out, $ret); + if($ret <> 0) { + log_error(sprintf(gettext('Failed to clone interface %1$s with error code %2$s, output %3$s'), $baseif, $ret, $out[0])); + return false; + } + $newif = trim($out[0]); + // Rename the interface to {$parentnic}_wlan{$number}#: EX: ath0_wlan0 + pfSense_interface_rename($newif, $realif); + // FIXME: not sure what ngctl is for. Doesn't work. + // mwexec("/usr/sbin/ngctl name {$newif}: {$realif}", false); + file_put_contents("{$g['tmp_path']}/{$realif}_oldmac", get_interface_mac($realif)); + } + return true; +} + +function interface_sync_wireless_clones(&$ifcfg, $sync_changes = false) { + global $config, $g; + + $shared_settings = array('standard', 'turbo', 'protmode', 'txpower', 'channel', + 'diversity', 'txantenna', 'rxantenna', 'distance', + 'regdomain', 'regcountry', 'reglocation'); + + if(!is_interface_wireless($ifcfg['if'])) + return; + + $baseif = interface_get_wireless_base($ifcfg['if']); + + // Sync shared settings for assigned clones + $iflist = get_configured_interface_list(false, true); + foreach ($iflist as $if) { + if ($baseif == interface_get_wireless_base($config['interfaces'][$if]['if']) && $ifcfg['if'] != $config['interfaces'][$if]['if']) { + if (isset($config['interfaces'][$if]['wireless']['standard']) || $sync_changes) { + foreach ($shared_settings as $setting) { + if ($sync_changes) { + if (isset($ifcfg['wireless'][$setting])) + $config['interfaces'][$if]['wireless'][$setting] = $ifcfg['wireless'][$setting]; + else if (isset($config['interfaces'][$if]['wireless'][$setting])) + unset($config['interfaces'][$if]['wireless'][$setting]); + } else { + if (isset($config['interfaces'][$if]['wireless'][$setting])) + $ifcfg['wireless'][$setting] = $config['interfaces'][$if]['wireless'][$setting]; + else if (isset($ifcfg['wireless'][$setting])) + unset($ifcfg['wireless'][$setting]); + } + } + if (!$sync_changes) + break; + } + } + } + + // Read or write settings at shared area + if (isset($config['wireless']['interfaces'][$baseif]) && is_array($config['wireless']['interfaces'][$baseif])) { + foreach ($shared_settings as $setting) { + if ($sync_changes) { + if (isset($ifcfg['wireless'][$setting])) + $config['wireless']['interfaces'][$baseif][$setting] = $ifcfg['wireless'][$setting]; + else if (isset($config['wireless']['interfaces'][$baseif][$setting])) + unset($config['wireless']['interfaces'][$baseif][$setting]); + } else if (isset($config['wireless']['interfaces'][$baseif][$setting])) { + if (isset($config['wireless']['interfaces'][$baseif][$setting])) + $ifcfg['wireless'][$setting] = $config['wireless']['interfaces'][$baseif][$setting]; + else if (isset($ifcfg['wireless'][$setting])) + unset($ifcfg['wireless'][$setting]); + } + } + } + + // Sync the mode on the clone creation page with the configured mode on the interface + if (interface_is_wireless_clone($ifcfg['if']) && isset($config['wireless']['clone']) && is_array($config['wireless']['clone'])) { + foreach ($config['wireless']['clone'] as &$clone) { + if ($clone['cloneif'] == $ifcfg['if']) { + if ($sync_changes) { + $clone['mode'] = $ifcfg['wireless']['mode']; + } else { + $ifcfg['wireless']['mode'] = $clone['mode']; + } + break; + } + } + unset($clone); + } +} + +function interface_wireless_configure($if, &$wl, &$wlcfg) { + global $config, $g; + + /* open up a shell script that will be used to output the commands. + * since wireless is changing a lot, these series of commands are fragile + * and will sometimes need to be verified by a operator by executing the command + * and returning the output of the command to the developers for inspection. please + * do not change this routine from a shell script to individual exec commands. -sullrich + */ + + // Remove script file + unlink_if_exists("{$g['tmp_path']}/{$if}_setup.sh"); + + // Clone wireless nic if needed. + interface_wireless_clone($if, $wl); + + // Reject inadvertent changes to shared settings in case the interface hasn't been configured. + interface_sync_wireless_clones($wl, false); + + $fd_set = fopen("{$g['tmp_path']}/{$if}_setup.sh","w"); + fwrite($fd_set, "#!/bin/sh\n"); + fwrite($fd_set, "# {$g['product_name']} wireless configuration script.\n\n"); + + /* set values for /path/program */ + $hostapd = "/usr/sbin/hostapd"; + $wpa_supplicant = "/usr/sbin/wpa_supplicant"; + $ifconfig = "/sbin/ifconfig"; + $sysctl = "/sbin/sysctl"; + $killall = "/usr/bin/killall"; + + /* Set all wireless ifconfig variables (split up to get rid of needed checking) */ + + $wlcmd = array(); + $wl_sysctl = array(); + /* Make sure it's up */ + $wlcmd[] = "up"; + /* Set a/b/g standard */ + $standard = str_replace(" Turbo", "", $wlcfg['standard']); + $wlcmd[] = "mode " . escapeshellarg($standard); + + /* XXX: Disable ampdu for now on mwl when running in 11n mode + * to prevent massive packet loss under certain conditions. */ + if(preg_match("/^mwl/i", $if) && ($standard == "11ng" || $standard == "11na")) + $wlcmd[] = "-ampdu"; + + /* Set ssid */ + if($wlcfg['ssid']) + $wlcmd[] = "ssid " .escapeshellarg($wlcfg['ssid']); + + /* Set 802.11g protection mode */ + $wlcmd[] = "protmode " . escapeshellarg($wlcfg['protmode']); + + /* set wireless channel value */ + if(isset($wlcfg['channel'])) { + if($wlcfg['channel'] == "0") { + $wlcmd[] = "channel any"; + } else { + $wlcmd[] = "channel " . escapeshellarg($wlcfg['channel']); + } + } + + /* Set antenna diversity value */ + if(isset($wlcfg['diversity'])) + $wl_sysctl[] = "diversity=" . escapeshellarg($wlcfg['diversity']); + + /* Set txantenna value */ + if(isset($wlcfg['txantenna'])) + $wl_sysctl[] = "txantenna=" . escapeshellarg($wlcfg['txantenna']); + + /* Set rxantenna value */ + if(isset($wlcfg['rxantenna'])) + $wl_sysctl[] = "rxantenna=" . escapeshellarg($wlcfg['rxantenna']); + + /* set Distance value */ + if($wlcfg['distance']) + $distance = escapeshellarg($wlcfg['distance']); + + /* Set wireless hostap mode */ + if ($wlcfg['mode'] == "hostap") { + $wlcmd[] = "mediaopt hostap"; + } else { + $wlcmd[] = "-mediaopt hostap"; + } + + /* Set wireless adhoc mode */ + if ($wlcfg['mode'] == "adhoc") { + $wlcmd[] = "mediaopt adhoc"; + } else { + $wlcmd[] = "-mediaopt adhoc"; + } + + /* Not neccesary to set BSS mode as this is default if adhoc and/or hostap is NOT set */ + + /* handle hide ssid option */ + if(isset($wlcfg['hidessid']['enable'])) { + $wlcmd[] = "hidessid"; + } else { + $wlcmd[] = "-hidessid"; + } + + /* handle pureg (802.11g) only option */ + if(isset($wlcfg['pureg']['enable'])) { + $wlcmd[] = "mode 11g pureg"; + } else { + $wlcmd[] = "-pureg"; + } + + /* handle puren (802.11n) only option */ + if(isset($wlcfg['puren']['enable'])) { + $wlcmd[] = "puren"; + } else { + $wlcmd[] = "-puren"; + } + + /* enable apbridge option */ + if(isset($wlcfg['apbridge']['enable'])) { + $wlcmd[] = "apbridge"; + } else { + $wlcmd[] = "-apbridge"; + } + + /* handle turbo option */ + if(isset($wlcfg['turbo']['enable'])) { + $wlcmd[] = "mediaopt turbo"; + } else { + $wlcmd[] = "-mediaopt turbo"; + } + + /* handle txpower setting */ + /* if($wlcfg['txpower'] <> "") + $wlcmd[] = "txpower " . escapeshellarg($wlcfg['txpower']); + */ + /* handle wme option */ + if(isset($wlcfg['wme']['enable'])) { + $wlcmd[] = "wme"; + } else { + $wlcmd[] = "-wme"; + } + + /* set up wep if enabled */ + $wepset = ""; + if (isset($wlcfg['wep']['enable']) && is_array($wlcfg['wep']['key'])) { + switch($wlcfg['wpa']['auth_algs']) { + case "1": + $wepset .= "authmode open wepmode on "; + break; + case "2": + $wepset .= "authmode shared wepmode on "; + break; + case "3": + $wepset .= "authmode mixed wepmode on "; + } + $i = 1; + foreach ($wlcfg['wep']['key'] as $wepkey) { + $wepset .= "wepkey " . escapeshellarg("{$i}:{$wepkey['value']}") . " "; + if (isset($wepkey['txkey'])) { + $wlcmd[] = "weptxkey {$i} "; + } + $i++; + } + $wlcmd[] = $wepset; + } else { + $wlcmd[] = "authmode open wepmode off "; + } + + kill_hostapd($if); + mwexec(kill_wpasupplicant("{$if}")); + + /* generate wpa_supplicant/hostap config if wpa is enabled */ + conf_mount_rw(); + + switch ($wlcfg['mode']) { + case 'bss': + if (isset($wlcfg['wpa']['enable'])) { + $wpa .= << $mtu) + $mtu = $portmtu; + } + } + } + + return $mtu; +} + +function interface_virtual_create($interface) { + global $config; + + if (strstr($interface, "_vlan")) { + interfaces_vlan_configure($vlan); + } else if (substr($interface, 0, 3) == "gre") { + interfaces_gre_configure(0, $interface); + } else if (substr($interface, 0, 3) == "gif") { + interfaces_gif_configure(0, $interface); + } else if (substr($interface, 0, 5) == "ovpns") { + if (is_array($config['openvpn']) && is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as $server) { + if ($interface == "ovpns{$server['vpnid']}") { + if (!function_exists('openvpn_resync')) + require_once('openvpn.inc'); + log_error("OpenVPN: Resync server {$server['description']}"); + openvpn_resync('server', $server); + } + } + unset($server); + } + } else if (substr($interface, 0, 5) == "ovpnc") { + if (is_array($config['openvpn']) && is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as $client) { + if ($interface == "ovpnc{$client['vpnid']}") { + if (!function_exists('openvpn_resync')) + require_once('openvpn.inc'); + log_error("OpenVPN: Resync server {$client['description']}"); + openvpn_resync('client', $client); + } + } + unset($client); + } + } else if (substr($interface, 0, 4) == "lagg") { + interfaces_lagg_configure($interface); + } else if (substr($interface, 0, 6) == "bridge") { + interfaces_bridge_configure(0, $interface); + } +} + +function interface_vlan_adapt_mtu($vlanifs, $mtu) { + global $config; + + if (!is_array($vlanifs)) + return; + + /* All vlans need to use the same mtu value as their parent. */ + foreach ($vlanifs as $vlan) { + $assignedport = convert_real_interface_to_friendly_interface_name($vlan['vlanif']); + if (!empty($assignedport)) { + if (!empty($config['interfaces'][$assignedport]['mtu'])) { + /* + * XXX: This is really never going to happen just keep the code for safety and readbility. + * It never happens since interface_vlan_mtu_configured finds the biggest mtu on vlans. + * Also if it has a lower mtu configured just respect user choice. + */ + if (intval($config['interfaces'][$assignedport]['mtu']) > $mtu) + pfSense_interface_mtu($vlan['vlanif'], $mtu); + } else { + if (get_interface_mtu($vlan['vlanif']) != $mtu) + pfSense_interface_mtu($vlan['vlanif'], $mtu); + } + } else if (get_interface_mtu($vlan['vlanif']) != $mtu) + pfSense_interface_mtu($vlan['vlanif'], $mtu); + } +} + +function interface_configure($interface = "wan", $reloadall = false, $linkupevent = false) { + global $config, $g; + global $interface_sn_arr_cache, $interface_ip_arr_cache; + global $interface_snv6_arr_cache, $interface_ipv6_arr_cache; + + $wancfg = $config['interfaces'][$interface]; + + if (!isset($wancfg['enable'])) + return; + + $realif = get_real_interface($interface); + $realhwif_array = get_parent_interface($interface); + // Need code to handle MLPPP if we ever use $realhwif for MLPPP handling + $realhwif = $realhwif_array[0]; + + if (!$g['booting'] && !(substr($realif, 0, 4) == "ovpn")) { + /* remove all IPv4 and IPv6 addresses */ + $tmpifaces = pfSense_getall_interface_addresses($realif); + if (is_array($tmpifaces)) { + foreach ($tmpifaces as $tmpiface) { + if (is_ipaddrv6($tmpiface) || is_subnetv6($tmpiface)) { + if (!is_linklocal($tmpiface)) + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$tmpiface} delete"); + } else { + if (is_subnetv4($tmpiface)) { + $tmpip = explode('/', $tmpiface); + $tmpip = $tmpip[0]; + } else + $tmpip = $tmpiface; + pfSense_interface_deladdress($realif, $tmpip); + } + } + } + + /* only bring down the interface when both v4 and v6 are set to NONE */ + if (empty($wancfg['ipaddr']) && empty($wancfg['ipaddrv6'])) + interface_bring_down($interface); + } + + $interface_to_check = $realif; + switch ($wancfg['ipaddr']) { + case 'pppoe': + case 'l2tp': + case 'pptp': + case 'ppp': + $interface_to_check = $realhwif; + break; + } + + /* Need to check that the interface exists or not in the case where its coming back from disabled state see #3270 */ + if (in_array(substr($realif, 0, 3), array("gre", "gif")) || !does_interface_exist($interface_to_check)) + interface_virtual_create($interface_to_check); + + /* Disable Accepting router advertisements unless specifically requested */ + if ($g['debug']) + log_error("Deny router advertisements for interface {$interface}"); + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 -accept_rtadv"); + + /* wireless configuration? */ + if (is_array($wancfg['wireless'])) + interface_wireless_configure($realif, $wancfg, $wancfg['wireless']); + + $mac = get_interface_mac($realhwif); + /* + * Don't try to reapply the spoofed MAC if it's already applied. + * When ifconfig link is used, it cycles the interface down/up, which triggers + * the interface config again, which attempts to spoof the MAC again, + * which cycles the link again... + */ + if ($wancfg['spoofmac'] && ($wancfg['spoofmac'] != $mac)) { + mwexec("/sbin/ifconfig " . escapeshellarg($realhwif) . + " link " . escapeshellarg($wancfg['spoofmac'])); + + /* + * All vlans need to spoof their parent mac address, too. see + * ticket #1514: http://cvstrac.pfsense.com/tktview?tn=1514,33 + */ + if (is_array($config['vlans']['vlan'])) { + foreach ($config['vlans']['vlan'] as $vlan) { + if ($vlan['if'] == $realhwif) + mwexec("/sbin/ifconfig " . escapeshellarg($vlan['vlanif']) . + " link " . escapeshellarg($wancfg['spoofmac'])); + } + } + } else { + + if ($mac == "ff:ff:ff:ff:ff:ff") { + /* this is not a valid mac address. generate a + * temporary mac address so the machine can get online. + */ + echo gettext("Generating new MAC address."); + $random_mac = generate_random_mac_address(); + mwexec("/sbin/ifconfig " . escapeshellarg($realhwif) . + " link " . escapeshellarg($random_mac)); + $wancfg['spoofmac'] = $random_mac; + write_config(); + file_notice("MAC Address altered", sprintf(gettext('The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been automatically replaced with %2$s'), $realif, $random_mac), "Interfaces"); + } + } + + /* media */ + if ($wancfg['media'] || $wancfg['mediaopt']) { + $cmd = "/sbin/ifconfig " . escapeshellarg($realhwif); + if ($wancfg['media']) + $cmd .= " media " . escapeshellarg($wancfg['media']); + if ($wancfg['mediaopt']) + $cmd .= " mediaopt " . escapeshellarg($wancfg['mediaopt']); + mwexec($cmd); + } + $options = pfSense_get_interface_addresses($realhwif); + + /* skip vlans for checksumming and polling */ + if (!stristr($realif, "_vlan") && is_array($options)) { + $flags_on = 0; + $flags_off = 0; + if(isset($config['system']['disablechecksumoffloading'])) { + if (isset($options['encaps']['txcsum'])) + $flags_off |= IFCAP_TXCSUM; + if (isset($options['encaps']['rxcsum'])) + $flags_off |= IFCAP_RXCSUM; + } else { + if (isset($options['caps']['txcsum'])) + $flags_on |= IFCAP_TXCSUM; + if (isset($options['caps']['rxcsum'])) + $flags_on |= IFCAP_RXCSUM; + } + + if(isset($config['system']['disablesegmentationoffloading'])) + $flags_off |= IFCAP_TSO; + else if (isset($options['caps']['tso']) || isset($options['caps']['tso4']) || isset($options['caps']['tso6'])) + $flags_on |= IFCAP_TSO; + + if(isset($config['system']['disablelargereceiveoffloading'])) + $flags_off |= IFCAP_LRO; + else if (isset($options['caps']['lro'])) + $flags_on |= IFCAP_LRO; + + /* if the NIC supports polling *AND* it is enabled in the GUI */ + if (!isset($config['system']['polling'])) + $flags_off |= IFCAP_POLLING; + else if (isset($options['caps']['polling'])) + $flags_on |= IFCAP_POLLING; + + pfSense_interface_capabilities($realhwif, -$flags_off); + pfSense_interface_capabilities($realhwif, $flags_on); + } + + /* invalidate interface/ip/sn cache */ + get_interface_arr(true); + unset($interface_ip_arr_cache[$realif]); + unset($interface_sn_arr_cache[$realif]); + unset($interface_ipv6_arr_cache[$realif]); + unset($interface_snv6_arr_cache[$realif]); + + $tunnelif = substr($realif, 0, 3); + switch ($wancfg['ipaddr']) { + case 'dhcp': + interface_dhcp_configure($interface); + break; + case 'pppoe': + case 'l2tp': + case 'pptp': + case 'ppp': + interface_ppps_configure($interface); + break; + default: + /* XXX: Kludge for now related to #3280 */ + if (!in_array($tunnelif, array("gif", "gre", "ovp"))) { + if (is_ipaddrv4($wancfg['ipaddr']) && $wancfg['subnet'] <> "") + pfSense_interface_setaddress($realif, "{$wancfg['ipaddr']}/{$wancfg['subnet']}"); + } + break; + } + + switch ($wancfg['ipaddrv6']) { + case 'slaac': + case 'dhcp6': + interface_dhcpv6_configure($interface, $wancfg); + break; + case '6rd': + interface_6rd_configure($interface, $wancfg); + break; + case '6to4': + interface_6to4_configure($interface, $wancfg); + break; + case 'track6': + interface_track6_configure($interface, $wancfg, $linkupevent); + break; + default: + /* XXX: Kludge for now related to #3280 */ + if (!in_array($tunnelif, array("gif", "gre", "ovp"))) { + if (is_ipaddrv6($wancfg['ipaddrv6']) && $wancfg['subnetv6'] <> "") { + //pfSense_interface_setaddress($realif, "{$wancfg['ipaddrv6']}/{$wancfg['subnetv6']}"); + // FIXME: Add IPv6 Support to the pfSense module + mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 {$wancfg['ipaddrv6']} prefixlen " . escapeshellarg($wancfg['subnetv6'])); + } + } + break; + } + + if (!empty($wancfg['mtu'])) { + if (stristr($realif, "_vlan")) { + $assignedparent = convert_real_interface_to_friendly_interface_name($realhwif); + if (!empty($assignedparent) && !empty($config['interfaces'][$assignedparent]['mtu'])) + $parentmtu = $config['interfaces'][$assignedparent]['mtu']; + else + $parentmtu = interface_vlan_mtu_configured($realhwif, $wancfg['mtu']); + + if ($wancfg['mtu'] > $parentmtu) { + if (get_interface_mtu($realhwif) != $wancfg['mtu']) + pfSense_interface_mtu($realhwif, $wancfg['mtu']); + + /* All vlans need to use the same mtu value as their parent. */ + interface_vlan_adapt_mtu(link_interface_to_vlans($realhwif), $wancfg['mtu']); + } else + pfSense_interface_mtu($realif, $wancfg['mtu']); + } else { + if ($wancfg['mtu'] != get_interface_mtu($realif)) + pfSense_interface_mtu($realif, $wancfg['mtu']); + + /* This case is needed when the parent of vlans is being configured */ + interface_vlan_adapt_mtu(link_interface_to_vlans($realif), $wancfg['mtu']); + } + /* XXX: What about gre/gif/lagg/.. ? */ + } + + if (does_interface_exist($wancfg['if'])) + interfaces_bring_up($wancfg['if']); + + interface_netgraph_needed($interface); + + if (!$g['booting']) { + link_interface_to_vips($interface, "update"); + + unset($gre); + $gre = link_interface_to_gre($interface); + if (!empty($gre)) + array_walk($gre, 'interface_gre_configure'); + + unset($gif); + $gif = link_interface_to_gif($interface); + if (!empty($gif)) + array_walk($gif, 'interface_gif_configure'); + + if ($linkupevent == false || substr($realif, 0, 4) == "ovpn") { + unset($bridgetmp); + $bridgetmp = link_interface_to_bridge($interface); + if (!empty($bridgetmp)) + interface_bridge_add_member($bridgetmp, $realif); + } + + $grouptmp = link_interface_to_group($interface); + if (!empty($grouptmp)) + array_walk($grouptmp, 'interface_group_add_member'); + + if ($interface == "lan") + /* make new hosts file */ + system_hosts_generate(); + + if ($reloadall == true) { + + /* reconfigure static routes (kernel may have deleted them) */ + system_routing_configure($interface); + + /* reload ipsec tunnels */ + vpn_ipsec_configure(); + + /* restart dnsmasq or unbound */ + if (isset($config['dnsmasq']['enable'])) + services_dnsmasq_configure(); + elseif (isset($config['unbound']['enable'])) + services_unbound_configure(); + + /* update dyndns */ + send_event("service reload dyndns {$interface}"); + + /* XXX: which CPZONE? Needed? */ + /* reload captive portal */ + captiveportal_init_rules(); + } + } + + interfaces_staticarp_configure($interface); + return 0; +} + +function interface_track6_configure($interface = "lan", $wancfg, $linkupevent = false) { + global $config, $g; + + if (!is_array($wancfg)) + return; + + if (!isset($wancfg['enable'])) + return; + + /* If the interface is not configured via another, exit */ + if (empty($wancfg['track6-interface'])) + return; + + /* always configure a link-local of fe80::1:1 on the track6 interfaces */ + $realif = get_real_interface($interface); + $linklocal = find_interface_ipv6_ll($realif); + if (!empty($linklocal)) + mwexec("/sbin/ifconfig {$realif} inet6 {$linklocal} delete"); + /* XXX: This might break for good on a carp installation using link-local as network ips */ + /* XXX: Probably should remove? */ + mwexec("/sbin/ifconfig {$realif} inet6 fe80::1:1%{$realif}"); + + $trackcfg = $config['interfaces'][$wancfg['track6-interface']]; + if (!isset($trackcfg['enable'])) { + log_error("Interface {$interface} tracking non-existant interface {$wancfg['track6-interface']}"); + return; + } + + switch($trackcfg['ipaddrv6']) { + case "6to4": + if ($g['debug']) + log_error("Interface {$interface} configured via {$wancfg['track6-interface']} type {$type}"); + interface_track6_6to4_configure($interface, $wancfg); + break; + case "6rd": + if ($g['debug']) + log_error("Interface {$interface} configured via {$wancfg['track6-interface']} type {$type}"); + interface_track6_6rd_configure($interface, $wancfg); + break; + case "dhcp6": + if ($linkupevent == true) { + /* + * NOTE: Usually come here from rc.linkup calling so just call directly intead of generating event + * Instead of disrupting all other v4 configuration just restart DHCPv6 client for now + * + * XXX: Probably DHCPv6 client should handle this autmagically itself? + */ + $parentrealif = get_real_interface($wancfg['track6-interface']); + $pidv6 = find_dhcp6c_process($parentrealif); + if($pidv6) + posix_kill($pidv6, SIGHUP); + } + break; + } + + if (!$g['booting'] && $linkupevent == false) { + if (!function_exists('services_dhcpd_configure')) + require_once("services.inc"); + + services_dhcpd_configure("inet6"); + } + + return 0; +} + +function interface_track6_6rd_configure($interface = "lan", $lancfg) { + global $config, $g; + global $interface_ipv6_arr_cache; + global $interface_snv6_arr_cache; + + if (!is_array($lancfg)) + return; + + /* If the interface is not configured via another, exit */ + if (empty($lancfg['track6-interface'])) + return; + + $wancfg = $config['interfaces'][$lancfg['track6-interface']]; + if (empty($wancfg)) { + log_error("Interface {$interface} tracking non-existant interface {$lancfg['track6-interface']}"); + return; + } + + $ip4address = get_interface_ip($lancfg['track6-interface']); + if (!is_ipaddrv4($ip4address)) { /* XXX: This should not be needed by 6rd || (is_private_ip($ip4address))) { */ + log_error("The interface IPv4 '{$ip4address}' address on interface '{$lancfg['track6-interface']}' is not public, not configuring 6RD tunnel"); + return; + } + $hexwanv4 = return_hex_ipv4($ip4address); + + /* create the long prefix notation for math, save the prefix length */ + $rd6prefix = explode("/", $wancfg['prefix-6rd']); + $rd6prefixlen = $rd6prefix[1]; + $rd6prefix = Net_IPv6::uncompress($rd6prefix[0]); + + /* binary presentation of the prefix for all 128 bits. */ + $rd6lanbin = convert_ipv6_to_128bit($rd6prefix); + + /* just save the left prefix length bits */ + $rd6lanbin = substr($rd6lanbin, 0, $rd6prefixlen); + /* add the v4 address, offset n bits from the left */ + $rd6lanbin .= substr(sprintf("%032b", hexdec($hexwanv4)), (0 + $wancfg['prefix-6rd-v4plen']), 32); + + /* add the custom prefix id, max 32bits long? (64 bits - (prefixlen + (32 - v4plen)) */ + /* 64 - (37 + (32 - 17)) = 8 == /52 */ + $restbits = 64 - ($rd6prefixlen + (32 - $wancfg['prefix-6rd-v4plen'])); + // echo "64 - (prefixlen {$rd6prefixlen} + v4len (32 - {$wancfg['prefix-6rd-v4plen']})) = {$restbits} \n"; + $rd6lanbin .= substr(sprintf("%032b", str_pad($lancfg['track6-prefix-id'], 32, "0", STR_PAD_LEFT)), (32 - $restbits), 32); + /* fill the rest out with zeros */ + $rd6lanbin = str_pad($rd6lanbin, 128, "0", STR_PAD_RIGHT); + + /* convert the 128 bits for the lan address back into a valid IPv6 address */ + $rd6lan = convert_128bit_to_ipv6($rd6lanbin) ."1"; + + $lanif = get_real_interface($interface); + $oip = find_interface_ipv6($lanif); + if (is_ipaddrv6($oip)) + mwexec("/sbin/ifconfig {$lanif} inet6 {$oip} delete"); + unset($interface_ipv6_arr_cache[$lanif]); + unset($interface_snv6_arr_cache[$lanif]); + log_error("rd6 {$interface} with ipv6 address {$rd6lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}"); + mwexec("/sbin/ifconfig {$lanif} inet6 {$rd6lan} prefixlen 64"); + + return 0; +} + +function interface_track6_6to4_configure($interface = "lan", $lancfg) { + global $config, $g; + global $interface_ipv6_arr_cache; + global $interface_snv6_arr_cache; + + if (!is_array($lancfg)) + return; + + /* If the interface is not configured via another, exit */ + if (empty($lancfg['track6-interface'])) + return; + + $wancfg = $config['interfaces'][$lancfg['track6-interface']]; + if (empty($wancfg)) { + log_error("Interface {$interface} tracking non-existant interface {$lancfg['track6-interface']}"); + return; + } + + $ip4address = get_interface_ip($lancfg['track6-interface']); + if (!is_ipaddrv4($ip4address) || is_private_ip($ip4address)) { + log_error("The interface IPv4 '{$ip4address}' address on interface '{$lancfg['track6-interface']}' is not public, not configuring 6RD tunnel"); + return; + } + $hexwanv4 = return_hex_ipv4($ip4address); + + /* create the long prefix notation for math, save the prefix length */ + $sixto4prefix = "2002::"; + $sixto4prefixlen = 16; + $sixto4prefix = Net_IPv6::uncompress($sixto4prefix); + + /* binary presentation of the prefix for all 128 bits. */ + $sixto4lanbin = convert_ipv6_to_128bit($sixto4prefix); + + /* just save the left prefix length bits */ + $sixto4lanbin = substr($sixto4lanbin, 0, $sixto4prefixlen); + /* add the v4 address */ + $sixto4lanbin .= sprintf("%032b", hexdec($hexwanv4)); + /* add the custom prefix id */ + $sixto4lanbin .= sprintf("%016b", $lancfg['track6-prefix-id']); + /* fill the rest out with zeros */ + $sixto4lanbin = str_pad($sixto4lanbin, 128, "0", STR_PAD_RIGHT); + + /* convert the 128 bits for the lan address back into a valid IPv6 address */ + $sixto4lan = convert_128bit_to_ipv6($sixto4lanbin) ."1"; + + $lanif = get_real_interface($interface); + $oip = find_interface_ipv6($lanif); + if (is_ipaddrv6($oip)) + mwexec("/sbin/ifconfig {$lanif} inet6 {$oip} delete"); + unset($interface_ipv6_arr_cache[$lanif]); + unset($interface_snv6_arr_cache[$lanif]); + log_error("sixto4 {$interface} with ipv6 address {$sixto4lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}"); + mwexec("/sbin/ifconfig {$lanif} inet6 {$sixto4lan} prefixlen 64"); + + return 0; +} + +function interface_6rd_configure($interface = "wan", $wancfg) { + global $config, $g; + + /* because this is a tunnel interface we can only function + * with a public IPv4 address on the interface */ + + if (!is_array($wancfg)) + return; + + if (!is_module_loaded('if_stf.ko')) + mwexec('/sbin/kldload if_stf.ko'); + + $wanif = get_real_interface($interface); + $ip4address = find_interface_ip($wanif); + if ((!is_ipaddrv4($ip4address)) || (is_private_ip($ip4address))) { + log_error("The interface IPv4 '{$ip4address}' address on interface '{$wanif}' is not public, not configuring 6RD tunnel"); + return false; + } + $hexwanv4 = return_hex_ipv4($ip4address); + + if (!is_numeric($wancfg['prefix-6rd-v4plen'])) + $wancfg['prefix-6rd-v4plen'] = 0; + + /* create the long prefix notation for math, save the prefix length */ + $rd6prefix = explode("/", $wancfg['prefix-6rd']); + $rd6prefixlen = $rd6prefix[1]; + $rd6prefix = Net_IPv6::uncompress($rd6prefix[0]); + + /* binary presentation of the prefix for all 128 bits. */ + $rd6prefixbin = convert_ipv6_to_128bit($rd6prefix); + + /* just save the left prefix length bits */ + $rd6prefixbin = substr($rd6prefixbin, 0, $rd6prefixlen); + /* if the prefix length is not 32 bits we need to shave bits off from the left of the v4 address. */ + $rd6prefixbin .= substr(sprintf("%032b", hexdec($hexwanv4)), $wancfg['prefix-6rd-v4plen'], 32); + /* fill out the rest with 0's */ + $rd6prefixbin = str_pad($rd6prefixbin, 128, "0", STR_PAD_RIGHT); + + /* convert the 128 bits for the broker address back into a valid IPv6 address */ + $rd6prefix = convert_128bit_to_ipv6($rd6prefixbin); + + $rd6brgw = "{$rd6prefix}{$wancfg['gateway-6rd']}"; + + /* XXX: need to extend to support variable prefix size for v4 */ + if (!is_module_loaded("if_stf")) + mwexec("/sbin/kldload if_stf.ko"); + $stfiface = "{$interface}_stf"; + if (does_interface_exist($stfiface)) + pfSense_interface_destroy($stfiface); + $tmpstfiface = pfSense_interface_create("stf"); + pfSense_interface_rename($tmpstfiface, $stfiface); + pfSense_interface_flags($stfiface, IFF_LINK2); + if ($wancfg['prefix-6rd-v4plen'] > 0) + $rd6prefixlen += intval($wancfg['prefix-6rd-v4plen']); + else + $rd6prefixlen += 32; + mwexec("/sbin/ifconfig {$stfiface} inet6 {$rd6prefix}/{$rd6prefixlen}"); + mwexec("/sbin/ifconfig {$stfiface} stfv4br " . escapeshellarg($wancfg['gateway-6rd'])); + if ($wancfg['prefix-6rd-v4plen'] > 0 && $wancfg['prefix-6rd-v4plen'] < 32) + mwexec("/sbin/ifconfig {$stfiface} stfv4net {$ip4address}/{$wancfg['prefix-6rd-v4plen']}"); + if ($g['debug']) + log_error("Created 6rd interface {$stfiface} {$rd6prefix}/{$rd6prefixlen}"); + + /* write out a default router file */ + file_put_contents("{$g['tmp_path']}/{$wanif}_routerv6", "{$rd6brgw}\n"); + file_put_contents("{$g['tmp_path']}/{$wanif}_defaultgwv6", "{$rd6brgw}\n"); + + $ip4gateway = get_interface_gateway($interface); + if (is_ipaddrv4($ip4gateway)) + mwexec("/sbin/route change -host " . escapeshellarg($wancfg['gateway-6rd']) . " {$ip4gateway}"); + + /* configure dependent interfaces */ + if (!$g['booting']) + link_interface_to_track6($interface, "update"); + + return 0; +} + +function interface_6to4_configure($interface = "wan", $wancfg){ + global $config, $g; + + /* because this is a tunnel interface we can only function + * with a public IPv4 address on the interface */ + + if (!is_array($wancfg)) + return; + + $wanif = get_real_interface($interface); + $ip4address = find_interface_ip($wanif); + if((!is_ipaddrv4($ip4address)) || (is_private_ip($ip4address))) { + log_error("The interface IPv4 '{$ip4address}' address on interface '{$wanif}' is not public, not configuring 6RD tunnel"); + return false; + } + + /* create the long prefix notation for math, save the prefix length */ + $stfprefixlen = 16; + $stfprefix = Net_IPv6::uncompress("2002::"); + $stfarr = explode(":", $stfprefix); + $v4prefixlen = "0"; + + /* we need the hex form of the interface IPv4 address */ + $ip4arr = explode(".", $ip4address); + $hexwanv4 = ""; + foreach($ip4arr as $octet) + $hexwanv4 .= sprintf("%02x", $octet); + + /* we need the hex form of the broker IPv4 address */ + $ip4arr = explode(".", "192.88.99.1"); + $hexbrv4 = ""; + foreach($ip4arr as $octet) + $hexbrv4 .= sprintf("%02x", $octet); + + /* binary presentation of the prefix for all 128 bits. */ + $stfprefixbin = ""; + foreach($stfarr as $element) { + $stfprefixbin .= sprintf("%016b", hexdec($element)); + } + /* just save the left prefix length bits */ + $stfprefixstartbin = substr($stfprefixbin, 0, $stfprefixlen); + + /* if the prefix length is not 32 bits we need to shave bits off from the left of the v4 address. */ + $stfbrokerbin = substr(sprintf("%032b", hexdec($hexbrv4)), $v4prefixlen, 32); + $stfbrokerbin = str_pad($stfprefixstartbin . $stfbrokerbin, 128, "0", STR_PAD_RIGHT); + + /* for the local subnet too. */ + $stflanbin = substr(sprintf("%032b", hexdec($hexwanv4)), $v4prefixlen, 32); + $stflanbin = str_pad($stfprefixstartbin . $stflanbin, 128, "0", STR_PAD_RIGHT); + + /* convert the 128 bits for the broker address back into a valid IPv6 address */ + $stfbrarr = array(); + $stfbrbinarr = array(); + $stfbrbinarr = str_split($stfbrokerbin, 16); + foreach($stfbrbinarr as $bin) + $stfbrarr[] = dechex(bindec($bin)); + $stfbrgw = Net_IPv6::compress(implode(":", $stfbrarr)); + + /* convert the 128 bits for the broker address back into a valid IPv6 address */ + $stflanarr = array(); + $stflanbinarr = array(); + $stflanbinarr = str_split($stflanbin, 16); + foreach($stflanbinarr as $bin) + $stflanarr[] = dechex(bindec($bin)); + $stflanpr = Net_IPv6::compress(implode(":", $stflanarr)); + $stflanarr[7] = 1; + $stflan = Net_IPv6::compress(implode(":", $stflanarr)); + + /* setup the stf interface */ + if (!is_module_loaded("if_stf")) + mwexec("/sbin/kldload if_stf.ko"); + $stfiface = "{$interface}_stf"; + if (does_interface_exist($stfiface)) + pfSense_interface_destroy($stfiface); + $tmpstfiface = pfSense_interface_create("stf"); + pfSense_interface_rename($tmpstfiface, $stfiface); + pfSense_interface_flags($stfiface, IFF_LINK2); + mwexec("/sbin/ifconfig {$stfiface} inet6 {$stflanpr} prefixlen 16"); + + if ($g['debug']) + log_error("Set IPv6 address inet6 {$stflanpr} prefixlen 16 for {$stfiface}, route {$stfbrgw}"); + + /* write out a default router file */ + file_put_contents("{$g['tmp_path']}/{$wanif}_routerv6", "{$stfbrgw}"); + file_put_contents("{$g['tmp_path']}/{$wanif}_defaultgwv6", "{$stfbrgw}"); + + $ip4gateway = get_interface_gateway($interface); + if (is_ipaddrv4($ip4gateway)) + mwexec("/sbin/route change -host 192.88.99.1 {$ip4gateway}"); + + if (!$g['booting']) + link_interface_to_track6($interface, "update"); + + return 0; +} + +function interface_dhcpv6_configure($interface = "wan", $wancfg) { + global $config, $g; + + if (!is_array($wancfg)) + return; + + $wanif = get_real_interface($interface, "inet6"); + $dhcp6cconf = ""; + $dhcp6cconf .= "interface {$wanif} {\n"; + + /* for SLAAC interfaces we do fire off a dhcp6 client for just our name servers */ + if($wancfg['ipaddrv6'] == "slaac") { + $dhcp6cconf .= " information-only;\n"; + $dhcp6cconf .= " request domain-name-servers;\n"; + $dhcp6cconf .= " request domain-name;\n"; + $dhcp6cconf .= " script \"{$g['varetc_path']}/dhcp6c_{$interface}_script.sh\"; # we'd like some nameservers please\n"; + $dhcp6cconf .= "};\n"; + } else { + /* skip address request if this is set */ + if(!isset($wancfg['dhcp6prefixonly'])) + $dhcp6cconf .= " send ia-na 0; # request stateful address\n"; + if(is_numeric($wancfg['dhcp6-ia-pd-len'])) + $dhcp6cconf .= " send ia-pd 0; # request prefix delegation\n"; + + $dhcp6cconf .= "\trequest domain-name-servers;\n"; + $dhcp6cconf .= "\trequest domain-name;\n"; + $dhcp6cconf .= "\tscript \"{$g['varetc_path']}/dhcp6c_{$interface}_script.sh\"; # we'd like some nameservers please\n"; + + $dhcp6cconf .= "};\n"; + + if(!isset($wancfg['dhcp6prefixonly'])) + $dhcp6cconf .= "id-assoc na 0 { };\n"; + + if(is_numeric($wancfg['dhcp6-ia-pd-len'])) { + /* Setup the prefix delegation */ + $dhcp6cconf .= "id-assoc pd 0 {\n"; + $preflen = 64 - $wancfg['dhcp6-ia-pd-len']; + if (isset($wancfg['dhcp6-ia-pd-send-hint'])) + $dhcp6cconf .= " prefix ::/{$preflen} infinity;\n"; + $iflist = link_interface_to_track6($interface); + foreach ($iflist as $friendly => $ifcfg) { + if (is_numeric($ifcfg['track6-prefix-id'])) { + if ($g['debug']) + log_error("setting up $ifdescr - {$ifcfg['track6-prefix-id']}"); + $realif = get_real_interface($friendly); + $dhcp6cconf .= " prefix-interface {$realif} {\n"; + $dhcp6cconf .= " sla-id {$ifcfg['track6-prefix-id']};\n"; + $dhcp6cconf .= " sla-len {$wancfg['dhcp6-ia-pd-len']};\n"; + $dhcp6cconf .= " };\n"; + } + } + unset($preflen, $iflist, $ifcfg); + $dhcp6cconf .= "};\n"; + } + } + + // DHCP6 Config File Advanced + if ($wancfg['adv_dhcp6_config_advanced']) { $dhcp6cconf = DHCP6_Config_File_Advanced($interface, $wancfg, $wanif); } + + // DHCP6 Config File Override + if ($wancfg['adv_dhcp6_config_file_override']) { $dhcp6cconf = DHCP6_Config_File_Override($wancfg, $wanif); } + + /* wide-dhcp6c works for now. */ + if (!@file_put_contents("{$g['varetc_path']}/dhcp6c_{$interface}.conf", $dhcp6cconf)) { + printf("Error: cannot open dhcp6c_{$interface}.conf in interface_dhcpv6_configure() for writing.\n"); + unset($dhcp6cconf); + return 1; + } + unset($dhcp6cconf); + + $dhcp6cscript = "#!/bin/sh\n"; + $dhcp6cscript .= "# This shell script launches /etc/rc.newwanipv6 with a interface argument.\n"; + $dhcp6cscript .= "dmips=\${new_domain_name_servers}\n"; + $dhcp6cscript .= "dmnames=\${new_domain_name}\n"; + $dhcp6cscript .= "/usr/local/sbin/fcgicli -f /etc/rc.newwanipv6 -d \"interface={$wanif}&dmnames=\${dmnames}&dmips=\${dmips}\"\n"; + /* Add wide-dhcp6c shell script here. Because we can not pass a argument to it. */ + if (!@file_put_contents("{$g['varetc_path']}/dhcp6c_{$interface}_script.sh", $dhcp6cscript)) { + printf("Error: cannot open dhcp6c_{$interface}_script.sh in interface_dhcpv6_configure() for writing.\n"); + unset($dhcp6cscript); + return 1; + } + unset($dhcp6cscript); + @chmod("{$g['varetc_path']}/dhcp6c_{$interface}_script.sh", 0755); + + $rtsoldscript = "#!/bin/sh\n"; + $rtsoldscript .= "# This shell script launches dhcp6c and configured gateways for this interface.\n"; + $rtsoldscript .= "echo $2 > {$g['tmp_path']}/{$wanif}_routerv6\n"; + $rtsoldscript .= "echo $2 > {$g['tmp_path']}/{$wanif}_defaultgwv6\n"; + $rtsoldscript .= "if [ -f {$g['varrun_path']}/dhcp6c_{$wanif}.pid ]; then\n"; + $rtsoldscript .= "\t/bin/pkill -F {$g['varrun_path']}/dhcp6c_{$wanif}.pid\n"; + $rtsoldscript .= "\t/bin/sleep 1\n"; + $rtsoldscript .= "fi\n"; + $rtsoldscript .= "/usr/local/sbin/dhcp6c -d -c {$g['varetc_path']}/dhcp6c_{$interface}.conf -p {$g['varrun_path']}/dhcp6c_{$wanif}.pid {$wanif}\n"; + $rtsoldscript .= "/usr/bin/logger -t rtsold \"Starting dhcp6 client for interface {$interface}({$wanif})\"\n"; + /* Add wide-dhcp6c shell script here. Because we can not pass a argument to it. */ + if (!@file_put_contents("{$g['varetc_path']}/rtsold_{$wanif}_script.sh", $rtsoldscript)) { + printf("Error: cannot open rtsold_{$interface}_script.sh in interface_dhcpv6_configure() for writing.\n"); + unset($rtsoldscript); + return 1; + } + unset($rtsoldscript); + @chmod("{$g['varetc_path']}/rtsold_{$wanif}_script.sh", 0755); + + /* accept router advertisements for this interface */ + set_single_sysctl("net.inet6.ip6.accept_rtadv", "1"); + log_error("Accept router advertisements on interface {$wanif} "); + mwexec("/sbin/ifconfig {$wanif} inet6 accept_rtadv"); + + /* fire up rtsold for IPv6 RAs first, this backgrounds immediately. It will call dhcp6c */ + if (isvalidpid("{$g['varrun_path']}/rtsold_{$wanif}.pid")) { + killbypid("{$g['varrun_path']}/rtsold_{$wanif}.pid"); + sleep(2); + } + mwexec("/usr/sbin/rtsold -1 -p {$g['varrun_path']}/rtsold_{$wanif}.pid -O {$g['varetc_path']}/rtsold_{$wanif}_script.sh {$wanif}"); + + /* NOTE: will be called from rtsold invoked script + * link_interface_to_track6($interface, "update"); + */ + + return 0; +} + +function DHCP6_Config_File_Advanced($interface, $wancfg, $wanif) { + global $g; + + $send_options = ""; + if ($wancfg['adv_dhcp6_interface_statement_send_options'] != '') { + $options = split(",", $wancfg['adv_dhcp6_interface_statement_send_options']); + foreach ($options as $option) { + $send_options .= "\tsend " . trim($option) . ";\n"; + } + } + + $request_options = ""; + if ($wancfg['adv_dhcp6_interface_statement_request_options'] != '') { + $options = split(",", $wancfg['adv_dhcp6_interface_statement_request_options']); + foreach ($options as $option) { + $request_options .= "\trequest " . trim($option) . ";\n"; + } + } + + $information_only = ""; + if ($wancfg['adv_dhcp6_interface_statement_information_only_enable'] != '') + $information_only = "\tinformation-only;\n"; + + $script = "\tscript \"{$g['varetc_path']}/dhcp6c_{$interface}_script.sh\";\n"; + if ($wancfg['adv_dhcp6_interface_statement_script'] != '') + $script = "\tscript \"{$wancfg['adv_dhcp6_interface_statement_script']}\";\n"; + + $interface_statement = "interface"; + $interface_statement .= " {$wanif}"; + $interface_statement .= " {\n"; + $interface_statement .= "$send_options"; + $interface_statement .= "$request_options"; + $interface_statement .= "$information_only"; + $interface_statement .= "$script"; + $interface_statement .= "};\n"; + + $id_assoc_statement_address = ""; + if ($wancfg['adv_dhcp6_id_assoc_statement_address_enable'] != '') { + $id_assoc_statement_address .= "id-assoc"; + $id_assoc_statement_address .= " na"; + if (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_address_id'])) + $id_assoc_statement_address .= " {$wancfg['adv_dhcp6_id_assoc_statement_address_id']}"; + $id_assoc_statement_address .= " { "; + + if ( ($wancfg['adv_dhcp6_id_assoc_statement_address'] != '') && + (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_address_pltime']) || + ($wancfg['adv_dhcp6_id_assoc_statement_address_pltime'] == 'infinity')) ) { + $id_assoc_statement_address .= "\n\taddress"; + $id_assoc_statement_address .= " {$wancfg['adv_dhcp6_id_assoc_statement_address']}"; + $id_assoc_statement_address .= " {$wancfg['adv_dhcp6_id_assoc_statement_address_pltime']}"; + if ( (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_address_vltime'])) || + ($wancfg['adv_dhcp6_id_assoc_statement_address_vltime'] == 'infinity') ) + $id_assoc_statement_address .= " {$wancfg['adv_dhcp6_id_assoc_statement_address_vltime']}"; + $id_assoc_statement_address .= ";\n"; + } + + $id_assoc_statement_address .= "};\n"; + } + + $id_assoc_statement_prefix = ""; + if ($wancfg['adv_dhcp6_id_assoc_statement_prefix_enable'] != '') { + $id_assoc_statement_prefix .= "id-assoc"; + $id_assoc_statement_prefix .= " pd"; + if (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_prefix_id'])) + $id_assoc_statement_prefix .= " {$wancfg['adv_dhcp6_id_assoc_statement_prefix_id']}"; + $id_assoc_statement_prefix .= " { "; + + if ( ($wancfg['adv_dhcp6_id_assoc_statement_prefix'] != '') && + (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime']) || + ($wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime'] == 'infinity')) ) { + $id_assoc_statement_prefix .= "\n\tprefix"; + $id_assoc_statement_prefix .= " {$wancfg['adv_dhcp6_id_assoc_statement_prefix']}"; + $id_assoc_statement_prefix .= " {$wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime']}"; + if ( (is_numeric($wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime'])) || + ($wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime'] == 'infinity') ) + $id_assoc_statement_prefix .= " {$wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime']}"; + $id_assoc_statement_prefix .= ";"; + } + + if (is_numeric($wancfg['adv_dhcp6_prefix_interface_statement_sla_id'])) { + $id_assoc_statement_prefix .= "\n\tprefix-interface"; + $id_assoc_statement_prefix .= " {$wanif}"; + $id_assoc_statement_prefix .= " {\n"; + $id_assoc_statement_prefix .= "\t\tsla-id {$wancfg['adv_dhcp6_prefix_interface_statement_sla_id']};\n"; + if ( ($wancfg['adv_dhcp6_prefix_interface_statement_sla_len'] >= 0) && + ($wancfg['adv_dhcp6_prefix_interface_statement_sla_len'] <= 128) ) + $id_assoc_statement_prefix .= "\t\tsla-len {$wancfg['adv_dhcp6_prefix_interface_statement_sla_len']};\n"; + $id_assoc_statement_prefix .= "\t};"; + } + + if ( ($wancfg['adv_dhcp6_id_assoc_statement_prefix'] != '') || + (is_numeric($wancfg['adv_dhcp6_prefix_interface_statement_sla_id'])) ) { + $id_assoc_statement_prefix .= "\n"; + } + + $id_assoc_statement_prefix .= "};\n"; + } + + $authentication_statement = ""; + if ( ($wancfg['adv_dhcp6_authentication_statement_authname'] != '') && + ($wancfg['adv_dhcp6_authentication_statement_protocol'] == 'delayed') ) { + $authentication_statement .= "authentication"; + $authentication_statement .= " {$wancfg['adv_dhcp6_authentication_statement_authname']}"; + $authentication_statement .= " {\n"; + $authentication_statement .= "\tprotocol {$wancfg['adv_dhcp6_authentication_statement_protocol']};\n"; + if (preg_match("/(hmac(-)?md5)||(HMAC(-)?MD5)/", $wancfg['adv_dhcp6_authentication_statement_algorithm'])) + $authentication_statement .= "\talgorithm {$wancfg['adv_dhcp6_authentication_statement_algorithm']};\n"; + if ($wancfg['adv_dhcp6_authentication_statement_rdm'] == 'monocounter') + $authentication_statement .= "\trdm {$wancfg['adv_dhcp6_authentication_statement_rdm']};\n"; + $authentication_statement .= "};\n"; + } + + $key_info_statement = ""; + if ( ($wancfg['adv_dhcp6_key_info_statement_keyname'] != '') && + ($wancfg['adv_dhcp6_key_info_statement_realm'] != '') && + (is_numeric($wancfg['adv_dhcp6_key_info_statement_keyid'])) && + ($wancfg['adv_dhcp6_key_info_statement_secret'] != '') ) { + $key_info_statement .= "keyinfo"; + $key_info_statement .= " {$wancfg['adv_dhcp6_key_info_statement_keyname']}"; + $key_info_statement .= " {\n"; + $key_info_statement .= "\trealm \"{$wancfg['adv_dhcp6_key_info_statement_realm']}\";\n"; + $key_info_statement .= "\tkeyid {$wancfg['adv_dhcp6_key_info_statement_keyid']};\n"; + $key_info_statement .= "\tsecret \"{$wancfg['adv_dhcp6_key_info_statement_secret']}\";\n"; + if (preg_match("/((([0-9]{4}-)?[0-9]{2}[0-9]{2} )?[0-9]{2}:[0-9]{2})||(foreever)/", $wancfg['adv_dhcp6_key_info_statement_expire'])) + $key_info_statement .= "\texpire \"{$wancfg['adv_dhcp6_key_info_statement_expire']}\";\n"; + $key_info_statement .= "};\n"; + } + + $dhcp6cconf = $interface_statement; + $dhcp6cconf .= $id_assoc_statement_address; + $dhcp6cconf .= $id_assoc_statement_prefix; + $dhcp6cconf .= $authentication_statement; + $dhcp6cconf .= $key_info_statement; + + $dhcp6cconf = DHCP6_Config_File_Substitutions($wancfg, $wanif, $dhcp6cconf); + + return $dhcp6cconf; +} + + +function DHCP6_Config_File_Override($wancfg, $wanif) { + + $dhcp6cconf = file_get_contents($wancfg['adv_dhcp6_config_file_override_path']); + $dhcp6cconf = DHCP6_Config_File_Substitutions($wancfg, $wanif, $dhcp6cconf); + + return $dhcp6cconf; +} + + +function DHCP6_Config_File_Substitutions($wancfg, $wanif, $dhcp6cconf) { + + $dhcp6cconf = DHCP_Config_File_Substitutions($wancfg, $wanif, $dhcp6cconf); + + return $dhcp6cconf; +} + + +function interface_dhcp_configure($interface = "wan") { + global $config, $g; + + $wancfg = $config['interfaces'][$interface]; + $wanif = $wancfg['if']; + if (empty($wancfg)) + $wancfg = array(); + + /* generate dhclient_wan.conf */ + $fd = fopen("{$g['varetc_path']}/dhclient_{$interface}.conf", "w"); + if (!$fd) { + printf(printf(gettext("Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for writing.%s"), $interface, "\n")); + return 1; + } + + if ($wancfg['dhcphostname']) { + $dhclientconf_hostname = "send dhcp-client-identifier \"{$wancfg['dhcphostname']}\";\n"; + $dhclientconf_hostname .= "\tsend host-name \"{$wancfg['dhcphostname']}\";\n"; + } else { + $dhclientconf_hostname = ""; + } + + $wanif = get_real_interface($interface); + if (empty($wanif)) { + log_error(sprintf(gettext("Invalid interface \"%s\" in interface_dhcp_configure()"), $interface)); + return 0; + } + $dhclientconf = ""; + + $dhclientconf .= << {$g['tmp_path']}/{$wanif}_output 2> {$g['tmp_path']}/{$wanif}_error_output"); + + return 0; +} + +function DHCP_Config_File_Advanced($interface, $wancfg, $wanif) { + + $hostname = ""; + if ($wancfg['dhcphostname'] != '') { + $hostname = "\tsend host-name \"{$wancfg['dhcphostname']}\";\n"; + } + + /* DHCP Protocol Timings */ + $protocol_timings = array ('adv_dhcp_pt_timeout' => "timeout", 'adv_dhcp_pt_retry' => "retry", 'adv_dhcp_pt_select_timeout' => "select-timeout", 'adv_dhcp_pt_reboot' => "reboot", 'adv_dhcp_pt_backoff_cutoff' => "backoff-cutoff", 'adv_dhcp_pt_initial_interval' => "initial-interval"); + foreach ($protocol_timings as $Protocol_Timing => $PT_Name) { + $pt_variable = "{$Protocol_Timing}"; + ${$pt_variable} = ""; + if ($wancfg[$Protocol_Timing] != "") { + ${$pt_variable} = "{$PT_Name} {$wancfg[$Protocol_Timing]};\n"; + } + } + + $send_options = ""; + if ($wancfg['adv_dhcp_send_options'] != '') { + $options = split(",", $wancfg['adv_dhcp_send_options']); + foreach ($options as $option) { + $send_options .= "\tsend " . trim($option) . ";\n"; + } + } + + $request_options = ""; + if ($wancfg['adv_dhcp_request_options'] != '') { + $request_options = "\trequest {$wancfg['adv_dhcp_request_options']};\n"; + } + + $required_options = ""; + if ($wancfg['adv_dhcp_required_options'] != '') { + $required_options = "\trequire {$wancfg['adv_dhcp_required_options']};\n"; + } + + $option_modifiers = ""; + if ($wancfg['adv_dhcp_option_modifiers'] != '') { + $modifiers = split(",", $wancfg['adv_dhcp_option_modifiers']); + foreach ($modifiers as $modifier) { + $option_modifiers .= "\t" . trim($modifier) . ";\n"; + } + } + + $dhclientconf = "interface \"{$wanif}\" {\n"; + $dhclientconf .= "\n"; + $dhclientconf .= "# DHCP Protocol Timing Values\n"; + $dhclientconf .= "{$adv_dhcp_pt_timeout}"; + $dhclientconf .= "{$adv_dhcp_pt_retry}"; + $dhclientconf .= "{$adv_dhcp_pt_select_timeout}"; + $dhclientconf .= "{$adv_dhcp_pt_reboot}"; + $dhclientconf .= "{$adv_dhcp_pt_backoff_cutoff}"; + $dhclientconf .= "{$adv_dhcp_pt_initial_interval}"; + $dhclientconf .= "\n"; + $dhclientconf .= "# DHCP Protocol Options\n"; + $dhclientconf .= "{$hostname}"; + $dhclientconf .= "{$send_options}"; + $dhclientconf .= "{$request_options}"; + $dhclientconf .= "{$required_options}"; + $dhclientconf .= "{$option_modifiers}"; + $dhclientconf .= "\n"; + $dhclientconf .= "\tscript \"/sbin/dhclient-script\";\n"; + $dhclientconf .= "}\n"; + + $dhclientconf = DHCP_Config_File_Substitutions($wancfg, $wanif, $dhclientconf); + + return $dhclientconf; +} + + +function DHCP_Config_File_Override($wancfg, $wanif) { + + $dhclientconf = file_get_contents($wancfg['adv_dhcp_config_file_override_path']); + $dhclientconf = DHCP_Config_File_Substitutions($wancfg, $wanif, $dhclientconf); + + return $dhclientconf; +} + + +function DHCP_Config_File_Substitutions($wancfg, $wanif, $dhclientconf) { + + /* Apply Interface Substitutions */ + $dhclientconf = str_replace("{interface}", "{$wanif}", $dhclientconf); + + /* Apply Hostname Substitutions */ + $dhclientconf = str_replace("{hostname}", $wancfg['dhcphostname'], $dhclientconf); + + /* Arrays of MAC Address Types, Cases, Delimiters */ + /* ASCII or HEX, Upper or Lower Case, Various Delimiters (none, space, colon, hyphen, period) */ + $various_mac_types = array("mac_addr_ascii", "mac_addr_hex"); + $various_mac_cases = array("U", "L"); + $various_mac_delimiters = array("", " ", ":", "-", "."); + + /* Apply MAC Address Substitutions */ + foreach ($various_mac_types as $various_mac_type) { + foreach ($various_mac_cases as $various_mac_case) { + foreach ($various_mac_delimiters as $various_mac_delimiter) { + + $res = stripos($dhclientconf, $various_mac_type . $various_mac_case . $various_mac_delimiter); + if ($res !== false) { + + /* Get MAC Address as ASCII String With Colon (:) Celimiters */ + if ("$various_mac_case" == "U") $dhcpclientconf_mac = strtoupper(get_interface_mac($wanif)); + if ("$various_mac_case" == "L") $dhcpclientconf_mac = strtolower(get_interface_mac($wanif)); + + if ("$various_mac_type" == "mac_addr_hex") { + /* Convert MAC ascii string to HEX with colon (:) delimiters. */ + $dhcpclientconf_mac = str_replace(":", "", $dhcpclientconf_mac); + $dhcpclientconf_mac_hex = ""; + $delimiter = ""; + for($i = 0; $i < strlen($dhcpclientconf_mac); $i++) { + $dhcpclientconf_mac_hex .= $delimiter. bin2hex($dhcpclientconf_mac[$i]); + $delimiter = ":"; + } + $dhcpclientconf_mac = $dhcpclientconf_mac_hex; + } + + /* MAC Address Delimiter Substitutions */ + $dhcpclientconf_mac = str_replace(":", $various_mac_delimiter, $dhcpclientconf_mac); + + /* Apply MAC Address Substitutions */ + $dhclientconf = str_replace("{" . $various_mac_type . $various_mac_case . $various_mac_delimiter . "}", $dhcpclientconf_mac, $dhclientconf); + } + } + } + } + + return $dhclientconf; +} + +function interfaces_group_setup() { + global $config; + + if (!is_array($config['ifgroups']['ifgroupentry'])) + return; + + foreach ($config['ifgroups']['ifgroupentry'] as $groupar) + interface_group_setup($groupar); + + return; +} + +function interface_group_setup(&$groupname /* The parameter is an array */) { + global $config; + + if (!is_array($groupname)) + return; + $members = explode(" ", $groupname['members']); + foreach($members as $ifs) { + $realif = get_real_interface($ifs); + if ($realif) + mwexec("/sbin/ifconfig {$realif} group {$groupname['ifname']}"); + } + + return; +} + +function is_interface_group($if) { + global $config; + + if (is_array($config['ifgroups']['ifgroupentry'])) + foreach ($config['ifgroups']['ifgroupentry'] as $groupentry) { + if ($groupentry['ifname'] === $if) + return true; + } + + return false; +} + +function interface_group_add_member($interface, $groupname) { + $interface = get_real_interface($interface); + mwexec("/sbin/ifconfig {$interface} group " . escapeshellarg($groupname), true); +} + +/* COMPAT Function */ +function convert_friendly_interface_to_real_interface_name($interface) { + return get_real_interface($interface); +} + +/* COMPAT Function */ +function get_real_wan_interface($interface = "wan") { + return get_real_interface($interface); +} + +/* COMPAT Function */ +function get_current_wan_address($interface = "wan") { + return get_interface_ip($interface); +} + +/* + * convert_real_interface_to_friendly_interface_name($interface): convert fxp0 -> wan, etc. + */ +function convert_real_interface_to_friendly_interface_name($interface = "wan") { + global $config; + + /* XXX: For speed reasons reference directly the interface array */ + $ifdescrs = &$config['interfaces']; + //$ifdescrs = get_configured_interface_list(false, true); + + foreach ($ifdescrs as $if => $ifname) { + if ($if == $interface || $ifname['if'] == $interface) + return $if; + + if (get_real_interface($if) == $interface) + return $if; + + $int = get_parent_interface($if, true); + if (is_array($int)) { + foreach ($int as $iface) { + if ($iface == $interface) + return $if; + } + } + } + + if ($interface == "enc0") + return 'IPsec'; + + return NULL; +} + +/* attempt to resolve interface to friendly descr */ +function convert_friendly_interface_to_friendly_descr($interface) { + global $config; + + switch ($interface) { + case "l2tp": + $ifdesc = "L2TP"; + break; + case "pptp": + $ifdesc = "PPTP"; + break; + case "pppoe": + $ifdesc = "PPPoE"; + break; + case "openvpn": + $ifdesc = "OpenVPN"; + break; + case "enc0": + case "ipsec": + case "IPsec": + $ifdesc = "IPsec"; + break; + default: + if (isset($config['interfaces'][$interface])) { + if (empty($config['interfaces'][$interface]['descr'])) + $ifdesc = strtoupper($interface); + else + $ifdesc = strtoupper($config['interfaces'][$interface]['descr']); + break; + } else if (stristr($interface, "_vip")) { + if (is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $counter => $vip) { + if ($vip['mode'] == "carp") { + if ($interface == "{$vip['interface']}_vip{$vip['vhid']}") + return "{$vip['subnet']} - {$vip['descr']}"; + } + } + } + } else { + /* if list */ + $ifdescrs = get_configured_interface_with_descr(false, true); + foreach ($ifdescrs as $if => $ifname) { + if ($if == $interface || $ifname == $interface) + return $ifname; + } + } + break; + } + + return $ifdesc; +} + +function convert_real_interface_to_friendly_descr($interface) { + + $ifdesc = convert_real_interface_to_friendly_interface_name("{$interface}"); + + if (!empty($ifdesc)) + return convert_friendly_interface_to_friendly_descr($ifdesc); + + return $interface; +} + +/* + * get_parent_interface($interface): + * --returns the (real or virtual) parent interface(s) array for a given interface friendly name (i.e. wan) + * or virtual interface (i.e. vlan) + * (We need array because MLPPP and bridge interfaces have more than one parent.) + * -- returns $interface passed in if $interface parent is not found + * -- returns empty array if an invalid interface is passed + * (Only handles ppps and vlans now.) + */ +function get_parent_interface($interface, $avoidrecurse = false) { + global $config; + + $parents = array(); + //Check that we got a valid interface passed + $realif = get_real_interface($interface); + if ($realif == NULL) + return $parents; + + // If we got a real interface, find it's friendly assigned name + if ($interface == $realif && $avoidrecurse == false) + $interface = convert_real_interface_to_friendly_interface_name($interface); + + if (!empty($interface) && isset($config['interfaces'][$interface])) { + $ifcfg = $config['interfaces'][$interface]; + switch ($ifcfg['ipaddr']) { + case "ppp": + case "pppoe": + case "pptp": + case "l2tp": + if (empty($parents)) + if (is_array($config['ppps']['ppp'])) + foreach ($config['ppps']['ppp'] as $pppidx => $ppp) { + if ($ifcfg['if'] == $ppp['if']) { + $ports = explode(',', $ppp['ports']); + foreach ($ports as $pid => $parent_if) + $parents[$pid] = get_real_interface($parent_if); + break; + } + } + break; + case "dhcp": + case "static": + default: + // Handle _vlans + if (stristr($realif,"_vlan")) + if (is_array($config['vlans']['vlan'])) + foreach ($config['vlans']['vlan'] as $vlanidx => $vlan) + if ($ifcfg['if'] == $vlan['vlanif']){ + $parents[0] = $vlan['if']; + break; + } + break; + } + } + + if (empty($parents)) + $parents[0] = $realif; + + return $parents; +} + +function interface_is_wireless_clone($wlif) { + if(!stristr($wlif, "_wlan")) { + return false; + } else { + return true; + } +} + +function interface_get_wireless_base($wlif) { + if(!stristr($wlif, "_wlan")) { + return $wlif; + } else { + return substr($wlif, 0, stripos($wlif, "_wlan")); + } +} + +function interface_get_wireless_clone($wlif) { + if(!stristr($wlif, "_wlan")) { + return $wlif . "_wlan0"; + } else { + return $wlif; + } +} + +function get_real_interface($interface = "wan", $family = "all", $realv6iface = false, $flush = true) { + global $config, $g; + + $wanif = NULL; + + switch ($interface) { + case "l2tp": + $wanif = "l2tp"; + break; + case "pptp": + $wanif = "pptp"; + break; + case "pppoe": + $wanif = "pppoe"; + break; + case "openvpn": + $wanif = "openvpn"; + break; + case "ipsec": + case "enc0": + $wanif = "enc0"; + break; + case "ppp": + $wanif = "ppp"; + break; + default: + // If a real interface was alread passed simply + // pass the real interface back. This encourages + // the usage of this function in more cases so that + // we can combine logic for more flexibility. + if(does_interface_exist($interface, $flush)) { + $wanif = $interface; + break; + } + + if (empty($config['interfaces'][$interface])) + break; + + $cfg = &$config['interfaces'][$interface]; + + if ($family == "inet6") { + switch ($cfg['ipaddrv6']) { + case "6rd": + case "6to4": + $wanif = "{$interface}_stf"; + break; + case 'pppoe': + case 'ppp': + case 'l2tp': + case 'pptp': + if( is_array($cfg['wireless']) || preg_match($g['wireless_regex'], $cfg['if'])) + $wanif = interface_get_wireless_clone($cfg['if']); + else + $wanif = $cfg['if']; + break; + default: + switch ($cfg['ipaddr']) { + case 'pppoe': + case 'ppp': + case 'l2tp': + case 'pptp': + if (isset($cfg['dhcp6usev4iface']) && $realv6iface === false) + $wanif = $cfg['if']; + else { + $parents = get_parent_interface($interface); + if (!empty($parents[0])) + $wanif = $parents[0]; + else + $wanif = $cfg['if']; + } + break; + default: + if( is_array($cfg['wireless']) || preg_match($g['wireless_regex'], $cfg['if'])) + $wanif = interface_get_wireless_clone($cfg['if']); + else + $wanif = $cfg['if']; + break; + } + break; + } + } else { + // Wireless cloned NIC support (FreeBSD 8+) + // interface name format: $parentnic_wlanparentnic# + // example: ath0_wlan0 + if( is_array($cfg['wireless']) || preg_match($g['wireless_regex'], $cfg['if'])) + $wanif = interface_get_wireless_clone($cfg['if']); + else + $wanif = $cfg['if']; + } + break; + } + + return $wanif; +} + +/* Guess the physical interface by providing a IP address */ +function guess_interface_from_ip($ipaddress) { + if(! is_ipaddr($ipaddress)) { + return false; + } + if(is_ipaddrv4($ipaddress)) { + /* create a route table we can search */ + exec("/usr/bin/netstat -rnWf inet", $output, $ret); + foreach($output as $line) { + if(preg_match("/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+[ ]+link[#]/", $line)) { + $fields = preg_split("/[ ]+/", $line); + if(ip_in_subnet($ipaddress, $fields[0])) { + return $fields[5]; + } + } + } + } + /* FIXME: This works from cursory testing, regexp might need fine tuning */ + if(is_ipaddrv6($ipaddress)) { + /* create a route table we can search */ + exec("/usr/bin/netstat -rnWf inet6", $output, $ret); + foreach($output as $line) { + if(preg_match("/[0-9a-f]+[:]+[0-9a-f]+[:]+[\/][0-9]+/", $line)) { + $fields = preg_split("/[ ]+/", $line); + if(ip_in_subnet($ipaddress, $fields[0])) { + return $fields[5]; + } + } + } + } + $ret = exec_command("/sbin/route -n get {$ipaddress} | /usr/bin/awk '/interface/ { print \$2; };'"); + if(empty($ret)) { + return false; + } + return $ret; +} + +/* + * find_ip_interface($ip): return the interface where an ip is defined + * (or if $bits is specified, where an IP within the subnet is defined) + */ +function find_ip_interface($ip, $bits = null) { + if (!is_ipaddr($ip)) + return false; + + $isv6ip = is_ipaddrv6($ip); + + /* if list */ + $ifdescrs = get_configured_interface_list(); + + foreach ($ifdescrs as $ifdescr => $ifname) { + $ifip = ($isv6ip) ? get_interface_ipv6($ifname) : get_interface_ip($ifname); + if (is_null($ifip)) + continue; + if (is_null($bits)) { + if ($ip == $ifip) { + $int = get_real_interface($ifname); + return $int; + } + } + else { + if (ip_in_subnet($ifip, $ip . "/" . $bits)) { + $int = get_real_interface($ifname); + return $int; + } + } + } + + return false; +} + +/* + * find_virtual_ip_alias($ip): return the virtual IP alias where an IP is found + * (or if $bits is specified, where an IP within the subnet is found) + */ +function find_virtual_ip_alias($ip, $bits = null) { + global $config; + + if (!is_array($config['virtualip']['vip'])) { + return false; + } + if (!is_ipaddr($ip)) + return false; + + $isv6ip = is_ipaddrv6($ip); + + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['mode'] === "ipalias") { + if (is_ipaddrv6($vip['subnet']) != $isv6ip) + continue; + if (is_null($bits)) { + if (ip_in_subnet($ip, $vip['subnet'] . "/" . $vip['subnet_bits'])) { + return $vip; + } + } + else { + if (($isv6ip && check_subnetsv6_overlap($ip, $bits, $vip['subnet'], $vip['subnet_bits'])) + || (!$isv6ip && check_subnets_overlap($ip, $bits, $vip['subnet'], $vip['subnet_bits']))) { + return $vip; + } + } + } + } + return false; +} + +/* + * find_number_of_created_carp_interfaces: return the number of carp interfaces + */ +function find_number_of_created_carp_interfaces() { + return `/sbin/ifconfig | grep "carp:" | wc -l`; +} + +/* + * find_carp_interface($ip): return the carp interface where an ip is defined + */ +function find_carp_interface($ip) { + global $config; + if (is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['mode'] == "carp") { + if(is_ipaddrv4($ip)) { + $carp_ip = get_interface_ip($vip['interface']); + } + if(is_ipaddrv6($ip)) { + $carp_ip = get_interface_ipv6($vip['interface']); + } + exec("/sbin/ifconfig", $output, $return); + foreach($output as $line) { + $elements = preg_split("/[ ]+/i", $line); + if(strstr($elements[0], "vip")) + $curif = str_replace(":", "", $elements[0]); + if(stristr($line, $ip)) { + $if = $curif; + continue; + } + } + + if ($if) + return $if; + } + } + } +} + +function link_carp_interface_to_parent($interface) { + global $config; + + if (empty($interface)) + return; + + $carp_ip = get_interface_ip($interface); + $carp_ipv6 = get_interface_ipv6($interface); + + if((!is_ipaddrv4($carp_ip)) && (!is_ipaddrv6($carp_ipv6))) + return; + + /* if list */ + $ifdescrs = get_configured_interface_list(); + foreach ($ifdescrs as $ifdescr => $ifname) { + /* check IPv4 */ + if(is_ipaddrv4($carp_ip)) { + $interfaceip = get_interface_ip($ifname); + $subnet_bits = get_interface_subnet($ifname); + $subnet_ip = gen_subnet("{$interfaceip}", "{$subnet_bits}"); + if(ip_in_subnet($carp_ip, "{$subnet_ip}/{$subnet_bits}")) + return $ifname; + } + /* Check IPv6 */ + if(is_ipaddrv6($carp_ipv6)) { + $interfaceipv6 = get_interface_ipv6($ifname); + $prefixlen = get_interface_subnetv6($ifname); + if(ip_in_subnet($carp_ipv6, "{$interfaceipv6}/{$prefixlen}")) + return $ifname; + } + } + return ""; +} + + +/****f* interfaces/link_ip_to_carp_interface + * NAME + * link_ip_to_carp_interface - Find where a CARP interface links to. + * INPUTS + * $ip + * RESULT + * $carp_ints + ******/ +function link_ip_to_carp_interface($ip) { + global $config; + + if (!is_ipaddr($ip)) + return; + + $carp_ints = ""; + if (is_array($config['virtualip']['vip'])) { + $first = 0; + $carp_int = array(); + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['mode'] == "carp") { + $carp_ip = $vip['subnet']; + $carp_sn = $vip['subnet_bits']; + $carp_nw = gen_subnet($carp_ip, $carp_sn); + if (ip_in_subnet($ip, "{$carp_nw}/{$carp_sn}")) { + $carp_int[] = get_real_interface($vip['interface']); + } + } + } + if (!empty($carp_int)) + $carp_ints = implode(" ", array_unique($carp_int)); + } + + return $carp_ints; +} + +function link_interface_to_track6($int, $action = "") { + global $config; + + if (empty($int)) + return; + + if (is_array($config['interfaces'])) { + $list = array(); + foreach ($config['interfaces'] as $ifname => $ifcfg) { + if (!isset($ifcfg['enable'])) + continue; + if (!empty($ifcfg['ipaddrv6']) && $ifcfg['track6-interface'] == $int) { + if ($action == "update") + interface_track6_configure($ifname, $ifcfg); + else if ($action == "") + $list[$ifname] = $ifcfg; + } + } + return $list; + } +} + +function link_interface_to_vlans($int, $action = "") { + global $config; + + if (empty($int)) + return; + + if (is_array($config['vlans']['vlan'])) { + $ifaces = array(); + foreach ($config['vlans']['vlan'] as $vlan) { + if ($int == $vlan['if']) { + if ($action == "update") { + interfaces_bring_up($int); + } else if ($action == "") + $ifaces[$vlan['tag']] = $vlan; + } + } + if (!empty($ifaces)) + return $ifaces; + } +} + +function link_interface_to_vips($int, $action = "") { + global $config; + + if (is_array($config['virtualip']['vip'])) { + $result = array(); + foreach ($config['virtualip']['vip'] as $vip) { + if ($int == $vip['interface']) { + if ($action == "update") + interfaces_vips_configure($int); + else + $result[] = $vip; + } + } + return $result; + } +} + +/****f* interfaces/link_interface_to_bridge + * NAME + * link_interface_to_bridge - Finds out a bridge group for an interface + * INPUTS + * $ip + * RESULT + * bridge[0-99] + ******/ +function link_interface_to_bridge($int) { + global $config; + + if (is_array($config['bridges']['bridged'])) { + foreach ($config['bridges']['bridged'] as $bridge) { + if (in_array($int, explode(',', $bridge['members']))) + return "{$bridge['bridgeif']}"; + } + } +} + +function link_interface_to_group($int) { + global $config; + + $result = array(); + + if (is_array($config['ifgroups']['ifgroupentry'])) { + foreach ($config['ifgroups']['ifgroupentry'] as $group) { + if (in_array($int, explode(" ", $group['members']))) + $result[$group['ifname']] = $int; + } + } + + return $result; +} + +function link_interface_to_gre($interface) { + global $config; + + $result = array(); + + if (is_array($config['gres']['gre'])) { + foreach ($config['gres']['gre'] as $gre) + if($gre['if'] == $interface) + $result[] = $gre; + } + + return $result; +} + +function link_interface_to_gif($interface) { + global $config; + + $result = array(); + + if (is_array($config['gifs']['gif'])) { + foreach ($config['gifs']['gif'] as $gif) + if($gif['if'] == $interface) + $result[] = $gif; + } + + return $result; +} + +/* + * find_interface_ip($interface): return the interface ip (first found) + */ +function find_interface_ip($interface, $flush = false) { + global $interface_ip_arr_cache; + global $interface_sn_arr_cache; + + $interface = str_replace("\n", "", $interface); + + if (!does_interface_exist($interface)) + return; + + /* Setup IP cache */ + if (!isset($interface_ip_arr_cache[$interface]) or $flush) { + $ifinfo = pfSense_get_interface_addresses($interface); + $interface_ip_arr_cache[$interface] = $ifinfo['ipaddr']; + $interface_sn_arr_cache[$interface] = $ifinfo['subnetbits']; + } + + return $interface_ip_arr_cache[$interface]; +} + +/* + * find_interface_ipv6($interface): return the interface ip (first found) + */ +function find_interface_ipv6($interface, $flush = false) { + global $interface_ipv6_arr_cache; + global $interface_snv6_arr_cache; + global $config; + + $interface = trim($interface); + $interface = get_real_interface($interface); + + if (!does_interface_exist($interface)) + return; + + /* Setup IP cache */ + if (!isset($interface_ipv6_arr_cache[$interface]) or $flush) { + $ifinfo = pfSense_get_interface_addresses($interface); + $interface_ipv6_arr_cache[$interface] = $ifinfo['ipaddr6']; + $interface_snv6_arr_cache[$interface] = $ifinfo['subnetbits6']; + } + + return $interface_ipv6_arr_cache[$interface]; +} + +/* + * find_interface_ipv6_ll($interface): return the interface ipv6 link local (first found) + */ +function find_interface_ipv6_ll($interface, $flush = false) { + global $interface_llv6_arr_cache; + global $config; + + $interface = str_replace("\n", "", $interface); + + if (!does_interface_exist($interface)) + return; + + /* Setup IP cache */ + if (!isset($interface_llv6_arr_cache[$interface]) or $flush) { + $ifinfo = pfSense_getall_interface_addresses($interface); + foreach($ifinfo as $line) { + if (strstr($line, ":")) { + $parts = explode("/", $line); + if(is_linklocal($parts[0])) { + $ifinfo['linklocal'] = $parts[0]; + } + } + } + $interface_llv6_arr_cache[$interface] = $ifinfo['linklocal']; + } + return $interface_llv6_arr_cache[$interface]; +} + +function find_interface_subnet($interface, $flush = false) { + global $interface_sn_arr_cache; + global $interface_ip_arr_cache; + + $interface = str_replace("\n", "", $interface); + if (does_interface_exist($interface) == false) + return; + + if (!isset($interface_sn_arr_cache[$interface]) or $flush) { + $ifinfo = pfSense_get_interface_addresses($interface); + $interface_ip_arr_cache[$interface] = $ifinfo['ipaddr']; + $interface_sn_arr_cache[$interface] = $ifinfo['subnetbits']; + } + + return $interface_sn_arr_cache[$interface]; +} + +function find_interface_subnetv6($interface, $flush = false) { + global $interface_snv6_arr_cache; + global $interface_ipv6_arr_cache; + + $interface = str_replace("\n", "", $interface); + if (does_interface_exist($interface) == false) + return; + + if (!isset($interface_snv6_arr_cache[$interface]) or $flush) { + $ifinfo = pfSense_get_interface_addresses($interface); + $interface_ipv6_arr_cache[$interface] = $ifinfo['ipaddr6']; + $interface_snv6_arr_cache[$interface] = $ifinfo['subnetbits6']; + } + + return $interface_snv6_arr_cache[$interface]; +} + +function ip_in_interface_alias_subnet($interface, $ipalias) { + global $config; + + if (empty($interface) || !is_ipaddr($ipalias)) + return false; + if (is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vip) { + switch ($vip['mode']) { + case "ipalias": + if ($vip['interface'] <> $interface) + break; + $subnet = is_ipaddrv6($ipalias) ? gen_subnetv6($vip['subnet'], $vip['subnet_bits']) : gen_subnet($vip['subnet'], $vip['subnet_bits']); + if (ip_in_subnet($ipalias, $subnet . "/" . $vip['subnet_bits'])) + return true; + break; + } + } + } + + return false; +} + +function get_interface_ip($interface = "wan") { + $realif = get_failover_interface($interface); + if (!$realif) { + if (strstr($interface, "_vip")) + return get_configured_carp_interface_list($interface); + else + return null; + } + + $curip = find_interface_ip($realif); + if ($curip && is_ipaddr($curip) && ($curip != "0.0.0.0")) + return $curip; + else + return null; +} + +function get_interface_ipv6($interface = "wan", $flush = false) { + global $config; + + $realif = get_failover_interface($interface, "inet6"); + if (!$realif) { + if (strstr($interface, "_vip")) + return get_configured_carp_interface_list($interface, "inet6"); + else + return null; + } + + /* + * NOTE: On the case when only the prefix is requested, + * the communication on WAN will be done over link-local. + */ + if (is_array($config['interfaces'][$interface])) { + switch ($config['interfaces'][$interface]['ipaddr']) { + case 'pppoe': + case 'l2tp': + case 'pptp': + case 'ppp': + if ($config['interfaces'][$interface]['ipaddrv6'] == 'dhcp6') + $realif = get_real_interface($interface, "inet6", true); + break; + } + if (isset($config['interfaces'][$interface]['dhcp6prefixonly'])) { + $curip = find_interface_ipv6_ll($realif, $flush); + if ($curip && is_ipaddrv6($curip) && ($curip != "::")) + return $curip; + } + } + + $curip = find_interface_ipv6($realif, $flush); + if ($curip && is_ipaddrv6($curip) && ($curip != "::")) + return $curip; + else + return null; +} + +function get_interface_linklocal($interface = "wan") { + + $realif = get_failover_interface($interface, "inet6"); + if (!$realif) { + if (strstr($interface, "_vip")) { + list($interface, $vhid) = explode("_vip", $interface); + $realif = get_real_interface($interface); + } else + return null; + } + + $curip = find_interface_ipv6_ll($realif); + if ($curip && is_ipaddrv6($curip) && ($curip != "::")) + return $curip; + else + return null; +} + +function get_interface_subnet($interface = "wan") { + $realif = get_real_interface($interface); + if (!$realif) { + if (strstr($interface, "_vip")) { + list($interface, $vhid) = explode("_vip", $interface); + $realif = get_real_interface($interface); + } else + return null; + } + + $cursn = find_interface_subnet($realif); + if (!empty($cursn)) + return $cursn; + + return null; +} + +function get_interface_subnetv6($interface = "wan") { + global $config; + + $realif = get_real_interface($interface, "inet6"); + if (!$realif) { + if (strstr($interface, "_vip")) { + list($interface, $vhid) = explode("_vip", $interface); + $realif = get_real_interface($interface); + } else + return null; + } + + $cursn = find_interface_subnetv6($realif); + if (!empty($cursn)) + return $cursn; + + return null; +} + +/* return outside interfaces with a gateway */ +function get_interfaces_with_gateway() { + global $config; + + $ints = array(); + + /* loop interfaces, check config for outbound */ + foreach($config['interfaces'] as $ifdescr => $ifname) { + switch ($ifname['ipaddr']) { + case "dhcp": + case "ppp"; + case "pppoe": + case "pptp": + case "l2tp": + case "ppp"; + $ints[$ifdescr] = $ifdescr; + break; + default: + if (substr($ifname['if'], 0, 4) == "ovpn" || + !empty($ifname['gateway'])) + $ints[$ifdescr] = $ifdescr; + break; + } + } + return $ints; +} + +/* return true if interface has a gateway */ +function interface_has_gateway($friendly) { + global $config; + + if (!empty($config['interfaces'][$friendly])) { + $ifname = &$config['interfaces'][$friendly]; + switch ($ifname['ipaddr']) { + case "dhcp": + case "pppoe": + case "pptp": + case "l2tp": + case "ppp"; + return true; + break; + default: + if (substr($ifname['if'], 0, 4) == "ovpn") + return true; + $tunnelif = substr($ifname['if'], 0, 3); + if ($tunnelif == "gif" || $tunnelif == "gre") + return true; + if (!empty($ifname['gateway'])) + return true; + break; + } + } + + return false; +} + +/* return true if interface has a gateway */ +function interface_has_gatewayv6($friendly) { + global $config; + + if (!empty($config['interfaces'][$friendly])) { + $ifname = &$config['interfaces'][$friendly]; + switch ($ifname['ipaddrv6']) { + case "slaac": + case "dhcp6": + case "6to4": + case "6rd": + return true; + break; + default: + if (substr($ifname['if'], 0, 4) == "ovpn") + return true; + $tunnelif = substr($ifname['if'], 0, 3); + if ($tunnelif == "gif" || $tunnelif == "gre") + return true; + if (!empty($ifname['gatewayv6'])) + return true; + break; + } + } + + return false; +} + +/****f* interfaces/is_altq_capable + * NAME + * is_altq_capable - Test if interface is capable of using ALTQ + * INPUTS + * $int - string containing interface name + * RESULT + * boolean - true or false + ******/ + +function is_altq_capable($int) { + /* Per: + * http://www.freebsd.org/cgi/man.cgi?query=altq&apropos=0&sektion=0&manpath=FreeBSD+8.3-RELEASE&arch=default&format=html + * Only the following drivers have ALTQ support + */ + $capable = array("ae", "age", "alc", "ale", "an", "ath", "aue", "axe", "awi", "bce", + "bfe", "bge", "bridge", "cas", "dc", "de", "ed", "em", "ep", "epair", "et", "fxp", "gem", + "hme", "igb", "ipw", "iwi", "ixgbe", "jme", "le", "lem", "msk", "mxge", "my", "nfe", + "nge", "npe", "nve", "ral", "re", "rl", "rum", "run", "bwn", "sf", "sge", "sis", "sk", + "ste", "stge", "ti", "txp", "udav", "ural", "vge", "vr", "vte", "wi", "xl", + "ndis", "tun", "ovpns", "ovpnc", "vlan", "pppoe", "pptp", "ng", + "l2tp", "ppp", "vtnet"); + + $int_family = remove_ifindex($int); + + if (in_array($int_family, $capable)) + return true; + else if (stristr($int, "l2tp")) /* VLANs are name $parent_$vlan now */ + return true; + else if (stristr($int, "_vlan")) /* VLANs are name $parent_$vlan now */ + return true; + else if (stristr($int, "_wlan")) /* WLANs are name $parent_$wlan now */ + return true; + else + return false; +} + +/****f* interfaces/is_interface_wireless + * NAME + * is_interface_wireless - Returns if an interface is wireless + * RESULT + * $tmp - Returns if an interface is wireless + ******/ +function is_interface_wireless($interface) { + global $config, $g; + + $friendly = convert_real_interface_to_friendly_interface_name($interface); + if(!isset($config['interfaces'][$friendly]['wireless'])) { + if (preg_match($g['wireless_regex'], $interface)) { + if (isset($config['interfaces'][$friendly])) + $config['interfaces'][$friendly]['wireless'] = array(); + return true; + } + return false; + } else + return true; +} + +function get_wireless_modes($interface) { + /* return wireless modes and channels */ + $wireless_modes = array(); + + $cloned_interface = get_real_interface($interface); + + if($cloned_interface && is_interface_wireless($cloned_interface)) { + $chan_list = "/sbin/ifconfig {$cloned_interface} list chan"; + $stack_list = "/usr/bin/awk -F\"Channel \" '{ gsub(/\\*/, \" \"); print \$2 \"\\\n\" \$3 }'"; + $format_list = "/usr/bin/awk '{print \$5 \" \" \$6 \",\" \$1}'"; + + $interface_channels = ""; + exec("$chan_list | $stack_list | sort -u | $format_list 2>&1", $interface_channels); + $interface_channel_count = count($interface_channels); + + $c = 0; + while ($c < $interface_channel_count) { + $channel_line = explode(",", $interface_channels["$c"]); + $wireless_mode = trim($channel_line[0]); + $wireless_channel = trim($channel_line[1]); + if(trim($wireless_mode) != "") { + /* if we only have 11g also set 11b channels */ + if($wireless_mode == "11g") { + if(!isset($wireless_modes["11b"])) + $wireless_modes["11b"] = array(); + } else if($wireless_mode == "11g ht") { + if(!isset($wireless_modes["11b"])) + $wireless_modes["11b"] = array(); + if(!isset($wireless_modes["11g"])) + $wireless_modes["11g"] = array(); + $wireless_mode = "11ng"; + } else if($wireless_mode == "11a ht") { + if(!isset($wireless_modes["11a"])) + $wireless_modes["11a"] = array(); + $wireless_mode = "11na"; + } + $wireless_modes["$wireless_mode"]["$c"] = $wireless_channel; + } + $c++; + } + } + return($wireless_modes); +} + +/* return channel numbers, frequency, max txpower, and max regulation txpower */ +function get_wireless_channel_info($interface) { + $wireless_channels = array(); + + $cloned_interface = get_real_interface($interface); + + if($cloned_interface && is_interface_wireless($cloned_interface)) { + $chan_list = "/sbin/ifconfig {$cloned_interface} list txpower"; + $stack_list = "/usr/bin/awk -F\"Channel \" '{ gsub(/\\*/, \" \"); print \$2 \"\\\n\" \$3 }'"; + $format_list = "/usr/bin/awk '{print \$1 \",\" \$3 \" \" \$4 \",\" \$5 \",\" \$7}'"; + + $interface_channels = ""; + exec("$chan_list | $stack_list | sort -u | $format_list 2>&1", $interface_channels); + + foreach ($interface_channels as $channel_line) { + $channel_line = explode(",", $channel_line); + if(!isset($wireless_channels[$channel_line[0]])) + $wireless_channels[$channel_line[0]] = $channel_line; + } + } + return($wireless_channels); +} + +/****f* interfaces/get_interface_mtu + * NAME + * get_interface_mtu - Return the mtu of an interface + * RESULT + * $tmp - Returns the mtu of an interface + ******/ +function get_interface_mtu($interface) { + $mtu = pfSense_get_interface_addresses($interface); + return $mtu['mtu']; +} + +function get_interface_mac($interface) { + + $macinfo = pfSense_get_interface_addresses($interface); + return $macinfo["macaddr"]; +} + +/****f* pfsense-utils/generate_random_mac_address + * NAME + * generate_random_mac - generates a random mac address + * INPUTS + * none + * RESULT + * $mac - a random mac address + ******/ +function generate_random_mac_address() { + $mac = "02"; + for($x=0; $x<5; $x++) + $mac .= ":" . dechex(rand(16, 255)); + return $mac; +} + +/****f* interfaces/is_jumbo_capable + * NAME + * is_jumbo_capable - Test if interface is jumbo frame capable. Useful for determining VLAN capability. + * INPUTS + * $int - string containing interface name + * RESULT + * boolean - true or false + ******/ +function is_jumbo_capable($iface) { + $iface = trim($iface); + $capable = pfSense_get_interface_addresses($iface); + + if (isset($capable['caps']['vlanmtu'])) + return true; + + return false; +} + +function interface_setup_pppoe_reset_file($pppif, $iface="") { + global $g; + + $cron_file = "{$g['varetc_path']}/pppoe_restart_{$pppif}"; + + if(!empty($iface) && !empty($pppif)){ + $cron_cmd = << /dev/null 2>&1 "); + if (is_array($config['dhcpd'][$if]['staticmap'])) { + + foreach ($config['dhcpd'][$if]['staticmap'] as $arpent) { + mwexec("/usr/sbin/arp -s " . escapeshellarg($arpent['ipaddr']) . " " . escapeshellarg($arpent['mac'])); + + } + + } + } else { + mwexec("/sbin/ifconfig " . escapeshellarg($ifcfg['if']) . " -staticarp " ); + mwexec("/usr/sbin/arp -d -i " . escapeshellarg($ifcfg['if']) . " -a > /dev/null 2>&1 "); + if (is_array($config['dhcpd'][$if]) && is_array($config['dhcpd'][$if]['staticmap'])) { + foreach ($config['dhcpd'][$if]['staticmap'] as $arpent) { + if (isset($arpent['arp_table_static_entry'])) { + mwexec("/usr/sbin/arp -s " . escapeshellarg($arpent['ipaddr']) . " " . escapeshellarg($arpent['mac'])); + } + } + } + } + + return 0; +} + +function get_failover_interface($interface, $family = "all") { + global $config; + + /* shortcut to get_real_interface if we find it in the config */ + if (is_array($config['interfaces'][$interface])) { + return get_real_interface($interface, $family); + } + + /* compare against gateway groups */ + $a_groups = return_gateway_groups_array(); + if (is_array($a_groups[$interface])) { + /* we found a gateway group, fetch the interface or vip */ + if ($a_groups[$interface][0]['vip'] <> "") + return $a_groups[$interface][0]['vip']; + else + return $a_groups[$interface][0]['int']; + } + /* fall through to get_real_interface */ + /* XXX: Really needed? */ + return get_real_interface($interface, $family); +} + +function remove_ifindex($ifname) { + return preg_replace("/[0-9]+$/", "", $ifname); +} + +?> diff --git a/usr/etc/inc/ipsec.attributes.php b/usr/etc/inc/ipsec.attributes.php new file mode 100644 index 000000000..ae7a85cf5 --- /dev/null +++ b/usr/etc/inc/ipsec.attributes.php @@ -0,0 +1,184 @@ + diff --git a/usr/etc/inc/ipsec.auth-user.php b/usr/etc/inc/ipsec.auth-user.php new file mode 100755 index 000000000..8142b9926 --- /dev/null +++ b/usr/etc/inc/ipsec.auth-user.php @@ -0,0 +1,166 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/inc/ipsec.inc b/usr/etc/inc/ipsec.inc new file mode 100644 index 000000000..c8833c105 --- /dev/null +++ b/usr/etc/inc/ipsec.inc @@ -0,0 +1,745 @@ + "Daemon", "mgr" => "SA Manager", "ike" => "IKE SA", "chd" => "IKE Child SA", + "job" => "Job Processing", "cfg" => "Configuration backend", "knl" => "Kernel Interface", + "net" => "Networking", "asn" => "ASN encoding", "enc" => "Message encoding", + "imc" => "Integrity checker", "imv" => "Integrity Verifier", "pts" => "Platform Trust Service", + "tls" => "TLS handler", "esp" => "IPsec traffic", "lib" => "StrongSWAN Lib"); + +$my_identifier_list = array( + 'myaddress' => array( 'desc' => gettext('My IP address'), 'mobile' => true ), + 'address' => array( 'desc' => gettext('IP address'), 'mobile' => true ), + 'fqdn' => array( 'desc' => gettext('Distinguished name'), 'mobile' => true ), + 'user_fqdn' => array( 'desc' => gettext('User distinguished name'), 'mobile' => true ), + 'asn1dn' => array( 'desc' => gettext('ASN.1 distinguished Name'), 'mobile' => true ), + 'keyid tag' => array( 'desc' => gettext('KeyID tag'), 'mobile' => true ), + 'dyn_dns' => array( 'desc' => gettext('Dynamic DNS'), 'mobile' => true )); + +$peer_identifier_list = array( + 'peeraddress' => array( 'desc' => gettext('Peer IP address'), 'mobile' => false ), + 'address' => array( 'desc' => gettext('IP address'), 'mobile' => false ), + 'fqdn' => array( 'desc' => gettext('Distinguished name'), 'mobile' => true ), + 'user_fqdn' => array( 'desc' => gettext('User distinguished name'), 'mobile' => true ), + 'asn1dn' => array( 'desc' => gettext('ASN.1 distinguished Name'), 'mobile' => true ), + 'keyid tag' => array( 'desc' =>gettext('KeyID tag'), 'mobile' => true )); + +$p1_ealgos = array( + 'aes' => array( 'name' => 'AES', 'keysel' => array( 'lo' => 128, 'hi' => 256, 'step' => 64 ) ), + 'aes128gcm' => array( 'name' => 'AES128-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'aes192gcm' => array( 'name' => 'AES192-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'aes256gcm' => array( 'name' => 'AES256-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'blowfish' => array( 'name' => 'Blowfish', 'keysel' => array( 'lo' => 128, 'hi' => 256, 'step' => 64 ) ), + '3des' => array( 'name' => '3DES' ), + 'cast128' => array( 'name' => 'CAST128' ), + 'des' => array( 'name' => 'DES' )); + +$p2_ealgos = array( + 'aes' => array( 'name' => 'AES', 'keysel' => array( 'lo' => 128, 'hi' => 256, 'step' => 64 ) ), + 'aes128gcm' => array( 'name' => 'AES128-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'aes192gcm' => array( 'name' => 'AES192-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'aes256gcm' => array( 'name' => 'AES256-GCM', 'keysel' => array( 'lo' => 64, 'hi' => 128, 'step' => 32 ) ), + 'blowfish' => array( 'name' => 'Blowfish', 'keysel' => array( 'lo' => 128, 'hi' => 256, 'step' => 64 ) ), + '3des' => array( 'name' => '3DES' ), + 'cast128' => array( 'name' => 'CAST128' ), + 'des' => array( 'name' => 'DES' )); + +$p1_halgos = array( + 'md5' => 'MD5', + 'sha1' => 'SHA1', + 'sha256' => 'SHA256', + 'sha384' => 'SHA384', + 'sha512' => 'SHA512', + 'aesxcbc' => 'AES-XCBC' +); + +$p1_dhgroups = array( + 1 => '1 (768 bit)', + 2 => '2 (1024 bit)', + 5 => '5 (1536 bit)', + 14 => '14 (2048 bit)', + 15 => '15 (3072 bit)', + 16 => '16 (4096 bit)', + 17 => '17 (6144 bit)', + 18 => '18 (8192 bit)', + 22 => '22 (1024(sub 160) bit)', + 23 => '23 (2048(sub 224) bit)', + 24 => '24 (2048(sub 256) bit)' +); + +$p2_halgos = array( + 'hmac_md5' => 'MD5', + 'hmac_sha1' => 'SHA1', + 'hmac_sha256' => 'SHA256', + 'hmac_sha384' => 'SHA384', + 'hmac_sha512' => 'SHA512', + 'aesxcbc' => 'AES-XCBC' +); + +$p1_authentication_methods = array( + 'hybrid_rsa_server' => array( 'name' => 'Hybrid RSA + Xauth', 'mobile' => true ), + 'xauth_rsa_server' => array( 'name' => 'Mutual RSA + Xauth', 'mobile' => true ), + 'xauth_psk_server' => array( 'name' => 'Mutual PSK + Xauth', 'mobile' => true ), + 'eap-tls' => array( 'name' => 'EAP-TLS', 'mobile' => true), + 'rsasig' => array( 'name' => 'Mutual RSA', 'mobile' => false ), + 'pre_shared_key' => array( 'name' => 'Mutual PSK', 'mobile' => false ) ); + +$p2_modes = array( + 'tunnel' => 'Tunnel IPv4', + 'tunnel6' => 'Tunnel IPv6', + 'transport' => 'Transport'); + +$p2_protos = array( + 'esp' => 'ESP', + 'ah' => 'AH'); + +$p2_pfskeygroups = array( + 0 => 'off', + 1 => '1 (768 bit)', + 2 => '2 (1024 bit)', + 5 => '5 (1536 bit)', + 14 => '14 (2048 bit)', + 15 => '15 (3072 bit)', + 16 => '16 (4096 bit)', + 17 => '17 (6144 bit)', + 18 => '18 (8192 bit)' +); + +/* + * ikeid management functions + */ + +function ipsec_ikeid_used($ikeid) { + global $config; + + foreach ($config['ipsec']['phase1'] as $ph1ent) + if( $ikeid == $ph1ent['ikeid'] ) + return true; + + return false; +} + +function ipsec_ikeid_next() { + + $ikeid = 1; + while(ipsec_ikeid_used($ikeid)) + $ikeid++; + + return $ikeid; +} + +/* + * Return phase1 local address + */ +function ipsec_get_phase1_src(& $ph1ent) { + + if ($ph1ent['interface']) { + if (!is_ipaddr($ph1ent['interface'])) { + if ($ph1ent['protocol'] == "inet6") { + $if = get_failover_interface($ph1ent['interface'], "inet6"); + $interfaceip = get_interface_ipv6($if); + } else { + $if = get_failover_interface($ph1ent['interface']); + $interfaceip = get_interface_ip($if); + } + } else { + $interfaceip=$ph1ent['interface']; + } + } else { + $if = "wan"; + if ($ph1ent['protocol'] == "inet6") + $interfaceip = get_interface_ipv6($if); + else + $interfaceip = get_interface_ip($if); + } + + return $interfaceip; +} + +/* + * Return phase1 local address + */ +function ipsec_get_phase1_dst(& $ph1ent) { + global $g; + + if (empty($ph1ent['remote-gateway'])) + return false; + $rg = $ph1ent['remote-gateway']; + if (!is_ipaddr($rg)) { + if(! $g['booting']) + return resolve_retry($rg); + } + if(!is_ipaddr($rg)) + return false; + + return $rg; +} + +/* + * Return phase2 idinfo in cidr format + */ +function ipsec_idinfo_to_cidr(& $idinfo, $addrbits = false, $mode = "") { + global $config; + + switch ($idinfo['type']) { + case "address": + if ($addrbits) { + if ($mode == "tunnel6") + return $idinfo['address']."/128"; + else + return $idinfo['address']."/32"; + } else + return $idinfo['address']; + break; /* NOTREACHED */ + case "network": + return "{$idinfo['address']}/{$idinfo['netbits']}"; + break; /* NOTREACHED */ + case "none": + case "mobile": + return "0.0.0.0/0"; + break; /* NOTREACHED */ + default: + if (empty($mode) && !empty($idinfo['mode'])) + $mode = $idinfo['mode']; + + if ($mode == "tunnel6") { + $address = get_interface_ipv6($idinfo['type']); + $netbits = get_interface_subnetv6($idinfo['type']); + $address = gen_subnetv6($address,$netbits); + return "{$address}/{$netbits}"; + } else { + $address = get_interface_ip($idinfo['type']); + $netbits = get_interface_subnet($idinfo['type']); + $address = gen_subnet($address,$netbits); + return "{$address}/{$netbits}"; + } + break; /* NOTREACHED */ + } +} + +/* + * Return phase2 idinfo in address/netmask format + */ +function ipsec_idinfo_to_subnet(& $idinfo,$addrbits = false) { + global $config; + + switch ($idinfo['type']) { + case "address": + if ($addrbits) { + if ($idinfo['mode'] == "tunnel6") + return $idinfo['address']."/128"; + else + return $idinfo['address']."/255.255.255.255"; + } else + return $idinfo['address']; + break; /* NOTREACHED */ + case "none": + case "network": + return $idinfo['address']."/".gen_subnet_mask($idinfo['netbits']); + break; /* NOTREACHED */ + case "mobile": + return "0.0.0.0/0"; + break; /* NOTREACHED */ + default: + if ($idinfo['mode'] == "tunnel6") { + $address = get_interface_ipv6($idinfo['type']); + $netbits = get_interface_subnetv6($idinfo['type']); + $address = gen_subnetv6($address,$netbits); + return $address."/".$netbits; + } else { + $address = get_interface_ip($idinfo['type']); + $netbits = get_interface_subnet($idinfo['type']); + $address = gen_subnet($address,$netbits); + return $address."/".$netbits; + } + break; /* NOTREACHED */ + } +} + +/* + * Return phase2 idinfo in text format + */ +function ipsec_idinfo_to_text(& $idinfo) { + global $config; + + switch ($idinfo['type']) { + case "address": + return $idinfo['address']; + break; /* NOTREACHED */ + case "network": + return $idinfo['address']."/".$idinfo['netbits']; + break; /* NOTREACHED */ + case "mobile": + return gettext("Mobile Client"); + break; /* NOTREACHED */ + case "none": + return gettext("None"); + break; /* NOTREACHED */ + default: + if (!empty($config['interfaces'][$idinfo['type']])) + return convert_friendly_interface_to_friendly_descr($idinfo['type']); + else + return strtoupper($idinfo['type']); + break; /* NOTREACHED */ + } +} + +/* + * Return phase1 association for phase2 + */ +function ipsec_lookup_phase1(& $ph2ent,& $ph1ent) { + global $config; + + if (!is_array($config['ipsec'])) + return false; + if (!is_array($config['ipsec']['phase1'])) + return false; + if (empty($config['ipsec']['phase1'])) + return false; + + foreach ($config['ipsec']['phase1'] as $ph1tmp) { + if ($ph1tmp['ikeid'] == $ph2ent['ikeid']) { + $ph1ent = $ph1tmp; + return $ph1ent; + } + } + + return false; +} + +/* + * Check phase1 communications status + */ +function ipsec_phase1_status($ipsec_status, $ikeid) { + + foreach ($ipsec_status as $ike) { + if ($ike['id'] != $ikeid) + continue; + if ($ike['status'] == 'established') + return true; + break; + } + + return false; +} + +/* + * Check phase2 communications status + */ +function ipsec_phase2_status($ipsec_status, &$phase2) { + + if (ipsec_lookup_phase1($ph2ent,$ph1ent)) + return ipsec_phase1_status($ipsec_status, $ph1ent['ikeid']); + + return false; +} + +/* + * Return ISAKMP SA details + */ +function ipsec_lookup_isakmp_sa($in_srcip,$in_dstip) { + /* TODO : use racconctl to lookup iskamp SA */ + return NULL; +} + +/* + * Return IPsec SA details + */ +function ipsec_lookup_ipsec_sa(& $spd,& $sad,$dir,$in_srcip,$in_dstip,$in_srcid,$in_dstid) { + + /* match the phase1/2 to an SP */ + $in_srcip = ipsec_fixup_ip($in_srcip); + $in_dstip = ipsec_fixup_ip($in_dstip); + $in_srcid = ipsec_fixup_ip($in_srcid); + $in_dstid = ipsec_fixup_ip($in_dstid); + + foreach($spd as $sp) { + + /* match direction */ + + if($dir != $sp['dir']) + continue; + + /* match IPs */ + + if($in_srcip != ipsec_fixup_ip($sp['src'])) + continue; + if($in_dstip != ipsec_fixup_ip($sp['dst'])) + continue; + + /* add netbits for address IDs */ + + $sp_srcid = $sp['srcid']; + $sp_dstid = $sp['dstid']; + + if (!strstr($sp_srcid,"/")) { + if (is_ipaddrv4($sp_srcid)) + $sp_srcid .= '/32'; + elseif (is_ipaddrv6($sp_srcid)) + $sp_srcid .= '/128'; + } + if (!strstr($sp_dstid,"/")) { + if (is_ipaddrv4($sp_dstid)) + $sp_dstid .= '/32'; + elseif (is_ipaddrv6($sp_dstid)) + $sp_dstid .= '/128'; + } + + /* match IDs */ + + if($in_srcid != ipsec_fixup_ip($sp_srcid)) + continue; + if($in_dstid != ipsec_fixup_ip($sp_dstid)) + continue; + + /* match the SP to a unique SA by reqid */ + + foreach($sad as $sa) { + + /* match REQIDs */ + + if($sa[reqid] != $sp[reqid]) + continue; + + /* sanitize for NAT-T ports */ + + $sa_srcip = $sa['src']; + $sa_dstip = $sa['dst']; + + if (strstr($sa_srcip,"[")) + $sa_srcip = substr($sa_srcip,0,strcspn($sa_srcip,"[")); + if (strstr($sa_dstip,"[")) + $sa_dstip = substr($sa_dstip,0,strcspn($sa_dstip,"[")); + + /* match IPs */ + + if($in_srcip != ipsec_fixup_ip($sa_srcip)) + continue; + if($in_dstip != ipsec_fixup_ip($sa_dstip)) + continue; + + return $sa; + } + } + + return NULL; +} + +function ipsec_smp_dump_status() { + global $config, $g, $custom_listtags; + + if (!file_exists("{$g['varrun_path']}/charon.xml")) { + log_error("IPsec daemon seems to have issues or not running!"); + return; + } + + $fd = @fsockopen("unix://{$g['varrun_path']}/charon.xml"); + if (!$fd) { + log_error("Could not read status from ipsec"); + return; + } + $query = ''; + $query .= ''; + + @fwrite($fd, $query); + $response = ""; + while (!strstr($sread, "")) { + $sread = fgets($fd); + $response .= $sread; + } + fclose($fd); + + @file_put_contents("{$g['tmp_path']}/smp_status.xml", $response); + unset($response, $sread); + + $custom_listtags = array('ikesa', 'childsa', 'network', 'auth'); + $response = parse_xml_config("{$g['tmp_path']}/smp_status.xml", "message"); + @unlink("{$g['tmp_path']}/smp_status.xml"); + unset($custom_listtags); + + return $response; +} + +/* + * Return dump of SPD table + */ +function ipsec_dump_spd() +{ + $fd = @popen("/sbin/setkey -DP", "r"); + $spd = array(); + if ($fd) { + while (!feof($fd)) { + $line = chop(fgets($fd)); + if (!$line) + continue; + if ($line == "No SPD entries.") + break; + if ($line[0] != "\t") { + if (is_array($cursp)) + $spd[] = $cursp; + $cursp = array(); + $linea = explode(" ", $line); + $cursp['srcid'] = substr($linea[0], 0, strpos($linea[0], "[")); + $cursp['dstid'] = substr($linea[1], 0, strpos($linea[1], "[")); + $i = 0; + } else if (is_array($cursp)) { + $linea = explode(" ", trim($line)); + switch($i) + { + case 1: + if ($linea[1] == "none") /* don't show default anti-lockout rule */ + unset($cursp); + else + $cursp['dir'] = $linea[0]; + break; + case 2: + $upperspec = explode("/", $linea[0]); + $cursp['proto'] = $upperspec[0]; + list($cursp['src'], $cursp['dst']) = explode("-", $upperspec[2]); + $cursp['reqid'] = substr($upperspec[3], strpos($upperspec[3], "#")+1); + break; + } + } + $i++; + } + if (is_array($cursp) && count($cursp)) + $spd[] = $cursp; + pclose($fd); + } + + return $spd; +} + +/* + * Return dump of SAD table + */ +function ipsec_dump_sad() +{ + $fd = @popen("/sbin/setkey -D", "r"); + $sad = array(); + if ($fd) { + while (!feof($fd)) { + $line = chop(fgets($fd)); + if (!$line || $line[0] == " ") + continue; + if ($line == "No SAD entries.") + break; + if ($line[0] != "\t") + { + if (is_array($cursa)) + $sad[] = $cursa; + $cursa = array(); + list($cursa['src'],$cursa['dst']) = explode(" ", $line); + $i = 0; + } + else + { + $linea = explode(" ", trim($line)); + switch ($i) { + case 1: + $cursa['proto'] = $linea[0]; + $cursa['spi'] = substr($linea[2], strpos($linea[2], "x")+1, -1); + $reqid = substr($linea[3], strpos($linea[3], "=")+1); + $cursa['reqid'] = substr($reqid, 0, strcspn($reqid,"(")); + break; + case 2: + $cursa['ealgo'] = $linea[1]; + break; + case 3: + $cursa['aalgo'] = $linea[1]; + break; + case 8: + $sadata = explode("(", $linea[1]); + $cursa['data'] = $sadata[0] . " B"; + break; + } + } + $i++; + } + if (is_array($cursa) && count($cursa)) + $sad[] = $cursa; + pclose($fd); + } + + return $sad; +} + +/* + * Return dump of mobile user list + */ +function ipsec_dump_mobile() { + global $g, $custom_listtags; + + $_gb = exec("/usr/local/sbin/ipsec stroke leases > {$g['tmp_path']}/strongswan_leases.xml"); + + if (!file_exists("{$g['tmp_path']}/strongswan_leases.xml")) { + log_error(gettext("IPsec daemon seems to have issues or not running! Could not display mobile user stats!")); + return array(); + } + + $custom_listtags = array('lease', 'pool'); + $response = parse_xml_config("{$g['tmp_path']}/strongswan_leases.xml", "leases"); + @unlink("{$g['tmp_path']}/strongswan_leases.xml"); + unset($custom_listtags, $_gb); + + return $response; +} + +function ipsec_mobilekey_sort() { + global $config; + + function mobilekeycmp($a, $b) { + return strcmp($a['ident'][0], $b['ident'][0]); + } + + usort($config['ipsec']['mobilekey'], "mobilekeycmp"); +} + +function ipsec_get_number_of_phase2($ikeid) { + global $config; + $a_phase2 = $config['ipsec']['phase2']; + + $nbph2=0; + + if (is_array($a_phase2) && count($a_phase2)) { + foreach ($a_phase2 as $ph2tmp) { + if ($ph2tmp['ikeid'] == $ikeid) { + $nbph2++; + } + } + } + + return $nbph2; +} + +function ipsec_get_descr($ikeid) { + global $config; + + if (!isset($config['ipsec']['phase1']) || + !is_array($config['ipsec']['phase1'])) + return ""; + + $descr = ''; + $a_phase1 = $config['ipsec']['phase1']; + foreach ($a_phase1 as $p1) { + if ($p1['ikeid'] == $ikeid) { + $descr = $p1['descr']; + break; + } + } + unset($a_phase1); + + return $descr; +} + +function ipsec_fixup_ip($ipaddr) { + if (is_ipaddrv6($ipaddr) || is_subnetv6($ipaddr)) + return Net_IPv6::compress(Net_IPv6::uncompress($ipaddr)); + else + return $ipaddr; +} + +function ipsec_find_id(& $ph1ent, $side = "local", $rgmap = array()) { + if ($side == "local") { + $id_type = $ph1ent['myid_type']; + $id_data = $ph1ent['myid_data']; + + $addr = ipsec_get_phase1_src($ph1ent); + if (!$addr) + return array(); + } elseif ($side = "peer") { + $id_type = $ph1ent['peerid_type']; + $id_data = $ph1ent['peerid_data']; + + if (isset($ph1ent['mobile'])) + $addr = "%any"; + else + $addr = $ph1ent['remote-gateway']; + } else { + return array(); + } + + + $thisid_type = $id_type; + switch ($thisid_type) { + case "myaddress": + $thisid_type = "address"; + $thisid_data = $addr; + break; + + case "dyn_dns": + $thisid_type = "address"; + $thisid_data = resolve_retry($id_data); + break; + + case "peeraddress": + $thisid_type = "address"; + $thisid_data = $rgmap[$ph1ent['remote-gateway']]; + break; + + case "address"; + $thisid_data = $id_data; + break; + + case "fqdn"; + case "keyid tag"; + case "user_fqdn"; + case "asn1dn"; + $thisid_data = $id_data; + if( $thisid_data ) + $thisid_data = "{$thisid_data}"; + break; + } + return array($thisid_type, $thisid_data); +} + +function ipsec_fixup_network($network) { + if (substr($network, -3) == '|/0') + $result = substr($network, 0, -3); + else { + $tmp = explode('|', $network); + if (isset($tmp[1])) + $result = $tmp[1]; + else + $result = $tmp[0]; + unset($tmp); + } + + return $result; +} + +?> diff --git a/usr/etc/inc/itemid.inc b/usr/etc/inc/itemid.inc new file mode 100644 index 000000000..787760d72 --- /dev/null +++ b/usr/etc/inc/itemid.inc @@ -0,0 +1,106 @@ + + 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. + + DISABLE_PHP_LINT_CHECKING +*/ + +/****f* itemid/delete_id + * NAME + * delete_id - delete an item with ['id'] = $id from $array + * INPUTS + * $id - int: The ID to delete + * $array - array to delete the item from + * RESULT + * boolean - true if item was found and deleted + ******/ +function delete_id($id, &$array){ + // Index to delete + $delete_index = NULL; + + if (!is_array($array)) + return false; + + // Search for the item in the array + foreach ($array as $key => $item){ + // If this item is the one we want to delete + if(isset($item['associated-rule-id']) && $item['associated-rule-id']==$id ){ + $delete_index = $key; + break; + } + } + + // If we found the item, unset it + if( $delete_index!==NULL ){ + unset($array[$delete_index]); + return true; + } else { + return false; + } + +} + +/****f* itemid/get_id + * NAME + * get_id - Get an item id with ['associated-rule-id'] = $id from $array + * INPUTS + * $id - string: The ID to get + * $array - array to get the item from + * RESULT + * mixed - The id, NULL if not found + ******/ +function get_id($id, &$array) { + // Use $foo = &get_id('id', array('id'=>'value')); + + if (!is_array($array)) + return false; + + // Search for the item in the array + foreach ($array as $key => $item){ + // If this item is the one we want to delete + if (isset($item['associated-rule-id']) && $item['associated-rule-id']==$id) + return $key; + } + + return false; +} + +/****f* itemid/get_unique_id + * NAME + * get_unique_id - get a unique identifier + * RESULT + * string - unique id + ******/ +function get_unique_id(){ + + return uniqid("nat_", true); +} + +?> \ No newline at end of file diff --git a/usr/etc/inc/led.inc b/usr/etc/inc/led.inc new file mode 100644 index 000000000..9d060597c --- /dev/null +++ b/usr/etc/inc/led.inc @@ -0,0 +1,354 @@ + + * + * LED control library that wraps around the functionality of led(4) + * + */ +/* + pfSense_BUILDER_BINARIES: /bin/echo + pfSense_MODULE: utils +*/ + +$led_root = "/dev/led/led"; + +/* + * Send the control string to an LED + */ +function led_ctl($led, $str) { + global $led_root; + if (led_exists($led)) { + exec("/bin/echo " . escapeshellarg($str) . " > {$led_root}{$led}"); + return true; + } + return false; +} + +/* + * Blink an LED at set speed from 1-9 (1=Very Fast, 9=Very Slow) + */ +function led_blink($led, $speed=0) { + switch ($speed) { + case "reallyfast": + case "veryfast": + $speed = 1; + break; + case "fast": + $speed = 3; + break; + case "medium": + $speed = 5; + break; + case "slow": + $speed = 7; + break; + case "reallyslow": + case "veryslow": + $speed = 9; + break; + } + if (is_numeric($speed) && ($speed > 0) && ($speed < 10)) { + return led_ctl($led, "f{$speed}"); + } + return false; +} + +/* + * Blink an LED in a specific pattern + * Letters A-J are on from 1/10s to 1s + * Letters a-j are off from 1/10s to 1s + */ +function led_pattern($led, $pattern, $repeat=true) { + /* End with a . to stop after one iteration. */ + $end = $repeat ? "" : "."; + return led_ctl($led, "s{$pattern}{$end}"); +} + +/* + * Encode a text message into morse code, and send it to an LED + */ +function led_morse($led, $message) { + return led_ctl($led, "m" . str_to_morse($message)); +} + +/* + * Blink digits out on LED at 1/10s intervals + * e.g 1=1 blink, 8=8 blinks + * 0 is 10 pulses. + * One second pause between digits. + */ +function led_digit($led, $digitstring) { + $i = 0; + $dstring = "d"; + while ($i < strlen($digitstring)) { + $thisdigit = substr($digitstring, $i++, 1); + if (is_numeric($thisdigit)) + $dstring .= $thisdigit; + } + led_ctl($led, $dstring); +} + +/* + * Turn an LED on + */ +function led_on($led) { + led_ctl($led, "1"); +} + +/* + * Turn an LED off + */ +function led_off($led) { + led_ctl($led, "0"); +} + +/* + * Find the number of LEDs present on the system. + */ +function led_count() { + global $led_root; + $count = 0; + $leds = array(); + if (is_dir(dirname($led_root))) { + $leds = glob("{$led_root}*"); + $count = count($leds); + } + return $count; +} + +/* + * Test to see if a given LED exists. + */ +function led_exists($led) { + global $led_root; + if (!is_numeric($led)) + return false; + return file_exists("{$led_root}{$led}"); +} + +/* + * Sweep across three LEDs in a K.I.T.T.-like way. + */ +function led_kitt() { + led_pattern(1, 'AaaaaA'); + led_pattern(2, 'aAaaAa'); + led_pattern(3, 'aaAAaa'); +} + +/* + * Custom pattern for assigning interfaces + */ +function led_assigninterfaces() { + led_pattern(1, 'AaaAaaaaaaaaaaaa'); + led_pattern(2, 'aaaaaAaaAaaaaaaa'); + led_pattern(3, 'aaaaaaaaaaAaaAaa'); +} + +/* + * Return the three LEDs to a standard setup (1=on, 2 and 3 = off) + */ +function led_normalize() { + led_on(1); + led_off(2); + led_off(3); +} + +/* + * Shut off ALL LEDs. + */ +function led_alloff() { + led_off(1); + led_off(2); + led_off(3); +} + +/* + * Translate a string to morse code. Characters not known to have a + * valid morse code representation will be ignored. + */ +function str_to_morse($string) { + $i = 0; + $morsestring = ""; + while ($i < strlen($string)) { + $morsestring .= char_to_morse(substr($string, $i++, 1)) . " "; + } + return $morsestring . "\n"; +} + +/* + * Translate a single character to morse code. Characters not known + * to have a valid morse code representation will be ignored. + */ +function char_to_morse($char) { + switch (strtoupper($char)) { + case "A": + return ".-"; + break; + case "B": + return "-..."; + break; + case "C": + return "-.-."; + break; + case "D": + return "-.."; + break; + case "E": + return "."; + break; + case "F": + return "..-."; + break; + case "G": + return "--."; + break; + case "H": + return "...."; + break; + case "I": + return ".."; + break; + case "J": + return ".---"; + break; + case "K": + return "-.-"; + break; + case "L": + return ".-.."; + break; + case "M": + return "--"; + break; + case "N": + return "-."; + break; + case "O": + return "---"; + break; + case "P": + return ".--."; + break; + case "Q": + return "--.-"; + break; + case "R": + return ".-."; + break; + case "S": + return "..."; + break; + case "T": + return "-"; + break; + case "U": + return "..-"; + break; + case "V": + return "...-"; + break; + case "W": + return ".--"; + break; + case "X": + return "-..-"; + break; + case "Y": + return "-.--"; + break; + case "Z": + return "--.."; + break; + case "0": + return "-----"; + break; + case "1": + return ".----"; + break; + case "2": + return "..---"; + break; + case "3": + return "...--"; + break; + case "4": + return "....-"; + break; + case "5": + return "....."; + break; + case "6": + return "-...."; + break; + case "7": + return "--..."; + break; + case "8": + return "---.."; + break; + case "9": + return "----."; + break; + case ".": + return ".-.-.-"; + break; + case ",": + return "--..--"; + break; + case "?": + return "..--.."; + break; + case "'": + return ".----."; + break; + case "!": + return "-.-.--"; + break; + case "/": + return "-..-."; + break; + case "(": + return "-.--."; + break; + case ")": + return "-.--.-"; + break; + case "&": + return ".-..."; + break; + case ":": + return "---..."; + break; + case ";": + return "-.-.-."; + break; + case "=": + return "-...-"; + break; + case "+": + return ".-.-."; + break; + case "-": + return "-....-"; + break; + case "_": + return "..--.-"; + break; + case "$": + return "...-..-"; + break; + case "@": + return ".--.-."; + break; + case '"': + return ".-..-."; + break; + default: + return ""; + break; + } +} + +?> \ No newline at end of file diff --git a/usr/etc/inc/login_sasl_client.inc b/usr/etc/inc/login_sasl_client.inc new file mode 100644 index 000000000..923d16efa --- /dev/null +++ b/usr/etc/inc/login_sasl_client.inc @@ -0,0 +1,69 @@ +state!=SASL_LOGIN_STATE_START) + { + $client->error="LOGIN authentication state is not at the start"; + return(SASL_FAIL); + } + $this->credentials=array( + "user"=>"", + "password"=>"", + "realm"=>"" + ); + $defaults=array( + "realm"=>"" + ); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + $this->state=SASL_LOGIN_STATE_IDENTIFY_USER; + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { + case SASL_LOGIN_STATE_IDENTIFY_USER: + $message=$this->credentials["user"].(strlen($this->credentials["realm"]) ? "@".$this->credentials["realm"] : ""); + $this->state=SASL_LOGIN_STATE_IDENTIFY_PASSWORD; + break; + case SASL_LOGIN_STATE_IDENTIFY_PASSWORD: + $message=$this->credentials["password"]; + $this->state=SASL_LOGIN_STATE_DONE; + break; + case SASL_LOGIN_STATE_DONE: + $client->error="LOGIN authentication was finished without success"; + break; + default: + $client->error="invalid LOGIN authentication step state"; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> \ No newline at end of file diff --git a/usr/etc/inc/meta.inc b/usr/etc/inc/meta.inc new file mode 100644 index 000000000..11295f532 --- /dev/null +++ b/usr/etc/inc/meta.inc @@ -0,0 +1,200 @@ +']['INFO']['BLAH'][0] == true + * metadata['']['INFO']['TEXT'][0] == "SOME TEXT" + * + * NOTE: All statements must be at the begining of a line and + * contiguous for a tag. The example shown above would not be + * processed due to the extra ' * ' comment chars. + * + */ + +/* + * locate php files for a given path + */ + +function list_phpfiles($path, & $found) { + + if (!is_array($found)) + $found = array(); + + $dir = opendir($path); + if (!$dir) { + printf(gettext("list_phpfiles: unable to examine path %s\n"), $path); + return; + } + + while($fname = readdir($dir)) { + if($fname == "." || $fname == ".." || $fname[0] == '.') + continue; + if (fnmatch('*.php', $fname)) + $found[] = $fname; + } +} + +/* + * read embedded metadata from a file + */ + +function read_file_metadata($fpath, & $metadata, $taglist = false) { + + if (!is_array($metadata)) + $metadata = array(); + + if ($taglist) + $taglist = explode(",", $taglist); + + $fname = $fpath; + $slash = strrpos($fname,"/"); + if ($slash) + $fname = substr($fname,$slash + 1); + + $fdata = @file_get_contents($fpath); + if (!$fdata) { + printf(gettext("unable to read %s\n"), $fpath); + continue; + } + + $offset = 0; + + $tags = array(); + + while (true) { + + $tagbeg_off = stripos($fdata, "##|+", $offset); + if ($tagbeg_off === false) + break; + + $tagbeg_trm = stripos($fdata, "\n", $tagbeg_off); + if ($tagbeg_trm === false) + break; + + $tagend_off = stripos($fdata, "##|-", $tagbeg_trm); + if ($tagend_off === false) + break; + + $tagend_trm = stripos($fdata, "\n", $tagend_off); + if ($tagend_trm === false) + break; + + $tagbeg_len = $tagbeg_trm - $tagbeg_off; + $tagend_len = $tagend_trm - $tagend_off; + + $tagbeg = substr($fdata, $tagbeg_off + 4, $tagbeg_len - 4); + $tagend = substr($fdata, $tagend_off + 4, $tagend_len - 4); + + if ($tagbeg != $tagend) { + printf(gettext("error: tag mismatch ( %1\$s != %2\$s ) in '%3\$s'%4\$s"), $tagbeg, $tagend, $fpath, "\n"); + break; + } + + $mdata_off = $tagbeg_trm + 1; + $mdata_trm = $tagend_off - 1; + $mdata_len = $mdata_trm - $mdata_off; + + $mdata = substr($fdata, $mdata_off, $mdata_len); + + if (!strlen($mdata)) { + printf(gettext("warning: tag %1\$s has no data in '%2\$s'%3\$s"), $tagbeg, $fpath, "\n"); + break; + } + + $offset = $tagend_trm + 1; + + if (is_array($taglist)) + if (!in_array($tagbeg,$taglist)) + continue; + + $vals = array(); + + $lines = explode("\n",$mdata); + foreach ($lines as $line) { + + if (!strlen($line)) + continue; + + $valtag = stripos($line, "##|*"); + if ($valtag === false || $valtag) { + printf(gettext("warning: tag %1\$s has malformed data in '%2\$s'%3\$s"), $tagbeg, $fpath, "\n"); + continue; + } + + $value = substr($line, 4, strlen($line) - 1); + $vlist = explode("=", $value); + + unset($vname); + unset($vdata); + + switch (count($vlist)) { + case 1: + $vname = $vlist[0]; + $vdata = true; + break; + case 2: + $vname = $vlist[0]; + $vdata = $vlist[1]; + break; + } + + if (!isset($vname) || !isset($vdata)) { + printf(gettext("warning: tag %1\$s has invalid data in '%2\$s'%3\$s"), $tagbeg, $fpath, "\n"); + continue; + } + + $vals[$vname][] = $vdata; + } + + if (count($vals)) + $tags[$tagbeg] = $vals; + } + + if (count($tags)) + $metadata[$fname] = $tags; +} + +?> diff --git a/usr/etc/inc/notices.inc b/usr/etc/inc/notices.inc new file mode 100644 index 000000000..ea8d22073 --- /dev/null +++ b/usr/etc/inc/notices.inc @@ -0,0 +1,413 @@ + $id, + 'notice' => $notice, + 'url' => $url, + 'category' => $category, + 'priority' => $priority, + ); + $queue[$queuekey] = $toqueue; + $queueout = fopen($notice_path, "w"); + if(!$queueout) { + log_error(printf(gettext("Could not open %s for writing"), $notice_path)); + return; + } + fwrite($queueout, serialize($queue)); + fclose($queueout); + log_error("New alert found: $notice"); + /* soekris */ + if(file_exists("/dev/led/error")) + exec("/bin/echo 1 > /dev/led/error"); + /* wrap & alix */ + led_normalize(); + led_morse(1, 'sos'); + notify_via_growl($notice); + notify_via_smtp($notice); + return $queuekey; +} + +/****f* notices/get_notices + * NAME + * get_notices + * INPUTS + * $category + * RESULT + * Returns a specific notices text + ******/ +function get_notices($category = "all") { + global $g; + + if(file_exists("{$g['tmp_path']}/notices")) { + $queue = unserialize(file_get_contents("{$g['tmp_path']}/notices")); + if(!$queue) return false; + if($category != 'all') { + foreach($queue as $time => $notice) { + if(strtolower($notice['category']) == strtolower($category)) + $toreturn[$time] = $notice; + } + return $toreturn; + } else { + return $queue; + } + } else { + return false; + } +} + +/****f* notices/close_notice + * NAME + * close_notice + * INPUTS + * $id + * RESULT + * Removes a notice from the list + ******/ +function close_notice($id) { + global $notice_path; + require_once("util.inc"); + /* soekris */ + if(file_exists("/dev/led/error")) + exec("/bin/echo 0 > /dev/led/error"); + /* wrap & alix */ + led_normalize(); + $ids = array(); + if(!$notices = get_notices()) return; + if($id == "all") { + unlink_if_exists($notice_path); + return; + } + foreach(array_keys($notices) as $time) { + if($id == $time) { + unset($notices[$id]); + break; + } + } + foreach($notices as $key => $notice) { + $ids[$key] = $notice['id']; + } + foreach($ids as $time => $tocheck) { + if($id == $tocheck) { + unset($notices[$time]); + break; + } + } + if(count($notices) != 0) { + $queueout = fopen($notice_path, "w"); + fwrite($queueout, serialize($notices)); + fclose($queueout); + } else { + unlink_if_exists($notice_path); + } + + return; +} + +/****f* notices/dump_xml_notices + * NAME + * dump_xml_notices + * INPUTS + * NONE + * RESULT + * Outputs notices in XML formatted text + ******/ +function dump_xml_notices() { + if(file_exists("/cf/conf/use_xmlreader")) + require_once("xmlreader.inc"); + else + require_once("xmlparse.inc"); + global $notice_path, $listtags; + $listtags[] = 'notice'; + if(!$notices = get_notices()) return; + foreach($notices as $time => $notice) { + $notice['time'] = $time; + $toput['notice'][] = $notice; + } + $xml = dump_xml_config($toput, 'notices'); + return $xml; +} + +/****f* notices/print_notices + * NAME + * print_notices + * INPUTS + * $notices, $category + * RESULT + * prints notices to the GUI + ******/ +function print_notices($notices, $category = "all") { + foreach($notices as $notice) { + if($category != "all") { + if(in_array($notice['category'], $category)) $categories[] = $notice['category']; + } else { + $categories[] = $notice['category']; + } + } + $categories = array_unique($categories); + sort($categories); + foreach($categories as $category) { + $toreturn .= "
    • {$category}
        "; + foreach($notices as $notice) { + if(strtolower($notice['category']) == strtolower($category)) { + if($notice['id'] != "") { + if($notice['url'] != "") { + $toreturn .= "
      • {$notice['id']} - {$notice['notice']}
      • "; + } else { + $toreturn .= "
      • {$notice['id']} - {$notice['notice']}
      • "; + } + } + } + } + $toreturn .= "
    "; + } + return $toreturn; +} + +/****f* notices/print_notice_box + * NAME + * print_notice_box + * INPUTS + * $category + * RESULT + * prints an info box to the GUI + ******/ +function print_notice_box($category = "all") { + $notices = get_notices(); + if(!$notices) return; + print_info_box_np(print_notices($notices, $category)); + return; +} + +/****f* notices/are_notices_pending + * NAME + * are_notices_pending + * INPUTS + * $category to check + * RESULT + * returns true if notices are pending, false if they are not + ******/ +function are_notices_pending($category = "all") { + global $notice_path; + if(file_exists($notice_path)) { + return true; + } + return false; +} + +/****f* notices/notify_via_smtp + * NAME + * notify_via_smtp + * INPUTS + * notification string to send as an email + * RESULT + * returns true if message was sent + ******/ +function notify_via_smtp($message, $force = false) { + global $config, $g; + if($g['booting']) + return; + + if(isset($config['notifications']['smtp']['disable']) && !$force) + return; + + /* Do NOT send the same message twice */ + if(file_exists("/var/db/notices_lastmsg.txt")) { + $lastmsg = trim(file_get_contents("/var/db/notices_lastmsg.txt")); + if($lastmsg == $message) + return; + } + + /* Store last message sent to avoid spamming */ + $fd = fopen("/var/db/notices_lastmsg.txt", "w"); + fwrite($fd, $message); + fclose($fd); + + send_smtp_message($message, "{$config['system']['hostname']}.{$config['system']['domain']} - Notification"); + return; +} + +function send_smtp_message($message, $subject = "(no subject)") { + global $config, $g; + require_once("sasl.inc"); + require_once("smtp.inc"); + + if(!$config['notifications']['smtp']['ipaddress']) + return; + + if(!$config['notifications']['smtp']['notifyemailaddress']) + return; + + $smtp = new smtp_class; + + $from = "pfsense@{$config['system']['hostname']}.{$config['system']['domain']}"; + $to = $config['notifications']['smtp']['notifyemailaddress']; + + $smtp->host_name = $config['notifications']['smtp']['ipaddress']; + $smtp->host_port = empty($config['notifications']['smtp']['port']) ? 25 : $config['notifications']['smtp']['port']; + + $smtp->direct_delivery = 0; + $smtp->ssl = (isset($config['notifications']['smtp']['ssl'])) ? 1 : 0; + $smtp->tls = (isset($config['notifications']['smtp']['tls'])) ? 1 : 0; + $smtp->debug = 0; + $smtp->html_debug = 0; + $smtp->localhost=$config['system']['hostname'].".".$config['system']['domain']; + + if($config['notifications']['smtp']['fromaddress']) + $from = $config['notifications']['smtp']['fromaddress']; + + // Use SMTP Auth if fields are filled out + if($config['notifications']['smtp']['username'] && + $config['notifications']['smtp']['password']) { + $smtp->authentication_mechanism = "PLAIN"; + $smtp->user = $config['notifications']['smtp']['username']; + $smtp->password = $config['notifications']['smtp']['password']; + } + + $headers = array( + "From: {$from}", + "To: {$to}", + "Subject: {$subject}", + "Date: ".date("r") + ); + + if($smtp->SendMessage($from, preg_split('/\s*,\s*/', trim($to)), $headers, $message)) { + log_error(sprintf(gettext("Message sent to %s OK"), $to)); + return; + } else { + log_error(sprintf(gettext('Could not send the message to %1$s -- Error: %2$s'), $to, $smtp->error)); + return(sprintf(gettext('Could not send the message to %1$s -- Error: %2$s'), $to, $smtp->error)); + } +} + +/****f* notices/notify_via_growl + * NAME + * notify_via_growl + * INPUTS + * notification string to send + * RESULT + * returns true if message was sent + ******/ +function notify_via_growl($message, $force=false) { + require_once("growl.class"); + global $config,$g; + + if (isset($config['notifications']['growl']['disable']) && !$force) + return; + + /* Do NOT send the same message twice */ + if(file_exists("/var/db/growlnotices_lastmsg.txt")) { + $lastmsg = trim(file_get_contents("/var/db/growlnotices_lastmsg.txt")); + if($lastmsg == $message) + return; + } + + $hostname = $config['system']['hostname'] . "." . $config['system']['domain']; + $growl_ip = $config['notifications']['growl']['ipaddress']; + $growl_password = $config['notifications']['growl']['password']; + $growl_name = $config['notifications']['growl']['name']; + $growl_notification = $config['notifications']['growl']['notification_name']; + + if(!empty($growl_ip)) { + $growl = new Growl($growl_ip, $growl_password, $growl_name); + $growl->notify("{$growl_notification}", gettext(sprintf("%s (%s) - Notification", $g['product_name'], $hostname)), "{$message}"); + } + + /* Store last message sent to avoid spamming */ + $fd = fopen("/var/db/growlnotices_lastmsg.txt", "w"); + fwrite($fd, $message); + fclose($fd); +} + +/****f* notices/register_via_growl + * NAME + * register_via_growl + * INPUTS + * none + * RESULT + * none + ******/ +function register_via_growl() { + require_once("growl.class"); + global $config; + $growl_ip = $config['notifications']['growl']['ipaddress']; + $growl_password = $config['notifications']['growl']['password']; + $growl_name = $config['notifications']['growl']['name']; + $growl_notification = $config['notifications']['growl']['notification_name']; + + if($growl_ip) { + $growl = new Growl($growl_ip, $growl_password, $growl_name); + $growl->addNotification($growl_notification); + $growl->register(); + } +} + +/* Notify via remote methods only - not via GUI. */ +function notify_all_remote($msg) { + notify_via_smtp($msg); + notify_via_growl($msg); +} + +?> diff --git a/usr/etc/inc/ntlm_sasl_client.inc b/usr/etc/inc/ntlm_sasl_client.inc new file mode 100644 index 000000000..f21fcb55c --- /dev/null +++ b/usr/etc/inc/ntlm_sasl_client.inc @@ -0,0 +1,180 @@ +"mcrypt", + "hash"=>"hash" + ); + $client->error="the extension ".$extensions[$function]." required by the NTLM SASL client class is not available in this PHP configuration"; + return(0); + } + return(1); + } + + Function ASCIIToUnicode($ascii) + { + for($unicode="",$a=0;$aASCIIToUnicode($password); + $md4=hash("md4", $unicode); + $padded=$md4.str_repeat(chr(0),21-strlen($md4)); + $iv_size=mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB); + $iv=mcrypt_create_iv($iv_size,MCRYPT_RAND); + for($response="",$third=0;$third<21;$third+=7) + { + for($packed="",$p=$third;$p<$third+7;$p++) + $packed.=str_pad(decbin(ord(substr($padded,$p,1))),8,"0",STR_PAD_LEFT); + for($key="",$p=0;$pASCIIToUnicode($domain); + $domain_length=strlen($domain_unicode); + $domain_offset=64; + $user_unicode=$this->ASCIIToUnicode($user); + $user_length=strlen($user_unicode); + $user_offset=$domain_offset+$domain_length; + $workstation_unicode=$this->ASCIIToUnicode($workstation); + $workstation_length=strlen($workstation_unicode); + $workstation_offset=$user_offset+$user_length; + $lm=""; + $lm_length=strlen($lm); + $lm_offset=$workstation_offset+$workstation_length; + $ntlm=$ntlm_response; + $ntlm_length=strlen($ntlm); + $ntlm_offset=$lm_offset+$lm_length; + $session=""; + $session_length=strlen($session); + $session_offset=$ntlm_offset+$ntlm_length; + return( + "NTLMSSP\0". + "\x03\x00\x00\x00". + pack("v",$lm_length). + pack("v",$lm_length). + pack("V",$lm_offset). + pack("v",$ntlm_length). + pack("v",$ntlm_length). + pack("V",$ntlm_offset). + pack("v",$domain_length). + pack("v",$domain_length). + pack("V",$domain_offset). + pack("v",$user_length). + pack("v",$user_length). + pack("V",$user_offset). + pack("v",$workstation_length). + pack("v",$workstation_length). + pack("V",$workstation_offset). + pack("v",$session_length). + pack("v",$session_length). + pack("V",$session_offset). + "\x01\x02\x00\x00". + $domain_unicode. + $user_unicode. + $workstation_unicode. + $lm. + $ntlm + ); + } + + Function Start(&$client, &$message, &$interactions) + { + if($this->state!=SASL_NTLM_STATE_START) + { + $client->error="NTLM authentication state is not at the start"; + return(SASL_FAIL); + } + $this->credentials=array( + "user"=>"", + "password"=>"", + "realm"=>"", + "workstation"=>"" + ); + $defaults=array(); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + $this->state=SASL_NTLM_STATE_IDENTIFY_DOMAIN; + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { + case SASL_NTLM_STATE_IDENTIFY_DOMAIN: + $message=$this->TypeMsg1($this->credentials["realm"],$this->credentials["workstation"]); + $this->state=SASL_NTLM_STATE_RESPOND_CHALLENGE; + break; + case SASL_NTLM_STATE_RESPOND_CHALLENGE: + $ntlm_response=$this->NTLMResponse(substr($response,24,8),$this->credentials["password"]); + $message=$this->TypeMsg3($ntlm_response,$this->credentials["user"],$this->credentials["realm"],$this->credentials["workstation"]); + $this->state=SASL_NTLM_STATE_DONE; + break; + case SASL_NTLM_STATE_DONE: + $client->error="NTLM authentication was finished without success"; + return(SASL_FAIL); + default: + $client->error="invalid NTLM authentication step state"; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> diff --git a/usr/etc/inc/openvpn.attributes.php b/usr/etc/inc/openvpn.attributes.php new file mode 100644 index 000000000..942a8d80e --- /dev/null +++ b/usr/etc/inc/openvpn.attributes.php @@ -0,0 +1,186 @@ + diff --git a/usr/etc/inc/openvpn.auth-user.php b/usr/etc/inc/openvpn.auth-user.php new file mode 100644 index 000000000..81991e97d --- /dev/null +++ b/usr/etc/inc/openvpn.auth-user.php @@ -0,0 +1,206 @@ +#!/usr/local/bin/php -f + + +if (file_exists("{$g['varetc_path']}/openvpn/{$modeid}.ca")) { + putenv("LDAPTLS_CACERT={$g['varetc_path']}/openvpn/{$modeid}.ca"); + putenv("LDAPTLS_REQCERT=never"); +} + +$authenticated = false; + +if (($strictusercn === true) && ($common_name != $username)) { + syslog(LOG_WARNING, "Username does not match certificate common name ({$username} != {$common_name}), access denied.\n"); + if (isset($_GET)) { + echo "FAILED"; + closelog(); + return; + } else { + closelog(); + exit(1); + } +} + +if (!is_array($authmodes)) { + syslog(LOG_WARNING, "No authentication server has been selected to authenticate against. Denying authentication for user {$username}"); + if (isset($_GET)) { + echo "FAILED"; + closelog(); + return; + } else { + closelog(); + exit(1); + } +} + +$attributes = array(); +foreach ($authmodes as $authmode) { + $authcfg = auth_get_authserver($authmode); + if (!$authcfg && $authmode != "local") + continue; + + $authenticated = authenticate_user($username, $password, $authcfg, $attributes); + if ($authenticated == true) + break; +} + +if ($authenticated == false) { + syslog(LOG_WARNING, "user '{$username}' could not authenticate.\n"); + if (isset($_GET)) { + echo "FAILED"; + closelog(); + return; + } else { + closelog(); + exit(-1); + } +} + +if (file_exists("/etc/inc/openvpn.attributes.php")) + include_once("/etc/inc/openvpn.attributes.php"); + +$content = ""; +if (is_array($attributes['dns-servers'])) { + foreach ($attributes['dns-servers'] as $dnssrv) { + if (is_ipaddr($dnssrv)) + $content .= "push \"dhcp-option DNS {$dnssrv}\"\n"; + } +} +if (is_array($attributes['routes'])) { + foreach ($attributes['routes'] as $route) + $content .= "push \"route {$route} vpn_gateway\"\n"; +} + +if (isset($attributes['framed_ip'])) { +/* XXX: only use when TAP windows driver >= 8.2.x */ +/* if (isset($attributes['framed_mask'])) { + $content .= "topology subnet\n"; + $content .= "ifconfig-push {$attributes['framed_ip']} {$attributes['framed_mask']}"; + } else { +*/ + $content .= "topology net30\n"; + $content .= "ifconfig-push {$attributes['framed_ip']} ". long2ip((ip2long($attributes['framed_ip']) + 1)); +// } +} + +if (!empty($content)) + @file_put_contents("{$g['tmp_path']}/{$username}", $content); + +syslog(LOG_NOTICE, "user '{$username}' authenticated\n"); +closelog(); + +if (isset($_GET)) + echo "OK"; +else + exit(0); + +?> diff --git a/usr/etc/inc/openvpn.inc b/usr/etc/inc/openvpn.inc new file mode 100644 index 000000000..c7d918c69 --- /dev/null +++ b/usr/etc/inc/openvpn.inc @@ -0,0 +1,1446 @@ + + All rights reserved. + + Copyright (C) 2006 Fernando Lemos + All rights reserved. + + This file was rewritten from scratch by Fernando Lemos but + *MIGHT* contain code previously written by: + + Copyright (C) 2005 Peter Allgeyer + All rights reserved. + + Copyright (C) 2004 Peter Curran (peter@closeconsultants.com). + 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 notices, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notices, 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. + + DISABLE_PHP_LINT_CHECKING + + pfSense_BUILDER_BINARIES: /usr/local/sbin/openvpn /usr/bin/openssl /sbin/ifconfig + pfSense_MODULE: openvpn + +*/ +require_once('config.inc'); +require_once("certs.inc"); +require_once('pfsense-utils.inc'); +require_once("auth.inc"); + +global $openvpn_prots; +$openvpn_prots = array("UDP", "UDP6", "TCP", "TCP6"); + +global $openvpn_dev_mode; +$openvpn_dev_mode = array("tun", "tap"); + +global $openvpn_verbosity_level; +$openvpn_verbosity_level = array( + 0 => "none", + 1 => "default", + 2 => "2", + 3 => "3 (recommended)", + 4 => "4", + 5 => "5", + 6 => "6", + 7 => "7", + 8 => "8", + 9 => "9", + 10 => "10", + 11 => "11" +); + +/* + * The User Auth mode below is disabled because + * OpenVPN erroneously requires that we provide + * a CA configuration parameter. In this mode, + * clients don't send a certificate so there is + * no need for a CA. If we require that admins + * provide one in the pfSense UI due to a bogus + * requirement imposed by OpenVPN, it could be + * considered very confusing ( I know I was ). + * + * -mgrooms + */ + +global $openvpn_dh_lengths; +$openvpn_dh_lengths = array( + 1024, 2048, 4096 ); + +global $openvpn_cert_depths; +$openvpn_cert_depths = array( + 1 => "One (Client+Server)", + 2 => "Two (Client+Intermediate+Server)", + 3 => "Three (Client+2xIntermediate+Server)", + 4 => "Four (Client+3xIntermediate+Server)", + 5 => "Five (Client+4xIntermediate+Server)" +); + +global $openvpn_server_modes; +$openvpn_server_modes = array( + 'p2p_tls' => gettext("Peer to Peer ( SSL/TLS )"), + 'p2p_shared_key' => gettext("Peer to Peer ( Shared Key )"), + 'server_tls' => gettext("Remote Access ( SSL/TLS )"), + 'server_user' => gettext("Remote Access ( User Auth )"), + 'server_tls_user' => gettext("Remote Access ( SSL/TLS + User Auth )")); + +global $openvpn_client_modes; +$openvpn_client_modes = array( + 'p2p_tls' => gettext("Peer to Peer ( SSL/TLS )"), + 'p2p_shared_key' => gettext("Peer to Peer ( Shared Key )") ); + +global $openvpn_compression_modes; +$openvpn_compression_modes = array( + '' => gettext("No Preference"), + 'no' => gettext("Disabled - No Compression"), + 'adaptive' => gettext("Enabled with Adaptive Compression"), + 'yes' => gettext("Enabled without Adaptive Compression")); + +function openvpn_create_key() { + + $fp = popen("/usr/local/sbin/openvpn --genkey --secret /dev/stdout 2>/dev/null", "r"); + if (!$fp) + return false; + + $rslt = stream_get_contents($fp); + pclose($fp); + + return $rslt; +} + +function openvpn_create_dhparams($bits) { + + $fp = popen("/usr/bin/openssl dhparam {$bits} 2>/dev/null", "r"); + if (!$fp) + return false; + + $rslt = stream_get_contents($fp); + pclose($fp); + + return $rslt; +} + +function openvpn_vpnid_used($vpnid) { + global $config; + + if (is_array($config['openvpn']['openvpn-server'])) + foreach ($config['openvpn']['openvpn-server'] as & $settings) + if ($vpnid == $settings['vpnid']) + return true; + + if (is_array($config['openvpn']['openvpn-client'])) + foreach ($config['openvpn']['openvpn-client'] as & $settings) + if ($vpnid == $settings['vpnid']) + return true; + + return false; +} + +function openvpn_vpnid_next() { + + $vpnid = 1; + while(openvpn_vpnid_used($vpnid)) + $vpnid++; + + return $vpnid; +} + +function openvpn_port_used($prot, $interface, $port, $curvpnid = 0) { + global $config; + + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as & $settings) { + if (isset($settings['disable'])) + continue; + + if ($curvpnid != 0 && $curvpnid == $settings['vpnid']) + continue; + + if ($port == $settings['local_port'] && $prot == $settings['protocol'] && + ($interface == $settings['interface'] || $interface == "any" || $settings['interface'] == "any")) + return $settings['vpnid']; + } + } + + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as & $settings) { + if (isset($settings['disable'])) + continue; + + if ($curvpnid != 0 && $curvpnid == $settings['vpnid']) + continue; + + if ($port == $settings['local_port'] && $prot == $settings['protocol'] && + ($interface == $settings['interface'] || $interface == "any" || $settings['interface'] == "any")) + return $settings['vpnid']; + } + } + + return 0; +} + +function openvpn_port_next($prot, $interface = "wan") { + + $port = 1194; + while(openvpn_port_used($prot, $interface, $port)) + $port++; + while(openvpn_port_used($prot, "any", $port)) + $port++; + + return $port; +} + +function openvpn_get_cipherlist() { + + $ciphers = array(); + $cipher_out = shell_exec('/usr/local/sbin/openvpn --show-ciphers | /usr/bin/grep "default key" | /usr/bin/awk \'{print $1, "(" $2 "-" $3 ")";}\''); + $cipher_lines = explode("\n", trim($cipher_out)); + sort($cipher_lines); + foreach ($cipher_lines as $line) { + $words = explode(' ', $line); + $ciphers[$words[0]] = "{$words[0]} {$words[1]}"; + } + $ciphers["none"] = gettext("None (No Encryption)"); + return $ciphers; +} + +function openvpn_get_digestlist() { + + $digests = array(); + $digest_out = shell_exec('/usr/local/sbin/openvpn --show-digests | /usr/bin/grep "digest size" | /usr/bin/awk \'{print $1, "(" $2 "-" $3 ")";}\''); + $digest_lines = explode("\n", trim($digest_out)); + sort($digest_lines); + foreach ($digest_lines as $line) { + $words = explode(' ', $line); + $digests[$words[0]] = "{$words[0]} {$words[1]}"; + } + $digests["none"] = gettext("None (No Authentication)"); + return $digests; +} + +function openvpn_get_engines() { + $openssl_engines = array('none' => 'No Hardware Crypto Acceleration'); + exec("/usr/bin/openssl engine -t -c", $openssl_engine_output); + $openssl_engine_output = implode("\n", $openssl_engine_output); + $openssl_engine_output = preg_replace("/\\n\\s+/", "|", $openssl_engine_output); + $openssl_engine_output = explode("\n", $openssl_engine_output); + + foreach ($openssl_engine_output as $oeo) { + $keep = true; + $details = explode("|", $oeo); + $engine = array_shift($details); + $linematch = array(); + preg_match("/\((.*)\)\s(.*)/", $engine, $linematch); + foreach ($details as $dt) { + if (strpos($dt, "unavailable") !== FALSE) + $keep = false; + if (strpos($dt, "available") !== FALSE) + continue; + if (strpos($dt, "[") !== FALSE) + $ciphers = trim($dt, "[]"); + } + if (!empty($ciphers)) + $ciphers = " - " . $ciphers; + if (strlen($ciphers) > 60) + $ciphers = substr($ciphers, 0, 60) . " ... "; + if ($keep) + $openssl_engines[$linematch[1]] = $linematch[2] . $ciphers; + } + return $openssl_engines; +} + +function openvpn_validate_engine($engine) { + $engines = openvpn_get_engines(); + return array_key_exists($engine, $engines); +} + +function openvpn_validate_host($value, $name) { + $value = trim($value); + if (empty($value) || (!is_domain($value) && !is_ipaddr($value))) + return sprintf(gettext("The field '%s' must contain a valid IP address or domain name."), $name); + return false; +} + +function openvpn_validate_port($value, $name) { + $value = trim($value); + if (empty($value) || !is_numeric($value) || $value < 0 || ($value > 65535)) + return sprintf(gettext("The field '%s' must contain a valid port, ranging from 0 to 65535."), $name); + return false; +} + +function openvpn_validate_cidr($value, $name, $multiple = false, $ipproto = "ipv4") { + $value = trim($value); + $error = false; + if (empty($value)) + return false; + $networks = explode(',', $value); + + if (!$multiple && (count($networks) > 1)) + return sprintf(gettext("The field '%s' must contain a single valid %s CIDR range."), $name, $ipproto); + + foreach ($networks as $network) { + if ($ipproto == "ipv4") + $error = !openvpn_validate_cidr_ipv4($network); + else + $error = !openvpn_validate_cidr_ipv6($network); + if ($error) + break; + } + + if ($error) + return sprintf(gettext("The field '%s' must contain only valid %s CIDR range(s) separated by commas."), $name, $ipproto); + else + return false; +} + +function openvpn_validate_cidr_ipv4($value) { + $value = trim($value); + if (!empty($value)) { + list($ip, $mask) = explode('/', $value); + if (!is_ipaddrv4($ip) or !is_numeric($mask) or ($mask > 32) or ($mask < 0)) + return false; + } + return true; +} + +function openvpn_validate_cidr_ipv6($value) { + $value = trim($value); + if (!empty($value)) { + list($ipv6, $prefix) = explode('/', $value); + if (empty($prefix)) + $prefix = "128"; + if (!is_ipaddrv6($ipv6) or !is_numeric($prefix) or ($prefix > 128) or ($prefix < 0)) + return false; + } + return true; +} + +function openvpn_add_dhcpopts(& $settings, & $conf) { + + if (!empty($settings['dns_domain'])) + $conf .= "push \"dhcp-option DOMAIN {$settings['dns_domain']}\"\n"; + + if (!empty($settings['dns_server1'])) + $conf .= "push \"dhcp-option DNS {$settings['dns_server1']}\"\n"; + if (!empty($settings['dns_server2'])) + $conf .= "push \"dhcp-option DNS {$settings['dns_server2']}\"\n"; + if (!empty($settings['dns_server3'])) + $conf .= "push \"dhcp-option DNS {$settings['dns_server3']}\"\n"; + if (!empty($settings['dns_server4'])) + $conf .= "push \"dhcp-option DNS {$settings['dns_server4']}\"\n"; + + if (!empty($settings['push_register_dns'])) + $conf .= "push \"register-dns\"\n"; + + if (!empty($settings['ntp_server1'])) + $conf .= "push \"dhcp-option NTP {$settings['ntp_server1']}\"\n"; + if (!empty($settings['ntp_server2'])) + $conf .= "push \"dhcp-option NTP {$settings['ntp_server2']}\"\n"; + + if ($settings['netbios_enable']) { + + if (!empty($settings['dhcp_nbttype']) && ($settings['dhcp_nbttype'] != 0)) + $conf .= "push \"dhcp-option NBT {$settings['dhcp_nbttype']}\"\n"; + if (!empty($settings['dhcp_nbtscope'])) + $conf .= "push \"dhcp-option NBS {$settings['dhcp_nbtscope']}\"\n"; + + if (!empty($settings['wins_server1'])) + $conf .= "push \"dhcp-option WINS {$settings['wins_server1']}\"\n"; + if (!empty($settings['wins_server2'])) + $conf .= "push \"dhcp-option WINS {$settings['wins_server2']}\"\n"; + + if (!empty($settings['nbdd_server1'])) + $conf .= "push \"dhcp-option NBDD {$settings['nbdd_server1']}\"\n"; + } + + if ($settings['gwredir']) + $conf .= "push \"redirect-gateway def1\"\n"; +} + +function openvpn_add_custom(& $settings, & $conf) { + + if ($settings['custom_options']) { + + $options = explode(';', $settings['custom_options']); + + if (is_array($options)) { + foreach ($options as $option) + $conf .= "$option\n"; + } else + $conf .= "{$settings['custom_options']}\n"; + } +} + +function openvpn_add_keyfile(& $data, & $conf, $mode_id, $directive, $opt = "") { + global $g; + + $fpath = $g['varetc_path']."/openvpn/{$mode_id}.{$directive}"; + openvpn_create_dirs(); + file_put_contents($fpath, base64_decode($data)); + //chown($fpath, 'nobody'); + //chgrp($fpath, 'nobody'); + @chmod($fpath, 0600); + + $conf .= "{$directive} {$fpath} {$opt}\n"; +} + +function openvpn_reconfigure($mode, $settings) { + global $g, $config; + + if (empty($settings)) + return; + if (isset($settings['disable'])) + return; + openvpn_create_dirs(); + /* + * NOTE: Deleting tap devices causes spontaneous reboots. Instead, + * we use a vpnid number which is allocated for a particular client + * or server configuration. ( see openvpn_vpnid_next() ) + */ + + $vpnid = $settings['vpnid']; + $mode_id = $mode.$vpnid; + + if (isset($settings['dev_mode'])) + $tunname = "{$settings['dev_mode']}{$vpnid}"; + else { /* defaults to tun */ + $tunname = "tun{$vpnid}"; + $settings['dev_mode'] = "tun"; + } + + if ($mode == "server") + $devname = "ovpns{$vpnid}"; + else + $devname = "ovpnc{$vpnid}"; + + /* is our device already configured */ + if (!does_interface_exist($devname)) { + + /* create the tap device if required */ + if (!file_exists("/dev/{$tunname}")) + exec("/sbin/ifconfig " . escapeshellarg($tunname) . " create"); + + /* rename the device */ + mwexec("/sbin/ifconfig " . escapeshellarg($tunname) . " name " . escapeshellarg($devname)); + + /* add the device to the openvpn group */ + mwexec("/sbin/ifconfig " . escapeshellarg($devname) . " group openvpn"); + } + + $pfile = $g['varrun_path'] . "/openvpn_{$mode_id}.pid"; + $proto = strtolower($settings['protocol']); + if (substr($settings['protocol'], 0, 3) == "TCP") + $proto = "{$proto}-{$mode}"; + $dev_mode = $settings['dev_mode']; + $cipher = $settings['crypto']; + // OpenVPN defaults to SHA1, so use it when unset to maintain compatibility. + $digest = !empty($settings['digest']) ? $settings['digest'] : "SHA1"; + + $interface = get_failover_interface($settings['interface']); + $ipaddr = $settings['ipaddr']; + $ipaddrv6 = $settings['ipaddrv6']; + + // If a specific ip address (VIP) is requested, use it. + // Otherwise, if a specific interface is requested, use it + // If "any" interface was selected, local directive will be ommited. + if (is_ipaddrv4($ipaddr)) { + $iface_ip=$ipaddr; + } else { + if ((!empty($interface)) && (strcmp($interface, "any"))) { + $iface_ip=get_interface_ip($interface); + } + } + if (is_ipaddrv6($ipaddrv6)) { + $iface_ipv6=$ipaddrv6; + } else { + if ((!empty($interface)) && (strcmp($interface, "any"))) { + $iface_ipv6=get_interface_ipv6($interface); + } + } + + + $conf = "dev {$devname}\n"; + if (isset($settings['verbosity_level'])) { + $conf .= "verb {$settings['verbosity_level']}\n"; + } + + $conf .= "dev-type {$settings['dev_mode']}\n"; + switch($settings['dev_mode']) { + case "tun": + if (!$settings['no_tun_ipv6']) { + $conf .= "tun-ipv6\n"; + } + break; + } + $conf .= "dev-node /dev/{$tunname}\n"; + $conf .= "writepid {$pfile}\n"; + $conf .= "#user nobody\n"; + $conf .= "#group nobody\n"; + $conf .= "script-security 3\n"; + $conf .= "daemon\n"; + $conf .= "keepalive 10 60\n"; + $conf .= "ping-timer-rem\n"; + $conf .= "persist-tun\n"; + $conf .= "persist-key\n"; + $conf .= "proto {$proto}\n"; + $conf .= "cipher {$cipher}\n"; + $conf .= "auth {$digest}\n"; + $conf .= "up /usr/local/sbin/ovpn-linkup\n"; + $conf .= "down /usr/local/sbin/ovpn-linkdown\n"; + if (file_exists("/usr/local/sbin/openvpn.attributes.sh")) { + switch($settings['mode']) { + case 'server_user': + case 'server_tls_user': + $conf .= "client-connect /usr/local/sbin/openvpn.attributes.sh\n"; + $conf .= "client-disconnect /usr/local/sbin/openvpn.attributes.sh\n"; + break; + } + } + + /* Determine the local IP to use - and make sure it matches with the selected protocol. */ + if (is_ipaddrv4($iface_ip) && (stristr($settings['protocol'], "6") === false)) { + $conf .= "local {$iface_ip}\n"; + } elseif (is_ipaddrv6($iface_ipv6) && (stristr($settings['protocol'], "6") !== false)) { + $conf .= "local {$iface_ipv6}\n"; + } + + if (openvpn_validate_engine($settings['engine']) && ($settings['engine'] != "none")) + $conf .= "engine {$settings['engine']}\n"; + + // server specific settings + if ($mode == 'server') { + + list($ip, $cidr) = explode('/', $settings['tunnel_network']); + list($ipv6, $prefix) = explode('/', $settings['tunnel_networkv6']); + $mask = gen_subnet_mask($cidr); + + // configure tls modes + switch($settings['mode']) { + case 'p2p_tls': + case 'server_tls': + case 'server_user': + case 'server_tls_user': + $conf .= "tls-server\n"; + break; + } + + // configure p2p/server modes + switch($settings['mode']) { + case 'p2p_tls': + // If the CIDR is less than a /30, OpenVPN will complain if you try to + // use the server directive. It works for a single client without it. + // See ticket #1417 + if (!empty($ip) && !empty($mask) && ($cidr < 30)) { + $conf .= "server {$ip} {$mask}\n"; + $conf .= "client-config-dir {$g['varetc_path']}/openvpn-csc\n"; + if(is_ipaddr($ipv6)) + $conf .= "server-ipv6 {$ipv6}/{$prefix}\n"; + } + case 'p2p_shared_key': + if (!empty($ip) && !empty($mask)) { + list($ip1, $ip2) = openvpn_get_interface_ip($ip, $mask); + if ($settings['dev_mode'] == 'tun') + $conf .= "ifconfig {$ip1} {$ip2}\n"; + else + $conf .= "ifconfig {$ip1} {$mask}\n"; + } + if (!empty($ipv6) && !empty($prefix)) { + list($ipv6_1, $ipv6_2) = openvpn_get_interface_ipv6($ipv6, $prefix); + if ($settings['dev_mode'] == 'tun') + $conf .= "ifconfig-ipv6 {$ipv6_1} {$ipv6_2}\n"; + else + $conf .= "ifconfig-ipv6 {$ipv6_1} {$prefix}\n"; + } + break; + case 'server_tls': + case 'server_user': + case 'server_tls_user': + if (!empty($ip) && !empty($mask)) { + $conf .= "server {$ip} {$mask}\n"; + if(is_ipaddr($ipv6)) + $conf .= "server-ipv6 {$ipv6}/{$prefix}\n"; + $conf .= "client-config-dir {$g['varetc_path']}/openvpn-csc\n"; + } else { + if ($settings['serverbridge_dhcp']) { + if ((!empty($settings['serverbridge_interface'])) && (strcmp($settings['serverbridge_interface'], "none"))) { + $biface_ip=get_interface_ip($settings['serverbridge_interface']); + $biface_sm=gen_subnet_mask(get_interface_subnet($settings['serverbridge_interface'])); + if (is_ipaddrv4($biface_ip) && is_ipaddrv4($settings['serverbridge_dhcp_start']) && is_ipaddrv4($settings['serverbridge_dhcp_end'])) { + $conf .= "server-bridge {$biface_ip} {$biface_sm} {$settings['serverbridge_dhcp_start']} {$settings['serverbridge_dhcp_end']}\n"; + $conf .= "client-config-dir {$g['varetc_path']}/openvpn-csc\n"; + } else { + $conf .= "mode server\n"; + } + } else { + $conf .= "mode server\n"; + } + } + } + break; + } + + // configure user auth modes + switch($settings['mode']) { + case 'server_user': + $conf .= "client-cert-not-required\n"; + case 'server_tls_user': + /* username-as-common-name is not compatible with server-bridge */ + if (stristr($conf, "server-bridge") === false) + $conf .= "username-as-common-name\n"; + if (!empty($settings['authmode'])) { + $strictusercn = "false"; + if ($settings['strictusercn']) + $strictusercn = "true"; + $conf .= "auth-user-pass-verify \"/usr/local/sbin/ovpn_auth_verify user '{$settings['authmode']}' {$strictusercn} {$mode_id}\" via-env\n"; + } + break; + } + if (!isset($settings['cert_depth']) && (strstr($settings['mode'], 'tls'))) + $settings['cert_depth'] = 1; + if (is_numeric($settings['cert_depth'])) { + if (($mode == 'client') && empty($settings['certref'])) + $cert = ""; + else { + $cert = lookup_cert($settings['certref']); + /* XXX: Seems not used at all! */ + $servercn = urlencode(cert_get_cn($cert['crt'])); + $conf .= "tls-verify \"/usr/local/sbin/ovpn_auth_verify tls '{$servercn}' {$settings['cert_depth']}\"\n"; + } + } + + // The local port to listen on + $conf .= "lport {$settings['local_port']}\n"; + + // The management port to listen on + // Use unix socket to overcome the problem on any type of server + $conf .= "management {$g['varetc_path']}/openvpn/{$mode_id}.sock unix\n"; + //$conf .= "management 127.0.0.1 {$settings['local_port']}\n"; + + if ($settings['maxclients']) + $conf .= "max-clients {$settings['maxclients']}\n"; + + // Can we push routes + if ($settings['local_network']) { + $conf .= openvpn_gen_routes($settings['local_network'], "ipv4", true); + } + if ($settings['local_networkv6']) { + $conf .= openvpn_gen_routes($settings['local_networkv6'], "ipv6", true); + } + + switch($settings['mode']) { + case 'server_tls': + case 'server_user': + case 'server_tls_user': + // Configure client dhcp options + openvpn_add_dhcpopts($settings, $conf); + if ($settings['client2client']) + $conf .= "client-to-client\n"; + break; + } + if (isset($settings['duplicate_cn'])) + $conf .= "duplicate-cn\n"; + } + + // client specific settings + + if ($mode == 'client') { + + // configure p2p mode + switch($settings['mode']) { + case 'p2p_tls': + $conf .= "tls-client\n"; + case 'shared_key': + $conf .= "client\n"; + break; + } + + // If there is no bind option at all (ip and/or port), add "nobind" directive + // Otherwise, use the local port if defined, failing that, use lport 0 to + // ensure a random source port. + if ((empty($iface_ip)) && (!$settings['local_port'])) + $conf .= "nobind\n"; + elseif ($settings['local_port']) + $conf .= "lport {$settings['local_port']}\n"; + else + $conf .= "lport 0\n"; + + // Use unix socket to overcome the problem on any type of server + $conf .= "management {$g['varetc_path']}/openvpn/{$mode_id}.sock unix\n"; + + // The remote server + $conf .= "remote {$settings['server_addr']} {$settings['server_port']}\n"; + + if (!empty($settings['use_shaper'])) + $conf .= "shaper {$settings['use_shaper']}\n"; + + if (!empty($settings['tunnel_network'])) { + list($ip, $mask) = explode('/', $settings['tunnel_network']); + $mask = gen_subnet_mask($mask); + list($ip1, $ip2) = openvpn_get_interface_ip($ip, $mask); + if ($settings['dev_mode'] == 'tun') + $conf .= "ifconfig {$ip2} {$ip1}\n"; + else + $conf .= "ifconfig {$ip2} {$mask}\n"; + } + + if (!empty($settings['tunnel_networkv6'])) { + list($ipv6, $prefix) = explode('/', $settings['tunnel_networkv6']); + list($ipv6_1, $ipv6_2) = openvpn_get_interface_ipv6($ipv6, $prefix); + if ($settings['dev_mode'] == 'tun') + $conf .= "ifconfig-ipv6 {$ipv6_2} {$ipv6_1}\n"; + else + $conf .= "ifconfig-ipv6 {$ipv6_2} {$prefix}\n"; + } + + if ($settings['auth_user'] && $settings['auth_pass']) { + $up_file = "{$g['varetc_path']}/openvpn/{$mode_id}.up"; + $conf .= "auth-user-pass {$up_file}\n"; + $userpass = "{$settings['auth_user']}\n"; + $userpass .= "{$settings['auth_pass']}\n"; + file_put_contents($up_file, $userpass); + } + + if ($settings['proxy_addr']) { + $conf .= "http-proxy {$settings['proxy_addr']} {$settings['proxy_port']}"; + if ($settings['proxy_authtype'] != "none") { + $conf .= " {$g['varetc_path']}/openvpn/{$mode_id}.pas {$settings['proxy_authtype']}"; + $proxypas = "{$settings['proxy_user']}\n"; + $proxypas .= "{$settings['proxy_passwd']}\n"; + file_put_contents("{$g['varetc_path']}/openvpn/{$mode_id}.pas", $proxypas); + } + $conf .= " \n"; + } + } + + // Add a remote network route if set, and only for p2p modes. + if ((substr($settings['mode'], 0, 3) == "p2p") && (openvpn_validate_cidr($settings['remote_network'], "", true, "ipv4") === FALSE)) { + $conf .= openvpn_gen_routes($settings['remote_network'], "ipv4", false); + } + // Add a remote network route if set, and only for p2p modes. + if ((substr($settings['mode'], 0, 3) == "p2p") && (openvpn_validate_cidr($settings['remote_networkv6'], "", true, "ipv6") === FALSE)) { + $conf .= openvpn_gen_routes($settings['remote_networkv6'], "ipv6", false); + } + + // Write the settings for the keys + switch($settings['mode']) { + case 'p2p_shared_key': + openvpn_add_keyfile($settings['shared_key'], $conf, $mode_id, "secret"); + break; + case 'p2p_tls': + case 'server_tls': + case 'server_tls_user': + case 'server_user': + $ca = lookup_ca($settings['caref']); + openvpn_add_keyfile($ca['crt'], $conf, $mode_id, "ca"); + + if (!empty($settings['certref'])) { + $cert = lookup_cert($settings['certref']); + openvpn_add_keyfile($cert['crt'], $conf, $mode_id, "cert"); + openvpn_add_keyfile($cert['prv'], $conf, $mode_id, "key"); + } + if ($mode == 'server') + $conf .= "dh {$g['etc_path']}/dh-parameters.{$settings['dh_length']}\n"; + if (!empty($settings['crlref'])) { + $crl = lookup_crl($settings['crlref']); + crl_update($crl); + openvpn_add_keyfile($crl['text'], $conf, $mode_id, "crl-verify"); + } + if ($settings['tls']) { + if ($mode == "server") + $tlsopt = 0; + else + $tlsopt = 1; + openvpn_add_keyfile($settings['tls'], $conf, $mode_id, "tls-auth", $tlsopt); + } + break; + } + + if (!empty($settings['compression'])) + $conf .= "comp-lzo {$settings['compression']}\n"; + + if ($settings['passtos']) + $conf .= "passtos\n"; + + if ($settings['resolve_retry']) + $conf .= "resolv-retry infinite\n"; + + if ($settings['dynamic_ip']) { + $conf .= "persist-remote-ip\n"; + $conf .= "float\n"; + } + + if ($settings['topology_subnet']) { + $conf .= "topology subnet\n"; + } + + // New client features + if ($mode == "client") { + // Dont pull routes checkbox + if ($settings['route_no_pull']) { + $conf .= "route-nopull\n"; + } + + // Dont add/remove routes checkbox + if ($settings['route_no_exec']) { + $conf .= "route-noexec\n"; + } + } + + openvpn_add_custom($settings, $conf); + + openvpn_create_dirs(); + $fpath = "{$g['varetc_path']}/openvpn/{$mode_id}.conf"; + file_put_contents($fpath, $conf); + unset($conf); + $fpath = "{$g['varetc_path']}/openvpn/{$mode_id}.interface"; + file_put_contents($fpath, $interface); + //chown($fpath, 'nobody'); + //chgrp($fpath, 'nobody'); + @chmod("{$g['varetc_path']}/openvpn/{$mode_id}.conf", 0600); + @chmod("{$g['varetc_path']}/openvpn/{$mode_id}.interface", 0600); + @chmod("{$g['varetc_path']}/openvpn/{$mode_id}.key", 0600); + @chmod("{$g['varetc_path']}/openvpn/{$mode_id}.tls-auth", 0600); + @chmod("{$g['varetc_path']}/openvpn/{$mode_id}.conf", 0600); +} + +function openvpn_restart($mode, $settings) { + global $g, $config; + + $vpnid = $settings['vpnid']; + $mode_id = $mode.$vpnid; + + /* kill the process if running */ + $pfile = $g['varrun_path']."/openvpn_{$mode_id}.pid"; + if (file_exists($pfile)) { + + /* read the pid file */ + $pid = rtrim(file_get_contents($pfile)); + unlink($pfile); + + /* send a term signal to the process */ + posix_kill($pid, SIGTERM); + + /* wait until the process exits */ + while(posix_kill($pid, 0)) + usleep(250000); + } + + if (isset($settings['disable'])) + return; + + /* Do not start a client if we are a CARP backup on this vip! */ + if (($mode == "client") && (strstr($settings['interface'], "_vip") && get_carp_interface_status($settings['interface']) == "BACKUP")) + return; + + /* Check if client is bound to a gateway group */ + $a_groups = return_gateway_groups_array(); + if (is_array($a_groups[$settings['interface']])) { + /* the interface is a gateway group. If a vip is defined and its a CARP backup then do not start */ + if (($a_groups[$settings['interface']][0]['vip'] <> "") && (get_carp_interface_status($a_groups[$settings['interface']][0]['vip']) == "BACKUP")) + return; + } + + /* start the new process */ + $fpath = $g['varetc_path']."/openvpn/{$mode_id}.conf"; + openvpn_clear_route($mode, $settings); + mwexec_bg("/usr/local/sbin/openvpn --config " . escapeshellarg($fpath)); + + if (!$g['booting']) + send_event("filter reload"); +} + +function openvpn_delete($mode, & $settings) { + global $g, $config; + + $vpnid = $settings['vpnid']; + $mode_id = $mode.$vpnid; + + if (isset($settings['dev_mode'])) + $tunname = "{$settings['dev_mode']}{$vpnid}"; + else { /* defaults to tun */ + $tunname = "tun{$vpnid}"; + } + + if ($mode == "server") + $devname = "ovpns{$vpnid}"; + else + $devname = "ovpnc{$vpnid}"; + + /* kill the process if running */ + $pfile = "{$g['varrun_path']}/openvpn_{$mode_id}.pid"; + if (file_exists($pfile)) { + + /* read the pid file */ + $pid = trim(file_get_contents($pfile)); + unlink($pfile); + + /* send a term signal to the process */ + posix_kill($pid, SIGTERM); + } + + /* remove the device from the openvpn group */ + mwexec("/sbin/ifconfig " . escapeshellarg($devname) . " -group openvpn"); + + /* restore the original adapter name */ + mwexec("/sbin/ifconfig " . escapeshellarg($devname) . " name " . escapeshellarg($tunname)); + + /* remove the configuration files */ + @array_map('unlink', glob("{$g['varetc_path']}/openvpn/{$mode_id}.*")); +} + +function openvpn_cleanup_csc($common_name) { + global $g, $config; + if (empty($common_name)) + return; + $fpath = "{$g['varetc_path']}/openvpn-csc/" . basename($common_name); + if (is_file($fpath)) + unlink_if_exists($fpath); + return; +} + +function openvpn_resync_csc(& $settings) { + global $g, $config; + + $fpath = $g['varetc_path']."/openvpn-csc/".$settings['common_name']; + + if (isset($settings['disable'])) { + unlink_if_exists($fpath); + return; + } + openvpn_create_dirs(); + + $conf = ''; + if ($settings['block']) + $conf .= "disable\n"; + + if ($settings['push_reset']) + $conf .= "push-reset\n"; + + if (!empty($settings['tunnel_network'])) { + list($ip, $mask) = explode('/', $settings['tunnel_network']); + $baselong = ip2long32($ip) & gen_subnet_mask_long($mask); + $serverip = long2ip32($baselong + 1); + $clientip = long2ip32($baselong + 2); + /* Because this is being pushed, the order from the client's point of view. */ + if ($settings['dev_mode'] != 'tap') + $conf .= "ifconfig-push {$clientip} {$serverip}\n"; + else + $conf .= "ifconfig-push {$clientip} {$mask}\n"; + } + + if ($settings['local_network']) { + $conf .= openvpn_gen_routes($settings['local_network'], "ipv4", true); + } + if ($settings['local_networkv6']) { + $conf .= openvpn_gen_routes($settings['local_networkv6'], "ipv6", true); + } + + // Add a remote network iroute if set + if (openvpn_validate_cidr($settings['remote_network'], "", true, "ipv4") === FALSE) { + $conf .= openvpn_gen_routes($settings['remote_network'], "ipv4", false, true); + } + // Add a remote network iroute if set + if (openvpn_validate_cidr($settings['remote_networkv6'], "", true, "ipv6") === FALSE) { + $conf .= openvpn_gen_routes($settings['remote_networkv6'], "ipv6", false, true); + } + + openvpn_add_dhcpopts($settings, $conf); + + if ($settings['gwredir']) + $conf .= "push \"redirect-gateway def1\"\n"; + + openvpn_add_custom($settings, $conf); + + file_put_contents($fpath, $conf); + chown($fpath, 'nobody'); + chgrp($fpath, 'nobody'); +} + +function openvpn_delete_csc(& $settings) { + global $g, $config; + + $fpath = $g['varetc_path']."/openvpn-csc/".$settings['common_name']; + unlink_if_exists($fpath); +} + +// Resync the configuration and restart the VPN +function openvpn_resync($mode, $settings) { + openvpn_reconfigure($mode, $settings); + openvpn_restart($mode, $settings); +} + +// Resync and restart all VPNs +function openvpn_resync_all($interface = "") { + global $g, $config; + + if ($g['platform'] == 'jail') + return; + openvpn_create_dirs(); + + if (!is_array($config['openvpn'])) + $config['openvpn'] = array(); + +/* + if (!$config['openvpn']['dh-parameters']) { + echo "Configuring OpenVPN Parameters ...\n"; + $dh_parameters = openvpn_create_dhparams(1024); + $dh_parameters = base64_encode($dh_parameters); + $config['openvpn']['dh-parameters'] = $dh_parameters; + write_config("OpenVPN DH parameters"); + } + + $path_ovdh = $g['varetc_path']."/openvpn/dh-parameters"; + if (!file_exists($path_ovdh)) { + $dh_parameters = $config['openvpn']['dh-parameters']; + $dh_parameters = base64_decode($dh_parameters); + file_put_contents($path_ovdh, $dh_parameters); + } +*/ + if ($interface <> "") + log_error("Resyncing OpenVPN instances for interface " . convert_friendly_interface_to_friendly_descr($interface) . "."); + else + log_error("Resyncing OpenVPN instances."); + + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as & $settings) { + if ($interface <> "" && $interface != $settings['interface']) + continue; + openvpn_resync('server', $settings); + } + } + + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as & $settings) { + if ($interface <> "" && $interface != $settings['interface']) + continue; + openvpn_resync('client', $settings); + } + } + + if (is_array($config['openvpn']['openvpn-csc'])) + foreach ($config['openvpn']['openvpn-csc'] as & $settings) + openvpn_resync_csc($settings); + +} + +// Resync and restart all VPNs using a gateway group. +function openvpn_resync_gwgroup($gwgroupname = "") { + global $g, $config; + + if ($gwgroupname <> "") { + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as & $settings) { + if ($gwgroupname == $settings['interface']) { + log_error("Resyncing OpenVPN for gateway group " . $gwgroupname . " server " . $settings["description"] . "."); + openvpn_resync('server', $settings); + } + } + } + + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as & $settings) { + if ($gwgroupname == $settings['interface']) { + log_error("Resyncing OpenVPN for gateway group " . $gwgroupname . " client " . $settings["description"] . "."); + openvpn_resync('client', $settings); + } + } + } + + // Note: no need to resysnc Client Specific (csc) here, as changes to the OpenVPN real interface do not effect these. + + } else + log_error("openvpn_resync_gwgroup called with null gwgroup parameter."); +} + +function openvpn_get_active_servers($type="multipoint") { + global $config, $g; + + $servers = array(); + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as & $settings) { + if (empty($settings) || isset($settings['disable'])) + continue; + + $prot = $settings['protocol']; + $port = $settings['local_port']; + + $server = array(); + $server['port'] = ($settings['local_port']) ? $settings['local_port'] : 1194; + $server['mode'] = $settings['mode']; + if ($settings['description']) + $server['name'] = "{$settings['description']} {$prot}:{$port}"; + else + $server['name'] = "Server {$prot}:{$port}"; + $server['conns'] = array(); + $server['vpnid'] = $settings['vpnid']; + $server['mgmt'] = "server{$server['vpnid']}"; + $socket = "unix://{$g['varetc_path']}/openvpn/{$server['mgmt']}.sock"; + list($tn, $sm) = explode('/', $settings['tunnel_network']); + + if ((($server['mode'] == "p2p_shared_key") || ($sm >= 30) ) && ($type == "p2p")) + $servers[] = openvpn_get_client_status($server, $socket); + elseif (($server['mode'] != "p2p_shared_key") && ($type == "multipoint") && ($sm < 30)) + $servers[] = openvpn_get_server_status($server, $socket); + + } + } + return $servers; +} + +function openvpn_get_server_status($server, $socket) { + $errval; + $errstr; + $fp = @stream_socket_client($socket, $errval, $errstr, 1); + if ($fp) { + stream_set_timeout($fp, 1); + + /* send our status request */ + fputs($fp, "status 2\n"); + + /* recv all response lines */ + while (!feof($fp)) { + + /* read the next line */ + $line = fgets($fp, 1024); + + $info = stream_get_meta_data($fp); + if ($info['timed_out']) + break; + + /* parse header list line */ + if (strstr($line, "HEADER")) + continue; + + /* parse end of output line */ + if (strstr($line, "END") || strstr($line, "ERROR")) + break; + + /* parse client list line */ + if (strstr($line, "CLIENT_LIST")) { + $list = explode(",", $line); + $conn = array(); + $conn['common_name'] = $list[1]; + $conn['remote_host'] = $list[2]; + $conn['virtual_addr'] = $list[3]; + $conn['bytes_recv'] = $list[4]; + $conn['bytes_sent'] = $list[5]; + $conn['connect_time'] = $list[6]; + $server['conns'][] = $conn; + } + /* parse routing table lines */ + if (strstr($line, "ROUTING_TABLE")) { + $list = explode(",", $line); + $conn = array(); + $conn['virtual_addr'] = $list[1]; + $conn['common_name'] = $list[2]; + $conn['remote_host'] = $list[3]; + $conn['last_time'] = $list[4]; + $server['routes'][] = $conn; + } + } + + /* cleanup */ + fclose($fp); + } else { + $conn = array(); + $conn['common_name'] = "[error]"; + $conn['remote_host'] = "Unable to contact daemon"; + $conn['virtual_addr'] = "Service not running?"; + $conn['bytes_recv'] = 0; + $conn['bytes_sent'] = 0; + $conn['connect_time'] = 0; + $server['conns'][] = $conn; + } + return $server; +} + +function openvpn_get_active_clients() { + global $config, $g; + + $clients = array(); + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as & $settings) { + + if (empty($settings) || isset($settings['disable'])) + continue; + + $prot = $settings['protocol']; + $port = ($settings['local_port']) ? ":{$settings['local_port']}" : ""; + + $client = array(); + $client['port'] = $settings['local_port']; + if ($settings['description']) + $client['name'] = "{$settings['description']} {$prot}{$port}"; + else + $client['name'] = "Client {$prot}{$port}"; + + $client['vpnid'] = $settings['vpnid']; + $client['mgmt'] = "client{$client['vpnid']}"; + $socket = "unix://{$g['varetc_path']}/openvpn/{$client['mgmt']}.sock"; + $client['status']="down"; + + $clients[] = openvpn_get_client_status($client, $socket); + } + } + return $clients; +} + +function openvpn_get_client_status($client, $socket) { + $errval; + $errstr; + $fp = @stream_socket_client($socket, $errval, $errstr, 1); + if ($fp) { + stream_set_timeout($fp, 1); + /* send our status request */ + fputs($fp, "state 1\n"); + + /* recv all response lines */ + while (!feof($fp)) { + /* read the next line */ + $line = fgets($fp, 1024); + + $info = stream_get_meta_data($fp); + if ($info['timed_out']) + break; + + /* Get the client state */ + if (strstr($line,"CONNECTED")) { + $client['status']="up"; + $list = explode(",", $line); + + $client['connect_time'] = date("D M j G:i:s Y", $list[0]); + $client['virtual_addr'] = $list[3]; + $client['remote_host'] = $list[4]; + } + if (strstr($line,"CONNECTING")) { + $client['status']="connecting"; + } + if (strstr($line,"ASSIGN_IP")) { + $client['status']="waiting"; + $list = explode(",", $line); + + $client['connect_time'] = date("D M j G:i:s Y", $list[0]); + $client['virtual_addr'] = $list[3]; + } + if (strstr($line,"RECONNECTING")) { + $client['status']="reconnecting"; + $list = explode(",", $line); + + $client['connect_time'] = date("D M j G:i:s Y", $list[0]); + $client['status'] .= "; " . $list[2]; + } + /* parse end of output line */ + if (strstr($line, "END") || strstr($line, "ERROR")) + break; + } + + /* If up, get read/write stats */ + if (strcmp($client['status'], "up") == 0) { + fputs($fp, "status 2\n"); + /* recv all response lines */ + while (!feof($fp)) { + /* read the next line */ + $line = fgets($fp, 1024); + + $info = stream_get_meta_data($fp); + if ($info['timed_out']) + break; + + if (strstr($line,"TCP/UDP read bytes")) { + $list = explode(",", $line); + $client['bytes_recv'] = $list[1]; + } + + if (strstr($line,"TCP/UDP write bytes")) { + $list = explode(",", $line); + $client['bytes_sent'] = $list[1]; + } + + /* parse end of output line */ + if (strstr($line, "END")) + break; + } + } + + fclose($fp); + + } else { + $DisplayNote=true; + $client['remote_host'] = "Unable to contact daemon"; + $client['virtual_addr'] = "Service not running?"; + $client['bytes_recv'] = 0; + $client['bytes_sent'] = 0; + $client['connect_time'] = 0; + } + return $client; +} + +function openvpn_refresh_crls() { + global $g, $config; + + openvpn_create_dirs(); + + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as $settings) { + if (empty($settings)) + continue; + if (isset($settings['disable'])) + continue; + // Write the settings for the keys + switch($settings['mode']) { + case 'p2p_tls': + case 'server_tls': + case 'server_tls_user': + case 'server_user': + if (!empty($settings['crlref'])) { + $crl = lookup_crl($settings['crlref']); + crl_update($crl); + $fpath = $g['varetc_path']."/openvpn/server{$settings['vpnid']}.crl-verify"; + file_put_contents($fpath, base64_decode($crl['text'])); + @chmod($fpath, 0644); + } + break; + } + } + } +} + +function openvpn_create_dirs() { + global $g; + if (!is_dir("{$g['varetc_path']}/openvpn")) + safe_mkdir("{$g['varetc_path']}/openvpn", 0750); + if (!is_dir("{$g['varetc_path']}/openvpn-csc")) + safe_mkdir("{$g['varetc_path']}/openvpn-csc", 0750); +} + +function openvpn_get_interface_ip($ip, $mask) { + $baselong = ip2long32($ip) & ip2long($mask); + $ip1 = long2ip32($baselong + 1); + $ip2 = long2ip32($baselong + 2); + return array($ip1, $ip2); +} + +function openvpn_get_interface_ipv6($ipv6, $prefix) { + $basev6 = gen_subnetv6($ipv6, $prefix); + // Is there a better way to do this math? + $ipv6_arr = explode(':', $basev6); + $last = hexdec(array_pop($ipv6_arr)); + $ipv6_1 = Net_IPv6::compress(Net_IPv6::uncompress(implode(':', $ipv6_arr) . ':' . dechex($last + 1))); + $ipv6_2 = Net_IPv6::compress(Net_IPv6::uncompress(implode(':', $ipv6_arr) . ':' . dechex($last + 2))); + return array($ipv6_1, $ipv6_2); +} + +function openvpn_clear_route($mode, $settings) { + if (empty($settings['tunnel_network'])) + return; + list($ip, $cidr) = explode('/', $settings['tunnel_network']); + $mask = gen_subnet_mask($cidr); + $clear_route = false; + + switch($settings['mode']) { + case 'shared_key': + $clear_route = true; + break; + case 'p2p_tls': + case 'p2p_shared_key': + if ($cidr == 30) + $clear_route = true; + break; + } + + if ($clear_route && !empty($ip) && !empty($mask)) { + list($ip1, $ip2) = openvpn_get_interface_ip($ip, $mask); + $ip_to_clear = ($mode == "server") ? $ip1 : $ip2; + /* XXX: Family for route? */ + mwexec("/sbin/route -q delete {$ip_to_clear}"); + } +} + +function openvpn_gen_routes($value, $ipproto = "ipv4", $push = false, $iroute = false) { + $routes = ""; + if (empty($value)) + return ""; + $networks = explode(',', $value); + + foreach ($networks as $network) { + if ($ipproto == "ipv4") + $route = openvpn_gen_route_ipv4($network, $iroute); + else + $route = openvpn_gen_route_ipv6($network, $iroute); + + if ($push) + $routes .= "push \"{$route}\"\n"; + else + $routes .= "{$route}\n"; + } + return $routes; +} + +function openvpn_gen_route_ipv4($network, $iroute = false) { + $i = ($iroute) ? "i" : ""; + list($ip, $mask) = explode('/', trim($network)); + $mask = gen_subnet_mask($mask); + return "{$i}route $ip $mask"; +} + +function openvpn_gen_route_ipv6($network, $iroute = false) { + $i = ($iroute) ? "i" : ""; + list($ipv6, $prefix) = explode('/', trim($network)); + if (empty($prefix)) + $prefix = "128"; + return "{$i}route-ipv6 ${ipv6}/${prefix}"; +} + +function openvpn_get_settings($mode, $vpnid) { + global $config; + + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as $settings) { + if (isset($settings['disable'])) + continue; + + if ($vpnid != 0 && $vpnid == $settings['vpnid']) + return $settings; + } + } + + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as $settings) { + if (isset($settings['disable'])) + continue; + + if ($vpnid != 0 && $vpnid == $settings['vpnid']) + return $settings; + } + } + + return array(); +} + +function openvpn_restart_by_vpnid($mode, $vpnid) { + $settings = openvpn_get_settings($mode, $vpnid); + openvpn_restart($mode, $settings); +} + +?> diff --git a/usr/etc/inc/openvpn.tls-verify.php b/usr/etc/inc/openvpn.tls-verify.php new file mode 100644 index 000000000..44d5d8441 --- /dev/null +++ b/usr/etc/inc/openvpn.tls-verify.php @@ -0,0 +1,95 @@ +#!/usr/local/bin/php -f + + +if (isset($allowed_depth) && ($cert_depth > $allowed_depth)) { + syslog(LOG_WARNING, "Certificate depth {$cert_depth} exceeded max allowed depth of {$allowed_depth}.\n"); + if (isset($_GET)) { + echo "FAILED"; + closelog(); + return; + } else { + closelog(); + exit(1); + } +} + +// Debug +//syslog(LOG_WARNING, "Found certificate {$argv[2]} with depth {$cert_depth}\n"); + +closelog(); +if (isset($_GET)) + echo "OK"; +else + exit(0); + +?> diff --git a/usr/etc/inc/pfsense-utils.inc b/usr/etc/inc/pfsense-utils.inc new file mode 100644 index 000000000..acca2df2a --- /dev/null +++ b/usr/etc/inc/pfsense-utils.inc @@ -0,0 +1,2921 @@ + real interface if needed */ + $int = get_real_interface($interface); + if(empty($int)) + return; + $int_family = preg_split("/[0-9]+/", $int); + $supported_ints = array('fxp'); + if (in_array($int_family, $supported_ints)) { + if(does_interface_exist($int)) + pfSense_interface_flags($int, IFF_LINK0); + } + + return; +} + +/****f* pfsense-utils/interface_supports_polling + * NAME + * checks to see if an interface supports polling according to man polling + * INPUTS + * + * RESULT + * true or false + * NOTES + * + ******/ +function interface_supports_polling($iface) { + $opts = pfSense_get_interface_addresses($iface); + if (is_array($opts) && isset($opts['caps']['polling'])) + return true; + + return false; +} + +/****f* pfsense-utils/is_alias_inuse + * NAME + * checks to see if an alias is currently in use by a rule + * INPUTS + * + * RESULT + * true or false + * NOTES + * + ******/ +function is_alias_inuse($alias) { + global $g, $config; + + if($alias == "") return false; + /* loop through firewall rules looking for alias in use */ + if(is_array($config['filter']['rule'])) + foreach($config['filter']['rule'] as $rule) { + if($rule['source']['address']) + if($rule['source']['address'] == $alias) + return true; + if($rule['destination']['address']) + if($rule['destination']['address'] == $alias) + return true; + } + /* loop through nat rules looking for alias in use */ + if(is_array($config['nat']['rule'])) + foreach($config['nat']['rule'] as $rule) { + if($rule['target'] && $rule['target'] == $alias) + return true; + if($rule['source']['address'] && $rule['source']['address'] == $alias) + return true; + if($rule['destination']['address'] && $rule['destination']['address'] == $alias) + return true; + } + return false; +} + +/****f* pfsense-utils/is_schedule_inuse + * NAME + * checks to see if a schedule is currently in use by a rule + * INPUTS + * + * RESULT + * true or false + * NOTES + * + ******/ +function is_schedule_inuse($schedule) { + global $g, $config; + + if($schedule == "") return false; + /* loop through firewall rules looking for schedule in use */ + if(is_array($config['filter']['rule'])) + foreach($config['filter']['rule'] as $rule) { + if($rule['sched'] == $schedule) + return true; + } + return false; +} + +/****f* pfsense-utils/setup_polling + * NAME + * sets up polling + * INPUTS + * + * RESULT + * null + * NOTES + * + ******/ +function setup_polling() { + global $g, $config; + + if (isset($config['system']['polling'])) + set_single_sysctl("kern.polling.idle_poll", "1"); + else + set_single_sysctl("kern.polling.idle_poll", "0"); + + if($config['system']['polling_each_burst']) + set_single_sysctl("kern.polling.each_burst", $config['system']['polling_each_burst']); + if($config['system']['polling_burst_max']) + set_single_sysctl("kern.polling.burst_max", $config['system']['polling_burst_max']); + if($config['system']['polling_user_frac']) + set_single_sysctl("kern.polling.user_frac", $config['system']['polling_user_frac']); +} + +/****f* pfsense-utils/setup_microcode + * NAME + * enumerates all interfaces and calls enable_hardware_offloading which + * enables a NIC's supported hardware features. + * INPUTS + * + * RESULT + * null + * NOTES + * This function only supports the fxp driver's loadable microcode. + ******/ +function setup_microcode() { + + /* if list */ + $ifs = get_interface_arr(); + + foreach($ifs as $if) + enable_hardware_offloading($if); +} + +/****f* pfsense-utils/get_carp_status + * NAME + * get_carp_status - Return whether CARP is enabled or disabled. + * RESULT + * boolean - true if CARP is enabled, false if otherwise. + ******/ +function get_carp_status() { + /* grab the current status of carp */ + $status = get_single_sysctl('net.inet.carp.allow'); + return (intval($status) > 0); +} + +/* + * convert_ip_to_network_format($ip, $subnet): converts an ip address to network form + + */ +function convert_ip_to_network_format($ip, $subnet) { + $ipsplit = explode('.', $ip); + $string = $ipsplit[0] . "." . $ipsplit[1] . "." . $ipsplit[2] . ".0/" . $subnet; + return $string; +} + +/* + * get_carp_interface_status($carpinterface): returns the status of a carp ip + */ +function get_carp_interface_status($carpinterface) { + $carp_query = ""; + + /* XXX: Need to fidn a better way for this! */ + list ($interface, $vhid) = explode("_vip", $carpinterface); + $interface = get_real_interface($interface); + exec("/sbin/ifconfig $interface | /usr/bin/grep -v grep | /usr/bin/grep carp: | /usr/bin/grep 'vhid {$vhid}'", $carp_query); + foreach($carp_query as $int) { + if(stristr($int, "MASTER")) + return gettext("MASTER"); + if(stristr($int, "BACKUP")) + return gettext("BACKUP"); + if(stristr($int, "INIT")) + return gettext("INIT"); + } + return; +} + +/* + * get_pfsync_interface_status($pfsyncinterface): returns the status of a pfsync + */ +function get_pfsync_interface_status($pfsyncinterface) { + if (!does_interface_exist($pfsyncinterface)) + return; + + return exec_command("/sbin/ifconfig {$pfsyncinterface} | /usr/bin/awk '/pfsync:/ {print \$5}'"); +} + +/* + * add_rule_to_anchor($anchor, $rule): adds the specified rule to an anchor + */ +function add_rule_to_anchor($anchor, $rule, $label) { + mwexec("echo " . escapeshellarg($rule) . " | /sbin/pfctl -a " . escapeshellarg($anchor) . ":" . escapeshellarg($label) . " -f -"); +} + +/* + * remove_text_from_file + * remove $text from file $file + */ +function remove_text_from_file($file, $text) { + if(!file_exists($file) && !is_writable($file)) + return; + $filecontents = file_get_contents($file); + $text = str_replace($text, "", $filecontents); + @file_put_contents($file, $text); +} + +/* + * add_text_to_file($file, $text): adds $text to $file. + * replaces the text if it already exists. + */ +function add_text_to_file($file, $text, $replace = false) { + if(file_exists($file) and is_writable($file)) { + $filecontents = file($file); + $filecontents = array_map('rtrim', $filecontents); + array_push($filecontents, $text); + if ($replace) + $filecontents = array_unique($filecontents); + + $file_text = implode("\n", $filecontents); + + @file_put_contents($file, $file_text); + return true; + } + return false; +} + +/* + * after_sync_bump_adv_skew(): create skew values by 1S + */ +function after_sync_bump_adv_skew() { + global $config, $g; + $processed_skew = 1; + $a_vip = &$config['virtualip']['vip']; + foreach ($a_vip as $vipent) { + if($vipent['advskew'] <> "") { + $processed_skew = 1; + $vipent['advskew'] = $vipent['advskew']+1; + } + } + if($processed_skew == 1) + write_config(gettext("After synch increase advertising skew")); +} + +/* + * get_filename_from_url($url): converts a url to its filename. + */ +function get_filename_from_url($url) { + return basename($url); +} + +/* + * get_dir: return an array of $dir + */ +function get_dir($dir) { + $dir_array = array(); + $d = dir($dir); + while (false !== ($entry = $d->read())) { + array_push($dir_array, $entry); + } + $d->close(); + return $dir_array; +} + +/****f* pfsense-utils/WakeOnLan + * NAME + * WakeOnLan - Wake a machine up using the wake on lan format/protocol + * RESULT + * true/false - true if the operation was successful + ******/ +function WakeOnLan($addr, $mac) +{ + $addr_byte = explode(':', $mac); + $hw_addr = ''; + + for ($a=0; $a < 6; $a++) + $hw_addr .= chr(hexdec($addr_byte[$a])); + + $msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255); + + for ($a = 1; $a <= 16; $a++) + $msg .= $hw_addr; + + // send it to the broadcast address using UDP + $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + if ($s == false) { + log_error(gettext("Error creating socket!")); + log_error(sprintf(gettext("Error code is '%1\$s' - %2\$s"), socket_last_error($s), socket_strerror(socket_last_error($s)))); + } else { + // setting a broadcast option to socket: + $opt_ret = socket_set_option($s, 1, 6, TRUE); + if($opt_ret < 0) + log_error(sprintf(gettext("setsockopt() failed, error: %s"), strerror($opt_ret))); + $e = socket_sendto($s, $msg, strlen($msg), 0, $addr, 2050); + socket_close($s); + log_error(sprintf(gettext('Magic Packet sent (%1$s) to {%2$s} MAC=%3$s'), $e, $addr, $mac)); + return true; + } + + return false; +} + +/* + * reverse_strrchr($haystack, $needle): Return everything in $haystack up to the *last* instance of $needle. + * Useful for finding paths and stripping file extensions. + */ +function reverse_strrchr($haystack, $needle) { + if (!is_string($haystack)) + return; + return strrpos($haystack, $needle) ? substr($haystack, 0, strrpos($haystack, $needle) +1 ) : false; +} + +/* + * backup_config_section($section): returns as an xml file string of + * the configuration section + */ +function backup_config_section($section_name) { + global $config; + $new_section = &$config[$section_name]; + /* generate configuration XML */ + $xmlconfig = dump_xml_config($new_section, $section_name); + $xmlconfig = str_replace("", "", $xmlconfig); + return $xmlconfig; +} + +/* + * restore_config_section($section_name, new_contents): restore a configuration section, + * and write the configuration out + * to disk/cf. + */ +function restore_config_section($section_name, $new_contents) { + global $config, $g; + conf_mount_rw(); + $fout = fopen("{$g['tmp_path']}/tmpxml","w"); + fwrite($fout, $new_contents); + fclose($fout); + + $xml = parse_xml_config($g['tmp_path'] . "/tmpxml", null); + if ($xml['pfsense']) { + $xml = $xml['pfsense']; + } + else if ($xml['m0n0wall']) { + $xml = $xml['m0n0wall']; + } + if ($xml[$section_name]) { + $section_xml = $xml[$section_name]; + } else { + $section_xml = -1; + } + + @unlink($g['tmp_path'] . "/tmpxml"); + if ($section_xml === -1) { + return false; + } + $config[$section_name] = &$section_xml; + if(file_exists("{$g['tmp_path']}/config.cache")) + unlink("{$g['tmp_path']}/config.cache"); + write_config(sprintf(gettext("Restored %s of config file (maybe from CARP partner)"), $section_name)); + disable_security_checks(); + conf_mount_ro(); + return true; +} + +/* + * merge_config_section($section_name, new_contents): restore a configuration section, + * and write the configuration out + * to disk/cf. But preserve the prior + * structure if needed + */ +function merge_config_section($section_name, $new_contents) { + global $config; + conf_mount_rw(); + $fname = get_tmp_filename(); + $fout = fopen($fname, "w"); + fwrite($fout, $new_contents); + fclose($fout); + $section_xml = parse_xml_config($fname, $section_name); + $config[$section_name] = $section_xml; + unlink($fname); + write_config(sprintf(gettext("Restored %s of config file (maybe from CARP partner)"), $section_name)); + disable_security_checks(); + conf_mount_ro(); + return; +} + +/* + * http_post($server, $port, $url, $vars): does an http post to a web server + * posting the vars array. + * written by nf@bigpond.net.au + */ +function http_post($server, $port, $url, $vars) { + $user_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)"; + $urlencoded = ""; + while (list($key,$value) = each($vars)) + $urlencoded.= urlencode($key) . "=" . urlencode($value) . "&"; + $urlencoded = substr($urlencoded,0,-1); + $content_length = strlen($urlencoded); + $headers = "POST $url HTTP/1.1 +Accept: */* +Accept-Language: en-au +Content-Type: application/x-www-form-urlencoded +User-Agent: $user_agent +Host: $server +Connection: Keep-Alive +Cache-Control: no-cache +Content-Length: $content_length + +"; + + $errno = ""; + $errstr = ""; + $fp = fsockopen($server, $port, $errno, $errstr); + if (!$fp) { + return false; + } + + fputs($fp, $headers); + fputs($fp, $urlencoded); + + $ret = ""; + while (!feof($fp)) + $ret.= fgets($fp, 1024); + fclose($fp); + + return $ret; +} + +/* + * php_check_syntax($code_tocheck, $errormessage): checks $code_to_check for errors + */ +if (!function_exists('php_check_syntax')){ + global $g; + function php_check_syntax($code_to_check, &$errormessage){ + return false; + $fout = fopen("{$g['tmp_path']}/codetocheck.php","w"); + $code = $_POST['content']; + $code = str_replace("", "", $code); + fwrite($fout, "\n"); + fclose($fout); + $command = "/usr/local/bin/php -l {$g['tmp_path']}/codetocheck.php"; + $output = exec_command($command); + if (stristr($output, "Errors parsing") == false) { + echo "false\n"; + $errormessage = ''; + return(false); + } else { + $errormessage = $output; + return(true); + } + } +} + +/* + * php_check_filename_syntax($filename, $errormessage): checks the file $filename for errors + */ +if (!function_exists('php_check_syntax')){ + function php_check_syntax($code_to_check, &$errormessage){ + return false; + $command = "/usr/local/bin/php -l " . escapeshellarg($code_to_check); + $output = exec_command($command); + if (stristr($output, "Errors parsing") == false) { + echo "false\n"; + $errormessage = ''; + return(false); + } else { + $errormessage = $output; + return(true); + } + } +} + +/* + * rmdir_recursive($path,$follow_links=false) + * Recursively remove a directory tree (rm -rf path) + * This is for directories _only_ + */ +function rmdir_recursive($path,$follow_links=false) { + $to_do = glob($path); + if(!is_array($to_do)) $to_do = array($to_do); + foreach($to_do as $workingdir) { // Handle wildcards by foreaching. + if(file_exists($workingdir)) { + if(is_dir($workingdir)) { + $dir = opendir($workingdir); + while ($entry = readdir($dir)) { + if (is_file("$workingdir/$entry") || ((!$follow_links) && is_link("$workingdir/$entry"))) + unlink("$workingdir/$entry"); + elseif (is_dir("$workingdir/$entry") && $entry!='.' && $entry!='..') + rmdir_recursive("$workingdir/$entry"); + } + closedir($dir); + rmdir($workingdir); + } elseif (is_file($workingdir)) { + unlink($workingdir); + } + } + } + return; +} + +/* + * call_pfsense_method(): Call a method exposed by the pfsense.org XMLRPC server. + */ +function call_pfsense_method($method, $params, $timeout = 0) { + global $g, $config; + + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + $xmlrpc_path = $g['xmlrpcpath']; + + $xmlrpcfqdn = preg_replace("(https?://)", "", $xmlrpc_base_url); + $ip = gethostbyname($xmlrpcfqdn); + if($ip == $xmlrpcfqdn) + return false; + + $msg = new XML_RPC_Message($method, array(XML_RPC_Encode($params))); + $port = 0; + $proxyurl = ""; + $proxyport = 0; + $proxyuser = ""; + $proxypass = ""; + if (!empty($config['system']['proxyurl'])) + $proxyurl = $config['system']['proxyurl']; + if (!empty($config['system']['proxyport']) && is_numeric($config['system']['proxyport'])) + $proxyport = $config['system']['proxyport']; + if (!empty($config['system']['proxyuser'])) + $proxyuser = $config['system']['proxyuser']; + if (!empty($config['system']['proxypass'])) + $proxypass = $config['system']['proxypass']; + $cli = new XML_RPC_Client($xmlrpc_path, $xmlrpc_base_url, $port, $proxyurl, $proxyport, $proxyuser, $proxypass); + // If the ALT PKG Repo has a username/password set, use it. + if($config['system']['altpkgrepo']['username'] && + $config['system']['altpkgrepo']['password']) { + $username = $config['system']['altpkgrepo']['username']; + $password = $config['system']['altpkgrepo']['password']; + $cli->setCredentials($username, $password); + } + $resp = $cli->send($msg, $timeout); + if(!is_object($resp)) { + log_error(sprintf(gettext("XMLRPC communication error: %s"), $cli->errstr)); + return false; + } elseif($resp->faultCode()) { + log_error(sprintf(gettext('XMLRPC request failed with error %1$s: %2$s'), $resp->faultCode(), $resp->faultString())); + return false; + } else { + return XML_RPC_Decode($resp->value()); + } +} + +/* + * check_firmware_version(): Check whether the current firmware installed is the most recently released. + */ +function check_firmware_version($tocheck = "all", $return_php = true) { + global $g, $config; + + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + $xmlrpcfqdn = preg_replace("(https?://)", "", $xmlrpc_base_url); + $ip = gethostbyname($xmlrpcfqdn); + if($ip == $xmlrpcfqdn) + return false; + $version = php_uname('r'); + $version = explode('-', $version); + $rawparams = array("firmware" => array("version" => trim(file_get_contents('/etc/version'))), + "kernel" => array("version" => $version[0]), + "base" => array("version" => $version[0]), + "platform" => trim(file_get_contents('/etc/platform')), + "config_version" => $config['version'] + ); + unset($version); + + if($tocheck == "all") { + $params = $rawparams; + } else { + foreach($tocheck as $check) { + $params['check'] = $rawparams['check']; + $params['platform'] = $rawparams['platform']; + } + } + if($config['system']['firmware']['branch']) + $params['branch'] = $config['system']['firmware']['branch']; + + /* XXX: What is this method? */ + if(!($versions = call_pfsense_method('pfsense.get_firmware_version', $params))) { + return false; + } else { + $versions["current"] = $params; + } + + return $versions; +} + +/* + * host_firmware_version(): Return the versions used in this install + */ +function host_firmware_version($tocheck = "") { + global $g, $config; + + $os_version = trim(substr(php_uname("r"), 0, strpos(php_uname("r"), '-'))); + + return array( + "firmware" => array("version" => trim(file_get_contents('/etc/version', " \n"))), + "kernel" => array("version" => $os_version), + "base" => array("version" => $os_version), + "platform" => trim(file_get_contents('/etc/platform', " \n")), + "config_version" => $config['version'] + ); +} + +function get_disk_info() { + $diskout = ""; + exec("/bin/df -h | /usr/bin/grep -w '/' | /usr/bin/awk '{ print $2, $3, $4, $5 }'", $diskout); + return explode(' ', $diskout[0]); +} + +/****f* pfsense-utils/strncpy + * NAME + * strncpy - copy strings + * INPUTS + * &$dst, $src, $length + * RESULT + * none + ******/ +function strncpy(&$dst, $src, $length) { + if (strlen($src) > $length) { + $dst = substr($src, 0, $length); + } else { + $dst = $src; + } +} + +/****f* pfsense-utils/reload_interfaces_sync + * NAME + * reload_interfaces - reload all interfaces + * INPUTS + * none + * RESULT + * none + ******/ +function reload_interfaces_sync() { + global $config, $g; + + if($g['debug']) + log_error(gettext("reload_interfaces_sync() is starting.")); + + /* parse config.xml again */ + $config = parse_config(true); + + /* enable routing */ + system_routing_enable(); + if($g['debug']) + log_error(gettext("Enabling system routing")); + + if($g['debug']) + log_error(gettext("Cleaning up Interfaces")); + + /* set up interfaces */ + interfaces_configure(); +} + +/****f* pfsense-utils/reload_all + * NAME + * reload_all - triggers a reload of all settings + * * INPUTS + * none + * RESULT + * none + ******/ +function reload_all() { + send_event("service reload all"); +} + +/****f* pfsense-utils/reload_interfaces + * NAME + * reload_interfaces - triggers a reload of all interfaces + * INPUTS + * none + * RESULT + * none + ******/ +function reload_interfaces() { + send_event("interface all reload"); +} + +/****f* pfsense-utils/reload_all_sync + * NAME + * reload_all - reload all settings + * * INPUTS + * none + * RESULT + * none + ******/ +function reload_all_sync() { + global $config, $g; + + $g['booting'] = false; + + /* parse config.xml again */ + $config = parse_config(true); + + /* set up our timezone */ + system_timezone_configure(); + + /* set up our hostname */ + system_hostname_configure(); + + /* make hosts file */ + system_hosts_generate(); + + /* generate resolv.conf */ + system_resolvconf_generate(); + + /* enable routing */ + system_routing_enable(); + + /* set up interfaces */ + interfaces_configure(); + + /* start dyndns service */ + services_dyndns_configure(); + + /* configure cron service */ + configure_cron(); + + /* start the NTP client */ + system_ntp_configure(); + + /* sync pw database */ + conf_mount_rw(); + unlink_if_exists("/etc/spwd.db.tmp"); + mwexec("/usr/sbin/pwd_mkdb -d /etc/ /etc/master.passwd"); + conf_mount_ro(); + + /* restart sshd */ + send_event("service restart sshd"); + + /* restart webConfigurator if needed */ + send_event("service restart webgui"); +} + +function setup_serial_port($when="save", $path="") { + global $g, $config; + conf_mount_rw(); + $prefix = ""; + if (($when == "upgrade") && (!empty($path)) && is_dir($path.'/boot/')) + $prefix = "/tmp/{$path}"; + $boot_config_file = "{$path}/boot.config"; + $loader_conf_file = "{$path}/boot/loader.conf"; + /* serial console - write out /boot.config */ + if(file_exists($boot_config_file)) + $boot_config = file_get_contents($boot_config_file); + else + $boot_config = ""; + + $serialspeed = (is_numeric($config['system']['serialspeed'])) ? $config['system']['serialspeed'] : "115200"; + if ($g['platform'] != "cdrom") { + $boot_config_split = explode("\n", $boot_config); + $fd = fopen($boot_config_file,"w"); + if($fd) { + foreach($boot_config_split as $bcs) { + if(stristr($bcs, "-D") || stristr($bcs, "-h")) { + /* DONT WRITE OUT, WE'LL DO IT LATER */ + } else { + if($bcs <> "") + fwrite($fd, "{$bcs}\n"); + } + } + if (($g['platform'] == "nanobsd") && !file_exists("/etc/nano_use_vga.txt")) + fwrite($fd, "-S{$serialspeed} -h"); + else if (is_serial_enabled()) + fwrite($fd, "-S{$serialspeed} -D"); + fclose($fd); + } + + /* serial console - write out /boot/loader.conf */ + if ($when == "upgrade") + system("echo \"Reading {$loader_conf_file}...\" >> /conf/upgrade_log.txt"); + $boot_config = file_get_contents($loader_conf_file); + $boot_config_split = explode("\n", $boot_config); + if(count($boot_config_split) > 0) { + $new_boot_config = array(); + // Loop through and only add lines that are not empty, and which + // do not contain a console directive. + foreach($boot_config_split as $bcs) + if(!empty($bcs) + && (stripos($bcs, "console") === false) + && (stripos($bcs, "boot_multicons") === false) + && (stripos($bcs, "boot_serial") === false) + && (stripos($bcs, "hw.usb.no_pf") === false)) + $new_boot_config[] = $bcs; + + if (($g['platform'] == "nanobsd") && !file_exists("/etc/nano_use_vga.txt")) { + $new_boot_config[] = 'boot_serial="YES"'; + $new_boot_config[] = 'console="comconsole"'; + } else if (is_serial_enabled()) { + $new_boot_config[] = 'boot_multicons="YES"'; + $new_boot_config[] = 'boot_serial="YES"'; + $primaryconsole = isset($g['primaryconsole_force']) ? $g['primaryconsole_force'] : $config['system']['primaryconsole']; + switch ($primaryconsole) { + case "video": + $new_boot_config[] = 'console="vidconsole,comconsole"'; + break; + case "serial": + default: + $new_boot_config[] = 'console="comconsole,vidconsole"'; + } + } + $new_boot_config[] = 'comconsole_speed="' . $serialspeed . '"'; + $new_boot_config[] = 'hw.usb.no_pf="1"'; + + file_put_contents($loader_conf_file, implode("\n", $new_boot_config) . "\n"); + } + } + $ttys = file_get_contents("/etc/ttys"); + $ttys_split = explode("\n", $ttys); + $fd = fopen("/etc/ttys", "w"); + + $on_off = (is_serial_enabled() ? 'on' : 'off'); + + if (isset($config['system']['disableconsolemenu'])) { + $console_type = 'Pc'; + $serial_type = 'std.' . $serialspeed; + } else { + $console_type = 'al.Pc'; + $serial_type = 'al.' . $serialspeed; + } + foreach($ttys_split as $tty) { + if (stristr($tty, "ttyv0")) + fwrite($fd, "ttyv0 \"/usr/libexec/getty {$console_type}\" cons25 on secure\n"); + else if (stristr($tty, "ttyu0")) + fwrite($fd, "ttyu0 \"/usr/libexec/getty {$serial_type}\" cons25 {$on_off} secure\n"); + else + fwrite($fd, $tty . "\n"); + } + unset($on_off, $console_type, $serial_type); + fclose($fd); + reload_ttys(); + + conf_mount_ro(); + return; +} + +function is_serial_enabled() { + global $g, $config; + + if (!isset($g['enableserial_force']) && + !isset($config['system']['enableserial']) && + ($g['platform'] == "pfSense" || $g['platform'] == "cdrom" || file_exists("/etc/nano_use_vga.txt"))) + return false; + + return true; +} + +function reload_ttys() { + // Send a HUP signal to init will make it reload /etc/ttys + posix_kill(1, SIGHUP); +} + +function print_value_list($list, $count = 10, $separator = ",") { + $list = implode($separator, array_slice($list, 0, $count)); + if(count($list) < $count) { + $list .= "."; + } else { + $list .= "..."; + } + return $list; +} + +/* DHCP enabled on any interfaces? */ +function is_dhcp_server_enabled() { + global $config; + + if (!is_array($config['dhcpd'])) + return false; + + foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) { + if (isset($dhcpifconf['enable']) && !empty($config['interfaces'][$dhcpif])) + return true; + } + + return false; +} + +/* DHCP enabled on any interfaces? */ +function is_dhcpv6_server_enabled() { + global $config; + + if (is_array($config['interfaces'])) { + foreach ($config['interfaces'] as $ifcfg) { + if (isset($ifcfg['enable']) && !empty($ifcfg['track6-interface'])) + return true; + } + } + + if (!is_array($config['dhcpdv6'])) + return false; + + foreach ($config['dhcpdv6'] as $dhcpv6if => $dhcpv6ifconf) { + if (isset($dhcpv6ifconf['enable']) && !empty($config['interfaces'][$dhcpv6if])) + return true; + } + + return false; +} + +/* radvd enabled on any interfaces? */ +function is_radvd_enabled() { + global $config; + + if (!is_array($config['dhcpdv6'])) + $config['dhcpdv6'] = array(); + + $dhcpdv6cfg = $config['dhcpdv6']; + $Iflist = get_configured_interface_list(); + + /* handle manually configured DHCP6 server settings first */ + foreach ($dhcpdv6cfg as $dhcpv6if => $dhcpv6ifconf) { + if(!isset($config['interfaces'][$dhcpv6if]['enable'])) + continue; + + if(!isset($dhcpv6ifconf['ramode'])) + $dhcpv6ifconf['ramode'] = $dhcpv6ifconf['mode']; + + if($dhcpv6ifconf['ramode'] == "disabled") + continue; + + $ifcfgipv6 = get_interface_ipv6($dhcpv6if); + if(!is_ipaddrv6($ifcfgipv6)) + continue; + + return true; + } + + /* handle DHCP-PD prefixes and 6RD dynamic interfaces */ + foreach ($Iflist as $if => $ifdescr) { + if(!isset($config['interfaces'][$if]['track6-interface'])) + continue; + if(!isset($config['interfaces'][$if]['enable'])) + continue; + + $ifcfgipv6 = get_interface_ipv6($if); + if(!is_ipaddrv6($ifcfgipv6)) + continue; + + $ifcfgsnv6 = get_interface_subnetv6($if); + $subnetv6 = gen_subnetv6($ifcfgipv6, $ifcfgsnv6); + + if(!is_ipaddrv6($subnetv6)) + continue; + + return true; + } + + return false; +} + +/* Any PPPoE servers enabled? */ +function is_pppoe_server_enabled() { + global $config; + + $pppoeenable = false; + + if (!is_array($config['pppoes']) || !is_array($config['pppoes']['pppoe'])) + return false; + + foreach ($config['pppoes']['pppoe'] as $pppoes) + if ($pppoes['mode'] == 'server') + $pppoeenable = true; + + return $pppoeenable; +} + +function convert_seconds_to_hms($sec){ + $min=$hrs=0; + if ($sec != 0){ + $min = floor($sec/60); + $sec %= 60; + } + if ($min != 0){ + $hrs = floor($min/60); + $min %= 60; + } + if ($sec < 10) + $sec = "0".$sec; + if ($min < 10) + $min = "0".$min; + if ($hrs < 10) + $hrs = "0".$hrs; + $result = $hrs.":".$min.":".$sec; + return $result; +} + +/* Compute the total uptime from the ppp uptime log file in the conf directory */ + +function get_ppp_uptime($port){ + if (file_exists("/conf/{$port}.log")){ + $saved_time = file_get_contents("/conf/{$port}.log"); + $uptime_data = explode("\n",$saved_time); + $sec=0; + foreach($uptime_data as $upt) { + $sec += substr($upt, 1 + strpos($upt, " ")); + } + return convert_seconds_to_hms($sec); + } else { + $total_time = gettext("No history data found!"); + return $total_time; + } +} + +//returns interface information +function get_interface_info($ifdescr) { + global $config, $g; + + $ifinfo = array(); + if (empty($config['interfaces'][$ifdescr])) + return; + $ifinfo['hwif'] = $config['interfaces'][$ifdescr]['if']; + $ifinfo['if'] = get_real_interface($ifdescr); + + $chkif = $ifinfo['if']; + $ifinfotmp = pfSense_get_interface_addresses($chkif); + $ifinfo['status'] = $ifinfotmp['status']; + if (empty($ifinfo['status'])) + $ifinfo['status'] = "down"; + $ifinfo['macaddr'] = $ifinfotmp['macaddr']; + $ifinfo['ipaddr'] = $ifinfotmp['ipaddr']; + $ifinfo['subnet'] = $ifinfotmp['subnet']; + $ifinfo['linklocal'] = get_interface_linklocal($ifdescr); + $ifinfo['ipaddrv6'] = get_interface_ipv6($ifdescr); + $ifinfo['subnetv6'] = get_interface_subnetv6($ifdescr); + if (isset($ifinfotmp['link0'])) + $link0 = "down"; + $ifinfotmp = pfSense_get_interface_stats($chkif); + // $ifinfo['inpkts'] = $ifinfotmp['inpkts']; + // $ifinfo['outpkts'] = $ifinfotmp['outpkts']; + $ifinfo['inerrs'] = $ifinfotmp['inerrs']; + $ifinfo['outerrs'] = $ifinfotmp['outerrs']; + $ifinfo['collisions'] = $ifinfotmp['collisions']; + + /* Use pfctl for non wrapping 64 bit counters */ + /* Pass */ + exec("/sbin/pfctl -vvsI -i {$chkif}", $pfctlstats); + $pf_in4_pass = preg_split("/ +/ ", $pfctlstats[3]); + $pf_out4_pass = preg_split("/ +/", $pfctlstats[5]); + $pf_in6_pass = preg_split("/ +/ ", $pfctlstats[7]); + $pf_out6_pass = preg_split("/ +/", $pfctlstats[9]); + $in4_pass = $pf_in4_pass[5]; + $out4_pass = $pf_out4_pass[5]; + $in4_pass_packets = $pf_in4_pass[3]; + $out4_pass_packets = $pf_out4_pass[3]; + $in6_pass = $pf_in6_pass[5]; + $out6_pass = $pf_out6_pass[5]; + $in6_pass_packets = $pf_in6_pass[3]; + $out6_pass_packets = $pf_out6_pass[3]; + $ifinfo['inbytespass'] = $in4_pass + $in6_pass; + $ifinfo['outbytespass'] = $out4_pass + $out6_pass; + $ifinfo['inpktspass'] = $in4_pass_packets + $in6_pass_packets; + $ifinfo['outpktspass'] = $out4_pass_packets + $out6_pass_packets; + + /* Block */ + $pf_in4_block = preg_split("/ +/", $pfctlstats[4]); + $pf_out4_block = preg_split("/ +/", $pfctlstats[6]); + $pf_in6_block = preg_split("/ +/", $pfctlstats[8]); + $pf_out6_block = preg_split("/ +/", $pfctlstats[10]); + $in4_block = $pf_in4_block[5]; + $out4_block = $pf_out4_block[5]; + $in4_block_packets = $pf_in4_block[3]; + $out4_block_packets = $pf_out4_block[3]; + $in6_block = $pf_in6_block[5]; + $out6_block = $pf_out6_block[5]; + $in6_block_packets = $pf_in6_block[3]; + $out6_block_packets = $pf_out6_block[3]; + $ifinfo['inbytesblock'] = $in4_block + $in6_block; + $ifinfo['outbytesblock'] = $out4_block + $out6_block; + $ifinfo['inpktsblock'] = $in4_block_packets + $in6_block_packets; + $ifinfo['outpktsblock'] = $out4_block_packets + $out6_block_packets; + + $ifinfo['inbytes'] = $in4_pass + $in6_pass; + $ifinfo['outbytes'] = $out4_pass + $out6_pass; + $ifinfo['inpkts'] = $in4_pass_packets + $in6_pass_packets; + $ifinfo['outpkts'] = $out4_pass_packets + $out6_pass_packets; + + $ifconfiginfo = ""; + $link_type = $config['interfaces'][$ifdescr]['ipaddr']; + switch ($link_type) { + /* DHCP? -> see if dhclient is up */ + case "dhcp": + /* see if dhclient is up */ + if (find_dhclient_process($ifinfo['if']) != 0) + $ifinfo['dhcplink'] = "up"; + else + $ifinfo['dhcplink'] = "down"; + + break; + /* PPPoE/PPTP/L2TP interface? -> get status from virtual interface */ + case "pppoe": + case "pptp": + case "l2tp": + if ($ifinfo['status'] == "up" && !isset($link0)) + /* get PPPoE link status for dial on demand */ + $ifinfo["{$link_type}link"] = "up"; + else + $ifinfo["{$link_type}link"] = "down"; + + break; + /* PPP interface? -> get uptime for this session and cumulative uptime from the persistant log file in conf */ + case "ppp": + if ($ifinfo['status'] == "up") + $ifinfo['ppplink'] = "up"; + else + $ifinfo['ppplink'] = "down" ; + + if (empty($ifinfo['status'])) + $ifinfo['status'] = "down"; + + if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($config['ppps']['ppp'] as $pppid => $ppp) { + if ($config['interfaces'][$ifdescr]['if'] == $ppp['if']) + break; + } + } + $dev = $ppp['ports']; + if ($config['interfaces'][$ifdescr]['if'] != $ppp['if'] || empty($dev)) + break; + if (!file_exists($dev)) { + $ifinfo['nodevice'] = 1; + $ifinfo['pppinfo'] = $dev . " " . gettext("device not present! Is the modem attached to the system?"); + } + + $usbmodemoutput = array(); + exec("usbconfig", $usbmodemoutput); + $mondev = "{$g['tmp_path']}/3gstats.{$ifdescr}"; + if(file_exists($mondev)) { + $cellstats = file($mondev); + /* skip header */ + $a_cellstats = explode(",", $cellstats[1]); + if(preg_match("/huawei/i", implode("\n", $usbmodemoutput))) { + $ifinfo['cell_rssi'] = huawei_rssi_to_string($a_cellstats[1]); + $ifinfo['cell_mode'] = huawei_mode_to_string($a_cellstats[2], $a_cellstats[3]); + $ifinfo['cell_simstate'] = huawei_simstate_to_string($a_cellstats[10]); + $ifinfo['cell_service'] = huawei_service_to_string(trim($a_cellstats[11])); + } + if(preg_match("/zte/i", implode("\n", $usbmodemoutput))) { + $ifinfo['cell_rssi'] = zte_rssi_to_string($a_cellstats[1]); + $ifinfo['cell_mode'] = zte_mode_to_string($a_cellstats[2], $a_cellstats[3]); + $ifinfo['cell_simstate'] = zte_simstate_to_string($a_cellstats[10]); + $ifinfo['cell_service'] = zte_service_to_string(trim($a_cellstats[11])); + } + $ifinfo['cell_upstream'] = $a_cellstats[4]; + $ifinfo['cell_downstream'] = trim($a_cellstats[5]); + $ifinfo['cell_sent'] = $a_cellstats[6]; + $ifinfo['cell_received'] = trim($a_cellstats[7]); + $ifinfo['cell_bwupstream'] = $a_cellstats[8]; + $ifinfo['cell_bwdownstream'] = trim($a_cellstats[9]); + } + // Calculate cumulative uptime for PPP link. Useful for connections that have per minute/hour contracts so you don't go over! + if (isset($ppp['uptime'])) + $ifinfo['ppp_uptime_accumulated'] = "(".get_ppp_uptime($ifinfo['if']).")"; + break; + default: + break; + } + + if (file_exists("{$g['varrun_path']}/{$link_type}_{$ifdescr}.pid")) { + $sec = trim(`/usr/local/sbin/ppp-uptime.sh {$ifinfo['if']}`); + $ifinfo['ppp_uptime'] = convert_seconds_to_hms($sec); + } + + if ($ifinfo['status'] == "up") { + /* try to determine media with ifconfig */ + unset($ifconfiginfo); + exec("/sbin/ifconfig " . $ifinfo['if'], $ifconfiginfo); + $wifconfiginfo = array(); + if(is_interface_wireless($ifdescr)) { + exec("/sbin/ifconfig {$ifinfo['if']} list sta", $wifconfiginfo); + array_shift($wifconfiginfo); + } + $matches = ""; + foreach ($ifconfiginfo as $ici) { + + /* don't list media/speed for wireless cards, as it always + displays 2 Mbps even though clients can connect at 11 Mbps */ + if (preg_match("/media: .*? \((.*?)\)/", $ici, $matches)) { + $ifinfo['media'] = $matches[1]; + } else if (preg_match("/media: Ethernet (.*)/", $ici, $matches)) { + $ifinfo['media'] = $matches[1]; + } else if (preg_match("/media: IEEE 802.11 Wireless Ethernet (.*)/", $ici, $matches)) { + $ifinfo['media'] = $matches[1]; + } + + if (preg_match("/status: (.*)$/", $ici, $matches)) { + if ($matches[1] != "active") + $ifinfo['status'] = $matches[1]; + if($ifinfo['status'] == gettext("running")) + $ifinfo['status'] = gettext("up"); + } + if (preg_match("/channel (\S*)/", $ici, $matches)) { + $ifinfo['channel'] = $matches[1]; + } + if (preg_match("/ssid (\".*?\"|\S*)/", $ici, $matches)) { + if ($matches[1][0] == '"') + $ifinfo['ssid'] = substr($matches[1], 1, -1); + else + $ifinfo['ssid'] = $matches[1]; + } + if (preg_match("/laggproto (.*)$/", $ici, $matches)) { + $ifinfo['laggproto'] = $matches[1]; + } + if (preg_match("/laggport: (.*)$/", $ici, $matches)) { + $ifinfo['laggport'][] = $matches[1]; + } + } + foreach($wifconfiginfo as $ici) { + $elements = preg_split("/[ ]+/i", $ici); + if ($elements[0] != "") { + $ifinfo['bssid'] = $elements[0]; + } + if ($elements[3] != "") { + $ifinfo['rate'] = $elements[3]; + } + if ($elements[4] != "") { + $ifinfo['rssi'] = $elements[4]; + } + + } + /* lookup the gateway */ + if (interface_has_gateway($ifdescr)) { + $ifinfo['gateway'] = get_interface_gateway($ifdescr); + $ifinfo['gatewayv6'] = get_interface_gateway_v6($ifdescr); + } + } + + $bridge = ""; + $bridge = link_interface_to_bridge($ifdescr); + if($bridge) { + $bridge_text = `/sbin/ifconfig {$bridge}`; + if(stristr($bridge_text, "blocking") <> false) { + $ifinfo['bridge'] = "" . gettext("blocking") . " - " . gettext("check for ethernet loops"); + $ifinfo['bridgeint'] = $bridge; + } else if(stristr($bridge_text, "learning") <> false) { + $ifinfo['bridge'] = gettext("learning"); + $ifinfo['bridgeint'] = $bridge; + } else if(stristr($bridge_text, "forwarding") <> false) { + $ifinfo['bridge'] = gettext("forwarding"); + $ifinfo['bridgeint'] = $bridge; + } + } + + return $ifinfo; +} + +//returns cpu speed of processor. Good for determining capabilities of machine +function get_cpu_speed() { + return get_single_sysctl("hw.clockrate"); +} + +function get_uptime_sec() { + $boottime = ""; + $matches = ""; + $boottime = get_single_sysctl("kern.boottime"); + preg_match("/sec = (\d+)/", $boottime, $matches); + $boottime = $matches[1]; + if(intval($boottime) == 0) + return 0; + + $uptime = time() - $boottime; + return $uptime; +} + +function add_hostname_to_watch($hostname) { + if(!is_dir("/var/db/dnscache")) { + mkdir("/var/db/dnscache"); + } + $result = array(); + if((is_fqdn($hostname)) && (!is_ipaddr($hostname))) { + $domrecords = array(); + $domips = array(); + exec("host -t A " . escapeshellarg($hostname), $domrecords, $rethost); + if($rethost == 0) { + foreach($domrecords as $domr) { + $doml = explode(" ", $domr); + $domip = $doml[3]; + /* fill array with domain ip addresses */ + if(is_ipaddr($domip)) { + $domips[] = $domip; + } + } + } + sort($domips); + $contents = ""; + if(! empty($domips)) { + foreach($domips as $ip) { + $contents .= "$ip\n"; + } + } + file_put_contents("/var/db/dnscache/$hostname", $contents); + /* Remove empty elements */ + $result = array_filter(explode("\n", $contents), 'strlen'); + } + return $result; +} + +function is_fqdn($fqdn) { + $hostname = false; + if(preg_match("/[-A-Z0-9\.]+\.[-A-Z0-9\.]+/i", $fqdn)) { + $hostname = true; + } + if(preg_match("/\.\./", $fqdn)) { + $hostname = false; + } + if(preg_match("/^\./i", $fqdn)) { + $hostname = false; + } + if(preg_match("/\//i", $fqdn)) { + $hostname = false; + } + return($hostname); +} + +function pfsense_default_state_size() { + /* get system memory amount */ + $memory = get_memory(); + $physmem = $memory[0]; + /* Be cautious and only allocate 10% of system memory to the state table */ + $max_states = (int) ($physmem/10)*1000; + return $max_states; +} + +function pfsense_default_tables_size() { + $current = `pfctl -sm | grep ^tables | awk '{print $4};'`; + return $current; +} + +function pfsense_default_table_entries_size() { + $current = `pfctl -sm | grep table-entries | awk '{print $4};'`; + return $current; +} + +/* Compare the current hostname DNS to the DNS cache we made + * if it has changed we return the old records + * if no change we return false */ +function compare_hostname_to_dnscache($hostname) { + if(!is_dir("/var/db/dnscache")) { + mkdir("/var/db/dnscache"); + } + $hostname = trim($hostname); + if(is_readable("/var/db/dnscache/{$hostname}")) { + $oldcontents = file_get_contents("/var/db/dnscache/{$hostname}"); + } else { + $oldcontents = ""; + } + if((is_fqdn($hostname)) && (!is_ipaddr($hostname))) { + $domrecords = array(); + $domips = array(); + exec("host -t A " . escapeshellarg($hostname), $domrecords, $rethost); + if($rethost == 0) { + foreach($domrecords as $domr) { + $doml = explode(" ", $domr); + $domip = $doml[3]; + /* fill array with domain ip addresses */ + if(is_ipaddr($domip)) { + $domips[] = $domip; + } + } + } + sort($domips); + $contents = ""; + if(! empty($domips)) { + foreach($domips as $ip) { + $contents .= "$ip\n"; + } + } + } + + if(trim($oldcontents) != trim($contents)) { + if($g['debug']) { + log_error(sprintf(gettext('DNSCACHE: Found old IP %1$s and new IP %2$s'), $oldcontents, $contents)); + } + return ($oldcontents); + } else { + return false; + } +} + +/* + * load_crypto() - Load crypto modules if enabled in config. + */ +function load_crypto() { + global $config, $g; + $crypto_modules = array('glxsb', 'aesni'); + + if (!in_array($config['system']['crypto_hardware'], $crypto_modules)) + return false; + + if (!empty($config['system']['crypto_hardware']) && !is_module_loaded($config['system']['crypto_hardware'])) { + log_error("Loading {$config['system']['crypto_hardware']} cryptographic accelerator module."); + mwexec("/sbin/kldload {$config['system']['crypto_hardware']}"); + } +} + +/* + * load_thermal_hardware() - Load temperature monitor kernel module + */ +function load_thermal_hardware() { + global $config, $g; + $thermal_hardware_modules = array('coretemp', 'amdtemp'); + + if (!in_array($config['system']['thermal_hardware'], $thermal_hardware_modules)) + return false; + + if (!empty($config['system']['thermal_hardware']) && !is_module_loaded($config['system']['thermal_hardware'])) { + log_error("Loading {$config['system']['thermal_hardware']} thermal monitor module."); + mwexec("/sbin/kldload {$config['system']['thermal_hardware']}"); + } +} + +/****f* pfsense-utils/isvm + * NAME + * isvm + * INPUTS + * none + * RESULT + * returns true if machine is running under a virtual environment + ******/ +function isvm() { + $virtualenvs = array("vmware", "parallels", "qemu", "bochs", "plex86"); + $bios_product = trim(`/bin/kenv smbios.system.product`); + foreach ($virtualenvs as $virtualenv) + if (stripos($bios_product, $virtualenv) !== false) + return true; + + return false; +} + +function get_freebsd_version() { + $version = explode(".", php_uname("r")); + return $version[0]; +} + +function download_file($url, $destination, $verify_ssl = false, $connect_timeout = 60, $timeout = 0) { + global $config, $g; + + $fp = fopen($destination, "wb"); + + if (!$fp) + return false; + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $verify_ssl); + curl_setopt($ch, CURLOPT_FILE, $fp); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connect_timeout); + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_USERAGENT, $g['product_name'] . '/' . rtrim(file_get_contents("/etc/version"))); + + if (!empty($config['system']['proxyurl'])) { + curl_setopt($ch, CURLOPT_PROXY, $config['system']['proxyurl']); + if (!empty($config['system']['proxyport'])) + curl_setopt($ch, CURLOPT_PROXYPORT, $config['system']['proxyport']); + if (!empty($config['system']['proxyuser']) && !empty($config['system']['proxypass'])) { + @curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_ANY | CURLAUTH_ANYSAFE); + curl_setopt($ch, CURLOPT_PROXYUSERPWD, "{$config['system']['proxyuser']}:{$config['system']['proxypass']}"); + } + } + + @curl_exec($ch); + $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + fclose($fp); + curl_close($ch); + return ($http_code == 200) ? true : $http_code; +} + +function download_file_with_progress_bar($url_file, $destination_file, $readbody = 'read_body', $connect_timeout=60, $timeout=0) { + global $ch, $fout, $file_size, $downloaded, $config, $first_progress_update; + $file_size = 1; + $downloaded = 1; + $first_progress_update = TRUE; + /* open destination file */ + $fout = fopen($destination_file, "wb"); + + /* + * Originally by Author: Keyvan Minoukadeh + * Modified by Scott Ullrich to return Content-Length size + */ + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url_file); + curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header'); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + /* Don't verify SSL peers since we don't have the certificates to do so. */ + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_WRITEFUNCTION, $readbody); + curl_setopt($ch, CURLOPT_NOPROGRESS, '1'); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connect_timeout); + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + curl_setopt($ch, CURLOPT_USERAGENT, $g['product_name'] . '/' . rtrim(file_get_contents("/etc/version"))); + + if (!empty($config['system']['proxyurl'])) { + curl_setopt($ch, CURLOPT_PROXY, $config['system']['proxyurl']); + if (!empty($config['system']['proxyport'])) + curl_setopt($ch, CURLOPT_PROXYPORT, $config['system']['proxyport']); + if (!empty($config['system']['proxyuser']) && !empty($config['system']['proxypass'])) { + @curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_ANY | CURLAUTH_ANYSAFE); + curl_setopt($ch, CURLOPT_PROXYUSERPWD, "{$config['system']['proxyuser']}:{$config['system']['proxypass']}"); + } + } + + @curl_exec($ch); + $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + if($fout) + fclose($fout); + curl_close($ch); + return ($http_code == 200) ? true : $http_code; +} + +function read_header($ch, $string) { + global $file_size, $fout; + $length = strlen($string); + $regs = ""; + preg_match("/(Content-Length:) (.*)/", $string, $regs); + if($regs[2] <> "") { + $file_size = intval($regs[2]); + } + ob_flush(); + return $length; +} + +function read_body($ch, $string) { + global $fout, $file_size, $downloaded, $sendto, $static_status, $static_output, $lastseen, $first_progress_update; + global $pkg_interface; + $length = strlen($string); + $downloaded += intval($length); + if($file_size > 0) { + $downloadProgress = round(100 * (1 - $downloaded / $file_size), 0); + $downloadProgress = 100 - $downloadProgress; + } else + $downloadProgress = 0; + if($lastseen <> $downloadProgress and $downloadProgress < 101) { + if($sendto == "status") { + if($pkg_interface == "console") { + if(($downloadProgress % 10) == 0 || $downloadProgress < 10) { + $tostatus = $static_status . $downloadProgress . "%"; + if ($downloadProgress == 100) { + $tostatus = $tostatus . "\r"; + } + update_status($tostatus); + } + } else { + $tostatus = $static_status . $downloadProgress . "%"; + update_status($tostatus); + } + } else { + if($pkg_interface == "console") { + if(($downloadProgress % 10) == 0 || $downloadProgress < 10) { + $tooutput = $static_output . $downloadProgress . "%"; + if ($downloadProgress == 100) { + $tooutput = $tooutput . "\r"; + } + update_output_window($tooutput); + } + } else { + $tooutput = $static_output . $downloadProgress . "%"; + update_output_window($tooutput); + } + } + if(($pkg_interface != "console") || (($downloadProgress % 10) == 0) || ($downloadProgress < 10)) { + update_progress_bar($downloadProgress, $first_progress_update); + $first_progress_update = FALSE; + } + $lastseen = $downloadProgress; + } + if($fout) + fwrite($fout, $string); + ob_flush(); + return $length; +} + +/* + * update_output_window: update bottom textarea dynamically. + */ +function update_output_window($text) { + global $pkg_interface; + $log = preg_replace("/\n/", "\\n", $text); + if($pkg_interface != "console") { + echo "\n"; + } + /* ensure that contents are written out */ + ob_flush(); +} + +/* + * update_status: update top textarea dynamically. + */ +function update_status($status) { + global $pkg_interface; + if($pkg_interface == "console") { + echo "\r{$status}"; + } else { + echo "\n"; + } + /* ensure that contents are written out */ + ob_flush(); +} + +/* + * update_progress_bar($percent, $first_time): updates the javascript driven progress bar. + */ +function update_progress_bar($percent, $first_time) { + global $pkg_interface; + if($percent > 100) $percent = 1; + if($pkg_interface <> "console") { + echo "\n"; + } else { + if(!($first_time)) + echo "\x08\x08\x08\x08\x08"; + echo sprintf("%4d%%", $percent); + } +} + +/* Split() is being DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged. */ +if(!function_exists("split")) { + function split($separator, $haystack, $limit = null) { + log_error("deprecated split() call with separator '{$separator}'"); + return preg_split($separator, $haystack, $limit); + } +} + +function update_alias_names_upon_change($section, $field, $new_alias_name, $origname) { + global $g, $config, $pconfig, $debug; + if(!$origname) + return; + + $sectionref = &$config; + foreach($section as $sectionname) { + if(is_array($sectionref) && isset($sectionref[$sectionname])) + $sectionref = &$sectionref[$sectionname]; + else + return; + } + + if($debug) $fd = fopen("{$g['tmp_path']}/print_r", "a"); + if($debug) fwrite($fd, print_r($pconfig, true)); + + if(is_array($sectionref)) { + foreach($sectionref as $itemkey => $item) { + if($debug) fwrite($fd, "$itemkey\n"); + + $fieldfound = true; + $fieldref = &$sectionref[$itemkey]; + foreach($field as $fieldname) { + if(is_array($fieldref) && isset($fieldref[$fieldname])) + $fieldref = &$fieldref[$fieldname]; + else { + $fieldfound = false; + break; + } + } + if($fieldfound && $fieldref == $origname) { + if($debug) fwrite($fd, "Setting old alias value $origname to $new_alias_name\n"); + $fieldref = $new_alias_name; + } + } + } + + if($debug) fclose($fd); + +} + +function update_alias_url_data() { + global $config, $g; + + $updated = false; + + /* item is a url type */ + $lockkey = lock('aliasurl'); + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $x => $alias) { + if (empty($alias['aliasurl'])) + continue; + + $address = ""; + $isfirst = 0; + foreach ($alias['aliasurl'] as $alias_url) { + /* fetch down and add in */ + $temp_filename = tempnam("{$g['tmp_path']}/", "alias_import"); + unlink($temp_filename); + $verify_ssl = isset($config['system']['checkaliasesurlcert']); + mkdir($temp_filename); + download_file($alias_url, $temp_filename . "/aliases", $verify_ssl); + + /* if the item is tar gzipped then extract */ + if (stripos($alias_url, '.tgz')) { + if (!process_alias_tgz($temp_filename)) + continue; + } else if (stripos($alias_url, '.zip')) { + if (!process_alias_unzip($temp_filename)) + continue; + } + if (file_exists("{$temp_filename}/aliases")) { + $fd = @fopen("{$temp_filename}/aliases", 'r'); + if (!$fd) { + log_error(gettext("Could not process aliases from alias: {$alias_url}")); + continue; + } + /* NOTE: fgetss() is not a typo RTFM before being smart */ + while (($fc = fgetss($fd)) !== FALSE) { + $tmp = trim($fc, " \t\n\r"); + if (empty($tmp)) + continue; + $tmp_str = strstr($tmp, '#', true); + if (!empty($tmp_str)) + $tmp = $tmp_str; + if ($isfirst == 1) + $address .= ' '; + $address .= $tmp; + $isfirst = 1; + } + fclose($fd); + mwexec("/bin/rm -rf {$temp_filename}"); + } + } + if (!empty($address)) { + $config['aliases']['alias'][$x]['address'] = $address; + $updated = true; + } + } + } + unlock($lockkey); + + /* Report status to callers as well */ + return $updated; +} + +function process_alias_unzip($temp_filename) { + if(!file_exists("/usr/local/bin/unzip")) { + log_error(gettext("Alias archive is a .zip file which cannot be decompressed because utility is missing!")); + return false; + } + rename("{$temp_filename}/aliases", "{$temp_filename}/aliases.zip"); + mwexec("/usr/local/bin/unzip {$temp_filename}/aliases.tgz -d {$temp_filename}/aliases/"); + unlink("{$temp_filename}/aliases.zip"); + $files_to_process = return_dir_as_array("{$temp_filename}/"); + /* foreach through all extracted files and build up aliases file */ + $fd = @fopen("{$temp_filename}/aliases", "w"); + if (!$fd) { + log_error(gettext("Could not open {$temp_filename}/aliases for writing!")); + return false; + } + foreach($files_to_process as $f2p) { + $tmpfd = @fopen($f2p, 'r'); + if (!$tmpfd) { + log_error(gettext("The following file could not be read {$f2p} from {$temp_filename}")); + continue; + } + while (($tmpbuf = fread($tmpfd, 65536)) !== FALSE) + fwrite($fd, $tmpbuf); + fclose($tmpfd); + unlink($f2p); + } + fclose($fd); + unset($tmpbuf); + + return true; +} + +function process_alias_tgz($temp_filename) { + if(!file_exists('/usr/bin/tar')) { + log_error(gettext("Alias archive is a .tar/tgz file which cannot be decompressed because utility is missing!")); + return false; + } + rename("{$temp_filename}/aliases", "{$temp_filename}/aliases.tgz"); + mwexec("/usr/bin/tar xzf {$temp_filename}/aliases.tgz -C {$temp_filename}/aliases/"); + unlink("{$temp_filename}/aliases.tgz"); + $files_to_process = return_dir_as_array("{$temp_filename}/"); + /* foreach through all extracted files and build up aliases file */ + $fd = @fopen("{$temp_filename}/aliases", "w"); + if (!$fd) { + log_error(gettext("Could not open {$temp_filename}/aliases for writing!")); + return false; + } + foreach($files_to_process as $f2p) { + $tmpfd = @fopen($f2p, 'r'); + if (!$tmpfd) { + log_error(gettext("The following file could not be read {$f2p} from {$temp_filename}")); + continue; + } + while (($tmpbuf = fread($tmpfd, 65536)) !== FALSE) + fwrite($fd, $tmpbuf); + fclose($tmpfd); + unlink($f2p); + } + fclose($fd); + unset($tmpbuf); + + return true; +} + +function version_compare_dates($a, $b) { + $a_time = strtotime($a); + $b_time = strtotime($b); + + if ((!$a_time) || (!$b_time)) { + return FALSE; + } else { + if ($a_time < $b_time) + return -1; + elseif ($a_time == $b_time) + return 0; + else + return 1; + } +} +function version_get_string_value($a) { + $strs = array( + 0 => "ALPHA-ALPHA", + 2 => "ALPHA", + 3 => "BETA", + 4 => "B", + 5 => "C", + 6 => "D", + 7 => "RC", + 8 => "RELEASE", + 9 => "*" // Matches all release levels + ); + $major = 0; + $minor = 0; + foreach ($strs as $num => $str) { + if (substr($a, 0, strlen($str)) == $str) { + $major = $num; + $n = substr($a, strlen($str)); + if (is_numeric($n)) + $minor = $n; + break; + } + } + return "{$major}.{$minor}"; +} +function version_compare_string($a, $b) { + // Only compare string parts if both versions give a specific release + // (If either version lacks a string part, assume intended to match all release levels) + if (isset($a) && isset($b)) + return version_compare_numeric(version_get_string_value($a), version_get_string_value($b)); + else + return 0; +} +function version_compare_numeric($a, $b) { + $a_arr = explode('.', rtrim($a, '.0')); + $b_arr = explode('.', rtrim($b, '.0')); + + foreach ($a_arr as $n => $val) { + if (array_key_exists($n, $b_arr)) { + // So far so good, both have values at this minor version level. Compare. + if ($val > $b_arr[$n]) + return 1; + elseif ($val < $b_arr[$n]) + return -1; + } else { + // a is greater, since b doesn't have any minor version here. + return 1; + } + } + if (count($b_arr) > count($a_arr)) { + // b is longer than a, so it must be greater. + return -1; + } else { + // Both a and b are of equal length and value. + return 0; + } +} +function pfs_version_compare($cur_time, $cur_text, $remote) { + // First try date compare + $v = version_compare_dates($cur_time, $remote); + if ($v === FALSE) { + // If that fails, try to compare by string + // Before anything else, simply test if the strings are equal + if (($cur_text == $remote) || ($cur_time == $remote)) + return 0; + list($cur_num, $cur_str) = explode('-', $cur_text); + list($rem_num, $rem_str) = explode('-', $remote); + + // First try to compare the numeric parts of the version string. + $v = version_compare_numeric($cur_num, $rem_num); + + // If the numeric parts are the same, compare the string parts. + if ($v == 0) + return version_compare_string($cur_str, $rem_str); + } + return $v; +} +function process_alias_urltable($name, $url, $freq, $forceupdate=false) { + global $config; + + $urltable_prefix = "/var/db/aliastables/"; + $urltable_filename = $urltable_prefix . $name . ".txt"; + + // Make the aliases directory if it doesn't exist + if (!file_exists($urltable_prefix)) { + mkdir($urltable_prefix); + } elseif (!is_dir($urltable_prefix)) { + unlink($urltable_prefix); + mkdir($urltable_prefix); + } + + // If the file doesn't exist or is older than update_freq days, fetch a new copy. + if (!file_exists($urltable_filename) + || ((time() - filemtime($urltable_filename)) > ($freq * 86400 - 90)) + || $forceupdate) { + + // Try to fetch the URL supplied + conf_mount_rw(); + unlink_if_exists($urltable_filename . ".tmp"); + $verify_ssl = isset($config['system']['checkaliasesurlcert']); + if (download_file($url, $urltable_filename . ".tmp", $verify_ssl)) { + mwexec("/usr/bin/sed -E 's/\;.*//g; /^[[:space:]]*($|#)/d' ". escapeshellarg($urltable_filename . ".tmp") . " > " . escapeshellarg($urltable_filename)); + if (alias_get_type($name) == "urltable_ports") { + $ports = explode("\n", file_get_contents($urltable_filename)); + $ports = group_ports($ports); + file_put_contents($urltable_filename, implode("\n", $ports)); + } + unlink_if_exists($urltable_filename . ".tmp"); + } else + touch($urltable_filename); + conf_mount_ro(); + return true; + } else { + // File exists, and it doesn't need updated. + return -1; + } +} +function get_real_slice_from_glabel($label) { + $label = escapeshellarg($label); + return trim(`/sbin/glabel list | /usr/bin/grep -B2 ufs/{$label} | /usr/bin/head -n 1 | /usr/bin/cut -f3 -d' '`); +} +function nanobsd_get_boot_slice() { + return trim(`/sbin/mount | /usr/bin/grep pfsense | /usr/bin/cut -d'/' -f4 | /usr/bin/cut -d' ' -f1`); +} +function nanobsd_get_boot_drive() { + return trim(`/sbin/glabel list | /usr/bin/grep -B2 ufs/pfsense | /usr/bin/head -n 1 | /usr/bin/cut -f3 -d' ' | /usr/bin/cut -d's' -f1`); +} +function nanobsd_get_active_slice() { + $boot_drive = nanobsd_get_boot_drive(); + $active = trim(`gpart show $boot_drive | grep '\[active\]' | awk '{print $3;}'`); + + return "{$boot_drive}s{$active}"; +} +function nanobsd_get_size() { + return strtoupper(file_get_contents("/etc/nanosize.txt")); +} +function nanobsd_switch_boot_slice() { + global $SLICE, $OLDSLICE, $TOFLASH, $COMPLETE_PATH, $COMPLETE_BOOT_PATH; + global $GLABEL_SLICE, $UFS_ID, $OLD_UFS_ID, $BOOTFLASH; + global $BOOT_DEVICE, $REAL_BOOT_DEVICE, $BOOT_DRIVE, $ACTIVE_SLICE; + nanobsd_detect_slice_info(); + + if ($BOOTFLASH == $ACTIVE_SLICE) { + $slice = $TOFLASH; + } else { + $slice = $BOOTFLASH; + } + + for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } + ob_implicit_flush(1); + if(strstr($slice, "s2")) { + $ASLICE="2"; + $AOLDSLICE="1"; + $AGLABEL_SLICE="pfsense1"; + $AUFS_ID="1"; + $AOLD_UFS_ID="0"; + } else { + $ASLICE="1"; + $AOLDSLICE="2"; + $AGLABEL_SLICE="pfsense0"; + $AUFS_ID="0"; + $AOLD_UFS_ID="1"; + } + $ATOFLASH="{$BOOT_DRIVE}s{$ASLICE}"; + $ACOMPLETE_PATH="{$BOOT_DRIVE}s{$ASLICE}a"; + $ABOOTFLASH="{$BOOT_DRIVE}s{$AOLDSLICE}"; + conf_mount_rw(); + set_single_sysctl("kern.geom.debugflags", "16"); + exec("gpart set -a active -i {$ASLICE} {$BOOT_DRIVE}"); + exec("/usr/sbin/boot0cfg -s {$ASLICE} -v /dev/{$BOOT_DRIVE}"); + // We can't update these if they are mounted now. + if ($BOOTFLASH != $slice) { + exec("/sbin/tunefs -L ${AGLABEL_SLICE} /dev/$ACOMPLETE_PATH"); + nanobsd_update_fstab($AGLABEL_SLICE, $ACOMPLETE_PATH, $AOLD_UFS_ID, $AUFS_ID); + } + set_single_sysctl("kern.geom.debugflags", "0"); + conf_mount_ro(); +} +function nanobsd_clone_slice() { + global $SLICE, $OLDSLICE, $TOFLASH, $COMPLETE_PATH, $COMPLETE_BOOT_PATH; + global $GLABEL_SLICE, $UFS_ID, $OLD_UFS_ID, $BOOTFLASH; + global $BOOT_DEVICE, $REAL_BOOT_DEVICE, $BOOT_DRIVE, $ACTIVE_SLICE; + nanobsd_detect_slice_info(); + + for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } + ob_implicit_flush(1); + set_single_sysctl("kern.geom.debugflags", "16"); + exec("/bin/dd if=/dev/zero of=/dev/{$TOFLASH} bs=1m count=1"); + exec("/bin/dd if=/dev/{$BOOTFLASH} of=/dev/{$TOFLASH} bs=64k"); + exec("/sbin/tunefs -L {$GLABEL_SLICE} /dev/{$COMPLETE_PATH}"); + $status = nanobsd_update_fstab($GLABEL_SLICE, $COMPLETE_PATH, $OLD_UFS_ID, $UFS_ID); + set_single_sysctl("kern.geom.debugflags", "0"); + if($status) { + return false; + } else { + return true; + } +} +function nanobsd_update_fstab($gslice, $complete_path, $oldufs, $newufs) { + $tmppath = "/tmp/{$gslice}"; + $fstabpath = "/tmp/{$gslice}/etc/fstab"; + + mkdir($tmppath); + exec("/sbin/fsck_ufs -y /dev/{$complete_path}"); + exec("/sbin/mount /dev/ufs/{$gslice} {$tmppath}"); + copy("/etc/fstab", $fstabpath); + + if (!file_exists($fstabpath)) { + $fstab = << $val) + { + if ($priority == 'tag') + $attributes_data[$attr] = $val; + else + $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr' + } + } + if ($type == "open") + { + $parent[$level -1] = & $current; + if (!is_array($current) or (!in_array($tag, array_keys($current)))) + { + $current[$tag] = $result; + if ($attributes_data) + $current[$tag . '_attr'] = $attributes_data; + $repeated_tag_index[$tag . '_' . $level] = 1; + $current = & $current[$tag]; + } + else + { + if (isset ($current[$tag][0])) + { + $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result; + $repeated_tag_index[$tag . '_' . $level]++; + } + else + { + $current[$tag] = array ( + $current[$tag], + $result + ); + $repeated_tag_index[$tag . '_' . $level] = 2; + if (isset ($current[$tag . '_attr'])) + { + $current[$tag]['0_attr'] = $current[$tag . '_attr']; + unset ($current[$tag . '_attr']); + } + } + $last_item_index = $repeated_tag_index[$tag . '_' . $level] - 1; + $current = & $current[$tag][$last_item_index]; + } + } + elseif ($type == "complete") + { + if (!isset ($current[$tag])) + { + $current[$tag] = $result; + $repeated_tag_index[$tag . '_' . $level] = 1; + if ($priority == 'tag' and $attributes_data) + $current[$tag . '_attr'] = $attributes_data; + } + else + { + if (isset ($current[$tag][0]) and is_array($current[$tag])) + { + $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result; + if ($priority == 'tag' and $get_attributes and $attributes_data) + { + $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data; + } + $repeated_tag_index[$tag . '_' . $level]++; + } + else + { + $current[$tag] = array ( + $current[$tag], + $result + ); + $repeated_tag_index[$tag . '_' . $level] = 1; + if ($priority == 'tag' and $get_attributes) + { + if (isset ($current[$tag . '_attr'])) + { + $current[$tag]['0_attr'] = $current[$tag . '_attr']; + unset ($current[$tag . '_attr']); + } + if ($attributes_data) + { + $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data; + } + } + $repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken + } + } + } + elseif ($type == 'close') + { + $current = & $parent[$level -1]; + } + } + return ($xml_array); +} + +function get_country_name($country_code) { + if ($country_code != "ALL" && strlen($country_code) != 2) + return ""; + + $country_names_xml = "/usr/local/share/mobile-broadband-provider-info/iso_3166-1_list_en.xml"; + $country_names_contents = file_get_contents($country_names_xml); + $country_names = xml2array($country_names_contents); + + if($country_code == "ALL") { + $country_list = array(); + foreach($country_names['ISO_3166-1_List_en']['ISO_3166-1_Entry'] as $country) { + $country_list[] = array("code" => $country['ISO_3166-1_Alpha-2_Code_element'], + "name" => ucwords(strtolower($country['ISO_3166-1_Country_name'])) ); + } + return $country_list; + } + + foreach ($country_names['ISO_3166-1_List_en']['ISO_3166-1_Entry'] as $country) { + if ($country['ISO_3166-1_Alpha-2_Code_element'] == strtoupper($country_code)) { + return ucwords(strtolower($country['ISO_3166-1_Country_name'])); + } + } + return ""; +} + +/* sort by interface only, retain the original order of rules that apply to + the same interface */ +function filter_rules_sort() { + global $config; + + /* mark each rule with the sequence number (to retain the order while sorting) */ + for ($i = 0; isset($config['filter']['rule'][$i]); $i++) + $config['filter']['rule'][$i]['seq'] = $i; + + usort($config['filter']['rule'], "filter_rules_compare"); + + /* strip the sequence numbers again */ + for ($i = 0; isset($config['filter']['rule'][$i]); $i++) + unset($config['filter']['rule'][$i]['seq']); +} +function filter_rules_compare($a, $b) { + if (isset($a['floating']) && isset($b['floating'])) + return $a['seq'] - $b['seq']; + else if (isset($a['floating'])) + return -1; + else if (isset($b['floating'])) + return 1; + else if ($a['interface'] == $b['interface']) + return $a['seq'] - $b['seq']; + else + return compare_interface_friendly_names($a['interface'], $b['interface']); +} + +function generate_ipv6_from_mac($mac) { + $elements = explode(":", $mac); + if(count($elements) <> 6) + return false; + + $i = 0; + $ipv6 = "fe80::"; + foreach($elements as $byte) { + if($i == 0) { + $hexadecimal = substr($byte, 1, 2); + $bitmap = base_convert($hexadecimal, 16, 2); + $bitmap = str_pad($bitmap, 4, "0", STR_PAD_LEFT); + $bitmap = substr($bitmap, 0, 2) ."1". substr($bitmap, 3,4); + $byte = substr($byte, 0, 1) . base_convert($bitmap, 2, 16); + } + $ipv6 .= $byte; + if($i == 1) { + $ipv6 .= ":"; + } + if($i == 3) { + $ipv6 .= ":"; + } + if($i == 2) { + $ipv6 .= "ff:fe"; + } + + $i++; + } + return $ipv6; +} + +/****f* pfsense-utils/load_mac_manufacturer_table + * NAME + * load_mac_manufacturer_table + * INPUTS + * none + * RESULT + * returns associative array with MAC-Manufacturer pairs + ******/ +function load_mac_manufacturer_table() { + /* load MAC-Manufacture data from the file */ + $macs = false; + if (file_exists("/usr/local/share/nmap/nmap-mac-prefixes")) + $macs=file("/usr/local/share/nmap/nmap-mac-prefixes"); + if ($macs){ + foreach ($macs as $line){ + if (preg_match('/([0-9A-Fa-f]{6}) (.*)$/', $line, $matches)){ + /* store values like this $mac_man['000C29']='VMware' */ + $mac_man["$matches[1]"]=$matches[2]; + } + } + return $mac_man; + } else + return -1; + +} + +/****f* pfsense-utils/is_ipaddr_configured + * NAME + * is_ipaddr_configured + * INPUTS + * IP Address to check. + * If ignore_if is a VIP (not carp), vip array index is passed after string _virtualip + * RESULT + * returns true if the IP Address is + * configured and present on this device. +*/ +function is_ipaddr_configured($ipaddr, $ignore_if = "", $check_localip = false, $check_subnets = false) { + global $config; + + $pos = strpos($ignore_if, '_virtualip'); + if ($pos !== false) { + $ignore_vip_id = substr($ignore_if, $pos+10); + $ignore_vip_if = substr($ignore_if, 0, $pos); + } else { + $ignore_vip_id = -1; + $ignore_vip_if = $ignore_if; + } + + $isipv6 = is_ipaddrv6($ipaddr); + + if ($check_subnets) { + $iflist = get_configured_interface_list(); + foreach ($iflist as $if => $ifname) { + if ($ignore_if == $if) + continue; + + if ($isipv6 === true) { + $bitmask = get_interface_subnetv6($if); + $subnet = gen_subnetv6(get_interface_ipv6($if), $bitmask); + } else { + $bitmask = get_interface_subnet($if); + $subnet = gen_subnet(get_interface_ip($if), $bitmask); + } + + if (ip_in_subnet($ipaddr, $subnet . '/' . $bitmask)) + return true; + } + } else { + if ($isipv6 === true) + $interface_list_ips = get_configured_ipv6_addresses(); + else + $interface_list_ips = get_configured_ip_addresses(); + + foreach($interface_list_ips as $if => $ilips) { + if ($ignore_if == $if) + continue; + if (strcasecmp($ipaddr, $ilips) == 0) + return true; + } + } + + $interface_list_vips = get_configured_vips_list(true); + foreach ($interface_list_vips as $id => $vip) { + /* Skip CARP interfaces here since they were already checked above */ + if ($id == $ignore_vip_id || (strstr($ignore_if, '_vip') && $ignore_vip_if == $vip['if'])) + continue; + if (strcasecmp($ipaddr, $vip['ipaddr']) == 0) + return true; + } + + if ($check_localip) { + if (is_array($config['pptpd']) && !empty($config['pptpd']['localip']) && (strcasecmp($ipaddr, $config['pptpd']['localip']) == 0)) + return true; + + if (!is_array($config['l2tp']) && !empty($config['l2tp']['localip']) && (strcasecmp($ipaddr, $config['l2tp']['localip']) == 0)) + return true; + } + + return false; +} + +/****f* pfsense-utils/pfSense_handle_custom_code + * NAME + * pfSense_handle_custom_code + * INPUTS + * directory name to process + * RESULT + * globs the directory and includes the files + */ +function pfSense_handle_custom_code($src_dir) { + // Allow extending of the nat edit page and include custom input validation + if(is_dir("$src_dir")) { + $cf = glob($src_dir . "/*.inc"); + foreach($cf as $nf) { + if($nf == "." || $nf == "..") + continue; + // Include the extra handler + include("$nf"); + } + } +} + +function set_language($lang = 'en_US', $encoding = "UTF-8") { + putenv("LANG={$lang}.{$encoding}"); + setlocale(LC_ALL, "{$lang}.{$encoding}"); + textdomain("pfSense"); + bindtextdomain("pfSense","/usr/local/share/locale"); + bind_textdomain_codeset("pfSense","{$lang}.{$encoding}"); +} + +function get_locale_list() { + $locales = array( + "en_US" => gettext("English"), + "pt_BR" => gettext("Portuguese (Brazil)"), + "tr" => gettext("Turkish"), + ); + asort($locales); + return $locales; +} + +function system_get_language_code() { + global $config, $g_languages; + + // a language code, as per [RFC3066] + $language = $config['system']['language']; + //$code = $g_languages[$language]['code']; + $code = str_replace("_", "-", $language); + + if (empty($code)) + $code = "en-US"; // Set default code. + + return $code; +} + +function system_get_language_codeset() { + global $config, $g_languages; + + $language = $config['system']['language']; + $codeset = $g_languages[$language]['codeset']; + + if (empty($codeset)) + $codeset = "UTF-8"; // Set default codeset. + + return $codeset; +} + +/* Available languages/locales */ +$g_languages = array ( + "sq" => array("codeset" => "UTF-8", "desc" => gettext("Albanian")), + "bg" => array("codeset" => "UTF-8", "desc" => gettext("Bulgarian")), + "zh_CN" => array("codeset" => "UTF-8", "desc" => gettext("Chinese (Simplified)")), + "zh_TW" => array("codeset" => "UTF-8", "desc" => gettext("Chinese (Traditional)")), + "nl" => array("codeset" => "UTF-8", "desc" => gettext("Dutch")), + "da" => array("codeset" => "UTF-8", "desc" => gettext("Danish")), + "en_US" => array("codeset" => "UTF-8", "desc" => gettext("English")), + "fi" => array("codeset" => "UTF-8", "desc" => gettext("Finnish")), + "fr" => array("codeset" => "UTF-8", "desc" => gettext("French")), + "de" => array("codeset" => "UTF-8", "desc" => gettext("German")), + "el" => array("codeset" => "UTF-8", "desc" => gettext("Greek")), + "hu" => array("codeset" => "UTF-8", "desc" => gettext("Hungarian")), + "it" => array("codeset" => "UTF-8", "desc" => gettext("Italian")), + "ja" => array("codeset" => "UTF-8", "desc" => gettext("Japanese")), + "ko" => array("codeset" => "UTF-8", "desc" => gettext("Korean")), + "lv" => array("codeset" => "UTF-8", "desc" => gettext("Latvian")), + "nb" => array("codeset" => "UTF-8", "desc" => gettext("Norwegian (Bokmal)")), + "pl" => array("codeset" => "UTF-8", "desc" => gettext("Polish")), + "pt_BR" => array("codeset" => "ISO-8859-1", "desc" => gettext("Portuguese (Brazil)")), + "pt" => array("codeset" => "UTF-8", "desc" => gettext("Portuguese (Portugal)")), + "ro" => array("codeset" => "UTF-8", "desc" => gettext("Romanian")), + "ru" => array("codeset" => "UTF-8", "desc" => gettext("Russian")), + "sl" => array("codeset" => "UTF-8", "desc" => gettext("Slovenian")), + "tr" => array("codeset" => "UTF-8", "desc" => gettext("Turkish")), + "es" => array("codeset" => "UTF-8", "desc" => gettext("Spanish")), + "sv" => array("codeset" => "UTF-8", "desc" => gettext("Swedish")), + "sk" => array("codeset" => "UTF-8", "desc" => gettext("Slovak")), + "cs" => array("codeset" => "UTF-8", "desc" => gettext("Czech")) +); + +function return_hex_ipv4($ipv4) { + if(!is_ipaddrv4($ipv4)) + return(false); + + /* we need the hex form of the interface IPv4 address */ + $ip4arr = explode(".", $ipv4); + return (sprintf("%02x%02x%02x%02x", $ip4arr[0], $ip4arr[1], $ip4arr[2], $ip4arr[3])); +} + +function convert_ipv6_to_128bit($ipv6) { + if(!is_ipaddrv6($ipv6)) + return(false); + + $ip6arr = array(); + $ip6prefix = Net_IPv6::uncompress($ipv6); + $ip6arr = explode(":", $ip6prefix); + /* binary presentation of the prefix for all 128 bits. */ + $ip6prefixbin = ""; + foreach($ip6arr as $element) { + $ip6prefixbin .= sprintf("%016b", hexdec($element)); + } + return($ip6prefixbin); +} + +function convert_128bit_to_ipv6($ip6bin) { + if(strlen($ip6bin) <> 128) + return(false); + + $ip6arr = array(); + $ip6binarr = array(); + $ip6binarr = str_split($ip6bin, 16); + foreach($ip6binarr as $binpart) + $ip6arr[] = dechex(bindec($binpart)); + $ip6addr = Net_IPv6::compress(implode(":", $ip6arr)); + + return($ip6addr); +} + + +/* Returns the calculated bit length of the prefix delegation from the WAN interface */ +/* DHCP-PD is variable, calculate from the prefix-len on the WAN interface */ +/* 6rd is variable, calculate from 64 - (v6 prefixlen - (32 - v4 prefixlen)) */ +/* 6to4 is 16 bits, e.g. 65535 */ +function calculate_ipv6_delegation_length($if) { + global $config; + + if(!is_array($config['interfaces'][$if])) + return false; + + switch($config['interfaces'][$if]['ipaddrv6']) { + case "6to4": + $pdlen = 16; + break; + case "6rd": + $rd6cfg = $config['interfaces'][$if]; + $rd6plen = explode("/", $rd6cfg['prefix-6rd']); + $pdlen = (64 - ($rd6plen[1] + (32 - $rd6cfg['prefix-6rd-v4plen']))); + break; + case "dhcp6": + $dhcp6cfg = $config['interfaces'][$if]; + $pdlen = $dhcp6cfg['dhcp6-ia-pd-len']; + break; + default: + $pdlen = 0; + break; + } + return($pdlen); +} + +function huawei_rssi_to_string($rssi) { + $dbm = array(); + $i = 0; + $dbstart = -113; + while($i < 32) { + $dbm[$i] = $dbstart + ($i * 2); + $i++; + } + $percent = round(($rssi / 31) * 100); + $string = "rssi:{$rssi} level:{$dbm[$rssi]}dBm percent:{$percent}%"; + return $string; +} + +function huawei_mode_to_string($mode, $submode) { + $modes[0] = "None"; + $modes[1] = "AMPS"; + $modes[2] = "CDMA"; + $modes[3] = "GSM/GPRS"; + $modes[4] = "HDR"; + $modes[5] = "WCDMA"; + $modes[6] = "GPS"; + + $submodes[0] = "No Service"; + $submodes[1] = "GSM"; + $submodes[2] = "GPRS"; + $submodes[3] = "EDGE"; + $submodes[4] = "WCDMA"; + $submodes[5] = "HSDPA"; + $submodes[6] = "HSUPA"; + $submodes[7] = "HSDPA+HSUPA"; + $submodes[8] = "TD-SCDMA"; + $submodes[9] = "HSPA+"; + $string = "{$modes[$mode]}, {$submodes[$submode]} Mode"; + return $string; +} + +function huawei_service_to_string($state) { + $modes[0] = "No"; + $modes[1] = "Restricted"; + $modes[2] = "Valid"; + $modes[3] = "Restricted Regional"; + $modes[4] = "Powersaving"; + $string = "{$modes[$state]} Service"; + return $string; +} + +function huawei_simstate_to_string($state) { + $modes[0] = "Invalid SIM/locked"; + $modes[1] = "Valid SIM"; + $modes[2] = "Invalid SIM CS"; + $modes[3] = "Invalid SIM PS"; + $modes[4] = "Invalid SIM CS/PS"; + $modes[255] = "Missing SIM"; + $string = "{$modes[$state]} State"; + return $string; +} + +function zte_rssi_to_string($rssi) { + return huawei_rssi_to_string($rssi); +} + +function zte_mode_to_string($mode, $submode) { + $modes[0] = "No Service"; + $modes[1] = "Limited Service"; + $modes[2] = "GPRS"; + $modes[3] = "GSM"; + $modes[4] = "UMTS"; + $modes[5] = "EDGE"; + $modes[6] = "HSDPA"; + + $submodes[0] = "CS_ONLY"; + $submodes[1] = "PS_ONLY"; + $submodes[2] = "CS_PS"; + $submodes[3] = "CAMPED"; + $string = "{$modes[$mode]}, {$submodes[$submode]} Mode"; + return $string; +} + +function zte_service_to_string($state) { + $modes[0] = "Initializing"; + $modes[1] = "Network Lock error"; + $modes[2] = "Network Locked"; + $modes[3] = "Unlocked or correct MCC/MNC"; + $string = "{$modes[$state]} Service"; + return $string; +} + +function zte_simstate_to_string($state) { + $modes[0] = "No action"; + $modes[1] = "Network lock"; + $modes[2] = "(U)SIM card lock"; + $modes[3] = "Network Lock and (U)SIM card Lock"; + $string = "{$modes[$state]} State"; + return $string; +} + +function get_configured_pppoe_server_interfaces() { + global $config; + $iflist = array(); + if (is_array($config['pppoes']['pppoe'])) { + foreach($config['pppoes']['pppoe'] as $pppoe) { + if ($pppoe['mode'] == "server") { + $int = "poes". $pppoe['pppoeid']; + $iflist[$int] = strtoupper($int); + } + } + } + return $iflist; +} + +function get_pppoes_child_interfaces($ifpattern) { + $if_arr = array(); + if($ifpattern == "") + return; + + exec("ifconfig", $out, $ret); + foreach($out as $line) { + if(preg_match("/^({$ifpattern}[0-9]+):/i", $line, $match)) { + $if_arr[] = $match[1]; + } + } + return $if_arr; + +} + +/****f* pfsense-utils/pkg_call_plugins + * NAME + * pkg_call_plugins + * INPUTS + * $plugin_type value used to search in package configuration if the plugin is used, also used to create the function name + * $plugin_params parameters to pass to the plugin function for passing multiple parameters a array can be used. + * RESULT + * returns associative array results from the plugin calls for each package + * NOTES + * This generic function can be used to notify or retrieve results from functions that are defined in packages. + ******/ +function pkg_call_plugins($plugin_type, $plugin_params) { + global $g, $config; + $results = array(); + if (!is_array($config['installedpackages']['package'])) + return $results; + foreach ($config['installedpackages']['package'] as $package) { + if(!file_exists("/usr/local/pkg/" . $package['configurationfile'])) + continue; + $pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $package['configurationfile'], 'packagegui'); + $pkgname = substr(reverse_strrchr($package['configurationfile'], "."),0,-1); + if (is_array($pkg_config['plugins']['item'])) + foreach ($pkg_config['plugins']['item'] as $plugin) { + if ($plugin['type'] == $plugin_type) { + if (file_exists($pkg_config['include_file'])) + require_once($pkg_config['include_file']); + else + continue; + $plugin_function = $pkgname . '_'. $plugin_type; + $results[$pkgname] = @eval($plugin_function($plugin_params)); + } + } + } + return $results; +} + +/* Function to find and return the active XML RPC base URL to avoid code duplication */ +function get_active_xml_rpc_base_url() { + global $config, $g; + /* If the user has activated the option to enable an alternate xmlrpcbaseurl, and it's not empty, then use it */ + if (isset($config['system']['altpkgrepo']['enable']) && !empty($config['system']['altpkgrepo']['xmlrpcbaseurl'])) { + return $config['system']['altpkgrepo']['xmlrpcbaseurl']; + } else { + return $g['xmlrpcbaseurl']; + } +} + +?> diff --git a/usr/etc/inc/pkg-utils.inc b/usr/etc/inc/pkg-utils.inc new file mode 100644 index 000000000..923d1306d --- /dev/null +++ b/usr/etc/inc/pkg-utils.inc @@ -0,0 +1,1545 @@ +>/tmp/pbi_delete_errors.txt"); +} + +/****f* pkg-utils/is_package_installed + * NAME + * is_package_installed - Check whether a package is installed. + * INPUTS + * $packagename - name of the package to check + * RESULT + * boolean - true if the package is installed, false otherwise + * NOTES + * This function is deprecated - get_pkg_id() can already check for installation. + ******/ +function is_package_installed($packagename) { + $pkg = get_pkg_id($packagename); + if($pkg == -1) + return false; + return true; +} + +/****f* pkg-utils/get_pkg_id + * NAME + * get_pkg_id - Find a package's numeric ID. + * INPUTS + * $pkg_name - name of the package to check + * RESULT + * integer - -1 if package is not found, >-1 otherwise + ******/ +function get_pkg_id($pkg_name) { + global $config; + + if (is_array($config['installedpackages']['package'])) { + foreach($config['installedpackages']['package'] as $idx => $pkg) { + if($pkg['name'] == $pkg_name) + return $idx; + } + } + return -1; +} + +/****f* pkg-utils/get_pkg_internal_name + * NAME + * get_pkg_internal_name - Find a package's internal name (e.g. squid3 internal name is squid) + * INPUTS + * $package - array of package data from config + * RESULT + * string - internal name (if defined) or default to package name + ******/ +function get_pkg_internal_name($package) { + if (isset($package['internal_name']) && ($package['internal_name'] != "")) { + /* e.g. name is Ipguard-dev, internal name is ipguard */ + $pkg_internal_name = $package['internal_name']; + } else { + $pkg_internal_name = $package['name']; + } + return $pkg_internal_name; +} + +/****f* pkg-utils/get_pkg_info + * NAME + * get_pkg_info - Retrieve package information from package server. + * INPUTS + * $pkgs - 'all' to retrieve all packages, an array containing package names otherwise + * $info - 'all' to retrieve all information, an array containing keys otherwise + * RESULT + * $raw_versions - Array containing retrieved information, indexed by package name. + ******/ +function get_pkg_info($pkgs = 'all', $info = 'all') { + global $g; + + $freebsd_machine = php_uname("m"); + $params = array( + "pkg" => $pkgs, + "info" => $info, + "freebsd_version" => get_freebsd_version(), + "freebsd_machine" => $freebsd_machine + ); + $resp = call_pfsense_method('pfsense.get_pkgs', $params, 10); + return $resp ? $resp : array(); +} + +function get_pkg_sizes($pkgs = 'all') { + global $config, $g; + + $freebsd_machine = php_uname("m"); + $params = array( + "pkg" => $pkgs, + "freebsd_version" => get_freebsd_version(), + "freebsd_machine" => $freebsd_machine + ); + $msg = new XML_RPC_Message('pfsense.get_pkg_sizes', array(php_value_to_xmlrpc($params))); + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + $cli = new XML_RPC_Client($g['xmlrpcpath'], $xmlrpc_base_url); + $resp = $cli->send($msg, 10); + if(!is_object($resp)) + log_error("Could not get response from XMLRPC server!"); + else if (!$resp->faultCode()) { + $raw_versions = $resp->value(); + return xmlrpc_value_to_php($raw_versions); + } + + return array(); +} + +/* + * resync_all_package_configs() Force packages to setup their configuration and rc.d files. + * This function may also print output to the terminal indicating progress. + */ +function resync_all_package_configs($show_message = false) { + global $config, $pkg_interface, $g; + + log_error(gettext("Resyncing configuration for all packages.")); + + if (!is_array($config['installedpackages']['package'])) + return; + + if($show_message == true) + echo "Syncing packages:"; + + conf_mount_rw(); + + foreach($config['installedpackages']['package'] as $idx => $package) { + if (empty($package['name'])) + continue; + if($show_message == true) + echo " " . $package['name']; + get_pkg_depends($package['name'], "all"); + if($g['booting'] != true) + stop_service(get_pkg_internal_name($package)); + sync_package($idx, true, true); + if($pkg_interface == "console") + echo "\n" . gettext("Syncing packages:"); + } + + if($show_message == true) + echo " done.\n"; + + @unlink("/conf/needs_package_sync"); + conf_mount_ro(); +} + +/* + * is_freebsd_pkg_installed() - Check /var/db/pkg to determine whether or not a FreeBSD + * package is installed. + */ +function is_freebsd_pkg_installed($pkg) { + if(!$pkg) + return; + $output = ""; + $_gb = exec("/usr/local/sbin/pbi_info " . escapeshellarg($pkg) . ' 2>/dev/null', $output, $retval); + + return (intval($retval) == 0); +} + +/* + * get_pkg_depends($pkg_name, $filetype = ".xml", $format = "files", return_nosync = 1): Return a package's dependencies. + * + * $filetype = "all" || ".xml", ".tgz", etc. + * $format = "files" (full filenames) || "names" (stripped / parsed depend names) + * $return_nosync = 1 (return depends that have nosync set) | 0 (ignore packages with nosync) + * + */ +function get_pkg_depends($pkg_name, $filetype = ".xml", $format = "files", $return_nosync = 1) { + global $config; + + $pkg_id = get_pkg_id($pkg_name); + if($pkg_id == -1) + return -1; // This package doesn't really exist - exit the function. + else if (!isset($config['installedpackages']['package'][$pkg_id])) + return; // No package belongs to the pkg_id passed to this function. + + $package =& $config['installedpackages']['package'][$pkg_id]; + if(!file_exists("/usr/local/pkg/" . $package['configurationfile'])) { + log_error(sprintf(gettext('The %1$s package is missing required dependencies and must be reinstalled. %2$s'), $package['name'], $package['configurationfile'])); + uninstall_package($package['name']); + if (install_package($package['name']) < 0) { + log_error("Failed reinstalling package {$package['name']}."); + return false; + } + } + $pkg_xml = parse_xml_config_pkg("/usr/local/pkg/" . $package['configurationfile'], "packagegui"); + if (!empty($pkg_xml['additional_files_needed'])) { + foreach($pkg_xml['additional_files_needed'] as $item) { + if ($return_nosync == 0 && isset($item['nosync'])) + continue; // Do not return depends with nosync set if not required. + $depend_file = substr(strrchr($item['item']['0'], '/'),1); // Strip URLs down to filenames. + $depend_name = substr(substr($depend_file,0,strpos($depend_file,".")+1),0,-1); // Strip filename down to dependency name. + if (($filetype != "all") && (!preg_match("/{$filetype}/i", $depend_file))) + if (($filetype != "all") && (strtolower(substr($depend_file, -strlen($filetype))) != strtolower($filetype))) + continue; + if ($item['prefix'] != "") + $prefix = $item['prefix']; + else + $prefix = "/usr/local/pkg/"; + // Ensure that the prefix exists to avoid installation errors. + if(!is_dir($prefix)) + exec("/bin/mkdir -p {$prefix}"); + if(!file_exists($prefix . $depend_file)) + log_error(sprintf(gettext("The %s package is missing required dependencies and must be reinstalled."), $package['name'])); + switch ($format) { + case "files": + $depends[] = $prefix . $depend_file; + break; + case "names": + switch ($filetype) { + case "all": + if(preg_match("/\.xml/i", $depend_file)) { + $depend_xml = parse_xml_config_pkg("/usr/local/pkg/{$depend_file}", "packagegui"); + if (!empty($depend_xml)) + $depends[] = $depend_xml['name']; + } else + $depends[] = $depend_name; // If this dependency isn't package XML, use the stripped filename. + break; + case ".xml": + $depend_xml = parse_xml_config_pkg("/usr/local/pkg/" . $depend_file, "packagegui"); + if (!empty($depend_xml)) + $depends[] = $depend_xml['name']; + break; + default: + $depends[] = $depend_name; // If we aren't looking for XML, use the stripped filename (it's all we have). + break; + } + } + } + return $depends; + } +} + +function uninstall_package($pkg_name) { + global $config, $static_output; + global $builder_package_install; + + $id = get_pkg_id($pkg_name); + if ($id >= 0) { + stop_service(get_pkg_internal_name($config['installedpackages']['package'][$id])); + $pkg_depends =& $config['installedpackages']['package'][$id]['depends_on_package_pbi']; + $static_output .= "Removing package...\n"; + update_output_window($static_output); + if (is_array($pkg_depends)) { + foreach ($pkg_depends as $pkg_depend) + delete_package($pkg_depend); + } else { + // The packages (1 or more) are all in one long string. + // We need to pass them 1 at a time to delete_package. + // Compress any multiple whitespace (sp, tab, cr, lf...) into a single space char. + $pkg_dep_str = preg_replace("'\s+'", ' ', $pkg_depends); + // Get rid of any leading or trailing space. + $pkg_dep_str = trim($pkg_dep_str); + // Now we have a space-separated string. Make it into an array and process it. + $pkg_dep_array = explode(" ", $pkg_dep_str); + foreach ($pkg_dep_array as $pkg_depend) { + delete_package($pkg_depend); + } + } + } + delete_package_xml($pkg_name); + + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); +} + +function force_remove_package($pkg_name) { + delete_package_xml($pkg_name); +} + +/* + * sync_package($pkg_name, $sync_depends = true, $show_message = false) Force a package to setup its configuration and rc.d files. + */ +function sync_package($pkg_name, $sync_depends = true, $show_message = false) { + global $config, $config_parsed; + global $builder_package_install; + + // If this code is being called by pfspkg_installer + // which the builder system uses then return (ignore). + if($builder_package_install) + return; + + if(empty($config['installedpackages']['package'])) + return; + if(!is_numeric($pkg_name)) { + $pkg_id = get_pkg_id($pkg_name); + if($pkg_id == -1) + return -1; // This package doesn't really exist - exit the function. + } else { + $pkg_id = $pkg_name; + if(empty($config['installedpackages']['package'][$pkg_id])) + return; // No package belongs to the pkg_id passed to this function. + } + if (is_array($config['installedpackages']['package'][$pkg_id])) + $package =& $config['installedpackages']['package'][$pkg_id]; + else + return; /* empty package tag */ + if(!file_exists("/usr/local/pkg/" . $package['configurationfile'])) { + log_error(sprintf(gettext("The %s package is missing its configuration file and must be reinstalled."), $package['name'])); + force_remove_package($package['name']); + return -1; + } + $pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $package['configurationfile'], "packagegui"); + if(isset($pkg_config['nosync'])) + return; + /* Bring in package include files */ + if (!empty($pkg_config['include_file'])) { + $include_file = $pkg_config['include_file']; + if (file_exists($include_file)) + require_once($include_file); + else { + /* XXX: What the heck is this?! */ + log_error("Reinstalling package {$package['name']} because its include file({$include_file}) is missing!"); + uninstall_package($package['name']); + if (install_package($package['name']) < 0) { + log_error("Reinstalling package {$package['name']} failed. Take appropriate measures!!!"); + return -1; + } + } + } + + if(!empty($pkg_config['custom_php_global_functions'])) + eval($pkg_config['custom_php_global_functions']); + if(!empty($pkg_config['custom_php_resync_config_command'])) + eval($pkg_config['custom_php_resync_config_command']); + if($sync_depends == true) { + $depends = get_pkg_depends($pkg_name, ".xml", "files", 1); // Call dependency handler and do a little more error checking. + if(is_array($depends)) { + foreach($depends as $item) { + if(!file_exists($item)) { + require_once("notices.inc"); + file_notice($package['name'], sprintf(gettext("The %s package is missing required dependencies and must be reinstalled."), $package['name']), "Packages", "/pkg_mgr_install.php?mode=reinstallpkg&pkg={$package['name']}", 1); + log_error("Could not find {$item}. Reinstalling package."); + uninstall_package($pkg_name); + if (install_package($pkg_name) < 0) { + log_error("Reinstalling package {$package['name']} failed. Take appropriate measures!!!"); + return -1; + } + } else { + $item_config = parse_xml_config_pkg($item, "packagegui"); + if (empty($item_config)) + continue; + if(isset($item_config['nosync'])) + continue; + if (!empty($item_config['include_file'])) { + if (file_exists($item_config['include_file'])) + require_once($item_config['include_file']); + else { + log_error("Not calling package sync code for dependency {$item_config['name']} of {$package['name']} because some include files are missing."); + continue; + } + } + if($item_config['custom_php_global_functions'] <> "") + eval($item_config['custom_php_global_functions']); + if($item_config['custom_php_resync_config_command'] <> "") + eval($item_config['custom_php_resync_config_command']); + if($show_message == true) + print " " . $item_config['name']; + } + } + } + } +} + +/* + * pkg_fetch_recursive: Download and install a FreeBSD PBI package. This function provides output to + * a progress bar and output window. + */ +function pkg_fetch_recursive($pkgname, $filename, $dependlevel = 0, $base_url = "") { + global $static_output, $g, $config; + + // Clean up incoming filenames + $filename = str_replace(" ", " ", $filename); + $filename = str_replace("\n", " ", $filename); + $filename = str_replace(" ", " ", $filename); + + $pkgs = explode(" ", $filename); + foreach($pkgs as $filename) { + $filename = trim($filename); + if ($g['platform'] == "nanobsd") { + $pkgtmpdir = "/usr/bin/env PKG_TMPDIR=/root/ "; + $pkgstagingdir = "/root/tmp"; + if (!is_dir($pkgstagingdir)) + mkdir($pkgstagingdir); + $pkgstaging = "-o {$pkgstagingdir}/instmp.XXXXXX"; + $fetchdir = $pkgstagingdir; + } else { + $fetchdir = $g['tmp_path']; + } + + /* FreeBSD has no PBI's hosted, so fall back to our own URL for now. (Maybe fail to PC-BSD?) */ + $rel = get_freebsd_version(); + $priv_url = "https://files.pfsense.org/packages/{$rel}/All/"; + if (empty($base_url)) + $base_url = $priv_url; + if (substr($base_url, -1) == "/") + $base_url = substr($base_url, 0, -1); + $fetchto = "{$fetchdir}/apkg_{$filename}"; + $static_output .= "\n" . str_repeat(" ", $dependlevel * 2 + 1) . "Downloading {$base_url}/{$filename} ... "; + if (download_file_with_progress_bar("{$base_url}/{$filename}", $fetchto) !== true) { + if ($base_url != $priv_url && download_file_with_progress_bar("{$priv_url}/{$filename}", $fetchto) !== true) { + $static_output .= " could not download from there or {$priv_url}/{$filename}.\n"; + update_output_window($static_output); + return false; + } else if ($base_url == $priv_url) { + $static_output .= " failed to download.\n"; + update_output_window($static_output); + return false; + } else { + $static_output .= " [{$osname} repository]\n"; + update_output_window($static_output); + } + } + $static_output .= " (extracting)\n"; + update_output_window($static_output); + + $pkgaddout = ""; + + $no_checksig = ""; + if (isset($config['system']['pkg_nochecksig'])) + $no_checksig = "--no-checksig"; + + $result = exec("/usr/local/sbin/pbi_add " . $pkgstaging . " -f -v {$no_checksig} " . escapeshellarg($fetchto) . " 2>&1", $pkgaddout, $rc); + pkg_debug($pkgname . " " . print_r($pkgaddout, true) . "\n"); + if ($rc == 0) { + $pbi_name = preg_replace('/\.pbi$/','',$filename); + + $gb = exec("/usr/local/sbin/pbi_info {$pbi_name} | /usr/bin/awk '/Prefix/ {print $2}'", $pbi_prefix); + $pbi_prefix = $pbi_prefix[0]; + + $links = get_pbi_binaries(escapeshellarg($pbi_name)); + foreach($links as $link) { + @unlink("/usr/local/{$link['link_name']}"); + @symlink("{$link['target']}","/usr/local/{$link['link_name']}"); + } + + $extra_links = array( + array("target" => "bin", "link_name" => "sbin"), + array("target" => "local/lib", "link_name" => "lib"), + array("target" => "local/libexec", "link_name" => "libexec"), + array("target" => "local/share", "link_name" => "share"), + array("target" => "local/www", "link_name" => "www"), + array("target" => "local/etc", "link_name" => "etc") + ); + + foreach ($extra_links as $link) { + if (!file_exists($pbi_prefix . "/" . $link['target'])) + continue; + @rmdir("{$pbi_prefix}/{$link['link_name']}"); + unlink_if_exists("{$pbi_prefix}/{$link['link_name']}"); + @symlink("{$pbi_prefix}/{$link['target']}", "{$pbi_prefix}/{$link['link_name']}"); + } + pkg_debug("pbi_add successfully completed.\n"); + } else { + if (is_array($pkgaddout)) + foreach ($pkgaddout as $line) + $static_output .= " " . $line .= "\n"; + + update_output_window($static_output); + pkg_debug("pbi_add failed.\n"); + return false; + } + } + return true; +} + +function get_pbi_binaries($pbi) { + $result = array(); + + if (empty($pbi)) + return $result; + + $gb = exec("/usr/local/sbin/pbi_info {$pbi} | /usr/bin/awk '/Prefix/ {print $2}'", $pbi_prefix); + $pbi_prefix = $pbi_prefix[0]; + + if (empty($pbi_prefix)) + return $result; + + foreach(array('bin', 'sbin') as $dir) { + if(!is_dir("{$pbi_prefix}/{$dir}")) + continue; + + $files = glob("{$pbi_prefix}/{$dir}/*.pbiopt"); + foreach($files as $f) { + $pbiopts = file($f, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + foreach($pbiopts as $pbiopt) { + if (!preg_match('/^TARGET:\s+(.*)$/', $pbiopt, $matches)) + continue; + + $result[] = array( + 'target' => preg_replace('/\.pbiopt$/', '', $f), + 'link_name' => $matches[1]); + } + } + } + + return $result; +} + + +function install_package($package, $pkg_info = "", $force_install = false) { + global $g, $config, $static_output, $pkg_interface; + + /* safe side. Write config below will send to ro again. */ + conf_mount_rw(); + + if($pkg_interface == "console") + echo "\n"; + /* fetch package information if needed */ + if(empty($pkg_info) or !is_array($pkg_info[$package])) { + $pkg_info = get_pkg_info(array($package)); + $pkg_info = $pkg_info[$package]; // We're only dealing with one package, so we can strip away the extra array. + if (empty($pkg_info)) { + conf_mount_ro(); + return -1; + } + } + if (!$force_install) { + $compatible = true; + $version = rtrim(file_get_contents("/etc/version")); + + if (isset($pkg_info['required_version'])) + $compatible = (pfs_version_compare("", $version, $pkg_info['required_version']) >= 0); + if (isset($pkg_info['maximum_version'])) + $compatible = $compatible && (pfs_version_compare("", $version, $pkg_info['maximum_version']) <= 0); + + if (!$compatible) { + log_error(sprintf(gettext('Package %s is not supported on this version.'), $pkg_info['name'])); + $static_output .= sprintf(gettext("Package %s is not supported on this version."), $pkg_info['name']); + update_status($static_output); + + conf_mount_ro(); + return -1; + } + } + pkg_debug(gettext("Beginning package installation.") . "\n"); + log_error(sprintf(gettext('Beginning package installation for %s .'), $pkg_info['name'])); + $static_output .= sprintf(gettext("Beginning package installation for %s ."), $pkg_info['name']); + update_status($static_output); + + /* fetch the package's configuration file */ + pkg_fetch_config_file($package, $pkg_info); + + /* add package information to config.xml */ + $pkgid = get_pkg_id($pkg_info['name']); + $static_output .= gettext("Saving updated package information...") . " "; + update_output_window($static_output); + if($pkgid == -1) { + $config['installedpackages']['package'][] = $pkg_info; + $changedesc = sprintf(gettext("Installed %s package."),$pkg_info['name']); + $to_output = gettext("done.") . "\n"; + } else { + $config['installedpackages']['package'][$pkgid] = $pkg_info; + $changedesc = sprintf(gettext("Overwrote previous installation of %s."), $pkg_info['name']); + $to_output = gettext("overwrite!") . "\n"; + } + if(file_exists('/conf/needs_package_sync')) + @unlink('/conf/needs_package_sync'); + conf_mount_ro(); + write_config("Intermediate config write during package install for {$pkg_info['name']}."); + $static_output .= $to_output; + update_output_window($static_output); + /* install other package components */ + if (!install_package_xml($package)) { + uninstall_package($package); + write_config($changedesc); + $static_output .= gettext("Failed to install package.") . "\n"; + update_output_window($static_output); + return -1; + } else { + $static_output .= gettext("Writing configuration... "); + update_output_window($static_output); + write_config($changedesc); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + if($pkg_info['after_install_info']) + update_output_window($pkg_info['after_install_info']); + } +} + +function get_after_install_info($package) { + global $pkg_info; + /* fetch package information if needed */ + if(!$pkg_info or !is_array($pkg_info[$package])) { + $pkg_info = get_pkg_info(array($package)); + $pkg_info = $pkg_info[$package]; // We're only dealing with one package, so we can strip away the extra array. + } + if($pkg_info['after_install_info']) + return $pkg_info['after_install_info']; +} + +function eval_once($toeval) { + global $evaled; + if(!$evaled) $evaled = array(); + $evalmd5 = md5($toeval); + if(!in_array($evalmd5, $evaled)) { + @eval($toeval); + $evaled[] = $evalmd5; + } + return; +} + +function install_package_xml($pkg) { + global $g, $config, $static_output, $pkg_interface, $config_parsed; + + if(($pkgid = get_pkg_id($pkg)) == -1) { + $static_output .= sprintf(gettext("The %s package is not installed.%sInstallation aborted."), $pkg, "\n\n"); + update_output_window($static_output); + if($pkg_interface <> "console") { + echo "\n"; + echo "\n"; + } + sleep(1); + return false; + } else + $pkg_info = $config['installedpackages']['package'][$pkgid]; + + /* pkg_add the package and its dependencies */ + if($pkg_info['depends_on_package_base_url'] != "") { + if($pkg_interface == "console") + echo "\n"; + update_status(gettext("Installing") . " " . $pkg_info['name'] . " " . gettext("and its dependencies.")); + $static_output .= gettext("Downloading") . " " . $pkg_info['name'] . " " . gettext("and its dependencies... "); + $static_orig = $static_output; + $static_output .= "\n"; + update_output_window($static_output); + foreach((array) $pkg_info['depends_on_package_pbi'] as $pkgdep) { + $pkg_name = substr(reverse_strrchr($pkgdep, "."), 0, -1); + $static_output = $static_orig . "\nChecking for package installation... "; + update_output_window($static_output); + if (!is_freebsd_pkg_installed($pkg_name)) { + if (!pkg_fetch_recursive($pkg_name, $pkgdep, 0, $pkg_info['depends_on_package_base_url'])) { + $static_output .= "of {$pkg_name} failed!\n\nInstallation aborted."; + update_output_window($static_output); + pkg_debug(gettext("Package WAS NOT installed properly.") . "\n"); + if($pkg_interface <> "console") { + echo "\n"; + echo "\n"; + } + sleep(1); + return false; + } + } + } + } + + $configfile = substr(strrchr($pkg_info['config_file'], '/'), 1); + if(file_exists("/usr/local/pkg/" . $configfile)) { + $static_output .= gettext("Loading package configuration... "); + update_output_window($static_output); + $pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $configfile, "packagegui"); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + $static_output .= gettext("Configuring package components...\n"); + if (!empty($pkg_config['filter_rules_needed'])) + $config['installedpackages']['package'][$pkgid]['filter_rule_function'] = $pkg_config['filter_rules_needed']; + update_output_window($static_output); + /* modify system files */ + if(is_array($pkg_config['modify_system']) && is_array($pkg_config['modify_system']['item'])) { + $static_output .= gettext("System files... "); + update_output_window($static_output); + foreach($pkg_config['modify_system']['item'] as $ms) { + if($ms['textneeded']) { + add_text_to_file($ms['modifyfilename'], $ms['textneeded']); + } + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + + pkg_fetch_additional_files($pkg, $pkg_info); + + /* if a require exists, include it. this will + * show us where an error exists in a package + * instead of making us blindly guess + */ + $missing_include = false; + if($pkg_config['include_file'] <> "") { + $static_output .= gettext("Loading package instructions...") . "\n"; + update_output_window($static_output); + pkg_debug("require_once('{$pkg_config['include_file']}')\n"); + if (file_exists($pkg_config['include_file'])) + require_once($pkg_config['include_file']); + else { + $missing_include = true; + $static_output .= "Include " . basename($pkg_config['include_file']) . " is missing!\n"; + update_output_window($static_output); + /* XXX: Should undo the steps before this?! */ + return false; + } + } + + /* custom commands */ + $static_output .= gettext("Custom commands...") . "\n"; + update_output_window($static_output); + if ($missing_include == false) { + if($pkg_config['custom_php_global_functions'] <> "") { + $static_output .= gettext("Executing custom_php_global_functions()..."); + update_output_window($static_output); + eval_once($pkg_config['custom_php_global_functions']); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + if($pkg_config['custom_php_install_command']) { + $static_output .= gettext("Executing custom_php_install_command()..."); + update_output_window($static_output); + /* XXX: create symlinks for conf files into the PBI directories. + * change packages to store configs at /usr/pbi/pkg/etc and remove this + */ + eval_once($pkg_config['custom_php_install_command']); + // Note: pkg may be mixed-case, e.g. "squidGuard" but the PBI names are lowercase. + // e.g. "squidguard-1.4_4-i386" so feed lowercase to pbi_info below. + // Also add the "-" so that examples like "squid-" do not match "squidguard-". + $pkg_name_for_pbi_match = strtolower($pkg) . "-"; + exec("/usr/local/sbin/pbi_info | grep '^{$pkg_name_for_pbi_match}' | xargs /usr/local/sbin/pbi_info | awk '/Prefix/ {print $2}'",$pbidirarray); + $pbidir0 = $pbidirarray[0]; + exec("find /usr/local/etc/ -name *.conf | grep " . escapeshellarg($pkg),$files); + foreach($files as $f) { + $pbiconf = str_replace('/usr/local',$pbidir0,$f); + if(is_file($pbiconf) || is_link($pbiconf)) { + unlink($pbiconf); + } + if(is_dir(dirname($pbiconf))) { + symlink($f,$pbiconf); + } else { + log_error("The dir for {$pbiconf} does not exist. Cannot add symlink to {$f}."); + } + } + eval_once($pkg_config['custom_php_install_command']); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + if($pkg_config['custom_php_resync_config_command'] <> "") { + $static_output .= gettext("Executing custom_php_resync_config_command()..."); + update_output_window($static_output); + eval_once($pkg_config['custom_php_resync_config_command']); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + } + /* sidebar items */ + if(is_array($pkg_config['menu'])) { + $static_output .= gettext("Menu items... "); + update_output_window($static_output); + foreach($pkg_config['menu'] as $menu) { + if(is_array($config['installedpackages']['menu'])) { + foreach($config['installedpackages']['menu'] as $amenu) + if($amenu['name'] == $menu['name']) + continue 2; + } else + $config['installedpackages']['menu'] = array(); + $config['installedpackages']['menu'][] = $menu; + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* integrated tab items */ + if(is_array($pkg_config['tabs']['tab'])) { + $static_output .= gettext("Integrated Tab items... "); + update_output_window($static_output); + foreach($pkg_config['tabs']['tab'] as $tab) { + if(is_array($config['installedpackages']['tab'])) { + foreach($config['installedpackages']['tab'] as $atab) + if($atab['name'] == $tab['name']) + continue 2; + } else + $config['installedpackages']['tab'] = array(); + $config['installedpackages']['tab'][] = $tab; + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* services */ + if(is_array($pkg_config['service'])) { + $static_output .= gettext("Services... "); + update_output_window($static_output); + foreach($pkg_config['service'] as $service) { + if(is_array($config['installedpackages']['service'])) { + foreach($config['installedpackages']['service'] as $aservice) + if($aservice['name'] == $service['name']) + continue 2; + } else + $config['installedpackages']['service'] = array(); + $config['installedpackages']['service'][] = $service; + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + } else { + $static_output .= gettext("Loading package configuration... failed!") . "\n\n" . gettext("Installation aborted."); + update_output_window($static_output); + pkg_debug(gettext("Unable to load package configuration. Installation aborted.") ."\n"); + if($pkg_interface <> "console") { + echo "\n"; + echo "\n"; + } + sleep(1); + return false; + } + + /* set up package logging streams */ + if($pkg_info['logging']) { + mwexec("/usr/sbin/fifolog_create -s 32768 {$g['varlog_path']}/{$pkg_info['logging']['logfilename']}"); + @chmod($g['varlog_path'] . '/' . $pkg_info['logging']['logfilename'], 0600); + add_text_to_file("/etc/syslog.conf", $pkg_info['logging']['facilityname'] . "\t\t\t\t" . $pkg_info['logging']['logfilename']); + pkg_debug("Adding text to file /etc/syslog.conf\n"); + system_syslogd_start(); + } + + return true; +} + +function does_package_depend($pkg) { + // Should not happen, but just in case. + if(!$pkg) + return; + $pkg_var_db_dir = glob("/var/db/pkg/{$pkg}*"); + // If this package has dependency then return true + foreach($pkg_var_db_dir as $pvdd) { + if (file_exists("{$vardb}/{$pvdd}/+REQUIRED_BY") && count(file("{$vardb}/{$pvdd}/+REQUIRED_BY")) > 0) + return true; + } + // Did not find a record of dependencies, so return false. + return false; +} + +function delete_package($pkg) { + global $config, $g, $static_output, $vardb; + + if(!$pkg) + return; + + // Note: $pkg has the full PBI package name followed by ".pbi". Strip off ".pbi". + $pkg = substr(reverse_strrchr($pkg, "."), 0, -1); + + if($pkg) + $static_output .= sprintf(gettext("Starting package deletion for %s..."),$pkg); + update_output_window($static_output); + + remove_freebsd_package($pkg); + $static_output .= "done.\n"; + update_output_window($static_output); + + /* Rescan directories for what has been left and avoid fooling other programs. */ + mwexec("/sbin/ldconfig"); + + return; +} + +function delete_package_xml($pkg) { + global $g, $config, $static_output, $pkg_interface; + + conf_mount_rw(); + + $pkgid = get_pkg_id($pkg); + if ($pkgid == -1) { + $static_output .= sprintf(gettext("The %s package is not installed.%sDeletion aborted."), $pkg, "\n\n"); + update_output_window($static_output); + if($pkg_interface <> "console") { + echo "\n"; + echo "\n"; + } + ob_flush(); + sleep(1); + conf_mount_ro(); + return; + } + pkg_debug(sprintf(gettext("Removing %s package... "),$pkg)); + $static_output .= sprintf(gettext("Removing %s components..."),$pkg) . "\n"; + update_output_window($static_output); + /* parse package configuration */ + $packages = &$config['installedpackages']['package']; + $tabs =& $config['installedpackages']['tab']; + $menus =& $config['installedpackages']['menu']; + $services = &$config['installedpackages']['service']; + $pkg_info =& $packages[$pkgid]; + if(file_exists("/usr/local/pkg/" . $pkg_info['configurationfile'])) { + $pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $packages[$pkgid]['configurationfile'], "packagegui"); + /* remove tab items */ + if(is_array($pkg_config['tabs'])) { + $static_output .= gettext("Tabs items... "); + update_output_window($static_output); + if(is_array($pkg_config['tabs']['tab']) && is_array($tabs)) { + foreach($pkg_config['tabs']['tab'] as $tab) { + foreach($tabs as $key => $insttab) { + if($insttab['name'] == $tab['name']) { + unset($tabs[$key]); + break; + } + } + } + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* remove menu items */ + if(is_array($pkg_config['menu'])) { + $static_output .= gettext("Menu items... "); + update_output_window($static_output); + if (is_array($pkg_config['menu']) && is_array($menus)) { + foreach($pkg_config['menu'] as $menu) { + foreach($menus as $key => $instmenu) { + if($instmenu['name'] == $menu['name']) { + unset($menus[$key]); + break; + } + } + } + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* remove services */ + if(is_array($pkg_config['service'])) { + $static_output .= gettext("Services... "); + update_output_window($static_output); + if (is_array($pkg_config['service']) && is_array($services)) { + foreach($pkg_config['service'] as $service) { + foreach($services as $key => $instservice) { + if($instservice['name'] == $service['name']) { + if($g['booting'] != true) + stop_service($service['name']); + if($service['rcfile']) { + $prefix = RCFILEPREFIX; + if (!empty($service['prefix'])) + $prefix = $service['prefix']; + if (file_exists("{$prefix}{$service['rcfile']}")) + @unlink("{$prefix}{$service['rcfile']}"); + } + unset($services[$key]); + } + } + } + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* + * XXX: Otherwise inclusion of config.inc again invalidates actions taken. + * Same is done during installation. + */ + write_config("Intermediate config write during package removal for {$pkg}."); + + /* + * If a require exists, include it. this will + * show us where an error exists in a package + * instead of making us blindly guess + */ + $missing_include = false; + if($pkg_config['include_file'] <> "") { + $static_output .= gettext("Loading package instructions...") . "\n"; + update_output_window($static_output); + pkg_debug("require_once(\"{$pkg_config['include_file']}\")\n"); + if (file_exists($pkg_config['include_file'])) + require_once($pkg_config['include_file']); + else { + $missing_include = true; + update_output_window($static_output); + $static_output .= "Include file " . basename($pkg_config['include_file']) . " could not be found for inclusion.\n"; + } + } + /* ermal + * NOTE: It is not possible to handle parse errors on eval. + * So we prevent it from being run at all to not interrupt all the other code. + */ + if ($missing_include == false) { + /* evalate this package's global functions and pre deinstall commands */ + if($pkg_config['custom_php_global_functions'] <> "") + eval_once($pkg_config['custom_php_global_functions']); + if($pkg_config['custom_php_pre_deinstall_command'] <> "") + eval_once($pkg_config['custom_php_pre_deinstall_command']); + } + /* system files */ + if(is_array($pkg_config['modify_system']) && is_array($pkg_config['modify_system']['item'])) { + $static_output .= gettext("System files... "); + update_output_window($static_output); + foreach($pkg_config['modify_system']['item'] as $ms) + if($ms['textneeded']) remove_text_from_file($ms['modifyfilename'], $ms['textneeded']); + + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* deinstall commands */ + if($pkg_config['custom_php_deinstall_command'] <> "") { + $static_output .= gettext("Deinstall commands... "); + update_output_window($static_output); + if ($missing_include == false) { + eval_once($pkg_config['custom_php_deinstall_command']); + $static_output .= gettext("done.") . "\n"; + } else + $static_output .= "\nNot executing custom deinstall hook because an include is missing.\n"; + update_output_window($static_output); + } + if($pkg_config['include_file'] <> "") { + $static_output .= gettext("Removing package instructions..."); + update_output_window($static_output); + pkg_debug(sprintf(gettext("Remove '%s'"), $pkg_config['include_file']) . "\n"); + unlink_if_exists("/usr/local/pkg/" . $pkg_config['include_file']); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* remove all additional files */ + if(is_array($pkg_config['additional_files_needed'])) { + $static_output .= gettext("Auxiliary files... "); + update_output_window($static_output); + foreach($pkg_config['additional_files_needed'] as $afn) { + $filename = get_filename_from_url($afn['item'][0]); + if($afn['prefix'] <> "") + $prefix = $afn['prefix']; + else + $prefix = "/usr/local/pkg/"; + unlink_if_exists($prefix . $filename); + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* package XML file */ + $static_output .= gettext("Package XML... "); + update_output_window($static_output); + unlink_if_exists("/usr/local/pkg/" . $packages[$pkgid]['configurationfile']); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + /* syslog */ + if(is_array($pkg_info['logging']) && $pkg_info['logging']['logfile_name'] <> "") { + $static_output .= "Syslog entries... "; + update_output_window($static_output); + remove_text_from_file("/etc/syslog.conf", $pkg_info['logging']['facilityname'] . "\t\t\t\t" . $pkg_info['logging']['logfilename']); + system_syslogd_start(); + @unlink("{$g['varlog_path']}/{$pkg_info['logging']['logfilename']}"); + $static_output .= "done.\n"; + update_output_window($static_output); + } + + conf_mount_ro(); + /* remove config.xml entries */ + $static_output .= gettext("Configuration... "); + update_output_window($static_output); + unset($config['installedpackages']['package'][$pkgid]); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + write_config("Removed {$pkg} package.\n"); +} + +function expand_to_bytes($size) { + $conv = array( + "G" => "3", + "M" => "2", + "K" => "1", + "B" => "0" + ); + $suffix = substr($size, -1); + if(!in_array($suffix, array_keys($conv))) return $size; + $size = substr($size, 0, -1); + for($i = 0; $i < $conv[$suffix]; $i++) { + $size *= 1024; + } + return $size; +} + +function get_pkg_db() { + global $g; + return return_dir_as_array($g['vardb_path'] . '/pkg'); +} + +function walk_depend($depend, $pkgdb = "", $alreadyseen = "") { + if(!$pkgdb) + $pkgdb = get_pkg_db(); + if(!is_array($alreadyseen)) + $alreadyseen = array(); + if (!is_array($depend)) + $depend = array(); + foreach($depend as $adepend) { + $pkgname = reverse_strrchr($adepend['name'], '.'); + if(in_array($pkgname, $alreadyseen)) { + continue; + } elseif(!in_array($pkgname, $pkgdb)) { + $size += expand_to_bytes($adepend['size']); + $alreadyseen[] = $pkgname; + if(is_array($adepend['depend'])) $size += walk_depend($adepend['depend'], $pkgdb, $alreadyseen); + } + } + return $size; +} + +function get_package_install_size($pkg = 'all', $pkg_info = "") { + global $config, $g; + if((!is_array($pkg)) and ($pkg != 'all')) + $pkg = array($pkg); + $pkgdb = get_pkg_db(); + if(!$pkg_info) + $pkg_info = get_pkg_sizes($pkg); + foreach($pkg as $apkg) { + if(!$pkg_info[$apkg]) + continue; + $toreturn[$apkg] = expand_to_bytes(walk_depend(array($pkg_info[$apkg]), $pkgdb)); + } + return $toreturn; +} + +function squash_from_bytes($size, $round = "") { + $conv = array(1 => "B", "K", "M", "G"); + foreach($conv as $div => $suffix) { + $sizeorig = $size; + if(($size /= 1024) < 1) { + if($round) { + $sizeorig = round($sizeorig, $round); + } + return $sizeorig . $suffix; + } + } + return; +} + +function pkg_reinstall_all() { + global $g, $config; + + @unlink('/conf/needs_package_sync'); + if (is_array($config['installedpackages']['package'])) { + echo gettext("One moment please, reinstalling packages...\n"); + echo gettext(" >>> Trying to fetch package info..."); + log_error(gettext("Attempting to reinstall all packages")); + $pkg_info = get_pkg_info(); + if ($pkg_info) { + echo " Done.\n"; + } else { + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + $error = sprintf(gettext(' >>> Unable to communicate with %1$s. Please verify DNS and interface configuration, and that %2$s has functional Internet connectivity.'), $xmlrpc_base_url, $g['product_name']); + echo "\n{$error}\n"; + log_error(gettext("Cannot reinstall packages: ") . $error); + return; + } + $todo = array(); + $all_names = array(); + foreach($config['installedpackages']['package'] as $package) { + $todo[] = array('name' => $package['name'], 'version' => $package['version']); + $all_names[] = $package['name']; + } + $package_name_list = gettext("List of packages to reinstall: ") . implode(", ", $all_names); + echo " >>> {$package_name_list}\n"; + log_error($package_name_list); + + foreach($todo as $pkgtodo) { + $static_output = ""; + if($pkgtodo['name']) { + log_error(gettext("Uninstalling package") . " {$pkgtodo['name']}"); + uninstall_package($pkgtodo['name']); + log_error(gettext("Finished uninstalling package") . " {$pkgtodo['name']}"); + log_error(gettext("Reinstalling package") . " {$pkgtodo['name']}"); + install_package($pkgtodo['name']); + log_error(gettext("Finished installing package") . " {$pkgtodo['name']}"); + } + } + log_error(gettext("Finished reinstalling all packages.")); + } else + echo "No packages are installed."; +} + +function stop_packages() { + require_once("config.inc"); + require_once("functions.inc"); + require_once("filter.inc"); + require_once("shaper.inc"); + require_once("captiveportal.inc"); + require_once("pkg-utils.inc"); + require_once("pfsense-utils.inc"); + require_once("service-utils.inc"); + + global $config, $g; + + log_error("Stopping all packages."); + + $rcfiles = glob(RCFILEPREFIX . "*.sh"); + if (!$rcfiles) + $rcfiles = array(); + else { + $rcfiles = array_flip($rcfiles); + if (!$rcfiles) + $rcfiles = array(); + } + + if (is_array($config['installedpackages']['package'])) { + foreach($config['installedpackages']['package'] as $package) { + echo " Stopping package {$package['name']}..."; + $internal_name = get_pkg_internal_name($package); + stop_service($internal_name); + unset($rcfiles[RCFILEPREFIX . strtolower($internal_name) . ".sh"]); + echo "done.\n"; + } + } + + foreach ($rcfiles as $rcfile => $number) { + $shell = @popen("/bin/sh", "w"); + if ($shell) { + echo " Stopping {$rcfile}..."; + if (!@fwrite($shell, "{$rcfile} stop >>/tmp/bootup_messages 2>&1")) { + if ($shell) + pclose($shell); + $shell = @popen("/bin/sh", "w"); + } + echo "done.\n"; + pclose($shell); + } + } +} + +function package_skip_tests($index,$requested_version){ + global $config, $g; + + /* Get pfsense version*/ + $version = rtrim(file_get_contents("/etc/version")); + + if($g['platform'] == "nanobsd") + if($index['noembedded']) + return true; + + /* If we are on not on HEAD, and the package wants it, skip */ + if ($version <> "HEAD" && $index['required_version'] == "HEAD" && $requested_version <> "other") + return true; + + /* If there is no required version, and the requested package version is not 'none', then skip */ + if (empty($index['required_version']) && $requested_version <> "none") + return true; + + /* If the requested version is not 'other', and the required version is newer than what we have, skip. */ + if($requested_version <> "other" && (pfs_version_compare("", $version, $index['required_version']) < 0)) + return true; + + /* If the requestion version is 'other' and we are on the version requested, skip. */ + if($requested_version == "other" && (pfs_version_compare("", $version, $index['required_version']) == 0)) + return true; + + /* Package is only for an older version, lets skip */ + if($index['maximum_version'] && (pfs_version_compare("", $version, $index['maximum_version']) > 0)) + return true; + + /* Do not skip package list */ + return false; +} + +function get_pkg_interfaces_select_source($include_localhost=false) { + $interfaces = get_configured_interface_with_descr(); + $ssifs = array(); + foreach ($interfaces as $iface => $ifacename) { + $tmp["name"] = $ifacename; + $tmp["value"] = $iface; + $ssifs[] = $tmp; + } + if ($include_localhost) { + $tmp["name"] = "Localhost"; + $tmp["value"] = "lo0"; + $ssifs[] = $tmp; + } + return $ssifs; +} + +function verify_all_package_servers() { + return verify_package_server(get_active_xml_rpc_base_url()); +} + +/* Check if the active package server is a valid default or if it has been + altered. */ +function verify_package_server($server) { + /* Define the expected default package server domains. Include + preceding "." to prevent matching from being too liberal. */ + $default_package_domains = array('.pfsense.org', '.pfsense.com', '.netgate.com'); + + /* For this test we only need to check the hostname. */ + $xmlrpcbase = parse_url($server, PHP_URL_HOST); + + foreach ($default_package_domains as $dom) { + if (substr($xmlrpcbase, -(strlen($dom))) == $dom) { + return true; + } + } + return false; +} + +/* Test the package server certificate to ensure that it validates properly */ +function check_package_server_ssl() { + global $g; + $xmlrpcurl = get_active_xml_rpc_base_url() . $g['xmlrpcpath']; + + /* If the package server is using HTTP, we can't verify SSL */ + if (substr($xmlrpcurl, 0, 5) == "http:") { + return "http"; + } + + /* Setup a basic cURL connection. We do not care about the content of + the result, only the SSL verification. */ + $ch = curl_init($xmlrpcurl); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, '30'); + curl_setopt($ch, CURLOPT_TIMEOUT, 60); + curl_setopt($ch, CURLOPT_USERAGENT, $g['product_name'] . '/' . rtrim(file_get_contents("/etc/version"))); + $result_page = curl_exec($ch); + $verifyfail = curl_getinfo($ch, CURLINFO_SSL_VERIFYRESULT); + curl_close($ch); + + /* The result from curl is 1 on failure, 0 on success. */ + if ($verifyfail == 0) + return true; + else + return false; +} + +/* Keep this message centrally since it will be used several times on pages + in the GUI. */ +function package_server_ssl_failure_message() { + $msg = "The package server's SSL certificate could not be verified. " + . "The SSL certificate itself may be invalid, its chain of trust may " + . "have failed validation, or the server may have been impersonated. " + . "Downloaded packages may come from an untrusted source. " + . "Proceed with caution."; + + return sprintf(gettext($msg), htmlspecialchars(get_active_xml_rpc_base_url())); +} + +/* Keep this message centrally since it will be used several times on pages + in the GUI. */ +function package_server_mismatch_message() { + $msg = "The package server currently configured on " + . "this firewall (%s) is NOT an official package server. The contents " + . "of such servers cannot be verified and may contain malicious files. " + . "Return the package server settings to their default values to " + . "ensure that verifiable and trusted packages are received."; + + return sprintf(gettext($msg), htmlspecialchars(get_active_xml_rpc_base_url())) . '

    ' + . '' . gettext("Package Manager Settings") . ''; +} + + +function pkg_fetch_config_file($package, $pkg_info = "") { + global $g, $config, $static_output, $pkg_interface; + conf_mount_rw(); + + if(empty($pkg_info) or !is_array($pkg_info[$package])) { + $pkg_info = get_pkg_info(array($package)); + $pkg_info = $pkg_info[$package]; // We're only dealing with one package, so we can strip away the extra array. + if (empty($pkg_info)) { + conf_mount_ro(); + return -1; + } + } + + /* fetch the package's configuration file */ + if($pkg_info['config_file'] != "") { + $static_output .= "\n" . gettext("Downloading package configuration file... "); + update_output_window($static_output); + pkg_debug(gettext("Downloading package configuration file...") . "\n"); + $fetchto = substr(strrchr($pkg_info['config_file'], '/'), 1); + download_file_with_progress_bar($pkg_info['config_file'], '/usr/local/pkg/' . $fetchto); + if(!file_exists('/usr/local/pkg/' . $fetchto)) { + pkg_debug(gettext("ERROR! Unable to fetch package configuration file. Aborting installation.") . "\n"); + if($pkg_interface == "console") + print "\n" . gettext("ERROR! Unable to fetch package configuration file. Aborting package installation.") . "\n"; + else { + $static_output .= gettext("failed!\n\nInstallation aborted.\n"); + update_output_window($static_output); + echo "
    Show install log"; + } + conf_mount_ro(); + return -1; + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + conf_mount_ro(); + return true; +} + + +function pkg_fetch_additional_files($package, $pkg_info = "") { + global $g, $config, $static_output, $pkg_interface; + conf_mount_rw(); + + if(empty($pkg_info) or !is_array($pkg_info[$package])) { + $pkg_info = get_pkg_info(array($package)); + $pkg_info = $pkg_info[$package]; // We're only dealing with one package, so we can strip away the extra array. + if (empty($pkg_info)) { + conf_mount_ro(); + return -1; + } + } + + $configfile = substr(strrchr($pkg_info['config_file'], '/'), 1); + if(file_exists("/usr/local/pkg/" . $configfile)) { + $static_output .= gettext("Loading package configuration... "); + update_output_window($static_output); + $pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $configfile, "packagegui"); + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + /* download additional files */ + if(is_array($pkg_config['additional_files_needed'])) { + $static_output .= gettext("Additional files... "); + $static_orig = $static_output; + update_output_window($static_output); + foreach($pkg_config['additional_files_needed'] as $afn) { + $filename = get_filename_from_url($afn['item'][0]); + if($afn['chmod'] <> "") + $pkg_chmod = $afn['chmod']; + else + $pkg_chmod = ""; + + if($afn['prefix'] <> "") + $prefix = $afn['prefix']; + else + $prefix = "/usr/local/pkg/"; + + if(!is_dir($prefix)) + safe_mkdir($prefix); + $static_output .= $filename . " "; + update_output_window($static_output); + if (download_file_with_progress_bar($afn['item'][0], $prefix . $filename) !== true) { + $static_output .= "failed.\n"; + @unlink($prefix . $filename); + update_output_window($static_output); + return false; + } + if(stristr($filename, ".tgz") <> "") { + pkg_debug(gettext("Extracting tarball to -C for ") . $filename . "...\n"); + $tarout = ""; + exec("/usr/bin/tar xvzf " . escapeshellarg($prefix . $filename) . " -C / 2>&1", $tarout); + pkg_debug(print_r($tarout, true) . "\n"); + } + if($pkg_chmod <> "") { + pkg_debug(sprintf(gettext('Changing file mode to %1$s for %2$s%3$s%4$s'), $pkg_chmod, $prefix, $filename, "\n")); + @chmod($prefix . $filename, $pkg_chmod); + system("/bin/chmod {$pkg_chmod} {$prefix}{$filename}"); + } + $static_output = $static_orig; + update_output_window($static_output); + } + $static_output .= gettext("done.") . "\n"; + update_output_window($static_output); + } + conf_mount_ro(); + return true; + } +} + +?> diff --git a/usr/etc/inc/plain_sasl_client.inc b/usr/etc/inc/plain_sasl_client.inc new file mode 100644 index 000000000..c7feed029 --- /dev/null +++ b/usr/etc/inc/plain_sasl_client.inc @@ -0,0 +1,99 @@ +state!=SASL_PLAIN_STATE_START) + { + $client->error="PLAIN authentication state is not at the start"; + return(SASL_FAIL); + } + $this->credentials=array( + "user"=>"", + "password"=>"", + "realm"=>"", + "mode"=>"" + ); + $defaults=array( + "realm"=>"", + "mode"=>"" + ); + $status=$client->GetCredentials($this->credentials,$defaults,$interactions); + if($status==SASL_CONTINUE) + { + switch($this->credentials["mode"]) + { + case SASL_PLAIN_EXIM_MODE: + $message=$this->credentials["user"]."\0".$this->credentials["password"]."\0"; + break; + case SASL_PLAIN_EXIM_DOCUMENTATION_MODE: + $message="\0".$this->credentials["user"]."\0".$this->credentials["password"]; + break; + default: + $message=$this->credentials["user"]."\0".$this->credentials["user"].(strlen($this->credentials["realm"]) ? "@".$this->credentials["realm"] : "")."\0".$this->credentials["password"]; + break; + } + $this->state=SASL_PLAIN_STATE_DONE; + } + else + Unset($message); + return($status); + } + + Function Step(&$client, $response, &$message, &$interactions) + { + switch($this->state) + { +/* + case SASL_PLAIN_STATE_IDENTIFY: + switch($this->credentials["mode"]) + { + case SASL_PLAIN_EXIM_MODE: + $message=$this->credentials["user"]."\0".$this->credentials["password"]."\0"; + break; + case SASL_PLAIN_EXIM_DOCUMENTATION_MODE: + $message="\0".$this->credentials["user"]."\0".$this->credentials["password"]; + break; + default: + $message=$this->credentials["user"]."\0".$this->credentials["user"].(strlen($this->credentials["realm"]) ? "@".$this->credentials["realm"] : "")."\0".$this->credentials["password"]; + break; + } + var_dump($message); + $this->state=SASL_PLAIN_STATE_DONE; + break; +*/ + case SASL_PLAIN_STATE_DONE: + $client->error="PLAIN authentication was finished without success"; + return(SASL_FAIL); + default: + $client->error="invalid PLAIN authentication step state"; + return(SASL_FAIL); + } + return(SASL_CONTINUE); + } +}; + +?> \ No newline at end of file diff --git a/usr/etc/inc/priv.defs.inc b/usr/etc/inc/priv.defs.inc new file mode 100644 index 000000000..352ac2e39 --- /dev/null +++ b/usr/etc/inc/priv.defs.inc @@ -0,0 +1,1427 @@ + diff --git a/usr/etc/inc/priv.inc b/usr/etc/inc/priv.inc new file mode 100644 index 000000000..c100a238d --- /dev/null +++ b/usr/etc/inc/priv.inc @@ -0,0 +1,291 @@ + + All rights reserved. + + Copyright (C) 2005-2006 Bill Marquette + All rights reserved. + + Copyright (C) 2006 Paul Taylor . + All rights reserved. + + Copyright (C) 2003-2006 Manuel Kasper . + 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. + + DISABLE_PHP_LINT_CHECKING +*/ + +/* + pfSense_MODULE: auth +*/ + +require_once("priv.defs.inc"); + +/* Load and process custom privs. */ +function get_priv_files($directory) { + $dir_array = array(); + if(!is_dir($directory)) + return; + if ($dh = opendir($directory)) { + while (($file = readdir($dh)) !== false) { + $canadd = 0; + if($file == ".") + $canadd = 1; + if($file == "..") + $canadd = 1; + if($canadd == 0) + array_push($dir_array, $file); + } + closedir($dh); + } + if(!is_array($dir_array)) + return; + return $dir_array; +} + +// Load and sort privs +$dir_array = get_priv_files("/etc/inc/priv"); +foreach ($dir_array as $file) + if (!is_dir("/etc/inc/priv/{$file}") && stristr($file,".inc")) + include("/etc/inc/priv/{$file}"); +if(is_dir("/usr/local/pkg/priv")) { + $dir_array = get_priv_files("/usr/local/pkg/priv"); + foreach ($dir_array as $file) + if (!is_dir("/usr/local/pkg/priv/{$file}") && stristr($file,".inc")) + include("/usr/local/pkg/priv/{$file}"); +} + +if(is_array($priv_list)) + sort_privs($priv_list); + +function cmp_privkeys($a, $b) { + /* user privs at the top */ + $auser = strncmp("user-", $a, 5); + $buser = strncmp("user-", $b, 5); + if($auser != $buser) + return $auser - $buser; + + /* name compare others */ + return strcasecmp($a, $b); +} + +function sort_privs(& $privs) { + uksort($privs, "cmp_privkeys"); +} + +function cmp_page_matches($page, & $matches, $fullwc = true) { + +// $dbg_matches = implode(",", $matches); +// log_error("debug: checking page {$page} match with {$dbg_matches}"); + + if (!is_array($matches)) + return false; + + /* skip any leading fwdslash */ + $test = strpos($page, "/"); + if ($test !== false && $test == 0) + $page = substr($page, 1); + + /* look for a match */ + foreach ($matches as $match) { + + /* possibly ignore full wildcard match */ + if (!$fullwc && !strcmp($match ,"*")) + continue; + + /* compare exact or wildcard match */ + $match = str_replace(array(".", "*","?"), array("\.", ".*","\?"), $match); + $result = preg_match("@^/{$match}$@", "/{$page}"); + + if ($result) + return true; + } + + return false; +} + +function map_page_privname($page) { + global $priv_list; + + foreach ($priv_list as $pname => $pdata) { + if (strncmp($pname, "page-", 5)) + continue; + $fullwc = false; + if (!strcasecmp($page,"any")||!strcmp($page,"*")) + $fullwc = true; + if (cmp_page_matches($page, $pdata['match'], $fullwc)) + return $pname; + } + + return false; +} + +function get_user_privdesc(& $user) { + global $priv_list; + + $privs = array(); + + $user_privs = $user['priv']; + if (!is_array($user_privs)) + $user_privs = array(); + + $names = local_user_get_groups($user, true); + + foreach ($names as $name) { + $group = getGroupEntry($name); + $group_privs = $group['priv']; + if (!is_array($group_privs)) + continue; + foreach ($group_privs as $pname) { + if (in_array($pname,$user_privs)) + continue; + if (!$priv_list[$pname]) + continue; + $priv = $priv_list[$pname]; + $priv['group'] = $group['name']; + $privs[] = $priv; + } + } + + foreach ($user_privs as $pname) + if($priv_list[$pname]) + $privs[] = $priv_list[$pname]; + + return $privs; +} + +function isAllowed($username, $page) { + global $_SESSION; + + if (!isset($username)) + return false; + + /* admin/root access check */ + $user = getUserEntry($username); + if (isset($user)) + if (isset($user['uid'])) + if ($user['uid']==0) + return true; + + /* user privelege access check */ + if (cmp_page_matches($page, $_SESSION['page-match'])) + return true; + + return false; +} + + +function isAllowedPage($page) { + global $_SESSION; + + + $username = $_SESSION['Username']; + + if (!isset($username)) + return false; + + /* admin/root access check */ + $user = getUserEntry($username); + if (isset($user)) + if (isset($user['uid'])) + if ($user['uid']==0) + return true; + + /* user privelege access check */ + return cmp_page_matches($page, $_SESSION['page-match']); +} + +function getPrivPages(& $entry, & $allowed_pages) { + global $priv_list; + + if (!is_array($entry['priv'])) + return; + + foreach ($entry['priv'] as $pname) { + if (strncmp($pname, "page-", 5)) + continue; + $priv = &$priv_list[$pname]; + if (!is_array($priv)) + continue; + $matches = &$priv['match']; + if (!is_array($matches)) + continue; + foreach ($matches as $match) + $allowed_pages[] = $match; + } +} + +function getAllowedPages($username) { + global $config, $_SESSION; + + if (!function_exists("ldap_connect")) + return; + + $allowed_pages = array(); + $allowed_groups = array(); + + $authcfg = auth_get_authserver($config['system']['webgui']['authmode']); + // obtain ldap groups if we are in ldap mode + if ($authcfg['type'] == "ldap") + $allowed_groups = @ldap_get_groups($username, $authcfg); + else { + // search for a local user by name + $local_user = getUserEntry($username); + getPrivPages($local_user, $allowed_pages); + + // obtain local groups if we have a local user + if ($local_user) + $allowed_groups = local_user_get_groups($local_user); + } + + // build a list of allowed pages + if (is_array($config['system']['group']) && is_array($allowed_groups)) + foreach ($config['system']['group'] as $group) + if (in_array($group['name'], $allowed_groups)) + getPrivPages($group, $allowed_pages); + +// $dbg_pages = implode(",", $allowed_pages); +// $dbg_groups = implode(",", $allowed_groups); +// log_error("debug: user {$username} groups = {$dbg_groups}"); +// log_error("debug: user {$username} pages = {$dbg_pages}"); + + $_SESSION['page-match'] = $allowed_pages; + + return $allowed_pages; +} + +function sort_user_privs($privs) { + // Privileges to place first, to redirect properly. + $priority_privs = array("page-dashboard-all", "page-system-login/logout"); + + $fprivs = array_intersect($privs, $priority_privs); + $sprivs = array_diff($privs, $priority_privs); + + return array_merge($fprivs, $sprivs); +} +?> \ No newline at end of file diff --git a/usr/etc/inc/priv/user.priv.inc b/usr/etc/inc/priv/user.priv.inc new file mode 100644 index 000000000..5cd56803c --- /dev/null +++ b/usr/etc/inc/priv/user.priv.inc @@ -0,0 +1,74 @@ + diff --git a/usr/etc/inc/r53.class b/usr/etc/inc/r53.class new file mode 100644 index 000000000..89faa26ba --- /dev/null +++ b/usr/etc/inc/r53.class @@ -0,0 +1,754 @@ +__accessKey; } + public function getSecretKey() { return $this->__secretKey; } + public function getHost() { return $this->__host; } + + protected $__verifyHost = 1; + protected $__verifyPeer = 1; + + // verifyHost and verifyPeer determine whether curl verifies ssl certificates. + // It may be necessary to disable these checks on certain systems. + // These only have an effect if SSL is enabled. + public function verifyHost() { return $this->__verifyHost; } + public function enableVerifyHost($enable = true) { $this->__verifyHost = $enable; } + + public function verifyPeer() { return $this->__verifyPeer; } + public function enableVerifyPeer($enable = true) { $this->__verifyPeer = $enable; } + + /** + * Constructor + * + * @param string $accessKey Access key + * @param string $secretKey Secret key + * @return void + */ + public function __construct($accessKey = null, $secretKey = null, $host = 'route53.amazonaws.com') { + if ($accessKey !== null && $secretKey !== null) { + $this->setAuth($accessKey, $secretKey); + } + $this->__host = $host; + } + + /** + * Set AWS access key and secret key + * + * @param string $accessKey Access key + * @param string $secretKey Secret key + * @return void + */ + public function setAuth($accessKey, $secretKey) { + $this->__accessKey = $accessKey; + $this->__secretKey = $secretKey; + } + + /** + * Lists the hosted zones on the account + * + * @param string marker A pagination marker returned by a previous truncated call + * @param int maxItems The maximum number of items per page. The service uses min($maxItems, 100). + * @return A list of hosted zones + */ + public function listHostedZones($marker = null, $maxItems = 100) { + $rest = new Route53Request($this, 'hostedzone', 'GET'); + + if($marker !== null) { + $rest->setParameter('marker', $marker); + } + if($maxItems !== 100) { + $rest->setParameter('maxitems', $maxItems); + } + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('listHostedZones', $rest->error); + return false; + } + + $response = array(); + if (!isset($rest->body)) + { + return $response; + } + + $zones = array(); + foreach($rest->body->HostedZones->HostedZone as $z) + { + $zones[] = $this->parseHostedZone($z); + } + $response['HostedZone'] = $zones; + + if(isset($rest->body->MaxItems)) { + $response['MaxItems'] = (string)$rest->body->MaxItems; + } + + if(isset($rest->body->IsTruncated)) { + $response['IsTruncated'] = (string)$rest->body->IsTruncated; + if($response['IsTruncated'] == 'true') { + $response['NextMarker'] = (string)$rest->body->NextMarker; + } + } + + return $response; + } + + /** + * Retrieves information on a specified hosted zone + * + * @param string zoneId The id of the hosted zone, as returned by CreateHostedZoneResponse or ListHostedZoneResponse + * In other words, if ListHostedZoneResponse shows the zone's Id as '/hostedzone/Z1PA6795UKMFR9', + * then that full value should be passed here, including the '/hostedzone/' prefix. + * @return A data structure containing information about the specified zone + */ + public function getHostedZone($zoneId) { + // we'll strip off the leading forward slash, so we can use it as the action directly. + $zoneId = trim($zoneId, '/'); + + $rest = new Route53Request($this, $zoneId, 'GET'); + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('getHostedZone', $rest->error); + return false; + } + + $response = array(); + if (!isset($rest->body)) + { + return $response; + } + + $response['HostedZone'] = $this->parseHostedZone($rest->body->HostedZone); + $response['NameServers'] = $this->parseDelegationSet($rest->body->DelegationSet); + + return $response; + } + + /** + * Creates a new hosted zone + * + * @param string name The name of the hosted zone (e.g. "example.com.") + * @param string reference A user-specified unique reference for this request + * @param string comment An optional user-specified comment to attach to the zone + * @return A data structure containing information about the newly created zone + */ + public function createHostedZone($name, $reference, $comment = '') { + // hosted zone names must end with a period, but people will forget this a lot... + if(strrpos($name, '.') != (strlen($name) - 1)) { + $name .= '.'; + } + + $data = "\n"; + $data .= '\n"; + $data .= ''.$name."\n"; + $data .= ''.$reference."\n"; + if(strlen($comment) > 0) { + $data .= "\n"; + $data .= ''.$comment."\n"; + $data .= "\n"; + } + $data .= "\n"; + + $rest = new Route53Request($this, 'hostedzone', 'POST', $data); + + $rest = $rest->getResponse(); + + if($rest->error === false && !in_array($rest->code, array(200, 201, 202, 204)) ) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('createHostedZone', $rest->error); + return false; + } + + $response = array(); + if (!isset($rest->body)) + { + return $response; + } + + $response['HostedZone'] = $this->parseHostedZone($rest->body->HostedZone); + $response['ChangeInfo'] = $this->parseChangeInfo($rest->body->ChangeInfo); + $response['NameServers'] = $this->parseDelegationSet($rest->body->DelegationSet); + + return $response; + } + + /** + * Retrieves information on a specified hosted zone + * + * @param string zoneId The id of the hosted zone, as returned by CreateHostedZoneResponse or ListHostedZoneResponse + * In other words, if ListHostedZoneResponse shows the zone's Id as '/hostedzone/Z1PA6795UKMFR9', + * then that full value should be passed here, including the '/hostedzone/' prefix. + * @return The change request data corresponding to this delete + */ + public function deleteHostedZone($zoneId) { + // we'll strip off the leading forward slash, so we can use it as the action directly. + $zoneId = trim($zoneId, '/'); + + $rest = new Route53Request($this, $zoneId, 'DELETE'); + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('deleteHostedZone', $rest->error); + return false; + } + + if (!isset($rest->body)) + { + return array(); + } + + return $this->parseChangeInfo($rest->body->ChangeInfo); + } + + /** + * Retrieves a list of resource record sets for a given zone + * + * @param string zoneId The id of the hosted zone, as returned by CreateHostedZoneResponse or ListHostedZoneResponse + * In other words, if ListHostedZoneResponse shows the zone's Id as '/hostedzone/Z1PA6795UKMFR9', + * then that full value should be passed here, including the '/hostedzone/' prefix. + * @param string type The type of resource record set to begin listing from. If this is specified, $name must also be specified. + * Must be one of: A, AAAA, CNAME, MX, NS, PTR, SOA, SPF, SRV, TXT + * @param string name The name at which to begin listing resource records (in the lexographic order of records). + * @param int maxItems The maximum number of results to return. The service uses min($maxItems, 100). + * @return The list of matching resource record sets + */ + public function listResourceRecordSets($zoneId, $type = '', $name = '', $maxItems = 100) { + // we'll strip off the leading forward slash, so we can use it as the action directly. + $zoneId = trim($zoneId, '/'); + + $rest = new Route53Request($this, $zoneId.'/rrset', 'GET'); + + if(strlen($type) > 0) { + $rest->setParameter('type', $type); + } + if(strlen($name) > 0) { + $rest->setParameter('name', $name); + } + if($maxItems != 100) { + $rest->setParameter('maxitems', $maxItems); + } + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('listResourceRecordSets', $rest->error); + return false; + } + + $response = array(); + if (!isset($rest->body)) + { + return $response; + } + + $recordSets = array(); + foreach($rest->body->ResourceRecordSets->ResourceRecordSet as $set) { + $recordSets[] = $this->parseResourceRecordSet($set); + } + + $response['ResourceRecordSets'] = $recordSets; + + if(isset($rest->body->MaxItems)) { + $response['MaxItems'] = (string)$rest->body->MaxItems; + } + + if(isset($rest->body->IsTruncated)) { + $response['IsTruncated'] = (string)$rest->body->IsTruncated; + if($response['IsTruncated'] == 'true') { + $response['NextRecordName'] = (string)$rest->body->NextRecordName; + $response['NextRecordType'] = (string)$rest->body->NextRecordType; + } + } + + return $response; + } + + /** + * Makes the specified resource record set changes (create or delete). + * + * @param string zoneId The id of the hosted zone, as returned by CreateHostedZoneResponse or ListHostedZoneResponse + * In other words, if ListHostedZoneResponse shows the zone's Id as '/hostedzone/Z1PA6795UKMFR9', + * then that full value should be passed here, including the '/hostedzone/' prefix. + * @param array changes An array of change objects, as they are returned by the prepareChange utility method. + * You may also pass a single change object. + * @param string comment An optional comment to attach to the change request + * @return The status of the change request + */ + public function changeResourceRecordSets($zoneId, $changes, $comment = '') { + // we'll strip off the leading forward slash, so we can use it as the action directly. + $zoneId = trim($zoneId, '/'); + + $data = "\n"; + $data .= '\n"; + $data .= "\n"; + + if(strlen($comment) > 0) { + $data .= ''.$comment."\n"; + } + + if(!is_array($changes)) { + $changes = array($changes); + } + + $data .= "\n"; + foreach($changes as $change) { + $data .= $change; + } + $data .= "\n"; + + $data .= "\n"; + $data .= "\n"; + + $rest = new Route53Request($this, $zoneId.'/rrset', 'POST', $data); + + $rest = $rest->getResponse(); + if($rest->error === false && !in_array($rest->code, array(200, 201, 202, 204))) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('changeResourceRecordSets', $rest->error); + return false; + } + + if (!isset($rest->body)) + { + return array(); + } + + return $this->parseChangeInfo($rest->body->ChangeInfo); + } + + /** + * Retrieves information on a specified change request + * + * @param string changeId The id of the change, as returned by CreateHostedZoneResponse or ChangeResourceRecordSets + * In other words, if CreateHostedZoneResponse showed the change's Id as '/change/C2682N5HXP0BZ4', + * then that full value should be passed here, including the '/change/' prefix. + * @return The status of the change request + */ + public function getChange($changeId) { + // we'll strip off the leading forward slash, so we can use it as the action directly. + $zoneId = trim($changeId, '/'); + + $rest = new Route53Request($this, $changeId, 'GET'); + + $rest = $rest->getResponse(); + if($rest->error === false && $rest->code !== 200) { + $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); + } + if($rest->error !== false) { + $this->__triggerError('getChange', $rest->error); + return false; + } + + if (!isset($rest->body)) + { + return array(); + } + + return $this->parseChangeInfo($rest->body->ChangeInfo); + } + + + + /** + * Utility function to parse a HostedZone tag structure + */ + private function parseHostedZone($tag) { + $zone = array(); + $zone['Id'] = (string)$tag->Id; + $zone['Name'] = (string)$tag->Name; + $zone['CallerReference'] = (string)$tag->CallerReference; + + // these might always be set, but check just in case, since + // their values are option on CreateHostedZone requests + if(isset($tag->Config) && isset($tag->Config->Comment)) { + $zone['Config'] = array('Comment' => (string)$tag->Config->Comment); + } + + return $zone; + } + + /** + * Utility function to parse a ChangeInfo tag structure + */ + private function parseChangeInfo($tag) { + $info = array(); + $info['Id'] = (string)$tag->Id; + $info['Status'] = (string)$tag->Status; + $info['SubmittedAt'] = (string)$tag->SubmittedAt; + return $info; + } + + /** + * Utility function to parse a DelegationSet tag structure + */ + private function parseDelegationSet($tag) { + $servers = array(); + foreach($tag->NameServers->NameServer as $ns) { + $servers[] = (string)$ns; + } + return $servers; + } + + /** + * Utility function to parse a ResourceRecordSet tag structure + */ + private function parseResourceRecordSet($tag) { + $rrs = array(); + $rrs['Name'] = (string)$tag->Name; + $rrs['Type'] = (string)$tag->Type; + $rrs['TTL'] = (string)$tag->TTL; + $rrs['ResourceRecords'] = array(); + foreach($tag->ResourceRecords->ResourceRecord as $rr) { + $rrs['ResourceRecords'][] = (string)$rr->Value; + } + return $rrs; + } + + /** + * Utility function to prepare a Change object for ChangeResourceRecordSets requests. + * All fields are required. + * + * @param string action The action to perform. One of: CREATE, DELETE + * @param string name The name to perform the action on. + * If it does not end with '.', then AWS treats the name as relative to the zone root. + * @param string type The type of record being modified. + * Must be one of: A, AAAA, CNAME, MX, NS, PTR, SOA, SPF, SRV, TXT + * @param int ttl The time-to-live value for this record, in seconds. + * @param array records An array of resource records to attach to this change. + * Each member of this array can either be a string, or an array of strings. + * Passing an array of strings will attach multiple values to a single resource record. + * If a single string is passed as $records instead of an array, + * it will be treated as a single-member array. + * @return object An opaque object containing the change request. + * Do not write code that depends on the contents of this object, as it may change at any time. + */ + public function prepareChange($action, $name, $type, $ttl, $records) { + $change = "\n"; + $change .= ''.$action."\n"; + $change .= "\n"; + $change .= ''.$name."\n"; + $change .= ''.$type."\n"; + $change .= ''.$ttl."\n"; + $change .= "\n"; + + if(!is_array($records)) { + $records = array($records); + } + + foreach($records as $record) { + $change .= "\n"; + if(is_array($record)) { + foreach($record as $value) { + $change .= ''.$value."\n"; + } + } + else { + $change .= ''.$record."\n"; + } + $change .= "\n"; + } + + $change .= "\n"; + $change .= "\n"; + $change .= "\n"; + + return $change; + } + + /** + * Trigger an error message + * + * @internal Used by member functions to output errors + * @param array $error Array containing error information + * @return string + */ + public function __triggerError($functionname, $error) + { + if($error == false) { + trigger_error(sprintf("Route53::%s(): Encountered an error, but no description given", $functionname), E_USER_WARNING); + } + else if(isset($error['curl']) && $error['curl']) + { + trigger_error(sprintf("Route53::%s(): %s %s", $functionname, $error['code'], $error['message']), E_USER_WARNING); + } + else if(isset($error['Error'])) + { + $e = $error['Error']; + $message = sprintf("Route53::%s(): %s - %s: %s\nRequest Id: %s\n", $functionname, $e['Type'], $e['Code'], $e['Message'], $error['RequestId']); + trigger_error($message, E_USER_WARNING); + } + } + + /** + * Callback handler for 503 retries. + * + * @internal Used by SimpleDBRequest to call the user-specified callback, if set + * @param $attempt The number of failed attempts so far + * @return The retry delay in microseconds, or 0 to stop retrying. + */ + public function __executeServiceTemporarilyUnavailableRetryDelay($attempt) + { + if(is_callable($this->__serviceUnavailableRetryDelayCallback)) { + $callback = $this->__serviceUnavailableRetryDelayCallback; + return $callback($attempt); + } + return 0; + } +} + +final class Route53Request +{ + private $r53, $action, $verb, $data, $parameters = array(); + public $response; + + /** + * Constructor + * + * @param string $r53 The Route53 object making this request + * @param string $action SimpleDB action + * @param string $verb HTTP verb + * @param string $data For POST requests, the data being posted (optional) + * @return mixed + */ + function __construct($r53, $action, $verb, $data = '') { + $this->r53 = $r53; + $this->action = $action; + $this->verb = $verb; + $this->data = $data; + $this->response = new STDClass; + $this->response->error = false; + } + + /** + * Set request parameter + * + * @param string $key Key + * @param string $value Value + * @param boolean $replace Whether to replace the key if it already exists (default true) + * @return void + */ + public function setParameter($key, $value, $replace = true) { + if(!$replace && isset($this->parameters[$key])) + { + $temp = (array)($this->parameters[$key]); + $temp[] = $value; + $this->parameters[$key] = $temp; + } + else + { + $this->parameters[$key] = $value; + } + } + + /** + * Get the response + * + * @return object | false + */ + public function getResponse() { + + $params = array(); + foreach ($this->parameters as $var => $value) + { + if(is_array($value)) + { + foreach($value as $v) + { + $params[] = $var.'='.$this->__customUrlEncode($v); + } + } + else + { + $params[] = $var.'='.$this->__customUrlEncode($value); + } + } + + sort($params, SORT_STRING); + + $query = implode('&', $params); + + // must be in format 'Sun, 06 Nov 1994 08:49:37 GMT' + $date = gmdate('D, d M Y H:i:s e'); + + $headers = array(); + $headers[] = 'Date: '.$date; + $headers[] = 'Host: '.$this->r53->getHost(); + + $auth = 'AWS3-HTTPS AWSAccessKeyId='.$this->r53->getAccessKey(); + $auth .= ',Algorithm=HmacSHA256,Signature='.$this->__getSignature($date); + $headers[] = 'X-Amzn-Authorization: '.$auth; + + $url = 'https://'.$this->r53->getHost().'/'.Route53::API_VERSION.'/'.$this->action.'?'.$query; + + // Basic setup + $curl = curl_init(); + curl_setopt($curl, CURLOPT_USERAGENT, 'Route53/php'); + + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, ($this->r53->verifyHost() ? 1 : 0)); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, ($this->r53->verifyPeer() ? 1 : 0)); + + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, false); + curl_setopt($curl, CURLOPT_WRITEFUNCTION, array(&$this, '__responseWriteCallback')); + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + + // Request types + switch ($this->verb) { + case 'GET': break; + case 'POST': + curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->verb); + if(strlen($this->data) > 0) { + curl_setopt($curl, CURLOPT_POSTFIELDS, $this->data); + $headers[] = 'Content-Type: text/plain'; + $headers[] = 'Content-Length: '.strlen($this->data); + } + break; + case 'DELETE': + curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); + break; + default: break; + } + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + curl_setopt($curl, CURLOPT_HEADER, false); + + // Execute, grab errors + if (curl_exec($curl)) { + $this->response->code = curl_getinfo($curl, CURLINFO_HTTP_CODE); + } else { + $this->response->error = array( + 'curl' => true, + 'code' => curl_errno($curl), + 'message' => curl_error($curl), + 'resource' => $this->resource + ); + } + + @curl_close($curl); + + // Parse body into XML + if ($this->response->error === false && isset($this->response->body)) { + $this->response->body = simplexml_load_string($this->response->body); + + // Grab Route53 errors + if (!in_array($this->response->code, array(200, 201, 202, 204)) + && isset($this->response->body->Error)) { + $error = $this->response->body->Error; + $output = array(); + $output['curl'] = false; + $output['Error'] = array(); + $output['Error']['Type'] = (string)$error->Type; + $output['Error']['Code'] = (string)$error->Code; + $output['Error']['Message'] = (string)$error->Message; + $output['RequestId'] = (string)$this->response->body->RequestId; + + $this->response->error = $output; + unset($this->response->body); + } + } + + return $this->response; + } + + /** + * CURL write callback + * + * @param resource &$curl CURL resource + * @param string &$data Data + * @return integer + */ + private function __responseWriteCallback(&$curl, &$data) { + $this->response->body .= $data; + return strlen($data); + } + + /** + * Contributed by afx114 + * URL encode the parameters as per http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?Query_QueryAuth.html + * PHP's rawurlencode() follows RFC 1738, not RFC 3986 as required by Amazon. The only difference is the tilde (~), so convert it back after rawurlencode + * See: http://www.morganney.com/blog/API/AWS-Product-Advertising-API-Requires-a-Signed-Request.php + * + * @param string $var String to encode + * @return string + */ + private function __customUrlEncode($var) { + return str_replace('%7E', '~', rawurlencode($var)); + } + + /** + * Generate the auth string using Hmac-SHA256 + * + * @internal Used by SimpleDBRequest::getResponse() + * @param string $string String to sign + * @return string + */ + private function __getSignature($string) { + return base64_encode(hash_hmac('sha256', $string, $this->r53->getSecretKey(), true)); + } +} diff --git a/usr/etc/inc/radius.inc b/usr/etc/inc/radius.inc new file mode 100644 index 000000000..36b304a96 --- /dev/null +++ b/usr/etc/inc/radius.inc @@ -0,0 +1,1208 @@ + + 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. + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. + + This code cannot simply be copied and put under the GNU Public License or + any other GPL-like (LGPL, GPL2) License. + + This version of RADIUS.php has been modified by + Jonathan De Graeve to integrate with M0n0wall + + Changes made include: + * StandardAttributes for M0n0wall use + * Removed internal Session-Id creation + * Adding of ReplyMessage to getAttributes() + * Adding of listAttributes() + * Adding of VENDOR Bay Networks (Nortel) + * Adding of VENDOR Nomadix + * Adding of VENDOR WISPr (Wi-Fi Alliance) + * Adding of VENDOR ChilliSpot (bandwidth-attributes only) + +*/ + +/* + pfSense_MODULE: auth +*/ + +require_once("PEAR.inc"); +require_once("radius_authentication.inc"); +require_once("radius_accounting.inc"); + +/** +* Client implementation of RADIUS. This are wrapper classes for +* the RADIUS PECL +* Provides RADIUS Authentication (RFC2865) and RADIUS Accounting (RFC2866). +* +* @package Auth_RADIUS +* @author Michael Bretterklieber +* @access public +* @version $Revision: 1.5 $ +*/ + +PEAR::loadExtension('radius'); + +/** + * class Auth_RADIUS + * + * Abstract base class for RADIUS + * + * @package Auth_RADIUS + */ +class Auth_RADIUS extends PEAR { + + /** + * List of RADIUS servers. + * @var array + * @see addServer(), putServer() + */ + var $_servers = array(); + + /** + * Path to the configuration-file. + * @var string + * @see setConfigFile() + */ + var $_configfile = null; + + /** + * Resource. + * @var resource + * @see open(), close() + */ + var $res = null; + + /** + * Username for authentication and accounting requests. + * @var string + */ + var $username = null; + + /** + * Password for plaintext-authentication (PAP). + * @var string + */ + var $password = null; + + /** + * List of known attributes. + * @var array + * @see dumpAttributes(), getAttributes() + */ + var $attributes = array(); + + /** + * List of raw attributes. + * @var array + * @see dumpAttributes(), getAttributes() + */ + var $rawAttributes = array(); + + /** + * List of raw vendor specific attributes. + * @var array + * @see dumpAttributes(), getAttributes() + */ + var $rawVendorAttributes = array(); + + /** + * Constructor + * + * Loads the RADIUS PECL/extension + * + * @return void + */ + function Auth_RADIUS() + { + $this->PEAR(); + } + + /** + * Adds a RADIUS server to the list of servers for requests. + * + * At most 10 servers may be specified. When multiple servers + * are given, they are tried in round-robin fashion until a + * valid response is received + * + * @access public + * @param string $servername Servername or IP-Address + * @param integer $port Portnumber + * @param string $sharedSecret Shared secret + * @param integer $timeout Timeout for each request + * @param integer $maxtries Max. retries for each request + * @return void + */ + function addServer($servername = 'localhost', $port = 0, $sharedSecret = 'testing123', $timeout = 3, $maxtries = 2) + { + $this->_servers[] = array($servername, $port, $sharedSecret, $timeout, $maxtries); + } + + /** + * Returns an error message, if an error occurred. + * + * @access public + * @return string + */ + function getError() + { + return radius_strerror($this->res); + } + + /** + * Sets the configuration-file. + * + * @access public + * @param string $file Path to the configuration file + * @return void + */ + function setConfigfile($file) + { + $this->_configfile = $file; + } + + /** + * Puts an attribute. + * + * @access public + * @param integer $attrib Attribute-number + * @param mixed $port Attribute-value + * @param type $type Attribute-type + * @return bool true on success, false on error + */ + function putAttribute($attrib, $value, $type = null) + { + if ($type == null) { + $type = gettype($value); + } + + switch ($type) { + case 'integer': + // Fix a conversion error so we should be able to handle 4GB values + return radius_put_int($this->res, $attrib, (float)$value); + + case 'addr': + return radius_put_addr($this->res, $attrib, $value); + + case 'string': + default: + return radius_put_attr($this->res, $attrib, $value); + } + + } + + /** + * Puts a vendor-specific attribute. + * + * @access public + * @param integer $vendor Vendor (MSoft, Cisco, ...) + * @param integer $attrib Attribute-number + * @param mixed $port Attribute-value + * @param type $type Attribute-type + * @return bool true on success, false on error + */ + function putVendorAttribute($vendor, $attrib, $value, $type = null) + { + + if ($type == null) { + $type = gettype($value); + } + + switch ($type) { + case 'integer': + return radius_put_vendor_int($this->res, $vendor, $attrib, $value); + + case 'addr': + return radius_put_vendor_addr($this->res, $vendor,$attrib, $value); + + case 'string': + default: + return radius_put_vendor_attr($this->res, $vendor, $attrib, $value); + } + + } + + /** + * Prints known attributes received from the server. + * + * @access public + */ + function dumpAttributes() + { + foreach ($this->attributes as $name => $data) { + echo "$name:$data
    \n"; + } + } + + /** + * Return our know attributes array received from the server. + * + * @access public + */ + function listAttributes() + { + return $this->attributes; + } + + /** + * Overwrite this. + * + * @access public + */ + function open() + { + } + + /** + * Overwrite this. + * + * @access public + */ + function createRequest() + { + } + + /** + * Puts standard attributes. + * + * These attributes will always be present in a radius request + * + * @access public + */ + function putStandardAttributes() + { + global $config, $cpzone; + + if (!function_exists("getNasIp")) { + $ipaddr = "0.0.0.0"; + } else { + $ipaddr = getNasIP(); + } + // Add support for sending NAS-IP-Address, set this explicitly as an ip_addr + $this->putAttribute(RADIUS_NAS_IP_ADDRESS, $ipaddr, "addr"); + + // Add support for sending NAS-Identifier + if (empty($config["captiveportal"][$cpzone]["radiusnasid"])) { + $nasId = php_uname("n"); + } else { + $nasId = $config["captiveportal"][$cpzone]["radiusnasid"]; + } + $this->putAttribute(RADIUS_NAS_IDENTIFIER, $nasId); + } + + /** + * Puts custom attributes. + * + * @access public + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + } + + /** + * Configures the radius library. + * + * @access public + * @param string $servername Servername or IP-Address + * @param integer $port Portnumber + * @param string $sharedSecret Shared secret + * @param integer $timeout Timeout for each request + * @param integer $maxtries Max. retries for each request + * @return bool true on success, false on error + * @see addServer() + */ + function putServer($servername, $port = 0, $sharedsecret = 'testing123', $timeout = 3, $maxtries = 3) + { + if (!radius_add_server($this->res, $servername, $port, $sharedsecret, $timeout, $maxtries)) { + return false; + } + return true; + } + + /** + * Configures the radius library via external configurationfile + * + * @access public + * @param string $servername Servername or IP-Address + * @return bool true on success, false on error + */ + function putConfigfile($file) + { + if (!radius_config($this->res, $file)) { + return false; + } + return true; + } + + /** + * Initiates a RADIUS request. + * + * @access public + * @return bool true on success, false on errors + */ + function start() + { + if (!$this->open()) { + return false; + } + + foreach ($this->_servers as $s) { + // Servername, port, sharedsecret, timeout, retries + if (!$this->putServer($s[0], $s[1], $s[2], $s[3], $s[4])) { + return false; + } + } + + if (!empty($this->_configfile)) { + if (!$this->putConfigfile($this->_configfile)) { + return false; + } + } + + $this->createRequest(); + $this->putStandardAttributes(); + $this->putAuthAttributes(); + return true; + } + + /** + * Sends a prepared RADIUS request and waits for a response + * + * @access public + * @return mixed true on success, false on reject, PEAR_Error on error + */ + function send() + { + $req = radius_send_request($this->res); + if (!$req) { + return $this->raiseError(gettext('Error sending request:') . ' ' . $this->getError()); + } + + switch($req) { + case RADIUS_ACCESS_ACCEPT: + if (is_subclass_of($this, 'auth_radius_acct')) { + return $this->raiseError(gettext('RADIUS_ACCESS_ACCEPT is unexpected for accounting')); + } + return true; + + case RADIUS_ACCESS_REJECT: + return false; + + case RADIUS_ACCOUNTING_RESPONSE: + if (is_subclass_of($this, 'auth_radius_pap')) { + return $this->raiseError(gettext('RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication')); + } + return true; + + default: + return $this->raiseError(sprintf(gettext("Unexpected return value: %s"),$req)); + } + + } + + /** + * Reads all received attributes after sending the request. + * + * This methos stores know attributes in the property attributes, + * all attributes (including known attibutes) are stored in rawAttributes + * or rawVendorAttributes. + * NOTE: call this functio also even if the request was rejected, because the + * Server returns usualy an errormessage + * + * @access public + * @return bool true on success, false on error + */ + function getAttributes() + { + + while ($attrib = radius_get_attr($this->res)) { + + if (!is_array($attrib)) { + return false; + } + + $attr = $attrib['attr']; + $data = $attrib['data']; + + $this->rawAttributes[$attr] = $data; + + switch ($attr) { + case RADIUS_FRAMED_IP_ADDRESS: + $this->attributes['framed_ip'] = radius_cvt_addr($data); + break; + + case RADIUS_FRAMED_IP_NETMASK: + $this->attributes['framed_mask'] = radius_cvt_addr($data); + break; + + case RADIUS_FRAMED_MTU: + $this->attributes['framed_mtu'] = radius_cvt_int($data); + break; + + case RADIUS_FRAMED_COMPRESSION: + $this->attributes['framed_compression'] = radius_cvt_int($data); + break; + + case RADIUS_SESSION_TIMEOUT: + $this->attributes['session_timeout'] = radius_cvt_int($data); + break; + + case RADIUS_IDLE_TIMEOUT: + $this->attributes['idle_timeout'] = radius_cvt_int($data); + break; + + case RADIUS_SERVICE_TYPE: + $this->attributes['service_type'] = radius_cvt_int($data); + break; + + case RADIUS_CLASS: + $this->attributes['class'] = radius_cvt_int($data); + break; + + case RADIUS_FRAMED_PROTOCOL: + $this->attributes['framed_protocol'] = radius_cvt_int($data); + break; + + case RADIUS_FRAMED_ROUTING: + $this->attributes['framed_routing'] = radius_cvt_int($data); + break; + + case RADIUS_FILTER_ID: + $this->attributes['filter_id'] = radius_cvt_string($data); + break; + + case RADIUS_REPLY_MESSAGE: + $this->attributes['reply_message'] = radius_cvt_string($data); + break; + + case RADIUS_VENDOR_SPECIFIC: + $attribv = radius_get_vendor_attr($data); + if (!is_array($attribv)) { + return false; + } + + $vendor = $attribv['vendor']; + $attrv = $attribv['attr']; + $datav = $attribv['data']; + + $this->rawVendorAttributes[$vendor][$attrv] = $datav; + + if ($vendor == RADIUS_VENDOR_MICROSOFT) { + + switch ($attrv) { + case RADIUS_MICROSOFT_MS_CHAP2_SUCCESS: + $this->attributes['ms_chap2_success'] = radius_cvt_string($datav); + break; + + case RADIUS_MICROSOFT_MS_CHAP_ERROR: + $this->attributes['ms_chap_error'] = radius_cvt_string(substr($datav,1)); + break; + + case RADIUS_MICROSOFT_MS_CHAP_DOMAIN: + $this->attributes['ms_chap_domain'] = radius_cvt_string($datav); + break; + + case RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_POLICY: + $this->attributes['ms_mppe_encryption_policy'] = radius_cvt_int($datav); + break; + + case RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_TYPES: + $this->attributes['ms_mppe_encryption_types'] = radius_cvt_int($datav); + break; + + case RADIUS_MICROSOFT_MS_CHAP_MPPE_KEYS: + $demangled = radius_demangle($this->res, $datav); + $this->attributes['ms_chap_mppe_lm_key'] = substr($demangled, 0, 8); + $this->attributes['ms_chap_mppe_nt_key'] = substr($demangled, 8, RADIUS_MPPE_KEY_LEN); + break; + + case RADIUS_MICROSOFT_MS_MPPE_SEND_KEY: + $this->attributes['ms_chap_mppe_send_key'] = radius_demangle_mppe_key($this->res, $datav); + break; + + case RADIUS_MICROSOFT_MS_MPPE_RECV_KEY: + $this->attributes['ms_chap_mppe_recv_key'] = radius_demangle_mppe_key($this->res, $datav); + break; + + case RADIUS_MICROSOFT_MS_PRIMARY_DNS_SERVER: + $this->attributes['ms_primary_dns_server'] = radius_cvt_string($datav); + break; + } + } + + elseif ($vendor == 1584) { + + switch ($attrv) { + case 102: + $this->attributes['ces_group'] = radius_cvt_string($datav); + break; + } + } + + elseif ($vendor == 3309) { /* RADIUS_VENDOR_NOMADIX */ + + switch ($attrv) { + case 1: /* RADIUS_NOMADIX_BW_UP */ + $this->attributes['bw_up'] = radius_cvt_int($datav); + break; + case 2: /* RADIUS_NOMADIX_BW_DOWN */ + $this->attributes['bw_down'] = radius_cvt_int($datav); + break; + case 3: /* RADIUS_NOMADIX_URL_REDIRECTION */ + $this->attributes['url_redirection'] = radius_cvt_string($datav); + break; + case 5: /* RADIUS_NOMADIX_EXPIRATION */ + $this->attributes['expiration'] = radius_cvt_string($datav); + break; + case 7: /* RADIUS_NOMADIX_MAXBYTESUP */ + $this->attributes['maxbytesup'] = radius_cvt_int($datav); + break; + case 8: /* RADIUS_NOMADIX_MAXBYTESDOWN */ + $this->attributes['maxbytesdown'] = radius_cvt_int($datav); + break; + case 10: /* RADIUS_NOMADIX_LOGOFF_URL */ + $this->attributes['url_logoff'] = radius_cvt_string($datav); + break; + } + } + + elseif ($vendor == 14122) { /* RADIUS_VENDOR_WISPr Wi-Fi Alliance */ + + switch ($attrv) { + case 1: /* WISPr-Location-ID */ + $this->attributes['location_id'] = radius_cvt_string($datav); + break; + case 2: /* WISPr-Location-Name */ + $this->attributes['location_name'] = radius_cvt_string($datav); + break; + case 3: /* WISPr-Logoff-URL */ + $this->attributes['url_logoff'] = radius_cvt_string($datav); + break; + case 4: /* WISPr-Redirection-URL */ + $this->attributes['url_redirection'] = radius_cvt_string($datav); + break; + case 5: /* WISPr-Bandwidth-Min-Up */ + $this->attributes['bw_up_min'] = radius_cvt_int($datav); + break; + case 6: /* WISPr-Bandwidth-Min-Down */ + $this->attributes['bw_down_min'] = radius_cvt_int($datav); + break; + case 7: /* WISPr-Bandwidth-Max-Up */ + $this->attributes['bw_up'] = radius_cvt_int($datav); + break; + case 8: /* WISPr-Bandwidth-Max-Down */ + $this->attributes['bw_down'] = radius_cvt_int($datav); + break; + case 9: /* WISPr-Session-Terminate-Time */ + $this->attributes['session_terminate_time'] = radius_cvt_string($datav); + break; + case 10: /* WISPr-Session-Terminate-End-Of-Day */ + $this->attributes['session_terminate_endofday'] = radius_cvt_int($datav); + break; + case 11: /* WISPr-Billing-Class-Of-Service */ + $this->attributes['billing_class_of_service'] = radius_cvt_string($datav); + break; + } + } + + elseif ($vendor == 14559) { /* RADIUS_VENDOR_ChilliSpot */ + switch ($attrv) { + case 4: /* ChilliSpot-Bandwidth-Max-Up */ + $this->attributes['bw_up'] = radius_cvt_int($datav); + break; + case 5: /* ChilliSpot-Bandwidth-Max-Down */ + $this->attributes['bw_down'] = radius_cvt_int($datav); + break; + } + } + + elseif ($vendor == 9) { /* RADIUS_VENDOR_CISCO */ + switch ($attrv) { + case 1: /* Cisco-AVPair */ + if (!is_array($this->attributes['ciscoavpair'])) + $this->attributes['ciscoavpair'] = array(); + $this->attributes['ciscoavpair'][] = radius_cvt_string($datav); + break; + } + } + + elseif ($vendor == 8744) { /* Colubris / HP MSM wireless */ + //documented at http://bizsupport1.austin.hp.com/bc/docs/support/SupportManual/c02704528/c02704528.pdf pg 15-67 + if ($attrv == 0) { /* Colubris AV-Pair */ + $datav = explode('=', $datav); + switch ($datav[0]) { + case 'max-input-rate': + // "Controls the data rate [kbps] at which traffic can be transferred from the user to the [router]." + $this->attributes['bw_up'] = radius_cvt_int($datav[1]); + break; + case 'max-output-rate': + //"Controls the data rate [kbps] at which traffic can be transferred from the [router] to the user." + $this->attributes['bw_down'] = radius_cvt_int($datav[1]); + break; + case 'max-input-octets': + $this->attributes['maxbytesup'] = radius_cvt_int($datav[1]); + break; + case 'max-output-octets': + $this->attributes['maxbytesdown'] = radius_cvt_int($datav[1]); + break; + case 'welcome-url': + $this->attributes['url_redirection'] = radius_cvt_string($datav[1]); + break; + case 'goodbye-url': + $this->attributes['url_logoff'] = radius_cvt_string($datav[1]); + break; + } + } + } + + break; + + case 85: /* Acct-Interim-Interval: RFC 2869 */ + $this->attributes['interim_interval'] = radius_cvt_int($data); + break; + } + } + + return true; + } + + /** + * Frees resources. + * + * Calling this method is always a good idea, because all security relevant + * attributes are filled with Nullbytes to leave nothing in the mem. + * + * @access public + */ + function close() + { + if ($this->res != null) { + radius_close($this->res); + $this->res = null; + } + $this->username = str_repeat("\0", strlen($this->username)); + $this->password = str_repeat("\0", strlen($this->password)); + } + +} + +/** + * class Auth_RADIUS_PAP + * + * Class for authenticating using PAP (Plaintext) + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_PAP extends Auth_RADIUS +{ + + /** + * Constructor + * + * @param string $username Username + * @param string $password Password + * @return void + */ + function Auth_RADIUS_PAP($username = null, $password = null) + { + $this->Auth_RADIUS(); + $this->username = $username; + $this->password = $password; + } + + /** + * Creates a RADIUS resource + * + * Creates a RADIUS resource for authentication. This should be the first + * call before you make any other things with the library. + * + * @return bool true on success, false on error + */ + function open() + { + $this->res = radius_auth_open(); + if (!$this->res) { + return false; + } + return true; + } + + /** + * Creates an authentication request + * + * Creates an authentication request. + * You MUST call this method before you can put any attribute + * + * @return bool true on success, false on error + */ + function createRequest() + { + if (!radius_create_request($this->res, RADIUS_ACCESS_REQUEST)) { + return false; + } + return true; + } + + /** + * Put authentication specific attributes + * + * @return void + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + if (isset($this->password)) { + $this->putAttribute(RADIUS_USER_PASSWORD, $this->password); + } + } + +} + +/** + * class Auth_RADIUS_CHAP_MD5 + * + * Class for authenticating using CHAP-MD5 see RFC1994. + * Instead og the plaintext password the challenge and + * the response are needed. + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_CHAP_MD5 extends Auth_RADIUS_PAP +{ + /** + * 8 Bytes binary challenge + * @var string + */ + var $challenge = null; + + /** + * 16 Bytes MD5 response binary + * @var string + */ + var $response = null; + + /** + * Id of the authentication request. Should incremented after every request. + * @var integer + */ + var $chapid = 1; + + /** + * Constructor + * + * @param string $username Username + * @param string $challenge 8 Bytes Challenge (binary) + * @param integer $chapid Requestnumber + * @return void + */ + function Auth_RADIUS_CHAP_MD5($username = null, $challenge = null, $chapid = 1) + { + $this->Auth_RADIUS_PAP(); + $this->username = $username; + $this->challenge = $challenge; + $this->chapid = $chapid; + } + + /** + * Put CHAP-MD5 specific attributes + * + * For authenticating using CHAP-MD5 via RADIUS you have to put the challenge + * and the response. The chapid is inserted in the first byte of the response. + * + * @return void + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + if (isset($this->response)) { + $response = pack('C', $this->chapid) . $this->response; + $this->putAttribute(RADIUS_CHAP_PASSWORD, $response); + } + if (isset($this->challenge)) { + $this->putAttribute(RADIUS_CHAP_CHALLENGE, $this->challenge); + } + } + + /** + * Frees resources. + * + * Calling this method is always a good idea, because all security relevant + * attributes are filled with Nullbytes to leave nothing in the mem. + * + * @access public + */ + function close() + { + Auth_RADIUS_PAP::close(); + $this->challenge = str_repeat("\0", strlen($this->challenge)); + $this->response = str_repeat("\0", strlen($this->response)); + } + +} + +/** + * class Auth_RADIUS_MSCHAPv1 + * + * Class for authenticating using MS-CHAPv1 see RFC2433 + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_MSCHAPv1 extends Auth_RADIUS_CHAP_MD5 +{ + /** + * LAN-Manager-Response + * @var string + */ + var $lmResponse = null; + + /** + * Wether using deprecated LM-Responses or not. + * 0 = use LM-Response, 1 = use NT-Response + * @var bool + */ + var $flags = 1; + + /** + * Put MS-CHAPv1 specific attributes + * + * For authenticating using MS-CHAPv1 via RADIUS you have to put the challenge + * and the response. The response has this structure: + * struct rad_mschapvalue { + * u_char ident; + * u_char flags; + * u_char lm_response[24]; + * u_char response[24]; + * }; + * + * @return void + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + if (isset($this->response) || isset($this->lmResponse)) { + $lmResp = isset($this->lmResponse) ? $this->lmResponse : str_repeat ("\0", 24); + $ntResp = isset($this->response) ? $this->response : str_repeat ("\0", 24); + $resp = pack('CC', $this->chapid, $this->flags) . $lmResp . $ntResp; + $this->putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP_RESPONSE, $resp); + } + if (isset($this->challenge)) { + $this->putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP_CHALLENGE, $this->challenge); + } + } +} + +/** + * class Auth_RADIUS_MSCHAPv2 + * + * Class for authenticating using MS-CHAPv2 see RFC2759 + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_MSCHAPv2 extends Auth_RADIUS_MSCHAPv1 +{ + /** + * 16 Bytes binary challenge + * @var string + */ + var $challenge = null; + + /** + * 16 Bytes binary Peer Challenge + * @var string + */ + var $peerChallenge = null; + + /** + * Put MS-CHAPv2 specific attributes + * + * For authenticating using MS-CHAPv1 via RADIUS you have to put the challenge + * and the response. The response has this structure: + * struct rad_mschapv2value { + * u_char ident; + * u_char flags; + * u_char pchallenge[16]; + * u_char reserved[8]; + * u_char response[24]; + * }; + * where pchallenge is the peer challenge. Like for MS-CHAPv1 we set the flags field to 1. + * @return void + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + if (isset($this->response) && isset($this->peerChallenge)) { + // Response: chapid, flags (1 = use NT Response), Peer challenge, reserved, Response + $resp = pack('CCa16a8a24',$this->chapid , 1, $this->peerChallenge, str_repeat("\0", 8), $this->response); + $this->putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP2_RESPONSE, $resp); + } + if (isset($this->challenge)) { + $this->putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP_CHALLENGE, $this->challenge); + } + } + + /** + * Frees resources. + * + * Calling this method is always a good idea, because all security relevant + * attributes are filled with Nullbytes to leave nothing in the mem. + * + * @access public + */ + function close() + { + Auth_RADIUS_MSCHAPv1::close(); + $this->peerChallenge = str_repeat("\0", strlen($this->peerChallenge)); + } +} + +/** + * class Auth_RADIUS_Acct + * + * Class for RADIUS accounting + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct extends Auth_RADIUS +{ + /** + * Defines where the Authentication was made, possible values are: + * RADIUS_AUTH_RADIUS, RADIUS_AUTH_LOCAL, RADIUS_AUTH_REMOTE + * @var integer + */ + var $authentic = null; + + /** + * Defines the type of the accounting request, on of: + * RADIUS_START, RADIUS_STOP, RADIUS_ACCOUNTING_ON, RADIUS_ACCOUNTING_OFF + * @var integer + */ + var $status_type = null; + + /** + * The time the user was logged in in seconds + * @var integer + */ + var $session_time = null; + + /** + * A uniq identifier for the session of the user, maybe the PHP-Session-Id + * @var string + */ + var $session_id = null; + + /** + * Constructor + * + * This function is disabled for M0n0wall since we use our own session_id + * + * Generates a predefined session_id. We use the Remote-Address, the PID, and the Current user. + * @return void + * + function Auth_RADIUS_Acct() + { + $this->Auth_RADIUS(); + + if (isset($_SERVER)) { + $var = &$_SERVER; + } else { + $var = &$GLOBALS['HTTP_SERVER_VARS']; + } + + $this->session_id = sprintf("%s:%d-%s", isset($var['REMOTE_ADDR']) ? $var['REMOTE_ADDR'] : '127.0.0.1' , getmypid(), get_current_user()); + } + */ + + /** + * Constructor + * + */ + + function Auth_RADIUS_Acct() + { + $this->Auth_RADIUS(); + } + + /** + * Creates a RADIUS resource + * + * Creates a RADIUS resource for accounting. This should be the first + * call before you make any other things with the library. + * + * @return bool true on success, false on error + */ + function open() + { + $this->res = radius_acct_open(); + if (!$this->res) { + return false; + } + return true; + } + + /** + * Creates an accounting request + * + * Creates an accounting request. + * You MUST call this method before you can put any attribute. + * + * @return bool true on success, false on error + */ + function createRequest() + { + if (!radius_create_request($this->res, RADIUS_ACCOUNTING_REQUEST)) { + return false; + } + return true; + } + + /** + * Put attributes for accounting. + * + * Here we put some accounting values. There many more attributes for accounting, + * but for web-applications only certain attributes make sense. + * @return void + */ + function putAuthAttributes() + { + if (isset($this->username)) { + $this->putAttribute(RADIUS_USER_NAME, $this->username); + } + $this->putAttribute(RADIUS_ACCT_STATUS_TYPE, $this->status_type); + //if (isset($this->session_time) && $this->status_type == RADIUS_STOP) { + if (isset($this->session_time)) { + $this->putAttribute(RADIUS_ACCT_SESSION_TIME, $this->session_time); + } + if (isset($this->authentic)) { + $this->putAttribute(RADIUS_ACCT_AUTHENTIC, $this->authentic); + } + + $this->putStandardAttributes(); + } + +} + +/** + * class Auth_RADIUS_Acct_Start + * + * Class for RADIUS accounting. Its usualy used, after the user has logged in. + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct_Start extends Auth_RADIUS_Acct +{ + /** + * Defines the type of the accounting request. + * It is set to RADIUS_START by default in this class. + * @var integer + */ + var $status_type = RADIUS_START; +} + +/** + * class Auth_RADIUS_Acct_Start + * + * Class for RADIUS accounting. Its usualy used, after the user has logged out. + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct_Stop extends Auth_RADIUS_Acct +{ + /** + * Defines the type of the accounting request. + * It is set to RADIUS_STOP by default in this class. + * @var integer + */ + var $status_type = RADIUS_STOP; +} + +if (!defined('RADIUS_UPDATE')) + define('RADIUS_UPDATE', 3); + +/** + * class Auth_RADIUS_Acct_Update + * + * Class for interim RADIUS accounting updates. + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct_Update extends Auth_RADIUS_Acct +{ + /** + * Defines the type of the accounting request. + * It is set to RADIUS_UPDATE by default in this class. + * @var integer + */ + var $status_type = RADIUS_UPDATE; +} + +/** + * class Auth_RADIUS_Acct_On + * + * Class for sending Accounting-On updates + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct_On extends Auth_RADIUS_Acct +{ + /** + * Defines the type of the accounting request. + * It is set to RADIUS_ACCOUNTING_ON by default in this class. + * @var integer + */ + var $status_type = RADIUS_ACCOUNTING_ON; +} + +/** + * class Auth_RADIUS_Acct_Off + * + * Class for sending Accounting-Off updates + * + * @package Auth_RADIUS + */ +class Auth_RADIUS_Acct_Off extends Auth_RADIUS_Acct +{ + /** + * Defines the type of the accounting request. + * It is set to RADIUS_ACCOUNTING_OFF by default in this class. + * @var integer + */ + var $status_type = RADIUS_ACCOUNTING_OFF; +} + +?> diff --git a/usr/etc/inc/rrd.inc b/usr/etc/inc/rrd.inc new file mode 100644 index 000000000..6e6481534 --- /dev/null +++ b/usr/etc/inc/rrd.inc @@ -0,0 +1,964 @@ + + 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. + + */ + +/* + pfSense_BUILDER_BINARIES: /bin/rm /usr/bin/nice /usr/local/bin/rrdtool /bin/cd + pfSense_MODULE: rrd +*/ + +/* include all configuration functions */ + +function dump_rrd_to_xml($rrddatabase, $xmldumpfile) { + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + unlink_if_exists($xmldumpfile); + + exec("$rrdtool dump " . escapeshellarg($rrddatabase) . " {$xmldumpfile} 2>&1", $dumpout, $dumpret); + if ($dumpret <> 0) { + $dumpout = implode(" ", $dumpout); + log_error(sprintf(gettext('RRD dump failed exited with %1$s, the error is: %2$s'), $dumpret, $dumpout)); + } + return($dumpret); +} + +function restore_rrd() { + global $g, $config; + + $rrddbpath = "/var/db/rrd/"; + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + + $rrdrestore = ""; + $rrdreturn = ""; + if (file_exists("{$g['cf_conf_path']}/rrd.tgz")) { + foreach (glob("{$rrddbpath}/*.xml") as $xml_file) { + @unlink($xml_file); + } + $_gb = exec("cd /;LANG=C /usr/bin/tar -xzf {$g['cf_conf_path']}/rrd.tgz 2>&1", $rrdrestore, $rrdreturn); + $rrdrestore = implode(" ", $rrdrestore); + if($rrdreturn != 0) { + log_error("RRD restore failed exited with $rrdreturn, the error is: $rrdrestore\n"); + } + unset($rrdrestore); + foreach (glob("{$rrddbpath}/*.xml") as $xml_file) { + $rrd_file = preg_replace('/\.xml$/', ".rrd", $xml_file); + if (file_exists("{$rrd_file}")) { + @unlink($rrd_file); + } + $output = array(); + $status = null; + $_gb = exec("$rrdtool restore -f '{$xml_file}' '{$rrd_file}'", $output, $status); + if ($status) { + log_error("rrdtool restore -f '{$xml_file}' '{$rrd_file}' failed returning {$status}."); + continue; + } + unset($output); + @unlink($xml_file); + } + /* If this backup is still there on a full install, but we aren't going to use ram disks, remove the archive since this is a transition. */ + if (($g['platform'] == "pfSense") && !isset($config['system']['use_mfs_tmpvar'])) { + unlink_if_exists("{$g['cf_conf_path']}/rrd.tgz"); + } + return true; + } + return false; +} + +function create_new_rrd($rrdcreatecmd) { + $rrdcreateoutput = array(); + $rrdcreatereturn = 0; + $_gb = exec("$rrdcreatecmd 2>&1", $rrdcreateoutput, $rrdcreatereturn); + if ($rrdcreatereturn <> 0) { + $rrdcreateoutput = implode(" ", $rrdcreateoutput); + log_error(sprintf(gettext('RRD create failed exited with %1$s, the error is: %2$s'), $rrdcreatereturn, $rrdcreateoutput)); + } + unset($rrdcreateoutput); + return $rrdcreatereturn; +} + +function migrate_rrd_format($rrdoldxml, $rrdnewxml) { + if(!file_exists("/tmp/rrd_notice_sent.txt")) { + $_gb = exec("echo 'Converting RRD configuration to new format. This might take a bit...' | wall"); + @touch("/tmp/rrd_notice_sent.txt"); + } + $numrraold = count($rrdoldxml['rra']); + $numrranew = count($rrdnewxml['rra']); + $numdsold = count($rrdoldxml['ds']); + $numdsnew = count($rrdnewxml['ds']); + log_error(sprintf(gettext('Import RRD has %1$s DS values and %2$s RRA databases, new format RRD has %3$s DS values and %4$s RRA databases'), $numdsold, $numrraold, $numdsnew ,$numrranew)); + + /* add data sources not found in the old array from the new array */ + $i = 0; + foreach($rrdnewxml['ds'] as $ds) { + if(!is_array($rrdoldxml['ds'][$i])) { + $rrdoldxml['ds'][$i] = $rrdnewxml['ds'][$i]; + /* set unknown values to 0 */ + $rrdoldxml['ds'][$i]['last_ds'] = " 0.0000000000e+00 "; + $rrdoldxml['ds'][$i]['value'] = " 0.0000000000e+00 "; + $rrdoldxml['ds'][$i]['unknown_sec'] = "0"; + } + $i++; + } + + $i = 0; + $rracountold = count($rrdoldxml['rra']); + $rracountnew = count($rrdnewxml['rra']); + /* process each RRA, which contain a database */ + foreach($rrdnewxml['rra'] as $rra) { + if(!is_array($rrdoldxml['rra'][$i])) { + $rrdoldxml['rra'][$i] = $rrdnewxml['rra'][$i]; + } + + $d = 0; + /* process cdp_prep */ + $cdp_prep = $rra['cdp_prep']; + foreach($cdp_prep['ds'] as $ds) { + if(!is_array($rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d])) { + $rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d] = $rrdnewxml['rra'][$i]['cdp_prep']['ds'][$d]; + $rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d]['primary_value'] = " 0.0000000000e+00 "; + $rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d]['secondary_value'] = " 0.0000000000e+00 "; + $rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d]['value'] = " 0.0000000000e+00 "; + $rrdoldxml['rra'][$i]['cdp_prep']['ds'][$d]['unknown_datapoints'] = "0"; + } + $d++; + } + + /* process database */ + $rows = $rra['database']; + $k = 0; + $rowcountold = count($rrdoldxml['rra'][$i]['database']['row']); + $rowcountnew = count($rrdnewxml['rra'][$i]['database']['row']); + $rowcountdiff = $rowcountnew - $rowcountold; + /* save old rows for a bit before we put the required empty rows before it */ + $rowsdata = $rows; + $rowsempty = array(); + $r = 0; + while($r < $rowcountdiff) { + $rowsempty[] = $rrdnewxml['rra'][$i]['database']['row'][$r]; + $r++; + } + $rows = $rowsempty + $rowsdata; + /* now foreach the rows in the database */ + foreach($rows['row'] as $row) { + if(!is_array($rrdoldxml['rra'][$i]['database']['row'][$k])) { + $rrdoldxml['rra'][$i]['database']['row'][$k] = $rrdnewxml['rra'][$i]['database']['row'][$k]; + } + $m = 0; + $vcountold = count($rrdoldxml['rra'][$i]['database']['row'][$k]['v']); + $vcountnew = count($rrdnewxml['rra'][$i]['database']['row'][$k]['v']); + foreach($row['v'] as $value) { + if(empty($rrdoldxml['rra'][$i]['database']['row'][$k]['v'][$m])) { + if(isset($valid)) { + $rrdoldxml['rra'][$i]['database']['row'][$k]['v'][$m] = "0.0000000000e+00 "; + } else { + $rrdoldxml['rra'][$i]['database']['row'][$k]['v'][$m] = $rrdnewxml['rra'][$i]['database']['row'][$k]['v'][$m]; + } + } else { + if($value <> " NaN ") { + $valid = true; + } else { + $valid = false; + } + } + $m++; + } + $k++; + } + $i++; + } + + $numrranew = count($rrdoldxml['rra']); + $numdsnew = count($rrdoldxml['ds']); + log_error(sprintf(gettext('The new RRD now has %1$s DS values and %2$s RRA databases'), $numdsnew, $numrranew)); + return $rrdoldxml; +} + +function enable_rrd_graphing() { + global $config, $g, $altq_list_queues; + + if($g['booting']) + echo gettext("Generating RRD graphs..."); + + $rrddbpath = "/var/db/rrd/"; + $rrdgraphpath = "/usr/local/www/rrd"; + + $traffic = "-traffic.rrd"; + $packets = "-packets.rrd"; + $states = "-states.rrd"; + $wireless = "-wireless.rrd"; + $queues = "-queues.rrd"; + $queuesdrop = "-queuedrops.rrd"; + $spamd = "-spamd.rrd"; + $proc = "-processor.rrd"; + $mem = "-memory.rrd"; + $mbuf = "-mbuf.rrd"; + $cellular = "-cellular.rrd"; + $vpnusers = "-vpnusers.rrd"; + $captiveportalconcurrent = "-concurrent.rrd"; + $captiveportalloggedin = "-loggedin.rrd"; + $ntpd = "ntpd.rrd"; + + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + $netstat = "/usr/bin/netstat"; + $awk = "/usr/bin/awk"; + $tar = "/usr/bin/tar"; + $pfctl = "/sbin/pfctl"; + $sysctl = "/sbin/sysctl"; + $php = "/usr/local/bin/php"; + $cpustats = "/usr/local/sbin/cpustats"; + $spamd_gather = "/usr/local/bin/spamd_gather_stats.php"; + $ifconfig = "/sbin/ifconfig"; + $captiveportal_gather = "/usr/local/bin/captiveportal_gather_stats.php"; + $ntpq = "/usr/local/sbin/ntpq"; + + $rrdtrafficinterval = 60; + $rrdwirelessinterval = 60; + $rrdqueuesinterval = 60; + $rrdqueuesdropinterval = 60; + $rrdpacketsinterval = 60; + $rrdstatesinterval = 60; + $rrdspamdinterval = 60; + $rrdlbpoolinterval = 60; + $rrdprocinterval = 60; + $rrdmeminterval = 60; + $rrdmbufinterval = 60; + $rrdcellularinterval = 60; + $rrdvpninterval = 60; + $rrdcaptiveportalinterval = 60; + $rrdntpdinterval = 60; + + $trafficvalid = $rrdtrafficinterval * 2; + $wirelessvalid = $rrdwirelessinterval * 2; + $queuesvalid = $rrdqueuesinterval * 2; + $queuesdropvalid = $rrdqueuesdropinterval * 2; + $packetsvalid = $rrdpacketsinterval * 2; + $statesvalid = $rrdstatesinterval*2; + $spamdvalid = $rrdspamdinterval * 2; + $lbpoolvalid = $rrdlbpoolinterval * 2; + $procvalid = $rrdlbpoolinterval * 2; + $memvalid = $rrdmeminterval * 2; + $mbufvalid = $rrdmbufinterval * 2; + $cellularvalid = $rrdcellularinterval * 2; + $vpnvalid = $rrdvpninterval * 2; + $captiveportalvalid = $rrdcaptiveportalinterval * 2; + $ntpdvalid = $rrdntpdinterval * 2; + + /* Assume 2*10GigE for now */ + $downstream = 2500000000; + $upstream = 2500000000; + + /* read the shaper config */ + read_altq_config(); + + if (isset ($config['rrd']['enable'])) { + + /* create directory if needed */ + if (!is_dir($rrddbpath)) { + mkdir($rrddbpath, 0775); + } + chown($rrddbpath, "nobody"); + + if ($g['booting']) { + restore_rrd(); + } + + /* db update script */ + $rrdupdatesh = "#!/bin/sh\n"; + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "export TERM=dumb\n"; + $rrdupdatesh .= "\n"; + $rrdupdatesh .= 'echo $$ > ' . $g['varrun_path'] . '/updaterrd.sh.pid'; + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "counter=1\n"; + $rrdupdatesh .= "while [ \"\$counter\" -ne 0 ]\n"; + $rrdupdatesh .= "do\n"; + $rrdupdatesh .= ""; + + $i = 0; + $ifdescrs = get_configured_interface_with_descr(); + /* IPsec counters */ + $ifdescrs['ipsec'] = "IPsec"; + /* OpenVPN server counters */ + if(is_array($config['openvpn']['openvpn-server'])) { + foreach($config['openvpn']['openvpn-server'] as $server) { + $serverid = "ovpns" . $server['vpnid']; + $ifdescrs[$serverid] = "{$server['description']}"; + } + } + + /* process all real and pseudo interfaces */ + foreach ($ifdescrs as $ifname => $ifdescr) { + $temp = get_real_interface($ifname); + if($temp <> "") { + $realif = $temp; + } + + /* TRAFFIC, set up the rrd file */ + if (!file_exists("$rrddbpath$ifname$traffic")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$traffic --step $rrdtrafficinterval "; + $rrdcreate .= "DS:inpass:COUNTER:$trafficvalid:0:$downstream "; + $rrdcreate .= "DS:outpass:COUNTER:$trafficvalid:0:$upstream "; + $rrdcreate .= "DS:inblock:COUNTER:$trafficvalid:0:$downstream "; + $rrdcreate .= "DS:outblock:COUNTER:$trafficvalid:0:$upstream "; + $rrdcreate .= "DS:inpass6:COUNTER:$trafficvalid:0:$downstream "; + $rrdcreate .= "DS:outpass6:COUNTER:$trafficvalid:0:$upstream "; + $rrdcreate .= "DS:inblock6:COUNTER:$trafficvalid:0:$downstream "; + $rrdcreate .= "DS:outblock6:COUNTER:$trafficvalid:0:$upstream "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$traffic N:U:U:U:U:U:U:U:U"); + } + + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling traffic for interface $ifname $realif IPv4/IPv6 counters \n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$traffic N:"; + $rrdupdatesh .= "`$pfctl -vvsI -i {$realif} | awk '\\\n"; + $rrdupdatesh .= "/In4\/Pass/ { b4pi = \$6 };/Out4\/Pass/ { b4po = \$6 };/In4\/Block/ { b4bi = \$6 };/Out4\/Block/ { b4bo = \$6 };\\\n"; + $rrdupdatesh .= "/In6\/Pass/ { b6pi = \$6 };/Out6\/Pass/ { b6po = \$6 };/In6\/Block/ { b6bi = \$6 };/Out6\/Block/ { b6bo = \$6 };\\\n"; + $rrdupdatesh .= "END {print b4pi \":\" b4po \":\" b4bi \":\" b4bo \":\" b6pi \":\" b6po \":\" b6bi \":\" b6bo};'`\n"; + + /* PACKETS, set up the rrd file */ + if (!file_exists("$rrddbpath$ifname$packets")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$packets --step $rrdpacketsinterval "; + $rrdcreate .= "DS:inpass:COUNTER:$packetsvalid:0:$downstream "; + $rrdcreate .= "DS:outpass:COUNTER:$packetsvalid:0:$upstream "; + $rrdcreate .= "DS:inblock:COUNTER:$packetsvalid:0:$downstream "; + $rrdcreate .= "DS:outblock:COUNTER:$packetsvalid:0:$upstream "; + $rrdcreate .= "DS:inpass6:COUNTER:$packetsvalid:0:$downstream "; + $rrdcreate .= "DS:outpass6:COUNTER:$packetsvalid:0:$upstream "; + $rrdcreate .= "DS:inblock6:COUNTER:$packetsvalid:0:$downstream "; + $rrdcreate .= "DS:outblock6:COUNTER:$packetsvalid:0:$upstream "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$packets N:U:U:U:U:U:U:U:U"); + } + + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling packets for interface $ifname $realif \n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$packets N:"; + $rrdupdatesh .= "`$pfctl -vvsI -i {$realif} | awk '\\\n"; + $rrdupdatesh .= "/In4\/Pass/ { b4pi = \$4 };/Out4\/Pass/ { b4po = \$4 };/In4\/Block/ { b4bi = \$4 };/Out4\/Block/ { b4bo = \$4 };\\\n"; + $rrdupdatesh .= "/In6\/Pass/ { b6pi = \$4 };/Out6\/Pass/ { b6po = \$4 };/In6\/Block/ { b6bi = \$4 };/Out6\/Block/ { b6bo = \$4 };\\\n"; + $rrdupdatesh .= "END {print b4pi \":\" b4po \":\" b4bi \":\" b4bo \":\" b6pi \":\" b6po \":\" b6bi \":\" b6bo};'`\n"; + + /* WIRELESS, set up the rrd file */ + if($config['interfaces'][$ifname]['wireless']['mode'] == "bss") { + if (!file_exists("$rrddbpath$ifname$wireless")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$wireless --step $rrdwirelessinterval "; + $rrdcreate .= "DS:snr:GAUGE:$wirelessvalid:0:1000 "; + $rrdcreate .= "DS:rate:GAUGE:$wirelessvalid:0:1000 "; + $rrdcreate .= "DS:channel:GAUGE:$wirelessvalid:0:1000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$wireless N:U:U:U"); + } + + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling wireless for interface $ifname $realif \n"; + $rrdupdatesh .= "WIFI=`$ifconfig {$realif} list sta| $awk 'gsub(\"M\", \"\") {getline 2;print substr(\$5, 0, length(\$5)-2) \":\" $4 \":\" $3}'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$wireless N:\${WIFI}\n"; + } + + /* OpenVPN, set up the rrd file */ + if(stristr($ifname, "ovpns")) { + if (!file_exists("$rrddbpath$ifname$vpnusers")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$vpnusers --step $rrdvpninterval "; + $rrdcreate .= "DS:users:GAUGE:$vpnvalid:0:10000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$vpnusers N:U"); + } + + if(is_array($config['openvpn']['openvpn-server'])) { + foreach($config['openvpn']['openvpn-server'] as $server) { + if("ovpns{$server['vpnid']}" == $ifname) { + $port = $server['local_port']; + $vpnid = $server['vpnid']; + } + } + } + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling vpn users for interface $ifname $realif port $port\n"; + $rrdupdatesh .= "list_current_users() {\n"; + $rrdupdatesh .= " sleep 0.2\n"; + $rrdupdatesh .= " echo \"status 2\"\n"; + $rrdupdatesh .= " sleep 0.2\n"; + $rrdupdatesh .= " echo \"quit\"\n"; + $rrdupdatesh .= "}\n"; + $rrdupdatesh .= "OVPN=`list_current_users | nc -U {$g['varetc_path']}/openvpn/server{$vpnid}.sock | awk -F\",\" '/^CLIENT_LIST/ {print \$2}' | wc -l | awk '{print $1}'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$vpnusers N:\${OVPN}\n"; + } + + /* QUEUES, set up the queues databases */ + if ($altq_list_queues[$ifname]) { + $altq =& $altq_list_queues[$ifname]; + /* NOTE: Is it worth as its own function?! */ + switch ($altq->GetBwscale()) { + case "Gb": + $factor = 1024 * 1024 * 1024; + break; + case "Mb": + $factor = 1024 * 1024; + break; + case "Kb": + $factor = 1024; + break; + case "b": + default: + $factor = 1; + break; + } + $qbandwidth = $altq->GetBandwidth() * $factor; + if ($qbandwidth <=0) { + $qbandwidth = 100 * 1000 * 1000; /* 100Mbit */ + } + $qlist =& $altq->get_queue_list($notused); + if (!file_exists("$rrddbpath$ifname$queues")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$queues --step $rrdqueuesinterval "; + /* loop list of shaper queues */ + $q = 0; + foreach ($qlist as $qname => $q) { + $rrdcreate .= "DS:$qname:COUNTER:$queuesvalid:0:$qbandwidth "; + } + + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + if (!file_exists("$rrddbpath$ifname$queuesdrop")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$queuesdrop --step $rrdqueuesdropinterval "; + /* loop list of shaper queues */ + $q = 0; + foreach ($qlist as $qname => $q) { + $rrdcreate .= "DS:$qname:COUNTER:$queuesdropvalid:0:$qbandwidth "; + } + + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + if($g['booting']) { + $rrdqcommand = "-t "; + $rrducommand = "N"; + $qi = 0; + foreach ($qlist as $qname => $q) { + if($qi == 0) { + $rrdqcommand .= "{$qname}"; + } else { + $rrdqcommand .= ":{$qname}"; + } + $qi++; + $rrducommand .= ":U"; + } + mwexec("$rrdtool update $rrddbpath$ifname$queues $rrdqcommand $rrducommand"); + mwexec("$rrdtool update $rrddbpath$ifname$queuesdrop $rrdqcommand $rrducommand"); + } + + /* awk function to gather shaper data */ + /* yes, it's special */ + $rrdupdatesh .= "` pfctl -vsq -i {$realif} | awk 'BEGIN {printf \"$rrdtool update $rrddbpath$ifname$queues \" } "; + $rrdupdatesh .= "{ "; + $rrdupdatesh .= "if ((\$1 == \"queue\") && ( \$2 ~ /^q/ )) { "; + $rrdupdatesh .= " dsname = dsname \":\" \$2 ; "; + $rrdupdatesh .= " q=1; "; + $rrdupdatesh .= "} "; + $rrdupdatesh .= " else if ((\$4 == \"bytes:\") && ( q == 1 ) ) { "; + $rrdupdatesh .= " dsdata = dsdata \":\" \$5 ; "; + $rrdupdatesh .= " q=0; "; + $rrdupdatesh .= "} "; + $rrdupdatesh .= "} END { "; + $rrdupdatesh .= " dsname = substr(dsname,2); "; + $rrdupdatesh .= " dsdata = substr(dsdata,2); "; + $rrdupdatesh .= " printf \"-t \" dsname \" N:\" dsdata }' "; + $rrdupdatesh .= " dsname=\"\" dsdata=\"\"`\n\n"; + + $rrdupdatesh .= "` pfctl -vsq -i {$realif} | awk 'BEGIN {printf \"$rrdtool update $rrddbpath$ifname$queuesdrop \" } "; + $rrdupdatesh .= "{ "; + $rrdupdatesh .= "if ((\$1 == \"queue\") && ( \$2 ~ /^q/ )) { "; + $rrdupdatesh .= " dsname = dsname \":\" \$2 ; "; + $rrdupdatesh .= " q=1; "; + $rrdupdatesh .= "} "; + $rrdupdatesh .= " else if ((\$4 == \"bytes:\") && ( q == 1 ) ) { "; + $rrdupdatesh .= " dsdata = dsdata \":\" \$8 ; "; + $rrdupdatesh .= " q=0; "; + $rrdupdatesh .= "} "; + $rrdupdatesh .= "} END { "; + $rrdupdatesh .= " dsname = substr(dsname,2); "; + $rrdupdatesh .= " dsdata = substr(dsdata,2); "; + $rrdupdatesh .= " printf \"-t \" dsname \" N:\" dsdata }' "; + $rrdupdatesh .= " dsname=\"\" dsdata=\"\"`\n\n"; + } + + /* 3G interfaces */ + if(preg_match("/ppp[0-9]+/i", $realif)) { + if (!file_exists("$rrddbpath$ifname$cellular")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$cellular --step $rrdcellularinterval "; + $rrdcreate .= "DS:rssi:GAUGE:$cellularvalid:0:100 "; + $rrdcreate .= "DS:upstream:GAUGE:$cellularvalid:0:100000000 "; + $rrdcreate .= "DS:downstream:GAUGE:$cellularvalid:0:100000000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$cellular N:U:U:U"); + } + + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling 3G\n"; + $rrdupdatesh .= "GSTATS=`awk -F, 'getline 2 {print \$2 \":\" \$8 \":\" \$9}' < /tmp/3gstats.$ifname`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$cellular N:\"\$GSTATS\""; + } + + } + $i++; + + /* System only statistics */ + $ifname = "system"; + + /* STATES, create pf states database */ + if(! file_exists("$rrddbpath$ifname$states")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$states --step $rrdstatesinterval "; + $rrdcreate .= "DS:pfrate:GAUGE:$statesvalid:0:10000000 "; + $rrdcreate .= "DS:pfstates:GAUGE:$statesvalid:0:10000000 "; + $rrdcreate .= "DS:pfnat:GAUGE:$statesvalid:0:10000000 "; + $rrdcreate .= "DS:srcip:GAUGE:$statesvalid:0:10000000 "; + $rrdcreate .= "DS:dstip:GAUGE:$statesvalid:0:10000000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$states N:U:U:U:U:U"); + } + + /* the pf states gathering function. */ + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "pfctl_si_out=\"` $pfctl -si > /tmp/pfctl_si_out `\"\n"; + $rrdupdatesh .= "pfctl_ss_out=\"` $pfctl -ss > /tmp/pfctl_ss_out`\"\n"; + $rrdupdatesh .= "pfrate=\"` cat /tmp/pfctl_si_out | egrep \"inserts|removals\" | awk '{ pfrate = \$3 + pfrate } {print pfrate}'|tail -1 `\"\n"; + $rrdupdatesh .= "pfstates=\"` cat /tmp/pfctl_ss_out | egrep -v \"<\\-.*?<\\-|\\->.*?\\->\" | wc -l|sed 's/ //g'`\"\n"; + $rrdupdatesh .= "pfnat=\"` cat /tmp/pfctl_ss_out | egrep '<\\-.*?<\\-|\\->.*?\\->' | wc -l|sed 's/ //g' `\"\n"; + $rrdupdatesh .= "srcip=\"` cat /tmp/pfctl_ss_out | egrep -v '<\\-.*?<\\-|\\->.*?\\->' | grep '\\->' | awk '{print \$3}' | awk -F: '{print \$1}' | sort -u|wc -l|sed 's/ //g' `\"\n"; + $rrdupdatesh .= "dstip=\"` cat /tmp/pfctl_ss_out | egrep -v '<\\-.*?<\\-|\\->.*?\\->' | grep '<\\-' | awk '{print \$3}' | awk -F: '{print \$1}' | sort -u|wc -l|sed 's/ //g' `\"\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$states N:\$pfrate:\$pfstates:\$pfnat:\$srcip:\$dstip\n\n"; + + /* End pf states statistics */ + + /* CPU, create CPU statistics database */ + if(! file_exists("$rrddbpath$ifname$proc")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$proc --step $rrdprocinterval "; + $rrdcreate .= "DS:user:GAUGE:$procvalid:0:10000000 "; + $rrdcreate .= "DS:nice:GAUGE:$procvalid:0:10000000 "; + $rrdcreate .= "DS:system:GAUGE:$procvalid:0:10000000 "; + $rrdcreate .= "DS:interrupt:GAUGE:$procvalid:0:10000000 "; + $rrdcreate .= "DS:processes:GAUGE:$procvalid:0:10000000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$proc N:U:U:U:U:U"); + } + + /* the CPU stats gathering function. */ + $rrdupdatesh .= "CPU=`$cpustats | cut -f1-4 -d':'`\n"; + /* Using ps uxaH will count all processes including system threads. Top was undercounting. */ + $rrdupdatesh .= "PROCS=`ps uxaH | wc -l | awk '{print \$1;}'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$proc N:\${CPU}:\${PROCS}\n"; + + /* End CPU statistics */ + + /* Memory, create Memory statistics database */ + if(! file_exists("$rrddbpath$ifname$mem")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$mem --step $rrdmeminterval "; + $rrdcreate .= "DS:active:GAUGE:$memvalid:0:10000000 "; + $rrdcreate .= "DS:inactive:GAUGE:$memvalid:0:10000000 "; + $rrdcreate .= "DS:free:GAUGE:$memvalid:0:10000000 "; + $rrdcreate .= "DS:cache:GAUGE:$memvalid:0:10000000 "; + $rrdcreate .= "DS:wire:GAUGE:$memvalid:0:10000000 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284"; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$mem N:U:U:U:U:U"); + } + + /* the Memory stats gathering function. */ + $rrdupdatesh .= "MEM=`$sysctl -n vm.stats.vm.v_page_count vm.stats.vm.v_active_count vm.stats.vm.v_inactive_count vm.stats.vm.v_free_count vm.stats.vm.v_cache_count vm.stats.vm.v_wire_count | "; + $rrdupdatesh .= " $awk '{getline active;getline inactive;getline free;getline cache;getline wire;printf "; + $rrdupdatesh .= "((active/$0) * 100)\":\"((inactive/$0) * 100)\":\"((free/$0) * 100)\":\"((cache/$0) * 100)\":\"(wire/$0 * 100)}'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$mem N:\${MEM}\n"; + + /* End Memory statistics */ + + /* mbuf, create mbuf statistics database */ + if(! file_exists("$rrddbpath$ifname$mbuf")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$mbuf --step $rrdmbufinterval "; + $rrdcreate .= "DS:current:GAUGE:$mbufvalid:0:10000000 "; + $rrdcreate .= "DS:cache:GAUGE:$mbufvalid:0:10000000 "; + $rrdcreate .= "DS:total:GAUGE:$mbufvalid:0:10000000 "; + $rrdcreate .= "DS:max:GAUGE:$mbufvalid:0:10000000 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284"; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ifname$mbuf N:U:U:U:U"); + } + + /* the mbuf stats gathering function. */ + $rrdupdatesh .= "MBUF=`$netstat -m | "; + $rrdupdatesh .= " $awk '/mbuf clusters in use/ { gsub(/\//, \":\", $1); print $1; }'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$mbuf N:\${MBUF}\n"; + + /* End mbuf statistics */ + + /* SPAMD, set up the spamd rrd file */ + if (isset($config['installedpackages']['spamdsettings']) && + $config['installedpackages']['spamdsettings']['config'][0]['enablerrd']) { + /* set up the spamd rrd file */ + if (!file_exists("$rrddbpath$ifname$spamd")) { + $rrdcreate = "$rrdtool create $rrddbpath$ifname$spamd --step $rrdspamdinterval "; + $rrdcreate .= "DS:conn:GAUGE:$spamdvalid:0:10000 "; + $rrdcreate .= "DS:time:GAUGE:$spamdvalid:0:86400 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling spamd for connections and tarpitness \n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$spamd \\\n"; + $rrdupdatesh .= "`$php -q $spamd_gather`\n"; + + } + /* End System statistics */ + + /* Captive Portal statistics, set up the rrd file */ + if(is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpkey => $cp) { + if (!isset($cp['enable'])) + continue; + + $ifname= "captiveportal"; + $concurrent_filename = $rrddbpath . $ifname . '-' . $cpkey . $captiveportalconcurrent; + if (!file_exists("$concurrent_filename")) { + $rrdcreate = "$rrdtool create $concurrent_filename --step $rrdcaptiveportalinterval "; + $rrdcreate .= "DS:concurrentusers:GAUGE:$captiveportalvalid:0:10000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284 "; + $rrdcreate .= "RRA:LAST:0.5:1:1200 "; + $rrdcreate .= "RRA:LAST:0.5:5:720 "; + $rrdcreate .= "RRA:LAST:0.5:60:1860 "; + $rrdcreate .= "RRA:LAST:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $concurrent_filename N:U"); + } + + /* the Captive Portal stats gathering function. */ + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling Captive Portal for number of concurrent users\n"; + $rrdupdatesh .= "CP=`${php} -q ${captiveportal_gather} '${cpkey}' 'concurrent'`\n"; + $rrdupdatesh .= "$rrdtool update $concurrent_filename \${CP}\n"; + + $loggedin_filename = $rrddbpath . $ifname . '-' . $cpkey . $captiveportalloggedin; + if (!file_exists("$loggedin_filename")) { + $rrdcreate = "$rrdtool create $loggedin_filename --step $rrdcaptiveportalinterval "; + $rrdcreate .= "DS:loggedinusers:GAUGE:$captiveportalvalid:0:10000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284 "; + $rrdcreate .= "RRA:LAST:0.5:1:1200 "; + $rrdcreate .= "RRA:LAST:0.5:5:720 "; + $rrdcreate .= "RRA:LAST:0.5:60:1860 "; + $rrdcreate .= "RRA:LAST:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $loggedin_filename N:U"); + } + + /* the Captive Portal stats gathering function. */ + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "# polling Captive Portal for number of logged in users\n"; + $rrdupdatesh .= "CP=`${php} -q ${captiveportal_gather} '${cpkey}' 'loggedin'`\n"; + $rrdupdatesh .= "$rrdtool update $loggedin_filename \${CP}\n"; + + } + } + /* End Captive Portal statistics */ + + /* NTP, set up the ntpd rrd file */ + if (isset($config['ntpd']['statsgraph'])) { + /* set up the ntpd rrd file */ + if (!file_exists("$rrddbpath$ntpd")) { + $rrdcreate = "$rrdtool create $rrddbpath$ntpd --step $rrdntpdinterval "; + $rrdcreate .= "DS:offset:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "DS:sjit:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "DS:cjit:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "DS:wander:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "DS:freq:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "DS:disp:GAUGE:$ntpdvalid:0:1000 "; + $rrdcreate .= "RRA:MIN:0.5:1:1200 "; + $rrdcreate .= "RRA:MIN:0.5:5:720 "; + $rrdcreate .= "RRA:MIN:0.5:60:1860 "; + $rrdcreate .= "RRA:MIN:0.5:1440:2284 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + $rrdcreate .= "RRA:MAX:0.5:1:1200 "; + $rrdcreate .= "RRA:MAX:0.5:5:720 "; + $rrdcreate .= "RRA:MAX:0.5:60:1860 "; + $rrdcreate .= "RRA:MAX:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrddbpath$ntpd N:U:U:U:U:U:U"); + } + + /* the ntp stats gathering function. */ + $rrdupdatesh .= "\n"; + $rrdupdatesh .= "$ntpq -c rv | $awk 'BEGIN{ RS=\",\"}{ print }' >> /tmp/ntp-rrdstats.$$\n"; + $rrdupdatesh .= "NOFFSET=`grep offset /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "NFREQ=`grep frequency /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "NSJIT=`grep sys_jitter /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "NCJIT=`grep clk_jitter /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "NWANDER=`grep clk_wander /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "NDISPER=`grep rootdisp /tmp/ntp-rrdstats.$$ | awk 'BEGIN{FS=\"=\"}{print $2}'`\n"; + $rrdupdatesh .= "$rrdtool update $rrddbpath$ntpd \N:\${NOFFSET}:\${NSJIT}:\${NCJIT}:\${NWANDER}:\${NFREQ}:\${NDISPER}\n"; + $rrdupdatesh .= "rm /tmp/ntp-rrdstats.$$\n"; + $rrdupdatesh .= "\n"; + + } + /* End NTP statistics */ + + $rrdupdatesh .= "sleep 60\n"; + $rrdupdatesh .= "done\n"; + log_error(gettext("Creating rrd update script")); + /* write the rrd update script */ + $updaterrdscript = "{$g['vardb_path']}/rrd/updaterrd.sh"; + $fd = fopen("$updaterrdscript", "w"); + fwrite($fd, "$rrdupdatesh"); + fclose($fd); + + unset($rrdupdatesh); + + /* kill off traffic collectors */ + kill_traffic_collector(); + + /* start traffic collector */ + mwexec_bg("/usr/bin/nice -n20 /bin/sh $updaterrdscript"); + + } else { + /* kill off traffic collectors */ + kill_traffic_collector(); + } + + $databases = glob("{$rrddbpath}/*.rrd"); + foreach($databases as $database) { + chown($database, "nobody"); + } + + if($g['booting']) + echo gettext("done.") . "\n"; + +} + +# Create gateway quality RRD with settings suitable for pfSense graph set. +function create_gateway_quality_rrd($rrd_file) { + global $g; + $rrdinterval = 60; + $valid = $rrdinterval * 2; + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + + /* GATEWAY QUALITY, set up the rrd file */ + if (!file_exists("$rrd_file")) { + $rrdcreate = "$rrdtool create $rrd_file --step $rrdinterval "; + $rrdcreate .= "DS:loss:GAUGE:$valid:0:100 "; + $rrdcreate .= "DS:delay:GAUGE:$valid:0:100000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1200 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:720 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1860 "; + $rrdcreate .= "RRA:AVERAGE:0.5:1440:2284 "; + + create_new_rrd($rrdcreate); + unset($rrdcreate); + } + + /* enter UNKNOWN values in the RRD so it knows we rebooted. */ + if($g['booting']) { + mwexec("$rrdtool update $rrd_file N:U:U"); + } + unset($rrdtool, $rrdinterval, $valid, $rrd_file); +} + +function kill_traffic_collector() { + global $g; + + killbypid("{$g['varrun_path']}/updaterrd.sh.pid"); +} + +?> diff --git a/usr/etc/inc/sasl.inc b/usr/etc/inc/sasl.inc new file mode 100644 index 000000000..f6a8d0b26 --- /dev/null +++ b/usr/etc/inc/sasl.inc @@ -0,0 +1,422 @@ + + + + net.manuellemos.sasl + + @(#) $Id: sasl.php,v 1.11 2005/10/31 18:43:27 mlemos Exp $ + Copyright © (C) Manuel Lemos 2004 + Simple Authentication and Security Layer client + Manuel Lemos + mlemos-at-acm.org + + + en + Provide a common interface to plug-in driver classes that + implement different mechanisms for authentication used by clients of + standard protocols like SMTP, POP3, IMAP, HTTP, etc.. Currently the + supported authentication mechanisms are: PLAIN, + LOGIN, CRAM-MD5, Digest and NTML + (Windows or Samba). + . + + +{/metadocument} +*/ + +class sasl_client_class +{ + /* Public variables */ + +/* +{metadocument} + + error + STRING + + + Store the message that is returned when an error + occurs. + Check this variable to understand what happened when a call to + any of the class functions has failed. + This class uses cumulative error handling. This means that if one + class functions that may fail is called and this variable was + already set to an error message due to a failure in a previous call + to the same or other function, the function will also fail and does + not do anything. + This allows programs using this class to safely call several + functions that may fail and only check the failure condition after + the last function call. + Just set this variable to an empty string to clear the error + condition. + + +{/metadocument} +*/ + var $error=''; + +/* +{metadocument} + + mechanism + STRING + + + Store the name of the mechanism that was selected during the + call to the Start function. + You can access this variable but do not change it. + + +{/metadocument} +*/ + var $mechanism=''; + +/* +{metadocument} + + encode_response + BOOLEAN + 1 + + Let the drivers inform the applications whether responses + need to be encoded. + Applications should check this variable before sending + authentication responses to the server to determine if the + responses need to be encoded, eventually with base64 algorithm. + + +{/metadocument} +*/ + var $encode_response=1; + + /* Private variables */ + + var $driver; + var $drivers=array( + "Digest" => array("digest_sasl_client_class", "digest_sasl_client.inc" ), + "CRAM-MD5" => array("cram_md5_sasl_client_class", "cram_md5_sasl_client.inc" ), + "LOGIN" => array("login_sasl_client_class", "login_sasl_client.inc" ), + "NTLM" => array("ntlm_sasl_client_class", "ntlm_sasl_client.inc" ), + "PLAIN" => array("plain_sasl_client_class", "plain_sasl_client.inc" ), + "Basic" => array("basic_sasl_client_class", "basic_sasl_client.inc" ) + ); + var $credentials=array(); + + /* Public functions */ + +/* +{metadocument} + + SetCredential + VOID + + Store the value of a credential that may be used by any of + the supported mechanisms to process the authentication messages and + responses. + Call this function before starting the authentication dialog + to pass all the credential values that be needed to use the type + of authentication that the applications may need. + . + + + key + STRING + + Specify the name of the credential key. + + + + value + STRING + + Specify the value for the credential. + + + +{/metadocument} +*/ + Function SetCredential($key,$value) + { + $this->credentials[$key]=$value; + } +/* +{metadocument} + + +{/metadocument} +*/ + +/* +{metadocument} + + GetCredentials + INTEGER + + Retrieve the values of one or more credentials to be used by + the authentication mechanism classes. + This is meant to be used by authentication mechanism driver + classes to retrieve the credentials that may be neede. + The function may return SASL_CONTINUE if it + succeeded, or SASL_NOMECH if it was not possible to + retrieve one of the requested credentials. + + + credentials + HASH + + Reference to an associative array variable with all the + credentials that are being requested. The function initializes + this associative array values. + + + + defaults + HASH + + Associative arrays with default values for credentials + that may have not been defined. + + + + interactions + ARRAY + + Not yet in use. It is meant to provide context + information to retrieve credentials that may be obtained + interacting with the user. + + + +{/metadocument} +*/ + Function GetCredentials(&$credentials,$defaults,&$interactions) + { + Reset($credentials); + $end=(GetType($key=Key($credentials))!="string"); + for(;!$end;) + { + if(!IsSet($this->credentials[$key])) + { + if(IsSet($defaults[$key])) + $credentials[$key]=$defaults[$key]; + else + { + $this->error="the requested credential ".$key." is not defined"; + return(SASL_NOMECH); + } + } + else + $credentials[$key]=$this->credentials[$key]; + Next($credentials); + $end=(GetType($key=Key($credentials))!="string"); + } + return(SASL_CONTINUE); + } +/* +{metadocument} + + +{/metadocument} +*/ + +/* +{metadocument} + + Start + INTEGER + + Process the initial authentication step initializing the + driver class that implements the first of the list of requested + mechanisms that is supported by this SASL client library + implementation. + Call this function specifying a list of mechanisms that the + server supports. If the + message + Start + argument returns a string, it should be sent to + the server as initial message. Check the + encode_response variable to determine + whether the initial message needs to be encoded, eventually with + base64 algorithm, before it is sent to the server. + The function may return SASL_CONTINUE if it + could start one of the requested authentication mechanisms. It + may return SASL_NOMECH if it was not possible to start + any of the requested mechanisms. It returns SASL_FAIL or + other value in case of error. + + + mechanisms + ARRAY + + + Define the list of names of authentication mechanisms + supported by the that should be tried. + + + + message + STRING + + + Return the initial message that should be sent to the + server to start the authentication dialog. If this value is + undefined, no message should be sent to the server. + + + + interactions + ARRAY + + Not yet in use. It is meant to provide context + information to interact with the end user. + + + +{/metadocument} +*/ + Function Start($mechanisms, &$message, &$interactions) + { + if(strlen($this->error)) + return(SASL_FAIL); + if(IsSet($this->driver)) + return($this->driver->Start($this,$message,$interactions)); + $no_mechanism_error=""; + for($m=0;$mdrivers[$mechanism])) + { + if(!class_exists($this->drivers[$mechanism][0])) + require(dirname(__FILE__)."/".$this->drivers[$mechanism][1]); + $this->driver=new $this->drivers[$mechanism][0]; + if($this->driver->Initialize($this)) + { + $this->encode_response=1; + $status=$this->driver->Start($this,$message,$interactions); + switch($status) + { + case SASL_NOMECH: + Unset($this->driver); + if(strlen($no_mechanism_error)==0) + $no_mechanism_error=$this->error; + $this->error=""; + break; + case SASL_CONTINUE: + $this->mechanism=$mechanism; + return($status); + default: + Unset($this->driver); + $this->error=""; + return($status); + } + } + else + { + Unset($this->driver); + if(strlen($no_mechanism_error)==0) + $no_mechanism_error=$this->error; + $this->error=""; + } + } + } + $this->error=(strlen($no_mechanism_error) ? $no_mechanism_error : "it was not requested any of the authentication mechanisms that are supported"); + return(SASL_NOMECH); + } +/* +{metadocument} + + +{/metadocument} +*/ + +/* +{metadocument} + + Step + INTEGER + + Process the authentication steps after the initial step, + until the authetication iteration dialog is complete. + Call this function iteratively after a successful initial + step calling the Start function. + The function returns SASL_CONTINUE if step was + processed successfully, or returns SASL_FAIL in case of + error. + + + response + STRING + + + Pass the response returned by the server to the previous + step. + + + + message + STRING + + + Return the message that should be sent to the server to + continue the authentication dialog. If this value is undefined, + no message should be sent to the server. + + + + interactions + ARRAY + + Not yet in use. It is meant to provide context + information to interact with the end user. + + + +{/metadocument} +*/ + Function Step($response, &$message, &$interactions) + { + if(strlen($this->error)) + return(SASL_FAIL); + return($this->driver->Step($this,$response,$message,$interactions)); + } +/* +{metadocument} + + +{/metadocument} +*/ + +}; + +/* + +{metadocument} + +{/metadocument} + +*/ + +?> diff --git a/usr/etc/inc/service-utils.inc b/usr/etc/inc/service-utils.inc new file mode 100644 index 000000000..297a283ab --- /dev/null +++ b/usr/etc/inc/service-utils.inc @@ -0,0 +1,716 @@ + "") { + eval("\$rc={$aservice['custom_php_service_status_command']};"); + return $rc; + } + if(empty($aservice['executable'])) + return false; + if (is_process_running($aservice['executable'])) + return true; + + return false; + } + } + } + + if (is_process_running($service)) + return true; + + return false; +} + +function get_services() { + global $config; + if (is_array($config['installedpackages']['service'])) + $services = $config['installedpackages']['service']; + else + $services = array(); + + /* Add services that are in the base. + * + */ + if (is_radvd_enabled()) { + $pconfig = array(); + $pconfig['name'] = "radvd"; + $pconfig['description'] = gettext("Router Advertisement Daemon"); + $services[] = $pconfig; + } + + if (isset($config['dnsmasq']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "dnsmasq"; + $pconfig['description'] = gettext("DNS Forwarder"); + $services[] = $pconfig; + } + + if (isset($config['unbound']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "unbound"; + $pconfig['description'] = gettext("Unbound DNS Forwarder"); + $services[] = $pconfig; + } + + $pconfig = array(); + $pconfig['name'] = "ntpd"; + $pconfig['description'] = gettext("NTP clock sync"); + $services[] = $pconfig; + + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $zone => $setting) { + if (isset($setting['enable'])) { + $pconfig = array(); + $pconfig['name'] = "captiveportal"; + $pconfig['zone'] = $zone; + $pconfig['description'] = gettext("Captive Portal") . ": ".htmlspecialchars($setting['zone']); + $services[] = $pconfig; + } + } + } + + $iflist = array(); + $ifdescrs = get_configured_interface_list(); + foreach ($ifdescrs as $if) { + $oc = $config['interfaces'][$if]; + if ($oc['if'] && (!link_interface_to_bridge($if))) + $iflist[$if] = $if; + } + + if (isset($config['dhcrelay']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "dhcrelay"; + $pconfig['description'] = gettext("DHCP Relay"); + $services[] = $pconfig; + } + + if (isset($config['dhcrelay6']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "dhcrelay6"; + $pconfig['description'] = gettext("DHCPv6 Relay"); + $services[] = $pconfig; + } + + if (is_dhcp_server_enabled()) { + $pconfig = array(); + $pconfig['name'] = "dhcpd"; + $pconfig['description'] = gettext("DHCP Service"); + $services[] = $pconfig; + } + + $gateways_arr = return_gateways_array(); + if (is_array($gateways_arr)) { + $pconfig = array(); + $pconfig['name'] = "apinger"; + $pconfig['description'] = gettext("Gateway Monitoring Daemon"); + $services[] = $pconfig; + } + + if (isset($config['snmpd']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "bsnmpd"; + $pconfig['description'] = gettext("SNMP Service"); + $services[] = $pconfig; + } + + if (is_array($config['igmpproxy']['igmpentry']) && (count($config['igmpproxy']['igmpentry']) > 0)) { + $pconfig = array(); + $pconfig['name'] = "igmpproxy"; + $pconfig['description'] = gettext("IGMP proxy"); + $services[] = $pconfig; + } + + if (isset($config['installedpackages']['miniupnpd']) && $config['installedpackages']['miniupnpd']['config'][0]['enable']) { + $pconfig = array(); + $pconfig['name'] = "miniupnpd"; + $pconfig['description'] = gettext("UPnP Service"); + $services[] = $pconfig; + } + + if (isset($config['installedpackages']['routed']) && $config['installedpackages']['routed']['config'][0]['enable']) { + $pconfig = array(); + $pconfig['name'] = "routed"; + $pconfig['description'] = gettext("RIP Daemon"); + $services[] = $pconfig; + } + + if (isset($config['ipsec']['enable'])) { + $pconfig = array(); + $pconfig['name'] = "ipsec"; + $pconfig['description'] = gettext("IPsec VPN"); + $services[] = $pconfig; + } + + if (isset($config['system']['enablesshd'])) { + $pconfig = array(); + $pconfig['name'] = "sshd"; + $pconfig['description'] = gettext("Secure Shell Daemon"); + $services[] = $pconfig; + } + + foreach (array('server', 'client') as $mode) { + if (is_array($config['openvpn']["openvpn-{$mode}"])) { + foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) { + if (!isset($setting['disable'])) { + $pconfig = array(); + $pconfig['name'] = "openvpn"; + $pconfig['mode'] = $mode; + $pconfig['id'] = $id; + $pconfig['vpnid'] = $setting['vpnid']; + $pconfig['description'] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']); + $services[] = $pconfig; + } + } + } + } + + if (count($config['load_balancer']['virtual_server']) && count($config['load_balancer']['lbpool'])) { + $pconfig = array(); + $pconfig['name'] = "relayd"; + $pconfig['description'] = gettext("Server load balancing daemon"); + $services[] = $pconfig; + } + return $services; +} + +function find_service_by_name($name) { + $services = get_services(); + foreach ($services as $service) + if ($service["name"] == $name) + return $service; + return array(); +} + +function find_service_by_openvpn_vpnid($vpnid) { + $services = get_services(); + foreach ($services as $service) + if (($service["name"] == "openvpn") && isset($service["vpnid"]) && ($service["vpnid"] == $vpnid)) + return $service; + return array(); +} + +function find_service_by_cp_zone($zone) { + $services = get_services(); + foreach ($services as $service) + if (($service["name"] == "captiveportal") && isset($service["zone"]) && ($service["zone"] == $zone)) + return $service; + return array(); +} + +function service_name_compare($a, $b) { + if (strtolower($a['name']) == strtolower($b['name'])) + return 0; + return (strtolower($a['name']) < strtolower($b['name'])) ? -1 : 1; +} + +function get_pkg_descr($package_name) { + global $config; + if (is_array($config['installedpackages']['package'])) { + foreach($config['installedpackages']['package'] as $pkg) { + if($pkg['name'] == $package_name) + return $pkg['descr']; + } + } + return gettext("Not available."); +} + +function get_service_status($service) { + global $g; + switch ($service['name']) { + case "openvpn": + $running = is_pid_running("{$g['varrun_path']}/openvpn_{$service['mode']}{$service['vpnid']}.pid"); + break; + case "captiveportal": + $running = is_pid_running("{$g['varrun_path']}/lighty-{$service['zone']}-CaptivePortal.pid"); + if (isset($config['captiveportal'][$service['zone']]['httpslogin'])) + $running = $running && is_pid_running("{$g['varrun_path']}/lighty-{$service['zone']}-CaptivePortal-SSL.pid"); + break; + case "vhosts-http": + $running = is_pid_running("{$g['varrun_path']}/vhosts-http.pid"); + break; + case "dhcrelay6": + $running = is_pid_running("{$g['varrun_path']}/dhcrelay6.pid"); + break; + case 'ipsec': + $running = is_pid_running("{$g['varrun_path']}/charon.pid"); + break; + default: + $running = is_service_running($service['name']); + } + return $running; +} + +function get_service_status_icon($service, $withtext = true, $smallicon = false) { + global $g; + $output = ""; + if(get_service_status($service)) { + $statustext = gettext("Running"); + $output .= "\"status\" "; + if ($withtext) + $output .= " " . $statustext; + } else { + $service_enabled = is_service_enabled($service['name']); + $statustext = ($service_enabled) ? gettext("Stopped") : gettext("Disabled"); + $output .= "\"status\" "; + if ($withtext) + $output .= " {$statustext}"; + } + return $output; +} + +function get_service_control_links($service, $addname = false) { + global $g; + $output = ""; + $stitle = ($addname) ? $service['name'] . " " : ""; + if(get_service_status($service)) { + switch ($service['name']) { + case "openvpn": + $output .= ""; + break; + case "captiveportal": + $output .= ""; + break; + default: + $output .= ""; + } + $output .= "restart\n"; + switch ($service['name']) { + case "openvpn": + $output .= ""; + break; + case "captiveportal": + $output .= ""; + break; + default: + $output .= ""; + } + $output .= "stop"; + $output .= ""; + } else { + $service_enabled = is_service_enabled($service['name']); + switch ($service['name']) { + case "openvpn": + $output .= ""; + break; + case "captiveportal": + $output .= ""; + break; + default: + if ($service_enabled) + $output .= ""; + } + if ($service_enabled) + $output .= "start\n"; + } + return $output; +} + +function service_control_start($name, $extras) { + global $g; + switch($name) { + case 'radvd': + services_radvd_configure(); + break; + case 'captiveportal': + $zone = htmlspecialchars($extras['zone']); + captiveportal_init_webgui_zonename($zone); + break; + case 'ntpd': + case 'openntpd': + system_ntp_configure(); + break; + case 'apinger': + setup_gateways_monitor(); + break; + case 'bsnmpd': + services_snmpd_configure(); + break; + case 'dhcrelay': + services_dhcrelay_configure(); + break; + case 'dhcrelay6': + services_dhcrelay6_configure(); + break; + case 'dnsmasq': + services_dnsmasq_configure(); + break; + case 'dhcpd': + services_dhcpd_configure(); + break; + case 'igmpproxy': + services_igmpproxy_configure(); + break; + case 'miniupnpd': + upnp_action('start'); + break; + case 'ipsec': + vpn_ipsec_force_reload(); + break; + case 'sshd': + send_event("service restart sshd"); + break; + case 'openvpn': + $vpnmode = isset($extras['vpnmode']) ? htmlspecialchars($extras['vpnmode']) : htmlspecialchars($extras['mode']); + if (($vpnmode == "server") || ($vpnmode == "client")) { + $id = isset($extras['vpnid']) ? htmlspecialchars($extras['vpnid']) : htmlspecialchars($extras['id']); + $configfile = "{$g['varetc_path']}/openvpn/{$vpnmode}{$id}.conf"; + if (file_exists($configfile)) + openvpn_restart_by_vpnid($vpnmode, $id); + } + break; + case 'relayd': + relayd_configure(); + break; + default: + start_service($name); + break; + } + return sprintf(gettext("%s has been started."),htmlspecialchars($name)); +} +function service_control_stop($name, $extras) { + global $g; + switch($name) { + case 'radvd': + killbypid("{$g['varrun_path']}/radvd.pid"); + break; + case 'captiveportal': + $zone = htmlspecialchars($extras['zone']); + killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal.pid"); + killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal-SSL.pid"); + break; + case 'ntpd': + killbyname("ntpd"); + break; + case 'openntpd': + killbyname("openntpd"); + break; + case 'apinger': + killbypid("{$g['varrun_path']}/apinger.pid"); + break; + case 'bsnmpd': + killbypid("{$g['varrun_path']}/snmpd.pid"); + break; + case 'choparp': + killbyname("choparp"); + break; + case 'dhcpd': + killbyname("dhcpd"); + break; + case 'dhcrelay': + killbypid("{$g['varrun_path']}/dhcrelay.pid"); + break; + case 'dhcrelay6': + killbypid("{$g['varrun_path']}/dhcrelay6.pid"); + break; + case 'dnsmasq': + killbypid("{$g['varrun_path']}/dnsmasq.pid"); + break; + case 'unbound': + killbypid("{$g['varrun_path']}/unbound.pid"); + break; + case 'igmpproxy': + killbyname("igmpproxy"); + break; + case 'miniupnpd': + upnp_action('stop'); + break; + case 'sshd': + killbyname("sshd"); + break; + case 'ipsec': + exec("/usr/local/sbin/ipsec stop"); + break; + case 'openvpn': + $vpnmode = htmlspecialchars($extras['vpnmode']); + if (($vpnmode == "server") or ($vpnmode == "client")) { + $id = htmlspecialchars($extras['id']); + $pidfile = "{$g['varrun_path']}/openvpn_{$vpnmode}{$id}.pid"; + killbypid($pidfile); + } + break; + case 'relayd': + mwexec('pkill relayd'); + break; + default: + stop_service($name); + break; + } + return sprintf(gettext("%s has been stopped."), htmlspecialchars($name)); +} + +function service_control_restart($name, $extras) { + global $g; + switch($name) { + case 'radvd': + services_radvd_configure(); + break; + case 'captiveportal': + $zone = htmlspecialchars($extras['zone']); + killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal.pid"); + killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal-SSL.pid"); + captiveportal_init_webgui_zonename($zone); + break; + case 'ntpd': + case 'openntpd': + system_ntp_configure(); + break; + case 'apinger': + killbypid("{$g['varrun_path']}/apinger.pid"); + setup_gateways_monitor(); + break; + case 'bsnmpd': + services_snmpd_configure(); + break; + case 'dhcrelay': + services_dhcrelay_configure(); + break; + case 'dhcrelay6': + services_dhcrelay6_configure(); + break; + case 'dnsmasq': + services_dnsmasq_configure(); + break; + case 'unbound': + services_unbound_configure(); + break; + case 'dhcpd': + services_dhcpd_configure(); + break; + case 'igmpproxy': + services_igmpproxy_configure(); + break; + case 'miniupnpd': + upnp_action('restart'); + break; + case 'ipsec': + vpn_ipsec_force_reload(); + break; + case 'sshd': + send_event("service restart sshd"); + break; + case 'openvpn': + $vpnmode = htmlspecialchars($extras['vpnmode']); + if ($vpnmode == "server" || $vpnmode == "client") { + $id = htmlspecialchars($extras['id']); + $configfile = "{$g['varetc_path']}/openvpn/{$vpnmode}{$id}.conf"; + if (file_exists($configfile)) + openvpn_restart_by_vpnid($vpnmode, $id); + } + break; + case 'relayd': + relayd_configure(true); + break; + default: + restart_service($name); + break; + } + return sprintf(gettext("%s has been restarted."),htmlspecialchars($name)); +} + +?> diff --git a/usr/etc/inc/services.inc b/usr/etc/inc/services.inc new file mode 100644 index 000000000..79e205d75 --- /dev/null +++ b/usr/etc/inc/services.inc @@ -0,0 +1,2374 @@ +. + Copyright (C) 2010 Ermal Luci + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/bin/killall /bin/pgrep /bin/sh /usr/local/sbin/dhcpd /usr/local/sbin/igmpproxy + pfSense_BUILDER_BINARIES: /sbin/ifconfig /usr/local/sbin/dnsmasq + pfSense_BUILDER_BINARIES: /usr/local/sbin/miniupnpd /usr/sbin/radvd + pfSense_BUILDER_BINARIES: /usr/local/sbin/dhcleases6 /usr/sbin/bsnmpd + pfSense_MODULE: utils +*/ + +define('DYNDNS_PROVIDER_VALUES', 'dnsomatic dyndns dyndns-static dyndns-custom dhs dyns easydns noip noip-free ods zoneedit loopia freedns dnsexit opendns namecheap he-net he-net-v6 he-net-tunnelbroker selfhost route53 cloudflare custom custom-v6 eurodns gratisdns ovh-dynhost citynetwork'); +define('DYNDNS_PROVIDER_DESCRIPTIONS', 'DNS-O-Matic,DynDNS (dynamic),DynDNS (static),DynDNS (custom),DHS,DyNS,easyDNS,No-IP,No-IP (free),ODS.org,ZoneEdit,Loopia,freeDNS,DNSexit,OpenDNS,Namecheap,HE.net,HE.net (v6),HE.net Tunnelbroker,SelfHost,Route 53,CloudFlare,Custom,Custom (v6),Euro Dns,GratisDNS,OVH DynHOST,City Network'); + +/* implement ipv6 route advertising deamon */ +function services_radvd_configure($blacklist = array()) { + global $config, $g; + + if ($g['platform'] == 'jail') + return; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_radvd_configure() being called $mt\n"; + } + + if (!is_array($config['dhcpdv6'])) + $config['dhcpdv6'] = array(); + + $Iflist = get_configured_interface_list(); + $Iflist = array_merge($Iflist, get_configured_pppoe_server_interfaces()); + $carplist = get_configured_carp_interface_list(); + + $radvdconf = "# Automatically Generated, do not edit\n"; + + /* Process all links which need the router advertise daemon */ + $radvdifs = array(); + + /* handle manually configured DHCP6 server settings first */ + foreach ($config['dhcpdv6'] as $dhcpv6if => $dhcpv6ifconf) { + if (!is_array($config['interfaces'][$dhcpv6if])) + continue; + if (!isset($config['interfaces'][$dhcpv6if]['enable'])) + continue; + + /* Do not put in the config an interface which is down */ + if (isset($blacklist[$dhcpv6if])) + continue; + if (!isset($dhcpv6ifconf['ramode'])) + $dhcpv6ifconf['ramode'] = $dhcpv6ifconf['mode']; + + /* are router advertisements enabled? */ + if ($dhcpv6ifconf['ramode'] == "disabled") + continue; + + if (!isset($dhcpv6ifconf['rapriority'])) + $dhcpv6ifconf['rapriority'] = "medium"; + + /* always start with the real parent, we override with the carp if later */ + $carpif = false; + /* check if we need to listen on a CARP interface */ + if (!empty($dhcpv6ifconf['rainterface'])) { + if (!empty($carplist[$dhcpv6ifconf['rainterface']])) { + $dhcpv6if = $dhcpv6ifconf['rainterface']; + $carpif = true; + } + } + + $realif = get_real_interface($dhcpv6if, "inet6"); + if (isset($radvdifs[$realif])) + continue; + + $ifcfgipv6 = get_interface_ipv6($dhcpv6if); + if (!is_ipaddrv6($ifcfgipv6)) + continue; + + $ifcfgsnv6 = get_interface_subnetv6($dhcpv6if); + $subnetv6 = gen_subnetv6($ifcfgipv6, $ifcfgsnv6); + $radvdifs[$realif] = $realif; + + $radvdconf .= "# Generated for DHCPv6 Server $dhcpv6if\n"; + $radvdconf .= "interface {$realif} {\n"; + $radvdconf .= "\tAdvSendAdvert on;\n"; + $radvdconf .= "\tMinRtrAdvInterval 5;\n"; + $radvdconf .= "\tMaxRtrAdvInterval 20;\n"; + $mtu = get_interface_mtu($realif); + if (is_numeric($mtu)) + $radvdconf .= "\tAdvLinkMTU {$mtu};\n"; + else + $radvdconf .= "\tAdvLinkMTU 1280;\n"; + // $radvdconf .= "\tDeprecatePrefix on;\n"; + switch($dhcpv6ifconf['rapriority']) { + case "low": + $radvdconf .= "\tAdvDefaultPreference low;\n"; + break; + case "high": + $radvdconf .= "\tAdvDefaultPreference high;\n"; + break; + default: + $radvdconf .= "\tAdvDefaultPreference medium;\n"; + break; + } + switch($dhcpv6ifconf['ramode']) { + case "managed": + case "assist": + $radvdconf .= "\tAdvManagedFlag on;\n"; + $radvdconf .= "\tAdvOtherConfigFlag on;\n"; + break; + } + $radvdconf .= "\tprefix {$subnetv6}/{$ifcfgsnv6} {\n"; + if($carpif == true) { + $radvdconf .= "\t\tDeprecatePrefix off;\n"; + } else { + $radvdconf .= "\t\tDeprecatePrefix on;\n"; + } + switch($dhcpv6ifconf['ramode']) { + case "managed": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous off;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "router": + $radvdconf .= "\t\tAdvOnLink off;\n"; + $radvdconf .= "\t\tAdvAutonomous off;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "assist": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous on;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "unmanaged": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous on;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + } + $radvdconf .= "\t};\n"; + + if($carpif === true) { + $radvdconf .= "\troute ::/0 {\n"; + $radvdconf .= "\t\tRemoveRoute off;\n"; + $radvdconf .= "\t};\n"; + } else { + $radvdconf .= "\troute ::/0 {\n"; + $radvdconf .= "\t\tRemoveRoute on;\n"; + $radvdconf .= "\t};\n"; + } + + /* add DNS servers */ + $dnslist = array(); + if (isset($dhcpv6ifconf['rasamednsasdhcp6']) && is_array($dhcpv6ifconf['dnsserver']) && !empty($dhcpv6ifconf['dnsserver'])) { + foreach($dhcpv6ifconf['dnsserver'] as $server) + if (is_ipaddrv6($server)) + $dnslist[] = $server; + } elseif (!isset($dhcpv6ifconf['rasamednsasdhcp6']) && isset($dhcpv6ifconf['radnsserver']) && is_array($dhcpv6ifconf['radnsserver'])) { + foreach($dhcpv6ifconf['radnsserver'] as $server) + if (is_ipaddrv6($server)) + $dnslist[] = $server; + } elseif (isset($config['dnsmasq']['enable'])) { + $dnslist[] = get_interface_ipv6($realif); + } elseif (is_array($config['system']['dnsserver']) && !empty($config['system']['dnsserver'])) { + foreach($config['system']['dnsserver'] as $server) { + if (is_ipaddrv6($server)) + $dnslist[] = $server; + } + } + if (count($dnslist) > 0) { + $dnsstring = implode(" ", $dnslist); + if ($dnsstring <> "") + $radvdconf .= "\tRDNSS {$dnsstring} { };\n"; + } + if (!empty($dhcpv6ifconf['domain'])) { + $radvdconf .= "\tDNSSL {$dhcpv6ifconf['domain']} { };\n"; + } elseif (!empty($config['system']['domain'])) { + $radvdconf .= "\tDNSSL {$config['system']['domain']} { };\n"; + } + $radvdconf .= "};\n"; + } + + /* handle DHCP-PD prefixes and 6RD dynamic interfaces */ + foreach ($Iflist as $if => $ifdescr) { + if(!isset($config['interfaces'][$if]['track6-interface'])) + continue; + if(!isset($config['interfaces'][$if]['enable'])) + continue; + /* Do not put in the config an interface which is down */ + if (isset($blacklist[$if])) + continue; + $trackif = $config['interfaces'][$if]['track6-interface']; + if (empty($config['interfaces'][$trackif])) + continue; + + $realif = get_real_interface($if, "inet6"); + /* prevent duplicate entries, manual overrides */ + if (isset($radvdifs[$realif])) + continue; + + $ifcfgipv6 = get_interface_ipv6($if); + if(!is_ipaddrv6($ifcfgipv6)) { + $subnetv6 = "::"; + $ifcfgsnv6 = "64"; + } else { + $ifcfgsnv6 = get_interface_subnetv6($if); + $subnetv6 = gen_subnetv6($ifcfgipv6, $ifcfgsnv6); + } + $radvdifs[$realif] = $realif; + + $autotype = $config['interfaces'][$trackif]['ipaddrv6']; + + if ($g['debug']) + log_error("configuring RA on {$if} for type {$autotype} radvd subnet {$subnetv6}/{$ifcfgsnv6}"); + + $radvdconf .= "# Generated config for {$autotype} delegation from {$trackif} on {$if}\n"; + $radvdconf .= "interface {$realif} {\n"; + $radvdconf .= "\tAdvSendAdvert on;\n"; + $radvdconf .= "\tMinRtrAdvInterval 3;\n"; + $radvdconf .= "\tMaxRtrAdvInterval 10;\n"; + $mtu = get_interface_mtu($realif); + if (is_numeric($mtu)) + $radvdconf .= "\tAdvLinkMTU {$mtu};\n"; + else + $radvdconf .= "\tAdvLinkMTU 1280;\n"; + $radvdconf .= "\tAdvOtherConfigFlag on;\n"; + $radvdconf .= "\t\tprefix {$subnetv6}/{$ifcfgsnv6} {\n"; + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous on;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + $radvdconf .= "\t};\n"; + + /* add DNS servers */ + $dnslist = array(); + if (isset($config['dnsmasq']['enable'])) { + $dnslist[] = $ifcfgipv6; + } elseif (is_array($config['system']['dnsserver']) && !empty($config['system']['dnsserver'])) { + foreach($config['system']['dnsserver'] as $server) { + if(is_ipaddrv6($server)) + $dnslist[] = $server; + } + } + if (count($dnslist) > 0) { + $dnsstring = implode(" ", $dnslist); + if (!empty($dnsstring)) + $radvdconf .= "\tRDNSS {$dnsstring} { };\n"; + } + if (!empty($config['system']['domain'])) { + $radvdconf .= "\tDNSSL {$config['system']['domain']} { };\n"; + } + $radvdconf .= "};\n"; + } + + /* write radvd.conf */ + if (!@file_put_contents("{$g['varetc_path']}/radvd.conf", $radvdconf)) { + log_error("Error: cannot open radvd.conf in services_radvd_configure().\n"); + if ($g['booting']) + printf("Error: cannot open radvd.conf in services_radvd_configure().\n"); + } + unset($radvdconf); + + if (count($radvdifs) > 0) { + if (isvalidpid("{$g['varrun_path']}/radvd.pid")) + sigkillbypid("{$g['varrun_path']}/radvd.pid", "HUP"); + else + mwexec("/usr/local/sbin/radvd -p {$g['varrun_path']}/radvd.pid -C {$g['varetc_path']}/radvd.conf -m syslog"); + } else { + /* we need to shut down the radvd cleanly, it will send out the prefix + * information with a lifetime of 0 to notify clients of a (possible) new prefix */ + if (isvalidpid("{$g['varrun_path']}/radvd.pid")) { + log_error("Shutting down Router Advertisment daemon cleanly"); + killbypid("{$g['varrun_path']}/radvd.pid"); + @unlink("{$g['varrun_path']}/radvd.pid"); + } + } + return 0; +} + +function services_dhcpd_configure($family = "all", $blacklist = array()) { + global $config, $g; + + /* configure DHCPD chroot once */ + $fd = fopen("{$g['tmp_path']}/dhcpd.sh","w"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/dev\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/etc\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/usr/local/sbin\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/var/db\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/var/run\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/usr\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/lib\n"); + fwrite($fd, "/bin/mkdir -p {$g['dhcpd_chroot_path']}/run\n"); + fwrite($fd, "/usr/sbin/chown -R dhcpd:_dhcp {$g['dhcpd_chroot_path']}/*\n"); + fwrite($fd, "/bin/cp -n /lib/libc.so.* {$g['dhcpd_chroot_path']}/lib/\n"); + fwrite($fd, "/bin/cp -n /usr/local/sbin/dhcpd {$g['dhcpd_chroot_path']}/usr/local/sbin/\n"); + fwrite($fd, "/bin/chmod a+rx {$g['dhcpd_chroot_path']}/usr/local/sbin/dhcpd\n"); + + $status = `/sbin/mount | /usr/bin/grep -v grep | /usr/bin/grep "{$g['dhcpd_chroot_path']}/dev"`; + if (!trim($status)) + fwrite($fd, "/sbin/mount -t devfs devfs {$g['dhcpd_chroot_path']}/dev\n"); + fclose($fd); + mwexec("/bin/sh {$g['tmp_path']}/dhcpd.sh"); + + if ($family == "all" || $family == "inet") + services_dhcpdv4_configure(); + if ($family == "all" || $family == "inet6") { + services_dhcpdv6_configure($blacklist); + services_radvd_configure($blacklist); + } +} + +function services_dhcpdv4_configure() { + global $config, $g; + $need_ddns_updates = false; + $ddns_zones = array(); + + if($g['services_dhcp_server_enable'] == false) + return; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dhcpdv4_configure($if) being called $mt\n"; + } + + /* kill any running dhcpd */ + if (isvalidpid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpd.pid")) + killbypid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpd.pid"); + + /* DHCP enabled on any interfaces? */ + if (!is_dhcp_server_enabled()) + return 0; + + /* if OLSRD is enabled, allow WAN to house DHCP. */ + if (!function_exists('is_package_installed')) + require_once('pkg-utils.inc'); + if (is_package_installed('olsrd') && isset($config['installedpackages']['olsrd'])) + foreach($config['installedpackages']['olsrd']['config'] as $olsrd) + if (isset($olsrd['enable']) && $olsrd['enable'] == "on") { + $is_olsr_enabled = true; + break; + } + + if ($g['booting']) { + /* restore the leases, if we have them */ + if (file_exists("{$g['cf_conf_path']}/dhcpleases.tgz")) { + $dhcprestore = ""; + $dhcpreturn = ""; + exec("cd /;LANG=C /usr/bin/tar -xzf {$g['cf_conf_path']}/dhcpleases.tgz 2>&1", $dhcprestore, $dhcpreturn); + $dhcprestore = implode(" ", $dhcprestore); + if($dhcpreturn <> 0) { + log_error(sprintf(gettext('DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s'), $dhcpreturn, $dhcprestore, "\n")); + } + } + /* If this backup is still there on a full install, but we aren't going to use ram disks, remove the archive since this is a transition. */ + if (($g['platform'] == "pfSense") && !isset($config['system']['use_mfs_tmpvar'])) { + unlink_if_exists("{$g['cf_conf_path']}/dhcpleases.tgz"); + } + } + + $syscfg = $config['system']; + if (!is_array($config['dhcpd'])) + $config['dhcpd'] = array(); + $dhcpdcfg = $config['dhcpd']; + $Iflist = get_configured_interface_list(); + + /* Only consider DNS servers with IPv4 addresses for the IPv4 DHCP server. */ + $dns_arrv4 = array(); + if (is_array($syscfg['dnsserver'])) { + foreach($syscfg['dnsserver'] as $dnsserver) { + if (is_ipaddrv4($dnsserver)) { + $dns_arrv4[] = $dnsserver; + } + } + } + + if ($g['booting']) + echo gettext("Starting DHCP service..."); + else + sleep(1); + + $custoptions = ""; + foreach ($dhcpdcfg as $dhcpif => $dhcpifconf) { + if(is_array($dhcpifconf['numberoptions']) && is_array($dhcpifconf['numberoptions']['item'])) { + foreach($dhcpifconf['numberoptions']['item'] as $itemidx => $item) { + if(!empty($item['type'])) + $itemtype = $item['type']; + else + $itemtype = "text"; + $custoptions .= "option custom-{$dhcpif}-{$itemidx} code {$item['number']} = {$itemtype};\n"; + } + } + } + + $dhcpdconf = << $dhcpifconf) { + + interfaces_staticarp_configure($dhcpif); + + if (!isset($dhcpifconf['enable'])) + continue; + + if($dhcpifconf['failover_peerip'] <> "") { + $intip = get_interface_ip($dhcpif); + /* + * yep, failover peer is defined. + * does it match up to a defined vip? + */ + $skew = 110; + if(is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vipent) { + if($vipent['interface'] == $dhcpif) { + $carp_nw = gen_subnet($vipent['subnet'], $vipent['subnet_bits']); + if (ip_in_subnet($dhcpifconf['failover_peerip'], "{$carp_nw}/{$vipent['subnet_bits']}")) { + /* this is the interface! */ + if(is_numeric($vipent['advskew']) && (intval($vipent['advskew']) < 20)) { + $skew = 0; + break; + } + } + } + } + } else { + log_error(gettext("Warning! DHCP Failover setup and no CARP virtual IPs defined!")); + } + if($skew > 10) { + $type = "secondary"; + $my_port = "520"; + $peer_port = "519"; + } else { + $my_port = "519"; + $peer_port = "520"; + $type = "primary"; + $dhcpdconf_pri = "split 128;\n"; + $dhcpdconf_pri .= " mclt 600;\n"; + } + + if (is_ipaddrv4($intip)) { + $dhcpdconf .= << $dhcpifconf) { + + $newzone = array(); + $ifcfg = $config['interfaces'][$dhcpif]; + + if (!isset($dhcpifconf['enable']) || !isset($Iflist[$dhcpif])) + continue; + $ifcfgip = get_interface_ip($dhcpif); + $ifcfgsn = get_interface_subnet($dhcpif); + $subnet = gen_subnet($ifcfgip, $ifcfgsn); + $subnetmask = gen_subnet_mask($ifcfgsn); + + if (!is_ipaddr($subnet)) + continue; + + if($is_olsr_enabled == true) + if($dhcpifconf['netmask']) + $subnetmask = gen_subnet_mask($dhcpifconf['netmask']); + + $all_pools = array(); + $all_pools[] = $dhcpifconf; + if (is_array($dhcpifconf['pool'])) { + $all_pools = array_merge($all_pools, $dhcpifconf['pool']); + } + + $dnscfg = ""; + + if ($dhcpifconf['domain']) { + $dnscfg .= " option domain-name \"{$dhcpifconf['domain']}\";\n"; + } + + if($dhcpifconf['domainsearchlist'] <> "") { + $dnscfg .= " option domain-search \"" . join("\",\"", preg_split("/[ ;]+/", $dhcpifconf['domainsearchlist'])) . "\";\n"; + } + + if (isset($dhcpifconf['ddnsupdate'])) { + $need_ddns_updates = true; + $newzone = array(); + if($dhcpifconf['ddnsdomain'] <> "") { + $newzone['domain-name'] = $dhcpifconf['ddnsdomain']; + $dnscfg .= " ddns-domainname \"{$dhcpifconf['ddnsdomain']}\";\n"; + } else { + $newzone['domain-name'] = $config['system']['domain']; + } + $revsubnet = explode(".", $subnet); + $revsubnet = array_reverse($revsubnet); + foreach ($revsubnet as $octet) { + if ($octet != "0") + break; + array_shift($revsubnet); + } + $newzone['ptr-domain'] = implode(".", $revsubnet) . ".in-addr.arpa"; + } + + if (is_array($dhcpifconf['dnsserver']) && ($dhcpifconf['dnsserver'][0])) { + $dnscfg .= " option domain-name-servers " . join(",", $dhcpifconf['dnsserver']) . ";"; + if ($newzone['domain-name']) + $newzone['dns-servers'] = $dhcpifconf['dnsserver']; + } else if (isset($config['dnsmasq']['enable'])) { + $dnscfg .= " option domain-name-servers {$ifcfgip};"; + if ($newzone['domain-name'] && is_array($syscfg['dnsserver']) && ($syscfg['dnsserver'][0])) + $newzone['dns-servers'] = $syscfg['dnsserver']; + } else if (!empty($dns_arrv4)) { + $dnscfg .= " option domain-name-servers " . join(",", $dns_arrv4) . ";"; + if ($newzone['domain-name']) + $newzone['dns-servers'] = $dns_arrv4; + } + + /* Create classes - These all contain comma separated lists. Join them into one + big comma separated string then split them all up. */ + $all_mac_strings = array(); + if (is_array($dhcpifconf['pool'])) { + foreach($all_pools as $poolconf) { + $all_mac_strings[] = $poolconf['mac_allow']; + $all_mac_strings[] = $poolconf['mac_deny']; + } + } + $all_mac_strings[] = $dhcpifconf['mac_allow']; + $all_mac_strings[] = $dhcpifconf['mac_deny']; + $all_mac_list = array_unique(explode(',', implode(',', $all_mac_strings))); + foreach ($all_mac_list as $mac) { + if (empty($mac)) + continue; + $dhcpdconf .= 'class "' . str_replace(':', '', $mac) . '" {' . "\n"; + // Skip the first octet of the MAC address - for media type, typically Ethernet ("01") and match the rest. + $dhcpdconf .= ' match if substring (hardware, 1, ' . (substr_count($mac, ':') + 1) . ') = ' . $mac . ';' . "\n"; + $dhcpdconf .= '}' . "\n"; + } + + $dhcpdconf .= "subnet {$subnet} netmask {$subnetmask} {\n"; + +// Setup pool options + foreach($all_pools as $poolconf) { + $dhcpdconf .= " pool {\n"; + /* is failover dns setup? */ + if (is_array($poolconf['dnsserver']) && $poolconf['dnsserver'][0] <> "") { + $dhcpdconf .= " option domain-name-servers {$poolconf['dnsserver'][0]}"; + if($poolconf['dnsserver'][1] <> "") + $dhcpdconf .= ",{$poolconf['dnsserver'][1]}"; + $dhcpdconf .= ";\n"; + } + + /* allow/deny MACs */ + $mac_allow_list = array_unique(explode(',', $poolconf['mac_allow'])); + foreach ($mac_allow_list as $mac) { + if (empty($mac)) + continue; + $dhcpdconf .= " allow members of \"" . str_replace(':', '', $mac) . "\";\n"; + } + $mac_deny_list = array_unique(explode(',', $poolconf['mac_deny'])); + foreach ($mac_deny_list as $mac) { + if (empty($mac)) + continue; + $dhcpdconf .= " deny members of \"" . str_replace(':', '', $mac) . "\";\n"; + } + + if($poolconf['failover_peerip'] <> "") + $dhcpdconf .= " deny dynamic bootp clients;\n"; + + if (isset($poolconf['denyunknown'])) + $dhcpdconf .= " deny unknown-clients;\n"; + + if ($poolconf['gateway'] && $poolconf['gateway'] != "none" && ($poolconf['gateway'] != $dhcpifconf['gateway'])) + $dhcpdconf .= " option routers {$poolconf['gateway']};\n"; + + if($dhcpifconf['failover_peerip'] <> "") { + $dhcpdconf .= " failover peer \"dhcp_{$dhcpif}\";\n"; + } + + $pdnscfg = ""; + + if ($poolconf['domain'] && ($poolconf['domain'] != $dhcpifconf['domain'])) { + $pdnscfg .= " option domain-name \"{$poolconf['domain']}\";\n"; + } + + if(!empty($poolconf['domainsearchlist']) && ($poolconf['domainsearchlist'] != $dhcpifconf['domainsearchlist'])) { + $pdnscfg .= " option domain-search \"" . join("\",\"", preg_split("/[ ;]+/", $poolconf['domainsearchlist'])) . "\";\n"; + } + + if (isset($poolconf['ddnsupdate'])) { + if (($poolconf['ddnsdomain'] <> "") && ($poolconf['ddnsdomain'] != $dhcpifconf['ddnsdomain'])) + $pdnscfg .= " ddns-domainname \"{$poolconf['ddnsdomain']}\";\n"; + $pdnscfg .= " ddns-update-style interim;\n"; + } + + if (is_array($poolconf['dnsserver']) && ($poolconf['dnsserver'][0]) && ($poolconf['dnsserver'][0] != $dhcpifconf['dnsserver'][0])) { + $pdnscfg .= " option domain-name-servers " . join(",", $poolconf['dnsserver']) . ";\n"; + } + $dhcpdconf .= "{$pdnscfg}"; + + // default-lease-time + if ($poolconf['defaultleasetime'] && ($poolconf['defaultleasetime'] != $dhcpifconf['defaultleasetime'])) + $dhcpdconf .= " default-lease-time {$poolconf['defaultleasetime']};\n"; + + // max-lease-time + if ($poolconf['maxleasetime'] && ($poolconf['maxleasetime'] != $dhcpifconf['maxleasetime'])) + $dhcpdconf .= " max-lease-time {$poolconf['maxleasetime']};\n"; + + // netbios-name* + if (is_array($poolconf['winsserver']) && $poolconf['winsserver'][0] && ($poolconf['winsserver'][0] != $dhcpifconf['winsserver'][0])) { + $dhcpdconf .= " option netbios-name-servers " . join(",", $poolconf['winsserver']) . ";\n"; + $dhcpdconf .= " option netbios-node-type 8;\n"; + } + + // ntp-servers + if (is_array($poolconf['ntpserver']) && $poolconf['ntpserver'][0] && ($poolconf['ntpserver'][0] != $dhcpifconf['ntpserver'][0])) + $dhcpdconf .= " option ntp-servers " . join(",", $poolconf['ntpserver']) . ";\n"; + + // tftp-server-name + if (!empty($poolconf['tftp']) && ($poolconf['tftp'] != $dhcpifconf['tftp'])) + $dhcpdconf .= " option tftp-server-name \"{$poolconf['tftp']}\";\n"; + + // ldap-server + if (!empty($poolconf['ldap']) && ($poolconf['ldap'] != $dhcpifconf['ldap'])) + $dhcpdconf .= " option ldap-server \"{$poolconf['ldap']}\";\n"; + + // net boot information + if(isset($poolconf['netboot'])) { + if (!empty($poolconf['nextserver']) && ($poolconf['nextserver'] != $dhcpifconf['nextserver'])) { + $dhcpdconf .= " next-server {$poolconf['nextserver']};\n"; + } + if (!empty($poolconf['filename']) && ($poolconf['filename'] != $dhcpifconf['filename'])) { + $dhcpdconf .= " filename \"{$poolconf['filename']}\";\n"; + } + if (!empty($poolconf['rootpath']) && ($poolconf['rootpath'] != $dhcpifconf['rootpath'])) { + $dhcpdconf .= " option root-path \"{$poolconf['rootpath']}\";\n"; + } + } + $dhcpdconf .= " range {$poolconf['range']['from']} {$poolconf['range']['to']};\n"; + $dhcpdconf .= " }\n\n"; + } +// End of settings inside pools + + if ($dhcpifconf['gateway'] && $dhcpifconf['gateway'] != "none") { + $routers = $dhcpifconf['gateway']; + $add_routers = true; + } elseif ($dhcpifconf['gateway'] == "none") { + $add_routers = false; + } else { + $routers = $ifcfgip; + } + if($add_routers) + $dhcpdconf .= " option routers {$routers};\n"; + + $dhcpdconf .= << "") + $dhcpdconf .= " option tftp-server-name \"{$dhcpifconf['tftp']}\";\n"; + + // Handle option, number rowhelper values + $dhcpdconf .= "\n"; + if($dhcpifconf['numberoptions']['item']) { + foreach($dhcpifconf['numberoptions']['item'] as $itemidx => $item) { + if(empty($item['type']) || $item['type'] == "text") + $dhcpdconf .= " option custom-{$dhcpif}-{$itemidx} \"{$item['value']}\";\n"; + else + $dhcpdconf .= " option custom-{$dhcpif}-{$itemidx} {$item['value']};\n"; + } + } + + // ldap-server + if ($dhcpifconf['ldap'] <> "") + $dhcpdconf .= " option ldap-server \"{$dhcpifconf['ldap']}\";\n"; + + // net boot information + if(isset($dhcpifconf['netboot'])) { + if ($dhcpifconf['nextserver'] <> "") { + $dhcpdconf .= " next-server {$dhcpifconf['nextserver']};\n"; + } + if (!empty($dhcpifconf['filename']) && !empty($dhcpifconf['filename32']) && !empty($dhcpifconf['filename64'])) { + $dhcpdconf .= " if option arch = 00:06 {\n"; + $dhcpdconf .= " filename \"{$dhcpifconf['filename32']}\";\n"; + $dhcpdconf .= " } else if option arch = 00:07 {\n"; + $dhcpdconf .= " filename \"{$dhcpifconf['filename64']}\";\n"; + $dhcpdconf .= " } else {\n"; + $dhcpdconf .= " filename \"{$dhcpifconf['filename']}\";\n"; + $dhcpdconf .= " }\n\n"; + } elseif (!empty($dhcpifconf['filename'])) { + $dhcpdconf .= " filename \"{$dhcpifconf['filename']}\";\n"; + } + if (!empty($dhcpifconf['rootpath'])) { + $dhcpdconf .= " option root-path \"{$dhcpifconf['rootpath']}\";\n"; + } + } + + $dhcpdconf .= << "") && ($sm['ddnsdomain'] != $dhcpifconf['ddnsdomain'])) + $pdnscfg .= " ddns-domainname \"{$sm['ddnsdomain']}\";\n"; + $pdnscfg .= " ddns-update-style interim;\n"; + } + + if (is_array($sm['dnsserver']) && ($sm['dnsserver'][0]) && ($sm['dnsserver'][0] != $dhcpifconf['dnsserver'][0])) { + $smdnscfg .= " option domain-name-servers " . join(",", $sm['dnsserver']) . ";\n"; + } + $dhcpdconf .= "{$smdnscfg}"; + + // default-lease-time + if ($sm['defaultleasetime'] && ($sm['defaultleasetime'] != $dhcpifconf['defaultleasetime'])) + $dhcpdconf .= " default-lease-time {$sm['defaultleasetime']};\n"; + + // max-lease-time + if ($sm['maxleasetime'] && ($sm['maxleasetime'] != $dhcpifconf['maxleasetime'])) + $dhcpdconf .= " max-lease-time {$sm['maxleasetime']};\n"; + + // netbios-name* + if (is_array($sm['winsserver']) && $sm['winsserver'][0] && ($sm['winsserver'][0] != $dhcpifconf['winsserver'][0])) { + $dhcpdconf .= " option netbios-name-servers " . join(",", $sm['winsserver']) . ";\n"; + $dhcpdconf .= " option netbios-node-type 8;\n"; + } + + // ntp-servers + if (is_array($sm['ntpserver']) && $sm['ntpserver'][0] && ($sm['ntpserver'][0] != $dhcpifconf['ntpserver'][0])) + $dhcpdconf .= " option ntp-servers " . join(",", $sm['ntpserver']) . ";\n"; + + // tftp-server-name + if (!empty($sm['tftp']) && ($sm['tftp'] != $dhcpifconf['tftp'])) + $dhcpdconf .= " option tftp-server-name \"{$sm['tftp']}\";\n"; + + $dhcpdconf .= "}\n"; + $i++; + } + } + + $dhcpdifs[] = get_real_interface($dhcpif); + if ($newzone['domain-name']) + { + if ($need_ddns_updates) + { + $newzone['dns-servers'] = array($dhcpifconf['ddnsdomainprimary']); + } + $ddns_zones[] = $newzone; + } + } + + if ($need_ddns_updates) { + $dhcpdconf .= "ddns-update-style interim;\n"; + $dhcpdconf .= "update-static-leases on;\n"; + + $dhcpdconf .= dhcpdkey($dhcpifconf); + $dhcpdconf .= dhcpdzones($ddns_zones, $dhcpifconf); + } + + /* write dhcpd.conf */ + if (!@file_put_contents("{$g['dhcpd_chroot_path']}/etc/dhcpd.conf", $dhcpdconf)) { + printf(gettext("Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s"), "\n"); + unset($dhcpdconf); + return 1; + } + unset($dhcpdconf); + + /* create an empty leases database */ + if (!file_exists("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases")) + @touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases"); + + /* make sure there isn't a stale dhcpd.pid file, which can make dhcpd fail to start. */ + /* if we get here, dhcpd has been killed and is not started yet */ + unlink_if_exists("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpd.pid"); + + /* fire up dhcpd in a chroot */ + if (count($dhcpdifs) > 0) { + mwexec("/usr/local/sbin/dhcpd -user dhcpd -group _dhcp -chroot {$g['dhcpd_chroot_path']} -cf /etc/dhcpd.conf -pf {$g['varrun_path']}/dhcpd.pid " . + join(" ", $dhcpdifs)); + } + + if ($g['booting']) + print "done.\n"; + + return 0; +} + +function dhcpdkey($dhcpifconf) +{ + $dhcpdconf = ""; + if ($dhcpifconf['ddnsdomainkeyname'] <> "" && $dhcpifconf['ddnsdomainkey'] <> "") + { + $dhcpdconf .= "key {$dhcpifconf['ddnsdomainkeyname']} {\n"; + $dhcpdconf .= " algorithm hmac-md5;\n"; + $dhcpdconf .= " secret {$dhcpifconf['ddnsdomainkey']};\n"; + $dhcpdconf .= "}\n"; + } + + return $dhcpdconf; +} + +function dhcpdzones($ddns_zones, $dhcpifconf) +{ + $dhcpdconf = ""; + + if (is_array($ddns_zones)) { + $added_zones = array(); + foreach ($ddns_zones as $zone) { + if (!is_array($zone) || empty($zone) || !is_array($zone['dns-servers'])) + continue; + $primary = $zone['dns-servers'][0]; + $secondary = empty($zone['dns-servers'][1]) ? "" : $zone['dns-servers'][1]; + + // Make sure we aren't using any invalid or IPv6 DNS servers. + if (!is_ipaddrv4($primary)) { + if (is_ipaddrv4($secondary)) { + $primary = $secondary; + $secondary = ""; + } else { + continue; + } + } + + // We don't need to add zones multiple times. + if ($zone['domain-name'] && !in_array($zone['domain-name'], $added_zones)) { + $dhcpdconf .= "zone {$zone['domain-name']}. {\n"; + $dhcpdconf .= " primary {$primary};\n"; + if (is_ipaddrv4($secondary)) + $dhcpdconf .= " secondary {$secondary};\n"; + if($dhcpifconf['ddnsdomainkeyname'] <> "" && $dhcpifconf['ddnsdomainkey'] <> "") + $dhcpdconf .= " key {$dhcpifconf['ddnsdomainkeyname']};\n"; + $dhcpdconf .= "}\n"; + $added_zones[] = $zone['domain-name']; + } + if ($zone['ptr-domain'] && !in_array($zone['ptr-domain'], $added_zones)) { + $dhcpdconf .= "zone {$zone['ptr-domain']} {\n"; + $dhcpdconf .= " primary {$primary};\n"; + if (is_ipaddrv4($secondary)) + $dhcpdconf .= " secondary {$secondary};\n"; + if($dhcpifconf['ddnsdomainkeyname'] <> "" && $dhcpifconf['ddnsdomainkey'] <> "") + $dhcpdconf .= " key {$dhcpifconf['ddnsdomainkeyname']};\n"; + $dhcpdconf .= "}\n"; + $added_zones[] = $zone['ptr-domain']; + } + } + } + + return $dhcpdconf; +} + +function services_dhcpdv6_configure($blacklist = array()) { + global $config, $g; + + if($g['services_dhcp_server_enable'] == false) + return; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dhcpd_configure($if) being called $mt\n"; + } + + /* kill any running dhcpd */ + if (isvalidpid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpdv6.pid")) + killbypid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpdv6.pid"); + if (isvalidpid("{$g['varrun_path']}/dhcpleases6.pid")) + killbypid("{$g['varrun_path']}/dhcpleases6.pid"); + + /* DHCP enabled on any interfaces? */ + if (!is_dhcpv6_server_enabled()) + return 0; + + if ($g['booting']) { + if ($g['platform'] != "pfSense") { + /* restore the leases, if we have them */ + if (file_exists("{$g['cf_conf_path']}/dhcp6leases.tgz")) { + $dhcprestore = ""; + $dhcpreturn = ""; + exec("cd /;LANG=C /usr/bin/tar -xzf {$g['cf_conf_path']}/dhcp6leases.tgz 2>&1", $dhcprestore, $dhcpreturn); + $dhcprestore = implode(" ", $dhcprestore); + if($dhcpreturn <> 0) { + log_error("DHCP leases v6 restore failed exited with $dhcpreturn, the error is: $dhcprestore\n"); + } + } + } + } + + $syscfg = $config['system']; + if (!is_array($config['dhcpdv6'])) + $config['dhcpdv6'] = array(); + $dhcpdv6cfg = $config['dhcpdv6']; + $Iflist = get_configured_interface_list(); + $Iflist = array_merge($Iflist, get_configured_pppoe_server_interfaces()); + + + if ($g['booting']) + echo "Starting DHCPv6 service..."; + else + sleep(1); + + /* we add a fake entry for interfaces that are set to track6 another WAN */ + foreach ($Iflist as $ifname) { + /* Do not put in the config an interface which is down */ + if (isset($blacklist[$ifname])) + continue; + if (!empty($config['interfaces'][$ifname]['track6-interface'])) { + $realif = get_real_interface($ifname, "inet6"); + $ifcfgipv6 = get_interface_ipv6($ifname); + if(!is_ipaddrv6($ifcfgipv6)) + continue; + $ifcfgipv6 = Net_IPv6::getNetmask($ifcfgipv6, 64); + $trackifname = $config['interfaces'][$ifname]['track6-interface']; + $trackcfg = $config['interfaces'][$trackifname]; + $pdlen = calculate_ipv6_delegation_length($trackifname); + $ifcfgipv6arr =explode(":", $ifcfgipv6); + $dhcpdv6cfg[$ifname] = array(); + $dhcpdv6cfg[$ifname]['enable'] = true; + /* range */ + $ifcfgipv6arr[7] = "1000"; + $dhcpdv6cfg[$ifname]['range'] = array(); + $dhcpdv6cfg[$ifname]['range']['from'] = Net_IPv6::compress(implode(":", $ifcfgipv6arr)); + $ifcfgipv6arr[7] = "2000"; + $dhcpdv6cfg[$ifname]['range']['to'] = Net_IPv6::compress(implode(":", $ifcfgipv6arr)); + /* prefix length > 0? We can add dhcp6 prefix delegation server */ + if($pdlen > 2) { + $pdlenmax = $pdlen; + $pdlenhalf = $pdlenmax -1; + $pdlenmin = (64 - ceil($pdlenhalf / 4)); + $dhcpdv6cfg[$ifname]['prefixrange'] = array(); + $dhcpdv6cfg[$ifname]['prefixrange']['prefixlength'] = $pdlenmin; + + /* set the delegation start to half the current address block */ + $range = Net_IPv6::parseAddress($ifcfgipv6, (64 - $pdlenmax)); + $range['start'] = Net_IPv6::getNetmask($range['end'], (64 - $pdlenhalf)); + + /* set the end range to a multiple of the prefix delegation size, required by dhcpd */ + $range = Net_IPv6::parseAddress($range['end'], (64 - $pdlenhalf)); + $range['end'] = Net_IPv6::getNetmask($range['end'], (64 - round($pdlen / 2))); + + $dhcpdv6cfg[$ifname]['prefixrange']['from'] = Net_IPv6::compress($range['start']); + $dhcpdv6cfg[$ifname]['prefixrange']['to'] = Net_IPv6::compress($range['end']); + $dhcpdv6cfg[$ifname]['dns6ip'] = get_interface_ipv6($ifname); + } + } + } + + $custoptionsv6 = ""; + foreach ($dhcpdv6cfg as $dhcpv6if => $dhcpv6ifconf) { + if(is_array($dhcpv6ifconf['numberoptions']) && is_array($dhcpv6ifconf['numberoptions']['item'])) { + foreach($dhcpv6ifconf['numberoptions']['item'] as $itemv6idx => $itemv6) { + $custoptionsv6 .= "option custom-{$dhcpv6if}-{$itemv6idx} code {$itemv6['number']} = text;\n"; + } + } + } + + if(isset($dhcpv6ifconf['netboot']) && !empty($dhcpv6ifconf['bootfile_url'])) + $custoptionsv6 .= "option dhcp6.bootfile-url code 59 = string;\n"; + + $dhcpdv6conf = << $dhcpv6ifconf) { + + $ddns_zones = array(); + + $ifcfgv6 = $config['interfaces'][$dhcpv6if]; + + if (!isset($dhcpv6ifconf['enable']) || !isset($Iflist[$dhcpv6if])) + continue; + $ifcfgipv6 = get_interface_ipv6($dhcpv6if); + $ifcfgsnv6 = get_interface_subnetv6($dhcpv6if); + $subnetv6 = gen_subnetv6($ifcfgipv6, $ifcfgsnv6); + + if ($is_olsr_enabled == true) { + if($dhcpv6ifconf['netmask']) + $subnetmask = gen_subnet_maskv6($dhcpv6ifconf['netmask']); + } + + $dnscfgv6 = ""; + + if ($dhcpv6ifconf['domain']) { + $dnscfgv6 .= " option domain-name \"{$dhcpv6ifconf['domain']}\";\n"; + } + + if ($dhcpv6ifconf['domainsearchlist'] <> "") { + $dnscfgv6 .= " option domain-search \"" . join("\",\"", preg_split("/[ ;]+/", $dhcpv6ifconf['domainsearchlist'])) . "\";\n"; + } + + if (isset($dhcpv6ifconf['ddnsupdate'])) { + if($dhcpv6ifconf['ddnsdomain'] <> "") { + $dnscfgv6 .= " ddns-domainname \"{$dhcpv6ifconf['ddnsdomain']}\";\n"; + } + $dnscfgv6 .= " ddns-update-style interim;\n"; + $nsupdate = true; + } + + if (is_array($dhcpv6ifconf['dnsserver']) && ($dhcpv6ifconf['dnsserver'][0])) { + $dnscfgv6 .= " option dhcp6.name-servers " . join(",", $dhcpv6ifconf['dnsserver']) . ";"; + } else if ((isset($config['dnsmasq']['enable'])) && (is_ipaddrv6($ifcfgipv6))) { + $dnscfgv6 .= " option dhcp6.name-servers {$ifcfgipv6};"; + } else if (is_array($syscfg['dnsserver']) && ($syscfg['dnsserver'][0])) { + $dns_arrv6 = array(); + foreach($syscfg['dnsserver'] as $dnsserver) { + if (is_ipaddrv6($dnsserver)) { + $dns_arrv6[] = $dnsserver; + } + } + if(!empty($dns_arrv6)) + $dnscfgv6 .= " option dhcp6.name-servers " . join(",", $dns_arrv6) . ";"; + } + + if ($dhcpv6ifconf['domain']) { + $newzone = array(); + $newzone['domain-name'] = $dhcpv6ifconf['domain']; + $newzone['dns-servers'][] = $dhcpv6ifconf['ddnsdomainprimary']; + $ddns_zones[] = $newzone; + } + + if (is_ipaddrv6($ifcfgipv6)) { + $dhcpdv6conf .= "subnet6 {$subnetv6}/{$ifcfgsnv6}"; + } else { + $subnet6 = gen_subnetv6($dhcpv6ifconf['range']['from'], "64"); + $dhcpdv6conf .= "subnet6 {$subnet6}/64"; + } + $dhcpdv6conf .= " {\n"; + + $dhcpdv6conf .= << 0 ) + $dhcpdv6conf .= " option dhcp6.sntp-servers " . join(",", $dhcpv6ifconf['ntpserver']) . ";\n"; + } + // tftp-server-name + /* Needs ISC DHCPD support + if ($dhcpv6ifconf['tftp'] <> "") + $dhcpdv6conf .= " option tftp-server-name \"{$dhcpv6ifconf['tftp']}\";\n"; + */ + + // Handle option, number rowhelper values + $dhcpdv6conf .= "\n"; + if ($dhcpv6ifconf['numberoptions']['item']) { + foreach($dhcpv6ifconf['numberoptions']['item'] as $itemv6idx => $itemv6) { + $dhcpdv6conf .= " option custom-{$dhcpv6if}-{$itemv6idx} \"{$itemv6['value']}\";\n"; + } + } + + // ldap-server + if ($dhcpv6ifconf['ldap'] <> "") + $dhcpdv6conf .= " option ldap-server \"{$dhcpv6ifconf['ldap']}\";\n"; + + // net boot information + if(isset($dhcpv6ifconf['netboot'])) { + if (!empty($dhcpv6ifconf['bootfile_url'])) { + $dhcpdv6conf .= " option dhcp6.bootfile-url \"{$dhcpv6ifconf['bootfile_url']}\";\n"; + } + } + + $dhcpdv6conf .= "}\n"; + + /* add static mappings */ + /* Needs to use DUID */ + if (is_array($dhcpv6ifconf['staticmap'])) { + $i = 0; + foreach ($dhcpv6ifconf['staticmap'] as $sm) { + $dhcpdv6conf .= << "unmanaged") { + if(preg_match("/poes/si", $dhcpv6if)) { + /* magic here */ + $dhcpdv6ifs = array_merge($dhcpdv6ifs, get_pppoes_child_interfaces($dhcpv6if)); + } else { + $realif = get_real_interface($dhcpv6if, "inet6"); + if (stristr("$realif", "bridge")) { + $mac = get_interface_mac($realif); + $v6address = generate_ipv6_from_mac($mac); + /* Create link local address for bridges */ + mwexec("/sbin/ifconfig {$realif} inet6 {$v6address}"); + } + $realif = escapeshellcmd($realif); + $dhcpdv6ifs[] = $realif; + } + } + } + + if ($nsupdate) + { + $dhcpdv6conf .= "ddns-update-style interim;\n"; + } + else + { + $dhcpdv6conf .= "ddns-update-style none;\n"; + } + + /* write dhcpdv6.conf */ + if (!@file_put_contents("{$g['dhcpd_chroot_path']}/etc/dhcpdv6.conf", $dhcpdv6conf)) { + log_error("Error: cannot open {$g['dhcpd_chroot_path']}/etc/dhcpdv6.conf in services_dhcpdv6_configure().\n"); + if ($g['booting']) + printf("Error: cannot open {$g['dhcpd_chroot_path']}/etc/dhcpdv6.conf in services_dhcpdv6_configure().\n"); + unset($dhcpdv6conf); + return 1; + } + unset($dhcpdv6conf); + + /* create an empty leases v6 database */ + if (!file_exists("{$g['dhcpd_chroot_path']}/var/db/dhcpd6.leases")) + @touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd6.leases"); + + /* make sure there isn't a stale dhcpdv6.pid file, which may make dhcpdv6 fail to start. */ + /* if we get here, dhcpdv6 has been killed and is not started yet */ + unlink_if_exists("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpdv6.pid"); + + /* fire up dhcpd in a chroot */ + if (count($dhcpdv6ifs) > 0) { + mwexec("/usr/local/sbin/dhcpd -6 -user dhcpd -group _dhcp -chroot {$g['dhcpd_chroot_path']} -cf /etc/dhcpdv6.conf -pf {$g['varrun_path']}/dhcpdv6.pid " . + join(" ", $dhcpdv6ifs)); + mwexec("/usr/local/sbin/dhcpleases6 -c \"/usr/local/bin/php -f /usr/local/sbin/prefixes.php|/bin/sh\" -l {$g['dhcpd_chroot_path']}/var/db/dhcpd6.leases"); + } + if ($g['booting']) + print gettext("done.") . "\n"; + + return 0; +} + +function services_igmpproxy_configure() { + global $config, $g; + + /* kill any running igmpproxy */ + killbyname("igmpproxy"); + + if (!is_array($config['igmpproxy']['igmpentry']) || (count($config['igmpproxy']['igmpentry']) == 0)) + return 1; + + $iflist = get_configured_interface_list(); + + $igmpconf = << "") { + $item = explode(" ", $igmpcf['address']); + foreach($item as $iww) + $igmpconf .= "altnet {$iww}\n"; + } + $igmpconf .= "\n"; + } + foreach ($iflist as $ifn) { + $realif = get_real_interface($ifn); + $igmpconf .= "phyint {$realif} disabled\n"; + } + $igmpconf .= "\n"; + + $igmpfl = fopen($g['tmp_path'] . "/igmpproxy.conf", "w"); + if (!$igmpfl) { + log_error(gettext("Could not write Igmpproxy configuration file!")); + return; + } + fwrite($igmpfl, $igmpconf); + fclose($igmpfl); + unset($igmpconf); + + /* NOTE: -d4 means everything LOG_WARNING and smaller */ + mwexec("/usr/local/sbin/igmpproxy -d4 -c {$g['tmp_path']}/igmpproxy.conf"); + log_error(gettext("Started IGMP proxy service.")); + + return 0; +} + +function services_dhcrelay_configure() { + global $config, $g; + if ($g['platform'] == 'jail') + return; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dhcrelay_configure() being called $mt\n"; + } + + /* kill any running dhcrelay */ + killbypid("{$g['varrun_path']}/dhcrelay.pid"); + + $dhcrelaycfg =& $config['dhcrelay']; + + /* DHCPRelay enabled on any interfaces? */ + if (!isset($dhcrelaycfg['enable'])) + return 0; + + if ($g['booting']) + echo gettext("Starting DHCP relay service..."); + else + sleep(1); + + $iflist = get_configured_interface_list(); + + $dhcifaces = explode(",", $dhcrelaycfg['interface']); + foreach ($dhcifaces as $dhcrelayif) { + if (!isset($iflist[$dhcrelayif]) || + link_interface_to_bridge($dhcrelayif)) + continue; + + if (is_ipaddr(get_interface_ip($dhcrelayif))) + $dhcrelayifs[] = get_real_interface($dhcrelayif); + } + + /* + * In order for the relay to work, it needs to be active + * on the interface in which the destination server sits. + */ + $srvips = explode(",", $dhcrelaycfg['server']); + foreach ($srvips as $srcidx => $srvip) { + unset($destif); + foreach ($iflist as $ifname) { + $subnet = get_interface_ip($ifname); + if (!is_ipaddr($subnet)) + continue; + $subnet .= "/" . get_interface_subnet($ifname); + if (ip_in_subnet($srvip, $subnet)) { + $destif = get_real_interface($ifname); + break; + } + } + if (!isset($destif)) { + foreach (get_staticroutes() as $rtent) { + if (ip_in_subnet($srvip, $rtent['network'])) { + $a_gateways = return_gateways_array(true); + $destif = $a_gateways[$rtent['gateway']]['interface']; + break; + } + } + } + + if (!isset($destif)) { + /* Create a array from the existing route table */ + exec("/usr/bin/netstat -rnWf inet", $route_str); + array_shift($route_str); + array_shift($route_str); + array_shift($route_str); + array_shift($route_str); + $route_arr = array(); + foreach($route_str as $routeline) { + $items = preg_split("/[ ]+/i", $routeline); + if (is_subnetv4($items[0])) { + $subnet = $items[0]; + } elseif (is_ipaddrv4($items[0])) { + $subnet = "{$items[0]}/32"; + } else { + // Not a subnet or IP address, skip to the next line. + continue; + } + if (ip_in_subnet($srvip, $subnet)) { + $destif = trim($items[6]); + break; + } + } + } + + if (!isset($destif)) { + if (is_array($config['gateways']['gateway_item'])) { + foreach ($config['gateways']['gateway_item'] as $gateway) { + if (isset($gateway['defaultgw'])) { + $destif = get_real_interface($gateway['interface']); + break; + } + } + } else + $destif = get_real_interface("wan"); + } + + if (!empty($destif)) + $dhcrelayifs[] = $destif; + } + $dhcrelayifs = array_unique($dhcrelayifs); + + /* fire up dhcrelay */ + if (empty($dhcrelayifs)) { + log_error("No suitable interface found for running dhcrelay!"); + return; /* XXX */ + } + + $cmd = "/usr/local/sbin/dhcrelay -i " . implode(" -i ", $dhcrelayifs); + + if (isset($dhcrelaycfg['agentoption'])) + $cmd .= " -a -m replace"; + + $cmd .= " " . implode(" ", $srvips); + mwexec($cmd); + unset($cmd); + + return 0; +} + +function services_dhcrelay6_configure() { + global $config, $g; + if ($g['platform'] == 'jail') + return; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dhcrelay6_configure() being called $mt\n"; + } + + /* kill any running dhcrelay */ + killbypid("{$g['varrun_path']}/dhcrelay6.pid"); + + $dhcrelaycfg =& $config['dhcrelay6']; + + /* DHCPv6 Relay enabled on any interfaces? */ + if (!isset($dhcrelaycfg['enable'])) + return 0; + + if ($g['booting']) + echo gettext("Starting DHCPv6 relay service..."); + else + sleep(1); + + $iflist = get_configured_interface_list(); + + $dhcifaces = explode(",", $dhcrelaycfg['interface']); + foreach ($dhcifaces as $dhcrelayif) { + if (!isset($iflist[$dhcrelayif]) || + link_interface_to_bridge($dhcrelayif)) + continue; + + if (is_ipaddrv6(get_interface_ipv6($dhcrelayif))) + $dhcrelayifs[] = get_real_interface($dhcrelayif); + } + $dhcrelayifs = array_unique($dhcrelayifs); + + /* + * In order for the relay to work, it needs to be active + * on the interface in which the destination server sits. + */ + $srvips = explode(",", $dhcrelaycfg['server']); + $srvifaces = array(); + foreach ($srvips as $srcidx => $srvip) { + unset($destif); + foreach ($iflist as $ifname) { + $subnet = get_interface_ipv6($ifname); + if (!is_ipaddrv6($subnet)) + continue; + $subnet .= "/" . get_interface_subnetv6($ifname); + if (ip_in_subnet($srvip, $subnet)) { + $destif = get_real_interface($ifname); + break; + } + } + if (!isset($destif)) { + if (is_array($config['staticroutes']['route'])) { + foreach ($config['staticroutes']['route'] as $rtent) { + if (ip_in_subnet($srvip, $rtent['network'])) { + $a_gateways = return_gateways_array(true); + $destif = $a_gateways[$rtent['gateway']]['interface']; + break; + } + } + } + } + + if (!isset($destif)) { + /* Create a array from the existing route table */ + exec("/usr/bin/netstat -rnWf inet6", $route_str); + array_shift($route_str); + array_shift($route_str); + array_shift($route_str); + array_shift($route_str); + $route_arr = array(); + foreach($route_str as $routeline) { + $items = preg_split("/[ ]+/i", $routeline); + if (ip_in_subnet($srvip, $items[0])) { + $destif = trim($items[6]); + break; + } + } + } + + if (!isset($destif)) { + if (is_array($config['gateways']['gateway_item'])) { + foreach ($config['gateways']['gateway_item'] as $gateway) { + if (isset($gateway['defaultgw'])) { + $destif = $gateway['interface']; + break; + } + } + } else + $destif = get_real_interface("wan"); + } + + if (!empty($destif)) { + $srvifaces[] = "{$srvip}%{$destif}"; + } + } + + /* fire up dhcrelay */ + if (empty($dhcrelayifs) || empty($srvifaces) ) { + log_error("No suitable interface found for running dhcrelay -6!"); + return; /* XXX */ + } + + $cmd = "/usr/local/sbin/dhcrelay -6 -pf \"{$g['varrun_path']}/dhcrelay6.pid\""; + foreach ($dhcrelayifs as $dhcrelayif) { + $cmd .= " -l {$dhcrelayif}"; + } + foreach ($srvifaces as $srviface) { + $cmd .= " -u \"{$srviface}\""; + } + mwexec($cmd); + unset($cmd); + + return 0; +} + +function services_dyndns_configure_client($conf) { + + if (!isset($conf['enable'])) + return; + + /* load up the dyndns.class */ + require_once("dyndns.class"); + + $dns = new updatedns($dnsService = $conf['type'], + $dnsHost = $conf['host'], + $dnsUser = $conf['username'], + $dnsPass = $conf['password'], + $dnsWilcard = $conf['wildcard'], + $dnsMX = $conf['mx'], + $dnsIf = "{$conf['interface']}", + $dnsBackMX = NULL, + $dnsServer = NULL, + $dnsPort = NULL, + $dnsUpdateURL = "{$conf['updateurl']}", + $forceUpdate = $conf['force'], + $dnsZoneID=$conf['zoneid'], + $dnsTTL=$conf['ttl'], + $dnsResultMatch = "{$conf['resultmatch']}", + $dnsRequestIf = "{$conf['requestif']}", + $dnsID = "{$conf['id']}", + $dnsVerboseLog = $conf['verboselog'], + $curlIpresolveV4 = $conf['curl_ipresolve_v4'], + $curlSslVerifypeer = $conf['curl_ssl_verifypeer']); +} + +function services_dyndns_configure($int = "") { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dyndns_configure() being called $mt\n"; + } + + $dyndnscfg = $config['dyndnses']['dyndns']; + $gwgroups = return_gateway_groups_array(); + if (is_array($dyndnscfg)) { + if ($g['booting']) + echo gettext("Starting DynDNS clients..."); + + foreach ($dyndnscfg as $dyndns) { + if ((empty($int)) || ($int == $dyndns['interface']) || (is_array($gwgroups[$dyndns['interface']]))) { + $dyndns['verboselog'] = isset($dyndns['verboselog']); + $dyndns['curl_ipresolve_v4'] = isset($dyndns['curl_ipresolve_v4']); + $dyndns['curl_ssl_verifypeer'] = isset($dyndns['curl_ssl_verifypeer']); + services_dyndns_configure_client($dyndns); + sleep(1); + } + } + + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + return 0; +} + +function dyndnsCheckIP($int) { + global $config; + $ip_address = get_interface_ip($int); + if (is_private_ip($ip_address)) { + $gateways_status = return_gateways_status(true); + // If the gateway for this interface is down, then the external check cannot work. + // Avoid the long wait for the external check to timeout. + if (stristr($gateways_status[$config['interfaces'][$int]['gateway']]['status'],"down")) + return "down"; + $hosttocheck = "http://checkip.dyndns.org"; + $ip_ch = curl_init($hosttocheck); + curl_setopt($ip_ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ip_ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ip_ch, CURLOPT_INTERFACE, $ip_address); + curl_setopt($ip_ch, CURLOPT_CONNECTTIMEOUT, '30'); + curl_setopt($ip_ch, CURLOPT_TIMEOUT, 120); + curl_setopt($ip_ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + $ip_result_page = curl_exec($ip_ch); + curl_close($ip_ch); + $ip_result_decoded = urldecode($ip_result_page); + preg_match('=Current IP Address: (.*)=siU', $ip_result_decoded, $matches); + $ip_address = trim($matches[1]); + } + return $ip_address; +} + +function services_dnsmasq_configure() { + global $config, $g; + $return = 0; + + // hard coded args: will be removed to avoid duplication if specified in custom_options + $standard_args = array( + "dns-forward-max" => "--dns-forward-max=5000", + "cache-size" => "--cache-size=10000", + "local-ttl" => "--local-ttl=1" + ); + + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_dnsmasq_configure() being called $mt\n"; + } + + /* kill any running dnsmasq */ + if (file_exists("{$g['varrun_path']}/dnsmasq.pid")) + sigkillbypid("{$g['varrun_path']}/dnsmasq.pid", "TERM"); + + if (isset($config['dnsmasq']['enable'])) { + + if ($g['booting']) + echo gettext("Starting DNS forwarder..."); + else + sleep(1); + + $args = ""; + + if (isset($config['dnsmasq']['regdhcp'])) { + $args .= " --dhcp-hostsfile={$g['varetc_path']}/hosts "; + } + + /* Setup listen port, if non-default */ + if (is_port($config['dnsmasq']['port'])) + $args .= " --port={$config['dnsmasq']['port']} "; + + $listen_addresses = ""; + if(isset($config['dnsmasq']['interface'])) { + $interfaces = explode(",", $config['dnsmasq']['interface']); + foreach ($interfaces as $interface) { + if (is_ipaddrv4($interface)) { + $listen_addresses .= " --listen-address={$interface} "; + } else if (is_ipaddrv6($interface)) { + /* + * XXX: Since dnsmasq does not support link-local address + * with scope specified. These checks are being done. + */ + if (is_linklocal($interface) && strstr($interface, "%")) { + $tmpaddrll6 = explode("%", $interface); + $listen_addresses .= " --listen-address={$tmpaddrll6[0]} "; + } else + $listen_addresses .= " --listen-address={$interface} "; + } else { + $if = get_real_interface($interface); + if (does_interface_exist($if)) { + $laddr = find_interface_ip($if); + if (is_ipaddrv4($laddr)) + $listen_addresses .= " --listen-address={$laddr} "; + $laddr6 = find_interface_ipv6($if); + if (is_ipaddrv6($laddr6) && !isset($config['dnsmasq']['strictbind'])) { + /* + * XXX: Since dnsmasq does not support link-local address + * with scope specified. These checks are being done. + */ + if (is_linklocal($laddr6) && strstr($laddr6, "%")) { + $tmpaddrll6 = explode("%", $laddr6); + $listen_addresses .= " --listen-address={$tmpaddrll6[0]} "; + } else + $listen_addresses .= " --listen-address={$laddr6} "; + } + } + } + } + if (!empty($listen_addresses)) { + $args .= " {$listen_addresses} "; + if (isset($config['dnsmasq']['strictbind'])) + $args .= " --bind-interfaces "; + } + } + + /* If selected, then first forward reverse lookups for private IPv4 addresses to nowhere. */ + /* If any of these are duplicated by a user-specified domain override (e.g. 10.in-addr.arpa) then */ + /* the user-specified entry made later on the command line below will be the one that is effective. */ + if (isset($config['dnsmasq']['no_private_reverse'])) { + /* Note: Carrier Grade NAT (CGN) addresses 100.64.0.0/10 are intentionally not here. */ + /* End-users should not be aware of CGN addresses, so reverse lookups for these should not happen. */ + /* Just the pfSense WAN might get a CGN address from an ISP. */ + $args .= " --server=/10.in-addr.arpa/ "; + $args .= " --server=/168.192.in-addr.arpa/ "; + /* Unfortunately the 172.16.0.0/12 range does not map nicely to the in-addr.arpa scheme. */ + for ($subnet_num = 16; $subnet_num < 32; $subnet_num++) { + $args .= " --server=/" . $subnet_num . ".172.in-addr.arpa/ "; + } + } + + /* Setup forwarded domains */ + if (isset($config['dnsmasq']['domainoverrides']) && is_array($config['dnsmasq']['domainoverrides'])) { + foreach($config['dnsmasq']['domainoverrides'] as $override) { + if ($override['ip'] == "!") + $override[ip] = ""; + $args .= ' --server=/' . $override['domain'] . '/' . $override['ip']; + } + } + + /* Allow DNS Rebind for forwarded domains */ + if (isset($config['dnsmasq']['domainoverrides']) && is_array($config['dnsmasq']['domainoverrides'])) { + if(!isset($config['system']['webgui']['nodnsrebindcheck'])) { + foreach($config['dnsmasq']['domainoverrides'] as $override) { + $args .= ' --rebind-domain-ok=/' . $override['domain'] . '/ '; + } + } + } + + if(!isset($config['system']['webgui']['nodnsrebindcheck'])) + $dns_rebind = "--rebind-localhost-ok --stop-dns-rebind"; + + if (isset($config['dnsmasq']['strict_order'])) { + $args .= " --strict-order "; + } + + if (isset($config['dnsmasq']['domain_needed'])) { + $args .= " --domain-needed "; + } + + if ($config['dnsmasq']['custom_options']) + foreach (preg_split('/\s+/', $config['dnsmasq']['custom_options']) as $c) { + $args .= " " . escapeshellarg("--{$c}"); + $p = explode('=', $c); + if (array_key_exists($p[0], $standard_args)) + unset($standard_args[$p[0]]); + } + $args .= ' ' . implode(' ', array_values($standard_args)); + + /* run dnsmasq */ + $cmd = "/usr/local/sbin/dnsmasq --all-servers {$dns_rebind} {$args}"; + //log_error("dnsmasq command: {$cmd}"); + mwexec_bg($cmd); + unset($args); + + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + if (!$g['booting']) { + if(services_dhcpd_configure()!=0) + $return = 1; + } + + return $return; +} + +function services_unbound_configure() { + global $config, $g; + $return = 0; + + if (isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_unbound_configure() being called $mt\n"; + } + + // kill any running Unbound instance + if (file_exists("{$g['varrun_path']}/unbound.pid")) + sigkillbypid("{$g['varrun_path']}/unbound.pid", "TERM"); + + if (isset($config['unbound']['enable'])) { + if ($g['booting']) + echo gettext("Starting DNS Resolver..."); + else + sleep(1); + + require_once('/etc/inc/unbound.inc'); + sync_unbound_service(); + if ($g['booting']) + echo gettext("done.") . "\n"; + } + + if (!$g['booting']) { + if (services_dhcpd_configure()!=0) + $return = 1; + } + + return $return; +} + +function services_snmpd_configure() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "services_snmpd_configure() being called $mt\n"; + } + + /* kill any running snmpd */ + sigkillbypid("{$g['varrun_path']}/snmpd.pid", "TERM"); + sleep(2); + if(is_process_running("bsnmpd")) + mwexec("/usr/bin/killall bsnmpd", true); + + if (isset($config['snmpd']['enable'])) { + + if ($g['booting']) + echo gettext("Starting SNMP daemon... "); + + /* generate snmpd.conf */ + $fd = fopen("{$g['varetc_path']}/snmpd.conf", "w"); + if (!$fd) { + printf(gettext("Error: cannot open snmpd.conf in services_snmpd_configure().%s"),"\n"); + return 1; + } + + + $snmpdconf = << $dnsupdate) { + if (!isset($dnsupdate['enable'])) + continue; + if (!empty($int) && $int != $dnsupdate['interface']) + continue; + if (!empty($updatehost) && ($updatehost != $dnsupdate['host'])) + continue; + + /* determine interface name */ + $if = get_real_interface($dnsupdate['interface']); + + if (isset($dnsupdate['usepublicip'])) + $wanip = dyndnsCheckIP($dnsupdate['interface']); + else + $wanip = get_interface_ip($dnsupdate['interface']); + + $wanipv6 = get_interface_ipv6($dnsupdate['interface']); + $cacheFile = "{$g['conf_path']}/dyndns_{$dnsupdate['interface']}_rfc2136_" . escapeshellarg($dnsupdate['host']) . "_{$dnsupdate['server']}.cache"; + $currentTime = time(); + + if ($wanip || $wanipv6) { + $keyname = $dnsupdate['keyname']; + /* trailing dot */ + if (substr($keyname, -1) != ".") + $keyname .= "."; + + $hostname = $dnsupdate['host']; + /* trailing dot */ + if (substr($hostname, -1) != ".") + $hostname .= "."; + + /* write private key file + this is dumb - public and private keys are the same for HMAC-MD5, + but nsupdate insists on having both */ + $fd = fopen("{$g['varetc_path']}/K{$i}{$keyname}+157+00000.private", "w"); + $privkey = << $maxCacheAgeSecs) || $forced) { + $upinst .= "update delete {$dnsupdate['host']}. A\n"; + $upinst .= "update add {$dnsupdate['host']}. {$dnsupdate['ttl']} A {$wanip}\n"; + $notify_text .= sprintf(gettext("DynDNS updated IP Address (A) for {$dnsupdate['host']} on %s (%s) to %s"), convert_real_interface_to_friendly_descr($if), $if, $wanip) . "\n"; + @file_put_contents($cacheFile, "{$wanip}|{$currentTime}"); + log_error("phpDynDNS: updating cache file {$cacheFile}: {$wanip}"); + $need_update = true; + } else { + log_error("phpDynDNS: Not updating {$dnsupdate['host']} A record because the IP address has not changed."); + } + } else + @unlink($cacheFile); + + /* Update IPv6 if we have it. */ + if (is_ipaddrv6($wanipv6)) { + if (($wanipv6 != $cachedipv6) || (($currentTime - $cacheTimev6) > $maxCacheAgeSecs) || $forced) { + $upinst .= "update delete {$dnsupdate['host']}. AAAA\n"; + $upinst .= "update add {$dnsupdate['host']}. {$dnsupdate['ttl']} AAAA {$wanipv6}\n"; + $notify_text .= sprintf(gettext("DynDNS updated IPv6 Address (AAAA) for {$dnsupdate['host']} on %s (%s) to %s"), convert_real_interface_to_friendly_descr($if), $if, $wanipv6) . "\n"; + @file_put_contents("{$cacheFile}.ipv6", "{$wanipv6}|{$currentTime}"); + log_error("phpDynDNS: updating cache file {$cacheFile}.ipv6: {$wanipv6}"); + $need_update = true; + } else { + log_error("phpDynDNS: Not updating {$dnsupdate['host']} AAAA record because the IPv6 address has not changed."); + } + } else + @unlink("{$cacheFile}.ipv6"); + conf_mount_ro(); + + $upinst .= "\n"; /* mind that trailing newline! */ + + if ($need_update) { + @file_put_contents("{$g['varetc_path']}/nsupdatecmds{$i}", $upinst); + unset($upinst); + /* invoke nsupdate */ + $cmd = "/usr/local/bin/nsupdate -k {$g['varetc_path']}/K{$i}{$keyname}+157+00000.key"; + if (isset($dnsupdate['usetcp'])) + $cmd .= " -v"; + $cmd .= " {$g['varetc_path']}/nsupdatecmds{$i}"; + mwexec_bg($cmd); + unset($cmd); + } + } + } + if (!empty($notify_text)) { + notify_all_remote($notify_text); + } + } + + return 0; +} + +/* configure cron service */ +function configure_cron() { + global $g, $config; + + conf_mount_rw(); + /* preserve existing crontab entries */ + $crontab_contents = file("/etc/crontab", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + + for ($i = 0; $i < count($crontab_contents); $i++) { + $cron_item =& $crontab_contents[$i]; + if (strpos($cron_item, "# pfSense specific crontab entries") !== false) { + array_splice($crontab_contents, $i - 1); + break; + } + } + $crontab_contents = implode("\n", $crontab_contents) . "\n"; + + + if (is_array($config['cron']['item'])) { + $crontab_contents .= "#\n"; + $crontab_contents .= "# " . gettext("pfSense specific crontab entries") . "\n"; + $crontab_contents .= "# " .gettext( "Created:") . " " . date("F j, Y, g:i a") . "\n"; + $crontab_contents .= "#\n"; + + foreach ($config['cron']['item'] as $item) { + $crontab_contents .= "\n{$item['minute']}\t"; + $crontab_contents .= "{$item['hour']}\t"; + $crontab_contents .= "{$item['mday']}\t"; + $crontab_contents .= "{$item['month']}\t"; + $crontab_contents .= "{$item['wday']}\t"; + $crontab_contents .= "{$item['who']}\t"; + $crontab_contents .= "{$item['command']}"; + } + + $crontab_contents .= "\n#\n"; + $crontab_contents .= "# " . gettext("If possible do not add items to this file manually.") . "\n"; + $crontab_contents .= "# " . gettext("If you do so, this file must be terminated with a blank line (e.g. new line)") . "\n"; + $crontab_contents .= "#\n\n"; + } + + /* please maintain the newline at the end of file */ + file_put_contents("/etc/crontab", $crontab_contents); + unset($crontab_contents); + + /* do a HUP kill to force sync changes */ + sigkillbypid("{$g['varrun_path']}/cron.pid", "HUP"); + + conf_mount_ro(); +} + +function upnp_action ($action) { + global $g, $config; + switch($action) { + case "start": + if (file_exists('/var/etc/miniupnpd.conf')) { + @unlink("{$g['varrun_path']}/miniupnpd.pid"); + mwexec_bg("/usr/local/sbin/miniupnpd -f /var/etc/miniupnpd.conf -P {$g['varrun_path']}/miniupnpd.pid"); + } + break; + case "stop": + killbypid("{$g['varrun_path']}/miniupnpd.pid"); + while((int)exec("/bin/pgrep -a miniupnpd | wc -l") > 0) + mwexec('killall miniupnpd 2>/dev/null', true); + mwexec('/sbin/pfctl -aminiupnpd -Fr 2>&1 >/dev/null'); + mwexec('/sbin/pfctl -aminiupnpd -Fn 2>&1 >/dev/null'); + break; + case "restart": + upnp_action('stop'); + upnp_action('start'); + break; + } +} + +function upnp_start() { + global $config; + + if(!isset($config['installedpackages']['miniupnpd']['config'])) + return; + + if($config['installedpackages']['miniupnpd']['config'][0]['enable']) { + echo gettext("Starting UPnP service... "); + require_once('/usr/local/pkg/miniupnpd.inc'); + sync_package_miniupnpd(); + echo "done.\n"; + } +} + +function install_cron_job($command, $active=false, $minute="0", $hour="*", $monthday="*", $month="*", $weekday="*", $who="root") { + global $config, $g; + + $is_installed = false; + + if (!is_array($config['cron'])) + $config['cron'] = array(); + if (!is_array($config['cron']['item'])) + $config['cron']['item'] = array(); + + $x=0; + foreach($config['cron']['item'] as $item) { + if(strstr($item['command'], $command)) { + $is_installed = true; + break; + } + $x++; + } + + if($active) { + $cron_item = array(); + $cron_item['minute'] = $minute; + $cron_item['hour'] = $hour; + $cron_item['mday'] = $monthday; + $cron_item['month'] = $month; + $cron_item['wday'] = $weekday; + $cron_item['who'] = $who; + $cron_item['command'] = $command; + if(!$is_installed) { + $config['cron']['item'][] = $cron_item; + write_config(sprintf(gettext("Installed cron job for %s"), $command)); + } else { + $config['cron']['item'][$x] = $cron_item; + write_config(sprintf(gettext("Updated cron job for %s"), $command)); + } + } else { + if($is_installed == true) { + unset($config['cron']['item'][$x]); + write_config(sprintf(gettext("Removed cron job for %s"), $command)); + } + } + configure_cron(); +} + +?> diff --git a/usr/etc/inc/shaper.inc b/usr/etc/inc/shaper.inc new file mode 100644 index 000000000..fddff9262 --- /dev/null +++ b/usr/etc/inc/shaper.inc @@ -0,0 +1,4529 @@ +GetInterface(); + $altq =& $altq_list_queues[$int]; + if ($altq) { + $bw_3 = $altq->GetBandwidth(); + $bw_3 = $bw_3 * get_bandwidthtype_scale($altq->GetBwscale()); + return floatval($bw_3); + } else + return 0; +} + +/* + * This is duplicated here since we cannot include guiconfig.inc. + * Including it makes all stuff break. + */ +function shaper_do_input_validation($postdata, $reqdfields, $reqdfieldsn, $input_errors) +{ + + /* check for bad control characters */ + foreach ($postdata as $pn => $pd) { + if (is_string($pd) && preg_match("/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/", $pd)) { + $input_errors[] = sprintf(gettext("The field '%s' contains invalid characters."), $pn); + } + } + + for ($i = 0; $i < count($reqdfields); $i++) { + if ($postdata[$reqdfields[$i]] == "") { + $input_errors[] = sprintf(gettext("The field '%s' is required."), $reqdfieldsn[$i]); + } + } +} + +function cleanup_queue_from_rules($queue) +{ + global $config; + + foreach ($config['filter']['rule'] as $rule) { + if ($rule['defaultqueue'] == $queue) + unset($rule['defaultqueue']); + if ($rule['ackqueue'] == $queue) + unset($rule['ackqueue']); + } +} + +function cleanup_dnqueue_from_rules($queue) +{ + global $config; + + foreach ($config['filter']['rule'] as $rule) { + if ($rule['dnpipe'] == $queue) + unset($rule['dnpipe']); + if ($rule['pdnpipe'] == $queue) + unset($rule['pdnpipe']); + } +} + +class altq_root_queue { + var $interface; + var $tbrconfig ; + var $bandwidth; + var $bandwidthtype; /* b, Kb, Mb */ + var $scheduler; + var $qlimit; + var $queues = array(); + var $qenabled = false; + var $link; + var $available_bw; /* in b/s */ + + /* Accesor functions */ + function GetAvailableBandwidth() { + return $this->available_bw; + } + function SetAvailableBandwidth($bw) { + $this->available_bw = $bw; + } + function GetDefaultQueuePresent() { + if (!empty($this->queues)) { + foreach ($this->queues as $q) { + if ($q->GetDefault()) + return true; + } + } + + return false; + } + function SetLink($link) { + $this->link = $link; + } + function GetLink() { + return $this->link; + } + function GetEnabled() { + return $this->qenabled; + } + function SetEnabled($value) { + $this->qenabled = $value; + } + function CanHaveChildren() { + if ($this->GetScheduler() == "CODELQ") + return false; + else + return true; + } + function CanBeDeleted() { + return false; + } + function GetQname() { + return $this->interface; + } + function SetQname($name) { + $this->interface = trim($name); + } + function GetInterface() { + return $this->interface; + } + function SetInterface($name) { + $this->interface = trim($name); + } + function GetTbrConfig() { + return $this->tbrconfig; + } + function SetTbrConfig($tbrconfig) { + $this->tbrconfig = $tbrconfig; + } + function GetBandwidth() { + return $this->bandwidth; + } + function SetBandwidth($bw) { + $this->bandwidth = $bw; + } + function GetBwscale() { + return $this->bandwidthtype; + } + function SetBwscale($bwscale) { + $this->bandwidthtype = $bwscale; + } + function GetScheduler() { + return $this->scheduler; + } + function SetScheduler($scheduler) { + $this->scheduler = trim($scheduler); + } + function GetQlimit() { + return $this->qlimit; + } + function SetQlimit($limit) { + $this->qlimit = $limit; + } + + function validate_input($data, &$input_errors) { + + $reqdfields[] = "bandwidth"; + $reqdfieldsn[] = gettext("Bandwidth"); + $reqdfields[] = "bandwidthtype"; + $reqdfieldsn[] = gettext("Bandwidthtype"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if ($data['bandwidth'] && (!is_numeric($data['bandwidth']))) + $input_errors[] = gettext("Bandwidth must be an integer."); + if ($data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth cannot be negative."); + if ($data['qlimit'] && (!is_numeric($data['qlimit']))) + $input_errors[] = gettext("Qlimit must be an integer."); + if ($data['qlimit'] < 0) + $input_errors[] = gettext("Qlimit must be positive."); + if ($data['tbrconfig'] && (!is_numeric($data['tbrconfig']))) + $input_errors[] = gettext("Tbrsize must be an integer."); + if ($data['tbrconfig'] < 0) + $input_errors[] = gettext("Tbrsize must be positive."); + } + + /* Implement this to shorten some code on the frontend page */ + function ReadConfig(&$conf) { + if (isset($conf['tbrconfig'])) + $this->SetTbrConfig($conf['tbrconfig']); + else + $this->SetTbrConfig($conf['tbrconfig']); + $this->SetBandwidth($conf['bandwidth']); + if ($conf['bandwidthtype'] <> "") + $this->SetBwscale($conf['bandwidthtype']); + if (isset($conf['scheduler'])) { + if ($this->GetScheduler() != $conf['scheduler']) { + foreach ($this->queues as $q) { + clean_child_queues($conf['scheduler'], $this->GetLink()); + $q->clean_queue($conf['scheduler']); + } + } + $this->SetScheduler($conf['scheduler']); + } + if (isset($conf['qlimit']) && $conf['qlimit'] <> "") + $this->SetQlimit($conf['qlimit']); + else + $this->SetQlimit(""); + if (isset($conf['name'])) + $this->SetQname($conf['name']); + if (!empty($conf['enabled'])) + $this->SetEnabled($conf['enabled']); + else + $this->SetEnabled(""); + } + + function copy_queue($interface, &$cflink) { + $cflink['interface'] = $interface; + $cflink['name'] = $interface; + $cflink['scheduler'] = $this->GetScheduler(); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['qlimit'] = $this->GetQlimit(); + $cflink['tbrconfig'] = $this->GetTbrConfig(); + $cflink['enabled'] = $this->GetEnabled(); + if (is_array($this->queues)) { + $cflink['queue'] = array(); + foreach ($this->queues as $q) { + $cflink['queue'][$q->GetQname()] = array(); + $q->copy_queue($interface, $cflink['queue'][$q->GetQname()]); + } + } + } + + function &get_queue_list(&$q = null) { + $qlist = array(); + + //$qlist[$this->GetQname()] = & $this; + if (is_array($this->queues)) { + foreach ($this->queues as $queue) + $queue->get_queue_list($qlist); + } + return $qlist; + } + + function &add_queue($interface, &$queue, &$path, &$input_errors) { + + if (!is_array($this->queues)) + $this->queues = array(); + + switch ($this->GetScheduler()) { + case "PRIQ": + $q =& new priq_queue(); + break; + case "HFSC": + $q =& new hfsc_queue(); + break; + case "CBQ": + $q =& new cbq_queue(); + break; + case "FAIRQ": + $q =& new fairq_queue(); + break; + default: + /* XXX: but should not happen anyway */ + return; + break; + } + $q->SetLink($path); + $q->SetInterface($this->GetInterface()); + $q->SetEnabled("on"); + $q->SetParent($this); + $q->ReadConfig($queue); + $q->validate_input($queue, $input_errors); + if (count($input_errors)) { + log_error("SHAPER: could not create queue " . $q->GetQname() . " on interface {$interface} because: " . print_r($input_errors, true)); + return $q; + } + + if (isset($queue['bandwidth'])) { + switch ($queue['bandwidthtype']) { + case "%": + $myBw = $this->GetAvailableBandwidth() * $queue['bandwidth'] / 100; + break; + default: + $myBw = $queue['bandwidth'] * get_bandwidthtype_scale($queue['bandwdithtype']); + break; + } + } + $q->SetAvailableBandwidth($myBw); + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() - $myBw); + $this->queues[$q->GetQname()] = &$q; + ref_on_altq_queue_list($this->GetQname(), $q->GetQname()); + if (is_array($queue['queue'])) { + foreach ($queue['queue'] as $key1 => $que) { + array_push($path, $key1); + $q->add_queue($q->GetInterface(), $que, $path, $input_errors); + array_pop($path); + } + } + + return $q; + } + + /* interface here might be optional */ + function &find_queue($interface, $qname) { + if ($qname == $this->GetQname()) { + return $this; + } + foreach ($this->queues as $q) { + $result =& $q->find_queue("", $qname); + if ($result) + return $result; + } + } + + function &find_parentqueue($interface, $qname) { + if ($qname == $interface) { + $result = NULL; + } else if ($this->queues[$qname]) { + $result = $this; + } else if ($this->GetScheduler() <> "PRIQ") { + foreach ($this->queues as $q) { + $result = $q->find_parentqueue("", $qname); + if ($result) + return $result; + } + } + } + + function build_tree() { + global $shaperIFlist; + + $tree = "
  • GetInterface()."&queue=". $this->GetInterface()."&action=show"; + $tree .= "\">" . $shaperIFlist[$this->GetInterface()] . ""; + if (is_array($this->queues)) { + $tree .= "
      "; + foreach ($this->queues as $q) { + $tree .= $q->build_tree(); + } + $tree .= "
    "; + } + $tree .= "
  • "; + return $tree; + } + + function delete_queue() { + foreach ($this->queues as $q) { + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() + $q->GetAvailableBandwidth()); + $q->delete_queue(); + } + unset_object_by_reference($this->GetLink()); + } + + function delete_all() { + if (count($this->queues)) { + foreach ($this->queues as $q) { + $q->delete_all(); + unset_object_by_reference($q->GetLink()); + unset($q); + } + unset($this->queues); + } + } + + /* + * First it spits: + * altq on $interface .............. + * then it goes like + * foreach ($queues as $qkey => $queue) + * this->queues[$qkey]->build_rule(); + */ + function build_rules(&$default = false) { + if (count($this->queues) > 0 && $this->GetEnabled() == "on") { + $default = false; + $rules = " altq on " . get_real_interface($this->GetInterface()); + if ($this->GetScheduler()) + $rules .= " ".strtolower($this->GetScheduler()); + if ($this->GetQlimit() > 0) + $rules .= " qlimit " . $this->GetQlimit() . " "; + if ($this->GetBandwidth()) { + $rules .= " bandwidth ".trim($this->GetBandwidth()); + if ($this->GetBwscale()) + $rules .= $this->GetBwscale(); + } + if ($this->GetTbrConfig()) + $rules .= " tbrsize ".$this->GetTbrConfig(); + if (count($this->queues)) { + $i = count($this->queues); + $rules .= " queue { "; + foreach ($this->queues as $qkey => $qnone) { + if ($i > 1) { + $i--; + $rules .= " {$qkey}, "; + } else + $rules .= " {$qkey} "; + } + $rules .= " } \n"; + foreach ($this->queues as $q) { + $rules .= $q->build_rules($default); + } + } + + if ($default == false) { + $error = "SHAPER: no default queue specified for interface ". $this->GetInterface() . ". The interface queue will be enforced as default."; + file_notice("Shaper", $error, "Error occurred", ""); + unset($error); + return "\n"; + } + $frule .= $rules; + } else if ($this->GetEnabled() == "on" && $this->GetScheduler() == "CODELQ") { + $rules = " altq on " . get_real_interface($this->GetInterface()); + if ($this->GetScheduler()) + $rules .= " ".strtolower($this->GetScheduler()); + if ($this->GetQlimit() > 0) + $rules .= " ( qlimit " . $this->GetQlimit() . " ) "; + if ($this->GetBandwidth()) { + $rules .= " bandwidth ".trim($this->GetBandwidth()); + if ($this->GetBwscale()) + $rules .= $this->GetBwscale(); + } + if ($this->GetTbrConfig()) + $rules .= " tbrsize ".$this->GetTbrConfig(); + + $rules .= " queue"; + } + + $rules .= " \n"; + return $rules; + } + + function build_javascript() { + $javascript = ""; + + return $javascript; + } + + function build_shortform() { + global $g; + + $altq =& $this; + if ($altq) + $scheduler = ": " . $altq->GetScheduler(); + $form = ""; + $form .= "GetInterface() . "&queue=". $this->GetInterface()."&action=show\">". $shaperIFlist[$this->GetInterface()] .": ".$scheduler.""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "Bandwidth: " . $this->GetBandwidth().$this->GetBwscale(); + $form .= ""; + $form .= ""; + $form .= "GetInterface() . "&queue="; + $form .= $this->GetQname() . "&action=delete\">"; + $form .= "\"disable\""; + $form .= "Disable shaper on interface"; + + return $form; + + } + /* + * For requesting the parameters of the root queues + * to the user like the traffic wizard does. + */ + function build_form() { + $form = "
    "; + $form .= gettext("Enable/Disable"); + $form .= "
    "; + $form .= " GetEnabled() == "on") + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Enable/disable discipline and its children") . ""; + $form .= ""; + $form .= "
    " . gettext("Name") . ""; + $form .= ""; + $form .= "".$this->GetQname().""; + $form .= ""; + $form .= "" . gettext("Scheduler Type "); + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "
    "; + $form .= gettext("NOTE: Changing this changes all child queues!"); + $form .= gettext(" Beware you can lose information."); + $form .= ""; + $form .= ""; + $form .= "" . gettext("Bandwidth"); + $form .= ""; + $form .= "GetBandwidth() . "\" />"; + $form .= ""; + $form .= ""; + $form .= "Queue Limit"; + $form .= ""; + $form .= "GetQlimit(); + $form .= "\" />"; + $form .= ""; + $form .= "TBR Size"; + $form .= ""; + $form .= "
    GetTbrConfig(); + $form .= "\" />"; + $form .= "
    "; + $form .= gettext("Adjusts the size, in bytes, of the token bucket regulator. " + . "If not specified, heuristics based on the interface " + . "bandwidth are used to determine the size."); + $form .= ""; + $form .= "GetInterface() . "\" />"; + $form .= "GetQname()."\" />"; + + + return $form; + } + + function update_altq_queue_data(&$data) { + $this->ReadConfig($data); + } + + /* + * Should call on each of it queues and subqueues + * the same function much like build_rules(); + */ + function wconfig() { + $cflink = &get_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['interface'] = $this->GetInterface(); + $cflink['name'] = $this->GetQname(); + $cflink['scheduler'] = $this->GetScheduler(); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['tbrconfig'] = trim($this->GetTbrConfig()); + if (empty($cflink['tbrconfig'])) + unset($cflink['tbrconfig']); + $cflink['enabled'] = $this->GetEnabled(); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + } + +} + +class priq_queue { + var $qname; + var $qinterface; + var $qlimit; + var $qpriority; + var $description; + var $isparent; + var $qbandwidth; + var $qbandwidthtype; + var $qdefault = ""; + var $qrio = ""; + var $qred = ""; + var $qcodel = ""; + var $qecn = ""; + var $qack; + var $qenabled = ""; + var $qparent; + var $link; + var $available_bw; /* in b/s */ + + /* This is here to help with form building and building rules/lists */ + var $subqueues = array(); + + /* Accesor functions */ + function GetAvailableBandwidth() { + return $this->available_bw; + } + function SetAvailableBandwidth($bw) { + $this->available_bw = $bw; + } + function SetLink($link) { + $this->link = $link; + } + function GetLink() { + return $this->link; + } + function &GetParent() { + return $this->qparent; + } + function SetParent(&$parent) { + $this->qparent = &$parent; + } + function GetEnabled() { + return $this->qenabled; + } + function SetEnabled($value) { + $this->qenabled = $value; + } + function CanHaveChildren() { + return false; + } + function CanBeDeleted() { + return true; + } + function GetQname() { + return $this->qname; + } + function SetQname($name) { + $this->qname = trim($name); + } + function GetBandwidth() { + return $this->qbandwidth; + } + function SetBandwidth($bandwidth) { + $this->qbandwidth = $bandwidth; + } + function GetInterface() { + return $this->qinterface; + } + function SetInterface($name) { + $this->qinterface = trim($name); + } + function GetQlimit() { + return $this->qlimit; + } + function SetQlimit($limit) { + $this->qlimit = $limit; + } + function GetQpriority() { + return $this->qpriority; + } + function SetQpriority($priority) { + $this->qpriority = $priority; + } + function GetDescription() { + return $this->description; + } + function SetDescription($str) { + $this->description = trim($str); + } + function GetFirstime() { + return $this->firsttime; + } + function SetFirsttime($number) { + $this->firsttime = $number; + } + function GetBwscale() { + return $this->qbandwidthtype; + } + function SetBwscale($scale) { + $this->qbandwidthtype = $scale; + } + function GetDefaultQueuePresent() { + if ($this->GetDefault()) + return true; + if (!empty($this->subqueues)) { + foreach ($this->subqueues as $q) { + if ($q->GetDefault()) + return true; + } + } + + return false; + } + function GetDefault() { + return $this->qdefault; + } + function SetDefault($value = false) { + $this->qdefault = $value; + } + function GetCodel() { + return $this->codel; + } + function SetCodel($codel = false) { + $this->codel = $codel; + } + function GetRed() { + return $this->qred; + } + function SetRed($red = false) { + $this->qred = $red; + } + function GetRio() { + return $this->qrio; + } + function SetRio($rio = false) { + $this->qrio = $rio; + } + function GetEcn() { + return $this->qecn; + } + function SetEcn($ecn = false) { + $this->qecn = $ecn; + } + function GetAck() { + return $this->qack; + } + function SetAck($ack = false) { + $this->qack = $ack; + } + + function build_javascript() { + $javascript = ""; + + return $javascript; + } + + function &add_queue($interface, &$qname, &$path, &$input_errors) { return; } + + /* + * Currently this will not be called unless we decide to clone a whole + * queue tree on the 'By Queues' view or support drag&drop on the tree/list + */ + function copy_queue($interface, &$cflink) { + + $cflink['name'] = $this->GetQname(); + $cflink['interface'] = $interface; + $cflink['qlimit'] = $this->GetQlimit(); + $cflink['priority'] = $this->GetQpriority(); + $cflink['description'] = $this->GetDescription(); + $cflink['enabled'] = $this->GetEnabled(); + $cflink['default'] = $this->GetDefault(); + $cflink['red'] = $this->GetRed(); + $cflink['codel'] = $this->GetCodel(); + $cflink['rio'] = $this->GetRio(); + $cflink['ecn'] = $this->GetEcn(); + + if (is_array($this->subqueues)) { + $cflinkp['queue'] = array(); + foreach ($this->subqueues as $q) { + $cflink['queue'][$q->GetQname()] = array(); + $q->copy_queue($interface, $cflink['queue'][$q->GetQname()]); + } + } + + } + + function clean_queue($sched) { + clean_child_queues($sched, $this->GetLink()); + if (is_array($this->subqueues)) { + foreach ($this->subqueues as $q) + $q->clean_queue($sched); + } + } + + function &get_queue_list(&$qlist) { + + $qlist[$this->GetQname()] = & $this; + if (is_array($this->subqueues)) { + foreach ($this->subqueues as $queue) + $queue->get_queue_list($qlist); + } + } + + function delete_queue() { + unref_on_altq_queue_list($this->GetQname()); + cleanup_queue_from_rules($this->GetQname()); + unset_object_by_reference($this->GetLink()); + } + + function delete_all() { + if (count($this->subqueues)) { + foreach ($this->subqueues as $q) { + $q->delete_all(); + unset_object_by_reference($q->GetLink()); + unset($q); + } + unset($this->subqueues); + } + } + + function &find_queue($interface, $qname) { + if ($qname == $this->GetQname()) + return $this; + } + + function find_parentqueue($interface, $qname) { return; } + + function validate_input($data, &$input_errors) { + + $reqdfields[] = "name"; + $reqdfieldsn[] = gettext("Name"); + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if ($data['bandwidth'] && (!is_numeric($data['bandwidth']))) + $input_errors[] = "Bandwidth must be an integer."; + if ($data['bandwidth'] < 0) + $input_errors[] = "Bandwidth cannot be negative."; + if ($data['priority'] && (!is_numeric($data['priority']) + || ($data['priority'] < 1) || ($data['priority'] > 15))) { + $input_errors[] = gettext("The priority must be an integer between 1 and 15."); + } + if ($data['qlimit'] && (!is_numeric($data['qlimit']))) + $input_errors[] = gettext("Queue limit must be an integer"); + if ($data['qlimit'] < 0) + $input_errors[] = gettext("Queue limit must be positive"); + if (!empty($data['newname']) && !preg_match("/^[a-zA-Z0-9_-]*$/", $data['newname'])) + $input_errors[] = gettext("Queue names must be alphanumeric and _ or - only."); + if (!empty($data['name']) && !preg_match("/^[a-zA-Z0-9_-]*$/", $data['name'])) + $input_errors[] = gettext("Queue names must be alphanumeric and _ or - only."); + $default = $this->GetDefault(); + if (!empty($data['default']) && altq_get_default_queue($data['interface']) && empty($default)) + $input_errors[] = gettext("Only one default queue per interface is allowed."); + } + + function ReadConfig(&$q) { + if (!empty($q['name']) && !empty($q['newname']) && $q['name'] != $q['newname']) { + $this->SetQname($q['newname']); + } else if (!empty($q['newname'])) { + $this->SetQname($q['newname']); + } else if (isset($q['name'])) + $this->SetQname($q['name']); + if (isset($q['interface'])) + $this->SetInterface($q['interface']); + $this->SetBandwidth($q['bandwidth']); + if ($q['bandwidthtype'] <> "") + $this->SetBwscale($q['bandwidthtype']); + if (!empty($q['qlimit'])) + $this->SetQlimit($q['qlimit']); + else + $this->SetQlimit(""); // Default + if (!empty($q['priority'])) + $this->SetQPriority($q['priority']); + else + $this->SetQpriority(""); + if (!empty($q['description'])) + $this->SetDescription($q['description']); + else + $this->SetDescription(""); + if (!empty($q['red'])) + $this->SetRed($q['red']); + else + $this->SetRed(); + if (!empty($q['codel'])) + $this->SetCodel($q['codel']); + else + $this->SetCodel(); + if (!empty($q['rio'])) + $this->SetRio($q['rio']); + else + $this->SetRio(); + if (!empty($q['ecn'])) + $this->SetEcn($q['ecn']); + else + $this->SetEcn(); + if (!empty($q['default'])) + $this->SetDefault($q['default']); + else + $this->SetDefault(); + if (!empty($q['enabled'])) + $this->SetEnabled($q['enabled']); + else + $this->SetEnabled(""); + + } + + function build_tree() { + $tree = "
  • GetInterface()."&queue=". $this->GetQname()."&action=show"; + $tree .= "\" "; + $tmpvalue = $this->GetDefault(); + if (!empty($tmpvalue)) + $tree .= " class=\"navlnk\""; + $tree .= " >" . $this->GetQname() . ""; + /* + * Not needed here! + * if (is_array($queues) { + * $tree .= "
      "; + * foreach ($q as $queues) + * $tree .= $queues['$q->GetName()']->build_tree(); + * endforeach + * $tree .= "
    "; + * } + */ + + $tree .= "
  • "; + + return $tree; + } + + /* Should return something like: + * queue $qname on $qinterface bandwidth .... + */ + function build_rules(&$default = false) { + $pfq_rule = " queue ". $this->qname; + if ($this->GetInterface()) + $pfq_rule .= " on ".get_real_interface($this->GetInterface()); + $tmpvalue = $this->GetQpriority(); + if (!empty($tmpvalue)) + $pfq_rule .= " priority ".$this->GetQpriority(); + $tmpvalue = $this->GetQlimit(); + if (!empty($tmpvalue)) + $pfq_rule .= " qlimit " . $this->GetQlimit(); + if ($this->GetRed() || $this->GetRio() || $this->GetEcn() || $this->GetDefault() || $this->GetCodel()) { + $pfq_rule .= " priq ( "; + $tmpvalue = $this->GetRed(); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " red "; + } + $tmpvalue = $this->GetRio(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " rio "; + } + $tmpvalue = $this->GetEcn(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " ecn "; + } + $tmpvalue = $this->GetCodel(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " codel "; + } + $tmpvalue = $this->GetDefault(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $pfq_rule .= " default "; + $default = true; + } + $pfq_rule .= " ) "; + } + + $pfq_rule .= " \n"; + + return $pfq_rule; + } + + /* + * To return the html form to show to user + * for getting the parameters. + * Should do even for first time when the + * object is created and later when we may + * need to update it. + */ + function build_form() { + $form = "
    "; + $form .= gettext("Enable/Disable"); + $form .= "
    "; + $form .= " GetEnabled() == "on") + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Enable/Disable queue and its children") . ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= gettext("Queue Name") . ""; + $form .= "GetQname()); + $form .= "\" />"; + $form .= "GetQname()); + $form .= "\" />"; + $form .= "
    " . gettext("Enter the name of the queue here. Do not use spaces and limit the size to 15 characters."); + $form .= "
    "; + $form .= ""; + $form .= "" . gettext("Priority") . ""; + $form .= " GetQpriority()); + $form .= "\" />"; + $form .= "
    " . gettext("For hfsc, the range is 0 to 7. The default is 1. Hfsc queues with a higher priority are preferred in the case of overload.") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Queue limit") . ""; + $form .= " GetQlimit()); + $form .= "\" />"; + $form .= "
    " . gettext("Queue limit in packets."); + $form .= ""; + $form .= ""; + $form .= "" . gettext("Scheduler options") . ""; + $form .= ""; + if (empty($this->subqueues)) { + if ($this->GetDefault()) { + $form .= ""; + } else { + $form .= ""; + } + } + $form .= "GetRed(); + if(!empty($tmpvalue)) + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Random Early Detection") . "
    "; + $form .= "GetRio(); + if(!empty($tmpvalue)) + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Random Early Detection In and Out") . "
    "; + $form .= "GetEcn(); + if(!empty($tmpvalue)) + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Explicit Congestion Notification") . "
    "; + $form .= "GetCodel(); + if(!empty($tmpvalue)) + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Codel Active Queue") . "
    "; + $form .= "
    " . gettext("Select options for this queue"); + $form .= "
    "; + $form .= "" . gettext("Description") . ""; + $form .= ""; + $form .= "GetDescription() . "\" />"; + $form .= ""; + $form .= "GetInterface()."\" />"; + + return $form; + } + + function build_shortform() { + /* XXX: Hacks in site. Mostly layer violations! */ + global $g, $altq_list_queues; + global $shaperIFlist; + + $altq =& $altq_list_queues[$this->GetInterface()]; + if ($altq) + $scheduler = ": " . $altq->GetScheduler(); + $form = ""; + $form .= "GetInterface() . "&queue=" . $this->GetQname()."&action=show\">". $shaperIFlist[$this->GetInterface()] .$scheduler.""; + $form .= ""; + /* + * XXX: Hack in sight maybe fix with a class that wraps all + * of this layer violations + */ + $form .= ""; + $form .= ""; + $form .= gettext("Bandwidth:") . " " . $this->GetBandwidth().$this->GetBwscale(); + $form .= ""; + $tmpvalue = $this->GetQpriority(); + if (!empty($tmpvalue)) + $form .= "" .gettext("Priority: on") . " "; + $tmpvalue = $this->GetDefault(); + if (!empty($tmpvalue)) + $form .= "" . gettext("Default: on") . " "; + $form .= ""; + $form .= "GetInterface() . "&queue="; + $form .= $this->GetQname() . "&action=delete\">"; + $form .= "\"delete\""; + $form .= "" . gettext("Delete queue from interface") . ""; + + return $form; + + } + + function update_altq_queue_data(&$q) { + $this->ReadConfig($q); + } + + function wconfig() { + $cflink =& get_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['name'] = $this->GetQname(); + $cflink['interface'] = $this->GetInterface(); + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = trim($this->GetQpriority()); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['description'] = trim($this->GetDescription()); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['enabled'] = trim($this->GetEnabled()); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = trim($this->GetDefault()); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['codel'] = trim($this->GetCodel()); + if (empty($cflink['codel'])) + unset($cflink['codel']); + $cflink['rio'] = trim($this->GetRio()); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + } +} + +class hfsc_queue extends priq_queue { + /* realtime */ + var $realtime; + var $r_m1; + var $r_d; + var $r_m2; + /* linkshare */ + var $linkshare; + var $l_m1; + var $l_d; + var $l_m2; + /* upperlimit */ + var $upperlimit; + var $u_m1; + var $u_d; + var $u_m2; + + /* + * HFSC can have nested queues. + */ + function CanHaveChildren() { + return true; + } + function GetRealtime() { + return $this->realtime; + } + function GetR_m1() { + return $this->r_m1; + } + function GetR_d() { + return $this->r_d; + } + function GetR_m2() { + return $this->r_m2; + } + function SetRealtime() { + $this->realtime = "on"; + } + function DisableRealtime() { + $this->realtime = ""; + } + function SetR_m1($value) { + $this->r_m1 = $value; + } + function SetR_d($value) { + $this->r_d = $value; + } + function SetR_m2($value) { + $this->r_m2 = $value; + } + function GetLinkshare() { + return $this->linkshare; + } + function DisableLinkshare() { + $this->linkshare = ""; + } + function GetL_m1() { + return $this->l_m1; + } + function GetL_d() { + return $this->l_d; + } + function GetL_m2() { + return $this->l_m2; + } + function SetLinkshare() { + $this->linkshare = "on"; + } + function SetL_m1($value) { + $this->l_m1 = $value; + } + function SetL_d($value) { + $this->l_d = $value; + } + function SetL_m2($value) { + $this->l_m2 = $value; + } + function GetUpperlimit() { + return $this->upperlimit; + } + function GetU_m1() { + return $this->u_m1; + } + function GetU_d() { + return $this->u_d; + } + function GetU_m2() { + return $this->u_m2; + } + function SetUpperlimit() { + $this->upperlimit = "on"; + } + function DisableUpperlimit() { + $this->upperlimit = ""; + } + function SetU_m1($value) { + $this->u_m1 = $value; + } + function SetU_d($value) { + $this->u_d = $value; + } + function SetU_m2($value) { + $this->u_m2 = $value; + } + + function &add_queue($interface, &$qname, &$path, &$input_errors) { + + if (!is_array($this->subqueues)) + $this->subqueues = array(); + $q =& new hfsc_queue(); + $q->SetInterface($this->GetInterface()); + $q->SetParent($this); + $q->ReadConfig($qname); + $q->validate_input($qname, $input_errors); + if (count($input_errors)) { + log_error("SHAPER: could not create queue " . $q->GetQname() . " on interface {$interface} because: " . print_r($input_errors, true)); + return $q; + } + + $q->SetEnabled("on"); + $q->SetLink($path); + switch ($q->GetBwscale()) { + case "%": + $myBw = $this->GetAvailableBandwidth() * $qname['bandwidth'] / 100; + break; + default: + $myBw = $qname['bandwidth'] * get_bandwidthtype_scale($q->GetBwscale()); + break; + } + $q->SetAvailableBandwidth($myBw); + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() - $myBw); + + $this->subqueues[$q->GetQname()] =& $q; //new hfsc_queue() + ref_on_altq_queue_list($this->GetQname(), $q->GetQname()); + if (is_array($qname['queue'])) { + foreach ($qname['queue'] as $key1 => $que) { + array_push($path, $key1); + $q->add_queue($q->GetInterface(), $que, $path, $input_errors); + array_pop($path); + } + } + + return $q; + } + + function copy_queue($interface, &$cflink) { + + $cflink['name'] = $this->GetQname(); + $cflink['interface'] = $interface; + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = trim($this->GetQpriority()); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['description'] = trim($this->GetDescription()); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = trim($this->GetEnabled()); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = trim($this->GetDefault()); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['rio'] = trim($this->GetRio()); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + if ($this->GetLinkshare() <> "") { + if ($this->GetL_m1() <> "") { + $cflink['linkshare1'] = $this->GetL_m1(); + $cflink['linkshare2'] = $this->GetL_d(); + $cflink['linkshare'] = "on"; + } else { + unset($cflink['linkshare1']); + unset($cflink['linkshare2']); + unset($cflink['linkshare']); + } + if ($this->GetL_m2() <> "") { + $cflink['linkshare3'] = $this->GetL_m2(); + $cflink['linkshare'] = "on"; + } else { + unset($cflink['linkshare3']); + unset($cflink['linkshare']); + } + } + if ($this->GetRealtime() <> "") { + if ($this->GetR_m1() <> "") { + $cflink['realtime1'] = $this->GetR_m1(); + $cflink['realtime2'] = $this->GetR_d(); + $cflink['realtime'] = "on"; + } else { + unset($cflink['realtime1']); + unset($cflink['realtime2']); + unset($cflink['realtime']); + } + if ($this->GetR_m2() <> "") { + $cflink['realtime3'] = $this->GetR_m2(); + $cflink['realtime'] = "on"; + } else { + unset($cflink['realtime3']); + unset($cflink['realtime']); + } + } + if ($this->GetUpperlimit() <> "") { + if ($this->GetU_m1() <> "") { + $cflink['upperlimit1'] = $this->GetU_m1(); + $cflink['upperlimit2'] = $this->GetU_d(); + $cflink['upperlimit'] = "on"; + } else { + unset($cflink['upperlimit']); + unset($cflink['upperlimit1']); + unset($cflink['upperlimit2']); + } + if ($this->GetU_m2() <> "") { + $cflink['upperlimit3'] = $this->GetU_m2(); + $cflink['upperlimit'] = "on"; + } else { + unset($cflink['upperlimit3']); + unset($cflink['upperlimit']); + } + } + + if (is_array($this->subqueues)) { + $cflinkp['queue'] = array(); + foreach ($this->subqueues as $q) { + $cflink['queue'][$q->GetQname()] = array(); + $q->copy_queue($interface, $cflink['queue'][$q->GetQname()]); + } + } + } + + function delete_queue() { + unref_on_altq_queue_list($this->GetQname()); + cleanup_queue_from_rules($this->GetQname()); + $parent =& $this->GetParent(); + foreach ($this->subqueues as $q) { + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() + $q->GetAvailableBandwidth()); + $q->delete_queue(); + } + unset_object_by_reference($this->GetLink()); + } + + /* + * Should search even its children + */ + function &find_queue($interface, $qname) { + if ($qname == $this->GetQname()) + return $this; + + foreach ($this->subqueues as $q) { + $result =& $q->find_queue("", $qname); + if ($result) + return $result; + } + } + + function &find_parentqueue($interface, $qname) { + if ($this->subqueues[$qname]) + return $this; + foreach ($this->subqueues as $q) { + $result = $q->find_parentqueue("", $qname); + if ($result) + return $result; + } + } + + function validate_input($data, &$input_errors) { + parent::validate_input($data, $input_errors); + + $reqdfields[] = "bandwidth"; + $reqdfieldsn[] = gettext("Bandwidth"); + $reqdfields[] = "bandwidthtype"; + $reqdfieldsn[] = gettext("Bandwidthtype"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if (isset($data['linkshare3']) && $data['linkshare3'] <> "") { + if ($data['bandwidth'] && (!is_numeric($data['bandwidth']))) + $input_errors[] = gettext("Bandwidth must be an integer."); + + if ($data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth cannot be negative."); + + if ($data['bandwidthtype'] == "%") { + if ($data['bandwidth'] > 100 || $data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth in percentage should be between 1 and 100 bounds."); + } + /* + $parent =& $this->GetParent(); + switch ($data['bandwidthtype']) { + case "%": + $myBw = $parent->GetAvailableBandwidth() * floatval($data['bandwidth']) / 100; + default: + $mybw = floatval($data['bandwidth']) * get_bandwidthtype_scale($data['bandwidthtype']); + break; + } + if ($parent->GetAvailableBandwidth() < $myBw) + $input_errors[] = "The sum of children bandwidth exceeds that of the parent."; + */ + } + + if ($data['upperlimit1'] <> "" && $data['upperlimit2'] == "") + $input_errors[] = gettext("upperlimit service curve defined but missing (d) value"); + if ($data['upperlimit2'] <> "" && $data['upperlimit1'] == "") + $input_errors[] = gettext("upperlimit service curve defined but missing initial bandwidth (m1) value"); + if ($data['upperlimit1'] <> "" && !is_valid_shaperbw($data['upperlimit1'])) + $input_errors[] = gettext("upperlimit m1 value needs to be Kb, Mb, Gb, or %"); + if ($data['upperlimit2'] <> "" && !is_numeric($data['upperlimit2'])) + $input_errors[] = gettext("upperlimit d value needs to be numeric"); + if ($data['upperlimit3'] <> "" && !is_valid_shaperbw($data['upperlimit3'])) + $input_errors[] = gettext("upperlimit m2 value needs to be Kb, Mb, Gb, or %"); + + /* + if (isset($data['upperlimit']) && $data['upperlimit3'] <> "" && $data['upperlimit1'] <> "") { + $bw_1 = get_hfsc_bandwidth($this, $data['upperlimit1']); + $bw_2 = get_hfsc_bandwidth($this, $data['upperlimit3']); + if (floatval($bw_1) < floatval($bw_2)) + $input_errors[] = ("upperlimit m1 cannot be smaller than m2"); + + if (get_interface_bandwidth($this) < (0.8 * (floatval($bw_1) + floatval($bw_2)))) + $input_errors[] = ("upperlimit specification exceeds 80% of allowable allocation."); + } + */ + if ($data['linkshare1'] <> "" && $data['linkshare2'] == "") + $input_errors[] = gettext("linkshare service curve defined but missing (d) value"); + if ($data['linkshare2'] <> "" && $data['linkshare1'] == "") + $input_errors[] = gettext("linkshare service curve defined but missing initial bandwidth (m1) value"); + if ($data['linkshare1'] <> "" && !is_valid_shaperbw($data['linkshare1'])) + $input_errors[] = gettext("linkshare m1 value needs to be Kb, Mb, Gb, or %"); + if ($data['linkshare2'] <> "" && !is_numeric($data['linkshare2'])) + $input_errors[] = gettext("linkshare d value needs to be numeric"); + if ($data['linkshare3'] <> "" && !is_valid_shaperbw($data['linkshare3'])) + $input_errors[] = gettext("linkshare m2 value needs to be Kb, Mb, Gb, or %"); + if ($data['realtime1'] <> "" && $data['realtime2'] == "") + $input_errors[] = gettext("realtime service curve defined but missing (d) value"); + if ($data['realtime2'] <> "" && $data['realtime1'] == "") + $input_errors[] = gettext("realtime service curve defined but missing initial bandwidth (m1) value"); + + /* + if (isset($data['linkshare']) && $data['linkshare3'] <> "" && $data['linkshare1'] <> "" && 0) { + $bw_1 = get_hfsc_bandwidth($this, $data['linkshare1']); + $bw_2 = get_hfsc_bandwidth($this, $data['linkshare3']); + if (floatval($bw_1) < floatval($bw_2)) + $input_errors[] = ("linkshare m1 cannot be smaller than m2"); + + if (get_interface_bandwidth($this) < (0.8 * (floatval($bw_1) + floatval($bw_2)))) + $input_errors[] = ("linkshare specification exceeds 80% of allowable allocation."); + } + */ + + if ($data['realtime1'] <> "" && !is_valid_shaperbw($data['realtime1'])) + $input_errors[] = gettext("realtime m1 value needs to be Kb, Mb, Gb, or %"); + if ($data['realtime2'] <> "" && !is_numeric($data['realtime2'])) + $input_errors[] = gettext("realtime d value needs to be numeric"); + if ($data['realtime3'] <> "" && !is_valid_shaperbw($data['realtime3'])) + $input_errors[] = gettext("realtime m2 value needs to be Kb, Mb, Gb, or %"); + + /* + if (isset($data['realtime']) && $data['realtime3'] <> "" && $data['realtime1'] <> "" && 0) { + $bw_1 = get_hfsc_bandwidth($this, $data['realtime1']); + $bw_2 = get_hfsc_bandwidth($this, $data['realtime3']); + if (floatval($bw_1) < floatval($bw_2)) + $input_errors[] = ("realtime m1 cannot be smaller than m2"); + + if (get_interface_bandwidth($this) < (0.8 * (floatval($bw_1) + floatval($bw_2)))) + $input_errors[] = ("realtime specification exceeds 80% of allowable allocation."); + } + */ + } + + function ReadConfig(&$cflink) { + if (!empty($cflink['linkshare'])) { + if (!empty($cflink['linkshare1'])) { + $this->SetL_m1($cflink['linkshare1']); + $this->SetL_d($cflink['linkshare2']); + $this->SetLinkshare(); + } else { + $this->SetL_m1(""); + $this->SetL_d(""); + $this->DisableLinkshare(); + } + if (!empty($cflink['linkshare3'])) { + $this->SetL_m2($cflink['linkshare3']); + $this->SetLinkshare(); + } + } else + $this->DisableLinkshare(); + if (!empty($cflink['realtime'])) { + if (!empty($cflink['realtime1'])) { + $this->SetR_m1($cflink['realtime1']); + $this->SetR_d($cflink['realtime2']); + $this->SetRealtime(); + } else { + $this->SetR_m1(""); + $this->SetR_d(""); + $this->DisableRealtime(); + } + if (!empty($cflink['realtime3'])) { + $this->SetR_m2($cflink['realtime3']); + $this->SetRealtime(); + } + } else + $this->DisableRealtime(); + if (!empty($cflink['upperlimit'])) { + if (!empty($cflink['upperlimit1'])) { + $this->SetU_m1($cflink['upperlimit1']); + $this->SetU_d($cflink['upperlimit2']); + $this->SetUpperlimit(); + } else { + $this->SetU_m1(""); + $this->SetU_d(""); + $this->DisableUpperlimit(); + } + if (!empty($cflink['upperlimit3'])) { + $this->SetU_m2($cflink['upperlimit3']); + $this->SetUpperlimit(); + } + } else + $this->DisableUpperlimit(); + parent::ReadConfig($cflink); + } + + function build_tree() { + $tree = "
  • GetInterface() ."&queue=" . $this->GetQname()."&action=show"; + $tree .= "\" "; + $tmpvalue = $this->GetDefault(); + if (!empty($tmpvalue)) + $tree .= " class=\"navlnk\""; + $tree .= " >" . $this->GetQname() . ""; + if (is_array($this->subqueues)) { + $tree .= "
      "; + foreach ($this->subqueues as $q) { + $tree .= $q->build_tree(); + } + $tree .= "
    "; + } + $tree .= "
  • "; + return $tree; + } + + /* Even this should take children into consideration */ + function build_rules(&$default = false) { + + $pfq_rule = " queue ". $this->qname; + if ($this->GetInterface()) + $pfq_rule .= " on ".get_real_interface($this->GetInterface()); + if ($this->GetBandwidth() && $this->GetBwscale()) + $pfq_rule .= " bandwidth ".trim($this->GetBandwidth()).$this->GetBwscale(); + + $tmpvalue = $this->GetQlimit(); + if (!empty($tmpvalue)) + $pfq_rule .= " qlimit " . $this->GetQlimit(); + if ($this->GetDefault() || $this->GetRed() || $this->GetRio() || $this->GetEcn() || $this->GetCodel() || $this->GetRealtime() <> "" || $this->GetLinkshare() <> "" || $this->GetUpperlimit() <> "") { + $pfq_rule .= " hfsc ( "; + $tmpvalue = $this->GetRed(); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " red "; + } + + $tmpvalue = $this->GetRio(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " rio "; + } + $tmpvalue = $this->GetEcn(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " ecn "; + } + $tmpvalue = $this->GetCodel(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " codel "; + } + $tmpvalue = $this->GetDefault(); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " default "; + $default = true; + } + + if ($this->GetRealtime() <> "") { + if ($comma) + $pfq_rule .= " , "; + if ($this->GetR_m1() <> "" && $this->GetR_d() <> "" && $this->GetR_m2() <> "") + $pfq_rule .= " realtime (".$this->GetR_m1() . ", " . $this->GetR_d().", ". $this->GetR_m2() .") "; + else if ($this->GetR_m2() <> "") + $pfq_rule .= " realtime " . $this->GetR_m2(); + $comma = 1; + } + if ($this->GetLinkshare() <> "") { + if ($comma) + $pfq_rule .= " ,"; + if ($this->GetL_m1() <> "" && $this->GetL_d() <> "" && $this->GetL_m2() <> "") + $pfq_rule .= " linkshare (".$this->GetL_m1(). ", ". $this->GetL_d(). ", ". $this->GetL_m2(). ") "; + else if ($this->GetL_m2() <> "") + $pfq_rule .= " linkshare " . $this->GetL_m2() . " "; + $comma = 1; + } + if ($this->GetUpperlimit() <> "") { + if ($comma) + $pfq_rule .= " ,"; + if ($this->GetU_m1() <> "" && $this->GetU_d() <> "" && $this->GetU_m2() <> "") + $pfq_rule .= " upperlimit (".$this->GetU_m1().", ". $this->GetU_d().", ". $this->GetU_m2(). ") "; + else if ($this->GetU_m2() <> "") + $pfq_rule .= " upperlimit " . $this->GetU_m2() . " "; + } + $pfq_rule .= " ) "; + } + if (count($this->subqueues)) { + $i = count($this->subqueues); + $pfq_rule .= " { "; + foreach ($this->subqueues as $qkey => $qnone) { + if ($i > 1) { + $i--; + $pfq_rule .= " {$qkey}, "; + } else + $pfq_rule .= " {$qkey} "; + } + $pfq_rule .= " } \n"; + foreach ($this->subqueues as $q) + $pfq_rule .= $q->build_rules($default); + } + + $pfq_rule .= " \n"; + + return $pfq_rule; + } + + function build_javascript() { + $javascript = parent::build_javascript(); + $javascript .= ""; + + return $javascript; + } + + function build_form() { + $form = parent::build_form(); + $form .= ""; + $form .= "" . gettext("Bandwidth") . ""; + $form .= " GetBandwidth()); + $form .= "\" />"; + $form .= "
    "; + $form .= "" . gettext("Choose the amount of bandwidth for this queue"); + $form .= ""; + $form .= ""; + $form .= "" . gettext("Service Curve (sc)") . ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "
     
    m1
    d
    m2
    GetUpperlimit()<> "") + $form .= " checked=\"checked\" "; + $form .= "onchange=\"enable_upperlimit()\" /> " . gettext("Upperlimit:") . "GetU_m1()); + $form .= "\" id=\"upperlimit1\" name=\"upperlimit1\" "; + if ($this->GetUpperlimit() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetU_d()); + $form .= "\" id=\"upperlimi2\" name=\"upperlimit2\" "; + if ($this->GetUpperlimit() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetU_m2()); + $form .= "\" id=\"upperlimit3\" name=\"upperlimit3\" "; + if ($this->GetUpperlimit() == "") + $form .= " disabled=\"disabled\""; + $form .= " />" . gettext("The maximum allowed bandwidth for the queue.") . "
    GetRealtime() <> "") + $form .= " checked=\"checked\" "; + $form .= "onchange=\"enable_realtime()\" /> " . gettext("Real time:") . "GetR_m1()); + $form .= "\" id=\"realtime1\" name=\"realtime1\" "; + if ($this->GetRealtime() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetR_d()); + $form .= "\" id=\"realtime2\" name=\"realtime2\" "; + if ($this->GetRealtime() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetR_m2()); + $form .= "\" id=\"realtime3\" name=\"realtime3\" "; + if ($this->GetRealtime() == "") + $form .= " disabled=\"disabled\""; + $form .= " />" . gettext("The minimum required bandwidth for the queue.") . "
    GetLinkshare() <> "") + $form .= " checked=\"checked\" "; + $form .= "onchange=\"enable_linkshare()\" /> " . gettext("Link share:") . "GetL_m1()); + $form .= "\" id=\"linkshare1\" name=\"linkshare1\" "; + if ($this->GetLinkshare() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetL_d()); + $form .= "\" id=\"linkshare2\" name=\"linkshare2\" "; + if ($this->GetLinkshare() == "") + $form .= " disabled=\"disabled\""; + $form .= " />GetL_m2()); + $form .= "\" id=\"linkshare3\" name=\"linkshare3\" "; + if ($this->GetLinkshare() == "") + $form .= " disabled=\"disabled\""; + $form .= " />" . gettext("The bandwidth share of a backlogged queue - this overrides priority.") . "

    "; + $form .= gettext("The format for service curve specifications is (m1, d, m2). m2 controls " + . "the bandwidth assigned to the queue. m1 and d are optional and can be " + . "used to control the initial bandwidth assignment. For the first d milliseconds the queue gets the bandwidth given as m1, afterwards the value " + . "given in m2."); + $form .= ""; + $form .= ""; + + return $form; + } + + function update_altq_queue_data(&$data) { + $this->ReadConfig($data); + } + + function wconfig() { + $cflink =& get_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['name'] = $this->GetQname(); + $cflink['interface'] = $this->GetInterface(); + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = $this->GetQpriority(); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['description'] = $this->GetDescription(); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = $this->GetEnabled(); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = $this->GetDefault(); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['rio'] = $this->GetRio(); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + $cflink['codel'] = trim($this->GetCodel()); + if (empty($cflink['codel'])) + unset($cflink['codel']); + if ($this->GetLinkshare() <> "") { + if ($this->GetL_m1() <> "") { + $cflink['linkshare1'] = $this->GetL_m1(); + $cflink['linkshare2'] = $this->GetL_d(); + $cflink['linkshare'] = "on"; + } else { + unset($cflink['linkshare']); + unset($cflink['linkshare1']); + unset($cflink['linkshare2']); + } + if ($this->GetL_m2() <> "") { + $cflink['linkshare3'] = $this->GetL_m2(); + $cflink['linkshare'] = "on"; + } else { + unset($cflink['linkshare']); + unset($cflink['linkshare3']); + } + } else { + unset($cflink['linkshare']); + unset($cflink['linkshare1']); + unset($cflink['linkshare2']); + unset($cflink['linkshare3']); + } + if ($this->GetRealtime() <> "") { + if ($this->GetR_m1() <> "") { + $cflink['realtime1'] = $this->GetR_m1(); + $cflink['realtime2'] = $this->GetR_d(); + $cflink['realtime'] = "on"; + } else { + unset($cflink['realtime']); + unset($cflink['realtime1']); + unset($cflink['realtime2']); + } + if ($this->GetR_m2() <> "") { + $cflink['realtime3'] = $this->GetR_m2(); + $cflink['realtime'] = "on"; + } else { + unset($cflink['realtime']); + unset($cflink['realtime3']); + } + } else { + unset($cflink['realtime']); + unset($cflink['realtime1']); + unset($cflink['realtime2']); + unset($cflink['realtime3']); + } + if ($this->GetUpperlimit() <> "") { + if ($this->GetU_m1() <> "") { + $cflink['upperlimit1'] = $this->GetU_m1(); + $cflink['upperlimit2'] = $this->GetU_d(); + $cflink['upperlimit'] = "on"; + } else { + unset($cflink['upperlimit']); + unset($cflink['upperlimit1']); + unset($cflink['upperlimit2']); + } + if ($this->GetU_m2() <> "") { + $cflink['upperlimit3'] = $this->GetU_m2(); + $cflink['upperlimit'] = "on"; + } else { + unset($cflink['upperlimit']); + unset($cflink['upperlimit3']); + } + } else { + unset($cflink['upperlimit']); + unset($cflink['upperlimit1']); + unset($cflink['upperlimit2']); + unset($cflink['upperlimit3']); + } + } +} + +class cbq_queue extends priq_queue { + var $qborrow = ""; + + function GetBorrow() { + return $this->qborrow; + } + function SetBorrow($borrow) { + $this->qborrow = $borrow; + } + function CanHaveChildren() { + return true; + } + + function &add_queue($interface, &$qname, &$path, &$input_errors) { + + if (!is_array($this->subqueues)) + $this->subqueues = array(); + $q =& new cbq_queue(); + $q->SetInterface($this->GetInterface()); + $q->SetParent($this); + $q->ReadConfig($qname); + $q->validate_input($qname, $input_errors); + if (count($input_errors)) { + log_error("SHAPER: could not create queue " . $q->GetQname() . " on interface {$interface} because: " . print_r($input_errors, true)); + return $q; + } + switch ($q->GetBwscale()) { + case "%": + $myBw = $this->GetAvailableBandwidth() * $qname['bandwidth'] / 100; + break; + default: + $myBw = $qname['bandwidth'] * get_bandwidthtype_scale($q->GetBwscale()); + break; + } + $q->SetAvailableBandwidth($myBw); + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() - $myBw); + + $q->SetEnabled("on"); + $q->SetLink($path); + $this->subqueues[$q->GetQName()] = &$q; + ref_on_altq_queue_list($this->GetQname(), $q->GetQname()); + if (is_array($qname['queue'])) { + foreach ($qname['queue'] as $key1 => $que) { + array_push($path, $key1); + $q->add_queue($q->GetInterface(), $que, $path, $input_errors); + array_pop($path); + } + } + + return $q; + } + + function copy_queue($interface, &$cflink) { + + $cflink['interface'] = $interface; + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($clink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = trim($this->GetQpriority()); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['name'] = $this->GetQname(); + $cflink['description'] = trim($this->GetDescription()); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = trim($this->GetEnabled()); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = trim($this->GetDefault()); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['rio'] = trim($this->GetRio()); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + $cflink['borrow'] = trim($this->GetBorrow()); + if (empty($cflink['borrow'])) + unset($cflink['borrow']); + if (is_array($this->queues)) { + $cflinkp['queue'] = array(); + foreach ($this->subqueues as $q) { + $cflink['queue'][$q->GetQname()] = array(); + $q->copy_queue($interface, $cflink['queue'][$q->GetQname()]); + } + } + } + + /* + * Should search even its children + */ + function &find_queue($interface, $qname) { + if ($qname == $this->GetQname()) + return $this; + foreach ($this->subqueues as $q) { + $result =& $q->find_queue("", $qname); + if ($result) + return $result; + } + } + + function &find_parentqueue($interface, $qname) { + if ($this->subqueues[$qname]) + return $this; + foreach ($this->subqueues as $q) { + $result = $q->find_parentqueue("", $qname); + if ($result) + return $result; + } + } + + function delete_queue() { + unref_on_altq_queue_list($this->GetQname()); + cleanup_queue_from_rules($this->GetQname()); + foreach ($this->subqueues as $q) { + $this->SetAvailableBandwidth($this->GetAvailableBandwidth() + $q->GetAvailableBandwidth()); + $q->delete_queue(); + } + unset_object_by_reference($this->GetLink()); + } + + function validate_input($data, &$input_errors) { + parent::validate_input($data, $input_errors); + + if ($data['priority'] > 7) + $input_errors[] = gettext("Priority must be an integer between 1 and 7."); + $reqdfields[] = "bandwidth"; + $reqdfieldsn[] = gettext("Bandwidth"); + $reqdfields[] = "bandwidthtype"; + $reqdfieldsn[] = gettext("Bandwidthtype"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if ($data['bandwidth'] && !is_numeric($data['bandwidth'])) + $input_errors[] = gettext("Bandwidth must be an integer."); + + + if ($data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth cannot be negative."); + + if ($data['bandwidthtype'] == "%") { + if ($data['bandwidth'] > 100 || $data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth in percentage should be between 1 and 100 bounds."); + } + +/* + $parent =& $this->GetParent(); + switch ($data['bandwidthtype']) { + case "%": + $myBw = $parent->GetAvailableBandwidth() * floatval($data['bandwidth']) / 100; + break; + default: + $mybw = floatval($data['bandwidth']) * get_bandwidthtype_scale($data['bandwidthtype']); + break; + } + if ($parent->GetAvailableBandwidth() < floatval($myBw)) + $input_errors[] = "The sum of the children bandwidth exceeds that of the parent."; + */ + } + + function ReadConfig(&$q) { + parent::ReadConfig($q); + if (!empty($q['borrow'])) + $this->SetBorrow("on"); + else + $this->SetBorrow(""); + } + + function build_javascript() { + return parent::build_javascript(); + } + + function build_tree() { + $tree = "
  • GetInterface()."&queue=" . $this->GetQname()."&action=show"; + $tree .= "\" "; + $tmpvalue = trim($this->GetDefault()); + if (!empty($tmpvalue)) + $tree .= " class=\"navlnk\""; + $tree .= " >" . $this->GetQname() . ""; + if (is_array($this->subqueues)) { + $tree .= "
      "; + foreach ($this->subqueues as $q) { + $tree .= $q->build_tree(); + } + $tree .= "
    "; + } + $tree .= "
  • "; + return $tree; + } + + /* Even this should take children into consideration */ + function build_rules(&$default = false) { + $pfq_rule = "queue ". $this->qname; + if ($this->GetInterface()) + $pfq_rule .= " on ".get_real_interface($this->GetInterface()); + if ($this->GetBandwidth() && $this->GetBwscale()) + $pfq_rule .= " bandwidth ".trim($this->GetBandwidth()).$this->GetBwscale(); + $tmpvalue = $this->GetQpriority(); + if (!empty($tmpvalue)) + $pfq_rule .= " priority " . $this->GetQpriority(); + $tmpvalue = trim($this->GetQlimit()); + if (!empty($tmpvalue)) + $pfq_rule .= " qlimit " . $this->GetQlimit(); + if ($this->GetDefault() || $this->GetRed() || $this->GetRio() || $this->GetEcn() || $this->GetBorrow() || $this->GetCodel()) { + $pfq_rule .= " cbq ( "; + $tmpvalue = trim($this->GetRed()); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " red "; + } + $tmpvalue = trim($this->GetCodel()); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " codel "; + } + $tmpvalue = trim($this->GetRio()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " rio "; + } + $tmpvalue = trim($this->GetEcn()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " ecn "; + } + $tmpvalue = trim($this->GetDefault()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " default "; + $default = true; + } + $tmpvalue = trim($this->GetBorrow()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= ", "; + $pfq_rule .= " borrow "; + } + $pfq_rule .= " ) "; + } + if (count($this->subqueues)) { + $i = count($this->subqueues); + $pfq_rule .= " { "; + foreach ($this->subqueues as $qkey => $qnone) { + if ($i > 1) { + $i--; + $pfq_rule .= " {$qkey}, "; + } else + $pfq_rule .= " {$qkey} "; + } + $pfq_rule .= " } \n"; + foreach ($this->subqueues as $q) + $pfq_rule .= $q->build_rules($default); + } + + $pfq_rule .= " \n"; + return $pfq_rule; + } + + function build_form() { + $form = parent::build_form(); + $form .= ""; + $form .= "" . gettext("Bandwidth") . ""; + $form .= " GetBandwidth() > 0) + $form .= htmlspecialchars($this->GetBandwidth()); + $form .= "\" />"; + $form .= "
    "; + $form .= "" . gettext("Choose the amount of bandwidth for this queue"); + $form .= ""; + $form .= "" . gettext("Scheduler specific options") . ""; + $form .= "GetBorrow() == "on") + $form .= " checked=\"checked\" "; + $form .= " /> " . gettext("Borrow from other queues when available") . "
    "; + + return $form; + } + + function update_altq_queue_data(&$data) { + $this->ReadConfig($data); + } + + function wconfig() { + $cflink =& get_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['interface'] = $this->GetInterface(); + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = $this->GetQpriority(); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['name'] = $this->GetQname(); + $cflink['description'] = $this->GetDescription(); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = trim($this->GetEnabled()); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = trim($this->GetDefault()); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['rio'] = trim($this->GetRio()); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + $cflink['codel'] = trim($this->GetCodel()); + if (empty($cflink['codel'])) + unset($cflink['codel']); + $cflink['borrow'] = trim($this->GetBorrow()); + if (empty($cflink['borrow'])) + unset($cflink['borrow']); + } +} + +class fairq_queue extends priq_queue { + var $hogs; + var $buckets; + + function GetBuckets() { + return $this->buckets; + } + function SetBuckets($buckets) { + $this->buckets = $buckets; + } + function GetHogs() { + return $this->hogs; + } + function SetHogs($hogs) { + $this->hogs = $hogs; + } + function CanHaveChildren() { + return false; + } + + + function copy_queue($interface, &$cflink) { + $cflink['interface'] = $interface; + $cflink['qlimit'] = $this->GetQlimit(); + $cflink['priority'] = $this->GetQpriority(); + $cflink['name'] = $this->GetQname(); + $cflink['description'] = $this->GetDescription(); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = $this->GetEnabled(); + $cflink['default'] = $this->GetDefault(); + $cflink['red'] = $this->GetRed(); + $cflink['rio'] = $this->GetRio(); + $cflink['ecn'] = $this->GetEcn(); + $cflink['buckets'] = $this->GetBuckets(); + $cflink['hogs'] = $this->GetHogs(); + } + + /* + * Should search even its children + */ + function &find_queue($interface, $qname) { + if ($qname == $this->GetQname()) + return $this; + } + + function find_parentqueue($interface, $qname) { return; } + + function delete_queue() { + unref_on_altq_queue_list($this->GetQname()); + cleanup_queue_from_rules($this->GetQname()); + unset_object_by_reference($this->GetLink()); + } + + function validate_input($data, &$input_errors) { + parent::validate_input($data, $input_errors); + + if ($data['priority'] > 255) + $input_errors[] = gettext("Priority must be an integer between 1 and 255."); + $reqdfields[] = "bandwidth"; + $reqdfieldsn[] = gettext("Bandwidth"); + $reqdfields[] = "bandwidthtype"; + $reqdfieldsn[] = gettext("Bandwidthtype"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if ($data['bandwidth'] && !is_numeric($data['bandwidth'])) + $input_errors[] = gettext("Bandwidth must be an integer."); + + + if ($data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth cannot be negative."); + + + if ($data['bandwidthtype'] == "%") { + if ($data['bandwidth'] > 100 || $data['bandwidth'] < 0) + $input_errors[] = gettext("Bandwidth in percentage should be between 1 and 100 bounds."); + } + +/* + $parent =& $this->GetParent(); + switch ($data['bandwidthtype']) { + case "%": + $myBw = $parent->GetAvailableBandwidth() * floatval($data['bandwidth']) / 100; + default: + $mybw = floatval($data['bandwidth']) * get_bandwidthtype_scale($data['bandwidthtype']); + break; + } + if ($parent->GetAvailableBandwidth() < floatval($myBw)) + $input_errors[] = "The sum of children bandwidth exceeds that of the parent."; +*/ + } + + function ReadConfig(&$q) { + parent::ReadConfig($q); + if (!empty($q['buckets'])) + $this->SetBuckets($q['buckets']); + else + $this->SetBuckets(""); + if (!empty($q['hogs']) && is_valid_shaperbw($q['hogs'])) + $this->SetHogs($q['hogs']); + else + $this->SetHogs(""); + } + + function build_javascript() { + return parent::build_javascript(); + } + + function build_tree() { + $tree = "
  • GetInterface()."&queue=" . $this->GetQname()."&action=show"; + $tree .= "\" "; + $tmpvalue = trim($this->GetDefault()); + if (!empty($tmpvalue)) + $tree .= " class=\"navlnk\""; + $tree .= " >" . $this->GetQname() . ""; + $tree .= "
  • "; + return $tree; + } + + /* Even this should take children into consideration */ + function build_rules(&$default = false) { + $pfq_rule = "queue ". $this->qname; + if ($this->GetInterface()) + $pfq_rule .= " on ".get_real_interface($this->GetInterface()); + if ($this->GetBandwidth() && $this->GetBwscale()) + $pfq_rule .= " bandwidth ".trim($this->GetBandwidth()).$this->GetBwscale(); + $tmpvalue = trim($this->GetQpriority()); + if (!empty($tmpvalue)) + $pfq_rule .= " priority " . $this->GetQpriority(); + $tmpvalue = trim($this->GetQlimit()); + if (!empty($tmpvalue)) + $pfq_rule .= " qlimit " . $this->GetQlimit(); + if ($this->GetDefault() || $this->GetRed() || $this->GetRio() + || $this->GetEcn() || $this->GetBuckets() || $this->GetHogs() || $this->GetCodel()) { + $pfq_rule .= " fairq ( "; + $tmpvalue = trim($this->GetRed()); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " red "; + } + $tmpvalue = trim($this->GetCodel()); + if (!empty($tmpvalue)) { + $comma = 1; + $pfq_rule .= " codel "; + } + $tmpvalue = trim($this->GetRio()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " rio "; + } + $tmpvalue = trim($this->GetEcn()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " ecn "; + } + $tmpvalue = trim($this->GetDefault()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= " ,"; + $comma = 1; + $pfq_rule .= " default "; + $default = true; + } + $tmpvalue = trim($this->GetBuckets()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= ", "; + $pfq_rule .= " buckets " . $this->GetBuckets() . " "; + } + $tmpvalue = trim($this->GetHogs()); + if (!empty($tmpvalue)) { + if ($comma) + $pfq_rule .= ", "; + $pfq_rule .= " hogs " . $this->GetHogs() . " "; + } + $pfq_rule .= " ) "; + } + + $pfq_rule .= " \n"; + return $pfq_rule; + } + + function build_form() { + $form = parent::build_form(); + $form .= ""; + $form .= "" . gettext("Bandwidth") . ""; + $form .= " GetBandwidth() > 0) + $form .= htmlspecialchars($this->GetBandwidth()); + $form .= "\" />"; + $form .= "
    "; + $form .= "" . gettext("Choose the amount of bandwidth for this queue"); + $form .= ""; + $form .= "" . gettext("Scheduler specific options") . ""; + $form .= ""; + $form .= ""; + $form .= "
    "; + $form .= "GetBuckets()); + if(!empty($tmpvalue)) + $form .= $this->GetBuckets(); + $form .= "\" /> " . gettext("Number of buckets available.") . "
    GetHogs()); + if(!empty($tmpvalue)) + $form .= $this->GetHogs(); + $form .= "\" /> " . gettext("Bandwidth limit for hosts to not saturate link.") . "
    "; + return $form; + } + + function update_altq_queue_data(&$data) { + $this->ReadConfig($data); + } + + function wconfig() { + $cflink =& get_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['interface'] = $this->GetInterface(); + $cflink['qlimit'] = trim($this->GetQlimit()); + if (empty($cflink['qlimit'])) + unset($cflink['qlimit']); + $cflink['priority'] = trim($this->GetQpriority()); + if (empty($cflink['priority'])) + unset($cflink['priority']); + $cflink['name'] = $this->GetQname(); + $cflink['description'] = trim($this->GetDescription()); + if (empty($cflink['description'])) + unset($cflink['description']); + $cflink['bandwidth'] = $this->GetBandwidth(); + $cflink['bandwidthtype'] = $this->GetBwscale(); + $cflink['enabled'] = $this->GetEnabled(); + if (empty($cflink['enabled'])) + unset($cflink['enabled']); + $cflink['default'] = trim($this->GetDefault()); + if (empty($cflink['default'])) + unset($cflink['default']); + $cflink['red'] = trim($this->GetRed()); + if (empty($cflink['red'])) + unset($cflink['red']); + $cflink['rio'] = trim($this->GetRio()); + if (empty($cflink['rio'])) + unset($cflink['rio']); + $cflink['ecn'] = trim($this->GetEcn()); + if (empty($cflink['ecn'])) + unset($cflink['ecn']); + $cflink['codel'] = trim($this->GetCodel()); + if (empty($cflink['codel'])) + unset($cflink['codel']); + $cflink['buckets'] = trim($this->GetBuckets()); + if (empty($cflink['buckets'])) + unset($cflink['buckets']); + $cflink['hogs'] = trim($this->GetHogs()); + if (empty($cflink['hogs'])) + unset($cflink['hogs']); + } +} + + +/* + * dummynet(4) wrappers. + */ + + +/* + * List of respective objects! + */ +$dummynet_pipe_list = array(); + +class dummynet_class { + var $qname; + var $qnumber; /* dummynet(4) uses numbers instead of names; maybe integrate with pf the same as altq does?! */ + var $qlimit; + var $description; + var $qenabled; + var $link; + var $qparent; /* link to upper class so we do things easily on WF2Q+ rule creation */ + var $plr; + + var $buckets; + /* mask parameters */ + var $mask; + var $noerror; + + /* Accessor functions */ + function SetLink($link) { + $this->link = $link; + } + function GetLink() { + return $this->link; + } + function GetMask() { + if (!isset($this->mask["type"])) + $this->mask["type"] = "none"; + return $this->mask; + } + function SetMask($mask) { + $this->mask = $mask; + } + function &GetParent() { + return $this->qparent; + } + function SetParent(&$parent) { + $this->qparent = &$parent; + } + function GetEnabled() { + return $this->qenabled; + } + function SetEnabled($value) { + $this->qenabled = $value; + } + function CanHaveChildren() { + return false; + } + function CanBeDeleted() { + return true; + } + function GetQname() { + return $this->qname; + } + function SetQname($name) { + $this->qname = trim($name); + } + function GetQlimit() { + return $this->qlimit; + } + function SetQlimit($limit) { + $this->qlimit = $limit; + } + function GetDescription() { + return $this->description; + } + function SetDescription($str) { + $this->description = trim($str); + } + function GetFirstime() { + return $this->firsttime; + } + function SetFirsttime($number) { + $this->firsttime = $number; + } + function GetBuckets() { + return $this->buckets; + } + function SetBuckets($buckets) { + $this->buckets = $buckets; + } + function SetNumber($number) { + $this->qnumber = $number; + } + function GetNumber() { + return $this->qnumber; + } + function GetPlr() { + return $this->plr; + } + function SetPlr($plr) { + $this->plr = $plr; + } + + function build_javascript() { + $javascript .= "\n"; + return $javascript; + } + + function validate_input($data, &$input_errors) { + $reqdfields[] = "bandwidth"; + $reqdfieldsn[] = gettext("Bandwidth"); + $reqdfields[] = "burst"; + $reqdfieldsn[] = gettext("Burst"); + $reqdfields[] = "bandwidthtype"; + $reqdfieldsn[] = gettext("Bandwidthtype"); + $reqdfields[] = "newname"; + $reqdfieldsn[] = gettext("Name"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if ($data['plr'] && (!is_numeric($data['plr']) || + ($data['plr'] < 0) || ($data['plr'] > 1))) + $input_errors[] = gettext("Plr must be a value between 0 and 1."); + if ($data['buckets'] && (!is_numeric($data['buckets']) || + ($data['buckets'] < 16) || ($data['buckets'] > 65535))) + $input_errors[] = gettext("Buckets must be an integer between 16 and 65535."); + if ($data['qlimit'] && (!is_numeric($data['qlimit']))) + $input_errors[] = gettext("Queue limit must be an integer"); + if (!empty($data['newname']) && !preg_match("/^[a-zA-Z0-9_-]+$/", $data['newname'])) + $input_errors[] = gettext("Queue names must be alphanumeric and _ or - only."); + if (!empty($data['name']) && !preg_match("/^[a-zA-Z0-9_-]+$/", $data['name'])) + $input_errors[] = gettext("Queue names must be alphanumeric and _ or - only."); + if (isset($data['maskbits']) && ($data['maskbits'] <> "")) + if ((!is_numeric($data['maskbits'])) || ($data['maskbits'] <= 0) || ($data['maskbits'] > 32)) + $input_errors[] = gettext("IPV4 bit mask must be blank or numeric value between 1 and 32."); + if (isset($data['maskbitsv6']) && ($data['maskbitsv6'] <> "")) + if ((!is_numeric($data['maskbitsv6'])) || ($data['maskbitsv6'] <= 0) || ($data['maskbitsv6'] > 128)) + $input_errors[] = gettext("IPV6 bit mask must be blank or numeric value between 1 and 128."); + } + + function build_mask_rules(&$pfq_rule) { + $mask = $this->GetMask(); + if (!empty($mask['type'])) { + if ($mask['type'] <> 'none') + $pfq_rule .= " mask"; + switch ($mask['type']) { + case 'srcaddress': + if (!empty($mask['bitsv6']) && ($mask['bitsv6'] <> "")) + $pfq_rule .= " src-ip6 /" . $mask['bitsv6']; + else + $pfq_rule .= " src-ip6 /128"; + if (!empty($mask['bits']) && ($mask['bits'] <> "")) + $pfq_rule .= sprintf(" src-ip 0x%x", gen_subnet_mask_long($mask['bits'])); + else + $pfq_rule .= " src-ip 0xffffffff"; + break; + case 'dstaddress': + if (!empty($mask['bitsv6']) && ($mask['bitsv6'] <> "")) + $pfq_rule .= " dst-ip6 /" . $mask['bitsv6']; + else + $pfq_rule .= " dst-ip6 /128"; + if (!empty($mask['bits']) && ($mask['bits'] <> "")) + $pfq_rule .= sprintf(" dst-ip 0x%x", gen_subnet_mask_long($mask['bits'])); + else + $pfq_rule .= " dst-ip 0xffffffff"; + break; + default: + break; + } + } + } + +} + +class dnpipe_class extends dummynet_class { + var $delay; + var $qbandwidth = array(); + var $qbandwidthtype; + + /* This is here to help on form building and building rules/lists */ + var $subqueues = array(); + + function CanHaveChildren() { + return true; + } + function SetDelay($delay) { + $this->delay = $delay; + } + function GetDelay() { + return $this->delay; + } + function delete_queue() { + cleanup_dnqueue_from_rules($this->GetQname()); + foreach ($this->subqueues as $q) + $q->delete_queue(); + unset_dn_object_by_reference($this->GetLink()); + @pfSense_pipe_action("pipe delete " . $this->GetNumber()); + } + function GetBandwidth() { + return $this->qbandwidth; + } + function SetBandwidth($bandwidth) { + $this->qbandwidth = $bandwidth; + } + function GetBurst() { + return $this->qburst; + } + function SetBurst($burst) { + $this->qburst = $burst; + } + + function &add_queue($interface, &$queue, &$path, &$input_errors) { + + if (!is_array($this->subqueues)) + $this->subqueues = array(); + + $q =& new dnqueue_class(); + $q->SetLink($path); + $q->SetEnabled("on"); + $q->SetPipe($this->GetQname()); + $q->SetParent($this); + $q->ReadConfig($queue); + $q->validate_input($queue, $input_errors); + if (count($input_errors)) { + log_error("SHAPER: could not create queue " . $q->GetQname() . " on interface {$interface} because: " . print_r($input_errors, true)); + return $q; + } + $number = dnqueue_find_nextnumber(); + $q->SetNumber($number); + $this->subqueues[$q->GetQname()] = &$q; + + return $q; + } + + function &get_queue_list(&$q = null) { + $qlist = array(); + + $qlist[$this->GetQname()] = $this->GetNumber(); + if (is_array($this->subqueues)) { + foreach ($this->subqueues as $queue) + $queue->get_queue_list($qlist); + } + return $qlist; + } + + /* + * Should search even its children + */ + function &find_queue($pipe, $qname) { + if ($qname == $this->GetQname()) + return $this; + foreach ($this->subqueues as $q) { + $result =& $q->find_queue("", $qname); + if ($result) + return $result; + } + } + + function &find_parentqueue($pipe, $qname) { + return NULL; + } + + function validate_input($data, &$input_errors) { + parent::validate_input($data, $input_errors); + + $schedule = 0; + $schedulenone = 0; + $entries = 0; + for ($i = 0; $i < 30; $i++) { + if (!empty($data["bwsched{$i}"])) { + if ($data["bwsched{$i}"] != "none") + $schedule++; + else + $schedulenone++; + } + if (!empty($data["bandwidth{$i}"])) { + if (!is_numeric($data["bandwidth{$i}"])) + $input_errors[] = sprintf(gettext("Bandwidth for schedule %s must be an integer."), $data["bwsched{$i}"]); + else if (($data["burst{$i}"] != "") && (!is_numeric($data["burst{$i}"]))) + $input_errors[] = sprintf(gettext("Burst for schedule %s must be an integer."), $data["bwsched{$i}"]); + else + $entries++; + } + } + if ($schedule == 0 && $entries > 1) + $input_errors[] = gettext("You need to specify a schedule for every additional entry"); + if ($schedulenone > 0 && $entries > 1) + $input_errors[] = gettext("If more than one bandwidth configured all schedules need to be selected"); + if ($entries == 0) + $input_errors[] = gettext("At least one bw specification is necessary"); + if ($data['delay'] && (!is_numeric($data['delay']))) + $input_errors[] = gettext("Delay must be an integer."); + } + + function ReadConfig(&$q) { + if (!empty($q['name']) && !empty($q['newname']) && $q['name'] != $q['newname']) { + $this->SetQname($q['newname']); + } else if (!empty($q['newname'])) { + $this->SetQname($q['newname']); + } else { + $this->SetQname($q['name']); + } + $this->SetNumber($q['number']); + + if (!empty($_POST)) { + $bandwidth = array(); + for ($i = 0; $i < 30; $i++) { + if (isset($q["bandwidth{$i}"]) && $q["bandwidth{$i}"] <> "") { + $bw = array(); + $bw['bw'] = $q["bandwidth{$i}"]; + $bw['burst'] = $q["burst{$i}"]; + if (isset($q["bwtype{$i}"]) && $q["bwtype{$i}"]) + $bw['bwscale'] = $q["bwtype{$i}"]; + if (isset($q["bwsched{$i}"]) && $q["bwsched{$i}"]) + $bw['bwsched'] = $q["bwsched{$i}"]; + $bandwidth[] = $bw; + } + } + $this->SetBandwidth($bandwidth); + } + + if (is_array($q['bandwidth']) && is_array($q['bandwidth']['item'])) { + $this->SetBandwidth($q['bandwidth']['item']); + $this->SetBurst($q['burst']['item']); + } + + if (isset($q['qlimit']) && $q['qlimit'] <> "") + $this->SetQlimit($q['qlimit']); + else + $this->SetQlimit(""); + if (isset($q['mask']) && $q['mask'] <> "") + $masktype = $q['mask']; + else + $masktype = ""; + if (isset($q['maskbits']) && $q['maskbits'] <> "") + $maskbits = $q['maskbits']; + else + $maskbits = ""; + if (isset($q['maskbitsv6']) && $q['maskbitsv6'] <> "") + $maskbitsv6 = $q['maskbitsv6']; + else + $maskbitsv6 = ""; + $this->SetMask(array("type" => $masktype, "bits" => $maskbits, "bitsv6" => $maskbitsv6)); + if (isset($q['buckets']) && $q['buckets'] <> "") + $this->SetBuckets($q['buckets']); + else + $this->SetBuckets(""); + if (isset($q['plr']) && $q['plr'] <> "") + $this->SetPlr($q['plr']); + else + $this->SetPlr(""); + if (isset($q['delay']) && $q['delay'] <> "") + $this->SetDelay($q['delay']); + else + $this->SetDelay(0); + if (isset($q['description']) && $q['description'] <> "") + $this->SetDescription($q['description']); + else + $this->SetDescription(""); + $this->SetEnabled($q['enabled']); + + } + + function build_tree() { + $tree = "
  • GetQname() ."&queue=".$this->GetQname() ."&action=show\">"; + $tree .= $this->GetQname() . ""; + if (is_array($this->subqueues)) { + $tree .= "
      "; + foreach ($this->subqueues as $q) { + $tree .= $q->build_tree(); + } + $tree .= "
    "; + } + $tree .= "
  • "; + + return $tree; + } + + function build_rules() { + global $config, $time_based_rules; + + if ($this->GetEnabled() == "") + return; + + $pfq_rule = "\npipe ". $this->GetNumber() . " config "; + $found = false; + $bandwidth = $this->GetBandwidth(); + if (is_array($bandwidth)) { + foreach ($bandwidth as $bw) { + if ($bw['bwsched'] != "none") { + $time_based_rules = true; + if (is_array($config['schedules']) && is_array($config['schedules']['schedule'])) { + foreach ($config['schedules']['schedule'] as $schedule) { + if ($bw['bwsched'] == $schedule['name']) { + if (filter_get_time_based_rule_status($schedule)) { + $pfq_rule .= " bw ".trim($bw['bw']).$bw['bwscale']; + if (is_numeric($bw['burst']) && ($bw['burst'] > 0)) + $pfq_rule .= " burst ".trim($bw['burst']); + $found = true; + break; + } + } + } + } else { + $pfq_rule .= " bw 0"; + $found = true; + break; + } + } else { + $pfq_rule .= " bw ".trim($bw['bw']).$bw['bwscale']; + if (is_numeric($bw['burst']) && ($bw['burst'] > 0)) + $pfq_rule .= " burst ".trim($bw['burst']); + $found = true; + break; + } + } + if ($found == false) + $pfq_rule .= " bw 0"; + } else + $pfq_rule .= " bw 0"; + + if ($this->GetQlimit()) + $pfq_rule .= " queue " . $this->GetQlimit(); + if ($this->GetPlr()) + $pfq_rule .= " plr " . $this->GetPlr(); + if ($this->GetBuckets()) + $pfq_rule .= " buckets " . $this->GetBuckets(); + if ($this->GetDelay()) + $pfq_rule .= " delay " . $this->GetDelay(); + $this->build_mask_rules($pfq_rule); + + $pfq_rule .= "\n"; + + if (!empty($this->subqueues) && count($this->subqueues) > 0) { + foreach ($this->subqueues as $q) + $pfq_rule .= $q->build_rules(); + } + $pfq_rule .= " \n"; + + return $pfq_rule; + } + + function update_dn_data(&$data) { + $this->ReadConfig($data); + } + + function build_javascript() { + global $g, $config; + + $javasr = parent::build_javascript(); + + //build list of schedules + $schedules = ""; + if (is_array($config['schedules']) && is_array($config['schedules']['schedule'])) { + foreach ($config['schedules']['schedule'] as $schedule) { + if ($schedule['name'] <> "") + $schedules .= ""; + } + } + $bwopt = ""; + foreach (array("Kb" => "Kbit/s", "Mb" => "Mbit/s", "Gb" => "Gbit/s", "b" => "Bit/s") as $bwidx => $bw) + $bwopt .= ""; + + $javasr .= << +//"; + tr.appendChild(td); + td = d.createElement("td"); + td.innerHTML=""; + tr.appendChild(td); + td = d.createElement("td"); + td.innerHTML=""; + tr.appendChild(td); + td = d.createElement("td"); + td.innerHTML=""; + tr.appendChild(td); + td = d.createElement("td"); + td.rowSpan = "1"; + td.innerHTML = 'remove'; + tr.appendChild(td); + tbody.appendChild(tr); + totalrows++; + }); +})(); + +function removeBwRow(el) { + var cel; + while (el && el.nodeName.toLowerCase() != "tr") + el = el.parentNode; + if (el && el.parentNode) { + cel = el.getElementsByTagName("td").item(0); + el.parentNode.removeChild(el); + } +} +//]]> + + +EOD; + + return $javasr; + } + + function build_form() { + global $g, $config; + + //build list of schedules + $schedules = array(); + $schedules[] = "none";//leave none to leave rule enabled all the time + if (is_array($config['schedules']) && is_array($config['schedules']['schedule'])) { + foreach ($config['schedules']['schedule'] as $schedule) { + if ($schedule['name'] <> "") + $schedules[] = $schedule['name']; + } + } + + $form = "
    "; + $form .= gettext("Enable"); + $form .= ""; + $form .= " GetEnabled() == "on") + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Enable limiter and its children") . ""; + $form .= ""; + $form .= "
    " . gettext("Name") . ""; + $form .= ""; + $form .= "GetQname()."\" />"; + $form .= "GetQname()."\" />"; + if ($this->GetNumber() > 0) { + $form .= "GetNumber()."\" />"; + } + $form .= ""; + $form .= "" . gettext("Bandwidth"); + $bandwidth = $this->GetBandwidth(); + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + if (is_array($bandwidth)) { + foreach ($bandwidth as $bwidx => $bw) { + $form .= "\n"; + } + } + $form .= "
    Bandwidth
    Burst
    Bw type
    Schedule
    "; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "remove"; + $form .= "
    "; + $form .= ""; + $form .= "add"; + $form .= "
    " . gettext("Bandwidth is a rate (e.g. Mbit/s), burst is a total amount of data that will be transferred at full speed after an idle period.") . "
    "; + $form .= ""; + $form .= "" . gettext("Mask") . ""; + $form .= ""; + $form .= ""; + $form .= " 
    "; + $form .= "" . gettext("If 'source' or 'destination' slots is chosen, \n" + . "a dynamic pipe with the bandwidth, delay, packet loss and queue size given above will \n" + . "be created for each source/destination IP address encountered, \n" + . "respectively. This makes it possible to easily specify bandwidth \n" + . "limits per host.") . "
    "; + $form .= "255.255.255.255/  "none") + $form .= $mask['bits']; + $form .= "\""; + if ($mask['type'] == "none") + $form .= " disabled"; + $form .= " />"; + $form .= "  IPV4 mask bits (1-32)
    "; + $form .= "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/  "none") + $form .= $mask['bitsv6']; + $form .= "\""; + if ($mask['type'] == "none") + $form .= " disabled"; + $form .= " />"; + $form .= "  IPV6 mask bits (1-128)
    "; + $form .= "" . gettext("If 'source' or 'destination' slots is chosen, \n" + . "leaving the mask bits blank will create one pipe per host. Otherwise specify \n" + . "the number of 'one' bits in the subnet mask used to group multiple hosts \n" + . "per pipe.") . ""; + $form .= ""; + $form .= "" . gettext("Description") . ""; + $form .= ""; + $form .= "GetDescription(); + $form .= "\" />"; + $form .= "
    "; + $form .= gettext("You may enter a description here for your reference (not parsed).") . ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "
    "; + $form .= "

    "; + $form .= "

    "; + $form .= ""; + + $form .= "" . gettext("Delay") . ""; + $form .= ""; + $form .= "GetDelay() . "\" />"; + $form .= " ms
    " . gettext("Hint: in most cases, you " + . "should specify 0 here (or leave the field empty)") . "
    "; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Packet loss rate") . ""; + $form .= ""; + $form .= "GetPlr() . "\" />"; + $form .= " 
    " . gettext("Hint: in most cases, you " + . "should specify 0 here (or leave the field empty). " + . "A value of 0.001 means one packet in 1000 gets dropped") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Queue Size") . ""; + $form .= ""; + $form .= "GetQlimit() . "\" />"; + $form .= " slots
    "; + $form .= "" . gettext("Hint: in most cases, you " + . "should leave the field empty. All packets in this pipe are placed into a fixed-size queue first, " + . "then they are delayed by value specified in the Delay field, and then they " + . "are delivered to their destination.") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Bucket Size") . ""; + $form .= ""; + $form .= "GetBuckets() . "\" />"; + $form .= " slots
    "; + $form .= "" . gettext("Hint: in most cases, you " + . "should leave the field empty. It increases the hash size set."); + $form .= ""; + + return $form; + + } + + function wconfig() { + $cflink =& get_dn_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['name'] = $this->GetQname(); + $cflink['number'] = $this->GetNumber(); + $cflink['qlimit'] = $this->GetQlimit(); + $cflink['plr'] = $this->GetPlr(); + $cflink['description'] = $this->GetDescription(); + + $bandwidth = $this->GetBandwidth(); + if (is_array($bandwidth)) { + $cflink['bandwidth'] = array(); + $cflink['bandwidth']['item'] = array(); + foreach ($bandwidth as $bwidx => $bw) + $cflink['bandwidth']['item'][] = $bw; + } + + $cflink['enabled'] = $this->GetEnabled(); + $cflink['buckets'] = $this->GetBuckets(); + $mask = $this->GetMask(); + $cflink['mask'] = $mask['type']; + $cflink['maskbits'] = $mask['bits']; + $cflink['maskbitsv6'] = $mask['bitsv6']; + $cflink['delay'] = $this->GetDelay(); + } + +} + +class dnqueue_class extends dummynet_class { + var $pipeparent; + var $weight; + + function GetWeight() { + return $this->weight; + } + function SetWeight($weight) { + $this->weight = $weight; + } + function GetPipe() { + return $this->pipeparent; + } + function SetPipe($pipe) { + $this->pipeparent = $pipe; + } + + /* Just a stub in case we ever try to call this from the frontend. */ + function &add_queue($interface, &$queue, &$path, &$input_errors) { return; } + + function delete_queue() { + cleanup_dnqueue_from_rules($this->GetQname()); + unset_dn_object_by_reference($this->GetLink()); + @pfSense_pipe_action("queue delete " . $this->GetNumber()); + } + + function validate_input($data, &$input_errors) { + parent::validate_input($data, $input_errors); + + if ($data['weight'] && ((!is_numeric($data['weight'])) || + ($data['weight'] < 1 && $data['weight'] > 100))) + $input_errors[] = gettext("Weight must be an integer between 1 and 100."); + } + + /* + * Should search even its children + */ + function &find_queue($pipe, $qname) { + if ($qname == $this->GetQname()) + return $this; + else + return NULL; + } + + function &find_parentqueue($pipe, $qname) { + return $this->qparent; + } + + function &get_queue_list(&$qlist) { + if ($this->GetEnabled() == "") + return; + $qlist[$this->GetQname()] = "?" .$this->GetNumber(); + } + + function ReadConfig(&$q) { + if (!empty($q['name']) && !empty($q['newname']) && $q['name'] != $q['newname']) { + $this->SetQname($q['newname']); + } else if (!empty($q['newname'])) { + $this->SetQname($q['newname']); + } else { + $this->SetQname($q['name']); + } + $this->SetNumber($q['number']); + if (isset($q['qlimit']) && $q['qlimit'] <> "") + $this->SetQlimit($q['qlimit']); + else + $this->SetQlimit(""); + if (isset($q['mask']) && $q['mask'] <> "") + $masktype = $q['mask']; + else + $masktype = ""; + if (isset($q['maskbits']) && $q['maskbits'] <> "") + $maskbits = $q['maskbits']; + else + $maskbits = ""; + if (isset($q['maskbitsv6']) && $q['maskbitsv6'] <> "") + $maskbitsv6 = $q['maskbitsv6']; + else + $maskbitsv6 = ""; + $this->SetMask(array("type" => $masktype, "bits" => $maskbits, "bitsv6" => $maskbitsv6)); + if (isset($q['buckets']) && $q['buckets'] <> "") + $this->SetBuckets($q['buckets']); + else + $this->SetBuckets(""); + if (isset($q['plr']) && $q['plr'] <> "") + $this->SetPlr($q['plr']); + else + $this->SetPlr(""); + if (isset($q['weight']) && $q['weight'] <> "") + $this->SetWeight($q['weight']); + else + $this->SetWeight(""); + if (isset($q['description']) && $q['description'] <> "") + $this->SetDescription($q['description']); + else + $this->SetDescription(""); + $this->SetEnabled($q['enabled']); + } + + function build_tree() { + $parent =& $this->GetParent(); + $tree = "
  • GetQname() ."&queue=" . $this->GetQname() ."&action=show\">"; + $tree .= $this->GetQname() . ""; + $tree .= "
  • "; + + return $tree; + } + + function build_rules() { + if ($this->GetEnabled() == "") + return; + + $parent =& $this->GetParent(); + $pfq_rule = "queue ". $this->GetNumber() . " config pipe " . $parent->GetNumber(); + if ($this->GetQlimit()) + $pfq_rule .= " queue " . $this->GetQlimit(); + if ($this->GetWeight()) + $pfq_rule .= " weight " . $this->GetWeight(); + if ($this->GetBuckets()) + $pfq_rule .= " buckets " . $this->GetBuckets(); + $this->build_mask_rules($pfq_rule); + $pfq_rule .= "\n"; + + return $pfq_rule; + } + + function build_javascript() { + return parent::build_javascript(); + } + + + function build_form() { + $form = "
    "; + $form .= gettext("Enable/Disable"); + $form .= ""; + $form .= " GetEnabled() == "on") + $form .= " checked=\"checked\""; + $form .= " /> " . gettext("Enable/Disable queue") . ""; + $form .= ""; + $form .= "
    " . gettext("Name") . ""; + $form .= ""; + $form .= "GetQname()."\" />"; + $form .= "GetQname()."\" />"; + if ($this->GetNumber() > 0) { + $form .= "GetNumber()."\" />"; + } + $form .= ""; + $form .= "" . gettext("Mask") . ""; + $form .= ""; + $form .= ""; + $form .= " slots
    "; + $form .= "" . gettext("If 'source' or 'destination' slots is chosen, \n" + . "a dynamic pipe with the bandwidth, delay, packet loss and queue size given above will \n" + . "be created for each source/destination IP address encountered, \n" + . "respectively. This makes it possible to easily specify bandwidth \n" + . "limits per host.") . "
    "; + $form .= "255.255.255.255/  "none") + $form .= $mask['bits']; + $form .= "\""; + if ($mask['type'] == "none") + $form .= " disabled"; + $form .= " />"; + $form .= "  IPV4 mask bits (1-32)
    "; + $form .= "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/  "none") + $form .= $mask['bitsv6']; + $form .= "\""; + if ($mask['type'] == "none") + $form .= " disabled"; + $form .= " />"; + $form .= "  IPV6 mask bits (1-128)
    "; + $form .= "" . gettext("If 'source' or 'destination' slots is chosen, \n" + . "leaving the mask bits blank will create one pipe per host. Otherwise specify \n" + . "the number of 'one' bits in the subnet mask used to group multiple hosts \n" + . "per queue.") . ""; + $form .= ""; + $form .= "" . gettext("Description") . ""; + $form .= ""; + $form .= "GetDescription(); + $form .= "\" />"; + $form .= "
    "; + $form .= gettext("You may enter a description here for your reference (not parsed).") . ""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "
    "; + $form .= "

    "; + $form .= "

    "; + $form .= ""; + $form .= "" . gettext("Weight") . ""; + $form .= ""; + $form .= "GetWeight() . "\" />"; + $form .= " 
    " . gettext("Hint: For queues under the same parent " + . "this specifies the share that a queue gets(values range from 1 to 100, you can leave it blank otherwise)") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Packet loss rate") . ""; + $form .= ""; + $form .= "GetPlr() . "\" />"; + $form .= " 
    " . gettext("Hint: in most cases, you " + . "should specify 0 here (or leave the field empty). " + . "A value of 0.001 means one packet in 1000 gets dropped") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Queue Size") . ""; + $form .= ""; + $form .= "GetQlimit() . "\" />"; + $form .= " slots
    "; + $form .= "" . gettext("Hint: in most cases, you " + . "should leave the field empty. All packets in this pipe are placed into a fixed-size queue first, " + . "then they are delayed by value specified in the Delay field, and then they " + . "are delivered to their destination.") . ""; + $form .= ""; + $form .= ""; + $form .= "" . gettext("Bucket Size") . ""; + $form .= ""; + $form .= "GetBuckets() . "\" />"; + $form .= " " . gettext("slots") . "
    "; + $form .= "" . gettext("Hint: in most cases, you " + . "should leave the field empty. It increases the hash size set."); + $form .= ""; + + $form .= "GetPipe() . "\" />"; + + return $form; + + } + + function update_dn_data(&$data) { + $this->ReadConfig($data); + } + + function wconfig() { + $cflink =& get_dn_reference_to_me_in_config($this->GetLink()); + if (!is_array($cflink)) + $cflink = array(); + $cflink['name'] = $this->GetQname(); + $cflink['number'] = $this->GetNumber(); + $cflink['qlimit'] = $this->GetQlimit(); + $cflink['description'] = $this->GetDescription(); + $cflink['weight'] = $this->GetWeight(); + $cflink['enabled'] = $this->GetEnabled(); + $cflink['buckets'] = $this->GetBuckets(); + $mask = $this->GetMask(); + $cflink['mask'] = $mask['type']; + $cflink['maskbits'] = $mask['bits']; + $cflink['maskbitsv6'] = $mask['bitsv6']; + } +} + +// List of layer7 objects +$layer7_rules_list = array(); + +class layer7 { + + var $rname; //alias + var $rdescription; //alias description + var $rport; //divert port + var $renabled; //rule enabled + var $rsets = array(); //array of l7 associations + + // Auxiliary functions + + function GetRName() { + return $this->rname; + } + function SetRName($rname) { + $this->rname = $rname; + } + function GetRDescription() { + return $this->rdescription; + } + function SetRDescription($rdescription) { + $this->rdescription = $rdescription; + } + function GetRPort() { + return $this->rport; + } + function SetRPort($rport) { + $this->rport = $rport; + } + function GetREnabled() { + return $this->renabled; + } + function SetREnabled($value) { + $this->renabled = $value; + } + function GetRl7() { + return $this->rsets; + } + function SetRl7($rsets) { + $this->rsets = $rsets; + } + + //Add a tuple (rule,sctructure,element) to the $rsets + + function add_rule($l7set) { + $this->rsets[] = $l7set; + } + + // Build the layer7 rules + function build_l7_rules() { + if($this->GetREnabled() == "") { + return; + } + //$l7rules = "#" . $this->rdescription . "\n"; + foreach ($this->rsets as $rl7) { + $l7rules .= $rl7->build_rules(); + } + return $l7rules; + } + + // Read the config from array + function ReadConfig(&$qname, &$q) { + $this->SetRName($qname); + $this->SetREnabled($q['enabled']); + $this->SetRPort($q['divert_port']); + if(isset($q['description']) && $q['description'] <> "") + $this->SetRDescription($q['description']); + $rsets = $q['l7rules']; + //Put individual rules in the array + if(is_array($rsets)) { + $this->rsets = array(); // XXX: ugly hack + foreach($rsets as $l7r) { + $l7obj = new l7rule(); + $l7obj->SetRProtocol($l7r['protocol']); + $l7obj->SetRStructure($l7r['structure']); + $l7obj->SetRBehaviour($l7r['behaviour']); + $this->add_rule($l7obj); + } + } + } + + //Generate a random port for the divert socket + function gen_divert_port() { + $dports = get_divert_ports(); //array of used ports + $divert_port = 1; // Initialize + while (($divert_port % 2) != 0 || in_array($divert_port, $dports)) { + $divert_port = rand(40000, 60000); + } + return $divert_port; + } + + //Helps building the left tree + function build_tree() { + $tree = "
  • GetRName() ."&action=show\">"; + $tree .= $this->GetRName() . ""; + $tree .= "
  • "; + + return $tree; + } + + function build_form() { + $form = "
    "; + $form .= gettext("Enable/Disable"); + $form .= ""; + $form .= " GetREnabled() == "on") { + $form .= "checked=\"checked\""; + } + $form .= " /> " . gettext("Enable/Disable layer7 Container") . ""; + $form .= ""; + $form .= "
    " . gettext("Name") . ""; + $form .= ""; + $form .= "GetRName()."\" />"; + $form .= ""; + $form .= "" . gettext("Description") . ""; + $form .= ""; + $form .= "GetRDescription(); + $form .= "\" />"; + $form .= "
    "; + $form .= gettext("You may enter a description here for your reference (not parsed).") . ""; + $form .= ""; + + return $form; + } + + //Write the setting to the $config array + function wconfig() { + global $config; + + if(!is_array($config['l7shaper']['container'])) { + $config['l7shaper']['container'] = array(); + } + // + $cflink =& get_l7c_reference_to_me_in_config($this->GetRName()); + // Test if this rule does exists already + if(!$cflink) { + $cflink =& $config['l7shaper']['container'][]; + } + $cflink['name'] = $this->GetRName(); + $cflink['enabled'] = $this->GetREnabled(); + $cflink['description'] = $this->GetRDescription(); + $cflink['divert_port'] = $this->GetRPort(); + + //Destroy previously existent rules + if(is_array($cflink['rules'])) { + unset($cflink['l7rules']); + } + + $cflink['l7rules'] = array(); + + $i = 0; + foreach($this->rsets as $rulel7) { + $cflink['l7rules'][$i]['protocol'] = $rulel7->GetRProtocol(); + $cflink['l7rules'][$i]['structure'] = $rulel7->GetRStructure(); + $cflink['l7rules'][$i]['behaviour'] = $rulel7->GetRBehaviour(); + $i++; + } + } + + //This function is necessary to help producing the overload options for keep state + function get_unique_structures() { + + $unique_structures = array("action" => false, "dummynet" => false, "altq" => false); + foreach($this->rsets as $l7rule) { + if($l7rule->GetRStructure() == "action") + $unique_structures['action'] = true; + else if($l7rule->GetRStructure() == "limiter") + $unique_structures['dummynet'] = true; + else + $unique_structures['altq'] = true; + } + //Delete non used structures so we don't have to check this in filter.inc + foreach($unique_structures as $key => $value) + if(!$value) + unset($unique_structures[$key]); + return $unique_structures; + } + + function validate_input($data, &$input_errors) { + $reqdfields[] = "container"; + $reqdfieldsn[] = gettext("Name"); + + shaper_do_input_validation($data, $reqdfields, $reqdfieldsn, $input_errors); + + if (!preg_match("/^[a-zA-Z0-9_-]+$/", $data['container'])) + $input_errors[] = gettext("Queue names must be alphanumeric and _ or - only."); + } + + function delete_l7c() { + mwexec("/bin/pkill -f 'ipfw-classifyd .* -p ". $this->GetRPort() . "'", true); + unset_l7_object_by_reference($this->GetRName()); + cleanup_l7_from_rules($this->GetRName()); + } +} + +class l7rule { + + var $rprotocol; //protocol + var $rstructure; //action, limiter, queue + var $rbehaviour; //allow, block, queue_name, pipe_number ... + + //Auxiliary Functions + + function GetRProtocol() { + return $this->rprotocol; + } + function SetRProtocol($rprotocol) { + $this->rprotocol = $rprotocol; + } + function GetRStructure() { + return $this->rstructure; + } + function SetRStructure($rstructure) { + $this->rstructure = $rstructure; + } + function GetRBehaviour() { + return $this->rbehaviour; + } + function SetRBehaviour($rbehaviour) { + $this->rbehaviour = $rbehaviour; + } + + //XXX Do we need to test any particularity for AltQ queues? + function build_rules() { + global $dummynet_pipe_list; + switch ($this->GetRStructure()) { + case "limiter": + read_dummynet_config(); + $dn_list =& get_unique_dnqueue_list(); + $found = false; + if(is_array($dn_list)) { + foreach($dn_list as $key => $value) { + if($key == $this->GetRBehaviour()) { + if($value[0] == "?") + $l7rule = $this->GetRProtocol() . " = dnqueue " . substr($value, 1) . "\n"; + else + $l7rule = $this->GetRProtocol() . " = dnpipe " . $value . "\n"; + $found = true; + } + if($found) + break; + } + } + break; + default: //This is for action and for altq + $l7rule = $this->GetRProtocol() . " = " . $this->GetRStructure() . " " . $this->GetRBehaviour() . "\n"; + break; + } + return $l7rule; + } +} + +/* + * This function allows to return an array with all the used divert socket ports + */ +function get_divert_ports() { + global $layer7_rules_list; + $dports = array(); + + foreach($layer7_rules_list as $l7r) + $dports[] = $l7r->GetRPort(); + + return $dports; +} + +function &get_l7c_reference_to_me_in_config(&$name) { + global $config; + + $ptr = NULL; + + if(is_array($config['l7shaper']['container'])) { + foreach($config['l7shaper']['container'] as $key => $value) { + if($value['name'] == $name) + $ptr =& $config['l7shaper']['container'][$key]; + } + } + return $ptr; + // $ptr can be null. has to be checked later +} + +function unset_l7_object_by_reference(&$name) { + global $config; + + if(is_array($config['l7shaper']['container'])) { + foreach($config['l7shaper']['container'] as $key => $value) { + if($value['name'] == $name) { + unset($config['l7shaper']['container'][$key]['l7rules']); + unset($config['l7shaper']['container'][$key]); + break; + } + } + } +} + +function read_layer7_config() { + global $layer7_rules_list, $config; + + if (!is_array($config['l7shaper']['container']) || !count($config['l7shaper']['container'])) { + $layer7_rules_list = array(); + return; + } + + $l7cs = &$config['l7shaper']['container']; + + $layer7_rules_list = array(); + + foreach ($l7cs as $conf) { + if (empty($conf['name'])) + continue; /* XXX: grrrrrr at php */ + $root =& new layer7(); + $root->ReadConfig($conf['name'],$conf); + $layer7_rules_list[$root->GetRName()] = &$root; + } +} + +function update_layer7_custom_patterns() { + global $config; + + if (!is_array($config['l7shaper']['custom_pat'])) + return; + + foreach ($config['l7shaper']['custom_pat'] as $filename => $filecontent) + if (!file_exists("/usr/local/share/protocols/" . $filename)) + @file_put_contents("/usr/local/share/protocols/" . $filename, base64_decode($filecontent)); +} + +function generate_layer7_files() { + global $layer7_rules_list, $g; + + read_layer7_config(); + + if (!empty($layer7_rules_list)) { + if (!is_module_loaded("ipdivert.ko")) + mwexec("/sbin/kldload ipdivert.ko"); + + array_map('unlink', glob("{$g['tmp_path']}/*.l7")); + } + + update_layer7_custom_patterns(); + + foreach($layer7_rules_list as $l7rules) { + if($l7rules->GetREnabled()) { + $filename = $l7rules->GetRName() . ".l7"; + $path = "{$g['tmp_path']}/" . $filename; + + $rules = $l7rules->build_l7_rules(); + + $fp = fopen($path,'w'); + fwrite($fp,$rules); + fclose($fp); + } + } +} + +function layer7_start_l7daemon() { + global $layer7_rules_list, $g; + + /* + * XXX: ermal - Needed ?! + * read_layer7_config(); + */ + + foreach($layer7_rules_list as $l7rules) { + if($l7rules->GetREnabled()) { + $filename = $l7rules->GetRName() . ".l7"; + $path = "{$g['tmp_path']}/" . $filename; + + unset($l7pid); + /* Only reread the configuration rather than restart to avoid losing information. */ + exec("/bin/pgrep -f 'ipfw-classifyd .* -p ". $l7rules->GetRPort() . "'", $l7pid); + if (count($l7pid) > 0) { + log_error(sprintf(gettext("Sending HUP signal to %s"), $l7pid[0])); + mwexec("/bin/kill -HUP {$l7pid[0]}"); + } else { + // XXX: Hardcoded number of packets to garbage collect and queue length.. + $ipfw_classifyd_init = "/usr/local/sbin/ipfw-classifyd -n 8 -q 700 -c {$path} -p " . $l7rules->GetRPort() . " -P /usr/local/share/protocols"; + mwexec_bg($ipfw_classifyd_init); + } + } + } +} + +// This function uses /usr/local/share/protocols as a default directory for searching .pat files +function generate_protocols_array() { + + update_layer7_custom_patterns(); + + $protocols = return_dir_as_array("/usr/local/share/protocols"); + $protocols_new = array(); + if(is_array($protocols)) { + foreach($protocols as $key => $proto) { + if (strstr($proto, ".pat")) + $protocols_new[$key] =& str_replace(".pat", "", $proto); + } + sort($protocols_new); + } + return $protocols_new; +} + +function get_l7_unique_list() { + global $layer7_rules_list; + + $l7list = array(); + if(is_array($layer7_rules_list)) + foreach($layer7_rules_list as $l7c) + if($l7c->GetREnabled()) + $l7list[] = $l7c->GetRName(); + + return $l7list; +} + +// Disable a removed l7 container from the filter +function cleanup_l7_from_rules(&$name) { + global $config; + + if(is_array($config['filter']['rule'])) + foreach ($config['filter']['rule'] as $key => $rule) { + if ($rule['l7container'] == $name) + unset($config['filter']['rule'][$key]['l7container']); + } +} + +function get_dummynet_name_list() { + + $dn_name_list =& get_unique_dnqueue_list(); + $dn_name = array(); + if(is_array($dn_name_list)) + foreach($dn_name_list as $key => $value) + $dn_name[] = $key; + + return $dn_name; + +} + +function get_altq_name_list() { + $altq_name_list =& get_unique_queue_list(); + $altq_name = array(); + if(is_array($altq_name_list)) + foreach($altq_name_list as $key => $aqobj) + $altq_name[] = $key; + + return $altq_name; +} + +/* + * XXX: TODO Make a class shaper to hide all these function + * from the global namespace. + */ + +/* + * This is a layer violation but for now there is no way + * i can find to properly do this with PHP. + */ +function altq_get_default_queue($interface) { + global $altq_list_queues; + + $altq_tmp = $altq_list_queues[$interface]; + if ($altq_tmp) + return $altq_tmp->GetDefaultQueuePresent(); + else + return false; +} + +function altq_check_default_queues() { + global $altq_list_queues; + + $count = 0; + if (is_array($altq_list_queues)) { + foreach($altq_list_queues as $altq) { + if ($altq->GetDefaultQueuePresent()) + $count++; + } + } + else $count++; + + return 0; +} + +function &get_unique_queue_list() { + global $altq_list_queues; + + $qlist = array(); + if (is_array($altq_list_queues)) { + foreach ($altq_list_queues as $altq) { + if ($altq->GetEnabled() == "") + continue; + $tmplist =& $altq->get_queue_list(); + foreach ($tmplist as $qname => $link) { + if ($link->GetEnabled() <> "") + $qlist[$qname] = $link; + } + } + } + return $qlist; +} + +function &get_unique_dnqueue_list() { + global $dummynet_pipe_list; + + $qlist = array(); + if (is_array($dummynet_pipe_list)) { + foreach ($dummynet_pipe_list as $dn) { + if ($dn->GetEnabled() == "") + continue; + $tmplist =& $dn->get_queue_list(); + foreach ($tmplist as $qname => $link) { + $qlist[$qname] = $link; + } + } + } + return $qlist; +} + +function ref_on_altq_queue_list($parent, $qname) { + if (isset($GLOBALS['queue_list'][$qname])) + $GLOBALS['queue_list'][$qname]++; + else + $GLOBALS['queue_list'][$qname] = 1; + + unref_on_altq_queue_list($parent); +} + +function unref_on_altq_queue_list($qname) { + $GLOBALS['queue_list'][$qname]--; + if ($GLOBALS['queue_list'][$qname] <= 1) + unset($GLOBALS['queue_list'][$qname]); +} + +function read_altq_config() { + global $altq_list_queues, $config; + $path = array(); + + if (!is_array($config['shaper'])) + $config['shaper'] = array(); + if (!is_array($config['shaper']['queue'])) + $config['shaper']['queue'] = array(); + $a_int = &$config['shaper']['queue']; + + $altq_list_queues = array(); + + if (!is_array($config['shaper']['queue'])) + return; + + foreach ($a_int as $key => $conf) { + $int = $conf['interface']; + $root =& new altq_root_queue(); + $root->SetInterface($int); + $altq_list_queues[$root->GetInterface()] = &$root; + $root->ReadConfig($conf); + array_push($path, $key); + $root->SetLink($path); + if (is_array($conf['queue'])) { + foreach ($conf['queue'] as $key1 => $q) { + array_push($path, $key1); + /* + * XXX: we completely ignore errors here but anyway we must have + * checked them before so no harm should be come from this. + */ + $root->add_queue($root->GetInterface(), $q, $path, $input_errors); + array_pop($path); + } + } + array_pop($path); + } +} + +function read_dummynet_config() { + global $dummynet_pipe_list, $config; + $path = array(); + + if (!is_array($config['dnshaper'])) + $config['dnshaper'] = array(); + if (!is_array($config['dnshaper']['queue'])) + $config['dnshaper']['queue'] = array(); + $a_int = &$config['dnshaper']['queue']; + + $dummynet_pipe_list = array(); + + if (!is_array($config['dnshaper']['queue']) + || !count($config['dnshaper']['queue'])) + return; + + foreach ($a_int as $key => $conf) { + if (empty($conf['name'])) + continue; /* XXX: grrrrrr at php */ + $root =& new dnpipe_class(); + $root->ReadConfig($conf); + $dummynet_pipe_list[$root->GetQname()] = &$root; + array_push($path, $key); + $root->SetLink($path); + if (is_array($conf['queue'])) { + foreach ($conf['queue'] as $key1 => $q) { + array_push($path, $key1); + /* + * XXX: we completely ignore errors here but anyway we must have + * checked them before so no harm should be come from this. + */ + $root->add_queue($root->GetQname(), $q, $path, $input_errors); + array_pop($path); + } + } + array_pop($path); + } +} + +function get_interface_list_to_show() { + global $altq_list_queues, $config; + global $shaperIFlist; + + $tree = ""; + foreach ($shaperIFlist as $shif => $shDescr) { + if ($altq_list_queues[$shif]) { + continue; + } else { + if (!is_altq_capable(get_real_interface($shif))) + continue; + $tree .= "
  • ".$shDescr."
  • "; + } + } + + return $tree; +} + +function filter_generate_altq_queues() { + global $altq_list_queues; + + read_altq_config(); + + $altq_rules = ""; + foreach ($altq_list_queues as $altq) + $altq_rules .= $altq->build_rules(); + + return $altq_rules; +} + +function dnqueue_find_nextnumber() { + global $dummynet_pipe_list; + + $dnused = array(); + if (is_array($dummynet_pipe_list)) { + foreach ($dummynet_pipe_list as $dn) { + $tmplist =& $dn->get_queue_list(); + foreach ($tmplist as $qname => $link) { + if ($link[0] == "?") + $dnused[$qname] = substr($link, 1); + } + } + } + + sort($dnused, SORT_NUMERIC); + $dnnumber = 0; + $found = false; + foreach ($dnused as $dnnum) { + if (($dnnum - $dnnumber) > 1) { + $dnnumber = $dnnum + 1; + $found = true; + break; + } else + $dnnumber = $dnnum; + } + + if ($found == false) + $dnnumber++; + + unset($dnused, $dnnum, $found); + return $dnnumber; +} + +function dnpipe_find_nextnumber() { + global $dummynet_pipe_list; + + $dnused = array(); + foreach ($dummynet_pipe_list as $dn) + $dnused[] = $dn->GetNumber(); + + sort($dnused, SORT_NUMERIC); + $dnnumber = 0; + $found = false; + foreach ($dnused as $dnnum) { + if (($dnnum - $dnnumber) > 1) { + $dnnumber = $dnnum + 1; + $found = true; + break; + } else + $dnnumber = $dnnum; + } + + if ($found == false) + $dnnumber++; + + unset($dnused, $dnnum, $found); + return $dnnumber; +} + +function filter_generate_dummynet_rules() { + global $g, $dummynet_pipe_list; + + read_dummynet_config(); + + $dn_rules = ""; + foreach ($dummynet_pipe_list as $dn) + $dn_rules .= $dn->build_rules(); + + if (!empty($dn_rules)) { + if (!is_module_loaded("dummynet.ko")) { + mwexec("/sbin/kldload dummynet"); + set_sysctl(array( + "net.inet.ip.dummynet.io_fast" => "1", + "net.inet.ip.dummynet.hash_size" => "256" + )); + } + file_put_contents("{$g['tmp_path']}/rules.limiter", $dn_rules); + mwexec("/sbin/ipfw {$g['tmp_path']}/rules.limiter"); + } +} + +function build_iface_without_this_queue($iface, $qname) { + global $g, $altq_list_queues; + global $shaperIFlist; + + $altq =& $altq_list_queues[$iface]; + if ($altq) + $scheduler = ": " . $altq->GetScheduler(); + $form = ""; + $form .= "". $shaperIFlist[$iface] . $scheduler.""; + $form .= ""; + $form .= ""; + $form .= ""; + $form .= "\"clone\""; + $form .= gettext(" Clone shaper/queue on this interface") . ""; + + return $form; + +} + + +$default_shaper_msg = ""; +$default_shaper_msg .= "" . sprintf(gettext("Welcome to the %s Traffic Shaper."), $g['product_name']) . "
    "; +$default_shaper_msg .= gettext("The tree on the left helps you navigate through the queues
    " + . "buttons at the bottom represent queue actions and are activated accordingly."); +$default_shaper_msg .= "
    "; +$default_shaper_msg .= ""; + +$dn_default_shaper_msg = ""; +$dn_default_shaper_msg .= "" . sprintf(gettext("Welcome to the %s Traffic Shaper."), $g['product_name']) . "
    "; +$dn_default_shaper_msg .= gettext("The tree on the left helps you navigate through the queues
    " + . "buttons at the bottom represent queue actions and are activated accordingly."); +$dn_default_shaper_msg .= "
    "; +$dn_default_shaper_msg .= ""; + +?> diff --git a/usr/etc/inc/simplepie/LICENSE.txt b/usr/etc/inc/simplepie/LICENSE.txt new file mode 100644 index 000000000..a822a4bd9 --- /dev/null +++ b/usr/etc/inc/simplepie/LICENSE.txt @@ -0,0 +1,26 @@ +Copyright (c) 2004-2007, Ryan Parman and Geoffrey Sneddon. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + * 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. + + * Neither the name of the SimplePie Team nor the names of its contributors may be used + to endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDERS +AND CONTRIBUTORS 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. \ No newline at end of file diff --git a/usr/etc/inc/simplepie/simplepie.inc b/usr/etc/inc/simplepie/simplepie.inc new file mode 100644 index 000000000..7052eb4b4 --- /dev/null +++ b/usr/etc/inc/simplepie/simplepie.inc @@ -0,0 +1,13672 @@ +' . SIMPLEPIE_NAME . ''); + +/** + * No Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_NONE', 0); + +/** + * Feed Link Element Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', 1); + +/** + * Local Feed Extension Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', 2); + +/** + * Local Feed Body Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_LOCAL_BODY', 4); + +/** + * Remote Feed Extension Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', 8); + +/** + * Remote Feed Body Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_REMOTE_BODY', 16); + +/** + * All Feed Autodiscovery + * @see SimplePie::set_autodiscovery_level() + */ +define('SIMPLEPIE_LOCATOR_ALL', 31); + +/** + * No known feed type + */ +define('SIMPLEPIE_TYPE_NONE', 0); + +/** + * RSS 0.90 + */ +define('SIMPLEPIE_TYPE_RSS_090', 1); + +/** + * RSS 0.91 (Netscape) + */ +define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', 2); + +/** + * RSS 0.91 (Userland) + */ +define('SIMPLEPIE_TYPE_RSS_091_USERLAND', 4); + +/** + * RSS 0.91 (both Netscape and Userland) + */ +define('SIMPLEPIE_TYPE_RSS_091', 6); + +/** + * RSS 0.92 + */ +define('SIMPLEPIE_TYPE_RSS_092', 8); + +/** + * RSS 0.93 + */ +define('SIMPLEPIE_TYPE_RSS_093', 16); + +/** + * RSS 0.94 + */ +define('SIMPLEPIE_TYPE_RSS_094', 32); + +/** + * RSS 1.0 + */ +define('SIMPLEPIE_TYPE_RSS_10', 64); + +/** + * RSS 2.0 + */ +define('SIMPLEPIE_TYPE_RSS_20', 128); + +/** + * RDF-based RSS + */ +define('SIMPLEPIE_TYPE_RSS_RDF', 65); + +/** + * Non-RDF-based RSS (truly intended as syndication format) + */ +define('SIMPLEPIE_TYPE_RSS_SYNDICATION', 190); + +/** + * All RSS + */ +define('SIMPLEPIE_TYPE_RSS_ALL', 255); + +/** + * Atom 0.3 + */ +define('SIMPLEPIE_TYPE_ATOM_03', 256); + +/** + * Atom 1.0 + */ +define('SIMPLEPIE_TYPE_ATOM_10', 512); + +/** + * All Atom + */ +define('SIMPLEPIE_TYPE_ATOM_ALL', 768); + +/** + * All feed types + */ +define('SIMPLEPIE_TYPE_ALL', 1023); + +/** + * No construct + */ +define('SIMPLEPIE_CONSTRUCT_NONE', 0); + +/** + * Text construct + */ +define('SIMPLEPIE_CONSTRUCT_TEXT', 1); + +/** + * HTML construct + */ +define('SIMPLEPIE_CONSTRUCT_HTML', 2); + +/** + * XHTML construct + */ +define('SIMPLEPIE_CONSTRUCT_XHTML', 4); + +/** + * base64-encoded construct + */ +define('SIMPLEPIE_CONSTRUCT_BASE64', 8); + +/** + * IRI construct + */ +define('SIMPLEPIE_CONSTRUCT_IRI', 16); + +/** + * A construct that might be HTML + */ +define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32); + +/** + * All constructs + */ +define('SIMPLEPIE_CONSTRUCT_ALL', 63); + +/** + * PCRE for HTML attributes + */ +define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*'); + +/** + * PCRE for XML attributes + */ +define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*'); + +/** + * XML Namespace + */ +define('SIMPLEPIE_NAMESPACE_XML', 'http://www.w3.org/XML/1998/namespace'); + +/** + * Atom 1.0 Namespace + */ +define('SIMPLEPIE_NAMESPACE_ATOM_10', 'http://www.w3.org/2005/Atom'); + +/** + * Atom 0.3 Namespace + */ +define('SIMPLEPIE_NAMESPACE_ATOM_03', 'http://purl.org/atom/ns#'); + +/** + * RDF Namespace + */ +define('SIMPLEPIE_NAMESPACE_RDF', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); + +/** + * RSS 0.90 Namespace + */ +define('SIMPLEPIE_NAMESPACE_RSS_090', 'http://my.netscape.com/rdf/simple/0.9/'); + +/** + * RSS 1.0 Namespace + */ +define('SIMPLEPIE_NAMESPACE_RSS_10', 'http://purl.org/rss/1.0/'); + +/** + * RSS 1.0 Content Module Namespace + */ +define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', 'http://purl.org/rss/1.0/modules/content/'); + +/** + * RSS 2.0 Namespace + * (Stupid, I know, but I'm certain it will confuse people less with support.) + */ +define('SIMPLEPIE_NAMESPACE_RSS_20', ''); + +/** + * DC 1.0 Namespace + */ +define('SIMPLEPIE_NAMESPACE_DC_10', 'http://purl.org/dc/elements/1.0/'); + +/** + * DC 1.1 Namespace + */ +define('SIMPLEPIE_NAMESPACE_DC_11', 'http://purl.org/dc/elements/1.1/'); + +/** + * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace + */ +define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', 'http://www.w3.org/2003/01/geo/wgs84_pos#'); + +/** + * GeoRSS Namespace + */ +define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss'); + +/** + * Media RSS Namespace + */ +define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/'); + +/** + * Wrong Media RSS Namespace + */ +define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', 'http://search.yahoo.com/mrss'); + +/** + * iTunes RSS Namespace + */ +define('SIMPLEPIE_NAMESPACE_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd'); + +/** + * XHTML Namespace + */ +define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml'); + +/** + * IANA Link Relations Registry + */ +define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/'); + +/** + * Whether we're running on PHP5 + */ +define('SIMPLEPIE_PHP5', version_compare(PHP_VERSION, '5.0.0', '>=')); + +/** + * No file source + */ +define('SIMPLEPIE_FILE_SOURCE_NONE', 0); + +/** + * Remote file source + */ +define('SIMPLEPIE_FILE_SOURCE_REMOTE', 1); + +/** + * Local file source + */ +define('SIMPLEPIE_FILE_SOURCE_LOCAL', 2); + +/** + * fsockopen() file source + */ +define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', 4); + +/** + * cURL file source + */ +define('SIMPLEPIE_FILE_SOURCE_CURL', 8); + +/** + * file_get_contents() file source + */ +define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', 16); + +/** + * SimplePie + * + * @package SimplePie + * @version "Razzleberry" + * @copyright 2004-2007 Ryan Parman, Geoffrey Sneddon + * @author Ryan Parman + * @author Geoffrey Sneddon + * @todo Option for type of fetching (cache, not modified header, fetch, etc.) + */ +class SimplePie +{ + /** + * @var array Raw data + * @access private + */ + var $data = array(); + + /** + * @var mixed Error string + * @access private + */ + var $error; + + /** + * @var object Instance of SimplePie_Sanitize (or other class) + * @see SimplePie::set_sanitize_class() + * @access private + */ + var $sanitize; + + /** + * @var string SimplePie Useragent + * @see SimplePie::set_useragent() + * @access private + */ + var $useragent = SIMPLEPIE_USERAGENT; + + /** + * @var string Feed URL + * @see SimplePie::set_feed_url() + * @access private + */ + var $feed_url; + + /** + * @var object Instance of SimplePie_File to use as a feed + * @see SimplePie::set_file() + * @access private + */ + var $file; + + /** + * @var string Raw feed data + * @see SimplePie::set_raw_data() + * @access private + */ + var $raw_data; + + /** + * @var int Timeout for fetching remote files + * @see SimplePie::set_timeout() + * @access private + */ + var $timeout = 10; + + /** + * @var bool Forces fsockopen() to be used for remote files instead + * of cURL, even if a new enough version is installed + * @see SimplePie::force_fsockopen() + * @access private + */ + var $force_fsockopen = false; + + /** + * @var bool Force the given data/URL to be treated as a feed no matter what + * it appears like + * @see SimplePie::force_feed() + * @access private + */ + var $force_feed = false; + + /** + * @var bool Enable/Disable XML dump + * @see SimplePie::enable_xml_dump() + * @access private + */ + var $xml_dump = false; + + /** + * @var bool Enable/Disable Caching + * @see SimplePie::enable_cache() + * @access private + */ + var $cache = true; + + /** + * @var int Cache duration (in seconds) + * @see SimplePie::set_cache_duration() + * @access private + */ + var $cache_duration = 3600; + + /** + * @var int Auto-discovery cache duration (in seconds) + * @see SimplePie::set_autodiscovery_cache_duration() + * @access private + */ + var $autodiscovery_cache_duration = 604800; // 7 Days. + + /** + * @var string Cache location (relative to executing script) + * @see SimplePie::set_cache_location() + * @access private + */ + var $cache_location = './cache'; + + /** + * @var string Function that creates the cache filename + * @see SimplePie::set_cache_name_function() + * @access private + */ + var $cache_name_function = 'md5'; + + /** + * @var bool Reorder feed by date descending + * @see SimplePie::enable_order_by_date() + * @access private + */ + var $order_by_date = true; + + /** + * @var mixed Force input encoding to be set to the follow value + * (false, or anything type-cast to false, disables this feature) + * @see SimplePie::set_input_encoding() + * @access private + */ + var $input_encoding = false; + + /** + * @var int Feed Autodiscovery Level + * @see SimplePie::set_autodiscovery_level() + * @access private + */ + var $autodiscovery = SIMPLEPIE_LOCATOR_ALL; + + /** + * @var string Class used for caching feeds + * @see SimplePie::set_cache_class() + * @access private + */ + var $cache_class = 'SimplePie_Cache'; + + /** + * @var string Class used for locating feeds + * @see SimplePie::set_locator_class() + * @access private + */ + var $locator_class = 'SimplePie_Locator'; + + /** + * @var string Class used for parsing feeds + * @see SimplePie::set_parser_class() + * @access private + */ + var $parser_class = 'SimplePie_Parser'; + + /** + * @var string Class used for fetching feeds + * @see SimplePie::set_file_class() + * @access private + */ + var $file_class = 'SimplePie_File'; + + /** + * @var string Class used for items + * @see SimplePie::set_item_class() + * @access private + */ + var $item_class = 'SimplePie_Item'; + + /** + * @var string Class used for authors + * @see SimplePie::set_author_class() + * @access private + */ + var $author_class = 'SimplePie_Author'; + + /** + * @var string Class used for categories + * @see SimplePie::set_category_class() + * @access private + */ + var $category_class = 'SimplePie_Category'; + + /** + * @var string Class used for enclosures + * @see SimplePie::set_enclosures_class() + * @access private + */ + var $enclosure_class = 'SimplePie_Enclosure'; + + /** + * @var string Class used for Media RSS captions + * @see SimplePie::set_caption_class() + * @access private + */ + var $caption_class = 'SimplePie_Caption'; + + /** + * @var string Class used for Media RSS + * @see SimplePie::set_copyright_class() + * @access private + */ + var $copyright_class = 'SimplePie_Copyright'; + + /** + * @var string Class used for Media RSS + * @see SimplePie::set_credit_class() + * @access private + */ + var $credit_class = 'SimplePie_Credit'; + + /** + * @var string Class used for Media RSS + * @see SimplePie::set_rating_class() + * @access private + */ + var $rating_class = 'SimplePie_Rating'; + + /** + * @var string Class used for Media RSS + * @see SimplePie::set_restriction_class() + * @access private + */ + var $restriction_class = 'SimplePie_Restriction'; + + /** + * @var string Class used for content-type sniffing + * @see SimplePie::set_content_type_sniffer_class() + * @access private + */ + var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer'; + + /** + * @var string Class used for item sources. + * @see SimplePie::set_source_class() + * @access private + */ + var $source_class = 'SimplePie_Source'; + + /** + * @var mixed Set javascript query string parameter (false, or + * anything type-cast to false, disables this feature) + * @see SimplePie::set_javascript() + * @access private + */ + var $javascript = 'js'; + + /** + * @var int Maximum number of feeds to check with autodiscovery + * @see SimplePie::set_max_checked_feeds() + * @access private + */ + var $max_checked_feeds = 10; + + /** + * @var string Web-accessible path to the handler_favicon.php file. + * @see SimplePie::set_favicon_handler() + * @access private + */ + var $favicon_handler = ''; + + /** + * @var string Web-accessible path to the handler_image.php file. + * @see SimplePie::set_image_handler() + * @access private + */ + var $image_handler = ''; + + /** + * @var array Stores the URLs when multiple feeds are being initialized. + * @see SimplePie::set_feed_url() + * @access private + */ + var $multifeed_url = array(); + + /** + * @var array Stores SimplePie objects when multiple feeds initialized. + * @access private + */ + var $multifeed_objects = array(); + + /** + * @var array Stores the get_object_vars() array for use with multifeeds. + * @see SimplePie::set_feed_url() + * @access private + */ + var $config_settings = null; + + /** + * @var integer Stores the number of items to return per-feed with multifeeds. + * @see SimplePie::set_item_limit() + * @access private + */ + var $item_limit = 0; + + /** + * @var array Stores the default attributes to be stripped by strip_attributes(). + * @see SimplePie::strip_attributes() + * @access private + */ + var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); + + /** + * @var array Stores the default tags to be stripped by strip_htmltags(). + * @see SimplePie::strip_htmltags() + * @access private + */ + var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); + + /** + * The SimplePie class contains feed level data and options + * + * There are two ways that you can create a new SimplePie object. The first + * is by passing a feed URL as a parameter to the SimplePie constructor + * (as well as optionally setting the cache location and cache expiry). This + * will initialise the whole feed with all of the default settings, and you + * can begin accessing methods and properties immediately. + * + * The second way is to create the SimplePie object with no parameters + * at all. This will enable you to set configuration options. After setting + * them, you must initialise the feed using $feed->init(). At that point the + * object's methods and properties will be available to you. This format is + * what is used throughout this documentation. + * + * @access public + * @since 1.0 Preview Release + * @param string $feed_url This is the URL you want to parse. + * @param string $cache_location This is where you want the cache to be stored. + * @param int $cache_duration This is the number of seconds that you want to store the cache file for. + */ + function SimplePie($feed_url = null, $cache_location = null, $cache_duration = null) + { + // Other objects, instances created here so we can set options on them + $this->sanitize =& new SimplePie_Sanitize; + + // Set options if they're passed to the constructor + if ($cache_location !== null) + { + $this->set_cache_location($cache_location); + } + + if ($cache_duration !== null) + { + $this->set_cache_duration($cache_duration); + } + + // Only init the script if we're passed a feed URL + if ($feed_url !== null) + { + $this->set_feed_url($feed_url); + $this->init(); + } + } + + /** + * Used for converting object to a string + */ + function __toString() + { + return md5(serialize($this->data)); + } + + /** + * Remove items that link back to this before destroying this object + */ + function __destruct() + { + if (!empty($this->data['items'])) + { + foreach ($this->data['items'] as $item) + { + $item->__destruct(); + } + unset($this->data['items']); + } + if (!empty($this->data['ordered_items'])) + { + foreach ($this->data['ordered_items'] as $item) + { + $item->__destruct(); + } + unset($this->data['ordered_items']); + } + } + + /** + * Force the given data/URL to be treated as a feed no matter what it + * appears like + * + * @access public + * @since 1.1 + * @param bool $enable Force the given data/URL to be treated as a feed + */ + function force_feed($enable = false) + { + $this->force_feed = (bool) $enable; + } + + /** + * This is the URL of the feed you want to parse. + * + * This allows you to enter the URL of the feed you want to parse, or the + * website you want to try to use auto-discovery on. This takes priority + * over any set raw data. + * + * You can set multiple feeds to mash together by passing an array instead + * of a string for the $url. Remember that with each additional feed comes + * additional processing and resources. + * + * @access public + * @since 1.0 Preview Release + * @param mixed $url This is the URL (or array of URLs) that you want to parse. + * @see SimplePie::set_raw_data() + */ + function set_feed_url($url) + { + if (is_array($url)) + { + $this->multifeed_url = array(); + foreach ($url as $value) + { + $this->multifeed_url[] = SimplePie_Misc::fix_protocol($value, 1); + } + } + else + { + $this->feed_url = SimplePie_Misc::fix_protocol($url, 1); + } + } + + /** + * Provides an instance of SimplePie_File to use as a feed + * + * @access public + * @param object &$file Instance of SimplePie_File (or subclass) + * @return bool True on success, false on failure + */ + function set_file(&$file) + { + if (is_a($file, 'SimplePie_File')) + { + $this->feed_url = $file->url; + $this->file =& $file; + return true; + } + return false; + } + + /** + * Allows you to use a string of RSS/Atom data instead of a remote feed. + * + * If you have a feed available as a string in PHP, you can tell SimplePie + * to parse that data string instead of a remote feed. Any set feed URL + * takes precedence. + * + * @access public + * @since 1.0 Beta 3 + * @param string $data RSS or Atom data as a string. + * @see SimplePie::set_feed_url() + */ + function set_raw_data($data) + { + $this->raw_data = $data; + } + + /** + * Allows you to override the default timeout for fetching remote feeds. + * + * This allows you to change the maximum time the feed's server to respond + * and send the feed back. + * + * @access public + * @since 1.0 Beta 3 + * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed. + */ + function set_timeout($timeout = 10) + { + $this->timeout = (int) $timeout; + } + + /** + * Forces SimplePie to use fsockopen() instead of the preferred cURL + * functions. + * + * @access public + * @since 1.0 Beta 3 + * @param bool $enable Force fsockopen() to be used + */ + function force_fsockopen($enable = false) + { + $this->force_fsockopen = (bool) $enable; + } + + /** + * Outputs the raw XML content of the feed, after it has gone through + * SimplePie's filters. + * + * Used only for debugging, this function will output the XML content as + * text/xml. When SimplePie reads in a feed, it does a bit of cleaning up + * before trying to parse it. Many parts of the feed are re-written in + * memory, and in the end, you have a parsable feed. XML dump shows you the + * actual XML that SimplePie tries to parse, which may or may not be very + * different from the original feed. + * + * @access public + * @since 1.0 Preview Release + * @param bool $enable Enable XML dump + */ + function enable_xml_dump($enable = false) + { + $this->xml_dump = (bool) $enable; + } + + /** + * Enables/disables caching in SimplePie. + * + * This option allows you to disable caching all-together in SimplePie. + * However, disabling the cache can lead to longer load times. + * + * @access public + * @since 1.0 Preview Release + * @param bool $enable Enable caching + */ + function enable_cache($enable = true) + { + $this->cache = (bool) $enable; + } + + /** + * Set the length of time (in seconds) that the contents of a feed + * will be cached. + * + * @access public + * @param int $seconds The feed content cache duration. + */ + function set_cache_duration($seconds = 3600) + { + $this->cache_duration = (int) $seconds; + } + + /** + * Set the length of time (in seconds) that the autodiscovered feed + * URL will be cached. + * + * @access public + * @param int $seconds The autodiscovered feed URL cache duration. + */ + function set_autodiscovery_cache_duration($seconds = 604800) + { + $this->autodiscovery_cache_duration = (int) $seconds; + } + + /** + * Set the file system location where the cached files should be stored. + * + * @access public + * @param string $location The file system location. + */ + function set_cache_location($location = './cache') + { + $this->cache_location = (string) $location; + } + + /** + * Determines whether feed items should be sorted into reverse chronological order. + * + * @access public + * @param bool $enable Sort as reverse chronological order. + */ + function enable_order_by_date($enable = true) + { + $this->order_by_date = (bool) $enable; + } + + /** + * Allows you to override the character encoding reported by the feed. + * + * @access public + * @param string $encoding Character encoding. + */ + function set_input_encoding($encoding = false) + { + if ($encoding) + { + $this->input_encoding = (string) $encoding; + } + else + { + $this->input_encoding = false; + } + } + + /** + * Set how much feed autodiscovery to do + * + * @access public + * @see SIMPLEPIE_LOCATOR_NONE + * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY + * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION + * @see SIMPLEPIE_LOCATOR_LOCAL_BODY + * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION + * @see SIMPLEPIE_LOCATOR_REMOTE_BODY + * @see SIMPLEPIE_LOCATOR_ALL + * @param int $level Feed Autodiscovery Level (level can be a + * combination of the above constants, see bitwise OR operator) + */ + function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL) + { + $this->autodiscovery = (int) $level; + } + + /** + * Allows you to change which class SimplePie uses for caching. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_cache_class($class = 'SimplePie_Cache') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Cache')) + { + $this->cache_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for auto-discovery. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_locator_class($class = 'SimplePie_Locator') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Locator')) + { + $this->locator_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for XML parsing. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_parser_class($class = 'SimplePie_Parser') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Parser')) + { + $this->parser_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for remote file fetching. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_file_class($class = 'SimplePie_File') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_File')) + { + $this->file_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for data sanitization. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_sanitize_class($class = 'SimplePie_Sanitize') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Sanitize')) + { + $this->sanitize =& new $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for handling feed items. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_item_class($class = 'SimplePie_Item') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Item')) + { + $this->item_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for handling author data. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_author_class($class = 'SimplePie_Author') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Author')) + { + $this->author_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for handling category data. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_category_class($class = 'SimplePie_Category') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Category')) + { + $this->category_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for feed enclosures. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_enclosure_class($class = 'SimplePie_Enclosure') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Enclosure')) + { + $this->enclosure_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for captions + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_caption_class($class = 'SimplePie_Caption') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Caption')) + { + $this->caption_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_copyright_class($class = 'SimplePie_Copyright') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Copyright')) + { + $this->copyright_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_credit_class($class = 'SimplePie_Credit') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Credit')) + { + $this->credit_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_rating_class($class = 'SimplePie_Rating') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Rating')) + { + $this->rating_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_restriction_class($class = 'SimplePie_Restriction') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Restriction')) + { + $this->restriction_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses for content-type sniffing. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_content_type_sniffer_class($class = 'SimplePie_Content_Type_Sniffer') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Content_Type_Sniffer')) + { + $this->content_type_sniffer_class = $class; + return true; + } + return false; + } + + /** + * Allows you to change which class SimplePie uses item sources. + * Useful when you are overloading or extending SimplePie's default classes. + * + * @access public + * @param string $class Name of custom class. + * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation + * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation + */ + function set_source_class($class = 'SimplePie_Source') + { + if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Source')) + { + $this->source_class = $class; + return true; + } + return false; + } + + /** + * Allows you to override the default user agent string. + * + * @access public + * @param string $ua New user agent string. + */ + function set_useragent($ua = SIMPLEPIE_USERAGENT) + { + $this->useragent = (string) $ua; + } + + /** + * Set callback function to create cache filename with + * + * @access public + * @param mixed $function Callback function + */ + function set_cache_name_function($function = 'md5') + { + if (is_callable($function)) + { + $this->cache_name_function = $function; + } + } + + /** + * Set javascript query string parameter + * + * @access public + * @param mixed $get Javascript query string parameter + */ + function set_javascript($get = 'js') + { + if ($get) + { + $this->javascript = (string) $get; + } + else + { + $this->javascript = false; + } + } + + /** + * Set options to make SP as fast as possible. Forgoes a + * substantial amount of data sanitization in favor of speed. + * + * @access public + * @param bool $set Whether to set them or not + */ + function set_stupidly_fast($set = false) + { + if ($set) + { + $this->enable_order_by_date(false); + $this->remove_div(false); + $this->strip_comments(false); + $this->strip_htmltags(false); + $this->strip_attributes(false); + $this->set_image_handler(false); + } + } + + /** + * Set maximum number of feeds to check with autodiscovery + * + * @access public + * @param int $max Maximum number of feeds to check + */ + function set_max_checked_feeds($max = 10) + { + $this->max_checked_feeds = (int) $max; + } + + function remove_div($enable = true) + { + $this->sanitize->remove_div($enable); + } + + function strip_htmltags($tags = '', $encode = null) + { + if ($tags === '') + { + $tags = $this->strip_htmltags; + } + $this->sanitize->strip_htmltags($tags); + if ($encode !== null) + { + $this->sanitize->encode_instead_of_strip($tags); + } + } + + function encode_instead_of_strip($enable = true) + { + $this->sanitize->encode_instead_of_strip($enable); + } + + function strip_attributes($attribs = '') + { + if ($attribs === '') + { + $attribs = $this->strip_attributes; + } + $this->sanitize->strip_attributes($attribs); + } + + function set_output_encoding($encoding = 'UTF-8') + { + $this->sanitize->set_output_encoding($encoding); + } + + function strip_comments($strip = false) + { + $this->sanitize->strip_comments($strip); + } + + /** + * Set element/attribute key/value pairs of HTML attributes + * containing URLs that need to be resolved relative to the feed + * + * @access public + * @since 1.0 + * @param array $element_attribute Element/attribute key/value pairs + */ + function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite')) + { + $this->sanitize->set_url_replacements($element_attribute); + } + + /** + * Set the handler to enable the display of cached favicons. + * + * @access public + * @param str $page Web-accessible path to the handler_favicon.php file. + * @param str $qs The query string that the value should be passed to. + */ + function set_favicon_handler($page = false, $qs = 'i') + { + if ($page != false) + { + $this->favicon_handler = $page . '?' . $qs . '='; + } + else + { + $this->favicon_handler = ''; + } + } + + /** + * Set the handler to enable the display of cached images. + * + * @access public + * @param str $page Web-accessible path to the handler_image.php file. + * @param str $qs The query string that the value should be passed to. + */ + function set_image_handler($page = false, $qs = 'i') + { + if ($page != false) + { + $this->sanitize->set_image_handler($page . '?' . $qs . '='); + } + else + { + $this->image_handler = ''; + } + } + + /** + * Set the limit for items returned per-feed with multifeeds. + * + * @access public + * @param integer $limit The maximum number of items to return. + */ + function set_item_limit($limit = 0) + { + $this->item_limit = (int) $limit; + } + + function init() + { + if ((function_exists('version_compare') && version_compare(PHP_VERSION, '4.3.0', '<')) || !extension_loaded('xml') || !extension_loaded('pcre')) + { + return false; + } + if (isset($_GET[$this->javascript])) + { + if (function_exists('ob_gzhandler')) + { + ob_start('ob_gzhandler'); + } + header('Content-type: text/javascript; charset: UTF-8'); + header('Cache-Control: must-revalidate'); + header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days + ?> +function embed_odeo(link) { + document.writeln(''); +} + +function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) { + if (placeholder != '') { + document.writeln(''); + } + else { + document.writeln(''); + } +} + +function embed_flash(bgcolor, width, height, link, loop, type) { + document.writeln(''); +} + +function embed_flv(width, height, link, placeholder, loop, player) { + document.writeln(''); +} + +function embed_wmedia(width, height, link) { + document.writeln(''); +} + sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->cache_class); + $this->sanitize->pass_file_data($this->file_class, $this->timeout, $this->useragent, $this->force_fsockopen); + + if ($this->feed_url !== null || $this->raw_data !== null) + { + $this->data = array(); + $this->multifeed_objects = array(); + $cache = false; + + if ($this->feed_url !== null) + { + $parsed_feed_url = SimplePie_Misc::parse_url($this->feed_url); + // Decide whether to enable caching + if ($this->cache && $parsed_feed_url['scheme'] !== '') + { + $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc'); + } + // If it's enabled and we don't want an XML dump, use the cache + if ($cache && !$this->xml_dump) + { + // Load the Cache + $this->data = $cache->load(); + if (!empty($this->data)) + { + // If the cache is for an outdated build of SimplePie + if (!isset($this->data['build']) || $this->data['build'] != SIMPLEPIE_BUILD) + { + $cache->unlink(); + $this->data = array(); + } + // If we've hit a collision just rerun it with caching disabled + elseif (isset($this->data['url']) && $this->data['url'] != $this->feed_url) + { + $cache = false; + $this->data = array(); + } + // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL. + elseif (isset($this->data['feed_url'])) + { + // If the autodiscovery cache is still valid use it. + if ($cache->mtime() + $this->autodiscovery_cache_duration > time()) + { + // Do not need to do feed autodiscovery yet. + if ($this->data['feed_url'] == $this->data['url']) + { + $cache->unlink(); + $this->data = array(); + } + else + { + $this->set_feed_url($this->data['feed_url']); + return $this->init(); + } + } + } + // Check if the cache has been updated + elseif ($cache->mtime() + $this->cache_duration < time()) + { + // If we have last-modified and/or etag set + if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag'])) + { + $headers = array(); + if (isset($this->data['headers']['last-modified'])) + { + $headers['if-modified-since'] = $this->data['headers']['last-modified']; + } + if (isset($this->data['headers']['etag'])) + { + $headers['if-none-match'] = '"' . $this->data['headers']['etag'] . '"'; + } + $file =& new $this->file_class($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen); + if ($file->success) + { + if ($file->status_code == 304) + { + $cache->touch(); + return true; + } + else + { + $headers = $file->headers; + } + } + else + { + unset($file); + } + } + } + // If the cache is still valid, just return true + else + { + return true; + } + } + // If the cache is empty, delete it + else + { + $cache->unlink(); + $this->data = array(); + } + } + // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it. + if (!isset($file)) + { + if (is_a($this->file, 'SimplePie_File') && $this->file->url == $this->feed_url) + { + $file =& $this->file; + } + else + { + $file =& new $this->file_class($this->feed_url, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen); + } + } + // If the file connection has an error, set SimplePie::error to that and quit + if (!$file->success) + { + $this->error = $file->error; + if (!empty($this->data)) + { + return true; + } + else + { + return false; + } + } + + if (!$this->force_feed) + { + // Check if the supplied URL is a feed, if it isn't, look for it. + $locate =& new $this->locator_class($file, $this->timeout, $this->useragent, $this->file_class, $this->max_checked_feeds, $this->content_type_sniffer_class); + if (!$locate->is_feed($file)) + { + // We need to unset this so that if SimplePie::set_file() has been called that object is untouched + unset($file); + if ($file = $locate->find($this->autodiscovery)) + { + if ($cache) + { + $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD); + if (!$cache->save($this)) + { + trigger_error("$cache->name is not writeable", E_USER_WARNING); + } + $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc'); + } + $this->feed_url = $file->url; + } + else + { + $this->error = "A feed could not be found at $this->feed_url"; + SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); + return false; + } + } + $locate = null; + } + + $headers = $file->headers; + $data = $file->body; + $sniffer = new $this->content_type_sniffer_class($file); + $sniffed = $sniffer->get_type(); + } + else + { + $data = $this->raw_data; + } + + // Set up array of possible encodings + $encodings = array(); + + // First check to see if input has been overridden. + if ($this->input_encoding !== false) + { + $encodings[] = $this->input_encoding; + } + + $application_types = array('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity'); + $text_types = array('text/xml', 'text/xml-external-parsed-entity'); + + // RFC 3023 (only applies to sniffed content) + if (isset($sniffed)) + { + if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml') + { + if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) + { + $encodings[] = strtoupper($charset[1]); + } + $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data)); + $encodings[] = 'UTF-8'; + } + elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml') + { + if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) + { + $encodings[] = $charset[1]; + } + $encodings[] = 'US-ASCII'; + } + // Text MIME-type default + elseif (substr($sniffed, 0, 5) === 'text/') + { + $encodings[] = 'US-ASCII'; + } + } + + // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1 + $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data)); + $encodings[] = 'UTF-8'; + $encodings[] = 'ISO-8859-1'; + + // There's no point in trying an encoding twice + $encodings = array_unique($encodings); + + // If we want the XML, just output that with the most likely encoding and quit + if ($this->xml_dump) + { + header('Content-type: text/xml; charset=' . $encodings[0]); + echo $data; + exit; + } + + // Loop through each possible encoding, till we return something, or run out of possibilities + foreach ($encodings as $encoding) + { + // Change the encoding to UTF-8 (as we always use UTF-8 internally) + if ($utf8_data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8')) + { + // Create new parser + $parser =& new $this->parser_class(); + + // If it's parsed fine + if ($parser->parse($utf8_data, 'UTF-8')) + { + $this->data = $parser->get_data(); + if ($this->get_type() & ~SIMPLEPIE_TYPE_NONE) + { + if (isset($headers)) + { + $this->data['headers'] = $headers; + } + $this->data['build'] = SIMPLEPIE_BUILD; + + // Cache the file if caching is enabled + if ($cache && !$cache->save($this)) + { + trigger_error("$cache->name is not writeable", E_USER_WARNING); + } + return true; + } + else + { + $this->error = "A feed could not be found at $this->feed_url"; + SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); + return false; + } + } + } + } + // We have an error, just set SimplePie::error to it and quit + $this->error = sprintf('XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column()); + SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); + return false; + } + elseif (!empty($this->multifeed_url)) + { + $i = 0; + $success = 0; + $this->multifeed_objects = array(); + foreach ($this->multifeed_url as $url) + { + if (SIMPLEPIE_PHP5) + { + // This keyword needs to defy coding standards for PHP4 compatibility + $this->multifeed_objects[$i] = clone($this); + } + else + { + $this->multifeed_objects[$i] = $this; + } + $this->multifeed_objects[$i]->set_feed_url($url); + $success |= $this->multifeed_objects[$i]->init(); + $i++; + } + return (bool) $success; + } + else + { + return false; + } + } + + /** + * Return the error message for the occurred error + * + * @access public + * @return string Error message + */ + function error() + { + return $this->error; + } + + function get_encoding() + { + return $this->sanitize->output_encoding; + } + + function handle_content_type($mime = 'text/html') + { + if (!headers_sent()) + { + $header = "Content-type: $mime;"; + if ($this->get_encoding()) + { + $header .= ' charset=' . $this->get_encoding(); + } + else + { + $header .= ' charset=UTF-8'; + } + header($header); + } + } + + function get_type() + { + if (!isset($this->data['type'])) + { + $this->data['type'] = SIMPLEPIE_TYPE_ALL; + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_10; + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_03; + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'])) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['channel']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['image']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['textinput'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_10; + } + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['channel']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['image']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']) + || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['textinput'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090; + } + } + elseif (isset($this->data['child']['']['rss'])) + { + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL; + if (isset($this->data['child']['']['rss'][0]['attribs']['']['version'])) + { + switch (trim($this->data['child']['']['rss'][0]['attribs']['']['version'])) + { + case '0.91': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091; + if (isset($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data'])) + { + switch (trim($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data'])) + { + case '0': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE; + break; + + case '24': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_USERLAND; + break; + } + } + break; + + case '0.92': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_092; + break; + + case '0.93': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_093; + break; + + case '0.94': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_094; + break; + + case '2.0': + $this->data['type'] &= SIMPLEPIE_TYPE_RSS_20; + break; + } + } + } + else + { + $this->data['type'] = SIMPLEPIE_TYPE_NONE; + } + } + return $this->data['type']; + } + + /** + * Returns the URL for the favicon of the feed's website. + * + * @todo Cache atom:icon + * @access public + * @since 1.0 + */ + function get_favicon() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif (($url = $this->get_link()) !== null && preg_match('/^http(s)?:\/\//i', $url)) + { + $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $url); + + if ($this->cache && $this->favicon_handler) + { + $favicon_filename = call_user_func($this->cache_name_function, $favicon); + $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $favicon_filename, 'spi'); + + if ($cache->load()) + { + return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + $file =& new $this->file_class($favicon, $this->timeout / 10, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen); + + if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300)) && strlen($file->body) > 0) + { + $sniffer = new $this->content_type_sniffer_class($file); + if (substr($sniffer->get_type(), 0, 6) === 'image/') + { + if ($cache->save(array('headers' => $file->headers, 'body' => $file->body))) + { + return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + trigger_error("$cache->name is not writeable", E_USER_WARNING); + return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI); + } + } + } + } + } + else + { + return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI); + } + } + return false; + } + + /** + * @todo If we have a perm redirect we should return the new URL + * @todo When we make the above change, let's support as well + * @todo Also, |atom:link|@rel=self + */ + function subscribe_url() + { + if ($this->feed_url !== null) + { + return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + return null; + } + } + + function subscribe_feed() + { + if ($this->feed_url !== null) + { + return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + return null; + } + } + + function subscribe_outlook() + { + if ($this->feed_url !== null) + { + return 'outlook' . $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + return null; + } + } + + function subscribe_podcast() + { + if ($this->feed_url !== null) + { + return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 3), SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + return null; + } + } + + function subscribe_itunes() + { + if ($this->feed_url !== null) + { + return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 4), SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + return null; + } + } + + /** + * Creates the subscribe_* methods' return data + * + * @access private + * @param string $feed_url String to prefix to the feed URL + * @param string $site_url String to prefix to the site URL (and + * suffix to the feed URL) + * @return mixed URL if feed exists, false otherwise + */ + function subscribe_service($feed_url, $site_url = null) + { + if ($this->subscribe_url()) + { + $return = $this->sanitize($feed_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->feed_url); + if ($site_url !== null && $this->get_link() !== null) + { + $return .= $this->sanitize($site_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_link()); + } + return $return; + } + else + { + return null; + } + } + + function subscribe_aol() + { + return $this->subscribe_service('http://feeds.my.aol.com/add.jsp?url='); + } + + function subscribe_bloglines() + { + return urldecode($this->subscribe_service('http://www.bloglines.com/sub/')); + } + + function subscribe_eskobo() + { + return $this->subscribe_service('http://www.eskobo.com/?AddToMyPage='); + } + + function subscribe_feedfeeds() + { + return $this->subscribe_service('http://www.feedfeeds.com/add?feed='); + } + + function subscribe_feedster() + { + return $this->subscribe_service('http://www.feedster.com/myfeedster.php?action=addrss&confirm=no&rssurl='); + } + + function subscribe_google() + { + return $this->subscribe_service('http://fusion.google.com/add?feedurl='); + } + + function subscribe_gritwire() + { + return $this->subscribe_service('http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl='); + } + + function subscribe_msn() + { + return $this->subscribe_service('http://my.msn.com/addtomymsn.armx?id=rss&ut=', '&ru='); + } + + function subscribe_netvibes() + { + return $this->subscribe_service('http://www.netvibes.com/subscribe.php?url='); + } + + function subscribe_newsburst() + { + return $this->subscribe_service('http://www.newsburst.com/Source/?add='); + } + + function subscribe_newsgator() + { + return $this->subscribe_service('http://www.newsgator.com/ngs/subscriber/subext.aspx?url='); + } + + function subscribe_odeo() + { + return $this->subscribe_service('http://www.odeo.com/listen/subscribe?feed='); + } + + function subscribe_podnova() + { + return $this->subscribe_service('http://www.podnova.com/index_your_podcasts.srf?action=add&url='); + } + + function subscribe_rojo() + { + return $this->subscribe_service('http://www.rojo.com/add-subscription?resource='); + } + + function subscribe_yahoo() + { + return $this->subscribe_service('http://add.my.yahoo.com/rss?url='); + } + + function get_feed_tags($namespace, $tag) + { + $type = $this->get_type(); + if ($type & SIMPLEPIE_TYPE_ATOM_10) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag])) + { + return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag]; + } + } + if ($type & SIMPLEPIE_TYPE_ATOM_03) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag])) + { + return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag]; + } + } + if ($type & SIMPLEPIE_TYPE_RSS_RDF) + { + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag])) + { + return $this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag]; + } + } + if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) + { + if (isset($this->data['child']['']['rss'][0]['child'][$namespace][$tag])) + { + return $this->data['child']['']['rss'][0]['child'][$namespace][$tag]; + } + } + return null; + } + + function get_channel_tags($namespace, $tag) + { + $type = $this->get_type(); + if ($type & SIMPLEPIE_TYPE_ATOM_ALL) + { + if ($return = $this->get_feed_tags($namespace, $tag)) + { + return $return; + } + } + if ($type & SIMPLEPIE_TYPE_RSS_10) + { + if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'channel')) + { + if (isset($channel[0]['child'][$namespace][$tag])) + { + return $channel[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_090) + { + if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'channel')) + { + if (isset($channel[0]['child'][$namespace][$tag])) + { + return $channel[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) + { + if ($channel = $this->get_feed_tags('', 'channel')) + { + if (isset($channel[0]['child'][$namespace][$tag])) + { + return $channel[0]['child'][$namespace][$tag]; + } + } + } + return null; + } + + function get_image_tags($namespace, $tag) + { + $type = $this->get_type(); + if ($type & SIMPLEPIE_TYPE_RSS_10) + { + if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'image')) + { + if (isset($image[0]['child'][$namespace][$tag])) + { + return $image[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_090) + { + if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'image')) + { + if (isset($image[0]['child'][$namespace][$tag])) + { + return $image[0]['child'][$namespace][$tag]; + } + } + } + if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) + { + if ($image = $this->get_channel_tags('', 'image')) + { + if (isset($image[0]['child'][$namespace][$tag])) + { + return $image[0]['child'][$namespace][$tag]; + } + } + } + return null; + } + + function get_base($element = array()) + { + if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base'])) + { + return $element['xml_base']; + } + elseif ($this->get_link() !== null) + { + return $this->get_link(); + } + else + { + return $this->subscribe_url(); + } + } + + function sanitize($data, $type, $base = '') + { + return $this->sanitize->sanitize($data, $type, $base); + } + + function get_title() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags('', 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + function get_categories() + { + $categories = array(); + + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['attribs']['']['term'])) + { + $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->category_class($term, $scheme, $label); + } + foreach ((array) $this->get_channel_tags('', 'category') as $category) + { + $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) + { + $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) + { + $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($categories)) + { + return SimplePie_Misc::array_unique($categories); + } + else + { + return null; + } + } + + function get_author($key = 0) + { + $authors = $this->get_authors(); + if (isset($authors[$key])) + { + return $authors[$key]; + } + else + { + return null; + } + } + + function get_authors() + { + $authors = array(); + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) + { + $name = null; + $uri = null; + $email = null; + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $authors[] =& new $this->author_class($name, $uri, $email); + } + } + if ($author = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) + { + $name = null; + $url = null; + $email = null; + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $authors[] =& new $this->author_class($name, $url, $email); + } + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) + { + $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) + { + $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) + { + $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($authors)) + { + return SimplePie_Misc::array_unique($authors); + } + else + { + return null; + } + } + + function get_contributor($key = 0) + { + $contributors = $this->get_contributors(); + if (isset($contributors[$key])) + { + return $contributors[$key]; + } + else + { + return null; + } + } + + function get_contributors() + { + $contributors = array(); + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) + { + $name = null; + $uri = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $contributors[] =& new $this->author_class($name, $uri, $email); + } + } + foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) + { + $name = null; + $url = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $contributors[] =& new $this->author_class($name, $url, $email); + } + } + + if (!empty($contributors)) + { + return SimplePie_Misc::array_unique($contributors); + } + else + { + return null; + } + } + + function get_link($key = 0, $rel = 'alternate') + { + $links = $this->get_links($rel); + if (isset($links[$key])) + { + return $links[$key]; + } + else + { + return null; + } + } + + /** + * Added for parity between the parent-level and the item/entry-level. + */ + function get_permalink() + { + return $this->get_link(0); + } + + function get_links($rel = 'alternate') + { + if (!isset($this->data['links'])) + { + $this->data['links'] = array(); + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + } + } + } + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + + } + } + } + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_channel_tags('', 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + + $keys = array_keys($this->data['links']); + foreach ($keys as $key) + { + if (SimplePie_Misc::is_isegment_nz_nc($key)) + { + if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); + $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; + } + else + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; + } + } + elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) + { + $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; + } + $this->data['links'][$key] = array_unique($this->data['links'][$key]); + } + } + + if (isset($this->data['links'][$rel])) + { + return $this->data['links'][$rel]; + } + else + { + return null; + } + } + + function get_description() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags('', 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + else + { + return null; + } + } + + function get_copyright() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags('', 'copyright')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_language() + { + if ($return = $this->get_channel_tags('', 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'])) + { + return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'])) + { + return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'])) + { + return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['headers']['content-language'])) + { + return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_latitude() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[1]; + } + else + { + return null; + } + } + + function get_longitude() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) + { + return (float) $return[0]['data']; + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[2]; + } + else + { + return null; + } + } + + function get_image_title() + { + if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags('', 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_image_url() + { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) + { + return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'url')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'url')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags('', 'url')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + else + { + return null; + } + } + + function get_image_link() + { + if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_image_tags('', 'link')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + else + { + return null; + } + } + + function get_image_width() + { + if ($return = $this->get_image_tags('', 'width')) + { + return round($return[0]['data']); + } + elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url')) + { + return 88.0; + } + else + { + return null; + } + } + + function get_image_height() + { + if ($return = $this->get_image_tags('', 'height')) + { + return round($return[0]['data']); + } + elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url')) + { + return 31.0; + } + else + { + return null; + } + } + + function get_item_quantity($max = 0) + { + $qty = count($this->get_items()); + if ($max == 0) + { + return $qty; + } + else + { + return ($qty > $max) ? $max : $qty; + } + } + + function get_item($key = 0) + { + $items = $this->get_items(); + if (isset($items[$key])) + { + return $items[$key]; + } + else + { + return null; + } + } + + function get_items($start = 0, $end = 0) + { + if (!empty($this->multifeed_objects)) + { + return SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit); + } + elseif (!isset($this->data['items'])) + { + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] =& new $this->item_class($this, $items[$key]); + } + } + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] =& new $this->item_class($this, $items[$key]); + } + } + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] =& new $this->item_class($this, $items[$key]); + } + } + if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] =& new $this->item_class($this, $items[$key]); + } + } + if ($items = $this->get_channel_tags('', 'item')) + { + $keys = array_keys($items); + foreach ($keys as $key) + { + $this->data['items'][] =& new $this->item_class($this, $items[$key]); + } + } + } + + if (!empty($this->data['items'])) + { + // If we want to order it by date, check if all items have a date, and then sort it + if ($this->order_by_date) + { + if (!isset($this->data['ordered_items'])) + { + $do_sort = true; + foreach ($this->data['items'] as $item) + { + if (!$item->get_date('U')) + { + $do_sort = false; + break; + } + } + $item = null; + $this->data['ordered_items'] = $this->data['items']; + if ($do_sort) + { + usort($this->data['ordered_items'], array(&$this, 'sort_items')); + } + } + $items = $this->data['ordered_items']; + } + else + { + $items = $this->data['items']; + } + + // Slice the data as desired + if ($end == 0) + { + return array_slice($items, $start); + } + else + { + return array_slice($items, $start, $end); + } + } + else + { + return array(); + } + } + + function sort_items($a, $b) + { + return $a->get_date('U') <= $b->get_date('U'); + } + + function merge_items($urls, $start = 0, $end = 0, $limit = 0) + { + if (is_array($urls) && sizeof($urls) > 0) + { + $items = array(); + foreach ($urls as $arg) + { + if (is_a($arg, 'SimplePie')) + { + $items = array_merge($items, $arg->get_items(0, $limit)); + } + else + { + trigger_error('Arguments must be SimplePie objects', E_USER_WARNING); + } + } + + $do_sort = true; + foreach ($items as $item) + { + if (!$item->get_date('U')) + { + $do_sort = false; + break; + } + } + $item = null; + if ($do_sort) + { + usort($items, array('SimplePie', 'sort_items')); + } + + if ($end == 0) + { + return array_slice($items, $start); + } + else + { + return array_slice($items, $start, $end); + } + } + else + { + trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING); + return array(); + } + } +} + +class SimplePie_Item +{ + var $feed; + var $data = array(); + + function SimplePie_Item($feed, $data) + { + $this->feed = $feed; + $this->data = $data; + } + + function __toString() + { + return md5(serialize($this->data)); + } + + /** + * Remove items that link back to this before destroying this object + */ + function __destruct() + { + unset($this->feed); + } + + function get_item_tags($namespace, $tag) + { + if (isset($this->data['child'][$namespace][$tag])) + { + return $this->data['child'][$namespace][$tag]; + } + else + { + return null; + } + } + + function get_base($element = array()) + { + return $this->feed->get_base($element); + } + + function sanitize($data, $type, $base = '') + { + return $this->feed->sanitize($data, $type, $base); + } + + function get_feed() + { + return $this->feed; + } + + function get_id($hash = false) + { + if (!$hash) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags('', 'guid')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (($return = $this->get_permalink()) !== null) + { + return $return; + } + elseif (($return = $this->get_title()) !== null) + { + return $return; + } + } + if ($this->get_permalink() !== null || $this->get_title() !== null) + { + return md5($this->get_permalink() . $this->get_title()); + } + else + { + return md5(serialize($this->data)); + } + } + + function get_title() + { + if (!isset($this->data['title'])) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags('', 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $this->data['title'] = null; + } + } + return $this->data['title']; + } + + function get_description($description_only = false) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags('', 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (!$description_only) + { + return $this->get_content(true); + } + else + { + return null; + } + } + + function get_content($content_only = false) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_content_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif (!$content_only) + { + return $this->get_description(true); + } + else + { + return null; + } + } + + function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + function get_categories() + { + $categories = array(); + + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['attribs']['']['term'])) + { + $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->feed->category_class($term, $scheme, $label); + } + foreach ((array) $this->get_item_tags('', 'category') as $category) + { + $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) + { + $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) + { + $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($categories)) + { + return SimplePie_Misc::array_unique($categories); + } + else + { + return null; + } + } + + function get_author($key = 0) + { + $authors = $this->get_authors(); + if (isset($authors[$key])) + { + return $authors[$key]; + } + else + { + return null; + } + } + + function get_contributor($key = 0) + { + $contributors = $this->get_contributors(); + if (isset($contributors[$key])) + { + return $contributors[$key]; + } + else + { + return null; + } + } + + function get_contributors() + { + $contributors = array(); + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) + { + $name = null; + $uri = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $contributors[] =& new $this->feed->author_class($name, $uri, $email); + } + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) + { + $name = null; + $url = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $contributors[] =& new $this->feed->author_class($name, $url, $email); + } + } + + if (!empty($contributors)) + { + return SimplePie_Misc::array_unique($contributors); + } + else + { + return null; + } + } + + /** + * @todo Atom inheritance (item author, source author, feed author) + */ + function get_authors() + { + $authors = array(); + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) + { + $name = null; + $uri = null; + $email = null; + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $authors[] =& new $this->feed->author_class($name, $uri, $email); + } + } + if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) + { + $name = null; + $url = null; + $email = null; + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $authors[] =& new $this->feed->author_class($name, $url, $email); + } + } + if ($author = $this->get_item_tags('', 'author')) + { + $authors[] =& new $this->feed->author_class(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) + { + $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) + { + $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) + { + $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($authors)) + { + return SimplePie_Misc::array_unique($authors); + } + elseif (($source = $this->get_source()) && ($authors = $source->get_authors())) + { + return $authors; + } + elseif ($authors = $this->feed->get_authors()) + { + return $authors; + } + else + { + return null; + } + } + + function get_copyright() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_date($date_format = 'j F Y, g:i a') + { + if (!isset($this->data['date'])) + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags('', 'pubDate')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date')) + { + $this->data['date']['raw'] = $return[0]['data']; + } + + if (!empty($this->data['date']['raw'])) + { + $parser = SimplePie_Parse_Date::get(); + $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']); + } + else + { + $this->data['date'] = null; + } + } + if ($this->data['date']) + { + $date_format = (string) $date_format; + switch ($date_format) + { + case '': + return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT); + + case 'U': + return $this->data['date']['parsed']; + + default: + return date($date_format, $this->data['date']['parsed']); + } + } + else + { + return null; + } + } + + function get_local_date($date_format = '%c') + { + if (!$date_format) + { + return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (($date = $this->get_date('U')) !== null) + { + return strftime($date_format, $date); + } + else + { + return null; + } + } + + function get_permalink() + { + $link = $this->get_link(); + $enclosure = $this->get_enclosure(0); + if ($link !== null) + { + return $link; + } + elseif ($enclosure !== null) + { + return $enclosure->get_link(); + } + else + { + return null; + } + } + + function get_link($key = 0, $rel = 'alternate') + { + $links = $this->get_links($rel); + if ($links[$key] !== null) + { + return $links[$key]; + } + else + { + return null; + } + } + + function get_links($rel = 'alternate') + { + if (!isset($this->data['links'])) + { + $this->data['links'] = array(); + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + + } + } + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + } + } + if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_item_tags('', 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_item_tags('', 'guid')) + { + if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) == 'true') + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + } + + $keys = array_keys($this->data['links']); + foreach ($keys as $key) + { + if (SimplePie_Misc::is_isegment_nz_nc($key)) + { + if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); + $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; + } + else + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; + } + } + elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) + { + $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; + } + $this->data['links'][$key] = array_unique($this->data['links'][$key]); + } + } + if (isset($this->data['links'][$rel])) + { + return $this->data['links'][$rel]; + } + else + { + return null; + } + } + + /** + * @todo Add ability to prefer one type of content over another (in a media group). + */ + function get_enclosure($key = 0, $prefer = null) + { + $enclosures = $this->get_enclosures(); + if (isset($enclosures[$key])) + { + return $enclosures[$key]; + } + else + { + return null; + } + } + + /** + * Grabs all available enclosures (podcasts, etc.) + * + * Supports the RSS tag, as well as Media RSS and iTunes RSS. + * + * At this point, we're pretty much assuming that all enclosures for an item are the same content. Anything else is too complicated to properly support. + * + * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4). + * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists). + */ + function get_enclosures() + { + if (!isset($this->data['enclosures'])) + { + $this->data['enclosures'] = array(); + + // Elements + $captions_parent = null; + $categories_parent = null; + $copyrights_parent = null; + $credits_parent = null; + $description_parent = null; + $duration_parent = null; + $hashes_parent = null; + $keywords_parent = null; + $player_parent = null; + $ratings_parent = null; + $restrictions_parent = null; + $thumbnails_parent = null; + $title_parent = null; + + // Let's do the channel and item-level ones first, and just re-use them if we need to. + $parent = $this->get_feed(); + + // CAPTIONS + if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) + { + foreach ($captions as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + } + } + elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text')) + { + foreach ($captions as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + } + } + if (is_array($captions_parent)) + { + $captions_parent = array_values(SimplePie_Misc::array_unique($captions_parent)); + } + + // CATEGORIES + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label); + } + foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label); + } + foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category) + { + $term = null; + $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd'; + $label = null; + if (isset($category['attribs']['']['text'])) + { + $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label); + + if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'])) + { + foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory) + { + if (isset($subcategory['attribs']['']['text'])) + { + $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label); + } + } + } + if (is_array($categories_parent)) + { + $categories_parent = array_values(SimplePie_Misc::array_unique($categories_parent)); + } + + // COPYRIGHT + if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) + { + $copyright_url = null; + $copyright_label = null; + if (isset($copyright[0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($copyright[0]['data'])) + { + $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label); + } + elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright')) + { + $copyright_url = null; + $copyright_label = null; + if (isset($copyright[0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($copyright[0]['data'])) + { + $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label); + } + + // CREDITS + if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) + { + foreach ($credits as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); + } + } + elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit')) + { + foreach ($credits as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); + } + } + if (is_array($credits_parent)) + { + $credits_parent = array_values(SimplePie_Misc::array_unique($credits_parent)); + } + + // DESCRIPTION + if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) + { + if (isset($description_parent[0]['data'])) + { + $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description')) + { + if (isset($description_parent[0]['data'])) + { + $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + + // DURATION + if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration')) + { + $seconds = null; + $minutes = null; + $hours = null; + if (isset($duration_parent[0]['data'])) + { + $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + if (sizeof($temp) > 0) + { + (int) $seconds = array_pop($temp); + } + if (sizeof($temp) > 0) + { + (int) $minutes = array_pop($temp); + $seconds += $minutes * 60; + } + if (sizeof($temp) > 0) + { + (int) $hours = array_pop($temp); + $seconds += $hours * 3600; + } + unset($temp); + $duration_parent = $seconds; + } + } + + // HASHES + if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) + { + foreach ($hashes_iterator as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes_parent[] = $algo.':'.$value; + } + } + elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash')) + { + foreach ($hashes_iterator as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes_parent[] = $algo.':'.$value; + } + } + if (is_array($hashes_parent)) + { + $hashes_parent = array_values(SimplePie_Misc::array_unique($hashes_parent)); + } + + // KEYWORDS + if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords')) + { + if (isset($keywords[0]['data'])) + { + $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords_parent[] = trim($word); + } + } + unset($temp); + } + if (is_array($keywords_parent)) + { + $keywords_parent = array_values(SimplePie_Misc::array_unique($keywords_parent)); + } + + // PLAYER + if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) + { + if (isset($player_parent[0]['attribs']['']['url'])) + { + $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player')) + { + if (isset($player_parent[0]['attribs']['']['url'])) + { + $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + + // RATINGS + if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) + { + foreach ($ratings as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + } + elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) + { + foreach ($ratings as $rating) + { + $rating_scheme = 'urn:itunes'; + $rating_value = null; + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + } + elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating')) + { + foreach ($ratings as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + } + elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit')) + { + foreach ($ratings as $rating) + { + $rating_scheme = 'urn:itunes'; + $rating_value = null; + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + } + if (is_array($ratings_parent)) + { + $ratings_parent = array_values(SimplePie_Misc::array_unique($ratings_parent)); + } + + // RESTRICTIONS + if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + } + elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = 'allow'; + $restriction_type = null; + $restriction_value = 'itunes'; + if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes') + { + $restriction_relationship = 'deny'; + } + $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + } + elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + } + elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block')) + { + foreach ($restrictions as $restriction) + { + $restriction_relationship = 'allow'; + $restriction_type = null; + $restriction_value = 'itunes'; + if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes') + { + $restriction_relationship = 'deny'; + } + $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + } + if (is_array($restrictions_parent)) + { + $restrictions_parent = array_values(SimplePie_Misc::array_unique($restrictions_parent)); + } + + // THUMBNAILS + if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) + { + foreach ($thumbnails as $thumbnail) + { + if (isset($thumbnail['attribs']['']['url'])) + { + $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + } + elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail')) + { + foreach ($thumbnails as $thumbnail) + { + if (isset($thumbnail['attribs']['']['url'])) + { + $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + } + } + + // TITLES + if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) + { + if (isset($title_parent[0]['data'])) + { + $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title')) + { + if (isset($title_parent[0]['data'])) + { + $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + } + + // Clear the memory + unset($parent); + + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + // Elements + $captions = null; + $categories = null; + $copyrights = null; + $credits = null; + $description = null; + $hashes = null; + $keywords = null; + $player = null; + $ratings = null; + $restrictions = null; + $thumbnails = null; + $title = null; + + // If we have media:group tags, loop through them. + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group) + { + // If we have media:content tags, loop through them. + foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) + { + if (isset($content['attribs']['']['url'])) + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + // Elements + $captions = null; + $categories = null; + $copyrights = null; + $credits = null; + $description = null; + $hashes = null; + $keywords = null; + $player = null; + $ratings = null; + $restrictions = null; + $thumbnails = null; + $title = null; + + // Start checking the attributes of media:content + if (isset($content['attribs']['']['bitrate'])) + { + $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['channels'])) + { + $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['duration'])) + { + $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $duration = $duration_parent; + } + if (isset($content['attribs']['']['expression'])) + { + $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['framerate'])) + { + $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['height'])) + { + $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['lang'])) + { + $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['fileSize'])) + { + $length = ceil($content['attribs']['']['fileSize']); + } + if (isset($content['attribs']['']['medium'])) + { + $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['samplingrate'])) + { + $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['type'])) + { + $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['width'])) + { + $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + + // Checking the other optional media: elements. Priority: media:content, media:group, item, channel + + // CAPTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + } + if (is_array($captions)) + { + $captions = array_values(SimplePie_Misc::array_unique($captions)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + } + if (is_array($captions)) + { + $captions = array_values(SimplePie_Misc::array_unique($captions)); + } + } + else + { + $captions = $captions_parent; + } + + // CATEGORIES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) + { + foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->feed->category_class($term, $scheme, $label); + } + } + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) + { + foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->feed->category_class($term, $scheme, $label); + } + } + if (is_array($categories) && is_array($categories_parent)) + { + $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent))); + } + elseif (is_array($categories)) + { + $categories = array_values(SimplePie_Misc::array_unique($categories)); + } + elseif (is_array($categories_parent)) + { + $categories = array_values(SimplePie_Misc::array_unique($categories_parent)); + } + + // COPYRIGHTS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) + { + $copyright_url = null; + $copyright_label = null; + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + { + $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) + { + $copyright_url = null; + $copyright_label = null; + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + { + $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label); + } + else + { + $copyrights = $copyrights_parent; + } + + // CREDITS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); + } + if (is_array($credits)) + { + $credits = array_values(SimplePie_Misc::array_unique($credits)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); + } + if (is_array($credits)) + { + $credits = array_values(SimplePie_Misc::array_unique($credits)); + } + } + else + { + $credits = $credits_parent; + } + + // DESCRIPTION + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) + { + $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) + { + $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $description = $description_parent; + } + + // HASHES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes[] = $algo.':'.$value; + } + if (is_array($hashes)) + { + $hashes = array_values(SimplePie_Misc::array_unique($hashes)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes[] = $algo.':'.$value; + } + if (is_array($hashes)) + { + $hashes = array_values(SimplePie_Misc::array_unique($hashes)); + } + } + else + { + $hashes = $hashes_parent; + } + + // KEYWORDS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) + { + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) + { + $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords[] = trim($word); + } + unset($temp); + } + if (is_array($keywords)) + { + $keywords = array_values(SimplePie_Misc::array_unique($keywords)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) + { + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) + { + $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords[] = trim($word); + } + unset($temp); + } + if (is_array($keywords)) + { + $keywords = array_values(SimplePie_Misc::array_unique($keywords)); + } + } + else + { + $keywords = $keywords_parent; + } + + // PLAYER + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) + { + $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) + { + $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + $player = $player_parent; + } + + // RATINGS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + if (is_array($ratings)) + { + $ratings = array_values(SimplePie_Misc::array_unique($ratings)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + if (is_array($ratings)) + { + $ratings = array_values(SimplePie_Misc::array_unique($ratings)); + } + } + else + { + $ratings = $ratings_parent; + } + + // RESTRICTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + if (is_array($restrictions)) + { + $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + if (is_array($restrictions)) + { + $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); + } + } + else + { + $restrictions = $restrictions_parent; + } + + // THUMBNAILS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) + { + $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + if (is_array($thumbnails)) + { + $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); + } + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) + { + $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + if (is_array($thumbnails)) + { + $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); + } + } + else + { + $thumbnails = $thumbnails_parent; + } + + // TITLES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) + { + $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) + { + $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $title = $title_parent; + } + + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width); + } + } + } + + // If we have standalone media:content tags, loop through them. + if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'])) + { + foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) + { + if (isset($content['attribs']['']['url'])) + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + // Elements + $captions = null; + $categories = null; + $copyrights = null; + $credits = null; + $description = null; + $hashes = null; + $keywords = null; + $player = null; + $ratings = null; + $restrictions = null; + $thumbnails = null; + $title = null; + + // Start checking the attributes of media:content + if (isset($content['attribs']['']['bitrate'])) + { + $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['channels'])) + { + $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['duration'])) + { + $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $duration = $duration_parent; + } + if (isset($content['attribs']['']['expression'])) + { + $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['framerate'])) + { + $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['height'])) + { + $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['lang'])) + { + $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['fileSize'])) + { + $length = ceil($content['attribs']['']['fileSize']); + } + if (isset($content['attribs']['']['medium'])) + { + $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['samplingrate'])) + { + $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['type'])) + { + $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['width'])) + { + $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + + // Checking the other optional media: elements. Priority: media:content, media:group, item, channel + + // CAPTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) + { + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + } + if (is_array($captions)) + { + $captions = array_values(SimplePie_Misc::array_unique($captions)); + } + } + else + { + $captions = $captions_parent; + } + + // CATEGORIES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) + { + foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->feed->category_class($term, $scheme, $label); + } + } + if (is_array($categories) && is_array($categories_parent)) + { + $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent))); + } + elseif (is_array($categories)) + { + $categories = array_values(SimplePie_Misc::array_unique($categories)); + } + elseif (is_array($categories_parent)) + { + $categories = array_values(SimplePie_Misc::array_unique($categories_parent)); + } + else + { + $categories = null; + } + + // COPYRIGHTS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) + { + $copyright_url = null; + $copyright_label = null; + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) + { + $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + { + $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label); + } + else + { + $copyrights = $copyrights_parent; + } + + // CREDITS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) + { + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); + } + if (is_array($credits)) + { + $credits = array_values(SimplePie_Misc::array_unique($credits)); + } + } + else + { + $credits = $credits_parent; + } + + // DESCRIPTION + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) + { + $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $description = $description_parent; + } + + // HASHES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes[] = $algo.':'.$value; + } + if (is_array($hashes)) + { + $hashes = array_values(SimplePie_Misc::array_unique($hashes)); + } + } + else + { + $hashes = $hashes_parent; + } + + // KEYWORDS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) + { + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) + { + $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords[] = trim($word); + } + unset($temp); + } + if (is_array($keywords)) + { + $keywords = array_values(SimplePie_Misc::array_unique($keywords)); + } + } + else + { + $keywords = $keywords_parent; + } + + // PLAYER + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) + { + $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + $player = $player_parent; + } + + // RATINGS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) + { + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + if (is_array($ratings)) + { + $ratings = array_values(SimplePie_Misc::array_unique($ratings)); + } + } + else + { + $ratings = $ratings_parent; + } + + // RESTRICTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) + { + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + if (is_array($restrictions)) + { + $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); + } + } + else + { + $restrictions = $restrictions_parent; + } + + // THUMBNAILS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) + { + $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + if (is_array($thumbnails)) + { + $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); + } + } + else + { + $thumbnails = $thumbnails_parent; + } + + // TITLES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) + { + $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $title = $title_parent; + } + + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width); + } + } + } + + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) + { + if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure') + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + if (isset($link['attribs']['']['type'])) + { + $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($link['attribs']['']['length'])) + { + $length = ceil($link['attribs']['']['length']); + } + + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); + } + } + + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) + { + if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure') + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + if (isset($link['attribs']['']['type'])) + { + $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($link['attribs']['']['length'])) + { + $length = ceil($link['attribs']['']['length']); + } + + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); + } + } + + if ($enclosure = $this->get_item_tags('', 'enclosure')) + { + if (isset($enclosure[0]['attribs']['']['url'])) + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0])); + if (isset($enclosure[0]['attribs']['']['type'])) + { + $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($enclosure[0]['attribs']['']['length'])) + { + $length = ceil($enclosure[0]['attribs']['']['length']); + } + + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); + } + } + + if (sizeof($this->data['enclosures']) == 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width)) + { + // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width); + } + + $this->data['enclosures'] = array_values(SimplePie_Misc::array_unique($this->data['enclosures'])); + } + if (!empty($this->data['enclosures'])) + { + return $this->data['enclosures']; + } + else + { + return null; + } + } + + function get_latitude() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[1]; + } + else + { + return null; + } + } + + function get_longitude() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) + { + return (float) $return[0]['data']; + } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[2]; + } + else + { + return null; + } + } + + function get_source() + { + if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source')) + { + return new $this->feed->source_class($this, $return[0]); + } + else + { + return null; + } + } + + /** + * Creates the add_to_* methods' return data + * + * @access private + * @param string $item_url String to prefix to the item permalink + * @param string $title_url String to prefix to the item title + * (and suffix to the item permalink) + * @return mixed URL if feed exists, false otherwise + */ + function add_to_service($item_url, $title_url = null, $summary_url = null) + { + if ($this->get_permalink() !== null) + { + $return = $this->sanitize($item_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_permalink()); + if ($title_url !== null && $this->get_title() !== null) + { + $return .= $this->sanitize($title_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_title()); + } + if ($summary_url !== null && $this->get_description() !== null) + { + $return .= $this->sanitize($summary_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_description()); + } + return $return; + } + else + { + return null; + } + } + + function add_to_blinklist() + { + return $this->add_to_service('http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=&Url=', '&Title='); + } + + function add_to_blogmarks() + { + return $this->add_to_service('http://blogmarks.net/my/new.php?mini=1&simple=1&url=', '&title='); + } + + function add_to_delicious() + { + return $this->add_to_service('http://del.icio.us/post/?v=4&url=', '&title='); + } + + function add_to_digg() + { + return $this->add_to_service('http://digg.com/submit?url=', '&title=', '&bodytext='); + } + + function add_to_furl() + { + return $this->add_to_service('http://www.furl.net/storeIt.jsp?u=', '&t='); + } + + function add_to_magnolia() + { + return $this->add_to_service('http://ma.gnolia.com/bookmarklet/add?url=', '&title='); + } + + function add_to_myweb20() + { + return $this->add_to_service('http://myweb2.search.yahoo.com/myresults/bookmarklet?u=', '&t='); + } + + function add_to_newsvine() + { + return $this->add_to_service('http://www.newsvine.com/_wine/save?u=', '&h='); + } + + function add_to_reddit() + { + return $this->add_to_service('http://reddit.com/submit?url=', '&title='); + } + + function add_to_segnalo() + { + return $this->add_to_service('http://segnalo.com/post.html.php?url=', '&title='); + } + + function add_to_simpy() + { + return $this->add_to_service('http://www.simpy.com/simpy/LinkAdd.do?href=', '&title='); + } + + function add_to_spurl() + { + return $this->add_to_service('http://www.spurl.net/spurl.php?v=3&url=', '&title='); + } + + function add_to_wists() + { + return $this->add_to_service('http://wists.com/r.php?c=&r=', '&title='); + } + + function search_technorati() + { + return $this->add_to_service('http://www.technorati.com/search/'); + } +} + +class SimplePie_Source +{ + var $item; + var $data = array(); + + function SimplePie_Source($item, $data) + { + $this->item = $item; + $this->data = $data; + } + + function __toString() + { + return md5(serialize($this->data)); + } + + /** + * Remove items that link back to this before destroying this object + */ + function __destruct() + { + unset($this->item); + } + + function get_source_tags($namespace, $tag) + { + if (isset($this->data['child'][$namespace][$tag])) + { + return $this->data['child'][$namespace][$tag]; + } + else + { + return null; + } + } + + function get_base($element = array()) + { + return $this->item->get_base($element); + } + + function sanitize($data, $type, $base = '') + { + return $this->item->sanitize($data, $type, $base); + } + + function get_item() + { + return $this->item; + } + + function get_title() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags('', 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + function get_categories() + { + $categories = array(); + + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) + { + $term = null; + $scheme = null; + $label = null; + if (isset($category['attribs']['']['term'])) + { + $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->item->feed->category_class($term, $scheme, $label); + } + foreach ((array) $this->get_source_tags('', 'category') as $category) + { + $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) + { + $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) + { + $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($categories)) + { + return SimplePie_Misc::array_unique($categories); + } + else + { + return null; + } + } + + function get_author($key = 0) + { + $authors = $this->get_authors(); + if (isset($authors[$key])) + { + return $authors[$key]; + } + else + { + return null; + } + } + + function get_authors() + { + $authors = array(); + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author) + { + $name = null; + $uri = null; + $email = null; + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $authors[] =& new $this->item->feed->author_class($name, $uri, $email); + } + } + if ($author = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author')) + { + $name = null; + $url = null; + $email = null; + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $authors[] =& new $this->item->feed->author_class($name, $url, $email); + } + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author) + { + $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author) + { + $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author) + { + $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); + } + + if (!empty($authors)) + { + return SimplePie_Misc::array_unique($authors); + } + else + { + return null; + } + } + + function get_contributor($key = 0) + { + $contributors = $this->get_contributors(); + if (isset($contributors[$key])) + { + return $contributors[$key]; + } + else + { + return null; + } + } + + function get_contributors() + { + $contributors = array(); + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor) + { + $name = null; + $uri = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'])) + { + $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $uri !== null) + { + $contributors[] =& new $this->item->feed->author_class($name, $uri, $email); + } + } + foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor) + { + $name = null; + $url = null; + $email = null; + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'])) + { + $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'])) + { + $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0])); + } + if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'])) + { + $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if ($name !== null || $email !== null || $url !== null) + { + $contributors[] =& new $this->item->feed->author_class($name, $url, $email); + } + } + + if (!empty($contributors)) + { + return SimplePie_Misc::array_unique($contributors); + } + else + { + return null; + } + } + + function get_link($key = 0, $rel = 'alternate') + { + $links = $this->get_links($rel); + if (isset($links[$key])) + { + return $links[$key]; + } + else + { + return null; + } + } + + /** + * Added for parity between the parent-level and the item/entry-level. + */ + function get_permalink() + { + return $this->get_link(0); + } + + function get_links($rel = 'alternate') + { + if (!isset($this->data['links'])) + { + $this->data['links'] = array(); + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + } + } + } + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link')) + { + foreach ($links as $link) + { + if (isset($link['attribs']['']['href'])) + { + $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate'; + $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link)); + + } + } + } + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + if ($links = $this->get_source_tags('', 'link')) + { + $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); + } + + $keys = array_keys($this->data['links']); + foreach ($keys as $key) + { + if (SimplePie_Misc::is_isegment_nz_nc($key)) + { + if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key])) + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]); + $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]; + } + else + { + $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key]; + } + } + elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) + { + $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; + } + $this->data['links'][$key] = array_unique($this->data['links'][$key]); + } + } + + if (isset($this->data['links'][$rel])) + { + return $this->data['links'][$rel]; + } + else + { + return null; + } + } + + function get_description() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags('', 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); + } + else + { + return null; + } + } + + function get_copyright() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright')) + { + return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags('', 'copyright')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_language() + { + if ($return = $this->get_source_tags('', 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + elseif (isset($this->data['xml_lang'])) + { + return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + return null; + } + } + + function get_latitude() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[1]; + } + else + { + return null; + } + } + + function get_longitude() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long')) + { + return (float) $return[0]['data']; + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon')) + { + return (float) $return[0]['data']; + } + elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + { + return (float) $match[2]; + } + else + { + return null; + } + } + + function get_image_url() + { + if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image')) + { + return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); + } + else + { + return null; + } + } +} + +class SimplePie_Author +{ + var $name; + var $link; + var $email; + + // Constructor, used to input the data + function SimplePie_Author($name = null, $link = null, $email = null) + { + $this->name = $name; + $this->link = $link; + $this->email = $email; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_name() + { + if ($this->name !== null) + { + return $this->name; + } + else + { + return null; + } + } + + function get_link() + { + if ($this->link !== null) + { + return $this->link; + } + else + { + return null; + } + } + + function get_email() + { + if ($this->email !== null) + { + return $this->email; + } + else + { + return null; + } + } +} + +class SimplePie_Category +{ + var $term; + var $scheme; + var $label; + + // Constructor, used to input the data + function SimplePie_Category($term = null, $scheme = null, $label = null) + { + $this->term = $term; + $this->scheme = $scheme; + $this->label = $label; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_term() + { + if ($this->term !== null) + { + return $this->term; + } + else + { + return null; + } + } + + function get_scheme() + { + if ($this->scheme !== null) + { + return $this->scheme; + } + else + { + return null; + } + } + + function get_label() + { + if ($this->label !== null) + { + return $this->label; + } + else + { + return $this->get_term(); + } + } +} + +class SimplePie_Enclosure +{ + var $bitrate; + var $captions; + var $categories; + var $channels; + var $copyright; + var $credits; + var $description; + var $duration; + var $expression; + var $framerate; + var $handler; + var $hashes; + var $height; + var $javascript; + var $keywords; + var $lang; + var $length; + var $link; + var $medium; + var $player; + var $ratings; + var $restrictions; + var $samplingrate; + var $thumbnails; + var $title; + var $type; + var $width; + + // Constructor, used to input the data + function SimplePie_Enclosure($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null) + { + $this->bitrate = $bitrate; + $this->captions = $captions; + $this->categories = $categories; + $this->channels = $channels; + $this->copyright = $copyright; + $this->credits = $credits; + $this->description = $description; + $this->duration = $duration; + $this->expression = $expression; + $this->framerate = $framerate; + $this->hashes = $hashes; + $this->height = $height; + $this->javascript = $javascript; + $this->keywords = $keywords; + $this->lang = $lang; + $this->length = $length; + $this->link = $link; + $this->medium = $medium; + $this->player = $player; + $this->ratings = $ratings; + $this->restrictions = $restrictions; + $this->samplingrate = $samplingrate; + $this->thumbnails = $thumbnails; + $this->title = $title; + $this->type = $type; + $this->width = $width; + if (class_exists('idna_convert')) + { + $idn =& new idna_convert; + $parsed = SimplePie_Misc::parse_url($link); + $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); + } + $this->handler = $this->get_handler(); // Needs to load last + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_bitrate() + { + if ($this->bitrate !== null) + { + return $this->bitrate; + } + else + { + return null; + } + } + + function get_caption($key = 0) + { + $captions = $this->get_captions(); + if (isset($captions[$key])) + { + return $captions[$key]; + } + else + { + return null; + } + } + + function get_captions() + { + if ($this->captions !== null) + { + return $this->captions; + } + else + { + return null; + } + } + + function get_category($key = 0) + { + $categories = $this->get_categories(); + if (isset($categories[$key])) + { + return $categories[$key]; + } + else + { + return null; + } + } + + function get_categories() + { + if ($this->categories !== null) + { + return $this->categories; + } + else + { + return null; + } + } + + function get_channels() + { + if ($this->channels !== null) + { + return $this->channels; + } + else + { + return null; + } + } + + function get_copyright() + { + if ($this->copyright !== null) + { + return $this->copyright; + } + else + { + return null; + } + } + + function get_credit($key = 0) + { + $credits = $this->get_credits(); + if (isset($credits[$key])) + { + return $credits[$key]; + } + else + { + return null; + } + } + + function get_credits() + { + if ($this->credits !== null) + { + return $this->credits; + } + else + { + return null; + } + } + + function get_description() + { + if ($this->description !== null) + { + return $this->description; + } + else + { + return null; + } + } + + function get_duration($convert = false) + { + if ($this->duration !== null) + { + if ($convert) + { + $time = SimplePie_Misc::time_hms($this->duration); + return $time; + } + else + { + return $this->duration; + } + } + else + { + return null; + } + } + + function get_expression() + { + if ($this->expression !== null) + { + return $this->expression; + } + else + { + return 'full'; + } + } + + function get_extension() + { + if ($this->link !== null) + { + $url = SimplePie_Misc::parse_url($this->link); + if ($url['path'] !== '') + { + return pathinfo($url['path'], PATHINFO_EXTENSION); + } + } + return null; + } + + function get_framerate() + { + if ($this->framerate !== null) + { + return $this->framerate; + } + else + { + return null; + } + } + + function get_handler() + { + return $this->get_real_type(true); + } + + function get_hash($key = 0) + { + $hashes = $this->get_hashes(); + if (isset($hashes[$key])) + { + return $hashes[$key]; + } + else + { + return null; + } + } + + function get_hashes() + { + if ($this->hashes !== null) + { + return $this->hashes; + } + else + { + return null; + } + } + + function get_height() + { + if ($this->height !== null) + { + return $this->height; + } + else + { + return null; + } + } + + function get_language() + { + if ($this->lang !== null) + { + return $this->lang; + } + else + { + return null; + } + } + + function get_keyword($key = 0) + { + $keywords = $this->get_keywords(); + if (isset($keywords[$key])) + { + return $keywords[$key]; + } + else + { + return null; + } + } + + function get_keywords() + { + if ($this->keywords !== null) + { + return $this->keywords; + } + else + { + return null; + } + } + + function get_length() + { + if ($this->length !== null) + { + return $this->length; + } + else + { + return null; + } + } + + function get_link() + { + if ($this->link !== null) + { + return urldecode($this->link); + } + else + { + return null; + } + } + + function get_medium() + { + if ($this->medium !== null) + { + return $this->medium; + } + else + { + return null; + } + } + + function get_player() + { + if ($this->player !== null) + { + return $this->player; + } + else + { + return null; + } + } + + function get_rating($key = 0) + { + $ratings = $this->get_ratings(); + if (isset($ratings[$key])) + { + return $ratings[$key]; + } + else + { + return null; + } + } + + function get_ratings() + { + if ($this->ratings !== null) + { + return $this->ratings; + } + else + { + return null; + } + } + + function get_restriction($key = 0) + { + $restrictions = $this->get_restrictions(); + if (isset($restrictions[$key])) + { + return $restrictions[$key]; + } + else + { + return null; + } + } + + function get_restrictions() + { + if ($this->restrictions !== null) + { + return $this->restrictions; + } + else + { + return null; + } + } + + function get_sampling_rate() + { + if ($this->samplingrate !== null) + { + return $this->samplingrate; + } + else + { + return null; + } + } + + function get_size() + { + $length = $this->get_length(); + if ($length !== null) + { + return round($length/1048576, 2); + } + else + { + return null; + } + } + + function get_thumbnail($key = 0) + { + $thumbnails = $this->get_thumbnails(); + if (isset($thumbnails[$key])) + { + return $thumbnails[$key]; + } + else + { + return null; + } + } + + function get_thumbnails() + { + if ($this->thumbnails !== null) + { + return $this->thumbnails; + } + else + { + return null; + } + } + + function get_title() + { + if ($this->title !== null) + { + return $this->title; + } + else + { + return null; + } + } + + function get_type() + { + if ($this->type !== null) + { + return $this->type; + } + else + { + return null; + } + } + + function get_width() + { + if ($this->width !== null) + { + return $this->width; + } + else + { + return null; + } + } + + function native_embed($options='') + { + return $this->embed($options, true); + } + + /** + * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'. + */ + function embed($options = '', $native = false) + { + // Set up defaults + $audio = ''; + $video = ''; + $alt = ''; + $altclass = ''; + $loop = 'false'; + $width = 'auto'; + $height = 'auto'; + $bgcolor = '#ffffff'; + $mediaplayer = ''; + $widescreen = false; + $handler = $this->get_handler(); + $type = $this->get_real_type(); + + // Process options and reassign values as necessary + if (is_array($options)) + { + extract($options); + } + else + { + $options = explode(',', $options); + foreach($options as $option) + { + $opt = explode(':', $option, 2); + if (isset($opt[0], $opt[1])) + { + $opt[0] = trim($opt[0]); + $opt[1] = trim($opt[1]); + switch ($opt[0]) + { + case 'audio': + $audio = $opt[1]; + break; + + case 'video': + $video = $opt[1]; + break; + + case 'alt': + $alt = $opt[1]; + break; + + case 'altclass': + $altclass = $opt[1]; + break; + + case 'loop': + $loop = $opt[1]; + break; + + case 'width': + $width = $opt[1]; + break; + + case 'height': + $height = $opt[1]; + break; + + case 'bgcolor': + $bgcolor = $opt[1]; + break; + + case 'mediaplayer': + $mediaplayer = $opt[1]; + break; + + case 'widescreen': + $widescreen = $opt[1]; + break; + } + } + } + } + + $mime = explode('/', $type, 2); + $mime = $mime[0]; + + // Process values for 'auto' + if ($width == 'auto') + { + if ($mime == 'video') + { + if ($height == 'auto') + { + $width = 480; + } + elseif ($widescreen) + { + $width = round((intval($height)/9)*16); + } + else + { + $width = round((intval($height)/3)*4); + } + } + else + { + $width = '100%'; + } + } + + if ($height == 'auto') + { + if ($mime == 'audio') + { + $height = 0; + } + elseif ($mime == 'video') + { + if ($width == 'auto') + { + if ($widescreen) + { + $height = 270; + } + else + { + $height = 360; + } + } + elseif ($widescreen) + { + $height = round((intval($width)/16)*9); + } + else + { + $height = round((intval($width)/4)*3); + } + } + else + { + $height = 376; + } + } + elseif ($mime == 'audio') + { + $height = 0; + } + + // Set proper placeholder value + if ($mime == 'audio') + { + $placeholder = $audio; + } + elseif ($mime == 'video') + { + $placeholder = $video; + } + + $embed = ''; + + // Make sure the JS library is included + if (!$native) + { + static $javascript_outputted = null; + if (!$javascript_outputted && $this->javascript) + { + $embed .= ''; + $javascript_outputted = true; + } + } + + // Odeo Feed MP3's + if ($handler == 'odeo') + { + if ($native) + { + $embed .= ''; + } + else + { + $embed .= ''; + } + } + + // Flash + elseif ($handler == 'flash') + { + if ($native) + { + $embed .= "get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\">"; + } + else + { + $embed .= ""; + } + } + + // Flash Media Player file types. + // Preferred handler for MP3 file types. + elseif ($handler == 'fmedia' || ($handler == 'mp3' && $mediaplayer != '')) + { + $height += 20; + if ($native) + { + $embed .= "get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\">"; + } + else + { + $embed .= ""; + } + } + + // QuickTime 7 file types. Need to test with QuickTime 6. + // Only handle MP3's if the Flash Media Player is not present. + elseif ($handler == 'quicktime' || ($handler == 'mp3' && $mediaplayer == '')) + { + $height += 16; + if ($native) + { + if ($placeholder != ""){ + $embed .= "get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\">"; + } + else { + $embed .= "get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\">"; + } + } + else + { + $embed .= ""; + } + } + + // Windows Media + elseif ($handler == 'wmedia') + { + $height += 45; + if ($native) + { + $embed .= "get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\">"; + } + else + { + $embed .= ""; + } + } + + // Everything else + else $embed .= '' . $alt . ''; + + return $embed; + } + + function get_real_type($find_handler = false) + { + // If it's Odeo, let's get it out of the way. + if (substr(strtolower($this->get_link()), 0, 15) == 'http://odeo.com') + { + return 'odeo'; + } + + // Mime-types by handler. + $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash + $types_fmedia = array('video/flv', 'video/x-flv','flv-application/octet-stream'); // Flash Media Player + $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime + $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media + $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3 + + if ($this->get_type() !== null) + { + $type = strtolower($this->type); + } + else + { + $type = null; + } + + // If we encounter an unsupported mime-type, check the file extension and guess intelligently. + if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3))) + { + switch (strtolower($this->get_extension())) + { + // Audio mime-types + case 'aac': + case 'adts': + $type = 'audio/acc'; + break; + + case 'aif': + case 'aifc': + case 'aiff': + case 'cdda': + $type = 'audio/aiff'; + break; + + case 'bwf': + $type = 'audio/wav'; + break; + + case 'kar': + case 'mid': + case 'midi': + case 'smf': + $type = 'audio/midi'; + break; + + case 'm4a': + $type = 'audio/x-m4a'; + break; + + case 'mp3': + case 'swa': + $type = 'audio/mp3'; + break; + + case 'wav': + $type = 'audio/wav'; + break; + + case 'wax': + $type = 'audio/x-ms-wax'; + break; + + case 'wma': + $type = 'audio/x-ms-wma'; + break; + + // Video mime-types + case '3gp': + case '3gpp': + $type = 'video/3gpp'; + break; + + case '3g2': + case '3gp2': + $type = 'video/3gpp2'; + break; + + case 'asf': + $type = 'video/x-ms-asf'; + break; + + case 'flv': + $type = 'video/x-flv'; + break; + + case 'm1a': + case 'm1s': + case 'm1v': + case 'm15': + case 'm75': + case 'mp2': + case 'mpa': + case 'mpeg': + case 'mpg': + case 'mpm': + case 'mpv': + $type = 'video/mpeg'; + break; + + case 'm4v': + $type = 'video/x-m4v'; + break; + + case 'mov': + case 'qt': + $type = 'video/quicktime'; + break; + + case 'mp4': + case 'mpg4': + $type = 'video/mp4'; + break; + + case 'sdv': + $type = 'video/sd-video'; + break; + + case 'wm': + $type = 'video/x-ms-wm'; + break; + + case 'wmv': + $type = 'video/x-ms-wmv'; + break; + + case 'wvx': + $type = 'video/x-ms-wvx'; + break; + + // Flash mime-types + case 'spl': + $type = 'application/futuresplash'; + break; + + case 'swf': + $type = 'application/x-shockwave-flash'; + break; + } + } + + if ($find_handler) + { + if (in_array($type, $types_flash)) + { + return 'flash'; + } + elseif (in_array($type, $types_fmedia)) + { + return 'fmedia'; + } + elseif (in_array($type, $types_quicktime)) + { + return 'quicktime'; + } + elseif (in_array($type, $types_wmedia)) + { + return 'wmedia'; + } + elseif (in_array($type, $types_mp3)) + { + return 'mp3'; + } + else + { + return null; + } + } + else + { + return $type; + } + } +} + +class SimplePie_Caption +{ + var $type; + var $lang; + var $startTime; + var $endTime; + var $text; + + // Constructor, used to input the data + function SimplePie_Caption($type = null, $lang = null, $startTime = null, $endTime = null, $text = null) + { + $this->type = $type; + $this->lang = $lang; + $this->startTime = $startTime; + $this->endTime = $endTime; + $this->text = $text; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_endtime() + { + if ($this->endTime !== null) + { + return $this->endTime; + } + else + { + return null; + } + } + + function get_language() + { + if ($this->lang !== null) + { + return $this->lang; + } + else + { + return null; + } + } + + function get_starttime() + { + if ($this->startTime !== null) + { + return $this->startTime; + } + else + { + return null; + } + } + + function get_text() + { + if ($this->text !== null) + { + return $this->text; + } + else + { + return null; + } + } + + function get_type() + { + if ($this->type !== null) + { + return $this->type; + } + else + { + return null; + } + } +} + +class SimplePie_Credit +{ + var $role; + var $scheme; + var $name; + + // Constructor, used to input the data + function SimplePie_Credit($role = null, $scheme = null, $name = null) + { + $this->role = $role; + $this->scheme = $scheme; + $this->name = $name; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_role() + { + if ($this->role !== null) + { + return $this->role; + } + else + { + return null; + } + } + + function get_scheme() + { + if ($this->scheme !== null) + { + return $this->scheme; + } + else + { + return null; + } + } + + function get_name() + { + if ($this->name !== null) + { + return $this->name; + } + else + { + return null; + } + } +} + +class SimplePie_Copyright +{ + var $url; + var $label; + + // Constructor, used to input the data + function SimplePie_Copyright($url = null, $label = null) + { + $this->url = $url; + $this->label = $label; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_url() + { + if ($this->url !== null) + { + return $this->url; + } + else + { + return null; + } + } + + function get_attribution() + { + if ($this->label !== null) + { + return $this->label; + } + else + { + return null; + } + } +} + +class SimplePie_Rating +{ + var $scheme; + var $value; + + // Constructor, used to input the data + function SimplePie_Rating($scheme = null, $value = null) + { + $this->scheme = $scheme; + $this->value = $value; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_scheme() + { + if ($this->scheme !== null) + { + return $this->scheme; + } + else + { + return null; + } + } + + function get_value() + { + if ($this->value !== null) + { + return $this->value; + } + else + { + return null; + } + } +} + +class SimplePie_Restriction +{ + var $relationship; + var $type; + var $value; + + // Constructor, used to input the data + function SimplePie_Restriction($relationship = null, $type = null, $value = null) + { + $this->relationship = $relationship; + $this->type = $type; + $this->value = $value; + } + + function __toString() + { + // There is no $this->data here + return md5(serialize($this)); + } + + function get_relationship() + { + if ($this->relationship !== null) + { + return $this->relationship; + } + else + { + return null; + } + } + + function get_type() + { + if ($this->type !== null) + { + return $this->type; + } + else + { + return null; + } + } + + function get_value() + { + if ($this->value !== null) + { + return $this->value; + } + else + { + return null; + } + } +} + +/** + * @todo Move to properly supporting RFC2616 (HTTP/1.1) + */ +class SimplePie_File +{ + var $url; + var $useragent; + var $success = true; + var $headers = array(); + var $body; + var $status_code; + var $redirects = 0; + var $error; + var $method = SIMPLEPIE_FILE_SOURCE_NONE; + + function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false) + { + if (class_exists('idna_convert')) + { + $idn =& new idna_convert; + $parsed = SimplePie_Misc::parse_url($url); + $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); + } + $this->url = $url; + $this->useragent = $useragent; + if (preg_match('/^http(s)?:\/\//i', $url)) + { + if ($useragent === null) + { + $useragent = ini_get('user_agent'); + $this->useragent = $useragent; + } + if (!is_array($headers)) + { + $headers = array(); + } + if (!$force_fsockopen && function_exists('curl_exec')) + { + $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_CURL; + $fp = curl_init(); + $headers2 = array(); + foreach ($headers as $key => $value) + { + $headers2[] = "$key: $value"; + } + if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>=')) + { + curl_setopt($fp, CURLOPT_ENCODING, ''); + } + curl_setopt($fp, CURLOPT_URL, $url); + curl_setopt($fp, CURLOPT_HEADER, 1); + curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($fp, CURLOPT_TIMEOUT, $timeout); + curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout); + curl_setopt($fp, CURLOPT_REFERER, $url); + curl_setopt($fp, CURLOPT_USERAGENT, $useragent); + curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2); + if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>=')) + { + curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1); + curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects); + } + + $this->headers = curl_exec($fp); + if (curl_errno($fp) == 23 || curl_errno($fp) == 61) + { + curl_setopt($fp, CURLOPT_ENCODING, 'none'); + $this->headers = curl_exec($fp); + } + if (curl_errno($fp)) + { + $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp); + $this->success = false; + } + else + { + $info = curl_getinfo($fp); + curl_close($fp); + $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1); + $this->headers = array_pop($this->headers); + $parser =& new SimplePie_HTTP_Parser($this->headers); + if ($parser->parse()) + { + $this->headers = $parser->headers; + $this->body = $parser->body; + $this->status_code = $parser->status_code; + if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) + { + $this->redirects++; + $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); + return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); + } + } + } + } + else + { + $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN; + $url_parts = parse_url($url); + if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) == 'https') + { + $url_parts['host'] = "ssl://$url_parts[host]"; + $url_parts['port'] = 443; + } + if (!isset($url_parts['port'])) + { + $url_parts['port'] = 80; + } + $fp = @fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout); + if (!$fp) + { + $this->error = 'fsockopen error: ' . $errstr; + $this->success = false; + } + else + { + stream_set_timeout($fp, $timeout); + if (isset($url_parts['path'])) + { + if (isset($url_parts['query'])) + { + $get = "$url_parts[path]?$url_parts[query]"; + } + else + { + $get = $url_parts['path']; + } + } + else + { + $get = '/'; + } + $out = "GET $get HTTP/1.0\r\n"; + $out .= "Host: $url_parts[host]\r\n"; + $out .= "User-Agent: $useragent\r\n"; + if (extension_loaded('zlib')) + { + $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n"; + } + + if (isset($url_parts['user']) && isset($url_parts['pass'])) + { + $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n"; + } + foreach ($headers as $key => $value) + { + $out .= "$key: $value\r\n"; + } + $out .= "Connection: Close\r\n\r\n"; + fwrite($fp, $out); + + $info = stream_get_meta_data($fp); + + $this->headers = ''; + while (!$info['eof'] && !$info['timed_out']) + { + $this->headers .= fread($fp, 1160); + $info = stream_get_meta_data($fp); + } + if (!$info['timed_out']) + { + $parser =& new SimplePie_HTTP_Parser($this->headers); + if ($parser->parse()) + { + $this->headers = $parser->headers; + $this->body = $parser->body; + $this->status_code = $parser->status_code; + if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) + { + $this->redirects++; + $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url); + return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen); + } + if (isset($this->headers['content-encoding'])) + { + // Hey, we act dumb elsewhere, so let's do that here too + switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20"))) + { + case 'gzip': + case 'x-gzip': + $decoder = new SimplePie_gzdecode($this->body); + if (!$decoder->parse()) + { + $this->error = 'Unable to decode HTTP "gzip" stream'; + $this->success = false; + } + else + { + $this->body = $decoder->data; + } + break; + + case 'deflate': + if (($body = gzuncompress($this->body)) === false) + { + if (($body = gzinflate($this->body)) === false) + { + $this->error = 'Unable to decode HTTP "deflate" stream'; + $this->success = false; + } + } + $this->body = $body; + break; + + default: + $this->error = 'Unknown content coding'; + $this->success = false; + } + } + } + } + else + { + $this->error = 'fsocket timed out'; + $this->success = false; + } + fclose($fp); + } + } + } + else + { + $this->method = SIMPLEPIE_FILE_SOURCE_LOCAL | SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS; + if (!$this->body = file_get_contents($url)) + { + $this->error = 'file_get_contents could not read the file'; + $this->success = false; + } + } + } +} + +/** + * HTTP Response Parser + * + * @package SimplePie + */ +class SimplePie_HTTP_Parser +{ + /** + * HTTP Version + * + * @access public + * @var float + */ + var $http_version = 0.0; + + /** + * Status code + * + * @access public + * @var int + */ + var $status_code = 0; + + /** + * Reason phrase + * + * @access public + * @var string + */ + var $reason = ''; + + /** + * Key/value pairs of the headers + * + * @access public + * @var array + */ + var $headers = array(); + + /** + * Body of the response + * + * @access public + * @var string + */ + var $body = ''; + + /** + * Current state of the state machine + * + * @access private + * @var string + */ + var $state = 'http_version'; + + /** + * Input data + * + * @access private + * @var string + */ + var $data = ''; + + /** + * Input data length (to avoid calling strlen() everytime this is needed) + * + * @access private + * @var int + */ + var $data_length = 0; + + /** + * Current position of the pointer + * + * @var int + * @access private + */ + var $position = 0; + + /** + * Name of the hedaer currently being parsed + * + * @access private + * @var string + */ + var $name = ''; + + /** + * Value of the hedaer currently being parsed + * + * @access private + * @var string + */ + var $value = ''; + + /** + * Create an instance of the class with the input data + * + * @access public + * @param string $data Input data + */ + function SimplePie_HTTP_Parser($data) + { + $this->data = $data; + $this->data_length = strlen($this->data); + } + + /** + * Parse the input data + * + * @access public + * @return bool true on success, false on failure + */ + function parse() + { + while ($this->state && $this->state !== 'emit' && $this->has_data()) + { + $state = $this->state; + $this->$state(); + } + $this->data = ''; + if ($this->state === 'emit' || $this->state === 'body') + { + return true; + } + else + { + $this->http_version = ''; + $this->status_code = ''; + $this->reason = ''; + $this->headers = array(); + $this->body = ''; + return false; + } + } + + /** + * Check whether there is data beyond the pointer + * + * @access private + * @return bool true if there is further data, false if not + */ + function has_data() + { + return (bool) ($this->position < $this->data_length); + } + + /** + * See if the next character is LWS + * + * @access private + * @return bool true if the next character is LWS, false if not + */ + function is_linear_whitespace() + { + return (bool) ($this->data[$this->position] === "\x09" + || $this->data[$this->position] === "\x20" + || ($this->data[$this->position] === "\x0A" + && isset($this->data[$this->position + 1]) + && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20"))); + } + + /** + * Parse the HTTP version + * + * @access private + */ + function http_version() + { + if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/') + { + $len = strspn($this->data, '0123456789.', 5); + $this->http_version = substr($this->data, 5, $len); + $this->position += 5 + $len; + if (substr_count($this->http_version, '.') <= 1) + { + $this->http_version = (float) $this->http_version; + $this->position += strspn($this->data, "\x09\x20", $this->position); + $this->state = 'status'; + } + else + { + $this->state = false; + } + } + else + { + $this->state = false; + } + } + + /** + * Parse the status code + * + * @access private + */ + function status() + { + if ($len = strspn($this->data, '0123456789', $this->position)) + { + $this->status_code = (int) substr($this->data, $this->position, $len); + $this->position += $len; + $this->state = 'reason'; + } + else + { + $this->state = false; + } + } + + /** + * Parse the reason phrase + * + * @access private + */ + function reason() + { + $len = strcspn($this->data, "\x0A", $this->position); + $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20"); + $this->position += $len + 1; + $this->state = 'new_line'; + } + + /** + * Deal with a new line, shifting data around as needed + * + * @access private + */ + function new_line() + { + $this->value = trim($this->value, "\x0D\x20"); + if ($this->name !== '' && $this->value !== '') + { + $this->name = strtolower($this->name); + if (isset($this->headers[$this->name])) + { + $this->headers[$this->name] .= ', ' . $this->value; + } + else + { + $this->headers[$this->name] = $this->value; + } + } + $this->name = ''; + $this->value = ''; + if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A") + { + $this->position += 2; + $this->state = 'body'; + } + elseif ($this->data[$this->position] === "\x0A") + { + $this->position++; + $this->state = 'body'; + } + else + { + $this->state = 'name'; + } + } + + /** + * Parse a header name + * + * @access private + */ + function name() + { + $len = strcspn($this->data, "\x0A:", $this->position); + if (isset($this->data[$this->position + $len])) + { + if ($this->data[$this->position + $len] === "\x0A") + { + $this->position += $len; + $this->state = 'new_line'; + } + else + { + $this->name = substr($this->data, $this->position, $len); + $this->position += $len + 1; + $this->state = 'value'; + } + } + else + { + $this->state = false; + } + } + + /** + * Parse LWS, replacing consecutive LWS characters with a single space + * + * @access private + */ + function linear_whitespace() + { + do + { + if (substr($this->data, $this->position, 2) === "\x0D\x0A") + { + $this->position += 2; + } + elseif ($this->data[$this->position] === "\x0A") + { + $this->position++; + } + $this->position += strspn($this->data, "\x09\x20", $this->position); + } while ($this->has_data() && $this->is_linear_whitespace()); + $this->value .= "\x20"; + } + + /** + * See what state to move to while within non-quoted header values + * + * @access private + */ + function value() + { + if ($this->is_linear_whitespace()) + { + $this->linear_whitespace(); + } + else + { + switch ($this->data[$this->position]) + { + case '"': + $this->position++; + $this->state = 'quote'; + break; + + case "\x0A": + $this->position++; + $this->state = 'new_line'; + break; + + default: + $this->state = 'value_char'; + break; + } + } + } + + /** + * Parse a header value while outside quotes + * + * @access private + */ + function value_char() + { + $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position); + $this->value .= substr($this->data, $this->position, $len); + $this->position += $len; + $this->state = 'value'; + } + + /** + * See what state to move to while within quoted header values + * + * @access private + */ + function quote() + { + if ($this->is_linear_whitespace()) + { + $this->linear_whitespace(); + } + else + { + switch ($this->data[$this->position]) + { + case '"': + $this->position++; + $this->state = 'value'; + break; + + case "\x0A": + $this->position++; + $this->state = 'new_line'; + break; + + case '\\': + $this->position++; + $this->state = 'quote_escaped'; + break; + + default: + $this->state = 'quote_char'; + break; + } + } + } + + /** + * Parse a header value while within quotes + * + * @access private + */ + function quote_char() + { + $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position); + $this->value .= substr($this->data, $this->position, $len); + $this->position += $len; + $this->state = 'value'; + } + + /** + * Parse an escaped character within quotes + * + * @access private + */ + function quote_escaped() + { + $this->value .= $this->data[$this->position]; + $this->position++; + $this->state = 'quote'; + } + + /** + * Parse the body + * + * @access private + */ + function body() + { + $this->body = substr($this->data, $this->position); + $this->state = 'emit'; + } +} + +/** + * gzdecode + * + * @package SimplePie + */ +class SimplePie_gzdecode +{ + /** + * Compressed data + * + * @access private + * @see gzdecode::$data + */ + var $compressed_data; + + /** + * Size of compressed data + * + * @access private + */ + var $compressed_size; + + /** + * Minimum size of a valid gzip string + * + * @access private + */ + var $min_compressed_size = 18; + + /** + * Current position of pointer + * + * @access private + */ + var $position = 0; + + /** + * Flags (FLG) + * + * @access private + */ + var $flags; + + /** + * Uncompressed data + * + * @access public + * @see gzdecode::$compressed_data + */ + var $data; + + /** + * Modified time + * + * @access public + */ + var $MTIME; + + /** + * Extra Flags + * + * @access public + */ + var $XFL; + + /** + * Operating System + * + * @access public + */ + var $OS; + + /** + * Subfield ID 1 + * + * @access public + * @see gzdecode::$extra_field + * @see gzdecode::$SI2 + */ + var $SI1; + + /** + * Subfield ID 2 + * + * @access public + * @see gzdecode::$extra_field + * @see gzdecode::$SI1 + */ + var $SI2; + + /** + * Extra field content + * + * @access public + * @see gzdecode::$SI1 + * @see gzdecode::$SI2 + */ + var $extra_field; + + /** + * Original filename + * + * @access public + */ + var $filename; + + /** + * Human readable comment + * + * @access public + */ + var $comment; + + /** + * Don't allow anything to be set + * + * @access public + */ + function __set($name, $value) + { + trigger_error("Cannot write property $name", E_USER_ERROR); + } + + /** + * Set the compressed string and related properties + * + * @access public + */ + function SimplePie_gzdecode($data) + { + $this->compressed_data = $data; + $this->compressed_size = strlen($data); + } + + /** + * Decode the GZIP stream + * + * @access public + */ + function parse() + { + if ($this->compressed_size >= $this->min_compressed_size) + { + // Check ID1, ID2, and CM + if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08") + { + return false; + } + + // Get the FLG (FLaGs) + $this->flags = ord($this->compressed_data[3]); + + // FLG bits above (1 << 4) are reserved + if ($this->flags > 0x1F) + { + return false; + } + + // Advance the pointer after the above + $this->position += 4; + + // MTIME + $mtime = substr($this->compressed_data, $this->position, 4); + // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness + if (current(unpack('S', "\x00\x01")) === 1) + { + $mtime = strrev($mtime); + } + $this->MTIME = current(unpack('l', $mtime)); + $this->position += 4; + + // Get the XFL (eXtra FLags) + $this->XFL = ord($this->compressed_data[$this->position++]); + + // Get the OS (Operating System) + $this->OS = ord($this->compressed_data[$this->position++]); + + // Parse the FEXTRA + if ($this->flags & 4) + { + // Read subfield IDs + $this->SI1 = $this->compressed_data[$this->position++]; + $this->SI2 = $this->compressed_data[$this->position++]; + + // SI2 set to zero is reserved for future use + if ($this->SI2 === "\x00") + { + return false; + } + + // Get the length of the extra field + $len = current(unpack('v', substr($this->compressed_data, $this->position, 2))); + $position += 2; + + // Check the length of the string is still valid + $this->min_compressed_size += $len + 4; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Set the extra field to the given data + $this->extra_field = substr($this->compressed_data, $this->position, $len); + $this->position += $len; + } + else + { + return false; + } + } + + // Parse the FNAME + if ($this->flags & 8) + { + // Get the length of the filename + $len = strspn($this->compressed_data, "\x00", $this->position); + + // Check the length of the string is still valid + $this->min_compressed_size += $len + 1; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Set the original filename to the given string + $this->filename = substr($this->compressed_data, $this->position, $len); + $this->position += $len + 1; + } + else + { + return false; + } + } + + // Parse the FCOMMENT + if ($this->flags & 16) + { + // Get the length of the comment + $len = strspn($this->compressed_data, "\x00", $this->position); + + // Check the length of the string is still valid + $this->min_compressed_size += $len + 1; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Set the original comment to the given string + $this->comment = substr($this->compressed_data, $this->position, $len); + $this->position += $len + 1; + } + else + { + return false; + } + } + + // Parse the FHCRC + if ($this->flags & 2) + { + // Check the length of the string is still valid + $this->min_compressed_size += $len + 2; + if ($this->compressed_size >= $this->min_compressed_size) + { + // Read the CRC + $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2))); + + // Check the CRC matches + if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc) + { + $this->position += 2; + } + else + { + return false; + } + } + else + { + return false; + } + } + + // Decompress the actual data + if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false) + { + return false; + } + else + { + $this->position = $this->compressed_size - 8; + } + + // Check CRC of data + $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4))); + $this->position += 4; + /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc)) + { + return false; + }*/ + + // Check ISIZE of data + $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4))); + $this->position += 4; + if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize)) + { + return false; + } + + // Wow, against all odds, we've actually got a valid gzip string + return true; + } + else + { + return false; + } + } +} + +class SimplePie_Cache +{ + /** + * Don't call the constructor. Please. + * + * @access private + */ + function SimplePie_Cache() + { + trigger_error('Please call SimplePie_Cache::create() instead of the constructor', E_USER_ERROR); + } + + /** + * Create a new SimplePie_Cache object + * + * @static + * @access public + */ + function create($location, $filename, $extension) + { + return new SimplePie_Cache_File($location, $filename, $extension); + } +} + +class SimplePie_Cache_File +{ + var $location; + var $filename; + var $extension; + var $name; + + function SimplePie_Cache_File($location, $filename, $extension) + { + $this->location = $location; + $this->filename = rawurlencode($filename); + $this->extension = rawurlencode($extension); + $this->name = "$location/$this->filename.$this->extension"; + } + + function save($data) + { + if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location)) + { + if (is_a($data, 'SimplePie')) + { + $data = $data->data; + } + + $data = serialize($data); + + if (function_exists('file_put_contents')) + { + return (bool) file_put_contents($this->name, $data); + } + else + { + $fp = fopen($this->name, 'wb'); + if ($fp) + { + fwrite($fp, $data); + fclose($fp); + return true; + } + } + } + return false; + } + + function load() + { + if (file_exists($this->name) && is_readable($this->name)) + { + return unserialize(file_get_contents($this->name)); + } + return false; + } + + function mtime() + { + if (file_exists($this->name)) + { + return filemtime($this->name); + } + return false; + } + + function touch() + { + if (file_exists($this->name)) + { + return touch($this->name); + } + return false; + } + + function unlink() + { + if (file_exists($this->name)) + { + return unlink($this->name); + } + return false; + } +} + +class SimplePie_Misc +{ + function time_hms($seconds) + { + $time = ''; + + $hours = floor($seconds / 3600); + $remainder = $seconds % 3600; + if ($hours > 0) + { + $time .= $hours.':'; + } + + $minutes = floor($remainder / 60); + $seconds = $remainder % 60; + if ($minutes < 10 && $hours > 0) + { + $minutes = '0' . $minutes; + } + if ($seconds < 10) + { + $seconds = '0' . $seconds; + } + + $time .= $minutes.':'; + $time .= $seconds; + + return $time; + } + + function absolutize_url($relative, $base) + { + if ($relative !== '') + { + $relative = SimplePie_Misc::parse_url($relative); + if ($relative['scheme'] !== '') + { + $target = $relative; + } + elseif ($base !== '') + { + $base = SimplePie_Misc::parse_url($base); + $target = SimplePie_Misc::parse_url(''); + if ($relative['authority'] !== '') + { + $target = $relative; + $target['scheme'] = $base['scheme']; + } + else + { + $target['scheme'] = $base['scheme']; + $target['authority'] = $base['authority']; + if ($relative['path'] !== '') + { + if (strpos($relative['path'], '/') === 0) + { + $target['path'] = $relative['path']; + } + elseif ($base['authority'] !== '' && $base['path'] === '') + { + $target['path'] = '/' . $relative['path']; + } + elseif (($last_segment = strrpos($base['path'], '/')) !== false) + { + $target['path'] = substr($base['path'], 0, $last_segment + 1) . $relative['path']; + } + else + { + $target['path'] = $relative['path']; + } + $target['query'] = $relative['query']; + } + else + { + $target['path'] = $base['path']; + if ($relative['query'] !== '') + { + $target['query'] = $relative['query']; + } + elseif ($base['query'] !== '') + { + $target['query'] = $base['query']; + } + } + } + $target['fragment'] = $relative['fragment']; + } + else + { + // No base URL, just return the relative URL + $target = $relative; + } + $return = SimplePie_Misc::compress_parse_url($target['scheme'], $target['authority'], $target['path'], $target['query'], $target['fragment']); + } + else + { + $return = $base; + } + $return = SimplePie_Misc::normalize_url($return); + return $return; + } + + function remove_dot_segments($input) + { + $output = ''; + while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input == '.' || $input == '..') + { + // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, + if (strpos($input, '../') === 0) + { + $input = substr($input, 3); + } + elseif (strpos($input, './') === 0) + { + $input = substr($input, 2); + } + // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise, + elseif (strpos($input, '/./') === 0) + { + $input = substr_replace($input, '/', 0, 3); + } + elseif ($input == '/.') + { + $input = '/'; + } + // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise, + elseif (strpos($input, '/../') === 0) + { + $input = substr_replace($input, '/', 0, 4); + $output = substr_replace($output, '', strrpos($output, '/')); + } + elseif ($input == '/..') + { + $input = '/'; + $output = substr_replace($output, '', strrpos($output, '/')); + } + // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, + elseif ($input == '.' || $input == '..') + { + $input = ''; + } + // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer + elseif (($pos = strpos($input, '/', 1)) !== false) + { + $output .= substr($input, 0, $pos); + $input = substr_replace($input, '', 0, $pos); + } + else + { + $output .= $input; + $input = ''; + } + } + return $output . $input; + } + + function get_element($realname, $string) + { + $return = array(); + $name = preg_quote($realname, '/'); + if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) + { + for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++) + { + $return[$i]['tag'] = $realname; + $return[$i]['full'] = $matches[$i][0][0]; + $return[$i]['offset'] = $matches[$i][0][1]; + if (strlen($matches[$i][3][0]) <= 2) + { + $return[$i]['self_closing'] = true; + } + else + { + $return[$i]['self_closing'] = false; + $return[$i]['content'] = $matches[$i][4][0]; + } + $return[$i]['attribs'] = array(); + if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER)) + { + for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++) + { + if (count($attribs[$j]) == 2) + { + $attribs[$j][2] = $attribs[$j][1]; + } + $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8'); + } + } + } + } + return $return; + } + + function element_implode($element) + { + $full = "<$element[tag]"; + foreach ($element['attribs'] as $key => $value) + { + $key = strtolower($key); + $full .= " $key=\"" . htmlspecialchars($value['data']) . '"'; + } + if ($element['self_closing']) + { + $full .= ' />'; + } + else + { + $full .= ">$element[content]"; + } + return $full; + } + + function error($message, $level, $file, $line) + { + switch ($level) + { + case E_USER_ERROR: + $note = 'PHP Error'; + break; + case E_USER_WARNING: + $note = 'PHP Warning'; + break; + case E_USER_NOTICE: + $note = 'PHP Notice'; + break; + default: + $note = 'Unknown Error'; + break; + } + error_log("$note: $message in $file on line $line", 0); + return $message; + } + + /** + * If a file has been cached, retrieve and display it. + * + * This is most useful for caching images (get_favicon(), etc.), + * however it works for all cached files. This WILL NOT display ANY + * file/image/page/whatever, but rather only display what has already + * been cached by SimplePie. + * + * @access public + * @see SimplePie::get_favicon() + * @param str $identifier_url URL that is used to identify the content. + * This may or may not be the actual URL of the live content. + * @param str $cache_location Location of SimplePie's cache. Defaults + * to './cache'. + * @param str $cache_extension The file extension that the file was + * cached with. Defaults to 'spc'. + * @param str $cache_class Name of the cache-handling class being used + * in SimplePie. Defaults to 'SimplePie_Cache', and should be left + * as-is unless you've overloaded the class. + * @param str $cache_name_function Obsolete. Exists for backwards + * compatibility reasons only. + */ + function display_cached_file($identifier_url, $cache_location = './cache', $cache_extension = 'spc', $cache_class = 'SimplePie_Cache', $cache_name_function = 'md5') + { + $cache = call_user_func(array($cache_class, 'create'), $cache_location, $identifier_url, $cache_extension); + + if ($file = $cache->load()) + { + if (isset($file['headers']['content-type'])) + { + header('Content-type:' . $file['headers']['content-type']); + } + else + { + header('Content-type: application/octet-stream'); + } + header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days + echo $file['body']; + exit; + } + + die('Cached file for ' . $identifier_url . ' cannot be found.'); + } + + function fix_protocol($url, $http = 1) + { + $url = SimplePie_Misc::normalize_url($url); + $parsed = SimplePie_Misc::parse_url($url); + if ($parsed['scheme'] !== '' && $parsed['scheme'] != 'http' && $parsed['scheme'] != 'https') + { + return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http); + } + + if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url)) + { + return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http); + } + + if ($http == 2 && $parsed['scheme'] !== '') + { + return "feed:$url"; + } + elseif ($http == 3 && strtolower($parsed['scheme']) == 'http') + { + return substr_replace($url, 'podcast', 0, 4); + } + elseif ($http == 4 && strtolower($parsed['scheme']) == 'http') + { + return substr_replace($url, 'itpc', 0, 4); + } + else + { + return $url; + } + } + + function parse_url($url) + { + static $cache = array(); + if (isset($cache[$url])) + { + return $cache[$url]; + } + elseif (preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/', $url, $match)) + { + for ($i = count($match); $i <= 9; $i++) + { + $match[$i] = ''; + } + return $cache[$url] = array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]); + } + else + { + return $cache[$url] = array('scheme' => '', 'authority' => '', 'path' => '', 'query' => '', 'fragment' => ''); + } + } + + function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '') + { + $return = ''; + if ($scheme !== '') + { + $return .= "$scheme:"; + } + if ($authority !== '') + { + $return .= "//$authority"; + } + if ($path !== '') + { + $return .= $path; + } + if ($query !== '') + { + $return .= "?$query"; + } + if ($fragment !== '') + { + $return .= "#$fragment"; + } + return $return; + } + + function normalize_url($url) + { + $url = preg_replace_callback('/%([0-9A-Fa-f]{2})/', array('SimplePie_Misc', 'percent_encoding_normalization'), $url); + $url = SimplePie_Misc::parse_url($url); + $url['scheme'] = strtolower($url['scheme']); + if ($url['authority'] !== '') + { + $url['authority'] = strtolower($url['authority']); + $url['path'] = SimplePie_Misc::remove_dot_segments($url['path']); + } + return SimplePie_Misc::compress_parse_url($url['scheme'], $url['authority'], $url['path'], $url['query'], $url['fragment']); + } + + function percent_encoding_normalization($match) + { + $integer = hexdec($match[1]); + if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer == 0x2D || $integer == 0x2E || $integer == 0x5F || $integer == 0x7E) + { + return chr($integer); + } + else + { + return strtoupper($match[0]); + } + } + + /** + * Remove bad UTF-8 bytes + * + * PCRE Pattern to locate bad bytes in a UTF-8 string comes from W3C + * FAQ: Multilingual Forms (modified to include full ASCII range) + * + * @author Geoffrey Sneddon + * @see http://www.w3.org/International/questions/qa-forms-utf-8 + * @param string $str String to remove bad UTF-8 bytes from + * @return string UTF-8 string + */ + function utf8_bad_replace($str) + { + if (function_exists('iconv') && ($return = @iconv('UTF-8', 'UTF-8//IGNORE', $str))) + { + return $return; + } + elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($str, 'UTF-8', 'UTF-8'))) + { + return $return; + } + elseif (preg_match_all('/(?:[\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})+/', $str, $matches)) + { + return implode("\xEF\xBF\xBD", $matches[0]); + } + elseif ($str !== '') + { + return "\xEF\xBF\xBD"; + } + else + { + return ''; + } + } + + /** + * Converts a Windows-1252 encoded string to a UTF-8 encoded string + * + * @static + * @access public + * @param string $string Windows-1252 encoded string + * @return string UTF-8 encoded string + */ + function windows_1252_to_utf8($string) + { + static $convert_table = array("\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF"); + + return strtr($string, $convert_table); + } + + function change_encoding($data, $input, $output) + { + $input = SimplePie_Misc::encoding($input); + $output = SimplePie_Misc::encoding($output); + + // We fail to fail on non US-ASCII bytes + if ($input === 'US-ASCII') + { + static $non_ascii_octects = ''; + if (!$non_ascii_octects) + { + for ($i = 0x80; $i <= 0xFF; $i++) + { + $non_ascii_octects .= chr($i); + } + } + $data = substr($data, 0, strcspn($data, $non_ascii_octects)); + } + + // This is first, as behaviour of this is completely predictable + if ($input === 'Windows-1252' && $output === 'UTF-8') + { + return SimplePie_Misc::windows_1252_to_utf8($data); + } + // This is second, as behaviour of this varies only with PHP version + elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($data, $output, $input))) + { + return $return; + } + // This is last, as behaviour of this varies with OS userland and PHP version + elseif (function_exists('iconv') && ($return = @iconv($input, $output, $data))) + { + return $return; + } + // If we can't do anything, just fail + else + { + return false; + } + } + + function encoding($charset) + { + /* Character sets are case-insensitive, and also need some further + normalization in the real world (though we'll return them in the form given + in their registration). */ + switch (strtolower(preg_replace('/[\x09-\x0D\x20-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]/', '', $charset))) + { + case 'adobestandardencoding': + case 'csadobestandardencoding': + return 'Adobe-Standard-Encoding'; + + case 'adobesymbolencoding': + case 'cshppsmath': + return 'Adobe-Symbol-Encoding'; + + case 'ami1251': + case 'ami1251': + case 'amiga1251': + case 'amiga1251': + return 'Amiga-1251'; + + case 'ansix31101983': + case 'csat5001983': + case 'csiso99naplps': + case 'isoir99': + case 'naplps': + return 'ANSI_X3.110-1983'; + + case 'arabic7': + case 'asmo449': + case 'csiso89asmo449': + case 'isoir89': + case 'iso9036': + return 'ASMO_449'; + + case 'big5': + case 'csbig5': + case 'xxbig5': + return 'Big5'; + + case 'big5hkscs': + return 'Big5-HKSCS'; + + case 'bocu1': + case 'csbocu1': + return 'BOCU-1'; + + case 'brf': + case 'csbrf': + return 'BRF'; + + case 'bs4730': + case 'csiso4unitedkingdom': + case 'gb': + case 'isoir4': + case 'iso646gb': + case 'uk': + return 'BS_4730'; + + case 'bsviewdata': + case 'csiso47bsviewdata': + case 'isoir47': + return 'BS_viewdata'; + + case 'cesu8': + case 'cscesu8': + return 'CESU-8'; + + case 'ca': + case 'csa71': + case 'csaz243419851': + case 'csiso121canadian1': + case 'isoir121': + case 'iso646ca': + return 'CSA_Z243.4-1985-1'; + + case 'csa72': + case 'csaz243419852': + case 'csiso122canadian2': + case 'isoir122': + case 'iso646ca2': + return 'CSA_Z243.4-1985-2'; + + case 'csaz24341985gr': + case 'csiso123csaz24341985gr': + case 'isoir123': + return 'CSA_Z243.4-1985-gr'; + + case 'csiso139csn369103': + case 'csn369103': + case 'isoir139': + return 'CSN_369103'; + + case 'csdecmcs': + case 'dec': + case 'decmcs': + return 'DEC-MCS'; + + case 'csiso21german': + case 'de': + case 'din66003': + case 'isoir21': + case 'iso646de': + return 'DIN_66003'; + + case 'csdkus': + case 'dkus': + return 'dk-us'; + + case 'csiso646danish': + case 'dk': + case 'ds2089': + case 'ds2089': + case 'iso646dk': + return 'DS_2089'; + + case 'csibmebcdicatde': + case 'ebcdicatde': + return 'EBCDIC-AT-DE'; + + case 'csebcdicatdea': + case 'ebcdicatdea': + return 'EBCDIC-AT-DE-A'; + + case 'csebcdiccafr': + case 'ebcdiccafr': + return 'EBCDIC-CA-FR'; + + case 'csebcdicdkno': + case 'ebcdicdkno': + return 'EBCDIC-DK-NO'; + + case 'csebcdicdknoa': + case 'ebcdicdknoa': + return 'EBCDIC-DK-NO-A'; + + case 'csebcdices': + case 'ebcdices': + return 'EBCDIC-ES'; + + case 'csebcdicesa': + case 'ebcdicesa': + return 'EBCDIC-ES-A'; + + case 'csebcdicess': + case 'ebcdicess': + return 'EBCDIC-ES-S'; + + case 'csebcdicfise': + case 'ebcdicfise': + return 'EBCDIC-FI-SE'; + + case 'csebcdicfisea': + case 'ebcdicfisea': + return 'EBCDIC-FI-SE-A'; + + case 'csebcdicfr': + case 'ebcdicfr': + return 'EBCDIC-FR'; + + case 'csebcdicit': + case 'ebcdicit': + return 'EBCDIC-IT'; + + case 'csebcdicpt': + case 'ebcdicpt': + return 'EBCDIC-PT'; + + case 'csebcdicuk': + case 'ebcdicuk': + return 'EBCDIC-UK'; + + case 'csebcdicus': + case 'ebcdicus': + return 'EBCDIC-US'; + + case 'csiso111ecmacyrillic': + case 'ecmacyrillic': + case 'isoir111': + case 'koi8e': + return 'ECMA-cyrillic'; + + case 'csiso17spanish': + case 'es': + case 'isoir17': + case 'iso646es': + return 'ES'; + + case 'csiso85spanish2': + case 'es2': + case 'isoir85': + case 'iso646es2': + return 'ES2'; + + case 'cseucfixwidjapanese': + case 'extendedunixcodefixedwidthforjapanese': + return 'Extended_UNIX_Code_Fixed_Width_for_Japanese'; + + case 'cseucpkdfmtjapanese': + case 'eucjp': + case 'extendedunixcodepackedformatforjapanese': + return 'Extended_UNIX_Code_Packed_Format_for_Japanese'; + + case 'gb18030': + return 'GB18030'; + + case 'cp936': + case 'gbk': + case 'ms936': + case 'windows936': + case 'csgb2312': + case 'gb2312': + case 'chinese': + case 'csiso58gb231280': + case 'gb231280': + case 'isoir58': + return 'GBK'; + + case 'cn': + case 'csiso57gb1988': + case 'gb198880': + case 'isoir57': + case 'iso646cn': + return 'GB_1988-80'; + + case 'csiso153gost1976874': + case 'gost1976874': + case 'isoir153': + case 'stsev35888': + return 'GOST_19768-74'; + + case 'csiso150': + case 'csiso150greekccitt': + case 'greekccitt': + case 'isoir150': + return 'greek-ccitt'; + + case 'csiso88greek7': + case 'greek7': + case 'isoir88': + return 'greek7'; + + case 'csiso18greek7old': + case 'greek7old': + case 'isoir18': + return 'greek7-old'; + + case 'cshpdesktop': + case 'hpdesktop': + return 'HP-DeskTop'; + + case 'cshplegal': + case 'hplegal': + return 'HP-Legal'; + + case 'cshpmath8': + case 'hpmath8': + return 'HP-Math8'; + + case 'cshppifont': + case 'hppifont': + return 'HP-Pi-font'; + + case 'cshproman8': + case 'hproman8': + case 'r8': + case 'roman8': + return 'hp-roman8'; + + case 'hzgb2312': + return 'HZ-GB-2312'; + + case 'csibmsymbols': + case 'ibmsymbols': + return 'IBM-Symbols'; + + case 'csibmthai': + case 'ibmthai': + return 'IBM-Thai'; + + case 'ccsid00858': + case 'cp00858': + case 'ibm00858': + case 'pcmultilingual850euro': + return 'IBM00858'; + + case 'ccsid00924': + case 'cp00924': + case 'ebcdiclatin9euro': + case 'ibm00924': + return 'IBM00924'; + + case 'ccsid01140': + case 'cp01140': + case 'ebcdicus37euro': + case 'ibm01140': + return 'IBM01140'; + + case 'ccsid01141': + case 'cp01141': + case 'ebcdicde273euro': + case 'ibm01141': + return 'IBM01141'; + + case 'ccsid01142': + case 'cp01142': + case 'ebcdicdk277euro': + case 'ebcdicno277euro': + case 'ibm01142': + return 'IBM01142'; + + case 'ccsid01143': + case 'cp01143': + case 'ebcdicfi278euro': + case 'ebcdicse278euro': + case 'ibm01143': + return 'IBM01143'; + + case 'ccsid01144': + case 'cp01144': + case 'ebcdicit280euro': + case 'ibm01144': + return 'IBM01144'; + + case 'ccsid01145': + case 'cp01145': + case 'ebcdices284euro': + case 'ibm01145': + return 'IBM01145'; + + case 'ccsid01146': + case 'cp01146': + case 'ebcdicgb285euro': + case 'ibm01146': + return 'IBM01146'; + + case 'ccsid01147': + case 'cp01147': + case 'ebcdicfr297euro': + case 'ibm01147': + return 'IBM01147'; + + case 'ccsid01148': + case 'cp01148': + case 'ebcdicinternational500euro': + case 'ibm01148': + return 'IBM01148'; + + case 'ccsid01149': + case 'cp01149': + case 'ebcdicis871euro': + case 'ibm01149': + return 'IBM01149'; + + case 'cp037': + case 'csibm037': + case 'ebcdiccpca': + case 'ebcdiccpnl': + case 'ebcdiccpus': + case 'ebcdiccpwt': + case 'ibm037': + return 'IBM037'; + + case 'cp038': + case 'csibm038': + case 'ebcdicint': + case 'ibm038': + return 'IBM038'; + + case 'cp273': + case 'csibm273': + case 'ibm273': + return 'IBM273'; + + case 'cp274': + case 'csibm274': + case 'ebcdicbe': + case 'ibm274': + return 'IBM274'; + + case 'cp275': + case 'csibm275': + case 'ebcdicbr': + case 'ibm275': + return 'IBM275'; + + case 'csibm277': + case 'ebcdiccpdk': + case 'ebcdiccpno': + case 'ibm277': + return 'IBM277'; + + case 'cp278': + case 'csibm278': + case 'ebcdiccpfi': + case 'ebcdiccpse': + case 'ibm278': + return 'IBM278'; + + case 'cp280': + case 'csibm280': + case 'ebcdiccpit': + case 'ibm280': + return 'IBM280'; + + case 'cp281': + case 'csibm281': + case 'ebcdicjpe': + case 'ibm281': + return 'IBM281'; + + case 'cp284': + case 'csibm284': + case 'ebcdiccpes': + case 'ibm284': + return 'IBM284'; + + case 'cp285': + case 'csibm285': + case 'ebcdiccpgb': + case 'ibm285': + return 'IBM285'; + + case 'cp290': + case 'csibm290': + case 'ebcdicjpkana': + case 'ibm290': + return 'IBM290'; + + case 'cp297': + case 'csibm297': + case 'ebcdiccpfr': + case 'ibm297': + return 'IBM297'; + + case 'cp420': + case 'csibm420': + case 'ebcdiccpar1': + case 'ibm420': + return 'IBM420'; + + case 'cp423': + case 'csibm423': + case 'ebcdiccpgr': + case 'ibm423': + return 'IBM423'; + + case 'cp424': + case 'csibm424': + case 'ebcdiccphe': + case 'ibm424': + return 'IBM424'; + + case '437': + case 'cp437': + case 'cspc8codepage437': + case 'ibm437': + return 'IBM437'; + + case 'cp500': + case 'csibm500': + case 'ebcdiccpbe': + case 'ebcdiccpch': + case 'ibm500': + return 'IBM500'; + + case 'cp775': + case 'cspc775baltic': + case 'ibm775': + return 'IBM775'; + + case '850': + case 'cp850': + case 'cspc850multilingual': + case 'ibm850': + return 'IBM850'; + + case '851': + case 'cp851': + case 'csibm851': + case 'ibm851': + return 'IBM851'; + + case '852': + case 'cp852': + case 'cspcp852': + case 'ibm852': + return 'IBM852'; + + case '855': + case 'cp855': + case 'csibm855': + case 'ibm855': + return 'IBM855'; + + case '857': + case 'cp857': + case 'csibm857': + case 'ibm857': + return 'IBM857'; + + case '860': + case 'cp860': + case 'csibm860': + case 'ibm860': + return 'IBM860'; + + case '861': + case 'cpis': + case 'cp861': + case 'csibm861': + case 'ibm861': + return 'IBM861'; + + case '862': + case 'cp862': + case 'cspc862latinhebrew': + case 'ibm862': + return 'IBM862'; + + case '863': + case 'cp863': + case 'csibm863': + case 'ibm863': + return 'IBM863'; + + case 'cp864': + case 'csibm864': + case 'ibm864': + return 'IBM864'; + + case '865': + case 'cp865': + case 'csibm865': + case 'ibm865': + return 'IBM865'; + + case '866': + case 'cp866': + case 'csibm866': + case 'ibm866': + return 'IBM866'; + + case 'cpar': + case 'cp868': + case 'csibm868': + case 'ibm868': + return 'IBM868'; + + case '869': + case 'cpgr': + case 'cp869': + case 'csibm869': + case 'ibm869': + return 'IBM869'; + + case 'cp870': + case 'csibm870': + case 'ebcdiccproece': + case 'ebcdiccpyu': + case 'ibm870': + return 'IBM870'; + + case 'cp871': + case 'csibm871': + case 'ebcdiccpis': + case 'ibm871': + return 'IBM871'; + + case 'cp880': + case 'csibm880': + case 'ebcdiccyrillic': + case 'ibm880': + return 'IBM880'; + + case 'cp891': + case 'csibm891': + case 'ibm891': + return 'IBM891'; + + case 'cp903': + case 'csibm903': + case 'ibm903': + return 'IBM903'; + + case '904': + case 'cp904': + case 'csibbm904': + case 'ibm904': + return 'IBM904'; + + case 'cp905': + case 'csibm905': + case 'ebcdiccptr': + case 'ibm905': + return 'IBM905'; + + case 'cp918': + case 'csibm918': + case 'ebcdiccpar2': + case 'ibm918': + return 'IBM918'; + + case 'cp1026': + case 'csibm1026': + case 'ibm1026': + return 'IBM1026'; + + case 'ibm1047': + case 'ibm1047': + return 'IBM1047'; + + case 'csiso143iecp271': + case 'iecp271': + case 'isoir143': + return 'IEC_P27-1'; + + case 'csiso49inis': + case 'inis': + case 'isoir49': + return 'INIS'; + + case 'csiso50inis8': + case 'inis8': + case 'isoir50': + return 'INIS-8'; + + case 'csiso51iniscyrillic': + case 'iniscyrillic': + case 'isoir51': + return 'INIS-cyrillic'; + + case 'csinvariant': + case 'invariant': + return 'INVARIANT'; + + case 'iso2022cn': + return 'ISO-2022-CN'; + + case 'iso2022cnext': + return 'ISO-2022-CN-EXT'; + + case 'csiso2022jp': + case 'iso2022jp': + return 'ISO-2022-JP'; + + case 'csiso2022jp2': + case 'iso2022jp2': + return 'ISO-2022-JP-2'; + + case 'csiso2022kr': + case 'iso2022kr': + return 'ISO-2022-KR'; + + case 'cswindows30latin1': + case 'iso88591windows30latin1': + return 'ISO-8859-1-Windows-3.0-Latin-1'; + + case 'cswindows31latin1': + case 'iso88591windows31latin1': + return 'ISO-8859-1-Windows-3.1-Latin-1'; + + case 'csisolatin2': + case 'iso88592': + case 'isoir101': + case 'iso88592': + case 'iso885921987': + case 'l2': + case 'latin2': + return 'ISO-8859-2'; + + case 'cswindows31latin2': + case 'iso88592windowslatin2': + return 'ISO-8859-2-Windows-Latin-2'; + + case 'csisolatin3': + case 'iso88593': + case 'isoir109': + case 'iso88593': + case 'iso885931988': + case 'l3': + case 'latin3': + return 'ISO-8859-3'; + + case 'csisolatin4': + case 'iso88594': + case 'isoir110': + case 'iso88594': + case 'iso885941988': + case 'l4': + case 'latin4': + return 'ISO-8859-4'; + + case 'csisolatincyrillic': + case 'cyrillic': + case 'iso88595': + case 'isoir144': + case 'iso88595': + case 'iso885951988': + return 'ISO-8859-5'; + + case 'arabic': + case 'asmo708': + case 'csisolatinarabic': + case 'ecma114': + case 'iso88596': + case 'isoir127': + case 'iso88596': + case 'iso885961987': + return 'ISO-8859-6'; + + case 'csiso88596e': + case 'iso88596e': + case 'iso88596e': + return 'ISO-8859-6-E'; + + case 'csiso88596i': + case 'iso88596i': + case 'iso88596i': + return 'ISO-8859-6-I'; + + case 'csisolatingreek': + case 'ecma118': + case 'elot928': + case 'greek': + case 'greek8': + case 'iso88597': + case 'isoir126': + case 'iso88597': + case 'iso885971987': + return 'ISO-8859-7'; + + case 'csisolatinhebrew': + case 'hebrew': + case 'iso88598': + case 'isoir138': + case 'iso88598': + case 'iso885981988': + return 'ISO-8859-8'; + + case 'csiso88598e': + case 'iso88598e': + case 'iso88598e': + return 'ISO-8859-8-E'; + + case 'csiso88598i': + case 'iso88598i': + case 'iso88598i': + return 'ISO-8859-8-I'; + + case 'cswindows31latin5': + case 'iso88599windowslatin5': + return 'ISO-8859-9-Windows-Latin-5'; + + case 'csisolatin6': + case 'iso885910': + case 'isoir157': + case 'iso8859101992': + case 'l6': + case 'latin6': + return 'ISO-8859-10'; + + case 'iso885913': + return 'ISO-8859-13'; + + case 'iso885914': + case 'isoceltic': + case 'isoir199': + case 'iso885914': + case 'iso8859141998': + case 'l8': + case 'latin8': + return 'ISO-8859-14'; + + case 'iso885915': + case 'iso885915': + case 'latin9': + return 'ISO-8859-15'; + + case 'iso885916': + case 'isoir226': + case 'iso885916': + case 'iso8859162001': + case 'l10': + case 'latin10': + return 'ISO-8859-16'; + + case 'iso10646j1': + return 'ISO-10646-J-1'; + + case 'csunicode': + case 'iso10646ucs2': + return 'ISO-10646-UCS-2'; + + case 'csucs4': + case 'iso10646ucs4': + return 'ISO-10646-UCS-4'; + + case 'csunicodeascii': + case 'iso10646ucsbasic': + return 'ISO-10646-UCS-Basic'; + + case 'csunicodelatin1': + case 'iso10646': + case 'iso10646unicodelatin1': + return 'ISO-10646-Unicode-Latin1'; + + case 'csiso10646utf1': + case 'iso10646utf1': + return 'ISO-10646-UTF-1'; + + case 'csiso115481': + case 'iso115481': + case 'iso115481': + case 'isotr115481': + return 'ISO-11548-1'; + + case 'csiso90': + case 'isoir90': + return 'iso-ir-90'; + + case 'csunicodeibm1261': + case 'isounicodeibm1261': + return 'ISO-Unicode-IBM-1261'; + + case 'csunicodeibm1264': + case 'isounicodeibm1264': + return 'ISO-Unicode-IBM-1264'; + + case 'csunicodeibm1265': + case 'isounicodeibm1265': + return 'ISO-Unicode-IBM-1265'; + + case 'csunicodeibm1268': + case 'isounicodeibm1268': + return 'ISO-Unicode-IBM-1268'; + + case 'csunicodeibm1276': + case 'isounicodeibm1276': + return 'ISO-Unicode-IBM-1276'; + + case 'csiso646basic1983': + case 'iso646basic1983': + case 'ref': + return 'ISO_646.basic:1983'; + + case 'csiso2intlrefversion': + case 'irv': + case 'isoir2': + case 'iso646irv1983': + return 'ISO_646.irv:1983'; + + case 'csiso2033': + case 'e13b': + case 'isoir98': + case 'iso20331983': + return 'ISO_2033-1983'; + + case 'csiso5427cyrillic': + case 'isoir37': + case 'iso5427': + return 'ISO_5427'; + + case 'isoir54': + case 'iso5427cyrillic1981': + case 'iso54271981': + return 'ISO_5427:1981'; + + case 'csiso5428greek': + case 'isoir55': + case 'iso54281980': + return 'ISO_5428:1980'; + + case 'csiso6937add': + case 'isoir152': + case 'iso6937225': + return 'ISO_6937-2-25'; + + case 'csisotextcomm': + case 'isoir142': + case 'iso69372add': + return 'ISO_6937-2-add'; + + case 'csiso8859supp': + case 'isoir154': + case 'iso8859supp': + case 'latin125': + return 'ISO_8859-supp'; + + case 'csiso10367box': + case 'isoir155': + case 'iso10367box': + return 'ISO_10367-box'; + + case 'csiso15italian': + case 'isoir15': + case 'iso646it': + case 'it': + return 'IT'; + + case 'csiso13jisc6220jp': + case 'isoir13': + case 'jisc62201969': + case 'jisc62201969jp': + case 'katakana': + case 'x02017': + return 'JIS_C6220-1969-jp'; + + case 'csiso14jisc6220ro': + case 'isoir14': + case 'iso646jp': + case 'jisc62201969ro': + case 'jp': + return 'JIS_C6220-1969-ro'; + + case 'csiso42jisc62261978': + case 'isoir42': + case 'jisc62261978': + return 'JIS_C6226-1978'; + + case 'csiso87jisx0208': + case 'isoir87': + case 'jisc62261983': + case 'jisx02081983': + case 'x0208': + return 'JIS_C6226-1983'; + + case 'csiso91jisc62291984a': + case 'isoir91': + case 'jisc62291984a': + case 'jpocra': + return 'JIS_C6229-1984-a'; + + case 'csiso92jisc62991984b': + case 'isoir92': + case 'iso646jpocrb': + case 'jisc62291984b': + case 'jpocrb': + return 'JIS_C6229-1984-b'; + + case 'csiso93jis62291984badd': + case 'isoir93': + case 'jisc62291984badd': + case 'jpocrbadd': + return 'JIS_C6229-1984-b-add'; + + case 'csiso94jis62291984hand': + case 'isoir94': + case 'jisc62291984hand': + case 'jpocrhand': + return 'JIS_C6229-1984-hand'; + + case 'csiso95jis62291984handadd': + case 'isoir95': + case 'jisc62291984handadd': + case 'jpocrhandadd': + return 'JIS_C6229-1984-hand-add'; + + case 'csiso96jisc62291984kana': + case 'isoir96': + case 'jisc62291984kana': + return 'JIS_C6229-1984-kana'; + + case 'csjisencoding': + case 'jisencoding': + return 'JIS_Encoding'; + + case 'cshalfwidthkatakana': + case 'jisx0201': + case 'x0201': + return 'JIS_X0201'; + + case 'csiso159jisx02121990': + case 'isoir159': + case 'jisx02121990': + case 'x0212': + return 'JIS_X0212-1990'; + + case 'csiso141jusib1002': + case 'isoir141': + case 'iso646yu': + case 'js': + case 'jusib1002': + case 'yu': + return 'JUS_I.B1.002'; + + case 'csiso147macedonian': + case 'isoir147': + case 'jusib1003mac': + case 'macedonian': + return 'JUS_I.B1.003-mac'; + + case 'csiso146serbian': + case 'isoir146': + case 'jusib1003serb': + case 'serbian': + return 'JUS_I.B1.003-serb'; + + case 'koi7switched': + return 'KOI7-switched'; + + case 'cskoi8r': + case 'koi8r': + return 'KOI8-R'; + + case 'koi8u': + return 'KOI8-U'; + + case 'csksc5636': + case 'iso646kr': + case 'ksc5636': + return 'KSC5636'; + + case 'cskz1048': + case 'kz1048': + case 'rk1048': + case 'strk10482002': + return 'KZ-1048'; + + case 'csiso19latingreek': + case 'isoir19': + case 'latingreek': + return 'latin-greek'; + + case 'csiso27latingreek1': + case 'isoir27': + case 'latingreek1': + return 'Latin-greek-1'; + + case 'csiso158lap': + case 'isoir158': + case 'lap': + case 'latinlap': + return 'latin-lap'; + + case 'csmacintosh': + case 'mac': + case 'macintosh': + return 'macintosh'; + + case 'csmicrosoftpublishing': + case 'microsoftpublishing': + return 'Microsoft-Publishing'; + + case 'csmnem': + case 'mnem': + return 'MNEM'; + + case 'csmnemonic': + case 'mnemonic': + return 'MNEMONIC'; + + case 'csiso86hungarian': + case 'hu': + case 'isoir86': + case 'iso646hu': + case 'msz77953': + return 'MSZ_7795.3'; + + case 'csnatsdano': + case 'isoir91': + case 'natsdano': + return 'NATS-DANO'; + + case 'csnatsdanoadd': + case 'isoir92': + case 'natsdanoadd': + return 'NATS-DANO-ADD'; + + case 'csnatssefi': + case 'isoir81': + case 'natssefi': + return 'NATS-SEFI'; + + case 'csnatssefiadd': + case 'isoir82': + case 'natssefiadd': + return 'NATS-SEFI-ADD'; + + case 'csiso151cuba': + case 'cuba': + case 'isoir151': + case 'iso646cu': + case 'ncnc001081': + return 'NC_NC00-10:81'; + + case 'csiso69french': + case 'fr': + case 'isoir69': + case 'iso646fr': + case 'nfz62010': + return 'NF_Z_62-010'; + + case 'csiso25french': + case 'isoir25': + case 'iso646fr1': + case 'nfz620101973': + return 'NF_Z_62-010_(1973)'; + + case 'csiso60danishnorwegian': + case 'csiso60norwegian1': + case 'isoir60': + case 'iso646no': + case 'no': + case 'ns45511': + return 'NS_4551-1'; + + case 'csiso61norwegian2': + case 'isoir61': + case 'iso646no2': + case 'no2': + case 'ns45512': + return 'NS_4551-2'; + + case 'osdebcdicdf03irv': + return 'OSD_EBCDIC_DF03_IRV'; + + case 'osdebcdicdf041': + return 'OSD_EBCDIC_DF04_1'; + + case 'osdebcdicdf0415': + return 'OSD_EBCDIC_DF04_15'; + + case 'cspc8danishnorwegian': + case 'pc8danishnorwegian': + return 'PC8-Danish-Norwegian'; + + case 'cspc8turkish': + case 'pc8turkish': + return 'PC8-Turkish'; + + case 'csiso16portuguese': + case 'isoir16': + case 'iso646pt': + case 'pt': + return 'PT'; + + case 'csiso84portuguese2': + case 'isoir84': + case 'iso646pt2': + case 'pt2': + return 'PT2'; + + case 'cp154': + case 'csptcp154': + case 'cyrillicasian': + case 'pt154': + case 'ptcp154': + return 'PTCP154'; + + case 'scsu': + return 'SCSU'; + + case 'csiso10swedish': + case 'fi': + case 'isoir10': + case 'iso646fi': + case 'iso646se': + case 'se': + case 'sen850200b': + return 'SEN_850200_B'; + + case 'csiso11swedishfornames': + case 'isoir11': + case 'iso646se2': + case 'se2': + case 'sen850200c': + return 'SEN_850200_C'; + + case 'csshiftjis': + case 'mskanji': + case 'shiftjis': + return 'Shift_JIS'; + + case 'csiso102t617bit': + case 'isoir102': + case 't617bit': + return 'T.61-7bit'; + + case 'csiso103t618bit': + case 'isoir103': + case 't61': + case 't618bit': + return 'T.61-8bit'; + + case 'csiso128t101g2': + case 'isoir128': + case 't101g2': + return 'T.101-G2'; + + case 'cstscii': + case 'tscii': + return 'TSCII'; + + case 'csunicode11': + case 'unicode11': + return 'UNICODE-1-1'; + + case 'csunicode11utf7': + case 'unicode11utf7': + return 'UNICODE-1-1-UTF-7'; + + case 'csunknown8bit': + case 'unknown8bit': + return 'UNKNOWN-8BIT'; + + case 'ansix341968': + case 'ansix341986': + case 'ascii': + case 'cp367': + case 'csascii': + case 'ibm367': + case 'isoir6': + case 'iso646us': + case 'iso646irv1991': + case 'us': + case 'usascii': + return 'US-ASCII'; + + case 'csusdk': + case 'usdk': + return 'us-dk'; + + case 'utf7': + return 'UTF-7'; + + case 'utf8': + return 'UTF-8'; + + case 'utf16': + return 'UTF-16'; + + case 'utf16be': + return 'UTF-16BE'; + + case 'utf16le': + return 'UTF-16LE'; + + case 'utf32': + return 'UTF-32'; + + case 'utf32be': + return 'UTF-32BE'; + + case 'utf32le': + return 'UTF-32LE'; + + case 'csventurainternational': + case 'venturainternational': + return 'Ventura-International'; + + case 'csventuramath': + case 'venturamath': + return 'Ventura-Math'; + + case 'csventuraus': + case 'venturaus': + return 'Ventura-US'; + + case 'csiso70videotexsupp1': + case 'isoir70': + case 'videotexsuppl': + return 'videotex-suppl'; + + case 'csviqr': + case 'viqr': + return 'VIQR'; + + case 'csviscii': + case 'viscii': + return 'VISCII'; + + case 'cswindows31j': + case 'windows31j': + return 'Windows-31J'; + + case 'iso885911': + case 'tis620': + return 'Windows-874'; + + case 'cseuckr': + case 'euckr': + case 'windows949': + case 'csksc56011987': + case 'isoir149': + case 'korean': + case 'ksc5601': + case 'ksc56011987': + case 'ksc56011989': + return 'Windows-949'; + + case 'windows1250': + return 'windows-1250'; + + case 'windows1251': + return 'windows-1251'; + + case 'cp819': + case 'csisolatin1': + case 'ibm819': + case 'iso88591': + case 'isoir100': + case 'iso885911987': + case 'l1': + case 'latin1': + case 'windows1252': + return 'Windows-1252'; + + case 'windows1252': + return 'windows-1252'; + + case 'windows1253': + return 'windows-1253'; + + case 'csisolatin5': + case 'iso88599': + case 'isoir148': + case 'iso885991989': + case 'l5': + case 'latin5': + case 'windows1254': + return 'Windows-1254'; + + case 'windows1254': + return 'windows-1254'; + + case 'windows1255': + return 'windows-1255'; + + case 'windows1256': + return 'windows-1256'; + + case 'windows1257': + return 'windows-1257'; + + case 'windows1258': + return 'windows-1258'; + + default: + return $charset; + } + } + + function get_curl_version() + { + if (is_array($curl = curl_version())) + { + $curl = $curl['version']; + } + elseif (substr($curl, 0, 5) == 'curl/') + { + $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5)); + } + elseif (substr($curl, 0, 8) == 'libcurl/') + { + $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8)); + } + else + { + $curl = 0; + } + return $curl; + } + + function is_subclass_of($class1, $class2) + { + if (func_num_args() != 2) + { + trigger_error('Wrong parameter count for SimplePie_Misc::is_subclass_of()', E_USER_WARNING); + } + elseif (version_compare(PHP_VERSION, '5.0.3', '>=') || is_object($class1)) + { + return is_subclass_of($class1, $class2); + } + elseif (is_string($class1) && is_string($class2)) + { + if (class_exists($class1)) + { + if (class_exists($class2)) + { + $class2 = strtolower($class2); + while ($class1 = strtolower(get_parent_class($class1))) + { + if ($class1 == $class2) + { + return true; + } + } + } + } + else + { + trigger_error('Unknown class passed as parameter', E_USER_WARNNG); + } + } + return false; + } + + /** + * Strip HTML comments + * + * @access public + * @param string $data Data to strip comments from + * @return string Comment stripped string + */ + function strip_comments($data) + { + $output = ''; + while (($start = strpos($data, '', $start)) !== false) + { + $data = substr_replace($data, '', 0, $end + 3); + } + else + { + $data = ''; + } + } + return $output . $data; + } + + function parse_date($dt) + { + $parser = SimplePie_Parse_Date::get(); + return $parser->parse($dt); + } + + /** + * Decode HTML entities + * + * @static + * @access public + * @param string $data Input data + * @return string Output data + */ + function entities_decode($data) + { + $decoder = new SimplePie_Decode_HTML_Entities($data); + return $decoder->parse(); + } + + /** + * Remove RFC822 comments + * + * @access public + * @param string $data Data to strip comments from + * @return string Comment stripped string + */ + function uncomment_rfc822($string) + { + $string = (string) $string; + $position = 0; + $length = strlen($string); + $depth = 0; + + $output = ''; + + while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) + { + $output .= substr($string, $position, $pos - $position); + $position = $pos + 1; + if ($string[$pos - 1] !== '\\') + { + $depth++; + while ($depth && $position < $length) + { + $position += strcspn($string, '()', $position); + if ($string[$position - 1] === '\\') + { + $position++; + continue; + } + elseif (isset($string[$position])) + { + switch ($string[$position]) + { + case '(': + $depth++; + break; + + case ')': + $depth--; + break; + } + $position++; + } + else + { + break; + } + } + } + else + { + $output .= '('; + } + } + $output .= substr($string, $position); + + return $output; + } + + function parse_mime($mime) + { + if (($pos = strpos($mime, ';')) === false) + { + return trim($mime); + } + else + { + return trim(substr($mime, 0, $pos)); + } + } + + function htmlspecialchars_decode($string, $quote_style) + { + if (function_exists('htmlspecialchars_decode')) + { + return htmlspecialchars_decode($string, $quote_style); + } + else + { + return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style))); + } + } + + function atom_03_construct_type($attribs) + { + if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) == 'base64')) + { + $mode = SIMPLEPIE_CONSTRUCT_BASE64; + } + else + { + $mode = SIMPLEPIE_CONSTRUCT_NONE; + } + if (isset($attribs['']['type'])) + { + switch (strtolower(trim($attribs['']['type']))) + { + case 'text': + case 'text/plain': + return SIMPLEPIE_CONSTRUCT_TEXT | $mode; + + case 'html': + case 'text/html': + return SIMPLEPIE_CONSTRUCT_HTML | $mode; + + case 'xhtml': + case 'application/xhtml+xml': + return SIMPLEPIE_CONSTRUCT_XHTML | $mode; + + default: + return SIMPLEPIE_CONSTRUCT_NONE | $mode; + } + } + else + { + return SIMPLEPIE_CONSTRUCT_TEXT | $mode; + } + } + + function atom_10_construct_type($attribs) + { + if (isset($attribs['']['type'])) + { + switch (strtolower(trim($attribs['']['type']))) + { + case 'text': + return SIMPLEPIE_CONSTRUCT_TEXT; + + case 'html': + return SIMPLEPIE_CONSTRUCT_HTML; + + case 'xhtml': + return SIMPLEPIE_CONSTRUCT_XHTML; + + default: + return SIMPLEPIE_CONSTRUCT_NONE; + } + } + return SIMPLEPIE_CONSTRUCT_TEXT; + } + + function atom_10_content_construct_type($attribs) + { + if (isset($attribs['']['type'])) + { + $type = strtolower(trim($attribs['']['type'])); + switch ($type) + { + case 'text': + return SIMPLEPIE_CONSTRUCT_TEXT; + + case 'html': + return SIMPLEPIE_CONSTRUCT_HTML; + + case 'xhtml': + return SIMPLEPIE_CONSTRUCT_XHTML; + } + if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) == 'text/') + { + return SIMPLEPIE_CONSTRUCT_NONE; + } + else + { + return SIMPLEPIE_CONSTRUCT_BASE64; + } + } + else + { + return SIMPLEPIE_CONSTRUCT_TEXT; + } + } + + function is_isegment_nz_nc($string) + { + return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string); + } + + function space_separated_tokens($string) + { + $space_characters = "\x20\x09\x0A\x0B\x0C\x0D"; + $string_length = strlen($string); + + $position = strspn($string, $space_characters); + $tokens = array(); + + while ($position < $string_length) + { + $len = strcspn($string, $space_characters, $position); + $tokens[] = substr($string, $position, $len); + $position += $len; + $position += strspn($string, $space_characters, $position); + } + + return $tokens; + } + + function array_unique($array) + { + if (version_compare(PHP_VERSION, '5.2', '>=')) + { + return array_unique($array); + } + else + { + $array = (array) $array; + $new_array = array(); + $new_array_strings = array(); + foreach ($array as $key => $value) + { + if (is_object($value)) + { + if (method_exists($value, '__toString')) + { + $cmp = $value->__toString(); + } + else + { + trigger_error('Object of class ' . get_class($value) . ' could not be converted to string', E_USER_ERROR); + } + } + elseif (is_array($value)) + { + $cmp = (string) reset($value); + } + else + { + $cmp = (string) $value; + } + if (!in_array($cmp, $new_array_strings)) + { + $new_array[$key] = $value; + $new_array_strings[] = $cmp; + } + } + return $new_array; + } + } + + /** + * Converts a unicode codepoint to a UTF-8 character + * + * @static + * @access public + * @param int $codepoint Unicode codepoint + * @return string UTF-8 character + */ + function codepoint_to_utf8($codepoint) + { + static $cache = array(); + $codepoint = (int) $codepoint; + if (isset($cache[$codepoint])) + { + return $cache[$codepoint]; + } + elseif ($codepoint < 0) + { + return $cache[$codepoint] = false; + } + else if ($codepoint <= 0x7f) + { + return $cache[$codepoint] = chr($codepoint); + } + else if ($codepoint <= 0x7ff) + { + return $cache[$codepoint] = chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f)); + } + else if ($codepoint <= 0xffff) + { + return $cache[$codepoint] = chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); + } + else if ($codepoint <= 0x10ffff) + { + return $cache[$codepoint] = chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); + } + else + { + // U+FFFD REPLACEMENT CHARACTER + return $cache[$codepoint] = "\xEF\xBF\xBD"; + } + } + + /** + * Re-implementation of PHP 5's stripos() + * + * Returns the numeric position of the first occurrence of needle in the + * haystack string. + * + * @static + * @access string + * @param object $haystack + * @param string $needle Note that the needle may be a string of one or more + * characters. If needle is not a string, it is converted to an integer + * and applied as the ordinal value of a character. + * @param int $offset The optional offset parameter allows you to specify which + * character in haystack to start searching. The position returned is still + * relative to the beginning of haystack. + * @return bool If needle is not found, stripos() will return boolean false. + */ + function stripos($haystack, $needle, $offset = 0) + { + if (function_exists('stripos')) + { + return stripos($haystack, $needle, $offset); + } + else + { + if (is_string($needle)) + { + $needle = strtolower($needle); + } + elseif (is_int($needle) || is_bool($needle) || is_double($needle)) + { + $needle = strtolower(chr($needle)); + } + else + { + trigger_error('needle is not a string or an integer', E_USER_WARNING); + return false; + } + + return strpos(strtolower($haystack), $needle, $offset); + } + } + + /** + * Similar to parse_str() + * + * Returns an associative array of name/value pairs, where the value is an + * array of values that have used the same name + * + * @static + * @access string + * @param string $str The input string. + * @return array + */ + function parse_str($str) + { + $return = array(); + $str = explode('&', $str); + + foreach ($str as $section) + { + if (strpos($section, '=') !== false) + { + list($name, $value) = explode('=', $section, 2); + $return[urldecode($name)][] = urldecode($value); + } + else + { + $return[urldecode($section)][] = null; + } + } + + return $return; + } + + /** + * Detect XML encoding, as per XML 1.0 Appendix F.1 + * + * @todo Add support for EBCDIC + * @param string $data XML data + * @return array Possible encodings + */ + function xml_encoding($data) + { + // UTF-32 Big Endian BOM + if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") + { + $encoding[] = 'UTF-32BE'; + } + // UTF-32 Little Endian BOM + elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") + { + $encoding[] = 'UTF-32LE'; + } + // UTF-16 Big Endian BOM + elseif (substr($data, 0, 2) === "\xFE\xFF") + { + $encoding[] = 'UTF-16BE'; + } + // UTF-16 Little Endian BOM + elseif (substr($data, 0, 2) === "\xFF\xFE") + { + $encoding[] = 'UTF-16LE'; + } + // UTF-8 BOM + elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") + { + $encoding[] = 'UTF-8'; + } + // UTF-32 Big Endian Without BOM + elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C") + { + if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E")) + { + $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8')); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-32BE'; + } + // UTF-32 Little Endian Without BOM + elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00") + { + if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00")) + { + $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8')); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-32LE'; + } + // UTF-16 Big Endian Without BOM + elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C") + { + if ($pos = strpos($data, "\x00\x3F\x00\x3E")) + { + $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8')); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-16BE'; + } + // UTF-16 Little Endian Without BOM + elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00") + { + if ($pos = strpos($data, "\x3F\x00\x3E\x00")) + { + $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8')); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-16LE'; + } + // US-ASCII (or superset) + elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C") + { + if ($pos = strpos($data, "\x3F\x3E")) + { + $parser = new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5)); + if ($parser->parse()) + { + $encoding[] = $parser->encoding; + } + } + $encoding[] = 'UTF-8'; + } + // Fallback to UTF-8 + else + { + $encoding[] = 'UTF-8'; + } + return $encoding; + } +} + +/** + * Decode HTML Entities + * + * This implements HTML5 as of revision 967 (2007-06-28) + * + * @package SimplePie + */ +class SimplePie_Decode_HTML_Entities +{ + /** + * Data to be parsed + * + * @access private + * @var string + */ + var $data = ''; + + /** + * Currently consumed bytes + * + * @access private + * @var string + */ + var $consumed = ''; + + /** + * Position of the current byte being parsed + * + * @access private + * @var int + */ + var $position = 0; + + /** + * Create an instance of the class with the input data + * + * @access public + * @param string $data Input data + */ + function SimplePie_Decode_HTML_Entities($data) + { + $this->data = $data; + } + + /** + * Parse the input data + * + * @access public + * @return string Output data + */ + function parse() + { + while (($this->position = strpos($this->data, '&', $this->position)) !== false) + { + $this->consume(); + $this->entity(); + $this->consumed = ''; + } + return $this->data; + } + + /** + * Consume the next byte + * + * @access private + * @return mixed The next byte, or false, if there is no more data + */ + function consume() + { + if (isset($this->data[$this->position])) + { + $this->consumed .= $this->data[$this->position]; + return $this->data[$this->position++]; + } + else + { + $this->consumed = false; + return false; + } + } + + /** + * Consume a range of characters + * + * @access private + * @param string $chars Characters to consume + * @return mixed A series of characters that match the range, or false + */ + function consume_range($chars) + { + if ($len = strspn($this->data, $chars, $this->position)) + { + $data = substr($this->data, $this->position, $len); + $this->consumed .= $data; + $this->position += $len; + return $data; + } + else + { + $this->consumed = false; + return false; + } + } + + /** + * Unconsume one byte + * + * @access private + */ + function unconsume() + { + $this->consumed = substr($this->consumed, 0, -1); + $this->position--; + } + + /** + * Decode an entity + * + * @access private + */ + function entity() + { + switch ($this->consume()) + { + case "\x09": + case "\x0A": + case "\x0B": + case "\x0B": + case "\x0C": + case "\x20": + case "\x3C": + case "\x26": + case false: + break; + + case "\x23": + switch ($this->consume()) + { + case "\x78": + case "\x58": + $range = '0123456789ABCDEFabcdef'; + $hex = true; + break; + + default: + $range = '0123456789'; + $hex = false; + $this->unconsume(); + break; + } + + if ($codepoint = $this->consume_range($range)) + { + static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8"); + + if ($hex) + { + $codepoint = hexdec($codepoint); + } + else + { + $codepoint = intval($codepoint); + } + + if (isset($windows_1252_specials[$codepoint])) + { + $replacement = $windows_1252_specials[$codepoint]; + } + else + { + $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint); + } + + if ($this->consume() != ';') + { + $this->unconsume(); + } + + $consumed_length = strlen($this->consumed); + $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length); + $this->position += strlen($replacement) - $consumed_length; + } + break; + + default: + static $entities = array('Aacute' => "\xC3\x81", 'aacute' => "\xC3\xA1", 'Aacute;' => "\xC3\x81", 'aacute;' => "\xC3\xA1", 'Acirc' => "\xC3\x82", 'acirc' => "\xC3\xA2", 'Acirc;' => "\xC3\x82", 'acirc;' => "\xC3\xA2", 'acute' => "\xC2\xB4", 'acute;' => "\xC2\xB4", 'AElig' => "\xC3\x86", 'aelig' => "\xC3\xA6", 'AElig;' => "\xC3\x86", 'aelig;' => "\xC3\xA6", 'Agrave' => "\xC3\x80", 'agrave' => "\xC3\xA0", 'Agrave;' => "\xC3\x80", 'agrave;' => "\xC3\xA0", 'alefsym;' => "\xE2\x84\xB5", 'Alpha;' => "\xCE\x91", 'alpha;' => "\xCE\xB1", 'AMP' => "\x26", 'amp' => "\x26", 'AMP;' => "\x26", 'amp;' => "\x26", 'and;' => "\xE2\x88\xA7", 'ang;' => "\xE2\x88\xA0", 'apos;' => "\x27", 'Aring' => "\xC3\x85", 'aring' => "\xC3\xA5", 'Aring;' => "\xC3\x85", 'aring;' => "\xC3\xA5", 'asymp;' => "\xE2\x89\x88", 'Atilde' => "\xC3\x83", 'atilde' => "\xC3\xA3", 'Atilde;' => "\xC3\x83", 'atilde;' => "\xC3\xA3", 'Auml' => "\xC3\x84", 'auml' => "\xC3\xA4", 'Auml;' => "\xC3\x84", 'auml;' => "\xC3\xA4", 'bdquo;' => "\xE2\x80\x9E", 'Beta;' => "\xCE\x92", 'beta;' => "\xCE\xB2", 'brvbar' => "\xC2\xA6", 'brvbar;' => "\xC2\xA6", 'bull;' => "\xE2\x80\xA2", 'cap;' => "\xE2\x88\xA9", 'Ccedil' => "\xC3\x87", 'ccedil' => "\xC3\xA7", 'Ccedil;' => "\xC3\x87", 'ccedil;' => "\xC3\xA7", 'cedil' => "\xC2\xB8", 'cedil;' => "\xC2\xB8", 'cent' => "\xC2\xA2", 'cent;' => "\xC2\xA2", 'Chi;' => "\xCE\xA7", 'chi;' => "\xCF\x87", 'circ;' => "\xCB\x86", 'clubs;' => "\xE2\x99\xA3", 'cong;' => "\xE2\x89\x85", 'COPY' => "\xC2\xA9", 'copy' => "\xC2\xA9", 'COPY;' => "\xC2\xA9", 'copy;' => "\xC2\xA9", 'crarr;' => "\xE2\x86\xB5", 'cup;' => "\xE2\x88\xAA", 'curren' => "\xC2\xA4", 'curren;' => "\xC2\xA4", 'Dagger;' => "\xE2\x80\xA1", 'dagger;' => "\xE2\x80\xA0", 'dArr;' => "\xE2\x87\x93", 'darr;' => "\xE2\x86\x93", 'deg' => "\xC2\xB0", 'deg;' => "\xC2\xB0", 'Delta;' => "\xCE\x94", 'delta;' => "\xCE\xB4", 'diams;' => "\xE2\x99\xA6", 'divide' => "\xC3\xB7", 'divide;' => "\xC3\xB7", 'Eacute' => "\xC3\x89", 'eacute' => "\xC3\xA9", 'Eacute;' => "\xC3\x89", 'eacute;' => "\xC3\xA9", 'Ecirc' => "\xC3\x8A", 'ecirc' => "\xC3\xAA", 'Ecirc;' => "\xC3\x8A", 'ecirc;' => "\xC3\xAA", 'Egrave' => "\xC3\x88", 'egrave' => "\xC3\xA8", 'Egrave;' => "\xC3\x88", 'egrave;' => "\xC3\xA8", 'empty;' => "\xE2\x88\x85", 'emsp;' => "\xE2\x80\x83", 'ensp;' => "\xE2\x80\x82", 'Epsilon;' => "\xCE\x95", 'epsilon;' => "\xCE\xB5", 'equiv;' => "\xE2\x89\xA1", 'Eta;' => "\xCE\x97", 'eta;' => "\xCE\xB7", 'ETH' => "\xC3\x90", 'eth' => "\xC3\xB0", 'ETH;' => "\xC3\x90", 'eth;' => "\xC3\xB0", 'Euml' => "\xC3\x8B", 'euml' => "\xC3\xAB", 'Euml;' => "\xC3\x8B", 'euml;' => "\xC3\xAB", 'euro;' => "\xE2\x82\xAC", 'exist;' => "\xE2\x88\x83", 'fnof;' => "\xC6\x92", 'forall;' => "\xE2\x88\x80", 'frac12' => "\xC2\xBD", 'frac12;' => "\xC2\xBD", 'frac14' => "\xC2\xBC", 'frac14;' => "\xC2\xBC", 'frac34' => "\xC2\xBE", 'frac34;' => "\xC2\xBE", 'frasl;' => "\xE2\x81\x84", 'Gamma;' => "\xCE\x93", 'gamma;' => "\xCE\xB3", 'ge;' => "\xE2\x89\xA5", 'GT' => "\x3E", 'gt' => "\x3E", 'GT;' => "\x3E", 'gt;' => "\x3E", 'hArr;' => "\xE2\x87\x94", 'harr;' => "\xE2\x86\x94", 'hearts;' => "\xE2\x99\xA5", 'hellip;' => "\xE2\x80\xA6", 'Iacute' => "\xC3\x8D", 'iacute' => "\xC3\xAD", 'Iacute;' => "\xC3\x8D", 'iacute;' => "\xC3\xAD", 'Icirc' => "\xC3\x8E", 'icirc' => "\xC3\xAE", 'Icirc;' => "\xC3\x8E", 'icirc;' => "\xC3\xAE", 'iexcl' => "\xC2\xA1", 'iexcl;' => "\xC2\xA1", 'Igrave' => "\xC3\x8C", 'igrave' => "\xC3\xAC", 'Igrave;' => "\xC3\x8C", 'igrave;' => "\xC3\xAC", 'image;' => "\xE2\x84\x91", 'infin;' => "\xE2\x88\x9E", 'int;' => "\xE2\x88\xAB", 'Iota;' => "\xCE\x99", 'iota;' => "\xCE\xB9", 'iquest' => "\xC2\xBF", 'iquest;' => "\xC2\xBF", 'isin;' => "\xE2\x88\x88", 'Iuml' => "\xC3\x8F", 'iuml' => "\xC3\xAF", 'Iuml;' => "\xC3\x8F", 'iuml;' => "\xC3\xAF", 'Kappa;' => "\xCE\x9A", 'kappa;' => "\xCE\xBA", 'Lambda;' => "\xCE\x9B", 'lambda;' => "\xCE\xBB", 'lang;' => "\xE3\x80\x88", 'laquo' => "\xC2\xAB", 'laquo;' => "\xC2\xAB", 'lArr;' => "\xE2\x87\x90", 'larr;' => "\xE2\x86\x90", 'lceil;' => "\xE2\x8C\x88", 'ldquo;' => "\xE2\x80\x9C", 'le;' => "\xE2\x89\xA4", 'lfloor;' => "\xE2\x8C\x8A", 'lowast;' => "\xE2\x88\x97", 'loz;' => "\xE2\x97\x8A", 'lrm;' => "\xE2\x80\x8E", 'lsaquo;' => "\xE2\x80\xB9", 'lsquo;' => "\xE2\x80\x98", 'LT' => "\x3C", 'lt' => "\x3C", 'LT;' => "\x3C", 'lt;' => "\x3C", 'macr' => "\xC2\xAF", 'macr;' => "\xC2\xAF", 'mdash;' => "\xE2\x80\x94", 'micro' => "\xC2\xB5", 'micro;' => "\xC2\xB5", 'middot' => "\xC2\xB7", 'middot;' => "\xC2\xB7", 'minus;' => "\xE2\x88\x92", 'Mu;' => "\xCE\x9C", 'mu;' => "\xCE\xBC", 'nabla;' => "\xE2\x88\x87", 'nbsp' => "\xC2\xA0", 'nbsp;' => "\xC2\xA0", 'ndash;' => "\xE2\x80\x93", 'ne;' => "\xE2\x89\xA0", 'ni;' => "\xE2\x88\x8B", 'not' => "\xC2\xAC", 'not;' => "\xC2\xAC", 'notin;' => "\xE2\x88\x89", 'nsub;' => "\xE2\x8A\x84", 'Ntilde' => "\xC3\x91", 'ntilde' => "\xC3\xB1", 'Ntilde;' => "\xC3\x91", 'ntilde;' => "\xC3\xB1", 'Nu;' => "\xCE\x9D", 'nu;' => "\xCE\xBD", 'Oacute' => "\xC3\x93", 'oacute' => "\xC3\xB3", 'Oacute;' => "\xC3\x93", 'oacute;' => "\xC3\xB3", 'Ocirc' => "\xC3\x94", 'ocirc' => "\xC3\xB4", 'Ocirc;' => "\xC3\x94", 'ocirc;' => "\xC3\xB4", 'OElig;' => "\xC5\x92", 'oelig;' => "\xC5\x93", 'Ograve' => "\xC3\x92", 'ograve' => "\xC3\xB2", 'Ograve;' => "\xC3\x92", 'ograve;' => "\xC3\xB2", 'oline;' => "\xE2\x80\xBE", 'Omega;' => "\xCE\xA9", 'omega;' => "\xCF\x89", 'Omicron;' => "\xCE\x9F", 'omicron;' => "\xCE\xBF", 'oplus;' => "\xE2\x8A\x95", 'or;' => "\xE2\x88\xA8", 'ordf' => "\xC2\xAA", 'ordf;' => "\xC2\xAA", 'ordm' => "\xC2\xBA", 'ordm;' => "\xC2\xBA", 'Oslash' => "\xC3\x98", 'oslash' => "\xC3\xB8", 'Oslash;' => "\xC3\x98", 'oslash;' => "\xC3\xB8", 'Otilde' => "\xC3\x95", 'otilde' => "\xC3\xB5", 'Otilde;' => "\xC3\x95", 'otilde;' => "\xC3\xB5", 'otimes;' => "\xE2\x8A\x97", 'Ouml' => "\xC3\x96", 'ouml' => "\xC3\xB6", 'Ouml;' => "\xC3\x96", 'ouml;' => "\xC3\xB6", 'para' => "\xC2\xB6", 'para;' => "\xC2\xB6", 'part;' => "\xE2\x88\x82", 'permil;' => "\xE2\x80\xB0", 'perp;' => "\xE2\x8A\xA5", 'Phi;' => "\xCE\xA6", 'phi;' => "\xCF\x86", 'Pi;' => "\xCE\xA0", 'pi;' => "\xCF\x80", 'piv;' => "\xCF\x96", 'plusmn' => "\xC2\xB1", 'plusmn;' => "\xC2\xB1", 'pound' => "\xC2\xA3", 'pound;' => "\xC2\xA3", 'Prime;' => "\xE2\x80\xB3", 'prime;' => "\xE2\x80\xB2", 'prod;' => "\xE2\x88\x8F", 'prop;' => "\xE2\x88\x9D", 'Psi;' => "\xCE\xA8", 'psi;' => "\xCF\x88", 'QUOT' => "\x22", 'quot' => "\x22", 'QUOT;' => "\x22", 'quot;' => "\x22", 'radic;' => "\xE2\x88\x9A", 'rang;' => "\xE3\x80\x89", 'raquo' => "\xC2\xBB", 'raquo;' => "\xC2\xBB", 'rArr;' => "\xE2\x87\x92", 'rarr;' => "\xE2\x86\x92", 'rceil;' => "\xE2\x8C\x89", 'rdquo;' => "\xE2\x80\x9D", 'real;' => "\xE2\x84\x9C", 'REG' => "\xC2\xAE", 'reg' => "\xC2\xAE", 'REG;' => "\xC2\xAE", 'reg;' => "\xC2\xAE", 'rfloor;' => "\xE2\x8C\x8B", 'Rho;' => "\xCE\xA1", 'rho;' => "\xCF\x81", 'rlm;' => "\xE2\x80\x8F", 'rsaquo;' => "\xE2\x80\xBA", 'rsquo;' => "\xE2\x80\x99", 'sbquo;' => "\xE2\x80\x9A", 'Scaron;' => "\xC5\xA0", 'scaron;' => "\xC5\xA1", 'sdot;' => "\xE2\x8B\x85", 'sect' => "\xC2\xA7", 'sect;' => "\xC2\xA7", 'shy' => "\xC2\xAD", 'shy;' => "\xC2\xAD", 'Sigma;' => "\xCE\xA3", 'sigma;' => "\xCF\x83", 'sigmaf;' => "\xCF\x82", 'sim;' => "\xE2\x88\xBC", 'spades;' => "\xE2\x99\xA0", 'sub;' => "\xE2\x8A\x82", 'sube;' => "\xE2\x8A\x86", 'sum;' => "\xE2\x88\x91", 'sup;' => "\xE2\x8A\x83", 'sup1' => "\xC2\xB9", 'sup1;' => "\xC2\xB9", 'sup2' => "\xC2\xB2", 'sup2;' => "\xC2\xB2", 'sup3' => "\xC2\xB3", 'sup3;' => "\xC2\xB3", 'supe;' => "\xE2\x8A\x87", 'szlig' => "\xC3\x9F", 'szlig;' => "\xC3\x9F", 'Tau;' => "\xCE\xA4", 'tau;' => "\xCF\x84", 'there4;' => "\xE2\x88\xB4", 'Theta;' => "\xCE\x98", 'theta;' => "\xCE\xB8", 'thetasym;' => "\xCF\x91", 'thinsp;' => "\xE2\x80\x89", 'THORN' => "\xC3\x9E", 'thorn' => "\xC3\xBE", 'THORN;' => "\xC3\x9E", 'thorn;' => "\xC3\xBE", 'tilde;' => "\xCB\x9C", 'times' => "\xC3\x97", 'times;' => "\xC3\x97", 'TRADE;' => "\xE2\x84\xA2", 'trade;' => "\xE2\x84\xA2", 'Uacute' => "\xC3\x9A", 'uacute' => "\xC3\xBA", 'Uacute;' => "\xC3\x9A", 'uacute;' => "\xC3\xBA", 'uArr;' => "\xE2\x87\x91", 'uarr;' => "\xE2\x86\x91", 'Ucirc' => "\xC3\x9B", 'ucirc' => "\xC3\xBB", 'Ucirc;' => "\xC3\x9B", 'ucirc;' => "\xC3\xBB", 'Ugrave' => "\xC3\x99", 'ugrave' => "\xC3\xB9", 'Ugrave;' => "\xC3\x99", 'ugrave;' => "\xC3\xB9", 'uml' => "\xC2\xA8", 'uml;' => "\xC2\xA8", 'upsih;' => "\xCF\x92", 'Upsilon;' => "\xCE\xA5", 'upsilon;' => "\xCF\x85", 'Uuml' => "\xC3\x9C", 'uuml' => "\xC3\xBC", 'Uuml;' => "\xC3\x9C", 'uuml;' => "\xC3\xBC", 'weierp;' => "\xE2\x84\x98", 'Xi;' => "\xCE\x9E", 'xi;' => "\xCE\xBE", 'Yacute' => "\xC3\x9D", 'yacute' => "\xC3\xBD", 'Yacute;' => "\xC3\x9D", 'yacute;' => "\xC3\xBD", 'yen' => "\xC2\xA5", 'yen;' => "\xC2\xA5", 'yuml' => "\xC3\xBF", 'Yuml;' => "\xC5\xB8", 'yuml;' => "\xC3\xBF", 'Zeta;' => "\xCE\x96", 'zeta;' => "\xCE\xB6", 'zwj;' => "\xE2\x80\x8D", 'zwnj;' => "\xE2\x80\x8C"); + + for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++) + { + $consumed = substr($this->consumed, 1); + if (isset($entities[$consumed])) + { + $match = $consumed; + } + } + + if ($match !== null) + { + $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1); + $this->position += strlen($entities[$match]) - strlen($consumed) - 1; + } + break; + } + } +} + +/** + * Date Parser + * + * @package SimplePie + */ +class SimplePie_Parse_Date +{ + /** + * Input data + * + * @access protected + * @var string + */ + var $date; + + /** + * List of days, calendar day name => ordinal day number in the week + * + * @access protected + * @var array + */ + var $day = array( + // English + 'mon' => 1, + 'monday' => 1, + 'tue' => 2, + 'tuesday' => 2, + 'wed' => 3, + 'wednesday' => 3, + 'thu' => 4, + 'thursday' => 4, + 'fri' => 5, + 'friday' => 5, + 'sat' => 6, + 'saturday' => 6, + 'sun' => 7, + 'sunday' => 7, + // Dutch + 'maandag' => 1, + 'dinsdag' => 2, + 'woensdag' => 3, + 'donderdag' => 4, + 'vrijdag' => 5, + 'zaterdag' => 6, + 'zondag' => 7, + // French + 'lundi' => 1, + 'mardi' => 2, + 'mercredi' => 3, + 'jeudi' => 4, + 'vendredi' => 5, + 'samedi' => 6, + 'dimanche' => 7, + // German + 'montag' => 1, + 'dienstag' => 2, + 'mittwoch' => 3, + 'donnerstag' => 4, + 'freitag' => 5, + 'samstag' => 6, + 'sonnabend' => 6, + 'sonntag' => 7, + // Italian + 'lunedì' => 1, + 'martedì' => 2, + 'mercoledì' => 3, + 'giovedì' => 4, + 'venerdì' => 5, + 'sabato' => 6, + 'domenica' => 7, + // Spanish + 'lunes' => 1, + 'martes' => 2, + 'miércoles' => 3, + 'jueves' => 4, + 'viernes' => 5, + 'sábado' => 6, + 'domingo' => 7, + // Finnish + 'maanantai' => 1, + 'tiistai' => 2, + 'keskiviikko' => 3, + 'torstai' => 4, + 'perjantai' => 5, + 'lauantai' => 6, + 'sunnuntai' => 7, + // Hungarian + 'hétfÅ‘' => 1, + 'kedd' => 2, + 'szerda' => 3, + 'csütörtok' => 4, + 'péntek' => 5, + 'szombat' => 6, + 'vasárnap' => 7, + // Greek + 'Δευ' => 1, + 'ΤÏι' => 2, + 'Τετ' => 3, + 'Πεμ' => 4, + 'ΠαÏ' => 5, + 'Σαβ' => 6, + 'ΚυÏ' => 7, + ); + + /** + * List of months, calendar month name => calendar month number + * + * @access protected + * @var array + */ + var $month = array( + // English + 'jan' => 1, + 'january' => 1, + 'feb' => 2, + 'february' => 2, + 'mar' => 3, + 'march' => 3, + 'apr' => 4, + 'april' => 4, + 'may' => 5, + // No long form of May + 'jun' => 6, + 'june' => 6, + 'jul' => 7, + 'july' => 7, + 'aug' => 8, + 'august' => 8, + 'sep' => 9, + 'september' => 8, + 'oct' => 10, + 'october' => 10, + 'nov' => 11, + 'november' => 11, + 'dec' => 12, + 'december' => 12, + // Dutch + 'januari' => 1, + 'februari' => 2, + 'maart' => 3, + 'april' => 4, + 'mei' => 5, + 'juni' => 6, + 'juli' => 7, + 'augustus' => 8, + 'september' => 9, + 'oktober' => 10, + 'november' => 11, + 'december' => 12, + // French + 'janvier' => 1, + 'février' => 2, + 'mars' => 3, + 'avril' => 4, + 'mai' => 5, + 'juin' => 6, + 'juillet' => 7, + 'août' => 8, + 'septembre' => 9, + 'octobre' => 10, + 'novembre' => 11, + 'décembre' => 12, + // German + 'januar' => 1, + 'februar' => 2, + 'märz' => 3, + 'april' => 4, + 'mai' => 5, + 'juni' => 6, + 'juli' => 7, + 'august' => 8, + 'september' => 9, + 'oktober' => 10, + 'november' => 11, + 'dezember' => 12, + // Italian + 'gennaio' => 1, + 'febbraio' => 2, + 'marzo' => 3, + 'aprile' => 4, + 'maggio' => 5, + 'giugno' => 6, + 'luglio' => 7, + 'agosto' => 8, + 'settembre' => 9, + 'ottobre' => 10, + 'novembre' => 11, + 'dicembre' => 12, + // Spanish + 'enero' => 1, + 'febrero' => 2, + 'marzo' => 3, + 'abril' => 4, + 'mayo' => 5, + 'junio' => 6, + 'julio' => 7, + 'agosto' => 8, + 'septiembre' => 9, + 'setiembre' => 9, + 'octubre' => 10, + 'noviembre' => 11, + 'diciembre' => 12, + // Finnish + 'tammikuu' => 1, + 'helmikuu' => 2, + 'maaliskuu' => 3, + 'huhtikuu' => 4, + 'toukokuu' => 5, + 'kesäkuu' => 6, + 'heinäkuu' => 7, + 'elokuu' => 8, + 'suuskuu' => 9, + 'lokakuu' => 10, + 'marras' => 11, + 'joulukuu' => 12, + // Hungarian + 'január' => 1, + 'február' => 2, + 'március' => 3, + 'április' => 4, + 'május' => 5, + 'június' => 6, + 'július' => 7, + 'augusztus' => 8, + 'szeptember' => 9, + 'október' => 10, + 'november' => 11, + 'december' => 12, + // Greek + 'Ιαν' => 1, + 'Φεβ' => 2, + 'Μάώ' => 3, + 'Μαώ' => 3, + 'ΑπÏ' => 4, + 'Μάι' => 5, + 'Μαϊ' => 5, + 'Μαι' => 5, + 'ΙοÏν' => 6, + 'Ιον' => 6, + 'ΙοÏλ' => 7, + 'Ιολ' => 7, + 'ΑÏγ' => 8, + 'Αυγ' => 8, + 'Σεπ' => 9, + 'Οκτ' => 10, + 'Îοέ' => 11, + 'Δεκ' => 12, + ); + + /** + * List of timezones, abbreviation => offset from UTC + * + * @access protected + * @var array + */ + var $timezone = array( + 'ACDT' => 37800, + 'ACIT' => 28800, + 'ACST' => 34200, + 'ACT' => -18000, + 'ACWDT' => 35100, + 'ACWST' => 31500, + 'AEDT' => 39600, + 'AEST' => 36000, + 'AFT' => 16200, + 'AKDT' => -28800, + 'AKST' => -32400, + 'AMDT' => 18000, + 'AMT' => -14400, + 'ANAST' => 46800, + 'ANAT' => 43200, + 'ART' => -10800, + 'AZOST' => -3600, + 'AZST' => 18000, + 'AZT' => 14400, + 'BIOT' => 21600, + 'BIT' => -43200, + 'BOT' => -14400, + 'BRST' => -7200, + 'BRT' => -10800, + 'BST' => 3600, + 'BTT' => 21600, + 'CAST' => 18000, + 'CAT' => 7200, + 'CCT' => 23400, + 'CDT' => -18000, + 'CEDT' => 7200, + 'CET' => 3600, + 'CGST' => -7200, + 'CGT' => -10800, + 'CHADT' => 49500, + 'CHAST' => 45900, + 'CIST' => -28800, + 'CKT' => -36000, + 'CLDT' => -10800, + 'CLST' => -14400, + 'COT' => -18000, + 'CST' => -21600, + 'CVT' => -3600, + 'CXT' => 25200, + 'DAVT' => 25200, + 'DTAT' => 36000, + 'EADT' => -18000, + 'EAST' => -21600, + 'EAT' => 10800, + 'ECT' => -18000, + 'EDT' => -14400, + 'EEST' => 10800, + 'EET' => 7200, + 'EGT' => -3600, + 'EKST' => 21600, + 'EST' => -18000, + 'FJT' => 43200, + 'FKDT' => -10800, + 'FKST' => -14400, + 'FNT' => -7200, + 'GALT' => -21600, + 'GEDT' => 14400, + 'GEST' => 10800, + 'GFT' => -10800, + 'GILT' => 43200, + 'GIT' => -32400, + 'GST' => 14400, + 'GST' => -7200, + 'GYT' => -14400, + 'HAA' => -10800, + 'HAC' => -18000, + 'HADT' => -32400, + 'HAE' => -14400, + 'HAP' => -25200, + 'HAR' => -21600, + 'HAST' => -36000, + 'HAT' => -9000, + 'HAY' => -28800, + 'HKST' => 28800, + 'HMT' => 18000, + 'HNA' => -14400, + 'HNC' => -21600, + 'HNE' => -18000, + 'HNP' => -28800, + 'HNR' => -25200, + 'HNT' => -12600, + 'HNY' => -32400, + 'IRDT' => 16200, + 'IRKST' => 32400, + 'IRKT' => 28800, + 'IRST' => 12600, + 'JFDT' => -10800, + 'JFST' => -14400, + 'JST' => 32400, + 'KGST' => 21600, + 'KGT' => 18000, + 'KOST' => 39600, + 'KOVST' => 28800, + 'KOVT' => 25200, + 'KRAST' => 28800, + 'KRAT' => 25200, + 'KST' => 32400, + 'LHDT' => 39600, + 'LHST' => 37800, + 'LINT' => 50400, + 'LKT' => 21600, + 'MAGST' => 43200, + 'MAGT' => 39600, + 'MAWT' => 21600, + 'MDT' => -21600, + 'MESZ' => 7200, + 'MEZ' => 3600, + 'MHT' => 43200, + 'MIT' => -34200, + 'MNST' => 32400, + 'MSDT' => 14400, + 'MSST' => 10800, + 'MST' => -25200, + 'MUT' => 14400, + 'MVT' => 18000, + 'MYT' => 28800, + 'NCT' => 39600, + 'NDT' => -9000, + 'NFT' => 41400, + 'NMIT' => 36000, + 'NOVST' => 25200, + 'NOVT' => 21600, + 'NPT' => 20700, + 'NRT' => 43200, + 'NST' => -12600, + 'NUT' => -39600, + 'NZDT' => 46800, + 'NZST' => 43200, + 'OMSST' => 25200, + 'OMST' => 21600, + 'PDT' => -25200, + 'PET' => -18000, + 'PETST' => 46800, + 'PETT' => 43200, + 'PGT' => 36000, + 'PHOT' => 46800, + 'PHT' => 28800, + 'PKT' => 18000, + 'PMDT' => -7200, + 'PMST' => -10800, + 'PONT' => 39600, + 'PST' => -28800, + 'PWT' => 32400, + 'PYST' => -10800, + 'PYT' => -14400, + 'RET' => 14400, + 'ROTT' => -10800, + 'SAMST' => 18000, + 'SAMT' => 14400, + 'SAST' => 7200, + 'SBT' => 39600, + 'SCDT' => 46800, + 'SCST' => 43200, + 'SCT' => 14400, + 'SEST' => 3600, + 'SGT' => 28800, + 'SIT' => 28800, + 'SRT' => -10800, + 'SST' => -39600, + 'SYST' => 10800, + 'SYT' => 7200, + 'TFT' => 18000, + 'THAT' => -36000, + 'TJT' => 18000, + 'TKT' => -36000, + 'TMT' => 18000, + 'TOT' => 46800, + 'TPT' => 32400, + 'TRUT' => 36000, + 'TVT' => 43200, + 'TWT' => 28800, + 'UYST' => -7200, + 'UYT' => -10800, + 'UZT' => 18000, + 'VET' => -14400, + 'VLAST' => 39600, + 'VLAT' => 36000, + 'VOST' => 21600, + 'VUT' => 39600, + 'WAST' => 7200, + 'WAT' => 3600, + 'WDT' => 32400, + 'WEST' => 3600, + 'WFT' => 43200, + 'WIB' => 25200, + 'WIT' => 32400, + 'WITA' => 28800, + 'WKST' => 18000, + 'WST' => 28800, + 'YAKST' => 36000, + 'YAKT' => 32400, + 'YAPT' => 36000, + 'YEKST' => 21600, + 'YEKT' => 18000, + ); + + /** + * Cached PCRE for SimplePie_Parse_Date::$day + * + * @access protected + * @var string + */ + var $day_pcre; + + /** + * Cached PCRE for SimplePie_Parse_Date::$month + * + * @access protected + * @var string + */ + var $month_pcre; + + /** + * Array of user-added callback methods + * + * @access private + * @var array + */ + var $built_in = array(); + + /** + * Array of user-added callback methods + * + * @access private + * @var array + */ + var $user = array(); + + /** + * Create new SimplePie_Parse_Date object, and set self::day_pcre, + * self::month_pcre, and self::built_in + * + * @access private + */ + function SimplePie_Parse_Date() + { + $this->day_pcre = '(' . implode(array_keys($this->day), '|') . ')'; + $this->month_pcre = '(' . implode(array_keys($this->month), '|') . ')'; + + static $cache; + if (!isset($cache[get_class($this)])) + { + if (extension_loaded('Reflection')) + { + $class = new ReflectionClass(get_class($this)); + $methods = $class->getMethods(); + $all_methods = array(); + foreach ($methods as $method) + { + $all_methods[] = $method->getName(); + } + } + else + { + $all_methods = get_class_methods($this); + } + + foreach ($all_methods as $method) + { + if (strtolower(substr($method, 0, 5)) === 'date_') + { + $cache[get_class($this)][] = $method; + } + } + } + + foreach ($cache[get_class($this)] as $method) + { + $this->built_in[] = $method; + } + } + + /** + * Get the object + * + * @access public + */ + function get() + { + static $object; + if (!$object) + { + $object = new SimplePie_Parse_Date; + } + return $object; + } + + /** + * Parse a date + * + * @final + * @access public + * @param string $date Date to parse + * @return int Timestamp corresponding to date string, or false on failure + */ + function parse($date) + { + foreach ($this->user as $method) + { + if (($returned = call_user_func($method, $date)) !== false) + { + return $returned; + } + } + + foreach ($this->built_in as $method) + { + if (($returned = call_user_func(array(&$this, $method), $date)) !== false) + { + return $returned; + } + } + + return false; + } + + /** + * Add a callback method to parse a date + * + * @final + * @access public + * @param callback $callback + */ + function add_callback($callback) + { + if (is_callable($callback)) + { + $this->user[] = $callback; + } + else + { + trigger_error('User-supplied function must be a valid callback', E_USER_WARNING); + } + } + + /** + * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as + * well as allowing any of upper or lower case "T", horizontal tabs, or + * spaces to be used as the time separator (including more than one)) + * + * @access protected + * @return int Timestamp + */ + function date_w3cdtf($date) + { + static $pcre; + if (!$pcre) + { + $year = '([0-9]{4})'; + $month = $day = $hour = $minute = $second = '([0-9]{2})'; + $decimal = '([0-9]*)'; + $zone = '(?:(Z)|([+\-])([0-9]{1,2}):?([0-9]{1,2}))'; + $pcre = '/^' . $year . '(?:-?' . $month . '(?:-?' . $day . '(?:[Tt\x09\x20]+' . $hour . '(?::?' . $minute . '(?::?' . $second . '(?:.' . $decimal . ')?)?)?' . $zone . ')?)?)?$/'; + } + if (preg_match($pcre, $date, $match)) + { + /* + Capturing subpatterns: + 1: Year + 2: Month + 3: Day + 4: Hour + 5: Minute + 6: Second + 7: Decimal fraction of a second + 8: Zulu + 9: Timezone ± + 10: Timezone hours + 11: Timezone minutes + */ + + // Fill in empty matches + for ($i = count($match); $i <= 3; $i++) + { + $match[$i] = '1'; + } + + for ($i = count($match); $i <= 7; $i++) + { + $match[$i] = '0'; + } + + // Numeric timezone + if (isset($match[9]) && $match[9] !== '') + { + $timezone = $match[10] * 3600; + $timezone += $match[11] * 60; + if ($match[9] === '-') + { + $timezone = 0 - $timezone; + } + } + else + { + $timezone = 0; + } + + // Convert the number of seconds to an integer, taking decimals into account + $second = round($match[6] + $match[7] / pow(10, strlen($match[7]))); + + return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone; + } + else + { + return false; + } + } + + /** + * Remove RFC822 comments + * + * @access protected + * @param string $data Data to strip comments from + * @return string Comment stripped string + */ + function remove_rfc2822_comments($string) + { + $string = (string) $string; + $position = 0; + $length = strlen($string); + $depth = 0; + + $output = ''; + + while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) + { + $output .= substr($string, $position, $pos - $position); + $position = $pos + 1; + if ($string[$pos - 1] !== '\\') + { + $depth++; + while ($depth && $position < $length) + { + $position += strcspn($string, '()', $position); + if ($string[$position - 1] === '\\') + { + $position++; + continue; + } + elseif (isset($string[$position])) + { + switch ($string[$position]) + { + case '(': + $depth++; + break; + + case ')': + $depth--; + break; + } + $position++; + } + else + { + break; + } + } + } + else + { + $output .= '('; + } + } + $output .= substr($string, $position); + + return $output; + } + + /** + * Parse RFC2822's date format + * + * @access protected + * @return int Timestamp + */ + function date_rfc2822($date) + { + static $pcre; + if (!$pcre) + { + $wsp = '[\x09\x20]'; + $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)'; + $optional_fws = $fws . '?'; + $day_name = $this->day_pcre; + $month = $this->month_pcre; + $day = '([0-9]{1,2})'; + $hour = $minute = $second = '([0-9]{2})'; + $year = '([0-9]{2,4})'; + $num_zone = '([+\-])([0-9]{2})([0-9]{2})'; + $character_zone = '([A-Z]{1,5})'; + $zone = '(?:' . $num_zone . '|' . $character_zone . ')'; + $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i'; + } + if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match)) + { + /* + Capturing subpatterns: + 1: Day name + 2: Day + 3: Month + 4: Year + 5: Hour + 6: Minute + 7: Second + 8: Timezone ± + 9: Timezone hours + 10: Timezone minutes + 11: Alphabetic timezone + */ + + // Find the month number + $month = $this->month[strtolower($match[3])]; + + // Numeric timezone + if ($match[8] !== '') + { + $timezone = $match[9] * 3600; + $timezone += $match[10] * 60; + if ($match[8] === '-') + { + $timezone = 0 - $timezone; + } + } + // Character timezone + elseif (isset($this->timezone[strtoupper($match[11])])) + { + $timezone = $this->timezone[strtoupper($match[11])]; + } + // Assume everything else to be -0000 + else + { + $timezone = 0; + } + + // Deal with 2/3 digit years + if ($match[4] < 50) + { + $match[4] += 2000; + } + elseif ($match[4] < 1000) + { + $match[4] += 1900; + } + + // Second is optional, if it is empty set it to zero + if ($match[7] !== '') + { + $second = $match[7]; + } + else + { + $second = 0; + } + + return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone; + } + else + { + return false; + } + } + + /** + * Parse RFC850's date format + * + * @access protected + * @return int Timestamp + */ + function date_rfc850($date) + { + static $pcre; + if (!$pcre) + { + $space = '[\x09\x20]+'; + $day_name = $this->day_pcre; + $month = $this->month_pcre; + $day = '([0-9]{1,2})'; + $year = $hour = $minute = $second = '([0-9]{2})'; + $zone = '([A-Z]{1,5})'; + $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i'; + } + if (preg_match($pcre, $date, $match)) + { + /* + Capturing subpatterns: + 1: Day name + 2: Day + 3: Month + 4: Year + 5: Hour + 6: Minute + 7: Second + 8: Timezone + */ + + // Month + $month = $this->month[strtolower($match[3])]; + + // Character timezone + if (isset($this->timezone[strtoupper($match[8])])) + { + $timezone = $this->timezone[strtoupper($match[8])]; + } + // Assume everything else to be -0000 + else + { + $timezone = 0; + } + + // Deal with 2 digit year + if ($match[4] < 50) + { + $match[4] += 2000; + } + else + { + $match[4] += 1900; + } + + return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone; + } + else + { + return false; + } + } + + /** + * Parse C99's asctime()'s date format + * + * @access protected + * @return int Timestamp + */ + function date_asctime($date) + { + static $pcre; + if (!$pcre) + { + $space = '[\x09\x20]+'; + $wday_name = $this->day_pcre; + $mon_name = $this->month_pcre; + $day = '([0-9]{1,2})'; + $hour = $sec = $min = '([0-9]{2})'; + $year = '([0-9]{4})'; + $terminator = '\x0A?\x00?'; + $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i'; + } + if (preg_match($pcre, $date, $match)) + { + /* + Capturing subpatterns: + 1: Day name + 2: Month + 3: Day + 4: Hour + 5: Minute + 6: Second + 7: Year + */ + + $month = $this->month[strtolower($match[2])]; + return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]); + } + else + { + return false; + } + } + + /** + * Parse dates using strtotime() + * + * @access protected + * @return int Timestamp + */ + function date_strtotime($date) + { + $strtotime = strtotime($date); + if ($strtotime === -1 || $strtotime === false) + { + return false; + } + else + { + return $strtotime; + } + } +} + +/** + * Content-type sniffing + * + * @package SimplePie + */ +class SimplePie_Content_Type_Sniffer +{ + /** + * File object + * + * @var SimplePie_File + * @access private + */ + var $file; + + /** + * Create an instance of the class with the input file + * + * @access public + * @param SimplePie_Content_Type_Sniffer $file Input file + */ + function SimplePie_Content_Type_Sniffer($file) + { + $this->file = $file; + } + + /** + * Get the Content-Type of the specified file + * + * @access public + * @return string Actual Content-Type + */ + function get_type() + { + if (isset($this->file->headers['content-type'])) + { + if (!isset($this->file->headers['content-encoding']) + && ($this->file->headers['content-type'] === 'text/plain' + || $this->file->headers['content-type'] === 'text/plain; charset=ISO-8859-1' + || $this->file->headers['content-type'] === 'text/plain; charset=iso-8859-1')) + { + return $this->text_or_binary(); + } + + if (($pos = strpos($this->file->headers['content-type'], ';')) !== false) + { + $official = substr($this->file->headers['content-type'], 0, $pos); + } + else + { + $official = $this->file->headers['content-type']; + } + $official = strtolower($official); + + if ($official === 'unknown/unknown' + || $official === 'application/unknown') + { + return $this->unknown(); + } + elseif (substr($official, -4) === '+xml' + || $official === 'text/xml' + || $official === 'application/xml') + { + return $official; + } + elseif (substr($official, 0, 6) === 'image/') + { + if ($return = $this->image()) + { + return $return; + } + else + { + return $official; + } + } + elseif ($official === 'text/html') + { + return $this->feed_or_html(); + } + else + { + return $official; + } + } + else + { + return $this->unknown(); + } + } + + /** + * Sniff text or binary + * + * @access private + * @return string Actual Content-Type + */ + function text_or_binary() + { + if (substr($this->file->body, 0, 2) === "\xFE\xFF" + || substr($this->file->body, 0, 2) === "\xFF\xFE" + || substr($this->file->body, 0, 4) === "\x00\x00\xFE\xFF" + || substr($this->file->body, 0, 3) === "\xEF\xBB\xBF") + { + return 'text/plain'; + } + elseif (preg_match('/[\x00-\x08\x0E-\x1A\x1C-\x1F]/', $this->file->body)) + { + return 'application/octect-stream'; + } + else + { + return 'text/plain'; + } + } + + /** + * Sniff unknown + * + * @access private + * @return string Actual Content-Type + */ + function unknown() + { + $ws = strspn($this->file->body, "\x09\x0A\x0B\x0C\x0D\x20"); + if (strtolower(substr($this->file->body, $ws, 14)) === 'file->body, $ws, 5)) === 'file->body, $ws, 7)) === 'file->body, 0, 5) === '%PDF-') + { + return 'application/pdf'; + } + elseif (substr($this->file->body, 0, 11) === '%!PS-Adobe-') + { + return 'application/postscript'; + } + elseif (substr($this->file->body, 0, 6) === 'GIF87a' + || substr($this->file->body, 0, 6) === 'GIF89a') + { + return 'image/gif'; + } + elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") + { + return 'image/png'; + } + elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") + { + return 'image/jpeg'; + } + elseif (substr($this->file->body, 0, 2) === "\x42\x4D") + { + return 'image/bmp'; + } + else + { + return $this->text_or_binary(); + } + } + + /** + * Sniff images + * + * @access private + * @return string Actual Content-Type + */ + function image() + { + if (substr($this->file->body, 0, 6) === 'GIF87a' + || substr($this->file->body, 0, 6) === 'GIF89a') + { + return 'image/gif'; + } + elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") + { + return 'image/png'; + } + elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") + { + return 'image/jpeg'; + } + elseif (substr($this->file->body, 0, 2) === "\x42\x4D") + { + return 'image/bmp'; + } + else + { + return false; + } + } + + /** + * Sniff HTML + * + * @access private + * @return string Actual Content-Type + */ + function feed_or_html() + { + $len = strlen($this->file->body); + $pos = strspn($this->file->body, "\x09\x0A\x0D\x20"); + + while ($pos < $len) + { + switch ($this->file->body[$pos]) + { + case "\x09": + case "\x0A": + case "\x0D": + case "\x20": + $pos += strspn($this->file->body, "\x09\x0A\x0D\x20", $pos); + continue 2; + + case '<': + $pos++; + break; + + default: + return 'text/html'; + } + + if (substr($this->file->body, $pos, 3) === '!--') + { + $pos += 3; + if ($pos < $len && ($pos = strpos($this->file->body, '-->', $pos)) !== false) + { + $pos += 3; + } + else + { + return 'text/html'; + } + } + elseif (substr($this->file->body, $pos, 1) === '!') + { + if ($pos < $len && ($pos = strpos($this->file->body, '>', $pos)) !== false) + { + $pos++; + } + else + { + return 'text/html'; + } + } + elseif (substr($this->file->body, $pos, 1) === '?') + { + if ($pos < $len && ($pos = strpos($this->file->body, '?>', $pos)) !== false) + { + $pos += 2; + } + else + { + return 'text/html'; + } + } + elseif (substr($this->file->body, $pos, 3) === 'rss' + || substr($this->file->body, $pos, 7) === 'rdf:RDF') + { + return 'application/rss+xml'; + } + elseif (substr($this->file->body, $pos, 4) === 'feed') + { + return 'application/atom+xml'; + } + else + { + return 'text/html'; + } + } + + return 'text/html'; + } +} + +/** + * Parses the XML Declaration + * + * @package SimplePie + */ +class SimplePie_XML_Declaration_Parser +{ + /** + * XML Version + * + * @access public + * @var string + */ + var $version = '1.0'; + + /** + * Encoding + * + * @access public + * @var string + */ + var $encoding = 'UTF-8'; + + /** + * Standalone + * + * @access public + * @var bool + */ + var $standalone = false; + + /** + * Current state of the state machine + * + * @access private + * @var string + */ + var $state = 'before_version_name'; + + /** + * Input data + * + * @access private + * @var string + */ + var $data = ''; + + /** + * Input data length (to avoid calling strlen() everytime this is needed) + * + * @access private + * @var int + */ + var $data_length = 0; + + /** + * Current position of the pointer + * + * @var int + * @access private + */ + var $position = 0; + + /** + * Create an instance of the class with the input data + * + * @access public + * @param string $data Input data + */ + function SimplePie_XML_Declaration_Parser($data) + { + $this->data = $data; + $this->data_length = strlen($this->data); + } + + /** + * Parse the input data + * + * @access public + * @return bool true on success, false on failure + */ + function parse() + { + while ($this->state && $this->state !== 'emit' && $this->has_data()) + { + $state = $this->state; + $this->$state(); + } + $this->data = ''; + if ($this->state === 'emit') + { + return true; + } + else + { + $this->version = ''; + $this->encoding = ''; + $this->standalone = ''; + return false; + } + } + + /** + * Check whether there is data beyond the pointer + * + * @access private + * @return bool true if there is further data, false if not + */ + function has_data() + { + return (bool) ($this->position < $this->data_length); + } + + /** + * Advance past any whitespace + * + * @return int Number of whitespace characters passed + */ + function skip_whitespace() + { + $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position); + $this->position += $whitespace; + return $whitespace; + } + + /** + * Read value + */ + function get_value() + { + $quote = substr($this->data, $this->position, 1); + if ($quote === '"' || $quote === "'") + { + $this->position++; + $len = strcspn($this->data, $quote, $this->position); + if ($this->has_data()) + { + $value = substr($this->data, $this->position, $len); + $this->position += $len + 1; + return $value; + } + } + return false; + } + + function before_version_name() + { + if ($this->skip_whitespace()) + { + $this->state = 'version_name'; + } + else + { + $this->state = false; + } + } + + function version_name() + { + if (substr($this->data, $this->position, 7) === 'version') + { + $this->position += 7; + $this->skip_whitespace(); + $this->state = 'version_equals'; + } + else + { + $this->state = false; + } + } + + function version_equals() + { + if (substr($this->data, $this->position, 1) === '=') + { + $this->position++; + $this->skip_whitespace(); + $this->state = 'version_value'; + } + else + { + $this->state = false; + } + } + + function version_value() + { + if ($this->version = $this->get_value()) + { + $this->skip_whitespace(); + if ($this->has_data()) + { + $this->state = 'encoding_name'; + } + else + { + $this->state = 'emit'; + } + } + else + { + $this->state = 'standalone_name'; + } + } + + function encoding_name() + { + if (substr($this->data, $this->position, 8) === 'encoding') + { + $this->position += 8; + $this->skip_whitespace(); + $this->state = 'encoding_equals'; + } + else + { + $this->state = false; + } + } + + function encoding_equals() + { + if (substr($this->data, $this->position, 1) === '=') + { + $this->position++; + $this->skip_whitespace(); + $this->state = 'encoding_value'; + } + else + { + $this->state = false; + } + } + + function encoding_value() + { + if ($this->encoding = $this->get_value()) + { + $this->skip_whitespace(); + if ($this->has_data()) + { + $this->state = 'standalone_name'; + } + else + { + $this->state = 'emit'; + } + } + else + { + $this->state = false; + } + } + + function standalone_name() + { + if (substr($this->data, $this->position, 10) === 'standalone') + { + $this->position += 10; + $this->skip_whitespace(); + $this->state = 'standalone_equals'; + } + else + { + $this->state = false; + } + } + + function standalone_equals() + { + if (substr($this->data, $this->position, 1) === '=') + { + $this->position++; + $this->skip_whitespace(); + $this->state = 'standalone_value'; + } + else + { + $this->state = false; + } + } + + function standalone_value() + { + if ($standalone = $this->get_value()) + { + switch ($standalone) + { + case 'yes': + $this->standalone = true; + break; + + case 'no': + $this->standalone = false; + break; + + default: + $this->state = false; + return; + } + + $this->skip_whitespace(); + if ($this->has_data()) + { + $this->state = false; + } + else + { + $this->state = 'emit'; + } + } + else + { + $this->state = false; + } + } +} + +class SimplePie_Locator +{ + var $useragent; + var $timeout; + var $file; + var $local = array(); + var $elsewhere = array(); + var $file_class = 'SimplePie_File'; + var $cached_entities = array(); + var $http_base; + var $base; + var $base_location = 0; + var $checked_feeds = 0; + var $max_checked_feeds = 10; + var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer'; + + function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File', $max_checked_feeds = 10, $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer') + { + $this->file =& $file; + $this->file_class = $file_class; + $this->useragent = $useragent; + $this->timeout = $timeout; + $this->max_checked_feeds = $max_checked_feeds; + $this->content_type_sniffer_class = $content_type_sniffer_class; + } + + function find($type = SIMPLEPIE_LOCATOR_ALL) + { + if ($this->is_feed($this->file)) + { + return $this->file; + } + + if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) + { + $sniffer = new $this->content_type_sniffer_class($this->file); + if ($sniffer->get_type() !== 'text/html') + { + return null; + } + } + + if ($type & ~SIMPLEPIE_LOCATOR_NONE) + { + $this->get_base(); + } + + if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery()) + { + return $working; + } + + if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links()) + { + if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local)) + { + return $working; + } + + if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local)) + { + return $working; + } + + if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere)) + { + return $working; + } + + if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere)) + { + return $working; + } + } + return null; + } + + function is_feed(&$file) + { + if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE) + { + $sniffer = new $this->content_type_sniffer_class($file); + $sniffed = $sniffer->get_type(); + if (in_array($sniffed, array('application/rss+xml', 'application/rdf+xml', 'text/rdf', 'application/atom+xml', 'text/xml', 'application/xml'))) + { + return true; + } + else + { + return false; + } + } + elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL) + { + return true; + } + else + { + return false; + } + } + + function get_base() + { + $this->http_base = $this->file->url; + $this->base = $this->http_base; + $elements = SimplePie_Misc::get_element('base', $this->file->body); + foreach ($elements as $element) + { + if ($element['attribs']['href']['data'] !== '') + { + $this->base = SimplePie_Misc::absolutize_url(trim($element['attribs']['href']['data']), $this->http_base); + $this->base_location = $element['offset']; + break; + } + } + } + + function autodiscovery() + { + $links = array_merge(SimplePie_Misc::get_element('link', $this->file->body), SimplePie_Misc::get_element('a', $this->file->body), SimplePie_Misc::get_element('area', $this->file->body)); + $done = array(); + foreach ($links as $link) + { + if ($this->checked_feeds == $this->max_checked_feeds) + { + break; + } + if (isset($link['attribs']['href']['data']) && isset($link['attribs']['rel']['data'])) + { + $rel = array_unique(SimplePie_Misc::space_separated_tokens(strtolower($link['attribs']['rel']['data']))); + + if ($this->base_location < $link['offset']) + { + $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base); + } + else + { + $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base); + } + + if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !empty($link['attribs']['type']['data']) && in_array(strtolower(SimplePie_Misc::parse_mime($link['attribs']['type']['data'])), array('application/rss+xml', 'application/atom+xml')))) + { + $this->checked_feeds++; + $feed =& new $this->file_class($href, $this->timeout, 5, null, $this->useragent); + if ($this->is_feed($feed)) + { + return $feed; + } + } + $done[] = $href; + } + } + return null; + } + + function get_links() + { + $links = SimplePie_Misc::get_element('a', $this->file->body); + foreach ($links as $link) + { + if (isset($link['attribs']['href']['data'])) + { + $href = trim($link['attribs']['href']['data']); + $parsed = SimplePie_Misc::parse_url($href); + if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme'])) + { + if ($this->base_location < $link['offset']) + { + $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base); + } + else + { + $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base); + } + + $current = SimplePie_Misc::parse_url($this->file->url); + + if ($parsed['authority'] === '' || $parsed['authority'] == $current['authority']) + { + $this->local[] = $href; + } + else + { + $this->elsewhere[] = $href; + } + } + } + } + $this->local = array_unique($this->local); + $this->elsewhere = array_unique($this->elsewhere); + if (!empty($this->local) || !empty($this->elsewhere)) + { + return true; + } + return null; + } + + function extension(&$array) + { + foreach ($array as $key => $value) + { + if ($this->checked_feeds == $this->max_checked_feeds) + { + break; + } + if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml'))) + { + $this->checked_feeds++; + $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent); + if ($this->is_feed($feed)) + { + return $feed; + } + else + { + unset($array[$key]); + } + } + } + return null; + } + + function body(&$array) + { + foreach ($array as $key => $value) + { + if ($this->checked_feeds == $this->max_checked_feeds) + { + break; + } + if (preg_match('/(rss|rdf|atom|xml)/i', $value)) + { + $this->checked_feeds++; + $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent); + if ($this->is_feed($feed)) + { + return $feed; + } + else + { + unset($array[$key]); + } + } + } + return null; + } +} + +class SimplePie_Parser +{ + var $error_code; + var $error_string; + var $current_line; + var $current_column; + var $current_byte; + var $separator = ' '; + var $feed = false; + var $namespace = array(''); + var $element = array(''); + var $xml_base = array(''); + var $xml_base_explicit = array(false); + var $xml_lang = array(''); + var $data = array(); + var $datas = array(array()); + var $current_xhtml_construct = -1; + var $encoding; + + function parse(&$data, $encoding) + { + // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character + if (strtoupper($encoding) == 'US-ASCII') + { + $this->encoding = 'UTF-8'; + } + else + { + $this->encoding = $encoding; + } + + // Strip BOM: + // UTF-32 Big Endian BOM + if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") + { + $data = substr($data, 4); + } + // UTF-32 Little Endian BOM + elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") + { + $data = substr($data, 4); + } + // UTF-16 Big Endian BOM + elseif (substr($data, 0, 2) === "\xFE\xFF") + { + $data = substr($data, 2); + } + // UTF-16 Little Endian BOM + elseif (substr($data, 0, 2) === "\xFF\xFE") + { + $data = substr($data, 2); + } + // UTF-8 BOM + elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") + { + $data = substr($data, 3); + } + + if (substr($data, 0, 5) === '')) !== false) + { + $declaration = new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5)); + if ($declaration->parse()) + { + $data = substr($data, $pos + 2); + $data = 'version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' . $data; + } + else + { + $this->error_string = 'SimplePie bug! Please report this!'; + return false; + } + } + + // Work around libxml bug + $data = str_replace('<', '<', $data); + $data = str_replace('>', '>', $data); + $data = str_replace('&', '&', $data); + $data = str_replace(''', ''', $data); + $data = str_replace('"', '"', $data); + + $return = true; + + // Create the parser + $xml = xml_parser_create_ns($this->encoding, $this->separator); + xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1); + xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0); + xml_set_object($xml, $this); + xml_set_character_data_handler($xml, 'cdata'); + xml_set_element_handler($xml, 'tag_open', 'tag_close'); + + // Parse! + if (!xml_parse($xml, $data, true)) + { + $this->error_code = xml_get_error_code($xml); + $this->error_string = xml_error_string($this->error_code); + $return = false; + } + $this->current_line = xml_get_current_line_number($xml); + $this->current_column = xml_get_current_column_number($xml); + $this->current_byte = xml_get_current_byte_index($xml); + xml_parser_free($xml); + return $return; + } + + function get_error_code() + { + return $this->error_code; + } + + function get_error_string() + { + return $this->error_string; + } + + function get_current_line() + { + return $this->current_line; + } + + function get_current_column() + { + return $this->current_column; + } + + function get_current_byte() + { + return $this->current_byte; + } + + function get_data() + { + return $this->data; + } + + function tag_open($parser, $tag, $attributes) + { + if ($this->feed === 0) + { + return; + } + elseif ($this->feed == false) + { + if (in_array($tag, array( + SIMPLEPIE_NAMESPACE_ATOM_10 . $this->separator . 'feed', + SIMPLEPIE_NAMESPACE_ATOM_03 . $this->separator . 'feed', + 'rss', + SIMPLEPIE_NAMESPACE_RDF . $this->separator . 'RDF' + ))) + { + $this->feed = 1; + } + } + else + { + $this->feed++; + } + + list($this->namespace[], $this->element[]) = $this->split_ns($tag); + + $attribs = array(); + foreach ($attributes as $name => $value) + { + list($attrib_namespace, $attribute) = $this->split_ns($name); + $attribs[$attrib_namespace][$attribute] = $value; + } + + if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base'])) + { + $this->xml_base[] = SimplePie_Misc::absolutize_url($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base)); + $this->xml_base_explicit[] = true; + } + else + { + $this->xml_base[] = end($this->xml_base); + $this->xml_base_explicit[] = end($this->xml_base_explicit); + } + + if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang'])) + { + $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang']; + } + else + { + $this->xml_lang[] = end($this->xml_lang); + } + + if ($this->current_xhtml_construct >= 0) + { + $this->current_xhtml_construct++; + if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML) + { + $this->data['data'] .= '<' . end($this->element); + if (isset($attribs[''])) + { + foreach ($attribs[''] as $name => $value) + { + $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"'; + } + } + $this->data['data'] .= '>'; + } + } + else + { + $this->datas[] =& $this->data; + $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][]; + $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang)); + if ((end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] == 'xml') + || (end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] == 'xhtml')) + { + $this->current_xhtml_construct = 0; + } + } + } + + function cdata($parser, $cdata) + { + if ($this->current_xhtml_construct >= 0) + { + $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding); + } + elseif ($this->feed > 1) + { + $this->data['data'] .= $cdata; + } + } + + function tag_close($parser, $tag) + { + if (!$this->feed) + { + return; + } + + if ($this->current_xhtml_construct >= 0) + { + $this->current_xhtml_construct--; + if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'))) + { + $this->data['data'] .= 'element) . '>'; + } + } + if ($this->current_xhtml_construct == -1) + { + $this->data =& $this->datas[$this->feed]; + array_pop($this->datas); + } + + array_pop($this->element); + array_pop($this->namespace); + array_pop($this->xml_base); + array_pop($this->xml_base_explicit); + array_pop($this->xml_lang); + $this->feed--; + } + + function split_ns($string) + { + static $cache = array(); + if (!isset($cache[$string])) + { + if ($pos = strpos($string, $this->separator)) + { + static $separator_length; + if (!$separator_length) + { + $separator_length = strlen($this->separator); + } + $namespace = substr($string, 0, $pos); + $local_name = substr($string, $pos + $separator_length); + if (strtolower($namespace) === SIMPLEPIE_NAMESPACE_ITUNES) + { + $namespace = SIMPLEPIE_NAMESPACE_ITUNES; + } + + // Normalize the Media RSS namespaces + if ($namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG) + { + $namespace = SIMPLEPIE_NAMESPACE_MEDIARSS; + } + $cache[$string] = array($namespace, $local_name); + } + else + { + $cache[$string] = array('', $string); + } + } + return $cache[$string]; + } +} + +/** + * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags + */ +class SimplePie_Sanitize +{ + // Private vars + var $base; + + // Options + var $remove_div = true; + var $image_handler = ''; + var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); + var $encode_instead_of_strip = false; + var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); + var $strip_comments = false; + var $output_encoding = 'UTF-8'; + var $enable_cache = true; + var $cache_location = './cache'; + var $cache_name_function = 'md5'; + var $cache_class = 'SimplePie_Cache'; + var $file_class = 'SimplePie_File'; + var $timeout = 10; + var $useragent = ''; + var $force_fsockopen = false; + + var $replace_url_attributes = array( + 'a' => 'href', + 'area' => 'href', + 'blockquote' => 'cite', + 'del' => 'cite', + 'form' => 'action', + 'img' => array('longdesc', 'src'), + 'input' => 'src', + 'ins' => 'cite', + 'q' => 'cite' + ); + + function remove_div($enable = true) + { + $this->remove_div = (bool) $enable; + } + + function set_image_handler($page = false) + { + if ($page) + { + $this->image_handler = (string) $page; + } + else + { + $this->image_handler = false; + } + } + + function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache') + { + if (isset($enable_cache)) + { + $this->enable_cache = (bool) $enable_cache; + } + + if ($cache_location) + { + $this->cache_location = (string) $cache_location; + } + + if ($cache_name_function) + { + $this->cache_name_function = (string) $cache_name_function; + } + + if ($cache_class) + { + $this->cache_class = (string) $cache_class; + } + } + + function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false) + { + if ($file_class) + { + $this->file_class = (string) $file_class; + } + + if ($timeout) + { + $this->timeout = (string) $timeout; + } + + if ($useragent) + { + $this->useragent = (string) $useragent; + } + + if ($force_fsockopen) + { + $this->force_fsockopen = (string) $force_fsockopen; + } + } + + function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style')) + { + if ($tags) + { + if (is_array($tags)) + { + $this->strip_htmltags = $tags; + } + else + { + $this->strip_htmltags = explode(',', $tags); + } + } + else + { + $this->strip_htmltags = false; + } + } + + function encode_instead_of_strip($encode = false) + { + $this->encode_instead_of_strip = (bool) $encode; + } + + function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc')) + { + if ($attribs) + { + if (is_array($attribs)) + { + $this->strip_attributes = $attribs; + } + else + { + $this->strip_attributes = explode(',', $attribs); + } + } + else + { + $this->strip_attributes = false; + } + } + + function strip_comments($strip = false) + { + $this->strip_comments = (bool) $strip; + } + + function set_output_encoding($encoding = 'UTF-8') + { + $this->output_encoding = (string) $encoding; + } + + /** + * Set element/attribute key/value pairs of HTML attributes + * containing URLs that need to be resolved relative to the feed + * + * @access public + * @since 1.0 + * @param array $element_attribute Element/attribute key/value pairs + */ + function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite')) + { + $this->replace_url_attributes = (array) $element_attribute; + } + + function sanitize($data, $type, $base = '') + { + $data = trim($data); + if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI) + { + if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML) + { + if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data)) + { + $type |= SIMPLEPIE_CONSTRUCT_HTML; + } + else + { + $type |= SIMPLEPIE_CONSTRUCT_TEXT; + } + } + + if ($type & SIMPLEPIE_CONSTRUCT_BASE64) + { + $data = base64_decode($data); + } + + if ($type & SIMPLEPIE_CONSTRUCT_XHTML) + { + if ($this->remove_div) + { + $data = preg_replace('/^/', '', $data); + $data = preg_replace('/<\/div>$/', '', $data); + } + else + { + $data = preg_replace('/^/', '
    ', $data); + } + } + + if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML)) + { + // Strip comments + if ($this->strip_comments) + { + $data = SimplePie_Misc::strip_comments($data); + } + + // Strip out HTML tags and attributes that might cause various security problems. + // Based on recommendations by Mark Pilgrim at: + // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely + if ($this->strip_htmltags) + { + foreach ($this->strip_htmltags as $tag) + { + $pcre = "/<($tag)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$tag" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>|(\/)?>)/siU'; + while (preg_match($pcre, $data)) + { + $data = preg_replace_callback($pcre, array(&$this, 'do_strip_htmltags'), $data); + } + } + } + + if ($this->strip_attributes) + { + foreach ($this->strip_attributes as $attrib) + { + $data = preg_replace('/(<[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*)' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . trim($attrib) . '(?:\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>/', '\1\2\3>', $data); + } + } + + // Replace relative URLs + $this->base = $base; + foreach ($this->replace_url_attributes as $element => $attributes) + { + $data = $this->replace_urls($data, $element, $attributes); + } + + // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags. + if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache) + { + $images = SimplePie_Misc::get_element('img', $data); + foreach ($images as $img) + { + if (isset($img['attribs']['src']['data'])) + { + $image_url = call_user_func($this->cache_name_function, $img['attribs']['src']['data']); + $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $image_url, 'spi'); + + if ($cache->load()) + { + $img['attribs']['src']['data'] = $this->image_handler . $image_url; + $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data); + } + else + { + $file =& new $this->file_class($img['attribs']['src']['data'], $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen); + $headers = $file->headers; + + if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300))) + { + if ($cache->save(array('headers' => $file->headers, 'body' => $file->body))) + { + $img['attribs']['src']['data'] = $this->image_handler . $image_url; + $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data); + } + else + { + trigger_error("$cache->name is not writeable", E_USER_WARNING); + } + } + } + } + } + } + + // Having (possibly) taken stuff out, there may now be whitespace at the beginning/end of the data + $data = trim($data); + } + + if ($type & SIMPLEPIE_CONSTRUCT_IRI) + { + $data = SimplePie_Misc::absolutize_url($data, $base); + } + + if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI)) + { + $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8'); + } + + if ($this->output_encoding != 'UTF-8') + { + $data = SimplePie_Misc::change_encoding($data, 'UTF-8', $this->output_encoding); + } + } + return $data; + } + + function replace_urls($data, $tag, $attributes) + { + if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags)) + { + $elements = SimplePie_Misc::get_element($tag, $data); + foreach ($elements as $element) + { + if (is_array($attributes)) + { + foreach ($attributes as $attribute) + { + if (isset($element['attribs'][$attribute]['data'])) + { + $element['attribs'][$attribute]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attribute]['data'], $this->base); + $new_element = SimplePie_Misc::element_implode($element); + $data = str_replace($element['full'], $new_element, $data); + $element['full'] = $new_element; + } + } + } + elseif (isset($element['attribs'][$attributes]['data'])) + { + $element['attribs'][$attributes]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attributes]['data'], $this->base); + $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data); + } + } + } + return $data; + } + + function do_strip_htmltags($match) + { + if ($this->encode_instead_of_strip) + { + if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) + { + $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8'); + $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8'); + return "<$match[1]$match[2]>$match[3]</$match[1]>"; + } + else + { + return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8'); + } + } + elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style'))) + { + return $match[4]; + } + else + { + return ''; + } + } +} + +?> diff --git a/usr/etc/inc/smtp.inc b/usr/etc/inc/smtp.inc new file mode 100644 index 000000000..525bb3364 --- /dev/null +++ b/usr/etc/inc/smtp.inc @@ -0,0 +1,862 @@ +next_token; + } + for($character=0;$characternext_token=substr($string,$found+1); + return(substr($string,0,$found)); + } + else + { + $this->next_token=""; + return($string); + } + } + + Function OutputDebug($message) + { + $message.="\n"; + if($this->html_debug) + $message=str_replace("\n","
    \n",HtmlEntities($message)); + echo $message; + flush(); + } + + Function SetDataAccessError($error) + { + $this->error=$error; + if(function_exists("socket_get_status")) + { + $status=socket_get_status($this->connection); + if($status["timed_out"]) + $this->error.=gettext(": data access time out"); + elseif($status["eof"]) + { + $this->error.=gettext(": the server disconnected"); + $this->disconnected_error=1; + } + } + } + + Function GetLine() + { + for($line="";;) + { + if(feof($this->connection)) + { + $this->error=gettext("reached the end of data while reading from the SMTP server conection"); + return(""); + } + if(GetType($data=@fgets($this->connection,100))!="string" + || strlen($data)==0) + { + $this->SetDataAccessError(gettext("it was not possible to read line from the SMTP server")); + return(""); + } + $line.=$data; + $length=strlen($line); + if($length>=2 + && substr($line,$length-2,2)=="\r\n") + { + $line=substr($line,0,$length-2); + if($this->debug) + $this->OutputDebug("S $line"); + return($line); + } + } + } + + Function PutLine($line) + { + if($this->debug) + $this->OutputDebug("C $line"); + if(!@fputs($this->connection,"$line\r\n")) + { + $this->SetDataAccessError(gettext("it was not possible to send a line to the SMTP server")); + return(0); + } + return(1); + } + + Function PutData(&$data) + { + if(strlen($data)) + { + if($this->debug) + $this->OutputDebug("C $data"); + if(!@fputs($this->connection,$data)) + { + $this->SetDataAccessError(gettext("it was not possible to send data to the SMTP server")); + return(0); + } + } + return(1); + } + + Function VerifyResultLines($code,&$responses) + { + $responses=array(); + Unset($this->result_code); + while(strlen($line=$this->GetLine($this->connection))) + { + if(IsSet($this->result_code)) + { + if(strcmp($this->Tokenize($line," -"),$this->result_code)) + { + $this->error=$line; + return(0); + } + } + else + { + $this->result_code=$this->Tokenize($line," -"); + if(GetType($code)=="array") + { + for($codes=0;$codesresult_code,$code[$codes]);$codes++); + if($codes>=count($code)) + { + $this->error=$line; + return(0); + } + } + else + { + if(strcmp($this->result_code,$code)) + { + $this->error=$line; + return(0); + } + } + } + $responses[]=$this->Tokenize(""); + if(!strcmp($this->result_code,$this->Tokenize($line," "))) + return(1); + } + return(-1); + } + + Function FlushRecipients() + { + if($this->pending_sender) + { + if($this->VerifyResultLines("250",$responses)<=0) + return(0); + $this->pending_sender=0; + } + for(;$this->pending_recipients;$this->pending_recipients--) + { + if($this->VerifyResultLines(array("250","251"),$responses)<=0) + return(0); + } + return(1); + } + + Function ConnectToHost($domain, $port, $resolve_message) + { + if($this->ssl || $this->tls) + { + $version=explode(".",function_exists("phpversion") ? phpversion() : "3.0.7"); + $php_version=intval($version[0])*1000000+intval($version[1])*1000+intval($version[2]); + if($php_version<4003000) + return(gettext("establishing SSL connections requires at least PHP version 4.3.0")); + if(!function_exists("extension_loaded") + || !extension_loaded("openssl")) + return(gettext("establishing SSL connections requires the OpenSSL extension enabled")); + } + if(preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/',$domain)) + $ip=$domain; + else + { + if($this->debug) + $this->OutputDebug($resolve_message); + if(!strcmp($ip=@gethostbyname($domain),$domain)) + return(sprintf(gettext("could not resolve host \"%s\""), $domain)); + } + if(strlen($this->exclude_address) + && !strcmp(@gethostbyname($this->exclude_address),$ip)) + return(sprintf(gettext("domain \"%s\" resolved to an address excluded to be valid"), $domain)); + if($this->debug) + $this->OutputDebug(sprintf(gettext('Connecting to host address "%1$s" port %2$s...'), $ip, $port)); + if(($this->connection=($this->timeout ? @fsockopen(($this->ssl ? "ssl://" : "").$ip,$port,$errno,$error,$this->timeout) : @fsockopen(($this->ssl ? "ssl://" : "").$ip,$port)))) + return(""); + $error=($this->timeout ? strval($error) : "??"); + switch($error) + { + case "-3": + return(gettext("-3 socket could not be created")); + case "-4": + return(sprintf(gettext("-4 dns lookup on hostname \"%s\" failed"), $domain)); + case "-5": + return(gettext("-5 connection refused or timed out")); + case "-6": + return(gettext("-6 fdopen() call failed")); + case "-7": + return(gettext("-7 setvbuf() call failed")); + } + return(sprintf(gettext('could not connect to the host "%1$s": %2$s'), $domain, $error)); + } + + Function SASLAuthenticate($mechanisms, $credentials, &$authenticated, &$mechanism) + { + $authenticated=0; + if(!function_exists("class_exists") + || !class_exists("sasl_client_class")) + { + $this->error=gettext("it is not possible to authenticate using the specified mechanism because the SASL library class is not loaded"); + return(0); + } + $sasl=new sasl_client_class; + $sasl->SetCredential("user",$credentials["user"]); + $sasl->SetCredential("password",$credentials["password"]); + if(IsSet($credentials["realm"])) + $sasl->SetCredential("realm",$credentials["realm"]); + if(IsSet($credentials["workstation"])) + $sasl->SetCredential("workstation",$credentials["workstation"]); + if(IsSet($credentials["mode"])) + $sasl->SetCredential("mode",$credentials["mode"]); + do + { + $status=$sasl->Start($mechanisms,$message,$interactions); + } + while($status==SASL_INTERACT); + switch($status) + { + case SASL_CONTINUE: + break; + case SASL_NOMECH: + if(strlen($this->authentication_mechanism)) + { + $this->error=printf(gettext('authenticated mechanism %1$s may not be used: %2$s'), $this->authentication_mechanism, $sasl->error); + return(0); + } + break; + default: + $this->error=gettext("Could not start the SASL authentication client:") . " ".$sasl->error; + return(0); + } + if(strlen($mechanism=$sasl->mechanism)) + { + if($this->PutLine("AUTH ".$sasl->mechanism.(IsSet($message) ? " ".base64_encode($message) : ""))==0) + { + $this->error=gettext("Could not send the AUTH command"); + return(0); + } + if(!$this->VerifyResultLines(array("235","334"),$responses)) + return(0); + switch($this->result_code) + { + case "235": + $response=""; + $authenticated=1; + break; + case "334": + $response=base64_decode($responses[0]); + break; + default: + $this->error=gettext("Authentication error:") . " ".$responses[0]; + return(0); + } + for(;!$authenticated;) + { + do + { + $status=$sasl->Step($response,$message,$interactions); + } + while($status==SASL_INTERACT); + switch($status) + { + case SASL_CONTINUE: + if($this->PutLine(base64_encode($message))==0) + { + $this->error=gettext("Could not send the authentication step message"); + return(0); + } + if(!$this->VerifyResultLines(array("235","334"),$responses)) + return(0); + switch($this->result_code) + { + case "235": + $response=""; + $authenticated=1; + break; + case "334": + $response=base64_decode($responses[0]); + break; + default: + $this->error=gettext("Authentication error:") . " ".$responses[0]; + return(0); + } + break; + default: + $this->error=gettext("Could not process the SASL authentication step:") . " ".$sasl->error; + return(0); + } + } + } + return(1); + } + + /* Public methods */ + + Function Connect($domain="") + { + if(strcmp($this->state,"Disconnected")) + { + $this->error=gettext("connection is already established"); + return(0); + } + $this->disconnected_error=0; + $this->error=$error=""; + $this->esmtp_host=""; + $this->esmtp_extensions=array(); + $hosts=array(); + if($this->direct_delivery) + { + if(strlen($domain)==0) + return(1); + $hosts=$weights=$mxhosts=array(); + $getmxrr=$this->getmxrr; + if(function_exists($getmxrr) + && $getmxrr($domain,$hosts,$weights)) + { + for($host=0;$hosthost_name)) + $hosts[]=$this->host_name; + if(strlen($this->pop3_auth_host)) + { + $user=$this->user; + if(strlen($user)==0) + { + $this->error=gettext("it was not specified the POP3 authentication user"); + return(0); + } + $password=$this->password; + if(strlen($password)==0) + { + $this->error=gettext("it was not specified the POP3 authentication password"); + return(0); + } + $domain=$this->pop3_auth_host; + $this->error=$this->ConnectToHost($domain, $this->pop3_auth_port, sprintf(gettext("Resolving POP3 authentication host \"%s\"..."), $domain)); + if(strlen($this->error)) + return(0); + if(strlen($response=$this->GetLine())==0) + return(0); + if(strcmp($this->Tokenize($response," "),"+OK")) + { + $this->error=gettext("POP3 authentication server greeting was not found"); + return(0); + } + if(!$this->PutLine("USER ".$this->user) + || strlen($response=$this->GetLine())==0) + return(0); + if(strcmp($this->Tokenize($response," "),"+OK")) + { + $this->error=gettext("POP3 authentication user was not accepted:") . " ".$this->Tokenize("\r\n"); + return(0); + } + if(!$this->PutLine("PASS ".$password) + || strlen($response=$this->GetLine())==0) + return(0); + if(strcmp($this->Tokenize($response," "),"+OK")) + { + $this->error=gettext("POP3 authentication password was not accepted:") . " ".$this->Tokenize("\r\n"); + return(0); + } + fclose($this->connection); + $this->connection=0; + } + } + if(count($hosts)==0) + { + $this->error=gettext("could not determine the SMTP to connect"); + return(0); + } + for($host=0, $error="not connected";strlen($error) && $hostConnectToHost($domain, $this->host_port, sprintf(gettext("Resolving SMTP server domain \"%s\"..."), $domain)); + } + if(strlen($error)) + { + $this->error=$error; + return(0); + } + $timeout=($this->data_timeout ? $this->data_timeout : $this->timeout); + if($timeout + && function_exists("socket_set_timeout")) + socket_set_timeout($this->connection,$timeout,0); + if($this->debug) + $this->OutputDebug(sprintf(gettext("Connected to SMTP server \"%s\"."), $domain)); + if($this->VerifyResultLines("220",$responses)>0) + { + // Send our HELLO + $success = $this->hello($this->hostname()); + if ($this->tls) + $success = $this->startTLS(); + + if($success + && strlen($this->user) + && strlen($this->pop3_auth_host)==0) + { + if(!IsSet($this->esmtp_extensions["AUTH"])) + { + $this->error = gettext("server does not require authentication"); + $success=0; + } + else + { + if(strlen($this->authentication_mechanism)) + $mechanisms=array($this->authentication_mechanism); + else + { + $mechanisms=array(); + for($authentication=$this->Tokenize($this->esmtp_extensions["AUTH"]," ");strlen($authentication);$authentication=$this->Tokenize(" ")) + $mechanisms[]=$authentication; + } + $credentials=array( + "user"=>$this->user, + "password"=>$this->password + ); + if(strlen($this->realm)) + $credentials["realm"]=$this->realm; + if(strlen($this->workstation)) + $credentials["workstation"]=$this->workstation; + $success=$this->SASLAuthenticate($mechanisms,$credentials,$authenticated,$mechanism); + if(!$success + && !strcmp($mechanism,"PLAIN")) + { + /* + * Author: Russell Robinson, 25 May 2003, http://www.tectite.com/ + * Purpose: Try various AUTH PLAIN authentication methods. + */ + $mechanisms=array("PLAIN"); + $credentials=array( + "user"=>$this->user, + "password"=>$this->password + ); + if(strlen($this->realm)) + { + /* + * According to: http://www.sendmail.org/~ca/email/authrealms.html#authpwcheck_method + * some sendmails won't accept the realm, so try again without it + */ + $success=$this->SASLAuthenticate($mechanisms,$credentials,$authenticated,$mechanism); + } + if(!$success) + { + /* + * It was seen an EXIM configuration like this: + * user^password^unused + */ + $credentials["mode"]=SASL_PLAIN_EXIM_DOCUMENTATION_MODE; + $success=$this->SASLAuthenticate($mechanisms,$credentials,$authenticated,$mechanism); + } + if(!$success) + { + /* + * ... though: http://exim.work.de/exim-html-3.20/doc/html/spec_36.html + * specifies: ^user^password + */ + $credentials["mode"]=SASL_PLAIN_EXIM_MODE; + $success=$this->SASLAuthenticate($mechanisms,$credentials,$authenticated,$mechanism); + } + } + if($success + && strlen($mechanism)==0) + { + $this->error=gettext("it is not supported any of the authentication mechanisms required by the server"); + $success=0; + } + } + } + } + if($success) + { + $this->state="Connected"; + $this->connected_domain=$domain; + } + else + { + fclose($this->connection); + $this->connection=0; + } + return($success); + } + + Function hostname() { + if(!strcmp($localhost=$this->localhost,"") + && !strcmp($localhost=getenv("SERVER_NAME"),"") + && !strcmp($localhost=getenv("HOST"),"") + && !strcmp($localhost=getenv("HOSTNAME"),"") + && !strcmp($localhost=gethostname(),"")) + $localhost="localhost"; + + return $localhost; + } + + Function hello() + { + $success = 0; + $fallback = 1; + if ($this->esmtp || strlen($this->user)) { + if ($this->PutLine("EHLO ".$this->hostname())) { + if (($success_code = $this->VerifyResultLines("250",$responses)) > 0) { + $this->esmtp_host = $this->Tokenize($responses[0]," "); + for($response=1;$responseTokenize($responses[$response]," ")); + $this->esmtp_extensions[$extension]=$this->Tokenize(""); + } + $success = 1; + $fallback = 0; + } else { + if ($success_code == 0) { + $code = $this->Tokenize($this->error," -"); + switch($code) { + case "421": + $fallback=0; + break; + } + } + } + } else + $fallback=0; + } + + if ($fallback) { + if ($this->PutLine("HELO $localhost") && $this->VerifyResultLines("250",$responses)>0) + $success=1; + } + return $success; + } + + Function startTLS() { + if ($this->PutLine("STARTTLS") && $this->VerifyResultLines("220",$responses)>0) { + if (!stream_socket_enable_crypto($this->connection,true,STREAM_CRYPTO_METHOD_TLS_CLIENT)) { + return false; + } else { + // Resend HELO since session has been reset + return $this->hello($this->hostname); + } + } else + return false; + } + + Function MailFrom($sender) + { + if($this->direct_delivery) + { + switch($this->state) + { + case "Disconnected": + $this->direct_sender=$sender; + return(1); + case "Connected": + $sender=$this->direct_sender; + break; + default: + $this->error=gettext("direct delivery connection is already established and sender is already set"); + return(0); + } + } + else + { + if(strcmp($this->state,"Connected")) + { + $this->error=gettext("connection is not in the initial state"); + return(0); + } + } + $this->error=""; + if(!$this->PutLine("MAIL FROM:<$sender>")) + return(0); + if(!IsSet($this->esmtp_extensions["PIPELINING"]) + && $this->VerifyResultLines("250",$responses)<=0) + return(0); + $this->state="SenderSet"; + if(IsSet($this->esmtp_extensions["PIPELINING"])) + $this->pending_sender=1; + $this->pending_recipients=0; + return(1); + } + + Function SetRecipient($recipient) + { + if($this->direct_delivery) + { + if(GetType($at=strrpos($recipient,"@"))!="integer") + return(gettext("it was not specified a valid direct recipient")); + $domain=substr($recipient,$at+1); + switch($this->state) + { + case "Disconnected": + if(!$this->Connect($domain)) + return(0); + if(!$this->MailFrom("")) + { + $error=$this->error; + $this->Disconnect(); + $this->error=$error; + return(0); + } + break; + case "SenderSet": + case "RecipientSet": + if(strcmp($this->connected_domain,$domain)) + { + $this->error=gettext("it is not possible to deliver directly to recipients of different domains"); + return(0); + } + break; + default: + $this->error=gettext("connection is already established and the recipient is already set"); + return(0); + } + } + else + { + switch($this->state) + { + case "SenderSet": + case "RecipientSet": + break; + default: + $this->error=gettext("connection is not in the recipient setting state"); + return(0); + } + } + $this->error=""; + if(!$this->PutLine("RCPT TO:<$recipient>")) + return(0); + if(IsSet($this->esmtp_extensions["PIPELINING"])) + { + $this->pending_recipients++; + if($this->pending_recipients>=$this->maximum_piped_recipients) + { + if(!$this->FlushRecipients()) + return(0); + } + } + else + { + if($this->VerifyResultLines(array("250","251"),$responses)<=0) + return(0); + } + $this->state="RecipientSet"; + return(1); + } + + Function StartData() + { + if(strcmp($this->state,"RecipientSet")) + { + $this->error=gettext("connection is not in the start sending data state"); + return(0); + } + $this->error=""; + if(!$this->PutLine("DATA")) + return(0); + if($this->pending_recipients) + { + if(!$this->FlushRecipients()) + return(0); + } + if($this->VerifyResultLines("354",$responses)<=0) + return(0); + $this->state="SendingData"; + return(1); + } + + Function PrepareData(&$data,&$output,$preg=1) + { + if($preg + && function_exists("preg_replace")) + $output=preg_replace(array("/\n\n|\r\r/","/(^|[^\r])\n/","/\r([^\n]|\$)/D","/(^|\n)\\./"),array("\r\n\r\n","\\1\r\n","\r\n\\1","\\1.."),$data); + else + $output=ereg_replace("(^|\n)\\.","\\1..",ereg_replace("\r([^\n]|\$)","\r\n\\1",ereg_replace("(^|[^\r])\n","\\1\r\n",ereg_replace("\n\n|\r\r","\r\n\r\n",$data)))); + } + + Function SendData($data) + { + if(strcmp($this->state,"SendingData")) + { + $this->error=gettext("connection is not in the sending data state"); + return(0); + } + $this->error=""; + return($this->PutData($data)); + } + + Function EndSendingData() + { + if(strcmp($this->state,"SendingData")) + { + $this->error=gettext("connection is not in the sending data state"); + return(0); + } + $this->error=""; + if(!$this->PutLine("\r\n.") + || $this->VerifyResultLines("250",$responses)<=0) + return(0); + $this->state="Connected"; + return(1); + } + + Function ResetConnection() + { + switch($this->state) + { + case "Connected": + return(1); + case "SendingData": + $this->error="can not reset the connection while sending data"; + return(0); + case "Disconnected": + $this->error="can not reset the connection before it is established"; + return(0); + } + $this->error=""; + if(!$this->PutLine("RSET") + || $this->VerifyResultLines("250",$responses)<=0) + return(0); + $this->state="Connected"; + return(1); + } + + Function Disconnect($quit=1) + { + if(!strcmp($this->state,"Disconnected")) + { + $this->error=gettext("it was not previously established a SMTP connection"); + return(0); + } + $this->error=""; + if(!strcmp($this->state,"Connected") + && $quit + && (!$this->PutLine("QUIT") + || ($this->VerifyResultLines("221",$responses)<=0 + && !$this->disconnected_error))) + return(0); + if($this->disconnected_error) + $this->disconnected_error=0; + else + fclose($this->connection); + $this->connection=0; + $this->state="Disconnected"; + if($this->debug) + $this->OutputDebug("Disconnected."); + return(1); + } + + Function SendMessage($sender,$recipients,$headers,$body) + { + if(($success=$this->Connect())) + { + if(($success=$this->MailFrom($sender))) + { + for($recipient=0;$recipientSetRecipient($recipients[$recipient]))) + break; + } + if($success + && ($success=$this->StartData())) + { + for($header_data="",$header=0;$headerSendData($header_data."\r\n"))) + { + $this->PrepareData($body,$body_data); + $success=$this->SendData($body_data); + } + if($success) + $success=$this->EndSendingData(); + } + } + $error=$this->error; + $disconnect_success=$this->Disconnect($success); + if($success) + $success=$disconnect_success; + else + $this->error=$error; + } + return($success); + } + +}; + +?> diff --git a/usr/etc/inc/system.inc b/usr/etc/inc/system.inc new file mode 100644 index 000000000..3dead2878 --- /dev/null +++ b/usr/etc/inc/system.inc @@ -0,0 +1,2016 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/sbin/powerd /usr/bin/killall /sbin/route + pfSense_BUILDER_BINARIES: /bin/hostname /bin/ls /usr/sbin/syslogd + pfSense_BUILDER_BINARIES: /usr/sbin/pccardd /usr/local/sbin/lighttpd /bin/chmod /bin/mkdir + pfSense_BUILDER_BINARIES: /usr/bin/tar /usr/local/sbin/ntpd /usr/local/sbin/ntpdate + pfSense_BUILDER_BINARIES: /usr/bin/nohup /sbin/dmesg /usr/local/sbin/atareinit /sbin/kldload + pfSense_BUILDER_BINARIES: /usr/local/sbin/filterdns + pfSense_MODULE: utils +*/ + +function activate_powerd() { + global $config, $g; + if ($g['platform'] == 'jail') + return; + if(is_process_running("powerd")) + exec("/usr/bin/killall powerd"); + if(isset($config['system']['powerd_enable'])) { + if ($g["platform"] == "nanobsd") + exec("/sbin/kldload cpufreq"); + + $ac_mode = "hadp"; + if (!empty($config['system']['powerd_ac_mode'])) + $ac_mode = $config['system']['powerd_ac_mode']; + + $battery_mode = "hadp"; + if (!empty($config['system']['powerd_battery_mode'])) + $battery_mode = $config['system']['powerd_battery_mode']; + + $normal_mode = "hadp"; + if (!empty($config['system']['powerd_normal_mode'])) + $normal_mode = $config['system']['powerd_normal_mode']; + + mwexec("/usr/sbin/powerd -b $battery_mode -a $ac_mode -n $normal_mode"); + } +} + +function get_default_sysctl_value($id) { + global $sysctls; + + if (isset($sysctls[$id])) + return $sysctls[$id]; +} + +function activate_sysctls() { + global $config, $g; + + if ($g['platform'] == 'jail') + return; + + $sysctls = array( + "net.enc.out.ipsec_bpf_mask" => "0x0001", + "net.enc.out.ipsec_filter_mask" => "0x0001", + "net.enc.in.ipsec_bpf_mask" => "0x0002", + "net.enc.in.ipsec_filter_mask" => "0x0002" + ); + + if(is_array($config['sysctl'])) { + foreach($config['sysctl']['item'] as $tunable) { + if($tunable['value'] == "default") + $value = get_default_sysctl_value($tunable['tunable']); + else + $value = $tunable['value']; + + $sysctls[$tunable['tunable']] = $value; + } + } + + set_sysctl($sysctls); +} + +function system_resolvconf_generate($dynupdate = false) { + global $config, $g; + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_resolvconf_generate() being called $mt\n"; + } + + $syscfg = $config['system']; + + // Do not create blank domain lines, it breaks tools like dig. + if($syscfg['domain']) + $resolvconf = "domain {$syscfg['domain']}\n"; + + if (((isset($config['dnsmasq']['enable']) && (empty($config['dnsmasq']['interface']) || in_array("lo0", explode(",", $config['dnsmasq']['interface'])))) + || (isset($config['unbound']['enable'])) && (empty($config['unbound']['active_interface']) || in_array("lo0", explode(",", $config['unbound']['active_interface'])))) + && !isset($config['system']['dnslocalhost'])) + $resolvconf .= "nameserver 127.0.0.1\n"; + + if (isset($syscfg['dnsallowoverride'])) { + /* get dynamically assigned DNS servers (if any) */ + $ns = array_unique(get_searchdomains()); + foreach($ns as $searchserver) { + if($searchserver) + $resolvconf .= "search {$searchserver}\n"; + } + $ns = array_unique(get_nameservers()); + foreach($ns as $nameserver) { + if($nameserver) + $resolvconf .= "nameserver $nameserver\n"; + } + } + if (is_array($syscfg['dnsserver'])) { + foreach ($syscfg['dnsserver'] as $ns) { + if ($ns) + $resolvconf .= "nameserver $ns\n"; + } + } + + // Add EDNS support + if (isset($config['unbound']['enable']) && isset($config['unbound']['edns'])) + $resolvconf .= "options edns0\n"; + + $dnslock = lock('resolvconf', LOCK_EX); + + $fd = fopen("{$g['varetc_path']}/resolv.conf", "w"); + if (!$fd) { + printf("Error: cannot open resolv.conf in system_resolvconf_generate().\n"); + unlock($dnslock); + return 1; + } + + fwrite($fd, $resolvconf); + fclose($fd); + + if (!$g['booting']) { + /* restart dhcpd (nameservers may have changed) */ + if (!$dynupdate) + services_dhcpd_configure(); + } + + /* setup static routes for DNS servers. */ + for ($dnscounter=1; $dnscounter<5; $dnscounter++) { + /* setup static routes for dns servers */ + $dnsgw = "dns{$dnscounter}gw"; + if (isset($config['system'][$dnsgw])) { + $gwname = $config['system'][$dnsgw]; + if (($gwname <> "") && ($gwname <> "none")) { + $gatewayip = lookup_gateway_ip_by_name($gwname); + if (is_ipaddrv4($gatewayip)) { + /* dns server array starts at 0 */ + $dnscountermo = $dnscounter - 1; + mwexec("/sbin/route change -host " . $syscfg['dnsserver'][$dnscountermo] . " {$gatewayip}"); + } + if (is_ipaddrv6($gatewayip)) { + /* dns server array starts at 0 */ + $dnscountermo = $dnscounter - 1; + mwexec("/sbin/route change -host -inet6 " . $syscfg['dnsserver'][$dnscountermo] . " {$gatewayip}"); + } + } + } + } + + unlock($dnslock); + + return 0; +} + +function get_searchdomains() { + global $config, $g; + + $master_list = array(); + + // Read in dhclient nameservers + $search_list = glob("/var/etc/searchdomain_*"); + if (is_array($search_list)) { + foreach($search_list as $fdns) { + $contents = file($fdns, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if (!is_array($contents)) + continue; + foreach ($contents as $dns) { + if(is_hostname($dns)) + $master_list[] = $dns; + } + } + } + + return $master_list; +} + +function get_nameservers() { + global $config, $g; + $master_list = array(); + + // Read in dhclient nameservers + $dns_lists = glob("/var/etc/nameserver_*"); + if (is_array($dns_lists)) { + foreach($dns_lists as $fdns) { + $contents = file($fdns, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if (!is_array($contents)) + continue; + foreach ($contents as $dns) { + if(is_ipaddr($dns)) + $master_list[] = $dns; + } + } + } + + // Read in any extra nameservers + if(file_exists("/var/etc/nameservers.conf")) { + $dns_s = file("/var/etc/nameservers.conf", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if(is_array($dns_s)) { + foreach($dns_s as $dns) + if (is_ipaddr($dns)) + $master_list[] = $dns; + } + } + + return $master_list; +} + +function system_hosts_generate() { + global $config, $g; + if (isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_hosts_generate() being called $mt\n"; + } + + $syscfg = $config['system']; + $dnsmasqcfg = $config['dnsmasq']; + + $hosts = "127.0.0.1 localhost localhost.{$syscfg['domain']}\n"; + $lhosts = ""; + $dhosts = ""; + + if ($config['interfaces']['lan']) { + $cfgip = get_interface_ip("lan"); + if (is_ipaddr($cfgip)) + $hosts .= "{$cfgip} {$syscfg['hostname']}.{$syscfg['domain']} {$syscfg['hostname']}\n"; + } else { + $sysiflist = get_configured_interface_list(); + foreach ($sysiflist as $sysif) { + if (!interface_has_gateway($sysif)) { + $cfgip = get_interface_ip($sysif); + if (is_ipaddr($cfgip)) { + $hosts .= "{$cfgip} {$syscfg['hostname']}.{$syscfg['domain']} {$syscfg['hostname']}\n"; + break; + } + } + } + } + + if (isset($dnsmasqcfg['enable'])) { + if (!is_array($dnsmasqcfg['hosts'])) + $dnsmasqcfg['hosts'] = array(); + + foreach ($dnsmasqcfg['hosts'] as $host) { + if ($host['host']) + $lhosts .= "{$host['ip']} {$host['host']}.{$host['domain']} {$host['host']}\n"; + else + $lhosts .= "{$host['ip']} {$host['domain']}\n"; + if (!is_array($host['aliases']) || !is_array($host['aliases']['item'])) + continue; + foreach ($host['aliases']['item'] as $alias) { + if ($alias['host']) + $lhosts .= "{$host['ip']} {$alias['host']}.{$alias['domain']} {$alias['host']}\n"; + else + $lhosts .= "{$host['ip']} {$alias['domain']}\n"; + } + } + if (isset($dnsmasqcfg['regdhcpstatic']) && is_array($config['dhcpd'])) { + foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) + if(is_array($dhcpifconf['staticmap']) && isset($dhcpifconf['enable'])) + foreach ($dhcpifconf['staticmap'] as $host) + if ($host['ipaddr'] && $host['hostname'] && $host['domain']) + $dhosts .= "{$host['ipaddr']} {$host['hostname']}.{$host['domain']} {$host['hostname']}\n"; + else if ($host['ipaddr'] && $host['hostname'] && $dhcpifconf['domain']) + $dhosts .= "{$host['ipaddr']} {$host['hostname']}.{$dhcpifconf['domain']} {$host['hostname']}\n"; + else if ($host['ipaddr'] && $host['hostname']) + $dhosts .= "{$host['ipaddr']} {$host['hostname']}.{$syscfg['domain']} {$host['hostname']}\n"; + } + if (isset($dnsmasqcfg['regdhcpstatic']) && is_array($config['dhcpdv6'])) { + foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf) + if(is_array($dhcpifconf['staticmap']) && isset($dhcpifconf['enable'])) + foreach ($dhcpifconf['staticmap'] as $host) + if ($host['ipaddrv6'] && $host['hostname'] && $host['domain']) + $dhosts .= "{$host['ipaddrv6']} {$host['hostname']}.{$host['domain']} {$host['hostname']}\n"; + else if ($host['ipaddrv6'] && $host['hostname'] && $dhcpifconf['domain']) + $dhosts .= "{$host['ipaddrv6']} {$host['hostname']}.{$dhcpifconf['domain']} {$host['hostname']}\n"; + else if ($host['ipaddrv6'] && $host['hostname']) + $dhosts .= "{$host['ipaddrv6']} {$host['hostname']}.{$syscfg['domain']} {$host['hostname']}\n"; + } + + if (isset($dnsmasqcfg['dhcpfirst'])) + $hosts .= $dhosts . $lhosts; + else + $hosts .= $lhosts . $dhosts; + } + + /* + * Do not remove this because dhcpleases monitors with kqueue it needs to be + * killed before writing to hosts files. + */ + if (file_exists("{$g['varrun_path']}/dhcpleases.pid")) { + sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "TERM"); + @unlink("{$g['varrun_path']}/dhcpleases.pid"); + } + $fd = fopen("{$g['varetc_path']}/hosts", "w"); + if (!$fd) { + log_error("Error: cannot open hosts file in system_hosts_generate().\n"); + return 1; + } + fwrite($fd, $hosts); + fclose($fd); + + if (isset($config['unbound']['enable'])) { + require_once("unbound.inc"); + unbound_hosts_generate(); + } + + system_dhcpleases_configure(); + + return 0; +} + +function system_dhcpleases_configure() { + global $config, $g; + + if ($g['platform'] == 'jail') + return; + /* Start the monitoring process for dynamic dhcpclients. */ + if ((isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcp'])) + || (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcp']))) { + /* Make sure we do not error out */ + mwexec("/bin/mkdir -p {$g['dhcpd_chroot_path']}/var/db"); + if (!file_exists("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases")) + @touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases"); + if (isvalidpid("{$g['varrun_path']}/dhcpleases.pid")) + sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "HUP"); + else { + /* To ensure we do not start multiple instances of dhcpleases, perform some clean-up first. */ + if (is_process_running("dhcpleases")) + mwexec('/bin/pkill dhcpleases'); + @unlink("{$g['varrun_path']}/dhcpleases.pid"); + if (isset($config['unbound']['enable'])) + $dns_pid = "unbound.pid"; + else + $dns_pid = "dnsmasq.pid"; + mwexec("/usr/local/sbin/dhcpleases -l {$g['dhcpd_chroot_path']}/var/db/dhcpd.leases -d {$config['system']['domain']} -p {$g['varrun_path']}/{$dns_pid} -h {$g['varetc_path']}/hosts"); + } + } else { + sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "TERM"); + @unlink("{$g['varrun_path']}/dhcpleases.pid"); + } +} + +function system_hostname_configure() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_hostname_configure() being called $mt\n"; + } + + $syscfg = $config['system']; + + /* set hostname */ + $status = mwexec("/bin/hostname " . + escapeshellarg("{$syscfg['hostname']}.{$syscfg['domain']}")); + + /* Setup host GUID ID. This is used by ZFS. */ + mwexec("/etc/rc.d/hostid start"); + + return $status; +} + +function system_routing_configure($interface = "") { + global $config, $g; + if ($g['platform'] == 'jail') + return; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_routing_configure() being called $mt\n"; + } + + $gatewayip = ""; + $interfacegw = ""; + $foundgw = false; + $gatewayipv6 = ""; + $interfacegwv6 = ""; + $foundgwv6 = false; + /* tack on all the hard defined gateways as well */ + if (is_array($config['gateways']['gateway_item'])) { + array_map('unlink', glob("{$g['tmp_path']}/*_defaultgw{,v6}", GLOB_BRACE)); + foreach ($config['gateways']['gateway_item'] as $gateway) { + if (isset($gateway['defaultgw'])) { + if ($gateway['ipprotocol'] != "inet6" && (is_ipaddrv4($gateway['gateway']) || $gateway['gateway'] == "dynamic")) { + if(strstr($gateway['gateway'], ":")) + continue; + if ($gateway['gateway'] == "dynamic") + $gateway['gateway'] = get_interface_gateway($gateway['interface']); + $gatewayip = $gateway['gateway']; + $interfacegw = $gateway['interface']; + if (!empty($gateway['interface'])) { + $defaultif = get_real_interface($gateway['interface']); + if ($defaultif) + @file_put_contents("{$g['tmp_path']}/{$defaultif}_defaultgw", $gateway['gateway']); + } + $foundgw = true; + } else if ($gateway['ipprotocol'] == "inet6" && (is_ipaddrv6($gateway['gateway']) || $gateway['gateway'] == "dynamic")) { + if ($gateway['gateway'] == "dynamic") + $gateway['gateway'] = get_interface_gateway_v6($gateway['interface']); + $gatewayipv6 = $gateway['gateway']; + $interfacegwv6 = $gateway['interface']; + if (!empty($gateway['interface'])) { + $defaultifv6 = get_real_interface($gateway['interface']); + if ($defaultifv6) + @file_put_contents("{$g['tmp_path']}/{$defaultifv6}_defaultgwv6", $gateway['gateway']); + } + $foundgwv6 = true; + } + } + if ($foundgw === true && $foundgwv6 === true) + break; + } + } + if ($foundgw == false) { + $defaultif = get_real_interface("wan"); + $interfacegw = "wan"; + $gatewayip = get_interface_gateway("wan"); + @touch("{$g['tmp_path']}/{$defaultif}_defaultgw"); + } + if ($foundgwv6 == false) { + $defaultifv6 = get_real_interface("wan"); + $interfacegwv6 = "wan"; + $gatewayipv6 = get_interface_gateway_v6("wan"); + @touch("{$g['tmp_path']}/{$defaultif}_defaultgwv6"); + } + $dont_add_route = false; + /* if OLSRD is enabled, allow WAN to house DHCP. */ + if (is_array($config['installedpackages']['olsrd'])) { + foreach($config['installedpackages']['olsrd']['config'] as $olsrd) { + if(($olsrd['enabledyngw'] == "on") && ($olsrd['enable'] == "on")) { + $dont_add_route = true; + log_error(sprintf(gettext("Not adding default route because OLSR dynamic gateway is enabled."))); + break; + } + } + } + + if ($dont_add_route == false ) { + if (!empty($interface) && $interface != $interfacegw) + ; + else if (is_ipaddrv4($gatewayip)) { + log_error("ROUTING: setting default route to $gatewayip"); + mwexec("/sbin/route change -inet default " . escapeshellarg($gatewayip)); + } + + if (!empty($interface) && $interface != $interfacegwv6) + ; + else if (is_ipaddrv6($gatewayipv6)) { + $ifscope = ""; + if (is_linklocal($gatewayipv6)) + $ifscope = "%{$defaultifv6}"; + log_error("ROUTING: setting IPv6 default route to {$gatewayipv6}{$ifscope}"); + mwexec("/sbin/route change -inet6 default " . escapeshellarg("{$gatewayipv6}{$ifscope}")); + } + } + + system_staticroutes_configure($interface, false); + + return 0; +} + +function system_staticroutes_configure($interface = "", $update_dns = false) { + global $config, $g, $aliastable; + + $filterdns_list = array(); + + $static_routes = get_staticroutes(false, true); + if (count($static_routes)) { + $gateways_arr = return_gateways_array(false, true); + + foreach ($static_routes as $rtent) { + if (empty($gateways_arr[$rtent['gateway']])) { + log_error(sprintf(gettext("Static Routes: Gateway IP could not be found for %s"), $rtent['network'])); + continue; + } + $gateway = $gateways_arr[$rtent['gateway']]; + if (!empty($interface) && $interface != $gateway['friendlyiface']) + continue; + + $gatewayip = $gateway['gateway']; + $interfacegw = $gateway['interface']; + + $blackhole = ""; + if (!strcasecmp("Null", substr($rtent['gateway'], 0, 3))) + $blackhole = "-blackhole"; + + if (!is_fqdn($rtent['network']) && !is_subnet($rtent['network'])) + continue; + + $dnscache = array(); + if ($update_dns === true) { + if (is_subnet($rtent['network'])) + continue; + $dnscache = explode("\n", trim(compare_hostname_to_dnscache($rtent['network']))); + if (empty($dnscache)) + continue; + } + + if (is_subnet($rtent['network'])) + $ips = array($rtent['network']); + else { + if (!isset($rtent['disabled'])) + $filterdns_list[] = $rtent['network']; + $ips = add_hostname_to_watch($rtent['network']); + } + + foreach ($dnscache as $ip) { + if (in_array($ip, $ips)) + continue; + mwexec("/sbin/route delete " . escapeshellarg($ip), true); + } + + if (isset($rtent['disabled'])) { + /* XXX: This is a bit dangerous in case of routing daemons!? */ + foreach ($ips as $ip) + mwexec("/sbin/route delete " . escapeshellarg($ip), true); + continue; + } + + foreach ($ips as $ip) { + if (is_ipaddrv4($ip)) + $ip .= "/32"; + else if (is_ipaddrv6($ip)) + $ip .= "/128"; + + $inet = (is_subnetv6($ip) ? "-inet6" : "-inet"); + + $cmd = "/sbin/route change {$inet} {$blackhole} " . escapeshellarg($ip) . " "; + + if (is_subnet($ip)) + if (is_ipaddr($gatewayip)) + mwexec($cmd . escapeshellarg($gatewayip)); + else if (!empty($interfacegw)) + mwexec($cmd . "-iface " . escapeshellarg($interfacegw)); + } + } + unset($gateways_arr); + } + unset($static_routes); + + if ($update_dns === false) { + if (count($filterdns_list)) { + $interval = 60; + $hostnames = ""; + array_unique($filterdns_list); + foreach ($filterdns_list as $hostname) + $hostnames .= "cmd {$hostname} '/usr/local/sbin/pfSctl -c \"service reload routedns\"'\n"; + file_put_contents("{$g['varetc_path']}/filterdns-route.hosts", $hostnames); + unset($hostnames); + + if (isvalidpid("{$g['varrun_path']}/filterdns-route.pid")) + sigkillbypid("{$g['varrun_path']}/filterdns-route.pid", "HUP"); + else + mwexec("/usr/local/sbin/filterdns -p {$g['varrun_path']}/filterdns-route.pid -i {$interval} -c {$g['varetc_path']}/filterdns-route.hosts -d 1"); + } else { + killbypid("{$g['varrun_path']}/filterdns-route.pid"); + @unlink("{$g['varrun_path']}/filterdns-route.pid"); + } + } + unset($filterdns_list); + + return 0; +} + +function system_routing_enable() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_routing_enable() being called $mt\n"; + } + + set_sysctl(array( + "net.inet.ip.forwarding" => "1", + "net.inet6.ip6.forwarding" => "1" + )); + + return; +} + +function system_syslogd_fixup_server($server) { + /* If it's an IPv6 IP alone, encase it in brackets */ + if (is_ipaddrv6($server)) + return "[$server]"; + else + return $server; +} + +function system_syslogd_get_remote_servers($syslogcfg, $facility = "*.*") { + // Rather than repeatedly use the same code, use this function to build a list of remote servers. + $facility .= " ". + $remote_servers = ""; + $pad_to = 56; + $padding = ceil(($pad_to - strlen($facility))/8)+1; + if($syslogcfg['remoteserver']) + $remote_servers .= "{$facility}" . str_repeat("\t", $padding) . "@" . system_syslogd_fixup_server($syslogcfg['remoteserver']) . "\n"; + if($syslogcfg['remoteserver2']) + $remote_servers .= "{$facility}" . str_repeat("\t", $padding) . "@" . system_syslogd_fixup_server($syslogcfg['remoteserver2']) . "\n"; + if($syslogcfg['remoteserver3']) + $remote_servers .= "{$facility}" . str_repeat("\t", $padding) . "@" . system_syslogd_fixup_server($syslogcfg['remoteserver3']) . "\n"; + return $remote_servers; +} + +function system_syslogd_start() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_syslogd_start() being called $mt\n"; + } + + mwexec("/etc/rc.d/hostid start"); + + $syslogcfg = $config['syslog']; + + if ($g['booting']) + echo gettext("Starting syslog..."); + + if (is_process_running("fifolog_writer")) + mwexec('/bin/pkill fifolog_writer'); + + // Which logging type are we using this week?? + if (isset($config['system']['disablesyslogclog'])) { + $log_directive = ""; + $log_create_directive = "/usr/bin/touch "; + $log_size = ""; + } else if (isset($config['system']['usefifolog'])) { + $log_directive = "|/usr/sbin/fifolog_writer "; + $log_size = isset($config['syslog']['logfilesize']) ? $config['syslog']['logfilesize'] : "10240"; + $log_create_directive = "/usr/sbin/fifolog_create -s "; + } else { // Defaults to CLOG + $log_directive = "%"; + $log_size = isset($config['syslog']['logfilesize']) ? $config['syslog']['logfilesize'] : "10240"; + $log_create_directive = "/usr/local/sbin/clog -i -s "; + } + + $syslogd_extra = ""; + if (isset($syslogcfg)) { + $separatelogfacilities = array('ntp','ntpd','ntpdate','charon','openvpn','pptps','poes','l2tps','relayd','hostapd','dnsmasq','filterdns','unbound','dhcpd','dhcrelay','dhclient','dhcp6c','apinger','radvd','routed','olsrd','zebra','ospfd','bgpd','miniupnpd','filterlog'); + $syslogconf = ""; + if($config['installedpackages']['package']) { + foreach($config['installedpackages']['package'] as $package) { + if($package['logging']) { + array_push($separatelogfacilities, $package['logging']['facilityname']); + mwexec("{$log_create_directive} {$log_size} {$g['varlog_path']}/{$package['logging']['logfilename']}"); + $syslogconf .= "!{$package['logging']['facilityname']}\n*.*\t\t\t\t\t\t {$log_directive}{$g['varlog_path']}/{$package['logging']['logfilename']}\n"; + } + } + } + $facilitylist = implode(',', array_unique($separatelogfacilities)); + $syslogconf .= "!radvd,routed,olsrd,zebra,ospfd,bgpd,miniupnpd\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/routing.log\n"; + + $syslogconf .= "!ntp,ntpd,ntpdate\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/ntpd.log\n"; + + $syslogconf .= "!ppp\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/ppp.log\n"; + + $syslogconf .= "!pptps\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/pptps.log\n"; + + $syslogconf .= "!poes\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/poes.log\n"; + + $syslogconf .= "!l2tps\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/l2tps.log\n"; + + $syslogconf .= "!charon\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/ipsec.log\n"; + if (isset($syslogcfg['vpn'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!openvpn\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/openvpn.log\n"; + if (isset($syslogcfg['vpn'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!apinger\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/gateways.log\n"; + if (isset($syslogcfg['apinger'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!dnsmasq,filterdns,unbound\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/resolver.log\n"; + + $syslogconf .= "!dhcpd,dhcrelay,dhclient,dhcp6c\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/dhcpd.log\n"; + if (isset($syslogcfg['dhcp'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!relayd\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/relayd.log\n"; + if (isset($syslogcfg['relayd'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!hostapd\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/wireless.log\n"; + if (isset($syslogcfg['hostapd'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!filterlog\n"; + $syslogconf .= "*.* {$log_directive}{$g['varlog_path']}/filter.log\n"; + if (isset($syslogcfg['filter'])) + $syslogconf .= system_syslogd_get_remote_servers($syslogcfg, "*.*"); + + $syslogconf .= "!-{$facilitylist}\n"; + if (!isset($syslogcfg['disablelocallogging'])) + $syslogconf .= << "") + $portarg = "{$config['system']['webgui']['port']}"; + + if ($config['system']['webgui']['protocol'] == "https") { + // Ensure that we have a webConfigurator CERT + $cert =& lookup_cert($config['system']['webgui']['ssl-certref']); + if(!is_array($cert) && !$cert['crt'] && !$cert['prv']) { + if (!is_array($config['ca'])) + $config['ca'] = array(); + $a_ca =& $config['ca']; + if (!is_array($config['cert'])) + $config['cert'] = array(); + $a_cert =& $config['cert']; + log_error("Creating SSL Certificate for this host"); + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = gettext("webConfigurator default"); + mwexec("/usr/bin/openssl genrsa 1024 > {$g['tmp_path']}/ssl.key"); + mwexec("/usr/bin/openssl req -new -x509 -nodes -sha256 -days 2000 -key {$g['tmp_path']}/ssl.key > {$g['tmp_path']}/ssl.crt"); + $crt = file_get_contents("{$g['tmp_path']}/ssl.crt"); + $key = file_get_contents("{$g['tmp_path']}/ssl.key"); + unlink("{$g['tmp_path']}/ssl.key"); + unlink("{$g['tmp_path']}/ssl.crt"); + cert_import($cert, $crt, $key); + $a_cert[] = $cert; + $config['system']['webgui']['ssl-certref'] = $cert['refid']; + write_config(gettext("Importing HTTPS certificate")); + if(!$config['system']['webgui']['port']) + $portarg = "443"; + $ca = ca_chain($cert); + } else { + $crt = base64_decode($cert['crt']); + $key = base64_decode($cert['prv']); + if(!$config['system']['webgui']['port']) + $portarg = "443"; + $ca = ca_chain($cert); + } + } + + /* generate lighttpd configuration */ + system_generate_lighty_config("{$g['varetc_path']}/lighty-webConfigurator.conf", + $crt, $key, $ca, "lighty-webConfigurator.pid", $portarg, "/usr/local/www/", + "cert.pem", "ca.pem"); + + /* kill any running lighttpd */ + killbypid("{$g['varrun_path']}/lighty-webConfigurator.pid"); + + sleep(1); + + @unlink("{$g['varrun_path']}/lighty-webConfigurator.pid"); + + /* attempt to start lighthttpd */ + $res = mwexec("/usr/local/sbin/lighttpd -f {$g['varetc_path']}/lighty-webConfigurator.conf"); + + if ($g['booting']) { + if ($res == 0) + echo gettext("done.") . "\n"; + else + echo gettext("failed!") . "\n"; + } + + return $res; +} + +function system_generate_lighty_config($filename, + $cert, + $key, + $ca, + $pid_file, + $port = 80, + $document_root = "/usr/local/www/", + $cert_location = "cert.pem", + $ca_location = "ca.pem", + $captive_portal = false) { + + global $config, $g; + + if(!is_dir("{$g['tmp_path']}/lighttpdcompress")) + mkdir("{$g['tmp_path']}/lighttpdcompress"); + + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_generate_lighty_config() being called $mt\n"; + } + + if ($captive_portal !== false) { + $captiveportal = ",\"mod_rewrite\",\"mod_evasive\""; + $captive_portal_rewrite = "url.rewrite-once = ( \"(.*captiveportal.*)\" => \"$1\", \"(.*)\" => \"/index.php?zone={$captive_portal}&redirurl=$1\" )\n"; + + $maxprocperip = $config['captiveportal'][$captive_portal]['maxprocperip']; + if (empty($maxprocperip)) + $maxprocperip = 10; + $captive_portal_mod_evasive = "evasive.max-conns-per-ip = {$maxprocperip}"; + + $server_upload_dirs = "server.upload-dirs = ( \"{$g['tmp_path']}/captiveportal/\" )\n"; + if(!is_dir("{$g['tmp_path']}/captiveportal")) + @mkdir("{$g['tmp_path']}/captiveportal", 0555); + $server_max_request_size = "server.max-request-size = 384"; + $cgi_config = ""; + } else { + $captiveportal = ",\"mod_cgi\""; + $captive_portal_rewrite = ""; + $captive_portal_mod_evasive = ""; + $server_upload_dirs = "server.upload-dirs = ( \"{$g['upload_path']}/\", \"{$g['tmp_path']}/\", \"/var/\" )\n"; + $server_max_request_size = "server.max-request-size = 2097152"; + $cgi_config = "cgi.assign = ( \".cgi\" => \"\" )"; + } + + if (empty($port)) + $lighty_port = "80"; + else + $lighty_port = $port; + + $memory = get_memory(); + $realmem = $memory[1]; + + // Determine web GUI process settings and take into account low memory systems + if ($realmem < 255) + $max_procs = 1; + else + $max_procs = ($config['system']['webgui']['max_procs']) ? $config['system']['webgui']['max_procs'] : 2; + + // Ramp up captive portal max procs, assuming each PHP process can consume up to 64MB RAM + if ($captive_portal !== false) { + if ($realmem > 135 and $realmem < 256) { + $max_procs += 1; // 2 worker processes + } else if ($realmem > 255 and $realmem < 513) { + $max_procs += 2; // 3 worker processes + } else if ($realmem > 512) { + $max_procs += 4; // 6 worker processes + } + if ($max_procs > 1) + $max_php_children = intval($max_procs/2); + else + $max_php_children = 1; + + } else { + if ($realmem < 78) + $max_php_children = 0; + else + $max_php_children = 1; + } + + if(!isset($config['syslog']['nologlighttpd'])) { + $lighty_use_syslog = << + ( "localhost" => + ( + "socket" => "{$fast_cgi_path}", + "max-procs" => {$max_procs}, + "bin-environment" => ( + "PHP_FCGI_CHILDREN" => "{$max_php_children}", + "PHP_FCGI_MAX_REQUESTS" => "500" + ), + "bin-path" => "/usr/local/bin/php" + ) + ) +) + +EOD; + } else { + $fast_cgi_path = "{$g['varrun_path']}/php-fpm.socket"; + $fastcgi_config = << + ( "localhost" => + ( + "socket" => "{$fast_cgi_path}", + "broken-scriptfilename" => "enable" + ) + ) +) + +EOD; + } + + + $lighty_config = << "application/pdf", + ".sig" => "application/pgp-signature", + ".spl" => "application/futuresplash", + ".class" => "application/octet-stream", + ".ps" => "application/postscript", + ".torrent" => "application/x-bittorrent", + ".dvi" => "application/x-dvi", + ".gz" => "application/x-gzip", + ".pac" => "application/x-ns-proxy-autoconfig", + ".swf" => "application/x-shockwave-flash", + ".tar.gz" => "application/x-tgz", + ".tgz" => "application/x-tgz", + ".tar" => "application/x-tar", + ".zip" => "application/zip", + ".mp3" => "audio/mpeg", + ".m3u" => "audio/x-mpegurl", + ".wma" => "audio/x-ms-wma", + ".wax" => "audio/x-ms-wax", + ".ogg" => "audio/x-wav", + ".wav" => "audio/x-wav", + ".gif" => "image/gif", + ".jpg" => "image/jpeg", + ".jpeg" => "image/jpeg", + ".png" => "image/png", + ".xbm" => "image/x-xbitmap", + ".xpm" => "image/x-xpixmap", + ".xwd" => "image/x-xwindowdump", + ".css" => "text/css", + ".html" => "text/html", + ".htm" => "text/html", + ".js" => "text/javascript", + ".asc" => "text/plain", + ".c" => "text/plain", + ".conf" => "text/plain", + ".text" => "text/plain", + ".txt" => "text/plain", + ".dtd" => "text/xml", + ".xml" => "text/xml", + ".mpeg" => "video/mpeg", + ".mpg" => "video/mpeg", + ".mov" => "video/quicktime", + ".qt" => "video/quicktime", + ".avi" => "video/x-msvideo", + ".asf" => "video/x-ms-asf", + ".asx" => "video/x-ms-asf", + ".wmv" => "video/x-ms-wmv", + ".bz2" => "application/x-bzip", + ".tbz" => "application/x-bzip-compressed-tar", + ".tar.bz2" => "application/x-bzip-compressed-tar" + ) + +# Use the "Content-Type" extended attribute to obtain mime type if possible +#mimetypes.use-xattr = "enable" + +## deny access the file-extensions +# +# ~ is for backupfiles from vi, emacs, joe, ... +# .inc is often used for code includes which should in general not be part +# of the document-root +url.access-deny = ( "~", ".inc" ) + + +######### Options that are good to be but not neccesary to be changed ####### + +## bind to port (default: 80) + +EOD; + + $lighty_config .= "server.bind = \"0.0.0.0\"\n"; + $lighty_config .= "server.port = {$lighty_port}\n"; + $lighty_config .= "\$SERVER[\"socket\"] == \"0.0.0.0:{$lighty_port}\" { }\n"; + $lighty_config .= "\$SERVER[\"socket\"] == \"[::]:{$lighty_port}\" { \n"; + if($cert <> "" and $key <> "") { + $lighty_config .= "\n"; + $lighty_config .= "## ssl configuration\n"; + $lighty_config .= "ssl.engine = \"enable\"\n"; + $lighty_config .= "ssl.pemfile = \"{$g['varetc_path']}/{$cert_location}\"\n\n"; + if($ca <> "") + $lighty_config .= "ssl.ca-file = \"{$g['varetc_path']}/{$ca_location}\"\n\n"; + } + $lighty_config .= " }\n"; + + + $lighty_config .= << "access 50 hours", + ) + +EOD; + + $cert = str_replace("\r", "", $cert); + $key = str_replace("\r", "", $key); + $ca = str_replace("\r", "", $ca); + + $cert = str_replace("\n\n", "\n", $cert); + $key = str_replace("\n\n", "\n", $key); + $ca = str_replace("\n\n", "\n", $ca); + + if($cert <> "" and $key <> "") { + $fd = fopen("{$g['varetc_path']}/{$cert_location}", "w"); + if (!$fd) { + printf(gettext("Error: cannot open cert.pem in system_webgui_start().%s"), "\n"); + return 1; + } + chmod("{$g['varetc_path']}/{$cert_location}", 0600); + fwrite($fd, $cert); + fwrite($fd, "\n"); + fwrite($fd, $key); + fclose($fd); + if(!(empty($ca) || (strlen(trim($ca)) == 0))) { + $fd = fopen("{$g['varetc_path']}/{$ca_location}", "w"); + if (!$fd) { + printf(gettext("Error: cannot open ca.pem in system_webgui_start().%s"), "\n"); + return 1; + } + chmod("{$g['varetc_path']}/{$ca_location}", 0600); + fwrite($fd, $ca); + fclose($fd); + } + $lighty_config .= "\n"; + $lighty_config .= "## " . gettext("ssl configuration") . "\n"; + $lighty_config .= "ssl.engine = \"enable\"\n"; + $lighty_config .= "ssl.pemfile = \"{$g['varetc_path']}/{$cert_location}\"\n\n"; + + // Harden SSL a bit for PCI conformance testing + $lighty_config .= "ssl.use-sslv2 = \"disable\"\n"; + + /* Hifn accelerators do NOT work with the BEAST mitigation code. Do not allow it to be enabled if a Hifn card has been detected. */ + $fd = @fopen("{$g['varlog_path']}/dmesg.boot", "r"); + if ($fd) { + while (!feof($fd)) { + $dmesgl = fgets($fd); + if (preg_match("/^hifn.: (.*?),/", $dmesgl, $matches) && isset($config['system']['webgui']['beast_protection'])) { + unset($config['system']['webgui']['beast_protection']); + log_error("BEAST Protection disabled because a conflicting cryptographic accelerator card has been detected (" . $matches[1] . ")"); + break; + } + } + fclose($fd); + } + + if (isset($config['system']['webgui']['beast_protection'])) { + $lighty_config .= "ssl.honor-cipher-order = \"enable\"\n"; + $lighty_config .= "ssl.cipher-list = \"ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4-SHA:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM\"\n"; + } else { + $lighty_config .= "ssl.cipher-list = \"DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:CAMELLIA256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-DSS-CAMELLIA128-SHA:CAMELLIA128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:RC4-SHA:RC4-MD5:!aNULL:!eNULL:!3DES:@STRENGTH\"\n"; + } + + if(!(empty($ca) || (strlen(trim($ca)) == 0))) + $lighty_config .= "ssl.ca-file = \"{$g['varetc_path']}/{$ca_location}\"\n\n"; + } + + // Add HTTP to HTTPS redirect + if ($captive_portal === false && $config['system']['webgui']['protocol'] == "https" && !isset($config['system']['webgui']['disablehttpredirect'])) { + if($lighty_port != "443") + $redirectport = ":{$lighty_port}"; + $lighty_config .= << "https://%1{$redirectport}/$1" ) + } +} +\$SERVER["socket"] == "[::]:80" { + \$HTTP["host"] =~ "(.*)" { + url.redirect = ( "^/(.*)" => "https://%1{$redirectport}/$1" ) + } +} +EOD; + } + + $fd = fopen("{$filename}", "w"); + if (!$fd) { + printf(gettext("Error: cannot open %s in system_generate_lighty_config().%s"), $filename, "\n"); + return 1; + } + fwrite($fd, $lighty_config); + fclose($fd); + + return 0; + +} + +function system_timezone_configure() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_timezone_configure() being called $mt\n"; + } + + $syscfg = $config['system']; + + if ($g['booting']) + echo gettext("Setting timezone..."); + + /* extract appropriate timezone file */ + $timezone = $syscfg['timezone']; + if ($timezone) { + exec('/usr/bin/tar -tvzf /usr/share/zoneinfo.tgz', $tzs); + foreach ($tzs as $tz) { + if (preg_match(",{$timezone}$,", $tz)) + break; + if (preg_match(",{$timezone} link to *(.*)$,", $tz, $matches)) { + $timezone = $matches[1]; + break; + } + } + } else + $timezone = "Etc/UTC"; + + conf_mount_rw(); + + exec("LANG=C /usr/bin/tar xzfO /usr/share/zoneinfo.tgz " . + escapeshellarg($timezone) . " > /etc/localtime"); + + mwexec("sync"); + conf_mount_ro(); + + if ($g['booting']) + echo gettext("done.") . "\n"; +} + +function system_ntp_setup_gps($serialport) { + global $config, $g; + $gps_device = '/dev/gps0'; + $serialport = '/dev/'.$serialport; + + if (!file_exists($serialport)) + return false; + + conf_mount_rw(); + // Create symlink that ntpd requires + unlink_if_exists($gps_device); + symlink($serialport, $gps_device); + + /* Send the following to the GPS port to initialize the GPS */ + if (is_array($config['ntpd']) && is_array($config['ntpd']['gps']) && !empty($config['ntpd']['gps']['type'])) { + $gps_init = base64_decode($config['ntpd']['gps']['initcmd']); + }else{ + $gps_init = base64_decode('JFBVQlgsNDAsR1NWLDAsMCwwLDAqNTkNCiRQVUJYLDQwLEdMTCwwLDAsMCwwKjVDDQokUFVCWCw0MCxaREEsMCwwLDAsMCo0NA0KJFBVQlgsNDAsVlRHLDAsMCwwLDAqNUUNCiRQVUJYLDQwLEdTViwwLDAsMCwwKjU5DQokUFVCWCw0MCxHU0EsMCwwLDAsMCo0RQ0KJFBVQlgsNDAsR0dBLDAsMCwwLDANCiRQVUJYLDQwLFRYVCwwLDAsMCwwDQokUFVCWCw0MCxSTUMsMCwwLDAsMCo0Ng0KJFBVQlgsNDEsMSwwMDA3LDAwMDMsNDgwMCwwDQokUFVCWCw0MCxaREEsMSwxLDEsMQ=='); + } + + /* XXX: Why not file_put_contents to the device */ + @file_put_contents('/tmp/gps.init', $gps_init); + `cat /tmp/gps.init > $serialport`; + + /* Add /etc/remote entry in case we need to read from the GPS with tip */ + if (intval(`grep -c '^gps0' /etc/remote`) == 0) { + $gpsbaud = '4800'; + if (is_array($config['ntpd']) && is_array($config['ntpd']['gps']) && !empty($config['ntpd']['gps']['speed'])) { + switch($config['ntpd']['gps']['speed']) { + case '16': + $gpsbaud = '9600'; + break; + case '32': + $gpsbaud = '19200'; + break; + case '48': + $gpsbaud = '38400'; + break; + case '64': + $gpsbaud = '57600'; + break; + case '80': + $gpsbaud = '115200'; + break; + } + } + @file_put_contents("/etc/remote", "gps0:dv={$serialport}:br#{$gpsbaud}:pa=none:", FILE_APPEND); + } + + conf_mount_ro(); + + return true; +} + +function system_ntp_setup_pps($serialport) { + global $config, $g; + + $pps_device = '/dev/pps0'; + $serialport = '/dev/'.$serialport; + + if (!file_exists($serialport)) + return false; + + conf_mount_rw(); + // Create symlink that ntpd requires + unlink_if_exists($pps_device); + @symlink($serialport, $pps_device); + + conf_mount_ro(); + + return true; +} + + +function system_ntp_configure($start_ntpd=true) { + global $config, $g; + + $driftfile = "/var/db/ntpd.drift"; + $statsdir = "/var/log/ntp"; + $gps_device = '/dev/gps0'; + + if ($g['platform'] == 'jail') + return; + + safe_mkdir($statsdir); + + if (!is_array($config['ntpd'])) + $config['ntpd'] = array(); + + $ntpcfg = "# \n"; + $ntpcfg .= "# pfSense ntp configuration file \n"; + $ntpcfg .= "# \n\n"; + $ntpcfg .= "tinker panic 0 \n"; + + /* Add Orphan mode */ + $ntpcfg .= "# Orphan mode stratum\n"; + $ntpcfg .= 'tos orphan '; + if (!empty($config['ntpd']['orphan'])) { + $ntpcfg .= $config['ntpd']['orphan']; + }else{ + $ntpcfg .= '12'; + } + $ntpcfg .= "\n"; + + /* Add PPS configuration */ + if (!empty($config['ntpd']['pps']) + && file_exists('/dev/'.$config['ntpd']['pps']['port']) + && system_ntp_setup_pps($config['ntpd']['pps']['port'])) { + $ntpcfg .= "\n"; + $ntpcfg .= "# PPS Setup\n"; + $ntpcfg .= 'server 127.127.22.0'; + $ntpcfg .= ' minpoll 4 maxpoll 4'; + if (empty($config['ntpd']['pps']['prefer'])) { /*note: this one works backwards */ + $ntpcfg .= ' prefer'; + } + if (!empty($config['ntpd']['pps']['noselect'])) { + $ntpcfg .= ' noselect '; + } + $ntpcfg .= "\n"; + $ntpcfg .= 'fudge 127.127.22.0'; + if (!empty($config['ntpd']['pps']['fudge1'])) { + $ntpcfg .= ' time1 '; + $ntpcfg .= $config['ntpd']['pps']['fudge1']; + } + if (!empty($config['ntpd']['pps']['flag2'])) { + $ntpcfg .= ' flag2 1'; + } + if (!empty($config['ntpd']['pps']['flag3'])) { + $ntpcfg .= ' flag3 1'; + }else{ + $ntpcfg .= ' flag3 0'; + } + if (!empty($config['ntpd']['pps']['flag4'])) { + $ntpcfg .= ' flag4 1'; + } + if (!empty($config['ntpd']['pps']['refid'])) { + $ntpcfg .= ' refid '; + $ntpcfg .= $config['ntpd']['pps']['refid']; + } + $ntpcfg .= "\n"; + } + /* End PPS configuration */ + + /* Add GPS configuration */ + if (!empty($config['ntpd']['gps']) + && file_exists('/dev/'.$config['ntpd']['gps']['port']) + && system_ntp_setup_gps($config['ntpd']['gps']['port'])) { + $ntpcfg .= "\n"; + $ntpcfg .= "# GPS Setup\n"; + $ntpcfg .= 'server 127.127.20.0 mode '; + if (!empty($config['ntpd']['gps']['nmea']) || !empty($config['ntpd']['gps']['speed']) || !empty($config['ntpd']['gps']['subsec'])) { + if (!empty($config['ntpd']['gps']['nmea'])) { + $ntpmode = (int) $config['ntpd']['gps']['nmea']; + } + if (!empty($config['ntpd']['gps']['speed'])) { + $ntpmode += (int) $config['ntpd']['gps']['speed']; + } + if (!empty($config['ntpd']['gps']['subsec'])) { + $ntpmode += 128; + } + $ntpcfg .= (string) $ntpmode; + }else{ + $ntpcfg .= '0'; + } + $ntpcfg .= ' minpoll 4 maxpoll 4'; + if (empty($config['ntpd']['gps']['prefer'])) { /*note: this one works backwards */ + $ntpcfg .= ' prefer'; + } + if (!empty($config['ntpd']['gps']['noselect'])) { + $ntpcfg .= ' noselect '; + } + $ntpcfg .= "\n"; + $ntpcfg .= 'fudge 127.127.20.0'; + if (!empty($config['ntpd']['gps']['fudge1'])) { + $ntpcfg .= ' time1 '; + $ntpcfg .= $config['ntpd']['gps']['fudge1']; + } + if (!empty($config['ntpd']['gps']['fudge2'])) { + $ntpcfg .= ' time2 '; + $ntpcfg .= $config['ntpd']['gps']['fudge2']; + } + if (!empty($config['ntpd']['gps']['flag1'])) { + $ntpcfg .= ' flag1 1'; + }else{ + $ntpcfg .= ' flag1 0'; + } + if (!empty($config['ntpd']['gps']['flag2'])) { + $ntpcfg .= ' flag2 1'; + } + if (!empty($config['ntpd']['gps']['flag3'])) { + $ntpcfg .= ' flag3 1'; + }else{ + $ntpcfg .= ' flag3 0'; + } + if (!empty($config['ntpd']['gps']['flag4'])) { + $ntpcfg .= ' flag4 1'; + } + if (!empty($config['ntpd']['gps']['refid'])) { + $ntpcfg .= ' refid '; + $ntpcfg .= $config['ntpd']['gps']['refid']; + } + $ntpcfg .= "\n"; + }elseif (!empty($config['ntpd']['gpsport']) + && file_exists('/dev/'.$config['ntpd']['gpsport']) + && system_ntp_setup_gps($config['ntpd']['gpsport'])) { + /* This handles a 2.1 and earlier config */ + $ntpcfg .= "# GPS Setup\n"; + $ntpcfg .= "server 127.127.20.0 mode 0 minpoll 4 maxpoll 4 prefer\n"; + $ntpcfg .= "fudge 127.127.20.0 time1 0.155 time2 0.000 flag1 1 flag2 0 flag3 1\n"; + // Fall back to local clock if GPS is out of sync? + $ntpcfg .= "server 127.127.1.0\n"; + $ntpcfg .= "fudge 127.127.1.0 stratum 12\n"; + } + /* End GPS configuration */ + + $ntpcfg .= "\n\n# Upstream Servers\n"; + /* foreach through ntp servers and write out to ntpd.conf */ + foreach (explode(' ', $config['system']['timeservers']) as $ts) { + $ntpcfg .= "server {$ts} iburst maxpoll 9"; + if (substr_count($config['ntpd']['prefer'], $ts)) $ntpcfg .= ' prefer'; + if (substr_count($config['ntpd']['noselect'], $ts)) $ntpcfg .= ' noselect'; + $ntpcfg .= "\n"; + } + unset($ts); + + $ntpcfg .= "\n\n"; + $ntpcfg .= "disable monitor\n"; //prevent NTP reflection attack, see https://forum.pfsense.org/index.php/topic,67189.msg389132.html#msg389132 + if (!empty($config['ntpd']['clockstats']) || !empty($config['ntpd']['loopstats']) || !empty($config['ntpd']['peerstats'])) { + $ntpcfg .= "enable stats\n"; + $ntpcfg .= 'statistics'; + if (!empty($config['ntpd']['clockstats'])) { + $ntpcfg .= ' clockstats'; + } + if (!empty($config['ntpd']['loopstats'])) { + $ntpcfg .= ' loopstats'; + } + if (!empty($config['ntpd']['peerstats'])) { + $ntpcfg .= ' peerstats'; + } + $ntpcfg .= "\n"; + } + $ntpcfg .= "statsdir {$statsdir}\n"; + $ntpcfg .= 'logconfig =syncall +clockall'; + if (!empty($config['ntpd']['logpeer'])) { + $ntpcfg .= ' +peerall'; + } + if (!empty($config['ntpd']['logsys'])) { + $ntpcfg .= ' +sysall'; + } + $ntpcfg .= "\n"; + $ntpcfg .= "driftfile {$driftfile}\n"; + /* Access restrictions */ + $ntpcfg .= 'restrict default'; + if (empty($config['ntpd']['kod'])) { /*note: this one works backwards */ + $ntpcfg .= ' kod limited'; + } + if (empty($config['ntpd']['nomodify'])) { /*note: this one works backwards */ + $ntpcfg .= ' nomodify'; + } + if (!empty($config['ntpd']['noquery'])) { + $ntpcfg .= ' noquery'; + } + if (empty($config['ntpd']['nopeer'])) { /*note: this one works backwards */ + $ntpcfg .= ' nopeer'; + } + if (empty($config['ntpd']['notrap'])) { /*note: this one works backwards */ + $ntpcfg .= ' notrap'; + } + if (!empty($config['ntpd']['noserve'])) { + $ntpcfg .= ' noserve'; + } + $ntpcfg .= "\nrestrict -6 default"; + if (empty($config['ntpd']['kod'])) { /*note: this one works backwards */ + $ntpcfg .= ' kod limited'; + } + if (empty($config['ntpd']['nomodify'])) { /*note: this one works backwards */ + $ntpcfg .= ' nomodify'; + } + if (!empty($config['ntpd']['noquery'])) { + $ntpcfg .= ' noquery'; + } + if (empty($config['ntpd']['nopeer'])) { /*note: this one works backwards */ + $ntpcfg .= ' nopeer'; + } + if (!empty($config['ntpd']['noserve'])) { + $ntpcfg .= ' noserve'; + } + if (empty($config['ntpd']['notrap'])) { /*note: this one works backwards */ + $ntpcfg .= ' notrap'; + } + $ntpcfg .= "\n"; + + /* A leapseconds file is really only useful if this clock is stratum 1 */ + $ntpcfg .= "\n"; + if (!empty($config['ntpd']['leapsec'])) { + $leapsec .= base64_decode($config['ntpd']['leapsec']); + file_put_contents('/var/db/leap-seconds', $leapsec); + $ntpcfg .= "leapfile /var/db/leap-seconds\n"; + } + + + if (empty($config['ntpd']['interface'])) + if (is_array($config['installedpackages']['openntpd']) && !empty($config['installedpackages']['openntpd']['config'][0]['interface'])) + $interfaces = explode(",", $config['installedpackages']['openntpd']['config'][0]['interface']); + else + $interfaces = array(); + else + $interfaces = explode(",", $config['ntpd']['interface']); + + if (is_array($interfaces) && count($interfaces)) { + $ntpcfg .= "interface ignore all\n"; + foreach ($interfaces as $interface) { + if (!is_ipaddr($interface)) { + $interface = get_real_interface($interface); + } + if (!empty($interface)) + $ntpcfg .= "interface listen {$interface}\n"; + } + } + + /* open configuration for wrting or bail */ + if (!@file_put_contents("{$g['varetc_path']}/ntpd.conf", $ntpcfg)) { + log_error("Could not open {$g['varetc_path']}/ntpd.conf for writing"); + return; + } + + /* At bootup we just want to write out the config. */ + if (!$start_ntpd) + return; + + /* if ntpd is running, kill it */ + while (isvalidpid("{$g['varrun_path']}/ntpd.pid")) { + killbypid("{$g['varrun_path']}/ntpd.pid"); + } + @unlink("{$g['varrun_path']}/ntpd.pid"); + + /* if /var/empty does not exist, create it */ + if(!is_dir("/var/empty")) + mkdir("/var/empty", 0775, true); + + /* start opentpd, set time now and use /var/etc/ntpd.conf */ + mwexec("/usr/local/sbin/ntpd -g -c {$g['varetc_path']}/ntpd.conf -p {$g['varrun_path']}/ntpd.pid", false, true); + + // Note that we are starting up + log_error("NTPD is starting up."); + return; +} + +function sync_system_time() { + global $config, $g; + + if ($g['booting']) + echo gettext("Syncing system time before startup..."); + + /* foreach through servers and write out to ntpd.conf */ + foreach (explode(' ', $config['system']['timeservers']) as $ts) { + mwexec("/usr/local/sbin/ntpdate -s $ts"); + } + + if ($g['booting']) + echo gettext("done.") . "\n"; + +} + +function system_halt() { + global $g; + + system_reboot_cleanup(); + + mwexec("/usr/bin/nohup /etc/rc.halt > /dev/null 2>&1 &"); +} + +function system_reboot() { + global $g; + + system_reboot_cleanup(); + + mwexec("nohup /etc/rc.reboot > /dev/null 2>&1 &"); +} + +function system_reboot_sync() { + global $g; + + system_reboot_cleanup(); + + mwexec("/etc/rc.reboot > /dev/null 2>&1"); +} + +function system_reboot_cleanup() { + global $config, $cpzone; + + mwexec("/usr/local/bin/beep.sh stop"); + require_once("captiveportal.inc"); + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpzone=>$cp) { + captiveportal_radius_stop_all(); + captiveportal_send_server_accounting(true); + } + } + require_once("voucher.inc"); + voucher_save_db_to_config(); + require_once("pkg-utils.inc"); + stop_packages(); +} + +function system_do_shell_commands($early = 0) { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_do_shell_commands() being called $mt\n"; + } + + if ($early) + $cmdn = "earlyshellcmd"; + else + $cmdn = "shellcmd"; + + if (is_array($config['system'][$cmdn])) { + + /* *cmd is an array, loop through */ + foreach ($config['system'][$cmdn] as $cmd) { + exec($cmd); + } + + } elseif($config['system'][$cmdn] <> "") { + + /* execute single item */ + exec($config['system'][$cmdn]); + + } +} + +function system_console_configure() { + global $config, $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_console_configure() being called $mt\n"; + } + + if (isset($config['system']['disableconsolemenu'])) { + touch("{$g['varetc_path']}/disableconsole"); + } else { + unlink_if_exists("{$g['varetc_path']}/disableconsole"); + } +} + +function system_dmesg_save() { + global $g; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_dmesg_save() being called $mt\n"; + } + + $dmesg = ""; + $_gb = exec("/sbin/dmesg", $dmesg); + + /* find last copyright line (output from previous boots may be present) */ + $lastcpline = 0; + + for ($i = 0; $i < count($dmesg); $i++) { + if (strstr($dmesg[$i], "Copyright (c) 1992-")) + $lastcpline = $i; + } + + $fd = fopen("{$g['varlog_path']}/dmesg.boot", "w"); + if (!$fd) { + printf(gettext("Error: cannot open dmesg.boot in system_dmesg_save().%s"), "\n"); + return 1; + } + + for ($i = $lastcpline; $i < count($dmesg); $i++) + fwrite($fd, $dmesg[$i] . "\n"); + + fclose($fd); + unset($dmesg); + + return 0; +} + +function system_set_harddisk_standby() { + global $g, $config; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_set_harddisk_standby() being called $mt\n"; + } + + if (isset($config['system']['harddiskstandby'])) { + if ($g['booting']) { + echo gettext('Setting hard disk standby... '); + } + + $standby = $config['system']['harddiskstandby']; + // Check for a numeric value + if (is_numeric($standby)) { + // Sync the disk(s) + pfSense_sync(); + if (set_single_sysctl('hw.ata.standby', (int)$standby)) { + // Reinitialize ATA-drives + mwexec('/usr/local/sbin/atareinit'); + if ($g['booting']) { + echo gettext("done.") . "\n"; + } + } else if ($g['booting']) { + echo gettext("failed!") . "\n"; + } + } else if ($g['booting']) { + echo gettext("failed!") . "\n"; + } + } +} + +function system_setup_sysctl() { + global $config; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_setup_sysctl() being called $mt\n"; + } + + activate_sysctls(); + + if (isset($config['system']['sharednet'])) { + system_disable_arp_wrong_if(); + } +} + +function system_disable_arp_wrong_if() { + global $config; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_disable_arp_wrong_if() being called $mt\n"; + } + set_sysctl(array( + "net.link.ether.inet.log_arp_wrong_iface" => "0", + "net.link.ether.inet.log_arp_movements" => "0" + )); +} + +function system_enable_arp_wrong_if() { + global $config; + if(isset($config['system']['developerspew'])) { + $mt = microtime(); + echo "system_enable_arp_wrong_if() being called $mt\n"; + } + set_sysctl(array( + "net.link.ether.inet.log_arp_wrong_iface" => "1", + "net.link.ether.inet.log_arp_movements" => "1" + )); +} + +function enable_watchdog() { + global $config; + return; + $install_watchdog = false; + $supported_watchdogs = array("Geode"); + $file = file_get_contents("/var/log/dmesg.boot"); + foreach($supported_watchdogs as $sd) { + if(stristr($file, "Geode")) { + $install_watchdog = true; + } + } + if($install_watchdog == true) { + if(is_process_running("watchdogd")) + mwexec("/usr/bin/killall watchdogd", true); + exec("/usr/sbin/watchdogd"); + } +} + +function system_check_reset_button() { + global $g; + if($g['platform'] != "nanobsd") + return 0; + + $specplatform = system_identify_specific_platform(); + + if ($specplatform['name'] != "wrap" && $specplatform['name'] != "alix") + return 0; + + $retval = mwexec("/usr/local/sbin/" . $specplatform['name'] . "resetbtn"); + + if ($retval == 99) { + /* user has pressed reset button for 2 seconds - + reset to factory defaults */ + echo << platform string (e.g. 'wrap', 'alix' etc.) + descr => human-readable description (e.g. "PC Engines WRAP") +*/ +function system_identify_specific_platform() { + global $g; + + if ($g['platform'] == 'generic-pc') + return array('name' => 'generic-pc', 'descr' => gettext("Generic PC")); + + if ($g['platform'] == 'generic-pc-cdrom') + return array('name' => 'generic-pc-cdrom', 'descr' => gettext("Generic PC (CD-ROM)")); + + /* the rest of the code only deals with 'embedded' platforms */ + if ($g['platform'] != 'nanobsd') + return array('name' => $g['platform'], 'descr' => $g['platform']); + + $dmesg = get_single_sysctl('hw.model'); + + if (strpos($dmesg, "PC Engines WRAP") !== false) + return array('name' => 'wrap', 'descr' => gettext('PC Engines WRAP')); + + if (strpos($dmesg, "PC Engines ALIX") !== false) + return array('name' => 'alix', 'descr' => gettext('PC Engines ALIX')); + + if (preg_match("/Soekris net45../", $dmesg, $matches)) + return array('name' => 'net45xx', 'descr' => $matches[0]); + + if (preg_match("/Soekris net48../", $dmesg, $matches)) + return array('name' => 'net48xx', 'descr' => $matches[0]); + + if (preg_match("/Soekris net55../", $dmesg, $matches)) + return array('name' => 'net55xx', 'descr' => $matches[0]); + + /* unknown embedded platform */ + return array('name' => 'embedded', 'descr' => gettext('embedded (unknown)')); +} + +function system_get_dmesg_boot() { + global $g; + + return file_get_contents("{$g['varlog_path']}/dmesg.boot"); +} + +function get_possible_listen_ips($include_ipv6_link_local=false) { + $interfaces = get_configured_interface_with_descr(); + $carplist = get_configured_carp_interface_list(); + $listenips = array(); + foreach ($carplist as $cif => $carpip) + $interfaces[$cif] = $carpip." (".get_vip_descr($carpip).")"; + $aliaslist = get_configured_ip_aliases_list(); + foreach ($aliaslist as $aliasip => $aliasif) + $interfaces[$aliasip] = $aliasip." (".get_vip_descr($aliasip).")"; + foreach ($interfaces as $iface => $ifacename) { + $tmp["name"] = $ifacename; + $tmp["value"] = $iface; + $listenips[] = $tmp; + if ($include_ipv6_link_local) { + $llip = find_interface_ipv6_ll(get_real_interface($iface)); + if (!empty($llip)) { + $tmp["name"] = "{$ifacename} IPv6 Link-Local"; + $tmp["value"] = $llip; + $listenips[] = $tmp; + } + } + } + $tmp["name"] = "Localhost"; + $tmp["value"] = "lo0"; + $listenips[] = $tmp; + return $listenips; +} + +function get_possible_traffic_source_addresses($include_ipv6_link_local=false) { + global $config; + $sourceips = get_possible_listen_ips($include_ipv6_link_local); + foreach (array('server', 'client') as $mode) { + if (is_array($config['openvpn']["openvpn-{$mode}"])) { + foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) { + if (!isset($setting['disable'])) { + $vpn = array(); + $vpn['value'] = 'ovpn' . substr($mode, 0, 1) . $setting['vpnid']; + $vpn['name'] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']); + $sourceips[] = $vpn; + } + } + } + } + return $sourceips; +} +?> diff --git a/usr/etc/inc/unbound.inc b/usr/etc/inc/unbound.inc new file mode 100644 index 000000000..8cd922712 --- /dev/null +++ b/usr/etc/inc/unbound.inc @@ -0,0 +1,685 @@ + + 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. + + pfSense_BUILDER_BINARIES: /usr/sbin/unbound /usr/sbin/unbound-anchor /usr/sbin/unbound-checkconf + pfSense_BUILDER_BINARIES: /usr/sbin/unbound-control /usr/sbin/unbound-control-setup + pfSense_MODULE: unbound +*/ + +/* include all configuration functions */ +require_once("config.inc"); +require_once("functions.inc"); + +/* Optimize Unbound for environment */ +function unbound_optimization() { + global $config; + + $optimization_settings = array(); + + /* + * Set the number of threads equal to number of CPUs. + * Use 1 to disable threading, if for some reason this sysctl fails. + */ + $numprocs = intval(get_single_sysctl('kern.smp.cpus')); + if ($numprocs > 0) + $optimization['number_threads'] = "num-threads: {$numprocs}"; + else + $optimization['number_threads'] = "num-threads: 1"; + + // Slabs to help reduce lock contention. + if ($numprocs > 4) { + $optimization['msg_cache_slabs'] = "msg-cache-slabs: {$numprocs}"; + $optimization['rrset_cache_slabs'] = "rrset-cache-slabs: {$numprocs}"; + $optimization['infra_cache_slabs'] = "infra-cache-slabs: {$numprocs}"; + $optimization['key_cache_slabs'] = "key-cache-slabs: {$numprocs}"; + } else { + $optimization['msg_cache_slabs'] = "msg-cache-slabs: 4"; + $optimization['rrset_cache_slabs'] = "rrset-cache-slabs: 4"; + $optimization['infra_cache_slabs'] = "infra-cache-slabs: 4"; + $optimization['key_cache_slabs'] = "key-cache-slabs: 4"; + } + + // Memory usage default of 4MB + $optimization['msg_cache_size'] = "msg-cache-size: 4m"; + $optimization['rrset_cache_size'] = "rrset-cache-size: 8m"; + + // More outgoing connections per thread otherwise assign a default of 4096 for a single thread + if ($numprocs > 0) { + $or = (1024/$numprocs) - 50; + $optimization['outgoing_range'] = "outgoing-range: {$or}"; + } else + $optimization['outgoing_range'] = "outgoing-range: {4096}"; + + /* + * Larger socket buffer for busy servers + * Check that it is set to 4MB (by default the OS has it configured to 4MB) + */ + foreach ($config['sysctl']['item'] as $tunable) { + if ($tunable['tunable'] == 'kern.ipc.maxsockbuf') { + $so = floor(($tunable['value']/1024/1024)-1); + // Check to ensure that the number is not a negative + if ($so > 0) + $optimization['so_rcvbuf'] = "so-rcvbuf: {$so}m"; + else + unset($optimization['so_rcvbuf']); + } + } + // Safety check in case kern.ipc.maxsockbuf is not available. + if (!isset($optimization['so_rcvbuf'])) + $optimization['so_rcvbuf'] = "#so-rcvbuf: 4m"; + + return $optimization; + +} + +function unbound_generate_config() { + global $config, $g; + + // Setup optimization + $optimization = unbound_optimization(); + + // Setup DNSSEC support + if (isset($config['unbound']['dnssec'])) { + $module_config = "validator iterator"; + $anchor_file = "auto-trust-anchor-file: {$g['unbound_chroot_path']}/root.key"; + } else + $module_config = "iterator"; + + // Setup DNS Rebinding + if (!isset($config['system']['webgui']['nodnsrebindcheck'])) { + // Private-addresses for DNS Rebinding + $private_addr = << "$ip", fqdn => "$fqdn", name => "$name")); + else + array_push($etc_hosts, array(ipaddr => "$ip", fqdn => "$fqdn")); + } + } + } + return $etc_hosts; +} + +function sync_unbound_service() { + global $config, $g; + + // Configure chroot + if (!is_dir($g['unbound_chroot_path'])) { + mkdir($g['unbound_chroot_path']); + chown($g['unbound_chroot_path'], "unbound"); + chgrp($g['unbound_chroot_path'], "unbound"); + } + + // Configure our Unbound service + do_as_unbound_user("unbound-anchor"); + unbound_remote_control_setup(); + unbound_generate_config(); + do_as_unbound_user("start"); + require_once("service-utils.inc"); + if (is_service_running("unbound")) + do_as_unbound_user("restore_cache"); + +} + +function unbound_acl_id_used($id) { + global $config; + + if (is_array($config['unbound']['acls'])) + foreach($config['unbound']['acls'] as & $acls) + if ($id == $acls['aclid']) + return true; + + return false; +} + +function unbound_get_next_id() { + $aclid = 0; + while(unbound_acl_id_used($aclid)) + $aclid++; + return $aclid; +} + +// Execute commands as the user unbound +function do_as_unbound_user($cmd) { + global $g; + + switch ($cmd) { + case "start": + mwexec("/usr/sbin/unbound -c {$g['unbound_chroot_path']}/unbound.conf"); + break; + case "stop": + mwexec("echo '/usr/sbin/unbound-control stop' | /usr/bin/su -m unbound", true); + break; + case "unbound-anchor": + mwexec("echo '/usr/sbin/unbound-anchor -a {$g['unbound_chroot_path']}/root.key' | /usr/bin/su -m unbound", true); + break; + case "unbound-control-setup": + mwexec("echo '/usr/sbin/unbound-control-setup -d {$g['unbound_chroot_path']}' | /usr/bin/su -m unbound", true); + break; + default: + break; + } +} + +function unbound_add_domain_overrides($pvt=false) { + global $config, $g; + + $domains = $config['unbound']['domainoverrides']; + + $sorted_domains = msort($domains, "domain"); + $result = array(); + foreach($sorted_domains as $domain) { + $domain_key = current($domain); + if (!isset($result[$domain_key])) + $result[$domain_key] = array(); + $result[$domain_key][] = $domain['ip']; + } + + // Domain overrides that have multiple entries need multiple stub-addr: added + $domain_entries = ""; + foreach($result as $domain=>$ips) { + if ($pvt == true) { + $domain_entries .= "private-domain: \"$domain\"\n"; + $domain_entries .= "domain-insecure: \"$domain\"\n"; + } else { + $domain_entries .= "stub-zone:\n"; + $domain_entries .= "\tname: \"$domain\"\n"; + foreach($ips as $ip) + $domain_entries .= "\tstub-addr: $ip\n"; + $domain_entries .= "\tstub-prime: no\n"; + } + } + + if ($pvt == true) + return $domain_entries; + else + file_put_contents("{$g['unbound_chroot_path']}/domainoverrides.conf", $domain_entries); +} + +function unbound_add_host_entries() { + global $config, $g; + + $unbound_entries = "local-zone: \"{$config['system']['domain']}\" transparent\n"; + // IPv4 entries + $unbound_entries .= "local-data-ptr: \"127.0.0.1 localhost\"\n"; + $unbound_entries .= "local-data: \"localhost A 127.0.0.1\"\n"; + $unbound_entries .= "local-data: \"localhost.{$config['system']['domain']} A 127.0.0.1\"\n"; + // IPv6 entries + $unbound_entries .= "local-data-ptr: \"::1 localhost\"\n"; + $unbound_entries .= "local-data: \"localhost AAAA ::1\"\n"; + $unbound_entries .= "local-data: \"localhost.{$config['system']['domain']} AAAA ::1\"\n"; + + $listen_addresses = ""; + if (isset($config['unbound']['interface'])) { + $interfaces = explode(",", $config['unbound']['interface']); + foreach ($interfaces as $interface) { + if (is_ipaddrv4($interface)) { + $unbound_entries .= "local-data-ptr: \"{$interface} {$config['system']['hostname']}.{$config['system']['domain']}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']}.{$config['system']['domain']} A {$interface}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']} A {$interface}\"\n"; + } else if (is_ipaddrv6($interface)) { + $unbound_entries .= "local-data: \"{$config['system']['hostname']}.{$config['system']['domain']} AAAA {$interface}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']} AAAA {$interface}\"\n"; + } else { + $if = get_real_interface($interface); + if (does_interface_exist($if)) { + $laddr = find_interface_ip($if); + if (is_ipaddrv4($laddr)) { + $unbound_entries .= "local-data-ptr: \"{$laddr} {$config['system']['hostname']}.{$config['system']['domain']}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']}.{$config['system']['domain']} A {$laddr}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']} A {$laddr}\"\n"; + } + $laddr6 = find_interface_ipv6($if); + if (is_ipaddrv6($laddr6) && !isset($config['dnsmasq']['strictbind'])) { + $unbound_entries .= "local-data-ptr: \"{$laddr6} {$config['system']['hostname']}.{$config['system']['domain']}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']}.{$config['system']['domain']} AAAA {$laddr}\"\n"; + $unbound_entries .= "local-data: \"{$config['system']['hostname']} AAAA {$laddr}\"\n"; + } + } + } + } + } + + // Static Host entries + if (isset($config['unbound']['hosts'])) { + $host_entries = ""; + $added_item = array(); + foreach($config['unbound']['hosts'] as $host) { + $current_host = $host['host']; + if ($host['host'] != "") + $host['host'] = $host['host']."."; + if (!$added_item[$current_host]) { + $host_entries .= "local-data-ptr: \"{$host['ip']} {$host['host']}{$host['domain']}\"\n"; + if (is_ipaddrv6($host['ip'])) + $host_entries .= "local-data: \"{$host['host']}{$host['domain']} IN AAAA {$host['ip']}\"\n"; + else + $host_entries .= "local-data: \"{$host['host']}{$host['domain']} IN A {$host['ip']}\"\n"; + if (!empty($host['descr']) && isset($config['unbound']['txtsupport'])) + $host_entries .= "local-data: '{$host['host']}{$host['domain']} TXT \"".addslashes($host['descr'])."\"'\n"; + + // Do not add duplicate entries + $added_item[$current_host] = true; + } + } + $unbound_entries .= $host_entries; + } + + // Static DHCP entries + $host_entries = ""; + if (isset($config['unbound']['regdhcpstatic']) && is_array($config['dhcpd'])) { + foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) + if (is_array($dhcpifconf['staticmap']) && isset($dhcpifconf['enable'])) + foreach ($dhcpifconf['staticmap'] as $host) + if ($host['ipaddr'] && $host['hostname']) { + $host_entries .= "local-data-ptr: \"{$host['ipaddr']} {$host['hostname']}.{$config['system']['domain']}\"\n"; + $host_entries .= "local-data: \"{$host['hostname']}.{$config['system']['domain']} IN A {$host['ipaddr']}\"\n"; + if (!empty($host['descr']) && $unboundcfg['txtsupport'] == 'on') + $host_entries .= "local-data: '{$host['hostname']}.{$config['system']['domain']} TXT \"".addslashes($host['descr'])."\"'\n"; + } + $unbound_entries .= $host_entries; + } + + // Handle DHCPLeases added host entries + $dhcplcfg = read_hosts(); + $host_entries = ""; + if (is_array($dhcplcfg)) { + foreach($dhcplcfg as $key=>$host) { + $host_entries .= "local-data-ptr: \"{$host['ipaddr']} {$host['fqdn']}\"\n"; + $host_entries .= "local-data: \"{$host['fqdn']} IN A {$host['ipaddr']}\"\n"; + if (!empty($host['name'])) { + $host_entries .= "local-data-ptr: \"{$host['ipaddr']} {$host['name']}\"\n"; + $host_entries .= "local-data: \"{$host['name']} IN A {$host['ipaddr']}\"\n"; + } + } + $unbound_entries .= $host_entries; + } + + // Write out entries + file_put_contents("{$g['unbound_chroot_path']}/host_entries.conf", $unbound_entries); +} + +function unbound_control($action) { + global $config, $g; + + $cache_dumpfile = "/var/tmp/unbound_cache"; + + switch ($action) { + case "start": + // Start Unbound + if ($config['unbound']['enable'] == "on") { + if (!is_service_running("unbound")) + do_as_unbound_user("start"); + } + break; + case "stop": + if ($config['unbound']['enable'] == "on") + do_as_unbound_user("stop"); + break; + case "reload": + if ($config['unbound']['enable'] == "on") + do_as_unbound_user("reload"); + break; + case "dump_cache": + // Dump Unbound's Cache + if ($config['unbound']['dumpcache'] == "on") + do_as_unbound_user("dump_cache"); + break; + case "restore_cache": + // Restore Unbound's Cache + if ((is_service_running("unbound")) && ($config['unbound']['dumpcache'] == "on")) { + if (file_exists($cache_dumpfile) && filesize($cache_dumpfile) > 0) + do_as_unbound_user("load_cache < /var/tmp/unbound_cache"); + } + break; + default: + break; + + } +} + +// Generation of Unbound statistics +function unbound_statistics() { + global $config; + + if ($config['stats'] == "on") { + $stats_interval = $config['unbound']['stats_interval']; + $cumulative_stats = $config['cumulative_stats']; + if ($config['extended_stats'] == "on") + $extended_stats = "yes"; + else + $extended_stats = "no"; + } else { + $stats_interval = "0"; + $cumulative_stats = "no"; + $extended_stats = "no"; + } + /* XXX To do - add RRD graphs */ + $stats = << $ifdesc) { + $ifip = get_interface_ip($ubif); + if (!is_null($ifip)) { + $subnet_bits = get_interface_subnet($ubif); + $subnet_ip = gen_subnet($ifip, $subnet_bits); + $aclcfg .= "access-control: {$subnet_ip}/{$subnet_bits} allow\n"; + } + $ifip = get_interface_ipv6($ubif); + if (!is_null($ifip)) { + $subnet_bits = get_interface_subnetv6($ubif); + $subnet_ip = gen_subnetv6($ifip, $subnet_bits); + $aclcfg .= "access-control: {$subnet_ip}/{$subnet_bits} allow\n"; + } + } + + // Configure the custom ACLs + if (is_array($config['unbound']['acls'])) { + foreach($config['unbound']['acls'] as $unbound_acl) { + $aclcfg .= "#{$unbound_acl['aclname']}\n"; + foreach($unbound_acl['row'] as $network) { + if ($unbound_acl['aclaction'] == "allow snoop") + $unbound_acl['aclaction'] = "allow_snoop"; + $aclcfg .= "access-control: {$network['acl_network']}/{$network['mask']} {$unbound_acl['aclaction']}\n"; + } + } + } + // Write out Access list + file_put_contents("{$g['unbound_chroot_path']}/access_lists.conf", $aclcfg); + +} + +// Generate hosts and reload services +function unbound_hosts_generate() { + // Generate our hosts file + unbound_add_host_entries(); + + // Reload our service to read the updates + unbound_control("reload"); +} + +?> diff --git a/usr/etc/inc/upgrade_config.inc b/usr/etc/inc/upgrade_config.inc new file mode 100644 index 000000000..0d65db6b4 --- /dev/null +++ b/usr/etc/inc/upgrade_config.inc @@ -0,0 +1,3502 @@ + + All rights reserved. + + originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2004 Manuel Kasper . + 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. + */ + +/* + pfSense_BUILDER_BINARIES: /usr/bin/find /bin/cd /usr/local/bin/rrdtool /usr/bin/nice + pfSense_MODULE: config +*/ + +if(!function_exists("dump_rrd_to_xml")) + require("rrd.inc"); + +/* Upgrade functions must be named: +* upgrade_XXX_to_YYY + * where XXX == previous version, zero padded, and YYY == next version, zero padded + */ +function upgrade_010_to_011() { + global $config; + $opti = 1; + $ifmap = array('lan' => 'lan', 'wan' => 'wan', 'pptp' => 'pptp'); + + /* convert DMZ to optional, if necessary */ + if (isset($config['interfaces']['dmz'])) { + + $dmzcfg = &$config['interfaces']['dmz']; + + if ($dmzcfg['if']) { + $config['interfaces']['opt' . $opti] = array(); + $optcfg = &$config['interfaces']['opt' . $opti]; + + $optcfg['enable'] = $dmzcfg['enable']; + $optcfg['descr'] = "DMZ"; + $optcfg['if'] = $dmzcfg['if']; + $optcfg['ipaddr'] = $dmzcfg['ipaddr']; + $optcfg['subnet'] = $dmzcfg['subnet']; + + $ifmap['dmz'] = "opt" . $opti; + $opti++; + } + + unset($config['interfaces']['dmz']); + } + + /* convert WLAN1/2 to optional, if necessary */ + for ($i = 1; isset($config['interfaces']['wlan' . $i]); $i++) { + + if (!$config['interfaces']['wlan' . $i]['if']) { + unset($config['interfaces']['wlan' . $i]); + continue; + } + + $wlancfg = &$config['interfaces']['wlan' . $i]; + $config['interfaces']['opt' . $opti] = array(); + $optcfg = &$config['interfaces']['opt' . $opti]; + + $optcfg['enable'] = $wlancfg['enable']; + $optcfg['descr'] = "WLAN" . $i; + $optcfg['if'] = $wlancfg['if']; + $optcfg['ipaddr'] = $wlancfg['ipaddr']; + $optcfg['subnet'] = $wlancfg['subnet']; + $optcfg['bridge'] = $wlancfg['bridge']; + + $optcfg['wireless'] = array(); + $optcfg['wireless']['mode'] = $wlancfg['mode']; + $optcfg['wireless']['ssid'] = $wlancfg['ssid']; + $optcfg['wireless']['channel'] = $wlancfg['channel']; + $optcfg['wireless']['wep'] = $wlancfg['wep']; + + $ifmap['wlan' . $i] = "opt" . $opti; + + unset($config['interfaces']['wlan' . $i]); + $opti++; + } + + /* convert filter rules */ + $n = count($config['filter']['rule']); + for ($i = 0; $i < $n; $i++) { + + $fr = &$config['filter']['rule'][$i]; + + /* remap interface */ + if (array_key_exists($fr['interface'], $ifmap)) + $fr['interface'] = $ifmap[$fr['interface']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: filter rule removed " . + "(interface '%s' does not exist anymore)."), "\n", $fr['interface']); + unset($config['filter']['rule'][$i]); + continue; + } + + /* remap source network */ + if (isset($fr['source']['network'])) { + if (array_key_exists($fr['source']['network'], $ifmap)) + $fr['source']['network'] = $ifmap[$fr['source']['network']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: filter rule removed " . + "(source network '%s' does not exist anymore)."), "\n", $fr['source']['network']); + unset($config['filter']['rule'][$i]); + continue; + } + } + + /* remap destination network */ + if (isset($fr['destination']['network'])) { + if (array_key_exists($fr['destination']['network'], $ifmap)) + $fr['destination']['network'] = $ifmap[$fr['destination']['network']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: filter rule removed " . + "(destination network '%s' does not exist anymore)."), "\n", $fr['destination']['network']); + unset($config['filter']['rule'][$i]); + continue; + } + } + } + + /* convert shaper rules */ + $n = count($config['pfqueueing']['rule']); + if (is_array($config['pfqueueing']['rule'])) + for ($i = 0; $i < $n; $i++) { + + $fr = &$config['pfqueueing']['rule'][$i]; + + /* remap interface */ + if (array_key_exists($fr['interface'], $ifmap)) + $fr['interface'] = $ifmap[$fr['interface']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: traffic shaper rule removed " . + "(interface '%s' does not exist anymore)."), "\n", $fr['interface']); + unset($config['pfqueueing']['rule'][$i]); + continue; + } + + /* remap source network */ + if (isset($fr['source']['network'])) { + if (array_key_exists($fr['source']['network'], $ifmap)) + $fr['source']['network'] = $ifmap[$fr['source']['network']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: traffic shaper rule removed " . + "(source network '%s' does not exist anymore)."), "\n", $fr['source']['network']); + unset($config['pfqueueing']['rule'][$i]); + continue; + } + } + + /* remap destination network */ + if (isset($fr['destination']['network'])) { + if (array_key_exists($fr['destination']['network'], $ifmap)) + $fr['destination']['network'] = $ifmap[$fr['destination']['network']]; + else { + /* remove the rule */ + printf(gettext("%sWarning: traffic shaper rule removed " . + "(destination network '%s' does not exist anymore)."), "\n", $fr['destination']['network']); + unset($config['pfqueueing']['rule'][$i]); + continue; + } + } + } +} + + +function upgrade_011_to_012() { + global $config; + /* move LAN DHCP server config */ + $tmp = $config['dhcpd']; + $config['dhcpd'] = array(); + $config['dhcpd']['lan'] = $tmp; + + /* encrypt password */ + $config['system']['password'] = crypt($config['system']['password']); +} + + +function upgrade_012_to_013() { + global $config; + /* convert advanced outbound NAT config */ + for ($i = 0; isset($config['nat']['advancedoutbound']['rule'][$i]); $i++) { + $curent = &$config['nat']['advancedoutbound']['rule'][$i]; + $src = $curent['source']; + $curent['source'] = array(); + $curent['source']['network'] = $src; + $curent['destination'] = array(); + $curent['destination']['any'] = true; + } + + /* add an explicit type="pass" to all filter rules to make things consistent */ + for ($i = 0; isset($config['filter']['rule'][$i]); $i++) { + $config['filter']['rule'][$i]['type'] = "pass"; + } +} + + +function upgrade_013_to_014() { + global $config; + /* convert shaper rules (make pipes) */ + if (is_array($config['pfqueueing']['rule'])) { + $config['pfqueueing']['pipe'] = array(); + + for ($i = 0; isset($config['pfqueueing']['rule'][$i]); $i++) { + $curent = &$config['pfqueueing']['rule'][$i]; + + /* make new pipe and associate with this rule */ + $newpipe = array(); + $newpipe['descr'] = $curent['descr']; + $newpipe['bandwidth'] = $curent['bandwidth']; + $newpipe['delay'] = $curent['delay']; + $newpipe['mask'] = $curent['mask']; + $config['pfqueueing']['pipe'][$i] = $newpipe; + + $curent['targetpipe'] = $i; + + unset($curent['bandwidth']); + unset($curent['delay']); + unset($curent['mask']); + } + } +} + + +function upgrade_014_to_015() { + global $config; + /* Default route moved */ + if (isset($config['interfaces']['wan']['gateway'])) + if ($config['interfaces']['wan']['gateway'] <> "") + $config['interfaces']['wan']['gateway'] = $config['interfaces']['wan']['gateway']; + unset($config['interfaces']['wan']['gateway']); + + /* Queues are no longer interface specific */ + if (isset($config['interfaces']['lan']['schedulertype'])) + unset($config['interfaces']['lan']['schedulertype']); + if (isset($config['interfaces']['wan']['schedulertype'])) + unset($config['interfaces']['wan']['schedulertype']); + + for ($i = 1; isset($config['interfaces']['opt' . $i]); $i++) { + if(isset($config['interfaces']['opt' . $i]['schedulertype'])) + unset($config['interfaces']['opt' . $i]['schedulertype']); + } +} + + +function upgrade_015_to_016() { + global $config; + /* Alternate firmware URL moved */ + if (isset($config['system']['firmwareurl']) && isset($config['system']['firmwarename'])) { // Only convert if *both* are defined. + $config['system']['alt_firmware_url'] = array(); + $config['system']['alt_firmware_url']['enabled'] = ""; + $config['system']['alt_firmware_url']['firmware_base_url'] = $config['system']['firmwareurl']; + $config['system']['alt_firmware_url']['firmware_filename'] = $config['system']['firmwarename']; + unset($config['system']['firmwareurl'], $config['system']['firmwarename']); + } else { + unset($config['system']['firmwareurl'], $config['system']['firmwarename']); + } +} + + +function upgrade_016_to_017() { + global $config; + /* wipe previous shaper configuration */ + unset($config['shaper']['queue']); + unset($config['shaper']['rule']); + unset($config['interfaces']['wan']['bandwidth']); + unset($config['interfaces']['wan']['bandwidthtype']); + unset($config['interfaces']['lan']['bandwidth']); + unset($config['interfaces']['lan']['bandwidthtype']); + $config['shaper']['enable'] = FALSE; +} + + +function upgrade_017_to_018() { + global $config; + if(isset($config['proxyarp']) && is_array($config['proxyarp']['proxyarpnet'])) { + $proxyarp = &$config['proxyarp']['proxyarpnet']; + foreach($proxyarp as $arpent){ + $vip = array(); + $vip['mode'] = "proxyarp"; + $vip['interface'] = $arpent['interface']; + $vip['descr'] = $arpent['descr']; + if (isset($arpent['range'])) { + $vip['range'] = $arpent['range']; + $vip['type'] = "range"; + } else { + $subnet = explode('/', $arpent['network']); + $vip['subnet'] = $subnet[0]; + if (isset($subnet[1])) { + $vip['subnet_bits'] = $subnet[1]; + $vip['type'] = "network"; + } else { + $vip['subnet_bits'] = "32"; + $vip['type'] = "single"; + } + } + $config['virtualip']['vip'][] = $vip; + } + unset($config['proxyarp']); + } + if(isset($config['installedpackages']) && isset($config['installedpackages']['carp']) && is_array($config['installedpackages']['carp']['config'])) { + $carp = &$config['installedpackages']['carp']['config']; + foreach($carp as $carpent){ + $vip = array(); + $vip['mode'] = "carp"; + $vip['interface'] = "AUTO"; + $vip['descr'] = sprintf(gettext("CARP vhid %s"), $carpent['vhid']); + $vip['type'] = "single"; + $vip['vhid'] = $carpent['vhid']; + $vip['advskew'] = $carpent['advskew']; + $vip['password'] = $carpent['password']; + $vip['subnet'] = $carpent['ipaddress']; + $vip['subnet_bits'] = $carpent['netmask']; + $config['virtualip']['vip'][] = $vip; + } + unset($config['installedpackages']['carp']); + } + /* Server NAT is no longer needed */ + unset($config['nat']['servernat']); + + /* enable SSH */ + if ($config['version'] == "1.8") { + $config['system']['sshenabled'] = true; + } +} + + +function upgrade_018_to_019() { + global $config; + $config['theme']="metallic"; +} + + +function upgrade_019_to_020() { + global $config; + if(is_array($config['ipsec']['tunnel'])) { + reset($config['ipsec']['tunnel']); + while (list($index, $tunnel) = each($config['ipsec']['tunnel'])) { + /* Sanity check on required variables */ + /* This fixes bogus entries - remnant of bug #393 */ + if (!isset($tunnel['local-subnet']) && !isset($tunnel['remote-subnet'])) { + unset($config['ipsec']['tunnel'][$tunnel]); + } + } + } +} + +function upgrade_020_to_021() { + global $config; + /* shaper scheduler moved */ + if(isset($config['system']['schedulertype'])) { + $config['shaper']['schedulertype'] = $config['system']['schedulertype']; + unset($config['system']['schedulertype']); + } +} + + +function upgrade_021_to_022() { + global $config; + /* move gateway to wan interface */ + $config['interfaces']['wan']['gateway'] = $config['system']['gateway']; +} + +function upgrade_022_to_023() { + global $config; + if(isset($config['shaper'])) { + /* wipe previous shaper configuration */ + unset($config['shaper']); + } +} + + +function upgrade_023_to_024() { + global $config; +} + + +function upgrade_024_to_025() { + global $config; + $config['interfaces']['wan']['use_rrd_gateway'] = $config['system']['use_rrd_gateway']; + unset($config['system']['use_rrd_gateway']); +} + + +function upgrade_025_to_026() { + global $config; + $cron_item = array(); + $cron_item['minute'] = "0"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 newsyslog"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "1,31"; + $cron_item['hour'] = "0-5"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 adjkerntz -a"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "1"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "1"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /etc/rc.update_bogons.sh"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "*/60"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 sshlockout"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "1"; + $cron_item['hour'] = "1"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /etc/rc.dyndns.update"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "*/60"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 virusprot"; + + $config['cron']['item'][] = $cron_item; + + $cron_item = array(); + $cron_item['minute'] = "*/60"; + $cron_item['hour'] = "*"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /usr/local/sbin/expiretable -t 1800 snort2c"; + + $config['cron']['item'][] = $cron_item; +} + + +function upgrade_026_to_027() { + global $config; +} + + +function upgrade_027_to_028() { + global $config; +} + + +function upgrade_028_to_029() { + global $config; + $rule_item = array(); + $a_filter = &$config['filter']['rule']; + $rule_item['interface'] = "enc0"; + $rule_item['type'] = "pass"; + $rule_item['source']['any'] = true; + $rule_item['destination']['any'] = true; + $rule_item['descr'] = gettext("Permit IPsec traffic."); + $rule_item['statetype'] = "keep state"; + $a_filter[] = $rule_item; +} + + +function upgrade_029_to_030() { + global $config; + /* enable the rrd config setting by default */ + $config['rrd']['enable'] = true; +} + + +function upgrade_030_to_031() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_031_to_032() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_032_to_033() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_033_to_034() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_034_to_035() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_035_to_036() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_036_to_037() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_037_to_038() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_038_to_039() { + global $config; + /* Insert upgrade code here */ +} + + +function upgrade_039_to_040() { + global $config, $g; + $config['system']['webgui']['auth_method'] = "session"; + $config['system']['webgui']['backing_method'] = "htpasswd"; + + if (isset ($config['system']['username'])) { + $config['system']['group'] = array(); + $config['system']['group'][0]['name'] = "admins"; + $config['system']['group'][0]['description'] = gettext("System Administrators"); + $config['system']['group'][0]['scope'] = "system"; + $config['system']['group'][0]['priv'] = "page-all"; + $config['system']['group'][0]['home'] = "index.php"; + $config['system']['group'][0]['gid'] = "110"; + + $config['system']['user'] = array(); + $config['system']['user'][0]['name'] = "{$config['system']['username']}"; + $config['system']['user'][0]['descr'] = "System Administrator"; + $config['system']['user'][0]['scope'] = "system"; + $config['system']['user'][0]['groupname'] = "admins"; + $config['system']['user'][0]['password'] = "{$config['system']['password']}"; + $config['system']['user'][0]['uid'] = "0"; + /* Ensure that we follow what this new "admin" username should be in the session. */ + $_SESSION["Username"] = "{$config['system']['username']}"; + + $config['system']['user'][0]['priv'] = array(); + $config['system']['user'][0]['priv'][0]['id'] = "lockwc"; + $config['system']['user'][0]['priv'][0]['name'] = "Lock webConfigurator"; + $config['system']['user'][0]['priv'][0]['descr'] = gettext("Indicates whether this user will lock access to the webConfigurator for other users."); + $config['system']['user'][0]['priv'][1]['id'] = "lock-ipages"; + $config['system']['user'][0]['priv'][1]['name'] = "Lock individual pages"; + $config['system']['user'][0]['priv'][1]['descr'] = gettext("Indicates whether this user will lock individual HTML pages after having accessed a particular page (the lock will be freed if the user leaves or saves the page form)."); + $config['system']['user'][0]['priv'][2]['id'] = "hasshell"; + $config['system']['user'][0]['priv'][2]['name'] = "Has shell access"; + $config['system']['user'][0]['priv'][2]['descr'] = gettext("Indicates whether this user is able to login for example via SSH."); + $config['system']['user'][0]['priv'][3]['id'] = "copyfiles"; + $config['system']['user'][0]['priv'][3]['name'] = "Is allowed to copy files"; + $config['system']['user'][0]['priv'][3]['descr'] = sprintf(gettext("Indicates whether this user is allowed to copy files onto the %s appliance via SCP/SFTP. If you are going to use this privilege, you must install scponly on the appliance (Hint: pkg_add -r scponly)."), $g['product_name']); + $config['system']['user'][0]['priv'][4]['id'] = "isroot"; + $config['system']['user'][0]['priv'][4]['name'] = "Is root user"; + $config['system']['user'][0]['priv'][4]['descr'] = gettext("This user is associated with the UNIX root user (you should associate this privilege only with one single user)."); + + $config['system']['nextuid'] = "111"; + $config['system']['nextgid'] = "111"; + + /* wipe previous auth configuration */ + unset ($config['system']['username']); + unset ($config['system']['password']); + } +} + +function upgrade_040_to_041() { + global $config; + if(!$config['sysctl']) { + $config['sysctl']['item'] = array(); + + $config['sysctl']['item'][0]['tunable'] = "net.inet.tcp.blackhole"; + $config['sysctl']['item'][0]['descr'] = gettext("Drop packets to closed TCP ports without returning a RST"); + $config['sysctl']['item'][0]['value'] = "default"; + + $config['sysctl']['item'][1]['tunable'] = "net.inet.udp.blackhole"; + $config['sysctl']['item'][1]['descr'] = gettext("Do not send ICMP port unreachable messages for closed UDP ports"); + $config['sysctl']['item'][1]['value'] = "default"; + + $config['sysctl']['item'][2]['tunable'] = "net.inet.ip.random_id"; + $config['sysctl']['item'][2]['descr'] = gettext("Randomize the ID field in IP packets (default is 0: sequential IP IDs)"); + $config['sysctl']['item'][2]['value'] = "default"; + + $config['sysctl']['item'][3]['tunable'] = "net.inet.tcp.drop_synfin"; + $config['sysctl']['item'][3]['descr'] = gettext("Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)"); + $config['sysctl']['item'][3]['value'] = "default"; + + $config['sysctl']['item'][4]['tunable'] = "net.inet.ip.redirect"; + $config['sysctl']['item'][4]['descr'] = gettext("Sending of IPv4 ICMP redirects"); + $config['sysctl']['item'][4]['value'] = "default"; + + $config['sysctl']['item'][5]['tunable'] = "net.inet6.ip6.redirect"; + $config['sysctl']['item'][5]['descr'] = gettext("Sending of IPv6 ICMP redirects"); + $config['sysctl']['item'][5]['value'] = "default"; + + $config['sysctl']['item'][6]['tunable'] = "net.inet.tcp.syncookies"; + $config['sysctl']['item'][6]['descr'] = gettext("Generate SYN cookies for outbound SYN-ACK packets"); + $config['sysctl']['item'][6]['value'] = "default"; + + $config['sysctl']['item'][7]['tunable'] = "net.inet.tcp.recvspace"; + $config['sysctl']['item'][7]['descr'] = gettext("Maximum incoming TCP datagram size"); + $config['sysctl']['item'][7]['value'] = "default"; + + $config['sysctl']['item'][8]['tunable'] = "net.inet.tcp.sendspace"; + $config['sysctl']['item'][8]['descr'] = gettext("Maximum outgoing TCP datagram size"); + $config['sysctl']['item'][8]['value'] = "default"; + + $config['sysctl']['item'][9]['tunable'] = "net.inet.ip.fastforwarding"; + $config['sysctl']['item'][9]['descr'] = gettext("Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-January/002534.html)"); + $config['sysctl']['item'][9]['value'] = "default"; + + $config['sysctl']['item'][10]['tunable'] = "net.inet.tcp.delayed_ack"; + $config['sysctl']['item'][10]['descr'] = gettext("Do not delay ACK to try and piggyback it onto a data packet"); + $config['sysctl']['item'][10]['value'] = "default"; + + $config['sysctl']['item'][11]['tunable'] = "net.inet.udp.maxdgram"; + $config['sysctl']['item'][11]['descr'] = gettext("Maximum outgoing UDP datagram size"); + $config['sysctl']['item'][11]['value'] = "default"; + + $config['sysctl']['item'][12]['tunable'] = "net.link.bridge.pfil_onlyip"; + $config['sysctl']['item'][12]['descr'] = gettext("Handling of non-IP packets which are not passed to pfil (see if_bridge(4))"); + $config['sysctl']['item'][12]['value'] = "default"; + + $config['sysctl']['item'][13]['tunable'] = "net.link.tap.user_open"; + $config['sysctl']['item'][13]['descr'] = gettext("Allow unprivileged access to tap(4) device nodes"); + $config['sysctl']['item'][13]['value'] = "default"; + + $config['sysctl']['item'][15]['tunable'] = "kern.randompid"; + $config['sysctl']['item'][15]['descr'] = gettext("Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())"); + $config['sysctl']['item'][15]['value'] = "default"; + + $config['sysctl']['item'][16]['tunable'] = "net.inet.tcp.inflight.enable"; + $config['sysctl']['item'][16]['descr'] = gettext("The system will attempt to calculate the bandwidth delay product for each connection and limit the amount of data queued to the network to just the amount required to maintain optimum throughput. "); + $config['sysctl']['item'][16]['value'] = "default"; + + $config['sysctl']['item'][17]['tunable'] = "net.inet.icmp.icmplim"; + $config['sysctl']['item'][17]['descr'] = gettext("Set ICMP Limits"); + $config['sysctl']['item'][17]['value'] = "default"; + + $config['sysctl']['item'][18]['tunable'] = "net.inet.tcp.tso"; + $config['sysctl']['item'][18]['descr'] = gettext("TCP Offload engine"); + $config['sysctl']['item'][18]['value'] = "default"; + + $config['sysctl']['item'][19]['tunable'] = "net.inet.ip.portrange.first"; + $config['sysctl']['item'][19]['descr'] = "Set the ephemeral port range starting port"; + $config['sysctl']['item'][19]['value'] = "default"; + + $config['sysctl']['item'][20]['tunable'] = "hw.syscons.kbd_reboot"; + $config['sysctl']['item'][20]['descr'] = "Enables ctrl+alt+delete"; + $config['sysctl']['item'][20]['value'] = "default"; + + $config['sysctl']['item'][21]['tunable'] = "kern.ipc.maxsockbuf"; + $config['sysctl']['item'][21]['descr'] = "Maximum socket buffer size"; + $config['sysctl']['item'][21]['value'] = "default"; + + } +} + + +function upgrade_041_to_042() { + global $config; + if (isset($config['shaper'])) + unset($config['shaper']); + if (isset($config['ezshaper'])) + unset($config['ezshaper']); +} + + +function upgrade_042_to_043() { + global $config; + /* migrate old interface gateway to the new gateways config */ + $iflist = get_configured_interface_list(false, true); + $gateways = array(); + $i = 0; + foreach($iflist as $ifname => $interface) { + if(! interface_has_gateway($ifname)) { + continue; + } + $config['gateways']['gateway_item'][$i] = array(); + if(is_ipaddr($config['interfaces'][$ifname]['gateway'])) { + $config['gateways']['gateway_item'][$i]['gateway'] = $config['interfaces'][$ifname]['gateway']; + $config['gateways']['gateway_item'][$i]['descr'] = sprintf(gettext("Interface %s Static Gateway"), $ifname); + } else { + $config['gateways']['gateway_item'][$i]['gateway'] = "dynamic"; + $config['gateways']['gateway_item'][$i]['descr'] = sprintf(gettext("Interface %s Dynamic Gateway"), $ifname); + } + $config['gateways']['gateway_item'][$i]['interface'] = $ifname; + $config['gateways']['gateway_item'][$i]['name'] = "GW_" . strtoupper($ifname); + /* add default gateway bit for wan on upgrade */ + if($ifname == "wan") { + $config['gateways']['gateway_item'][$i]['defaultgw'] = true; + } + if(is_ipaddr($config['interfaces'][$ifname]['use_rrd_gateway'])) { + $config['gateways']['gateway_item'][$i]['monitor'] = $config['interfaces'][$ifname]['use_rrd_gateway']; + unset($config['interfaces'][$ifname]['use_rrd_gateway']); + } + $config['interfaces'][$ifname]['gateway'] = $config['gateways']['gateway_item'][$i]['name']; + + /* Update all filter rules which might reference this gateway */ + $j = 0; + foreach($config['filter']['rule'] as $rule) { + if(is_ipaddr($rule['gateway'])) { + if ($rule['gateway'] == $config['gateways']['gateway_item'][$i]['gateway']) + $config['filter']['rule'][$j]['gateway'] = $config['gateways']['gateway_item'][$i]['name']; + else if ($rule['gateway'] == $ifname) + $config['filter']['rule'][$j]['gateway'] = $config['gateways']['gateway_item'][$i]['name']; + } + $j++; + } + + /* rename old Quality RRD files in the process */ + $rrddbpath = "/var/db/rrd"; + $gwname = "GW_" . strtoupper($ifname); + if(is_readable("{$rrddbpath}/{$ifname}-quality.rrd")) { + rename("{$rrddbpath}/{$ifname}-quality.rrd", "{$rrddbpath}/{$gwname}-quality.rrd"); + } + $i++; + } +} + + +function upgrade_043_to_044() { + global $config; + + /* migrate static routes to the new gateways config */ + $gateways = return_gateways_array(true); + $i = 0; + if (is_array($config['staticroutes']['route'])) { + $gwmap = array(); + foreach ($config['staticroutes']['route'] as $idx => $sroute) { + $found = false; + foreach ($gateways as $gwname => $gw) { + if ($gw['gateway'] == $sroute['gateway']) { + $config['staticroutes']['route'][$idx]['gateway'] = $gwname; + $found = true; + break; + } + } + if($gwmap[$sroute['gateway']]) { + /* We already added a gateway name for this IP */ + $config['staticroutes']['route'][$idx]['gateway'] = "{$gwmap[$sroute['gateway']]}"; + $found = true; + } + + if ($found == false) { + $gateway = array(); + $gateway['name'] = "SROUTE{$i}"; + $gwmap[$sroute['gateway']] = $gateway['name']; + $gateway['gateway'] = $sroute['gateway']; + $gateway['interface'] = $sroute['interface']; + $gateway['descr'] = sprintf(gettext("Upgraded static route for %s"), $sroute['network']); + if (!is_array($config['gateways']['gateway_item'])) + $config['gateways']['gateway_item'] = array(); + $config['gateways']['gateway_item'][] = $gateway; + $config['staticroutes']['route'][$idx]['gateway'] = $gateway['name']; + $i++; + } + } + } +} + + +function upgrade_044_to_045() { + global $config; + $iflist = get_configured_interface_list(false, true); + if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { + $i = 0; + foreach ($config['vlans']['vlan'] as $id => $vlan) { + /* Make sure to update the interfaces section with the right name */ + $vlan_name = "{$vlan['if']}_vlan{$vlan['tag']}"; + foreach($iflist as $ifname) { + if($config['interfaces'][$ifname]['if'] == "vlan{$i}") { + $config['interfaces'][$ifname]['if'] = $vlan_name; + continue; + } + } + $config['vlans']['vlan'][$i]['vlanif'] = "{$vlan_name}"; + $i++; + } + } +} + + +function upgrade_045_to_046() { + global $config; + /* Load up monitors that are in the default config for 2.0 but not in 1.2.3 + thus wouldn't be in an upgraded config. */ + $config['load_balancer']['monitor_type'] = array ( + array ( 'name' => 'ICMP', + 'type' => 'icmp', + 'descr' => 'ICMP', + 'options' => '', + ), + array ( 'name' => 'TCP', + 'type' => 'tcp', + 'descr' => 'Generic TCP', + 'options' => '', + ), + array ( 'name' => 'HTTP', + 'type' => 'http', + 'descr' => 'Generic HTTP', + 'options' => + array ( 'path' => '/', + 'host' => '', + 'code' => '200', + ), + ), + array ( 'name' => 'HTTPS', + 'type' => 'https', + 'descr' => 'Generic HTTPS', + 'options' => + array ( 'path' => '/', + 'host' => '', + 'code' => '200', + ), + ), + array ( 'name' => 'SMTP', + 'type' => 'send', + 'descr' => 'Generic SMTP', + 'options' => + array ( 'send' => '', + 'expect' => '220 *', + ), + ), + ); + /* Upgrade load balancer from slb to relayd */ + if (is_array($config['load_balancer']['virtual_server']) && count($config['load_balancer']['virtual_server'])) { + $vs_a = &$config['load_balancer']['virtual_server']; + $pool_a = &$config['load_balancer']['lbpool']; + $pools = array(); + /* Index pools by name */ + if(is_array($pool_a)) { + for ($i = 0; isset($pool_a[$i]); $i++) { + if($pool_a[$i]['type'] == "server") { + $pools[$pool_a[$i]['name']] = $pool_a[$i]; + } + } + } + /* Convert sitedown entries to pools and re-attach */ + for ($i = 0; isset($vs_a[$i]); $i++) { + /* Set mode while we're here. */ + $vs_a[$i]['mode'] = "redirect_mode"; + if (isset($vs_a[$i]['sitedown'])) { + $pool = array(); + $pool['type'] = 'server'; + $pool['behaviour'] = 'balance'; + $pool['name'] = "{$vs_a[$i]['name']}-sitedown"; + $pool['descr'] = sprintf(gettext("Sitedown pool for VS: %s"), $vs_a[$i]['name']); + if (is_array($vs_a[$i]['pool'])) + $vs_a[$i]['pool'] = $vs_a[$i]['pool'][0]; + $pool['port'] = $pools[$vs_a[$i]['pool']]['port']; + $pool['servers'] = array(); + $pool['servers'][] = $vs_a[$i]['sitedown']; + $pool['monitor'] = $pools[$vs_a[$i]['pool']]['monitor']; + $pool_a[] = $pool; + $vs_a[$i]['sitedown'] = $pool['name']; + } + } + } + if(count($config['load_balancer']) == 0) { + unset($config['load_balancer']); + } + mwexec('/usr/sbin/pw groupadd -n _relayd -g 913'); + mwexec('/usr/sbin/pw useradd -n _relayd -c "Relay Daemon" -d /var/empty -s /usr/sbin/nologin -u 913 -g 913'); +} + + +function upgrade_046_to_047() { + global $config; + /* Upgrade IPsec from tunnel to phase1/phase2 */ + + if(is_array($config['ipsec']['tunnel'])) { + + $a_phase1 = array(); + $a_phase2 = array(); + $ikeid = 0; + + foreach ($config['ipsec']['tunnel'] as $tunnel) { + + unset($ph1ent); + unset($ph2ent); + + /* + * attempt to locate an enabled phase1 + * entry that matches the peer gateway + */ + + if (!isset($tunnel['disabled'])) { + + $remote_gateway = $tunnel['remote-gateway']; + + foreach ($a_phase1 as $ph1tmp) { + if ($ph1tmp['remote-gateway'] == $remote_gateway) { + $ph1ent = $ph1tmp; + break; + } + } + } + + /* none found, create a new one */ + + if (!isset( $ph1ent )) { + + /* build new phase1 entry */ + + $ph1ent = array(); + + $ph1ent['ikeid'] = ++$ikeid; + + if (isset($tunnel['disabled'])) + $ph1ent['disabled'] = $tunnel['disabled']; + + /* convert to the new vip[$vhid] name */ + if(preg_match("/^carp/", $tunnel['interface'])) { + $carpid = str_replace("carp", "", $tunnel['interface']); + $tunnel['interface'] = "vip" . $config['virtualip']['vip'][$carpid]['vhid']; + } + $ph1ent['interface'] = $tunnel['interface']; + $ph1ent['remote-gateway'] = $tunnel['remote-gateway']; + $ph1ent['descr'] = $tunnel['descr']; + + $ph1ent['mode'] = $tunnel['p1']['mode']; + + if (isset($tunnel['p1']['myident']['myaddress'])) + $ph1ent['myid_type'] = "myaddress"; + if (isset($tunnel['p1']['myident']['address'])) { + $ph1ent['myid_type'] = "address"; + $ph1ent['myid_data'] = $tunnel['p1']['myident']['address']; + } + if (isset($tunnel['p1']['myident']['fqdn'])) { + $ph1ent['myid_type'] = "fqdn"; + $ph1ent['myid_data'] = $tunnel['p1']['myident']['fqdn']; + } + if (isset($tunnel['p1']['myident']['ufqdn'])) { + $ph1ent['myid_type'] = "user_fqdn"; + $ph1ent['myid_data'] = $tunnel['p1']['myident']['ufqdn']; + } + if (isset($tunnel['p1']['myident']['asn1dn'])) { + $ph1ent['myid_type'] = "asn1dn"; + $ph1ent['myid_data'] = $tunnel['p1']['myident']['asn1dn']; + } + if (isset($tunnel['p1']['myident']['dyn_dns'])) { + $ph1ent['myid_type'] = "dyn_dns"; + $ph1ent['myid_data'] = $tunnel['p1']['myident']['dyn_dns']; + } + + $ph1ent['peerid_type'] = "peeraddress"; + + switch ($tunnel['p1']['encryption-algorithm']) { + case "des": + $ph1alg = array( 'name' => 'des' ); + break; + case "3des": + $ph1alg = array( 'name' => '3des' ); + break; + case "blowfish": + $ph1alg = array( 'name' => 'blowfish', 'keylen' => '128' ); + break; + case "cast128": + $ph1alg = array( 'name' => 'cast128' ); + break; + case "rijndael": + $ph1alg = array( 'name' => 'aes', 'keylen' => '128' ); + break; + case "rijndael 256": + case "aes 256": + $ph1alg = array( 'name' => 'aes', 'keylen' => '256' ); + break; + } + + $ph1ent['encryption-algorithm'] = $ph1alg; + $ph1ent['hash-algorithm'] = $tunnel['p1']['hash-algorithm']; + $ph1ent['dhgroup'] = $tunnel['p1']['dhgroup']; + $ph1ent['lifetime'] = $tunnel['p1']['lifetime']; + $ph1ent['authentication_method'] = $tunnel['p1']['authentication_method']; + + if (isset($tunnel['p1']['pre-shared-key'])) + $ph1ent['pre-shared-key'] = $tunnel['p1']['pre-shared-key']; + if (isset($tunnel['p1']['cert'])) + $ph1ent['cert'] = $tunnel['p1']['cert']; + if (isset($tunnel['p1']['peercert'])) + $ph1ent['peercert'] = $tunnel['p1']['peercert']; + if (isset($tunnel['p1']['private-key'])) + $ph1ent['private-key'] = $tunnel['p1']['private-key']; + + $ph1ent['nat_traversal'] = "on"; + $ph1ent['dpd_enable'] = 1; + $ph1ent['dpd_delay'] = 10; + $ph1ent['dpd_maxfail'] = 5; + + $a_phase1[] = $ph1ent; + } + + /* build new phase2 entry */ + + $ph2ent = array(); + + $ph2ent['ikeid'] = $ph1ent['ikeid']; + + if (isset($tunnel['disabled'])) + $ph1ent['disabled'] = $tunnel['disabled']; + + $ph2ent['descr'] = sprintf(gettext("phase2 for %s"), $tunnel['descr']); + + $type = "lan"; + if ($tunnel['local-subnet']['network']) + $type = $tunnel['local-subnet']['network']; + if ($tunnel['local-subnet']['address']) { + list($address,$netbits) = explode("/",$tunnel['local-subnet']['address']); + if (is_null($netbits)) + $type = "address"; + else + $type = "network"; + } + + switch ($type) { + case "address": + $ph2ent['localid'] = array('type' => $type,'address' => $address); + break; + case "network": + $ph2ent['localid'] = array('type' => $type,'address' => $address,'netbits' => $netbits); + break; + default: + $ph2ent['localid'] = array('type' => $type); + break; + } + + list($address,$netbits) = explode("/",$tunnel['remote-subnet']); + $ph2ent['remoteid'] = array('type' => 'network','address' => $address,'netbits' => $netbits); + + $ph2ent['protocol'] = $tunnel['p2']['protocol']; + + $aes_count = 0; + foreach( $tunnel['p2']['encryption-algorithm-option'] as $tunalg ) { + $aes_found = false; + switch ($tunalg) { + case "des": + $ph2alg = array( 'name' => 'des' ); + break; + case "3des": + $ph2alg = array( 'name' => '3des' ); + break; + case "blowfish": + $ph2alg = array( 'name' => 'blowfish', 'keylen' => 'auto' ); + break; + case "cast128": + $ph2alg = array( 'name' => 'cast128' ); + break; + case "rijndael": + case "rijndael 256": + case "aes 256": + $ph2alg = array( 'name' => 'aes', 'keylen' => 'auto' ); + $aes_found = true; + $aes_count++; + break; + } + + if( !$aes_found || ($aes_count < 2)) + $ph2ent['encryption-algorithm-option'][] = $ph2alg; + } + + $ph2ent['hash-algorithm-option'] = $tunnel['p2']['hash-algorithm-option']; + $ph2ent['pfsgroup'] = $tunnel['p2']['pfsgroup']; + $ph2ent['lifetime'] = $tunnel['p2']['lifetime']; + + if (isset($tunnel['pinghost']['pinghost'])) + $ph2ent['pinghost'] = $tunnel['pinghost']; + + $a_phase2[] = $ph2ent; + } + + unset($config['ipsec']['tunnel']); + $config['ipsec']['phase1'] = $a_phase1; + $config['ipsec']['phase2'] = $a_phase2; + } + + /* Upgrade Mobile IPsec */ + if (isset($config['ipsec']['mobileclients']) + && is_array($config['ipsec']['mobileclients']) + && is_array($config['ipsec']['mobileclients']['p1']) + && is_array($config['ipsec']['mobileclients']['p2'])) { + + if (isset($config['ipsec']['mobileclients']['enable'])) { + $config['ipsec']['client']['enable'] = true; + $config['ipsec']['client']['user_source'] = 'system'; + $config['ipsec']['client']['group_source'] = 'system'; + } + + $mobilecfg = $config['ipsec']['mobileclients']; + + $ph1ent = array(); + $ph1ent['ikeid'] = ++$ikeid; + + if (!isset($mobilecfg['enable'])) + $ph1ent['disabled'] = true; + + /* Assume WAN since mobile tunnels couldn't be on a separate interface on 1.2.x */ + $ph1ent['interface'] = 'wan'; + $ph1ent['descr'] = "Mobile Clients (upgraded)"; + $ph1ent['mode'] = $mobilecfg['p1']['mode']; + + if (isset($mobilecfg['p1']['myident']['myaddress'])) + $ph1ent['myid_type'] = "myaddress"; + if (isset($mobilecfg['p1']['myident']['address'])) { + $ph1ent['myid_type'] = "address"; + $ph1ent['myid_data'] = $mobilecfg['p1']['myident']['address']; + } + if (isset($mobilecfg['p1']['myident']['fqdn'])) { + $ph1ent['myid_type'] = "fqdn"; + $ph1ent['myid_data'] = $mobilecfg['p1']['myident']['fqdn']; + } + if (isset($mobilecfg['p1']['myident']['ufqdn'])) { + $ph1ent['myid_type'] = "user_fqdn"; + $ph1ent['myid_data'] = $mobilecfg['p1']['myident']['ufqdn']; + } + if (isset($mobilecfg['p1']['myident']['asn1dn'])) { + $ph1ent['myid_type'] = "asn1dn"; + $ph1ent['myid_data'] = $mobilecfg['p1']['myident']['asn1dn']; + } + if (isset($mobilecfg['p1']['myident']['dyn_dns'])) { + $ph1ent['myid_type'] = "dyn_dns"; + $ph1ent['myid_data'] = $mobilecfg['p1']['myident']['dyn_dns']; + } + $ph1ent['peerid_type'] = "fqdn"; + $ph1ent['peerid_data'] = ""; + + switch ($mobilecfg['p1']['encryption-algorithm']) { + case "des": + $ph1alg = array( 'name' => 'des' ); + break; + case "3des": + $ph1alg = array( 'name' => '3des' ); + break; + case "blowfish": + $ph1alg = array( 'name' => 'blowfish', 'keylen' => '128' ); + break; + case "cast128": + $ph1alg = array( 'name' => 'cast128' ); + break; + case "rijndael": + $ph1alg = array( 'name' => 'aes', 'keylen' => '128' ); + break; + case "rijndael 256": + case "aes 256": + $ph1alg = array( 'name' => 'aes', 'keylen' => '256' ); + break; + } + + $ph1ent['encryption-algorithm'] = $ph1alg; + $ph1ent['hash-algorithm'] = $mobilecfg['p1']['hash-algorithm']; + $ph1ent['dhgroup'] = $mobilecfg['p1']['dhgroup']; + $ph1ent['lifetime'] = $mobilecfg['p1']['lifetime']; + $ph1ent['authentication_method'] = $mobilecfg['p1']['authentication_method']; + + if (isset($mobilecfg['p1']['cert'])) + $ph1ent['cert'] = $mobilecfg['p1']['cert']; + if (isset($mobilecfg['p1']['peercert'])) + $ph1ent['peercert'] = $mobilecfg['p1']['peercert']; + if (isset($mobilecfg['p1']['private-key'])) + $ph1ent['private-key'] = $mobilecfg['p1']['private-key']; + + $ph1ent['nat_traversal'] = "on"; + $ph1ent['dpd_enable'] = 1; + $ph1ent['dpd_delay'] = 10; + $ph1ent['dpd_maxfail'] = 5; + $ph1ent['mobile'] = true; + + $ph2ent = array(); + $ph2ent['ikeid'] = $ph1ent['ikeid']; + $ph2ent['descr'] = "phase2 for ".$mobilecfg['descr']; + $ph2ent['localid'] = array('type' => 'none'); + $ph2ent['remoteid'] = array('type' => 'mobile'); + $ph2ent['protocol'] = $mobilecfg['p2']['protocol']; + + $aes_count = 0; + foreach( $mobilecfg['p2']['encryption-algorithm-option'] as $tunalg ) { + $aes_found = false; + switch ($tunalg) { + case "des": + $ph2alg = array( 'name' => 'des' ); + break; + case "3des": + $ph2alg = array( 'name' => '3des' ); + break; + case "blowfish": + $ph2alg = array( 'name' => 'blowfish', 'keylen' => 'auto' ); + break; + case "cast128": + $ph2alg = array( 'name' => 'cast128' ); + break; + case "rijndael": + case "rijndael 256": + case "aes 256": + $ph2alg = array( 'name' => 'aes', 'keylen' => 'auto' ); + $aes_found = true; + $aes_count++; + break; + } + + if( !$aes_found || ($aes_count < 2)) + $ph2ent['encryption-algorithm-option'][] = $ph2alg; + } + $ph2ent['hash-algorithm-option'] = $mobilecfg['p2']['hash-algorithm-option']; + $ph2ent['pfsgroup'] = $mobilecfg['p2']['pfsgroup']; + $ph2ent['lifetime'] = $mobilecfg['p2']['lifetime']; + $ph2ent['mobile'] = true; + + $config['ipsec']['phase1'][] = $ph1ent; + $config['ipsec']['phase2'][] = $ph2ent; + unset($config['ipsec']['mobileclients']); + } +} + + +function upgrade_047_to_048() { + global $config; + if (!empty($config['dyndns'])) { + $config['dyndnses'] = array(); + $config['dyndnses']['dyndns'] = array(); + if(isset($config['dyndns'][0]['host'])) { + $tempdyn = array(); + $tempdyn['enable'] = isset($config['dyndns'][0]['enable']); + $tempdyn['type'] = $config['dyndns'][0]['type']; + $tempdyn['wildcard'] = isset($config['dyndns'][0]['wildcard']); + $tempdyn['username'] = $config['dyndns'][0]['username']; + $tempdyn['password'] = $config['dyndns'][0]['password']; + $tempdyn['host'] = $config['dyndns'][0]['host']; + $tempdyn['mx'] = $config['dyndns'][0]['mx']; + $tempdyn['interface'] = "wan"; + $tempdyn['descr'] = sprintf(gettext("Upgraded Dyndns %s"), $tempdyn['type']); + $config['dyndnses']['dyndns'][] = $tempdyn; + } + unset($config['dyndns']); + } + if (!empty($config['dnsupdate'])) { + $pconfig = $config['dnsupdate'][0]; + if (!$pconfig['ttl']) + $pconfig['ttl'] = 60; + if (!$pconfig['keytype']) + $pconfig['keytype'] = "zone"; + $pconfig['interface'] = "wan"; + $config['dnsupdates']['dnsupdate'][] = $pconfig; + unset($config['dnsupdate']); + } + + if (is_array($config['pppoe']) && is_array($config['pppoe'][0])) { + $pconfig = array(); + $pconfig['username'] = $config['pppoe'][0]['username']; + $pconfig['password'] = $config['pppoe'][0]['password']; + $pconfig['provider'] = $config['pppoe'][0]['provider']; + $pconfig['ondemand'] = isset($config['pppoe'][0]['ondemand']); + $pconfig['timeout'] = $config['pppoe'][0]['timeout']; + unset($config['pppoe']); + $config['interfaces']['wan']['pppoe_username'] = $pconfig['username']; + $config['interfaces']['wan']['pppoe_password'] = $pconfig['password']; + $config['interfaces']['wan']['provider'] = $pconfig['provider']; + $config['interfaces']['wan']['ondemand'] = isset($pconfig['ondemand']); + $config['interfaces']['wan']['timeout'] = $pconfig['timeout']; + } + if (is_array($config['pptp'])) { + $pconfig = array(); + $pconfig['username'] = $config['pptp']['username']; + $pconfig['password'] = $config['pptp']['password']; + $pconfig['provider'] = $config['pptp']['provider']; + $pconfig['ondemand'] = isset($config['pptp']['ondemand']); + $pconfig['timeout'] = $config['pptp']['timeout']; + unset($config['pptp']); + $config['interfaces']['wan']['pptp_username'] = $pconfig['username']; + $config['interfaces']['wan']['pptp_password'] = $pconfig['password']; + $config['interfaces']['wan']['provider'] = $pconfig['provider']; + $config['interfaces']['wan']['ondemand'] = isset($pconfig['ondemand'] ); + $config['interfaces']['wan']['timeout'] = $pconfig['timeout']; + } +} + + +function upgrade_048_to_049() { + global $config; + /* setup new all users group */ + $all = array(); + $all['name'] = "all"; + $all['description'] = gettext("All Users"); + $all['scope'] = "system"; + $all['gid'] = 1998; + $all['member'] = array(); + + if (!is_array($config['system']['user'])) + $config['system']['user'] = array(); + if (!is_array($config['system']['group'])) + $config['system']['group'] = array(); + + /* work around broken uid assignments */ + $config['system']['nextuid'] = 2000; + foreach ($config['system']['user'] as & $user) { + if (isset($user['uid']) && !$user['uid']) + continue; + $user['uid'] = $config['system']['nextuid']++; + } + + /* work around broken gid assignments */ + $config['system']['nextgid'] = 2000; + foreach ($config['system']['group'] as & $group) { + if ($group['name'] == $g['admin_group']) + $group['gid'] = 1999; + else + $group['gid'] = $config['system']['nextgid']++; + } + + /* build group membership information */ + foreach ($config['system']['group'] as & $group) { + $group['member'] = array(); + foreach ($config['system']['user'] as & $user) { + $groupnames = explode(",", $user['groupname']); + if (in_array($group['name'],$groupnames)) + $group['member'][] = $user['uid']; + } + } + + /* reset user group information */ + foreach ($config['system']['user'] as & $user) { + unset($user['groupname']); + $all['member'][] = $user['uid']; + } + + /* reset group scope information */ + foreach ($config['system']['group'] as & $group) + if ($group['name'] != $g['admin_group']) + $group['scope'] = "user"; + + /* insert new all group */ + $groups = Array(); + $groups[] = $all; + $groups = array_merge($config['system']['group'],$groups); + $config['system']['group'] = $groups; +} + + +function upgrade_049_to_050() { + global $config; + + if (!is_array($config['system']['user'])) + $config['system']['user'] = array(); + /* update user privileges */ + foreach ($config['system']['user'] as & $user) { + $privs = array(); + if (!is_array($user['priv'])) { + unset($user['priv']); + continue; + } + foreach ($user['priv'] as $priv) { + switch($priv['id']) { + case "hasshell": + $privs[] = "user-shell-access"; + break; + case "copyfiles": + $privs[] = "user-copy-files"; + break; + } + } + $user['priv'] = $privs; + } + + /* update group privileges */ + foreach ($config['system']['group'] as & $group) { + $privs = array(); + if (!is_array($group['pages'])) { + unset($group['pages']); + continue; + } + foreach ($group['pages'] as $page) { + $priv = map_page_privname($page); + if ($priv) + $privs[] = $priv; + } + unset($group['pages']); + $group['priv'] = $privs; + } + + /* sync all local account information */ + local_sync_accounts(); +} + + +function upgrade_050_to_051() { + global $config; + $pconfig = array(); + $pconfig['descr'] = "Set to 0 to disable filtering on the incoming and outgoing member interfaces."; + $pconfig['tunable'] = "net.link.bridge.pfil_member"; + $pconfig['value'] = "1"; + $config['sysctl']['item'][] = $pconfig; + $pconfig = array(); + $pconfig['descr'] = "Set to 1 to enable filtering on the bridge interface"; + $pconfig['tunable'] = "net.link.bridge.pfil_bridge"; + $pconfig['value'] = "0"; + $config['sysctl']['item'][] = $pconfig; + + unset($config['bridge']); + + $convert_bridges = false; + foreach($config['interfaces'] as $intf) { + if (isset($intf['bridge']) && $intf['bridge'] <> "") { + $config['bridges'] = array(); + $config['bridges']['bridged'] = array(); + $convert_bridges = true; + break; + } + } + if ($convert_bridges == true) { + $i = 0; + foreach ($config['interfaces'] as $ifr => &$intf) { + if (isset($intf['bridge']) && $intf['bridge'] <> "") { + $nbridge = array(); + $nbridge['members'] = "{$ifr},{$intf['bridge']}"; + $nbridge['descr'] = sprintf(gettext("Converted bridged %s"), $ifr); + $nbridge['bridgeif'] = "bridge{$i}"; + $config['bridges']['bridged'][] = $nbridge; + unset($intf['bridge']); + $i++; + } + } + } +} + + +function upgrade_051_to_052() { + global $config; + $config['openvpn'] = array(); + if (!is_array($config['ca'])) + $config['ca'] = array(); + if (!is_array($config['cert'])) + $config['cert'] = array(); + + $vpnid = 1; + + /* openvpn server configurations */ + if (is_array($config['installedpackages']['openvpnserver'])) { + $config['openvpn']['openvpn-server'] = array(); + + $index = 1; + foreach($config['installedpackages']['openvpnserver']['config'] as $server) { + + if (!is_array($server)) + continue; + + if ($server['auth_method'] == "pki") { + + /* create ca entry */ + $ca = array(); + $ca['refid'] = uniqid(); + $ca['descr'] = "OpenVPN Server CA #{$index}"; + $ca['crt'] = $server['ca_cert']; + $config['ca'][] = $ca; + + /* create ca reference */ + unset($server['ca_cert']); + $server['caref'] = $ca['refid']; + + /* create a crl entry if needed */ + if (!empty($server['crl'][0])) { + $crl = array(); + $crl['refid'] = uniqid(); + $crl['descr'] = "Imported OpenVPN CRL #{$index}"; + $crl['caref'] = $ca['refid']; + $crl['text'] = $server['crl'][0]; + if(!is_array($config['crl'])) + $config['crl'] = array(); + $config['crl'][] = $crl; + $server['crlref'] = $crl['refid']; + } + unset($server['crl']); + + /* create cert entry */ + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = "OpenVPN Server Certificate #{$index}"; + $cert['crt'] = $server['server_cert']; + $cert['prv'] = $server['server_key']; + $config['cert'][] = $cert; + + /* create cert reference */ + unset($server['server_cert']); + unset($server['server_key']); + $server['certref'] = $cert['refid']; + + $index++; + } + + /* determine operational mode */ + if ($server['auth_method'] == 'pki') { + if($server['nopool']) { + $server['mode'] = "p2p_tls"; + } else { + $server['mode'] = "server_tls"; + } + } else { + $server['mode'] = "p2p_shared_key"; + } + unset($server['auth_method']); + + /* modify configuration values */ + $server['dh_length'] = 1024; + unset($server['dh_params']); + if (!$server['interface']) + $server['interface'] = 'any'; + $server['tunnel_network'] = $server['addresspool']; + unset($server['addresspool']); + if (isset($server['use_lzo']) && ($server['use_lzo'] == "on")) { + $server['compression'] = "on"; + unset($server['use_lzo']); + } + if ($server['nopool']) + $server['pool_enable'] = false; + else + $server['pool_enable'] = "yes"; + unset($server['nopool']); + $server['dns_domain'] = $server['dhcp_domainname']; + unset($server['dhcp_domainname']); + + $tmparr = explode(";", $server['dhcp_dns'], 4); + $d=1; + foreach ($tmparr as $tmpa) { + $server["dns_server{$d}"] = $tmpa; + $d++; + } + unset($server['dhcp_dns']); + + $tmparr = explode(";", $server['dhcp_ntp'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $server["ntp_server{$d}"] = $tmpa; + $d++; + } + unset($server['dhcp_ntp']); + + if ($server['dhcp_nbtdisable']) + $server['netbios_enable'] = false; + else + $server['netbios_enable'] = "yes"; + unset($server['dhcp_nbtdisable']); + $server['netbios_ntype'] = $server['dhcp_nbttype']; + unset($server['dhcp_nbttype']); + $server['netbios_scope'] = $server['dhcp_nbtscope']; + unset($server['dhcp_nbtscope']); + + $tmparr = explode(";", $server['dhcp_nbdd'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $server["nbdd_server{$d}"] = $tmpa; + $d++; + } + unset($server['dhcp_nbdd']); + + $tmparr = explode(";", $server['dhcp_wins'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $server["wins_server{$d}"] = $tmpa; + $d++; + } + unset($server['dhcp_wins']); + + if (!empty($server['disable'])) + $server['disable'] = true; + else + unset($server['disable']); + + /* allocate vpnid */ + $server['vpnid'] = $vpnid++; + + if (!empty($server['custom_options'])) { + $cstmopts = array(); + $tmpcstmopts = explode(";", $server['custom_options']); + $assigned_if = ""; + $tmpstr = ""; + foreach ($tmpcstmopts as $tmpcstmopt) { + $tmpstr = str_replace(" ", "", $tmpcstmopt); + if (substr($tmpstr,0 ,6) == "devtun") { + $assigned_if = substr($tmpstr, 3); + continue; + } else if (substr($tmpstr, 0, 5) == "local") { + $localip = substr($tmpstr, 5); + $server['ipaddr'] = str_replace("\n", "", $localip); + } else + $cstmopts[] = $tmpcstmopt; + } + $server['custom_options'] = implode(";", $cstmopts); + if (!empty($assigned_if)) { + foreach ($config['interfaces'] as $iface => $cfgif) { + if ($cfgif['if'] == $assigned_if) { + $config['interfaces'][$iface]['if'] = "ovpns{$server['vpnid']}"; + break; + } + } + } + } + + $config['openvpn']['openvpn-server'][] = $server; + } + unset($config['installedpackages']['openvpnserver']); + } + + /* openvpn client configurations */ + if (is_array($config['installedpackages']['openvpnclient'])) { + $config['openvpn']['openvpn-client'] = array(); + + $index = 1; + foreach($config['installedpackages']['openvpnclient']['config'] as $client) { + + if (!is_array($client)) + continue; + + if ($client['auth_method'] == "pki") { + + /* create ca entry */ + $ca = array(); + $ca['refid'] = uniqid(); + $ca['descr'] = "OpenVPN Client CA #{$index}"; + $ca['crt'] = $client['ca_cert']; + $ca['crl'] = $client['crl']; + $config['ca'][] = $ca; + + /* create ca reference */ + unset($client['ca_cert']); + unset($client['crl']); + $client['caref'] = $ca['refid']; + + /* create cert entry */ + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = "OpenVPN Client Certificate #{$index}"; + $cert['crt'] = $client['client_cert']; + $cert['prv'] = $client['client_key']; + $config['cert'][] = $cert; + + /* create cert reference */ + unset($client['client_cert']); + unset($client['client_key']); + $client['certref'] = $cert['refid']; + + $index++; + } + + /* determine operational mode */ + if ($client['auth_method'] == 'pki') + $client['mode'] = "p2p_tls"; + else + $client['mode'] = "p2p_shared_key"; + unset($client['auth_method']); + + /* modify configuration values */ + if (!$client['interface']) + $client['interface'] = 'wan'; + $client['tunnel_network'] = $client['interface_ip']; + unset($client['interface_ip']); + $client['server_addr'] = $client['serveraddr']; + unset($client['serveraddr']); + $client['server_port'] = $client['serverport']; + unset($client['serverport']); + $client['proxy_addr'] = $client['poxy_hostname']; + unset($client['proxy_addr']); + if (isset($client['use_lzo']) && ($client['use_lzo'] == "on")) { + $client['compression'] = "on"; + unset($client['use_lzo']); + } + $client['resolve_retry'] = $client['infiniteresolvretry']; + unset($client['infiniteresolvretry']); + + /* allocate vpnid */ + $client['vpnid'] = $vpnid++; + + if (!empty($client['custom_options'])) { + $cstmopts = array(); + $tmpcstmopts = explode(";", $client['custom_options']); + $assigned_if = ""; + $tmpstr = ""; + foreach ($tmpcstmopts as $tmpcstmopt) { + $tmpstr = str_replace(" ", "", $tmpcstmopt); + if (substr($tmpstr,0 ,6) == "devtun") { + $assigned_if = substr($tmpstr, 3); + continue; + } else if (substr($tmpstr, 0, 5) == "local") { + $localip = substr($tmpstr, 5); + $client['ipaddr'] = str_replace("\n", "", $localip); + } else + $cstmopts[] = $tmpcstmopt; + } + $client['custom_options'] = implode(";", $cstmopts); + if (!empty($assigned_if)) { + foreach ($config['interfaces'] as $iface => $cfgif) { + if ($cfgif['if'] == $assigned_if) { + $config['interfaces'][$iface]['if'] = "ovpnc{$client['vpnid']}"; + break; + } + } + } + } + + if (!empty($client['disable'])) + $client['disable'] = true; + else + unset($client['disable']); + + $config['openvpn']['openvpn-client'][] = $client; + } + + unset($config['installedpackages']['openvpnclient']); + } + + /* openvpn client specific configurations */ + if (is_array($config['installedpackages']['openvpncsc'])) { + $config['openvpn']['openvpn-csc'] = array(); + + foreach($config['installedpackages']['openvpncsc']['config'] as $csc) { + + if (!is_array($csc)) + continue; + + /* modify configuration values */ + $csc['common_name'] = $csc['commonname']; + unset($csc['commonname']); + $csc['tunnel_network'] = $csc['ifconfig_push']; + unset($csc['ifconfig_push']); + $csc['dns_domain'] = $csc['dhcp_domainname']; + unset($csc['dhcp_domainname']); + + $tmparr = explode(";", $csc['dhcp_dns'], 4); + $d=1; + foreach ($tmparr as $tmpa) { + $csc["dns_server{$d}"] = $tmpa; + $d++; + } + unset($csc['dhcp_dns']); + + $tmparr = explode(";", $csc['dhcp_ntp'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $csc["ntp_server{$d}"] = $tmpa; + $d++; + } + unset($csc['dhcp_ntp']); + + if ($csc['dhcp_nbtdisable']) + $csc['netbios_enable'] = false; + else + $csc['netbios_enable'] = "yes"; + unset($csc['dhcp_nbtdisable']); + $csc['netbios_ntype'] = $csc['dhcp_nbttype']; + unset($csc['dhcp_nbttype']); + $csc['netbios_scope'] = $csc['dhcp_nbtscope']; + unset($csc['dhcp_nbtscope']); + + $tmparr = explode(";", $csc['dhcp_nbdd'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $csc["nbdd_server{$d}"] = $tmpa; + $d++; + } + unset($csc['dhcp_nbdd']); + + $tmparr = explode(";", $csc['dhcp_wins'], 2); + $d=1; + foreach ($tmparr as $tmpa) { + $csc["wins_server{$d}"] = $tmpa; + $d++; + } + unset($csc['dhcp_wins']); + + if (!empty($csc['disable'])) + $csc['disable'] = true; + else + unset($csc['disable']); + + $config['openvpn']['openvpn-csc'][] = $csc; + } + + unset($config['installedpackages']['openvpncsc']); + } + + if (count($config['openvpn']['openvpn-server']) > 0 || + count($config['openvpn']['openvpn-client']) > 0) { + $ovpnrule = array(); + $ovpnrule['type'] = "pass"; + $ovpnrule['interface'] = "openvpn"; + $ovpnrule['statetype'] = "keep state"; + $ovpnrule['source'] = array(); + $ovpnrule['destination'] = array(); + $ovpnrule['source']['any'] = true; + $ovpnrule['destination']['any'] = true; + $ovpnrule['descr'] = gettext("Auto added OpenVPN rule from config upgrade."); + $config['filter']['rule'][] = $ovpnrule; + } + + /* + * FIXME: hack to keep things working with no installedpackages + * or carp array in the configuration data. + */ + if (!is_array($config['installedpackages'])) + $config['installedpackages'] = array(); + if (!is_array($config['installedpackages']['carp'])) + $config['installedpackages']['carp'] = array(); + +} + + +function upgrade_052_to_053() { + global $config; + if (!is_array($config['ca'])) + $config['ca'] = array(); + if (!is_array($config['cert'])) + $config['cert'] = array(); + + /* migrate advanced admin page webui ssl to certifcate mngr */ + if ($config['system']['webgui']['certificate'] && + $config['system']['webgui']['private-key']) { + + /* create cert entry */ + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = "webConfigurator SSL Certificate"; + $cert['crt'] = $config['system']['webgui']['certificate']; + $cert['prv'] = $config['system']['webgui']['private-key']; + $config['cert'][] = $cert; + + /* create cert reference */ + unset($config['system']['webgui']['certificate']); + unset($config['system']['webgui']['private-key']); + $config['system']['webgui']['ssl-certref'] = $cert['refid']; + } + + /* migrate advanced admin page ssh keys to user manager */ + if ($config['system']['ssh']['authorizedkeys']) { + $admin_user =& getUserEntryByUID(0); + $admin_user['authorizedkeys'] = $config['system']['ssh']['authorizedkeys']; + unset($config['system']['ssh']['authorizedkeys']); + } +} + + +function upgrade_053_to_054() { + global $config; + if(is_array($config['load_balancer']['lbpool'])) { + $lbpool_arr = $config['load_balancer']['lbpool']; + $lbpool_srv_arr = array(); + $gateway_group_arr = array(); + $gateways = return_gateways_array(); + $group_name_changes = array(); + if (! is_array($config['gateways']['gateway_item'])) + $config['gateways']['gateway_item'] = array(); + + $a_gateways =& $config['gateways']['gateway_item']; + foreach($lbpool_arr as $lbpool) { + if($lbpool['type'] == "gateway") { + // Gateway Groups have to have valid names in pf, old lb pools did not. Clean them up. + $group_name = preg_replace("/[^A-Za-z0-9]/", "", $lbpool['name'] ); + // If we made and changes, check for collisions and note the change. + if ($group_name != $lbpool['name']) { + // Make sure the name isn't already in use. + foreach ($gateway_group_arr as $gwg) { + // If the name is in use, add some random bits to avoid collision. + if ($gwg['name'] == $group_name) + $group_name .= uniqid(); + } + $group_name_changes[$lbpool['name']] = $group_name; + } + $gateway_group['name'] = $group_name; + $gateway_group['descr'] = $lbpool['descr']; + $gateway_group['trigger'] = "down"; + $gateway_group['item'] = array(); + $i = 0; + foreach($lbpool['servers'] as $member) { + $split = explode("|", $member); + $interface = $split[0]; + $monitor = $split[1]; + /* on static upgraded configuration we automatically prepend GW_ */ + $static_name = "GW_" . strtoupper($interface); + if(is_ipaddr($monitor)) + foreach ($a_gateways as & $gw) + if ($gw['name'] == $static_name) + $gw['monitor'] = $monitor; + + /* on failover increment tier. Else always assign 1 */ + if($lbpool['behaviour'] == "failover") { + $i++; + } else { + $i = 1; + } + $gateway_group['item'][] = "$static_name|$i"; + } + $gateway_group_arr[] = $gateway_group; + } else { + $lbpool_srv_arr[] = $lbpool; + } + } + $config['load_balancer']['lbpool'] = $lbpool_srv_arr; + $config['gateways']['gateway_group'] = $gateway_group_arr; + } + // Unset lbpool if we no longer have any server pools + if (count($lbpool_srv_arr) == 0) { + if(empty($config['load_balancer'])) { + unset($config['load_balancer']); + } else { + unset($config['load_balancer']['lbpool']); + } + } else { + $config['load_balancer']['lbpool'] = $lbpool_srv_arr; + } + // Only set the gateway group array if we converted any + if (count($gateway_group_arr) != 0) { + $config['gateways']['gateway_group'] = $gateway_group_arr; + // Update any rules that had a gateway change, if any. + if (count($group_name_changes) > 0) + foreach ($config['filter']['rule'] as & $rule) + if (!empty($rule["gateway"]) && array_key_exists($rule["gateway"], $group_name_changes)) + $rule["gateway"] = $group_name_changes[$rule["gateway"]]; + } +} + + +function upgrade_054_to_055() { + global $config; + global $g; + + /* RRD files changed for quality, traffic and packets graphs */ + //ini_set("max_execution_time", "1800"); + /* convert traffic RRD file */ + global $parsedcfg, $listtags; + $listtags = array("ds", "v", "rra", "row"); + + $rrddbpath = "/var/db/rrd/"; + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + if ($g['platform'] != "pfSense") { + /* restore the databases, if we have one */ + if (restore_rrd()) { + /* Make sure to move the rrd backup out of the way. We will make a new one after converting. */ + rename("{$g['cf_conf_path']}/rrd.tgz", "{$g['cf_conf_path']}/backup"); + } + } + + $rrdinterval = 60; + $valid = $rrdinterval * 2; + + /* Asume GigE for now */ + $downstream = 125000000; + $upstream = 125000000; + + /* build a list of quality databases */ + /* roundtrip has become delay */ + function divide_delay($delayval) { + $delayval = floatval($delayval); + $delayval = ($delayval / 1000); + $delayval = " ". sprintf("%1.10e", $delayval) ." "; + return $delayval; + } + /* the roundtrip times need to be divided by 1000 to get seconds, really */ + $databases = array(); + if (!file_exists($rrddbpath)) + @mkdir($rrddbpath); + chdir($rrddbpath); + $databases = glob("*-quality.rrd"); + rsort($databases); + foreach($databases as $database) { + $xmldump = "{$database}.old.xml"; + $xmldumpnew = "{$database}.new.xml"; + + if ($g['booting']) + echo "Migrate RRD database {$database} to new format for IPv6 \n"; + mwexec("$rrdtool tune {$rrddbpath}{$database} -r roundtrip:delay 2>&1"); + + dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}"); + $rrdold = xml2array(file_get_contents("{$g['tmp_path']}/{$xmldump}"), 1, "tag"); + $rrdold = $rrdold['rrd']; + + $i = 0; + foreach($rrdold['rra'] as $rra) { + $l = 0; + foreach($rra['database']['row'] as $row) { + $vnew = divide_delay($row['v'][1]); + $rrdold['rra'][$i]['database']['row'][$l]['v'][1] = $vnew; + $l++; + } + $i++; + } + + file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", dump_xml_config_raw($rrdold, "rrd")); + mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1"); + + unset($rrdold); + } + /* let apinger recreate required files */ + setup_gateways_monitor(); + + /* build a list of traffic and packets databases */ + $databases = return_dir_as_array($rrddbpath, '/-(traffic|packets)\.rrd$/'); + rsort($databases); + foreach($databases as $database) { + $databasetmp = "{$database}.tmp"; + $xmldump = "{$database}.old.xml"; + $xmldumptmp = "{$database}.tmp.xml"; + $xmldumpnew = "{$database}.new.xml"; + + if ($g['booting']) + echo "Migrate RRD database {$database} to new format \n"; + /* rename DS source */ + mwexec("$rrdtool tune {$rrddbpath}/{$database} -r in:inpass 2>&1"); + mwexec("$rrdtool tune {$rrddbpath}/{$database} -r out:outpass 2>71"); + + /* dump contents to xml and move database out of the way */ + dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}"); + + /* create new rrd database file */ + $rrdcreate = "$rrdtool create {$g['tmp_path']}/{$databasetmp} --step $rrdinterval "; + $rrdcreate .= "DS:inpass:COUNTER:$valid:0:$downstream "; + $rrdcreate .= "DS:outpass:COUNTER:$valid:0:$upstream "; + $rrdcreate .= "DS:inblock:COUNTER:$valid:0:$downstream "; + $rrdcreate .= "DS:outblock:COUNTER:$valid:0:$upstream "; + $rrdcreate .= "RRA:AVERAGE:0.5:1:1000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:5:1000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:60:1000 "; + $rrdcreate .= "RRA:AVERAGE:0.5:720:1000 "; + + create_new_rrd("$rrdcreate"); + /* create temporary xml from new RRD */ + dump_rrd_to_xml("{$g['tmp_path']}/{$databasetmp}", "{$g['tmp_path']}/{$xmldumptmp}"); + + $rrdold = xml2array(file_get_contents("{$g['tmp_path']}/{$xmldump}"), 1, "tag"); + $rrdold = $rrdold['rrd']; + + $rrdnew = xml2array(file_get_contents("{$g['tmp_path']}/{$xmldumptmp}"), 1, "tag"); + $rrdnew = $rrdnew['rrd']; + + /* remove any MAX RRA's. Not needed for traffic. */ + $i = 0; + foreach ($rrdold['rra'] as $rra) { + if(trim($rra['cf']) == "MAX") { + unset($rrdold['rra'][$i]); + } + $i++; + } + + file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", dump_xml_config_raw(migrate_rrd_format($rrdold, $rrdnew), "rrd")); + mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1"); + /* we now have the rrd with the new fields, adjust the size now. */ + /* RRA 2 is 60 minutes, RRA 3 is 720 minutes */ + mwexec("/bin/sync"); + mwexec("$rrdtool resize {$rrddbpath}/{$database} 2 GROW 2000;/bin/mv resize.rrd {$rrddbpath}/{$database} 2>&1"); + mwexec("/bin/sync"); + mwexec("$rrdtool resize {$rrddbpath}/{$database} 3 GROW 2000;/bin/mv resize.rrd {$rrddbpath}/{$database} 2>&1"); + unset($rrdxmlarray); + } + enable_rrd_graphing(); + /* Let's save the RRD graphs after we run enable RRD graphing */ + /* The function will restore the rrd.tgz so we will save it after */ + exec("cd /; LANG=C NO_REMOUNT=1 RRDDBPATH='{$rrddbpath}' CF_CONF_PATH='{$g['cf_conf_path']}' /etc/rc.backup_rrd.sh"); + unlink_if_exists("{$g['vardb_path']}/rrd/*.xml"); + if ($g['booting']) + echo "Updating configuration..."; +} + + +function upgrade_055_to_056() { + global $config; + + if (!is_array($config['ca'])) + $config['ca'] = array(); + if (!is_array($config['cert'])) + $config['cert'] = array(); + + /* migrate ipsec ca's to cert manager */ + if (is_array($config['ipsec']['cacert'])) { + foreach($config['ipsec']['cacert'] as & $cacert) { + $ca = array(); + $ca['refid'] = uniqid(); + if (is_array($cacert['cert'])) + $ca['crt'] = $cacert['cert'][0]; + else + $ca['crt'] = $cacert['cert']; + $ca['descr'] = $cacert['ident']; + $config['ca'][] = $ca; + } + unset($config['ipsec']['cacert']); + } + + /* migrate phase1 certificates to cert manager */ + if (is_array($config['ipsec']['phase1'])) { + foreach($config['ipsec']['phase1'] as & $ph1ent) { + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = "IPsec Peer {$ph1ent['remote-gateway']} Certificate"; + if (is_array($ph1ent['cert'])) + $cert['crt'] = $ph1ent['cert'][0]; + else + $cert['crt'] = $ph1ent['cert']; + $cert['prv'] = $ph1ent['private-key']; + $config['cert'][] = $cert; + $ph1ent['certref'] = $cert['refid']; + if ($ph1ent['cert']) + unset($ph1ent['cert']); + if ($ph1ent['private-key']) + unset($ph1ent['private-key']); + if ($ph1ent['peercert']) + unset($ph1ent['peercert']); + } + } +} + + +function upgrade_056_to_057() { + global $config; + + if (!is_array($config['system']['user'])) + $config['system']['user'] = array(); + /* migrate captivate portal to user manager */ + if (is_array($config['captiveportal']['user'])) { + foreach($config['captiveportal']['user'] as $user) { + // avoid user conflicts + $found = false; + foreach ($config['system']['user'] as $userent) { + if ($userent['name'] == $user['name']) { + $found = true; + break; + } + } + if ($found) + continue; + $user['scope'] = "user"; + if (isset($user['expirationdate'])) { + $user['expires'] = $user['expirationdate']; + unset($user['expirationdate']); + } + if (isset($user['password'])) { + $user['md5-hash'] = $user['password']; + unset($user['password']); + } + $user['uid'] = $config['system']['nextuid']++; + $config['system']['user'][] = $user; + } + unset($config['captiveportal']['user']); + } +} + +function upgrade_057_to_058() { + global $config; + /* set all phase2 entries to tunnel mode */ + if (is_array($config['ipsec']['phase2'])) + foreach($config['ipsec']['phase2'] as & $ph2ent) + $ph2ent['mode'] = 'tunnel'; +} + +function upgrade_058_to_059() { + global $config; + + if (is_array($config['schedules']['schedule'])) { + foreach ($config['schedules']['schedule'] as & $schedl) + $schedl['schedlabel'] = uniqid(); + } +} + +function upgrade_059_to_060() { + global $config; + require_once("/etc/inc/certs.inc"); + if (is_array($config['ca'])) { + /* Locate issuer for all CAs */ + foreach ($config['ca'] as & $ca) { + $subject = cert_get_subject($ca['crt']); + $issuer = cert_get_issuer($ca['crt']); + if($issuer <> $subject) { + $issuer_crt =& lookup_ca_by_subject($issuer); + if($issuer_crt) + $ca['caref'] = $issuer_crt['refid']; + } + } + + /* Locate issuer for all certificates */ + if (is_array($config['cert'])) { + foreach ($config['cert'] as & $cert) { + $subject = cert_get_subject($cert['crt']); + $issuer = cert_get_issuer($cert['crt']); + if($issuer <> $subject) { + $issuer_crt =& lookup_ca_by_subject($issuer); + if($issuer_crt) + $cert['caref'] = $issuer_crt['refid']; + } + } + } + } +} + +function upgrade_060_to_061() { + global $config; + + if (is_array($config['interfaces']['wan'])) + $config['interfaces']['wan']['enable'] = true; + if (is_array($config['interfaces']['lan'])) + $config['interfaces']['lan']['enable'] = true; + + /* On 1.2.3 the "mtu" field adjusted MSS. + On 2.x the "mtu" field is actually the MTU. Rename accordingly. + See redmine ticket #1886 + */ + foreach ($config['interfaces'] as $ifr => &$intf) { + if (isset($intf['mtu']) && is_numeric($intf['mtu'])) { + $intf['mss'] = $intf['mtu']; + unset($intf['mtu']); + } + } +} + +function upgrade_061_to_062() { + global $config; + + /* Convert NAT port forwarding rules */ + if (is_array($config['nat']['rule'])) { + $a_nat = &$config['nat']['rule']; + + foreach ($a_nat as &$natent) { + $natent['disabled'] = false; + $natent['nordr'] = false; + + $natent['source'] = array( + "not" => false, + "any" => true, + "port" => "" + ); + + $natent['destination'] = array( + "not" => false, + "address" => $natent['external-address'], + "port" => $natent['external-port'] + ); + + if (empty($natent['destination']['address'])) { + unset($natent['destination']['address']); + $natent['destination']['network'] = $natent['interface'] . 'ip'; + } else if ($natent['destination']['address'] == 'any') { + unset($natent['destination']['address']); + $natent['destination']['any'] = true; + } + + unset($natent['external-address']); + unset($natent['external-port']); + } + + unset($natent); + } +} + +function upgrade_062_to_063() { + /* Upgrade legacy Themes to the new pfsense_ng */ + global $config; + + switch($config['theme']) { + case "nervecenter": + $config['theme'] = "pfsense_ng"; + break; + } + +} + +function upgrade_063_to_064() { + global $config; + $j=0; + $ifcfg = &$config['interfaces']; + + if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($config['ppps']['ppp'] as $pppid => $ppp) { + $config['ppps']['ppp'][$pppid]['if'] = "ppp".$j; + $config['ppps']['ppp'][$pppid]['ptpid'] = $j; + $j++; + if (isset($ppp['port'])){ + $config['ppps']['ppp'][$pppid]['ports'] = $ppp['port']; + unset($config['ppps']['ppp'][$pppid]['port']); + } + if (!isset($ppp['type'])){ + $config['ppps']['ppp'][$pppid]['type'] = "ppp"; + } + if (isset($ppp['defaultgw'])) + unset($config['ppps']['ppp'][$pppid]['defaultgw']); + } + } + + if (!is_array($config['ppps']['ppp'])) + $config['ppps']['ppp'] = array(); + $a_ppps = &$config['ppps']['ppp']; + + foreach ($ifcfg as $ifname => $ifinfo) { + $ppp = array(); + // For pppoe conversion + if ($ifinfo['ipaddr'] == "pppoe" || $ifinfo['ipaddr'] == "pptp"){ + if (isset($ifinfo['ptpid'])) + continue; + $ppp['ptpid'] = $j; + $ppp['type'] = $ifinfo['ipaddr']; + $ppp['if'] = $ifinfo['ipaddr'].$j; + $ppp['ports'] = $ifinfo['if']; + if ($ifinfo['ipaddr'] == "pppoe"){ + $ppp['username'] = $ifinfo['pppoe_username']; + $ppp['password'] = base64_encode($ifinfo['pppoe_password']); + } + if ($ifinfo['ipaddr'] == "pptp"){ + $ppp['username'] = $ifinfo['pptp_username']; + $ppp['password'] = base64_encode($ifinfo['pptp_password']); + } + + if (isset($ifinfo['provider'])) + $ppp['provider'] = $ifinfo['provider']; + if (isset($ifinfo['ondemand'])) + $ppp['ondemand'] = true; + if (isset($ifinfo['timeout'])) + $ppp['idletimeout'] = $ifinfo['timeout']; + if (isset($ifinfo['pppoe']['pppoe-reset-type'])){ + $ppp['pppoe-reset-type'] = $ifinfo['pppoe']['pppoe-reset-type']; + if (is_array($config['cron']['item'])) { + for ($i = 0; $i < count($config['cron']['item']); $i++) { + $item = $config['cron']['item'][$i]; + if (strpos($item['command'], "/conf/pppoe{$ifname}restart") !== false) + $config['cron']['item'][$i]['command'] = "/var/etc/pppoe_restart_" . $ppp['if']; + } + } + } + if (isset($ifinfo['local'])) + $ppp['localip'] = $ifinfo['local']; + if (isset($ifinfo['subnet'])) + $ppp['subnet'] = $ifinfo['subnet']; + if (isset($ifinfo['remote'])) + $ppp['gateway'] = $ifinfo['remote']; + + $ifcfg[$ifname]['if'] = $ifinfo['ipaddr'].$j; + $j++; + + unset($ifcfg[$ifname]['pppoe_username']); + unset($ifcfg[$ifname]['pppoe_password']); + unset($ifcfg[$ifname]['provider']); + unset($ifcfg[$ifname]['ondemand']); + unset($ifcfg[$ifname]['timeout']); + unset($ifcfg[$ifname]['pppoe_reset']); + unset($ifcfg[$ifname]['pppoe_preset']); + unset($ifcfg[$ifname]['pppoe']); + unset($ifcfg[$ifname]['pptp_username']); + unset($ifcfg[$ifname]['pptp_password']); + unset($ifcfg[$ifname]['local']); + unset($ifcfg[$ifname]['subnet']); + unset($ifcfg[$ifname]['remote']); + + $a_ppps[] = $ppp; + + } + } +} + +function upgrade_064_to_065() { + /* Disable TSO and LRO in upgraded configs */ + global $config; + $config['system']['disablesegmentationoffloading'] = true; + $config['system']['disablelargereceiveoffloading'] = true; +} + +function upgrade_065_to_066() { + global $config; + + $dhcrelaycfg =& $config['dhcrelay']; + + if (is_array($dhcrelaycfg)) { + $dhcrelayifs = array(); + $foundifs = false; + /* DHCPRelay enabled on any interfaces? */ + foreach ($dhcrelaycfg as $dhcrelayif => $dhcrelayifconf) { + if (isset($dhcrelayifconf['enable'])) { + $dhcrelayifs[] = $dhcrelayif; + unset($dhcrelaycfg['dhcrelayif']); + $foundifs = true; + } + } + if ($foundifs == true) + $dhcrelaycfg['interface'] = implode(",", $dhcrelayifs); + } +} + +function upgrade_066_to_067() { + global $config; + if (isset($config['system']['ca'])) { + $config['ca'] = $config['system']['ca']; + } + if (isset($config['system']['cert'])) { + $config['cert'] = $config['system']['cert']; + } +} + +function upgrade_067_to_068() { + global $config; + + if (!empty($config['pppoe'])) { + $config['pppoes'] = array(); + $config['pppoes']['pppoe'] = array(); + $config['pppoes']['pppoe'][] = $config['pppoe'][0]; + + if (is_array($config['pppoe']['user'])) { + $username = array(); + foreach ($config['pppoe']['user'] as $user) { + $usr = $user['name'] . ":" . base64_encode($user['password']); + if ($user['ip']) + $usr .= ":{$user['ip']}"; + $username[] = $usr; + } + $config['pppoes']['pppoe'][0]['username'] = implode(" ", $username); + } + unset($config['pppoe']); + } +} + +function upgrade_068_to_069() { + global $config; + if (!is_array($config['system']['user'])) + return; + foreach ($config['system']['user'] as & $user) { + if (!is_array($user['cert'])) + continue; + $rids = array(); + foreach ($user['cert'] as $id => $cert) { + if (!isset($cert['descr'])) + continue; + $tcert = $cert; + // Make sure each cert gets a refid + if (!isset($tcert['refid'])) + $tcert['refid'] = uniqid(); + // Keep the cert references for this user + $rids[] = $tcert['refid']; + $config['cert'][] = $tcert; + } + // Replace user certs with cert references instead. + if (count($rids) > 0) + $user['cert'] = $rids; + } +} + +function upgrade_069_to_070() { + global $config; + + /* Convert NAT 1:1 rules */ + if (is_array($config['nat']['onetoone'])) { + foreach ($config['nat']['onetoone'] as $nidx => $natent) { + if ($natent['subnet'] == 32) + $config['nat']['onetoone'][$nidx]['source'] = array("address" => $natent['internal']); + else + $config['nat']['onetoone'][$nidx]['source'] = array("address" => $natent['internal'] . "/" . $natent['subnet']); + + $config['nat']['onetoone'][$nidx]['destination'] = array("any" => true); + + unset($config['nat']['onetoone'][$nidx]['internal']); + unset($config['nat']['onetoone'][$nidx]['subnet']); + } + + unset($natent); + } +} + +function upgrade_070_to_071() { + global $config; + + if (is_array($config['cron']['item'])) { + foreach($config['cron']['item'] as $idx => $cronitem) { + if(stristr($cronitem['command'], "checkreload.sh")) { + unset($config['cron']['item'][$idx]); + break; + } + } + } +} + +function rename_field(& $section, $oldname, $newname) { + if (is_array($section)) { + foreach($section as & $item) { + if (is_array($item) && !empty($item[$oldname])) + $item[$newname] = $item[$oldname]; + if (is_array($item) && isset($item[$oldname])) + unset($item[$oldname]); + } + } +} + +function upgrade_071_to_072() { + global $config; + if (is_array($config['sysctl']) && is_array($config['sysctl']['item'])) + rename_field($config['sysctl']['item'], 'desc', 'descr'); +} + +function upgrade_072_to_073() { + global $config; + if (!is_array($config['load_balancer'])) + return; + if (is_array($config['load_balancer']['monitor_type'])) + rename_field($config['load_balancer']['monitor_type'], 'desc', 'descr'); + if (is_array($config['load_balancer']['lbpool'])) + rename_field($config['load_balancer']['lbpool'], 'desc', 'descr'); + if (is_array($config['load_balancer']['lbaction'])) + rename_field($config['load_balancer']['lbaction'], 'desc', 'descr'); + if (is_array($config['load_balancer']['lbprotocol'])) + rename_field($config['load_balancer']['lbprotocol'], 'desc', 'descr'); + if (is_array($config['load_balancer']['virtual_server'])) + rename_field($config['load_balancer']['virtual_server'], 'desc', 'descr'); +} + +function upgrade_073_to_074() { + global $config; + rename_field($config['system']['user'], 'fullname', 'descr'); +} + +function upgrade_074_to_075() { + global $config; + if (is_array($config['ca'])) + rename_field($config['ca'], 'name', 'descr'); + if (is_array($config['cert'])) + rename_field($config['cert'], 'name', 'descr'); + if (is_array($config['crl'])) + rename_field($config['crl'], 'name', 'descr'); +} + +function upgrade_075_to_076() { + global $config; + $cron_item = array(); + $cron_item['minute'] = "30"; + $cron_item['hour'] = "12"; + $cron_item['mday'] = "*"; + $cron_item['month'] = "*"; + $cron_item['wday'] = "*"; + $cron_item['who'] = "root"; + $cron_item['command'] = "/usr/bin/nice -n20 /etc/rc.update_urltables"; + $config['cron']['item'][] = $cron_item; +} + +function upgrade_076_to_077() { + global $config; + foreach($config['filter']['rule'] as & $rule) { + if (isset($rule['protocol']) && !empty($rule['protocol'])) + $rule['protocol'] = strtolower($rule['protocol']); + } +} + +function upgrade_077_to_078() { + global $config; + if (is_array($config['pptpd']) && is_array($config['pptpd']['radius']) + && !is_array($config['pptpd']['radius']['server'])) { + $radarr = array(); + $radsvr = array(); + $radsvr['ip'] = $config['pptpd']['radius']['server']; + $radsvr['secret'] = $config['pptpd']['radius']['secret']; + $radsvr['port'] = 1812; + $radsvr['acctport'] = 1813; + $radsvr['enable'] = isset($config['pptpd']['radius']['enable']); + $radarr['accounting'] = isset($config['pptpd']['radius']['accounting']); + if ($radarr['accounting']) + $radarr['acct_update'] = $radsvr['ip']; + $radarr['server'] = $radsvr; + $config['pptpd']['radius'] = $radarr; + } + if (is_array($config['pptpd'])) { + $config['pptpd']['n_pptp_units'] = empty($config['pptpd']['n_pptp_units']) ? 16 : $config['pptpd']['n_pptp_units']; + } +} +function upgrade_078_to_079() { + global $g; + /* Delete old and unused RRD file */ + unlink_if_exists("{$g['vardb_path']}/rrd/captiveportal-totalusers.rrd"); +} + +function upgrade_079_to_080() { + global $config; + + /* Upgrade config in 1.2.3 specifying a username other than admin for synching. */ + if (!empty($config['system']['username']) && is_array($config['installedpackages']['carpsettings']) && + is_array($config['installedpackages']['carpsettings']['config'])) { + $config['installedpackages']['carpsettings']['config'][0]['username'] = $config['system']['username']; + unset($config['system']['username']); + } +} + +function upgrade_080_to_081() { + global $config; + global $g; + /* Welcome to the 2.1 migration path */ + + /* tag all the existing gateways as being IPv4 */ + $i = 0; + if(is_array($config['gateways']['gateway_item'])) { + foreach($config['gateways']['gateway_item'] as $gw) { + $config['gateways']['gateway_item'][$i]['ipprotocol'] = "inet"; + $i++; + } + } + + /* RRD files changed for quality, traffic and packets graphs */ + /* convert traffic RRD file */ + global $parsedcfg, $listtags; + $listtags = array("ds", "v", "rra", "row"); + + $rrddbpath = "/var/db/rrd/"; + $rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + + if ($g['platform'] != "pfSense") { + /* restore the databases, if we have one */ + if (restore_rrd()) { + /* Make sure to move the rrd backup out of the way. We will make a new one after converting. */ + @rename("{$g['cf_conf_path']}/rrd.tgz", "{$g['cf_conf_path']}/backup/rrd.tgz"); + } + } + + $rrdinterval = 60; + $valid = $rrdinterval * 2; + + /* Asume GigE for now */ + $downstream = 125000000; + $upstream = 125000000; + + /* build a list of traffic and packets databases */ + $databases = return_dir_as_array($rrddbpath, '/-(traffic|packets)\.rrd$/'); + rsort($databases); + foreach($databases as $database) { + $xmldump = "{$database}.old.xml"; + $xmldumpnew = "{$database}.new.xml"; + + if ($g['booting']) + echo "Migrate RRD database {$database} to new format for IPv6.\n"; + + /* dump contents to xml and move database out of the way */ + dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}"); + + /* search and replace tags to add data sources */ + $ds_search = ""; + $ds_arr = array(); + $ds_arr[] = " + inpass6 + COUNTER + {$valid} + 0.0000000000e+00 + 1.2500000000e+08 + + + 0 + NaN + 3 + + "; + $ds_arr[] = " + outpass6 + COUNTER + {$valid} + 0.0000000000e+00 + 1.2500000000e+08 + + + 0 + NaN + 3 + + "; + $ds_arr[] = " + inblock6 + COUNTER + {$valid} + 0.0000000000e+00 + 1.2500000000e+08 + + + 0 + NaN + 3 + + "; + $ds_arr[] = " + outblock6 + COUNTER + {$valid} + 0.0000000000e+00 + 1.2500000000e+08 + + + 0 + NaN + 3 + + "; + + $cdp_search = "<\/cdp_prep>"; + $cdp_replace = ""; + $cdp_arr = array(); + $cdp_arr[] = " + NaN + 0.0000000000e+00 + NaN + 0 + + "; + $cdp_arr[] = " + NaN + 0.0000000000e+00 + NaN + 0 + + "; + $cdp_arr[] = " + NaN + 0.0000000000e+00 + NaN + 0 + + "; + $cdp_arr[] = " + NaN + 0.0000000000e+00 + NaN + 0 + + "; + + $value_search = "<\/row>"; + $value_replace = ""; + $value = " NaN "; + + $xml = file_get_contents("{$g['tmp_path']}/{$xmldump}"); + foreach($ds_arr as $ds) { + $xml = preg_replace("/$ds_search/s", "$ds{$ds_search}", $xml); + } + foreach($cdp_arr as $cdp) { + $xml = preg_replace("/$cdp_search/s", "$cdp{$cdp_replace}", $xml); + } + foreach($ds_arr as $ds) { + $xml = preg_replace("/$value_search/s", "$value{$value_replace}", $xml); + } + + file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", $xml); + mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1"); + unset($xml); + # Default /tmp tmpfs is ~40mb, do not leave temp files around + unlink_if_exists("{$g['tmp_path']}/{$xmldump}"); + unlink_if_exists("{$g['tmp_path']}/{$xmldumpnew}"); + } + enable_rrd_graphing(); + /* Let's save the RRD graphs after we run enable RRD graphing */ + /* The function will restore the rrd.tgz so we will save it after */ + exec("cd /; LANG=C NO_REMOUNT=1 RRDDBPATH='{$rrddbpath}' CF_CONF_PATH='{$g['cf_conf_path']}' /etc/rc.backup_rrd.sh"); + if ($g['booting']) + echo "Updating configuration..."; + foreach($config['filter']['rule'] as & $rule) { + if (isset($rule['protocol']) && !empty($rule['protocol'])) + $rule['protocol'] = strtolower($rule['protocol']); + } + unset($rule); +} + +function upgrade_081_to_082() { + /* don't enable the allow IPv6 toggle */ +} + +function upgrade_082_to_083() { + global $config; + + /* Upgrade captiveportal config */ + if (!empty($config['captiveportal'])) { + $tmpcp = $config['captiveportal']; + $config['captiveportal'] = array(); + $config['captiveportal']['cpzone'] = array(); + $config['captiveportal']['cpzone'] = $tmpcp; + $config['captiveportal']['cpzone']['zoneid'] = 8000; + $config['captiveportal']['cpzone']['zone'] = "cpzone"; + if ($config['captiveportal']['cpzone']['auth_method'] == "radius") + $config['captiveportal']['cpzone']['radius_protocol'] = "PAP"; + } + if (!empty($config['voucher'])) { + $tmpcp = $config['voucher']; + $config['voucher'] = array(); + $config['voucher']['cpzone'] = array(); + $config['voucher']['cpzone'] = $tmpcp; + } +} + +function upgrade_083_to_084() { + global $config; + if (!isset($config['hasync'])) { + if (!empty($config['installedpackages']) && + !empty($config['installedpackages']['carpsettings']) && + !empty($config['installedpackages']['carpsettings']['config'])) { + $config['hasync'] = $config['installedpackages']['carpsettings']['config'][0]; + unset($config['installedpackages']['carpsettings']); + } + if (empty($config['installedpackages']['carpsettings'])) { + unset($config['installedpackages']['carpsettings']); + } + if (empty($config['installedpackages'])) { + unset($config['installedpackages']); + } + } +} + +function upgrade_084_to_085() { + global $config; + + $gateway_group_arr = array(); + $gateways = return_gateways_array(); + $oldnames = array(); + /* setup translation array */ + foreach($gateways as $name => $gw) { + if(isset($gw['dynamic'])){ + $oldname = strtoupper($config['interfaces'][$gw['friendlyiface']]['descr']); + $oldnames[$oldname] = $name; + } else { + $oldnames[$name] = $name; + } + } + + /* process the old array */ + if(is_array($config['gateways']['gateway_group'])) { + $group_array_new = array(); + foreach($config['gateways']['gateway_group'] as $name => $group) { + if(is_array($group['item'])) { + $newlist = array(); + foreach($group['item'] as $entry) { + $elements = explode("|", $entry); + if($oldnames[$elements[0]] <> "") { + $newlist[] = "{$oldnames[$elements[0]]}|{$elements[1]}"; + } else { + $newlist[] = "{$elements[0]}|{$elements[1]}"; + } + } + $group['item'] = $newlist; + $group_array_new[$name] = $group; + } + } + $config['gateways']['gateway_group'] = $group_array_new; + } + /* rename old Quality RRD files in the process */ + $rrddbpath = "/var/db/rrd"; + foreach($oldnames as $old => $new) { + if(is_readable("{$rrddbpath}/{$old}-quality.rrd")) { + @rename("{$rrddbpath}/{$old}-quality.rrd", "{$rrddbpath}/{$new}-quality.rrd"); + } + } + unset($gateways, $oldnames, $gateway_group_arr); +} + +function upgrade_085_to_086() { + global $config, $g; + + /* XXX: Gross hacks in sight */ + if (is_array($config['virtualip']['vip'])) { + $vipchg = array(); + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['mode'] != "carp") + continue; + $config = array_replace_values_recursive( + $config, + '^vip' . $vip['vhid'] . '$', + "{$vip['interface']}_vip{$vip['vhid']}" + ); + } + } +} + +function upgrade_086_to_087() { + global $config, $dummynet_pipe_list; + + if (!is_array($config['filter']) || !is_array($config['filter']['rule'])) + return; + if (!is_array($config['dnshaper']) || !is_array($config['dnshaper']['queue'])) + return; + + $dnqueue_number = 1; + $dnpipe_number = 1; + + foreach ($config['dnshaper']['queue'] as $idx => $dnpipe) { + $config['dnshaper']['queue'][$idx]['number'] = $dnpipe_number; + $dnpipe_number++; + if (is_array($dnpipe['queue'])) { + foreach ($dnpipe['queue'] as $qidx => $dnqueue) { + $config['dnshaper']['queue'][$idx]['queue'][$qidx]['number'] = $dnqueue_number; + $dnqueue_number++; + } + } + } + + unset($dnqueue_number, $dnpipe_number, $qidx, $idx, $dnpipe, $dnqueue); + + require_once("shaper.inc"); + read_dummynet_config(); + + $dn_list = array(); + if (is_array($dummynet_pipe_list)) { + foreach ($dummynet_pipe_list as $dn) { + $tmplist =& $dn->get_queue_list(); + foreach ($tmplist as $qname => $link) { + $dn_list[$link] = $qname; + } + } + unset($dummynet_pipe_list); + } + + foreach ($config['filter']['rule'] as $idx => $rule) { + if (!empty($rule['dnpipe'])) { + if (!empty($dn_list[$rule['dnpipe']])) + $config['filter']['rule'][$idx]['dnpipe'] = $dn_list[$rule['dnpipe']]; + } + if (!empty($rule['pdnpipe'])) { + if (!empty($dn_list[$rule['pdnpipe']])) + $config['filter']['rule'][$idx]['pdnpipe'] = $dn_list[$rule['pdnpipe']]; + } + } +} +function upgrade_087_to_088() { + global $config; + if (isset($config['system']['glxsb_enable'])) { + unset($config['system']['glxsb_enable']); + $config['system']['crypto_hardware'] = "glxsb"; + } +} + +function upgrade_088_to_089() { + global $config; + if (!is_array($config['ca'])) + $config['ca'] = array(); + if (!is_array($config['cert'])) + $config['cert'] = array(); + + /* migrate captive portal ssl to certifcate mngr */ + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $id => &$setting) { + if (isset($setting['httpslogin'])) { + /* create cert entry */ + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = "Captive Portal Cert - {$setting['zone']}"; + $cert['crt'] = $setting['certificate']; + $cert['prv'] = $setting['private-key']; + + if (!empty($setting['cacertificate'])) { + /* create ca entry */ + $ca = array(); + $ca['refid'] = uniqid(); + $ca['descr'] = "Captive Portal CA - {$setting['zone']}"; + $ca['crt'] = $setting['cacertificate']; + $config['ca'][] = $ca; + + /* add ca reference to certificate */ + $cert['caref'] = $ca['refid']; + } + + $config['cert'][] = $cert; + + /* create cert reference */ + $setting['certref'] = $cert['refid']; + + unset($setting['certificate']); + unset($setting['private-key']); + unset($setting['cacertificate']); + + } + } + } +} + +function upgrade_089_to_090() { + global $config; + if (is_array($config['load_balancer']['virtual_server']) && count($config['load_balancer']['virtual_server'])) { + $vs_a = &$config['load_balancer']['virtual_server']; + for ($i = 0; isset($vs_a[$i]); $i++) { + if (is_array($vs_a[$i]['pool'])) { + $vs_a[$i]['poolname'] = $vs_a[$i]['pool'][0]; + unset($vs_a[$i]['pool']); + } elseif (!empty($vs_a[$i]['pool'])) { + $vs_a[$i]['poolname'] = $vs_a[$i]['pool']; + unset($vs_a[$i]['pool']); + } + } + } +} + +function upgrade_090_to_091() { + global $config; + + if (is_array($config['dnshaper']) && is_array($config['dnshaper']['queue'])) { + foreach ($config['dnshaper']['queue'] as $idx => $dnqueue) { + if (!empty($dnqueue['bandwidth'])) { + $bw = array(); + $bw['bw'] = $dnqueue['bandwidth']; + $bw['bwscale'] = $dnqueue['bandwidthtype']; + $bw['bwsched'] = "none"; + $config['dnshaper']['queue'][$idx]['bandwidth'] = array(); + $config['dnshaper']['queue'][$idx]['bandwidth']['item'] = array(); + $config['dnshaper']['queue'][$idx]['bandwidth']['item'][] = $bw; + } + } + } +} + +function upgrade_091_to_092() { + global $config; + + if (is_array($config['nat']['advancedoutbound']) && is_array($config['nat']['advancedoutbound']['rule'])) { + $nat_rules = &$config['nat']['advancedoutbound']['rule']; + for ($i = 0; isset($nat_rules[$i]); $i++) { + if (empty($nat_rules[$i]['interface'])) { + $nat_rules[$i]['interface'] = 'wan'; + } + } + } +} + +function upgrade_092_to_093() { + global $g; + + $suffixes = array("concurrent", "loggedin"); + + foreach ($suffixes as $suffix) + if (file_exists("{$g['vardb_path']}/rrd/captiveportal-{$suffix}.rrd")) + rename("{$g['vardb_path']}/rrd/captiveportal-{$suffix}.rrd", + "{$g['vardb_path']}/rrd/captiveportal-cpZone-{$suffix}.rrd"); + + enable_rrd_graphing(); +} + +function upgrade_093_to_094() { + global $config; + + if (isset($config['system']['powerd_mode'])) { + $config['system']['powerd_ac_mode'] = $config['system']['powerd_mode']; + $config['system']['powerd_battery_mode'] = $config['system']['powerd_mode']; + unset($config['system']['powerd_mode']); + } +} + +function upgrade_094_to_095() { + global $config; + + if (!isset($config['interfaces']) || !is_array($config['interfaces'])) + return; + + foreach ($config['interfaces'] as $iface => $cfg) + if (isset($cfg['ipaddrv6']) && ($cfg['ipaddrv6'] == "track6")) + if (!isset($cfg['track6-prefix-id']) || ($cfg['track6-prefix-id'] == "")) + $config['interfaces'][$iface]['track6-prefix-id'] = 0; +} + +function upgrade_095_to_096() { + global $config, $g; + + $names = array("inpass", "outpass", "inblock", "outblock", + "inpass6", "outpass6", "inblock6", "outblock6"); + $rrddbpath = "/var/db/rrd"; + $rrdtool = "/usr/local/bin/rrdtool"; + + if ($g['platform'] != "pfSense") { + /* restore the databases, if we have one */ + if (restore_rrd()) { + /* Make sure to move the rrd backup out of the way. We will make a new one after converting. */ + rename("{$g['cf_conf_path']}/rrd.tgz", "{$g['cf_conf_path']}/backup"); + } + } + + /* Assume 2*10GigE for now */ + $stream = 2500000000; + + /* build a list of traffic and packets databases */ + $databases = return_dir_as_array($rrddbpath, '/-(traffic|packets)\.rrd$/'); + rsort($databases); + foreach($databases as $database) { + if ($g['booting']) + echo "Update RRD database {$database}.\n"; + + $cmd = "{$rrdtool} tune {$rrddbpath}/{$database}"; + foreach ($names as $name) + $cmd .= " -a {$name}:{$stream}"; + mwexec("{$cmd} 2>&1"); + + } + enable_rrd_graphing(); + /* Let's save the RRD graphs after we run enable RRD graphing */ + /* The function will restore the rrd.tgz so we will save it after */ + exec("cd /; LANG=C NO_REMOUNT=1 RRDDBPATH='{$rrddbpath}' CF_CONF_PATH='{$g['cf_conf_path']}' /etc/rc.backup_rrd.sh"); +} + +function upgrade_096_to_097() { + global $config, $g; + /* If the user had disabled default block rule logging before, then bogon/private network logging was already off, so respect their choice. */ + if (isset($config['syslog']['nologdefaultblock'])) { + $config['syslog']['nologbogons'] = true; + $config['syslog']['nologprivatenets'] = true; + } +} + +function upgrade_097_to_098() { + global $config, $g; + /* Disable kill_states by default */ + $config['system']['kill_states'] = true; +} + +function upgrade_098_to_099() { + global $config; + + if (empty($config['dhcpd']) || !is_array($config['dhcpd'])) + return; + + foreach ($config['dhcpd'] as & $dhcpifconf) { + if (isset($dhcpifconf['next-server'])) { + $dhcpifconf['nextserver'] = $dhcpifconf['next-server']; + unset($dhcpifconf['next-server']); + } + } +} + +function upgrade_099_to_100() { + require_once("/etc/inc/services.inc"); + install_cron_job("/usr/bin/nice -n20 newsyslog", false); +} + +function upgrade_100_to_101() { + global $config, $g; + + if (!is_array($config['voucher'])) + return; + + foreach ($config['voucher'] as $cpzone => $cp) { + if (!is_array($cp['roll'])) + continue; + foreach ($cp['roll'] as $ridx => $rcfg) { + if (!empty($rcfg['comment'])) + $config['voucher'][$cpzone]['roll'][$ridx]['descr'] = $rcfg['comment']; + } + } +} + +function upgrade_101_to_102() { + global $config, $g; + + if (is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpzone => $cp) { + if (!is_array($cp['passthrumac'])) + continue; + + foreach ($cp['passthrumac'] as $idx => $passthrumac) + $config['captiveportal'][$cpzone]['passthrumac'][$idx]['action'] = 'pass'; + } + } + + /* Convert OpenVPN Compression option to the new style */ + // Nothing to do if there is no OpenVPN tag + if (isset($config['openvpn']) && is_array($config['openvpn'])) { + if (is_array($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as &$vpn) { + if (!empty($vpn['compression'])) + $vpn['compression'] = "adaptive"; + } + } + if (is_array($config['openvpn']['openvpn-client'])) { + foreach ($config['openvpn']['openvpn-client'] as &$vpn) { + if (!empty($vpn['compression'])) + $vpn['compression'] = "adaptive"; + } + } + } +} + +function upgrade_102_to_103() { + global $config; + + if (isset($config['nat']['advancedoutbound']['enable'])) { + $config['nat']['advancedoutbound']['mode'] = "advanced"; + unset($config['nat']['advancedoutbound']['enable']); + } else + $config['nat']['advancedoutbound']['mode'] = "automatic"; + + $config['nat']['outbound'] = $config['nat']['advancedoutbound']; + + unset($config['nat']['ipsecpassthru']); + unset($config['nat']['advancedoutbound']); +} + +function upgrade_103_to_104() { + global $config; + + $changed_privs = array( + "page-diag-system-activity" => "page-diagnostics-system-activity", + "page-interfacess-groups" => "page-interfaces-groups", + "page-interfacess-lagg" => "page-interfaces-lagg", + "page-interfacess-qinq" => "page-interfaces-qinq" + ); + + /* update user privileges */ + foreach ($config['system']['user'] as & $user) { + if (!is_array($user['priv'])) + continue; + foreach ($user['priv'] as & $priv) { + if (array_key_exists($priv, $changed_privs)) + $priv = $changed_privs[$priv]; + } + } + + /* update group privileges */ + foreach ($config['system']['group'] as & $group) { + if (!is_array($group['priv'])) + continue; + foreach ($group['priv'] as & $priv) { + if (array_key_exists($priv, $changed_privs)) + $priv = $changed_privs[$priv]; + } + } + + /* sync all local account information */ + local_sync_accounts(); +} + +function upgrade_104_to_105() { + global $config; + + if (is_array($config['captiveportal'])) { + $zoneid = 2; + foreach ($config['captiveportal'] as $cpzone => $cpcfg) { + if (empty($cpfg['zoneid'])) { + $config['captiveportal'][$cpzone]['zoneid'] = $zoneid; + $zoneid += 2; + } else if ($cpcfg['zoneid'] > 4000) { + $config['captiveportal'][$cpzone]['zoneid'] = $zoneid; + $zoneid += 2; + } + } + } +} + +function upgrade_105_to_106() { + global $config; + + if (is_array($config['virtualip']) && is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vipidx => $vip) { + if ($vip['mode'] == "ipalias" && strstr($vip['interface'], "_vip")) { + /* Convert to a carp with same properties as its carp version */ + $converted = false; + foreach ($config['virtualip']['vip'] as $bvip) { + if ($bvip['mode'] == "carp" && "{$bvip['interface']}_vip{$bvip['vhid']}" == $vip['interface']) { + $ipaaddr = $vip['subnet']; + $ipamask = $vip['subnet_bits']; + $config['virtualip']['vip'][$vipidx] = $bvip; + $config['virtualip']['vip'][$vipidx]['subnet'] = $ipaaddr; + $config['virtualip']['vip'][$vipidx]['subnet_bits'] = $ipamask; + $converted = true; + break; + } + } + if ($converted === false) + log_error("WARNING: IPalias {$vip['subnet']}/{$vip['subnet_bits']} was not completed successfully. Upgrading it yourself is the only remaining option!"); + } + } + unset($vip, $bvip, $vipidx); + } +} + +function upgrade_106_to_107() { + global $config; + + if (is_array($config['filter']) && is_array($config['filter']['rule'])) { + $tracker = (int)microtime(true); + foreach ($config['filter']['rule'] as $ridx => $rule) { + if (empty($rule['tracker'])) { + $config['filter']['rule'][$ridx]['tracker'] = $tracker; + $tracker++; + } + } + unset($tracker, $ridx); + } + if (is_array($config['nat']) && is_array($config['nat']['rule'])) { + $tracker = (int)microtime(true); + foreach ($config['nat']['rule'] as $ridx => $rule) { + if (empty($rule['tracker'])) { + $config['nat']['rule'][$ridx]['tracker'] = $tracker; + $tracker++; + } + + } + unset($tracker, $ridx); + } +} + +function upgrade_107_to_108() { + global $config; + + if (isset($config['system']['webgui']['noautocomplete'])) + unset($config['system']['webgui']['noautocomplete']); + else + $config['system']['webgui']['loginautocomplete'] = true; +} + +function upgrade_108_to_109() { + global $config; + + if (!isset($config['filter']['rule']) || !is_array($config['filter']['rule'])) + return; + + foreach ($config['filter']['rule'] as &$rule) { + if (!isset($rule['dscp']) || empty($rule['dscp'])) + continue; + + $pos = strpos($rule['dscp'], ' '); + if ($pos !== false) + $rule['dscp'] = substr($rule['dscp'], 0, $pos); + unset($pos); + } +} + +function upgrade_109_to_110() { + global $config; + + if (!is_array($config['ipsec']) || !is_array($config['ipsec']['phase2'])) + return; + + foreach ($config['ipsec']['phase2'] as &$rule) { + if (!empty($rule['uniqid'])) + continue; + + $rule['uniqid'] = uniqid(); + } +} + +function upgrade_110_to_111() { + global $config; + + /* Make sure unbound user exist */ + mwexec('/usr/sbin/pw groupadd -n unbound -g 59', true); + mwexec('/usr/sbin/pw useradd -n unbound -c "Unbound DNS Resolver" -d /var/unbound -s /usr/sbin/nologin -u 59 -g 59', true); + + /* cleanup old unbound package stuffs */ + unlink_if_exists("/usr/local/pkg/unbound.xml"); + unlink_if_exists("/usr/local/pkg/unbound.inc"); + unlink_if_exists("/usr/local/pkg/unbound_advanced.xml"); + unlink_if_exists("/usr/local/www/unbound_status.php"); + unlink_if_exists("/usr/local/www/unbound_acls.php"); + unlink_if_exists("/usr/local/bin/unbound_monitor.sh"); + unlink_if_exists("/usr/local/etc/rc.d/unbound.sh"); + + /* Remove old menu and service entries */ + if (isset($config['installedpackages']['menu']) && is_array($config['installedpackages']['menu'])) { + foreach ($config['installedpackages']['menu'] as $idx => $menu) { + if ($menu['name'] != 'Unbound DNS') + continue; + + unset($config['installedpackages']['menu'][$idx]); + break; + } + } + + if (isset($config['installedpackages']['service']) && is_array($config['installedpackages']['service'])) { + foreach ($config['installedpackages']['service'] as $idx => $service) { + if ($service['name'] != 'unbound') + continue; + unset($config['installedpackages']['service'][$idx]); + break; + } + } + + if (!isset($config['installedpackages']['unbound']['config'][0])) + return; + + $pkg = $config['installedpackages']['unbound']['config'][0]; + + if (isset($config['installedpackages']['unboundadvanced']['config'][0])) + $pkg = array_merge($pkg, $config['installedpackages']['unboundadvanced']['config'][0]); + + $new = array(); + + /* deal first with boolean fields */ + $fields = array( + "enable" => "enable", + "dnssec_status" => "dnssec", + "forwarding_mode" => "forwarding", + "regdhcp" => "regdhcp", + "regdhcpstatic" => "regdhcpstatic", + "txtsupport" => "txtsupport", + "hide_id" => "hideidentity", + "hide_version" => "hideversion", + "prefetch" => "prefetch", + "prefetch_key" => "prefetchkey", + "harden_glue" => "hardenglue", + "harden_dnssec_stripped" => "dnssec_stripped"); + + foreach ($fields as $oldk => $newk) { + if (isset($pkg[$oldk])) { + if ($pkg[$oldk] == 'on') + $new[$newk] = true; + unset($pkg[$oldk]); + } + } + + $fields = array( + "active_interface" => "network_interface", + "query_interface" => "outgoing_interface", + "unbound_verbosity" => "log_verbosity", + "unbound_verbosity" => "log_verbosity", + "msg_cache_size" => "msgcachesize", + "outgoing_num_tcp" => "outgoing_num_tcp", + "incoming_num_tcp" => "incoming_num_tcp", + "edns_buffer_size" => "edns_buffer_size", + "num_queries_per_thread" => "num_queries_per_thread", + "jostle_timeout" => "jostle_timeout", + "cache_max_ttl" => "cache_max_ttl", + "cache_min_ttl" => "cache_min_ttl", + "infra_host_ttl" => "infra_host_ttl", + "infra_cache_numhosts" => "infra_cache_numhosts", + "unwanted_reply_threshold" => "unwanted_reply_threshold", + "custom_options" => "custom_options"); + + foreach ($fields as $oldk => $newk) { + if (isset($pkg[$oldk])) { + $new[$newk] = $pkg[$oldk]; + unset($pkg[$oldk]); + } + } + + /* Following options were removed, bring them as custom_options */ + if (isset($pkg['stats']) && $pkg['stats'] == "on") { + if (isset($pkg['stats_interval'])) + $new['custom_options'] .= (empty($new['custom_options']) ? "" : ";") . "statistics-interval: {$pkg['stats_interval']}"; + if (isset($pkg['cumulative_stats'])) + $new['custom_options'] .= (empty($new['custom_options']) ? "" : ";") . "statistics-cumulative: {$pkg['cumulative_stats']}"; + if (isset($pkg['extended_stats']) && $pkg['extended_stats'] == "on") + $new['custom_options'] .= (empty($new['custom_options']) ? "" : ";") . "extended-statistics: yes"; + else + $new['custom_options'] .= (empty($new['custom_options']) ? "" : ";") . "extended-statistics: no"; + } + + $new['acls'] = array(); + if (isset($config['installedpackages']['unboundacls']['config']) && + is_array($config['installedpackages']['unboundacls']['config'])) { + foreach ($config['installedpackages']['unboundacls']['config'] as $acl) + $new['acls'][] = $acl; + } + + $config['unbound'] = $new; + + if(isset($config['installedpackages']['unbound'])) + unset($config['installedpackages']['unbound']); + if(isset($config['installedpackages']['unboundadvanced'])) + unset($config['installedpackages']['unboundadvanced']); + if(isset($config['installedpackages']['unboundacls'])) + unset($config['installedpackages']['unboundacls']); + + unset($pkg, $new); +} + +?> diff --git a/usr/etc/inc/util.inc b/usr/etc/inc/util.inc new file mode 100644 index 000000000..a924637ea --- /dev/null +++ b/usr/etc/inc/util.inc @@ -0,0 +1,2034 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /bin/ps /bin/kill /usr/bin/killall /sbin/ifconfig /usr/bin/netstat + pfSense_BUILDER_BINARIES: /usr/bin/awk /sbin/dmesg /sbin/ping /usr/local/sbin/gzsig /usr/sbin/arp + pfSense_BUILDER_BINARIES: /sbin/conscontrol /sbin/devd /bin/ps + pfSense_MODULE: utils +*/ + +/* kill a process by pid file */ +function killbypid($pidfile) { + return sigkillbypid($pidfile, "TERM"); +} + +function isvalidpid($pidfile) { + $output = ""; + if (file_exists($pidfile)) { + exec("/bin/pgrep -nF {$pidfile}", $output, $retval); + return (intval($retval) == 0); + } + return false; +} + +function is_process_running($process) { + $output = ""; + exec("/bin/pgrep -anx " . escapeshellarg($process), $output, $retval); + + return (intval($retval) == 0); +} + +function isvalidproc($proc) { + return is_process_running($proc); +} + +/* sigkill a process by pid file */ +/* return 1 for success and 0 for a failure */ +function sigkillbypid($pidfile, $sig) { + if (file_exists($pidfile)) + return mwexec("/bin/pkill " . escapeshellarg("-{$sig}") . " -F {$pidfile}", true); + + return 0; +} + +/* kill a process by name */ +function sigkillbyname($procname, $sig) { + if(isvalidproc($procname)) + return mwexec("/usr/bin/killall " . escapeshellarg("-{$sig}") . " " . escapeshellarg($procname), true); +} + +/* kill a process by name */ +function killbyname($procname) { + if(isvalidproc($procname)) + mwexec("/usr/bin/killall " . escapeshellarg($procname)); +} + +function is_subsystem_dirty($subsystem = "") { + global $g; + + if ($subsystem == "") + return false; + + if (file_exists("{$g['varrun_path']}/{$subsystem}.dirty")) + return true; + + return false; +} + +function mark_subsystem_dirty($subsystem = "") { + global $g; + + if (!file_put_contents("{$g['varrun_path']}/{$subsystem}.dirty", "DIRTY")) + log_error(sprintf(gettext("WARNING: Could not mark subsystem: %s dirty"), $subsystem)); +} + +function clear_subsystem_dirty($subsystem = "") { + global $g; + + @unlink("{$g['varrun_path']}/{$subsystem}.dirty"); +} + +function config_lock() { + return; +} +function config_unlock() { + return; +} + +/* lock configuration file */ +function lock($lock, $op = LOCK_SH) { + global $g, $cfglckkeyconsumers; + if (!$lock) + die(gettext("WARNING: You must give a name as parameter to lock() function.")); + if (!file_exists("{$g['tmp_path']}/{$lock}.lock")) { + @touch("{$g['tmp_path']}/{$lock}.lock"); + @chmod("{$g['tmp_path']}/{$lock}.lock", 0666); + } + $cfglckkeyconsumers++; + if ($fp = fopen("{$g['tmp_path']}/{$lock}.lock", "w")) { + if (flock($fp, $op)) + return $fp; + else + fclose($fp); + } +} + +function try_lock($lock, $timeout = 5) { + global $g, $cfglckkeyconsumers; + if (!$lock) + die(gettext("WARNING: You must give a name as parameter to try_lock() function.")); + if (!file_exists("{$g['tmp_path']}/{$lock}.lock")) { + @touch("{$g['tmp_path']}/{$lock}.lock"); + @chmod("{$g['tmp_path']}/{$lock}.lock", 0666); + } + $cfglckkeyconsumers++; + if ($fp = fopen("{$g['tmp_path']}/{$lock}.lock", "w")) { + $trycounter = 0; + while(!flock($fp, LOCK_EX | LOCK_NB)) { + if ($trycounter >= $timeout) { + fclose($fp); + return NULL; + } + sleep(1); + $trycounter++; + } + + return $fp; + } + + return NULL; +} + +/* unlock configuration file */ +function unlock($cfglckkey = 0) { + global $g, $cfglckkeyconsumers; + flock($cfglckkey, LOCK_UN); + fclose($cfglckkey); + return; +} + +/* unlock forcefully configuration file */ +function unlock_force($lock) { + global $g; + + @unlink("{$g['tmp_path']}/{$lock}.lock"); +} + +function send_event($cmd) { + global $g; + + if(!isset($g['event_address'])) + $g['event_address'] = "unix:///var/run/check_reload_status"; + + $try = 0; + while ($try < 3) { + $fd = @fsockopen($g['event_address']); + if ($fd) { + fwrite($fd, $cmd); + $resp = fread($fd, 4096); + if ($resp != "OK\n") + log_error("send_event: sent {$cmd} got {$resp}"); + fclose($fd); + $try = 3; + } + $try++; + } +} + +function send_multiple_events($cmds) { + global $g; + + if(!isset($g['event_address'])) + $g['event_address'] = "unix:///var/run/check_reload_status"; + + if (!is_array($cmds)) + return; + + while ($try < 3) { + $fd = @fsockopen($g['event_address']); + if ($fd) { + foreach ($cmds as $cmd) { + fwrite($fd, $cmd); + $resp = fread($fd, 4096); + if ($resp != "OK\n") + log_error("send_event: sent {$cmd} got {$resp}"); + } + fclose($fd); + $try = 3; + } + $try++; + } +} + +function refcount_init($reference) { + $shmid = @shmop_open($reference, "c", 0644, 10); + @shmop_write($shmid, str_pad("0", 10, "\x0", STR_PAD_RIGHT), 0); + @shmop_close($shmid); +} + +function refcount_reference($reference) { + /* Take out a lock across the shared memory read, increment, write sequence to make it atomic. */ + $shm_lck = lock("shm{$reference}", LOCK_EX); + try { + /* NOTE: A warning is generated when shared memory does not exist */ + $shmid = @shmop_open($reference, "w", 0, 0); + if (!$shmid) { + refcount_init($reference); + $shmid = @shmop_open($reference, "w", 0, 0); + if (!$shmid) { + log_error(gettext("Could not open shared memory {$reference}")); + unlock($shm_lck); + return; + } + } + $shm_data = @shmop_read($shmid, 0, 10); + $shm_data = intval($shm_data) + 1; + @shmop_write($shmid, str_pad($shm_data, 10, "\x0", STR_PAD_RIGHT), 0); + @shmop_close($shmid); + unlock($shm_lck); + } catch (Exception $e) { + log_error($e->getMessage()); + unlock($shm_lck); + } + + return $shm_data; +} + +function refcount_unreference($reference) { + /* Take out a lock across the shared memory read, decrement, write sequence to make it atomic. */ + $shm_lck = lock("shm{$reference}", LOCK_EX); + try { + $shmid = @shmop_open($reference, "w", 0, 0); + if (!$shmid) { + refcount_init($reference); + log_error(gettext("Could not open shared memory {$reference}")); + unlock($shm_lck); + return; + } + $shm_data = @shmop_read($shmid, 0, 10); + $shm_data = intval($shm_data) - 1; + if ($shm_data < 0) { + //debug_backtrace(); + log_error(sprintf(gettext("Reference %s is going negative, not doing unreference."), $reference)); + } else + @shmop_write($shmid, str_pad($shm_data, 10, "\x0", STR_PAD_RIGHT), 0); + @shmop_close($shmid); + unlock($shm_lck); + } catch (Exception $e) { + log_error($e->getMessage()); + unlock($shm_lck); + } + + return $shm_data; +} + +function refcount_read($reference) { + /* This function just reads the current value of the refcount for information. */ + /* There is no need for locking. */ + $shmid = @shmop_open($reference, "a", 0, 0); + if (!$shmid) { + log_error(gettext("Could not open shared memory for read {$reference}")); + return -1; + } + $shm_data = @shmop_read($shmid, 0, 10); + @shmop_close($shmid); + return $shm_data; +} + +function is_module_loaded($module_name) { + $module_name = str_replace(".ko", "", $module_name); + $running = 0; + $_gb = exec("/sbin/kldstat -qn {$module_name} 2>&1", $_gb, $running); + if (intval($running) == 0) + return true; + else + return false; +} + +/* validate non-negative numeric string, or equivalent numeric variable */ +function is_numericint($arg) { + return (((is_int($arg) && $arg >= 0) || (is_string($arg) && strlen($arg) > 0 && ctype_digit($arg))) ? true : false); +} + +/* return the subnet address given a host address and a subnet bit count */ +function gen_subnet($ipaddr, $bits) { + if (!is_ipaddr($ipaddr) || !is_numeric($bits)) + return ""; + return long2ip(ip2long($ipaddr) & gen_subnet_mask_long($bits)); +} + +/* return the subnet address given a host address and a subnet bit count */ +function gen_subnetv6($ipaddr, $bits) { + if (!is_ipaddrv6($ipaddr) || !is_numeric($bits)) + return ""; + + $address = Net_IPv6::getNetmask($ipaddr, $bits); + $address = Net_IPv6::compress($address); + return $address; +} + +/* return the highest (broadcast) address in the subnet given a host address and a subnet bit count */ +function gen_subnet_max($ipaddr, $bits) { + if (!is_ipaddr($ipaddr) || !is_numeric($bits)) + return ""; + + return long2ip32(ip2long($ipaddr) | ~gen_subnet_mask_long($bits)); +} + +/* Generate end number for a given ipv6 subnet mask */ +function gen_subnetv6_max($ipaddr, $bits) { + if(!is_ipaddrv6($ipaddr)) + return false; + + $mask = Net_IPv6::getNetmask('FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF',$bits); + + $inet_ip = (binary)inet_pton($ipaddr); + $inet_mask = (binary)inet_pton($mask); + + $inet_end = $inet_ip | ~$inet_mask; + + return (inet_ntop($inet_end)); +} + +/* returns a subnet mask (long given a bit count) */ +function gen_subnet_mask_long($bits) { + $sm = 0; + for ($i = 0; $i < $bits; $i++) { + $sm >>= 1; + $sm |= 0x80000000; + } + return $sm; +} + +/* same as above but returns a string */ +function gen_subnet_mask($bits) { + return long2ip(gen_subnet_mask_long($bits)); +} + +/* Convert long int to IP address, truncating to 32-bits. */ +function long2ip32($ip) { + return long2ip($ip & 0xFFFFFFFF); +} + +/* Convert IP address to long int, truncated to 32-bits to avoid sign extension on 64-bit platforms. */ +function ip2long32($ip) { + return ( ip2long($ip) & 0xFFFFFFFF ); +} + +/* Convert IP address to unsigned long int. */ +function ip2ulong($ip) { + return sprintf("%u", ip2long32($ip)); +} + +/* Find out how many IPs are contained within a given IP range + * e.g. 192.168.0.0 to 192.168.0.255 returns 256 + */ +function ip_range_size($startip, $endip) { + if (is_ipaddr($startip) && is_ipaddr($endip)) { + // Operate as unsigned long because otherwise it wouldn't work + // when crossing over from 127.255.255.255 / 128.0.0.0 barrier + return abs(ip2ulong($startip) - ip2ulong($endip)) + 1; + } + return -1; +} + +/* Find the smallest possible subnet mask which can contain a given number of IPs + * e.g. 512 IPs can fit in a /23, but 513 IPs need a /22 + */ +function find_smallest_cidr($number) { + $smallest = 1; + for ($b=32; $b > 0; $b--) { + $smallest = ($number <= pow(2,$b)) ? $b : $smallest; + } + return (32-$smallest); +} + +/* Return the previous IP address before the given address */ +function ip_before($ip) { + return long2ip32(ip2long($ip)-1); +} + +/* Return the next IP address after the given address */ +function ip_after($ip) { + return long2ip32(ip2long($ip)+1); +} + +/* Return true if the first IP is 'before' the second */ +function ip_less_than($ip1, $ip2) { + // Compare as unsigned long because otherwise it wouldn't work when + // crossing over from 127.255.255.255 / 128.0.0.0 barrier + return ip2ulong($ip1) < ip2ulong($ip2); +} + +/* Return true if the first IP is 'after' the second */ +function ip_greater_than($ip1, $ip2) { + // Compare as unsigned long because otherwise it wouldn't work + // when crossing over from 127.255.255.255 / 128.0.0.0 barrier + return ip2ulong($ip1) > ip2ulong($ip2); +} + +/* Convert a range of IPs to an array of subnets which can contain the range. */ +function ip_range_to_subnet_array($startip, $endip) { + if (!is_ipaddr($startip) || !is_ipaddr($endip)) { + return array(); + } + + // Container for subnets within this range. + $rangesubnets = array(); + + // Figure out what the smallest subnet is that holds the number of IPs in the given range. + $cidr = find_smallest_cidr(ip_range_size($startip, $endip)); + + // Loop here to reduce subnet size and retest as needed. We need to make sure + // that the target subnet is wholly contained between $startip and $endip. + for ($cidr; $cidr <= 32; $cidr++) { + // Find the network and broadcast addresses for the subnet being tested. + $targetsub_min = gen_subnet($startip, $cidr); + $targetsub_max = gen_subnet_max($startip, $cidr); + + // Check best case where the range is exactly one subnet. + if (($targetsub_min == $startip) && ($targetsub_max == $endip)) { + // Hooray, the range is exactly this subnet! + return array("{$startip}/{$cidr}"); + } + + // These remaining scenarios will find a subnet that uses the largest + // chunk possible of the range being tested, and leave the rest to be + // tested recursively after the loop. + + // Check if the subnet begins with $startip and ends before $endip + if (($targetsub_min == $startip) && ip_less_than($targetsub_max, $endip)) { + break; + } + + // Check if the subnet ends at $endip and starts after $startip + if (ip_greater_than($targetsub_min, $startip) && ($targetsub_max == $endip)) { + break; + } + + // Check if the subnet is between $startip and $endip + if (ip_greater_than($targetsub_min, $startip) && ip_less_than($targetsub_max, $endip)) { + break; + } + } + + // Some logic that will recursivly search from $startip to the first IP before the start of the subnet we just found. + // NOTE: This may never be hit, the way the above algo turned out, but is left for completeness. + if ($startip != $targetsub_min) { + $rangesubnets = array_merge($rangesubnets, ip_range_to_subnet_array($startip, ip_before($targetsub_min))); + } + + // Add in the subnet we found before, to preserve ordering + $rangesubnets[] = "{$targetsub_min}/{$cidr}"; + + // And some more logic that will search after the subnet we found to fill in to the end of the range. + if ($endip != $targetsub_max) { + $rangesubnets = array_merge($rangesubnets, ip_range_to_subnet_array(ip_after($targetsub_max), $endip)); + } + return $rangesubnets; +} + +function is_iprange($range) { + if (substr_count($range, '-') != 1) { + return false; + } + list($ip1, $ip2) = explode ('-', $range); + return (is_ipaddr($ip1) && is_ipaddr($ip2)); +} + +/* returns true if $ipaddr is a valid dotted IPv4 address or a IPv6 */ +function is_ipaddr($ipaddr) { + if(is_ipaddrv4($ipaddr)) { + return true; + } + if(is_ipaddrv6($ipaddr)) { + return true; + } + return false; +} + +/* returns true if $ipaddr is a valid IPv6 address */ +function is_ipaddrv6($ipaddr) { + if (!is_string($ipaddr) || empty($ipaddr)) + return false; + if (strstr($ipaddr, "%") && is_linklocal($ipaddr)) { + $tmpip = explode("%", $ipaddr); + $ipaddr = $tmpip[0]; + } + return Net_IPv6::checkIPv6($ipaddr); +} + +/* returns true if $ipaddr is a valid dotted IPv4 address */ +function is_ipaddrv4($ipaddr) { + if (!is_string($ipaddr) || empty($ipaddr)) + return false; + + $ip_long = ip2long($ipaddr); + $ip_reverse = long2ip32($ip_long); + + if ($ipaddr == $ip_reverse) + return true; + else + return false; +} + +/* returns true if $ipaddr is a valid linklocal address */ +function is_linklocal($ipaddr) { + return (strtolower(substr($ipaddr, 0, 5)) == "fe80:"); +} + +/* returns scope of a linklocal address */ +function get_ll_scope($addr) { + if (!is_linklocal($addr) || !strstr($addr, "%")) + return ""; + list ($ll, $scope) = explode("%", $addr); + return $scope; +} + +/* returns true if $ipaddr is a valid literal IPv6 address */ +function is_literalipaddrv6($ipaddr) { + if(preg_match("/\[([0-9a-f:]+)\]/i", $ipaddr, $match)) + $ipaddr = $match[1]; + else + return false; + + return is_ipaddrv6($ipaddr); +} + +function is_ipaddrwithport($ipport) { + $parts = explode(":", $ipport); + $port = array_pop($parts); + if (count($parts) == 1) { + return is_ipaddrv4($parts[0]) && is_port($port); + } elseif (count($parts) > 1) { + return is_literalipaddrv6(implode(":", $parts)) && is_port($port); + } else { + return false; + } +} + +function is_hostnamewithport($hostport) { + $parts = explode(":", $hostport); + $port = array_pop($parts); + if (count($parts) == 1) { + return is_hostname($parts[0]) && is_port($port); + } else { + return false; + } +} + +/* returns true if $ipaddr is a valid dotted IPv4 address or an alias thereof */ +function is_ipaddroralias($ipaddr) { + global $config; + + if (is_alias($ipaddr)) { + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if ($alias['name'] == $ipaddr && !preg_match("/port/i", $alias['type'])) + return true; + } + } + return false; + } else + return is_ipaddr($ipaddr); + +} + +/* returns true if $subnet is a valid IPv4 or IPv6 subnet in CIDR format + false - if not a valid subnet + true (numeric 4 or 6) - if valid, gives type of subnet */ +function is_subnet($subnet) { + if (is_string($subnet) && preg_match('/^(?:([0-9.]{7,15})|([0-9a-f:]{2,39}))\/(\d{1,3})$/i', $subnet, $parts)) { + if (is_ipaddrv4($parts[1]) && $parts[3] <= 32) + return 4; + if (is_ipaddrv6($parts[2]) && $parts[3] <= 128) + return 6; + } + return false; +} + +/* same as is_subnet() but accepts IPv4 only */ +function is_subnetv4($subnet) { + return (is_subnet($subnet) == 4); +} + +/* same as is_subnet() but accepts IPv6 only */ +function is_subnetv6($subnet) { + return (is_subnet($subnet) == 6); +} + +/* returns true if $subnet is a valid subnet in CIDR format or an alias thereof */ +function is_subnetoralias($subnet) { + global $aliastable; + + if (isset($aliastable[$subnet]) && is_subnet($aliastable[$subnet])) + return true; + else + return is_subnet($subnet); +} + +/* returns true if $hostname is a valid hostname */ +function is_hostname($hostname) { + if (!is_string($hostname)) + return false; + + if (preg_match('/^(?:(?:[a-z0-9_]|[a-z0-9_][a-z0-9_\-]*[a-z0-9_])\.)*(?:[a-z0-9_]|[a-z0-9_][a-z0-9_\-]*[a-z0-9_])$/i', $hostname)) + return true; + else + return false; +} + +/* returns true if $domain is a valid domain name */ +function is_domain($domain) { + if (!is_string($domain)) + return false; + + if (preg_match('/^(?:(?:[a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*(?:[a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])$/i', $domain)) + return true; + else + return false; +} + +/* returns true if $macaddr is a valid MAC address */ +function is_macaddr($macaddr, $partial=false) { + $repeat = ($partial) ? '1,5' : '5'; + return preg_match('/^[0-9A-F]{2}(?:[:][0-9A-F]{2}){'.$repeat.'}$/i', $macaddr) == 1 ? true : false; +} + +/* returns true if $name is a valid name for an alias + returns NULL if a reserved word is used + returns FALSE for bad chars in the name - this allows calling code to determine what the problem was. + aliases cannot be: + bad chars: anything except a-z 0-9 and underscore + bad names: empty string, pure numeric, pure underscore + reserved words: pre-defined service/protocol/port names which should not be ambiguous, and the words "port" and "pass" */ + +function is_validaliasname($name) { + /* Array of reserved words */ + $reserved = array("port", "pass"); + + if (!is_string($name) || strlen($name) >= 32 || preg_match('/(^_*$|^\d*$|[^a-z0-9_])/i', $name)) + return false; + if (in_array($name, $reserved, true) || getservbyname($name, "tcp") || getservbyname($name, "udp") || getprotobyname($name)) + return; /* return NULL */ + return true; +} + +/* returns true if $port is a valid TCP/UDP port */ +function is_port($port) { + if (getservbyname($port, "tcp") || getservbyname($port, "udp")) + return true; + if (!ctype_digit($port)) + return false; + else if ((intval($port) < 1) || (intval($port) > 65535)) + return false; + return true; +} + +/* returns true if $portrange is a valid TCP/UDP portrange (":") */ +function is_portrange($portrange) { + $ports = explode(":", $portrange); + + return (count($ports) == 2 && is_port($ports[0]) && is_port($ports[1])); +} + +/* returns true if $port is a valid port number or an alias thereof */ +function is_portoralias($port) { + global $config; + + if (is_alias($port)) { + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if ($alias['name'] == $port && preg_match("/port/i", $alias['type'])) + return true; + } + } + return false; + } else + return is_port($port); +} + +/* create ranges of sequential port numbers (200:215) and remove duplicates */ +function group_ports($ports) { + if (!is_array($ports) || empty($ports)) + return; + + $uniq = array(); + foreach ($ports as $port) { + if (is_portrange($port)) { + list($begin, $end) = explode(":", $port); + if ($begin > $end) { + $aux = $begin; + $begin = $end; + $end = $aux; + } + for ($i = $begin; $i <= $end; $i++) + if (!in_array($i, $uniq)) + $uniq[] = $i; + } else if (is_port($port)) { + if (!in_array($port, $uniq)) + $uniq[] = $port; + } + } + sort($uniq, SORT_NUMERIC); + + $result = array(); + foreach ($uniq as $idx => $port) { + if ($idx == 0) { + $result[] = $port; + continue; + } + + $last = end($result); + if (is_portrange($last)) + list($begin, $end) = explode(":", $last); + else + $begin = $end = $last; + + if ($port == ($end+1)) { + $end++; + $result[count($result)-1] = "{$begin}:{$end}"; + } else { + $result[] = $port; + } + } + + return $result; +} + +/* returns true if $val is a valid shaper bandwidth value */ +function is_valid_shaperbw($val) { + return (preg_match("/^(\d+(?:\.\d+)?)([MKG]?b|%)$/", $val)); +} + +/* returns true if $test is in the range between $start and $end */ +function is_inrange_v4($test, $start, $end) { + if ( (ip2ulong($test) <= ip2ulong($end)) && (ip2ulong($test) >= ip2ulong($start)) ) + return true; + else + return false; +} + +/* returns true if $test is in the range between $start and $end */ +function is_inrange_v6($test, $start, $end) { + if ( (inet_pton($test) <= inet_pton($end)) && (inet_pton($test) >= inet_pton($start)) ) + return true; + else + return false; +} + +/* returns true if $test is in the range between $start and $end */ +function is_inrange($test, $start, $end) { + return is_ipaddrv6($test) ? is_inrange_v6($test, $start, $end) : is_inrange_v4($test, $start, $end); +} + +/* XXX: return the configured carp interface list */ +function get_configured_carp_interface_list($carpinterface = "", $family = "inet") { + global $config; + + $iflist = array(); + + if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + switch ($vip['mode']) { + case "carp": + if (!empty($carpinterface)) { + if ($carpinterface == "{$vip['interface']}_vip{$vip['vhid']}") { + if ($family == "inet" && is_ipaddrv4($vip['subnet'])) + return $vip['subnet']; + else if ($family == "inet6" && is_ipaddrv6($vip['subnet'])) + return $vip['subnet']; + } + } else { + $iflist["{$vip['interface']}_vip{$vip['vhid']}"] = $vip['subnet']; + } + break; + } + } + } + + return $iflist; +} + +/* return the configured IP aliases list */ +function get_configured_ip_aliases_list($returnfullentry = false) { + global $config; + + $alias_list=array(); + + if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + if ($vip['mode']=="ipalias") { + if ($returnfullentry) + $alias_list[$vip['subnet']] = $vip; + else + $alias_list[$vip['subnet']] = $vip['interface']; + } + } + } + + return $alias_list; +} + +/* return all configured aliases list (IP, carp, proxyarp and other) */ +function get_configured_vips_list() { + global $config; + + $alias_list=array(); + + if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + if ($vip['mode'] == "carp") + $alias_list[] = array("ipaddr" => $vip['subnet'], "if" => "{$vip['interface']}_vip{$vip['vhid']}"); + else + $alias_list[] = array("ipaddr" => $vip['subnet'], "if" => $vip['interface']); + } + } + + return $alias_list; +} + +/* comparison function for sorting by the order in which interfaces are normally created */ +function compare_interface_friendly_names($a, $b) { + if ($a == $b) + return 0; + else if ($a == 'wan') + return -1; + else if ($b == 'wan') + return 1; + else if ($a == 'lan') + return -1; + else if ($b == 'lan') + return 1; + + return strnatcmp($a, $b); +} + +/* return the configured interfaces list. */ +function get_configured_interface_list($only_opt = false, $withdisabled = false) { + global $config; + + $iflist = array(); + + /* if list */ + foreach($config['interfaces'] as $if => $ifdetail) { + if ($only_opt && ($if == "wan" || $if == "lan")) + continue; + if (isset($ifdetail['enable']) || $withdisabled == true) + $iflist[$if] = $if; + } + + return $iflist; +} + +/* return the configured interfaces list. */ +function get_configured_interface_list_by_realif($only_opt = false, $withdisabled = false) { + global $config; + + $iflist = array(); + + /* if list */ + foreach($config['interfaces'] as $if => $ifdetail) { + if ($only_opt && ($if == "wan" || $if == "lan")) + continue; + if (isset($ifdetail['enable']) || $withdisabled == true) { + $tmpif = get_real_interface($if); + if (!empty($tmpif)) + $iflist[$tmpif] = $if; + } + } + + return $iflist; +} + +/* return the configured interfaces list with their description. */ +function get_configured_interface_with_descr($only_opt = false, $withdisabled = false) { + global $config; + + $iflist = array(); + + /* if list */ + foreach($config['interfaces'] as $if => $ifdetail) { + if ($only_opt && ($if == "wan" || $if == "lan")) + continue; + if (isset($ifdetail['enable']) || $withdisabled == true) { + if(empty($ifdetail['descr'])) + $iflist[$if] = strtoupper($if); + else + $iflist[$if] = strtoupper($ifdetail['descr']); + } + } + + return $iflist; +} + +/* + * get_configured_ip_addresses() - Return a list of all configured + * interfaces IP Addresses + * + */ +function get_configured_ip_addresses() { + global $config; + + if (!function_exists('get_interface_ip')) + require_once("interfaces.inc"); + $ip_array = array(); + $interfaces = get_configured_interface_list(); + if (is_array($interfaces)) { + foreach($interfaces as $int) { + $ipaddr = get_interface_ip($int); + $ip_array[$int] = $ipaddr; + } + } + $interfaces = get_configured_carp_interface_list(); + if (is_array($interfaces)) + foreach($interfaces as $int => $ipaddr) + $ip_array[$int] = $ipaddr; + + /* pppoe server */ + if (is_array($config['pppoes']) && is_array($config['pppoes']['pppoe'])) { + foreach($config['pppoes']['pppoe'] as $pppoe) { + if ($pppoe['mode'] == "server") { + if(is_ipaddr($pppoe['localip'])) { + $int = "pppoes". $pppoe['pppoeid']; + $ip_array[$int] = $pppoe['localip']; + } + } + } + } + + return $ip_array; +} + +/* + * get_configured_ipv6_addresses() - Return a list of all configured + * interfaces IPv6 Addresses + * + */ +function get_configured_ipv6_addresses() { + require_once("interfaces.inc"); + $ipv6_array = array(); + $interfaces = get_configured_interface_list(); + if(is_array($interfaces)) { + foreach($interfaces as $int) { + $ipaddrv6 = get_interface_ipv6($int); + $ipv6_array[$int] = $ipaddrv6; + } + } + $interfaces = get_configured_carp_interface_list(); + if(is_array($interfaces)) + foreach($interfaces as $int => $ipaddrv6) + $ipv6_array[$int] = $ipaddrv6; + return $ipv6_array; +} + +/* + * get_interface_list() - Return a list of all physical interfaces + * along with MAC and status. + * + * $mode = "active" - use ifconfig -lu + * "media" - use ifconfig to check physical connection + * status (much slower) + */ +function get_interface_list($mode = "active", $keyby = "physical", $vfaces = "") { + global $config; + $upints = array(); + /* get a list of virtual interface types */ + if(!$vfaces) { + $vfaces = array ( + 'bridge', + 'ppp', + 'pppoe', + 'pptp', + 'l2tp', + 'sl', + 'gif', + 'gre', + 'faith', + 'lo', + 'ng', + '_vlan', + '_wlan', + 'pflog', + 'plip', + 'pfsync', + 'enc', + 'tun', + 'carp', + 'lagg', + 'vip', + 'ipfw' + ); + } + switch($mode) { + case "active": + $upints = pfSense_interface_listget(IFF_UP); + break; + case "media": + $intlist = pfSense_interface_listget(); + $ifconfig = ""; + exec("/sbin/ifconfig -a", $ifconfig); + $regexp = '/(' . implode('|', $intlist) . '):\s/'; + $ifstatus = preg_grep('/status:/', $ifconfig); + foreach($ifstatus as $status) { + $int = array_shift($intlist); + if(stristr($status, "active")) $upints[] = $int; + } + break; + default: + $upints = pfSense_interface_listget(); + break; + } + /* build interface list with netstat */ + $linkinfo = ""; + exec("/usr/bin/netstat -inW -f link | awk '{ print $1, $4 }'", $linkinfo); + array_shift($linkinfo); + /* build ip address list with netstat */ + $ipinfo = ""; + exec("/usr/bin/netstat -inW -f inet | awk '{ print $1, $4 }'", $ipinfo); + array_shift($ipinfo); + foreach($linkinfo as $link) { + $friendly = ""; + $alink = explode(" ", $link); + $ifname = rtrim(trim($alink[0]), '*'); + /* trim out all numbers before checking for vfaces */ + if (!in_array(array_shift(preg_split('/\d/', $ifname)), $vfaces) && + !stristr($ifname, "_vlan") && !stristr($ifname, "_wlan")) { + $toput = array( + "mac" => trim($alink[1]), + "up" => in_array($ifname, $upints) + ); + foreach($ipinfo as $ip) { + $aip = explode(" ", $ip); + if($aip[0] == $ifname) { + $toput['ipaddr'] = $aip[1]; + } + } + if (is_array($config['interfaces'])) { + foreach($config['interfaces'] as $name => $int) + if($int['if'] == $ifname) $friendly = $name; + } + switch($keyby) { + case "physical": + if($friendly != "") { + $toput['friendly'] = $friendly; + } + $dmesg_arr = array(); + exec("/sbin/dmesg |grep $ifname | head -n1", $dmesg_arr); + preg_match_all("/<(.*?)>/i", $dmesg_arr[0], $dmesg); + $toput['dmesg'] = $dmesg[1][0]; + $iflist[$ifname] = $toput; + break; + case "ppp": + + case "friendly": + if($friendly != "") { + $toput['if'] = $ifname; + $iflist[$friendly] = $toput; + } + break; + } + } + } + return $iflist; +} + +/****f* util/log_error +* NAME +* log_error - Sends a string to syslog. +* INPUTS +* $error - string containing the syslog message. +* RESULT +* null +******/ +function log_error($error) { + global $g; + $page = $_SERVER['SCRIPT_NAME']; + if (empty($page)) { + $files = get_included_files(); + $page = basename($files[0]); + } + syslog(LOG_ERR, "$page: $error"); + if ($g['debug']) + syslog(LOG_WARNING, var_dump(debug_backtrace())); + return; +} + +/****f* util/log_auth +* NAME +* log_auth - Sends a string to syslog as LOG_AUTH facility +* INPUTS +* $error - string containing the syslog message. +* RESULT +* null +******/ +function log_auth($error) { + global $g; + $page = $_SERVER['SCRIPT_NAME']; + syslog(LOG_AUTH, "$page: $error"); + if ($g['debug']) + syslog(LOG_WARNING, var_dump(debug_backtrace())); + return; +} + +/****f* util/exec_command + * NAME + * exec_command - Execute a command and return a string of the result. + * INPUTS + * $command - String of the command to be executed. + * RESULT + * String containing the command's result. + * NOTES + * This function returns the command's stdout and stderr. + ******/ +function exec_command($command) { + $output = array(); + exec($command . ' 2>&1', $output); + return(implode("\n", $output)); +} + +/* wrapper for exec() */ +function mwexec($command, $mute = false, $clearsigmask = false) { + global $g; + + if ($g['debug']) { + if (!$_SERVER['REMOTE_ADDR']) + echo "mwexec(): $command\n"; + } + $oarr = array(); + $retval = 0; + + if ($clearsigmask) { + $oldset = array(); + pcntl_sigprocmask(SIG_SETMASK, array(), $oldset); + } + $garbage = exec("$command 2>&1", $oarr, $retval); + if ($clearsigmask) { + pcntl_sigprocmask(SIG_SETMASK, $oldset); + } + + if(isset($config['system']['developerspew'])) + $mute = false; + if(($retval <> 0) && ($mute === false)) { + $output = implode(" ", $oarr); + log_error(sprintf(gettext("The command '%1\$s' returned exit code '%2\$d', the output was '%3\$s' "), $command, $retval, $output)); + unset($output); + } + unset($oarr); + return $retval; +} + +/* wrapper for exec() in background */ +function mwexec_bg($command, $clearsigmask = false) { + global $g; + + if ($g['debug']) { + if (!$_SERVER['REMOTE_ADDR']) + echo "mwexec(): $command\n"; + } + + if ($clearsigmask) { + $oldset = array(); + pcntl_sigprocmask(SIG_SETMASK, array(), $oldset); + } + $_gb = exec("/usr/bin/nohup $command > /dev/null 2>&1 &"); + if ($clearsigmask) { + pcntl_sigprocmask(SIG_SETMASK, $oldset); + } + unset($_gb); +} + +/* unlink a file, if it exists */ +function unlink_if_exists($fn) { + $to_do = glob($fn); + if(is_array($to_do)) { + foreach($to_do as $filename) + @unlink($filename); + } else { + @unlink($fn); + } +} +/* make a global alias table (for faster lookups) */ +function alias_make_table($config) { + global $aliastable; + + $aliastable = array(); + + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if ($alias['name']) + $aliastable[$alias['name']] = $alias['address']; + } + } +} + +/* check if an alias exists */ +function is_alias($name) { + global $aliastable; + + return isset($aliastable[$name]); +} + +function alias_get_type($name) { + global $config; + + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if ($name == $alias['name']) + return $alias['type']; + } + } + + return ""; +} + +/* expand a host or network alias, if necessary */ +function alias_expand($name) { + global $aliastable; + + if (isset($aliastable[$name])) + return "\${$name}"; + else if (is_ipaddr($name) || is_subnet($name) || is_port($name) || is_portrange($name)) + return "{$name}"; + else + return null; +} + +function alias_expand_urltable($name) { + global $config; + $urltable_prefix = "/var/db/aliastables/"; + $urltable_filename = $urltable_prefix . $name . ".txt"; + + if (is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if (preg_match("/urltable/i", $alias['type']) && ($alias['name'] == $name)) { + if (is_URL($alias["url"]) && file_exists($urltable_filename) && filesize($urltable_filename)) + return $urltable_filename; + else if (process_alias_urltable($name, $alias["url"], 0, true)) + return $urltable_filename; + } + } + } + return null; +} + +function subnet_size($subnet) { + if (is_subnetv4($subnet)) { + list ($ip, $bits) = explode("/", $subnet); + return round(exp(log(2) * (32 - $bits))); + } + else if (is_subnetv6($subnet)) { + list ($ip, $bits) = explode("/", $subnet); + return round(exp(log(2) * (128 - $bits))); + } + else { + return 0; + } +} + +function subnet_expand($subnet) { + if (is_subnetv4($subnet)) { + return subnetv4_expand($subnet); + } else if (is_subnetv6($subnet)) { + return subnetv6_expand($subnet); + } else { + return $subnet; + } +} + +function subnetv4_expand($subnet) { + $result = array(); + list ($ip, $bits) = explode("/", $subnet); + $net = ip2long($ip); + $mask = (0xffffffff << (32 - $bits)); + $net &= $mask; + $size = round(exp(log(2) * (32 - $bits))); + for ($i = 0; $i < $size; $i += 1) { + $result[] = long2ip($net | $i); + } + return $result; +} + +/* find out whether two subnets overlap */ +function check_subnets_overlap($subnet1, $bits1, $subnet2, $bits2) { + + if (!is_numeric($bits1)) + $bits1 = 32; + if (!is_numeric($bits2)) + $bits2 = 32; + + if ($bits1 < $bits2) + $relbits = $bits1; + else + $relbits = $bits2; + + $sn1 = gen_subnet_mask_long($relbits) & ip2long($subnet1); + $sn2 = gen_subnet_mask_long($relbits) & ip2long($subnet2); + + return ($sn1 == $sn2); +} + +/* find out whether two IPv6 subnets overlap */ +function check_subnetsv6_overlap($subnet1, $bits1, $subnet2, $bits2) { + $sub1_min = gen_subnetv6($subnet1, $bits1); + $sub1_max = gen_subnetv6_max($subnet1, $bits1); + $sub2_min = gen_subnetv6($subnet2, $bits2); + $sub2_max = gen_subnetv6_max($subnet2, $bits2); + + return (is_inrange_v6($sub1_min, $sub2_min, $sub2_max) || is_inrange_v6($sub1_max, $sub2_min, $sub2_max) || is_inrange_v6($sub2_min, $sub1_min, $sub1_max)); +} + +/* compare two IP addresses */ +function ipcmp($a, $b) { + if (ip_less_than($a, $b)) + return -1; + else if (ip_greater_than($a, $b)) + return 1; + else + return 0; +} + +/* return true if $addr is in $subnet, false if not */ +function ip_in_subnet($addr,$subnet) { + if(is_ipaddrv6($addr)) { + return (Net_IPv6::isInNetmask($addr, $subnet)); + } else { /* XXX: Maybe check for IPv4 */ + list($ip, $mask) = explode('/', $subnet); + $mask = (0xffffffff << (32 - $mask)) & 0xffffffff; + return ((ip2long($addr) & $mask) == (ip2long($ip) & $mask)); + } +} + +/* verify (and remove) the digital signature on a file - returns 0 if OK */ +function verify_digital_signature($fname) { + global $g; + + if(!file_exists("/usr/local/sbin/gzsig")) + return 4; + + return mwexec("/usr/local/sbin/gzsig verify {$g['etc_path']}/pubkey.pem < " . escapeshellarg($fname)); +} + +/* obtain MAC address given an IP address by looking at the ARP table */ +function arp_get_mac_by_ip($ip) { + mwexec("/sbin/ping -c 1 -t 1 " . escapeshellarg($ip), true); + $arpoutput = ""; + exec("/usr/sbin/arp -n " . escapeshellarg($ip), $arpoutput); + + if ($arpoutput[0]) { + $arpi = explode(" ", $arpoutput[0]); + $macaddr = $arpi[3]; + if (is_macaddr($macaddr)) + return $macaddr; + else + return false; + } + + return false; +} + +/* return a fieldname that is safe for xml usage */ +function xml_safe_fieldname($fieldname) { + $replace = array('/', '-', ' ', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', + '_', '+', '=', '{', '}', '[', ']', '|', '/', '<', '>', '?', + ':', ',', '.', '\'', '\\' + ); + return strtolower(str_replace($replace, "", $fieldname)); +} + +function mac_format($clientmac) { + global $config, $cpzone; + + $mac = explode(":", $clientmac); + $mac_format = $cpzone ? $config['captiveportal'][$cpzone]['radmac_format'] : false; + + switch($mac_format) { + case 'singledash': + return "$mac[0]$mac[1]$mac[2]-$mac[3]$mac[4]$mac[5]"; + + case 'ietf': + return "$mac[0]-$mac[1]-$mac[2]-$mac[3]-$mac[4]-$mac[5]"; + + case 'cisco': + return "$mac[0]$mac[1].$mac[2]$mac[3].$mac[4]$mac[5]"; + + case 'unformatted': + return "$mac[0]$mac[1]$mac[2]$mac[3]$mac[4]$mac[5]"; + + default: + return $clientmac; + } +} + +function resolve_retry($hostname, $retries = 5) { + + if (is_ipaddr($hostname)) + return $hostname; + + for ($i = 0; $i < $retries; $i++) { + // FIXME: gethostbyname does not work for AAAA hostnames, boo, hiss + $ip = gethostbyname($hostname); + + if ($ip && $ip != $hostname) { + /* success */ + return $ip; + } + + sleep(1); + } + + return false; +} + +function format_bytes($bytes) { + if ($bytes >= 1073741824) { + return sprintf("%.2f GB", $bytes/1073741824); + } else if ($bytes >= 1048576) { + return sprintf("%.2f MB", $bytes/1048576); + } else if ($bytes >= 1024) { + return sprintf("%.0f KB", $bytes/1024); + } else { + return sprintf("%d bytes", $bytes); + } +} + +function update_filter_reload_status($text) { + global $g; + + file_put_contents("{$g['varrun_path']}/filter_reload_status", $text); +} + +/****** util/return_dir_as_array + * NAME + * return_dir_as_array - Return a directory's contents as an array. + * INPUTS + * $dir - string containing the path to the desired directory. + * $filter_regex - string containing a regular expression to filter file names. Default empty. + * RESULT + * $dir_array - array containing the directory's contents. This array will be empty if the path specified is invalid. + ******/ +function return_dir_as_array($dir, $filter_regex = '') { + $dir_array = array(); + if (is_dir($dir)) { + if ($dh = opendir($dir)) { + while (($file = readdir($dh)) !== false) { + if (($file == ".") || ($file == "..")) + continue; + + if (empty($filter_regex) || preg_match($filter_regex, $file)) + array_push($dir_array, $file); + } + closedir($dh); + } + } + return $dir_array; +} + +function run_plugins($directory) { + global $config, $g; + + /* process packager manager custom rules */ + $files = return_dir_as_array($directory); + if (is_array($files)) { + foreach ($files as $file) { + if (stristr($file, ".sh") == true) + mwexec($directory . $file . " start"); + else if (!is_dir($directory . "/" . $file) && stristr($file,".inc")) + require_once($directory . "/" . $file); + } + } +} + +/* + * safe_mkdir($path, $mode = 0755) + * create directory if it doesn't already exist and isn't a file! + */ +function safe_mkdir($path, $mode=0755) { + global $g; + + if (!is_file($path) && !is_dir($path)) { + return @mkdir($path, $mode, true); + } else { + return false; + } +} + +/* + * make_dirs($path, $mode = 0755) + * create directory tree recursively (mkdir -p) + */ +function make_dirs($path, $mode = 0755) { + $base = ''; + foreach (explode('/', $path) as $dir) { + $base .= "/$dir"; + if (!is_dir($base)) { + if (!@mkdir($base, $mode)) + return false; + } + } + return true; +} + +/* + * get_sysctl($names) + * Get values of sysctl OID's listed in $names (accepts an array or a single + * name) and return an array of key/value pairs set for those that exist + */ +function get_sysctl($names) { + if (empty($names)) + return array(); + + if (is_array($names)) { + $name_list = array(); + foreach ($names as $name) { + $name_list[] = escapeshellarg($name); + } + } else + $name_list = array(escapeshellarg($names)); + + exec("/sbin/sysctl -i " . implode(" ", $name_list), $output); + $values = array(); + foreach ($output as $line) { + $line = explode(": ", $line, 2); + if (count($line) == 2) + $values[$line[0]] = $line[1]; + } + + return $values; +} + +/* + * get_single_sysctl($name) + * Wrapper for get_sysctl() to simplify read of a single sysctl value + * return the value for sysctl $name or empty string if it doesn't exist + */ +function get_single_sysctl($name) { + if (empty($name)) + return ""; + + $value = get_sysctl($name); + if (empty($value) || !isset($value[$name])) + return ""; + + return $value[$name]; +} + +/* + * set_sysctl($value_list) + * Set sysctl OID's listed as key/value pairs and return + * an array with keys set for those that succeeded + */ +function set_sysctl($values) { + if (empty($values)) + return array(); + + $value_list = array(); + foreach ($values as $key => $value) { + $value_list[] = escapeshellarg($key) . "=" . escapeshellarg($value); + } + + exec("/sbin/sysctl -i " . implode(" ", $value_list), $output, $success); + + /* Retry individually if failed (one or more read-only) */ + if ($success <> 0 && count($value_list) > 1) { + foreach ($value_list as $value) { + exec("/sbin/sysctl -i " . $value, $output); + } + } + + $ret = array(); + foreach ($output as $line) { + $line = explode(": ", $line, 2); + if (count($line) == 2) + $ret[$line[0]] = true; + } + + return $ret; +} + +/* + * set_single_sysctl($name, $value) + * Wrapper to set_sysctl() to make it simple to set only one sysctl + * returns boolean meaning if it suceed + */ +function set_single_sysctl($name, $value) { + if (empty($name)) + return false; + + $result = set_sysctl(array($name => $value)); + + if (!isset($result[$name]) || $result[$name] != $value) + return false; + + return true; +} + +/* + * get_memory() + * returns an array listing the amount of + * memory installed in the hardware + * [0] net memory available for the OS (FreeBSD) after some is taken by BIOS, video or whatever - e.g. 235 MBytes + * [1] real (actual) memory of the system, should be the size of the RAM card/s - e.g. 256 MBytes + */ +function get_memory() { + $physmem = get_single_sysctl("hw.physmem"); + $realmem = get_single_sysctl("hw.realmem"); + /* convert from bytes to megabytes */ + return array(($physmem/1048576),($realmem/1048576)); +} + +function mute_kernel_msgs() { + global $config; + // Do not mute serial console. The kernel gets very very cranky + // and will start dishing you cannot control tty errors. + switch (trim(file_get_contents("/etc/platform"))) { + case "nanobsd": + case "jail": + return; + } + if($config['system']['enableserial']) + return; + exec("/sbin/conscontrol mute on"); +} + +function unmute_kernel_msgs() { + global $config; + // Do not mute serial console. The kernel gets very very cranky + // and will start dishing you cannot control tty errors. + switch (trim(file_get_contents("/etc/platform"))) { + case "nanobsd": + case "jail": + return; + } + exec("/sbin/conscontrol mute off"); +} + +function start_devd() { + global $g; + + if ($g['platform'] == 'jail') + return; + exec("/sbin/devd"); + sleep(1); +} + +function is_interface_vlan_mismatch() { + global $config, $g; + + if (is_array($config['vlans']['vlan'])) { + foreach ($config['vlans']['vlan'] as $vlan) { + if (does_interface_exist($vlan['if']) == false) + return true; + } + } + + return false; +} + +function is_interface_mismatch() { + global $config, $g; + + $do_assign = false; + $i = 0; + $missing_interfaces = array(); + if (is_array($config['interfaces'])) { + foreach ($config['interfaces'] as $ifname => $ifcfg) { + if (preg_match("/^enc|^cua|^tun|^tap|^l2tp|^pptp|^ppp|^ovpn|^gif|^gre|^lagg|^bridge|vlan|_wlan/i", $ifcfg['if'])) { + // Do not check these interfaces. + $i++; + continue; + } + else if (does_interface_exist($ifcfg['if']) == false) { + $missing_interfaces[] = $ifcfg['if']; + $do_assign = true; + } else + $i++; + } + } + + if (file_exists("{$g['tmp_path']}/assign_complete")) + $do_assign = false; + + if (!empty($missing_interfaces) && $do_assign) + file_put_contents("{$g['tmp_path']}/missing_interfaces", implode(' ', $missing_interfaces)); + else + @unlink("{$g['tmp_path']}/missing_interfaces"); + + return $do_assign; +} + +/* sync carp entries to other firewalls */ +function carp_sync_client() { + global $g; + send_event("filter sync"); +} + +/****f* util/isAjax + * NAME + * isAjax - reports if the request is driven from prototype + * INPUTS + * none + * RESULT + * true/false + ******/ +function isAjax() { + return isset ($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'; +} + +/****f* util/timeout + * NAME + * timeout - console input with timeout countdown. Note: erases 2 char of screen for timer. Leave space. + * INPUTS + * optional, seconds to wait before timeout. Default 9 seconds. + * RESULT + * returns 1 char of user input or null if no input. + ******/ +function timeout($timer = 9) { + while(!isset($key)) { + if ($timer >= 9) { echo chr(8) . chr(8) . ($timer==9 ? chr(32) : null) . "{$timer}"; } + else { echo chr(8). "{$timer}"; } + `/bin/stty -icanon min 0 time 25`; + $key = trim(`KEY=\`dd count=1 2>/dev/null\`; echo \$KEY`); + `/bin/stty icanon`; + if ($key == '') + unset($key); + $timer--; + if ($timer == 0) + break; + } + return $key; +} + +/****f* util/msort + * NAME + * msort - sort array + * INPUTS + * $array to be sorted, field to sort by, direction of sort + * RESULT + * returns newly sorted array + ******/ +function msort($array, $id="id", $sort_ascending=true) { + $temp_array = array(); + while(count($array)>0) { + $lowest_id = 0; + $index=0; + foreach ($array as $item) { + if (isset($item[$id])) { + if ($array[$lowest_id][$id]) { + if (strtolower($item[$id]) < strtolower($array[$lowest_id][$id])) { + $lowest_id = $index; + } + } + } + $index++; + } + $temp_array[] = $array[$lowest_id]; + $array = array_merge(array_slice($array, 0,$lowest_id), array_slice($array, $lowest_id+1)); + } + if ($sort_ascending) { + return $temp_array; + } else { + return array_reverse($temp_array); + } +} + +/****f* util/is_URL + * NAME + * is_URL + * INPUTS + * string to check + * RESULT + * Returns true if item is a URL + ******/ +function is_URL($url) { + $match = preg_match("'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))'", $url); + if($match) + return true; + return false; +} + +function is_file_included($file = "") { + $files = get_included_files(); + if (in_array($file, $files)) + return true; + + return false; +} + +/* + * Replace a value on a deep associative array using regex + */ +function array_replace_values_recursive($data, $match, $replace) { + if (empty($data)) + return $data; + + if (is_string($data)) + $data = preg_replace("/{$match}/", $replace, $data); + else if (is_array($data)) + foreach ($data as $k => $v) + $data[$k] = array_replace_values_recursive($v, $match, $replace); + + return $data; +} + +/* + This function was borrowed from a comment on PHP.net at the following URL: + http://www.php.net/manual/en/function.array-merge-recursive.php#73843 + */ +function array_merge_recursive_unique($array0, $array1) { + + $arrays = func_get_args(); + $remains = $arrays; + + // We walk through each arrays and put value in the results (without + // considering previous value). + $result = array(); + + // loop available array + foreach($arrays as $array) { + + // The first remaining array is $array. We are processing it. So + // we remove it from remaing arrays. + array_shift($remains); + + // We don't care non array param, like array_merge since PHP 5.0. + if(is_array($array)) { + // Loop values + foreach($array as $key => $value) { + if(is_array($value)) { + // we gather all remaining arrays that have such key available + $args = array(); + foreach($remains as $remain) { + if(array_key_exists($key, $remain)) { + array_push($args, $remain[$key]); + } + } + + if(count($args) > 2) { + // put the recursion + $result[$key] = call_user_func_array(__FUNCTION__, $args); + } else { + foreach($value as $vkey => $vval) { + $result[$key][$vkey] = $vval; + } + } + } else { + // simply put the value + $result[$key] = $value; + } + } + } + } + return $result; +} + + +/* + * converts a string like "a,b,c,d" + * into an array like array("a" => "b", "c" => "d") + */ +function explode_assoc($delimiter, $string) { + $array = explode($delimiter, $string); + $result = array(); + $numkeys = floor(count($array) / 2); + for ($i = 0; $i < $numkeys; $i += 1) { + $result[$array[$i * 2]] = $array[$i * 2 + 1]; + } + return $result; +} + +function get_staticroutes($returnsubnetsonly = false, $returnhostnames = false) { + global $config, $aliastable; + + /* Bail if there are no routes, but return an array always so callers don't have to check. */ + if (!is_array($config['staticroutes']['route'])) + return array(); + + $allstaticroutes = array(); + $allsubnets = array(); + /* Loop through routes and expand aliases as we find them. */ + foreach ($config['staticroutes']['route'] as $route) { + if (is_alias($route['network'])) { + if (!isset($aliastable[$route['network']])) + continue; + + $subnets = preg_split('/\s+/', $aliastable[$route['network']]); + foreach ($subnets as $net) { + if (!is_subnet($net)) { + if (is_ipaddrv4($net)) + $net .= "/32"; + else if (is_ipaddrv6($net)) + $net .= "/128"; + else if ($returnhostnames === false || !is_fqdn($net)) + continue; + } + $temproute = $route; + $temproute['network'] = $net; + $allstaticroutes[] = $temproute; + $allsubnets[] = $net; + } + } elseif (is_subnet($route['network'])) { + $allstaticroutes[] = $route; + $allsubnets[] = $route['network']; + } + } + if ($returnsubnetsonly) + return $allsubnets; + else + return $allstaticroutes; +} + +/****f* util/get_alias_list + * NAME + * get_alias_list - Provide a list of aliases. + * INPUTS + * $type - Optional, can be a string or array specifying what type(s) of aliases you need. + * RESULT + * Array containing list of aliases. + * If $type is unspecified, all aliases are returned. + * If $type is a string, all aliases of the type specified in $type are returned. + * If $type is an array, all aliases of any type specified in any element of $type are returned. + */ +function get_alias_list($type = null) { + global $config; + $result = array(); + if ($config['aliases']['alias'] <> "" && is_array($config['aliases']['alias'])) { + foreach ($config['aliases']['alias'] as $alias) { + if ($type === null) { + $result[] = $alias['name']; + } + else if (is_array($type)) { + if (in_array($alias['type'], $type)) { + $result[] = $alias['name']; + } + } + else if ($type === $alias['type']) { + $result[] = $alias['name']; + } + } + } + return $result; +} + +/* returns an array consisting of every element of $haystack that is not equal to $needle. */ +function array_exclude($needle, $haystack) { + $result = array(); + if (is_array($haystack)) { + foreach ($haystack as $thing) { + if ($needle !== $thing) { + $result[] = $thing; + } + } + } + return $result; +} + +function get_current_theme() { + global $config, $g; + /* + * if user has selected a custom template, use it. + * otherwise default to pfsense tempalte + */ + if (($g["disablethemeselection"] === true) && !empty($g["default_theme"]) && (is_dir($g["www_path"].'/themes/'.$g["default_theme"]))) + $theme = $g["default_theme"]; + elseif($config['theme'] <> "" && (is_dir($g["www_path"].'/themes/'.$config['theme']))) + $theme = $config['theme']; + else + $theme = "pfsense"; + /* + * If this device is an apple ipod/iphone + * switch the theme to one that works with it. + */ + $lowres_ua = array("iPhone", "iPod", "iPad", "Android", "BlackBerry", "Opera Mini", "Opera Mobi", "PlayBook", "IEMobile"); + foreach($lowres_ua as $useragent) + if(strstr($_SERVER['HTTP_USER_AGENT'], $useragent)) + $theme = (empty($g['theme_lowres']) && (is_dir($g["www_path"].'/themes/'.$g['theme_lowres']))) ? "pfsense" : $g['theme_lowres']; + return $theme; +} + +/* Define what is preferred, IPv4 or IPv6 */ +function prefer_ipv4_or_ipv6() { + global $config; + + if (isset($config['system']['prefer_ipv4'])) + mwexec("/etc/rc.d/ip6addrctl prefer_ipv4"); + else + mwexec("/etc/rc.d/ip6addrctl prefer_ipv6"); +} + +/* Redirect to page passing parameters via POST */ +function post_redirect($page, $params) { + if (!is_array($params)) + return; + + print "
    \n"; + foreach ($params as $key => $value) { + print "\n"; + } + print "
    \n"; + print "\n"; +} + +?> diff --git a/usr/etc/inc/uuid.php b/usr/etc/inc/uuid.php new file mode 100644 index 000000000..9eaf2fdf7 --- /dev/null +++ b/usr/etc/inc/uuid.php @@ -0,0 +1,327 @@ + 0, /* 32-bit */ + 'time_mid' => 0, /* 16-bit */ + 'time_hi' => 0, /* 16-bit */ + 'clock_seq_hi' => 0, /* 8-bit */ + 'clock_seq_low' => 0, /* 8-bit */ + 'node' => array() /* 48-bit */ + ); + + static private $m_generate = array( + self::UUID_TIME => "generateTime", + self::UUID_RANDOM => "generateRandom", + self::UUID_NAME_MD5 => "generateNameMD5", + self::UUID_NAME_SHA1 => "generateNameSHA1" + ); + + static private $m_convert = array( + self::FMT_FIELD => array( + self::FMT_BYTE => "conv_field2byte", + self::FMT_STRING => "conv_field2string", + self::FMT_BINARY => "conv_field2binary" + ), + self::FMT_BYTE => array( + self::FMT_FIELD => "conv_byte2field", + self::FMT_STRING => "conv_byte2string", + self::FMT_BINARY => "conv_byte2binary" + ), + self::FMT_STRING => array( + self::FMT_BYTE => "conv_string2byte", + self::FMT_FIELD => "conv_string2field", + self::FMT_BINARY => "conv_string2binary" + ), + ); + + /* Swap byte order of a 32-bit number */ + static private function swap32($x) { + return (($x & 0x000000ff) << 24) | (($x & 0x0000ff00) << 8) | + (($x & 0x00ff0000) >> 8) | (($x & 0xff000000) >> 24); + } + + /* Swap byte order of a 16-bit number */ + static private function swap16($x) { + return (($x & 0x00ff) << 8) | (($x & 0xff00) >> 8); + } + + /* Auto-detect UUID format */ + static private function detectFormat($src) { + if (is_string($src)) + return self::FMT_STRING; + else if (is_array($src)) { + $len = count($src); + if ($len == 1 || ($len % 2) == 0) + return $len; + else + return (-1); + } + else + return self::FMT_BINARY; + } + + /* + * Public API, generate a UUID of 'type' in format 'fmt' for + * the given namespace 'ns' and node 'node' + */ + static public function generate($type, $fmt = self::FMT_BYTE, + $node = "", $ns = "") { + $func = self::$m_generate[$type]; + if (!isset($func)) + return null; + $conv = self::$m_convert[self::FMT_FIELD][$fmt]; + + $uuid = self::$func($ns, $node); + return self::$conv($uuid); + } + + /* + * Public API, convert a UUID from one format to another + */ + static public function convert($uuid, $from, $to) { + $conv = self::$m_convert[$from][$to]; + if (!isset($conv)) + return ($uuid); + + return (self::$conv($uuid)); + } + + /* + * Generate an UUID version 4 (pseudo random) + */ + static private function generateRandom($ns, $node) { + $uuid = self::$m_uuid_field; + + $uuid['time_hi'] = (4 << 12) | (mt_rand(0, 0x1000)); + $uuid['clock_seq_hi'] = (1 << 7) | mt_rand(0, 128); + $uuid['time_low'] = mt_rand(0, 0xffffffff); + $uuid['time_mid'] = mt_rand(0, 0x0000ffff); + $uuid['clock_seq_low'] = mt_rand(0, 255); + for ($i = 0; $i < 6; $i++) + $uuid['node'][$i] = mt_rand(0, 255); + return ($uuid); + } + + /* + * Generate UUID version 3 and 5 (name based) + */ + static private function generateName($ns, $node, $hash, $version) { + $ns_fmt = self::detectFormat($ns); + $field = self::convert($ns, $ns_fmt, self::FMT_FIELD); + + /* Swap byte order to keep it in big endian on all platforms */ + $field['time_low'] = self::swap32($field['time_low']); + $field['time_mid'] = self::swap16($field['time_mid']); + $field['time_hi'] = self::swap16($field['time_hi']); + + /* Convert the namespace to binary and concatenate node */ + $raw = self::convert($field, self::FMT_FIELD, self::FMT_BINARY); + $raw .= $node; + + /* Hash the namespace and node and convert to a byte array */ + $val = $hash($raw, true); + $tmp = unpack('C16', $val); + foreach (array_keys($tmp) as $key) + $byte[$key - 1] = $tmp[$key]; + + /* Convert byte array to a field array */ + $field = self::conv_byte2field($byte); + + $field['time_low'] = self::swap32($field['time_low']); + $field['time_mid'] = self::swap16($field['time_mid']); + $field['time_hi'] = self::swap16($field['time_hi']); + + /* Apply version and constants */ + $field['clock_seq_hi'] &= 0x3f; + $field['clock_seq_hi'] |= (1 << 7); + $field['time_hi'] &= 0x0fff; + $field['time_hi'] |= ($version << 12); + + return ($field); + } + static private function generateNameMD5($ns, $node) { + return self::generateName($ns, $node, "md5", + self::UUID_NAME_MD5); + } + static private function generateNameSHA1($ns, $node) { + return self::generateName($ns, $node, "sha1", + self::UUID_NAME_SHA1); + } + + /* + * Generate UUID version 1 (time based) + */ + static private function generateTime($ns, $node) { + $uuid = self::$m_uuid_field; + + /* + * Get current time in 100 ns intervals. The magic value + * is the offset between UNIX epoch and the UUID UTC + * time base October 15, 1582. + */ + $tp = gettimeofday(); + $time = ($tp['sec'] * 10000000) + ($tp['usec'] * 10) + + 0x01B21DD213814000; + + /* Work around PHP 32-bit bit-operation limits */ + $q = intval($time / 0xffffffff); + $low = $time - ($q * (0xffffffff + 1)); + $high = intval(($time - $low) / 0xffffffff); + + $uuid['time_low'] = $low; + $uuid['time_mid'] = $high & 0x0000ffff; + $uuid['time_hi'] = ($high & 0x0fff) | (self::UUID_TIME << 12); + + /* + * We don't support saved state information and generate + * a random clock sequence each time. + */ + $uuid['clock_seq_hi'] = (1 << 7) | mt_rand(0, 128); + $uuid['clock_seq_low'] = mt_rand(0, 255); + + /* + * Node should be set to the 48-bit IEEE node identifier, but + * we leave it for the user to supply the node. + */ + for ($i = 0; $i < 6; $i++) + $uuid['node'][$i] = ord(substr($node, $i, 1)); + + return ($uuid); + } + + /* Assumes correct byte order */ + static private function conv_field2byte($src) { + $uuid[0] = ($src['time_low'] & 0xff000000) >> 24; + $uuid[1] = ($src['time_low'] & 0x00ff0000) >> 16; + $uuid[2] = ($src['time_low'] & 0x0000ff00) >> 8; + $uuid[3] = ($src['time_low'] & 0x000000ff); + $uuid[4] = ($src['time_mid'] & 0xff00) >> 8; + $uuid[5] = ($src['time_mid'] & 0x00ff); + $uuid[6] = ($src['time_hi'] & 0xff00) >> 8; + $uuid[7] = ($src['time_hi'] & 0x00ff); + $uuid[8] = $src['clock_seq_hi']; + $uuid[9] = $src['clock_seq_low']; + + for ($i = 0; $i < 6; $i++) + $uuid[10+$i] = $src['node'][$i]; + + return ($uuid); + } + + static private function conv_field2string($src) { + $str = sprintf( + '%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x', + ($src['time_low']), ($src['time_mid']), ($src['time_hi']), + $src['clock_seq_hi'], $src['clock_seq_low'], + $src['node'][0], $src['node'][1], $src['node'][2], + $src['node'][3], $src['node'][4], $src['node'][5]); + return ($str); + } + + static private function conv_field2binary($src) { + $byte = self::conv_field2byte($src); + return self::conv_byte2binary($byte); + } + + static private function conv_byte2field($uuid) { + $field = self::$m_uuid_field; + $field['time_low'] = ($uuid[0] << 24) | ($uuid[1] << 16) | + ($uuid[2] << 8) | $uuid[3]; + $field['time_mid'] = ($uuid[4] << 8) | $uuid[5]; + $field['time_hi'] = ($uuid[6] << 8) | $uuid[7]; + $field['clock_seq_hi'] = $uuid[8]; + $field['clock_seq_low'] = $uuid[9]; + + for ($i = 0; $i < 6; $i++) + $field['node'][$i] = $uuid[10+$i]; + return ($field); + } + + static public function conv_byte2string($src) { + $field = self::conv_byte2field($src); + return self::conv_field2string($field); + } + + static private function conv_byte2binary($src) { + $raw = pack('C16', $src[0], $src[1], $src[2], $src[3], + $src[4], $src[5], $src[6], $src[7], $src[8], $src[9], + $src[10], $src[11], $src[12], $src[13], $src[14], $src[15]); + return ($raw); + } + + static private function conv_string2field($src) { + $parts = sscanf($src, '%x-%x-%x-%x-%02x%02x%02x%02x%02x%02x'); + $field = self::$m_uuid_field; + $field['time_low'] = ($parts[0]); + $field['time_mid'] = ($parts[1]); + $field['time_hi'] = ($parts[2]); + $field['clock_seq_hi'] = ($parts[3] & 0xff00) >> 8; + $field['clock_seq_low'] = $parts[3] & 0x00ff; + for ($i = 0; $i < 6; $i++) + $field['node'][$i] = $parts[4+$i]; + + return ($field); + } + + static private function conv_string2byte($src) { + $field = self::conv_string2field($src); + return self::conv_field2byte($field); + } + + static private function conv_string2binary($src) { + $byte = self::conv_string2byte($src); + return self::conv_byte2binary($byte); + } +} + +?> \ No newline at end of file diff --git a/usr/etc/inc/voucher.inc b/usr/etc/inc/voucher.inc new file mode 100644 index 000000000..56329dfb6 --- /dev/null +++ b/usr/etc/inc/voucher.inc @@ -0,0 +1,741 @@ + + Copyright (C) 2010 Scott Ullrich + Copyright (C) 2007 Marcel Wiget + 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. + +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/local/bin/voucher + pfSense_MODULE: captiveportal +*/ + +/* include all configuration functions */ +if(!function_exists('captiveportal_syslog')) + require_once("captiveportal.inc"); + +function xmlrpc_sync_voucher_expire($vouchers, $syncip, $port, $password, $username) { + global $g, $config, $cpzone; + require_once("xmlrpc.inc"); + + $protocol = "http"; + if (is_array($config['system']) && is_array($config['system']['webgui']) && !empty($config['system']['webgui']['protocol']) && + $config['system']['webgui']['protocol'] == "https") + $protocol = "https"; + if ($protocol == "https" || $port == "443") + $url = "https://{$syncip}"; + else + $url = "http://{$syncip}"; + + /* Construct code that is run on remote machine */ + $method = 'pfsense.exec_php'; + $execcmd = <<setCredentials($username, $password); + $resp = $cli->send($msg, "250"); + if(!is_object($resp)) { + $error = "A communications error occurred while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} (pfsense.exec_php)."; + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Communications error occurred", ""); + return false; + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Error code received", ""); + return false; + } else { + log_error("CaptivePortalVoucherSync XMLRPC reload data success with {$url}:{$port} (pfsense.exec_php)."); + } + + $toreturn = XML_RPC_Decode($resp->value()); + + return $toreturn; +} + +function xmlrpc_sync_voucher_disconnect($dbent, $syncip, $port, $password, $username, $term_cause = 1, $stop_time = null) { + global $g, $config, $cpzone; + require_once("xmlrpc.inc"); + + $protocol = "http"; + if (is_array($config['system']) && is_array($config['system']['webgui']) && !empty($config['system']['webgui']['protocol']) && + $config['system']['webgui']['protocol'] == "https") + $protocol = "https"; + if ($protocol == "https" || $port == "443") + $url = "https://{$syncip}"; + else + $url = "http://{$syncip}"; + + /* Construct code that is run on remote machine */ + $dbent_str = serialize($dbent); + $tmp_stop_time = (isset($stop_time)) ? $stop_time : "null"; + $method = 'pfsense.exec_php'; + $execcmd = <<setCredentials($username, $password); + $resp = $cli->send($msg, "250"); + if(!is_object($resp)) { + $error = "A communications error occurred while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} (pfsense.exec_php)."; + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Communications error occurred", ""); + return false; + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Error code received", ""); + return false; + } else { + log_error("CaptivePortalVoucherSync XMLRPC reload data success with {$url}:{$port} (pfsense.exec_php)."); + } + + $toreturn = XML_RPC_Decode($resp->value()); + + return $toreturn; +} + +function xmlrpc_sync_used_voucher($voucher_received, $syncip, $port, $password, $username) { + global $g, $config, $cpzone; + require_once("xmlrpc.inc"); + + $protocol = "http"; + if (is_array($config['system']) && is_array($config['system']['webgui']) && !empty($config['system']['webgui']['protocol']) && + $config['system']['webgui']['protocol'] == "https") + $protocol = "https"; + if ($protocol == "https" || $port == "443") + $url = "https://{$syncip}"; + else + $url = "http://{$syncip}"; + + /* Construct code that is run on remote machine */ + $method = 'pfsense.exec_php'; + $execcmd = <<setCredentials($username, $password); + $resp = $cli->send($msg, "250"); + if(!is_object($resp)) { + $error = "A communications error occurred while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} (pfsense.exec_php)."; + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Communications error occurred", ""); + return null; // $timeleft + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("CaptivePortalVoucherSync", $error, "Error code received", ""); + return null; // $timeleft + } else { + log_error("CaptivePortalVoucherSync XMLRPC reload data success with {$url}:{$port} (pfsense.exec_php)."); + } + $toreturn = XML_RPC_Decode($resp->value()); + if (!is_array($config['voucher'])) + $config['voucher'] = array(); + + if (is_array($toreturn['voucher']) && is_array($toreturn['voucher']['roll'])) { + $config['voucher'][$cpzone]['roll'] = $toreturn['voucher']['roll']; + write_config("Captive Portal Voucher database synchronized with {$url}"); + voucher_configure_zone(true); + unset($toreturn['voucher']); + } else if (!isset($toreturn['timeleft'])) + return null; + + return $toreturn['timeleft']; +} + +function voucher_expire($voucher_received) { + global $g, $config, $cpzone; + + // XMLRPC Call over to the master Voucher node + if(!empty($config['voucher'][$cpzone]['vouchersyncdbip'])) { + $syncip = $config['voucher'][$cpzone]['vouchersyncdbip']; + $syncport = $config['voucher'][$cpzone]['vouchersyncport']; + $syncpass = $config['voucher'][$cpzone]['vouchersyncpass']; + $vouchersyncusername = $config['voucher'][$cpzone]['vouchersyncusername']; + xmlrpc_sync_voucher_expire($voucher_received, $syncip, $syncport, $syncpass, $vouchersyncusername); + } + + $voucherlck = lock("voucher{$cpzone}", LOCK_EX); + + // read rolls into assoc array with rollid as key and minutes as value + $tickets_per_roll = array(); + $minutes_per_roll = array(); + if (is_array($config['voucher'][$cpzone]['roll'])) { + foreach ($config['voucher'][$cpzone]['roll'] as $rollent) { + $tickets_per_roll[$rollent['number']] = $rollent['count']; + $minutes_per_roll[$rollent['number']] = $rollent['minutes']; + } + } + + // split into an array. Useful for multiple vouchers given + $a_vouchers_received = preg_split("/[\t\n\r ]+/s", $voucher_received); + $active_dirty = false; + $unsetindexes = array(); + + // go through all received vouchers, check their valid and extract + // Roll# and Ticket# using the external readvoucher binary + foreach ($a_vouchers_received as $voucher) { + $v = escapeshellarg($voucher); + if (strlen($voucher) < 3) + continue; // seems too short to be a voucher! + + unset($output); + $_gb = exec("/usr/local/bin/voucher -c {$g['varetc_path']}/voucher_{$cpzone}.cfg -k {$g['varetc_path']}/voucher_{$cpzone}.public -- $v", $output); + list($status, $roll, $nr) = explode(" ", $output[0]); + if ($status == "OK") { + // check if we have this ticket on a registered roll for this ticket + if ($tickets_per_roll[$roll] && ($nr <= $tickets_per_roll[$roll])) { + // voucher is from a registered roll. + if (!isset($active_vouchers[$roll])) + $active_vouchers[$roll] = voucher_read_active_db($roll); + // valid voucher. Store roll# and ticket# + if (!empty($active_vouchers[$roll][$voucher])) { + $active_dirty = true; + unset($active_vouchers[$roll][$voucher]); + } + // check if voucher already marked as used + if (!isset($bitstring[$roll])) + $bitstring[$roll] = voucher_read_used_db($roll); + $pos = $nr >> 3; // divide by 8 -> octet + $mask = 1 << ($nr % 8); + // mark bit for this voucher as used + if (!(ord($bitstring[$roll][$pos]) & $mask)) + $bitstring[$roll][$pos] = chr(ord($bitstring[$roll][$pos]) | $mask); + captiveportal_syslog("{$voucher} ({$roll}/{$nr}) forced to expire"); + + /* Check if this voucher has any active sessions */ + $cpentry = captiveportal_read_db("WHERE username = '{$voucher}'"); + if (!empty($cpentry)) { + captiveportal_disconnect($cpentry,null,13); + captiveportal_logportalauth($cpentry[4],$cpentry[3],$cpentry[2],"FORCLY TERMINATING VOUCHER {$voucher} SESSION"); + $unsetindexes[] = $cpentry[5]; + } + } else + captiveportal_syslog("$voucher ($roll/$nr): not found on any registererd Roll"); + } else + // hmm, thats weird ... not what I expected + captiveportal_syslog("$voucher invalid: {$output[0]}!!"); + } + + // Refresh active DBs + if ($active_dirty == true) { + foreach ($active_vouchers as $roll => $active) + voucher_write_active_db($roll, $active); + unset($active_vouchers); + + /* Triger a sync of the vouchers on config */ + send_event("service sync vouchers"); + } + + // Write back the used DB's + if (is_array($bitstring)) { + foreach ($bitstring as $roll => $used) { + if(is_array($used)) { + foreach($used as $u) + voucher_write_used_db($roll, base64_encode($u)); + } else { + voucher_write_used_db($roll, base64_encode($used)); + } + } + unset($bitstring); + } + + unlock($voucherlck); + + /* Write database */ + if (!empty($unsetindexes)) + captiveportal_remove_entries($unsetindexes); + + return true; +} + +/* + * Authenticate a voucher and return the remaining time credit in minutes + * if $test is set, don't mark the voucher as used nor add it to the list + * of active vouchers + * If $test is set, simply test the voucher. Don't change anything + * but return a more verbose error and result message back + */ +function voucher_auth($voucher_received, $test = 0) { + global $g, $config, $cpzone, $dbc; + + if (!isset($config['voucher'][$cpzone]['enable'])) + return 0; + + // XMLRPC Call over to the master Voucher node + if(!empty($config['voucher'][$cpzone]['vouchersyncdbip'])) { + $syncip = $config['voucher'][$cpzone]['vouchersyncdbip']; + $syncport = $config['voucher'][$cpzone]['vouchersyncport']; + $syncpass = $config['voucher'][$cpzone]['vouchersyncpass']; + $vouchersyncusername = $config['voucher'][$cpzone]['vouchersyncusername']; + $remote_time_used = xmlrpc_sync_used_voucher($voucher_received, $syncip, $syncport, $syncpass, $vouchersyncusername); + } + + $voucherlck = lock("voucher{$cpzone}", LOCK_EX); + + // read rolls into assoc array with rollid as key and minutes as value + $tickets_per_roll = array(); + $minutes_per_roll = array(); + if (is_array($config['voucher'][$cpzone]['roll'])) { + foreach ($config['voucher'][$cpzone]['roll'] as $rollent) { + $tickets_per_roll[$rollent['number']] = $rollent['count']; + $minutes_per_roll[$rollent['number']] = $rollent['minutes']; + } + } + + // split into an array. Useful for multiple vouchers given + $a_vouchers_received = preg_split("/[\t\n\r ]+/s", $voucher_received); + $error = 0; + $test_result = array(); // used to display for voucher test option in GUI + $total_minutes = 0; + $first_voucher = ""; + $first_voucher_roll = 0; + + // go through all received vouchers, check their valid and extract + // Roll# and Ticket# using the external readvoucher binary + foreach ($a_vouchers_received as $voucher) { + $v = escapeshellarg($voucher); + if (strlen($voucher) < 3) + continue; // seems too short to be a voucher! + + $result = exec("/usr/local/bin/voucher -c {$g['varetc_path']}/voucher_{$cpzone}.cfg -k {$g['varetc_path']}/voucher_{$cpzone}.public -- $v"); + list($status, $roll, $nr) = explode(" ", $result); + if ($status == "OK") { + if (!$first_voucher) { + // store first voucher. Thats the one we give the timecredit + $first_voucher = $voucher; + $first_voucher_roll = $roll; + } + // check if we have this ticket on a registered roll for this ticket + if ($tickets_per_roll[$roll] && ($nr <= $tickets_per_roll[$roll])) { + // voucher is from a registered roll. + if (!isset($active_vouchers[$roll])) + $active_vouchers[$roll] = voucher_read_active_db($roll); + // valid voucher. Store roll# and ticket# + if (!empty($active_vouchers[$roll][$voucher])) { + list($timestamp,$minutes) = explode(",", $active_vouchers[$roll][$voucher]); + // we have an already active voucher here. + $remaining = intval((($timestamp + (60*$minutes)) - time())/60); + $test_result[] = sprintf(gettext('%1$s (%2$s/%3$s) active and good for %4$d Minutes'), $voucher, $roll, $nr, $remaining); + $total_minutes += $remaining; + } else { + // voucher not used. Check if ticket Id is on the roll (not too high) + // and if the ticket is marked used. + // check if voucher already marked as used + if (!isset($bitstring[$roll])) + $bitstring[$roll] = voucher_read_used_db($roll); + $pos = $nr >> 3; // divide by 8 -> octet + $mask = 1 << ($nr % 8); + if (ord($bitstring[$roll][$pos]) & $mask) { + $test_result[] = "$voucher ($roll/$nr) already used and expired"; + captiveportal_syslog("$voucher ($roll/$nr) already used and expired"); + $total_minutes = -1; // voucher expired + $error++; + } else { + // mark bit for this voucher as used + $bitstring[$roll][$pos] = chr(ord($bitstring[$roll][$pos]) | $mask); + $test_result[] = "$voucher ($roll/$nr) good for {$minutes_per_roll[$roll]} Minutes"; + $total_minutes += $minutes_per_roll[$roll]; + } + } + } else { + $test_result[] = "$voucher ($roll/$nr): not found on any registererd Roll"; + captiveportal_syslog("$voucher ($roll/$nr): not found on any registererd Roll"); + } + } else { + // hmm, thats weird ... not what I expected + $test_result[] = "$voucher invalid: $result !!"; + captiveportal_syslog("$voucher invalid: $result !!"); + $error++; + } + } + + // if this was a test call, we're done. Return the result. + if ($test) { + if ($error) { + $test_result[] = gettext("Access denied!"); + } else { + $test_result[] = sprintf(gettext("Access granted for %d Minutes in total."),$total_minutes); + } + unlock($voucherlck); + + return $test_result; + } + + // if we had an error (one of the vouchers is invalid), return 0. + // Discussion: we could return the time remaining for good vouchers, but then + // the user wouldn't know that he used at least one invalid voucher. + if ($error) { + unlock($voucherlck); + if ($total_minutes > 0) // probably not needed, but want to make sure + $total_minutes = 0; // we only report -1 (expired) or 0 (no access) + return $total_minutes; // well, at least one voucher had errors. Say NO ACCESS + } + + // If we did a XMLRPC sync earlier check the timeleft + if (!empty($config['voucher'][$cpzone]['vouchersyncdbip'])) { + if (!is_null($remote_time_used)) + $total_minutes = $remote_time_used; + else if ($remote_time_used < $total_minutes) + $total_minutes -= $remote_time_used; + } + + // All given vouchers were valid and this isn't simply a test. + // Write back the used DB's + if (is_array($bitstring)) { + foreach ($bitstring as $roll => $used) { + if(is_array($used)) { + foreach($used as $u) + voucher_write_used_db($roll, base64_encode($u)); + } else { + voucher_write_used_db($roll, base64_encode($used)); + } + } + } + + // Active DB: we only add the first voucher if multiple given + // and give that one all the time credit. This allows the user to logout and + // log in later using just the first voucher. It also keeps username limited + // to one voucher and that voucher shows the correct time credit in 'active vouchers' + if (!empty($active_vouchers[$first_voucher_roll][$first_voucher])) { + list($timestamp, $minutes) = explode(",", $active_vouchers[$first_voucher_roll][$first_voucher]); + } else { + $timestamp = time(); // new voucher + $minutes = $total_minutes; + } + + $active_vouchers[$first_voucher_roll][$first_voucher] = "$timestamp,$minutes"; + voucher_write_active_db($first_voucher_roll, $active_vouchers[$first_voucher_roll]); + + /* Triger a sync of the vouchers on config */ + send_event("service sync vouchers"); + + unlock($voucherlck); + + return $total_minutes; +} + +function voucher_configure($sync = false) { + global $config, $g, $cpzone; + + if (is_array($config['voucher'])) { + foreach ($config['voucher'] as $voucherzone => $vcfg) { + if ($g['booting']) + echo gettext("Enabling voucher support... "); + $cpzone = $voucherzone; + $error = voucher_configure_zone($sync); + if ($g['booting']) { + if ($error) + echo "error\n"; + else + echo "done\n"; + } + } + } +} + +function voucher_configure_zone($sync = false) { + global $config, $g, $cpzone; + + if (!isset($config['voucher'][$cpzone]['enable'])) + return 0; + + if ($sync == true) + captiveportal_syslog("Writing voucher db from sync data..."); + + $voucherlck = lock("voucher{$cpzone}", LOCK_EX); + + /* write public key used to verify vouchers */ + $pubkey = base64_decode($config['voucher'][$cpzone]['publickey']); + $fd = fopen("{$g['varetc_path']}/voucher_{$cpzone}.public", "w"); + if (!$fd) { + captiveportal_syslog("Voucher error: cannot write voucher.public\n"); + unlock($voucherlck); + return 1; + } + fwrite($fd, $pubkey); + fclose($fd); + @chmod("{$g['varetc_path']}/voucher_{$cpzone}.public", 0600); + + /* write config file used by voucher binary to decode vouchers */ + $fd = fopen("{$g['varetc_path']}/voucher_{$cpzone}.cfg", "w"); + if (!$fd) { + printf(gettext("Error: cannot write voucher.cfg") . "\n"); + unlock($voucherlck); + return 1; + } + fwrite($fd, "{$config['voucher'][$cpzone]['rollbits']},{$config['voucher'][$cpzone]['ticketbits']},{$config['voucher'][$cpzone]['checksumbits']},{$config['voucher'][$cpzone]['magic']},{$config['voucher'][$cpzone]['charset']}\n"); + fclose($fd); + @chmod("{$g['varetc_path']}/voucher_{$cpzone}.cfg", 0600); + unlock($voucherlck); + + if (($g['booting'] || $sync == true) && is_array($config['voucher'][$cpzone]['roll'])) { + + $voucherlck = lock("voucher{$cpzone}", LOCK_EX); + + // create active and used DB per roll on ramdisk from config + foreach ($config['voucher'][$cpzone]['roll'] as $rollent) { + + $roll = $rollent['number']; + voucher_write_used_db($roll, $rollent['used']); + $minutes = $rollent['minutes']; + $active_vouchers = array(); + $a_active = &$rollent['active']; + if (is_array($a_active)) { + foreach ($a_active as $activent) { + $voucher = $activent['voucher']; + $timestamp = $activent['timestamp']; + $minutes = $activent['minutes']; + // its tempting to check for expired timestamps, but during + // bootup, we most likely don't have the correct time time. + $active_vouchers[$voucher] = "$timestamp,$minutes"; + } + } + voucher_write_active_db($roll, $active_vouchers); + } + + unlock($voucherlck); + } + + return 0; +} + +/* write bitstring of used vouchers to ramdisk. + * Bitstring must already be base64_encoded! + */ +function voucher_write_used_db($roll, $vdb) { + global $g, $cpzone; + + $fd = fopen("{$g['vardb_path']}/voucher_{$cpzone}_used_$roll.db", "w"); + if ($fd) { + fwrite($fd, $vdb . "\n"); + fclose($fd); + } else + voucher_log(LOG_ERR, sprintf(gettext('cant write %1$s/voucher_%s_used_%2$s.db'), $g['vardb_path'], $cpzone, $roll)); +} + +/* return assoc array of active vouchers with activation timestamp + * voucher is index. + */ +function voucher_read_active_db($roll) { + global $g, $cpzone; + + $active = array(); + $dirty = 0; + $file = "{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db"; + if (file_exists($file)) { + $fd = fopen($file, "r"); + if ($fd) { + while (!feof($fd)) { + $line = trim(fgets($fd)); + if ($line) { + list($voucher,$timestamp,$minutes) = explode(",", $line); // voucher,timestamp + if ((($timestamp + (60*$minutes)) - time()) > 0) + $active[$voucher] = "$timestamp,$minutes"; + else + $dirty=1; + } + } + fclose($fd); + if ($dirty) { // if we found expired entries, lets save our snapshot + voucher_write_active_db($roll, $active); + + /* Triger a sync of the vouchers on config */ + send_event("service sync vouchers"); + } + } + } + return $active; +} + +/* store array of active vouchers back to DB */ +function voucher_write_active_db($roll, $active) { + global $g, $cpzone; + + if (!is_array($active)) + return; + $fd = fopen("{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db", "w"); + if ($fd) { + foreach($active as $voucher => $value) + fwrite($fd, "$voucher,$value\n"); + fclose($fd); + } +} + +/* return how many vouchers are marked used on a roll */ +function voucher_used_count($roll) { + global $g, $cpzone; + + $bitstring = voucher_read_used_db($roll); + $max = strlen($bitstring) * 8; + $used = 0; + for ($i = 1; $i <= $max; $i++) { + // check if ticket already used or not. + $pos = $i >> 3; // divide by 8 -> octet + $mask = 1 << ($i % 8); // mask to test bit in octet + if (ord($bitstring[$pos]) & $mask) + $used++; + } + unset($bitstring); + + return $used; +} + +function voucher_read_used_db($roll) { + global $g, $cpzone; + + $vdb = ""; + $file = "{$g['vardb_path']}/voucher_{$cpzone}_used_$roll.db"; + if (file_exists($file)) { + $fd = fopen($file, "r"); + if ($fd) { + $vdb = trim(fgets($fd)); + fclose($fd); + } else { + voucher_log(LOG_ERR, sprintf(gettext('cant read %1$s/voucher_%s_used_%2$s.db'), $g['vardb_path'], $cpzone, $roll)); + } + } + return base64_decode($vdb); +} + +function voucher_unlink_db($roll) { + global $g, $cpzone; + @unlink("{$g['vardb_path']}/voucher_{$cpzone}_used_$roll.db"); + @unlink("{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db"); +} + +/* we share the log with captiveportal for now */ +function voucher_log($priority, $message) { + + $message = trim($message); + openlog("logportalauth", LOG_PID, LOG_LOCAL4); + syslog($priority, sprintf(gettext("Voucher: %s"),$message)); + closelog(); +} + +/* Save active and used voucher DB into XML config and write it to flash + * Called during reboot -> system_reboot_cleanup() and every active voucher change + */ +function voucher_save_db_to_config() { + global $config, $g, $cpzone; + + if (is_array($config['voucher'])) { + foreach ($config['voucher'] as $voucherzone => $vcfg) { + $cpzone = $voucherzone; + voucher_save_db_to_config_zone(); + } + } +} + +function voucher_save_db_to_config_zone() { + global $config, $g, $cpzone; + + if (!isset($config['voucher'][$cpzone]['enable'])) + return; // no vouchers or don't want to save DB's + + if (!is_array($config['voucher'][$cpzone]['roll'])) + return; + + $voucherlck = lock("voucher{$cpzone}", LOCK_EX); + + // walk all active rolls and save runtime DB's to flash + $a_roll = &$config['voucher'][$cpzone]['roll']; + while (list($key, $value) = each($a_roll)) { + $rollent = &$a_roll[$key]; + $roll = $rollent['number']; + $bitmask = voucher_read_used_db($roll); + $rollent['used'] = base64_encode($bitmask); + $active_vouchers = voucher_read_active_db($roll); + $db = array(); + $dbi = 1; + foreach($active_vouchers as $voucher => $line) { + list($timestamp,$minutes) = explode(",", $line); + $activent['voucher'] = $voucher; + $activent['timestamp'] = $timestamp; + $activent['minutes'] = $minutes; + $db["v{$dbi}"] = $activent; + $dbi++; + } + $rollent['active'] = $db; + unset($active_vouchers); + } + + unlock($voucherlck); + + write_config("Synching vouchers"); + return; +} + +?> diff --git a/usr/etc/inc/vpn.inc b/usr/etc/inc/vpn.inc new file mode 100644 index 000000000..e92f30875 --- /dev/null +++ b/usr/etc/inc/vpn.inc @@ -0,0 +1,1578 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig + pfSense_BUILDER_BINARIES: /usr/local/sbin/ipsec /usr/local/libexec/ipsec/charon /usr/local/libexec/ipsec/starter + pfSense_BUILDER_BINARIES: /usr/local/sbin/filterdns /usr/local/sbin/mpd4 + pfSense_MODULE: vpn +*/ + +require_once("ipsec.inc"); + +function vpn_ipsec_configure_loglevels($forconfig = false) +{ + global $config, $ipsec_loglevels; + + $cfgtext = array(); + foreach ($ipsec_loglevels as $lkey => $ldescr) { + if (!isset($config['ipsec']["ipsec_{$lkey}"]) && !$forconfig) + mwexec("/usr/local/sbin/ipsec stroke loglevel {$lkey} -- -1", false); + else if (is_numeric($config['ipsec']["ipsec_{$lkey}"]) && + intval($config['ipsec']["ipsec_{$lkey}"]) >= 1 && intval($config['ipsec']["ipsec_{$lkey}"]) <= 5) + $forconfig ? $cfgtext[] = "${lkey} " . (intval($config['ipsec']["ipsec_{$lkey}"]) - 1) : + mwexec("/usr/local/sbin/ipsec stroke loglevel {$lkey} " . (intval($config['ipsec']["ipsec_{$lkey}"]) - 1) , false); + } + if ($forconfig) + return implode(',', $cfgtext); +} + +/* include all configuration functions */ +function vpn_ipsec_convert_to_modp($index) +{ + + $convertion = ""; + switch ($index) { + case '1': + $convertion = "modp768"; + break; + case '2': + $convertion = "modp1024"; + break; + case '5': + $convertion = "modp1536"; + break; + case '14': + $convertion = "modp2048"; + break; + case '15': + $convertion = "modp3072"; + break; + case '16': + $convertion = "modp4096"; + break; + case '17': + $convertion = "modp6144"; + break; + case '18': + $convertion = "modp8192"; + break; + } + + return $convertion; +} + +function vpn_ipsec_configure($ipchg = false) +{ + global $config, $g, $sa, $sn, $p1_ealgos, $p2_ealgos; + + if ($g['platform'] == 'jail') + return; + + /* get the automatic ping_hosts.sh ready */ + unlink_if_exists("{$g['vardb_path']}/ipsecpinghosts"); + touch("{$g['vardb_path']}/ipsecpinghosts"); + + vpn_ipsec_configure_preferoldsa(); + + $syscfg = $config['system']; + $ipseccfg = $config['ipsec']; + $a_phase1 = $config['ipsec']['phase1']; + $a_phase2 = $config['ipsec']['phase2']; + $a_client = $config['ipsec']['client']; + + if (!isset($ipseccfg['enable'])) { + /* try to stop charon */ + mwexec("/usr/local/sbin/ipsec stop"); + /* Stop dynamic monitoring */ + killbypid("{$g['varrun_path']}/filterdns-ipsec.pid"); + + /* wait for process to die */ + sleep(2); + + /* disallow IPSEC, it is off */ + mwexec("/sbin/ifconfig enc0 down"); + set_single_sysctl("net.inet.ip.ipsec_in_use", "0"); + + return 0; + } else { + $certpath = "{$g['varetc_path']}/ipsec/ipsec.d/certs"; + $capath = "{$g['varetc_path']}/ipsec/ipsec.d/cacerts"; + $keypath = "{$g['varetc_path']}/ipsec/ipsec.d/private"; + + mwexec("/sbin/ifconfig enc0 up"); + set_single_sysctl("net.inet.ip.ipsec_in_use", "1"); + /* needed for config files */ + if (!is_dir("{$g['varetc_path']}/ipsec")) + mkdir("{$g['varetc_path']}/ipsec"); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d"); + if (!is_dir($capath)) + mkdir($capath); + if (!is_dir($keypath)) + mkdir($keypath); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d/crls")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d/crls"); + if (!is_dir($certpath)) + mkdir($certpath); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d/aacerts")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d/aacerts"); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d/acerts")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d/acerts"); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d/ocspcerts")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d/ocspcerts"); + if (!is_dir("{$g['varetc_path']}/ipsec/ipsec.d/reqs")) + mkdir("{$g['varetc_path']}/ipsec/ipsec.d/reqs"); + + + if ($g['booting']) + echo gettext("Configuring IPsec VPN... "); + + /* fastforwarding is not compatible with ipsec tunnels */ + set_single_sysctl("net.inet.ip.fastforwarding", "0"); + + /* resolve all local, peer addresses and setup pings */ + $ipmap = array(); + $rgmap = array(); + $filterdns_list = array(); + $listeniflist = array(); + unset($iflist); + if (is_array($a_phase1) && count($a_phase1)) { + + $ipsecpinghosts = ""; + /* step through each phase1 entry */ + foreach ($a_phase1 as $ph1ent) { + if (isset($ph1ent['disabled'])) + continue; + + $ikeid = $ph1ent['ikeid']; + $listeniflist = get_real_interface($a_phase1['interface']); + + $ep = ipsec_get_phase1_src($ph1ent); + if (!is_ipaddr($ep)) + continue; + + if(!in_array($ep,$ipmap)) + $ipmap[] = $ep; + + /* see if this tunnel has a hostname for the remote-gateway. If so, + try to resolve it now and add it to the list for filterdns */ + + if (isset ($ph1ent['mobile'])) + continue; + + $rg = $ph1ent['remote-gateway']; + + if (!is_ipaddr($rg)) { + $filterdns_list[] = "{$rg}"; + add_hostname_to_watch($rg); + if(! $g['booting']) + $rg = resolve_retry($rg); + if (!is_ipaddr($rg)) + continue; + } + if(array_search($rg, $rgmap)) { + log_error("The remote gateway {$rg} already exists on another phase 1 entry"); + continue; + } + $rgmap[$ph1ent['remote-gateway']] = $rg; + + if (is_array($a_phase2)) { + /* step through each phase2 entry */ + foreach ($a_phase2 as $ph2ent) { + if (isset($ph2ent['disabled'])) + continue; + + if ($ikeid != $ph2ent['ikeid']) + continue; + + /* add an ipsec pinghosts entry */ + if ($ph2ent['pinghost']) { + if (!is_array($iflist)) + $iflist = get_configured_interface_list(); + $viplist = get_configured_vips_list(); + $srcip = null; + $local_subnet = ipsec_idinfo_to_cidr($ph2ent['localid'], true, $ph2ent['mode']); + if(is_ipaddrv6($ph2ent['pinghost'])) { + foreach ($iflist as $ifent => $ifname) { + $interface_ip = get_interface_ipv6($ifent); + if(!is_ipaddrv6($interface_ip)) + continue; + if (ip_in_subnet($interface_ip, $local_subnet)) { + $srcip = $interface_ip; + break; + } + } + } else { + foreach ($iflist as $ifent => $ifname) { + $interface_ip = get_interface_ip($ifent); + if(!is_ipaddrv4($interface_ip)) + continue; + if ($local_subnet == "0.0.0.0/0" || ip_in_subnet($interface_ip, $local_subnet)) { + $srcip = $interface_ip; + break; + } + } + } + /* if no valid src IP was found in configured interfaces, try the vips */ + if (is_null($srcip)) { + foreach ($viplist as $vip) { + if (ip_in_subnet($vip['ipaddr'], $local_subnet)) { + $srcip = $vip['ipaddr']; + break; + } + } + } + $dstip = $ph2ent['pinghost']; + if(is_ipaddrv6($dstip)) { + $family = "inet6"; + } else { + $family = "inet"; + } + if (is_ipaddr($srcip)) + $ipsecpinghosts[] = "{$srcip}|{$dstip}|3|||||{$family}|\n"; + } + } + } + } + @file_put_contents("{$g['vardb_path']}/ipsecpinghosts", $ipsecpinghosts); + unset($ipsecpinghosts); + } + unset($iflist); + + $strongswan = << 0) + $strongswan .= ","; + if ($authcfg == "system") + $authcfg = "Local Database"; + $strongswan .= $authcfg; + $firstsed = 1; + } + $strongswan .= "\n"; + $strongswan .= "\t}\n"; + } + } + + $strongswan .= "\t}\n}\n"; + @file_put_contents("{$g['varetc_path']}/ipsec/strongswan.conf", $strongswan); + unset($strongswan); + + /* generate CA certificates files */ + if (is_array($config['ca']) && count($config['ca'])) { + foreach ($config['ca'] as $ca) { + if (!isset($ca['crt'])) { + log_error(sprintf(gettext("Error: Invalid certificate info for %s"), $ca['descr'])); + continue; + } + $cert = base64_decode($ca['crt']); + $x509cert = openssl_x509_parse(openssl_x509_read($cert)); + if (!is_array($x509cert) || !isset($x509cert['hash'])) { + log_error(sprintf(gettext("Error: Invalid certificate hash info for %s"), $ca['descr'])); + continue; + } + $fname = "{$capath}/{$x509cert['hash']}.0.crt"; + if (!@file_put_contents($fname, $cert)) { + log_error(sprintf(gettext("Error: Cannot write IPsec CA file for %s"), $ca['descr'])); + continue; + } + unset($cert); + } + } + + $pskconf = ""; + + if (is_array($a_phase1) && count($a_phase1)) { + foreach ($a_phase1 as $ph1ent) { + + if (isset($ph1ent['disabled'])) + continue; + + if (strpos($ph1ent['authentication_method'], 'rsa') || $ph1ent['authentication_method'] == 'eap-tls') { + $certline = ''; + + $ikeid = $ph1ent['ikeid']; + $cert = lookup_cert($ph1ent['certref']); + + if (!$cert) { + log_error(sprintf(gettext("Error: Invalid phase1 certificate reference for %s"), $ph1ent['name'])); + continue; + } + + @chmod($certpath, 0600); + + $ph1keyfile = "{$keypath}/cert-{$ikeid}.key"; + if (!file_put_contents($ph1keyfile, base64_decode($cert['prv']))) { + log_error(sprintf(gettext("Error: Cannot write phase1 key file for %s"), $ph1ent['name'])); + continue; + } + @chmod($ph1keyfile, 0600); + + $ph1certfile = "{$certpath}/cert-{$ikeid}.crt"; + if (!file_put_contents($ph1certfile, base64_decode($cert['crt']))) { + log_error(sprintf(gettext("Error: Cannot write phase1 certificate file for %s"), $ph1ent['name'])); + @unlink($ph1keyfile); + continue; + } + @chmod($ph1certfile, 0600); + + /* XXX" Traffic selectors? */ + $pskconf .= " : RSA {$ph1keyfile}\n"; + } else { + list ($myid_type, $myid_data) = ipsec_find_id($ph1ent, "local"); + list ($peerid_type, $peerid_data) = ipsec_find_id($ph1ent, "peer", $rgmap); + + if (empty($peerid_data)) + continue; + + $myid = isset($ph1ent['mobile']) ? trim($myid_data) . " " : ""; + $peerid = ($peerid_data != "allusers") ? trim($peerid_data) : ""; + if (!empty($ph1ent['pre-shared-key'])) + $pskconf .= $myid . $peerid . " : PSK \"" . trim($ph1ent['pre-shared-key']) . "\"\n"; + } + } + } + + /* Add user PSKs */ + if (is_array($config['system']) && is_array($config['system']['user'])) { + foreach ($config['system']['user'] as $user) { + if (!empty($user['ipsecpsk'])) { + $pskconf .= "{$user['name']} : PSK \"{$user['ipsecpsk']}\"\n"; + } + } + unset($user); + } + + /* add PSKs for mobile clients */ + if (is_array($ipseccfg['mobilekey'])) { + foreach ($ipseccfg['mobilekey'] as $key) { + if ($key['ident'] == "allusers") + $key['ident'] = ''; + $pskconf .= "{$key['ident']} : PSK \"{$key['pre-shared-key']}\"\n"; + } + unset($key); + } + + @file_put_contents("{$g['varetc_path']}/ipsec/ipsec.secrets", $pskconf); + chmod("{$g['varetc_path']}/ipsec/ipsec.secrets", 0600); + unset($pskconf); + + $natfilterrules = false; + /* begin ipsec.conf */ + $ipsecconf = ""; + if (is_array($a_phase1) && count($a_phase1)) { + + $ipsecconf .= "# This file is automatically generated. Do not edit\n"; + $ipsecconf .= "config setup\n\tuniqueids = yes\n"; + $ipsecconf .= "\tcharondebug=\"" . vpn_ipsec_configure_loglevels(true) . "\"\n"; + + foreach ($a_phase1 as $ph1ent) { + if (isset($ph1ent['disabled'])) + continue; + + if ($ph1ent['mode'] == "aggressive") + $aggressive = "yes"; + else + $aggressive = "no"; + + $ep = ipsec_get_phase1_src($ph1ent); + if (!$ep) + continue; + + $ikeid = $ph1ent['ikeid']; + $keyexchange = "ikev1"; + $passive = "route"; + if (!empty($ph1ent['iketype']) && $ph1ent['iketype'] != "ikev1") { + $keyexchange = "ikev2"; + //$passive = "start"; + } else + $passive = "route"; + + if (isset($ph1ent['mobile'])) { + $right_spec = "%any"; + $passive = 'add'; + } else + $right_spec = $ph1ent['remote-gateway']; + + list ($myid_type, $myid_data) = ipsec_find_id($ph1ent, "local"); + list ($peerid_type, $peerid_data) = ipsec_find_id($ph1ent, "peer", $rgmap); + + /* Only specify peer ID if we are not dealing with a mobile PSK-only tunnel */ + $peerid_spec = ''; + if (!isset($ph1ent['mobile'])) + $peerid_spec = $peerid_data; + + if (is_array($ph1ent['encryption-algorithm']) && !empty($ph1ent['encryption-algorithm']['name']) && !empty($ph1ent['hash-algorithm'])) { + $ealgosp1 = ''; + $ealg_id = $ph1ent['encryption-algorithm']['name']; + $ealg_kl = $ph1ent['encryption-algorithm']['keylen']; + if ($ealg_kl) + $ealgosp1 = "ike = {$ealg_id}{$ealg_kl}-{$ph1ent['hash-algorithm']}"; + else + $ealgosp1 = "ike = {$ealg_id}-{$ph1ent['hash-algorithm']}"; + + $modp = vpn_ipsec_convert_to_modp($ph1ent['dhgroup']); + if (!empty($modp)) + $ealgosp1 .= "-{$modp}"; + + $ealgosp1 .= "!"; + } + + if ($ph1ent['dpd_delay'] && $ph1ent['dpd_maxfail']) { + if ($passive == "route") + $dpdline = "dpdaction = restart"; + else + $dpdline = "dpdaction = clear"; + $dpdline .= "\n\tdpddelay = {$ph1ent['dpd_delay']}s"; + $dpdtimeout = $ph1ent['dpd_delay'] * ($ph1ent['dpd_maxfail'] + 1); + $dpdline .= "\n\tdpdtimeout = {$dpdtimeout}s"; + } else + $dpdline = "dpdaction = none"; + + $ikelifeline = ''; + if ($ph1ent['lifetime']) + $ikelifeline = "ikelifetime = {$ph1ent['lifetime']}s"; + + $rightsourceip = NULL; + if (!empty($a_client['pool_address'])) + $rightsourceip = "\trightsourceip = {$a_client['pool_address']}/{$a_client['pool_netbits']}\n"; + + $authentication = ""; + switch ($ph1ent['authentication_method']) { + case 'eap-tls': + $authentication = "leftauth=eap-tls\n\trightauth=eap-tls"; + if (!empty($ph1ent['certref'])) + $authentication .= "\n\tleftcert={$certpath}/cert-{$ph1ent['ikeid']}.crt"; + break; + case 'xauth_rsa_server': + $authentication = "leftauth = pubkey\n\trightauth = pubkey"; + $authentication .= "\n\trightauth2 = xauth-generic"; + break; + case 'xauth_psk_server': + $authentication = "leftauth = psk\n\trightauth = psk"; + $authentication .= "\n\trightauth2 = xauth-generic"; + break; + case 'pre_shared_key': + $authentication = "leftauth = psk\n\trightauth = psk"; + break; + case 'rsasig': + $authentication = "leftauth = pubkey\n\trightauth = pubkey"; + break; + case 'hybrid_rsa_server': + $authentication = "leftauth = xauth-generic\n\trightauth = pubkey"; + $authentication .= "\n\trightauth2 = xauth"; + break; + } + + $left_spec = $ep; + + if (isset($ph1ent['reauth_enable'])) + $reauth = "reauth = no"; + else + $reauth = "reauth = yes"; + if (isset($ph1ent['rekey_enable'])) + $rekey = "rekey = no"; + else + $rekey = "rekey = yes"; + + $ipseclifetime = 0; + $rightsubnet_spec = array(); + $leftsubnet_spec = array(); + $ealgoAHsp2arr = array(); + $ealgoESPsp2arr = array(); + if (is_array($a_phase2) && count($a_phase2)) { + foreach ($a_phase2 as $ph2ent) { + if ($ikeid != $ph2ent['ikeid']) + continue; + + if (isset($ph2ent['disabled'])) + continue; + + if (isset($ph2ent['mobile']) && !isset($a_client['enable'])) + continue; + + if (($ph2ent['mode'] == 'tunnel') or ($ph2ent['mode'] == 'tunnel6')) { + $tunneltype = "type = tunnel"; + + $localid_type = $ph2ent['localid']['type']; + $leftsubnet_data = ipsec_idinfo_to_cidr($ph2ent['localid'], false, $ph2ent['mode']); + /* Do not print localid in some cases, such as a pure-psk or psk/xauth single phase2 mobile tunnel */ + if (($localid_type == "none" || $localid_type == "mobile") + && isset($ph1ent['mobile']) && (ipsec_get_number_of_phase2($ikeid)==1)) { + $left_spec = '%any'; + } else { + if ($localid_type != "address") { + $localid_type = "subnet"; + } + // Don't let an empty subnet into config, it can cause parse errors. Ticket #2201. + if (!is_ipaddr($leftsubnet_data) && !is_subnet($leftsubnet_data) && ($leftsubnet_data != "0.0.0.0/0")) { + log_error("Invalid IPsec Phase 2 \"{$ph2ent['descr']}\" - {$ph2ent['localid']['type']} has no subnet."); + continue; + } + if (!empty($ph2ent['natlocalid'])) { + $natleftsubnet_data = ipsec_idinfo_to_cidr($ph2ent['natlocalid'], false, $ph2ent['mode']); + if ($ph2ent['natlocalid']['type'] != "address") { + if (is_subnet($natleftsubnet_data)) + $leftsubnet_data = "{$natleftsubnet_data}|{$leftsubnet_data}"; + } else { + if (is_ipaddr($natleftsubnet_data)) + $leftsubnet_data = "{$natleftsubnet_data}|{$leftsubnet_data}"; + } + $natfilterrules = true; + } + } + + if (empty($leftsubnet_spec[$leftsubnet_data])) + $leftsubnet_spec[$leftsubnet_data] = $leftsubnet_data; + + if (!isset($ph2ent['mobile'])) { + $tmpsubnet = ipsec_idinfo_to_cidr($ph2ent['remoteid'], false, $ph2ent['mode']); + if (empty($rightsubnet_spec[$tmpsubnet])) + $rightsubnet_spec[$tmpsubnet] = $tmpsubnet; + } else if (!empty($a_client['pool_address'])) { + if (empty($rightsubnet_spec["{$a_client['pool_address']}/{$a_client['pool_netbits']}"])) + $rightsubnet_spec["{$a_client['pool_address']}/{$a_client['pool_netbits']}"] = "{$a_client['pool_address']}/{$a_client['pool_netbits']}"; + } + } else { + $tunneltype = "type = transport"; + + if ((($ph1ent['authentication_method'] == "xauth_psk_server") || + ($ph1ent['authentication_method'] == "pre_shared_key")) && isset($ph1ent['mobile'])) { + $left_spec = "%any"; + } else { + $tmpsubnet = ipsec_get_phase1_src($ph1ent); + if ($leftsubnet_spec[$tmpsubnet]) + $leftsubnet_spec[$tmpsubnet] = $tmpsubnet; + } + + if (!isset($ph2ent['mobile'])) { + if (empty($rightsubnet_spec[$right_spec])) + $rightsubnet_spec[$right_spec] = $right_spec; + } + } + + if (isset($a_client['pfs_group'])) + $ph2ent['pfsgroup'] = $a_client['pfs_group']; + + if ($ph2ent['protocol'] == 'esp') { + if (is_array($ph2ent['encryption-algorithm-option'])) { + foreach ($ph2ent['encryption-algorithm-option'] as $ealg) { + $ealg_id = $ealg['name']; + $ealg_kl = $ealg['keylen']; + + if (!empty($ealg_kl) && $ealg_kl == "auto") { + if (empty($p2_ealgos) || !is_array($p2_ealgos)) + require("ipsec.inc"); + $key_hi = $p2_ealgos[$ealg_id]['keysel']['hi']; + $key_lo = $p2_ealgos[$ealg_id]['keysel']['lo']; + $key_step = $p2_ealgos[$ealg_id]['keysel']['step']; + /* XXX: in some cases where include ordering is suspect these variables + * are somehow 0 and we enter this loop forever and timeout after 900 + * seconds wrecking bootup */ + if ($key_hi != 0 and $key_lo !=0 and $key_step !=0) { + for ($keylen = $key_hi; $keylen >= $key_lo; $keylen -= $key_step) { + if (!empty($ph2ent['hash-algorithm-option']) && is_array($ph2ent['hash-algorithm-option'])) { + foreach ($ph2ent['hash-algorithm-option'] as $halgo) { + $halgo = str_replace('hmac_', '', $halgo); + $tmpealgo = "{$ealg_id}{$keylen}-{$halgo}"; + $modp = vpn_ipsec_convert_to_modp($ph2ent['pfsgroup']); + if (!empty($modp)) + $tmpealgo .= "-{$modp}"; + $ealgoESPsp2arr[] = $tmpealgo; + } + } else { + $tmpealgo = "{$ealg_id}{$keylen}"; + $modp = vpn_ipsec_convert_to_modp($ph2ent['pfsgroup']); + if (!empty($modp)) + $tmpealgo .= "-{$modp}"; + $ealgoESPsp2arr[] = $tmpealgo; + } + } + } + } else { + if (!empty($ph2ent['hash-algorithm-option']) && is_array($ph2ent['hash-algorithm-option'])) { + foreach ($ph2ent['hash-algorithm-option'] as $halgo) { + $halgo = str_replace('hmac_', '', $halgo); + $tmpealgo = "{$ealg_id}{$ealg_kl}-{$halgo}"; + $modp = vpn_ipsec_convert_to_modp($ph2ent['pfsgroup']); + if (!empty($modp)) + $tmpealgo .= "-{$modp}"; + $ealgoESPsp2arr[] = $tmpealgo; + } + } else { + $tmpealgo = "{$ealg_id}{$ealg_kl}"; + $modp = vpn_ipsec_convert_to_modp($ph2ent['pfsgroup']); + if (!empty($modp)) + $tmpealgo .= "-{$modp}"; + $ealgoESPsp2arr[] = $tmpealgo; + } + } + } + } + } else if ($ph2ent['protocol'] == 'ah') { + if (!empty($ph2ent['hash-algorithm-option']) && is_array($ph2ent['hash-algorithm-option'])) { + $modp = vpn_ipsec_convert_to_modp($ph2ent['pfsgroup']); + foreach ($ph2ent['hash-algorithm-option'] as $tmpAHalgo) { + $tmpAHalgo = str_replace('hmac_', '', $tmpAHalgo); + if (!empty($modp)) + $tmpAHalgo = "-{$modp}"; + $ealgoAHsp2arr[] = $tmpAHalgo; + } + } + } + + + if (!empty($ph2ent['lifetime'])) { + if ($ipseclifetime == 0 || intval($ipseclifetime) > intval($ph2ent['lifetime'])) + $ipseclifetime = intval($ph2ent['lifetime']); + } + } + } + + $ipsecconf .=<< 0) + $ipsecconf .= "\tlifetime = {$ipseclifetime}s\n"; + if (!empty($rightsourceip)) + $ipsecconf .= "{$rightsourceip}"; + if (!empty($rightsubnet_spec)) + $ipsecconf .= "\trightsubnet = " . join(",", $rightsubnet_spec) . "\n"; + if (!empty($leftsubnet_spec)) + $ipsecconf .= "\tleftsubnet = " . join(",", $leftsubnet_spec) . "\n"; + if (!empty($ealgosp1)) + $ipsecconf .= "\t{$ealgosp1}\n"; + if (!empty($ealgoAHsp2arr)) + $ipsecconf .= "\tah = " . join(',', $ealgoAHsp2arr) . "!\n"; + if (!empty($ealgoESPsp2arr)) { + file_put_contents("/var/etc/ipsec/dump_test", print_r($ealgoESPsp2arr, true)); + $ipsecconf .= "\tesp = " . join(',', $ealgoESPsp2arr) . "!\n"; + } + if (!empty($authentication)) + $ipsecconf .= "\t{$authentication}\n"; + if (!empty($peerid_spec)) + $ipsecconf .= "\trightid = {$peerid_spec}\n"; + } + } + } + @file_put_contents("{$g['varetc_path']}/ipsec/ipsec.conf", $ipsecconf); + unset($ipsecconf); + /* end ipsec.conf */ + + /* mange process */ + if (isvalidpid("{$g['varrun_path']}/charon.pid")) { + /* Read secrets */ + mwexec("/usr/local/sbin/ipsec rereadall", false); + /* Update configuration changes */ + mwexec("/usr/local/sbin/ipsec reload", false); + } else { + mwexec("/usr/local/sbin/ipsec start", false); + } + + if ($natfilterrules == true) + filter_configure(); + /* start filterdns, if necessary */ + if (count($filterdns_list) > 0) { + $interval = 60; + if (!empty($ipseccfg['dns-interval']) && is_numeric($ipseccfg['dns-interval'])) + $interval = $ipseccfg['dns-interval']; + + $hostnames = ""; + array_unique($filterdns_list); + foreach ($filterdns_list as $hostname) + $hostnames .= "cmd {$hostname} '/usr/local/sbin/pfSctl -c \"service reload ipsecdns\"'\n"; + file_put_contents("{$g['varetc_path']}/ipsec/filterdns-ipsec.hosts", $hostnames); + unset($hostnames); + + if (isvalidpid("{$g['varrun_path']}/filterdns-ipsec.pid")) + sigkillbypid("{$g['varrun_path']}/filterdns-ipsec.pid", "HUP"); + else { + mwexec("/usr/local/sbin/filterdns -p {$g['varrun_path']}/filterdns-ipsec.pid -i {$interval} -c {$g['varetc_path']}/ipsec/filterdns-ipsec.hosts -d 1"); + } + } else { + killbypid("{$g['varrun_path']}/filterdns-ipsec.pid"); + @unlink("{$g['varrun_path']}/filterdns-ipsec.pid"); + } + + if ($g['booting']) + echo "done\n"; + + return count($filterdns_list); +} + +/* + * Forcefully restart IPsec + * This is required for when dynamic interfaces reload + * For all other occasions the normal vpn_ipsec_configure() + * will gracefully reload the settings without restarting + */ +function vpn_ipsec_force_reload($interface = "") { + global $g, $config; + + $ipseccfg = $config['ipsec']; + + if (!empty($interface) && is_array($ipseccfg['phase1'])) { + $found = false; + foreach ($ipseccfg['phase1'] as $ipsec) { + if (!isset($ipsec['disabled']) && ($ipsec['interface'] == $interface)) { + $found = true; + break; + } + } + if (!$found) { + log_error(sprintf(gettext("Ignoring IPsec reload since there are no tunnels on interface %s"), $interface)); + return; + } + } + + /* if ipsec is enabled, start up again */ + if (isset($ipseccfg['enable'])) { + log_error(gettext("Forcefully reloading IPsec")); + vpn_ipsec_configure(); + } +} + +/* master setup for vpn (mpd) */ +function vpn_setup() { + global $g; + + if ($g['platform'] == 'jail') + return; + + /* start pptpd */ + vpn_pptpd_configure(); + + /* start pppoe server */ + vpn_pppoes_configure(); + + /* setup l2tp */ + vpn_l2tp_configure(); +} + +function vpn_netgraph_support() { + $iflist = get_configured_interface_list(); + foreach ($iflist as $iface) { + $realif = get_real_interface($iface); + /* Get support for netgraph(4) from the nic */ + $ifinfo = pfSense_get_interface_addresses($realif); + if (!empty($ifinfo) && in_array($ifinfo['iftype'], array("ether", "vlan", "bridge"))) + pfSense_ngctl_attach(".", $realif); + } +} + +function vpn_pptpd_configure() { + global $config, $g; + + $syscfg = $config['system']; + $pptpdcfg = $config['pptpd']; + + if ($g['booting']) { + if (!$pptpdcfg['mode'] || ($pptpdcfg['mode'] == "off")) + return 0; + + echo gettext("Configuring PPTP VPN service... "); + } else { + /* kill mpd */ + killbypid("{$g['varrun_path']}/pptp-vpn.pid"); + + /* wait for process to die */ + sleep(3); + + if (is_process_running("mpd -b")) { + killbypid("{$g['varrun_path']}/pptp-vpn.pid"); + log_error(gettext("Could not kill mpd within 3 seconds. Trying again.")); + } + + /* remove mpd.conf, if it exists */ + unlink_if_exists("{$g['varetc_path']}/pptp-vpn/mpd.conf"); + unlink_if_exists("{$g['varetc_path']}/pptp-vpn/mpd.links"); + unlink_if_exists("{$g['varetc_path']}/pptp-vpn/mpd.secret"); + } + + if (empty($pptpdcfg['n_pptp_units'])) { + log_error("Something wrong in the PPTPd configuration. Preventing starting the daemon because issues would arise."); + return; + } + + /* make sure pptp-vpn directory exists */ + if (!file_exists("{$g['varetc_path']}/pptp-vpn")) + mkdir("{$g['varetc_path']}/pptp-vpn"); + + switch ($pptpdcfg['mode']) { + case 'server' : + /* write mpd.conf */ + $fd = fopen("{$g['varetc_path']}/pptp-vpn/mpd.conf", "w"); + if (!$fd) { + printf(gettext("Error: cannot open mpd.conf in vpn_pptpd_configure().") . "\n"); + return 1; + } + + $mpdconf = << 1) ? $pptpdcfg['radius']['server']['port'] : 1812; + $acctport = $authport + 1; + $mpdconf .=<< 1) ? $pptpdcfg['radius']['server2']['port'] : 1812; + $acctport = $authport + 1; + $mpdconf .=<< diff --git a/usr/etc/inc/vslb.inc b/usr/etc/inc/vslb.inc new file mode 100644 index 000000000..49089a242 --- /dev/null +++ b/usr/etc/inc/vslb.inc @@ -0,0 +1,560 @@ +conf = $config; + } + + public function p() { + return "check {$this->get('proto')}"; + } + private function get($var) { + return isset($this->$var) ? $this->$var : ""; + } + protected function config($element) { + return isset($this->conf[$element]) ? $this->conf[$element] : ""; + } +} + +class TCPMonitor extends Monitor { + protected $proto = 'tcp'; +} + +class SSLMonitor extends Monitor { + protected $proto = 'ssl'; +} + +class ICMPMonitor extends Monitor { + protected $proto = 'icmp'; +} + +class HTTPMonitor extends Monitor { + protected $proto = 'http'; + function __construct($config) { + parent::__construct($config); + } + public function p() { + $method = ($this->code() != "") ? $this->code() : $this->digest(); + return "check {$this->proto} {$this->path()} {$this->host()} {$method}"; + } + + private function path() { + return $this->config('path') != "" ? "'{$this->config('path')}'" : ""; + } + + private function host() { + return $this->config('host') != "" ? "host {$this->config('host')}" : ""; + } + + private function code() { + return $this->config('code') != "" ? "code {$this->config('code')}" : ""; + } + + private function digest() { + return $this->config('digest') != "" ? "digest {$this->config('digest')}" : ""; + } +} + +class HTTPSMonitor extends HTTPMonitor { + protected $proto = 'https'; +} + +class SendMonitor extends Monitor { + private $proto = 'send'; + function __construct($config) { + parent::__construct($config); + } + public function p() { + return "check {$this->proto} {$this->data()} expect {$this->pattern()} {$this->ssl()}"; + } + + + private function data() { + return $this->config('send') != "" ? "\"{$this->config('send')}\"" : "\"\""; + } + + private function pattern() { + return $this->config('expect') != "" ? "\"{$this->config('expect')}\"" : "\"\""; + } + + private function ssl() { + return $this->config('ssl') == true ? "ssl" : ""; + } +} + +function echo_lbaction($action) { + global $config; + + // Index actions by name + $actions_a = array(); + for ($i=0; isset($config['load_balancer']['lbaction'][$i]); $i++) + $actions_a[$config['load_balancer']['lbaction'][$i]['name']] = $config['load_balancer']['lbaction'][$i]; + + $ret = ""; + $ret .= "{$actions_a[$action]['direction']} {$actions_a[$action]['type']} {$actions_a[$action]['action']}"; + switch($actions_a[$action]['action']) { + case 'append': + $ret .= " \"{$actions_a[$action]['options']['value']}\" to \"{$actions_a[$action]['options']['akey']}\""; + break; + case 'change': + $ret .= " \"{$actions_a[$action]['options']['akey']}\" to \"{$actions_a[$action]['options']['value']}\""; + break; + case 'expect': + $ret .= " \"{$actions_a[$action]['options']['value']}\" from \"{$actions_a[$action]['options']['akey']}\""; + break; + case 'filter': + $ret .= " \"{$actions_a[$action]['options']['value']}\" from \"{$actions_a[$action]['options']['akey']}\""; + break; + case 'hash': + $ret .= " \"{$actions_a[$action]['options']['akey']}\""; + break; + case 'log': + $ret .= " \"{$actions_a[$action]['options']['akey']}\""; + break; + } + return $ret; +} + +function relayd_configure($kill_first=false) { + global $config, $g; + + // have to do this until every call to filter.inc is + // require_once() instead of require(). + if (!function_exists('filter_expand_alias_array')) { + require_once("filter.inc"); + } + + $vs_a = $config['load_balancer']['virtual_server']; + $pool_a = $config['load_balancer']['lbpool']; + $protocol_a = $config['load_balancer']['lbprotocol']; + $setting = $config['load_balancer']['setting']; + + $check_a = array(); + + foreach ((array)$config['load_balancer']['monitor_type'] as $type) { + switch($type['type']) { + case 'icmp': + $mon = new ICMPMonitor($type['options']); + break; + case 'tcp': + $mon = new TCPMonitor($type['options']); + break; + case 'http': + $mon = new HTTPMonitor($type['options']); + break; + case 'https': + $mon = new HTTPSMonitor($type['options']); + break; + case 'send': + $mon = new SendMonitor($type['options']); + break; + } + if($mon) { + $check_a[$type['name']] = $mon->p(); + } + } + + + $fd = fopen("{$g['varetc_path']}/relayd.conf", "w"); + $conf .= "log updates \n"; + + /* Global timeout, interval and prefork settings + if not specified by the user: + - use a 1000 ms timeout value as in pfsense 2.0.1 and above + - leave interval and prefork empty, relayd will use its default values */ + + if (isset($setting['timeout']) && !empty($setting['timeout'])) { + $conf .= "timeout ".$setting['timeout']." \n"; + } else { + $conf .= "timeout 1000 \n"; + } + + if (isset($setting['interval']) && !empty($setting['interval'])) { + $conf .= "interval ".$setting['interval']." \n"; + } + + if (isset($setting['prefork']) && !empty($setting['prefork'])) { + $conf .= "prefork ".$setting['prefork']." \n"; + } + + /* reindex pools by name as we loop through the pools array */ + $pools = array(); + /* Virtual server pools */ + if(is_array($pool_a)) { + for ($i = 0; isset($pool_a[$i]); $i++) { + if(is_array($pool_a[$i]['servers'])) { + if (!empty($pool_a[$i]['retry'])) { + $retrytext = " retry {$pool_a[$i]['retry']}"; + } else { + $retrytext = ""; + } + $conf .= "table <{$pool_a[$i]['name']}> {\n"; + foreach ($pool_a[$i]['servers'] as $server) { + if (is_subnetv4($server)) { + foreach (subnetv4_expand($server) as $ip) { + $conf .= "\t{$ip}{$retrytext}\n"; + } + } + else { + $conf .= "\t{$server}{$retrytext}\n"; + } + } + $conf .= "}\n"; + /* Index by name for easier fetching when we loop through the virtual servers */ + $pools[$pool_a[$i]['name']] = $pool_a[$i]; + } + } + } +// if(is_array($protocol_a)) { +// for ($i = 0; isset($protocol_a[$i]); $i++) { +// $proto = "{$protocol_a[$i]['type']} protocol \"{$protocol_a[$i]['name']}\" {\n"; +// if(is_array($protocol_a[$i]['lbaction'])) { +// if($protocol_a[$i]['lbaction'][0] == "") { +// continue; +// } +// for ($a = 0; isset($protocol_a[$i]['lbaction'][$a]); $a++) { +// $proto .= " " . echo_lbaction($protocol_a[$i]['lbaction'][$a]) . "\n"; +// } +// } +// $proto .= "}\n"; +// $conf .= $proto; +// } +// } + + $conf .= "dns protocol \"dnsproto\" {\n"; + $conf .= "\t" . "tcp { nodelay, sack, socket buffer 1024, backlog 1000 }\n"; + $conf .= "}\n"; + + if(is_array($vs_a)) { + for ($i = 0; isset($vs_a[$i]); $i++) { + + $append_port_to_name = false; + if (is_alias($pools[$vs_a[$i]['poolname']]['port'])) { + $dest_port_array = filter_expand_alias_array($pools[$vs_a[$i]['poolname']]['port']); + $append_port_to_name = true; + } + else { + $dest_port_array = array($pools[$vs_a[$i]['poolname']]['port']); + } + if (is_alias($vs_a[$i]['port'])) { + $src_port_array = filter_expand_alias_array($vs_a[$i]['port']); + $append_port_to_name = true; + } + else if ($vs_a[$i]['port']) { + $src_port_array = array($vs_a[$i]['port']); + } + else { + $src_port_array = $dest_port_array; + } + + $append_ip_to_name = false; + if (is_alias($vs_a[$i]['ipaddr'])) { + $ip_list = array(); + foreach (filter_expand_alias_array($vs_a[$i]['ipaddr']) as $item) { + log_error("item is $item"); + if (is_subnetv4($item)) { + $ip_list = array_merge($ip_list, subnetv4_expand($item)); + } + else { + $ip_list[] = $item; + } + } + $append_ip_to_name = true; + } + else if (is_subnetv4($vs_a[$i]['ipaddr'])) { + $ip_list = subnetv4_expand($vs_a[$i]['ipaddr']); + $append_ip_to_name = true; + } + else { + $ip_list = array($vs_a[$i]['ipaddr']); + } + + for ($j = 0; $j < count($ip_list); $j += 1) { + $ip = $ip_list[$j]; + for ($k = 0; $k < count($src_port_array) && $k < count($dest_port_array); $k += 1) { + $src_port = $src_port_array[$k]; + $dest_port = $dest_port_array[$k]; + + $name = $vs_a[$i]['name']; + if ($append_ip_to_name) { + $name .= "_" . $j; + } + if ($append_port_to_name) { + $name .= "_" . $src_port; + } + + if (($vs_a[$i]['mode'] == 'relay') || ($vs_a[$i]['relay_protocol'] == 'dns')) { + $conf .= "relay \"{$name}\" {\n"; + $conf .= " listen on {$ip} port {$src_port}\n"; + + if ($vs_a[$i]['relay_protocol'] == "dns") { + $conf .= " protocol \"dnsproto\"\n"; + } else { + $conf .= " protocol \"{$vs_a[$i]['relay_protocol']}\"\n"; + } + $lbmode = ""; + if ( $pools[$vs_a[$i]['poolname']]['mode'] == "loadbalance" ) { + $lbmode = "mode loadbalance"; + } + + $conf .= " forward to <{$vs_a[$i]['poolname']}> port {$dest_port} {$lbmode} {$check_a[$pools[$vs_a[$i]['poolname']]['monitor']]} \n"; + + if (isset($vs_a[$i]['sitedown']) && strlen($vs_a[$i]['sitedown']) > 0 && ($vs_a[$i]['relay_protocol'] != 'dns')) + $conf .= " forward to <{$vs_a[$i]['sitedown']}> port {$dest_port} {$lbmode} {$check_a[$pools[$vs_a[$i]['poolname']]['monitor']]} \n"; + $conf .= "}\n"; + } else { + $conf .= "redirect \"{$name}\" {\n"; + $conf .= " listen on {$ip} port {$src_port}\n"; + $conf .= " forward to <{$vs_a[$i]['poolname']}> port {$dest_port} {$check_a[$pools[$vs_a[$i]['poolname']]['monitor']]} \n"; + + if (isset($config['system']['lb_use_sticky'])) + $conf .= " sticky-address\n"; + + /* sitedown MUST use the same port as the primary pool - sucks, but it's a relayd thing */ + if (isset($vs_a[$i]['sitedown']) && strlen($vs_a[$i]['sitedown']) > 0 && ($vs_a[$i]['relay_protocol'] != 'dns')) + $conf .= " forward to <{$vs_a[$i]['sitedown']}> port {$dest_port} {$check_a[$pools[$vs_a[$i]['sitedown']]['monitor']]} \n"; + + $conf .= "}\n"; + } + } + } + } + } + fwrite($fd, $conf); + fclose($fd); + + if (is_process_running('relayd')) { + if (! empty($vs_a)) { + if ($kill_first) { + mwexec('pkill relayd'); + /* Remove all active relayd anchors now that relayd is no longer running. */ + cleanup_lb_anchor("*"); + mwexec("/usr/local/sbin/relayd -f {$g['varetc_path']}/relayd.conf"); + } else { + // it's running and there is a config, just reload + mwexec("/usr/local/sbin/relayctl reload"); + } + } else { + /* + * XXX: Something breaks our control connection with relayd + * and makes 'relayctl stop' not work + * rule reloads are the current suspect + * mwexec('/usr/local/sbin/relayctl stop'); + * returns "command failed" + */ + mwexec('pkill relayd'); + /* Remove all active relayd anchors now that relayd is no longer running. */ + cleanup_lb_anchor("*"); + } + } else { + if (! empty($vs_a)) { + // not running and there is a config, start it + /* Remove all active relayd anchors so it can start fresh. */ + cleanup_lb_anchor("*"); + mwexec("/usr/local/sbin/relayd -f {$g['varetc_path']}/relayd.conf"); + } + } +} + +function get_lb_redirects() { +/* +# relayctl show summary +Id Type Name Avlblty Status +1 redirect testvs2 active +5 table test2:80 active (3 hosts up) +11 host 192.168.1.2 91.55% up +10 host 192.168.1.3 100.00% up +9 host 192.168.1.4 88.73% up +3 table test:80 active (1 hosts up) +7 host 192.168.1.2 66.20% down +6 host 192.168.1.3 97.18% up +0 redirect testvs active +3 table test:80 active (1 hosts up) +7 host 192.168.1.2 66.20% down +6 host 192.168.1.3 97.18% up +4 table testvs-sitedown:80 active (1 hosts up) +8 host 192.168.1.4 84.51% up +# relayctl show redirects +Id Type Name Avlblty Status +1 redirect testvs2 active +0 redirect testvs active +# relayctl show redirects +Id Type Name Avlblty Status +1 redirect testvs2 active + total: 2 sessions + last: 2/60s 2/h 2/d sessions + average: 1/60s 0/h 0/d sessions +0 redirect testvs active +*/ + $rdr_a = array(); + exec('/usr/local/sbin/relayctl show redirects 2>&1', $rdr_a); + $relay_a = array(); + exec('/usr/local/sbin/relayctl show relays 2>&1', $relay_a); + $vs = array(); + $cur_entry = ""; + for ($i = 0; isset($rdr_a[$i]); $i++) { + $line = $rdr_a[$i]; + if (preg_match("/^[0-9]+/", $line)) { + $regs = array(); + if($x = preg_match("/^[0-9]+\s+redirect\s+([^\s]+)\s+([^\s]+)/", $line, $regs)) { + $cur_entry = trim($regs[1]); + $vs[trim($regs[1])] = array(); + $vs[trim($regs[1])]['status'] = trim($regs[2]); + } + } elseif (($x = preg_match("/^\s+total:\s(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['total'] = trim($regs[1]); + } elseif (($x = preg_match("/^\s+last:\s(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['last'] = trim($regs[1]); + } elseif (($x = preg_match("/^\s+average:(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['average'] = trim($regs[1]); + } + } + $cur_entry = ""; + for ($i = 0; isset($relay_a[$i]); $i++) { + $line = $relay_a[$i]; + if (preg_match("/^[0-9]+/", $line)) { + $regs = array(); + if($x = preg_match("/^[0-9]+\s+relay\s+([^\s]+)\s+([^\s]+)/", $line, $regs)) { + $cur_entry = trim($regs[1]); + $vs[trim($regs[1])] = array(); + $vs[trim($regs[1])]['status'] = trim($regs[2]); + } + } elseif (($x = preg_match("/^\s+total:\s(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['total'] = trim($regs[1]); + } elseif (($x = preg_match("/^\s+last:\s(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['last'] = trim($regs[1]); + } elseif (($x = preg_match("/^\s+average:(.*)\ssessions/", $line, $regs)) && !empty($cur_entry)) { + $vs[$cur_entry]['average'] = trim($regs[1]); + } + } + return $vs; +} + +function get_lb_summary() { + $relayctl = array(); + exec('/usr/local/sbin/relayctl show summary 2>&1', $relayctl); + $relay_hosts=Array(); + foreach( (array) $relayctl as $line) { + $t = explode("\t", $line); + switch (trim($t[1])) { + case "table": + $curpool=trim($t[2]); + break; + case "host": + $curhost=trim($t[2]); + $relay_hosts[$curpool][$curhost]['avail']=trim($t[3]); + $relay_hosts[$curpool][$curhost]['state']=trim($t[4]); + break; + } + } + return $relay_hosts; +} + +/* Get a list of all relayd virtual server anchors */ +function get_lb_anchors() { + /* NOTE: These names come back prepended with "relayd/" e.g. "relayd/MyVSName" */ + return explode("\n", trim(`/sbin/pfctl -sA -a relayd | /usr/bin/awk '{print $1;}'`)); +} + +/* Remove NAT rules from a relayd anchor that is no longer in use. + $anchorname can either be * to clear all anchors or a specific anchor name.*/ +function cleanup_lb_anchor($anchorname = "*") { + $lbanchors = get_lb_anchors(); + foreach ($lbanchors as $lba) { + if (($anchorname == "*") || ($lba == "relayd/{$anchorname}")) { + /* Flush both the NAT and the Table for the anchor, so it will be completely removed by pf. */ + mwexec("/sbin/pfctl -a " . escapeshellarg($lba) . " -F nat"); + mwexec("/sbin/pfctl -a " . escapeshellarg($lba) . " -F Tables"); + } + } +} + +/* Mark an anchor for later cleanup. This will allow us to remove an old VS name */ +function cleanup_lb_mark_anchor($name) { + global $g; + /* Nothing to do! */ + if (empty($name)) + return; + $filename = "{$g['tmp_path']}/relayd_anchors_remove"; + $cleanup_anchors = array(); + /* Read in any currently unapplied name changes */ + if (file_exists($filename)) + $cleanup_anchors = explode("\n", file_get_contents($filename)); + /* Only add the anchor to the list if it's not already there. */ + if (!in_array($name, $cleanup_anchors)) + $cleanup_anchors[] = $name; + file_put_contents($filename, implode("\n", $cleanup_anchors)); +} + +/* Cleanup relayd anchors that have been marked for cleanup. */ +function cleanup_lb_marked() { + global $g, $config; + $filename = "{$g['tmp_path']}/relayd_anchors_remove"; + $cleanup_anchors = array(); + /* Nothing to do! */ + if (!file_exists($filename)) { + return; + } else { + $cleanup_anchors = explode("\n", file_get_contents($filename)); + /* Nothing to do! */ + if (empty($cleanup_anchors)) + return; + } + + /* Load current names so we can make sure we don't remove an anchor that is still in use. */ + $vs_a = $config['load_balancer']['virtual_server']; + $active_vsnames = array(); + if(is_array($vs_a)) { + foreach ($vs_a as $vs) { + $active_vsnames[] = $vs['name']; + } + } + + foreach ($cleanup_anchors as $anchor) { + /* Only cleanup an anchor if it is not still active. */ + if (!in_array($anchor, $active_vsnames)) { + cleanup_lb_anchor($anchor); + } + } + unlink_if_exists($filename); +} + +?> diff --git a/usr/etc/inc/wizardapp.inc b/usr/etc/inc/wizardapp.inc new file mode 100644 index 000000000..53bd7ac30 --- /dev/null +++ b/usr/etc/inc/wizardapp.inc @@ -0,0 +1,663 @@ + diff --git a/usr/etc/inc/xmlparse.inc b/usr/etc/inc/xmlparse.inc new file mode 100644 index 000000000..3b3271984 --- /dev/null +++ b/usr/etc/inc/xmlparse.inc @@ -0,0 +1,326 @@ +. + 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. +*/ + +/* The following items will be treated as arrays in config.xml */ +function listtags() { + /* + * Please keep this list alpha sorted and no longer than 80 characters + * I know it's a pain, but it's a pain to find stuff too if it's not + */ + $ret = array( + 'acls', 'alias', 'aliasurl', 'allowedip', 'allowedhostname', 'authserver', + 'bridged', 'build_port_path', + 'ca', 'cacert', 'cert', 'crl', 'clone', 'config', 'container', 'columnitem', + 'depends_on_package', 'disk', 'dnsserver', 'dnsupdate', 'domainoverrides', 'dyndns', + 'earlyshellcmd', 'element', 'encryption-algorithm-option', + 'field', 'fieldname', + 'gateway_item', 'gateway_group', 'gif', 'gre', 'group', + 'hash-algorithm-option', 'hosts', 'member', 'ifgroupentry', 'igmpentry', 'interface_array', 'item', 'key', + 'lagg', 'lbaction', 'lbpool', 'l7rules', 'lbprotocol', + 'member', 'menu', 'tab', 'mobilekey', 'monitor_type', 'mount', + 'npt', 'ntpserver', + 'onetoone', 'openvpn-server', 'openvpn-client', 'openvpn-csc', 'option', + 'package', 'passthrumac', 'phase1', 'phase2', 'ppp', 'pppoe', 'priv', 'proxyarpnet', 'pool', + 'qinqentry', 'queue', + 'pages', 'pipe', 'radnsserver', 'roll', 'route', 'row', 'rrddatafile', 'rule', + 'schedule', 'service', 'servernat', 'servers', + 'serversdisabled', 'shellcmd', 'staticmap', 'subqueue', + 'timerange', 'tunnel', 'user', 'vip', 'virtual_server', 'vlan', + 'winsserver', 'wolentry', 'widget' + ); + return array_flip($ret); +} + +/* Package XML tags that should be treat as a list not as a traditional array */ +function listtags_pkg() { + $ret = array('build_port_path', 'depends_on_package', 'onetoone', 'queue', 'rule', 'servernat', 'alias', 'additional_files_needed', 'tab', 'template', 'menu', 'rowhelperfield', 'service', 'step', 'package', 'columnitem', 'option', 'item', 'field', 'package', 'file'); + + return array_flip($ret); +} + +function startElement($parser, $name, $attrs) { + global $parsedcfg, $depth, $curpath, $havedata, $listtags; + + array_push($curpath, strtolower($name)); + + $ptr =& $parsedcfg; + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + } + + /* is it an element that belongs to a list? */ + if (isset($listtags[strtolower($name)])) { + + /* is there an array already? */ + if (!is_array($ptr)) { + /* make an array */ + $ptr = array(); + } + + array_push($curpath, count($ptr)); + + } else if (isset($ptr)) { + /* multiple entries not allowed for this element, bail out */ + die(sprintf(gettext('XML error: %1$s at line %2$d cannot occur more than once') . "\n", + $name, + xml_get_current_line_number($parser))); + } + + $depth++; + $havedata = $depth; +} + +function endElement($parser, $name) { + global $depth, $curpath, $parsedcfg, $havedata, $listtags; + + if ($havedata == $depth) { + $ptr =& $parsedcfg; + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + } + $ptr = ""; + } + + array_pop($curpath); + + if (isset($listtags[strtolower($name)])) + array_pop($curpath); + + $depth--; +} + +function cData($parser, $data) { + global $depth, $curpath, $parsedcfg, $havedata; + + $data = trim($data, "\t\n\r"); + + if ($data != "") { + $ptr =& $parsedcfg; + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + } + + if (is_string($ptr)) { + $ptr .= html_entity_decode($data); + } else { + if (trim($data, " ") != "") { + $ptr = html_entity_decode($data); + $havedata++; + } + } + } +} + +function parse_xml_config($cffile, $rootobj, $isstring = "false") { + global $listtags; + $listtags = listtags(); + if (isset($GLOBALS['custom_listtags'])) { + foreach($GLOBALS['custom_listtags'] as $tag) { + $listtags[$tag] = $tag; + } + } + return parse_xml_config_raw($cffile, $rootobj, $isstring); +} + +function parse_xml_config_pkg($cffile, $rootobj, $isstring = "false") { + global $listtags; + $listtags = listtags_pkg(); + if (isset($GLOBALS['custom_listtags_pkg'])) { + foreach($GLOBALS['custom_listtags_pkg'] as $tag) { + $listtags[$tag] = $tag; + } + } + $cfg =parse_xml_config_raw($cffile, $rootobj, $isstring); + if ($cfg == -1) + return array(); + + return $cfg; +} + +function parse_xml_config_raw($cffile, $rootobj, $isstring = "false") { + + global $depth, $curpath, $parsedcfg, $havedata, $listtags; + $parsedcfg = array(); + $curpath = array(); + $depth = 0; + $havedata = 0; + + $xml_parser = xml_parser_create(); + + xml_set_element_handler($xml_parser, "startElement", "endElement"); + xml_set_character_data_handler($xml_parser, "cdata"); + xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE, 1); + + if (!($fp = fopen($cffile, "r"))) { + log_error(gettext("Error: could not open XML input") . "\n"); + return -1; + } + + while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + log_error(sprintf(gettext('XML error: %1$s at line %2$d in %3$s') . "\n", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser), + $cffile)); + return -1; + } + } + xml_parser_free($xml_parser); + + if ($rootobj) { + if (!is_array($rootobj)) + $rootobj = array($rootobj); + foreach ($rootobj as $rootobj_name) + if ($parsedcfg[$rootobj_name]) + break; + + if (!$parsedcfg[$rootobj_name]) { + log_error(sprintf(gettext("XML error: no %s object found!") . "\n", implode(" or ", $rootobj))); + return -1; + } + return $parsedcfg[$rootobj_name]; + } else { + return $parsedcfg; + } +} + +function dump_xml_config_sub($arr, $indent) { + + global $listtags; + + $xmlconfig = ""; + + foreach ($arr as $ent => $val) { + if (is_array($val)) { + /* is it just a list of multiple values? */ + if (isset($listtags[strtolower($ent)])) { + foreach ($val as $cval) { + if (is_array($cval)) { + if (empty($cval)) { + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "<$ent/>\n"; + } else { + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "<$ent>\n"; + $xmlconfig .= dump_xml_config_sub($cval, $indent + 1); + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "\n"; + } + } else { + if($cval === false) continue; + $xmlconfig .= str_repeat("\t", $indent); + if((is_bool($cval) && $cval == true) || ($cval === "")) { + $xmlconfig .= "<$ent/>\n"; + } else if ((substr($ent, 0, 5) == "descr") + || (substr($ent, 0, 6) == "detail") + || (substr($ent, 0, 12) == "login_banner") + || (substr($ent, 0, 9) == "ldap_attr") + || (substr($ent, 0, 9) == "ldap_bind") + || (substr($ent, 0, 11) == "ldap_basedn") + || (substr($ent, 0, 18) == "ldap_authcn") + || (substr($ent, 0, 19) == "ldap_extended_query")) { + $xmlconfig .= "<$ent>\n"; + } else { + $xmlconfig .= "<$ent>" . htmlentities($cval) . "\n"; + } + } + } + } else if (empty($val)) { + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "<$ent/>\n"; + } else { + /* it's an array */ + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "<$ent>\n"; + $xmlconfig .= dump_xml_config_sub($val, $indent + 1); + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "\n"; + } + } else { + if ((is_bool($val) && ($val == true)) || ($val === "")) { + $xmlconfig .= str_repeat("\t", $indent); + $xmlconfig .= "<$ent/>\n"; + } else if (!is_bool($val)) { + $xmlconfig .= str_repeat("\t", $indent); + if ((substr($ent, 0, 5) == "descr") + || (substr($ent, 0, 6) == "detail") + || (substr($ent, 0, 12) == "login_banner") + || (substr($ent, 0, 9) == "ldap_attr") + || (substr($ent, 0, 9) == "ldap_bind") + || (substr($ent, 0, 11) == "ldap_basedn") + || (substr($ent, 0, 18) == "ldap_authcn") + || (substr($ent, 0, 19) == "ldap_extended_query")) + $xmlconfig .= "<$ent>\n"; + else + $xmlconfig .= "<$ent>" . htmlentities($val) . "\n"; + } + } + } + + return $xmlconfig; +} + +function dump_xml_config($arr, $rootobj) { + global $listtags; + $listtags = listtags(); + if (isset($GLOBALS['custom_listtags'])) { + foreach($GLOBALS['custom_listtags'] as $tag) { + $listtags[$tag] = $tag; + } + } + return dump_xml_config_raw($arr, $rootobj); +} + +function dump_xml_config_pkg($arr, $rootobj) { + global $listtags; + $listtags = listtags_pkg(); + if (isset($GLOBALS['custom_listtags_pkg'])) { + foreach($GLOBALS['custom_listtags_pkg'] as $tag) { + $listtags[$tag] = $tag; + } + } + return dump_xml_config_raw($arr, $rootobj); +} + +function dump_xml_config_raw($arr, $rootobj) { + + $xmlconfig = "\n"; + $xmlconfig .= "<$rootobj>\n"; + + $xmlconfig .= dump_xml_config_sub($arr, 1); + + $xmlconfig .= "\n"; + + return $xmlconfig; +} + +?> diff --git a/usr/etc/inc/xmlparse_attr.inc b/usr/etc/inc/xmlparse_attr.inc new file mode 100644 index 000000000..933caba69 --- /dev/null +++ b/usr/etc/inc/xmlparse_attr.inc @@ -0,0 +1,227 @@ +. + 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. +*/ + +/* The following items will be treated as arrays in regdomain.xml */ +function listtags_rd() { + $ret = explode(" ", + "band country flags freqband netband rd" + ); + return $ret; +} + +function startElement_attr($parser, $name, $attrs) { + global $parsedcfg, $depth, $curpath, $havedata, $listtags, $parsedattrs; + + array_push($curpath, strtolower($name)); + + $ptr =& $parsedcfg; + if (!empty($attrs)) { + $attrptr =& $parsedattrs; + $writeattrs = true; + } + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + if (isset($writeattrs)) + $attrptr =& $attrptr[$path]; + } + + /* is it an element that belongs to a list? */ + if (in_array(strtolower($name), $listtags)) { + + /* is there an array already? */ + if (!is_array($ptr)) { + /* make an array */ + $ptr = array(); + } + + array_push($curpath, count($ptr)); + + if (isset($writeattrs)) { + if (!is_array($attrptr)) + $attrptr = array(); + $attrptr[count($ptr)] = $attrs; + } + + } else if (isset($ptr)) { + /* multiple entries not allowed for this element, bail out */ + die(sprintf(gettext('XML error: %1$s at line %2$d cannot occur more than once') . "\n", + $name, + xml_get_current_line_number($parser))); + } else if (isset($writeattrs)) { + $attrptr = $attrs; + } + + $depth++; + $havedata = $depth; +} + +function endElement_attr($parser, $name) { + global $depth, $curpath, $parsedcfg, $havedata, $listtags; + + if ($havedata == $depth) { + $ptr =& $parsedcfg; + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + } + $ptr = ""; + } + + array_pop($curpath); + + if (in_array(strtolower($name), $listtags)) + array_pop($curpath); + + $depth--; +} + +function cData_attr($parser, $data) { + global $depth, $curpath, $parsedcfg, $havedata; + + $data = trim($data, "\t\n\r"); + + if ($data != "") { + $ptr =& $parsedcfg; + foreach ($curpath as $path) { + $ptr =& $ptr[$path]; + } + + if (is_string($ptr)) { + $ptr .= html_entity_decode($data); + } else { + if (trim($data, " ") != "") { + $ptr = html_entity_decode($data); + $havedata++; + } + } + } +} + +function parse_xml_regdomain(&$rdattributes, $rdfile = '', $rootobj = 'regulatory-data') { + global $g, $listtags; + + if (empty($rdfile)) + $rdfile = $g['etc_path'] . '/regdomain.xml'; + $listtags = listtags_rd(); + $parsed_xml = array(); + + if (file_exists($g['tmp_path'] . '/regdomain.cache')) { + $parsed_xml = unserialize(file_get_contents($g['tmp_path'] . '/regdomain.cache')); + if (!empty($parsed_xml)) { + $rdmain = $parsed_xml['main']; + $rdattributes = $parsed_xml['attributes']; + } + } + if (empty($parsed_xml) && file_exists($g['etc_path'] . '/regdomain.xml')) { + $rdmain = parse_xml_config_raw_attr($rdfile, $rootobj, $rdattributes); + + // unset parts that aren't used before making cache + foreach ($rdmain['regulatory-domains']['rd'] as $rdkey => $rdentry) { + if (isset($rdmain['regulatory-domains']['rd'][$rdkey]['netband'])) + unset($rdmain['regulatory-domains']['rd'][$rdkey]['netband']); + if (isset($rdattributes['regulatory-domains']['rd'][$rdkey]['netband'])) + unset($rdattributes['regulatory-domains']['rd'][$rdkey]['netband']); + } + if (isset($rdmain['shared-frequency-bands'])) + unset($rdmain['shared-frequency-bands']); + if (isset($rdattributes['shared-frequency-bands'])) + unset($rdattributes['shared-frequency-bands']); + + $parsed_xml = array('main' => $rdmain, 'attributes' => $rdattributes); + $rdcache = fopen($g['tmp_path'] . '/regdomain.cache', "w"); + fwrite($rdcache, serialize($parsed_xml)); + fclose($rdcache); + } + + return $rdmain; +} + +function parse_xml_config_raw_attr($cffile, $rootobj, &$parsed_attributes, $isstring = "false") { + + global $depth, $curpath, $parsedcfg, $havedata, $listtags, $parsedattrs; + $parsedcfg = array(); + $curpath = array(); + $depth = 0; + $havedata = 0; + + if (isset($parsed_attributes)) + $parsedattrs = array(); + + $xml_parser = xml_parser_create(); + + xml_set_element_handler($xml_parser, "startElement_attr", "endElement_attr"); + xml_set_character_data_handler($xml_parser, "cData_attr"); + xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE, 1); + + if (!($fp = fopen($cffile, "r"))) { + log_error(gettext("Error: could not open XML input") . "\n"); + if (isset($parsed_attributes)) { + $parsed_attributes = array(); + unset($parsedattrs); + } + return -1; + } + + while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + log_error(sprintf(gettext('XML error: %1$s at line %2$d') . "\n", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser))); + if (isset($parsed_attributes)) { + $parsed_attributes = array(); + unset($parsedattrs); + } + return -1; + } + } + xml_parser_free($xml_parser); + + if (!$parsedcfg[$rootobj]) { + log_error(sprintf(gettext("XML error: no %s object found!") . "\n", $rootobj)); + if (isset($parsed_attributes)) { + $parsed_attributes = array(); + unset($parsedattrs); + } + return -1; + } + + if (isset($parsed_attributes)) { + if ($parsedattrs[$rootobj]) + $parsed_attributes = $parsedattrs[$rootobj]; + unset($parsedattrs); + } + + return $parsedcfg[$rootobj]; +} + +?> diff --git a/usr/etc/inc/xmlreader.inc b/usr/etc/inc/xmlreader.inc new file mode 100644 index 000000000..6da34e1bb --- /dev/null +++ b/usr/etc/inc/xmlreader.inc @@ -0,0 +1,266 @@ +. + 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. +*/ + +/* + pfSense_MODULE: utils +*/ + +/* The following items will be treated as arrays in config.xml */ +function listtags() { + /* + * Please keep this list alpha sorted and no longer than 80 characters + * I know it's a pain, but it's a pain to find stuff too if it's not + */ + $ret = array( + 'acls', 'alias', 'aliasurl', 'allowedip', 'allowedhostname', 'authserver', + 'bridged', 'build_port_path', + 'ca', 'cacert', 'cert', 'crl', 'clone', 'config', 'container', 'columnitem', + 'depends_on_package', 'disk', 'dnsserver', 'dnsupdate', 'domainoverrides', 'dyndns', + 'earlyshellcmd', 'element', 'encryption-algorithm-option', + 'field', 'fieldname', + 'gateway_item', 'gateway_group', 'gif', 'gre', 'group', + 'hash-algorithm-option', 'hosts', 'member', 'ifgroupentry', 'igmpentry', 'interface_array', 'item', 'key', + 'lagg', 'lbaction', 'lbpool', 'l7rules', 'lbprotocol', + 'member', 'menu', 'tab', 'mobilekey', 'monitor_type', 'mount', + 'npt', 'ntpserver', + 'onetoone', 'openvpn-server', 'openvpn-client', 'openvpn-csc', 'option', + 'package', 'passthrumac', 'phase1', 'phase2', 'ppp', 'pppoe', 'priv', 'proxyarpnet', 'pool', + 'qinqentry', 'queue', + 'pages', 'pipe', 'radnsserver', 'roll', 'route', 'row', 'rrddatafile', 'rule', + 'schedule', 'service', 'servernat', 'servers', + 'serversdisabled', 'shellcmd', 'staticmap', 'subqueue', + 'timerange', 'tunnel', 'user', 'vip', 'virtual_server', 'vlan', + 'winsserver', 'wolentry', 'widget' + ); + return array_flip($ret); +} + +/* Package XML tags that should be treat as a list not as a traditional array */ +function listtags_pkg() { + $ret = array('depends_on_package', 'onetoone', 'queue', 'rule', 'servernat', 'alias', 'additional_files_needed', 'tab', 'template', 'menu', 'rowhelperfield', 'service', 'step', 'package', 'columnitem', 'option', 'item', 'field', 'package', 'file'); + + return array_flip($ret); +} + +function add_elements(&$cfgarray, &$parser) { + global $listtags; + + while ($parser->read()) { + switch ($parser->nodeType) { + case XMLReader::WHITESPACE: + case XMLReader::SIGNIFICANT_WHITESPACE: + break; + case XMLReader::ELEMENT: + if (isset($listtags[strtolower($parser->name)])) { + $cfgref =& $cfgarray[$parser->name][count($cfgarray[$parser->name])]; + if (!$parser->isEmptyElement) { + add_elements($cfgref, $parser); + } else + $cfgref = array(); + + } else { + if (isset($cfgarray[$parser->name]) && (!is_array($cfgarray[$parser->name]) || !isset($cfgarray[$parser->name][0]))) { + $nodebkp = $cfgarray[$parser->name]; + $cfgarray[$parser->name] = array(); + $cfgarray[$parser->name][] = $nodebkp; + $cfgref =& $cfgarray[$parser->name][0]; + unset($nodebkp); + } else + $cfgref =& $cfgarray[$parser->name]; + + if ($parser->isEmptyElement) { + if (is_array($cfgref)) + $cfgref[] = array(); + else + $cfgref = ""; + } else { + if (is_array($cfgref)) { + $cfgref =& $cfgarray[$parser->name][count($cfgarray[$parser->name])]; + add_elements($cfgref, $parser); + } else + add_elements($cfgref, $parser); + } + } + + $i = 0; + while ($parser->moveToAttributeNo($i)) { + $cfgref[$parser->name] = $parser->value; + $i++; + } + break; + case XMLReader::TEXT: + case XMLReader::CDATA: + $cfgarray = $parser->value; + break; + case XMLReader::END_ELEMENT: + return; + break; + default: + break; + } + } +} + +function parse_xml_config($cffile, $rootobj, $isstring = "false") { + global $listtags; + + $listtags = listtags(); + if (isset($GLOBALS['custom_listtags'])) { + foreach($GLOBALS['custom_listtags'] as $tag) { + $listtags[$tag] = $tag; + } + } + + return parse_xml_config_raw($cffile, $rootobj); +} + +function parse_xml_config_pkg($cffile, $rootobj, $isstring = "false") { + global $listtags; + + $listtags = listtags_pkg(); + if (isset($GLOBALS['custom_listtags_pkg'])) { + foreach($GLOBALS['custom_listtags_pkg'] as $tag) { + $listtags[$tag] = $tag; + } + } + return parse_xml_config_raw($cffile, $rootobj, $isstring); +} + +function parse_xml_config_raw($cffile, $rootobj, $isstring = "false") { + global $listtags; + + $parsedcfg = array(); + + $par = new XMLReader(); + if ($par->open($cffile, "UTF-8", LIBXML_NOERROR | LIBXML_NOWARNING)) { + add_elements($parsedcfg, $par); + $par->close(); + } else + log_error(sprintf(gettext("Error returned while trying to parse %s"), $cffile)); + + if ($rootobj) { + if (!is_array($rootobj)) + $rootobj = array($rootobj); + foreach ($rootobj as $rootobj_name) + if ($parsedcfg[$rootobj_name]) + break; + + return $parsedcfg[$rootobj_name]; + } else { + return $parsedcfg; + } +} + +function dump_xml_config_sub(& $writer, $arr) { + global $listtags; + + foreach ($arr as $ent => $val) { + if (is_array($val)) { + /* is it just a list of multiple values? */ + if (isset($listtags[strtolower($ent)])) { + foreach ($val as $cval) { + if (is_array($cval)) { + if (empty($cval)) + $writer->writeElement($ent); + else { + $writer->startElement($ent); + dump_xml_config_sub($writer, $cval); + $writer->endElement(); + } + } else { + if($cval === false) continue; + if ((is_bool($val) && ($val == true)) || ($val === "")) + $writer->writeElement($ent); + else if (!is_bool($val)) + $writer->writeElement($ent, $cval); + } + } + } else if (empty($val)) { + $writer->writeElement($ent); + } else { + /* it's an array */ + $writer->startElement($ent); + dump_xml_config_sub($writer, $val); + $writer->endElement(); + } + } else { + if ((is_bool($val) && ($val == true)) || ($val === "")) + $writer->writeElement($ent); + else if (!is_bool($val)) + $writer->writeElement($ent, $val); + } + } +} + +function dump_xml_config($arr, $rootobj) { + global $listtags; + + $listtags = listtags(); + if (isset($GLOBALS['custom_listtags'])) { + foreach($GLOBALS['custom_listtags'] as $tag) { + $listtags[$tag] = $tag; + } + } + return dump_xml_config_raw($arr, $rootobj); +} + +function dump_xml_config_pkg($arr, $rootobj) { + global $listtags; + + $listtags = listtags_pkg(); + if (isset($GLOBALS['custom_listtags_pkg'])) { + foreach($GLOBALS['custom_listtags_pkg'] as $tag) { + $listtags[$tag] = $tag; + } + } + return dump_xml_config_raw($arr, $rootobj); +} + +function dump_xml_config_raw($arr, $rootobj) { + + $writer = new XMLWriter(); + $writer->openMemory(); + $writer->setIndent(true); + $writer->setIndentString("\t"); + $writer->startDocument("1.0", "UTF-8"); + $writer->startElement($rootobj); + + dump_xml_config_sub($writer, $arr); + + $writer->endElement(); + $writer->endDocument(); + $xmlconfig = $writer->outputMemory(true); + + return $xmlconfig; +} + +?> diff --git a/usr/etc/inc/xmlrpc.inc b/usr/etc/inc/xmlrpc.inc new file mode 100644 index 000000000..ca07cee5c --- /dev/null +++ b/usr/etc/inc/xmlrpc.inc @@ -0,0 +1,144 @@ +getNumParams(); $i++) { + $value = $params->getParam($i); + $array[] = XML_RPC_decode($value); + } + return $array; +} + +/* + * xmlrpc_value_to_php: Convert an XMLRPC value into a PHP scalar/array and return it. + */ +function xmlrpc_value_to_php($raw_value) { + /* + switch($raw_value->kindOf()) { + case "scalar": + if($raw_value->scalartyp() == "boolean") $return = (boolean) $raw_value->scalarval(); + $return = $raw_value->scalarval(); + break; + case "array": + $return = array(); + for($i = 0; $i < $raw_value->arraysize(); $i++) { + $value = $raw_value->arraymem($i); + $return[] = xmlrpc_value_to_php($value); + } + break; + case "struct": + $return = array(); + for($i = 0; $i < $raw_value->arraysize(); $i++) { + list($key, $value) = $raw_value->structeach(); + $return[$key] = xmlrpc_value_to_php($value); + } + break; + } + */ + return XML_RPC_decode($raw_value); +} + +/* + * php_value_to_xmlrpc: Convert a PHP scalar or array into its XMLRPC equivalent. + */ +function php_value_to_xmlrpc($value, $force_array = false) { + $toreturn = XML_RPC_encode($value); + return $force_array ? array($toreturn) : $toreturn; + /* + if(gettype($value) == "array") { + $xmlrpc_type = "array"; + $toreturn = array(); + foreach($value as $key => $val) { + if(is_string($key)) $xmlrpc_type = "struct"; + $toreturn[$key] = php_value_to_xmlrpc($val); + } + return new XML_RPC_Value($toreturn, $xmlrpc_type); + } else { + if($force_array == true) { + return new XML_RPC_Value(array(new XML_RPC_Value($value, gettype($value))), "array"); + } else { + return new XML_RPC_Value($value, gettype($value)); + } + } + */ +} + +/* + * xmlrpc_auth: Handle basic crypt() authentication of an XMLRPC request. This function assumes that + * $params[0] contains the local system's plaintext password and removes the password from + * the array before returning it. + */ +function xmlrpc_auth(&$params) { + global $config, $_SERVER; + + /* XXX: Should teach caller to pass username and use it here. */ + /* XXX: Should clarify from old behaviour what is in params[0] that differs from params['xmlrpcauth'] */ + if (isset($config['system']['webgui']['authmode'])) { + $authcfg = auth_get_authserver($config['system']['webgui']['authmode']); + if (authenticate_user("admin", $params[0], $authcfg) || + authenticate_user("admin", $params[0])) { + array_shift($params); + unset($params['xmlrpcauth']); + return true; + } else if (!empty($params['xmlrpcauth']) && (authenticate_user("admin", $params['xmlrpcauth'], $authcfg) || + authenticate_user("admin", $params['xmlrpcauth']))) { + array_shift($params); + unset($params['xmlrpcauth']); + return true; + } + } else if (authenticate_user("admin", $params[0])) { + array_shift($params); + unset($params['xmlrpcauth']); + return true; + } else if (!empty($params['xmlrpcauth']) && authenticate_user("admin", $params['xmlrpcauth'])) { + array_shift($params); + unset($params['xmlrpcauth']); + return true; + } + + array_shift($params); + unset($params['xmlrpcauth']); + log_error("webConfigurator authentication error for 'admin' from {$_SERVER['REMOTE_ADDR']} during sync settings."); + return false; +} + +?> diff --git a/usr/etc/inc/xmlrpc_client.inc b/usr/etc/inc/xmlrpc_client.inc new file mode 100644 index 000000000..fbbf97732 --- /dev/null +++ b/usr/etc/inc/xmlrpc_client.inc @@ -0,0 +1,2060 @@ + + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version SVN: $Id: RPC.php 300961 2010-07-03 02:17:34Z danielc $ + * @link http://pear.php.net/package/XML_RPC + */ + + +if (!function_exists('xml_parser_create')) { + include_once 'PEAR.inc'; + PEAR::loadExtension('xml'); +} + +/**#@+ + * Error constants + */ +/** + * Parameter values don't match parameter types + */ +define('XML_RPC_ERROR_INVALID_TYPE', 101); +/** + * Parameter declared to be numeric but the values are not + */ +define('XML_RPC_ERROR_NON_NUMERIC_FOUND', 102); +/** + * Communication error + */ +define('XML_RPC_ERROR_CONNECTION_FAILED', 103); +/** + * The array or struct has already been started + */ +define('XML_RPC_ERROR_ALREADY_INITIALIZED', 104); +/** + * Incorrect parameters submitted + */ +define('XML_RPC_ERROR_INCORRECT_PARAMS', 105); +/** + * Programming error by developer + */ +define('XML_RPC_ERROR_PROGRAMMING', 106); +/**#@-*/ + + +/** + * Data types + * @global string $GLOBALS['XML_RPC_I4'] + */ +$GLOBALS['XML_RPC_I4'] = 'i4'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Int'] + */ +$GLOBALS['XML_RPC_Int'] = 'int'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Boolean'] + */ +$GLOBALS['XML_RPC_Boolean'] = 'boolean'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Double'] + */ +$GLOBALS['XML_RPC_Double'] = 'double'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_String'] + */ +$GLOBALS['XML_RPC_String'] = 'string'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_DateTime'] + */ +$GLOBALS['XML_RPC_DateTime'] = 'dateTime.iso8601'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Base64'] + */ +$GLOBALS['XML_RPC_Base64'] = 'base64'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Array'] + */ +$GLOBALS['XML_RPC_Array'] = 'array'; + +/** + * Data types + * @global string $GLOBALS['XML_RPC_Struct'] + */ +$GLOBALS['XML_RPC_Struct'] = 'struct'; + + +/** + * Data type meta-types + * @global array $GLOBALS['XML_RPC_Types'] + */ +$GLOBALS['XML_RPC_Types'] = array( + $GLOBALS['XML_RPC_I4'] => 1, + $GLOBALS['XML_RPC_Int'] => 1, + $GLOBALS['XML_RPC_Boolean'] => 1, + $GLOBALS['XML_RPC_String'] => 1, + $GLOBALS['XML_RPC_Double'] => 1, + $GLOBALS['XML_RPC_DateTime'] => 1, + $GLOBALS['XML_RPC_Base64'] => 1, + $GLOBALS['XML_RPC_Array'] => 2, + $GLOBALS['XML_RPC_Struct'] => 3, +); + + +/** + * Error message numbers + * @global array $GLOBALS['XML_RPC_err'] + */ +$GLOBALS['XML_RPC_err'] = array( + 'unknown_method' => 1, + 'invalid_return' => 2, + 'incorrect_params' => 3, + 'introspect_unknown' => 4, + 'http_error' => 5, + 'not_response_object' => 6, + 'invalid_request' => 7, +); + +/** + * Error message strings + * @global array $GLOBALS['XML_RPC_str'] + */ +$GLOBALS['XML_RPC_str'] = array( + 'unknown_method' => gettext("Unknown method"), + 'invalid_return' => gettext("Invalid return payload: enable debugging to examine incoming payload"), + 'incorrect_params' => gettext("Incorrect parameters passed to method"), + 'introspect_unknown' => gettext("Can't introspect: method unknown"), + 'http_error' => gettext("Didn't receive 200 OK from remote server."), + 'not_response_object' => gettext("The requested method didn't return an XML_RPC_Response object."), + 'invalid_request' => gettext("Invalid request payload"), +); + + +/** + * Default XML encoding (ISO-8859-1, UTF-8 or US-ASCII) + * @global string $GLOBALS['XML_RPC_defencoding'] + */ +$GLOBALS['XML_RPC_defencoding'] = 'UTF-8'; + +/** + * User error codes start at 800 + * @global int $GLOBALS['XML_RPC_erruser'] + */ +$GLOBALS['XML_RPC_erruser'] = 800; + +/** + * XML parse error codes start at 100 + * @global int $GLOBALS['XML_RPC_errxml'] + */ +$GLOBALS['XML_RPC_errxml'] = 100; + + +/** + * Compose backslashes for escaping regexp + * @global string $GLOBALS['XML_RPC_backslash'] + */ +$GLOBALS['XML_RPC_backslash'] = chr(92) . chr(92); + + +/** + * Should we automatically base64 encode strings that contain characters + * which can cause PHP's SAX-based XML parser to break? + * @global boolean $GLOBALS['XML_RPC_auto_base64'] + */ +$GLOBALS['XML_RPC_auto_base64'] = true; + + +/** + * Valid parents of XML elements + * @global array $GLOBALS['XML_RPC_valid_parents'] + */ +$GLOBALS['XML_RPC_valid_parents'] = array( + 'BOOLEAN' => array('VALUE'), + 'I4' => array('VALUE'), + 'INT' => array('VALUE'), + 'STRING' => array('VALUE'), + 'DOUBLE' => array('VALUE'), + 'DATETIME.ISO8601' => array('VALUE'), + 'BASE64' => array('VALUE'), + 'ARRAY' => array('VALUE'), + 'STRUCT' => array('VALUE'), + 'PARAM' => array('PARAMS'), + 'METHODNAME' => array('METHODCALL'), + 'PARAMS' => array('METHODCALL', 'METHODRESPONSE'), + 'MEMBER' => array('STRUCT'), + 'NAME' => array('MEMBER'), + 'DATA' => array('ARRAY'), + 'FAULT' => array('METHODRESPONSE'), + 'VALUE' => array('MEMBER', 'DATA', 'PARAM', 'FAULT'), +); + + +/** + * Stores state during parsing + * + * quick explanation of components: + * + ac = accumulates values + * + qt = decides if quotes are needed for evaluation + * + cm = denotes struct or array (comma needed) + * + isf = indicates a fault + * + lv = indicates "looking for a value": implements the logic + * to allow values with no types to be strings + * + params = stores parameters in method calls + * + method = stores method name + * + * @global array $GLOBALS['XML_RPC_xh'] + */ +$GLOBALS['XML_RPC_xh'] = array(); + + +/** + * Start element handler for the XML parser + * + * @return void + */ +function XML_RPC_se($parser_resource, $name, $attrs) +{ + global $XML_RPC_xh, $XML_RPC_valid_parents; + + $parser = (int) $parser_resource; + + // if invalid xmlrpc already detected, skip all processing + if ($XML_RPC_xh[$parser]['isf'] >= 2) { + return; + } + + // check for correct element nesting + // top level element can only be of 2 types + if (count($XML_RPC_xh[$parser]['stack']) == 0) { + if ($name != 'METHODRESPONSE' && $name != 'METHODCALL') { + $XML_RPC_xh[$parser]['isf'] = 2; + $XML_RPC_xh[$parser]['isf_reason'] = gettext('missing top level xmlrpc element'); + return; + } + } else { + // not top level element: see if parent is OK + if (!in_array($XML_RPC_xh[$parser]['stack'][0], $XML_RPC_valid_parents[$name])) { + $name = preg_replace('@[^a-zA-Z0-9._-]@', '', $name); + $XML_RPC_xh[$parser]['isf'] = 2; + $XML_RPC_xh[$parser]['isf_reason'] = sprintf(gettext('xmlrpc element %1$s cannot be child of %2$s'), $name, $XML_RPC_xh[$parser]['stack'][0]); + return; + } + } + + switch ($name) { + case 'STRUCT': + $XML_RPC_xh[$parser]['cm']++; + + // turn quoting off + $XML_RPC_xh[$parser]['qt'] = 0; + + $cur_val = array(); + $cur_val['value'] = array(); + $cur_val['members'] = 1; + array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val); + break; + + case 'ARRAY': + $XML_RPC_xh[$parser]['cm']++; + + // turn quoting off + $XML_RPC_xh[$parser]['qt'] = 0; + + $cur_val = array(); + $cur_val['value'] = array(); + $cur_val['members'] = 0; + array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val); + break; + + case 'NAME': + $XML_RPC_xh[$parser]['ac'] = ''; + break; + + case 'FAULT': + $XML_RPC_xh[$parser]['isf'] = 1; + break; + + case 'PARAM': + $XML_RPC_xh[$parser]['valuestack'] = array(); + break; + + case 'VALUE': + $XML_RPC_xh[$parser]['lv'] = 1; + $XML_RPC_xh[$parser]['vt'] = $GLOBALS['XML_RPC_String']; + $XML_RPC_xh[$parser]['ac'] = ''; + $XML_RPC_xh[$parser]['qt'] = 0; + // look for a value: if this is still 1 by the + // time we reach the first data segment then the type is string + // by implication and we need to add in a quote + break; + + case 'I4': + case 'INT': + case 'STRING': + case 'BOOLEAN': + case 'DOUBLE': + case 'DATETIME.ISO8601': + case 'BASE64': + $XML_RPC_xh[$parser]['ac'] = ''; // reset the accumulator + + if ($name == 'DATETIME.ISO8601' || $name == 'STRING') { + $XML_RPC_xh[$parser]['qt'] = 1; + + if ($name == 'DATETIME.ISO8601') { + $XML_RPC_xh[$parser]['vt'] = $GLOBALS['XML_RPC_DateTime']; + } + + } elseif ($name == 'BASE64') { + $XML_RPC_xh[$parser]['qt'] = 2; + } else { + // No quoting is required here -- but + // at the end of the element we must check + // for data format errors. + $XML_RPC_xh[$parser]['qt'] = 0; + } + break; + + case 'MEMBER': + $XML_RPC_xh[$parser]['ac'] = ''; + break; + + case 'DATA': + case 'METHODCALL': + case 'METHODNAME': + case 'METHODRESPONSE': + case 'PARAMS': + // valid elements that add little to processing + break; + } + + + // Save current element to stack + array_unshift($XML_RPC_xh[$parser]['stack'], $name); + + if ($name != 'VALUE') { + $XML_RPC_xh[$parser]['lv'] = 0; + } +} + +/** + * End element handler for the XML parser + * + * @return void + */ +function XML_RPC_ee($parser_resource, $name) +{ + global $XML_RPC_xh; + + $parser = (int) $parser_resource; + + if ($XML_RPC_xh[$parser]['isf'] >= 2) { + return; + } + + // push this element from stack + // NB: if XML validates, correct opening/closing is guaranteed and + // we do not have to check for $name == $curr_elem. + // we also checked for proper nesting at start of elements... + $curr_elem = array_shift($XML_RPC_xh[$parser]['stack']); + + switch ($name) { + case 'STRUCT': + case 'ARRAY': + $cur_val = array_shift($XML_RPC_xh[$parser]['valuestack']); + $XML_RPC_xh[$parser]['value'] = $cur_val['value']; + $XML_RPC_xh[$parser]['vt'] = strtolower($name); + $XML_RPC_xh[$parser]['cm']--; + break; + + case 'NAME': + $XML_RPC_xh[$parser]['valuestack'][0]['name'] = $XML_RPC_xh[$parser]['ac']; + break; + + case 'BOOLEAN': + // special case here: we translate boolean 1 or 0 into PHP + // constants true or false + if ($XML_RPC_xh[$parser]['ac'] == '1') { + $XML_RPC_xh[$parser]['ac'] = 'true'; + } else { + $XML_RPC_xh[$parser]['ac'] = 'false'; + } + + $XML_RPC_xh[$parser]['vt'] = strtolower($name); + // Drop through intentionally. + + case 'I4': + case 'INT': + case 'STRING': + case 'DOUBLE': + case 'DATETIME.ISO8601': + case 'BASE64': + if ($XML_RPC_xh[$parser]['qt'] == 1) { + // we use double quotes rather than single so backslashification works OK + $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac']; + } elseif ($XML_RPC_xh[$parser]['qt'] == 2) { + $XML_RPC_xh[$parser]['value'] = base64_decode($XML_RPC_xh[$parser]['ac']); + } elseif ($name == 'BOOLEAN') { + $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac']; + } else { + // we have an I4, INT or a DOUBLE + // we must check that only 0123456789-. are characters here + if (!preg_match("@^[+-]?[0123456789 \t\.]+$@", $XML_RPC_xh[$parser]['ac'])) { + XML_RPC_Base::raiseError(gettext('Non-numeric value received in INT or DOUBLE'), + XML_RPC_ERROR_NON_NUMERIC_FOUND); + $XML_RPC_xh[$parser]['value'] = XML_RPC_ERROR_NON_NUMERIC_FOUND; + } else { + // it's ok, add it on + $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac']; + } + } + + $XML_RPC_xh[$parser]['ac'] = ''; + $XML_RPC_xh[$parser]['qt'] = 0; + $XML_RPC_xh[$parser]['lv'] = 3; // indicate we've found a value + break; + + case 'VALUE': + if ($XML_RPC_xh[$parser]['vt'] == $GLOBALS['XML_RPC_String']) { + if (strlen($XML_RPC_xh[$parser]['ac']) > 0) { + $XML_RPC_xh[$parser]['value'] = $XML_RPC_xh[$parser]['ac']; + } elseif ($XML_RPC_xh[$parser]['lv'] == 1) { + // The element was empty. + $XML_RPC_xh[$parser]['value'] = ''; + } + } + + $temp = new XML_RPC_Value($XML_RPC_xh[$parser]['value'], $XML_RPC_xh[$parser]['vt']); + + $cur_val = array_shift($XML_RPC_xh[$parser]['valuestack']); + if (is_array($cur_val)) { + if ($cur_val['members']==0) { + $cur_val['value'][] = $temp; + } else { + $XML_RPC_xh[$parser]['value'] = $temp; + } + array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val); + } else { + $XML_RPC_xh[$parser]['value'] = $temp; + } + break; + + case 'MEMBER': + $XML_RPC_xh[$parser]['ac'] = ''; + $XML_RPC_xh[$parser]['qt'] = 0; + + $cur_val = array_shift($XML_RPC_xh[$parser]['valuestack']); + if (is_array($cur_val)) { + if ($cur_val['members']==1) { + $cur_val['value'][$cur_val['name']] = $XML_RPC_xh[$parser]['value']; + } + array_unshift($XML_RPC_xh[$parser]['valuestack'], $cur_val); + } + break; + + case 'DATA': + $XML_RPC_xh[$parser]['ac'] = ''; + $XML_RPC_xh[$parser]['qt'] = 0; + break; + + case 'PARAM': + $XML_RPC_xh[$parser]['params'][] = $XML_RPC_xh[$parser]['value']; + break; + + case 'METHODNAME': + case 'RPCMETHODNAME': + $XML_RPC_xh[$parser]['method'] = preg_replace("@^[\n\r\t ]+@", '', + $XML_RPC_xh[$parser]['ac']); + break; + } + + // if it's a valid type name, set the type + if (isset($GLOBALS['XML_RPC_Types'][strtolower($name)])) { + $XML_RPC_xh[$parser]['vt'] = strtolower($name); + } +} + +/** + * Character data handler for the XML parser + * + * @return void + */ +function XML_RPC_cd($parser_resource, $data) +{ + global $XML_RPC_xh, $XML_RPC_backslash; + + $parser = (int) $parser_resource; + + if ($XML_RPC_xh[$parser]['lv'] != 3) { + // "lookforvalue==3" means that we've found an entire value + // and should discard any further character data + + if ($XML_RPC_xh[$parser]['lv'] == 1) { + // if we've found text and we're just in a then + // turn quoting on, as this will be a string + $XML_RPC_xh[$parser]['qt'] = 1; + // and say we've found a value + $XML_RPC_xh[$parser]['lv'] = 2; + } + + // replace characters that eval would + // do special things with + if (!isset($XML_RPC_xh[$parser]['ac'])) { + $XML_RPC_xh[$parser]['ac'] = ''; + } + $XML_RPC_xh[$parser]['ac'] .= $data; + } +} + +/** + * The common methods and properties for all of the XML_RPC classes + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Base { + + /** + * PEAR Error handling + * + * @return object PEAR_Error object + */ + function raiseError($msg, $code) + { + include_once 'PEAR.inc'; + if (is_object(@$this)) { + log_error(get_class($this) . ': ' . $msg . " {$code}"); + return PEAR::raiseError(get_class($this) . ': ' . $msg, $code); + } else { + log_error("XML_RPC: " . ': ' . $msg . " {$code}"); + return PEAR::raiseError('XML_RPC: ' . $msg, $code); + } + } + + /** + * Tell whether something is a PEAR_Error object + * + * @param mixed $value the item to check + * + * @return bool whether $value is a PEAR_Error object or not + * + * @access public + */ + function isError($value) + { + return is_a($value, 'PEAR_Error'); + } +} + +/** + * The methods and properties for submitting XML RPC requests + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Client extends XML_RPC_Base { + + /** + * The path and name of the RPC server script you want the request to go to + * @var string + */ + var $path = ''; + + /** + * The name of the remote server to connect to + * @var string + */ + var $server = ''; + + /** + * The protocol to use in contacting the remote server + * @var string + */ + var $protocol = 'http://'; + + /** + * The port for connecting to the remote server + * + * The default is 80 for http:// connections + * and 443 for https:// and ssl:// connections. + * + * @var integer + */ + var $port = 80; + + /** + * A user name for accessing the RPC server + * @var string + * @see XML_RPC_Client::setCredentials() + */ + var $username = ''; + + /** + * A password for accessing the RPC server + * @var string + * @see XML_RPC_Client::setCredentials() + */ + var $password = ''; + + /** + * The name of the proxy server to use, if any + * @var string + */ + var $proxy = ''; + + /** + * The protocol to use in contacting the proxy server, if any + * @var string + */ + var $proxy_protocol = 'http://'; + + /** + * The port for connecting to the proxy server + * + * The default is 8080 for http:// connections + * and 443 for https:// and ssl:// connections. + * + * @var integer + */ + var $proxy_port = 8080; + + /** + * A user name for accessing the proxy server + * @var string + */ + var $proxy_user = ''; + + /** + * A password for accessing the proxy server + * @var string + */ + var $proxy_pass = ''; + + /** + * The error number, if any + * @var integer + */ + var $errno = 0; + + /** + * The error message, if any + * @var string + */ + var $errstr = ''; + + /** + * The current debug mode (1 = on, 0 = off) + * @var integer + */ + var $debug = 0; + + /** + * The HTTP headers for the current request. + * @var string + */ + var $headers = ''; + + + /** + * Sets the object's properties + * + * @param string $path the path and name of the RPC server script + * you want the request to go to + * @param string $server the URL of the remote server to connect to. + * If this parameter doesn't specify a + * protocol and $port is 443, ssl:// is + * assumed. + * @param integer $port a port for connecting to the remote server. + * Defaults to 80 for http:// connections and + * 443 for https:// and ssl:// connections. + * @param string $proxy the URL of the proxy server to use, if any. + * If this parameter doesn't specify a + * protocol and $port is 443, ssl:// is + * assumed. + * @param integer $proxy_port a port for connecting to the remote server. + * Defaults to 8080 for http:// connections and + * 443 for https:// and ssl:// connections. + * @param string $proxy_user a user name for accessing the proxy server + * @param string $proxy_pass a password for accessing the proxy server + * + * @return void + */ + function XML_RPC_Client($path, $server, $port = 0, + $proxy = '', $proxy_port = 0, + $proxy_user = '', $proxy_pass = '') + { + $this->path = $path; + $this->proxy_user = $proxy_user; + $this->proxy_pass = $proxy_pass; + + preg_match('@^(http://|https://|ssl://)?(.*)$@', $server, $match); + if ($match[1] == '') { + if ($port == 443) { + $this->server = $match[2]; + $this->protocol = 'ssl://'; + $this->port = 443; + } else { + $this->server = $match[2]; + if ($port) { + $this->port = $port; + } + } + } elseif ($match[1] == 'http://') { + $this->server = $match[2]; + if ($port) { + $this->port = $port; + } + } else { + $this->server = $match[2]; + $this->protocol = 'ssl://'; + if ($port) { + $this->port = $port; + } else { + $this->port = 443; + } + } + + if ($proxy) { + preg_match('@^(http://|https://|ssl://)?(.*)$@', $proxy, $match); + if ($match[1] == '') { + if ($proxy_port == 443) { + $this->proxy = $match[2]; + $this->proxy_protocol = 'ssl://'; + $this->proxy_port = 443; + } else { + $this->proxy = $match[2]; + if ($proxy_port) { + $this->proxy_port = $proxy_port; + } + } + } elseif ($match[1] == 'http://') { + $this->proxy = $match[2]; + if ($proxy_port) { + $this->proxy_port = $proxy_port; + } + } else { + $this->proxy = $match[2]; + $this->proxy_protocol = 'ssl://'; + if ($proxy_port) { + $this->proxy_port = $proxy_port; + } else { + $this->proxy_port = 443; + } + } + } + } + + /** + * Change the current debug mode + * + * @param int $in where 1 = on, 0 = off + * + * @return void + */ + function setDebug($in) + { + if ($in) { + $this->debug = 1; + } else { + $this->debug = 0; + } + } + + /** + * Sets whether strings that contain characters which may cause PHP's + * SAX-based XML parser to break should be automatically base64 encoded + * + * This is is a workaround for systems that don't have PHP's mbstring + * extension available. + * + * @param int $in where 1 = on, 0 = off + * + * @return void + */ + function setAutoBase64($in) + { + if ($in) { + $GLOBALS['XML_RPC_auto_base64'] = true; + } else { + $GLOBALS['XML_RPC_auto_base64'] = false; + } + } + + /** + * Set username and password properties for connecting to the RPC server + * + * @param string $u the user name + * @param string $p the password + * + * @return void + * + * @see XML_RPC_Client::$username, XML_RPC_Client::$password + */ + function setCredentials($u, $p) + { + $this->username = $u; + $this->password = $p; + } + + /** + * Transmit the RPC request via HTTP 1.0 protocol + * + * @param object $msg the XML_RPC_Message object + * @param int $timeout how many seconds to wait for the request + * + * @return object an XML_RPC_Response object. 0 is returned if any + * problems happen. + * + * @see XML_RPC_Message, XML_RPC_Client::XML_RPC_Client(), + * XML_RPC_Client::setCredentials() + */ + function send($msg, $timeout = 0) + { + if (!is_a($msg, 'XML_RPC_Message')) { + $this->errstr = sprintf( + gettext( + "send()'s %s parameter must be an XML_RPC_Message object." + ), $msg); + $this->raiseError($this->errstr, XML_RPC_ERROR_PROGRAMMING); + return 0; + } + $msg->debug = $this->debug; + return $this->sendPayloadHTTP10($msg, $this->server, $this->port, + $timeout, $this->username, + $this->password); + } + + /** + * Transmit the RPC request via HTTP 1.0 protocol + * + * Requests should be sent using XML_RPC_Client send() rather than + * calling this method directly. + * + * @param object $msg the XML_RPC_Message object + * @param string $server the server to send the request to + * @param int $port the server port send the request to + * @param int $timeout how many seconds to wait for the request + * before giving up + * @param string $username a user name for accessing the RPC server + * @param string $password a password for accessing the RPC server + * + * @return object an XML_RPC_Response object. 0 is returned if any + * problems happen. + * + * @access protected + * @see XML_RPC_Client::send() + */ + function sendPayloadHTTP10($msg, $server, $port, $timeout = 0, + $username = '', $password = '') + { + // Pre-emptive BC hacks for fools calling sendPayloadHTTP10() directly + if ($username != $this->username) { + $this->setCredentials($username, $password); + } + + // Only create the payload if it was not created previously + if (empty($msg->payload)) { + $msg->createPayload(); + } + $this->createHeaders($msg); + + $op = $this->headers . "\r\n\r\n"; + $op .= $msg->payload; + + if ($this->debug) { + print "\n
    ---SENT---\n";
    +            print $op;
    +            print "\n---END---
    \n"; + } + + /* + * If we're using a proxy open a socket to the proxy server + * instead to the xml-rpc server + */ + if ($this->proxy) { + if ($this->proxy_protocol == 'http://') { + $protocol = ''; + } else { + $protocol = $this->proxy_protocol; + } + if ($timeout > 0) { + $fp = @fsockopen($protocol . $this->proxy, $this->proxy_port, + $this->errno, $this->errstr, $timeout); + } else { + $fp = @fsockopen($protocol . $this->proxy, $this->proxy_port, + $this->errno, $this->errstr); + } + } else { + if ($this->protocol == 'http://') { + $protocol = ''; + } else { + $protocol = $this->protocol; + } + if ($timeout > 0) { + $fp = @fsockopen($protocol . $server, $port, + $this->errno, $this->errstr, $timeout); + } else { + $fp = @fsockopen($protocol . $server, $port, + $this->errno, $this->errstr); + } + } + + /* + * Just raising the error without returning it is strange, + * but keep it here for backwards compatibility. + */ + if (!$fp && $this->proxy) { + $this->raiseError(sprintf(gettext('Connection to proxy server + %1$s:%2$s failed. %3$s') + ,$this->proxy,$this->proxy_port,$this->errstr), + XML_RPC_ERROR_CONNECTION_FAILED); + return 0; + } elseif (!$fp) { + $this->raiseError(sprintf(gettext('Connection to RPC server + %1$s:%2$s failed. %3$s') + ,$server,$port,$this->errstr), + XML_RPC_ERROR_CONNECTION_FAILED); + return 0; + } + + if ($timeout) { + /* + * Using socket_set_timeout() because stream_set_timeout() + * was introduced in 4.3.0, but we need to support 4.2.0. + */ + socket_set_timeout($fp, $timeout); + } + + if (!fputs($fp, $op, strlen($op))) { + $this->errstr = 'Write error'; + return 0; + } + $resp = $msg->parseResponseFile($fp); + + $meta = socket_get_status($fp); + if ($meta['timed_out']) { + fclose($fp); + $this->errstr = 'RPC server did not send response before timeout.'; + $this->raiseError($this->errstr, XML_RPC_ERROR_CONNECTION_FAILED); + return 0; + } + + fclose($fp); + return $resp; + } + + /** + * Determines the HTTP headers and puts it in the $headers property + * + * @param object $msg the XML_RPC_Message object + * + * @return boolean TRUE if okay, FALSE if the message payload isn't set. + * + * @access protected + */ + function createHeaders($msg) + { + if (empty($msg->payload)) { + return false; + } + if ($this->proxy) { + $this->headers = 'POST ' . ($this->protocol=='ssl://'?'https://':$this->protocol). $this->server; + if ($this->proxy_port) { + $this->headers .= ':' . $this->port; + } + } else { + $this->headers = 'POST '; + } + $this->headers .= $this->path. " HTTP/1.0\r\n"; + + $this->headers .= "User-Agent: PEAR XML_RPC\r\n"; + $this->headers .= 'Host: ' . $this->server . "\r\n"; + + if ($this->proxy && $this->proxy_user) { + $this->headers .= 'Proxy-Authorization: Basic ' + . base64_encode("$this->proxy_user:$this->proxy_pass") + . "\r\n"; + } + + // thanks to Grant Rauscher for this + if ($this->username) { + $this->headers .= 'Authorization: Basic ' + . base64_encode("$this->username:$this->password") + . "\r\n"; + } + + $this->headers .= "Content-Type: text/xml\r\n"; + $this->headers .= 'Content-Length: ' . strlen($msg->payload); + return true; + } +} + +/** + * The methods and properties for interpreting responses to XML RPC requests + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Response extends XML_RPC_Base +{ + var $xv; + var $fn; + var $fs; + var $hdrs; + + /** + * @return void + */ + function XML_RPC_Response($val, $fcode = 0, $fstr = '') + { + if ($fcode != 0) { + $this->fn = $fcode; + $this->fs = htmlspecialchars($fstr); + } else { + $this->xv = $val; + } + } + + /** + * @return int the error code + */ + function faultCode() + { + if (isset($this->fn)) { + return $this->fn; + } else { + return 0; + } + } + + /** + * @return string the error string + */ + function faultString() + { + return $this->fs; + } + + /** + * @return mixed the value + */ + function value() + { + return $this->xv; + } + + /** + * @return string the error message in XML format + */ + function serialize() + { + $rs = "\n"; + if ($this->fn) { + $rs .= " + + + + faultCode + " . $this->fn . " + + + faultString + " . $this->fs . " + + + +"; + } else { + $rs .= "\n\n" . $this->xv->serialize() . + "\n"; + } + $rs .= "\n"; + return $rs; + } +} + +/** + * The methods and properties for composing XML RPC messages + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Message extends XML_RPC_Base +{ + /** + * Should the payload's content be passed through mb_convert_encoding()? + * + * @see XML_RPC_Message::setConvertPayloadEncoding() + * @since Property available since Release 1.5.1 + * @var boolean + */ + var $convert_payload_encoding = false; + + /** + * The current debug mode (1 = on, 0 = off) + * @var integer + */ + var $debug = 0; + + /** + * The encoding to be used for outgoing messages + * + * Defaults to the value of $GLOBALS['XML_RPC_defencoding'] + * + * @var string + * @see XML_RPC_Message::setSendEncoding(), + * $GLOBALS['XML_RPC_defencoding'], XML_RPC_Message::xml_header() + */ + var $send_encoding = ''; + + /** + * The method presently being evaluated + * @var string + */ + var $methodname = ''; + + /** + * @var array + */ + var $params = array(); + + /** + * The XML message being generated + * @var string + */ + var $payload = ''; + + /** + * Should extra line breaks be removed from the payload? + * @since Property available since Release 1.4.6 + * @var boolean + */ + var $remove_extra_lines = true; + + /** + * The XML response from the remote server + * @since Property available since Release 1.4.6 + * @var string + */ + var $response_payload = ''; + + + /** + * @return void + */ + function XML_RPC_Message($meth, $pars = 0) + { + $this->methodname = $meth; + if (is_array($pars) && sizeof($pars) > 0) { + for ($i = 0; $i < sizeof($pars); $i++) { + $this->addParam($pars[$i]); + } + } + } + + /** + * Produces the XML declaration including the encoding attribute + * + * The encoding is determined by this class' $send_encoding + * property. If the $send_encoding property is not set, use + * $GLOBALS['XML_RPC_defencoding']. + * + * @return string the XML declaration and element + * + * @see XML_RPC_Message::setSendEncoding(), + * XML_RPC_Message::$send_encoding, $GLOBALS['XML_RPC_defencoding'] + */ + function xml_header() + { + global $XML_RPC_defencoding; + + if (!$this->send_encoding) { + $this->send_encoding = $XML_RPC_defencoding; + } + return 'send_encoding . '"?>' + . "\n\n"; + } + + /** + * @return string the closing tag + */ + function xml_footer() + { + return "\n"; + } + + /** + * Fills the XML_RPC_Message::$payload property + * + * Part of the process makes sure all line endings are in DOS format + * (CRLF), which is probably required by specifications. + * + * If XML_RPC_Message::setConvertPayloadEncoding() was set to true, + * the payload gets passed through mb_convert_encoding() + * to ensure the payload matches the encoding set in the + * XML declaration. The encoding type can be manually set via + * XML_RPC_Message::setSendEncoding(). + * + * @return void + * + * @uses XML_RPC_Message::xml_header(), XML_RPC_Message::xml_footer() + * @see XML_RPC_Message::setSendEncoding(), $GLOBALS['XML_RPC_defencoding'], + * XML_RPC_Message::setConvertPayloadEncoding() + */ + function createPayload() + { + $this->payload = $this->xml_header(); + $this->payload .= '' . $this->methodname . "\n"; + $this->payload .= "\n"; + for ($i = 0; $i < sizeof($this->params); $i++) { + $p = $this->params[$i]; + $this->payload .= "\n" . $p->serialize() . "\n"; + } + $this->payload .= "\n"; + $this->payload .= $this->xml_footer(); + if ($this->remove_extra_lines) { + $this->payload = preg_replace("@[\r\n]+@", "\r\n", $this->payload); + } else { + $this->payload = preg_replace("@\r\n|\n|\r|\n\r@", "\r\n", $this->payload); + } + if ($this->convert_payload_encoding) { + $this->payload = mb_convert_encoding($this->payload, $this->send_encoding); + } + } + + /** + * @return string the name of the method + */ + function method($meth = '') + { + if ($meth != '') { + $this->methodname = $meth; + } + return $this->methodname; + } + + /** + * @return string the payload + */ + function serialize() + { + $this->createPayload(); + return $this->payload; + } + + /** + * @return void + */ + function addParam($par) + { + $this->params[] = $par; + } + + /** + * Obtains an XML_RPC_Value object for the given parameter + * + * @param int $i the index number of the parameter to obtain + * + * @return object the XML_RPC_Value object. + * If the parameter doesn't exist, an XML_RPC_Response object. + * + * @since Returns XML_RPC_Response object on error since Release 1.3.0 + */ + function getParam($i) + { + global $XML_RPC_err, $XML_RPC_str; + + if (isset($this->params[$i])) { + return $this->params[$i]; + } else { + $this->raiseError(gettext('The submitted request did not contain this parameter'), + XML_RPC_ERROR_INCORRECT_PARAMS); + return new XML_RPC_Response(0, $XML_RPC_err['incorrect_params'], + $XML_RPC_str['incorrect_params']); + } + } + + /** + * @return int the number of parameters + */ + function getNumParams() + { + return sizeof($this->params); + } + + /** + * Sets whether the payload's content gets passed through + * mb_convert_encoding() + * + * Returns PEAR_ERROR object if mb_convert_encoding() isn't available. + * + * @param int $in where 1 = on, 0 = off + * + * @return void + * + * @see XML_RPC_Message::setSendEncoding() + * @since Method available since Release 1.5.1 + */ + function setConvertPayloadEncoding($in) + { + if ($in && !function_exists('mb_convert_encoding')) { + return $this->raiseError(gettext('mb_convert_encoding() is not available'), + XML_RPC_ERROR_PROGRAMMING); + } + $this->convert_payload_encoding = $in; + } + + /** + * Sets the XML declaration's encoding attribute + * + * @param string $type the encoding type (ISO-8859-1, UTF-8 or US-ASCII) + * + * @return void + * + * @see XML_RPC_Message::setConvertPayloadEncoding(), XML_RPC_Message::xml_header() + * @since Method available since Release 1.2.0 + */ + function setSendEncoding($type) + { + $this->send_encoding = $type; + } + + /** + * Determine the XML's encoding via the encoding attribute + * in the XML declaration + * + * If the encoding parameter is not set or is not ISO-8859-1, UTF-8 + * or US-ASCII, $XML_RPC_defencoding will be returned. + * + * @param string $data the XML that will be parsed + * + * @return string the encoding to be used + * + * @link http://php.net/xml_parser_create + * @since Method available since Release 1.2.0 + */ + function getEncoding($data) + { + global $XML_RPC_defencoding; + + if (preg_match('@<\?xml[^>]*\s*encoding\s*=\s*[\'"]([^"\']*)[\'"]@', + $data, $match)) + { + $match[1] = trim(strtoupper($match[1])); + switch ($match[1]) { + case 'ISO-8859-1': + case 'UTF-8': + case 'US-ASCII': + return $match[1]; + break; + + default: + return $XML_RPC_defencoding; + } + } else { + return $XML_RPC_defencoding; + } + } + + /** + * @return object a new XML_RPC_Response object + */ + function parseResponseFile($fp) + { + $ipd = ''; + while ($data = @fread($fp, 8192)) { + $ipd .= $data; + } + return $this->parseResponse($ipd); + } + + /** + * @return object a new XML_RPC_Response object + */ + function parseResponse($data = '') + { + global $XML_RPC_xh, $XML_RPC_err, $XML_RPC_str, $XML_RPC_defencoding; + + $encoding = $this->getEncoding($data); + $parser_resource = xml_parser_create($encoding); + $parser = (int) $parser_resource; + + $XML_RPC_xh = array(); + $XML_RPC_xh[$parser] = array(); + + $XML_RPC_xh[$parser]['cm'] = 0; + $XML_RPC_xh[$parser]['isf'] = 0; + $XML_RPC_xh[$parser]['ac'] = ''; + $XML_RPC_xh[$parser]['qt'] = ''; + $XML_RPC_xh[$parser]['stack'] = array(); + $XML_RPC_xh[$parser]['valuestack'] = array(); + + xml_parser_set_option($parser_resource, XML_OPTION_CASE_FOLDING, true); + xml_set_element_handler($parser_resource, 'XML_RPC_se', 'XML_RPC_ee'); + xml_set_character_data_handler($parser_resource, 'XML_RPC_cd'); + + $hdrfnd = 0; + if ($this->debug) { + print "\n
    ---GOT---\n";
    +            print isset($_SERVER['SERVER_PROTOCOL']) ? htmlspecialchars($data) : $data;
    +            print "\n---END---
    \n"; + } + + // See if response is a 200 or a 100 then a 200, else raise error. + // But only do this if we're using the HTTP protocol. + if (preg_match('@^HTTP@', $data) && + !preg_match('@^HTTP/[0-9\.]+ 200 @', $data) && + !preg_match('@^HTTP/[0-9\.]+ 10[0-9]([A-Z ]+)?[\r\n]+HTTP/[0-9\.]+ 200@', $data)) + { + $errstr = substr($data, 0, strpos($data, "\n") - 1); + error_log(sprintf(gettext("HTTP error, got response: %s"),$errstr)); + $r = new XML_RPC_Response(0, $XML_RPC_err['http_error'], + $XML_RPC_str['http_error'] . ' (' . + $errstr . ')'); + xml_parser_free($parser_resource); + return $r; + } + + // gotta get rid of headers here + if (!$hdrfnd && ($brpos = strpos($data,"\r\n\r\n"))) { + $XML_RPC_xh[$parser]['ha'] = substr($data, 0, $brpos); + $data = substr($data, $brpos + 4); + $hdrfnd = 1; + } + + /* + * be tolerant of junk after methodResponse + * (e.g. javascript automatically inserted by free hosts) + * thanks to Luca Mariano + */ + $data = substr($data, 0, strpos($data, "") + 17); + $this->response_payload = $data; + + if (!xml_parse($parser_resource, $data, sizeof($data))) { + // thanks to Peter Kocks + if (xml_get_current_line_number($parser_resource) == 1) { + /* We already error on this in the GUI, no need to log it and cause a PHP error. */ + //$errstr = gettext("XML error at line 1, check URL"); + } else { + $errstr = sprintf('XML error: %s at line %d', + xml_error_string(xml_get_error_code($parser_resource)), + xml_get_current_line_number($parser_resource)); + } + if (!empty($errstr)) + error_log($errstr); + $r = new XML_RPC_Response(0, $XML_RPC_err['invalid_return'], + $XML_RPC_str['invalid_return']); + xml_parser_free($parser_resource); + return $r; + } + + xml_parser_free($parser_resource); + + if ($this->debug) { + print "\n
    ---PARSED---\n";
    +            var_dump($XML_RPC_xh[$parser]['value']);
    +            print "---END---
    \n"; + } + + if ($XML_RPC_xh[$parser]['isf'] > 1) { + $r = new XML_RPC_Response(0, $XML_RPC_err['invalid_return'], + $XML_RPC_str['invalid_return'].' '.$XML_RPC_xh[$parser]['isf_reason']); + } elseif (!is_object($XML_RPC_xh[$parser]['value'])) { + // then something odd has happened + // and it's time to generate a client side error + // indicating something odd went on + $r = new XML_RPC_Response(0, $XML_RPC_err['invalid_return'], + $XML_RPC_str['invalid_return']); + } else { + $v = $XML_RPC_xh[$parser]['value']; + if ($XML_RPC_xh[$parser]['isf']) { + $f = $v->structmem('faultCode'); + $fs = $v->structmem('faultString'); + $r = new XML_RPC_Response($v, $f->scalarval(), + $fs->scalarval()); + } else { + $r = new XML_RPC_Response($v); + } + } + $r->hdrs = preg_split("@\r?\n@", $XML_RPC_xh[$parser]['ha'][1]); + return $r; + } +} + +/** + * The methods and properties that represent data in XML RPC format + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Value extends XML_RPC_Base +{ + var $me = array(); + var $mytype = 0; + + /** + * @return void + */ + function XML_RPC_Value($val = -1, $type = '') + { + $this->me = array(); + $this->mytype = 0; + if ($val != -1 || $type != '') { + if ($type == '') { + $type = 'string'; + } + if (!array_key_exists($type, $GLOBALS['XML_RPC_Types'])) { + // XXX + // need some way to report this error + } elseif ($GLOBALS['XML_RPC_Types'][$type] == 1) { + $this->addScalar($val, $type); + } elseif ($GLOBALS['XML_RPC_Types'][$type] == 2) { + $this->addArray($val); + } elseif ($GLOBALS['XML_RPC_Types'][$type] == 3) { + $this->addStruct($val); + } + } + } + + /** + * @return int returns 1 if successful or 0 if there are problems + */ + function addScalar($val, $type = 'string') + { + if ($this->mytype == 1) { + $this->raiseError(gettext('Scalar can have only one value'), + XML_RPC_ERROR_INVALID_TYPE); + return 0; + } + $typeof = $GLOBALS['XML_RPC_Types'][$type]; + if ($typeof != 1) { + $this->raiseError( + sprintf(gettext("Not a scalar type (%s)"), $typeof), + XML_RPC_ERROR_INVALID_TYPE); + return 0; + } + + if ($type == $GLOBALS['XML_RPC_Boolean']) { + if (strcasecmp($val, 'true') == 0 + || $val == 1 + || ($val == true && strcasecmp($val, 'false'))) + { + $val = 1; + } else { + $val = 0; + } + } + + if ($this->mytype == 2) { + // we're adding to an array here + $ar = $this->me['array']; + $ar[] = new XML_RPC_Value($val, $type); + $this->me['array'] = $ar; + } else { + // a scalar, so set the value and remember we're scalar + $this->me[$type] = $val; + $this->mytype = $typeof; + } + return 1; + } + + /** + * @return int returns 1 if successful or 0 if there are problems + */ + function addArray($vals) + { + if ($this->mytype != 0) { + $this->raiseError( + sprintf(gettext('Already initialized as a [%s]'), $this->kindOf()), + XML_RPC_ERROR_ALREADY_INITIALIZED); + return 0; + } + $this->mytype = $GLOBALS['XML_RPC_Types']['array']; + $this->me['array'] = $vals; + return 1; + } + + /** + * @return int returns 1 if successful or 0 if there are problems + */ + function addStruct($vals) + { + if ($this->mytype != 0) { + $this->raiseError( + sprintf(gettext('Already initialized as a [%s]'), $this->kindOf()), + XML_RPC_ERROR_ALREADY_INITIALIZED); + return 0; + } + $this->mytype = $GLOBALS['XML_RPC_Types']['struct']; + $this->me['struct'] = $vals; + return 1; + } + + /** + * @return void + */ + function dump($ar) + { + reset($ar); + foreach ($ar as $key => $val) { + echo "$key => $val
    "; + if ($key == 'array') { + foreach ($val as $key2 => $val2) { + echo "-- $key2 => $val2
    "; + } + } + } + } + + /** + * @return string the data type of the current value + */ + function kindOf() + { + switch ($this->mytype) { + case 3: + return 'struct'; + + case 2: + return 'array'; + + case 1: + return 'scalar'; + + default: + return 'undef'; + } + } + + /** + * @return string the data in XML format + */ + function serializedata($typ, $val) + { + $rs = ''; + if (!array_key_exists($typ, $GLOBALS['XML_RPC_Types'])) { + // XXX + // need some way to report this error + return; + } + switch ($GLOBALS['XML_RPC_Types'][$typ]) { + case 3: + // struct + $rs .= "\n"; + reset($val); + foreach ($val as $key2 => $val2) { + $rs .= "" . htmlspecialchars($key2) . "\n"; + $rs .= $this->serializeval($val2); + $rs .= "\n"; + } + $rs .= ''; + break; + + case 2: + // array + $rs .= "\n\n"; + foreach ($val as $value) { + $rs .= $this->serializeval($value); + } + $rs .= "\n"; + break; + + case 1: + switch ($typ) { + case $GLOBALS['XML_RPC_Base64']: + $rs .= "<${typ}>" . base64_encode($val) . ""; + break; + case $GLOBALS['XML_RPC_Boolean']: + $rs .= "<${typ}>" . ($val ? '1' : '0') . ""; + break; + case $GLOBALS['XML_RPC_String']: + $rs .= "<${typ}>" . htmlspecialchars($val). ""; + break; + default: + $rs .= "<${typ}>${val}"; + } + } + return $rs; + } + + /** + * @return string the data in XML format + */ + function serialize() + { + return $this->serializeval($this); + } + + /** + * @return string the data in XML format + */ + function serializeval($o) + { + if (!is_object($o) || empty($o->me) || !is_array($o->me)) { + return ''; + } + $ar = $o->me; + reset($ar); + list($typ, $val) = each($ar); + return '' . $this->serializedata($typ, $val) . "\n"; + } + + /** + * @return mixed the contents of the element requested + */ + function structmem($m) + { + return $this->me['struct'][$m]; + } + + /** + * @return void + */ + function structreset() + { + reset($this->me['struct']); + } + + /** + * @return the key/value pair of the struct's current element + */ + function structeach() + { + return each($this->me['struct']); + } + + /** + * @return mixed the current value + */ + function getval() + { + // UNSTABLE + + reset($this->me); + $b = current($this->me); + + // contributed by I Sofer, 2001-03-24 + // add support for nested arrays to scalarval + // i've created a new method here, so as to + // preserve back compatibility + + if (is_array($b)) { + foreach ($b as $id => $cont) { + $b[$id] = $cont->scalarval(); + } + } + + // add support for structures directly encoding php objects + if (is_object($b)) { + $t = get_object_vars($b); + foreach ($t as $id => $cont) { + $t[$id] = $cont->scalarval(); + } + foreach ($t as $id => $cont) { + $b->$id = $cont; + } + } + + // end contrib + return $b; + } + + /** + * @return mixed the current element's scalar value. If the value is + * not scalar, FALSE is returned. + */ + function scalarval() + { + reset($this->me); + $v = current($this->me); + if (!is_scalar($v)) { + $v = false; + } + return $v; + } + + /** + * @return string + */ + function scalartyp() + { + reset($this->me); + $a = key($this->me); + if ($a == $GLOBALS['XML_RPC_I4']) { + $a = $GLOBALS['XML_RPC_Int']; + } + return $a; + } + + /** + * @return mixed the struct's current element + */ + function arraymem($m) + { + return $this->me['array'][$m]; + } + + /** + * @return int the number of elements in the array + */ + function arraysize() + { + reset($this->me); + list($a, $b) = each($this->me); + return sizeof($b); + } + + /** + * Determines if the item submitted is an XML_RPC_Value object + * + * @param mixed $val the variable to be evaluated + * + * @return bool TRUE if the item is an XML_RPC_Value object + * + * @static + * @since Method available since Release 1.3.0 + */ + function isValue($val) + { + return (strtolower(get_class($val)) == 'xml_rpc_value'); + } +} + +/** + * Return an ISO8601 encoded string + * + * While timezones ought to be supported, the XML-RPC spec says: + * + * "Don't assume a timezone. It should be specified by the server in its + * documentation what assumptions it makes about timezones." + * + * This routine always assumes localtime unless $utc is set to 1, in which + * case UTC is assumed and an adjustment for locale is made when encoding. + * + * @return string the formatted date + */ +function XML_RPC_iso8601_encode($timet, $utc = 0) +{ + if (!$utc) { + $t = strftime('%Y%m%dT%H:%M:%S', $timet); + } else { + if (function_exists('gmstrftime')) { + // gmstrftime doesn't exist in some versions + // of PHP + $t = gmstrftime('%Y%m%dT%H:%M:%S', $timet); + } else { + $t = strftime('%Y%m%dT%H:%M:%S', $timet - date('Z')); + } + } + return $t; +} + +/** + * Convert a datetime string into a Unix timestamp + * + * While timezones ought to be supported, the XML-RPC spec says: + * + * "Don't assume a timezone. It should be specified by the server in its + * documentation what assumptions it makes about timezones." + * + * This routine always assumes localtime unless $utc is set to 1, in which + * case UTC is assumed and an adjustment for locale is made when encoding. + * + * @return int the unix timestamp of the date submitted + */ +function XML_RPC_iso8601_decode($idate, $utc = 0) +{ + $t = 0; + if (preg_match('@([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})@', $idate, $regs)) { + if ($utc) { + $t = gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]); + } else { + $t = mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]); + } + } + return $t; +} + +/** + * Converts an XML_RPC_Value object into native PHP types + * + * @param object $XML_RPC_val the XML_RPC_Value object to decode + * + * @return mixed the PHP values + */ +function XML_RPC_decode($XML_RPC_val) +{ + $kind = $XML_RPC_val->kindOf(); + + if ($kind == 'scalar') { + return $XML_RPC_val->scalarval(); + + } elseif ($kind == 'array') { + $size = $XML_RPC_val->arraysize(); + $arr = array(); + for ($i = 0; $i < $size; $i++) { + $arr[] = XML_RPC_decode($XML_RPC_val->arraymem($i)); + } + return $arr; + + } elseif ($kind == 'struct') { + $XML_RPC_val->structreset(); + $arr = array(); + while (list($key, $value) = $XML_RPC_val->structeach()) { + $arr[$key] = XML_RPC_decode($value); + } + return $arr; + } +} + +/** + * Converts native PHP types into an XML_RPC_Value object + * + * @param mixed $php_val the PHP value or variable you want encoded + * + * @return object the XML_RPC_Value object + */ +function XML_RPC_encode($php_val) +{ + $type = gettype($php_val); + $XML_RPC_val = new XML_RPC_Value; + + switch ($type) { + case 'array': + if (empty($php_val)) { + $XML_RPC_val->addArray($php_val); + break; + } + $tmp = array_diff(array_keys($php_val), range(0, count($php_val)-1)); + if (empty($tmp)) { + $arr = array(); + foreach ($php_val as $k => $v) { + $arr[$k] = XML_RPC_encode($v); + } + $XML_RPC_val->addArray($arr); + break; + } + // fall though if it's not an enumerated array + + case 'object': + $arr = array(); + foreach ($php_val as $k => $v) { + $arr[$k] = XML_RPC_encode($v); + } + $XML_RPC_val->addStruct($arr); + break; + + case 'integer': + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_Int']); + break; + + case 'double': + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_Double']); + break; + + case 'string': + case 'NULL': + if (preg_match('@^[0-9]{8}\T{1}[0-9]{2}\:[0-9]{2}\:[0-9]{2}$@', $php_val)) { + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_DateTime']); + } elseif ($GLOBALS['XML_RPC_auto_base64'] + && preg_match("@[^ -~\t\r\n]@", $php_val)) + { + // Characters other than alpha-numeric, punctuation, SP, TAB, + // LF and CR break the XML parser, encode value via Base 64. + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_Base64']); + } else { + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_String']); + } + break; + + case 'boolean': + // Add support for encoding/decoding of booleans, since they + // are supported in PHP + // by + $XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_Boolean']); + break; + + case 'unknown type': + default: + $XML_RPC_val = false; + } + return $XML_RPC_val; +} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * c-hanging-comment-ender-p: nil + * End: + */ + +?> diff --git a/usr/etc/inc/xmlrpc_server.inc b/usr/etc/inc/xmlrpc_server.inc new file mode 100644 index 000000000..f4d8a4611 --- /dev/null +++ b/usr/etc/inc/xmlrpc_server.inc @@ -0,0 +1,678 @@ + + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version SVN: $Id: Server.php 300961 2010-07-03 02:17:34Z danielc $ + * @link http://pear.php.net/package/XML_RPC + */ + + +/** + * Pull in the XML_RPC class + */ +require_once 'xmlrpc_client.inc'; + + +/** + * signature for system.listMethods: return = array, + * parameters = a string or nothing + * @global array $GLOBALS['XML_RPC_Server_listMethods_sig'] + */ +$GLOBALS['XML_RPC_Server_listMethods_sig'] = array( + array($GLOBALS['XML_RPC_Array'], + $GLOBALS['XML_RPC_String'] + ), + array($GLOBALS['XML_RPC_Array']) +); + +/** + * docstring for system.listMethods + * @global string $GLOBALS['XML_RPC_Server_listMethods_doc'] + */ +$GLOBALS['XML_RPC_Server_listMethods_doc'] = gettext('This method lists all the' + . ' methods that the XML-RPC server knows how to dispatch'); + +/** + * signature for system.methodSignature: return = array, + * parameters = string + * @global array $GLOBALS['XML_RPC_Server_methodSignature_sig'] + */ +$GLOBALS['XML_RPC_Server_methodSignature_sig'] = array( + array($GLOBALS['XML_RPC_Array'], + $GLOBALS['XML_RPC_String'] + ) +); + +/** + * docstring for system.methodSignature + * @global string $GLOBALS['XML_RPC_Server_methodSignature_doc'] + */ +$GLOBALS['XML_RPC_Server_methodSignature_doc'] = gettext('Returns an array of known' + . ' signatures (an array of arrays) for the method name passed. If' + . ' no signatures are known, returns a none-array (test for type !=' + . ' array to detect missing signature)'); + +/** + * signature for system.methodHelp: return = string, + * parameters = string + * @global array $GLOBALS['XML_RPC_Server_methodHelp_sig'] + */ +$GLOBALS['XML_RPC_Server_methodHelp_sig'] = array( + array($GLOBALS['XML_RPC_String'], + $GLOBALS['XML_RPC_String'] + ) +); + +/** + * docstring for methodHelp + * @global string $GLOBALS['XML_RPC_Server_methodHelp_doc'] + */ +$GLOBALS['XML_RPC_Server_methodHelp_doc'] = gettext('Returns help text if defined' + . ' for the method passed, otherwise returns an empty string'); + +/** + * dispatch map for the automatically declared XML-RPC methods. + * @global array $GLOBALS['XML_RPC_Server_dmap'] + */ +$GLOBALS['XML_RPC_Server_dmap'] = array( + 'system.listMethods' => array( + 'function' => 'XML_RPC_Server_listMethods', + 'signature' => $GLOBALS['XML_RPC_Server_listMethods_sig'], + 'docstring' => $GLOBALS['XML_RPC_Server_listMethods_doc'] + ), + 'system.methodHelp' => array( + 'function' => 'XML_RPC_Server_methodHelp', + 'signature' => $GLOBALS['XML_RPC_Server_methodHelp_sig'], + 'docstring' => $GLOBALS['XML_RPC_Server_methodHelp_doc'] + ), + 'system.methodSignature' => array( + 'function' => 'XML_RPC_Server_methodSignature', + 'signature' => $GLOBALS['XML_RPC_Server_methodSignature_sig'], + 'docstring' => $GLOBALS['XML_RPC_Server_methodSignature_doc'] + ) +); + +/** + * @global string $GLOBALS['XML_RPC_Server_debuginfo'] + */ +$GLOBALS['XML_RPC_Server_debuginfo'] = ''; + + +/** + * Lists all the methods that the XML-RPC server knows how to dispatch + * + * @return object a new XML_RPC_Response object + */ +function XML_RPC_Server_listMethods($server, $m) +{ + global $XML_RPC_err, $XML_RPC_str, $XML_RPC_Server_dmap; + + $v = new XML_RPC_Value(); + $outAr = array(); + foreach ($server->dmap as $key => $val) { + $outAr[] = new XML_RPC_Value($key, 'string'); + } + foreach ($XML_RPC_Server_dmap as $key => $val) { + $outAr[] = new XML_RPC_Value($key, 'string'); + } + $v->addArray($outAr); + return new XML_RPC_Response($v); +} + +/** + * Returns an array of known signatures (an array of arrays) + * for the given method + * + * If no signatures are known, returns a none-array + * (test for type != array to detect missing signature) + * + * @return object a new XML_RPC_Response object + */ +function XML_RPC_Server_methodSignature($server, $m) +{ + global $XML_RPC_err, $XML_RPC_str, $XML_RPC_Server_dmap; + + $methName = $m->getParam(0); + $methName = $methName->scalarval(); + if (strpos($methName, 'system.') === 0) { + $dmap = $XML_RPC_Server_dmap; + $sysCall = 1; + } else { + $dmap = $server->dmap; + $sysCall = 0; + } + // print "\n"; + if (isset($dmap[$methName])) { + if ($dmap[$methName]['signature']) { + $sigs = array(); + $thesigs = $dmap[$methName]['signature']; + for ($i = 0; $i < sizeof($thesigs); $i++) { + $cursig = array(); + $inSig = $thesigs[$i]; + for ($j = 0; $j < sizeof($inSig); $j++) { + $cursig[] = new XML_RPC_Value($inSig[$j], 'string'); + } + $sigs[] = new XML_RPC_Value($cursig, 'array'); + } + $r = new XML_RPC_Response(new XML_RPC_Value($sigs, 'array')); + } else { + $r = new XML_RPC_Response(new XML_RPC_Value('undef', 'string')); + } + } else { + $r = new XML_RPC_Response(0, $XML_RPC_err['introspect_unknown'], + $XML_RPC_str['introspect_unknown']); + } + return $r; +} + +/** + * Returns help text if defined for the method passed, otherwise returns + * an empty string + * + * @return object a new XML_RPC_Response object + */ +function XML_RPC_Server_methodHelp($server, $m) +{ + global $XML_RPC_err, $XML_RPC_str, $XML_RPC_Server_dmap; + + $methName = $m->getParam(0); + $methName = $methName->scalarval(); + if (strpos($methName, 'system.') === 0) { + $dmap = $XML_RPC_Server_dmap; + $sysCall = 1; + } else { + $dmap = $server->dmap; + $sysCall = 0; + } + + if (isset($dmap[$methName])) { + if ($dmap[$methName]['docstring']) { + $r = new XML_RPC_Response(new XML_RPC_Value($dmap[$methName]['docstring']), + 'string'); + } else { + $r = new XML_RPC_Response(new XML_RPC_Value('', 'string')); + } + } else { + $r = new XML_RPC_Response(0, $XML_RPC_err['introspect_unknown'], + $XML_RPC_str['introspect_unknown']); + } + return $r; +} + +/** + * @return void + */ +function XML_RPC_Server_debugmsg($m) +{ + global $XML_RPC_Server_debuginfo; + $XML_RPC_Server_debuginfo = $XML_RPC_Server_debuginfo . $m . "\n"; +} + + +/** + * A server for receiving and replying to XML RPC requests + * + * + * $server = new XML_RPC_Server( + * array( + * 'isan8' => + * array( + * 'function' => 'is_8', + * 'signature' => + * array( + * array('boolean', 'int'), + * array('boolean', 'int', 'boolean'), + * array('boolean', 'string'), + * array('boolean', 'string', 'boolean'), + * ), + * 'docstring' => 'Is the value an 8?' + * ), + * ), + * 1, + * 0 + * ); + * + * + * @category Web Services + * @package XML_RPC + * @author Edd Dumbill + * @author Stig Bakken + * @author Martin Jansen + * @author Daniel Convissor + * @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License + * @version Release: @package_version@ + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Server +{ + /** + * Should the payload's content be passed through mb_convert_encoding()? + * + * @see XML_RPC_Server::setConvertPayloadEncoding() + * @since Property available since Release 1.5.1 + * @var boolean + */ + var $convert_payload_encoding = false; + + /** + * The dispatch map, listing the methods this server provides. + * @var array + */ + var $dmap = array(); + + /** + * The present response's encoding + * @var string + * @see XML_RPC_Message::getEncoding() + */ + var $encoding = ''; + + /** + * Debug mode (0 = off, 1 = on) + * @var integer + */ + var $debug = 0; + + /** + * The response's HTTP headers + * @var string + */ + var $server_headers = ''; + + /** + * The response's XML payload + * @var string + */ + var $server_payload = ''; + + + /** + * The HTTP request data + * @null + */ + var $client_data = ''; + + /** + * Constructor for the XML_RPC_Server class + * + * @param array $dispMap the dispatch map. An associative array + * explaining each function. The keys of the main + * array are the procedure names used by the + * clients. The value is another associative array + * that contains up to three elements: + * + The 'function' element's value is the name + * of the function or method that gets called. + * To define a class' method: 'class::method'. + * + The 'signature' element (optional) is an + * array describing the return values and + * parameters + * + The 'docstring' element (optional) is a + * string describing what the method does + * @param int $serviceNow should the HTTP response be sent now? + * (1 = yes, 0 = no) + * @param int $debug should debug output be displayed? + * (1 = yes, 0 = no) + * + * @return void + */ + function XML_RPC_Server($dispMap, $serviceNow = 1, $debug = 0) + { + + if ($debug) { + $this->debug = 1; + } else { + $this->debug = 0; + } + + $this->dmap = $dispMap; + + if ($serviceNow) { + $this->service(); + } else { + $this->createServerPayload(); + $this->createServerHeaders(); + } + } + + /** + * @return string the debug information if debug debug mode is on + */ + function serializeDebug() + { + global $XML_RPC_Server_debuginfo; + + if ($this->debug) { + XML_RPC_Server_debugmsg('vvv POST DATA RECEIVED BY SERVER vvv' . "\n" + . $this->server_payload . $this->client_data + . "\n" . '^^^ END POST DATA ^^^'); + } + + if ($XML_RPC_Server_debuginfo != '') { + return "\n"; + } else { + return ''; + } + } + + /** + * Sets whether the payload's content gets passed through + * mb_convert_encoding() + * + * Returns PEAR_ERROR object if mb_convert_encoding() isn't available. + * + * @param int $in where 1 = on, 0 = off + * + * @return void + * + * @see XML_RPC_Message::getEncoding() + * @since Method available since Release 1.5.1 + */ + function setConvertPayloadEncoding($in) + { + if ($in && !function_exists('mb_convert_encoding')) { + return $this->raiseError('mb_convert_encoding() is not available', + XML_RPC_ERROR_PROGRAMMING); + } + $this->convert_payload_encoding = $in; + } + + /** + * Sends the response + * + * The encoding and content-type are determined by + * XML_RPC_Message::getEncoding() + * + * @return void + * + * @uses XML_RPC_Server::createServerPayload(), + * XML_RPC_Server::createServerHeaders() + */ + function service() + { + if (!$this->server_payload) { + $this->createServerPayload(); + } + if (!$this->server_headers) { + $this->createServerHeaders(); + } + + /* + * $server_headers needs to remain a string for compatibility with + * old scripts using this package, but PHP 4.4.2 no longer allows + * line breaks in header() calls. So, we split each header into + * an individual call. The initial replace handles the off chance + * that someone composed a single header with multiple lines, which + * the RFCs allow. + */ + $this->server_headers = preg_replace("@[\r\n]+[ \t]+@", + ' ', trim($this->server_headers)); + $headers = preg_split("@[\r\n]+@", $this->server_headers); + foreach ($headers as $header) + { + header($header); + } + + print $this->server_payload; + } + + /** + * Generates the payload and puts it in the $server_payload property + * + * If XML_RPC_Server::setConvertPayloadEncoding() was set to true, + * the payload gets passed through mb_convert_encoding() + * to ensure the payload matches the encoding set in the + * XML declaration. The encoding type can be manually set via + * XML_RPC_Message::setSendEncoding(). + * + * @return void + * + * @uses XML_RPC_Server::parseRequest(), XML_RPC_Server::$encoding, + * XML_RPC_Response::serialize(), XML_RPC_Server::serializeDebug() + * @see XML_RPC_Server::setConvertPayloadEncoding() + */ + function createServerPayload() + { + $this->client_data = file_get_contents("php://input"); + + $r = $this->parseRequest($this->client_data); + $this->server_payload = 'encoding . '"?>' . "\n" + . $this->serializeDebug() + . $r->serialize(); + if ($this->convert_payload_encoding) { + $this->server_payload = mb_convert_encoding($this->server_payload, + $this->encoding); + } + } + + /** + * Determines the HTTP headers and puts them in the $server_headers + * property + * + * @return boolean TRUE if okay, FALSE if $server_payload isn't set. + * + * @uses XML_RPC_Server::createServerPayload(), + * XML_RPC_Server::$server_headers + */ + function createServerHeaders() + { + if (!$this->server_payload) { + return false; + } + $this->server_headers = 'Content-Length: ' + . strlen($this->server_payload) . "\r\n" + . 'Content-Type: text/xml;' + . ' charset=' . $this->encoding; + return true; + } + + /** + * @return array + */ + function verifySignature($in, $sig) + { + for ($i = 0; $i < sizeof($sig); $i++) { + // check each possible signature in turn + $cursig = $sig[$i]; + if (sizeof($cursig) == $in->getNumParams() + 1) { + $itsOK = 1; + for ($n = 0; $n < $in->getNumParams(); $n++) { + $p = $in->getParam($n); + // print "\n"; + if ($p->kindOf() == 'scalar') { + $pt = $p->scalartyp(); + } else { + $pt = $p->kindOf(); + } + // $n+1 as first type of sig is return type + if ($pt != $cursig[$n+1]) { + $itsOK = 0; + $pno = $n+1; + $wanted = $cursig[$n+1]; + $got = $pt; + break; + } + } + if ($itsOK) { + return array(1); + } + } + } + if (isset($wanted)) { + return array(0, "Wanted ${wanted}, got ${got} at param ${pno}"); + } else { + $allowed = array(); + foreach ($sig as $val) { + end($val); + $allowed[] = key($val); + } + $allowed = array_unique($allowed); + $last = count($allowed) - 1; + if ($last > 0) { + $allowed[$last] = 'or ' . $allowed[$last]; + } + return array(0, + 'Signature permits ' . implode(', ', $allowed) + . ' parameters but the request had ' + . $in->getNumParams()); + } + } + + /** + * @return object a new XML_RPC_Response object + * + * @uses XML_RPC_Message::getEncoding(), XML_RPC_Server::$encoding + */ + function parseRequest($data = '') + { + global $XML_RPC_xh, + $XML_RPC_err, $XML_RPC_str, $XML_RPC_errxml, + $XML_RPC_defencoding, $XML_RPC_Server_dmap; + + if ($data == '') { + $data = file_get_contents("php://input"); + $this->client_data = $data; + } + + $this->encoding = XML_RPC_Message::getEncoding($data); + $parser_resource = xml_parser_create($this->encoding); + $parser = (int) $parser_resource; + + $XML_RPC_xh[$parser] = array(); + $XML_RPC_xh[$parser]['cm'] = 0; + $XML_RPC_xh[$parser]['isf'] = 0; + $XML_RPC_xh[$parser]['params'] = array(); + $XML_RPC_xh[$parser]['method'] = ''; + $XML_RPC_xh[$parser]['stack'] = array(); + $XML_RPC_xh[$parser]['valuestack'] = array(); + + $plist = ''; + + // decompose incoming XML into request structure + + xml_parser_set_option($parser_resource, XML_OPTION_CASE_FOLDING, true); + xml_set_element_handler($parser_resource, 'XML_RPC_se', 'XML_RPC_ee'); + xml_set_character_data_handler($parser_resource, 'XML_RPC_cd'); + if (!xml_parse($parser_resource, $data, 1)) { + // return XML error as a faultCode + $r = new XML_RPC_Response(0, + $XML_RPC_errxml+xml_get_error_code($parser_resource), + sprintf('XML error: %s at line %d', + xml_error_string(xml_get_error_code($parser_resource)), + xml_get_current_line_number($parser_resource))); + xml_parser_free($parser_resource); + } elseif ($XML_RPC_xh[$parser]['isf']>1) { + $r = new XML_RPC_Response(0, + $XML_RPC_err['invalid_request'], + $XML_RPC_str['invalid_request'] + . ': ' + . $XML_RPC_xh[$parser]['isf_reason']); + xml_parser_free($parser_resource); + } else { + xml_parser_free($parser_resource); + $m = new XML_RPC_Message($XML_RPC_xh[$parser]['method']); + // now add parameters in + for ($i = 0; $i < sizeof($XML_RPC_xh[$parser]['params']); $i++) { + // print '\n"; + $plist .= "$i - " . var_export($XML_RPC_xh[$parser]['params'][$i], true) . " \n"; + $m->addParam($XML_RPC_xh[$parser]['params'][$i]); + } + + if ($this->debug) { + XML_RPC_Server_debugmsg($plist); + } + + // now to deal with the method + $methName = $XML_RPC_xh[$parser]['method']; + if (strpos($methName, 'system.') === 0) { + $dmap = $XML_RPC_Server_dmap; + $sysCall = 1; + } else { + $dmap = $this->dmap; + $sysCall = 0; + } + + if (isset($dmap[$methName]['function']) + && is_string($dmap[$methName]['function']) + && strpos($dmap[$methName]['function'], '::') !== false) + { + $dmap[$methName]['function'] = + explode('::', $dmap[$methName]['function']); + } + + if (isset($dmap[$methName]['function']) + && is_callable($dmap[$methName]['function'])) + { + // dispatch if exists + if (isset($dmap[$methName]['signature'])) { + $sr = $this->verifySignature($m, + $dmap[$methName]['signature'] ); + } + if (!isset($dmap[$methName]['signature']) || $sr[0]) { + // if no signature or correct signature + if ($sysCall) { + $r = call_user_func($dmap[$methName]['function'], $this, $m); + } else { + $r = call_user_func($dmap[$methName]['function'], $m); + } + if (!is_a($r, 'XML_RPC_Response')) { + $r = new XML_RPC_Response(0, $XML_RPC_err['not_response_object'], + $XML_RPC_str['not_response_object']); + } + } else { + $r = new XML_RPC_Response(0, $XML_RPC_err['incorrect_params'], + $XML_RPC_str['incorrect_params'] + . ': ' . $sr[1]); + } + } else { + // else prepare error response + $r = new XML_RPC_Response(0, $XML_RPC_err['unknown_method'], + $XML_RPC_str['unknown_method']); + } + } + return $r; + } + + /** + * Echos back the input packet as a string value + * + * @return void + * + * Useful for debugging. + */ + function echoInput() + { + $r = new XML_RPC_Response(0); + $r->xv = new XML_RPC_Value("'Aha said I: '" . $this->client_data, 'string'); + print $r->serialize(); + } +} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * c-hanging-comment-ender-p: nil + * End: + */ + +?> diff --git a/usr/etc/inc/zeromq.inc b/usr/etc/inc/zeromq.inc new file mode 100644 index 000000000..db40ce958 --- /dev/null +++ b/usr/etc/inc/zeromq.inc @@ -0,0 +1,313 @@ + + 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('ZEROMQ_AUTH_FAIL', 'authfail'); +define('ZEROMQ_TRUE', 'true'); +define('ZEROMQ_FASLE', 'false'); + +$do_not_include_config_gui_inc = true; +require("auth.inc"); + +//$debug = true; + +/* zeromq_send: Send a message to a member node */ +function zeromq_send($protocol = "tcp", $ipaddress = "127.0.0.1", $port = "8888", + $method, $params, $username, $password) { + + global $debug; + + /* Set calling function and auth information */ + $xmlparams = array( + $username, + $password, + $method, + $params + ); + + /* Create new queue object */ + $queue = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REQ, "MySock1"); + $queue->connect("{$protocol}://{$ipaddress}:{$port}"); + + /* Assign socket 1 to the queue, send and receive */ + $result = $queue->send(serialize($xmlparams))->recv(); + + /* xmlrpc_params_to_php() the result and return */ + $unserializedresult = unserialize($result); + + /* Return the result to the caller */ + return $unserializedresult; +} + +function zeromq_server($protocol = "tcp", $ipaddress = "127.0.0.1", $port = "8888") { + global $debug; + if(!$ipaddress || !$port) { + if($debug) + echo "ERROR: You must pass, proto, ipaddress and port\n"; + return; + } + if($debug) + echo "Creating ZMQSocket()\n"; + $server = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REP); + if($debug) + echo "Binding to {$protocol}://{$ipaddress}:{$port}\n"; + $server->bind("{$protocol}://{$ipaddress}:{$port}"); + if($debug) + echo "Entering while() loop\n"; + while ($msg = $server->recv()) { + // Convert the XML to a PHP array + $message = unserialize($msg); + if($debug) { + echo "Message received:\n"; + print_r($message); + } + switch ($message[2]) { + case "pfsense.exec_shell": + $function_to_call = "exec_shell_zeromq"; + break; + case "pfsense.exec_php": + $function_to_call = "exec_php_zeromq"; + break; + case "pfsense.filter_configure": + $function_to_call = "filter_configure_zeromq"; + break; + case "pfsense.interfaces_carp_configure": + $function_to_call = "interfaces_carp_configure_zeromq"; + break; + case "pfsense.backup_config_section": + $function_to_call = "backup_config_section_zeromq"; + break; + case "pfsense.restore_config_section": + $function_to_call = "restore_config_section_zeromq"; + break; + case "pfsense.merge_config_section": + $function_to_call = "merge_config_section_zeromq"; + break; + case "pfsense.merge_installedpackages_section_zeromq": + $function_to_call = "merge_installedpackages_section_zeromq"; + break; + case "pfsense.check_firmware_version": + $function_to_call = "check_firmware_version_zeromq"; + break; + case "pfsense.reboot": + $function_to_call = "reboot_zeromq"; + break; + case "pfsense.get_notices": + $function_to_call = "get_notices_zeromq"; + break; + } + if(!$function_to_call) { + if($debug) + echo "ERROR: Could not find a function to call"; + return; + } else { + if($debug) + echo "Invoking function {$message[2]}()\n;"; + } + /* Call function that is being invoked */ + $result = $function_to_call($message); + /* echo back the result */ + $server->send($result); + } +} + +function zeromq_auth($params) { + global $config, $g, $debug; + + $username = $params[0]; + $passwd = $params[1]; + + $user = getUserEntry($username); + if (!$user) { + if($debug) + echo "Could not locate user $username with getUserEntry()\n"; + return false; + } + + if (is_account_disabled($username) || is_account_expired($username)) { + if($debug) + echo "Returning account expired/disabled\n"; + return false; + } + + if ($user['password']) { + $passwd = crypt($passwd, $user['password']); + if ($passwd == $user['password']) + return true; + } + + if ($user['md5-hash']) { + $passwd = md5($passwd); + if ($passwd == $user['md5-hash']) + return true; + } + + if($debug) + echo "zeromq_auth() fall through == false\n"; + + return false; +} + +function exec_php_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) { + if($debug) + echo "Auth failed in exec_shell_zeromq()\n"; + return ZEROMQ_AUTH_FAIL; + } + $exec_php = $params[3]; + if($debug) + echo "Running exec_php_zeromq(): {$exec_php}\n"; + eval($exec_php); + if($toreturn) { + return serialize($toreturn); + } else + return ZEROMQ_FASLE; +} + +function exec_shell_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) { + if($debug) + echo "Auth failed in exec_shell_zeromq()\n"; + return ZEROMQ_AUTH_FAIL; + } + $shell_cmd = $params[3]; + if($debug) + echo "Running exec_shell_zeromq(): {$shell_cmd}\n"; + mwexec($shell_cmd); + return ZEROMQ_FASLE; +} + +function backup_config_section_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + $val = array_intersect_key($config, array_flip($params[3])); + return serialize($val); +} + +function restore_config_section_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + $config = array_merge($config, $params[3]); + $mergedkeys = implode(",", array_keys($params[3])); + write_config(sprintf(gettext("Merged in config (%s sections) from ZeroMQ client."),$mergedkeys)); + return ZEROMQ_FASLE; +} + +function merge_installedpackages_section_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + $config['installedpackages'] = array_merge($config['installedpackages'], $params[0]); + $mergedkeys = implode(",", array_keys($params[3])); + write_config(sprintf(gettext("Merged in config (%s sections) from ZeroMQ client."),$mergedkeys)); + return ZEROMQ_FASLE; +} + +function merge_config_section_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + $config = array_merge_recursive_unique($config, $params[0]); + $mergedkeys = implode(",", array_keys($params[3])); + write_config("Merged in config ({$mergedkeys} sections) from ZeroMQ client."); + return ZEROMQ_FASLE; +} + +function filter_configure_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + filter_configure(); + system_routing_configure(); + setup_gateways_monitor(); + relayd_configure(); + require_once("openvpn.inc"); + openvpn_resync_all(); + services_dhcpd_configure(); + if (isset($config['dnsmasq']['enable'])) + services_dnsmasq_configure(); + elseif (isset($config['unbound']['enable'])) + services_unbound_configure(); + local_sync_accounts(); + return ZEROMQ_FASLE; +} + +function interfaces_carp_configure_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + interfaces_carp_setup(); + interfaces_vips_configure(); + return ZEROMQ_FASLE; +} + +function check_firmware_version_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + return serialize(check_firmware_version(false)); +} + +function reboot_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + mwexec_bg("/etc/rc.reboot"); + return ZEROMQ_FASLE; +} + +function get_notices_zeromq($raw_params) { + global $config, $g, $debug; + $params = $raw_params; + if(zeromq_auth($raw_params) == false) + return ZEROMQ_AUTH_FAIL; + if(!function_exists("get_notices")) + require("notices.inc"); + if(!$params) { + $toreturn = get_notices(); + } else { + $toreturn = get_notices($params); + } + return serialize($toreturn); +} + +?> diff --git a/usr/etc/inetd.conf b/usr/etc/inetd.conf new file mode 100644 index 000000000..0ff37aeab --- /dev/null +++ b/usr/etc/inetd.conf @@ -0,0 +1 @@ +tftp-proxy dgram udp wait root /usr/libexec/tftp-proxy tftp-proxy \ No newline at end of file diff --git a/usr/etc/login.conf b/usr/etc/login.conf new file mode 100644 index 000000000..7d26d3a92 --- /dev/null +++ b/usr/etc/login.conf @@ -0,0 +1,317 @@ +# login.conf - login class capabilities database. +# +# Remember to rebuild the database after each change to this file: +# +# cap_mkdb /etc/login.conf +# +# This file controls resource limits, accounting limits and +# default user environment settings. +# +# $FreeBSD: src/etc/login.conf,v 1.34.2.6 2002/07/02 20:06:18 dillon Exp $ +# + +# Default settings effectively disable resource limits, see the +# examples below for a starting point to enable them. + +# defaults +# These settings are used by login(1) by default for classless users +# Note that entries like "cputime" set both "cputime-cur" and "cputime-max" + +default:\ + :passwd_format=md5:\ + :copyright=/etc/COPYRIGHT:\ + :welcome=/etc/motd:\ + :setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES:\ + :path=/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin ~/bin:\ + :nologin=/var/run/nologin:\ + :cputime=unlimited:\ + :datasize=unlimited:\ + :stacksize=unlimited:\ + :memorylocked=unlimited:\ + :memoryuse=unlimited:\ + :filesize=unlimited:\ + :coredumpsize=unlimited:\ + :openfiles=unlimited:\ + :maxproc=unlimited:\ + :sbsize=unlimited:\ + :vmemoryuse=unlimited:\ + :idletime=unlimited:\ + :priority=0:\ + :ignoretime@:\ + :umask=022: + + +# +# A collection of common class names - forward them all to 'default' +# (login would normally do this anyway, but having a class name +# here suppresses the diagnostic) +# +standard:\ + :tc=default: +xuser:\ + :tc=default: +staff:\ + :tc=default: +daemon:\ + :tc=default: +news:\ + :tc=default: +dialer:\ + :tc=default: + +# +# Root can always login +# +# N.B. login_getpwclass(3) will use this entry for the root account, +# in preference to 'default'. +root:\ + :ignorenologin:\ + :tc=default: + +# +# Russian Users Accounts. Setup proper environment variables. +# +russian|Russian Users Accounts:\ + :charset=KOI8-R:\ + :lang=ru_RU.KOI8-R:\ + :tc=default: + + +###################################################################### +###################################################################### +## +## Example entries +## +###################################################################### +###################################################################### + +## Example defaults +## These settings are used by login(1) by default for classless users +## Note that entries like "cputime" set both "cputime-cur" and "cputime-max" +# +#default:\ +# :cputime=infinity:\ +# :datasize-cur=22M:\ +# :stacksize-cur=8M:\ +# :memorylocked-cur=10M:\ +# :memoryuse-cur=30M:\ +# :filesize=infinity:\ +# :coredumpsize=infinity:\ +# :maxproc-cur=64:\ +# :openfiles-cur=64:\ +# :priority=0:\ +# :requirehome@:\ +# :umask=022:\ +# :tc=auth-defaults: +# +# +## +## standard - standard user defaults +## +#standard:\ +# :copyright=/etc/COPYRIGHT:\ +# :welcome=/etc/motd:\ +# :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ +# :path=~/bin /bin /usr/bin /usr/local/bin:\ +# :manpath=/usr/share/man /usr/local/man:\ +# :nologin=/var/run/nologin:\ +# :cputime=1h30m:\ +# :datasize=8M:\ +# :vmemoryuse=100M:\ +# :stacksize=2M:\ +# :memorylocked=4M:\ +# :memoryuse=8M:\ +# :filesize=8M:\ +# :coredumpsize=8M:\ +# :openfiles=24:\ +# :maxproc=32:\ +# :priority=0:\ +# :requirehome:\ +# :passwordtime=90d:\ +# :umask=002:\ +# :ignoretime@:\ +# :tc=default: +# +# +## +## users of X (needs more resources!) +## +#xuser:\ +# :manpath=/usr/share/man /usr/X11R6/man /usr/local/man:\ +# :cputime=4h:\ +# :datasize=12M:\ +# :vmemoryuse=infinity:\ +# :stacksize=4M:\ +# :filesize=8M:\ +# :memoryuse=16M:\ +# :openfiles=32:\ +# :maxproc=48:\ +# :tc=standard: +# +# +## +## Staff users - few restrictions and allow login anytime +## +#staff:\ +# :ignorenologin:\ +# :ignoretime:\ +# :requirehome@:\ +# :accounted@:\ +# :path=~/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin:\ +# :umask=022:\ +# :tc=standard: +# +# +## +## root - fallback for root logins +## +#root:\ +# :path=~/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin:\ +# :cputime=infinity:\ +# :datasize=infinity:\ +# :stacksize=infinity:\ +# :memorylocked=infinity:\ +# :memoryuse=infinity:\ +# :filesize=infinity:\ +# :coredumpsize=infinity:\ +# :openfiles=infinity:\ +# :maxproc=infinity:\ +# :memoryuse-cur=32M:\ +# :maxproc-cur=64:\ +# :openfiles-cur=1024:\ +# :priority=0:\ +# :requirehome@:\ +# :umask=022:\ +# :tc=auth-root-defaults: +# +# +## +## Settings used by /etc/rc +## +#daemon:\ +# :coredumpsize@:\ +# :coredumpsize-cur=0:\ +# :datasize=infinity:\ +# :datasize-cur@:\ +# :maxproc=512:\ +# :maxproc-cur@:\ +# :memoryuse-cur=64M:\ +# :memorylocked-cur=64M:\ +# :openfiles=1024:\ +# :openfiles-cur@:\ +# :stacksize=16M:\ +# :stacksize-cur@:\ +# :tc=default: +# +# +## +## Settings used by news subsystem +## +#news:\ +# :path=/usr/local/news/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin:\ +# :cputime=infinity:\ +# :filesize=128M:\ +# :datasize-cur=64M:\ +# :stacksize-cur=32M:\ +# :coredumpsize-cur=0:\ +# :maxmemorysize-cur=128M:\ +# :memorylocked=32M:\ +# :maxproc=128:\ +# :openfiles=256:\ +# :tc=default: +# +# +## +## The dialer class should be used for a dialup PPP/SLIP accounts +## Welcome messages/news suppressed +## +#dialer:\ +# :hushlogin:\ +# :requirehome@:\ +# :cputime=unlimited:\ +# :filesize=2M:\ +# :datasize=2M:\ +# :stacksize=4M:\ +# :coredumpsize=0:\ +# :memoryuse=4M:\ +# :memorylocked=1M:\ +# :maxproc=16:\ +# :openfiles=32:\ +# :tc=standard: +# +# +## +## Site full-time 24/7 PPP/SLIP connections +## - no time accounting, restricted to access via dialin lines +## +#site:\ +# :ignoretime:\ +# :passwordtime@:\ +# :refreshtime@:\ +# :refreshperiod@:\ +# :sessionlimit@:\ +# :autodelete@:\ +# :expireperiod@:\ +# :graceexpire@:\ +# :gracetime@:\ +# :warnexpire@:\ +# :warnpassword@:\ +# :idletime@:\ +# :sessiontime@:\ +# :daytime@:\ +# :weektime@:\ +# :monthtime@:\ +# :warntime@:\ +# :accounted@:\ +# :tc=dialer:\ +# :tc=staff: +# +# +## +## Example standard accounting entries for subscriber levels +## +# +#subscriber|Subscribers:\ +# :accounted:\ +# :refreshtime=180d:\ +# :refreshperiod@:\ +# :sessionlimit@:\ +# :autodelete=30d:\ +# :expireperiod=180d:\ +# :graceexpire=7d:\ +# :gracetime=10m:\ +# :warnexpire=7d:\ +# :warnpassword=7d:\ +# :idletime=30m:\ +# :sessiontime=4h:\ +# :daytime=6h:\ +# :weektime=40h:\ +# :monthtime=120h:\ +# :warntime=4h:\ +# :tc=standard: +# +# +## +## Subscriber accounts. These accounts have their login times +## accounted and have access limits applied. +## +#subppp|PPP Subscriber Accounts:\ +# :tc=dialer:\ +# :tc=subscriber: +# +# +#subslip|SLIP Subscriber Accounts:\ +# :tc=dialer:\ +# :tc=subscriber: +# +# +#subshell|Shell Subscriber Accounts:\ +# :tc=subscriber: +# +## +## If you want some of the accounts to use traditional UNIX DES based +## password hashes. +## +#des_users:\ +# :passwd_format=des:\ +# :tc=default: diff --git a/usr/etc/master.passwd b/usr/etc/master.passwd new file mode 100644 index 000000000..bb46954b4 --- /dev/null +++ b/usr/etc/master.passwd @@ -0,0 +1,29 @@ +# $FreeBSD: src/etc/master.passwd,v 1.39 2004/08/01 21:33:47 markm Exp $ +# +root:$1$9ZCIHWSF$/6MpmsZXSQbkARathg3cX1:0:0::0:0:Charlie &:/root:/bin/sh +toor:*:0:0::0:0:Bourne-again Superuser:/root: +daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin +operator:*:2:5::0:0:System &:/:/usr/sbin/nologin +bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin +tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin +kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin +games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin +news:*:8:8::0:0:News Subsystem:/:/usr/sbin/nologin +man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin +sshd:*:22:22::0:0:Secure Shell Daemon:/var/empty:/usr/sbin/nologin +smmsp:*:25:25::0:0:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin +mailnull:*:26:26::0:0:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin +bind:*:53:53::0:0:Bind Sandbox:/:/usr/sbin/nologin +unbound:*:59:59::0:0:Unbound DNS Resolver:/var/unbound:/usr/sbin/nologin +proxy:*:62:62::0:0:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin +_pflogd:*:64:64::0:0:pflogd privsep user:/var/empty:/usr/sbin/nologin +www:*:80:80::0:0:World Wide Web Owner:/nonexistent:/usr/sbin/nologin +nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin +dhcpd:*:1002:1002::0:0:DHCP Daemon:/nonexistent:/sbin/nologin +admin:$1$9ZCIHWSF$/6MpmsZXSQbkARathg3cX1:0:0::0:0:Admin User:/root:/bin/sh +_dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin +_isakmpd:*:68:68::0:0:isakmpd privsep:/var/empty:/sbin/nologin +uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico +pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin +_ntp:*:123:123::0:0:NTP daemon:/var/empty:/sbin/nologin +_relayd:*:913:913::0:0:Relay Daemon:/var/empty:/usr/sbin/nologin diff --git a/usr/etc/motd b/usr/etc/motd new file mode 100644 index 000000000..e69de29bb diff --git a/usr/etc/mtree/BSD.local.dist b/usr/etc/mtree/BSD.local.dist new file mode 100644 index 000000000..e69de29bb diff --git a/usr/etc/networks b/usr/etc/networks new file mode 100644 index 000000000..92982b5b2 --- /dev/null +++ b/usr/etc/networks @@ -0,0 +1,17 @@ +# $FreeBSD: src/etc/networks,v 1.3 1999/08/27 23:23:42 peter Exp $ +# @(#)networks 5.1 (Berkeley) 6/30/90 +# +# Your Local Networks Database +# +your-net 127 # your comment +your-netmask 255.255.255 # subnet mask for your-net + +# +# Your subnets +# +subnet1 127.0.1 alias1 # comment 1 +subnet2 127.0.2 alias2 # comment 2 + +# +# Internet networks (from nic.ddn.mil) +# diff --git a/usr/etc/passwd b/usr/etc/passwd new file mode 100644 index 000000000..040f3e535 --- /dev/null +++ b/usr/etc/passwd @@ -0,0 +1,26 @@ +root:*:0:0:Charlie &:/root:/bin/sh +toor:*:0:0:Bourne-again Superuser:/root: +daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin +operator:*:2:5:System &:/:/usr/sbin/nologin +bin:*:3:7:Binaries Commands and Source:/:/usr/sbin/nologin +tty:*:4:65533:Tty Sandbox:/:/usr/sbin/nologin +kmem:*:5:65533:KMem Sandbox:/:/usr/sbin/nologin +games:*:7:13:Games pseudo-user:/usr/games:/usr/sbin/nologin +news:*:8:8:News Subsystem:/:/usr/sbin/nologin +man:*:9:9:Mister Man Pages:/usr/share/man:/usr/sbin/nologin +sshd:*:22:22:Secure Shell Daemon:/var/empty:/usr/sbin/nologin +smmsp:*:25:25:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin +mailnull:*:26:26:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin +bind:*:53:53:Bind Sandbox:/:/usr/sbin/nologin +unbound:*:59:59:Unbound DNS Resolver:/var/unbound:/usr/sbin/nologin +proxy:*:62:62:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin +_pflogd:*:64:64:pflogd privsep user:/var/empty:/usr/sbin/nologin +uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico +pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin +www:*:80:80:World Wide Web Owner:/nonexistent:/usr/sbin/nologin +nobody:*:65534:65534:Unprivileged user:/nonexistent:/usr/sbin/nologin +distcc:*:1001:1001:Distcc:/home/distcc:/sbin/nologin +dhcpd:*:1002:1002:DHCP Daemon:/nonexistent:/sbin/nologin +admin:*:0:0:Admin User:/home/admin:/bin/sh +_ntp:*:123:123:NTP daemon:/var/empty:/sbin/nologin +_relayd:*:913:913:Relay Daemon:/var/empty:/usr/sbin/nologin diff --git a/usr/etc/pf.os b/usr/etc/pf.os new file mode 100644 index 000000000..56c7cbf5a --- /dev/null +++ b/usr/etc/pf.os @@ -0,0 +1,698 @@ +# $FreeBSD: stable/10/etc/pf.os 244096 2012-12-10 20:52:52Z delphij $ +# $OpenBSD: pf.os,v 1.26 2012/08/03 12:25:16 jsg Exp $ +# passive OS fingerprinting +# ------------------------- +# +# SYN signatures. Those signatures work for SYN packets only (duh!). +# +# (C) Copyright 2000-2003 by Michal Zalewski +# (C) Copyright 2003 by Mike Frantzen +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# +# This fingerprint database is adapted from Michal Zalewski's p0f passive +# operating system package. The last database sync was from a Nov 3 2003 +# p0f.fp. +# +# +# Each line in this file specifies a single fingerprint. Please read the +# information below carefully before attempting to append any signatures +# reported as UNKNOWN to this file to avoid mistakes. +# +# We use the following set metrics for fingerprinting: +# +# - Window size (WSS) - a highly OS dependent setting used for TCP/IP +# performance control (max. amount of data to be sent without ACK). +# Some systems use a fixed value for initial packets. On other +# systems, it is a multiple of MSS or MTU (MSS+40). In some rare +# cases, the value is just arbitrary. +# +# NEW SIGNATURE: if p0f reported a special value of 'Snn', the number +# appears to be a multiple of MSS (MSS*nn); a special value of 'Tnn' +# means it is a multiple of MTU ((MSS+40)*nn). Unless you notice the +# value of nn is not fixed (unlikely), just copy the Snn or Tnn token +# literally. If you know this device has a simple stack and a fixed +# MTU, you can however multiply S value by MSS, or T value by MSS+40, +# and put it instead of Snn or Tnn. +# +# If WSS otherwise looks like a fixed value (for example a multiple +# of two), or if you can confirm the value is fixed, please quote +# it literally. If there's no apparent pattern in WSS chosen, you +# should consider wildcarding this value. +# +# - Overall packet size - a function of all IP and TCP options and bugs. +# +# NEW SIGNATURE: Copy this value literally. +# +# - Initial TTL - We check the actual TTL of a received packet. It can't +# be higher than the initial TTL, and also shouldn't be dramatically +# lower (maximum distance is defined as 40 hops). +# +# NEW SIGNATURE: *Never* copy TTL from a p0f-reported signature literally. +# You need to determine the initial TTL. The best way to do it is to +# check the documentation for a remote system, or check its settings. +# A fairly good method is to simply round the observed TTL up to +# 32, 64, 128, or 255, but it should be noted that some obscure devices +# might not use round TTLs (in particular, some shoddy appliances use +# "original" initial TTL settings). If not sure, you can see how many +# hops you're away from the remote party with traceroute or mtr. +# +# - Don't fragment flag (DF) - some modern OSes set this to implement PMTU +# discovery. Others do not bother. +# +# NEW SIGNATURE: Copy this value literally. +# +# - Maximum segment size (MSS) - this setting is usually link-dependent. P0f +# uses it to determine link type of the remote host. +# +# NEW SIGNATURE: Always wildcard this value, except for rare cases when +# you have an appliance with a fixed value, know the system supports only +# a very limited number of network interface types, or know the system +# is using a value it pulled out of nowhere. Specific unique MSS +# can be used to tell Google crawlbots from the rest of the population. +# +# - Window scaling (WSCALE) - this feature is used to scale WSS. +# It extends the size of a TCP/IP window to 32 bits. Some modern +# systems implement this feature. +# +# NEW SIGNATURE: Observe several signatures. Initial WSCALE is often set +# to zero or other low value. There's usually no need to wildcard this +# parameter. +# +# - Timestamp - some systems that implement timestamps set them to +# zero in the initial SYN. This case is detected and handled appropriately. +# +# - Selective ACK permitted - a flag set by systems that implement +# selective ACK functionality. +# +# - The sequence of TCP all options (MSS, window scaling, selective ACK +# permitted, timestamp, NOP). Other than the options previously +# discussed, p0f also checks for timestamp option (a silly +# extension to broadcast your uptime ;-), NOP options (used for +# header padding) and sackOK option (selective ACK feature). +# +# NEW SIGNATURE: Copy the sequence literally. +# +# To wildcard any value (except for initial TTL or TCP options), replace +# it with '*'. You can also use a modulo operator to match any values +# that divide by nnn - '%nnn'. +# +# Fingerprint entry format: +# +# wwww:ttt:D:ss:OOO...:OS:Version:Subtype:Details +# +# wwww - window size (can be *, %nnn, Snn or Tnn). The special values +# "S" and "T" which are a multiple of MSS or a multiple of MTU +# respectively. +# ttt - initial TTL +# D - don't fragment bit (0 - not set, 1 - set) +# ss - overall SYN packet size +# OOO - option value and order specification (see below) +# OS - OS genre (Linux, Solaris, Windows) +# Version - OS Version (2.0.27 on x86, etc) +# Subtype - OS subtype or patchlevel (SP3, lo0) +# details - Generic OS details +# +# If OS genre starts with '*', p0f will not show distance, link type +# and timestamp data. It is useful for userland TCP/IP stacks of +# network scanners and so on, where many settings are randomized or +# bogus. +# +# If OS genre starts with @, it denotes an approximate hit for a group +# of operating systems (signature reporting still enabled in this case). +# Use this feature at the end of this file to catch cases for which +# you don't have a precise match, but can tell it's Windows or FreeBSD +# or whatnot by looking at, say, flag layout alone. +# +# Option block description is a list of comma or space separated +# options in the order they appear in the packet: +# +# N - NOP option +# Wnnn - window scaling option, value nnn (or * or %nnn) +# Mnnn - maximum segment size option, value nnn (or * or %nnn) +# S - selective ACK OK +# T - timestamp +# T0 - timestamp with a zero value +# +# To denote no TCP options, use a single '.'. +# +# Please report any additions to this file, or any inaccuracies or +# problems spotted, to the maintainers: lcamtuf@coredump.cx, +# frantzen@openbsd.org and bugs@openbsd.org with a tcpdump packet +# capture of the relevant SYN packet(s) +# +# A test and submission page is available at +# http://lcamtuf.coredump.cx/p0f-help/ +# +# +# WARNING WARNING WARNING +# ----------------------- +# +# Do not add a system X as OS Y just because NMAP says so. It is often +# the case that X is a NAT firewall. While nmap is talking to the +# device itself, p0f is fingerprinting the guy behind the firewall +# instead. +# +# When in doubt, use common sense, don't add something that looks like +# a completely different system as Linux or FreeBSD or LinkSys router. +# Check DNS name, establish a connection to the remote host and look +# at SYN+ACK - does it look similar? +# +# Some users tweak their TCP/IP settings - enable or disable RFC1323 +# functionality, enable or disable timestamps or selective ACK, +# disable PMTU discovery, change MTU and so on. Always compare a new rule +# to other fingerprints for this system, and verify the system isn't +# "customized" before adding it. It is OK to add signature variants +# caused by a commonly used software (personal firewalls, security +# packages, etc), but it makes no sense to try to add every single +# possible /proc/sys/net/ipv4 tweak on Linux or so. +# +# KEEP IN MIND: Some packet firewalls configured to normalize outgoing +# traffic (OpenBSD pf with "scrub" enabled, for example) will, well, +# normalize packets. Signatures will not correspond to the originating +# system (and probably not quite to the firewall either). +# +# NOTE: Try to keep this file in some reasonable order, from most to +# least likely systems. This will speed up operation. Also keep most +# generic and broad rules near the end. +# + +########################## +# Standard OS signatures # +########################## + +# ----------------- AIX --------------------- + +# AIX is first because its signatures are close to NetBSD, MacOS X and +# Linux 2.0, but it uses a fairly rare MSSes, at least sometimes... +# This is a shoddy hack, though. + +45046:64:0:44:M*: AIX:4.3::AIX 4.3 +16384:64:0:44:M512: AIX:4.3:2-3:AIX 4.3.2 and earlier + +16384:64:0:60:M512,N,W%2,N,N,T: AIX:4.3:3:AIX 4.3.3-5.2 +16384:64:0:60:M512,N,W%2,N,N,T: AIX:5.1-5.2::AIX 4.3.3-5.2 +32768:64:0:60:M512,N,W%2,N,N,T: AIX:4.3:3:AIX 4.3.3-5.2 +32768:64:0:60:M512,N,W%2,N,N,T: AIX:5.1-5.2::AIX 4.3.3-5.2 +65535:64:0:60:M512,N,W%2,N,N,T: AIX:4.3:3:AIX 4.3.3-5.2 +65535:64:0:60:M512,N,W%2,N,N,T: AIX:5.1-5.2::AIX 4.3.3-5.2 +65535:64:0:64:M*,N,W1,N,N,T,N,N,S: AIX:5.3:ML1:AIX 5.3 ML1 + +# ----------------- Linux ------------------- + +# S1:64:0:44:M*:A: Linux:1.2::Linux 1.2.x (XXX quirks support) +512:64:0:44:M*: Linux:2.0:3x:Linux 2.0.3x +16384:64:0:44:M*: Linux:2.0:3x:Linux 2.0.3x + +# Endian snafu! Nelson says "ha-ha": +2:64:0:44:M*: Linux:2.0:3x:Linux 2.0.3x (MkLinux) on Mac +64:64:0:44:M*: Linux:2.0:3x:Linux 2.0.3x (MkLinux) on Mac + + +S4:64:1:60:M1360,S,T,N,W0: Linux:google::Linux (Google crawlbot) + +S2:64:1:60:M*,S,T,N,W0: Linux:2.4::Linux 2.4 (big boy) +S3:64:1:60:M*,S,T,N,W0: Linux:2.4:.18-21:Linux 2.4.18 and newer +S4:64:1:60:M*,S,T,N,W0: Linux:2.4::Linux 2.4/2.6 <= 2.6.7 +S4:64:1:60:M*,S,T,N,W0: Linux:2.6:.1-7:Linux 2.4/2.6 <= 2.6.7 + +S4:64:1:60:M*,S,T,N,W5: Linux:2.6::Linux 2.6 (newer, 1) +S4:64:1:60:M*,S,T,N,W6: Linux:2.6::Linux 2.6 (newer, 2) +S4:64:1:60:M*,S,T,N,W7: Linux:2.6::Linux 2.6 (newer, 3) +T4:64:1:60:M*,S,T,N,W7: Linux:2.6::Linux 2.6 (newer, 4) + +S10:64:1:60:M*,S,T,N,W4: Linux:3.0::Linux 3.0 + +S3:64:1:60:M*,S,T,N,W1: Linux:2.5::Linux 2.5 (sometimes 2.4) +S4:64:1:60:M*,S,T,N,W1: Linux:2.5-2.6::Linux 2.5/2.6 +S3:64:1:60:M*,S,T,N,W2: Linux:2.5::Linux 2.5 (sometimes 2.4) +S4:64:1:60:M*,S,T,N,W2: Linux:2.5::Linux 2.5 (sometimes 2.4) + +S20:64:1:60:M*,S,T,N,W0: Linux:2.2:20-25:Linux 2.2.20 and newer +S22:64:1:60:M*,S,T,N,W0: Linux:2.2::Linux 2.2 +S11:64:1:60:M*,S,T,N,W0: Linux:2.2::Linux 2.2 + +# Popular cluster config scripts disable timestamps and +# selective ACK: +S4:64:1:48:M1460,N,W0: Linux:2.4:cluster:Linux 2.4 in cluster + +# This needs to be investigated. On some systems, WSS +# is selected as a multiple of MTU instead of MSS. I got +# many submissions for this for many late versions of 2.4: +T4:64:1:60:M1412,S,T,N,W0: Linux:2.4::Linux 2.4 (late, uncommon) + +# This happens only over loopback, but let's make folks happy: +32767:64:1:60:M16396,S,T,N,W0: Linux:2.4:lo0:Linux 2.4 (local) +S8:64:1:60:M3884,S,T,N,W0: Linux:2.2:lo0:Linux 2.2 (local) + +# Opera visitors: +16384:64:1:60:M*,S,T,N,W0: Linux:2.2:Opera:Linux 2.2 (Opera?) +32767:64:1:60:M*,S,T,N,W0: Linux:2.4:Opera:Linux 2.4 (Opera?) + +# Some fairly common mods: +S4:64:1:52:M*,N,N,S,N,W0: Linux:2.4:ts:Linux 2.4 w/o timestamps +S22:64:1:52:M*,N,N,S,N,W0: Linux:2.2:ts:Linux 2.2 w/o timestamps + + +# ----------------- FreeBSD ----------------- + +16384:64:1:44:M*: FreeBSD:2.0-2.2::FreeBSD 2.0-4.2 +16384:64:1:44:M*: FreeBSD:3.0-3.5::FreeBSD 2.0-4.2 +16384:64:1:44:M*: FreeBSD:4.0-4.2::FreeBSD 2.0-4.2 +16384:64:1:60:M*,N,W0,N,N,T: FreeBSD:4.4::FreeBSD 4.4 + +1024:64:1:60:M*,N,W0,N,N,T: FreeBSD:4.4::FreeBSD 4.4 + +57344:64:1:44:M*: FreeBSD:4.6-4.8:noRFC1323:FreeBSD 4.6-4.8 (no RFC1323) +57344:64:1:60:M*,N,W0,N,N,T: FreeBSD:4.6-4.9::FreeBSD 4.6-4.9 + +32768:64:1:60:M*,N,W0,N,N,T: FreeBSD:4.8-4.11::FreeBSD 4.8-5.1 (or MacOS X) +32768:64:1:60:M*,N,W0,N,N,T: FreeBSD:5.0-5.1::FreeBSD 4.8-5.1 (or MacOS X) +65535:64:1:60:M*,N,W0,N,N,T: FreeBSD:4.8-4.11::FreeBSD 4.8-5.2 (or MacOS X) +65535:64:1:60:M*,N,W0,N,N,T: FreeBSD:5.0-5.2::FreeBSD 4.8-5.2 (or MacOS X) +65535:64:1:60:M*,N,W1,N,N,T: FreeBSD:4.7-4.11::FreeBSD 4.7-5.2 +65535:64:1:60:M*,N,W1,N,N,T: FreeBSD:5.0-5.2::FreeBSD 4.7-5.2 + +# XXX need quirks support +# 65535:64:1:60:M*,N,W0,N,N,T:Z:FreeBSD:5.1-5.4::5.1-current (1) +# 65535:64:1:60:M*,N,W1,N,N,T:Z:FreeBSD:5.1-5.4::5.1-current (2) +# 65535:64:1:60:M*,N,W2,N,N,T:Z:FreeBSD:5.1-5.4::5.1-current (3) +# 65535:64:1:44:M*:Z:FreeBSD:5.2::FreeBSD 5.2 (no RFC1323) + +# 16384:64:1:60:M*,N,N,N,N,N,N,T:FreeBSD:4.4:noTS:FreeBSD 4.4 (w/o timestamps) + +# ----------------- NetBSD ------------------ + +16384:64:0:60:M*,N,W0,N,N,T: NetBSD:1.3::NetBSD 1.3 +65535:64:0:60:M*,N,W0,N,N,T0: NetBSD:1.6:opera:NetBSD 1.6 (Opera) +16384:64:0:60:M*,N,W0,N,N,T0: NetBSD:1.6::NetBSD 1.6 +16384:64:1:60:M*,N,W0,N,N,T0: NetBSD:1.6:df:NetBSD 1.6 (DF) +65535:64:1:60:M*,N,W1,N,N,T0: NetBSD:1.6::NetBSD 1.6W-current (DF) +65535:64:1:60:M*,N,W0,N,N,T0: NetBSD:1.6::NetBSD 1.6X (DF) +32768:64:1:60:M*,N,W0,N,N,T0: NetBSD:1.6:randomization:NetBSD 1.6ZH-current (w/ ip_id randomization) + +# ----------------- OpenBSD ----------------- + +16384:64:0:60:M*,N,W0,N,N,T: OpenBSD:2.6::NetBSD 1.3 (or OpenBSD 2.6) +16384:64:1:64:M*,N,N,S,N,W0,N,N,T: OpenBSD:3.0-4.8::OpenBSD 3.0-4.8 +16384:64:0:64:M*,N,N,S,N,W0,N,N,T: OpenBSD:3.0-4.8:no-df:OpenBSD 3.0-4.8 (scrub no-df) +57344:64:1:64:M*,N,N,S,N,W0,N,N,T: OpenBSD:3.3-4.0::OpenBSD 3.3-4.0 +57344:64:0:64:M*,N,N,S,N,W0,N,N,T: OpenBSD:3.3-4.0:no-df:OpenBSD 3.3-4.0 (scrub no-df) + +65535:64:1:64:M*,N,N,S,N,W0,N,N,T: OpenBSD:3.0-4.0:opera:OpenBSD 3.0-4.0 (Opera) + +16384:64:1:64:M*,N,N,S,N,W3,N,N,T: OpenBSD:4.9::OpenBSD 4.9 +16384:64:0:64:M*,N,N,S,N,W3,N,N,T: OpenBSD:4.9:no-df:OpenBSD 4.9 (scrub no-df) + +# ----------------- Solaris ----------------- + +S17:64:1:64:N,W3,N,N,T0,N,N,S,M*: Solaris:8:RFC1323:Solaris 8 RFC1323 +S17:64:1:48:N,N,S,M*: Solaris:8::Solaris 8 +S17:255:1:44:M*: Solaris:2.5-2.7::Solaris 2.5 to 7 + +S6:255:1:44:M*: Solaris:2.6-2.7::Solaris 2.6 to 7 +S23:255:1:44:M*: Solaris:2.5:1:Solaris 2.5.1 +S34:64:1:48:M*,N,N,S: Solaris:2.9::Solaris 9 +S44:255:1:44:M*: Solaris:2.7::Solaris 7 + +4096:64:0:44:M1460: SunOS:4.1::SunOS 4.1.x + +S34:64:1:52:M*,N,W0,N,N,S: Solaris:10:beta:Solaris 10 (beta) +32850:64:1:64:M*,N,N,T,N,W1,N,N,S: Solaris:10::Solaris 10 1203 + +# ----------------- IRIX -------------------- + +49152:64:0:44:M*: IRIX:6.4::IRIX 6.4 +61440:64:0:44:M*: IRIX:6.2-6.5::IRIX 6.2-6.5 +49152:64:0:52:M*,N,W2,N,N,S: IRIX:6.5:RFC1323:IRIX 6.5 (RFC1323) +49152:64:0:52:M*,N,W3,N,N,S: IRIX:6.5:RFC1323:IRIX 6.5 (RFC1323) + +61440:64:0:48:M*,N,N,S: IRIX:6.5:12-21:IRIX 6.5.12 - 6.5.21 +49152:64:0:48:M*,N,N,S: IRIX:6.5:15-21:IRIX 6.5.15 - 6.5.21 + +49152:60:0:64:M*,N,W2,N,N,T,N,N,S: IRIX:6.5:IP27:IRIX 6.5 IP27 + + +# ----------------- Tru64 ------------------- + +32768:64:1:48:M*,N,W0: Tru64:4.0::Tru64 4.0 (or OS/2 Warp 4) +32768:64:0:48:M*,N,W0: Tru64:5.0::Tru64 5.0 +8192:64:0:44:M1460: Tru64:5.1:noRFC1323:Tru64 6.1 (no RFC1323) (or QNX 6) +61440:64:0:48:M*,N,W0: Tru64:5.1a:JP4:Tru64 v5.1a JP4 (or OpenVMS 7.x on Compaq 5.x stack) + +# ----------------- OpenVMS ----------------- + +6144:64:1:60:M*,N,W0,N,N,T: OpenVMS:7.2::OpenVMS 7.2 (Multinet 4.4 stack) + +# ----------------- MacOS ------------------- + +# XXX Need EOL tcp opt support +# S2:255:1:48:M*,W0,E:.:MacOS:8.6 classic + +# XXX some of these use EOL too +16616:255:1:48:M*,W0: MacOS:7.3-7.6:OTTCP:MacOS 7.3-8.6 (OTTCP) +16616:255:1:48:M*,W0: MacOS:8.0-8.6:OTTCP:MacOS 7.3-8.6 (OTTCP) +16616:255:1:48:M*,N,N,N: MacOS:8.1-8.6:OTTCP:MacOS 8.1-8.6 (OTTCP) +32768:255:1:48:M*,W0,N: MacOS:9.0-9.2::MacOS 9.0-9.2 +65535:255:1:48:M*,N,N,N,N: MacOS:9.1::MacOS 9.1 (OT 2.7.4) + + +# ----------------- Windows ----------------- + +# Windows TCP/IP stack is a mess. For most recent XP, 2000 and +# even 98, the patchlevel, not the actual OS version, is more +# relevant to the signature. They share the same code, so it would +# seem. Luckily for us, almost all Windows 9x boxes have an +# awkward MSS of 536, which I use to tell one from another +# in most difficult cases. + +8192:32:1:44:M*: Windows:3.11::Windows 3.11 (Tucows) +S44:64:1:64:M*,N,W0,N,N,T0,N,N,S: Windows:95::Windows 95 +8192:128:1:64:M*,N,W0,N,N,T0,N,N,S: Windows:95:b:Windows 95b + +# There were so many tweaking tools and so many stack versions for +# Windows 98 it is no longer possible to tell them from each other +# without some very serious research. Until then, there's an insane +# number of signatures, for your amusement: + +S44:32:1:48:M*,N,N,S: Windows:98:lowTTL:Windows 98 (low TTL) +8192:32:1:48:M*,N,N,S: Windows:98:lowTTL:Windows 98 (low TTL) +%8192:64:1:48:M536,N,N,S: Windows:98::Windows 98 +%8192:128:1:48:M536,N,N,S: Windows:98::Windows 98 +S4:64:1:48:M*,N,N,S: Windows:98::Windows 98 +S6:64:1:48:M*,N,N,S: Windows:98::Windows 98 +S12:64:1:48:M*,N,N,S: Windows:98::Windows 98 +T30:64:1:64:M1460,N,W0,N,N,T0,N,N,S: Windows:98::Windows 98 +32767:64:1:48:M*,N,N,S: Windows:98::Windows 98 +37300:64:1:48:M*,N,N,S: Windows:98::Windows 98 +46080:64:1:52:M*,N,W3,N,N,S: Windows:98:RFC1323:Windows 98 (RFC1323) +65535:64:1:44:M*: Windows:98:noSack:Windows 98 (no sack) +S16:128:1:48:M*,N,N,S: Windows:98::Windows 98 +S16:128:1:64:M*,N,W0,N,N,T0,N,N,S: Windows:98::Windows 98 +S26:128:1:48:M*,N,N,S: Windows:98::Windows 98 +T30:128:1:48:M*,N,N,S: Windows:98::Windows 98 +32767:128:1:52:M*,N,W0,N,N,S: Windows:98::Windows 98 +60352:128:1:48:M*,N,N,S: Windows:98::Windows 98 +60352:128:1:64:M*,N,W2,N,N,T0,N,N,S: Windows:98::Windows 98 + +# What's with 1414 on NT? +T31:128:1:44:M1414: Windows:NT:4.0:Windows NT 4.0 SP6a +64512:128:1:44:M1414: Windows:NT:4.0:Windows NT 4.0 SP6a +8192:128:1:44:M*: Windows:NT:4.0:Windows NT 4.0 (older) + +# Windows XP and 2000. Most of the signatures that were +# either dubious or non-specific (no service pack data) +# were deleted and replaced with generics at the end. + +65535:128:1:48:M*,N,N,S: Windows:2000:SP4:Windows 2000 SP4, XP SP1 +65535:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows 2000 SP4, XP SP1 +%8192:128:1:48:M*,N,N,S: Windows:2000:SP2+:Windows 2000 SP2, XP SP1 (seldom 98 4.10.2222) +%8192:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows 2000 SP2, XP SP1 (seldom 98 4.10.2222) +S20:128:1:48:M*,N,N,S: Windows:2000::Windows 2000/XP SP3 +S20:128:1:48:M*,N,N,S: Windows:XP:SP3:Windows 2000/XP SP3 +S45:128:1:48:M*,N,N,S: Windows:2000:SP4:Windows 2000 SP4, XP SP 1 +S45:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows 2000 SP4, XP SP 1 +40320:128:1:48:M*,N,N,S: Windows:2000:SP4:Windows 2000 SP4 + +S6:128:1:48:M*,N,N,S: Windows:2000:SP2:Windows XP, 2000 SP2+ +S6:128:1:48:M*,N,N,S: Windows:XP::Windows XP, 2000 SP2+ +S12:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows XP SP1 +S44:128:1:48:M*,N,N,S: Windows:2000:SP3:Windows Pro SP1, 2000 SP3 +S44:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows Pro SP1, 2000 SP3 +64512:128:1:48:M*,N,N,S: Windows:2000:SP3:Windows SP1, 2000 SP3 +64512:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows SP1, 2000 SP3 +32767:128:1:48:M*,N,N,S: Windows:2000:SP4:Windows SP1, 2000 SP4 +32767:128:1:48:M*,N,N,S: Windows:XP:SP1:Windows SP1, 2000 SP4 + +8192:128:1:52:M*,N,W2,N,N,S: Windows:Vista::Windows Vista/7 + +# Odds, ends, mods: + +S52:128:1:48:M1260,N,N,S: Windows:2000:cisco:Windows XP/2000 via Cisco +S52:128:1:48:M1260,N,N,S: Windows:XP:cisco:Windows XP/2000 via Cisco +65520:128:1:48:M*,N,N,S: Windows:XP::Windows XP bare-bone +16384:128:1:52:M536,N,W0,N,N,S: Windows:2000:ZoneAlarm:Windows 2000 w/ZoneAlarm? +2048:255:0:40:.: Windows:.NET::Windows .NET Enterprise Server + +44620:64:0:48:M*,N,N,S: Windows:ME::Windows ME no SP (?) +S6:255:1:48:M536,N,N,S: Windows:95:winsock2:Windows 95 winsock 2 +32768:32:1:52:M1460,N,W0,N,N,S: Windows:2003:AS:Windows 2003 AS + + +# No need to be more specific, it passes: +# *:128:1:48:M*,N,N,S:U:-Windows:XP/2000 while downloading (leak!) XXX quirk +# there is an equiv similar generic sig w/o the quirk + +# ----------------- HP/UX ------------------- + +32768:64:1:44:M*: HP-UX:B.10.20::HP-UX B.10.20 +32768:64:0:48:M*,W0,N: HP-UX:11.0::HP-UX 11.0 +32768:64:1:48:M*,W0,N: HP-UX:11.10::HP-UX 11.0 or 11.11 +32768:64:1:48:M*,W0,N: HP-UX:11.11::HP-UX 11.0 or 11.11 + +# Whoa. Hardcore WSS. +0:64:0:48:M*,W0,N: HP-UX:B.11.00:A:HP-UX B.11.00 A (RFC1323) + +# ----------------- RiscOS ------------------ + +# We don't yet support the ?12 TCP option +#16384:64:1:68:M1460,N,W0,N,N,T,N,N,?12: RISCOS:3.70-4.36::RISC OS 3.70-4.36 +12288:32:0:44:M536: RISC OS:3.70:4.10:RISC OS 3.70 inet 4.10 + +# XXX quirk +# 4096:64:1:56:M1460,N,N,T:T: RISC OS:3.70:freenet:RISC OS 3.70 freenet 2.00 + + + +# ----------------- BSD/OS ------------------ + +# Once again, power of two WSS is also shared by MacOS X with DF set +8192:64:1:60:M1460,N,W0,N,N,T: BSD/OS:3.1::BSD/OS 3.1-4.3 (or MacOS X 10.2 w/DF) +8192:64:1:60:M1460,N,W0,N,N,T: BSD/OS:4.0-4.3::BSD/OS 3.1-4.3 (or MacOS X 10.2) + + +# ---------------- NewtonOS ----------------- + +4096:64:0:44:M1420: NewtonOS:2.1::NewtonOS 2.1 + +# ---------------- NeXTSTEP ----------------- + +S4:64:0:44:M1024: NeXTSTEP:3.3::NeXTSTEP 3.3 +S8:64:0:44:M512: NeXTSTEP:3.3::NeXTSTEP 3.3 + +# ------------------ BeOS ------------------- + +1024:255:0:48:M*,N,W0: BeOS:5.0-5.1::BeOS 5.0-5.1 +12288:255:0:44:M1402: BeOS:5.0::BeOS 5.0.x + +# ------------------ OS/400 ----------------- + +8192:64:1:60:M1440,N,W0,N,N,T: OS/400:VR4::OS/400 VR4/R5 +8192:64:1:60:M1440,N,W0,N,N,T: OS/400:VR5::OS/400 VR4/R5 +4096:64:1:60:M1440,N,W0,N,N,T: OS/400:V4R5:CF67032:OS/400 V4R5 + CF67032 + +# XXX quirk +# 28672:64:0:44:M1460:A:OS/390:? + +# ------------------ ULTRIX ----------------- + +16384:64:0:40:.: ULTRIX:4.5::ULTRIX 4.5 + +# ------------------- QNX ------------------- + +S16:64:0:44:M512: QNX:::QNX demodisk + +# ------------------ Novell ----------------- + +16384:128:1:44:M1460: Novell:NetWare:5.0:Novel Netware 5.0 +6144:128:1:44:M1460: Novell:IntranetWare:4.11:Novell IntranetWare 4.11 +6144:128:1:44:M1368: Novell:BorderManager::Novell BorderManager ? + +6144:128:1:52:M*,W0,N,S,N,N: Novell:Netware:6:Novell Netware 6 SP3 + + +# ----------------- SCO ------------------ +S3:64:1:60:M1460,N,W0,N,N,T: SCO:UnixWare:7.1:SCO UnixWare 7.1 +S17:64:1:60:M1380,N,W0,N,N,T: SCO:UnixWare:7.1:SCO UnixWare 7.1.3 MP3 +S23:64:1:44:M1380: SCO:OpenServer:5.0:SCO OpenServer 5.0 + +# ------------------- DOS ------------------- + +2048:255:0:44:M536: DOS:WATTCP:1.05:DOS Arachne via WATTCP/1.05 +T2:255:0:44:M984: DOS:WATTCP:1.05Arachne:Arachne via WATTCP/1.05 (eepro) + +# ------------------ OS/2 ------------------- + +S56:64:0:44:M512: OS/2:4::OS/2 4 +28672:64:0:44:M1460: OS/2:4::OS/2 Warp 4.0 + +# ----------------- TOPS-20 ----------------- + +# Another hardcore MSS, one of the ACK leakers hunted down. +# XXX QUIRK 0:64:0:44:M1460:A:TOPS-20:version 7 +0:64:0:44:M1460: TOPS-20:7::TOPS-20 version 7 + +# ----------------- FreeMiNT ---------------- + +S44:255:0:44:M536: FreeMiNT:1:16A:FreeMiNT 1 patch 16A (Atari) + +# ------------------ AMIGA ------------------ + +# XXX TCP option 12 +# S32:64:1:56:M*,N,N,S,N,N,?12:.:AMIGA:3.9 BB2 with Miami stack + +# ------------------ Plan9 ------------------ + +65535:255:0:48:M1460,W0,N: Plan9:4::Plan9 edition 4 + +# ----------------- AMIGAOS ----------------- + +16384:64:1:48:M1560,N,N,S: AMIGAOS:3.9::AMIGAOS 3.9 BB2 MiamiDX + +########################################### +# Appliance / embedded / other signatures # +########################################### + +# ---------- Firewalls / routers ------------ + +S12:64:1:44:M1460: @Checkpoint:::Checkpoint (unknown 1) +S12:64:1:48:N,N,S,M1460: @Checkpoint:::Checkpoint (unknown 2) +4096:32:0:44:M1460: ExtremeWare:4.x::ExtremeWare 4.x + +# XXX TCP option 12 +# S32:64:0:68:M512,N,W0,N,N,T,N,N,?12:.:Nokia:IPSO w/Checkpoint NG FP3 +# S16:64:0:68:M1024,N,W0,N,N,T,N,N,?12:.:Nokia:IPSO 3.7 build 026 + +S4:64:1:60:W0,N,S,T,M1460: FortiNet:FortiGate:50:FortiNet FortiGate 50 + +8192:64:1:44:M1460: Eagle:::Eagle Secure Gateway + +S52:128:1:48:M1260,N,N,N,N: LinkSys:WRV54G::LinkSys WRV54G VPN router + + + +# ------- Switches and other stuff ---------- + +4128:255:0:44:M*: Cisco:::Cisco Catalyst 3500, 7500 etc +S8:255:0:44:M*: Cisco:12008::Cisco 12008 +60352:128:1:64:M1460,N,W2,N,N,T,N,N,S: Alteon:ACEswitch::Alteon ACEswitch +64512:128:1:44:M1370: Nortel:Contivity Client::Nortel Conectivity Client + + +# ---------- Caches and whatnots ------------ + +S4:64:1:52:M1460,N,N,S,N,W0: AOL:web cache::AOL web cache + +32850:64:1:64:N,W1,N,N,T,N,N,S,M*: NetApp:5.x::NetApp Data OnTap 5.x +16384:64:1:64:M1460,N,N,S,N,W0,N: NetApp:5.3:1:NetApp 5.3.1 +65535:64:0:64:M1460,N,N,S,N,W*,N,N,T: NetApp:5.3-5.5::NetApp 5.3-5.5 +65535:64:0:60:M1460,N,W0,N,N,T: NetApp:CacheFlow::NetApp CacheFlow +8192:64:1:64:M1460,N,N,S,N,W0,N,N,T: NetApp:5.2:1:NetApp NetCache 5.2.1 +20480:64:1:64:M1460,N,N,S,N,W0,N,N,T: NetApp:4.1::NetApp NetCache4.1 + +65535:64:0:60:M1460,N,W0,N,N,T: CacheFlow:4.1::CacheFlow CacheOS 4.1 +8192:64:0:60:M1380,N,N,N,N,N,N,T: CacheFlow:1.1::CacheFlow CacheOS 1.1 + +S4:64:0:48:M1460,N,N,S: Cisco:Content Engine::Cisco Content Engine + +27085:128:0:40:.: Dell:PowerApp cache::Dell PowerApp (Linux-based) + +65535:255:1:48:N,W1,M1460: Inktomi:crawler::Inktomi crawler +S1:255:1:60:M1460,S,T,N,W0: LookSmart:ZyBorg::LookSmart ZyBorg + +16384:255:0:40:.: Proxyblocker:::Proxyblocker (what's this?) + +65535:255:0:48:M*,N,N,S: Redline:::Redline T|X 2200 + +32696:128:0:40:M1460: Spirent:Avalanche::Spirent Web Avalanche HTTP benchmarking engine + +# ----------- Embedded systems -------------- + +S9:255:0:44:M536: PalmOS:Tungsten:C:PalmOS Tungsten C +S5:255:0:44:M536: PalmOS:3::PalmOS 3/4 +S5:255:0:44:M536: PalmOS:4::PalmOS 3/4 +S4:255:0:44:M536: PalmOS:3:5:PalmOS 3.5 +2948:255:0:44:M536: PalmOS:3:5:PalmOS 3.5.3 (Handera) +S29:255:0:44:M536: PalmOS:5::PalmOS 5.0 +16384:255:0:44:M1398: PalmOS:5.2:Clie:PalmOS 5.2 (Clie) +S14:255:0:44:M1350: PalmOS:5.2:Treo:PalmOS 5.2.1 (Treo) + +S23:64:1:64:N,W1,N,N,T,N,N,S,M1460: SymbianOS:7::SymbianOS 7 + +8192:255:0:44:M1460: SymbianOS:6048::Symbian OS 6048 (Nokia 7650?) +8192:255:0:44:M536: SymbianOS:9210::Symbian OS (Nokia 9210?) +S22:64:1:56:M1460,T,S: SymbianOS:P800::Symbian OS ? (SE P800?) +S36:64:1:56:M1360,T,S: SymbianOS:6600::Symbian OS 60xx (Nokia 6600?) + + +# Perhaps S4? +5840:64:1:60:M1452,S,T,N,W1: Zaurus:3.10::Zaurus 3.10 + +32768:128:1:64:M1460,N,W0,N,N,T0,N,N,S: PocketPC:2002::PocketPC 2002 + +S1:255:0:44:M346: Contiki:1.1:rc0:Contiki 1.1-rc0 + +4096:128:0:44:M1460: Sega:Dreamcast:3.0:Sega Dreamcast Dreamkey 3.0 +T5:64:0:44:M536: Sega:Dreamcast:HKT-3020:Sega Dreamcast HKT-3020 (browser disc 51027) +S22:64:1:44:M1460: Sony:PS2::Sony Playstation 2 (SOCOM?) + +S12:64:0:44:M1452: AXIS:5600:v5.64:AXIS Printer Server 5600 v5.64 + +3100:32:1:44:M1460: Windows:CE:2.0:Windows CE 2.0 + +#################### +# Fancy signatures # +#################### + +1024:64:0:40:.: *NMAP:syn scan:1:NMAP syn scan (1) +2048:64:0:40:.: *NMAP:syn scan:2:NMAP syn scan (2) +3072:64:0:40:.: *NMAP:syn scan:3:NMAP syn scan (3) +4096:64:0:40:.: *NMAP:syn scan:4:NMAP syn scan (4) + +# Requires quirks support +# 1024:64:0:40:.:A:*NMAP:TCP sweep probe (1) +# 2048:64:0:40:.:A:*NMAP:TCP sweep probe (2) +# 3072:64:0:40:.:A:*NMAP:TCP sweep probe (3) +# 4096:64:0:40:.:A:*NMAP:TCP sweep probe (4) + +1024:64:0:60:W10,N,M265,T: *NMAP:OS:1:NMAP OS detection probe (1) +2048:64:0:60:W10,N,M265,T: *NMAP:OS:2:NMAP OS detection probe (2) +3072:64:0:60:W10,N,M265,T: *NMAP:OS:3:NMAP OS detection probe (3) +4096:64:0:60:W10,N,M265,T: *NMAP:OS:4:NMAP OS detection probe (4) + +32767:64:0:40:.: *NAST:::NASTsyn scan + +# Requires quirks support +# 12345:255:0:40:.:A:-p0f:sendsyn utility + + +##################################### +# Generic signatures - just in case # +##################################### + +#*:64:1:60:M*,N,W*,N,N,T: @FreeBSD:4.0-4.9::FreeBSD 4.x/5.x +#*:64:1:60:M*,N,W*,N,N,T: @FreeBSD:5.0-5.1::FreeBSD 4.x/5.x + +*:128:1:52:M*,N,W0,N,N,S: @Windows:XP:RFC1323:Windows XP/2000 (RFC1323 no tstamp) +*:128:1:52:M*,N,W0,N,N,S: @Windows:2000:RFC1323:Windows XP/2000 (RFC1323 no tstamp) +*:128:1:52:M*,N,W*,N,N,S: @Windows:XP:RFC1323:Windows XP/2000 (RFC1323 no tstamp) +*:128:1:52:M*,N,W*,N,N,S: @Windows:2000:RFC1323:Windows XP/2000 (RFC1323 no tstamp) +*:128:1:64:M*,N,W0,N,N,T0,N,N,S: @Windows:XP:RFC1323:Windows XP/2000 (RFC1323) +*:128:1:64:M*,N,W0,N,N,T0,N,N,S: @Windows:2000:RFC1323:Windows XP/2000 (RFC1323) +*:128:1:64:M*,N,W*,N,N,T0,N,N,S: @Windows:XP:RFC1323:Windows XP (RFC1323, w+) +*:128:1:48:M536,N,N,S: @Windows:98::Windows 98 +*:128:1:48:M*,N,N,S: @Windows:XP::Windows XP/2000 +*:128:1:48:M*,N,N,S: @Windows:2000::Windows XP/2000 + + diff --git a/usr/etc/pfSense.obsoletedfiles b/usr/etc/pfSense.obsoletedfiles new file mode 100644 index 000000000..6c60bfb6f --- /dev/null +++ b/usr/etc/pfSense.obsoletedfiles @@ -0,0 +1,151 @@ +/etc/rc.parse-isc-dhcpd +/etc/rc.linkup.sh +/etc/phpshellsessions/cvssync +/etc/inc/cmd_chain.inc +/etc/inc/regdomain.inc +/etc/inc/sysctl.inc +/usr/local/www/diag_showbogons.php +/usr/local/www/interfaces_wan.php +/usr/local/www/interfaces_lan.php +/usr/local/www/interfaces_opt.php +/usr/local/www/interfaces_ppp.php +/usr/local/www/interfaces_ppp_edit.php +/usr/local/www/interfaces_wlan.inc +/usr/local/www/ifstats.cgi +/usr/local/www/easyrule.inc +/usr/local/www/exec_raw.php +/etc/rc.initial_firmware_update +/usr/local/www/javascript/index/sajax.js +/usr/local/www/sajax/index.sajax.php +/usr/local/www/interfaces_wlan_scan.php +/usr/local/www/firewall_nat_server.php +/usr/local/www/firewall_nat_server_edit.php +/usr/local/www/services_usermanager.php +/usr/local/www/firewall_rules_schedule_logic.php +/usr/local/www/firewall_shaper_edit.php +/usr/local/www/firewall_shaper_queues_edit.php +/usr/local/www/services_captiveportal_users.php +/usr/local/www/services_captiveportal_users_edit.php +/usr/local/www/system_advanced.php +/usr/local/www/system_advanced_create_certs.php +/usr/local/www/vpn_pppoe_users.php +/usr/local/www/vpn_pppoe_users_edit.php +/usr/local/www/vpn_ipsec_ca.php +/usr/local/www/vpn_ipsec_ca_edit.php +/usr/local/www/vpn_ipsec_ca_edit_create_cert.php +/usr/local/www/vpn_ipsec_edit.php +/usr/local/www/vpn_openvpn.php +/usr/local/www/vpn_openvpn_ccd.php +/usr/local/www/vpn_openvpn_ccd_edit.php +/usr/local/www/vpn_openvpn_cli.php +/usr/local/www/vpn_openvpn_cli_edit.php +/usr/local/www/vpn_openvpn_create_certs.php +/usr/local/www/vpn_openvpn_crl.php +/usr/local/www/vpn_openvpn_crl_edit.php +/usr/local/www/vpn_openvpn_srv.php +/usr/local/www/vpn_openvpn_srv_edit.php +/usr/local/www/dfuife.cgi +/usr/local/www/fred.png +/usr/local/www/index.html +/usr/local/www/system_usermanager_addcert.php +/usr/local/www/filter_log.inc +/usr/local/pkg/routed/routed.inc +/usr/local/pkg/routed/routed.xml +/usr/local/pkg/sasyncd.xml +/usr/local/pkg/carp.xml +/usr/local/www/javascript/diag_backup/diag_backup.js +/usr/local/www/progress.php +/usr/local/www/upload_progress.php +/usr/sbin/ntpd +/usr/sbin/ntpdate +/usr/sbin/ntpdc +/usr/sbin/ntptrace +/usr/sbin/ntptime +/usr/sbin/ntp-keygen +/usr/bin/ntpq +/usr/local/bin/ntp-wait +/usr/local/bin/ntpd +/usr/local/bin/ntpdate +/usr/local/bin/ntpdc +/usr/local/bin/ntpq +/usr/local/bin/ntptime +/usr/local/bin/ntptrace +/usr/local/bin/sntp +/usr/local/bin/tickadj +/usr/local/bin/c_rehash +/usr/local/bin/openssl +/usr/local/lib/libcrypto.a +/usr/local/lib/libssl.a +/usr/local/libdata/pkgconfig/libcrypto.pc +/usr/local/libdata/pkgconfig/libssl.pc +/usr/local/libdata/pkgconfig/openssl.pc +/usr/local/openssl/misc/CA.pl +/usr/local/openssl/misc/CA.sh +/usr/local/openssl/misc/c_hash +/usr/local/openssl/misc/c_info +/usr/local/openssl/misc/c_issuer +/usr/local/openssl/misc/c_name +/usr/local/openssl/misc/tsget +/usr/local/openssl/openssl.cnf.sample +/usr/local/lib/engines/lib4758cca.so +/usr/local/lib/engines/libaep.so +/usr/local/lib/engines/libatalla.so +/usr/local/lib/engines/libcapi.so +/usr/local/lib/engines/libchil.so +/usr/local/lib/engines/libcswift.so +/usr/local/lib/engines/libgmp.so +/usr/local/lib/engines/libgost.so +/usr/local/lib/engines/libnuron.so +/usr/local/lib/engines/libpadlock.so +/usr/local/lib/engines/libsureware.so +/usr/local/lib/engines/libubsec.so +/usr/local/lib/libcrypto.so +/usr/local/lib/libcrypto.so.8 +/usr/local/lib/libssl.so +/usr/local/lib/libssl.so.8 +/usr/bin/nsupdate +/usr/local/lib/libipsec.so +/usr/local/lib/libipsec.so.0 +/usr/local/sbin/racoon +/usr/local/sbin/racoonctl +/usr/local/sbin/setkey +/usr/local/lib/php/20090626/apc.so +/usr/local/lib/php/20090626/bcmath.so +/usr/local/lib/php/20090626/bz2.so +/usr/local/lib/php/20090626/ctype.so +/usr/local/lib/php/20090626/curl.so +/usr/local/lib/php/20090626/dom.so +/usr/local/lib/php/20090626/gettext.so +/usr/local/lib/php/20090626/hash.so +/usr/local/lib/php/20090626/json.so +/usr/local/lib/php/20090626/ldap.so +/usr/local/lib/php/20090626/mbstring.so +/usr/local/lib/php/20090626/mcrypt.so +/usr/local/lib/php/20090626/mysql.so +/usr/local/lib/php/20090626/openssl.so +/usr/local/lib/php/20090626/pcntl.so +/usr/local/lib/php/20090626/pdo.so +/usr/local/lib/php/20090626/pdo_sqlite.so +/usr/local/lib/php/20090626/pfSense.so +/usr/local/lib/php/20090626/posix.so +/usr/local/lib/php/20090626/radius.so +/usr/local/lib/php/20090626/readline.so +/usr/local/lib/php/20090626/session.so +/usr/local/lib/php/20090626/shmop.so +/usr/local/lib/php/20090626/simplexml.so +/usr/local/lib/php/20090626/sockets.so +/usr/local/lib/php/20090626/sqlite.so +/usr/local/lib/php/20090626/ssh2.so +/usr/local/lib/php/20090626/suhosin.so +/usr/local/lib/php/20090626/sysvmsg.so +/usr/local/lib/php/20090626/sysvsem.so +/usr/local/lib/php/20090626/sysvshm.so +/usr/local/lib/php/20090626/tokenizer.so +/usr/local/lib/php/20090626/xdebug.so +/usr/local/lib/php/20090626/xml.so +/usr/local/lib/php/20090626/xmlreader.so +/usr/local/lib/php/20090626/xmlwriter.so +/usr/local/lib/php/20090626/zlib.so +/usr/local/lib/php/20090626/zmq.so +/usr/sbin/clog +/etc/ttys_wrap diff --git a/usr/etc/phpshellsessions/changepassword b/usr/etc/phpshellsessions/changepassword new file mode 100644 index 000000000..6243fb8a3 --- /dev/null +++ b/usr/etc/phpshellsessions/changepassword @@ -0,0 +1,79 @@ +require_once("config.inc"); +require("auth.inc"); +require_once("functions.inc"); + +global $g, $config, $argv, $userindex; +$userindex = index_users(); + +$args = array_slice($argv, 3); + +$password = ""; +$confpassword = ""; +$username = ""; + +$fp = fopen('php://stdin', 'r'); + +// If the first parameter is empty, ask for username +if (empty($args[0])) { + echo gettext("Enter username: "); + $username = fgets($fp); +} else { + $username = $args[0]; +} +$username = trim($username); + +// If the user does not exist, bail +$user =& getUserEntry($username); +if ($user == NULL) { + printf(gettext("User '%s' does not exist.\n"), $username); + exit(-1); +} else { + printf(gettext("Changing password for '%s'.\n"), $username); +} + +// If the user does exist, prompt for password +while (empty($password)) { + echo gettext("New Password") . ": "; + exec('/bin/stty -echo'); + $password = trim(fgets($fp)); + exec('/bin/stty echo'); + echo "\n"; +} + +// Confirm password +while (empty($confpassword)) { + echo gettext("Confirm New Password") . ": "; + exec('/bin/stty -echo'); + $confpassword = trim(fgets($fp)); + exec('/bin/stty echo'); + echo "\n"; +} + +// Check if user is disabled +if (is_account_disabled($username)) { + echo gettext("Account is disabled, would you like to re-enable? [y|n]") . ": "; + if (strcasecmp(chop(fgets($fp)), "y") == 0) { + unset($user['disabled']); + } +} +// Check if user is expired +if (is_account_expired($username)) { + echo gettext("Account is expired, would you like to clear the expiration date? [y|n]") . ": "; + if (strcasecmp(chop(fgets($fp)), "y") == 0) { + unset($user['expires']); + } +} + +fclose($fp); + +// Compare password and confirm +if ($password == $confpassword) { + //Reset password + local_user_set_password($user, $password); + local_user_set($user); + write_config(sprintf(gettext("password changed for user '%s' from console."), $username)); + exit(0); +} else { + echo gettext("New and Confirm passwords did not match.") . "\n"; + exit(-1); +} \ No newline at end of file diff --git a/usr/etc/phpshellsessions/disablecarp b/usr/etc/phpshellsessions/disablecarp new file mode 100644 index 000000000..1ad71aea8 --- /dev/null +++ b/usr/etc/phpshellsessions/disablecarp @@ -0,0 +1,17 @@ +! echo "Disabling CARP..." +require_once("config.inc"); +require_once("interfaces.inc"); +require_once("util.inc"); + +set_single_sysctl("net.inet.carp.allow", "0"); +if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + switch ($vip['mode']) { + case "carp": + interface_vip_bring_down($vip); + sleep(1); + break; + } + } +} diff --git a/usr/etc/phpshellsessions/disabledhcpd b/usr/etc/phpshellsessions/disabledhcpd new file mode 100644 index 000000000..4dc029c63 --- /dev/null +++ b/usr/etc/phpshellsessions/disabledhcpd @@ -0,0 +1,13 @@ +global $config; + +$config = parse_config(true); + +unset($config['dhcpd']); + +echo "Disabling DHCP Server on all interfaces..."; + +write_config("pfSsh.php disabled dhcp on all interfaces"); + +services_dhcpd_configure(); + +echo "done.\n"; \ No newline at end of file diff --git a/usr/etc/phpshellsessions/disablereferercheck b/usr/etc/phpshellsessions/disablereferercheck new file mode 100644 index 000000000..97d444a26 --- /dev/null +++ b/usr/etc/phpshellsessions/disablereferercheck @@ -0,0 +1,11 @@ +global $config; + +$config = parse_config(true); + +$config['system']['webgui']['nohttpreferercheck'] = true; + +echo "Disabling HTTP referer check..."; + +write_config("PHP shell disabled HTTP referer check"); + +echo "done.\n"; diff --git a/usr/etc/phpshellsessions/enableallowallwan b/usr/etc/phpshellsessions/enableallowallwan new file mode 100644 index 000000000..94c0b7bcd --- /dev/null +++ b/usr/etc/phpshellsessions/enableallowallwan @@ -0,0 +1,34 @@ +global $config; +require_once("filter.inc"); +require("shaper.inc"); +$config = parse_config(true); +echo "Adding allow all rule...\n"; +$filterent = array(); +$filterent["type"] = "pass"; +$filterent["interface"] = "wan"; +$filterent["source"]["any"] = ""; +$filterent["destination"]["any"] = ""; +$filterent["statetype"] = "keep state"; +$filterent["os"] = ""; +$filterent["descr"] = "Allow all ipv4 via pfSsh.php"; +$config["filter"]["rule"][] = $filterent; +$filterent = array(); +$filterent["type"] = "pass"; +$filterent["ipprotocol"] = "inet6"; +$filterent["interface"] = "wan"; +$filterent["source"]["any"] = ""; +$filterent["destination"]["any"] = ""; +$filterent["statetype"] = "keep state"; +$filterent["os"] = ""; +$filterent["descr"] = "Allow all ipv6 via pfSsh.php"; +$config["filter"]["rule"][] = $filterent; +echo "Turning off block private networks (if on)...\n"; +unset($config["interfaces"]["wan"]["blockpriv"]); +unlink_if_exists("/tmp/config.cache"); +write_config("pfSsh.php added allow all wan rule"); +unlink_if_exists("/tmp/config.cache"); +unset($config['interfaces']['wan']['blockbogons']); +$config = parse_config(true); +echo "Reloading the filter configuration..."; +filter_configure_sync(); +echo "\n\n"; \ No newline at end of file diff --git a/usr/etc/phpshellsessions/enablecarp b/usr/etc/phpshellsessions/enablecarp new file mode 100644 index 000000000..d486c0413 --- /dev/null +++ b/usr/etc/phpshellsessions/enablecarp @@ -0,0 +1,18 @@ +! echo "Enabling CARP..." +require_once("config.inc"); +require_once("interfaces.inc"); +require_once("util.inc"); + +if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + switch ($vip['mode']) { + case "carp": + interface_carp_configure($vip); + sleep(1); + break; + } + } +} +interfaces_carp_setup(); +set_single_sysctl("net.inet.carp.allow", "1"); diff --git a/usr/etc/phpshellsessions/enablesshd b/usr/etc/phpshellsessions/enablesshd new file mode 100644 index 000000000..0dc76de57 --- /dev/null +++ b/usr/etc/phpshellsessions/enablesshd @@ -0,0 +1,12 @@ +global $config; +echo "Starting enablesshd..."; +require("config.inc"); +echo "."; +$config = parse_config(true); +echo "."; +$config['system']['enablesshd'] = true; +echo "."; +write_config("pfSsh.php enabled sshd"); +echo "\nEnabling SSHD, please wait..."; +send_event("service reload sshd"); +echo "\n\n"; diff --git a/usr/etc/phpshellsessions/externalconfiglocator b/usr/etc/phpshellsessions/externalconfiglocator new file mode 100644 index 000000000..84534b3d5 --- /dev/null +++ b/usr/etc/phpshellsessions/externalconfiglocator @@ -0,0 +1,3 @@ + +include("/etc/ecl.php"); + diff --git a/usr/etc/phpshellsessions/gitsync b/usr/etc/phpshellsessions/gitsync new file mode 100644 index 000000000..0d6ac07bc --- /dev/null +++ b/usr/etc/phpshellsessions/gitsync @@ -0,0 +1,429 @@ +/* cvs_sync + * Written by Scott Ullrich + * (C)2005-2007 Scott Ullrich + * (C)2010-2012 Erik Fonnesbeck + * Part of the pfSense project pfSsh.php subsystem + */ + +require_once("globals.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("rrd.inc"); +require_once("pfsense-utils.inc"); + +$GIT_PKG = "git"; // Either "git" or the full package URL +$GIT_BIN= "/usr/pbi/bin/git"; +$GIT_REPO = "git://github.com/pfsense/pfsense.git"; +$DEFAULT_BRANCH = "master"; +$CODIR = "/root/pfsense"; +$GITSYNC_MERGE = "/root/.gitsync_merge"; + +/* NOTE: Set branches here */ +$branches = array( + "master" => "2.2 development branch", + "RELENG_2_1" => "2.1.* release branch", + "RELENG_2_0" => "2.0.* release branch", + "RELENG_1_2" => "1.2.* release branch", + "build_commit" => "The commit originally used to build the image" +); + +global $g; +global $argv; +global $command_split; + +if(is_array($command_split)) + $temp_args = array_slice($command_split, 2); +else + $temp_args = array_slice($argv, 3); + +$valid_args = array( + "--minimal" => "\tPerform a minimal copy of only the updated files.\n" . + "\tNot recommended if the system has files modified by any method other\n" . + "\tthan gitsync.\n", + "--help" => "\tDisplay this help list.\n" + ); +$args = array(); +$arg_count = 0; +while(!empty($temp_args)) { + $arg = array_shift($temp_args); + if($arg[0] == '-') { + switch($arg) { + case "--help": + echo "Usage: playback gitsync [options] [[repository] ]\nOptions:\n"; + foreach($valid_args as $arg_name => $arg_desc) + echo $arg_name . "\n" . $arg_desc; + exit; + case "--upgrading": + // Disables all interactive functions and neither PHP + // nor the web GUI will be killed or restarted. + $upgrading = true; + case (isset($valid_args[$arg])): + $args[$arg] = true; + break; + default: + echo "Invalid option: {$arg}\nUse --help for usage information.\n"; + exit; + } + } else { + $args[$arg_count++] = $arg; + } +} + +unlink_if_exists("/tmp/config.cache"); +conf_mount_rw(); + +if(!file_exists($GIT_BIN)) { + echo "Cannot find git, fetching...\n"; + require_once("config.inc"); + require_once("util.inc"); + require_once("pkg-utils.inc"); + + echo "Trying to fetch package info..."; + $pkg_info = get_pkg_info(); + if ($pkg_info) { + echo " Done.\n"; + } else { + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + echo "\n" . sprintf(gettext(' >>> Unable to communicate with %1$s. Please verify DNS and interface configuration, and that %2$s has functional Internet connectivity.'), $xmlrpc_base_url, $g['product_name']) . "\n"; + return; + } + if (empty($pkg_info["git"])) { + echo "Can't locate git package in pfSense repo. Using FreeBSD pkg repo.."; + + if (($g['platform'] == "nanobsd")) { + $pkgtmpdir = "/usr/bin/env PKG_TMPDIR=/root/ "; + $pkgstagingdir = "/root/tmp"; + if (!is_dir($pkgstagingdir)) + mkdir($pkgstagingdir); + $pkgstaging = "-t {$pkgstagingdir}/instmp.XXXXXX"; + } + system("{$pkgtmpdir}/usr/sbin/pkg_add {$pkgstaging} -r {$GIT_PKG}"); + + } else { + install_package("git", $pkg_info["git"], true); + echo "Done.\n"; + } +} + +# Remove mainline if exists (older) +if(is_dir("/root/pfsense/mainline")) + exec("rm -rf /root/pfsense/mainline"); + +# Remove RELENG_1_2 if exists (older) +if(is_dir("/root/pfsense/RELENG_1_2")) + exec("rm -rf /root/pfsense/RELENG_1_2"); + +# Remove HEAD if exists (older) +if(is_dir("/root/pfsense/HEAD")) + exec("rm -rf /root/pfsense/HEAD"); + +if(file_exists("/root/cvssync_backup.tgz")) { + $backup_date = `ls -lah /root/cvssync_backup.tgz | awk '{ print $6,$7,$8 }'`; + $tmp = array("RESTORE" => "Restores prior CVSSync backup data performed at {$backup_date}"); + $branches = array_merge($branches, $tmp); +} + +if(is_dir("$CODIR/pfSenseGITREPO/pfSenseGITREPO")) { + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} config remote.origin.url", $output_str, $ret); + if(is_array($output_str) && !empty($output_str[0])) + $GIT_REPO = $output_str[0]; + unset($output_str); +} + +if(!$args[0] && !$upgrading) { + echo "\nCurrent repository is $GIT_REPO\n"; + echo "\nPlease select which branch you would like to sync against:\n\n"; + foreach($branches as $branchname => $branchdesc) { + echo "{$branchname} \t {$branchdesc}\n"; + } + echo "\nOr alternatively you may enter a custom RCS branch URL (Git or HTTP).\n\n"; + $branch = readline("> "); + echo "\n"; +} else { + $branch = $args[0]; +} + +if($args[1] == "NOBACKUP") + $nobackup = true; +else + $nobackup = false; + +// If the repository has been fetched before, build a list of its branches. +if(is_dir("$CODIR/pfSenseGITREPO/pfSenseGITREPO")) { + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} branch -r", $branch_list, $ret); + if($ret == 0 && is_array($branch_list)) { + foreach ($branch_list as $branch_item) { + $branch_item = substr(strrchr($branch_item, "/"), 1); + if (!isset($branches[$branch_item])) + $branches[$branch_item] = " "; + } + } +} + +$found = false; +foreach($branches as $branchname => $branchdesc) { + if($branchname == $branch) + $found = true; +} +if(!$found) { + if(isURL($branch) && !$upgrading) { + if($args[1]) { + $GIT_REPO = $branch; + $branch = $args[1]; + $found = true; + } + else { + echo "\n"; + echo "NOTE: $branch was not found.\n\n"; + $command = readline("Is this a custom GIT URL? [y]? "); + if(strtolower($command) == "y" or $command == "") { + $GIT_REPO = $branch; + $command = readline("Checkout which branch [${DEFAULT_BRANCH}]? "); + if($command == "") + $branch = $DEFAULT_BRANCH; + if($command) + $branch = $command; + $found = true; + } + } + } + if(!$found) { + echo "\nNo valid branch found. Exiting.\n\n"; + conf_mount_ro(); + exit; + } +} + +$merge_repos = array(); +if(file_exists($GITSYNC_MERGE)) { + $gitsync_merges = file($GITSYNC_MERGE, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if(!empty($gitsync_merges) && is_array($gitsync_merges)) { + echo "\n===> Automatic merge list read from ${GITSYNC_MERGE}\n"; + foreach($gitsync_merges as $merge_line_num => $merge_line) { + $merge_comments = explode("#", trim($merge_line)); + if(empty($merge_comments[0])) + continue; + + $merge_line = explode(" ", trim($merge_comments[0])); + if(count($merge_line) != 2 || empty($merge_line[0]) || empty($merge_line[1])) { + echo "\nLine " . ($merge_line_num + 1) . " does not have the correct parameter count or has improper spacing.\n"; + echo "Expected parameters: repository_url branch\n"; + echo "Line read: " . implode(" ", $merge_line) . "\n\n"; + echo "Aborting automatic merge.\n\n"; + $merge_repos = array(); + break; + } + $merge_repos[] = array('repo' => $merge_line[0], 'branch' => $merge_line[1]); + } + } +} +if(!$args[0] && !$upgrading) { + do { + echo "\nAdd a custom RCS branch URL (Git or HTTP) to merge in or press enter if done.\n\n"; + $merge_repo = readline("> "); + if(!empty($merge_repo)) { + $merge_branch = readline("Merge which branch [${DEFAULT_BRANCH}]? "); + if($merge_branch == "") + $merge_repos[] = array('repo' => $merge_repo, 'branch' => $DEFAULT_BRANCH); + else if($merge_branch) + $merge_repos[] = array('repo' => $merge_repo, 'branch' => $merge_branch); + } + } while(!empty($merge_repo)); +} + +if($branch == "RESTORE" && $g['platform'] == "pfSense") { + if(!file_exists("/root/cvssync_backup.tgz")) { + echo "Sorry, we could not find a previous CVSSync backup file.\n"; + conf_mount_ro(); + exit(); + } + echo "===> Restoring previous CVSSync backup... Please wait...\n"; + exec("tar Uxpf /root/cvssync_backup.tgz -C /"); + post_cvssync_commands(); + conf_mount_ro(); + exit(); +} else { + $nobackup = true; // do not backup embedded, livecd +} + +if($nobackup == false) { + echo "===> Backing up current pfSense information...\n"; + echo "===> Please wait... "; + exec("tar czPf /root/cvssync_backup.tgz --exclude /root --exclude /dev --exclude /tmp --exclude /var/run --exclude /var/empty /"); + $size = filesize("/root/cvssync_backup.tgz"); + echo "{$size} bytes.\n\n"; + sleep(5); +} + +echo "===> Checking out $branch\n"; + +// Git commands for resetting to the specified branch +if($branch == "build_commit") { + $git_cmd = array( + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} branch " . escapeshellarg($branch) . " 2>/dev/null", + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} checkout -f " . escapeshellarg($branch) . " 2>/dev/null", + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} reset --hard " . escapeshellarg(trim(file_get_contents("/etc/version.lastcommit"))) + ); +} else { + $git_cmd = array( + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} branch " . escapeshellarg($branch) . " " . escapeshellarg("origin/{$branch}") . " 2>/dev/null", + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} checkout -f " . escapeshellarg($branch) . " 2>/dev/null", + "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} reset --hard " . escapeshellarg("origin/{$branch}") + ); +} + +// Git 'er done! +if(is_dir("$CODIR/pfSenseGITREPO/pfSenseGITREPO")) { + echo "===> Fetching updates...\n"; + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} config remote.origin.url " . escapeshellarg($GIT_REPO)); + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} fetch"); + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} clean -f -f -x -d"); + run_cmds($git_cmd); +} else { + exec("mkdir -p $CODIR/pfSenseGITREPO"); + echo "Executing cd $CODIR/pfSenseGITREPO && {$GIT_BIN} clone $GIT_REPO pfSenseGITREPO\n"; + exec("cd $CODIR/pfSenseGITREPO && {$GIT_BIN} clone " . escapeshellarg($GIT_REPO) . " pfSenseGITREPO"); + if(is_dir("$CODIR/pfSenseGITREPO/pfSense")) + exec("mv $CODIR/pfSenseGITREPO/pfSense $CODIR/pfSenseGITREPO/pfSenseGITREPO"); + if(is_dir("$CODIR/pfSenseGITREPO/mainline")) + exec("mv $CODIR/pfSenseGITREPO/mainline $CODIR/pfSenseGITREPO/pfSenseGITREPO"); + run_cmds($git_cmd); +} + +foreach($merge_repos as $merge_repo) { + echo "===> Merging branch {$merge_repo['branch']} from {$merge_repo['repo']}\n"; + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} pull " . escapeshellarg($merge_repo['repo']) . " " . escapeshellarg($merge_repo['branch']), $output_str, $ret); + unset($output_str); + if($ret <> 0) { + echo "\nMerge failed. Aborting sync.\n\n"; + run_cmds($git_cmd); + conf_mount_ro(); + exit; + } +} + +if(isset($args["--minimal"])) { + if(file_exists("/etc/version.gitsync")) + $old_revision = trim(file_get_contents("/etc/version.gitsync")); + else if(file_exists("/etc/version.lastcommit")) + $old_revision = trim(file_get_contents("/etc/version.lastcommit")); + $files_to_copy = strtr(shell_exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} diff --name-only " . escapeshellarg($old_revision)), "\n", " "); +} else + $files_to_copy = '--exclude .git .'; + +// Save new commit ID for later minimal file copies +exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} rev-parse -q --verify HEAD > /etc/version.gitsync"); + +exec("mkdir -p /tmp/lighttpd/cache/compress/"); + +// Nuke CVS and pfSense tarballs +exec("cd ${CODIR}/pfSenseGITREPO/pfSenseGITREPO && find . -name CVS -exec rm -rf {} \; 2>/dev/null"); +exec("cd ${CODIR}/pfSenseGITREPO/pfSenseGITREPO && find . -name pfSense.tgz -exec rm {} \; 2>/dev/null"); + +// Remove files that we do not want to overwrite the system with +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/crontab 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/master.passwd 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/passwd 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/fstab 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/ttys 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/group 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/fstab 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/platform 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/boot/device.hints 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/boot/loader.conf 2>/dev/null"); +exec("rm ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/boot/loader.rc 2>/dev/null"); +exec("rm -rf ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/conf*"); +exec("rm -rf ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/cf 2>/dev/null"); +exec("rm -rf ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/root/.shrc"); +exec("rm -rf ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/root/.tcshrc"); +exec("rm -f ${CODIR}/pfSenseGITREPO/pfSenseGITREPO/etc/syslog.conf 2>/dev/null"); + +echo "===> Installing new files...\n"; + +if($g['platform'] == "pfSense") + $command = "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO ; tar -cpf - {$files_to_copy} | (cd / ; tar -Uxpf -)"; +else + $command = "cd $CODIR/pfSenseGITREPO/pfSenseGITREPO ; tar -cpf - {$files_to_copy} | (cd / ; tar -xpf -) 2>/dev/null"; +if(!empty($files_to_copy)) + exec($command); +else { + echo "Already up-to-date.\n"; + $upgrading = true; +} + +// Reset the repository to restore the deleted files +exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} reset --hard >/dev/null 2>/dev/null"); + +// Remove obsolete files +$files_to_remove = file("/etc/pfSense.obsoletedfiles"); +foreach($files_to_remove as $file_to_remove) + if(file_exists($file_to_remove)) + exec("/bin/rm -f $file_to_remove"); + +if(!$upgrading) + post_cvssync_commands(); + +echo "===> Checkout complete.\n"; +echo "\n"; +if(!$upgrading) + echo "Your system is now sync'd and PHP and Lighty will be restarted in 5 seconds.\n\n"; +else + echo "Your system is now sync'd.\n\n"; + +function post_cvssync_commands() { + echo "===> Removing FAST-CGI temporary files...\n"; + exec("find /tmp -name \"php-fastcgi.socket*\" -exec rm -rf {} \;"); + exec("find /tmp -name \"*.tmp\" -exec rm -rf {} \;"); + + exec("rm -rf /tmp/xcache/* 2>/dev/null"); + + echo "===> Upgrading configuration (if needed)...\n"; + convert_config(); + + echo "===> Configuring filter..."; + exec("/etc/rc.filter_configure_sync"); + exec("pfctl -f /tmp/rules.debug"); + echo "\n"; + + if(file_exists("/etc/rc.php_ini_setup")) { + echo "===> Running /etc/rc.php_ini_setup..."; + exec("/etc/rc.php_ini_setup"); + echo "\n"; + } + + /* lock down console if necessary */ + echo "===> Locking down the console if needed...\n"; + reload_ttys(); + + echo "===> Signaling PHP and Lighty restart..."; + $fd = fopen("/tmp/restart_lighty", "w"); + fwrite($fd, "#!/bin/sh\n"); + fwrite($fd, "sleep 5\n"); + fwrite($fd, "/usr/local/sbin/pfSctl -c 'service restart webgui'\n"); + if(file_exists("/var/etc/lighty-CaptivePortal.conf")) + fwrite($fd, "/usr/local/sbin/lighttpd -f /var/etc/lighty-CaptivePortal.conf\n"); + fclose($fd); + mwexec_bg("sh /tmp/restart_lighty"); + echo "\n"; + +} + +function isUrl($url = "") { + if($url) + if(strstr($url, "rcs.pfsense.org") or + strstr($url, "mainline") or + strstr($url, ".git") or strstr($url, "git://")) + return true; + return false; +} + +function run_cmds($cmds) { + global $debug; + foreach($cmds as $cmd) { + if($debug) + echo "Running $cmd"; + exec($cmd); + } +} + +conf_mount_ro(); diff --git a/usr/etc/phpshellsessions/installpkg b/usr/etc/phpshellsessions/installpkg new file mode 100644 index 000000000..30228abc0 --- /dev/null +++ b/usr/etc/phpshellsessions/installpkg @@ -0,0 +1,39 @@ +require_once("config.inc"); +require_once("util.inc"); +require_once("pkg-utils.inc"); + +global $g, $config, $argv, $command_split; + +if(is_array($command_split)) + $args = array_slice($command_split, 2); +else + $args = array_slice($argv, 3); + +$pkg_name = $args[0]; +$install_type = empty($args[1]) ? "normal" : $args[1]; + +echo "Installing package \"{$pkg_name}\"...\n"; + +echo "Trying to fetch package info..."; +$pkg_info = get_pkg_info(); +if ($pkg_info) { + echo " Done.\n"; +} else { + $xmlrpc_base_url = get_active_xml_rpc_base_url(); + echo "\n" . sprintf(gettext(' >>> Unable to communicate with %1$s. Please verify DNS and interface configuration, and that %2$s has functional Internet connectivity.'), $xmlrpc_base_url, $g['product_name']) . "\n"; + return; +} + +$static_output = ""; +$pkg_interface = "console"; + +if (empty($pkg_info[$pkg_name])) + echo "\nPackage not found.\n"; +elseif ($install_type == "normal") + install_package($pkg_name, $pkg_info[$pkg_name], true); +elseif ($install_type == "xmlonly") + install_package_xml($pkg_name); +else + echo "Invalid install type. Valid values are: normal, xmlonly.\n"; + +echo "\nDone.\n"; diff --git a/usr/etc/phpshellsessions/listpkg b/usr/etc/phpshellsessions/listpkg new file mode 100644 index 000000000..9c13b457a --- /dev/null +++ b/usr/etc/phpshellsessions/listpkg @@ -0,0 +1,15 @@ +require_once("config.inc"); +require_once("util.inc"); + +global $g, $config; + +echo "Installed packages:\n"; + +foreach($config['installedpackages']['package'] as $package) { + $name = str_pad("{$package['name']}-{$package['version']}", 30); + $descr = $package['descr']; + $line = "{$name} {$descr}"; + if (strlen($line) > 80) + $line = substr($line, 0, 77) . "..."; + echo "{$line}\n"; +} diff --git a/usr/etc/phpshellsessions/removepkgconfig b/usr/etc/phpshellsessions/removepkgconfig new file mode 100644 index 000000000..ea365bfb9 --- /dev/null +++ b/usr/etc/phpshellsessions/removepkgconfig @@ -0,0 +1,8 @@ +global $config; +$config = parse_config(true); +unset($config['installedpackages']); +echo "Clearing package configuration information...\n"; +write_config("pfSsh.php cleared package configuration data."); +$config = parse_config(true); +echo "Removing startup files from /usr/local/etc/rc.d/...\n"; +exec("rm /usr/local/etc/rc.d/*"); diff --git a/usr/etc/phpshellsessions/removeshaper b/usr/etc/phpshellsessions/removeshaper new file mode 100644 index 000000000..2a221cd93 --- /dev/null +++ b/usr/etc/phpshellsessions/removeshaper @@ -0,0 +1,24 @@ +require("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("rrd.inc"); + +/* Much of this borrowed from firewall_shaper.php */ + +echo gettext("Removing shaper settings...\n"); + +unset($config['shaper']['queue']); +unset($queue); +unset($altq); + +foreach ($config['filter']['rule'] as $key => $rule) { + if (isset($rule['wizard']) && $rule['wizard'] == "yes") + unset($config['filter']['rule'][$key]); +} +if (write_config()) { + echo gettext("Shaper Successfully Removed.\n"); +} else { + echo gettext("Unable to write config.xml (Access Denied?)\n"); +} +filter_configure(); \ No newline at end of file diff --git a/usr/etc/phpshellsessions/restartdhcpd b/usr/etc/phpshellsessions/restartdhcpd new file mode 100644 index 000000000..e24c8421e --- /dev/null +++ b/usr/etc/phpshellsessions/restartdhcpd @@ -0,0 +1,4 @@ +! echo "Killing dhcp server..." +! killall dhcpd +! echo "Restarting dhcp server..." +services_dhcpd_configure(); diff --git a/usr/etc/phpshellsessions/restartipsec b/usr/etc/phpshellsessions/restartipsec new file mode 100644 index 000000000..66f9eb351 --- /dev/null +++ b/usr/etc/phpshellsessions/restartipsec @@ -0,0 +1,5 @@ +! echo "Restarting ipsec..." +require_once("config.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); +vpn_ipsec_configure(); diff --git a/usr/etc/phpshellsessions/svc b/usr/etc/phpshellsessions/svc new file mode 100644 index 000000000..5c47507ea --- /dev/null +++ b/usr/etc/phpshellsessions/svc @@ -0,0 +1,98 @@ +require_once("config.inc"); +require_once("util.inc"); +require_once("service-utils.inc"); + +function usage() { + echo "Usage: playback svc [service-specific options]\n\n"; + echo "Examples:\n"; + echo "playback svc stop dhcpd\n"; + echo "playback svc restart openvpn client 2\n"; + echo "playback svc stop captiveportal zone1\n"; + echo "\n"; +} + +global $g, $config, $argv, $command_split; + +if(is_array($command_split)) + $args = array_slice($command_split, 2); +else + $args = array_slice($argv, 3); + +if (empty($args[0])) { + usage(); +} + +$extras = array(); + +// start, stop, restart +$action = $args[0]; + +// dhcpd, openvpn, etc. +$svc_name = $args[1]; + +// Handle servive-specific options. +switch ($svc_name) { + case "openvpn": + if (in_array($args[2], array("server", "client"))) { + $extras['vpnmode'] = $args[2]; + } else { + echo "Invalid OpenVPN mode (server, client)\n"; + return; + } + if (is_numeric($args[3])) { + $extras['id'] = $args[3]; + } else { + echo "Invalid OpenVPN ID, must be numeric\n"; + return; + } + $vpnsvc = find_service_by_openvpn_vpnid($extras['id']); + if (empty($vpnsvc)) { + echo "No OpenVPN client or server found with that ID.\n"; + return; + } + break; + case "captiveportal": + if (is_validaliasname($args[2])) { + $extras['zone'] = $args[2]; + } else { + echo "Invalid Captive Portal Zone.\n"; + return; + } + $cpzone = find_service_by_cp_zone($extras['zone']); + if (empty($cpzone)) { + echo "No Captive Portal Zone found with that name.\n"; + return; + } + break; +} + +switch ($action) { + case "restart": + echo "Attempting to issue {$action} to {$svc_name} service...\n"; + $savemsg = service_control_restart($svc_name, $extras); + break; + case "start": + echo "Attempting to issue {$action} to {$svc_name} service...\n"; + $savemsg = service_control_start($svc_name, $extras); + break; + case "stop": + echo "Attempting to issue {$action} to {$svc_name} service...\n"; + $savemsg = service_control_stop($svc_name, $extras); + break; + case "status": + switch ($svc_name) { + case "openvpn": + $service = $vpnsvc; + break; + case "captiveportal": + $service = $cpzone; + break; + default: + $service = find_service_by_name($svc_name); + break; + } + $savemsg = get_service_status($service) ? "Service {$svc_name} is running." : "Service {$svc_name} is stopped."; + break; +} + +echo "\n{$savemsg}\n"; diff --git a/usr/etc/phpshellsessions/uninstallpkg b/usr/etc/phpshellsessions/uninstallpkg new file mode 100644 index 000000000..484ccc8ef --- /dev/null +++ b/usr/etc/phpshellsessions/uninstallpkg @@ -0,0 +1,35 @@ +require_once("config.inc"); +require_once("util.inc"); +require_once("pkg-utils.inc"); + +global $g, $config, $argv, $command_split; + +if(is_array($command_split)) + $args = array_slice($command_split, 2); +else + $args = array_slice($argv, 3); + +$pkg_name = $args[0]; +$remove_type = empty($args[1]) ? "normal" : $args[1]; +$pkg_info = array(); + +echo "Removing package \"{$pkg_name}\"...\n"; + +foreach($config['installedpackages']['package'] as $package) { + if ($pkg_name == $package['name']) + $pkg_info = $package; +} + +$static_output = ""; +$pkg_interface = "console"; + +if (empty($pkg_info)) + echo "\nPackage not installed.\n"; +elseif ($remove_type == "normal") + uninstall_package($pkg_name); +elseif ($remove_type == "xmlonly") + delete_package_xml($pkg_name); +else + echo "Invalid removal type. Valid values are: normal, xmlonly.\n"; + +echo "\nDone.\n"; \ No newline at end of file diff --git a/usr/etc/platform b/usr/etc/platform new file mode 100644 index 000000000..2838fb1b3 --- /dev/null +++ b/usr/etc/platform @@ -0,0 +1 @@ +cdrom diff --git a/usr/etc/printcap b/usr/etc/printcap new file mode 100644 index 000000000..e69de29bb diff --git a/usr/etc/protocols b/usr/etc/protocols new file mode 100644 index 000000000..763cbcdfc --- /dev/null +++ b/usr/etc/protocols @@ -0,0 +1,158 @@ +# +# Internet protocols +# +# $FreeBSD: stable/10/etc/protocols 250453 2013-05-10 13:57:44Z eadler $ +# from: @(#)protocols 5.1 (Berkeley) 4/17/89 +# +# See also http://www.iana.org/assignments/protocol-numbers +# +ip 0 IP # internet protocol, pseudo protocol number +#hopopt 0 HOPOPT # hop-by-hop options for ipv6 +icmp 1 ICMP # internet control message protocol +igmp 2 IGMP # internet group management protocol +ggp 3 GGP # gateway-gateway protocol +ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'') +st2 5 ST2 # ST2 datagram mode (RFC 1819) (officially ``ST'') +tcp 6 TCP # transmission control protocol +cbt 7 CBT # CBT, Tony Ballardie +egp 8 EGP # exterior gateway protocol +igp 9 IGP # any private interior gateway (Cisco: for IGRP) +bbn-rcc 10 BBN-RCC-MON # BBN RCC Monitoring +nvp 11 NVP-II # Network Voice Protocol +pup 12 PUP # PARC universal packet protocol +argus 13 ARGUS # ARGUS +emcon 14 EMCON # EMCON +xnet 15 XNET # Cross Net Debugger +chaos 16 CHAOS # Chaos +udp 17 UDP # user datagram protocol +mux 18 MUX # Multiplexing protocol +dcn 19 DCN-MEAS # DCN Measurement Subsystems +hmp 20 HMP # host monitoring protocol +prm 21 PRM # packet radio measurement protocol +xns-idp 22 XNS-IDP # Xerox NS IDP +trunk-1 23 TRUNK-1 # Trunk-1 +trunk-2 24 TRUNK-2 # Trunk-2 +leaf-1 25 LEAF-1 # Leaf-1 +leaf-2 26 LEAF-2 # Leaf-2 +rdp 27 RDP # "reliable datagram" protocol +irtp 28 IRTP # Internet Reliable Transaction Protocol +iso-tp4 29 ISO-TP4 # ISO Transport Protocol Class 4 +netblt 30 NETBLT # Bulk Data Transfer Protocol +mfe-nsp 31 MFE-NSP # MFE Network Services Protocol +merit-inp 32 MERIT-INP # MERIT Internodal Protocol +dccp 33 DCCP # Datagram Congestion Control Protocol +3pc 34 3PC # Third Party Connect Protocol +idpr 35 IDPR # Inter-Domain Policy Routing Protocol +xtp 36 XTP # Xpress Tranfer Protocol +ddp 37 DDP # Datagram Delivery Protocol +idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport Proto +tp++ 39 TP++ # TP++ Transport Protocol +il 40 IL # IL Transport Protocol +ipv6 41 IPV6 # ipv6 +sdrp 42 SDRP # Source Demand Routing Protocol +ipv6-route 43 IPV6-ROUTE # routing header for ipv6 +ipv6-frag 44 IPV6-FRAG # fragment header for ipv6 +idrp 45 IDRP # Inter-Domain Routing Protocol +rsvp 46 RSVP # Resource ReSerVation Protocol +gre 47 GRE # Generic Routing Encapsulation +dsr 48 DSR # Dynamic Source Routing Protocol +bna 49 BNA # BNA +esp 50 ESP # encapsulating security payload +ah 51 AH # authentication header +i-nlsp 52 I-NLSP # Integrated Net Layer Security TUBA +swipe 53 SWIPE # IP with Encryption +narp 54 NARP # NBMA Address Resolution Protocol +mobile 55 MOBILE # IP Mobility +tlsp 56 TLSP # Transport Layer Security Protocol +skip 57 SKIP # SKIP +ipv6-icmp 58 IPV6-ICMP icmp6 # ICMP for IPv6 +ipv6-nonxt 59 IPV6-NONXT # no next header for ipv6 +ipv6-opts 60 IPV6-OPTS # destination options for ipv6 +# 61 # any host internal protocol +cftp 62 CFTP # CFTP +# 63 # any local network +sat-expak 64 SAT-EXPAK # SATNET and Backroom EXPAK +kryptolan 65 KRYPTOLAN # Kryptolan +rvd 66 RVD # MIT Remote Virtual Disk Protocol +ippc 67 IPPC # Internet Pluribus Packet Core +# 68 # any distributed filesystem +sat-mon 69 SAT-MON # SATNET Monitoring +visa 70 VISA # VISA Protocol +ipcv 71 IPCV # Internet Packet Core Utility +cpnx 72 CPNX # Computer Protocol Network Executive +cphb 73 CPHB # Computer Protocol Heart Beat +wsn 74 WSN # Wang Span Network +pvp 75 PVP # Packet Video Protocol +br-sat-mon 76 BR-SAT-MON # Backroom SATNET Monitoring +sun-nd 77 SUN-ND # SUN ND PROTOCOL-Temporary +wb-mon 78 WB-MON # WIDEBAND Monitoring +wb-expak 79 WB-EXPAK # WIDEBAND EXPAK +iso-ip 80 ISO-IP # ISO Internet Protocol +vmtp 81 VMTP # Versatile Message Transport +secure-vmtp 82 SECURE-VMTP # SECURE-VMTP +vines 83 VINES # VINES +ttp 84 TTP # TTP +#iptm 84 IPTM # Protocol Internet Protocol Traffic +nsfnet-igp 85 NSFNET-IGP # NSFNET-IGP +dgp 86 DGP # Dissimilar Gateway Protocol +tcf 87 TCF # TCF +eigrp 88 EIGRP # Enhanced Interior Routing Protocol (Cisco) +ospf 89 OSPFIGP # Open Shortest Path First IGP +sprite-rpc 90 Sprite-RPC # Sprite RPC Protocol +larp 91 LARP # Locus Address Resolution Protocol +mtp 92 MTP # Multicast Transport Protocol +ax.25 93 AX.25 # AX.25 Frames +ipip 94 IPIP # Yet Another IP encapsulation +micp 95 MICP # Mobile Internetworking Control Pro. +scc-sp 96 SCC-SP # Semaphore Communications Sec. Pro. +etherip 97 ETHERIP # Ethernet-within-IP Encapsulation +encap 98 ENCAP # Yet Another IP encapsulation +# 99 # any private encryption scheme +gmtp 100 GMTP # GMTP +ifmp 101 IFMP # Ipsilon Flow Management Protocol +pnni 102 PNNI # PNNI over IP +pim 103 PIM # Protocol Independent Multicast +aris 104 ARIS # ARIS +scps 105 SCPS # SCPS +qnx 106 QNX # QNX +a/n 107 A/N # Active Networks +ipcomp 108 IPComp # IP Payload Compression Protocol +snp 109 SNP # Sitara Networks Protocol +compaq-peer 110 Compaq-Peer # Compaq Peer Protocol +ipx-in-ip 111 IPX-in-IP # IPX in IP +carp 112 CARP vrrp # Common Address Redundancy Protocol +pgm 113 PGM # PGM Reliable Transport Protocol +# 114 # any 0-hop protocol +l2tp 115 L2TP # Layer Two Tunneling Protocol +ddx 116 DDX # D-II Data Exchange +iatp 117 IATP # Interactive Agent Transfer Protocol +stp 118 STP # Schedule Transfer Protocol +srp 119 SRP # SpectraLink Radio Protocol +uti 120 UTI # UTI +smp 121 SMP # Simple Message Protocol +sm 122 SM # SM +ptp 123 PTP # Performance Transparency Protocol +isis 124 ISIS # ISIS over IPv4 +fire 125 FIRE +crtp 126 CRTP # Combat Radio Transport Protocol +crudp 127 CRUDP # Combat Radio User Datagram +sscopmce 128 SSCOPMCE +iplt 129 IPLT +sps 130 SPS # Secure Packet Shield +pipe 131 PIPE # Private IP Encapsulation within IP +sctp 132 SCTP # Stream Control Transmission Protocol +fc 133 FC # Fibre Channel +rsvp-e2e-ignore 134 RSVP-E2E-IGNORE # Aggregation of RSVP for IP reservations +mobility-header 135 Mobility-Header # Mobility Support in IPv6 +udplite 136 UDPLite # The UDP-Lite Protocol +mpls-in-ip 137 MPLS-IN-IP # Encapsulating MPLS in IP +manet 138 MANET # MANET Protocols (RFC5498) +hip 139 HIP # Host Identity Protocol (RFC5201) +shim6 140 SHIM6 # Shim6 Protocol (RFC5533) +wesp 141 WESP # Wrapped Encapsulating Security Payload (RFC5840) +rohc 142 ROHC # Robust Header Compression (RFC5858) +# 138-254 # Unassigned +pfsync 240 PFSYNC # PF Synchronization +# 253-254 # Use for experimentation and testing (RFC3692) +# 255 # Reserved +divert 258 DIVERT # Divert pseudo-protocol [non IANA] diff --git a/usr/etc/pubkey.pem b/usr/etc/pubkey.pem new file mode 100644 index 000000000..7dd575d00 --- /dev/null +++ b/usr/etc/pubkey.pem @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAN08c22jym3KCRUF8/rKNXgU/J0vv6UC9eCta/ATTNgeW/z2rp/HsjcPkMLx9dLaqufShC0VzsUbGlqCsdQT8jfwBiLG2pjUkX20qTStRG/rs9Tv0rS/8eVNT/DbQ6zL3PTdp+XAIq+KQLucqcBazTqSzyF7ghZ7OVmsX1/ixTP3AAAAFQCYcP378X/dQ08l6u8O5uvEtxbvEwAAAIEAyOOuWttXGrprzBhKrjhop58bZTOZp0J0IMHMwi/J+K3HUuPZnaltGoW21MjqSvVor4m22r/3b8aUIom+jp4I/bmpxTOUgO6owTlCVX614fGPWcCw2M017aghQ/vUa/92DaMLO//FYD8X2b7WgyPNrJh9ckZ14oncBleJUfXmue8AAACBAKw00/IkoMJzTumFfT9+Jb442O1KZvtGyj1YWpyYXf3xbQFGXND7m4rTIS2zPvTcOauCHbZwZ9uBxE4zTdlGJ4XirPEbWwOl1TU71bZ3OqonVesyqSC04LLiuLGlIHyXxyc/UCzg1UL8mCBlLzqmPUkJoL0ZINo8Raqip8WM63KM root@freebsd-nexus-computers.pfsense.org diff --git a/usr/etc/rc b/usr/etc/rc new file mode 100755 index 000000000..c260b41eb --- /dev/null +++ b/usr/etc/rc @@ -0,0 +1,468 @@ +#!/bin/sh + +# $Id$ + +# /etc/rc - master bootup script, invokes php setup +# part of pfSense by Scott Ullrich +# Copyright (C) 2004-2010 Scott Ullrich, All rights reserved. +# originally based on m0n0wall (http://neon1.net/m0n0wall) +# Copyright (C) 2003-2004 Manuel Kasper . +# All rights reserved. + +#/bin/stty status '^T' +#/bin/stty susp '^-' intr '^-' quit '^-' + +#trap : 2 +#trap : 3 + +HOME=/ +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin +export HOME PATH + +# Set our operating platform +PLATFORM=`/bin/cat /etc/platform` + +# Set our current version +version=`/bin/cat /etc/version` + +# Setup dumpdev/ddb/savecore" +echo "Configuring crash dumps..." +if [ "$PLATFORM" = "pfSense" ]; then + /etc/rc.dumpon +fi + +if [ -e /root/force_fsck ]; then + echo "Forcing filesystem check..." + /sbin/fsck -y -t ufs / + if [ "$PLATFORM" = "nanobsd" ]; then + /sbin/fsck -y -t ufs /cf + fi +fi + +if [ "${PLATFORM}" = "nanobsd" ]; then + kldstat -qm zfs + if [ $? = 0 ]; then + kldunload zfs + fi +fi + +# Mount memory file system if it exists +echo "Mounting filesystems..." + +kldstat -qm zfs +# Handle ZFS read-only case +if [ "$PLATFORM" = "pfSense" ]; then + kldstat -qm zfs + if [ $? = 0 ]; then + ZFSFSAVAILABLE=$(/sbin/zfs mount 2>/dev/null | wc -l) + if [ $ZFSAVAILABLE -eq 0 ]; then + kldunload zfs + elif [ -f /usr/bin/grep ]; then + ZFSROOT=`/sbin/zfs mount | /usr/bin/grep ' /$' | /usr/bin/cut -d ' ' -f 1` + if [ "$ZFSROOT" != "" ]; then + /sbin/zfs set readonly=off $ZFSROOT + fi + fi + fi +fi + +if [ "${PLATFORM}" = "cdrom" ]; then + /etc/rc.cdrom +else + # Mount /. If it fails run a fsck. + if [ "$PLATFORM" = "nanobsd" ]; then + export PKG_TMPDIR=/root/ + /sbin/mount -uw / 2>/dev/null + mount_rc=$? + attempts=0 + while [ ${mount_rc} != 0 -a ${attempts} -lt 3 ]; do + /sbin/fsck -y / + /sbin/fsck -y /cf + /sbin/mount -uw / 2>/dev/null + mount_rc=$? + attempts=$((attempts+1)) + done + else + /sbin/mount -a 2>/dev/null + mount_rc=$? + attempts=0 + while [ ${mount_rc} != 0 -a ${attempts} -lt 3 ]; do + /sbin/fsck -y / + /sbin/mount -a 2>/dev/null + mount_rc=$? + attempts=$((attempts+1)) + done + fi + + # If /conf is a directory, convert it to a symlink to /cf/conf + if [ -d "/conf" ]; then + # If item is not a symlink then rm and recreate + CONFPOINTSTO=`readlink /conf` + if ! test "x$CONFPOINTSTO" = "x/cf/conf"; then + /bin/rm -rf /conf + /bin/ln -s /cf/conf /conf + fi + fi + + if [ ! "$PLATFORM" = "jail" ]; then + # Check to see if a compact flash mountpoint exists + # If it fails to mount then run a fsck -y + if grep -q cf /etc/fstab; then + /sbin/mount -w /cf 2>/dev/null + /sbin/mount -uw /cf 2>/dev/null + mount_rc=$? + attempts=0 + while [ ${mount_rc} != 0 -a ${attempts} -lt 3 ]; do + /sbin/umount /cf + /sbin/fsck -y /cf + /sbin/mount -w /cf 2>/dev/null + mount_rc=$? + attempts=$((attempts+1)) + done + fi + fi + + USE_MFS_TMPVAR=`/usr/bin/grep -c use_mfs_tmpvar /cf/conf/config.xml` + if [ "${PLATFORM}" = "nanobsd" ] || [ ${USE_MFS_TMPVAR} -gt 0 ]; then + /etc/rc.embedded + fi +fi + +/bin/rm -f /root/force_fsck +/bin/rm -f /root/TRIM_set +/bin/rm -f /root/TRIM_unset + +# Disable APM on ATA drives. Leaving this on will kill drives long-term, especially laptop drives, by generating excessive Load Cycles. +if [ -f /etc/rc.disable_hdd_apm ]; then + /etc/rc.disable_hdd_apm +fi + +#Eject CD devices on 3G modems +MANUFACTURER="huawei|zte" +CDDEVICE=`dmesg |egrep -ie "($MANUFACTURER)" | awk -F: '/cd/ {print $1}'` +if [ "$CDDEVICE" != "" ]; then + cdcontrol -f /dev/"$CDDEVICE" eject +fi + +# sync pw database after mount. +rm -f /etc/spwd.db.tmp +/usr/sbin/pwd_mkdb -d /etc/ /etc/master.passwd + +product=`/usr/bin/grep product_name /etc/inc/globals.inc | /usr/bin/cut -d'"' -f4` +hideplatform=`/usr/bin/grep hideplatform /etc/inc/globals.inc | /usr/bin/wc -l` +varrunpath=`/usr/bin/grep varrun_path /etc/inc/globals.inc | /usr/bin/cut -d'"' -f4` + +if [ "$PLATFORM" = "pfSense" ] && [ ${USE_MFS_TMPVAR} -eq 0 ]; then + /sbin/mdmfs -S -M -s 4m md $varrunpath +fi + +if [ "$hideplatform" -gt "0" ]; then + platformbanner="" # hide the platform +else + platformbanner=" on the '${PLATFORM}' platform" +fi + +echo +cat /etc/ascii-art/pfsense-logo-small.txt +echo +echo +echo "Welcome to ${product} ${version} ${platformbanner} ..." +echo + +if [ ! "$PLATFORM" = "jail" ]; then + # Enable console output if its muted. + /sbin/conscontrol mute off >/dev/null +fi + +if [ "$PLATFORM" = "cdrom" ] ; then + # do nothing for cdrom platform +elif [ "$PLATFORM" = "nanobsd" ] || [ ${USE_MFS_TMPVAR} -gt 0 ]; then + # Ensure that old-style PKG packages can be persistent across reboots + /bin/mkdir -p /root/var/db/pkg + /bin/rm -rf /var/db/pkg + /bin/ln -s /root/var/db/pkg/ /var/db/pkg + # Ensure that PBI packages can be persistent across reboots + /bin/mkdir -p /root/var/db/pbi + /bin/rm -rf /var/db/pbi + /bin/ln -s /root/var/db/pbi/ /var/db/pbi +elif [ "$PLATFORM" = "jail" ]; then + # do nothing for jail platform +else + SWAPDEVICE=`/bin/cat /etc/fstab | /usr/bin/grep swap | /usr/bin/cut -f1` + /sbin/swapon -a 2>/dev/null >/dev/null + /etc/rc.savecore + + if [ -d /root/var/db/pkg ]; then + # User must have just disabled RAM disks, move these back into place. + /bin/mkdir -p /var/db/pkg + /bin/mv /root/var/db/pkg /var/db/pkg + /bin/mkdir -p /var/db/pbi + /bin/mv /root/var/db/pbi /var/db/pbi + fi +fi + +# Copy PBI keys +if ls /usr/local/share/pbi-keys/*.ssl >/dev/null 2>&1; then + if [ ! -d "/var/db/pbi/keys" ]; then + mkdir -p /var/db/pbi/keys + fi + cp -f /usr/local/share/pbi-keys/*.ssl /var/db/pbi/keys +fi + +if [ "$PLATFORM" = "cdrom" ] ; then + echo -n "Mounting unionfs directories..." + /bin/mkdir /tmp/unionfs + /bin/mkdir /tmp/unionfs/usr + /bin/mkdir /tmp/unionfs/root + /bin/mkdir /tmp/unionfs/sbin + /bin/mkdir /tmp/unionfs/bin + /bin/mkdir /tmp/unionfs/boot + /bin/mkdir /tmp/unionfs/confdefault + /sbin/mount_unionfs /tmp/unionfs/usr /usr/ + /sbin/mount_unionfs /tmp/unionfs/root /root/ + /sbin/mount_unionfs /tmp/unionfs/bin /bin/ + /sbin/mount_unionfs /tmp/unionfs/sbin /sbin/ + /sbin/mount_unionfs /tmp/unionfs/boot /boot/ + /sbin/mount_unionfs /tmp/unionfs/confdefault /conf.default/ + echo "done." +fi + +# make some directories in /var +/bin/mkdir -p $varrunpath /var/log /var/etc /var/db/entropy /var/at/jobs/ /var/empty 2>/dev/null +/bin/rm -rf $varrunpath/* +if [ "$PLATFORM" != "pfSense" ]; then + /bin/rm /var/log/* 2>/dev/null +fi + +# Cleanup configuration files from previous instance +/bin/rm -rf /var/etc/* +/bin/rm -rf /var/tmp/* + +echo -n "Creating symlinks..." +# Make sure symlink is correct on nanobsd +if [ "$PLATFORM" = "nanobsd" ] ; then + /bin/rm /conf + /bin/ln -s /cf/conf/ /conf +fi + +# Repair symlinks if they are broken +if [ -f /etc/newsyslog.conf ]; then + /bin/rm -f /etc/newsyslog.conf +fi +if [ ! -L /etc/syslog.conf ]; then + /bin/rm -rf /etc/syslog.conf + if [ ! -f /var/etc/syslog.conf ]; then + touch /var/etc/syslog.conf + fi + /bin/ln -s /var/etc/syslog.conf /etc/syslog.conf +fi + +# Repair symlinks if they are broken +if [ ! -L /etc/hosts ]; then + /bin/rm -rf /etc/hosts + /bin/ln -s /var/etc/hosts /etc/hosts +fi + +if [ ! -L /etc/resolv.conf ]; then + /bin/rm -rf /etc/resolv.conf + /bin/ln -s /var/etc/resolv.conf /etc/resolv.conf +fi + +# Setup compatibility link for packages that +# have trouble overriding the PREFIX configure +# argument since we build our packages in a +# separated PREFIX area +# Only create if symlink does not exist. +if [ ! -h /tmp/tmp ]; then + /bin/ln -hfs / /tmp/tmp +fi + +# Make sure our /tmp is 777 + Sticky +if [ ! "$PLATFORM" = "cdrom" ] ; then + /bin/rm -rf /tmp/* +fi +/bin/chmod 1777 /tmp + +if [ ! "$PLATFORM" = "cdrom" ] ; then + # Malloc debugging check + if [ -L /etc/malloc.conf ]; then + #ln -s aj /etc/malloc.conf + /bin/rm /etc/malloc.conf + fi +fi + +if [ ! -L /etc/dhclient.conf ]; then + /bin/rm -rf /etc/dhclient.conf +fi + +if [ ! -d /var/tmp ]; then + /bin/mkdir -p /var/tmp +fi + +if [ ! -d /cf/conf/backup/ ]; then + /bin/mkdir -p /cf/conf/backup/ +fi + +set -T +trap "echo 'Reboot interrupted'; exit 1" 3 + +# Remove old nameserver resolution files +/bin/rm -f /var/etc/nameserver* + +# Create uploadbar tmp directory +/bin/mkdir -p /tmp/uploadbar +/bin/chmod 0777 /tmp/uploadbar + +echo -n "." +DISABLESYSLOGCLOG=`/usr/bin/grep -c disablesyslogclog /cf/conf/config.xml` +ENABLEFIFOLOG=`/usr/bin/grep -c usefifolog /cf/conf/config.xml` +LOG_FILES="system filter dhcpd vpn pptps poes l2tps openvpn portalauth ipsec ppp relayd wireless lighttpd ntpd gateways resolver routing" + +DEFAULT_LOG_FILE_SIZE=`/usr/local/bin/xmllint --xpath 'string(//pfsense/syslog/logfilesize)' /conf/config.xml` +if [ ! ${DEFAULT_LOG_FILE_SIZE} ]; then + DEFAULT_LOG_FILE_SIZE=511488 +fi + +for logfile in $LOG_FILES; do + if [ "$DISABLESYSLOGCLOG" -gt "0" ]; then + /usr/bin/touch /var/log/$logfile.log + else + if [ ! -f /var/log/$logfile.log ]; then + if [ "$ENABLEFIFOLOG" -gt "0" ]; then + # generate fifolog files + /usr/sbin/fifolog_create -s ${DEFAULT_LOG_FILE_SIZE} /var/log/$logfile.log + else + /usr/local/sbin/clog -i -s ${DEFAULT_LOG_FILE_SIZE} /var/log/$logfile.log + fi + fi + fi +done + +# change permissions on newly created fifolog files. +/bin/chmod 0600 /var/log/*.log + +echo -n "." +if [ ! "$PLATFORM" = "jail" ]; then + DEVFS=`/sbin/mount | /usr/bin/grep devfs | /usr/bin/wc -l | /usr/bin/cut -d" " -f8` + if [ "$DEVFS" = "0" ]; then + mount_devfs devfs /dev + fi +fi + +# Create an initial utmp file +cd $varrunpath && /bin/cp /dev/null utmp && /bin/chmod 644 utmp + +echo -n "." +/sbin/ldconfig -elf /usr/lib /usr/local/lib /lib +/etc/rc.d/ldconfig start 2>/dev/null + +# Make sure /etc/rc.conf doesn't exist. +if [ -f /etc/rc.conf ]; then + /bin/rm -rf /etc/rc.conf +fi + +if [ ! "$PLATFORM" = "jail" ]; then + # Launching kbdmux(4) + if [ -f "/dev/kbdmux0" ]; then + echo -n "." + /usr/sbin/kbdcontrol -k /dev/kbdmux0 < /dev/console + [ -c "/dev/atkbd0" ] && kbdcontrol -a atkbd0 < /dev/console + [ -c "/dev/ukbd0" ] && kbdcontrol -a ukbd0 < /dev/console + fi + + # Fire up unionfs if mount points exist. + if [ -f /dist/uniondirs ]; then + echo -n "." + /etc/rc.d/unionfs start + fi +fi + +echo "done." + +# Recreate capabilities DB +/usr/bin/cap_mkdb /etc/login.conf + +# Run the php.ini setup file and populate +# /usr/local/etc/php.ini and /usr/local/lib/php.ini +/etc/rc.php_ini_setup 2>/tmp/php_errors.txt +/usr/local/sbin/php-fpm -c /usr/local/lib/php.ini -y /usr/local/lib/php-fpm.conf -RD 2>&1 >/dev/null + +# Launch external configuration loader for supported platforms +if [ "$PLATFORM" = "nanobsd" ]; then + /usr/local/sbin/fcgicli -f /etc/ecl.php +fi + +# Launch external configuration loader for supported platforms +if [ "$PLATFORM" = "pfSense" ]; then + /usr/local/sbin/fcgicli -f /etc/ecl.php +fi + +if [ -f /etc/rc.custom_boot_early ]; then + /bin/echo -n "Launching /etc/rc.custom_boot_early..."; + /etc/rc.custom_boot_early + echo "Done" +fi + +export fcgipath=/var/run/php-fpm.socket +/usr/bin/nice -n20 /usr/local/opnsense/check_reload_status.py + +# let the PHP-based configuration subsystem set up the system now +echo -n "Launching the init system..." +/bin/rm -f /cf/conf/backup/backup.cache +/bin/rm -f /root/lighttpd* +/usr/bin/touch $varrunpath/booting +/etc/rc.bootup + +# /etc/rc.bootup unset $g['booting'], remove file right now to be +# consistent +/bin/rm $varrunpath/booting + +# If a shell was selected from recovery +# console then just drop to the shell now. +if [ -f "/tmp/donotbootup" ]; then + echo "Dropping to recovery shell." + exit 0 +fi + +echo -n "Starting CRON... " +cd /tmp && /usr/sbin/cron -s 2>/dev/null +echo "done." + +# Start packages +/usr/local/sbin/fcgicli -f /etc/rc.start_packages + +/bin/rm -rf /usr/local/pkg/pf/CVS + +# Start ping handler every 240 seconds +/usr/local/bin/minicron 240 $varrunpath/ping_hosts.pid /usr/local/bin/ping_hosts.sh + +# Start account expire handler every hour +/usr/local/bin/minicron 3600 $varrunpath/expire_accounts.pid '/usr/local/sbin/fcgicli -f /etc/rc.expireaccounts' + +# Start alias url updater every 24 hours +/usr/local/bin/minicron 86400 $varrunpath/update_alias_url_data.pid '/usr/local/sbin/fcgicli -f /etc/rc.update_alias_url_data' + +/bin/chmod a+rw /tmp/. + +# Check for GEOM mirrors +GMIRROR_STATUS=`/sbin/gmirror status` +if [ "${GMIRROR_STATUS}" != "" ]; then + # Using a flag file at bootup saves an expensive exec/check on each page load. + /usr/bin/touch /var/run/gmirror_active + # Setup monitoring/notifications + /usr/local/bin/minicron 60 /var/run/gmirror_status_check.pid /usr/local/sbin/gmirror_status_check.php +fi + +# Log product version to syslog +BUILDTIME=`cat /etc/version.buildtime` +ARCH=`uname -m` +echo "$product ($PLATFORM) $version $ARCH $BUILDTIME" + +echo "Bootup complete" + +/usr/local/bin/beep.sh start 2>&1 >/dev/null + +# Reset the cache. read-only requires this. +/bin/rm -f /tmp/config.cache + +exit 0 diff --git a/usr/etc/rc.backup_dhcpleases.sh b/usr/etc/rc.backup_dhcpleases.sh new file mode 100755 index 000000000..73f83a8e5 --- /dev/null +++ b/usr/etc/rc.backup_dhcpleases.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +# Save the DHCP lease database to the config path. +if [ -d "/var/dhcpd/var/db" ]; then + /etc/rc.conf_mount_rw + cd / && tar -czf /cf/conf/dhcpleases.tgz -C / var/dhcpd/var/db/ + /etc/rc.conf_mount_ro +fi diff --git a/usr/etc/rc.backup_rrd.sh b/usr/etc/rc.backup_rrd.sh new file mode 100755 index 000000000..0ae89fe08 --- /dev/null +++ b/usr/etc/rc.backup_rrd.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +: ${RRDDBPATH:=/var/db/rrd} +: ${CF_CONF_PATH:=/cf/conf} + +# Save the rrd databases to the config path. +if [ -d "${RRDDBPATH}" ]; then + [ -z "$NO_REMOUNT" ] && /etc/rc.conf_mount_rw + for rrdfile in "${RRDDBPATH}"/*.rrd ; do + xmlfile="${rrdfile%.rrd}.xml" + /usr/bin/nice -n20 /usr/local/bin/rrdtool dump "$rrdfile" "$xmlfile" + done + cd / && tar -czf "${CF_CONF_PATH}"/rrd.tgz -C / "${RRDDBPATH#/}"/*.xml + rm "${RRDDBPATH}"/*.xml + [ -z "$NO_REMOUNT" ] && /etc/rc.conf_mount_ro +fi + diff --git a/usr/etc/rc.banner b/usr/etc/rc.banner new file mode 100755 index 000000000..901286f8c --- /dev/null +++ b/usr/etc/rc.banner @@ -0,0 +1,123 @@ +#!/usr/local/bin/php -f + $friendly) { + /* point to this interface's config */ + $ifconf = $config['interfaces'][$ifname]; + /* look for 'special cases' */ + switch($ifconf['ipaddr']) { + case "dhcp": + $class = "/DHCP4"; + break; + case "pppoe": + $class = "/PPPoE"; + break; + case "pptp": + $class = "/PPTP"; + break; + case "l2tp": + $class = "/L2TP"; + break; + default: + $class = ""; + break; + } + switch($ifconf['ipaddrv6']) { + case "dhcp6": + $class6 = "/DHCP6"; + break; + case "slaac": + $class6 = "/SLAAC"; + break; + case "6rd": + $class6 = "/6RD"; + break; + case "6to4": + $class6 = "/6to4"; + break; + case "track6": + $class6 = "/t6"; + break; + } + $ipaddr = get_interface_ip($ifname); + $subnet = get_interface_subnet($ifname); + $ipaddr6 = get_interface_ipv6($ifname); + $subnet6 = get_interface_subnetv6($ifname); + $realif = get_real_interface($ifname); + $tobanner = "{$friendly} ({$ifname})"; + + printf("\n %-15s -> %-10s -> ", + $tobanner, + $realif + ); + $v6first = false; + if (!empty($ipaddr) && !empty($subnet)) { + printf("v4%s: %s/%s", + $class, + $ipaddr, + $subnet + ); + } else { + $v6first = true; + } + if (!empty($ipaddr6) && !empty($subnet6)) { + if (!$v6first) { + printf("\n%s", str_repeat(" ",34)); + } + printf("v6%s: %s/%s", + $class6, + $ipaddr6, + $subnet6 + ); + } + } + +?> diff --git a/usr/etc/rc.bootup b/usr/etc/rc.bootup new file mode 100755 index 000000000..69eb48624 --- /dev/null +++ b/usr/etc/rc.bootup @@ -0,0 +1,455 @@ +#!/usr/local/bin/php -f +. + Copyright (C) 2003-2004 Manuel Kasper . + Copyright (C) 2009 Erik Kristensen + 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 rescue_detect_keypress() { + // How long do you want the script to wait before moving on (in seconds) + $timeout=9; + echo "\n"; + echo "[ Press R to enter recovery mode or ]\n"; + echo "[ press I to launch the installer ]\n\n"; + echo "(R)ecovery mode can assist by rescuing config.xml\n"; + echo "from a broken hard disk installation, etc.\n\n"; + echo "(I)nstaller may be invoked now if you do \n"; + echo "not wish to boot into the liveCD environment at this time.\n\n"; + echo "(C) continues the LiveCD bootup without further pause.\n\n"; + echo "Timeout before auto boot continues (seconds): {$timeout}"; + $key = null; + exec("/bin/stty erase " . chr(8)); + while(!in_array($key, array("c", "C", "r","R", "i", "I", "~", "!"))) { + echo chr(8) . "{$timeout}"; + `/bin/stty -icanon min 0 time 25`; + $key = trim(`KEY=\`dd count=1 2>/dev/null\`; echo \$KEY`); + `/bin/stty icanon`; + // Decrement our timeout value + $timeout--; + // If we have reached 0 exit and continue on + if ($timeout == 0) + break; + } + // If R or I was pressed do our logic here + if (in_array($key, array("r", "R"))) { + putenv("TERM=cons25"); + echo "\n\nRecovery mode selected...\n"; + passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer_rescue"); + } elseif (in_array($key, array("i", "I"))) { + putenv("TERM=cons25"); + echo "\n\nInstaller mode selected...\n"; + passthru("/usr/bin/env TERM=cons25 /bin/tcsh -c /scripts/lua_installer"); + if(file_exists("/tmp/install_complete")) { + passthru("/etc/rc.reboot"); + exit; + } + } elseif (in_array($key, array("!", "~"))) { + putenv("TERM=cons25"); + echo "\n\nRecovery shell selected...\n"; + echo "\n"; + touch("/tmp/donotbootup"); + exit; + } else { + echo "\n\n"; + } +} + +echo " done.\n"; + +echo "Initializing..."; +echo "."; +require_once("/etc/inc/globals.inc"); +echo "."; +require_once("/etc/inc/led.inc"); +led_normalize(); +echo "."; +if (led_count() >= 3) { + led_kitt(); +} + +/* let the other functions know we're booting */ +$pkg_interface = 'console'; +$g['booting'] = true; + +/* parse the configuration and include all functions used below */ +require_once("/etc/inc/config.inc"); +echo "."; +require_once("/etc/inc/config.console.inc"); +echo "."; +require_once("/etc/inc/auth.inc"); +echo "."; +require_once("/etc/inc/functions.inc"); +echo "."; +require_once("/etc/inc/filter.inc"); +echo "."; +require_once("/etc/inc/shaper.inc"); +echo "."; +require_once("/etc/inc/ipsec.inc"); +echo "."; +require_once("/etc/inc/vpn.inc"); +echo "."; +require_once("/etc/inc/openvpn.inc"); +echo "."; +require_once("/etc/inc/captiveportal.inc"); +echo "."; +require_once("/etc/inc/rrd.inc"); +echo "."; +require_once("/etc/inc/pfsense-utils.inc"); +echo "."; + +/* get system memory amount */ +$memory = get_memory(); +$physmem = $memory[0]; +$realmem = $memory[1]; +echo " done.\n"; + +conf_mount_rw(); + +/* save dmesg output to file */ +system_dmesg_save(); + +/* check whether config reset is desired (via hardware button on WRAP/ALIX) */ +system_check_reset_button(); + +/* remove previous firmware upgrade if present */ +if (file_exists("/root/firmware.tgz")) + unlink("/root/firmware.tgz"); + +/* start devd (dhclient now uses it) */ +echo "Starting device manager (devd)..."; +mute_kernel_msgs(); +start_devd(); +set_device_perms(); +unmute_kernel_msgs(); +echo "done.\n"; + +// Display rescue configuration option +if($g['platform'] == "cdrom") + rescue_detect_keypress(); + +echo "Loading configuration..."; +parse_config_bootup(); +echo "done.\n"; + +if($g['platform'] == "jail") { + /* We must determine what network settings have been configured for us */ + $wanif = "lo0"; /* defaults, if the jail admin hasn't set us up */ + $ipaddr = "127.0.0.1"; + $iflist = get_interface_list(); + foreach ($iflist as $iface => $ifa) { + if (isset($ifa['ipaddr'])) { + $wanif = $iface; + $ipaddr = $ifa['ipaddr']; + break; + } + } + $config['interfaces'] = array(); + $config['interfaces']['lan'] = array(); + $config['interfaces']['lan']['enable'] = false; + $config['interfaces']['wan'] = array(); + /* XXX, todo */ + $config['interfaces']['wan']['if'] = $wanif; + $config['interfaces']['wan']['ipaddr'] = $ipaddr; + $config['interfaces']['wan']['subnet'] = "32"; /* XXX right? */ + $config['interfaces']['wan']['enable'] = true; + if($config['dhcpd']['lan']) + unset($config['dhcpd']['lan']['enable']); + unlink_if_exists('/conf/trigger_initial_wizard'); + write_config(); +} else { + /* + * Determine if we need to throw a interface exception + * and ask the user to reassign interfaces. This will + * avoid a reboot and thats a good thing. + */ + while(is_interface_mismatch() == true) { + led_assigninterfaces(); + if (isset($config['revision'])) { + if (file_exists("{$g['tmp_path']}/missing_interfaces")) + echo "Warning: Configuration references interfaces that do not exist: " . file_get_contents("{$g['tmp_path']}/missing_interfaces") . "\n"; + echo "\nNetwork interface mismatch -- Running interface assignment option.\n"; + } else + echo "\nDefault interfaces not found -- Running interface assignment option.\n"; + $ifaces = get_interface_list(); + if (is_array($ifaces)) { + foreach($ifaces as $iface => $ifdata) + interfaces_bring_up($iface); + } + set_networking_interfaces_ports(); + led_kitt(); + } +} + +/* convert config and clean backups */ +echo "Updating configuration..."; +convert_config(); +echo "done.\n"; + +echo "Cleaning backup cache..."; +cleanup_backupcache(true); +echo "done.\n"; + +/* read in /etc/sysctl.conf and set values if needed */ +echo "Setting up extended sysctls..."; +system_setup_sysctl(); +echo "done.\n"; + +/* enable optional crypto modules */ +load_crypto(); + +/* enable optional thermal sensor modules */ +load_thermal_hardware(); + +/* run any early shell commands specified in config.xml */ +system_do_shell_commands(1); + +/* set up our timezone */ +system_timezone_configure(); + +/* set up our hostname */ +system_hostname_configure(); + +/* make hosts file */ +system_hosts_generate(); + +/* configure loopback interface */ +interfaces_loopback_configure(); + +/* start syslogd */ +system_syslogd_start(); + +echo "Starting Secure Shell Services..."; +send_event("service reload sshd"); +echo "done.\n"; + +/* setup polling */ +echo "Setting up polling defaults..."; +setup_polling(); +echo "done.\n"; + +/* setup interface microcode which improves tcp/ip speed */ +echo "Setting up interfaces microcode..."; +setup_microcode(); +echo "done.\n"; + +/* set up interfaces */ +if(!$debugging) + mute_kernel_msgs(); +interfaces_configure(); +if(!$debugging) + unmute_kernel_msgs(); + +/* re-make hosts file after configuring interfaces */ +system_hosts_generate(); + +/* start OpenVPN server & clients */ +echo "Syncing OpenVPN settings..."; +openvpn_resync_all(); +echo "done.\n"; + +/* generate resolv.conf */ +system_resolvconf_generate(); + +/* setup altq + pf */ +filter_configure_sync(); + +/* start pflog */ +echo "Starting PFLOG..."; +filter_pflog_start(); +echo "done.\n"; + +/* reconfigure our gateway monitor */ +echo "Setting up gateway monitors..."; +setup_gateways_monitor(); +echo "done.\n"; + +echo "Synchronizing user settings..."; +local_sync_accounts(); +echo "done.\n"; + +if($realmem > 0 and $realmem < 65) { + echo "System has less than 65 megabytes of ram {$realmem}. Delaying webConfigurator startup.\n"; + /* start webConfigurator up on final pass */ + mwexec("/usr/local/sbin/pfSctl -c 'service restart webgui'"); +} else { + /* start web server */ + system_webgui_start(); +} + +/* configure cron service */ +echo "Configuring CRON..."; +configure_cron(); +echo "done.\n"; + +/* set up static routes */ +system_routing_configure(); + +/* enable routing */ +system_routing_enable(); + +/* start dnsmasq service */ +services_dnsmasq_configure(); + +/* start unbound service */ +services_unbound_configure(); + +/* Do an initial time sync */ +echo "Starting NTP time client..."; +/* At bootup this will just write the config, ntpd will launch from ntpdate_sync_once.sh */ +system_ntp_configure(false); +mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh", true); +echo "done.\n"; + +/* start load balancer daemon */ +relayd_configure(); + +/* configure console menu */ +system_console_configure(); + +/* start DHCP service */ +services_dhcpd_configure(); + +/* start dhcpleases dhpcp hosts leases program */ +system_dhcpleases_configure(); + +/* start DHCP relay */ +services_dhcrelay_configure(); + +/* start DHCP6 relay */ +services_dhcrelay6_configure(); + +/* dyndns service updates */ +send_event("service reload dyndnsall"); + +/* Run a filter configure now that most all services have started */ +filter_configure_sync(); + +/* setup pppoe and pptp */ +vpn_setup(); + +/* start the captive portal */ +captiveportal_configure(); + +/* start Voucher support */ +voucher_configure(); + +/* run any shell commands specified in config.xml */ +system_do_shell_commands(); + +/* start IPsec tunnels */ +$ipsec_dynamic_hosts = vpn_ipsec_configure(); + +/* start SNMP service */ +services_snmpd_configure(); + +/* power down hard drive if needed/set */ +system_set_harddisk_standby(); + +/* lock down console if necessary */ +reload_ttys(); + +/* load graphing functions */ +enable_rrd_graphing(); + +/* enable watchdog if supported */ +enable_watchdog(); + +/* if exists, execute the command */ +if($config['system']['afterbootupshellcmd'] <> "") { + echo "Running afterbootupshellcmd {$config['system']['afterbootupshellcmd']}\n"; + mwexec($config['system']['afterbootupshellcmd']); +} + +if($physmem < $g['minimum_ram_warning']) { + require_once("/etc/inc/notices.inc"); + file_notice("{$g['product_name']}MemoryRequirements", "{$g['product_name']} requires at least {$g['minimum_ram_warning_text']} of RAM. Expect unusual performance. This platform is not supported.", "Memory", "", 1); + set_sysctl(array( + "net.inet.tcp.recvspace" => "4096", + "net.inet.tcp.sendspace" => "4096" + )); +} + +/* if we are operating at 1000 then increase timeouts. + this was never accounted for after moving to 1000 hz */ +$kern_hz = get_single_sysctl('kern.clockrate'); +$kern_hz = substr($kern_hz, strpos($kern_hz, "hz = ") + 5); +$kern_hz = substr($kern_hz, 0, strpos($kern_hz, ",")); +if($kern_hz == "1000") + set_single_sysctl("net.inet.tcp.rexmit_min" , "30"); + +/* start the igmpproxy daemon */ +services_igmpproxy_configure(); + +/* start the upnp daemon if it is enabled */ +upnp_start(); + +/* If powerd is enabled, lets launch it */ +activate_powerd(); + +/* Set preferred protocol */ +prefer_ipv4_or_ipv6(); + +/* Remove the old shutdown binary if we kept it. */ +if (file_exists("/sbin/shutdown.old")) + @unlink("/sbin/shutdown.old"); + +/* Resync / Reinstall packages if need be */ +if(file_exists('/conf/needs_package_sync')) { + if($config['installedpackages'] <> '' && is_array($config['installedpackages']['package'])) { + require_once("pkg-utils.inc"); + if($g['platform'] == "pfSense" || $g['platform'] == "nanobsd") { + mark_subsystem_dirty('packagelock'); + pkg_reinstall_all(); + clear_subsystem_dirty('packagelock'); + } + } + @unlink('/conf/needs_package_sync'); +} + +/* Give syslogd a kick after everything else has been initialized, otherwise it can occasionally + fail to route syslog messages properly on both IPv4 and IPv6 */ +system_syslogd_start(); + +/* done */ +unset($g['booting']); + +/* If there are ipsec dynamic hosts try again to reload the tunnels as rc.newipsecdns does */ +if ($ipsec_dynamic_hosts) { + vpn_ipsec_configure(); + filter_configure(); +} + +led_normalize(); + +conf_mount_ro(); + +?> diff --git a/usr/etc/rc.captiveportal_configure b/usr/etc/rc.captiveportal_configure new file mode 100755 index 000000000..bd59361a1 --- /dev/null +++ b/usr/etc/rc.captiveportal_configure @@ -0,0 +1,40 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.carpbackup b/usr/etc/rc.carpbackup new file mode 100755 index 000000000..439c21452 --- /dev/null +++ b/usr/etc/rc.carpbackup @@ -0,0 +1,73 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.carpmaster b/usr/etc/rc.carpmaster new file mode 100755 index 000000000..d22b267f8 --- /dev/null +++ b/usr/etc/rc.carpmaster @@ -0,0 +1,81 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.cdrom b/usr/etc/rc.cdrom new file mode 100755 index 000000000..2018fe9ee --- /dev/null +++ b/usr/etc/rc.cdrom @@ -0,0 +1,44 @@ +#!/bin/sh +# +# rc.cdrom - livedisc specific routines +# For pfSense + +# Size of memory file system /conf /home partitions +partsize="6m" + +# Run some initialization routines +/etc/rc.d/uzip start + +export VARMFS_COPYDBPKG=yes + +for i in tmp varmfs etcmfs; do + if [ -f /etc/rc.d/$i ]; then + sh /etc/rc.d/$i start + fi +done + +# Start PFI +/bin/sh /scripts/pfi start + +# If PFI did not find a config, we should create +# a tiny mfs under /conf and populate with stock +# configuration. +if [ ! -f /conf/config.xml ]; then + echo -n "Generating a MFS /conf partition... " + device=$(mdconfig -a -t malloc -s ${partsize}) + newfs /dev/${device} > /dev/null 2>&1 + mount /dev/${device} /conf + cp /conf.default/* /conf + mount_nullfs /conf /cf/conf + echo "done." +fi + +echo -n "Generating a MFS /home partition... " +device=$(mdconfig -a -t malloc -s ${partsize}) +newfs /dev/${device} > /dev/null 2>&1 +mount /dev/${device} /home +echo "done." + +# Create some needed directories +/bin/mkdir -p /var/db/pkg/ +/bin/mkdir -p /var/tmp/vi.recover/ diff --git a/usr/etc/rc.conf_mount_ro b/usr/etc/rc.conf_mount_ro new file mode 100755 index 000000000..9e82fecdf --- /dev/null +++ b/usr/etc/rc.conf_mount_ro @@ -0,0 +1,36 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.conf_mount_rw b/usr/etc/rc.conf_mount_rw new file mode 100755 index 000000000..45d25e29a --- /dev/null +++ b/usr/etc/rc.conf_mount_rw @@ -0,0 +1,36 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.create_full_backup b/usr/etc/rc.create_full_backup new file mode 100755 index 000000000..048e68bb5 --- /dev/null +++ b/usr/etc/rc.create_full_backup @@ -0,0 +1,18 @@ +#!/bin/sh + +FILENAME="pfSense-full-backup-`date "+%Y%m%d-%H%M"`.tgz" +echo ">>> Creating full backup to /root/$FILENAME" +tar czPf /root/$FILENAME \ + --exclude dev/* \ + --exclude tmp/* \ + --exclude var/db \ + --exclude var/run/* \ + --exclude root/* \ + --exclude var/empty/* \ + --exclude var/empty \ + --exclude var/etc \ + / + +echo ">>> Backup completed. Note: this backup includes config.xml!" +echo ">>> To restore this backup run this command:" +echo " /etc/rc.restore_full_backup /root/$FILENAME" diff --git a/usr/etc/rc.dhclient_cron b/usr/etc/rc.dhclient_cron new file mode 100755 index 000000000..3ffb46eda --- /dev/null +++ b/usr/etc/rc.dhclient_cron @@ -0,0 +1,53 @@ +#!/usr/local/bin/php -f + $interface) { + $real_interface = get_real_interface($ifname); + if($config['interfaces'][$ifname]['ipaddr'] == "dhcp") { + $pid = find_dhclient_process($real_interface); + if($pid == 0 or !$pid) { + /* dhclient is not running for interface, kick it */ + log_error("DHCLIENT was not running for {$real_interface} ... Launching new instance."); + exec("/sbin/dhclient $real_interface"); + } + } +} + +?> diff --git a/usr/etc/rc.disable_hdd_apm b/usr/etc/rc.disable_hdd_apm new file mode 100755 index 000000000..e9b3ba5af --- /dev/null +++ b/usr/etc/rc.disable_hdd_apm @@ -0,0 +1,13 @@ +#!/bin/sh + +ATAIDLE=/usr/local/sbin/ataidle +for i in /dev/ad?; do + if [ ! -e ${i} ]; then + continue; + fi + SUPPORTED=`${ATAIDLE} ${i} | grep "APM Supported" | awk '{print $3;}'` + if [ "${SUPPORTED}" = "yes" ] ; then + echo Disabling APM on $i + ${ATAIDLE} -P 0 ${i} + fi +done diff --git a/usr/etc/rc.dumpon b/usr/etc/rc.dumpon new file mode 100755 index 000000000..fad1a8249 --- /dev/null +++ b/usr/etc/rc.dumpon @@ -0,0 +1,35 @@ +#!/bin/sh +# Based on: +# FreeBSD: src/etc/rc.d/dumpon,v 1.12.2.1.4.1 2010/06/14 02:09:06 kensmith Exp + +# dumpon + +dumpon_try() +{ + if /sbin/dumpon "${1}" ; then + # Make a symlink in devfs for savecore + echo "Using ${1} for dump device." + ln -fs "${1}" /dev/dumpdev + return 0 + fi + echo "Unable to specify $1 as a dump device." + return 1 +} + +# Enable dumpdev so that savecore can see it. Enable it +# early so a crash early in the boot process can be caught. +# +while read dev mp type more ; do + [ "${type}" = "swap" ] || continue + [ -c "${dev}" ] || continue + dumpon_try "${dev}" && works=true +done &2 + exit +fi + +# ddb +if [ ! -z "`sysctl -Nq debug.ddb.scripting.scripts`" ]; then + /sbin/ddb /etc/ddb.conf +fi diff --git a/usr/etc/rc.dyndns.update b/usr/etc/rc.dyndns.update new file mode 100755 index 000000000..ac56f3562 --- /dev/null +++ b/usr/etc/rc.dyndns.update @@ -0,0 +1,56 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.embedded b/usr/etc/rc.embedded new file mode 100755 index 000000000..b4c60fba0 --- /dev/null +++ b/usr/etc/rc.embedded @@ -0,0 +1,34 @@ +#!/bin/sh +# +# rc.embedded - embedded system specific startup information +# For pfSense + +# Size of /tmp +USE_MFS_TMP_SIZE=`/usr/bin/grep use_mfs_tmp_size /cf/conf/config.xml | /usr/bin/cut -f2 -d'>' | /usr/bin/cut -f1 -d'<'` +if [ ! -z ${USE_MFS_TMP_SIZE} ] && [ ${USE_MFS_TMP_SIZE} -gt 0 ]; then + tmpsize="${USE_MFS_TMP_SIZE}m" +else + tmpsize="40m" +fi + +# Size of /var +USE_MFS_VAR_SIZE=`/usr/bin/grep use_mfs_var_size /cf/conf/config.xml | /usr/bin/cut -f2 -d'>' | /usr/bin/cut -f1 -d'<'` +if [ ! -z ${USE_MFS_VAR_SIZE} ] && [ ${USE_MFS_VAR_SIZE} -gt 0 ]; then + varsize="${USE_MFS_VAR_SIZE}m" +else + varsize="60m" +fi + +# Run some initialization routines +[ -f /etc/rc.d/uzip ] && /etc/rc.d/uzip start + +echo -n "Setting up memory disks..." +mdmfs -S -M -s ${tmpsize} md /tmp +mdmfs -S -M -s ${varsize} md /var + +# Create some needed directories +/bin/mkdir -p /var/db + +# Ensure vi's recover directory is present +/bin/mkdir -p /var/tmp/vi.recover/ +echo " done." diff --git a/usr/etc/rc.expireaccounts b/usr/etc/rc.expireaccounts new file mode 100755 index 000000000..53e38748b --- /dev/null +++ b/usr/etc/rc.expireaccounts @@ -0,0 +1,66 @@ +#!/usr/local/bin/php -f + strtotime($user['expires'])) { + echo "Disabling user {$user['name']} at index #{$index}\n"; + //unset($config['system']['user'][$index]); + $user['disabled'] = true; + $removed++; + $count--; + $index--; + } + } + + if($removed > 0) + write_config("Expired {$removed} user accounts"); + + //print_r($config); + +?> diff --git a/usr/etc/rc.filter_configure b/usr/etc/rc.filter_configure new file mode 100755 index 000000000..92be68da1 --- /dev/null +++ b/usr/etc/rc.filter_configure @@ -0,0 +1,43 @@ +#!/usr/local/bin/php -f + \ No newline at end of file diff --git a/usr/etc/rc.filter_configure_sync b/usr/etc/rc.filter_configure_sync new file mode 100755 index 000000000..1f3668141 --- /dev/null +++ b/usr/etc/rc.filter_configure_sync @@ -0,0 +1,41 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.filter_configure_xmlrpc b/usr/etc/rc.filter_configure_xmlrpc new file mode 100755 index 000000000..bd1f78515 --- /dev/null +++ b/usr/etc/rc.filter_configure_xmlrpc @@ -0,0 +1,53 @@ +#!/usr/local/bin/php -f +. + 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. + +*/ + +require_once("globals.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("xmlrpc.inc"); +require_once("interfaces.inc"); + +system_routing_configure(); +setup_gateways_monitor(); +relayd_configure(); +require_once("openvpn.inc"); +openvpn_resync_all(); +services_dhcpd_configure(); + +?> diff --git a/usr/etc/rc.filter_synchronize b/usr/etc/rc.filter_synchronize new file mode 100755 index 000000000..ccb745ca1 --- /dev/null +++ b/usr/etc/rc.filter_synchronize @@ -0,0 +1,436 @@ +#!/usr/local/bin/php -f +. + 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. + +*/ + +require_once("globals.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("xmlrpc.inc"); +require_once("interfaces.inc"); + +/* + * backup_vip_config_section($section): returns as an xml file string of + * the configuration section + */ +function backup_vip_config_section() { + global $config; + + if (!is_array($config['virtualip']['vip'])) + return; + $temp = array(); + $temp['vip'] = array(); + foreach($config['virtualip']['vip'] as $section) { + if ($section['mode'] != "carp") + continue; + if ($section['advskew'] <> "") { + $section_val = intval($section['advskew']); + $section_val=$section_val+100; + if ($section_val > 254) + $section_val = 254; + $section['advskew'] = $section_val; + } + if ($section['advbase'] <> "") { + $section_val = intval($section['advbase']); + if ($section_val > 254) + $section_val = 254; + $section['advbase'] = $section_val; + } + $temp['vip'][] = $section; + } + return $temp; +} + +function remove_special_characters($string) { + $match_array = ""; + preg_match_all("/[a-zA-Z0-9\_\-]+/",$string,$match_array); + $string = ""; + foreach ($match_array[0] as $ma) { + if ($string <> "") + $string .= " "; + $string .= $ma; + } + return $string; +} + +function carp_check_version($url, $username, $password, $port = 80, $method = 'pfsense.host_firmware_version') { + global $config, $g; + + if(file_exists("{$g['varrun_path']}/booting") || $g['booting']) + return; + + $params = array( + XML_RPC_encode($password) + ); + + $numberofruns = 0; + while ($numberofruns < 2) { + $msg = new XML_RPC_Message($method, $params); + $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port); + $cli->setCredentials($username, $password); + if($numberofruns > 0) + $cli->setDebug(1); + /* send our XMLRPC message and timeout after 240 seconds */ + $resp = $cli->send($msg, "240"); + if(!is_object($resp)) { + $error = "A communications error occurred while attempting XMLRPC sync with username {$username} {$url}:{$port}."; + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting XMLRPC sync with username {$username} {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + } else { + $parsed_response = XML_RPC_decode($resp->value()); + if(!is_array($parsed_response)) { + if (trim($parsed_response) == "Authentication failed") { + $error = "An authentication failure occurred while trying to access {$url}:{$port} ({$method})."; + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + exit; + } + } else { + if (!isset($parsed_response['config_version']) || + $parsed_response['config_version'] < $config['version']) { + update_filter_reload_status("The other member is on older configuration version of {$g['product_name']}. Sync will not be done to prevent problems!"); + log_error("The other member is on older configuration version of {$g['product_name']}. Sync will not be done to prevent problems!"); + return false; + } else + return true; + } + } + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + $numberofruns++; + } + + return false; +} + +function carp_sync_xml($url, $username, $password, $sections, $port = 80, $method = 'pfsense.restore_config_section') { + global $config, $g; + + if(file_exists("{$g['varrun_path']}/booting") || $g['booting']) + return; + + update_filter_reload_status("Syncing CARP data to {$url}"); + + /* make a copy of config */ + $config_copy = $config; + + /* strip out nosync items */ + if (is_array($config_copy['nat']['outbound']['rule'])) { + $rulescnt = count($config_copy['nat']['outbound']['rule']); + for ($x = 0; $x < $rulescnt; $x++) { + $config_copy['nat']['outbound']['rule'][$x]['descr'] = remove_special_characters($config_copy['nat']['outbound']['rule'][$x]['descr']); + if (isset ($config_copy['nat']['outbound']['rule'][$x]['nosync'])) + unset ($config_copy['nat']['outbound']['rule'][$x]); + } + } + if (is_array($config_copy['nat']['rule'])) { + $natcnt = count($config_copy['nat']['rule']); + for ($x = 0; $x < $natcnt; $x++) { + $config_copy['nat']['rule'][$x]['descr'] = remove_special_characters($config_copy['nat']['rule'][$x]['descr']); + if (isset ($config_copy['nat']['rule'][$x]['nosync'])) + unset ($config_copy['nat']['rule'][$x]); + } + } + if (is_array($config_copy['filter']['rule'])) { + $filtercnt = count($config_copy['filter']['rule']); + for ($x = 0; $x < $filtercnt; $x++) { + $config_copy['filter']['rule'][$x]['descr'] = remove_special_characters($config_copy['filter']['rule'][$x]['descr']); + if (isset ($config_copy['filter']['rule'][$x]['nosync'])) + unset ($config_copy['filter']['rule'][$x]); + } + } + if (is_array($config_copy['aliases']['alias'])) { + $aliascnt = count($config_copy['aliases']['alias']); + for ($x = 0; $x < $aliascnt; $x++) { + $config_copy['aliases']['alias'][$x]['descr'] = remove_special_characters($config_copy['aliases']['alias'][$x]['descr']); + if (isset ($config_copy['aliases']['alias'][$x]['nosync'])) + unset ($config_copy['aliases']['alias'][$x]); + } + } + if (is_array($config_copy['dnsmasq']['hosts'])) { + $dnscnt = count($config_copy['dnsmasq']['hosts']); + for ($x = 0; $x < $dnscnt; $x++) { + $config_copy['dnsmasq']['hosts'][$x]['descr'] = remove_special_characters($config_copy['dnsmasq']['hosts'][$x]['descr']); + if (isset ($config_copy['dnsmasq']['hosts'][$x]['nosync'])) + unset ($config_copy['dnsmasq']['hosts'][$x]); + } + } + if (is_array($config_copy['ipsec']['tunnel'])) { + $ipseccnt = count($config_copy['ipsec']['tunnel']); + for ($x = 0; $x < $ipseccnt; $x++) { + $config_copy['ipsec']['tunnel'][$x]['descr'] = remove_special_characters($config_copy['ipsec']['tunnel'][$x]['descr']); + if (isset ($config_copy['ipsec']['tunnel'][$x]['nosync'])) + unset ($config_copy['ipsec']['tunnel'][$x]); + } + } + + if (is_array($config_copy['dhcpd'])) { + foreach($config_copy['dhcpd'] as $dhcpif => $dhcpifconf) { + if($dhcpifconf['failover_peerip'] <> "") { + $int = guess_interface_from_ip($dhcpifconf['failover_peerip']); + $intip = find_interface_ip($int); + $config_copy['dhcpd'][$dhcpif]['failover_peerip'] = $intip; + } + } + } + + foreach ($sections as $section) { + /* we can't use array_intersect_key() + * due to the vip 'special case' + */ + switch ($section) { + case 'virtualip': + $xml[$section] = backup_vip_config_section(); + break; + case 'user': + $xml['system'][$section] = $config_copy['system'][$section]; + $xml['system']['nextuid'] = $config_copy['system']['nextuid']; + break; + case 'group': + $xml['system'][$section] = $config_copy['system'][$section]; + $xml['system']['nextgid'] = $config_copy['system']['nextgid']; + break; + case 'authserver': + $xml['system'][$section] = $config_copy['system'][$section]; + default: + $xml[$section] = $config_copy[$section]; + } + } + + $params = array( + XML_RPC_encode($password), + XML_RPC_encode($xml) + ); + + $numberofruns = 0; + while ($numberofruns < 2) { + log_error("Beginning XMLRPC sync to {$url}:{$port}."); + $msg = new XML_RPC_Message($method, $params); + $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port); + $cli->setCredentials($username, $password); + if($numberofruns > 0) + $cli->setDebug(1); + /* send our XMLRPC message and timeout after 240 seconds */ + $resp = $cli->send($msg, "240"); + if(!is_object($resp)) { + $error = "A communications error occurred while attempting XMLRPC sync with username {$username} {$url}:{$port}."; + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting XMLRPC sync with username {$username} {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + } else { + $parsed_response = XML_RPC_decode($resp->value()); + if(!is_array($parsed_response) && trim($parsed_response) == "Authentication failed") { + $error = "An authentication failure occurred while trying to access {$url}:{$port} ($method)."; + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + exit; + } else { + log_error("XMLRPC sync successfully completed with {$url}:{$port}."); + update_filter_reload_status("XMLRPC sync successfully completed with {$url}:{$port}."); + } + $numberofruns = 3; + } + $numberofruns++; + } +} + +global $g; +if (file_exists("{$g['varrun_path']}/booting") || $g['booting']) + return; + +if (is_array($config['hasync'])) { + update_filter_reload_status("Building high availability sync information"); + $hasync = $config['hasync']; + + if (empty($hasync['synchronizetoip'])) { + log_error("Config sync not being done because of missing sync IP (this is normal on secondary systems)."); + exit; + } + + /* + * XXX: The way we're finding the port right now is really suboptimal - + * we can't assume that the other machine is setup identically. + */ + if (!empty($config['system']['webgui']['protocol'])) { + $synchronizetoip = $config['system']['webgui']['protocol']; + $synchronizetoip .= "://"; + } + + /* if port is empty lets rely on the protocol selection */ + $port = $config['system']['webgui']['port']; + if (empty($port)) { + if ($config['system']['webgui']['protocol'] == "http") + $port = "80"; + else + $port = "443"; + } + + if(is_ipaddrv6($hasync['synchronizetoip'])) + $hasync['synchronizetoip'] = "[{$hasync['synchronizetoip']}]"; + $synchronizetoip .= $hasync['synchronizetoip']; + if ($hasync['synchronizerules'] != "") { + if (!is_array($config['filter'])) + $config['filter'] = array(); + $sections[] = 'filter'; + } + if ($hasync['synchronizenat'] != "") { + if (!is_array($config['nat'])) + $config['nat'] = array(); + $sections[] = 'nat'; + } + if ($hasync['synchronizealiases'] != "") { + if (!is_array($config['aliases'])) + $config['aliases'] = array(); + $sections[] = 'aliases'; + } + if ($hasync['synchronizedhcpd'] != "" and is_array($config['dhcpd'])) + $sections[] = 'dhcpd'; + if ($hasync['synchronizewol'] != "") { + if (!is_array($config['wol'])) + $config['wol'] = array(); + $sections[] = 'wol'; + } + if ($hasync['synchronizetrafficshaper'] != "" and is_array($config['shaper'])) + $sections[] = 'shaper'; + if ($hasync['synchronizetrafficshaperlimiter'] != "" and is_array($config['dnshaper'])) + $sections[] = 'dnshaper'; + if ($hasync['synchronizetrafficshaperlayer7'] != "" and is_array($config['l7shaper'])) + $sections[] = 'l7shaper'; + if ($hasync['synchronizestaticroutes'] != "") { + if (!is_array($config['staticroutes'])) + $config['staticroutes'] = array(); + if (!is_array($config['staticroutes']['route'])) + $config['staticroutes']['route'] = array(); + $sections[] = 'staticroutes'; + if (!is_array($config['gateways'])) + $config['gateways'] = array(); + $sections[] = 'gateways'; + } + if ($hasync['synchronizevirtualip'] != "") { + if (!is_array($config['virtualip'])) + $config['virtualip'] = array(); + $sections[] = 'virtualip'; + } + if ($hasync['synchronizelb'] != "") { + if (!is_array($config['load_balancer'])) + $config['load_balancer'] = array(); + $sections[] = 'load_balancer'; + } + if ($hasync['synchronizeipsec'] != "") { + if (!is_array($config['ipsec'])) + $config['ipsec'] = array(); + $sections[] = 'ipsec'; + } + if ($hasync['synchronizeopenvpn'] != "") { + if (!is_array($config['openvpn'])) + $config['openvpn'] = array(); + $sections[] = 'openvpn'; + } + if ($hasync['synchronizecerts'] != "" || $hasync['synchronizeopenvpn'] != "") { + if (!is_array($config['cert'])) + $config['cert'] = array(); + $sections[] = 'cert'; + + if (!is_array($config['ca'])) + $config['ca'] = array(); + $sections[] = 'ca'; + + if (!is_array($config['crl'])) + $config['crl'] = array(); + $sections[] = 'crl'; + } + if ($hasync['synchronizeusers'] != "") { + $sections[] = 'user'; + $sections[] = 'group'; + } + if ($hasync['synchronizeauthservers'] != "") { + $sections[] = 'authserver'; + } + if ($hasync['synchronizednsforwarder'] != "" and is_array($config['dnsmasq'])) + $sections[] = 'dnsmasq'; + if ($hasync['synchronizeschedules'] != "" || $hasync['synchronizerules'] != "") { + if (!is_array($config['schedules'])) + $config['schedules'] = array(); + $sections[] = 'schedules'; + } + if ($hasync['synchronizecaptiveportal'] != "" and is_array($config['captiveportal'])) + $sections[] = 'captiveportal'; + if ($hasync['synchronizecaptiveportal'] != "" and is_array($config['vouchers'])) + $sections[] = 'vouchers'; + + if (count($sections) <= 0) { + log_error("Nothing has been configured to be synched. Skipping...."); + exit; + } + + if (empty($hasync['username'])) + $username = "admin"; + else + $username = $hasync['username']; + + if (!carp_check_version($synchronizetoip, $username, $hasync['password'], $port)) + exit; + + update_filter_reload_status("Signaling CARP reload signal..."); + carp_sync_xml($synchronizetoip, $username, $hasync['password'], $sections, $port); + $cli = new XML_RPC_Client('/xmlrpc.php', $synchronizetoip, $port); + $params = array( + XML_RPC_encode($hasync['password']) + ); + + $msg = new XML_RPC_Message('pfsense.filter_configure', $params); + $cli->setCredentials($username, $hasync['password']); + $resp = $cli->send($msg, "900"); + + if (!is_object($resp)) { + $error = "A communications error occurred while attempting Filter sync with username {$username} {$synchronizetoip}:{$port}."; + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + } elseif($resp->faultCode()) { + $error = "An error code was received while attempting Filter sync with username {$username} {$synchronizetoip}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("sync_settings", $error, "Settings Sync", ""); + } else { + log_error("Filter sync successfully completed with {$synchronizetoip}:{$port}."); + $numberofruns = 3; + } +} + +?> diff --git a/usr/etc/rc.firmware b/usr/etc/rc.firmware new file mode 100755 index 000000000..32ee44be9 --- /dev/null +++ b/usr/etc/rc.firmware @@ -0,0 +1,542 @@ +#!/bin/sh + +# /etc/rc.firmware +# originally part of m0n0wall (http://neon1.net/m0n0wall) +# Copyright (C) 2005-2009 Scott Ullrich . +# Copyright (C) 2003 Manuel Kasper . +# All rights reserved. + +# mount /cf +/etc/rc.conf_mount_rw + +# Reset file(s) +echo "" >/conf/upgrade_log.txt +echo "" >/conf/firmware_update_misc_log.txt +echo "" >/conf/fdisk_upgrade_log.txt + +exec 3>&2 2>>/conf/firmware_update_misc_log.txt + +export ACTION=$1 +export IMG=$2 +if [ $# -eq 3 ]; then + export CUSTOMIMG=$3 +fi + +if [ $ACTION != "upgrade" ]; then + /sbin/umount -f /ftmp > /dev/null 2>&1 +fi + +file_notice() { + /usr/local/bin/php -q -d auto_prepend_file=config.inc < +ENDOFF +} + +output_env_to_log() { + date >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + ls -lah /dev/ >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + ls -lah $IMG >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + md5 $IMG >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + mount >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + top >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt +} + +backup_chflags() { + TOPROCESS="bin lib libexec sbin usr" + for files in $TOPROCESS; do + /usr/sbin/mtree -Pcp /${files} | bzip2 -9 > /tmp/chflags.dist.${files}.bz2 2>> /conf/upgrade_log.txt + done +} + +restore_chflags() { + TOPROCESS="bin lib libexec sbin usr" + for files in $TOPROCESS; do + cd / && /usr/bin/bzcat /tmp/chflags.dist.${files}.bz2 | /usr/sbin/mtree -PU -p /${files} >> /conf/upgrade_log.txt 2>&1 + done +} + +remove_chflags() { + TOPROCESS="bin lib libexec sbin usr" + for files in $TOPROCESS; do + /bin/chflags -R noschg /${files} + /bin/chmod -R u+rw /${files} + done +} + +binary_update() { + TGZ=$1 + ERR_F="/tmp/bdiff.log" + rm ${ERR_F} 2>/dev/null + /bin/mkdir /tmp/patched /tmp/patches 2>>${ERR_F} + # Save the old shutdown binary. If we switch from i386 to amd64 (or back) the reboot binary won't run at the end since it doesn't match up. + /bin/cp -p /sbin/shutdown /sbin/shutdown.old + backup_chflags + remove_chflags + cd /tmp/patches + for i in `/usr/bin/tar tvzf $TGZ | egrep -v "(^d|_md5)" | nawk '{print $9;}'`; + do + FILE=`basename ${i}` + echo "Working on ${i}" + # Untar patch file and md5 files + /usr/bin/tar xzf ${TGZ} ${i} ${i}.old_file_md5 ${i}.new_patch_md5 ${i}.new_file_md5 2>>${ERR_F} + + # Apply patch - oldfile newfile patchfile + /usr/local/bin/bspatch /${i} /tmp/patched/${FILE} /tmp/patches/${i} 2>>${ERR_F} + + OLD_FILE_MD5=`cat /tmp/patches/${i}.old_file_md5 2>/dev/null` + NEW_PATCH_MD5=`cat /tmp/patches/${i}.new_patch_md5 2>/dev/null` + NEW_FILE_MD5=`cat /tmp/patches/${i}.new_file_md5 2>/dev/null` + PATCHED_MD5=`/sbin/md5 -q /tmp/patched/${FILE} 2>/dev/null` + + if [ "$PATCHED_MD5" = "$NEW_PATCH_MD5" ]; then + /usr/bin/install -S /tmp/patched/${FILE} /${i} + else + #echo "${i} file does not match intended final md5." + echo "${i} file does not match intended final md5." >> ${ERR_F} + fi + + /bin/rm /tmp/patched/${FILE} >> ${ERR_F} + /bin/rm /tmp/patches/${i} >> ${ERR_F} + /bin/rm /tmp/patches/${i}.* >> ${ERR_F} + done + /bin/rm -rf /tmp/patched /tmp/patches >> ${ERR_F} + restore_chflags +} + +case $ACTION in +enable) + touch /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + echo "Enable" >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + /etc/rc.conf_mount_ro + ;; +auto) + touch /var/run/firmwarelock.dirty + backup_chflags + remove_chflags + /etc/rc.firmware_auto + restore_chflags + /etc/rc.conf_mount_ro + ;; +pfSenseNanoBSDupgrade) + + # Sanity check - bail early if there's no firmware file! + if [ ! -r $IMG ]; then + echo "2nd parameter has not been passed or file does not exist. Exiting." >> /conf/upgrade_log.txt 2>&1 + /etc/rc.conf_mount_ro + exit 1 + fi + + # Prevent full upgrade file from being used to upgrade + if [ `echo $IMG | grep "full"` ]; then + echo "You cannot use a full file for upgrade. Please use a file labeled nanobsd upgrade." + file_notice "NanoBSDUpgradeFailure" "You have attemped to use a full NanoBSD installation file as an upgrade. Please use a NanoBSD file labeled 'upgrade' instead." + rm -f $IMG + /etc/rc.conf_mount_ro + exit 1 + fi + + touch /var/run/firmwarelock.dirty + + echo "NanoBSD Firmware upgrade in progress..." >> /conf/upgrade_log.txt 2>&1 + echo "NanoBSD Firmware upgrade in progress..." | wall + /etc/rc.notify_message -e -g -m "NanoBSD Firmware upgrade in progress..." + + # backup config + /bin/mkdir -p /tmp/configbak + cp -Rp /conf/* /tmp/configbak 2>/dev/null + + # Remove logs from backup dir to avoid clobbering upon restore. + rm /tmp/configbak/*_log.txt 2>/dev/null + + echo "" >> /conf/upgrade_log.txt + + echo "Installing ${IMG}." >> /conf/upgrade_log.txt 2>&1 + echo "Installing ${IMG}." | wall + + # resolve glabel label that we booted from + BOOT_DEVICE=`/sbin/mount | /usr/bin/grep pfsense | /usr/bin/cut -d'/' -f4 | /usr/bin/cut -d' ' -f1` + # resolve glabel to the real boot dev entry + REAL_BOOT_DEVICE=`/sbin/glabel list | /usr/bin/grep -B2 ufs/${BOOT_DEVICE} | /usr/bin/head -n 1 | /usr/bin/cut -f3 -d' '` + # grab the boot device, example ad1, ad0 + BOOT_DRIVE=`/sbin/glabel list | /usr/bin/grep -B2 ufs/pfsense | /usr/bin/head -n 1 | /usr/bin/cut -f3 -d' ' | /usr/bin/cut -d's' -f1` + # test the slice. if we are on slice 1 we need to flash 2 and vica versa + if [ `echo $REAL_BOOT_DEVICE | /usr/bin/grep "s1"` ]; then + SLICE="2" + OLDSLICE="1" + TOFLASH="${BOOT_DRIVE}s${SLICE}" + COMPLETE_PATH="${BOOT_DRIVE}s${SLICE}a" + GLABEL_SLICE="pfsense1" + UFS_ID="1" + OLD_UFS_ID="0" + else + SLICE="1" + OLDSLICE="2" + TOFLASH="${BOOT_DRIVE}s${SLICE}" + COMPLETE_PATH="${BOOT_DRIVE}s${SLICE}a" + GLABEL_SLICE="pfsense0" + UFS_ID="0" + OLD_UFS_ID="1" + fi + + # Output specifc information that this script is using + echo "SLICE ${SLICE}" >> /conf/upgrade_log.txt + echo "OLDSLICE ${OLDSLICE}" >> /conf/upgrade_log.txt + echo "TOFLASH ${TOFLASH}" >> /conf/upgrade_log.txt + echo "COMPLETE_PATH ${COMPLETE_PATH}" >> /conf/upgrade_log.txt + echo "GLABEL_SLICE ${GLABEL_SLICE}" >> /conf/upgrade_log.txt + + # First ensure the new file can fit inside the + # slice that we are going to be operating on. + NEW_IMG_SIZE=`echo $((\`gzip -l ${IMG} | grep -v compressed | awk '{ print $2}'\` / 1024 / 1024))` + SIZE=`/sbin/fdisk ${COMPLETE_PATH} | /usr/bin/grep Meg | /usr/bin/awk '{ print $5 }' | /usr/bin/cut -d"(" -f2` + # USB slices are under-reported even more than CF slices when viewed + # directly, instead of when looking at the entire disk. Compensate + # by adding exactly 6MB. 4MB was consistently 2MB too few, and + # was resulting in failing upgrades on USB Flash based installs. + SIZE=`expr $SIZE + 6` + if [ "$SIZE" -lt "$NEW_IMG_SIZE" ]; then + file_notice "UpgradeFailure" "Upgrade failed due to the upgrade image being larger than the partition that is configured on disk. Halting. Size on disk: $SIZE < Size of new image: $NEW_IMG_SIZE" + echo "Upgrade failed. Please check the system log file for more information" | wall + rm -f $IMG + rm -f /var/run/firmwarelock.dirty + rm -f /var/run/firmware.lock + rm -f ${IMG} + /etc/rc.conf_mount_ro + exit 1 + fi + + # Output environment information to log file + output_env_to_log + + # Grab a before upgrade look at fdisk + echo "" >> /conf/fdisk_upgrade_log.txt + echo "Before upgrade fdisk/bsdlabel" >> /conf/fdisk_upgrade_log.txt + fdisk $BOOT_DRIVE >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s1 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s2 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s3 >> /conf/fdisk_upgrade_log.txt + echo "---------------------------------------------------------------" >> /conf/fdisk_upgrade_log.txt + echo "" >> /conf/fdisk_upgrade_log.txt + + # Log that we are really doing a NanoBSD upgrade + echo "" >> /conf/upgrade_log.txt + echo "NanoBSD upgrade starting" >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + # Remove TOFLASH and get ready for new flash image + echo "" >> /conf/upgrade_log.txt + echo "dd if=/dev/zero of=/dev/${TOFLASH} bs=1m count=1" >> /conf/upgrade_log.txt + dd if=/dev/zero of=/dev/${TOFLASH} bs=1m count=1 >> /conf/upgrade_log.txt 2>&1 + + # Stream gzipped image to dd and explode image to new area + echo "" >> /conf/upgrade_log.txt + echo "/usr/bin/gzip -dc $IMG | /bin/dd of=/dev/${TOFLASH} obs=64k" >> /conf/upgrade_log.txt + /usr/bin/gzip -dc $IMG | /bin/dd of=/dev/${TOFLASH} obs=64k >> /conf/upgrade_log.txt 2>&1 + + # Grab a after upgrade look at fdisk + echo "" >> /conf/fdisk_upgrade_log.txt + echo "After upgrade fdisk/bsdlabel" >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVE >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s1 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s2 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s3 >> /conf/fdisk_upgrade_log.txt + echo "---------------------------------------------------------------" >> /conf/fdisk_upgrade_log.txt + echo "" >> /conf/fdisk_upgrade_log.txt + + # Ensure that our new system is sound and bail if it is not and file a notice + echo "" >> /conf/upgrade_log.txt + echo "/sbin/fsck_ufs -y /dev/${COMPLETE_PATH}" >> /conf/upgrade_log.txt + /sbin/fsck_ufs -y /dev/${COMPLETE_PATH} >> /conf/upgrade_log.txt 2>&1 + if [ $? != 0 ]; then + file_notice "UpgradeFailure" "{\$g['product_name']} upgrade has failed. Your system has been left in a usable state." + rm -f $IMG + rm -f /var/run/firmwarelock.dirty + rm -f /var/run/firmware.lock + /etc/rc.conf_mount_ro + exit 1 + fi + + # Enable foot shooting + sysctl kern.geom.debugflags=16 + + # Add back the corresponding glabel + echo "" >> /conf/upgrade_log.txt + echo "/sbin/tunefs -L ${GLABEL_SLICE} /dev/${COMPLETE_PATH}" >> /conf/upgrade_log.txt + /sbin/tunefs -L ${GLABEL_SLICE} /dev/${COMPLETE_PATH} >> /conf/upgrade_log.txt 2>&1 + + # restore config + cp -Rp /tmp/configbak/* /conf 2>/dev/null + + # Remove upgrade file + rm -f $IMG + + # Mount newly prepared slice + mkdir /tmp/$GLABEL_SLICE + mount /dev/ufs/$GLABEL_SLICE /tmp/$GLABEL_SLICE + + # If /boot/loader.conf.local exists + # copy to the other slice. + if [ -f /boot/loader.conf.local ]; then + cp /boot/loader.conf.local /tmp/$GLABEL_SLICE/boot/loader.conf.local + fi + + # If /tmp/$GLABEL_SLICE/tmp/post_upgrade_command exists + # after update then execute the command. + echo "Checking for post_upgrade_command..." >> /conf/upgrade_log.txt + if [ -f /tmp/$GLABEL_SLICE/tmp/post_upgrade_command ]; then + echo "Found post_upgrade_command, executing ($GLABEL_SLICE)..." >> /conf/upgrade_log.txt + sh /tmp/$GLABEL_SLICE/tmp/post_upgrade_command $GLABEL_SLICE >> /conf/upgrade_log.txt 2>&1 + fi + + # Update fstab + cp /etc/fstab /tmp/$GLABEL_SLICE/etc/fstab + sed -i "" "s/pfsense${OLD_UFS_ID}/pfsense${UFS_ID}/g" /tmp/$GLABEL_SLICE/etc/fstab + if [ $? != 0 ]; then + echo "Something went wrong when trying to update the fstab entry. Aborting upgrade." + file_notice "UpgradeFailure" "Something went wrong when trying to update the fstab entry. Aborting upgrade." + rm -f $IMG + rm -f /var/run/firmwarelock.dirty + rm -f /var/run/firmware.lock + umount /tmp/$GLABEL_SLICE + /etc/rc.conf_mount_ro + exit 1 + fi + echo "" >> /conf/upgrade_log.txt + cat /tmp/$GLABEL_SLICE/etc/fstab >> /conf/upgrade_log.txt + + echo "" >> /conf/upgrade_log.txt + find /tmp/$GLABEL_SLICE >/conf/file_upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + # Unmount newly prepared slice + umount /tmp/$GLABEL_SLICE + + sync + + # Set active mount slice in fdisk + echo "" >> /conf/upgrade_log.txt + echo "gpart set -a active -i ${SLICE} ${BOOT_DRIVE}" >> /conf/upgrade_log.txt + gpart set -a active -i ${SLICE} ${BOOT_DRIVE} >> /conf/upgrade_log.txt 2>&1 + + sync + + # Set active boot source - NanoBSD does not do this but otherwise we + # end up with the wrong partition being active. + echo "" >> /conf/upgrade_log.txt + echo "/usr/sbin/boot0cfg -s ${SLICE} -v /dev/${BOOT_DRIVE}" >> /conf/upgrade_log.txt + /usr/sbin/boot0cfg -s ${SLICE} -v /dev/${BOOT_DRIVE} >> /conf/upgrade_log.txt 2>&1 + + # Disable foot shooting + sysctl kern.geom.debugflags=0 + + # Grab a final look at fdisk + echo "" >> /conf/fdisk_upgrade_log.txt + echo "Final upgrade fdisk/bsdlabel" >> /conf/fdisk_upgrade_log.txt + fdisk $BOOT_DRIVE >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s1 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s2 >> /conf/fdisk_upgrade_log.txt + bsdlabel -A ${BOOT_DRIVE}s3 >> /conf/fdisk_upgrade_log.txt + echo "---------------------------------------------------------------" >> /conf/fdisk_upgrade_log.txt + echo "" >> /conf/fdisk_upgrade_log.txt + + # Remove extra stuff + rm -rf /etc/rc.conf + rm -rf /etc/motd + rm -rf /usr/savecore/* + + date >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + # Trigger a package reinstallation on reobot + touch /conf/needs_package_sync + + # remount /cf ro + /etc/rc.conf_mount_ro + /bin/sync + + echo "NanoBSD Firmware upgrade is complete. Rebooting in 10 seconds." >> /conf/upgrade_log.txt 2>&1 + echo "NanoBSD Firmware upgrade is complete. Rebooting in 10 seconds." | wall + /etc/rc.notify_message -e -g -m "NanoBSD Firmware upgrade is complete. Rebooting in 10 seconds." + + sleep 10 + + rm -f /var/run/firmwarelock.dirty + rm -f /var/run/firmware.lock + . /etc/rc.reboot + + ;; +pfSenseupgrade) + + # Sanity check - bail early if there's no firmware file! + if [ ! -r $IMG ]; then + echo "2nd parameter has not been passed or file does not exist. Exiting." >> /conf/upgrade_log.txt 2>&1 + /etc/rc.conf_mount_ro + exit + fi + + # wait 1 seconds before beginning + sleep 1 + + # Log that we are really doing a pfSense upgrade + echo "" >> /conf/upgrade_log.txt + echo "pfSenseupgrade upgrade starting" >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + touch /var/run/firmwarelock.dirty + + if [ -f /tmp/perform_full_backup.txt ]; then + echo "Performing full backup" >> /conf/upgrade_log.txt + /etc/rc.create_full_backup + rm /tmp/perform_full_backup.txt + fi + + touch /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + # Output environment information to log file + output_env_to_log + + backup_chflags + remove_chflags + + # Do we have a pre-upgrade hook in the update file? + if [ `tar tvzf $IMG | grep /tmp/pre_upgrade_command | wc -l` -gt 0 ]; then + tar xzvf $IMG -C / ./tmp/pre_upgrade_command >> /conf/upgrade_log.txt 2>&1 + chmod a+rx /tmp/pre_upgrade_command >> /conf/upgrade_log.txt 2>&1 + sh /tmp/pre_upgrade_command >> /conf/upgrade_log.txt 2>&1 + fi + + echo "Firmware upgrade in progress..." >> /conf/upgrade_log.txt 2>&1 + echo "Firmware upgrade in progress..." | wall + /etc/rc.notify_message -e -g -m "Firmware upgrade in progress..." + + # backup config + [ -d /tmp/configbak ] && rm -rf /tmp/configbak + /bin/mkdir -p /tmp/configbak + cp -Rp /conf/* /tmp/configbak 2>/dev/null + + # Remove logs from backup dir to avoid clobbering upon restore. + rm /tmp/configbak/*_log.txt 2>/dev/null + + # tar explode image onto hd + ps -a | grep "check_reload_status" | awk '{print $1;}' | kill -9 + echo "Installing $IMG." >> /conf/upgrade_log.txt 2>&1 + cd / && /usr/bin/tar --exclude=./dev -xzUPf $IMG >> /conf/upgrade_log.txt 2>&1 + /usr/bin/nice -n20 /usr/local/opnsense/check_reload_status.py + echo "Image installed $IMG." >> /conf/upgrade_log.txt 2>&1 + + # process custom image if its passed + if [ $# -eq 3 ]; then + if [ -f $CUSTOMIMG ]; then + echo "Custom image $CUSTOMIMG found." >> /conf/upgrade_log.txt 2>&1 + echo "Custom image ($CUSTOMIMG) found." >> /conf/upgrade_log.txt 2>&1 + PWD_DIR=`pwd` + cd / && /usr/bin/tar xzPUf $CUSTOMIMG >> /conf/upgrade_log.txt 2>&1 + cd $PWD_DIR + echo "Custom image $CUSTOMIMG installed." >> /conf/upgrade_log.txt 2>&1 + fi + fi + + # restore config + cp -Rp /tmp/configbak/* /conf 2>/dev/null + + # restore /etc symlinks + rm /etc/hosts + ln -s /var/etc/hosts /etc/hosts + + restore_chflags + + # Remove upgrade file + rm -f $IMG + + if [ -e /etc/init_bootloader.sh ]; then + if [ ! -x /etc/init_bootloader.sh ]; then + chmod ug+x /etc/init_bootloader.sh + fi + /etc/init_bootloader.sh >> /conf/upgrade_log.txt 2>&1 + fi + + # Remove saved commit ID for gitsync + rm -f /etc/version.gitsync + + # If /tmp/post_upgrade_command exists after update + # then execute the command. + if [ -f /tmp/post_upgrade_command ]; then + if [ ! -x /tmp/post_upgrade_command ]; then + chmod ug+x /tmp/post_upgrade_command + fi + /tmp/post_upgrade_command >> /conf/upgrade_log.txt 2>&1 + fi + + # remove unused files + rm -rf /etc/rc.conf + rm -rf /etc/motd + rm -rf /usr/savecore/* + + date >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + + # remount /cf ro + /etc/rc.conf_mount_ro + + # release the firmware lock + rm -f /var/run/firmwarelock.dirty + rm -f /var/run/firmware.lock + /bin/sync + + echo "Firmware upgrade is complete. Rebooting in 10 seconds." >> /conf/upgrade_log.txt 2>&1 + echo "Firmware upgrade is complete. Rebooting in 10 seconds." | wall + /etc/rc.notify_message -e -g -m "Firmware upgrade is complete. Rebooting in 10 seconds." + + # Sleep and allow disks to catch up + sleep 10 + + # If the archive has unpacked a file called + # /tmp/no_upgrade_reboot_required then do + # not reboot after upgrade. + if [ -f /tmp/no_upgrade_reboot_required ]; then + rm /tmp/no_upgrade_reboot_required + else + . /etc/rc.reboot + fi + + ;; +delta_update) + touch /var/run/firmwarelock.dirty + backup_chflags + remove_chflags + binary_update $IMG + restore_chflags + rm -rf /etc/rc.conf + rm -rf /etc/motd + find / -name CVS -type d -exec rm {} \; + rm -rf /usr/savecore/* + /etc/rc.conf_mount_ro + /sbin/umount -f /cf 2>/dev/null + /sbin/mount -r /cf 2>/dev/null + /sbin/umount -f / 2>/dev/null + /sbin/mount -r / 2>/dev/null + if [ -e /etc/init_bootloader.sh ]; then + sh /etc/init_bootloader.sh + fi + + ;; +esac + diff --git a/usr/etc/rc.firmware_auto b/usr/etc/rc.firmware_auto new file mode 100755 index 000000000..be5da9196 --- /dev/null +++ b/usr/etc/rc.firmware_auto @@ -0,0 +1,88 @@ +#!/bin/sh + +# $Id$ + +FMBASEURL=$1 +FMFILENAME=$2 +FETCHFILENAME=$1/$2 + +product=`cat /etc/inc/globals.inc | grep product_name | cut -d'"' -f4` + +# wait 5 seconds before beginning +sleep 5 + +logger -p daemon.info -i -t AutoUpgrade "Auto Upgrade started" + +HTTP_AUTH="" + +# if username and password is passed, let fetch utilize. +if [ $# -gt 3 ]; then +HTTP_AUTH="basic:*:$3:$4" +fi + +#echo "Downloading $FMFILENAME from $FMBASEURL ..." | logger -p daemon.info -i -t AutoUpgrade +#/usr/bin/fetch -o /tmp/latest.tgz $FETCHFILENAME | logger -p daemon.info -i -t AutoUpgrade +#echo "Downloading $FMFILENAME.md5 from $FMBASEURL ..." | logger -p daemon.info -i -t AutoUpgrade +#/usr/bin/fetch -o /tmp/latest.tgz.md5 $FETCHFILENAME.md5 | logger -p daemon.info -i -t AutoUpgrade + +PMD=`/bin/cat /tmp/latest.tgz.md5 | cut -d" " -f4 ` +MD=`/sbin/md5 /tmp/latest.tgz | cut -d" " -f4` + +PLATFORM=`cat /etc/platform` + +echo " Package MD5: ${PMD}" | logger -p daemon.info -i -t AutoUpgrade +echo "Downloaded MD5: ${MD}" | logger -p daemon.info -i -t AutoUpgrade + +if [ "$PMD" = "" ]; then + echo "Package MD5 is null md5. Require proxy auth?" | logger -p daemon.info -i -t AutoUpgrade + exit 1 +fi + +if [ "$MD" = "" ]; then + echo "Downloaded MD5 is null md5. Require proxy auth?" | logger -p daemon.info -i -t AutoUpgrade + exit 1 +fi + +if [ "$PMD" = "$MD" ]; then + echo "MD5's match." | logger -p daemon.info -i -t AutoUpgrade + echo "Beginning ${product} upgrade." | wall + if [ "$PLATFORM" = "net45xx" ]; then + /usr/local/bin/php /etc/rc.conf_mount_rw + fi + if [ "$PLATFORM" = "wrap" ]; then + /usr/local/bin/php /etc/rc.conf_mount_rw + fi + if [ "$PLATFORM" = "nanobsd" ]; then + /usr/local/bin/php /etc/rc.conf_mount_rw + fi + if [ -r "/tmp/custom.tgz" ]; then + sh /etc/rc.firmware pfSenseupgrade /tmp/latest.tgz /tmp/custom.tgz + else + if [ "$PLATFORM" = "nanobsd" ]; then + sh /etc/rc.firmware pfSenseNanoBSDupgrade /tmp/latest.tgz + else + sh /etc/rc.firmware pfSenseupgrade /tmp/latest.tgz + fi + fi + if [ "$PLATFORM" = "wrap" ]; then + /bin/sync + sleep 5 + /usr/local/bin/php /etc/rc.conf_mount_ro + if [ -e /etc/init_bootloader.sh ]; then + sh /etc/init_bootloader.sh + fi + fi + if [ "$PLATFORM" = "net45xx" ]; then + /bin/sync + sleep 5 + /usr/local/bin/php /etc/rc.conf_mount_ro + if [ -e /etc/init_bootloader.sh ]; then + sh /etc/init_bootloader.sh + fi + fi + exit 0 +fi + +echo "MD5's do not match. Upgrade aborted." | logger -p daemon.info -i -t AutoUpgrade +rm /tmp/latest* +exit 1 diff --git a/usr/etc/rc.halt b/usr/etc/rc.halt new file mode 100755 index 000000000..fd6318ba6 --- /dev/null +++ b/usr/etc/rc.halt @@ -0,0 +1,13 @@ +#!/bin/sh + +# $Id$ + +if ! /usr/bin/lockf -s -t 30 /tmp/config.lock /usr/bin/true; then + echo "Cannot halt at this moment, a config write operation is in progress and 30 seconds have passed." + exit -1 +fi + +sleep 1 + +/sbin/shutdown -p now + diff --git a/usr/etc/rc.initial b/usr/etc/rc.initial new file mode 100755 index 000000000..deb4d193f --- /dev/null +++ b/usr/etc/rc.initial @@ -0,0 +1,184 @@ +#!/bin/sh + +# /etc/rc.initial +# part of pfSense by Scott Ullrich +# Copyright (C) 2004-2011 Scott Ullrich, All rights reserved. +# originally based on m0n0wall (http://neon1.net/m0n0wall) +# Copyright (C) 2003-2004 Manuel Kasper . +# All rights reserved. + +# make sure the user can't kill us by pressing Ctrl-C, +# ctrl-z, etc. +#trap : 2 +#trap : 3 +#trap : 4 + +# If recovery console shell option has been specified +if [ -f "/tmp/donotbootup" ]; then + /usr/bin/env prompt="%B[%n@%m]%b%/(%h)||RecoveryConsoleShell: " /bin/tcsh + rm "/tmp/donotbootup" + echo "Rebooting in 5 seconds... CTRL-C to abort..." + sleep 5 + /etc/rc.reboot + exit +fi + +if [ -f /etc/rc.local ]; then + RCLOCALPWD=`ps awux | grep rc.local | grep -v grep | awk '{ print $2 }'` + if [ "$RCLOCALPWD" = "" ]; then + echo ">>> Launching rc.local in background..." + sh /etc/rc.local & + sleep 1 + sh /etc/rc.local.running & + else + if [ -f /etc/rc.local.running ]; then + echo ">>> Launching rc.local.running in background..." + sh /etc/rc.local.running & + fi + fi +fi + +CONFIG="/cf/conf/config.xml" +WORD="https" + +# Set our operating platform +PLATFORM=`cat /etc/platform` + +if [ "$PLATFORM" = "jail" ]; then + exit +fi + +# endless loop +while : ; do + +if [ -f /tmp/ttybug ]; then + rm /tmp/ttybug + exit && exit && logout +fi + +/etc/rc.banner + +product=`grep product_name /etc/inc/globals.inc | cut -d'"' -f4` +hidebanner=`grep hidebanner /etc/inc/globals.inc | cut -d'"' -f4` + +# Check to see if SSH is running. +if pgrep -q -a -F /var/run/sshd.pid sshd >/dev/null 2>&1; then + sshd_option="14) Disable Secure Shell (sshd)"; +else + sshd_option="14) Enable Secure Shell (sshd)"; +fi + +for i in /var/db/pfi/capable_*; do + if [ -f $i -a ! -L /cf/conf ]; then + option98="98) Move configuration file to removable device" + break + fi +done + +if [ "$PLATFORM" = "cdrom" ]; then + option99="99) Install ${product} to a hard drive, etc." +fi + +# display a cheap menu +echo "" +echo " 0) Logout (SSH only) 8) Shell" +echo " 1) Assign Interfaces 9) pfTop" +echo " 2) Set interface(s) IP address 10) Filter Logs" +echo " 3) Reset webConfigurator password 11) Restart webConfigurator" +echo " 4) Reset to factory defaults 12) ${product} Developer Shell" +echo " 5) Reboot system 13) Upgrade from console" +echo " 6) Halt system ${sshd_option}" +echo " 7) Ping host 15) Restore recent configuration" +echo " 17) Restart PHP-FPM " +echo " ${option98} " + +if [ "${option99}" != "" ]; then + /bin/echo "${option99}" +fi + +echo +read -p "Enter an option: " opmode +echo + +# see what the user has chosen +case ${opmode} in +0) + exit && exit && logout + ;; +1) + /etc/rc.initial.setports + ;; +2) + /etc/rc.initial.setlanip + ;; +3) + /etc/rc.initial.password + ;; +4) + /etc/rc.initial.defaults + ;; +5) + /etc/rc.initial.reboot + ;; +6) + /etc/rc.initial.halt + ;; +7) + /etc/rc.initial.ping + ;; +8) + /bin/tcsh + ;; +9) + /usr/local/sbin/pftop + ;; +10) + /usr/sbin/tcpdump -s 256 -v -S -l -n -e -ttt -i pflog0 + ;; +11 | 111) + /etc/rc.restart_webgui + ;; +12) + /usr/local/sbin/pfSsh.php + ;; +13) + php -f /etc/rc.initial.firmware_update + ;; +14) + php -f /etc/rc.initial.toggle_sshd + ;; +15) + /etc/rc.restore_config_backup + ;; +16) + /etc/rc.banner + ;; +17) + /etc/rc.php-fpm_restart + ;; +98) + if [ ! -f /tmp/config_moved ]; then + /etc/rc.initial.store_config_to_removable_device + fi + ;; +99) + if [ -e /dev/ukbd0 ]; then + env TERM=cons25 /scripts/lua_installer + else + /scripts/lua_installer + fi + ;; +100) + if grep "$WORD" "$CONFIG"; then + links "https://localhost" + else + links "http://localhost" + fi + ;; +"") + kill $PPID ; exit + ;; +esac + +done + diff --git a/usr/etc/rc.initial.defaults b/usr/etc/rc.initial.defaults new file mode 100755 index 000000000..5e7442c1a --- /dev/null +++ b/usr/etc/rc.initial.defaults @@ -0,0 +1,62 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("util.inc"); + require_once("config.lib.inc"); + require_once("functions.inc"); + + $fp = fopen('php://stdin', 'r'); + + echo << diff --git a/usr/etc/rc.initial.firmware_update b/usr/etc/rc.initial.firmware_update new file mode 100755 index 000000000..b8c1ed64f --- /dev/null +++ b/usr/etc/rc.initial.firmware_update @@ -0,0 +1,193 @@ +#!/usr/local/bin/php -f + + "; + $url = chop(fgets($fp)); + if(!$url) { + fclose($fp); + die; + } + if($url == "auto") { + $url = $autoupdateurl; + } + $status = does_url_exist($url); + if($status) { + conf_mount_rw(); + mark_subsystem_dirty('firmware'); + unlink_if_exists("/root/firmware.tgz"); + echo "\nFetching file... "; + download_file_with_progress_bar($url, '/root/firmware.tgz'); + if(!file_exists("/root/firmware.tgz")) { + echo "Something went wrong during file transfer. Exiting.\n\n"; + fclose($fp); + clear_subsystem_dirty('firmware'); + die; + } + $status = does_url_exist("$url.sha256"); + if($status) { + echo "\nFetching sha256... "; + download_file_with_progress_bar($url . ".sha256", '/root/firmware.tgz.sha256'); + echo "\n"; + } else { + echo "\n\nWARNING.\n"; + echo "\nCould not locate a sha256 file. We cannot verify the download once completed.\n\n"; + sleep(15); + } + if(file_exists("/root/firmware.tgz.sha256")) { + $source_sha256 = trim(`cat /root/firmware.tgz.sha256 | awk '{ print \$4 }'`,"\r"); + $file_sha256 = trim(`sha256 /root/firmware.tgz | awk '{ print \$4 }'`,"\r"); + echo "URL sha256: $source_sha256\n"; + echo "Downloaded file sha256: $file_sha256\n"; + if($source_sha256 <> $file_sha256) { + echo "\n\nsha256 checksum does not match. Cancelling upgrade.\n\n"; + unlink_if_exists("/root/firmware.tgz.sha256"); + fclose($fp); + clear_subsystem_dirty('firmware'); + die -1; + } + echo "\nsha256 checksum matches.\n"; + unlink_if_exists("/root/firmware.tgz.sha256"); + } + if(strstr($url,"bdiff")) { + echo "Binary DIFF upgrade file detected...\n"; + $type = "bdiff"; + } elseif(strstr($url,"nanobsd")) { + echo "NanoBSD upgrade file detected...\n"; + $type = "nanobsd"; + } else { + $type = "normal"; + } + do_upgrade("/root/firmware.tgz", $type); + clear_subsystem_dirty('firmware'); + exit; + } + case "2": + echo "\nEnter the complete path to the .tgz or .img.gz update file: "; + $path = chop(fgets($fp)); + if(!$path) { + fclose($fp); + die; + } + if(stristr($path,"bdiff")) + $type = "bdiff"; + if(stristr($path,"nanobsd")) + $type = "nanobsd"; + if(file_exists($path)) { + mark_subsystem_dirty('firmware'); + do_upgrade($path, $type); + clear_subsystem_dirty('firmware'); + } else { + echo "\nCould not find file.\n\n"; + fclose($fp); + die -1; + } +} + +function do_upgrade($path, $type) { + global $g, $fp; + + $sigchk = verify_digital_signature($path); + if ($sigchk == 1) + $sig_warning = "The digital signature on this image is invalid."; + else if ($sigchk == 2) + $sig_warning = "This image is not digitally signed."; + else if (($sigchk == 3) || ($sigchk == 4)) + $sig_warning = "There has been an error verifying the signature on this image."; + if($sig_warning) { + $sig_warning = "\nWARNING! ACHTUNG! DANGER!\n\n{$sig_warning}\n\n" . + "This means that the image you uploaded is not an official/supported image and\n" . + "may lead to unexpected behavior or security compromises.\n\n" . + "Only install images that come from sources that you trust, and make sure\n". + "that the image has not been tampered with.\n\n". + "Do you want to install this image anyway at your own risk [n]?"; + echo $sig_warning; + $command = strtoupper(chop(fgets($fp))); + if(strtoupper($command) == "Y" or strtoupper($command) == "Y" or strtoupper($command) == "YES") { + echo "\nContinuing upgrade..."; + } else { + echo "\nUpgrade cancelled.\n\n"; + die; + } + } + mark_subsystem_dirty('firmwarelock'); + echo "\nOne moment please...\nInvoking firmware upgrade..."; + if($type == "bdiff") + mwexec_bg("/etc/rc.firmware delta_update $path"); + elseif($type == "nanobsd") + mwexec_bg("/etc/rc.firmware pfSenseNanoBSDupgrade $path"); + else + mwexec_bg("/etc/rc.firmware pfSenseupgrade $path"); + sleep(10); + while(is_subsystem_dirty('firmwarelock')) { + sleep(1); + echo "."; + } + sleep(10); + echo "Done. Rebooting...\n\n"; + clear_subsystem_dirty('firmwarelock'); +} + +exec("rm -f /root/*.sha256"); +fclose($fp); + +?> diff --git a/usr/etc/rc.initial.halt b/usr/etc/rc.initial.halt new file mode 100755 index 000000000..b26a49e0f --- /dev/null +++ b/usr/etc/rc.initial.halt @@ -0,0 +1,61 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + + $fp = fopen('php://stdin', 'r'); + + echo << diff --git a/usr/etc/rc.initial.password b/usr/etc/rc.initial.password new file mode 100755 index 000000000..1de1a798b --- /dev/null +++ b/usr/etc/rc.initial.password @@ -0,0 +1,86 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + + require_once("config.inc"); + require("auth.inc"); + require_once("functions.inc"); + require_once("shaper.inc"); + + $fp = fopen('php://stdin', 'r'); + + echo "\n" . gettext(' +The webConfigurator admin password and privileges will be reset to the default (which is "' . strtolower($g['product_name']) . '").') . "\n" . + gettext('Do you want to proceed [y|n]?'); + + if (strcasecmp(chop(fgets($fp)), "y") == 0) { + if (isset($config['system']['webgui']['authmode']) && + $config['system']['webgui']['authmode'] != "Local Database") { + echo "\n" . gettext(' +The User manager authentication server is set to "' . $config['system']['webgui']['authmode'] . '".') . "\n" . + gettext('Do you want to set it back to Local Database [y|n]?'); + if (strcasecmp(chop(fgets($fp)), "y") == 0) + $config['system']['webgui']['authmode'] = "Local Database"; + } + $admin_user =& getUserEntryByUID(0); + if (!$admin_user) { + echo "Failed to locate the admin user account! Attempting to restore access.\n"; + $admin_user = array(); + $admin_user['uid'] = 0; + if (!is_array($config['system']['user'])) + $config['system']['user'] = array(); + $config['system']['user'][] = $admin_user; + } + + $admin_user['name'] = "admin"; + $admin_user['scope'] = "system"; + $admin_user['priv'] = array("user-shell-access"); + + if (isset($admin_user['disabled'])) + unset($admin_user['disabled']); + + local_user_set_password($admin_user, strtolower($g['product_name'])); + local_user_set($admin_user); + write_config(gettext("password changed from console menu")); + + echo "\n" . gettext(' +The password for the webConfigurator has been reset and +the default username has been set to "admin".') . "\n" . + gettext(' +Remember to set the password to something else than +the default as soon as you have logged into the webConfigurator.') . "\n" . + gettext("Press ENTER to continue."); + + fgets($fp); + } +?> diff --git a/usr/etc/rc.initial.ping b/usr/etc/rc.initial.ping new file mode 100755 index 000000000..ff1048774 --- /dev/null +++ b/usr/etc/rc.initial.ping @@ -0,0 +1,55 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + + $fp = fopen('php://stdin', 'r'); + + echo "\nEnter a host name or IP address: "; + + $pinghost = chop(fgets($fp)); + if (is_ipaddrv4($pinghost) || is_hostname($pinghost)) { + $command = "ping"; + } elseif (is_ipaddrv6($pinghost)) { + $command = "ping6"; + } + if ($command) { + echo "\n"; + passthru("/sbin/{$command} -c 3 -n " . escapeshellarg($pinghost)); + echo "\nPress ENTER to continue.\n"; + fgets($fp); + } + + fclose($fp); +?> diff --git a/usr/etc/rc.initial.reboot b/usr/etc/rc.initial.reboot new file mode 100755 index 000000000..f3143e0ba --- /dev/null +++ b/usr/etc/rc.initial.reboot @@ -0,0 +1,61 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + require_once("filter.inc"); + require_once("captiveportal.inc"); + + $fp = fopen('php://stdin', 'r'); + + echo << diff --git a/usr/etc/rc.initial.setlanip b/usr/etc/rc.initial.setlanip new file mode 100755 index 000000000..8b3a82014 --- /dev/null +++ b/usr/etc/rc.initial.setlanip @@ -0,0 +1,537 @@ +#!/usr/local/bin/php -q +. + 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. +*/ + + + +$options = getopt("hn", array("dry-run", "help")); + +if (isset($options["h"]) || isset($options["help"])) { + echo "usage: /etc/rc.initial.setlanip [option ...]\n"; + echo " -h, --help show this message\n"; + echo " -n, --dry-run do not make any configuration changes\n"; + exit(0); +} + +$dry_run = isset($options["n"]) || isset($options["dry-run"]); +if ($dry_run) { + echo "DRY RUN MODE IS ON\n"; +} + + + +/* parse the configuration and include all functions used below */ +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("rrd.inc"); + +function console_get_interface_from_ppp($realif) { + global $config; + + if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($config['ppps']['ppp'] as $pppid => $ppp) { + if ($realif == $ppp['if']) { + $ifaces = explode(",", $ppp['ports']); + return $ifaces[0]; + } + } + } + + return ""; +} + +function prompt_for_enable_dhcp_server($version = 4) { + global $config, $fp, $interface; + if($interface == "wan") { + if($config['interfaces']['lan']) + return "n"; + } + /* only allow DHCP server to be enabled when static IP is + configured on this interface */ + if ($version === 6) { + $is_ipaddr = is_ipaddrv6($config['interfaces'][$interface]['ipaddrv6']); + } else { + $is_ipaddr = is_ipaddrv4($config['interfaces'][$interface]['ipaddr']); + } + if ($is_ipaddr) { + $label_DHCP = ($version === 6) ? "DHCP6" : "DHCP"; + do { + $good = false; + $upperifname = strtoupper($interface); + echo "\n" . sprintf(gettext("Do you want to enable the %s server on %s? [y|n]"), + $label_DHCP, $upperifname) . " "; + $yn = strtolower(chop(fgets($fp))); + if ($yn[0] == "y" or $yn[0] == "n") + $good = true; + } while (!$good); + } + return $yn; +} + +function get_interface_config_description($iface) { + global $config; + $c = $config['interfaces'][$iface]; + if (!$c) { return null; } + $if = $c['if']; + $result = $if; + $result2 = array(); + $ipaddr = $c['ipaddr']; + $ipaddrv6 = $c['ipaddrv6']; + if (is_ipaddr($ipaddr)) { + $result2[] = "static"; + } else if ($ipaddr == "dhcp") { + $result2[] = "dhcp"; + } + if (is_ipaddr($ipaddrv6)) { + $result2[] = "staticv6"; + } else if ($ipaddrv6 == "dhcp6") { + $result2[] = "dhcp6"; + } + if (count($result2)) { + $result .= " - " . implode(", ", $result2); + } + return $result; +} + +$fp = fopen('php://stdin', 'r'); + +/* build an interface collection */ +$ifdescrs = get_configured_interface_with_descr(false, true); +$count = count($ifdescrs); + +/* grab interface that we will operate on, unless there is only one + interface */ +if ($count > 1) { + echo "Available interfaces:\n\n"; + $x=1; + foreach($ifdescrs as $iface => $ifdescr) { + $config_descr = get_interface_config_description($iface); + echo "{$x} - {$ifdescr} ({$config_descr})\n"; + $x++; + } + echo "\nEnter the number of the interface you wish to configure: "; + $intnum = chop(fgets($fp)); +} else { + $intnum = $count; +} + +if($intnum < 1) + exit; +if($intnum > $count) + exit; + +$index = 1; +foreach ($ifdescrs as $ifname => $ifdesc) { + if ($intnum == $index) { + $interface = $ifname; + break; + } else { + $index++; + } +} +if(!$interface) { + echo "Invalid interface!\n"; + exit; +} + +$ifaceassigned = ""; + +function next_unused_gateway_name($interface) { + global $g, $config; + $new_name = "GW_" . strtoupper($interface); + + if (!is_array($config['gateways']['gateway_item'])) { return $new_name; } + $count = 1; + do { + $existing = false; + foreach ($config['gateways']['gateway_item'] as $item) { + if ($item['name'] === $new_name) { + $existing = true; + break; + } + } + if ($existing) { + $count += 1; + $new_name = "GW_" . strtoupper($interface) . "_" . $count; + } + } while ($existing); + return $new_name; +} + +function add_gateway_to_config($interface, $gatewayip, $inet_type) { + global $g, $config, $dry_run; + if (!is_array($config['gateways']['gateway_item'])) { + $config['gateways']['gateway_item'] = array(); + } + $a_gateways = &$config['gateways']['gateway_item']; + if ($dry_run) { + print_r($a_gateways); + } + $new_name = ''; + $is_default = true; + foreach ($a_gateways as $item) { + if ($item['ipprotocol'] === $inet_type) { + if (isset($item['defaultgw'])) + $is_default = false; + if (($item['interface'] === $interface) && ($item['gateway'] === $gatewayip)) + $new_name = $item['name']; + } + } + if ($new_name == '') { + $new_name = next_unused_gateway_name($interface); + $item = array( + "interface" => $interface, + "gateway" => $gatewayip, + "name" => $new_name, + "weight" => 1, + "ipprotocol" => $inet_type, + "interval" => true, + "descr" => "Interface $interface Gateway", + "defaultgw" => $is_default + ); + if ($dry_run) { + print_r($item); + } + $a_gateways[] = $item; + } + + return $new_name; +} + +function console_configure_ip_address($version) { + global $g, $config, $interface, $restart_dhcpd, $ifaceassigned, $fp; + + $label_IPvX = ($version === 6) ? "IPv6" : "IPv4"; + $maxbits = ($version === 6) ? 127 : 31; + $label_DHCP = ($version === 6) ? "DHCP6" : "DHCP"; + + $upperifname = strtoupper($interface); + + if($interface == "wan") { + echo sprintf(gettext("Configure %s address %s interface via %s? [y|n]"), + $label_IPvX, $upperifname, $label_DHCP) . "\n> "; + $intdhcp = chop(fgets($fp)); + if(strtolower($intdhcp) == "y" || strtolower($intdhcp) == "yes") { + $ifppp = console_get_interface_from_ppp(get_real_interface("wan")); + if (!empty($ifppp)) + $ifaceassigned = $ifppp; + $intip = ($version === 6) ? "dhcp6" : "dhcp"; + $intbits = ""; + $isintdhcp = true; + $restart_dhcpd = true; + } + } + + if($isintdhcp == false or $interface <> "wan") { + while(true) { + do { + echo "\n" . sprintf(gettext("Enter the new %s %s address. Press for none:"), + $upperifname, $label_IPvX) . "\n> "; + $intip = chop(fgets($fp)); + $is_ipaddr = ($version === 6) ? is_ipaddrv6($intip) : is_ipaddrv4($intip); + if ($is_ipaddr && is_ipaddr_configured($intip, $interface, true)) { + $ip_conflict = true; + echo gettext("This IP address conflicts with another interface or a VIP") . "\n"; + } else + $ip_conflict = false; + } while (($ip_conflict === true) || !($is_ipaddr || $intip == '')); + if ($intip != '') { + echo "\n" . sprintf(gettext("Subnet masks are entered as bit counts (as in CIDR notation) in %s."), + $g['product_name']) . "\n"; + if ($version === 6) { + echo "e.g. ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00 = 120\n"; + echo " ffff:ffff:ffff:ffff:ffff:ffff:ffff:0 = 112\n"; + echo " ffff:ffff:ffff:ffff:ffff:ffff:0:0 = 96\n"; + echo " ffff:ffff:ffff:ffff:ffff:0:0:0 = 80\n"; + echo " ffff:ffff:ffff:ffff:0:0:0:0 = 64\n"; + } else { + echo "e.g. 255.255.255.0 = 24\n"; + echo " 255.255.0.0 = 16\n"; + echo " 255.0.0.0 = 8\n"; + } + do { + $upperifname = strtoupper($interface); + echo "\n" . sprintf(gettext("Enter the new %s %s subnet bit count:"), + $upperifname, $label_IPvX) . "\n> "; + $intbits = chop(fgets($fp)); + $intbits_ok = is_numeric($intbits) && (($intbits >= 1) || ($intbits <= $maxbits)); + $restart_dhcpd = true; + + if ($version === 4 && $intbits < $maxbits) { + if ($intip == gen_subnet($intip, $intbits)) { + echo gettext("You cannot set network address to an interface"); + continue 2; + $intbits_ok = false; + } else if ($intip == gen_subnet_max($intip, $intbits)) { + echo gettext("You cannot set broadcast address to an interface"); + continue 2; + $intbits_ok = false; + } + } + } while (!$intbits_ok); + + if ($version === 6) { + $subnet = gen_subnetv6($intip, $intbits); + } else { + $subnet = gen_subnet($intip, $intbits); + } + do { + echo "\n" . sprintf(gettext("For a WAN, enter the new %s %s upstream gateway address."), $upperifname, $label_IPvX) . "\n" . + gettext("For a LAN, press for none:") . "\n> "; + $gwip = chop(fgets($fp)); + $is_ipaddr = ($version === 6) ? is_ipaddrv6($gwip) : is_ipaddrv4($gwip); + $is_in_subnet = $is_ipaddr && ip_in_subnet($gwip, $subnet . "/" . $intbits); + if ($gwip != '') { + if (!$is_ipaddr) { + echo sprintf(gettext("not an %s IP address!"), $label_IPvX) . "\n"; + } else if (!$is_in_subnet) { + echo gettext("not in subnet!") . "\n"; + } + } + } while (!($gwip == '' || ($is_ipaddr && $is_in_subnet))); + + if ($gwip != '') { + $inet_type = ($version === 6) ? "inet6" : "inet"; + $gwname = add_gateway_to_config($interface, $gwip, $inet_type); + } + } + $ifppp = console_get_interface_from_ppp(get_real_interface($interface)); + if (!empty($ifppp)) + $ifaceassigned = $ifppp; + break; + } + } + + return array($intip, $intbits, $gwname); +} + +list($intip, $intbits, $gwname) = console_configure_ip_address(4); +list($intip6, $intbits6, $gwname6) = console_configure_ip_address(6); + +if (!empty($ifaceassigned)) + $config['interfaces'][$interface]['if'] = $ifaceassigned; +$config['interfaces'][$interface]['ipaddr'] = $intip; +$config['interfaces'][$interface]['subnet'] = $intbits; +$config['interfaces'][$interface]['gateway'] = $gwname; +$config['interfaces'][$interface]['ipaddrv6'] = $intip6; +$config['interfaces'][$interface]['subnetv6'] = $intbits6; +$config['interfaces'][$interface]['gatewayv6'] = $gwname6; +$config['interfaces'][$interface]['enable'] = true; + +function console_configure_dhcpd($version = 4) { + global $g, $config, $restart_dhcpd, $fp, $interface, $dry_run, $intip, $intbits, $intip6, $intbits6; + + $label_IPvX = ($version === 6) ? "IPv6" : "IPv4"; + $dhcpd = ($version === 6) ? "dhcpdv6" : "dhcpd"; + + if($g['services_dhcp_server_enable']) + $yn = prompt_for_enable_dhcp_server($version); + if ($yn == "y") { + $subnet_start = ($version === 6) ? gen_subnetv6($intip6, $intbits6) : gen_subnet($intip, $intbits); + $subnet_end = ($version === 6) ? gen_subnetv6_max($intip6, $intbits6) : gen_subnet_max($intip, $intbits); + do { + do { + echo sprintf(gettext("Enter the start address of the %s client address range:"), $label_IPvX) . " "; + $dhcpstartip = chop(fgets($fp)); + if ($dhcpstartip === "") { + fclose($fp); + exit(0); + } + $is_ipaddr = ($version === 6) ? is_ipaddrv6($dhcpstartip) : is_ipaddrv4($dhcpstartip); + $is_inrange = is_inrange($dhcpstartip, $subnet_start, $subnet_end); + if (!$is_inrange) + echo gettext("This IP address must be in the interface's subnet") . "\n"; + } while (!$is_ipaddr || !$is_inrange); + + do { + echo sprintf(gettext("Enter the end address of the %s client address range:"), $label_IPvX) . " "; + $dhcpendip = chop(fgets($fp)); + if ($dhcpendip === "") { + fclose($fp); + exit(0); + } + $is_ipaddr = ($version === 6) ? is_ipaddrv6($dhcpendip) : is_ipaddrv4($dhcpendip); + $is_inrange = is_inrange($dhcpendip, $subnet_start, $subnet_end); + if (!$is_inrange) + echo gettext("This IP address must be in the interface's subnet") . "\n"; + $not_inorder = ($version === 6) ? (inet_pton($dhcpendip) < inet_pton($dhcpstartip)) : ip_less_than($dhcpendip, $dhcpstartip); + if ($not_inorder) { + echo gettext("The end address of the DHCP range must be >= the start address") . "\n"; + } + } while (!$is_ipaddr || !$is_inrange); + } while ($not_inorder); + $restart_dhcpd = true; + $config[$dhcpd][$interface]['enable'] = true; + $config[$dhcpd][$interface]['range']['from'] = $dhcpstartip; + $config[$dhcpd][$interface]['range']['to'] = $dhcpendip; + } else { + /* TODO - this line is causing a "Fatal error: Cannot unset + string offsets in /etc/rc.initial.setlanip" on below line + number */ + if($config[$dhcpd][$interface]) + unset($config[$dhcpd][$interface]['enable']); + echo "Disabling DHCPD..."; + if (!$dry_run) { + services_dhcpd_configure(); + } + echo "Done!\n"; + } +} + +console_configure_dhcpd(4); +console_configure_dhcpd(6); + +//***************************************************************************** + +if ($config['system']['webgui']['protocol'] == "https") { + + do { + $good = false; + echo "\n" . gettext("Do you want to revert to HTTP as the webConfigurator protocol? (y/n)") . " "; + $yn = strtolower(chop(fgets($fp))); + if ($yn[0] == "y" or $yn[0] == "n") + $good = true; + } while (!$good); + + if ($yn == "y") { + $config['system']['webgui']['protocol'] = "http"; + $restart_webgui = true; + } +} + +if (isset($config['system']['webgui']['noantilockout'])) { + echo "\n" . sprintf(gettext("Note: the anti-lockout rule on %s has been re-enabled."), $interface) . "\n"; + unset($config['system']['webgui']['noantilockout']); +} + +if($config['interfaces']['lan']) { + if($config['dhcpd']) + if($config['dhcpd']['wan']) + unset($config['dhcpd']['wan']); + if($config['dhcpdv6']) + if($config['dhcpdv6']['wan']) + unset($config['dhcpdv6']['wan']); +} + +if(!$config['interfaces']['lan']) { + unset($config['interfaces']['lan']); + if($config['dhcpd']['lan']) + unset($config['dhcpd']['lan']); + if($config['dhcpdv6']['lan']) + unset($config['dhcpdv6']['lan']); + unset($config['shaper']); + unset($config['ezshaper']); + unset($config['nat']); + if (!$dry_run) { + system("rm /var/dhcpd/var/db/* >/dev/null 2>/dev/null"); + services_dhcpd_configure(); + } +} + +$upperifname = strtoupper($interface); +if (!$dry_run) { + echo "\nPlease wait while the changes are saved to {$upperifname}..."; + write_config(sprintf(gettext("%s IP configuration from console menu"), $interface)); + interface_reconfigure(strtolower($upperifname)); + echo " Reloading filter..."; + filter_configure_sync(); + echo "\n"; + if($restart_dhcpd) { + echo " DHCPD..."; + services_dhcpd_configure(); + } + if($restart_webgui) { + echo " restarting webConfigurator... "; + mwexec("/etc/rc.restart_webgui"); + } +} + +if ($intip != '') { + if (is_ipaddr($intip)) { + echo "\n\n" . sprintf(gettext("The IPv4 %s address has been set to %s"), + $upperifname, "{$intip}/{$intbits}") . "\n"; + } else { + echo "\n\n" . sprintf(gettext("The IPv4 %s address has been set to %s"), + $upperifname, $intip) . "\n"; + } +} +if ($intip6 != '') { + if (is_ipaddr($intip6)) { + echo "\n\n" . sprintf(gettext("The IPv6 %s address has been set to %s"), + $upperifname, "${intip6}/${intbits6}") . "\n"; + } else { + echo "\n\n" . sprintf(gettext("The IPv6 %s address has been set to %s"), + $upperifname, $intip6) . "\n"; + } +} + +if ($intip != '' || $intip6 != '') { + if (count($ifdescrs) == "1" or $interface = "lan") { + if ($debug) { + echo "ifdescrs count is " . count($ifdescrs) . "\n"; + echo "interface is {$interface} \n"; + } + echo gettext('You can now access the webConfigurator by opening the following URL in your web browser:') . "\n"; + if(!empty($config['system']['webgui']['port'])) { + $webuiport = $config['system']['webgui']['port']; + if ($intip != '') { + echo " {$config['system']['webgui']['protocol']}://{$intip}:{$webuiport}/\n"; + } + if ($intip6 != '') { + if (is_ipaddr($intip6)) { + echo " {$config['system']['webgui']['protocol']}://[{$intip6}]:{$webuiport}/\n"; + } else { + echo " {$config['system']['webgui']['protocol']}://{$intip6}:{$webuiport}/\n"; + } + } + } else { + if ($intip != '') { + echo " {$config['system']['webgui']['protocol']}://{$intip}/\n"; + } + if ($intip6 != '') { + if (is_ipaddr($intip6)) { + echo " {$config['system']['webgui']['protocol']}://[{$intip6}]/\n"; + } else { + echo " {$config['system']['webgui']['protocol']}://{$intip6}/\n"; + } + } + } + } +} + +echo "\n" . gettext('Press to continue.'); + +fgets($fp); +fclose($fp); + +?> diff --git a/usr/etc/rc.initial.setports b/usr/etc/rc.initial.setports new file mode 100755 index 000000000..aca541934 --- /dev/null +++ b/usr/etc/rc.initial.setports @@ -0,0 +1,51 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("config.console.inc"); + require_once("functions.inc"); + require_once("filter.inc"); + require_once("shaper.inc"); + require_once("ipsec.inc"); + require_once("vpn.inc"); + require_once("captiveportal.inc"); + require_once("rrd.inc"); + + set_networking_interfaces_ports(); + + reload_interfaces_sync(); + + /* reload graphing functions */ + enable_rrd_graphing(); + +?> \ No newline at end of file diff --git a/usr/etc/rc.initial.store_config_to_removable_device b/usr/etc/rc.initial.store_config_to_removable_device new file mode 100755 index 000000000..19fa70e1e --- /dev/null +++ b/usr/etc/rc.initial.store_config_to_removable_device @@ -0,0 +1,90 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + require_once("util.inc"); + + $fp = fopen('php://stdin', 'r'); + + do { + $dirs = array(); + $dirs = return_dir_as_array("/var/db/pfi/"); + if(!is_array($dirs)) { + echo "\nNo capable storage devices detected.\n"; + exit; + } + echo "\nDevices capable of config.xml storage:\n"; + foreach($dirs as $dir) { + preg_match_all("/capable\_(.*)/",$dir,$match_array); + echo $match_array[1][0] . " "; + } + echo "\n\n"; + echo "Enter the device that you wish the"; + echo "\n"; + echo "{$g['product_name']} configuration file to reside on: "; + $move_config_to_device = chop(fgets($fp)); + if ($move_config_to_device == "") { + exit(0); + } + } while (!$move_config_to_device); + + mwexec("/bin/mkdir -p /tmp/mnt/cf"); + + $status = mwexec("/sbin/mount -w -t msdosfs /dev/{$move_config_to_device} /tmp/mnt/cf"); + if(!$status) { + echo "Error while mounting {$move_config_to_device}.\n"; + exit; + } + + echo "\n\nProcessing: "; + $lockkey = lock('config'); + echo "moving..."; + mwexec("mkdir -p /tmp/mnt/cf/conf/"); + mwexec("/bin/mv /cf/conf/config.xml /tmp/mnt/cf/conf/"); + echo "removing old..."; + echo " nullfs... "; + system("/sbin/umount /cf/conf"); + system("/sbin/umount /conf"); + mwexec("/bin/rm -rf /conf/*.*"); + /* use nullfs to mount */ + system("/sbin/mount_nullfs /tmp/mnt/cf/conf /conf"); + system("/sbin/mount_nullfs /tmp/mnt/cf /cf"); + echo "linking..."; + mwexec("/bin/rm -rf /var/db/pfi"); + unlock($lockkey); + echo "done.\n"; + echo "\nYour configuration has been moved to {$move_config_to_device}\n"; + touch("/tmp/config_moved"); + fclose($fp); +?> diff --git a/usr/etc/rc.initial.toggle_sshd b/usr/etc/rc.initial.toggle_sshd new file mode 100755 index 000000000..50dd26153 --- /dev/null +++ b/usr/etc/rc.initial.toggle_sshd @@ -0,0 +1,74 @@ +#! /usr/local/bin/php -f +. + 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. +*/ + +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); + +conf_mount_rw(); + +$fp = fopen('php://stdin', 'r'); + +if (isset($config['system']['enablesshd'])) { + echo "SSHD is currently enabled. Would you like to disable? [y/n]? "; + $yn = chop(fgets($fp)); + if ($yn[0] == "y") { + unset($config['system']['enablesshd']); + echo "\nWriting configuration..."; + write_config(); + echo " done.\n"; + echo "\nDisabling SSHD..."; + send_event("service reload sshd"); + echo "\nReloading firewall rules."; + filter_configure(); + echo " done.\n"; + exec("ps awux | grep '/usr/sbin/sshd' | grep -v grep | awk '{print $2}' | xargs kill"); + } + +} else { + echo "SSHD is currently disabled. Would you like to enable? [y/n]? "; + $yn = chop(fgets($fp)); + if ($yn[0] == "y") { + $config['system']['enablesshd'] = true; + echo "\nWriting configuration..."; + write_config(); + echo " done.\n"; + echo "\nEnabling SSHD..."; + send_event("service reload sshd"); + echo "\nReloading firewall rules."; + filter_configure(); + echo " done.\n\n"; + } +} + +fclose($fp); + +conf_mount_ro(); diff --git a/usr/etc/rc.interfaces_carp_configure b/usr/etc/rc.interfaces_carp_configure new file mode 100755 index 000000000..fb1f1131a --- /dev/null +++ b/usr/etc/rc.interfaces_carp_configure @@ -0,0 +1,39 @@ +#!/usr/local/bin/php -f + \ No newline at end of file diff --git a/usr/etc/rc.interfaces_lan_configure b/usr/etc/rc.interfaces_lan_configure new file mode 100755 index 000000000..eafe74d44 --- /dev/null +++ b/usr/etc/rc.interfaces_lan_configure @@ -0,0 +1,39 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.interfaces_opt_configure b/usr/etc/rc.interfaces_opt_configure new file mode 100755 index 000000000..57da3419e --- /dev/null +++ b/usr/etc/rc.interfaces_opt_configure @@ -0,0 +1,41 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.interfaces_wan_configure b/usr/etc/rc.interfaces_wan_configure new file mode 100755 index 000000000..fbdc5e437 --- /dev/null +++ b/usr/etc/rc.interfaces_wan_configure @@ -0,0 +1,48 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.kill_states b/usr/etc/rc.kill_states new file mode 100755 index 000000000..5db889253 --- /dev/null +++ b/usr/etc/rc.kill_states @@ -0,0 +1,90 @@ +#!/usr/local/bin/php -f + +{$local_ip}:[0-9]+ +\->'"); + + $cleared_states = array(); + foreach(explode("\n", $nat_states) as $nat_state) { + if (preg_match_all('/([\d\.]+):[\d]+[\s->]+/i', $nat_state, $matches, PREG_SET_ORDER) != 3) + continue; + + $src = $matches[0][1]; + $dst = $matches[2][1]; + + if (empty($src) || empty($dst) || in_array("{$src},{$dst}", $cleared_states)) + continue; + + $cleared_states[] = "{$src},{$dst}"; + mwexec("/sbin/pfctl -k {$src} -k {$dst}", true); + } + + mwexec("/sbin/pfctl -k 0.0.0.0/0 -k {$local_ip}/{$subnet_bits}", true); + mwexec("/sbin/pfctl -k {$local_ip}/{$subnet_bits}", true); + mwexec("/sbin/pfctl -K {$local_ip}/{$subnet_bits}", true); + } + log_error("rc.kill_states: Removing states for interface {$interface}"); + mwexec("/sbin/pfctl -i {$interface} -Fs", true); +} diff --git a/usr/etc/rc.linkup b/usr/etc/rc.linkup new file mode 100755 index 000000000..6f7d1589a --- /dev/null +++ b/usr/etc/rc.linkup @@ -0,0 +1,113 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("globals.inc"); +require_once("config.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("interfaces.inc"); + +function handle_argument_group($iface, $argument2) { + global $config; + + if (!is_array($config['interfaces'][$iface])) + return; + + $ipaddr = $config['interfaces'][$iface]['ipaddr']; + $ip6addr = $config['interfaces'][$iface]['ipaddrv6']; + $staticv4 = false; + if (empty($ipaddr)) + $staticv4 = true; + else + $staticv4 = is_ipaddrv4($ipaddr); + $staticv6 = false; + if (empty($ip6addr)) + $staticv6 = true; + else + $staticv6 = is_ipaddrv6($ip6addr); + if ($staticv4 === true && $staticv6 === true) { + $friendly = convert_friendly_interface_to_friendly_descr($iface); + log_error("Hotplug event detected for {$friendly}({$iface}) but ignoring since interface is configured with static IP ({$ipaddr} {$ip6addr})"); + interfaces_staticarp_configure($iface); + $iface = get_real_interface($iface); + interfaces_bring_up($iface); + /* NOTE: Do not generate event for OpenVPN since the daemon does that for us. */ + if (($argument2 == "start" || $argument2 == "up") && substr($iface, 0, 4) != "ovpn") + send_event("interface newip {$iface}"); + } else { + switch ($argument2) { + case "stop": + case "down": + log_error("DEVD Ethernet detached event for {$iface}"); + interface_bring_down($iface); + break; + case "start": + case "up": + log_error("DEVD Ethernet attached event for {$iface}"); + log_error("HOTPLUG: Configuring interface {$iface}"); + require_once("vpn.inc"); + require_once("captiveportal.inc"); + // Do not try to readd to bridge otherwise em(4) has problems + interface_configure($iface, true, true); + break; + } + } +} + +global $g; +if (!file_exists("{$g['varrun_path']}/booting") && empty($g['booting'])) { +if (isset($_GET)) { + if (!empty($_GET['interface'])) + handle_argument_group($_GET['interface'], $_GET['action']); +} else { + if ($argc < 3) { + log_error("HOTPLUG event: The number of required parameters not passed!"); + exit; + } + $action = $argv[1]; + switch($action) { + case "start": + case "stop": + break; + default: + log_error("HOTPLUG event: The action parameter passed is wrong($action) only start/stop/up/down are allowed!"); + exit; + /* NOTREACHED */ + break; + } + $interface = convert_real_interface_to_friendly_interface_name($argv[2]); + if (!empty($interface)) + handle_argument_group($interface, $action); +} +} + +?> diff --git a/usr/etc/rc.nanobsd_switch_boot_slice b/usr/etc/rc.nanobsd_switch_boot_slice new file mode 100755 index 000000000..ccbed9ce7 --- /dev/null +++ b/usr/etc/rc.nanobsd_switch_boot_slice @@ -0,0 +1,27 @@ +#!/usr/local/bin/php -q + \ No newline at end of file diff --git a/usr/etc/rc.newipsecdns b/usr/etc/rc.newipsecdns new file mode 100755 index 000000000..854c8d702 --- /dev/null +++ b/usr/etc/rc.newipsecdns @@ -0,0 +1,61 @@ +#!/usr/local/bin/php -f +. + Copyright (C) 2009 Seth Mos . + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("util.inc"); +require_once("config.inc"); +require_once("gwlb.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); + +/* make sure to wait until the boot scripts have finished */ +if (file_exists("{$g['varrun_path']}/booting")) + return; + +if (isset($config['ipsec']['enable'])) { + sleep(15); + log_error("IPSEC: One or more IPsec tunnel endpoints has changed its IP. Refreshing."); +} else + return; + +$ipseclck = lock('ipsecdns', LOCK_EX); + +vpn_ipsec_configure(); + +if (isset($config['ipsec']['failoverforcereload'])) + vpn_ipsec_force_reload(); + +unlock($ipseclck); +?> diff --git a/usr/etc/rc.newroutedns b/usr/etc/rc.newroutedns new file mode 100755 index 000000000..9e5139eff --- /dev/null +++ b/usr/etc/rc.newroutedns @@ -0,0 +1,56 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("util.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("system.inc"); + +/* make sure to wait until the boot scripts have finished */ +if (file_exists("{$g['varrun_path']}/booting")) + return; + +$staticroutes = get_staticroutes(); + +if (count($staticroutes)) + log_error("Static Routes: One or more aliases used for routing has changed its IP. Refreshing."); +else + return; + +$routelck = lock('routedns', LOCK_EX); + +/* We will walk the list of hostnames found in static routes + * configuration. Since we are already triggered by filterdns + * that a hostname has changed we can proceed to compare the + * new IP address with the old address from the DNS cache. + */ +system_staticroutes_configure(); + +unlock($routelck); +?> diff --git a/usr/etc/rc.newwanip b/usr/etc/rc.newwanip new file mode 100755 index 000000000..46c41fe70 --- /dev/null +++ b/usr/etc/rc.newwanip @@ -0,0 +1,225 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("globals.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); +require_once("openvpn.inc"); +require_once("IPv6.inc"); +require_once("rrd.inc"); + +// Do not process while booting +if($g['booting']) + return; + +function restart_packages() { + global $oldip, $curwanip, $g; + + /* restart packages */ + system_ntp_configure(false); + mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh", true); + log_error("{$g['product_name']} package system has detected an ip change $oldip -> $curwanip ... Restarting packages."); + send_event("service reload packages"); +} + +/* Interface IP address has changed */ +if (isset($_GET['interface'])) + $argument = $_GET['interface']; +else + $argument = str_replace("\n", "", $argv[1]); + +log_error("rc.newwanip: Informational is starting {$argument}."); + +if (empty($argument)) { + $interface = "wan"; + $interface_real = get_real_interface(); +} else { + $interface = convert_real_interface_to_friendly_interface_name($argument); + $interface_real = $argument; +} + +$interface_descr = convert_friendly_interface_to_friendly_descr($interface); + +/* If the interface is configured and not enabled, bail. We do not need to change settings for disabled interfaces. #3313 */ +if (is_array($config['interfaces'][$interface]) && !isset($config['interfaces'][$interface]['enable'])) { + log_error("Interface is disabled, nothing to do."); + return; +} + +if (empty($argument)) + $curwanip = get_interface_ip(); +else { + $curwanip = find_interface_ip($interface_real, true); + if($curwanip == "") + $curwanip = get_interface_ip($interface); +} + +log_error("rc.newwanip: on (IP address: {$curwanip}) (interface: {$interface_descr}[{$interface}]) (real interface: {$interface_real})."); + +/* + * NOTE: Take care of openvpn, no-ip or similar interfaces if you generate the event to reconfigure an interface. + * i.e. OpenVPN might be in tap mode and not have an ip. + */ +if ($curwanip == "0.0.0.0" || !is_ipaddr($curwanip)) { + if (substr($interface_real, 0, 4) != "ovpn") { + if (!empty($config['interfaces'][$interface]['ipaddr'])) { + log_error("rc.newwanip: Failed to update {$interface} IP, restarting..."); + send_event("interface reconfigure {$interface}"); + return; + } + } +} + +/* XXX: This really possible? */ +if (empty($interface)) { + filter_configure(); + restart_packages(); + return; +} + +$oldip = "0.0.0.0"; +if (file_exists("{$g['vardb_path']}/{$interface}_cacheip")) + $oldip = file_get_contents("{$g['vardb_path']}/{$interface}_cacheip"); + +/* regenerate resolv.conf if DNS overrides are allowed */ +system_resolvconf_generate(true); + +/* write current WAN IP to file */ +if (is_ipaddr($curwanip)) + @file_put_contents("{$g['vardb_path']}/{$interface}_ip", $curwanip); + +link_interface_to_vips($interface, "update"); + +unset($gre); +$gre = link_interface_to_gre($interface); +if (!empty($gre)) + array_walk($gre, 'interface_gre_configure'); +unset($gif); +$gif = link_interface_to_gif($interface); +if (!empty($gif)) + array_walk($gif, 'interface_gif_configure'); + +$grouptmp = link_interface_to_group($interface); +if (!empty($grouptmp)) + array_walk($grouptmp, 'interface_group_add_member'); + +unset($bridgetmp); +$bridgetmp = link_interface_to_bridge($interface); +if (!empty($bridgetmp)) + interface_bridge_add_member($bridgetmp, $interface_real); + +/* make new hosts file */ +system_hosts_generate(); + +/* check tunneled IPv6 interface tracking */ +switch($config['interfaces'][$interface]['ipaddrv6']) { + case "6to4": + interface_6to4_configure($interface, $config['interfaces'][$interface]); + break; + case "6rd": + interface_6rd_configure($interface, $config['interfaces'][$interface]); + break; + case "dhcp6": + if (isset($config['interfaces'][$interface]['dhcp6usev4iface'])) + interface_dhcpv6_configure($interface, $config['interfaces'][$interface]); + break; +} + +/* Check Gif tunnels */ +if(is_array($config['gifs']['gif'])){ + foreach($config['gifs']['gif'] as $gif) { + if($gif['if'] == $interface) { + foreach($config['interfaces'] as $ifname => $ifparent) { + // echo "interface $ifparent, ifname $ifname, gif {$gif['gifif']}\n"; + if(($ifparent['if'] == $gif['gifif']) && (isset($ifparent['enable']))) { + // echo "Running routing configure for $ifname\n"; + $gif['gifif'] = interface_gif_configure($gif); + $confif = convert_real_interface_to_friendly_interface_name($gif['gifif']); + if ($confif <> "") + interface_configure($confif); + system_routing_configure($ifname); + } + } + } + } +} + +/* + * We need to force sync VPNs on such even when the IP is the same for dynamic interfaces. + * Even with the same IP the VPN software is unhappy with the IP disappearing, and we + * could be failing back in which case we need to switch IPs back anyhow. + */ +if (!is_ipaddr($oldip) || $curwanip != $oldip || !is_ipaddrv4($config['interfaces'][$interface]['ipaddr'])) { + /* reconfigure static routes (kernel may have deleted them) */ + system_routing_configure($interface); + + /* reconfigure our gateway monitor */ + setup_gateways_monitor(); + + if (is_ipaddr($curwanip)) + @file_put_contents("{$g['vardb_path']}/{$interface}_cacheip", $curwanip); + + /* perform RFC 2136 DNS update */ + services_dnsupdate_process($interface); + + /* signal dyndns update */ + services_dyndns_configure($interface); + + /* reconfigure IPsec tunnels */ + vpn_ipsec_force_reload($interface); + + /* start OpenVPN server & clients */ + if (substr($interface_real, 0, 4) != "ovpn") + openvpn_resync_all($interface); + + /* reload graphing functions */ + enable_rrd_graphing(); + + /* reload igmpproxy */ + services_igmpproxy_configure(); + + /* restart snmp */ + services_snmpd_configure(); + + restart_packages(); +} + +/* signal filter reload */ +filter_configure(); + +?> diff --git a/usr/etc/rc.newwanipv6 b/usr/etc/rc.newwanipv6 new file mode 100755 index 000000000..6fc1cc8ac --- /dev/null +++ b/usr/etc/rc.newwanipv6 @@ -0,0 +1,186 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("globals.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); +require_once("openvpn.inc"); +require_once("IPv6.inc"); +require_once("services.inc"); +require_once("rrd.inc"); + +function restart_packages() { + global $oldipv6, $curwanipv6, $g; + + /* restart packages */ + system_ntp_configure(false); + mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh", true); + log_error("{$g['product_name']} package system has detected an ip change $oldipv6 -> $curwanipv6 ... Restarting packages."); + send_event("service reload packages"); +} + +/* Interface IP address has changed */ +if (isset($_GET)) + $argument = $_GET['interface']; +else + $argument = trim($argv[1], " \n\t"); + +log_error("rc.newwanipv6: Informational is starting {$argument}."); + +if (empty($argument)) { + $interface = "wan"; + $interface_real = get_real_interface($interface, "inet6"); + $curwanipv6 = get_interface_ipv6($interface, true); +} else { + $interface_real = $argument; + $interface = convert_real_interface_to_friendly_interface_name($interface_real); + $curwanipv6 = get_interface_ipv6($interface, true); +} + +$interface_descr = convert_friendly_interface_to_friendly_descr($interface); + +if (empty($interface)) { + filter_configure(); + // restart_packages(); + return; +} + +//Do not process while booting +if ($g['booting'] && $config['interfaces'][$interface]['ipaddrv6'] != "dhcp6") + return; + +/* + * NOTE: Take care of openvpn and similar if you generate the event to reconfigure an interface. + * i.e. OpenVPN might be in tap mode and not have an ip. + */ +if ((empty($curwanipv6) || !is_ipaddrv6($curwanipv6)) && substr($interface_real, 0, 4) != "ovpn") { + log_error("rc.newwanipv6: Failed to update {$interface_descr}[{$interface}] IPv6, restarting..."); + // send_event("interface reconfigure {$interface}"); + return; +} + +if (isset($_GET)) + $new_domain_name_servers = $_GET['dmips']; +else + $new_domain_name_servers = getenv("new_domain_name_servers"); +if (!empty($new_domain_name_servers)) { + $name_servers = explode(" ", $new_domain_name_servers); + $valid_ns = array(); + foreach($name_servers as $ns) { + if (is_ipaddrv6(trim($ns))) + $valid_ns[] = trim($ns); + } + + if (count($valid_ns > 0)) + file_put_contents("{$g['varetc_path']}/nameserver_v6{$interface}", implode("\n", $valid_ns)); +} +if (isset($_GET)) + $new_domain_name = $_GET['dmnames']; +else + $new_domain_name = getenv("new_domain_name"); +if (!empty($new_domain_name)) + file_put_contents("{$g['varetc_path']}/searchdomain_v6{$interface}", $new_domain_name); + +/* write current WAN IPv6 to file */ +if (is_ipaddrv6($curwanipv6)) + @file_put_contents("{$g['vardb_path']}/{$interface}_ipv6", $curwanipv6); + +log_error("rc.newwanipv6: on (IP address: {$curwanipv6}) (interface: {$interface}) (real interface: {$interface_real})."); + +$oldipv6 = ""; +if (file_exists("{$g['vardb_path']}/{$interface}_cacheipv6")) + $oldipv6 = file_get_contents("{$g['vardb_path']}/{$interface}_cacheipv6"); + +$grouptmp = link_interface_to_group($interface); +if (!empty($grouptmp)) + array_walk($grouptmp, 'interface_group_add_member'); + +link_interface_to_track6($interface, "update"); + +/* regenerate resolv.conf if DNS overrides are allowed */ +system_resolvconf_generate(true); + +/* reconfigure static routes (kernel may have deleted them) */ +system_routing_configure($interface); + +/* reconfigure our gateway monitor */ +setup_gateways_monitor(); + +/* signal filter reload */ +filter_configure(); + +if (is_ipaddrv6($oldipv6)) { + if ($curwanipv6 == $oldipv6) { + // Still need to sync VPNs on PPPoE and such, as even with the same IP the VPN software is unhappy with the IP disappearing. + if (in_array($config['interfaces'][$interface]['ipaddrv6'], array('pppoe', 'pptp', 'ppp'))) { + /* reconfigure IPsec tunnels */ + vpn_ipsec_force_reload($interface); + + /* start OpenVPN server & clients */ + if (substr($interface_real, 0, 4) != "ovpn") + openvpn_resync_all($interface); + } + return; + } else if (does_interface_exist($interface_real)) + mwexec("/sbin/ifconfig {$interface_real} inet6 {$oldipv6} delete"); + + file_put_contents("{$g['vardb_path']}/{$interface}_cacheipv6", $curwanipv6); +} + +/* perform RFC 2136 DNS update */ +services_dnsupdate_process($interface); + +/* signal dyndns update */ +services_dyndns_configure($interface); + +/* reconfigure IPsec tunnels */ +vpn_ipsec_force_reload($interface); + +/* start OpenVPN server & clients */ +if (substr($interface_real, 0, 4) != "ovpn") + openvpn_resync_all($interface); + +/* reload graphing functions */ +enable_rrd_graphing(); + +/* reload igmpproxy */ +services_igmpproxy_configure(); + +restart_packages(); + +?> diff --git a/usr/etc/rc.notify_message b/usr/etc/rc.notify_message new file mode 100755 index 000000000..5075e8bd2 --- /dev/null +++ b/usr/etc/rc.notify_message @@ -0,0 +1,64 @@ +#!/usr/local/bin/php + + 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. +*/ + +require_once("config.inc"); +require_once("functions.inc"); +require_once("notices.inc"); + +$arguments = getopt("egm:"); + +$send_email = false; +$send_growl = false; +$message = ""; + +foreach($arguments as $item => $arg) { + switch($item) { + case "e": + $send_email = true; + break; + case "g": + $send_growl = true; + break; + case "m": + $message = $arg; + break; + } +} + +if($message) { + if($send_email) { + notify_via_smtp($message); + } + if($send_growl) { + notify_via_growl($message); + } +} + +?> diff --git a/usr/etc/rc.ntpdate b/usr/etc/rc.ntpdate new file mode 100755 index 000000000..4d6457774 --- /dev/null +++ b/usr/etc/rc.ntpdate @@ -0,0 +1,39 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + require_once("filter.inc"); + require_once("shaper.inc"); + + system_ntp_configure(); +?> diff --git a/usr/etc/rc.openvpn b/usr/etc/rc.openvpn new file mode 100755 index 000000000..3148e4f22 --- /dev/null +++ b/usr/etc/rc.openvpn @@ -0,0 +1,128 @@ +#!/usr/local/bin/php -f +. + Copyright (C) 2009 Seth Mos . + 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. +*/ + +/* parse the configuration and include all functions used below */ +require_once("util.inc"); +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("gwlb.inc"); +require_once("openvpn.inc"); + +function openvpn_resync_if_needed ($mode, $ovpn_settings, $interface) { + global $g, $config; + + $resync_needed = true; + if (isset($ovpn_settings['disable'])) { + $resync_needed = false; + } else { + if (!empty($interface)) { + $mode_id = $mode . $ovpn_settings['vpnid']; + $fpath = "{$g['varetc_path']}/openvpn/{$mode_id}.interface"; + if (file_exists($fpath)) { + $current_device = file_get_contents($fpath); + $current_device = trim($current_device, " \t\n"); + $new_device = get_failover_interface($ovpn_settings['interface']); + if (isset($config['interfaces'][$interface])) { + $this_device = $config['interfaces'][$interface]['if']; + if (($current_device == $new_device) && ($current_device != $this_device)) + $resync_needed = false; + } + } + } + } + if ($resync_needed == true) { + log_error("OpenVPN: Resync " . $mode_id . " " . $ovpn_settings['description']); + openvpn_resync($mode, $ovpn_settings); + } +} + +/* make sure to wait until the boot scripts have finished */ +if (file_exists("{$g['varrun_path']}/booting")) + return; + +/* Input argument is a comma-separated list of gateway names, blank or "all". */ +if (isset($_GET)) + $argument = $_GET['interface']; +else + $argument = trim($argv[1], " \n"); + +if(is_array($config['openvpn']['openvpn-server']) || is_array($config['openvpn']['openvpn-client'])) { + if (empty($argument) || $argument == "all") { + $argument = "all"; + $log_text = "all"; + } else { + $log_text = "endpoints that may use " . $argument; + } + log_error("OpenVPN: One or more OpenVPN tunnel endpoints may have changed its IP. Reloading " . $log_text . "."); +} else + return; + +$openvpnlck = try_lock('openvpn', 10); +if (!$openvpnlck) { + log_error(gettext("Could not obtain openvpn lock for executing rc.openvpn for more than 10 seconds continuing...")); + unlock_force('openvpn'); + $openvpnlck = lock('openvpn', LOCK_EX); +} + +$arg_array = explode(",",$argument); +foreach ($arg_array as $arg_element) { + $gwgroups = array(); + if ($arg_element == "all") + $interface = ""; + else { + // e.g. $arg_element = "WANGW", $interface = "wan" + $interface = lookup_gateway_interface_by_name($arg_element); + if (empty($interface)) + $interface = $arg_element; + else + // e.g. $arg_element = "WANGW", $gwgroups = array of gateway groups that use "wan" + $gwgroups = gateway_is_gwgroup_member($arg_element); + } + + if(is_array($config['openvpn']['openvpn-server'])) { + foreach($config['openvpn']['openvpn-server'] as &$server) { + if ($server['interface'] == $interface || empty($interface) || (!empty($gwgroups) && in_array($server['interface'], $gwgroups))) + openvpn_resync_if_needed('server', $server, $interface); + } + } + + if (is_array($config['openvpn']['openvpn-client'])) { + foreach($config['openvpn']['openvpn-client'] as &$client) { + if ($client['interface'] == $interface || empty($interface) || (!empty($gwgroups) && in_array($client['interface'], $gwgroups))) + openvpn_resync_if_needed('client', $client, $interface); + } + } +} + +unlock($openvpnlck); +?> diff --git a/usr/etc/rc.packages b/usr/etc/rc.packages new file mode 100755 index 000000000..c56cf84ca --- /dev/null +++ b/usr/etc/rc.packages @@ -0,0 +1,45 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.php-fpm_restart b/usr/etc/rc.php-fpm_restart new file mode 100755 index 000000000..422b951ec --- /dev/null +++ b/usr/etc/rc.php-fpm_restart @@ -0,0 +1,11 @@ +#!/bin/sh + +/bin/pkill -F /var/run/php-fpm.pid +sleep 2 + +# Run the php.ini setup file and populate +# /usr/local/etc/php.ini and /usr/local/lib/php.ini +/etc/rc.php_ini_setup 2>/tmp/php_errors.txt +echo ">>> Restarting php-fpm" | /usr/bin/logger -p daemon.info -i -t rc.php-fpm_restart +/usr/local/sbin/php-fpm -c /usr/local/lib/php.ini -y /usr/local/lib/php-fpm.conf -RD 2>&1 >/dev/null + diff --git a/usr/etc/rc.php_ini_setup b/usr/etc/rc.php_ini_setup new file mode 100755 index 000000000..ad04f2530 --- /dev/null +++ b/usr/etc/rc.php_ini_setup @@ -0,0 +1,418 @@ +#!/bin/sh +# +# rc.php_ini_setup +# Copyright (C) 2010 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. + +# Set our operating platform +PLATFORM=`/bin/cat /etc/platform` +MIN_REALMEM_FOR_APC=512 + +if [ -d /usr/local/lib/php/20121212 ]; then + EXTENSIONSDIR="/usr/local/lib/php/20121212/" +elif [ -d /usr/local/lib/php/20090626 ]; then + EXTENSIONSDIR="/usr/local/lib/php/20090626/" +else + EXTENSIONSDIR="/usr/local/lib/php/20060613/" +fi + +# Grab amount of memory that is detected +if [ -f /var/log/dmesg.boot ]; then + AVAILMEM=`/bin/cat /var/log/dmesg.boot |/usr/bin/awk '/avail memory/ { memory=($4 / 1048576); printf("%0.0f\n", memory); exit}'` +else + AVAILMEM=`/sbin/dmesg -a |/usr/bin/awk '/avail memory/ { memory=($4 / 1048576); printf("%0.0f\n", memory); exit}'` +fi + +if [ -z "$AVAILMEM" ]; then + MEM=`/sbin/sysctl hw.physmem | cut -d':' -f2` + AVAILMEM=`/bin/expr $MEM / 1048576` +fi + + +# Get amount of ram installed on this system +REALMEM=`/sbin/sysctl hw.realmem | /usr/bin/awk '{print $2/1048576}' | /usr/bin/awk -F '.' '{print $1}'` +export REALMEM +export LOWMEM + +if [ ${REALMEM} -lt $MIN_REALMEM_FOR_APC ]; then + LOWMEM="TRUE" + echo ">>> Under $MIN_REALMEM_FOR_APC megabytes of ram detected. Not enabling APC." + echo ">>> Under $MIN_REALMEM_FOR_APC megabytes of ram detected. Not enabling APC." | /usr/bin/logger -p daemon.info -i -t rc.php_ini_setup +else + + # Calculate APC SHM size according + # to detected memory values + if [ "$AVAILMEM" -gt "135" ]; then + APCSHMEMSIZE="10M" + fi + if [ "$AVAILMEM" -gt "256" ]; then + APCSHMEMSIZE="20M" + fi + if [ "$AVAILMEM" -gt "384" ]; then + APCSHMEMSIZE="25M" + fi + if [ "$AVAILMEM" -gt "512" ]; then + APCSHMEMSIZE="30M" + fi + if [ "$AVAILMEM" -gt "784" ]; then + APCSHMEMSIZE="50M" + fi +fi + +# Set upload directory +if [ "$PLATFORM" = "nanobsd" ]; then + UPLOADTMPDIR=`/usr/bin/grep upload_path /etc/inc/globals.inc | /usr/bin/cut -d'"' -f4` +else + UPLOADTMPDIR="/tmp" +fi + +# Define php modules. Do not add .so, it will +# be done automatically by the script below. +PHPMODULES="standard" +if [ "$LOWMEM" != "TRUE" ]; then + PHPMODULES="$PHPMODULES apc" +fi +# Config read/write +PHPMODULES="$PHPMODULES xml libxml dom" +PHPMODULES="$PHPMODULES simplexml xmlreader xmlwriter" +# Downloading via HTTP/FTP (pkg mgr, etc) +PHPMODULES="$PHPMODULES curl date" +# Internationalization +PHPMODULES="$PHPMODULES gettext" +# User manager +PHPMODULES="$PHPMODULES ldap openssl pcntl" +PHPMODULES="$PHPMODULES hash" +PHPMODULES="$PHPMODULES mcrypt" +# Regexs, PERL style! +PHPMODULES="$PHPMODULES pcre" +# The mighty posix! +PHPMODULES="$PHPMODULES posix" +PHPMODULES="$PHPMODULES readline" +# Login sessions +PHPMODULES="$PHPMODULES session" +# Extra sanity seatbelts +PHPMODULES="$PHPMODULES suhosin" +# Firewall rules edit +PHPMODULES="$PHPMODULES ctype" +# firewall_rules_edit.php +PHPMODULES="$PHPMODULES mbstring" +# Synchronization primitives +PHPMODULES="$PHPMODULES shmop" +# Page compression +PHPMODULES="$PHPMODULES zlib" +# SQLlite & Database +PHPMODULES="$PHPMODULES spl" +PHPMODULES="$PHPMODULES pdo" +PHPMODULES="$PHPMODULES sqlite3" +# RADIUS +PHPMODULES="$PHPMODULES radius" +# ZeroMQ +PHPMODULES="$PHPMODULES zmq" +# SSH2 +PHPMODULES="$PHPMODULES ssh2" +# pfSense extensions +PHPMODULES="$PHPMODULES pfSense" +# json +PHPMODULES="$PHPMODULES json" +# bcmath +PHPMODULES="$PHPMODULES bcmath" +# filter +PHPMODULES="$PHPMODULES filter" + +PHP_ZEND_MODULES="ioncube_loader" +PHP_ZEND_MODULES_TS="ioncube_loader_ts" + +# Modules previously included. +# can be turned on by touching +# /etc/php_dynamodules/$modulename +# sysvmsg \ +# sysvsem \ +# sysvshm \ +# bcmath \ +# tokenizer \ +# uploadprogress \ +# sockets \ +# Reflection \ +# mysql \ +# bz2 \ + +# Clear the .ini file to make sure we are clean +if [ -f /usr/local/etc/php.ini ]; then + /bin/rm /usr/local/etc/php.ini +fi +if [ -f /usr/local/lib/php.ini ]; then + /bin/rm /usr/local/lib/php.ini +fi +LOADED_MODULES=`/usr/local/bin/php -m | /usr/bin/grep -v "\["` + +# Fetch the timezone from the XML and set it here. We set it later too in the running scripts +TIMEZONE=`cat /conf/config.xml | egrep -E '(.*?)' | awk -F'>' '{print $2}'|awk -F'<' '{print $1}'` + +# Get a loaded module list in the stock php +# Populate a dummy php.ini to avoid +# the file being clobbered and the firewall +# not being able to boot back up. +/bin/cat >/usr/local/lib/php.ini <> /usr/local/lib/php.ini + fi + fi +done + +# Zend modules +for EXT in $PHP_ZEND_MODULES; do + # Ensure extension exists before adding. + if [ -f "${EXTENSIONSDIR}/ioncube/${EXT}.so" ]; then + echo "zend_extension=${EXTENSIONSDIR}/ioncube/${EXT}.so" >> /usr/local/lib/php.ini + fi +done + +# Zend threaded modules +for EXT in $PHP_ZEND_MODULES_TS; do + # Ensure extension exists before adding. + if [ -f "${EXTENSIONSDIR}/ioncube/${EXT}.so" ]; then + echo "zend_extension_ts=${EXTENSIONSDIR}/ioncube/${EXT}.so" >> /usr/local/lib/php.ini + fi +done + + +if [ "$LOWMEM" != "TRUE" ]; then + + /bin/cat >>/usr/local/lib/php.ini <>/usr/local/lib/php.ini < /usr/local/lib/php-fpm.conf <> /usr/local/lib/php-fpm.conf <> /usr/local/lib/php-fpm.conf <> /usr/local/lib/php-fpm.conf </dev/null | /usr/bin/grep -v "\["` +for EXT in $PHPMODULESLC; do + SHOULDREMOVE="true" + for LM in $LOADED_MODULES; do + if [ "$EXT" = "$LM" ]; then + SHOULDREMOVE="false" + fi + done + # Handle low memory situations + if [ "$LOWMEM" = "TRUE" ]; then + if [ "$EXT" = "apc" ]; then + SHOULDREMOVE="true" + fi + if [ "$EXT" = "xcache" ]; then + SHOULDREMOVE="true" + fi + fi + if [ "$SHOULDREMOVE" = "true" ]; then + if [ -f "${EXTENSIONSDIR}${EXT}.so" ]; then + echo ">>> ${EXT} did not load correctly. Removing from php.ini..." >> /var/run/php_modules_load_errors.txt + /bin/cat /usr/local/lib/php.ini | /usr/bin/grep -v $EXT > /tmp/php.ini + /bin/rm -f /usr/local/lib/php.ini + /bin/mv /tmp/php.ini /usr/local/lib/php.ini + fi + fi +done + +# Copy php.ini file to etc/ too (cli) +/bin/cp /usr/local/lib/php.ini /usr/local/etc/php.ini diff --git a/usr/etc/rc.prunecaptiveportal b/usr/etc/rc.prunecaptiveportal new file mode 100755 index 000000000..c7011a55d --- /dev/null +++ b/usr/etc/rc.prunecaptiveportal @@ -0,0 +1,66 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + +/* parse the configuration and include all functions used below */ +/* config.inc retrives the util.inc and globals.inc */ +require_once("config.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("captiveportal.inc"); + +global $g; +global $cpzone; +global $cpzoneid; + +$cpzone = str_replace("\n", "", $argv[1]); +if (!is_array($config['captiveportal'][$cpzone])) { + log_error("{$cpzone} is not a valid zone in the configuration!"); + return; +} +$cpzoneid = $config['captiveportal'][$cpzone]['zoneid']; + +if (file_exists("{$g['tmp_path']}/.rc.prunecaptiveportal.{$cpzone}.running")) { + $stat = stat("{$g['tmp_path']}/.rc.prunecaptiveportal.{$cpzone}.running"); + if (time() - $stat['mtime'] >= 120) + @unlink("{$g['tmp_path']}/.rc.prunecaptiveportal.{$cpzone}.running"); + else { + log_error("Skipping CP prunning process because previous/another instance is already running"); + return; + } +} + +@file_put_contents("{$g['tmp_path']}/.rc.prunecaptiveportal.{$cpzone}.running", ""); +captiveportal_prune_old(); +@unlink("{$g['tmp_path']}/.rc.prunecaptiveportal.{$cpzone}.running"); + +?> diff --git a/usr/etc/rc.reboot b/usr/etc/rc.reboot new file mode 100755 index 000000000..afdc93cf0 --- /dev/null +++ b/usr/etc/rc.reboot @@ -0,0 +1,35 @@ +#!/bin/sh + +# $Id$ + +if ! /usr/bin/lockf -s -t 30 /tmp/config.lock /usr/bin/true; then + echo "Cannot reboot at this moment, a config write operation is in progress, and 30 seconds have passed." + exit 1 +fi + +sleep 1 + +# If PLATFORM is pfSense then remove +# temporary files on shutdown from /tmp/ +PLATFORM=`cat /etc/platform` +if [ "$PLATFORM" = "pfSense" ]; then + rm -rf /tmp/* +fi + +USE_MFS_TMPVAR=`/usr/bin/grep -c use_mfs_tmpvar /cf/conf/config.xml` +DISK_NAME=`/bin/df /var/db/rrd | /usr/bin/tail -1 | /usr/bin/awk '{print $1;}'` +DISK_TYPE=`/usr/bin/basename ${DISK_NAME} | /usr/bin/cut -c1-2` +# If we are not on a full install, or if the full install wants RAM disks, or if the full install _was_ using RAM disks, but isn't for the next boot... +if [ "${PLATFORM}" != "pfSense" ] || [ ${USE_MFS_TMPVAR} -gt 0 ] || [ "${DISK_TYPE}" = "md" ]; then + /etc/rc.backup_rrd.sh + /etc/rc.backup_dhcpleases.sh +fi + +sleep 1 + +SHUTDOWN=/sbin/shutdown +if [ -f /sbin/shutdown.old ]; then + SHUTDOWN=/sbin/shutdown.old +fi + +$SHUTDOWN -r now diff --git a/usr/etc/rc.reload_all b/usr/etc/rc.reload_all new file mode 100755 index 000000000..00dc4efc5 --- /dev/null +++ b/usr/etc/rc.reload_all @@ -0,0 +1,46 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.reload_interfaces b/usr/etc/rc.reload_interfaces new file mode 100755 index 000000000..329bf476e --- /dev/null +++ b/usr/etc/rc.reload_interfaces @@ -0,0 +1,45 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.resolv_conf_generate b/usr/etc/rc.resolv_conf_generate new file mode 100755 index 000000000..022431c36 --- /dev/null +++ b/usr/etc/rc.resolv_conf_generate @@ -0,0 +1,35 @@ +#!/usr/local/bin/php -f + diff --git a/usr/etc/rc.restart_webgui b/usr/etc/rc.restart_webgui new file mode 100755 index 000000000..eef8c0162 --- /dev/null +++ b/usr/etc/rc.restart_webgui @@ -0,0 +1,28 @@ +#!/usr/local/bin/php -f + + diff --git a/usr/etc/rc.restore_config_backup b/usr/etc/rc.restore_config_backup new file mode 100755 index 000000000..ca1728d32 --- /dev/null +++ b/usr/etc/rc.restore_config_backup @@ -0,0 +1,126 @@ +#!/usr/local/bin/php -q += 0; $c--) { + if (is_numeric($which) && ($c != $which)) + continue; + print_backup_info($confvers[$c], $c+1); + echo "\n"; + } +} + +function choose_backup() { + global $fp, $confvers; + if (count($confvers) == 0) { + echo gettext("No backups found in the configuration history."); + return -1; + } + echo gettext("Which configuration would you like to restore?") . "\n"; + echo " 1-" . count($confvers) . " : "; + $number = strtoupper(chop(fgets($fp))); + if (is_numeric($number) && ($number > 0) && ($number <= count($confvers))) { + return $number; + } else { + echo gettext("That is not a valid backup number.\n"); + return -1; + } +} + +function restore_history_backup($number) { + global $g, $fp, $confvers; + if (is_numeric($number) && ($number > 0) && ($number <= count($confvers))) { + $realnumber = $number - 1; + echo "\n" . gettext("Is this the backup you wish to restore?") . "\n"; + list_backups($realnumber); + $thisbackup = $confvers[$realnumber]; + echo gettext("Y/N?") . " : "; + $confirm = strtoupper(chop(fgets($fp))); + if ($confirm == gettext("Y")) { + conf_mount_rw(); + if(config_restore($g['conf_path'] . '/backup/config-' . $thisbackup['time'] . '.xml') == 0) { + echo "\n"; + echo sprintf(gettext('Successfully reverted to timestamp %1$s with description "%2$s".'), date(gettext("n/j/y H:i:s"), $thisbackup['time']), $thisbackup['description']); + echo "\n" . gettext("You may need to reboot the firewall or restart services before the restored configuration is fully active.") . "\n\n"; + } else { + echo gettext("Unable to revert to the selected configuration.") . "\n"; + } + conf_mount_ro(); + } else { + echo gettext("Restore canceled.") . "\n"; + } + } else { + echo gettext("Restore canceled due to invalid input.") . "\n"; + } +} + +while (true) { + + echo "\n"; + echo gettext("Restore Backup from Configuration History") . "\n\n"; + echo "1) " . gettext("List Backups") . "\n"; + echo "2) " . gettext("Restore Backup") . "\n"; + echo "Q) " . gettext("Quit") . "\n"; + echo "\n\n"; + echo gettext("Please select an option to continue") . ": "; + + $command = strtolower(chop(fgets($fp))); + + // Make sure we can detect a foreign language "quit" command. + if (strtolower($command) == gettext("quit")) + $command = "quit"; + + switch ($command) { + case "q": + case "quit": + echo "\n"; + fclose($fp); + die; + break; + case "1": + list_backups(); + break; + case "2": + $number = choose_backup(); + restore_history_backup($number); + fclose($fp); + die; + break; + } +} + +fclose($fp); +die; +?> \ No newline at end of file diff --git a/usr/etc/rc.restore_full_backup b/usr/etc/rc.restore_full_backup new file mode 100755 index 000000000..05bb060af --- /dev/null +++ b/usr/etc/rc.restore_full_backup @@ -0,0 +1,19 @@ +#!/bin/sh + +echo -n "Checking..." +if [ `tar tzPf $1 /etc/rc 2>/dev/null` ]; then + echo " Backup file looks OK." + echo "One moment, restoring ${1}..." + if [ -f /tmp/do_not_restore_config.xml ]; then + EXCLUDE="--exclude /cf/conf/config.xml" + rm /tmp/do_not_restore_config.xml + else + EXCLUDE="" + fi + tar xzPfU $1 $EXCLUDE -C / 2>/var/etc/restore_log.txt + echo "Restore of $1 complete." +else + echo " Error." + echo "File not found or invalid backup file. Available backups:" + ls -lah /root | grep backup | more +fi diff --git a/usr/etc/rc.savecore b/usr/etc/rc.savecore new file mode 100755 index 000000000..1612a4051 --- /dev/null +++ b/usr/etc/rc.savecore @@ -0,0 +1,22 @@ +#!/bin/sh +# Based on: +# FreeBSD: src/etc/rc.d/savecore,v 1.16.2.2.4.1 2010/06/14 02:09:06 kensmith Exp + +dumpdev=`/bin/realpath /dev/dumpdev` +dumpdir='/var/crash' + +if [ ! -c "${dumpdev}" ]; then + echo "Dump device does not exist. Savecore not run." + exit +fi + +if [ ! -d "${dumpdir}" ]; then + echo "Dump directory does not exist. Savecore not run." + exit +fi + +if savecore -C "${dumpdev}" >/dev/null; then + savecore ${dumpdir} ${dumpdev} +else + echo 'No core dumps found.' +fi diff --git a/usr/etc/rc.savevoucher b/usr/etc/rc.savevoucher new file mode 100755 index 000000000..29b18d696 --- /dev/null +++ b/usr/etc/rc.savevoucher @@ -0,0 +1,40 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + /* parse the configuration and include all functions used below */ + require_once("config.inc"); + require_once("functions.inc"); + require_once("filter.inc"); + require_once("shaper.inc"); + require_once("captiveportal.inc"); + require_once("voucher.inc"); + + voucher_save_db_to_config(); +?> diff --git a/usr/etc/rc.shutdown b/usr/etc/rc.shutdown new file mode 100755 index 000000000..2102ff476 --- /dev/null +++ b/usr/etc/rc.shutdown @@ -0,0 +1,37 @@ +#!/bin/sh + +if ! /usr/bin/lockf -s -t 30 /tmp/config.lock /usr/bin/true; then + echo "Cannot shutdown at this moment, a config write operation is in progress and 30 seconds have passed." + exit -1 +fi + +product=`cat /etc/inc/globals.inc | grep product_name | cut -d'"' -f4` + +echo +echo "${product} is now shutting down ..." +echo + +stty status '^T' + +# Set shell to ignore SIGINT (2), but not children; +trap : 2 + +HOME=/; export HOME +PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH + +# If PLATFORM is pfSense then remove +# temporary files on shutdown from /tmp/ +PLATFORM=`cat /etc/platform` +if [ "$PLATFORM" = "pfSense" ]; then + find -x /tmp/* -type f -exec rm -f {} \; >/dev/null 2>&1 +fi + +USE_MFS_TMPVAR=`/usr/bin/grep -c use_mfs_tmpvar /cf/conf/config.xml` +DISK_NAME=`/bin/df /var/db/rrd | /usr/bin/tail -1 | /usr/bin/awk '{print $1;}'` +DISK_TYPE=`/usr/bin/basename ${DISK_NAME} | /usr/bin/cut -c1-2` +# If we are not on a full install, or if the full install wants RAM disks, or if the full install _was_ using RAM disks, but isn't for the next boot... +if [ "${PLATFORM}" != "pfSense" ] || [ ${USE_MFS_TMPVAR} -gt 0 ] || [ "${DISK_TYPE}" = "md" ]; then + /etc/rc.backup_rrd.sh + /etc/rc.backup_dhcpleases.sh +fi diff --git a/usr/etc/rc.start_packages b/usr/etc/rc.start_packages new file mode 100755 index 000000000..4ddd908d1 --- /dev/null +++ b/usr/etc/rc.start_packages @@ -0,0 +1,74 @@ +#!/usr/local/bin/php -f + $package) { + echo " Starting package {$package['name']}..."; + sync_package($pkgid); + $internal_name = get_pkg_internal_name($package); + start_service($internal_name); + unset($rcfiles[RCFILEPREFIX . strtolower($internal_name) . ".sh"]); + echo "done.\n"; + } +} + +$shell = @popen("/bin/sh", "w"); +if ($shell) { + foreach ($rcfiles as $rcfile => $number) { + echo " Starting {$rcfile}..."; + fwrite($shell, "{$rcfile} start >>/tmp/bootup_messages 2>&1 &"); + echo "done.\n"; + } + + pclose($shell); +} + +?> diff --git a/usr/etc/rc.stop_packages b/usr/etc/rc.stop_packages new file mode 100755 index 000000000..b7a87f191 --- /dev/null +++ b/usr/etc/rc.stop_packages @@ -0,0 +1,5 @@ +#!/usr/local/bin/php -f + \ No newline at end of file diff --git a/usr/etc/rc.update_alias_url_data b/usr/etc/rc.update_alias_url_data new file mode 100755 index 000000000..5cc608854 --- /dev/null +++ b/usr/etc/rc.update_alias_url_data @@ -0,0 +1,43 @@ +#!/usr/local/bin/php -f + + 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. +*/ + +/* parse the configuration and include all functions used below */ +/* config.inc retrives the util.inc and globals.inc */ + +require_once("config.inc"); +require_once("functions.inc"); + +if (update_alias_url_data()) { + write_config(); + send_event("filter reload"); +} +?> diff --git a/usr/etc/rc.update_bogons.sh b/usr/etc/rc.update_bogons.sh new file mode 100755 index 000000000..331fbc525 --- /dev/null +++ b/usr/etc/rc.update_bogons.sh @@ -0,0 +1,157 @@ +#!/bin/sh + +# +# TODO: opnSense, drop/replace? +# + +sys.exit(0) +# Update bogons file +# Part of the pfSense project +# https://www.pfsense.org + +# Global variables +proc_error="" + +# Download and extract if necessary +process_url() { + local file=$1 + local url=$2 + local filename=${url##*/} + local ext=${filename#*.} + + /usr/bin/fetch -a -T 30 -q -o $file "${url}" + + if [ ! -f $file ]; then + echo "Could not download ${url}" | logger + proc_error="true" + fi + + case "$ext" in + tar) + mv $file $file.tmp + /usr/bin/tar -xf $file.tmp -O > $file 2> /dev/null + ;; + tar.gz) + mv $file $file.tmp + /usr/bin/tar -xzf $file.tmp -O > $file 2> /dev/null + ;; + tgz) + mv $file $file.tmp + /usr/bin/tar -xzf $file.tmp -O > $file 2> /dev/null + ;; + tar.bz2) + mv $file $file.tmp + /usr/bin/tar -xjf $file.tmp -O > $file 2> /dev/null + ;; + *) + ;; + esac + + if [ -f $file.tmp ]; then + rm $file.tmp + fi + + if [ ! -f $file ]; then + echo "Could not extract ${filename}" | logger + proc_error="true" + fi +} + +echo "rc.update_bogons.sh is starting up." | logger + +# Sleep for some time, unless an argument is specified. +if [ "$1" = "" ]; then + # Grab a random value + value=`od -A n -d -N2 /dev/random | awk '{ print $1 }'` + echo "rc.update_bogons.sh is sleeping for $value" | logger + sleep $value +fi + +echo "rc.update_bogons.sh is beginning the update cycle." | logger + +# Load custom bogon configuration +if [ -f /var/etc/bogon_custom ]; then + . /var/etc/bogon_custom +fi + +# Set default values if not overriden +v4url=${v4url:-"https://files.pfsense.org/lists/fullbogons-ipv4.txt"} +v6url=${v6url:-"https://files.pfsense.org/lists/fullbogons-ipv6.txt"} +v4urlcksum=${v4urlcksum:-"${v4url}.md5"} +v6urlcksum=${v6urlcksum:-"${v6url}.md5"} + +process_url /tmp/bogons "${v4url}" +process_url /tmp/bogonsv6 "${v6url}" + +if [ "$proc_error" != "" ]; then + # Relaunch and sleep + sh /etc/rc.update_bogons.sh & + exit +fi + +BOGON_V4_CKSUM=`/usr/bin/fetch -T 30 -q -o - "${v4urlcksum}" | awk '{ print $4 }'` +ON_DISK_V4_CKSUM=`md5 /tmp/bogons | awk '{ print $4 }'` +BOGON_V6_CKSUM=`/usr/bin/fetch -T 30 -q -o - "${v6urlcksum}" | awk '{ print $4 }'` +ON_DISK_V6_CKSUM=`md5 /tmp/bogonsv6 | awk '{ print $4 }'` + +if [ "$BOGON_V4_CKSUM" = "$ON_DISK_V4_CKSUM" ] || [ "$BOGON_V6_CKSUM" = "$ON_DISK_V6_CKSUM" ]; then + # At least one of the downloaded checksums matches, so mount RW + /etc/rc.conf_mount_rw + + ENTRIES_MAX=`pfctl -s memory | awk '/table-entries/ { print $4 }'` + + if [ "$BOGON_V4_CKSUM" = "$ON_DISK_V4_CKSUM" ]; then + ENTRIES_TOT=`pfctl -vvsTables | awk '/Addresses/ {s+=$2}; END {print s}'` + ENTRIES_V4=`pfctl -vvsTables | awk '/-\tbogons$/ {getline; print $2}'` + LINES_V4=`wc -l /tmp/bogons | awk '{ print $1 }'` + if [ $ENTRIES_MAX -gt $((2*ENTRIES_TOT-${ENTRIES_V4:-0}+LINES_V4)) ]; then + egrep -v "^192.168.0.0/16|^172.16.0.0/12|^10.0.0.0/8" /tmp/bogons > /etc/bogons + RESULT=`/sbin/pfctl -t bogons -T replace -f /etc/bogons 2>&1` + echo "$RESULT" | awk '{ print "Bogons V4 file downloaded: " $0 }' | logger + else + echo "Not updating IPv4 bogons (increase table-entries limit)" | logger + fi + rm /tmp/bogons + else + echo "Could not download ${v4url} (checksum mismatch)" | logger + checksum_error="true" + fi + + if [ "$BOGON_V6_CKSUM" = "$ON_DISK_V6_CKSUM" ]; then + BOGONS_V6_TABLE_COUNT=`pfctl -sTables | grep ^bogonsv6$ | wc -l | awk '{ print $1 }'` + ENTRIES_TOT=`pfctl -vvsTables | awk '/Addresses/ {s+=$2}; END {print s}'` + LINES_V6=`wc -l /tmp/bogonsv6 | awk '{ print $1 }'` + if [ $BOGONS_V6_TABLE_COUNT -gt 0 ]; then + ENTRIES_V6=`pfctl -vvsTables | awk '/-\tbogonsv6$/ {getline; print $2}'` + if [ $ENTRIES_MAX -gt $((2*ENTRIES_TOT-${ENTRIES_V6:-0}+LINES_V6)) ]; then + egrep -iv "^fc00::/7" /tmp/bogonsv6 > /etc/bogonsv6 + RESULT=`/sbin/pfctl -t bogonsv6 -T replace -f /etc/bogonsv6 2>&1` + echo "$RESULT" | awk '{ print "Bogons V6 file downloaded: " $0 }' | logger + else + echo "Not saving or updating IPv6 bogons (increase table-entries limit)" | logger + fi + else + if [ $ENTRIES_MAX -gt $((2*ENTRIES_TOT+LINES_V6)) ]; then + egrep -iv "^fc00::/7" /tmp/bogonsv6 > /etc/bogonsv6 + echo "Bogons V6 file downloaded but not updating IPv6 bogons table because IPv6 Allow is off" | logger + else + echo "Not saving IPv6 bogons table (IPv6 Allow is off and table-entries limit is potentially too low)" | logger + fi + fi + rm /tmp/bogonsv6 + else + echo "Could not download ${v6url} (checksum mismatch)" | logger + checksum_error="true" + fi + + # We mounted RW, so switch back to RO + /etc/rc.conf_mount_ro +fi + +if [ "$checksum_error" != "" ]; then + # Relaunch and sleep + sh /etc/rc.update_bogons.sh & + exit +fi + +echo "rc.update_bogons.sh is ending the update cycle." | logger diff --git a/usr/etc/rc.update_urltables b/usr/etc/rc.update_urltables new file mode 100755 index 000000000..ca8ed3810 --- /dev/null +++ b/usr/etc/rc.update_urltables @@ -0,0 +1,58 @@ +#!/usr/local/bin/php -q + 0) { + log_error("{$argv[0]}: Starting up."); + + if ($argv[1] != "now") { + // Wait a little before updating. + $wait = mt_rand(5, 60); + log_error("{$argv[0]}: Sleeping for {$wait} seconds."); + sleep($wait); + } + + log_error("{$argv[0]}: Starting URL table alias updates"); + + $filter_reload = false; + foreach ($todo as $t) { + $r = process_alias_urltable($t['name'], $t['url'], $t['freq']); + if ($r == 1) { + $result = ""; + // TODO: Change it when pf supports tables with ports + if ($t['type'] == "urltable") + exec("/sbin/pfctl -t " . escapeshellarg($t['name']) . " -T replace -f /var/db/aliastables/" . escapeshellarg($t['name']) . ".txt 2>&1", $result); + else + $filter_reload = true; + log_error("{$argv[0]}: Updated {$t['name']} content from {$t['url']}: {$result[0]}"); + } elseif ($r == -1) { + log_error("{$argv[0]}: {$t['name']} does not need updating."); + } else { + log_error("{$argv[0]}: ERROR: could not update {$t['name']} content from {$t['url']}"); + } + } + + if ($filter_reload) + send_event("filter reload"); +} +?> diff --git a/usr/etc/services b/usr/etc/services new file mode 100644 index 000000000..1f85da00c --- /dev/null +++ b/usr/etc/services @@ -0,0 +1,4111 @@ +# +# Network services, Internet style +# +# Note that it is presently the policy of IANA to assign a single well-known +# port number for both TCP and UDP; hence, most entries here have two entries +# even if the protocol doesn't support UDP operations. +# +# The latest IANA port assignments can be gotten from +# +# http://www.iana.org/assignments/port-numbers +# +# The Well Known Ports are those from 0 through 1023. +# The Registered Ports are those from 1024 through 49151 +# The Dynamic and/or Private Ports are those from 49152 through 65535 +# +# Kerberos services are for Kerberos v4, and are unofficial. Sites running +# v5 should uncomment v5 entries and comment v4 entries. +# +# $FreeBSD: src/etc/services,v 1.62.2.12 2003/02/01 16:48:17 schweikh Exp $ +# From: @(#)services 5.8 (Berkeley) 5/9/91 +# +# WELL KNOWN PORT NUMBERS +# +rtmp 1/ddp #Routing Table Maintenance Protocol +tcpmux 1/tcp #TCP Port Service Multiplexer +tcpmux 1/udp #TCP Port Service Multiplexer +nbp 2/ddp #Name Binding Protocol +compressnet 2/tcp #Management Utility +compressnet 2/udp #Management Utility +compressnet 3/tcp #Compression Process +compressnet 3/udp #Compression Process +echo 4/ddp #AppleTalk Echo Protocol +rje 5/tcp #Remote Job Entry +rje 5/udp #Remote Job Entry +zip 6/ddp #Zone Information Protocol +echo 7/tcp +echo 7/udp +discard 9/tcp sink null +discard 9/udp sink null +systat 11/tcp users #Active Users +systat 11/udp users #Active Users +daytime 13/tcp +daytime 13/udp +qotd 17/tcp quote #Quote of the Day +qotd 17/udp quote #Quote of the Day +msp 18/tcp #Message Send Protocol +msp 18/udp #Message Send Protocol +chargen 19/tcp ttytst source #Character Generator +chargen 19/udp ttytst source #Character Generator +ftp-data 20/tcp #File Transfer [Default Data] +ftp-data 20/udp #File Transfer [Default Data] +ftp 21/tcp #File Transfer [Control] +ftp 21/udp #File Transfer [Control] +ssh 22/tcp #Secure Shell Login +ssh 22/udp #Secure Shell Login +telnet 23/tcp +telnet 23/udp +# 24/tcp any private mail system +# 24/udp any private mail system +smtp 25/tcp mail #Simple Mail Transfer +smtp 25/udp mail #Simple Mail Transfer +nsw-fe 27/tcp #NSW User System FE +nsw-fe 27/udp #NSW User System FE +msg-icp 29/tcp #MSG ICP +msg-icp 29/udp #MSG ICP +msg-auth 31/tcp #MSG Authentication +msg-auth 31/udp #MSG Authentication +dsp 33/tcp #Display Support Protocol +dsp 33/udp #Display Support Protocol +# 35/tcp any private printer server +# 35/udp any private printer server +time 37/tcp timserver +time 37/udp timserver +rap 38/tcp #Route Access Protocol +rap 38/udp #Route Access Protocol +rlp 39/tcp resource #Resource Location Protocol +rlp 39/udp resource #Resource Location Protocol +graphics 41/tcp +graphics 41/udp +nameserver 42/tcp name #Host Name Server +nameserver 42/udp name #Host Name Server +nicname 43/tcp whois +nicname 43/udp whois +mpm-flags 44/tcp #MPM FLAGS Protocol +mpm-flags 44/udp #MPM FLAGS Protocol +mpm 45/tcp #Message Processing Module [recv] +mpm 45/udp #Message Processing Module [recv] +mpm-snd 46/tcp #MPM [default send] +mpm-snd 46/udp #MPM [default send] +ni-ftp 47/tcp #NI FTP +ni-ftp 47/udp #NI FTP +auditd 48/tcp #Digital Audit Daemon +auditd 48/udp #Digital Audit Daemon +tacacs 49/tcp #Login Host Protocol (TACACS) +tacacs 49/udp #Login Host Protocol (TACACS) +re-mail-ck 50/tcp #Remote Mail Checking Protocol +re-mail-ck 50/udp #Remote Mail Checking Protocol +la-maint 51/tcp #IMP Logical Address Maintenance +la-maint 51/udp #IMP Logical Address Maintenance +xns-time 52/tcp #XNS Time Protocol +xns-time 52/udp #XNS Time Protocol +domain 53/tcp #Domain Name Server +domain 53/udp #Domain Name Server +xns-ch 54/tcp #XNS Clearinghouse +xns-ch 54/udp #XNS Clearinghouse +isi-gl 55/tcp #ISI Graphics Language +isi-gl 55/udp #ISI Graphics Language +xns-auth 56/tcp #XNS Authentication +xns-auth 56/udp #XNS Authentication +mtp 57/tcp # deprecated +#PROBLEMS!============================================================== +# 57/tcp any private terminal access +#PROBLEMS!============================================================== +# 57/udp any private terminal access +xns-mail 58/tcp #XNS Mail +xns-mail 58/udp #XNS Mail +# 59/tcp any private file service +# 59/udp any private file service +ni-mail 61/tcp #NI MAIL +ni-mail 61/udp #NI MAIL +acas 62/tcp #ACA Services +acas 62/udp #ACA Services +whois++ 63/tcp +whois++ 63/udp +covia 64/tcp #Communications Integrator (CI) +covia 64/udp #Communications Integrator (CI) +tacacs-ds 65/tcp #TACACS-Database Service +tacacs-ds 65/udp #TACACS-Database Service +sql*net 66/tcp #Oracle SQL*NET +sql*net 66/udp #Oracle SQL*NET +bootps 67/tcp dhcps #Bootstrap Protocol Server +bootps 67/udp dhcps #Bootstrap Protocol Server +bootpc 68/tcp dhcpc #Bootstrap Protocol Client +bootpc 68/udp dhcpc #Bootstrap Protocol Client +tftp 69/tcp #Trivial File Transfer +tftp 69/udp #Trivial File Transfer +tftp-proxy 6969/udp +gopher 70/tcp +gopher 70/udp +netrjs-1 71/tcp #Remote Job Service +netrjs-1 71/udp #Remote Job Service +netrjs-2 72/tcp #Remote Job Service +netrjs-2 72/udp #Remote Job Service +netrjs-3 73/tcp #Remote Job Service +netrjs-3 73/udp #Remote Job Service +netrjs-4 74/tcp #Remote Job Service +netrjs-4 74/udp #Remote Job Service +# 75/tcp any private dial out service +# 75/udp any private dial out service +deos 76/tcp #Distributed External Object Store +deos 76/udp #Distributed External Object Store +netrjs 77/tcp +#PROBLEMS!============================================================== +# 77/tcp any private RJE service +#PROBLEMS!============================================================== +# 77/udp any private RJE service +vettcp 78/tcp +vettcp 78/udp +finger 79/tcp +finger 79/udp +http 80/tcp www www-http #World Wide Web HTTP +http 80/udp www www-http #World Wide Web HTTP +hosts2-ns 81/tcp #HOSTS2 Name Server +hosts2-ns 81/udp #HOSTS2 Name Server +xfer 82/tcp #XFER Utility +xfer 82/udp #XFER Utility +mit-ml-dev 83/tcp #MIT ML Device +mit-ml-dev 83/udp #MIT ML Device +ctf 84/tcp #Common Trace Facility +ctf 84/udp #Common Trace Facility +mit-ml-dev 85/tcp #MIT ML Device +mit-ml-dev 85/udp #MIT ML Device +mfcobol 86/tcp #Micro Focus Cobol +mfcobol 86/udp #Micro Focus Cobol +ttylink 87/tcp +#PROBLEMS!=========================================================== +# 87/tcp any private terminal link +#PROBLEMS!=========================================================== +# 87/udp any private terminal link +kerberos-sec 88/tcp kerberos # krb5 # Kerberos (v5) +kerberos-sec 88/udp kerberos # krb5 # Kerberos (v5) +su-mit-tg 89/tcp #SU/MIT Telnet Gateway +su-mit-tg 89/udp #SU/MIT Telnet Gateway +dnsix 90/tcp #DNSIX Securit Attribute Token Map +dnsix 90/udp #DNSIX Securit Attribute Token Map +mit-dov 91/tcp #MIT Dover Spooler +mit-dov 91/udp #MIT Dover Spooler +npp 92/tcp #Network Printing Protocol +npp 92/udp #Network Printing Protocol +dcp 93/tcp #Device Control Protocol +dcp 93/udp #Device Control Protocol +objcall 94/tcp #Tivoli Object Dispatcher +objcall 94/udp #Tivoli Object Dispatcher +supdup 95/tcp +supdup 95/udp +dixie 96/tcp #DIXIE Protocol Specification +dixie 96/udp #DIXIE Protocol Specification +swift-rvf 97/tcp #Swift Remote Virtural File Protocol +swift-rvf 97/udp #Swift Remote Virtural File Protocol +tacnews 98/tcp #TAC News, Unofficial: Red Hat linuxconf +tacnews 98/udp #TAC News, Unofficial: Red Hat linuxconf +metagram 99/tcp #Metagram Relay +metagram 99/udp #Metagram Relay +newacct 100/tcp #[unauthorized use] +hostname 101/tcp hostnames #NIC Host Name Server +hostname 101/udp hostnames #NIC Host Name Server +iso-tsap 102/tcp tsap #ISO-TSAP Class 0 +iso-tsap 102/udp tsap #ISO-TSAP Class 0 +gppitnp 103/tcp #Genesis Point-to-Point Trans Net +gppitnp 103/udp #Genesis Point-to-Point Trans Net +acr-nema 104/tcp #ACR-NEMA Digital Imag. & Comm. 300 +acr-nema 104/udp #ACR-NEMA Digital Imag. & Comm. 300 +csnet-ns 105/tcp cso-ns cso #Mailbox Name Nameserver +csnet-ns 105/udp cso-ns cso #Mailbox Name Nameserver +pop3pw 106/tcp 3com-tsmux #Eudora compatible PW changer +3com-tsmux 106/udp +rtelnet 107/tcp #Remote Telnet Service +rtelnet 107/udp #Remote Telnet Service +snagas 108/tcp #SNA Gateway Access Server +snagas 108/udp #SNA Gateway Access Server +pop2 109/tcp postoffice #Post Office Protocol - Version 2 +pop2 109/udp postoffice #Post Office Protocol - Version 2 +pop3 110/tcp #Post Office Protocol - Version 3 +pop3 110/udp #Post Office Protocol - Version 3 +sunrpc 111/tcp rpcbind #SUN Remote Procedure Call +sunrpc 111/udp rpcbind #SUN Remote Procedure Call +mcidas 112/tcp #McIDAS Data Transmission Protocol +mcidas 112/udp #McIDAS Data Transmission Protocol +auth 113/tcp ident tap #Authentication Service +auth 113/udp ident tap #Authentication Service +audionews 114/tcp #Audio News Multicast +audionews 114/udp #Audio News Multicast +sftp 115/tcp #Simple File Transfer Protocol +sftp 115/udp #Simple File Transfer Protocol +ansanotify 116/tcp #ANSA REX Notify +ansanotify 116/udp #ANSA REX Notify +uucp-path 117/tcp #UUCP Path Service +uucp-path 117/udp #UUCP Path Service +sqlserv 118/tcp #SQL Services +sqlserv 118/udp #SQL Services +nntp 119/tcp usenet #Network News Transfer Protocol +nntp 119/udp usenet #Network News Transfer Protocol +cfdptkt 120/tcp +cfdptkt 120/udp +erpc 121/tcp #Encore Expedited Remote Pro.Call +erpc 121/udp #Encore Expedited Remote Pro.Call +smakynet 122/tcp +smakynet 122/udp +ntp 123/tcp #Network Time Protocol +ntp 123/udp #Network Time Protocol +ansatrader 124/tcp #ANSA REX Trader +ansatrader 124/udp #ANSA REX Trader +locus-map 125/tcp #Locus PC-Interface Net Map Ser +locus-map 125/udp #Locus PC-Interface Net Map Ser +unitary 126/tcp #Unisys Unitary Login +unitary 126/udp #Unisys Unitary Login +locus-con 127/tcp #Locus PC-Interface Conn Server +locus-con 127/udp #Locus PC-Interface Conn Server +gss-xlicen 128/tcp #GSS X License Verification +gss-xlicen 128/udp #GSS X License Verification +pwdgen 129/tcp #Password Generator Protocol +pwdgen 129/udp #Password Generator Protocol +cisco-fna 130/tcp #cisco FNATIVE +cisco-fna 130/udp #cisco FNATIVE +cisco-tna 131/tcp #cisco TNATIVE +cisco-tna 131/udp #cisco TNATIVE +cisco-sys 132/tcp #cisco SYSMAINT +cisco-sys 132/udp #cisco SYSMAINT +statsrv 133/tcp #Statistics Service +statsrv 133/udp #Statistics Service +ingres-net 134/tcp #INGRES-NET Service +ingres-net 134/udp #INGRES-NET Service +loc-srv 135/tcp epmap #Location Service +loc-srv 135/udp epmap #Location Service +profile 136/tcp #PROFILE Naming System +profile 136/udp #PROFILE Naming System +netbios-ns 137/tcp #NETBIOS Name Service +netbios-ns 137/udp #NETBIOS Name Service +netbios-dgm 138/tcp #NETBIOS Datagram Service +netbios-dgm 138/udp #NETBIOS Datagram Service +netbios-ssn 139/tcp #NETBIOS Session Service +netbios-ssn 139/udp #NETBIOS Session Service +emfis-data 140/tcp #EMFIS Data Service +emfis-data 140/udp #EMFIS Data Service +emfis-cntl 141/tcp #EMFIS Control Service +emfis-cntl 141/udp #EMFIS Control Service +bl-idm 142/tcp #Britton-Lee IDM +bl-idm 142/udp #Britton-Lee IDM +imap 143/tcp imap2 imap4 #Interim Mail Access Protocol v2 +imap 143/udp imap2 imap4 #Interim Mail Access Protocol v2 +NeWS 144/tcp # Window System +NeWS 144/udp # Window System +#PROBLEMS!============================================================== +#uma 144/tcp #Universal Management Architecture +#uma 144/udp #Universal Management Architecture +#PROBLEMS!============================================================== +uaac 145/tcp #UAAC Protocol +uaac 145/udp #UAAC Protocol +iso-tp0 146/tcp +iso-tp0 146/udp +iso-ip 147/tcp +iso-ip 147/udp +cronus 148/tcp jargon #CRONUS-SUPPORT +cronus 148/udp jargon #CRONUS-SUPPORT +aed-512 149/tcp #AED 512 Emulation Service +aed-512 149/udp #AED 512 Emulation Service +sql-net 150/tcp +sql-net 150/udp +hems 151/tcp +hems 151/udp +bftp 152/tcp #Background File Transfer Program +bftp 152/udp #Background File Transfer Program +sgmp 153/tcp +sgmp 153/udp +netsc-prod 154/tcp +netsc-prod 154/udp +netsc-dev 155/tcp +netsc-dev 155/udp +sqlsrv 156/tcp #SQL Service +sqlsrv 156/udp #SQL Service +knet-cmp 157/tcp #KNET/VM Command/Message Protocol +knet-cmp 157/udp #KNET/VM Command/Message Protocol +pcmail-srv 158/tcp #PCMail Server +pcmail-srv 158/udp #PCMail Server +nss-routing 159/tcp +nss-routing 159/udp +sgmp-traps 160/tcp +sgmp-traps 160/udp +snmp 161/tcp +snmp 161/udp +snmptrap 162/tcp snmp-trap +snmptrap 162/udp snmp-trap +cmip-man 163/tcp #CMIP/TCP Manager +cmip-man 163/udp #CMIP/TCP Manager +cmip-agent 164/tcp #CMIP/TCP Agent +smip-agent 164/udp #CMIP/TCP Agent +xns-courier 165/tcp #Xerox +xns-courier 165/udp #Xerox +s-net 166/tcp #Sirius Systems +s-net 166/udp #Sirius Systems +namp 167/tcp +namp 167/udp +rsvd 168/tcp +rsvd 168/udp +send 169/tcp +send 169/udp +print-srv 170/tcp #Network PostScript +print-srv 170/udp #Network PostScript +multiplex 171/tcp #Network Innovations Multiplex +multiplex 171/udp #Network Innovations Multiplex +cl/1 172/tcp #Network Innovations CL/1 +cl/1 172/udp #Network Innovations CL/1 +xyplex-mux 173/tcp +xyplex-mux 173/udp +mailq 174/tcp +mailq 174/udp +vmnet 175/tcp +vmnet 175/udp +genrad-mux 176/tcp +genrad-mux 176/udp +xdmcp 177/tcp #X Display Manager Control Protocol +xdmcp 177/udp #X Display Manager Control Protocol +NextStep 178/tcp nextstep NeXTStep #NextStep Window Server +NextStep 178/udp nextstep NeXTStep #NextStep Window Server +bgp 179/tcp #Border Gateway Protocol +bgp 179/udp #Border Gateway Protocol +ris 180/tcp #Intergraph +ris 180/udp #Intergraph +unify 181/tcp +unify 181/udp +audit 182/tcp #Unisys Audit SITP +audit 182/udp #Unisys Audit SITP +ocbinder 183/tcp +ocbinder 183/udp +ocserver 184/tcp +ocserver 184/udp +remote-kis 185/tcp +remote-kis 185/udp +kis 186/tcp #KIS Protocol +kis 186/udp #KIS Protocol +aci 187/tcp #Application Communication Interface +aci 187/udp #Application Communication Interface +mumps 188/tcp #Plus Five's MUMPS +mumps 188/udp #Plus Five's MUMPS +qft 189/tcp #Queued File Transport +qft 189/udp #Queued File Transport +gacp 190/tcp #Gateway Access Control Protocol +gacp 190/udp cacp #Gateway Access Control Protocol +prospero 191/tcp #Prospero Directory Service +prospero 191/udp #Prospero Directory Service +osu-nms 192/tcp #OSU Network Monitoring System +osu-nms 192/udp #OSU Network Monitoring System +srmp 193/tcp #Spider Remote Monitoring Protocol +srmp 193/udp #Spider Remote Monitoring Protocol +irc 194/tcp #Internet Relay Chat Protocol +irc 194/udp #Internet Relay Chat Protocol +dn6-nlm-aud 195/tcp #DNSIX Network Level Module Audit +dn6-nlm-aud 195/udp #DNSIX Network Level Module Audit +dn6-smm-red 196/tcp #DNSIX Session Mgt Module Audit Redir +dn6-smm-red 196/udp #DNSIX Session Mgt Module Audit Redir +dls 197/tcp #Directory Location Service +dls 197/udp #Directory Location Service +dls-mon 198/tcp #Directory Location Service Monitor +dls-mon 198/udp #Directory Location Service Monitor +smux 199/tcp +smux 199/udp +src 200/tcp #IBM System Resource Controller +src 200/udp #IBM System Resource Controller +at-rtmp 201/tcp #AppleTalk Routing Maintenance +at-rtmp 201/udp #AppleTalk Routing Maintenance +at-nbp 202/tcp #AppleTalk Name Binding +at-nbp 202/udp #AppleTalk Name Binding +at-3 203/tcp #AppleTalk Unused +at-3 203/udp #AppleTalk Unused +at-echo 204/tcp #AppleTalk Echo +at-echo 204/udp #AppleTalk Echo +at-5 205/tcp #AppleTalk Unused +at-5 205/udp #AppleTalk Unused +at-zis 206/tcp #AppleTalk Zone Information +at-zis 206/udp #AppleTalk Zone Information +at-7 207/tcp #AppleTalk Unused +at-7 207/udp #AppleTalk Unused +at-8 208/tcp #AppleTalk Unused +at-8 208/udp #AppleTalk Unused +qmtp 209/tcp #The Quick Mail Transfer Protocol +qmtp 209/udp #The Quick Mail Transfer Protocol +#PROBLEMS!============================================================== +#tam 209/tcp #Trivial Authenticated Mail Protocol +#tam 209/udp #Trivial Authenticated Mail Protocol +#PROBLEMS!============================================================== +z39.50 210/tcp wais #ANSI Z39.50 +z39.50 210/udp wais #ANSI Z39.50 +914c/g 211/tcp #Texas Instruments 914C/G Terminal +914c/g 211/udp #Texas Instruments 914C/G Terminal +anet 212/tcp #ATEXSSTR +anet 212/udp #ATEXSSTR +ipx 213/tcp +ipx 213/udp +vmpwscs 214/tcp +vmpwscs 214/udp +softpc 215/tcp #Insignia Solutions +softpc 215/udp #Insignia Solutions +CAIlic 216/tcp atls #Computer Associates Int'l License Server +CAIlic 216/udp atls #Computer Associates Int'l License Server +dbase 217/tcp #dBASE Unix +dbase 217/udp #dBASE Unix +mpp 218/tcp #Netix Message Posting Protocol +mpp 218/udp #Netix Message Posting Protocol +uarps 219/tcp #Unisys ARPs +uarps 219/udp #Unisys ARPs +#imap3@220 was never used and never should have been allocated. See PR 46294. +#imap3 220/tcp #Interactive Mail Access Protocol v3 +#imap3 220/udp #Interactive Mail Access Protocol v3 +fln-spx 221/tcp #Berkeley rlogind with SPX auth +fln-spx 221/udp #Berkeley rlogind with SPX auth +rsh-spx 222/tcp #Berkeley rshd with SPX auth +rsh-spx 222/udp #Berkeley rshd with SPX auth +cdc 223/tcp #Certificate Distribution Center +cdc 223/udp #Certificate Distribution Center +direct 242/tcp +direct 242/udp +sur-meas 243/tcp #Survey Measurement +sur-meas 243/udp #Survey Measurement +dayna 244/tcp +dayna 244/udp +link 245/tcp +link 245/udp +dsp3270 246/tcp #Display Systems Protocol +dsp3270 246/udp #Display Systems Protocol +subntbcst_tftp 247/tcp #subntbcst_tftp +subntbcst_tftp 247/udp #subntbcst_tftp +bhfhs 248/tcp +bhfhs 248/udp +# 249-255 reserved +rap 256/tcp +rap 256/udp +set 257/tcp #secure electronic transaction +set 257/udp #secure electronic transaction +yak-chat 258/tcp #yak winsock personal chat +yak-chat 258/udp #yak winsock personal chat +esro-gen 259/tcp #efficient short remote operations +esro-gen 259/udp #efficient short remote operations +openport 260/tcp +openport 260/udp +nsiiops 261/tcp #iiop name service over tls/ssl +nsiiops 261/udp #iiop name service over tls/ssl +arcisdms 262/tcp +arcisdms 262/udp +hdap 263/tcp +hdap 263/udp +bgmp 264/tcp +bgmp 264/udp +# 265-279 unassigned +http-mgmt 280/tcp +http-mgmt 280/udp +personal-link 281/tcp +personal-link 281/udp +cableport-ax 282/tcp #cable port a/x +cableport-ax 282/udp #cable port a/x +# 283-307 unassigned +novastorbakcup 308/tcp #novastor backup +novastorbakcup 308/udp #novastor backup +entrusttime 309/tcp +entrusttime 309/udp +bhmds 310/tcp +bhmds 310/udp +asip-webadmin 311/tcp #appleshare ip webadmin +asip-webadmin 311/udp #appleshare ip webadmin +vslmp 312/tcp +vslmp 312/udp +magenta-logic 313/tcp +magenta-logic 313/udp +opalis-robot 314/tcp +opalis-robot 314/udp +dpsi 315/tcp +dpsi 315/udp +decauth 316/tcp +decauth 316/udp +zannet 317/tcp +zannet 317/udp +# 318-320 #unassigned +pip 321/tcp +pip 321/udp +# 322-343 #unassigned +pdap 344/tcp #Prospero Data Access Protocol +pdap 344/udp #Prospero Data Access Protocol +pawserv 345/tcp #Perf Analysis Workbench +pawserv 345/udp #Perf Analysis Workbench +zserv 346/tcp #Zebra server +zserv 346/udp #Zebra server +fatserv 347/tcp #Fatmen Server +fatserv 347/udp #Fatmen Server +csi-sgwp 348/tcp #Cabletron Management Protocol +csi-sgwp 348/udp #Cabletron Management Protocol +mftp 349/tcp +mftp 349/udp +matip-type-a 350/tcp #MATIP Type A +matip-type-a 350/udp +matip-type-b 351/tcp #MATIP Type B +matip-type-b 351/udp +bhoetty 351/tcp #unassigned but widespread use +bhoetty 351/udp #unassigned but widespread use +dtag-ste-sb 352/tcp #DTAG +dtag-ste-sb 352/udp #DTAG +bhoedap4 352/tcp #unassigned but widespread use +bhoedap4 352/udp #unassigned but widespread use +ndsauth 353/tcp +ndsauth 353/udp +bh611 354/tcp +bh611 354/udp +datex-asn 355/tcp +datex-asn 355/udp +cloanto-net-1 356/tcp #Cloanto Net 1 +cloanto-net-1 356/udp +bhevent 357/tcp +bhevent 357/udp +shrinkwrap 358/tcp +shrinkwrap 358/udp +tenebris_nts 359/tcp #Tenebris Network Trace Service +tenebris_nts 359/udp #Tenebris Network Trace Service +scoi2odialog 360/tcp +scoi2odialog 360/udp +semantix 361/tcp +semantix 361/udp +srssend 362/tcp #SRS Send +srssend 362/udp #SRS Send +rsvp_tunnel 363/tcp +rsvp_tunnel 363/udp +aurora-cmgr 364/tcp +aurora-cmgr 364/udp +dtk 365/tcp #Deception Tool Kit - Fred Cohen +dtk 365/udp #Deception Tool Kit - Fred Cohen +odmr 366/tcp +odmr 366/udp +mortgageware 367/tcp +mortgageware 367/udp +qbikgdp 368/tcp #QbikGDP +qbikgdp 368/udp +rpc2portmap 369/tcp +rpc2portmap 369/udp +codaauth2 370/tcp +codaauth2 370/udp +clearcase 371/tcp +clearcase 371/udp +ulistserv 372/tcp ulistproc #Unix Listserv +ulistserv 372/udp ulistproc #Unix Listserv +legent-1 373/tcp #Legent Corporation (now Computer Associates Intl.) +legent-1 373/udp #Legent Corporation (now Computer Associates Intl.) +legent-2 374/tcp #Legent Corporation (now Computer Associates Intl.) +legent-2 374/udp #Legent Corporation (now Computer Associates Intl.) +hassle 375/tcp +hassle 375/udp +nip 376/tcp #Amiga Envoy Network Inquiry Proto +nip 376/udp #Amiga Envoy Network Inquiry Proto +tnETOS 377/tcp #NEC Corporation +tnETOS 377/udp #NEC Corporation +dsETOS 378/tcp #NEC Corporation +dsETOS 378/udp #NEC Corporation +is99c 379/tcp #TIA/EIA/IS-99 modem client +is99c 379/udp #TIA/EIA/IS-99 modem client +is99s 380/tcp #TIA/EIA/IS-99 modem server +is99s 380/udp #TIA/EIA/IS-99 modem server +hp-collector 381/tcp #hp performance data collector +hp-collector 381/udp #hp performance data collector +hp-managed-node 382/tcp #hp performance data managed node +hp-managed-node 382/udp #hp performance data managed node +hp-alarm-mgr 383/tcp #hp performance data alarm manager +hp-alarm-mgr 383/udp #hp performance data alarm manager +arns 384/tcp #A Remote Network Server System +arns 384/udp #A Remote Network Server System +ibm-app 385/tcp #IBM Application +ibm-app 385/udp #IBM Application +asa 386/tcp #ASA Message Router Object Def. +asa 386/udp #ASA Message Router Object Def. +aurp 387/tcp #Appletalk Update-Based Routing Pro. +aurp 387/udp #Appletalk Update-Based Routing Pro. +unidata-ldm 388/tcp #Unidata LDM Version 4 +unidata-ldm 388/udp #Unidata LDM Version 4 +ldap 389/tcp #Lightweight Directory Access Protocol +ldap 389/udp #Lightweight Directory Access Protocol +uis 390/tcp +uis 390/udp +synotics-relay 391/tcp #SynOptics SNMP Relay Port +synotics-relay 391/udp #SynOptics SNMP Relay Port +synotics-broker 392/tcp #SynOptics Port Broker Port +synotics-broker 392/udp #SynOptics Port Broker Port +dis 393/tcp #Data Interpretation System +dis 393/udp #Data Interpretation System +embl-ndt 394/tcp #EMBL Nucleic Data Transfer +embl-ndt 394/udp #EMBL Nucleic Data Transfer +netcp 395/tcp #NETscout Control Protocol +netcp 395/udp #NETscout Control Protocol +netware-ip 396/tcp #Novell Netware over IP +netware-ip 396/udp #Novell Netware over IP +mptn 397/tcp #Multi Protocol Trans. Net. +mptn 397/udp #Multi Protocol Trans. Net. +kryptolan 398/tcp +kryptolan 398/udp +iso-tsap-c2 399/tcp #ISO-TSAP Class 2 +iso-tsap-c2 399/udp #ISO-TSAP Class 2 +work-sol 400/tcp #Workstation Solutions +work-sol 400/udp #Workstation Solutions +ups 401/tcp #Uninterruptible Power Supply +ups 401/udp #Uninterruptible Power Supply +genie 402/tcp #Genie Protocol +genie 402/udp #Genie Protocol +decap 403/tcp +decap 403/udp +nced 404/tcp +nced 404/udp +ncld 405/tcp +ncld 405/udp +imsp 406/tcp #Interactive Mail Support Protocol +imsp 406/udp #Interactive Mail Support Protocol +timbuktu 407/tcp +timbuktu 407/udp +prm-sm 408/tcp #Prospero Resource Manager Sys. Man. +prm-sm 408/udp #Prospero Resource Manager Sys. Man. +prm-nm 409/tcp #Prospero Resource Manager Node Man. +prm-nm 409/udp #Prospero Resource Manager Node Man. +decladebug 410/tcp #DECLadebug Remote Debug Protocol +decladebug 410/udp #DECLadebug Remote Debug Protocol +rmt 411/tcp #Remote MT Protocol +rmt 411/udp #Remote MT Protocol +synoptics-trap 412/tcp #Trap Convention Port +synoptics-trap 412/udp #Trap Convention Port +smsp 413/tcp +smsp 413/udp +infoseek 414/tcp +infoseek 414/udp +bnet 415/tcp +bnet 415/udp +silverplatter 416/tcp +silverplatter 416/udp +onmux 417/tcp +onmux 417/udp +hyper-g 418/tcp +hyper-g 418/udp +ariel1 419/tcp +ariel1 419/udp +smpte 420/tcp +smpte 420/udp +ariel2 421/tcp +ariel2 421/udp +ariel3 422/tcp +ariel3 422/udp +opc-job-start 423/tcp #IBM Operations Planning and Control Start +opc-job-start 423/udp #IBM Operations Planning and Control Start +opc-job-track 424/tcp #IBM Operations Planning and Control Track +opc-job-track 424/udp #IBM Operations Planning and Control Track +icad-el 425/tcp +icad-el 425/udp +smartsdp 426/tcp +smartsdp 426/udp +svrloc 427/tcp #Server Location +svrloc 427/udp #Server Location +ocs_cmu 428/tcp +ocs_cmu 428/udp +ocs_amu 429/tcp +ocs_amu 429/udp +utmpsd 430/tcp +utmpsd 430/udp +utmpcd 431/tcp +utmpcd 431/udp +iasd 432/tcp +iasd 432/udp +nnsp 433/tcp +nnsp 433/udp +mobileip-agent 434/tcp +mobileip-agent 434/udp +mobilip-mn 435/tcp +mobilip-mn 435/udp +dna-cml 436/tcp +dna-cml 436/udp +comscm 437/tcp +comscm 437/udp +dsfgw 438/tcp +dsfgw 438/udp +dasp 439/tcp +dasp 439/udp +sgcp 440/tcp +sgcp 440/udp +decvms-sysmgt 441/tcp +decvms-sysmgt 441/udp +cvc_hostd 442/tcp +cvc_hostd 442/udp +https 443/tcp +https 443/udp +snpp 444/tcp #Simple Network Paging Protocol +snpp 444/udp #Simple Network Paging Protocol +# [RFC1568] +microsoft-ds 445/tcp +microsoft-ds 445/udp +ddm-rdb 446/tcp +ddm-rdb 446/udp +ddm-dfm 447/tcp +ddm-dfm 447/udp +ddm-ssl 448/tcp ddm-byte +ddm-ssl 448/udp ddm-byte +as-servermap 449/tcp #AS Server Mapper +as-servermap 449/udp #AS Server Mapper +tserver 450/tcp +tserver 450/udp +sfs-smp-net 451/tcp #Cray Network Semaphore server +sfs-smp-net 451/udp #Cray Network Semaphore server +sfs-config 452/tcp #Cray SFS config server +sfs-config 452/udp #Cray SFS config server +creativeserver 453/tcp #CreativeServer +creativeserver 453/udp #CreativeServer +contentserver 454/tcp #ContentServer +contentserver 454/udp #ContentServer +creativepartnr 455/tcp #CreativePartnr +creativepartnr 455/udp #CreativePartnr +macon-tcp 456/tcp +macon-udp 456/udp +scohelp 457/tcp +scohelp 457/udp +appleqtc 458/tcp #apple quick time +appleqtc 458/udp #apple quick time +ampr-rcmd 459/tcp +ampr-rcmd 459/udp +skronk 460/tcp +skronk 460/udp +datasurfsrv 461/tcp +datasurfsrv 461/udp +datasurfsrvsec 462/tcp +datasurfsrvsec 462/udp +alpes 463/tcp +alpes 463/udp +# +kpasswd5 464/tcp # Kerberos (v5) +kpasswd5 464/udp # Kerberos (v5) +#PROBLEMS!============================================================== +# IANA has offically assigned these two ports as ``kpasswd'' +#kpasswd 464/tcp # Kerberos (v5) +#kpasswd 464/udp # Kerberos (v5) +#PROBLEMS!============================================================== +smtps 465/tcp #smtp protocol over TLS/SSL (was ssmtp) +smtps 465/udp #smtp protocol over TLS/SSL (was ssmtp) +digital-vrc 466/tcp +digital-vrc 466/udp +mylex-mapd 467/tcp +mylex-mapd 467/udp +photuris 468/tcp +photuris 468/udp +rcp 469/tcp #Radio Control Protocol +rcp 469/udp #Radio Control Protocol +scx-proxy 470/tcp +scx-proxy 470/udp +mondex 471/tcp +mondex 471/udp +ljk-login 472/tcp +ljk-login 472/udp +hybrid-pop 473/tcp +hybrid-pop 473/udp +tn-tl-w1 474/tcp +tn-tl-w2 474/udp +tcpnethaspsrv 475/tcp +tcpnethaspsrv 475/udp +tn-tl-fd1 476/tcp +tn-tl-fd1 476/udp +ss7ns 477/tcp +ss7ns 477/udp +spsc 478/tcp +spsc 478/udp +iafserver 479/tcp +iafserver 479/udp +iafdbase 480/tcp +iafdbase 480/udp +ph 481/tcp +ph 481/udp +bgs-nsi 482/tcp +bgs-nsi 482/udp +ulpnet 483/tcp +ulpnet 483/udp +integra-sme 484/tcp #Integra Software Management Environment +integra-sme 484/udp #Integra Software Management Environment +powerburst 485/tcp #Air Soft Power Burst +powerburst 485/udp #Air Soft Power Burst +avian 486/tcp +avian 486/udp +saft 487/tcp #saft Simple Asynchronous File Transfer +saft 487/udp #saft Simple Asynchronous File Transfer +gss-http 488/tcp +gss-http 488/udp +nest-protocol 489/tcp +nest-protocol 489/udp +micom-pfs 490/tcp +micom-pfs 490/udp +go-login 491/tcp +go-login 491/udp +ticf-1 492/tcp #Transport Independent Convergence for FNA +ticf-1 492/udp #Transport Independent Convergence for FNA +ticf-2 493/tcp #Transport Independent Convergence for FNA +ticf-2 493/udp #Transport Independent Convergence for FNA +pov-ray 494/tcp +pov-ray 494/udp +intecourier 495/tcp +intecourier 495/udp +pim-rp-disc 496/tcp +pim-rp-disc 496/udp +dantz 497/tcp +dantz 497/udp +siam 498/tcp +siam 498/udp +iso-ill 499/tcp #ISO ILL Protocol +iso-ill 499/udp #ISO ILL Protocol +isakmp 500/tcp +isakmp 500/udp +stmf 501/tcp +stmf 501/udp +asa-appl-proto 502/tcp +asa-appl-proto 502/udp +intrinsa 503/tcp +intrinsa 503/udp +citadel 504/tcp +citadel 504/udp +mailbox-lm 505/tcp +mailbox-lm 505/udp +ohimsrv 506/tcp +ohimsrv 506/udp +crs 507/tcp +crs 507/udp +xvttp 508/tcp +xvttp 508/udp +snare 509/tcp +snare 509/udp +fcp 510/tcp #FirstClass Protocol +fcp 510/udp #FirstClass Protocol +passgo 511/tcp +passgo 511/udp +# +# Berkeley-specific services +# +exec 512/tcp #remote process execution; +# authentication performed using +# passwords and UNIX login names +biff 512/udp comsat #used by mail system to notify users +# of new mail received; currently +# receives messages only from +# processes on the same machine +login 513/tcp #remote login a la telnet; +# automatic authentication performed +# based on priviledged port numbers +# and distributed data bases which +# identify "authentication domains" +who 513/udp whod #maintains data bases showing who's +# logged in to machines on a local +# net and the load average of the +# machine +shell 514/tcp cmd #like exec, but automatic +# authentication is performed as for +# login server +syslog 514/udp +printer 515/tcp spooler +printer 515/udp spooler +videotex 516/tcp +videotex 516/udp +talk 517/tcp #like tenex link, but across +# machine - unfortunately, doesn't +# use link protocol (this is actually +# just a rendezvous port from which a +# tcp connection is established) +talk 517/udp #like tenex link, but across +# machine - unfortunately, doesn't +# use link protocol (this is actually +# just a rendezvous port from which a +# tcp connection is established) +ntalk 518/tcp +ntalk 518/udp +utime 519/tcp unixtime +utime 519/udp unixtime +efs 520/tcp #extended file name server +router 520/udp route routed #local routing process (on site); +# uses variant of Xerox NS routing +# information protocol +ripng 521/tcp +ripng 521/udp +ulp 522/tcp +ulp 522/udp +ibm-db2 523/tcp +ibm-db2 523/udp +ncp 524/tcp +ncp 524/udp +timed 525/tcp timeserver +timed 525/udp timeserver +tempo 526/tcp newdate +tempo 526/udp newdate +stx 527/tcp #Stock IXChange +stx 527/udp #Stock IXChange +custix 528/tcp #Customer IXChange +custix 528/udp #Customer IXChange +irc-serv 529/tcp +irc-serv 529/udp +courier 530/tcp rpc +courier 530/udp rpc +conference 531/tcp chat +conference 531/udp chat +netnews 532/tcp readnews +netnews 532/udp readnews +netwall 533/tcp #for emergency broadcasts +netwall 533/udp #for emergency broadcasts +mm-admin 534/tcp #MegaMedia Admin +mm-admin 534/udp #MegaMedia Admin +iiop 535/tcp +iiop 535/udp +opalis-rdv 536/tcp +opalis-rdv 536/udp +nmsp 537/tcp #Networked Media Streaming Protocol +nmsp 537/udp #Networked Media Streaming Protocol +gdomap 538/tcp +gdomap 538/udp +apertus-ldp 539/tcp #Apertus Technologies Load Determination +apertus-ldp 539/udp #Apertus Technologies Load Determination +uucp 540/tcp uucpd +uucp 540/udp uucpd +uucp-rlogin 541/tcp +uucp-rlogin 541/udp +commerce 542/tcp +commerce 542/udp +klogin 543/tcp # Kerberos (v4/v5) +klogin 543/udp # Kerberos (v4/v5) +kshell 544/tcp krcmd # Kerberos (v4/v5) +kshell 544/udp krcmd # Kerberos (v4/v5) +appleqtcsrvr 545/tcp +appleqtcsrvr 545/udp +dhcpv6-client 546/tcp #DHCPv6 Client +dhcpv6-client 546/udp #DHCPv6 Client +dhcpv6-server 547/tcp #DHCPv6 Server +dhcpv6-server 547/udp #DHCPv6 Server +afpovertcp 548/tcp #AFP over TCP +afpovertcp 548/udp #AFP over TCP +idfp 549/tcp +idfp 549/udp +new-rwho 550/tcp new-who +new-rwho 550/udp new-who +cybercash 551/tcp +cybercash 551/udp +deviceshare 552/tcp +deviceshare 552/udp +pirp 553/tcp +pirp 553/udp +rtsp 554/tcp #Real Time Stream Control Protocol +rtsp 554/udp #Real Time Stream Control Protocol +dsf 555/tcp +dsf 555/udp +remotefs 556/tcp rfs rfs_server # Brunhoff remote filesystem +remotefs 556/udp rfs rfs_server # Brunhoff remote filesystem +openvms-sysipc 557/tcp +openvms-sysipc 557/udp +sdnskmp 558/tcp +sdnskmp 558/udp +teedtap 559/tcp +teedtap 559/udp +rmonitor 560/tcp rmonitord +rmonitor 560/udp rmonitord +monitor 561/tcp +monitor 561/udp +chshell 562/tcp chcmd +chshell 562/udp chcmd +nntps 563/tcp snntp #nntp protocol over TLS/SSL +nntps 563/udp snntp #nntp protocol over TLS/SSL +9pfs 564/tcp #plan 9 file service +9pfs 564/udp #plan 9 file service +whoami 565/tcp +whoami 565/udp +streettalk 566/tcp +banyan-rpc 567/tcp +banyan-rpc 567/udp +ms-shuttle 568/tcp #Microsoft shuttle +ms-shuttle 568/udp #Microsoft shuttle +ms-rome 569/tcp #Microsoft rome +ms-rome 569/udp #Microsoft rome +meter 570/tcp #demon +meter 570/udp #demon +umeter 571/tcp #udemon +umeter 571/udp #udemon +sonar 572/tcp +sonar 572/udp +banyan-vip 573/tcp +banyan-vip 573/udp +ftp-agent 574/tcp #FTP Software Agent System +ftp-agent 574/udp #FTP Software Agent System +vemmi 575/tcp +vemmi 575/udp +ipcd 576/tcp +ipcd 576/udp +vnas 577/tcp +vnas 577/udp +ipdd 578/tcp +ipdd 578/udp +decbsrv 579/tcp +decbsrv 579/udp +sntp-heartbeat 580/tcp +sntp-heartbeat 580/udp +bdp 581/tcp #Bundle Discovery Protocol +bdp 581/udp #Bundle Discovery Protocol +scc-security 582/tcp +scc-security 582/udp +philips-vc 583/tcp #Philips Video-Conferencing +philips-vc 583/udp #Philips Video-Conferencing +keyserver 584/tcp +keyserver 584/udp +#imap4-ssl@585 never should have been allocated. See PR 46294. +#imap4-ssl 585/tcp #IMAP4+SSL (use of 585 is not recommended, +#imap4-ssl 585/udp # use 993 instead) +password-chg 586/tcp +password-chg 586/udp +submission 587/tcp +submission 587/udp +cal 588/tcp +cal 588/udp +eyelink 589/tcp +eyelink 589/udp +tns-cml 590/tcp +tns-cml 590/udp +http-alt 591/tcp #FileMaker, Inc. - HTTP Alternate (see Port 80) +http-alt 591/udp #FileMaker, Inc. - HTTP Alternate (see Port 80) +eudora-set 592/tcp +eudora-set 592/udp +http-rpc-epmap 593/tcp #HTTP RPC Ep Map +http-rpc-epmap 593/udp #HTTP RPC Ep Map +tpip 594/tcp +tpip 594/udp +cab-protocol 595/tcp +cab-protocol 595/udp +smsd 596/tcp +smsd 596/udp +ptcnameservice 597/tcp #PTC Name Service +ptcnameservice 597/udp #PTC Name Service +sco-websrvrmg3 598/tcp #SCO Web Server Manager 3 +sco-websrvrmg3 598/udp #SCO Web Server Manager 3 +acp 599/tcp #Aeolon Core Protocol +acp 599/udp #Aeolon Core Protocol +ipcserver 600/tcp #Sun IPC server +ipcserver 600/udp #Sun IPC server +nqs 607/tcp +nqs 607/udp +urm 606/tcp #Cray Unified Resource Manager +urm 606/udp #Cray Unified Resource Manager +sift-uft 608/tcp #Sender-Initiated/Unsolicited File Transfer +sift-uft 608/udp #Sender-Initiated/Unsolicited File Transfer +npmp-trap 609/tcp +npmp-trap 609/udp +npmp-local 610/tcp +npmp-local 610/udp +npmp-gui 611/tcp +npmp-gui 611/udp +sshell 614/tcp #SSLshell +sshell 614/udp +ipp 631/tcp #IPP (Internet Printing Protocol) +ipp 631/udp #IPP (Internet Printing Protocol) +ginad 634/tcp +ginad 634/udp +ldaps 636/tcp sldap #ldap protocol over TLS/SSL +ldaps 636/udp sldap +mdqs 666/tcp +mdqs 666/udp +#PROBLEMS!=============================================== +doom 666/tcp #doom Id Software +doom 666/udp #doom Id Software +#PROBLEMS!=============================================== +acap 674/tcp #Application Configuration Access Protocol +acap 674/udp #Application Configuration Access Protocol +elcsd 704/tcp #errlog copy/server daemon +elcsd 704/udp #errlog copy/server daemon +entrustmanager 709/tcp #EntrustManager +entrustmanager 709/udp #EntrustManager +netviewdm1 729/tcp #IBM NetView DM/6000 Server/Client +netviewdm1 729/udp #IBM NetView DM/6000 Server/Client +netviewdm2 730/tcp #IBM NetView DM/6000 send/tcp +netviewdm2 730/udp #IBM NetView DM/6000 send/tcp +netviewdm3 731/tcp #IBM NetView DM/6000 receive/tcp +netviewdm3 731/udp #IBM NetView DM/6000 receive/tcp +netgw 741/tcp +netgw 741/udp +netrcs 742/tcp #Network based Rev. Cont. Sys. +netrcs 742/udp #Network based Rev. Cont. Sys. +flexlm 744/tcp #Flexible License Manager +flexlm 744/udp #Flexible License Manager +fujitsu-dev 747/tcp #Fujitsu Device Control +fujitsu-dev 747/udp #Fujitsu Device Control +ris-cm 748/tcp #Russell Info Sci Calendar Manager +ris-cm 748/udp #Russell Info Sci Calendar Manager +kerberos-adm 749/tcp #Kerberos administration (v5) +kerberos-adm 749/udp #Kerberos administration (v5) +kerberos-iv 750/udp kdc # Kerberos (v4) +kerberos-iv 750/tcp kdc # Kerberos (v4) +#PROBLEMS!======================================================== +#rfile 750/tcp +#loadav 750/udp +#PROBLEMS!======================================================== +kerberos_master 751/tcp # Kerberos `kadmin' (v4) +kerberos_master 751/udp # Kerberos `kadmin' (v4) +#PROBLEMS!======================================================== +pump 751/tcp +pump 751/udp +#PROBLEMS!======================================================== +qrh 752/tcp +qrh 752/udp +rrh 753/tcp +rrh 753/udp +krb_prop 754/tcp krb5_prop # kerberos/v5 server propagation +#PROBLEMS!======================================================== +tell 754/tcp #send +#PROBLEMS!======================================================== +tell 754/udp #send +nlogin 758/tcp +nlogin 758/udp +con 759/tcp +con 759/udp +krbupdate 760/tcp kreg # Kerberos (v4) registration +#PROBLEMS!======================================================== +ns 760/tcp +#PROBLEMS!======================================================== +ns 760/udp +kpasswd 761/tcp kpwd # Kerberos (v4) "passwd" +#PROBLEMS!======================================================== +rxe 761/tcp +#PROBLEMS!======================================================== +rxe 761/udp +quotad 762/tcp +quotad 762/udp +cycleserv 763/tcp +cycleserv 763/udp +omserv 764/tcp +omserv 764/udp +webster 765/tcp +webster 765/udp +phonebook 767/tcp #phone +phonebook 767/udp #phone +vid 769/tcp +vid 769/udp +cadlock 770/tcp +cadlock 770/udp +rtip 771/tcp +rtip 771/udp +cycleserv2 772/tcp +cycleserv2 772/udp +submit 773/tcp +notify 773/udp +rpasswd 774/tcp +acmaint_dbd 774/udp +entomb 775/tcp +acmaint_transd 775/udp +wpages 776/tcp +wpages 776/udp +wpgs 780/tcp +wpgs 780/udp +concert 786/tcp +concert 786/udp +mdbs_daemon 800/tcp +mdbs_daemon 800/udp +device 801/tcp +device 801/udp +supfilesrv 871/tcp # for SUP +rsync 873/tcp +rsync 873/udp +accessbuilder 888/tcp +accessbuilder 888/udp +swat 901/tcp # samba web configuration tool +ftps-data 989/tcp # ftp protocol, data, over TLS/SSL +ftps-data 989/udp +ftps 990/tcp # ftp protocol, control, over TLS/SSL +ftps 990/udp +telnets 992/tcp # telnet protocol over TLS/SSL +telnets 992/udp +imaps 993/tcp # imap4 protocol over TLS/SSL +imaps 993/udp +ircs 994/tcp # irc protocol over TLS/SSL +ircs 994/udp +pop3s 995/tcp spop3 # pop3 protocol over TLS/SSL +pop3s 995/udp spop3 +vsinet 996/tcp +vsinet 996/udp +maitrd 997/tcp +maitrd 997/udp +busboy 998/tcp +puparp 998/udp +garcon 999/tcp +applix 999/udp #Applix ac +puprouter 999/tcp +puprouter 999/udp +cadlock 1000/tcp +ock 1000/udp +# +# REGISTERED PORT NUMBERS +# +blackjack 1025/tcp #network blackjack +blackjack 1025/udp #network blackjack +iad1 1030/tcp #BBN IAD +iad1 1030/udp #BBN IAD +iad2 1031/tcp #BBN IAD +iad2 1031/udp #BBN IAD +iad3 1032/tcp #BBN IAD +iad3 1032/udp #BBN IAD +nim 1058/tcp +nim 1058/udp +nimreg 1059/tcp +nimreg 1059/udp +instl_boots 1067/tcp #Installation Bootstrap Proto. Serv. +instl_boots 1067/udp #Installation Bootstrap Proto. Serv. +instl_bootc 1068/tcp #Installation Bootstrap Proto. Cli. +instl_bootc 1068/udp #Installation Bootstrap Proto. Cli. +socks 1080/tcp +socks 1080/udp +ansoft-lm-1 1083/tcp #Anasoft License Manager +ansoft-lm-1 1083/udp #Anasoft License Manager +ansoft-lm-2 1084/tcp #Anasoft License Manager +ansoft-lm-2 1084/udp #Anasoft License Manager +webobjects 1085/tcp #Web Objects +webobjects 1085/udp #Web Objects +kpop 1109/tcp #Unofficial +kpop 1109/udp #Unofficial +nfsd-status 1110/tcp #Cluster status info +nfsd-keepalive 1110/udp #Client status info +supfiledbg 1127/tcp # for SUP +nfa 1155/tcp #Network File Access +nfa 1155/udp #Network File Access +phone 1167/udp #conference calling +skkserv 1178/tcp #SKK (kanji input) +lupa 1212/tcp +lupa 1212/udp +nerv 1222/tcp #SNI R&D network +nerv 1222/udp #SNI R&D network +hermes 1248/tcp +hermes 1248/udp +healthd 1281/tcp #healthd +healthd 1281/udp #healthd +alta-ana-lm 1346/tcp #Alta Analytics License Manager +alta-ana-lm 1346/udp #Alta Analytics License Manager +bbn-mmc 1347/tcp #multi media conferencing +bbn-mmc 1347/udp #multi media conferencing +bbn-mmx 1348/tcp #multi media conferencing +bbn-mmx 1348/udp #multi media conferencing +sbook 1349/tcp #Registration Network Protocol +sbook 1349/udp #Registration Network Protocol +editbench 1350/tcp #Registration Network Protocol +editbench 1350/udp #Registration Network Protocol +equationbuilder 1351/tcp #Digital Tool Works (MIT) +equationbuilder 1351/udp #Digital Tool Works (MIT) +lotusnote 1352/tcp #Lotus Note +lotusnote 1352/udp #Lotus Note +relief 1353/tcp #Relief Consulting +relief 1353/udp #Relief Consulting +rightbrain 1354/tcp #RightBrain Software +rightbrain 1354/udp #RightBrain Software +intuitive-edge 1355/tcp #Intuitive Edge +intuitive-edge 1355/udp #Intuitive Edge +cuillamartin 1356/tcp #CuillaMartin Company +cuillamartin 1356/udp #CuillaMartin Company +pegboard 1357/tcp #Electronic PegBoard +pegboard 1357/udp #Electronic PegBoard +connlcli 1358/tcp +connlcli 1358/udp +ftsrv 1359/tcp +ftsrv 1359/udp +mimer 1360/tcp +mimer 1360/udp +linx 1361/tcp +linx 1361/udp +timeflies 1362/tcp +timeflies 1362/udp +ndm-requester 1363/tcp #Network DataMover Requester +ndm-requester 1363/udp #Network DataMover Requester +ndm-server 1364/tcp #Network DataMover Server +ndm-server 1364/udp #Network DataMover Server +adapt-sna 1365/tcp #Network Software Associates +adapt-sna 1365/udp #Network Software Associates +netware-csp 1366/tcp #Novell NetWare Comm Service Platform +netware-csp 1366/udp #Novell NetWare Comm Service Platform +dcs 1367/tcp +dcs 1367/udp +screencast 1368/tcp +screencast 1368/udp +gv-us 1369/tcp #GlobalView to Unix Shell +gv-us 1369/udp #GlobalView to Unix Shell +us-gv 1370/tcp #Unix Shell to GlobalView +us-gv 1370/udp #Unix Shell to GlobalView +fc-cli 1371/tcp #Fujitsu Config Protocol +fc-cli 1371/udp #Fujitsu Config Protocol +fc-ser 1372/tcp #Fujitsu Config Protocol +fc-ser 1372/udp #Fujitsu Config Protocol +chromagrafx 1373/tcp +chromagrafx 1373/udp +molly 1374/tcp #EPI Software Systems +molly 1374/udp #EPI Software Systems +bytex 1375/tcp +bytex 1375/udp +ibm-pps 1376/tcp #IBM Person to Person Software +ibm-pps 1376/udp #IBM Person to Person Software +cichlid 1377/tcp #Cichlid License Manager +cichlid 1377/udp #Cichlid License Manager +elan 1378/tcp #Elan License Manager +elan 1378/udp #Elan License Manager +dbreporter 1379/tcp #Integrity Solutions +dbreporter 1379/udp #Integrity Solutions +telesis-licman 1380/tcp #Telesis Network License Manager +telesis-licman 1380/udp #Telesis Network License Manager +apple-licman 1381/tcp #Apple Network License Manager +apple-licman 1381/udp #Apple Network License Manager +#udt_os 1382/tcp +#udt_os 1382/udp +gwha 1383/tcp #GW Hannaway Network License Manager +gwha 1383/udp #GW Hannaway Network License Manager +os-licman 1384/tcp #Objective Solutions License Manager +os-licman 1384/udp #Objective Solutions License Manager +atex_elmd 1385/tcp #Atex Publishing License Manager +atex_elmd 1385/udp #Atex Publishing License Manager +checksum 1386/tcp #CheckSum License Manager +checksum 1386/udp #CheckSum License Manager +cadsi-lm 1387/tcp #Computer Aided Design Software Inc LM +cadsi-lm 1387/udp #Computer Aided Design Software Inc LM +objective-dbc 1388/tcp #Objective Solutions DataBase Cache +objective-dbc 1388/udp #Objective Solutions DataBase Cache +iclpv-dm 1389/tcp #Document Manager +iclpv-dm 1389/udp #Document Manager +iclpv-sc 1390/tcp #Storage Controller +iclpv-sc 1390/udp #Storage Controller +iclpv-sas 1391/tcp #Storage Access Server +iclpv-sas 1391/udp #Storage Access Server +iclpv-pm 1392/tcp #Print Manager +iclpv-pm 1392/udp #Print Manager +iclpv-nls 1393/tcp #Network Log Server +iclpv-nls 1393/udp #Network Log Server +iclpv-nlc 1394/tcp #Network Log Client +iclpv-nlc 1394/udp #Network Log Client +iclpv-wsm 1395/tcp #PC Workstation Manager software +iclpv-wsm 1395/udp #PC Workstation Manager software +dvl-activemail 1396/tcp #DVL Active Mail +dvl-activemail 1396/udp #DVL Active Mail +audio-activmail 1397/tcp #Audio Active Mail +audio-activmail 1397/udp #Audio Active Mail +video-activmail 1398/tcp #Video Active Mail +video-activmail 1398/udp #Video Active Mail +cadkey-licman 1399/tcp #Cadkey License Manager +cadkey-licman 1399/udp #Cadkey License Manager +cadkey-tablet 1400/tcp #Cadkey Tablet Daemon +cadkey-tablet 1400/udp #Cadkey Tablet Daemon +goldleaf-licman 1401/tcp #Goldleaf License Manager +goldleaf-licman 1401/udp #Goldleaf License Manager +prm-sm-np 1402/tcp #Prospero Resource Manager +prm-sm-np 1402/udp #Prospero Resource Manager +prm-nm-np 1403/tcp #Prospero Resource Manager +prm-nm-np 1403/udp #Prospero Resource Manager +igi-lm 1404/tcp #Infinite Graphics License Manager +igi-lm 1404/udp #Infinite Graphics License Manager +ibm-res 1405/tcp #IBM Remote Execution Starter +ibm-res 1405/udp #IBM Remote Execution Starter +netlabs-lm 1406/tcp #NetLabs License Manager +netlabs-lm 1406/udp #NetLabs License Manager +dbsa-lm 1407/tcp #DBSA License Manager +dbsa-lm 1407/udp #DBSA License Manager +sophia-lm 1408/tcp #Sophia License Manager +sophia-lm 1408/udp #Sophia License Manager +here-lm 1409/tcp #Here License Manager +here-lm 1409/udp #Here License Manager +hiq 1410/tcp #HiQ License Manager +hiq 1410/udp #HiQ License Manager +af 1411/tcp #AudioFile +af 1411/udp #AudioFile +innosys 1412/tcp +innosys 1412/udp +innosys-acl 1413/tcp +innosys-acl 1413/udp +ibm-mqseries 1414/tcp #IBM MQSeries +ibm-mqseries 1414/udp #IBM MQSeries +dbstar 1415/tcp +dbstar 1415/udp +novell-lu6.2 1416/tcp #Novell LU6.2 +novell-lu6.2 1416/udp #Novell LU6.2 +timbuktu-srv1 1417/tcp #Timbuktu Service 1 Port +timbuktu-srv1 1417/udp #Timbuktu Service 1 Port +timbuktu-srv2 1418/tcp #Timbuktu Service 2 Port +timbuktu-srv2 1418/udp #Timbuktu Service 2 Port +timbuktu-srv3 1419/tcp #Timbuktu Service 3 Port +timbuktu-srv3 1419/udp #Timbuktu Service 3 Port +timbuktu-srv4 1420/tcp #Timbuktu Service 4 Port +timbuktu-srv4 1420/udp #Timbuktu Service 4 Port +gandalf-lm 1421/tcp #Gandalf License Manager +gandalf-lm 1421/udp #Gandalf License Manager +autodesk-lm 1422/tcp #Autodesk License Manager +autodesk-lm 1422/udp #Autodesk License Manager +essbase 1423/tcp #Essbase Arbor Software +essbase 1423/udp #Essbase Arbor Software +hybrid 1424/tcp #Hybrid Encryption Protocol +hybrid 1424/udp #Hybrid Encryption Protocol +zion-lm 1425/tcp #Zion Software License Manager +zion-lm 1425/udp #Zion Software License Manager +sas-1 1426/tcp #Satellite-data Acquisition System 1 +sas-1 1426/udp #Satellite-data Acquisition System 1 +mloadd 1427/tcp #mloadd monitoring tool +mloadd 1427/udp #mloadd monitoring tool +informatik-lm 1428/tcp #Informatik License Manager +informatik-lm 1428/udp #Informatik License Manager +nms 1429/tcp #Hypercom NMS +nms 1429/udp #Hypercom NMS +tpdu 1430/tcp #Hypercom TPDU +tpdu 1430/udp #Hypercom TPDU +rgtp 1431/tcp #Reverse Gossip Transport +rgtp 1431/udp #Reverse Gossip Transport +blueberry-lm 1432/tcp #Blueberry Software License Manager +blueberry-lm 1432/udp #Blueberry Software License Manager +ms-sql-s 1433/tcp #Microsoft-SQL-Server +ms-sql-s 1433/udp #Microsoft-SQL-Server +ms-sql-m 1434/tcp #Microsoft-SQL-Monitor +ms-sql-m 1434/udp #Microsoft-SQL-Monitor +ibm-cics 1435/tcp +ibm-cics 1435/udp +sas-2 1436/tcp #Satellite-data Acquisition System 2 +sas-2 1436/udp #Satellite-data Acquisition System 2 +tabula 1437/tcp +tabula 1437/udp +eicon-server 1438/tcp #Eicon Security Agent/Server +eicon-server 1438/udp #Eicon Security Agent/Server +eicon-x25 1439/tcp #Eicon X25/SNA Gateway +eicon-x25 1439/udp #Eicon X25/SNA Gateway +eicon-slp 1440/tcp #Eicon Service Location Protocol +eicon-slp 1440/udp #Eicon Service Location Protocol +cadis-1 1441/tcp #Cadis License Management +cadis-1 1441/udp #Cadis License Management +cadis-2 1442/tcp #Cadis License Management +cadis-2 1442/udp #Cadis License Management +ies-lm 1443/tcp #Integrated Engineering Software +ies-lm 1443/udp #Integrated Engineering Software +marcam-lm 1444/tcp #Marcam License Management +marcam-lm 1444/udp #Marcam License Management +proxima-lm 1445/tcp #Proxima License Manager +proxima-lm 1445/udp #Proxima License Manager +ora-lm 1446/tcp #Optical Research Associates License Manager +ora-lm 1446/udp #Optical Research Associates License Manager +apri-lm 1447/tcp #Applied Parallel Research LM +apri-lm 1447/udp #Applied Parallel Research LM +oc-lm 1448/tcp #OpenConnect License Manager +oc-lm 1448/udp #OpenConnect License Manager +peport 1449/tcp +peport 1449/udp +dwf 1450/tcp #Tandem Distributed Workbench Facility +dwf 1450/udp #Tandem Distributed Workbench Facility +infoman 1451/tcp #IBM Information Management +infoman 1451/udp #IBM Information Management +gtegsc-lm 1452/tcp #GTE Government Systems License Man +gtegsc-lm 1452/udp #GTE Government Systems License Man +genie-lm 1453/tcp #Genie License Manager +genie-lm 1453/udp #Genie License Manager +interhdl_elmd 1454/tcp #interHDL License Manager +interhdl_elmd 1454/udp #interHDL License Manager +esl-lm 1455/tcp #ESL License Manager +esl-lm 1455/udp #ESL License Manager +dca 1456/tcp +dca 1456/udp +valisys-lm 1457/tcp #Valisys License Manager +valisys-lm 1457/udp #Valisys License Manager +nrcabq-lm 1458/tcp #Nichols Research Corp. +nrcabq-lm 1458/udp #Nichols Research Corp. +proshare1 1459/tcp #Proshare Notebook Application +proshare1 1459/udp #Proshare Notebook Application +proshare2 1460/tcp #Proshare Notebook Application +proshare2 1460/udp #Proshare Notebook Application +ibm_wrless_lan 1461/tcp #IBM Wireless LAN +ibm_wrless_lan 1461/udp #IBM Wireless LAN +world-lm 1462/tcp #World License Manager +world-lm 1462/udp #World License Manager +nucleus 1463/tcp +nucleus 1463/udp +msl_lmd 1464/tcp #MSL License Manager +msl_lmd 1464/udp #MSL License Manager +pipes 1465/tcp #Pipes Platform +pipes 1465/udp #Pipes Platform mfarlin@peerlogic.com +oceansoft-lm 1466/tcp #Ocean Software License Manager +oceansoft-lm 1466/udp #Ocean Software License Manager +csdmbase 1467/tcp +csdmbase 1467/udp +csdm 1468/tcp +csdm 1468/udp +aal-lm 1469/tcp #Active Analysis Limited License Manager +aal-lm 1469/udp #Active Analysis Limited License Manager +uaiact 1470/tcp #Universal Analytics +uaiact 1470/udp #Universal Analytics +csdmbase 1471/tcp +csdmbase 1471/udp +csdm 1472/tcp +csdm 1472/udp +openmath 1473/tcp +openmath 1473/udp +telefinder 1474/tcp +telefinder 1474/udp +taligent-lm 1475/tcp #Taligent License Manager +taligent-lm 1475/udp #Taligent License Manager +clvm-cfg 1476/tcp +clvm-cfg 1476/udp +ms-sna-server 1477/tcp +ms-sna-server 1477/udp +ms-sna-base 1478/tcp +ms-sna-base 1478/udp +dberegister 1479/tcp +dberegister 1479/udp +pacerforum 1480/tcp +pacerforum 1480/udp +airs 1481/tcp +airs 1481/udp +miteksys-lm 1482/tcp #Miteksys License Manager +miteksys-lm 1482/udp #Miteksys License Manager +afs 1483/tcp #AFS License Manager +afs 1483/udp #AFS License Manager +confluent 1484/tcp #Confluent License Manager +confluent 1484/udp #Confluent License Manager +lansource 1485/tcp +lansource 1485/udp +nms_topo_serv 1486/tcp +nms_topo_serv 1486/udp +localinfosrvr 1487/tcp +localinfosrvr 1487/udp +docstor 1488/tcp +docstor 1488/udp +dmdocbroker 1489/tcp +dmdocbroker 1489/udp +insitu-conf 1490/tcp +insitu-conf 1490/udp +anynetgateway 1491/tcp +anynetgateway 1491/udp +stone-design-1 1492/tcp +stone-design-1 1492/udp +netmap_lm 1493/tcp +netmap_lm 1493/udp +ica 1494/tcp +ica 1494/udp +cvc 1495/tcp +cvc 1495/udp +liberty-lm 1496/tcp +liberty-lm 1496/udp +rfx-lm 1497/tcp +rfx-lm 1497/udp +watcom-sql 1498/tcp +watcom-sql 1498/udp +fhc 1499/tcp #Federico Heinz Consultora +fhc 1499/udp #Federico Heinz Consultora +vlsi-lm 1500/tcp #VLSI License Manager +vlsi-lm 1500/udp #VLSI License Manager +sas-3 1501/tcp #Satellite-data Acquisition System 3 +sas-3 1501/udp #Satellite-data Acquisition System 3 +shivadiscovery 1502/tcp #Shiva +shivadiscovery 1502/udp #Shiva +imtc-mcs 1503/tcp #Databeam +imtc-mcs 1503/udp #Databeam +evb-elm 1504/tcp #EVB Software Engineering License Manager +evb-elm 1504/udp #EVB Software Engineering License Manager +funkproxy 1505/tcp #Funk Software, Inc. +funkproxy 1505/udp #Funk Software, Inc. +utcd 1506/tcp #Universal Time daemon (utcd) +utcd 1506/udp #Universal Time daemon (utcd) +symplex 1507/tcp +symplex 1507/udp +diagmond 1508/tcp +diagmond 1508/udp +robcad-lm 1509/tcp #Robcad, Ltd. License Manager +robcad-lm 1509/udp #Robcad, Ltd. License Manager +mvx-lm 1510/tcp #Midland Valley Exploration Ltd. Lic. Man. +mvx-lm 1510/udp #Midland Valley Exploration Ltd. Lic. Man. +3l-l1 1511/tcp +3l-l1 1511/udp +wins 1512/tcp #Microsoft's Windows Internet Name Service +wins 1512/udp #Microsoft's Windows Internet Name Service +fujitsu-dtc 1513/tcp #Fujitsu Systems Business of America, Inc +fujitsu-dtc 1513/udp #Fujitsu Systems Business of America, Inc +fujitsu-dtcns 1514/tcp #Fujitsu Systems Business of America, Inc +fujitsu-dtcns 1514/udp #Fujitsu Systems Business of America, Inc +ifor-protocol 1515/tcp +ifor-protocol 1515/udp +vpad 1516/tcp #Virtual Places Audio data +vpad 1516/udp #Virtual Places Audio data +vpac 1517/tcp #Virtual Places Audio control +vpac 1517/udp #Virtual Places Audio control +vpvd 1518/tcp #Virtual Places Video data +vpvd 1518/udp #Virtual Places Video data +vpvc 1519/tcp #Virtual Places Video control +vpvc 1519/udp #Virtual Places Video control +atm-zip-office 1520/tcp #atm zip office +atm-zip-office 1520/udp #atm zip office +ncube-lm 1521/tcp #nCube License Manager +ncube-lm 1521/udp #nCube License Manager +rna-lm 1522/tcp #Ricardo North America License Manager +rna-lm 1522/udp #Ricardo North America License Manager +cichild-lm 1523/tcp +cichild-lm 1523/udp +ingreslock 1524/tcp #ingres +ingreslock 1524/udp #ingres +prospero-np 1525/tcp #Prospero Directory Service non-priv +prospero-np 1525/udp #Prospero Directory Service non-priv +#PROBLEMS!======================================================== +orasrv 1525/tcp #oracle +orasrv 1525/udp #oracle +#PROBLEMS!======================================================== +pdap-np 1526/tcp #Prospero Data Access Prot non-priv +pdap-np 1526/udp #Prospero Data Access Prot non-priv +tlisrv 1527/tcp #oracle +tlisrv 1527/udp #oracle +mciautoreg 1528/tcp +mciautoreg 1528/udp +support 1529/tcp prmsd gnatsd # cygnus bug tracker +coauthor 1529/tcp #oracle +coauthor 1529/udp #oracle +rap-service 1530/tcp +rap-service 1530/udp +rap-listen 1531/tcp +rap-listen 1531/udp +miroconnect 1532/tcp +miroconnect 1532/udp +virtual-places 1533/tcp #Virtual Places Software +virtual-places 1533/udp #Virtual Places Software +micromuse-lm 1534/tcp +micromuse-lm 1534/udp +ampr-info 1535/tcp +ampr-info 1535/udp +ampr-inter 1536/tcp +ampr-inter 1536/udp +sdsc-lm 1537/tcp +sdsc-lm 1537/udp +3ds-lm 1538/tcp +3ds-lm 1538/udp +intellistor-lm 1539/tcp #Intellistor License Manager +intellistor-lm 1539/udp #Intellistor License Manager +rds 1540/tcp +rds 1540/udp +rds2 1541/tcp +rds2 1541/udp +gridgen-elmd 1542/tcp +gridgen-elmd 1542/udp +simba-cs 1543/tcp +simba-cs 1543/udp +aspeclmd 1544/tcp +aspeclmd 1544/udp +vistium-share 1545/tcp +vistium-share 1545/udp +abbaccuray 1546/tcp +abbaccuray 1546/udp +laplink 1547/tcp +laplink 1547/udp +axon-lm 1548/tcp #Axon License Manager +axon-lm 1548/udp #Axon License Manager +shivahose 1549/tcp #Shiva Hose +shivasound 1549/udp #Shiva Sound +3m-image-lm 1550/tcp #Image Storage license manager 3M Company +3m-image-lm 1550/udp #Image Storage license manager 3M Company +hecmtl-db 1551/tcp +hecmtl-db 1551/udp +pciarray 1552/tcp +pciarray 1552/udp +issd 1600/tcp +issd 1600/udp +# IMPORTANT NOTE: Ports 1645/1646 are the traditional radius ports used by +# many vendors without obtaining official IANA assignment. The official +# assignment is now ports 1812/1813 and users are encouraged to migrate +# when possible to these new ports. +#radius 1645/udp #RADIUS authentication protocol (old) +#radacct 1646/udp #RADIUS accounting protocol (old) +nkd 1650/tcp +nkd 1650/udp +shiva_confsrvr 1651/tcp +shiva_confsrvr 1651/udp +xnmp 1652/tcp +xnmp 1652/udp +netview-aix-1 1661/tcp +netview-aix-1 1661/udp +netview-aix-2 1662/tcp +netview-aix-2 1662/udp +netview-aix-3 1663/tcp +netview-aix-3 1663/udp +netview-aix-4 1664/tcp +netview-aix-4 1664/udp +netview-aix-5 1665/tcp +netview-aix-5 1665/udp +netview-aix-6 1666/tcp +netview-aix-6 1666/udp +netview-aix-7 1667/tcp +netview-aix-7 1667/udp +netview-aix-8 1668/tcp +netview-aix-8 1668/udp +netview-aix-9 1669/tcp +netview-aix-9 1669/udp +netview-aix-10 1670/tcp +netview-aix-10 1670/udp +netview-aix-11 1671/tcp +netview-aix-11 1671/udp +netview-aix-12 1672/tcp +netview-aix-12 1672/udp +l2f 1701/tcp #l2f +l2f 1701/udp #l2f +l2tp 1701/tcp #Layer 2 Tunnelling Protocol +l2tp 1701/udp #Layer 2 Tunnelling Protocol +pptp 1723/tcp #Point-to-point tunnelling protocol +# IMPORTANT NOTE: See comments for ports 1645/1646 when using older equipment +radius 1812/udp #RADIUS authentication protocol (IANA sanctioned) +radacct 1813/udp #RADIUS accounting protocol (IANA sanctioned) +licensedaemon 1986/tcp #cisco license management +licensedaemon 1986/udp #cisco license management +tr-rsrb-p1 1987/tcp #cisco RSRB Priority 1 port +tr-rsrb-p1 1987/udp #cisco RSRB Priority 1 port +tr-rsrb-p2 1988/tcp #cisco RSRB Priority 2 port +tr-rsrb-p2 1988/udp #cisco RSRB Priority 2 port +tr-rsrb-p3 1989/tcp #cisco RSRB Priority 3 port +tr-rsrb-p3 1989/udp #cisco RSRB Priority 3 port +#PROBLEMS!=================================================== +mshnet 1989/tcp #MHSnet system +mshnet 1989/udp #MHSnet system +#PROBLEMS!=================================================== +stun-p1 1990/tcp #cisco STUN Priority 1 port +stun-p1 1990/udp #cisco STUN Priority 1 port +stun-p2 1991/tcp #cisco STUN Priority 2 port +stun-p2 1991/udp #cisco STUN Priority 2 port +stun-p3 1992/tcp #cisco STUN Priority 3 port +stun-p3 1992/udp #cisco STUN Priority 3 port +#PROBLEMS!=================================================== +ipsendmsg 1992/tcp +ipsendmsg 1992/udp +#PROBLEMS!=================================================== +snmp-tcp-port 1993/tcp #cisco SNMP TCP port +snmp-tcp-port 1993/udp #cisco SNMP TCP port +stun-port 1994/tcp #cisco serial tunnel port +stun-port 1994/udp #cisco serial tunnel port +perf-port 1995/tcp #cisco perf port +perf-port 1995/udp #cisco perf port +tr-rsrb-port 1996/tcp #cisco Remote SRB port +tr-rsrb-port 1996/udp #cisco Remote SRB port +gdp-port 1997/tcp #cisco Gateway Discovery Protocol +gdp-port 1997/udp #cisco Gateway Discovery Protocol +x25-svc-port 1998/tcp #cisco X.25 service (XOT) +x25-svc-port 1998/udp #cisco X.25 service (XOT) +tcp-id-port 1999/tcp #cisco identification port +tcp-id-port 1999/udp #cisco identification port +callbook 2000/tcp +callbook 2000/udp +dc 2001/tcp +wizard 2001/udp #curry +globe 2002/tcp +globe 2002/udp +cfingerd 2003/tcp #GNU finger +mailbox 2004/tcp +emce 2004/udp #CCWS mm conf +berknet 2005/tcp +oracle 2005/udp +invokator 2006/tcp +raid-cc 2006/udp #raid +dectalk 2007/tcp +raid-am 2007/udp +conf 2008/tcp +terminaldb 2008/udp +news 2009/tcp +whosockami 2009/udp +search 2010/tcp +pipe_server 2010/udp +raid-cc 2011/tcp #raid +servserv 2011/udp +ttyinfo 2012/tcp +raid-ac 2012/udp +raid-am 2013/tcp +raid-cd 2013/udp +troff 2014/tcp +raid-sf 2014/udp +cypress 2015/tcp +raid-cs 2015/udp +bootserver 2016/tcp +bootserver 2016/udp +cypress-stat 2017/tcp +bootclient 2017/udp +terminaldb 2018/tcp +rellpack 2018/udp +whosockami 2019/tcp +about 2019/udp +xinupageserver 2020/tcp +xinupageserver 2020/udp +servexec 2021/tcp +xinuexpansion1 2021/udp +down 2022/tcp +xinuexpansion2 2022/udp +xinuexpansion3 2023/tcp +xinuexpansion3 2023/udp +xinuexpansion4 2024/tcp +xinuexpansion4 2024/udp +ellpack 2025/tcp +xribs 2025/udp +scrabble 2026/tcp +scrabble 2026/udp +shadowserver 2027/tcp +shadowserver 2027/udp +submitserver 2028/tcp +submitserver 2028/udp +device2 2030/tcp +device2 2030/udp +blackboard 2032/tcp +blackboard 2032/udp +glogger 2033/tcp +glogger 2033/udp +scoremgr 2034/tcp +scoremgr 2034/udp +imsldoc 2035/tcp +imsldoc 2035/udp +objectmanager 2038/tcp +objectmanager 2038/udp +lam 2040/tcp +lam 2040/udp +interbase 2041/tcp +interbase 2041/udp +isis 2042/tcp +isis 2042/udp +isis-bcast 2043/tcp +isis-bcast 2043/udp +rimsl 2044/tcp +rimsl 2044/udp +cdfunc 2045/tcp +cdfunc 2045/udp +sdfunc 2046/tcp +sdfunc 2046/udp +#dls 2047/tcp +#dls 2047/udp +dls-monitor 2048/tcp +dls-monitor 2048/udp +nfsd 2049/tcp nfs # NFS server daemon +nfsd 2049/udp nfs # NFS server daemon +#PROBLEMS!============================================================= +#shilp 2049/tcp +#shilp 2049/udp +#PROBLEMS!============================================================= +dlsrpn 2065/tcp #Data Link Switch Read Port Number +dlsrpn 2065/udp #Data Link Switch Read Port Number +dlswpn 2067/tcp #Data Link Switch Write Port Number +dlswpn 2067/udp #Data Link Switch Write Port Number +zephyr-clt 2103/udp #Zephyr serv-hm connection +zephyr-hm 2104/udp #Zephyr hostmanager +#PROBLEMS!============================================================= +#zephyr-hm-srv 2105/udp #Zephyr hm-serv connection +#PROBLEMS!============================================================= +eklogin 2105/tcp #Kerberos (v4) encrypted rlogin +eklogin 2105/udp #Kerberos (v4) encrypted rlogin +ekshell 2106/tcp #Kerberos (v4) encrypted rshell +ekshell 2106/udp #Kerberos (v4) encrypted rshell +rkinit 2108/tcp #Kerberos (v4) remote initialization +rkinit 2108/udp #Kerberos (v4) remote initialization +ats 2201/tcp #Advanced Training System Program +ats 2201/udp #Advanced Training System Program +ivs-video 2232/tcp #IVS Video default +ivs-video 2232/udp #IVS Video default +ivsd 2241/tcp #IVS Daemon +ivsd 2241/udp #IVS Daemon +pehelp 2307/tcp +pehelp 2307/udp +cvspserver 2401/tcp #CVS network server +cvspserver 2401/udp #CVS network server +venus 2430/tcp #venus +venus 2430/udp #venus +venus-se 2431/tcp #venus-se +venus-se 2431/udp #venus-se +codasrv 2432/tcp #codasrv +codasrv 2432/udp #codasrv +codasrv-se 2433/tcp #codasrv-se +codasrv-se 2433/udp #codasrv-se +rtsserv 2500/tcp #Resource Tracking system server +rtsserv 2500/udp #Resource Tracking system server +rtsclient 2501/tcp #Resource Tracking system client +rtsclient 2501/udp #Resource Tracking system client +hp-3000-telnet 2564/tcp #HP 3000 NS/VT block mode telnet +zebrasrv 2600/tcp #zebra service +zebra 2601/tcp #zebra vty +ripd 2602/tcp #RIPd vty +ripngd 2603/tcp #RIPngd vty +ospfd 2604/tcp #OSPFd vty +bgpd 2605/tcp #BGPd vty +ospf6d 2606/tcp #OSPF6d vty +listen 2766/tcp #System V listener port +www-dev 2784/tcp #world wide web - development +www-dev 2784/udp #world wide web - development +dict 2628/tcp #RFC 2229 +dict 2628/udp #RFC 2229 +eppc 3031/tcp #Remote AppleEvents/PPC Toolbox +eppc 3031/udp #Remote AppleEvents/PPC Toolbox +NSWS 3049/tcp +NSWS 3049/udp +sj3 3086/tcp #SJ3 (kanji input) +vmodem 3141/tcp +vmodem 3141/udp +ccmail 3264/tcp #cc:mail/lotus +ccmail 3264/udp #cc:mail/lotus +dec-notes 3333/tcp #DEC Notes +dec-notes 3333/udp #DEC Notes +rsvp-encap 3455/udp #RSVP encapsulated in UDP +mapper-nodemgr 3984/tcp #MAPPER network node manager +mapper-nodemgr 3984/udp #MAPPER network node manager +mapper-mapethd 3985/tcp #MAPPER TCP/IP server +mapper-mapethd 3985/udp #MAPPER TCP/IP server +mapper-ws_ethd 3986/tcp #MAPPER workstation server +mapper-ws_ethd 3986/udp #MAPPER workstation server +bmap 3421/tcp #Bull Apprise portmapper +bmap 3421/udp #Bull Apprise portmapper +prsvp 3455/tcp #RSVP Port +prsvp 3455/udp #RSVP Port +vat 3456/tcp #VAT default data +vat 3456/udp #VAT default data +vat-control 3457/tcp #VAT default control +vat-control 3457/udp #VAT default control +udt_os 3900/tcp #Unidata UDT OS +udt_os 3900/udp #Unidata UDT OS +netcheque 4008/tcp #NetCheque accounting +netcheque 4008/udp #NetCheque accounting +lockd 4045/udp # NFS lock daemon/manager +lockd 4045/tcp +nuts_dem 4132/tcp #NUTS Daemon +nuts_dem 4132/udp #NUTS Daemon +nuts_bootp 4133/tcp #NUTS Bootp Server +nuts_bootp 4133/udp #NUTS Bootp Server +rwhois 4321/tcp #Remote Who Is +rwhois 4321/udp #Remote Who Is +unicall 4343/tcp +unicall 4343/udp +krb524 4444/tcp +krb524 4444/udp +# PROBLEM krb524 assigned the port, +# PROBLEM nv used it without an assignment +nv-video 4444/tcp #NV Video default +nv-video 4444/udp #NV Video default +sae-urn 4500/tcp +sae-urn 4500/udp +fax 4557/tcp #FAX transmission service +hylafax 4559/tcp #HylaFAX client-server protocol +rfa 4672/tcp #remote file access server +rfa 4672/udp #remote file access server +commplex-main 5000/tcp +commplex-main 5000/udp +commplex-link 5001/tcp +commplex-link 5001/udp +rfe 5002/tcp #radio free ethernet +rfe 5002/udp #radio free ethernet +telelpathstart 5010/tcp +telelpathstart 5010/udp +telelpathattack 5011/tcp +telelpathattack 5011/udp +mmcc 5050/tcp #multimedia conference control tool +mmcc 5050/udp #multimedia conference control tool +rmonitor_secure 5145/tcp +rmonitor_secure 5145/udp +aol 5190/tcp #America-Online +aol 5190/udp #America-Online +aol-1 5191/tcp #AmericaOnline1 +aol-1 5191/udp #AmericaOnline1 +aol-2 5192/tcp #AmericaOnline2 +aol-2 5192/udp #AmericaOnline2 +aol-3 5193/tcp #AmericaOnline3 +aol-3 5193/udp #AmericaOnline3 +jabber-client 5222/tcp #Jabber Client Connection +jabber-client 5222/udp #Jabber Client Connection +padl2sim 5236/tcp +padl2sim 5236/udp +jabber-server 5269/tcp #Jabber Server Connection +jabber-server 5269/udp #Jabber Server Connection +hacl-hb 5300/tcp # HA cluster heartbeat +hacl-hb 5300/udp # HA cluster heartbeat +hacl-gs 5301/tcp # HA cluster general services +hacl-gs 5301/udp # HA cluster general services +hacl-cfg 5302/tcp # HA cluster configuration +hacl-cfg 5302/udp # HA cluster configuration +hacl-probe 5303/tcp # HA cluster probing +hacl-probe 5303/udp # HA cluster probing +hacl-local 5304/tcp +hacl-local 5304/udp +hacl-test 5305/tcp +hacl-test 5305/udp +cfengine 5308/tcp +cfengine 5308/udp +postgresql 5432/tcp #PostgreSQL Database +postgresql 5432/udp #PostgreSQL Database +rplay 5555/udp +canna 5680/tcp #Canna (Japanese Input) +proshareaudio 5713/tcp #proshare conf audio +proshareaudio 5713/udp #proshare conf audio +prosharevideo 5714/tcp #proshare conf video +prosharevideo 5714/udp #proshare conf video +prosharedata 5715/tcp #proshare conf data +prosharedata 5715/udp #proshare conf data +prosharerequest 5716/tcp #proshare conf request +prosharerequest 5716/udp #proshare conf request +prosharenotify 5717/tcp #proshare conf notify +prosharenotify 5717/udp #proshare conf notify +cvsup 5999/tcp #CVSup file transfer/John Polstra/FreeBSD +x11 6000/tcp #6000-6063 are assigned to X Window System +x11 6000/udp +x11-ssh 6010/tcp #Unofficial name, for convenience +x11-ssh 6010/udp +softcm 6110/tcp #HP SoftBench CM +softcm 6110/udp #HP SoftBench CM +spc 6111/tcp #HP SoftBench Sub-Process Control +spc 6111/udp #HP SoftBench Sub-Process Control +meta-corp 6141/tcp #Meta Corporation License Manager +meta-corp 6141/udp #Meta Corporation License Manager +aspentec-lm 6142/tcp #Aspen Technology License Manager +aspentec-lm 6142/udp #Aspen Technology License Manager +watershed-lm 6143/tcp #Watershed License Manager +watershed-lm 6143/udp #Watershed License Manager +statsci1-lm 6144/tcp #StatSci License Manager - 1 +statsci1-lm 6144/udp #StatSci License Manager - 1 +statsci2-lm 6145/tcp #StatSci License Manager - 2 +statsci2-lm 6145/udp #StatSci License Manager - 2 +lonewolf-lm 6146/tcp #Lone Wolf Systems License Manager +lonewolf-lm 6146/udp #Lone Wolf Systems License Manager +montage-lm 6147/tcp #Montage License Manager +montage-lm 6147/udp #Montage License Manager +ricardo-lm 6148/tcp #Ricardo North America License Manager +ricardo-lm 6148/udp #Ricardo North America License Manager +xdsxdm 6558/tcp +xdsxdm 6558/udp +ircd 6667/tcp #Internet Relay Chat (unoffical) +acmsoda 6969/tcp +acmsoda 6969/udp +afs3-fileserver 7000/tcp #file server itself +afs3-fileserver 7000/udp #file server itself +afs3-callback 7001/tcp #callbacks to cache managers +afs3-callback 7001/udp #callbacks to cache managers +afs3-prserver 7002/tcp #users & groups database +afs3-prserver 7002/udp #users & groups database +afs3-vlserver 7003/tcp #volume location database +afs3-vlserver 7003/udp #volume location database +afs3-kaserver 7004/tcp #AFS/Kerberos authentication service +afs3-kaserver 7004/udp #AFS/Kerberos authentication service +afs3-volser 7005/tcp #volume management server +afs3-volser 7005/udp #volume management server +afs3-errors 7006/tcp #error interpretation service +afs3-errors 7006/udp #error interpretation service +afs3-bos 7007/tcp #basic overseer process +afs3-bos 7007/udp #basic overseer process +afs3-update 7008/tcp #server-to-server updater +afs3-update 7008/udp #server-to-server updater +afs3-rmtsys 7009/tcp #remote cache manager service +afs3-rmtsys 7009/udp #remote cache manager service +afs3-resserver 7010/tcp #MR-AFS residence server +afs3-resserver 7010/udp #MR-AFS residence server +afs3-remio 7011/tcp #MR-AFS remote IO server +afs3-remio 7011/udp #MR-AFS remote IO server +ups-onlinet 7010/tcp #onlinet uninterruptable power supplies +ups-onlinet 7010/udp #onlinet uninterruptable power supplies +font-service 7100/tcp #X Font Service +font-service 7100/udp #X Font Service +fodms 7200/tcp #FODMS FLIP +fodms 7200/udp #FODMS FLIP +dlip 7201/tcp +dlip 7201/udp +ftp-proxy 8021/tcp # pf ftp-proxy +spamd 8025/tcp # spamd(8) +spamd-sync 8025/udp # spamd(8) synchronisation +spamd-cfg 8026/tcp # spamd(8) configuration +natd 8668/divert # Network Address Translation +jetdirect 9100/tcp #HP JetDirect card +man 9535/tcp +man 9535/udp +sd 9876/tcp #Session Director +sd 9876/udp #Session Director +amanda 10080/udp #Dump server control +amandaidx 10082/tcp #Amanda indexing +amidxtape 10083/tcp #Amanda tape indexing +isode-dua 17007/tcp +isode-dua 17007/udp +biimenu 18000/tcp #Beckman Instruments, Inc. +biimenu 18000/udp #Beckman Instruments, Inc. +19000 19000/tcp # pfSense nat bouncing +19000 19000/udp # pfSense nat bouncing +19001 19001/tcp # pfSense nat bouncing +19001 19001/udp # pfSense nat bouncing +19002 19002/tcp # pfSense nat bouncing +19002 19002/udp # pfSense nat bouncing +19003 19003/tcp # pfSense nat bouncing +19003 19003/udp # pfSense nat bouncing +19004 19004/tcp # pfSense nat bouncing +19004 19004/udp # pfSense nat bouncing +19005 19005/tcp # pfSense nat bouncing +19005 19005/udp # pfSense nat bouncing +19006 19006/tcp # pfSense nat bouncing +19006 19006/udp # pfSense nat bouncing +19007 19007/tcp # pfSense nat bouncing +19007 19007/udp # pfSense nat bouncing +19008 19008/tcp # pfSense nat bouncing +19008 19008/udp # pfSense nat bouncing +19009 19009/tcp # pfSense nat bouncing +19009 19009/udp # pfSense nat bouncing +19010 19010/tcp # pfSense nat bouncing +19010 19010/udp # pfSense nat bouncing +19011 19011/tcp # pfSense nat bouncing +19011 19011/udp # pfSense nat bouncing +19012 19012/tcp # pfSense nat bouncing +19012 19012/udp # pfSense nat bouncing +19013 19013/tcp # pfSense nat bouncing +19013 19013/udp # pfSense nat bouncing +19014 19014/tcp # pfSense nat bouncing +19014 19014/udp # pfSense nat bouncing +19015 19015/tcp # pfSense nat bouncing +19015 19015/udp # pfSense nat bouncing +19016 19016/tcp # pfSense nat bouncing +19016 19016/udp # pfSense nat bouncing +19017 19017/tcp # pfSense nat bouncing +19017 19017/udp # pfSense nat bouncing +19018 19018/tcp # pfSense nat bouncing +19018 19018/udp # pfSense nat bouncing +19019 19019/tcp # pfSense nat bouncing +19019 19019/udp # pfSense nat bouncing +19020 19020/tcp # pfSense nat bouncing +19020 19020/udp # pfSense nat bouncing +19021 19021/tcp # pfSense nat bouncing +19021 19021/udp # pfSense nat bouncing +19022 19022/tcp # pfSense nat bouncing +19022 19022/udp # pfSense nat bouncing +19023 19023/tcp # pfSense nat bouncing +19023 19023/udp # pfSense nat bouncing +19024 19024/tcp # pfSense nat bouncing +19024 19024/udp # pfSense nat bouncing +19025 19025/tcp # pfSense nat bouncing +19025 19025/udp # pfSense nat bouncing +19026 19026/tcp # pfSense nat bouncing +19026 19026/udp # pfSense nat bouncing +19027 19027/tcp # pfSense nat bouncing +19027 19027/udp # pfSense nat bouncing +19028 19028/tcp # pfSense nat bouncing +19028 19028/udp # pfSense nat bouncing +19029 19029/tcp # pfSense nat bouncing +19029 19029/udp # pfSense nat bouncing +19030 19030/tcp # pfSense nat bouncing +19030 19030/udp # pfSense nat bouncing +19031 19031/tcp # pfSense nat bouncing +19031 19031/udp # pfSense nat bouncing +19032 19032/tcp # pfSense nat bouncing +19032 19032/udp # pfSense nat bouncing +19033 19033/tcp # pfSense nat bouncing +19033 19033/udp # pfSense nat bouncing +19034 19034/tcp # pfSense nat bouncing +19034 19034/udp # pfSense nat bouncing +19035 19035/tcp # pfSense nat bouncing +19035 19035/udp # pfSense nat bouncing +19036 19036/tcp # pfSense nat bouncing +19036 19036/udp # pfSense nat bouncing +19037 19037/tcp # pfSense nat bouncing +19037 19037/udp # pfSense nat bouncing +19038 19038/tcp # pfSense nat bouncing +19038 19038/udp # pfSense nat bouncing +19039 19039/tcp # pfSense nat bouncing +19039 19039/udp # pfSense nat bouncing +19040 19040/tcp # pfSense nat bouncing +19040 19040/udp # pfSense nat bouncing +19041 19041/tcp # pfSense nat bouncing +19041 19041/udp # pfSense nat bouncing +19042 19042/tcp # pfSense nat bouncing +19042 19042/udp # pfSense nat bouncing +19043 19043/tcp # pfSense nat bouncing +19043 19043/udp # pfSense nat bouncing +19044 19044/tcp # pfSense nat bouncing +19044 19044/udp # pfSense nat bouncing +19045 19045/tcp # pfSense nat bouncing +19045 19045/udp # pfSense nat bouncing +19046 19046/tcp # pfSense nat bouncing +19046 19046/udp # pfSense nat bouncing +19047 19047/tcp # pfSense nat bouncing +19047 19047/udp # pfSense nat bouncing +19048 19048/tcp # pfSense nat bouncing +19048 19048/udp # pfSense nat bouncing +19049 19049/tcp # pfSense nat bouncing +19049 19049/udp # pfSense nat bouncing +19050 19050/tcp # pfSense nat bouncing +19050 19050/udp # pfSense nat bouncing +19051 19051/tcp # pfSense nat bouncing +19051 19051/udp # pfSense nat bouncing +19052 19052/tcp # pfSense nat bouncing +19052 19052/udp # pfSense nat bouncing +19053 19053/tcp # pfSense nat bouncing +19053 19053/udp # pfSense nat bouncing +19054 19054/tcp # pfSense nat bouncing +19054 19054/udp # pfSense nat bouncing +19055 19055/tcp # pfSense nat bouncing +19055 19055/udp # pfSense nat bouncing +19056 19056/tcp # pfSense nat bouncing +19056 19056/udp # pfSense nat bouncing +19057 19057/tcp # pfSense nat bouncing +19057 19057/udp # pfSense nat bouncing +19058 19058/tcp # pfSense nat bouncing +19058 19058/udp # pfSense nat bouncing +19059 19059/tcp # pfSense nat bouncing +19059 19059/udp # pfSense nat bouncing +19060 19060/tcp # pfSense nat bouncing +19060 19060/udp # pfSense nat bouncing +19061 19061/tcp # pfSense nat bouncing +19061 19061/udp # pfSense nat bouncing +19062 19062/tcp # pfSense nat bouncing +19062 19062/udp # pfSense nat bouncing +19063 19063/tcp # pfSense nat bouncing +19063 19063/udp # pfSense nat bouncing +19064 19064/tcp # pfSense nat bouncing +19064 19064/udp # pfSense nat bouncing +19065 19065/tcp # pfSense nat bouncing +19065 19065/udp # pfSense nat bouncing +19066 19066/tcp # pfSense nat bouncing +19066 19066/udp # pfSense nat bouncing +19067 19067/tcp # pfSense nat bouncing +19067 19067/udp # pfSense nat bouncing +19068 19068/tcp # pfSense nat bouncing +19068 19068/udp # pfSense nat bouncing +19069 19069/tcp # pfSense nat bouncing +19069 19069/udp # pfSense nat bouncing +19070 19070/tcp # pfSense nat bouncing +19070 19070/udp # pfSense nat bouncing +19071 19071/tcp # pfSense nat bouncing +19071 19071/udp # pfSense nat bouncing +19072 19072/tcp # pfSense nat bouncing +19072 19072/udp # pfSense nat bouncing +19073 19073/tcp # pfSense nat bouncing +19073 19073/udp # pfSense nat bouncing +19074 19074/tcp # pfSense nat bouncing +19074 19074/udp # pfSense nat bouncing +19075 19075/tcp # pfSense nat bouncing +19075 19075/udp # pfSense nat bouncing +19076 19076/tcp # pfSense nat bouncing +19076 19076/udp # pfSense nat bouncing +19077 19077/tcp # pfSense nat bouncing +19077 19077/udp # pfSense nat bouncing +19078 19078/tcp # pfSense nat bouncing +19078 19078/udp # pfSense nat bouncing +19079 19079/tcp # pfSense nat bouncing +19079 19079/udp # pfSense nat bouncing +19080 19080/tcp # pfSense nat bouncing +19080 19080/udp # pfSense nat bouncing +19081 19081/tcp # pfSense nat bouncing +19081 19081/udp # pfSense nat bouncing +19082 19082/tcp # pfSense nat bouncing +19082 19082/udp # pfSense nat bouncing +19083 19083/tcp # pfSense nat bouncing +19083 19083/udp # pfSense nat bouncing +19084 19084/tcp # pfSense nat bouncing +19084 19084/udp # pfSense nat bouncing +19085 19085/tcp # pfSense nat bouncing +19085 19085/udp # pfSense nat bouncing +19086 19086/tcp # pfSense nat bouncing +19086 19086/udp # pfSense nat bouncing +19087 19087/tcp # pfSense nat bouncing +19087 19087/udp # pfSense nat bouncing +19088 19088/tcp # pfSense nat bouncing +19088 19088/udp # pfSense nat bouncing +19089 19089/tcp # pfSense nat bouncing +19089 19089/udp # pfSense nat bouncing +19090 19090/tcp # pfSense nat bouncing +19090 19090/udp # pfSense nat bouncing +19091 19091/tcp # pfSense nat bouncing +19091 19091/udp # pfSense nat bouncing +19092 19092/tcp # pfSense nat bouncing +19092 19092/udp # pfSense nat bouncing +19093 19093/tcp # pfSense nat bouncing +19093 19093/udp # pfSense nat bouncing +19094 19094/tcp # pfSense nat bouncing +19094 19094/udp # pfSense nat bouncing +19095 19095/tcp # pfSense nat bouncing +19095 19095/udp # pfSense nat bouncing +19096 19096/tcp # pfSense nat bouncing +19096 19096/udp # pfSense nat bouncing +19097 19097/tcp # pfSense nat bouncing +19097 19097/udp # pfSense nat bouncing +19098 19098/tcp # pfSense nat bouncing +19098 19098/udp # pfSense nat bouncing +19099 19099/tcp # pfSense nat bouncing +19099 19099/udp # pfSense nat bouncing +19100 19100/tcp # pfSense nat bouncing +19100 19100/udp # pfSense nat bouncing +19101 19101/tcp # pfSense nat bouncing +19101 19101/udp # pfSense nat bouncing +19102 19102/tcp # pfSense nat bouncing +19102 19102/udp # pfSense nat bouncing +19103 19103/tcp # pfSense nat bouncing +19103 19103/udp # pfSense nat bouncing +19104 19104/tcp # pfSense nat bouncing +19104 19104/udp # pfSense nat bouncing +19105 19105/tcp # pfSense nat bouncing +19105 19105/udp # pfSense nat bouncing +19106 19106/tcp # pfSense nat bouncing +19106 19106/udp # pfSense nat bouncing +19107 19107/tcp # pfSense nat bouncing +19107 19107/udp # pfSense nat bouncing +19108 19108/tcp # pfSense nat bouncing +19108 19108/udp # pfSense nat bouncing +19109 19109/tcp # pfSense nat bouncing +19109 19109/udp # pfSense nat bouncing +19110 19110/tcp # pfSense nat bouncing +19110 19110/udp # pfSense nat bouncing +19111 19111/tcp # pfSense nat bouncing +19111 19111/udp # pfSense nat bouncing +19112 19112/tcp # pfSense nat bouncing +19112 19112/udp # pfSense nat bouncing +19113 19113/tcp # pfSense nat bouncing +19113 19113/udp # pfSense nat bouncing +19114 19114/tcp # pfSense nat bouncing +19114 19114/udp # pfSense nat bouncing +19115 19115/tcp # pfSense nat bouncing +19115 19115/udp # pfSense nat bouncing +19116 19116/tcp # pfSense nat bouncing +19116 19116/udp # pfSense nat bouncing +19117 19117/tcp # pfSense nat bouncing +19117 19117/udp # pfSense nat bouncing +19118 19118/tcp # pfSense nat bouncing +19118 19118/udp # pfSense nat bouncing +19119 19119/tcp # pfSense nat bouncing +19119 19119/udp # pfSense nat bouncing +19120 19120/tcp # pfSense nat bouncing +19120 19120/udp # pfSense nat bouncing +19121 19121/tcp # pfSense nat bouncing +19121 19121/udp # pfSense nat bouncing +19122 19122/tcp # pfSense nat bouncing +19122 19122/udp # pfSense nat bouncing +19123 19123/tcp # pfSense nat bouncing +19123 19123/udp # pfSense nat bouncing +19124 19124/tcp # pfSense nat bouncing +19124 19124/udp # pfSense nat bouncing +19125 19125/tcp # pfSense nat bouncing +19125 19125/udp # pfSense nat bouncing +19126 19126/tcp # pfSense nat bouncing +19126 19126/udp # pfSense nat bouncing +19127 19127/tcp # pfSense nat bouncing +19127 19127/udp # pfSense nat bouncing +19128 19128/tcp # pfSense nat bouncing +19128 19128/udp # pfSense nat bouncing +19129 19129/tcp # pfSense nat bouncing +19129 19129/udp # pfSense nat bouncing +19130 19130/tcp # pfSense nat bouncing +19130 19130/udp # pfSense nat bouncing +19131 19131/tcp # pfSense nat bouncing +19131 19131/udp # pfSense nat bouncing +19132 19132/tcp # pfSense nat bouncing +19132 19132/udp # pfSense nat bouncing +19133 19133/tcp # pfSense nat bouncing +19133 19133/udp # pfSense nat bouncing +19134 19134/tcp # pfSense nat bouncing +19134 19134/udp # pfSense nat bouncing +19135 19135/tcp # pfSense nat bouncing +19135 19135/udp # pfSense nat bouncing +19136 19136/tcp # pfSense nat bouncing +19136 19136/udp # pfSense nat bouncing +19137 19137/tcp # pfSense nat bouncing +19137 19137/udp # pfSense nat bouncing +19138 19138/tcp # pfSense nat bouncing +19138 19138/udp # pfSense nat bouncing +19139 19139/tcp # pfSense nat bouncing +19139 19139/udp # pfSense nat bouncing +19140 19140/tcp # pfSense nat bouncing +19140 19140/udp # pfSense nat bouncing +19141 19141/tcp # pfSense nat bouncing +19141 19141/udp # pfSense nat bouncing +19142 19142/tcp # pfSense nat bouncing +19142 19142/udp # pfSense nat bouncing +19143 19143/tcp # pfSense nat bouncing +19143 19143/udp # pfSense nat bouncing +19144 19144/tcp # pfSense nat bouncing +19144 19144/udp # pfSense nat bouncing +19145 19145/tcp # pfSense nat bouncing +19145 19145/udp # pfSense nat bouncing +19146 19146/tcp # pfSense nat bouncing +19146 19146/udp # pfSense nat bouncing +19147 19147/tcp # pfSense nat bouncing +19147 19147/udp # pfSense nat bouncing +19148 19148/tcp # pfSense nat bouncing +19148 19148/udp # pfSense nat bouncing +19149 19149/tcp # pfSense nat bouncing +19149 19149/udp # pfSense nat bouncing +19150 19150/tcp # pfSense nat bouncing +19150 19150/udp # pfSense nat bouncing +19151 19151/tcp # pfSense nat bouncing +19151 19151/udp # pfSense nat bouncing +19152 19152/tcp # pfSense nat bouncing +19152 19152/udp # pfSense nat bouncing +19153 19153/tcp # pfSense nat bouncing +19153 19153/udp # pfSense nat bouncing +19154 19154/tcp # pfSense nat bouncing +19154 19154/udp # pfSense nat bouncing +19155 19155/tcp # pfSense nat bouncing +19155 19155/udp # pfSense nat bouncing +19156 19156/tcp # pfSense nat bouncing +19156 19156/udp # pfSense nat bouncing +19157 19157/tcp # pfSense nat bouncing +19157 19157/udp # pfSense nat bouncing +19158 19158/tcp # pfSense nat bouncing +19158 19158/udp # pfSense nat bouncing +19159 19159/tcp # pfSense nat bouncing +19159 19159/udp # pfSense nat bouncing +19160 19160/tcp # pfSense nat bouncing +19160 19160/udp # pfSense nat bouncing +19161 19161/tcp # pfSense nat bouncing +19161 19161/udp # pfSense nat bouncing +19162 19162/tcp # pfSense nat bouncing +19162 19162/udp # pfSense nat bouncing +19163 19163/tcp # pfSense nat bouncing +19163 19163/udp # pfSense nat bouncing +19164 19164/tcp # pfSense nat bouncing +19164 19164/udp # pfSense nat bouncing +19165 19165/tcp # pfSense nat bouncing +19165 19165/udp # pfSense nat bouncing +19166 19166/tcp # pfSense nat bouncing +19166 19166/udp # pfSense nat bouncing +19167 19167/tcp # pfSense nat bouncing +19167 19167/udp # pfSense nat bouncing +19168 19168/tcp # pfSense nat bouncing +19168 19168/udp # pfSense nat bouncing +19169 19169/tcp # pfSense nat bouncing +19169 19169/udp # pfSense nat bouncing +19170 19170/tcp # pfSense nat bouncing +19170 19170/udp # pfSense nat bouncing +19171 19171/tcp # pfSense nat bouncing +19171 19171/udp # pfSense nat bouncing +19172 19172/tcp # pfSense nat bouncing +19172 19172/udp # pfSense nat bouncing +19173 19173/tcp # pfSense nat bouncing +19173 19173/udp # pfSense nat bouncing +19174 19174/tcp # pfSense nat bouncing +19174 19174/udp # pfSense nat bouncing +19175 19175/tcp # pfSense nat bouncing +19175 19175/udp # pfSense nat bouncing +19176 19176/tcp # pfSense nat bouncing +19176 19176/udp # pfSense nat bouncing +19177 19177/tcp # pfSense nat bouncing +19177 19177/udp # pfSense nat bouncing +19178 19178/tcp # pfSense nat bouncing +19178 19178/udp # pfSense nat bouncing +19179 19179/tcp # pfSense nat bouncing +19179 19179/udp # pfSense nat bouncing +19180 19180/tcp # pfSense nat bouncing +19180 19180/udp # pfSense nat bouncing +19181 19181/tcp # pfSense nat bouncing +19181 19181/udp # pfSense nat bouncing +19182 19182/tcp # pfSense nat bouncing +19182 19182/udp # pfSense nat bouncing +19183 19183/tcp # pfSense nat bouncing +19183 19183/udp # pfSense nat bouncing +19184 19184/tcp # pfSense nat bouncing +19184 19184/udp # pfSense nat bouncing +19185 19185/tcp # pfSense nat bouncing +19185 19185/udp # pfSense nat bouncing +19186 19186/tcp # pfSense nat bouncing +19186 19186/udp # pfSense nat bouncing +19187 19187/tcp # pfSense nat bouncing +19187 19187/udp # pfSense nat bouncing +19188 19188/tcp # pfSense nat bouncing +19188 19188/udp # pfSense nat bouncing +19189 19189/tcp # pfSense nat bouncing +19189 19189/udp # pfSense nat bouncing +19190 19190/tcp # pfSense nat bouncing +19190 19190/udp # pfSense nat bouncing +19191 19191/tcp # pfSense nat bouncing +19191 19191/udp # pfSense nat bouncing +19192 19192/tcp # pfSense nat bouncing +19192 19192/udp # pfSense nat bouncing +19193 19193/tcp # pfSense nat bouncing +19193 19193/udp # pfSense nat bouncing +19194 19194/tcp # pfSense nat bouncing +19194 19194/udp # pfSense nat bouncing +19195 19195/tcp # pfSense nat bouncing +19195 19195/udp # pfSense nat bouncing +19196 19196/tcp # pfSense nat bouncing +19196 19196/udp # pfSense nat bouncing +19197 19197/tcp # pfSense nat bouncing +19197 19197/udp # pfSense nat bouncing +19198 19198/tcp # pfSense nat bouncing +19198 19198/udp # pfSense nat bouncing +19199 19199/tcp # pfSense nat bouncing +19199 19199/udp # pfSense nat bouncing +19200 19200/tcp # pfSense nat bouncing +19200 19200/udp # pfSense nat bouncing +19201 19201/tcp # pfSense nat bouncing +19201 19201/udp # pfSense nat bouncing +19202 19202/tcp # pfSense nat bouncing +19202 19202/udp # pfSense nat bouncing +19203 19203/tcp # pfSense nat bouncing +19203 19203/udp # pfSense nat bouncing +19204 19204/tcp # pfSense nat bouncing +19204 19204/udp # pfSense nat bouncing +19205 19205/tcp # pfSense nat bouncing +19205 19205/udp # pfSense nat bouncing +19206 19206/tcp # pfSense nat bouncing +19206 19206/udp # pfSense nat bouncing +19207 19207/tcp # pfSense nat bouncing +19207 19207/udp # pfSense nat bouncing +19208 19208/tcp # pfSense nat bouncing +19208 19208/udp # pfSense nat bouncing +19209 19209/tcp # pfSense nat bouncing +19209 19209/udp # pfSense nat bouncing +19210 19210/tcp # pfSense nat bouncing +19210 19210/udp # pfSense nat bouncing +19211 19211/tcp # pfSense nat bouncing +19211 19211/udp # pfSense nat bouncing +19212 19212/tcp # pfSense nat bouncing +19212 19212/udp # pfSense nat bouncing +19213 19213/tcp # pfSense nat bouncing +19213 19213/udp # pfSense nat bouncing +19214 19214/tcp # pfSense nat bouncing +19214 19214/udp # pfSense nat bouncing +19215 19215/tcp # pfSense nat bouncing +19215 19215/udp # pfSense nat bouncing +19216 19216/tcp # pfSense nat bouncing +19216 19216/udp # pfSense nat bouncing +19217 19217/tcp # pfSense nat bouncing +19217 19217/udp # pfSense nat bouncing +19218 19218/tcp # pfSense nat bouncing +19218 19218/udp # pfSense nat bouncing +19219 19219/tcp # pfSense nat bouncing +19219 19219/udp # pfSense nat bouncing +19220 19220/tcp # pfSense nat bouncing +19220 19220/udp # pfSense nat bouncing +19221 19221/tcp # pfSense nat bouncing +19221 19221/udp # pfSense nat bouncing +19222 19222/tcp # pfSense nat bouncing +19222 19222/udp # pfSense nat bouncing +19223 19223/tcp # pfSense nat bouncing +19223 19223/udp # pfSense nat bouncing +19224 19224/tcp # pfSense nat bouncing +19224 19224/udp # pfSense nat bouncing +19225 19225/tcp # pfSense nat bouncing +19225 19225/udp # pfSense nat bouncing +19226 19226/tcp # pfSense nat bouncing +19226 19226/udp # pfSense nat bouncing +19227 19227/tcp # pfSense nat bouncing +19227 19227/udp # pfSense nat bouncing +19228 19228/tcp # pfSense nat bouncing +19228 19228/udp # pfSense nat bouncing +19229 19229/tcp # pfSense nat bouncing +19229 19229/udp # pfSense nat bouncing +19230 19230/tcp # pfSense nat bouncing +19230 19230/udp # pfSense nat bouncing +19231 19231/tcp # pfSense nat bouncing +19231 19231/udp # pfSense nat bouncing +19232 19232/tcp # pfSense nat bouncing +19232 19232/udp # pfSense nat bouncing +19233 19233/tcp # pfSense nat bouncing +19233 19233/udp # pfSense nat bouncing +19234 19234/tcp # pfSense nat bouncing +19234 19234/udp # pfSense nat bouncing +19235 19235/tcp # pfSense nat bouncing +19235 19235/udp # pfSense nat bouncing +19236 19236/tcp # pfSense nat bouncing +19236 19236/udp # pfSense nat bouncing +19237 19237/tcp # pfSense nat bouncing +19237 19237/udp # pfSense nat bouncing +19238 19238/tcp # pfSense nat bouncing +19238 19238/udp # pfSense nat bouncing +19239 19239/tcp # pfSense nat bouncing +19239 19239/udp # pfSense nat bouncing +19240 19240/tcp # pfSense nat bouncing +19240 19240/udp # pfSense nat bouncing +19241 19241/tcp # pfSense nat bouncing +19241 19241/udp # pfSense nat bouncing +19242 19242/tcp # pfSense nat bouncing +19242 19242/udp # pfSense nat bouncing +19243 19243/tcp # pfSense nat bouncing +19243 19243/udp # pfSense nat bouncing +19244 19244/tcp # pfSense nat bouncing +19244 19244/udp # pfSense nat bouncing +19245 19245/tcp # pfSense nat bouncing +19245 19245/udp # pfSense nat bouncing +19246 19246/tcp # pfSense nat bouncing +19246 19246/udp # pfSense nat bouncing +19247 19247/tcp # pfSense nat bouncing +19247 19247/udp # pfSense nat bouncing +19248 19248/tcp # pfSense nat bouncing +19248 19248/udp # pfSense nat bouncing +19249 19249/tcp # pfSense nat bouncing +19249 19249/udp # pfSense nat bouncing +19250 19250/tcp # pfSense nat bouncing +19250 19250/udp # pfSense nat bouncing +19251 19251/tcp # pfSense nat bouncing +19251 19251/udp # pfSense nat bouncing +19252 19252/tcp # pfSense nat bouncing +19252 19252/udp # pfSense nat bouncing +19253 19253/tcp # pfSense nat bouncing +19253 19253/udp # pfSense nat bouncing +19254 19254/tcp # pfSense nat bouncing +19254 19254/udp # pfSense nat bouncing +19255 19255/tcp # pfSense nat bouncing +19255 19255/udp # pfSense nat bouncing +19256 19256/tcp # pfSense nat bouncing +19256 19256/udp # pfSense nat bouncing +19257 19257/tcp # pfSense nat bouncing +19257 19257/udp # pfSense nat bouncing +19258 19258/tcp # pfSense nat bouncing +19258 19258/udp # pfSense nat bouncing +19259 19259/tcp # pfSense nat bouncing +19259 19259/udp # pfSense nat bouncing +19260 19260/tcp # pfSense nat bouncing +19260 19260/udp # pfSense nat bouncing +19261 19261/tcp # pfSense nat bouncing +19261 19261/udp # pfSense nat bouncing +19262 19262/tcp # pfSense nat bouncing +19262 19262/udp # pfSense nat bouncing +19263 19263/tcp # pfSense nat bouncing +19263 19263/udp # pfSense nat bouncing +19264 19264/tcp # pfSense nat bouncing +19264 19264/udp # pfSense nat bouncing +19265 19265/tcp # pfSense nat bouncing +19265 19265/udp # pfSense nat bouncing +19266 19266/tcp # pfSense nat bouncing +19266 19266/udp # pfSense nat bouncing +19267 19267/tcp # pfSense nat bouncing +19267 19267/udp # pfSense nat bouncing +19268 19268/tcp # pfSense nat bouncing +19268 19268/udp # pfSense nat bouncing +19269 19269/tcp # pfSense nat bouncing +19269 19269/udp # pfSense nat bouncing +19270 19270/tcp # pfSense nat bouncing +19270 19270/udp # pfSense nat bouncing +19271 19271/tcp # pfSense nat bouncing +19271 19271/udp # pfSense nat bouncing +19272 19272/tcp # pfSense nat bouncing +19272 19272/udp # pfSense nat bouncing +19273 19273/tcp # pfSense nat bouncing +19273 19273/udp # pfSense nat bouncing +19274 19274/tcp # pfSense nat bouncing +19274 19274/udp # pfSense nat bouncing +19275 19275/tcp # pfSense nat bouncing +19275 19275/udp # pfSense nat bouncing +19276 19276/tcp # pfSense nat bouncing +19276 19276/udp # pfSense nat bouncing +19277 19277/tcp # pfSense nat bouncing +19277 19277/udp # pfSense nat bouncing +19278 19278/tcp # pfSense nat bouncing +19278 19278/udp # pfSense nat bouncing +19279 19279/tcp # pfSense nat bouncing +19279 19279/udp # pfSense nat bouncing +19280 19280/tcp # pfSense nat bouncing +19280 19280/udp # pfSense nat bouncing +19281 19281/tcp # pfSense nat bouncing +19281 19281/udp # pfSense nat bouncing +19282 19282/tcp # pfSense nat bouncing +19282 19282/udp # pfSense nat bouncing +19283 19283/tcp # pfSense nat bouncing +19283 19283/udp # pfSense nat bouncing +19284 19284/tcp # pfSense nat bouncing +19284 19284/udp # pfSense nat bouncing +19285 19285/tcp # pfSense nat bouncing +19285 19285/udp # pfSense nat bouncing +19286 19286/tcp # pfSense nat bouncing +19286 19286/udp # pfSense nat bouncing +19287 19287/tcp # pfSense nat bouncing +19287 19287/udp # pfSense nat bouncing +19288 19288/tcp # pfSense nat bouncing +19288 19288/udp # pfSense nat bouncing +19289 19289/tcp # pfSense nat bouncing +19289 19289/udp # pfSense nat bouncing +19290 19290/tcp # pfSense nat bouncing +19290 19290/udp # pfSense nat bouncing +19291 19291/tcp # pfSense nat bouncing +19291 19291/udp # pfSense nat bouncing +19292 19292/tcp # pfSense nat bouncing +19292 19292/udp # pfSense nat bouncing +19293 19293/tcp # pfSense nat bouncing +19293 19293/udp # pfSense nat bouncing +19294 19294/tcp # pfSense nat bouncing +19294 19294/udp # pfSense nat bouncing +19295 19295/tcp # pfSense nat bouncing +19295 19295/udp # pfSense nat bouncing +19296 19296/tcp # pfSense nat bouncing +19296 19296/udp # pfSense nat bouncing +19297 19297/tcp # pfSense nat bouncing +19297 19297/udp # pfSense nat bouncing +19298 19298/tcp # pfSense nat bouncing +19298 19298/udp # pfSense nat bouncing +19299 19299/tcp # pfSense nat bouncing +19299 19299/udp # pfSense nat bouncing +19300 19300/tcp # pfSense nat bouncing +19300 19300/udp # pfSense nat bouncing +19301 19301/tcp # pfSense nat bouncing +19301 19301/udp # pfSense nat bouncing +19302 19302/tcp # pfSense nat bouncing +19302 19302/udp # pfSense nat bouncing +19303 19303/tcp # pfSense nat bouncing +19303 19303/udp # pfSense nat bouncing +19304 19304/tcp # pfSense nat bouncing +19304 19304/udp # pfSense nat bouncing +19305 19305/tcp # pfSense nat bouncing +19305 19305/udp # pfSense nat bouncing +19306 19306/tcp # pfSense nat bouncing +19306 19306/udp # pfSense nat bouncing +19307 19307/tcp # pfSense nat bouncing +19307 19307/udp # pfSense nat bouncing +19308 19308/tcp # pfSense nat bouncing +19308 19308/udp # pfSense nat bouncing +19309 19309/tcp # pfSense nat bouncing +19309 19309/udp # pfSense nat bouncing +19310 19310/tcp # pfSense nat bouncing +19310 19310/udp # pfSense nat bouncing +19311 19311/tcp # pfSense nat bouncing +19311 19311/udp # pfSense nat bouncing +19312 19312/tcp # pfSense nat bouncing +19312 19312/udp # pfSense nat bouncing +19313 19313/tcp # pfSense nat bouncing +19313 19313/udp # pfSense nat bouncing +19314 19314/tcp # pfSense nat bouncing +19314 19314/udp # pfSense nat bouncing +19315 19315/tcp # pfSense nat bouncing +19315 19315/udp # pfSense nat bouncing +19316 19316/tcp # pfSense nat bouncing +19316 19316/udp # pfSense nat bouncing +19317 19317/tcp # pfSense nat bouncing +19317 19317/udp # pfSense nat bouncing +19318 19318/tcp # pfSense nat bouncing +19318 19318/udp # pfSense nat bouncing +19319 19319/tcp # pfSense nat bouncing +19319 19319/udp # pfSense nat bouncing +19320 19320/tcp # pfSense nat bouncing +19320 19320/udp # pfSense nat bouncing +19321 19321/tcp # pfSense nat bouncing +19321 19321/udp # pfSense nat bouncing +19322 19322/tcp # pfSense nat bouncing +19322 19322/udp # pfSense nat bouncing +19323 19323/tcp # pfSense nat bouncing +19323 19323/udp # pfSense nat bouncing +19324 19324/tcp # pfSense nat bouncing +19324 19324/udp # pfSense nat bouncing +19325 19325/tcp # pfSense nat bouncing +19325 19325/udp # pfSense nat bouncing +19326 19326/tcp # pfSense nat bouncing +19326 19326/udp # pfSense nat bouncing +19327 19327/tcp # pfSense nat bouncing +19327 19327/udp # pfSense nat bouncing +19328 19328/tcp # pfSense nat bouncing +19328 19328/udp # pfSense nat bouncing +19329 19329/tcp # pfSense nat bouncing +19329 19329/udp # pfSense nat bouncing +19330 19330/tcp # pfSense nat bouncing +19330 19330/udp # pfSense nat bouncing +19331 19331/tcp # pfSense nat bouncing +19331 19331/udp # pfSense nat bouncing +19332 19332/tcp # pfSense nat bouncing +19332 19332/udp # pfSense nat bouncing +19333 19333/tcp # pfSense nat bouncing +19333 19333/udp # pfSense nat bouncing +19334 19334/tcp # pfSense nat bouncing +19334 19334/udp # pfSense nat bouncing +19335 19335/tcp # pfSense nat bouncing +19335 19335/udp # pfSense nat bouncing +19336 19336/tcp # pfSense nat bouncing +19336 19336/udp # pfSense nat bouncing +19337 19337/tcp # pfSense nat bouncing +19337 19337/udp # pfSense nat bouncing +19338 19338/tcp # pfSense nat bouncing +19338 19338/udp # pfSense nat bouncing +19339 19339/tcp # pfSense nat bouncing +19339 19339/udp # pfSense nat bouncing +19340 19340/tcp # pfSense nat bouncing +19340 19340/udp # pfSense nat bouncing +19341 19341/tcp # pfSense nat bouncing +19341 19341/udp # pfSense nat bouncing +19342 19342/tcp # pfSense nat bouncing +19342 19342/udp # pfSense nat bouncing +19343 19343/tcp # pfSense nat bouncing +19343 19343/udp # pfSense nat bouncing +19344 19344/tcp # pfSense nat bouncing +19344 19344/udp # pfSense nat bouncing +19345 19345/tcp # pfSense nat bouncing +19345 19345/udp # pfSense nat bouncing +19346 19346/tcp # pfSense nat bouncing +19346 19346/udp # pfSense nat bouncing +19347 19347/tcp # pfSense nat bouncing +19347 19347/udp # pfSense nat bouncing +19348 19348/tcp # pfSense nat bouncing +19348 19348/udp # pfSense nat bouncing +19349 19349/tcp # pfSense nat bouncing +19349 19349/udp # pfSense nat bouncing +19350 19350/tcp # pfSense nat bouncing +19350 19350/udp # pfSense nat bouncing +19351 19351/tcp # pfSense nat bouncing +19351 19351/udp # pfSense nat bouncing +19352 19352/tcp # pfSense nat bouncing +19352 19352/udp # pfSense nat bouncing +19353 19353/tcp # pfSense nat bouncing +19353 19353/udp # pfSense nat bouncing +19354 19354/tcp # pfSense nat bouncing +19354 19354/udp # pfSense nat bouncing +19355 19355/tcp # pfSense nat bouncing +19355 19355/udp # pfSense nat bouncing +19356 19356/tcp # pfSense nat bouncing +19356 19356/udp # pfSense nat bouncing +19357 19357/tcp # pfSense nat bouncing +19357 19357/udp # pfSense nat bouncing +19358 19358/tcp # pfSense nat bouncing +19358 19358/udp # pfSense nat bouncing +19359 19359/tcp # pfSense nat bouncing +19359 19359/udp # pfSense nat bouncing +19360 19360/tcp # pfSense nat bouncing +19360 19360/udp # pfSense nat bouncing +19361 19361/tcp # pfSense nat bouncing +19361 19361/udp # pfSense nat bouncing +19362 19362/tcp # pfSense nat bouncing +19362 19362/udp # pfSense nat bouncing +19363 19363/tcp # pfSense nat bouncing +19363 19363/udp # pfSense nat bouncing +19364 19364/tcp # pfSense nat bouncing +19364 19364/udp # pfSense nat bouncing +19365 19365/tcp # pfSense nat bouncing +19365 19365/udp # pfSense nat bouncing +19366 19366/tcp # pfSense nat bouncing +19366 19366/udp # pfSense nat bouncing +19367 19367/tcp # pfSense nat bouncing +19367 19367/udp # pfSense nat bouncing +19368 19368/tcp # pfSense nat bouncing +19368 19368/udp # pfSense nat bouncing +19369 19369/tcp # pfSense nat bouncing +19369 19369/udp # pfSense nat bouncing +19370 19370/tcp # pfSense nat bouncing +19370 19370/udp # pfSense nat bouncing +19371 19371/tcp # pfSense nat bouncing +19371 19371/udp # pfSense nat bouncing +19372 19372/tcp # pfSense nat bouncing +19372 19372/udp # pfSense nat bouncing +19373 19373/tcp # pfSense nat bouncing +19373 19373/udp # pfSense nat bouncing +19374 19374/tcp # pfSense nat bouncing +19374 19374/udp # pfSense nat bouncing +19375 19375/tcp # pfSense nat bouncing +19375 19375/udp # pfSense nat bouncing +19376 19376/tcp # pfSense nat bouncing +19376 19376/udp # pfSense nat bouncing +19377 19377/tcp # pfSense nat bouncing +19377 19377/udp # pfSense nat bouncing +19378 19378/tcp # pfSense nat bouncing +19378 19378/udp # pfSense nat bouncing +19379 19379/tcp # pfSense nat bouncing +19379 19379/udp # pfSense nat bouncing +19380 19380/tcp # pfSense nat bouncing +19380 19380/udp # pfSense nat bouncing +19381 19381/tcp # pfSense nat bouncing +19381 19381/udp # pfSense nat bouncing +19382 19382/tcp # pfSense nat bouncing +19382 19382/udp # pfSense nat bouncing +19383 19383/tcp # pfSense nat bouncing +19383 19383/udp # pfSense nat bouncing +19384 19384/tcp # pfSense nat bouncing +19384 19384/udp # pfSense nat bouncing +19385 19385/tcp # pfSense nat bouncing +19385 19385/udp # pfSense nat bouncing +19386 19386/tcp # pfSense nat bouncing +19386 19386/udp # pfSense nat bouncing +19387 19387/tcp # pfSense nat bouncing +19387 19387/udp # pfSense nat bouncing +19388 19388/tcp # pfSense nat bouncing +19388 19388/udp # pfSense nat bouncing +19389 19389/tcp # pfSense nat bouncing +19389 19389/udp # pfSense nat bouncing +19390 19390/tcp # pfSense nat bouncing +19390 19390/udp # pfSense nat bouncing +19391 19391/tcp # pfSense nat bouncing +19391 19391/udp # pfSense nat bouncing +19392 19392/tcp # pfSense nat bouncing +19392 19392/udp # pfSense nat bouncing +19393 19393/tcp # pfSense nat bouncing +19393 19393/udp # pfSense nat bouncing +19394 19394/tcp # pfSense nat bouncing +19394 19394/udp # pfSense nat bouncing +19395 19395/tcp # pfSense nat bouncing +19395 19395/udp # pfSense nat bouncing +19396 19396/tcp # pfSense nat bouncing +19396 19396/udp # pfSense nat bouncing +19397 19397/tcp # pfSense nat bouncing +19397 19397/udp # pfSense nat bouncing +19398 19398/tcp # pfSense nat bouncing +19398 19398/udp # pfSense nat bouncing +19399 19399/tcp # pfSense nat bouncing +19399 19399/udp # pfSense nat bouncing +19400 19400/tcp # pfSense nat bouncing +19400 19400/udp # pfSense nat bouncing +19401 19401/tcp # pfSense nat bouncing +19401 19401/udp # pfSense nat bouncing +19402 19402/tcp # pfSense nat bouncing +19402 19402/udp # pfSense nat bouncing +19403 19403/tcp # pfSense nat bouncing +19403 19403/udp # pfSense nat bouncing +19404 19404/tcp # pfSense nat bouncing +19404 19404/udp # pfSense nat bouncing +19405 19405/tcp # pfSense nat bouncing +19405 19405/udp # pfSense nat bouncing +19406 19406/tcp # pfSense nat bouncing +19406 19406/udp # pfSense nat bouncing +19407 19407/tcp # pfSense nat bouncing +19407 19407/udp # pfSense nat bouncing +19408 19408/tcp # pfSense nat bouncing +19408 19408/udp # pfSense nat bouncing +19409 19409/tcp # pfSense nat bouncing +19409 19409/udp # pfSense nat bouncing +19410 19410/tcp # pfSense nat bouncing +19410 19410/udp # pfSense nat bouncing +19411 19411/tcp # pfSense nat bouncing +19411 19411/udp # pfSense nat bouncing +19412 19412/tcp # pfSense nat bouncing +19412 19412/udp # pfSense nat bouncing +19413 19413/tcp # pfSense nat bouncing +19413 19413/udp # pfSense nat bouncing +19414 19414/tcp # pfSense nat bouncing +19414 19414/udp # pfSense nat bouncing +19415 19415/tcp # pfSense nat bouncing +19415 19415/udp # pfSense nat bouncing +19416 19416/tcp # pfSense nat bouncing +19416 19416/udp # pfSense nat bouncing +19417 19417/tcp # pfSense nat bouncing +19417 19417/udp # pfSense nat bouncing +19418 19418/tcp # pfSense nat bouncing +19418 19418/udp # pfSense nat bouncing +19419 19419/tcp # pfSense nat bouncing +19419 19419/udp # pfSense nat bouncing +19420 19420/tcp # pfSense nat bouncing +19420 19420/udp # pfSense nat bouncing +19421 19421/tcp # pfSense nat bouncing +19421 19421/udp # pfSense nat bouncing +19422 19422/tcp # pfSense nat bouncing +19422 19422/udp # pfSense nat bouncing +19423 19423/tcp # pfSense nat bouncing +19423 19423/udp # pfSense nat bouncing +19424 19424/tcp # pfSense nat bouncing +19424 19424/udp # pfSense nat bouncing +19425 19425/tcp # pfSense nat bouncing +19425 19425/udp # pfSense nat bouncing +19426 19426/tcp # pfSense nat bouncing +19426 19426/udp # pfSense nat bouncing +19427 19427/tcp # pfSense nat bouncing +19427 19427/udp # pfSense nat bouncing +19428 19428/tcp # pfSense nat bouncing +19428 19428/udp # pfSense nat bouncing +19429 19429/tcp # pfSense nat bouncing +19429 19429/udp # pfSense nat bouncing +19430 19430/tcp # pfSense nat bouncing +19430 19430/udp # pfSense nat bouncing +19431 19431/tcp # pfSense nat bouncing +19431 19431/udp # pfSense nat bouncing +19432 19432/tcp # pfSense nat bouncing +19432 19432/udp # pfSense nat bouncing +19433 19433/tcp # pfSense nat bouncing +19433 19433/udp # pfSense nat bouncing +19434 19434/tcp # pfSense nat bouncing +19434 19434/udp # pfSense nat bouncing +19435 19435/tcp # pfSense nat bouncing +19435 19435/udp # pfSense nat bouncing +19436 19436/tcp # pfSense nat bouncing +19436 19436/udp # pfSense nat bouncing +19437 19437/tcp # pfSense nat bouncing +19437 19437/udp # pfSense nat bouncing +19438 19438/tcp # pfSense nat bouncing +19438 19438/udp # pfSense nat bouncing +19439 19439/tcp # pfSense nat bouncing +19439 19439/udp # pfSense nat bouncing +19440 19440/tcp # pfSense nat bouncing +19440 19440/udp # pfSense nat bouncing +19441 19441/tcp # pfSense nat bouncing +19441 19441/udp # pfSense nat bouncing +19442 19442/tcp # pfSense nat bouncing +19442 19442/udp # pfSense nat bouncing +19443 19443/tcp # pfSense nat bouncing +19443 19443/udp # pfSense nat bouncing +19444 19444/tcp # pfSense nat bouncing +19444 19444/udp # pfSense nat bouncing +19445 19445/tcp # pfSense nat bouncing +19445 19445/udp # pfSense nat bouncing +19446 19446/tcp # pfSense nat bouncing +19446 19446/udp # pfSense nat bouncing +19447 19447/tcp # pfSense nat bouncing +19447 19447/udp # pfSense nat bouncing +19448 19448/tcp # pfSense nat bouncing +19448 19448/udp # pfSense nat bouncing +19449 19449/tcp # pfSense nat bouncing +19449 19449/udp # pfSense nat bouncing +19450 19450/tcp # pfSense nat bouncing +19450 19450/udp # pfSense nat bouncing +19451 19451/tcp # pfSense nat bouncing +19451 19451/udp # pfSense nat bouncing +19452 19452/tcp # pfSense nat bouncing +19452 19452/udp # pfSense nat bouncing +19453 19453/tcp # pfSense nat bouncing +19453 19453/udp # pfSense nat bouncing +19454 19454/tcp # pfSense nat bouncing +19454 19454/udp # pfSense nat bouncing +19455 19455/tcp # pfSense nat bouncing +19455 19455/udp # pfSense nat bouncing +19456 19456/tcp # pfSense nat bouncing +19456 19456/udp # pfSense nat bouncing +19457 19457/tcp # pfSense nat bouncing +19457 19457/udp # pfSense nat bouncing +19458 19458/tcp # pfSense nat bouncing +19458 19458/udp # pfSense nat bouncing +19459 19459/tcp # pfSense nat bouncing +19459 19459/udp # pfSense nat bouncing +19460 19460/tcp # pfSense nat bouncing +19460 19460/udp # pfSense nat bouncing +19461 19461/tcp # pfSense nat bouncing +19461 19461/udp # pfSense nat bouncing +19462 19462/tcp # pfSense nat bouncing +19462 19462/udp # pfSense nat bouncing +19463 19463/tcp # pfSense nat bouncing +19463 19463/udp # pfSense nat bouncing +19464 19464/tcp # pfSense nat bouncing +19464 19464/udp # pfSense nat bouncing +19465 19465/tcp # pfSense nat bouncing +19465 19465/udp # pfSense nat bouncing +19466 19466/tcp # pfSense nat bouncing +19466 19466/udp # pfSense nat bouncing +19467 19467/tcp # pfSense nat bouncing +19467 19467/udp # pfSense nat bouncing +19468 19468/tcp # pfSense nat bouncing +19468 19468/udp # pfSense nat bouncing +19469 19469/tcp # pfSense nat bouncing +19469 19469/udp # pfSense nat bouncing +19470 19470/tcp # pfSense nat bouncing +19470 19470/udp # pfSense nat bouncing +19471 19471/tcp # pfSense nat bouncing +19471 19471/udp # pfSense nat bouncing +19472 19472/tcp # pfSense nat bouncing +19472 19472/udp # pfSense nat bouncing +19473 19473/tcp # pfSense nat bouncing +19473 19473/udp # pfSense nat bouncing +19474 19474/tcp # pfSense nat bouncing +19474 19474/udp # pfSense nat bouncing +19475 19475/tcp # pfSense nat bouncing +19475 19475/udp # pfSense nat bouncing +19476 19476/tcp # pfSense nat bouncing +19476 19476/udp # pfSense nat bouncing +19477 19477/tcp # pfSense nat bouncing +19477 19477/udp # pfSense nat bouncing +19478 19478/tcp # pfSense nat bouncing +19478 19478/udp # pfSense nat bouncing +19479 19479/tcp # pfSense nat bouncing +19479 19479/udp # pfSense nat bouncing +19480 19480/tcp # pfSense nat bouncing +19480 19480/udp # pfSense nat bouncing +19481 19481/tcp # pfSense nat bouncing +19481 19481/udp # pfSense nat bouncing +19482 19482/tcp # pfSense nat bouncing +19482 19482/udp # pfSense nat bouncing +19483 19483/tcp # pfSense nat bouncing +19483 19483/udp # pfSense nat bouncing +19484 19484/tcp # pfSense nat bouncing +19484 19484/udp # pfSense nat bouncing +19485 19485/tcp # pfSense nat bouncing +19485 19485/udp # pfSense nat bouncing +19486 19486/tcp # pfSense nat bouncing +19486 19486/udp # pfSense nat bouncing +19487 19487/tcp # pfSense nat bouncing +19487 19487/udp # pfSense nat bouncing +19488 19488/tcp # pfSense nat bouncing +19488 19488/udp # pfSense nat bouncing +19489 19489/tcp # pfSense nat bouncing +19489 19489/udp # pfSense nat bouncing +19490 19490/tcp # pfSense nat bouncing +19490 19490/udp # pfSense nat bouncing +19491 19491/tcp # pfSense nat bouncing +19491 19491/udp # pfSense nat bouncing +19492 19492/tcp # pfSense nat bouncing +19492 19492/udp # pfSense nat bouncing +19493 19493/tcp # pfSense nat bouncing +19493 19493/udp # pfSense nat bouncing +19494 19494/tcp # pfSense nat bouncing +19494 19494/udp # pfSense nat bouncing +19495 19495/tcp # pfSense nat bouncing +19495 19495/udp # pfSense nat bouncing +19496 19496/tcp # pfSense nat bouncing +19496 19496/udp # pfSense nat bouncing +19497 19497/tcp # pfSense nat bouncing +19497 19497/udp # pfSense nat bouncing +19498 19498/tcp # pfSense nat bouncing +19498 19498/udp # pfSense nat bouncing +19499 19499/tcp # pfSense nat bouncing +19499 19499/udp # pfSense nat bouncing +19500 19500/tcp # pfSense nat bouncing +19500 19500/udp # pfSense nat bouncing +19501 19501/tcp # pfSense nat bouncing +19501 19501/udp # pfSense nat bouncing +19502 19502/tcp # pfSense nat bouncing +19502 19502/udp # pfSense nat bouncing +19503 19503/tcp # pfSense nat bouncing +19503 19503/udp # pfSense nat bouncing +19504 19504/tcp # pfSense nat bouncing +19504 19504/udp # pfSense nat bouncing +19505 19505/tcp # pfSense nat bouncing +19505 19505/udp # pfSense nat bouncing +19506 19506/tcp # pfSense nat bouncing +19506 19506/udp # pfSense nat bouncing +19507 19507/tcp # pfSense nat bouncing +19507 19507/udp # pfSense nat bouncing +19508 19508/tcp # pfSense nat bouncing +19508 19508/udp # pfSense nat bouncing +19509 19509/tcp # pfSense nat bouncing +19509 19509/udp # pfSense nat bouncing +19510 19510/tcp # pfSense nat bouncing +19510 19510/udp # pfSense nat bouncing +19511 19511/tcp # pfSense nat bouncing +19511 19511/udp # pfSense nat bouncing +19512 19512/tcp # pfSense nat bouncing +19512 19512/udp # pfSense nat bouncing +19513 19513/tcp # pfSense nat bouncing +19513 19513/udp # pfSense nat bouncing +19514 19514/tcp # pfSense nat bouncing +19514 19514/udp # pfSense nat bouncing +19515 19515/tcp # pfSense nat bouncing +19515 19515/udp # pfSense nat bouncing +19516 19516/tcp # pfSense nat bouncing +19516 19516/udp # pfSense nat bouncing +19517 19517/tcp # pfSense nat bouncing +19517 19517/udp # pfSense nat bouncing +19518 19518/tcp # pfSense nat bouncing +19518 19518/udp # pfSense nat bouncing +19519 19519/tcp # pfSense nat bouncing +19519 19519/udp # pfSense nat bouncing +19520 19520/tcp # pfSense nat bouncing +19520 19520/udp # pfSense nat bouncing +19521 19521/tcp # pfSense nat bouncing +19521 19521/udp # pfSense nat bouncing +19522 19522/tcp # pfSense nat bouncing +19522 19522/udp # pfSense nat bouncing +19523 19523/tcp # pfSense nat bouncing +19523 19523/udp # pfSense nat bouncing +19524 19524/tcp # pfSense nat bouncing +19524 19524/udp # pfSense nat bouncing +19525 19525/tcp # pfSense nat bouncing +19525 19525/udp # pfSense nat bouncing +19526 19526/tcp # pfSense nat bouncing +19526 19526/udp # pfSense nat bouncing +19527 19527/tcp # pfSense nat bouncing +19527 19527/udp # pfSense nat bouncing +19528 19528/tcp # pfSense nat bouncing +19528 19528/udp # pfSense nat bouncing +19529 19529/tcp # pfSense nat bouncing +19529 19529/udp # pfSense nat bouncing +19530 19530/tcp # pfSense nat bouncing +19530 19530/udp # pfSense nat bouncing +19531 19531/tcp # pfSense nat bouncing +19531 19531/udp # pfSense nat bouncing +19532 19532/tcp # pfSense nat bouncing +19532 19532/udp # pfSense nat bouncing +19533 19533/tcp # pfSense nat bouncing +19533 19533/udp # pfSense nat bouncing +19534 19534/tcp # pfSense nat bouncing +19534 19534/udp # pfSense nat bouncing +19535 19535/tcp # pfSense nat bouncing +19535 19535/udp # pfSense nat bouncing +19536 19536/tcp # pfSense nat bouncing +19536 19536/udp # pfSense nat bouncing +19537 19537/tcp # pfSense nat bouncing +19537 19537/udp # pfSense nat bouncing +19538 19538/tcp # pfSense nat bouncing +19538 19538/udp # pfSense nat bouncing +19539 19539/tcp # pfSense nat bouncing +19539 19539/udp # pfSense nat bouncing +19540 19540/tcp # pfSense nat bouncing +19540 19540/udp # pfSense nat bouncing +19541 19541/tcp # pfSense nat bouncing +19541 19541/udp # pfSense nat bouncing +19542 19542/tcp # pfSense nat bouncing +19542 19542/udp # pfSense nat bouncing +19543 19543/tcp # pfSense nat bouncing +19543 19543/udp # pfSense nat bouncing +19544 19544/tcp # pfSense nat bouncing +19544 19544/udp # pfSense nat bouncing +19545 19545/tcp # pfSense nat bouncing +19545 19545/udp # pfSense nat bouncing +19546 19546/tcp # pfSense nat bouncing +19546 19546/udp # pfSense nat bouncing +19547 19547/tcp # pfSense nat bouncing +19547 19547/udp # pfSense nat bouncing +19548 19548/tcp # pfSense nat bouncing +19548 19548/udp # pfSense nat bouncing +19549 19549/tcp # pfSense nat bouncing +19549 19549/udp # pfSense nat bouncing +19550 19550/tcp # pfSense nat bouncing +19550 19550/udp # pfSense nat bouncing +19551 19551/tcp # pfSense nat bouncing +19551 19551/udp # pfSense nat bouncing +19552 19552/tcp # pfSense nat bouncing +19552 19552/udp # pfSense nat bouncing +19553 19553/tcp # pfSense nat bouncing +19553 19553/udp # pfSense nat bouncing +19554 19554/tcp # pfSense nat bouncing +19554 19554/udp # pfSense nat bouncing +19555 19555/tcp # pfSense nat bouncing +19555 19555/udp # pfSense nat bouncing +19556 19556/tcp # pfSense nat bouncing +19556 19556/udp # pfSense nat bouncing +19557 19557/tcp # pfSense nat bouncing +19557 19557/udp # pfSense nat bouncing +19558 19558/tcp # pfSense nat bouncing +19558 19558/udp # pfSense nat bouncing +19559 19559/tcp # pfSense nat bouncing +19559 19559/udp # pfSense nat bouncing +19560 19560/tcp # pfSense nat bouncing +19560 19560/udp # pfSense nat bouncing +19561 19561/tcp # pfSense nat bouncing +19561 19561/udp # pfSense nat bouncing +19562 19562/tcp # pfSense nat bouncing +19562 19562/udp # pfSense nat bouncing +19563 19563/tcp # pfSense nat bouncing +19563 19563/udp # pfSense nat bouncing +19564 19564/tcp # pfSense nat bouncing +19564 19564/udp # pfSense nat bouncing +19565 19565/tcp # pfSense nat bouncing +19565 19565/udp # pfSense nat bouncing +19566 19566/tcp # pfSense nat bouncing +19566 19566/udp # pfSense nat bouncing +19567 19567/tcp # pfSense nat bouncing +19567 19567/udp # pfSense nat bouncing +19568 19568/tcp # pfSense nat bouncing +19568 19568/udp # pfSense nat bouncing +19569 19569/tcp # pfSense nat bouncing +19569 19569/udp # pfSense nat bouncing +19570 19570/tcp # pfSense nat bouncing +19570 19570/udp # pfSense nat bouncing +19571 19571/tcp # pfSense nat bouncing +19571 19571/udp # pfSense nat bouncing +19572 19572/tcp # pfSense nat bouncing +19572 19572/udp # pfSense nat bouncing +19573 19573/tcp # pfSense nat bouncing +19573 19573/udp # pfSense nat bouncing +19574 19574/tcp # pfSense nat bouncing +19574 19574/udp # pfSense nat bouncing +19575 19575/tcp # pfSense nat bouncing +19575 19575/udp # pfSense nat bouncing +19576 19576/tcp # pfSense nat bouncing +19576 19576/udp # pfSense nat bouncing +19577 19577/tcp # pfSense nat bouncing +19577 19577/udp # pfSense nat bouncing +19578 19578/tcp # pfSense nat bouncing +19578 19578/udp # pfSense nat bouncing +19579 19579/tcp # pfSense nat bouncing +19579 19579/udp # pfSense nat bouncing +19580 19580/tcp # pfSense nat bouncing +19580 19580/udp # pfSense nat bouncing +19581 19581/tcp # pfSense nat bouncing +19581 19581/udp # pfSense nat bouncing +19582 19582/tcp # pfSense nat bouncing +19582 19582/udp # pfSense nat bouncing +19583 19583/tcp # pfSense nat bouncing +19583 19583/udp # pfSense nat bouncing +19584 19584/tcp # pfSense nat bouncing +19584 19584/udp # pfSense nat bouncing +19585 19585/tcp # pfSense nat bouncing +19585 19585/udp # pfSense nat bouncing +19586 19586/tcp # pfSense nat bouncing +19586 19586/udp # pfSense nat bouncing +19587 19587/tcp # pfSense nat bouncing +19587 19587/udp # pfSense nat bouncing +19588 19588/tcp # pfSense nat bouncing +19588 19588/udp # pfSense nat bouncing +19589 19589/tcp # pfSense nat bouncing +19589 19589/udp # pfSense nat bouncing +19590 19590/tcp # pfSense nat bouncing +19590 19590/udp # pfSense nat bouncing +19591 19591/tcp # pfSense nat bouncing +19591 19591/udp # pfSense nat bouncing +19592 19592/tcp # pfSense nat bouncing +19592 19592/udp # pfSense nat bouncing +19593 19593/tcp # pfSense nat bouncing +19593 19593/udp # pfSense nat bouncing +19594 19594/tcp # pfSense nat bouncing +19594 19594/udp # pfSense nat bouncing +19595 19595/tcp # pfSense nat bouncing +19595 19595/udp # pfSense nat bouncing +19596 19596/tcp # pfSense nat bouncing +19596 19596/udp # pfSense nat bouncing +19597 19597/tcp # pfSense nat bouncing +19597 19597/udp # pfSense nat bouncing +19598 19598/tcp # pfSense nat bouncing +19598 19598/udp # pfSense nat bouncing +19599 19599/tcp # pfSense nat bouncing +19599 19599/udp # pfSense nat bouncing +19600 19600/tcp # pfSense nat bouncing +19600 19600/udp # pfSense nat bouncing +19601 19601/tcp # pfSense nat bouncing +19601 19601/udp # pfSense nat bouncing +19602 19602/tcp # pfSense nat bouncing +19602 19602/udp # pfSense nat bouncing +19603 19603/tcp # pfSense nat bouncing +19603 19603/udp # pfSense nat bouncing +19604 19604/tcp # pfSense nat bouncing +19604 19604/udp # pfSense nat bouncing +19605 19605/tcp # pfSense nat bouncing +19605 19605/udp # pfSense nat bouncing +19606 19606/tcp # pfSense nat bouncing +19606 19606/udp # pfSense nat bouncing +19607 19607/tcp # pfSense nat bouncing +19607 19607/udp # pfSense nat bouncing +19608 19608/tcp # pfSense nat bouncing +19608 19608/udp # pfSense nat bouncing +19609 19609/tcp # pfSense nat bouncing +19609 19609/udp # pfSense nat bouncing +19610 19610/tcp # pfSense nat bouncing +19610 19610/udp # pfSense nat bouncing +19611 19611/tcp # pfSense nat bouncing +19611 19611/udp # pfSense nat bouncing +19612 19612/tcp # pfSense nat bouncing +19612 19612/udp # pfSense nat bouncing +19613 19613/tcp # pfSense nat bouncing +19613 19613/udp # pfSense nat bouncing +19614 19614/tcp # pfSense nat bouncing +19614 19614/udp # pfSense nat bouncing +19615 19615/tcp # pfSense nat bouncing +19615 19615/udp # pfSense nat bouncing +19616 19616/tcp # pfSense nat bouncing +19616 19616/udp # pfSense nat bouncing +19617 19617/tcp # pfSense nat bouncing +19617 19617/udp # pfSense nat bouncing +19618 19618/tcp # pfSense nat bouncing +19618 19618/udp # pfSense nat bouncing +19619 19619/tcp # pfSense nat bouncing +19619 19619/udp # pfSense nat bouncing +19620 19620/tcp # pfSense nat bouncing +19620 19620/udp # pfSense nat bouncing +19621 19621/tcp # pfSense nat bouncing +19621 19621/udp # pfSense nat bouncing +19622 19622/tcp # pfSense nat bouncing +19622 19622/udp # pfSense nat bouncing +19623 19623/tcp # pfSense nat bouncing +19623 19623/udp # pfSense nat bouncing +19624 19624/tcp # pfSense nat bouncing +19624 19624/udp # pfSense nat bouncing +19625 19625/tcp # pfSense nat bouncing +19625 19625/udp # pfSense nat bouncing +19626 19626/tcp # pfSense nat bouncing +19626 19626/udp # pfSense nat bouncing +19627 19627/tcp # pfSense nat bouncing +19627 19627/udp # pfSense nat bouncing +19628 19628/tcp # pfSense nat bouncing +19628 19628/udp # pfSense nat bouncing +19629 19629/tcp # pfSense nat bouncing +19629 19629/udp # pfSense nat bouncing +19630 19630/tcp # pfSense nat bouncing +19630 19630/udp # pfSense nat bouncing +19631 19631/tcp # pfSense nat bouncing +19631 19631/udp # pfSense nat bouncing +19632 19632/tcp # pfSense nat bouncing +19632 19632/udp # pfSense nat bouncing +19633 19633/tcp # pfSense nat bouncing +19633 19633/udp # pfSense nat bouncing +19634 19634/tcp # pfSense nat bouncing +19634 19634/udp # pfSense nat bouncing +19635 19635/tcp # pfSense nat bouncing +19635 19635/udp # pfSense nat bouncing +19636 19636/tcp # pfSense nat bouncing +19636 19636/udp # pfSense nat bouncing +19637 19637/tcp # pfSense nat bouncing +19637 19637/udp # pfSense nat bouncing +19638 19638/tcp # pfSense nat bouncing +19638 19638/udp # pfSense nat bouncing +19639 19639/tcp # pfSense nat bouncing +19639 19639/udp # pfSense nat bouncing +19640 19640/tcp # pfSense nat bouncing +19640 19640/udp # pfSense nat bouncing +19641 19641/tcp # pfSense nat bouncing +19641 19641/udp # pfSense nat bouncing +19642 19642/tcp # pfSense nat bouncing +19642 19642/udp # pfSense nat bouncing +19643 19643/tcp # pfSense nat bouncing +19643 19643/udp # pfSense nat bouncing +19644 19644/tcp # pfSense nat bouncing +19644 19644/udp # pfSense nat bouncing +19645 19645/tcp # pfSense nat bouncing +19645 19645/udp # pfSense nat bouncing +19646 19646/tcp # pfSense nat bouncing +19646 19646/udp # pfSense nat bouncing +19647 19647/tcp # pfSense nat bouncing +19647 19647/udp # pfSense nat bouncing +19648 19648/tcp # pfSense nat bouncing +19648 19648/udp # pfSense nat bouncing +19649 19649/tcp # pfSense nat bouncing +19649 19649/udp # pfSense nat bouncing +19650 19650/tcp # pfSense nat bouncing +19650 19650/udp # pfSense nat bouncing +19651 19651/tcp # pfSense nat bouncing +19651 19651/udp # pfSense nat bouncing +19652 19652/tcp # pfSense nat bouncing +19652 19652/udp # pfSense nat bouncing +19653 19653/tcp # pfSense nat bouncing +19653 19653/udp # pfSense nat bouncing +19654 19654/tcp # pfSense nat bouncing +19654 19654/udp # pfSense nat bouncing +19655 19655/tcp # pfSense nat bouncing +19655 19655/udp # pfSense nat bouncing +19656 19656/tcp # pfSense nat bouncing +19656 19656/udp # pfSense nat bouncing +19657 19657/tcp # pfSense nat bouncing +19657 19657/udp # pfSense nat bouncing +19658 19658/tcp # pfSense nat bouncing +19658 19658/udp # pfSense nat bouncing +19659 19659/tcp # pfSense nat bouncing +19659 19659/udp # pfSense nat bouncing +19660 19660/tcp # pfSense nat bouncing +19660 19660/udp # pfSense nat bouncing +19661 19661/tcp # pfSense nat bouncing +19661 19661/udp # pfSense nat bouncing +19662 19662/tcp # pfSense nat bouncing +19662 19662/udp # pfSense nat bouncing +19663 19663/tcp # pfSense nat bouncing +19663 19663/udp # pfSense nat bouncing +19664 19664/tcp # pfSense nat bouncing +19664 19664/udp # pfSense nat bouncing +19665 19665/tcp # pfSense nat bouncing +19665 19665/udp # pfSense nat bouncing +19666 19666/tcp # pfSense nat bouncing +19666 19666/udp # pfSense nat bouncing +19667 19667/tcp # pfSense nat bouncing +19667 19667/udp # pfSense nat bouncing +19668 19668/tcp # pfSense nat bouncing +19668 19668/udp # pfSense nat bouncing +19669 19669/tcp # pfSense nat bouncing +19669 19669/udp # pfSense nat bouncing +19670 19670/tcp # pfSense nat bouncing +19670 19670/udp # pfSense nat bouncing +19671 19671/tcp # pfSense nat bouncing +19671 19671/udp # pfSense nat bouncing +19672 19672/tcp # pfSense nat bouncing +19672 19672/udp # pfSense nat bouncing +19673 19673/tcp # pfSense nat bouncing +19673 19673/udp # pfSense nat bouncing +19674 19674/tcp # pfSense nat bouncing +19674 19674/udp # pfSense nat bouncing +19675 19675/tcp # pfSense nat bouncing +19675 19675/udp # pfSense nat bouncing +19676 19676/tcp # pfSense nat bouncing +19676 19676/udp # pfSense nat bouncing +19677 19677/tcp # pfSense nat bouncing +19677 19677/udp # pfSense nat bouncing +19678 19678/tcp # pfSense nat bouncing +19678 19678/udp # pfSense nat bouncing +19679 19679/tcp # pfSense nat bouncing +19679 19679/udp # pfSense nat bouncing +19680 19680/tcp # pfSense nat bouncing +19680 19680/udp # pfSense nat bouncing +19681 19681/tcp # pfSense nat bouncing +19681 19681/udp # pfSense nat bouncing +19682 19682/tcp # pfSense nat bouncing +19682 19682/udp # pfSense nat bouncing +19683 19683/tcp # pfSense nat bouncing +19683 19683/udp # pfSense nat bouncing +19684 19684/tcp # pfSense nat bouncing +19684 19684/udp # pfSense nat bouncing +19685 19685/tcp # pfSense nat bouncing +19685 19685/udp # pfSense nat bouncing +19686 19686/tcp # pfSense nat bouncing +19686 19686/udp # pfSense nat bouncing +19687 19687/tcp # pfSense nat bouncing +19687 19687/udp # pfSense nat bouncing +19688 19688/tcp # pfSense nat bouncing +19688 19688/udp # pfSense nat bouncing +19689 19689/tcp # pfSense nat bouncing +19689 19689/udp # pfSense nat bouncing +19690 19690/tcp # pfSense nat bouncing +19690 19690/udp # pfSense nat bouncing +19691 19691/tcp # pfSense nat bouncing +19691 19691/udp # pfSense nat bouncing +19692 19692/tcp # pfSense nat bouncing +19692 19692/udp # pfSense nat bouncing +19693 19693/tcp # pfSense nat bouncing +19693 19693/udp # pfSense nat bouncing +19694 19694/tcp # pfSense nat bouncing +19694 19694/udp # pfSense nat bouncing +19695 19695/tcp # pfSense nat bouncing +19695 19695/udp # pfSense nat bouncing +19696 19696/tcp # pfSense nat bouncing +19696 19696/udp # pfSense nat bouncing +19697 19697/tcp # pfSense nat bouncing +19697 19697/udp # pfSense nat bouncing +19698 19698/tcp # pfSense nat bouncing +19698 19698/udp # pfSense nat bouncing +19699 19699/tcp # pfSense nat bouncing +19699 19699/udp # pfSense nat bouncing +19700 19700/tcp # pfSense nat bouncing +19700 19700/udp # pfSense nat bouncing +19701 19701/tcp # pfSense nat bouncing +19701 19701/udp # pfSense nat bouncing +19702 19702/tcp # pfSense nat bouncing +19702 19702/udp # pfSense nat bouncing +19703 19703/tcp # pfSense nat bouncing +19703 19703/udp # pfSense nat bouncing +19704 19704/tcp # pfSense nat bouncing +19704 19704/udp # pfSense nat bouncing +19705 19705/tcp # pfSense nat bouncing +19705 19705/udp # pfSense nat bouncing +19706 19706/tcp # pfSense nat bouncing +19706 19706/udp # pfSense nat bouncing +19707 19707/tcp # pfSense nat bouncing +19707 19707/udp # pfSense nat bouncing +19708 19708/tcp # pfSense nat bouncing +19708 19708/udp # pfSense nat bouncing +19709 19709/tcp # pfSense nat bouncing +19709 19709/udp # pfSense nat bouncing +19710 19710/tcp # pfSense nat bouncing +19710 19710/udp # pfSense nat bouncing +19711 19711/tcp # pfSense nat bouncing +19711 19711/udp # pfSense nat bouncing +19712 19712/tcp # pfSense nat bouncing +19712 19712/udp # pfSense nat bouncing +19713 19713/tcp # pfSense nat bouncing +19713 19713/udp # pfSense nat bouncing +19714 19714/tcp # pfSense nat bouncing +19714 19714/udp # pfSense nat bouncing +19715 19715/tcp # pfSense nat bouncing +19715 19715/udp # pfSense nat bouncing +19716 19716/tcp # pfSense nat bouncing +19716 19716/udp # pfSense nat bouncing +19717 19717/tcp # pfSense nat bouncing +19717 19717/udp # pfSense nat bouncing +19718 19718/tcp # pfSense nat bouncing +19718 19718/udp # pfSense nat bouncing +19719 19719/tcp # pfSense nat bouncing +19719 19719/udp # pfSense nat bouncing +19720 19720/tcp # pfSense nat bouncing +19720 19720/udp # pfSense nat bouncing +19721 19721/tcp # pfSense nat bouncing +19721 19721/udp # pfSense nat bouncing +19722 19722/tcp # pfSense nat bouncing +19722 19722/udp # pfSense nat bouncing +19723 19723/tcp # pfSense nat bouncing +19723 19723/udp # pfSense nat bouncing +19724 19724/tcp # pfSense nat bouncing +19724 19724/udp # pfSense nat bouncing +19725 19725/tcp # pfSense nat bouncing +19725 19725/udp # pfSense nat bouncing +19726 19726/tcp # pfSense nat bouncing +19726 19726/udp # pfSense nat bouncing +19727 19727/tcp # pfSense nat bouncing +19727 19727/udp # pfSense nat bouncing +19728 19728/tcp # pfSense nat bouncing +19728 19728/udp # pfSense nat bouncing +19729 19729/tcp # pfSense nat bouncing +19729 19729/udp # pfSense nat bouncing +19730 19730/tcp # pfSense nat bouncing +19730 19730/udp # pfSense nat bouncing +19731 19731/tcp # pfSense nat bouncing +19731 19731/udp # pfSense nat bouncing +19732 19732/tcp # pfSense nat bouncing +19732 19732/udp # pfSense nat bouncing +19733 19733/tcp # pfSense nat bouncing +19733 19733/udp # pfSense nat bouncing +19734 19734/tcp # pfSense nat bouncing +19734 19734/udp # pfSense nat bouncing +19735 19735/tcp # pfSense nat bouncing +19735 19735/udp # pfSense nat bouncing +19736 19736/tcp # pfSense nat bouncing +19736 19736/udp # pfSense nat bouncing +19737 19737/tcp # pfSense nat bouncing +19737 19737/udp # pfSense nat bouncing +19738 19738/tcp # pfSense nat bouncing +19738 19738/udp # pfSense nat bouncing +19739 19739/tcp # pfSense nat bouncing +19739 19739/udp # pfSense nat bouncing +19740 19740/tcp # pfSense nat bouncing +19740 19740/udp # pfSense nat bouncing +19741 19741/tcp # pfSense nat bouncing +19741 19741/udp # pfSense nat bouncing +19742 19742/tcp # pfSense nat bouncing +19742 19742/udp # pfSense nat bouncing +19743 19743/tcp # pfSense nat bouncing +19743 19743/udp # pfSense nat bouncing +19744 19744/tcp # pfSense nat bouncing +19744 19744/udp # pfSense nat bouncing +19745 19745/tcp # pfSense nat bouncing +19745 19745/udp # pfSense nat bouncing +19746 19746/tcp # pfSense nat bouncing +19746 19746/udp # pfSense nat bouncing +19747 19747/tcp # pfSense nat bouncing +19747 19747/udp # pfSense nat bouncing +19748 19748/tcp # pfSense nat bouncing +19748 19748/udp # pfSense nat bouncing +19749 19749/tcp # pfSense nat bouncing +19749 19749/udp # pfSense nat bouncing +19750 19750/tcp # pfSense nat bouncing +19750 19750/udp # pfSense nat bouncing +19751 19751/tcp # pfSense nat bouncing +19751 19751/udp # pfSense nat bouncing +19752 19752/tcp # pfSense nat bouncing +19752 19752/udp # pfSense nat bouncing +19753 19753/tcp # pfSense nat bouncing +19753 19753/udp # pfSense nat bouncing +19754 19754/tcp # pfSense nat bouncing +19754 19754/udp # pfSense nat bouncing +19755 19755/tcp # pfSense nat bouncing +19755 19755/udp # pfSense nat bouncing +19756 19756/tcp # pfSense nat bouncing +19756 19756/udp # pfSense nat bouncing +19757 19757/tcp # pfSense nat bouncing +19757 19757/udp # pfSense nat bouncing +19758 19758/tcp # pfSense nat bouncing +19758 19758/udp # pfSense nat bouncing +19759 19759/tcp # pfSense nat bouncing +19759 19759/udp # pfSense nat bouncing +19760 19760/tcp # pfSense nat bouncing +19760 19760/udp # pfSense nat bouncing +19761 19761/tcp # pfSense nat bouncing +19761 19761/udp # pfSense nat bouncing +19762 19762/tcp # pfSense nat bouncing +19762 19762/udp # pfSense nat bouncing +19763 19763/tcp # pfSense nat bouncing +19763 19763/udp # pfSense nat bouncing +19764 19764/tcp # pfSense nat bouncing +19764 19764/udp # pfSense nat bouncing +19765 19765/tcp # pfSense nat bouncing +19765 19765/udp # pfSense nat bouncing +19766 19766/tcp # pfSense nat bouncing +19766 19766/udp # pfSense nat bouncing +19767 19767/tcp # pfSense nat bouncing +19767 19767/udp # pfSense nat bouncing +19768 19768/tcp # pfSense nat bouncing +19768 19768/udp # pfSense nat bouncing +19769 19769/tcp # pfSense nat bouncing +19769 19769/udp # pfSense nat bouncing +19770 19770/tcp # pfSense nat bouncing +19770 19770/udp # pfSense nat bouncing +19771 19771/tcp # pfSense nat bouncing +19771 19771/udp # pfSense nat bouncing +19772 19772/tcp # pfSense nat bouncing +19772 19772/udp # pfSense nat bouncing +19773 19773/tcp # pfSense nat bouncing +19773 19773/udp # pfSense nat bouncing +19774 19774/tcp # pfSense nat bouncing +19774 19774/udp # pfSense nat bouncing +19775 19775/tcp # pfSense nat bouncing +19775 19775/udp # pfSense nat bouncing +19776 19776/tcp # pfSense nat bouncing +19776 19776/udp # pfSense nat bouncing +19777 19777/tcp # pfSense nat bouncing +19777 19777/udp # pfSense nat bouncing +19778 19778/tcp # pfSense nat bouncing +19778 19778/udp # pfSense nat bouncing +19779 19779/tcp # pfSense nat bouncing +19779 19779/udp # pfSense nat bouncing +19780 19780/tcp # pfSense nat bouncing +19780 19780/udp # pfSense nat bouncing +19781 19781/tcp # pfSense nat bouncing +19781 19781/udp # pfSense nat bouncing +19782 19782/tcp # pfSense nat bouncing +19782 19782/udp # pfSense nat bouncing +19783 19783/tcp # pfSense nat bouncing +19783 19783/udp # pfSense nat bouncing +19784 19784/tcp # pfSense nat bouncing +19784 19784/udp # pfSense nat bouncing +19785 19785/tcp # pfSense nat bouncing +19785 19785/udp # pfSense nat bouncing +19786 19786/tcp # pfSense nat bouncing +19786 19786/udp # pfSense nat bouncing +19787 19787/tcp # pfSense nat bouncing +19787 19787/udp # pfSense nat bouncing +19788 19788/tcp # pfSense nat bouncing +19788 19788/udp # pfSense nat bouncing +19789 19789/tcp # pfSense nat bouncing +19789 19789/udp # pfSense nat bouncing +19790 19790/tcp # pfSense nat bouncing +19790 19790/udp # pfSense nat bouncing +19791 19791/tcp # pfSense nat bouncing +19791 19791/udp # pfSense nat bouncing +19792 19792/tcp # pfSense nat bouncing +19792 19792/udp # pfSense nat bouncing +19793 19793/tcp # pfSense nat bouncing +19793 19793/udp # pfSense nat bouncing +19794 19794/tcp # pfSense nat bouncing +19794 19794/udp # pfSense nat bouncing +19795 19795/tcp # pfSense nat bouncing +19795 19795/udp # pfSense nat bouncing +19796 19796/tcp # pfSense nat bouncing +19796 19796/udp # pfSense nat bouncing +19797 19797/tcp # pfSense nat bouncing +19797 19797/udp # pfSense nat bouncing +19798 19798/tcp # pfSense nat bouncing +19798 19798/udp # pfSense nat bouncing +19799 19799/tcp # pfSense nat bouncing +19799 19799/udp # pfSense nat bouncing +19800 19800/tcp # pfSense nat bouncing +19800 19800/udp # pfSense nat bouncing +19801 19801/tcp # pfSense nat bouncing +19801 19801/udp # pfSense nat bouncing +19802 19802/tcp # pfSense nat bouncing +19802 19802/udp # pfSense nat bouncing +19803 19803/tcp # pfSense nat bouncing +19803 19803/udp # pfSense nat bouncing +19804 19804/tcp # pfSense nat bouncing +19804 19804/udp # pfSense nat bouncing +19805 19805/tcp # pfSense nat bouncing +19805 19805/udp # pfSense nat bouncing +19806 19806/tcp # pfSense nat bouncing +19806 19806/udp # pfSense nat bouncing +19807 19807/tcp # pfSense nat bouncing +19807 19807/udp # pfSense nat bouncing +19808 19808/tcp # pfSense nat bouncing +19808 19808/udp # pfSense nat bouncing +19809 19809/tcp # pfSense nat bouncing +19809 19809/udp # pfSense nat bouncing +19810 19810/tcp # pfSense nat bouncing +19810 19810/udp # pfSense nat bouncing +19811 19811/tcp # pfSense nat bouncing +19811 19811/udp # pfSense nat bouncing +19812 19812/tcp # pfSense nat bouncing +19812 19812/udp # pfSense nat bouncing +19813 19813/tcp # pfSense nat bouncing +19813 19813/udp # pfSense nat bouncing +19814 19814/tcp # pfSense nat bouncing +19814 19814/udp # pfSense nat bouncing +19815 19815/tcp # pfSense nat bouncing +19815 19815/udp # pfSense nat bouncing +19816 19816/tcp # pfSense nat bouncing +19816 19816/udp # pfSense nat bouncing +19817 19817/tcp # pfSense nat bouncing +19817 19817/udp # pfSense nat bouncing +19818 19818/tcp # pfSense nat bouncing +19818 19818/udp # pfSense nat bouncing +19819 19819/tcp # pfSense nat bouncing +19819 19819/udp # pfSense nat bouncing +19820 19820/tcp # pfSense nat bouncing +19820 19820/udp # pfSense nat bouncing +19821 19821/tcp # pfSense nat bouncing +19821 19821/udp # pfSense nat bouncing +19822 19822/tcp # pfSense nat bouncing +19822 19822/udp # pfSense nat bouncing +19823 19823/tcp # pfSense nat bouncing +19823 19823/udp # pfSense nat bouncing +19824 19824/tcp # pfSense nat bouncing +19824 19824/udp # pfSense nat bouncing +19825 19825/tcp # pfSense nat bouncing +19825 19825/udp # pfSense nat bouncing +19826 19826/tcp # pfSense nat bouncing +19826 19826/udp # pfSense nat bouncing +19827 19827/tcp # pfSense nat bouncing +19827 19827/udp # pfSense nat bouncing +19828 19828/tcp # pfSense nat bouncing +19828 19828/udp # pfSense nat bouncing +19829 19829/tcp # pfSense nat bouncing +19829 19829/udp # pfSense nat bouncing +19830 19830/tcp # pfSense nat bouncing +19830 19830/udp # pfSense nat bouncing +19831 19831/tcp # pfSense nat bouncing +19831 19831/udp # pfSense nat bouncing +19832 19832/tcp # pfSense nat bouncing +19832 19832/udp # pfSense nat bouncing +19833 19833/tcp # pfSense nat bouncing +19833 19833/udp # pfSense nat bouncing +19834 19834/tcp # pfSense nat bouncing +19834 19834/udp # pfSense nat bouncing +19835 19835/tcp # pfSense nat bouncing +19835 19835/udp # pfSense nat bouncing +19836 19836/tcp # pfSense nat bouncing +19836 19836/udp # pfSense nat bouncing +19837 19837/tcp # pfSense nat bouncing +19837 19837/udp # pfSense nat bouncing +19838 19838/tcp # pfSense nat bouncing +19838 19838/udp # pfSense nat bouncing +19839 19839/tcp # pfSense nat bouncing +19839 19839/udp # pfSense nat bouncing +19840 19840/tcp # pfSense nat bouncing +19840 19840/udp # pfSense nat bouncing +19841 19841/tcp # pfSense nat bouncing +19841 19841/udp # pfSense nat bouncing +19842 19842/tcp # pfSense nat bouncing +19842 19842/udp # pfSense nat bouncing +19843 19843/tcp # pfSense nat bouncing +19843 19843/udp # pfSense nat bouncing +19844 19844/tcp # pfSense nat bouncing +19844 19844/udp # pfSense nat bouncing +19845 19845/tcp # pfSense nat bouncing +19845 19845/udp # pfSense nat bouncing +19846 19846/tcp # pfSense nat bouncing +19846 19846/udp # pfSense nat bouncing +19847 19847/tcp # pfSense nat bouncing +19847 19847/udp # pfSense nat bouncing +19848 19848/tcp # pfSense nat bouncing +19848 19848/udp # pfSense nat bouncing +19849 19849/tcp # pfSense nat bouncing +19849 19849/udp # pfSense nat bouncing +19850 19850/tcp # pfSense nat bouncing +19850 19850/udp # pfSense nat bouncing +19851 19851/tcp # pfSense nat bouncing +19851 19851/udp # pfSense nat bouncing +19852 19852/tcp # pfSense nat bouncing +19852 19852/udp # pfSense nat bouncing +19853 19853/tcp # pfSense nat bouncing +19853 19853/udp # pfSense nat bouncing +19854 19854/tcp # pfSense nat bouncing +19854 19854/udp # pfSense nat bouncing +19855 19855/tcp # pfSense nat bouncing +19855 19855/udp # pfSense nat bouncing +19856 19856/tcp # pfSense nat bouncing +19856 19856/udp # pfSense nat bouncing +19857 19857/tcp # pfSense nat bouncing +19857 19857/udp # pfSense nat bouncing +19858 19858/tcp # pfSense nat bouncing +19858 19858/udp # pfSense nat bouncing +19859 19859/tcp # pfSense nat bouncing +19859 19859/udp # pfSense nat bouncing +19860 19860/tcp # pfSense nat bouncing +19860 19860/udp # pfSense nat bouncing +19861 19861/tcp # pfSense nat bouncing +19861 19861/udp # pfSense nat bouncing +19862 19862/tcp # pfSense nat bouncing +19862 19862/udp # pfSense nat bouncing +19863 19863/tcp # pfSense nat bouncing +19863 19863/udp # pfSense nat bouncing +19864 19864/tcp # pfSense nat bouncing +19864 19864/udp # pfSense nat bouncing +19865 19865/tcp # pfSense nat bouncing +19865 19865/udp # pfSense nat bouncing +19866 19866/tcp # pfSense nat bouncing +19866 19866/udp # pfSense nat bouncing +19867 19867/tcp # pfSense nat bouncing +19867 19867/udp # pfSense nat bouncing +19868 19868/tcp # pfSense nat bouncing +19868 19868/udp # pfSense nat bouncing +19869 19869/tcp # pfSense nat bouncing +19869 19869/udp # pfSense nat bouncing +19870 19870/tcp # pfSense nat bouncing +19870 19870/udp # pfSense nat bouncing +19871 19871/tcp # pfSense nat bouncing +19871 19871/udp # pfSense nat bouncing +19872 19872/tcp # pfSense nat bouncing +19872 19872/udp # pfSense nat bouncing +19873 19873/tcp # pfSense nat bouncing +19873 19873/udp # pfSense nat bouncing +19874 19874/tcp # pfSense nat bouncing +19874 19874/udp # pfSense nat bouncing +19875 19875/tcp # pfSense nat bouncing +19875 19875/udp # pfSense nat bouncing +19876 19876/tcp # pfSense nat bouncing +19876 19876/udp # pfSense nat bouncing +19877 19877/tcp # pfSense nat bouncing +19877 19877/udp # pfSense nat bouncing +19878 19878/tcp # pfSense nat bouncing +19878 19878/udp # pfSense nat bouncing +19879 19879/tcp # pfSense nat bouncing +19879 19879/udp # pfSense nat bouncing +19880 19880/tcp # pfSense nat bouncing +19880 19880/udp # pfSense nat bouncing +19881 19881/tcp # pfSense nat bouncing +19881 19881/udp # pfSense nat bouncing +19882 19882/tcp # pfSense nat bouncing +19882 19882/udp # pfSense nat bouncing +19883 19883/tcp # pfSense nat bouncing +19883 19883/udp # pfSense nat bouncing +19884 19884/tcp # pfSense nat bouncing +19884 19884/udp # pfSense nat bouncing +19885 19885/tcp # pfSense nat bouncing +19885 19885/udp # pfSense nat bouncing +19886 19886/tcp # pfSense nat bouncing +19886 19886/udp # pfSense nat bouncing +19887 19887/tcp # pfSense nat bouncing +19887 19887/udp # pfSense nat bouncing +19888 19888/tcp # pfSense nat bouncing +19888 19888/udp # pfSense nat bouncing +19889 19889/tcp # pfSense nat bouncing +19889 19889/udp # pfSense nat bouncing +19890 19890/tcp # pfSense nat bouncing +19890 19890/udp # pfSense nat bouncing +19891 19891/tcp # pfSense nat bouncing +19891 19891/udp # pfSense nat bouncing +19892 19892/tcp # pfSense nat bouncing +19892 19892/udp # pfSense nat bouncing +19893 19893/tcp # pfSense nat bouncing +19893 19893/udp # pfSense nat bouncing +19894 19894/tcp # pfSense nat bouncing +19894 19894/udp # pfSense nat bouncing +19895 19895/tcp # pfSense nat bouncing +19895 19895/udp # pfSense nat bouncing +19896 19896/tcp # pfSense nat bouncing +19896 19896/udp # pfSense nat bouncing +19897 19897/tcp # pfSense nat bouncing +19897 19897/udp # pfSense nat bouncing +19898 19898/tcp # pfSense nat bouncing +19898 19898/udp # pfSense nat bouncing +19899 19899/tcp # pfSense nat bouncing +19899 19899/udp # pfSense nat bouncing +19900 19900/tcp # pfSense nat bouncing +19900 19900/udp # pfSense nat bouncing +19901 19901/tcp # pfSense nat bouncing +19901 19901/udp # pfSense nat bouncing +19902 19902/tcp # pfSense nat bouncing +19902 19902/udp # pfSense nat bouncing +19903 19903/tcp # pfSense nat bouncing +19903 19903/udp # pfSense nat bouncing +19904 19904/tcp # pfSense nat bouncing +19904 19904/udp # pfSense nat bouncing +19905 19905/tcp # pfSense nat bouncing +19905 19905/udp # pfSense nat bouncing +19906 19906/tcp # pfSense nat bouncing +19906 19906/udp # pfSense nat bouncing +19907 19907/tcp # pfSense nat bouncing +19907 19907/udp # pfSense nat bouncing +19908 19908/tcp # pfSense nat bouncing +19908 19908/udp # pfSense nat bouncing +19909 19909/tcp # pfSense nat bouncing +19909 19909/udp # pfSense nat bouncing +19910 19910/tcp # pfSense nat bouncing +19910 19910/udp # pfSense nat bouncing +19911 19911/tcp # pfSense nat bouncing +19911 19911/udp # pfSense nat bouncing +19912 19912/tcp # pfSense nat bouncing +19912 19912/udp # pfSense nat bouncing +19913 19913/tcp # pfSense nat bouncing +19913 19913/udp # pfSense nat bouncing +19914 19914/tcp # pfSense nat bouncing +19914 19914/udp # pfSense nat bouncing +19915 19915/tcp # pfSense nat bouncing +19915 19915/udp # pfSense nat bouncing +19916 19916/tcp # pfSense nat bouncing +19916 19916/udp # pfSense nat bouncing +19917 19917/tcp # pfSense nat bouncing +19917 19917/udp # pfSense nat bouncing +19918 19918/tcp # pfSense nat bouncing +19918 19918/udp # pfSense nat bouncing +19919 19919/tcp # pfSense nat bouncing +19919 19919/udp # pfSense nat bouncing +19920 19920/tcp # pfSense nat bouncing +19920 19920/udp # pfSense nat bouncing +19921 19921/tcp # pfSense nat bouncing +19921 19921/udp # pfSense nat bouncing +19922 19922/tcp # pfSense nat bouncing +19922 19922/udp # pfSense nat bouncing +19923 19923/tcp # pfSense nat bouncing +19923 19923/udp # pfSense nat bouncing +19924 19924/tcp # pfSense nat bouncing +19924 19924/udp # pfSense nat bouncing +19925 19925/tcp # pfSense nat bouncing +19925 19925/udp # pfSense nat bouncing +19926 19926/tcp # pfSense nat bouncing +19926 19926/udp # pfSense nat bouncing +19927 19927/tcp # pfSense nat bouncing +19927 19927/udp # pfSense nat bouncing +19928 19928/tcp # pfSense nat bouncing +19928 19928/udp # pfSense nat bouncing +19929 19929/tcp # pfSense nat bouncing +19929 19929/udp # pfSense nat bouncing +19930 19930/tcp # pfSense nat bouncing +19930 19930/udp # pfSense nat bouncing +19931 19931/tcp # pfSense nat bouncing +19931 19931/udp # pfSense nat bouncing +19932 19932/tcp # pfSense nat bouncing +19932 19932/udp # pfSense nat bouncing +19933 19933/tcp # pfSense nat bouncing +19933 19933/udp # pfSense nat bouncing +19934 19934/tcp # pfSense nat bouncing +19934 19934/udp # pfSense nat bouncing +19935 19935/tcp # pfSense nat bouncing +19935 19935/udp # pfSense nat bouncing +19936 19936/tcp # pfSense nat bouncing +19936 19936/udp # pfSense nat bouncing +19937 19937/tcp # pfSense nat bouncing +19937 19937/udp # pfSense nat bouncing +19938 19938/tcp # pfSense nat bouncing +19938 19938/udp # pfSense nat bouncing +19939 19939/tcp # pfSense nat bouncing +19939 19939/udp # pfSense nat bouncing +19940 19940/tcp # pfSense nat bouncing +19940 19940/udp # pfSense nat bouncing +19941 19941/tcp # pfSense nat bouncing +19941 19941/udp # pfSense nat bouncing +19942 19942/tcp # pfSense nat bouncing +19942 19942/udp # pfSense nat bouncing +19943 19943/tcp # pfSense nat bouncing +19943 19943/udp # pfSense nat bouncing +19944 19944/tcp # pfSense nat bouncing +19944 19944/udp # pfSense nat bouncing +19945 19945/tcp # pfSense nat bouncing +19945 19945/udp # pfSense nat bouncing +19946 19946/tcp # pfSense nat bouncing +19946 19946/udp # pfSense nat bouncing +19947 19947/tcp # pfSense nat bouncing +19947 19947/udp # pfSense nat bouncing +19948 19948/tcp # pfSense nat bouncing +19948 19948/udp # pfSense nat bouncing +19949 19949/tcp # pfSense nat bouncing +19949 19949/udp # pfSense nat bouncing +19950 19950/tcp # pfSense nat bouncing +19950 19950/udp # pfSense nat bouncing +19951 19951/tcp # pfSense nat bouncing +19951 19951/udp # pfSense nat bouncing +19952 19952/tcp # pfSense nat bouncing +19952 19952/udp # pfSense nat bouncing +19953 19953/tcp # pfSense nat bouncing +19953 19953/udp # pfSense nat bouncing +19954 19954/tcp # pfSense nat bouncing +19954 19954/udp # pfSense nat bouncing +19955 19955/tcp # pfSense nat bouncing +19955 19955/udp # pfSense nat bouncing +19956 19956/tcp # pfSense nat bouncing +19956 19956/udp # pfSense nat bouncing +19957 19957/tcp # pfSense nat bouncing +19957 19957/udp # pfSense nat bouncing +19958 19958/tcp # pfSense nat bouncing +19958 19958/udp # pfSense nat bouncing +19959 19959/tcp # pfSense nat bouncing +19959 19959/udp # pfSense nat bouncing +19960 19960/tcp # pfSense nat bouncing +19960 19960/udp # pfSense nat bouncing +19961 19961/tcp # pfSense nat bouncing +19961 19961/udp # pfSense nat bouncing +19962 19962/tcp # pfSense nat bouncing +19962 19962/udp # pfSense nat bouncing +19963 19963/tcp # pfSense nat bouncing +19963 19963/udp # pfSense nat bouncing +19964 19964/tcp # pfSense nat bouncing +19964 19964/udp # pfSense nat bouncing +19965 19965/tcp # pfSense nat bouncing +19965 19965/udp # pfSense nat bouncing +19966 19966/tcp # pfSense nat bouncing +19966 19966/udp # pfSense nat bouncing +19967 19967/tcp # pfSense nat bouncing +19967 19967/udp # pfSense nat bouncing +19968 19968/tcp # pfSense nat bouncing +19968 19968/udp # pfSense nat bouncing +19969 19969/tcp # pfSense nat bouncing +19969 19969/udp # pfSense nat bouncing +19970 19970/tcp # pfSense nat bouncing +19970 19970/udp # pfSense nat bouncing +19971 19971/tcp # pfSense nat bouncing +19971 19971/udp # pfSense nat bouncing +19972 19972/tcp # pfSense nat bouncing +19972 19972/udp # pfSense nat bouncing +19973 19973/tcp # pfSense nat bouncing +19973 19973/udp # pfSense nat bouncing +19974 19974/tcp # pfSense nat bouncing +19974 19974/udp # pfSense nat bouncing +19975 19975/tcp # pfSense nat bouncing +19975 19975/udp # pfSense nat bouncing +19976 19976/tcp # pfSense nat bouncing +19976 19976/udp # pfSense nat bouncing +19977 19977/tcp # pfSense nat bouncing +19977 19977/udp # pfSense nat bouncing +19978 19978/tcp # pfSense nat bouncing +19978 19978/udp # pfSense nat bouncing +19979 19979/tcp # pfSense nat bouncing +19979 19979/udp # pfSense nat bouncing +19980 19980/tcp # pfSense nat bouncing +19980 19980/udp # pfSense nat bouncing +19981 19981/tcp # pfSense nat bouncing +19981 19981/udp # pfSense nat bouncing +19982 19982/tcp # pfSense nat bouncing +19982 19982/udp # pfSense nat bouncing +19983 19983/tcp # pfSense nat bouncing +19983 19983/udp # pfSense nat bouncing +19984 19984/tcp # pfSense nat bouncing +19984 19984/udp # pfSense nat bouncing +19985 19985/tcp # pfSense nat bouncing +19985 19985/udp # pfSense nat bouncing +19986 19986/tcp # pfSense nat bouncing +19986 19986/udp # pfSense nat bouncing +19987 19987/tcp # pfSense nat bouncing +19987 19987/udp # pfSense nat bouncing +19988 19988/tcp # pfSense nat bouncing +19988 19988/udp # pfSense nat bouncing +19989 19989/tcp # pfSense nat bouncing +19989 19989/udp # pfSense nat bouncing +19990 19990/tcp # pfSense nat bouncing +19990 19990/udp # pfSense nat bouncing +19991 19991/tcp # pfSense nat bouncing +19991 19991/udp # pfSense nat bouncing +19992 19992/tcp # pfSense nat bouncing +19992 19992/udp # pfSense nat bouncing +19993 19993/tcp # pfSense nat bouncing +19993 19993/udp # pfSense nat bouncing +19994 19994/tcp # pfSense nat bouncing +19994 19994/udp # pfSense nat bouncing +19995 19995/tcp # pfSense nat bouncing +19995 19995/udp # pfSense nat bouncing +19996 19996/tcp # pfSense nat bouncing +19996 19996/udp # pfSense nat bouncing +19997 19997/tcp # pfSense nat bouncing +19997 19997/udp # pfSense nat bouncing +19998 19998/tcp # pfSense nat bouncing +19998 19998/udp # pfSense nat bouncing +19999 19999/tcp # pfSense nat bouncing +19999 19999/udp # pfSense nat bouncing +dbbrowse 47557/tcp #Databeam Corporation +dbbrowse 47557/udp #Databeam Corporation +wnn4 22273/tcp #Wnn4 (Japanese input) +wnn4_Cn 22289/tcp #Wnn4 (Chinese input) +wnn4_Tw 22321/tcp #Wnn4 (Taiwanse input) +wnn4_Kr 22305/tcp #Wnn4 (Korean input) +wnn6 22273/tcp #Wnn6 (Japanese input) +wnn6_Cn 22289/tcp #Wnn6 (Chinese input) +wnn6_Tw 22321/tcp #Wnn6 (Taiwanse input) +wnn6_Kr 22305/tcp #Wnn6 (Korean input) +wnn6_DS 26208/tcp #Wnn6 (Dserver) diff --git a/usr/etc/shells b/usr/etc/shells new file mode 100644 index 000000000..3ccb4dc21 --- /dev/null +++ b/usr/etc/shells @@ -0,0 +1,12 @@ +# $FreeBSD: src/etc/shells,v 1.5 2000/04/27 21:58:46 ache Exp $ +# +# List of acceptable shells for chpass(1). +# Ftpd will not allow users to connect who are not using +# one of these shells. + +/bin/sh +/bin/csh +/bin/tcsh +/etc/rc.initial +/usr/local/sbin/ssh_tunnel_shell + diff --git a/usr/etc/skel/dot.tcshrc b/usr/etc/skel/dot.tcshrc new file mode 100644 index 000000000..cd20f2dcc --- /dev/null +++ b/usr/etc/skel/dot.tcshrc @@ -0,0 +1,21 @@ +set prompt="%{\033[0;1;33m%}[%{\033[0;1;37m%}`cat /etc/version`%{\033[0;1;33m%}]%{\033[0;1;33m%}%B[%{\033[0;1;37m%}%n%{\033[0;1;31m%}@%{\033[0;1;37m%}%M%{\033[0;1;33m%}]%{\033[0;1;32m%}%b%/%{\033[0;1;33m%}(%{\033[0;1;37m%}%h%{\033[0;1;33m%})%{\033[0;1;36m%}%{\033[0;1;31m%}:%{\033[0;0;0m%} " +set autologout="0" +set autolist set color set colorcat +setenv CLICOLOR "true" +setenv LSCOLORS "exfxcxdxbxegedabagacad" +if ($term == "xterm" || $term == "vt100" || $term == "vt102" || $term == "vt220" || $term !~ "con*") then + bindkey "\e[2~" overwrite-mode # Ins + bindkey "\e[3~" delete-char # Del + + bindkey "\e[1~" beginning-of-line # Home vt + bindkey "\e[4~" end-of-line # End vt + + bindkey "\eOH" beginning-of-line # Home vt220 + bindkey "\eOF" end-of-line # End vt220 + + bindkey "\e[H" beginning-of-line # Home kvt + bindkey "\e[F" end-of-line # End kvt + + bindkey "\e[7~" beginning-of-line # Home rxvt/konsole + bindkey "\e[8~" end-of-line # End rxvt/konsole +endif diff --git a/usr/etc/ssh/sshd_config b/usr/etc/ssh/sshd_config new file mode 100644 index 000000000..f2f288be7 --- /dev/null +++ b/usr/etc/ssh/sshd_config @@ -0,0 +1,103 @@ +# $OpenBSD: sshd_config,v 1.68 2003/12/29 16:39:50 millert Exp $ +# $FreeBSD: src/crypto/openssh/sshd_config,v 1.40 2004/04/20 09:37:29 des Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options change a +# default value. + +# Note that some of FreeBSD's defaults differ from OpenBSD's, and +# FreeBSD has a few additional options. + +#VersionAddendum FreeBSD-20040419 + +#Port 22 +#Protocol 2 +#ListenAddress 0.0.0.0 +#ListenAddress :: + +# HostKey for protocol version 1 +#HostKey /etc/ssh/ssh_host_key +# HostKeys for protocol version 2 +#HostKey /etc/ssh/ssh_host_dsa_key + +# Lifetime and size of ephemeral version 1 server key +#KeyRegenerationInterval 1h +#ServerKeyBits 768 + +# Logging +#obsoletes QuietMode and FascistLogging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +PermitRootLogin yes +#StrictModes yes + +#RSAAuthentication yes +#PubkeyAuthentication yes +#AuthorizedKeysFile .ssh/authorized_keys + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#RhostsRSAAuthentication no +# similar for protocol version 2 +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# RhostsRSAAuthentication and HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# Change to yes to enable built-in password authentication. +#PasswordAuthentication no +#PermitEmptyPasswords no + +# Change to no to disable PAM authentication +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'no' to disable PAM authentication (via challenge-response) +# and session processing. +#UsePAM yes + +#AllowTcpForwarding yes +#GatewayPorts no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#UseLogin no +#UsePrivilegeSeparation yes +#PermitUserEnvironment no + +#PidFile /var/run/sshd.pid +#MaxStartups 10 + +# no default banner path +#Banner /some/path + +Compression yes +ClientAliveInterval 30 +ClientAliveCountMax 5 +UseDNS no +X11Forwarding no + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server diff --git a/usr/etc/sshd b/usr/etc/sshd new file mode 100755 index 000000000..90401698d --- /dev/null +++ b/usr/etc/sshd @@ -0,0 +1,204 @@ +#!/usr/local/bin/php -f +. + 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. +*/ + + require_once("globals.inc"); + require_once("config.inc"); + require_once("functions.inc"); + require_once("shaper.inc"); + + if (!isset($config['system']['enablesshd'])) { + return; + } + + /* are we already running? if not, do conf_mount_rw(), otherwise it should already be rw */ + if (!is_subsystem_dirty('sshdkeys')) { + conf_mount_rw(); + } + + $keys = array( + 'ssh_host_key', + 'ssh_host_key.pub', + 'ssh_host_dsa_key', + 'ssh_host_dsa_key.pub', + 'ssh_host_rsa_key', + 'ssh_host_rsa_key.pub', + 'ssh_host_ecdsa_key', + 'ssh_host_ecdsa_key.pub', + 'ssh_host_ed25519_key', + 'ssh_host_ed25519_key.pub' + ); + + /* restore ssh data for nanobsd platform */ + if($g['platform'] == "nanobsd" and file_exists("/conf/sshd/ssh_host_key") and !file_exists("/etc/ssh/ssh_host_key.pub")) { + echo "Restoring SSH from /conf/sshd/"; + exec("/bin/cp -p /conf/sshd/* /etc/ssh/"); + + /* make sure host private key permissions aren't too open so sshd won't complain */ + foreach($keys as $f2c) { + if(file_exists("/etc/ssh/{$f2c}")) + chmod("/etc/ssh/{$f2c}", 0600); + } + } + + /* if any of these files are 0 bytes then they are corrupted. + * remove them + */ + foreach($keys as $f2c) { + if (file_exists("/etc/ssh/{$f2c}") && filesize("/etc/ssh/{$f2c}") == 0) { + unlink_if_exists('/etc/ssh/ssh_host*'); + break; + } + } + + if (!is_dir("/var/empty")) { + /* make ssh home directory */ + mkdir("/var/empty", 0555); + } + + if(!file_exists("/var/log/lastlog")) { + /* Login related files. */ + @touch("/var/log/lastlog"); + } + + $sshConfigDir = "/etc/ssh"; + + if (is_array($config['system']['ssh']) && !empty($config['system']['ssh']['port'])) + $sshport = $config['system']['ssh']['port']; + else + $sshport = 22; + + /* Include default configuration for pfSense */ + $sshconf = "# This file is automatically generated at startup\n"; + $sshconf .= "Ciphers aes128-ctr,aes256-ctr,arcfour256,arcfour,aes128-cbc,aes256-cbc\n"; + $sshconf .= "PermitRootLogin yes\n"; + $sshconf .= "Compression yes\n"; + $sshconf .= "ClientAliveInterval 30\n"; + $sshconf .= "UseDNS no\n"; + $sshconf .= "X11Forwarding no\n"; + if (isset($config['system']['ssh']['sshdkeyonly'])) { + $sshconf .= "# Login via Key only\n"; + $sshconf .= "PasswordAuthentication no\n"; + $sshconf .= "ChallengeResponseAuthentication no\n"; + $sshconf .= "PubkeyAuthentication yes\n"; + } else { + $sshconf .= "# Login via Key and Password\n"; + $sshconf .= "PasswordAuthentication yes\n"; + $sshconf .= "ChallengeResponseAuthentication yes\n"; + $sshconf .= "PubkeyAuthentication yes\n"; + } + $sshconf .= "# override default of no subsystems\n"; + $sshconf .= "Subsystem sftp /usr/libexec/sftp-server\n"; + /* Only allow protocol 2, because we say so */ + $sshconf .= "Protocol 2\n"; + /* Run the server on another port if we have one defined */ + $sshconf .= "Port $sshport\n"; + /* Hide FreeBSD version */ + $sshconf .= "VersionAddendum \n"; + + /* Apply package SSHDCond settings if config file exists */ + if (file_exists("/etc/sshd_extra")) { + $fdExtra = fopen("/etc/sshd_extra", 'r'); + $szExtra = fread($fdExtra, 1048576); // Read up to 1MB from extra file + $sshconf .= $szExtra; + fclose($fdExtra); + } + + /* Write the new sshd config file */ + @file_put_contents("/etc/ssh/sshd_config", $sshconf); + + /* mop up from a badly implemented ssh keys -> cf backup */ + if($config['ssh']['dsa_key'] <> "") { + unset($config['ssh']['dsa_key']); + unset($config['ssh']['ecdsa_key']); + unset($config['ssh']['ed25519_key']); + unset($config['ssh']['rsa_key']); + unset($config['ssh']['rsa1_key']); + unset($config['ssh']['dsa']); + unset($config['ssh']['rsa']); + unset($config['ssh']['rsa1']); + unset($config['ssh']['ak']); + write_config("Clearing SSH keys from config.xml"); + } + + /* are we already running? if so exit */ + if(is_subsystem_dirty('sshdkeys')) { + unset($keys); + return; + } + + // Check for all needed key files. If any are missing, the keys need to be regenerated. + $generate_keys = false; + foreach ($keys as $f2c) { + if (!file_exists("/etc/ssh/{$f2c}")) { + $generate_keys = true; + break; + } + } + + if ($generate_keys) { + /* remove previous keys and regen later */ + file_notice("SSH", "{$g['product_name']} has started creating your SSH keys. SSH Startup will be delayed. Please note that reloading the filter rules and changes will be delayed until this operation is completed.", "SSH KeyGen", ""); + unlink_if_exists('/etc/ssh/ssh_host_*'); + mark_subsystem_dirty('sshdkeys'); + echo " Generating Keys:\n"; + $_gb = exec("/usr/bin/nice -n20 /usr/bin/ssh-keygen -t rsa1 -N '' -f $sshConfigDir/ssh_host_key"); + $_gb = exec("/usr/bin/nice -n20 /usr/bin/ssh-keygen -t rsa -N '' -f $sshConfigDir/ssh_host_rsa_key"); + $_gb = exec("/usr/bin/nice -n20 /usr/bin/ssh-keygen -t dsa -N '' -f $sshConfigDir/ssh_host_dsa_key"); + $_gb = exec("/usr/bin/nice -n20 /usr/bin/ssh-keygen -t ecdsa -N '' -f $sshConfigDir/ssh_host_ecdsa_key"); + $_gb = exec("/usr/bin/nice -n20 /usr/bin/ssh-keygen -t ed25519 -N '' -f $sshConfigDir/ssh_host_ed25519_key"); + clear_subsystem_dirty('sshdkeys'); + file_notice("SSH", "{$g['product_name']} has completed creating your SSH keys. SSH is now started.", "SSH Startup", ""); + } + + /* kill existing sshd process, server only, not the childs */ + $sshd_pid = exec("ps ax | egrep '/usr/sbin/[s]shd' | awk '{print $1}'"); + if($sshd_pid <> "") { + echo "stopping ssh process $sshd_pid \n"; + @posix_kill($sshd_pid, SIGTERM); + } + /* Launch new server process */ + $status = mwexec("/usr/sbin/sshd"); + if($status <> 0) { + file_notice("sshd_startup", "SSHD failed to start.", "SSHD Daemon", ""); + echo "error!\n"; + } else { + echo "done.\n"; + } + + // NanoBSD + if($g['platform'] == "nanobsd") { + if(!is_dir("/conf/sshd")) + mkdir("/conf/sshd", 0750); + $_gb = exec("/bin/cp -p /etc/ssh/ssh_host* /conf/sshd"); + } + conf_mount_ro(); + unset($keys); +?> diff --git a/usr/etc/ssl/openssl.cnf b/usr/etc/ssl/openssl.cnf new file mode 100644 index 000000000..5f612fbd3 --- /dev/null +++ b/usr/etc/ssl/openssl.cnf @@ -0,0 +1,309 @@ +# $FreeBSD: src/crypto/openssl/apps/openssl.cnf,v 1.6 2004/03/17 17:44:38 nectar Exp $ +# +# OpenSSL example configuration file. +# This is mostly being used for generation of certificate requests. +# +# +# This definition stops the following lines choking if HOME isn't +# defined. +HOME = . +RANDFILE = $ENV::HOME/.rnd + +# default SAN value if $ENV::SAN is not defined +# +SAN = + +# Extra OBJECT IDENTIFIER info: +#oid_file = $ENV::HOME/.oid +oid_section = new_oids + +# To use this configuration file with the "-extfile" option of the +# "openssl x509" utility, name here the section containing the +# X.509v3 extensions to use: +# extensions = +# (Alternatively, use a configuration file that has only +# X.509v3 extensions in its main [= default] section.) + +[ new_oids ] + +# We can add new OIDs in here for use by 'ca' and 'req'. +# Add a simple OID like this: +# testoid1=1.2.3.4 +# Or use config file substitution like this: +# testoid2=${testoid1}.5.6 + +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +[ CA_default ] + +dir = ./demoCA # Where everything is kept +certs = $dir/certs # Where the issued certs are kept +crl_dir = $dir/crl # Where the issued crl are kept +database = $dir/index.txt # database index file. +#unique_subject = no # Set to 'no' to allow creation of + # several ctificates with same subject. +new_certs_dir = $dir/newcerts # default place for new certs. + +certificate = $dir/cacert.pem # The CA certificate +serial = $dir/serial # The current serial number +#crlnumber = $dir/crlnumber # the current crl number + # must be commented out to leave a V1 CRL +crl = $dir/crl.pem # The current CRL +private_key = $dir/private/cakey.pem# The private key +RANDFILE = $dir/private/.rand # private random number file + +x509_extensions = usr_cert # The extentions to add to the cert + +# Comment out the following two lines for the "traditional" +# (and highly broken) format. +name_opt = ca_default # Subject Name options +cert_opt = ca_default # Certificate field options + +# Extension copying option: use with caution. +# copy_extensions = copy + +# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs +# so this is commented out by default to leave a V1 CRL. +# crlnumber must also be commented out to leave a V1 CRL. +# crl_extensions = crl_ext + +default_days = 365 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = md5 # which md to use. +preserve = no # keep passed DN ordering + +# A few difference way of specifying how similar the request should look +# For type CA, the listed attributes must be the same, and the optional +# and supplied fields are just that :-) +policy = policy_match + +# For the CA policy +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +# For the 'anything' policy +# At this point in time, you must list all acceptable 'object' +# types. +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ req ] +distinguished_name=req_distinguished_name +req_extensions = v3_req +prompt=no + +default_bits = 2048 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name +attributes = req_attributes +x509_extensions = v3_ca # The extentions to add to the self signed cert + +# Passwords for private keys if not present they will be prompted for +#input_password="" +#output_password="" + +# This sets a mask for permitted string types. There are several options. +# default: PrintableString, T61String, BMPString. +# pkix : PrintableString, BMPString. +# utf8only: only UTF8Strings. +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). +# MASK:XXXX a literal mask value. +# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings +# so use this option with caution! +string_mask = nombstr + +# req_extensions = v3_req # The extensions to add to a certificate request + +[ req_distinguished_name ] +countryName = US +#countryName_default = AU +#countryName_min = 2 +#countryName_max = 2 + +stateOrProvinceName = Somewhere +#stateOrProvinceName_default = Somestate + +localityName = Somecity + +0.organizationName = CompanyName +#0.organizationName_default = SampleNameDefault + +# we can do this but it is not needed normally :-) +#1.organizationName = Second Organization Name (eg, company) +#1.organizationName_default = World Wide Web Pty Ltd + +organizationalUnitName = Organizational Unit Name (eg, section) +#organizationalUnitName_default = + +commonName = Common Name (eg, YOUR name) +#commonName_max = 64 + +emailAddress = Email Address +#emailAddress_max = 64 + +# SET-ex3 = SET extension number 3 + +[ req_attributes ] +challengePassword = A challenge password +#challengePassword_min = 4 +#challengePassword_max = 20 + +unstructuredName = An optional company name + +[ usr_cert ] + +# These extensions are added when 'ca' signs a request. + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated User Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer:always + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +[ usr_cert_san ] + +# copy of [ usr_cert ] plus nonempty Subject Alternative Names +basicConstraints=CA:FALSE +nsComment = "OpenSSL Generated User Certificate" +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer:always +subjectAltName=$ENV::SAN + +[ server ] + +# Make a cert with nsCertType=server +basicConstraints=CA:FALSE +nsCertType = server +nsComment = "OpenSSL Generated Server Certificate" +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer:always +extendedKeyUsage=serverAuth +keyUsage = digitalSignature, keyEncipherment + +[ server_san ] + +# copy of [ server ] plus nonempty Subject Alternative Names +basicConstraints=CA:FALSE +nsCertType = server +nsComment = "OpenSSL Generated Server Certificate" +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer:always +extendedKeyUsage=serverAuth +keyUsage = digitalSignature, keyEncipherment +subjectAltName=$ENV::SAN + +[ v3_req ] + +# Extensions to add to a certificate request + +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v3_ca ] + + +# Extensions for a typical CA + + +# PKIX recommendation. + +subjectKeyIdentifier=hash + +authorityKeyIdentifier=keyid:always,issuer:always + +# This is what PKIX recommends but some broken software chokes on critical +# extensions. +#basicConstraints = critical,CA:true +# So we do this instead. +basicConstraints = CA:true + +# Key usage: this is typical for a CA certificate. However since it will +# prevent it being used as an test self-signed certificate it is best +# left out by default. +# keyUsage = cRLSign, keyCertSign + +# Some might want this also +# nsCertType = sslCA, emailCA + +# Include email address in subject alt name: another PKIX recommendation +# subjectAltName=email:copy +# Copy issuer details +# issuerAltName=issuer:copy + +# DER hex encoding of an extension: beware experts only! +# obj=DER:02:03 +# Where 'obj' is a standard or added object +# You can even override a supported extension: +# basicConstraints= critical, DER:30:03:01:01:FF + +[ v3_ca_san ] + +# copy of [ v3_ca ] plus nonempty Subject Alternative Names +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid:always,issuer:always +basicConstraints = CA:true +subjectAltName=$ENV::SAN + +[ crl_ext ] + +# CRL extensions. +# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. + +# issuerAltName=issuer:copy +authorityKeyIdentifier=keyid:always,issuer:always diff --git a/usr/etc/syslog.conf b/usr/etc/syslog.conf new file mode 100644 index 000000000..6f2953856 --- /dev/null +++ b/usr/etc/syslog.conf @@ -0,0 +1,12 @@ +local0.* %/var/log/filter.log +local3.* %/var/log/vpn.log +local4.* %/var/log/portalauth.log +local7.* %/var/log/dhcpd.log +local7.none %/var/log/system.log +kern.debug;lpr.info;mail.crit; %/var/log/system.log +news.err;local3.none;local4.none; %/var/log/system.log +*.notice; %/var/log/system.log +local0.none;daemon.info %/var/log/system.log +daemon.info;security.* %/var/log/ipsec.log +auth.info;authpriv.info %/var/log/system.log +auth.info;authpriv.info |exec /usr/local/sbin/sshlockout_pf diff --git a/usr/etc/ttys b/usr/etc/ttys new file mode 100644 index 000000000..f04ca75c8 --- /dev/null +++ b/usr/etc/ttys @@ -0,0 +1,49 @@ +# +# $FreeBSD: stable/10/etc/etc.amd64/ttys 267236 2014-06-08 17:50:07Z nwhitehorn $ +# @(#)ttys 5.1 (Berkeley) 4/17/89 +# +# This file specifies various information about terminals on the system. +# It is used by several different programs. Common entries for the +# various columns include: +# +# name The name of the terminal device. +# +# getty The program to start running on the terminal. Typically a +# getty program, as the name implies. Other common entries +# include none, when no getty is needed, and xdm, to start the +# X Window System. +# +# type The initial terminal type for this port. For hardwired +# terminal lines, this will contain the type of terminal used. +# For virtual consoles, the correct type is typically xterm. +# Other common values include dialup for incoming modem ports, and +# unknown when the terminal type cannot be predetermined. +# +# status Must be on or off. If on, init will run the getty program on +# the specified port. If the word "secure" appears, this tty +# allows root login. +# +# name getty type status comments +# +# If console is marked "insecure", then init will ask for the root password +# when going to single-user mode. +console none unknown off secure +# +ttyv0 "/usr/libexec/getty al.Pc" cons25 on secure +# Virtual terminals +ttyv1 "/usr/libexec/getty Pc" xterm off secure +ttyv2 "/usr/libexec/getty Pc" xterm off secure +ttyv3 "/usr/libexec/getty Pc" xterm off secure +ttyv4 "/usr/libexec/getty Pc" xterm off secure +ttyv5 "/usr/libexec/getty Pc" xterm off secure +ttyv6 "/usr/libexec/getty Pc" xterm off secure +ttyv7 "/usr/libexec/getty Pc" xterm off secure +ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure +# Serial terminals +# The 'dialup' keyword identifies dialin lines to login, fingerd etc. +ttyu0 "/usr/libexec/getty al.115200" cons25 on secure +ttyu1 "/usr/libexec/getty std.9600" dialup off secure +ttyu2 "/usr/libexec/getty std.9600" dialup off secure +ttyu3 "/usr/libexec/getty std.9600" dialup off secure +# Dumb console +dcons "/usr/libexec/getty std.9600" vt100 off secure diff --git a/usr/etc/version b/usr/etc/version new file mode 100644 index 000000000..7a0008a72 --- /dev/null +++ b/usr/etc/version @@ -0,0 +1 @@ +2.2-BETA diff --git a/usr/local/bin/3gstats.php b/usr/local/bin/3gstats.php new file mode 100755 index 000000000..02f1b170f --- /dev/null +++ b/usr/local/bin/3gstats.php @@ -0,0 +1,83 @@ +#!/usr/local/bin/php -f + 10) { + $csv = $header; + $csv .= implode(",", $record); + $csv .= "\n"; + file_put_contents($statfile, $csv); + $i = 0; + } + $i++; +} +fclose($handle); +?> diff --git a/usr/local/bin/beep.sh b/usr/local/bin/beep.sh new file mode 100755 index 000000000..29a918c1f --- /dev/null +++ b/usr/local/bin/beep.sh @@ -0,0 +1,43 @@ +#!/bin/sh + + +BEEP=`/usr/bin/grep -c disablebeep /conf/config.xml` +if [ $BEEP -gt 0 ]; then + exit; +fi + +# Standard note length +NOTELENGTH="25" + +# this is super annoying in VMware, exit if in VMware +if [ -f /var/log/dmesg.boot ]; then + VMWCOUNT=`/usr/bin/grep -c VMware /var/log/dmesg.boot` + if [ $VMWCOUNT -gt 0 ]; then + exit; + fi +fi + +# Check for different HZ +if [ -f /boot/loader.conf ]; then + HZ=`/usr/bin/grep -c kern.hz /boot/loader.conf` + if [ "$HZ" = "1" ]; then + NOTELENGTH="10" + fi +fi + +if [ -c "/dev/speaker" ]; then + if [ "$1" = "start" ]; then + /usr/local/bin/beep -p 500 $NOTELENGTH + /usr/local/bin/beep -p 400 $NOTELENGTH + /usr/local/bin/beep -p 600 $NOTELENGTH + /usr/local/bin/beep -p 800 $NOTELENGTH + /usr/local/bin/beep -p 800 $NOTELENGTH + fi + if [ "$1" = "stop" ]; then + /usr/local/bin/beep -p 600 $NOTELENGTH + /usr/local/bin/beep -p 800 $NOTELENGTH + /usr/local/bin/beep -p 500 $NOTELENGTH + /usr/local/bin/beep -p 400 $NOTELENGTH + /usr/local/bin/beep -p 400 $NOTELENGTH + fi +fi diff --git a/usr/local/bin/captiveportal_gather_stats.php b/usr/local/bin/captiveportal_gather_stats.php new file mode 100644 index 000000000..639edef59 --- /dev/null +++ b/usr/local/bin/captiveportal_gather_stats.php @@ -0,0 +1,110 @@ +#!/usr/local/bin/php -q + $previous_user_timestamp) + $current_user_count = $current_user_count + 1; + } + + // Write out the latest timestamp but not if it is empty + if (!empty($timestamp)) { + $fd = @fopen($tmpfile, "w"); + if ($fd) { + fwrite($fd, $timestamp); + } + @fclose($fd); + } + + /* If $timestamp is less than or equal to previous_user_timestamp return 0, + * as we only want the 'X' number of users logged in since last RRD poll. + */ + if($timestamp <= $previous_user_timestamp) + $result = 0; + else { + $result = $current_user_count; + } +} elseif ($type == "concurrent") + $result = $no_users; + +echo "$result"; + +?> diff --git a/usr/local/bin/easyrule b/usr/local/bin/easyrule new file mode 100755 index 000000000..9850aee7b --- /dev/null +++ b/usr/local/bin/easyrule @@ -0,0 +1,123 @@ +#!/usr/local/bin/php -q + $kdescr) { + $specialsrcdst[] = "{$kif}"; + $specialsrcdst[] = "{$kif}ip"; +} + +/* Borrow this function from guiconfig.inc since we can't include it for use at the CLI + + - Maybe these need to be moved to util.inc or pfsense-utils.inc? + +*/ +function pconfig_to_address(&$adr, $padr, $pmask, $pnot=false, $pbeginport=0, $pendport=0) { + + $adr = array(); + + if ($padr == "any") + $adr['any'] = true; + else if (is_specialnet($padr)) + $adr['network'] = $padr; + else { + $adr['address'] = $padr; + if ($pmask != 32) + $adr['address'] .= "/" . $pmask; + } + + if ($pnot) + $adr['not'] = true; + else + unset($adr['not']); + + if (($pbeginport != 0) && ($pbeginport != "any")) { + if ($pbeginport != $pendport) + $adr['port'] = $pbeginport . "-" . $pendport; + else + $adr['port'] = $pbeginport; + } + + if(is_alias($pbeginport)) { + $adr['port'] = $pbeginport; + } +} + +/* Borrow this one from guiconfig.inc also */ +function is_specialnet($net) { + global $specialsrcdst; + + if(!$net) + return false; + if (in_array($net, $specialsrcdst)) + return true; + else + return false; +} + + +if (($argc > 1) && !empty($argv[1])) { + $message = ""; + switch ($argv[1]) { + case 'block': + $message = easyrule_parse_block($argv[2], $argv[3]); + break; + case 'pass': + $message = easyrule_parse_pass($argv[2], $argv[3], $argv[4], $argv[5], $argv[6]); + break; + } + echo $message . "\n"; +} else { + // Print usage: + echo "usage:\n"; + echo " Blocking only requires an IP to block\n"; + echo " " . basename($argv[0]) . " block \n"; + echo "\n"; + echo " Passing requires more detail, as it must be as specific as possible. The destination port is optional if you're using a protocol without a port (e.g. ICMP, OSPF, etc).\n"; + echo " " . basename($argv[0]) . " pass [destination port]\n"; + echo "\n"; + echo " Block example:\n"; + echo " " . basename($argv[0]) . " block wan 1.2.3.4\n"; + echo "\n"; + echo " Pass example (protocol with port):\n"; + echo " " . basename($argv[0]) . " pass wan tcp 1.2.3.4 192.168.0.4 80\n"; + echo "\n"; + echo " Pass example (protocol without port):\n"; + echo " " . basename($argv[0]) . " pass wan icmp 1.2.3.4 192.168.0.4\n"; + echo "\n"; +} +?> \ No newline at end of file diff --git a/usr/local/bin/filterparser.php b/usr/local/bin/filterparser.php new file mode 100755 index 000000000..799a6e1f9 --- /dev/null +++ b/usr/local/bin/filterparser.php @@ -0,0 +1,57 @@ +#!/usr/local/bin/php -q +@.org + 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. + + A quick CLI log parser. + Examples: + clog /var/log/filter.log | tail -50 | /usr/local/www/filterparser.php + clog -f /var/log/filter.log | /usr/local/www/filterparser.php +*/ +/* + pfSense_MODULE: logs +*/ + +include_once("functions.inc"); +include_once("filter_log.inc"); + +$log = fopen("php://stdin", "r"); +$lastline = ""; +while(!feof($log)) { + $line = fgets($log); + $line = rtrim($line); + $flent = parse_filter_line(trim($line)); + if ($flent != "") { + $flags = (($flent['proto'] == "TCP") && !empty($flent['tcpflags'])) ? ":" . $flent['tcpflags'] : ""; + echo "{$flent['time']} {$flent['act']} {$flent['realint']} {$flent['proto']}{$flags} {$flent['src']} {$flent['dst']}\n"; + $flent = ""; + } +} +fclose($log); ?> diff --git a/usr/local/bin/mail.php b/usr/local/bin/mail.php new file mode 100755 index 000000000..a09f5c647 --- /dev/null +++ b/usr/local/bin/mail.php @@ -0,0 +1,24 @@ +#!/usr/local/bin/php -q + "") { + $subject = $options['s']; +} + + +$in = file("php://stdin"); +foreach($in as $line){ + $message .= "$line"; +} + +if (!empty($subject)) + send_smtp_message($message, $subject); +else + send_smtp_message($message); +?> \ No newline at end of file diff --git a/usr/local/bin/ping_hosts.sh b/usr/local/bin/ping_hosts.sh new file mode 100755 index 000000000..7126c9998 --- /dev/null +++ b/usr/local/bin/ping_hosts.sh @@ -0,0 +1,134 @@ +#!/bin/sh + +# pfSense ping helper +# written by Scott Ullrich +# (C)2006 Scott Ullrich +# All rights reserved. + +# Format of file should be deliminted by | +# Field 1: Source ip +# Field 2: Destination ip +# Field 3: Ping count +# Field 4: Script to run when service is down +# Field 5: Script to run once service is restored +# Field 6: Ping time threshold +# Field 7: Wan ping time threshold +# Field 8: Address family + +# Read in ipsec ping hosts and check the CARP status +if [ -f /var/db/ipsecpinghosts ]; then + IPSECHOSTS="/var/db/ipsecpinghosts" + CURRENTIPSECHOSTS="/var/db/currentipsecpinghosts" + IFVPNSTATE=`ifconfig $IFVPN | grep "carp: BACKUP vhid" | wc -l` + if [ $IFVPNSTATE -gt 1 ]; then + echo -e "CARP interface in BACKUP (not pinging ipsec hosts)" + rm -f $CURRENTIPSECHOSTS + touch $CURRENTIPSECHOSTS + else + echo -e "CARP interface is MASTER or non CARP (pinging ipsec hosts)" + cat < $IPSECHOSTS > $CURRENTIPSECHOSTS + fi +fi + +# General file meant for user consumption +if [ -f /var/db/hosts ]; then + HOSTS="/var/db/hosts" +fi + +# Package specific ping requests +if [ -f /var/db/pkgpinghosts ]; then + PKGHOSTS="/var/db/pkgpinghosts" +fi + +cat $PKGHOSTS $HOSTS $IPSECHOSTS >/tmp/tmpHOSTS + +if [ ! -d /var/db/pingstatus ]; then + /bin/mkdir -p /var/db/pingstatus +fi + +if [ ! -d /var/db/pingmsstatus ]; then + /bin/mkdir -p /var/db/pingmsstatus +fi + +PINGHOSTS=`cat /tmp/tmpHOSTS` + +PINGHOSTCOUNT=`cat /tmp/tmpHOSTS | wc -l` + +if [ "$PINGHOSTCOUNT" -lt "1" ]; then + exit +fi + +for TOPING in $PINGHOSTS ; do + echo "PROCESSING $TOPING" + SRCIP=`echo $TOPING | cut -d"|" -f1` + DSTIP=`echo $TOPING | cut -d"|" -f2` + COUNT=`echo $TOPING | cut -d"|" -f3` + FAILURESCRIPT=`echo $TOPING | cut -d"|" -f4` + SERVICERESTOREDSCRIPT=`echo $TOPING | cut -d"|" -f5` + THRESHOLD=`echo $TOPING | cut -d"|" -f6` + WANTHRESHOLD=`echo $TOPING | cut -d"|" -f7` + AF=`echo $TOPING | cut -d"|" -f8` + if [ "$AF" == "inet6" ]; then + PINGCMD=ping6 + else + PINGCMD=ping + fi + echo Processing $DSTIP + # Look for a service being down + # Read in previous status + PREVIOUSSTATUS="" + if [ -f "/var/db/pingstatus/${DSTIP}" ]; then + PREVIOUSSTATUS=`cat /var/db/pingstatus/$DSTIP` + fi + $PINGCMD -c $COUNT -S $SRCIP $DSTIP + if [ $? -eq 0 ]; then + # Host is up + if [ "$PREVIOUSSTATUS" != "UP" ]; then + # Service restored + echo "UP" > /var/db/pingstatus/$DSTIP + if [ "$SERVICERESTOREDSCRIPT" != "" ]; then + echo "$DSTIP is UP, previous state was DOWN .. Running $SERVICERESTOREDSCRIPT" + echo "$DSTIP is UP, previous state was DOWN .. Running $SERVICERESTOREDSCRIPT" | logger -p daemon.info -i -t PingMonitor + sh -c $SERVICERESTOREDSCRIPT + fi + fi + else + # Host is down + if [ "$PREVIOUSSTATUS" != "DOWN" ]; then + # Service is down + echo "DOWN" > /var/db/pingstatus/$DSTIP + if [ "$FAILURESCRIPT" != "" ]; then + echo "$DSTIP is DOWN, previous state was UP .. Running $FAILURESCRIPT" + echo "$DSTIP is DOWN, previous state was UP .. Running $FAILURESCRIPT" | logger -p daemon.info -i -t PingMonitor + sh -c $FAILURESCRIPT + fi + fi + fi + echo "Checking ping time $DSTIP" + # Look at ping values themselves + PINGTIME=`$PINGCMD -c 1 -S $SRCIP $DSTIP | awk '{ print $7 }' | grep time | cut -d "=" -f2` + echo "Ping returned $?" + echo $PINGTIME > /var/db/pingmsstatus/$DSTIP + if [ "$THRESHOLD" != "" ]; then + if [ $(echo "${PINGTIME} > ${THRESHOLD}" | /usr/bin/bc) -eq 1 ]; then + echo "$DSTIP has exceeded ping threshold $PINGTIME / $THRESHOLD .. Running $FAILURESCRIPT" + echo "$DSTIP has exceeded ping threshold $PINGTIME / $THRESHOLD .. Running $FAILURESCRIPT" | logger -p daemon.info -i -t PingMonitor + sh -c $FAILURESCRIPT + fi + fi + # Wan ping time threshold + #WANTIME=`rrdtool fetch /var/db/rrd/wan-quality.rrd AVERAGE -r 120 -s -1min -e -1min | grep ":" | cut -f3 -d" " | cut -d"e" -f1` + echo "Checking wan ping time $WANTIME" + echo $WANTIME > /var/db/wanaverage + if [ "$WANTHRESHOLD" != "" -a "$WANTIME" != "" ]; then + if [ $(echo "${WANTIME} > ${WANTHRESHOLD}" | /usr/bin/bc) -eq 1 ]; then + echo "$DSTIP has exceeded wan ping threshold $WANTIME / $WANTHRESHOLD .. Running $FAILURESCRIPT" + echo "$DSTIP has exceeded wan ping threshold $WANTIME / $WANTHRESHOLD .. Running $FAILURESCRIPT" | logger -p daemon.info -i -t PingMonitor + sh -c $FAILURESCRIPT + fi + fi + sleep 1 +done + +exit 0 + diff --git a/usr/local/bin/runmsntp.sh b/usr/local/bin/runmsntp.sh new file mode 100755 index 000000000..d7706323c --- /dev/null +++ b/usr/local/bin/runmsntp.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# write our PID to file +echo $$ > $1 + +# execute msntp in endless loop; restart if it +# exits (wait 1 second to avoid restarting too fast in case +# the network is not yet setup) +while true; do + /usr/local/bin/msntp -v -r -P no -l $2 -x $3 $4 2>&1 | logger -p daemon.info -i -t msntp + sleep 60 +done diff --git a/usr/local/bin/slowdownpipe.sh b/usr/local/bin/slowdownpipe.sh new file mode 100755 index 000000000..13b9e8d93 --- /dev/null +++ b/usr/local/bin/slowdownpipe.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# Illustrates use of a while loop to read a file + +cat - | \ +while read line +do + echo "$line" + sleep 0.01 +done diff --git a/usr/local/bin/viconfig b/usr/local/bin/viconfig new file mode 100755 index 000000000..93618f28f --- /dev/null +++ b/usr/local/bin/viconfig @@ -0,0 +1,3 @@ +#!/bin/sh +vi /cf/conf/config.xml +rm /tmp/config.cache \ No newline at end of file diff --git a/usr/local/captiveportal/index.php b/usr/local/captiveportal/index.php new file mode 100644 index 000000000..83cd33394 --- /dev/null +++ b/usr/local/captiveportal/index.php @@ -0,0 +1,244 @@ +. + 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. +*/ +/* + pfSense_MODULE: captiveportal +*/ + +require_once("auth.inc"); +require_once("functions.inc"); +require_once("captiveportal.inc"); + +$errormsg = "Invalid credentials specified."; + +header("Expires: 0"); +header("Cache-Control: no-store, no-cache, must-revalidate"); +header("Cache-Control: post-check=0, pre-check=0", false); +header("Pragma: no-cache"); +header("Connection: close"); + +global $cpzone, $cpzoneid; + +$cpzone = $_REQUEST['zone']; +$cpcfg = $config['captiveportal'][$cpzone]; +if (empty($cpcfg)) { + log_error("Submission to captiveportal with unkown parameter zone: " . htmlspecialchars($cpzone)); + portal_reply_page($redirurl, "error", $errormsg); + ob_flush(); + return; +} + +$cpzoneid = $cpcfg['zoneid']; + +$orig_host = $_SERVER['HTTP_HOST']; +/* NOTE: IE 8/9 is buggy and that is why this is needed */ +$orig_request = trim($_REQUEST['redirurl'], " /"); +$clientip = $_SERVER['REMOTE_ADDR']; + +if (!$clientip) { + /* not good - bail out */ + log_error("Zone: {$cpzone} - Captive portal could not determine client's IP address."); + $error_message = "An error occurred. Please check the system logs for more information."; + portal_reply_page($redirurl, "error", $errormsg); + ob_flush(); + return; +} + +$ourhostname = portal_hostname_from_client_ip($clientip); +if ($orig_host != $ourhostname) { + /* the client thinks it's connected to the desired web server, but instead + it's connected to us. Issue a redirect... */ + $protocol = (isset($cpcfg['httpslogin'])) ? 'https://' : 'http://'; + header("Location: {$protocol}{$ourhostname}/index.php?zone={$cpzone}&redirurl=" . urlencode("http://{$orig_host}/{$orig_request}")); + + ob_flush(); + return; +} + +if (!empty($cpcfg['redirurl'])) + $redirurl = $cpcfg['redirurl']; +else if (preg_match("/redirurl=(.*)/", $orig_request, $matches)) + $redirurl = urldecode($matches[1]); +else if ($_REQUEST['redirurl']) + $redirurl = $_REQUEST['redirurl']; + +$macfilter = !isset($cpcfg['nomacfilter']); +$passthrumac = isset($cpcfg['passthrumacadd']); + +/* find MAC address for client */ +if ($macfilter || $passthrumac) { + $tmpres = pfSense_ip_to_mac($clientip); + if (!is_array($tmpres)) { + /* unable to find MAC address - shouldn't happen! - bail out */ + captiveportal_logportalauth("unauthenticated","noclientmac",$clientip,"ERROR"); + echo "An error occurred. Please check the system logs for more information."; + log_error("Zone: {$cpzone} - Captive portal could not determine client's MAC address. Disable MAC address filtering in captive portal if you do not need this functionality."); + ob_flush(); + return; + } + $clientmac = $tmpres['macaddr']; + unset($tmpres); +} + +/* find out if we need RADIUS + RADIUSMAC or not */ +if (file_exists("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db")) { + $radius_enable = TRUE; + if (isset($cpcfg['radmac_enable'])) + $radmac_enable = TRUE; +} + +/* find radius context */ +$radiusctx = 'first'; +if ($_POST['auth_user2']) + $radiusctx = 'second'; + +if ($_POST['logout_id']) { + echo << +Disconnecting... + + +You have been disconnected. + + + + + +EOD; + captiveportal_disconnect_client($_POST['logout_id']); + +} else if ($macfilter && $clientmac && captiveportal_blocked_mac($clientmac)) { + captiveportal_logportalauth($clientmac,$clientmac,$clientip,"Blocked MAC address"); + if (!empty($cpcfg['blockedmacsurl'])) + portal_reply_page($cpcfg['blockedmacsurl'], "redir"); + else + portal_reply_page($redirurl, "error", "This MAC address has been blocked"); + +} else if ($clientmac && $radmac_enable && portal_mac_radius($clientmac,$clientip, $radiusctx)) { + /* radius functions handle everything so we exit here since we're done */ + +} else if (portal_consume_passthrough_credit($clientmac)) { + /* allow the client through if it had a pass-through credit for its MAC */ + captiveportal_logportalauth("unauthenticated",$clientmac,$clientip,"ACCEPT"); + portal_allow($clientip, $clientmac, "unauthenticated"); + +} else if (isset($config['voucher'][$cpzone]['enable']) && $_POST['accept'] && $_POST['auth_voucher']) { + $voucher = trim($_POST['auth_voucher']); + $timecredit = voucher_auth($voucher); + // $timecredit contains either a credit in minutes or an error message + if ($timecredit > 0) { // voucher is valid. Remaining minutes returned + // if multiple vouchers given, use the first as username + $a_vouchers = preg_split("/[\t\n\r ]+/s",$voucher); + $voucher = $a_vouchers[0]; + $attr = array( 'voucher' => 1, + 'session_timeout' => $timecredit*60, + 'session_terminate_time' => 0); + if (portal_allow($clientip, $clientmac,$voucher,null,$attr)) { + // YES: user is good for $timecredit minutes. + captiveportal_logportalauth($voucher,$clientmac,$clientip,"Voucher login good for $timecredit min."); + } else { + portal_reply_page($redirurl, "error", $config['voucher'][$cpzone]['msgexpired'] ? $config['voucher'][$cpzone]['msgexpired']: $errormsg); + } + } else if (-1 == $timecredit) { // valid but expired + captiveportal_logportalauth($voucher,$clientmac,$clientip,"FAILURE","voucher expired"); + portal_reply_page($redirurl, "error", $config['voucher'][$cpzone]['msgexpired'] ? $config['voucher'][$cpzone]['msgexpired']: $errormsg); + } else { + captiveportal_logportalauth($voucher,$clientmac,$clientip,"FAILURE"); + portal_reply_page($redirurl, "error", $config['voucher'][$cpzone]['msgnoaccess'] ? $config['voucher'][$cpzone]['msgnoaccess'] : $errormsg); + } + +} else if ($_POST['accept'] && $radius_enable) { + if (($_POST['auth_user'] && isset($_POST['auth_pass'])) || ($_POST['auth_user2'] && isset($_POST['auth_pass2']))) { + if (!empty($_POST['auth_user'])) { + $user = $_POST['auth_user']; + $paswd = $_POST['auth_pass']; + } else if (!empty($_POST['auth_user2'])) { + $user = $_POST['auth_user2']; + $paswd = $_POST['auth_pass2']; + } + $auth_list = radius($user,$paswd,$clientip,$clientmac,"USER LOGIN", $radiusctx); + $type = "error"; + if (!empty($auth_list['url_redirection'])) { + $redirurl = $auth_list['url_redirection']; + $type = "redir"; + } + + if ($auth_list['auth_val'] == 1) { + captiveportal_logportalauth($user,$clientmac,$clientip,"ERROR",$auth_list['error']); + portal_reply_page($redirurl, $type, $auth_list['error'] ? $auth_list['error'] : $errormsg); + } else if ($auth_list['auth_val'] == 3) { + captiveportal_logportalauth($user,$clientmac,$clientip,"FAILURE",$auth_list['reply_message']); + portal_reply_page($redirurl, $type, $auth_list['reply_message'] ? $auth_list['reply_message'] : $errormsg); + } + } else { + if (!empty($_POST['auth_user'])) + $user = $_POST['auth_user']; + else if (!empty($_POST['auth_user2'])) + $user = $_POST['auth_user2']; + else + $user = 'unknown'; + captiveportal_logportalauth($user ,$clientmac,$clientip,"ERROR"); + portal_reply_page($redirurl, "error", $errormsg); + } + +} else if ($_POST['accept'] && $cpcfg['auth_method'] == "local") { + if ($_POST['auth_user'] && $_POST['auth_pass']) { + //check against local user manager + $loginok = local_backed($_POST['auth_user'], $_POST['auth_pass']); + + if ($loginok && isset($cpcfg['localauth_priv'])) + $loginok = userHasPrivilege(getUserEntry($_POST['auth_user']), "user-services-captiveportal-login"); + + if ($loginok){ + captiveportal_logportalauth($_POST['auth_user'],$clientmac,$clientip,"LOGIN"); + portal_allow($clientip, $clientmac,$_POST['auth_user']); + } else { + captiveportal_logportalauth($_POST['auth_user'],$clientmac,$clientip,"FAILURE"); + portal_reply_page($redirurl, "error", $errormsg); + } + } else + portal_reply_page($redirurl, "error", $errormsg); + +} else if ($_POST['accept'] && $clientip && $cpcfg['auth_method'] == "none") { + captiveportal_logportalauth("unauthenticated",$clientmac,$clientip,"ACCEPT"); + portal_allow($clientip, $clientmac, "unauthenticated"); + +} else { + /* display captive portal page */ + portal_reply_page($redirurl, "login",null,$clientmac,$clientip); +} + +ob_flush(); + +?> diff --git a/usr/local/captiveportal/radius_accounting.inc b/usr/local/captiveportal/radius_accounting.inc new file mode 100644 index 000000000..ed072cfc8 --- /dev/null +++ b/usr/local/captiveportal/radius_accounting.inc @@ -0,0 +1,323 @@ + + 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. + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. + + This code cannot simply be copied and put under the GNU Public License or + any other GPL-like (LGPL, GPL2) License. + + This code is made possible thx to samples made by Michael Bretterklieber + author of the PHP PECL Radius package + +*/ + +/* + pfSense_MODULE: captiveportal +*/ + +define('GIGAWORDS_RIGHT_OPERAND', '4294967296'); // 2^32 + +/* +RADIUS ACCOUNTING START +----------------------- +*/ + +PEAR::loadExtension('bcmath'); + +function RADIUS_ACCOUNTING_START($ruleno, $username, $sessionid, $radiusservers, $clientip, $clientmac) { + + global $config, $cpzone; + + $retvalue = array(); + $nas_mac = mac_format(get_interface_mac("wan")); + $clientmac = mac_format($clientmac); + $nas_port = intval($ruleno); + $radiusvendor = $config['captiveportal'][$cpzone]['radiusvendor'] ? $config['captiveportal'][$cpzone]['radiusvendor'] : null; + + switch($radiusvendor) { + + case 'cisco': + $calledstationid = $clientmac; + $callingstationid = $clientip; + break; + + default: + if (!function_exists('getNasIP')) + require_once("captiveportal.inc"); + $calledstationid = getNasIP(); + $callingstationid = $clientmac; + break; + } + + // Create our instance + $racct = new Auth_RADIUS_Acct_Start; + + /* Different Authentication options + * + * Its possible todo other authentication methods but still do radius accounting + * + * RADIUS_AUTH_RADIUS => authenticated via Radius + * RADIUS_AUTH_LOCAL => authenticated local + * RADIUS_AUTH_REMOTE => authenticated remote + * + */ + $racct->authentic = RADIUS_AUTH_RADIUS; + + // Construct data package + $racct->username = $username; + /* + Add support for more then one radiusserver. + At most 10 servers may be specified. + When multiple servers are given, they are tried in round-robin fashion until a valid response is received + */ + foreach ($radiusservers as $radsrv) { + // Add a new server to our instance + $racct->addServer($radsrv['ipaddr'], $radsrv['acctport'], $radsrv['key']); + } + + if (PEAR::isError($racct->start())) { + $retvalue['acct_val'] = 1; + $retvalue['error'] = $racct->getMessage(); + + // If we encounter an error immediately stop this function and go back + $racct->close(); + return $retvalue; + + /* Old code: + * $status = $racct->start(); + * if(PEAR::isError($status)) { + * if ($debug) + * printf("Radius start: %s
    \n", $status->getMessage()); + * exit; + * } + */ + } + + /* + * NAS_PORT_TYPE, int => RADIUS_ETHERNET (15), RADIUS_WIRELESS_OTHER (18), RADIUS_WIRELESS_IEEE_802_11 (19) + */ + + // Default attributes + $racct->putAttribute(RADIUS_NAS_PORT_TYPE, RADIUS_ETHERNET); + $racct->putAttribute(RADIUS_NAS_PORT, $nas_port, 'integer'); + $racct->putAttribute(RADIUS_ACCT_SESSION_ID, $sessionid); + + // Extra data to identify the client and nas + $racct->putAttribute(RADIUS_FRAMED_IP_ADDRESS, $clientip, "addr"); + $racct->putAttribute(RADIUS_CALLED_STATION_ID, $calledstationid); + $racct->putAttribute(RADIUS_CALLING_STATION_ID, $callingstationid); + + // Send request + $result = $racct->send(); + + // Evaluation of the response + // 5 -> Accounting-Response + // See RFC2866 for this. + if (PEAR::isError($result)) { + $retvalue['acct_val'] = 1; + $retvalue['error'] = $result->getMessage(); + + } else if ($result === true) { + $retvalue['acct_val'] = 5 ; + + } else { + $retvalue['acct_val'] = 1 ; + + } + + // close OO RADIUS_ACCOUNTING + $racct->close(); + unset($racct); + + return $retvalue ; + +} + +/* +RADIUS ACCOUNTING STOP/UPDATE +----------------------------- +*/ + +function RADIUS_ACCOUNTING_STOP($ruleno,$username,$sessionid,$start_time,$radiusservers,$clientip,$clientmac, $term_cause = 1, $interimupdate=false,$stop_time = null) { + + global $config, $cpzone; + + $retvalue = array(); + $nas_mac = mac_format(get_interface_mac("wan")); + $clientmac = mac_format($clientmac); + $nas_port = intval($ruleno); + $radiusvendor = $config['captiveportal'][$cpzone]['radiusvendor'] ? $config['captiveportal'][$cpzone]['radiusvendor'] : null; + $stop_time = (empty($stop_time)) ? time() : $stop_time; + $session_time = $stop_time - $start_time; + $volume = getVolume($clientip, $clientmac); + $volume['input_bytes_radius'] = remainder($volume['input_bytes']); + $volume['input_gigawords'] = gigawords($volume['input_bytes']); + $volume['output_bytes_radius'] = remainder($volume['output_bytes']); + $volume['output_gigawords'] = gigawords($volume['output_bytes']); + + switch($radiusvendor) { + + case 'cisco': + $calledstationid = $clientmac; + $callingstationid = $clientip; + break; + + default: + $calledstationid = getNasIP(); + $callingstationid = $clientmac; + break; + } + + // Create our instance, see if we should use Accounting Interim Updates or Accounting STOP messages + if ($interimupdate) + $racct = new Auth_RADIUS_Acct_Update; + else + $racct = new Auth_RADIUS_Acct_Stop; + + /* + Add support for more then one radiusserver. + At most 10 servers may be specified. + When multiple servers are given, they are tried in round-robin fashion until a valid response is received + */ + foreach ($radiusservers as $radsrv) { + // Add a new server to our instance + $racct->addServer($radsrv['ipaddr'], $radsrv['acctport'], $radsrv['key']); + } + + // See RADIUS_ACCOUNTING_START for info + $racct->authentic = RADIUS_AUTH_RADIUS; + + // Construct data package + $racct->username = $username; + // Set session_time + $racct->session_time = $session_time; + + if (PEAR::isError($racct->start())) { + $retvalue['acct_val'] = 1; + $retvalue['error'] = $racct->getMessage(); + + // If we encounter an error immediately stop this function and go back + $racct->close(); + return $retvalue; + } + + // The RADIUS PECL Package doesn't have this vars so we create them ourself + define("RADIUS_ACCT_INPUT_GIGAWORDS", "52"); + define("RADIUS_ACCT_OUTPUT_GIGAWORDS", "53"); + + // Default attributes + $racct->putAttribute(RADIUS_NAS_PORT_TYPE, RADIUS_ETHERNET); + $racct->putAttribute(RADIUS_NAS_PORT, $nas_port, 'integer'); + $racct->putAttribute(RADIUS_ACCT_SESSION_ID, $sessionid); + + // Extra data to identify the client and nas + $racct->putAttribute(RADIUS_FRAMED_IP_ADDRESS, $clientip, "addr"); + $racct->putAttribute(RADIUS_CALLED_STATION_ID, $calledstationid); + $racct->putAttribute(RADIUS_CALLING_STATION_ID, $callingstationid); + + // Volume stuff: Ingress + $racct->putAttribute(RADIUS_ACCT_INPUT_PACKETS, $volume['input_pkts'], "integer"); + $racct->putAttribute(RADIUS_ACCT_INPUT_OCTETS, $volume['input_bytes_radius'], "integer"); + $racct->putAttribute(RADIUS_ACCT_INPUT_GIGAWORDS, $volume['input_gigawords'], "integer"); + // Volume stuff: Outgress + $racct->putAttribute(RADIUS_ACCT_OUTPUT_PACKETS, $volume['output_pkts'], "integer"); + $racct->putAttribute(RADIUS_ACCT_OUTPUT_OCTETS, $volume['output_bytes_radius'], "integer"); + $racct->putAttribute(RADIUS_ACCT_OUTPUT_GIGAWORDS, $volume['output_gigawords'], "integer"); + $racct->putAttribute(RADIUS_ACCT_SESSION_TIME, $session_time, "integer"); + + if (!$interimupdate) + $racct->putAttribute(RADIUS_ACCT_TERMINATE_CAUSE, $term_cause); + + // Send request + $result = $racct->send(); + + // Evaluation of the response + // 5 -> Accounting-Response + // See RFC2866 for this. + if (PEAR::isError($result)) { + $retvalue['acct_val'] = 1; + $retvalue['error'] = $result->getMessage(); + + } else if ($result === true) { + $retvalue['acct_val'] = 5 ; + + } else { + $retvalue['acct_val'] = 1 ; + + } + + // close OO RADIUS_ACCOUNTING + $racct->close(); + + return $retvalue; + +} + + +/** + * Radius Volume Helpers + * + */ + +function gigawords($bytes) { + + + /* + * RFC2866 Specifies a 32bit unsigned integer, which is a max of 4294967295 + * Currently there is a fault in the PECL radius_put_int function which can handle only 32bit signed integer. + */ + + // We use BCMath functions since normal integers don't work with so large numbers + $gigawords = bcdiv( bcsub( $bytes, remainder($bytes) ) , GIGAWORDS_RIGHT_OPERAND) ; + + // We need to manually set this to a zero instead of NULL for put_int() safety + if (is_null($gigawords)) { + $gigawords = 0; + } + + return $gigawords; + +} + +function remainder($bytes) { + + // Calculate the bytes we are going to send to the radius + $bytes = bcmod($bytes, GIGAWORDS_RIGHT_OPERAND); + + if (is_null($bytes)) { + $bytes = 0; + } + + + return $bytes; + +} + +?> diff --git a/usr/local/captiveportal/radius_authentication.inc b/usr/local/captiveportal/radius_authentication.inc new file mode 100644 index 000000000..5f2450679 --- /dev/null +++ b/usr/local/captiveportal/radius_authentication.inc @@ -0,0 +1,189 @@ + + 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. + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. + + This code cannot simply be copied and put under the GNU Public License or + any other GPL-like (LGPL, GPL2) License. + + This code is made possible thx to samples made by Michael Bretterklieber + author of the PHP PECL Radius package + +*/ + +/* + pfSense_MODULE: captiveportal +*/ + +/* +RADIUS AUTHENTICATION +--------------------- +*/ + +require_once("CHAP.inc"); + +function RADIUS_AUTHENTICATION($username,$password,$radiusservers,$clientip,$clientmac,$ruleno) { + + global $config, $cpzone; + + $retvalue = array(); + $clientmac = mac_format($clientmac); + $nas_port = $ruleno; + $radiusvendor = $config['captiveportal'][$cpzone]['radiusvendor'] ? $config['captiveportal'][$cpzone]['radiusvendor'] : null; + $radius_protocol = $config['captiveportal'][$cpzone]['radius_protocol']; + // Do we even need to set it to NULL? + $retvalue['error'] = $retvalue['reply_message'] = $retvalue['url_redirection'] = $retvalue['session_timeout'] = null; + $retvalue['idle_timeout'] = $retvalue['session_terminate_time'] = $retvalue['interim_interval'] = null; + + switch($radiusvendor) { + + case 'cisco': + $calledstationid = $clientmac; + $callingstationid = $clientip; + break; + default: + if (!function_exists('getNasIP')) + require_once("captiveportal.inc"); + $calledstationid = getNasIP(); + $callingstationid = $clientmac; + break; + } + + // Create our instance + $classname = 'Auth_RADIUS_' . $radius_protocol; + $rauth = new $classname($username, $password); + + /* + * Add support for more then one radiusserver. + * At most 10 servers may be specified. + * When multiple servers are given, they are tried in round-robin fashion until a valid response is received + */ + foreach ($radiusservers as $radsrv) { + // Add a new server to our instance + $rauth->addServer($radsrv['ipaddr'], $radsrv['port'], $radsrv['key']); + + } + + // Construct data package + $rauth->username = $username; + switch ($radius_protocol) { + case 'CHAP_MD5': + case 'MSCHAPv1': + $classname = $radius_protocol == 'MSCHAPv1' ? 'Crypt_CHAP_MSv1' : 'Crypt_CHAP_MD5'; + $crpt = new $classname; + $crpt->username = $username; + $crpt->password = $password; + $rauth->challenge = $crpt->challenge; + $rauth->chapid = $crpt->chapid; + $rauth->response = $crpt->challengeResponse(); + $rauth->flags = 1; + // If you must use deprecated and weak LAN-Manager-Responses use this: + //$rauth->lmResponse = $crpt->lmChallengeResponse(); + //$rauth->flags = 0; + break; + + case 'MSCHAPv2': + // Construct data package + $crpt = new Crypt_CHAP_MSv2; + $crpt->username = $username; + $crpt->password = $password; + $rauth->challenge = $crpt->authChallenge; + $rauth->peerChallenge = $crpt->peerChallenge; + $rauth->chapid = $crpt->chapid; + $rauth->response = $crpt->challengeResponse(); + break; + + default: + $rauth->password = $password; + break; + } + + if (PEAR::isError($rauth->start())) { + $retvalue['auth_val'] = 1; + $retvalue['error'] = $rauth->getError(); + + // If we encounter an error immediately stop this function and go back + $rauth->close(); + return $retvalue; + } + + // Default attributes + $rauth->putAttribute(RADIUS_SERVICE_TYPE, RADIUS_LOGIN); + $rauth->putAttribute(RADIUS_NAS_PORT_TYPE, RADIUS_ETHERNET); + $rauth->putAttribute(RADIUS_NAS_PORT, $nas_port, 'integer'); + + // Extra data to identify the client and nas + $rauth->putAttribute(RADIUS_FRAMED_IP_ADDRESS, $clientip, addr); + $rauth->putAttribute(RADIUS_CALLED_STATION_ID, $calledstationid); + $rauth->putAttribute(RADIUS_CALLING_STATION_ID, $callingstationid); + + // Send request + $result = $rauth->send(); + + // Evaluation of the response + // 1 -> Access-Request => We will use this value as an error indicator since we can't get a 1 back from the radius + // 2 -> Access-Accept + // 3 -> Access-Reject + // See RFC2865 for this. + if (PEAR::isError($result)) { + $retvalue['auth_val'] = 1; + $retvalue['error'] = $result->getMessage(); + + } else if ($result === true) { + $retvalue['auth_val'] = 2; + + } else { + $retvalue['auth_val'] = 3; + + } + + // Get attributes, even if auth failed. + // We will push the results in the retvalue array + if (!$rauth->getAttributes()) { + $retvalue['error'] = $rauth->getError(); + + } else { + $retvalue = array_merge($retvalue,$rauth->listAttributes()); + + // We convert the session_terminate_time to unixtimestamp if its set before returning the whole array to our caller + if (!empty($retvalue['session_terminate_time'])) { + $stt = &$retvalue['session_terminate_time']; + $stt = strtotime(preg_replace("/\+(\d+):(\d+)$/", " +\${1}\${2}", preg_replace("/(\d+)T(\d+)/", "\${1} \${2}",$stt))); + } + } + + // close OO RADIUS_AUTHENTICATION + $rauth->close(); + unset($rauth); + + return $retvalue; + +} + +?> diff --git a/usr/local/etc/pkg.conf b/usr/local/etc/pkg.conf new file mode 100644 index 000000000..d96baae7e --- /dev/null +++ b/usr/local/etc/pkg.conf @@ -0,0 +1,5 @@ +FreeBSD: { + url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest", + mirror_type: "srv", + enabled: yes +} \ No newline at end of file diff --git a/usr/local/openssl/openssl.cnf b/usr/local/openssl/openssl.cnf new file mode 120000 index 000000000..f95d25b9a --- /dev/null +++ b/usr/local/openssl/openssl.cnf @@ -0,0 +1 @@ +../../../etc/ssl/openssl.cnf \ No newline at end of file diff --git a/usr/local/opnsense/check_reload_status.py b/usr/local/opnsense/check_reload_status.py new file mode 100644 index 000000000..687e681ab --- /dev/null +++ b/usr/local/opnsense/check_reload_status.py @@ -0,0 +1,82 @@ +#!/usr/local/bin/python2.7 +""" + Copyright (c) 2014 Ad Schellevis + + part of opnSense (https://www.opnsense.org/) + + 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. + + -------------------------------------------------------------------------------------- + package : check_reload_status + function: delivers a process coordinator to handle frontend functions + + + +""" +__author__ = 'Ad Schellevis' + +# +import os +import sys +import ConfigParser +import modules.processhandler +from modules.daemonize import Daemonize + + +# find program path +if len(__file__.split('/')[:-1]) >0 : + program_path = '/'.join(__file__.split('/')[:-1]) +else: + program_path = os.getcwd() + +# set working directory to program_path +sys.path.append(program_path) +os.chdir(program_path) + +# open configuration +cnf = ConfigParser.ConfigParser() +cnf.read('conf/check_reload_status.conf') + +# validate configuration, exit on missing item +for config_item in ['socket_filename','pid_filename']: + if cnf.has_section('main') == False or cnf.has_option('main',config_item) == False: + print('configuration item main/%s not found in %s/conf/check_reload_status.conf'%(config_item,program_path)) + sys.exit(0) + +# run process coordinator ( on console or as daemon ) +# if command-line arguments contain "emulate", start in emulation mode +if len(sys.argv) > 1 and 'simulate' in sys.argv[1:]: + proc_handler = modules.processhandler.Handler(socket_filename=cnf.get('main','socket_filename'),config_path='%s/conf'%(program_path),simulation_mode=True) +else: + proc_handler = modules.processhandler.Handler(socket_filename=cnf.get('main','socket_filename'),config_path='%s/conf'%(program_path)) + +if len(sys.argv) > 1 and 'console' in sys.argv[1:]: + print('run %s in console mode'%sys.argv[0]) + proc_handler.run() +else: + # daemonize process + daemon = Daemonize(app=__file__.split('/')[-1].split('.py')[0], pid=cnf.get('main','pid_filename'), action=proc_handler.run) + daemon.start() + +sys.exit(0) diff --git a/usr/local/opnsense/conf/actions_filter.conf b/usr/local/opnsense/conf/actions_filter.conf new file mode 100644 index 000000000..3f8c0f9da --- /dev/null +++ b/usr/local/opnsense/conf/actions_filter.conf @@ -0,0 +1,24 @@ +[reload] +command:/etc/rc.filter_configure_sync +parameters: +type:script +message:Reloading filter + +[reconfigure] +command:/etc/rc.filter_configure_sync +parameters: +type:script +message:Reloading filter + +[restart] +command:/etc/rc.filter_configure_sync +parameters: +type:script +message:Reloading filter + +[sync] +command:/etc/rc.filter_synchronize +parameters: +type:script +message:Syncing firewall + diff --git a/usr/local/opnsense/conf/actions_interface.conf b/usr/local/opnsense/conf/actions_interface.conf new file mode 100644 index 000000000..e116f75ac --- /dev/null +++ b/usr/local/opnsense/conf/actions_interface.conf @@ -0,0 +1,60 @@ +[linkup.start] +command:/etc/rc.linkup +parameters:start %s +type:script +message:Linkup starting %s + +[linkup.stop] +command:/etc/rc.linkup +parameters:stop %s +type:script +message:Linkup stopping %s + +[all.reload] +command:/etc/rc.reload_interfaces +parameters: +type:script +message:Reloading interfaces + +[reconfigure] +command:/etc/rc.interfaces_wan_configure +parameters:%s +type:script +message:Configuring interface %s + +[restart] +command:/etc/rc.interfaces_wan_configure +parameters:%s +type:script +message:Configuring interface %s + +[newip] +command:/etc/rc.newwanip +parameters:%s +type:script +message:rc.newwanip starting %s + +[newwanipv6] +command:/etc/rc.newwanipv6 +parameters:%s +type:script +message:rc.newwanipv6 starting %s + +[sync] +command:/etc/rc.filter_configure_xmlrpc +parameters: +type:script +message:Reloading filter_configure_xmlrpc + +[carpmaster] +command:/etc/rc.carpmaster +parameters:%s +type:script +message:Carp master event + +[carpbackup] +command:/etc/rc.carpbackup +parameters:%s +type:script +message:Carp backup event + diff --git a/usr/local/opnsense/conf/actions_service.conf b/usr/local/opnsense/conf/actions_service.conf new file mode 100644 index 000000000..09bab5aa8 --- /dev/null +++ b/usr/local/opnsense/conf/actions_service.conf @@ -0,0 +1,74 @@ +[reload|restart.all] +command:/etc/rc.reload_all +parameters: +type:script +message:Reloading all + +[reload|restart.dns] +command:/etc/rc.resolv_conf_generate +parameters: +type:script +message:Rewriting resolv.conf + +[reload|restart.ipsecdns] +command:/etc/rc.newipsecdns +parameters: +type:script +message:Restarting ipsec tunnels + +[reload|restart.routedns] +command:/etc/rc.newroutedns +parameters: +type:script +message:Updating static routes based on hostnames + +[reload|restart.openvpn] +command:/etc/rc.openvpn +parameters:%s +type:script +message:Restarting OpenVPN tunnels/interfaces %s + +[reload|restart.dyndns] +command:/etc/rc.dyndns.update +parameters:%s +type:script +message:updating dyndns %s + +[reload|restart.dyndnsall] +command:/etc/rc.dyndns.update +parameters: +type:script +message:Updating all dyndns + +[reload|restart.ntpd] +command:/usr/bin/killall ntpd; /bin/sleep 3; /usr/local/sbin/ntpd -s -f /var/etc/ntpd.conf +parameters: +type:script +message:Starting nptd + + +[reload|restart.packages] +command:/etc/rc.start_packages +parameters: +type:script +message:Starting packages + +[reload|restart.sshd] +command:/etc/sshd +parameters: +type:script +message:starting sshd + +[reload|restart.webgui] +command:/etc/rc.restart_webgui +parameters: +type:script +message:webConfigurator restart in progress + +[sync.vouchers] +command:/etc/rc.savevoucher +parameters: +type:script +message:Synching vouchers + + diff --git a/usr/local/opnsense/conf/check_reload_status.conf b/usr/local/opnsense/conf/check_reload_status.conf new file mode 100644 index 000000000..673638595 --- /dev/null +++ b/usr/local/opnsense/conf/check_reload_status.conf @@ -0,0 +1,4 @@ +[main] +socket_filename:/var/run/check_reload_status +pid_filename:/var/run/check_reload_status.pid + diff --git a/usr/local/opnsense/execute_command.py b/usr/local/opnsense/execute_command.py new file mode 100644 index 000000000..1273abe03 --- /dev/null +++ b/usr/local/opnsense/execute_command.py @@ -0,0 +1,70 @@ +#!/usr/local/bin/python2.7 +""" + Copyright (c) 2014 Ad Schellevis + + part of opnSense (https://www.opnsense.org/) + + 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. + + -------------------------------------------------------------------------------------- + package : check_reload_status + function: commandline execute commands to check_reload_status daemon + + +""" +__author__ = 'Ad Schellevis' +import socket +import sys + + +if len(sys.argv) <= 1: + print 'usage : %s [unix domain socket filename] '%sys.argv[0] + sys.exit(0) +else: + server_address = sys.argv[1].strip() + +if len(sys.argv) > 2: + exec_command = ' '.join(sys.argv[2:]) +else: + # command line input + exec_command = raw_input('command:')+'\n' + +# Create and open unix domain socket +sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) +print ('connecting to %s' % server_address) +try: + sock.connect(server_address) +except socket.error, msg: + print ('error connection to %s '%server_address) + sys.exit(1) + +# send command and await response +try: + sock.send(exec_command) + print ('response:%s'% sock.recv(4096)) +finally: + sock.close() + + + diff --git a/usr/local/opnsense/modules/__init__.py b/usr/local/opnsense/modules/__init__.py new file mode 100644 index 000000000..2f428d884 --- /dev/null +++ b/usr/local/opnsense/modules/__init__.py @@ -0,0 +1,33 @@ +""" + Copyright (c) 2014 Ad Schellevis + + part of opnSense (https://www.opnsense.org/) + + 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. + + -------------------------------------------------------------------------------------- + + + +""" \ No newline at end of file diff --git a/usr/local/opnsense/modules/daemonize.py b/usr/local/opnsense/modules/daemonize.py new file mode 100644 index 000000000..07846b7cc --- /dev/null +++ b/usr/local/opnsense/modules/daemonize.py @@ -0,0 +1,213 @@ +#!/usr/bin/python + +# original source from https://github.com/thesharp/daemonize + +import fcntl +import os +import pwd +import grp +import sys +import signal +import resource +import logging +import atexit +from logging import handlers + + +class Daemonize(object): + """ Daemonize object + Object constructor expects three arguments: + - app: contains the application name which will be sent to syslog. + - pid: path to the pidfile. + - action: your custom function which will be executed after daemonization. + - keep_fds: optional list of fds which should not be closed. + - auto_close_fds: optional parameter to not close opened fds. + - privileged_action: action that will be executed before drop privileges if user or + group parameter is provided. + If you want to transfer anything from privileged_action to action, such as + opened privileged file descriptor, you should return it from + privileged_action function and catch it inside action function. + - user: drop privileges to this user if provided. + - group: drop privileges to this group if provided. + - verbose: send debug messages to logger if provided. + - logger: use this logger object instead of creating new one, if provided. + """ + def __init__(self, app, pid, action, keep_fds=None, auto_close_fds=True, privileged_action=None, user=None, group=None, verbose=False, logger=None): + self.app = app + self.pid = pid + self.action = action + self.keep_fds = keep_fds or [] + self.privileged_action = privileged_action or (lambda: ()) + self.user = user + self.group = group + self.logger = logger + self.verbose = verbose + self.auto_close_fds = auto_close_fds + + def sigterm(self, signum, frame): + """ sigterm method + These actions will be done after SIGTERM. + """ + self.logger.warn("Caught signal %s. Stopping daemon." % signum) + os.remove(self.pid) + sys.exit(0) + + def exit(self): + """ exit method + Cleanup pid file at exit. + """ + self.logger.warn("Stopping daemon.") + os.remove(self.pid) + sys.exit(0) + + def start(self): + """ start method + Main daemonization process. + """ + # If pidfile already exists, we should read pid from there; to overwrite it, if locking + # will fail, because locking attempt somehow purges the file contents. + if os.path.isfile(self.pid): + with open(self.pid, "r") as old_pidfile: + old_pid = old_pidfile.read() + # Create a lockfile so that only one instance of this daemon is running at any time. + try: + lockfile = open(self.pid, "w") + except IOError: + print("Unable to create the pidfile.") + sys.exit(1) + try: + # Try to get an exclusive lock on the file. This will fail if another process has the file + # locked. + fcntl.flock(lockfile, fcntl.LOCK_EX | fcntl.LOCK_NB) + except IOError: + print("Unable to lock on the pidfile.") + # We need to overwrite the pidfile if we got here. + with open(self.pid, "w") as pidfile: + pidfile.write(old_pid) + sys.exit(1) + + # Fork, creating a new process for the child. + process_id = os.fork() + if process_id < 0: + # Fork error. Exit badly. + sys.exit(1) + elif process_id != 0: + # This is the parent process. Exit. + sys.exit(0) + # This is the child process. Continue. + + # Stop listening for signals that the parent process receives. + # This is done by getting a new process id. + # setpgrp() is an alternative to setsid(). + # setsid puts the process in a new parent group and detaches its controlling terminal. + process_id = os.setsid() + if process_id == -1: + # Uh oh, there was a problem. + sys.exit(1) + + # Add lockfile to self.keep_fds. + self.keep_fds.append(lockfile.fileno()) + + # Close all file descriptors, except the ones mentioned in self.keep_fds. + devnull = "/dev/null" + if hasattr(os, "devnull"): + # Python has set os.devnull on this system, use it instead as it might be different + # than /dev/null. + devnull = os.devnull + + if self.auto_close_fds: + for fd in range(3, resource.getrlimit(resource.RLIMIT_NOFILE)[0]): + if fd not in self.keep_fds: + try: + os.close(fd) + except OSError: + pass + + devnull_fd = os.open(devnull, os.O_RDWR) + os.dup2(devnull_fd, 0) + os.dup2(devnull_fd, 1) + os.dup2(devnull_fd, 2) + + if self.logger is None: + # Initialize logging. + self.logger = logging.getLogger(self.app) + self.logger.setLevel(logging.DEBUG) + # Display log messages only on defined handlers. + self.logger.propagate = False + + # Initialize syslog. + # It will correctly work on OS X, Linux and FreeBSD. + if sys.platform == "darwin": + syslog_address = "/var/run/syslog" + else: + syslog_address = "/dev/log" + + # We will continue with syslog initialization only if actually have such capabilities + # on the machine we are running this. + if os.path.isfile(syslog_address): + syslog = handlers.SysLogHandler(syslog_address) + if self.verbose: + syslog.setLevel(logging.DEBUG) + else: + syslog.setLevel(logging.INFO) + # Try to mimic to normal syslog messages. + formatter = logging.Formatter("%(asctime)s %(name)s: %(message)s", + "%b %e %H:%M:%S") + syslog.setFormatter(formatter) + + self.logger.addHandler(syslog) + + # Set umask to default to safe file permissions when running as a root daemon. 027 is an + # octal number which we are typing as 0o27 for Python3 compatibility. + os.umask(0o27) + + # Change to a known directory. If this isn't done, starting a daemon in a subdirectory that + # needs to be deleted results in "directory busy" errors. + os.chdir("/") + + # Execute privileged action + privileged_action_result = self.privileged_action() + if not privileged_action_result: + privileged_action_result = [] + + # Change gid + if self.group: + try: + gid = grp.getgrnam(self.group).gr_gid + except KeyError: + self.logger.error("Group {0} not found".format(self.group)) + sys.exit(1) + try: + os.setgid(gid) + except OSError: + self.logger.error("Unable to change gid.") + sys.exit(1) + + # Change uid + if self.user: + try: + uid = pwd.getpwnam(self.user).pw_uid + except KeyError: + self.logger.error("User {0} not found.".format(self.user)) + sys.exit(1) + try: + os.setuid(uid) + except OSError: + self.logger.error("Unable to change uid.") + sys.exit(1) + + try: + lockfile.write("%s" % (os.getpid())) + lockfile.flush() + except IOError: + self.logger.error("Unable to write pid to the pidfile.") + print("Unable to write pid to the pidfile.") + sys.exit(1) + + # Set custom action on SIGTERM. + signal.signal(signal.SIGTERM, self.sigterm) + atexit.register(self.exit) + + self.logger.warn("Starting daemon.") + + self.action(*privileged_action_result) diff --git a/usr/local/opnsense/modules/processhandler.py b/usr/local/opnsense/modules/processhandler.py new file mode 100644 index 000000000..2981a7e1d --- /dev/null +++ b/usr/local/opnsense/modules/processhandler.py @@ -0,0 +1,332 @@ +""" + Copyright (c) 2014 Ad Schellevis + + part of opnSense (https://www.opnsense.org/) + + 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. + + -------------------------------------------------------------------------------------- + package : check_reload_status + function: unix domain socket process worker process + + +""" +__author__ = 'Ad Schellevis' + +import os +import subprocess +import socket +import traceback +import syslog +import threading +import ConfigParser +import glob +import time + +class Handler(object): + """ Main handler class, opens unix domain socket and starts listening + - New connections are handed over to a HandlerClient type object in a new thread + - All possible actions are stored in 1 ActionHandler type object and parsed to every client for script execution + + processflow: + Handler ( waits for client ) + -> new client is send to HandlerClient + -> execute ActionHandler command + <- send back result string + """ + def __init__(self,socket_filename,config_path,simulation_mode=False): + """ Constructor + + :param socket_filename: filename of unix domain socket to use + :param config_path: location of configuration files + :param emulate: emulation mode, do not start actual (script) commands + :return: object + """ + self.socket_filename = socket_filename + self.config_path = config_path + self.simulation_mode =simulation_mode + + def run(self): + """ Run process handler + + :return: + """ + while True: + try: + # open action handler + actHandler = ActionHandler(config_path=self.config_path) + + # remove previous socket ( if exists ) + try: + os.unlink(self.socket_filename) + except OSError: + if os.path.exists(self.socket_filename): + raise + + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.bind(self.socket_filename) + os.chmod(self.socket_filename,0o666) + sock.listen(30) + while True: + # wait for a connection to arrive + connection, client_address = sock.accept() + # spawn a client connection + cmd_thread = HandlerClient(connection=connection, + client_address=client_address, + action_handler=actHandler, + simulation_mode=self.simulation_mode) + cmd_thread.start() + except KeyboardInterrupt: + # exit on + raise + except: + # something went wrong... send traceback to syslog, restart listener (wait for a short time) + print (traceback.format_exc()) + syslog.syslog(syslog.LOG_ERR, 'Handler died on %s'%traceback.format_exc()) + time.sleep(1) + + +class HandlerClient(threading.Thread): + """ Handle commands via specified socket connection + """ + def __init__ (self,connection,client_address,action_handler,simulation_mode=False): + """ + + :param connection: socket connection object + :param client_address: client address ( from socket accept ) + :param action_handler: action handler object + :param emulate: Emulation mode, do not start actual (script) commands + :return: None + """ + threading.Thread.__init__(self) + self.connection = connection + self.client_address = client_address + self.action_handler = action_handler + self.simulation_mode = simulation_mode + + def run(self): + """ handle single action ( read data, execute command, send response ) + + :return: None + """ + try: + # receive command, maximum data length is 4k... longer messages will be truncated + data = self.connection.recv(4096) + # map command to action + data_parts = data.strip().split(' ') + if len(data_parts) == 0 or len(data_parts[0]) == 0: + # no data found + self.connection.sendall('no data\n') + else: + exec_command = data_parts[0] + if len(data_parts) > 1: + exec_action = data_parts[1] + else: + exec_action = None + if len(data_parts) >2: + exec_params = data_parts[2:] + else: + exec_params = None + + # execute requested action + if self.simulation_mode: + self.action_handler.showAction(exec_command,exec_action,exec_params) + result='OK' + else: + result = self.action_handler.execute(exec_command,exec_action,exec_params) + + # send response back to client( including trailing enter ) + self.connection.sendall('%s\n'%result) + except: + print (traceback.format_exc()) + syslog.syslog(syslog.LOG_ERR,'unable to sendback response, message was %s'%traceback.format_exc()) + finally: + self.connection.close() + +class Action(object): + """ Action class, handles actual system calls. set command, parameters (template) type and log message + """ + def __init__(self): + """ setup default properties + + :return: + """ + self.command = None + self.parameters = None + self.type = None + self.message = None + self._parameter_start_pos = 0 + + def setParameterStartPos(self,pos): + """ + + :param pos: start position of parameter list + :return: position + """ + self._parameter_start_pos = pos + + def getParameterStartPos(self): + """ getter for _parameter_start_pos + :return: start position of parameter list ( first argument can be part of action to start ) + """ + return self._parameter_start_pos + + def execute(self,parameters): + """ execute an action + + :param parameters: list of parameters + :return: + """ + # validate input + if self.type == None: + return 'No action type' + elif self.type.lower() == 'script': + if self.command == None: + return 'No command' + + try: + script_command = self.command + if self.parameters != None and type(self.parameters) == str: + script_command = '%s %s'%(script_command,self.parameters) + + if script_command.find('%s') > -1 and len(parameters) > 0: + # use command execution parameters in action parameter template + script_command = script_command % tuple(parameters[0:script_command.count('%s')]) + + # execute script command + if self.message != None: + if self.message.count('%s') > 0 and parameters != None and len(parameters) > 0: + syslog.syslog(syslog.LOG_NOTICE,self.message % tuple(parameters[0:self.message.count('%s')]) ) + else: + syslog.syslog(syslog.LOG_NOTICE,self.message) + + exit_status = subprocess.call(script_command, shell=True) + except: + print traceback.format_exc() + # todo log traceback on exception + return 'Execute error' + + # send response + if exit_status == 0 : + return 'OK' + else: + return 'Error (%d)'%exit_status + + return 'Unknown action type' + +class ActionHandler(object): + """ Start/stop services and functions using configuration data definced in conf/actions_.conf + """ + def __init__(self,config_path): + """ Initialize action handler to start system functions + + :param config_path: full path of configuration data + :return: + """ + self.config_path = config_path + self.action_map = {} + self.load_config() + + + def load_config(self): + """ load action configuration from config files into local dictionary + + :return: None + """ + + self.action_map = {} + for config_filename in glob.glob('%s/actions_*.conf'%(self.config_path)): + # traverse config directory and open all filenames starting with actions_ + cnf=ConfigParser.RawConfigParser() + cnf.read(config_filename) + topic_map = {} + for section in cnf.sections(): + # map configuration data on object + action_obj = Action() + for act_prop in cnf.items(section): + setattr(action_obj,act_prop[0],act_prop[1]) + + if section.find('.') > -1: + # at this moment we only support 2 levels of actions ( 3 if you count topic as well ) + for alias in section.split('.')[0].split('|'): + if topic_map.has_key(alias) == False: + topic_map[alias] = {} + topic_map[alias][section.split('.')[1]] = action_obj + else: + for alias in section.split('|'): + topic_map[alias] = action_obj + + self.action_map[config_filename.split('actions_')[-1].split('.')[0]] = topic_map + + def findAction(self,command,action,parameters): + """ find action object + + :param command: command/topic for example interface + :param action: action to run ( for example linkup ) + :param parameters: the parameters to supply + :return: action object or None if not found + """ + action_obj = None + if self.action_map.has_key(command): + if self.action_map[command].has_key(action): + if type(self.action_map[command][action]) == dict: + if len(parameters) > 0 and self.action_map[command][action].has_key(parameters[0]) == True: + # 3 level action ( "interface linkup start" for example ) + if isinstance(self.action_map[command][action][parameters[0]],Action): + action_obj = self.action_map[command][action][parameters[0]] + action_obj.setParameterStartPos(1) + elif isinstance(self.action_map[command][action],Action): + action_obj = self.action_map[command][action] + + return action_obj + + def execute(self,command,action,parameters): + """ execute configuration defined action + + :param command: command/topic for example interface + :param action: action to run ( for example linkup ) + :param parameters: the parameters to supply + :return: OK on success, else error code + """ + action_params = [] + action_obj = self.findAction(command,action,parameters) + + if action_obj != None: + if parameters != None and len(parameters) > action_obj.getParameterStartPos(): + action_params = parameters[action_obj.getParameterStartPos():] + + return '%s\n'%action_obj.execute(action_params) + + return 'Action not found\n' + + + def showAction(self,command,action,parameters): + """ debug/simulation mode: show action information + :return: + """ + action_obj = self.findAction(command,action,parameters) + print ('---------------------------------------------------------------------') + print ('execute %s.%s with parameters : %s '%(command,action,parameters) ) + print ('action object %s (%s)' % (action_obj,action_obj.command) ) + print ('---------------------------------------------------------------------') diff --git a/usr/local/pkg/miniupnpd.inc b/usr/local/pkg/miniupnpd.inc new file mode 100644 index 000000000..4cad0e513 --- /dev/null +++ b/usr/local/pkg/miniupnpd.inc @@ -0,0 +1,261 @@ + 0) + return true; + return false; + } + + function upnp_write_config($file, $text) { + $handle = fopen($file, 'w'); + if(!$handle) { + upnp_warn("Could not open {$file} for writing."); + return; + } + fwrite($handle, $text); + fclose($handle); + } + + function upnp_uuid() { + /* md5 hash of wan mac */ + $uuid = md5(get_interface_mac(get_real_interface("wan"))); + /* put uuid in correct format 8-4-4-4-12 */ + return substr($uuid,0,8).'-'.substr($uuid,9,4).'-'.substr($uuid,13,4).'-'.substr($uuid,17,4).'-'.substr($uuid,21,12); + } + + function upnp_validate_queue($qname) { + read_altq_config(); + $qlist = get_altq_name_list(); + if (is_array($qlist)) { + return in_array($qname, $qlist); + } else { + return false; + } + } + + function upnp_validate_ip($ip, $check_cdir) { + /* validate cidr */ + $ip_array = array(); + if($check_cdir) { + $ip_array = explode('/', $ip); + if(count($ip_array) == 2) { + if($ip_array[1] < 1 || $ip_array[1] > 32) + return false; + } else + if(count($ip_array) != 1) + return false; + } else + $ip_array[] = $ip; + + /* validate ip */ + if (!is_ipaddr($ip_array[0])) + return false; + return true; + } + + function upnp_validate_port($port) { + foreach(explode('-', $port) as $sub) + if($sub < 0 || $sub > 65535) + return false; + return true; + } + + function before_form_miniupnpd(&$pkg) { + global $config; + + } + + function validate_form_miniupnpd($post, &$input_errors) { + if($post['enable'] && (!$post['enable_upnp'] && !$post['enable_natpmp'])) + $input_errors[] = 'At least one of \'UPnP\' or \'NAT-PMP\' must be allowed'; + if($post['iface_array']) + foreach($post['iface_array'] as $iface) { + if($iface == 'wan') + $input_errors[] = 'It is a security risk to specify WAN in the \'Interface\' field'; + elseif ($iface == $post['ext_iface']) + $input_errors[] = 'You cannot select the external interface as an internal interface.'; + } + if($post['overridewanip'] && !upnp_validate_ip($post['overridewanip'],false)) + $input_errors[] = 'You must specify a valid ip address in the \'Override WAN address\' field'; + if(($post['download'] && !$post['upload']) || ($post['upload'] && !$post['download'])) + $input_errors[] = 'You must fill in both \'Maximum Download Speed\' and \'Maximum Upload Speed\' fields'; + if($post['download'] && $post['download'] <= 0) + $input_errors[] = 'You must specify a value greater than 0 in the \'Maximum Download Speed\' field'; + if($post['upload'] && $post['upload'] <= 0) + $input_errors[] = 'You must specify a value greater than 0 in the \'Maximum Upload Speed\' field'; + if($post['upnpqueue'] && !upnp_validate_queue($post['upnpqueue'])) + $input_errors[] = 'You must specify a valid traffic shaping queue.'; + + /* user permissions validation */ + for($i=1; $i<=4; $i++) { + if($post["permuser{$i}"]) { + $perm = explode(' ',$post["permuser{$i}"]); + /* should explode to 4 args */ + if(count($perm) != 4) { + $input_errors[] = "You must follow the specified format in the 'User specified permissions {$i}' field"; + } else { + /* must with allow or deny */ + if(!($perm[0] == 'allow' || $perm[0] == 'deny')) + $input_errors[] = "You must begin with allow or deny in the 'User specified permissions {$i}' field"; + /* verify port or port range */ + if(!upnp_validate_port($perm[1]) || !upnp_validate_port($perm[3])) + $input_errors[] = "You must specify a port or port range between 0 and 65535 in the 'User specified + permissions {$i}' field"; + /* verify ip address */ + if(!upnp_validate_ip($perm[2],true)) + $input_errors[] = "You must specify a valid ip address in the 'User specified permissions {$i}' field"; + } + } + } + } + + function sync_package_miniupnpd() { + global $config; + global $input_errors; + + $upnp_config = $config['installedpackages']['miniupnpd']['config'][0]; + $config_file = '/var/etc/miniupnpd.conf'; + + if (!isset($upnp_config['ext_iface']) || empty($upnp_config['ext_iface'])) + $ext_ifname = get_real_interface(); + else { + $if = convert_friendly_interface_to_real_interface_name($upnp_config['ext_iface']); + if ($if != $upnp_config['ext_iface']) + $ext_ifname = $if; + else { + $ext_ifname = get_real_interface(); + upnp_warn("Could not resolve real interface for {$upnp_config['ext_iface']}, defaulting to WAN"); + } + } + + $config_text = "ext_ifname={$ext_ifname}\n"; + $config_text .= "port=2189\n"; + + $ifaces_active = ''; + + /* since config is written before this file invoked we don't need to read post data */ + if($upnp_config['enable'] && !empty($upnp_config['iface_array'])) { + $iface_array = explode(',', $upnp_config['iface_array']); + + foreach($iface_array as $iface) { + /* Setting the same internal and external interface is not allowed. */ + if ($iface == $upnp_config['ext_iface']) + continue; + $if = convert_friendly_interface_to_real_interface_name($iface); + /* above function returns iface if fail */ + if($if!=$iface) { + $addr = find_interface_ip($if); + $bits = find_interface_subnet($if); + /* check that the interface has an ip address before adding parameters */ + if (is_ipaddr($addr)) { + $config_text .= "listening_ip={$if}\n"; + if(!$ifaces_active) { + $webgui_ip = $addr; + $ifaces_active = $iface; + } else + $ifaces_active .= ", {$iface}"; + } else + upnp_warn("Interface {$iface} has no ip address, ignoring"); + } else + upnp_warn("Could not resolve real interface for {$iface}"); + } + + if (!empty($ifaces_active)) { + /* override wan ip address, common for carp, etc */ + if($upnp_config['overridewanip']) + $config_text .= "ext_ip={$upnp_config['overridewanip']}\n"; + + $download = $upnp_config['download']*1000; + $upload = $upnp_config['upload']*1000; + + /* set upload and download bitrates */ + if(!empty($download) && !empty($upload)) { + $config_text .= "bitrate_down={$download}\n"; + $config_text .= "bitrate_up={$upload}\n"; + } + + /* enable logging of packets handled by miniupnpd rules */ + if($upnp_config['logpackets']) + $config_text .= "packet_log=yes\n"; + + /* enable system uptime instead of miniupnpd uptime */ + if($upnp_config['sysuptime']) + $config_text .= "system_uptime=yes\n"; + + /* set webgui url */ + if(!empty($config['system']['webgui']['protocol'])) { + $config_text .= "presentation_url={$config['system']['webgui']['protocol']}://{$webgui_ip}"; + if(!empty($config['system']['webgui']['port'])) + $config_text .= ":{$config['system']['webgui']['port']}"; + $config_text .= "/\n"; + } + + /* set uuid and serial */ + $config_text .= "uuid=".upnp_uuid()."\n"; + $config_text .= "serial=".strtoupper(substr(upnp_uuid(),0,8))."\n"; + + /* set model number */ + $config_text .= "model_number=".file_get_contents("/etc/version")."\n"; + + /* upnp access restrictions */ + for($i=1; $i<=4; $i++) { + if($upnp_config["permuser{$i}"]) + $config_text .= "{$upnp_config["permuser{$i}"]}\n"; + } + + if($upnp_config['permdefault']) + $config_text .= "deny 0-65535 0.0.0.0/0 0-65535\n"; + + /* Recheck if queue is valid */ + if (!upnp_validate_queue($upnp_config['upnpqueue'])) + unset($upnp_config['upnpqueue']); + + /* Add shaper queue */ + if($upnp_config['upnpqueue']) + $config_text .= "queue={$upnp_config['upnpqueue']}\n"; + + /* Allow UPnP or NAT-PMP as requested */ + $config_text .= "enable_upnp=" . ( $upnp_config['enable_upnp'] ? "yes\n" : "no\n" ); + $config_text .= "enable_natpmp=" . ( $upnp_config['enable_natpmp'] ? "yes\n" : "no\n" ); + + /* write out the configuration */ + upnp_write_config($config_file, $config_text); + + /* if miniupnpd not running start it */ + if(!upnp_running()) { + upnp_notice("Starting service on interface: {$ifaces_active}"); + upnp_action('start'); + } + /* or restart miniupnpd if settings were changed */ + else { + upnp_notice("Restarting service on interface: {$ifaces_active}"); + upnp_action('restart'); + } + } + } else { + /* user does not want miniupnpd running */ + /* lets stop the service and remove the rc file */ + + if (file_exists($config_file)) { + if(!$upnp_config['enable']) + upnp_notice('Stopping service: miniupnpd disabled'); + else + upnp_notice('Stopping service: no interfaces selected'); + + upnp_action('stop'); + @unlink($config_file); + } + } + } +?> diff --git a/usr/local/pkg/miniupnpd.xml b/usr/local/pkg/miniupnpd.xml new file mode 100644 index 000000000..9aa02398a --- /dev/null +++ b/usr/local/pkg/miniupnpd.xml @@ -0,0 +1,157 @@ + + + Services: UPnP & NAT-PMP + miniupnpd + 20100712 + Change + /usr/local/pkg/miniupnpd.inc + + UPnP & NAT-PMP + Set UPnP & NAT-PMP settings such as interfaces to listen on. +
    Services
    + /pkg_edit.php?xml=miniupnpd.xml&id=0 +
    + + https://packages.pfsense.org/packages/config/miniupnpd/miniupnpd.inc + /usr/local/pkg/ + 0755 + + + https://packages.pfsense.org/packages/config/miniupnpd/status_upnp.php + /usr/local/www/ + 0755 + + + /usr/local/sbin/ + 0755 + https://packages.pfsense.org/packages/config/miniupnpd/sbin/miniupnpd + + + miniupnpd + miniupnpd.sh + miniupnpd + + + + UPnP & NAT-PMP Settings + listtopic + enable_upnp,enable_natpmp,iface_array,overridewanip,upnpqueue,logpackets,sysuptime,permdefault,permuser1,permuser2,permuser3,permuser4 + + + Enable UPnP & NAT-PMP + enable + checkbox + enable_upnp,enable_natpmp,iface_array,overridewanip,upnpqueue,logpackets,sysuptime,permdefault,permuser1,permuser2,permuser3,permuser4 + + + Allow UPnP Port Mapping + enable_upnp + checkbox + This protocol is often used by Microsoft-compatible systems. + + + Allow NAT-PMP Port Mapping + enable_natpmp + checkbox + This protocol is often used by Apple-compatible systems. + + + External Interface (generally WAN) + ext_iface + wan + 3 + select_source + + name + value + Select only your primary WAN interface (interface with your default route). Only one interface is allowed here, not multiple. + + + + Interfaces (generally LAN) + iface_array + lan + true + 3 + select_source + + name + value + You can use the CTRL or COMMAND key to select multiple interfaces. + + + + Maximum Download Speed (Kbits/second) + download + input + + + Maximum Upload Speed (Kbits/second) + upload + input + + + Override WAN address + overridewanip + input + + + Traffic Shaping Queue + upnpqueue + input + + + Log packets handled by UPnP & NAT-PMP rules? + logpackets + checkbox + + + Use system uptime instead of UPnP & NAT-PMP service uptime? + sysuptime + checkbox + + + By default deny access to UPnP & NAT-PMP? + permdefault + checkbox + + + User specified permissions 1 + permuser1 + Format: [allow or deny] [ext port or range] [int ipaddr or ipaddr/cdir] [int port or range] + <br />Example: allow 1024-65535 192.168.0.0/24 1024-65535 + input + 60 + + + User specified permissions 2 + permuser2 + Format: [allow or deny] [ext port or range] [int ipaddr or ipaddr/cdir] [int port or range] + input + 60 + + + User specified permissions 3 + permuser3 + Format: [allow or deny] [ext port or range] [int ipaddr or ipaddr/cdir] [int port or range] + input + 60 + + + User specified permissions 4 + permuser4 + Format: [allow or deny] [ext port or range] [int ipaddr or ipaddr/cdir] [int port or range] + input + 60 + + + + before_form_miniupnpd($pkg); + + + validate_form_miniupnpd($_POST, $input_errors); + + + sync_package_miniupnpd(); + +
    diff --git a/usr/local/pkg/openntpd.inc b/usr/local/pkg/openntpd.inc new file mode 100644 index 000000000..dcbb50a7d --- /dev/null +++ b/usr/local/pkg/openntpd.inc @@ -0,0 +1,55 @@ + + + system.inc + openntpd + NTP server + + + enable + Enable + Check this to enable the NTP server. + checkbox + + + interface + Interface + Select the interface(s) the NTP server will listen on. + lan + + select_source + + name + value + + + + + system_ntp_configure(); + + diff --git a/usr/local/sbin/WipePackages.php b/usr/local/sbin/WipePackages.php new file mode 100755 index 000000000..90bd3ee6f --- /dev/null +++ b/usr/local/sbin/WipePackages.php @@ -0,0 +1,64 @@ + + 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. +*/ + +if(!function_exists("readline")) { + echo "\nThis script requires the readline() libary which is not present on this system."; + echo "\n\nSorry, but we cannot continue.\n"; + die("Need readline() library"); +} + +require("functions.inc"); +require("config.inc"); + +echo "\nThis script will wipe all installed packages off of your pfSense installation.\n"; + +$command = readline("\nAre you sure you would like to continue [y/N]? "); +if(strtoupper($command) == "Y" || strtoupper($command) == "YES") { + + $rmconfig = readline("\nWould you like to remove all package configuration information as well [y/N]? "); + + echo "\n\nStarting package wipe... One moment please... "; + exec("cd /var/db/pkg/ && find . -exec 'pkg_delete {}' \; "); + exec("rm -rf /var/db/pkg/*"); + + if(strtoupper($rmconfig) == "Y" || strtoupper($rmconfig) == "YES") { + echo "\nRemoving pfSense package configuration information..."; + if($config['installedpackages']['package']) { + unset($config['installedpackages']['package']); + write_config("Package wipe procedure completed."); + } + echo "\n"; + } + + echo "\npfSense package wipe procedure has completed.\n\n"; +} + +?> \ No newline at end of file diff --git a/usr/local/sbin/gmirror_status_check.php b/usr/local/sbin/gmirror_status_check.php new file mode 100644 index 000000000..88c186fdd --- /dev/null +++ b/usr/local/sbin/gmirror_status_check.php @@ -0,0 +1,92 @@ +#!/usr/local/bin/php -f + 0) { + // Check list of current mirrors vs old mirrors, notify if one has appeared/disappeared + if ($mirror_list != $previous_mirror_list) + $notices[] = sprintf(gettext("List of mirrors changed. Old: (%s) New: (%s)"), implode(", ", $previous_mirror_list), implode(", ", $mirror_list)); + + // For each mirror, check the mirror status, notify if changed + foreach ($mirror_list as $mirror) { + if (is_array($previous_mirror_status[$mirror])) { + // Notify if the status changed + if ($mirror_status[$mirror]['status'] != $previous_mirror_status[$mirror]['status']) { + $notices[] = sprintf(gettext("Mirror %s status changed from %s to %s."), $mirror, $previous_mirror_status[$mirror]['status'], $mirror_status[$mirror]['status']); + } + // Notify if the drive count changed + if (count($mirror_status[$mirror]['components']) != count($previous_mirror_status[$mirror]['components'])) { + // Notify if the consumer count changed. + $notices[] = sprintf(gettext("Mirror %s consumer count changed from %d to %d."), $mirror, count($previous_mirror_status[$mirror]['components']), count($mirror_status[$mirror]['components'])); + } + if (strtoupper($mirror_status[$mirror]['status']) == "DEGRADED") { + // Check the drive status as it may be different. + asort($mirror_status[$mirror]['components']); + asort($previous_mirror_status[$mirror]['components']); + if ($mirror_status[$mirror]['components'] != $previous_mirror_status[$mirror]['components']) + $notices[] = sprintf(gettext("Mirror %s drive status changed. Old: (%s) New: (%s)"), + $mirror, + implode(", ", $previous_mirror_status[$mirror]['components']), + implode(", ", $mirror_status[$mirror]['components'])); + } + } + } + } +} +if (count($notices)) { + file_notice("gmirror", implode("\n ", $notices), "GEOM Mirror Status Change", 1); +} +// Write out current status if changed +if ($mirror_status != $previous_mirror_status) + file_put_contents($status_file, serialize($mirror_status)); + +?> \ No newline at end of file diff --git a/usr/local/sbin/mpd.script b/usr/local/sbin/mpd.script new file mode 100644 index 000000000..4525b010b --- /dev/null +++ b/usr/local/sbin/mpd.script @@ -0,0 +1,1642 @@ +################################################################# +# +# $Id: mpd.script.sample,v 1.9 2009/10/04 19:36:04 amotin Exp $ +# +# Copyright (c) 1995-1999 Whistle Communications, Inc. All rights reserved. +# See ``COPYRIGHT.whistle'' +# +################################################################# + +## +## MPD Modem script variables: +## +## $DialPrefix Modem dialing prefix (eg. "DT") +## $Telephone Telephone number to dial (not duplicated using &) +## $ConnectTimeout Wait-for-connect timeout, in seconds (default 45 secs) +## $SpeakerOff Set to "yes" to quiet modem speakers +## $Serial230K If "yes", we can support 230K serial port speed +## $CountryCode Country code for Winmodem +## $InitString External initialization string +## $LoginScript If "yes", look for script login +## +## pfSense specific variables: +## $APN Access Point (host)Name for 3G connections +## $APNum Access Point Number, typically "1", might not matter +## $SimPin SIM card PIN number +## $PinWait Wait for SIM to connect to network after PIN entered +## +## ISDN Terminal Adapter specific variables (all start with "TA_"): +## +## $TA_Bonding Bonding on TA: "yes" or "no" +## $TA_NoDoubleTelno When $TA_Bonding, don't double the dialed number +## $TA_56K Restrict to 56K on TA: "yes" or "no" +## $TA_VoiceCall Originate calls using voice mode +## $TA_AuthChap Tell TA to use CHAP: "yes" or "no" +## $TA_Dirno1 TA directory #1 +## $TA_Dirno2 TA directory #2 +## $TA_SPID1 SPID #1 +## $TA_SPID2 SPID #2 +## $TA_SwitchType One of these values +## "NI-1" +## "DMS-100" +## "5ESS P2P" +## "5ESS MP" +## $TA_NewSwitch Means the switch type is new, initiate auto-detect +## (3Com Impact IQ only) +## +## We set $OptimizeNextTime to "yes" after a successful connection so we +## can avoid verifing configuration when things are working good. +## +## Internal variables: +## +## $ModemSetupFunc Routine to set up modem for dialing out +## $ModemAnsSetupFunc Routine to set up modem for answer mode (if different) +## $ModemDetectRing Routine to detect an incoming call for ringback +## $ModemIsAnalog If "yes" modem is analog (ie, not terminal adapter) +## + +################################################################# +# +# MODEM DIALING +# +################################################################# + +DialPeer: + set $CallingID "" + set $CalledID $Telephone + if $Telephone == "00000" goto DialNullModem + set $optimize $OptimizeNextTime + set $OptimizeNextTime "no" + + if $optimize == "yes" goto DialPeer2 + call ModemFind + if $ErrorMsg == "" goto DialPeer1 + log $ErrorMsg + failure +DialPeer1: + set $ModTelephone $Telephone + call ModemIdent + if $ModemDescription != "" goto DialPeer2 + log "No match found in the ModemIdent function in the chat script." + failure + +DialPeer2: + log "Detected $ModemDescription." + call $ModemSetupFunc + log "Dialing server at $Telephone..." + call ModemDial + if $dialResult == "OK" goto DialPeerOK + set $optimize "no" + failure + +DialPeerOK: + if $ConnectionSpeed == "" log "Connected at an unknown speed." + if $ConnectionSpeed == "" goto DialPeer3 + log "Connected at $ConnectionSpeed." +DialPeer3: + if $LoginScript == "yes" call AutoLogin + set $OptimizeNextTime "yes" + success + +DialPeerSetPin: + set $modemCmd "+CPIN?" + log $modemCmd + call ModemQuery + log $modemQuery + if $modemQuery match ".*READY.*" goto DialPinReady + set $modemCmd "+CPIN=\"$SimPin\"" + call ModemCmd2 + wait $PinWait + +DialPinReady: + return + +DialPeerSetAPN: + set $modemCmd "+CGDCONT=$APNum,\"IP\",\"$APN\"" + log $modemCmd + call ModemCmd2 + return + +# Null-modem connection +DialNullModem: + log "Connected via null modem connection." + success + +## +## Dial modem +## +## Variables: +## +## $DialPrefix Modem dialing prefix (eg. "DT") +## $ModTelephone Telephone number to dial +## $ConnectTimeout Wait-for-connect timeout, in seconds (default 45 secs) +## $noDialToneSubr (optional) Subroutine to call if NO DIALTONE +## $dialErrorSubr (optional) Subroutine to call if ERR +## +## Returns: +## +## $dialResult "OK" or "FAIL" +## $ConnectionSpeed Connection speed reported by modem (possibly empty) +## + +ModemDial: + set $dialResult "FAIL" + set $ConnectionSpeed "" + if $ConnectTimeout == "" set $ConnectTimeout 45 + print "AT${DialPrefix}${ModTelephone}\r\n" + log "AT${DialPrefix}${ModTelephone}" + match "NO CARRIER" DialAbortNoCar + match "NO DIAL" DialAbortNoDial + match "BUSY" DialAbortBusy + regex "CONNECT *([0-9]*).*$" DialConnect + match "ERR" DialError + wait $ConnectTimeout + log "No response from the modem after dialing." + return +DialAbortNoCar: + log "The remote modem did not answer." + return +DialAbortNoDial: + if $noDialToneSubr != "" goto $noDialToneSubr + log "No dialtone. Is the modem plugged in?" + return +DialError: + if ${ModTelephone} != "" goto DialErrorInit + log "Invalid empty telephone number." + return +DialErrorInit: + if $dialErrorSubr != "" goto $dialErrorSubr + log "Invalid dial init string." + return +DialAbortBusy: + log "The line was busy." + return +DialConnect: + set $ConnectionSpeed $matchedString1 + set $dialResult "OK" + return + +################################################################# +# +# MODEM ANSWERING +# +################################################################# + +## +## This is an idle script that waits for an incoming call and answers it +## +## Variables: +## +## $RingTimeout How long to wait for a RING before giving up +## $ConnectTimeout Wait-for-connect timeout, in seconds (default 45 secs) +## + +AnswerCall: + set $CallingID "" + set $CalledID "" + set $optimize $OptimizeNextTime + set $OptimizeNextTime "no" + +# Skip modem detection if we connected successfully last time + + if $optimize == "yes" goto AnswerCall2 + call ModemFind + if $ErrorMsg == "" goto AnswerCall0 + log $ErrorMsg + failure +AnswerCall0: + call ModemIdent + if $ModemDescription != "" goto AnswerCall1 + log "The modem is not responding." + failure +AnswerCall1: + log "Detected $ModemDescription." + +AnswerCall2: + if $ModemAnsSetupFunc == "" set $ModemAnsSetupFunc $ModemSetupFunc + call $ModemAnsSetupFunc + log "Waiting for ring..." + call ModemAnswer + if $answerReturn == "OK" goto AnswerCallOK + set $IdleResult "" + set $optimize "no" + failure + +AnswerCallOK: + log "Connected at $ConnectionSpeed." + set $OptimizeNextTime "yes" + set $IdleResult "answer" + success + +################################################################# +# +# MODEM RINGBACK +# +################################################################# + +## +## This is an idle script that implements the ringback feature. +## When we're idle, and we detect an incoming call, then call back +## to bring up the link. For analog modems, we have to wait until +## the ringing stops before dialing back (otherwise we'd answer the +## call, which we don't want to do). +## +## Variables: +## +## $RingbackTimeout How long before giving up (reset and try again). +## Default: 60 minutes +## $RingStoppedTime Max time between consecutive "RING"s (if analog) +## Default: 8 seconds +## + +Ringback: + set $CallingID "" + set $CalledID "" + if $RingbackTimeout == "" set $RingbackTimeout "3600" + if $RingStoppedTime == "" set $RingStoppedTime "8" + set $ModemDetectRing RingbackWait + call ModemFind + if $ErrorMsg == "" goto Ringback1 + log $ErrorMsg + failure +Ringback1: + call ModemIdent + if $ModemDescription != "" goto Ringback2 + log "The modem is not responding." + failure + +Ringback2: + log "Detected $ModemDescription." + goto $ModemDetectRing + +# Detect an incoming call by waiting for a "RING" indication +# On an analog modem, we have to wait for the ringing to stop + +RingbackWait: + match "RING\r\n" RingbackGotRings + log "Remote Dial-Back mode enabled; waiting for incoming call." + wait $RingbackTimeout + failure + +# We saw it ring; wait for the ringing to stop (analog modems only). + +RingbackGotRings: + log "Incoming call detected..." + if $ModemIsAnalog != "yes" goto RingbackDone +RingbackWaitStop: + match "RING\r\n" RingbackWaitStop + wait $RingStoppedTime +RingbackDone: + set $IdleResult "ringback" + success + +# Strip leading and trailing spaces and log calling party number + +RingbackDetectCID: + if $cid match " *(.*) *" nop + set $cid $matchedString1 + if $cid == "" goto RingbackDetectNoCID + log "Incoming call detected from $cid..." + success + +# We couldn't determine calling party number + +RingbackDetectNoCID: + log "Incoming call detected..." + success + +################################################################# +# +# MODEM IDENTIFICATION +# +################################################################# + +## +## Identify +## +## This is meant to be called from the top level, to just identify +## what's on the serial port and print out some info about it. +## + +Identify: + call ModemFind + if $ErrorMsg == "" goto Identify1 + failure +Identify1: + call ModemIdent + if $ModemDescription == "" failure + log "ANALOG=$ModemIsAnalog" + log "DESCRIPTION=$ModemDescription" + success + +## +## ModemIdent +## +## This identifies the type of modem and sets these variables accordingly: +## +## $ModemDescription +## $ModemSetupFunc +## $ModemAnsSetupFunc +## $ModemDetectRing +## $ModemIsAnalog +## +## If no response seen, this sets $ModemDescription to the empty string. +## + +ModemIdent: + set $ModemDescription "" + set $ModemSetupFunc "" + set $ModemAnsSetupFunc "" + set $ModemDetectRing "" + set $ModemIsAnalog "yes" + if $InitString != "" goto ModemIdentCustom + print "ATI\r\n" + match "ADTRAN EXPRESS XR" ModemIdentAdtranXRT + match "Model: Ovation MC950D Card" ModemIdentMC950D + match "ERR" ModemIdentGeneric + match "OK\r\n" ModemIdentGeneric + wait 3 + print "ATI1\r\n" + match "NTK omni.net" ModemIdentNTK + match "ERR" ModemIdentGeneric + match "OK\r\n" ModemIdentGeneric + wait 3 + print "ATI3\r\n" + match "Courier" ModemIdentUsr + match "Sportster" ModemIdentUsr + match "3ComImpact IQ" ModemIdentImpactIQ + match "U.S. Robotics 56K" ModemIdentUsr + match "ZOOM V.90" ModemIdentZoom56 + match "LT V.90" ModemIdentLucent + match "ERR" + match "OK\r\n" + wait 3 + print "ATI4\r\n" + match "AtermIT NEC Corporation" ModemIdentAterm + match "INSMATEV-7 NTT Corporation" ModemIdentAterm + match "MNP Class 10 V.34 Modem" ModemIdentDeskPorte + match "Smart One 56" ModemIdentSmartOne + match "ERR" + match "OK\r\n" + wait 3 + print "ATI5\r\n" + match "C885" ModemIdentC885 + match "ERR" + match "OK\r\n" ModemIdentGeneric + wait 3 + print "ATI8\r\n" + match "BitSURFR PRO\r" ModemIdentBitsurfr + match "BitSURFR PRO EZ" ModemIdentBitsurfrEZ + match "3C882" ModemIdentImpactIQ + match "ERR" + match "OK\r\n" + wait 3 + log "The modem is not responding to any ATI[1,3-5,8] commands." + failure + +ModemIdentGeneric: + set $ModemDescription "Hayes compatible modem" + if $SimPin != "" call DialPeerSetPin + if $APN != "" call DialPeerSetAPN + set $ModemSetupFunc GenericSetup + return + +ModemIdentCustom: + set $ModemDescription "Custom modem" + set $ModemSetupFunc CustomSetup + return + +ModemIdentUsr: + set $SportsterHack "no" + if $matchedString == "Sportster" set $SportsterHack "yes" + set $ModemDescription "USR $matchedString modem" + call GetOK + set $ModemSetupFunc UsrSetup + return +ModemIdentC885: + set $ModemDescription "Sierra Wireless Compass $matchedString USB 3G modem" + set $ModemSetupFunc GenericSetup + return +ModemIdentMC950D: + set $ModemDescription "Novatel Wireless $matchedString USB 3G modem" + set $ModemSetupFunc GenericSetup + return +ModemIdentBitsurfrEZ: + set $bitsEZ "yes" +ModemIdentBitsurfr: + set $ModemDescription "Motorola $matchedString" + call GetOK + set $ModemSetupFunc BitsurfrSetup + set $ModemIsAnalog "no" + set $ModemDetectRing BitsurfrDetectRing + return + +ModemIdentImpactIQ: + set $matchedString "3ComImpact IQ" + set $ModemDescription "$matchedString" + call GetOK + set $ModemSetupFunc ImpactIQSetup + set $ModemIsAnalog "no" + set $ModemDetectRing ImpactIQDetectRing + return + +ModemIdentAdtranXRT: + set $ModemDescription "AdTran Express XR/XRT" + call GetOK + set $ModemSetupFunc AdtranXRTSetup + set $ModemIsAnalog "no" + return + +ModemIdentAterm: + set $ModemDescription "NEC Aterm TA" + call GetOK + set $ModemSetupFunc AtermSetup + set $ModemIsAnalog "no" + return + +ModemIdentNTK: + set $ModemDescription "$matchedString" + call GetOK + set $ModemSetupFunc NTKSetup + set $ModemIsAnalog "no" + return + +ModemIdentDeskPorte: + set $ModemDescription "$matchedString" + call GetOK + set $ModemSetupFunc DeskPorteSetup + return + +ModemIdentZoom56: +ModemIdentSmartOne: + set $ModemDescription "$matchedString" + call GetOK + set $ModemSetupFunc Modem56Setup + return + +# Support the Lucent Winmodem, Xircom 56k +ModemIdentLucent: + set $ModemDescription "$matchedString" + call GetOK + set $ModemSetupFunc ModemLucentSetup + return + +################################################################# +# +# GENERIC MODEM SETUP +# +################################################################# + +GenericSetup: + set $noDialToneSubr GenericNoDialtone + set $temp "M1" + if $SpeakerOff == "yes" set $temp "M0" + set $modemCmd "&F&C1&D2E0S0=0${temp}" + call ModemCmd2 + return + +CustomSetup: + set $noDialToneSubr GenericNoDialtone + set $modemCmd "${InitString}" + call ModemCmd2 + return + +GenericNoDialtone: + log "No dialtone. Is the modem plugged in?" + return + +################################################################# +# +# USR MODEM SETUP +# +################################################################# + +UsrSetup: +# Lower baudrate to 57600 for crappy internal Sportster modem + if $SportsterHack != "yes" goto UsrSetup2 + if $modemDevice != "/dev/cuad2" goto UsrSetup2 + set $Baudrate 57600 + set $modemCmd "" + call ModemCmd2 +UsrSetup2: + set $noDialToneSubr GenericNoDialtone + set $temp "M1" + if $SpeakerOff == "yes" set $temp "M0" + set $modemCmd "&F1&C1&D2E0S0=0S13.0=1L0S6=5${temp}" + call ModemCmd2 + return + +################################################################# +# +# GENERAL 56K MODEM SETUP +# +################################################################# + +Modem56Setup: + set $noDialToneSubr GenericNoDialtone + set $temp "M1" + if $SpeakerOff == "yes" set $temp "M0" + set $modemCmd "&FL2W2E0${temp}" + call ModemCmd2 + return + +################################################################# +# +# LUCENT WINMODEM AND XIRCOM 56K SETUP +# +################################################################# + +ModemLucentSetup: + set $noDialToneSubr GenericNoDialtone + set $temp "M1" + if $SpeakerOff == "yes" set $temp "M0" + set $tempCountryCode "" + if $CountryCode != "" set $tempCountryCode "+GCI=${CountryCode}" + if $CountryCode != "" log "Use country ${CountryCode}" + set $modemCmd "&FL2W2E0${temp}${tempCountryCode}" + call ModemCmd2 + return + +################################################################# +# +# BITSURFR PRO AND BITSURFR PRO EZ SETUP +# +################################################################# + +BitsurfrSetup: + set $noDialToneSubr BitsurfrNoDialtone + set $factory "1" + if $bitsEZ == "yes" set $factory "0" + set $modemCmd "Z&F${factory}&C1&D2E0W1X2%A2=95S0=0" + call ModemCmd2 + +# Set to 230K baud if we support it + + if $bitsEZ != "yes" goto BitsurfrSetup1 + set $modemCmd "@P2=230400" + set $newBaudrate "230400" + call SetBaudrate + +# Check software revision and ISDN settings + +BitsurfrSetup1: + if $optimize == "yes" goto BitsurfrSetup2 + if $bitsEZ != "yes" call BitsurfrCheckRev + call BitsurfrCheckConfig + +# Set the PAP/CHAP, multi-link, and 56K/64K settings, and return + +BitsurfrSetup2: + set $authCmd "@M2=P" + if $TA_AuthChap == "yes" set $authCmd "@M2=C" + set $bondCmd "@B0=1" + if $TA_Bonding == "yes" set $bondCmd "@B0=2" + set $bearCmd "%A4=0" + if $TA_56K == "yes" set $bearCmd "%A4=1" + if $TA_VoiceCall == "yes" set $bearCmd "%A4=1" + set $voiceCmd "%A98=D%A96=0" + if $TA_VoiceCall == "yes" set $voiceCmd "%A98=S%A96=1" + +# BS PRO EZ changes + + if $bitsEZ == "yes" set $authCmd "${authCmd}@M20=\"\"" + set $modemCmd "$authCmd$bondCmd$bearCmd$voiceCmd" + call ModemCmd2 + if $TA_NoDoubleTelno == "yes" return + if $TA_Bonding == "yes" set $ModTelephone "${Telephone}&${Telephone}" + return + +## +## What to do when NO DIALTONE +## + +BitsurfrNoDialtone: + log "ISDN initialization failed (or BitSURFR restarting). Please verify proper line connection and ISDN settings." + return + +## +## BitsurfrCheckConfig +## +## Verify and adjust ISDN configuration as necessary +## + +BitsurfrCheckConfig: + log "Checking the BitSURFR's ISDN configuration..." + set $valueChanged "no" + +# Check switch type + + set $checkCmd "!C0" + set $checkValue "000" + set $checkValueNew "0" + if $TA_SwitchType == "DMS-100" set $checkValue "001" + if $TA_SwitchType == "DMS-100" set $checkValueNew "1" + if $TA_SwitchType == "NI-1" set $checkValue "002" + if $TA_SwitchType == "NI-1" set $checkValueNew "2" + set $checkMsg "Reprogramming switch type ($TA_SwitchType)..." + call ModemCheckValue + + set $checkCmd "!C1" + set $checkValue "004" + set $checkValueNew "4" + if $TA_SwitchType == "DMS-100" set $checkValue "003" + if $TA_SwitchType == "DMS-100" set $checkValueNew "3" + if $TA_SwitchType == "5ESS P2P" set $checkValue "000" + if $TA_SwitchType == "5ESS P2P" set $checkValueNew "0" + if $TA_SwitchType == "5ESS MP" set $checkValue "001" + if $TA_SwitchType == "5ESS MP" set $checkValueNew "1" + set $checkMsg "Reprogramming switch software version..." + call ModemCheckValue + +# Check directory numbers + + set $checkCmd "*1!N1" + set $checkValue $TA_Dirno1 + set $checkValueNew $TA_Dirno1 + set $checkMsg "Reprogramming voice line #1 directory number..." + call ModemCheckValue + + set $checkCmd "*2!N1" + set $checkValue $TA_Dirno2 + set $checkValueNew $TA_Dirno2 + set $checkMsg "Reprogramming voice line #2 directory number..." + call ModemCheckValue + set $checkCmd "!N1" + set $checkMsg "Reprogramming data line directory number..." + call ModemCheckValue + +# Check SPIDs + + set $checkCmd "*1!C6" + set $checkValue $TA_SPID1 + set $checkValueNew $TA_SPID1 + set $checkMsg "Reprogramming voice line #1 SPID..." + call ModemCheckValue + + set $checkCmd "*2!C6" + set $checkValue $TA_SPID2 + set $checkValueNew $TA_SPID2 + set $checkMsg "Reprogramming voice line #2 SPID..." + call ModemCheckValue + set $checkCmd "!C6" + set $checkMsg "Reprogramming data line SPID..." + call ModemCheckValue + +# Restart if necessary + + if $valueChanged == "no" return + log "Restarting BitSURFR Pro with new configuration..." + set $modemCmd ">W" + call ModemCmd2 + set $modemCmd ">Z" + call ModemCmd2 + failure + +## +## Verify the BitSURFR's software revision. Only do this +## once, the first time we try to dial. +## + +BitsurfrCheckRev: + log "Checking the BitSURFR's software revision..." + print "ATI3\r\n" + match "-1A" BitsurfrCheckRevOld + match "-1B" BitsurfrCheckRevOld + match "-1C" BitsurfrCheckRevOld + match "-1D" BitsurfrCheckRevOld + match "-1E" BitsurfrCheckRevOld + match "-1F" BitsurfrCheckRevOld + match "-1G" BitsurfrCheckRevOld + match "-1H" BitsurfrCheckRevOld + match "-1I" BitsurfrCheckRevOld + match "OK\r\n" BitsurfrCheckRevOK + match "ERR" + wait 5 + log "The BitSURFR did not properly answer ATI3." + failure +BitsurfrCheckRevOK: + return +BitsurfrCheckRevOld: + log "The BitSURFR Pro has an old software revision $matchedString. Please upgrade according to the manufacturer's instructions." + call GetOK + failure + +# This is how we detect an incoming call with a BitSURFR + +BitsurfrDetectRing: +# First, we need to be properly configured + call BitsurfrSetup +# Enable Caller-ID logging + set $modemCmd "@N0=1*1@N0=1*2@N0=1" + call ModemCmd + if $modemCmdResult != "OK" goto RingbackWait +# A "RING" at any time is good enough + match ringset "RING\r\n" RingbackDone +# Clear Caller-ID buffers + set $modemCmd "@L0*1@L0*2@L0" + call ModemCmd2 +# Read each buffer + call BitsurfrDetectReadCID + log "Remote Dial-Back mode enabled; waiting for incoming call." +# Now wait indefinitely for one of those buffers to change +BitsurfrDetectLoop: + wait 5 + set $oldDataCID $dataCID + set $oldVoice1CID $voice1CID + set $oldVoice2CID $voice2CID + call BitsurfrDetectReadCID + if $oldDataCID != $dataCID goto BitsurfrDetectDone + if $oldVoice1CID != $voice1CID goto BitsurfrDetectDone + if $oldVoice2CID != $voice2CID goto BitsurfrDetectDone + goto BitsurfrDetectLoop + +# Examine the CID from each port +BitsurfrDetectDone: + set $cid $dataCID + call BitsurfrDetectTryCID + set $cid $voice1CID + call BitsurfrDetectTryCID + set $cid $voice2CID + call BitsurfrDetectTryCID + goto RingbackDetectNoCID + +# Try to extract the calling party number +BitsurfrDetectTryCID: +# Strip the log number + if $cid match "[0-9] (.*)" set $cid $matchedString1 +# Check for various strings + if $cid match "BLOCKED" return + if $cid match "NO NUMBER" return + if $cid match "NO CID SERVICE" return + if $cid match "OUT OF AREA" return + goto RingbackDetectCID + +# Read Caller-ID buffers +BitsurfrDetectReadCID: + set $modemCmd "@L1" + call ModemQueryStrip + set $dataCID $modemQuery + set $modemCmd "*1@L1" + call ModemQueryStrip + set $voice1CID $modemQuery + set $modemCmd "*2@L1" + call ModemQueryStrip + set $voice2CID $modemQuery + return + +################################################################# +# +# 3COM IMPACT IQ SETUP +# +################################################################# + +ImpactIQSetup: + set $noDialToneSubr ImpactIQNoDialtone + set $modemCmd "Z&F%C2E0" + call ModemCmd2 + +# Set to 230K baud if we support it + + set $modemCmd "$$B230400" + set $newBaudrate "230400" + call SetBaudrate + +# Check ISDN config and link status (XXX should we check revision too?) + +ImpactIQSetup1: + if $optimize == "yes" goto IQInitSetup2 + call ImpactIQCheckConfig + call ImpactIQCheckLink + +# Now set the PAP/CHAP setting and voice/data originate mode setting + +IQInitSetup2: + set $authCmd "S84=1" + if $TA_AuthChap == "yes" set $authCmd "S84=0" + set $voiceCmd "S61=0" + if $TA_VoiceCall == "yes" set $voiceCmd "S61=1" + set $modemCmd "$authCmd$voiceCmd" + call ModemCmd2 + if $TA_NoDoubleTelno == "yes" return + if $TA_Bonding == "yes" set $ModTelephone "${Telephone}&${Telephone}" + return + +## +## What to do when NO DIALTONE +## + +ImpactIQNoDialtone: + log "ISDN config problem (or modem restart). Check your ISDN switch type, directory numbers, and SPID settings." + return + +## +## ImpactIQCheckLink +## +## Check the link status registers +## + +ImpactIQCheckLink: + log "Checking the ISDN modem's link status..." + print "ATS59?\r\n" + match "000" IQSyncFail + match "001" IQSyncOK + match "ERR" + match "OK\r\n" + wait 3 + call GetOK + log "The ISDN modem did not properly answer ATS59?" + failure +IQSyncOK: + call GetOK + goto ImpactIQCheckInit +IQSyncFail: + log "The ISDN modem is not receiving any ISDN signal. Please verify that it's connected to an ISDN line." + call GetOK + failure + +ImpactIQCheckInit: + set $impactInitReg "57" + call IQInitCheck + if $TA_Bonding == "yes" return + set $impactInitReg "58" + call IQInitCheck + return + +# A little subroutine + +IQInitCheck: + print "ATS${impactInitReg}?\r\n" + match "000" IQInitOK + match "001" IQInitOK + match "002" IQInitFail + match "ERR" + match "OK\r\n" + wait 3 + call GetOK + log "The ISDN modem did not properly answer ATS${impactInitReg}?" + failure +IQInitOK: + call GetOK + return +IQInitFail: + log "ISDN initialization failed. Please check your ISDN switch type, directory numbers, and SPID settings." + call GetOK + failure + +## +## ImpactIQCheckConfig +## +## Verify and adjust ISDN configuration as necessary +## + +ImpactIQCheckConfig: + log "Checking the ISDN modem's ISDN configuration..." + set $valueChanged "no" + +# Check switch type XXX +# +# NOTE: The Impact IQ changes the value of this field as it auto-detects. +# Not only that, but it cycles through each switch type as it is "trying +# out" that type, so that reading this field is pretty much useless... +# Our strategy is just to hope that auto-detect works! + + if $TA_NewSwitch != "yes" goto ImpactIQCheckDirnos + log "Initiating switch type auto-detect..." + set $modemCmd "S50=0" + call ModemCmd2 + set $TA_NewSwitch "" + set $valueChanged "yes" + set $iq_new_switch "yes" + +# Check directory numbers + +ImpactIQCheckDirnos: + set $checkCmd "S51" + set $checkValue $TA_Dirno1 + set $checkValueNew $TA_Dirno1 + set $checkMsg "Reprogramming line #1 directory number..." + call ModemCheckValue + + set $checkCmd "S53" + set $checkValue $TA_Dirno2 + set $checkValueNew $TA_Dirno2 + set $checkMsg "Reprogramming line #2 directory number..." + call ModemCheckValue + +# Check SPIDs + + set $checkCmd "S52" + set $checkValue $TA_SPID1 + set $checkValueNew $TA_SPID1 + set $checkMsg "Reprogramming line #1 SPID..." + call ModemCheckValue + + set $checkCmd "S54" + set $checkValue $TA_SPID2 + set $checkValueNew $TA_SPID2 + set $checkMsg "Reprogramming line #2 SPID..." + call ModemCheckValue + +# Check 56K/64K setting + + set $checkValue "064" + set $checkValueNew "64" + if $TA_56K == "yes" set $checkValue "056" + if $TA_56K == "yes" set $checkValueNew "56" + set $checkCmd "S60" + set $checkMsg "Reprogramming B channel data rate to ${checkValueNew}K..." + call ModemCheckValue + set $checkValueNew "" + +# Check Multi-link setting + + set $checkValue "000" + set $checkValueNew "0" + if $TA_Bonding == "yes" set $checkValue "001" + if $TA_Bonding == "yes" set $checkValueNew "1" + set $checkCmd "S80" + set $checkMsg "Reprogramming mutli-link PPP setting..." + call ModemCheckValue + +# Restart if necessary, and wait extra long if the switch type changed + + if $valueChanged == "no" return + log "Restarting ISDN modem with the new configuration..." + set $modemCmd "Z" + call ModemCmd2 + failure + +## +## Detect an incoming call with the 3Com +## + +ImpactIQDetectRing: + call ImpactIQSetup + if $modemCmdResult != "OK" goto RingbackWait + match ringset "RING\r\n" RingbackDone +# Clear Caller-ID buffers + set $modemCmd "\\N0" +# We don't care if this command fails... + call ModemCmd +# Read most recent incoming call + call ImpactIQDetectReadCID + log "Remote Dial-Back mode enabled; waiting for incoming call." +# Now wait for a change +ImpactIQDetectLoop: + wait 5 + set $oldIncomingCall $incomingCall + call ImpactIQDetectReadCID + if $oldIncomingCall != $incomingCall goto ImpactIQDetectDone + goto ImpactIQDetectLoop + +# Examine the CID from each port +ImpactIQDetectDone: + if $incomingCall !match "((.{14}).{10}) ((.{14}).{10}) ((.{14}).{10})" goto RingbackDetectNoCID + set $dataCID $matchedString2 + set $voice1CID $matchedString4 + set $voice2CID $matchedString6 + set $cid $dataCID + call ImpactIQDetectTryCID + set $cid $voice1CID + call ImpactIQDetectTryCID + set $cid $voice2CID + call ImpactIQDetectTryCID + goto RingbackDetectNoCID + +# Look for a valid CID string +ImpactIQDetectTryCID: + if $cid match " *" return + if $cid match " *N/A" return + goto RingbackDetectCID + +# Read first line of incoming call log (it's the 14th line of output) +ImpactIQDetectReadCID: + set $modemCmd "\\N" + call ModemCmdSend + call ReadLine +# Older version of the 3Com don't support this command + if $matchedString == "OK" return + if $matchedString match "ERR(O)?(R)?" return + call ReadLine + call ReadLine + call ReadLine + call ReadLine + call ReadLine + call ReadLine + call ReadLine + call ReadLine + call ReadLine + call ReadLine + call ReadLine + call ReadLine + call ReadLine + set $incomingCall $matchedString + call GetOK + return + +################################################################# +# +# NEC ATERM SETUP +# +################################################################# + +AtermSetup: + if $AtermHardReset == "yes" goto AtermSetup2 + +# Do hardware reset, which takes a while and doesn't give back "OK" + + log "Initializing modem..." + print "ATZ98\r\n" + wait 6 + set $AtermHardReset "yes" + failure + +AtermSetup2: + +# Set to 230K baud if we support it + + set $modemCmd "" + set $newBaudrate "230400" + call SetBaudrate + +# Is this an IT55 or IT65? + + set $atermIT65 "" + set $modemCmd "$$N14=0" + call ModemCmd + if $modemCmdResult == "OK" set $atermIT65 "yes" + +# Set normal stuff, PPP mode + + set $modemCmd "&C1&D0&K3X4$$N1=1$$N9=0" + call ModemCmd2 + +# Set the multi-link setting + + set $bondCmd "$$N11=0" + if $TA_Bonding == "yes" set $bondCmd "$$N11=1" + set $modemCmd "$bondCmd" + call ModemCmd2 + +# Additional settings for the IT65 go here... + + if $atermIT65 != "yes" return + return + +################################################################# +# +# MICROCOM DESKPORTE SETUP +# +################################################################# + +DeskPorteSetup: + set $noDialToneSubr GenericNoDialtone + set $temp "M1" + if $SpeakerOff == "yes" set $temp "M0" + set $modemCmd "Z&F&C1&D2X3E0S0=0${temp}" + call ModemCmd2 + return + +################################################################# +# +# KOREAN TERMINAL ADAPTER SETUP +# +################################################################# + +NTKSetup: + set $noDialToneSubr GenericNoDialtone + set $modemCmd "ZB40&J3" + call ModemCmd2 + return + +################################################################# +# +# ADTRAN EXPRESS XRT SETUP +# +################################################################# + +AdtranXRTSetup: + set $noDialToneSubr ImpactIQNoDialtone + set $dialErrorSubr AdtranXRTDialError + set $bonding "&F1" + if $TA_Bonding == "yes" set $bonding "&F2" + set $chap "S118=0" + if $TA_AuthChap == "yes" set $chap "S118=32" + set $origCmd "S53=3" + if $TA_56K == "yes" set $origCmd "S53=2" + if $TA_VoiceCall == "yes" set $origCmd "S53=0" + set $modemCmd "ZE0${bonding}&C1&D2${chap}${origCmd}" + call ModemCmd2 + +# Check ISDN config and link status (XXX should we check revision too?) + + if $optimize == "yes" return + call AdtranXRTCheckConfig + call AdtranXRTCheckLink + return + +## +## What to do when ERROR when dialing +## +## This is what the Adtran returns if the line is not ready yet. +## So we look into the status buffer to see if we recognize the +## error condition. +## + +AdtranXRTDialError: + call AdtranXRTDiagnose + failure + +## +## Check the last status bufffer entry for what the problem is +## XXX Figure out more stuff to look for and when it can happen +## + +AdtranXRTDiagnose: + log "Checking the Adtran status buffer..." + print "AT!S\r\n" + match "\r\n\r\n" AdtranXRTDiagBlank + match "END OF STATUS BUFFER" AdtranXRTDiagBlank + match "L1 not up." AdtranXRTDiagL1 + match "FACILITY_NOT_SUBSCRIBED" AdtranXRTDiagFNS + match "Unknown AT cmd" IQSyncOK + match "ERR" + match "OK\r\n" + wait 3 + call GetOK + log "The ISDN modem did not properly answer ATS59?" + failure + goto ImpactIQCheckInit + +AdtranXRTDiagFNS: + log "ISDN initialization failed. Please check your ISDN switch type, directory numbers, and SPID settings." + failure + +AdtranXRTDiagL1: + log "The ISDN modem is not receiving any ISDN signal. Please verify that it's connected to an ISDN line." + failure + +AdtranXRTDiagBlank: + log "ISDN initialization failed or restarting link. Please verify proper line connection and ISDN settings." + failure + +## +## AdtranXRTCheckLink +## +## Check the link status registers +## + +AdtranXRTCheckLink: + log "Checking the ISDN modem's link status..." + print "AT!S1\r\n" + match "Link In Sync" AdtranXRTSyncReg + match "Getting" AdtranXRTSyncReg + match "Register" AdtranXRTSyncReg + match "Ready" AdtranXRTSyncOK + match "Down" AdtranXRTSyncFail + match "ERR" + match "OK\r\n" + wait 3 + call GetOK + log "The ISDN modem did not properly answer AT!S1." + failure +AdtranXRTSyncOK: + return +AdtranXRTSyncFail: + print "ATDT1\r\n" + wait 1 + goto AdtranXRTDiagnose +AdtranXRTSyncReg: + log "The ISDN modem is initializing itself." + failure + +## +## AdtranXRTCheckConfig +## +## Verify and adjust ISDN configuration as necessary +## + +AdtranXRTCheckConfig: + log "Checking the ISDN modem's ISDN configuration..." + set $valueChanged "no" + + set $checkCmd "S52" + set $checkValue "000" + set $checkValueNew "0" + if $TA_SwitchType == "DMS-100" set $checkValue "001" + if $TA_SwitchType == "DMS-100" set $checkValueNew "1" + if $TA_SwitchType == "NI-1" set $checkValue "002" + if $TA_SwitchType == "NI-1" set $checkValueNew "2" + set $checkMsg "Reprogramming switch type ($TA_SwitchType)..." + call ModemCheckValue + +# Check directory numbers + +AdtranXRTCheckDirnos: + set $checkCmd "SS62" + set $checkValue $TA_Dirno1 + set $checkValueNew $TA_Dirno1 + set $checkMsg "Reprogramming line #1 directory number..." + call ModemCheckValue + + set $checkCmd "SS63" + set $checkValue $TA_Dirno2 + set $checkValueNew $TA_Dirno2 + set $checkMsg "Reprogramming line #2 directory number..." + call ModemCheckValue + +# Check SPIDs + + set $checkCmd "SS60" + set $checkValue $TA_SPID1 + set $checkValueNew $TA_SPID1 + set $checkMsg "Reprogramming line #1 SPID..." + call ModemCheckValue + + set $checkCmd "SS61" + set $checkValue $TA_SPID2 + set $checkValueNew $TA_SPID2 + set $checkMsg "Reprogramming line #2 SPID..." + call ModemCheckValue + +# Restart if necessary + + if $valueChanged == "no" return + log "Restarting ISDN modem with the new configuration..." + set $modemCmd "&W" + call ModemCmd2 + set $modemCmd "Z" + call ModemCmd2 + failure + +################################################################# +# +# BASIC MODEM STUFF +# +################################################################# + +## +## ModemAnswer +## +## Wait for a RING and answer it. Variables: +## +## $RingTimeout How long for a RING before giving up (default 10 min) +## $ConnectTimeout How long for connect after answering (default 45 secs) +## +## Returns: +## +## $answerReturn "OK" or "FAIL" +## $ConnectionSpeed Connection speed reported by modem (possibly empty) +## + +ModemAnswer: + if $RingTimeout == "" set $RingTimeout 600 + if $ConnectTimeout == "" set $ConnectTimeout 45 + match "RING\r" ModemAnswerGotRing + wait $RingTimeout + log "No RING detected after $RingTimeout seconds." + set $answerReturn "FAIL" + return +ModemAnswerGotRing: + log "Incoming call detected..." + print "ATA\r\n" + regex "CONNECT *([0-9]*).*$" ModemAnswerConnect + wait $ConnectTimeout + log "Failed to connect incoming call." + set $answerReturn "FAIL" + return +ModemAnswerConnect: + set $ConnectionSpeed $matchedString1 + set $answerReturn "OK" + return + +## +## ModemFind +## +## Just try to get where we are talking to the modem. +## Returns with $ErrorMsg equal to the empty string if +## we found the modem, or else some error message if not. +## + +ModemFind: + +# Do a quick check first... + + set $ErrorMsg "" + call ModemFind4 + if $modemCmdResult == "OK" return + if $Serial230K != "yes" goto ModemFind1 + set $newBaudrate 230400 + if $Baudrate == "230400" set $newBaudrate 115200 + set $Baudrate $newBaudrate + call ModemFind4 + if $modemCmdResult == "OK" return + +# Now try possible baud rates more extensively + +ModemFind1: + set $Baudrate 115200 + call ModemFind2 + if $modemCmdResult == "OK" return + if $Serial230K != "yes" return + set $Baudrate 230400 + wait 1 + call ModemFind2 + if $modemCmdResult == "OK" return + set $ErrorMsg "The modem is not responding." + return + +# This tries the +++ sequence in case the modem is in "on-line" mode + +ModemFind2: + call ModemFind3 + if $modemCmdResult == "OK" return + call SendTriplePlus + call ModemFind3 + return + +# This tries a few commands to see if the modem responds with "OK" + +ModemFind3: + set $modemCmd "" + set $modemCmdTimeout 1 + call ModemCmd0 + if $modemCmdResult == "OK" return + set $modemCmd "Z" + set $modemCmdTimeout 2 + call ModemCmd0 + if $modemCmdResult == "OK" return +ModemFind4: + set $modemCmd "" + set $modemCmdTimeout 1 + call ModemCmd0 + return + +## +## SetBaudrate +## +## Change baud rates (as allowed) and verify modem is still there. +## If not, then fail the script. +## +## $newBaudrate New baud rate; if we don't support it, just return. +## $modemCmd Command to send modem to jump to the new baud rate. +## + +SetBaudrate: + if $Baudrate == $newBaudrate return + if $newBaudrate != 230400 goto SetBaudrate2 + if $Serial230K != "yes" return +SetBaudrate2: + log "Setting serial port speed to $newBaudrate..." + print "AT$modemCmd\r\n" + wait 1 + set $Baudrate $newBaudrate + wait 1 + set $modemCmd "" + goto ModemCmd2 + +## +## ModemCheckValue +## +## Check the value in an S-register (or equivalent). If it is +## not what we want, then change it and set $valueChanged to "yes", +## and log $checkMsg (if not empty). The value $checkValueNew is +## what we program the S-register to equal if it doesn't match. +## +## The $checkValue must match exactly on the first line of output. +## If we get any wierd error, then fail the script. +## + +ModemCheckValue: + set $modemCmd "${checkCmd}?" + call ModemQuery + if $modemQuery == $checkValue return + set $valueChanged "yes" + set $checkValueMyNew $checkValueNew + if $checkValueNew == "" set $checkValueMyNew $checkValue + set $modemCmd "${checkCmd}=${checkValueMyNew}" + if $checkMsg != "" log $checkMsg + goto ModemCmd2 + +## +## ModemCmd +## +## Do the modem command in $modemCmd. Set $modemCmdResult to +## +## OK The modem returned "OK" +## ERROR The modem returned "ERR" or "ERROR" +## TIMEOUT The modem did not respond within three seconds +## +## If ERR or TIMEOUT, also set $ErrorMsg to an appropriate message +## + +ModemCmd: + set $modemCmdTimeout 3 +ModemCmd0: + print "AT$modemCmd\r\n" + match "OK\r\n" ModemCmdOk + match "ERR" ModemCmdErr + wait $modemCmdTimeout + set $modemCmdResult "TIMEOUT" +ModemCmdTimeout: + set $ErrorMsg "The modem is not responding to \"AT$modemCmd\" at ModemCmd: label." + return +ModemCmdOk: + set $modemCmdResult "OK" + return +ModemCmdErr: + set $modemCmdResult "ERROR" + set $ErrorMsg "The modem responded with \"ERROR\" to the command \"AT$modemCmd\" at ModemCmd: label." + return + +## +## ModemCmd2 +## +## Do the modem command in $modemCmd. If we don't get OK back, +## fail the script and log an error message. +## + +ModemCmd2: + call ModemCmd + if $modemCmdResult == "OK" return + log $ErrorMsg + failure + +## +## ModemCmdSend +## +## Send a modem command and read the echo'ed CR-LF +## + +ModemCmdSend: + print "AT$modemCmd\r\n" + match "\r\n" ModemCmdSend2 + wait 3 + goto ModemCmdTimeout +ModemCmdSend2: + return + +## +## ModemQuery +## +## Do the $modemCmd and expect exactly one line of response, then OK. +## Return the response in $modemQuery. If anything goes wrong, die. +## + +ModemQuery: + call ModemCmdSend + call ReadLine + set $modemQuery $matchedString + if $modemQuery == "ERR" goto ModemQueryError + if $modemQuery == "ERROR" goto ModemQueryError + goto GetOK +ModemQueryError: + call ModemCmdErr + failure + +# Same thing, but strip leading and trailing blanks + +ModemQueryStrip: + call ModemQuery + if $modemQuery match " *(.*) *" nop + set $modemQuery $matchedString1 + return + +## +## ReadLine +## +## Read the next line of output. It should come within $modemCmdTimeout +## seconds, or else we fail. Return it in $matchedString. +## + +ReadLine: + regex "^.*$" ReadLineDone + wait $modemCmdTimeout + set $ErrorMsg "The modem is not responding." + log $ErrorMsg + failure +ReadLineDone: + return + +## +## Get an OK within 3 seconds or die +## + +GetOK: + match "OK\r\n" GotOK + wait 3 + log "The modem did not respond with \"OK\"." + failure +GotOK: + return + +## +## Send "+++" to get modem attention if on-line +## + +SendTriplePlus: + print "\r\n" + wait 2 + print "+++" + wait 2 + return + +################################################################# +# +# LOGIN AUTO-SCRIPTING +# +################################################################# + +## +## AutoLogin +## +## Here we attempt to figure out what the remote server wants +## from us. We do this by checking for bytes that correspond +## to PPP packets (in which case we are done) as well as common +## login type stuff like "name:", "ogin:", etc. +## +## This always returns. The hope is that when it returns, the +## remote side has reached PPP mode. +## +## This has been crafted from empirical evidence. Lots of terminal +## servers have various intelligent/stupid features which we +## take advantage of/have to work around. +## +## Variables (set automatically by mpd): +## +## $Login Authorization login +## $Password Authorization password +## + +AutoLogin: + log "Initiating auto-login..." + +# Spend at most this long doing auto-login before giving up + + timer autoLogin 5 AutoLoginTimeout + +# At any time if we see an LCP frame (not our own echo) then we're done + + match autoLogin "\x7e\xff\x03\xc0\x21" AutoLoginFrame + match autoLogin "\x7e\xff\x7d\x23\xc0\x21\x7d\x21" AutoLoginFrame + match autoLogin "\x7e\xc0\x21" AutoLoginFrame + +# Now send a "fake" PPP frame (this is an empty config-reject with id# 172). +# This should trigger any auto-detecting servers to jump into PPP mode, +# which is good because it's faster (by avoiding human readable messages) +# and more reliable (PPP framing). + + print "\x7e\xff\x7d\x23\xc0\x21\x7d\x24\xac\x7d\x20\x7d\x24\x2e\x2b\x7e" + +# Wait one second for server to auto-detect PPP or send a login prompt. +# After one second of neither, try sending a carriage return (some servers +# require this). After that, we have to see something recognizable from +# the peer, otherwise we'll just timeout. + + match "ogin" AutoLoginPrompt + match "name" AutoLoginPrompt + wait 1 + print "\r" + match "ogin" AutoLoginPrompt + match "name" AutoLoginPrompt + wait + +# At this point we've seen a login prompt; do the manual login + +AutoLoginPrompt: + log "Sending login..." + print "${Login}\r" + match "word" + wait + log "Sending password..." + print "${Password}\r" + match "\r" + wait + if $didLogin != "yes" match "ogin:" LoginAgain + match ">" + match "%" + match ":" + wait + log "Enabling PPP..." + print "ppp\r" + cancel all + return + +LoginAgain: + set $didLogin "yes" + goto AutoLoginPrompt + +# We saw a PPP frame + +AutoLoginFrame: + log "Detected PPP frame." + cancel all + return + +# We timed out before seeing a PPP frame. Cross your fingers and pray. + +AutoLoginTimeout: + log "Auto-login timeout." + cancel all + return + diff --git a/usr/local/sbin/ntpdate_sync_once.sh b/usr/local/sbin/ntpdate_sync_once.sh new file mode 100755 index 000000000..c183b7955 --- /dev/null +++ b/usr/local/sbin/ntpdate_sync_once.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +NOTSYNCED="true" +MAX_ATTEMPTS=3 +SERVER=`/bin/cat /cf/conf/config.xml | /usr/bin/grep timeservers | /usr/bin/cut -d">" -f2 | /usr/bin/cut -d"<" -f1` +if [ "${SERVER}" = "" ]; then + exit +fi + +/bin/pkill -f ntpdate_sync_once.sh + +ATTEMPT=1 +# Loop until we're synchronized, but for a set number of attempts so we don't get stuck here forever. +while [ "$NOTSYNCED" = "true" ] && [ ${ATTEMPT} -le ${MAX_ATTEMPTS} ]; do + # Ensure that ntpd and ntpdate are not running so that the socket we want will be free. + while [ true ]; do + /usr/bin/killall ntpdate 2>/dev/null + /bin/pgrep ntpd + if [ $? -eq 0 ]; then + /usr/bin/killall ntpd 2>/dev/null + else + break + fi + done + sleep 1 + /usr/local/sbin/ntpdate -s -t 5 ${SERVER} + if [ "$?" = "0" ]; then + NOTSYNCED="false" + else + sleep 5 + ATTEMPT=`expr ${ATTEMPT} + 1` + fi +done + +if [ "$NOTSYNCED" = "true" ]; then + echo "Giving up on time sync after ${MAX_ATTEMPTS} attempts." | /usr/bin/logger -t ntp; +else + echo "Successfully synced time after ${ATTEMPT} attempts." | /usr/bin/logger -t ntp; +fi + +if [ -f /var/etc/ntpd.conf ]; then + echo "Starting NTP Daemon." | /usr/bin/logger -t ntp; + /usr/local/sbin/ntpd -g -c /var/etc/ntpd.conf -p /var/run/ntpd.pid +else + echo "NTP configuration file missing, not starting daemon." | /usr/bin/logger -t ntp; +fi diff --git a/usr/local/sbin/openvpn.attributes.sh b/usr/local/sbin/openvpn.attributes.sh new file mode 100755 index 000000000..b88d1dfbf --- /dev/null +++ b/usr/local/sbin/openvpn.attributes.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +echo $script_type > /tmp/script +if [ "$script_type" = "client-connect" ]; then + if [ -f /tmp/$common_name ]; then + /bin/cat /tmp/$common_name > $1 + /bin/rm /tmp/$common_name + fi +elif [ "$script_type" = "client-disconnect" ]; then + command="/sbin/pfctl -a 'openvpn/$common_name' -F rules" + eval $command + /sbin/pfctl -k $ifconfig_pool_remote_ip + /sbin/pfctl -K $ifconfig_pool_remote_ip +fi + +exit 0 diff --git a/usr/local/sbin/ovpn-linkdown b/usr/local/sbin/ovpn-linkdown new file mode 100755 index 000000000..708d5077f --- /dev/null +++ b/usr/local/sbin/ovpn-linkdown @@ -0,0 +1,7 @@ +#!/bin/sh +/sbin/pfctl -i $1 -Fs +# delete the node just in case mpd cannot do that +/bin/rm -f /var/etc/nameserver_$1 +/bin/rm -f /tmp/$1_router +/bin/rm -f /tmp/$1up +/usr/local/sbin/pfSctl -c 'filter reload' diff --git a/usr/local/sbin/ovpn-linkup b/usr/local/sbin/ovpn-linkup new file mode 100755 index 000000000..2f3246e8e --- /dev/null +++ b/usr/local/sbin/ovpn-linkup @@ -0,0 +1,17 @@ +#!/bin/sh + +# let the configuration system know that the ip has changed. +#/usr/local/sbin/pfSctl -c "interface newip $interface" + +if [ "${dev_type}" = "tun" ]; then + if [ "" != "$route_vpn_gateway" ]; then + /bin/echo $route_vpn_gateway > /tmp/$1_router + else + /bin/echo $5 > /tmp/$1_router + fi +fi + +/usr/bin/touch /tmp/$1up +# reload filter +/usr/local/sbin/pfSctl -c "interface newip $1" +exit 0 diff --git a/usr/local/sbin/ovpn_auth_verify b/usr/local/sbin/ovpn_auth_verify new file mode 100755 index 000000000..d9ffb1595 --- /dev/null +++ b/usr/local/sbin/ovpn_auth_verify @@ -0,0 +1,15 @@ +#!/bin/sh + +if [ "$1" = "tls" ]; then + RESULT=$(/usr/local/sbin/fcgicli -f /etc/inc/openvpn.tls-verify.php -d "servercn=$2&depth=$3&certdepth=$4&certsubject=$5") +else + # Single quoting $password breaks getting the value from the variable. + password=$(echo ${password} | /usr/bin/sed 's/&/%26/g') + RESULT=$(/usr/local/sbin/fcgicli -f /etc/inc/openvpn.auth-user.php -d "username=$username&password=$password&cn=$common_name&strictcn=$3&authcfg=$2&modeid=$4") +fi + +if [ "${RESULT}" = "OK" ]; then + exit 0 +fi + +exit 1 diff --git a/usr/local/sbin/pfSsh.php b/usr/local/sbin/pfSsh.php new file mode 100755 index 000000000..430d8f947 --- /dev/null +++ b/usr/local/sbin/pfSsh.php @@ -0,0 +1,343 @@ +#!/usr/local/bin/php -f + + array("pipe", "r"), // stdin + 1 => array("pipe", "w"), // stdout + 2 => array("pipe", "w")); // stderr ?? instead of a file + + $fd = proc_open("$command", $descriptorspec, $pipes); + if (is_resource($fd)) { + fwrite($pipes[0], "{$text_to_pipe}"); + fclose($pipes[0]); + while($s= fgets($pipes[1], 1024)) { + // read from the pipe + $buffer .= $s; + } + fclose($pipes[1]); + fclose($pipes[2]); + } + return $buffer; +} + +if(!function_exists("readline")) { + function readline() { + $fp = fopen('php://stdin', 'r'); + $textinput = chop(fgets($fp)); + fclose($fp); + } + return $textinput; +} + +function more($text, $count=24) { + $counter=0; + $lines = explode("\n", $text); + foreach($lines as $line) { + if($counter > $count) { + echo "Press RETURN to continue ..."; + $fp = fopen('php://stdin', 'r'); + $pressreturn = chop(fgets($fp)); + if($pressreturn == "q" || $pressreturn == "quit") + return; + fclose($fp); + $counter = 0; + } + echo "{$line}\n"; + $counter++; + } +} + +function show_help() { + +$show_help_text = << + stoprecording + showrecordings + + parse_config(true); # reloads the \$config array + + \$temp = print_r(\$config, true); + more(\$temp); + + /* to output a configuration array */ + print_r(\$config); + + /* to output the interfaces configuration portion of config.xml */ + print_r(\$config['interfaces']); + + /* to output the dhcp server configuration */ + print_r(\$config['dhcpd']); + + /* to exit the php {$g['product_name']} shell */ + exit + + /* to output supported wireless modes for an interface */ + print_r(get_wireless_modes(\"ath0\")); + + /* to enable SSH */ + \$config['system']['enablesshd'] = true; + + /* change OPTX to the OPT interface name such as BACKHAUL */ + \$config['interfaces']['optx']['wireless']['standard'] = "11a"; + \$config['interfaces']['optx']['wireless']['mode'] = "hostap"; + \$config['interfaces']['optx']['wireless']['channel'] = "6"; + + /* to enable dhcp server for an optx interface */ + \$config['dhcpd']['optx']['enable'] = true; + \$config['dhcpd']['optx']['range']['from'] = "192.168.31.100"; + \$config['dhcpd']['optx']['range']['to'] = "192.168.31.150"; + + /* to disable the firewall filter */ + \$config['system']['disablefilter'] = true; + + /* to enable an interface and set it for dhcp */ + \$config['interfaces']['optx']['disabled'] = false; + \$config['interfaces']['optx']['ipaddr'] = "dhcp"; + + /* to enable an interface and set a static ip address */ + \$config['interfaces']['wan']['disabled'] = false; + \$config['interfaces']['wan']['ipaddr'] = "192.168.100.1"; + \$config['interfaces']['wan']['subnet'] = "24"; + + /* to save out the new configuration (config.xml) */ + write_config(); + + /* to reboot the system after saving */ + system_reboot_sync(); + +EOF; + + more($show_help_text); + +} + +$fp = fopen('php://stdin', 'r'); + +echo ".\n\n"; + +$pkg_interface='console'; + +$shell_active = true; +$tccommands = array(); + +function completion($string, $index) { + global $tccommands; + return $tccommands; +} + +readline_completion_function("completion"); + +if($argc < 2) { + echo "Welcome to the {$g['product_name']} php shell system\n"; + echo "Written by Scott Ullrich (sullrich@gmail.com)\n"; + echo "\nType \"help\" to show common usage scenarios.\n"; + echo "\nAvailable playback commands:\n "; + $files = scandir("/etc/phpshellsessions/"); + $tccommands[] = "playback"; + foreach($files as $file) { + if($file <> "." and $file <> "..") { + echo $file . " "; + if(function_exists("readline_add_history")) { + readline_add_history("playback $file"); + $tccommands[] = "$file"; + } + } + } + echo "\n\n"; +} + +$recording = false; +$playback_file_split = array(); +$playbackbuffer = ""; + +if($argv[1]=="playback" or $argv[1]=="run") { + if(!file_exists("/etc/phpshellsessions/{$argv[2]}")) { + echo "Could not locate playback file."; + exit; + } + playback_file($argv[2]); + exit; +} + +// Define more commands +$tccommands[] = "exit"; +$tccommands[] = "quit"; +$tccommands[] = "?"; +$tccommands[] = "exec"; +$tccommands[] = "startrecording"; +$tccommands[] = "stoprecording"; +$tccommands[] = "showrecordings"; +$tccommands[] = "record"; +$tccommands[] = "reset"; +$tccommands[] = "master"; +$tccommands[] = "RELENG_1_2"; + +while($shell_active == true) { + $command = readline("{$g['product_name']} shell: "); + readline_add_history($command); + $command_split = explode(" ", $command); + $first_command = $command_split[0]; + if($first_command == "playback" || $first_command == "run") { + $playback_file = $command_split[1]; + if(!$playback_file || !file_exists("/etc/phpshellsessions/{$playback_file}")) { + $command = ""; + echo "Could not locate playback file.\n"; + } else { + $command = ""; + echo "\nPlayback of file {$command_split[1]} started.\n\n"; + playback_file("{$playback_file}"); + continue; + } + } + if($first_command == "exit" or $first_command == "quit") + die; + if($first_command == "help" or $first_command == "?") { + show_help(); + $playbackbuffer = ""; + continue; + } + if($first_command == "exec" or $first_command == "exec;") { + playback_text($playbackbuffer); + $playbackbuffer = ""; + continue; + } + if($first_command == "stoprecording" || $first_command == "stoprecord" || $first_command == "stop") { + if($recording) { + fwrite($recording_fd, $playbackbuffer); + fclose($recording_fd); + $command = ""; + conf_mount_ro(); + echo "Recording stopped.\n"; + $recording = false; + } else { + echo "No recording session in progress.\n"; + $command = ""; + } + } + if($first_command == "showrecordings") { + show_recordings(); + $command = ""; + } + if($first_command == "reset") { + $playbackbuffer = ""; + echo "\nBuffer reset.\n\n"; + continue; + } + if($first_command == "record") { + if(!$command_split[1]) { + echo "usage: record playbackname\n"; + $command = ""; + } else { + /* time to record */ + conf_mount_rw(); + safe_mkdir("/etc/phpshellsessions"); + $recording_fd = fopen("/etc/phpshellsessions/{$command_split[1]}","w"); + if(!$recording_fd) { + echo "Could not start recording session.\n"; + $command = ""; + } else { + $recording = true; + echo "Recording of {$command_split[1]} started.\n"; + $command = ""; + } + } + } + $playbackbuffer .= $command . "\n"; +} + +function show_recordings() { + conf_mount_rw(); + safe_mkdir("/etc/phpshellsessions"); + if($recording) + conf_mount_ro(); + echo "==> Sessions available for playback are:\n"; + system("cd /etc/phpshellsessions && ls /etc/phpshellsessions"); + echo "==> end of list.\n"; +} + +function returnlastchar($command) { + $commandlen = strlen($command); + $endofstring = substr($command, ($commandlen-1)); + return $endofstring; +} + +function returnfirstchar($command) { + $commandlen = strlen($command); + $endofstring = substr($command, 0, 1); + return $endofstring; +} + +function str_replace_all($search,$replace,$subject) { + while(strpos($subject,$search)!==false) + $subject = str_replace($search,$replace,$subject); + return $subject; +} + +function playback_text($playback_file_contents) { + $playback_file_split = explode("\n", $playback_file_contents); + $playback_text = "require_once('functions.inc');\n"; + $playback_text .= "require_once('globals.inc');\n"; + $playback_text .= "require_once('config.inc');\n"; + $toquote = '"'; + $toquotereplace = '\\"'; + foreach($playback_file_split as $pfs) { + $firstchar = returnfirstchar($pfs); + $currentline = $pfs; + if($firstchar == "!") { + /* XXX: encode " in $pfs */ + $pfsa = str_replace($toquote, $toquotereplace, $currentline); + $playback_text .= str_replace("!", "system(\"", $pfsa) . "\");\n"; + } else if ($firstchar == "=") { + /* XXX: encode " in $pfs */ + $pfsa = str_replace($toquote, $toquotereplace, $currentline); + $currentline .= str_replace("!", "system(\"", $pfsa) . "\");\n"; + } else { + $playback_text .= $pfs . "\n"; + } + } + global $config; + eval($playback_text); +} + +function playback_file($playback_file) { + $playback_file_contents = file_get_contents("/etc/phpshellsessions/{$playback_file}"); + playback_text($playback_file_contents); +} + +?> diff --git a/usr/local/sbin/ppp-linkdown b/usr/local/sbin/ppp-linkdown new file mode 100755 index 000000000..62d07ed34 --- /dev/null +++ b/usr/local/sbin/ppp-linkdown @@ -0,0 +1,31 @@ +#!/bin/sh + +IF="${1}" +LOCAL_IP="${3}" + +if [ -f /tmp/${IF}up ] && [ -f /conf/${IF}.log ]; then + seconds=$((`date -j +%s` - `/usr/bin/stat -f %m /tmp/${IF}up`)) + /usr/local/sbin/ppp-log-uptime.sh $seconds ${IF} & +fi + +/etc/rc.kill_states ${IF} ${LOCAL_IP} + +if [ -s "/tmp/${IF}_defaultgw" ]; then + GW=`head -n 1 /tmp/${IF}_defaultgw` + [ -n "${GW}" ] \ + && /sbin/route delete default ${GW} +fi +# delete the node just in case mpd cannot do that +/usr/sbin/ngctl shutdown ${IF}: +if [ -f "/var/etc/nameserver_${IF}" ]; then + # Remove old entries + for nameserver in `cat /var/etc/nameserver_${IF}`; do + /sbin/route delete ${nameserver} >/dev/null 2>&1 + done + /bin/rm -f /var/etc/nameserver_${IF} +fi +# Do not remove gateway used during filter reload. +/bin/rm -f /tmp/${IF}_router +/bin/rm -f /tmp/${IF}up +/bin/rm -f /tmp/${IF}_ip +/usr/local/sbin/pfSctl -c 'service reload dns' diff --git a/usr/local/sbin/ppp-linkup b/usr/local/sbin/ppp-linkup new file mode 100755 index 000000000..2d1eb33c5 --- /dev/null +++ b/usr/local/sbin/ppp-linkup @@ -0,0 +1,62 @@ +#!/bin/sh + +export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin + +if [ "${2}" == "inet" ]; then + + OLD_ROUTER=`cat /tmp/${1}_router` + if [ -n "${OLD_ROUTER}" ]; then + echo "Removing states to old router ${OLD_ROUTER}" | logger -t ppp-linkup + pfctl -i ${1} -k 0.0.0.0/0 -k ${OLD_ROUTER}/32 + pfctl -i ${1} -k ${OLD_ROUTER}/32 -k 0.0.0.0/0 + fi + + # let the configuration system know that the ipv4 has changed. + echo ${4} > /tmp/${1}_router + echo ${3} > /tmp/${1}_ip + touch /tmp/${1}up + + if grep -q dnsallowoverride /conf/config.xml; then + # write nameservers to file + echo -n "" > /var/etc/nameserver_${1} + if echo "${6}" | grep -q dns1; then + DNS1=`echo "${6}" | awk '{print $2}'` + echo "${DNS1}" >> /var/etc/nameserver_${1} + route change "${DNS1}" ${4} + fi + if echo "${7}" | grep -q dns2; then + DNS2=`echo "${7}" | awk '{print $2}'` + echo "${DNS2}" >> /var/etc/nameserver_${1} + route change "${DNS2}" ${4} + fi + pfSctl -c 'service reload dns' + sleep 1 + fi + pfSctl -c "interface newip ${1}" + +elif [ "${2}" == "inet6" ]; then + # let the configuration system know that the ipv6 has changed. + echo ${4} |cut -d% -f1 > /tmp/${1}_routerv6 + echo ${3} |cut -d% -f1 > /tmp/${1}_ipv6 + touch /tmp/${1}upv6 + + if grep -q dnsallowoverride /conf/config.xml; then + # write nameservers to file + echo -n "" > /var/etc/nameserver_v6${1} + if echo "${6}" | grep -q dns1; then + DNS1=`echo "${6}" | awk '{print $2}'` + echo "${DNS1}" >> /var/etc/nameserver_v6${1} + route change -inet6 "${DNS1}" ${4} + fi + if echo "${7}" | grep -q dns2; then + DNS2=`echo "${7}" | awk '{print $2}'` + echo "${DNS2}" >> /var/etc/nameserver_v6${1} + route change -inet6 "${DNS2}" ${4} + fi + pfSctl -c 'service reload dns' + sleep 1 + fi + pfSctl -c "interface newipv6 ${1}" +fi + +exit 0 diff --git a/usr/local/sbin/ppp-log-uptime.sh b/usr/local/sbin/ppp-log-uptime.sh new file mode 100755 index 000000000..6fd8def9d --- /dev/null +++ b/usr/local/sbin/ppp-log-uptime.sh @@ -0,0 +1,5 @@ +#!/bin/sh +#write the uptime in seconds to the persistent log in /conf/ +/etc/rc.conf_mount_rw +/bin/echo `date -j +%Y.%m.%d-%H:%M:%S` $1 >> /conf/$2.log +/etc/rc.conf_mount_ro diff --git a/usr/local/sbin/ppp-uptime.sh b/usr/local/sbin/ppp-uptime.sh new file mode 100755 index 000000000..d7a8441e1 --- /dev/null +++ b/usr/local/sbin/ppp-uptime.sh @@ -0,0 +1,3 @@ +#!/bin/sh +#get ppp uptime from age of /tmp/{interface}up file +[ -f /tmp/$1up ] && /bin/echo $((`date -j +%s` - `/usr/bin/stat -f %m /tmp/$1up`)) \ No newline at end of file diff --git a/usr/local/sbin/prefixes.php b/usr/local/sbin/prefixes.php new file mode 100644 index 000000000..7c924c8ca --- /dev/null +++ b/usr/local/sbin/prefixes.php @@ -0,0 +1,94 @@ + "") { + $routes[$entry['ia-na']] = $entry['ia-pd']; + } + array_shift($duid_arr); +} + +// echo "add routes\n"; +if(count($routes) > 0) { + foreach ($routes as $address => $prefix) { + echo "/sbin/route change -inet6 {$prefix} {$address}\n"; + } +} + +/* get clog from dhcpd */ +$dhcpdlogfile = "/var/log/dhcpd.log"; +$clog = array(); +if(file_exists($dhcpdlogfile)) + exec("clog $dhcpdlogfile", $clog, $ret); + +if($ret > 0) + $clog = array(); + +$expires = array(); +foreach($clog as $line) { + if(preg_match("/releases[ ]+prefix[ ]+([0-9a-f:]+\/[0-9]+)/i", $line, $expire)) { + if(in_array($expire[1], $routes)) + continue; + $expires[$expire[1]] = $expire[1]; + } + array_shift($clog); +} + +// echo "remove routes\n"; +if(count($expires) > 0) { + foreach ($expires as $prefix) { + echo "/sbin/route delete -inet6 {$prefix['prefix']}\n"; + array_shift($expires); + } +} + +?> diff --git a/usr/local/sbin/show_filter_reload_status.php b/usr/local/sbin/show_filter_reload_status.php new file mode 100755 index 000000000..5251c3e74 --- /dev/null +++ b/usr/local/sbin/show_filter_reload_status.php @@ -0,0 +1,26 @@ +#!/usr/local/bin/php -q + "") { + echo $status . "\n"; + } + sleep(1); +} + +function get_status() { + global $last_text; + $status = file_get_contents("/var/run/filter_reload_status"); + $status = str_replace("...", "", $status); + $status .= "..."; + if($status <> $last_text) { + $last_text = $status; + return $status; + } + return ""; +} + +?> diff --git a/usr/local/sbin/ufslabels.sh b/usr/local/sbin/ufslabels.sh new file mode 100755 index 000000000..8a6c21149 --- /dev/null +++ b/usr/local/sbin/ufslabels.sh @@ -0,0 +1,140 @@ +#!/bin/sh +############################################ +# +# Change fstab to use ufsid and geom labels to avoid relying on device numbers directly. +# +############################################ + +# : cat /etc/fstab +# # Device Mountpoint FStype Options Dump Pass# +# /dev/ad0s1a / ufs rw 1 1 +# /dev/ad0s1b none swap sw 0 0 + +string_length() { + unset LEN + LEN=`echo -n ${1} | /usr/bin/wc -m | awk '{print $1}'` +} + +get_ufsid() { + # $1 = device + # : /sbin/dumpfs /dev/ad0s1a | /usr/bin/head -n 2 | /usr/bin/tail -n 1 | /usr/bin/cut -f2 -d'[' | /usr/bin/cut -f1 -d ']' | /usr/bin/sed -e 's/[[:blank:]]//g' + # 51928c99a471c440 + + unset UFSID + + ID_PARTS=`/sbin/dumpfs /dev/${1} | /usr/bin/head -n 2 | /usr/bin/tail -n 1 | /usr/bin/cut -f2 -d'[' | /usr/bin/cut -f1 -d ']'` + # " 51110eb0 f288b35d " (note it has more spaces than we need/want) + ID_PART1=`echo ${ID_PARTS} | awk '{print $1;}'` + # "51110eb0" + ID_PART2=`echo ${ID_PARTS} | awk '{print $2;}'` + # "f288b35d" + + if [ "${ID_PART1}" = "" ] || [ "${ID_PART2}" = "" ]; then + echo "Invalid ufsid on ${1} (${ID_PARTS}), cannot continue" + exit. + fi + + # Safety check to avoid http://www.freebsd.org/cgi/query-pr.cgi?pr=156908 + string_length ${ID_PART1} + if [ ${LEN} -ne 8 ]; then + ID_PART1=`printf "%08s" "${ID_PART1}"` + fi + string_length ${ID_PART2} + if [ ${LEN} -ne 8 ]; then + ID_PART2=`printf "%08s" "${ID_PART2}"` + fi + UFSID=${ID_PART1}${ID_PART2} +} + +find_fs_device(){ + unset DEV + DEV=`/usr/bin/grep -e "[[:blank:]]${1}[[:blank:]]" ${FSTAB} | awk '{print $1;}'` + DEV=${DEV##/dev/} +} + +FSTAB=/etc/fstab +NEED_CHANGES=false +cp ${FSTAB} ${FSTAB}.tmp + +ALL_FILESYSTEMS=`/bin/cat /etc/fstab | /usr/bin/awk '/ufs/ && !(/dev\/mirror\// || /dev\/ufsid\// || /dev\/label\// || /dev\/geom\//) {print $2;}'` + +for FS in ${ALL_FILESYSTEMS} +do + find_fs_device ${FS} + if [ "${DEV}" != "" ]; then + get_ufsid ${DEV} + string_length ${UFSID} + if [ ${LEN} -ne 16 ]; then + echo "Invalid UFS ID for FS ${FS} ($UFSID), skipping" + else + /usr/bin/sed -i'' -e "s/${DEV}/ufsid\/${UFSID}/g" ${FSTAB}.tmp + NEED_CHANGES=true + fi + else + echo "Unable to find device for ${FS}" + return -1 + fi + echo "FS: ${FS} on device ${DEV} with ufsid ${UFSID}" +done + +ALL_SWAPFS=`/bin/cat /etc/fstab | /usr/bin/awk '/swap/ && !(/dev\/mirror\// || /dev\/ufsid\// || /dev\/label\// || /dev\/geom\//) {print $1;}'` +SWAPNUM=0 +for SFS in ${ALL_SWAPFS} +do + DEV=${SFS##/dev/} + if [ "${DEV}" != "" ]; then + SWAPDEV=${DEV} + echo "FS: Swap slice ${SWAPNUM} on device ${SWAPDEV}" + if [ "${SWAPDEV}" != "" ]; then + /usr/bin/sed -i'' -e "s/${SWAPDEV}/label\/swap${SWAPNUM}/g" ${FSTAB}.tmp + NEED_CHANGES=true + fi + SWAPNUM=`expr ${SWAPNUM} + 1` + fi +done + +if [ "${NEED_CHANGES}" = "false" ]; then + echo Nothing to do, all filesystems and swap already use some form of device-independent labels + exit +fi + +echo "====================" +echo "Current fstab:" +cat ${FSTAB} +echo "====================" +echo "New fstab:" +cat ${FSTAB}.tmp + +if [ "${1}" = "commit" ]; then + COMMIT=y +else + echo "Commit changes? (y/n):" + read COMMIT +fi + +# Commit changes +if [ "${COMMIT}" = "y" ] || [ "${COMMIT}" = "Y" ]; then + echo "Disabling swap to apply label" + /sbin/swapoff /dev/${SWAPDEV} + + echo "Applying label to swap parition" + SWAPNUM=0 + for SFS in ${ALL_SWAPFS} + do + find_fs_device ${SFS} + if [ "${DEV}" != "" ]; then + SWAPDEV=${DEV} + if [ "${SWAPDEV}" != "" ]; then + /sbin/glabel label swap${SWAPNUM} /dev/${SWAPDEV} + fi + SWAPNUM=`expr ${SWAPNUM} + 1` + fi + done + + echo "Activating new fstab" + /bin/mv -f ${FSTAB} ${FSTAB}.old + /bin/mv -f ${FSTAB}.tmp ${FSTAB} + + echo "Re-enabling swap" + /sbin/swapon -a 2>/dev/null >/dev/null +fi diff --git a/usr/local/sbin/vpn-linkdown b/usr/local/sbin/vpn-linkdown new file mode 100755 index 000000000..b6d033c0c --- /dev/null +++ b/usr/local/sbin/vpn-linkdown @@ -0,0 +1,6 @@ +#!/bin/sh + +# record logout +/usr/bin/logger -p local3.info "logout,$1,$4,$5" +/sbin/pfctl -i $1 -Fs +/sbin/pfctl -K $4/32 diff --git a/usr/local/sbin/vpn-linkup b/usr/local/sbin/vpn-linkup new file mode 100755 index 000000000..bca7b6edf --- /dev/null +++ b/usr/local/sbin/vpn-linkup @@ -0,0 +1,16 @@ +#!/bin/sh + +# record login +/usr/bin/logger -p local3.info "login,$1,$4,$5" + +case `/bin/echo $1 | /usr/bin/cut -c1-4` in + pptp) + /sbin/ifconfig $1 group pptp + ;; + poes) + /sbin/ifconfig $1 group pppoe + ;; + l2tp) + /sbin/ifconfig $1 group l2tp + ;; +esac diff --git a/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot b/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot new file mode 100644 index 000000000..6c078b4ec --- /dev/null +++ b/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot @@ -0,0 +1,48729 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-05-31 08:12-0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: etc/inc/PEAR.inc:161 +#, php-format +msgid "PEAR constructor called, class=%s\n" +msgstr "" + +#: etc/inc/PEAR.inc:198 +#, php-format +msgid "PEAR destructor called, class=%s\n" +msgstr "" + +#: etc/inc/PEAR.inc:337 etc/inc/PEAR.inc:595 etc/inc/PEAR.inc:632 +msgid "invalid error callback" +msgstr "" + +#: etc/inc/PEAR.inc:342 etc/inc/PEAR.inc:600 etc/inc/PEAR.inc:637 +msgid "invalid error mode" +msgstr "" + +#: etc/inc/PEAR.inc:445 etc/inc/PEAR.inc:451 +msgid "The expected error you submitted does not exist" +msgstr "" + +#: etc/inc/PEAR.inc:455 +msgid "The expected error you submitted is empty" +msgstr "" + +#: etc/inc/PEAR.inc:866 +msgid "" +"PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions" +msgstr "" + +#: etc/inc/PEAR.inc:1023 +#, php-format +msgid "" +"[%s: message=\"%s\" code=%d mode=callback callback=%s prefix=\"%s\" info=\"%s" +"\"]" +msgstr "" + +#: etc/inc/PEAR.inc:1041 +#, php-format +msgid "[%s: message=\"%s\" code=%d mode=%s level=%s prefix=\"%s\" info=\"%s\"]" +msgstr "" + +#: etc/inc/array_intersect_key.inc:37 etc/inc/array_intersect_key.inc:37 +msgid "Wrong parameter count for array_intersect_key()" +msgstr "" + +#: etc/inc/array_intersect_key.inc:45 etc/inc/array_intersect_key.inc:45 +msgid "array_intersect_key() Argument #" +msgstr "" + +#: etc/inc/array_intersect_key.inc:46 etc/inc/array_intersect_key.inc:46 +msgid " is not an array" +msgstr "" + +#: etc/inc/auth.inc:100 etc/inc/auth.inc:100 +msgid "" +"Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/" +"DNS_rebinding
    Try accessing the router by IP address instead of by " +"hostname." +msgstr "" + +#: etc/inc/auth.inc:115 etc/inc/auth.inc:115 +msgid "Redirecting..." +msgstr "" + +#: etc/inc/auth.inc:115 etc/inc/auth.inc:115 +msgid "Redirecting to the dashboard..." +msgstr "" + +#: etc/inc/auth.inc:315 etc/inc/auth.inc:335 etc/inc/auth.inc:406 +#: etc/inc/auth.inc:433 etc/inc/auth.inc:478 etc/inc/auth.inc:609 +#: etc/inc/auth.inc:621 etc/inc/auth.inc:311 etc/inc/auth.inc:331 +#: etc/inc/auth.inc:402 etc/inc/auth.inc:431 etc/inc/auth.inc:487 +#: etc/inc/auth.inc:618 etc/inc/auth.inc:630 etc/inc/auth.inc:311 +#: etc/inc/auth.inc:331 etc/inc/auth.inc:402 etc/inc/auth.inc:431 +#: etc/inc/auth.inc:487 etc/inc/auth.inc:618 etc/inc/auth.inc:630 +#, php-format +msgid "Running: %s" +msgstr "" + +#: etc/inc/auth.inc:656 etc/inc/auth.inc:728 etc/inc/auth.inc:796 +#: etc/inc/auth.inc:1040 etc/inc/auth.inc:665 etc/inc/auth.inc:737 +#: etc/inc/auth.inc:805 etc/inc/auth.inc:1049 etc/inc/auth.inc:1053 +#: etc/inc/auth.inc:806 etc/inc/auth.inc:1057 etc/inc/auth.inc:665 +#: etc/inc/auth.inc:737 etc/inc/auth.inc:806 etc/inc/auth.inc:1057 +#, php-format +msgid "ERROR! Could not connect to server %s." +msgstr "" + +#: etc/inc/auth.inc:674 etc/inc/auth.inc:683 etc/inc/auth.inc:683 +#, php-format +msgid "LDAP: Could not lookup CA by reference for host %s." +msgstr "" + +#: etc/inc/auth.inc:783 etc/inc/auth.inc:792 etc/inc/auth.inc:793 +#: etc/inc/auth.inc:793 +msgid "" +"ERROR! ldap_get_user_ous() backed selected with no LDAP authentication " +"server defined." +msgstr "" + +#: etc/inc/auth.inc:807 etc/inc/auth.inc:816 etc/inc/auth.inc:818 +#: etc/inc/auth.inc:818 +#, php-format +msgid "ERROR! ldap_get_user_ous() could not bind anonymously to server %s." +msgstr "" + +#: etc/inc/auth.inc:812 etc/inc/auth.inc:821 etc/inc/auth.inc:823 +#: etc/inc/auth.inc:823 +#, php-format +msgid "ERROR! ldap_get_user_ous() could not bind to server %s." +msgstr "" + +#: etc/inc/auth.inc:908 etc/inc/auth.inc:917 etc/inc/auth.inc:919 +#: etc/inc/auth.inc:919 +#, php-format +msgid "ERROR! ldap_get_groups() Could not connect to server %s." +msgstr "" + +#: etc/inc/auth.inc:918 etc/inc/auth.inc:927 etc/inc/auth.inc:930 +#: etc/inc/auth.inc:930 +#, php-format +msgid "ERROR! ldap_get_groups() could not bind anonymously to server %s." +msgstr "" + +#: etc/inc/auth.inc:923 etc/inc/auth.inc:932 etc/inc/auth.inc:935 +#: etc/inc/auth.inc:935 +#, php-format +msgid "ERROR! ldap_get_groups() could not bind to server %s." +msgstr "" + +#: etc/inc/auth.inc:1020 etc/inc/auth.inc:1029 etc/inc/auth.inc:1033 +#: etc/inc/auth.inc:1036 etc/inc/auth.inc:1036 +msgid "" +"ERROR! ldap_backed() called with no LDAP authentication server defined. " +"Defaulting to local user database. Visit System -> User Manager." +msgstr "" + +#: etc/inc/auth.inc:1023 etc/inc/auth.inc:1032 etc/inc/auth.inc:1036 +#: etc/inc/auth.inc:1039 etc/inc/auth.inc:1039 +msgid "ERROR! ldap_backed() called with no LDAP authentication server defined." +msgstr "" + +#: etc/inc/auth.inc:1054 etc/inc/auth.inc:1063 etc/inc/auth.inc:1067 +#: etc/inc/auth.inc:1071 etc/inc/auth.inc:1071 +#, php-format +msgid "ERROR! Could not bind to server %s." +msgstr "" + +#: etc/inc/auth.inc:1071 etc/inc/auth.inc:1080 etc/inc/auth.inc:1084 +#: etc/inc/auth.inc:1085 etc/inc/auth.inc:1089 etc/inc/auth.inc:1089 +#, php-format +msgid "Now Searching for %s in directory." +msgstr "" + +#: etc/inc/auth.inc:1075 etc/inc/auth.inc:1084 etc/inc/auth.inc:1088 +#: etc/inc/auth.inc:1090 etc/inc/auth.inc:1094 etc/inc/auth.inc:1094 +#, php-format +msgid "Now Searching in server %1$s, container %2$s with filter %3$s." +msgstr "" + +#: etc/inc/auth.inc:1086 etc/inc/auth.inc:1095 etc/inc/auth.inc:1099 +#: etc/inc/auth.inc:1101 etc/inc/auth.inc:1105 etc/inc/auth.inc:1105 +#, php-format +msgid "Search resulted in error: %s" +msgstr "" + +#: etc/inc/auth.inc:1102 etc/inc/auth.inc:1111 etc/inc/auth.inc:1115 +#: etc/inc/auth.inc:1117 etc/inc/auth.inc:1121 etc/inc/auth.inc:1121 +msgid "ERROR! Either LDAP search failed, or multiple users were found." +msgstr "" + +#: etc/inc/auth.inc:1108 etc/inc/auth.inc:1117 etc/inc/auth.inc:1121 +#: etc/inc/auth.inc:1123 +#, php-format +msgid "ERROR! Could not login to server %1$s as user %2$s." +msgstr "" + +#: etc/inc/auth.inc:1113 etc/inc/auth.inc:1122 etc/inc/auth.inc:1126 +#: etc/inc/auth.inc:1129 etc/inc/auth.inc:1133 etc/inc/auth.inc:1133 +#, php-format +msgid "Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s." +msgstr "" + +#: etc/inc/auth.inc:1144 etc/inc/auth.inc:1153 etc/inc/auth.inc:1157 +#: etc/inc/auth.inc:1163 etc/inc/auth.inc:1167 etc/inc/auth.inc:1167 +#, php-format +msgid "Radius start: %s
    \n" +msgstr "" + +#: etc/inc/auth.inc:1155 etc/inc/auth.inc:1164 etc/inc/auth.inc:1168 +#: etc/inc/auth.inc:1174 etc/inc/auth.inc:1178 etc/inc/auth.inc:1178 +#, php-format +msgid "Radius send failed: %s
    \n" +msgstr "" + +#: etc/inc/auth.inc:1159 etc/inc/auth.inc:1170 etc/inc/auth.inc:1174 +#: etc/inc/auth.inc:1180 etc/inc/auth.inc:1184 etc/inc/auth.inc:1184 +#, php-format +msgid "Radius Auth succeeded" +msgstr "" + +#: etc/inc/auth.inc:1164 etc/inc/auth.inc:1175 etc/inc/auth.inc:1179 +#: etc/inc/auth.inc:1185 etc/inc/auth.inc:1189 etc/inc/auth.inc:1189 +#, php-format +msgid "Radius Auth rejected" +msgstr "" + +#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218 +#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237 etc/inc/auth.inc:1228 +#: etc/inc/auth.inc:1243 etc/inc/auth.inc:1232 etc/inc/auth.inc:1247 +#: etc/inc/auth.inc:1232 etc/inc/auth.inc:1247 +msgid "Local Database" +msgstr "" + +#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218 +#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237 +msgid "Local Auth" +msgstr "" + +#: etc/inc/auth.inc:1293 etc/inc/auth.inc:1317 etc/inc/auth.inc:1321 +#: etc/inc/auth.inc:1327 etc/inc/auth.inc:1331 etc/inc/auth.inc:1331 +#, php-format +msgid "Successful login for user '%1$s' from: %2$s" +msgstr "" + +#: etc/inc/auth.inc:1347 etc/inc/auth.inc:1371 etc/inc/auth.inc:1375 +#: etc/inc/auth.inc:1381 etc/inc/auth.inc:1385 etc/inc/auth.inc:1385 +#, php-format +msgid "Session timed out for user '%1$s' from: %2$s" +msgstr "" + +#: etc/inc/auth.inc:1349 etc/inc/auth.inc:1373 etc/inc/auth.inc:1377 +#: etc/inc/auth.inc:1383 etc/inc/auth.inc:1387 etc/inc/auth.inc:1387 +#, php-format +msgid "User logged out for user '%1$s' from: %2$s" +msgstr "" + +#: etc/inc/captiveportal.inc:1374 etc/inc/captiveportal.inc:1383 +#: etc/inc/captiveportal.inc:1420 etc/inc/captiveportal.inc:1335 +#: etc/inc/captiveportal.inc:1338 etc/inc/captiveportal.inc:1338 +#, php-format +msgid "Error: cannot open '%s' in captiveportal_write_elements()%s" +msgstr "" + +#: etc/inc/config.inc:100 etc/inc/config.inc:100 +msgid "Upgrading m0n0wall configuration to pfSense... " +msgstr "" + +#: etc/inc/config.inc:103 etc/inc/config.inc:103 +msgid "ERROR! Could not convert m0n0wall -> pfsense in config.xml" +msgstr "" + +#: etc/inc/config.inc:133 etc/inc/config.inc:133 +msgid "CDROM build" +msgstr "" + +#: etc/inc/config.inc:134 etc/inc/config.inc:135 etc/inc/config.inc:134 +#: etc/inc/config.inc:135 +msgid "CFG:" +msgstr "" + +#: etc/inc/config.inc:136 etc/inc/config.inc:136 +msgid "TYPE:" +msgstr "" + +#: etc/inc/config.inc:151 etc/inc/config.inc:166 etc/inc/config.inc:151 +#: etc/inc/config.inc:166 +#, php-format +msgid "Found configuration on %s.%s" +msgstr "" + +#: etc/inc/config.inc:180 etc/inc/config.inc:181 etc/inc/config.lib.inc:105 +#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:245 +#: etc/inc/config.lib.inc:266 etc/inc/config.lib.inc:267 +#: etc/inc/config.inc:180 etc/inc/config.inc:181 etc/inc/config.lib.inc:105 +#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:245 +#: etc/inc/config.lib.inc:266 etc/inc/config.lib.inc:267 +msgid "No config.xml found, attempting last known config restore." +msgstr "" + +#: etc/inc/config.inc:184 etc/inc/config.inc:184 +msgid "No config.xml or config backups found, resetting to factory defaults." +msgstr "" + +#: etc/inc/filter.inc:197 etc/inc/filter.inc:194 etc/inc/filter.inc:193 +#: etc/inc/filter.inc:168 etc/inc/filter.inc:168 +msgid "Initializing" +msgstr "" + +#: etc/inc/filter.inc:209 etc/inc/filter.inc:206 etc/inc/filter.inc:205 +#: etc/inc/filter.inc:180 etc/inc/filter.inc:180 +msgid "Configuring firewall" +msgstr "" + +#: etc/inc/filter.inc:214 etc/inc/filter.inc:211 etc/inc/filter.inc:210 +#: etc/inc/filter.inc:185 etc/inc/filter.inc:185 +msgid "Creating aliases" +msgstr "" + +#: etc/inc/filter.inc:219 etc/inc/filter.inc:218 etc/inc/filter.inc:193 +#: etc/inc/filter.inc:193 +msgid "Generating NAT rules" +msgstr "" + +#: etc/inc/filter.inc:224 etc/inc/filter.inc:223 etc/inc/filter.inc:198 +#: etc/inc/filter.inc:198 +msgid "Generating filter rules" +msgstr "" + +#: etc/inc/filter.inc:230 etc/inc/filter.inc:229 etc/inc/filter.inc:204 +#: etc/inc/filter.inc:204 +msgid "Generating ALTQ queues" +msgstr "" + +#: etc/inc/filter.inc:232 etc/inc/filter.inc:216 etc/inc/filter.inc:215 +#: etc/inc/filter.inc:190 etc/inc/filter.inc:190 +msgid "Generating Limiter rules" +msgstr "" + +#: etc/inc/filter.inc:234 etc/inc/filter.inc:232 etc/inc/filter.inc:231 +#: etc/inc/filter.inc:206 etc/inc/filter.inc:206 +msgid "Generating Layer7 rules" +msgstr "" + +#: etc/inc/filter.inc:238 etc/inc/filter.inc:236 etc/inc/filter.inc:235 +#: etc/inc/filter.inc:210 etc/inc/filter.inc:210 +msgid "Loading filter rules" +msgstr "" + +#: etc/inc/filter.inc:245 etc/inc/filter.inc:243 etc/inc/filter.inc:242 +#: etc/inc/filter.inc:217 etc/inc/filter.inc:217 +msgid "Filter is disabled. Not loading rules." +msgstr "" + +#: etc/inc/filter.inc:247 etc/inc/filter.inc:418 etc/inc/interfaces.inc:217 +#: etc/inc/interfaces.inc:234 etc/inc/interfaces.inc:360 +#: etc/inc/interfaces.inc:410 etc/inc/interfaces.inc:664 +#: etc/inc/interfaces.inc:924 etc/inc/interfaces.inc:964 +#: etc/inc/interfaces.inc:979 etc/inc/interfaces.inc:1780 +#: etc/inc/pkg-utils.inc:586 etc/inc/pkg-utils.inc:596 +#: etc/inc/pkg-utils.inc:619 etc/inc/pkg-utils.inc:696 +#: etc/inc/pkg-utils.inc:711 etc/inc/pkg-utils.inc:755 +#: etc/inc/pkg-utils.inc:786 etc/inc/pkg-utils.inc:805 +#: etc/inc/pkg-utils.inc:812 etc/inc/pkg-utils.inc:829 +#: etc/inc/pkg-utils.inc:845 etc/inc/pkg-utils.inc:861 +#: etc/inc/pkg-utils.inc:967 etc/inc/pkg-utils.inc:984 +#: etc/inc/pkg-utils.inc:1009 etc/inc/pkg-utils.inc:1054 +#: etc/inc/pkg-utils.inc:1063 etc/inc/pkg-utils.inc:1073 +#: etc/inc/pkg-utils.inc:1088 etc/inc/pkg-utils.inc:1095 +#: etc/inc/pkg-utils.inc:1114 etc/inc/services.inc:899 +#: etc/inc/services.inc:1234 etc/inc/services.inc:1297 +#: etc/inc/services.inc:1477 etc/inc/system.inc:651 etc/inc/system.inc:674 +#: etc/inc/system.inc:759 etc/inc/system.inc:1197 etc/inc/system.inc:1278 +#: etc/inc/system.inc:1409 etc/inc/rrd.inc:782 etc/inc/system.inc:699 +#: etc/inc/system.inc:722 etc/inc/system.inc:806 etc/inc/system.inc:1249 +#: etc/inc/system.inc:1334 etc/inc/system.inc:1466 etc/inc/pkg-utils.inc:612 +#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:645 +#: etc/inc/pkg-utils.inc:722 etc/inc/pkg-utils.inc:737 +#: etc/inc/pkg-utils.inc:781 etc/inc/pkg-utils.inc:841 +#: etc/inc/pkg-utils.inc:848 etc/inc/pkg-utils.inc:865 +#: etc/inc/pkg-utils.inc:881 etc/inc/pkg-utils.inc:897 +#: etc/inc/pkg-utils.inc:1004 etc/inc/pkg-utils.inc:1021 +#: etc/inc/pkg-utils.inc:1046 etc/inc/pkg-utils.inc:1091 +#: etc/inc/pkg-utils.inc:1100 etc/inc/pkg-utils.inc:1110 +#: etc/inc/pkg-utils.inc:1125 etc/inc/pkg-utils.inc:1132 +#: etc/inc/pkg-utils.inc:1151 etc/inc/interfaces.inc:219 +#: etc/inc/interfaces.inc:236 etc/inc/interfaces.inc:362 +#: etc/inc/interfaces.inc:412 etc/inc/interfaces.inc:671 +#: etc/inc/interfaces.inc:951 etc/inc/interfaces.inc:991 +#: etc/inc/interfaces.inc:1006 etc/inc/interfaces.inc:1845 etc/inc/rrd.inc:806 +#: etc/inc/services.inc:1028 etc/inc/services.inc:1370 +#: etc/inc/services.inc:1434 etc/inc/services.inc:1669 etc/inc/filter.inc:245 +#: etc/inc/filter.inc:420 etc/inc/system.inc:703 etc/inc/system.inc:726 +#: etc/inc/system.inc:804 etc/inc/system.inc:1229 etc/inc/system.inc:1376 +#: etc/inc/system.inc:1508 etc/inc/pkg-utils.inc:394 etc/inc/pkg-utils.inc:613 +#: etc/inc/pkg-utils.inc:623 etc/inc/pkg-utils.inc:646 +#: etc/inc/pkg-utils.inc:723 etc/inc/pkg-utils.inc:738 +#: etc/inc/pkg-utils.inc:782 etc/inc/pkg-utils.inc:813 +#: etc/inc/pkg-utils.inc:842 etc/inc/pkg-utils.inc:849 +#: etc/inc/pkg-utils.inc:866 etc/inc/pkg-utils.inc:882 +#: etc/inc/pkg-utils.inc:898 etc/inc/pkg-utils.inc:1005 +#: etc/inc/pkg-utils.inc:1022 etc/inc/pkg-utils.inc:1047 +#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1101 +#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1126 +#: etc/inc/pkg-utils.inc:1133 etc/inc/pkg-utils.inc:1152 +#: etc/inc/interfaces.inc:218 etc/inc/interfaces.inc:235 +#: etc/inc/interfaces.inc:361 etc/inc/interfaces.inc:411 +#: etc/inc/interfaces.inc:670 etc/inc/interfaces.inc:950 +#: etc/inc/interfaces.inc:990 etc/inc/interfaces.inc:1005 +#: etc/inc/interfaces.inc:1849 etc/inc/services.inc:1160 +#: etc/inc/services.inc:1509 etc/inc/services.inc:1573 +#: etc/inc/services.inc:1808 etc/inc/filter.inc:244 etc/inc/filter.inc:423 +#: etc/inc/filter.inc:219 etc/inc/filter.inc:395 etc/inc/pkg-utils.inc:411 +#: etc/inc/pkg-utils.inc:648 etc/inc/pkg-utils.inc:658 +#: etc/inc/pkg-utils.inc:681 etc/inc/pkg-utils.inc:758 +#: etc/inc/pkg-utils.inc:773 etc/inc/pkg-utils.inc:817 +#: etc/inc/pkg-utils.inc:877 etc/inc/pkg-utils.inc:884 +#: etc/inc/pkg-utils.inc:901 etc/inc/pkg-utils.inc:917 +#: etc/inc/pkg-utils.inc:933 etc/inc/pkg-utils.inc:1040 +#: etc/inc/pkg-utils.inc:1057 etc/inc/pkg-utils.inc:1082 +#: etc/inc/pkg-utils.inc:1127 etc/inc/pkg-utils.inc:1136 +#: etc/inc/pkg-utils.inc:1146 etc/inc/pkg-utils.inc:1161 +#: etc/inc/pkg-utils.inc:1168 etc/inc/pkg-utils.inc:1187 +#: etc/inc/interfaces.inc:216 etc/inc/interfaces.inc:233 +#: etc/inc/interfaces.inc:365 etc/inc/interfaces.inc:422 +#: etc/inc/interfaces.inc:697 etc/inc/interfaces.inc:1033 +#: etc/inc/interfaces.inc:1054 etc/inc/interfaces.inc:1069 +#: etc/inc/interfaces.inc:1889 etc/inc/services.inc:1154 +#: etc/inc/services.inc:1499 etc/inc/services.inc:1596 +#: etc/inc/services.inc:1797 etc/inc/system.inc:712 etc/inc/system.inc:735 +#: etc/inc/system.inc:815 etc/inc/system.inc:1178 etc/inc/system.inc:1318 +#: etc/inc/system.inc:1457 etc/inc/rrd.inc:829 etc/inc/filter.inc:399 +#: etc/inc/interfaces.inc:1894 etc/inc/services.inc:1516 +#: etc/inc/services.inc:1628 etc/inc/services.inc:1837 etc/inc/rrd.inc:831 +#: etc/inc/services.inc:1659 etc/inc/services.inc:1868 etc/inc/rrd.inc:834 +#: etc/inc/filter.inc:219 etc/inc/filter.inc:399 etc/inc/pkg-utils.inc:411 +#: etc/inc/pkg-utils.inc:648 etc/inc/pkg-utils.inc:658 +#: etc/inc/pkg-utils.inc:681 etc/inc/pkg-utils.inc:758 +#: etc/inc/pkg-utils.inc:773 etc/inc/pkg-utils.inc:817 +#: etc/inc/pkg-utils.inc:848 etc/inc/pkg-utils.inc:877 +#: etc/inc/pkg-utils.inc:884 etc/inc/pkg-utils.inc:901 +#: etc/inc/pkg-utils.inc:917 etc/inc/pkg-utils.inc:933 +#: etc/inc/pkg-utils.inc:1040 etc/inc/pkg-utils.inc:1057 +#: etc/inc/pkg-utils.inc:1082 etc/inc/pkg-utils.inc:1127 +#: etc/inc/pkg-utils.inc:1136 etc/inc/pkg-utils.inc:1146 +#: etc/inc/pkg-utils.inc:1161 etc/inc/pkg-utils.inc:1168 +#: etc/inc/pkg-utils.inc:1187 etc/inc/interfaces.inc:216 +#: etc/inc/interfaces.inc:233 etc/inc/interfaces.inc:365 +#: etc/inc/interfaces.inc:422 etc/inc/interfaces.inc:697 +#: etc/inc/interfaces.inc:1005 etc/inc/interfaces.inc:1033 +#: etc/inc/interfaces.inc:1054 etc/inc/interfaces.inc:1069 +#: etc/inc/interfaces.inc:1894 etc/inc/services.inc:1212 +#: etc/inc/services.inc:1568 etc/inc/services.inc:1723 +#: etc/inc/services.inc:1932 etc/inc/system.inc:771 etc/inc/system.inc:794 +#: etc/inc/system.inc:874 etc/inc/system.inc:1237 etc/inc/system.inc:1377 +#: etc/inc/system.inc:1516 etc/inc/rrd.inc:834 +msgid "done." +msgstr "" + +#: etc/inc/filter.inc:259 etc/inc/filter.inc:265 etc/inc/filter.inc:289 +#: etc/inc/filter.inc:269 etc/inc/filter.inc:269 +msgid "Setting up logging information" +msgstr "" + +#: etc/inc/filter.inc:290 etc/inc/filter.inc:294 etc/inc/filter.inc:274 +#: etc/inc/filter.inc:274 +msgid "Setting up SCRUB information" +msgstr "" + +#: etc/inc/filter.inc:336 etc/inc/filter.inc:338 etc/inc/filter.inc:341 +#: etc/inc/filter.inc:313 etc/inc/filter.inc:313 +#, php-format +msgid "The line in question reads [%1$d]: %2$s" +msgstr "" + +#: etc/inc/filter.inc:338 etc/inc/filter.inc:340 etc/inc/filter.inc:342 +#: etc/inc/filter.inc:343 etc/inc/filter.inc:345 etc/inc/filter.inc:316 +#: etc/inc/filter.inc:317 etc/inc/filter.inc:316 etc/inc/filter.inc:317 +#, php-format +msgid "There were error(s) loading the rules: %1$s - %2$s" +msgstr "" + +#: etc/inc/filter.inc:349 etc/inc/filter.inc:351 etc/inc/filter.inc:354 +#: etc/inc/filter.inc:324 etc/inc/filter.inc:324 +msgid "PF was wedged/busy and has been reset." +msgstr "" + +#: etc/inc/filter.inc:355 etc/inc/filter.inc:357 etc/inc/filter.inc:360 +#: etc/inc/filter.inc:329 etc/inc/filter.inc:333 etc/inc/filter.inc:333 +msgid "Starting up layer7 daemon" +msgstr "" + +#: etc/inc/filter.inc:403 etc/inc/filter.inc:405 etc/inc/filter.inc:408 +#: etc/inc/filter.inc:380 etc/inc/filter.inc:384 etc/inc/filter.inc:384 +msgid "Processing down interface states" +msgstr "" + +#: etc/inc/filter.inc:407 etc/inc/filter.inc:409 etc/inc/filter.inc:412 +#: etc/inc/filter.inc:384 etc/inc/filter.inc:388 etc/inc/filter.inc:388 +msgid "Running plugins" +msgstr "" + +#: etc/inc/filter.inc:411 etc/inc/filter.inc:413 etc/inc/filter.inc:416 +#: etc/inc/filter.inc:388 etc/inc/filter.inc:392 etc/inc/filter.inc:392 +msgid "Running plugins (pf)" +msgstr "" + +#: etc/inc/filter.inc:413 etc/inc/filter.inc:415 etc/inc/filter.inc:418 +#: etc/inc/filter.inc:390 etc/inc/filter.inc:394 etc/inc/filter.inc:394 +msgid "Plugins completed." +msgstr "" + +#: etc/inc/filter.inc:416 usr/local/www/restart_httpd.php:52 +#: usr/local/www/restart_httpd.php:55 usr/local/www/restart_httpd.php:58 +#: usr/local/www/restart_httpd.php:61 etc/inc/filter.inc:418 +#: etc/inc/filter.inc:421 etc/inc/filter.inc:393 etc/inc/filter.inc:397 +#: usr/local/www/restart_httpd.php:52 usr/local/www/restart_httpd.php:55 +#: usr/local/www/restart_httpd.php:58 usr/local/www/restart_httpd.php:61 +#: etc/inc/filter.inc:397 +msgid "Done" +msgstr "" + +#: etc/inc/filter.inc:636 etc/inc/filter.inc:649 etc/inc/filter.inc:652 +#: etc/inc/filter.inc:641 etc/inc/filter.inc:657 etc/inc/filter.inc:652 +msgid "Creating gateway group item..." +msgstr "" + +#: etc/inc/filter.inc:666 etc/inc/filter.inc:681 etc/inc/filter.inc:684 +#: etc/inc/filter.inc:673 etc/inc/filter.inc:687 etc/inc/filter.inc:692 +#: etc/inc/filter.inc:687 +#, php-format +msgid "Setting up route with %1$s on %2$s" +msgstr "" + +#: etc/inc/filter.inc:673 etc/inc/filter.inc:688 etc/inc/filter.inc:691 +#: etc/inc/filter.inc:680 etc/inc/filter.inc:694 etc/inc/filter.inc:699 +#: etc/inc/filter.inc:694 +#, php-format +msgid "" +"An error occurred while trying to find the interface got %s . The rule has " +"not been added." +msgstr "" + +#: etc/inc/filter.inc:937 etc/inc/filter.inc:987 etc/inc/filter.inc:975 +#: etc/inc/filter.inc:1009 etc/inc/filter.inc:1027 etc/inc/filter.inc:1032 +#: etc/inc/filter.inc:1027 +#, php-format +msgid "Creating reflection NAT rule for %s..." +msgstr "" + +#: etc/inc/filter.inc:991 etc/inc/filter.inc:1076 etc/inc/filter.inc:1064 +#: etc/inc/filter.inc:1098 etc/inc/filter.inc:1116 etc/inc/filter.inc:1121 +#: etc/inc/filter.inc:1116 +#, php-format +msgid "Creating reflection rule for %s..." +msgstr "" + +#: etc/inc/filter.inc:1251 etc/inc/filter.inc:1338 etc/inc/filter.inc:1326 +#: etc/inc/filter.inc:1360 etc/inc/filter.inc:1378 etc/inc/filter.inc:1383 +#: etc/inc/filter.inc:1378 +msgid "Creating 1:1 rules..." +msgstr "" + +#: etc/inc/filter.inc:1350 etc/inc/filter.inc:1437 etc/inc/filter.inc:1454 +#: etc/inc/filter.inc:1501 etc/inc/filter.inc:1519 etc/inc/filter.inc:1524 +#: etc/inc/filter.inc:1519 +#, php-format +msgid "Creating advanced outbound rule %s" +msgstr "" + +#: etc/inc/filter.inc:1386 etc/inc/filter.inc:1473 etc/inc/filter.inc:1490 +#: etc/inc/filter.inc:1533 etc/inc/filter.inc:1551 etc/inc/filter.inc:1556 +#: etc/inc/filter.inc:1551 +msgid "Creating outbound NAT rules" +msgstr "" + +#: etc/inc/filter.inc:1481 etc/inc/filter.inc:1566 etc/inc/filter.inc:1583 +#: etc/inc/filter.inc:1626 etc/inc/filter.inc:1644 etc/inc/filter.inc:1649 +#: etc/inc/filter.inc:1644 +#, php-format +msgid "Creating outbound rules %1$s - (%2$s)" +msgstr "" + +#: etc/inc/filter.inc:1499 etc/inc/filter.inc:1584 etc/inc/filter.inc:1601 +#: etc/inc/filter.inc:1644 etc/inc/filter.inc:1662 etc/inc/filter.inc:1667 +#: etc/inc/filter.inc:1662 +msgid "Setting up TFTP helper" +msgstr "" + +#: etc/inc/filter.inc:1545 etc/inc/filter.inc:1630 etc/inc/filter.inc:1644 +#: etc/inc/filter.inc:1676 etc/inc/filter.inc:1694 etc/inc/filter.inc:1699 +#: etc/inc/filter.inc:1694 +#, php-format +msgid "Creating NAT rule %s" +msgstr "" + +#: etc/inc/filter.inc:1689 etc/inc/filter.inc:1837 etc/inc/filter.inc:1850 +#: etc/inc/filter.inc:1882 etc/inc/filter.inc:1900 etc/inc/filter.inc:1905 +#: etc/inc/filter.inc:1900 +#, php-format +msgid "Creating filter rule %s ..." +msgstr "" + +#: etc/inc/filter.inc:1827 etc/inc/filter.inc:1975 etc/inc/filter.inc:1988 +#: etc/inc/filter.inc:2024 etc/inc/filter.inc:2054 etc/inc/filter.inc:2059 +#: etc/inc/filter.inc:2054 +#, php-format +msgid "filter_generate_address: %s is not a valid source port." +msgstr "" + +#: etc/inc/filter.inc:1943 etc/inc/filter.inc:2094 etc/inc/filter.inc:2107 +#: etc/inc/filter.inc:2142 etc/inc/filter.inc:2172 etc/inc/filter.inc:2177 +#: etc/inc/filter.inc:2172 +#, php-format +msgid "Setting up pass/block rules %s" +msgstr "" + +#: etc/inc/filter.inc:1962 etc/inc/filter.inc:2113 etc/inc/filter.inc:2126 +#: etc/inc/filter.inc:2157 etc/inc/filter.inc:2187 etc/inc/filter.inc:2192 +#: etc/inc/filter.inc:2187 +#, php-format +msgid "Could not find IPv4 gateway for interface (%s)." +msgstr "" + +#: etc/inc/filter.inc:1989 etc/inc/filter.inc:2140 etc/inc/filter.inc:2153 +#: etc/inc/filter.inc:2182 etc/inc/filter.inc:2214 etc/inc/filter.inc:2219 +#: etc/inc/filter.inc:2214 +#, php-format +msgid "Creating rule %s" +msgstr "" + +#: etc/inc/filter.inc:2198 etc/inc/filter.inc:2355 etc/inc/filter.inc:2378 +#: etc/inc/filter.inc:2407 etc/inc/filter.inc:2439 etc/inc/filter.inc:2444 +#: etc/inc/filter.inc:2439 +msgid "Creating default rules" +msgstr "" + +#: etc/inc/filter.inc:2649 etc/inc/filter.inc:2862 etc/inc/filter.inc:2887 +#: etc/inc/filter.inc:2976 etc/inc/filter.inc:3000 etc/inc/filter.inc:3005 +#: etc/inc/filter.inc:3000 +msgid "Creating IPsec rules..." +msgstr "" + +#: etc/inc/filter.inc:2702 etc/inc/filter.inc:2915 etc/inc/filter.inc:2940 +#: etc/inc/filter.inc:3026 etc/inc/filter.inc:3050 etc/inc/filter.inc:3055 +#: etc/inc/filter.inc:3050 +msgid "" +"Please use filter_tdr_install_cron() function tdr_install_cron will be " +"deprecated!" +msgstr "" + +#: etc/inc/filter.inc:2747 etc/inc/filter.inc:2960 etc/inc/filter.inc:2986 +#: etc/inc/filter.inc:3072 etc/inc/filter.inc:3096 etc/inc/filter.inc:3101 +#: etc/inc/filter.inc:3096 +msgid "Installed 15 minute filter reload for Time Based Rules" +msgstr "" + +#: etc/inc/filter.inc:3102 etc/inc/filter.inc:3313 etc/inc/filter.inc:3293 +#: etc/inc/filter.inc:3389 etc/inc/filter.inc:3413 etc/inc/filter.inc:3418 +#: etc/inc/filter.inc:3412 +#, php-format +msgid "Checking for %1$s PF hooks in package %2$s" +msgstr "" + +#: etc/inc/filter.inc:3107 etc/inc/filter.inc:3318 etc/inc/filter.inc:3299 +#: etc/inc/filter.inc:3395 etc/inc/filter.inc:3419 etc/inc/filter.inc:3424 +#: etc/inc/filter.inc:3418 +#, php-format +msgid "Processing early %1$s rules for package %2$s" +msgstr "" + +#: etc/inc/filter.inc:3112 etc/inc/filter.inc:3323 etc/inc/filter.inc:3304 +#: etc/inc/filter.inc:3400 etc/inc/filter.inc:3424 etc/inc/filter.inc:3429 +#: etc/inc/filter.inc:3423 +#, php-format +msgid "There was an error while parsing the package filter rules for %s." +msgstr "" + +#: etc/inc/interfaces.inc:51 etc/inc/interfaces.inc:53 +#: etc/inc/interfaces.inc:51 +msgid "interfaces_bring_up() was called but no variable defined." +msgstr "" + +#: etc/inc/interfaces.inc:213 etc/inc/interfaces.inc:215 +#: etc/inc/interfaces.inc:214 etc/inc/interfaces.inc:212 +#: etc/inc/interfaces.inc:212 +msgid "Configuring loopback interface..." +msgstr "" + +#: etc/inc/interfaces.inc:224 etc/inc/interfaces.inc:226 +#: etc/inc/interfaces.inc:225 etc/inc/interfaces.inc:223 +#: etc/inc/interfaces.inc:223 +msgid "Configuring VLAN interfaces..." +msgstr "" + +#: etc/inc/interfaces.inc:241 etc/inc/interfaces.inc:243 +#: etc/inc/interfaces.inc:242 etc/inc/interfaces.inc:240 +#: etc/inc/interfaces.inc:240 +msgid "VLAN: called with wrong options. Problems with config!" +msgstr "" + +#: etc/inc/interfaces.inc:249 +msgid "interface_vlan_confgure called with if undefined." +msgstr "" + +#: etc/inc/interfaces.inc:283 etc/inc/interfaces.inc:367 +#: etc/inc/interfaces.inc:285 etc/inc/interfaces.inc:369 +#: etc/inc/interfaces.inc:284 etc/inc/interfaces.inc:368 +#: etc/inc/interfaces.inc:282 etc/inc/interfaces.inc:372 +#: etc/inc/interfaces.inc:282 etc/inc/interfaces.inc:372 +#, php-format +msgid "QinQ compat VLAN: called with wrong options. Problems with config!%s" +msgstr "" + +#: etc/inc/interfaces.inc:290 etc/inc/interfaces.inc:375 +#, php-format +msgid "interface_qinq_confgure called with if undefined.%s" +msgstr "" + +#: etc/inc/interfaces.inc:352 etc/inc/interfaces.inc:354 +#: etc/inc/interfaces.inc:353 etc/inc/interfaces.inc:357 +#: etc/inc/interfaces.inc:357 +msgid "Configuring QinQ interfaces..." +msgstr "" + +#: etc/inc/interfaces.inc:396 etc/inc/interfaces.inc:398 +#: etc/inc/interfaces.inc:397 +msgid "Creating other wireless clone interfaces..." +msgstr "" + +#: etc/inc/interfaces.inc:439 etc/inc/interfaces.inc:438 +#: etc/inc/interfaces.inc:437 etc/inc/interfaces.inc:466 +#: etc/inc/interfaces.inc:466 +#, php-format +msgid "No members found on %s" +msgstr "" + +#: etc/inc/interfaces.inc:505 etc/inc/interfaces.inc:512 +#: etc/inc/interfaces.inc:511 etc/inc/interfaces.inc:541 +#: etc/inc/interfaces.inc:541 +msgid "realif not defined in interfaces bridge - up" +msgstr "" + +#: etc/inc/interfaces.inc:618 etc/inc/interfaces.inc:625 +#: etc/inc/interfaces.inc:624 etc/inc/interfaces.inc:654 +#: etc/inc/interfaces.inc:654 +msgid "bridgeif not defined -- could not bring interface up" +msgstr "" + +#: etc/inc/interfaces.inc:652 etc/inc/interfaces.inc:659 +#: etc/inc/interfaces.inc:658 etc/inc/interfaces.inc:685 +#: etc/inc/interfaces.inc:685 +msgid "Configuring LAGG interfaces..." +msgstr "" + +#: etc/inc/interfaces.inc:790 etc/inc/interfaces.inc:801 +#: etc/inc/interfaces.inc:800 etc/inc/interfaces.inc:835 +#: etc/inc/interfaces.inc:835 +msgid "Could not bring greif up -- variable not defined." +msgstr "" + +#: etc/inc/interfaces.inc:833 etc/inc/interfaces.inc:851 +#: etc/inc/interfaces.inc:850 etc/inc/interfaces.inc:899 +#: etc/inc/interfaces.inc:899 +msgid "" +"could not bring realif up -- variable not defined -- " +"interface_gif_configure()" +msgstr "" + +#: etc/inc/interfaces.inc:856 etc/inc/interfaces.inc:874 +#: etc/inc/interfaces.inc:873 etc/inc/interfaces.inc:922 +#: etc/inc/interfaces.inc:922 +msgid "could not bring gifif up -- variable not defined" +msgstr "" + +#: etc/inc/interfaces.inc:919 etc/inc/interfaces.inc:957 +#: etc/inc/interfaces.inc:972 etc/inc/interfaces.inc:945 +#: etc/inc/interfaces.inc:984 etc/inc/interfaces.inc:999 +#: etc/inc/interfaces.inc:944 etc/inc/interfaces.inc:983 +#: etc/inc/interfaces.inc:998 etc/inc/interfaces.inc:1026 +#: etc/inc/interfaces.inc:1047 etc/inc/interfaces.inc:1062 +#: etc/inc/interfaces.inc:999 etc/inc/interfaces.inc:1026 +#: etc/inc/interfaces.inc:1047 etc/inc/interfaces.inc:1062 +#, php-format +msgid "Configuring %s interface..." +msgstr "" + +#: etc/inc/interfaces.inc:921 etc/inc/interfaces.inc:959 +#: etc/inc/interfaces.inc:974 etc/inc/interfaces.inc:948 +#: etc/inc/interfaces.inc:986 etc/inc/interfaces.inc:1001 +#: etc/inc/interfaces.inc:947 etc/inc/interfaces.inc:985 +#: etc/inc/interfaces.inc:1000 etc/inc/interfaces.inc:1002 +#: etc/inc/interfaces.inc:1028 etc/inc/interfaces.inc:1049 +#: etc/inc/interfaces.inc:1064 etc/inc/interfaces.inc:1002 +#: etc/inc/interfaces.inc:1028 etc/inc/interfaces.inc:1049 +#: etc/inc/interfaces.inc:1064 +#, php-format +msgid "Configuring %s" +msgstr "" + +#: etc/inc/interfaces.inc:1299 etc/inc/interfaces.inc:1339 +#: etc/inc/interfaces.inc:1338 etc/inc/interfaces.inc:1407 +#: etc/inc/interfaces.inc:1412 etc/inc/interfaces.inc:1412 +#, php-format +msgid "Can't find PPP config for %s in interface_ppps_configure()." +msgstr "" + +#: etc/inc/interfaces.inc:1362 etc/inc/interfaces.inc:1402 +#: etc/inc/interfaces.inc:1401 etc/inc/interfaces.inc:1464 +#: etc/inc/interfaces.inc:1469 etc/inc/interfaces.inc:1469 +#, php-format +msgid "" +"Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in " +"interfaces_ppps_configure." +msgstr "" + +#: etc/inc/interfaces.inc:1369 etc/inc/interfaces.inc:1409 +#: etc/inc/interfaces.inc:1408 etc/inc/interfaces.inc:1471 +#: etc/inc/interfaces.inc:1476 etc/inc/interfaces.inc:1476 +#, php-format +msgid "" +"Device %s does not exist. PPP link cannot start without the modem device." +msgstr "" + +#: etc/inc/interfaces.inc:1374 etc/inc/interfaces.inc:1414 +#: etc/inc/interfaces.inc:1413 etc/inc/interfaces.inc:1476 +#: etc/inc/interfaces.inc:1481 etc/inc/interfaces.inc:1481 +#, php-format +msgid "Unkown %s configured as ppp interface." +msgstr "" + +#: etc/inc/interfaces.inc:1641 etc/inc/interfaces.inc:1686 +#: etc/inc/interfaces.inc:1685 etc/inc/interfaces.inc:1748 +#: etc/inc/interfaces.inc:1753 etc/inc/interfaces.inc:1753 +#, php-format +msgid "Error: cannot open mpd_%s.conf in interface_ppps_configure().%s" +msgstr "" + +#: etc/inc/interfaces.inc:1702 etc/inc/interfaces.inc:1771 +#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1828 +#: etc/inc/interfaces.inc:1833 etc/inc/interfaces.inc:1833 +msgid "Configuring CARP settings..." +msgstr "" + +#: etc/inc/interfaces.inc:1723 etc/inc/interfaces.inc:1788 +#: etc/inc/interfaces.inc:1787 +msgid "Enable CARP ARP-balancing" +msgstr "" + +#: etc/inc/interfaces.inc:1724 etc/inc/interfaces.inc:1789 +#: etc/inc/interfaces.inc:1788 +msgid "Disallow CARP preemption" +msgstr "" + +#: etc/inc/interfaces.inc:1726 etc/inc/interfaces.inc:1791 +#: etc/inc/interfaces.inc:1790 +msgid "Enable CARP preemption" +msgstr "" + +#: etc/inc/interfaces.inc:1728 etc/inc/interfaces.inc:1793 +#: etc/inc/interfaces.inc:1792 +msgid "Enable CARP logging" +msgstr "" + +#: etc/inc/interfaces.inc:1744 etc/inc/interfaces.inc:1809 +#: etc/inc/interfaces.inc:1808 +msgid "Could not create rules.boot file!" +msgstr "" + +#: etc/inc/interfaces.inc:1750 etc/inc/interfaces.inc:1815 +#: etc/inc/interfaces.inc:1814 +msgid "Bring up pfsync0 syncpeer" +msgstr "" + +#: etc/inc/interfaces.inc:1752 etc/inc/interfaces.inc:1817 +#: etc/inc/interfaces.inc:1816 +msgid "Bring up pfsync0 syncdev" +msgstr "" + +#: etc/inc/interfaces.inc:1754 etc/inc/interfaces.inc:1819 +#: etc/inc/interfaces.inc:1818 +msgid "Bring up pfsync0" +msgstr "" + +#: etc/inc/interfaces.inc:1768 etc/inc/interfaces.inc:1833 +#: etc/inc/interfaces.inc:1837 +msgid "Allow CARP." +msgstr "" + +#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1835 +#: etc/inc/interfaces.inc:1839 +msgid "Disallow CARP." +msgstr "" + +#: etc/inc/interfaces.inc:1963 etc/inc/interfaces.inc:2038 +#: etc/inc/interfaces.inc:2020 etc/inc/interfaces.inc:2099 +#: etc/inc/interfaces.inc:2016 etc/inc/interfaces.inc:2056 +#: etc/inc/interfaces.inc:2061 etc/inc/interfaces.inc:2061 +#, php-format +msgid "" +"Interface specified for the virtual IP address %s does not exist. Skipping " +"this VIP." +msgstr "" + +#: etc/inc/interfaces.inc:1972 etc/inc/interfaces.inc:2029 +#: etc/inc/interfaces.inc:2025 etc/inc/interfaces.inc:2065 +#: etc/inc/interfaces.inc:2070 etc/inc/interfaces.inc:2070 +#, php-format +msgid "" +"Sorry but we could not find a matching real interface subnet for the virtual " +"IP address %s." +msgstr "" + +#: etc/inc/interfaces.inc:1981 etc/inc/interfaces.inc:2038 +#: etc/inc/interfaces.inc:2034 etc/inc/interfaces.inc:2074 +#: etc/inc/interfaces.inc:2079 etc/inc/interfaces.inc:2079 +#, php-format +msgid "" +"Sorry but we could not find a matching real interface subnet for the virtual " +"IPv6 address %s." +msgstr "" + +#: etc/inc/interfaces.inc:2084 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interfaces_carpdev_configure() for " +"writing.%s" +msgstr "" + +#: etc/inc/interfaces.inc:2117 etc/inc/interfaces.inc:2185 +#: etc/inc/interfaces.inc:2104 etc/inc/interfaces.inc:2144 +#: etc/inc/interfaces.inc:2149 etc/inc/interfaces.inc:2149 +#, php-format +msgid "Interface %s changed to hostap mode" +msgstr "" + +#: etc/inc/interfaces.inc:2121 etc/inc/interfaces.inc:2189 +#: etc/inc/interfaces.inc:2108 etc/inc/interfaces.inc:2148 +#: etc/inc/interfaces.inc:2153 etc/inc/interfaces.inc:2153 +#, php-format +msgid "Interface %s changed to adhoc mode" +msgstr "" + +#: etc/inc/interfaces.inc:2125 etc/inc/interfaces.inc:2193 +#: etc/inc/interfaces.inc:2112 etc/inc/interfaces.inc:2152 +#: etc/inc/interfaces.inc:2157 etc/inc/interfaces.inc:2157 +#, php-format +msgid "Interface %s changed to infrastructure mode" +msgstr "" + +#: etc/inc/interfaces.inc:2137 etc/inc/interfaces.inc:2205 +#: etc/inc/interfaces.inc:2124 etc/inc/interfaces.inc:2164 +#: etc/inc/interfaces.inc:2169 etc/inc/interfaces.inc:2169 +#, php-format +msgid "Cloning new wireless interface %s" +msgstr "" + +#: etc/inc/interfaces.inc:2142 etc/inc/interfaces.inc:2210 +#: etc/inc/interfaces.inc:2129 etc/inc/interfaces.inc:2169 +#: etc/inc/interfaces.inc:2174 etc/inc/interfaces.inc:2174 +#, php-format +msgid "Failed to clone interface %1$s with error code %2$s, output %3$s" +msgstr "" + +#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2790 +#: etc/inc/interfaces.inc:2709 etc/inc/interfaces.inc:2761 +#: etc/inc/interfaces.inc:2784 etc/inc/interfaces.inc:2784 +msgid "Generating new MAC address." +msgstr "" + +#: etc/inc/interfaces.inc:2721 etc/inc/interfaces.inc:2796 +#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2767 +#: etc/inc/interfaces.inc:2790 etc/inc/interfaces.inc:2790 +#, php-format +msgid "" +"The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been " +"automatically replaced with %2$s" +msgstr "" + +#: etc/inc/interfaces.inc:2910 +msgid "Could not bring wanif up in terface_carpdev_dhcp_configure()" +msgstr "" + +#: etc/inc/interfaces.inc:3016 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interfaces_wan_dhcp_configure() for " +"writing.%s" +msgstr "" + +#: etc/inc/interfaces.inc:3029 etc/inc/interfaces.inc:3513 +#: etc/inc/interfaces.inc:3373 etc/inc/interfaces.inc:3466 +#: etc/inc/interfaces.inc:3593 etc/inc/interfaces.inc:3538 +#: etc/inc/interfaces.inc:3538 +#, php-format +msgid "Invalid interface \"%s\" in interface_dhcp_configure()" +msgstr "" + +#: etc/inc/interfaces.inc:3064 etc/inc/interfaces.inc:3548 +#: etc/inc/interfaces.inc:3408 etc/inc/interfaces.inc:3501 +#: etc/inc/interfaces.inc:3628 etc/inc/interfaces.inc:3573 +#: etc/inc/interfaces.inc:3573 +#, php-format +msgid "Could not bring up %s interface in interface_dhcp_configure()" +msgstr "" + +#: etc/inc/notices.inc:76 etc/inc/notices.inc:76 +#, php-format +msgid "Could not open %s for writing" +msgstr "" + +#: etc/inc/notices.inc:327 etc/inc/notices.inc:327 +#, php-format +msgid "Message sent to %s OK" +msgstr "" + +#: etc/inc/notices.inc:330 etc/inc/notices.inc:331 etc/inc/notices.inc:330 +#: etc/inc/notices.inc:331 +#, php-format +msgid "Could not send the message to %1$s -- Error: %2$s" +msgstr "" + +#: etc/inc/openvpn.inc:83 etc/inc/openvpn.inc:90 etc/inc/openvpn.inc:81 +#: etc/inc/openvpn.inc:88 etc/inc/openvpn.inc:81 etc/inc/openvpn.inc:88 +msgid "Peer to Peer ( SSL/TLS )" +msgstr "" + +#: etc/inc/openvpn.inc:84 etc/inc/openvpn.inc:91 etc/inc/openvpn.inc:82 +#: etc/inc/openvpn.inc:89 etc/inc/openvpn.inc:82 etc/inc/openvpn.inc:89 +msgid "Peer to Peer ( Shared Key )" +msgstr "" + +#: etc/inc/openvpn.inc:85 etc/inc/openvpn.inc:83 etc/inc/openvpn.inc:83 +msgid "Remote Access ( SSL/TLS )" +msgstr "" + +#: etc/inc/openvpn.inc:86 etc/inc/openvpn.inc:84 etc/inc/openvpn.inc:84 +msgid "Remote Access ( User Auth )" +msgstr "" + +#: etc/inc/openvpn.inc:87 etc/inc/openvpn.inc:85 etc/inc/openvpn.inc:85 +msgid "Remote Access ( SSL/TLS + User Auth )" +msgstr "" + +#: etc/inc/openvpn.inc:179 etc/inc/openvpn.inc:177 etc/inc/openvpn.inc:195 +#: etc/inc/openvpn.inc:195 +msgid "None (No Encryption)" +msgstr "" + +#: etc/inc/openvpn.inc:203 etc/inc/openvpn.inc:201 etc/inc/openvpn.inc:238 +#: etc/inc/openvpn.inc:238 +#, php-format +msgid "The field '%s' must contain a valid IP address or domain name." +msgstr "" + +#: etc/inc/openvpn.inc:210 etc/inc/openvpn.inc:208 etc/inc/openvpn.inc:245 +#: etc/inc/openvpn.inc:245 +#, php-format +msgid "The field '%s' must contain a valid port, ranging from 0 to 65535." +msgstr "" + +#: etc/inc/openvpn.inc:219 etc/inc/openvpn.inc:217 +#, php-format +msgid "The field '%s' must contain a valid CIDR range." +msgstr "" + +#: etc/inc/pfsense-utils.inc:345 etc/inc/pfsense-utils.inc:330 +#: etc/inc/pfsense-utils.inc:330 +msgid "MASTER" +msgstr "" + +#: etc/inc/pfsense-utils.inc:347 etc/inc/pfsense-utils.inc:332 +#: etc/inc/pfsense-utils.inc:332 +msgid "BACKUP" +msgstr "" + +#: etc/inc/pfsense-utils.inc:349 etc/inc/pfsense-utils.inc:334 +#: etc/inc/pfsense-utils.inc:334 +msgid "INIT" +msgstr "" + +#: etc/inc/pfsense-utils.inc:417 etc/inc/pfsense-utils.inc:402 +#: etc/inc/pfsense-utils.inc:402 +msgid "After synch increase advertising skew" +msgstr "" + +#: etc/inc/pfsense-utils.inc:462 etc/inc/pfsense-utils.inc:447 +#: etc/inc/pfsense-utils.inc:447 +msgid "Error creating socket!" +msgstr "" + +#: etc/inc/pfsense-utils.inc:463 etc/inc/pfsense-utils.inc:448 +#: etc/inc/pfsense-utils.inc:448 +#, php-format +msgid "Error code is '%1$s' - %2$s" +msgstr "" + +#: etc/inc/pfsense-utils.inc:468 etc/inc/pfsense-utils.inc:453 +#: etc/inc/pfsense-utils.inc:453 +#, php-format +msgid "setsockopt() failed, error: %s" +msgstr "" + +#: etc/inc/pfsense-utils.inc:471 etc/inc/pfsense-utils.inc:456 +#: etc/inc/pfsense-utils.inc:456 +#, php-format +msgid "Magic Packet sent (%1$s) to {%2$s} MAC=%3$s" +msgstr "" + +#: etc/inc/pfsense-utils.inc:518 etc/inc/pfsense-utils.inc:540 +#: etc/inc/pfsense-utils.inc:533 etc/inc/pfsense-utils.inc:555 +#: etc/inc/pfsense-utils.inc:518 etc/inc/pfsense-utils.inc:540 +#, php-format +msgid "Restored %s of config file (maybe from CARP partner)" +msgstr "" + +#: etc/inc/pfsense-utils.inc:699 etc/inc/pfsense-utils.inc:714 +#: etc/inc/pfsense-utils.inc:699 +#, php-format +msgid "XMLRPC communication error: %s" +msgstr "" + +#: etc/inc/pfsense-utils.inc:702 etc/inc/pfsense-utils.inc:717 +#: etc/inc/pfsense-utils.inc:702 +#, php-format +msgid "XMLRPC request failed with error %1$s: %2$s" +msgstr "" + +#: etc/inc/pfsense-utils.inc:795 etc/inc/pfsense-utils.inc:810 +#: etc/inc/pfsense-utils.inc:795 +msgid "reload_interfaces_sync() is starting." +msgstr "" + +#: etc/inc/pfsense-utils.inc:803 etc/inc/pfsense-utils.inc:818 +#: etc/inc/pfsense-utils.inc:803 +msgid "Enabling system routing" +msgstr "" + +#: etc/inc/pfsense-utils.inc:806 etc/inc/pfsense-utils.inc:821 +#: etc/inc/pfsense-utils.inc:806 +msgid "Cleaning up Interfaces" +msgstr "" + +#: etc/inc/pfsense-utils.inc:912 etc/inc/pfsense-utils.inc:927 +#: etc/inc/pfsense-utils.inc:936 etc/inc/pfsense-utils.inc:936 +msgid "Enabling auto login was not possible." +msgstr "" + +#: etc/inc/pfsense-utils.inc:1100 etc/inc/pfsense-utils.inc:1137 +#: etc/inc/pfsense-utils.inc:1191 etc/inc/pfsense-utils.inc:1196 +#: etc/inc/pfsense-utils.inc:1196 +msgid "No history data found!" +msgstr "" + +#: etc/inc/pfsense-utils.inc:1222 etc/inc/pfsense-utils.inc:1260 +#: etc/inc/pfsense-utils.inc:1313 etc/inc/pfsense-utils.inc:1318 +#: etc/inc/pfsense-utils.inc:1318 +msgid "device not present! Is the modem attached to the system?" +msgstr "" + +#: etc/inc/pfsense-utils.inc:1262 etc/inc/pfsense-utils.inc:1327 +#: etc/inc/pfsense-utils.inc:1380 etc/inc/pfsense-utils.inc:1385 +#: etc/inc/pfsense-utils.inc:1385 +msgid "running" +msgstr "" + +#: etc/inc/pfsense-utils.inc:1263 usr/local/www/graph.php:201 +#: etc/inc/pfsense-utils.inc:1328 etc/inc/pfsense-utils.inc:1381 +#: etc/inc/pfsense-utils.inc:1386 usr/local/www/graph.php:201 +#: etc/inc/pfsense-utils.inc:1386 +msgid "up" +msgstr "" + +#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371 +#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429 +#: etc/inc/pfsense-utils.inc:1429 +msgid "blocking" +msgstr "" + +#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371 +#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429 +#: etc/inc/pfsense-utils.inc:1429 +msgid "check for ethernet loops" +msgstr "" + +#: etc/inc/pfsense-utils.inc:1303 etc/inc/pfsense-utils.inc:1374 +#: etc/inc/pfsense-utils.inc:1427 etc/inc/pfsense-utils.inc:1432 +#: etc/inc/pfsense-utils.inc:1432 +msgid "learning" +msgstr "" + +#: etc/inc/pfsense-utils.inc:1306 etc/inc/pfsense-utils.inc:1377 +#: etc/inc/pfsense-utils.inc:1430 etc/inc/pfsense-utils.inc:1435 +#: etc/inc/pfsense-utils.inc:1435 +msgid "forwarding" +msgstr "" + +#: etc/inc/pfsense-utils.inc:1417 etc/inc/pfsense-utils.inc:1493 +#: etc/inc/pfsense-utils.inc:1546 etc/inc/pfsense-utils.inc:1551 +#: etc/inc/pfsense-utils.inc:1555 +#, php-format +msgid "DNSCACHE: Found old IP %1$s and new IP %2$s" +msgstr "" + +#: etc/inc/pkg-utils.inc:211 etc/inc/pkg-utils.inc:226 +#: etc/inc/pkg-utils.inc:244 etc/inc/pkg-utils.inc:244 +msgid "Resyncing configuration for all packages." +msgstr "" + +#: etc/inc/pkg-utils.inc:231 etc/inc/pkg-utils.inc:246 +#: etc/inc/pkg-utils.inc:264 etc/inc/pkg-utils.inc:264 +msgid "Syncing packages:" +msgstr "" + +#: etc/inc/pkg-utils.inc:273 etc/inc/pkg-utils.inc:288 +#: etc/inc/pkg-utils.inc:306 etc/inc/pkg-utils.inc:306 +#, php-format +msgid "" +"The %1$s package is missing required dependencies and must be reinstalled. " +"%2$s" +msgstr "" + +#: etc/inc/pkg-utils.inc:297 etc/inc/pkg-utils.inc:437 +#: etc/inc/pkg-utils.inc:312 etc/inc/pkg-utils.inc:462 +#: etc/inc/pkg-utils.inc:464 etc/inc/pkg-utils.inc:330 +#: etc/inc/pkg-utils.inc:481 etc/inc/pkg-utils.inc:330 +#: etc/inc/pkg-utils.inc:481 +#, php-format +msgid "" +"The %s package is missing required dependencies and must be reinstalled." +msgstr "" + +#: etc/inc/pkg-utils.inc:404 etc/inc/pkg-utils.inc:429 +#: etc/inc/pkg-utils.inc:431 etc/inc/pkg-utils.inc:448 +#: etc/inc/pkg-utils.inc:448 +#, php-format +msgid "" +"The %s package is missing its configuration file and must be reinstalled." +msgstr "" + +#: etc/inc/pkg-utils.inc:563 usr/local/www/pkg_mgr_install.php:101 +#: etc/inc/pkg-utils.inc:589 etc/inc/pkg-utils.inc:590 +#: usr/local/www/pkg_mgr_install.php:99 etc/inc/pkg-utils.inc:625 +#: usr/local/www/pkg_mgr_install.php:97 usr/local/www/pkg_mgr_install.php:97 +#: etc/inc/pkg-utils.inc:625 +msgid "Beginning package installation." +msgstr "" + +#: etc/inc/pkg-utils.inc:564 etc/inc/pkg-utils.inc:565 +#: etc/inc/pkg-utils.inc:590 etc/inc/pkg-utils.inc:591 +#: etc/inc/pkg-utils.inc:592 etc/inc/pkg-utils.inc:626 +#: etc/inc/pkg-utils.inc:627 etc/inc/pkg-utils.inc:626 +#: etc/inc/pkg-utils.inc:627 +#, php-format +msgid "Beginning package installation for %s ." +msgstr "" + +#: etc/inc/pkg-utils.inc:569 etc/inc/pkg-utils.inc:595 +#: etc/inc/pkg-utils.inc:596 etc/inc/pkg-utils.inc:631 +#: etc/inc/pkg-utils.inc:631 +msgid "Downloading package configuration file... " +msgstr "" + +#: etc/inc/pkg-utils.inc:571 etc/inc/pkg-utils.inc:597 +#: etc/inc/pkg-utils.inc:598 etc/inc/pkg-utils.inc:633 +#: etc/inc/pkg-utils.inc:633 +msgid "Downloading package configuration file..." +msgstr "" + +#: etc/inc/pkg-utils.inc:575 etc/inc/pkg-utils.inc:601 +#: etc/inc/pkg-utils.inc:602 etc/inc/pkg-utils.inc:637 +#: etc/inc/pkg-utils.inc:637 +msgid "" +"ERROR! Unable to fetch package configuration file. Aborting installation." +msgstr "" + +#: etc/inc/pkg-utils.inc:577 etc/inc/pkg-utils.inc:603 +#: etc/inc/pkg-utils.inc:604 etc/inc/pkg-utils.inc:639 +#: etc/inc/pkg-utils.inc:639 +msgid "" +"ERROR! Unable to fetch package configuration file. Aborting package " +"installation." +msgstr "" + +#: etc/inc/pkg-utils.inc:579 etc/inc/pkg-utils.inc:605 +#: etc/inc/pkg-utils.inc:606 etc/inc/pkg-utils.inc:641 +#: etc/inc/pkg-utils.inc:641 +msgid "" +"failed!\n" +"\n" +"Installation aborted.\n" +msgstr "" + +#: etc/inc/pkg-utils.inc:591 etc/inc/pkg-utils.inc:617 +#: etc/inc/pkg-utils.inc:618 etc/inc/pkg-utils.inc:653 +#: etc/inc/pkg-utils.inc:653 +msgid "Saving updated package information..." +msgstr "" + +#: etc/inc/pkg-utils.inc:595 etc/inc/pkg-utils.inc:621 +#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:657 +#: etc/inc/pkg-utils.inc:657 +#, php-format +msgid "Installed %s package." +msgstr "" + +#: etc/inc/pkg-utils.inc:599 etc/inc/pkg-utils.inc:625 +#: etc/inc/pkg-utils.inc:626 etc/inc/pkg-utils.inc:661 +#: etc/inc/pkg-utils.inc:661 +#, php-format +msgid "Overwrote previous installation of %s." +msgstr "" + +#: etc/inc/pkg-utils.inc:600 etc/inc/pkg-utils.inc:626 +#: etc/inc/pkg-utils.inc:627 etc/inc/pkg-utils.inc:662 +#: etc/inc/pkg-utils.inc:662 +msgid "overwrite!" +msgstr "" + +#: etc/inc/pkg-utils.inc:612 etc/inc/pkg-utils.inc:638 +#: etc/inc/pkg-utils.inc:639 etc/inc/pkg-utils.inc:674 +#: etc/inc/pkg-utils.inc:674 +msgid "Failed to install package." +msgstr "" + +#: etc/inc/pkg-utils.inc:616 etc/inc/pkg-utils.inc:642 +#: etc/inc/pkg-utils.inc:643 etc/inc/pkg-utils.inc:678 +#: etc/inc/pkg-utils.inc:678 +msgid "Writing configuration... " +msgstr "" + +#: etc/inc/pkg-utils.inc:652 etc/inc/pkg-utils.inc:678 +#: etc/inc/pkg-utils.inc:679 etc/inc/pkg-utils.inc:714 +#: etc/inc/pkg-utils.inc:714 +#, php-format +msgid "The %s package is not installed.%sInstallation aborted." +msgstr "" + +#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693 +#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729 +#: etc/inc/pkg-utils.inc:729 +msgid "Installing" +msgstr "" + +#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693 +#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729 +#: etc/inc/pkg-utils.inc:729 +msgid "and its dependencies." +msgstr "" + +#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694 +#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730 +#: etc/inc/pkg-utils.inc:730 +msgid "Downloading" +msgstr "" + +#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694 +#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730 +#: etc/inc/pkg-utils.inc:730 +msgid "and its dependencies... " +msgstr "" + +#: etc/inc/pkg-utils.inc:680 etc/inc/pkg-utils.inc:706 +#: etc/inc/pkg-utils.inc:707 etc/inc/pkg-utils.inc:742 +#: etc/inc/pkg-utils.inc:742 +msgid "Package WAS NOT installed properly." +msgstr "" + +#: etc/inc/pkg-utils.inc:693 etc/inc/pkg-utils.inc:719 +#: etc/inc/pkg-utils.inc:720 etc/inc/pkg-utils.inc:755 +#: etc/inc/pkg-utils.inc:755 +msgid "Loading package configuration... " +msgstr "" + +#: etc/inc/pkg-utils.inc:698 etc/inc/pkg-utils.inc:724 +#: etc/inc/pkg-utils.inc:725 etc/inc/pkg-utils.inc:760 +#: etc/inc/pkg-utils.inc:760 +msgid "Configuring package components...\n" +msgstr "" + +#: etc/inc/pkg-utils.inc:704 etc/inc/pkg-utils.inc:1049 +#: etc/inc/pkg-utils.inc:730 etc/inc/pkg-utils.inc:1086 +#: etc/inc/pkg-utils.inc:731 etc/inc/pkg-utils.inc:1087 +#: etc/inc/pkg-utils.inc:766 etc/inc/pkg-utils.inc:1122 +#: etc/inc/pkg-utils.inc:766 etc/inc/pkg-utils.inc:1122 +msgid "System files... " +msgstr "" + +#: etc/inc/pkg-utils.inc:716 etc/inc/pkg-utils.inc:742 +#: etc/inc/pkg-utils.inc:743 etc/inc/pkg-utils.inc:778 +#: etc/inc/pkg-utils.inc:778 +msgid "Additional files... " +msgstr "" + +#: etc/inc/pkg-utils.inc:742 etc/inc/pkg-utils.inc:768 +#: etc/inc/pkg-utils.inc:769 etc/inc/pkg-utils.inc:804 +#: etc/inc/pkg-utils.inc:804 +msgid "Extracting tarball to -C for " +msgstr "" + +#: etc/inc/pkg-utils.inc:748 etc/inc/pkg-utils.inc:774 +#: etc/inc/pkg-utils.inc:775 etc/inc/pkg-utils.inc:810 +#: etc/inc/pkg-utils.inc:810 +#, php-format +msgid "Changing file mode to %1$s for %2$s%3$s%4$s" +msgstr "" + +#: etc/inc/pkg-utils.inc:764 etc/inc/pkg-utils.inc:1025 +#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:1062 +#: etc/inc/pkg-utils.inc:791 etc/inc/pkg-utils.inc:1063 +#: etc/inc/pkg-utils.inc:826 etc/inc/pkg-utils.inc:1098 +#: etc/inc/pkg-utils.inc:826 etc/inc/pkg-utils.inc:1098 +msgid "Loading package instructions..." +msgstr "" + +#: etc/inc/pkg-utils.inc:779 etc/inc/pkg-utils.inc:805 +#: etc/inc/pkg-utils.inc:806 etc/inc/pkg-utils.inc:841 +#: etc/inc/pkg-utils.inc:841 +msgid "Custom commands..." +msgstr "" + +#: etc/inc/pkg-utils.inc:783 etc/inc/pkg-utils.inc:809 +#: etc/inc/pkg-utils.inc:810 etc/inc/pkg-utils.inc:845 +#: etc/inc/pkg-utils.inc:845 +msgid "Executing custom_php_global_functions()..." +msgstr "" + +#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:816 +#: etc/inc/pkg-utils.inc:817 etc/inc/pkg-utils.inc:852 +#: etc/inc/pkg-utils.inc:852 +msgid "Executing custom_php_install_command()..." +msgstr "" + +#: etc/inc/pkg-utils.inc:809 etc/inc/pkg-utils.inc:845 +#: etc/inc/pkg-utils.inc:846 etc/inc/pkg-utils.inc:881 +#: etc/inc/pkg-utils.inc:881 +msgid "Executing custom_php_resync_config_command()..." +msgstr "" + +#: etc/inc/pkg-utils.inc:818 etc/inc/pkg-utils.inc:972 +#: etc/inc/pkg-utils.inc:854 etc/inc/pkg-utils.inc:1009 +#: etc/inc/pkg-utils.inc:855 etc/inc/pkg-utils.inc:1010 +#: etc/inc/pkg-utils.inc:890 etc/inc/pkg-utils.inc:1045 +#: etc/inc/pkg-utils.inc:890 etc/inc/pkg-utils.inc:1045 +msgid "Menu items... " +msgstr "" + +#: etc/inc/pkg-utils.inc:834 etc/inc/pkg-utils.inc:870 +#: etc/inc/pkg-utils.inc:871 etc/inc/pkg-utils.inc:906 +#: etc/inc/pkg-utils.inc:906 +msgid "Integrated Tab items... " +msgstr "" + +#: etc/inc/pkg-utils.inc:850 etc/inc/pkg-utils.inc:989 +#: etc/inc/pkg-utils.inc:886 etc/inc/pkg-utils.inc:1026 +#: etc/inc/pkg-utils.inc:887 etc/inc/pkg-utils.inc:1027 +#: etc/inc/pkg-utils.inc:922 etc/inc/pkg-utils.inc:1062 +#: etc/inc/pkg-utils.inc:922 etc/inc/pkg-utils.inc:1062 +msgid "Services... " +msgstr "" + +#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901 +#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937 +#: etc/inc/pkg-utils.inc:937 +msgid "Loading package configuration... failed!" +msgstr "" + +#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901 +#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937 +#: etc/inc/pkg-utils.inc:937 +msgid "Installation aborted." +msgstr "" + +#: etc/inc/pkg-utils.inc:867 etc/inc/pkg-utils.inc:903 +#: etc/inc/pkg-utils.inc:904 etc/inc/pkg-utils.inc:939 +#: etc/inc/pkg-utils.inc:939 +msgid "Unable to load package configuration. Installation aborted." +msgstr "" + +#: etc/inc/pkg-utils.inc:911 etc/inc/pkg-utils.inc:948 +#: etc/inc/pkg-utils.inc:949 etc/inc/pkg-utils.inc:984 +#: etc/inc/pkg-utils.inc:984 +#, php-format +msgid "Starting package deletion for %s..." +msgstr "" + +#: etc/inc/pkg-utils.inc:931 etc/inc/pkg-utils.inc:968 +#: etc/inc/pkg-utils.inc:969 etc/inc/pkg-utils.inc:1004 +#: etc/inc/pkg-utils.inc:1004 +#, php-format +msgid "The %s package is not installed.%sDeletion aborted." +msgstr "" + +#: etc/inc/pkg-utils.inc:942 etc/inc/pkg-utils.inc:979 +#: etc/inc/pkg-utils.inc:980 etc/inc/pkg-utils.inc:1015 +#: etc/inc/pkg-utils.inc:1015 +#, php-format +msgid "Removing %s package... " +msgstr "" + +#: etc/inc/pkg-utils.inc:943 etc/inc/pkg-utils.inc:980 +#: etc/inc/pkg-utils.inc:981 etc/inc/pkg-utils.inc:1016 +#: etc/inc/pkg-utils.inc:1016 +#, php-format +msgid "Removing %s components..." +msgstr "" + +#: etc/inc/pkg-utils.inc:955 etc/inc/pkg-utils.inc:992 +#: etc/inc/pkg-utils.inc:993 etc/inc/pkg-utils.inc:1028 +#: etc/inc/pkg-utils.inc:1028 +msgid "Tabs items... " +msgstr "" + +#: etc/inc/pkg-utils.inc:1059 etc/inc/pkg-utils.inc:1096 +#: etc/inc/pkg-utils.inc:1097 etc/inc/pkg-utils.inc:1132 +#: etc/inc/pkg-utils.inc:1132 +msgid "Deinstall commands... " +msgstr "" + +#: etc/inc/pkg-utils.inc:1069 etc/inc/pkg-utils.inc:1106 +#: etc/inc/pkg-utils.inc:1107 etc/inc/pkg-utils.inc:1142 +#: etc/inc/pkg-utils.inc:1142 +msgid "Removing package instructions..." +msgstr "" + +#: etc/inc/pkg-utils.inc:1071 etc/inc/pkg-utils.inc:1108 +#: etc/inc/pkg-utils.inc:1109 etc/inc/pkg-utils.inc:1144 +#: etc/inc/pkg-utils.inc:1144 +#, php-format +msgid "Remove '%s'" +msgstr "" + +#: etc/inc/pkg-utils.inc:1078 etc/inc/pkg-utils.inc:1115 +#: etc/inc/pkg-utils.inc:1116 etc/inc/pkg-utils.inc:1151 +#: etc/inc/pkg-utils.inc:1151 +msgid "Auxiliary files... " +msgstr "" + +#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1129 +#: etc/inc/pkg-utils.inc:1130 etc/inc/pkg-utils.inc:1165 +#: etc/inc/pkg-utils.inc:1165 +msgid "Package XML... " +msgstr "" + +#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1148 +#: etc/inc/pkg-utils.inc:1149 etc/inc/pkg-utils.inc:1184 +#: etc/inc/pkg-utils.inc:1184 +msgid "Configuration... " +msgstr "" + +#: etc/inc/pkg-utils.inc:1205 etc/inc/pkg-utils.inc:1242 +#: etc/inc/pkg-utils.inc:1243 etc/inc/pkg-utils.inc:1274 +#: etc/inc/pkg-utils.inc:1274 +#, php-format +msgid "" +" >>> Unable to communicate with %1$s. Please verify DNS and interface " +"configuration, and that %2$s has functional Internet connectivity." +msgstr "" + +#: etc/inc/radius.inc:404 etc/inc/radius.inc:406 etc/inc/radius.inc:406 +msgid "Error sending request:" +msgstr "" + +#: etc/inc/radius.inc:410 etc/inc/radius.inc:412 etc/inc/radius.inc:412 +msgid "RADIUS_ACCESS_ACCEPT is unexpected for accounting" +msgstr "" + +#: etc/inc/radius.inc:419 etc/inc/radius.inc:421 etc/inc/radius.inc:421 +msgid "RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication" +msgstr "" + +#: etc/inc/radius.inc:424 etc/inc/radius.inc:426 etc/inc/radius.inc:426 +#, php-format +msgid "Unexpected return value: %s" +msgstr "" + +#: etc/inc/services.inc:262 etc/inc/services.inc:333 etc/inc/services.inc:360 +#: etc/inc/services.inc:369 etc/inc/services.inc:371 etc/inc/services.inc:373 +#, php-format +msgid "DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s" +msgstr "" + +#: etc/inc/services.inc:275 etc/inc/services.inc:346 etc/inc/services.inc:373 +#: etc/inc/services.inc:382 etc/inc/services.inc:387 etc/inc/services.inc:389 +msgid "Starting DHCP service..." +msgstr "" + +#: etc/inc/services.inc:282 etc/inc/services.inc:353 etc/inc/services.inc:380 +#: etc/inc/services.inc:820 etc/inc/services.inc:825 etc/inc/services.inc:877 +#, php-format +msgid "Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s" +msgstr "" + +#: etc/inc/services.inc:353 etc/inc/services.inc:434 etc/inc/services.inc:461 +#: etc/inc/services.inc:463 etc/inc/services.inc:468 etc/inc/services.inc:469 +msgid "Warning! DHCP Failover setup and no CARP virtual IP's defined!" +msgstr "" + +#: etc/inc/services.inc:949 etc/inc/services.inc:1078 +#: etc/inc/services.inc:1210 etc/inc/services.inc:1203 +#: etc/inc/services.inc:1209 etc/inc/services.inc:1261 +msgid "Could not write Igmpproxy configuration file!" +msgstr "" + +#: etc/inc/services.inc:956 +msgid "Started Igmpproxy service successfully." +msgstr "" + +#: etc/inc/services.inc:980 etc/inc/services.inc:1109 +#: etc/inc/services.inc:1241 etc/inc/services.inc:1235 +#: etc/inc/services.inc:1242 etc/inc/services.inc:1294 +msgid "Starting DHCP relay service..." +msgstr "" + +#: etc/inc/services.inc:1096 etc/inc/services.inc:1223 +#: etc/inc/services.inc:1355 etc/inc/services.inc:1350 +#: etc/inc/services.inc:1365 etc/inc/services.inc:1417 +msgid "Starting DHCPv6 relay service..." +msgstr "" + +#: etc/inc/services.inc:1222 etc/inc/services.inc:1358 +#: etc/inc/services.inc:1493 etc/inc/services.inc:1489 +#: etc/inc/services.inc:1505 etc/inc/services.inc:1557 +msgid "Starting DynDNS clients..." +msgstr "" + +#: etc/inc/services.inc:1255 etc/inc/services.inc:1392 +#: etc/inc/services.inc:1531 etc/inc/services.inc:1545 +#: etc/inc/services.inc:1562 etc/inc/services.inc:1622 +msgid "Starting DNS forwarder..." +msgstr "" + +#: etc/inc/services.inc:1324 etc/inc/services.inc:1507 +#: etc/inc/services.inc:1646 etc/inc/services.inc:1623 +#: etc/inc/services.inc:1655 etc/inc/services.inc:1686 +#: etc/inc/services.inc:1750 +msgid "Starting SNMP daemon... " +msgstr "" + +#: etc/inc/services.inc:1329 etc/inc/services.inc:1512 +#: etc/inc/services.inc:1651 etc/inc/services.inc:1628 +#: etc/inc/services.inc:1660 etc/inc/services.inc:1691 +#: etc/inc/services.inc:1755 +#, php-format +msgid "Error: cannot open snmpd.conf in services_snmpd_configure().%s" +msgstr "" + +#: etc/inc/services.inc:1875 etc/inc/services.inc:2067 +#: etc/inc/services.inc:1919 etc/inc/services.inc:1908 +#: etc/inc/services.inc:1948 etc/inc/services.inc:1979 +#: etc/inc/services.inc:2043 +msgid "pfSense specific crontab entries" +msgstr "" + +#: etc/inc/services.inc:1876 etc/inc/services.inc:2068 +#: etc/inc/services.inc:1920 etc/inc/services.inc:1909 +#: etc/inc/services.inc:1949 etc/inc/services.inc:1980 +#: etc/inc/services.inc:2044 +msgid "Created:" +msgstr "" + +#: etc/inc/services.inc:1890 etc/inc/services.inc:2082 +#: etc/inc/services.inc:1934 etc/inc/services.inc:1923 +#: etc/inc/services.inc:1963 etc/inc/services.inc:1994 +#: etc/inc/services.inc:2058 +msgid "If possible do not add items to this file manually." +msgstr "" + +#: etc/inc/services.inc:1891 etc/inc/services.inc:2083 +#: etc/inc/services.inc:1935 etc/inc/services.inc:1924 +#: etc/inc/services.inc:1964 etc/inc/services.inc:1995 +#: etc/inc/services.inc:2059 +msgid "" +"If you do so, this file must be terminated with a blank line (e.g. new line)" +msgstr "" + +#: etc/inc/services.inc:1934 etc/inc/services.inc:2126 +#: etc/inc/services.inc:1978 etc/inc/services.inc:1968 +#: etc/inc/services.inc:2008 etc/inc/services.inc:2039 +#: etc/inc/services.inc:2103 +msgid "Starting UPnP service... " +msgstr "" + +#: etc/inc/services.inc:1969 etc/inc/services.inc:2161 +#: etc/inc/services.inc:2013 etc/inc/services.inc:2005 +#: etc/inc/services.inc:2045 etc/inc/services.inc:2076 +#: etc/inc/services.inc:2140 +#, php-format +msgid "Installed cron job for %s" +msgstr "" + +#: etc/inc/services.inc:1972 etc/inc/services.inc:2164 +#: etc/inc/services.inc:2016 etc/inc/services.inc:2008 +#: etc/inc/services.inc:2048 etc/inc/services.inc:2079 +#: etc/inc/services.inc:2143 +#, php-format +msgid "Updated cron job for %s" +msgstr "" + +#: etc/inc/services.inc:1977 etc/inc/services.inc:2169 +#: etc/inc/services.inc:2021 +#, php-format +msgid "Remvoed cron job for %s" +msgstr "" + +#: etc/inc/shaper.inc:189 etc/inc/shaper.inc:190 etc/inc/shaper.inc:190 +#, php-format +msgid "The field '%s' contains invalid characters." +msgstr "" + +#: etc/inc/shaper.inc:195 etc/inc/shaper.inc:196 etc/inc/shaper.inc:196 +#, php-format +msgid "The field '%s' is required." +msgstr "" + +#: etc/inc/shaper.inc:317 etc/inc/shaper.inc:651 etc/inc/shaper.inc:1544 +#: etc/inc/shaper.inc:1850 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2327 +#: etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2593 etc/inc/shaper.inc:2787 +#: etc/inc/shaper.inc:3023 usr/local/www/interfaces_ppps_edit.php:750 +#: etc/inc/shaper.inc:318 etc/inc/shaper.inc:652 etc/inc/shaper.inc:1546 +#: etc/inc/shaper.inc:1852 etc/inc/shaper.inc:2194 etc/inc/shaper.inc:2329 +#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2595 etc/inc/shaper.inc:2789 +#: etc/inc/shaper.inc:3031 etc/inc/shaper.inc:3161 +#: usr/local/www/interfaces_ppps_edit.php:751 +#: usr/local/www/interfaces_ppps_edit.php:757 +#: usr/local/www/status_queues.php:151 etc/inc/shaper.inc:1547 +#: etc/inc/shaper.inc:1853 etc/inc/shaper.inc:2195 etc/inc/shaper.inc:2330 +#: etc/inc/shaper.inc:2470 etc/inc/shaper.inc:2596 etc/inc/shaper.inc:2790 +#: etc/inc/shaper.inc:3162 etc/inc/shaper.inc:654 etc/inc/shaper.inc:1550 +#: etc/inc/shaper.inc:1858 etc/inc/shaper.inc:2200 etc/inc/shaper.inc:2335 +#: etc/inc/shaper.inc:2475 etc/inc/shaper.inc:2601 etc/inc/shaper.inc:2795 +#: etc/inc/shaper.inc:3169 usr/local/www/interfaces_ppps_edit.php:754 +#: etc/inc/shaper.inc:321 etc/inc/shaper.inc:678 etc/inc/shaper.inc:1601 +#: etc/inc/shaper.inc:1916 etc/inc/shaper.inc:2258 etc/inc/shaper.inc:2398 +#: etc/inc/shaper.inc:2538 etc/inc/shaper.inc:2669 etc/inc/shaper.inc:2863 +#: etc/inc/shaper.inc:3237 usr/local/www/interfaces_ppps_edit.php:754 +#: usr/local/www/status_queues.php:151 etc/inc/shaper.inc:321 +#: etc/inc/shaper.inc:678 etc/inc/shaper.inc:1601 etc/inc/shaper.inc:1916 +#: etc/inc/shaper.inc:2258 etc/inc/shaper.inc:2398 etc/inc/shaper.inc:2538 +#: etc/inc/shaper.inc:2669 etc/inc/shaper.inc:2882 etc/inc/shaper.inc:3293 +msgid "Bandwidth" +msgstr "" + +#: etc/inc/shaper.inc:319 etc/inc/shaper.inc:1546 etc/inc/shaper.inc:2194 +#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2789 etc/inc/shaper.inc:320 +#: etc/inc/shaper.inc:1548 etc/inc/shaper.inc:2196 etc/inc/shaper.inc:2471 +#: etc/inc/shaper.inc:2791 etc/inc/shaper.inc:1549 etc/inc/shaper.inc:2197 +#: etc/inc/shaper.inc:2472 etc/inc/shaper.inc:2792 etc/inc/shaper.inc:1552 +#: etc/inc/shaper.inc:2202 etc/inc/shaper.inc:2477 etc/inc/shaper.inc:2797 +#: etc/inc/shaper.inc:323 etc/inc/shaper.inc:1603 etc/inc/shaper.inc:2260 +#: etc/inc/shaper.inc:2540 etc/inc/shaper.inc:2865 etc/inc/shaper.inc:323 +#: etc/inc/shaper.inc:1603 etc/inc/shaper.inc:2260 etc/inc/shaper.inc:2540 +#: etc/inc/shaper.inc:2884 +msgid "Bandwidthtype" +msgstr "" + +#: etc/inc/shaper.inc:324 etc/inc/shaper.inc:1552 etc/inc/shaper.inc:2199 +#: etc/inc/shaper.inc:2474 etc/inc/shaper.inc:2900 etc/inc/shaper.inc:325 +#: etc/inc/shaper.inc:1554 etc/inc/shaper.inc:2201 etc/inc/shaper.inc:2476 +#: etc/inc/shaper.inc:2904 etc/inc/shaper.inc:1555 etc/inc/shaper.inc:2202 +#: etc/inc/shaper.inc:2477 etc/inc/shaper.inc:1558 etc/inc/shaper.inc:2207 +#: etc/inc/shaper.inc:2482 etc/inc/shaper.inc:328 etc/inc/shaper.inc:1609 +#: etc/inc/shaper.inc:2265 etc/inc/shaper.inc:2545 etc/inc/shaper.inc:328 +#: etc/inc/shaper.inc:1609 etc/inc/shaper.inc:2265 etc/inc/shaper.inc:2545 +msgid "Bandwidth must be an integer." +msgstr "" + +#: etc/inc/shaper.inc:326 etc/inc/shaper.inc:1555 etc/inc/shaper.inc:2203 +#: etc/inc/shaper.inc:2478 etc/inc/shaper.inc:327 etc/inc/shaper.inc:1557 +#: etc/inc/shaper.inc:2205 etc/inc/shaper.inc:2480 etc/inc/shaper.inc:1558 +#: etc/inc/shaper.inc:2206 etc/inc/shaper.inc:2481 etc/inc/shaper.inc:1561 +#: etc/inc/shaper.inc:2211 etc/inc/shaper.inc:2486 etc/inc/shaper.inc:330 +#: etc/inc/shaper.inc:1612 etc/inc/shaper.inc:2269 etc/inc/shaper.inc:2549 +#: etc/inc/shaper.inc:330 etc/inc/shaper.inc:1612 etc/inc/shaper.inc:2269 +#: etc/inc/shaper.inc:2549 +msgid "Bandwidth cannot be negative." +msgstr "" + +#: etc/inc/shaper.inc:328 etc/inc/shaper.inc:329 etc/inc/shaper.inc:332 +#: etc/inc/shaper.inc:332 +msgid "Qlimit must be an integer." +msgstr "" + +#: etc/inc/shaper.inc:330 etc/inc/shaper.inc:331 etc/inc/shaper.inc:334 +#: etc/inc/shaper.inc:334 +msgid "Qlimit must be an positive." +msgstr "" + +#: etc/inc/shaper.inc:332 etc/inc/shaper.inc:333 etc/inc/shaper.inc:336 +#: etc/inc/shaper.inc:336 +msgid "Tbrsize must be an integer." +msgstr "" + +#: etc/inc/shaper.inc:334 etc/inc/shaper.inc:335 etc/inc/shaper.inc:338 +#: etc/inc/shaper.inc:338 +msgid "Tbrsize must be an positive." +msgstr "" + +#: etc/inc/shaper.inc:614 etc/inc/shaper.inc:1120 etc/inc/shaper.inc:3269 +#: etc/inc/shaper.inc:3488 etc/inc/shaper.inc:615 etc/inc/shaper.inc:1121 +#: etc/inc/shaper.inc:3277 etc/inc/shaper.inc:3500 etc/inc/shaper.inc:3432 +#: etc/inc/shaper.inc:3655 etc/inc/shaper.inc:1122 etc/inc/shaper.inc:3433 +#: etc/inc/shaper.inc:3656 etc/inc/shaper.inc:617 etc/inc/shaper.inc:1126 +#: etc/inc/shaper.inc:3440 etc/inc/shaper.inc:3663 etc/inc/shaper.inc:637 +#: etc/inc/shaper.inc:1169 etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3731 +#: etc/inc/shaper.inc:637 etc/inc/shaper.inc:1169 etc/inc/shaper.inc:3589 +#: etc/inc/shaper.inc:3836 +msgid "Enable/Disable" +msgstr "" + +#: etc/inc/shaper.inc:619 etc/inc/shaper.inc:620 etc/inc/shaper.inc:622 +#: etc/inc/shaper.inc:642 etc/inc/shaper.inc:642 +msgid "Enable/disable discipline and its children" +msgstr "" + +#: etc/inc/shaper.inc:621 etc/inc/shaper.inc:965 etc/inc/shaper.inc:2791 +#: etc/inc/shaper.inc:3016 etc/inc/shaper.inc:3276 etc/inc/shaper.inc:3496 +#: etc/inc/shaper.inc:3568 usr/local/www/load_balancer_virtual_server.php:128 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/load_balancer_relay_action.php:140 +#: usr/local/www/interfaces_groups.php:94 +#: usr/local/www/firewall_aliases.php:165 +#: usr/local/www/firewall_aliases_edit.php:134 +#: usr/local/www/firewall_aliases_edit.php:576 +#: usr/local/www/firewall_schedule.php:96 +#: usr/local/www/load_balancer_pool.php:131 +#: usr/local/www/load_balancer_monitor.php:122 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:235 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:181 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:183 +#: usr/local/www/services_captiveportal_filemanager.php:162 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:411 +#: usr/local/www/load_balancer_relay_protocol.php:134 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:195 +#: usr/local/www/services_igmpproxy.php:95 +#: usr/local/www/status_gateways.php:72 usr/local/www/status_lb_pool.php:130 +#: usr/local/www/status_lb_vs.php:77 usr/local/www/status_openvpn.php:211 +#: usr/local/www/status_openvpn.php:262 usr/local/www/system_camanager.php:565 +#: usr/local/www/system_certmanager.php:854 +#: usr/local/www/system_crlmanager.php:487 +#: usr/local/www/system_gateways.php:152 +#: usr/local/www/system_gateways_edit.php:98 +#: usr/local/www/system_gateways_edit.php:370 +#: usr/local/www/system_groupmanager.php:346 +#: usr/local/www/system_usermanager.php:577 +#: usr/local/www/system_usermanager.php:630 etc/inc/shaper.inc:622 +#: etc/inc/shaper.inc:966 etc/inc/shaper.inc:2793 etc/inc/shaper.inc:3020 +#: etc/inc/shaper.inc:3284 etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3580 +#: usr/local/www/pkg_mgr.php:129 usr/local/www/system_certmanager.php:1020 +#: usr/local/www/load_balancer_relay_action_edit.php:410 +#: usr/local/www/system_usermanager.php:575 +#: usr/local/www/system_usermanager.php:628 +#: usr/local/www/firewall_aliases_edit.php:581 +#: usr/local/www/pkg_mgr_installed.php:111 +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/system_gateways_edit.php:99 +#: usr/local/www/system_gateways_edit.php:391 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/load_balancer_virtual_server_edit.php:157 +#: usr/local/www/firewall_aliases.php:168 +#: usr/local/www/system_camanager.php:566 +#: usr/local/www/load_balancer_pool_edit.php:189 +#: usr/local/www/load_balancer_pool.php:132 etc/inc/shaper.inc:3150 +#: etc/inc/shaper.inc:3439 etc/inc/shaper.inc:3663 etc/inc/shaper.inc:3735 +#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265 +#: usr/local/www/load_balancer_relay_protocol_edit.php:193 +#: usr/local/www/interfaces_groups.php:95 +#: usr/local/www/load_balancer_relay_action_edit.php:408 +#: usr/local/www/load_balancer_monitor_edit.php:233 +#: usr/local/www/system_crlmanager.php:520 +#: usr/local/www/firewall_aliases_edit.php:584 +#: usr/local/www/load_balancer_virtual_server.php:127 +#: usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:497 +#: usr/local/www/status_gateways.php:73 +#: usr/local/www/services_captiveportal_filemanager.php:159 +#: usr/local/www/load_balancer_monitor.php:121 +#: usr/local/www/load_balancer_relay_protocol.php:132 +#: usr/local/www/load_balancer_virtual_server_edit.php:155 +#: usr/local/www/firewall_aliases.php:188 +#: usr/local/www/load_balancer_relay_action.php:138 +#: usr/local/www/load_balancer_pool_edit.php:187 +#: usr/local/www/load_balancer_pool.php:130 +#: usr/local/www/system_gateways_edit.php:499 +#: usr/local/www/system_camanager.php:590 usr/local/www/status_openvpn.php:313 +#: usr/local/www/system_certmanager.php:1062 etc/inc/shaper.inc:2794 +#: etc/inc/shaper.inc:3151 etc/inc/shaper.inc:3440 etc/inc/shaper.inc:3664 +#: etc/inc/shaper.inc:3736 usr/local/www/system_gateways_edit.php:501 +#: usr/local/www/status_openvpn.php:272 usr/local/www/status_openvpn.php:333 +#: usr/local/www/pkg_mgr_installed.php:113 +#: usr/local/www/system_certmanager.php:1066 usr/local/www/pkg_mgr.php:132 +#: usr/local/www/firewall_aliases_edit.php:128 +#: usr/local/www/firewall_aliases_edit.php:615 etc/inc/shaper.inc:624 +#: etc/inc/shaper.inc:970 etc/inc/shaper.inc:2799 etc/inc/shaper.inc:3158 +#: etc/inc/shaper.inc:3447 etc/inc/shaper.inc:3671 etc/inc/shaper.inc:3743 +#: usr/local/www/system_gateways_edit.php:531 etc/inc/shaper.inc:644 +#: etc/inc/shaper.inc:1002 etc/inc/shaper.inc:2867 etc/inc/shaper.inc:3226 +#: etc/inc/shaper.inc:3515 etc/inc/shaper.inc:3739 etc/inc/shaper.inc:3811 +#: usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:531 +#: usr/local/www/system_camanager.php:590 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:193 +#: usr/local/www/system_groupmanager.php:346 +#: usr/local/www/firewall_schedule.php:96 usr/local/www/status_openvpn.php:272 +#: usr/local/www/status_openvpn.php:333 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:155 +#: usr/local/www/firewall_aliases.php:188 +#: usr/local/www/load_balancer_relay_protocol.php:132 +#: usr/local/www/pkg_mgr_installed.php:113 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/load_balancer_relay_action.php:138 +#: usr/local/www/system_certmanager.php:1066 +#: usr/local/www/status_lb_pool.php:130 usr/local/www/interfaces_groups.php:95 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:408 +#: usr/local/www/pkg_mgr.php:177 usr/local/www/system_crlmanager.php:520 +#: usr/local/www/load_balancer_pool.php:130 +#: usr/local/www/services_captiveportal_filemanager.php:159 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:233 +#: usr/local/www/firewall_aliases_edit.php:128 +#: usr/local/www/firewall_aliases_edit.php:601 +#: usr/local/www/services_igmpproxy.php:95 +#: usr/local/www/widgets/widgets/system_information.widget.php:88 +#: usr/local/www/load_balancer_monitor.php:121 +#: usr/local/www/system_usermanager.php:575 +#: usr/local/www/system_usermanager.php:628 +#: usr/local/www/system_gateways.php:152 +#: usr/local/www/load_balancer_virtual_server.php:127 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:187 +#: usr/local/www/status_lb_vs.php:77 usr/local/www/status_gateways.php:73 +#: etc/inc/shaper.inc:644 etc/inc/shaper.inc:1002 etc/inc/shaper.inc:2886 +#: etc/inc/shaper.inc:3282 etc/inc/shaper.inc:3596 etc/inc/shaper.inc:3844 +#: etc/inc/shaper.inc:3916 +msgid "Name" +msgstr "" + +#: etc/inc/shaper.inc:625 etc/inc/shaper.inc:626 etc/inc/shaper.inc:628 +#: etc/inc/shaper.inc:648 etc/inc/shaper.inc:648 +msgid "Scheduler Type " +msgstr "" + +#: etc/inc/shaper.inc:647 etc/inc/shaper.inc:648 etc/inc/shaper.inc:650 +#: etc/inc/shaper.inc:674 etc/inc/shaper.inc:674 +msgid "NOTE: Changing this changes all child queues!" +msgstr "" + +#: etc/inc/shaper.inc:648 etc/inc/shaper.inc:649 etc/inc/shaper.inc:651 +#: etc/inc/shaper.inc:675 etc/inc/shaper.inc:675 +msgid " Beware you can lose information." +msgstr "" + +#: etc/inc/shaper.inc:686 etc/inc/shaper.inc:687 etc/inc/shaper.inc:689 +#: etc/inc/shaper.inc:713 etc/inc/shaper.inc:713 +msgid "" +"Adjusts the size, in bytes, of the token bucket regulator. If not specified, " +"heuristics based on the interface bandwidth are used to determine the size." +msgstr "" + +#: etc/inc/shaper.inc:978 etc/inc/shaper.inc:979 etc/inc/shaper.inc:983 +#: etc/inc/shaper.inc:1015 etc/inc/shaper.inc:1015 +msgid "The priority must be an integer between 1 and 15." +msgstr "" + +#: etc/inc/shaper.inc:981 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:982 +#: etc/inc/shaper.inc:2804 etc/inc/shaper.inc:2805 etc/inc/shaper.inc:986 +#: etc/inc/shaper.inc:2810 etc/inc/shaper.inc:1018 etc/inc/shaper.inc:2878 +#: etc/inc/shaper.inc:1018 etc/inc/shaper.inc:2897 +msgid "Queue limit must be an integer" +msgstr "" + +#: etc/inc/shaper.inc:983 etc/inc/shaper.inc:984 etc/inc/shaper.inc:988 +#: etc/inc/shaper.inc:1020 etc/inc/shaper.inc:1020 +msgid "Queue limit must be positive" +msgstr "" + +#: etc/inc/shaper.inc:985 etc/inc/shaper.inc:987 etc/inc/shaper.inc:2804 +#: etc/inc/shaper.inc:2806 etc/inc/shaper.inc:3573 etc/inc/shaper.inc:986 +#: etc/inc/shaper.inc:988 etc/inc/shaper.inc:2808 etc/inc/shaper.inc:3585 +#: etc/inc/shaper.inc:3740 etc/inc/shaper.inc:2807 etc/inc/shaper.inc:2809 +#: etc/inc/shaper.inc:3741 etc/inc/shaper.inc:990 etc/inc/shaper.inc:992 +#: etc/inc/shaper.inc:2812 etc/inc/shaper.inc:2814 etc/inc/shaper.inc:3748 +#: etc/inc/shaper.inc:1022 etc/inc/shaper.inc:1024 etc/inc/shaper.inc:2880 +#: etc/inc/shaper.inc:2882 etc/inc/shaper.inc:3816 etc/inc/shaper.inc:1022 +#: etc/inc/shaper.inc:1024 etc/inc/shaper.inc:2899 etc/inc/shaper.inc:2901 +#: etc/inc/shaper.inc:3921 +msgid "Queue names must be alphanumeric and _ or - only." +msgstr "" + +#: etc/inc/shaper.inc:989 etc/inc/shaper.inc:990 etc/inc/shaper.inc:991 +#: etc/inc/shaper.inc:995 etc/inc/shaper.inc:1027 etc/inc/shaper.inc:1027 +msgid "Only one default queue per interface is allowed." +msgstr "" + +#: etc/inc/shaper.inc:1125 etc/inc/shaper.inc:1126 etc/inc/shaper.inc:1127 +#: etc/inc/shaper.inc:1131 etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1174 +msgid "Enable/Disable queue and its children" +msgstr "" + +#: etc/inc/shaper.inc:1129 etc/inc/shaper.inc:1130 etc/inc/shaper.inc:1131 +#: etc/inc/shaper.inc:1135 etc/inc/shaper.inc:1178 etc/inc/shaper.inc:1178 +msgid "Queue Name" +msgstr "" + +#: etc/inc/shaper.inc:1136 etc/inc/shaper.inc:1137 etc/inc/shaper.inc:1138 +#: etc/inc/shaper.inc:1142 etc/inc/shaper.inc:1185 etc/inc/shaper.inc:1185 +msgid "" +"Enter the name of the queue here. Do not use spaces and limit the size to " +"15 characters." +msgstr "" + +#: etc/inc/shaper.inc:1139 usr/local/www/interfaces_bridge_edit.php:354 +#: usr/local/www/interfaces_bridge_edit.php:373 +#: usr/local/www/system_gateway_groups.php:122 etc/inc/shaper.inc:1140 +#: usr/local/www/interfaces_bridge_edit.php:363 +#: usr/local/www/interfaces_bridge_edit.php:382 +#: usr/local/www/system_gateway_groups.php:123 +#: usr/local/www/interfaces_bridge_edit.php:364 +#: usr/local/www/interfaces_bridge_edit.php:383 +#: usr/local/www/interfaces_bridge_edit.php:365 +#: usr/local/www/interfaces_bridge_edit.php:384 etc/inc/shaper.inc:1141 +#: usr/local/www/system_gateway_groups.php:132 etc/inc/shaper.inc:1145 +#: usr/local/www/interfaces_bridge_edit.php:367 +#: usr/local/www/interfaces_bridge_edit.php:386 etc/inc/shaper.inc:1188 +#: usr/local/www/interfaces_bridge_edit.php:367 +#: usr/local/www/interfaces_bridge_edit.php:386 +#: usr/local/www/system_gateway_groups.php:132 etc/inc/shaper.inc:1188 +msgid "Priority" +msgstr "" + +#: etc/inc/shaper.inc:1143 etc/inc/shaper.inc:1144 etc/inc/shaper.inc:1145 +#: etc/inc/shaper.inc:1149 etc/inc/shaper.inc:1192 etc/inc/shaper.inc:1192 +msgid "" +"For hfsc, the range is 0 to 7. The default is 1. Hfsc queues with a higher " +"priority are preferred in the case of overload." +msgstr "" + +#: etc/inc/shaper.inc:1146 etc/inc/shaper.inc:1147 etc/inc/shaper.inc:1148 +#: etc/inc/shaper.inc:1152 etc/inc/shaper.inc:1195 etc/inc/shaper.inc:1195 +msgid "Queue limit" +msgstr "" + +#: etc/inc/shaper.inc:1150 etc/inc/shaper.inc:1151 etc/inc/shaper.inc:1152 +#: etc/inc/shaper.inc:1156 etc/inc/shaper.inc:1199 etc/inc/shaper.inc:1199 +msgid "Queue limit in packets per second." +msgstr "" + +#: etc/inc/shaper.inc:1153 etc/inc/shaper.inc:1154 etc/inc/shaper.inc:1155 +#: etc/inc/shaper.inc:1159 etc/inc/shaper.inc:1202 etc/inc/shaper.inc:1202 +msgid "Scheduler options" +msgstr "" + +#: etc/inc/shaper.inc:1158 etc/inc/shaper.inc:1161 etc/inc/shaper.inc:1159 +#: etc/inc/shaper.inc:1162 etc/inc/shaper.inc:1160 etc/inc/shaper.inc:1163 +#: etc/inc/shaper.inc:1164 etc/inc/shaper.inc:1167 etc/inc/shaper.inc:1207 +#: etc/inc/shaper.inc:1210 etc/inc/shaper.inc:1207 etc/inc/shaper.inc:1210 +msgid "Default queue" +msgstr "" + +#: etc/inc/shaper.inc:1168 etc/inc/shaper.inc:1169 etc/inc/shaper.inc:1170 +#: etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1217 etc/inc/shaper.inc:1217 +msgid "Random Early Detection" +msgstr "" + +#: etc/inc/shaper.inc:1173 etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1175 +#: etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1222 etc/inc/shaper.inc:1222 +msgid "Random Early Detection In and Out" +msgstr "" + +#: etc/inc/shaper.inc:1178 etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180 +#: etc/inc/shaper.inc:1184 etc/inc/shaper.inc:1227 etc/inc/shaper.inc:1227 +msgid "Explicit Congestion Notification" +msgstr "" + +#: etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180 etc/inc/shaper.inc:1181 +#: etc/inc/shaper.inc:1185 etc/inc/shaper.inc:1233 etc/inc/shaper.inc:1233 +msgid "Select options for this queue" +msgstr "" + +#: etc/inc/shaper.inc:1181 etc/inc/shaper.inc:3069 etc/inc/shaper.inc:3501 +#: usr/local/www/load_balancer_virtual_server.php:134 +#: usr/local/www/pkg_mgr_installed.php:94 +#: usr/local/www/firewall_aliases_import.php:140 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:121 +#: usr/local/www/firewall_virtual_ip_edit.php:538 +#: usr/local/www/load_balancer_relay_action.php:143 +#: usr/local/www/services_dyndns.php:103 usr/local/www/services_wol.php:163 +#: usr/local/www/services_wol_edit.php:148 +#: usr/local/www/interfaces_bridge.php:109 +#: usr/local/www/interfaces_bridge_edit.php:273 +#: usr/local/www/interfaces_gif.php:108 +#: usr/local/www/interfaces_gif_edit.php:208 +#: usr/local/www/interfaces_gre.php:109 +#: usr/local/www/interfaces_gre_edit.php:219 +#: usr/local/www/interfaces_groups.php:96 +#: usr/local/www/interfaces_groups_edit.php:259 +#: usr/local/www/firewall_aliases.php:167 +#: usr/local/www/firewall_aliases_edit.php:455 +#: usr/local/www/firewall_aliases_edit.php:591 +#: usr/local/www/firewall_aliases_edit.php:626 +#: usr/local/www/firewall_nat_1to1.php:108 +#: usr/local/www/firewall_nat_1to1_edit.php:440 +#: usr/local/www/firewall_nat_edit.php:769 +#: usr/local/www/firewall_nat_out.php:349 +#: usr/local/www/firewall_nat_out_edit.php:636 +#: usr/local/www/firewall_rules.php:374 +#: usr/local/www/firewall_rules_edit.php:1053 +#: usr/local/www/firewall_schedule.php:98 +#: usr/local/www/firewall_schedule_edit.php:793 +#: usr/local/www/firewall_schedule_edit.php:998 +#: usr/local/www/firewall_virtual_ip.php:187 usr/local/www/interfaces.php:1244 +#: usr/local/www/load_balancer_pool.php:136 +#: usr/local/www/interfaces_vlan.php:110 +#: usr/local/www/interfaces_vlan_edit.php:179 +#: usr/local/www/system_routes.php:129 +#: usr/local/www/system_routes_edit.php:267 +#: usr/local/www/interfaces_lagg.php:114 +#: usr/local/www/interfaces_lagg_edit.php:208 +#: usr/local/www/interfaces_ppps.php:110 +#: usr/local/www/interfaces_ppps_edit.php:467 +#: usr/local/www/interfaces_qinq.php:119 +#: usr/local/www/interfaces_qinq_edit.php:337 +#: usr/local/www/interfaces_wireless.php:108 +#: usr/local/www/interfaces_wireless_edit.php:185 +#: usr/local/www/load_balancer_monitor.php:124 usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:241 +#: usr/local/www/load_balancer_pool_edit.php:196 +#: usr/local/www/load_balancer_virtual_server_edit.php:189 +#: usr/local/www/pkg_mgr.php:118 usr/local/www/firewall_nat.php:203 +#: usr/local/www/diag_ipsec.php:95 +#: usr/local/www/services_captiveportal_ip.php:118 +#: usr/local/www/services_captiveportal_ip_edit.php:208 +#: usr/local/www/services_captiveportal_mac.php:168 +#: usr/local/www/services_captiveportal_mac_edit.php:182 +#: usr/local/www/services_dhcp.php:893 +#: usr/local/www/services_dhcp_edit.php:242 +#: usr/local/www/services_dnsmasq.php:246 +#: usr/local/www/services_dnsmasq.php:313 +#: usr/local/www/services_dnsmasq_edit.php:163 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:417 +#: usr/local/www/load_balancer_relay_protocol.php:137 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:218 +#: usr/local/www/services_captiveportal_hostname.php:123 +#: usr/local/www/services_captiveportal_hostname_edit.php:183 +#: usr/local/www/status_services.php:245 usr/local/www/status_upnp.php:88 +#: usr/local/www/services_dyndns_edit.php:228 +#: usr/local/www/services_igmpproxy.php:98 +#: usr/local/www/services_igmpproxy_edit.php:175 +#: usr/local/www/services_rfc2136.php:80 +#: usr/local/www/services_rfc2136_edit.php:192 +#: usr/local/www/status_gateway_groups.php:76 +#: usr/local/www/status_gateways.php:78 usr/local/www/status_lb_pool.php:134 +#: usr/local/www/status_lb_vs.php:81 +#: usr/local/www/system_advanced_sysctl.php:172 +#: usr/local/www/system_advanced_sysctl.php:243 +#: usr/local/www/system_gateway_groups.php:123 +#: usr/local/www/system_gateway_groups_edit.php:219 +#: usr/local/www/system_gateways.php:156 +#: usr/local/www/system_gateways_edit.php:484 +#: usr/local/www/system_groupmanager.php:275 +#: usr/local/www/system_groupmanager.php:347 +#: usr/local/www/system_groupmanager.php:405 +#: usr/local/www/system_groupmanager_addprivs.php:216 +#: usr/local/www/system_usermanager.php:578 +#: usr/local/www/system_usermanager_addprivs.php:197 +#: usr/local/www/vpn_ipsec_phase1.php:575 +#: usr/local/www/vpn_ipsec_phase2.php:497 +#: usr/local/www/vpn_openvpn_client.php:573 +#: usr/local/www/vpn_openvpn_client.php:863 +#: usr/local/www/vpn_openvpn_csc.php:342 usr/local/www/vpn_openvpn_csc.php:674 +#: usr/local/www/vpn_openvpn_server.php:722 +#: usr/local/www/vpn_openvpn_server.php:1451 +#: usr/local/www/vpn_pppoe_edit.php:444 usr/local/www/firewall_nat_npt.php:107 +#: usr/local/www/firewall_nat_npt_edit.php:261 +#: usr/local/www/services_dhcpv6.php:806 +#: usr/local/www/services_dhcpv6_edit.php:219 +#: usr/local/www/services_captiveportal_zones.php:55 +#: usr/local/www/services_captiveportal_zones_edit.php:106 +#: etc/inc/shaper.inc:1182 etc/inc/shaper.inc:3077 etc/inc/shaper.inc:3513 +#: usr/local/www/system_routes_edit.php:307 usr/local/www/pkg_mgr.php:132 +#: usr/local/www/services_unbound_acls.php:238 +#: usr/local/www/services_unbound_acls.php:292 +#: usr/local/www/services_unbound_acls.php:319 +#: usr/local/www/system_gateway_groups_edit.php:274 +#: usr/local/www/services_dnsmasq.php:334 +#: usr/local/www/services_dyndns_edit.php:358 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/services_dnsmasq_edit.php:218 +#: usr/local/www/services_dnsmasq_edit.php:239 +#: usr/local/www/firewall_nat_1to1_edit.php:447 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/firewall_nat_npt_edit.php:266 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/diag_ipsec.php:106 +#: usr/local/www/load_balancer_relay_action_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/services_unbound.php:282 +#: usr/local/www/services_unbound.php:349 +#: usr/local/www/system_usermanager.php:576 +#: usr/local/www/services_igmpproxy_edit.php:177 +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:596 +#: usr/local/www/firewall_aliases_edit.php:631 +#: usr/local/www/pkg_mgr_installed.php:114 +#: usr/local/www/firewall_rules.php:378 +#: usr/local/www/load_balancer_virtual_server.php:135 +#: usr/local/www/system_groupmanager_addprivs.php:214 +#: usr/local/www/system_gateways_edit.php:519 +#: usr/local/www/load_balancer_monitor.php:125 +#: usr/local/www/services_dyndns.php:112 +#: usr/local/www/vpn_openvpn_server.php:795 +#: usr/local/www/vpn_openvpn_server.php:1593 +#: usr/local/www/services_dhcp.php:931 +#: usr/local/www/load_balancer_virtual_server_edit.php:163 +#: usr/local/www/interfaces_bridge_edit.php:282 +#: usr/local/www/firewall_aliases.php:170 +#: usr/local/www/vpn_ipsec_phase2.php:523 +#: usr/local/www/firewall_nat_edit.php:776 +#: usr/local/www/services_dhcp_edit.php:251 usr/local/www/interfaces.php:1348 +#: usr/local/www/vpn_openvpn_client.php:578 +#: usr/local/www/vpn_openvpn_client.php:868 +#: usr/local/www/load_balancer_pool_edit.php:204 +#: usr/local/www/firewall_virtual_ip_edit.php:526 +#: usr/local/www/interfaces_gre_edit.php:218 +#: usr/local/www/load_balancer_pool.php:137 +#: usr/local/www/vpn_ipsec_phase1.php:588 +#: usr/local/www/services_dhcpv6.php:901 etc/inc/shaper.inc:3225 +#: etc/inc/shaper.inc:3668 usr/local/www/vpn_pppoe_edit.php:445 +#: usr/local/www/system_routes_edit.php:308 +#: usr/local/www/system_gateway_groups_edit.php:334 +#: usr/local/www/interfaces_vlan_edit.php:180 +#: usr/local/www/services_dnsmasq.php:247 +#: usr/local/www/services_dnsmasq.php:335 +#: usr/local/www/firewall_nat_out.php:360 +#: usr/local/www/system_groupmanager.php:406 +#: usr/local/www/services_dnsmasq_edit.php:219 +#: usr/local/www/services_dnsmasq_edit.php:240 +#: usr/local/www/load_balancer_relay_protocol_edit.php:216 +#: usr/local/www/firewall_nat_1to1_edit.php:445 +#: usr/local/www/services_dhcpv6_edit.php:230 +#: usr/local/www/services_captiveportal_ip.php:116 +#: usr/local/www/firewall_nat_npt_edit.php:265 usr/local/www/vpn_pppoe.php:105 +#: usr/local/www/interfaces_groups.php:97 +#: usr/local/www/services_captiveportal_hostname_edit.php:181 +#: usr/local/www/interfaces_qinq_edit.php:338 +#: usr/local/www/interfaces_gif_edit.php:209 usr/local/www/diag_ipsec.php:107 +#: usr/local/www/firewall_nat.php:208 usr/local/www/interfaces_qinq.php:120 +#: usr/local/www/load_balancer_relay_action_edit.php:414 +#: usr/local/www/interfaces_ppps.php:111 +#: usr/local/www/load_balancer_monitor_edit.php:239 +#: usr/local/www/services_captiveportal_mac.php:166 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151 +#: usr/local/www/services_captiveportal_mac_edit.php:180 +#: usr/local/www/firewall_schedule_edit.php:792 +#: usr/local/www/firewall_schedule_edit.php:997 +#: usr/local/www/interfaces_bridge.php:110 +#: usr/local/www/interfaces_ppps_edit.php:468 +#: usr/local/www/interfaces_lagg.php:115 +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/firewall_aliases_edit.php:599 +#: usr/local/www/firewall_aliases_edit.php:634 +#: usr/local/www/interfaces_lagg_edit.php:209 +#: usr/local/www/vpn_openvpn_csc.php:341 usr/local/www/vpn_openvpn_csc.php:673 +#: usr/local/www/services_captiveportal_hostname.php:121 +#: usr/local/www/firewall_rules.php:371 usr/local/www/interfaces_gre.php:110 +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/interfaces_wireless.php:109 +#: usr/local/www/system_gateway_groups.php:124 +#: usr/local/www/status_services.php:241 +#: usr/local/www/system_gateways_edit.php:619 +#: usr/local/www/status_gateways.php:79 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/services_captiveportal_ip_edit.php:206 +#: usr/local/www/load_balancer_relay_protocol.php:135 +#: usr/local/www/vpn_openvpn_server.php:823 +#: usr/local/www/vpn_openvpn_server.php:1634 usr/local/www/status_upnp.php:89 +#: usr/local/www/services_dhcp.php:1135 +#: usr/local/www/load_balancer_virtual_server_edit.php:161 +#: usr/local/www/interfaces_bridge_edit.php:283 +#: usr/local/www/firewall_aliases.php:190 +#: usr/local/www/load_balancer_relay_action.php:141 +#: usr/local/www/interfaces_groups_edit.php:260 +#: usr/local/www/services_captiveportal_zones_edit.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:625 +#: usr/local/www/interfaces_vlan.php:111 +#: usr/local/www/firewall_nat_edit.php:775 +#: usr/local/www/services_dhcp_edit.php:253 usr/local/www/interfaces.php:1336 +#: usr/local/www/services_captiveportal_zones.php:56 +#: usr/local/www/vpn_openvpn_client.php:596 +#: usr/local/www/vpn_openvpn_client.php:921 +#: usr/local/www/status_gateway_groups.php:77 +#: usr/local/www/load_balancer_pool_edit.php:202 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/interfaces_gif.php:109 +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/firewall_virtual_ip.php:191 +#: usr/local/www/vpn_ipsec_phase1.php:587 +#: usr/local/www/services_dhcpv6.php:832 usr/local/www/services_rfc2136.php:81 +#: usr/local/www/status_services.php:239 +#: usr/local/www/system_gateways_edit.php:623 +#: usr/local/www/services_captiveportal_ip_edit.php:200 +#: usr/local/www/vpn_pppoe.php:106 +#: usr/local/www/interfaces_wireless_edit.php:187 +#: usr/local/www/services_captiveportal_zones_edit.php:105 +#: usr/local/www/vpn_openvpn_client.php:615 +#: usr/local/www/vpn_openvpn_client.php:940 +#: usr/local/www/services_dhcpv6_edit.php:233 +#: usr/local/www/services_dyndns_edit.php:362 +#: usr/local/www/firewall_rules_edit.php:1103 +#: usr/local/www/interfaces_qinq.php:123 +#: usr/local/www/interfaces_vlan_edit.php:183 +#: usr/local/www/interfaces_ppps_edit.php:474 +#: usr/local/www/firewall_virtual_ip.php:205 +#: usr/local/www/interfaces_lagg_edit.php:222 +#: usr/local/www/firewall_nat_edit.php:770 +#: usr/local/www/interfaces_lagg.php:119 usr/local/www/interfaces_vlan.php:117 +#: usr/local/www/interfaces_gif_edit.php:220 +#: usr/local/www/services_dhcp_edit.php:381 +#: usr/local/www/firewall_virtual_ip_edit.php:463 +#: usr/local/www/diag_ipsec.php:109 usr/local/www/interfaces_bridge.php:116 +#: usr/local/www/interfaces_wireless.php:111 +#: usr/local/www/system_routes.php:133 usr/local/www/vpn_pppoe_edit.php:448 +#: usr/local/www/services_dhcp.php:792 usr/local/www/services_dhcp.php:1154 +#: usr/local/www/services_captiveportal_mac_edit.php:193 +#: usr/local/www/services_dhcpv6.php:853 +#: usr/local/www/interfaces_bridge_edit.php:284 +#: usr/local/www/services_dnsmasq.php:272 +#: usr/local/www/services_dnsmasq.php:360 +#: usr/local/www/services_captiveportal_mac.php:176 +#: usr/local/www/vpn_ipsec_phase1.php:608 usr/local/www/interfaces_gre.php:114 +#: usr/local/www/firewall_nat_out_edit.php:651 +#: usr/local/www/vpn_openvpn_server.php:850 +#: usr/local/www/vpn_openvpn_server.php:1686 +#: usr/local/www/vpn_ipsec_phase2.php:646 usr/local/www/services_dyndns.php:93 +#: usr/local/www/interfaces_gif.php:113 +#: usr/local/www/interfaces_qinq_edit.php:341 +#: usr/local/www/interfaces.php:1349 etc/inc/shaper.inc:1183 +#: etc/inc/shaper.inc:3226 etc/inc/shaper.inc:3669 +#: usr/local/www/status_services.php:80 +#: usr/local/www/system_gateways_edit.php:625 +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/firewall_rules_edit.php:1116 +#: usr/local/www/firewall_nat_edit.php:782 +#: usr/local/www/firewall_virtual_ip_edit.php:483 +#: usr/local/www/pkg_mgr_installed.php:116 usr/local/www/services_dhcp.php:812 +#: usr/local/www/services_dhcp.php:1174 usr/local/www/pkg_mgr.php:135 +#: usr/local/www/system_routes_edit.php:331 +#: usr/local/www/firewall_nat_out.php:367 usr/local/www/firewall_rules.php:369 +#: usr/local/www/system_gateway_groups_edit.php:336 +#: usr/local/www/firewall_aliases_edit.php:482 +#: usr/local/www/firewall_aliases_edit.php:630 +#: usr/local/www/firewall_aliases_edit.php:665 +#: usr/local/www/services_dnsmasq.php:285 +#: usr/local/www/services_dnsmasq.php:373 +#: usr/local/www/firewall_nat_out_edit.php:663 +#: usr/local/www/services_dyndns.php:89 +#: usr/local/www/system_gateway_groups.php:133 +#: usr/local/www/interfaces.php:1391 etc/inc/shaper.inc:1187 +#: etc/inc/shaper.inc:3233 etc/inc/shaper.inc:3481 etc/inc/shaper.inc:3676 +#: usr/local/www/system_gateways_edit.php:655 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_virtual_ip.php:228 +#: usr/local/www/interfaces_lagg_edit.php:221 +#: usr/local/www/firewall_nat_edit.php:783 usr/local/www/system_routes.php:149 +#: usr/local/www/firewall_nat.php:211 usr/local/www/system_routes_edit.php:340 +#: usr/local/www/firewall_nat_out.php:366 +#: usr/local/www/interfaces_bridge_edit.php:286 +#: usr/local/www/services_dnsmasq.php:349 +#: usr/local/www/services_dnsmasq.php:437 usr/local/www/interfaces.php:1386 +#: etc/inc/shaper.inc:1235 etc/inc/shaper.inc:3301 etc/inc/shaper.inc:3549 +#: etc/inc/shaper.inc:3744 usr/local/www/services_rfc2136.php:81 +#: usr/local/www/status_services.php:80 +#: usr/local/www/system_gateways_edit.php:656 +#: usr/local/www/services_captiveportal_ip_edit.php:200 +#: usr/local/www/vpn_pppoe.php:106 +#: usr/local/www/interfaces_wireless_edit.php:187 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:216 +#: usr/local/www/system_groupmanager.php:275 +#: usr/local/www/system_groupmanager.php:347 +#: usr/local/www/system_groupmanager.php:406 +#: usr/local/www/services_captiveportal_zones_edit.php:105 +#: usr/local/www/interfaces_gre_edit.php:219 +#: usr/local/www/vpn_openvpn_client.php:615 +#: usr/local/www/vpn_openvpn_client.php:940 +#: usr/local/www/firewall_schedule.php:98 +#: usr/local/www/system_usermanager_addprivs.php:197 +#: usr/local/www/services_dhcpv6_edit.php:233 +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/services_wol.php:163 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/load_balancer_virtual_server_edit.php:161 +#: usr/local/www/services_captiveportal_ip.php:116 +#: usr/local/www/interfaces_qinq.php:123 +#: usr/local/www/interfaces_vlan_edit.php:183 +#: usr/local/www/interfaces_ppps_edit.php:474 +#: usr/local/www/firewall_virtual_ip.php:228 +#: usr/local/www/vpn_openvpn_csc.php:341 usr/local/www/vpn_openvpn_csc.php:673 +#: usr/local/www/interfaces_lagg_edit.php:221 +#: usr/local/www/firewall_schedule_edit.php:792 +#: usr/local/www/firewall_schedule_edit.php:997 +#: usr/local/www/firewall_nat_edit.php:783 +#: usr/local/www/interfaces_lagg.php:119 usr/local/www/interfaces_vlan.php:117 +#: usr/local/www/services_captiveportal_hostname_edit.php:183 +#: usr/local/www/interfaces_gif_edit.php:220 +#: usr/local/www/firewall_aliases.php:190 +#: usr/local/www/services_dhcp_edit.php:381 +#: usr/local/www/services_wol_edit.php:148 +#: usr/local/www/firewall_virtual_ip_edit.php:483 +#: usr/local/www/load_balancer_relay_protocol.php:135 +#: usr/local/www/diag_ipsec.php:109 usr/local/www/pkg_mgr_installed.php:116 +#: usr/local/www/interfaces_bridge.php:116 +#: usr/local/www/firewall_aliases_import.php:140 +#: usr/local/www/interfaces_wireless.php:111 +#: usr/local/www/system_routes.php:149 +#: usr/local/www/load_balancer_relay_action.php:141 +#: usr/local/www/vpn_pppoe_edit.php:448 usr/local/www/services_dhcp.php:812 +#: usr/local/www/services_dhcp.php:1174 usr/local/www/firewall_nat.php:211 +#: usr/local/www/status_lb_pool.php:134 usr/local/www/interfaces_groups.php:97 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:414 +#: usr/local/www/pkg_mgr.php:183 usr/local/www/system_routes_edit.php:334 +#: usr/local/www/services_captiveportal_mac_edit.php:193 +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/services_captiveportal_hostname.php:121 +#: usr/local/www/services_dhcpv6.php:853 +#: usr/local/www/firewall_nat_out.php:366 +#: usr/local/www/interfaces_ppps.php:111 usr/local/www/firewall_rules.php:369 +#: usr/local/www/firewall_nat_npt.php:107 +#: usr/local/www/firewall_nat_1to1.php:108 +#: usr/local/www/firewall_nat_npt_edit.php:265 +#: usr/local/www/interfaces_groups_edit.php:260 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:239 +#: usr/local/www/system_gateway_groups_edit.php:336 +#: usr/local/www/services_captiveportal_zones.php:56 +#: usr/local/www/system_groupmanager_addprivs.php:216 +#: usr/local/www/firewall_aliases_edit.php:468 +#: usr/local/www/firewall_aliases_edit.php:616 +#: usr/local/www/firewall_aliases_edit.php:651 +#: usr/local/www/interfaces_bridge_edit.php:286 +#: usr/local/www/services_igmpproxy_edit.php:177 +#: usr/local/www/services_igmpproxy.php:98 +#: usr/local/www/firewall_nat_1to1_edit.php:447 +#: usr/local/www/status_gateway_groups.php:77 +#: usr/local/www/services_dnsmasq_edit.php:219 +#: usr/local/www/services_dnsmasq_edit.php:240 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/services_rfc2136_edit.php:192 +#: usr/local/www/services_dnsmasq.php:349 +#: usr/local/www/services_dnsmasq.php:437 +#: usr/local/www/services_captiveportal_mac.php:176 +#: usr/local/www/vpn_ipsec_phase1.php:608 usr/local/www/interfaces_gre.php:114 +#: usr/local/www/system_usermanager.php:576 +#: usr/local/www/system_gateways.php:156 +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/load_balancer_pool_edit.php:202 +#: usr/local/www/status_lb_vs.php:81 +#: usr/local/www/firewall_nat_out_edit.php:663 +#: usr/local/www/vpn_openvpn_server.php:850 +#: usr/local/www/vpn_openvpn_server.php:1686 +#: usr/local/www/vpn_ipsec_phase2.php:646 usr/local/www/status_gateways.php:79 +#: usr/local/www/services_dyndns.php:89 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151 +#: usr/local/www/interfaces_gif.php:113 +#: usr/local/www/interfaces_qinq_edit.php:341 +#: usr/local/www/system_gateway_groups.php:133 +#: usr/local/www/status_upnp.php:89 +#: usr/local/www/system_advanced_sysctl.php:172 +#: usr/local/www/system_advanced_sysctl.php:243 +#: usr/local/www/interfaces.php:1386 etc/inc/shaper.inc:1235 +#: etc/inc/shaper.inc:3378 etc/inc/shaper.inc:3651 etc/inc/shaper.inc:3849 +msgid "Description" +msgstr "" + +#: etc/inc/shaper.inc:1207 etc/inc/shaper.inc:1209 etc/inc/shaper.inc:1210 +#: etc/inc/shaper.inc:1214 etc/inc/shaper.inc:1262 etc/inc/shaper.inc:1262 +msgid "Bandwidth:" +msgstr "" + +#: etc/inc/shaper.inc:1212 etc/inc/shaper.inc:1214 etc/inc/shaper.inc:1215 +#: etc/inc/shaper.inc:1218 etc/inc/shaper.inc:1266 etc/inc/shaper.inc:1266 +msgid "Priority: on" +msgstr "" + +#: etc/inc/shaper.inc:1215 etc/inc/shaper.inc:1217 etc/inc/shaper.inc:1218 +#: etc/inc/shaper.inc:1221 etc/inc/shaper.inc:1269 etc/inc/shaper.inc:1269 +msgid "Default: on" +msgstr "" + +#: etc/inc/shaper.inc:1222 etc/inc/shaper.inc:1223 etc/inc/shaper.inc:1224 +#: etc/inc/shaper.inc:1225 etc/inc/shaper.inc:1226 etc/inc/shaper.inc:1228 +#: etc/inc/shaper.inc:1229 etc/inc/shaper.inc:1276 etc/inc/shaper.inc:1277 +#: etc/inc/shaper.inc:1276 etc/inc/shaper.inc:1277 +msgid "Delete queue from interface" +msgstr "" + +#: etc/inc/shaper.inc:1559 etc/inc/shaper.inc:2207 etc/inc/shaper.inc:2483 +#: etc/inc/shaper.inc:1561 etc/inc/shaper.inc:2209 etc/inc/shaper.inc:2485 +#: etc/inc/shaper.inc:1562 etc/inc/shaper.inc:2210 etc/inc/shaper.inc:2486 +#: etc/inc/shaper.inc:1565 etc/inc/shaper.inc:2215 etc/inc/shaper.inc:2491 +#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:2273 etc/inc/shaper.inc:2554 +#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:2273 etc/inc/shaper.inc:2554 +msgid "Bandwidth in percentage should be between 1 and 100 bounds." +msgstr "" + +#: etc/inc/shaper.inc:1576 etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1579 +#: etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1633 etc/inc/shaper.inc:1633 +msgid "upperlimit service curve defined but missing (d) value" +msgstr "" + +#: etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1581 +#: etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1635 etc/inc/shaper.inc:1635 +msgid "" +"upperlimit service curve defined but missing initial bandwidth (m1) value" +msgstr "" + +#: etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1583 +#: etc/inc/shaper.inc:1586 etc/inc/shaper.inc:1637 etc/inc/shaper.inc:1637 +msgid "upperlimit m1 value needs to be Kb, Mb, Gb, or %" +msgstr "" + +#: etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1585 +#: etc/inc/shaper.inc:1588 etc/inc/shaper.inc:1639 etc/inc/shaper.inc:1639 +msgid "upperlimit d value needs to be numeric" +msgstr "" + +#: etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1586 etc/inc/shaper.inc:1587 +#: etc/inc/shaper.inc:1590 etc/inc/shaper.inc:1641 etc/inc/shaper.inc:1641 +msgid "upperlimit m2 value needs to be Kb, Mb, Gb, or %" +msgstr "" + +#: etc/inc/shaper.inc:1598 etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1601 +#: etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1655 etc/inc/shaper.inc:1655 +msgid "linkshare service curve defined but missing (d) value" +msgstr "" + +#: etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1603 +#: etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1657 etc/inc/shaper.inc:1657 +msgid "" +"linkshare service curve defined but missing initial bandwidth (m1) value" +msgstr "" + +#: etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1605 +#: etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1659 etc/inc/shaper.inc:1659 +msgid "linkshare m1 value needs to be Kb, Mb, Gb, or %" +msgstr "" + +#: etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1607 +#: etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1661 etc/inc/shaper.inc:1661 +msgid "linkshare d value needs to be numeric" +msgstr "" + +#: etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1609 +#: etc/inc/shaper.inc:1612 etc/inc/shaper.inc:1663 etc/inc/shaper.inc:1663 +msgid "linkshare m2 value needs to be Kb, Mb, Gb, or %" +msgstr "" + +#: etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1611 +#: etc/inc/shaper.inc:1614 etc/inc/shaper.inc:1665 etc/inc/shaper.inc:1665 +msgid "realtime service curve defined but missing (d) value" +msgstr "" + +#: etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1612 etc/inc/shaper.inc:1613 +#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:1667 etc/inc/shaper.inc:1667 +msgid "realtime service curve defined but missing initial bandwidth (m1) value" +msgstr "" + +#: etc/inc/shaper.inc:1625 etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1628 +#: etc/inc/shaper.inc:1631 etc/inc/shaper.inc:1682 etc/inc/shaper.inc:1682 +msgid "realtime m1 value needs to be Kb, Mb, Gb, or %" +msgstr "" + +#: etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1630 +#: etc/inc/shaper.inc:1633 etc/inc/shaper.inc:1684 etc/inc/shaper.inc:1684 +msgid "realtime d value needs to be numeric" +msgstr "" + +#: etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1631 etc/inc/shaper.inc:1632 +#: etc/inc/shaper.inc:1635 etc/inc/shaper.inc:1686 etc/inc/shaper.inc:1686 +msgid "realtime m2 value needs to be Kb, Mb, Gb, or %" +msgstr "" + +#: etc/inc/shaper.inc:1858 etc/inc/shaper.inc:2336 etc/inc/shaper.inc:2602 +#: etc/inc/shaper.inc:3039 etc/inc/shaper.inc:1860 etc/inc/shaper.inc:2338 +#: etc/inc/shaper.inc:2604 etc/inc/shaper.inc:3047 etc/inc/shaper.inc:1861 +#: etc/inc/shaper.inc:2339 etc/inc/shaper.inc:2605 etc/inc/shaper.inc:1866 +#: etc/inc/shaper.inc:2344 etc/inc/shaper.inc:2610 etc/inc/shaper.inc:1924 +#: etc/inc/shaper.inc:2407 etc/inc/shaper.inc:2678 etc/inc/shaper.inc:1924 +#: etc/inc/shaper.inc:2407 etc/inc/shaper.inc:2678 +msgid "Gbit/s" +msgstr "" + +#: etc/inc/shaper.inc:1862 etc/inc/shaper.inc:2340 etc/inc/shaper.inc:2606 +#: etc/inc/shaper.inc:3035 etc/inc/shaper.inc:1864 etc/inc/shaper.inc:2342 +#: etc/inc/shaper.inc:2608 etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1865 +#: etc/inc/shaper.inc:2343 etc/inc/shaper.inc:2609 etc/inc/shaper.inc:1870 +#: etc/inc/shaper.inc:2348 etc/inc/shaper.inc:2614 etc/inc/shaper.inc:1928 +#: etc/inc/shaper.inc:2411 etc/inc/shaper.inc:2682 etc/inc/shaper.inc:1928 +#: etc/inc/shaper.inc:2411 etc/inc/shaper.inc:2682 +msgid "Mbit/s" +msgstr "" + +#: etc/inc/shaper.inc:1866 etc/inc/shaper.inc:2344 etc/inc/shaper.inc:2610 +#: etc/inc/shaper.inc:3031 usr/local/www/services_captiveportal.php:560 +#: usr/local/www/services_captiveportal.php:564 etc/inc/shaper.inc:1868 +#: etc/inc/shaper.inc:2346 etc/inc/shaper.inc:2612 etc/inc/shaper.inc:3039 +#: usr/local/www/services_captiveportal.php:565 +#: usr/local/www/services_captiveportal.php:569 +#: usr/local/www/services_captiveportal.php:563 +#: usr/local/www/services_captiveportal.php:567 etc/inc/shaper.inc:1869 +#: etc/inc/shaper.inc:2347 etc/inc/shaper.inc:2613 +#: usr/local/www/services_captiveportal.php:581 +#: usr/local/www/services_captiveportal.php:585 etc/inc/shaper.inc:1874 +#: etc/inc/shaper.inc:2352 etc/inc/shaper.inc:2618 etc/inc/shaper.inc:1932 +#: etc/inc/shaper.inc:2415 etc/inc/shaper.inc:2686 +#: usr/local/www/services_captiveportal.php:581 +#: usr/local/www/services_captiveportal.php:585 etc/inc/shaper.inc:1932 +#: etc/inc/shaper.inc:2415 etc/inc/shaper.inc:2686 +msgid "Kbit/s" +msgstr "" + +#: etc/inc/shaper.inc:1870 etc/inc/shaper.inc:2348 etc/inc/shaper.inc:2614 +#: etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1872 etc/inc/shaper.inc:2350 +#: etc/inc/shaper.inc:2616 etc/inc/shaper.inc:3051 etc/inc/shaper.inc:1873 +#: etc/inc/shaper.inc:2351 etc/inc/shaper.inc:2617 etc/inc/shaper.inc:1878 +#: etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 etc/inc/shaper.inc:1936 +#: etc/inc/shaper.inc:2419 etc/inc/shaper.inc:2690 etc/inc/shaper.inc:1936 +#: etc/inc/shaper.inc:2419 etc/inc/shaper.inc:2690 +msgid "Bit/s" +msgstr "" + +#: etc/inc/shaper.inc:1876 etc/inc/shaper.inc:2354 etc/inc/shaper.inc:2620 +#: etc/inc/shaper.inc:1878 etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 +#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:2357 etc/inc/shaper.inc:2623 +#: etc/inc/shaper.inc:1884 etc/inc/shaper.inc:2362 etc/inc/shaper.inc:2628 +#: etc/inc/shaper.inc:1942 etc/inc/shaper.inc:2425 etc/inc/shaper.inc:2696 +#: etc/inc/shaper.inc:1942 etc/inc/shaper.inc:2425 etc/inc/shaper.inc:2696 +msgid "Choose the amount of bandwidth for this queue" +msgstr "" + +#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:1881 etc/inc/shaper.inc:1882 +#: etc/inc/shaper.inc:1887 etc/inc/shaper.inc:1945 etc/inc/shaper.inc:1945 +msgid "Service Curve (sc)" +msgstr "" + +#: etc/inc/shaper.inc:1886 etc/inc/shaper.inc:1888 etc/inc/shaper.inc:1889 +#: etc/inc/shaper.inc:1894 etc/inc/shaper.inc:1952 etc/inc/shaper.inc:1952 +msgid "Upperlimit:" +msgstr "" + +#: etc/inc/shaper.inc:1901 etc/inc/shaper.inc:1903 etc/inc/shaper.inc:1904 +#: etc/inc/shaper.inc:1909 etc/inc/shaper.inc:1967 etc/inc/shaper.inc:1967 +msgid "The maximum allowed bandwidth for the queue." +msgstr "" + +#: etc/inc/shaper.inc:1905 etc/inc/shaper.inc:1907 etc/inc/shaper.inc:1908 +#: etc/inc/shaper.inc:1913 etc/inc/shaper.inc:1971 etc/inc/shaper.inc:1971 +msgid "Real time:" +msgstr "" + +#: etc/inc/shaper.inc:1920 etc/inc/shaper.inc:1922 etc/inc/shaper.inc:1923 +#: etc/inc/shaper.inc:1928 etc/inc/shaper.inc:1986 etc/inc/shaper.inc:1986 +msgid "The minimum required bandwidth for the queue." +msgstr "" + +#: etc/inc/shaper.inc:1924 etc/inc/shaper.inc:1926 etc/inc/shaper.inc:1927 +#: etc/inc/shaper.inc:1932 etc/inc/shaper.inc:1990 etc/inc/shaper.inc:1990 +msgid "Link share:" +msgstr "" + +#: etc/inc/shaper.inc:1939 etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1942 +#: etc/inc/shaper.inc:1947 etc/inc/shaper.inc:2005 etc/inc/shaper.inc:2005 +msgid "The bandwidth share of a backlogged queue - this overrides priority." +msgstr "" + +#: etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1943 etc/inc/shaper.inc:1944 +#: etc/inc/shaper.inc:1949 etc/inc/shaper.inc:2007 etc/inc/shaper.inc:2007 +msgid "" +"The format for service curve specifications is (m1, d, m2). m2 controls the " +"bandwidth assigned to the queue. m1 and d are optional and can be used to " +"control the initial bandwidth assignment. For the first d milliseconds the " +"queue gets the bandwidth given as m1, afterwards the value given in m2." +msgstr "" + +#: etc/inc/shaper.inc:2190 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2193 +#: etc/inc/shaper.inc:2198 etc/inc/shaper.inc:2256 etc/inc/shaper.inc:2256 +msgid "Priority must be an integer between 1 and 7." +msgstr "" + +#: etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 etc/inc/shaper.inc:2358 +#: etc/inc/shaper.inc:2624 etc/inc/shaper.inc:2359 etc/inc/shaper.inc:2625 +#: etc/inc/shaper.inc:2364 etc/inc/shaper.inc:2630 etc/inc/shaper.inc:2427 +#: etc/inc/shaper.inc:2698 etc/inc/shaper.inc:2427 etc/inc/shaper.inc:2698 +msgid "Scheduler specific options" +msgstr "" + +#: etc/inc/shaper.inc:2360 etc/inc/shaper.inc:2362 etc/inc/shaper.inc:2363 +#: etc/inc/shaper.inc:2368 etc/inc/shaper.inc:2431 etc/inc/shaper.inc:2431 +msgid "Borrow from other queues when available" +msgstr "" + +#: etc/inc/shaper.inc:2465 etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2468 +#: etc/inc/shaper.inc:2473 etc/inc/shaper.inc:2536 etc/inc/shaper.inc:2536 +msgid "Priority must be an integer between 1 and 255." +msgstr "" + +#: etc/inc/shaper.inc:2628 etc/inc/shaper.inc:2630 etc/inc/shaper.inc:2631 +#: etc/inc/shaper.inc:2636 etc/inc/shaper.inc:2704 etc/inc/shaper.inc:2704 +msgid "Number of buckets available." +msgstr "" + +#: etc/inc/shaper.inc:2633 etc/inc/shaper.inc:2635 etc/inc/shaper.inc:2636 +#: etc/inc/shaper.inc:2641 etc/inc/shaper.inc:2709 etc/inc/shaper.inc:2709 +msgid "Bandwidth limit for hosts to not saturate link." +msgstr "" + +#: etc/inc/shaper.inc:2797 etc/inc/shaper.inc:2799 etc/inc/shaper.inc:2800 +#: etc/inc/shaper.inc:2805 etc/inc/shaper.inc:2873 etc/inc/shaper.inc:2892 +msgid "Plr must be an integer between 1 and 100." +msgstr "" + +#: etc/inc/shaper.inc:2800 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:2803 +#: etc/inc/shaper.inc:2808 etc/inc/shaper.inc:2876 etc/inc/shaper.inc:2895 +msgid "Buckets must be an integer between 16 and 65535." +msgstr "" + +#: etc/inc/shaper.inc:2902 etc/inc/shaper.inc:2906 etc/inc/shaper.inc:2921 +#: etc/inc/shaper.inc:2922 etc/inc/shaper.inc:2927 etc/inc/shaper.inc:2995 +#: etc/inc/shaper.inc:3053 +msgid "Delay must be an integer." +msgstr "" + +#: etc/inc/shaper.inc:3009 usr/local/www/services_snmp.php:276 +#: usr/local/www/services_snmp.php:336 usr/local/www/interfaces.php:1234 +#: usr/local/www/system_firmware.php:131 +#: usr/local/www/services_dnsmasq.php:154 usr/local/www/diag_routes.php:60 +#: usr/local/www/services_rfc2136_edit.php:128 +#: usr/local/www/vpn_ipsec_phase1.php:813 etc/inc/shaper.inc:3013 +#: usr/local/www/services_unbound.php:150 usr/local/www/interfaces.php:1338 +#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:334 +#: usr/local/www/vpn_ipsec_phase1.php:826 etc/inc/shaper.inc:3143 +#: usr/local/www/services_dnsmasq.php:155 usr/local/www/diag_routes.php:61 +#: usr/local/www/system_firmware.php:138 usr/local/www/interfaces.php:1326 +#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:335 +#: usr/local/www/vpn_ipsec_phase1.php:823 +#: usr/local/www/system_firmware.php:133 +#: usr/local/www/services_dnsmasq.php:159 +#: usr/local/www/vpn_ipsec_phase1.php:844 usr/local/www/services_snmp.php:285 +#: usr/local/www/services_snmp.php:345 usr/local/www/interfaces.php:1339 +#: etc/inc/shaper.inc:3144 usr/local/www/services_dnsmasq.php:161 +#: usr/local/www/interfaces.php:1381 etc/inc/shaper.inc:3151 +#: usr/local/www/services_dnsmasq.php:182 usr/local/www/interfaces.php:1376 +#: etc/inc/shaper.inc:3219 usr/local/www/system_firmware.php:133 +#: usr/local/www/diag_routes.php:61 +#: usr/local/www/services_rfc2136_edit.php:128 +#: usr/local/www/services_dnsmasq.php:182 +#: usr/local/www/vpn_ipsec_phase1.php:844 usr/local/www/services_snmp.php:285 +#: usr/local/www/services_snmp.php:345 usr/local/www/interfaces.php:1376 +#: etc/inc/shaper.inc:3275 +msgid "Enable" +msgstr "" + +#: etc/inc/shaper.inc:3014 etc/inc/shaper.inc:3018 etc/inc/shaper.inc:3148 +#: etc/inc/shaper.inc:3149 etc/inc/shaper.inc:3156 etc/inc/shaper.inc:3224 +#: etc/inc/shaper.inc:3280 +msgid "Enable limiter and its children" +msgstr "" + +#: etc/inc/shaper.inc:3046 etc/inc/shaper.inc:3283 etc/inc/shaper.inc:3054 +#: etc/inc/shaper.inc:3295 etc/inc/shaper.inc:3202 etc/inc/shaper.inc:3450 +#: etc/inc/shaper.inc:3203 etc/inc/shaper.inc:3451 etc/inc/shaper.inc:3210 +#: etc/inc/shaper.inc:3458 etc/inc/shaper.inc:3278 etc/inc/shaper.inc:3526 +#: etc/inc/shaper.inc:3334 etc/inc/shaper.inc:3607 +msgid "Mask" +msgstr "" + +#: etc/inc/shaper.inc:3056 etc/inc/shaper.inc:3293 etc/inc/shaper.inc:3064 +#: etc/inc/shaper.inc:3305 etc/inc/shaper.inc:3212 etc/inc/shaper.inc:3460 +#: etc/inc/shaper.inc:3213 etc/inc/shaper.inc:3461 etc/inc/shaper.inc:3220 +#: etc/inc/shaper.inc:3468 etc/inc/shaper.inc:3288 etc/inc/shaper.inc:3536 +#: etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3618 +msgid "Source addresses" +msgstr "" + +#: etc/inc/shaper.inc:3060 etc/inc/shaper.inc:3297 etc/inc/shaper.inc:3068 +#: etc/inc/shaper.inc:3309 etc/inc/shaper.inc:3216 etc/inc/shaper.inc:3464 +#: etc/inc/shaper.inc:3217 etc/inc/shaper.inc:3465 etc/inc/shaper.inc:3224 +#: etc/inc/shaper.inc:3472 etc/inc/shaper.inc:3292 etc/inc/shaper.inc:3540 +#: etc/inc/shaper.inc:3349 etc/inc/shaper.inc:3622 +msgid "Destination addresses" +msgstr "" + +#: etc/inc/shaper.inc:3063 etc/inc/shaper.inc:3300 etc/inc/shaper.inc:3071 +#: etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3219 etc/inc/shaper.inc:3467 +#: etc/inc/shaper.inc:3220 etc/inc/shaper.inc:3468 etc/inc/shaper.inc:3227 +#: etc/inc/shaper.inc:3475 etc/inc/shaper.inc:3295 etc/inc/shaper.inc:3543 +msgid "" +"If 'source' or 'destination' is chosen, \n" +"a dynamic pipe with the bandwidth, delay, packet loss and queue size given " +"above will \n" +"be created for each source/destination IP address encountered, \n" +"respectively. This makes it possible to easily specify bandwidth \n" +"limits per host." +msgstr "" + +#: etc/inc/shaper.inc:3075 etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3507 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:124 +#: usr/local/www/firewall_virtual_ip_edit.php:541 +#: usr/local/www/services_wol_edit.php:151 +#: usr/local/www/interfaces_gif_edit.php:211 +#: usr/local/www/interfaces_gre_edit.php:222 +#: usr/local/www/interfaces_groups_edit.php:264 +#: usr/local/www/firewall_aliases_edit.php:596 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +#: usr/local/www/firewall_nat_edit.php:772 +#: usr/local/www/firewall_nat_out_edit.php:639 +#: usr/local/www/firewall_schedule_edit.php:796 +#: usr/local/www/firewall_schedule_edit.php:970 +#: usr/local/www/interfaces_vlan_edit.php:182 +#: usr/local/www/system_routes_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:342 +#: usr/local/www/interfaces_wireless_edit.php:188 +#: usr/local/www/services_dhcp_edit.php:245 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_igmpproxy_edit.php:180 +#: usr/local/www/system_gateway_groups_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:264 +#: usr/local/www/services_dhcpv6_edit.php:222 etc/inc/shaper.inc:3083 +#: etc/inc/shaper.inc:3324 etc/inc/shaper.inc:3519 +#: usr/local/www/system_routes_edit.php:310 +#: usr/local/www/system_gateway_groups_edit.php:278 +#: usr/local/www/services_dnsmasq_edit.php:221 +#: usr/local/www/firewall_nat_1to1_edit.php:450 +#: usr/local/www/services_dhcpv6_edit.php:231 +#: usr/local/www/firewall_nat_npt_edit.php:269 +#: usr/local/www/firewall_nat_out_edit.php:652 +#: usr/local/www/services_igmpproxy_edit.php:182 +#: usr/local/www/firewall_aliases_edit.php:601 +#: usr/local/www/firewall_nat_edit.php:779 +#: usr/local/www/services_dhcp_edit.php:254 +#: usr/local/www/firewall_virtual_ip_edit.php:529 +#: usr/local/www/interfaces_gre_edit.php:221 etc/inc/shaper.inc:3231 +#: etc/inc/shaper.inc:3479 etc/inc/shaper.inc:3674 +#: usr/local/www/system_routes_edit.php:311 +#: usr/local/www/system_gateway_groups_edit.php:338 +#: usr/local/www/interfaces_vlan_edit.php:183 +#: usr/local/www/services_dnsmasq_edit.php:222 +#: usr/local/www/firewall_nat_1to1_edit.php:448 +#: usr/local/www/services_dhcpv6_edit.php:233 +#: usr/local/www/firewall_nat_npt_edit.php:268 +#: usr/local/www/interfaces_qinq_edit.php:343 +#: usr/local/www/interfaces_gif_edit.php:212 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:154 +#: usr/local/www/firewall_schedule_edit.php:795 +#: usr/local/www/firewall_schedule_edit.php:969 +#: usr/local/www/firewall_aliases_edit.php:604 +#: usr/local/www/interfaces_groups_edit.php:265 +#: usr/local/www/firewall_nat_edit.php:778 +#: usr/local/www/services_dhcp_edit.php:256 +#: usr/local/www/firewall_virtual_ip_edit.php:474 +#: usr/local/www/interfaces_wireless_edit.php:190 +#: usr/local/www/services_dhcpv6_edit.php:236 +#: usr/local/www/interfaces_vlan_edit.php:186 +#: usr/local/www/firewall_nat_edit.php:773 +#: usr/local/www/interfaces_gif_edit.php:223 +#: usr/local/www/services_dhcp_edit.php:384 +#: usr/local/www/firewall_virtual_ip_edit.php:466 +#: usr/local/www/firewall_nat_out_edit.php:654 +#: usr/local/www/interfaces_qinq_edit.php:346 etc/inc/shaper.inc:3232 +#: etc/inc/shaper.inc:3480 etc/inc/shaper.inc:3675 +#: usr/local/www/firewall_nat_edit.php:785 +#: usr/local/www/firewall_virtual_ip_edit.php:486 +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/system_gateway_groups_edit.php:339 +#: usr/local/www/firewall_aliases_edit.php:635 +#: usr/local/www/firewall_nat_out_edit.php:666 etc/inc/shaper.inc:3239 +#: etc/inc/shaper.inc:3487 etc/inc/shaper.inc:3682 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/system_routes_edit.php:343 etc/inc/shaper.inc:3307 +#: etc/inc/shaper.inc:3555 etc/inc/shaper.inc:3750 +#: usr/local/www/interfaces_wireless_edit.php:190 +#: usr/local/www/interfaces_gre_edit.php:222 +#: usr/local/www/services_dhcpv6_edit.php:236 +#: usr/local/www/interfaces_vlan_edit.php:186 +#: usr/local/www/firewall_schedule_edit.php:795 +#: usr/local/www/firewall_schedule_edit.php:969 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/interfaces_gif_edit.php:223 +#: usr/local/www/services_dhcp_edit.php:384 +#: usr/local/www/services_wol_edit.php:151 +#: usr/local/www/firewall_virtual_ip_edit.php:486 +#: usr/local/www/system_routes_edit.php:337 +#: usr/local/www/firewall_nat_npt_edit.php:268 +#: usr/local/www/interfaces_groups_edit.php:265 +#: usr/local/www/system_gateway_groups_edit.php:339 +#: usr/local/www/firewall_aliases_edit.php:621 +#: usr/local/www/services_igmpproxy_edit.php:182 +#: usr/local/www/firewall_nat_1to1_edit.php:450 +#: usr/local/www/services_dnsmasq_edit.php:222 +#: usr/local/www/firewall_nat_out_edit.php:666 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:154 +#: usr/local/www/interfaces_qinq_edit.php:346 etc/inc/shaper.inc:3384 +#: etc/inc/shaper.inc:3657 etc/inc/shaper.inc:3855 +msgid "You may enter a description here for your reference (not parsed)." +msgstr "" + +#: etc/inc/shaper.inc:3081 etc/inc/shaper.inc:3318 +#: usr/local/www/interfaces_bridge_edit.php:281 +#: usr/local/www/interfaces_ppps_edit.php:738 etc/inc/shaper.inc:3089 +#: etc/inc/shaper.inc:3330 usr/local/www/interfaces_bridge_edit.php:290 +#: etc/inc/shaper.inc:3237 etc/inc/shaper.inc:3485 +#: usr/local/www/interfaces_ppps_edit.php:739 +#: usr/local/www/interfaces_bridge_edit.php:291 +#: usr/local/www/interfaces_ppps_edit.php:745 +#: usr/local/www/interfaces_bridge_edit.php:292 etc/inc/shaper.inc:3238 +#: etc/inc/shaper.inc:3486 etc/inc/shaper.inc:3245 etc/inc/shaper.inc:3493 +#: usr/local/www/interfaces_ppps_edit.php:743 +#: usr/local/www/interfaces_bridge_edit.php:294 etc/inc/shaper.inc:3313 +#: etc/inc/shaper.inc:3561 usr/local/www/interfaces_ppps_edit.php:743 +#: usr/local/www/interfaces_bridge_edit.php:294 etc/inc/shaper.inc:3390 +#: etc/inc/shaper.inc:3663 +msgid "Show advanced options" +msgstr "" + +#: etc/inc/shaper.inc:3085 etc/inc/shaper.inc:3093 +#: usr/local/www/status_ntpd.php:115 etc/inc/shaper.inc:3241 +#: usr/local/www/status_ntpd.php:131 etc/inc/shaper.inc:3242 +#: usr/local/www/status_ntpd.php:137 etc/inc/shaper.inc:3249 +#: etc/inc/shaper.inc:3317 usr/local/www/status_ntpd.php:137 +#: etc/inc/shaper.inc:3394 +msgid "Delay" +msgstr "" + +#: etc/inc/shaper.inc:3089 etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3245 +#: etc/inc/shaper.inc:3246 etc/inc/shaper.inc:3253 etc/inc/shaper.inc:3321 +#: etc/inc/shaper.inc:3398 +msgid "" +"Hint: in most cases, you should specify 0 here (or leave the field empty)" +msgstr "" + +#: etc/inc/shaper.inc:3093 etc/inc/shaper.inc:3329 etc/inc/shaper.inc:3101 +#: etc/inc/shaper.inc:3341 etc/inc/shaper.inc:3249 etc/inc/shaper.inc:3496 +#: etc/inc/shaper.inc:3250 etc/inc/shaper.inc:3497 etc/inc/shaper.inc:3257 +#: etc/inc/shaper.inc:3504 etc/inc/shaper.inc:3325 etc/inc/shaper.inc:3572 +#: etc/inc/shaper.inc:3402 etc/inc/shaper.inc:3674 +msgid "Packet loss rate" +msgstr "" + +#: etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3333 etc/inc/shaper.inc:3105 +#: etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3253 etc/inc/shaper.inc:3500 +#: etc/inc/shaper.inc:3254 etc/inc/shaper.inc:3501 etc/inc/shaper.inc:3261 +#: etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3329 etc/inc/shaper.inc:3576 +#: etc/inc/shaper.inc:3406 etc/inc/shaper.inc:3678 +msgid "" +"Hint: in most cases, you should specify 0 here (or leave the field empty). A " +"value of 0.001 means one packet in 1000 gets dropped" +msgstr "" + +#: etc/inc/shaper.inc:3102 etc/inc/shaper.inc:3338 etc/inc/shaper.inc:3110 +#: etc/inc/shaper.inc:3350 etc/inc/shaper.inc:3258 etc/inc/shaper.inc:3505 +#: etc/inc/shaper.inc:3259 etc/inc/shaper.inc:3506 etc/inc/shaper.inc:3266 +#: etc/inc/shaper.inc:3513 etc/inc/shaper.inc:3334 etc/inc/shaper.inc:3581 +#: etc/inc/shaper.inc:3411 etc/inc/shaper.inc:3683 +msgid "Queue Size" +msgstr "" + +#: etc/inc/shaper.inc:3107 etc/inc/shaper.inc:3343 etc/inc/shaper.inc:3115 +#: etc/inc/shaper.inc:3355 etc/inc/shaper.inc:3263 etc/inc/shaper.inc:3510 +#: etc/inc/shaper.inc:3264 etc/inc/shaper.inc:3511 etc/inc/shaper.inc:3271 +#: etc/inc/shaper.inc:3518 etc/inc/shaper.inc:3339 etc/inc/shaper.inc:3586 +#: etc/inc/shaper.inc:3416 etc/inc/shaper.inc:3688 +msgid "" +"Hint: in most cases, you should leave the field empty. All packets in this " +"pipe are placed into a fixed-size queue first, then they are delayed by " +"value specified in the Delay field, and then they are delivered to their " +"destination." +msgstr "" + +#: etc/inc/shaper.inc:3113 etc/inc/shaper.inc:3349 etc/inc/shaper.inc:3121 +#: etc/inc/shaper.inc:3361 etc/inc/shaper.inc:3269 etc/inc/shaper.inc:3516 +#: etc/inc/shaper.inc:3270 etc/inc/shaper.inc:3517 etc/inc/shaper.inc:3277 +#: etc/inc/shaper.inc:3524 etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3592 +#: etc/inc/shaper.inc:3422 etc/inc/shaper.inc:3694 +msgid "Bucket Size" +msgstr "" + +#: etc/inc/shaper.inc:3118 etc/inc/shaper.inc:3354 etc/inc/shaper.inc:3126 +#: etc/inc/shaper.inc:3366 etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3521 +#: etc/inc/shaper.inc:3275 etc/inc/shaper.inc:3522 etc/inc/shaper.inc:3282 +#: etc/inc/shaper.inc:3529 etc/inc/shaper.inc:3350 etc/inc/shaper.inc:3597 +#: etc/inc/shaper.inc:3427 etc/inc/shaper.inc:3699 +msgid "" +"Hint: in most cases, you should leave the field empty. It increases the hash " +"size set." +msgstr "" + +#: etc/inc/shaper.inc:3176 etc/inc/shaper.inc:3184 etc/inc/shaper.inc:3339 +#: etc/inc/shaper.inc:3340 etc/inc/shaper.inc:3347 etc/inc/shaper.inc:3415 +#: etc/inc/shaper.inc:3495 +msgid "Weight must be an integer between 1 and 100." +msgstr "" + +#: etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3282 etc/inc/shaper.inc:3437 +#: etc/inc/shaper.inc:3438 etc/inc/shaper.inc:3445 etc/inc/shaper.inc:3513 +#: etc/inc/shaper.inc:3594 +msgid "Enable/Disable queue" +msgstr "" + +#: etc/inc/shaper.inc:3289 usr/local/www/firewall_rules.php:760 +#: usr/local/www/firewall_rules_edit.php:1224 +#: usr/local/www/firewall_rules_edit.php:1231 +#: usr/local/www/diag_system_pftop.php:107 +#: usr/local/www/interfaces_lagg_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:234 +#: usr/local/www/vpn_openvpn_client.php:519 etc/inc/shaper.inc:3301 +#: usr/local/www/firewall_rules_edit.php:1259 +#: usr/local/www/firewall_rules_edit.php:1266 +#: usr/local/www/firewall_rules.php:757 +#: usr/local/www/load_balancer_virtual_server_edit.php:223 +#: usr/local/www/vpn_openvpn_client.php:524 etc/inc/shaper.inc:3456 +#: usr/local/www/vpn_ipsec_mobile.php:403 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/firewall_rules.php:750 +#: usr/local/www/load_balancer_virtual_server_edit.php:221 +#: usr/local/www/vpn_openvpn_client.php:542 +#: usr/local/www/vpn_openvpn_client.php:561 +#: usr/local/www/firewall_rules_edit.php:1274 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/interfaces_lagg_edit.php:215 etc/inc/shaper.inc:3457 +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1289 +#: usr/local/www/firewall_rules.php:749 etc/inc/shaper.inc:3464 +#: usr/local/www/firewall_rules_edit.php:1282 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/interfaces_lagg_edit.php:214 etc/inc/shaper.inc:3532 +#: usr/local/www/vpn_openvpn_client.php:561 +#: usr/local/www/firewall_rules_edit.php:1282 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/load_balancer_virtual_server_edit.php:221 +#: usr/local/www/interfaces_lagg_edit.php:214 +#: usr/local/www/firewall_rules.php:749 usr/local/www/vpn_ipsec_mobile.php:403 +#: etc/inc/shaper.inc:3614 +msgid "none" +msgstr "" + +#: etc/inc/shaper.inc:3321 usr/local/www/system_gateways_edit.php:424 +#: etc/inc/shaper.inc:3333 usr/local/www/system_gateways_edit.php:445 +#: etc/inc/shaper.inc:3488 usr/local/www/system_gateways_edit.php:551 +#: usr/local/www/system_gateways_edit.php:555 etc/inc/shaper.inc:3489 +#: usr/local/www/system_gateways_edit.php:557 etc/inc/shaper.inc:3496 +#: usr/local/www/system_gateways_edit.php:587 etc/inc/shaper.inc:3564 +#: usr/local/www/system_gateways_edit.php:587 etc/inc/shaper.inc:3666 +msgid "Weight" +msgstr "" + +#: etc/inc/shaper.inc:3325 etc/inc/shaper.inc:3337 etc/inc/shaper.inc:3492 +#: etc/inc/shaper.inc:3493 etc/inc/shaper.inc:3500 etc/inc/shaper.inc:3568 +#: etc/inc/shaper.inc:3670 +msgid "" +"Hint: For queues under the same parent this specifies the share that a queue " +"gets(values range from 1 to 100, you can leave it blank otherwise)" +msgstr "" + +#: etc/inc/shaper.inc:3353 etc/inc/shaper.inc:3365 etc/inc/shaper.inc:3520 +#: etc/inc/shaper.inc:3521 etc/inc/shaper.inc:3528 etc/inc/shaper.inc:3596 +#: etc/inc/shaper.inc:3698 +msgid "slots" +msgstr "" + +#: etc/inc/shaper.inc:3494 etc/inc/shaper.inc:3506 etc/inc/shaper.inc:3661 +#: etc/inc/shaper.inc:3662 etc/inc/shaper.inc:3669 etc/inc/shaper.inc:3737 +#: etc/inc/shaper.inc:3842 +msgid "Enable/Disable layer7 Container" +msgstr "" + +#: etc/inc/shaper.inc:3744 etc/inc/shaper.inc:3756 etc/inc/shaper.inc:3911 +#: etc/inc/shaper.inc:3912 etc/inc/shaper.inc:3919 etc/inc/shaper.inc:3987 +#: etc/inc/shaper.inc:4092 +#, php-format +msgid "Sending HUP signal to %s" +msgstr "" + +#: etc/inc/shaper.inc:4052 etc/inc/shaper.inc:4112 etc/inc/shaper.inc:4269 +#: etc/inc/shaper.inc:4270 etc/inc/shaper.inc:4277 etc/inc/shaper.inc:4345 +#: etc/inc/shaper.inc:4450 +msgid " Clone shaper/queue on this interface" +msgstr "" + +#: etc/inc/shaper.inc:4060 etc/inc/shaper.inc:4067 etc/inc/shaper.inc:4120 +#: etc/inc/shaper.inc:4127 etc/inc/shaper.inc:4277 etc/inc/shaper.inc:4284 +#: etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285 etc/inc/shaper.inc:4292 +#: etc/inc/shaper.inc:4353 etc/inc/shaper.inc:4360 etc/inc/shaper.inc:4458 +#: etc/inc/shaper.inc:4465 +#, php-format +msgid "Welcome to the %s Traffic Shaper." +msgstr "" + +#: etc/inc/shaper.inc:4061 etc/inc/shaper.inc:4068 etc/inc/shaper.inc:4121 +#: etc/inc/shaper.inc:4128 etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285 +#: etc/inc/shaper.inc:4279 etc/inc/shaper.inc:4286 etc/inc/shaper.inc:4293 +#: etc/inc/shaper.inc:4354 etc/inc/shaper.inc:4361 etc/inc/shaper.inc:4459 +#: etc/inc/shaper.inc:4466 +msgid "" +"The tree on the left helps you navigate through the queues
    buttons at " +"the bottom represent queue actions and are activated accordingly." +msgstr "" + +#: etc/inc/system.inc:430 etc/inc/system.inc:449 etc/inc/system.inc:457 +#: etc/inc/system.inc:467 +#, php-format +msgid "Static Routes: Gateway IP could not be found for %s" +msgstr "" + +#: etc/inc/system.inc:497 etc/inc/system.inc:529 etc/inc/system.inc:533 +#: etc/inc/system.inc:547 etc/inc/system.inc:606 +msgid "Starting syslog..." +msgstr "" + +#: etc/inc/system.inc:536 etc/inc/system.inc:568 etc/inc/system.inc:572 +#: etc/inc/system.inc:695 etc/inc/system.inc:754 +#, php-format +msgid "Error: cannot open syslog.conf in system_syslogd_start().%s" +msgstr "" + +#: etc/inc/system.inc:664 etc/inc/system.inc:712 etc/inc/system.inc:716 +#: etc/inc/system.inc:725 etc/inc/system.inc:784 +msgid "Initializing PCMCIA..." +msgstr "" + +#: etc/inc/system.inc:676 etc/inc/system.inc:761 etc/inc/system.inc:1412 +#: etc/inc/system.inc:1415 etc/inc/system.inc:724 etc/inc/system.inc:808 +#: etc/inc/system.inc:1469 etc/inc/system.inc:1472 etc/inc/system.inc:728 +#: etc/inc/system.inc:806 etc/inc/system.inc:1511 etc/inc/system.inc:1514 +#: etc/inc/system.inc:737 etc/inc/system.inc:817 etc/inc/system.inc:1460 +#: etc/inc/system.inc:1463 etc/inc/system.inc:796 etc/inc/system.inc:876 +#: etc/inc/system.inc:1519 etc/inc/system.inc:1522 +msgid "failed!" +msgstr "" + +#: etc/inc/system.inc:687 etc/inc/system.inc:735 etc/inc/system.inc:739 +#: etc/inc/system.inc:748 etc/inc/system.inc:807 +msgid "Starting webConfigurator..." +msgstr "" + +#: etc/inc/system.inc:719 etc/inc/system.inc:767 etc/inc/system.inc:771 +#: etc/inc/system.inc:775 etc/inc/system.inc:834 +msgid "webConfigurator default" +msgstr "" + +#: etc/inc/system.inc:729 etc/inc/system.inc:777 etc/inc/system.inc:781 +#: etc/inc/system.inc:785 etc/inc/system.inc:844 +msgid "Importing HTTPS certificate" +msgstr "" + +#: etc/inc/system.inc:1115 etc/inc/system.inc:1167 etc/inc/system.inc:1147 +#: etc/inc/system.inc:1096 etc/inc/system.inc:1155 +#, php-format +msgid "Error: cannot open cert.pem in system_webgui_start().%s" +msgstr "" + +#: etc/inc/system.inc:1126 etc/inc/system.inc:1178 etc/inc/system.inc:1158 +#: etc/inc/system.inc:1107 etc/inc/system.inc:1166 +#, php-format +msgid "Error: cannot open ca.pem in system_webgui_start().%s" +msgstr "" + +#: etc/inc/system.inc:1134 etc/inc/system.inc:1186 etc/inc/system.inc:1166 +#: etc/inc/system.inc:1115 etc/inc/system.inc:1174 +msgid "ssl configuration" +msgstr "" + +#: etc/inc/system.inc:1161 etc/inc/system.inc:1213 etc/inc/system.inc:1193 +#: etc/inc/system.inc:1142 etc/inc/system.inc:1201 +#, php-format +msgid "Error: cannot open %s in system_generate_lighty_config().%s" +msgstr "" + +#: etc/inc/system.inc:1181 etc/inc/system.inc:1233 etc/inc/system.inc:1213 +#: etc/inc/system.inc:1162 etc/inc/system.inc:1221 +msgid "Setting timezone..." +msgstr "" + +#: etc/inc/system.inc:1270 etc/inc/system.inc:1326 etc/inc/system.inc:1368 +#: etc/inc/system.inc:1310 etc/inc/system.inc:1369 +msgid "Syncing system time before startup..." +msgstr "" + +#: etc/inc/system.inc:1376 etc/inc/system.inc:1433 etc/inc/system.inc:1475 +#: etc/inc/system.inc:1424 etc/inc/system.inc:1483 +#, php-format +msgid "Error: cannot open dmesg.boot in system_dmesg_save().%s" +msgstr "" + +#: etc/inc/system.inc:1397 etc/inc/system.inc:1454 etc/inc/system.inc:1496 +#: etc/inc/system.inc:1445 etc/inc/system.inc:1504 +msgid "Setting hard disk standby... " +msgstr "" + +#: etc/inc/system.inc:1514 etc/inc/system.inc:1571 etc/inc/system.inc:1613 +#: etc/inc/system.inc:1562 etc/inc/system.inc:1621 +msgid "Generic PC" +msgstr "" + +#: etc/inc/system.inc:1517 etc/inc/system.inc:1574 etc/inc/system.inc:1616 +#: etc/inc/system.inc:1565 etc/inc/system.inc:1624 +msgid "Generic PC (CD-ROM)" +msgstr "" + +#: etc/inc/system.inc:1526 etc/inc/system.inc:1583 etc/inc/system.inc:1625 +#: etc/inc/system.inc:1574 etc/inc/system.inc:1633 +msgid "PC Engines WRAP" +msgstr "" + +#: etc/inc/system.inc:1529 etc/inc/system.inc:1586 etc/inc/system.inc:1628 +#: etc/inc/system.inc:1577 etc/inc/system.inc:1636 +msgid "PC Engines ALIX" +msgstr "" + +#: etc/inc/system.inc:1541 etc/inc/system.inc:1598 etc/inc/system.inc:1640 +#: etc/inc/system.inc:1589 etc/inc/system.inc:1648 +msgid "embedded (unknown)" +msgstr "" + +#: etc/inc/util.inc:99 etc/inc/util.inc:101 etc/inc/util.inc:101 +#, php-format +msgid "WARNING: Could not mark subsystem: %s dirty" +msgstr "" + +#: etc/inc/util.inc:119 etc/inc/util.inc:121 etc/inc/util.inc:121 +msgid "WARNING: You must give a name as parameter to lock() function." +msgstr "" + +#: etc/inc/util.inc:213 etc/inc/util.inc:208 etc/inc/util.inc:238 +#: etc/inc/util.inc:240 etc/inc/util.inc:240 +#, php-format +msgid "Reference %s is going negative, not doing unreference." +msgstr "" + +#: etc/inc/util.inc:980 etc/inc/util.inc:981 etc/inc/util.inc:1026 +#: etc/inc/util.inc:1076 etc/inc/util.inc:1080 etc/inc/util.inc:1080 +#, php-format +msgid "The command '%1$s' returned exit code '%2$d', the output was '%3$s' " +msgstr "" + +#: etc/inc/vpn.inc:126 etc/inc/vpn.inc:134 etc/inc/vpn.inc:133 +msgid "Configuring IPsec VPN... " +msgstr "" + +#: etc/inc/vpn.inc:229 etc/inc/vpn.inc:228 etc/inc/vpn.inc:238 +#: etc/inc/vpn.inc:237 etc/inc/vpn.inc:236 +#, php-format +msgid "Error: Invalid certificate info for %s" +msgstr "" + +#: etc/inc/vpn.inc:235 etc/inc/vpn.inc:234 etc/inc/vpn.inc:244 +#: etc/inc/vpn.inc:243 etc/inc/vpn.inc:242 +#, php-format +msgid "Error: Invalid certificate hash info for %s" +msgstr "" + +#: etc/inc/vpn.inc:240 etc/inc/vpn.inc:239 etc/inc/vpn.inc:249 +#: etc/inc/vpn.inc:248 etc/inc/vpn.inc:247 +#, php-format +msgid "Error: Cannot write IPsec CA file for %s" +msgstr "" + +#: etc/inc/vpn.inc:249 etc/inc/vpn.inc:248 +#, php-format +msgid "Error: cannot open psk.txt in vpn_ipsec_configure()." +msgstr "" + +#: etc/inc/vpn.inc:312 etc/inc/vpn.inc:311 +#, php-format +msgid "Error: cannot open racoon.conf in vpn_ipsec_configure()." +msgstr "" + +#: etc/inc/vpn.inc:404 etc/inc/vpn.inc:403 +#, php-format +msgid "Error: cannot open server %s in vpn.\n" +msgstr "" + +#: etc/inc/vpn.inc:560 etc/inc/vpn.inc:559 etc/inc/vpn.inc:546 +#: etc/inc/vpn.inc:549 etc/inc/vpn.inc:548 +#, php-format +msgid "Error: Invalid phase1 certificate reference for %s" +msgstr "" + +#: etc/inc/vpn.inc:569 etc/inc/vpn.inc:568 etc/inc/vpn.inc:555 +#: etc/inc/vpn.inc:558 etc/inc/vpn.inc:557 +#, php-format +msgid "Error: Cannot write phase1 certificate file for %s" +msgstr "" + +#: etc/inc/vpn.inc:580 etc/inc/vpn.inc:579 etc/inc/vpn.inc:566 +#: etc/inc/vpn.inc:569 etc/inc/vpn.inc:568 +#, php-format +msgid "Error: Cannot write phase1 key file for %s" +msgstr "" + +#: etc/inc/vpn.inc:593 etc/inc/vpn.inc:592 etc/inc/vpn.inc:579 +#: etc/inc/vpn.inc:582 etc/inc/vpn.inc:581 +#, php-format +msgid "Error: Cannot write phase1 CA certificate file for %s" +msgstr "" + +#: etc/inc/vpn.inc:826 etc/inc/vpn.inc:829 +#, php-format +msgid "Error: cannot open spd.conf in vpn_ipsec_configure()." +msgstr "" + +#: etc/inc/vpn.inc:1008 etc/inc/vpn.inc:1014 etc/inc/vpn.inc:1013 +#: etc/inc/vpn.inc:1022 etc/inc/vpn.inc:1035 etc/inc/vpn.inc:1034 +msgid "Forcefully reloading IPsec racoon daemon" +msgstr "" + +#: etc/inc/vpn.inc:1052 etc/inc/vpn.inc:1058 etc/inc/vpn.inc:1056 +#: etc/inc/vpn.inc:1065 etc/inc/vpn.inc:1078 etc/inc/vpn.inc:1077 +msgid "Configuring PPTP VPN service... " +msgstr "" + +#: etc/inc/vpn.inc:1062 etc/inc/vpn.inc:1068 etc/inc/vpn.inc:1066 +#: etc/inc/vpn.inc:1075 etc/inc/vpn.inc:1088 etc/inc/vpn.inc:1087 +msgid "Could not kill mpd within 3 seconds. Trying again." +msgstr "" + +#: etc/inc/vpn.inc:1085 etc/inc/vpn.inc:1091 etc/inc/vpn.inc:1089 +#: etc/inc/vpn.inc:1098 etc/inc/vpn.inc:1111 etc/inc/vpn.inc:1110 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_pptpd_configure()." +msgstr "" + +#: etc/inc/vpn.inc:1198 etc/inc/vpn.inc:1204 etc/inc/vpn.inc:1202 +#: etc/inc/vpn.inc:1212 etc/inc/vpn.inc:1225 etc/inc/vpn.inc:1224 +#, php-format +msgid "Error: cannot open mpd.links in vpn_pptpd_configure()." +msgstr "" + +#: etc/inc/vpn.inc:1222 etc/inc/vpn.inc:1228 etc/inc/vpn.inc:1226 +#: etc/inc/vpn.inc:1237 etc/inc/vpn.inc:1250 etc/inc/vpn.inc:1249 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_pptpd_configure()." +msgstr "" + +#: etc/inc/vpn.inc:1279 etc/inc/vpn.inc:1285 etc/inc/vpn.inc:1283 +#: etc/inc/vpn.inc:1295 etc/inc/vpn.inc:1308 etc/inc/vpn.inc:1307 +msgid "Configuring PPPoE VPN service... " +msgstr "" + +#: etc/inc/vpn.inc:1303 etc/inc/vpn.inc:1309 etc/inc/vpn.inc:1307 +#: etc/inc/vpn.inc:1319 etc/inc/vpn.inc:1332 etc/inc/vpn.inc:1331 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_pppoe_configure()." +msgstr "" + +#: etc/inc/vpn.inc:1406 etc/inc/vpn.inc:1412 etc/inc/vpn.inc:1410 +#: etc/inc/vpn.inc:1423 etc/inc/vpn.inc:1436 etc/inc/vpn.inc:1435 +#, php-format +msgid "Error: cannot open mpd.links in vpn_pppoe_configure()." +msgstr "" + +#: etc/inc/vpn.inc:1432 etc/inc/vpn.inc:1438 etc/inc/vpn.inc:1436 +#: etc/inc/vpn.inc:1450 etc/inc/vpn.inc:1463 etc/inc/vpn.inc:1462 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_pppoe_configure()." +msgstr "" + +#: etc/inc/vpn.inc:1460 usr/local/www/system_firmware_check.php:139 +#: etc/inc/vpn.inc:1470 etc/inc/vpn.inc:1468 +#: usr/local/www/system_firmware_check.php:141 etc/inc/vpn.inc:1483 +#: usr/local/www/system_firmware_check.php:133 etc/inc/vpn.inc:1496 +#: usr/local/www/system_firmware_check.php:133 etc/inc/vpn.inc:1495 +msgid "done" +msgstr "" + +#: etc/inc/vpn.inc:1479 etc/inc/vpn.inc:1489 etc/inc/vpn.inc:1487 +#: etc/inc/vpn.inc:1502 etc/inc/vpn.inc:1515 etc/inc/vpn.inc:1514 +msgid "Configuring l2tp VPN service... " +msgstr "" + +#: etc/inc/vpn.inc:1504 etc/inc/vpn.inc:1514 etc/inc/vpn.inc:1512 +#: etc/inc/vpn.inc:1527 etc/inc/vpn.inc:1540 etc/inc/vpn.inc:1539 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_l2tp_configure()." +msgstr "" + +#: etc/inc/vpn.inc:1597 etc/inc/vpn.inc:1607 etc/inc/vpn.inc:1605 +#: etc/inc/vpn.inc:1621 etc/inc/vpn.inc:1634 etc/inc/vpn.inc:1633 +#, php-format +msgid "Error: cannot open mpd.links in vpn_l2tp_configure()." +msgstr "" + +#: etc/inc/vpn.inc:1622 etc/inc/vpn.inc:1632 etc/inc/vpn.inc:1630 +#: etc/inc/vpn.inc:1647 etc/inc/vpn.inc:1660 etc/inc/vpn.inc:1659 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_l2tp_configure()." +msgstr "" + +#: etc/inc/vpn.inc:1769 etc/inc/vpn.inc:1779 etc/inc/vpn.inc:1764 +#: etc/inc/vpn.inc:1836 etc/inc/vpn.inc:1849 etc/inc/vpn.inc:1846 +#, php-format +msgid "Could not determine VPN endpoint for '%s'" +msgstr "" + +#: etc/inc/vpn.inc:1774 etc/inc/vpn.inc:1784 etc/inc/vpn.inc:1769 +#: etc/inc/vpn.inc:1841 etc/inc/vpn.inc:1854 etc/inc/vpn.inc:1851 +#, php-format +msgid "" +"IPSEC: ERROR: One of the endpoints is not a IP address. Old EP '%1$s' new EP " +"'%2$s'" +msgstr "" + +#: etc/inc/vpn.inc:1777 etc/inc/vpn.inc:1787 etc/inc/vpn.inc:1772 +#: etc/inc/vpn.inc:1844 etc/inc/vpn.inc:1857 etc/inc/vpn.inc:1854 +#, php-format +msgid "" +"IPSEC: ERROR: One of the remote endpoints is not a IP address. Old RG '%1$s' " +"new RG '%2$s'" +msgstr "" + +#: etc/inc/vpn.inc:1833 etc/inc/vpn.inc:1843 etc/inc/vpn.inc:1835 +#: etc/inc/vpn.inc:1907 etc/inc/vpn.inc:1920 etc/inc/vpn.inc:1917 +#, php-format +msgid "" +"Reloading IPsec tunnel '%1$s'. Previous IP '%2$s', current IP '%3$s'. " +"Reloading policy" +msgstr "" + +#: etc/inc/xmlparse.inc:85 etc/inc/xmlparse_attr.inc:78 +#: etc/inc/xmlparse_attr.inc:78 etc/inc/xmlparse.inc:85 +#, php-format +msgid "XML error: %1$s at line %2$d cannot occur more than once" +msgstr "" + +#: etc/inc/xmlparse.inc:176 etc/inc/xmlparse_attr.inc:187 +#: etc/inc/xmlparse_attr.inc:187 etc/inc/xmlparse.inc:176 +msgid "Error: could not open XML input" +msgstr "" + +#: etc/inc/xmlparse.inc:182 etc/inc/xmlparse.inc:182 +#, php-format +msgid "XML error: %1$s at line %2$d in %3$s" +msgstr "" + +#: etc/inc/xmlparse.inc:198 etc/inc/xmlparse_attr.inc:210 +#: etc/inc/xmlparse.inc:199 etc/inc/xmlparse_attr.inc:210 +#: etc/inc/xmlparse.inc:199 +#, php-format +msgid "XML error: no %s object found!" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:152 etc/inc/xmlrpc_client.inc:152 +msgid "Unknown method" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:153 etc/inc/xmlrpc_client.inc:153 +msgid "Invalid return payload: enable debugging to examine incoming payload" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:154 etc/inc/xmlrpc_client.inc:154 +msgid "Incorrect parameters passed to method" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:155 etc/inc/xmlrpc_client.inc:155 +msgid "Can't introspect: method unknown" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:156 etc/inc/xmlrpc_client.inc:156 +msgid "Didn't receive 200 OK from remote server." +msgstr "" + +#: etc/inc/xmlrpc_client.inc:157 etc/inc/xmlrpc_client.inc:157 +msgid "The requested method didn't return an XML_RPC_Response object." +msgstr "" + +#: etc/inc/xmlrpc_client.inc:158 etc/inc/xmlrpc_client.inc:158 +msgid "Invalid request payload" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:260 etc/inc/xmlrpc_client.inc:260 +msgid "missing top level xmlrpc element" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:268 etc/inc/xmlrpc_client.inc:268 +#, php-format +msgid "xmlrpc element %1$s cannot be child of %2$s" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:431 etc/inc/xmlrpc_client.inc:431 +msgid "Non-numeric value received in INT or DOUBLE" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:860 etc/inc/xmlrpc_client.inc:860 +#, php-format +msgid "send()'s %s parameter must be an XML_RPC_Message object." +msgstr "" + +#: etc/inc/xmlrpc_client.inc:951 etc/inc/xmlrpc_client.inc:951 +#, php-format +msgid "" +"Connection to proxy server \n" +" %1$s:%2$s failed. %3$s" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:957 etc/inc/xmlrpc_client.inc:957 +#, php-format +msgid "" +"Connection to RPC server \n" +" %1$s:%2$s failed. %3$s" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:1330 etc/inc/xmlrpc_client.inc:1330 +msgid "The submitted request did not contain this parameter" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:1361 etc/inc/xmlrpc_client.inc:1361 +msgid "mb_convert_encoding() is not available" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:1470 etc/inc/xmlrpc_client.inc:1470 +#, php-format +msgid "HTTP error, got response: %s" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:1496 +msgid "XML error at line 1, check URL" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:1591 etc/inc/xmlrpc_client.inc:1593 +#: etc/inc/xmlrpc_client.inc:1593 +msgid "Scalar can have only one value" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:1598 etc/inc/xmlrpc_client.inc:1600 +#: etc/inc/xmlrpc_client.inc:1600 +#, php-format +msgid "Not a scalar type (%s)" +msgstr "" + +#: etc/inc/xmlrpc_client.inc:1634 etc/inc/xmlrpc_client.inc:1650 +#: etc/inc/xmlrpc_client.inc:1636 etc/inc/xmlrpc_client.inc:1652 +#: etc/inc/xmlrpc_client.inc:1636 etc/inc/xmlrpc_client.inc:1652 +#, php-format +msgid "Already initialized as a [%s]" +msgstr "" + +#: etc/inc/xmlrpc_server.inc:48 etc/inc/xmlrpc_server.inc:48 +msgid "" +"This method lists all the methods that the XML-RPC server knows how to " +"dispatch" +msgstr "" + +#: etc/inc/xmlrpc_server.inc:66 etc/inc/xmlrpc_server.inc:66 +msgid "" +"Returns an array of known signatures (an array of arrays) for the method " +"name passed. If no signatures are known, returns a none-array (test for " +"type != array to detect missing signature)" +msgstr "" + +#: etc/inc/xmlrpc_server.inc:86 etc/inc/xmlrpc_server.inc:86 +msgid "" +"Returns help text if defined for the method passed, otherwise returns an " +"empty string" +msgstr "" + +#: etc/inc/authgui.inc:73 etc/inc/authgui.inc:73 +msgid "No page assigned to this user! Click here to logout." +msgstr "" + +#: etc/inc/authgui.inc:97 etc/inc/authgui.inc:103 etc/inc/authgui.inc:103 +#, php-format +msgid "Error: %1$s Description: %2$s" +msgstr "" + +#: etc/inc/authgui.inc:160 etc/inc/authgui.inc:159 etc/inc/authgui.inc:165 +#: etc/inc/authgui.inc:165 +msgid "unknown reason" +msgstr "" + +#: etc/inc/authgui.inc:161 etc/inc/authgui.inc:160 etc/inc/authgui.inc:166 +#: etc/inc/authgui.inc:166 +#, php-format +msgid "Invalid login (%s)." +msgstr "" + +#: etc/inc/authgui.inc:166 etc/inc/authgui.inc:165 etc/inc/authgui.inc:171 +#: etc/inc/authgui.inc:171 +#, php-format +msgid "This device is currently being maintained by: %s." +msgstr "" + +#: etc/inc/authgui.inc:214 etc/inc/authgui.inc:277 etc/inc/authgui.inc:212 +#: etc/inc/authgui.inc:275 etc/inc/authgui.inc:235 etc/inc/authgui.inc:298 +#: etc/inc/authgui.inc:235 etc/inc/authgui.inc:298 +msgid "Login" +msgstr "" + +#: etc/inc/authgui.inc:242 etc/inc/authgui.inc:240 etc/inc/authgui.inc:263 +#: etc/inc/authgui.inc:263 +msgid "" +"You are accessing this router by an IP address not configured locally, which " +"may be forwarded by NAT or other means.

    If you did not setup this " +"forwarding, you may be the target of a man-in-the-middle attack." +msgstr "" + +#: etc/inc/authgui.inc:251 etc/inc/authgui.inc:249 etc/inc/authgui.inc:272 +#: etc/inc/authgui.inc:272 +msgid "Username:" +msgstr "" + +#: etc/inc/authgui.inc:258 usr/local/www/diag_backup.php:597 +#: usr/local/www/system_authservers.php:627 etc/inc/authgui.inc:256 +#: usr/local/www/diag_backup.php:676 usr/local/www/system_authservers.php:632 +#: usr/local/www/system_authservers.php:639 usr/local/www/diag_backup.php:681 +#: etc/inc/authgui.inc:279 usr/local/www/system_authservers.php:639 +#: usr/local/www/diag_backup.php:681 etc/inc/authgui.inc:279 +msgid "Password:" +msgstr "" + +#: etc/inc/authgui.inc:265 etc/inc/authgui.inc:263 etc/inc/authgui.inc:286 +#: etc/inc/authgui.inc:286 +msgid "Enter username and password to login." +msgstr "" + +#: etc/inc/authgui.inc:271 etc/inc/authgui.inc:269 etc/inc/authgui.inc:292 +#: etc/inc/authgui.inc:292 +msgid "Your browser must support cookies to login." +msgstr "" + +#: etc/inc/cmd_chain.inc:101 +#, php-format +msgid "CmdCHAIN is executing -> %1$s - %2$s" +msgstr "" + +#: etc/inc/cmd_chain.inc:109 etc/inc/cmd_chain.inc:111 +#, php-format +msgid "%1$s failed with return code -> %2$s. The command was %3$s" +msgstr "" + +#: etc/inc/config.console.inc:58 etc/inc/config.console.inc:58 +msgid "DANGER! WARNING! ACHTUNG!" +msgstr "" + +#: etc/inc/config.console.inc:59 etc/inc/config.console.inc:59 +#, php-format +msgid "%s requires *AT LEAST* %s RAM to function correctly.%s" +msgstr "" + +#: etc/inc/config.console.inc:60 etc/inc/config.console.inc:60 +#, php-format +msgid "Only (%s) MB RAM has been detected.%s" +msgstr "" + +#: etc/inc/config.console.inc:61 etc/inc/config.console.inc:61 +msgid "Press ENTER to continue." +msgstr "" + +#: etc/inc/config.console.inc:83 etc/inc/config.console.inc:495 +#: etc/inc/config.console.inc:497 etc/inc/config.console.inc:83 +#: etc/inc/config.console.inc:497 +msgid "No interfaces found!" +msgstr "" + +#: etc/inc/config.console.inc:181 etc/inc/config.console.inc:181 +msgid "VLAN interfaces:" +msgstr "" + +#: etc/inc/config.console.inc:207 etc/inc/config.console.inc:207 +msgid "Enter the WAN interface name or 'a' for auto-detection:" +msgstr "" + +#: etc/inc/config.console.inc:215 etc/inc/config.console.inc:276 +#: etc/inc/config.console.inc:518 etc/inc/config.console.inc:520 +#: etc/inc/config.console.inc:244 etc/inc/config.console.inc:215 +#: etc/inc/config.console.inc:244 etc/inc/config.console.inc:276 +#: etc/inc/config.console.inc:520 +#, php-format +msgid "%sInvalid interface name '%s'%s" +msgstr "" + +#: etc/inc/config.console.inc:222 etc/inc/config.console.inc:222 +#, php-format +msgid "" +"%sEnter the LAN interface name or 'a' for auto-detection %sNOTE: this " +"enables full Firewalling/NAT mode.%s(or nothing if finished):%s" +msgstr "" + +#: etc/inc/config.console.inc:244 +#, php-format +msgid "%sInvalid interface name '%s'%s)" +msgstr "" + +#: etc/inc/config.console.inc:261 etc/inc/config.console.inc:261 +#, php-format +msgid "%sOptional interface %s description found: %s" +msgstr "" + +#: etc/inc/config.console.inc:264 +#, php-format +msgid "(or nothing if finished):%s" +msgstr "" + +#: etc/inc/config.console.inc:270 etc/inc/config.console.inc:270 +msgid "Optional" +msgstr "" + +#: etc/inc/config.console.inc:304 etc/inc/config.console.inc:304 +msgid "The interfaces will be assigned as follows:" +msgstr "" + +#: etc/inc/config.console.inc:416 etc/inc/config.console.inc:418 +#: etc/inc/config.console.inc:418 +#, php-format +msgid "%sWriting configuration..." +msgstr "" + +#: etc/inc/config.console.inc:418 etc/inc/config.console.inc:420 +#: etc/inc/config.console.inc:420 +#, php-format +msgid "done.%s" +msgstr "" + +#: etc/inc/config.console.inc:425 etc/inc/config.console.inc:427 +#: etc/inc/config.console.inc:427 +msgid "One moment while we reload the settings..." +msgstr "" + +#: etc/inc/config.console.inc:429 etc/inc/config.console.inc:431 +#: etc/inc/config.console.inc:431 +msgid " done!" +msgstr "" + +#: etc/inc/config.console.inc:449 etc/inc/config.console.inc:451 +#: etc/inc/config.console.inc:451 +#, php-format +msgid "Detected link-up on interface %s.%s" +msgstr "" + +#: etc/inc/config.console.inc:454 etc/inc/config.console.inc:456 +#: etc/inc/config.console.inc:456 +#, php-format +msgid "No link-up detected.%s" +msgstr "" + +#: etc/inc/config.console.inc:493 etc/inc/config.console.inc:495 +#: etc/inc/config.console.inc:495 +msgid "VLAN Capable interfaces:" +msgstr "" + +#: etc/inc/config.console.inc:508 etc/inc/config.console.inc:510 +#: etc/inc/config.console.inc:510 +msgid "No VLAN capable interfaces detected." +msgstr "" + +#: etc/inc/config.console.inc:512 etc/inc/config.console.inc:514 +#: etc/inc/config.console.inc:514 +msgid "" +"Enter the parent interface name for the new VLAN (or nothing if finished):" +msgstr "" + +#: etc/inc/config.console.inc:525 etc/inc/config.console.inc:527 +#: etc/inc/config.console.inc:527 +msgid "Enter the VLAN tag (1-4094):" +msgstr "" + +#: etc/inc/config.console.inc:529 etc/inc/config.console.inc:531 +#: etc/inc/config.console.inc:531 +#, php-format +msgid "%sInvalid VLAN tag '%s'%s" +msgstr "" + +#: etc/inc/config.lib.inc:79 etc/inc/config.lib.inc:79 +msgid "Config.xml unlocked." +msgstr "" + +#: etc/inc/config.lib.inc:82 etc/inc/config.lib.inc:82 +msgid "Invalid password entered. Please try again." +msgstr "" + +#: etc/inc/config.lib.inc:110 etc/inc/config.lib.inc:140 +#: etc/inc/config.lib.inc:271 etc/inc/config.lib.inc:110 +#: etc/inc/config.lib.inc:140 etc/inc/config.lib.inc:271 +msgid "" +"Config.xml is corrupted and is 0 bytes. Could not restore a previous backup." +msgstr "" + +#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149 +#: etc/inc/config.lib.inc:552 etc/inc/config.lib.inc:560 +#: etc/inc/config.lib.inc:577 etc/inc/config.lib.inc:555 +#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149 +#: etc/inc/config.lib.inc:555 +msgid "Could not restore config.xml." +msgstr "" + +#: etc/inc/config.lib.inc:210 etc/inc/config.lib.inc:211 +#: etc/inc/config.lib.inc:210 etc/inc/config.lib.inc:211 +#, php-format +msgid "%1$s is restoring the configuration %2$s" +msgstr "" + +#: etc/inc/config.lib.inc:233 etc/inc/config.lib.inc:233 +msgid "Resetting factory defaults..." +msgstr "" + +#: etc/inc/config.lib.inc:236 etc/inc/config.lib.inc:236 +msgid "" +"No XML configuration file found - using factory defaults.\n" +"Make sure that the configuration floppy disk with the conf/config.xml\n" +"file is inserted. If it isn't, your configuration changes will be lost\n" +"on reboot.\n" +msgstr "" + +#: etc/inc/config.lib.inc:249 etc/inc/config.lib.inc:249 +#, php-format +msgid "XML configuration file not found. %s cannot continue booting." +msgstr "" + +#: etc/inc/config.lib.inc:255 etc/inc/config.lib.inc:255 +msgid "" +"Last known config found and restored. Please double check your " +"configuration file for accuracy." +msgstr "" + +#: etc/inc/config.lib.inc:317 etc/inc/config.lib.inc:320 +#: etc/inc/config.lib.inc:320 +msgid "Disk is dirty. Running fsck -y" +msgstr "" + +#: etc/inc/config.lib.inc:328 etc/inc/config.lib.inc:331 +#: etc/inc/config.lib.inc:331 +msgid "File system is dirty. Launching FSCK for /" +msgstr "" + +#: etc/inc/config.lib.inc:379 etc/inc/config.lib.inc:382 +#: etc/inc/config.lib.inc:382 +#, php-format +msgid "Start Configuration upgrade at %s, set execution timeout to 15 minutes" +msgstr "" + +#: etc/inc/config.lib.inc:389 etc/inc/config.lib.inc:390 +#: etc/inc/config.lib.inc:392 etc/inc/config.lib.inc:393 +#: etc/inc/config.lib.inc:392 etc/inc/config.lib.inc:393 +msgid "Updated bogon update frequency to 3am" +msgstr "" + +#: etc/inc/config.lib.inc:420 etc/inc/config.lib.inc:423 +#: etc/inc/config.lib.inc:423 +#, php-format +msgid "Ended Configuration upgrade at %s" +msgstr "" + +#: etc/inc/config.lib.inc:423 etc/inc/config.lib.inc:426 +#: etc/inc/config.lib.inc:426 +#, php-format +msgid "Upgraded config version level from %1$s to %2$s" +msgstr "" + +#: etc/inc/config.lib.inc:512 etc/inc/config.lib.inc:520 +#: etc/inc/config.lib.inc:537 etc/inc/config.lib.inc:903 +#: etc/inc/config.lib.inc:903 +#, php-format +msgid "%s made unknown change" +msgstr "" + +#: etc/inc/config.lib.inc:525 etc/inc/config.lib.inc:533 +#: etc/inc/config.lib.inc:550 etc/inc/config.lib.inc:528 +#: etc/inc/config.lib.inc:528 +msgid "WARNING: Config contents could not be save. Could not open file!" +msgstr "" + +#: etc/inc/config.lib.inc:527 etc/inc/config.lib.inc:535 +#: etc/inc/config.lib.inc:552 etc/inc/config.lib.inc:530 +#: etc/inc/config.lib.inc:530 +#, php-format +msgid "Unable to open %s/config.xml for writing in write_config()%s" +msgstr "" + +#: etc/inc/config.lib.inc:636 etc/inc/config.lib.inc:644 +#: etc/inc/config.lib.inc:661 etc/inc/config.lib.inc:639 +#: etc/inc/config.lib.inc:639 +msgid "Reverted to" +msgstr "" + +#: etc/inc/config.lib.inc:651 etc/inc/config.lib.inc:659 +#: etc/inc/config.lib.inc:676 etc/inc/config.lib.inc:654 +#: etc/inc/config.lib.inc:654 +msgid "Installing configuration..." +msgstr "" + +#: etc/inc/config.lib.inc:653 etc/inc/config.lib.inc:661 +#: etc/inc/config.lib.inc:678 etc/inc/config.lib.inc:656 +#: etc/inc/config.lib.inc:656 +msgid "Installing configuration ...." +msgstr "" + +#: etc/inc/config.lib.inc:704 etc/inc/config.lib.inc:712 +#: etc/inc/config.lib.inc:729 etc/inc/config.lib.inc:707 +#: etc/inc/config.lib.inc:707 +msgid "XML error: unable to open file" +msgstr "" + +#: etc/inc/config.lib.inc:710 etc/inc/config.lib.inc:718 +#: etc/inc/config.lib.inc:735 etc/inc/config.lib.inc:713 +#: etc/inc/config.lib.inc:713 +#, php-format +msgid "%1$s at line %2$d" +msgstr "" + +#: etc/inc/config.lib.inc:756 etc/inc/config.lib.inc:758 +#: etc/inc/config.lib.inc:764 etc/inc/config.lib.inc:766 +#: etc/inc/config.lib.inc:781 etc/inc/config.lib.inc:783 +#: etc/inc/config.lib.inc:759 etc/inc/config.lib.inc:761 +#: etc/inc/config.lib.inc:759 etc/inc/config.lib.inc:761 +#, php-format +msgid "The backup cache file %s is corrupted. Unlinking." +msgstr "" + +#: etc/inc/easyrule.inc:116 etc/inc/easyrule.inc:117 etc/inc/easyrule.inc:117 +msgid "Easy Rule: Blocked from Firewall Log View" +msgstr "" + +#: etc/inc/easyrule.inc:165 etc/inc/easyrule.inc:173 etc/inc/easyrule.inc:181 +#: etc/inc/easyrule.inc:177 etc/inc/easyrule.inc:185 etc/inc/easyrule.inc:178 +#: etc/inc/easyrule.inc:186 etc/inc/easyrule.inc:178 etc/inc/easyrule.inc:186 +msgid "Entry added" +msgstr "" + +#: etc/inc/easyrule.inc:170 etc/inc/easyrule.inc:178 etc/inc/easyrule.inc:182 +#: etc/inc/easyrule.inc:183 etc/inc/easyrule.inc:183 +msgid "Hosts blocked from Firewall Log view" +msgstr "" + +#: etc/inc/easyrule.inc:249 etc/inc/easyrule.inc:257 etc/inc/easyrule.inc:262 +#: etc/inc/easyrule.inc:263 etc/inc/easyrule.inc:263 +msgid "Easy Rule: Passed from Firewall Log View" +msgstr "" + +#: etc/inc/easyrule.inc:280 etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:309 +#: etc/inc/easyrule.inc:313 etc/inc/easyrule.inc:318 etc/inc/easyrule.inc:318 +msgid "Tried to block invalid IP:" +msgstr "" + +#: etc/inc/easyrule.inc:284 etc/inc/easyrule.inc:307 etc/inc/easyrule.inc:313 +#: etc/inc/easyrule.inc:317 etc/inc/easyrule.inc:322 etc/inc/easyrule.inc:322 +msgid "Invalid interface for block rule:" +msgstr "" + +#: etc/inc/easyrule.inc:287 etc/inc/easyrule.inc:310 etc/inc/easyrule.inc:316 +#: etc/inc/easyrule.inc:320 etc/inc/easyrule.inc:325 etc/inc/easyrule.inc:325 +msgid "Host added successfully" +msgstr "" + +#: etc/inc/easyrule.inc:289 etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:318 +#: etc/inc/easyrule.inc:322 etc/inc/easyrule.inc:327 etc/inc/easyrule.inc:327 +msgid "Failed to create block rule, alias, or add host." +msgstr "" + +#: etc/inc/easyrule.inc:292 etc/inc/easyrule.inc:315 etc/inc/easyrule.inc:321 +#: etc/inc/easyrule.inc:325 etc/inc/easyrule.inc:330 etc/inc/easyrule.inc:330 +msgid "Tried to block but had no host IP or interface" +msgstr "" + +#: etc/inc/easyrule.inc:294 etc/inc/easyrule.inc:317 etc/inc/easyrule.inc:323 +#: etc/inc/easyrule.inc:327 etc/inc/easyrule.inc:332 etc/inc/easyrule.inc:332 +msgid "Unknown block error." +msgstr "" + +#: etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:334 +#: etc/inc/easyrule.inc:338 etc/inc/easyrule.inc:343 etc/inc/easyrule.inc:343 +msgid "Invalid interface for pass rule:" +msgstr "" + +#: etc/inc/easyrule.inc:306 etc/inc/easyrule.inc:329 etc/inc/easyrule.inc:337 +#: etc/inc/easyrule.inc:341 etc/inc/easyrule.inc:346 etc/inc/easyrule.inc:346 +msgid "Invalid protocol for pass rule:" +msgstr "" + +#: etc/inc/easyrule.inc:309 etc/inc/easyrule.inc:332 etc/inc/easyrule.inc:340 +#: etc/inc/easyrule.inc:344 etc/inc/easyrule.inc:349 etc/inc/easyrule.inc:349 +msgid "Tried to pass invalid source IP:" +msgstr "" + +#: etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:335 etc/inc/easyrule.inc:343 +#: etc/inc/easyrule.inc:347 etc/inc/easyrule.inc:352 etc/inc/easyrule.inc:352 +msgid "Tried to pass invalid destination IP:" +msgstr "" + +#: etc/inc/easyrule.inc:316 etc/inc/easyrule.inc:339 etc/inc/easyrule.inc:347 +#: etc/inc/easyrule.inc:351 etc/inc/easyrule.inc:356 etc/inc/easyrule.inc:356 +msgid "Missing destination port:" +msgstr "" + +#: etc/inc/easyrule.inc:319 etc/inc/easyrule.inc:342 etc/inc/easyrule.inc:350 +#: etc/inc/easyrule.inc:354 etc/inc/easyrule.inc:359 etc/inc/easyrule.inc:359 +msgid "Tried to pass invalid destination port:" +msgstr "" + +#: etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:349 etc/inc/easyrule.inc:357 +#: etc/inc/easyrule.inc:361 etc/inc/easyrule.inc:366 etc/inc/easyrule.inc:366 +msgid "Successfully added pass rule!" +msgstr "" + +#: etc/inc/easyrule.inc:328 etc/inc/easyrule.inc:351 etc/inc/easyrule.inc:359 +#: etc/inc/easyrule.inc:363 etc/inc/easyrule.inc:368 etc/inc/easyrule.inc:368 +msgid "Failed to add pass rule." +msgstr "" + +#: etc/inc/easyrule.inc:331 etc/inc/easyrule.inc:354 etc/inc/easyrule.inc:362 +#: etc/inc/easyrule.inc:366 etc/inc/easyrule.inc:371 etc/inc/easyrule.inc:371 +msgid "Missing parameters for pass rule." +msgstr "" + +#: etc/inc/easyrule.inc:333 etc/inc/easyrule.inc:356 etc/inc/easyrule.inc:364 +#: etc/inc/easyrule.inc:368 etc/inc/easyrule.inc:373 etc/inc/easyrule.inc:373 +msgid "Unknown pass error." +msgstr "" + +#: etc/inc/filter_log.inc:164 etc/inc/filter_log.inc:167 +#: etc/inc/filter_log.inc:191 etc/inc/filter_log.inc:201 +#: etc/inc/filter_log.inc:201 +#, php-format +msgid "" +"There was a error parsing rule: %s. Please report to mailing list or forum." +msgstr "" + +#: etc/inc/filter_log.inc:208 etc/inc/filter_log.inc:210 +#: etc/inc/filter_log.inc:213 etc/inc/filter_log.inc:237 +#: etc/inc/filter_log.inc:247 etc/inc/filter_log.inc:247 +#, php-format +msgid "Service %1$s/%2$s: %3$s" +msgstr "" + +#: etc/inc/gwlb.inc:230 etc/inc/gwlb.inc:237 etc/inc/gwlb.inc:242 +#: etc/inc/gwlb.inc:244 etc/inc/gwlb.inc:244 +#, php-format +msgid "" +"Removing static route for monitor %1$s and adding a new route through %2$s" +msgstr "" + +#: etc/inc/gwlb.inc:501 etc/inc/gwlb.inc:727 etc/inc/gwlb.inc:750 +#, php-format +msgid "MONITOR: %s is down, removing from routing group" +msgstr "" + +#: etc/inc/gwlb.inc:505 etc/inc/gwlb.inc:731 etc/inc/gwlb.inc:754 +#, php-format +msgid "MONITOR: %s has packet loss, removing from routing group" +msgstr "" + +#: etc/inc/gwlb.inc:509 etc/inc/gwlb.inc:735 etc/inc/gwlb.inc:758 +#, php-format +msgid "MONITOR: %s has high latency, removing from routing group" +msgstr "" + +#: etc/inc/gwlb.inc:526 etc/inc/gwlb.inc:752 etc/inc/gwlb.inc:775 +msgid "Gateways status could not be determined, considering all as up/active." +msgstr "" + +#: etc/inc/gwlb.inc:580 etc/inc/gwlb.inc:809 etc/inc/gwlb.inc:835 +#: etc/inc/gwlb.inc:844 etc/inc/gwlb.inc:823 etc/inc/gwlb.inc:807 +#: etc/inc/gwlb.inc:807 +#, php-format +msgid "Updating gateway group gateway for %1$s - new gateway is %2$s" +msgstr "" + +#: etc/inc/ipsec.inc:39 etc/inc/ipsec.inc:39 +msgid "My IP address" +msgstr "" + +#: etc/inc/ipsec.inc:40 etc/inc/ipsec.inc:49 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:114 +#: usr/local/www/diag_logs_vpn.php:178 +#: usr/local/www/status_captiveportal.php:160 +#: usr/local/www/services_captiveportal.php:602 +#: usr/local/www/services_captiveportal.php:623 +#: usr/local/www/services_captiveportal.php:642 +#: usr/local/www/services_captiveportal.php:661 +#: usr/local/www/services_captiveportal_ip.php:117 +#: usr/local/www/services_captiveportal_ip_edit.php:195 +#: usr/local/www/services_dhcp.php:891 +#: usr/local/www/services_dhcp_edit.php:221 +#: usr/local/www/services_dnsmasq_edit.php:80 +#: usr/local/www/services_dnsmasq_edit.php:156 +#: usr/local/www/vpn_pptp_users.php:99 +#: usr/local/www/vpn_pptp_users_edit.php:160 usr/local/www/diag_arp.php:313 +#: usr/local/www/status_dhcp_leases.php:318 +#: usr/local/www/system_advanced_network.php:226 +#: usr/local/www/vpn_ipsec_phase2.php:635 usr/local/www/vpn_l2tp_users.php:102 +#: usr/local/www/vpn_l2tp_users_edit.php:168 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:211 +#: usr/local/www/diag_logs_vpn.php:177 +#: usr/local/www/services_captiveportal.php:638 +#: usr/local/www/services_captiveportal.php:659 +#: usr/local/www/services_captiveportal.php:681 +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/status_dhcp_leases.php:339 +#: usr/local/www/services_dhcp.php:929 usr/local/www/vpn_ipsec_phase2.php:661 +#: usr/local/www/services_dhcp_edit.php:224 +#: usr/local/www/services_dnsmasq_edit.php:212 +#: usr/local/www/services_captiveportal_ip.php:115 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137 +#: usr/local/www/vpn_l2tp_users.php:103 +#: usr/local/www/services_captiveportal.php:636 +#: usr/local/www/services_captiveportal.php:657 +#: usr/local/www/services_captiveportal.php:679 +#: usr/local/www/services_captiveportal.php:698 +#: usr/local/www/status_dhcp_leases.php:341 +#: usr/local/www/services_captiveportal_ip_edit.php:193 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/vpn_ipsec_phase2.php:757 +#: usr/local/www/vpn_pptp_users_edit.php:161 +#: usr/local/www/services_dhcp_edit.php:223 +#: usr/local/www/vpn_l2tp_users_edit.php:169 +#: usr/local/www/vpn_pptp_users.php:100 +#: usr/local/www/services_captiveportal_ip_edit.php:187 +#: usr/local/www/services_dhcp_edit.php:351 +#: usr/local/www/services_dhcp.php:1152 +#: usr/local/www/status_captiveportal.php:146 +#: usr/local/www/services_captiveportal.php:637 +#: usr/local/www/services_captiveportal.php:658 +#: usr/local/www/services_captiveportal.php:680 +#: usr/local/www/services_captiveportal.php:699 +#: usr/local/www/vpn_ipsec_phase2.php:778 usr/local/www/services_dhcp.php:1172 +#: usr/local/www/services_captiveportal.php:653 +#: usr/local/www/services_captiveportal.php:674 +#: usr/local/www/services_captiveportal.php:696 +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/system_advanced_network.php:227 +#: usr/local/www/services_captiveportal_ip_edit.php:187 +#: usr/local/www/diag_arp.php:313 usr/local/www/vpn_pptp_users.php:100 +#: usr/local/www/services_captiveportal_ip.php:115 +#: usr/local/www/services_dhcp_edit.php:351 +#: usr/local/www/services_dhcp.php:1172 usr/local/www/vpn_l2tp_users.php:103 +#: usr/local/www/status_captiveportal.php:146 +#: usr/local/www/services_captiveportal.php:653 +#: usr/local/www/services_captiveportal.php:674 +#: usr/local/www/services_captiveportal.php:696 +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/status_dhcp_leases.php:341 +#: usr/local/www/vpn_l2tp_users_edit.php:169 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:212 +#: usr/local/www/diag_logs_vpn.php:177 +#: usr/local/www/vpn_pptp_users_edit.php:161 +#: usr/local/www/system_advanced_network.php:227 +#: usr/local/www/vpn_ipsec_phase2.php:778 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137 +#: etc/inc/ipsec.inc:40 etc/inc/ipsec.inc:49 +msgid "IP address" +msgstr "" + +#: etc/inc/ipsec.inc:41 etc/inc/ipsec.inc:50 +#: usr/local/www/system_camanager.php:476 +#: usr/local/www/system_certmanager.php:589 +#: usr/local/www/system_certmanager.php:672 +#: usr/local/www/system_certmanager.php:705 +#: usr/local/www/system_certmanager.php:838 +#: usr/local/www/system_camanager.php:477 +#: usr/local/www/system_camanager.php:500 +#: usr/local/www/system_certmanager.php:730 +#: usr/local/www/system_certmanager.php:879 +#: usr/local/www/system_certmanager.php:731 +#: usr/local/www/system_certmanager.php:883 +#: usr/local/www/system_camanager.php:500 +#: usr/local/www/system_certmanager.php:731 +#: usr/local/www/system_certmanager.php:883 etc/inc/ipsec.inc:41 +#: etc/inc/ipsec.inc:50 +msgid "Distinguished name" +msgstr "" + +#: etc/inc/ipsec.inc:42 etc/inc/ipsec.inc:51 etc/inc/ipsec.inc:42 +#: etc/inc/ipsec.inc:51 +msgid "User distinguished name" +msgstr "" + +#: etc/inc/ipsec.inc:43 etc/inc/ipsec.inc:52 etc/inc/ipsec.inc:43 +#: etc/inc/ipsec.inc:52 +msgid "ASN.1 distinguished Name" +msgstr "" + +#: etc/inc/ipsec.inc:44 etc/inc/ipsec.inc:53 etc/inc/ipsec.inc:44 +#: etc/inc/ipsec.inc:53 +msgid "KeyID tag" +msgstr "" + +#: etc/inc/ipsec.inc:45 usr/local/www/services_dhcp.php:722 +#: usr/local/www/fbegin.inc:128 usr/local/www/services_dhcpv6.php:648 +#: usr/local/www/fbegin.inc:145 usr/local/www/services_dhcp.php:760 +#: usr/local/www/services_dhcpv6.php:741 usr/local/www/fbegin.inc:154 +#: usr/local/www/services_dhcp.php:942 usr/local/www/services_dhcpv6.php:672 +#: usr/local/www/services_dhcp_edit.php:451 +#: usr/local/www/services_dhcp.php:955 usr/local/www/services_dhcpv6.php:689 +#: usr/local/www/fbegin.inc:146 usr/local/www/services_dhcp.php:975 +#: usr/local/www/services_dhcp_edit.php:451 +#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcpv6.php:689 +#: usr/local/www/fbegin.inc:146 etc/inc/ipsec.inc:45 +msgid "Dynamic DNS" +msgstr "" + +#: etc/inc/ipsec.inc:48 etc/inc/ipsec.inc:48 +msgid "Peer IP address" +msgstr "" + +#: etc/inc/ipsec.inc:256 usr/local/www/vpn_ipsec.php:206 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase2.php:255 usr/local/www/vpn_ipsec.php:217 +#: usr/local/www/vpn_ipsec_phase2.php:268 etc/inc/ipsec.inc:281 +#: usr/local/www/vpn_ipsec.php:216 usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec.php:222 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase2.php:316 etc/inc/ipsec.inc:289 +#: usr/local/www/vpn_ipsec.php:222 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase2.php:316 etc/inc/ipsec.inc:289 +msgid "Mobile Client" +msgstr "" + +#: etc/inc/ipsec.inc:258 usr/local/www/interfaces_bridge_edit.php:428 +#: usr/local/www/firewall_nat_edit.php:797 +#: usr/local/www/firewall_nat_edit.php:828 usr/local/www/interfaces.php:1032 +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1385 +#: usr/local/www/interfaces.php:1491 usr/local/www/interfaces.php:1567 +#: usr/local/www/vpn_ipsec_phase2.php:435 +#: usr/local/www/interfaces_bridge_edit.php:437 +#: usr/local/www/vpn_ipsec_phase2.php:461 +#: usr/local/www/firewall_nat_edit.php:805 +#: usr/local/www/firewall_nat_edit.php:836 usr/local/www/interfaces.php:1118 +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1489 +#: usr/local/www/interfaces.php:1597 etc/inc/ipsec.inc:283 +#: usr/local/www/system_advanced_misc.php:386 +#: usr/local/www/interfaces_bridge_edit.php:438 +#: usr/local/www/vpn_ipsec_phase2.php:527 +#: usr/local/www/vpn_ipsec_phase2.php:563 +#: usr/local/www/firewall_nat_edit.php:804 +#: usr/local/www/firewall_nat_edit.php:835 usr/local/www/interfaces.php:1106 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1477 +#: usr/local/www/interfaces.php:1585 usr/local/www/firewall_nat_edit.php:799 +#: usr/local/www/firewall_nat_edit.php:830 +#: usr/local/www/diag_system_pftop.php:155 +#: usr/local/www/system_advanced_misc.php:398 +#: usr/local/www/interfaces_bridge_edit.php:439 +#: usr/local/www/vpn_ipsec_phase2.php:584 usr/local/www/interfaces.php:1120 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1490 +#: usr/local/www/interfaces.php:1595 etc/inc/ipsec.inc:292 +#: usr/local/www/firewall_nat_edit.php:811 +#: usr/local/www/firewall_nat_edit.php:842 +#: usr/local/www/system_advanced_misc.php:445 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1535 usr/local/www/interfaces.php:1641 +#: usr/local/www/firewall_nat_edit.php:812 +#: usr/local/www/firewall_nat_edit.php:843 +#: usr/local/www/interfaces_bridge_edit.php:443 +#: usr/local/www/interfaces.php:1157 usr/local/www/interfaces.php:1158 +#: usr/local/www/interfaces.php:1529 usr/local/www/interfaces.php:1634 +#: usr/local/www/firewall_nat_edit.php:812 +#: usr/local/www/firewall_nat_edit.php:843 +#: usr/local/www/diag_system_pftop.php:155 +#: usr/local/www/system_advanced_misc.php:445 +#: usr/local/www/interfaces_bridge_edit.php:443 +#: usr/local/www/vpn_ipsec_phase2.php:584 usr/local/www/interfaces.php:1157 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1529 +#: usr/local/www/interfaces.php:1634 etc/inc/ipsec.inc:292 +msgid "None" +msgstr "" + +#: etc/inc/meta.inc:68 etc/inc/meta.inc:68 +#, php-format +msgid "list_phpfiles: unable to examine path %s\n" +msgstr "" + +#: etc/inc/meta.inc:99 etc/inc/meta.inc:99 +#, php-format +msgid "unable to read %s\n" +msgstr "" + +#: etc/inc/meta.inc:132 etc/inc/meta.inc:132 +#, php-format +msgid "error: tag mismatch ( %1$s != %2$s ) in '%3$s'%4$s" +msgstr "" + +#: etc/inc/meta.inc:143 etc/inc/meta.inc:143 +#, php-format +msgid "warning: tag %1$s has no data in '%2$s'%3$s" +msgstr "" + +#: etc/inc/meta.inc:163 etc/inc/meta.inc:163 +#, php-format +msgid "warning: tag %1$s has malformed data in '%2$s'%3$s" +msgstr "" + +#: etc/inc/meta.inc:185 etc/inc/meta.inc:185 +#, php-format +msgid "warning: tag %1$s has invalid data in '%2$s'%3$s" +msgstr "" + +#: etc/inc/priv.defs.inc:10 etc/inc/priv.defs.inc:10 +msgid "WebCfg - All pages" +msgstr "" + +#: etc/inc/priv.defs.inc:11 etc/inc/priv.defs.inc:11 +msgid "Allow access to all pages" +msgstr "" + +#: etc/inc/priv.defs.inc:16 etc/inc/priv.defs.inc:16 +msgid "WebCfg - Status: CARP page" +msgstr "" + +#: etc/inc/priv.defs.inc:17 etc/inc/priv.defs.inc:17 +msgid "Allow access to the 'Status: CARP' page." +msgstr "" + +#: etc/inc/priv.defs.inc:22 etc/inc/priv.defs.inc:22 +msgid "WebCfg - Crash reporter" +msgstr "" + +#: etc/inc/priv.defs.inc:23 etc/inc/priv.defs.inc:23 +msgid "Uploads crash reports to pfSense and or deletes crash reports." +msgstr "" + +#: etc/inc/priv.defs.inc:28 etc/inc/priv.defs.inc:28 +msgid "WebCfg - Diagnostics: ARP Table page" +msgstr "" + +#: etc/inc/priv.defs.inc:29 etc/inc/priv.defs.inc:29 +msgid "Allow access to the 'Diagnostics: ARP Table' page." +msgstr "" + +#: etc/inc/priv.defs.inc:34 etc/inc/priv.defs.inc:34 +msgid "WebCfg - Diagnostics: Authentication page" +msgstr "" + +#: etc/inc/priv.defs.inc:35 etc/inc/priv.defs.inc:35 +msgid "Allow access to the 'Diagnostics: Authentication' page." +msgstr "" + +#: etc/inc/priv.defs.inc:40 etc/inc/priv.defs.inc:40 +msgid "WebCfg - Diagnostics: Backup/restore page" +msgstr "" + +#: etc/inc/priv.defs.inc:41 etc/inc/priv.defs.inc:41 +msgid "Allow access to the 'Diagnostics: Backup/restore' page." +msgstr "" + +#: etc/inc/priv.defs.inc:46 etc/inc/priv.defs.inc:46 +msgid "WebCfg - Diagnostics: Configuration History page" +msgstr "" + +#: etc/inc/priv.defs.inc:47 etc/inc/priv.defs.inc:47 +msgid "Allow access to the 'Diagnostics: Configuration History' page." +msgstr "" + +#: etc/inc/priv.defs.inc:52 etc/inc/priv.defs.inc:52 +msgid "WebCfg - Diagnostics: Factory defaults page" +msgstr "" + +#: etc/inc/priv.defs.inc:53 etc/inc/priv.defs.inc:53 +msgid "Allow access to the 'Diagnostics: Factory defaults' page." +msgstr "" + +#: etc/inc/priv.defs.inc:58 etc/inc/priv.defs.inc:58 +msgid "WebCfg - Diagnostics: Show States page" +msgstr "" + +#: etc/inc/priv.defs.inc:59 etc/inc/priv.defs.inc:59 +msgid "Allow access to the 'Diagnostics: Show States' page." +msgstr "" + +#: etc/inc/priv.defs.inc:64 etc/inc/priv.defs.inc:70 etc/inc/priv.defs.inc:70 +msgid "WebCfg - Status: IPsec page" +msgstr "" + +#: etc/inc/priv.defs.inc:65 etc/inc/priv.defs.inc:71 etc/inc/priv.defs.inc:71 +msgid "Allow access to the 'Status: IPsec' page." +msgstr "" + +#: etc/inc/priv.defs.inc:70 etc/inc/priv.defs.inc:76 etc/inc/priv.defs.inc:76 +msgid "WebCfg - Status: IPsec: SAD page" +msgstr "" + +#: etc/inc/priv.defs.inc:71 etc/inc/priv.defs.inc:77 etc/inc/priv.defs.inc:77 +msgid "Allow access to the 'Status: IPsec: SAD' page." +msgstr "" + +#: etc/inc/priv.defs.inc:76 etc/inc/priv.defs.inc:82 etc/inc/priv.defs.inc:82 +msgid "WebCfg - Status: IPsec: SPD page" +msgstr "" + +#: etc/inc/priv.defs.inc:77 etc/inc/priv.defs.inc:83 etc/inc/priv.defs.inc:83 +msgid "Allow access to the 'Status: IPsec: SPD' page." +msgstr "" + +#: etc/inc/priv.defs.inc:82 etc/inc/priv.defs.inc:88 etc/inc/priv.defs.inc:88 +msgid "WebCfg - Diag IPsec XML page" +msgstr "" + +#: etc/inc/priv.defs.inc:83 etc/inc/priv.defs.inc:89 etc/inc/priv.defs.inc:89 +msgid "Allow access to the 'Diag IPsec XML' page." +msgstr "" + +#: etc/inc/priv.defs.inc:88 etc/inc/priv.defs.inc:184 +#: etc/inc/priv.defs.inc:220 etc/inc/priv.defs.inc:226 +#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:238 +#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:94 +#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:250 +#: etc/inc/priv.defs.inc:94 etc/inc/priv.defs.inc:208 +#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:250 +msgid "WebCfg - Diagnostics: System Activity" +msgstr "" + +#: etc/inc/priv.defs.inc:89 etc/inc/priv.defs.inc:185 +#: etc/inc/priv.defs.inc:221 etc/inc/priv.defs.inc:227 +#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:239 +#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:95 +#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:251 +#: etc/inc/priv.defs.inc:95 etc/inc/priv.defs.inc:209 +#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:251 +msgid "Allows access to the 'Diagnostics: System Activity' page" +msgstr "" + +#: etc/inc/priv.defs.inc:94 etc/inc/priv.defs.inc:100 +#: etc/inc/priv.defs.inc:100 +msgid "WebCfg - Diagnostics: Logs: System page" +msgstr "" + +#: etc/inc/priv.defs.inc:95 etc/inc/priv.defs.inc:101 +#: etc/inc/priv.defs.inc:101 +msgid "Allow access to the 'Diagnostics: Logs: System' page." +msgstr "" + +#: etc/inc/priv.defs.inc:100 etc/inc/priv.defs.inc:106 +#: etc/inc/priv.defs.inc:106 +msgid "WebCfg - Status: System logs: Portal Auth page" +msgstr "" + +#: etc/inc/priv.defs.inc:101 etc/inc/priv.defs.inc:107 +#: etc/inc/priv.defs.inc:107 +msgid "Allow access to the 'Status: System logs: Portal Auth' page." +msgstr "" + +#: etc/inc/priv.defs.inc:106 etc/inc/priv.defs.inc:112 +#: etc/inc/priv.defs.inc:112 +msgid "WebCfg - Diagnostics: Logs: DHCP page" +msgstr "" + +#: etc/inc/priv.defs.inc:107 etc/inc/priv.defs.inc:113 +#: etc/inc/priv.defs.inc:113 +msgid "Allow access to the 'Diagnostics: Logs: DHCP' page." +msgstr "" + +#: etc/inc/priv.defs.inc:112 etc/inc/priv.defs.inc:118 +#: etc/inc/priv.defs.inc:118 +msgid "WebCfg - Diagnostics: Logs: Firewall page" +msgstr "" + +#: etc/inc/priv.defs.inc:113 etc/inc/priv.defs.inc:119 +#: etc/inc/priv.defs.inc:119 +msgid "Allow access to the 'Diagnostics: Logs: Firewall' page." +msgstr "" + +#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:136 +#: etc/inc/priv.defs.inc:142 etc/inc/priv.defs.inc:142 +msgid "WebCfg - Hidden: No longer included page" +msgstr "" + +#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:137 +#: etc/inc/priv.defs.inc:143 etc/inc/priv.defs.inc:143 +msgid "Allow access to the 'Hidden: No longer included' page." +msgstr "" + +#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:142 +#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:148 +#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:148 +#: etc/inc/priv.defs.inc:166 +msgid "WebCfg - Status: System logs: IPsec VPN page" +msgstr "" + +#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:143 +#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:149 +#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:149 +#: etc/inc/priv.defs.inc:167 +msgid "Allow access to the 'Status: System logs: IPsec VPN' page." +msgstr "" + +#: etc/inc/priv.defs.inc:130 +msgid "WebCfg - Status: System logs: OpenNTPD page" +msgstr "" + +#: etc/inc/priv.defs.inc:131 +msgid "Allow access to the 'Status: System logs: OpenNTPD' page." +msgstr "" + +#: etc/inc/priv.defs.inc:136 etc/inc/priv.defs.inc:154 +#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:160 +msgid "WebCfg - Status: System logs: OpenVPN page" +msgstr "" + +#: etc/inc/priv.defs.inc:137 etc/inc/priv.defs.inc:155 +#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:161 +msgid "Allow access to the 'Status: System logs: OpenVPN' page." +msgstr "" + +#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:166 +#: etc/inc/priv.defs.inc:172 etc/inc/priv.defs.inc:172 +msgid "WebCfg - Status: System logs: Load Balancer page" +msgstr "" + +#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:167 +#: etc/inc/priv.defs.inc:173 etc/inc/priv.defs.inc:173 +msgid "Allow access to the 'Status: System logs: Load Balancer' page." +msgstr "" + +#: etc/inc/priv.defs.inc:154 etc/inc/priv.defs.inc:172 +#: etc/inc/priv.defs.inc:178 etc/inc/priv.defs.inc:178 +msgid "WebCfg - Diagnostics: Logs: Settings page" +msgstr "" + +#: etc/inc/priv.defs.inc:155 etc/inc/priv.defs.inc:173 +#: etc/inc/priv.defs.inc:179 etc/inc/priv.defs.inc:179 +msgid "Allow access to the 'Diagnostics: Logs: Settings' page." +msgstr "" + +#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:178 +#: etc/inc/priv.defs.inc:184 etc/inc/priv.defs.inc:184 +msgid "WebCfg - Diagnostics: Logs: VPN page" +msgstr "" + +#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:179 +#: etc/inc/priv.defs.inc:185 etc/inc/priv.defs.inc:185 +msgid "Allow access to the 'Diagnostics: Logs: VPN' page." +msgstr "" + +#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:184 +#: etc/inc/priv.defs.inc:190 etc/inc/priv.defs.inc:190 +msgid "WebCfg - Diagnostics: NanoBSD" +msgstr "" + +#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:185 +#: etc/inc/priv.defs.inc:191 etc/inc/priv.defs.inc:191 +msgid "Allow access to the 'Diagnostics: NanoBSD' page." +msgstr "" + +#: etc/inc/priv.defs.inc:172 etc/inc/priv.defs.inc:190 +#: etc/inc/priv.defs.inc:196 etc/inc/priv.defs.inc:196 +msgid "WebCfg - Diagnostics: Packet Capture page" +msgstr "" + +#: etc/inc/priv.defs.inc:173 etc/inc/priv.defs.inc:191 +#: etc/inc/priv.defs.inc:197 etc/inc/priv.defs.inc:197 +msgid "Allow access to the 'Diagnostics: Packet Capture' page." +msgstr "" + +#: etc/inc/priv.defs.inc:178 etc/inc/priv.defs.inc:196 +#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:202 +msgid "WebCfg - Diagnostics: Patterns page" +msgstr "" + +#: etc/inc/priv.defs.inc:179 etc/inc/priv.defs.inc:197 +#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:203 +msgid "Allow access to the 'Diagnostics: Patterns' page." +msgstr "" + +#: etc/inc/priv.defs.inc:190 etc/inc/priv.defs.inc:208 +#: etc/inc/priv.defs.inc:214 etc/inc/priv.defs.inc:214 +msgid "WebCfg - Diagnostics: Ping page" +msgstr "" + +#: etc/inc/priv.defs.inc:191 etc/inc/priv.defs.inc:209 +#: etc/inc/priv.defs.inc:215 etc/inc/priv.defs.inc:215 +msgid "Allow access to the 'Diagnostics: Ping' page." +msgstr "" + +#: etc/inc/priv.defs.inc:196 etc/inc/priv.defs.inc:214 +#: etc/inc/priv.defs.inc:220 etc/inc/priv.defs.inc:220 +msgid "WebCfg - Status: Package logs page" +msgstr "" + +#: etc/inc/priv.defs.inc:197 etc/inc/priv.defs.inc:215 +#: etc/inc/priv.defs.inc:221 etc/inc/priv.defs.inc:221 +msgid "Allow access to the 'Status: Package logs' page." +msgstr "" + +#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:220 +#: etc/inc/priv.defs.inc:226 etc/inc/priv.defs.inc:226 +msgid "WebCfg - Diagnostics: Reset state page" +msgstr "" + +#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:221 +#: etc/inc/priv.defs.inc:227 etc/inc/priv.defs.inc:227 +msgid "Allow access to the 'Diagnostics: Reset state' page." +msgstr "" + +#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:226 +#: etc/inc/priv.defs.inc:232 etc/inc/priv.defs.inc:232 +msgid "WebCfg - Diagnostics: Routing tables page" +msgstr "" + +#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:227 +#: etc/inc/priv.defs.inc:233 etc/inc/priv.defs.inc:233 +msgid "Allow access to the 'Diagnostics: Routing tables' page." +msgstr "" + +#: etc/inc/priv.defs.inc:214 etc/inc/priv.defs.inc:232 +#: etc/inc/priv.defs.inc:238 etc/inc/priv.defs.inc:238 +msgid "WebCfg - Diagnostics: States Summary page" +msgstr "" + +#: etc/inc/priv.defs.inc:215 etc/inc/priv.defs.inc:233 +#: etc/inc/priv.defs.inc:239 etc/inc/priv.defs.inc:239 +msgid "Allow access to the 'Diagnostics: States Summary' page." +msgstr "" + +#: etc/inc/priv.defs.inc:232 etc/inc/priv.defs.inc:250 +#: etc/inc/priv.defs.inc:256 etc/inc/priv.defs.inc:256 +msgid "WebCfg - Diagnostics: PF Table IP addresses" +msgstr "" + +#: etc/inc/priv.defs.inc:233 etc/inc/priv.defs.inc:251 +#: etc/inc/priv.defs.inc:257 etc/inc/priv.defs.inc:257 +msgid "Allow access to the 'Diagnostics: Tables' page." +msgstr "" + +#: etc/inc/priv.defs.inc:238 etc/inc/priv.defs.inc:256 +#: etc/inc/priv.defs.inc:262 etc/inc/priv.defs.inc:262 +msgid "WebCfg - Diagnostics: Traceroute page" +msgstr "" + +#: etc/inc/priv.defs.inc:239 etc/inc/priv.defs.inc:257 +#: etc/inc/priv.defs.inc:263 etc/inc/priv.defs.inc:263 +msgid "Allow access to the 'Diagnostics: Traceroute' page." +msgstr "" + +#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:262 +#: etc/inc/priv.defs.inc:268 etc/inc/priv.defs.inc:268 +msgid "WebCfg - Diagnostics: Edit FIle" +msgstr "" + +#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:263 +#: etc/inc/priv.defs.inc:269 etc/inc/priv.defs.inc:269 +msgid "Allow access to the 'Diagnostics: Edit File' page." +msgstr "" + +#: etc/inc/priv.defs.inc:250 etc/inc/priv.defs.inc:268 +#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:276 +#: etc/inc/priv.defs.inc:276 +msgid "WebCfg - Diagnostics: Command page" +msgstr "" + +#: etc/inc/priv.defs.inc:251 etc/inc/priv.defs.inc:269 +#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:277 +#: etc/inc/priv.defs.inc:277 +msgid "Allow access to the 'Diagnostics: Command' page." +msgstr "" + +#: etc/inc/priv.defs.inc:256 etc/inc/priv.defs.inc:274 +#: etc/inc/priv.defs.inc:280 +msgid "WebCfg - Hidden: Exec Raw page" +msgstr "" + +#: etc/inc/priv.defs.inc:257 etc/inc/priv.defs.inc:275 +#: etc/inc/priv.defs.inc:281 +msgid "Allow access to the 'Hidden: Exec Raw' page." +msgstr "" + +#: etc/inc/priv.defs.inc:262 etc/inc/priv.defs.inc:280 +#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:282 +#: etc/inc/priv.defs.inc:282 +msgid "WebCfg - Firewall: Aliases page" +msgstr "" + +#: etc/inc/priv.defs.inc:263 etc/inc/priv.defs.inc:281 +#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:283 +#: etc/inc/priv.defs.inc:283 +msgid "Allow access to the 'Firewall: Aliases' page." +msgstr "" + +#: etc/inc/priv.defs.inc:268 etc/inc/priv.defs.inc:286 +#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:288 +#: etc/inc/priv.defs.inc:288 +msgid "WebCfg - Firewall: Alias: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:269 etc/inc/priv.defs.inc:287 +#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:289 +#: etc/inc/priv.defs.inc:289 +msgid "Allow access to the 'Firewall: Alias: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:292 +#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:294 +#: etc/inc/priv.defs.inc:294 +msgid "WebCfg - Firewall: Alias: Import page" +msgstr "" + +#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:293 +#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:295 +#: etc/inc/priv.defs.inc:295 +msgid "Allow access to the 'Firewall: Alias: Import' page." +msgstr "" + +#: etc/inc/priv.defs.inc:280 etc/inc/priv.defs.inc:298 +#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:300 +#: etc/inc/priv.defs.inc:300 +msgid "WebCfg - Firewall: NAT: Port Forward page" +msgstr "" + +#: etc/inc/priv.defs.inc:281 etc/inc/priv.defs.inc:299 +#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:301 +#: etc/inc/priv.defs.inc:301 +msgid "Allow access to the 'Firewall: NAT: Port Forward' page." +msgstr "" + +#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:304 +#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:306 +#: etc/inc/priv.defs.inc:306 +msgid "WebCfg - Firewall: NAT: 1:1 page" +msgstr "" + +#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:305 +#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:307 +#: etc/inc/priv.defs.inc:307 +msgid "Allow access to the 'Firewall: NAT: 1:1' page." +msgstr "" + +#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:310 +#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:312 +#: etc/inc/priv.defs.inc:312 +msgid "WebCfg - Firewall: NAT: 1:1: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:311 +#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:313 +#: etc/inc/priv.defs.inc:313 +msgid "Allow access to the 'Firewall: NAT: 1:1: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:316 +#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:318 +#: etc/inc/priv.defs.inc:318 +msgid "WebCfg - Firewall: NAT: Port Forward: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:317 +#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:319 +#: etc/inc/priv.defs.inc:319 +msgid "Allow access to the 'Firewall: NAT: Port Forward: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:322 +#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:324 +#: etc/inc/priv.defs.inc:324 +msgid "WebCfg - Firewall: NAT: Outbound page" +msgstr "" + +#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:323 +#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:325 +#: etc/inc/priv.defs.inc:325 +msgid "Allow access to the 'Firewall: NAT: Outbound' page." +msgstr "" + +#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:328 +#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:330 +#: etc/inc/priv.defs.inc:330 +msgid "WebCfg - Firewall: NAT: Outbound: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:329 +#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:331 +#: etc/inc/priv.defs.inc:331 +msgid "Allow access to the 'Firewall: NAT: Outbound: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:334 +#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:336 +#: etc/inc/priv.defs.inc:336 +msgid "WebCfg - Firewall: Rules page" +msgstr "" + +#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:335 +#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:337 +#: etc/inc/priv.defs.inc:337 +msgid "Allow access to the 'Firewall: Rules' page." +msgstr "" + +#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:340 +#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:342 +#: etc/inc/priv.defs.inc:342 +msgid "WebCfg - Firewall: Rules: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:341 +#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:343 +#: etc/inc/priv.defs.inc:343 +msgid "Allow access to the 'Firewall: Rules: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:346 +#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:348 +#: etc/inc/priv.defs.inc:348 +msgid "WebCfg - Firewall: Schedules page" +msgstr "" + +#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:347 +#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:349 +#: etc/inc/priv.defs.inc:349 +msgid "Allow access to the 'Firewall: Schedules' page." +msgstr "" + +#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:352 +#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:354 +#: etc/inc/priv.defs.inc:354 +msgid "WebCfg - Firewall: Schedules: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:353 +#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:355 +#: etc/inc/priv.defs.inc:355 +msgid "Allow access to the 'Firewall: Schedules: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:358 +#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:360 +#: etc/inc/priv.defs.inc:360 +msgid "WebCfg - Firewall: Traffic Shaper page" +msgstr "" + +#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:359 +#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:361 +#: etc/inc/priv.defs.inc:361 +msgid "Allow access to the 'Firewall: Traffic Shaper' page." +msgstr "" + +#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:364 +#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:366 +#: etc/inc/priv.defs.inc:366 +msgid "WebCfg - Firewall: Traffic Shaper: Layer7 page" +msgstr "" + +#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:365 +#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:367 +#: etc/inc/priv.defs.inc:367 +msgid "Allow access to the 'Firewall: Traffic Shaper: Layer7' page." +msgstr "" + +#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:370 +#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:372 +#: etc/inc/priv.defs.inc:372 +msgid "WebCfg - Firewall: Traffic Shaper: Queues page" +msgstr "" + +#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:371 +#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:373 +#: etc/inc/priv.defs.inc:373 +msgid "Allow access to the 'Firewall: Traffic Shaper: Queues' page." +msgstr "" + +#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:376 +#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:378 +#: etc/inc/priv.defs.inc:378 +msgid "WebCfg - Firewall: Traffic Shaper: Limiter page" +msgstr "" + +#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:377 +#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:379 +#: etc/inc/priv.defs.inc:379 +msgid "Allow access to the 'Firewall: Traffic Shaper: Limiter' page." +msgstr "" + +#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:382 +#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:384 +#: etc/inc/priv.defs.inc:384 +msgid "WebCfg - Firewall: Traffic Shaper: Wizard page" +msgstr "" + +#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:383 +#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:385 +#: etc/inc/priv.defs.inc:385 +msgid "Allow access to the 'Firewall: Traffic Shaper: Wizard' page." +msgstr "" + +#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:388 +#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:390 +#: etc/inc/priv.defs.inc:390 +msgid "WebCfg - Firewall: Virtual IP Addresses page" +msgstr "" + +#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:389 +#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:391 +#: etc/inc/priv.defs.inc:391 +msgid "Allow access to the 'Firewall: Virtual IP Addresses' page." +msgstr "" + +#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:394 +#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:396 +#: etc/inc/priv.defs.inc:396 +msgid "WebCfg - Firewall: Virtual IP Address: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:395 +#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:397 +#: etc/inc/priv.defs.inc:397 +msgid "Allow access to the 'Firewall: Virtual IP Address: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:400 +#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:402 +#: etc/inc/priv.defs.inc:402 +msgid "WebCfg - AJAX: Get Service Providers" +msgstr "" + +#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:401 +#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:403 +#: etc/inc/priv.defs.inc:403 +msgid "Allow access to the 'AJAX: Service Providers' page." +msgstr "" + +#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:406 +#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:408 +#: etc/inc/priv.defs.inc:408 +msgid "WebCfg - AJAX: Get Stats" +msgstr "" + +#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:407 +#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:409 +#: etc/inc/priv.defs.inc:409 +msgid "Allow access to the 'AJAX: Get Stats' page." +msgstr "" + +#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:412 +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:414 +#: etc/inc/priv.defs.inc:414 +msgid "WebCfg - Diagnostics: Interface Traffic page" +msgstr "" + +#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:413 +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:415 +#: etc/inc/priv.defs.inc:415 +msgid "Allow access to the 'Diagnostics: Interface Traffic' page." +msgstr "" + +#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:814 +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:832 +#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:838 +#: etc/inc/priv.defs.inc:420 etc/inc/priv.defs.inc:846 +#: etc/inc/priv.defs.inc:420 etc/inc/priv.defs.inc:846 +msgid "WebCfg - Diagnostics: CPU Utilization page" +msgstr "" + +#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:815 +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:833 +#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:839 +#: etc/inc/priv.defs.inc:421 etc/inc/priv.defs.inc:847 +#: etc/inc/priv.defs.inc:421 etc/inc/priv.defs.inc:847 +msgid "Allow access to the 'Diagnostics: CPU Utilization' page." +msgstr "" + +#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:424 +#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:426 +#: etc/inc/priv.defs.inc:426 +msgid "WebCfg - Diagnostics: Halt system page" +msgstr "" + +#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:425 +#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:427 +#: etc/inc/priv.defs.inc:427 +msgid "Allow access to the 'Diagnostics: Halt system' page." +msgstr "" + +#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:430 +#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:432 +#: etc/inc/priv.defs.inc:432 +msgid "WebCfg - Required for javascript page" +msgstr "" + +#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:431 +#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:433 +#: etc/inc/priv.defs.inc:433 +msgid "Allow access to the 'Required for javascript' page." +msgstr "" + +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:436 +#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:438 +#: etc/inc/priv.defs.inc:438 +msgid "WebCfg - XMLRPC Interface Stats page" +msgstr "" + +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:437 +#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:439 +#: etc/inc/priv.defs.inc:439 +msgid "Allow access to the 'XMLRPC Interface Stats' page." +msgstr "" + +#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:442 +#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:444 +#: etc/inc/priv.defs.inc:444 +msgid "WebCfg - System: Login / Logout page / Dashboard" +msgstr "" + +#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:443 +#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:445 +#: etc/inc/priv.defs.inc:445 +msgid "Allow access to the 'System: Login / Logout' page and Dashboard." +msgstr "" + +#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:448 +#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:450 +#: etc/inc/priv.defs.inc:450 +msgid "WebCfg - Interfaces: WAN page" +msgstr "" + +#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:449 +#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:451 +#: etc/inc/priv.defs.inc:451 +msgid "Allow access to the 'Interfaces' page." +msgstr "" + +#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:454 +#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:456 +#: etc/inc/priv.defs.inc:456 +msgid "WebCfg - Interfaces: Assign network ports page" +msgstr "" + +#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:455 +#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:457 +#: etc/inc/priv.defs.inc:457 +msgid "Allow access to the 'Interfaces: Assign network ports' page." +msgstr "" + +#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:460 +#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:462 +#: etc/inc/priv.defs.inc:462 +msgid "WebCfg - Interfaces: Bridge page" +msgstr "" + +#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:461 +#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:463 +#: etc/inc/priv.defs.inc:463 +msgid "Allow access to the 'Interfaces: Bridge' page." +msgstr "" + +#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:466 +#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:468 +#: etc/inc/priv.defs.inc:468 +msgid "WebCfg - Interfaces: Bridge edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:467 +#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:469 +#: etc/inc/priv.defs.inc:469 +msgid "Allow access to the 'Interfaces: Bridge : Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:472 +#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:474 +#: etc/inc/priv.defs.inc:474 +msgid "WebCfg - Interfaces: GIF page" +msgstr "" + +#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:473 +#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:475 +#: etc/inc/priv.defs.inc:475 +msgid "Allow access to the 'Interfaces: GIF' page." +msgstr "" + +#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:478 +#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:480 +#: etc/inc/priv.defs.inc:480 +msgid "WebCfg - Interfaces: GIF: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:479 +#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:481 +#: etc/inc/priv.defs.inc:481 +msgid "Allow access to the 'Interfaces: GIF: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:484 +#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:486 +#: etc/inc/priv.defs.inc:486 +msgid "WebCfg - Interfaces: GRE page" +msgstr "" + +#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:485 +#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:487 +#: etc/inc/priv.defs.inc:487 +msgid "Allow access to the 'Interfaces: GRE' page." +msgstr "" + +#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:490 +#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:492 +#: etc/inc/priv.defs.inc:492 +msgid "WebCfg - Interfaces: GRE: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:491 +#: etc/inc/priv.defs.inc:497 etc/inc/priv.defs.inc:493 +#: etc/inc/priv.defs.inc:493 +msgid "Allow access to the 'Interfaces: GRE: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:496 +#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:498 +#: etc/inc/priv.defs.inc:498 +msgid "WebCfg - Interfaces: Groups page" +msgstr "" + +#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:497 +#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:499 +#: etc/inc/priv.defs.inc:499 +msgid "Create interface groups" +msgstr "" + +#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:502 +#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:504 +#: etc/inc/priv.defs.inc:504 +msgid "WebCfg - Interfaces: Groups: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:503 +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:505 +#: etc/inc/priv.defs.inc:505 +msgid "Edit Interface groups" +msgstr "" + +#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:508 +#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:510 +#: etc/inc/priv.defs.inc:510 +msgid "WebCfg - Interfaces: LAGG: page" +msgstr "" + +#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:497 +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:515 +#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:511 +#: etc/inc/priv.defs.inc:517 etc/inc/priv.defs.inc:511 +#: etc/inc/priv.defs.inc:517 +msgid "Edit Interface LAGG" +msgstr "" + +#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:514 +#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:516 +#: etc/inc/priv.defs.inc:516 +msgid "WebCfg - Interfaces: LAGG: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:520 +#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:522 +#: etc/inc/priv.defs.inc:522 +msgid "WebCfg - Interfaces: ppps page" +msgstr "" + +#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:521 +#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:523 +#: etc/inc/priv.defs.inc:523 +msgid "Allow access to the 'Interfaces: ppps' page." +msgstr "" + +#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:526 +#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:528 +#: etc/inc/priv.defs.inc:528 +msgid "WebCfg - Interfaces: PPPs: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:527 +#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:529 +#: etc/inc/priv.defs.inc:529 +msgid "Allow access to the 'Interfaces: PPPs: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:532 +#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:534 +#: etc/inc/priv.defs.inc:534 +msgid "WebCfg - Interfaces: QinQ page" +msgstr "" + +#: etc/inc/priv.defs.inc:515 etc/inc/priv.defs.inc:533 +#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:535 +#: etc/inc/priv.defs.inc:535 +msgid "Allow access to the 'Interfaces: QinQ' page." +msgstr "" + +#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:538 +#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:540 +#: etc/inc/priv.defs.inc:540 +msgid "WebCfg - Interfaces: QinQ: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:539 +#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:541 +#: etc/inc/priv.defs.inc:541 +msgid "Edit Interface qinq" +msgstr "" + +#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:544 +#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:546 +#: etc/inc/priv.defs.inc:546 +msgid "WebCfg - Interfaces: VLAN page" +msgstr "" + +#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:545 +#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:547 +#: etc/inc/priv.defs.inc:547 +msgid "Allow access to the 'Interfaces: VLAN' page." +msgstr "" + +#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:550 +#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:552 +#: etc/inc/priv.defs.inc:552 +msgid "WebCfg - Interfaces: VLAN: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:551 +#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:553 +#: etc/inc/priv.defs.inc:553 +msgid "Allow access to the 'Interfaces: VLAN: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:556 +#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:558 +#: etc/inc/priv.defs.inc:558 +msgid "WebCfg - Interfaces: Wireless page" +msgstr "" + +#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:557 +#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:559 +#: etc/inc/priv.defs.inc:559 +msgid "Allow access to the 'Interfaces: Wireless' page." +msgstr "" + +#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:562 +#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:564 +#: etc/inc/priv.defs.inc:564 +msgid "WebCfg - Interfaces: Wireless edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:563 +#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:565 +#: etc/inc/priv.defs.inc:565 +msgid "Allow access to the 'Interfaces: Wireless : Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:568 +#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:570 +#: etc/inc/priv.defs.inc:570 +msgid "WebCfg - System: License page" +msgstr "" + +#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:569 +#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:571 +#: etc/inc/priv.defs.inc:571 +msgid "Allow access to the 'System: License' page." +msgstr "" + +#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:574 +#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:576 +#: etc/inc/priv.defs.inc:576 +msgid "WebCfg - Services: Load Balancer: Monitors page" +msgstr "" + +#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:575 +#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:577 +#: etc/inc/priv.defs.inc:577 +msgid "Allow access to the 'Services: Load Balancer: Monitors' page." +msgstr "" + +#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:580 +#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:582 +#: etc/inc/priv.defs.inc:582 +msgid "WebCfg - Services: Load Balancer: Monitor: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:581 +#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:583 +#: etc/inc/priv.defs.inc:583 +msgid "Allow access to the 'Services: Load Balancer: Monitor: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:586 +#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:588 +#: etc/inc/priv.defs.inc:588 +msgid "WebCfg - Load Balancer: Pool page" +msgstr "" + +#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:587 +#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:589 +#: etc/inc/priv.defs.inc:589 +msgid "Allow access to the 'Load Balancer: Pool' page." +msgstr "" + +#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:592 +#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:594 +#: etc/inc/priv.defs.inc:594 +msgid "WebCfg - Load Balancer: Pool: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:593 +#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:595 +#: etc/inc/priv.defs.inc:595 +msgid "Allow access to the 'Load Balancer: Pool: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:598 +#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:600 +#: etc/inc/priv.defs.inc:600 +msgid "WebCfg - Services: Load Balancer: Relay Actions page" +msgstr "" + +#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:599 +#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:601 +#: etc/inc/priv.defs.inc:601 +msgid "Allow access to the 'Services: Load Balancer: Relay Actions' page." +msgstr "" + +#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:604 +#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:606 +#: etc/inc/priv.defs.inc:606 +msgid "WebCfg - Services: Load Balancer: Relay Action: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:605 +#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:607 +#: etc/inc/priv.defs.inc:607 +msgid "Allow access to the 'Services: Load Balancer: Relay Action: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:610 +#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:612 +#: etc/inc/priv.defs.inc:612 +msgid "WebCfg - Services: Load Balancer: Relay Protocols page" +msgstr "" + +#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:611 +#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:613 +#: etc/inc/priv.defs.inc:613 +msgid "Allow access to the 'Services: Load Balancer: Relay Protocols' page." +msgstr "" + +#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:616 +#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:618 +#: etc/inc/priv.defs.inc:618 +msgid "WebCfg - Services: Load Balancer: Relay Protocol: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:617 +#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:619 +#: etc/inc/priv.defs.inc:619 +msgid "" +"Allow access to the 'Services: Load Balancer: Relay Protocol: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:622 +#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:624 +#: etc/inc/priv.defs.inc:624 +msgid "WebCfg - Services: Load Balancer: Virtual Servers page" +msgstr "" + +#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:623 +#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:625 +#: etc/inc/priv.defs.inc:625 +msgid "Allow access to the 'Services: Load Balancer: Virtual Servers' page." +msgstr "" + +#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:628 +#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:630 +#: etc/inc/priv.defs.inc:630 +msgid "WebCfg - Load Balancer: Virtual Server: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:629 +#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:631 +#: etc/inc/priv.defs.inc:631 +msgid "Allow access to the 'Load Balancer: Virtual Server: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:634 +#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:636 +#: etc/inc/priv.defs.inc:636 +msgid "WebCfg - Package: Settings page" +msgstr "" + +#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:635 +#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:637 +#: etc/inc/priv.defs.inc:637 +msgid "Allow access to the 'Package: Settings' page." +msgstr "" + +#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:640 +#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:642 +#: etc/inc/priv.defs.inc:642 +msgid "WebCfg - Package: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:641 +#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:643 +#: etc/inc/priv.defs.inc:643 +msgid "Allow access to the 'Package: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:646 +#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:648 +#: etc/inc/priv.defs.inc:648 +msgid "WebCfg - System: Package Manager page" +msgstr "" + +#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:647 +#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:649 +#: etc/inc/priv.defs.inc:649 +msgid "Allow access to the 'System: Package Manager' page." +msgstr "" + +#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:652 +#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:654 +#: etc/inc/priv.defs.inc:654 +msgid "WebCfg - System: Package Manager: Install Package page" +msgstr "" + +#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:653 +#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:655 +#: etc/inc/priv.defs.inc:655 +msgid "Allow access to the 'System: Package Manager: Install Package' page." +msgstr "" + +#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:658 +#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:660 +#: etc/inc/priv.defs.inc:660 +msgid "WebCfg - System: Package Manager: Installed page" +msgstr "" + +#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:659 +#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:661 +#: etc/inc/priv.defs.inc:661 +msgid "Allow access to the 'System: Package Manager: Installed' page." +msgstr "" + +#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:664 +#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:666 +#: etc/inc/priv.defs.inc:666 +msgid "WebCfg - Packages: Settings page" +msgstr "" + +#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:665 +#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:667 +#: etc/inc/priv.defs.inc:667 +msgid "Allow access to the 'Packages: Settings' page." +msgstr "" + +#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:670 +#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:672 +#: etc/inc/priv.defs.inc:672 +msgid "WebCfg - Diagnostics: Reboot System page" +msgstr "" + +#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:671 +#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:673 +#: etc/inc/priv.defs.inc:673 +msgid "Allow access to the 'Diagnostics: Reboot System' page." +msgstr "" + +#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:676 +#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:678 +#: etc/inc/priv.defs.inc:678 +msgid "WebCfg - Diagnostics: Restart HTTPD : System page" +msgstr "" + +#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:677 +#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:679 +#: etc/inc/priv.defs.inc:679 +msgid "Allow access to the 'Diagnostics: Restart HTTPD: System' page." +msgstr "" + +#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:682 +#: etc/inc/priv.defs.inc:688 etc/inc/priv.defs.inc:684 +#: etc/inc/priv.defs.inc:684 +msgid "WebCfg - Services: Captive portal page" +msgstr "" + +#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:683 +#: etc/inc/priv.defs.inc:689 etc/inc/priv.defs.inc:685 +#: etc/inc/priv.defs.inc:685 +msgid "Allow access to the 'Services: Captive portal' page." +msgstr "" + +#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:688 +#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:690 +#: etc/inc/priv.defs.inc:690 +msgid "WebCfg - Services: Captive portal: File Manager page" +msgstr "" + +#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:689 +#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:691 +#: etc/inc/priv.defs.inc:691 +msgid "Allow access to the 'Services: Captive portal: File Manager' page." +msgstr "" + +#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:688 +#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:706 +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712 +#: etc/inc/priv.defs.inc:696 etc/inc/priv.defs.inc:708 +#: etc/inc/priv.defs.inc:696 etc/inc/priv.defs.inc:708 +msgid "WebCfg - Services: Captive portal: Allowed IPs page" +msgstr "" + +#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:689 +#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:707 +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713 +#: etc/inc/priv.defs.inc:697 etc/inc/priv.defs.inc:709 +#: etc/inc/priv.defs.inc:697 etc/inc/priv.defs.inc:709 +msgid "Allow access to the 'Services: Captive portal: Allowed IPs' page." +msgstr "" + +#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:694 +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712 +#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:718 +#: etc/inc/priv.defs.inc:702 etc/inc/priv.defs.inc:714 +#: etc/inc/priv.defs.inc:702 etc/inc/priv.defs.inc:714 +msgid "WebCfg - Services: Captive portal: Edit Allowed IPs page" +msgstr "" + +#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:695 +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713 +#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:719 +#: etc/inc/priv.defs.inc:703 etc/inc/priv.defs.inc:715 +#: etc/inc/priv.defs.inc:703 etc/inc/priv.defs.inc:715 +msgid "Allow access to the 'Services: Captive portal: Edit Allowed IPs' page." +msgstr "" + +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:718 +#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:720 +#: etc/inc/priv.defs.inc:720 +msgid "WebCfg - Services: Captive portal: Mac Addresses page" +msgstr "" + +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:719 +#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:721 +#: etc/inc/priv.defs.inc:721 +msgid "Allow access to the 'Services: Captive portal: Mac Addresses' page." +msgstr "" + +#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:724 +#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:726 +#: etc/inc/priv.defs.inc:726 +msgid "WebCfg - Services: Captive portal: Edit MAC Addresses page" +msgstr "" + +#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:725 +#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:727 +#: etc/inc/priv.defs.inc:727 +msgid "" +"Allow access to the 'Services: Captive portal: Edit MAC Addresses' page." +msgstr "" + +#: etc/inc/priv.defs.inc:712 etc/inc/priv.defs.inc:730 +#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:744 +#: etc/inc/priv.defs.inc:744 +msgid "WebCfg - Services: Captive portal Vouchers page" +msgstr "" + +#: etc/inc/priv.defs.inc:713 etc/inc/priv.defs.inc:731 +#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:745 +#: etc/inc/priv.defs.inc:745 +msgid "Allow access to the 'Services: Captive portal Vouchers' page." +msgstr "" + +#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:742 +#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:756 +#: etc/inc/priv.defs.inc:756 +msgid "WebCfg - Services: DHCP server page" +msgstr "" + +#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:743 +#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:757 +#: etc/inc/priv.defs.inc:757 +msgid "Allow access to the 'Services: DHCP server' page." +msgstr "" + +#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:748 +#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:762 +#: etc/inc/priv.defs.inc:762 +msgid "WebCfg - Services: DHCP Server : Edit static mapping page" +msgstr "" + +#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:749 +#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:763 +#: etc/inc/priv.defs.inc:763 +msgid "Allow access to the 'Services: DHCP Server : Edit static mapping' page." +msgstr "" + +#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:754 +#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:768 +#: etc/inc/priv.defs.inc:768 +msgid "WebCfg - Services: DHCP Relay page" +msgstr "" + +#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:755 +#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:769 +#: etc/inc/priv.defs.inc:769 +msgid "Allow access to the 'Services: DHCP Relay' page." +msgstr "" + +#: etc/inc/priv.defs.inc:742 etc/inc/priv.defs.inc:760 +#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:774 +#: etc/inc/priv.defs.inc:774 +msgid "WebCfg - Services: DHCPv6 Relay page" +msgstr "" + +#: etc/inc/priv.defs.inc:743 etc/inc/priv.defs.inc:761 +#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:775 +#: etc/inc/priv.defs.inc:775 +msgid "Allow access to the 'Services: DHCPv6 Relay' page." +msgstr "" + +#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:766 +#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:780 +#: etc/inc/priv.defs.inc:780 +msgid "WebCfg - Services: DNS Forwarder page" +msgstr "" + +#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:767 +#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:781 +#: etc/inc/priv.defs.inc:781 +msgid "Allow access to the 'Services: DNS Forwarder' page." +msgstr "" + +#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:772 +#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:786 +#: etc/inc/priv.defs.inc:786 +msgid "WebCfg - Services: DNS Forwarder: Edit Domain Override page" +msgstr "" + +#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:773 +#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:787 +#: etc/inc/priv.defs.inc:787 +msgid "" +"Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page." +msgstr "" + +#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:778 +#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:792 +#: etc/inc/priv.defs.inc:792 +msgid "WebCfg - Services: DNS Forwarder: Edit host page" +msgstr "" + +#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:779 +#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:793 +#: etc/inc/priv.defs.inc:793 +msgid "Allow access to the 'Services: DNS Forwarder: Edit host' page." +msgstr "" + +#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:784 +#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:798 +#: etc/inc/priv.defs.inc:798 +msgid "WebCfg - Services: Dynamic DNS clients page" +msgstr "" + +#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:785 +#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:799 +#: etc/inc/priv.defs.inc:799 +msgid "Allow access to the 'Services: Dynamic DNS clients' page." +msgstr "" + +#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:790 +#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:804 +#: etc/inc/priv.defs.inc:804 +msgid "WebCfg - Services: Dynamic DNS client page" +msgstr "" + +#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:791 +#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:805 +#: etc/inc/priv.defs.inc:805 +msgid "Allow access to the 'Services: Dynamic DNS client' page." +msgstr "" + +#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:796 +#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:810 +#: etc/inc/priv.defs.inc:810 +msgid "WebCfg - Services: Igmpproxy page" +msgstr "" + +#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:797 +#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:811 +#: etc/inc/priv.defs.inc:811 +msgid "Allow access to the 'Services: Igmpproxy' page." +msgstr "" + +#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:802 +#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:816 +#: etc/inc/priv.defs.inc:816 +msgid "WebCfg - Firewall: Igmpproxy: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:803 +#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:817 +#: etc/inc/priv.defs.inc:817 +msgid "Allow access to the 'Firewall: Igmpproxy' page." +msgstr "" + +#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:808 +#: etc/inc/priv.defs.inc:814 etc/inc/priv.defs.inc:822 +#: etc/inc/priv.defs.inc:822 +msgid "WebCfg - Services: RFC 2136 clients page" +msgstr "" + +#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:809 +#: etc/inc/priv.defs.inc:815 etc/inc/priv.defs.inc:823 +#: etc/inc/priv.defs.inc:823 +msgid "Allow access to the 'Services: RFC 2136 clients' page." +msgstr "" + +#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:814 +#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:828 +#: etc/inc/priv.defs.inc:828 +msgid "WebCfg - Services: SNMP page" +msgstr "" + +#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:815 +#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:829 +#: etc/inc/priv.defs.inc:829 +msgid "Allow access to the 'Services: SNMP' page." +msgstr "" + +#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:820 +#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:834 +#: etc/inc/priv.defs.inc:834 +msgid "WebCfg - Services: Wake on LAN page" +msgstr "" + +#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:821 +#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:835 +#: etc/inc/priv.defs.inc:835 +msgid "Allow access to the 'Services: Wake on LAN' page." +msgstr "" + +#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:826 +#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:840 +#: etc/inc/priv.defs.inc:840 +msgid "WebCfg - Services: Wake on LAN: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:827 +#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:841 +#: etc/inc/priv.defs.inc:841 +msgid "Allow access to the 'Services: Wake on LAN: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:838 +#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:852 +#: etc/inc/priv.defs.inc:852 +msgid "WebCfg - Hidden: Detailed Status page" +msgstr "" + +#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:839 +#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:853 +#: etc/inc/priv.defs.inc:853 +msgid "Allow access to the 'Hidden: Detailed Status' page." +msgstr "" + +#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:844 +#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:858 +#: etc/inc/priv.defs.inc:858 +msgid "WebCfg - Status: Captive portal page" +msgstr "" + +#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:845 +#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:859 +#: etc/inc/priv.defs.inc:859 +msgid "Allow access to the 'Status: Captive portal' page." +msgstr "" + +#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:850 +#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:864 +#: etc/inc/priv.defs.inc:864 +msgid "WebCfg - Status: Captive portal test Vouchers page" +msgstr "" + +#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:851 +#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:865 +#: etc/inc/priv.defs.inc:865 +msgid "Allow access to the 'Status: Captive portal Test Vouchers' page." +msgstr "" + +#: etc/inc/priv.defs.inc:838 etc/inc/priv.defs.inc:856 +#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:870 +#: etc/inc/priv.defs.inc:870 +msgid "WebCfg - Status: Captive portal Voucher Rolls page" +msgstr "" + +#: etc/inc/priv.defs.inc:839 etc/inc/priv.defs.inc:857 +#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:871 +#: etc/inc/priv.defs.inc:871 +msgid "Allow access to the 'Status: Captive portal Voucher Rolls' page." +msgstr "" + +#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:862 +#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:876 +#: etc/inc/priv.defs.inc:876 +msgid "WebCfg - Status: Captive portal Vouchers page" +msgstr "" + +#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:863 +#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:877 +#: etc/inc/priv.defs.inc:877 +msgid "Allow access to the 'Status: Captive portal Vouchers' page." +msgstr "" + +#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:868 +#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:882 +#: etc/inc/priv.defs.inc:882 +msgid "WebCfg - Status: DHCP leases page" +msgstr "" + +#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:869 +#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:883 +#: etc/inc/priv.defs.inc:883 +msgid "Allow access to the 'Status: DHCP leases' page." +msgstr "" + +#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:874 +#: etc/inc/priv.defs.inc:880 etc/inc/priv.defs.inc:888 +#: etc/inc/priv.defs.inc:888 +msgid "WebCfg - Status: Filter Reload Status page" +msgstr "" + +#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:875 +#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:889 +#: etc/inc/priv.defs.inc:889 +msgid "Allow access to the 'Status: Filter Reload Status' page." +msgstr "" + +#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:880 +#: etc/inc/priv.defs.inc:886 etc/inc/priv.defs.inc:894 +#: etc/inc/priv.defs.inc:894 +msgid "WebCfg - Status: Gateway Groups page" +msgstr "" + +#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:881 +#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:895 +#: etc/inc/priv.defs.inc:895 +msgid "Allow access to the 'Status: Gateway Groups' page." +msgstr "" + +#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:886 +#: etc/inc/priv.defs.inc:892 etc/inc/priv.defs.inc:900 +#: etc/inc/priv.defs.inc:900 +msgid "WebCfg - Status: Gateways page" +msgstr "" + +#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:887 +#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:901 +#: etc/inc/priv.defs.inc:901 +msgid "Allow access to the 'Status: Gateways' page." +msgstr "" + +#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:892 +#: etc/inc/priv.defs.inc:898 etc/inc/priv.defs.inc:906 +#: etc/inc/priv.defs.inc:906 +msgid "WebCfg - Status: Traffic Graph page" +msgstr "" + +#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:893 +#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:907 +#: etc/inc/priv.defs.inc:907 +msgid "Allow access to the 'Status: Traffic Graph' page." +msgstr "" + +#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:899 +#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:913 +#: etc/inc/priv.defs.inc:913 +msgid "WebCfg - Status: CPU load page" +msgstr "" + +#: etc/inc/priv.defs.inc:882 etc/inc/priv.defs.inc:900 +#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:914 +#: etc/inc/priv.defs.inc:914 +msgid "Allow access to the 'Status: CPU load' page." +msgstr "" + +#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:905 +#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:919 +#: etc/inc/priv.defs.inc:919 +msgid "WebCfg - Status: Interfaces page" +msgstr "" + +#: etc/inc/priv.defs.inc:888 etc/inc/priv.defs.inc:906 +#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:920 +#: etc/inc/priv.defs.inc:920 +msgid "Allow access to the 'Status: Interfaces' page." +msgstr "" + +#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:911 +#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:925 +#: etc/inc/priv.defs.inc:925 +msgid "WebCfg - Status: Load Balancer: Pool page" +msgstr "" + +#: etc/inc/priv.defs.inc:894 etc/inc/priv.defs.inc:912 +#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:926 +#: etc/inc/priv.defs.inc:926 +msgid "Allow access to the 'Status: Load Balancer: Pool' page." +msgstr "" + +#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:917 +#: etc/inc/priv.defs.inc:923 etc/inc/priv.defs.inc:931 +#: etc/inc/priv.defs.inc:931 +msgid "WebCfg - Status: Load Balancer: Virtual Server page" +msgstr "" + +#: etc/inc/priv.defs.inc:900 etc/inc/priv.defs.inc:918 +#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:932 +#: etc/inc/priv.defs.inc:932 +msgid "Allow access to the 'Status: Load Balancer: Virtual Server' page." +msgstr "" + +#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:923 +#: etc/inc/priv.defs.inc:929 etc/inc/priv.defs.inc:937 +#: etc/inc/priv.defs.inc:937 +msgid "WebCfg - Status: OpenVPN page" +msgstr "" + +#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:924 +#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:938 +#: etc/inc/priv.defs.inc:938 +msgid "Allow access to the 'Status: OpenVPN' page." +msgstr "" + +#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:929 +#: etc/inc/priv.defs.inc:935 etc/inc/priv.defs.inc:943 +#: etc/inc/priv.defs.inc:943 +msgid "WebCfg - Status: Traffic shaper: Queues page" +msgstr "" + +#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:930 +#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:944 +#: etc/inc/priv.defs.inc:944 +msgid "Allow access to the 'Status: Traffic shaper: Queues' page." +msgstr "" + +#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:935 +#: etc/inc/priv.defs.inc:941 etc/inc/priv.defs.inc:949 +#: etc/inc/priv.defs.inc:949 +msgid "WebCfg - Status: RRD Graphs page" +msgstr "" + +#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:936 +#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:950 +#: etc/inc/priv.defs.inc:950 +msgid "Allow access to the 'Status: RRD Graphs' page." +msgstr "" + +#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:942 +#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:956 +#: etc/inc/priv.defs.inc:956 +msgid "WebCfg - Status: RRD Graphs settings page" +msgstr "" + +#: etc/inc/priv.defs.inc:925 etc/inc/priv.defs.inc:943 +#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:957 +#: etc/inc/priv.defs.inc:957 +msgid "Allow access to the 'Status: RRD Graphs: settings' page." +msgstr "" + +#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:948 +#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:962 +#: etc/inc/priv.defs.inc:962 +msgid "WebCfg - Status: Services page" +msgstr "" + +#: etc/inc/priv.defs.inc:931 etc/inc/priv.defs.inc:949 +#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:963 +#: etc/inc/priv.defs.inc:963 +msgid "Allow access to the 'Status: Services' page." +msgstr "" + +#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:954 +#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:968 +#: etc/inc/priv.defs.inc:968 +msgid "WebCfg - Status: UPnP Status page" +msgstr "" + +#: etc/inc/priv.defs.inc:937 etc/inc/priv.defs.inc:955 +#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:969 +#: etc/inc/priv.defs.inc:969 +msgid "Allow access to the 'Status: UPnP Status' page." +msgstr "" + +#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:960 +#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:974 +#: etc/inc/priv.defs.inc:974 +msgid "WebCfg - Status: Wireless page" +msgstr "" + +#: etc/inc/priv.defs.inc:943 etc/inc/priv.defs.inc:961 +#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:975 +#: etc/inc/priv.defs.inc:975 +msgid "Allow access to the 'Status: Wireless' page." +msgstr "" + +#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:966 +#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:980 +#: etc/inc/priv.defs.inc:980 +msgid "WebCfg - System: General Setup page" +msgstr "" + +#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:967 +#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:981 +#: etc/inc/priv.defs.inc:981 +msgid "Allow access to the 'System: General Setup' page." +msgstr "" + +#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:972 +#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:986 +#: etc/inc/priv.defs.inc:986 +msgid "WebCfg - System: Advanced: Admin Access Page" +msgstr "" + +#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:973 +#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:987 +#: etc/inc/priv.defs.inc:987 +msgid "Allow access to the 'System: Advanced: Admin Access' page." +msgstr "" + +#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:978 +#: etc/inc/priv.defs.inc:984 etc/inc/priv.defs.inc:992 +#: etc/inc/priv.defs.inc:992 +msgid "WebCfg - System: Advanced: Firewall and NAT page" +msgstr "" + +#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:979 +#: etc/inc/priv.defs.inc:985 etc/inc/priv.defs.inc:993 +#: etc/inc/priv.defs.inc:993 +msgid "Allow access to the 'System: Advanced: Firewall and NAT' page." +msgstr "" + +#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:984 +#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:998 +#: etc/inc/priv.defs.inc:998 +msgid "WebCfg - System: Advanced: Miscellaneous page" +msgstr "" + +#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:985 +#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:999 +#: etc/inc/priv.defs.inc:999 +msgid "Allow access to the 'System: Advanced: Miscellaneous' page." +msgstr "" + +#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:990 +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1004 +#: etc/inc/priv.defs.inc:1004 +msgid "WebCfg - System: Advanced: Network page" +msgstr "" + +#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:991 +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1005 +#: etc/inc/priv.defs.inc:1005 +msgid "Allow access to the 'System: Advanced: Networking' page." +msgstr "" + +#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:984 +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1002 +#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1010 +#: etc/inc/priv.defs.inc:1016 etc/inc/priv.defs.inc:1010 +#: etc/inc/priv.defs.inc:1016 +msgid "WebCfg - System: Advanced: Tunables page" +msgstr "" + +#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:985 +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1003 +#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1011 +#: etc/inc/priv.defs.inc:1017 etc/inc/priv.defs.inc:1011 +#: etc/inc/priv.defs.inc:1017 +msgid "Allow access to the 'System: Advanced: Tunables' page." +msgstr "" + +#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:1008 +#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1022 +#: etc/inc/priv.defs.inc:1022 +msgid "WebCfg - System: Authentication Servers" +msgstr "" + +#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:1009 +#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1023 +#: etc/inc/priv.defs.inc:1023 +msgid "Allow access to the 'System: Authentication Servers' page." +msgstr "" + +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1014 +#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1028 +#: etc/inc/priv.defs.inc:1028 +msgid "WebCfg - System: CA Manager" +msgstr "" + +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1015 +#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1029 +#: etc/inc/priv.defs.inc:1029 +msgid "Allow access to the 'System: CA Manager' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1002 etc/inc/priv.defs.inc:1020 +#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1034 +#: etc/inc/priv.defs.inc:1034 +msgid "WebCfg - System: Certificate Manager" +msgstr "" + +#: etc/inc/priv.defs.inc:1003 etc/inc/priv.defs.inc:1021 +#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1035 +#: etc/inc/priv.defs.inc:1035 +msgid "Allow access to the 'System: Certificate Manager' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1026 +#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1040 +#: etc/inc/priv.defs.inc:1040 +msgid "WebCfg - System: CRL Manager" +msgstr "" + +#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1027 +#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1041 +#: etc/inc/priv.defs.inc:1041 +msgid "Allow access to the 'System: CRL Manager' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1032 +#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1046 +#: etc/inc/priv.defs.inc:1046 +msgid "WebCfg - System: Firmware: Manual Update page" +msgstr "" + +#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1033 +#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1047 +#: etc/inc/priv.defs.inc:1047 +msgid "Allow access to the 'System: Firmware: Manual Update' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1038 +#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1052 +#: etc/inc/priv.defs.inc:1052 +msgid "WebCfg - System: Firmware: Check For Update page" +msgstr "" + +#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1039 +#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1053 +#: etc/inc/priv.defs.inc:1053 +msgid "Allow access to the 'System: Firmware: Check For Update' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1044 +#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1058 +#: etc/inc/priv.defs.inc:1058 +msgid "WebCfg - System: Firmware: Auto Update page" +msgstr "" + +#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1045 +#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1059 +#: etc/inc/priv.defs.inc:1059 +msgid "Allow access to the 'System: Firmware: Auto Update' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1050 +#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1064 +#: etc/inc/priv.defs.inc:1064 +msgid "WebCfg - System: Firmware: Settings page" +msgstr "" + +#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1051 +#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1065 +#: etc/inc/priv.defs.inc:1065 +msgid "Allow access to the 'System: Firmware: Settings' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1056 +#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1070 +#: etc/inc/priv.defs.inc:1070 +msgid "WebCfg - System: Gateway Groups page" +msgstr "" + +#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1057 +#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1071 +#: etc/inc/priv.defs.inc:1071 +msgid "Allow access to the 'System: Gateway Groups' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1062 +#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1076 +#: etc/inc/priv.defs.inc:1076 +msgid "WebCfg - System: Gateways: Edit Gateway Groups page" +msgstr "" + +#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1063 +#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1077 +#: etc/inc/priv.defs.inc:1077 +msgid "Allow access to the 'System: Gateways: Edit Gateway Groups' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1068 +#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1082 +#: etc/inc/priv.defs.inc:1082 +msgid "WebCfg - System: Gateways page" +msgstr "" + +#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1069 +#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1083 +#: etc/inc/priv.defs.inc:1083 +msgid "Allow access to the 'System: Gateways' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1074 +#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1088 +#: etc/inc/priv.defs.inc:1088 +msgid "WebCfg - System: Gateways: Edit Gateway page" +msgstr "" + +#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1075 +#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1089 +#: etc/inc/priv.defs.inc:1089 +msgid "Allow access to the 'System: Gateways: Edit Gateway' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1080 +#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1094 +#: etc/inc/priv.defs.inc:1094 +msgid "WebCfg - System: Group manager page" +msgstr "" + +#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1081 +#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1095 +#: etc/inc/priv.defs.inc:1095 +msgid "Allow access to the 'System: Group manager' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1086 +#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1100 +#: etc/inc/priv.defs.inc:1100 +msgid "WebCfg - System: Group Manager: Add Privileges page" +msgstr "" + +#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1087 +#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1101 +#: etc/inc/priv.defs.inc:1101 +msgid "Allow access to the 'System: Group Manager: Add Privileges' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1092 +#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1106 +#: etc/inc/priv.defs.inc:1106 +msgid "WebCfg - System: Static Routes page" +msgstr "" + +#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1093 +#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1107 +#: etc/inc/priv.defs.inc:1107 +msgid "Allow access to the 'System: Static Routes' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1098 +#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1112 +#: etc/inc/priv.defs.inc:1112 +msgid "WebCfg - System: Static Routes: Edit route page" +msgstr "" + +#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1099 +#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1113 +#: etc/inc/priv.defs.inc:1113 +msgid "Allow access to the 'System: Static Routes: Edit route' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1104 +#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1118 +#: etc/inc/priv.defs.inc:1118 +msgid "WebCfg - System: User Manager page" +msgstr "" + +#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1105 +#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1119 +#: etc/inc/priv.defs.inc:1119 +msgid "Allow access to the 'System: User Manager' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1110 +#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1124 +#: etc/inc/priv.defs.inc:1124 +msgid "WebCfg - System: User Manager: Add Privileges page" +msgstr "" + +#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1111 +#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1125 +#: etc/inc/priv.defs.inc:1125 +msgid "Allow access to the 'System: User Manager: Add Privileges' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1116 +#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1130 +#: etc/inc/priv.defs.inc:1130 +msgid "WebCfg - System: User Password Manager page" +msgstr "" + +#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1117 +#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1131 +#: etc/inc/priv.defs.inc:1131 +msgid "Allow access to the 'System: User Password Manager' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1122 +#: etc/inc/priv.defs.inc:1128 +msgid "WebCfg - System: User manager: settings page" +msgstr "" + +#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1123 +#: etc/inc/priv.defs.inc:1129 +msgid "Allow access to the 'System: User manager: settings' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1128 +#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1142 +#: etc/inc/priv.defs.inc:1142 +msgid "WebCfg - System: User Manager: Settings: Test LDAP page" +msgstr "" + +#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1129 +#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1143 +#: etc/inc/priv.defs.inc:1143 +msgid "Allow access to the 'System: User Manager: Settings: Test LDAP' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1134 +#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1148 +#: etc/inc/priv.defs.inc:1148 +msgid "WebCfg - System: Firmware: Manual Update page (progress bar)" +msgstr "" + +#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1135 +#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1149 +#: etc/inc/priv.defs.inc:1149 +msgid "" +"Allow access to the 'System: Firmware: Manual Update: Progress bar' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1140 +#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1154 +#: etc/inc/priv.defs.inc:1154 +msgid "WebCfg - Hidden: Upload Configuration page" +msgstr "" + +#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1141 +#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1155 +#: etc/inc/priv.defs.inc:1155 +msgid "Allow access to the 'Hidden: Upload Configuration' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1128 etc/inc/priv.defs.inc:1146 +#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1160 +#: etc/inc/priv.defs.inc:1160 +msgid "WebCfg - VPN: IPsec page" +msgstr "" + +#: etc/inc/priv.defs.inc:1129 etc/inc/priv.defs.inc:1147 +#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1161 +#: etc/inc/priv.defs.inc:1161 +msgid "Allow access to the 'VPN: IPsec' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1152 +#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1166 +#: etc/inc/priv.defs.inc:1166 +msgid "WebCfg - VPN: IPsec: Pre-Shared Keys List" +msgstr "" + +#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1153 +#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1167 +#: etc/inc/priv.defs.inc:1167 +msgid "Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1158 +#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1172 +#: etc/inc/priv.defs.inc:1172 +msgid "WebCfg - VPN: IPsec: Edit Pre-Shared Keys" +msgstr "" + +#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1159 +#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1173 +#: etc/inc/priv.defs.inc:1173 +msgid "Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1164 +#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1178 +#: etc/inc/priv.defs.inc:1178 +msgid "WebCfg - VPN: IPsec: Mobile page" +msgstr "" + +#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1165 +#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1179 +#: etc/inc/priv.defs.inc:1179 +msgid "Allow access to the 'VPN: IPsec: Mobile' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1170 +#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1184 +#: etc/inc/priv.defs.inc:1184 +msgid "WebCfg - VPN: IPsec: Edit Phase 1 page" +msgstr "" + +#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1171 +#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1185 +#: etc/inc/priv.defs.inc:1185 +msgid "Allow access to the 'VPN: IPsec: Edit Phase 1' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1176 +#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1190 +#: etc/inc/priv.defs.inc:1190 +msgid "WebCfg - VPN: IPsec: Edit Phase 2 page" +msgstr "" + +#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1177 +#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1191 +#: etc/inc/priv.defs.inc:1191 +msgid "Allow access to the 'VPN: IPsec: Edit Phase 2' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1182 +#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1196 +#: etc/inc/priv.defs.inc:1196 +msgid "WebCfg - VPN: VPN L2TP page" +msgstr "" + +#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1183 +#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1197 +#: etc/inc/priv.defs.inc:1197 +msgid "Allow access to the 'VPN: VPN L2TP' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1188 +#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1202 +#: etc/inc/priv.defs.inc:1202 +msgid "WebCfg - VPN: VPN L2TP : Users page" +msgstr "" + +#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1189 +#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1203 +#: etc/inc/priv.defs.inc:1203 +msgid "Allow access to the 'VPN: VPN L2TP : Users' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1194 +#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1208 +#: etc/inc/priv.defs.inc:1208 +msgid "WebCfg - VPN: VPN L2TP : Users : Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1195 +#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1209 +#: etc/inc/priv.defs.inc:1209 +msgid "Allow access to the 'VPN: VPN L2TP : Users : Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1200 +#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1214 +#: etc/inc/priv.defs.inc:1214 +msgid "WebCfg - OpenVPN: Client page" +msgstr "" + +#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1201 +#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1215 +#: etc/inc/priv.defs.inc:1215 +msgid "Allow access to the 'OpenVPN: Client' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1206 +#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1220 +#: etc/inc/priv.defs.inc:1220 +msgid "WebCfg - OpenVPN: Client Specific Override page" +msgstr "" + +#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1207 +#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1221 +#: etc/inc/priv.defs.inc:1221 +msgid "Allow access to the 'OpenVPN: Client Specific Override' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1212 +#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1226 +#: etc/inc/priv.defs.inc:1226 +msgid "WebCfg - OpenVPN: Server page" +msgstr "" + +#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1213 +#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1227 +#: etc/inc/priv.defs.inc:1227 +msgid "Allow access to the 'OpenVPN: Server' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1218 +#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1232 +#: etc/inc/priv.defs.inc:1232 +msgid "WebCfg - Services: PPPoE Server page" +msgstr "" + +#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1219 +#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1233 +#: etc/inc/priv.defs.inc:1233 +msgid "Allow access to the 'Services: PPPoE Server' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1224 +#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1238 +#: etc/inc/priv.defs.inc:1238 +msgid "WebCfg - Services: PPPoE Server: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1225 +#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1239 +#: etc/inc/priv.defs.inc:1239 +msgid "Allow access to the 'Services: PPPoE Server: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1230 +#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1244 +#: etc/inc/priv.defs.inc:1244 +msgid "WebCfg - VPN: VPN PPTP page" +msgstr "" + +#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1231 +#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1245 +#: etc/inc/priv.defs.inc:1245 +msgid "Allow access to the 'VPN: VPN PPTP' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1236 +#: etc/inc/priv.defs.inc:1242 etc/inc/priv.defs.inc:1250 +#: etc/inc/priv.defs.inc:1250 +msgid "WebCfg - VPN: VPN PPTP: Users page" +msgstr "" + +#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1237 +#: etc/inc/priv.defs.inc:1243 etc/inc/priv.defs.inc:1251 +#: etc/inc/priv.defs.inc:1251 +msgid "Allow access to the 'VPN: VPN PPTP: Users' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1242 +#: etc/inc/priv.defs.inc:1248 etc/inc/priv.defs.inc:1256 +#: etc/inc/priv.defs.inc:1256 +msgid "WebCfg - VPN: VPN PPTP: User: Edit page" +msgstr "" + +#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1243 +#: etc/inc/priv.defs.inc:1249 etc/inc/priv.defs.inc:1257 +#: etc/inc/priv.defs.inc:1257 +msgid "Allow access to the 'VPN: VPN PPTP: User: Edit' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1248 +#: etc/inc/priv.defs.inc:1254 etc/inc/priv.defs.inc:1262 +#: etc/inc/priv.defs.inc:1262 +msgid "WebCfg - pfSense wizard subsystem page" +msgstr "" + +#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1249 +#: etc/inc/priv.defs.inc:1255 etc/inc/priv.defs.inc:1263 +#: etc/inc/priv.defs.inc:1263 +msgid "Allow access to the 'pfSense wizard subsystem' page." +msgstr "" + +#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1254 +#: etc/inc/priv.defs.inc:1260 etc/inc/priv.defs.inc:1268 +#: etc/inc/priv.defs.inc:1268 +msgid "WebCfg - XMLRPC Library page" +msgstr "" + +#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1255 +#: etc/inc/priv.defs.inc:1261 etc/inc/priv.defs.inc:1269 +#: etc/inc/priv.defs.inc:1269 +msgid "Allow access to the 'XMLRPC Library' page." +msgstr "" + +#: etc/inc/rrd.inc:45 etc/inc/rrd.inc:45 +#, php-format +msgid "RRD dump failed exited with %1$s, the error is: %2$s" +msgstr "" + +#: etc/inc/rrd.inc:56 etc/inc/rrd.inc:92 etc/inc/rrd.inc:96 etc/inc/rrd.inc:98 +#: etc/inc/rrd.inc:98 +#, php-format +msgid "RRD create failed exited with %1$s, the error is: %2$s" +msgstr "" + +#: etc/inc/rrd.inc:70 etc/inc/rrd.inc:106 etc/inc/rrd.inc:110 +#: etc/inc/rrd.inc:113 etc/inc/rrd.inc:113 +#, php-format +msgid "" +"Import RRD has %1$s DS values and %2$s RRA databases, new format RRD has " +"%3$s DS values and %4$s RRA databases" +msgstr "" + +#: etc/inc/rrd.inc:154 etc/inc/rrd.inc:190 etc/inc/rrd.inc:194 +#: etc/inc/rrd.inc:197 etc/inc/rrd.inc:197 +#, php-format +msgid "The new RRD now has %1$s DS values and %2$s RRA databases" +msgstr "" + +#: etc/inc/rrd.inc:162 etc/inc/rrd.inc:198 etc/inc/rrd.inc:202 +#: etc/inc/rrd.inc:205 etc/inc/rrd.inc:205 +msgid "Generating RRD graphs..." +msgstr "" + +#: etc/inc/rrd.inc:247 +#, php-format +msgid "RRD restore failed exited with %1$s, the error is: %2$s%3$s" +msgstr "" + +#: etc/inc/rrd.inc:758 etc/inc/rrd.inc:782 etc/inc/rrd.inc:803 +#: etc/inc/rrd.inc:805 etc/inc/rrd.inc:808 etc/inc/rrd.inc:808 +msgid "Creating rrd update script" +msgstr "" + +#: etc/inc/smtp.inc:92 etc/inc/smtp.inc:92 +msgid ": data access time out" +msgstr "" + +#: etc/inc/smtp.inc:95 etc/inc/smtp.inc:95 +msgid ": the server disconnected" +msgstr "" + +#: etc/inc/smtp.inc:107 etc/inc/smtp.inc:107 +msgid "reached the end of data while reading from the SMTP server conection" +msgstr "" + +#: etc/inc/smtp.inc:113 etc/inc/smtp.inc:113 +msgid "it was not possible to read line from the SMTP server" +msgstr "" + +#: etc/inc/smtp.inc:135 etc/inc/smtp.inc:135 +msgid "it was not possible to send a line to the SMTP server" +msgstr "" + +#: etc/inc/smtp.inc:149 etc/inc/smtp.inc:149 +msgid "it was not possible to send data to the SMTP server" +msgstr "" + +#: etc/inc/smtp.inc:221 etc/inc/smtp.inc:221 +msgid "establishing SSL connections requires at least PHP version 4.3.0" +msgstr "" + +#: etc/inc/smtp.inc:224 etc/inc/smtp.inc:224 +msgid "establishing SSL connections requires the OpenSSL extension enabled" +msgstr "" + +#: etc/inc/smtp.inc:233 etc/inc/smtp.inc:233 +#, php-format +msgid "could not resolve host \"%s\"" +msgstr "" + +#: etc/inc/smtp.inc:237 etc/inc/smtp.inc:237 +#, php-format +msgid "domain \"%s\" resolved to an address excluded to be valid" +msgstr "" + +#: etc/inc/smtp.inc:239 etc/inc/smtp.inc:239 +#, php-format +msgid "Connecting to host address \"%1$s\" port %2$s..." +msgstr "" + +#: etc/inc/smtp.inc:246 etc/inc/smtp.inc:246 +msgid "-3 socket could not be created" +msgstr "" + +#: etc/inc/smtp.inc:248 etc/inc/smtp.inc:248 +#, php-format +msgid "-4 dns lookup on hostname \"%s\" failed" +msgstr "" + +#: etc/inc/smtp.inc:250 etc/inc/smtp.inc:250 +msgid "-5 connection refused or timed out" +msgstr "" + +#: etc/inc/smtp.inc:252 etc/inc/smtp.inc:252 +msgid "-6 fdopen() call failed" +msgstr "" + +#: etc/inc/smtp.inc:254 etc/inc/smtp.inc:254 +msgid "-7 setvbuf() call failed" +msgstr "" + +#: etc/inc/smtp.inc:256 etc/inc/smtp.inc:256 +#, php-format +msgid "could not connect to the host \"%1$s\": %2$s" +msgstr "" + +#: etc/inc/smtp.inc:265 etc/inc/smtp.inc:265 +msgid "" +"it is not possible to authenticate using the specified mechanism because the " +"SASL library class is not loaded" +msgstr "" + +#: etc/inc/smtp.inc:289 etc/inc/smtp.inc:289 +#, php-format +msgid "authenticated mechanism %1$s may not be used: %2$s" +msgstr "" + +#: etc/inc/smtp.inc:294 etc/inc/smtp.inc:294 +msgid "Could not start the SASL authentication client:" +msgstr "" + +#: etc/inc/smtp.inc:301 etc/inc/smtp.inc:301 +msgid "Could not send the AUTH command" +msgstr "" + +#: etc/inc/smtp.inc:316 etc/inc/smtp.inc:346 etc/inc/smtp.inc:316 +#: etc/inc/smtp.inc:346 +msgid "Authentication error:" +msgstr "" + +#: etc/inc/smtp.inc:331 etc/inc/smtp.inc:331 +msgid "Could not send the authentication step message" +msgstr "" + +#: etc/inc/smtp.inc:351 etc/inc/smtp.inc:351 +msgid "Could not process the SASL authentication step:" +msgstr "" + +#: etc/inc/smtp.inc:365 etc/inc/smtp.inc:365 +msgid "connection is already established" +msgstr "" + +#: etc/inc/smtp.inc:403 etc/inc/smtp.inc:403 +msgid "it was not specified the POP3 authentication user" +msgstr "" + +#: etc/inc/smtp.inc:409 etc/inc/smtp.inc:409 +msgid "it was not specified the POP3 authentication password" +msgstr "" + +#: etc/inc/smtp.inc:413 etc/inc/smtp.inc:413 +#, php-format +msgid "Resolving POP3 authentication host \"%s\"..." +msgstr "" + +#: etc/inc/smtp.inc:420 etc/inc/smtp.inc:420 +msgid "POP3 authentication server greeting was not found" +msgstr "" + +#: etc/inc/smtp.inc:428 etc/inc/smtp.inc:428 +msgid "POP3 authentication user was not accepted:" +msgstr "" + +#: etc/inc/smtp.inc:436 etc/inc/smtp.inc:436 +msgid "POP3 authentication password was not accepted:" +msgstr "" + +#: etc/inc/smtp.inc:445 etc/inc/smtp.inc:445 +msgid "could not determine the SMTP to connect" +msgstr "" + +#: etc/inc/smtp.inc:451 etc/inc/smtp.inc:451 +#, php-format +msgid "Resolving SMTP server domain \"%s\"..." +msgstr "" + +#: etc/inc/smtp.inc:463 etc/inc/smtp.inc:463 +#, php-format +msgid "Connected to SMTP server \"%s\"." +msgstr "" + +#: etc/inc/smtp.inc:517 etc/inc/smtp.inc:519 etc/inc/smtp.inc:519 +msgid "server does not require authentication" +msgstr "" + +#: etc/inc/smtp.inc:581 etc/inc/smtp.inc:583 etc/inc/smtp.inc:583 +msgid "" +"it is not supported any of the authentication mechanisms required by the " +"server" +msgstr "" + +#: etc/inc/smtp.inc:613 etc/inc/smtp.inc:615 etc/inc/smtp.inc:615 +msgid "" +"direct delivery connection is already established and sender is already set" +msgstr "" + +#: etc/inc/smtp.inc:621 etc/inc/smtp.inc:623 etc/inc/smtp.inc:623 +msgid "connection is not in the initial state" +msgstr "" + +#: etc/inc/smtp.inc:643 etc/inc/smtp.inc:645 etc/inc/smtp.inc:645 +msgid "it was not specified a valid direct recipient" +msgstr "" + +#: etc/inc/smtp.inc:662 etc/inc/smtp.inc:664 etc/inc/smtp.inc:664 +msgid "" +"it is not possible to deliver directly to recipients of different domains" +msgstr "" + +#: etc/inc/smtp.inc:667 etc/inc/smtp.inc:669 etc/inc/smtp.inc:669 +msgid "connection is already established and the recipient is already set" +msgstr "" + +#: etc/inc/smtp.inc:679 etc/inc/smtp.inc:681 etc/inc/smtp.inc:681 +msgid "connection is not in the recipient setting state" +msgstr "" + +#: etc/inc/smtp.inc:708 etc/inc/smtp.inc:710 etc/inc/smtp.inc:710 +msgid "connection is not in the start sending data state" +msgstr "" + +#: etc/inc/smtp.inc:738 etc/inc/smtp.inc:749 etc/inc/smtp.inc:740 +#: etc/inc/smtp.inc:751 etc/inc/smtp.inc:740 etc/inc/smtp.inc:751 +msgid "connection is not in the sending data state" +msgstr "" + +#: etc/inc/smtp.inc:785 etc/inc/smtp.inc:787 etc/inc/smtp.inc:787 +msgid "it was not previously established a SMTP connection" +msgstr "" + +#: etc/inc/upgrade_config.inc:113 etc/inc/upgrade_config.inc:113 +#, php-format +msgid "%sWarning: filter rule removed (interface '%s' does not exist anymore)." +msgstr "" + +#: etc/inc/upgrade_config.inc:125 etc/inc/upgrade_config.inc:125 +#, php-format +msgid "" +"%sWarning: filter rule removed (source network '%s' does not exist anymore)." +msgstr "" + +#: etc/inc/upgrade_config.inc:138 etc/inc/upgrade_config.inc:138 +#, php-format +msgid "" +"%sWarning: filter rule removed (destination network '%s' does not exist " +"anymore)." +msgstr "" + +#: etc/inc/upgrade_config.inc:158 etc/inc/upgrade_config.inc:158 +#, php-format +msgid "" +"%sWarning: traffic shaper rule removed (interface '%s' does not exist " +"anymore)." +msgstr "" + +#: etc/inc/upgrade_config.inc:170 etc/inc/upgrade_config.inc:170 +#, php-format +msgid "" +"%sWarning: traffic shaper rule removed (source network '%s' does not exist " +"anymore)." +msgstr "" + +#: etc/inc/upgrade_config.inc:183 etc/inc/upgrade_config.inc:183 +#, php-format +msgid "" +"%sWarning: traffic shaper rule removed (destination network '%s' does not " +"exist anymore)." +msgstr "" + +#: etc/inc/upgrade_config.inc:333 etc/inc/upgrade_config.inc:333 +#, php-format +msgid "CARP vhid %s" +msgstr "" + +#: etc/inc/upgrade_config.inc:510 etc/inc/upgrade_config.inc:510 +msgid "Permit IPsec traffic." +msgstr "" + +#: etc/inc/upgrade_config.inc:585 etc/inc/upgrade_config.inc:585 +msgid "System Administrators" +msgstr "" + +#: etc/inc/upgrade_config.inc:604 etc/inc/upgrade_config.inc:604 +msgid "" +"Indicates whether this user will lock access to the webConfigurator for " +"other users." +msgstr "" + +#: etc/inc/upgrade_config.inc:607 etc/inc/upgrade_config.inc:607 +msgid "" +"Indicates whether this user will lock individual HTML pages after having " +"accessed a particular page (the lock will be freed if the user leaves or " +"saves the page form)." +msgstr "" + +#: etc/inc/upgrade_config.inc:610 etc/inc/upgrade_config.inc:610 +msgid "Indicates whether this user is able to login for example via SSH." +msgstr "" + +#: etc/inc/upgrade_config.inc:613 etc/inc/upgrade_config.inc:613 +#, php-format +msgid "" +"Indicates whether this user is allowed to copy files onto the %s appliance " +"via SCP/SFTP. If you are going to use this privilege, you must install " +"scponly on the appliance (Hint: pkg_add -r scponly)." +msgstr "" + +#: etc/inc/upgrade_config.inc:616 etc/inc/upgrade_config.inc:616 +msgid "" +"This user is associated with the UNIX root user (you should associate this " +"privilege only with one single user)." +msgstr "" + +#: etc/inc/upgrade_config.inc:633 etc/inc/upgrade_config.inc:633 +msgid "Drop packets to closed TCP ports without returning a RST" +msgstr "" + +#: etc/inc/upgrade_config.inc:637 etc/inc/upgrade_config.inc:637 +msgid "Do not send ICMP port unreachable messages for closed UDP ports" +msgstr "" + +#: etc/inc/upgrade_config.inc:641 etc/inc/upgrade_config.inc:641 +msgid "Randomize the ID field in IP packets (default is 0: sequential IP IDs)" +msgstr "" + +#: etc/inc/upgrade_config.inc:645 etc/inc/upgrade_config.inc:645 +msgid "Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)" +msgstr "" + +#: etc/inc/upgrade_config.inc:649 etc/inc/upgrade_config.inc:649 +msgid "Sending of IPv4 ICMP redirects" +msgstr "" + +#: etc/inc/upgrade_config.inc:653 etc/inc/upgrade_config.inc:653 +msgid "Sending of IPv6 ICMP redirects" +msgstr "" + +#: etc/inc/upgrade_config.inc:657 etc/inc/upgrade_config.inc:657 +msgid "Generate SYN cookies for outbound SYN-ACK packets" +msgstr "" + +#: etc/inc/upgrade_config.inc:661 etc/inc/upgrade_config.inc:661 +msgid "Maximum incoming TCP datagram size" +msgstr "" + +#: etc/inc/upgrade_config.inc:665 etc/inc/upgrade_config.inc:665 +msgid "Maximum outgoing TCP datagram size" +msgstr "" + +#: etc/inc/upgrade_config.inc:669 etc/inc/upgrade_config.inc:669 +msgid "" +"Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-" +"January/002534.html)" +msgstr "" + +#: etc/inc/upgrade_config.inc:673 etc/inc/upgrade_config.inc:673 +msgid "Do not delay ACK to try and piggyback it onto a data packet" +msgstr "" + +#: etc/inc/upgrade_config.inc:677 etc/inc/upgrade_config.inc:677 +msgid "Maximum outgoing UDP datagram size" +msgstr "" + +#: etc/inc/upgrade_config.inc:681 etc/inc/upgrade_config.inc:681 +msgid "" +"Handling of non-IP packets which are not passed to pfil (see if_bridge(4))" +msgstr "" + +#: etc/inc/upgrade_config.inc:685 etc/inc/upgrade_config.inc:685 +msgid "Allow unprivileged access to tap(4) device nodes" +msgstr "" + +#: etc/inc/upgrade_config.inc:689 etc/inc/upgrade_config.inc:689 +msgid "Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())" +msgstr "" + +#: etc/inc/upgrade_config.inc:693 etc/inc/upgrade_config.inc:693 +msgid "" +"The system will attempt to calculate the bandwidth delay product for each " +"connection and limit the amount of data queued to the network to just the " +"amount required to maintain optimum throughput. " +msgstr "" + +#: etc/inc/upgrade_config.inc:697 etc/inc/upgrade_config.inc:697 +msgid "Set ICMP Limits" +msgstr "" + +#: etc/inc/upgrade_config.inc:701 etc/inc/upgrade_config.inc:701 +msgid "TCP Offload engine" +msgstr "" + +#: etc/inc/upgrade_config.inc:742 etc/inc/upgrade_config.inc:742 +#, php-format +msgid "Interface %s Static Gateway" +msgstr "" + +#: etc/inc/upgrade_config.inc:745 etc/inc/upgrade_config.inc:745 +#, php-format +msgid "Interface %s Dynamic Gateway" +msgstr "" + +#: etc/inc/upgrade_config.inc:810 etc/inc/upgrade_config.inc:811 +#: etc/inc/upgrade_config.inc:811 +#, php-format +msgid "Upgraded static route for %s" +msgstr "" + +#: etc/inc/upgrade_config.inc:907 etc/inc/upgrade_config.inc:908 +#: etc/inc/upgrade_config.inc:908 +#, php-format +msgid "Sitedown pool for VS: %s" +msgstr "" + +#: etc/inc/upgrade_config.inc:1060 etc/inc/upgrade_config.inc:1062 +#: etc/inc/upgrade_config.inc:1063 etc/inc/upgrade_config.inc:1063 +#, php-format +msgid "phase2 for %s" +msgstr "" + +#: etc/inc/upgrade_config.inc:1287 etc/inc/upgrade_config.inc:1289 +#: etc/inc/upgrade_config.inc:1290 etc/inc/upgrade_config.inc:1290 +#, php-format +msgid "Upgraded Dyndns %s" +msgstr "" + +#: etc/inc/upgrade_config.inc:1339 etc/inc/upgrade_config.inc:1341 +#: etc/inc/upgrade_config.inc:1342 etc/inc/upgrade_config.inc:1342 +msgid "All Users" +msgstr "" + +#: etc/inc/upgrade_config.inc:1471 etc/inc/upgrade_config.inc:1473 +#: etc/inc/upgrade_config.inc:1474 etc/inc/upgrade_config.inc:1474 +#, php-format +msgid "Converted bridged %s" +msgstr "" + +#: etc/inc/upgrade_config.inc:1797 etc/inc/upgrade_config.inc:1845 +#: etc/inc/upgrade_config.inc:1847 etc/inc/upgrade_config.inc:1848 +#: etc/inc/upgrade_config.inc:1848 +msgid "Auto added OpenVPN rule from config upgrade." +msgstr "" + +#: etc/inc/voucher.inc:364 etc/inc/voucher.inc:367 etc/inc/voucher.inc:382 +#, php-format +msgid "%1$s (%2$s/%3$s) active and good for %4$d Minutes" +msgstr "" + +#: etc/inc/voucher.inc:401 etc/inc/voucher.inc:404 etc/inc/voucher.inc:419 +msgid "Access denied!" +msgstr "" + +#: etc/inc/voucher.inc:403 etc/inc/voucher.inc:406 etc/inc/voucher.inc:421 +#, php-format +msgid "Access granted for %d Minutes in total." +msgstr "" + +#: etc/inc/voucher.inc:466 etc/inc/voucher.inc:469 etc/inc/voucher.inc:484 +msgid "Enabling voucher support... " +msgstr "" + +#: etc/inc/voucher.inc:505 etc/inc/voucher.inc:508 etc/inc/voucher.inc:523 +#, php-format +msgid "Error: cannot write voucher.cfg" +msgstr "" + +#: etc/inc/voucher.inc:556 etc/inc/voucher.inc:559 etc/inc/voucher.inc:574 +#, php-format +msgid "cant write %1$s/voucher_%s_used_%2$s.db" +msgstr "" + +#: etc/inc/voucher.inc:635 etc/inc/voucher.inc:638 etc/inc/voucher.inc:653 +#, php-format +msgid "cant read %1$s/voucher_%s_used_%2$s.db" +msgstr "" + +#: etc/inc/voucher.inc:653 etc/inc/voucher.inc:652 etc/inc/voucher.inc:655 +#: etc/inc/voucher.inc:670 +#, php-format +msgid "Voucher: %s" +msgstr "" + +#: etc/inc/xmlparse_attr.inc:197 etc/inc/xmlparse_attr.inc:197 +#, php-format +msgid "XML error: %1$s at line %2$d" +msgstr "" + +#: etc/inc/xmlreader.inc:129 etc/inc/xmlreader.inc:129 +#, php-format +msgid "Error returned while trying to parse %s" +msgstr "" + +#: etc/inc/zeromq.inc:225 etc/inc/zeromq.inc:236 etc/inc/zeromq.inc:225 +#: etc/inc/zeromq.inc:236 +#, php-format +msgid "Merged in config (%s sections) from ZeroMQ client." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/services_dyndns.php:76 usr/local/www/services_snmp.php:159 +#: usr/local/www/services_wol.php:115 usr/local/www/services_wol_edit.php:112 +#: usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/services_captiveportal.php:63 +#: usr/local/www/services_captiveportal_filemanager.php:75 +#: usr/local/www/services_captiveportal_ip.php:64 +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_mac.php:63 +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_dhcp.php:421 +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/services_dhcp_relay.php:100 +#: usr/local/www/services_dnsmasq.php:119 +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/services_captiveportal_hostname.php:66 +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/fbegin.inc:171 usr/local/www/fbegin.inc:343 +#: usr/local/www/status_services.php:226 +#: usr/local/www/services_dyndns_edit.php:133 +#: usr/local/www/services_igmpproxy.php:80 +#: usr/local/www/services_rfc2136.php:55 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/vpn_pppoe_edit.php:234 usr/local/www/services_dhcpv6.php:359 +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_dyndns_edit.php:156 usr/local/www/fbegin.inc:189 +#: usr/local/www/fbegin.inc:361 usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/services_unbound.php:102 +#: usr/local/www/services_unbound_advanced.php:88 +#: usr/local/www/services_dyndns.php:85 usr/local/www/services_dhcp.php:433 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/services_ntpd.php:71 usr/local/www/services_dhcp_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/services_dhcpv6.php:386 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/fbegin.inc:197 usr/local/www/fbegin.inc:307 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_router_advertisements.php:194 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/status_services.php:222 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_dhcp.php:527 usr/local/www/services_ntpd.php:76 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_dhcpv6.php:367 +#: usr/local/www/system_authservers.php:187 +#: usr/local/www/status_services.php:220 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dyndns_edit.php:160 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/services_dhcp.php:526 +#: usr/local/www/services_dhcpv6.php:362 +#: usr/local/www/system_authservers.php:188 usr/local/www/fbegin.inc:188 +#: usr/local/www/fbegin.inc:299 usr/local/www/services_dnsmasq.php:123 +#: usr/local/www/services_dyndns.php:64 usr/local/www/services_snmp.php:165 +#: usr/local/www/status_services.php:63 +#: usr/local/www/services_router_advertisements.php:189 +#: usr/local/www/services_dyndns_edit.php:162 +#: usr/local/www/services_dhcp.php:546 usr/local/www/services_dnsmasq.php:125 +#: usr/local/www/services_dyndns.php:60 usr/local/www/services_dnsmasq.php:146 +#: usr/local/www/services_rfc2136.php:55 usr/local/www/status_services.php:63 +#: usr/local/www/services_router_advertisements.php:189 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dyndns_edit.php:162 +#: usr/local/www/services_wol.php:115 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/services_wol_edit.php:112 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/services_ntpd.php:76 +#: usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/services_dhcp.php:546 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/services_dhcpv6.php:362 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/system_authservers.php:188 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_igmpproxy.php:80 +#: usr/local/www/services_dnsmasq_edit.php:166 usr/local/www/fbegin.inc:188 +#: usr/local/www/fbegin.inc:299 usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/services_dnsmasq.php:146 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/services_dyndns.php:60 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dhcp_relay.php:100 +#: usr/local/www/services_snmp.php:165 +msgid "Services" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/diag_logs.php:84 usr/local/www/diag_logs_auth.php:72 +#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_filter.php:108 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_ipsec.php:109 usr/local/www/diag_logs_ntpd.php:72 +#: usr/local/www/diag_logs_openvpn.php:76 +#: usr/local/www/diag_logs_settings.php:217 +#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/diag_logs_filter_summary.php:191 +#: usr/local/www/diag_logs_ppp.php:77 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/diag_logs_relayd.php:73 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/fbegin.inc:130 usr/local/www/fbegin.inc:165 +#: usr/local/www/status_lb_pool.php:62 usr/local/www/status_lb_vs.php:56 +#: usr/local/www/diag_logs_wireless.php:74 +#: usr/local/www/diag_logs_routing.php:72 +#: usr/local/www/diag_logs_settings.php:222 usr/local/www/fbegin.inc:147 +#: usr/local/www/fbegin.inc:182 usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/diag_logs_resolver.php:85 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/diag_logs_gateways.php:85 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_routing.php:73 +#: usr/local/www/diag_logs_settings.php:229 usr/local/www/fbegin.inc:156 +#: usr/local/www/fbegin.inc:190 usr/local/www/diag_logs_relayd.php:74 +#: usr/local/www/diag_logs_auth.php:73 usr/local/www/diag_logs_ipsec.php:110 +#: usr/local/www/diag_logs_resolver.php:86 usr/local/www/diag_logs_ntpd.php:73 +#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_wireless.php:75 +#: usr/local/www/diag_logs_filter_summary.php:192 +#: usr/local/www/diag_logs_gateways.php:86 +#: usr/local/www/diag_logs_openvpn.php:77 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_filter.php:98 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_ppp.php:75 usr/local/www/fbegin.inc:148 +#: usr/local/www/fbegin.inc:181 usr/local/www/diag_logs_filter.php:128 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/diag_logs_auth.php:73 +#: usr/local/www/diag_logs_settings.php:229 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/diag_logs_filter.php:128 +#: usr/local/www/diag_logs_routing.php:73 usr/local/www/diag_logs_dhcp.php:78 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/diag_logs.php:84 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_ntpd.php:73 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/diag_logs_openvpn.php:77 usr/local/www/status_lb_pool.php:62 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/diag_logs_ppp.php:75 usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/diag_logs_gateways.php:86 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/fbegin.inc:148 usr/local/www/fbegin.inc:181 +#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_relayd.php:74 +#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/diag_logs_ipsec.php:110 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/status_lb_vs.php:56 usr/local/www/diag_logs_wireless.php:75 +#: usr/local/www/diag_logs_resolver.php:86 +#: usr/local/www/diag_logs_filter_summary.php:192 +msgid "Load Balancer" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_virtual_server.php:116 +#: usr/local/www/load_balancer_relay_action.php:127 +#: usr/local/www/load_balancer_pool.php:119 +#: usr/local/www/load_balancer_monitor.php:110 +#: usr/local/www/load_balancer_relay_protocol.php:123 +#: usr/local/www/status_lb_pool.php:121 usr/local/www/status_lb_vs.php:68 +#: usr/local/www/load_balancer_setting.php:120 +#: usr/local/www/load_balancer_setting.php:119 +#: usr/local/www/load_balancer_virtual_server.php:114 +#: usr/local/www/load_balancer_monitor.php:108 +#: usr/local/www/load_balancer_relay_protocol.php:121 +#: usr/local/www/load_balancer_relay_action.php:125 +#: usr/local/www/load_balancer_pool.php:117 +#: usr/local/www/load_balancer_relay_protocol.php:121 +#: usr/local/www/load_balancer_relay_action.php:125 +#: usr/local/www/status_lb_pool.php:121 +#: usr/local/www/load_balancer_setting.php:119 +#: usr/local/www/load_balancer_pool.php:117 +#: usr/local/www/load_balancer_monitor.php:108 +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_virtual_server.php:114 +#: usr/local/www/status_lb_vs.php:68 +msgid "Virtual Servers" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:108 +#: usr/local/www/load_balancer_virtual_server.php:106 +#: usr/local/www/load_balancer_virtual_server.php:106 +msgid "The virtual server configuration has been changed" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:108 +#: usr/local/www/firewall_shaper_layer7.php:401 +#: usr/local/www/firewall_shaper_vinterface.php:366 +#: usr/local/www/firewall_shaper_wizards.php:96 +#: usr/local/www/firewall_aliases.php:160 +#: usr/local/www/firewall_nat_1to1.php:87 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_shaper.php:403 +#: usr/local/www/firewall_shaper_queues.php:187 +#: usr/local/www/firewall_virtual_ip.php:164 usr/local/www/interfaces.php:1222 +#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86 +#: usr/local/www/vpn_ipsec_mobile.php:303 +#: usr/local/www/load_balancer_monitor.php:102 usr/local/www/vpn_pppoe.php:96 +#: usr/local/www/firewall_nat.php:175 usr/local/www/services_dhcp.php:536 +#: usr/local/www/services_dnsmasq.php:147 +#: usr/local/www/load_balancer_relay_protocol.php:114 +#: usr/local/www/services_igmpproxy.php:90 +#: usr/local/www/system_gateways.php:134 usr/local/www/firewall_nat_npt.php:87 +#: usr/local/www/services_dhcpv6.php:461 +#: usr/local/www/services_captiveportal_zones.php:47 +#: usr/local/www/firewall_nat_out.php:304 +#: usr/local/www/load_balancer_setting.php:111 +#: usr/local/www/services_unbound.php:129 +#: usr/local/www/services_unbound_advanced.php:116 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/services_dhcp.php:549 usr/local/www/firewall_aliases.php:163 +#: usr/local/www/interfaces.php:1326 usr/local/www/services_dhcpv6.php:488 +#: usr/local/www/services_dnsmasq.php:148 +#: usr/local/www/firewall_nat_out.php:305 +#: usr/local/www/load_balancer_setting.php:110 usr/local/www/vpn_pppoe.php:97 +#: usr/local/www/vpn_ipsec.php:133 usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/firewall_nat.php:180 usr/local/www/firewall_shaper.php:404 +#: usr/local/www/vpn_ipsec_keys.php:85 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/load_balancer_virtual_server.php:106 +#: usr/local/www/load_balancer_monitor.php:100 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/services_dhcp.php:653 usr/local/www/firewall_aliases.php:167 +#: usr/local/www/interfaces.php:1314 +#: usr/local/www/services_captiveportal_zones.php:48 +#: usr/local/www/firewall_virtual_ip.php:167 +#: usr/local/www/services_dhcpv6.php:468 usr/local/www/vpn_pppoe.php:98 +#: usr/local/www/vpn_ipsec.php:139 usr/local/www/firewall_virtual_ip.php:181 +#: usr/local/www/services_dhcp.php:655 usr/local/www/services_dhcpv6.php:463 +#: usr/local/www/services_dnsmasq.php:152 usr/local/www/interfaces.php:1327 +#: usr/local/www/firewall_shaper.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/firewall_shaper_queues.php:188 +#: usr/local/www/firewall_aliases.php:166 +#: usr/local/www/firewall_shaper_wizards.php:97 +#: usr/local/www/services_dhcp.php:675 usr/local/www/firewall_nat_out.php:312 +#: usr/local/www/services_dnsmasq.php:154 usr/local/www/interfaces.php:1369 +#: usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/services_dnsmasq.php:175 usr/local/www/interfaces.php:1364 +#: usr/local/www/firewall_shaper_layer7.php:401 usr/local/www/vpn_pppoe.php:98 +#: usr/local/www/firewall_shaper.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/vpn_ipsec.php:139 usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_shaper_queues.php:188 +#: usr/local/www/firewall_aliases.php:166 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/firewall_shaper_wizards.php:97 +#: usr/local/www/services_dhcp.php:675 usr/local/www/firewall_nat.php:183 +#: usr/local/www/load_balancer_setting.php:110 +#: usr/local/www/services_dhcpv6.php:463 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_npt.php:87 +#: usr/local/www/firewall_nat_1to1.php:87 +#: usr/local/www/services_captiveportal_zones.php:48 +#: usr/local/www/services_igmpproxy.php:90 +#: usr/local/www/load_balancer_monitor.php:100 +#: usr/local/www/services_dnsmasq.php:175 +#: usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/system_gateways.php:134 +#: usr/local/www/load_balancer_virtual_server.php:106 +#: usr/local/www/vpn_ipsec_keys.php:85 usr/local/www/interfaces.php:1364 +msgid "You must apply the changes in order for them to take effect." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:115 +#: usr/local/www/load_balancer_relay_action.php:126 +#: usr/local/www/load_balancer_pool.php:118 +#: usr/local/www/load_balancer_monitor.php:109 +#: usr/local/www/load_balancer_relay_protocol.php:122 +#: usr/local/www/status_lb_pool.php:120 usr/local/www/status_lb_vs.php:67 +#: usr/local/www/load_balancer_setting.php:119 +#: usr/local/www/load_balancer_setting.php:118 +#: usr/local/www/load_balancer_virtual_server.php:113 +#: usr/local/www/load_balancer_monitor.php:107 +#: usr/local/www/load_balancer_relay_protocol.php:120 +#: usr/local/www/load_balancer_relay_action.php:124 +#: usr/local/www/load_balancer_pool.php:116 +#: usr/local/www/load_balancer_relay_protocol.php:120 +#: usr/local/www/load_balancer_relay_action.php:124 +#: usr/local/www/status_lb_pool.php:120 +#: usr/local/www/load_balancer_setting.php:118 +#: usr/local/www/load_balancer_pool.php:116 +#: usr/local/www/load_balancer_monitor.php:107 +#: usr/local/www/load_balancer_virtual_server.php:113 +#: usr/local/www/status_lb_vs.php:67 +msgid "Pools" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:117 +#: usr/local/www/load_balancer_relay_action.php:125 +#: usr/local/www/load_balancer_pool.php:120 +#: usr/local/www/load_balancer_monitor.php:111 +#: usr/local/www/load_balancer_relay_protocol.php:121 +#: usr/local/www/load_balancer_setting.php:121 +#: usr/local/www/load_balancer_setting.php:120 +#: usr/local/www/load_balancer_virtual_server.php:115 +#: usr/local/www/load_balancer_monitor.php:109 +#: usr/local/www/load_balancer_relay_protocol.php:119 +#: usr/local/www/load_balancer_relay_action.php:123 +#: usr/local/www/load_balancer_pool.php:118 +#: usr/local/www/load_balancer_relay_protocol.php:119 +#: usr/local/www/load_balancer_relay_action.php:123 +#: usr/local/www/load_balancer_setting.php:120 +#: usr/local/www/load_balancer_pool.php:118 +#: usr/local/www/load_balancer_monitor.php:109 +#: usr/local/www/load_balancer_virtual_server.php:115 +msgid "Monitors" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/firewall_shaper_layer7.php:466 +#: usr/local/www/interfaces_bridge_edit.php:291 +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:185 +#: usr/local/www/firewall_nat_edit.php:518 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:456 +#: usr/local/www/firewall_rules_edit.php:808 +#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/diag_ipsec_spd.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:424 +#: usr/local/www/status_upnp.php:86 +#: usr/local/www/services_rfc2136_edit.php:186 +#: usr/local/www/system_advanced_admin.php:300 +#: usr/local/www/vpn_ipsec_phase2.php:516 +#: usr/local/www/vpn_openvpn_client.php:421 +#: usr/local/www/vpn_openvpn_client.php:861 +#: usr/local/www/vpn_openvpn_server.php:656 +#: usr/local/www/firewall_nat_out_edit.php:469 +#: usr/local/www/load_balancer_relay_action_edit.php:423 +#: usr/local/www/firewall_rules_edit.php:843 +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/vpn_openvpn_server.php:729 +#: usr/local/www/interfaces_bridge_edit.php:300 +#: usr/local/www/diag_packet_capture.php:160 +#: usr/local/www/vpn_ipsec_phase2.php:542 +#: usr/local/www/firewall_nat_edit.php:525 +#: usr/local/www/vpn_openvpn_client.php:426 +#: usr/local/www/vpn_openvpn_client.php:866 +#: usr/local/www/load_balancer_relay_action_edit.php:421 +#: usr/local/www/diag_ipsec_sad.php:90 +#: usr/local/www/load_balancer_virtual_server.php:128 +#: usr/local/www/vpn_openvpn_server.php:747 usr/local/www/status_upnp.php:87 +#: usr/local/www/interfaces_bridge_edit.php:301 +#: usr/local/www/diag_packet_capture.php:207 +#: usr/local/www/vpn_ipsec_phase2.php:644 +#: usr/local/www/firewall_nat_edit.php:524 +#: usr/local/www/vpn_openvpn_client.php:434 +#: usr/local/www/vpn_openvpn_client.php:919 +#: usr/local/www/diag_ipsec_spd.php:90 +#: usr/local/www/vpn_openvpn_client.php:452 +#: usr/local/www/vpn_openvpn_client.php:938 +#: usr/local/www/firewall_rules_edit.php:846 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:519 +#: usr/local/www/interfaces_bridge_edit.php:302 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:473 +#: usr/local/www/vpn_openvpn_server.php:773 +#: usr/local/www/vpn_ipsec_phase2.php:665 +#: usr/local/www/firewall_rules_edit.php:858 +#: usr/local/www/diag_logs_filter.php:171 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/firewall_rules_edit.php:857 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/interfaces_bridge_edit.php:304 +#: usr/local/www/firewall_shaper_layer7.php:466 +#: usr/local/www/vpn_openvpn_client.php:452 +#: usr/local/www/vpn_openvpn_client.php:938 +#: usr/local/www/firewall_rules_edit.php:857 +#: usr/local/www/diag_logs_filter.php:171 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/diag_ipsec_spd.php:90 +#: usr/local/www/system_advanced_admin.php:300 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:421 +#: usr/local/www/interfaces_bridge_edit.php:304 +#: usr/local/www/services_rfc2136_edit.php:186 +#: usr/local/www/load_balancer_virtual_server.php:128 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/diag_ipsec_sad.php:90 +#: usr/local/www/vpn_openvpn_server.php:773 +#: usr/local/www/vpn_ipsec_phase2.php:665 usr/local/www/status_upnp.php:87 +msgid "Protocol" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/diag_tables.php:133 +#: usr/local/www/interfaces_ppps_edit.php:660 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:195 +#: usr/local/www/system_advanced_notifications.php:185 +#: usr/local/www/diag_tables.php:132 +#: usr/local/www/system_advanced_notifications.php:194 +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/load_balancer_virtual_server_edit.php:169 +#: usr/local/www/interfaces_ppps_edit.php:661 +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/load_balancer_virtual_server_edit.php:167 +#: usr/local/www/interfaces_ppps_edit.php:667 usr/local/www/diag_dns.php:153 +#: usr/local/www/interfaces_ppps_edit.php:665 +#: usr/local/www/diag_tables.php:133 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:167 +#: usr/local/www/interfaces_ppps_edit.php:665 usr/local/www/diag_dns.php:153 +#: usr/local/www/system_advanced_notifications.php:194 +#: usr/local/www/load_balancer_virtual_server.php:129 +msgid "IP Address" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/diag_packet_capture.php:165 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_rules.php:365 usr/local/www/firewall_rules.php:367 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:203 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:202 +#: usr/local/www/services_captiveportal.php:607 +#: usr/local/www/services_captiveportal.php:628 +#: usr/local/www/services_captiveportal.php:647 +#: usr/local/www/services_captiveportal.php:666 +#: usr/local/www/status_upnp.php:85 +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_rules.php:369 usr/local/www/firewall_rules.php:371 +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/services_captiveportal.php:643 +#: usr/local/www/services_captiveportal.php:664 +#: usr/local/www/services_captiveportal.php:686 +#: usr/local/www/services_captiveportal.php:705 +#: usr/local/www/load_balancer_virtual_server_edit.php:183 +#: usr/local/www/diag_packet_capture.php:185 +#: usr/local/www/load_balancer_pool_edit.php:211 +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_rules.php:362 usr/local/www/firewall_rules.php:364 +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/services_captiveportal.php:641 +#: usr/local/www/services_captiveportal.php:662 +#: usr/local/www/services_captiveportal.php:684 +#: usr/local/www/services_captiveportal.php:703 +#: usr/local/www/status_upnp.php:86 +#: usr/local/www/load_balancer_virtual_server_edit.php:181 +#: usr/local/www/diag_packet_capture.php:232 +#: usr/local/www/load_balancer_pool_edit.php:209 +#: usr/local/www/load_balancer_pool.php:133 usr/local/www/diag_testport.php:60 +#: usr/local/www/diag_testport.php:123 +#: usr/local/www/services_captiveportal.php:642 +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:685 +#: usr/local/www/services_captiveportal.php:704 +#: usr/local/www/diag_packet_capture.php:248 +#: usr/local/www/firewall_rules.php:360 +#: usr/local/www/services_captiveportal.php:658 +#: usr/local/www/services_captiveportal.php:679 +#: usr/local/www/services_captiveportal.php:701 +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/firewall_aliases_edit.php:486 +#: usr/local/www/diag_testport.php:60 usr/local/www/diag_testport.php:123 +#: usr/local/www/load_balancer_virtual_server_edit.php:181 +#: usr/local/www/diag_packet_capture.php:248 +#: usr/local/www/load_balancer_pool.php:133 +#: usr/local/www/firewall_rules.php:360 usr/local/www/firewall_rules.php:362 +#: usr/local/www/services_captiveportal.php:658 +#: usr/local/www/services_captiveportal.php:679 +#: usr/local/www/services_captiveportal.php:701 +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/firewall_aliases_edit.php:472 +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:209 +#: usr/local/www/status_upnp.php:86 +msgid "Port" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/status_lb_pool.php:62 +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/status_lb_pool.php:62 usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/load_balancer_pool_edit.php:159 +msgid "Pool" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/load_balancer_virtual_server_edit.php:228 +#: usr/local/www/load_balancer_virtual_server.php:134 +#: usr/local/www/load_balancer_virtual_server_edit.php:217 +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/load_balancer_virtual_server_edit.php:215 +#: usr/local/www/load_balancer_virtual_server_edit.php:215 +#: usr/local/www/load_balancer_virtual_server.php:132 +msgid "Fall Back Pool" +msgstr "" + +#: usr/local/www/diag_tables.php:44 usr/local/www/diag_defaults.php:58 +#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_nanobsd.php:49 +#: usr/local/www/diag_packet_capture.php:41 +#: usr/local/www/crash_reporter.php:82 +#: usr/local/www/diag_authentication.php:69 usr/local/www/diag_backup.php:499 +#: usr/local/www/diag_confbak.php:98 usr/local/www/halt.php:59 +#: usr/local/www/diag_smart.php:14 usr/local/www/diag_states_summary.php:185 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_dns.php:34 +#: usr/local/www/reboot.php:51 usr/local/www/edit.php:39 +#: usr/local/www/diag_ping.php:43 usr/local/www/diag_resetstate.php:64 +#: usr/local/www/diag_routes.php:45 usr/local/www/diag_traceroute.php:45 +#: usr/local/www/exec.php:91 usr/local/www/fbegin.inc:367 +#: usr/local/www/diag_arp.php:261 usr/local/www/diag_ndp.php:103 +#: usr/local/www/system_firmware_restorefullbackup.php:104 +#: usr/local/www/diag_dump_states_sources.php:65 usr/local/www/fbegin.inc:385 +#: usr/local/www/diag_backup.php:576 usr/local/www/reboot.php:48 +#: usr/local/www/edit.php:42 usr/local/www/diag_dump_states.php:75 +#: usr/local/www/halt.php:54 usr/local/www/diag_states_summary.php:174 +#: usr/local/www/fbegin.inc:331 usr/local/www/diag_sockets.php:44 +#: usr/local/www/exec.php:93 usr/local/www/diag_packet_capture.php:43 +#: usr/local/www/diag_states_summary.php:176 +#: usr/local/www/diag_testport.php:49 usr/local/www/diag_defaults.php:52 +#: usr/local/www/diag_backup.php:581 usr/local/www/edit.php:41 +#: usr/local/www/fbegin.inc:323 usr/local/www/diag_dump_states.php:67 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/diag_traceroute.php:46 usr/local/www/diag_ping.php:44 +#: usr/local/www/diag_ndp.php:103 usr/local/www/reboot.php:48 +#: usr/local/www/diag_arp.php:261 usr/local/www/diag_authentication.php:69 +#: usr/local/www/diag_tables.php:44 usr/local/www/diag_testport.php:49 +#: usr/local/www/diag_dump_states.php:67 +#: usr/local/www/diag_states_summary.php:176 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/diag_defaults.php:52 +#: usr/local/www/diag_dump_states_sources.php:65 +#: usr/local/www/diag_packet_capture.php:43 usr/local/www/diag_routes.php:45 +#: usr/local/www/diag_traceroute.php:46 usr/local/www/diag_smart.php:14 +#: usr/local/www/exec.php:93 usr/local/www/halt.php:54 +#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_backup.php:581 +#: usr/local/www/diag_ping.php:44 usr/local/www/diag_resetstate.php:64 +#: usr/local/www/system_firmware_restorefullbackup.php:104 +#: usr/local/www/diag_dns.php:34 usr/local/www/edit.php:41 +#: usr/local/www/fbegin.inc:323 usr/local/www/diag_confbak.php:98 +#: usr/local/www/diag_sockets.php:44 usr/local/www/diag_nanobsd.php:49 +#: usr/local/www/crash_reporter.php:82 +msgid "Diagnostics" +msgstr "" + +#: usr/local/www/diag_tables.php:44 usr/local/www/fbegin.inc:199 +#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:225 +#: usr/local/www/fbegin.inc:216 usr/local/www/diag_tables.php:44 +#: usr/local/www/fbegin.inc:216 +msgid "Tables" +msgstr "" + +#: usr/local/www/diag_tables.php:86 usr/local/www/diag_tables.php:87 +#: usr/local/www/diag_tables.php:87 +msgid "The bogons database has been updated." +msgstr "" + +#: usr/local/www/diag_tables.php:118 usr/local/www/diag_tables.php:117 +#: usr/local/www/diag_tables.php:118 +msgid "Table:" +msgstr "" + +#: usr/local/www/diag_tables.php:152 usr/local/www/diag_tables.php:151 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:155 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:155 +msgid "No entries exist in this table." +msgstr "" + +#: usr/local/www/diag_tables.php:160 usr/local/www/diag_backup.php:163 +#: usr/local/www/exec.php:273 usr/local/www/exec.php:283 +#: usr/local/www/system_firmware_restorefullbackup.php:166 +#: usr/local/www/diag_tables.php:159 usr/local/www/diag_backup.php:250 +#: usr/local/www/exec.php:275 usr/local/www/exec.php:285 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +#: usr/local/www/exec.php:275 usr/local/www/exec.php:285 +#: usr/local/www/diag_backup.php:250 +#: usr/local/www/system_firmware_restorefullbackup.php:166 +msgid "Download" +msgstr "" + +#: usr/local/www/diag_tables.php:160 usr/local/www/diag_tables.php:159 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +msgid " the latest bogon data." +msgstr "" + +#: usr/local/www/diag_tables.php:162 +#: usr/local/www/firewall_shaper_layer7.php:576 +#: usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/system_firmware_restorefullbackup.php:163 +#: usr/local/www/diag_tables.php:161 usr/local/www/services_dhcpv6.php:853 +#: usr/local/www/services_dhcpv6.php:784 usr/local/www/diag_tables.php:165 +#: usr/local/www/services_dhcpv6.php:801 +#: usr/local/www/firewall_shaper_layer7.php:571 +#: usr/local/www/firewall_shaper_layer7.php:571 +#: usr/local/www/diag_tables.php:165 usr/local/www/services_dhcpv6.php:801 +#: usr/local/www/system_firmware_restorefullbackup.php:163 +msgid "Delete" +msgstr "" + +#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161 +#: usr/local/www/diag_tables.php:165 usr/local/www/diag_tables.php:165 +msgid "all" +msgstr "" + +#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161 +#: usr/local/www/diag_tables.php:165 usr/local/www/diag_tables.php:162 +#: usr/local/www/diag_tables.php:165 +msgid "entries in this table." +msgstr "" + +#: usr/local/www/pkg_edit.php:61 usr/local/www/pkg.php:51 +#: usr/local/www/pkg.php:55 usr/local/www/pkg_edit.php:69 +#: usr/local/www/pkg.php:55 usr/local/www/pkg_edit.php:69 +msgid "ERROR: No package defined." +msgstr "" + +#: usr/local/www/pkg_edit.php:256 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/services_wol_edit.php:112 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_rules_edit.php:628 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_wireless_edit.php:145 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/vpn_pppoe_edit.php:234 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 usr/local/www/pkg_edit.php:251 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 usr/local/www/pkg_edit.php:254 +#: usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/firewall_nat_edit.php:439 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +#: usr/local/www/vpn_pppoe_edit.php:237 +#: usr/local/www/interfaces_bridge_edit.php:236 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_nat_edit.php:452 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/firewall_nat_edit.php:452 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/services_wol_edit.php:112 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/vpn_pppoe_edit.php:237 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/firewall_aliases_edit.php:56 usr/local/www/pkg_edit.php:254 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/interfaces_bridge_edit.php:236 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/interfaces_qinq_edit.php:39 +msgid "Edit" +msgstr "" + +#: usr/local/www/pkg_edit.php:260 usr/local/www/pkg_edit.php:255 +#: usr/local/www/pkg_edit.php:258 usr/local/www/pkg_edit.php:258 +msgid "Package Editor" +msgstr "" + +#: usr/local/www/pkg_edit.php:405 +#: usr/local/www/firewall_aliases_import.php:154 +#: usr/local/www/firewall_shaper_layer7.php:569 +#: usr/local/www/firewall_shaper_vinterface.php:307 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:546 +#: usr/local/www/diag_logs_settings.php:321 usr/local/www/diag_nanobsd.php:219 +#: usr/local/www/services_snmp.php:400 usr/local/www/services_wol_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:583 +#: usr/local/www/interfaces_gif_edit.php:218 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/interfaces_groups_edit.php:322 +#: usr/local/www/firewall_aliases_edit.php:686 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:846 +#: usr/local/www/firewall_nat_out.php:320 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:1065 +#: usr/local/www/firewall_rules_edit.php:1480 +#: usr/local/www/firewall_schedule_edit.php:1156 +#: usr/local/www/firewall_shaper.php:349 usr/local/www/interfaces.php:2443 +#: usr/local/www/interfaces_assign.php:501 usr/local/www/diag_smart.php:219 +#: usr/local/www/system.php:447 usr/local/www/interfaces_vlan_edit.php:189 +#: usr/local/www/system_firmware_settings.php:238 +#: usr/local/www/system_routes_edit.php:275 usr/local/www/vpn_ipsec.php:168 +#: usr/local/www/vpn_ipsec_keys_edit.php:144 +#: usr/local/www/vpn_ipsec_mobile.php:608 +#: usr/local/www/interfaces_lagg_edit.php:218 +#: usr/local/www/interfaces_ppps_edit.php:783 +#: usr/local/www/interfaces_qinq_edit.php:394 +#: usr/local/www/interfaces_wireless_edit.php:195 +#: usr/local/www/load_balancer_monitor_edit.php:356 +#: usr/local/www/load_balancer_pool_edit.php:311 usr/local/www/edit.php:181 +#: usr/local/www/services_captiveportal.php:923 +#: usr/local/www/services_captiveportal_ip_edit.php:231 +#: usr/local/www/services_captiveportal_mac_edit.php:203 +#: usr/local/www/services_dhcp.php:871 +#: usr/local/www/services_dhcp_edit.php:251 +#: usr/local/www/services_dhcp_relay.php:189 +#: usr/local/www/services_dnsmasq.php:209 +#: usr/local/www/services_dnsmasq_edit.php:172 usr/local/www/vpn_pptp.php:472 +#: usr/local/www/vpn_pptp_users_edit.php:168 +#: usr/local/www/load_balancer_relay_action_edit.php:557 +#: usr/local/www/load_balancer_relay_protocol_edit.php:280 +#: usr/local/www/pkg_mgr_settings.php:120 +#: usr/local/www/services_captiveportal_hostname_edit.php:203 +#: usr/local/www/services_captiveportal_vouchers.php:597 +#: usr/local/www/services_captiveportal_vouchers_edit.php:207 +#: usr/local/www/status_rrd_graph_settings.php:225 +#: usr/local/www/services_dyndns_edit.php:236 +#: usr/local/www/services_igmpproxy.php:155 +#: usr/local/www/services_igmpproxy_edit.php:280 +#: usr/local/www/services_rfc2136_edit.php:200 +#: usr/local/www/status_lb_pool.php:217 +#: usr/local/www/system_advanced_admin.php:535 +#: usr/local/www/system_advanced_firewall.php:416 +#: usr/local/www/system_advanced_misc.php:442 +#: usr/local/www/system_advanced_network.php:304 +#: usr/local/www/system_advanced_notifications.php:93 +#: usr/local/www/system_advanced_notifications.php:254 +#: usr/local/www/system_advanced_sysctl.php:104 +#: usr/local/www/system_advanced_sysctl.php:257 +#: usr/local/www/system_authservers.php:724 +#: usr/local/www/system_camanager.php:359 +#: usr/local/www/system_camanager.php:552 +#: usr/local/www/system_certmanager.php:155 +#: usr/local/www/system_certmanager.php:469 +#: usr/local/www/system_certmanager.php:787 +#: usr/local/www/system_crlmanager.php:294 +#: usr/local/www/system_crlmanager.php:387 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateways_edit.php:492 +#: usr/local/www/system_groupmanager.php:390 +#: usr/local/www/system_groupmanager_addprivs.php:224 +#: usr/local/www/system_usermanager.php:774 +#: usr/local/www/system_usermanager_addprivs.php:205 +#: usr/local/www/system_usermanager_passwordmg.php:119 +#: usr/local/www/system_usermanager_settings.php:161 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124 +#: usr/local/www/vpn_ipsec_phase1.php:855 +#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/vpn_l2tp.php:445 +#: usr/local/www/vpn_l2tp_users_edit.php:176 +#: usr/local/www/vpn_openvpn_client.php:845 +#: usr/local/www/vpn_openvpn_csc.php:658 +#: usr/local/www/vpn_openvpn_server.php:1433 +#: usr/local/www/vpn_pppoe_edit.php:589 +#: usr/local/www/firewall_nat_npt_edit.php:270 +#: usr/local/www/services_dhcpv6.php:784 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/services_dhcpv6_relay.php:190 +#: usr/local/www/system_routes_edit.php:315 +#: usr/local/www/services_unbound_acls.php:101 +#: usr/local/www/services_unbound_acls.php:306 +#: usr/local/www/diag_logs_settings.php:328 +#: usr/local/www/system_gateway_groups_edit.php:283 +#: usr/local/www/services_captiveportal_vouchers.php:604 +#: usr/local/www/services_dyndns_edit.php:366 +#: usr/local/www/firewall_nat_out.php:330 +#: usr/local/www/services_dnsmasq_edit.php:284 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dhcpv6_edit.php:237 +#: usr/local/www/firewall_nat_npt_edit.php:275 +#: usr/local/www/load_balancer_setting.php:161 +#: usr/local/www/status_rrd_graph_settings.php:226 +#: usr/local/www/pkg_edit.php:413 usr/local/www/firewall_nat_out_edit.php:662 +#: usr/local/www/system_certmanager.php:183 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_certmanager.php:953 +#: usr/local/www/load_balancer_relay_action_edit.php:556 +#: usr/local/www/firewall_rules_edit.php:1100 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/services_unbound.php:245 +#: usr/local/www/system_usermanager.php:772 +#: usr/local/www/services_igmpproxy_edit.php:282 +#: usr/local/www/system_advanced_firewall.php:475 +#: usr/local/www/firewall_aliases_edit.php:691 +#: usr/local/www/system_advanced_notifications.php:96 +#: usr/local/www/system_advanced_notifications.php:281 +#: usr/local/www/system_advanced_misc.php:485 +#: usr/local/www/firewall_shaper_vinterface.php:317 +#: usr/local/www/system_groupmanager_addprivs.php:222 +#: usr/local/www/edit.php:184 usr/local/www/services_captiveportal.php:968 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/vpn_openvpn_server.php:1575 +#: usr/local/www/services_dhcp.php:909 usr/local/www/services_ntpd.php:121 +#: usr/local/www/interfaces_bridge_edit.php:592 +#: usr/local/www/system_camanager.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:674 +#: usr/local/www/firewall_nat_edit.php:854 +#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:2644 +#: usr/local/www/vpn_openvpn_client.php:850 +#: usr/local/www/load_balancer_pool_edit.php:328 +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/services_snmp.php:414 usr/local/www/system.php:476 +#: usr/local/www/interfaces_gre_edit.php:228 +#: usr/local/www/vpn_ipsec_phase1.php:868 usr/local/www/diag_nanobsd.php:218 +#: usr/local/www/services_dhcpv6.php:574 usr/local/www/services_dhcpv6.php:879 +#: usr/local/www/vpn_pppoe_edit.php:590 +#: usr/local/www/system_routes_edit.php:316 +#: usr/local/www/diag_logs_settings.php:348 +#: usr/local/www/system_gateway_groups_edit.php:343 +#: usr/local/www/interfaces_vlan_edit.php:190 +#: usr/local/www/services_dnsmasq.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:618 +#: usr/local/www/firewall_nat_out.php:331 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/services_captiveportal_vouchers_edit.php:205 +#: usr/local/www/firewall_nat_1to1_edit.php:464 +#: usr/local/www/services_dhcpv6_edit.php:239 +#: usr/local/www/services_router_advertisements.php:400 +#: usr/local/www/firewall_nat_npt_edit.php:274 +#: usr/local/www/load_balancer_setting.php:160 usr/local/www/vpn_ipsec.php:167 +#: usr/local/www/services_dhcp_relay.php:190 +#: usr/local/www/services_captiveportal_hostname_edit.php:201 +#: usr/local/www/vpn_ipsec_mobile.php:657 usr/local/www/pkg_edit.php:416 +#: usr/local/www/interfaces_qinq_edit.php:395 +#: usr/local/www/interfaces_gif_edit.php:219 +#: usr/local/www/firewall_shaper.php:350 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/services_captiveportal_mac_edit.php:201 +#: usr/local/www/firewall_schedule_edit.php:1155 +#: usr/local/www/interfaces_ppps_edit.php:784 +#: usr/local/www/system_crlmanager.php:295 +#: usr/local/www/system_crlmanager.php:388 +#: usr/local/www/system_crlmanager.php:420 +#: usr/local/www/firewall_aliases_edit.php:694 usr/local/www/vpn_pptp.php:474 +#: usr/local/www/interfaces_lagg_edit.php:219 +#: usr/local/www/vpn_openvpn_csc.php:657 +#: usr/local/www/system_advanced_misc.php:534 +#: usr/local/www/firewall_shaper_vinterface.php:319 +#: usr/local/www/services_captiveportal.php:964 +#: usr/local/www/system_gateways_edit.php:627 +#: usr/local/www/services_dhcpv6_relay.php:191 +#: usr/local/www/system_usermanager_passwordmg.php:120 +#: usr/local/www/interfaces_assign.php:495 +#: usr/local/www/services_captiveportal_ip_edit.php:229 +#: usr/local/www/vpn_openvpn_server.php:1616 +#: usr/local/www/services_dhcp.php:1113 +#: usr/local/www/system_firmware_settings.php:251 +#: usr/local/www/services_ntpd.php:151 +#: usr/local/www/interfaces_bridge_edit.php:593 +#: usr/local/www/interfaces_groups_edit.php:323 +#: usr/local/www/vpn_ipsec_phase2.php:770 +#: usr/local/www/firewall_nat_edit.php:853 +#: usr/local/www/vpn_pptp_users_edit.php:169 +#: usr/local/www/vpn_ipsec_keys_edit.php:143 +#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:2632 +#: usr/local/www/vpn_openvpn_client.php:903 +#: usr/local/www/load_balancer_pool_edit.php:326 +#: usr/local/www/vpn_l2tp_users_edit.php:177 usr/local/www/vpn_l2tp.php:446 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/services_snmp.php:415 usr/local/www/system.php:469 +#: usr/local/www/vpn_ipsec_phase1.php:865 usr/local/www/diag_nanobsd.php:209 +#: usr/local/www/diag_nanobsd.php:277 usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/system_authservers.php:729 usr/local/www/vpn_l2tp.php:449 +#: usr/local/www/system_gateways_edit.php:632 +#: usr/local/www/system_camanager.php:366 +#: usr/local/www/system_camanager.php:577 +#: usr/local/www/services_captiveportal_ip_edit.php:223 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/vpn_openvpn_client.php:922 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1566 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:790 usr/local/www/vpn_ipsec.php:173 +#: usr/local/www/system_firmware_settings.php:260 +#: usr/local/www/interfaces_lagg_edit.php:232 +#: usr/local/www/firewall_nat_edit.php:849 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/diag_smart.php:240 +#: usr/local/www/services_captiveportal_vouchers.php:627 +#: usr/local/www/vpn_pppoe_edit.php:593 usr/local/www/services_dhcp.php:1126 +#: usr/local/www/system_certmanager.php:186 +#: usr/local/www/system_certmanager.php:577 +#: usr/local/www/system_certmanager.php:995 +#: usr/local/www/system_advanced_misc.php:546 +#: usr/local/www/services_captiveportal_mac_edit.php:214 +#: usr/local/www/services_dhcpv6.php:827 +#: usr/local/www/system_usermanager_passwordmg.php:125 +#: usr/local/www/system_authservers.php:745 +#: usr/local/www/system_advanced_firewall.php:537 +#: usr/local/www/services_captiveportal.php:966 usr/local/www/vpn_pptp.php:477 +#: usr/local/www/pkg_edit.php:420 usr/local/www/edit.php:185 +#: usr/local/www/interfaces_bridge_edit.php:594 +#: usr/local/www/services_dnsmasq.php:235 +#: usr/local/www/vpn_ipsec_phase1.php:886 +#: usr/local/www/firewall_nat_out_edit.php:664 +#: usr/local/www/vpn_openvpn_server.php:1668 +#: usr/local/www/vpn_ipsec_phase2.php:791 usr/local/www/services_snmp.php:430 +#: usr/local/www/interfaces_qinq_edit.php:398 +#: usr/local/www/interfaces.php:2664 +#: usr/local/www/firewall_shaper_layer7.php:565 +#: usr/local/www/services_router_advertisements.php:395 +#: usr/local/www/system_gateways_edit.php:634 +#: usr/local/www/services_dyndns_edit.php:378 +#: usr/local/www/firewall_rules_edit.php:1128 +#: usr/local/www/firewall_rules_edit.php:1602 +#: usr/local/www/system_firmware_settings.php:266 usr/local/www/system.php:467 +#: usr/local/www/firewall_nat_edit.php:889 +#: usr/local/www/firewall_virtual_ip_edit.php:491 +#: usr/local/www/services_dhcp.php:1146 +#: usr/local/www/system_certmanager.php:578 +#: usr/local/www/system_certmanager.php:999 +#: usr/local/www/system_advanced_misc.php:667 +#: usr/local/www/system_routes_edit.php:339 +#: usr/local/www/firewall_nat_out.php:338 +#: usr/local/www/system_gateway_groups_edit.php:344 +#: usr/local/www/system_advanced_firewall.php:538 +#: usr/local/www/services_captiveportal.php:982 +#: usr/local/www/firewall_aliases_edit.php:725 +#: usr/local/www/pkg_mgr_settings.php:123 +#: usr/local/www/system_usermanager_settings.php:164 +#: usr/local/www/services_dnsmasq.php:248 +#: usr/local/www/system_advanced_network.php:305 +#: usr/local/www/firewall_nat_out_edit.php:704 +#: usr/local/www/diag_nanobsd.php:200 usr/local/www/interfaces.php:2710 +#: usr/local/www/system_gateways_edit.php:664 +#: usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/firewall_rules_edit.php:1613 +#: usr/local/www/interfaces_ppps_edit.php:787 +#: usr/local/www/interfaces_lagg_edit.php:231 +#: usr/local/www/firewall_nat_edit.php:890 +#: usr/local/www/system_routes_edit.php:349 +#: usr/local/www/firewall_nat_out.php:337 +#: usr/local/www/interfaces_groups_edit.php:320 usr/local/www/pkg_edit.php:422 +#: usr/local/www/interfaces_bridge_edit.php:598 +#: usr/local/www/services_dnsmasq.php:312 usr/local/www/interfaces.php:2699 +#: usr/local/www/firewall_shaper_layer7.php:565 usr/local/www/vpn_l2tp.php:449 +#: usr/local/www/services_router_advertisements.php:395 +#: usr/local/www/system_gateways_edit.php:665 +#: usr/local/www/system_camanager.php:366 +#: usr/local/www/system_camanager.php:577 +#: usr/local/www/services_captiveportal_ip_edit.php:223 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/firewall_shaper.php:350 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/system_groupmanager.php:390 +#: usr/local/www/diag_logs_settings.php:348 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/firewall_shaper_vinterface.php:319 +#: usr/local/www/vpn_openvpn_client.php:922 +#: usr/local/www/system_usermanager_addprivs.php:205 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:378 +#: usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/firewall_rules_edit.php:1613 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:787 usr/local/www/vpn_ipsec.php:173 +#: usr/local/www/system_firmware_settings.php:266 +#: usr/local/www/vpn_openvpn_csc.php:657 +#: usr/local/www/interfaces_lagg_edit.php:231 usr/local/www/system.php:467 +#: usr/local/www/firewall_schedule_edit.php:1155 +#: usr/local/www/firewall_nat_edit.php:890 +#: usr/local/www/services_captiveportal_hostname_edit.php:203 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/vpn_ipsec_keys_edit.php:143 +#: usr/local/www/services_wol_edit.php:157 +#: usr/local/www/firewall_virtual_ip_edit.php:491 +#: usr/local/www/services_ntpd.php:151 +#: usr/local/www/status_rrd_graph_settings.php:226 +#: usr/local/www/services_dhcpv6_relay.php:191 +#: usr/local/www/firewall_aliases_import.php:154 +#: usr/local/www/diag_smart.php:240 +#: usr/local/www/services_captiveportal_vouchers.php:632 +#: usr/local/www/vpn_pppoe_edit.php:593 usr/local/www/services_dhcp.php:1146 +#: usr/local/www/services_captiveportal_vouchers_edit.php:205 +#: usr/local/www/system_certmanager.php:186 +#: usr/local/www/system_certmanager.php:578 +#: usr/local/www/system_certmanager.php:999 +#: usr/local/www/status_lb_pool.php:217 +#: usr/local/www/load_balancer_setting.php:160 +#: usr/local/www/system_advanced_admin.php:535 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/system_advanced_misc.php:667 +#: usr/local/www/system_routes_edit.php:343 +#: usr/local/www/services_captiveportal_mac_edit.php:214 +#: usr/local/www/system_crlmanager.php:295 +#: usr/local/www/system_crlmanager.php:388 +#: usr/local/www/system_crlmanager.php:420 +#: usr/local/www/services_dhcpv6.php:827 +#: usr/local/www/firewall_nat_out.php:337 +#: usr/local/www/system_usermanager_passwordmg.php:125 +#: usr/local/www/firewall_nat_npt_edit.php:274 +#: usr/local/www/interfaces_groups_edit.php:320 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/system_gateway_groups_edit.php:344 +#: usr/local/www/system_authservers.php:745 +#: usr/local/www/system_advanced_firewall.php:538 +#: usr/local/www/services_captiveportal.php:982 +#: usr/local/www/system_groupmanager_addprivs.php:224 +#: usr/local/www/firewall_aliases_edit.php:711 usr/local/www/vpn_pptp.php:477 +#: usr/local/www/pkg_mgr_settings.php:123 +#: usr/local/www/system_usermanager_settings.php:164 +#: usr/local/www/pkg_edit.php:422 usr/local/www/edit.php:185 +#: usr/local/www/vpn_l2tp_users_edit.php:177 +#: usr/local/www/interfaces_bridge_edit.php:598 +#: usr/local/www/services_igmpproxy_edit.php:282 +#: usr/local/www/services_igmpproxy.php:155 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124 +#: usr/local/www/system_advanced_notifications.php:96 +#: usr/local/www/system_advanced_notifications.php:281 +#: usr/local/www/vpn_pptp_users_edit.php:169 +#: usr/local/www/services_rfc2136_edit.php:200 +#: usr/local/www/services_dnsmasq.php:312 +#: usr/local/www/vpn_ipsec_phase1.php:886 +#: usr/local/www/system_usermanager.php:772 +#: usr/local/www/vpn_ipsec_mobile.php:657 +#: usr/local/www/load_balancer_pool_edit.php:326 +#: usr/local/www/system_advanced_network.php:305 +#: usr/local/www/firewall_nat_out_edit.php:704 +#: usr/local/www/vpn_openvpn_server.php:1668 +#: usr/local/www/vpn_ipsec_phase2.php:791 usr/local/www/diag_nanobsd.php:200 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/services_dhcp_relay.php:190 +#: usr/local/www/interfaces_assign.php:501 usr/local/www/services_snmp.php:430 +#: usr/local/www/interfaces_qinq_edit.php:395 +#: usr/local/www/system_advanced_sysctl.php:104 +#: usr/local/www/system_advanced_sysctl.php:257 +#: usr/local/www/interfaces.php:2699 +msgid "Save" +msgstr "" + +#: usr/local/www/pkg_edit.php:415 usr/local/www/firewall_rules_edit.php:1077 +#: usr/local/www/pkg_edit.php:424 usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/pkg_edit.php:427 usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/pkg_edit.php:431 usr/local/www/firewall_rules_edit.php:1140 +#: usr/local/www/firewall_rules_edit.php:1139 usr/local/www/pkg_edit.php:433 +#: usr/local/www/firewall_rules_edit.php:1139 usr/local/www/pkg_edit.php:433 +msgid "Advanced features" +msgstr "" + +#: usr/local/www/pkg_edit.php:817 usr/local/www/firewall_shaper_layer7.php:65 +#: usr/local/www/diag_packet_capture.php:203 usr/local/www/vpn_ipsec.php:422 +#: usr/local/www/interfaces_wireless.php:133 usr/local/www/vpn_pptp.php:477 +#: usr/local/www/status_graph.php:291 usr/local/www/carp_status.php:194 +#: usr/local/www/status_queues.php:172 usr/local/www/status_graph_cpu.php:53 +#: usr/local/www/vpn_pppoe_edit.php:595 usr/local/www/vpn_ipsec.php:433 +#: usr/local/www/status_graph.php:286 usr/local/www/pkg_edit.php:864 +#: usr/local/www/status_queues.php:180 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/carp_status.php:187 +#: usr/local/www/vpn_ipsec.php:432 usr/local/www/status_graph.php:297 +#: usr/local/www/pkg_edit.php:873 usr/local/www/status_queues.php:181 +#: usr/local/www/vpn_pptp.php:479 usr/local/www/interfaces_wireless.php:134 +#: usr/local/www/diag_packet_capture.php:270 usr/local/www/vpn_ipsec.php:438 +#: usr/local/www/status_graph.php:308 +#: usr/local/www/interfaces_wireless.php:136 +#: usr/local/www/vpn_pppoe_edit.php:599 usr/local/www/vpn_pptp.php:482 +#: usr/local/www/pkg_edit.php:917 usr/local/www/status_queues.php:163 +#: usr/local/www/status_graph.php:330 +#: usr/local/www/diag_packet_capture.php:208 +#: usr/local/www/diag_packet_capture.php:288 usr/local/www/pkg_edit.php:921 +#: usr/local/www/firewall_shaper_layer7.php:65 usr/local/www/vpn_ipsec.php:438 +#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph.php:330 +#: usr/local/www/diag_packet_capture.php:208 +#: usr/local/www/diag_packet_capture.php:288 +#: usr/local/www/interfaces_wireless.php:136 +#: usr/local/www/vpn_pppoe_edit.php:599 usr/local/www/vpn_pptp.php:482 +#: usr/local/www/pkg_edit.php:921 usr/local/www/status_queues.php:163 +#: usr/local/www/carp_status.php:187 +msgid "Note" +msgstr "" + +#: usr/local/www/pkg_edit.php:823 usr/local/www/pkg_edit.php:835 +#: usr/local/www/firewall_aliases_import.php:155 +#: usr/local/www/firewall_shaper_layer7.php:573 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:546 +#: usr/local/www/services_wol_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:583 +#: usr/local/www/interfaces_gif_edit.php:218 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/interfaces_groups_edit.php:323 +#: usr/local/www/firewall_aliases_edit.php:687 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:846 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:1065 +#: usr/local/www/firewall_rules_edit.php:1480 +#: usr/local/www/firewall_schedule_edit.php:1157 +#: usr/local/www/interfaces.php:1443 usr/local/www/interfaces.php:1549 +#: usr/local/www/interfaces.php:2444 +#: usr/local/www/interfaces_vlan_edit.php:189 +#: usr/local/www/system_routes_edit.php:255 +#: usr/local/www/system_routes_edit.php:275 +#: usr/local/www/interfaces_lagg_edit.php:218 +#: usr/local/www/interfaces_ppps_edit.php:784 +#: usr/local/www/interfaces_qinq_edit.php:395 +#: usr/local/www/interfaces_wireless_edit.php:195 +#: usr/local/www/load_balancer_monitor_edit.php:356 +#: usr/local/www/load_balancer_pool_edit.php:312 +#: usr/local/www/load_balancer_virtual_server_edit.php:280 +#: usr/local/www/services_captiveportal.php:924 +#: usr/local/www/services_dhcp_edit.php:251 +#: usr/local/www/services_dnsmasq_edit.php:172 +#: usr/local/www/load_balancer_relay_action_edit.php:557 +#: usr/local/www/load_balancer_relay_protocol_edit.php:280 +#: usr/local/www/services_captiveportal_vouchers.php:598 +#: usr/local/www/services_dyndns_edit.php:237 +#: usr/local/www/services_igmpproxy_edit.php:281 +#: usr/local/www/services_rfc2136_edit.php:201 +#: usr/local/www/system_advanced_sysctl.php:258 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateways_edit.php:492 +#: usr/local/www/system_groupmanager_addprivs.php:225 +#: usr/local/www/system_usermanager_addprivs.php:206 +#: usr/local/www/vpn_l2tp_users_edit.php:177 +#: usr/local/www/vpn_pppoe_edit.php:590 +#: usr/local/www/firewall_nat_npt_edit.php:270 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/system_routes_edit.php:287 +#: usr/local/www/system_routes_edit.php:315 +#: usr/local/www/services_unbound_acls.php:306 +#: usr/local/www/system_gateway_groups_edit.php:283 +#: usr/local/www/services_captiveportal_vouchers.php:605 +#: usr/local/www/services_dyndns_edit.php:367 +#: usr/local/www/services_dnsmasq_edit.php:284 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dhcpv6_edit.php:237 +#: usr/local/www/firewall_nat_npt_edit.php:275 usr/local/www/pkg_edit.php:870 +#: usr/local/www/firewall_nat_out_edit.php:662 +#: usr/local/www/load_balancer_relay_action_edit.php:556 +#: usr/local/www/firewall_rules_edit.php:1100 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/services_igmpproxy_edit.php:283 +#: usr/local/www/firewall_aliases_edit.php:692 +#: usr/local/www/system_groupmanager_addprivs.php:223 +#: usr/local/www/services_captiveportal.php:969 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/load_balancer_virtual_server_edit.php:269 +#: usr/local/www/interfaces_bridge_edit.php:592 +#: usr/local/www/firewall_nat_edit.php:854 +#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:1655 +#: usr/local/www/interfaces.php:2645 +#: usr/local/www/load_balancer_pool_edit.php:329 +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/interfaces_gre_edit.php:228 +#: usr/local/www/vpn_pppoe_edit.php:591 +#: usr/local/www/system_routes_edit.php:288 +#: usr/local/www/system_routes_edit.php:316 +#: usr/local/www/system_gateway_groups_edit.php:343 +#: usr/local/www/interfaces_vlan_edit.php:190 +#: usr/local/www/services_captiveportal_vouchers.php:619 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/firewall_nat_1to1_edit.php:464 +#: usr/local/www/services_dhcpv6_edit.php:239 +#: usr/local/www/firewall_nat_npt_edit.php:274 usr/local/www/pkg_edit.php:879 +#: usr/local/www/interfaces_qinq_edit.php:396 +#: usr/local/www/interfaces_gif_edit.php:219 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/firewall_schedule_edit.php:1156 +#: usr/local/www/interfaces_ppps_edit.php:785 +#: usr/local/www/firewall_aliases_edit.php:695 +#: usr/local/www/interfaces_lagg_edit.php:219 +#: usr/local/www/services_captiveportal.php:965 +#: usr/local/www/system_gateways_edit.php:627 +#: usr/local/www/load_balancer_virtual_server_edit.php:267 +#: usr/local/www/interfaces_bridge_edit.php:593 +#: usr/local/www/interfaces_groups_edit.php:324 +#: usr/local/www/firewall_nat_edit.php:853 +#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:1537 +#: usr/local/www/interfaces.php:1643 usr/local/www/interfaces.php:2633 +#: usr/local/www/load_balancer_pool_edit.php:327 +#: usr/local/www/vpn_l2tp_users_edit.php:178 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/system_gateways_edit.php:632 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:371 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1566 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:791 +#: usr/local/www/interfaces_lagg_edit.php:232 +#: usr/local/www/firewall_nat_edit.php:849 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/services_captiveportal_vouchers.php:628 +#: usr/local/www/vpn_pppoe_edit.php:594 +#: usr/local/www/services_captiveportal.php:967 usr/local/www/pkg_edit.php:923 +#: usr/local/www/interfaces_bridge_edit.php:594 +#: usr/local/www/firewall_nat_out_edit.php:664 +#: usr/local/www/interfaces_qinq_edit.php:399 +#: usr/local/www/interfaces.php:1547 usr/local/www/interfaces.php:1652 +#: usr/local/www/interfaces.php:2665 +#: usr/local/www/firewall_shaper_layer7.php:568 +#: usr/local/www/system_gateways_edit.php:634 +#: usr/local/www/services_dyndns_edit.php:379 +#: usr/local/www/firewall_rules_edit.php:1128 +#: usr/local/www/firewall_rules_edit.php:1602 +#: usr/local/www/firewall_nat_edit.php:889 +#: usr/local/www/firewall_virtual_ip_edit.php:491 +#: usr/local/www/system_routes_edit.php:313 +#: usr/local/www/system_routes_edit.php:339 +#: usr/local/www/system_gateway_groups_edit.php:344 +#: usr/local/www/services_captiveportal.php:983 +#: usr/local/www/firewall_aliases_edit.php:726 +#: usr/local/www/firewall_nat_out_edit.php:704 +#: usr/local/www/interfaces.php:1592 usr/local/www/interfaces.php:1698 +#: usr/local/www/interfaces.php:2711 +#: usr/local/www/system_gateways_edit.php:664 +#: usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/firewall_rules_edit.php:1613 +#: usr/local/www/interfaces_ppps_edit.php:788 +#: usr/local/www/interfaces_lagg_edit.php:231 +#: usr/local/www/firewall_nat_edit.php:890 +#: usr/local/www/system_routes_edit.php:319 +#: usr/local/www/system_routes_edit.php:349 +#: usr/local/www/interfaces_groups_edit.php:321 usr/local/www/pkg_edit.php:927 +#: usr/local/www/interfaces_bridge_edit.php:598 +#: usr/local/www/interfaces.php:1586 usr/local/www/interfaces.php:1691 +#: usr/local/www/interfaces.php:2700 +#: usr/local/www/firewall_shaper_layer7.php:568 +#: usr/local/www/system_gateways_edit.php:665 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/system_usermanager_addprivs.php:206 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:379 +#: usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/firewall_rules_edit.php:1613 +#: usr/local/www/load_balancer_virtual_server_edit.php:267 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:788 +#: usr/local/www/interfaces_lagg_edit.php:231 +#: usr/local/www/firewall_schedule_edit.php:1156 +#: usr/local/www/firewall_nat_edit.php:890 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/services_wol_edit.php:157 +#: usr/local/www/firewall_virtual_ip_edit.php:491 +#: usr/local/www/firewall_aliases_import.php:155 +#: usr/local/www/services_captiveportal_vouchers.php:633 +#: usr/local/www/vpn_pppoe_edit.php:594 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/system_routes_edit.php:313 +#: usr/local/www/system_routes_edit.php:343 +#: usr/local/www/firewall_nat_npt_edit.php:274 +#: usr/local/www/interfaces_groups_edit.php:321 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/system_gateway_groups_edit.php:344 +#: usr/local/www/services_captiveportal.php:983 +#: usr/local/www/system_groupmanager_addprivs.php:225 +#: usr/local/www/firewall_aliases_edit.php:712 usr/local/www/pkg_edit.php:927 +#: usr/local/www/vpn_l2tp_users_edit.php:178 +#: usr/local/www/interfaces_bridge_edit.php:598 +#: usr/local/www/services_igmpproxy_edit.php:283 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/services_rfc2136_edit.php:201 +#: usr/local/www/load_balancer_pool_edit.php:327 +#: usr/local/www/firewall_nat_out_edit.php:704 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/interfaces_qinq_edit.php:396 +#: usr/local/www/system_advanced_sysctl.php:258 +#: usr/local/www/interfaces.php:1586 usr/local/www/interfaces.php:1691 +#: usr/local/www/interfaces.php:2700 +msgid "Cancel" +msgstr "" + +#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:1083 +#: usr/local/www/firewall_rules_edit.php:1117 +#: usr/local/www/firewall_rules_edit.php:1133 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1217 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1291 +#: usr/local/www/firewall_rules_edit.php:1342 +#: usr/local/www/firewall_rules_edit.php:1392 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/interfaces.php:1330 usr/local/www/interfaces.php:1940 +#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcp.php:741 +#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcp.php:765 +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:799 +#: usr/local/www/services_dnsmasq.php:194 +#: usr/local/www/services_dnsmasq.php:197 +#: usr/local/www/services_dnsmasq.php:200 usr/local/www/fbegin.inc:83 +#: usr/local/www/system_gateways_edit.php:415 +#: usr/local/www/vpn_openvpn_client.php:829 +#: usr/local/www/vpn_openvpn_csc.php:642 +#: usr/local/www/vpn_openvpn_server.php:1412 +#: usr/local/www/services_dhcpv6.php:651 usr/local/www/services_dhcpv6.php:667 +#: usr/local/www/services_dhcpv6.php:679 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcpv6.php:703 usr/local/www/services_dhcpv6.php:725 +#: usr/local/www/fbegin.inc:99 usr/local/www/pkg_edit.php:1052 +#: usr/local/www/firewall_rules_edit.php:943 +#: usr/local/www/firewall_rules_edit.php:1118 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/firewall_rules_edit.php:1168 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1252 +#: usr/local/www/firewall_rules_edit.php:1276 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1331 +#: usr/local/www/firewall_rules_edit.php:1358 +#: usr/local/www/firewall_rules_edit.php:1413 +#: usr/local/www/firewall_rules_edit.php:1463 +#: usr/local/www/firewall_rules_edit.php:1517 +#: usr/local/www/services_unbound_advanced.php:88 +#: usr/local/www/system_gateways_edit.php:436 +#: usr/local/www/vpn_openvpn_server.php:1554 +#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcp.php:779 +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcp.php:803 +#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcp.php:837 +#: usr/local/www/firewall_nat_edit.php:538 usr/local/www/interfaces.php:1434 +#: usr/local/www/interfaces.php:2118 usr/local/www/vpn_openvpn_client.php:834 +#: usr/local/www/services_dhcpv6.php:744 usr/local/www/services_dhcpv6.php:760 +#: usr/local/www/services_dhcpv6.php:773 usr/local/www/services_dhcpv6.php:786 +#: usr/local/www/services_dhcpv6.php:798 usr/local/www/services_dhcpv6.php:820 +#: usr/local/www/services_dnsmasq.php:195 +#: usr/local/www/services_dnsmasq.php:198 +#: usr/local/www/services_dnsmasq.php:201 usr/local/www/fbegin.inc:108 +#: usr/local/www/pkg_edit.php:1063 usr/local/www/vpn_openvpn_csc.php:641 +#: usr/local/www/system_gateways_edit.php:542 +#: usr/local/www/vpn_openvpn_server.php:1596 +#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcp.php:961 +#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcp.php:987 +#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcp.php:1011 +#: usr/local/www/services_dhcp.php:1034 +#: usr/local/www/firewall_nat_edit.php:537 usr/local/www/interfaces.php:1422 +#: usr/local/www/interfaces.php:2106 usr/local/www/vpn_openvpn_client.php:883 +#: usr/local/www/services_dhcpv6.php:675 usr/local/www/services_dhcpv6.php:704 +#: usr/local/www/services_dhcpv6.php:717 usr/local/www/services_dhcpv6.php:729 +#: usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/system_gateways_edit.php:546 +#: usr/local/www/vpn_openvpn_client.php:902 +#: usr/local/www/firewall_rules_edit.php:952 +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1267 +#: usr/local/www/firewall_rules_edit.php:1303 +#: usr/local/www/firewall_rules_edit.php:1346 +#: usr/local/www/firewall_rules_edit.php:1373 +#: usr/local/www/firewall_rules_edit.php:1428 +#: usr/local/www/firewall_rules_edit.php:1478 +#: usr/local/www/firewall_rules_edit.php:1532 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:974 +#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcp.php:1000 +#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcp.php:1024 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:692 +#: usr/local/www/services_dhcpv6.php:708 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcpv6.php:734 usr/local/www/services_dhcpv6.php:746 +#: usr/local/www/services_dhcpv6.php:768 usr/local/www/pkg_edit.php:1107 +#: usr/local/www/fbegin.inc:100 usr/local/www/services_dnsmasq.php:220 +#: usr/local/www/services_dnsmasq.php:223 +#: usr/local/www/services_dnsmasq.php:226 +#: usr/local/www/vpn_openvpn_server.php:1648 usr/local/www/interfaces.php:1435 +#: usr/local/www/interfaces.php:2136 +#: usr/local/www/system_gateways_edit.php:548 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_rules_edit.php:1146 +#: usr/local/www/firewall_rules_edit.php:1180 +#: usr/local/www/firewall_rules_edit.php:1196 +#: usr/local/www/firewall_rules_edit.php:1236 +#: usr/local/www/firewall_rules_edit.php:1298 +#: usr/local/www/firewall_rules_edit.php:1310 +#: usr/local/www/firewall_rules_edit.php:1353 +#: usr/local/www/firewall_rules_edit.php:1380 +#: usr/local/www/firewall_rules_edit.php:1435 +#: usr/local/www/firewall_rules_edit.php:1485 +#: usr/local/www/firewall_rules_edit.php:1540 +#: usr/local/www/firewall_nat_edit.php:544 usr/local/www/services_dhcp.php:978 +#: usr/local/www/services_dhcp.php:994 usr/local/www/services_dhcp.php:1008 +#: usr/local/www/services_dhcp.php:1020 usr/local/www/services_dhcp.php:1032 +#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcp.php:1067 +#: usr/local/www/services_dnsmasq.php:233 +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_dnsmasq.php:239 usr/local/www/interfaces.php:1479 +#: usr/local/www/interfaces.php:2182 +#: usr/local/www/system_gateways_edit.php:578 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:1145 +#: usr/local/www/firewall_rules_edit.php:1179 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1235 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1297 +#: usr/local/www/firewall_rules_edit.php:1309 +#: usr/local/www/firewall_rules_edit.php:1364 +#: usr/local/www/firewall_rules_edit.php:1391 +#: usr/local/www/firewall_rules_edit.php:1496 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/firewall_nat_edit.php:545 usr/local/www/pkg_edit.php:1114 +#: usr/local/www/services_dnsmasq.php:297 +#: usr/local/www/services_dnsmasq.php:300 +#: usr/local/www/services_dnsmasq.php:303 usr/local/www/interfaces.php:1474 +#: usr/local/www/interfaces.php:2171 +#: usr/local/www/system_gateways_edit.php:578 +#: usr/local/www/vpn_openvpn_client.php:902 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:1145 +#: usr/local/www/firewall_rules_edit.php:1179 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1235 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1297 +#: usr/local/www/firewall_rules_edit.php:1309 +#: usr/local/www/firewall_rules_edit.php:1364 +#: usr/local/www/firewall_rules_edit.php:1391 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/firewall_rules_edit.php:1496 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/vpn_openvpn_csc.php:641 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:978 usr/local/www/services_dhcp.php:994 +#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcp.php:1020 +#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcp.php:1044 +#: usr/local/www/services_dhcp.php:1067 usr/local/www/services_dhcpv6.php:692 +#: usr/local/www/services_dhcpv6.php:708 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcpv6.php:734 usr/local/www/services_dhcpv6.php:746 +#: usr/local/www/services_dhcpv6.php:768 usr/local/www/pkg_edit.php:1114 +#: usr/local/www/fbegin.inc:100 usr/local/www/services_dnsmasq.php:297 +#: usr/local/www/services_dnsmasq.php:300 +#: usr/local/www/services_dnsmasq.php:303 +#: usr/local/www/vpn_openvpn_server.php:1648 usr/local/www/interfaces.php:1474 +#: usr/local/www/interfaces.php:2171 +msgid "Advanced" +msgstr "" + +#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_rules_edit.php:1083 +#: usr/local/www/firewall_rules_edit.php:1117 +#: usr/local/www/firewall_rules_edit.php:1133 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1217 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1291 +#: usr/local/www/firewall_rules_edit.php:1342 +#: usr/local/www/firewall_rules_edit.php:1392 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/interfaces.php:1330 usr/local/www/services_dnsmasq.php:197 +#: usr/local/www/pkg_edit.php:1052 usr/local/www/firewall_rules_edit.php:1118 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/firewall_rules_edit.php:1168 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1252 +#: usr/local/www/firewall_rules_edit.php:1276 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1331 +#: usr/local/www/firewall_rules_edit.php:1358 +#: usr/local/www/firewall_rules_edit.php:1413 +#: usr/local/www/firewall_rules_edit.php:1463 +#: usr/local/www/firewall_rules_edit.php:1517 +#: usr/local/www/interfaces.php:1434 usr/local/www/services_dnsmasq.php:198 +#: usr/local/www/pkg_edit.php:1063 usr/local/www/interfaces.php:1422 +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1267 +#: usr/local/www/firewall_rules_edit.php:1303 +#: usr/local/www/firewall_rules_edit.php:1346 +#: usr/local/www/firewall_rules_edit.php:1373 +#: usr/local/www/firewall_rules_edit.php:1428 +#: usr/local/www/firewall_rules_edit.php:1478 +#: usr/local/www/firewall_rules_edit.php:1532 usr/local/www/pkg_edit.php:1107 +#: usr/local/www/services_dnsmasq.php:223 usr/local/www/interfaces.php:1435 +#: usr/local/www/firewall_rules_edit.php:1146 +#: usr/local/www/firewall_rules_edit.php:1180 +#: usr/local/www/firewall_rules_edit.php:1196 +#: usr/local/www/firewall_rules_edit.php:1236 +#: usr/local/www/firewall_rules_edit.php:1298 +#: usr/local/www/firewall_rules_edit.php:1310 +#: usr/local/www/firewall_rules_edit.php:1353 +#: usr/local/www/firewall_rules_edit.php:1380 +#: usr/local/www/firewall_rules_edit.php:1435 +#: usr/local/www/firewall_rules_edit.php:1485 +#: usr/local/www/firewall_rules_edit.php:1540 +#: usr/local/www/services_dnsmasq.php:236 usr/local/www/interfaces.php:1479 +#: usr/local/www/firewall_rules_edit.php:1145 +#: usr/local/www/firewall_rules_edit.php:1179 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1235 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1297 +#: usr/local/www/firewall_rules_edit.php:1309 +#: usr/local/www/firewall_rules_edit.php:1364 +#: usr/local/www/firewall_rules_edit.php:1391 +#: usr/local/www/firewall_rules_edit.php:1496 +#: usr/local/www/firewall_rules_edit.php:1551 usr/local/www/pkg_edit.php:1114 +#: usr/local/www/services_dnsmasq.php:300 usr/local/www/interfaces.php:1474 +#: usr/local/www/firewall_rules_edit.php:1145 +#: usr/local/www/firewall_rules_edit.php:1179 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1235 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1297 +#: usr/local/www/firewall_rules_edit.php:1309 +#: usr/local/www/firewall_rules_edit.php:1364 +#: usr/local/www/firewall_rules_edit.php:1391 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/firewall_rules_edit.php:1496 +#: usr/local/www/firewall_rules_edit.php:1551 usr/local/www/pkg_edit.php:1114 +#: usr/local/www/services_dnsmasq.php:300 usr/local/www/interfaces.php:1474 +msgid "Show advanced option" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:45 +#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs.php:77 usr/local/www/diag_logs_auth.php:65 +#: usr/local/www/diag_logs_dhcp.php:70 usr/local/www/diag_logs_filter.php:101 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_ipsec.php:102 usr/local/www/diag_logs_ntpd.php:65 +#: usr/local/www/diag_logs_openvpn.php:69 +#: usr/local/www/diag_logs_settings.php:210 +#: usr/local/www/diag_logs_vpn.php:126 usr/local/www/diag_backup.php:117 +#: usr/local/www/system.php:74 usr/local/www/system.php:231 +#: usr/local/www/system.php:251 usr/local/www/system_firmware.php:102 +#: usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_settings.php:74 +#: usr/local/www/system_routes.php:94 usr/local/www/system_routes_edit.php:165 +#: usr/local/www/diag_logs_filter_summary.php:184 +#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/diag_logs_relayd.php:66 +#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81 +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_settings.php:62 +#: usr/local/www/fbegin.inc:319 usr/local/www/fbegin.inc:440 +#: usr/local/www/status_rrd_graph.php:329 +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_settings.php:53 +#: usr/local/www/status_rrd_graph_settings.php:128 +#: usr/local/www/system_advanced_admin.php:242 +#: usr/local/www/system_advanced_firewall.php:178 +#: usr/local/www/system_advanced_misc.php:179 +#: usr/local/www/system_advanced_network.php:148 +#: usr/local/www/system_advanced_notifications.php:131 +#: usr/local/www/system_advanced_sysctl.php:125 +#: usr/local/www/system_authservers.php:44 +#: usr/local/www/system_camanager.php:50 +#: usr/local/www/system_certmanager.php:51 +#: usr/local/www/system_crlmanager.php:46 +#: usr/local/www/system_gateway_groups.php:88 +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways.php:120 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/system_usermanager.php:54 +#: usr/local/www/system_usermanager_passwordmg.php:43 +#: usr/local/www/system_usermanager_settings.php:51 +#: usr/local/www/diag_logs_wireless.php:67 +#: usr/local/www/diag_logs_routing.php:65 +#: usr/local/www/system_routes_edit.php:198 usr/local/www/pkg_mgr.php:55 +#: usr/local/www/pkg_mgr.php:93 usr/local/www/diag_logs_settings.php:215 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/fbegin.inc:337 usr/local/www/fbegin.inc:458 +#: usr/local/www/status_rrd_graph_settings.php:129 +#: usr/local/www/system_certmanager.php:56 usr/local/www/diag_backup.php:195 +#: usr/local/www/diag_logs_resolver.php:78 +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 +#: usr/local/www/system_advanced_notifications.php:140 +#: usr/local/www/status_rrd_graph.php:377 +#: usr/local/www/system_advanced_misc.php:199 +#: usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/system_hasync.php:96 usr/local/www/diag_logs_gateways.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:98 usr/local/www/system.php:75 +#: usr/local/www/system.php:242 usr/local/www/system.php:262 +#: usr/local/www/diag_logs_routing.php:66 +#: usr/local/www/diag_logs_settings.php:222 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/fbegin.inc:283 usr/local/www/fbegin.inc:428 +#: usr/local/www/diag_logs_relayd.php:67 usr/local/www/diag_logs_auth.php:66 +#: usr/local/www/diag_logs_ipsec.php:103 +#: usr/local/www/diag_logs_resolver.php:79 usr/local/www/diag_logs_ntpd.php:66 +#: usr/local/www/system_advanced_misc.php:218 +#: usr/local/www/diag_logs_dhcp.php:71 +#: usr/local/www/system_gateway_groups.php:89 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/diag_logs_wireless.php:68 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210 +#: usr/local/www/diag_logs_filter_summary.php:185 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_gateways.php:79 +#: usr/local/www/diag_logs_openvpn.php:70 +#: usr/local/www/diag_logs_filter_dynamic.php:99 usr/local/www/system.php:235 +#: usr/local/www/system.php:255 usr/local/www/diag_logs_filter.php:91 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_camanager.php:51 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/status_rrd_graph.php:402 +#: usr/local/www/diag_logs_filter_dynamic.php:97 +#: usr/local/www/system_routes.php:98 usr/local/www/system_hasync.php:97 +#: usr/local/www/system_certmanager.php:57 +#: usr/local/www/system_advanced_misc.php:222 +#: usr/local/www/diag_logs_ppp.php:68 +#: usr/local/www/system_advanced_firewall.php:221 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:275 +#: usr/local/www/fbegin.inc:420 usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/system_advanced_misc.php:254 usr/local/www/pkg_mgr.php:94 +#: usr/local/www/system_routes_edit.php:227 +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/system_gateway_groups.php:98 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_routes.php:113 +#: usr/local/www/system_routes_edit.php:229 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:210 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_camanager.php:51 usr/local/www/diag_logs_auth.php:66 +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/diag_logs_settings.php:222 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_routing.php:66 usr/local/www/system.php:75 +#: usr/local/www/system.php:235 usr/local/www/system.php:255 +#: usr/local/www/diag_logs_dhcp.php:71 usr/local/www/status_rrd_graph.php:402 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 +#: usr/local/www/status_rrd_graph_settings.php:53 +#: usr/local/www/status_rrd_graph_settings.php:129 +#: usr/local/www/diag_logs.php:77 +#: usr/local/www/diag_logs_filter_dynamic.php:97 +#: usr/local/www/system_routes.php:113 usr/local/www/diag_logs_ntpd.php:66 +#: usr/local/www/system_hasync.php:97 usr/local/www/system_certmanager.php:57 +#: usr/local/www/diag_logs_openvpn.php:70 +#: usr/local/www/system_advanced_admin.php:242 +#: usr/local/www/system_advanced_misc.php:254 usr/local/www/pkg_mgr.php:57 +#: usr/local/www/pkg_mgr.php:104 usr/local/www/diag_logs_ppp.php:68 +#: usr/local/www/system_routes_edit.php:223 +#: usr/local/www/system_crlmanager.php:46 +#: usr/local/www/system_usermanager_passwordmg.php:43 +#: usr/local/www/diag_logs_gateways.php:79 +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/system_authservers.php:44 +#: usr/local/www/system_advanced_firewall.php:221 +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/diag_backup.php:195 usr/local/www/pkg_mgr_settings.php:62 +#: usr/local/www/system_usermanager_settings.php:51 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:275 +#: usr/local/www/fbegin.inc:420 usr/local/www/diag_logs_relayd.php:67 +#: usr/local/www/diag_logs_vpn.php:126 +#: usr/local/www/system_advanced_notifications.php:140 +#: usr/local/www/diag_logs_ipsec.php:103 +#: usr/local/www/system_usermanager.php:54 +#: usr/local/www/system_gateways.php:120 +#: usr/local/www/system_advanced_network.php:148 +#: usr/local/www/diag_logs_wireless.php:68 +#: usr/local/www/system_gateway_groups.php:98 +#: usr/local/www/diag_logs_resolver.php:79 +#: usr/local/www/system_advanced_sysctl.php:125 +#: usr/local/www/diag_logs_filter_summary.php:185 +msgid "System" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:45 +#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_backup.php:113 +#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81 +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/fbegin.inc:440 +#: usr/local/www/pkg_mgr.php:55 usr/local/www/pkg_mgr.php:93 +#: usr/local/www/fbegin.inc:458 usr/local/www/diag_backup.php:190 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/fbegin.inc:428 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:420 +#: usr/local/www/pkg_mgr.php:94 usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/pkg_mgr.php:57 +#: usr/local/www/pkg_mgr.php:104 usr/local/www/diag_backup.php:190 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:420 +msgid "Package Manager" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:76 usr/local/www/pkg_mgr.php:99 +#: usr/local/www/pkg_mgr.php:115 usr/local/www/pkg_mgr_installed.php:97 +#: usr/local/www/pkg_mgr_installed.php:99 usr/local/www/pkg_mgr.php:118 +#: usr/local/www/pkg_mgr_installed.php:99 usr/local/www/pkg_mgr.php:127 +msgid "Available Packages" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/pkg_mgr.php:103 +#: usr/local/www/pkg_mgr_settings.php:93 usr/local/www/pkg_mgr.php:119 +#: usr/local/www/pkg_mgr_installed.php:101 +#: usr/local/www/pkg_mgr_installed.php:103 usr/local/www/pkg_mgr.php:122 +#: usr/local/www/pkg_mgr_settings.php:92 +#: usr/local/www/pkg_mgr_installed.php:103 usr/local/www/pkg_mgr.php:128 +#: usr/local/www/pkg_mgr_settings.php:92 +msgid "Installed Packages" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:90 usr/local/www/pkg_mgr.php:113 +msgid "Package Name" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:91 usr/local/www/pkg_mgr.php:114 +#: usr/local/www/pkg_mgr.php:130 usr/local/www/pkg_mgr_installed.php:112 +#: usr/local/www/pkg_mgr_installed.php:114 usr/local/www/pkg_mgr.php:133 +#: usr/local/www/pkg_mgr_installed.php:114 usr/local/www/pkg_mgr.php:180 +msgid "Category" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:92 +#: usr/local/www/pkg_mgr_installed.php:150 usr/local/www/pkg_mgr.php:117 +#: usr/local/www/pkg_mgr.php:200 +msgid "Package Info" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:93 +msgid "Package Version" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:116 +#: usr/local/www/pkg_mgr_installed.php:122 +#: usr/local/www/pkg_mgr_installed.php:142 +#: usr/local/www/pkg_mgr_installed.php:144 +#: usr/local/www/pkg_mgr_installed.php:151 +#: usr/local/www/pkg_mgr_installed.php:153 +#: usr/local/www/pkg_mgr_installed.php:146 +#: usr/local/www/pkg_mgr_installed.php:155 +#: usr/local/www/pkg_mgr_installed.php:144 +#: usr/local/www/pkg_mgr_installed.php:146 +#: usr/local/www/pkg_mgr_installed.php:153 +#: usr/local/www/pkg_mgr_installed.php:155 +msgid "Available" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:117 +#: usr/local/www/pkg_mgr_installed.php:123 +#: usr/local/www/pkg_mgr_installed.php:145 +#: usr/local/www/pkg_mgr_installed.php:154 +#: usr/local/www/pkg_mgr_installed.php:147 +#: usr/local/www/pkg_mgr_installed.php:156 +#: usr/local/www/pkg_mgr_installed.php:147 +#: usr/local/www/pkg_mgr_installed.php:156 +msgid "Installed" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202 +msgid "No info, check the" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202 +msgid "forum" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:163 +msgid "Do you really want to remove this package?" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:164 +msgid "Remove this package." +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:168 +msgid "Reinstall this package." +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:171 +msgid "Reinstall this package's GUI components." +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:181 +#: usr/local/www/pkg_mgr_installed.php:222 +#: usr/local/www/pkg_mgr_installed.php:225 +#: usr/local/www/pkg_mgr_installed.php:227 +#: usr/local/www/pkg_mgr_installed.php:227 +msgid "There are no packages currently installed." +msgstr "" + +#: usr/local/www/easyrule.php:34 usr/local/www/easyrule.php:34 +msgid "Status : EasyRule" +msgstr "" + +#: usr/local/www/easyrule.php:69 usr/local/www/easyrule.php:69 +msgid "Message" +msgstr "" + +#: usr/local/www/easyrule.php:72 usr/local/www/easyrule.php:72 +msgid "" +"This is the Easy Rule status page, mainly used to display errors when adding " +"rules. If you are seeing this, there apparently was not an error, and you " +"navigated to the page directly without telling it what to do" +msgstr "" + +#: usr/local/www/easyrule.php:75 usr/local/www/easyrule.php:75 +msgid "" +"This page is meant to be called from the block/pass buttons on the Firewall " +"Logs page" +msgstr "" + +#: usr/local/www/easyrule.php:75 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs_auth.php:54 usr/local/www/diag_logs_dhcp.php:59 +#: usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/status_wireless.php:41 usr/local/www/status_wireless.php:77 +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/pkg_mgr.php:116 usr/local/www/diag_ipsec.php:48 +#: usr/local/www/diag_ipsec.php:96 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_pkglogs.php:81 +#: usr/local/www/status_filter_reload.php:44 usr/local/www/status_graph.php:85 +#: usr/local/www/carp_status.php:100 usr/local/www/carp_status.php:140 +#: usr/local/www/status_interfaces.php:58 +#: usr/local/www/status_interfaces.php:85 usr/local/www/fbegin.inc:359 +#: usr/local/www/status_queues.php:98 usr/local/www/status_rrd_graph.php:224 +#: usr/local/www/status_rrd_graph_settings.php:113 +#: usr/local/www/status_services.php:226 usr/local/www/status_services.php:246 +#: usr/local/www/status_upnp.php:58 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/status_dhcp_leases.php:48 +#: usr/local/www/status_gateway_groups.php:52 +#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:77 +#: usr/local/www/status_graph_cpu.php:41 usr/local/www/status_lb_pool.php:62 +#: usr/local/www/status_lb_vs.php:56 usr/local/www/status_lb_vs.php:80 +#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:212 +#: usr/local/www/status_openvpn.php:263 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:43 +#: usr/local/www/status_dhcpv6_leases.php:49 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_routing.php:54 usr/local/www/pkg_mgr.php:131 +#: usr/local/www/diag_logs_settings.php:136 usr/local/www/fbegin.inc:377 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/status_queues.php:101 usr/local/www/diag_ipsec.php:107 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/status_rrd_graph.php:244 usr/local/www/status_ntpd.php:94 +#: usr/local/www/status_ntpd.php:107 usr/local/www/status_dhcpv6_leases.php:50 +#: usr/local/www/status_dhcp_leases.php:49 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266 +#: usr/local/www/diag_logs_settings.php:143 usr/local/www/fbegin.inc:323 +#: usr/local/www/status_interfaces.php:60 +#: usr/local/www/status_interfaces.php:88 usr/local/www/carp_status.php:92 +#: usr/local/www/carp_status.php:133 usr/local/www/status_graph.php:90 +#: usr/local/www/diag_ipsec.php:108 usr/local/www/status_wireless.php:78 +#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:123 +#: usr/local/www/status_services.php:222 usr/local/www/status_services.php:242 +#: usr/local/www/status_gateways.php:78 usr/local/www/diag_logs_filter.php:79 +#: usr/local/www/status_services.php:220 usr/local/www/status_services.php:240 +#: usr/local/www/status_openvpn.php:314 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_graph.php:101 usr/local/www/diag_ipsec.php:110 +#: usr/local/www/status_rrd_graph.php:248 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:315 +#: usr/local/www/status_services.php:63 usr/local/www/status_services.php:81 +#: usr/local/www/status_openvpn.php:273 usr/local/www/status_openvpn.php:334 +#: usr/local/www/diag_logs_filter.php:109 usr/local/www/status_graph.php:111 +#: usr/local/www/pkg_mgr.php:134 usr/local/www/status_ntpd.php:115 +#: usr/local/www/status_ntpd.php:129 usr/local/www/status_services.php:63 +#: usr/local/www/status_services.php:81 +#: usr/local/www/status_dhcpv6_leases.php:50 +#: usr/local/www/status_wireless.php:41 usr/local/www/status_wireless.php:78 +#: usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:273 +#: usr/local/www/status_openvpn.php:334 usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_graph_cpu.php:41 +#: usr/local/www/diag_logs_routing.php:54 usr/local/www/status_graph.php:111 +#: usr/local/www/diag_logs_dhcp.php:59 +#: usr/local/www/status_filter_reload.php:44 usr/local/www/diag_ipsec.php:48 +#: usr/local/www/diag_ipsec.php:110 usr/local/www/status_rrd_graph.php:248 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/status_interfaces.php:60 +#: usr/local/www/status_interfaces.php:88 usr/local/www/diag_ipsec_spd.php:49 +#: usr/local/www/diag_logs_openvpn.php:45 usr/local/www/status_lb_pool.php:62 +#: usr/local/www/pkg_mgr.php:182 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/diag_pkglogs.php:81 usr/local/www/status_ntpd.php:115 +#: usr/local/www/status_ntpd.php:129 usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_dhcp_leases.php:49 usr/local/www/status_queues.php:109 +#: usr/local/www/status_gateway_groups.php:52 usr/local/www/fbegin.inc:315 +#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_ipsec.php:91 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:43 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_lb_vs.php:56 usr/local/www/status_lb_vs.php:80 +#: usr/local/www/diag_ipsec_sad.php:49 usr/local/www/status_gateways.php:51 +#: usr/local/www/status_gateways.php:78 +#: usr/local/www/diag_logs_wireless.php:56 usr/local/www/status_upnp.php:58 +#: usr/local/www/easyrule.php:75 usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/carp_status.php:92 usr/local/www/carp_status.php:133 +msgid "Status" +msgstr "" + +#: usr/local/www/easyrule.php:75 usr/local/www/easyrule.php:75 +msgid "System Logs, Firewall Tab" +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/diag_logs.php:78 usr/local/www/diag_logs_auth.php:66 +#: usr/local/www/diag_logs_dhcp.php:71 usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter.php:102 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_ipsec.php:103 usr/local/www/diag_logs_ntpd.php:66 +#: usr/local/www/diag_logs_openvpn.php:70 +#: usr/local/www/diag_logs_settings.php:211 +#: usr/local/www/diag_logs_vpn.php:127 usr/local/www/firewall_aliases.php:150 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_rules.php:52 +#: usr/local/www/firewall_rules_edit.php:628 +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/firewall_shaper.php:54 +#: usr/local/www/firewall_virtual_ip.php:149 +#: usr/local/www/diag_logs_filter_summary.php:185 +#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_relayd.php:67 +#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:335 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/diag_logs_wireless.php:68 +#: usr/local/www/diag_logs_routing.php:66 +#: usr/local/www/diag_logs_settings.php:216 usr/local/www/fbegin.inc:353 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/diag_logs_resolver.php:79 +#: usr/local/www/firewall_aliases.php:153 +#: usr/local/www/diag_logs_gateways.php:79 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/diag_logs_filter_dynamic.php:99 +#: usr/local/www/diag_logs_routing.php:67 +#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:299 +#: usr/local/www/diag_logs_relayd.php:68 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:165 usr/local/www/diag_logs_auth.php:67 +#: usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/diag_logs_ipsec.php:104 +#: usr/local/www/diag_logs_resolver.php:80 usr/local/www/diag_logs_ntpd.php:67 +#: usr/local/www/firewall_rules.php:49 usr/local/www/diag_logs_dhcp.php:72 +#: usr/local/www/diag_logs_wireless.php:69 +#: usr/local/www/diag_logs_filter_summary.php:186 +#: usr/local/www/firewall_aliases.php:155 +#: usr/local/www/diag_logs_gateways.php:80 +#: usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/diag_logs_openvpn.php:71 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/firewall_virtual_ip.php:152 +#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_filter.php:92 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/firewall_virtual_ip.php:166 +#: usr/local/www/firewall_nat_edit.php:439 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +#: usr/local/www/diag_logs_filter_dynamic.php:98 +#: usr/local/www/diag_logs_ppp.php:69 usr/local/www/fbegin.inc:291 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_aliases.php:154 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper.php:54 usr/local/www/diag_logs_auth.php:67 +#: usr/local/www/diag_logs_settings.php:223 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/diag_logs_routing.php:67 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/firewall_nat_edit.php:452 +#: usr/local/www/firewall_aliases.php:154 usr/local/www/diag_logs_dhcp.php:72 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/firewall_shaper_wizards.php:73 usr/local/www/diag_logs.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:98 +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/diag_logs_ntpd.php:67 usr/local/www/firewall_nat.php:166 +#: usr/local/www/diag_logs_openvpn.php:71 usr/local/www/diag_logs_ppp.php:69 +#: usr/local/www/firewall_nat_out.php:301 usr/local/www/firewall_rules.php:49 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/diag_logs_gateways.php:80 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/firewall_nat_1to1_edit.php:221 usr/local/www/fbegin.inc:291 +#: usr/local/www/diag_logs_relayd.php:68 usr/local/www/diag_logs_vpn.php:127 +#: usr/local/www/diag_logs_ipsec.php:104 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/diag_logs_wireless.php:69 +#: usr/local/www/diag_logs_resolver.php:80 +#: usr/local/www/diag_logs_filter_summary.php:186 +msgid "Firewall" +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/firewall_aliases.php:150 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/diag_backup.php:103 usr/local/www/fbegin.inc:110 +#: usr/local/www/fbegin.inc:127 usr/local/www/services_dnsmasq_edit.php:225 +#: usr/local/www/diag_backup.php:180 usr/local/www/firewall_aliases.php:153 +#: usr/local/www/fbegin.inc:136 usr/local/www/services_dnsmasq_edit.php:226 +#: usr/local/www/firewall_aliases.php:155 usr/local/www/fbegin.inc:128 +#: usr/local/www/firewall_aliases.php:154 +#: usr/local/www/firewall_aliases.php:154 +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/diag_backup.php:180 +#: usr/local/www/services_dnsmasq_edit.php:226 usr/local/www/fbegin.inc:128 +msgid "Aliases" +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_aliases_import.php:48 +msgid "Bulk import" +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:64 +#: usr/local/www/firewall_aliases_import.php:64 +msgid "The alias name may only consist of the characters" +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:68 +#: usr/local/www/firewall_aliases_edit.php:151 +#: usr/local/www/firewall_aliases_edit.php:145 +#: usr/local/www/firewall_aliases_import.php:68 +#: usr/local/www/firewall_aliases_edit.php:145 +msgid "An alias with this name already exists." +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:74 +#: usr/local/www/firewall_aliases_edit.php:160 +#: usr/local/www/firewall_aliases_edit.php:154 +#: usr/local/www/firewall_aliases_import.php:74 +#: usr/local/www/firewall_aliases_edit.php:154 +#, php-format +msgid "Cannot use a reserved keyword as alias name %s" +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:79 +#: usr/local/www/firewall_aliases_edit.php:165 +#: usr/local/www/firewall_aliases_edit.php:159 +#: usr/local/www/firewall_aliases_import.php:79 +#: usr/local/www/firewall_aliases_edit.php:159 +msgid "An interface description with this name already exists." +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:94 +#: usr/local/www/firewall_aliases_import.php:94 +#, php-format +msgid "%s is not an IP address. Please correct the error to continue" +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:131 +#: usr/local/www/firewall_aliases_import.php:131 +msgid "Alias Import" +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:134 +#: usr/local/www/firewall_aliases_import.php:134 +msgid "Alias Name" +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:137 +#: usr/local/www/firewall_aliases_edit.php:585 +#: usr/local/www/firewall_aliases_import.php:137 +msgid "" +"The name of the alias may only consist of the characters \"a-z, A-Z and " +"0-9\"." +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:142 +#: usr/local/www/interfaces_lagg_edit.php:211 +#: usr/local/www/services_captiveportal_ip_edit.php:211 +#: usr/local/www/services_captiveportal_mac_edit.php:185 +#: usr/local/www/services_captiveportal_hostname_edit.php:186 +#: usr/local/www/system_gateways_edit.php:487 +#: usr/local/www/vpn_ipsec_phase1.php:580 +#: usr/local/www/vpn_ipsec_phase2.php:502 +#: usr/local/www/vpn_openvpn_client.php:577 +#: usr/local/www/vpn_openvpn_csc.php:346 +#: usr/local/www/vpn_openvpn_server.php:726 +#: usr/local/www/services_captiveportal_zones_edit.php:109 +#: usr/local/www/system_gateways_edit.php:522 +#: usr/local/www/vpn_openvpn_server.php:799 +#: usr/local/www/vpn_ipsec_phase2.php:528 +#: usr/local/www/vpn_openvpn_client.php:582 +#: usr/local/www/vpn_ipsec_phase1.php:593 +#: usr/local/www/services_captiveportal_hostname_edit.php:184 +#: usr/local/www/services_captiveportal_mac_edit.php:183 +#: usr/local/www/interfaces_lagg_edit.php:212 +#: usr/local/www/vpn_openvpn_csc.php:345 +#: usr/local/www/system_gateways_edit.php:622 +#: usr/local/www/services_captiveportal_ip_edit.php:209 +#: usr/local/www/vpn_openvpn_server.php:827 +#: usr/local/www/services_captiveportal_zones_edit.php:111 +#: usr/local/www/vpn_ipsec_phase2.php:630 +#: usr/local/www/vpn_openvpn_client.php:600 +#: usr/local/www/vpn_ipsec_phase1.php:592 +#: usr/local/www/system_gateways_edit.php:626 +#: usr/local/www/services_captiveportal_ip_edit.php:203 +#: usr/local/www/vpn_openvpn_client.php:619 +#: usr/local/www/interfaces_lagg_edit.php:225 +#: usr/local/www/services_captiveportal_mac_edit.php:196 +#: usr/local/www/vpn_ipsec_phase1.php:613 +#: usr/local/www/vpn_openvpn_server.php:854 +#: usr/local/www/vpn_ipsec_phase2.php:651 +#: usr/local/www/system_gateways_edit.php:628 +#: usr/local/www/system_gateways_edit.php:658 +#: usr/local/www/interfaces_lagg_edit.php:224 +#: usr/local/www/system_gateways_edit.php:659 +#: usr/local/www/services_captiveportal_ip_edit.php:203 +#: usr/local/www/services_captiveportal_zones_edit.php:109 +#: usr/local/www/vpn_openvpn_client.php:619 +#: usr/local/www/vpn_openvpn_csc.php:345 +#: usr/local/www/interfaces_lagg_edit.php:224 +#: usr/local/www/services_captiveportal_hostname_edit.php:186 +#: usr/local/www/firewall_aliases_import.php:142 +#: usr/local/www/services_captiveportal_mac_edit.php:196 +#: usr/local/www/vpn_ipsec_phase1.php:613 +#: usr/local/www/vpn_openvpn_server.php:854 +#: usr/local/www/vpn_ipsec_phase2.php:651 +msgid "You may enter a description here for your reference (not parsed)" +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:146 +#: usr/local/www/firewall_aliases_import.php:146 +msgid "Aliases to import" +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:148 +#: usr/local/www/firewall_aliases_import.php:148 +msgid "" +"Paste in the aliases to import separated by a carriage return. Common " +"examples are lists of IPs, networks, blacklists, etc." +msgstr "" + +#: usr/local/www/firewall_aliases_import.php:149 +#: usr/local/www/firewall_aliases_import.php:149 +msgid "The list may contain only IP addresses." +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_shaper.php:54 usr/local/www/diag_backup.php:121 +#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:131 +#: usr/local/www/diag_backup.php:199 usr/local/www/fbegin.inc:140 +#: usr/local/www/fbegin.inc:132 usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper.php:54 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/diag_backup.php:199 usr/local/www/fbegin.inc:132 +msgid "Traffic Shaper" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_layer7.php:410 +#: usr/local/www/firewall_shaper_vinterface.php:375 +#: usr/local/www/firewall_shaper_wizards.php:105 +#: usr/local/www/firewall_rules_edit.php:1443 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_queues.php:196 +#: usr/local/www/firewall_rules_edit.php:1514 +#: usr/local/www/firewall_shaper_vinterface.php:385 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_vinterface.php:392 +#: usr/local/www/firewall_rules_edit.php:1529 +#: usr/local/www/firewall_shaper.php:414 +#: usr/local/www/firewall_shaper_vinterface.php:395 +#: usr/local/www/firewall_rules_edit.php:1537 +#: usr/local/www/firewall_shaper_queues.php:197 +#: usr/local/www/firewall_shaper_wizards.php:106 +#: usr/local/www/firewall_rules_edit.php:1548 +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_layer7.php:410 +#: usr/local/www/firewall_shaper.php:414 +#: usr/local/www/firewall_shaper_vinterface.php:395 +#: usr/local/www/firewall_rules_edit.php:1548 +#: usr/local/www/firewall_shaper_queues.php:197 +#: usr/local/www/firewall_shaper_wizards.php:106 +msgid "Layer7" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:66 +#: usr/local/www/firewall_shaper_layer7.php:66 +msgid "You can add new layer7 protocol patterns by simply uploading the file" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:66 +#: usr/local/www/firewall_virtual_ip.php:243 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2559 usr/local/www/carp_status.php:196 +#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/carp_status.php:189 usr/local/www/status_queues.php:183 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/firewall_virtual_ip.php:249 +#: usr/local/www/firewall_virtual_ip.php:269 +#: usr/local/www/status_queues.php:165 usr/local/www/interfaces.php:2774 +#: usr/local/www/interfaces.php:2783 usr/local/www/interfaces.php:2820 +#: usr/local/www/interfaces.php:2829 usr/local/www/firewall_virtual_ip.php:292 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +#: usr/local/www/firewall_shaper_layer7.php:66 +#: usr/local/www/firewall_virtual_ip.php:292 +#: usr/local/www/status_queues.php:165 usr/local/www/interfaces.php:2806 +#: usr/local/www/interfaces.php:2815 usr/local/www/carp_status.php:189 +msgid "here" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:111 +#: usr/local/www/firewall_shaper_layer7.php:111 +msgid "Layer7 Rules Container not found!" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:161 +#: usr/local/www/firewall_shaper_layer7.php:161 +msgid "Found the following repeated protocol definitions" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:401 +#: usr/local/www/firewall_shaper_queues.php:187 +#: usr/local/www/firewall_shaper_queues.php:188 +#: usr/local/www/firewall_shaper_layer7.php:401 +#: usr/local/www/firewall_shaper_queues.php:188 +msgid "The traffic shaper configuration has been changed" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:407 +#: usr/local/www/firewall_shaper_vinterface.php:372 +#: usr/local/www/firewall_shaper_wizards.php:102 +#: usr/local/www/firewall_shaper.php:409 +#: usr/local/www/firewall_shaper_queues.php:193 +#: usr/local/www/firewall_shaper_vinterface.php:382 +#: usr/local/www/firewall_shaper.php:410 +#: usr/local/www/firewall_shaper_vinterface.php:389 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:392 +#: usr/local/www/firewall_shaper_queues.php:194 +#: usr/local/www/firewall_shaper_wizards.php:103 +#: usr/local/www/firewall_shaper_layer7.php:407 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:392 +#: usr/local/www/firewall_shaper_queues.php:194 +#: usr/local/www/firewall_shaper_wizards.php:103 +msgid "By Interface" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:408 +#: usr/local/www/firewall_shaper_vinterface.php:373 +#: usr/local/www/firewall_shaper_wizards.php:103 +#: usr/local/www/firewall_shaper.php:410 +#: usr/local/www/firewall_shaper_queues.php:194 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:390 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:393 +#: usr/local/www/firewall_shaper_queues.php:195 +#: usr/local/www/firewall_shaper_wizards.php:104 +#: usr/local/www/firewall_shaper_layer7.php:408 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:393 +#: usr/local/www/firewall_shaper_queues.php:195 +#: usr/local/www/firewall_shaper_wizards.php:104 +msgid "By Queue" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:409 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_vinterface.php:374 +#: usr/local/www/firewall_shaper_wizards.php:104 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_queues.php:195 +#: usr/local/www/firewall_shaper_vinterface.php:384 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:391 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_vinterface.php:394 +#: usr/local/www/firewall_shaper_queues.php:196 +#: usr/local/www/firewall_shaper_wizards.php:105 +#: usr/local/www/firewall_shaper_layer7.php:409 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_vinterface.php:394 +#: usr/local/www/firewall_shaper_queues.php:196 +#: usr/local/www/firewall_shaper_wizards.php:105 +msgid "Limiter" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_shaper_wizards.php:106 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_queues.php:197 +#: usr/local/www/vpn_openvpn_client.php:368 +#: usr/local/www/vpn_openvpn_csc.php:296 +#: usr/local/www/vpn_openvpn_server.php:586 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/vpn_openvpn_server.php:659 +#: usr/local/www/vpn_openvpn_client.php:373 +#: usr/local/www/firewall_shaper.php:414 usr/local/www/vpn_openvpn_csc.php:295 +#: usr/local/www/firewall_shaper_vinterface.php:393 +#: usr/local/www/vpn_openvpn_server.php:677 +#: usr/local/www/vpn_openvpn_client.php:381 +#: usr/local/www/vpn_openvpn_client.php:399 +#: usr/local/www/vpn_openvpn_server.php:703 +#: usr/local/www/firewall_shaper.php:415 +#: usr/local/www/firewall_shaper_vinterface.php:396 +#: usr/local/www/firewall_shaper_queues.php:198 +#: usr/local/www/firewall_shaper_wizards.php:107 +#: usr/local/www/firewall_shaper_layer7.php:411 +#: usr/local/www/firewall_shaper.php:415 +#: usr/local/www/firewall_shaper_vinterface.php:396 +#: usr/local/www/vpn_openvpn_client.php:399 +#: usr/local/www/vpn_openvpn_csc.php:295 +#: usr/local/www/firewall_shaper_queues.php:198 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_shaper_wizards.php:107 +#: usr/local/www/vpn_openvpn_server.php:703 +msgid "Wizards" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:432 +#: usr/local/www/firewall_shaper_layer7.php:432 +msgid "Create new l7 rules group" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:445 +#: usr/local/www/firewall_shaper_layer7.php:445 +msgid "Rule(s)" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:457 +#: usr/local/www/firewall_shaper_layer7.php:457 +msgid "Add one or more rules" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:473 +#: usr/local/www/firewall_shaper_layer7.php:473 +msgid "Structure" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:480 +#: usr/local/www/firewall_shaper_layer7.php:480 +msgid "Behaviour" +msgstr "" + +#: usr/local/www/firewall_shaper_layer7.php:558 +#: usr/local/www/interfaces_groups_edit.php:315 +#: usr/local/www/firewall_aliases_edit.php:680 +#: usr/local/www/interfaces_qinq_edit.php:387 +#: usr/local/www/services_dhcp.php:855 +#: usr/local/www/services_igmpproxy_edit.php:273 +#: usr/local/www/vpn_pppoe_edit.php:573 usr/local/www/services_dhcpv6.php:768 +#: usr/local/www/services_unbound_acls.php:279 +#: usr/local/www/services_dnsmasq_edit.php:271 +#: usr/local/www/system_certmanager.php:793 +#: usr/local/www/services_igmpproxy_edit.php:275 +#: usr/local/www/firewall_aliases_edit.php:685 +#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:863 +#: usr/local/www/vpn_pppoe_edit.php:574 +#: usr/local/www/services_dnsmasq_edit.php:272 +#: usr/local/www/services_router_advertisements.php:358 +#: usr/local/www/interfaces_qinq_edit.php:388 +#: usr/local/www/firewall_aliases_edit.php:688 +#: usr/local/www/services_dhcp.php:1090 +#: usr/local/www/interfaces_groups_edit.php:316 +#: usr/local/www/services_dhcpv6.php:794 usr/local/www/vpn_pppoe_edit.php:577 +#: usr/local/www/services_dhcp.php:1103 +#: usr/local/www/system_certmanager.php:818 +#: usr/local/www/services_dhcpv6.php:811 +#: usr/local/www/interfaces_qinq_edit.php:391 +#: usr/local/www/firewall_shaper_layer7.php:555 +#: usr/local/www/services_router_advertisements.php:353 +#: usr/local/www/services_dhcp.php:1123 +#: usr/local/www/system_certmanager.php:820 +#: usr/local/www/firewall_aliases_edit.php:717 +#: usr/local/www/interfaces_groups_edit.php:313 +#: usr/local/www/firewall_shaper_layer7.php:555 +#: usr/local/www/services_router_advertisements.php:353 +#: usr/local/www/vpn_pppoe_edit.php:577 usr/local/www/services_dhcp.php:1123 +#: usr/local/www/system_certmanager.php:820 +#: usr/local/www/services_dhcpv6.php:811 +#: usr/local/www/interfaces_groups_edit.php:313 +#: usr/local/www/firewall_aliases_edit.php:703 +#: usr/local/www/services_igmpproxy_edit.php:275 +#: usr/local/www/services_dnsmasq_edit.php:272 +#: usr/local/www/interfaces_qinq_edit.php:388 +msgid "add another entry" +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:102 +#: usr/local/www/firewall_shaper_vinterface.php:102 +msgid "" +"This pipe/queue is referenced in filter rules, please remove references from " +"there before deleting." +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:114 +#: usr/local/www/firewall_shaper_vinterface.php:114 +#, php-format +msgid "No queue with name %s was found!" +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:160 +#: usr/local/www/firewall_shaper.php:159 usr/local/www/firewall_shaper.php:160 +#: usr/local/www/firewall_shaper.php:160 +#: usr/local/www/firewall_shaper_vinterface.php:160 +msgid "Could not create new queue/discipline!" +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:172 +#: usr/local/www/firewall_shaper_vinterface.php:181 +#: usr/local/www/firewall_shaper_vinterface.php:190 +#: usr/local/www/firewall_shaper.php:175 usr/local/www/firewall_shaper.php:184 +#: usr/local/www/firewall_shaper.php:193 +#: usr/local/www/firewall_shaper_vinterface.php:182 +#: usr/local/www/firewall_shaper_vinterface.php:192 +#: usr/local/www/firewall_shaper.php:176 usr/local/www/firewall_shaper.php:185 +#: usr/local/www/firewall_shaper.php:194 +#: usr/local/www/firewall_shaper_vinterface.php:173 +#: usr/local/www/firewall_shaper_vinterface.php:183 +#: usr/local/www/firewall_shaper_vinterface.php:193 +#: usr/local/www/firewall_shaper.php:176 usr/local/www/firewall_shaper.php:185 +#: usr/local/www/firewall_shaper.php:194 +#: usr/local/www/firewall_shaper_vinterface.php:173 +#: usr/local/www/firewall_shaper_vinterface.php:183 +#: usr/local/www/firewall_shaper_vinterface.php:193 +msgid "Queue not found!" +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:235 +#: usr/local/www/firewall_shaper.php:270 +#: usr/local/www/firewall_shaper_vinterface.php:245 +#: usr/local/www/firewall_shaper.php:271 +#: usr/local/www/firewall_shaper_vinterface.php:247 +#: usr/local/www/firewall_shaper.php:271 +#: usr/local/www/firewall_shaper_vinterface.php:247 +msgid "Could not add new queue." +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:304 +#: usr/local/www/firewall_shaper.php:346 +#: usr/local/www/firewall_shaper_vinterface.php:314 +#: usr/local/www/firewall_shaper.php:347 +#: usr/local/www/firewall_shaper_vinterface.php:316 +#: usr/local/www/firewall_shaper.php:347 +#: usr/local/www/firewall_shaper_vinterface.php:316 +msgid "Queue Actions" +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:315 +#: usr/local/www/firewall_shaper.php:357 +#: usr/local/www/firewall_shaper_vinterface.php:325 +#: usr/local/www/firewall_shaper.php:358 +#: usr/local/www/firewall_shaper_vinterface.php:327 +#: usr/local/www/firewall_shaper.php:358 +#: usr/local/www/firewall_shaper_vinterface.php:327 +msgid "Add new queue" +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:326 +#: usr/local/www/firewall_shaper.php:367 +#: usr/local/www/firewall_shaper_vinterface.php:336 +#: usr/local/www/firewall_shaper.php:368 +#: usr/local/www/firewall_shaper_vinterface.php:338 +#: usr/local/www/firewall_shaper.php:368 +#: usr/local/www/firewall_shaper_vinterface.php:338 +msgid "Delete this queue" +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:328 +#: usr/local/www/firewall_shaper_vinterface.php:338 +#: usr/local/www/firewall_shaper_vinterface.php:340 +#: usr/local/www/firewall_shaper_vinterface.php:340 +msgid "Delete virtual interface" +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:366 +#: usr/local/www/firewall_shaper_wizards.php:96 +#: usr/local/www/firewall_shaper.php:403 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/firewall_shaper.php:404 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/firewall_shaper.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/firewall_shaper_wizards.php:97 +#: usr/local/www/firewall_shaper.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/firewall_shaper_wizards.php:97 +msgid "The traffic shaper configuration has been changed." +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:395 +#: usr/local/www/firewall_shaper_vinterface.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:415 +#: usr/local/www/firewall_shaper_vinterface.php:415 +msgid "Create new limiter" +msgstr "" + +#: usr/local/www/firewall_shaper_wizards.php:76 +#: usr/local/www/firewall_shaper_wizards.php:76 +msgid "Single Lan multi Wan" +msgstr "" + +#: usr/local/www/firewall_shaper_wizards.php:77 +#: usr/local/www/firewall_shaper_wizards.php:77 +msgid "Single Wan multi Lan" +msgstr "" + +#: usr/local/www/firewall_shaper_wizards.php:78 +#: usr/local/www/firewall_shaper_wizards.php:78 +msgid "Multiple Lan/Wan" +msgstr "" + +#: usr/local/www/firewall_shaper_wizards.php:79 +#: usr/local/www/firewall_shaper_wizards.php:79 +msgid "Dedicated Links" +msgstr "" + +#: usr/local/www/firewall_shaper_wizards.php:115 +#: usr/local/www/firewall_shaper_wizards.php:116 +#: usr/local/www/firewall_shaper_wizards.php:116 +msgid "Wizard function" +msgstr "" + +#: usr/local/www/firewall_shaper_wizards.php:116 +#: usr/local/www/firewall_shaper_wizards.php:117 +#: usr/local/www/firewall_shaper_wizards.php:117 +msgid "Wizard Link" +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:107 +#: usr/local/www/system.php:113 usr/local/www/system.php:265 +#: usr/local/www/services_dnsmasq.php:244 +#: usr/local/www/services_dnsmasq.php:311 +#: usr/local/www/services_dnsmasq_edit.php:80 +#: usr/local/www/services_dnsmasq_edit.php:149 +#: usr/local/www/services_dnsmasq.php:332 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:204 +#: usr/local/www/services_dnsmasq_edit.php:238 +#: usr/local/www/services_unbound.php:280 +#: usr/local/www/services_unbound.php:347 usr/local/www/system.php:114 +#: usr/local/www/system.php:276 usr/local/www/services_dnsmasq.php:245 +#: usr/local/www/services_dnsmasq.php:333 +#: usr/local/www/services_dnsmasq_edit.php:205 +#: usr/local/www/services_dnsmasq_edit.php:239 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/system.php:107 usr/local/www/system.php:269 +#: usr/local/www/services_dnsmasq.php:270 +#: usr/local/www/services_dnsmasq.php:358 +#: usr/local/www/services_dnsmasq.php:283 +#: usr/local/www/services_dnsmasq.php:371 +#: usr/local/www/services_dnsmasq.php:347 +#: usr/local/www/services_dnsmasq.php:435 usr/local/www/system.php:107 +#: usr/local/www/system.php:269 usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:205 +#: usr/local/www/services_dnsmasq_edit.php:239 +#: usr/local/www/services_dnsmasq.php:347 +#: usr/local/www/services_dnsmasq.php:435 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +msgid "Domain" +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:70 +#: usr/local/www/services_dnsmasq_edit.php:88 +#: usr/local/www/services_dnsmasq_edit.php:89 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87 +#: usr/local/www/services_dnsmasq_edit.php:89 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87 +msgid "A valid domain must be specified." +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:73 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90 +msgid "A valid IP address must be specified, or # for an exclusion." +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dnsmasq.php:119 +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/services_dhcpv6.php:791 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/services_dnsmasq.php:123 usr/local/www/services_dhcp.php:1153 +#: usr/local/www/services_dnsmasq.php:125 +#: usr/local/www/services_dnsmasq.php:146 usr/local/www/services_dhcp.php:1153 +#: usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dnsmasq.php:146 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +msgid "DNS forwarder" +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +msgid "Edit Domain Override" +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:110 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:133 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:133 +msgid "Domain to override (NOTE: this does not have to be a valid TLD!)" +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/firewall_nat_edit.php:745 usr/local/www/system.php:260 +#: usr/local/www/system.php:271 usr/local/www/services_dnsmasq_edit.php:146 +#: usr/local/www/services_dnsmasq_edit.php:153 +#: usr/local/www/services_dnsmasq_edit.php:160 +#: usr/local/www/services_dnsmasq_edit.php:201 +#: usr/local/www/services_dnsmasq_edit.php:208 +#: usr/local/www/services_dnsmasq_edit.php:215 +#: usr/local/www/firewall_nat_edit.php:752 usr/local/www/system.php:282 +#: usr/local/www/services_dnsmasq_edit.php:202 +#: usr/local/www/services_dnsmasq_edit.php:209 +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +#: usr/local/www/firewall_nat_edit.php:751 usr/local/www/system.php:264 +#: usr/local/www/system.php:275 usr/local/www/firewall_nat_edit.php:746 +#: usr/local/www/firewall_nat_edit.php:758 +#: usr/local/www/firewall_nat_edit.php:759 usr/local/www/system.php:264 +#: usr/local/www/system.php:275 usr/local/www/firewall_nat_edit.php:759 +#: usr/local/www/services_dnsmasq_edit.php:202 +#: usr/local/www/services_dnsmasq_edit.php:209 +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +msgid "e.g." +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +msgid "test" +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:117 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:140 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:140 +msgid "IP address of the authoritative DNS server for this domain" +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +msgid "" +"Or enter # for an exclusion to pass through this host/subdomain to standard " +"nameservers instead of a previous override." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:106 +#: usr/local/www/firewall_virtual_ip_edit.php:415 +#: usr/local/www/load_balancer_relay_action.php:141 +#: usr/local/www/firewall_aliases_edit.php:601 +#: usr/local/www/firewall_virtual_ip.php:186 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:247 +#: usr/local/www/services_captiveportal.php:777 +#: usr/local/www/services_dhcp.php:813 +#: usr/local/www/load_balancer_relay_action_edit.php:463 +#: usr/local/www/load_balancer_relay_protocol.php:135 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:201 +#: usr/local/www/services_igmpproxy.php:96 +#: usr/local/www/services_igmpproxy_edit.php:185 +#: usr/local/www/system_authservers.php:161 +#: usr/local/www/system_authservers.php:184 +#: usr/local/www/system_authservers.php:449 +#: usr/local/www/system_authservers.php:738 +#: usr/local/www/vpn_ipsec_phase2.php:423 +#: usr/local/www/vpn_ipsec_phase2.php:465 +#: usr/local/www/system_certmanager.php:762 +#: usr/local/www/load_balancer_relay_action_edit.php:462 +#: usr/local/www/services_igmpproxy_edit.php:187 +#: usr/local/www/firewall_aliases_edit.php:606 +#: usr/local/www/status_ntpd.php:111 +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/load_balancer_monitor.php:124 +#: usr/local/www/services_dhcp.php:851 usr/local/www/vpn_ipsec_phase2.php:449 +#: usr/local/www/vpn_ipsec_phase2.php:491 +#: usr/local/www/firewall_virtual_ip_edit.php:403 +#: usr/local/www/load_balancer_relay_protocol_edit.php:199 +#: usr/local/www/load_balancer_relay_action_edit.php:460 +#: usr/local/www/load_balancer_monitor_edit.php:245 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/status_ntpd.php:127 +#: usr/local/www/services_captiveportal.php:817 +#: usr/local/www/load_balancer_monitor.php:122 +#: usr/local/www/load_balancer_relay_protocol.php:133 +#: usr/local/www/services_dhcp.php:1048 +#: usr/local/www/load_balancer_relay_action.php:139 +#: usr/local/www/vpn_ipsec_phase2.php:515 +#: usr/local/www/vpn_ipsec_phase2.php:551 +#: usr/local/www/vpn_ipsec_phase2.php:593 +#: usr/local/www/firewall_virtual_ip_edit.php:355 +#: usr/local/www/firewall_virtual_ip.php:190 +#: usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 +#: usr/local/www/system_authservers.php:454 +#: usr/local/www/system_authservers.php:744 +#: usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_virtual_ip_edit.php:347 +#: usr/local/www/services_dhcp.php:1061 +#: usr/local/www/system_certmanager.php:787 +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/system_authservers.php:461 +#: usr/local/www/system_authservers.php:760 +#: usr/local/www/services_captiveportal.php:805 +#: usr/local/www/vpn_ipsec_phase2.php:537 +#: usr/local/www/vpn_ipsec_phase2.php:572 +#: usr/local/www/vpn_ipsec_phase2.php:614 +#: usr/local/www/firewall_virtual_ip_edit.php:367 +#: usr/local/www/services_dhcp.php:1081 +#: usr/local/www/system_certmanager.php:788 usr/local/www/status_ntpd.php:133 +#: usr/local/www/services_captiveportal.php:821 +#: usr/local/www/firewall_aliases_edit.php:640 +#: usr/local/www/firewall_virtual_ip.php:227 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:199 +#: usr/local/www/firewall_virtual_ip.php:227 +#: usr/local/www/firewall_virtual_ip_edit.php:106 +#: usr/local/www/firewall_virtual_ip_edit.php:367 +#: usr/local/www/load_balancer_relay_protocol.php:133 +#: usr/local/www/load_balancer_relay_action.php:139 +#: usr/local/www/services_dhcp.php:1081 +#: usr/local/www/system_certmanager.php:788 +#: usr/local/www/load_balancer_relay_action_edit.php:460 +#: usr/local/www/status_ntpd.php:133 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:245 +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/system_authservers.php:461 +#: usr/local/www/system_authservers.php:760 +#: usr/local/www/services_captiveportal.php:821 +#: usr/local/www/firewall_aliases_edit.php:626 +#: usr/local/www/services_igmpproxy_edit.php:187 +#: usr/local/www/services_igmpproxy.php:96 +#: usr/local/www/load_balancer_monitor.php:122 +#: usr/local/www/vpn_ipsec_phase2.php:537 +#: usr/local/www/vpn_ipsec_phase2.php:572 +#: usr/local/www/vpn_ipsec_phase2.php:614 +msgid "Type" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:111 +#: usr/local/www/diag_logs_settings.php:88 +#: usr/local/www/services_dhcp_edit.php:126 +#: usr/local/www/services_dnsmasq_edit.php:91 +#: usr/local/www/services_dnsmasq_edit.php:92 +#: usr/local/www/services_dhcp_edit.php:128 +#: usr/local/www/firewall_virtual_ip_edit.php:114 +#: usr/local/www/services_dhcp_edit.php:162 +#: usr/local/www/firewall_virtual_ip_edit.php:115 +#: usr/local/www/services_dhcp_edit.php:162 +#: usr/local/www/firewall_virtual_ip_edit.php:115 +#: usr/local/www/services_dnsmasq_edit.php:92 +msgid "A valid IP address must be specified." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:116 +#: usr/local/www/firewall_virtual_ip_edit.php:119 +#: usr/local/www/firewall_virtual_ip_edit.php:123 +#: usr/local/www/firewall_virtual_ip_edit.php:123 +msgid "" +"The interface chosen for the VIP has no IPv4 or IPv6 address configured so " +"it cannot be used as a parent for the VIP." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:118 +#: usr/local/www/firewall_virtual_ip_edit.php:121 +#, php-format +msgid "The %s IP address may not be used in a virtual entry." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:123 +#: usr/local/www/firewall_virtual_ip_edit.php:126 +msgid "The /32 subnet mask is invalid for CARP IPs." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:127 +#: usr/local/www/firewall_virtual_ip_edit.php:130 +msgid "The /128 subnet mask is invalid for CARP IPs." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:135 +#: usr/local/www/firewall_virtual_ip_edit.php:138 +msgid "There is already a virtual IP entry for the specified IP address." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:150 +#, php-format +msgid "VHID %s is already in use. Pick a unique number." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:154 +#: usr/local/www/firewall_virtual_ip_edit.php:157 +#: usr/local/www/firewall_virtual_ip_edit.php:156 +#: usr/local/www/firewall_virtual_ip_edit.php:148 +#: usr/local/www/firewall_virtual_ip_edit.php:164 +#: usr/local/www/firewall_virtual_ip_edit.php:164 +msgid "" +"You must specify a CARP password that is shared between the two VHID members." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:161 +#: usr/local/www/firewall_virtual_ip_edit.php:170 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +#: usr/local/www/firewall_virtual_ip_edit.php:164 +#: usr/local/www/firewall_virtual_ip_edit.php:173 +#: usr/local/www/firewall_virtual_ip_edit.php:185 +#: usr/local/www/firewall_virtual_ip_edit.php:163 +#: usr/local/www/firewall_virtual_ip_edit.php:172 +#: usr/local/www/firewall_virtual_ip_edit.php:184 +#: usr/local/www/firewall_virtual_ip_edit.php:155 +#: usr/local/www/firewall_virtual_ip_edit.php:176 +#: usr/local/www/firewall_virtual_ip_edit.php:178 +#: usr/local/www/firewall_virtual_ip_edit.php:197 +#: usr/local/www/firewall_virtual_ip_edit.php:178 +#: usr/local/www/firewall_virtual_ip_edit.php:197 +#, php-format +msgid "" +"Sorry, we could not locate an interface with a matching subnet for %s. " +"Please add an IP alias in this subnet on this interface." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:174 +#: usr/local/www/firewall_virtual_ip_edit.php:177 +#: usr/local/www/firewall_virtual_ip_edit.php:176 +#: usr/local/www/firewall_virtual_ip_edit.php:168 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +msgid "For this type of vip a carp parent is not allowed." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:188 +#: usr/local/www/firewall_virtual_ip_edit.php:191 +#: usr/local/www/firewall_virtual_ip_edit.php:190 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +#: usr/local/www/firewall_virtual_ip_edit.php:203 +#: usr/local/www/firewall_virtual_ip_edit.php:203 +msgid "For this type of VIP, a CARP parent is not allowed." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:202 +msgid "This entry cannot be modified because it is still referenced by CARP" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +msgid "Virtual IP Address" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:300 +#: usr/local/www/firewall_virtual_ip_edit.php:302 +#: usr/local/www/firewall_virtual_ip_edit.php:288 +#: usr/local/www/firewall_virtual_ip_edit.php:290 +#: usr/local/www/firewall_virtual_ip_edit.php:287 +#: usr/local/www/firewall_virtual_ip_edit.php:289 +#: usr/local/www/firewall_virtual_ip_edit.php:279 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/firewall_virtual_ip_edit.php:299 +#: usr/local/www/firewall_virtual_ip_edit.php:301 +#: usr/local/www/firewall_virtual_ip_edit.php:299 +#: usr/local/www/firewall_virtual_ip_edit.php:301 +msgid "" +"This must be the network's subnet mask. It does not specify a CIDR range." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:301 +#: usr/local/www/firewall_virtual_ip_edit.php:289 +#: usr/local/www/firewall_virtual_ip_edit.php:288 +#: usr/local/www/firewall_virtual_ip_edit.php:280 +#: usr/local/www/firewall_virtual_ip_edit.php:300 +#: usr/local/www/firewall_virtual_ip_edit.php:300 +msgid "This is a CIDR block of proxy ARP addresses." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:400 +#: usr/local/www/firewall_virtual_ip_edit.php:352 +#: usr/local/www/firewall_virtual_ip_edit.php:344 +#: usr/local/www/firewall_virtual_ip_edit.php:364 +#: usr/local/www/firewall_virtual_ip_edit.php:364 +msgid "Edit Virtual IP" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:418 +#: usr/local/www/firewall_virtual_ip_edit.php:406 +#: usr/local/www/firewall_virtual_ip_edit.php:362 +#: usr/local/www/firewall_virtual_ip_edit.php:354 +#: usr/local/www/firewall_virtual_ip_edit.php:374 +#: usr/local/www/firewall_virtual_ip_edit.php:374 +msgid "Proxy ARP" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:420 +#: usr/local/www/carp_status.php:100 +#: usr/local/www/firewall_virtual_ip_edit.php:408 +#: usr/local/www/carp_status.php:92 +#: usr/local/www/firewall_virtual_ip_edit.php:360 +#: usr/local/www/firewall_virtual_ip_edit.php:352 +#: usr/local/www/firewall_virtual_ip_edit.php:372 +#: usr/local/www/firewall_virtual_ip_edit.php:372 +#: usr/local/www/carp_status.php:92 +msgid "CARP" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:422 +#: usr/local/www/firewall_virtual_ip_edit.php:410 +#: usr/local/www/firewall_virtual_ip_edit.php:364 +#: usr/local/www/firewall_virtual_ip_edit.php:356 +#: usr/local/www/firewall_virtual_ip_edit.php:376 +#: usr/local/www/firewall_virtual_ip_edit.php:376 +msgid "Other" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:424 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:358 +#: usr/local/www/firewall_virtual_ip_edit.php:350 +#: usr/local/www/firewall_virtual_ip_edit.php:370 +#: usr/local/www/firewall_virtual_ip_edit.php:370 +msgid "IP Alias" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:435 +#: usr/local/www/diag_packet_capture.php:119 +#: usr/local/www/services_wol.php:130 usr/local/www/services_wol.php:161 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:126 +#: usr/local/www/interfaces_bridge.php:107 +#: usr/local/www/interfaces_gif.php:106 usr/local/www/interfaces_gre.php:107 +#: usr/local/www/interfaces_groups_edit.php:274 +#: usr/local/www/firewall_nat_1to1.php:104 +#: usr/local/www/firewall_nat_1to1_edit.php:114 +#: usr/local/www/firewall_nat_1to1_edit.php:280 +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:185 +#: usr/local/www/firewall_nat_edit.php:476 +#: usr/local/www/firewall_nat_out.php:341 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:417 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/interfaces_assign.php:420 +#: usr/local/www/interfaces_vlan.php:108 usr/local/www/system_routes.php:128 +#: usr/local/www/interfaces_lagg.php:112 usr/local/www/interfaces_ppps.php:108 +#: usr/local/www/interfaces_qinq.php:116 +#: usr/local/www/interfaces_wireless.php:106 usr/local/www/vpn_pppoe.php:101 +#: usr/local/www/services_captiveportal.php:146 usr/local/www/diag_ping.php:95 +#: usr/local/www/services_dhcp_relay.php:72 usr/local/www/status_graph.php:179 +#: usr/local/www/diag_arp.php:316 +#: usr/local/www/services_igmpproxy_edit.php:161 +#: usr/local/www/system_gateways.php:153 +#: usr/local/www/system_gateways_edit.php:98 +#: usr/local/www/system_gateways_edit.php:347 +#: usr/local/www/vpn_ipsec_phase1.php:538 usr/local/www/vpn_l2tp.php:304 +#: usr/local/www/vpn_openvpn_client.php:451 +#: usr/local/www/vpn_openvpn_server.php:691 +#: usr/local/www/vpn_pppoe_edit.php:372 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:42 +#: usr/local/www/diag_ndp.php:132 usr/local/www/firewall_nat_npt.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:166 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/firewall_nat_out.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:287 +#: usr/local/www/firewall_nat_npt_edit.php:171 +#: usr/local/www/status_graph.php:177 +#: usr/local/www/firewall_nat_out_edit.php:430 +#: usr/local/www/firewall_rules_edit.php:760 +#: usr/local/www/services_igmpproxy_edit.php:163 +#: usr/local/www/services_captiveportal.php:147 +#: usr/local/www/system_gateways_edit.php:99 +#: usr/local/www/system_gateways_edit.php:353 +#: usr/local/www/services_dyndns.php:108 +#: usr/local/www/vpn_openvpn_server.php:764 +#: usr/local/www/diag_packet_capture.php:123 +#: usr/local/www/firewall_nat_edit.php:483 +#: usr/local/www/vpn_openvpn_client.php:456 +#: usr/local/www/firewall_virtual_ip_edit.php:423 +#: usr/local/www/vpn_pppoe_edit.php:373 usr/local/www/firewall_nat_out.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:285 +#: usr/local/www/firewall_nat_npt_edit.php:170 usr/local/www/vpn_pppoe.php:102 +#: usr/local/www/status_graph.php:183 usr/local/www/interfaces_qinq.php:117 +#: usr/local/www/interfaces_ppps.php:109 +#: usr/local/www/interfaces_bridge.php:108 +#: usr/local/www/interfaces_lagg.php:113 usr/local/www/interfaces_gre.php:108 +#: usr/local/www/interfaces_wireless.php:107 +#: usr/local/www/services_captiveportal.php:153 +#: usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:459 +#: usr/local/www/interfaces_assign.php:414 +#: usr/local/www/vpn_openvpn_server.php:782 +#: usr/local/www/interfaces_groups_edit.php:275 +#: usr/local/www/diag_packet_capture.php:181 +#: usr/local/www/interfaces_vlan.php:109 +#: usr/local/www/firewall_nat_edit.php:482 +#: usr/local/www/vpn_openvpn_client.php:464 usr/local/www/vpn_l2tp.php:305 +#: usr/local/www/firewall_virtual_ip_edit.php:368 +#: usr/local/www/interfaces_gif.php:107 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/vpn_ipsec_phase1.php:537 usr/local/www/vpn_l2tp.php:308 +#: usr/local/www/vpn_pppoe.php:103 usr/local/www/vpn_openvpn_client.php:482 +#: usr/local/www/diag_testport.php:143 +#: usr/local/www/firewall_rules_edit.php:763 +#: usr/local/www/interfaces_qinq.php:120 +#: usr/local/www/firewall_virtual_ip.php:203 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:477 usr/local/www/status_graph.php:196 +#: usr/local/www/interfaces_lagg.php:117 usr/local/www/interfaces_vlan.php:115 +#: usr/local/www/firewall_virtual_ip_edit.php:360 +#: usr/local/www/interfaces_bridge.php:114 +#: usr/local/www/interfaces_wireless.php:109 +#: usr/local/www/system_routes.php:132 usr/local/www/vpn_pppoe_edit.php:376 +#: usr/local/www/services_captiveportal.php:155 +#: usr/local/www/vpn_ipsec_phase1.php:558 usr/local/www/interfaces_gre.php:112 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:434 +#: usr/local/www/vpn_openvpn_server.php:808 +#: usr/local/www/services_dyndns.php:89 usr/local/www/interfaces_gif.php:111 +#: usr/local/www/system_gateways_edit.php:461 +#: usr/local/www/firewall_rules_edit.php:775 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:215 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:489 usr/local/www/status_graph.php:206 +#: usr/local/www/firewall_virtual_ip_edit.php:380 +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:446 +#: usr/local/www/services_dyndns.php:85 +#: usr/local/www/system_gateways_edit.php:491 +#: usr/local/www/firewall_virtual_ip.php:226 +#: usr/local/www/firewall_nat_edit.php:490 usr/local/www/system_routes.php:148 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/firewall_nat_npt_edit.php:169 +#: usr/local/www/firewall_nat_1to1_edit.php:286 usr/local/www/diag_ndp.php:132 +#: usr/local/www/vpn_l2tp.php:308 usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:491 usr/local/www/vpn_pppoe.php:103 +#: usr/local/www/diag_arp.php:316 usr/local/www/vpn_openvpn_client.php:482 +#: usr/local/www/services_wol.php:130 usr/local/www/services_wol.php:161 +#: usr/local/www/firewall_rules_edit.php:775 +#: usr/local/www/interfaces_qinq.php:120 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:215 +#: usr/local/www/firewall_virtual_ip.php:226 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:490 usr/local/www/status_graph.php:206 +#: usr/local/www/interfaces_lagg.php:117 usr/local/www/interfaces_vlan.php:115 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:126 +#: usr/local/www/firewall_virtual_ip_edit.php:380 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/interfaces_bridge.php:114 +#: usr/local/www/interfaces_wireless.php:109 +#: usr/local/www/system_routes.php:148 usr/local/www/vpn_pppoe_edit.php:376 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/interfaces_ppps.php:109 +#: usr/local/www/firewall_nat_npt.php:104 +#: usr/local/www/firewall_nat_1to1.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:169 +#: usr/local/www/interfaces_groups_edit.php:275 +#: usr/local/www/services_captiveportal.php:155 +#: usr/local/www/services_igmpproxy_edit.php:163 +#: usr/local/www/firewall_nat_1to1_edit.php:114 +#: usr/local/www/firewall_nat_1to1_edit.php:286 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:42 +#: usr/local/www/vpn_ipsec_phase1.php:558 usr/local/www/interfaces_gre.php:112 +#: usr/local/www/system_gateways.php:153 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:446 +#: usr/local/www/vpn_openvpn_server.php:808 +#: usr/local/www/services_dyndns.php:85 +#: usr/local/www/services_dhcp_relay.php:72 +#: usr/local/www/interfaces_gif.php:111 +#: usr/local/www/interfaces_assign.php:420 +msgid "Interface" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:452 +#: usr/local/www/firewall_virtual_ip_edit.php:440 +#: usr/local/www/firewall_virtual_ip_edit.php:385 +#: usr/local/www/firewall_virtual_ip_edit.php:377 +#: usr/local/www/firewall_virtual_ip_edit.php:397 +#: usr/local/www/firewall_virtual_ip_edit.php:397 +msgid "IP Address(es)" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:456 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_out_edit.php:472 +#: usr/local/www/firewall_nat_out_edit.php:506 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules_edit.php:958 +#: usr/local/www/firewall_nat_1to1_edit.php:345 +#: usr/local/www/firewall_nat_1to1_edit.php:400 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/firewall_nat_out_edit.php:519 +#: usr/local/www/firewall_rules_edit.php:900 +#: usr/local/www/firewall_rules_edit.php:993 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_virtual_ip_edit.php:444 +#: usr/local/www/firewall_nat_1to1_edit.php:343 +#: usr/local/www/firewall_nat_1to1_edit.php:398 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_virtual_ip_edit.php:389 +#: usr/local/www/firewall_rules_edit.php:903 +#: usr/local/www/firewall_rules_edit.php:1002 +#: usr/local/www/firewall_nat_edit.php:546 +#: usr/local/www/firewall_nat_edit.php:635 +#: usr/local/www/firewall_virtual_ip_edit.php:381 +#: usr/local/www/firewall_nat_out_edit.php:489 +#: usr/local/www/firewall_nat_out_edit.php:523 +#: usr/local/www/firewall_rules_edit.php:915 +#: usr/local/www/firewall_rules_edit.php:1015 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_virtual_ip_edit.php:401 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_nat_out_edit.php:535 +#: usr/local/www/firewall_rules_edit.php:914 +#: usr/local/www/firewall_rules_edit.php:1014 +#: usr/local/www/firewall_nat_edit.php:559 +#: usr/local/www/firewall_nat_edit.php:648 +#: usr/local/www/firewall_nat_1to1_edit.php:344 +#: usr/local/www/firewall_nat_1to1_edit.php:399 +#: usr/local/www/firewall_nat_out_edit.php:536 +#: usr/local/www/firewall_rules_edit.php:914 +#: usr/local/www/firewall_rules_edit.php:1014 +#: usr/local/www/firewall_nat_edit.php:559 +#: usr/local/www/firewall_nat_edit.php:648 +#: usr/local/www/firewall_virtual_ip_edit.php:401 +#: usr/local/www/firewall_nat_1to1_edit.php:344 +#: usr/local/www/firewall_nat_1to1_edit.php:399 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_nat_out_edit.php:536 +msgid "Type:" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:459 +#: usr/local/www/firewall_virtual_ip_edit.php:447 +#: usr/local/www/firewall_virtual_ip_edit.php:392 +#: usr/local/www/firewall_virtual_ip_edit.php:384 +#: usr/local/www/firewall_virtual_ip_edit.php:404 +#: usr/local/www/firewall_virtual_ip_edit.php:404 +msgid "Single address" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:452 +#: usr/local/www/firewall_aliases_edit.php:624 +#: usr/local/www/firewall_nat_1to1_edit.php:345 +#: usr/local/www/firewall_nat_1to1_edit.php:400 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_nat_out_edit.php:476 +#: usr/local/www/firewall_nat_out_edit.php:511 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/system_routes.php:126 usr/local/www/vpn_ipsec_mobile.php:408 +#: usr/local/www/services_igmpproxy_edit.php:223 +#: usr/local/www/vpn_ipsec_phase2.php:428 +#: usr/local/www/vpn_ipsec_phase2.php:470 +#: usr/local/www/services_unbound_acls.php:236 +#: usr/local/www/firewall_nat_1to1_edit.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:407 +#: usr/local/www/firewall_nat_out_edit.php:489 +#: usr/local/www/firewall_nat_out_edit.php:524 +#: usr/local/www/firewall_rules_edit.php:907 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/services_igmpproxy_edit.php:225 +#: usr/local/www/firewall_aliases_edit.php:455 +#: usr/local/www/firewall_aliases_edit.php:629 +#: usr/local/www/vpn_ipsec_phase2.php:454 +#: usr/local/www/vpn_ipsec_phase2.php:496 +#: usr/local/www/firewall_nat_edit.php:559 +#: usr/local/www/firewall_nat_edit.php:648 +#: usr/local/www/firewall_virtual_ip_edit.php:449 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/vpn_ipsec_mobile.php:433 +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/firewall_aliases_edit.php:632 +#: usr/local/www/vpn_ipsec_phase2.php:520 +#: usr/local/www/vpn_ipsec_phase2.php:556 +#: usr/local/www/vpn_ipsec_phase2.php:598 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_virtual_ip_edit.php:394 +#: usr/local/www/firewall_rules_edit.php:916 +#: usr/local/www/firewall_rules_edit.php:1015 +#: usr/local/www/firewall_nat_edit.php:553 +#: usr/local/www/firewall_nat_edit.php:642 +#: usr/local/www/firewall_virtual_ip_edit.php:386 +#: usr/local/www/system_routes.php:130 +#: usr/local/www/firewall_nat_out_edit.php:493 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/vpn_ipsec_phase2.php:542 +#: usr/local/www/vpn_ipsec_phase2.php:577 +#: usr/local/www/vpn_ipsec_phase2.php:619 +#: usr/local/www/firewall_rules_edit.php:928 +#: usr/local/www/firewall_rules_edit.php:1028 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_virtual_ip_edit.php:406 +#: usr/local/www/firewall_aliases_edit.php:479 +#: usr/local/www/firewall_aliases_edit.php:663 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:540 +#: usr/local/www/firewall_rules_edit.php:927 +#: usr/local/www/firewall_rules_edit.php:1027 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 usr/local/www/system_routes.php:146 +#: usr/local/www/firewall_nat_1to1_edit.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:406 +#: usr/local/www/firewall_nat_out_edit.php:541 +#: usr/local/www/firewall_rules_edit.php:927 +#: usr/local/www/firewall_rules_edit.php:1027 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 +#: usr/local/www/firewall_virtual_ip_edit.php:406 +#: usr/local/www/system_routes.php:146 +#: usr/local/www/firewall_aliases_edit.php:465 +#: usr/local/www/firewall_aliases_edit.php:649 +#: usr/local/www/services_igmpproxy_edit.php:225 +#: usr/local/www/firewall_nat_1to1_edit.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:406 +#: usr/local/www/vpn_ipsec_mobile.php:433 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:541 +#: usr/local/www/vpn_ipsec_phase2.php:542 +#: usr/local/www/vpn_ipsec_phase2.php:577 +#: usr/local/www/vpn_ipsec_phase2.php:619 +msgid "Network" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_nat_1to1_edit.php:367 +#: usr/local/www/firewall_nat_1to1_edit.php:422 +#: usr/local/www/firewall_nat_edit.php:575 +#: usr/local/www/firewall_nat_edit.php:685 +#: usr/local/www/firewall_nat_out_edit.php:479 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:542 +#: usr/local/www/firewall_rules_edit.php:895 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/vpn_ipsec_phase2.php:440 +#: usr/local/www/firewall_nat_npt_edit.php:216 +#: usr/local/www/firewall_nat_npt_edit.php:244 +#: usr/local/www/firewall_nat_1to1_edit.php:374 +#: usr/local/www/firewall_nat_1to1_edit.php:429 +#: usr/local/www/firewall_nat_npt_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:249 +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/firewall_nat_out_edit.php:555 +#: usr/local/www/firewall_rules_edit.php:930 +#: usr/local/www/firewall_rules_edit.php:1023 +#: usr/local/www/vpn_ipsec_phase2.php:466 +#: usr/local/www/firewall_nat_edit.php:582 +#: usr/local/www/firewall_nat_edit.php:692 +#: usr/local/www/firewall_virtual_ip_edit.php:455 +#: usr/local/www/firewall_nat_1to1_edit.php:372 +#: usr/local/www/firewall_nat_1to1_edit.php:427 +#: usr/local/www/firewall_nat_npt_edit.php:220 +#: usr/local/www/firewall_nat_npt_edit.php:248 +#: usr/local/www/vpn_ipsec_phase2.php:532 +#: usr/local/www/vpn_ipsec_phase2.php:568 +#: usr/local/www/firewall_nat_edit.php:581 +#: usr/local/www/firewall_nat_edit.php:691 +#: usr/local/www/firewall_virtual_ip_edit.php:400 +#: usr/local/www/firewall_rules_edit.php:939 +#: usr/local/www/firewall_rules_edit.php:1038 +#: usr/local/www/firewall_nat_edit.php:576 +#: usr/local/www/firewall_nat_edit.php:686 +#: usr/local/www/firewall_virtual_ip_edit.php:392 +#: usr/local/www/firewall_nat_out_edit.php:496 +#: usr/local/www/firewall_nat_out_edit.php:532 +#: usr/local/www/firewall_nat_out_edit.php:559 +#: usr/local/www/vpn_ipsec_phase2.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:589 +#: usr/local/www/firewall_rules_edit.php:951 +#: usr/local/www/firewall_rules_edit.php:1051 +#: usr/local/www/firewall_nat_edit.php:588 +#: usr/local/www/firewall_nat_edit.php:698 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_nat_out_edit.php:508 +#: usr/local/www/firewall_nat_out_edit.php:544 +#: usr/local/www/firewall_nat_out_edit.php:571 +#: usr/local/www/firewall_rules_edit.php:950 +#: usr/local/www/firewall_rules_edit.php:1050 +#: usr/local/www/firewall_nat_edit.php:589 +#: usr/local/www/firewall_nat_edit.php:699 +#: usr/local/www/firewall_nat_npt_edit.php:219 +#: usr/local/www/firewall_nat_npt_edit.php:247 +#: usr/local/www/firewall_nat_1to1_edit.php:373 +#: usr/local/www/firewall_nat_1to1_edit.php:428 +#: usr/local/www/firewall_nat_out_edit.php:510 +#: usr/local/www/firewall_nat_out_edit.php:545 +#: usr/local/www/firewall_rules_edit.php:950 +#: usr/local/www/firewall_rules_edit.php:1050 +#: usr/local/www/firewall_nat_edit.php:589 +#: usr/local/www/firewall_nat_edit.php:699 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_nat_npt_edit.php:219 +#: usr/local/www/firewall_nat_npt_edit.php:247 +#: usr/local/www/firewall_nat_1to1_edit.php:373 +#: usr/local/www/firewall_nat_1to1_edit.php:428 +#: usr/local/www/firewall_nat_out_edit.php:510 +#: usr/local/www/firewall_nat_out_edit.php:545 +#: usr/local/www/firewall_nat_out_edit.php:571 +#: usr/local/www/vpn_ipsec_phase2.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:589 +msgid "Address:" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:404 +#: usr/local/www/firewall_virtual_ip_edit.php:424 +#: usr/local/www/firewall_virtual_ip_edit.php:424 +msgid "Expansion:" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:499 +#: usr/local/www/firewall_virtual_ip_edit.php:487 +#: usr/local/www/firewall_virtual_ip_edit.php:432 +#: usr/local/www/firewall_virtual_ip_edit.php:424 +#: usr/local/www/firewall_virtual_ip_edit.php:444 +#: usr/local/www/firewall_virtual_ip_edit.php:444 +msgid "Virtual IP Password" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/firewall_virtual_ip_edit.php:489 +#: usr/local/www/firewall_virtual_ip_edit.php:434 +#: usr/local/www/firewall_virtual_ip_edit.php:426 +#: usr/local/www/firewall_virtual_ip_edit.php:446 +#: usr/local/www/firewall_virtual_ip_edit.php:446 +msgid "Enter the VHID group password." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:505 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:438 +#: usr/local/www/firewall_virtual_ip_edit.php:430 +#: usr/local/www/firewall_virtual_ip_edit.php:450 +#: usr/local/www/firewall_virtual_ip_edit.php:450 +msgid "VHID Group" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:513 +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/firewall_virtual_ip_edit.php:446 +#: usr/local/www/firewall_virtual_ip_edit.php:438 +#: usr/local/www/firewall_virtual_ip_edit.php:458 +#: usr/local/www/firewall_virtual_ip_edit.php:458 +msgid "Enter the VHID group that the machines will share" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:517 +#: usr/local/www/firewall_virtual_ip_edit.php:505 +#: usr/local/www/firewall_virtual_ip_edit.php:450 +#: usr/local/www/firewall_virtual_ip_edit.php:442 +#: usr/local/www/firewall_virtual_ip_edit.php:462 +#: usr/local/www/firewall_virtual_ip_edit.php:462 +msgid "Advertising Frequency" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/firewall_virtual_ip_edit.php:522 +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_virtual_ip_edit.php:459 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +msgid "" +"The frequency that this machine will advertise. 0 means usually master. " +"Otherwise the lowest combination of both values in the cluster determines " +"the master." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:557 +#: usr/local/www/diag_logs_settings.php:326 +#: usr/local/www/diag_packet_capture.php:195 +#: usr/local/www/services_dyndns.php:160 usr/local/www/services_wol.php:210 +#: usr/local/www/interfaces_bridge.php:144 +#: usr/local/www/interfaces_bridge_edit.php:446 +#: usr/local/www/interfaces_bridge_edit.php:490 +#: usr/local/www/interfaces_bridge_edit.php:534 +#: usr/local/www/interfaces_gif.php:132 usr/local/www/interfaces_gre.php:133 +#: usr/local/www/interfaces_groups.php:148 +#: usr/local/www/firewall_aliases.php:229 +#: usr/local/www/firewall_nat_1to1.php:179 +#: usr/local/www/firewall_nat_out.php:459 +#: usr/local/www/firewall_schedule.php:240 usr/local/www/diag_backup.php:655 +#: usr/local/www/firewall_virtual_ip.php:241 usr/local/www/interfaces.php:1845 +#: usr/local/www/interfaces_vlan.php:134 usr/local/www/system_routes.php:188 +#: usr/local/www/interfaces_lagg.php:138 +#: usr/local/www/interfaces_ppps_edit.php:620 +#: usr/local/www/interfaces_qinq.php:151 +#: usr/local/www/load_balancer_virtual_server_edit.php:289 +#: usr/local/www/services_captiveportal.php:929 +#: usr/local/www/services_captiveportal_filemanager.php:215 +#: usr/local/www/diag_ipsec.php:163 usr/local/www/diag_ipsec_sad.php:134 +#: usr/local/www/services_captiveportal_ip.php:170 +#: usr/local/www/services_captiveportal_mac.php:190 +#: usr/local/www/diag_ipsec_spd.php:143 usr/local/www/services_dhcp.php:715 +#: usr/local/www/services_dhcp.php:876 usr/local/www/services_dnsmasq.php:214 +#: usr/local/www/services_captiveportal_hostname.php:171 +#: usr/local/www/services_captiveportal_vouchers.php:603 +#: usr/local/www/diag_routes.php:72 +#: usr/local/www/status_rrd_graph_settings.php:236 +#: usr/local/www/services_dyndns_edit.php:189 +#: usr/local/www/services_dyndns_edit.php:245 +#: usr/local/www/services_igmpproxy.php:161 +#: usr/local/www/services_rfc2136_edit.php:209 +#: usr/local/www/system_advanced_admin.php:289 +#: usr/local/www/system_gateway_groups.php:195 usr/local/www/vpn_l2tp.php:451 +#: usr/local/www/services_dhcpv6.php:789 +#: usr/local/www/diag_logs_settings.php:333 +#: usr/local/www/services_captiveportal_vouchers.php:610 +#: usr/local/www/services_dyndns_edit.php:272 +#: usr/local/www/services_dyndns_edit.php:376 +#: usr/local/www/firewall_nat_out.php:470 usr/local/www/system_routes.php:199 +#: usr/local/www/status_rrd_graph_settings.php:237 +#: usr/local/www/diag_ipsec.php:221 usr/local/www/diag_backup.php:736 +#: usr/local/www/services_unbound.php:253 +#: usr/local/www/services_captiveportal.php:974 +#: usr/local/www/services_dyndns.php:181 usr/local/www/services_dhcp.php:728 +#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:914 +#: usr/local/www/load_balancer_virtual_server_edit.php:278 +#: usr/local/www/interfaces_bridge_edit.php:455 +#: usr/local/www/interfaces_bridge_edit.php:499 +#: usr/local/www/interfaces_bridge_edit.php:543 +#: usr/local/www/firewall_aliases.php:232 +#: usr/local/www/diag_packet_capture.php:215 usr/local/www/interfaces.php:2023 +#: usr/local/www/firewall_virtual_ip_edit.php:545 +#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:884 +#: usr/local/www/diag_logs_settings.php:353 +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:624 +#: usr/local/www/firewall_nat_out.php:471 +#: usr/local/www/services_captiveportal_ip.php:168 +#: usr/local/www/interfaces_groups.php:149 usr/local/www/diag_ipsec.php:222 +#: usr/local/www/interfaces_qinq.php:152 usr/local/www/diag_ipsec_sad.php:135 +#: usr/local/www/services_captiveportal_mac.php:188 +#: usr/local/www/interfaces_bridge.php:145 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces_lagg.php:139 +#: usr/local/www/services_captiveportal_hostname.php:169 +#: usr/local/www/interfaces_gre.php:134 usr/local/www/diag_routes.php:73 +#: usr/local/www/system_gateway_groups.php:196 +#: usr/local/www/services_captiveportal.php:970 +#: usr/local/www/services_captiveportal_filemanager.php:212 +#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:932 +#: usr/local/www/services_dhcp.php:1118 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +#: usr/local/www/interfaces_bridge_edit.php:456 +#: usr/local/www/interfaces_bridge_edit.php:500 +#: usr/local/www/interfaces_bridge_edit.php:544 +#: usr/local/www/firewall_aliases.php:284 +#: usr/local/www/diag_packet_capture.php:262 +#: usr/local/www/interfaces_vlan.php:135 usr/local/www/interfaces.php:2011 +#: usr/local/www/vpn_l2tp.php:452 +#: usr/local/www/firewall_virtual_ip_edit.php:490 +#: usr/local/www/interfaces_gif.php:133 usr/local/www/diag_ipsec_spd.php:144 +#: usr/local/www/firewall_virtual_ip.php:247 +#: usr/local/www/services_dhcpv6.php:663 usr/local/www/services_dhcpv6.php:815 +#: usr/local/www/vpn_l2tp.php:455 usr/local/www/services_dyndns_edit.php:276 +#: usr/local/www/services_dyndns_edit.php:380 +#: usr/local/www/interfaces_qinq.php:155 +#: usr/local/www/interfaces_ppps_edit.php:627 +#: usr/local/www/firewall_virtual_ip.php:267 +#: usr/local/www/interfaces_lagg.php:143 usr/local/www/interfaces_vlan.php:141 +#: usr/local/www/firewall_virtual_ip_edit.php:482 +#: usr/local/www/diag_ipsec.php:223 usr/local/www/interfaces_bridge.php:151 +#: usr/local/www/services_captiveportal_vouchers.php:633 +#: usr/local/www/system_routes.php:203 usr/local/www/services_dhcp.php:921 +#: usr/local/www/services_dhcp.php:946 usr/local/www/services_dhcp.php:1131 +#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:832 +#: usr/local/www/firewall_nat_out.php:468 +#: usr/local/www/services_captiveportal.php:972 +#: usr/local/www/diag_backup.php:741 +#: usr/local/www/interfaces_bridge_edit.php:457 +#: usr/local/www/interfaces_bridge_edit.php:501 +#: usr/local/www/interfaces_bridge_edit.php:545 +#: usr/local/www/services_dnsmasq.php:240 +#: usr/local/www/services_captiveportal_mac.php:198 +#: usr/local/www/interfaces_gre.php:138 usr/local/www/interfaces_gif.php:137 +#: usr/local/www/interfaces.php:2038 +#: usr/local/www/services_dyndns_edit.php:278 +#: usr/local/www/services_dyndns_edit.php:388 +#: usr/local/www/firewall_aliases.php:287 +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/diag_packet_capture.php:279 +#: usr/local/www/services_dhcp.php:941 usr/local/www/services_dhcp.php:966 +#: usr/local/www/services_dhcp.php:1151 usr/local/www/firewall_nat_out.php:475 +#: usr/local/www/services_captiveportal.php:988 +#: usr/local/www/services_dnsmasq.php:253 +#: usr/local/www/services_dyndns.php:177 +#: usr/local/www/system_gateway_groups.php:205 +#: usr/local/www/interfaces.php:2084 +#: usr/local/www/interfaces_ppps_edit.php:625 +#: usr/local/www/firewall_virtual_ip.php:290 +#: usr/local/www/firewall_aliases.php:288 usr/local/www/system_routes.php:219 +#: usr/local/www/firewall_nat_out.php:474 +#: usr/local/www/interfaces_bridge_edit.php:461 +#: usr/local/www/interfaces_bridge_edit.php:505 +#: usr/local/www/interfaces_bridge_edit.php:549 +#: usr/local/www/services_dnsmasq.php:317 usr/local/www/interfaces.php:2073 +#: usr/local/www/vpn_l2tp.php:455 usr/local/www/diag_logs_settings.php:353 +#: usr/local/www/firewall_schedule.php:240 +#: usr/local/www/services_dyndns_edit.php:278 +#: usr/local/www/services_dyndns_edit.php:388 +#: usr/local/www/services_wol.php:210 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +#: usr/local/www/services_captiveportal_ip.php:168 +#: usr/local/www/interfaces_qinq.php:155 +#: usr/local/www/interfaces_ppps_edit.php:625 +#: usr/local/www/firewall_virtual_ip.php:290 +#: usr/local/www/interfaces_lagg.php:143 usr/local/www/interfaces_vlan.php:141 +#: usr/local/www/firewall_aliases.php:288 +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/diag_ipsec.php:223 +#: usr/local/www/status_rrd_graph_settings.php:237 +#: usr/local/www/diag_packet_capture.php:279 usr/local/www/diag_routes.php:73 +#: usr/local/www/interfaces_bridge.php:151 +#: usr/local/www/services_captiveportal_vouchers.php:638 +#: usr/local/www/system_routes.php:219 usr/local/www/services_dhcp.php:941 +#: usr/local/www/services_dhcp.php:966 usr/local/www/services_dhcp.php:1151 +#: usr/local/www/diag_ipsec_spd.php:144 +#: usr/local/www/interfaces_groups.php:148 +#: usr/local/www/services_captiveportal_hostname.php:169 +#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:832 +#: usr/local/www/firewall_nat_out.php:474 +#: usr/local/www/services_captiveportal_filemanager.php:212 +#: usr/local/www/firewall_nat_1to1.php:179 +#: usr/local/www/services_captiveportal.php:988 +#: usr/local/www/diag_backup.php:741 +#: usr/local/www/interfaces_bridge_edit.php:461 +#: usr/local/www/interfaces_bridge_edit.php:505 +#: usr/local/www/interfaces_bridge_edit.php:549 +#: usr/local/www/services_igmpproxy.php:161 +#: usr/local/www/services_rfc2136_edit.php:209 +#: usr/local/www/services_dnsmasq.php:317 +#: usr/local/www/services_captiveportal_mac.php:198 +#: usr/local/www/interfaces_gre.php:138 usr/local/www/diag_ipsec_sad.php:135 +#: usr/local/www/services_dyndns.php:177 usr/local/www/interfaces_gif.php:137 +#: usr/local/www/system_gateway_groups.php:205 +#: usr/local/www/interfaces.php:2073 +msgid "Note:" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:559 +#: usr/local/www/firewall_virtual_ip_edit.php:547 +#: usr/local/www/firewall_virtual_ip_edit.php:492 +#: usr/local/www/firewall_virtual_ip_edit.php:484 +#: usr/local/www/firewall_virtual_ip_edit.php:503 +#: usr/local/www/firewall_virtual_ip_edit.php:503 +msgid "" +"Proxy ARP and Other type Virtual IPs cannot be bound to by anything running " +"on the firewall, such as IPsec, OpenVPN, etc. Use a CARP or IP Alias type " +"address for these cases." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:560 +#: usr/local/www/firewall_virtual_ip_edit.php:548 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:485 +#: usr/local/www/firewall_virtual_ip_edit.php:504 +#: usr/local/www/firewall_virtual_ip_edit.php:504 +msgid "For more information on CARP and the above values, visit the OpenBSD " +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:560 +#: usr/local/www/firewall_virtual_ip_edit.php:548 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:485 +#: usr/local/www/firewall_virtual_ip_edit.php:504 +#: usr/local/www/firewall_virtual_ip_edit.php:504 +msgid "CARP FAQ" +msgstr "" + +#: usr/local/www/load_balancer_relay_action.php:74 +#: usr/local/www/load_balancer_relay_action.php:74 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"relay protocol." +msgstr "" + +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +msgid "Relay Action" +msgstr "" + +#: usr/local/www/load_balancer_relay_action.php:118 +#: usr/local/www/load_balancer_relay_action.php:116 +#: usr/local/www/load_balancer_relay_action.php:116 +msgid "" +"The load balancer configuration has been changed.
    You must apply the " +"changes in order for them to take effect." +msgstr "" + +#: usr/local/www/load_balancer_relay_action.php:128 +#: usr/local/www/load_balancer_relay_action.php:126 +#: usr/local/www/load_balancer_relay_action.php:126 +msgid "Relay Actions" +msgstr "" + +#: usr/local/www/load_balancer_relay_action.php:129 +#: usr/local/www/load_balancer_relay_action.php:127 +#: usr/local/www/load_balancer_relay_action.php:127 +msgid "Relay Protocols" +msgstr "" + +#: usr/local/www/load_balancer_relay_action.php:142 +#: usr/local/www/interfaces_qinq_edit.php:318 +#: usr/local/www/load_balancer_relay_action_edit.php:515 +#: usr/local/www/load_balancer_relay_action_edit.php:535 +#: usr/local/www/load_balancer_relay_protocol.php:136 +#: usr/local/www/load_balancer_relay_action_edit.php:514 +#: usr/local/www/load_balancer_relay_action_edit.php:534 +#: usr/local/www/interfaces_qinq_edit.php:319 +#: usr/local/www/load_balancer_relay_action_edit.php:512 +#: usr/local/www/load_balancer_relay_action_edit.php:532 +#: usr/local/www/load_balancer_relay_protocol.php:134 +#: usr/local/www/load_balancer_relay_action.php:140 +#: usr/local/www/interfaces_qinq_edit.php:322 +#: usr/local/www/load_balancer_relay_protocol.php:134 +#: usr/local/www/load_balancer_relay_action.php:140 +#: usr/local/www/load_balancer_relay_action_edit.php:512 +#: usr/local/www/load_balancer_relay_action_edit.php:532 +#: usr/local/www/interfaces_qinq_edit.php:322 +msgid "Options" +msgstr "" + +#: usr/local/www/diag_defaults.php:51 +msgid "" +"The system has been reset to factory defaults and is now rebooting. This may " +"take one minute." +msgstr "" + +#: usr/local/www/diag_defaults.php:58 usr/local/www/diag_defaults.php:52 +#: usr/local/www/diag_defaults.php:52 +msgid "Factory defaults" +msgstr "" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70 +#: usr/local/www/diag_defaults.php:70 +msgid "If you click" +msgstr "" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:81 +#: usr/local/www/crash_reporter.php:76 usr/local/www/halt.php:69 +#: usr/local/www/pkg.php:342 usr/local/www/system_firmware.php:229 +#: usr/local/www/reboot.php:61 usr/local/www/reboot.php:72 +#: usr/local/www/pkg.php:424 usr/local/www/reboot.php:53 +#: usr/local/www/reboot.php:64 usr/local/www/halt.php:60 +#: usr/local/www/system_firmware.php:236 usr/local/www/system_firmware.php:239 +#: usr/local/www/diag_defaults.php:60 usr/local/www/diag_defaults.php:70 +#: usr/local/www/diag_defaults.php:82 usr/local/www/system_firmware.php:239 +#: usr/local/www/reboot.php:53 usr/local/www/reboot.php:64 +#: usr/local/www/pkg.php:424 usr/local/www/diag_defaults.php:60 +#: usr/local/www/diag_defaults.php:70 usr/local/www/diag_defaults.php:82 +#: usr/local/www/halt.php:60 usr/local/www/halt.php:69 +#: usr/local/www/crash_reporter.php:76 +msgid "Yes" +msgstr "" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70 +#: usr/local/www/diag_defaults.php:70 +msgid "the firewall will:" +msgstr "" + +#: usr/local/www/diag_defaults.php:70 usr/local/www/diag_defaults.php:72 +#: usr/local/www/diag_defaults.php:72 +msgid "Reset to factory defaults" +msgstr "" + +#: usr/local/www/diag_defaults.php:71 usr/local/www/diag_defaults.php:73 +#: usr/local/www/diag_defaults.php:73 +msgid "LAN IP address will be reset to 192.168.1.1" +msgstr "" + +#: usr/local/www/diag_defaults.php:72 usr/local/www/diag_defaults.php:74 +#: usr/local/www/diag_defaults.php:74 +msgid "System will be configured as a DHCP server on the default LAN interface" +msgstr "" + +#: usr/local/www/diag_defaults.php:73 usr/local/www/diag_defaults.php:75 +#: usr/local/www/diag_defaults.php:75 +msgid "Reboot after changes are installed" +msgstr "" + +#: usr/local/www/diag_defaults.php:74 usr/local/www/diag_defaults.php:76 +#: usr/local/www/diag_defaults.php:76 +msgid "" +"WAN interface will be set to obtain an address automatically from a DHCP " +"server" +msgstr "" + +#: usr/local/www/diag_defaults.php:75 usr/local/www/diag_defaults.php:77 +#: usr/local/www/diag_defaults.php:77 +msgid "webConfigurator admin username will be reset to 'admin'" +msgstr "" + +#: usr/local/www/diag_defaults.php:76 usr/local/www/diag_defaults.php:78 +#: usr/local/www/diag_defaults.php:78 +msgid "webConfigurator admin password will be reset to" +msgstr "" + +#: usr/local/www/diag_defaults.php:79 usr/local/www/diag_defaults.php:80 +#: usr/local/www/diag_defaults.php:80 +msgid "Are you sure you want to proceed?" +msgstr "" + +#: usr/local/www/diag_defaults.php:82 usr/local/www/crash_reporter.php:77 +#: usr/local/www/halt.php:70 usr/local/www/pkg.php:340 +#: usr/local/www/system_firmware.php:230 usr/local/www/reboot.php:62 +#: usr/local/www/pkg.php:422 usr/local/www/reboot.php:43 +#: usr/local/www/reboot.php:65 usr/local/www/halt.php:49 +#: usr/local/www/system_firmware.php:237 usr/local/www/system_firmware.php:240 +#: usr/local/www/diag_defaults.php:47 usr/local/www/diag_defaults.php:83 +#: usr/local/www/system_firmware.php:240 usr/local/www/reboot.php:43 +#: usr/local/www/reboot.php:65 usr/local/www/pkg.php:422 +#: usr/local/www/diag_defaults.php:47 usr/local/www/diag_defaults.php:83 +#: usr/local/www/halt.php:49 usr/local/www/halt.php:70 +#: usr/local/www/crash_reporter.php:77 +msgid "No" +msgstr "" + +#: usr/local/www/diag_logs.php:65 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_routing.php:54 +#: usr/local/www/diag_logs_settings.php:136 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/diag_logs_filter.php:109 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_routing.php:54 usr/local/www/diag_logs_dhcp.php:59 +#: usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_ppp.php:57 usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_ipsec.php:91 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_filter_summary.php:34 +msgid "System logs" +msgstr "" + +#: usr/local/www/diag_logs.php:79 usr/local/www/diag_logs_auth.php:67 +#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_dhcp.php:72 +#: usr/local/www/diag_logs_filter.php:103 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_ipsec.php:104 usr/local/www/diag_logs_ntpd.php:67 +#: usr/local/www/diag_logs_openvpn.php:71 +#: usr/local/www/diag_logs_settings.php:212 +#: usr/local/www/diag_logs_vpn.php:128 usr/local/www/interfaces.php:1032 +#: usr/local/www/diag_logs_filter_summary.php:186 +#: usr/local/www/diag_logs_ppp.php:72 usr/local/www/diag_logs_relayd.php:68 +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/diag_logs_wireless.php:69 +#: usr/local/www/diag_logs_routing.php:67 +#: usr/local/www/diag_logs_settings.php:217 +#: usr/local/www/diag_logs_resolver.php:80 +#: usr/local/www/diag_logs_gateways.php:80 +#: usr/local/www/services_dhcp_edit.php:193 usr/local/www/interfaces.php:1118 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_routing.php:68 +#: usr/local/www/diag_logs_settings.php:224 +#: usr/local/www/diag_logs_relayd.php:69 usr/local/www/diag_logs_auth.php:68 +#: usr/local/www/diag_logs_ipsec.php:105 +#: usr/local/www/diag_logs_resolver.php:81 usr/local/www/diag_logs_ntpd.php:68 +#: usr/local/www/diag_logs_dhcp.php:73 usr/local/www/diag_logs_wireless.php:70 +#: usr/local/www/diag_logs_filter_summary.php:187 +#: usr/local/www/diag_logs_gateways.php:81 +#: usr/local/www/diag_logs_openvpn.php:72 usr/local/www/interfaces.php:1106 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_filter.php:93 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/diag_logs_filter_dynamic.php:99 +#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/interfaces.php:1120 +#: usr/local/www/diag_logs_filter.php:123 usr/local/www/interfaces.php:1162 +#: usr/local/www/interfaces.php:1157 usr/local/www/diag_logs_auth.php:68 +#: usr/local/www/diag_logs_settings.php:224 +#: usr/local/www/diag_logs_filter.php:123 +#: usr/local/www/diag_logs_routing.php:68 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_dhcp.php:73 +#: usr/local/www/diag_logs.php:79 +#: usr/local/www/diag_logs_filter_dynamic.php:99 +#: usr/local/www/diag_logs_ntpd.php:68 usr/local/www/diag_logs_openvpn.php:72 +#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/diag_logs_gateways.php:81 +#: usr/local/www/diag_logs_relayd.php:69 usr/local/www/diag_logs_vpn.php:128 +#: usr/local/www/diag_logs_ipsec.php:105 +#: usr/local/www/diag_logs_wireless.php:70 +#: usr/local/www/diag_logs_resolver.php:81 +#: usr/local/www/diag_logs_filter_summary.php:187 +#: usr/local/www/interfaces.php:1157 +msgid "DHCP" +msgstr "" + +#: usr/local/www/diag_logs.php:80 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_auth.php:68 usr/local/www/diag_logs_dhcp.php:73 +#: usr/local/www/diag_logs_filter.php:104 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_ipsec.php:105 usr/local/www/diag_logs_ntpd.php:68 +#: usr/local/www/diag_logs_openvpn.php:72 +#: usr/local/www/diag_logs_settings.php:213 +#: usr/local/www/diag_logs_vpn.php:129 +#: usr/local/www/diag_logs_filter_summary.php:187 +#: usr/local/www/diag_logs_ppp.php:73 usr/local/www/diag_logs_relayd.php:69 +#: usr/local/www/diag_logs_wireless.php:70 +#: usr/local/www/diag_logs_routing.php:68 +#: usr/local/www/diag_logs_settings.php:218 +#: usr/local/www/diag_logs_resolver.php:81 +#: usr/local/www/diag_logs_gateways.php:81 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_routing.php:69 +#: usr/local/www/diag_logs_settings.php:225 +#: usr/local/www/diag_logs_relayd.php:70 usr/local/www/diag_logs_auth.php:69 +#: usr/local/www/diag_logs_ipsec.php:106 +#: usr/local/www/diag_logs_resolver.php:82 usr/local/www/diag_logs_ntpd.php:69 +#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_wireless.php:71 +#: usr/local/www/diag_logs_filter_summary.php:188 +#: usr/local/www/diag_logs_gateways.php:82 +#: usr/local/www/diag_logs_openvpn.php:73 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_filter.php:94 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_filter.php:124 +#: usr/local/www/diag_logs_auth.php:54 usr/local/www/diag_logs_auth.php:69 +#: usr/local/www/diag_logs_settings.php:225 +#: usr/local/www/diag_logs_filter.php:124 +#: usr/local/www/diag_logs_routing.php:69 usr/local/www/diag_logs_dhcp.php:74 +#: usr/local/www/diag_logs.php:80 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_ntpd.php:69 usr/local/www/diag_logs_openvpn.php:73 +#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_gateways.php:82 +#: usr/local/www/diag_logs_relayd.php:70 usr/local/www/diag_logs_vpn.php:129 +#: usr/local/www/diag_logs_ipsec.php:106 +#: usr/local/www/diag_logs_wireless.php:71 +#: usr/local/www/diag_logs_resolver.php:82 +#: usr/local/www/diag_logs_filter_summary.php:188 +msgid "Portal Auth" +msgstr "" + +#: usr/local/www/diag_logs.php:81 usr/local/www/diag_logs_auth.php:69 +#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_filter.php:105 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_ipsec.php:106 usr/local/www/diag_logs_ntpd.php:69 +#: usr/local/www/diag_logs_openvpn.php:73 +#: usr/local/www/diag_logs_settings.php:214 +#: usr/local/www/diag_logs_vpn.php:130 +#: usr/local/www/diag_logs_filter_summary.php:188 +#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:74 +#: usr/local/www/diag_logs_relayd.php:70 +#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/diag_ipsec.php:48 +#: usr/local/www/diag_ipsec_sad.php:49 usr/local/www/diag_ipsec_spd.php:49 +#: usr/local/www/fbegin.inc:147 usr/local/www/fbegin.inc:164 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 +#: usr/local/www/diag_logs_wireless.php:71 +#: usr/local/www/diag_logs_routing.php:69 +#: usr/local/www/diag_logs_settings.php:219 usr/local/www/fbegin.inc:181 +#: usr/local/www/diag_logs_resolver.php:82 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/diag_logs_gateways.php:82 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_routing.php:70 +#: usr/local/www/diag_logs_settings.php:226 usr/local/www/fbegin.inc:172 +#: usr/local/www/fbegin.inc:189 usr/local/www/diag_logs_relayd.php:71 +#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:70 +#: usr/local/www/diag_logs_ipsec.php:107 +#: usr/local/www/diag_logs_resolver.php:83 usr/local/www/diag_logs_ntpd.php:70 +#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_wireless.php:72 +#: usr/local/www/diag_logs_filter_summary.php:189 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/diag_logs_gateways.php:83 +#: usr/local/www/diag_logs_openvpn.php:74 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_filter.php:95 usr/local/www/vpn_ipsec.php:125 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_ppp.php:72 usr/local/www/fbegin.inc:163 +#: usr/local/www/fbegin.inc:180 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_filter.php:125 usr/local/www/diag_logs_auth.php:70 +#: usr/local/www/diag_logs_settings.php:226 +#: usr/local/www/diag_logs_filter.php:125 usr/local/www/vpn_ipsec.php:125 +#: usr/local/www/diag_logs_routing.php:70 usr/local/www/diag_logs_dhcp.php:75 +#: usr/local/www/diag_ipsec.php:48 usr/local/www/diag_logs.php:81 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_ntpd.php:70 usr/local/www/diag_ipsec_spd.php:49 +#: usr/local/www/diag_logs_openvpn.php:74 usr/local/www/diag_logs_ppp.php:72 +#: usr/local/www/diag_logs_gateways.php:83 usr/local/www/fbegin.inc:163 +#: usr/local/www/fbegin.inc:180 usr/local/www/diag_logs_relayd.php:71 +#: usr/local/www/diag_logs_vpn.php:130 usr/local/www/diag_logs_ipsec.php:107 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_wireless.php:72 +#: usr/local/www/diag_logs_resolver.php:83 +#: usr/local/www/diag_logs_filter_summary.php:189 +msgid "IPsec" +msgstr "" + +#: usr/local/www/diag_logs.php:82 usr/local/www/diag_logs_auth.php:70 +#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_filter.php:106 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_ipsec.php:107 usr/local/www/diag_logs_ntpd.php:70 +#: usr/local/www/diag_logs_openvpn.php:74 +#: usr/local/www/diag_logs_settings.php:215 +#: usr/local/www/diag_logs_vpn.php:131 usr/local/www/interfaces.php:1032 +#: usr/local/www/diag_logs_filter_summary.php:189 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_ppp.php:75 +#: usr/local/www/diag_logs_relayd.php:71 +#: usr/local/www/status_interfaces.php:154 +#: usr/local/www/diag_logs_wireless.php:72 +#: usr/local/www/diag_logs_routing.php:70 +#: usr/local/www/diag_logs_settings.php:220 +#: usr/local/www/status_interfaces.php:172 +#: usr/local/www/diag_logs_resolver.php:83 +#: usr/local/www/diag_logs_gateways.php:83 usr/local/www/interfaces.php:1118 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_routing.php:71 +#: usr/local/www/diag_logs_settings.php:227 +#: usr/local/www/diag_logs_relayd.php:72 +#: usr/local/www/status_interfaces.php:175 usr/local/www/diag_logs_auth.php:71 +#: usr/local/www/diag_logs_ipsec.php:108 +#: usr/local/www/diag_logs_resolver.php:84 usr/local/www/diag_logs_ntpd.php:71 +#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_wireless.php:73 +#: usr/local/www/diag_logs_filter_summary.php:190 +#: usr/local/www/diag_logs_gateways.php:84 +#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/interfaces.php:1106 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_filter.php:96 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_ppp.php:57 usr/local/www/diag_logs_ppp.php:73 +#: usr/local/www/interfaces.php:1120 usr/local/www/diag_logs_filter.php:126 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157 +#: usr/local/www/diag_logs_auth.php:71 +#: usr/local/www/diag_logs_settings.php:227 +#: usr/local/www/diag_logs_filter.php:126 +#: usr/local/www/diag_logs_routing.php:71 usr/local/www/diag_logs_dhcp.php:76 +#: usr/local/www/diag_logs.php:82 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_ntpd.php:71 usr/local/www/status_interfaces.php:175 +#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/diag_logs_ppp.php:73 usr/local/www/diag_logs_gateways.php:84 +#: usr/local/www/diag_logs_relayd.php:72 usr/local/www/diag_logs_vpn.php:131 +#: usr/local/www/diag_logs_ipsec.php:108 +#: usr/local/www/diag_logs_wireless.php:73 +#: usr/local/www/diag_logs_resolver.php:84 +#: usr/local/www/diag_logs_filter_summary.php:190 +#: usr/local/www/interfaces.php:1157 +msgid "PPP" +msgstr "" + +#: usr/local/www/diag_logs.php:83 usr/local/www/diag_logs_auth.php:71 +#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_filter.php:107 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_ipsec.php:108 usr/local/www/diag_logs_ntpd.php:71 +#: usr/local/www/diag_logs_openvpn.php:75 +#: usr/local/www/diag_logs_settings.php:216 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_vpn.php:132 +#: usr/local/www/diag_logs_filter_summary.php:190 +#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:76 +#: usr/local/www/diag_logs_relayd.php:72 +#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/vpn_pppoe.php:86 +#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users_edit.php:135 usr/local/www/fbegin.inc:351 +#: usr/local/www/status_rrd_graph_settings.php:151 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/diag_logs_wireless.php:73 +#: usr/local/www/diag_logs_routing.php:71 +#: usr/local/www/diag_logs_settings.php:221 usr/local/www/fbegin.inc:369 +#: usr/local/www/status_rrd_graph_settings.php:152 +#: usr/local/www/diag_logs_resolver.php:84 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/diag_logs_gateways.php:84 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_routing.php:72 +#: usr/local/www/diag_logs_settings.php:228 usr/local/www/fbegin.inc:315 +#: usr/local/www/diag_logs_relayd.php:73 +#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:72 +#: usr/local/www/diag_logs_ipsec.php:109 +#: usr/local/www/diag_logs_resolver.php:85 usr/local/www/diag_logs_ntpd.php:72 +#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_wireless.php:74 +#: usr/local/www/diag_logs_filter_summary.php:191 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/diag_logs_gateways.php:85 +#: usr/local/www/diag_logs_openvpn.php:76 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_filter.php:97 usr/local/www/vpn_pppoe.php:87 +#: usr/local/www/vpn_ipsec.php:125 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_ppp.php:74 usr/local/www/vpn_pptp.php:196 +#: usr/local/www/fbegin.inc:307 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_filter.php:127 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/vpn_pppoe.php:87 usr/local/www/diag_logs_auth.php:72 +#: usr/local/www/diag_logs_settings.php:228 +#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/diag_logs_filter.php:127 +#: usr/local/www/vpn_ipsec.php:125 usr/local/www/diag_logs_routing.php:72 +#: usr/local/www/diag_logs_dhcp.php:77 +#: usr/local/www/status_rrd_graph_settings.php:152 +#: usr/local/www/diag_logs.php:83 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_ntpd.php:72 usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/diag_logs_openvpn.php:76 usr/local/www/diag_logs_ppp.php:74 +#: usr/local/www/diag_logs_gateways.php:85 usr/local/www/vpn_pptp.php:196 +#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:307 +#: usr/local/www/diag_logs_relayd.php:73 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_vpn.php:132 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/diag_logs_ipsec.php:109 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_mobile.php:240 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_wireless.php:74 +#: usr/local/www/diag_logs_resolver.php:85 +#: usr/local/www/diag_logs_filter_summary.php:191 +msgid "VPN" +msgstr "" + +#: usr/local/www/diag_logs.php:85 usr/local/www/diag_logs_auth.php:73 +#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_ipsec.php:110 usr/local/www/diag_logs_ntpd.php:73 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_openvpn.php:77 +#: usr/local/www/diag_logs_settings.php:218 +#: usr/local/www/diag_logs_vpn.php:134 +#: usr/local/www/diag_packet_capture.php:130 usr/local/www/diag_backup.php:112 +#: usr/local/www/license.php:213 +#: usr/local/www/diag_logs_filter_summary.php:192 +#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/diag_logs_relayd.php:74 +#: usr/local/www/status_graph.php:66 usr/local/www/fbegin.inc:148 +#: usr/local/www/fbegin.inc:166 usr/local/www/status_services.php:343 +#: usr/local/www/status_openvpn.php:46 usr/local/www/vpn_openvpn_client.php:40 +#: usr/local/www/vpn_openvpn_csc.php:40 +#: usr/local/www/vpn_openvpn_server.php:40 +#: usr/local/www/widgets/widgets/services_status.widget.php:148 +#: usr/local/www/diag_logs_wireless.php:75 +#: usr/local/www/diag_logs_routing.php:73 +#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:165 +#: usr/local/www/fbegin.inc:184 usr/local/www/diag_backup.php:189 +#: usr/local/www/diag_logs_resolver.php:86 +#: usr/local/www/diag_packet_capture.php:134 +#: usr/local/www/diag_logs_gateways.php:86 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: etc/inc/service-utils.inc:333 usr/local/www/diag_logs_routing.php:74 +#: usr/local/www/diag_logs_settings.php:230 usr/local/www/fbegin.inc:173 +#: usr/local/www/fbegin.inc:192 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111 +#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:74 +#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_wireless.php:76 +#: usr/local/www/vpn_openvpn_server.php:423 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/diag_packet_capture.php:64 +#: usr/local/www/diag_logs_gateways.php:87 +#: usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_filter.php:99 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_ppp.php:76 usr/local/www/fbegin.inc:164 +#: usr/local/www/fbegin.inc:183 usr/local/www/vpn_openvpn_server.php:445 +#: etc/inc/service-utils.inc:332 usr/local/www/diag_logs_filter.php:129 +#: etc/inc/system.inc:1627 etc/inc/service-utils.inc:349 +#: etc/inc/system.inc:1635 usr/local/www/diag_logs_auth.php:74 +#: usr/local/www/diag_logs_settings.php:230 +#: usr/local/www/vpn_openvpn_client.php:40 usr/local/www/status_openvpn.php:46 +#: usr/local/www/diag_logs_filter.php:129 usr/local/www/vpn_openvpn_csc.php:40 +#: usr/local/www/diag_logs_routing.php:74 usr/local/www/status_graph.php:66 +#: usr/local/www/diag_logs_dhcp.php:79 +#: usr/local/www/diag_packet_capture.php:64 usr/local/www/diag_logs.php:85 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/license.php:213 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_openvpn.php:78 usr/local/www/diag_logs_ppp.php:76 +#: usr/local/www/diag_logs_gateways.php:87 usr/local/www/diag_backup.php:189 +#: usr/local/www/fbegin.inc:164 usr/local/www/fbegin.inc:183 +#: usr/local/www/diag_logs_relayd.php:75 usr/local/www/diag_logs_vpn.php:134 +#: usr/local/www/diag_logs_ipsec.php:111 +#: usr/local/www/vpn_openvpn_server.php:445 +#: usr/local/www/diag_logs_wireless.php:76 +#: usr/local/www/diag_logs_resolver.php:87 +#: usr/local/www/diag_logs_filter_summary.php:193 etc/inc/system.inc:1694 +#: etc/inc/service-utils.inc:349 +msgid "OpenVPN" +msgstr "" + +#: usr/local/www/diag_logs.php:86 usr/local/www/diag_logs_auth.php:74 +#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_filter.php:110 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/diag_logs_ipsec.php:111 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_settings.php:219 +#: usr/local/www/diag_logs_vpn.php:135 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/diag_logs_ppp.php:79 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/fbegin.inc:141 usr/local/www/diag_logs_wireless.php:76 +msgid "OpenNTPD" +msgstr "" + +#: usr/local/www/diag_logs.php:87 usr/local/www/diag_logs_auth.php:75 +#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_filter.php:111 +#: usr/local/www/diag_logs_filter_dynamic.php:110 +#: usr/local/www/diag_logs_ipsec.php:112 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_settings.php:220 +#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/interfaces_bridge.php:91 +#: usr/local/www/interfaces_gif.php:90 usr/local/www/interfaces_gre.php:91 +#: usr/local/www/interfaces_groups.php:77 +#: usr/local/www/interfaces_assign.php:404 +#: usr/local/www/status_wireless.php:41 usr/local/www/interfaces_vlan.php:92 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/diag_logs_ppp.php:80 usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/interfaces_lagg.php:96 usr/local/www/interfaces_ppps.php:92 +#: usr/local/www/interfaces_qinq.php:100 +#: usr/local/www/interfaces_wireless.php:76 +#: usr/local/www/interfaces_wireless.php:90 +#: usr/local/www/interfaces_wireless_edit.php:145 usr/local/www/fbegin.inc:183 +#: usr/local/www/status_rrd_graph.php:344 +#: usr/local/www/status_rrd_graph_settings.php:143 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/diag_logs_routing.php:86 usr/local/www/fbegin.inc:201 +#: usr/local/www/status_rrd_graph_settings.php:144 +#: usr/local/www/diag_logs_resolver.php:100 usr/local/www/diag_logs.php:99 +#: usr/local/www/status_rrd_graph.php:392 +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_gateways.php:100 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_routing.php:87 usr/local/www/fbegin.inc:209 +#: usr/local/www/interfaces_groups.php:78 +#: usr/local/www/interfaces_qinq.php:101 usr/local/www/interfaces_ppps.php:93 +#: usr/local/www/interfaces_bridge.php:92 +#: usr/local/www/diag_logs_resolver.php:101 +#: usr/local/www/interfaces_lagg.php:97 usr/local/www/interfaces_gre.php:92 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/diag_logs_wireless.php:89 +#: usr/local/www/interfaces_assign.php:398 +#: usr/local/www/diag_logs_gateways.php:101 +#: usr/local/www/interfaces_vlan.php:93 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/interfaces_gif.php:91 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_lagg.php:101 +#: usr/local/www/interfaces_vlan.php:99 usr/local/www/status_rrd_graph.php:417 +#: usr/local/www/interfaces_bridge.php:98 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/interfaces_wireless.php:93 usr/local/www/fbegin.inc:200 +#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_gif.php:95 +#: usr/local/www/status_wireless.php:41 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_qinq.php:104 +#: usr/local/www/diag_logs_routing.php:87 +#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_vlan.php:99 +#: usr/local/www/status_rrd_graph.php:417 +#: usr/local/www/status_rrd_graph_settings.php:144 +#: usr/local/www/diag_logs.php:99 usr/local/www/interfaces_bridge.php:98 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/interfaces_wireless.php:93 +#: usr/local/www/interfaces_groups.php:78 usr/local/www/interfaces_ppps.php:93 +#: usr/local/www/diag_logs_gateways.php:101 usr/local/www/fbegin.inc:200 +#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_gif.php:95 +#: usr/local/www/interfaces_assign.php:404 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_wireless.php:89 +#: usr/local/www/diag_logs_resolver.php:101 +msgid "Wireless" +msgstr "" + +#: usr/local/www/diag_logs.php:88 usr/local/www/diag_logs_auth.php:76 +#: usr/local/www/diag_logs_dhcp.php:81 usr/local/www/diag_logs_filter.php:112 +#: usr/local/www/diag_logs_filter_dynamic.php:111 +#: usr/local/www/diag_logs_ipsec.php:113 usr/local/www/diag_logs_ntpd.php:76 +#: usr/local/www/diag_logs_openvpn.php:80 +#: usr/local/www/diag_logs_settings.php:132 +#: usr/local/www/diag_logs_settings.php:221 +#: usr/local/www/diag_logs_vpn.php:137 +#: usr/local/www/system_firmware_settings.php:74 +#: usr/local/www/diag_logs_filter_summary.php:195 +#: usr/local/www/diag_logs_ppp.php:81 usr/local/www/diag_logs_relayd.php:77 +#: usr/local/www/status_rrd_graph.php:361 +#: usr/local/www/status_rrd_graph_settings.php:160 +#: usr/local/www/system_authservers.php:423 +#: usr/local/www/system_groupmanager.php:242 +#: usr/local/www/system_groupmanager_addprivs.php:170 +#: usr/local/www/system_usermanager.php:442 +#: usr/local/www/system_usermanager_addprivs.php:169 +#: usr/local/www/system_usermanager_settings.php:115 +#: usr/local/www/diag_logs_wireless.php:78 +#: usr/local/www/diag_logs_routing.php:75 +#: usr/local/www/diag_logs_settings.php:136 +#: usr/local/www/diag_logs_settings.php:225 +#: usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_setting.php:122 +#: usr/local/www/status_rrd_graph_settings.php:161 +#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112 +#: usr/local/www/system_usermanager.php:440 +#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/diag_logs_ppp.php:80 +#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/diag_logs.php:87 usr/local/www/status_rrd_graph.php:409 +#: usr/local/www/load_balancer_virtual_server.php:118 +#: usr/local/www/system_groupmanager_addprivs.php:168 +#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/load_balancer_monitor.php:112 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/diag_logs_gateways.php:88 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/load_balancer_pool.php:121 +#: usr/local/www/diag_logs_filter.php:111 +#: usr/local/www/diag_logs_routing.php:76 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_settings.php:232 +#: usr/local/www/load_balancer_setting.php:121 +#: usr/local/www/diag_logs_resolver.php:89 +#: usr/local/www/load_balancer_virtual_server.php:116 +#: usr/local/www/load_balancer_monitor.php:110 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_gateways.php:89 +#: usr/local/www/diag_logs_filter_dynamic.php:110 +#: usr/local/www/load_balancer_pool.php:119 +#: usr/local/www/system_authservers.php:428 +#: usr/local/www/diag_logs_filter.php:101 +#: usr/local/www/status_rrd_graph.php:434 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/system_authservers.php:435 +#: usr/local/www/diag_logs_filter.php:131 +#: usr/local/www/system_usermanager_settings.php:117 +#: usr/local/www/diag_logs_auth.php:76 +#: usr/local/www/system_groupmanager.php:242 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_settings.php:232 +#: usr/local/www/system_usermanager_addprivs.php:169 +#: usr/local/www/diag_logs_filter.php:131 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_routing.php:76 usr/local/www/diag_logs_dhcp.php:81 +#: usr/local/www/status_rrd_graph.php:434 +#: usr/local/www/status_rrd_graph_settings.php:161 +#: usr/local/www/diag_logs.php:87 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_ntpd.php:76 usr/local/www/diag_logs_openvpn.php:80 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_setting.php:121 +#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/load_balancer_pool.php:119 +#: usr/local/www/diag_logs_gateways.php:89 +#: usr/local/www/system_authservers.php:435 +#: usr/local/www/system_groupmanager_addprivs.php:168 +#: usr/local/www/system_usermanager_settings.php:117 +#: usr/local/www/diag_logs_relayd.php:77 usr/local/www/diag_logs_vpn.php:136 +#: usr/local/www/diag_logs_ipsec.php:113 +#: usr/local/www/load_balancer_monitor.php:110 +#: usr/local/www/system_usermanager.php:440 +#: usr/local/www/load_balancer_virtual_server.php:116 +#: usr/local/www/diag_logs_wireless.php:78 +#: usr/local/www/diag_logs_resolver.php:89 +#: usr/local/www/diag_logs_filter_summary.php:195 +msgid "Settings" +msgstr "" + +#: usr/local/www/diag_logs.php:98 usr/local/www/diag_logs_resolver.php:110 +#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_gateways.php:110 +#: usr/local/www/diag_logs_resolver.php:111 +#: usr/local/www/diag_logs_gateways.php:111 usr/local/www/diag_logs.php:109 +#: usr/local/www/diag_logs_gateways.php:111 +#: usr/local/www/diag_logs_resolver.php:111 +#, php-format +msgid "Last %s system log entries" +msgstr "" + +#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_auth.php:90 +#: usr/local/www/diag_logs_dhcp.php:95 usr/local/www/diag_logs_filter.php:208 +#: usr/local/www/diag_logs_ipsec.php:150 usr/local/www/diag_logs_ntpd.php:91 +#: usr/local/www/diag_logs_openvpn.php:97 usr/local/www/diag_logs_vpn.php:188 +#: usr/local/www/diag_logs_ppp.php:114 usr/local/www/diag_logs_relayd.php:91 +#: usr/local/www/diag_logs_wireless.php:92 +#: usr/local/www/diag_logs_routing.php:101 +#: usr/local/www/diag_logs_relayd.php:90 usr/local/www/diag_logs_auth.php:89 +#: usr/local/www/diag_logs_ipsec.php:149 usr/local/www/diag_logs_vpn.php:187 +#: usr/local/www/diag_logs_ppp.php:113 +#: usr/local/www/diag_logs_resolver.php:121 +#: usr/local/www/diag_logs_ntpd.php:90 usr/local/www/diag_logs.php:120 +#: usr/local/www/diag_logs_dhcp.php:94 +#: usr/local/www/diag_logs_wireless.php:103 +#: usr/local/www/diag_logs_gateways.php:121 +#: usr/local/www/diag_logs_openvpn.php:96 +#: usr/local/www/diag_logs_filter.php:205 +#: usr/local/www/diag_logs_routing.php:102 +#: usr/local/www/diag_logs_resolver.php:122 +#: usr/local/www/diag_logs_wireless.php:104 +#: usr/local/www/diag_logs_gateways.php:122 +#: usr/local/www/diag_logs_filter.php:264 usr/local/www/diag_logs_ppp.php:95 +#: usr/local/www/diag_logs_ipsec.php:151 +#: usr/local/www/diag_logs_filter.php:398 usr/local/www/diag_logs_auth.php:90 +#: usr/local/www/diag_logs_filter.php:398 +#: usr/local/www/diag_logs_routing.php:102 usr/local/www/diag_logs_dhcp.php:95 +#: usr/local/www/diag_logs.php:120 usr/local/www/diag_logs_ntpd.php:91 +#: usr/local/www/diag_logs_openvpn.php:97 usr/local/www/diag_logs_ppp.php:95 +#: usr/local/www/diag_logs_gateways.php:122 +#: usr/local/www/diag_logs_relayd.php:91 usr/local/www/diag_logs_vpn.php:187 +#: usr/local/www/diag_logs_ipsec.php:151 +#: usr/local/www/diag_logs_wireless.php:104 +#: usr/local/www/diag_logs_resolver.php:122 +msgid "Clear log" +msgstr "" + +#: usr/local/www/diag_logs.php:115 usr/local/www/diag_logs_filter.php:128 +#: usr/local/www/diag_dump_states.php:138 +#: usr/local/www/diag_dump_states_sources.php:133 +#: usr/local/www/diag_logs_resolver.php:127 usr/local/www/diag_logs.php:126 +#: usr/local/www/diag_dump_states.php:153 +#: usr/local/www/diag_logs_gateways.php:127 +#: usr/local/www/diag_logs_filter.php:127 +#: usr/local/www/diag_logs_resolver.php:128 +#: usr/local/www/diag_dump_states_sources.php:132 +#: usr/local/www/diag_dump_states.php:152 +#: usr/local/www/diag_logs_gateways.php:128 +#: usr/local/www/diag_logs_filter.php:147 +#: usr/local/www/diag_logs_filter.php:197 +#: usr/local/www/diag_logs_filter.php:260 +#: usr/local/www/diag_dump_states.php:141 +#: usr/local/www/diag_logs_filter.php:197 +#: usr/local/www/diag_logs_filter.php:260 +#: usr/local/www/diag_dump_states.php:141 +#: usr/local/www/diag_dump_states_sources.php:132 +#: usr/local/www/diag_logs.php:126 usr/local/www/diag_logs_gateways.php:128 +#: usr/local/www/diag_logs_resolver.php:128 +msgid "Filter" +msgstr "" + +#: usr/local/www/diag_logs_auth.php:86 usr/local/www/diag_logs_auth.php:85 +#: usr/local/www/diag_logs_auth.php:86 +#, php-format +msgid "Last %s Portal Auth log entries" +msgstr "" + +#: usr/local/www/diag_logs_dhcp.php:91 usr/local/www/diag_logs_dhcp.php:90 +#: usr/local/www/diag_logs_dhcp.php:91 +#, php-format +msgid "Last %s DHCP service log entries" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:56 usr/local/www/diag_logs_filter.php:63 +#: usr/local/www/diag_logs_filter.php:63 +msgid "The rule that triggered this action is" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter_summary.php:204 +msgid "Normal View" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter_summary.php:204 +msgid "Dynamic View" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter_summary.php:204 +msgid "Summary View" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:139 +#: usr/local/www/diag_logs_filter.php:138 +#: usr/local/www/diag_logs_filter.php:170 +#: usr/local/www/diag_logs_filter.php:296 +#: usr/local/www/diag_logs_filter.php:296 +#, php-format +msgid "Last %s firewall log entries." +msgstr "" + +#: usr/local/www/diag_logs_filter.php:141 +#: usr/local/www/diag_logs_filter.php:140 +#: usr/local/www/diag_logs_filter.php:172 +#: usr/local/www/diag_logs_filter.php:298 +#: usr/local/www/diag_logs_filter.php:298 +msgid "matched log entries." +msgstr "" + +#: usr/local/www/diag_logs_filter.php:143 +#: usr/local/www/diag_logs_filter.php:142 +#: usr/local/www/diag_logs_filter.php:173 +#: usr/local/www/diag_logs_filter.php:299 +#: usr/local/www/diag_logs_filter.php:299 +#, php-format +msgid "Max(%s)" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:146 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#: usr/local/www/diag_logs_filter.php:145 +#: usr/local/www/diag_logs_filter_dynamic.php:125 +#: usr/local/www/diag_logs_filter.php:177 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/widgets/widgets/log.widget.php:163 +#: usr/local/www/diag_logs_filter.php:303 +#: usr/local/www/widgets/widgets/log.widget.php:167 +#: usr/local/www/diag_logs_filter.php:303 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/widgets/widgets/log.widget.php:174 +msgid "Act" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:147 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_vpn.php:175 +#: usr/local/www/firewall_schedule_edit.php:910 +#: usr/local/www/diag_logs_vpn.php:174 +#: usr/local/www/diag_logs_filter_dynamic.php:125 +#: usr/local/www/diag_logs_filter.php:146 +#: usr/local/www/firewall_schedule_edit.php:909 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter.php:178 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_system_pftop.php:143 +#: usr/local/www/diag_logs_filter.php:159 +#: usr/local/www/diag_logs_filter.php:304 +#: usr/local/www/diag_logs_filter.php:159 +#: usr/local/www/diag_logs_filter.php:304 +#: usr/local/www/firewall_schedule_edit.php:909 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_system_pftop.php:143 usr/local/www/diag_logs_vpn.php:174 +#: usr/local/www/widgets/widgets/log.widget.php:175 +msgid "Time" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:148 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/firewall_nat.php:195 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter.php:147 usr/local/www/firewall_nat.php:200 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/diag_logs_filter.php:305 usr/local/www/firewall_nat.php:203 +#: usr/local/www/diag_logs_filter.php:305 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/firewall_nat.php:203 +msgid "If" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:149 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/firewall_nat_edit.php:529 +#: usr/local/www/firewall_nat_edit.php:535 +#: usr/local/www/firewall_nat_out.php:342 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:468 +#: usr/local/www/firewall_rules.php:364 +#: usr/local/www/firewall_rules_edit.php:855 +#: usr/local/www/vpn_ipsec_mobile.php:356 +#: usr/local/www/vpn_ipsec_mobile.php:377 usr/local/www/diag_ipsec_sad.php:87 +#: usr/local/www/diag_ipsec_spd.php:86 usr/local/www/firewall_nat_out.php:352 +#: usr/local/www/firewall_nat_out_edit.php:481 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules.php:368 +#: usr/local/www/firewall_nat_edit.php:536 +#: usr/local/www/firewall_nat_edit.php:542 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_filter.php:148 +#: usr/local/www/firewall_nat_out.php:353 +#: usr/local/www/vpn_ipsec_mobile.php:383 +#: usr/local/www/vpn_ipsec_mobile.php:401 usr/local/www/diag_ipsec_sad.php:88 +#: usr/local/www/firewall_rules.php:361 +#: usr/local/www/firewall_nat_edit.php:541 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/diag_ipsec_spd.php:87 usr/local/www/diag_logs_filter.php:183 +#: usr/local/www/firewall_rules_edit.php:893 +#: usr/local/www/firewall_nat_edit.php:530 +#: usr/local/www/diag_logs_filter_dynamic.php:131 +#: usr/local/www/widgets/widgets/log.widget.php:165 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/firewall_rules_edit.php:905 +#: usr/local/www/diag_logs_filter.php:309 +#: usr/local/www/firewall_nat_edit.php:548 +#: usr/local/www/firewall_nat_out.php:360 usr/local/www/firewall_rules.php:359 +#: usr/local/www/widgets/widgets/log.widget.php:169 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:497 +#: usr/local/www/firewall_rules_edit.php:904 +#: usr/local/www/firewall_nat_edit.php:543 +#: usr/local/www/firewall_nat_edit.php:549 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/firewall_rules_edit.php:904 +#: usr/local/www/diag_logs_filter.php:309 +#: usr/local/www/firewall_nat_edit.php:543 +#: usr/local/www/firewall_nat_edit.php:549 +#: usr/local/www/diag_logs_filter_dynamic.php:131 +#: usr/local/www/diag_ipsec_spd.php:87 usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/firewall_rules.php:359 +#: usr/local/www/widgets/widgets/log.widget.php:177 +#: usr/local/www/vpn_ipsec_mobile.php:383 +#: usr/local/www/vpn_ipsec_mobile.php:401 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:497 +#: usr/local/www/diag_ipsec_sad.php:88 +msgid "Source" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:150 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/firewall_nat_1to1_edit.php:383 +#: usr/local/www/firewall_nat_edit.php:624 +#: usr/local/www/firewall_nat_out.php:344 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:498 +#: usr/local/www/firewall_rules.php:366 +#: usr/local/www/firewall_rules_edit.php:948 +#: usr/local/www/diag_ipsec_sad.php:88 usr/local/www/diag_ipsec_spd.php:87 +#: usr/local/www/firewall_nat_out.php:354 +#: usr/local/www/firewall_nat_1to1_edit.php:390 +#: usr/local/www/firewall_nat_out_edit.php:511 +#: usr/local/www/firewall_rules_edit.php:983 +#: usr/local/www/firewall_rules.php:370 +#: usr/local/www/firewall_nat_edit.php:631 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/diag_logs_filter.php:149 +#: usr/local/www/firewall_nat_out.php:355 +#: usr/local/www/firewall_nat_1to1_edit.php:388 +#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/firewall_rules.php:363 +#: usr/local/www/firewall_nat_edit.php:630 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_ipsec_spd.php:88 usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/firewall_rules_edit.php:992 +#: usr/local/www/firewall_nat_edit.php:625 +#: usr/local/www/diag_logs_filter_dynamic.php:132 +#: usr/local/www/widgets/widgets/log.widget.php:166 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/firewall_rules_edit.php:1005 +#: usr/local/www/diag_logs_filter.php:310 +#: usr/local/www/firewall_nat_edit.php:637 +#: usr/local/www/firewall_nat_out.php:362 usr/local/www/firewall_rules.php:361 +#: usr/local/www/widgets/widgets/log.widget.php:170 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:527 +#: usr/local/www/firewall_rules_edit.php:1004 +#: usr/local/www/firewall_nat_edit.php:638 +#: usr/local/www/firewall_nat_out.php:361 +#: usr/local/www/firewall_nat_1to1_edit.php:389 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/firewall_rules_edit.php:1004 +#: usr/local/www/diag_logs_filter.php:310 +#: usr/local/www/firewall_nat_edit.php:638 +#: usr/local/www/diag_logs_filter_dynamic.php:132 +#: usr/local/www/diag_ipsec_spd.php:88 usr/local/www/firewall_nat_out.php:361 +#: usr/local/www/firewall_rules.php:361 +#: usr/local/www/firewall_nat_1to1_edit.php:389 +#: usr/local/www/widgets/widgets/log.widget.php:178 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/diag_ipsec_sad.php:89 +msgid "Destination" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:151 +#: usr/local/www/diag_logs_filter_dynamic.php:131 +#: usr/local/www/diag_dump_states.php:150 usr/local/www/firewall_rules.php:363 +#: usr/local/www/diag_states_summary.php:152 +#: usr/local/www/firewall_nat.php:196 usr/local/www/firewall_rules.php:367 +#: usr/local/www/diag_dump_states.php:168 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_states_summary.php:141 +#: usr/local/www/diag_logs_filter.php:150 usr/local/www/firewall_nat.php:201 +#: usr/local/www/firewall_rules.php:360 usr/local/www/diag_dump_states.php:167 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/diag_states_summary.php:143 +#: usr/local/www/diag_logs_filter.php:185 +#: usr/local/www/diag_logs_filter_dynamic.php:133 +#: usr/local/www/diag_logs_filter.php:311 +#: usr/local/www/diag_dump_states.php:156 usr/local/www/firewall_rules.php:358 +#: usr/local/www/firewall_nat.php:204 usr/local/www/diag_logs_filter.php:311 +#: usr/local/www/diag_dump_states.php:156 +#: usr/local/www/diag_states_summary.php:143 +#: usr/local/www/diag_logs_filter_dynamic.php:133 +#: usr/local/www/firewall_nat.php:204 usr/local/www/firewall_rules.php:358 +msgid "Proto" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:178 +#: usr/local/www/diag_logs_filter.php:183 +#: usr/local/www/diag_logs_filter_summary.php:81 +#: usr/local/www/diag_logs_filter.php:175 +#: usr/local/www/diag_logs_filter.php:180 +#: usr/local/www/diag_logs_filter_summary.php:82 +#: usr/local/www/diag_logs_filter.php:221 +#: usr/local/www/diag_logs_filter.php:228 +#: usr/local/www/diag_logs_filter.php:351 +#: usr/local/www/diag_logs_filter.php:353 +#: usr/local/www/diag_logs_filter.php:360 +#: usr/local/www/diag_logs_filter.php:362 +#: usr/local/www/widgets/widgets/log.widget.php:189 +#: usr/local/www/widgets/widgets/log.widget.php:192 +#: usr/local/www/diag_logs_filter.php:351 +#: usr/local/www/diag_logs_filter.php:353 +#: usr/local/www/diag_logs_filter.php:360 +#: usr/local/www/diag_logs_filter.php:362 +#: usr/local/www/widgets/widgets/log.widget.php:197 +#: usr/local/www/widgets/widgets/log.widget.php:200 +#: usr/local/www/diag_logs_filter_summary.php:82 +msgid "Reverse Resolve with DNS" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:355 +msgid "Easy Rule: Add to Block List" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:355 +msgid "Do you really want to add this BLOCK rule?" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Easy Rule is still experimental." +msgstr "" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Continue at risk of your own peril." +msgstr "" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Backups are also nice." +msgstr "" + +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:364 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Easy Rule: Pass this traffic" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:364 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Do you really want to add this PASS rule?" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:196 +#: usr/local/www/diag_logs_filter.php:193 +#: usr/local/www/diag_logs_filter.php:251 +#: usr/local/www/diag_logs_filter.php:385 +#: usr/local/www/diag_logs_filter.php:385 +#, php-format +msgid "Last %s firewall log entries" +msgstr "" + +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +msgid "Firewall (Dynamic View)" +msgstr "" + +#: usr/local/www/diag_logs_filter_dynamic.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:120 +#: usr/local/www/diag_logs_filter_dynamic.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#, php-format +msgid "Last %s records" +msgstr "" + +#: usr/local/www/diag_logs_filter_dynamic.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:120 +#: usr/local/www/diag_logs_filter_dynamic.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +msgid "Pause:" +msgstr "" + +#: usr/local/www/diag_logs_filter_dynamic.php:153 +#: usr/local/www/diag_logs_filter_dynamic.php:151 +#: usr/local/www/diag_logs_filter_dynamic.php:152 +#: usr/local/www/diag_logs_filter_dynamic.php:165 +#: usr/local/www/diag_logs_filter_dynamic.php:165 +msgid "TCP Flags" +msgstr "" + +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/status_services.php:330 +#: usr/local/www/widgets/widgets/services_status.widget.php:135 +#: etc/inc/service-utils.inc:320 etc/inc/service-utils.inc:319 +#: etc/inc/service-utils.inc:336 usr/local/www/diag_logs_ipsec.php:91 +#: etc/inc/service-utils.inc:336 +msgid "IPsec VPN" +msgstr "" + +#: usr/local/www/diag_logs_ipsec.php:123 usr/local/www/diag_logs_ipsec.php:122 +#: usr/local/www/diag_logs_ipsec.php:123 +#, php-format +msgid "Last %s IPsec log entries" +msgstr "" + +#: usr/local/www/diag_logs_ipsec.php:135 usr/local/www/diag_logs_ppp.php:99 +#: usr/local/www/diag_logs_ipsec.php:134 usr/local/www/diag_logs_ppp.php:98 +#: usr/local/www/diag_logs_ipsec.php:136 usr/local/www/diag_logs_ipsec.php:136 +msgid "Unknown Gateway/Dynamic" +msgstr "" + +#: usr/local/www/diag_logs_ntpd.php:86 +#, php-format +msgid "Last %s OpenNTPD log entries" +msgstr "" + +#: usr/local/www/diag_logs_openvpn.php:90 +#: usr/local/www/diag_logs_openvpn.php:89 +#: usr/local/www/diag_logs_openvpn.php:90 +#, php-format +msgid "Last %s OpenVPN log entries" +msgstr "" + +#: usr/local/www/diag_dump_states.php:51 usr/local/www/status_openvpn.php:59 +#: usr/local/www/widgets/widgets/openvpn.widget.php:16 +#: usr/local/www/diag_dump_states_sources.php:51 +#: usr/local/www/widgets/widgets/openvpn.widget.php:17 +#: usr/local/www/status_openvpn.php:61 usr/local/www/status_openvpn.php:62 +#: usr/local/www/status_openvpn.php:62 usr/local/www/diag_dump_states.php:51 +#: usr/local/www/diag_dump_states_sources.php:51 +#: usr/local/www/widgets/widgets/openvpn.widget.php:17 +msgid "invalid input" +msgstr "" + +#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_dump_states.php:75 +#: usr/local/www/diag_dump_states.php:67 usr/local/www/diag_dump_states.php:67 +msgid "Show States" +msgstr "" + +#: usr/local/www/diag_dump_states.php:95 usr/local/www/status_openvpn.php:130 +#: usr/local/www/widgets/widgets/openvpn.widget.php:84 +#: usr/local/www/diag_dump_states_sources.php:95 +#: usr/local/www/diag_dump_states.php:105 +#: usr/local/www/widgets/widgets/openvpn.widget.php:85 +#: usr/local/www/status_openvpn.php:131 +#: usr/local/www/diag_dump_states_sources.php:94 +#: usr/local/www/diag_dump_states.php:104 usr/local/www/status_openvpn.php:132 +#: usr/local/www/diag_dump_states.php:96 usr/local/www/status_openvpn.php:132 +#: usr/local/www/diag_dump_states.php:96 +#: usr/local/www/diag_dump_states_sources.php:94 +#: usr/local/www/widgets/widgets/openvpn.widget.php:84 +msgid "An error occurred." +msgstr "" + +#: usr/local/www/diag_dump_states.php:110 +#: usr/local/www/diag_states_summary.php:151 +#: usr/local/www/diag_states_summary.php:153 +#: usr/local/www/diag_resetstate.php:77 usr/local/www/fbegin.inc:206 +#: usr/local/www/system_advanced_misc.php:398 +#: usr/local/www/diag_dump_states_sources.php:110 usr/local/www/fbegin.inc:224 +#: usr/local/www/system_advanced_misc.php:441 +#: usr/local/www/diag_dump_states.php:120 +#: usr/local/www/diag_states_summary.php:140 +#: usr/local/www/diag_states_summary.php:142 usr/local/www/fbegin.inc:233 +#: usr/local/www/system_advanced_misc.php:490 +#: usr/local/www/diag_dump_states_sources.php:109 +#: usr/local/www/diag_dump_states.php:119 +#: usr/local/www/diag_states_summary.php:144 +#: usr/local/www/system_advanced_misc.php:502 usr/local/www/fbegin.inc:225 +#: usr/local/www/diag_dump_states.php:111 +#: usr/local/www/system_advanced_misc.php:549 +#: usr/local/www/diag_dump_states.php:111 +#: usr/local/www/diag_states_summary.php:142 +#: usr/local/www/diag_states_summary.php:144 +#: usr/local/www/diag_dump_states_sources.php:109 +#: usr/local/www/system_advanced_misc.php:549 +#: usr/local/www/diag_resetstate.php:77 usr/local/www/fbegin.inc:225 +msgid "States" +msgstr "" + +#: usr/local/www/diag_dump_states.php:112 usr/local/www/diag_resetstate.php:79 +#: usr/local/www/diag_dump_states_sources.php:111 +#: usr/local/www/diag_dump_states.php:122 +#: usr/local/www/diag_dump_states_sources.php:110 +#: usr/local/www/diag_dump_states.php:121 +#: usr/local/www/diag_dump_states.php:113 +#: usr/local/www/diag_dump_states.php:113 +#: usr/local/www/diag_dump_states_sources.php:110 +#: usr/local/www/diag_resetstate.php:79 +msgid "Source Tracking" +msgstr "" + +#: usr/local/www/diag_dump_states.php:113 usr/local/www/diag_resetstate.php:80 +#: usr/local/www/diag_dump_states_sources.php:112 +#: usr/local/www/diag_dump_states.php:123 +#: usr/local/www/diag_dump_states_sources.php:111 +#: usr/local/www/diag_dump_states.php:122 +#: usr/local/www/diag_dump_states.php:114 +#: usr/local/www/diag_dump_states.php:114 +#: usr/local/www/diag_dump_states_sources.php:111 +#: usr/local/www/diag_resetstate.php:80 +msgid "Reset States" +msgstr "" + +#: usr/local/www/diag_dump_states.php:134 +msgid "Current state count:" +msgstr "" + +#: usr/local/www/diag_dump_states.php:136 +#: usr/local/www/diag_dump_states_sources.php:131 +#: usr/local/www/diag_dump_states.php:151 +#: usr/local/www/diag_dump_states_sources.php:130 +#: usr/local/www/diag_dump_states.php:150 +#: usr/local/www/diag_dump_states.php:139 +#: usr/local/www/diag_dump_states.php:139 +#: usr/local/www/diag_dump_states_sources.php:130 +msgid "Filter expression:" +msgstr "" + +#: usr/local/www/diag_dump_states.php:151 +#: usr/local/www/diag_dump_states.php:169 +#: usr/local/www/diag_dump_states.php:168 +#: usr/local/www/diag_dump_states.php:157 +#: usr/local/www/diag_dump_states.php:157 +msgid "Source -> Router -> Destination" +msgstr "" + +#: usr/local/www/diag_dump_states.php:152 +#: usr/local/www/status_dhcpv6_leases.php:486 +#: usr/local/www/diag_dump_states.php:170 +#: usr/local/www/status_dhcpv6_leases.php:487 +#: usr/local/www/diag_dump_states.php:169 +#: usr/local/www/status_dhcpv6_leases.php:490 +#: usr/local/www/diag_system_pftop.php:142 +#: usr/local/www/diag_dump_states.php:158 +#: usr/local/www/status_dhcpv6_leases.php:490 +#: usr/local/www/diag_dump_states.php:158 +#: usr/local/www/diag_system_pftop.php:142 +msgid "State" +msgstr "" + +#: usr/local/www/diag_dump_states.php:185 +#: usr/local/www/diag_dump_states.php:203 +#: usr/local/www/diag_dump_states.php:202 +#: usr/local/www/diag_dump_states.php:194 +#: usr/local/www/diag_dump_states.php:194 +msgid "Remove all state entries from" +msgstr "" + +#: usr/local/www/diag_dump_states.php:185 +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:735 usr/local/www/diag_confbak.php:111 +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_dhcp.php:636 +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_dhcpv6.php:572 usr/local/www/services_dhcpv6.php:579 +#: usr/local/www/diag_dump_states_sources.php:180 +#: usr/local/www/diag_dump_states.php:203 usr/local/www/services_dhcp.php:649 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/services_dhcpv6.php:645 usr/local/www/services_dhcpv6.php:652 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/diag_dump_states_sources.php:179 +#: usr/local/www/diag_dump_states.php:202 usr/local/www/services_dhcp.php:770 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:583 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:736 usr/local/www/services_dhcp.php:780 +#: usr/local/www/services_dhcpv6.php:593 usr/local/www/services_dhcpv6.php:600 +#: usr/local/www/diag_dump_states.php:194 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:748 usr/local/www/services_dhcp.php:800 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/diag_dump_states.php:194 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/diag_dump_states_sources.php:179 +#: usr/local/www/services_dhcp.php:800 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_dhcpv6.php:593 usr/local/www/services_dhcpv6.php:600 +#: usr/local/www/diag_confbak.php:111 +msgid "to" +msgstr "" + +#: usr/local/www/diag_dump_states.php:194 +#: usr/local/www/diag_dump_states.php:212 +#: usr/local/www/diag_dump_states.php:211 +#: usr/local/www/diag_dump_states.php:205 +#: usr/local/www/diag_dump_states.php:205 +msgid "No states were found." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:79 +msgid "A valid IP address must be specified for remote syslog server #1." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:82 +msgid "A valid IP address must be specified for remote syslog server #2." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:85 +msgid "A valid IP address must be specified for remote syslog server #3." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:92 +#: usr/local/www/diag_logs_settings.php:96 +#: usr/local/www/diag_logs_settings.php:97 +#: usr/local/www/diag_logs_settings.php:97 +msgid "Number of log entries to show must be between 5 and 2000." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:232 +#: usr/local/www/diag_logs_settings.php:239 +#: usr/local/www/diag_logs_settings.php:246 +#: usr/local/www/diag_logs_settings.php:246 +msgid "Show log entries in reverse order (newest entries on top)" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:236 +msgid "Number of log entries to show:" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:242 +#: usr/local/www/diag_logs_settings.php:250 +#: usr/local/www/diag_logs_settings.php:257 +#: usr/local/www/diag_logs_settings.php:257 +msgid "Log packets blocked by the default rule" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:243 +msgid "" +"Hint: packets that are blocked by the implicit default block rule will not " +"be logged anymore if you uncheck this option. Per-rule logging options are " +"not affected." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:250 +#: usr/local/www/diag_logs_settings.php:258 +#: usr/local/www/diag_logs_settings.php:265 +#: usr/local/www/diag_logs_settings.php:265 +msgid "Show raw filter logs" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:251 +msgid "" +"Hint: If this is checked, filter logs are shown as generated by the packet " +"filter, without any formatting. This will reveal more detailed information." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:256 +#: usr/local/www/diag_logs_settings.php:267 +#: usr/local/www/diag_logs_settings.php:287 +#: usr/local/www/diag_logs_settings.php:287 +msgid "Disable writing log files to the local RAM disk" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:261 +msgid "Enable syslog'ing to remote syslog server" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:264 +msgid "Remote syslog servers" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:269 +#: usr/local/www/diag_logs_settings.php:277 +#: usr/local/www/diag_logs_settings.php:285 +#: usr/local/www/vpn_ipsec_mobile.php:496 +#: usr/local/www/vpn_ipsec_mobile.php:502 +#: usr/local/www/vpn_ipsec_mobile.php:508 +#: usr/local/www/vpn_ipsec_mobile.php:514 +#: usr/local/www/vpn_ipsec_mobile.php:538 +#: usr/local/www/vpn_ipsec_mobile.php:544 usr/local/www/diag_dns.php:208 +#: usr/local/www/services_rfc2136_edit.php:180 +#: usr/local/www/vpn_openvpn_client.php:365 +#: usr/local/www/vpn_openvpn_client.php:862 +#: usr/local/www/vpn_openvpn_csc.php:293 usr/local/www/vpn_openvpn_csc.php:477 +#: usr/local/www/vpn_openvpn_csc.php:485 usr/local/www/vpn_openvpn_csc.php:493 +#: usr/local/www/vpn_openvpn_csc.php:501 usr/local/www/vpn_openvpn_csc.php:529 +#: usr/local/www/vpn_openvpn_csc.php:537 usr/local/www/vpn_openvpn_csc.php:625 +#: usr/local/www/vpn_openvpn_csc.php:633 +#: usr/local/www/vpn_openvpn_server.php:40 +#: usr/local/www/vpn_openvpn_server.php:583 +#: usr/local/www/vpn_openvpn_server.php:1238 +#: usr/local/www/vpn_openvpn_server.php:1246 +#: usr/local/www/vpn_openvpn_server.php:1254 +#: usr/local/www/vpn_openvpn_server.php:1262 +#: usr/local/www/vpn_openvpn_server.php:1290 +#: usr/local/www/vpn_openvpn_server.php:1298 +#: usr/local/www/vpn_openvpn_server.php:1386 +#: usr/local/www/vpn_openvpn_server.php:1394 +#: usr/local/www/diag_logs_settings.php:286 +#: usr/local/www/diag_logs_settings.php:290 +#: usr/local/www/diag_logs_settings.php:294 usr/local/www/status_ntpd.php:108 +#: usr/local/www/diag_dns.php:207 usr/local/www/vpn_openvpn_server.php:656 +#: usr/local/www/vpn_openvpn_server.php:1380 +#: usr/local/www/vpn_openvpn_server.php:1388 +#: usr/local/www/vpn_openvpn_server.php:1396 +#: usr/local/www/vpn_openvpn_server.php:1404 +#: usr/local/www/vpn_openvpn_server.php:1432 +#: usr/local/www/vpn_openvpn_server.php:1440 +#: usr/local/www/vpn_openvpn_server.php:1528 +#: usr/local/www/vpn_openvpn_server.php:1536 +#: usr/local/www/vpn_openvpn_client.php:370 +#: usr/local/www/vpn_openvpn_client.php:867 +#: usr/local/www/diag_logs_settings.php:306 +#: usr/local/www/diag_logs_settings.php:310 +#: usr/local/www/diag_logs_settings.php:314 +#: usr/local/www/vpn_ipsec_mobile.php:545 +#: usr/local/www/vpn_ipsec_mobile.php:551 +#: usr/local/www/vpn_ipsec_mobile.php:557 +#: usr/local/www/vpn_ipsec_mobile.php:563 +#: usr/local/www/vpn_ipsec_mobile.php:587 +#: usr/local/www/vpn_ipsec_mobile.php:593 +#: usr/local/www/vpn_openvpn_csc.php:292 usr/local/www/vpn_openvpn_csc.php:476 +#: usr/local/www/vpn_openvpn_csc.php:484 usr/local/www/vpn_openvpn_csc.php:492 +#: usr/local/www/vpn_openvpn_csc.php:500 usr/local/www/vpn_openvpn_csc.php:528 +#: usr/local/www/vpn_openvpn_csc.php:536 usr/local/www/vpn_openvpn_csc.php:624 +#: usr/local/www/vpn_openvpn_csc.php:632 usr/local/www/status_ntpd.php:124 +#: usr/local/www/vpn_openvpn_server.php:423 +#: usr/local/www/vpn_openvpn_server.php:674 +#: usr/local/www/vpn_openvpn_server.php:1422 +#: usr/local/www/vpn_openvpn_server.php:1430 +#: usr/local/www/vpn_openvpn_server.php:1438 +#: usr/local/www/vpn_openvpn_server.php:1446 +#: usr/local/www/vpn_openvpn_server.php:1474 +#: usr/local/www/vpn_openvpn_server.php:1482 +#: usr/local/www/vpn_openvpn_server.php:1570 +#: usr/local/www/vpn_openvpn_server.php:1578 +#: usr/local/www/vpn_openvpn_client.php:378 +#: usr/local/www/vpn_openvpn_client.php:920 +#: usr/local/www/vpn_openvpn_client.php:396 +#: usr/local/www/vpn_openvpn_client.php:939 +#: usr/local/www/vpn_openvpn_server.php:445 +#: usr/local/www/vpn_openvpn_server.php:700 +#: usr/local/www/vpn_openvpn_server.php:1490 +#: usr/local/www/vpn_openvpn_server.php:1498 +#: usr/local/www/vpn_openvpn_server.php:1526 +#: usr/local/www/vpn_openvpn_server.php:1534 +#: usr/local/www/vpn_openvpn_server.php:1622 +#: usr/local/www/vpn_openvpn_server.php:1630 usr/local/www/status_ntpd.php:130 +#: usr/local/www/diag_dns.php:156 usr/local/www/diag_dns.php:224 +#: usr/local/www/diag_logs_settings.php:306 +#: usr/local/www/diag_logs_settings.php:310 +#: usr/local/www/diag_logs_settings.php:314 +#: usr/local/www/vpn_openvpn_client.php:396 +#: usr/local/www/vpn_openvpn_client.php:939 +#: usr/local/www/vpn_openvpn_csc.php:292 usr/local/www/vpn_openvpn_csc.php:476 +#: usr/local/www/vpn_openvpn_csc.php:484 usr/local/www/vpn_openvpn_csc.php:492 +#: usr/local/www/vpn_openvpn_csc.php:500 usr/local/www/vpn_openvpn_csc.php:528 +#: usr/local/www/vpn_openvpn_csc.php:536 usr/local/www/vpn_openvpn_csc.php:624 +#: usr/local/www/vpn_openvpn_csc.php:632 usr/local/www/status_ntpd.php:130 +#: usr/local/www/diag_dns.php:156 usr/local/www/diag_dns.php:224 +#: usr/local/www/services_rfc2136_edit.php:180 +#: usr/local/www/vpn_ipsec_mobile.php:545 +#: usr/local/www/vpn_ipsec_mobile.php:551 +#: usr/local/www/vpn_ipsec_mobile.php:557 +#: usr/local/www/vpn_ipsec_mobile.php:563 +#: usr/local/www/vpn_ipsec_mobile.php:587 +#: usr/local/www/vpn_ipsec_mobile.php:593 +#: usr/local/www/vpn_openvpn_server.php:445 +#: usr/local/www/vpn_openvpn_server.php:700 +#: usr/local/www/vpn_openvpn_server.php:1474 +#: usr/local/www/vpn_openvpn_server.php:1482 +#: usr/local/www/vpn_openvpn_server.php:1490 +#: usr/local/www/vpn_openvpn_server.php:1498 +#: usr/local/www/vpn_openvpn_server.php:1526 +#: usr/local/www/vpn_openvpn_server.php:1534 +#: usr/local/www/vpn_openvpn_server.php:1622 +#: usr/local/www/vpn_openvpn_server.php:1630 +msgid "Server" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:296 +msgid "IP addresses of remote syslog servers" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:300 +#: usr/local/www/diag_logs_settings.php:309 +#: usr/local/www/diag_logs_settings.php:329 +#: usr/local/www/diag_logs_settings.php:329 +msgid "System events" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:302 +#: usr/local/www/diag_logs_settings.php:311 +#: usr/local/www/diag_logs_settings.php:331 +#: usr/local/www/diag_logs_settings.php:331 +msgid "Firewall events" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:304 +#: usr/local/www/diag_logs_settings.php:313 +#: usr/local/www/diag_logs_settings.php:333 +#: usr/local/www/diag_logs_settings.php:333 +msgid "DHCP service events" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:306 +#: usr/local/www/diag_logs_settings.php:315 +#: usr/local/www/diag_logs_settings.php:335 +#: usr/local/www/diag_logs_settings.php:335 +msgid "Portal Auth events" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:308 +#: usr/local/www/diag_logs_settings.php:317 +#: usr/local/www/diag_logs_settings.php:337 +#: usr/local/www/diag_logs_settings.php:337 +msgid "VPN (PPTP, IPsec, OpenVPN) events" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:310 +#: usr/local/www/diag_logs_settings.php:319 +#: usr/local/www/diag_logs_settings.php:339 +#: usr/local/www/diag_logs_settings.php:339 +msgid "Gateway Monitor events" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:312 +#: usr/local/www/diag_logs_settings.php:321 +#: usr/local/www/diag_logs_settings.php:341 +#: usr/local/www/diag_logs_settings.php:341 +msgid "Server Load Balancer events" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:314 +#: usr/local/www/diag_logs_settings.php:323 +#: usr/local/www/diag_logs_settings.php:343 +#: usr/local/www/diag_logs_settings.php:343 +msgid "Wireless events" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:316 +#: usr/local/www/diag_logs_settings.php:307 +#: usr/local/www/diag_logs_settings.php:327 +#: usr/local/www/diag_logs_settings.php:327 +msgid "Everything" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:327 +msgid "" +"syslog sends UDP datagrams to port 514 on the specified remote syslog " +"server. Be sure to set syslogd on the remote server to accept syslog " +"messages from" +msgstr "" + +#: usr/local/www/diag_logs_vpn.php:144 usr/local/www/diag_logs_vpn.php:143 +#: usr/local/www/diag_logs_vpn.php:143 +msgid "PPTP Logins" +msgstr "" + +#: usr/local/www/diag_logs_vpn.php:147 usr/local/www/diag_logs_vpn.php:146 +#: usr/local/www/diag_logs_vpn.php:146 +msgid "PPTP Raw" +msgstr "" + +#: usr/local/www/diag_logs_vpn.php:150 usr/local/www/diag_logs_vpn.php:149 +#: usr/local/www/diag_logs_vpn.php:149 +msgid "PPPoE Logins" +msgstr "" + +#: usr/local/www/diag_logs_vpn.php:153 usr/local/www/diag_logs_vpn.php:152 +#: usr/local/www/diag_logs_vpn.php:152 +msgid "PPPoE Raw" +msgstr "" + +#: usr/local/www/diag_logs_vpn.php:156 usr/local/www/diag_logs_vpn.php:155 +#: usr/local/www/diag_logs_vpn.php:155 +msgid "L2TP Logins" +msgstr "" + +#: usr/local/www/diag_logs_vpn.php:159 usr/local/www/diag_logs_vpn.php:158 +#: usr/local/www/diag_logs_vpn.php:158 +msgid "L2TP Raw" +msgstr "" + +#: usr/local/www/diag_logs_vpn.php:171 usr/local/www/diag_logs_vpn.php:170 +#: usr/local/www/diag_logs_vpn.php:170 +#, php-format +msgid "Last %1$s %2$s VPN log entries" +msgstr "" + +#: usr/local/www/diag_logs_vpn.php:176 +#: usr/local/www/firewall_rules_edit.php:659 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:484 +#: usr/local/www/services_unbound_acls.php:211 +#: usr/local/www/services_unbound_acls.php:318 +#: usr/local/www/load_balancer_relay_action_edit.php:483 +#: usr/local/www/firewall_rules_edit.php:692 +#: usr/local/www/diag_logs_vpn.php:175 +#: usr/local/www/load_balancer_relay_action_edit.php:481 +#: usr/local/www/firewall_rules_edit.php:695 +#: usr/local/www/firewall_rules_edit.php:707 +#: usr/local/www/diag_logs_filter.php:151 +#: usr/local/www/firewall_rules_edit.php:707 +#: usr/local/www/diag_logs_filter.php:151 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:481 +#: usr/local/www/diag_logs_vpn.php:175 +msgid "Action" +msgstr "" + +#: usr/local/www/diag_logs_vpn.php:177 +#: usr/local/www/diag_authentication.php:59 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/system_groupmanager.php:426 +#: usr/local/www/system_usermanager.php:89 +#: usr/local/www/system_usermanager.php:808 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/system_usermanager.php:806 +#: usr/local/www/diag_logs_vpn.php:176 +#: usr/local/www/system_groupmanager.php:429 +#: usr/local/www/system_usermanager.php:809 +#: usr/local/www/system_groupmanager.php:448 +#: usr/local/www/system_usermanager.php:832 +#: usr/local/www/diag_authentication.php:59 +#: usr/local/www/system_groupmanager.php:448 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/diag_logs_vpn.php:176 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/system_usermanager.php:89 +#: usr/local/www/system_usermanager.php:832 +msgid "User" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:49 usr/local/www/fbegin.inc:212 +#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:239 +#: usr/local/www/fbegin.inc:231 usr/local/www/fbegin.inc:231 +#: usr/local/www/diag_nanobsd.php:49 +msgid "NanoBSD" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:70 usr/local/www/diag_nanobsd.php:69 +#: usr/local/www/diag_nanobsd.php:69 +msgid "Setting slice information, please wait..." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:79 usr/local/www/diag_nanobsd.php:78 +#: usr/local/www/diag_nanobsd.php:78 +msgid "The boot slice has been set to" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:86 usr/local/www/diag_nanobsd.php:85 +#: usr/local/www/diag_nanobsd.php:85 +msgid "Duplicating slice. Please wait, this will take a moment..." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94 +#: usr/local/www/diag_nanobsd.php:94 +msgid "The slice has been duplicated." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94 +#: usr/local/www/diag_nanobsd.php:94 +msgid "" +"If you would like to boot from this newly duplicated slice please set it " +"using the bootup information area." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:97 usr/local/www/diag_nanobsd.php:96 +#: usr/local/www/diag_nanobsd.php:96 +msgid "There was an error while duplicating the slice. Operation aborted." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:128 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2559 +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/load_balancer_virtual_server_edit.php:212 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/load_balancer_virtual_server_edit.php:244 +#: usr/local/www/system_advanced_firewall.php:231 +#: usr/local/www/system_advanced_misc.php:221 +#: usr/local/www/system_advanced_network.php:197 +#: usr/local/www/system_advanced_sysctl.php:163 +#: usr/local/www/system_routes_edit.php:374 +#: usr/local/www/system_advanced_firewall.php:245 +#: usr/local/www/system_advanced_admin.php:289 +#: usr/local/www/system_advanced_misc.php:247 +#: usr/local/www/load_balancer_virtual_server_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:220 +#: usr/local/www/load_balancer_virtual_server_edit.php:233 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/diag_nanobsd.php:127 usr/local/www/system_routes_edit.php:375 +#: usr/local/www/system_advanced_misc.php:266 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +#: usr/local/www/system_firmware_settings.php:156 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/diag_nanobsd.php:148 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_advanced_firewall.php:274 +#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783 +#: usr/local/www/system_firmware_settings.php:167 +#: usr/local/www/system_advanced_misc.php:317 +#: usr/local/www/system_routes_edit.php:399 +#: usr/local/www/system_advanced_firewall.php:273 +#: usr/local/www/diag_nanobsd.php:139 usr/local/www/interfaces.php:2820 +#: usr/local/www/interfaces.php:2829 usr/local/www/system_routes_edit.php:409 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/system_firmware_settings.php:167 +#: usr/local/www/system_advanced_admin.php:289 +#: usr/local/www/system_advanced_misc.php:317 +#: usr/local/www/system_routes_edit.php:403 +#: usr/local/www/system_advanced_firewall.php:273 +#: usr/local/www/system_advanced_network.php:197 +#: usr/local/www/diag_nanobsd.php:139 +#: usr/local/www/system_advanced_sysctl.php:163 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +msgid "NOTE:" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:130 +#: usr/local/www/system_advanced_admin.php:291 +#: usr/local/www/system_advanced_firewall.php:233 +#: usr/local/www/system_advanced_misc.php:223 +#: usr/local/www/system_advanced_network.php:199 +#: usr/local/www/system_advanced_sysctl.php:165 +#: usr/local/www/system_advanced_firewall.php:247 +#: usr/local/www/system_advanced_misc.php:249 +#: usr/local/www/diag_nanobsd.php:129 +#: usr/local/www/system_advanced_misc.php:268 +#: usr/local/www/diag_nanobsd.php:150 +#: usr/local/www/system_advanced_misc.php:272 +#: usr/local/www/system_advanced_firewall.php:276 +#: usr/local/www/system_advanced_misc.php:319 +#: usr/local/www/system_advanced_firewall.php:275 +#: usr/local/www/diag_nanobsd.php:141 +#: usr/local/www/system_advanced_admin.php:291 +#: usr/local/www/system_advanced_misc.php:319 +#: usr/local/www/system_advanced_firewall.php:275 +#: usr/local/www/system_advanced_network.php:199 +#: usr/local/www/diag_nanobsd.php:141 +#: usr/local/www/system_advanced_sysctl.php:165 +msgid "The options on this page are intended for use by advanced users only." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:136 usr/local/www/diag_nanobsd.php:135 +#: usr/local/www/diag_nanobsd.php:156 usr/local/www/diag_nanobsd.php:147 +#: usr/local/www/diag_nanobsd.php:147 +msgid "Bootup information" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:139 usr/local/www/diag_nanobsd.php:138 +#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:150 +#: usr/local/www/diag_nanobsd.php:150 +msgid "NanoBSD Image size" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:145 usr/local/www/diag_nanobsd.php:144 +#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:156 +#: usr/local/www/diag_nanobsd.php:156 +msgid "Bootup" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:148 usr/local/www/diag_nanobsd.php:147 +#: usr/local/www/diag_nanobsd.php:168 usr/local/www/diag_nanobsd.php:159 +#: usr/local/www/diag_nanobsd.php:159 +msgid "Bootup slice is currently:" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:149 usr/local/www/diag_nanobsd.php:148 +#: usr/local/www/diag_nanobsd.php:169 usr/local/www/diag_nanobsd.php:160 +#: usr/local/www/diag_nanobsd.php:160 +msgid "This will switch the bootup slice to the alternate slice." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:158 +#: usr/local/www/diag_nanobsd.php:217 usr/local/www/diag_nanobsd.php:208 +#: usr/local/www/diag_nanobsd.php:208 +msgid "Duplicate bootup slice to alternate" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:162 usr/local/www/diag_nanobsd.php:161 +#: usr/local/www/diag_nanobsd.php:220 usr/local/www/diag_nanobsd.php:211 +#: usr/local/www/diag_nanobsd.php:211 +msgid "Duplicate bootup slice" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:164 +#: usr/local/www/diag_nanobsd.php:223 usr/local/www/diag_nanobsd.php:214 +#: usr/local/www/diag_nanobsd.php:214 +msgid "Destination slice:" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:172 usr/local/www/diag_nanobsd.php:171 +#: usr/local/www/diag_nanobsd.php:230 usr/local/www/diag_nanobsd.php:221 +#: usr/local/www/diag_nanobsd.php:221 +msgid "" +"This will duplicate the bootup slice to the alternate slice. Use this if " +"you would like to duplicate the known good working boot partition to the " +"alternate." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:182 usr/local/www/diag_nanobsd.php:181 +#: usr/local/www/diag_nanobsd.php:240 usr/local/www/diag_nanobsd.php:231 +#: usr/local/www/diag_nanobsd.php:231 +msgid "Periodic Data Backup" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:185 usr/local/www/diag_nanobsd.php:184 +#: usr/local/www/diag_nanobsd.php:243 +msgid "RRD Backup" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:188 usr/local/www/diag_nanobsd.php:205 +#: usr/local/www/diag_nanobsd.php:187 usr/local/www/diag_nanobsd.php:204 +#: usr/local/www/diag_nanobsd.php:246 usr/local/www/diag_nanobsd.php:263 +#: usr/local/www/system_advanced_misc.php:602 +#: usr/local/www/system_advanced_misc.php:618 +#: usr/local/www/system_advanced_misc.php:602 +#: usr/local/www/system_advanced_misc.php:618 +msgid "Frequency:" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:190 usr/local/www/diag_nanobsd.php:207 +#: usr/local/www/system_firmware.php:133 +#: usr/local/www/services_dyndns_edit.php:152 +#: usr/local/www/vpn_ipsec_phase1.php:812 +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/system_advanced_firewall.php:410 +#: usr/local/www/firewall_nat_edit.php:796 +#: usr/local/www/vpn_ipsec_phase1.php:825 usr/local/www/diag_nanobsd.php:189 +#: usr/local/www/diag_nanobsd.php:206 usr/local/www/system_firmware.php:140 +#: usr/local/www/firewall_nat_edit.php:795 +#: usr/local/www/vpn_ipsec_phase1.php:822 usr/local/www/diag_nanobsd.php:248 +#: usr/local/www/diag_nanobsd.php:265 usr/local/www/system_firmware.php:135 +#: usr/local/www/services_dyndns_edit.php:214 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/system_advanced_firewall.php:472 +#: usr/local/www/vpn_ipsec_phase1.php:843 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/system_advanced_misc.php:604 +#: usr/local/www/system_advanced_misc.php:620 +#: usr/local/www/system_advanced_firewall.php:473 +#: usr/local/www/firewall_nat_edit.php:803 +#: usr/local/www/system_firmware.php:135 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:803 +#: usr/local/www/system_advanced_misc.php:604 +#: usr/local/www/system_advanced_misc.php:620 +#: usr/local/www/system_advanced_firewall.php:473 +#: usr/local/www/vpn_ipsec_phase1.php:843 +msgid "Disable" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:209 +#: usr/local/www/diag_nanobsd.php:191 usr/local/www/diag_nanobsd.php:208 +#: usr/local/www/diag_nanobsd.php:250 usr/local/www/diag_nanobsd.php:267 +#: usr/local/www/system_advanced_misc.php:606 +#: usr/local/www/system_advanced_misc.php:622 +#: usr/local/www/system_advanced_misc.php:606 +#: usr/local/www/system_advanced_misc.php:622 +msgid "hour" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:195 +#: usr/local/www/diag_nanobsd.php:254 +#: usr/local/www/system_advanced_misc.php:610 +#: usr/local/www/system_advanced_misc.php:610 +msgid "" +"This will periodically backup the RRD data so it can be restored " +"automatically on the next boot. Keep in mind that the more frequent the " +"backup, the more writes will happen to your media." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:202 usr/local/www/diag_nanobsd.php:201 +#: usr/local/www/diag_nanobsd.php:260 +msgid "DHCP Leases Backup" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:213 usr/local/www/diag_nanobsd.php:212 +#: usr/local/www/diag_nanobsd.php:271 +#: usr/local/www/system_advanced_misc.php:626 +#: usr/local/www/system_advanced_misc.php:626 +msgid "" +"This will periodically backup the DHCP leases data so it can be restored " +"automatically on the next boot. Keep in mind that the more frequent the " +"backup, the more writes will happen to your media." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:226 usr/local/www/diag_nanobsd.php:225 +#: usr/local/www/diag_nanobsd.php:284 usr/local/www/diag_nanobsd.php:244 +#: usr/local/www/diag_nanobsd.php:244 +msgid "View upgrade log" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:229 usr/local/www/diag_nanobsd.php:228 +#: usr/local/www/diag_nanobsd.php:287 usr/local/www/diag_nanobsd.php:247 +#: usr/local/www/diag_nanobsd.php:247 +msgid "View previous upgrade log" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:38 +#: usr/local/www/diag_packet_capture.php:225 +#: usr/local/www/diag_packet_capture.php:246 +#: usr/local/www/diag_packet_capture.php:40 +#: usr/local/www/diag_packet_capture.php:293 +#: usr/local/www/diag_packet_capture.php:311 +#: usr/local/www/diag_packet_capture.php:40 +#: usr/local/www/diag_packet_capture.php:311 +msgid "Download Capture" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:41 usr/local/www/fbegin.inc:210 +#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:237 +#: usr/local/www/diag_packet_capture.php:43 usr/local/www/fbegin.inc:229 +#: usr/local/www/diag_packet_capture.php:43 usr/local/www/fbegin.inc:229 +msgid "Packet Capture" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:71 +#: usr/local/www/diag_packet_capture.php:220 +#: usr/local/www/diag_packet_capture.php:265 +#: usr/local/www/status_dhcp_leases.php:321 +#: usr/local/www/status_dhcpv6_leases.php:363 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/status_dhcpv6_leases.php:484 +#: usr/local/www/status_dhcp_leases.php:342 +#: usr/local/www/diag_packet_capture.php:75 +#: usr/local/www/diag_packet_capture.php:240 +#: usr/local/www/diag_packet_capture.php:294 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:485 +#: usr/local/www/status_dhcp_leases.php:344 +#: usr/local/www/diag_packet_capture.php:129 +#: usr/local/www/diag_packet_capture.php:287 +#: usr/local/www/diag_packet_capture.php:341 +#: usr/local/www/status_dhcpv6_leases.php:411 +#: usr/local/www/status_dhcpv6_leases.php:488 +#: usr/local/www/diag_packet_capture.php:137 +#: usr/local/www/diag_packet_capture.php:305 +#: usr/local/www/diag_packet_capture.php:359 +#: usr/local/www/status_dhcpv6_leases.php:411 +#: usr/local/www/status_dhcpv6_leases.php:488 +#: usr/local/www/diag_packet_capture.php:137 +#: usr/local/www/diag_packet_capture.php:305 +#: usr/local/www/diag_packet_capture.php:359 +#: usr/local/www/status_dhcp_leases.php:344 +msgid "Start" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:78 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:222 +#: usr/local/www/diag_packet_capture.php:82 +#: usr/local/www/diag_packet_capture.php:239 +#: usr/local/www/diag_packet_capture.php:242 +#: usr/local/www/diag_packet_capture.php:136 +#: usr/local/www/diag_packet_capture.php:286 +#: usr/local/www/diag_packet_capture.php:289 +#: usr/local/www/diag_packet_capture.php:144 +#: usr/local/www/diag_packet_capture.php:304 +#: usr/local/www/diag_packet_capture.php:307 +#: usr/local/www/diag_packet_capture.php:144 +#: usr/local/www/diag_packet_capture.php:304 +#: usr/local/www/diag_packet_capture.php:307 +msgid "Stop" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:116 +#: usr/local/www/diag_packet_capture.php:120 +#: usr/local/www/diag_packet_capture.php:178 +#: usr/local/www/diag_packet_capture.php:186 +#: usr/local/www/diag_packet_capture.php:186 +msgid "Packet capture" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:141 +#: usr/local/www/diag_packet_capture.php:145 +#: usr/local/www/diag_packet_capture.php:192 +#: usr/local/www/diag_packet_capture.php:200 +#: usr/local/www/diag_packet_capture.php:200 +msgid "Select the interface on which to capture traffic." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:145 +#: usr/local/www/system_gateways_edit.php:376 +#: usr/local/www/diag_packet_capture.php:149 +#: usr/local/www/system_gateways_edit.php:482 +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/system_gateways_edit.php:484 +#: usr/local/www/diag_packet_capture.php:212 +#: usr/local/www/system_gateways_edit.php:514 +#: usr/local/www/system_gateways_edit.php:514 +#: usr/local/www/diag_packet_capture.php:212 +msgid "Address Family" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:152 +#: usr/local/www/diag_packet_capture.php:156 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:219 +msgid "" +"Select the type of traffic to be captured, either Any, IPv4 only or IPv6 " +"only." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:156 +#: usr/local/www/diag_packet_capture.php:176 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/diag_packet_capture.php:239 +#: usr/local/www/diag_packet_capture.php:239 +msgid "Host Address" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:159 +#: usr/local/www/diag_packet_capture.php:179 +#: usr/local/www/diag_packet_capture.php:226 +#: usr/local/www/diag_packet_capture.php:242 +#: usr/local/www/diag_packet_capture.php:242 +msgid "" +"This value is either the Source or Destination IP address or subnet in CIDR " +"notation. The packet capture will look for this address in either field." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:160 +#: usr/local/www/diag_packet_capture.php:180 +#: usr/local/www/diag_packet_capture.php:227 +#: usr/local/www/diag_packet_capture.php:243 +#: usr/local/www/diag_packet_capture.php:243 +msgid "" +"This value can be a domain name or IP address, or subnet in CIDR notation." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:161 +#: usr/local/www/diag_packet_capture.php:181 +#: usr/local/www/diag_packet_capture.php:228 +#: usr/local/www/diag_packet_capture.php:244 +#: usr/local/www/diag_packet_capture.php:244 +msgid "" +"If you leave this field blank, all packets on the specified interface will " +"be captured." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:168 +#: usr/local/www/diag_packet_capture.php:188 +#: usr/local/www/diag_packet_capture.php:235 +#: usr/local/www/diag_packet_capture.php:251 +#: usr/local/www/diag_packet_capture.php:251 +msgid "" +"The port can be either the source or destination port. The packet capture " +"will look for this port in either field." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:169 +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/diag_packet_capture.php:236 +#: usr/local/www/diag_packet_capture.php:252 +#: usr/local/www/diag_packet_capture.php:252 +msgid "Leave blank if you do not want to filter by port." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:173 +#: usr/local/www/diag_packet_capture.php:193 +#: usr/local/www/diag_packet_capture.php:240 +#: usr/local/www/diag_packet_capture.php:256 +#: usr/local/www/diag_packet_capture.php:256 +msgid "Packet Length" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:176 +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/diag_packet_capture.php:243 +#: usr/local/www/diag_packet_capture.php:259 +#: usr/local/www/diag_packet_capture.php:259 +msgid "" +"The Packet length is the number of bytes of each packet that will be " +"captured. Default value is 0, which will capture the entire frame regardless " +"of its size." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:180 usr/local/www/diag_ping.php:55 +#: usr/local/www/diag_ping.php:108 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/services_captiveportal_vouchers_edit.php:189 +#: usr/local/www/diag_packet_capture.php:200 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_captiveportal_vouchers_edit.php:187 +#: usr/local/www/diag_packet_capture.php:247 +#: usr/local/www/diag_packet_capture.php:263 usr/local/www/diag_ping.php:57 +#: usr/local/www/diag_ping.php:129 usr/local/www/diag_packet_capture.php:263 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_captiveportal_vouchers_edit.php:187 +#: usr/local/www/diag_ping.php:57 usr/local/www/diag_ping.php:129 +msgid "Count" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:183 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:250 +#: usr/local/www/diag_packet_capture.php:266 +#: usr/local/www/diag_packet_capture.php:266 +msgid "" +"This is the number of packets the packet capture will grab. Default value is " +"100." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:183 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:250 +#: usr/local/www/diag_packet_capture.php:266 +#: usr/local/www/diag_packet_capture.php:266 +msgid "Enter 0 (zero) for no count limit." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:186 +#: usr/local/www/diag_packet_capture.php:206 +#: usr/local/www/diag_packet_capture.php:253 +#: usr/local/www/diag_packet_capture.php:270 +#: usr/local/www/diag_packet_capture.php:270 +msgid "Level of Detail" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/diag_packet_capture.php:209 +#: usr/local/www/diag_packet_capture.php:256 +#: usr/local/www/diag_packet_capture.php:273 +#: usr/local/www/diag_packet_capture.php:273 +msgid "Normal" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:190 +#: usr/local/www/diag_packet_capture.php:210 +#: usr/local/www/diag_packet_capture.php:257 +#: usr/local/www/diag_packet_capture.php:274 +#: usr/local/www/diag_packet_capture.php:274 +msgid "Medium" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:191 +#: usr/local/www/diag_packet_capture.php:211 +#: usr/local/www/diag_packet_capture.php:258 +#: usr/local/www/diag_packet_capture.php:275 +#: usr/local/www/diag_packet_capture.php:275 +msgid "High" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:192 +#: usr/local/www/diag_packet_capture.php:212 +#: usr/local/www/diag_packet_capture.php:259 +#: usr/local/www/diag_packet_capture.php:276 +#: usr/local/www/diag_packet_capture.php:276 +msgid "Full" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:194 +#: usr/local/www/diag_packet_capture.php:214 +#: usr/local/www/diag_packet_capture.php:261 +#: usr/local/www/diag_packet_capture.php:278 +#: usr/local/www/diag_packet_capture.php:278 +msgid "" +"This is the level of detail that will be displayed after hitting 'Stop' when " +"the packets have been captured." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/diag_packet_capture.php:216 +#: usr/local/www/diag_packet_capture.php:263 +#: usr/local/www/diag_packet_capture.php:280 +#: usr/local/www/diag_packet_capture.php:280 +msgid "" +"This option does not affect the level of detail when downloading the packet " +"capture." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:199 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:266 +#: usr/local/www/diag_packet_capture.php:284 +#: usr/local/www/diag_packet_capture.php:284 +msgid "Reverse DNS Lookup" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:202 +#: usr/local/www/diag_packet_capture.php:222 +#: usr/local/www/diag_packet_capture.php:269 +#: usr/local/www/diag_packet_capture.php:287 +#: usr/local/www/diag_packet_capture.php:287 +msgid "" +"This check box will cause the packet capture to perform a reverse DNS lookup " +"associated with all IP addresses." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/diag_packet_capture.php:270 +#: usr/local/www/diag_packet_capture.php:288 +#: usr/local/www/diag_packet_capture.php:288 +msgid "This option can cause delays for large packet captures." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:226 +#: usr/local/www/diag_packet_capture.php:247 +#: usr/local/www/diag_packet_capture.php:294 +#: usr/local/www/diag_packet_capture.php:312 +#: usr/local/www/diag_packet_capture.php:312 +msgid "The packet capture file was last updated:" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:239 +#: usr/local/www/diag_packet_capture.php:267 +#: usr/local/www/diag_packet_capture.php:260 +#: usr/local/www/diag_packet_capture.php:296 +#: usr/local/www/diag_packet_capture.php:307 +#: usr/local/www/diag_packet_capture.php:343 +#: usr/local/www/diag_packet_capture.php:325 +#: usr/local/www/diag_packet_capture.php:361 +#: usr/local/www/diag_packet_capture.php:325 +#: usr/local/www/diag_packet_capture.php:361 +msgid "Packet Capture is running." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:272 +#: usr/local/www/diag_packet_capture.php:301 +#: usr/local/www/diag_packet_capture.php:347 +#: usr/local/www/diag_packet_capture.php:365 +#: usr/local/www/diag_packet_capture.php:365 +msgid "Packet Capture stopped." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:272 +#: usr/local/www/diag_packet_capture.php:301 +#: usr/local/www/diag_packet_capture.php:347 +#: usr/local/www/diag_packet_capture.php:365 +#: usr/local/www/diag_packet_capture.php:365 +msgid "Packets Captured:" +msgstr "" + +#: usr/local/www/crash_reporter.php:68 usr/local/www/crash_reporter.php:68 +msgid "Unfortunately we have detected a programming bug." +msgstr "" + +#: usr/local/www/crash_reporter.php:69 usr/local/www/crash_reporter.php:69 +msgid "" +"Would you like to submit the programming debug logs to the pfSense " +"developers for inspection?" +msgstr "" + +#: usr/local/www/crash_reporter.php:71 usr/local/www/crash_reporter.php:71 +msgid "" +"Please double check the contents to ensure you are comfortable sending this " +"information before clicking Yes." +msgstr "" + +#: usr/local/www/crash_reporter.php:73 usr/local/www/crash_reporter.php:73 +msgid "Contents of crash reports" +msgstr "" + +#: usr/local/www/crash_reporter.php:76 usr/local/www/crash_reporter.php:76 +msgid " - Submit this to the developers for inspection" +msgstr "" + +#: usr/local/www/crash_reporter.php:77 usr/local/www/crash_reporter.php:77 +msgid " - Just delete the crash report and take me back to the Dashboard" +msgstr "" + +#: usr/local/www/crash_reporter.php:82 usr/local/www/crash_reporter.php:82 +msgid "Crash reporter" +msgstr "" + +#: usr/local/www/crash_reporter.php:101 usr/local/www/crash_reporter.php:103 +#: usr/local/www/crash_reporter.php:103 +msgid "Processing..." +msgstr "" + +#: usr/local/www/crash_reporter.php:108 usr/local/www/crash_reporter.php:110 +#: usr/local/www/crash_reporter.php:112 usr/local/www/crash_reporter.php:112 +msgid "Uploading..." +msgstr "" + +#: usr/local/www/crash_reporter.php:116 +#: usr/local/www/services_captiveportal_zones_edit.php:115 +#: usr/local/www/crash_reporter.php:120 +#: usr/local/www/services_captiveportal_zones_edit.php:117 +#: usr/local/www/crash_reporter.php:122 +#: usr/local/www/services_captiveportal_zones_edit.php:115 +#: usr/local/www/crash_reporter.php:122 +msgid "Continue" +msgstr "" + +#: usr/local/www/crash_reporter.php:116 usr/local/www/crash_reporter.php:120 +#: usr/local/www/crash_reporter.php:122 usr/local/www/crash_reporter.php:122 +msgid " and delete crash report files from local disk." +msgstr "" + +#: usr/local/www/diag_authentication.php:52 +#: usr/local/www/diag_authentication.php:52 +msgid "is not a valid authentication server" +msgstr "" + +#: usr/local/www/diag_authentication.php:55 +#: usr/local/www/diag_authentication.php:55 +msgid "A username and password must be specified." +msgstr "" + +#: usr/local/www/diag_authentication.php:59 +#: usr/local/www/diag_authentication.php:59 +msgid "authenticated successfully." +msgstr "" + +#: usr/local/www/diag_authentication.php:61 +#: usr/local/www/diag_authentication.php:61 +msgid "This user is a member of these groups" +msgstr "" + +#: usr/local/www/diag_authentication.php:65 +#: usr/local/www/diag_authentication.php:65 +msgid "Authentication failed." +msgstr "" + +#: usr/local/www/diag_authentication.php:69 usr/local/www/interfaces.php:2325 +#: usr/local/www/services_captiveportal.php:578 +#: usr/local/www/services_captiveportal.php:893 usr/local/www/fbegin.inc:189 +#: usr/local/www/fbegin.inc:207 usr/local/www/services_captiveportal.php:583 +#: usr/local/www/services_captiveportal.php:938 +#: usr/local/www/interfaces.php:2505 usr/local/www/fbegin.inc:215 +#: usr/local/www/services_captiveportal.php:581 +#: usr/local/www/services_captiveportal.php:934 +#: usr/local/www/interfaces.php:2493 +#: usr/local/www/services_captiveportal.php:575 +#: usr/local/www/services_captiveportal.php:936 usr/local/www/fbegin.inc:206 +#: usr/local/www/interfaces.php:2523 +#: usr/local/www/services_captiveportal.php:591 +#: usr/local/www/services_captiveportal.php:952 +#: usr/local/www/interfaces.php:2569 usr/local/www/interfaces.php:2558 +#: usr/local/www/diag_authentication.php:69 +#: usr/local/www/services_captiveportal.php:591 +#: usr/local/www/services_captiveportal.php:952 usr/local/www/fbegin.inc:206 +#: usr/local/www/interfaces.php:2558 +msgid "Authentication" +msgstr "" + +#: usr/local/www/diag_authentication.php:90 +#: usr/local/www/system_authservers.php:82 +#: usr/local/www/system_usermanager_settings.php:140 +#: usr/local/www/diag_authentication.php:91 +#: usr/local/www/system_authservers.php:83 +#: usr/local/www/system_usermanager_settings.php:143 +#: usr/local/www/diag_authentication.php:91 +#: usr/local/www/system_authservers.php:83 +#: usr/local/www/system_usermanager_settings.php:143 +msgid "Authentication Server" +msgstr "" + +#: usr/local/www/diag_authentication.php:106 +#: usr/local/www/status_captiveportal.php:162 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/interfaces.php:1724 usr/local/www/interfaces.php:1789 +#: usr/local/www/interfaces.php:1895 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:510 +#: usr/local/www/vpn_pptp_users.php:98 +#: usr/local/www/vpn_pptp_users_edit.php:76 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:146 +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:213 +#: usr/local/www/system_usermanager.php:177 +#: usr/local/www/system_usermanager.php:182 +#: usr/local/www/system_usermanager.php:187 +#: usr/local/www/system_usermanager.php:475 +#: usr/local/www/system_usermanager.php:787 +#: usr/local/www/vpn_l2tp_users.php:101 +#: usr/local/www/vpn_l2tp_users_edit.php:78 +#: usr/local/www/vpn_l2tp_users_edit.php:81 +#: usr/local/www/vpn_l2tp_users_edit.php:154 +#: usr/local/www/vpn_openvpn_client.php:531 +#: usr/local/www/vpn_pppoe_edit.php:536 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:95 +#: usr/local/www/services_dyndns_edit.php:99 +#: usr/local/www/services_dyndns_edit.php:296 +#: usr/local/www/system_usermanager.php:473 +#: usr/local/www/system_usermanager.php:785 +#: usr/local/www/firewall_aliases_edit.php:473 +#: usr/local/www/interfaces.php:1902 usr/local/www/interfaces.php:1967 +#: usr/local/www/interfaces.php:2073 usr/local/www/vpn_openvpn_client.php:536 +#: usr/local/www/vpn_pppoe_edit.php:537 +#: usr/local/www/system_usermanager.php:786 +#: usr/local/www/interfaces_ppps_edit.php:511 +#: usr/local/www/firewall_aliases_edit.php:475 +#: usr/local/www/vpn_l2tp_users.php:102 +#: usr/local/www/diag_authentication.php:107 +#: usr/local/www/vpn_pptp_users_edit.php:147 usr/local/www/interfaces.php:1890 +#: usr/local/www/interfaces.php:1955 usr/local/www/interfaces.php:2061 +#: usr/local/www/vpn_openvpn_client.php:554 +#: usr/local/www/vpn_l2tp_users_edit.php:79 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:155 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97 +#: usr/local/www/vpn_pptp_users.php:99 +#: usr/local/www/vpn_openvpn_client.php:573 +#: usr/local/www/services_dyndns_edit.php:300 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:517 +#: usr/local/www/vpn_pppoe_edit.php:540 +#: usr/local/www/status_captiveportal.php:148 +#: usr/local/www/interfaces.php:1914 usr/local/www/interfaces.php:1982 +#: usr/local/www/interfaces.php:2091 +#: usr/local/www/services_dyndns_edit.php:100 +#: usr/local/www/services_dyndns_edit.php:308 +#: usr/local/www/firewall_aliases_edit.php:497 +#: usr/local/www/interfaces.php:1960 usr/local/www/interfaces.php:2028 +#: usr/local/www/interfaces.php:2137 +#: usr/local/www/interfaces_ppps_edit.php:515 +#: usr/local/www/interfaces.php:1948 usr/local/www/interfaces.php:2017 +#: usr/local/www/interfaces.php:2126 usr/local/www/diag_authentication.php:107 +#: usr/local/www/vpn_pptp_users.php:99 +#: usr/local/www/vpn_openvpn_client.php:573 +#: usr/local/www/services_dyndns_edit.php:100 +#: usr/local/www/services_dyndns_edit.php:308 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:515 +#: usr/local/www/vpn_pppoe_edit.php:540 usr/local/www/vpn_l2tp_users.php:102 +#: usr/local/www/status_captiveportal.php:148 +#: usr/local/www/firewall_aliases_edit.php:483 +#: usr/local/www/vpn_l2tp_users_edit.php:79 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:155 +#: usr/local/www/vpn_pptp_users_edit.php:76 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:147 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:95 +#: usr/local/www/system_usermanager.php:177 +#: usr/local/www/system_usermanager.php:182 +#: usr/local/www/system_usermanager.php:187 +#: usr/local/www/system_usermanager.php:473 +#: usr/local/www/system_usermanager.php:786 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces.php:2017 usr/local/www/interfaces.php:2126 +msgid "Username" +msgstr "" + +#: usr/local/www/diag_authentication.php:112 usr/local/www/interfaces.php:1730 +#: usr/local/www/interfaces.php:1795 usr/local/www/interfaces.php:1901 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:516 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:151 +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:220 +#: usr/local/www/system_advanced_notifications.php:192 +#: usr/local/www/system_usermanager.php:183 +#: usr/local/www/system_usermanager.php:188 +#: usr/local/www/system_usermanager.php:482 +#: usr/local/www/system_usermanager_passwordmg.php:50 +#: usr/local/www/system_usermanager_passwordmg.php:98 +#: usr/local/www/system_usermanager_passwordmg.php:101 +#: usr/local/www/vpn_l2tp_users_edit.php:81 +#: usr/local/www/vpn_l2tp_users_edit.php:159 +#: usr/local/www/vpn_openvpn_client.php:541 +#: usr/local/www/vpn_pppoe_edit.php:537 +#: usr/local/www/services_dyndns_edit.php:97 +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/system_usermanager.php:480 +#: usr/local/www/system_advanced_notifications.php:201 +#: usr/local/www/interfaces.php:1908 usr/local/www/interfaces.php:1973 +#: usr/local/www/interfaces.php:2079 usr/local/www/vpn_openvpn_client.php:546 +#: usr/local/www/vpn_pppoe_edit.php:538 +#: usr/local/www/interfaces_ppps_edit.php:517 +#: usr/local/www/system_usermanager_passwordmg.php:99 +#: usr/local/www/system_usermanager_passwordmg.php:102 +#: usr/local/www/diag_authentication.php:113 +#: usr/local/www/vpn_pptp_users_edit.php:152 usr/local/www/interfaces.php:1896 +#: usr/local/www/interfaces.php:1961 usr/local/www/interfaces.php:2067 +#: usr/local/www/vpn_openvpn_client.php:564 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:160 +#: usr/local/www/vpn_openvpn_client.php:583 +#: usr/local/www/services_dyndns_edit.php:309 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:523 +#: usr/local/www/vpn_pppoe_edit.php:541 +#: usr/local/www/system_usermanager_passwordmg.php:104 +#: usr/local/www/system_usermanager_passwordmg.php:107 +#: usr/local/www/interfaces.php:1920 usr/local/www/interfaces.php:1988 +#: usr/local/www/interfaces.php:2097 usr/local/www/services_dyndns_edit.php:98 +#: usr/local/www/services_dyndns_edit.php:317 +#: usr/local/www/interfaces.php:1966 usr/local/www/interfaces.php:2034 +#: usr/local/www/interfaces.php:2143 +#: usr/local/www/interfaces_ppps_edit.php:521 +#: usr/local/www/interfaces.php:1954 usr/local/www/interfaces.php:2023 +#: usr/local/www/interfaces.php:2132 usr/local/www/diag_authentication.php:113 +#: usr/local/www/vpn_openvpn_client.php:583 +#: usr/local/www/services_dyndns_edit.php:98 +#: usr/local/www/services_dyndns_edit.php:317 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:521 +#: usr/local/www/vpn_pppoe_edit.php:541 +#: usr/local/www/system_usermanager_passwordmg.php:50 +#: usr/local/www/system_usermanager_passwordmg.php:104 +#: usr/local/www/system_usermanager_passwordmg.php:107 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:160 +#: usr/local/www/system_advanced_notifications.php:201 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:152 +#: usr/local/www/system_usermanager.php:183 +#: usr/local/www/system_usermanager.php:188 +#: usr/local/www/system_usermanager.php:480 usr/local/www/interfaces.php:1954 +#: usr/local/www/interfaces.php:2023 usr/local/www/interfaces.php:2132 +msgid "Password" +msgstr "" + +#: usr/local/www/diag_authentication.php:120 usr/local/www/diag_smart.php:346 +#: usr/local/www/diag_authentication.php:121 +#: usr/local/www/diag_testport.php:179 usr/local/www/diag_smart.php:367 +#: usr/local/www/diag_testport.php:181 +#: usr/local/www/diag_authentication.php:121 +#: usr/local/www/diag_testport.php:181 usr/local/www/diag_smart.php:367 +msgid "Test" +msgstr "" + +#: usr/local/www/services_dyndns.php:76 usr/local/www/services_dyndns.php:85 +#: usr/local/www/services_dyndns.php:64 usr/local/www/services_dyndns.php:60 +#: usr/local/www/services_dyndns.php:60 +msgid "Dynamic DNS clients" +msgstr "" + +#: usr/local/www/services_dyndns.php:89 usr/local/www/services_rfc2136.php:68 +#: usr/local/www/services_dyndns.php:98 usr/local/www/services_dyndns.php:78 +#: usr/local/www/services_dyndns.php:74 usr/local/www/services_rfc2136.php:68 +#: usr/local/www/services_dyndns.php:74 +msgid "DynDns" +msgstr "" + +#: usr/local/www/services_dyndns.php:90 usr/local/www/services_rfc2136.php:69 +#: usr/local/www/services_dyndns.php:99 usr/local/www/services_dyndns.php:79 +#: usr/local/www/services_dyndns.php:75 usr/local/www/services_rfc2136.php:69 +#: usr/local/www/services_dyndns.php:75 +msgid "RFC 2136" +msgstr "" + +#: usr/local/www/services_dyndns.php:100 usr/local/www/status_services.php:244 +#: usr/local/www/services_dyndns.php:109 usr/local/www/status_services.php:240 +#: usr/local/www/status_services.php:238 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:52 +#: usr/local/www/services_dyndns.php:90 usr/local/www/status_services.php:79 +#: usr/local/www/status_openvpn.php:279 usr/local/www/status_openvpn.php:340 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:79 +#: usr/local/www/services_dyndns.php:86 usr/local/www/status_services.php:79 +#: usr/local/www/status_openvpn.php:279 usr/local/www/status_openvpn.php:340 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:79 +#: usr/local/www/services_dyndns.php:86 +msgid "Service" +msgstr "" + +#: usr/local/www/services_dyndns.php:101 usr/local/www/interfaces.php:1612 +#: usr/local/www/system.php:113 usr/local/www/system.php:254 +#: usr/local/www/services_dhcp.php:892 +#: usr/local/www/services_dhcp_edit.php:228 +#: usr/local/www/services_captiveportal_hostname.php:122 +#: usr/local/www/services_captiveportal_hostname_edit.php:176 +#: usr/local/www/services_captiveportal_hostname_edit.php:180 +#: usr/local/www/diag_arp.php:315 usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:184 +#: usr/local/www/services_rfc2136.php:79 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:146 +#: usr/local/www/status_dhcp_leases.php:320 usr/local/www/diag_ndp.php:131 +#: usr/local/www/services_dhcpv6.php:805 +#: usr/local/www/services_dhcpv6_edit.php:205 +#: usr/local/www/services_dyndns_edit.php:95 +#: usr/local/www/services_dyndns_edit.php:267 +#: usr/local/www/services_dhcpv6_edit.php:208 +#: usr/local/www/status_dhcp_leases.php:341 +#: usr/local/www/services_dyndns.php:110 usr/local/www/services_dhcp.php:930 +#: usr/local/www/services_dhcp_edit.php:231 usr/local/www/interfaces.php:1690 +#: usr/local/www/system.php:114 usr/local/www/system.php:265 +#: usr/local/www/services_dhcpv6.php:900 +#: usr/local/www/services_dhcpv6_edit.php:210 +#: usr/local/www/services_captiveportal_hostname_edit.php:174 +#: usr/local/www/services_captiveportal_hostname_edit.php:178 +#: usr/local/www/services_captiveportal_hostname.php:120 +#: usr/local/www/status_dhcp_leases.php:343 +#: usr/local/www/services_dhcp.php:1134 +#: usr/local/www/services_dhcp_edit.php:233 usr/local/www/interfaces.php:1678 +#: usr/local/www/system.php:107 usr/local/www/system.php:258 +#: usr/local/www/services_dhcpv6.php:831 usr/local/www/services_rfc2136.php:80 +#: usr/local/www/services_dhcpv6_edit.php:213 +#: usr/local/www/services_dyndns_edit.php:271 +#: usr/local/www/services_dhcp_edit.php:361 +#: usr/local/www/services_dhcp.php:1153 usr/local/www/services_dhcpv6.php:852 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:53 +#: usr/local/www/services_dyndns.php:91 +#: usr/local/www/services_dyndns_edit.php:96 +#: usr/local/www/services_dyndns_edit.php:273 +#: usr/local/www/services_dhcp.php:1173 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:80 +#: usr/local/www/services_dyndns.php:87 usr/local/www/interfaces.php:1736 +#: usr/local/www/interfaces.php:1728 usr/local/www/services_rfc2136.php:80 +#: usr/local/www/diag_ndp.php:131 usr/local/www/diag_arp.php:315 +#: usr/local/www/services_dhcpv6_edit.php:213 +#: usr/local/www/services_dyndns_edit.php:96 +#: usr/local/www/services_dyndns_edit.php:273 usr/local/www/system.php:107 +#: usr/local/www/system.php:258 +#: usr/local/www/services_captiveportal_hostname_edit.php:176 +#: usr/local/www/services_captiveportal_hostname_edit.php:180 +#: usr/local/www/services_dhcp_edit.php:361 +#: usr/local/www/services_dhcp.php:1173 +#: usr/local/www/services_captiveportal_hostname.php:120 +#: usr/local/www/services_dhcpv6.php:852 +#: usr/local/www/status_dhcp_leases.php:343 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:80 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:146 +#: usr/local/www/services_dyndns.php:87 usr/local/www/interfaces.php:1728 +msgid "Hostname" +msgstr "" + +#: usr/local/www/services_dyndns.php:102 usr/local/www/services_dyndns.php:111 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:54 +#: usr/local/www/services_dyndns.php:92 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:81 +#: usr/local/www/services_dyndns.php:88 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:81 +#: usr/local/www/services_dyndns.php:88 +msgid "Cached IP" +msgstr "" + +#: usr/local/www/services_dyndns.php:151 usr/local/www/services_wol.php:188 +#: usr/local/www/firewall_virtual_ip.php:221 +#: usr/local/www/system_advanced_sysctl.php:199 +#: usr/local/www/services_captiveportal_zones.php:89 +#: usr/local/www/services_dyndns.php:172 +#: usr/local/www/services_captiveportal_zones.php:90 +#: usr/local/www/firewall_virtual_ip.php:227 +#: usr/local/www/firewall_virtual_ip.php:247 +#: usr/local/www/services_dyndns.php:171 usr/local/www/services_dyndns.php:167 +#: usr/local/www/firewall_virtual_ip.php:270 +#: usr/local/www/services_wol.php:188 +#: usr/local/www/firewall_virtual_ip.php:270 +#: usr/local/www/services_captiveportal_zones.php:90 +#: usr/local/www/services_dyndns.php:167 +#: usr/local/www/system_advanced_sysctl.php:199 +msgid "Do you really want to delete this entry?" +msgstr "" + +#: usr/local/www/services_dyndns.php:162 usr/local/www/services_dyndns.php:183 +#: usr/local/www/services_dyndns.php:179 usr/local/www/services_dyndns.php:179 +msgid "" +"IP addresses appearing in green are up to date with Dynamic DNS provider." +msgstr "" + +#: usr/local/www/graph_cpu.php:83 usr/local/www/graph_cpu.php:83 +msgid "Cannot get CPU load" +msgstr "" + +#: usr/local/www/graph_cpu.php:84 usr/local/www/graph.php:123 +#: usr/local/www/graph.php:123 usr/local/www/graph_cpu.php:84 +msgid "Collecting initial data, please wait" +msgstr "" + +#: usr/local/www/graph_cpu.php:96 usr/local/www/graph.php:135 +#: usr/local/www/graph.php:135 usr/local/www/graph_cpu.php:96 +msgid "No URL for getURL" +msgstr "" + +#: usr/local/www/graph_cpu.php:103 usr/local/www/graph.php:142 +#: usr/local/www/graph.php:142 usr/local/www/graph_cpu.php:103 +msgid "No callback function for getURL" +msgstr "" + +#: usr/local/www/graph_cpu.php:119 usr/local/www/graph.php:158 +#: usr/local/www/graph.php:158 usr/local/www/graph_cpu.php:119 +msgid "Both getURL and XMLHttpRequest are undefined" +msgstr "" + +#: usr/local/www/services_snmp.php:87 usr/local/www/services_snmp.php:91 +#: usr/local/www/services_snmp.php:91 +msgid "Invalid character '#' in system location" +msgstr "" + +#: usr/local/www/services_snmp.php:88 usr/local/www/services_snmp.php:92 +#: usr/local/www/services_snmp.php:92 +msgid "Invalid character '#' in system contact" +msgstr "" + +#: usr/local/www/services_snmp.php:89 usr/local/www/services_snmp.php:93 +#: usr/local/www/services_snmp.php:93 +msgid "Invalid character '#' in read community string" +msgstr "" + +#: usr/local/www/services_snmp.php:92 usr/local/www/services_snmp.php:96 +#: usr/local/www/services_snmp.php:96 +msgid "Community" +msgstr "" + +#: usr/local/www/services_snmp.php:96 usr/local/www/services_snmp.php:100 +#: usr/local/www/services_snmp.php:100 +msgid "Polling Port" +msgstr "" + +#: usr/local/www/services_snmp.php:103 usr/local/www/services_snmp.php:107 +#: usr/local/www/services_snmp.php:107 +msgid "Invalid character '#' in SNMP trap string" +msgstr "" + +#: usr/local/www/services_snmp.php:106 usr/local/www/services_snmp.php:342 +#: usr/local/www/services_snmp.php:340 usr/local/www/services_snmp.php:341 +#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:351 +#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:351 +msgid "Trap server" +msgstr "" + +#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:114 +#: usr/local/www/services_snmp.php:114 +msgid "Trap server port" +msgstr "" + +#: usr/local/www/services_snmp.php:114 usr/local/www/services_snmp.php:361 +#: usr/local/www/services_snmp.php:359 usr/local/www/services_snmp.php:360 +#: usr/local/www/services_snmp.php:118 usr/local/www/services_snmp.php:370 +#: usr/local/www/services_snmp.php:118 usr/local/www/services_snmp.php:370 +msgid "Trap string" +msgstr "" + +#: usr/local/www/services_snmp.php:159 usr/local/www/fbegin.inc:134 +#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:160 +#: usr/local/www/fbegin.inc:151 usr/local/www/services_snmp.php:165 +#: usr/local/www/fbegin.inc:151 usr/local/www/services_snmp.php:165 +msgid "SNMP" +msgstr "" + +#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:273 +#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:284 +#: usr/local/www/services_snmp.php:284 +msgid "SNMP Daemon" +msgstr "" + +#: usr/local/www/services_snmp.php:281 usr/local/www/services_snmp.php:279 +#: usr/local/www/services_snmp.php:280 usr/local/www/services_snmp.php:290 +#: usr/local/www/services_snmp.php:290 +msgid "Polling Port " +msgstr "" + +#: usr/local/www/services_snmp.php:284 usr/local/www/services_snmp.php:282 +#: usr/local/www/services_snmp.php:283 usr/local/www/services_snmp.php:293 +#: usr/local/www/services_snmp.php:293 +msgid "Enter the port to accept polling events on (default 161)" +msgstr "" + +#: usr/local/www/services_snmp.php:289 usr/local/www/services_snmp.php:287 +#: usr/local/www/services_snmp.php:288 usr/local/www/services_snmp.php:298 +#: usr/local/www/services_snmp.php:298 +msgid "System location" +msgstr "" + +#: usr/local/www/services_snmp.php:296 usr/local/www/services_snmp.php:294 +#: usr/local/www/services_snmp.php:295 usr/local/www/services_snmp.php:305 +#: usr/local/www/services_snmp.php:305 +msgid "System contact" +msgstr "" + +#: usr/local/www/services_snmp.php:303 usr/local/www/services_snmp.php:301 +#: usr/local/www/services_snmp.php:302 usr/local/www/services_snmp.php:312 +#: usr/local/www/services_snmp.php:312 +msgid "Read Community String" +msgstr "" + +#: usr/local/www/services_snmp.php:306 usr/local/www/services_snmp.php:304 +#: usr/local/www/services_snmp.php:305 usr/local/www/services_snmp.php:315 +#: usr/local/www/services_snmp.php:315 +msgid "" +"The community string is like a password, restricting access to querying SNMP " +"to hosts knowing the community string. Use a strong value here to protect " +"from unauthorized information disclosure." +msgstr "" + +#: usr/local/www/services_snmp.php:335 usr/local/www/services_snmp.php:333 +#: usr/local/www/services_snmp.php:334 usr/local/www/services_snmp.php:344 +#: usr/local/www/services_snmp.php:344 +msgid "SNMP Traps" +msgstr "" + +#: usr/local/www/services_snmp.php:345 usr/local/www/services_snmp.php:343 +#: usr/local/www/services_snmp.php:344 usr/local/www/services_snmp.php:354 +#: usr/local/www/services_snmp.php:354 +msgid "Enter trap server name" +msgstr "" + +#: usr/local/www/services_snmp.php:350 usr/local/www/services_snmp.php:348 +#: usr/local/www/services_snmp.php:349 usr/local/www/services_snmp.php:359 +#: usr/local/www/services_snmp.php:359 +msgid "Trap server port " +msgstr "" + +#: usr/local/www/services_snmp.php:353 usr/local/www/services_snmp.php:351 +#: usr/local/www/services_snmp.php:352 usr/local/www/services_snmp.php:362 +#: usr/local/www/services_snmp.php:362 +msgid "Enter the port to send the traps to (default 162)" +msgstr "" + +#: usr/local/www/services_snmp.php:358 usr/local/www/services_snmp.php:356 +#: usr/local/www/services_snmp.php:357 usr/local/www/services_snmp.php:367 +#: usr/local/www/services_snmp.php:367 +msgid "Enter the SNMP trap string" +msgstr "" + +#: usr/local/www/services_snmp.php:370 usr/local/www/services_snmp.php:368 +#: usr/local/www/services_snmp.php:369 usr/local/www/services_snmp.php:379 +#: usr/local/www/services_snmp.php:379 +msgid "Modules" +msgstr "" + +#: usr/local/www/services_snmp.php:376 usr/local/www/services_snmp.php:374 +#: usr/local/www/services_snmp.php:375 usr/local/www/services_snmp.php:385 +#: usr/local/www/services_snmp.php:385 +msgid "SNMP Modules" +msgstr "" + +#: usr/local/www/services_snmp.php:378 usr/local/www/services_snmp.php:376 +#: usr/local/www/services_snmp.php:377 usr/local/www/services_snmp.php:387 +#: usr/local/www/services_snmp.php:387 +msgid "MibII" +msgstr "" + +#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:378 +#: usr/local/www/services_snmp.php:379 usr/local/www/services_snmp.php:389 +#: usr/local/www/services_snmp.php:389 +msgid "Netgraph" +msgstr "" + +#: usr/local/www/services_snmp.php:382 usr/local/www/license.php:171 +#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:381 +#: usr/local/www/services_snmp.php:391 usr/local/www/license.php:171 +#: usr/local/www/services_snmp.php:391 +msgid "PF" +msgstr "" + +#: usr/local/www/services_snmp.php:384 usr/local/www/services_snmp.php:382 +#: usr/local/www/services_snmp.php:383 usr/local/www/services_snmp.php:393 +#: usr/local/www/services_snmp.php:393 +msgid "Host Resources (Requires MibII)" +msgstr "" + +#: usr/local/www/services_snmp.php:391 +msgid "Bind to LAN interface only" +msgstr "" + +#: usr/local/www/services_snmp.php:393 +msgid "" +"This option can be useful when trying to access the SNMP agent by the LAN " +"interface's IP address through a VPN tunnel terminated on the WAN interface." +msgstr "" + +#: usr/local/www/headjs.php:143 usr/local/www/firewall_rules.php:315 +#: usr/local/www/firewall_rules.php:319 usr/local/www/guiconfig.inc:302 +#: usr/local/www/firewall_rules.php:312 usr/local/www/guiconfig.inc:291 +#: usr/local/www/guiconfig.inc:290 usr/local/www/headjs.php:146 +#: usr/local/www/firewall_rules.php:311 usr/local/www/guiconfig.inc:287 +#: usr/local/www/firewall_rules.php:311 usr/local/www/guiconfig.inc:287 +#: usr/local/www/headjs.php:146 +msgid "Apply changes" +msgstr "" + +#: usr/local/www/services_wol.php:63 usr/local/www/services_wol.php:63 +#, php-format +msgid "Sent magic packet to %1$s (%2$s)%3$s" +msgstr "" + +#: usr/local/www/services_wol.php:65 usr/local/www/services_wol.php:65 +#, php-format +msgid "" +"Please check the %1$ssystem log%2$s, the wol command for %3$s (%4$s) did not " +"complete successfully%5$s" +msgstr "" + +#: usr/local/www/services_wol.php:86 usr/local/www/services_wol_edit.php:90 +#: usr/local/www/interfaces.php:541 usr/local/www/services_dhcp_edit.php:129 +#: usr/local/www/services_dhcp_edit.php:131 usr/local/www/interfaces.php:611 +#: usr/local/www/interfaces.php:608 usr/local/www/services_dhcp_edit.php:165 +#: usr/local/www/interfaces.php:623 usr/local/www/interfaces.php:634 +#: usr/local/www/interfaces.php:630 usr/local/www/services_wol.php:86 +#: usr/local/www/services_dhcp_edit.php:165 +#: usr/local/www/services_wol_edit.php:90 usr/local/www/interfaces.php:630 +msgid "A valid MAC address must be specified." +msgstr "" + +#: usr/local/www/services_wol.php:88 usr/local/www/services_wol.php:88 +msgid "A valid interface must be specified." +msgstr "" + +#: usr/local/www/services_wol.php:94 usr/local/www/services_wol.php:94 +msgid "A valid ip could not be found!" +msgstr "" + +#: usr/local/www/services_wol.php:99 usr/local/www/services_wol.php:99 +#, php-format +msgid "Sent magic packet to %s." +msgstr "" + +#: usr/local/www/services_wol.php:101 usr/local/www/services_wol.php:101 +#, php-format +msgid "" +"Please check the %1$ssystem log%2$s, the wol command for %3$s did not " +"complete successfully%4$s" +msgstr "" + +#: usr/local/www/services_wol.php:115 usr/local/www/services_wol.php:127 +#: usr/local/www/services_wol_edit.php:112 usr/local/www/diag_backup.php:123 +#: usr/local/www/fbegin.inc:142 usr/local/www/fbegin.inc:159 +#: usr/local/www/diag_backup.php:201 usr/local/www/fbegin.inc:167 +#: usr/local/www/fbegin.inc:158 usr/local/www/services_wol.php:115 +#: usr/local/www/services_wol.php:127 usr/local/www/services_wol_edit.php:112 +#: usr/local/www/diag_backup.php:201 usr/local/www/fbegin.inc:158 +msgid "Wake on LAN" +msgstr "" + +#: usr/local/www/services_wol.php:141 usr/local/www/services_wol.php:141 +msgid "Choose which interface the host to be woken up is connected to." +msgstr "" + +#: usr/local/www/services_wol.php:144 usr/local/www/services_wol.php:162 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:140 +#: usr/local/www/status_captiveportal.php:161 +#: usr/local/www/interfaces.php:1283 +#: usr/local/www/services_captiveportal_mac.php:167 +#: usr/local/www/services_captiveportal_mac_edit.php:98 +#: usr/local/www/services_captiveportal_mac_edit.php:175 +#: usr/local/www/services_dhcp.php:890 +#: usr/local/www/services_dhcp_edit.php:106 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/status_interfaces.php:178 usr/local/www/diag_arp.php:314 +#: usr/local/www/status_dhcp_leases.php:319 usr/local/www/diag_ndp.php:130 +#: usr/local/www/status_interfaces.php:252 +#: usr/local/www/status_dhcp_leases.php:340 +#: usr/local/www/services_dhcp.php:928 +#: usr/local/www/services_dhcp_edit.php:108 +#: usr/local/www/services_dhcp_edit.php:210 usr/local/www/interfaces.php:1387 +#: usr/local/www/status_interfaces.php:255 +#: usr/local/www/services_captiveportal_mac.php:165 +#: usr/local/www/services_captiveportal_mac_edit.php:96 +#: usr/local/www/services_captiveportal_mac_edit.php:173 +#: usr/local/www/status_dhcp_leases.php:342 +#: usr/local/www/services_dhcp.php:1132 +#: usr/local/www/services_dhcp_edit.php:209 usr/local/www/interfaces.php:1375 +#: usr/local/www/services_dhcp_edit.php:142 +#: usr/local/www/services_dhcp_edit.php:337 +#: usr/local/www/services_dhcp.php:1151 +#: usr/local/www/services_captiveportal_mac_edit.php:180 +#: usr/local/www/status_captiveportal.php:147 +#: usr/local/www/services_captiveportal_mac.php:175 +#: usr/local/www/interfaces.php:1388 usr/local/www/services_dhcp.php:1171 +#: usr/local/www/interfaces.php:1430 usr/local/www/interfaces.php:1425 +#: usr/local/www/diag_ndp.php:130 usr/local/www/diag_arp.php:314 +#: usr/local/www/services_wol.php:144 usr/local/www/services_wol.php:162 +#: usr/local/www/services_dhcp_edit.php:142 +#: usr/local/www/services_dhcp_edit.php:337 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:140 +#: usr/local/www/status_interfaces.php:255 +#: usr/local/www/services_dhcp.php:1171 +#: usr/local/www/services_captiveportal_mac_edit.php:96 +#: usr/local/www/services_captiveportal_mac_edit.php:180 +#: usr/local/www/status_captiveportal.php:147 +#: usr/local/www/status_dhcp_leases.php:342 +#: usr/local/www/services_captiveportal_mac.php:175 +#: usr/local/www/interfaces.php:1425 +msgid "MAC address" +msgstr "" + +#: usr/local/www/services_wol.php:148 usr/local/www/services_wol.php:148 +msgid "Enter a MAC address " +msgstr "" + +#: usr/local/www/services_wol.php:148 usr/local/www/services_wol.php:148 +msgid "in the following format: xx:xx:xx:xx:xx:xx" +msgstr "" + +#: usr/local/www/services_wol.php:152 usr/local/www/diag_smart.php:244 +#: usr/local/www/diag_smart.php:265 usr/local/www/services_wol.php:152 +#: usr/local/www/diag_smart.php:265 +msgid "Send" +msgstr "" + +#: usr/local/www/services_wol.php:157 usr/local/www/services_wol.php:157 +msgid "Wake all clients at once: " +msgstr "" + +#: usr/local/www/services_wol.php:158 usr/local/www/services_wol.php:158 +msgid "Or Click the MAC address to wake up an individual device:" +msgstr "" + +#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212 +msgid "" +"This service can be used to wake up (power on) computers by sending special" +msgstr "" + +#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212 +msgid "Magic Packets" +msgstr "" + +#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212 +msgid "" +"The NIC in the computer that is to be woken up must support Wake on LAN and " +"has to be configured properly (WOL cable, BIOS settings). " +msgstr "" + +#: usr/local/www/services_wol_edit.php:123 +#: usr/local/www/services_wol_edit.php:123 +msgid "Edit WOL entry" +msgstr "" + +#: usr/local/www/services_wol_edit.php:137 +#: usr/local/www/services_wol_edit.php:137 +msgid "Choose which interface this host is connected to." +msgstr "" + +#: usr/local/www/services_wol_edit.php:144 +#: usr/local/www/services_wol_edit.php:144 +msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx" +msgstr "" + +#: usr/local/www/status_captiveportal.php:58 +#: usr/local/www/status_captiveportal.php:58 +msgid "Status: Captive portal" +msgstr "" + +#: usr/local/www/status_captiveportal.php:121 +#: usr/local/www/status_captiveportal_test.php:70 +#: usr/local/www/status_captiveportal_voucher_rolls.php:73 +#: usr/local/www/status_captiveportal_vouchers.php:103 +#: usr/local/www/status_captiveportal_vouchers.php:104 +#: usr/local/www/status_captiveportal_test.php:71 +#: usr/local/www/status_captiveportal_voucher_rolls.php:74 +#: usr/local/www/status_captiveportal_expire.php:69 +#: usr/local/www/status_captiveportal_vouchers.php:108 +#: usr/local/www/status_captiveportal.php:106 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +#: usr/local/www/status_captiveportal_expire.php:69 +#: usr/local/www/status_captiveportal_vouchers.php:108 +#: usr/local/www/status_captiveportal.php:106 +#: usr/local/www/status_captiveportal_test.php:71 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +msgid "Active Users" +msgstr "" + +#: usr/local/www/status_captiveportal.php:122 +#: usr/local/www/status_captiveportal_test.php:71 +#: usr/local/www/status_captiveportal_voucher_rolls.php:74 +#: usr/local/www/status_captiveportal_vouchers.php:104 +#: usr/local/www/status_captiveportal_vouchers.php:105 +#: usr/local/www/status_captiveportal_test.php:72 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +#: usr/local/www/status_captiveportal_expire.php:70 +#: usr/local/www/status_captiveportal_vouchers.php:109 +#: usr/local/www/status_captiveportal.php:107 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +#: usr/local/www/status_captiveportal_expire.php:70 +#: usr/local/www/status_captiveportal_vouchers.php:109 +#: usr/local/www/status_captiveportal.php:107 +#: usr/local/www/status_captiveportal_test.php:72 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +msgid "Active Vouchers" +msgstr "" + +#: usr/local/www/status_captiveportal.php:123 +#: usr/local/www/services_captiveportal_vouchers.php:426 +#: usr/local/www/status_captiveportal_test.php:72 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +#: usr/local/www/status_captiveportal_vouchers.php:105 +#: usr/local/www/services_captiveportal_vouchers.php:433 +#: usr/local/www/status_captiveportal_vouchers.php:106 +#: usr/local/www/services_captiveportal_vouchers.php:446 +#: usr/local/www/status_captiveportal_test.php:73 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +#: usr/local/www/status_captiveportal_expire.php:71 +#: usr/local/www/services_captiveportal_vouchers.php:455 +#: usr/local/www/status_captiveportal_vouchers.php:110 +#: usr/local/www/status_captiveportal.php:108 +#: usr/local/www/status_captiveportal_voucher_rolls.php:77 +#: usr/local/www/status_captiveportal_expire.php:71 +#: usr/local/www/services_captiveportal_vouchers.php:460 +#: usr/local/www/status_captiveportal_vouchers.php:110 +#: usr/local/www/status_captiveportal.php:108 +#: usr/local/www/status_captiveportal_test.php:73 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_voucher_rolls.php:77 +msgid "Voucher Rolls" +msgstr "" + +#: usr/local/www/status_captiveportal.php:124 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_test.php:73 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +#: usr/local/www/status_captiveportal_vouchers.php:106 +#: usr/local/www/status_captiveportal_vouchers.php:107 +#: usr/local/www/status_captiveportal_test.php:74 +#: usr/local/www/status_captiveportal_voucher_rolls.php:77 +#: usr/local/www/status_captiveportal_expire.php:72 +#: usr/local/www/status_captiveportal_vouchers.php:111 +#: usr/local/www/status_captiveportal.php:109 +#: usr/local/www/status_captiveportal_voucher_rolls.php:78 +#: usr/local/www/status_captiveportal_expire.php:72 +#: usr/local/www/status_captiveportal_vouchers.php:111 +#: usr/local/www/status_captiveportal.php:109 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_test.php:74 +#: usr/local/www/status_captiveportal_voucher_rolls.php:78 +msgid "Test Vouchers" +msgstr "" + +#: usr/local/www/status_captiveportal.php:135 +#: usr/local/www/status_captiveportal.php:121 +#: usr/local/www/status_captiveportal.php:121 +msgid "Captive Portal Zone" +msgstr "" + +#: usr/local/www/status_captiveportal.php:157 +#: usr/local/www/status_captiveportal.php:143 +#: usr/local/www/status_captiveportal.php:143 +msgid "Captiveportal status" +msgstr "" + +#: usr/local/www/status_captiveportal.php:164 +#: usr/local/www/status_captiveportal.php:167 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:99 +#: usr/local/www/status_captiveportal.php:150 +#: usr/local/www/status_captiveportal.php:153 +#: usr/local/www/status_captiveportal.php:150 +#: usr/local/www/status_captiveportal.php:153 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97 +msgid "Session start" +msgstr "" + +#: usr/local/www/status_captiveportal.php:165 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:98 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:100 +#: usr/local/www/status_captiveportal.php:151 +#: usr/local/www/status_captiveportal.php:151 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:98 +msgid "Last activity" +msgstr "" + +#: usr/local/www/status_captiveportal.php:181 +#: usr/local/www/status_captiveportal.php:168 +#: usr/local/www/status_captiveportal.php:168 +msgid "Do you really want to disconnect this client?" +msgstr "" + +#: usr/local/www/status_captiveportal.php:181 +#: usr/local/www/status_interfaces.php:114 +#: usr/local/www/status_interfaces.php:129 +#: usr/local/www/status_interfaces.php:144 +#: usr/local/www/status_interfaces.php:159 +#: usr/local/www/status_interfaces.php:132 +#: usr/local/www/status_interfaces.php:147 +#: usr/local/www/status_interfaces.php:162 +#: usr/local/www/status_interfaces.php:177 +#: usr/local/www/status_interfaces.php:135 +#: usr/local/www/status_interfaces.php:150 +#: usr/local/www/status_interfaces.php:165 +#: usr/local/www/status_interfaces.php:180 +#: usr/local/www/status_captiveportal.php:168 +#: usr/local/www/status_interfaces.php:135 +#: usr/local/www/status_interfaces.php:150 +#: usr/local/www/status_interfaces.php:165 +#: usr/local/www/status_interfaces.php:180 +#: usr/local/www/status_captiveportal.php:168 +msgid "Disconnect" +msgstr "" + +#: usr/local/www/status_captiveportal.php:198 +#: usr/local/www/status_captiveportal.php:185 +#: usr/local/www/status_captiveportal.php:185 +msgid "Don't show last activity" +msgstr "" + +#: usr/local/www/status_captiveportal.php:201 +#: usr/local/www/status_captiveportal.php:188 +#: usr/local/www/status_captiveportal.php:188 +msgid "Show last activity" +msgstr "" + +#: usr/local/www/installer/installer.php:186 +#: usr/local/www/installer/installer.php:186 +msgid "Could not open /tmp/installer.sh for writing" +msgstr "" + +#: usr/local/www/installer/installer.php:360 +#: usr/local/www/installer/installer.php:361 +#: usr/local/www/installer/installer.php:361 +#, php-format +msgid "Beginning installation on disk %s." +msgstr "" + +#: usr/local/www/installer/installer.php:409 +#: usr/local/www/installer/installer.php:410 +#: usr/local/www/installer/installer.php:410 +msgid "Installer" +msgstr "" + +#: usr/local/www/installer/installer.php:916 +#: usr/local/www/installer/installer.php:1104 +#: usr/local/www/installer/installer.php:917 +#: usr/local/www/installer/installer.php:1105 +#: usr/local/www/installer/installer.php:917 +#: usr/local/www/installer/installer.php:1105 +msgid "ERROR: Could not find any suitable disks for installation." +msgstr "" + +#: usr/local/www/interfaces_bridge.php:64 +#: usr/local/www/interfaces_bridge.php:68 +#: usr/local/www/interfaces_bridge.php:68 +msgid "This bridge cannot be deleted because it is assigned as an interface." +msgstr "" + +#: usr/local/www/interfaces_bridge.php:77 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_gif.php:76 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre.php:77 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/diag_backup.php:109 usr/local/www/interfaces.php:1027 +#: usr/local/www/interfaces_assign.php:43 usr/local/www/interfaces_vlan.php:78 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/diag_logs_filter_summary.php:46 +#: usr/local/www/interfaces_lagg.php:82 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq.php:86 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_wireless.php:76 +#: usr/local/www/interfaces_wireless_edit.php:145 +#: usr/local/www/services_captiveportal.php:439 +#: usr/local/www/status_interfaces.php:58 usr/local/www/fbegin.inc:163 +#: usr/local/www/fbegin.inc:327 +#: usr/local/www/services_captiveportal_zones.php:53 +#: usr/local/www/fbegin.inc:180 usr/local/www/fbegin.inc:345 +#: usr/local/www/diag_backup.php:186 +#: usr/local/www/services_captiveportal.php:443 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/interfaces.php:1113 usr/local/www/fbegin.inc:188 +#: usr/local/www/fbegin.inc:291 usr/local/www/status_interfaces.php:60 +#: usr/local/www/services_captiveportal.php:441 +#: usr/local/www/diag_logs_filter_summary.php:47 +#: usr/local/www/interfaces.php:1101 +#: usr/local/www/services_captiveportal_zones.php:54 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_qinq.php:89 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_vlan.php:84 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/interfaces_bridge_edit.php:236 usr/local/www/fbegin.inc:179 +#: usr/local/www/fbegin.inc:283 usr/local/www/interfaces_gre.php:81 +#: usr/local/www/interfaces_gif.php:80 usr/local/www/interfaces.php:1115 +#: usr/local/www/services_captiveportal.php:459 +#: usr/local/www/interfaces.php:1157 usr/local/www/services_dnsmasq.php:262 +#: usr/local/www/interfaces.php:1152 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_qinq.php:89 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_vlan.php:84 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/status_interfaces.php:60 +#: usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/services_captiveportal_zones.php:54 +#: usr/local/www/services_captiveportal.php:459 +#: usr/local/www/diag_backup.php:186 +#: usr/local/www/interfaces_bridge_edit.php:236 usr/local/www/fbegin.inc:179 +#: usr/local/www/fbegin.inc:283 usr/local/www/services_dnsmasq.php:262 +#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gif.php:80 +#: usr/local/www/interfaces_assign.php:43 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/diag_logs_filter_summary.php:47 +#: usr/local/www/interfaces.php:1152 +msgid "Interfaces" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:77 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_bridge_edit.php:236 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_bridge_edit.php:236 +msgid "Bridge" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:89 usr/local/www/interfaces_gif.php:88 +#: usr/local/www/interfaces_gre.php:89 usr/local/www/interfaces_groups.php:75 +#: usr/local/www/interfaces_assign.php:402 +#: usr/local/www/interfaces_vlan.php:90 usr/local/www/interfaces_lagg.php:94 +#: usr/local/www/interfaces_ppps.php:90 usr/local/www/interfaces_qinq.php:98 +#: usr/local/www/interfaces_wireless.php:88 +#: usr/local/www/interfaces_groups.php:76 usr/local/www/interfaces_qinq.php:99 +#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_bridge.php:90 +#: usr/local/www/interfaces_lagg.php:95 usr/local/www/interfaces_gre.php:90 +#: usr/local/www/interfaces_wireless.php:89 +#: usr/local/www/interfaces_assign.php:396 +#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_gif.php:89 +#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_bridge.php:96 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_bridge.php:96 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/interfaces_groups.php:76 usr/local/www/interfaces_ppps.php:91 +#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_assign.php:402 +msgid "Interface assignments" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:90 usr/local/www/interfaces_gif.php:89 +#: usr/local/www/interfaces_gre.php:90 usr/local/www/interfaces_groups.php:76 +#: usr/local/www/interfaces_assign.php:403 +#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_lagg.php:95 +#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_qinq.php:99 +#: usr/local/www/interfaces_wireless.php:89 +#: usr/local/www/interfaces_groups.php:77 +#: usr/local/www/interfaces_qinq.php:100 usr/local/www/interfaces_ppps.php:92 +#: usr/local/www/interfaces_bridge.php:91 usr/local/www/interfaces_lagg.php:96 +#: usr/local/www/interfaces_gre.php:91 +#: usr/local/www/interfaces_wireless.php:90 +#: usr/local/www/interfaces_assign.php:397 +#: usr/local/www/interfaces_vlan.php:92 usr/local/www/interfaces_gif.php:90 +#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_lagg.php:100 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_bridge.php:97 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_gre.php:95 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_lagg.php:100 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_bridge.php:97 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_groups.php:77 usr/local/www/interfaces_ppps.php:92 +#: usr/local/www/interfaces_gre.php:95 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_assign.php:403 +msgid "Interface Groups" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:92 usr/local/www/interfaces_gif.php:91 +#: usr/local/www/interfaces_gre.php:92 usr/local/www/interfaces_groups.php:78 +#: usr/local/www/interfaces_assign.php:405 +#: usr/local/www/interfaces_vlan.php:93 usr/local/www/interfaces_lagg.php:97 +#: usr/local/www/interfaces_ppps.php:93 usr/local/www/interfaces_qinq.php:101 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/interfaces_groups.php:79 +#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_ppps.php:94 +#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_lagg.php:98 +#: usr/local/www/interfaces_gre.php:93 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_assign.php:399 +#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_gif.php:92 +#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_lagg.php:102 +#: usr/local/www/interfaces_vlan.php:100 +#: usr/local/www/interfaces_bridge.php:99 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_lagg.php:102 +#: usr/local/www/interfaces_vlan.php:100 +#: usr/local/www/interfaces_bridge.php:99 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_groups.php:79 usr/local/www/interfaces_ppps.php:94 +#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_assign.php:405 +msgid "VLANs" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_gif.php:92 +#: usr/local/www/interfaces_gre.php:93 usr/local/www/interfaces_groups.php:79 +#: usr/local/www/interfaces_assign.php:406 +#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_lagg.php:98 +#: usr/local/www/interfaces_ppps.php:94 usr/local/www/interfaces_qinq.php:102 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_groups.php:80 +#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_ppps.php:95 +#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_gre.php:94 +#: usr/local/www/interfaces_wireless.php:93 +#: usr/local/www/interfaces_assign.php:400 +#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_lagg.php:103 +#: usr/local/www/interfaces_vlan.php:101 +#: usr/local/www/interfaces_bridge.php:100 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_lagg.php:103 +#: usr/local/www/interfaces_vlan.php:101 +#: usr/local/www/interfaces_bridge.php:100 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_groups.php:80 usr/local/www/interfaces_ppps.php:95 +#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_assign.php:406 +msgid "QinQs" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_groups.php:80 +#: usr/local/www/interfaces_assign.php:407 +#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_ppps.php:95 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq.php:103 +#: usr/local/www/interfaces_wireless.php:93 +#: usr/local/www/interfaces_groups.php:81 +#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_ppps.php:96 +#: usr/local/www/interfaces_bridge.php:95 +#: usr/local/www/interfaces_lagg.php:100 usr/local/www/interfaces_gre.php:95 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_assign.php:401 +#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_qinq.php:107 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_vlan.php:102 +#: usr/local/www/interfaces_bridge.php:101 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_gre.php:99 usr/local/www/interfaces_gif.php:98 +#: usr/local/www/interfaces_qinq.php:107 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_vlan.php:102 +#: usr/local/www/interfaces_bridge.php:101 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_groups.php:81 usr/local/www/interfaces_ppps.php:96 +#: usr/local/www/interfaces_gre.php:99 usr/local/www/interfaces_gif.php:98 +#: usr/local/www/interfaces_assign.php:407 +msgid "PPPs" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:95 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_gre.php:77 usr/local/www/interfaces_gre.php:95 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups.php:81 +#: usr/local/www/interfaces_assign.php:408 +#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_lagg.php:100 +#: usr/local/www/interfaces_ppps.php:96 usr/local/www/interfaces_qinq.php:104 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_groups.php:82 +#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_ppps.php:97 +#: usr/local/www/interfaces_bridge.php:96 +#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_gre.php:96 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_assign.php:402 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_gif.php:95 +#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_lagg.php:105 +#: usr/local/www/interfaces_vlan.php:103 +#: usr/local/www/interfaces_bridge.php:102 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gre.php:100 +#: usr/local/www/interfaces_gif.php:99 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_lagg.php:105 +#: usr/local/www/interfaces_vlan.php:103 +#: usr/local/www/interfaces_bridge.php:102 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_groups.php:82 usr/local/www/interfaces_ppps.php:97 +#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gre.php:100 +#: usr/local/www/interfaces_gif.php:99 usr/local/www/interfaces_assign.php:408 +msgid "GRE" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:96 usr/local/www/interfaces_gif.php:76 +#: usr/local/www/interfaces_gif.php:95 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_groups.php:82 +#: usr/local/www/interfaces_assign.php:409 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_lagg.php:101 +#: usr/local/www/interfaces_ppps.php:97 usr/local/www/interfaces_qinq.php:105 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_groups.php:83 +#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_ppps.php:98 +#: usr/local/www/interfaces_bridge.php:97 +#: usr/local/www/interfaces_lagg.php:102 usr/local/www/interfaces_gre.php:97 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_assign.php:403 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_qinq.php:109 usr/local/www/interfaces_lagg.php:106 +#: usr/local/www/interfaces_vlan.php:104 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:103 +#: usr/local/www/interfaces_wireless.php:98 +#: usr/local/www/interfaces_gre.php:101 usr/local/www/interfaces_gif.php:80 +#: usr/local/www/interfaces_gif.php:100 usr/local/www/interfaces_qinq.php:109 +#: usr/local/www/interfaces_lagg.php:106 usr/local/www/interfaces_vlan.php:104 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:103 +#: usr/local/www/interfaces_wireless.php:98 +#: usr/local/www/interfaces_groups.php:83 usr/local/www/interfaces_ppps.php:98 +#: usr/local/www/interfaces_gre.php:101 usr/local/www/interfaces_gif.php:80 +#: usr/local/www/interfaces_gif.php:100 +#: usr/local/www/interfaces_assign.php:409 +msgid "GIF" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:97 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_groups.php:83 +#: usr/local/www/interfaces_assign.php:410 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_lagg.php:102 +#: usr/local/www/interfaces_ppps.php:98 usr/local/www/interfaces_qinq.php:106 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_groups.php:84 +#: usr/local/www/interfaces_qinq.php:107 usr/local/www/interfaces_ppps.php:99 +#: usr/local/www/interfaces_bridge.php:98 +#: usr/local/www/interfaces_lagg.php:103 usr/local/www/interfaces_gre.php:98 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_assign.php:404 +#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_qinq.php:110 usr/local/www/interfaces_lagg.php:107 +#: usr/local/www/interfaces_vlan.php:105 +#: usr/local/www/interfaces_bridge.php:104 +#: usr/local/www/interfaces_wireless.php:99 +#: usr/local/www/interfaces_gre.php:102 usr/local/www/interfaces_gif.php:101 +#: usr/local/www/interfaces_qinq.php:110 usr/local/www/interfaces_lagg.php:107 +#: usr/local/www/interfaces_vlan.php:105 +#: usr/local/www/interfaces_bridge.php:104 +#: usr/local/www/interfaces_wireless.php:99 +#: usr/local/www/interfaces_groups.php:84 usr/local/www/interfaces_ppps.php:99 +#: usr/local/www/interfaces_gre.php:102 usr/local/www/interfaces_gif.php:101 +#: usr/local/www/interfaces_assign.php:410 +msgid "Bridges" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:98 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_groups.php:84 +#: usr/local/www/interfaces_assign.php:411 +#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_lagg.php:82 +#: usr/local/www/interfaces_lagg.php:103 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps.php:99 usr/local/www/interfaces_qinq.php:107 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_groups.php:85 +#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_ppps.php:100 +#: usr/local/www/interfaces_bridge.php:99 +#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_gre.php:99 +#: usr/local/www/interfaces_wireless.php:98 +#: usr/local/www/interfaces_assign.php:405 +#: usr/local/www/interfaces_vlan.php:100 usr/local/www/interfaces_gif.php:98 +#: usr/local/www/interfaces_qinq.php:111 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_lagg.php:108 +#: usr/local/www/interfaces_vlan.php:106 +#: usr/local/www/interfaces_bridge.php:105 +#: usr/local/www/interfaces_wireless.php:100 +#: usr/local/www/interfaces_gre.php:103 usr/local/www/interfaces_gif.php:102 +#: usr/local/www/interfaces_qinq.php:111 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_lagg.php:108 +#: usr/local/www/interfaces_vlan.php:106 +#: usr/local/www/interfaces_bridge.php:105 +#: usr/local/www/interfaces_wireless.php:100 +#: usr/local/www/interfaces_groups.php:85 +#: usr/local/www/interfaces_ppps.php:100 usr/local/www/interfaces_gre.php:103 +#: usr/local/www/interfaces_gif.php:102 +#: usr/local/www/interfaces_assign.php:411 +msgid "LAGG" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:108 +#: usr/local/www/interfaces_groups.php:95 +#: usr/local/www/interfaces_lagg.php:113 +#: usr/local/www/load_balancer_pool_edit.php:257 +#: usr/local/www/system_groupmanager.php:317 +#: usr/local/www/load_balancer_pool_edit.php:274 +#: usr/local/www/interfaces_groups.php:96 +#: usr/local/www/interfaces_bridge.php:109 +#: usr/local/www/interfaces_lagg.php:114 +#: usr/local/www/load_balancer_pool_edit.php:272 +#: usr/local/www/interfaces_lagg.php:118 +#: usr/local/www/interfaces_bridge.php:115 +#: usr/local/www/system_groupmanager.php:317 +#: usr/local/www/interfaces_lagg.php:118 +#: usr/local/www/interfaces_bridge.php:115 +#: usr/local/www/interfaces_groups.php:96 +#: usr/local/www/load_balancer_pool_edit.php:272 +msgid "Members" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:135 +#: usr/local/www/interfaces_bridge.php:136 +#: usr/local/www/interfaces_bridge.php:142 +#: usr/local/www/interfaces_bridge.php:142 +msgid "Do you really want to delete this bridge?" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:146 +#: usr/local/www/interfaces_bridge.php:147 +#: usr/local/www/interfaces_bridge.php:153 +#: usr/local/www/interfaces_bridge.php:153 +msgid "Here you can configure bridging of interfaces." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:111 +#: usr/local/www/interfaces_bridge_edit.php:119 +#: usr/local/www/interfaces_bridge_edit.php:119 +msgid "Member Interfaces" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:116 +#: usr/local/www/interfaces_bridge_edit.php:124 +#: usr/local/www/interfaces_bridge_edit.php:124 +msgid "Maxage needs to be an integer between 6 and 40." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:118 +#: usr/local/www/interfaces_bridge_edit.php:126 +#: usr/local/www/interfaces_bridge_edit.php:126 +msgid "Maxaddr needs to be an integer." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:120 +#: usr/local/www/interfaces_bridge_edit.php:128 +#: usr/local/www/interfaces_bridge_edit.php:128 +msgid "Timeout needs to be an integer." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:122 +#: usr/local/www/interfaces_bridge_edit.php:130 +#: usr/local/www/interfaces_bridge_edit.php:130 +msgid "Forward Delay needs to be an integer between 4 and 30." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:124 +#: usr/local/www/interfaces_bridge_edit.php:132 +#: usr/local/www/interfaces_bridge_edit.php:132 +msgid "Hello time for STP needs to be an integer between 1 and 2." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:126 +#: usr/local/www/interfaces_bridge_edit.php:134 +#: usr/local/www/interfaces_bridge_edit.php:134 +msgid "Priority for STP needs to be an integer between 0 and 61440." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:128 +#: usr/local/www/interfaces_bridge_edit.php:136 +#: usr/local/www/interfaces_bridge_edit.php:136 +msgid "Transmit Hold Count for STP needs to be an integer between 1 and 10." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:131 +#: usr/local/www/interfaces_bridge_edit.php:139 +#: usr/local/www/interfaces_bridge_edit.php:139 +msgid "interface priority for STP needs to be an integer between 0 and 240." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:136 +#: usr/local/www/interfaces_bridge_edit.php:144 +#: usr/local/www/interfaces_bridge_edit.php:144 +msgid "" +"interface path cost for STP needs to be an integer between 1 and 200000000." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:141 +#: usr/local/www/interfaces_bridge_edit.php:149 +#: usr/local/www/interfaces_bridge_edit.php:149 +msgid "You must select at least 2 member interfaces for a bridge." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:147 +#: usr/local/www/interfaces_bridge_edit.php:155 +#: usr/local/www/interfaces_bridge_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:157 +msgid "Bridging a wireless interface is only possible in hostap mode." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:149 +#: usr/local/www/interfaces_bridge_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:159 +#: usr/local/www/interfaces_bridge_edit.php:159 +msgid "" +"Span interface cannot be part of the bridge. Remove the span interface from " +"bridge members to continue." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:206 +#: usr/local/www/interfaces_gif_edit.php:106 +#: usr/local/www/interfaces_gre_edit.php:108 +#: usr/local/www/interfaces_vlan_edit.php:121 +#: usr/local/www/interfaces_lagg_edit.php:101 +#: usr/local/www/interfaces_bridge_edit.php:215 +#: usr/local/www/interfaces_vlan_edit.php:124 +#: usr/local/www/interfaces_lagg_edit.php:114 +#: usr/local/www/interfaces_gif_edit.php:114 +#: usr/local/www/interfaces_bridge_edit.php:217 +#: usr/local/www/interfaces_gre_edit.php:108 +#: usr/local/www/interfaces_vlan_edit.php:124 +#: usr/local/www/interfaces_lagg_edit.php:114 +#: usr/local/www/interfaces_gif_edit.php:114 +#: usr/local/www/interfaces_bridge_edit.php:217 +msgid "Error occurred creating interface, please retry." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:253 +#: usr/local/www/interfaces_bridge_edit.php:262 +#: usr/local/www/interfaces_bridge_edit.php:263 +#: usr/local/www/interfaces_bridge_edit.php:264 +#: usr/local/www/interfaces_bridge_edit.php:266 +#: usr/local/www/interfaces_bridge_edit.php:266 +msgid "Bridge configuration" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:256 +#: usr/local/www/interfaces_lagg_edit.php:86 +#: usr/local/www/interfaces_bridge_edit.php:265 +#: usr/local/www/interfaces_bridge_edit.php:266 +#: usr/local/www/interfaces_lagg_edit.php:88 +#: usr/local/www/interfaces_bridge_edit.php:267 +#: usr/local/www/interfaces_bridge_edit.php:269 +#: usr/local/www/interfaces_lagg_edit.php:88 +#: usr/local/www/interfaces_bridge_edit.php:269 +msgid "Member interfaces" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:269 +#: usr/local/www/interfaces_bridge_edit.php:278 +#: usr/local/www/interfaces_bridge_edit.php:279 +#: usr/local/www/interfaces_bridge_edit.php:280 +#: usr/local/www/interfaces_bridge_edit.php:282 +#: usr/local/www/interfaces_bridge_edit.php:282 +msgid "Interfaces participating in the bridge." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:285 +#: usr/local/www/interfaces_bridge_edit.php:294 +#: usr/local/www/interfaces_bridge_edit.php:295 +#: usr/local/www/interfaces_bridge_edit.php:296 +#: usr/local/www/interfaces_bridge_edit.php:298 +#: usr/local/www/interfaces_bridge_edit.php:298 +msgid "RSTP/STP" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:288 +#: usr/local/www/interfaces_bridge_edit.php:297 +#: usr/local/www/interfaces_bridge_edit.php:298 +#: usr/local/www/interfaces_bridge_edit.php:299 +#: usr/local/www/interfaces_bridge_edit.php:301 +#: usr/local/www/interfaces_bridge_edit.php:301 +msgid "Enable spanning tree options for this bridge." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:304 +#: usr/local/www/interfaces_bridge_edit.php:313 +#: usr/local/www/interfaces_bridge_edit.php:314 +#: usr/local/www/interfaces_bridge_edit.php:315 +#: usr/local/www/interfaces_bridge_edit.php:317 +#: usr/local/www/interfaces_bridge_edit.php:317 +msgid "Protocol used for spanning tree." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:306 +#: usr/local/www/interfaces_bridge_edit.php:315 +#: usr/local/www/interfaces_bridge_edit.php:316 +#: usr/local/www/interfaces_bridge_edit.php:317 +#: usr/local/www/interfaces_bridge_edit.php:319 +#: usr/local/www/interfaces_bridge_edit.php:319 +msgid "STP interfaces" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:320 +#: usr/local/www/interfaces_bridge_edit.php:329 +#: usr/local/www/interfaces_bridge_edit.php:330 +#: usr/local/www/interfaces_bridge_edit.php:331 +#: usr/local/www/interfaces_bridge_edit.php:333 +#: usr/local/www/interfaces_bridge_edit.php:333 +msgid "" +"Enable Spanning Tree Protocol on interface. The if_bridge(4) driver has " +"support for the IEEE 802.1D Spanning Tree Protocol (STP). STP is used to " +"detect and remove loops in a network topology." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:326 +#: usr/local/www/interfaces_bridge_edit.php:335 +#: usr/local/www/interfaces_bridge_edit.php:336 +#: usr/local/www/interfaces_bridge_edit.php:337 +#: usr/local/www/interfaces_bridge_edit.php:339 +#: usr/local/www/interfaces_bridge_edit.php:339 +msgid "Valid time" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:328 +#: usr/local/www/interfaces_bridge_edit.php:338 +#: usr/local/www/interfaces_bridge_edit.php:347 +#: usr/local/www/interfaces_bridge_edit.php:416 +#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936 +#: usr/local/www/graph.php:120 usr/local/www/services_dhcp.php:679 +#: usr/local/www/services_dhcp.php:689 +#: usr/local/www/services_rfc2136_edit.php:156 +#: usr/local/www/vpn_ipsec_phase1.php:761 +#: usr/local/www/vpn_ipsec_phase1.php:831 +#: usr/local/www/vpn_ipsec_phase2.php:622 +#: usr/local/www/services_dhcpv6.php:624 usr/local/www/services_dhcpv6.php:634 +#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcp.php:702 +#: usr/local/www/interfaces_bridge_edit.php:337 +#: usr/local/www/interfaces_bridge_edit.php:356 +#: usr/local/www/interfaces_bridge_edit.php:425 +#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/interfaces.php:1995 +#: usr/local/www/interfaces.php:2114 usr/local/www/vpn_ipsec_phase1.php:774 +#: usr/local/www/vpn_ipsec_phase1.php:844 +#: usr/local/www/services_dhcpv6.php:692 usr/local/www/services_dhcpv6.php:702 +#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcp.php:878 +#: usr/local/www/interfaces_bridge_edit.php:348 +#: usr/local/www/interfaces_bridge_edit.php:357 +#: usr/local/www/interfaces_bridge_edit.php:426 +#: usr/local/www/vpn_ipsec_phase2.php:744 usr/local/www/interfaces.php:1983 +#: usr/local/www/interfaces.php:2102 usr/local/www/vpn_ipsec_phase1.php:771 +#: usr/local/www/vpn_ipsec_phase1.php:841 +#: usr/local/www/services_dhcpv6.php:623 usr/local/www/services_dhcpv6.php:633 +#: usr/local/www/services_dhcp_edit.php:434 +#: usr/local/www/services_dhcp_edit.php:444 +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcp.php:892 +#: usr/local/www/services_dhcpv6.php:640 usr/local/www/services_dhcpv6.php:650 +#: usr/local/www/interfaces_bridge_edit.php:339 +#: usr/local/www/interfaces_bridge_edit.php:349 +#: usr/local/www/interfaces_bridge_edit.php:358 +#: usr/local/www/interfaces_bridge_edit.php:427 +#: usr/local/www/vpn_ipsec_phase1.php:792 +#: usr/local/www/vpn_ipsec_phase1.php:862 +#: usr/local/www/vpn_ipsec_phase2.php:765 usr/local/www/interfaces.php:2010 +#: usr/local/www/interfaces.php:2132 usr/local/www/services_dhcp.php:902 +#: usr/local/www/services_dhcp.php:912 usr/local/www/interfaces.php:2056 +#: usr/local/www/interfaces.php:2178 +#: usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:351 +#: usr/local/www/interfaces_bridge_edit.php:360 +#: usr/local/www/interfaces_bridge_edit.php:431 +#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167 +#: usr/local/www/services_dhcp_edit.php:434 +#: usr/local/www/services_dhcp_edit.php:444 +#: usr/local/www/services_dhcp.php:902 usr/local/www/services_dhcp.php:912 +#: usr/local/www/services_dhcpv6.php:640 usr/local/www/services_dhcpv6.php:650 +#: usr/local/www/graph.php:120 usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:351 +#: usr/local/www/interfaces_bridge_edit.php:360 +#: usr/local/www/interfaces_bridge_edit.php:431 +#: usr/local/www/services_rfc2136_edit.php:156 +#: usr/local/www/vpn_ipsec_phase1.php:792 +#: usr/local/www/vpn_ipsec_phase1.php:862 +#: usr/local/www/vpn_ipsec_phase2.php:765 usr/local/www/interfaces.php:2045 +#: usr/local/www/interfaces.php:2167 +msgid "seconds" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:331 +#: usr/local/www/interfaces_bridge_edit.php:340 +#: usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:342 +#: usr/local/www/interfaces_bridge_edit.php:344 +#: usr/local/www/interfaces_bridge_edit.php:344 +msgid "" +"Set the time that a Spanning Tree Protocol configuration is valid. The " +"default is 20 seconds. The minimum is 6 seconds and the maximum is 40 " +"seconds." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:336 +#: usr/local/www/interfaces_bridge_edit.php:345 +#: usr/local/www/interfaces_bridge_edit.php:346 +#: usr/local/www/interfaces_bridge_edit.php:347 +#: usr/local/www/interfaces_bridge_edit.php:349 +#: usr/local/www/interfaces_bridge_edit.php:349 +msgid "Forward time" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:350 +#: usr/local/www/interfaces_bridge_edit.php:351 +#: usr/local/www/interfaces_bridge_edit.php:352 +#: usr/local/www/interfaces_bridge_edit.php:354 +#: usr/local/www/interfaces_bridge_edit.php:354 +msgid "" +"Set the time that must pass before an interface begins forwarding packets " +"when Spanning Tree is enabled. The default is 15 seconds. The minimum is 4 " +"seconds and the maximum is 30 seconds." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:345 +#: usr/local/www/interfaces_bridge_edit.php:354 +#: usr/local/www/interfaces_bridge_edit.php:355 +#: usr/local/www/interfaces_bridge_edit.php:356 +#: usr/local/www/interfaces_bridge_edit.php:358 +#: usr/local/www/interfaces_bridge_edit.php:358 +msgid "Hello time" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:350 +#: usr/local/www/interfaces_bridge_edit.php:359 +#: usr/local/www/interfaces_bridge_edit.php:360 +#: usr/local/www/interfaces_bridge_edit.php:361 +#: usr/local/www/interfaces_bridge_edit.php:363 +#: usr/local/www/interfaces_bridge_edit.php:363 +msgid "" +"Set the time between broadcasting of Spanning Tree Protocol configuration " +"messages. The hello time may only be changed when operating in legacy STP " +"mode. The default is 2 seconds. The minimum is 1 second and the maximum is " +"2 seconds." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:359 +#: usr/local/www/interfaces_bridge_edit.php:368 +#: usr/local/www/interfaces_bridge_edit.php:369 +#: usr/local/www/interfaces_bridge_edit.php:370 +#: usr/local/www/interfaces_bridge_edit.php:372 +#: usr/local/www/interfaces_bridge_edit.php:372 +msgid "" +"Set the bridge priority for Spanning Tree. The default is 32768. The " +"minimum is 0 and the maximum is 61440." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:363 +#: usr/local/www/interfaces_bridge_edit.php:372 +#: usr/local/www/interfaces_bridge_edit.php:373 +#: usr/local/www/interfaces_bridge_edit.php:374 +#: usr/local/www/interfaces_bridge_edit.php:376 +#: usr/local/www/interfaces_bridge_edit.php:376 +msgid "Hold count" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:368 +#: usr/local/www/interfaces_bridge_edit.php:377 +#: usr/local/www/interfaces_bridge_edit.php:378 +#: usr/local/www/interfaces_bridge_edit.php:379 +msgid "" +"Set the transmit hold count for Spanning Tree. This is the num- ber of " +"packets transmitted before being rate limited. The default is 6. The " +"minimum is 1 and the maximum is 10." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:382 +msgid "" +"Set the Spanning Tree priority of interface to value. The default is 128. " +"The minimum is 0 and the maximum is 240." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:386 +#: usr/local/www/interfaces_bridge_edit.php:395 +#: usr/local/www/interfaces_bridge_edit.php:396 +#: usr/local/www/interfaces_bridge_edit.php:397 +#: usr/local/www/interfaces_bridge_edit.php:400 +#: usr/local/www/interfaces_bridge_edit.php:400 +msgid "Path cost" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:395 +#: usr/local/www/interfaces_bridge_edit.php:404 +#: usr/local/www/interfaces_bridge_edit.php:405 +#: usr/local/www/interfaces_bridge_edit.php:406 +#: usr/local/www/interfaces_bridge_edit.php:410 +#: usr/local/www/interfaces_bridge_edit.php:410 +msgid "" +"Set the Spanning Tree path cost of interface to value. The default is " +"calculated from the link speed. To change a previously selected path cost " +"back to automatic, set the cost to 0. The minimum is 1 and the maximum is " +"200000000." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:404 +#: usr/local/www/interfaces_bridge_edit.php:413 +#: usr/local/www/interfaces_bridge_edit.php:414 +#: usr/local/www/interfaces_bridge_edit.php:415 +#: usr/local/www/interfaces_bridge_edit.php:419 +#: usr/local/www/interfaces_bridge_edit.php:419 +msgid "Cache size" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:406 +#: usr/local/www/interfaces_bridge_edit.php:415 +#: usr/local/www/interfaces_bridge_edit.php:416 +#: usr/local/www/interfaces_bridge_edit.php:417 +#: usr/local/www/interfaces_bridge_edit.php:421 +#: usr/local/www/interfaces_bridge_edit.php:421 +msgid "entries" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:408 +#: usr/local/www/interfaces_bridge_edit.php:417 +#: usr/local/www/interfaces_bridge_edit.php:418 +#: usr/local/www/interfaces_bridge_edit.php:419 +#: usr/local/www/interfaces_bridge_edit.php:423 +#: usr/local/www/interfaces_bridge_edit.php:423 +msgid "" +"Set the size of the bridge address cache to size.\tThe default is .100 " +"entries." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:414 +#: usr/local/www/interfaces_bridge_edit.php:423 +#: usr/local/www/interfaces_bridge_edit.php:424 +#: usr/local/www/interfaces_bridge_edit.php:425 +#: usr/local/www/interfaces_bridge_edit.php:429 +#: usr/local/www/interfaces_bridge_edit.php:429 +msgid "Cache entry expire time" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:418 +#: usr/local/www/interfaces_bridge_edit.php:427 +#: usr/local/www/interfaces_bridge_edit.php:428 +#: usr/local/www/interfaces_bridge_edit.php:429 +#: usr/local/www/interfaces_bridge_edit.php:433 +#: usr/local/www/interfaces_bridge_edit.php:433 +msgid "" +"Set the timeout of address cache entries to this number of seconds. If " +"seconds is zero, then address cache entries will not be expired. The default " +"is 240 seconds." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:425 +#: usr/local/www/interfaces_bridge_edit.php:434 +#: usr/local/www/interfaces_bridge_edit.php:435 +#: usr/local/www/interfaces_bridge_edit.php:436 +#: usr/local/www/interfaces_bridge_edit.php:440 +#: usr/local/www/interfaces_bridge_edit.php:440 +msgid "Span port" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:439 +#: usr/local/www/interfaces_bridge_edit.php:448 +#: usr/local/www/interfaces_bridge_edit.php:449 +#: usr/local/www/interfaces_bridge_edit.php:450 +#: usr/local/www/interfaces_bridge_edit.php:454 +#: usr/local/www/interfaces_bridge_edit.php:454 +msgid "" +"Add the interface named by interface as a span port on the bridge. Span " +"ports transmit a copy of every frame received by the bridge. This is most " +"useful for snooping a bridged network passively on another host connected to " +"one of the span ports of the bridge." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:448 +#: usr/local/www/interfaces_bridge_edit.php:457 +#: usr/local/www/interfaces_bridge_edit.php:458 +#: usr/local/www/interfaces_bridge_edit.php:459 +#: usr/local/www/interfaces_bridge_edit.php:463 +#: usr/local/www/interfaces_bridge_edit.php:463 +msgid "The span interface cannot be part of the bridge member interfaces." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:453 +#: usr/local/www/interfaces_bridge_edit.php:462 +#: usr/local/www/interfaces_bridge_edit.php:463 +#: usr/local/www/interfaces_bridge_edit.php:464 +#: usr/local/www/interfaces_bridge_edit.php:468 +#: usr/local/www/interfaces_bridge_edit.php:468 +msgid "Edge ports" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:467 +#: usr/local/www/interfaces_bridge_edit.php:476 +#: usr/local/www/interfaces_bridge_edit.php:477 +#: usr/local/www/interfaces_bridge_edit.php:478 +#: usr/local/www/interfaces_bridge_edit.php:482 +#: usr/local/www/interfaces_bridge_edit.php:482 +msgid "" +"Set interface as an edge port. An edge port connects directly to end " +"stations and cannot create bridging loops in the network; this allows it to " +"transition straight to forwarding." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:473 +#: usr/local/www/interfaces_bridge_edit.php:482 +#: usr/local/www/interfaces_bridge_edit.php:483 +#: usr/local/www/interfaces_bridge_edit.php:484 +#: usr/local/www/interfaces_bridge_edit.php:488 +#: usr/local/www/interfaces_bridge_edit.php:488 +msgid "Auto Edge ports" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:487 +#: usr/local/www/interfaces_bridge_edit.php:496 +#: usr/local/www/interfaces_bridge_edit.php:497 +#: usr/local/www/interfaces_bridge_edit.php:498 +#: usr/local/www/interfaces_bridge_edit.php:502 +#: usr/local/www/interfaces_bridge_edit.php:502 +msgid "" +"Allow interface to automatically detect edge status. This is the default " +"for all interfaces added to a bridge." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:492 +#: usr/local/www/interfaces_bridge_edit.php:501 +#: usr/local/www/interfaces_bridge_edit.php:502 +#: usr/local/www/interfaces_bridge_edit.php:503 +#: usr/local/www/interfaces_bridge_edit.php:507 +#: usr/local/www/interfaces_bridge_edit.php:507 +msgid "This will disable the autoedge status of interfaces." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:496 +#: usr/local/www/interfaces_bridge_edit.php:505 +#: usr/local/www/interfaces_bridge_edit.php:506 +#: usr/local/www/interfaces_bridge_edit.php:507 +#: usr/local/www/interfaces_bridge_edit.php:511 +#: usr/local/www/interfaces_bridge_edit.php:511 +msgid "PTP ports" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:510 +#: usr/local/www/interfaces_bridge_edit.php:519 +#: usr/local/www/interfaces_bridge_edit.php:520 +#: usr/local/www/interfaces_bridge_edit.php:521 +#: usr/local/www/interfaces_bridge_edit.php:525 +#: usr/local/www/interfaces_bridge_edit.php:525 +msgid "" +"Set the interface as a point-to-point link. This is required for straight " +"transitions to forwarding and should be enabled on a direct link to another " +"RSTP-capable switch." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:516 +#: usr/local/www/interfaces_bridge_edit.php:525 +#: usr/local/www/interfaces_bridge_edit.php:526 +#: usr/local/www/interfaces_bridge_edit.php:527 +#: usr/local/www/interfaces_bridge_edit.php:531 +#: usr/local/www/interfaces_bridge_edit.php:531 +msgid "Auto PTP ports" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:530 +#: usr/local/www/interfaces_bridge_edit.php:539 +#: usr/local/www/interfaces_bridge_edit.php:540 +#: usr/local/www/interfaces_bridge_edit.php:541 +#: usr/local/www/interfaces_bridge_edit.php:545 +#: usr/local/www/interfaces_bridge_edit.php:545 +msgid "" +"Automatically detect the point-to-point status on interface by checking the " +"full duplex link status. This is the default for interfaces added to the " +"bridge." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:536 +#: usr/local/www/interfaces_bridge_edit.php:545 +#: usr/local/www/interfaces_bridge_edit.php:546 +#: usr/local/www/interfaces_bridge_edit.php:547 +#: usr/local/www/interfaces_bridge_edit.php:551 +#: usr/local/www/interfaces_bridge_edit.php:551 +msgid "" +"The interfaces selected here will be removed from default autoedge status." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:540 +#: usr/local/www/interfaces_bridge_edit.php:549 +#: usr/local/www/interfaces_bridge_edit.php:550 +#: usr/local/www/interfaces_bridge_edit.php:551 +#: usr/local/www/interfaces_bridge_edit.php:555 +#: usr/local/www/interfaces_bridge_edit.php:555 +msgid "Sticky ports" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:554 +#: usr/local/www/interfaces_bridge_edit.php:563 +#: usr/local/www/interfaces_bridge_edit.php:564 +#: usr/local/www/interfaces_bridge_edit.php:565 +#: usr/local/www/interfaces_bridge_edit.php:569 +#: usr/local/www/interfaces_bridge_edit.php:569 +msgid "" +"Mark an interface as a \"sticky\" interface. Dynamically learned address " +"entries are treated as static once entered into the cache. Sticky entries " +"are never aged out of the cache or replaced, even if the address is seen on " +"a different interface." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:561 +#: usr/local/www/interfaces_bridge_edit.php:570 +#: usr/local/www/interfaces_bridge_edit.php:571 +#: usr/local/www/interfaces_bridge_edit.php:572 +#: usr/local/www/interfaces_bridge_edit.php:576 +#: usr/local/www/interfaces_bridge_edit.php:576 +msgid "Private ports" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:575 +#: usr/local/www/interfaces_bridge_edit.php:584 +#: usr/local/www/interfaces_bridge_edit.php:585 +#: usr/local/www/interfaces_bridge_edit.php:586 +#: usr/local/www/interfaces_bridge_edit.php:590 +#: usr/local/www/interfaces_bridge_edit.php:590 +msgid "" +"Mark an interface as a \"private\" interface. A private interface does not " +"forward any traffic to any other port that is also a private interface." +msgstr "" + +#: usr/local/www/interfaces_gif.php:64 usr/local/www/interfaces_gif.php:68 +#: usr/local/www/interfaces_gif.php:68 +msgid "" +"This gif TUNNEL cannot be deleted because it is still being used as an " +"interface." +msgstr "" + +#: usr/local/www/interfaces_gif.php:107 usr/local/www/interfaces_gre.php:108 +#: usr/local/www/interfaces_gre.php:109 usr/local/www/interfaces_gif.php:108 +#: usr/local/www/interfaces_gre.php:113 usr/local/www/interfaces_gif.php:112 +#: usr/local/www/interfaces_gre.php:113 usr/local/www/interfaces_gif.php:112 +msgid "Tunnel to..." +msgstr "" + +#: usr/local/www/interfaces_gif.php:123 usr/local/www/interfaces_gif.php:124 +#: usr/local/www/interfaces_gif.php:128 usr/local/www/interfaces_gif.php:128 +msgid "Do you really want to delete this gif tunnel?" +msgstr "" + +#: usr/local/www/interfaces_gif.php:134 usr/local/www/interfaces_gif.php:135 +#: usr/local/www/interfaces_gif.php:139 usr/local/www/interfaces_gif.php:139 +msgid "GIF tunnels are configured here." +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:72 +#: usr/local/www/interfaces_gif_edit.php:75 +#: usr/local/www/interfaces_gif_edit.php:75 +msgid "" +"Parent interface,Local address, Remote tunnel address, Remote tunnel " +"network, Local tunnel address" +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:78 +#: usr/local/www/interfaces_gre_edit.php:80 +#: usr/local/www/interfaces_gif_edit.php:81 +#: usr/local/www/interfaces_gre_edit.php:80 +#: usr/local/www/interfaces_gif_edit.php:81 +msgid "The tunnel local and tunnel remote fields must have valid IP addresses." +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:87 +#: usr/local/www/interfaces_gif_edit.php:95 +#: usr/local/www/interfaces_gif_edit.php:95 +#, php-format +msgid "A gif with the network %s is already defined." +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:136 +#: usr/local/www/interfaces_gif_edit.php:137 +#: usr/local/www/interfaces_gif_edit.php:138 +#: usr/local/www/interfaces_gif_edit.php:146 +#: usr/local/www/interfaces_gif_edit.php:146 +msgid "GIF configuration" +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:139 +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:141 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan_edit.php:153 +#: usr/local/www/interfaces_lagg_edit.php:134 +#: usr/local/www/interfaces_qinq_edit.php:288 +#: usr/local/www/interfaces_wireless_edit.php:84 +#: usr/local/www/interfaces_wireless_edit.php:159 +#: usr/local/www/interfaces_gif_edit.php:140 +#: usr/local/www/interfaces_vlan_edit.php:154 +#: usr/local/www/interfaces_qinq_edit.php:289 +#: usr/local/www/interfaces_gif_edit.php:141 +#: usr/local/www/interfaces_lagg_edit.php:135 +#: usr/local/www/interfaces_gre_edit.php:142 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:161 +#: usr/local/www/interfaces_vlan_edit.php:157 +#: usr/local/www/interfaces_lagg_edit.php:148 +#: usr/local/www/interfaces_gif_edit.php:149 +#: usr/local/www/interfaces_qinq_edit.php:292 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:161 +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:142 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan_edit.php:157 +#: usr/local/www/interfaces_lagg_edit.php:148 +#: usr/local/www/interfaces_gif_edit.php:149 +#: usr/local/www/interfaces_qinq_edit.php:292 +msgid "Parent interface" +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:156 +#: usr/local/www/interfaces_gif_edit.php:157 +#: usr/local/www/interfaces_gif_edit.php:158 +#: usr/local/www/interfaces_gif_edit.php:169 +msgid "" +"The interface here servers as the local address to be used for the gif " +"tunnel." +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:159 +#: usr/local/www/interfaces_gif_edit.php:160 +#: usr/local/www/interfaces_gif_edit.php:161 +#: usr/local/www/interfaces_gif_edit.php:172 +#: usr/local/www/interfaces_gif_edit.php:172 +msgid "gif remote address" +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:163 +#: usr/local/www/interfaces_gif_edit.php:164 +#: usr/local/www/interfaces_gif_edit.php:165 +#: usr/local/www/interfaces_gif_edit.php:176 +#: usr/local/www/interfaces_gif_edit.php:176 +msgid "Peer address where encapsulated gif packets will be sent. " +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:166 +#: usr/local/www/interfaces_gif_edit.php:167 +#: usr/local/www/interfaces_gif_edit.php:168 +#: usr/local/www/interfaces_gif_edit.php:179 +#: usr/local/www/interfaces_gif_edit.php:179 +msgid "gif tunnel local address" +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:170 +#: usr/local/www/interfaces_gif_edit.php:171 +#: usr/local/www/interfaces_gif_edit.php:172 +#: usr/local/www/interfaces_gif_edit.php:183 +#: usr/local/www/interfaces_gif_edit.php:183 +msgid "Local gif tunnel endpoint" +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:173 +#: usr/local/www/interfaces_gif_edit.php:174 +#: usr/local/www/interfaces_gif_edit.php:175 +#: usr/local/www/interfaces_gif_edit.php:186 +#: usr/local/www/interfaces_gif_edit.php:186 +msgid "gif tunnel remote address " +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:188 +#: usr/local/www/interfaces_gif_edit.php:189 +#: usr/local/www/interfaces_gif_edit.php:200 +#: usr/local/www/interfaces_gif_edit.php:200 +msgid "" +"Remote gif address endpoint. The subnet part is used for determining the " +"network that is tunnelled." +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:191 +#: usr/local/www/interfaces_gif_edit.php:192 +#: usr/local/www/interfaces_gif_edit.php:203 +#: usr/local/www/interfaces_gif_edit.php:203 +msgid "Route caching " +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:195 +#: usr/local/www/interfaces_gif_edit.php:196 +#: usr/local/www/interfaces_gif_edit.php:207 +#: usr/local/www/interfaces_gif_edit.php:207 +msgid "" +"Specify if route caching can be enabled. Be careful with these settings on " +"dynamic networks. " +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:198 +#: usr/local/www/interfaces_gif_edit.php:199 +#: usr/local/www/interfaces_gif_edit.php:210 +msgid "ECN friendly behaviour" +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:203 +#: usr/local/www/interfaces_gif_edit.php:204 +#: usr/local/www/interfaces_gif_edit.php:215 +#: usr/local/www/interfaces_gif_edit.php:215 +msgid "" +"Note that the ECN friendly behavior violates RFC2893. This should be used " +"in mutual agreement with the peer." +msgstr "" + +#: usr/local/www/interfaces_gre.php:65 usr/local/www/interfaces_gre.php:69 +#: usr/local/www/interfaces_gre.php:69 +msgid "" +"This GRE tunnel cannot be deleted because it is still being used as an " +"interface." +msgstr "" + +#: usr/local/www/interfaces_gre.php:124 usr/local/www/interfaces_gre.php:125 +#: usr/local/www/interfaces_gre.php:129 usr/local/www/interfaces_gre.php:129 +msgid "Do you really want to delete this GRE tunnel?" +msgstr "" + +#: usr/local/www/interfaces_gre.php:133 usr/local/www/interfaces_gre.php:134 +#: usr/local/www/interfaces_gre.php:138 usr/local/www/interfaces_gre.php:138 +msgid "" +"Here you can configure Generic Routing Encapsulation (GRE - RFC 2784) " +"tunnels." +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Local address" +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Remote tunnel address" +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Remote tunnel network" +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Local tunnel address" +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:88 +#: usr/local/www/interfaces_gre_edit.php:88 +#, php-format +msgid "A GRE tunnel with the network %s is already defined." +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:138 +#: usr/local/www/interfaces_gre_edit.php:139 +#: usr/local/www/interfaces_gre_edit.php:139 +msgid "GRE configuration" +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:158 +#: usr/local/www/interfaces_gre_edit.php:159 +#: usr/local/www/interfaces_gre_edit.php:159 +msgid "" +"The interface here serves as the local address to be used for the GRE tunnel." +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:161 +#: usr/local/www/interfaces_gre_edit.php:162 +#: usr/local/www/interfaces_gre_edit.php:162 +msgid "GRE remote address" +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:165 +#: usr/local/www/interfaces_gre_edit.php:166 +#: usr/local/www/interfaces_gre_edit.php:166 +msgid "Peer address where encapsulated GRE packets will be sent " +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:168 +#: usr/local/www/interfaces_gre_edit.php:169 +#: usr/local/www/interfaces_gre_edit.php:169 +msgid "GRE tunnel local address " +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:172 +#: usr/local/www/interfaces_gre_edit.php:173 +#: usr/local/www/interfaces_gre_edit.php:173 +msgid "Local GRE tunnel endpoint" +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:175 +#: usr/local/www/interfaces_gre_edit.php:176 +#: usr/local/www/interfaces_gre_edit.php:176 +msgid "GRE tunnel remote address " +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:190 +#: usr/local/www/interfaces_gre_edit.php:189 +#: usr/local/www/interfaces_gre_edit.php:190 +msgid "" +"Remote GRE address endpoint. The subnet part is used for the determining the " +"network that is tunneled." +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:193 +#: usr/local/www/interfaces_gre_edit.php:192 +#: usr/local/www/interfaces_gre_edit.php:193 +msgid "Mobile tunnel" +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:197 +#: usr/local/www/interfaces_gre_edit.php:196 +#: usr/local/www/interfaces_gre_edit.php:197 +msgid "Specify which encapsulation method the tunnel should use. " +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:200 +#: usr/local/www/interfaces_gre_edit.php:199 +#: usr/local/www/interfaces_gre_edit.php:200 +msgid "Route search type" +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:205 +#: usr/local/www/interfaces_gre_edit.php:204 +#: usr/local/www/interfaces_gre_edit.php:205 +msgid "" +"For correct operation, the GRE device needs a route to the destination that " +"is less specific than the one over the tunnel. (Basically, there needs to " +"be a route to the decapsulating host that does not run over the tunnel, as " +"this would be a loop." +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:212 +#: usr/local/www/interfaces_gre_edit.php:211 +#: usr/local/www/interfaces_gre_edit.php:212 +msgid "WCCP version" +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:216 +#: usr/local/www/interfaces_gre_edit.php:215 +#: usr/local/www/interfaces_gre_edit.php:216 +msgid "" +"Specify which WCCP encapsulation(version 1 or 2) method the tunnel should use" +msgstr "" + +#: usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/system_routes.php:117 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/system_authservers.php:422 +#: usr/local/www/system_gateway_groups.php:110 +#: usr/local/www/system_gateways.php:143 +#: usr/local/www/system_groupmanager.php:241 +#: usr/local/www/system_groupmanager_addprivs.php:169 +#: usr/local/www/system_usermanager.php:441 +#: usr/local/www/system_usermanager.php:790 +#: usr/local/www/system_usermanager_addprivs.php:168 +#: usr/local/www/system_usermanager_settings.php:114 +#: usr/local/www/system_usermanager.php:439 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/system_groupmanager_addprivs.php:167 +#: usr/local/www/system_usermanager.php:789 +#: usr/local/www/system_gateway_groups.php:111 +#: usr/local/www/system_authservers.php:427 +#: usr/local/www/system_routes.php:121 +#: usr/local/www/system_authservers.php:434 +#: usr/local/www/system_usermanager_settings.php:116 +#: usr/local/www/system_gateway_groups.php:120 +#: usr/local/www/system_routes.php:136 +#: usr/local/www/system_groupmanager.php:241 +#: usr/local/www/system_usermanager_addprivs.php:168 +#: usr/local/www/system_routes.php:136 usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/system_authservers.php:434 +#: usr/local/www/system_groupmanager_addprivs.php:167 +#: usr/local/www/system_usermanager_settings.php:116 +#: usr/local/www/system_usermanager.php:439 +#: usr/local/www/system_usermanager.php:789 +#: usr/local/www/system_gateways.php:143 +#: usr/local/www/system_gateway_groups.php:120 +msgid "Groups" +msgstr "" + +#: usr/local/www/interfaces_groups.php:127 +#: usr/local/www/system_groupmanager.php:443 +#: usr/local/www/system_groupmanager.php:446 +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/system_groupmanager.php:464 +#: usr/local/www/system_groupmanager.php:464 +#: usr/local/www/interfaces_groups.php:128 +msgid "edit group" +msgstr "" + +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/interfaces_groups.php:129 +#: usr/local/www/interfaces_groups.php:129 +msgid "" +"Do you really want to delete this group? All elements that still use it will " +"become invalid (e.g. filter rules)!" +msgstr "" + +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/interfaces_groups.php:129 +#: usr/local/www/interfaces_groups.php:129 +msgid "delete ifgroupentry" +msgstr "" + +#: usr/local/www/interfaces_groups.php:140 +#: usr/local/www/interfaces_groups.php:141 +#: usr/local/www/interfaces_groups.php:141 +msgid "add a new group" +msgstr "" + +#: usr/local/www/interfaces_groups.php:148 +#: usr/local/www/interfaces_groups.php:149 +#: usr/local/www/interfaces_groups.php:148 +msgid "" +"Interface Groups allow you to create rules that apply to multiple interfaces " +"without duplicating the rules. If you remove members from an interface " +"group, the group rules no longer apply to that interface." +msgstr "" + +#: usr/local/www/interfaces_groups_edit.php:71 +#: usr/local/www/interfaces_groups_edit.php:72 +#: usr/local/www/interfaces_groups_edit.php:72 +msgid "Group name already exists!" +msgstr "" + +#: usr/local/www/interfaces_groups_edit.php:74 +#: usr/local/www/interfaces_groups_edit.php:75 +#: usr/local/www/interfaces_groups_edit.php:75 +msgid "Only letters A-Z are allowed as the group name." +msgstr "" + +#: usr/local/www/interfaces_groups_edit.php:248 +#: usr/local/www/interfaces_groups_edit.php:249 +#: usr/local/www/interfaces_groups_edit.php:249 +msgid "Interface Groups Edit" +msgstr "" + +#: usr/local/www/interfaces_groups_edit.php:251 +#: usr/local/www/status_gateway_groups.php:74 +#: usr/local/www/system_gateway_groups.php:120 +#: usr/local/www/system_gateway_groups_edit.php:158 +#: usr/local/www/system_gateway_groups_edit.php:161 +#: usr/local/www/system_groupmanager.php:117 +#: usr/local/www/system_gateway_groups_edit.php:169 +#: usr/local/www/system_gateway_groups_edit.php:172 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateway_groups_edit.php:231 +#: usr/local/www/system_gateway_groups.php:121 +#: usr/local/www/interfaces_groups_edit.php:252 +#: usr/local/www/status_gateway_groups.php:75 +#: usr/local/www/system_gateway_groups_edit.php:232 +#: usr/local/www/system_gateway_groups_edit.php:235 +#: usr/local/www/system_gateway_groups.php:130 +#: usr/local/www/system_groupmanager.php:117 +#: usr/local/www/interfaces_groups_edit.php:252 +#: usr/local/www/system_gateway_groups_edit.php:232 +#: usr/local/www/system_gateway_groups_edit.php:235 +#: usr/local/www/status_gateway_groups.php:75 +#: usr/local/www/system_gateway_groups.php:130 +msgid "Group Name" +msgstr "" + +#: usr/local/www/interfaces_groups_edit.php:255 +#: usr/local/www/interfaces_groups_edit.php:256 +#: usr/local/www/interfaces_groups_edit.php:256 +msgid "No numbers or spaces are allowed. Only characters in a-zA-Z" +msgstr "" + +#: usr/local/www/interfaces_groups_edit.php:269 +#: usr/local/www/interfaces_qinq_edit.php:347 +#: usr/local/www/interfaces_qinq_edit.php:348 +#: usr/local/www/interfaces_groups_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:351 +#: usr/local/www/interfaces_groups_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:351 +msgid "Member (s)" +msgstr "" + +#: usr/local/www/firewall_aliases.php:103 +#: usr/local/www/firewall_aliases.php:106 +#: usr/local/www/firewall_aliases.php:107 +#: usr/local/www/firewall_aliases.php:106 +#, php-format +msgid "Cannot delete alias. Currently in use by %s" +msgstr "" + +#: usr/local/www/firewall_aliases.php:160 +#: usr/local/www/firewall_aliases.php:163 +#: usr/local/www/firewall_aliases.php:167 +#: usr/local/www/firewall_aliases.php:166 +#: usr/local/www/firewall_aliases.php:166 +msgid "The alias list has been changed." +msgstr "" + +#: usr/local/www/firewall_aliases.php:166 +#: usr/local/www/services_igmpproxy.php:97 +#: usr/local/www/firewall_aliases.php:169 +#: usr/local/www/firewall_aliases.php:189 +#: usr/local/www/firewall_aliases.php:189 +#: usr/local/www/services_igmpproxy.php:97 +msgid "Values" +msgstr "" + +#: usr/local/www/firewall_aliases.php:172 +#: usr/local/www/firewall_aliases.php:218 +#: usr/local/www/firewall_aliases.php:175 +#: usr/local/www/firewall_aliases.php:221 +msgid "add a new alias" +msgstr "" + +#: usr/local/www/firewall_aliases.php:204 +#: usr/local/www/firewall_schedule.php:220 +#: usr/local/www/firewall_aliases.php:207 +#: usr/local/www/firewall_schedule.php:220 +msgid "edit alias" +msgstr "" + +#: usr/local/www/firewall_aliases.php:205 +#: usr/local/www/firewall_aliases.php:208 +#: usr/local/www/firewall_aliases.php:256 +#: usr/local/www/firewall_aliases.php:257 +#: usr/local/www/firewall_aliases.php:258 +#: usr/local/www/firewall_aliases.php:258 +msgid "" +"Do you really want to delete this alias? All elements that still use it will " +"become invalid (e.g. filter rules)!" +msgstr "" + +#: usr/local/www/firewall_aliases.php:205 +#: usr/local/www/firewall_schedule.php:221 +#: usr/local/www/firewall_aliases.php:208 +#: usr/local/www/firewall_schedule.php:221 +msgid "delete alias" +msgstr "" + +#: usr/local/www/firewall_aliases.php:221 +#: usr/local/www/firewall_aliases.php:224 +#: usr/local/www/firewall_aliases.php:275 +#: usr/local/www/firewall_aliases.php:277 +#: usr/local/www/firewall_aliases.php:278 +#: usr/local/www/firewall_aliases.php:278 +msgid "Bulk import aliases from list" +msgstr "" + +#: usr/local/www/firewall_aliases.php:229 +#: usr/local/www/firewall_aliases.php:232 +#: usr/local/www/firewall_aliases.php:284 +#: usr/local/www/firewall_aliases.php:287 +#: usr/local/www/firewall_aliases.php:288 +#: usr/local/www/firewall_aliases.php:288 +msgid "" +"Aliases act as placeholders for real hosts, networks or ports. They can be " +"used to minimize the number of changes that have to be made if a host, " +"network or port changes. You can enter the name of an alias instead of the " +"host, network or port in all fields that have a red background. The alias " +"will be resolved according to the list above. If an alias cannot be resolved " +"(e.g. because you deleted it), the corresponding element (e.g. filter/NAT/" +"shaper rule) will be considered invalid and skipped." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:105 +#: usr/local/www/firewall_aliases_edit.php:107 +#: usr/local/www/firewall_aliases_edit.php:107 +#, php-format +msgid "Sorry, an interface is already named %s." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:140 +#: usr/local/www/firewall_aliases_edit.php:142 +#: usr/local/www/firewall_aliases_edit.php:134 +#: usr/local/www/firewall_aliases_edit.php:136 +#: usr/local/www/firewall_aliases_edit.php:134 +#: usr/local/www/firewall_aliases_edit.php:136 +msgid "Reserved word used for alias name." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:145 +#: usr/local/www/firewall_aliases_edit.php:139 +#: usr/local/www/firewall_aliases_edit.php:139 +msgid "" +"The alias name must be less than 32 characters long and may only consist of " +"the characters" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:187 +#: usr/local/www/firewall_aliases_edit.php:242 +#: usr/local/www/firewall_aliases_edit.php:188 +#: usr/local/www/firewall_aliases_edit.php:244 +#: usr/local/www/firewall_aliases_edit.php:182 +#: usr/local/www/firewall_aliases_edit.php:182 +msgid "You must provide a valid URL." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:190 +#: usr/local/www/firewall_aliases_edit.php:191 +#: usr/local/www/firewall_aliases_edit.php:185 +#: usr/local/www/firewall_aliases_edit.php:185 +msgid "Unable to fetch usable data." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:235 +#: usr/local/www/firewall_aliases_edit.php:237 +msgid "You must provide a valid URL. Could not fetch usable data." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:261 +#: usr/local/www/firewall_aliases_edit.php:264 +#: usr/local/www/firewall_aliases_edit.php:278 +#: usr/local/www/firewall_aliases_edit.php:269 +msgid "is not a valid port or alias." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:266 +#: usr/local/www/firewall_aliases_edit.php:269 +#: usr/local/www/firewall_aliases_edit.php:283 +#: usr/local/www/firewall_aliases_edit.php:274 +#, php-format +msgid "%1$s is not a valid %2$s alias." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:281 +#: usr/local/www/firewall_aliases_edit.php:284 +#: usr/local/www/firewall_aliases_edit.php:191 +#: usr/local/www/firewall_aliases_edit.php:221 +#: usr/local/www/firewall_aliases_edit.php:303 +#: usr/local/www/firewall_aliases_edit.php:191 +#: usr/local/www/firewall_aliases_edit.php:221 +#: usr/local/www/firewall_aliases_edit.php:289 +#, php-format +msgid "Entry added %s" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:285 +#: usr/local/www/firewall_aliases_edit.php:288 +#: usr/local/www/firewall_aliases_edit.php:307 +#: usr/local/www/firewall_aliases_edit.php:293 +#, php-format +msgid "" +"The alias(es): %s cannot be nested because they are not of the same type." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:453 +#: usr/local/www/firewall_aliases_edit.php:605 +#: usr/local/www/firewall_aliases_edit.php:456 +#: usr/local/www/firewall_aliases_edit.php:610 +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:613 +#: usr/local/www/firewall_aliases_edit.php:480 +#: usr/local/www/firewall_aliases_edit.php:644 +#: usr/local/www/firewall_aliases_edit.php:466 +#: usr/local/www/firewall_aliases_edit.php:630 +msgid "Network(s)" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:454 +#: usr/local/www/services_igmpproxy_edit.php:224 +#: usr/local/www/services_unbound_acls.php:237 +#: usr/local/www/services_igmpproxy_edit.php:226 +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_aliases_edit.php:481 +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/services_igmpproxy_edit.php:226 +msgid "CIDR" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:456 +#: usr/local/www/firewall_aliases_edit.php:604 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/firewall_aliases_edit.php:619 +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:622 +#: usr/local/www/firewall_aliases_edit.php:483 +#: usr/local/www/firewall_aliases_edit.php:643 +#: usr/local/www/firewall_aliases_edit.php:653 +#: usr/local/www/firewall_aliases_edit.php:469 +#: usr/local/www/firewall_aliases_edit.php:629 +#: usr/local/www/firewall_aliases_edit.php:639 +msgid "Host(s)" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/diag_states_summary.php:150 +#: usr/local/www/services_dnsmasq.php:245 +#: usr/local/www/services_dnsmasq.php:312 usr/local/www/vpn_pppoe_edit.php:538 +#: usr/local/www/services_dnsmasq.php:333 +#: usr/local/www/services_unbound.php:281 +#: usr/local/www/services_unbound.php:348 +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/diag_states_summary.php:139 +#: usr/local/www/vpn_pppoe_edit.php:539 usr/local/www/services_dnsmasq.php:246 +#: usr/local/www/services_dnsmasq.php:334 +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_aliases.php:176 +#: usr/local/www/diag_states_summary.php:141 +#: usr/local/www/vpn_pppoe_edit.php:542 usr/local/www/services_dnsmasq.php:271 +#: usr/local/www/services_dnsmasq.php:359 +#: usr/local/www/firewall_aliases.php:174 +#: usr/local/www/firewall_aliases_edit.php:484 +#: usr/local/www/services_dnsmasq.php:284 +#: usr/local/www/services_dnsmasq.php:372 +#: usr/local/www/services_dnsmasq.php:348 +#: usr/local/www/services_dnsmasq.php:436 +#: usr/local/www/diag_states_summary.php:141 +#: usr/local/www/firewall_aliases.php:174 usr/local/www/vpn_pppoe_edit.php:542 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/services_dnsmasq.php:348 +#: usr/local/www/services_dnsmasq.php:436 +msgid "IP" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:606 +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:611 +#: usr/local/www/firewall_aliases_edit.php:463 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:485 +#: usr/local/www/firewall_aliases_edit.php:645 +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:631 +msgid "Port(s)" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/firewall_aliases_edit.php:608 +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/firewall_aliases_edit.php:463 +#: usr/local/www/firewall_aliases_edit.php:613 +#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828 +#: usr/local/www/firewall_aliases_edit.php:465 +#: usr/local/www/firewall_aliases_edit.php:616 +#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759 +#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776 +#: usr/local/www/services_dhcp.php:1075 +#: usr/local/www/firewall_aliases_edit.php:487 +#: usr/local/www/firewall_aliases_edit.php:647 +#: usr/local/www/services_dhcp.php:1075 usr/local/www/services_dhcpv6.php:776 +#: usr/local/www/firewall_aliases_edit.php:473 +#: usr/local/www/firewall_aliases_edit.php:633 +msgid "URL" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:466 +#: usr/local/www/firewall_aliases_edit.php:617 +#: usr/local/www/firewall_aliases_edit.php:488 +#: usr/local/www/firewall_aliases_edit.php:648 +#: usr/local/www/firewall_aliases_edit.php:474 +#: usr/local/www/firewall_aliases_edit.php:634 +msgid "URL Table" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_aliases_edit.php:465 +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:489 +#: usr/local/www/firewall_aliases_edit.php:475 +msgid "Update Freq." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:469 +#: usr/local/www/firewall_aliases_edit.php:491 +#: usr/local/www/firewall_aliases_edit.php:477 +msgid "" +"Networks are specified in CIDR format. Select the CIDR mask that pertains " +"to each entry. /32 specifies a single IPv4 host, /128 specifies a single " +"IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, " +"etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 " +"or /128 for IPv6. You may also enter an IP range such as " +"192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to " +"fill the range." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:465 +msgid "" +"Enter as many hosts as you would like. Hosts must be specified by their IP " +"address." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:466 +#: usr/local/www/firewall_aliases_edit.php:469 +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:493 +#: usr/local/www/firewall_aliases_edit.php:479 +msgid "" +"Enter as many ports as you wish. Port ranges can be expressed by seperating " +"with a colon." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/firewall_aliases_edit.php:472 +#: usr/local/www/firewall_aliases_edit.php:494 +#: usr/local/www/firewall_aliases_edit.php:480 +#, php-format +msgid "" +"Enter as many URLs as you wish. After saving %s will download the URL and " +"import the items into the alias. Use only with small sets of IP addresses " +"(less than 3000)." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:468 +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:473 +#: usr/local/www/firewall_aliases_edit.php:495 +#: usr/local/www/firewall_aliases_edit.php:481 +#, php-format +msgid "" +"Enter a single URL containing a large number of IPs and/or Subnets. After " +"saving %s will download the URL and create a table file containing these " +"addresses. This will work with large numbers of addresses (30,000+) or small " +"numbers." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:607 +#: usr/local/www/firewall_aliases_edit.php:474 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:476 +#: usr/local/www/firewall_aliases_edit.php:615 +#: usr/local/www/firewall_aliases_edit.php:498 +#: usr/local/www/firewall_aliases_edit.php:646 +#: usr/local/www/firewall_aliases_edit.php:484 +#: usr/local/www/firewall_aliases_edit.php:632 +msgid "OpenVPN Users" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:472 +#: usr/local/www/firewall_aliases_edit.php:475 +#: usr/local/www/firewall_aliases_edit.php:477 +#: usr/local/www/firewall_aliases_edit.php:499 +#: usr/local/www/firewall_aliases_edit.php:485 +msgid "Enter as many usernames as you wish." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:573 +#: usr/local/www/firewall_aliases_edit.php:578 +#: usr/local/www/firewall_aliases_edit.php:581 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:598 +msgid "Alias Edit" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:620 +#: usr/local/www/firewall_aliases_edit.php:625 +#: usr/local/www/firewall_aliases_edit.php:628 +#: usr/local/www/firewall_aliases_edit.php:659 +#: usr/local/www/firewall_aliases_edit.php:645 +msgid "Item information" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:665 +#: usr/local/www/services_dnsmasq_edit.php:260 +#: usr/local/www/system_certmanager.php:782 +#: usr/local/www/firewall_aliases_edit.php:670 +#: usr/local/www/services_dnsmasq_edit.php:261 +#: usr/local/www/services_router_advertisements.php:343 +#: usr/local/www/firewall_aliases_edit.php:673 +#: usr/local/www/system_certmanager.php:807 +#: usr/local/www/services_router_advertisements.php:338 +#: usr/local/www/system_certmanager.php:808 +#: usr/local/www/firewall_aliases_edit.php:704 +#: usr/local/www/services_router_advertisements.php:338 +#: usr/local/www/system_certmanager.php:808 +#: usr/local/www/firewall_aliases_edit.php:690 +#: usr/local/www/services_dnsmasq_edit.php:261 +msgid "remove this entry" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/diag_backup.php:111 usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:111 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:140 usr/local/www/fbegin.inc:128 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/diag_backup.php:188 usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/fbegin.inc:137 usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:165 usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +#: usr/local/www/firewall_nat_edit.php:439 usr/local/www/fbegin.inc:129 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_virtual_ip.php:291 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_virtual_ip.php:291 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/diag_backup.php:188 +#: usr/local/www/firewall_nat_1to1_edit.php:221 usr/local/www/fbegin.inc:129 +#: usr/local/www/firewall_nat_out_edit.php:329 +msgid "NAT" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1.php:93 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_out.php:300 usr/local/www/firewall_nat.php:182 +#: usr/local/www/firewall_nat_npt.php:93 +#: usr/local/www/firewall_nat_out.php:310 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat.php:187 usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat.php:190 usr/local/www/firewall_nat_out.php:317 +#: usr/local/www/firewall_nat.php:190 usr/local/www/firewall_nat_out.php:317 +#: usr/local/www/firewall_nat_npt.php:93 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1.php:93 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +msgid "1:1" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:87 usr/local/www/firewall_nat.php:175 +#: usr/local/www/firewall_nat_npt.php:87 usr/local/www/firewall_nat.php:180 +#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat.php:183 +#: usr/local/www/firewall_nat_npt.php:87 +#: usr/local/www/firewall_nat_1to1.php:87 +msgid "The NAT configuration has been changed" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:92 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:299 usr/local/www/firewall_nat.php:160 +#: usr/local/www/firewall_nat.php:181 usr/local/www/firewall_nat_npt.php:92 +#: usr/local/www/firewall_nat_out.php:309 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/firewall_nat_out.php:310 usr/local/www/firewall_nat.php:165 +#: usr/local/www/firewall_nat.php:186 usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_nat_edit.php:439 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_nat_out.php:317 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:316 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:316 +#: usr/local/www/firewall_nat_npt.php:92 +#: usr/local/www/firewall_nat_1to1.php:92 +msgid "Port Forward" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:94 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat_npt.php:94 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_out.php:312 usr/local/www/firewall_nat.php:188 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_nat_out.php:319 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_nat.php:191 usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat.php:191 usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat_npt.php:94 +#: usr/local/www/firewall_nat_1to1.php:94 +#: usr/local/www/firewall_nat_out_edit.php:329 +msgid "Outbound" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:95 +#: usr/local/www/firewall_nat_out.php:302 usr/local/www/firewall_nat.php:184 +#: usr/local/www/firewall_nat_npt.php:78 usr/local/www/firewall_nat_npt.php:95 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/firewall_nat_out.php:312 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:320 +#: usr/local/www/firewall_nat.php:192 usr/local/www/firewall_nat_out.php:319 +#: usr/local/www/firewall_nat.php:192 usr/local/www/firewall_nat_out.php:319 +#: usr/local/www/firewall_nat_npt.php:78 usr/local/www/firewall_nat_npt.php:95 +#: usr/local/www/firewall_nat_1to1.php:95 +#: usr/local/www/firewall_nat_npt_edit.php:144 +msgid "NPt" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:105 +#: usr/local/www/firewall_nat_1to1.php:105 +msgid "External IP" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:106 +#: usr/local/www/firewall_nat_1to1_edit.php:328 +#: usr/local/www/status_upnp.php:87 +#: usr/local/www/firewall_nat_1to1_edit.php:335 +#: usr/local/www/firewall_nat_1to1_edit.php:333 +#: usr/local/www/status_upnp.php:88 +#: usr/local/www/firewall_nat_1to1_edit.php:334 +#: usr/local/www/firewall_nat_1to1.php:106 +#: usr/local/www/firewall_nat_1to1_edit.php:334 +#: usr/local/www/status_upnp.php:88 +msgid "Internal IP" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:107 +#: usr/local/www/firewall_nat_1to1.php:107 +msgid "Destination IP" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:113 +#: usr/local/www/firewall_nat_1to1.php:172 +#: usr/local/www/firewall_nat_npt.php:112 +#: usr/local/www/firewall_nat_npt.php:170 +#: usr/local/www/firewall_nat_npt.php:112 +#: usr/local/www/firewall_nat_npt.php:170 +#: usr/local/www/firewall_nat_1to1.php:113 +#: usr/local/www/firewall_nat_1to1.php:172 +msgid "add rule" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:159 +#: usr/local/www/firewall_rules.php:436 usr/local/www/firewall_rules.php:465 +#: usr/local/www/firewall_rules.php:493 usr/local/www/firewall_rules.php:776 +#: usr/local/www/firewall_nat.php:310 usr/local/www/firewall_nat_npt.php:157 +#: usr/local/www/firewall_rules.php:430 usr/local/www/firewall_rules.php:459 +#: usr/local/www/firewall_rules.php:487 usr/local/www/firewall_rules.php:773 +#: usr/local/www/firewall_nat.php:323 usr/local/www/firewall_rules.php:423 +#: usr/local/www/firewall_rules.php:452 usr/local/www/firewall_rules.php:480 +#: usr/local/www/firewall_rules.php:766 usr/local/www/firewall_rules.php:422 +#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479 +#: usr/local/www/firewall_nat.php:326 usr/local/www/firewall_nat.php:326 +#: usr/local/www/firewall_rules.php:422 usr/local/www/firewall_rules.php:451 +#: usr/local/www/firewall_rules.php:479 usr/local/www/firewall_rules.php:766 +#: usr/local/www/firewall_nat_npt.php:157 +#: usr/local/www/firewall_nat_1to1.php:159 +msgid "edit rule" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:160 usr/local/www/services_dhcp.php:923 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/services_dhcpv6.php:836 usr/local/www/services_dhcp.php:961 +#: usr/local/www/services_dhcpv6.php:931 usr/local/www/services_dhcp.php:1165 +#: usr/local/www/services_dhcpv6.php:862 usr/local/www/services_dhcp.php:1189 +#: usr/local/www/services_dhcpv6.php:883 usr/local/www/services_dhcp.php:1209 +#: usr/local/www/services_dhcp.php:1209 usr/local/www/services_dhcpv6.php:883 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/firewall_nat_1to1.php:160 +msgid "Do you really want to delete this mapping?" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:160 +#: usr/local/www/firewall_rules.php:779 usr/local/www/firewall_nat.php:313 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/firewall_nat_out.php:450 usr/local/www/firewall_rules.php:776 +#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326 +#: usr/local/www/firewall_rules.php:769 usr/local/www/firewall_nat_out.php:448 +#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:329 +#: usr/local/www/firewall_nat_out.php:454 usr/local/www/firewall_nat.php:329 +#: usr/local/www/firewall_nat_out.php:454 usr/local/www/firewall_rules.php:769 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/firewall_nat_1to1.php:160 +msgid "delete rule" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:180 +#: usr/local/www/firewall_nat_1to1.php:180 +msgid "Depending on the way your WAN connection is setup, you may also need a" +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:180 +#: usr/local/www/firewall_nat_1to1.php:180 +msgid "Virtual IP." +msgstr "" + +#: usr/local/www/firewall_nat_1to1.php:181 +#: usr/local/www/firewall_nat_1to1.php:181 +msgid "" +"If you add a 1:1 NAT entry for any of the interface IPs on this system, it " +"will make this system inaccessible on that IP address. i.e. if you use your " +"WAN IP address, any services on this system (IPsec, OpenVPN server, etc.) " +"using the WAN IP address will no longer function." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:109 +#: usr/local/www/firewall_nat_out_edit.php:125 +#: usr/local/www/firewall_nat_out_edit.php:129 +#: usr/local/www/firewall_nat_out_edit.php:135 +#: usr/local/www/firewall_nat_1to1_edit.php:109 +#: usr/local/www/firewall_nat_out_edit.php:135 +#, php-format +msgid "" +"Invalid characters detected (%s). Please remove invalid characters and save " +"again." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:114 +#: usr/local/www/firewall_nat_1to1_edit.php:114 +msgid "External subnet" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:117 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:200 +#: usr/local/www/firewall_nat_edit.php:200 +#: usr/local/www/firewall_nat_1to1_edit.php:117 +msgid "Source address" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:121 +#: usr/local/www/firewall_nat_edit.php:194 +#: usr/local/www/firewall_nat_edit.php:199 +#: usr/local/www/firewall_nat_edit.php:204 +#: usr/local/www/firewall_nat_edit.php:204 +#: usr/local/www/firewall_nat_1to1_edit.php:121 +msgid "Destination address" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:145 +#: usr/local/www/firewall_nat_1to1_edit.php:152 +#: usr/local/www/firewall_nat_1to1_edit.php:152 +msgid "A valid external subnet must be specified." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:149 +#: usr/local/www/firewall_nat_edit.php:232 +#: usr/local/www/firewall_rules_edit.php:356 +#: usr/local/www/firewall_rules_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:156 +#: usr/local/www/firewall_rules_edit.php:385 +#: usr/local/www/firewall_rules_edit.php:389 +#: usr/local/www/firewall_nat_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:384 +#: usr/local/www/firewall_rules_edit.php:388 +#: usr/local/www/firewall_rules_edit.php:387 +#: usr/local/www/firewall_rules_edit.php:391 +#: usr/local/www/firewall_nat_edit.php:244 +#: usr/local/www/firewall_rules_edit.php:393 +#: usr/local/www/firewall_rules_edit.php:397 +#: usr/local/www/firewall_nat_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:393 +#: usr/local/www/firewall_rules_edit.php:397 +#: usr/local/www/firewall_nat_edit.php:249 +#: usr/local/www/firewall_nat_1to1_edit.php:156 +msgid "You must specify single host or alias for alias entries." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:154 +#: usr/local/www/firewall_nat_1to1_edit.php:161 +#: usr/local/www/firewall_nat_1to1_edit.php:161 +#, php-format +msgid "%s is not a valid internal IP address." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:157 +#: usr/local/www/firewall_nat_1to1_edit.php:164 +#: usr/local/www/firewall_nat_1to1_edit.php:164 +msgid "A valid internal bit count must be specified." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:164 +#: usr/local/www/firewall_nat_edit.php:245 +#: usr/local/www/firewall_rules_edit.php:373 +#: usr/local/www/firewall_nat_1to1_edit.php:171 +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:252 +#: usr/local/www/firewall_rules_edit.php:401 +#: usr/local/www/firewall_rules_edit.php:404 +#: usr/local/www/firewall_nat_edit.php:257 +#: usr/local/www/firewall_rules_edit.php:410 +#: usr/local/www/firewall_nat_edit.php:262 +#: usr/local/www/firewall_rules_edit.php:410 +#: usr/local/www/firewall_nat_edit.php:262 +#: usr/local/www/firewall_nat_1to1_edit.php:171 +#, php-format +msgid "%s is not a valid destination IP address or alias." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:167 +#: usr/local/www/firewall_nat_edit.php:248 +#: usr/local/www/firewall_nat_out_edit.php:159 +#: usr/local/www/firewall_rules_edit.php:376 +#: usr/local/www/firewall_nat_1to1_edit.php:174 +#: usr/local/www/firewall_nat_out_edit.php:172 +#: usr/local/www/firewall_rules_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:255 +#: usr/local/www/firewall_rules_edit.php:404 +#: usr/local/www/firewall_rules_edit.php:407 +#: usr/local/www/firewall_nat_edit.php:260 +#: usr/local/www/firewall_nat_out_edit.php:176 +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:265 +#: usr/local/www/firewall_nat_out_edit.php:182 +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:265 +#: usr/local/www/firewall_nat_1to1_edit.php:174 +#: usr/local/www/firewall_nat_out_edit.php:182 +msgid "A valid destination bit count must be specified." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:270 +#: usr/local/www/firewall_nat_1to1_edit.php:277 +#: usr/local/www/firewall_nat_1to1_edit.php:275 +#: usr/local/www/firewall_nat_1to1_edit.php:275 +msgid "Edit NAT 1:1 entry" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:273 +#: usr/local/www/firewall_nat_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:679 usr/local/www/interfaces.php:1828 +#: usr/local/www/interfaces_ppps_edit.php:603 +#: usr/local/www/system_usermanager.php:469 +#: usr/local/www/system_usermanager.php:789 +#: usr/local/www/vpn_ipsec_phase1.php:512 +#: usr/local/www/vpn_ipsec_phase2.php:393 +#: usr/local/www/vpn_openvpn_client.php:386 +#: usr/local/www/vpn_openvpn_client.php:860 +#: usr/local/www/vpn_openvpn_csc.php:314 usr/local/www/vpn_openvpn_csc.php:672 +#: usr/local/www/vpn_openvpn_server.php:604 +#: usr/local/www/vpn_openvpn_server.php:1448 +#: usr/local/www/firewall_nat_npt_edit.php:159 +#: usr/local/www/system_routes_edit.php:299 +#: usr/local/www/firewall_nat_1to1_edit.php:280 +#: usr/local/www/firewall_nat_npt_edit.php:164 +#: usr/local/www/firewall_rules_edit.php:712 +#: usr/local/www/system_usermanager.php:467 +#: usr/local/www/system_usermanager.php:787 +#: usr/local/www/vpn_openvpn_server.php:677 +#: usr/local/www/vpn_openvpn_server.php:1590 +#: usr/local/www/vpn_ipsec_phase2.php:419 +#: usr/local/www/firewall_nat_edit.php:467 usr/local/www/interfaces.php:2006 +#: usr/local/www/vpn_openvpn_client.php:391 +#: usr/local/www/vpn_openvpn_client.php:865 +#: usr/local/www/system_routes_edit.php:300 +#: usr/local/www/firewall_nat_1to1_edit.php:278 +#: usr/local/www/firewall_nat_npt_edit.php:163 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/interfaces_ppps_edit.php:604 +#: usr/local/www/vpn_openvpn_csc.php:313 usr/local/www/vpn_openvpn_csc.php:671 +#: usr/local/www/vpn_openvpn_server.php:695 +#: usr/local/www/vpn_openvpn_server.php:1631 +#: usr/local/www/vpn_ipsec_phase2.php:485 +#: usr/local/www/firewall_nat_edit.php:466 usr/local/www/interfaces.php:1994 +#: usr/local/www/vpn_openvpn_client.php:399 +#: usr/local/www/vpn_openvpn_client.php:918 +#: usr/local/www/vpn_ipsec_phase1.php:511 +#: usr/local/www/vpn_openvpn_client.php:417 +#: usr/local/www/vpn_openvpn_client.php:937 +#: usr/local/www/firewall_rules_edit.php:715 +#: usr/local/www/interfaces_ppps_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:461 +#: usr/local/www/vpn_ipsec_phase1.php:532 +#: usr/local/www/vpn_openvpn_server.php:721 +#: usr/local/www/vpn_openvpn_server.php:1683 +#: usr/local/www/vpn_ipsec_phase2.php:507 usr/local/www/interfaces.php:2021 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/firewall_nat_edit.php:473 +#: usr/local/www/system_routes_edit.php:323 usr/local/www/interfaces.php:2067 +#: etc/inc/service-utils.inc:437 usr/local/www/interfaces_ppps_edit.php:608 +#: usr/local/www/firewall_nat_edit.php:474 +#: usr/local/www/system_routes_edit.php:332 +#: usr/local/www/firewall_nat_npt_edit.php:161 +#: usr/local/www/interfaces.php:2056 etc/inc/service-utils.inc:440 +#: usr/local/www/vpn_openvpn_client.php:417 +#: usr/local/www/vpn_openvpn_client.php:937 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/interfaces_ppps_edit.php:608 +#: usr/local/www/vpn_openvpn_csc.php:313 usr/local/www/vpn_openvpn_csc.php:671 +#: usr/local/www/firewall_nat_edit.php:474 +#: usr/local/www/system_routes_edit.php:326 +#: usr/local/www/firewall_nat_npt_edit.php:161 +#: usr/local/www/firewall_nat_1to1_edit.php:278 +#: usr/local/www/vpn_ipsec_phase1.php:532 +#: usr/local/www/system_usermanager.php:467 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/vpn_openvpn_server.php:721 +#: usr/local/www/vpn_openvpn_server.php:1683 +#: usr/local/www/vpn_ipsec_phase2.php:507 usr/local/www/interfaces.php:2056 +#: etc/inc/service-utils.inc:440 +msgid "Disabled" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:276 +#: usr/local/www/firewall_nat_edit.php:463 +#: usr/local/www/firewall_rules_edit.php:682 +#: usr/local/www/firewall_nat_npt_edit.php:162 +#: usr/local/www/firewall_nat_1to1_edit.php:283 +#: usr/local/www/firewall_nat_npt_edit.php:167 +#: usr/local/www/firewall_rules_edit.php:715 +#: usr/local/www/firewall_nat_edit.php:470 +#: usr/local/www/firewall_nat_1to1_edit.php:281 +#: usr/local/www/firewall_nat_npt_edit.php:166 +#: usr/local/www/firewall_nat_edit.php:469 +#: usr/local/www/firewall_rules_edit.php:718 +#: usr/local/www/firewall_nat_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:730 +#: usr/local/www/firewall_nat_edit.php:476 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_npt_edit.php:164 +#: usr/local/www/firewall_rules_edit.php:730 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_npt_edit.php:164 +#: usr/local/www/firewall_nat_1to1_edit.php:281 +msgid "Disable this rule" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:277 +#: usr/local/www/firewall_nat_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:683 +#: usr/local/www/firewall_nat_npt_edit.php:163 +#: usr/local/www/firewall_nat_1to1_edit.php:284 +#: usr/local/www/firewall_nat_npt_edit.php:168 +#: usr/local/www/firewall_rules_edit.php:716 +#: usr/local/www/firewall_nat_edit.php:471 +#: usr/local/www/firewall_nat_1to1_edit.php:282 +#: usr/local/www/firewall_nat_npt_edit.php:167 +#: usr/local/www/firewall_nat_edit.php:470 +#: usr/local/www/firewall_rules_edit.php:719 +#: usr/local/www/firewall_nat_edit.php:465 +#: usr/local/www/firewall_rules_edit.php:731 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_npt_edit.php:165 +#: usr/local/www/firewall_rules_edit.php:731 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_npt_edit.php:165 +#: usr/local/www/firewall_nat_1to1_edit.php:282 +msgid "Set this option to disable this rule without removing it from the list." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:315 +#: usr/local/www/firewall_nat_npt_edit.php:202 +#: usr/local/www/firewall_nat_1to1_edit.php:322 +#: usr/local/www/firewall_nat_npt_edit.php:207 +#: usr/local/www/firewall_nat_1to1_edit.php:320 +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_npt_edit.php:205 +#: usr/local/www/firewall_nat_1to1_edit.php:321 +#: usr/local/www/firewall_nat_npt_edit.php:205 +#: usr/local/www/firewall_nat_1to1_edit.php:321 +msgid "Choose which interface this rule applies to" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:316 +#: usr/local/www/firewall_nat_npt_edit.php:203 +#: usr/local/www/firewall_nat_1to1_edit.php:323 +#: usr/local/www/firewall_nat_npt_edit.php:208 +#: usr/local/www/firewall_nat_1to1_edit.php:321 +#: usr/local/www/firewall_nat_npt_edit.php:207 +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_1to1_edit.php:322 +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_1to1_edit.php:322 +msgid "Hint: in most cases, you'll want to use WAN here" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:319 +#: usr/local/www/firewall_nat_1to1_edit.php:326 +#: usr/local/www/firewall_nat_1to1_edit.php:324 +#: usr/local/www/firewall_nat_1to1_edit.php:325 +#: usr/local/www/firewall_nat_1to1_edit.php:325 +msgid "External subnet IP" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:323 +#: usr/local/www/firewall_nat_1to1_edit.php:330 +#: usr/local/www/firewall_nat_1to1_edit.php:328 +#: usr/local/www/firewall_nat_1to1_edit.php:329 +#: usr/local/www/firewall_nat_1to1_edit.php:329 +msgid "" +"Enter the external (usually on a WAN) subnet's starting address for the 1:1 " +"mapping. The subnet mask from the internal address below will be applied to " +"this IP address." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:324 +#: usr/local/www/firewall_nat_1to1_edit.php:331 +#: usr/local/www/firewall_nat_1to1_edit.php:329 +#: usr/local/www/firewall_nat_1to1_edit.php:330 +#: usr/local/www/firewall_nat_1to1_edit.php:330 +msgid "" +"Hint: this is generally an address owned by the router itself on the " +"selected interface." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:331 +#: usr/local/www/firewall_nat_1to1_edit.php:386 +#: usr/local/www/firewall_nat_edit.php:538 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_rules_edit.php:858 +#: usr/local/www/firewall_rules_edit.php:951 +#: usr/local/www/firewall_nat_npt_edit.php:209 +#: usr/local/www/firewall_nat_npt_edit.php:237 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_npt_edit.php:214 +#: usr/local/www/firewall_nat_npt_edit.php:242 +#: usr/local/www/firewall_nat_out_edit.php:514 +#: usr/local/www/firewall_rules_edit.php:893 +#: usr/local/www/firewall_rules_edit.php:986 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_1to1_edit.php:336 +#: usr/local/www/firewall_nat_1to1_edit.php:391 +#: usr/local/www/firewall_nat_npt_edit.php:213 +#: usr/local/www/firewall_nat_npt_edit.php:241 +#: usr/local/www/firewall_nat_edit.php:544 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:896 +#: usr/local/www/firewall_rules_edit.php:995 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_nat_edit.php:628 +#: usr/local/www/firewall_nat_out_edit.php:518 +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:1008 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_nat_out_edit.php:530 +#: usr/local/www/firewall_rules_edit.php:907 +#: usr/local/www/firewall_rules_edit.php:1007 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_nat_npt_edit.php:212 +#: usr/local/www/firewall_nat_npt_edit.php:240 +#: usr/local/www/firewall_nat_1to1_edit.php:337 +#: usr/local/www/firewall_nat_1to1_edit.php:392 +#: usr/local/www/firewall_nat_out_edit.php:531 +#: usr/local/www/firewall_rules_edit.php:907 +#: usr/local/www/firewall_rules_edit.php:1007 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_nat_npt_edit.php:212 +#: usr/local/www/firewall_nat_npt_edit.php:240 +#: usr/local/www/firewall_nat_1to1_edit.php:337 +#: usr/local/www/firewall_nat_1to1_edit.php:392 +#: usr/local/www/firewall_nat_out_edit.php:531 +msgid "not" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:333 +#: usr/local/www/firewall_nat_1to1_edit.php:388 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/firewall_nat_edit.php:629 +#: usr/local/www/firewall_nat_out_edit.php:502 +#: usr/local/www/firewall_rules_edit.php:860 +#: usr/local/www/firewall_rules_edit.php:953 +#: usr/local/www/firewall_nat_npt_edit.php:211 +#: usr/local/www/firewall_nat_npt_edit.php:239 +#: usr/local/www/firewall_nat_1to1_edit.php:340 +#: usr/local/www/firewall_nat_1to1_edit.php:395 +#: usr/local/www/firewall_nat_npt_edit.php:216 +#: usr/local/www/firewall_nat_npt_edit.php:244 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/firewall_rules_edit.php:895 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:547 +#: usr/local/www/firewall_nat_edit.php:636 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_npt_edit.php:215 +#: usr/local/www/firewall_nat_npt_edit.php:243 +#: usr/local/www/firewall_nat_edit.php:546 +#: usr/local/www/firewall_nat_edit.php:635 +#: usr/local/www/firewall_rules_edit.php:898 +#: usr/local/www/firewall_rules_edit.php:997 +#: usr/local/www/firewall_nat_edit.php:541 +#: usr/local/www/firewall_nat_edit.php:630 +#: usr/local/www/firewall_nat_out_edit.php:519 +#: usr/local/www/firewall_rules_edit.php:910 +#: usr/local/www/firewall_rules_edit.php:1010 +#: usr/local/www/firewall_nat_edit.php:553 +#: usr/local/www/firewall_nat_edit.php:642 +#: usr/local/www/firewall_nat_out_edit.php:531 +#: usr/local/www/firewall_rules_edit.php:909 +#: usr/local/www/firewall_rules_edit.php:1009 +#: usr/local/www/firewall_nat_edit.php:554 +#: usr/local/www/firewall_nat_edit.php:643 +#: usr/local/www/firewall_nat_npt_edit.php:214 +#: usr/local/www/firewall_nat_npt_edit.php:242 +#: usr/local/www/firewall_nat_1to1_edit.php:339 +#: usr/local/www/firewall_nat_1to1_edit.php:394 +#: usr/local/www/firewall_nat_out_edit.php:532 +#: usr/local/www/firewall_rules_edit.php:909 +#: usr/local/www/firewall_rules_edit.php:1009 +#: usr/local/www/firewall_nat_edit.php:554 +#: usr/local/www/firewall_nat_edit.php:643 +#: usr/local/www/firewall_nat_npt_edit.php:214 +#: usr/local/www/firewall_nat_npt_edit.php:242 +#: usr/local/www/firewall_nat_1to1_edit.php:339 +#: usr/local/www/firewall_nat_1to1_edit.php:394 +#: usr/local/www/firewall_nat_out_edit.php:532 +msgid "Use this option to invert the sense of the match." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:343 +#: usr/local/www/firewall_nat_1to1_edit.php:398 +#: usr/local/www/firewall_nat_edit.php:550 +#: usr/local/www/firewall_nat_edit.php:597 +#: usr/local/www/firewall_nat_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:639 +#: usr/local/www/firewall_nat_out_edit.php:475 +#: usr/local/www/firewall_nat_out_edit.php:509 +#: usr/local/www/firewall_nat_out_edit.php:569 +#: usr/local/www/firewall_rules.php:128 +#: usr/local/www/firewall_rules_edit.php:827 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules_edit.php:921 +#: usr/local/www/firewall_rules_edit.php:934 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:1013 +#: usr/local/www/firewall_rules_edit.php:1026 +#: usr/local/www/firewall_rules_edit.php:1090 +#: usr/local/www/services_captiveportal_ip.php:175 +#: usr/local/www/services_captiveportal_ip.php:182 +#: usr/local/www/services_captiveportal_hostname.php:176 +#: usr/local/www/services_captiveportal_hostname.php:183 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/firewall_nat_out_edit.php:488 +#: usr/local/www/firewall_nat_out_edit.php:522 +#: usr/local/www/firewall_nat_out_edit.php:582 +#: usr/local/www/firewall_rules_edit.php:862 +#: usr/local/www/firewall_rules_edit.php:905 +#: usr/local/www/firewall_rules_edit.php:956 +#: usr/local/www/firewall_rules_edit.php:969 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:998 +#: usr/local/www/firewall_rules_edit.php:1048 +#: usr/local/www/firewall_rules_edit.php:1061 +#: usr/local/www/firewall_rules_edit.php:1125 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:604 +#: usr/local/www/firewall_nat_edit.php:617 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_nat_1to1_edit.php:348 +#: usr/local/www/firewall_nat_1to1_edit.php:403 +#: usr/local/www/services_captiveportal_ip.php:173 +#: usr/local/www/services_captiveportal_ip.php:180 +#: usr/local/www/services_captiveportal_hostname.php:174 +#: usr/local/www/services_captiveportal_hostname.php:181 +#: usr/local/www/firewall_rules.php:126 +#: usr/local/www/firewall_nat_edit.php:556 +#: usr/local/www/firewall_nat_edit.php:603 +#: usr/local/www/firewall_nat_edit.php:616 +#: usr/local/www/firewall_nat_edit.php:645 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/firewall_rules_edit.php:978 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1007 +#: usr/local/www/firewall_rules_edit.php:1063 +#: usr/local/www/firewall_rules_edit.php:1076 +#: usr/local/www/firewall_rules_edit.php:1140 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:598 +#: usr/local/www/firewall_nat_edit.php:611 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:526 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:920 +#: usr/local/www/firewall_rules_edit.php:991 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1020 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_rules_edit.php:1153 +#: usr/local/www/firewall_nat_edit.php:563 +#: usr/local/www/firewall_nat_edit.php:623 +#: usr/local/www/firewall_nat_edit.php:652 +#: usr/local/www/firewall_nat_out_edit.php:504 +#: usr/local/www/firewall_nat_out_edit.php:538 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules_edit.php:919 +#: usr/local/www/firewall_rules_edit.php:977 +#: usr/local/www/firewall_rules_edit.php:990 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1019 +#: usr/local/www/firewall_rules_edit.php:1075 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:624 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/firewall_nat_1to1_edit.php:349 +#: usr/local/www/firewall_nat_1to1_edit.php:404 +#: usr/local/www/firewall_nat_out_edit.php:539 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules_edit.php:919 +#: usr/local/www/firewall_rules_edit.php:977 +#: usr/local/www/firewall_rules_edit.php:990 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1019 +#: usr/local/www/firewall_rules_edit.php:1075 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/services_captiveportal_ip.php:173 +#: usr/local/www/services_captiveportal_ip.php:180 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:611 +#: usr/local/www/firewall_nat_edit.php:624 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/services_captiveportal_hostname.php:174 +#: usr/local/www/services_captiveportal_hostname.php:181 +#: usr/local/www/firewall_rules.php:126 +#: usr/local/www/firewall_nat_1to1_edit.php:349 +#: usr/local/www/firewall_nat_1to1_edit.php:404 +#: usr/local/www/firewall_nat_out_edit.php:504 +#: usr/local/www/firewall_nat_out_edit.php:539 +msgid "any" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:344 +#: usr/local/www/firewall_nat_1to1_edit.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:349 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +msgid "Single host" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:347 +#: usr/local/www/firewall_nat_1to1_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:554 +#: usr/local/www/firewall_nat_edit.php:643 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules_edit.php:967 +#: usr/local/www/firewall_nat_1to1_edit.php:354 +#: usr/local/www/firewall_nat_1to1_edit.php:409 +#: usr/local/www/firewall_rules_edit.php:909 +#: usr/local/www/firewall_rules_edit.php:1002 +#: usr/local/www/firewall_nat_edit.php:561 +#: usr/local/www/firewall_nat_edit.php:650 +#: usr/local/www/firewall_nat_1to1_edit.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:407 +#: usr/local/www/firewall_nat_edit.php:560 +#: usr/local/www/firewall_nat_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:918 +#: usr/local/www/firewall_rules_edit.php:1017 +#: usr/local/www/firewall_nat_edit.php:555 +#: usr/local/www/firewall_nat_edit.php:644 +#: usr/local/www/firewall_rules_edit.php:930 +#: usr/local/www/firewall_rules_edit.php:1030 +#: usr/local/www/firewall_nat_edit.php:567 +#: usr/local/www/firewall_nat_edit.php:656 +#: usr/local/www/firewall_rules_edit.php:929 +#: usr/local/www/firewall_rules_edit.php:1029 +#: usr/local/www/firewall_nat_edit.php:568 +#: usr/local/www/firewall_nat_edit.php:657 +#: usr/local/www/firewall_nat_1to1_edit.php:353 +#: usr/local/www/firewall_nat_1to1_edit.php:408 +#: usr/local/www/firewall_rules_edit.php:929 +#: usr/local/www/firewall_rules_edit.php:1029 +#: usr/local/www/firewall_nat_edit.php:568 +#: usr/local/www/firewall_nat_edit.php:657 +#: usr/local/www/firewall_nat_1to1_edit.php:353 +#: usr/local/www/firewall_nat_1to1_edit.php:408 +msgid "PPTP clients" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:970 +#: usr/local/www/firewall_nat_1to1_edit.php:357 +#: usr/local/www/firewall_nat_1to1_edit.php:412 +#: usr/local/www/firewall_rules_edit.php:912 +#: usr/local/www/firewall_rules_edit.php:1005 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/firewall_nat_1to1_edit.php:355 +#: usr/local/www/firewall_nat_1to1_edit.php:410 +#: usr/local/www/firewall_nat_edit.php:563 +#: usr/local/www/firewall_nat_edit.php:652 +#: usr/local/www/firewall_rules_edit.php:921 +#: usr/local/www/firewall_rules_edit.php:1020 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_rules_edit.php:933 +#: usr/local/www/firewall_rules_edit.php:1033 +#: usr/local/www/firewall_nat_edit.php:570 +#: usr/local/www/firewall_nat_edit.php:659 +#: usr/local/www/firewall_rules_edit.php:932 +#: usr/local/www/firewall_rules_edit.php:1032 +#: usr/local/www/firewall_nat_edit.php:571 +#: usr/local/www/firewall_nat_edit.php:660 +#: usr/local/www/firewall_nat_1to1_edit.php:356 +#: usr/local/www/firewall_nat_1to1_edit.php:411 +#: usr/local/www/firewall_rules_edit.php:932 +#: usr/local/www/firewall_rules_edit.php:1032 +#: usr/local/www/firewall_nat_edit.php:571 +#: usr/local/www/firewall_nat_edit.php:660 +#: usr/local/www/firewall_nat_1to1_edit.php:356 +#: usr/local/www/firewall_nat_1to1_edit.php:411 +msgid "PPPoE clients" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:353 +#: usr/local/www/firewall_nat_1to1_edit.php:408 +#: usr/local/www/firewall_nat_edit.php:560 +#: usr/local/www/firewall_nat_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:973 +#: usr/local/www/firewall_nat_1to1_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:415 +#: usr/local/www/firewall_rules_edit.php:915 +#: usr/local/www/firewall_rules_edit.php:1008 +#: usr/local/www/firewall_nat_edit.php:567 +#: usr/local/www/firewall_nat_edit.php:656 +#: usr/local/www/firewall_nat_1to1_edit.php:358 +#: usr/local/www/firewall_nat_1to1_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 +#: usr/local/www/firewall_rules_edit.php:924 +#: usr/local/www/firewall_rules_edit.php:1023 +#: usr/local/www/firewall_nat_edit.php:561 +#: usr/local/www/firewall_nat_edit.php:650 +#: usr/local/www/firewall_rules_edit.php:936 +#: usr/local/www/firewall_rules_edit.php:1036 +#: usr/local/www/firewall_nat_edit.php:573 +#: usr/local/www/firewall_nat_edit.php:662 +#: usr/local/www/firewall_rules_edit.php:935 +#: usr/local/www/firewall_rules_edit.php:1035 +#: usr/local/www/firewall_nat_edit.php:574 +#: usr/local/www/firewall_nat_edit.php:663 +#: usr/local/www/firewall_nat_1to1_edit.php:359 +#: usr/local/www/firewall_nat_1to1_edit.php:414 +#: usr/local/www/firewall_rules_edit.php:935 +#: usr/local/www/firewall_rules_edit.php:1035 +#: usr/local/www/firewall_nat_edit.php:574 +#: usr/local/www/firewall_nat_edit.php:663 +#: usr/local/www/firewall_nat_1to1_edit.php:359 +#: usr/local/www/firewall_nat_1to1_edit.php:414 +msgid "L2TP clients" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:358 +#: usr/local/www/firewall_nat_1to1_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_rules_edit.php:978 +#: usr/local/www/firewall_nat_1to1_edit.php:365 +#: usr/local/www/firewall_nat_1to1_edit.php:420 +#: usr/local/www/firewall_rules_edit.php:1013 +#: usr/local/www/firewall_nat_edit.php:572 +#: usr/local/www/firewall_nat_edit.php:661 +#: usr/local/www/firewall_nat_1to1_edit.php:363 +#: usr/local/www/firewall_nat_1to1_edit.php:418 +#: usr/local/www/firewall_nat_edit.php:571 +#: usr/local/www/firewall_nat_edit.php:660 +#: usr/local/www/firewall_rules_edit.php:1028 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 +#: usr/local/www/firewall_rules_edit.php:1041 +#: usr/local/www/firewall_nat_edit.php:578 +#: usr/local/www/firewall_nat_edit.php:667 +#: usr/local/www/firewall_rules_edit.php:1040 +#: usr/local/www/firewall_nat_edit.php:579 +#: usr/local/www/firewall_nat_edit.php:668 +#: usr/local/www/firewall_nat_1to1_edit.php:364 +#: usr/local/www/firewall_nat_1to1_edit.php:419 +#: usr/local/www/firewall_rules_edit.php:1040 +#: usr/local/www/firewall_nat_edit.php:579 +#: usr/local/www/firewall_nat_edit.php:668 +#: usr/local/www/firewall_nat_1to1_edit.php:364 +#: usr/local/www/firewall_nat_1to1_edit.php:419 +msgid "subnet" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:415 +#: usr/local/www/firewall_nat_edit.php:567 +#: usr/local/www/firewall_nat_edit.php:656 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules_edit.php:980 +#: usr/local/www/firewall_nat_1to1_edit.php:367 +#: usr/local/www/firewall_nat_1to1_edit.php:422 +#: usr/local/www/firewall_rules_edit.php:922 +#: usr/local/www/firewall_rules_edit.php:1015 +#: usr/local/www/firewall_nat_edit.php:574 +#: usr/local/www/firewall_nat_edit.php:663 +#: usr/local/www/firewall_nat_1to1_edit.php:365 +#: usr/local/www/firewall_nat_1to1_edit.php:420 +#: usr/local/www/firewall_nat_edit.php:573 +#: usr/local/www/firewall_nat_edit.php:662 +#: usr/local/www/firewall_rules_edit.php:931 +#: usr/local/www/firewall_rules_edit.php:1030 +#: usr/local/www/firewall_nat_edit.php:568 +#: usr/local/www/firewall_nat_edit.php:657 +#: usr/local/www/firewall_rules_edit.php:943 +#: usr/local/www/firewall_rules_edit.php:1043 +#: usr/local/www/firewall_nat_edit.php:580 +#: usr/local/www/firewall_nat_edit.php:669 +#: usr/local/www/firewall_rules_edit.php:942 +#: usr/local/www/firewall_rules_edit.php:1042 +#: usr/local/www/firewall_nat_edit.php:581 +#: usr/local/www/firewall_nat_edit.php:670 +#: usr/local/www/firewall_nat_1to1_edit.php:366 +#: usr/local/www/firewall_nat_1to1_edit.php:421 +#: usr/local/www/firewall_rules_edit.php:942 +#: usr/local/www/firewall_rules_edit.php:1042 +#: usr/local/www/firewall_nat_edit.php:581 +#: usr/local/www/firewall_nat_edit.php:670 +#: usr/local/www/firewall_nat_1to1_edit.php:366 +#: usr/local/www/firewall_nat_1to1_edit.php:421 +msgid "address" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:379 +#: usr/local/www/firewall_nat_1to1_edit.php:386 +#: usr/local/www/firewall_nat_1to1_edit.php:384 +#: usr/local/www/firewall_nat_1to1_edit.php:385 +#: usr/local/www/firewall_nat_1to1_edit.php:385 +msgid "" +"Enter the internal (LAN) subnet for the 1:1 mapping. The subnet size " +"specified for the internal subnet will be applied to the external subnet." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:399 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_nat_1to1_edit.php:406 +#: usr/local/www/firewall_rules_edit.php:906 +#: usr/local/www/firewall_rules_edit.php:999 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_nat_1to1_edit.php:404 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_rules_edit.php:915 +#: usr/local/www/firewall_rules_edit.php:1014 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_rules_edit.php:927 +#: usr/local/www/firewall_rules_edit.php:1027 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/firewall_rules_edit.php:926 +#: usr/local/www/firewall_rules_edit.php:1026 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/firewall_rules_edit.php:926 +#: usr/local/www/firewall_rules_edit.php:1026 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +msgid "Single host or alias" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:436 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +#: usr/local/www/firewall_nat_1to1_edit.php:441 +#: usr/local/www/firewall_nat_1to1_edit.php:442 +#: usr/local/www/firewall_nat_1to1_edit.php:442 +msgid "" +"The 1:1 mapping will only be used for connections to or from the specified " +"destination." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:437 +#: usr/local/www/firewall_nat_1to1_edit.php:444 +#: usr/local/www/firewall_nat_1to1_edit.php:442 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +msgid "Hint: this is usually 'any'." +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:447 +#: usr/local/www/firewall_nat_edit.php:783 +#: usr/local/www/firewall_nat_1to1_edit.php:454 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/firewall_nat_1to1_edit.php:452 +#: usr/local/www/firewall_nat_edit.php:789 +#: usr/local/www/firewall_nat_edit.php:784 +#: usr/local/www/firewall_nat_edit.php:796 +#: usr/local/www/firewall_nat_edit.php:797 +#: usr/local/www/firewall_nat_edit.php:797 +#: usr/local/www/firewall_nat_1to1_edit.php:454 +msgid "NAT reflection" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:450 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/firewall_nat_1to1_edit.php:457 +#: usr/local/www/firewall_nat_1to1_edit.php:455 +#: usr/local/www/firewall_nat_1to1_edit.php:457 +msgid "use system default" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:451 +#: usr/local/www/firewall_nat_edit.php:787 +#: usr/local/www/firewall_nat_1to1_edit.php:458 +#: usr/local/www/firewall_nat_1to1_edit.php:456 +#: usr/local/www/firewall_nat_1to1_edit.php:458 +msgid "enable" +msgstr "" + +#: usr/local/www/firewall_nat_1to1_edit.php:452 +#: usr/local/www/firewall_nat_edit.php:788 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_1to1_edit.php:457 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +msgid "disable" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:109 +#: usr/local/www/firewall_nat_edit.php:114 +#: usr/local/www/firewall_nat_edit.php:119 +#: usr/local/www/firewall_nat_edit.php:119 +#, php-format +msgid "" +"Invalid characters detected %s. Please remove invalid characters and save " +"again." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:192 +msgid "Destination port from" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:192 +msgid "Destination port to" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:198 +#: usr/local/www/firewall_nat_edit.php:740 +#: usr/local/www/firewall_nat_edit.php:747 +#: usr/local/www/firewall_nat_edit.php:746 +#: usr/local/www/firewall_nat_edit.php:203 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/firewall_nat_edit.php:208 +#: usr/local/www/firewall_nat_edit.php:753 +#: usr/local/www/firewall_nat_edit.php:754 +#: usr/local/www/firewall_nat_edit.php:208 +#: usr/local/www/firewall_nat_edit.php:754 +msgid "Redirect target IP" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:213 +#: usr/local/www/firewall_nat_edit.php:220 +#: usr/local/www/firewall_nat_edit.php:225 +#: usr/local/www/firewall_nat_edit.php:230 +#: usr/local/www/firewall_nat_edit.php:230 +#, php-format +msgid "\"%s\" is not a valid redirect target IP address or host alias." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:217 +#: usr/local/www/firewall_rules_edit.php:325 +#: usr/local/www/firewall_rules_edit.php:349 +#: usr/local/www/firewall_nat_edit.php:224 +#: usr/local/www/firewall_rules_edit.php:348 +#: usr/local/www/firewall_rules_edit.php:351 +#: usr/local/www/firewall_nat_edit.php:229 +#: usr/local/www/firewall_rules_edit.php:357 +#: usr/local/www/firewall_nat_edit.php:234 +#: usr/local/www/firewall_rules_edit.php:357 +#: usr/local/www/firewall_nat_edit.php:234 +#, php-format +msgid "" +"%s is not a valid start source port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:219 +#: usr/local/www/firewall_nat_edit.php:226 +#: usr/local/www/firewall_nat_edit.php:231 +#: usr/local/www/firewall_nat_edit.php:236 +#: usr/local/www/firewall_nat_edit.php:236 +#, php-format +msgid "" +"%s is not a valid end source port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:221 +#: usr/local/www/firewall_rules_edit.php:329 +#: usr/local/www/firewall_rules_edit.php:353 +#: usr/local/www/firewall_nat_edit.php:228 +#: usr/local/www/firewall_rules_edit.php:352 +#: usr/local/www/firewall_rules_edit.php:355 +#: usr/local/www/firewall_nat_edit.php:233 +#: usr/local/www/firewall_rules_edit.php:361 +#: usr/local/www/firewall_nat_edit.php:238 +#: usr/local/www/firewall_rules_edit.php:361 +#: usr/local/www/firewall_nat_edit.php:238 +#, php-format +msgid "" +"%s is not a valid start destination port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:223 +#: usr/local/www/firewall_rules_edit.php:331 +#: usr/local/www/firewall_rules_edit.php:355 +#: usr/local/www/firewall_nat_edit.php:230 +#: usr/local/www/firewall_rules_edit.php:354 +#: usr/local/www/firewall_rules_edit.php:357 +#: usr/local/www/firewall_nat_edit.php:235 +#: usr/local/www/firewall_rules_edit.php:363 +#: usr/local/www/firewall_nat_edit.php:240 +#: usr/local/www/firewall_rules_edit.php:363 +#: usr/local/www/firewall_nat_edit.php:240 +#, php-format +msgid "" +"%s is not a valid end destination port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:226 +#, php-format +msgid "" +"%s is not a valid local port. It must be a port alias or integer between 1 " +"and 65535." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:237 +#: usr/local/www/firewall_rules_edit.php:365 +#: usr/local/www/firewall_rules_edit.php:394 +#: usr/local/www/firewall_nat_edit.php:244 +#: usr/local/www/firewall_rules_edit.php:393 +#: usr/local/www/firewall_rules_edit.php:396 +#: usr/local/www/firewall_nat_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:254 +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:254 +#, php-format +msgid "%s is not a valid source IP address or alias." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:240 +#: usr/local/www/firewall_nat_out_edit.php:151 +#: usr/local/www/firewall_rules_edit.php:368 +#: usr/local/www/firewall_nat_out_edit.php:164 +#: usr/local/www/firewall_rules_edit.php:397 +#: usr/local/www/firewall_nat_edit.php:247 +#: usr/local/www/firewall_rules_edit.php:396 +#: usr/local/www/firewall_rules_edit.php:399 +#: usr/local/www/firewall_nat_edit.php:252 +#: usr/local/www/firewall_nat_out_edit.php:168 +#: usr/local/www/firewall_rules_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:257 +#: usr/local/www/firewall_nat_out_edit.php:174 +#: usr/local/www/firewall_rules_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:257 +#: usr/local/www/firewall_nat_out_edit.php:174 +msgid "A valid source bit count must be specified." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:267 +#: usr/local/www/firewall_nat_edit.php:274 +#: usr/local/www/firewall_nat_edit.php:279 +#: usr/local/www/firewall_nat_edit.php:284 +#: usr/local/www/firewall_nat_edit.php:284 +msgid "The target port range must be an integer between 1 and 65535." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:288 +#: usr/local/www/firewall_nat_edit.php:295 +#: usr/local/www/firewall_nat_edit.php:300 +#: usr/local/www/firewall_nat_edit.php:305 +#: usr/local/www/firewall_nat_edit.php:305 +msgid "The destination port range overlaps with an existing entry." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:453 +#: usr/local/www/firewall_nat_edit.php:460 +#: usr/local/www/firewall_nat_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:454 +#: usr/local/www/firewall_nat_edit.php:466 +#: usr/local/www/firewall_nat_edit.php:467 +#: usr/local/www/firewall_nat_edit.php:467 +msgid "Edit Redirect entry" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:468 +#: usr/local/www/firewall_nat_edit.php:475 +#: usr/local/www/firewall_nat_edit.php:474 +#: usr/local/www/firewall_nat_edit.php:469 +#: usr/local/www/firewall_nat_edit.php:481 +#: usr/local/www/firewall_nat_edit.php:482 +#: usr/local/www/firewall_nat_edit.php:482 +msgid "No RDR (NOT)" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:471 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_edit.php:472 +#: usr/local/www/firewall_nat_edit.php:484 +#: usr/local/www/firewall_nat_edit.php:485 +#: usr/local/www/firewall_nat_edit.php:485 +msgid "" +"Enabling this option will disable redirection for traffic matching this rule." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:472 +#: usr/local/www/firewall_nat_edit.php:479 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_edit.php:473 +#: usr/local/www/firewall_nat_edit.php:485 +#: usr/local/www/firewall_nat_edit.php:486 +#: usr/local/www/firewall_nat_edit.php:486 +msgid "" +"Hint: this option is rarely needed, don't use this unless you know what " +"you're doing." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:514 +#: usr/local/www/firewall_nat_out_edit.php:452 +#: usr/local/www/firewall_nat_out_edit.php:465 +#: usr/local/www/firewall_nat_edit.php:521 +#: usr/local/www/firewall_nat_edit.php:520 +#: usr/local/www/firewall_nat_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:469 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_nat_out_edit.php:481 +#: usr/local/www/firewall_nat_edit.php:528 +#: usr/local/www/firewall_nat_edit.php:528 +#: usr/local/www/firewall_nat_out_edit.php:481 +msgid "Choose which interface this rule applies to." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:453 +#: usr/local/www/firewall_nat_out_edit.php:466 +#: usr/local/www/firewall_nat_edit.php:522 +#: usr/local/www/firewall_nat_edit.php:521 +#: usr/local/www/firewall_nat_edit.php:516 +#: usr/local/www/firewall_nat_out_edit.php:470 +#: usr/local/www/firewall_nat_edit.php:528 +#: usr/local/www/firewall_nat_out_edit.php:482 +#: usr/local/www/firewall_nat_edit.php:529 +#: usr/local/www/firewall_nat_edit.php:529 +#: usr/local/www/firewall_nat_out_edit.php:482 +msgid "Hint: in most cases, you'll want to use WAN here." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:524 +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_nat_edit.php:530 +#: usr/local/www/firewall_rules_edit.php:856 +#: usr/local/www/firewall_nat_edit.php:525 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_nat_edit.php:537 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_nat_edit.php:538 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_nat_edit.php:538 +msgid "Choose which IP protocol this rule should match." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/firewall_nat_edit.php:540 +msgid "Hint: in most cases, you should specify" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +msgid "TCP" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/diag_ipsec_sad.php:135 usr/local/www/diag_ipsec_spd.php:144 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/diag_ipsec_sad.php:136 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/diag_ipsec_spd.php:145 +#: usr/local/www/firewall_rules_edit.php:856 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/diag_ipsec_spd.php:145 usr/local/www/diag_ipsec_sad.php:136 +msgid "here." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_nat_edit.php:538 +#: usr/local/www/firewall_nat_edit.php:537 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/firewall_nat_edit.php:544 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/firewall_nat_edit.php:545 +msgid "Show source address and port range" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:589 +#: usr/local/www/firewall_rules_edit.php:913 +#: usr/local/www/firewall_rules_edit.php:948 +#: usr/local/www/firewall_nat_edit.php:596 +#: usr/local/www/firewall_nat_edit.php:595 +#: usr/local/www/firewall_rules_edit.php:957 +#: usr/local/www/firewall_nat_edit.php:590 +#: usr/local/www/firewall_rules_edit.php:970 +#: usr/local/www/firewall_nat_edit.php:602 +#: usr/local/www/firewall_rules_edit.php:969 +#: usr/local/www/firewall_nat_edit.php:603 +#: usr/local/www/firewall_rules_edit.php:969 +#: usr/local/www/firewall_nat_edit.php:603 +msgid "Source port range" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:593 +#: usr/local/www/firewall_nat_edit.php:705 +#: usr/local/www/firewall_rules_edit.php:917 +#: usr/local/www/firewall_rules_edit.php:1009 +#: usr/local/www/firewall_rules_edit.php:952 +#: usr/local/www/firewall_rules_edit.php:1044 +#: usr/local/www/firewall_nat_edit.php:600 +#: usr/local/www/firewall_nat_edit.php:712 +#: usr/local/www/firewall_nat_edit.php:599 +#: usr/local/www/firewall_nat_edit.php:711 +#: usr/local/www/firewall_rules_edit.php:961 +#: usr/local/www/firewall_rules_edit.php:1059 +#: usr/local/www/firewall_nat_edit.php:594 +#: usr/local/www/firewall_nat_edit.php:706 +#: usr/local/www/firewall_rules_edit.php:974 +#: usr/local/www/firewall_rules_edit.php:1072 +#: usr/local/www/firewall_nat_edit.php:606 +#: usr/local/www/firewall_nat_edit.php:718 +#: usr/local/www/firewall_rules_edit.php:973 +#: usr/local/www/firewall_rules_edit.php:1071 +#: usr/local/www/firewall_nat_edit.php:607 +#: usr/local/www/firewall_nat_edit.php:719 +#: usr/local/www/firewall_rules_edit.php:973 +#: usr/local/www/firewall_rules_edit.php:1071 +#: usr/local/www/firewall_nat_edit.php:607 +#: usr/local/www/firewall_nat_edit.php:719 +msgid "from:" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:596 +#: usr/local/www/firewall_nat_edit.php:609 +#: usr/local/www/firewall_nat_edit.php:708 +#: usr/local/www/firewall_nat_edit.php:721 +#: usr/local/www/firewall_nat_edit.php:751 +#: usr/local/www/firewall_rules_edit.php:920 +#: usr/local/www/firewall_rules_edit.php:933 +#: usr/local/www/firewall_rules_edit.php:1012 +#: usr/local/www/firewall_rules_edit.php:1025 +#: usr/local/www/firewall_rules_edit.php:955 +#: usr/local/www/firewall_rules_edit.php:968 +#: usr/local/www/firewall_rules_edit.php:1047 +#: usr/local/www/firewall_rules_edit.php:1060 +#: usr/local/www/firewall_nat_edit.php:603 +#: usr/local/www/firewall_nat_edit.php:616 +#: usr/local/www/firewall_nat_edit.php:715 +#: usr/local/www/firewall_nat_edit.php:728 +#: usr/local/www/firewall_nat_edit.php:758 +#: usr/local/www/firewall_nat_edit.php:602 +#: usr/local/www/firewall_nat_edit.php:615 +#: usr/local/www/firewall_nat_edit.php:714 +#: usr/local/www/firewall_nat_edit.php:727 +#: usr/local/www/firewall_nat_edit.php:757 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_rules_edit.php:977 +#: usr/local/www/firewall_rules_edit.php:1062 +#: usr/local/www/firewall_rules_edit.php:1075 +#: usr/local/www/firewall_nat_edit.php:597 +#: usr/local/www/firewall_nat_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:709 +#: usr/local/www/firewall_nat_edit.php:722 +#: usr/local/www/firewall_nat_edit.php:752 +#: usr/local/www/firewall_rules_edit.php:990 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/firewall_nat_edit.php:622 +#: usr/local/www/firewall_nat_edit.php:734 +#: usr/local/www/firewall_nat_edit.php:764 +#: usr/local/www/firewall_rules_edit.php:976 +#: usr/local/www/firewall_rules_edit.php:989 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:1087 +#: usr/local/www/firewall_nat_edit.php:623 +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_nat_edit.php:765 +#: usr/local/www/firewall_rules_edit.php:976 +#: usr/local/www/firewall_rules_edit.php:989 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:1087 +#: usr/local/www/firewall_nat_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:623 +#: usr/local/www/firewall_nat_edit.php:722 +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_nat_edit.php:765 +msgid "other" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:606 +#: usr/local/www/firewall_nat_edit.php:718 +#: usr/local/www/firewall_rules_edit.php:930 +#: usr/local/www/firewall_rules_edit.php:1022 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/firewall_rules_edit.php:1057 +#: usr/local/www/firewall_nat_edit.php:613 +#: usr/local/www/firewall_nat_edit.php:725 +#: usr/local/www/firewall_nat_edit.php:612 +#: usr/local/www/firewall_nat_edit.php:724 +#: usr/local/www/firewall_rules_edit.php:974 +#: usr/local/www/firewall_rules_edit.php:1072 +#: usr/local/www/firewall_nat_edit.php:607 +#: usr/local/www/firewall_nat_edit.php:719 +#: usr/local/www/firewall_rules_edit.php:987 +#: usr/local/www/firewall_rules_edit.php:1085 +#: usr/local/www/firewall_nat_edit.php:619 +#: usr/local/www/firewall_nat_edit.php:731 +#: usr/local/www/firewall_rules_edit.php:986 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:732 +#: usr/local/www/firewall_rules_edit.php:986 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:732 +msgid "to:" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "Specify the source port or port range for this rule" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "This is usually" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "random" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "" +"and almost never equal to the destination port range (and should usually be " +"'any')" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:736 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1102 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:748 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1101 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1101 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:749 +msgid "Hint: you can leave the" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "field empty if you only want to filter a single port." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:701 +#: usr/local/www/firewall_nat_edit.php:708 +#: usr/local/www/firewall_nat_edit.php:707 +#: usr/local/www/firewall_nat_edit.php:702 +#: usr/local/www/firewall_nat_edit.php:714 +#: usr/local/www/firewall_nat_edit.php:715 +#: usr/local/www/firewall_nat_edit.php:715 +msgid "Destination port range" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:733 +#: usr/local/www/firewall_nat_edit.php:740 +#: usr/local/www/firewall_nat_edit.php:739 +#: usr/local/www/firewall_nat_edit.php:734 +#: usr/local/www/firewall_nat_edit.php:746 +#: usr/local/www/firewall_nat_edit.php:747 +#: usr/local/www/firewall_nat_edit.php:747 +msgid "" +"Specify the port or port range for the destination of the packet for this " +"mapping." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/firewall_nat_edit.php:736 +#: usr/local/www/firewall_nat_edit.php:748 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_nat_edit.php:749 +msgid "field empty if you only want to map a single port" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:743 +#: usr/local/www/firewall_nat_edit.php:750 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_nat_edit.php:744 +#: usr/local/www/firewall_nat_edit.php:756 +#: usr/local/www/firewall_nat_edit.php:757 +#: usr/local/www/firewall_nat_edit.php:757 +msgid "" +"Enter the internal IP address of the server on which you want to map the " +"ports." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:748 +#: usr/local/www/firewall_nat_edit.php:755 +#: usr/local/www/firewall_nat_edit.php:754 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_nat_edit.php:761 +#: usr/local/www/firewall_nat_edit.php:762 +#: usr/local/www/firewall_nat_edit.php:762 +msgid "Redirect target port" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:762 +#: usr/local/www/firewall_nat_edit.php:769 +#: usr/local/www/firewall_nat_edit.php:768 +#: usr/local/www/firewall_nat_edit.php:763 +#: usr/local/www/firewall_nat_edit.php:775 +#: usr/local/www/firewall_nat_edit.php:776 +#: usr/local/www/firewall_nat_edit.php:776 +msgid "" +"Specify the port on the machine with the IP address entered above. In case " +"of a port range, specify the beginning port of the range (the end port will " +"be calculated automatically)." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:766 +#: usr/local/www/firewall_nat_edit.php:773 +#: usr/local/www/firewall_nat_edit.php:772 +#: usr/local/www/firewall_nat_edit.php:767 +#: usr/local/www/firewall_nat_edit.php:779 +#: usr/local/www/firewall_nat_edit.php:780 +#: usr/local/www/firewall_nat_edit.php:780 +msgid "Hint: this is usually identical to the 'from' port above" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:776 +#: usr/local/www/firewall_nat_out_edit.php:629 +#: usr/local/www/firewall_rules_edit.php:1238 +#: usr/local/www/firewall_nat_out_edit.php:642 +#: usr/local/www/firewall_rules_edit.php:1273 +#: usr/local/www/firewall_nat_edit.php:783 +#: usr/local/www/firewall_nat_edit.php:782 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_nat_edit.php:777 +#: usr/local/www/firewall_nat_out_edit.php:644 +#: usr/local/www/firewall_rules_edit.php:1295 +#: usr/local/www/firewall_nat_edit.php:789 +#: usr/local/www/firewall_nat_out_edit.php:656 +#: usr/local/www/firewall_rules_edit.php:1294 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/firewall_rules_edit.php:1294 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/firewall_nat_out_edit.php:656 +msgid "No XMLRPC Sync" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:779 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/firewall_nat_edit.php:785 +msgid "" +"HINT: This prevents the rule from automatically syncing to other CARP members" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:825 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/firewall_nat_edit.php:833 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/firewall_nat_edit.php:832 +#: usr/local/www/firewall_nat_edit.php:796 +#: usr/local/www/firewall_nat_edit.php:827 +#: usr/local/www/firewall_nat_edit.php:808 +#: usr/local/www/firewall_nat_edit.php:839 +#: usr/local/www/firewall_nat_edit.php:809 +#: usr/local/www/firewall_nat_edit.php:840 +#: usr/local/www/firewall_nat_edit.php:809 +#: usr/local/www/firewall_nat_edit.php:840 +msgid "Filter rule association" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:798 +#: usr/local/www/firewall_nat_edit.php:831 +#: usr/local/www/firewall_nat_edit.php:806 +#: usr/local/www/firewall_nat_edit.php:839 +#: usr/local/www/firewall_nat_edit.php:805 +#: usr/local/www/firewall_nat_edit.php:838 +#: usr/local/www/firewall_nat_edit.php:800 +#: usr/local/www/firewall_nat_edit.php:833 +#: usr/local/www/firewall_nat_edit.php:812 +#: usr/local/www/firewall_nat_edit.php:845 +#: usr/local/www/firewall_nat_edit.php:813 +#: usr/local/www/firewall_nat_edit.php:846 +#: usr/local/www/firewall_nat_edit.php:813 +#: usr/local/www/firewall_nat_edit.php:846 +msgid "Pass" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:808 +#: usr/local/www/firewall_nat_edit.php:816 +#: usr/local/www/firewall_nat_edit.php:815 +#: usr/local/www/firewall_nat_edit.php:810 +#: usr/local/www/firewall_nat_edit.php:822 +#: usr/local/www/firewall_nat_edit.php:823 +#: usr/local/www/firewall_nat_edit.php:823 +msgid "View the filter rule" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:816 +#: usr/local/www/firewall_nat_edit.php:824 +#: usr/local/www/firewall_nat_edit.php:823 +#: usr/local/www/firewall_nat_edit.php:818 +#: usr/local/www/firewall_nat_edit.php:830 +#: usr/local/www/firewall_nat_edit.php:831 +#: usr/local/www/firewall_nat_edit.php:831 +msgid "Create new associated filter rule" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:829 +#: usr/local/www/firewall_nat_edit.php:837 +#: usr/local/www/firewall_nat_edit.php:836 +#: usr/local/www/firewall_nat_edit.php:831 +#: usr/local/www/firewall_nat_edit.php:843 +#: usr/local/www/firewall_nat_edit.php:844 +#: usr/local/www/firewall_nat_edit.php:844 +msgid "Add associated filter rule" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:830 +#: usr/local/www/firewall_nat_edit.php:838 +#: usr/local/www/firewall_nat_edit.php:837 +#: usr/local/www/firewall_nat_edit.php:832 +#: usr/local/www/firewall_nat_edit.php:844 +#: usr/local/www/firewall_nat_edit.php:845 +#: usr/local/www/firewall_nat_edit.php:845 +msgid "Add unassociated filter rule" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:111 +#: usr/local/www/firewall_nat_out.php:112 +#: usr/local/www/firewall_nat_out.php:112 +#, php-format +msgid "Auto created rule for ISAKMP - %1$s to %2$s" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:121 +#: usr/local/www/firewall_nat_out.php:123 +#: usr/local/www/firewall_nat_out.php:123 +#, php-format +msgid "Auto created rule for %1$s to %2$s" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:131 +#: usr/local/www/firewall_nat_out.php:135 +#: usr/local/www/firewall_nat_out.php:135 +#, php-format +msgid "Auto created rule for localhost to %1$s" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:147 +#: usr/local/www/firewall_nat_out.php:148 +#: usr/local/www/firewall_nat_out.php:152 +#: usr/local/www/firewall_nat_out.php:152 +msgid "Auto created rule for PPTP server" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:167 +#: usr/local/www/firewall_nat_out.php:168 +#: usr/local/www/firewall_nat_out.php:173 +#: usr/local/www/firewall_nat_out.php:173 +msgid "Auto created rule for PPPoE server" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:187 +#: usr/local/www/firewall_nat_out.php:188 +#: usr/local/www/firewall_nat_out.php:194 +#: usr/local/www/firewall_nat_out.php:194 +msgid "Auto created rule for L2TP server" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:201 +#: usr/local/www/firewall_nat_out.php:202 +#: usr/local/www/firewall_nat_out.php:209 +#: usr/local/www/firewall_nat_out.php:209 +msgid "Auto created rule for OpenVPN server" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:212 +#: usr/local/www/firewall_nat_out.php:213 +#: usr/local/www/firewall_nat_out.php:220 +#: usr/local/www/firewall_nat_out.php:220 +msgid "Default rules for each interface have been created." +msgstr "" + +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_out.php:304 +#: usr/local/www/firewall_nat_out.php:305 +#: usr/local/www/firewall_nat_out.php:312 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_out.php:311 +msgid "The NAT configuration has been changed." +msgstr "" + +#: usr/local/www/firewall_nat_out.php:310 +#: usr/local/www/firewall_nat_out.php:320 +#: usr/local/www/firewall_nat_out.php:321 +#: usr/local/www/firewall_nat_out.php:328 +#: usr/local/www/firewall_nat_out.php:327 +#: usr/local/www/firewall_nat_out.php:327 +msgid "Mode:" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_out.php:323 +#: usr/local/www/firewall_nat_out.php:324 +#: usr/local/www/firewall_nat_out.php:331 +#: usr/local/www/firewall_nat_out.php:330 +#: usr/local/www/firewall_nat_out.php:330 +msgid "Automatic outbound NAT rule generation" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_out.php:323 +#: usr/local/www/firewall_nat_out.php:324 +#: usr/local/www/firewall_nat_out.php:331 +#: usr/local/www/firewall_nat_out.php:330 +#: usr/local/www/firewall_nat_out.php:330 +msgid "(IPsec passthrough included)" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat_out.php:328 +#: usr/local/www/firewall_nat_out.php:329 +#: usr/local/www/firewall_nat_out.php:336 +#: usr/local/www/firewall_nat_out.php:335 +#: usr/local/www/firewall_nat_out.php:335 +msgid "Manual Outbound NAT rule generation" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat_out.php:328 +#: usr/local/www/firewall_nat_out.php:329 +#: usr/local/www/firewall_nat_out.php:336 +#: usr/local/www/firewall_nat_out.php:335 +#: usr/local/www/firewall_nat_out.php:335 +msgid "(AON - Advanced Outbound NAT)" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:336 +#: usr/local/www/firewall_nat_out.php:346 +#: usr/local/www/firewall_nat_out.php:347 +#: usr/local/www/firewall_nat_out.php:354 +#: usr/local/www/firewall_nat_out.php:353 +#: usr/local/www/firewall_nat_out.php:353 +msgid "Mappings:" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:343 +#: usr/local/www/firewall_nat_out.php:353 +#: usr/local/www/firewall_nat_out.php:354 usr/local/www/diag_testport.php:129 +#: usr/local/www/diag_system_pftop.php:160 +#: usr/local/www/diag_logs_filter.php:167 +#: usr/local/www/firewall_nat_out.php:361 +#: usr/local/www/firewall_nat_out.php:360 usr/local/www/diag_testport.php:129 +#: usr/local/www/diag_logs_filter.php:167 +#: usr/local/www/diag_system_pftop.php:160 +#: usr/local/www/firewall_nat_out.php:360 +msgid "Source Port" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:345 +#: usr/local/www/firewall_nat_out.php:355 +#: usr/local/www/firewall_nat_out.php:356 +#: usr/local/www/diag_system_pftop.php:153 +#: usr/local/www/diag_logs_filter.php:189 +#: usr/local/www/firewall_nat_out.php:363 +#: usr/local/www/firewall_nat_out.php:362 +#: usr/local/www/diag_logs_filter.php:189 +#: usr/local/www/diag_system_pftop.php:153 +#: usr/local/www/firewall_nat_out.php:362 +msgid "Destination Port" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:346 +#: usr/local/www/firewall_nat_out.php:356 +#: usr/local/www/firewall_nat_out.php:357 +#: usr/local/www/firewall_nat_out.php:364 +#: usr/local/www/firewall_nat_out.php:363 +#: usr/local/www/firewall_nat_out.php:363 +msgid "NAT Address" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:347 +#: usr/local/www/firewall_nat_out.php:357 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/firewall_nat_out.php:365 +#: usr/local/www/firewall_nat_out.php:364 +#: usr/local/www/firewall_nat_out.php:364 +msgid "NAT Port" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:348 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/firewall_nat_out.php:366 +#: usr/local/www/firewall_nat_out.php:365 +#: usr/local/www/firewall_nat_out.php:365 +msgid "Static Port" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:354 +#: usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_nat_out.php:364 +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:365 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:459 +#: usr/local/www/firewall_nat_out.php:372 +#: usr/local/www/firewall_nat_out.php:466 +#: usr/local/www/firewall_nat_out.php:371 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:371 +#: usr/local/www/firewall_nat_out.php:465 +msgid "add new mapping" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:425 +#: usr/local/www/firewall_nat_out.php:435 +#: usr/local/www/firewall_nat_out.php:436 +#: usr/local/www/firewall_nat_out.php:433 +#: usr/local/www/firewall_nat_out.php:440 +#: usr/local/www/firewall_nat_out.php:439 +#: usr/local/www/firewall_nat_out.php:439 +msgid "YES" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:427 +#: usr/local/www/firewall_nat_out.php:437 +#: usr/local/www/firewall_nat_out.php:438 +#: usr/local/www/firewall_nat_out.php:435 +#: usr/local/www/firewall_nat_out.php:442 +#: usr/local/www/firewall_nat_out.php:441 +#: usr/local/www/firewall_nat_out.php:441 +msgid "NO" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:436 +#: usr/local/www/firewall_nat_out.php:447 +#: usr/local/www/firewall_nat_out.php:448 +#: usr/local/www/firewall_nat_out.php:445 +#: usr/local/www/firewall_nat_out.php:452 +#: usr/local/www/firewall_nat_out.php:451 +#: usr/local/www/firewall_nat_out.php:451 +msgid "edit mapping" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:439 usr/local/www/firewall_rules.php:435 +#: usr/local/www/firewall_rules.php:464 usr/local/www/firewall_rules.php:492 +#: usr/local/www/firewall_rules.php:775 usr/local/www/firewall_nat.php:309 +#: usr/local/www/firewall_nat_out.php:446 usr/local/www/firewall_rules.php:429 +#: usr/local/www/firewall_rules.php:458 usr/local/www/firewall_rules.php:486 +#: usr/local/www/firewall_rules.php:772 usr/local/www/firewall_nat_out.php:447 +#: usr/local/www/firewall_nat.php:322 usr/local/www/firewall_rules.php:422 +#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479 +#: usr/local/www/firewall_rules.php:765 usr/local/www/firewall_nat_out.php:444 +#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_rules.php:421 +#: usr/local/www/firewall_rules.php:450 usr/local/www/firewall_rules.php:478 +#: usr/local/www/firewall_nat.php:325 usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_nat.php:325 usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_rules.php:421 usr/local/www/firewall_rules.php:450 +#: usr/local/www/firewall_rules.php:478 usr/local/www/firewall_rules.php:765 +msgid "move selected rules before this rule" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:440 usr/local/www/firewall_nat.php:314 +#: usr/local/www/firewall_nat_out.php:451 +#: usr/local/www/firewall_nat_out.php:452 usr/local/www/firewall_nat.php:327 +#: usr/local/www/firewall_nat_out.php:449 +#: usr/local/www/firewall_nat_out.php:456 usr/local/www/firewall_nat.php:330 +#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:330 +#: usr/local/www/firewall_nat_out.php:455 +msgid "add a new NAT based on this one" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:449 +#: usr/local/www/firewall_nat_out.php:460 +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:458 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_nat_out.php:464 +msgid "move selected mappings to end" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:453 usr/local/www/firewall_rules.php:391 +#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:823 +#: usr/local/www/firewall_rules.php:824 usr/local/www/firewall_nat.php:209 +#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:332 +#: usr/local/www/firewall_nat.php:334 usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_rules.php:395 usr/local/www/firewall_rules.php:396 +#: usr/local/www/firewall_rules.php:825 usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat.php:214 usr/local/www/firewall_nat.php:216 +#: usr/local/www/firewall_nat.php:345 usr/local/www/firewall_nat.php:347 +#: usr/local/www/firewall_rules.php:388 usr/local/www/firewall_rules.php:389 +#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_rules.php:818 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:469 usr/local/www/firewall_rules.php:386 +#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:819 +#: usr/local/www/firewall_rules.php:820 usr/local/www/firewall_nat.php:217 +#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:348 +#: usr/local/www/firewall_nat.php:350 usr/local/www/firewall_nat_out.php:468 +#: usr/local/www/firewall_nat.php:217 usr/local/www/firewall_nat.php:219 +#: usr/local/www/firewall_nat.php:348 usr/local/www/firewall_nat.php:350 +#: usr/local/www/firewall_nat_out.php:468 usr/local/www/firewall_rules.php:386 +#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:819 +#: usr/local/www/firewall_rules.php:820 +msgid "delete selected rules" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:453 +#: usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:469 +#: usr/local/www/firewall_nat_out.php:468 +#: usr/local/www/firewall_nat_out.php:468 +msgid "delete selected mappings" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:453 +#: usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:469 +#: usr/local/www/firewall_nat_out.php:468 +#: usr/local/www/firewall_nat_out.php:468 +msgid "Do you really want to delete the selected mappings?" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:472 +#: usr/local/www/firewall_nat_out.php:473 +#: usr/local/www/firewall_nat_out.php:470 +#: usr/local/www/firewall_nat_out.php:477 +#: usr/local/www/firewall_nat_out.php:476 +#: usr/local/www/firewall_nat_out.php:476 +msgid "" +"With automatic outbound NAT enabled, a mapping is automatically created for " +"each interface's subnet (except WAN-type connections) and the rules on this " +"page are ignored.

    If manual outbound NAT is enabled, outbound NAT " +"rules will not be automatically generated and only the mappings you specify " +"on this page will be used.

    If a target address other than a WAN-" +"type interface's IP address is used, then depending on the way the WAN " +"connection is setup, a " +msgstr "" + +#: usr/local/www/firewall_nat_out.php:469 +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/carp_status.php:139 +#: usr/local/www/system_gateway_groups_edit.php:252 +#: usr/local/www/firewall_nat_out.php:480 +#: usr/local/www/firewall_nat_out_edit.php:601 +#: usr/local/www/system_gateway_groups_edit.php:312 +#: usr/local/www/firewall_nat_out.php:481 usr/local/www/carp_status.php:132 +#: usr/local/www/firewall_nat_out.php:478 +#: usr/local/www/firewall_nat_out_edit.php:604 +#: usr/local/www/firewall_nat_out.php:485 +#: usr/local/www/system_gateway_groups_edit.php:316 +#: usr/local/www/firewall_nat_out_edit.php:616 +#: usr/local/www/firewall_nat_out.php:484 +#: usr/local/www/firewall_nat_out.php:484 +#: usr/local/www/system_gateway_groups_edit.php:316 +#: usr/local/www/firewall_nat_out_edit.php:616 +#: usr/local/www/carp_status.php:132 +msgid "Virtual IP" +msgstr "" + +#: usr/local/www/firewall_nat_out.php:470 +#: usr/local/www/firewall_nat_out.php:481 +#: usr/local/www/firewall_nat_out.php:482 +#: usr/local/www/firewall_nat_out.php:479 +#: usr/local/www/firewall_nat_out.php:486 +#: usr/local/www/firewall_nat_out.php:485 +#: usr/local/www/firewall_nat_out.php:485 +msgid " may also be required." +msgstr "" + +#: usr/local/www/firewall_nat_out.php:472 +#: usr/local/www/firewall_nat_out.php:483 +#: usr/local/www/firewall_nat_out.php:484 +#: usr/local/www/firewall_nat_out.php:481 +#: usr/local/www/firewall_nat_out.php:488 +#: usr/local/www/firewall_nat_out.php:487 +#: usr/local/www/firewall_nat_out.php:487 +msgid "" +"To completely disable outbound NAT, switch to Manual Outbound NAT then " +"delete any NAT rules that appear in the list." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:140 +msgid "Source bit count" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_rules_edit.php:310 +#: usr/local/www/firewall_rules_edit.php:334 +#: usr/local/www/firewall_rules_edit.php:333 +#: usr/local/www/firewall_rules_edit.php:336 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_rules_edit.php:342 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_rules_edit.php:342 +#: usr/local/www/firewall_nat_out_edit.php:140 +msgid "Destination bit count" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:137 +#: usr/local/www/firewall_nat_out_edit.php:150 +#: usr/local/www/firewall_nat_out_edit.php:154 +#: usr/local/www/firewall_nat_out_edit.php:160 +#: usr/local/www/firewall_nat_out_edit.php:160 +msgid "" +"You must supply either a valid port or port alias for the source port entry." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:153 +#: usr/local/www/firewall_nat_out_edit.php:157 +#: usr/local/www/firewall_nat_out_edit.php:163 +#: usr/local/www/firewall_nat_out_edit.php:163 +msgid "" +"You must supply either a valid port or port alias for the destination port " +"entry." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:143 +#: usr/local/www/firewall_nat_out_edit.php:156 +#: usr/local/www/firewall_nat_out_edit.php:160 +#: usr/local/www/firewall_nat_out_edit.php:166 +#: usr/local/www/firewall_nat_out_edit.php:166 +msgid "You must supply a valid port for the NAT port entry." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:147 +#: usr/local/www/firewall_nat_out_edit.php:160 +#: usr/local/www/firewall_nat_out_edit.php:164 +#: usr/local/www/firewall_nat_out_edit.php:170 +#: usr/local/www/firewall_nat_out_edit.php:170 +msgid "A valid source must be specified." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:155 +#: usr/local/www/firewall_nat_out_edit.php:168 +#: usr/local/www/firewall_nat_out_edit.php:172 +#: usr/local/www/firewall_nat_out_edit.php:178 +#: usr/local/www/firewall_nat_out_edit.php:178 +msgid "A valid destination must be specified." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:163 +#: usr/local/www/firewall_nat_out_edit.php:176 +#: usr/local/www/firewall_nat_out_edit.php:180 +#: usr/local/www/firewall_nat_out_edit.php:186 +#: usr/local/www/firewall_nat_out_edit.php:186 +msgid "Negating destination address of \"any\" is invalid." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:168 +#: usr/local/www/firewall_nat_out_edit.php:181 +#: usr/local/www/firewall_nat_out_edit.php:185 +#: usr/local/www/firewall_nat_out_edit.php:191 +#: usr/local/www/firewall_nat_out_edit.php:191 +msgid "A valid target IP address must be specified." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:173 +#: usr/local/www/firewall_nat_out_edit.php:186 +#: usr/local/www/firewall_nat_out_edit.php:190 +#: usr/local/www/firewall_nat_out_edit.php:196 +#: usr/local/www/firewall_nat_out_edit.php:196 +msgid "A valid target IP must be specified when using the 'Other Subnet' type." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:176 +#: usr/local/www/firewall_nat_out_edit.php:189 +#: usr/local/www/firewall_nat_out_edit.php:193 +#: usr/local/www/firewall_nat_out_edit.php:199 +#: usr/local/www/firewall_nat_out_edit.php:199 +msgid "" +"A valid target bit count must be specified when using the 'Other Subnet' " +"type." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:189 +#: usr/local/www/firewall_nat_out_edit.php:202 +#: usr/local/www/firewall_nat_out_edit.php:206 +#: usr/local/www/firewall_nat_out_edit.php:212 +#: usr/local/www/firewall_nat_out_edit.php:212 +msgid "Only Round Robin pool options may be chosen when selecting an alias." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:403 +#: usr/local/www/firewall_nat_out_edit.php:416 +#: usr/local/www/firewall_nat_out_edit.php:420 +#: usr/local/www/firewall_nat_out_edit.php:432 +#: usr/local/www/firewall_nat_out_edit.php:432 +msgid "Edit Advanced Outbound NAT entry" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:410 +#: usr/local/www/firewall_nat_out_edit.php:423 +#: usr/local/www/firewall_nat_out_edit.php:427 +#: usr/local/www/firewall_nat_out_edit.php:439 +#: usr/local/www/firewall_nat_out_edit.php:439 +msgid "Do not NAT" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:413 +#: usr/local/www/firewall_nat_out_edit.php:426 +#: usr/local/www/firewall_nat_out_edit.php:430 +#: usr/local/www/firewall_nat_out_edit.php:442 +#: usr/local/www/firewall_nat_out_edit.php:442 +msgid "" +"Enabling this option will disable NAT for traffic matching this rule and " +"stop processing Outbound NAT rules." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:414 +#: usr/local/www/firewall_nat_out_edit.php:427 +#: usr/local/www/firewall_nat_out_edit.php:431 +#: usr/local/www/firewall_nat_out_edit.php:443 +#: usr/local/www/firewall_nat_out_edit.php:443 +msgid "Hint: in most cases, you won't use this option." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:463 +#: usr/local/www/firewall_nat_out_edit.php:476 +#: usr/local/www/firewall_nat_out_edit.php:480 +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:492 +msgid "Choose which protocol this rule should match." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:464 +#: usr/local/www/firewall_nat_out_edit.php:477 +#: usr/local/www/firewall_nat_out_edit.php:481 +#: usr/local/www/firewall_nat_out_edit.php:493 +#: usr/local/www/firewall_nat_out_edit.php:493 +#, php-format +msgid "Hint: in most cases, you should specify %s any %s here." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:488 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:517 +#: usr/local/www/firewall_nat_out_edit.php:519 +#: usr/local/www/firewall_nat_out_edit.php:519 +msgid "Enter the source network for the outbound NAT mapping." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:491 +#: usr/local/www/firewall_nat_out_edit.php:504 +#: usr/local/www/firewall_nat_out_edit.php:508 +#: usr/local/www/firewall_nat_out_edit.php:520 +#: usr/local/www/firewall_nat_out_edit.php:522 +#: usr/local/www/firewall_nat_out_edit.php:522 +msgid "Source port:" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:509 +#: usr/local/www/firewall_nat_out_edit.php:521 +msgid "" +"(leave \n" +"blank for any)" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:526 +#: usr/local/www/firewall_nat_out_edit.php:539 +#: usr/local/www/firewall_nat_out_edit.php:543 +#: usr/local/www/firewall_nat_out_edit.php:555 +#: usr/local/www/firewall_nat_out_edit.php:556 +#: usr/local/www/firewall_nat_out_edit.php:556 +msgid "Enter the destination network for the outbound NAT mapping." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:530 +#: usr/local/www/firewall_nat_out_edit.php:543 +#: usr/local/www/firewall_nat_out_edit.php:547 +#: usr/local/www/firewall_nat_out_edit.php:559 +#: usr/local/www/firewall_nat_out_edit.php:560 +#: usr/local/www/firewall_nat_out_edit.php:560 +msgid "Destination port:" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:531 +#: usr/local/www/firewall_nat_out_edit.php:544 +#: usr/local/www/firewall_nat_out_edit.php:548 +#: usr/local/www/firewall_nat_out_edit.php:560 +msgid "" +"(leave blank for \n" +"any)" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:538 +#: usr/local/www/firewall_nat_out_edit.php:551 +#: usr/local/www/firewall_nat_out_edit.php:555 +#: usr/local/www/firewall_nat_out_edit.php:567 +#: usr/local/www/firewall_nat_out_edit.php:567 +msgid "Translation" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:544 +#: usr/local/www/firewall_nat_out_edit.php:557 +#: usr/local/www/firewall_nat_out_edit.php:561 +#: usr/local/www/firewall_nat_out_edit.php:573 +#: usr/local/www/firewall_nat_out_edit.php:573 +msgid "Interface address" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:568 +#: usr/local/www/firewall_nat_out_edit.php:581 +#: usr/local/www/firewall_nat_out_edit.php:585 +#: usr/local/www/firewall_nat_out_edit.php:597 +#: usr/local/www/firewall_nat_out_edit.php:597 +msgid "Other Subnet (Enter Below)" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:575 +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/firewall_nat_out_edit.php:591 +#: usr/local/www/firewall_nat_out_edit.php:603 +#: usr/local/www/firewall_nat_out_edit.php:603 +msgid "Other Subnet:" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:586 +#: usr/local/www/firewall_nat_out_edit.php:599 +#: usr/local/www/firewall_nat_out_edit.php:602 +#: usr/local/www/firewall_nat_out_edit.php:614 +#: usr/local/www/firewall_nat_out_edit.php:614 +msgid "Packets matching this rule will be mapped to the IP address given here." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:587 +#: usr/local/www/firewall_nat_out_edit.php:600 +#: usr/local/www/firewall_nat_out_edit.php:603 +#: usr/local/www/firewall_nat_out_edit.php:615 +#: usr/local/www/firewall_nat_out_edit.php:615 +msgid "" +"If you want this rule to apply to another IP address rather than the IP " +"address of the interface chosen above, select it here (you will need to " +"define " +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/firewall_nat_out_edit.php:601 +#: usr/local/www/firewall_nat_out_edit.php:604 +#: usr/local/www/firewall_nat_out_edit.php:616 +#: usr/local/www/firewall_nat_out_edit.php:616 +msgid "addresses on the interface first)." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:589 +#: usr/local/www/firewall_nat_out_edit.php:602 +msgid "" +"Also note that if you are trying to redirect connections on the LAN select " +"the \"any\" option." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:605 +#: usr/local/www/firewall_nat_out_edit.php:618 +#: usr/local/www/firewall_nat_out_edit.php:620 +#: usr/local/www/firewall_nat_out_edit.php:632 +#: usr/local/www/firewall_nat_out_edit.php:632 +msgid "" +"Only Round Robin types work with Host Aliases. Any type can be used with a " +"Subnet." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:606 +#: usr/local/www/firewall_nat_out_edit.php:619 +#: usr/local/www/firewall_nat_out_edit.php:621 +#: usr/local/www/firewall_nat_out_edit.php:633 +#: usr/local/www/firewall_nat_out_edit.php:633 +msgid "Round Robin: Loops through the translation addresses." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:607 +#: usr/local/www/firewall_nat_out_edit.php:620 +#: usr/local/www/firewall_nat_out_edit.php:622 +#: usr/local/www/firewall_nat_out_edit.php:634 +#: usr/local/www/firewall_nat_out_edit.php:634 +msgid "Random: Selects an address from the translation address pool at random." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:608 +#: usr/local/www/firewall_nat_out_edit.php:621 +#: usr/local/www/firewall_nat_out_edit.php:623 +#: usr/local/www/firewall_nat_out_edit.php:635 +#: usr/local/www/firewall_nat_out_edit.php:635 +msgid "" +"Source Hash: Uses a hash of the source address to determine the translation " +"address, ensuring that the redirection address is always the same for a " +"given source." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:609 +#: usr/local/www/firewall_nat_out_edit.php:622 +#: usr/local/www/firewall_nat_out_edit.php:624 +#: usr/local/www/firewall_nat_out_edit.php:636 +#: usr/local/www/firewall_nat_out_edit.php:636 +msgid "" +"Bitmask: Applies the subnet mask and keeps the last portion identical; " +"10.0.1.50 -> x.x.x.50." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:610 +#: usr/local/www/firewall_nat_out_edit.php:623 +#: usr/local/www/firewall_nat_out_edit.php:625 +#: usr/local/www/firewall_nat_out_edit.php:637 +#: usr/local/www/firewall_nat_out_edit.php:637 +msgid "" +"Sticky Address: The Sticky Address option can be used with the Random and " +"Round Robin pool types to ensure that a particular source address is always " +"mapped to the same translation address." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:615 +#: usr/local/www/firewall_nat_out_edit.php:628 +#: usr/local/www/firewall_nat_out_edit.php:630 +#: usr/local/www/firewall_nat_out_edit.php:642 +#: usr/local/www/firewall_nat_out_edit.php:642 +msgid "Port:" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:619 +#: usr/local/www/firewall_nat_out_edit.php:632 +#: usr/local/www/firewall_nat_out_edit.php:634 +#: usr/local/www/firewall_nat_out_edit.php:646 +#: usr/local/www/firewall_nat_out_edit.php:646 +msgid "Enter the source port for the outbound NAT mapping." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:622 +#: usr/local/www/firewall_nat_out_edit.php:635 +#: usr/local/www/firewall_nat_out_edit.php:637 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/firewall_nat_out_edit.php:649 +msgid "Static-port:" +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:632 +#: usr/local/www/firewall_nat_out_edit.php:645 +msgid "" +"HINT: This prevents the rule from automatically syncing to other CARP " +"members." +msgstr "" + +#: usr/local/www/firewall_rules.php:52 +#: usr/local/www/firewall_rules_edit.php:628 usr/local/www/fbegin.inc:112 +#: usr/local/www/fbegin.inc:129 usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/fbegin.inc:138 usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/firewall_rules.php:49 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/diag_system_pftop.php:139 usr/local/www/fbegin.inc:130 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/diag_system_pftop.php:139 usr/local/www/firewall_rules.php:49 +#: usr/local/www/fbegin.inc:130 +msgid "Rules" +msgstr "" + +#: usr/local/www/firewall_rules.php:129 +#: usr/local/www/firewall_rules_edit.php:828 +#: usr/local/www/firewall_rules_edit.php:863 +#: usr/local/www/firewall_rules.php:127 +#: usr/local/www/firewall_rules_edit.php:866 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules.php:127 +msgid "Echo request" +msgstr "" + +#: usr/local/www/firewall_rules.php:130 +#: usr/local/www/firewall_rules_edit.php:829 +#: usr/local/www/firewall_rules_edit.php:864 +#: usr/local/www/firewall_rules.php:128 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules.php:128 +msgid "Echo reply" +msgstr "" + +#: usr/local/www/firewall_rules.php:131 +#: usr/local/www/firewall_rules_edit.php:830 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules.php:129 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules.php:129 +msgid "Destination unreachable" +msgstr "" + +#: usr/local/www/firewall_rules.php:132 +#: usr/local/www/firewall_rules_edit.php:831 +#: usr/local/www/firewall_rules_edit.php:866 +#: usr/local/www/firewall_rules.php:130 +#: usr/local/www/firewall_rules_edit.php:869 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules.php:130 +msgid "Source quench" +msgstr "" + +#: usr/local/www/firewall_rules.php:133 +#: usr/local/www/firewall_rules_edit.php:832 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_rules.php:131 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules_edit.php:882 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules.php:131 +msgid "Redirect" +msgstr "" + +#: usr/local/www/firewall_rules.php:134 +#: usr/local/www/firewall_rules_edit.php:833 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_rules.php:132 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules_edit.php:883 +#: usr/local/www/firewall_rules_edit.php:882 +#: usr/local/www/firewall_rules_edit.php:882 +#: usr/local/www/firewall_rules.php:132 +msgid "Alternate Host" +msgstr "" + +#: usr/local/www/firewall_rules.php:135 +#: usr/local/www/firewall_rules_edit.php:834 +#: usr/local/www/firewall_rules_edit.php:869 +#: usr/local/www/firewall_rules.php:133 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules_edit.php:884 +#: usr/local/www/firewall_rules_edit.php:883 +#: usr/local/www/firewall_rules_edit.php:883 +#: usr/local/www/firewall_rules.php:133 +msgid "Router advertisement" +msgstr "" + +#: usr/local/www/firewall_rules.php:136 +#: usr/local/www/firewall_rules_edit.php:835 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules.php:134 +#: usr/local/www/firewall_rules_edit.php:873 +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules_edit.php:884 +#: usr/local/www/firewall_rules_edit.php:884 +#: usr/local/www/firewall_rules.php:134 +msgid "Router solicitation" +msgstr "" + +#: usr/local/www/firewall_rules.php:137 +#: usr/local/www/firewall_rules_edit.php:836 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules.php:135 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules.php:135 +msgid "Time exceeded" +msgstr "" + +#: usr/local/www/firewall_rules.php:138 +#: usr/local/www/firewall_rules_edit.php:837 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules.php:136 +#: usr/local/www/firewall_rules_edit.php:875 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules.php:136 +msgid "Invalid IP header" +msgstr "" + +#: usr/local/www/firewall_rules.php:139 +#: usr/local/www/firewall_rules_edit.php:838 +#: usr/local/www/firewall_rules_edit.php:873 +#: usr/local/www/firewall_rules.php:137 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules_edit.php:888 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules.php:137 +msgid "Timestamp" +msgstr "" + +#: usr/local/www/firewall_rules.php:140 +#: usr/local/www/firewall_rules_edit.php:839 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules.php:138 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:889 +#: usr/local/www/firewall_rules_edit.php:888 +#: usr/local/www/firewall_rules_edit.php:888 +#: usr/local/www/firewall_rules.php:138 +msgid "Timestamp reply" +msgstr "" + +#: usr/local/www/firewall_rules.php:141 +#: usr/local/www/firewall_rules_edit.php:840 +#: usr/local/www/firewall_rules_edit.php:875 +#: usr/local/www/firewall_rules.php:139 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules_edit.php:889 +#: usr/local/www/firewall_rules_edit.php:889 +#: usr/local/www/firewall_rules.php:139 +msgid "Information request" +msgstr "" + +#: usr/local/www/firewall_rules.php:142 +#: usr/local/www/firewall_rules_edit.php:841 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules.php:140 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules_edit.php:891 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules.php:140 +msgid "Information reply" +msgstr "" + +#: usr/local/www/firewall_rules.php:143 +#: usr/local/www/firewall_rules_edit.php:842 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules.php:141 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:892 +#: usr/local/www/firewall_rules_edit.php:891 +#: usr/local/www/firewall_rules_edit.php:891 +#: usr/local/www/firewall_rules.php:141 +msgid "Address mask request" +msgstr "" + +#: usr/local/www/firewall_rules.php:144 +#: usr/local/www/firewall_rules_edit.php:843 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules.php:142 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules_edit.php:893 +#: usr/local/www/firewall_rules_edit.php:892 +#: usr/local/www/firewall_rules_edit.php:892 +#: usr/local/www/firewall_rules.php:142 +msgid "Address mask reply" +msgstr "" + +#: usr/local/www/firewall_rules.php:201 usr/local/www/firewall_rules.php:205 +#: usr/local/www/firewall_rules.php:203 usr/local/www/firewall_rules.php:203 +#, php-format +msgid "" +"The settings have been applied. The firewall rules are now reloading in the " +"background.
    You can also %s monitor %s the reload progress" +msgstr "" + +#: usr/local/www/firewall_rules.php:315 usr/local/www/firewall_rules.php:317 +#: usr/local/www/firewall_rules.php:319 usr/local/www/firewall_rules.php:321 +#: usr/local/www/firewall_rules.php:312 usr/local/www/firewall_rules.php:314 +msgid "" +"The firewall rule configuration has been changed.
    You must apply the " +"changes in order for them to take effect." +msgstr "" + +#: usr/local/www/firewall_rules.php:338 usr/local/www/firewall_rules.php:342 +#: usr/local/www/firewall_rules.php:335 usr/local/www/firewall_rules.php:334 +#: usr/local/www/firewall_rules.php:334 +msgid "Floating" +msgstr "" + +#: usr/local/www/firewall_rules.php:359 +#: usr/local/www/load_balancer_relay_action_edit.php:510 +#: usr/local/www/load_balancer_relay_action_edit.php:509 +#: usr/local/www/firewall_rules.php:363 +#: usr/local/www/load_balancer_relay_action_edit.php:507 +#: usr/local/www/firewall_rules.php:356 usr/local/www/firewall_rules.php:354 +#: usr/local/www/load_balancer_relay_action_edit.php:507 +#: usr/local/www/firewall_rules.php:354 +msgid "ID" +msgstr "" + +#: usr/local/www/firewall_rules.php:368 +#: usr/local/www/firewall_rules_edit.php:1288 usr/local/www/interfaces.php:420 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1382 +#: usr/local/www/system_routes.php:127 usr/local/www/system_routes_edit.php:91 +#: usr/local/www/system_routes_edit.php:199 +#: usr/local/www/services_dhcp.php:655 usr/local/www/status_gateways.php:73 +#: usr/local/www/system_gateways.php:154 +#: usr/local/www/system_gateways_edit.php:376 +#: usr/local/www/services_dhcpv6.php:599 +#: usr/local/www/system_routes_edit.php:92 +#: usr/local/www/system_routes_edit.php:231 +#: usr/local/www/firewall_rules_edit.php:1355 +#: usr/local/www/firewall_rules.php:372 +#: usr/local/www/system_gateways_edit.php:397 +#: usr/local/www/services_dhcp.php:668 usr/local/www/interfaces.php:456 +#: usr/local/www/interfaces.php:509 usr/local/www/interfaces.php:1486 +#: usr/local/www/system_routes_edit.php:232 +#: usr/local/www/firewall_rules.php:365 +#: usr/local/www/system_gateways_edit.php:503 +#: usr/local/www/status_gateways.php:74 usr/local/www/services_dhcp.php:844 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:1474 +#: usr/local/www/system_gateways_edit.php:506 +#: usr/local/www/firewall_rules_edit.php:1370 +#: usr/local/www/services_dhcp_edit.php:410 +#: usr/local/www/diag_traceroute.php:98 usr/local/www/system_routes.php:131 +#: usr/local/www/services_dhcp.php:858 usr/local/www/interfaces.php:441 +#: usr/local/www/interfaces.php:494 usr/local/www/interfaces.php:1487 +#: usr/local/www/system_gateways_edit.php:508 +#: usr/local/www/firewall_rules_edit.php:1377 +#: usr/local/www/services_dhcp.php:878 usr/local/www/system_routes_edit.php:95 +#: usr/local/www/system_routes_edit.php:259 +#: usr/local/www/firewall_rules.php:363 usr/local/www/interfaces.php:446 +#: usr/local/www/interfaces.php:499 usr/local/www/interfaces.php:1532 +#: usr/local/www/system_gateways_edit.php:538 +#: usr/local/www/firewall_rules_edit.php:1388 +#: usr/local/www/system_routes.php:147 +#: usr/local/www/system_routes_edit.php:261 usr/local/www/interfaces.php:442 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1526 +#: usr/local/www/system_gateways_edit.php:538 +#: usr/local/www/firewall_rules_edit.php:1388 +#: usr/local/www/services_dhcp_edit.php:410 +#: usr/local/www/system_routes.php:147 usr/local/www/services_dhcp.php:878 +#: usr/local/www/system_routes_edit.php:97 +#: usr/local/www/system_routes_edit.php:255 +#: usr/local/www/firewall_rules.php:363 usr/local/www/system_gateways.php:154 +#: usr/local/www/status_gateways.php:74 usr/local/www/interfaces.php:442 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1526 +msgid "Gateway" +msgstr "" + +#: usr/local/www/firewall_rules.php:369 usr/local/www/status_queues.php:135 +#: usr/local/www/status_queues.php:142 usr/local/www/firewall_rules.php:373 +#: usr/local/www/status_queues.php:143 usr/local/www/firewall_rules.php:366 +#: usr/local/www/diag_system_pftop.php:138 usr/local/www/status_queues.php:148 +#: usr/local/www/firewall_rules.php:364 +#: usr/local/www/diag_system_pftop.php:138 +#: usr/local/www/firewall_rules.php:364 usr/local/www/status_queues.php:148 +msgid "Queue" +msgstr "" + +#: usr/local/www/firewall_rules.php:370 +#: usr/local/www/firewall_rules_edit.php:1261 +#: usr/local/www/firewall_rules_edit.php:1328 +#: usr/local/www/firewall_rules.php:374 usr/local/www/firewall_rules.php:367 +#: usr/local/www/firewall_rules_edit.php:1343 +#: usr/local/www/firewall_rules_edit.php:1350 +#: usr/local/www/firewall_rules.php:365 +#: usr/local/www/firewall_rules_edit.php:1361 +#: usr/local/www/firewall_rules_edit.php:1361 +#: usr/local/www/firewall_rules.php:365 +msgid "Schedule" +msgstr "" + +#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:824 +#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:334 +#: usr/local/www/firewall_rules.php:396 usr/local/www/firewall_rules.php:825 +#: usr/local/www/firewall_nat.php:216 usr/local/www/firewall_nat.php:347 +#: usr/local/www/firewall_rules.php:389 usr/local/www/firewall_rules.php:818 +#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:820 +#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:350 +#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:350 +#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:820 +msgid "Do you really want to delete the selected rules?" +msgstr "" + +#: usr/local/www/firewall_rules.php:394 usr/local/www/firewall_rules.php:794 +#: usr/local/www/firewall_rules.php:826 usr/local/www/firewall_rules.php:398 +#: usr/local/www/firewall_rules.php:795 usr/local/www/firewall_rules.php:827 +#: usr/local/www/firewall_rules.php:391 usr/local/www/firewall_rules.php:788 +#: usr/local/www/firewall_rules.php:820 usr/local/www/firewall_rules.php:390 +#: usr/local/www/firewall_rules.php:789 usr/local/www/firewall_rules.php:823 +#: usr/local/www/firewall_rules.php:390 usr/local/www/firewall_rules.php:789 +#: usr/local/www/firewall_rules.php:823 +msgid "add new rule" +msgstr "" + +#: usr/local/www/firewall_rules.php:431 usr/local/www/firewall_rules.php:425 +#: usr/local/www/firewall_rules.php:418 usr/local/www/firewall_rules.php:417 +#: usr/local/www/firewall_rules.php:417 +msgid "Anti-Lockout Rule" +msgstr "" + +#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:469 +#: usr/local/www/firewall_rules.php:497 usr/local/www/firewall_rules.php:780 +#: usr/local/www/firewall_rules.php:434 usr/local/www/firewall_rules.php:463 +#: usr/local/www/firewall_rules.php:491 usr/local/www/firewall_rules.php:777 +#: usr/local/www/firewall_rules.php:427 usr/local/www/firewall_rules.php:456 +#: usr/local/www/firewall_rules.php:484 usr/local/www/firewall_rules.php:770 +#: usr/local/www/firewall_rules.php:426 usr/local/www/firewall_rules.php:455 +#: usr/local/www/firewall_rules.php:483 usr/local/www/firewall_rules.php:426 +#: usr/local/www/firewall_rules.php:455 usr/local/www/firewall_rules.php:483 +#: usr/local/www/firewall_rules.php:770 +msgid "add a new rule based on this one" +msgstr "" + +#: usr/local/www/firewall_rules.php:453 usr/local/www/firewall_rules.php:447 +#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:439 +#: usr/local/www/firewall_rules.php:439 +msgid "RFC 1918 networks" +msgstr "" + +#: usr/local/www/firewall_rules.php:460 usr/local/www/interfaces.php:2414 +#: usr/local/www/firewall_rules.php:454 usr/local/www/interfaces.php:2615 +#: usr/local/www/firewall_rules.php:447 usr/local/www/interfaces.php:2603 +#: usr/local/www/interfaces.php:2633 usr/local/www/firewall_rules.php:446 +#: usr/local/www/interfaces.php:2679 usr/local/www/interfaces.php:2668 +#: usr/local/www/firewall_rules.php:446 usr/local/www/interfaces.php:2668 +msgid "Block private networks" +msgstr "" + +#: usr/local/www/firewall_rules.php:481 usr/local/www/firewall_rules.php:475 +#: usr/local/www/firewall_rules.php:468 usr/local/www/firewall_rules.php:467 +#: usr/local/www/firewall_rules.php:467 +msgid "Reserved/not assigned by IANA" +msgstr "" + +#: usr/local/www/firewall_rules.php:488 usr/local/www/interfaces.php:2426 +#: usr/local/www/firewall_rules.php:482 usr/local/www/interfaces.php:2627 +#: usr/local/www/firewall_rules.php:475 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2645 usr/local/www/firewall_rules.php:474 +#: usr/local/www/interfaces.php:2691 usr/local/www/interfaces.php:2680 +#: usr/local/www/firewall_rules.php:474 usr/local/www/interfaces.php:2680 +msgid "Block bogon networks" +msgstr "" + +#: usr/local/www/firewall_rules.php:513 usr/local/www/firewall_rules.php:507 +#: usr/local/www/firewall_rules.php:500 usr/local/www/firewall_rules.php:499 +#: usr/local/www/firewall_rules.php:499 +msgid "advanced settings set" +msgstr "" + +#: usr/local/www/firewall_rules.php:537 usr/local/www/firewall_rules.php:531 +#: usr/local/www/firewall_rules.php:524 usr/local/www/firewall_rules.php:524 +msgid "click to toggle enabled/disabled status" +msgstr "" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:846 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:845 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:845 +#: usr/local/www/firewall_rules.php:561 +msgid "Mon" +msgstr "" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560 +#: usr/local/www/firewall_rules.php:561 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:561 +msgid "Tues" +msgstr "" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:848 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:847 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:847 +#: usr/local/www/firewall_rules.php:561 +msgid "Wed" +msgstr "" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560 +#: usr/local/www/firewall_rules.php:561 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:561 +msgid "Thur" +msgstr "" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:850 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:849 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:849 +#: usr/local/www/firewall_rules.php:561 +msgid "Fri" +msgstr "" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:851 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:850 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:850 +#: usr/local/www/firewall_rules.php:561 +msgid "Sat" +msgstr "" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:852 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:851 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:851 +#: usr/local/www/firewall_rules.php:561 +msgid "Sun" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "January" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "February" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "March" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "April" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "May" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "June" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "July" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "August" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "September" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "October" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "November" +msgstr "" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "December" +msgstr "" + +#: usr/local/www/firewall_rules.php:685 usr/local/www/firewall_rules.php:679 +#: usr/local/www/firewall_rules.php:672 usr/local/www/firewall_rules.php:671 +#: usr/local/www/firewall_rules.php:671 +msgid "Traffic matching this rule is currently being denied" +msgstr "" + +#: usr/local/www/firewall_rules.php:690 usr/local/www/firewall_rules.php:684 +#: usr/local/www/firewall_rules.php:677 usr/local/www/firewall_rules.php:674 +#: usr/local/www/firewall_rules.php:674 +msgid "Traffic matching this rule is currently being allowed" +msgstr "" + +#: usr/local/www/firewall_rules.php:700 usr/local/www/firewall_rules.php:694 +#: usr/local/www/firewall_rules.php:687 usr/local/www/firewall_rules.php:682 +#: usr/local/www/firewall_rules.php:682 +msgid "This rule is not currently active because its period has expired" +msgstr "" + +#: usr/local/www/firewall_rules.php:792 usr/local/www/firewall_rules.php:785 +#: usr/local/www/firewall_rules.php:786 usr/local/www/firewall_rules.php:786 +msgid "No rules are currently defined for this interface" +msgstr "" + +#: usr/local/www/firewall_rules.php:793 usr/local/www/firewall_rules.php:786 +#: usr/local/www/firewall_rules.php:787 usr/local/www/firewall_rules.php:787 +msgid "" +"All incoming connections on this interface will be blocked until you add " +"pass rules." +msgstr "" + +#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795 +#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:789 +#: usr/local/www/firewall_rules.php:789 +msgid "Click the" +msgstr "" + +#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795 +#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:789 +#: usr/local/www/firewall_rules.php:789 +msgid " button to add a new rule." +msgstr "" + +#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_nat.php:327 +#: usr/local/www/firewall_rules.php:818 usr/local/www/firewall_nat.php:340 +#: usr/local/www/firewall_rules.php:811 usr/local/www/firewall_rules.php:813 +#: usr/local/www/firewall_nat.php:343 usr/local/www/firewall_nat.php:343 +#: usr/local/www/firewall_rules.php:813 +msgid "move selected rules to end" +msgstr "" + +#: usr/local/www/firewall_rules.php:835 usr/local/www/firewall_nat.php:345 +#: usr/local/www/firewall_rules.php:836 usr/local/www/firewall_nat.php:358 +#: usr/local/www/firewall_rules.php:829 usr/local/www/firewall_rules.php:832 +#: usr/local/www/firewall_nat.php:361 usr/local/www/firewall_nat.php:361 +#: usr/local/www/firewall_rules.php:832 +msgid "pass" +msgstr "" + +#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:839 +#: usr/local/www/firewall_rules.php:832 usr/local/www/firewall_rules.php:835 +#: usr/local/www/firewall_rules.php:835 +msgid "block" +msgstr "" + +#: usr/local/www/firewall_rules.php:841 usr/local/www/license.php:125 +#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:835 +#: usr/local/www/firewall_rules.php:838 usr/local/www/license.php:125 +#: usr/local/www/firewall_rules.php:838 +msgid "reject" +msgstr "" + +#: usr/local/www/firewall_rules.php:844 usr/local/www/firewall_rules.php:845 +#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:841 +#: usr/local/www/firewall_rules.php:841 +msgid "log" +msgstr "" + +#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:849 +#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:845 +#: usr/local/www/firewall_rules.php:845 +msgid "pass (disabled)" +msgstr "" + +#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:852 +#: usr/local/www/firewall_rules.php:845 usr/local/www/firewall_rules.php:848 +#: usr/local/www/firewall_rules.php:848 +msgid "block (disabled)" +msgstr "" + +#: usr/local/www/firewall_rules.php:854 usr/local/www/firewall_rules.php:855 +#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:851 +#: usr/local/www/firewall_rules.php:851 +msgid "reject (disabled)" +msgstr "" + +#: usr/local/www/firewall_rules.php:857 usr/local/www/firewall_rules.php:858 +#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:854 +#: usr/local/www/firewall_rules.php:854 +msgid "log (disabled)" +msgstr "" + +#: usr/local/www/firewall_rules.php:863 +#: usr/local/www/load_balancer_pool.php:148 usr/local/www/vpn_l2tp.php:354 +#: usr/local/www/vpn_l2tp.php:371 usr/local/www/firewall_rules.php:864 +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/firewall_rules.php:857 usr/local/www/vpn_l2tp.php:355 +#: usr/local/www/vpn_l2tp.php:372 usr/local/www/load_balancer_pool.php:147 +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:375 +#: usr/local/www/firewall_rules.php:860 usr/local/www/vpn_l2tp.php:358 +#: usr/local/www/vpn_l2tp.php:375 usr/local/www/load_balancer_pool.php:147 +#: usr/local/www/firewall_rules.php:860 +msgid "Hint:" +msgstr "" + +#: usr/local/www/firewall_rules.php:867 usr/local/www/firewall_rules.php:868 +#: usr/local/www/firewall_rules.php:861 usr/local/www/firewall_rules.php:864 +#: usr/local/www/firewall_rules.php:864 +msgid "" +"Rules are evaluated on a first-match basis (i.e. the action of the first " +"rule to match a packet will be executed). This means that if you use block " +"rules, you'll have to pay attention to the rule order. Everything that isn't " +"explicitly passed is blocked by default. " +msgstr "" + +#: usr/local/www/firewall_rules.php:874 usr/local/www/firewall_rules.php:875 +#: usr/local/www/firewall_rules.php:868 usr/local/www/firewall_rules.php:871 +#: usr/local/www/firewall_rules.php:871 +msgid "" +"Floating rules are evaluated on a first-match basis (i.e. the action of the " +"first rule to match a packet will be executed) only if the 'quick' option is " +"checked on a rule. Otherwise they will only apply if no other rules match. " +"Pay close attention to the rule order and options chosen. If no rule here " +"matches, the per-interface or default rules are used. " +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:201 +#: usr/local/www/firewall_rules_edit.php:210 +msgid "Reject type rules only works when the protocol is set to TCP." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:204 +#: usr/local/www/firewall_rules_edit.php:213 +#: usr/local/www/firewall_rules_edit.php:210 +msgid "Queue type rules only work with queues." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:212 +#: usr/local/www/firewall_rules_edit.php:227 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:222 +#: usr/local/www/firewall_rules_edit.php:228 +#: usr/local/www/firewall_rules_edit.php:228 +msgid "You can not assign a IPv4 gateway group on IPv6 Address Family rule" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:215 +#: usr/local/www/firewall_rules_edit.php:230 +#: usr/local/www/firewall_rules_edit.php:228 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:231 +#: usr/local/www/firewall_rules_edit.php:231 +msgid "You can not assign a IPv6 gateway group on IPv4 Address Family rule" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:222 +#: usr/local/www/firewall_rules_edit.php:240 +#: usr/local/www/firewall_rules_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:236 +#: usr/local/www/firewall_rules_edit.php:242 +#: usr/local/www/firewall_rules_edit.php:242 +msgid "You can not assign the IPv4 Gateway to a IPv6 Filter rule" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:243 +#: usr/local/www/firewall_rules_edit.php:242 +#: usr/local/www/firewall_rules_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:245 +#: usr/local/www/firewall_rules_edit.php:245 +msgid "You can not assign the IPv6 Gateway to a IPv4 Filter rule" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:297 +#: usr/local/www/firewall_rules_edit.php:321 +#: usr/local/www/firewall_rules_edit.php:320 +#: usr/local/www/firewall_rules_edit.php:323 +#: usr/local/www/firewall_rules_edit.php:329 +#: usr/local/www/firewall_rules_edit.php:329 +#, php-format +msgid "%s is only valid with protocol tcp." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:299 +#: usr/local/www/firewall_rules_edit.php:323 +#: usr/local/www/firewall_rules_edit.php:322 +#: usr/local/www/firewall_rules_edit.php:325 +#: usr/local/www/firewall_rules_edit.php:331 +#: usr/local/www/firewall_rules_edit.php:331 +#, php-format +msgid "%s is only valid if the gateway is set to 'default'." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:327 +#: usr/local/www/firewall_rules_edit.php:351 +#: usr/local/www/firewall_rules_edit.php:350 +#: usr/local/www/firewall_rules_edit.php:353 +#: usr/local/www/firewall_rules_edit.php:359 +#: usr/local/www/firewall_rules_edit.php:359 +#, php-format +msgid "" +"%s is not a valid end source port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:381 +#: usr/local/www/firewall_rules_edit.php:410 +#: usr/local/www/firewall_rules_edit.php:409 +#: usr/local/www/firewall_rules_edit.php:412 +#: usr/local/www/firewall_rules_edit.php:418 +#: usr/local/www/firewall_rules_edit.php:418 +#, php-format +msgid "" +"The Source IP address %s Address Family differs from the destination %s." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:383 +#: usr/local/www/firewall_rules_edit.php:412 +#: usr/local/www/firewall_rules_edit.php:411 +#: usr/local/www/firewall_rules_edit.php:414 +#: usr/local/www/firewall_rules_edit.php:420 +#: usr/local/www/firewall_rules_edit.php:420 +msgid "You can not use IPv6 addresses in IPv4 rules." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:385 +#: usr/local/www/firewall_rules_edit.php:414 +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_rules_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:422 +#: usr/local/www/firewall_rules_edit.php:422 +msgid "You can not use IPv4 addresses in IPv6 rules." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_rules_edit.php:434 +#: usr/local/www/firewall_rules_edit.php:433 +#: usr/local/www/firewall_rules_edit.php:436 +#: usr/local/www/firewall_rules_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:442 +msgid "OS detection is only valid with protocol tcp." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:406 +#: usr/local/www/firewall_rules_edit.php:438 +#: usr/local/www/firewall_rules_edit.php:437 +#: usr/local/www/firewall_rules_edit.php:440 +#: usr/local/www/firewall_rules_edit.php:446 +#: usr/local/www/firewall_rules_edit.php:446 +msgid "You have to select a queue when you select an acknowledge queue too." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:408 +#: usr/local/www/firewall_rules_edit.php:440 +#: usr/local/www/firewall_rules_edit.php:439 +#: usr/local/www/firewall_rules_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:448 +#: usr/local/www/firewall_rules_edit.php:448 +msgid "Acknowledge queue and Queue cannot be the same." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:411 +#: usr/local/www/firewall_rules_edit.php:443 +#: usr/local/www/firewall_rules_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:445 +#: usr/local/www/firewall_rules_edit.php:451 +#: usr/local/www/firewall_rules_edit.php:451 +msgid "" +"You can not use limiters in Floating rules without choosing a direction." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_rules_edit.php:445 +#: usr/local/www/firewall_rules_edit.php:444 +#: usr/local/www/firewall_rules_edit.php:447 +#: usr/local/www/firewall_rules_edit.php:453 +#: usr/local/www/firewall_rules_edit.php:453 +msgid "" +"You can not use gateways in Floating rules without choosing a direction." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:448 +#: usr/local/www/firewall_rules_edit.php:447 +#: usr/local/www/firewall_rules_edit.php:450 +#: usr/local/www/firewall_rules_edit.php:456 +#: usr/local/www/firewall_rules_edit.php:456 +msgid "" +"You must select a queue for the In direction before selecting one for Out " +"too." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:418 +#: usr/local/www/firewall_rules_edit.php:450 +#: usr/local/www/firewall_rules_edit.php:449 +#: usr/local/www/firewall_rules_edit.php:452 +#: usr/local/www/firewall_rules_edit.php:458 +#: usr/local/www/firewall_rules_edit.php:458 +msgid "In and Out Queue cannot be the same." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:420 +#: usr/local/www/firewall_rules_edit.php:422 +#: usr/local/www/firewall_rules_edit.php:452 +#: usr/local/www/firewall_rules_edit.php:454 +#: usr/local/www/firewall_rules_edit.php:451 +#: usr/local/www/firewall_rules_edit.php:453 +#: usr/local/www/firewall_rules_edit.php:456 +#: usr/local/www/firewall_rules_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:462 +#: usr/local/www/firewall_rules_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:462 +msgid "" +"You cannot select one queue and one virtual interface for IN and Out. both " +"must be from the same type." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:425 +#: usr/local/www/firewall_rules_edit.php:457 +#: usr/local/www/firewall_rules_edit.php:458 +#: usr/local/www/firewall_rules_edit.php:461 +#: usr/local/www/firewall_rules_edit.php:467 +#: usr/local/www/firewall_rules_edit.php:467 +msgid "ID must be an integer" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:428 +#: usr/local/www/firewall_rules_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:461 +#: usr/local/www/firewall_rules_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:470 +#: usr/local/www/firewall_rules_edit.php:470 +msgid "You can only select a layer7 container for TCP and/or UDP protocols" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:430 +#: usr/local/www/firewall_rules_edit.php:462 +#: usr/local/www/firewall_rules_edit.php:463 +#: usr/local/www/firewall_rules_edit.php:466 +#: usr/local/www/firewall_rules_edit.php:472 +#: usr/local/www/firewall_rules_edit.php:472 +msgid "You can only select a layer7 container for Pass type rules." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:443 +#: usr/local/www/firewall_rules_edit.php:475 +#: usr/local/www/firewall_rules_edit.php:476 +#: usr/local/www/firewall_rules_edit.php:479 +#: usr/local/www/firewall_rules_edit.php:485 +#: usr/local/www/firewall_rules_edit.php:485 +msgid "" +"If you specify TCP flags that should be set you should specify out of which " +"flags as well." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:652 +#: usr/local/www/firewall_rules_edit.php:685 +#: usr/local/www/firewall_rules_edit.php:688 +#: usr/local/www/firewall_rules_edit.php:700 +#: usr/local/www/firewall_rules_edit.php:700 +msgid "Edit Firewall rule" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:673 +#: usr/local/www/firewall_rules_edit.php:706 +#: usr/local/www/firewall_rules_edit.php:709 +#: usr/local/www/firewall_rules_edit.php:721 +#: usr/local/www/firewall_rules_edit.php:721 +msgid "Choose what to do with packets that match the criteria specified below." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:674 +#: usr/local/www/firewall_rules_edit.php:707 +#: usr/local/www/firewall_rules_edit.php:710 +#: usr/local/www/firewall_rules_edit.php:722 +#: usr/local/www/firewall_rules_edit.php:722 +msgid "" +"Hint: the difference between block and reject is that with reject, a packet " +"(TCP RST or ICMP port unreachable for UDP) is returned to the sender, " +"whereas with block the packet is dropped silently. In either case, the " +"original packet is discarded." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:689 +#: usr/local/www/firewall_rules_edit.php:722 +#: usr/local/www/firewall_rules_edit.php:725 +#: usr/local/www/firewall_rules_edit.php:737 +#: usr/local/www/firewall_rules_edit.php:737 +msgid "Quick" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:693 +#: usr/local/www/firewall_rules_edit.php:726 +#: usr/local/www/firewall_rules_edit.php:729 +#: usr/local/www/firewall_rules_edit.php:741 +#: usr/local/www/firewall_rules_edit.php:741 +msgid "Apply the action immediately on match." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:694 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/firewall_rules_edit.php:730 +#: usr/local/www/firewall_rules_edit.php:742 +#: usr/local/www/firewall_rules_edit.php:742 +msgid "" +"Set this option if you need to apply this action to traffic that matches " +"this rule immediately." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:701 +#: usr/local/www/firewall_rules_edit.php:734 +#: usr/local/www/firewall_rules_edit.php:737 +#: usr/local/www/firewall_rules_edit.php:749 +#: usr/local/www/firewall_rules_edit.php:749 +msgid "Associated filter rule" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:703 +#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:137 +#: usr/local/www/firewall_rules_edit.php:736 +#: usr/local/www/firewall_rules_edit.php:739 +#: usr/local/www/diag_traceroute.php:141 +#: usr/local/www/firewall_rules_edit.php:751 +#: usr/local/www/diag_traceroute.php:161 +#: usr/local/www/firewall_rules_edit.php:751 +#: usr/local/www/diag_traceroute.php:161 +msgid "Note: " +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:703 +#: usr/local/www/firewall_rules_edit.php:736 +#: usr/local/www/firewall_rules_edit.php:739 +#: usr/local/www/firewall_rules_edit.php:751 +#: usr/local/www/firewall_rules_edit.php:751 +msgid "This is associated to a NAT rule." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:704 +#: usr/local/www/firewall_rules_edit.php:737 +#: usr/local/www/firewall_rules_edit.php:740 +#: usr/local/www/firewall_rules_edit.php:752 +#: usr/local/www/firewall_rules_edit.php:752 +msgid "" +"You cannot edit the interface, protocol, source, or destination of " +"associated filter rules." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:711 +#: usr/local/www/firewall_rules_edit.php:744 +#: usr/local/www/firewall_rules_edit.php:747 +#: usr/local/www/firewall_rules_edit.php:759 +#: usr/local/www/firewall_rules_edit.php:759 +msgid "View the NAT rule" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:768 +#: usr/local/www/firewall_rules_edit.php:803 +#: usr/local/www/firewall_rules_edit.php:806 +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/firewall_rules_edit.php:817 +#: usr/local/www/firewall_rules_edit.php:817 +msgid "Choose on which interface packets must come in to match this rule." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:774 +#: usr/local/www/services_captiveportal_ip_edit.php:178 +#: usr/local/www/diag_ipsec_spd.php:88 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:443 +#: usr/local/www/services_captiveportal_hostname_edit.php:160 +#: usr/local/www/load_balancer_relay_action_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:809 +#: usr/local/www/services_captiveportal_hostname_edit.php:158 +#: usr/local/www/load_balancer_relay_action_edit.php:440 +#: usr/local/www/services_captiveportal_ip_edit.php:176 +#: usr/local/www/diag_ipsec_spd.php:89 +#: usr/local/www/firewall_rules_edit.php:812 +#: usr/local/www/firewall_rules_edit.php:824 +#: usr/local/www/firewall_rules_edit.php:823 +#: usr/local/www/firewall_rules_edit.php:823 +#: usr/local/www/services_captiveportal_hostname_edit.php:160 +#: usr/local/www/diag_ipsec_spd.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:440 +msgid "Direction" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:792 +#: usr/local/www/firewall_rules_edit.php:827 +#: usr/local/www/firewall_rules_edit.php:830 +#: usr/local/www/firewall_rules_edit.php:842 +#: usr/local/www/firewall_rules_edit.php:841 +#: usr/local/www/firewall_rules_edit.php:841 +msgid "TCP/IP Version" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:804 +#: usr/local/www/firewall_rules_edit.php:839 +#: usr/local/www/firewall_rules_edit.php:842 +#: usr/local/www/firewall_rules_edit.php:854 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_rules_edit.php:853 +msgid "Select the Internet Protocol version this rule applies to" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_rules_edit.php:856 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_rules_edit.php:867 +msgid "Hint: in most cases, you should specify " +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:822 +#: usr/local/www/firewall_rules_edit.php:857 +#: usr/local/www/firewall_rules_edit.php:860 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules_edit.php:871 +msgid "ICMP type" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:851 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules_edit.php:889 +#: usr/local/www/firewall_rules_edit.php:901 +#: usr/local/www/firewall_rules_edit.php:900 +#: usr/local/www/firewall_rules_edit.php:900 +msgid "" +"If you selected ICMP for the protocol above, you may specify an ICMP type " +"here." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules_edit.php:920 +#: usr/local/www/firewall_rules_edit.php:929 +#: usr/local/www/firewall_rules_edit.php:941 +#: usr/local/www/firewall_rules_edit.php:940 +#: usr/local/www/firewall_rules_edit.php:940 +msgid " subnet" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:943 +#: usr/local/www/firewall_rules_edit.php:952 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:963 +msgid "Show source port range" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1000 +msgid "Specify the source port or port range for this rule." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1000 +msgid "" +"and almost never equal to the destination port range (and should usually be" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1102 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1101 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1101 +msgid "'to'" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1005 +#: usr/local/www/firewall_rules_edit.php:1040 +#: usr/local/www/firewall_rules_edit.php:1055 +#: usr/local/www/firewall_rules_edit.php:1068 +#: usr/local/www/firewall_rules_edit.php:1067 +#: usr/local/www/firewall_rules_edit.php:1067 +msgid "Destination port range " +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1037 +#: usr/local/www/firewall_rules_edit.php:1072 +#: usr/local/www/firewall_rules_edit.php:1087 +#: usr/local/www/firewall_rules_edit.php:1100 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1099 +msgid "" +"Specify the port or port range for the destination of the packet for this " +"rule." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_rules_edit.php:1102 +#: usr/local/www/firewall_rules_edit.php:1101 +#: usr/local/www/firewall_rules_edit.php:1101 +msgid "field empty if you only want to filter a single port" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1044 +#: usr/local/www/firewall_rules_edit.php:1079 +#: usr/local/www/firewall_rules_edit.php:1094 +#: usr/local/www/firewall_rules_edit.php:1107 +#: usr/local/www/firewall_rules_edit.php:1106 +#: usr/local/www/firewall_rules_edit.php:1106 +msgid "Log" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1047 +#: usr/local/www/firewall_rules_edit.php:1082 +#: usr/local/www/firewall_rules_edit.php:1097 +#: usr/local/www/firewall_rules_edit.php:1110 +#: usr/local/www/firewall_rules_edit.php:1109 +#: usr/local/www/firewall_rules_edit.php:1109 +msgid "Log packets that are handled by this rule" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1111 +msgid "" +"Hint: the firewall has limited local log space. Don't turn on logging for " +"everything. If you want to do a lot of logging, consider using a remote " +"syslog server" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1111 +msgid "see the" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1111 +msgid "Diagnostics: System logs: Settings" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/services_captiveportal.php:908 +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/services_captiveportal.php:953 +#: usr/local/www/services_captiveportal.php:949 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/services_captiveportal.php:951 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/system_advanced_firewall.php:333 +#: usr/local/www/services_captiveportal.php:967 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/system_advanced_firewall.php:333 +#: usr/local/www/services_captiveportal.php:967 +msgid "page" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1057 +#: usr/local/www/services_unbound_acls.php:296 +#: usr/local/www/firewall_rules_edit.php:1092 +#: usr/local/www/firewall_rules_edit.php:1107 +#: usr/local/www/firewall_rules_edit.php:1120 +#: usr/local/www/firewall_rules_edit.php:1119 +#: usr/local/www/firewall_rules_edit.php:1119 +msgid "You may enter a description here for your reference." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1080 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1130 +#: usr/local/www/firewall_rules_edit.php:1143 +#: usr/local/www/firewall_rules_edit.php:1142 +#: usr/local/www/firewall_rules_edit.php:1142 +msgid "Source OS" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1086 +#: usr/local/www/firewall_rules_edit.php:1121 +#: usr/local/www/firewall_rules_edit.php:1136 +#: usr/local/www/firewall_rules_edit.php:1149 +#: usr/local/www/firewall_rules_edit.php:1148 +#: usr/local/www/firewall_rules_edit.php:1148 +msgid "OS Type:" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1109 +#: usr/local/www/firewall_rules_edit.php:1144 +#: usr/local/www/firewall_rules_edit.php:1159 +#: usr/local/www/firewall_rules_edit.php:1172 +#: usr/local/www/firewall_rules_edit.php:1171 +#: usr/local/www/firewall_rules_edit.php:1171 +msgid "Note: this only works for TCP rules" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1114 +#: usr/local/www/firewall_rules_edit.php:1149 +#: usr/local/www/firewall_rules_edit.php:1164 +#: usr/local/www/firewall_rules_edit.php:1177 +#: usr/local/www/firewall_rules_edit.php:1176 +#: usr/local/www/firewall_rules_edit.php:1176 +msgid "Diffserv Code Point" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1130 +#: usr/local/www/interfaces_ppps_edit.php:675 +#: usr/local/www/vpn_ipsec_phase1.php:806 +#: usr/local/www/vpn_ipsec_phase2.php:629 +#: usr/local/www/firewall_rules_edit.php:1165 +#: usr/local/www/vpn_ipsec_phase2.php:655 +#: usr/local/www/vpn_ipsec_phase1.php:819 +#: usr/local/www/interfaces_ppps_edit.php:676 +#: usr/local/www/vpn_ipsec_phase2.php:751 +#: usr/local/www/vpn_ipsec_phase1.php:816 +#: usr/local/www/firewall_rules_edit.php:1180 +#: usr/local/www/interfaces_ppps_edit.php:682 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase2.php:772 +#: usr/local/www/firewall_rules_edit.php:1193 +#: usr/local/www/firewall_rules_edit.php:1192 +#: usr/local/www/interfaces_ppps_edit.php:680 +#: usr/local/www/firewall_rules_edit.php:1192 +#: usr/local/www/interfaces_ppps_edit.php:680 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase2.php:772 +msgid "Advanced Options" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1137 +#: usr/local/www/firewall_rules_edit.php:1172 +#: usr/local/www/firewall_rules_edit.php:1187 +#: usr/local/www/firewall_rules_edit.php:1200 +#: usr/local/www/firewall_rules_edit.php:1199 +#: usr/local/www/firewall_rules_edit.php:1199 +msgid "" +"This allows packets with IP options to pass. Otherwise they are blocked by " +"default. This is usually only seen with multicast traffic." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1140 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1190 +#: usr/local/www/firewall_rules_edit.php:1203 +#: usr/local/www/firewall_rules_edit.php:1202 +#: usr/local/www/firewall_rules_edit.php:1202 +msgid "This will disable auto generated reply-to for this rule." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1143 +#: usr/local/www/firewall_rules_edit.php:1178 +#: usr/local/www/firewall_rules_edit.php:1193 +#: usr/local/www/firewall_rules_edit.php:1206 +#: usr/local/www/firewall_rules_edit.php:1205 +#: usr/local/www/firewall_rules_edit.php:1205 +msgid "" +"You can mark a packet matching this rule and use this mark to match on other " +"NAT/filter rules. It is called" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1143 +#: usr/local/www/firewall_rules_edit.php:1178 +#: usr/local/www/firewall_rules_edit.php:1193 +#: usr/local/www/firewall_rules_edit.php:1206 +#: usr/local/www/firewall_rules_edit.php:1205 +#: usr/local/www/firewall_rules_edit.php:1205 +msgid "Policy filtering" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1146 +#: usr/local/www/firewall_rules_edit.php:1181 +#: usr/local/www/firewall_rules_edit.php:1196 +#: usr/local/www/firewall_rules_edit.php:1209 +#: usr/local/www/firewall_rules_edit.php:1208 +#: usr/local/www/firewall_rules_edit.php:1208 +msgid "You can match packet on a mark placed before on another rule." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1148 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1198 +#: usr/local/www/firewall_rules_edit.php:1211 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1210 +msgid " Maximum state entries this rule can create" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1149 +#: usr/local/www/firewall_rules_edit.php:1184 +#: usr/local/www/firewall_rules_edit.php:1199 +#: usr/local/www/firewall_rules_edit.php:1212 +#: usr/local/www/firewall_rules_edit.php:1211 +#: usr/local/www/firewall_rules_edit.php:1211 +msgid " Maximum number of unique source hosts" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1150 +#: usr/local/www/firewall_rules_edit.php:1185 +#: usr/local/www/firewall_rules_edit.php:1200 +#: usr/local/www/firewall_rules_edit.php:1213 +#: usr/local/www/firewall_rules_edit.php:1212 +#: usr/local/www/firewall_rules_edit.php:1212 +msgid " Maximum number of established connections per host" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1151 +#: usr/local/www/firewall_rules_edit.php:1186 +#: usr/local/www/firewall_rules_edit.php:1201 +#: usr/local/www/firewall_rules_edit.php:1214 +#: usr/local/www/firewall_rules_edit.php:1213 +#: usr/local/www/firewall_rules_edit.php:1213 +msgid " Maximum state entries per host" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1160 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1223 +#: usr/local/www/firewall_rules_edit.php:1222 +#: usr/local/www/firewall_rules_edit.php:1222 +msgid "Maximum new connections per host / per second(s)" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1164 +#: usr/local/www/firewall_rules_edit.php:1199 +#: usr/local/www/firewall_rules_edit.php:1214 +#: usr/local/www/firewall_rules_edit.php:1226 +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1225 +msgid "State Timeout in seconds" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1202 +#: usr/local/www/firewall_rules_edit.php:1217 +#: usr/local/www/firewall_rules_edit.php:1228 +#: usr/local/www/firewall_rules_edit.php:1227 +#: usr/local/www/firewall_rules_edit.php:1227 +msgid "Note: Leave fields blank to disable that feature." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1172 +#: usr/local/www/firewall_rules_edit.php:1207 +#: usr/local/www/firewall_rules_edit.php:1222 +#: usr/local/www/firewall_rules_edit.php:1233 +#: usr/local/www/firewall_rules_edit.php:1232 +#: usr/local/www/firewall_rules_edit.php:1232 +msgid "TCP flags" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1206 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1256 +#: usr/local/www/firewall_rules_edit.php:1265 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1264 +msgid "Any flags." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1208 +#: usr/local/www/firewall_rules_edit.php:1243 +#: usr/local/www/firewall_rules_edit.php:1258 +#: usr/local/www/firewall_rules_edit.php:1267 +#: usr/local/www/firewall_rules_edit.php:1266 +#: usr/local/www/firewall_rules_edit.php:1266 +msgid "" +"Use this to choose TCP flags that must be set or cleared for this rule to " +"match." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1214 +#: usr/local/www/firewall_rules_edit.php:1249 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1273 +#: usr/local/www/firewall_rules_edit.php:1272 +#: usr/local/www/firewall_rules_edit.php:1272 +msgid "State Type" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1221 +#: usr/local/www/firewall_rules_edit.php:1228 +#: usr/local/www/firewall_rules_edit.php:1256 +#: usr/local/www/firewall_rules_edit.php:1263 +#: usr/local/www/firewall_rules_edit.php:1271 +#: usr/local/www/firewall_rules_edit.php:1278 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1286 +#: usr/local/www/firewall_rules_edit.php:1279 +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1279 +#: usr/local/www/firewall_rules_edit.php:1285 +msgid "keep state" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1222 +#: usr/local/www/firewall_rules_edit.php:1229 +#: usr/local/www/firewall_rules_edit.php:1257 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1272 +#: usr/local/www/firewall_rules_edit.php:1279 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1286 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1286 +msgid "sloppy state" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1223 +#: usr/local/www/firewall_rules_edit.php:1230 +#: usr/local/www/firewall_rules_edit.php:1258 +#: usr/local/www/firewall_rules_edit.php:1265 +#: usr/local/www/firewall_rules_edit.php:1273 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1282 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/firewall_rules_edit.php:1287 +msgid "synproxy state" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1260 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1284 +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1283 +msgid "" +"Hint: Select which type of state tracking mechanism you would like to use. " +"If in doubt, use keep state." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1228 +#: usr/local/www/firewall_rules_edit.php:1229 +#: usr/local/www/firewall_rules_edit.php:1263 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1278 +#: usr/local/www/firewall_rules_edit.php:1279 +#: usr/local/www/firewall_rules_edit.php:1286 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1286 +msgid "Works with all IP protocols." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1230 +#: usr/local/www/firewall_rules_edit.php:1265 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1287 +msgid "" +"Proxies incoming TCP connections to help protect servers from spoofed TCP " +"SYN floods. This option includes the functionality of keep state and " +"modulate state combined." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1231 +#: usr/local/www/firewall_rules_edit.php:1266 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/firewall_rules_edit.php:1289 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1288 +msgid "" +"Do not use state mechanisms to keep track. This is only useful if you're " +"doing advanced queueing in certain situations. Please check the " +"documentation." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1245 +#: usr/local/www/firewall_rules_edit.php:1280 +msgid "" +"Hint: This prevents the rule from automatically syncing to other CARP " +"members." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1350 +#: usr/local/www/firewall_rules_edit.php:1365 +#: usr/local/www/firewall_rules_edit.php:1372 +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1383 +msgid "Leave as 'none' to leave the rule enabled all the time." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1295 +#: usr/local/www/services_captiveportal.php:779 +#: usr/local/www/services_captiveportal.php:799 +#: usr/local/www/firewall_rules_edit.php:1362 +#: usr/local/www/services_captiveportal.php:821 +#: usr/local/www/services_captiveportal.php:841 +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/services_captiveportal.php:839 +#: usr/local/www/firewall_rules_edit.php:1377 +#: usr/local/www/services_captiveportal.php:807 +#: usr/local/www/services_captiveportal.php:837 +#: usr/local/www/firewall_rules_edit.php:1384 +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/firewall_rules_edit.php:1395 +#: usr/local/www/firewall_rules_edit.php:1395 +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:853 +msgid "default" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1334 +#: usr/local/www/firewall_rules_edit.php:1405 +#: usr/local/www/firewall_rules_edit.php:1420 +#: usr/local/www/firewall_rules_edit.php:1427 +#: usr/local/www/firewall_rules_edit.php:1438 +#: usr/local/www/firewall_rules_edit.php:1438 +msgid "" +"Leave as 'default' to use the system routing table. Or choose a gateway to " +"utilize policy based routing." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1339 +#: usr/local/www/firewall_rules_edit.php:1410 +#: usr/local/www/firewall_rules_edit.php:1425 +#: usr/local/www/firewall_rules_edit.php:1432 +#: usr/local/www/firewall_rules_edit.php:1443 +#: usr/local/www/firewall_rules_edit.php:1443 +msgid "In/Out" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +#: usr/local/www/firewall_rules_edit.php:1476 +#: usr/local/www/firewall_rules_edit.php:1487 +#: usr/local/www/firewall_rules_edit.php:1487 +msgid "" +"Choose the Out queue/Virtual interface only if you have also selected In." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +#: usr/local/www/firewall_rules_edit.php:1476 +#: usr/local/www/firewall_rules_edit.php:1487 +#: usr/local/www/firewall_rules_edit.php:1487 +msgid "" +"The Out selection is applied to traffic leaving the interface where the rule " +"is created, In is applied to traffic coming into the chosen interface." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +#: usr/local/www/firewall_rules_edit.php:1476 +#: usr/local/www/firewall_rules_edit.php:1487 +#: usr/local/www/firewall_rules_edit.php:1487 +msgid "" +"If you are creating a floating rule, if the direction is In then the same " +"rules apply, if the direction is out the selections are reverted Out is for " +"incoming and In is for outgoing." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1389 +#: usr/local/www/firewall_rules_edit.php:1460 +#: usr/local/www/firewall_rules_edit.php:1475 +#: usr/local/www/firewall_rules_edit.php:1482 +#: usr/local/www/firewall_rules_edit.php:1493 +#: usr/local/www/firewall_rules_edit.php:1493 +msgid "Ackqueue/Queue" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1439 +#: usr/local/www/firewall_rules_edit.php:1510 +#: usr/local/www/firewall_rules_edit.php:1525 +#: usr/local/www/firewall_rules_edit.php:1532 +#: usr/local/www/firewall_rules_edit.php:1543 +#: usr/local/www/firewall_rules_edit.php:1543 +msgid "Choose the Acknowledge Queue only if you have selected Queue." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1466 +#: usr/local/www/firewall_rules_edit.php:1537 +#: usr/local/www/firewall_rules_edit.php:1552 +#: usr/local/www/firewall_rules_edit.php:1560 +#: usr/local/www/firewall_rules_edit.php:1571 +#: usr/local/www/firewall_rules_edit.php:1571 +msgid "" +"Choose a Layer7 container to apply application protocol inspection rules. " +"These are valid for TCP and UDP protocols only." +msgstr "" + +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_schedule_edit.php:61 usr/local/www/fbegin.inc:113 +#: usr/local/www/system_advanced_misc.php:380 usr/local/www/fbegin.inc:130 +#: usr/local/www/system_advanced_misc.php:423 usr/local/www/fbegin.inc:139 +#: usr/local/www/system_advanced_misc.php:472 +#: usr/local/www/system_advanced_misc.php:484 usr/local/www/fbegin.inc:131 +#: usr/local/www/system_advanced_misc.php:531 +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/system_advanced_misc.php:531 usr/local/www/fbegin.inc:131 +msgid "Schedules" +msgstr "" + +#: usr/local/www/firewall_schedule.php:77 +#: usr/local/www/firewall_schedule.php:77 +#, php-format +msgid "Cannot delete Schedule. Currently in use by %s" +msgstr "" + +#: usr/local/www/firewall_schedule.php:97 +#: usr/local/www/firewall_schedule.php:97 +msgid "Time Range(s)" +msgstr "" + +#: usr/local/www/firewall_schedule.php:103 +#: usr/local/www/firewall_schedule.php:233 +#: usr/local/www/firewall_schedule.php:103 +#: usr/local/www/firewall_schedule.php:233 +msgid "add a new schedule" +msgstr "" + +#: usr/local/www/firewall_schedule.php:115 +#: usr/local/www/firewall_schedule.php:115 +msgid "Schedule is currently active" +msgstr "" + +#: usr/local/www/firewall_schedule.php:221 +#: usr/local/www/firewall_schedule.php:221 +msgid "Do you really want to delete this schedule?" +msgstr "" + +#: usr/local/www/firewall_schedule.php:240 +#: usr/local/www/firewall_schedule.php:240 +msgid "" +"Schedules act as placeholders for time ranges to be used in Firewall Rules." +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:93 +#: usr/local/www/firewall_schedule_edit.php:93 +msgid "Schedule may not be named LAN." +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:95 +#: usr/local/www/firewall_schedule_edit.php:95 +msgid "Schedule may not be named WAN." +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:97 +#: usr/local/www/firewall_schedule_edit.php:97 +msgid "Schedule name cannot be blank." +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:101 +#: usr/local/www/firewall_schedule_edit.php:101 +msgid "Reserved word used for schedule name." +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:104 +#: usr/local/www/firewall_schedule_edit.php:104 +msgid "The schedule name may only consist of the characters a-z, A-Z, 0-9" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:113 +#: usr/local/www/firewall_schedule_edit.php:113 +msgid "A Schedule with this name already exists." +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:170 +#: usr/local/www/firewall_schedule_edit.php:170 +msgid "The schedule must have at least one time range configured." +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:770 +#: usr/local/www/firewall_schedule_edit.php:769 +#: usr/local/www/firewall_schedule_edit.php:769 +msgid "Schedule information" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:776 +#: usr/local/www/firewall_schedule_edit.php:775 +#: usr/local/www/firewall_schedule_edit.php:775 +msgid "Schedule Name" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:782 +#: usr/local/www/firewall_schedule_edit.php:781 +#: usr/local/www/firewall_schedule_edit.php:781 +msgid "NOTE: This schedule is in use so the name may not be modified!" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:787 +#: usr/local/www/firewall_schedule_edit.php:786 +#: usr/local/www/firewall_schedule_edit.php:786 +msgid "" +"The name of the alias may only consist of the characters a-z, A-Z and 0-9" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:804 +#: usr/local/www/firewall_schedule_edit.php:803 +#: usr/local/www/firewall_schedule_edit.php:803 +msgid "Month" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:847 +#: usr/local/www/firewall_schedule_edit.php:846 +#: usr/local/www/firewall_schedule_edit.php:846 +msgid "Tue" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:849 +#: usr/local/www/firewall_schedule_edit.php:848 +#: usr/local/www/firewall_schedule_edit.php:848 +msgid "Thu" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:906 +#: usr/local/www/firewall_schedule_edit.php:905 +#: usr/local/www/firewall_schedule_edit.php:905 +msgid "" +"Click individual date to select that date only. Click the appropriate " +"weekday Header to select all occurences of that weekday." +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:914 +#: usr/local/www/firewall_schedule_edit.php:996 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:995 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:995 +msgid "Start Time" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:914 +#: usr/local/www/firewall_schedule_edit.php:997 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:996 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:996 +msgid "Stop Time" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:927 +#: usr/local/www/firewall_schedule_edit.php:952 +#: usr/local/www/firewall_schedule_edit.php:926 +#: usr/local/www/firewall_schedule_edit.php:951 +#: usr/local/www/firewall_schedule_edit.php:926 +#: usr/local/www/firewall_schedule_edit.php:951 +msgid "Hr" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:934 +#: usr/local/www/firewall_schedule_edit.php:959 +#: usr/local/www/firewall_schedule_edit.php:933 +#: usr/local/www/firewall_schedule_edit.php:958 +#: usr/local/www/firewall_schedule_edit.php:933 +#: usr/local/www/firewall_schedule_edit.php:958 +msgid "Min" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:963 +#: usr/local/www/firewall_schedule_edit.php:962 +#: usr/local/www/firewall_schedule_edit.php:962 +msgid "" +"Select the time range for the day(s) selected on the Month(s) above. A full " +"day is 0:00-23:59." +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:967 +#: usr/local/www/firewall_schedule_edit.php:966 +#: usr/local/www/firewall_schedule_edit.php:966 +msgid "Time Range Description" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:977 +#: usr/local/www/firewall_schedule_edit.php:976 +#: usr/local/www/firewall_schedule_edit.php:976 +msgid "Add Time" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:978 +#: usr/local/www/firewall_schedule_edit.php:977 +#: usr/local/www/firewall_schedule_edit.php:977 +msgid "Clear Selection" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:987 +#: usr/local/www/firewall_schedule_edit.php:986 +#: usr/local/www/firewall_schedule_edit.php:986 +msgid "Schedule repeat" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:990 +#: usr/local/www/firewall_schedule_edit.php:989 +#: usr/local/www/firewall_schedule_edit.php:989 +msgid "Configured Ranges" +msgstr "" + +#: usr/local/www/firewall_schedule_edit.php:995 +#: usr/local/www/firewall_schedule_edit.php:994 +#: usr/local/www/firewall_schedule_edit.php:994 +msgid "Day(s)" +msgstr "" + +#: usr/local/www/firewall_shaper.php:369 usr/local/www/firewall_shaper.php:370 +#: usr/local/www/firewall_shaper.php:370 +msgid "Disable shaper on interface" +msgstr "" + +#: usr/local/www/firewall_shaper.php:424 usr/local/www/firewall_shaper.php:425 +#: usr/local/www/firewall_shaper.php:426 usr/local/www/firewall_shaper.php:426 +msgid "Remove Shaper" +msgstr "" + +#: usr/local/www/diag_backup.php:84 usr/local/www/diag_backup.php:161 +#: usr/local/www/diag_backup.php:161 +msgid "Restored base_package menus after configuration restore." +msgstr "" + +#: usr/local/www/diag_backup.php:104 usr/local/www/fbegin.inc:120 +#: usr/local/www/fbegin.inc:156 usr/local/www/status_rrd_graph_settings.php:58 +#: usr/local/www/status_rrd_graph_settings.php:155 +#: usr/local/www/status_services.php:275 +#: usr/local/www/widgets/widgets/services_status.widget.php:80 +#: usr/local/www/fbegin.inc:137 usr/local/www/fbegin.inc:173 +#: usr/local/www/status_rrd_graph_settings.php:156 +#: usr/local/www/diag_backup.php:181 etc/inc/service-utils.inc:256 +#: usr/local/www/fbegin.inc:146 usr/local/www/fbegin.inc:181 +#: usr/local/www/fbegin.inc:138 usr/local/www/fbegin.inc:172 +#: etc/inc/service-utils.inc:255 etc/inc/service-utils.inc:272 +#: usr/local/www/status_rrd_graph_settings.php:58 +#: usr/local/www/status_rrd_graph_settings.php:156 +#: usr/local/www/diag_backup.php:181 usr/local/www/fbegin.inc:138 +#: usr/local/www/fbegin.inc:172 etc/inc/service-utils.inc:272 +msgid "Captive Portal" +msgstr "" + +#: usr/local/www/diag_backup.php:105 usr/local/www/diag_backup.php:182 +#: usr/local/www/diag_backup.php:182 +msgid "Captive Portal Vouchers" +msgstr "" + +#: usr/local/www/diag_backup.php:106 usr/local/www/fbegin.inc:121 +#: usr/local/www/status_services.php:263 +#: usr/local/www/widgets/widgets/services_status.widget.php:68 +#: usr/local/www/fbegin.inc:138 usr/local/www/diag_backup.php:183 +#: etc/inc/service-utils.inc:241 usr/local/www/fbegin.inc:147 +#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:240 +#: etc/inc/service-utils.inc:257 usr/local/www/diag_backup.php:183 +#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:257 +msgid "DNS Forwarder" +msgstr "" + +#: usr/local/www/diag_backup.php:107 usr/local/www/fbegin.inc:125 +#: usr/local/www/fbegin.inc:142 usr/local/www/diag_backup.php:184 +#: usr/local/www/fbegin.inc:151 usr/local/www/fbegin.inc:143 +#: usr/local/www/diag_backup.php:184 usr/local/www/fbegin.inc:143 +msgid "DHCP Server" +msgstr "" + +#: usr/local/www/diag_backup.php:108 usr/local/www/diag_backup.php:185 +#: usr/local/www/diag_backup.php:185 +msgid "Firewall Rules" +msgstr "" + +#: usr/local/www/diag_backup.php:110 usr/local/www/diag_backup.php:187 +#: usr/local/www/diag_backup.php:187 +msgid "IPSEC" +msgstr "" + +#: usr/local/www/diag_backup.php:114 usr/local/www/diag_backup.php:191 +#: usr/local/www/diag_backup.php:191 +msgid "PPTP Server" +msgstr "" + +#: usr/local/www/diag_backup.php:115 usr/local/www/diag_backup.php:193 +#: usr/local/www/diag_backup.php:193 +msgid "Scheduled Tasks" +msgstr "" + +#: usr/local/www/diag_backup.php:116 usr/local/www/diag_backup.php:194 +#: usr/local/www/diag_backup.php:194 +msgid "Syslog" +msgstr "" + +#: usr/local/www/diag_backup.php:118 usr/local/www/diag_backup.php:196 +#: usr/local/www/diag_backup.php:196 +msgid "Static routes" +msgstr "" + +#: usr/local/www/diag_backup.php:119 usr/local/www/diag_backup.php:197 +#: usr/local/www/diag_backup.php:197 +msgid "System tunables" +msgstr "" + +#: usr/local/www/diag_backup.php:120 usr/local/www/diag_backup.php:198 +#: usr/local/www/diag_backup.php:198 +msgid "SNMP Server" +msgstr "" + +#: usr/local/www/diag_backup.php:122 usr/local/www/diag_backup.php:200 +#: usr/local/www/diag_backup.php:200 +msgid "VLANS" +msgstr "" + +#: usr/local/www/diag_backup.php:130 usr/local/www/diag_backup.php:205 +#: usr/local/www/diag_backup.php:205 +msgid "ALL" +msgstr "" + +#: usr/local/www/diag_backup.php:157 usr/local/www/diag_backup.php:619 +#: usr/local/www/diag_backup.php:654 usr/local/www/diag_backup.php:244 +#: usr/local/www/diag_backup.php:698 usr/local/www/diag_backup.php:735 +#: usr/local/www/diag_backup.php:703 usr/local/www/diag_backup.php:740 +#: usr/local/www/diag_backup.php:244 usr/local/www/diag_backup.php:703 +#: usr/local/www/diag_backup.php:740 +msgid "Restore configuration" +msgstr "" + +#: usr/local/www/diag_backup.php:159 usr/local/www/diag_backup.php:246 +#: usr/local/www/diag_backup.php:246 +msgid "Reinstall" +msgstr "" + +#: usr/local/www/diag_backup.php:161 usr/local/www/diag_backup.php:673 +#: usr/local/www/diag_backup.php:248 usr/local/www/diag_backup.php:754 +#: usr/local/www/diag_backup.php:762 usr/local/www/diag_backup.php:248 +#: usr/local/www/diag_backup.php:762 +msgid "Clear Package Lock" +msgstr "" + +#: usr/local/www/diag_backup.php:165 usr/local/www/diag_backup.php:252 +#: usr/local/www/diag_backup.php:252 +msgid "Restore version" +msgstr "" + +#: usr/local/www/diag_backup.php:180 usr/local/www/diag_backup.php:267 +#: usr/local/www/diag_backup.php:267 +msgid "You must supply and confirm the password for encryption." +msgstr "" + +#: usr/local/www/diag_backup.php:182 usr/local/www/diag_backup.php:268 +#: usr/local/www/diag_backup.php:269 usr/local/www/diag_backup.php:346 +#: usr/local/www/diag_backup.php:269 usr/local/www/diag_backup.php:346 +msgid "The supplied 'Password' and 'Confirm' field values must match." +msgstr "" + +#: usr/local/www/diag_backup.php:266 usr/local/www/diag_backup.php:344 +#: usr/local/www/diag_backup.php:344 +msgid "You must supply and confirm the password for decryption." +msgstr "" + +#: usr/local/www/diag_backup.php:278 usr/local/www/diag_backup.php:356 +#: usr/local/www/diag_backup.php:356 +#, php-format +msgid "Warning, could not read file %s" +msgstr "" + +#: usr/local/www/diag_backup.php:284 usr/local/www/diag_backup.php:362 +#: usr/local/www/diag_backup.php:362 +msgid "" +"The uploaded file does not appear to contain an encrypted pfsense " +"configuration." +msgstr "" + +#: usr/local/www/diag_backup.php:291 usr/local/www/diag_backup.php:369 +#: usr/local/www/diag_backup.php:369 +msgid "Upgrading m0n0wall configuration to pfsense." +msgstr "" + +#: usr/local/www/diag_backup.php:299 usr/local/www/diag_backup.php:377 +#: usr/local/www/diag_backup.php:380 usr/local/www/diag_backup.php:377 +#: usr/local/www/diag_backup.php:380 +msgid "" +"You have selected to restore an area but we could not locate the correct xml " +"tag." +msgstr "" + +#: usr/local/www/diag_backup.php:303 usr/local/www/diag_backup.php:392 +#: usr/local/www/diag_backup.php:392 +msgid "" +"The configuration area has been restored. You may need to reboot the " +"firewall." +msgstr "" + +#: usr/local/www/diag_backup.php:307 usr/local/www/diag_backup.php:397 +#: usr/local/www/diag_backup.php:397 +#, php-format +msgid "" +"You have selected to restore the full configuration but we could not locate " +"a %s tag." +msgstr "" + +#: usr/local/www/diag_backup.php:438 usr/local/www/diag_backup.php:515 +#: usr/local/www/diag_backup.php:515 +msgid "The m0n0wall configuration has been restored and upgraded to pfSense." +msgstr "" + +#: usr/local/www/diag_backup.php:461 usr/local/www/diag_backup.php:485 +#: usr/local/www/diag_backup.php:538 usr/local/www/diag_backup.php:562 +#: usr/local/www/diag_backup.php:543 usr/local/www/diag_backup.php:567 +#: usr/local/www/diag_backup.php:543 usr/local/www/diag_backup.php:567 +msgid "The configuration could not be restored." +msgstr "" + +#: usr/local/www/diag_backup.php:466 usr/local/www/diag_backup.php:543 +#: usr/local/www/diag_backup.php:548 usr/local/www/diag_backup.php:548 +msgid "The configuration could not be restored (file upload error)." +msgstr "" + +#: usr/local/www/diag_backup.php:479 usr/local/www/diag_backup.php:556 +#: usr/local/www/diag_backup.php:561 usr/local/www/diag_backup.php:561 +msgid "" +"XXX - this feature may hose your config (do NOT backrev configs!) - billm" +msgstr "" + +#: usr/local/www/diag_backup.php:488 usr/local/www/diag_backup.php:565 +#: usr/local/www/diag_backup.php:570 usr/local/www/diag_backup.php:570 +msgid "No version selected." +msgstr "" + +#: usr/local/www/diag_backup.php:499 usr/local/www/diag_backup.php:576 +#: usr/local/www/diag_backup.php:581 usr/local/www/diag_backup.php:581 +msgid "Backup/restore" +msgstr "" + +#: usr/local/www/diag_backup.php:540 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624 +#: usr/local/www/diag_backup.php:624 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +msgid "The firewall configuration has been changed." +msgstr "" + +#: usr/local/www/diag_backup.php:540 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624 +#: usr/local/www/diag_backup.php:624 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +msgid "The firewall is now rebooting." +msgstr "" + +#: usr/local/www/diag_backup.php:549 usr/local/www/diag_confbak.php:139 +#: usr/local/www/diag_backup.php:628 usr/local/www/diag_backup.php:633 +#: usr/local/www/diag_backup.php:633 usr/local/www/diag_confbak.php:139 +msgid "Config History" +msgstr "" + +#: usr/local/www/diag_backup.php:550 usr/local/www/diag_confbak.php:140 +#: usr/local/www/fbegin.inc:190 usr/local/www/fbegin.inc:208 +#: usr/local/www/diag_backup.php:629 usr/local/www/fbegin.inc:216 +#: usr/local/www/diag_backup.php:634 usr/local/www/fbegin.inc:207 +#: usr/local/www/diag_backup.php:634 usr/local/www/fbegin.inc:207 +#: usr/local/www/diag_confbak.php:140 +msgid "Backup/Restore" +msgstr "" + +#: usr/local/www/diag_backup.php:560 usr/local/www/diag_backup.php:639 +#: usr/local/www/diag_backup.php:644 usr/local/www/diag_backup.php:644 +msgid "Backup configuration" +msgstr "" + +#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644 +#: usr/local/www/diag_backup.php:649 usr/local/www/diag_backup.php:649 +msgid "Click this button to download the system configuration in XML format." +msgstr "" + +#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644 +#: usr/local/www/diag_backup.php:649 usr/local/www/diag_backup.php:649 +msgid "Backup area:" +msgstr "" + +#: usr/local/www/diag_backup.php:572 usr/local/www/diag_backup.php:651 +#: usr/local/www/diag_backup.php:656 usr/local/www/diag_backup.php:656 +msgid "Do not backup package information." +msgstr "" + +#: usr/local/www/diag_backup.php:582 usr/local/www/diag_backup.php:661 +#: usr/local/www/diag_backup.php:666 usr/local/www/diag_backup.php:666 +msgid "Encrypt this configuration file." +msgstr "" + +#: usr/local/www/diag_backup.php:590 usr/local/www/diag_backup.php:669 +#: usr/local/www/diag_backup.php:674 usr/local/www/diag_backup.php:674 +msgid "" +"Do not backup RRD data (NOTE: RRD Data can consume 4+ megabytes of config." +"xml space!)" +msgstr "" + +#: usr/local/www/diag_backup.php:605 usr/local/www/diag_backup.php:684 +#: usr/local/www/diag_backup.php:689 usr/local/www/diag_backup.php:689 +msgid "confirm:" +msgstr "" + +#: usr/local/www/diag_backup.php:612 usr/local/www/diag_backup.php:691 +#: usr/local/www/diag_backup.php:696 usr/local/www/diag_backup.php:696 +msgid "Download configuration" +msgstr "" + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703 +#: usr/local/www/diag_backup.php:708 usr/local/www/diag_backup.php:708 +msgid "Open a" +msgstr "" + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703 +#: usr/local/www/diag_backup.php:708 usr/local/www/diag_backup.php:708 +msgid "" +"configuration XML file and click the button below to restore the " +"configuration." +msgstr "" + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:705 +#: usr/local/www/diag_backup.php:710 usr/local/www/diag_backup.php:710 +msgid "Restore area:" +msgstr "" + +#: usr/local/www/diag_backup.php:632 usr/local/www/diag_backup.php:713 +#: usr/local/www/diag_backup.php:718 usr/local/www/diag_backup.php:718 +msgid "Configuration file is encrypted." +msgstr "" + +#: usr/local/www/diag_backup.php:639 usr/local/www/diag_backup.php:720 +#: usr/local/www/diag_backup.php:725 usr/local/www/diag_backup.php:725 +msgid "Password :" +msgstr "" + +#: usr/local/www/diag_backup.php:647 usr/local/www/diag_backup.php:728 +#: usr/local/www/diag_backup.php:733 usr/local/www/diag_backup.php:733 +msgid "confirm :" +msgstr "" + +#: usr/local/www/diag_backup.php:655 usr/local/www/diag_backup.php:736 +#: usr/local/www/diag_backup.php:741 usr/local/www/diag_backup.php:741 +msgid "The firewall will reboot after restoring the configuration." +msgstr "" + +#: usr/local/www/diag_backup.php:663 usr/local/www/diag_backup.php:744 +#: usr/local/www/diag_backup.php:749 usr/local/www/diag_backup.php:749 +msgid "Package Functions" +msgstr "" + +#: usr/local/www/diag_backup.php:668 usr/local/www/diag_backup.php:749 +#: usr/local/www/diag_backup.php:755 usr/local/www/diag_backup.php:755 +msgid "" +"Click this button to reinstall all system packages. This may take a while." +msgstr "" + +#: usr/local/www/diag_backup.php:669 usr/local/www/diag_backup.php:750 +#: usr/local/www/diag_backup.php:756 usr/local/www/diag_backup.php:756 +msgid "Reinstall packages" +msgstr "" + +#: usr/local/www/diag_backup.php:672 usr/local/www/diag_backup.php:753 +#: usr/local/www/diag_backup.php:761 usr/local/www/diag_backup.php:761 +msgid "" +"Click this button to clear the package lock if a package fails to reinstall " +"properly after an upgrade." +msgstr "" + +#: usr/local/www/firewall_shaper_queues.php:172 +#: usr/local/www/firewall_shaper_queues.php:172 +msgid "Firewall: Shaper: By Queues View" +msgstr "" + +#: usr/local/www/diag_confbak.php:49 usr/local/www/diag_confbak.php:49 +#, php-format +msgid "Successfully reverted to timestamp %1$s with description \"%2$s\"." +msgstr "" + +#: usr/local/www/diag_confbak.php:49 usr/local/www/diag_confbak.php:59 +#: usr/local/www/diag_confbak.php:111 usr/local/www/diag_confbak.php:161 +#: usr/local/www/diag_confbak.php:169 usr/local/www/diag_confbak.php:162 +#: usr/local/www/diag_confbak.php:171 +#: usr/local/www/firewall_rules_edit.php:1585 +#: usr/local/www/firewall_rules_edit.php:1593 +#: usr/local/www/firewall_nat_edit.php:869 +#: usr/local/www/firewall_nat_edit.php:877 +#: usr/local/www/firewall_nat_out_edit.php:684 +#: usr/local/www/firewall_nat_out_edit.php:692 +#: usr/local/www/firewall_rules_edit.php:1596 +#: usr/local/www/firewall_rules_edit.php:1604 +#: usr/local/www/firewall_nat_edit.php:870 +#: usr/local/www/firewall_nat_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:1596 +#: usr/local/www/firewall_rules_edit.php:1604 +#: usr/local/www/firewall_nat_edit.php:870 +#: usr/local/www/firewall_nat_edit.php:878 usr/local/www/diag_confbak.php:49 +#: usr/local/www/diag_confbak.php:59 usr/local/www/diag_confbak.php:111 +#: usr/local/www/diag_confbak.php:162 usr/local/www/diag_confbak.php:171 +#: usr/local/www/firewall_nat_out_edit.php:684 +#: usr/local/www/firewall_nat_out_edit.php:692 +msgid "n/j/y H:i:s" +msgstr "" + +#: usr/local/www/diag_confbak.php:51 usr/local/www/diag_confbak.php:51 +msgid "Unable to revert to the selected configuration." +msgstr "" + +#: usr/local/www/diag_confbak.php:59 usr/local/www/diag_confbak.php:59 +#, php-format +msgid "Deleted backup with timestamp %1$s and description \"%2$s\"." +msgstr "" + +#: usr/local/www/diag_confbak.php:98 usr/local/www/diag_confbak.php:98 +msgid "Configuration History" +msgstr "" + +#: usr/local/www/diag_confbak.php:111 usr/local/www/diag_confbak.php:111 +msgid "Configuration diff from" +msgstr "" + +#: usr/local/www/diag_confbak.php:152 usr/local/www/diag_confbak.php:206 +#: usr/local/www/diag_confbak.php:208 usr/local/www/diag_confbak.php:152 +#: usr/local/www/diag_confbak.php:208 +msgid "Diff" +msgstr "" + +#: usr/local/www/diag_confbak.php:153 +#: usr/local/www/system_firmware_restorefullbackup.php:140 +#: usr/local/www/system_firmware_restorefullbackup.php:140 +#: usr/local/www/diag_confbak.php:153 +msgid "Date" +msgstr "" + +#: usr/local/www/diag_confbak.php:154 usr/local/www/diag_confbak.php:155 +#: usr/local/www/diag_confbak.php:155 +msgid "Configuration Change" +msgstr "" + +#: usr/local/www/diag_confbak.php:163 usr/local/www/diag_confbak.php:165 +#: usr/local/www/diag_confbak.php:165 +msgid "Current" +msgstr "" + +#: usr/local/www/diag_confbak.php:171 usr/local/www/diag_confbak.php:173 +#: usr/local/www/widgets/widgets/gateways.widget.php:105 +#: usr/local/www/widgets/widgets/gateways.widget.php:128 +#: usr/local/www/widgets/widgets/gateways.widget.php:129 +#: usr/local/www/widgets/widgets/gateways.widget.php:129 +#: usr/local/www/diag_confbak.php:173 +msgid "Unknown" +msgstr "" + +#: usr/local/www/diag_confbak.php:189 usr/local/www/diag_confbak.php:191 +#: usr/local/www/diag_confbak.php:191 +msgid "Revert to this configuration?" +msgstr "" + +#: usr/local/www/diag_confbak.php:190 usr/local/www/diag_confbak.php:192 +#: usr/local/www/diag_confbak.php:192 +msgid "Revert to this configuration" +msgstr "" + +#: usr/local/www/diag_confbak.php:194 usr/local/www/diag_confbak.php:196 +#: usr/local/www/diag_confbak.php:196 +msgid "Delete this configuration backup?" +msgstr "" + +#: usr/local/www/diag_confbak.php:195 usr/local/www/diag_confbak.php:197 +#: usr/local/www/diag_confbak.php:197 +msgid "Remove this backup" +msgstr "" + +#: usr/local/www/diag_confbak.php:200 usr/local/www/diag_confbak.php:202 +#: usr/local/www/diag_confbak.php:202 +msgid "Download this backup" +msgstr "" + +#: usr/local/www/diag_confbak.php:212 usr/local/www/diag_confbak.php:214 +#: usr/local/www/diag_confbak.php:214 +msgid "No backups found." +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:106 +#: usr/local/www/firewall_virtual_ip.php:103 +#: usr/local/www/firewall_virtual_ip.php:103 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"NAT mapping." +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:118 +msgid "This entry cannot be deleted because it is still referenced by CARP" +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:124 +msgid "" +"This entry cannot be deleted because it is still referenced by ip alias entry" +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:149 +#: usr/local/www/firewall_virtual_ip.php:152 +#: usr/local/www/firewall_virtual_ip.php:166 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/firewall_virtual_ip.php:189 +msgid "Virtual IP Addresses" +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:164 +#: usr/local/www/firewall_virtual_ip.php:167 +#: usr/local/www/firewall_virtual_ip.php:181 +#: usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_virtual_ip.php:204 +msgid "The VIP configuration has been changed." +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:172 usr/local/www/fbegin.inc:115 +#: usr/local/www/fbegin.inc:132 usr/local/www/fbegin.inc:141 +#: usr/local/www/firewall_virtual_ip.php:175 +#: usr/local/www/firewall_virtual_ip.php:189 usr/local/www/fbegin.inc:133 +#: usr/local/www/firewall_virtual_ip.php:212 +#: usr/local/www/firewall_virtual_ip.php:212 usr/local/www/fbegin.inc:133 +msgid "Virtual IPs" +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:173 +#: usr/local/www/firewall_virtual_ip.php:176 +#: usr/local/www/firewall_virtual_ip.php:190 +#: usr/local/www/firewall_virtual_ip.php:213 +#: usr/local/www/firewall_virtual_ip.php:213 +msgid "CARP Settings" +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:185 +#: usr/local/www/firewall_virtual_ip.php:188 +#: usr/local/www/firewall_virtual_ip.php:202 +#: usr/local/www/firewall_virtual_ip.php:225 +#: usr/local/www/firewall_virtual_ip.php:225 +msgid "Virtual IP address" +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +#: usr/local/www/firewall_virtual_ip.php:291 +#: usr/local/www/firewall_virtual_ip.php:291 +msgid "The virtual IP addresses defined on this page may be used in" +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +#: usr/local/www/firewall_virtual_ip.php:291 +#: usr/local/www/firewall_virtual_ip.php:291 +msgid "mappings." +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:243 +#: usr/local/www/firewall_virtual_ip.php:249 +#: usr/local/www/firewall_virtual_ip.php:269 +#: usr/local/www/firewall_virtual_ip.php:292 +#: usr/local/www/firewall_virtual_ip.php:292 +msgid "You can check the status of your CARP Virtual IPs and interfaces " +msgstr "" + +#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309 +#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297 +#: usr/local/www/guiconfig.inc:294 usr/local/www/guiconfig.inc:294 +msgid "apply" +msgstr "" + +#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309 +#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297 +#: usr/local/www/guiconfig.inc:294 usr/local/www/guiconfig.inc:294 +msgid "save" +msgstr "" + +#: usr/local/www/guiconfig.inc:295 usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/system_certmanager.php:541 +#: usr/local/www/system_certmanager.php:640 usr/local/www/guiconfig.inc:309 +#: usr/local/www/vpn_ipsec_mobile.php:335 usr/local/www/guiconfig.inc:298 +#: usr/local/www/system_certmanager.php:649 usr/local/www/guiconfig.inc:297 +#: usr/local/www/system_certmanager.php:650 usr/local/www/guiconfig.inc:294 +#: usr/local/www/system_certmanager.php:650 +#: usr/local/www/vpn_ipsec_mobile.php:335 usr/local/www/guiconfig.inc:294 +msgid "create" +msgstr "" + +#: usr/local/www/halt.php:52 usr/local/www/halt.php:61 +#: usr/local/www/halt.php:61 +msgid "The system is halting now. This may take one minute." +msgstr "" + +#: usr/local/www/halt.php:59 usr/local/www/halt.php:54 +#: usr/local/www/halt.php:54 +msgid "Halt system" +msgstr "" + +#: usr/local/www/halt.php:67 usr/local/www/halt.php:67 +msgid "Are you sure you want to halt the system?" +msgstr "" + +#: usr/local/www/index.php:115 usr/local/www/index.php:126 +#: usr/local/www/index.php:129 usr/local/www/index.php:126 +msgid "Widget configuration has been changed." +msgstr "" + +#: usr/local/www/index.php:172 usr/local/www/index.php:183 +#: usr/local/www/index.php:186 usr/local/www/index.php:183 +#, php-format +msgid "Welcome to %s!\n" +msgstr "" + +#: usr/local/www/index.php:173 usr/local/www/index.php:184 +#: usr/local/www/index.php:187 usr/local/www/index.php:184 +msgid "One moment while we start the initial setup wizard." +msgstr "" + +#: usr/local/www/index.php:174 usr/local/www/index.php:185 +#: usr/local/www/index.php:188 usr/local/www/index.php:185 +msgid "" +"Embedded platform users: Please be patient, the wizard takes a little longer " +"to run than the normal GUI." +msgstr "" + +#: usr/local/www/index.php:175 usr/local/www/index.php:186 +#: usr/local/www/index.php:189 usr/local/www/index.php:186 +#, php-format +msgid "To bypass the wizard, click on the %s logo on the initial page." +msgstr "" + +#: usr/local/www/index.php:454 usr/local/www/index.php:446 +#: usr/local/www/index.php:463 usr/local/www/index.php:468 +#: usr/local/www/index.php:465 usr/local/www/index.php:465 +msgid "Status: Dashboard" +msgstr "" + +#: usr/local/www/index.php:486 usr/local/www/index.php:478 +#: usr/local/www/index.php:490 usr/local/www/index.php:494 +#: usr/local/www/index.php:491 usr/local/www/index.php:491 +msgid "Available Widgets" +msgstr "" + +#: usr/local/www/index.php:524 usr/local/www/index.php:516 +#: usr/local/www/index.php:528 usr/local/www/index.php:531 +#: usr/local/www/index.php:528 +msgid "Welcome to the Dashboard page" +msgstr "" + +#: usr/local/www/index.php:532 usr/local/www/index.php:524 +#: usr/local/www/index.php:536 usr/local/www/index.php:538 +#: usr/local/www/index.php:535 usr/local/www/index.php:535 +msgid "" +"This page allows you to customize the information you want to be displayed!" +msgstr "" + +#: usr/local/www/index.php:533 usr/local/www/index.php:525 +#: usr/local/www/index.php:537 usr/local/www/index.php:539 +#: usr/local/www/index.php:536 usr/local/www/index.php:536 +msgid "To get started click the" +msgstr "" + +#: usr/local/www/index.php:533 usr/local/www/index.php:525 +#: usr/local/www/index.php:537 usr/local/www/index.php:539 +#: usr/local/www/index.php:536 usr/local/www/index.php:536 +msgid "icon to add widgets." +msgstr "" + +#: usr/local/www/index.php:535 usr/local/www/index.php:527 +#: usr/local/www/index.php:539 usr/local/www/index.php:541 +#: usr/local/www/index.php:538 usr/local/www/index.php:538 +msgid "You can move any widget around by clicking and dragging the title." +msgstr "" + +#: usr/local/www/index.php:541 usr/local/www/index.php:534 +#: usr/local/www/index.php:546 usr/local/www/index.php:548 +#: usr/local/www/index.php:545 usr/local/www/index.php:545 +msgid "Click here to add widgets" +msgstr "" + +#: usr/local/www/index.php:543 usr/local/www/index.php:536 +#: usr/local/www/index.php:548 usr/local/www/index.php:550 +#: usr/local/www/index.php:547 usr/local/www/index.php:547 +msgid "Click here for help" +msgstr "" + +#: usr/local/www/index.php:547 usr/local/www/index.php:540 +#: usr/local/www/index.php:552 usr/local/www/index.php:554 +#: usr/local/www/index.php:551 usr/local/www/index.php:551 +msgid "Save Settings" +msgstr "" + +#: usr/local/www/index.php:699 usr/local/www/index.php:692 +#: usr/local/www/index.php:704 usr/local/www/index.php:701 +#: usr/local/www/index.php:701 +msgid "Loading selected widget" +msgstr "" + +#: usr/local/www/interfaces.php:186 usr/local/www/interfaces.php:184 +#: usr/local/www/interfaces.php:185 usr/local/www/interfaces.php:185 +#, php-format +msgid "Sorry, an alias with the name %s already exists." +msgstr "" + +#: usr/local/www/interfaces.php:327 usr/local/www/interfaces.php:355 +#: usr/local/www/interfaces.php:352 usr/local/www/interfaces.php:350 +#: usr/local/www/interfaces.php:351 usr/local/www/interfaces.php:350 +msgid "You have already applied your settings!" +msgstr "" + +#: usr/local/www/interfaces.php:407 usr/local/www/interfaces.php:443 +#: usr/local/www/interfaces.php:440 usr/local/www/interfaces.php:428 +#: usr/local/www/interfaces.php:433 usr/local/www/interfaces.php:429 +#: usr/local/www/interfaces.php:429 +msgid "An interface with the specified description already exists." +msgstr "" + +#: usr/local/www/interfaces.php:413 usr/local/www/interfaces.php:449 +#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:434 +#: usr/local/www/interfaces.php:439 usr/local/www/interfaces.php:435 +#: usr/local/www/interfaces.php:435 +msgid "" +"The DHCP Server is active on this interface and it can be used only with a " +"static IP configuration. Please disable the DHCP Server service on this " +"interface first, then change the interface configuration." +msgstr "" + +#: usr/local/www/interfaces.php:415 usr/local/www/interfaces.php:451 +#: usr/local/www/interfaces.php:448 usr/local/www/interfaces.php:436 +#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:437 +#: usr/local/www/interfaces.php:437 +msgid "" +"The DHCP6 Server is active on this interface and it can be used only with a " +"static IPv6 configuration. Please disable the DHCPv6 Server service on this " +"interface first, then change the interface configuration." +msgstr "" + +#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:1364 +#: usr/local/www/status_interfaces.php:192 +#: usr/local/www/status_interfaces.php:266 usr/local/www/interfaces.php:456 +#: usr/local/www/interfaces.php:1468 usr/local/www/status_interfaces.php:269 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:1456 +#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:1469 +#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:1514 +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:1508 +#: usr/local/www/status_interfaces.php:269 usr/local/www/interfaces.php:442 +#: usr/local/www/interfaces.php:1508 +msgid "IPv4 address" +msgstr "" + +#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:456 usr/local/www/interfaces.php:509 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:494 +#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:499 +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:495 +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:495 +msgid "Subnet bit count" +msgstr "" + +#: usr/local/www/interfaces.php:427 usr/local/www/interfaces.php:480 +msgid "" +"This interface is referenced by VIPs please delete those before setting the " +"interface to 'none' configuration." +msgstr "" + +#: usr/local/www/interfaces.php:432 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:521 +#: usr/local/www/interfaces.php:531 usr/local/www/interfaces.php:541 +#: usr/local/www/interfaces.php:546 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:518 usr/local/www/interfaces.php:528 +#: usr/local/www/interfaces.php:538 usr/local/www/interfaces.php:543 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:526 +#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:511 +#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:533 +#: usr/local/www/interfaces.php:454 usr/local/www/interfaces.php:507 +#: usr/local/www/interfaces.php:519 usr/local/www/interfaces.php:529 +#: usr/local/www/interfaces.php:534 usr/local/www/interfaces.php:454 +#: usr/local/www/interfaces.php:507 usr/local/www/interfaces.php:519 +#: usr/local/www/interfaces.php:529 usr/local/www/interfaces.php:534 +#, php-format +msgid "You have to reassign the interface to be able to configure as %s." +msgstr "" + +#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1748 +#: usr/local/www/interfaces.php:472 usr/local/www/interfaces.php:1926 +#: usr/local/www/interfaces.php:469 usr/local/www/interfaces.php:1914 +#: usr/local/www/interfaces.php:457 usr/local/www/interfaces.php:1938 +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:1984 +#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:1972 +#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:1972 +msgid "Modem Port" +msgstr "" + +#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1736 +#: usr/local/www/interfaces_ppps_edit.php:182 +#: usr/local/www/interfaces_ppps_edit.php:523 usr/local/www/interfaces.php:472 +#: usr/local/www/interfaces.php:1914 +#: usr/local/www/interfaces_ppps_edit.php:524 usr/local/www/interfaces.php:469 +#: usr/local/www/interfaces.php:1902 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:530 usr/local/www/interfaces.php:457 +#: usr/local/www/interfaces.php:1926 usr/local/www/interfaces.php:462 +#: usr/local/www/interfaces.php:1972 +#: usr/local/www/interfaces_ppps_edit.php:528 usr/local/www/interfaces.php:458 +#: usr/local/www/interfaces.php:1960 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:528 usr/local/www/interfaces.php:458 +#: usr/local/www/interfaces.php:1960 +msgid "Phone Number" +msgstr "" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445 +#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:466 usr/local/www/interfaces.php:468 +#: usr/local/www/interfaces.php:471 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:467 +msgid "PPPoE username" +msgstr "" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445 +#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:466 usr/local/www/interfaces.php:468 +#: usr/local/www/interfaces.php:471 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:467 +msgid "PPPoE password" +msgstr "" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452 +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:1807 +#: usr/local/www/interfaces.php:1926 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498 +#: usr/local/www/interfaces.php:1985 usr/local/www/interfaces.php:2104 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1973 +#: usr/local/www/interfaces.php:2092 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:2000 usr/local/www/interfaces.php:2122 +#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:2046 +#: usr/local/www/interfaces.php:2168 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:2035 usr/local/www/interfaces.php:2157 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:2035 usr/local/www/interfaces.php:2157 +msgid "Dial on demand" +msgstr "" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452 +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484 +msgid "Idle timeout value" +msgstr "" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 +msgid "PPTP username" +msgstr "" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 +msgid "PPTP password" +msgstr "" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 +msgid "PPTP local IP address" +msgstr "" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 +msgid "PPTP subnet" +msgstr "" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 +msgid "PPTP remote IP address" +msgstr "" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488 +#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 +msgid "L2TP username" +msgstr "" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488 +#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 +msgid "L2TP password" +msgstr "" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488 +#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 +msgid "L2TP remote IP address" +msgstr "" + +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1470 +#: usr/local/www/status_interfaces.php:216 usr/local/www/diag_ndp.php:129 +#: usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcpv6_edit.php:198 +#: usr/local/www/status_dhcpv6_leases.php:359 +#: usr/local/www/services_dhcpv6_edit.php:201 +#: usr/local/www/status_interfaces.php:297 +#: usr/local/www/status_dhcpv6_leases.php:403 usr/local/www/interfaces.php:509 +#: usr/local/www/interfaces.php:1576 usr/local/www/services_dhcpv6.php:899 +#: usr/local/www/services_dhcpv6_edit.php:200 +#: usr/local/www/status_interfaces.php:300 +#: usr/local/www/status_dhcpv6_leases.php:404 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:1564 usr/local/www/services_dhcpv6.php:830 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/services_dhcpv6_edit.php:203 +#: usr/local/www/services_dhcpv6.php:851 usr/local/www/interfaces.php:494 +#: usr/local/www/interfaces.php:1574 usr/local/www/interfaces.php:499 +#: usr/local/www/interfaces.php:1620 usr/local/www/interfaces.php:495 +#: usr/local/www/interfaces.php:1613 usr/local/www/diag_ndp.php:129 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/services_dhcpv6_edit.php:203 +#: usr/local/www/status_interfaces.php:300 +#: usr/local/www/services_dhcpv6.php:851 usr/local/www/interfaces.php:495 +#: usr/local/www/interfaces.php:1613 +msgid "IPv6 address" +msgstr "" + +#: usr/local/www/interfaces.php:493 usr/local/www/interfaces.php:563 +#: usr/local/www/interfaces.php:560 usr/local/www/interfaces.php:550 +#: usr/local/www/interfaces.php:557 usr/local/www/interfaces.php:553 +#: usr/local/www/interfaces.php:553 +msgid "A valid IPv4 address must be specified." +msgstr "" + +#: usr/local/www/interfaces.php:495 usr/local/www/services_dhcpv6_edit.php:123 +#: usr/local/www/services_dhcpv6_edit.php:125 usr/local/www/interfaces.php:565 +#: usr/local/www/interfaces.php:562 usr/local/www/services_dhcpv6_edit.php:128 +#: usr/local/www/interfaces.php:574 usr/local/www/interfaces.php:570 +#: usr/local/www/services_dhcpv6_edit.php:128 usr/local/www/interfaces.php:570 +msgid "A valid IPv6 address must be specified." +msgstr "" + +#: usr/local/www/interfaces.php:497 usr/local/www/interfaces.php:499 +#: usr/local/www/interfaces.php:567 usr/local/www/interfaces.php:569 +#: usr/local/www/interfaces.php:564 usr/local/www/interfaces.php:566 +#: usr/local/www/interfaces.php:579 usr/local/www/interfaces.php:581 +#: usr/local/www/interfaces.php:590 usr/local/www/interfaces.php:592 +#: usr/local/www/interfaces.php:586 usr/local/www/interfaces.php:588 +#: usr/local/www/interfaces.php:586 usr/local/www/interfaces.php:588 +msgid "A valid subnet bit count must be specified." +msgstr "" + +#: usr/local/www/interfaces.php:501 usr/local/www/interfaces.php:571 +#: usr/local/www/interfaces.php:568 usr/local/www/interfaces.php:583 +#: usr/local/www/interfaces.php:594 usr/local/www/interfaces.php:590 +#: usr/local/www/interfaces.php:590 +msgid "A valid alias IP address must be specified." +msgstr "" + +#: usr/local/www/interfaces.php:503 usr/local/www/interfaces.php:573 +#: usr/local/www/interfaces.php:570 usr/local/www/interfaces.php:585 +#: usr/local/www/interfaces.php:596 usr/local/www/interfaces.php:592 +#: usr/local/www/interfaces.php:592 +msgid "A valid alias subnet bit count must be specified." +msgstr "" + +#: usr/local/www/interfaces.php:517 usr/local/www/system_routes_edit.php:103 +#: usr/local/www/system_routes_edit.php:104 usr/local/www/interfaces.php:587 +#: usr/local/www/interfaces.php:584 usr/local/www/interfaces.php:599 +#: usr/local/www/system_routes_edit.php:107 usr/local/www/interfaces.php:610 +#: usr/local/www/interfaces.php:606 usr/local/www/system_routes_edit.php:109 +#: usr/local/www/interfaces.php:606 +msgid "A valid gateway must be specified." +msgstr "" + +#: usr/local/www/interfaces.php:521 usr/local/www/interfaces.php:591 +#: usr/local/www/interfaces.php:588 usr/local/www/interfaces.php:603 +#: usr/local/www/interfaces.php:614 usr/local/www/interfaces.php:610 +#: usr/local/www/interfaces.php:610 +msgid "The service name contains invalid characters." +msgstr "" + +#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:539 +#: usr/local/www/interfaces_ppps_edit.php:217 usr/local/www/interfaces.php:593 +#: usr/local/www/interfaces.php:609 usr/local/www/interfaces.php:590 +#: usr/local/www/interfaces.php:606 usr/local/www/interfaces_ppps_edit.php:223 +#: usr/local/www/interfaces.php:605 usr/local/www/interfaces.php:621 +#: usr/local/www/interfaces.php:616 usr/local/www/interfaces.php:632 +#: usr/local/www/interfaces.php:612 usr/local/www/interfaces.php:628 +#: usr/local/www/interfaces_ppps_edit.php:223 usr/local/www/interfaces.php:612 +#: usr/local/www/interfaces.php:628 +msgid "The idle timeout value must be an integer." +msgstr "" + +#: usr/local/www/interfaces.php:526 usr/local/www/interfaces_ppps_edit.php:220 +#: usr/local/www/interfaces.php:596 usr/local/www/interfaces.php:593 +#: usr/local/www/interfaces_ppps_edit.php:226 usr/local/www/interfaces.php:608 +#: usr/local/www/interfaces.php:619 usr/local/www/interfaces.php:615 +#: usr/local/www/interfaces_ppps_edit.php:226 usr/local/www/interfaces.php:615 +msgid "A valid PPPoE reset hour must be specified (0-23)." +msgstr "" + +#: usr/local/www/interfaces.php:529 usr/local/www/interfaces_ppps_edit.php:223 +#: usr/local/www/interfaces.php:599 usr/local/www/interfaces.php:596 +#: usr/local/www/interfaces_ppps_edit.php:229 usr/local/www/interfaces.php:611 +#: usr/local/www/interfaces.php:622 usr/local/www/interfaces.php:618 +#: usr/local/www/interfaces_ppps_edit.php:229 usr/local/www/interfaces.php:618 +msgid "A valid PPPoE reset minute must be specified (0-59)." +msgstr "" + +#: usr/local/www/interfaces.php:531 usr/local/www/interfaces_ppps_edit.php:225 +#: usr/local/www/interfaces.php:601 usr/local/www/interfaces.php:598 +#: usr/local/www/interfaces_ppps_edit.php:231 usr/local/www/interfaces.php:613 +#: usr/local/www/interfaces.php:624 usr/local/www/interfaces.php:620 +#: usr/local/www/interfaces_ppps_edit.php:231 usr/local/www/interfaces.php:620 +msgid "A valid PPPoE reset date must be specified (mm/dd/yyyy)." +msgstr "" + +#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:603 +#: usr/local/www/interfaces.php:600 usr/local/www/interfaces.php:615 +#: usr/local/www/interfaces.php:626 usr/local/www/interfaces.php:622 +#: usr/local/www/interfaces.php:622 +msgid "A valid PPTP local IP address must be specified." +msgstr "" + +#: usr/local/www/interfaces.php:535 usr/local/www/interfaces.php:605 +#: usr/local/www/interfaces.php:602 usr/local/www/interfaces.php:617 +#: usr/local/www/interfaces.php:628 usr/local/www/interfaces.php:624 +#: usr/local/www/interfaces.php:624 +msgid "A valid PPTP subnet bit count must be specified." +msgstr "" + +#: usr/local/www/interfaces.php:537 usr/local/www/interfaces.php:607 +#: usr/local/www/interfaces.php:604 usr/local/www/interfaces.php:619 +#: usr/local/www/interfaces.php:630 usr/local/www/interfaces.php:626 +#: usr/local/www/interfaces.php:626 +msgid "A valid PPTP remote IP address must be specified." +msgstr "" + +#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:613 +#: usr/local/www/interfaces.php:610 usr/local/www/interfaces.php:625 +#: usr/local/www/interfaces.php:637 usr/local/www/interfaces.php:633 +#: usr/local/www/interfaces.php:633 +msgid "The MTU must be greater than 576 bytes." +msgstr "" + +#: usr/local/www/interfaces.php:545 usr/local/www/interfaces.php:615 +#: usr/local/www/interfaces.php:612 usr/local/www/interfaces.php:627 +#: usr/local/www/interfaces.php:668 usr/local/www/interfaces.php:664 +#: usr/local/www/interfaces.php:664 +msgid "The MSS must be greater than 576 bytes." +msgstr "" + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2164 +#: usr/local/www/load_balancer_pool.php:132 usr/local/www/vpn_ipsec.php:283 +#: usr/local/www/vpn_ipsec.php:457 usr/local/www/interfaces_wireless.php:107 +#: usr/local/www/interfaces_wireless_edit.php:84 +#: usr/local/www/interfaces_wireless_edit.php:176 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:187 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/status_lb_pool.php:131 usr/local/www/vpn_ipsec_phase2.php:404 +#: usr/local/www/vpn_ipsec.php:294 usr/local/www/vpn_ipsec.php:468 +#: usr/local/www/system_advanced_misc.php:334 +#: usr/local/www/vpn_ipsec_phase2.php:430 usr/local/www/interfaces.php:619 +#: usr/local/www/interfaces.php:2342 +#: usr/local/www/load_balancer_pool_edit.php:195 +#: usr/local/www/load_balancer_pool.php:133 usr/local/www/vpn_ipsec.php:293 +#: usr/local/www/vpn_ipsec.php:467 usr/local/www/system_advanced_misc.php:353 +#: usr/local/www/interfaces_wireless.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:496 usr/local/www/interfaces.php:616 +#: usr/local/www/interfaces.php:2330 +#: usr/local/www/load_balancer_pool_edit.php:193 +#: usr/local/www/load_balancer_pool.php:131 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:178 +#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:473 +#: usr/local/www/interfaces_wireless.php:110 +#: usr/local/www/vpn_ipsec_phase2.php:518 usr/local/www/interfaces.php:631 +#: usr/local/www/interfaces.php:2360 usr/local/www/interfaces.php:672 +#: usr/local/www/interfaces.php:2406 usr/local/www/interfaces.php:668 +#: usr/local/www/interfaces.php:2395 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:178 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:473 +#: usr/local/www/interfaces_wireless.php:110 +#: usr/local/www/status_lb_pool.php:131 +#: usr/local/www/load_balancer_pool.php:131 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:193 +#: usr/local/www/vpn_ipsec_phase2.php:518 usr/local/www/interfaces.php:668 +#: usr/local/www/interfaces.php:2395 +msgid "Mode" +msgstr "" + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2174 +#: usr/local/www/status_interfaces.php:265 +#: usr/local/www/status_interfaces.php:362 usr/local/www/interfaces.php:622 +#: usr/local/www/interfaces.php:2352 usr/local/www/status_interfaces.php:365 +#: usr/local/www/interfaces.php:619 usr/local/www/interfaces.php:2340 +#: usr/local/www/interfaces.php:634 usr/local/www/interfaces.php:2370 +#: usr/local/www/interfaces.php:675 usr/local/www/interfaces.php:2416 +#: usr/local/www/interfaces.php:671 usr/local/www/interfaces.php:2405 +#: usr/local/www/status_interfaces.php:365 usr/local/www/interfaces.php:671 +#: usr/local/www/interfaces.php:2405 +msgid "SSID" +msgstr "" + +#: usr/local/www/interfaces.php:583 usr/local/www/interfaces.php:657 +#: usr/local/www/interfaces.php:654 usr/local/www/interfaces.php:669 +#: usr/local/www/interfaces.php:710 usr/local/www/interfaces.php:706 +#: usr/local/www/interfaces.php:706 +msgid "" +"Invalid WEP key size. Sizes should be 40 (64) bit keys or 104 (128) bit." +msgstr "" + +#: usr/local/www/interfaces.php:591 usr/local/www/interfaces.php:665 +#: usr/local/www/interfaces.php:662 usr/local/www/interfaces.php:677 +#: usr/local/www/interfaces.php:718 usr/local/www/interfaces.php:714 +#: usr/local/www/interfaces.php:714 +msgid "The length of the passphrase should be between 8 and 63 characters." +msgstr "" + +#: usr/local/www/interfaces.php:659 +#, php-format +msgid "Interface %s dynamic gateway" +msgstr "" + +#: usr/local/www/interfaces.php:1004 usr/local/www/interfaces.php:1090 +#: usr/local/www/interfaces.php:1078 usr/local/www/interfaces.php:1092 +#: usr/local/www/interfaces.php:1134 usr/local/www/interfaces.php:1129 +#: usr/local/www/interfaces.php:1129 +#, php-format +msgid "" +"Unable to change mode to %s. You may already have the maximum number of " +"wireless clones supported in this mode." +msgstr "" + +#: usr/local/www/interfaces.php:1032 usr/local/www/interfaces.php:1118 +#: usr/local/www/interfaces.php:1106 usr/local/www/interfaces.php:1120 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157 +#: usr/local/www/interfaces.php:1157 +msgid "Static IPv4" +msgstr "" + +#: usr/local/www/interfaces.php:1032 usr/local/www/vpn_pppoe.php:86 +#: usr/local/www/status_interfaces.php:109 +#: usr/local/www/status_interfaces.php:127 usr/local/www/interfaces.php:1118 +#: usr/local/www/status_interfaces.php:130 usr/local/www/interfaces.php:1106 +#: usr/local/www/vpn_pppoe.php:87 usr/local/www/interfaces.php:1120 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157 +#: usr/local/www/vpn_pppoe.php:87 usr/local/www/status_interfaces.php:130 +#: usr/local/www/interfaces.php:1157 +msgid "PPPoE" +msgstr "" + +#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:124 +#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:166 +#: usr/local/www/status_interfaces.php:142 usr/local/www/interfaces.php:1118 +#: usr/local/www/fbegin.inc:174 usr/local/www/status_interfaces.php:145 +#: usr/local/www/interfaces.php:1106 usr/local/www/fbegin.inc:165 +#: usr/local/www/interfaces.php:1120 usr/local/www/interfaces.php:1162 +#: usr/local/www/interfaces.php:1157 usr/local/www/status_interfaces.php:145 +#: usr/local/www/fbegin.inc:165 usr/local/www/interfaces.php:1157 +msgid "PPTP" +msgstr "" + +#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:139 +#: usr/local/www/fbegin.inc:150 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:167 +#: usr/local/www/status_interfaces.php:157 usr/local/www/interfaces.php:1118 +#: usr/local/www/fbegin.inc:175 usr/local/www/status_interfaces.php:160 +#: usr/local/www/interfaces.php:1106 usr/local/www/fbegin.inc:166 +#: usr/local/www/interfaces.php:1120 usr/local/www/interfaces.php:1162 +#: usr/local/www/interfaces.php:1157 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/status_interfaces.php:160 usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:166 +#: usr/local/www/interfaces.php:1157 +msgid "L2TP" +msgstr "" + +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121 +#: usr/local/www/interfaces.php:1163 usr/local/www/interfaces.php:1158 +#: usr/local/www/interfaces.php:1158 +msgid "Static IPv6" +msgstr "" + +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121 +#: usr/local/www/interfaces.php:1163 usr/local/www/interfaces.php:1158 +#: usr/local/www/interfaces.php:1158 +msgid "DHCP6" +msgstr "" + +#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326 +#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327 +#: usr/local/www/interfaces.php:1369 usr/local/www/interfaces.php:1364 +#: usr/local/www/interfaces.php:1364 +#, php-format +msgid "The %s configuration has been changed." +msgstr "" + +#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326 +#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327 +#: usr/local/www/interfaces.php:1369 usr/local/www/interfaces.php:1364 +#: usr/local/www/interfaces.php:1364 +msgid "Don't forget to adjust the DHCP Server range if needed after applying." +msgstr "" + +#: usr/local/www/interfaces.php:1231 usr/local/www/interfaces.php:1335 +#: usr/local/www/interfaces.php:1323 usr/local/www/interfaces.php:1336 +#: usr/local/www/interfaces.php:1378 usr/local/www/interfaces.php:1373 +#: usr/local/www/interfaces.php:1373 +msgid "General configuration" +msgstr "" + +#: usr/local/www/interfaces.php:1237 usr/local/www/interfaces.php:1341 +#: usr/local/www/interfaces.php:1329 usr/local/www/interfaces.php:1342 +#: usr/local/www/interfaces.php:1384 usr/local/www/interfaces.php:1379 +#: usr/local/www/interfaces.php:1379 +msgid "Enable Interface" +msgstr "" + +#: usr/local/www/interfaces.php:1247 usr/local/www/interfaces.php:1351 +#: usr/local/www/interfaces.php:1339 usr/local/www/interfaces.php:1352 +#: usr/local/www/interfaces.php:1394 usr/local/www/interfaces.php:1389 +#: usr/local/www/interfaces.php:1389 +msgid "Enter a description (name) for the interface here." +msgstr "" + +#: usr/local/www/interfaces.php:1251 usr/local/www/interfaces.php:1355 +#: usr/local/www/interfaces.php:1343 usr/local/www/interfaces.php:1356 +#: usr/local/www/interfaces.php:1398 usr/local/www/interfaces.php:1393 +#: usr/local/www/interfaces.php:1393 +msgid "IPv4 Configuration Type" +msgstr "" + +#: usr/local/www/interfaces.php:1267 usr/local/www/interfaces.php:1371 +#: usr/local/www/interfaces.php:1359 usr/local/www/interfaces.php:1372 +#: usr/local/www/interfaces.php:1414 usr/local/www/interfaces.php:1409 +#: usr/local/www/interfaces.php:1409 +msgid "IPv6 Configuration Type" +msgstr "" + +#: usr/local/www/interfaces.php:1292 usr/local/www/interfaces.php:1396 +#: usr/local/www/interfaces.php:1384 usr/local/www/interfaces.php:1397 +#: usr/local/www/interfaces.php:1439 usr/local/www/interfaces.php:1434 +#: usr/local/www/interfaces.php:1434 +msgid "Insert my local MAC address" +msgstr "" + +#: usr/local/www/interfaces.php:1295 usr/local/www/interfaces.php:1399 +#: usr/local/www/interfaces.php:1387 usr/local/www/interfaces.php:1400 +#: usr/local/www/interfaces.php:1442 usr/local/www/interfaces.php:1437 +#: usr/local/www/interfaces.php:1437 +msgid "" +"This field can be used to modify (\"spoof\") the MAC address of this " +"interface" +msgstr "" + +#: usr/local/www/interfaces.php:1297 usr/local/www/interfaces.php:1401 +#: usr/local/www/interfaces.php:1389 usr/local/www/interfaces.php:1402 +#: usr/local/www/interfaces.php:1444 usr/local/www/interfaces.php:1439 +#: usr/local/www/interfaces.php:1439 +msgid "(may be required with some cable connections)" +msgstr "" + +#: usr/local/www/interfaces.php:1298 usr/local/www/interfaces.php:1402 +#: usr/local/www/interfaces.php:1390 usr/local/www/interfaces.php:1403 +#: usr/local/www/interfaces.php:1445 usr/local/www/interfaces.php:1440 +#: usr/local/www/interfaces.php:1440 +msgid "" +"Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx or leave blank" +msgstr "" + +#: usr/local/www/interfaces.php:1303 +#: usr/local/www/interfaces_ppps_edit.php:757 +#: usr/local/www/interfaces.php:1407 +#: usr/local/www/interfaces_ppps_edit.php:758 +#: usr/local/www/interfaces.php:1395 +#: usr/local/www/interfaces_ppps_edit.php:764 +#: usr/local/www/interfaces.php:1408 usr/local/www/interfaces.php:1450 +#: usr/local/www/interfaces_ppps_edit.php:761 +#: usr/local/www/interfaces.php:1445 +#: usr/local/www/interfaces_ppps_edit.php:761 +#: usr/local/www/interfaces.php:1445 +msgid "MTU" +msgstr "" + +#: usr/local/www/interfaces.php:1307 +msgid "" +"If you leave this field blank, the adapter's default MTU will be used. This " +"is typically 1500 bytes but can vary on some hardware." +msgstr "" + +#: usr/local/www/interfaces.php:1312 usr/local/www/interfaces.php:1416 +#: usr/local/www/interfaces.php:1404 usr/local/www/interfaces.php:1417 +#: usr/local/www/interfaces.php:1461 usr/local/www/interfaces.php:1456 +#: usr/local/www/interfaces.php:1456 +msgid "MSS" +msgstr "" + +#: usr/local/www/interfaces.php:1316 usr/local/www/interfaces.php:1420 +#: usr/local/www/interfaces.php:1408 usr/local/www/interfaces.php:1421 +#: usr/local/www/interfaces.php:1465 usr/local/www/interfaces.php:1460 +#: usr/local/www/interfaces.php:1460 +msgid "" +"If you enter a value in this field, then MSS clamping for TCP connections to " +"the value entered above minus 40 (TCP/IP header size) will be in effect." +msgstr "" + +#: usr/local/www/interfaces.php:1325 usr/local/www/interfaces.php:1429 +#: usr/local/www/interfaces.php:1417 usr/local/www/interfaces.php:1430 +#: usr/local/www/interfaces.php:1474 usr/local/www/interfaces.php:1469 +#: usr/local/www/interfaces.php:1469 +msgid "Speed and duplex" +msgstr "" + +#: usr/local/www/interfaces.php:1346 usr/local/www/interfaces.php:1450 +#: usr/local/www/interfaces.php:1438 usr/local/www/interfaces.php:1451 +#: usr/local/www/interfaces.php:1495 usr/local/www/interfaces.php:1490 +#: usr/local/www/interfaces.php:1490 +msgid "" +"Here you can explicitly set speed and duplex mode for this interface. " +"WARNING: You MUST leave this set to autoselect (automatically negotiate " +"speed) unless the port this interface connects to has its speed and duplex " +"forced." +msgstr "" + +#: usr/local/www/interfaces.php:1361 usr/local/www/interfaces.php:1465 +#: usr/local/www/interfaces.php:1453 usr/local/www/interfaces.php:1466 +#: usr/local/www/interfaces.php:1511 usr/local/www/interfaces.php:1505 +#: usr/local/www/interfaces.php:1505 +msgid "Static IPv4 configuration" +msgstr "" + +#: usr/local/www/interfaces.php:1400 usr/local/www/interfaces.php:1506 +#: usr/local/www/system_routes_edit.php:212 +#: usr/local/www/system_routes_edit.php:244 usr/local/www/interfaces.php:1504 +#: usr/local/www/interfaces.php:1612 usr/local/www/system_routes_edit.php:245 +#: usr/local/www/interfaces.php:1492 usr/local/www/interfaces.php:1600 +#: usr/local/www/interfaces.php:1505 usr/local/www/interfaces.php:1610 +#: usr/local/www/system_routes_edit.php:272 usr/local/www/interfaces.php:1550 +#: usr/local/www/interfaces.php:1656 usr/local/www/system_routes_edit.php:274 +#: usr/local/www/interfaces.php:1544 usr/local/www/interfaces.php:1649 +#: usr/local/www/system_routes_edit.php:268 usr/local/www/interfaces.php:1544 +#: usr/local/www/interfaces.php:1649 +msgid "add a new one." +msgstr "" + +#: usr/local/www/interfaces.php:1403 usr/local/www/interfaces.php:1507 +#: usr/local/www/interfaces.php:1495 usr/local/www/interfaces.php:1508 +#: usr/local/www/interfaces.php:1553 usr/local/www/interfaces.php:1547 +#: usr/local/www/interfaces.php:1547 +msgid "" +"If this interface is an Internet connection, select an existing Gateway from " +"the list or add one using the link above" +msgstr "" + +#: usr/local/www/interfaces.php:1417 usr/local/www/system_routes_edit.php:224 +#: usr/local/www/system_routes_edit.php:256 usr/local/www/interfaces.php:1521 +#: usr/local/www/system_routes_edit.php:257 usr/local/www/interfaces.php:1509 +#: usr/local/www/interfaces.php:1522 usr/local/www/system_routes_edit.php:283 +#: usr/local/www/interfaces.php:1567 usr/local/www/system_routes_edit.php:287 +#: usr/local/www/interfaces.php:1561 usr/local/www/system_routes_edit.php:281 +#: usr/local/www/interfaces.php:1561 +msgid "Add new gateway:" +msgstr "" + +#: usr/local/www/interfaces.php:1425 usr/local/www/interfaces.php:1529 +#: usr/local/www/interfaces.php:1517 usr/local/www/interfaces.php:1530 +#: usr/local/www/interfaces.php:1575 usr/local/www/interfaces.php:1569 +#: usr/local/www/interfaces.php:1569 +msgid "Default gateway:" +msgstr "" + +#: usr/local/www/interfaces.php:1428 usr/local/www/system_routes_edit.php:240 +#: usr/local/www/system_routes_edit.php:272 usr/local/www/interfaces.php:1532 +#: usr/local/www/system_routes_edit.php:273 usr/local/www/interfaces.php:1520 +#: usr/local/www/interfaces.php:1533 usr/local/www/system_routes_edit.php:299 +#: usr/local/www/interfaces.php:1578 usr/local/www/system_routes_edit.php:305 +#: usr/local/www/interfaces.php:1572 usr/local/www/system_routes_edit.php:299 +#: usr/local/www/interfaces.php:1572 +msgid "Gateway Name:" +msgstr "" + +#: usr/local/www/interfaces.php:1431 usr/local/www/interfaces.php:1535 +#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1536 +#: usr/local/www/interfaces.php:1581 usr/local/www/interfaces.php:1575 +#: usr/local/www/interfaces.php:1575 +msgid "Gateway IPv4:" +msgstr "" + +#: usr/local/www/interfaces.php:1434 usr/local/www/interfaces.php:1540 +#: usr/local/www/system_routes_edit.php:246 +#: usr/local/www/system_routes_edit.php:278 usr/local/www/interfaces.php:1538 +#: usr/local/www/interfaces.php:1646 usr/local/www/system_routes_edit.php:279 +#: usr/local/www/interfaces.php:1526 usr/local/www/interfaces.php:1634 +#: usr/local/www/interfaces.php:1539 usr/local/www/interfaces.php:1644 +#: usr/local/www/system_routes_edit.php:305 usr/local/www/interfaces.php:1584 +#: usr/local/www/interfaces.php:1690 usr/local/www/system_routes_edit.php:311 +#: usr/local/www/interfaces.php:1578 usr/local/www/interfaces.php:1683 +#: usr/local/www/system_routes_edit.php:305 usr/local/www/interfaces.php:1578 +#: usr/local/www/interfaces.php:1683 +msgid "Description:" +msgstr "" + +#: usr/local/www/interfaces.php:1442 usr/local/www/interfaces.php:1548 +#: usr/local/www/system_routes_edit.php:254 +#: usr/local/www/system_routes_edit.php:286 usr/local/www/interfaces.php:1654 +#: usr/local/www/system_routes_edit.php:287 usr/local/www/interfaces.php:1536 +#: usr/local/www/interfaces.php:1642 usr/local/www/interfaces.php:1546 +#: usr/local/www/interfaces.php:1651 usr/local/www/system_routes_edit.php:312 +#: usr/local/www/interfaces.php:1591 usr/local/www/interfaces.php:1697 +#: usr/local/www/system_routes_edit.php:318 usr/local/www/interfaces.php:1585 +#: usr/local/www/interfaces.php:1690 usr/local/www/system_routes_edit.php:312 +#: usr/local/www/interfaces.php:1585 usr/local/www/interfaces.php:1690 +msgid "Save Gateway" +msgstr "" + +#: usr/local/www/interfaces.php:1467 usr/local/www/interfaces.php:1573 +#: usr/local/www/interfaces.php:1561 usr/local/www/interfaces.php:1571 +#: usr/local/www/interfaces.php:1617 usr/local/www/interfaces.php:1610 +#: usr/local/www/interfaces.php:1610 +msgid "Static IPv6 configuration" +msgstr "" + +#: usr/local/www/interfaces.php:1488 usr/local/www/status_interfaces.php:231 +#: usr/local/www/status_interfaces.php:312 usr/local/www/interfaces.php:1594 +#: usr/local/www/status_interfaces.php:315 usr/local/www/interfaces.php:1582 +#: usr/local/www/interfaces.php:1592 usr/local/www/interfaces.php:1638 +#: usr/local/www/interfaces.php:1631 usr/local/www/status_interfaces.php:315 +#: usr/local/www/interfaces.php:1631 +msgid "Gateway IPv6" +msgstr "" + +#: usr/local/www/interfaces.php:1509 usr/local/www/interfaces.php:1615 +#: usr/local/www/interfaces.php:1603 usr/local/www/interfaces.php:1613 +#: usr/local/www/interfaces.php:1659 usr/local/www/interfaces.php:1652 +#: usr/local/www/interfaces.php:1652 +msgid "" +"If this interface is an Internet connection, select an existing Gateway from " +"the list or add a new one using the link above" +msgstr "" + +#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1629 +#: usr/local/www/interfaces.php:1617 usr/local/www/interfaces.php:1627 +#: usr/local/www/interfaces.php:1673 usr/local/www/interfaces.php:1666 +#: usr/local/www/interfaces.php:1666 +msgid "Add new v6 gateway:" +msgstr "" + +#: usr/local/www/interfaces.php:1531 usr/local/www/interfaces.php:1637 +#: usr/local/www/interfaces.php:1625 usr/local/www/interfaces.php:1635 +#: usr/local/www/interfaces.php:1681 usr/local/www/interfaces.php:1674 +#: usr/local/www/interfaces.php:1674 +msgid "Default v6 gateway:" +msgstr "" + +#: usr/local/www/interfaces.php:1534 usr/local/www/interfaces.php:1640 +#: usr/local/www/interfaces.php:1628 usr/local/www/interfaces.php:1638 +#: usr/local/www/interfaces.php:1684 usr/local/www/interfaces.php:1677 +#: usr/local/www/interfaces.php:1677 +msgid "Gateway Name IPv6:" +msgstr "" + +#: usr/local/www/interfaces.php:1537 usr/local/www/interfaces.php:1643 +#: usr/local/www/interfaces.php:1631 usr/local/www/interfaces.php:1641 +#: usr/local/www/interfaces.php:1687 usr/local/www/interfaces.php:1680 +#: usr/local/www/interfaces.php:1680 +msgid "Gateway IPv6:" +msgstr "" + +#: usr/local/www/interfaces.php:1564 +msgid "DHCPv6 Prefix Delegation ID" +msgstr "" + +#: usr/local/www/interfaces.php:1588 +msgid "" +"This ID sets the delegated DHCP-PD prefix number which will be used to setup " +"the interface." +msgstr "" + +#: usr/local/www/interfaces.php:1598 usr/local/www/interfaces.php:1676 +#: usr/local/www/interfaces.php:1664 usr/local/www/interfaces.php:1722 +#: usr/local/www/interfaces.php:1714 usr/local/www/interfaces.php:1714 +msgid "DHCP client configuration" +msgstr "" + +#: usr/local/www/interfaces.php:1602 usr/local/www/interfaces.php:1680 +#: usr/local/www/interfaces.php:1668 usr/local/www/interfaces.php:1726 +#: usr/local/www/interfaces.php:1718 usr/local/www/interfaces.php:1718 +msgid "Enable DHCP+" +msgstr "" + +#: usr/local/www/interfaces.php:1605 usr/local/www/interfaces.php:1683 +#: usr/local/www/interfaces.php:1671 usr/local/www/interfaces.php:1729 +#: usr/local/www/interfaces.php:1721 usr/local/www/interfaces.php:1721 +msgid "Enable DHCP+L2TP or DHCP+PPTP." +msgstr "" + +#: usr/local/www/interfaces.php:1607 usr/local/www/interfaces.php:1685 +#: usr/local/www/interfaces.php:1673 usr/local/www/interfaces.php:1731 +#: usr/local/www/interfaces.php:1723 usr/local/www/interfaces.php:1723 +msgid "" +"Status changes on this interface will trigger reconfiguration (if necessary) " +"of the associated PPTP/L2TP link." +msgstr "" + +#: usr/local/www/interfaces.php:1616 usr/local/www/interfaces.php:1694 +#: usr/local/www/interfaces.php:1682 usr/local/www/interfaces.php:1740 +#: usr/local/www/interfaces.php:1732 usr/local/www/interfaces.php:1732 +msgid "" +"The value in this field is sent as the DHCP client identifier and hostname " +"when requesting a DHCP lease. Some ISPs may require this (for client " +"identification)." +msgstr "" + +#: usr/local/www/interfaces.php:1622 usr/local/www/interfaces.php:1700 +#: usr/local/www/interfaces.php:1688 usr/local/www/interfaces.php:1746 +#: usr/local/www/interfaces.php:1738 usr/local/www/interfaces.php:1738 +msgid "Alias IPv4 address" +msgstr "" + +#: usr/local/www/interfaces.php:1636 usr/local/www/interfaces.php:1714 +#: usr/local/www/interfaces.php:1702 usr/local/www/interfaces.php:1760 +#: usr/local/www/interfaces.php:1752 usr/local/www/interfaces.php:1752 +msgid "" +"The value in this field is used as a fixed alias IPv4 address by the DHCP " +"client." +msgstr "" + +#: usr/local/www/interfaces.php:1647 usr/local/www/interfaces.php:1725 +#: usr/local/www/interfaces.php:1713 usr/local/www/interfaces.php:1728 +#: usr/local/www/interfaces.php:1774 usr/local/www/interfaces.php:1766 +#: usr/local/www/interfaces.php:1766 +msgid "DHCP6 client configuration" +msgstr "" + +#: usr/local/www/interfaces.php:1650 usr/local/www/interfaces.php:1729 +#: usr/local/www/interfaces.php:1717 usr/local/www/interfaces.php:1732 +#: usr/local/www/interfaces.php:1778 usr/local/www/interfaces.php:1770 +#: usr/local/www/interfaces.php:1770 +msgid "DHCPv6 Unique Identifier (DUID)" +msgstr "" + +#: usr/local/www/interfaces.php:1654 usr/local/www/interfaces.php:1733 +#: usr/local/www/interfaces.php:1721 usr/local/www/interfaces.php:1736 +#: usr/local/www/interfaces.php:1782 usr/local/www/interfaces.php:1774 +#: usr/local/www/interfaces.php:1774 +msgid "" +"The value in this field is sent as the DHCPv6 client identifier when " +"requesting a DHCPv6 lease." +msgstr "" + +#: usr/local/www/interfaces.php:1659 usr/local/www/interfaces.php:1738 +#: usr/local/www/interfaces.php:1726 usr/local/www/interfaces.php:1741 +#: usr/local/www/interfaces.php:1787 usr/local/www/interfaces.php:1779 +#: usr/local/www/interfaces.php:1779 +#, php-format +msgid "The current DUID is: '%s'" +msgstr "" + +#: usr/local/www/interfaces.php:1665 usr/local/www/interfaces.php:1745 +#: usr/local/www/interfaces.php:1733 usr/local/www/interfaces.php:1748 +#: usr/local/www/interfaces.php:1794 usr/local/www/interfaces.php:1786 +#: usr/local/www/interfaces.php:1786 +msgid "DHCPv6 Prefix Delegation size" +msgstr "" + +#: usr/local/www/interfaces.php:1678 usr/local/www/interfaces.php:1758 +#: usr/local/www/interfaces.php:1746 usr/local/www/interfaces.php:1761 +#: usr/local/www/interfaces.php:1807 usr/local/www/interfaces.php:1799 +#: usr/local/www/interfaces.php:1799 +msgid "" +"The value in this field is the delegated prefix length provided by the " +"DHCPv6 server. Normally specified by the ISP." +msgstr "" + +#: usr/local/www/interfaces.php:1689 usr/local/www/interfaces.php:1867 +#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1879 +#: usr/local/www/interfaces.php:1925 usr/local/www/interfaces.php:1913 +#: usr/local/www/interfaces.php:1913 +msgid "PPP configuration" +msgstr "" + +#: usr/local/www/interfaces.php:1692 +#: usr/local/www/interfaces_ppps_edit.php:478 +#: usr/local/www/interfaces.php:1870 +#: usr/local/www/interfaces_ppps_edit.php:479 +#: usr/local/www/interfaces.php:1858 +#: usr/local/www/interfaces_ppps_edit.php:485 +#: usr/local/www/interfaces.php:1882 usr/local/www/interfaces.php:1928 +#: usr/local/www/interfaces_ppps_edit.php:483 +#: usr/local/www/interfaces.php:1916 +#: usr/local/www/interfaces_ppps_edit.php:483 +#: usr/local/www/interfaces.php:1916 +msgid "Service Provider" +msgstr "" + +#: usr/local/www/interfaces.php:1696 +#: usr/local/www/interfaces_ppps_edit.php:482 +#: usr/local/www/interfaces.php:1874 +#: usr/local/www/interfaces_ppps_edit.php:483 +#: usr/local/www/interfaces.php:1862 +#: usr/local/www/interfaces_ppps_edit.php:489 +#: usr/local/www/interfaces.php:1886 usr/local/www/interfaces.php:1932 +#: usr/local/www/interfaces_ppps_edit.php:487 +#: usr/local/www/interfaces.php:1920 +#: usr/local/www/interfaces_ppps_edit.php:487 +#: usr/local/www/interfaces.php:1920 +msgid "Country:" +msgstr "" + +#: usr/local/www/interfaces.php:1704 +#: usr/local/www/interfaces_ppps_edit.php:490 +#: usr/local/www/interfaces.php:1882 +#: usr/local/www/interfaces_ppps_edit.php:491 +#: usr/local/www/interfaces.php:1870 +#: usr/local/www/interfaces_ppps_edit.php:497 +#: usr/local/www/interfaces.php:1894 usr/local/www/interfaces.php:1940 +#: usr/local/www/interfaces_ppps_edit.php:495 +#: usr/local/www/interfaces.php:1928 +#: usr/local/www/interfaces_ppps_edit.php:495 +#: usr/local/www/interfaces.php:1928 +msgid "Provider:" +msgstr "" + +#: usr/local/www/interfaces.php:1712 +#: usr/local/www/interfaces_ppps_edit.php:498 +#: usr/local/www/interfaces.php:1890 +#: usr/local/www/interfaces_ppps_edit.php:499 +#: usr/local/www/interfaces.php:1878 +#: usr/local/www/interfaces_ppps_edit.php:505 +#: usr/local/www/interfaces.php:1902 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces_ppps_edit.php:503 +#: usr/local/www/interfaces.php:1936 +#: usr/local/www/interfaces_ppps_edit.php:503 +#: usr/local/www/interfaces.php:1936 +msgid "Plan:" +msgstr "" + +#: usr/local/www/interfaces.php:1720 +#: usr/local/www/interfaces_ppps_edit.php:506 +#: usr/local/www/interfaces.php:1898 +#: usr/local/www/interfaces_ppps_edit.php:507 +#: usr/local/www/interfaces.php:1886 +#: usr/local/www/interfaces_ppps_edit.php:513 +#: usr/local/www/interfaces.php:1910 usr/local/www/interfaces.php:1956 +#: usr/local/www/interfaces_ppps_edit.php:511 +#: usr/local/www/interfaces.php:1944 +#: usr/local/www/interfaces_ppps_edit.php:511 +#: usr/local/www/interfaces.php:1944 +msgid "Select to fill in data for your service provider." +msgstr "" + +#: usr/local/www/interfaces.php:1742 +#: usr/local/www/interfaces_ppps_edit.php:530 +#: usr/local/www/interfaces.php:1920 +#: usr/local/www/interfaces_ppps_edit.php:531 +#: usr/local/www/interfaces.php:1908 +#: usr/local/www/interfaces_ppps_edit.php:537 +#: usr/local/www/interfaces.php:1932 usr/local/www/interfaces.php:1978 +#: usr/local/www/interfaces_ppps_edit.php:535 +#: usr/local/www/interfaces.php:1966 +#: usr/local/www/interfaces_ppps_edit.php:535 +#: usr/local/www/interfaces.php:1966 +msgid "Access Point Name (APN)" +msgstr "" + +#: usr/local/www/interfaces.php:1766 usr/local/www/interfaces.php:1944 +#: usr/local/www/interfaces.php:1932 usr/local/www/interfaces.php:1956 +#: usr/local/www/interfaces.php:2002 usr/local/www/interfaces.php:1991 +#: usr/local/www/interfaces.php:1991 +msgid "Advanced PPP" +msgstr "" + +#: usr/local/www/interfaces.php:1769 usr/local/www/interfaces.php:1774 +#: usr/local/www/interfaces.php:1875 usr/local/www/interfaces.php:1880 +#: usr/local/www/interfaces.php:1943 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces.php:1947 usr/local/www/interfaces.php:1952 +#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2058 +#: usr/local/www/interfaces.php:2121 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:1935 usr/local/www/interfaces.php:1940 +#: usr/local/www/interfaces.php:2041 usr/local/www/interfaces.php:2046 +#: usr/local/www/interfaces.php:2109 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:1959 usr/local/www/interfaces.php:1964 +#: usr/local/www/interfaces.php:2068 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces.php:2139 usr/local/www/interfaces.php:2144 +#: usr/local/www/interfaces.php:2005 usr/local/www/interfaces.php:2010 +#: usr/local/www/interfaces.php:2119 usr/local/www/interfaces.php:2185 +#: usr/local/www/interfaces.php:2190 usr/local/www/interfaces.php:1994 +#: usr/local/www/interfaces.php:1999 usr/local/www/interfaces.php:2103 +#: usr/local/www/interfaces.php:2108 usr/local/www/interfaces.php:2174 +#: usr/local/www/interfaces.php:2179 usr/local/www/interfaces.php:1994 +#: usr/local/www/interfaces.php:1999 usr/local/www/interfaces.php:2103 +#: usr/local/www/interfaces.php:2108 usr/local/www/interfaces.php:2174 +#: usr/local/www/interfaces.php:2179 +msgid "Click here" +msgstr "" + +#: usr/local/www/interfaces.php:1770 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces.php:1936 usr/local/www/interfaces.php:1960 +#: usr/local/www/interfaces.php:2006 usr/local/www/interfaces.php:1995 +#: usr/local/www/interfaces.php:1995 +msgid "to edit PPP configuration." +msgstr "" + +#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1953 +#: usr/local/www/interfaces.php:1941 usr/local/www/interfaces.php:1965 +#: usr/local/www/interfaces.php:2011 usr/local/www/interfaces.php:2000 +#: usr/local/www/interfaces.php:2000 +msgid "to create a PPP configuration." +msgstr "" + +#: usr/local/www/interfaces.php:1786 usr/local/www/interfaces.php:1964 +#: usr/local/www/interfaces.php:1952 usr/local/www/interfaces.php:1979 +#: usr/local/www/interfaces.php:2025 usr/local/www/interfaces.php:2014 +#: usr/local/www/interfaces.php:2014 +msgid "PPPoE configuration" +msgstr "" + +#: usr/local/www/interfaces.php:1801 +#: usr/local/www/interfaces_ppps_edit.php:589 +#: usr/local/www/interfaces.php:1979 +#: usr/local/www/interfaces_ppps_edit.php:590 +#: usr/local/www/interfaces.php:1967 +#: usr/local/www/interfaces_ppps_edit.php:596 +#: usr/local/www/interfaces.php:1994 usr/local/www/interfaces.php:2040 +#: usr/local/www/interfaces_ppps_edit.php:594 +#: usr/local/www/interfaces.php:2029 +#: usr/local/www/interfaces_ppps_edit.php:594 +#: usr/local/www/interfaces.php:2029 +msgid "Service name" +msgstr "" + +#: usr/local/www/interfaces.php:1803 usr/local/www/interfaces.php:1981 +#: usr/local/www/interfaces.php:1969 usr/local/www/interfaces.php:1996 +#: usr/local/www/interfaces.php:2042 usr/local/www/interfaces.php:2031 +#: usr/local/www/interfaces.php:2031 +msgid "Hint: this field can usually be left empty" +msgstr "" + +#: usr/local/www/interfaces.php:1810 usr/local/www/interfaces.php:1929 +#: usr/local/www/interfaces.php:1988 usr/local/www/interfaces.php:2107 +#: usr/local/www/interfaces.php:1976 usr/local/www/interfaces.php:2095 +#: usr/local/www/interfaces.php:2003 usr/local/www/interfaces.php:2125 +#: usr/local/www/interfaces.php:2049 usr/local/www/interfaces.php:2171 +#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2160 +#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2160 +msgid "Enable Dial-On-Demand mode" +msgstr "" + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1989 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2004 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2039 +#: usr/local/www/interfaces.php:2039 +msgid "" +"This option causes the interface to operate in dial-on-demand mode, allowing " +"you to have a " +msgstr "" + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930 +#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096 +#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2172 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161 +msgid "virtual full time" +msgstr "" + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930 +#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096 +#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2172 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161 +msgid "" +"connection. The interface is configured, but the actual connection of the " +"link is delayed until qualifying outgoing traffic is detected." +msgstr "" + +#: usr/local/www/interfaces.php:1815 usr/local/www/interfaces.php:1934 +#: usr/local/www/services_captiveportal.php:465 +#: usr/local/www/services_captiveportal.php:470 +#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2112 +#: usr/local/www/services_captiveportal.php:468 +#: usr/local/www/interfaces.php:1981 usr/local/www/interfaces.php:2100 +#: usr/local/www/interfaces.php:2008 usr/local/www/interfaces.php:2130 +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/interfaces.php:2054 usr/local/www/interfaces.php:2176 +#: usr/local/www/interfaces.php:2043 usr/local/www/interfaces.php:2165 +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/interfaces.php:2043 usr/local/www/interfaces.php:2165 +msgid "Idle timeout" +msgstr "" + +#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936 +#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:1983 usr/local/www/interfaces.php:2102 +#: usr/local/www/interfaces.php:2010 usr/local/www/interfaces.php:2132 +#: usr/local/www/interfaces.php:2056 usr/local/www/interfaces.php:2178 +#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167 +#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167 +msgid "" +"If no qualifying outgoing packets are transmitted for the specified number " +"of seconds, the connection is brought down. An idle timeout of zero disables " +"this feature." +msgstr "" + +#: usr/local/www/interfaces.php:1821 +#: usr/local/www/interfaces_ppps_edit.php:596 +#: usr/local/www/interfaces.php:1999 +#: usr/local/www/interfaces_ppps_edit.php:597 +#: usr/local/www/interfaces.php:1987 +#: usr/local/www/interfaces_ppps_edit.php:603 +#: usr/local/www/interfaces.php:2014 usr/local/www/interfaces.php:2060 +#: usr/local/www/interfaces_ppps_edit.php:601 +#: usr/local/www/interfaces.php:2049 +#: usr/local/www/interfaces_ppps_edit.php:601 +#: usr/local/www/interfaces.php:2049 +msgid "Periodic reset" +msgstr "" + +#: usr/local/www/interfaces.php:1829 +#: usr/local/www/interfaces_ppps_edit.php:604 +#: usr/local/www/status_rrd_graph.php:359 +#: usr/local/www/status_rrd_graph_settings.php:158 +#: usr/local/www/status_rrd_graph_settings.php:159 +#: usr/local/www/status_rrd_graph.php:407 usr/local/www/interfaces.php:2007 +#: usr/local/www/interfaces_ppps_edit.php:605 +#: usr/local/www/interfaces.php:1995 +#: usr/local/www/interfaces_ppps_edit.php:611 +#: usr/local/www/status_rrd_graph.php:432 usr/local/www/interfaces.php:2022 +#: usr/local/www/interfaces.php:2068 +#: usr/local/www/interfaces_ppps_edit.php:609 +#: usr/local/www/interfaces.php:2057 +#: usr/local/www/interfaces_ppps_edit.php:609 +#: usr/local/www/status_rrd_graph.php:432 +#: usr/local/www/status_rrd_graph_settings.php:159 +#: usr/local/www/interfaces.php:2057 +msgid "Custom" +msgstr "" + +#: usr/local/www/interfaces.php:1830 +#: usr/local/www/interfaces_ppps_edit.php:605 +#: usr/local/www/interfaces.php:2008 +#: usr/local/www/interfaces_ppps_edit.php:606 +#: usr/local/www/interfaces.php:1996 +#: usr/local/www/interfaces_ppps_edit.php:612 +#: usr/local/www/interfaces.php:2023 usr/local/www/interfaces.php:2069 +#: usr/local/www/interfaces_ppps_edit.php:610 +#: usr/local/www/interfaces.php:2058 +#: usr/local/www/interfaces_ppps_edit.php:610 +#: usr/local/www/interfaces.php:2058 +msgid "Pre-Set" +msgstr "" + +#: usr/local/www/interfaces.php:1831 +#: usr/local/www/interfaces_ppps_edit.php:606 +#: usr/local/www/interfaces.php:2009 +#: usr/local/www/interfaces_ppps_edit.php:607 +#: usr/local/www/interfaces.php:1997 +#: usr/local/www/interfaces_ppps_edit.php:613 +#: usr/local/www/interfaces.php:2024 usr/local/www/interfaces.php:2070 +#: usr/local/www/interfaces_ppps_edit.php:611 +#: usr/local/www/interfaces.php:2059 +#: usr/local/www/interfaces_ppps_edit.php:611 +#: usr/local/www/interfaces.php:2059 +msgid "Select a reset timing type" +msgstr "" + +#: usr/local/www/interfaces.php:1839 +#: usr/local/www/interfaces_ppps_edit.php:614 +#: usr/local/www/interfaces.php:2017 +#: usr/local/www/interfaces_ppps_edit.php:615 +#: usr/local/www/interfaces.php:2005 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2032 usr/local/www/interfaces.php:2078 +#: usr/local/www/interfaces_ppps_edit.php:619 +#: usr/local/www/interfaces.php:2067 +#: usr/local/www/interfaces_ppps_edit.php:619 +#: usr/local/www/interfaces.php:2067 +msgid "hour (0-23)" +msgstr "" + +#: usr/local/www/interfaces.php:1841 +#: usr/local/www/interfaces_ppps_edit.php:616 +#: usr/local/www/interfaces.php:2019 +#: usr/local/www/interfaces_ppps_edit.php:617 +#: usr/local/www/interfaces.php:2007 +#: usr/local/www/interfaces_ppps_edit.php:623 +#: usr/local/www/interfaces.php:2034 usr/local/www/interfaces.php:2080 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2069 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2069 +msgid "minute (0-59)" +msgstr "" + +#: usr/local/www/interfaces.php:1843 +#: usr/local/www/interfaces_ppps_edit.php:618 +#: usr/local/www/interfaces.php:2021 +#: usr/local/www/interfaces_ppps_edit.php:619 +#: usr/local/www/interfaces.php:2009 +#: usr/local/www/interfaces_ppps_edit.php:625 +#: usr/local/www/interfaces.php:2036 usr/local/www/interfaces.php:2082 +#: usr/local/www/interfaces_ppps_edit.php:623 +#: usr/local/www/interfaces.php:2071 +#: usr/local/www/interfaces_ppps_edit.php:623 +#: usr/local/www/interfaces.php:2071 +msgid "reset at a specific date (mm/dd/yyyy)" +msgstr "" + +#: usr/local/www/interfaces.php:1846 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2024 +#: usr/local/www/interfaces_ppps_edit.php:622 +#: usr/local/www/interfaces.php:2012 +#: usr/local/www/interfaces_ppps_edit.php:628 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2085 +#: usr/local/www/interfaces_ppps_edit.php:626 +#: usr/local/www/interfaces.php:2074 +#: usr/local/www/interfaces_ppps_edit.php:626 +#: usr/local/www/interfaces.php:2074 +msgid "" +"If you leave the date field empty, the reset will be executed each day at " +"the time you did specify using the minutes and hour field." +msgstr "" + +#: usr/local/www/interfaces.php:1854 +#: usr/local/www/interfaces_ppps_edit.php:629 +#: usr/local/www/interfaces.php:2032 +#: usr/local/www/interfaces_ppps_edit.php:630 +#: usr/local/www/interfaces.php:2020 +#: usr/local/www/interfaces_ppps_edit.php:636 +#: usr/local/www/interfaces.php:2047 usr/local/www/interfaces.php:2093 +#: usr/local/www/interfaces_ppps_edit.php:634 +#: usr/local/www/interfaces.php:2082 +#: usr/local/www/interfaces_ppps_edit.php:634 +#: usr/local/www/interfaces.php:2082 +msgid "reset at each month ('0 0 1 * *')" +msgstr "" + +#: usr/local/www/interfaces.php:1857 +#: usr/local/www/interfaces_ppps_edit.php:632 +#: usr/local/www/interfaces.php:2035 +#: usr/local/www/interfaces_ppps_edit.php:633 +#: usr/local/www/interfaces.php:2023 +#: usr/local/www/interfaces_ppps_edit.php:639 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2096 +#: usr/local/www/interfaces_ppps_edit.php:637 +#: usr/local/www/interfaces.php:2085 +#: usr/local/www/interfaces_ppps_edit.php:637 +#: usr/local/www/interfaces.php:2085 +msgid "reset at each week ('0 0 * * 0')" +msgstr "" + +#: usr/local/www/interfaces.php:1860 +#: usr/local/www/interfaces_ppps_edit.php:635 +#: usr/local/www/interfaces.php:2038 +#: usr/local/www/interfaces_ppps_edit.php:636 +#: usr/local/www/interfaces.php:2026 +#: usr/local/www/interfaces_ppps_edit.php:642 +#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2099 +#: usr/local/www/interfaces_ppps_edit.php:640 +#: usr/local/www/interfaces.php:2088 +#: usr/local/www/interfaces_ppps_edit.php:640 +#: usr/local/www/interfaces.php:2088 +msgid "reset at each day ('0 0 * * *')" +msgstr "" + +#: usr/local/www/interfaces.php:1863 +#: usr/local/www/interfaces_ppps_edit.php:638 +#: usr/local/www/interfaces.php:2041 +#: usr/local/www/interfaces_ppps_edit.php:639 +#: usr/local/www/interfaces.php:2029 +#: usr/local/www/interfaces_ppps_edit.php:645 +#: usr/local/www/interfaces.php:2056 usr/local/www/interfaces.php:2102 +#: usr/local/www/interfaces_ppps_edit.php:643 +#: usr/local/www/interfaces.php:2091 +#: usr/local/www/interfaces_ppps_edit.php:643 +#: usr/local/www/interfaces.php:2091 +msgid "reset at each hour ('0 * * * *')" +msgstr "" + +#: usr/local/www/interfaces.php:1872 usr/local/www/interfaces.php:2050 +#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2065 +#: usr/local/www/interfaces.php:2111 usr/local/www/interfaces.php:2100 +#: usr/local/www/interfaces.php:2100 +msgid "Advanced and MLPPP" +msgstr "" + +#: usr/local/www/interfaces.php:1876 usr/local/www/interfaces.php:2054 +#: usr/local/www/interfaces.php:2042 usr/local/www/interfaces.php:2069 +#: usr/local/www/interfaces.php:2115 usr/local/www/interfaces.php:2104 +#: usr/local/www/interfaces.php:2104 +msgid "" +"for additional PPPoE configuration options. Save first if you made changes." +msgstr "" + +#: usr/local/www/interfaces.php:1881 usr/local/www/interfaces.php:2059 +#: usr/local/www/interfaces.php:2047 usr/local/www/interfaces.php:2074 +#: usr/local/www/interfaces.php:2120 usr/local/www/interfaces.php:2109 +#: usr/local/www/interfaces.php:2109 +msgid "for advanced PPPoE configuration options and MLPPP configuration." +msgstr "" + +#: usr/local/www/interfaces.php:1892 usr/local/www/interfaces.php:2070 +#: usr/local/www/interfaces.php:2058 usr/local/www/interfaces.php:2088 +#: usr/local/www/interfaces.php:2134 usr/local/www/interfaces.php:2123 +#: usr/local/www/interfaces.php:2123 +msgid "PPTP/L2TP configuration" +msgstr "" + +#: usr/local/www/interfaces.php:1907 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2103 usr/local/www/interfaces.php:2149 +#: usr/local/www/interfaces.php:2138 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2138 +msgid "Local IP address" +msgstr "" + +#: usr/local/www/interfaces.php:1920 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces.php:2098 usr/local/www/interfaces.php:2086 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2116 usr/local/www/interfaces.php:2162 +#: usr/local/www/interfaces.php:2151 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2151 +msgid "Remote IP address" +msgstr "" + +#: usr/local/www/interfaces.php:1930 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:2096 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:2172 usr/local/www/interfaces.php:2161 +#: usr/local/www/interfaces.php:2161 +msgid "" +"This option causes the interface to operate in dial-on-demand mode, allowing " +"you to have a" +msgstr "" + +#: usr/local/www/interfaces.php:1944 usr/local/www/interfaces.php:2122 +#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2140 +#: usr/local/www/interfaces.php:2186 usr/local/www/interfaces.php:2175 +#: usr/local/www/interfaces.php:2175 +msgid "" +"for additional PPTP and L2TP configuration options. Save first if you made " +"changes." +msgstr "" + +#: usr/local/www/interfaces.php:1949 usr/local/www/interfaces.php:2127 +#: usr/local/www/interfaces.php:2115 usr/local/www/interfaces.php:2145 +#: usr/local/www/interfaces.php:2191 usr/local/www/interfaces.php:2180 +#: usr/local/www/interfaces.php:2180 +msgid "for advanced PPTP and L2TP configuration options" +msgstr "" + +#: usr/local/www/interfaces.php:1964 usr/local/www/interfaces.php:2142 +#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2160 +#: usr/local/www/interfaces.php:2206 usr/local/www/interfaces.php:2195 +#: usr/local/www/interfaces.php:2195 +msgid "" +"Common wireless configuration - Settings apply to all wireless networks on" +msgstr "" + +#: usr/local/www/interfaces.php:1967 usr/local/www/interfaces.php:2145 +#: usr/local/www/interfaces.php:2133 usr/local/www/interfaces.php:2163 +#: usr/local/www/interfaces.php:2209 usr/local/www/interfaces.php:2198 +#: usr/local/www/interfaces.php:2198 +msgid "Persist common settings" +msgstr "" + +#: usr/local/www/interfaces.php:1970 usr/local/www/interfaces.php:2148 +#: usr/local/www/interfaces.php:2136 usr/local/www/interfaces.php:2166 +#: usr/local/www/interfaces.php:2212 usr/local/www/interfaces.php:2201 +#: usr/local/www/interfaces.php:2201 +msgid "" +"Enabling this preserves the common wireless configuration through interface " +"deletions and reassignments." +msgstr "" + +#: usr/local/www/interfaces.php:1974 usr/local/www/interfaces.php:2152 +#: usr/local/www/interfaces.php:2140 usr/local/www/interfaces.php:2170 +#: usr/local/www/interfaces.php:2216 usr/local/www/interfaces.php:2205 +#: usr/local/www/interfaces.php:2205 +msgid "Standard" +msgstr "" + +#: usr/local/www/interfaces.php:1990 usr/local/www/interfaces.php:2168 +#: usr/local/www/interfaces.php:2156 usr/local/www/interfaces.php:2186 +#: usr/local/www/interfaces.php:2232 usr/local/www/interfaces.php:2221 +#: usr/local/www/interfaces.php:2221 +msgid "Protection Mode" +msgstr "" + +#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2171 +#: usr/local/www/interfaces.php:2159 usr/local/www/interfaces.php:2189 +#: usr/local/www/interfaces.php:2235 usr/local/www/interfaces.php:2224 +#: usr/local/www/interfaces.php:2224 +msgid "Protection mode off" +msgstr "" + +#: usr/local/www/interfaces.php:1994 usr/local/www/interfaces.php:2172 +#: usr/local/www/interfaces.php:2160 usr/local/www/interfaces.php:2190 +#: usr/local/www/interfaces.php:2236 usr/local/www/interfaces.php:2225 +#: usr/local/www/interfaces.php:2225 +msgid "Protection mode CTS to self" +msgstr "" + +#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2173 +#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2191 +#: usr/local/www/interfaces.php:2237 usr/local/www/interfaces.php:2226 +#: usr/local/www/interfaces.php:2226 +msgid "Protection mode RTS and CTS" +msgstr "" + +#: usr/local/www/interfaces.php:1998 usr/local/www/interfaces.php:2176 +#: usr/local/www/interfaces.php:2164 usr/local/www/interfaces.php:2194 +#: usr/local/www/interfaces.php:2240 usr/local/www/interfaces.php:2229 +#: usr/local/www/interfaces.php:2229 +msgid "" +"For IEEE 802.11g, use the specified technique for protecting OFDM frames in " +"a mixed 11b/11g network." +msgstr "" + +#: usr/local/www/interfaces.php:2006 usr/local/www/interfaces.php:2184 +#: usr/local/www/interfaces.php:2172 usr/local/www/interfaces.php:2202 +#: usr/local/www/interfaces.php:2248 usr/local/www/interfaces.php:2237 +#: usr/local/www/interfaces.php:2237 +msgid "Transmit power" +msgstr "" + +#: usr/local/www/interfaces.php:2019 usr/local/www/interfaces.php:2197 +#: usr/local/www/interfaces.php:2185 usr/local/www/interfaces.php:2215 +#: usr/local/www/interfaces.php:2261 usr/local/www/interfaces.php:2250 +#: usr/local/www/interfaces.php:2250 +msgid "" +"Note: Typically only a few discreet power settings are available and the " +"driver will use the setting closest to the specified value. Not all " +"adapters support changing the transmit power setting." +msgstr "" + +#: usr/local/www/interfaces.php:2023 usr/local/www/status_interfaces.php:258 +#: usr/local/www/status_interfaces.php:355 usr/local/www/interfaces.php:2201 +#: usr/local/www/status_interfaces.php:358 usr/local/www/interfaces.php:2189 +#: usr/local/www/interfaces.php:2219 usr/local/www/interfaces.php:2265 +#: usr/local/www/interfaces.php:2254 usr/local/www/status_interfaces.php:358 +#: usr/local/www/interfaces.php:2254 +msgid "Channel" +msgstr "" + +#: usr/local/www/interfaces.php:2026 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2204 +#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2263 +#: usr/local/www/interfaces.php:2192 usr/local/www/interfaces.php:2239 +#: usr/local/www/interfaces.php:2222 usr/local/www/interfaces.php:2269 +#: usr/local/www/interfaces.php:2281 usr/local/www/interfaces.php:2268 +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2327 +#: usr/local/www/interfaces.php:2257 usr/local/www/interfaces.php:2304 +#: usr/local/www/interfaces.php:2316 usr/local/www/interfaces.php:2257 +#: usr/local/www/interfaces.php:2304 usr/local/www/interfaces.php:2316 +msgid "Auto" +msgstr "" + +#: usr/local/www/interfaces.php:2046 usr/local/www/interfaces.php:2224 +#: usr/local/www/interfaces.php:2212 usr/local/www/interfaces.php:2242 +#: usr/local/www/interfaces.php:2288 usr/local/www/interfaces.php:2277 +#: usr/local/www/interfaces.php:2277 +msgid "" +"Legend: wireless standards - channel # (frequency @ max TX power / TX power " +"allowed in reg. domain)" +msgstr "" + +#: usr/local/www/interfaces.php:2048 usr/local/www/interfaces.php:2226 +#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2244 +#: usr/local/www/interfaces.php:2290 usr/local/www/interfaces.php:2279 +#: usr/local/www/interfaces.php:2279 +msgid "" +"Note: Not all channels may be supported by your card. Auto may override the " +"wireless standard selected above." +msgstr "" + +#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2231 +#: usr/local/www/interfaces.php:2219 usr/local/www/interfaces.php:2249 +#: usr/local/www/interfaces.php:2295 usr/local/www/interfaces.php:2284 +#: usr/local/www/interfaces.php:2284 +msgid "Antenna settings" +msgstr "" + +#: usr/local/www/interfaces.php:2059 usr/local/www/interfaces.php:2237 +#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2255 +#: usr/local/www/interfaces.php:2301 usr/local/www/interfaces.php:2290 +#: usr/local/www/interfaces.php:2290 +msgid "Diversity" +msgstr "" + +#: usr/local/www/interfaces.php:2061 usr/local/www/interfaces.php:2072 +#: usr/local/www/interfaces.php:2084 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2146 +#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2250 +#: usr/local/www/interfaces.php:2262 usr/local/www/interfaces.php:2292 +#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2324 +#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2238 +#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2296 +#: usr/local/www/interfaces.php:2312 usr/local/www/diag_system_pftop.php:135 +#: usr/local/www/interfaces.php:2257 usr/local/www/interfaces.php:2268 +#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2326 +#: usr/local/www/interfaces.php:2342 usr/local/www/interfaces.php:2303 +#: usr/local/www/interfaces.php:2314 usr/local/www/interfaces.php:2356 +#: usr/local/www/interfaces.php:2372 usr/local/www/interfaces.php:2388 +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2345 +#: usr/local/www/interfaces.php:2361 usr/local/www/interfaces.php:2377 +#: usr/local/www/diag_system_pftop.php:135 usr/local/www/interfaces.php:2292 +#: usr/local/www/interfaces.php:2303 usr/local/www/interfaces.php:2315 +#: usr/local/www/interfaces.php:2345 usr/local/www/interfaces.php:2361 +#: usr/local/www/interfaces.php:2377 +msgid "Default" +msgstr "" + +#: usr/local/www/interfaces.php:2062 usr/local/www/vpn_pptp.php:314 +#: usr/local/www/vpn_l2tp.php:294 usr/local/www/vpn_pppoe_edit.php:362 +#: usr/local/www/interfaces.php:2240 usr/local/www/vpn_pppoe_edit.php:363 +#: usr/local/www/vpn_pptp.php:316 usr/local/www/interfaces.php:2228 +#: usr/local/www/vpn_l2tp.php:295 usr/local/www/vpn_l2tp.php:298 +#: usr/local/www/vpn_pppoe_edit.php:366 usr/local/www/vpn_pptp.php:319 +#: usr/local/www/interfaces.php:2258 usr/local/www/interfaces.php:2304 +#: usr/local/www/interfaces.php:2293 usr/local/www/vpn_l2tp.php:298 +#: usr/local/www/vpn_pppoe_edit.php:366 usr/local/www/vpn_pptp.php:319 +#: usr/local/www/interfaces.php:2293 +msgid "Off" +msgstr "" + +#: usr/local/www/interfaces.php:2063 usr/local/www/interfaces.php:2241 +#: usr/local/www/interfaces.php:2229 usr/local/www/interfaces.php:2259 +#: usr/local/www/interfaces.php:2305 usr/local/www/interfaces.php:2294 +#: usr/local/www/interfaces.php:2294 +msgid "On" +msgstr "" + +#: usr/local/www/interfaces.php:2070 usr/local/www/interfaces.php:2248 +#: usr/local/www/interfaces.php:2236 usr/local/www/interfaces.php:2266 +#: usr/local/www/interfaces.php:2312 usr/local/www/interfaces.php:2301 +#: usr/local/www/interfaces.php:2301 +msgid "Transmit antenna" +msgstr "" + +#: usr/local/www/interfaces.php:2074 usr/local/www/interfaces.php:2086 +#: usr/local/www/interfaces.php:2252 usr/local/www/interfaces.php:2264 +#: usr/local/www/interfaces.php:2240 usr/local/www/interfaces.php:2270 +#: usr/local/www/interfaces.php:2282 usr/local/www/interfaces.php:2316 +#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2305 +#: usr/local/www/interfaces.php:2317 usr/local/www/interfaces.php:2305 +#: usr/local/www/interfaces.php:2317 +msgid "#1" +msgstr "" + +#: usr/local/www/interfaces.php:2075 usr/local/www/interfaces.php:2087 +#: usr/local/www/interfaces.php:2253 usr/local/www/interfaces.php:2265 +#: usr/local/www/interfaces.php:2241 usr/local/www/interfaces.php:2271 +#: usr/local/www/interfaces.php:2283 usr/local/www/interfaces.php:2317 +#: usr/local/www/interfaces.php:2329 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2318 +msgid "#2" +msgstr "" + +#: usr/local/www/interfaces.php:2082 usr/local/www/interfaces.php:2260 +#: usr/local/www/interfaces.php:2248 usr/local/www/interfaces.php:2278 +#: usr/local/www/interfaces.php:2324 usr/local/www/interfaces.php:2313 +#: usr/local/www/interfaces.php:2313 +msgid "Receive antenna" +msgstr "" + +#: usr/local/www/interfaces.php:2094 usr/local/www/interfaces.php:2272 +#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2290 +#: usr/local/www/interfaces.php:2336 usr/local/www/interfaces.php:2325 +#: usr/local/www/interfaces.php:2325 +msgid "" +"Note: The antenna numbers do not always match up with the labels on the card." +msgstr "" + +#: usr/local/www/interfaces.php:2100 usr/local/www/interfaces.php:2278 +#: usr/local/www/interfaces.php:2266 usr/local/www/interfaces.php:2296 +#: usr/local/www/interfaces.php:2342 usr/local/www/interfaces.php:2331 +#: usr/local/www/interfaces.php:2331 +msgid "Distance setting" +msgstr "" + +#: usr/local/www/interfaces.php:2104 usr/local/www/interfaces.php:2282 +#: usr/local/www/interfaces.php:2270 usr/local/www/interfaces.php:2300 +#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2335 +#: usr/local/www/interfaces.php:2335 +msgid "" +"Note: This field can be used to tune ACK/CTS timers to fit the distance " +"between AP and Client" +msgstr "" + +#: usr/local/www/interfaces.php:2105 usr/local/www/interfaces.php:2283 +#: usr/local/www/interfaces.php:2271 usr/local/www/interfaces.php:2301 +#: usr/local/www/interfaces.php:2347 usr/local/www/interfaces.php:2336 +#: usr/local/www/interfaces.php:2336 +msgid "(measured in Meters and works only for Atheros based cards !)" +msgstr "" + +#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2288 +#: usr/local/www/interfaces.php:2276 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2352 usr/local/www/interfaces.php:2341 +#: usr/local/www/interfaces.php:2341 +msgid "Regulatory settings" +msgstr "" + +#: usr/local/www/interfaces.php:2112 usr/local/www/interfaces.php:2290 +#: usr/local/www/interfaces.php:2278 usr/local/www/interfaces.php:2308 +#: usr/local/www/interfaces.php:2354 usr/local/www/interfaces.php:2343 +#: usr/local/www/interfaces.php:2343 +msgid "Regulatory domain" +msgstr "" + +#: usr/local/www/interfaces.php:2126 usr/local/www/interfaces.php:2304 +#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2322 +#: usr/local/www/interfaces.php:2368 usr/local/www/interfaces.php:2357 +#: usr/local/www/interfaces.php:2357 +msgid "" +"Note: Some cards have a default that is not recognized and require changing " +"the regulatory domain to one in this list for the changes to other " +"regulatory settings to work." +msgstr "" + +#: usr/local/www/interfaces.php:2128 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2294 usr/local/www/interfaces.php:2324 +#: usr/local/www/interfaces.php:2370 usr/local/www/interfaces.php:2359 +#: usr/local/www/interfaces.php:2359 +msgid "Country (listed with country code and regulatory domain)" +msgstr "" + +#: usr/local/www/interfaces.php:2142 usr/local/www/interfaces.php:2320 +#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2338 +#: usr/local/www/interfaces.php:2384 usr/local/www/interfaces.php:2373 +#: usr/local/www/interfaces.php:2373 +msgid "" +"Note: Any country setting other than \"Default\" will override the " +"regulatory domain setting" +msgstr "" + +#: usr/local/www/interfaces.php:2144 usr/local/www/interfaces.php:2322 +#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2340 +#: usr/local/www/interfaces.php:2386 usr/local/www/interfaces.php:2375 +#: usr/local/www/interfaces.php:2375 +msgid "Location" +msgstr "" + +#: usr/local/www/interfaces.php:2147 usr/local/www/interfaces.php:2325 +#: usr/local/www/interfaces.php:2313 usr/local/www/interfaces.php:2343 +#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2378 +#: usr/local/www/interfaces.php:2378 +msgid "Indoor" +msgstr "" + +#: usr/local/www/interfaces.php:2148 usr/local/www/interfaces.php:2326 +#: usr/local/www/interfaces.php:2314 usr/local/www/interfaces.php:2344 +#: usr/local/www/interfaces.php:2390 usr/local/www/interfaces.php:2379 +#: usr/local/www/interfaces.php:2379 +msgid "Outdoor" +msgstr "" + +#: usr/local/www/interfaces.php:2149 usr/local/www/interfaces.php:2327 +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2345 +#: usr/local/www/interfaces.php:2391 usr/local/www/interfaces.php:2380 +#: usr/local/www/interfaces.php:2380 +msgid "Anywhere" +msgstr "" + +#: usr/local/www/interfaces.php:2152 usr/local/www/interfaces.php:2330 +#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2348 +#: usr/local/www/interfaces.php:2394 usr/local/www/interfaces.php:2383 +#: usr/local/www/interfaces.php:2383 +msgid "" +"These settings may affect which channels are available and the maximum " +"transmit power allowed on those channels. Using the correct settings to " +"comply with local regulatory requirements is recommended." +msgstr "" + +#: usr/local/www/interfaces.php:2154 usr/local/www/interfaces.php:2332 +#: usr/local/www/interfaces.php:2320 usr/local/www/interfaces.php:2350 +#: usr/local/www/interfaces.php:2396 usr/local/www/interfaces.php:2385 +#: usr/local/www/interfaces.php:2385 +msgid "" +"Note: All wireless networks on this interface will be temporarily brought " +"down when changing regulatory settings. Some of the regulatory domains or " +"country codes may not be allowed by some cards. These settings may not be " +"able to add additional channels that are not already supported." +msgstr "" + +#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2339 +#: usr/local/www/interfaces.php:2327 usr/local/www/interfaces.php:2357 +#: usr/local/www/interfaces.php:2403 usr/local/www/interfaces.php:2392 +#: usr/local/www/interfaces.php:2392 +msgid "Network-specific wireless configuration" +msgstr "" + +#: usr/local/www/interfaces.php:2167 +#: usr/local/www/interfaces_wireless_edit.php:179 +#: usr/local/www/interfaces.php:2345 usr/local/www/interfaces.php:2333 +#: usr/local/www/interfaces_wireless_edit.php:181 +#: usr/local/www/interfaces.php:2363 usr/local/www/interfaces.php:2409 +#: usr/local/www/interfaces.php:2398 +#: usr/local/www/interfaces_wireless_edit.php:181 +#: usr/local/www/interfaces.php:2398 +msgid "Infrastructure (BSS)" +msgstr "" + +#: usr/local/www/interfaces.php:2168 +#: usr/local/www/interfaces_wireless_edit.php:180 +#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2334 +#: usr/local/www/interfaces_wireless_edit.php:182 +#: usr/local/www/interfaces.php:2364 usr/local/www/interfaces.php:2410 +#: usr/local/www/interfaces.php:2399 +#: usr/local/www/interfaces_wireless_edit.php:182 +#: usr/local/www/interfaces.php:2399 +msgid "Ad-hoc (IBSS)" +msgstr "" + +#: usr/local/www/interfaces.php:2169 +#: usr/local/www/interfaces_wireless_edit.php:181 +#: usr/local/www/interfaces.php:2347 usr/local/www/interfaces.php:2335 +#: usr/local/www/interfaces_wireless_edit.php:183 +#: usr/local/www/interfaces.php:2365 usr/local/www/interfaces.php:2411 +#: usr/local/www/interfaces.php:2400 +#: usr/local/www/interfaces_wireless_edit.php:183 +#: usr/local/www/interfaces.php:2400 +msgid "Access Point" +msgstr "" + +#: usr/local/www/interfaces.php:2181 usr/local/www/interfaces.php:2361 +#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2379 +#: usr/local/www/interfaces.php:2425 usr/local/www/interfaces.php:2414 +#: usr/local/www/interfaces.php:2414 +msgid "Minimum wireless standard" +msgstr "" + +#: usr/local/www/interfaces.php:2184 usr/local/www/interfaces.php:2364 +#: usr/local/www/interfaces.php:2352 usr/local/www/interfaces.php:2382 +#: usr/local/www/interfaces.php:2428 usr/local/www/interfaces.php:2417 +#: usr/local/www/interfaces.php:2417 +msgid "Any" +msgstr "" + +#: usr/local/www/interfaces.php:2186 usr/local/www/interfaces.php:2366 +#: usr/local/www/interfaces.php:2354 usr/local/www/interfaces.php:2384 +#: usr/local/www/interfaces.php:2430 usr/local/www/interfaces.php:2419 +#: usr/local/www/interfaces.php:2419 +msgid "802.11g" +msgstr "" + +#: usr/local/www/interfaces.php:2188 usr/local/www/interfaces.php:2368 +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2386 +#: usr/local/www/interfaces.php:2432 usr/local/www/interfaces.php:2421 +#: usr/local/www/interfaces.php:2421 +msgid "802.11n" +msgstr "" + +#: usr/local/www/interfaces.php:2191 usr/local/www/interfaces.php:2371 +#: usr/local/www/interfaces.php:2359 usr/local/www/interfaces.php:2389 +#: usr/local/www/interfaces.php:2435 usr/local/www/interfaces.php:2424 +#: usr/local/www/interfaces.php:2424 +msgid "" +"When operating as an access point, allow only stations capable of the " +"selected wireless standard to associate (stations not capable are not " +"permitted to associate)." +msgstr "" + +#: usr/local/www/interfaces.php:2196 usr/local/www/interfaces.php:2376 +#: usr/local/www/interfaces.php:2364 usr/local/www/interfaces.php:2394 +#: usr/local/www/interfaces.php:2440 usr/local/www/interfaces.php:2429 +#: usr/local/www/interfaces.php:2429 +msgid "802.11g only" +msgstr "" + +#: usr/local/www/interfaces.php:2199 usr/local/www/interfaces.php:2379 +#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2397 +#: usr/local/www/interfaces.php:2443 usr/local/www/interfaces.php:2432 +#: usr/local/www/interfaces.php:2432 +msgid "" +"When operating as an access point in 802.11g mode, allow only 11g-capable " +"stations to associate (11b-only stations are not permitted to associate)." +msgstr "" + +#: usr/local/www/interfaces.php:2204 usr/local/www/interfaces.php:2384 +#: usr/local/www/interfaces.php:2372 usr/local/www/interfaces.php:2402 +#: usr/local/www/interfaces.php:2448 usr/local/www/interfaces.php:2437 +#: usr/local/www/interfaces.php:2437 +msgid "Allow intra-BSS communication" +msgstr "" + +#: usr/local/www/interfaces.php:2208 usr/local/www/interfaces.php:2388 +#: usr/local/www/interfaces.php:2376 usr/local/www/interfaces.php:2406 +#: usr/local/www/interfaces.php:2452 usr/local/www/interfaces.php:2441 +#: usr/local/www/interfaces.php:2441 +msgid "" +"When operating as an access point, enable this if you want to pass packets " +"between wireless clients directly." +msgstr "" + +#: usr/local/www/interfaces.php:2210 usr/local/www/interfaces.php:2390 +#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2408 +#: usr/local/www/interfaces.php:2454 usr/local/www/interfaces.php:2443 +#: usr/local/www/interfaces.php:2443 +msgid "" +"Disabling the internal bridging is useful when traffic is to be processed " +"with packet filtering." +msgstr "" + +#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2394 +#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2412 +#: usr/local/www/interfaces.php:2458 usr/local/www/interfaces.php:2447 +#: usr/local/www/interfaces.php:2447 +msgid "Enable WME" +msgstr "" + +#: usr/local/www/interfaces.php:2217 usr/local/www/interfaces.php:2397 +#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2415 +#: usr/local/www/interfaces.php:2461 usr/local/www/interfaces.php:2450 +#: usr/local/www/interfaces.php:2450 +msgid "Setting this option will force the card to use WME (wireless QoS)." +msgstr "" + +#: usr/local/www/interfaces.php:2221 usr/local/www/interfaces.php:2401 +#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2419 +#: usr/local/www/interfaces.php:2465 usr/local/www/interfaces.php:2454 +#: usr/local/www/interfaces.php:2454 +msgid "Enable Hide SSID" +msgstr "" + +#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2405 +#: usr/local/www/interfaces.php:2393 usr/local/www/interfaces.php:2423 +#: usr/local/www/interfaces.php:2469 usr/local/www/interfaces.php:2458 +#: usr/local/www/interfaces.php:2458 +msgid "Setting this option will force the card to NOT broadcast its SSID" +msgstr "" + +#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2407 +#: usr/local/www/interfaces.php:2395 usr/local/www/interfaces.php:2425 +#: usr/local/www/interfaces.php:2471 usr/local/www/interfaces.php:2460 +#: usr/local/www/interfaces.php:2460 +msgid "(this might create problems for some clients)." +msgstr "" + +#: usr/local/www/interfaces.php:2231 usr/local/www/interfaces.php:2411 +#: usr/local/www/interfaces.php:2399 usr/local/www/interfaces.php:2429 +#: usr/local/www/interfaces.php:2475 usr/local/www/interfaces.php:2464 +#: usr/local/www/interfaces.php:2464 +msgid "WEP" +msgstr "" + +#: usr/local/www/interfaces.php:2234 usr/local/www/interfaces.php:2414 +#: usr/local/www/interfaces.php:2402 usr/local/www/interfaces.php:2432 +#: usr/local/www/interfaces.php:2478 usr/local/www/interfaces.php:2467 +#: usr/local/www/interfaces.php:2467 +msgid "Enable WEP" +msgstr "" + +#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2419 +#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2437 +#: usr/local/www/interfaces.php:2483 usr/local/www/interfaces.php:2472 +#: usr/local/www/interfaces.php:2472 +msgid "TX key" +msgstr "" + +#: usr/local/www/interfaces.php:2242 usr/local/www/interfaces.php:2422 +#: usr/local/www/interfaces.php:2410 usr/local/www/interfaces.php:2440 +#: usr/local/www/interfaces.php:2486 usr/local/www/interfaces.php:2475 +#: usr/local/www/interfaces.php:2475 +msgid "Key 1:" +msgstr "" + +#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2431 +#: usr/local/www/interfaces.php:2419 usr/local/www/interfaces.php:2449 +#: usr/local/www/interfaces.php:2495 usr/local/www/interfaces.php:2484 +#: usr/local/www/interfaces.php:2484 +msgid "Key 2:" +msgstr "" + +#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2440 +#: usr/local/www/interfaces.php:2428 usr/local/www/interfaces.php:2458 +#: usr/local/www/interfaces.php:2504 usr/local/www/interfaces.php:2493 +#: usr/local/www/interfaces.php:2493 +msgid "Key 3:" +msgstr "" + +#: usr/local/www/interfaces.php:2269 usr/local/www/interfaces.php:2449 +#: usr/local/www/interfaces.php:2437 usr/local/www/interfaces.php:2467 +#: usr/local/www/interfaces.php:2513 usr/local/www/interfaces.php:2502 +#: usr/local/www/interfaces.php:2502 +msgid "Key 4:" +msgstr "" + +#: usr/local/www/interfaces.php:2279 usr/local/www/interfaces.php:2459 +#: usr/local/www/interfaces.php:2447 usr/local/www/interfaces.php:2477 +#: usr/local/www/interfaces.php:2523 usr/local/www/interfaces.php:2512 +#: usr/local/www/interfaces.php:2512 +msgid "" +"40 (64) bit keys may be entered as 5 ASCII characters or 10 hex digits " +"preceded by '0x'." +msgstr "" + +#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2460 +#: usr/local/www/interfaces.php:2448 usr/local/www/interfaces.php:2478 +#: usr/local/www/interfaces.php:2524 usr/local/www/interfaces.php:2513 +#: usr/local/www/interfaces.php:2513 +msgid "" +"104 (128) bit keys may be entered as 13 ASCII characters or 26 hex digits " +"preceded by '0x'." +msgstr "" + +#: usr/local/www/interfaces.php:2284 usr/local/www/interfaces.php:2308 +#: usr/local/www/interfaces.php:2464 usr/local/www/interfaces.php:2488 +#: usr/local/www/interfaces.php:2452 usr/local/www/interfaces.php:2476 +#: usr/local/www/interfaces.php:2482 usr/local/www/interfaces.php:2506 +#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2552 +#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2541 +#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2541 +msgid "WPA" +msgstr "" + +#: usr/local/www/interfaces.php:2287 usr/local/www/interfaces.php:2467 +#: usr/local/www/interfaces.php:2455 usr/local/www/interfaces.php:2485 +#: usr/local/www/interfaces.php:2531 usr/local/www/interfaces.php:2520 +#: usr/local/www/interfaces.php:2520 +msgid "Enable WPA" +msgstr "" + +#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2472 +msgid "WPA Pre Shared Key" +msgstr "" + +#: usr/local/www/interfaces.php:2295 usr/local/www/interfaces.php:2475 +#: usr/local/www/interfaces.php:2463 usr/local/www/interfaces.php:2493 +#: usr/local/www/interfaces.php:2539 usr/local/www/interfaces.php:2528 +#: usr/local/www/interfaces.php:2528 +msgid "PSK:" +msgstr "" + +#: usr/local/www/interfaces.php:2301 usr/local/www/interfaces.php:2481 +#: usr/local/www/interfaces.php:2469 usr/local/www/interfaces.php:2499 +#: usr/local/www/interfaces.php:2545 usr/local/www/interfaces.php:2534 +#: usr/local/www/interfaces.php:2534 +msgid "Passphrase must be from 8 to 63 characters." +msgstr "" + +#: usr/local/www/interfaces.php:2305 usr/local/www/interfaces.php:2485 +#: usr/local/www/interfaces.php:2473 usr/local/www/interfaces.php:2503 +#: usr/local/www/interfaces.php:2549 usr/local/www/interfaces.php:2538 +#: usr/local/www/interfaces.php:2538 +msgid "WPA Mode" +msgstr "" + +#: usr/local/www/interfaces.php:2309 usr/local/www/interfaces.php:2489 +#: usr/local/www/interfaces.php:2477 usr/local/www/interfaces.php:2507 +#: usr/local/www/interfaces.php:2553 usr/local/www/interfaces.php:2542 +#: usr/local/www/interfaces.php:2542 +msgid "WPA2" +msgstr "" + +#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2320 +#: usr/local/www/interfaces.php:2330 usr/local/www/interfaces.php:2339 +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/interfaces.php:2490 usr/local/www/interfaces.php:2500 +#: usr/local/www/interfaces.php:2510 usr/local/www/interfaces.php:2519 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/interfaces.php:2478 usr/local/www/interfaces.php:2488 +#: usr/local/www/interfaces.php:2498 usr/local/www/interfaces.php:2507 +#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2518 +#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2537 +#: usr/local/www/interfaces.php:2554 usr/local/www/interfaces.php:2564 +#: usr/local/www/interfaces.php:2574 usr/local/www/interfaces.php:2583 +#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2553 +#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2572 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2553 +#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2572 +msgid "Both" +msgstr "" + +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2495 +#: usr/local/www/interfaces.php:2483 usr/local/www/interfaces.php:2513 +#: usr/local/www/interfaces.php:2559 usr/local/www/interfaces.php:2548 +#: usr/local/www/interfaces.php:2548 +msgid "WPA Key Management Mode" +msgstr "" + +#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2498 +msgid "Pre Shared Key" +msgstr "" + +#: usr/local/www/interfaces.php:2319 usr/local/www/interfaces.php:2499 +#: usr/local/www/interfaces.php:2487 usr/local/www/interfaces.php:2517 +#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2552 +#: usr/local/www/interfaces.php:2552 +msgid "Extensible Authentication Protocol" +msgstr "" + +#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2508 +#: usr/local/www/interfaces.php:2496 usr/local/www/interfaces.php:2526 +#: usr/local/www/interfaces.php:2572 usr/local/www/interfaces.php:2561 +#: usr/local/www/interfaces.php:2561 +msgid "Open System Authentication" +msgstr "" + +#: usr/local/www/interfaces.php:2329 usr/local/www/interfaces.php:2509 +#: usr/local/www/interfaces.php:2497 usr/local/www/interfaces.php:2527 +#: usr/local/www/interfaces.php:2573 usr/local/www/interfaces.php:2562 +#: usr/local/www/interfaces.php:2562 +msgid "Shared Key Authentication" +msgstr "" + +#: usr/local/www/interfaces.php:2332 usr/local/www/interfaces.php:2512 +#: usr/local/www/interfaces.php:2500 usr/local/www/interfaces.php:2530 +#: usr/local/www/interfaces.php:2576 usr/local/www/interfaces.php:2565 +#: usr/local/www/interfaces.php:2565 +msgid "Note: Shared Key Authentication requires WEP." +msgstr "" + +#: usr/local/www/interfaces.php:2336 usr/local/www/interfaces.php:2516 +#: usr/local/www/interfaces.php:2504 usr/local/www/interfaces.php:2534 +#: usr/local/www/interfaces.php:2580 usr/local/www/interfaces.php:2569 +#: usr/local/www/interfaces.php:2569 +msgid "WPA Pairwise" +msgstr "" + +#: usr/local/www/interfaces.php:2340 usr/local/www/interfaces.php:2520 +#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2538 +#: usr/local/www/interfaces.php:2584 usr/local/www/interfaces.php:2573 +#: usr/local/www/interfaces.php:2573 +msgid "AES (recommended)" +msgstr "" + +#: usr/local/www/interfaces.php:2341 usr/local/www/interfaces.php:2521 +#: usr/local/www/interfaces.php:2509 usr/local/www/interfaces.php:2539 +#: usr/local/www/interfaces.php:2585 usr/local/www/interfaces.php:2574 +#: usr/local/www/interfaces.php:2574 +msgid "TKIP" +msgstr "" + +#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2526 +#: usr/local/www/interfaces.php:2514 usr/local/www/interfaces.php:2544 +#: usr/local/www/interfaces.php:2590 usr/local/www/interfaces.php:2579 +#: usr/local/www/interfaces.php:2579 +msgid "Key Rotation" +msgstr "" + +#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2529 +#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2547 +#: usr/local/www/interfaces.php:2593 usr/local/www/interfaces.php:2582 +#: usr/local/www/interfaces.php:2582 +msgid "" +"Allowed values are 1-9999 but should not be longer than Master Key " +"Regeneration time." +msgstr "" + +#: usr/local/www/interfaces.php:2353 usr/local/www/interfaces.php:2533 +#: usr/local/www/interfaces.php:2521 usr/local/www/interfaces.php:2551 +#: usr/local/www/interfaces.php:2597 usr/local/www/interfaces.php:2586 +#: usr/local/www/interfaces.php:2586 +msgid "Master Key Regeneration" +msgstr "" + +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2536 +#: usr/local/www/interfaces.php:2524 usr/local/www/interfaces.php:2554 +#: usr/local/www/interfaces.php:2600 usr/local/www/interfaces.php:2589 +#: usr/local/www/interfaces.php:2589 +msgid "" +"Allowed values are 1-9999 but should not be shorter than Key Rotation time." +msgstr "" + +#: usr/local/www/interfaces.php:2360 usr/local/www/interfaces.php:2540 +#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2558 +#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2593 +#: usr/local/www/interfaces.php:2593 +msgid "Strict Key Regeneration" +msgstr "" + +#: usr/local/www/interfaces.php:2363 usr/local/www/interfaces.php:2543 +#: usr/local/www/interfaces.php:2531 usr/local/www/interfaces.php:2561 +#: usr/local/www/interfaces.php:2607 usr/local/www/interfaces.php:2596 +#: usr/local/www/interfaces.php:2596 +msgid "" +"Setting this option will force the AP to rekey whenever a client " +"disassociates." +msgstr "" + +#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2547 +#: usr/local/www/interfaces.php:2535 usr/local/www/interfaces.php:2565 +#: usr/local/www/interfaces.php:2611 usr/local/www/interfaces.php:2600 +#: usr/local/www/interfaces.php:2600 +msgid "Enable IEEE802.1X Authentication" +msgstr "" + +#: usr/local/www/interfaces.php:2370 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2538 usr/local/www/interfaces.php:2568 +#: usr/local/www/interfaces.php:2614 usr/local/www/interfaces.php:2603 +#: usr/local/www/interfaces.php:2603 +msgid "Setting this option will enable 802.1x authentication." +msgstr "" + +#: usr/local/www/interfaces.php:2371 +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/status_openvpn.php:304 usr/local/www/interfaces.php:2551 +#: usr/local/www/load_balancer_pool_edit.php:255 +#: usr/local/www/status_openvpn.php:307 usr/local/www/interfaces.php:2539 +#: usr/local/www/load_balancer_pool_edit.php:253 +#: usr/local/www/status_openvpn.php:355 usr/local/www/interfaces.php:2569 +#: usr/local/www/status_openvpn.php:385 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2604 usr/local/www/status_openvpn.php:385 +#: usr/local/www/load_balancer_pool_edit.php:253 +#: usr/local/www/interfaces.php:2604 +msgid "NOTE" +msgstr "" + +#: usr/local/www/interfaces.php:2371 usr/local/www/interfaces.php:2551 +#: usr/local/www/interfaces.php:2539 usr/local/www/interfaces.php:2569 +#: usr/local/www/interfaces.php:2615 usr/local/www/interfaces.php:2604 +#: usr/local/www/interfaces.php:2604 +msgid "this option requires checking the \"Enable WPA box\"." +msgstr "" + +#: usr/local/www/interfaces.php:2375 usr/local/www/interfaces.php:2555 +#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2573 +#: usr/local/www/interfaces.php:2619 usr/local/www/interfaces.php:2608 +#: usr/local/www/interfaces.php:2608 +msgid "802.1X Authentication Server IP Address" +msgstr "" + +#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2558 +#: usr/local/www/interfaces.php:2579 usr/local/www/interfaces.php:2546 +#: usr/local/www/interfaces.php:2567 usr/local/www/interfaces.php:2576 +#: usr/local/www/interfaces.php:2597 usr/local/www/interfaces.php:2622 +#: usr/local/www/interfaces.php:2643 usr/local/www/interfaces.php:2611 +#: usr/local/www/interfaces.php:2632 usr/local/www/interfaces.php:2611 +#: usr/local/www/interfaces.php:2632 +msgid "" +"Enter the IP address of the 802.1X Authentication Server. This is commonly " +"a Radius server (FreeRadius, Internet Authentication Services, etc.)" +msgstr "" + +#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2562 +#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2580 +#: usr/local/www/interfaces.php:2626 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2615 +msgid "802.1X Authentication Server Port" +msgstr "" + +#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2565 +#: usr/local/www/interfaces.php:2586 usr/local/www/interfaces.php:2553 +#: usr/local/www/interfaces.php:2574 usr/local/www/interfaces.php:2583 +#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2629 +#: usr/local/www/interfaces.php:2650 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2639 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2639 +msgid "Leave blank for the default 1812 port." +msgstr "" + +#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2569 +#: usr/local/www/interfaces.php:2557 usr/local/www/interfaces.php:2587 +#: usr/local/www/interfaces.php:2633 usr/local/www/interfaces.php:2622 +#: usr/local/www/interfaces.php:2622 +msgid "802.1X Authentication Server Shared Secret" +msgstr "" + +#: usr/local/www/interfaces.php:2396 usr/local/www/interfaces.php:2597 +#: usr/local/www/interfaces.php:2585 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2661 usr/local/www/interfaces.php:2650 +#: usr/local/www/interfaces.php:2650 +msgid "Authentication Roaming Preauth" +msgstr "" + +#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2608 +#: usr/local/www/interfaces.php:2596 usr/local/www/interfaces.php:2626 +#: usr/local/www/interfaces.php:2672 usr/local/www/interfaces.php:2661 +#: usr/local/www/interfaces.php:2661 +msgid "Private networks" +msgstr "" + +#: usr/local/www/interfaces.php:2415 usr/local/www/interfaces.php:2616 +#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2634 +#: usr/local/www/interfaces.php:2680 usr/local/www/interfaces.php:2669 +#: usr/local/www/interfaces.php:2669 +msgid "" +"When set, this option blocks traffic from IP addresses that are reserved for " +"private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as" +msgstr "" + +#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636 +#: usr/local/www/interfaces.php:2682 usr/local/www/interfaces.php:2671 +#: usr/local/www/interfaces.php:2671 +msgid "well as loopback addresses (127/8)." +msgstr "" + +#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636 +#: usr/local/www/interfaces.php:2682 usr/local/www/interfaces.php:2671 +#: usr/local/www/interfaces.php:2671 +msgid "" +"You should generally leave this option turned on, unless your WAN network " +"lies in such a private address space, too." +msgstr "" + +#: usr/local/www/interfaces.php:2427 usr/local/www/interfaces.php:2628 +#: usr/local/www/interfaces.php:2616 usr/local/www/interfaces.php:2646 +#: usr/local/www/interfaces.php:2692 usr/local/www/interfaces.php:2681 +#: usr/local/www/interfaces.php:2681 +msgid "" +"When set, this option blocks traffic from IP addresses that are reserved " +"(but not RFC 1918) or not yet assigned by IANA." +msgstr "" + +#: usr/local/www/interfaces.php:2429 usr/local/www/interfaces.php:2630 +#: usr/local/www/interfaces.php:2618 usr/local/www/interfaces.php:2648 +#: usr/local/www/interfaces.php:2694 usr/local/www/interfaces.php:2683 +#: usr/local/www/interfaces.php:2683 +msgid "" +"Bogons are prefixes that should never appear in the Internet routing table, " +"and obviously should not appear as the source address in any packets you " +"receive." +msgstr "" + +#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2559 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783 +#: usr/local/www/interfaces.php:2820 usr/local/www/interfaces.php:2829 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +msgid "You can manage Gateways" +msgstr "" + +#: usr/local/www/interfaces_assign.php:43 +#: usr/local/www/interfaces_assign.php:43 +msgid "Assign network ports" +msgstr "" + +#: usr/local/www/interfaces_assign.php:194 +#: usr/local/www/interfaces_assign.php:194 +#, php-format +msgid "Port %1$s was assigned to %2$s interfaces:" +msgstr "" + +#: usr/local/www/interfaces_assign.php:262 +#: usr/local/www/interfaces_assign.php:274 +#: usr/local/www/interfaces_assign.php:274 +msgid "" +"The interface is part of a group. Please remove it from the group to continue" +msgstr "" + +#: usr/local/www/interfaces_assign.php:264 +#: usr/local/www/interfaces_assign.php:276 +#: usr/local/www/interfaces_assign.php:276 +msgid "" +"The interface is part of a bridge. Please remove it from the bridge to " +"continue" +msgstr "" + +#: usr/local/www/interfaces_assign.php:266 +#: usr/local/www/interfaces_assign.php:278 +#: usr/local/www/interfaces_assign.php:278 +msgid "" +"The interface is part of a gre tunnel. Please delete the tunnel to continue" +msgstr "" + +#: usr/local/www/interfaces_assign.php:268 +#: usr/local/www/interfaces_assign.php:280 +#: usr/local/www/interfaces_assign.php:280 +msgid "" +"The interface is part of a gif tunnel. Please delete the tunnel to continue" +msgstr "" + +#: usr/local/www/interfaces_assign.php:318 +#: usr/local/www/interfaces_assign.php:312 +#: usr/local/www/interfaces_assign.php:318 +msgid "Interface has been deleted." +msgstr "" + +#: usr/local/www/interfaces_assign.php:325 +#: usr/local/www/interfaces_assign.php:319 +#: usr/local/www/interfaces_assign.php:325 +msgid "lan" +msgstr "" + +#: usr/local/www/interfaces_assign.php:326 +#: usr/local/www/interfaces_assign.php:320 +#: usr/local/www/interfaces_assign.php:326 +msgid "LAN" +msgstr "" + +#: usr/local/www/interfaces_assign.php:366 +#: usr/local/www/interfaces_assign.php:360 +#: usr/local/www/interfaces_assign.php:366 +msgid "Interface has been added." +msgstr "" + +#: usr/local/www/interfaces_assign.php:376 +#: usr/local/www/interfaces_assign.php:370 +#: usr/local/www/interfaces_assign.php:376 +msgid "The system is now rebooting. Please wait." +msgstr "" + +#: usr/local/www/interfaces_assign.php:378 +#: usr/local/www/interfaces_assign.php:372 +#: usr/local/www/interfaces_assign.php:378 +msgid "Reboot is needed. Please apply the settings in order to reboot." +msgstr "" + +#: usr/local/www/interfaces_assign.php:380 +#: usr/local/www/interfaces_assign.php:374 +#: usr/local/www/interfaces_assign.php:380 +msgid "" +"Interface mismatch detected. Please resolve the mismatch and click Save. " +"The firewall will reboot afterwards." +msgstr "" + +#: usr/local/www/interfaces_assign.php:390 +#: usr/local/www/interfaces_assign.php:384 +#: usr/local/www/interfaces_assign.php:390 +msgid "" +"The interface configuration has been changed.
    You must apply the changes " +"in order for them to take effect." +msgstr "" + +#: usr/local/www/interfaces_assign.php:421 +#: usr/local/www/interfaces_assign.php:415 +#: usr/local/www/interfaces_assign.php:421 +msgid "Network port" +msgstr "" + +#: usr/local/www/interfaces_assign.php:437 +#: usr/local/www/interfaces_assign.php:431 +#: usr/local/www/interfaces_assign.php:437 +#, php-format +msgid "VLAN %1$s on %2$s" +msgstr "" + +#: usr/local/www/interfaces_assign.php:480 +#: usr/local/www/interfaces_assign.php:474 +#: usr/local/www/interfaces_assign.php:480 +msgid "Do you really want to delete this interface?" +msgstr "" + +#: usr/local/www/interfaces_assign.php:480 +#: usr/local/www/interfaces_assign.php:474 +#: usr/local/www/interfaces_assign.php:480 +msgid "delete interface" +msgstr "" + +#: usr/local/www/interfaces_assign.php:489 +#: usr/local/www/interfaces_assign.php:483 +#: usr/local/www/interfaces_assign.php:489 +msgid "add interface" +msgstr "" + +#: usr/local/www/interfaces_assign.php:506 +#: usr/local/www/interfaces_assign.php:500 +#: usr/local/www/interfaces_assign.php:504 +#: usr/local/www/interfaces_assign.php:504 +msgid "" +"Interfaces that are configured as members of a lagg(4) interface will not be " +"shown." +msgstr "" + +#: usr/local/www/diag_pf_info.php:46 usr/local/www/diag_pf_info.php:46 +msgid "Diagnostics: pfInfo" +msgstr "" + +#: usr/local/www/diag_pf_info.php:106 usr/local/www/diag_pf_info.php:103 +msgid "Gathering PF information, please wait..." +msgstr "" + +#: usr/local/www/diag_smart.php:14 usr/local/www/diag_smart.php:14 +msgid "S.M.A.R.T. Monitor Tools" +msgstr "" + +#: usr/local/www/diag_smart.php:68 usr/local/www/diag_smart.php:73 +#: usr/local/www/diag_smart.php:73 +msgid "PASSED" +msgstr "" + +#: usr/local/www/diag_smart.php:69 usr/local/www/diag_smart.php:74 +#: usr/local/www/diag_smart.php:74 +msgid "FAILED" +msgstr "" + +#: usr/local/www/diag_smart.php:70 usr/local/www/diag_smart.php:75 +#: usr/local/www/diag_smart.php:75 +msgid "Warning" +msgstr "" + +#: usr/local/www/diag_smart.php:113 usr/local/www/diag_smart.php:413 +#: usr/local/www/diag_smart.php:126 usr/local/www/diag_smart.php:434 +#: usr/local/www/diag_smart.php:126 usr/local/www/diag_smart.php:434 +msgid "Abort" +msgstr "" + +#: usr/local/www/diag_smart.php:154 usr/local/www/diag_smart.php:175 +#: usr/local/www/diag_smart.php:175 +#, php-format +msgid "Email sent to %s" +msgstr "" + +#: usr/local/www/diag_smart.php:194 usr/local/www/diag_smart.php:266 +#: usr/local/www/diag_smart.php:215 usr/local/www/diag_smart.php:287 +#: usr/local/www/diag_smart.php:215 usr/local/www/diag_smart.php:287 +msgid "Information/Tests" +msgstr "" + +#: usr/local/www/diag_smart.php:195 usr/local/www/diag_smart.php:206 +#: usr/local/www/diag_smart.php:216 usr/local/www/diag_smart.php:227 +#: usr/local/www/diag_smart.php:216 usr/local/www/diag_smart.php:227 +msgid "Config" +msgstr "" + +#: usr/local/www/diag_smart.php:209 usr/local/www/system_camanager.php:524 +#: usr/local/www/system_certmanager.php:617 +#: usr/local/www/system_certmanager.php:720 +#: usr/local/www/system_certmanager.php:733 +#: usr/local/www/system_certmanager.php:886 +#: usr/local/www/system_camanager.php:525 +#: usr/local/www/system_camanager.php:549 usr/local/www/diag_smart.php:230 +#: usr/local/www/system_certmanager.php:758 +#: usr/local/www/system_certmanager.php:928 +#: usr/local/www/system_certmanager.php:759 +#: usr/local/www/system_certmanager.php:932 +#: usr/local/www/system_camanager.php:549 usr/local/www/diag_smart.php:230 +#: usr/local/www/system_certmanager.php:759 +#: usr/local/www/system_certmanager.php:932 +msgid "Email Address" +msgstr "" + +#: usr/local/www/diag_smart.php:231 usr/local/www/diag_smart.php:252 +#: usr/local/www/diag_smart.php:252 +msgid "Test email" +msgstr "" + +#: usr/local/www/diag_smart.php:236 usr/local/www/diag_smart.php:257 +#: usr/local/www/diag_smart.php:257 +#, php-format +msgid "Send test email to %s" +msgstr "" + +#: usr/local/www/diag_smart.php:278 usr/local/www/diag_smart.php:283 +#: usr/local/www/diag_smart.php:299 usr/local/www/diag_smart.php:304 +#: usr/local/www/diag_smart.php:299 usr/local/www/diag_smart.php:304 +msgid "Info" +msgstr "" + +#: usr/local/www/diag_smart.php:281 usr/local/www/diag_smart.php:302 +#: usr/local/www/diag_smart.php:302 +msgid "Info type" +msgstr "" + +#: usr/local/www/diag_smart.php:284 usr/local/www/diag_smart.php:305 +#: usr/local/www/diag_smart.php:305 +msgid "Health" +msgstr "" + +#: usr/local/www/diag_smart.php:285 usr/local/www/diag_smart.php:306 +#: usr/local/www/diag_smart.php:306 +msgid "SMART Capabilities" +msgstr "" + +#: usr/local/www/diag_smart.php:286 usr/local/www/diag_smart.php:307 +#: usr/local/www/diag_smart.php:307 +msgid "Attributes" +msgstr "" + +#: usr/local/www/diag_smart.php:287 usr/local/www/firewall_aliases.php:179 +#: usr/local/www/diag_smart.php:308 usr/local/www/firewall_aliases.php:177 +#: usr/local/www/firewall_aliases.php:177 usr/local/www/diag_smart.php:308 +msgid "All" +msgstr "" + +#: usr/local/www/diag_smart.php:291 usr/local/www/diag_smart.php:330 +#: usr/local/www/diag_smart.php:367 usr/local/www/diag_smart.php:397 +#: usr/local/www/diag_smart.php:312 usr/local/www/diag_smart.php:351 +#: usr/local/www/diag_smart.php:388 usr/local/www/diag_smart.php:418 +#: usr/local/www/diag_smart.php:312 usr/local/www/diag_smart.php:351 +#: usr/local/www/diag_smart.php:388 usr/local/www/diag_smart.php:418 +msgid "Device: /dev/" +msgstr "" + +#: usr/local/www/diag_smart.php:307 usr/local/www/diag_smart.php:383 +#: usr/local/www/diag_smart.php:328 usr/local/www/diag_smart.php:404 +#: usr/local/www/diag_smart.php:328 usr/local/www/diag_smart.php:404 +msgid "View" +msgstr "" + +#: usr/local/www/diag_smart.php:318 +msgid "Perform Self Tests" +msgstr "" + +#: usr/local/www/diag_smart.php:321 usr/local/www/diag_smart.php:342 +#: usr/local/www/diag_smart.php:342 +msgid "Test type" +msgstr "" + +#: usr/local/www/diag_smart.php:323 +#: usr/local/www/status_gateway_groups.php:123 +#: usr/local/www/status_gateways.php:118 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60 +#: usr/local/www/status_gateways.php:119 +#: usr/local/www/status_gateway_groups.php:124 +#: usr/local/www/diag_smart.php:344 usr/local/www/diag_smart.php:344 +#: usr/local/www/status_gateway_groups.php:124 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60 +#: usr/local/www/status_gateways.php:119 +msgid "Offline" +msgstr "" + +#: usr/local/www/diag_smart.php:324 usr/local/www/diag_smart.php:345 +#: usr/local/www/diag_smart.php:345 +msgid "Short" +msgstr "" + +#: usr/local/www/diag_smart.php:325 usr/local/www/diag_smart.php:346 +#: usr/local/www/diag_system_pftop.php:137 usr/local/www/diag_smart.php:346 +#: usr/local/www/diag_system_pftop.php:137 +msgid "Long" +msgstr "" + +#: usr/local/www/diag_smart.php:326 usr/local/www/diag_smart.php:347 +#: usr/local/www/diag_smart.php:347 +msgid "Conveyance (ATA Disks Only)" +msgstr "" + +#: usr/local/www/diag_smart.php:357 usr/local/www/diag_smart.php:378 +#: usr/local/www/diag_smart.php:378 +msgid "View Logs" +msgstr "" + +#: usr/local/www/diag_smart.php:360 usr/local/www/diag_smart.php:381 +#: usr/local/www/diag_smart.php:381 +msgid "Log type" +msgstr "" + +#: usr/local/www/diag_smart.php:362 usr/local/www/diag_smart.php:383 +#: usr/local/www/diag_smart.php:383 +msgid "Error" +msgstr "" + +#: usr/local/www/diag_smart.php:363 +msgid "Self Test" +msgstr "" + +#: usr/local/www/diag_smart.php:394 usr/local/www/diag_smart.php:415 +#: usr/local/www/diag_smart.php:415 +msgid "Abort tests" +msgstr "" + +#: usr/local/www/diag_smart.php:413 usr/local/www/diag_smart.php:434 +#: usr/local/www/diag_smart.php:434 +msgid "Do you really want to abort the test?" +msgstr "" + +#: usr/local/www/diag_smart.php:428 usr/local/www/diag_smart.php:449 +#: usr/local/www/diag_smart.php:449 +msgid "Back" +msgstr "" + +#: usr/local/www/diag_states_summary.php:154 +#: usr/local/www/diag_states_summary.php:143 +#: usr/local/www/diag_states_summary.php:145 +#: usr/local/www/diag_states_summary.php:145 +msgid "Src Ports" +msgstr "" + +#: usr/local/www/diag_states_summary.php:155 +#: usr/local/www/diag_states_summary.php:144 +#: usr/local/www/diag_states_summary.php:146 +#: usr/local/www/diag_states_summary.php:146 +msgid "Dst Ports" +msgstr "" + +#: usr/local/www/diag_states_summary.php:185 +#: usr/local/www/diag_states_summary.php:174 +#: usr/local/www/diag_states_summary.php:176 +#: usr/local/www/diag_states_summary.php:176 +msgid "State Table Summary" +msgstr "" + +#: usr/local/www/diag_states_summary.php:191 +#: usr/local/www/diag_states_summary.php:180 +#: usr/local/www/diag_states_summary.php:182 +#: usr/local/www/diag_states_summary.php:182 +msgid "By Source IP" +msgstr "" + +#: usr/local/www/diag_states_summary.php:192 +#: usr/local/www/diag_states_summary.php:181 +#: usr/local/www/diag_states_summary.php:183 +#: usr/local/www/diag_states_summary.php:183 +msgid "By Destination IP" +msgstr "" + +#: usr/local/www/diag_states_summary.php:193 +#: usr/local/www/diag_states_summary.php:182 +#: usr/local/www/diag_states_summary.php:184 +#: usr/local/www/diag_states_summary.php:184 +msgid "Total per IP" +msgstr "" + +#: usr/local/www/diag_states_summary.php:194 +#: usr/local/www/diag_states_summary.php:183 +#: usr/local/www/diag_states_summary.php:185 +#: usr/local/www/diag_states_summary.php:185 +msgid "By IP Pair" +msgstr "" + +#: usr/local/www/diag_system_activity.php:46 +#: usr/local/www/diag_system_activity.php:46 +msgid "Diagnostics: System Activity" +msgstr "" + +#: usr/local/www/diag_system_activity.php:101 +#: usr/local/www/diag_system_activity.php:101 +msgid "Gathering CPU activity, please wait..." +msgstr "" + +#: usr/local/www/diag_system_pftop.php:45 +#: usr/local/www/diag_system_pftop.php:45 +msgid "Diagnostics: pfTop" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:51 +#: usr/local/www/diag_system_pftop.php:62 +#: usr/local/www/diag_system_pftop.php:103 +msgid "bytes" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:99 +#: usr/local/www/diag_system_pftop.php:148 +#: usr/local/www/diag_system_pftop.php:148 +msgid "Sort type:" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:102 +msgid "age" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:104 +msgid "dest" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:105 +msgid "dport" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:106 +msgid "exp" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:108 +msgid "peak" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:109 +msgid "pkt" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:110 +#: usr/local/www/status_interfaces.php:365 +#: usr/local/www/status_interfaces.php:462 +#: usr/local/www/status_interfaces.php:465 +#: usr/local/www/status_interfaces.php:465 +msgid "rate" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:111 +msgid "size" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:112 +msgid "sport" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:113 +msgid "src" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:126 +#: usr/local/www/diag_system_pftop.php:187 +#: usr/local/www/diag_system_pftop.php:187 +msgid "Gathering pfTOP activity, please wait..." +msgstr "" + +#: usr/local/www/license.php:45 usr/local/www/license.php:45 +msgid "License" +msgstr "" + +#: usr/local/www/license.php:47 usr/local/www/license.php:47 +msgid "is Copyright" +msgstr "" + +#: usr/local/www/license.php:47 usr/local/www/firewall_rules_edit.php:1585 +#: usr/local/www/firewall_rules_edit.php:1593 +#: usr/local/www/firewall_nat_edit.php:869 +#: usr/local/www/firewall_nat_edit.php:877 +#: usr/local/www/firewall_nat_out_edit.php:684 +#: usr/local/www/firewall_nat_out_edit.php:692 +#: usr/local/www/firewall_rules_edit.php:1596 +#: usr/local/www/firewall_rules_edit.php:1604 +#: usr/local/www/firewall_nat_edit.php:870 +#: usr/local/www/firewall_nat_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:1596 +#: usr/local/www/firewall_rules_edit.php:1604 +#: usr/local/www/firewall_nat_edit.php:870 +#: usr/local/www/firewall_nat_edit.php:878 usr/local/www/license.php:47 +#: usr/local/www/firewall_nat_out_edit.php:684 +#: usr/local/www/firewall_nat_out_edit.php:692 +msgid "by" +msgstr "" + +#: usr/local/www/license.php:48 usr/local/www/license.php:52 +#: usr/local/www/license.php:48 usr/local/www/license.php:52 +msgid "All rights reserved" +msgstr "" + +#: usr/local/www/license.php:50 usr/local/www/license.php:50 +msgid "m0n0wall is Copyright " +msgstr "" + +#: usr/local/www/license.php:50 usr/local/www/license.php:50 +msgid "2002-2007 by Manuel Kasper" +msgstr "" + +#: usr/local/www/license.php:53 usr/local/www/license.php:53 +msgid "Redistribution and use in source and binary forms, with or without" +msgstr "" + +#: usr/local/www/license.php:54 usr/local/www/license.php:54 +msgid "" +"modification, are permitted provided that the following conditions are met" +msgstr "" + +#: usr/local/www/license.php:57 usr/local/www/license.php:57 +msgid "" +"1. Redistributions of source code must retain the above copyright notice," +msgstr "" + +#: usr/local/www/license.php:59 usr/local/www/license.php:59 +msgid "this list of conditions and the following disclaimer" +msgstr "" + +#: usr/local/www/license.php:61 usr/local/www/license.php:61 +msgid "2. Redistributions in binary form must reproduce the above copyright" +msgstr "" + +#: usr/local/www/license.php:62 usr/local/www/license.php:62 +msgid "notice, this list of conditions and the following disclaimer in the" +msgstr "" + +#: usr/local/www/license.php:64 usr/local/www/license.php:64 +msgid "documentation and/or other materials provided with the distribution." +msgstr "" + +#: usr/local/www/license.php:66 usr/local/www/license.php:66 +msgid "THIS SOFTWARE IS PROVIDED " +msgstr "" + +#: usr/local/www/license.php:66 usr/local/www/license.php:66 +msgid "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES," +msgstr "" + +#: usr/local/www/license.php:68 usr/local/www/license.php:68 +msgid "" +"INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY" +msgstr "" + +#: usr/local/www/license.php:69 usr/local/www/license.php:69 +msgid "" +"AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE" +msgstr "" + +#: usr/local/www/license.php:71 usr/local/www/license.php:71 +msgid "" +"AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY," +msgstr "" + +#: usr/local/www/license.php:73 usr/local/www/license.php:73 +msgid "OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF" +msgstr "" + +#: usr/local/www/license.php:75 usr/local/www/license.php:75 +msgid "" +"SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS" +msgstr "" + +#: usr/local/www/license.php:77 usr/local/www/license.php:77 +msgid "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN" +msgstr "" + +#: usr/local/www/license.php:79 usr/local/www/license.php:79 +msgid "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)" +msgstr "" + +#: usr/local/www/license.php:80 usr/local/www/license.php:80 +msgid "" +"ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE" +msgstr "" + +#: usr/local/www/license.php:82 usr/local/www/license.php:82 +msgid "POSSIBILITY OF SUCH DAMAGE" +msgstr "" + +#: usr/local/www/license.php:84 usr/local/www/license.php:84 +msgid "The following persons have contributed code to m0n0wall" +msgstr "" + +#: usr/local/www/license.php:86 usr/local/www/license.php:86 +msgid "Diagnostics: Ping function; WLAN channel auto-select; DNS forwarder" +msgstr "" + +#: usr/local/www/license.php:90 usr/local/www/license.php:90 +msgid "Timezone and NTP client support" +msgstr "" + +#: usr/local/www/license.php:94 usr/local/www/license.php:94 +msgid "" +"Remote syslog'ing; some code bits for DHCP server on optional interfaces" +msgstr "" + +#: usr/local/www/license.php:98 usr/local/www/license.php:98 +msgid "" +"Idea/code bits for encrypted webConfigurator passwords; minimalized SNMP " +"agent" +msgstr "" + +#: usr/local/www/license.php:102 usr/local/www/license.php:102 +msgid "Advanced outbound NAT: destination selection" +msgstr "" + +#: usr/local/www/license.php:106 usr/local/www/license.php:106 +msgid "Filtering bridge patches " +msgstr "" + +#: usr/local/www/license.php:110 usr/local/www/license.php:110 +msgid "" +"Filter rule patches (ordering, block/pass, disabled); better status page;" +msgstr "" + +#: usr/local/www/license.php:112 usr/local/www/license.php:112 +msgid "webConfigurator assign network ports page " +msgstr "" + +#: usr/local/www/license.php:115 usr/local/www/license.php:115 +msgid "enhanced " +msgstr "" + +#: usr/local/www/license.php:115 usr/local/www/license.php:115 +msgid "execute command" +msgstr "" + +#: usr/local/www/license.php:116 usr/local/www/license.php:116 +msgid " page" +msgstr "" + +#: usr/local/www/license.php:119 usr/local/www/license.php:119 +msgid "DHCP client: send hostname patch" +msgstr "" + +#: usr/local/www/license.php:122 usr/local/www/license.php:122 +msgid "DHCP lease list page" +msgstr "" + +#: usr/local/www/license.php:125 usr/local/www/license.php:125 +msgid "type filter rules; dial-on-demand" +msgstr "" + +#: usr/local/www/license.php:128 usr/local/www/license.php:128 +msgid "SVG-based traffic grapher" +msgstr "" + +#: usr/local/www/license.php:131 usr/local/www/license.php:131 +msgid "per-user IP address assignments for PPTP VPN" +msgstr "" + +#: usr/local/www/license.php:134 usr/local/www/license.php:134 +msgid "NAT on optional interfaces" +msgstr "" + +#: usr/local/www/license.php:137 usr/local/www/license.php:137 +msgid "captive portal: pass-through MAC/IP addresses, RADIUS authentication" +msgstr "" + +#: usr/local/www/license.php:137 usr/local/www/license.php:137 +msgid "accounting;" +msgstr "" + +#: usr/local/www/license.php:138 usr/local/www/license.php:138 +msgid "HTTP server concurrency limit" +msgstr "" + +#: usr/local/www/license.php:141 usr/local/www/license.php:141 +msgid "traffic shaper TOS matching; magic shaper; DHCP deny unknown clients;" +msgstr "" + +#: usr/local/www/license.php:142 usr/local/www/license.php:142 +msgid "IPsec user FQDNs; DHCP relay" +msgstr "" + +#: usr/local/www/license.php:145 usr/local/www/license.php:145 +msgid "IDE hard disk standby" +msgstr "" + +#: usr/local/www/license.php:148 usr/local/www/license.php:148 +msgid "CPU/memory usage display" +msgstr "" + +#: usr/local/www/license.php:151 usr/local/www/license.php:151 +msgid "OpenVPN support" +msgstr "" + +#: usr/local/www/license.php:153 usr/local/www/license.php:153 +msgid "is based upon/includes various free software packages, listed below." +msgstr "" + +#: usr/local/www/license.php:155 usr/local/www/license.php:155 +#, php-format +msgid "" +"The author of %s would like to thank the authors of these software packages " +"for their efforts" +msgstr "" + +#: usr/local/www/license.php:158 usr/local/www/license.php:161 +#: usr/local/www/license.php:164 usr/local/www/license.php:168 +#: usr/local/www/license.php:174 usr/local/www/license.php:178 +#: usr/local/www/license.php:181 usr/local/www/license.php:184 +#: usr/local/www/license.php:187 usr/local/www/license.php:191 +#: usr/local/www/license.php:192 usr/local/www/license.php:194 +#: usr/local/www/license.php:200 usr/local/www/license.php:201 +#: usr/local/www/license.php:204 usr/local/www/license.php:211 +#: usr/local/www/license.php:169 usr/local/www/license.php:158 +#: usr/local/www/license.php:161 usr/local/www/license.php:164 +#: usr/local/www/license.php:168 usr/local/www/license.php:169 +#: usr/local/www/license.php:174 usr/local/www/license.php:178 +#: usr/local/www/license.php:181 usr/local/www/license.php:184 +#: usr/local/www/license.php:187 usr/local/www/license.php:191 +#: usr/local/www/license.php:192 usr/local/www/license.php:194 +#: usr/local/www/license.php:200 usr/local/www/license.php:201 +#: usr/local/www/license.php:204 usr/local/www/license.php:211 +msgid "Copyright" +msgstr "" + +#: usr/local/www/license.php:158 +msgid " 1994-2003 FreeBSD, Inc. All rights reserved" +msgstr "" + +#: usr/local/www/license.php:160 usr/local/www/license.php:160 +msgid "This product includes PHP, freely available from" +msgstr "" + +#: usr/local/www/license.php:161 +msgid "1999 - 2003 The PHP Group. All rights reserved" +msgstr "" + +#: usr/local/www/license.php:163 usr/local/www/license.php:163 +msgid "LightTPD" +msgstr "" + +#: usr/local/www/license.php:164 +msgid " 2004 by Jan Kneschke " +msgstr "" + +#: usr/local/www/license.php:165 usr/local/www/license.php:175 +#: usr/local/www/license.php:165 usr/local/www/license.php:175 +msgid "All rights reserved." +msgstr "" + +#: usr/local/www/license.php:167 usr/local/www/license.php:167 +msgid "ISC DHCP server " +msgstr "" + +#: usr/local/www/license.php:168 +msgid "1996-2003 Internet Software Consortium. All rights reserved." +msgstr "" + +#: usr/local/www/license.php:173 usr/local/www/license.php:173 +msgid "MPD - Multi-link PPP daemon for FreeBSD" +msgstr "" + +#: usr/local/www/license.php:177 usr/local/www/license.php:177 +msgid "Circular log support for FreeBSD syslogd " +msgstr "" + +#: usr/local/www/license.php:180 usr/local/www/license.php:180 +msgid "Dnsmasq - a DNS forwarder for NAT firewalls" +msgstr "" + +#: usr/local/www/license.php:183 usr/local/www/license.php:183 +msgid "Racoon" +msgstr "" + +#: usr/local/www/license.php:184 usr/local/www/license.php:184 +msgid "1995-2002 WIDE Project. All rights reserved." +msgstr "" + +#: usr/local/www/license.php:186 usr/local/www/license.php:186 +msgid "msntp" +msgstr "" + +#: usr/local/www/license.php:187 usr/local/www/license.php:187 +msgid "" +" 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. All rights " +"reserved." +msgstr "" + +#: usr/local/www/license.php:190 usr/local/www/license.php:190 +msgid "UCD-SNMP" +msgstr "" + +#: usr/local/www/license.php:191 usr/local/www/license.php:191 +msgid "1989, 1991, 1992 by Carnegie Mellon University." +msgstr "" + +#: usr/local/www/license.php:192 usr/local/www/license.php:192 +msgid "" +"1996, 1998-2000 The Regents of the University of California. All rights " +"reserved" +msgstr "" + +#: usr/local/www/license.php:194 usr/local/www/license.php:194 +msgid "2001-2002, Network Associates Technology, Inc. All rights reserved." +msgstr "" + +#: usr/local/www/license.php:196 usr/local/www/license.php:196 +msgid "Portions of this code are copyright" +msgstr "" + +#: usr/local/www/license.php:196 usr/local/www/license.php:196 +msgid "2001-2002, Cambridge Broadband Ltd. All rights reserved." +msgstr "" + +#: usr/local/www/license.php:199 usr/local/www/license.php:199 +msgid "choparp" +msgstr "" + +#: usr/local/www/license.php:203 usr/local/www/license.php:203 +msgid "BPALogin" +msgstr "" + +#: usr/local/www/license.php:203 usr/local/www/license.php:203 +msgid "lightweight portable BIDS2 login client" +msgstr "" + +#: usr/local/www/license.php:204 usr/local/www/license.php:204 +msgid " 2001-3 Shane Hyde, and others." +msgstr "" + +#: usr/local/www/license.php:206 usr/local/www/license.php:206 +msgid "php-radius" +msgstr "" + +#: usr/local/www/license.php:207 usr/local/www/license.php:207 +msgid "Copyright 2000, 2001, 2002 by Edwin Groothuis. All rights reserved." +msgstr "" + +#: usr/local/www/license.php:208 usr/local/www/license.php:208 +msgid "This product includes software developed by Edwin Groothuis." +msgstr "" + +#: usr/local/www/license.php:210 usr/local/www/license.php:210 +msgid "wol" +msgstr "" + +#: usr/local/www/license.php:214 usr/local/www/license.php:214 +msgid "Copyright (C) 2002-2005 OpenVPN Solutions LLC " +msgstr "" + +#: usr/local/www/load_balancer_pool.php:72 +#: usr/local/www/load_balancer_relay_protocol.php:71 +#: usr/local/www/load_balancer_relay_protocol.php:71 +#: usr/local/www/load_balancer_pool.php:72 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"virtual server." +msgstr "" + +#: usr/local/www/load_balancer_pool.php:111 +#: usr/local/www/status_lb_pool.php:113 +#: usr/local/www/load_balancer_pool.php:109 +#: usr/local/www/status_lb_pool.php:113 +#: usr/local/www/load_balancer_pool.php:109 +#, php-format +msgid "" +"The load balancer configuration has been changed%sYou must apply the changes " +"in order for them to take effect." +msgstr "" + +#: usr/local/www/load_balancer_pool.php:133 +#: usr/local/www/status_lb_pool.php:132 usr/local/www/status_lb_vs.php:79 +#: usr/local/www/system_authservers.php:424 +#: usr/local/www/system_groupmanager.php:243 +#: usr/local/www/system_groupmanager_addprivs.php:171 +#: usr/local/www/system_usermanager.php:443 +#: usr/local/www/system_usermanager_addprivs.php:170 +#: usr/local/www/system_usermanager_settings.php:116 +#: usr/local/www/system_usermanager.php:441 +#: usr/local/www/system_groupmanager_addprivs.php:169 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/load_balancer_pool.php:132 +#: usr/local/www/system_authservers.php:429 +#: usr/local/www/system_authservers.php:436 +#: usr/local/www/system_usermanager_settings.php:118 +#: usr/local/www/system_groupmanager.php:243 +#: usr/local/www/system_usermanager_addprivs.php:170 +#: usr/local/www/status_lb_pool.php:132 +#: usr/local/www/load_balancer_pool.php:132 +#: usr/local/www/system_authservers.php:436 +#: usr/local/www/system_groupmanager_addprivs.php:169 +#: usr/local/www/system_usermanager_settings.php:118 +#: usr/local/www/system_usermanager.php:441 usr/local/www/status_lb_vs.php:79 +msgid "Servers" +msgstr "" + +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:223 +#: usr/local/www/status_gateways.php:74 usr/local/www/status_lb_pool.php:133 +#: usr/local/www/load_balancer_pool_edit.php:240 +#: usr/local/www/load_balancer_pool.php:136 +#: usr/local/www/status_gateways.php:75 +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/status_lb_pool.php:133 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/status_gateways.php:75 +msgid "Monitor" +msgstr "" + +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/load_balancer_pool.php:150 +#: usr/local/www/load_balancer_pool.php:148 +#: usr/local/www/load_balancer_pool.php:148 +#, php-format +msgid "" +"The Load Balancer in %s 2.0 is for server load balancing, not Multi-WAN. For " +"load balancing or failover for multiple WANs, use " +msgstr "" + +#: usr/local/www/load_balancer_pool.php:150 +#: usr/local/www/status_gateway_groups.php:48 +#: usr/local/www/status_gateway_groups.php:52 +#: usr/local/www/status_gateways.php:63 +#: usr/local/www/system_gateway_groups.php:52 +#: usr/local/www/system_gateway_groups.php:88 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/load_balancer_pool.php:151 +#: usr/local/www/system_gateway_groups.php:89 +#: usr/local/www/status_gateways.php:64 +#: usr/local/www/status_gateway_groups.php:66 +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/system_gateway_groups.php:53 +#: usr/local/www/system_gateway_groups.php:98 +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/status_gateway_groups.php:48 +#: usr/local/www/status_gateway_groups.php:52 +#: usr/local/www/status_gateway_groups.php:66 +#: usr/local/www/status_gateways.php:64 +#: usr/local/www/system_gateway_groups.php:53 +#: usr/local/www/system_gateway_groups.php:98 +msgid "Gateway Groups" +msgstr "" + +#: usr/local/www/pkg.php:358 usr/local/www/pkg.php:456 +#: usr/local/www/pkg.php:456 +msgid "Do you really want to delete this item?" +msgstr "" + +#: usr/local/www/status_wireless.php:83 usr/local/www/status_wireless.php:84 +#: usr/local/www/status_wireless.php:84 +msgid "" +"Rescan has been initiated in the background. Refresh this page in 10 seconds " +"to see the results." +msgstr "" + +#: usr/local/www/status_wireless.php:97 usr/local/www/status_wireless.php:93 +#: usr/local/www/status_wireless.php:94 usr/local/www/status_wireless.php:94 +msgid "Nearby access points or ad-hoc peers" +msgstr "" + +#: usr/local/www/status_wireless.php:143 usr/local/www/status_wireless.php:140 +#: usr/local/www/status_wireless.php:141 usr/local/www/status_wireless.php:141 +msgid "Associated or ad-hoc peers" +msgstr "" + +#: usr/local/www/system.php:118 usr/local/www/system.php:119 +#: usr/local/www/system.php:112 usr/local/www/system.php:112 +msgid "The hostname may only contain the characters a-z, 0-9 and '-'." +msgstr "" + +#: usr/local/www/system.php:121 usr/local/www/system.php:122 +#: usr/local/www/system.php:115 usr/local/www/system.php:115 +msgid "The domain may only contain the characters a-z, 0-9, '-' and '.'." +msgstr "" + +#: usr/local/www/system.php:131 +msgid "'." +msgstr "" + +#: usr/local/www/system.php:137 usr/local/www/system.php:143 +#: usr/local/www/system.php:136 usr/local/www/system.php:136 +msgid "A valid TCP/IP port must be specified for the webConfigurator port." +msgstr "" + +#: usr/local/www/system.php:148 usr/local/www/system.php:154 +#: usr/local/www/system.php:147 usr/local/www/system.php:147 +#, php-format +msgid "" +"You can not assign a gateway to DNS '%s' server which is on a directly " +"connected network." +msgstr "" + +#: usr/local/www/system.php:157 usr/local/www/system.php:163 +#: usr/local/www/system.php:156 usr/local/www/system.php:156 +msgid "" +"The time update interval must be either 0 (disabled) or between 6 and 1440." +msgstr "" + +#: usr/local/www/system.php:161 usr/local/www/system.php:167 +#: usr/local/www/system.php:160 usr/local/www/system.php:160 +msgid "" +"A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'." +msgstr "" + +#: usr/local/www/system.php:231 usr/local/www/fbegin.inc:85 +#: usr/local/www/fbegin.inc:101 usr/local/www/system.php:242 +#: usr/local/www/fbegin.inc:110 usr/local/www/system.php:235 +#: usr/local/www/fbegin.inc:102 usr/local/www/system.php:235 +#: usr/local/www/fbegin.inc:102 +msgid "General Setup" +msgstr "" + +#: usr/local/www/system.php:258 usr/local/www/system.php:269 +#: usr/local/www/system.php:262 usr/local/www/system.php:262 +msgid "Name of the firewall host, without domain part" +msgstr "" + +#: usr/local/www/system.php:269 usr/local/www/system.php:280 +#: usr/local/www/system.php:273 usr/local/www/system.php:273 +msgid "" +"Do not use 'local' as a domain name. It will cause local hosts running mDNS " +"(avahi, bonjour, etc.) to be unable to resolve local hosts not running mDNS." +msgstr "" + +#: usr/local/www/system.php:271 usr/local/www/system.php:282 +#: usr/local/www/system.php:275 usr/local/www/system.php:275 +msgid "mycorp.com, home, office, private, etc." +msgstr "" + +#: usr/local/www/system.php:276 usr/local/www/services_dhcp.php:647 +#: usr/local/www/vpn_pppoe_edit.php:451 usr/local/www/services_dhcpv6.php:590 +#: usr/local/www/services_dhcp.php:660 usr/local/www/system.php:287 +#: usr/local/www/services_dhcpv6.php:667 usr/local/www/vpn_pppoe_edit.php:452 +#: usr/local/www/services_router_advertisements.php:372 +#: usr/local/www/services_dhcp.php:836 usr/local/www/system.php:280 +#: usr/local/www/services_dhcpv6.php:598 +#: usr/local/www/services_dhcp_edit.php:402 +#: usr/local/www/vpn_pppoe_edit.php:455 usr/local/www/services_dhcp.php:850 +#: usr/local/www/services_dhcpv6.php:615 +#: usr/local/www/services_router_advertisements.php:367 +#: usr/local/www/services_dhcp.php:870 +#: usr/local/www/services_router_advertisements.php:367 +#: usr/local/www/system.php:280 usr/local/www/services_dhcp_edit.php:402 +#: usr/local/www/vpn_pppoe_edit.php:455 usr/local/www/services_dhcp.php:870 +#: usr/local/www/services_dhcpv6.php:615 +msgid "DNS servers" +msgstr "" + +#: usr/local/www/system.php:281 usr/local/www/system.php:292 +#: usr/local/www/system.php:285 usr/local/www/system.php:285 +msgid "DNS Server" +msgstr "" + +#: usr/local/www/system.php:283 usr/local/www/system.php:294 +#: usr/local/www/system.php:287 usr/local/www/system.php:287 +msgid "Use gateway" +msgstr "" + +#: usr/local/www/system.php:331 usr/local/www/system.php:342 +#: usr/local/www/system.php:335 usr/local/www/system.php:334 +#: usr/local/www/system.php:334 +msgid "" +"Enter IP addresses to by used by the system for DNS resolution.These are " +"also used for the DHCP service, DNS forwarder and for PPTP VPN clients." +msgstr "" + +#: usr/local/www/system.php:336 usr/local/www/system.php:347 +#: usr/local/www/system.php:340 usr/local/www/system.php:339 +#: usr/local/www/system.php:339 +msgid "" +"In addition, optionally select the gateway for each DNS server. When using " +"multiple WAN connections there should be at least one unique DNS server per " +"gateway." +msgstr "" + +#: usr/local/www/system.php:343 usr/local/www/system.php:354 +#: usr/local/www/system.php:347 usr/local/www/system.php:346 +#: usr/local/www/system.php:346 +msgid "Allow DNS server list to be overridden by DHCP/PPP on WAN" +msgstr "" + +#: usr/local/www/system.php:346 usr/local/www/system.php:357 +#: usr/local/www/system.php:350 usr/local/www/system.php:349 +#: usr/local/www/system.php:349 +#, php-format +msgid "" +"If this option is set, %s will use DNS servers assigned by a DHCP/PPP server " +"on WAN for its own purposes (including the DNS forwarder). However, they " +"will not be assigned to DHCP and PPTP VPN clients." +msgstr "" + +#: usr/local/www/system.php:355 usr/local/www/system.php:366 +#: usr/local/www/system.php:359 usr/local/www/system.php:358 +#: usr/local/www/system.php:358 +msgid "Do not use the DNS Forwarder as a DNS server for the firewall" +msgstr "" + +#: usr/local/www/system.php:358 usr/local/www/system.php:369 +#: usr/local/www/system.php:362 usr/local/www/system.php:361 +#: usr/local/www/system.php:361 +msgid "" +"By default localhost (127.0.0.1) will be used as the first DNS server where " +"the DNS forwarder is enabled, so system can use the DNS forwarder to perform " +"lookups. Checking this box omits localhost from the list of DNS servers." +msgstr "" + +#: usr/local/www/system.php:365 usr/local/www/system.php:376 +#: usr/local/www/system.php:369 usr/local/www/system.php:367 +#: usr/local/www/system.php:367 +msgid "Time zone" +msgstr "" + +#: usr/local/www/system.php:377 usr/local/www/system.php:388 +#: usr/local/www/system.php:381 usr/local/www/system.php:379 +#: usr/local/www/system.php:379 +msgid "Select the location closest to you" +msgstr "" + +#: usr/local/www/system.php:395 usr/local/www/system.php:406 +#: usr/local/www/system.php:399 usr/local/www/system.php:397 +#: usr/local/www/system.php:397 +msgid "NTP time server" +msgstr "" + +#: usr/local/www/system.php:400 usr/local/www/system.php:411 +#: usr/local/www/system.php:404 usr/local/www/system.php:402 +#: usr/local/www/system.php:402 +msgid "" +"Use a space to separate multiple hosts (only one required). Remember to set " +"up at least one DNS server if you enter a host name here!" +msgstr "" + +#: usr/local/www/system.php:411 usr/local/www/system.php:440 +#: usr/local/www/system.php:433 usr/local/www/system.php:431 +#: usr/local/www/system.php:431 +msgid "Theme" +msgstr "" + +#: usr/local/www/system.php:435 usr/local/www/system.php:464 +#: usr/local/www/system.php:457 usr/local/www/system.php:455 +#: usr/local/www/system.php:455 +msgid "This will change the look and feel of" +msgstr "" + +#: usr/local/www/interfaces_vlan.php:65 usr/local/www/interfaces_vlan.php:69 +#: usr/local/www/interfaces_vlan.php:69 +msgid "" +"This VLAN cannot be deleted because it is still being used as an interface." +msgstr "" + +#: usr/local/www/interfaces_vlan.php:78 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_vlan.php:84 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_vlan.php:84 +msgid "VLAN" +msgstr "" + +#: usr/local/www/interfaces_vlan.php:109 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan.php:110 usr/local/www/interfaces_vlan.php:116 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan.php:116 +msgid "VLAN tag" +msgstr "" + +#: usr/local/www/interfaces_vlan.php:125 usr/local/www/interfaces_vlan.php:126 +#: usr/local/www/interfaces_vlan.php:132 usr/local/www/interfaces_vlan.php:132 +msgid "Do you really want to delete this VLAN?" +msgstr "" + +#: usr/local/www/interfaces_vlan.php:136 usr/local/www/interfaces_vlan.php:137 +#: usr/local/www/interfaces_vlan.php:143 usr/local/www/interfaces_vlan.php:143 +#, php-format +msgid "" +"Not all drivers/NICs support 802.1Q VLAN tagging properly. On cards that do " +"not explicitly support it, VLAN tagging will still work, but the reduced MTU " +"may cause problems. See the %s handbook for information on supported cards." +msgstr "" + +#: usr/local/www/interfaces_vlan_edit.php:80 +#: usr/local/www/interfaces_vlan_edit.php:80 +msgid "The VLAN tag must be an integer between 1 and 4094." +msgstr "" + +#: usr/local/www/interfaces_vlan_edit.php:88 +#: usr/local/www/interfaces_vlan_edit.php:91 +#: usr/local/www/interfaces_vlan_edit.php:91 +#, php-format +msgid "A VLAN with the tag %s is already defined on this interface." +msgstr "" + +#: usr/local/www/interfaces_vlan_edit.php:95 +#: usr/local/www/interfaces_vlan_edit.php:98 +#: usr/local/www/interfaces_vlan_edit.php:98 +msgid "A QinQ VLAN exists with this tag please remove it to use this tag with." +msgstr "" + +#: usr/local/www/interfaces_vlan_edit.php:150 +#: usr/local/www/interfaces_vlan_edit.php:151 +#: usr/local/www/interfaces_vlan_edit.php:154 +#: usr/local/www/interfaces_vlan_edit.php:154 +msgid "VLAN configuration" +msgstr "" + +#: usr/local/www/interfaces_vlan_edit.php:169 +#: usr/local/www/interfaces_vlan_edit.php:170 +#: usr/local/www/interfaces_vlan_edit.php:173 +#: usr/local/www/interfaces_vlan_edit.php:173 +msgid "Only VLAN capable interfaces will be shown." +msgstr "" + +#: usr/local/www/interfaces_vlan_edit.php:172 +#: usr/local/www/interfaces_vlan_edit.php:173 +#: usr/local/www/interfaces_vlan_edit.php:176 +#: usr/local/www/interfaces_vlan_edit.php:176 +msgid "VLAN tag " +msgstr "" + +#: usr/local/www/interfaces_vlan_edit.php:176 +#: usr/local/www/interfaces_vlan_edit.php:177 +#: usr/local/www/interfaces_vlan_edit.php:180 +#: usr/local/www/interfaces_vlan_edit.php:180 +msgid "802.1Q VLAN tag (between 1 and 4094) " +msgstr "" + +#: usr/local/www/system_firmware.php:82 usr/local/www/system_firmware.php:89 +#: usr/local/www/system_firmware.php:88 usr/local/www/system_firmware.php:88 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini" +msgstr "" + +#: usr/local/www/system_firmware.php:84 usr/local/www/system_firmware.php:91 +#: usr/local/www/system_firmware.php:90 usr/local/www/system_firmware.php:90 +msgid "" +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " +"the HTML form" +msgstr "" + +#: usr/local/www/system_firmware.php:86 usr/local/www/system_firmware.php:93 +#: usr/local/www/system_firmware.php:92 usr/local/www/system_firmware.php:92 +msgid "The uploaded file was only partially uploaded" +msgstr "" + +#: usr/local/www/system_firmware.php:88 usr/local/www/system_firmware.php:95 +#: usr/local/www/system_firmware.php:94 usr/local/www/system_firmware.php:94 +msgid "No file was uploaded" +msgstr "" + +#: usr/local/www/system_firmware.php:90 usr/local/www/system_firmware.php:97 +#: usr/local/www/system_firmware.php:96 usr/local/www/system_firmware.php:96 +msgid "Missing a temporary folder" +msgstr "" + +#: usr/local/www/system_firmware.php:92 usr/local/www/system_firmware.php:99 +#: usr/local/www/system_firmware.php:98 usr/local/www/system_firmware.php:98 +msgid "Failed to write file to disk" +msgstr "" + +#: usr/local/www/system_firmware.php:94 usr/local/www/system_firmware.php:101 +#: usr/local/www/system_firmware.php:100 usr/local/www/system_firmware.php:100 +msgid "File upload stopped by extension" +msgstr "" + +#: usr/local/www/system_firmware.php:96 usr/local/www/system_firmware.php:103 +#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:102 +msgid "Unknown upload error" +msgstr "" + +#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_settings.php:74 usr/local/www/fbegin.inc:84 +#: usr/local/www/fbegin.inc:100 usr/local/www/fbegin.inc:109 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/system_firmware.php:108 usr/local/www/fbegin.inc:101 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:210 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/system_firmware_auto.php:61 usr/local/www/fbegin.inc:101 +msgid "Firmware" +msgstr "" + +#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:238 +#: usr/local/www/system_firmware_auto.php:79 +#: usr/local/www/system_firmware_check.php:66 +#: usr/local/www/system_firmware_settings.php:110 +#: usr/local/www/system_firmware_restorefullbackup.php:125 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:245 +#: usr/local/www/system_firmware_settings.php:115 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:248 +#: usr/local/www/system_firmware_check.php:64 +#: usr/local/www/system_firmware_settings.php:117 +#: usr/local/www/system_firmware_auto.php:80 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:248 +#: usr/local/www/system_firmware_check.php:64 +#: usr/local/www/system_firmware_settings.php:117 +#: usr/local/www/system_firmware_auto.php:80 +#: usr/local/www/system_firmware_restorefullbackup.php:125 +msgid "Manual Update" +msgstr "" + +#: usr/local/www/system_firmware.php:107 usr/local/www/system_firmware.php:114 +#: usr/local/www/system_firmware.php:113 usr/local/www/system_firmware.php:113 +msgid "" +"An upgrade is currently in progress.

    The firewall will reboot when the " +"operation is complete." +msgstr "" + +#: usr/local/www/system_firmware.php:135 usr/local/www/system_firmware.php:142 +#: usr/local/www/system_firmware.php:137 usr/local/www/system_firmware.php:137 +msgid "Upgrade" +msgstr "" + +#: usr/local/www/system_firmware.php:154 usr/local/www/system_firmware.php:161 +#: usr/local/www/system_firmware.php:156 usr/local/www/system_firmware.php:156 +msgid "The uploaded image file is not for this platform." +msgstr "" + +#: usr/local/www/system_firmware.php:157 usr/local/www/system_firmware.php:164 +#: usr/local/www/system_firmware.php:159 usr/local/www/system_firmware.php:159 +msgid "Image upload failed (out of memory?)" +msgstr "" + +#: usr/local/www/system_firmware.php:168 +#: usr/local/www/system_firmware_auto.php:201 +#: usr/local/www/system_firmware.php:175 usr/local/www/system_firmware.php:170 +#: usr/local/www/system_firmware_auto.php:203 +#: usr/local/www/system_firmware_auto.php:199 +#: usr/local/www/system_firmware.php:170 +#: usr/local/www/system_firmware_auto.php:199 +msgid "The digital signature on this image is invalid." +msgstr "" + +#: usr/local/www/system_firmware.php:170 +#: usr/local/www/system_firmware_auto.php:204 +#: usr/local/www/system_firmware.php:177 usr/local/www/system_firmware.php:172 +#: usr/local/www/system_firmware_auto.php:206 +#: usr/local/www/system_firmware_auto.php:202 +#: usr/local/www/system_firmware.php:172 +#: usr/local/www/system_firmware_auto.php:202 +msgid "This image is not digitally signed." +msgstr "" + +#: usr/local/www/system_firmware.php:172 +#: usr/local/www/system_firmware_auto.php:208 +#: usr/local/www/system_firmware.php:179 usr/local/www/system_firmware.php:174 +#: usr/local/www/system_firmware_auto.php:210 +#: usr/local/www/system_firmware_auto.php:206 +#: usr/local/www/system_firmware.php:174 +#: usr/local/www/system_firmware_auto.php:206 +msgid "There has been an error verifying the signature on this image." +msgstr "" + +#: usr/local/www/system_firmware.php:175 +#: usr/local/www/system_firmware_auto.php:223 +#: usr/local/www/system_firmware.php:182 usr/local/www/system_firmware.php:177 +#: usr/local/www/system_firmware_auto.php:225 +#: usr/local/www/system_firmware_auto.php:221 +#: usr/local/www/system_firmware.php:177 +#: usr/local/www/system_firmware_auto.php:221 +msgid "The image file is corrupt." +msgstr "" + +#: usr/local/www/system_firmware.php:188 usr/local/www/system_firmware.php:195 +#: usr/local/www/system_firmware.php:190 usr/local/www/system_firmware.php:190 +msgid "" +"The firmware is now being updated. The firewall will reboot automatically." +msgstr "" + +#: usr/local/www/system_firmware.php:196 usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware.php:204 usr/local/www/system_firmware.php:204 +#, php-format +msgid "Firmware image missing or other error, please try again %s." +msgstr "" + +#: usr/local/www/system_firmware.php:220 usr/local/www/system_firmware.php:227 +#: usr/local/www/system_firmware.php:230 usr/local/www/system_firmware.php:230 +msgid "" +"This means that the image you uploaded is not an official/supported image " +"and may lead to unexpected behavior or security compromises. Only install " +"images that come from sources that you trust, and make sure that the image " +"has not been tampered with." +msgstr "" + +#: usr/local/www/system_firmware.php:224 usr/local/www/system_firmware.php:231 +#: usr/local/www/system_firmware.php:234 usr/local/www/system_firmware.php:234 +msgid "Do you want to install this image anyway (on your own risk)?" +msgstr "" + +#: usr/local/www/system_firmware.php:239 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/system_firmware_auto.php:80 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_check.php:67 +#: usr/local/www/system_firmware_settings.php:111 +#: usr/local/www/system_firmware_restorefullbackup.php:126 +#: usr/local/www/system_firmware.php:246 +#: usr/local/www/system_firmware_settings.php:116 +#: usr/local/www/system_firmware.php:249 +#: usr/local/www/system_firmware_check.php:65 +#: usr/local/www/system_firmware_settings.php:118 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/system_firmware_auto.php:81 +#: usr/local/www/system_firmware.php:249 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_check.php:65 +#: usr/local/www/system_firmware_settings.php:118 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/system_firmware_auto.php:81 +#: usr/local/www/system_firmware_restorefullbackup.php:126 +msgid "Auto Update" +msgstr "" + +#: usr/local/www/system_firmware.php:240 +#: usr/local/www/system_firmware_auto.php:81 +#: usr/local/www/system_firmware_check.php:68 +#: usr/local/www/system_firmware_settings.php:112 +#: usr/local/www/system_firmware_restorefullbackup.php:127 +#: usr/local/www/system_firmware.php:247 +#: usr/local/www/system_firmware_settings.php:117 +#: usr/local/www/system_firmware.php:250 +#: usr/local/www/system_firmware_check.php:66 +#: usr/local/www/system_firmware_settings.php:119 +#: usr/local/www/system_firmware_auto.php:82 +#: usr/local/www/system_firmware.php:250 +#: usr/local/www/system_firmware_check.php:66 +#: usr/local/www/system_firmware_settings.php:119 +#: usr/local/www/system_firmware_auto.php:82 +#: usr/local/www/system_firmware_restorefullbackup.php:127 +msgid "Updater Settings" +msgstr "" + +#: usr/local/www/system_firmware.php:242 +#: usr/local/www/system_firmware_auto.php:83 +#: usr/local/www/system_firmware_check.php:70 +#: usr/local/www/system_firmware_settings.php:114 +#: usr/local/www/system_firmware_restorefullbackup.php:129 +#: usr/local/www/system_firmware.php:249 +#: usr/local/www/system_firmware_settings.php:119 +#: usr/local/www/system_firmware.php:252 +#: usr/local/www/system_firmware_check.php:68 +#: usr/local/www/system_firmware_settings.php:121 +#: usr/local/www/system_firmware_auto.php:84 +#: usr/local/www/system_firmware.php:252 +#: usr/local/www/system_firmware_check.php:68 +#: usr/local/www/system_firmware_settings.php:121 +#: usr/local/www/system_firmware_auto.php:84 +#: usr/local/www/system_firmware_restorefullbackup.php:129 +msgid "Restore Full Backup" +msgstr "" + +#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259 +#: usr/local/www/system_firmware.php:262 usr/local/www/system_firmware.php:262 +msgid "Invoke" +msgstr "" + +#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259 +#: usr/local/www/system_firmware.php:262 usr/local/www/system_firmware.php:262 +msgid "Manual Upgrade" +msgstr "" + +#: usr/local/www/system_firmware.php:259 usr/local/www/system_firmware.php:266 +#: usr/local/www/system_firmware.php:269 usr/local/www/system_firmware.php:269 +msgid "Enable firmware upload" +msgstr "" + +#: usr/local/www/system_firmware.php:261 usr/local/www/system_firmware.php:268 +#: usr/local/www/system_firmware.php:271 usr/local/www/system_firmware.php:271 +#, php-format +msgid "Click \"Enable firmware upload\" to begin." +msgstr "" + +#: usr/local/www/system_firmware.php:264 usr/local/www/system_firmware.php:271 +#: usr/local/www/system_firmware.php:274 usr/local/www/system_firmware.php:274 +msgid "Disable firmware upload" +msgstr "" + +#: usr/local/www/system_firmware.php:282 usr/local/www/system_firmware.php:289 +#: usr/local/www/system_firmware.php:292 usr/local/www/system_firmware.php:292 +msgid "Please select kernel type" +msgstr "" + +#: usr/local/www/system_firmware.php:284 usr/local/www/system_firmware.php:55 +msgid "Multiprocessor kernel" +msgstr "" + +#: usr/local/www/system_firmware.php:285 usr/local/www/system_firmware.php:56 +msgid "Uniprocessor kernel" +msgstr "" + +#: usr/local/www/system_firmware.php:286 usr/local/www/system_firmware.php:57 +msgid "Embedded kernel" +msgstr "" + +#: usr/local/www/system_firmware.php:287 usr/local/www/system_firmware.php:58 +msgid "Developers kernel" +msgstr "" + +#: usr/local/www/system_firmware.php:298 +#: usr/local/www/system_firmware_check.php:103 +#: usr/local/www/system_firmware.php:304 usr/local/www/system_firmware.php:303 +#: usr/local/www/system_firmware_check.php:104 +#: usr/local/www/system_firmware_check.php:98 +#: usr/local/www/system_firmware.php:303 +#: usr/local/www/system_firmware_check.php:98 +msgid "Perform full backup prior to upgrade" +msgstr "" + +#: usr/local/www/system_firmware.php:300 usr/local/www/system_firmware.php:306 +#: usr/local/www/system_firmware.php:306 +msgid "Upgrade firmware" +msgstr "" + +#: usr/local/www/system_firmware.php:301 usr/local/www/system_firmware.php:307 +#: usr/local/www/system_firmware.php:307 +msgid "Click \"Upgrade firmware\" to start the upgrade process." +msgstr "" + +#: usr/local/www/system_firmware.php:303 usr/local/www/system_firmware.php:309 +#: usr/local/www/system_firmware.php:309 +msgid "You must reboot the system before you can upgrade the firmware." +msgstr "" + +#: usr/local/www/system_firmware.php:316 usr/local/www/system_firmware.php:322 +#: usr/local/www/system_firmware.php:320 usr/local/www/system_firmware.php:320 +msgid "Warning:" +msgstr "" + +#: usr/local/www/system_firmware.php:319 usr/local/www/system_firmware.php:325 +#: usr/local/www/system_firmware.php:323 usr/local/www/system_firmware.php:323 +msgid "" +"DO NOT abort the firmware upgrade once it has started. The firewall will " +"reboot automatically after storing the new firmware. The configuration will " +"be maintained." +msgstr "" + +#: usr/local/www/system_firmware_auto.php:115 +#: usr/local/www/system_firmware_auto.php:113 +#: usr/local/www/system_firmware_auto.php:113 +msgid "Beginning firmware upgrade" +msgstr "" + +#: usr/local/www/system_firmware_auto.php:133 +#: usr/local/www/system_firmware_auto.php:135 +#: usr/local/www/system_firmware_auto.php:131 +#: usr/local/www/system_firmware_auto.php:131 +msgid "Downloading current version information" +msgstr "" + +#: usr/local/www/system_firmware_auto.php:148 +#: usr/local/www/system_firmware_auto.php:157 +#: usr/local/www/system_firmware_check.php:141 +#: usr/local/www/system_firmware_check.php:143 +#: usr/local/www/system_firmware_auto.php:150 +#: usr/local/www/system_firmware_auto.php:159 +#: usr/local/www/system_firmware_check.php:135 +#: usr/local/www/system_firmware_auto.php:146 +#: usr/local/www/system_firmware_auto.php:155 +#: usr/local/www/system_firmware_check.php:135 +#: usr/local/www/system_firmware_auto.php:146 +#: usr/local/www/system_firmware_auto.php:155 +msgid "Unable to check for updates." +msgstr "" + +#: usr/local/www/system_firmware_auto.php:162 +#: usr/local/www/system_firmware_auto.php:164 +#: usr/local/www/system_firmware_auto.php:160 +#: usr/local/www/system_firmware_auto.php:160 +msgid "Downloading updates" +msgstr "" + +#: usr/local/www/system_firmware_auto.php:172 +#: usr/local/www/system_firmware_auto.php:174 +#: usr/local/www/system_firmware_auto.php:170 +#: usr/local/www/system_firmware_auto.php:170 +msgid "download complete." +msgstr "" + +#: usr/local/www/system_firmware_auto.php:174 +#: usr/local/www/system_firmware_check.php:159 +#: usr/local/www/system_firmware_check.php:161 +#: usr/local/www/system_firmware_auto.php:176 +#: usr/local/www/system_firmware_check.php:153 +#: usr/local/www/system_firmware_auto.php:172 +#: usr/local/www/system_firmware_check.php:153 +#: usr/local/www/system_firmware_auto.php:172 +msgid "You are on the latest version." +msgstr "" + +#: usr/local/www/system_firmware_auto.php:214 +#: usr/local/www/system_firmware_auto.php:216 +#: usr/local/www/system_firmware_auto.php:212 +#: usr/local/www/system_firmware_auto.php:212 +msgid "" +"Update cannot continue. You can disable this check on the Updater Settings " +"tab." +msgstr "" + +#: usr/local/www/system_firmware_auto.php:219 +#: usr/local/www/system_firmware_auto.php:221 +#: usr/local/www/system_firmware_auto.php:217 +#: usr/local/www/system_firmware_auto.php:217 +msgid "" +"Upgrade Image does not contain a signature but the system has been " +"configured to allow unsigned images. One moment please..." +msgstr "" + +#: usr/local/www/system_firmware_auto.php:224 +#: usr/local/www/system_firmware_auto.php:226 +#: usr/local/www/system_firmware_auto.php:222 +#: usr/local/www/system_firmware_auto.php:222 +msgid "Update cannot continue" +msgstr "" + +#: usr/local/www/system_firmware_auto.php:235 +#: usr/local/www/system_firmware_auto.php:237 +#: usr/local/www/system_firmware_auto.php:233 +#: usr/local/www/system_firmware_auto.php:233 +msgid "Downloading complete but sha256 does not match." +msgstr "" + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:234 +#: usr/local/www/system_firmware_auto.php:234 +msgid "Auto upgrade aborted." +msgstr "" + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:234 +#: usr/local/www/system_firmware_auto.php:234 +msgid "Downloaded SHA256" +msgstr "" + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:234 +#: usr/local/www/system_firmware_auto.php:234 +msgid "Needed SHA256" +msgstr "" + +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:240 +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:236 +msgid "is now upgrading." +msgstr "" + +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:240 +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:236 +msgid "The firewall will reboot once the operation is completed." +msgstr "" + +#: usr/local/www/system_firmware_auto.php:256 +#: usr/local/www/system_firmware_auto.php:258 +#: usr/local/www/system_firmware_auto.php:258 +msgid "Auto Update Download Status" +msgstr "" + +#: usr/local/www/system_firmware_auto.php:258 +#: usr/local/www/system_firmware_auto.php:260 +#: usr/local/www/system_firmware_auto.php:260 +msgid "Current Version" +msgstr "" + +#: usr/local/www/system_firmware_auto.php:259 +#: usr/local/www/system_firmware_auto.php:261 +#: usr/local/www/system_firmware_auto.php:261 +msgid "Latest Version" +msgstr "" + +#: usr/local/www/system_firmware_auto.php:260 +#: usr/local/www/system_firmware_auto.php:262 +#: usr/local/www/system_firmware_auto.php:262 +msgid "File size" +msgstr "" + +#: usr/local/www/system_firmware_auto.php:261 +#: usr/local/www/system_firmware_auto.php:263 +#: usr/local/www/system_firmware_auto.php:263 +msgid "Downloaded" +msgstr "" + +#: usr/local/www/system_firmware_auto.php:262 +#: usr/local/www/system_firmware_auto.php:264 +#: usr/local/www/system_firmware_auto.php:264 +msgid "Percent" +msgstr "" + +#: usr/local/www/system_firmware_check.php:107 +#: usr/local/www/system_firmware_check.php:109 +#: usr/local/www/system_firmware_check.php:101 +#: usr/local/www/system_firmware_check.php:101 +msgid "Invoke Auto Upgrade" +msgstr "" + +#: usr/local/www/system_firmware_check.php:125 +#: usr/local/www/system_firmware_check.php:127 +#: usr/local/www/system_firmware_check.php:119 +#: usr/local/www/system_firmware_check.php:119 +msgid "Downloading new version information..." +msgstr "" + +#: usr/local/www/system_firmware_check.php:143 +#: usr/local/www/system_firmware_check.php:145 +#: usr/local/www/system_firmware_check.php:137 +#: usr/local/www/system_firmware_check.php:137 +msgid "Could not contact custom update server." +msgstr "" + +#: usr/local/www/system_firmware_check.php:145 +#: usr/local/www/system_firmware_check.php:147 +#: usr/local/www/system_firmware_check.php:139 +#: usr/local/www/system_firmware_check.php:139 +#, php-format +msgid "Could not contact %1$s update server %2$s%3$s" +msgstr "" + +#: usr/local/www/system_firmware_check.php:147 +#: usr/local/www/system_firmware_check.php:149 +#: usr/local/www/system_firmware_check.php:141 +#: usr/local/www/system_firmware_check.php:141 +msgid "Obtaining current version information..." +msgstr "" + +#: usr/local/www/system_firmware_check.php:172 +#: usr/local/www/system_firmware_check.php:174 +#: usr/local/www/system_firmware_check.php:178 +#: usr/local/www/system_firmware_check.php:178 +msgid "A new version is now available" +msgstr "" + +#: usr/local/www/system_firmware_check.php:173 +#: usr/local/www/system_firmware_check.php:175 +#: usr/local/www/system_firmware_check.php:179 +#: usr/local/www/system_firmware_check.php:179 +msgid "Current version" +msgstr "" + +#: usr/local/www/system_firmware_check.php:175 +#: usr/local/www/system_firmware_check.php:177 +#: usr/local/www/system_firmware_check.php:181 +#: usr/local/www/system_firmware_check.php:181 +msgid "NanoBSD Size" +msgstr "" + +#: usr/local/www/system_firmware_check.php:177 +#: usr/local/www/system_firmware_check.php:179 +#: usr/local/www/system_firmware_check.php:183 +#: usr/local/www/system_firmware_check.php:183 +msgid "Built On" +msgstr "" + +#: usr/local/www/system_firmware_check.php:178 +#: usr/local/www/system_firmware_check.php:180 +#: usr/local/www/system_firmware_check.php:184 +#: usr/local/www/system_firmware_check.php:184 +msgid "New version" +msgstr "" + +#: usr/local/www/system_firmware_check.php:179 +#: usr/local/www/system_firmware_check.php:181 +#: usr/local/www/system_firmware_check.php:185 +#: usr/local/www/system_firmware_check.php:185 +msgid "Update source" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:122 +#: usr/local/www/system_firmware_settings.php:127 +#: usr/local/www/system_firmware_settings.php:129 +#: usr/local/www/system_firmware_settings.php:129 +msgid "Firmware Branch" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:126 +#: usr/local/www/system_firmware_settings.php:131 +#: usr/local/www/system_firmware_settings.php:133 +#: usr/local/www/system_firmware_settings.php:133 +msgid "Default Auto Update URLs" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:142 +#: usr/local/www/system_firmware_settings.php:147 +#: usr/local/www/system_firmware_settings.php:156 +#: usr/local/www/system_firmware_settings.php:158 +#: usr/local/www/system_firmware_settings.php:158 +msgid "Firmware Auto Update URL" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:144 +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:158 +#: usr/local/www/system_firmware_settings.php:160 +#: usr/local/www/system_firmware_settings.php:160 +msgid "Use a URL server for firmware upgrades other than" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:146 +#: usr/local/www/pkg_mgr_settings.php:109 +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_firmware_settings.php:160 +#: usr/local/www/system_firmware_settings.php:162 +#: usr/local/www/pkg_mgr_settings.php:108 +#: usr/local/www/system_firmware_settings.php:162 +#: usr/local/www/pkg_mgr_settings.php:108 +msgid "Base URL:" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_firmware_settings.php:165 +msgid "This is where" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_firmware_settings.php:165 +msgid "will check for newer firmware versions when the" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_firmware_settings.php:165 +msgid "System: Firmware: Auto Update" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/pkg_mgr_settings.php:111 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/pkg_mgr_settings.php:111 +msgid "page is viewed." +msgstr "" + +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_firmware_settings.php:156 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_firmware_settings.php:167 +#: usr/local/www/system_firmware_settings.php:167 +#, php-format +msgid "" +"When a custom URL is enabled, the system will not verify the digital " +"signature from %s." +msgstr "" + +#: usr/local/www/system_firmware_settings.php:159 +#: usr/local/www/system_firmware_settings.php:164 +#: usr/local/www/system_firmware_settings.php:173 +#: usr/local/www/system_firmware_settings.php:175 +#: usr/local/www/system_firmware_settings.php:175 +msgid "Updates" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:162 +#: usr/local/www/system_firmware_settings.php:167 +#: usr/local/www/system_firmware_settings.php:176 +#: usr/local/www/system_firmware_settings.php:178 +#: usr/local/www/system_firmware_settings.php:178 +msgid "Unsigned images" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:166 +#: usr/local/www/system_firmware_settings.php:171 +#: usr/local/www/system_firmware_settings.php:180 +#: usr/local/www/system_firmware_settings.php:182 +#: usr/local/www/system_firmware_settings.php:182 +msgid "" +"Allow auto-update firmware images with a missing or invalid digital " +"signature to be used." +msgstr "" + +#: usr/local/www/system_firmware_settings.php:174 +#: usr/local/www/system_firmware_settings.php:187 +#: usr/local/www/system_firmware_settings.php:196 +#: usr/local/www/system_firmware_settings.php:198 +#: usr/local/www/system_firmware_settings.php:198 +msgid "Gitsync" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:177 +#: usr/local/www/system_firmware_settings.php:190 +#: usr/local/www/system_firmware_settings.php:199 +#: usr/local/www/system_firmware_settings.php:201 +#: usr/local/www/system_firmware_settings.php:201 +msgid "Auto sync on update" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:181 +#: usr/local/www/system_firmware_settings.php:194 +#: usr/local/www/system_firmware_settings.php:203 +#: usr/local/www/system_firmware_settings.php:205 +#: usr/local/www/system_firmware_settings.php:205 +msgid "" +"After updating, sync with the following repository/branch before reboot." +msgstr "" + +#: usr/local/www/system_firmware_settings.php:193 +#: usr/local/www/system_firmware_settings.php:206 +#: usr/local/www/system_firmware_settings.php:215 +#: usr/local/www/system_firmware_settings.php:217 +#: usr/local/www/system_firmware_settings.php:217 +msgid "Repository URL" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:198 +#: usr/local/www/system_firmware_settings.php:211 +#: usr/local/www/system_firmware_settings.php:220 +#: usr/local/www/system_firmware_settings.php:222 +#: usr/local/www/system_firmware_settings.php:222 +#, php-format +msgid "The most recently used repository was %s" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:200 +#: usr/local/www/system_firmware_settings.php:213 +#: usr/local/www/system_firmware_settings.php:222 +#: usr/local/www/system_firmware_settings.php:224 +#: usr/local/www/system_firmware_settings.php:224 +msgid "This will be used if the field is left blank." +msgstr "" + +#: usr/local/www/system_firmware_settings.php:219 +#: usr/local/www/system_firmware_settings.php:232 +#: usr/local/www/system_firmware_settings.php:241 +#: usr/local/www/system_firmware_settings.php:243 +#: usr/local/www/system_firmware_settings.php:243 +msgid "Branch name" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:224 +#: usr/local/www/system_firmware_settings.php:237 +#: usr/local/www/system_firmware_settings.php:246 +#: usr/local/www/system_firmware_settings.php:248 +#: usr/local/www/system_firmware_settings.php:248 +#, php-format +msgid "The most recently used branch was %s" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:227 +#: usr/local/www/system_firmware_settings.php:240 +#: usr/local/www/system_firmware_settings.php:249 +#: usr/local/www/system_firmware_settings.php:251 +#: usr/local/www/system_firmware_settings.php:251 +msgid "Usually the branch name is master" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:230 +#: usr/local/www/system_firmware_settings.php:243 +#: usr/local/www/system_firmware_settings.php:252 +#: usr/local/www/system_firmware_settings.php:254 +#: usr/local/www/system_firmware_settings.php:254 +msgid "Note: Sync will not be performed if a branch is not specified." +msgstr "" + +#: usr/local/www/system_routes.php:52 usr/local/www/system_routes.php:94 +#: usr/local/www/system_routes_edit.php:165 +#: usr/local/www/system_routes_edit.php:198 usr/local/www/system_routes.php:98 +#: usr/local/www/system_routes_edit.php:227 +#: usr/local/www/system_routes.php:113 +#: usr/local/www/system_routes_edit.php:229 usr/local/www/system_routes.php:52 +#: usr/local/www/system_routes.php:113 +#: usr/local/www/system_routes_edit.php:223 +msgid "Static Routes" +msgstr "" + +#: usr/local/www/system_routes.php:83 usr/local/www/system_routes.php:83 +msgid "removed route to" +msgstr "" + +#: usr/local/www/system_routes.php:107 usr/local/www/system_routes.php:111 +#: usr/local/www/system_routes.php:126 usr/local/www/system_routes.php:126 +#, php-format +msgid "" +"The static route configuration has been changed.%sYou must apply the changes " +"in order for them to take effect." +msgstr "" + +#: usr/local/www/system_routes.php:115 usr/local/www/fbegin.inc:159 +#: usr/local/www/status_gateway_groups.php:64 +#: usr/local/www/status_gateway_groups.php:75 +#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:62 +#: usr/local/www/system_gateway_groups.php:108 +#: usr/local/www/system_gateway_groups.php:121 +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways.php:120 usr/local/www/system_gateways.php:141 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/diag_logs_routing.php:83 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/fbegin.inc:176 usr/local/www/diag_logs_resolver.php:97 +#: usr/local/www/diag_logs.php:96 usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/diag_logs_wireless.php:85 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_gateways.php:97 +#: usr/local/www/diag_logs_routing.php:84 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/fbegin.inc:184 usr/local/www/diag_logs_resolver.php:98 +#: usr/local/www/system_gateway_groups.php:109 +#: usr/local/www/system_gateway_groups.php:122 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/status_gateways.php:63 +#: usr/local/www/diag_logs_wireless.php:86 +#: usr/local/www/diag_logs_gateways.php:98 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/status_gateway_groups.php:76 +#: usr/local/www/system_routes.php:119 usr/local/www/fbegin.inc:175 +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/system_gateway_groups.php:118 +#: usr/local/www/system_gateway_groups.php:131 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_routes.php:134 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/diag_logs_routing.php:84 usr/local/www/diag_logs.php:96 +#: usr/local/www/system_routes.php:134 usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_gateways.php:98 +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/status_gateway_groups.php:76 usr/local/www/fbegin.inc:175 +#: usr/local/www/system_gateways.php:120 usr/local/www/system_gateways.php:141 +#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:63 +#: usr/local/www/diag_logs_wireless.php:86 +#: usr/local/www/system_gateway_groups.php:118 +#: usr/local/www/system_gateway_groups.php:131 +#: usr/local/www/diag_logs_resolver.php:98 +msgid "Gateways" +msgstr "" + +#: usr/local/www/system_routes.php:116 usr/local/www/fbegin.inc:204 +#: usr/local/www/system_gateway_groups.php:109 +#: usr/local/www/system_gateways.php:142 usr/local/www/fbegin.inc:222 +#: usr/local/www/fbegin.inc:230 usr/local/www/system_gateway_groups.php:110 +#: usr/local/www/system_routes.php:120 +#: usr/local/www/system_gateway_groups.php:119 +#: usr/local/www/system_routes.php:135 usr/local/www/system_routes.php:135 +#: usr/local/www/fbegin.inc:222 usr/local/www/system_gateways.php:142 +#: usr/local/www/system_gateway_groups.php:119 +msgid "Routes" +msgstr "" + +#: usr/local/www/system_routes.php:161 usr/local/www/system_routes.php:172 +#: usr/local/www/system_routes.php:176 usr/local/www/system_routes.php:192 +#: usr/local/www/system_routes.php:192 +msgid "Do you really want to delete this route?" +msgstr "" + +#: usr/local/www/system_routes.php:188 usr/local/www/system_routes.php:199 +#: usr/local/www/system_routes.php:203 usr/local/www/system_routes.php:219 +#: usr/local/www/system_routes.php:219 +msgid "" +"Do not enter static routes for networks assigned on any interface of this " +"firewall. Static routes are only used for networks reachable via a " +"different router, and not reachable via your default gateway." +msgstr "" + +#: usr/local/www/system_routes_edit.php:89 +#: usr/local/www/system_routes_edit.php:179 +#: usr/local/www/system_routes_edit.php:90 +#: usr/local/www/system_routes_edit.php:216 +#: usr/local/www/system_routes_edit.php:217 +#: usr/local/www/system_routes_edit.php:93 +#: usr/local/www/system_routes_edit.php:244 +#: usr/local/www/system_routes_edit.php:246 +#: usr/local/www/system_routes_edit.php:95 +#: usr/local/www/system_routes_edit.php:240 +msgid "Destination network" +msgstr "" + +#: usr/local/www/system_routes_edit.php:90 +#: usr/local/www/system_routes_edit.php:91 +#: usr/local/www/system_routes_edit.php:94 +#: usr/local/www/system_routes_edit.php:96 +msgid "Destination network bit count" +msgstr "" + +#: usr/local/www/system_routes_edit.php:96 +#: usr/local/www/system_routes_edit.php:97 +#: usr/local/www/system_routes_edit.php:100 +#: usr/local/www/system_routes_edit.php:102 +msgid "A valid IPv4 or IPv6 destination network must be specified." +msgstr "" + +#: usr/local/www/system_routes_edit.php:99 +#: usr/local/www/system_routes_edit.php:100 +#: usr/local/www/system_routes_edit.php:103 +#: usr/local/www/system_routes_edit.php:105 +msgid "A valid destination network bit count must be specified." +msgstr "" + +#: usr/local/www/system_routes_edit.php:114 +#: usr/local/www/system_routes_edit.php:118 +#: usr/local/www/system_routes_edit.php:121 +#: usr/local/www/system_routes_edit.php:123 +msgid "A IPv4 subnet can not be over 32 bits." +msgstr "" + +#: usr/local/www/system_routes_edit.php:123 +msgid "A route to this destination network already exists." +msgstr "" + +#: usr/local/www/system_routes_edit.php:165 +#: usr/local/www/system_routes_edit.php:198 +#: usr/local/www/system_routes_edit.php:227 +#: usr/local/www/system_routes_edit.php:229 +#: usr/local/www/system_routes_edit.php:223 +msgid "Edit route" +msgstr "" + +#: usr/local/www/system_routes_edit.php:176 +#: usr/local/www/system_routes_edit.php:213 +#: usr/local/www/system_routes_edit.php:214 +#: usr/local/www/system_routes_edit.php:241 +#: usr/local/www/system_routes_edit.php:243 +#: usr/local/www/system_routes_edit.php:237 +msgid "Edit route entry" +msgstr "" + +#: usr/local/www/system_routes_edit.php:196 +#: usr/local/www/system_routes_edit.php:228 +#: usr/local/www/system_routes_edit.php:229 +#: usr/local/www/system_routes_edit.php:256 +#: usr/local/www/system_routes_edit.php:257 +#: usr/local/www/system_routes_edit.php:251 +msgid "Destination network for this static route" +msgstr "" + +#: usr/local/www/system_routes_edit.php:212 +#: usr/local/www/system_routes_edit.php:244 +#: usr/local/www/system_routes_edit.php:245 +#: usr/local/www/system_routes_edit.php:272 +#: usr/local/www/system_routes_edit.php:274 +#: usr/local/www/system_routes_edit.php:268 +msgid "Choose which gateway this route applies to or" +msgstr "" + +#: usr/local/www/system_routes_edit.php:228 +#: usr/local/www/system_routes_edit.php:260 +#: usr/local/www/system_routes_edit.php:261 +#: usr/local/www/system_routes_edit.php:287 +#: usr/local/www/system_routes_edit.php:291 +#: usr/local/www/system_routes_edit.php:285 +msgid "Default gateway:" +msgstr "" + +#: usr/local/www/system_routes_edit.php:231 +#: usr/local/www/system_routes_edit.php:263 +#: usr/local/www/system_routes_edit.php:264 +#: usr/local/www/system_routes_edit.php:290 +#: usr/local/www/system_routes_edit.php:294 +#: usr/local/www/system_routes_edit.php:288 +msgid "Interface:" +msgstr "" + +#: usr/local/www/system_routes_edit.php:243 +#: usr/local/www/system_routes_edit.php:275 +#: usr/local/www/system_routes_edit.php:276 +#: usr/local/www/system_routes_edit.php:302 +#: usr/local/www/system_routes_edit.php:308 +#: usr/local/www/system_routes_edit.php:302 +msgid "Gateway IP:" +msgstr "" + +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/system_routes_edit.php:374 +#: usr/local/www/system_routes_edit.php:375 +#: usr/local/www/system_routes_edit.php:399 +#: usr/local/www/system_routes_edit.php:409 +#: usr/local/www/system_routes_edit.php:403 +#, php-format +msgid "You can manage Gateways %shere%s." +msgstr "" + +#: usr/local/www/system_routes_edit.php:337 +#: usr/local/www/system_routes_edit.php:377 +#: usr/local/www/system_routes_edit.php:378 +#: usr/local/www/system_routes_edit.php:402 +#: usr/local/www/system_routes_edit.php:412 +#: usr/local/www/system_routes_edit.php:406 +msgid "Sorry, we could not create your gateway at this time." +msgstr "" + +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/diag_logs_filter_summary.php:34 +msgid "Firewall Log Summary" +msgstr "" + +#: usr/local/www/diag_logs_filter_summary.php:45 +#: usr/local/www/load_balancer_relay_protocol_edit.php:230 +#: usr/local/www/load_balancer_relay_protocol_edit.php:228 +#: usr/local/www/diag_logs_filter_summary.php:46 +#: usr/local/www/load_balancer_relay_protocol_edit.php:228 +#: usr/local/www/diag_logs_filter_summary.php:46 +msgid "Actions" +msgstr "" + +#: usr/local/www/diag_logs_filter_summary.php:47 +#: usr/local/www/diag_logs_filter_summary.php:48 +#: usr/local/www/diag_logs_filter_summary.php:48 +msgid "Protocols" +msgstr "" + +#: usr/local/www/diag_logs_filter_summary.php:48 +#: usr/local/www/diag_logs_filter_summary.php:49 +#: usr/local/www/diag_logs_filter_summary.php:49 +msgid "Source IPs" +msgstr "" + +#: usr/local/www/diag_logs_filter_summary.php:49 +#: usr/local/www/diag_logs_filter_summary.php:50 +#: usr/local/www/diag_logs_filter_summary.php:50 +msgid "Destination IPs" +msgstr "" + +#: usr/local/www/diag_logs_filter_summary.php:50 +#: usr/local/www/diag_logs_filter_summary.php:51 +#: usr/local/www/diag_logs_filter_summary.php:51 +msgid "Source Ports" +msgstr "" + +#: usr/local/www/diag_logs_filter_summary.php:51 +#: usr/local/www/diag_logs_filter_summary.php:52 +#: usr/local/www/diag_logs_filter_summary.php:52 +msgid "Destination Ports" +msgstr "" + +#: usr/local/www/diag_logs_filter_summary.php:71 +#: usr/local/www/diag_logs_filter_summary.php:72 +#: usr/local/www/diag_logs_filter_summary.php:72 +msgid "data" +msgstr "" + +#: usr/local/www/diag_logs_filter_summary.php:208 +#: usr/local/www/diag_logs_filter_summary.php:207 +#: usr/local/www/diag_logs_filter_summary.php:208 +#, php-format +msgid "" +"This is a firewall log summary, of the last %1$s lines of the firewall log " +"(Max %2$s)." +msgstr "" + +#: usr/local/www/diag_logs_filter_summary.php:209 +#: usr/local/www/diag_logs_filter_summary.php:208 +#: usr/local/www/diag_logs_filter_summary.php:209 +msgid "NOTE: IE8 users must enable compatibility view." +msgstr "" + +#: usr/local/www/uploadconfig.php:48 usr/local/www/uploadconfig.php:48 +msgid "ERR Could not save configuration." +msgstr "" + +#: usr/local/www/uploadconfig.php:54 usr/local/www/uploadconfig.php:54 +msgid "OK" +msgstr "" + +#: usr/local/www/uploadconfig.php:57 usr/local/www/uploadconfig.php:57 +msgid "ERR Could not install configuration." +msgstr "" + +#: usr/local/www/uploadconfig.php:60 usr/local/www/uploadconfig.php:60 +msgid "ERR Invalid configuration received." +msgstr "" + +#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86 +#: usr/local/www/vpn_ipsec_mobile.php:303 usr/local/www/vpn_ipsec.php:133 +#: usr/local/www/vpn_ipsec_mobile.php:330 usr/local/www/vpn_ipsec_keys.php:85 +#: usr/local/www/vpn_ipsec.php:139 usr/local/www/vpn_ipsec.php:139 +#: usr/local/www/vpn_ipsec_mobile.php:330 usr/local/www/vpn_ipsec_keys.php:85 +msgid "The IPsec tunnel configuration has been changed" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:141 usr/local/www/vpn_ipsec_keys.php:93 +#: usr/local/www/vpn_ipsec_mobile.php:318 +#: usr/local/www/vpn_ipsec_phase1.php:497 +#: usr/local/www/vpn_ipsec_phase2.php:381 +#: usr/local/www/vpn_ipsec_phase2.php:407 usr/local/www/vpn_ipsec.php:140 +#: usr/local/www/vpn_ipsec_mobile.php:345 usr/local/www/vpn_ipsec_keys.php:92 +#: usr/local/www/vpn_ipsec_phase2.php:473 +#: usr/local/www/vpn_ipsec_phase1.php:496 usr/local/www/vpn_ipsec.php:146 +#: usr/local/www/vpn_ipsec_phase1.php:517 +#: usr/local/www/vpn_ipsec_phase2.php:495 usr/local/www/vpn_ipsec.php:146 +#: usr/local/www/vpn_ipsec_phase1.php:517 +#: usr/local/www/vpn_ipsec_mobile.php:345 usr/local/www/vpn_ipsec_keys.php:92 +#: usr/local/www/vpn_ipsec_phase2.php:495 +msgid "Tunnels" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94 +#: usr/local/www/vpn_ipsec_mobile.php:319 +#: usr/local/www/vpn_ipsec_phase1.php:498 +#: usr/local/www/vpn_ipsec_phase2.php:382 +#: usr/local/www/vpn_ipsec_phase2.php:408 usr/local/www/vpn_ipsec.php:141 +#: usr/local/www/vpn_ipsec_mobile.php:346 usr/local/www/vpn_ipsec_keys.php:93 +#: usr/local/www/vpn_ipsec_phase2.php:474 +#: usr/local/www/vpn_ipsec_phase1.php:497 usr/local/www/vpn_ipsec.php:147 +#: usr/local/www/vpn_ipsec_phase1.php:518 +#: usr/local/www/vpn_ipsec_phase2.php:496 usr/local/www/vpn_ipsec.php:147 +#: usr/local/www/vpn_ipsec_phase1.php:518 +#: usr/local/www/vpn_ipsec_mobile.php:346 usr/local/www/vpn_ipsec_keys.php:93 +#: usr/local/www/vpn_ipsec_phase2.php:496 +msgid "Mobile clients" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:143 usr/local/www/vpn_ipsec_keys.php:95 +#: usr/local/www/vpn_ipsec_mobile.php:320 +#: usr/local/www/vpn_ipsec_phase1.php:499 +#: usr/local/www/vpn_ipsec_phase2.php:383 +#: usr/local/www/vpn_ipsec_phase2.php:409 +msgid "Pre-shared keys" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:160 usr/local/www/vpn_ipsec.php:159 +#: usr/local/www/vpn_ipsec.php:165 usr/local/www/vpn_ipsec.php:165 +msgid "Enable IPsec" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:221 usr/local/www/vpn_ipsec.php:351 +#: usr/local/www/vpn_ipsec_phase2.php:552 usr/local/www/vpn_ipsec.php:232 +#: usr/local/www/vpn_ipsec.php:362 usr/local/www/vpn_ipsec_phase2.php:578 +#: usr/local/www/vpn_ipsec.php:231 usr/local/www/vpn_ipsec.php:361 +#: usr/local/www/vpn_ipsec_phase2.php:680 usr/local/www/vpn_ipsec.php:237 +#: usr/local/www/vpn_ipsec.php:367 usr/local/www/vpn_ipsec_phase2.php:701 +#: usr/local/www/vpn_ipsec.php:237 usr/local/www/vpn_ipsec.php:367 +#: usr/local/www/vpn_ipsec_phase2.php:701 +msgid "auto" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:223 usr/local/www/vpn_ipsec.php:353 +#: usr/local/www/system_camanager.php:465 +#: usr/local/www/system_certmanager.php:578 +#: usr/local/www/vpn_ipsec_phase2.php:563 +#: usr/local/www/vpn_openvpn_server.php:864 usr/local/www/vpn_ipsec.php:234 +#: usr/local/www/vpn_ipsec.php:364 usr/local/www/system_certmanager.php:677 +#: usr/local/www/vpn_openvpn_server.php:937 +#: usr/local/www/system_camanager.php:466 +#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/vpn_ipsec.php:233 +#: usr/local/www/vpn_ipsec.php:363 usr/local/www/vpn_openvpn_server.php:965 +#: usr/local/www/vpn_ipsec_phase2.php:691 +#: usr/local/www/system_camanager.php:473 usr/local/www/vpn_ipsec.php:239 +#: usr/local/www/vpn_ipsec.php:369 usr/local/www/system_certmanager.php:686 +#: usr/local/www/vpn_openvpn_server.php:992 +#: usr/local/www/vpn_ipsec_phase2.php:712 +#: usr/local/www/system_certmanager.php:687 +#: usr/local/www/system_camanager.php:473 usr/local/www/vpn_ipsec.php:239 +#: usr/local/www/vpn_ipsec.php:369 usr/local/www/system_certmanager.php:687 +#: usr/local/www/vpn_openvpn_server.php:992 +#: usr/local/www/vpn_ipsec_phase2.php:712 +msgid "bits" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:243 usr/local/www/vpn_ipsec.php:254 +#: usr/local/www/vpn_ipsec.php:253 usr/local/www/vpn_ipsec.php:259 +#: usr/local/www/vpn_ipsec.php:259 +msgid "edit phase1 entry" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:247 usr/local/www/vpn_ipsec.php:258 +#: usr/local/www/vpn_ipsec.php:257 usr/local/www/vpn_ipsec.php:263 +#: usr/local/www/vpn_ipsec.php:263 +msgid "" +"Do you really want to delete this phase1 and all associated phase2 entries?" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:248 usr/local/www/vpn_ipsec.php:259 +#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:264 +#: usr/local/www/vpn_ipsec.php:264 +msgid "delete phase1 entry" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:269 +#: usr/local/www/vpn_ipsec.php:268 usr/local/www/vpn_ipsec.php:274 +#: usr/local/www/vpn_ipsec.php:274 +msgid "copy phase1 entry" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:279 usr/local/www/vpn_ipsec.php:290 +#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:295 +#: usr/local/www/vpn_ipsec.php:295 +#, php-format +msgid "Show %s Phase-2 entries" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:285 usr/local/www/vpn_ipsec.php:296 +#: usr/local/www/vpn_ipsec.php:295 usr/local/www/vpn_ipsec.php:301 +#: usr/local/www/vpn_ipsec.php:301 +msgid "Local Subnet" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:286 usr/local/www/vpn_ipsec.php:297 +#: usr/local/www/vpn_ipsec.php:296 usr/local/www/vpn_ipsec.php:302 +#: usr/local/www/vpn_ipsec.php:302 +msgid "Remote Subnet" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:288 usr/local/www/vpn_ipsec.php:299 +#: usr/local/www/vpn_ipsec.php:298 usr/local/www/vpn_ipsec.php:304 +#: usr/local/www/vpn_ipsec.php:304 +msgid "P2 Protocol" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:300 +#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:305 +#: usr/local/www/vpn_ipsec.php:305 +msgid "P2 Transforms" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:290 usr/local/www/vpn_ipsec.php:301 +#: usr/local/www/vpn_ipsec.php:300 usr/local/www/vpn_ipsec.php:306 +#: usr/local/www/vpn_ipsec.php:306 +msgid "P2 Auth Methods" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:293 usr/local/www/vpn_ipsec.php:304 +#: usr/local/www/vpn_ipsec.php:303 usr/local/www/vpn_ipsec.php:309 +#: usr/local/www/vpn_ipsec.php:309 +msgid "add phase2 entry" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:373 usr/local/www/vpn_ipsec.php:384 +#: usr/local/www/vpn_ipsec.php:383 usr/local/www/vpn_ipsec.php:389 +#: usr/local/www/vpn_ipsec.php:389 +msgid "edit phase2 entry" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:375 usr/local/www/vpn_ipsec.php:386 +#: usr/local/www/vpn_ipsec.php:385 usr/local/www/vpn_ipsec.php:391 +#: usr/local/www/vpn_ipsec.php:391 +msgid "Do you really want to delete this phase2 entry?" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:376 usr/local/www/vpn_ipsec.php:387 +#: usr/local/www/vpn_ipsec.php:386 usr/local/www/vpn_ipsec.php:392 +#: usr/local/www/vpn_ipsec.php:392 +msgid "delete phase2 entry" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:379 usr/local/www/vpn_ipsec.php:390 +#: usr/local/www/vpn_ipsec.php:389 usr/local/www/vpn_ipsec.php:395 +#: usr/local/www/vpn_ipsec.php:395 +msgid "add a new Phase 2 based on this one" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:410 usr/local/www/vpn_ipsec.php:421 +#: usr/local/www/vpn_ipsec.php:420 usr/local/www/vpn_ipsec.php:426 +#: usr/local/www/vpn_ipsec.php:426 +msgid "add phase1 entry" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435 +#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440 +#: usr/local/www/vpn_ipsec.php:440 +msgid "You can check your IPsec status at" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435 +#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440 +#: usr/local/www/vpn_ipsec.php:440 +msgid "Status:IPsec" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:436 +#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441 +#: usr/local/www/vpn_ipsec.php:441 +msgid "IPsec Debug Mode can be enabled at" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:426 +#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:437 +#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441 +#: usr/local/www/vpn_ipsec.php:442 usr/local/www/vpn_ipsec.php:441 +#: usr/local/www/vpn_ipsec.php:442 +msgid "System:Advanced:Miscellaneous" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:426 usr/local/www/vpn_ipsec.php:437 +#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:442 +#: usr/local/www/vpn_ipsec.php:442 +msgid "IPsec can be set to prefer older SAs at" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:456 usr/local/www/vpn_ipsec.php:467 +#: usr/local/www/vpn_ipsec.php:466 usr/local/www/vpn_ipsec.php:472 +#: usr/local/www/vpn_ipsec.php:472 +msgid "Remote Gateway" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:458 usr/local/www/vpn_ipsec.php:469 +#: usr/local/www/vpn_ipsec.php:468 usr/local/www/vpn_ipsec.php:474 +#: usr/local/www/vpn_ipsec.php:474 +msgid "P1 Protocol" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:459 usr/local/www/vpn_ipsec.php:470 +#: usr/local/www/vpn_ipsec.php:469 usr/local/www/vpn_ipsec.php:475 +#: usr/local/www/vpn_ipsec.php:475 +msgid "P1 Transforms" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:460 usr/local/www/vpn_ipsec.php:471 +#: usr/local/www/vpn_ipsec.php:470 usr/local/www/vpn_ipsec.php:476 +#: usr/local/www/vpn_ipsec.php:476 +msgid "P1 Description" +msgstr "" + +#: usr/local/www/diag_logs_ppp.php:91 usr/local/www/diag_logs_ppp.php:90 +#: usr/local/www/diag_logs_ppp.php:88 usr/local/www/diag_logs_ppp.php:88 +#, php-format +msgid "Last %s PPP log entries" +msgstr "" + +#: usr/local/www/diag_logs_relayd.php:87 usr/local/www/diag_logs_relayd.php:86 +#: usr/local/www/diag_logs_relayd.php:87 +#, php-format +msgid "Last %s Load Balancer log entries" +msgstr "" + +#: usr/local/www/graph.php:112 usr/local/www/graph.php:112 +msgid "In" +msgstr "" + +#: usr/local/www/graph.php:113 usr/local/www/graph.php:113 +msgid "Out" +msgstr "" + +#: usr/local/www/graph.php:117 usr/local/www/graph.php:117 +msgid "Switch to bytes/s" +msgstr "" + +#: usr/local/www/graph.php:118 usr/local/www/graph.php:118 +msgid "AutoScale" +msgstr "" + +#: usr/local/www/graph.php:120 usr/local/www/graph.php:120 +msgid "Graph shows last" +msgstr "" + +#: usr/local/www/graph.php:195 usr/local/www/graph.php:195 +msgid "Switch to" +msgstr "" + +#: usr/local/www/graph.php:201 usr/local/www/graph.php:201 +msgid "follow" +msgstr "" + +#: usr/local/www/graph.php:361 usr/local/www/graph.php:361 +msgid "Kbps" +msgstr "" + +#: usr/local/www/graph.php:363 usr/local/www/graph.php:363 +msgid "Mbps" +msgstr "" + +#: usr/local/www/graph.php:365 usr/local/www/graph.php:365 +msgid "Gbps" +msgstr "" + +#: usr/local/www/graph.php:371 usr/local/www/graph.php:371 +msgid "KB/s" +msgstr "" + +#: usr/local/www/graph.php:373 usr/local/www/graph.php:373 +msgid "MB/s" +msgstr "" + +#: usr/local/www/graph.php:375 usr/local/www/graph.php:375 +msgid "GB/s" +msgstr "" + +#: usr/local/www/diag_patterns.php:43 +#: usr/local/www/services_captiveportal_filemanager.php:195 +#: usr/local/www/exec.php:290 usr/local/www/exec.php:300 +#: usr/local/www/exec.php:292 usr/local/www/exec.php:302 +#: usr/local/www/services_captiveportal_filemanager.php:192 +#: usr/local/www/exec.php:292 usr/local/www/exec.php:302 +#: usr/local/www/services_captiveportal_filemanager.php:192 +msgid "Upload" +msgstr "" + +#: usr/local/www/diag_patterns.php:46 usr/local/www/diag_patterns.php:46 +msgid "Uploaded file to" +msgstr "" + +#: usr/local/www/diag_patterns.php:49 usr/local/www/diag_patterns.php:49 +msgid "Warning: You must upload a file with .pat extension." +msgstr "" + +#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_patterns.php:58 +msgid "Add layer7 pattern" +msgstr "" + +#: usr/local/www/diag_patterns.php:69 usr/local/www/diag_patterns.php:69 +msgid "Upload layer7 pattern file" +msgstr "" + +#: usr/local/www/diag_patterns.php:72 usr/local/www/diag_patterns.php:72 +msgid "File to upload:" +msgstr "" + +#: usr/local/www/diag_patterns.php:80 usr/local/www/diag_patterns.php:43 +#: usr/local/www/diag_patterns.php:43 usr/local/www/diag_patterns.php:80 +msgid "Upload Pattern file" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys.php:64 usr/local/www/vpn_ipsec_keys.php:64 +msgid "Deleted IPsec Pre-Shared Key" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys.php:71 usr/local/www/vpn_ipsec_keys.php:71 +msgid "VPN: IPsec: Keys" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys.php:104 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:128 +#: usr/local/www/vpn_ipsec_keys.php:103 +#: usr/local/www/vpn_ipsec_keys_edit.php:127 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:127 +#: usr/local/www/vpn_ipsec_keys.php:103 +msgid "Identifier" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys.php:105 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:136 +msgid "Pre-shared key" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys.php:110 usr/local/www/vpn_ipsec_keys.php:146 +#: usr/local/www/vpn_ipsec_keys.php:109 usr/local/www/vpn_ipsec_keys.php:145 +#: usr/local/www/vpn_ipsec_keys.php:109 usr/local/www/vpn_ipsec_keys.php:145 +msgid "add key" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys.php:123 usr/local/www/vpn_ipsec_keys.php:136 +#: usr/local/www/vpn_ipsec_keys.php:122 usr/local/www/vpn_ipsec_keys.php:135 +#: usr/local/www/vpn_ipsec_keys.php:122 usr/local/www/vpn_ipsec_keys.php:135 +msgid "edit key" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys.php:137 +msgid "Do you really want to delete this pre-shared key?" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys.php:137 usr/local/www/vpn_ipsec_keys.php:136 +#: usr/local/www/vpn_ipsec_keys.php:136 +msgid "delete key" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys_edit.php:74 +#: usr/local/www/vpn_ipsec_keys_edit.php:74 +msgid "The identifier contains invalid characters." +msgstr "" + +#: usr/local/www/vpn_ipsec_keys_edit.php:77 +#: usr/local/www/vpn_ipsec_keys_edit.php:77 +msgid "A user with this name already exists. Add the key to the user instead." +msgstr "" + +#: usr/local/www/vpn_ipsec_keys_edit.php:83 +#: usr/local/www/vpn_ipsec_keys_edit.php:83 +msgid "Another entry with the same identifier already exists." +msgstr "" + +#: usr/local/www/vpn_ipsec_keys_edit.php:100 +#: usr/local/www/vpn_ipsec_keys_edit.php:100 +msgid "Edited" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys_edit.php:103 +#: usr/local/www/vpn_ipsec_keys_edit.php:103 +msgid "Added" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys_edit.php:114 +msgid "VPN: IPsec: Edit pre-shared key" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys_edit.php:132 +#: usr/local/www/vpn_ipsec_keys_edit.php:131 +#: usr/local/www/vpn_ipsec_keys_edit.php:131 +msgid "" +"This can be either an IP address, fully qualified domain name or an e-mail " +"address" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:128 +#: usr/local/www/vpn_ipsec_mobile.php:132 +#: usr/local/www/vpn_ipsec_mobile.php:132 +msgid "User Authentication Source" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:128 +#: usr/local/www/vpn_ipsec_mobile.php:132 +#: usr/local/www/vpn_ipsec_mobile.php:132 +msgid "Group Authentication Source" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:134 +#: usr/local/www/vpn_ipsec_mobile.php:138 +#: usr/local/www/vpn_ipsec_mobile.php:138 +msgid "" +"A valid IP address for 'Virtual Address Pool Network' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:138 +#: usr/local/www/vpn_ipsec_mobile.php:142 +#: usr/local/www/vpn_ipsec_mobile.php:142 +msgid "A valid value for 'DNS Default Domain' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:143 +#: usr/local/www/vpn_ipsec_mobile.php:159 +#: usr/local/www/vpn_ipsec_mobile.php:159 +msgid "" +"At least one DNS server must be specified to enable the DNS Server option." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:145 +#: usr/local/www/vpn_ipsec_mobile.php:161 +#: usr/local/www/vpn_ipsec_mobile.php:161 +msgid "A valid IP address for 'DNS Server #1' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:147 +#: usr/local/www/vpn_ipsec_mobile.php:163 +#: usr/local/www/vpn_ipsec_mobile.php:163 +msgid "A valid IP address for 'DNS Server #2' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:149 +#: usr/local/www/vpn_ipsec_mobile.php:165 +#: usr/local/www/vpn_ipsec_mobile.php:165 +msgid "A valid IP address for 'DNS Server #3' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:151 +#: usr/local/www/vpn_ipsec_mobile.php:167 +#: usr/local/www/vpn_ipsec_mobile.php:167 +msgid "A valid IP address for 'DNS Server #4' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:156 +#: usr/local/www/vpn_ipsec_mobile.php:172 +#: usr/local/www/vpn_ipsec_mobile.php:172 +msgid "" +"At least one WINS server must be specified to enable the DNS Server option." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:158 +#: usr/local/www/vpn_ipsec_mobile.php:174 +#: usr/local/www/vpn_ipsec_mobile.php:174 +msgid "A valid IP address for 'WINS Server #1' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:160 +#: usr/local/www/vpn_ipsec_mobile.php:176 +#: usr/local/www/vpn_ipsec_mobile.php:176 +msgid "A valid IP address for 'WINS Server #2' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:165 +#: usr/local/www/vpn_ipsec_mobile.php:181 +#: usr/local/www/vpn_ipsec_mobile.php:181 +msgid "A valid value for 'Login Banner' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:220 +#: usr/local/www/vpn_ipsec_mobile.php:240 +#: usr/local/www/vpn_ipsec_mobile.php:240 +msgid "Mobile" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "" +"Support for IPsec Mobile clients is enabled but a Phase1 definition was not " +"found" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "Please click Create to define one." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "Create Phase1" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/vpn_ipsec_mobile.php:357 +#: usr/local/www/vpn_ipsec_mobile.php:357 +msgid "IKE Extensions" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:339 +#: usr/local/www/vpn_ipsec_mobile.php:366 +#: usr/local/www/vpn_ipsec_mobile.php:366 +msgid "Enable IPsec Mobile Client Support" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:350 +#: usr/local/www/vpn_ipsec_mobile.php:377 +#: usr/local/www/vpn_ipsec_mobile.php:377 +msgid "Extended Authentication (Xauth)" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:354 +#: usr/local/www/vpn_ipsec_mobile.php:381 +#: usr/local/www/vpn_ipsec_mobile.php:381 +msgid "User Authentication" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:358 +#: usr/local/www/vpn_ipsec_mobile.php:379 +#: usr/local/www/vpn_ipsec_mobile.php:404 +#: usr/local/www/vpn_ipsec_mobile.php:404 +msgid "system" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:375 +#: usr/local/www/vpn_ipsec_mobile.php:399 +#: usr/local/www/vpn_ipsec_mobile.php:399 +msgid "Group Authentication" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:388 +#: usr/local/www/vpn_ipsec_mobile.php:413 +#: usr/local/www/vpn_ipsec_mobile.php:413 +msgid "Client Configuration (mode-cfg)" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:392 +#: usr/local/www/vpn_ipsec_mobile.php:417 +#: usr/local/www/vpn_ipsec_mobile.php:417 +msgid "Virtual Address Pool" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:401 +#: usr/local/www/vpn_ipsec_mobile.php:426 +#: usr/local/www/vpn_ipsec_mobile.php:426 +msgid "Provide a virtual IP address to clients" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:424 +#: usr/local/www/vpn_ipsec_mobile.php:449 +#: usr/local/www/vpn_ipsec_mobile.php:449 +msgid "Network List" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:433 +#: usr/local/www/vpn_ipsec_mobile.php:458 +#: usr/local/www/vpn_ipsec_mobile.php:458 +msgid "Provide a list of accessible networks to clients" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:440 +#: usr/local/www/vpn_ipsec_mobile.php:465 +#: usr/local/www/vpn_ipsec_mobile.php:465 +msgid "Save Xauth Password" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:449 +#: usr/local/www/vpn_ipsec_mobile.php:474 +#: usr/local/www/vpn_ipsec_mobile.php:474 +msgid "Allow clients to save Xauth passwords (Cisco VPN client only)." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:450 +#: usr/local/www/vpn_ipsec_mobile.php:475 +#: usr/local/www/vpn_ipsec_mobile.php:475 +msgid "" +"NOTE: With iPhone clients, this does not work when deployed via the iPhone " +"configuration utility, only by manual entry." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:457 +#: usr/local/www/vpn_openvpn_csc.php:433 +#: usr/local/www/vpn_openvpn_server.php:1194 +#: usr/local/www/vpn_openvpn_server.php:1336 +#: usr/local/www/vpn_ipsec_mobile.php:482 +#: usr/local/www/vpn_openvpn_csc.php:432 +#: usr/local/www/vpn_openvpn_server.php:1378 +#: usr/local/www/vpn_openvpn_server.php:1430 +#: usr/local/www/vpn_openvpn_csc.php:432 +#: usr/local/www/vpn_ipsec_mobile.php:482 +#: usr/local/www/vpn_openvpn_server.php:1430 +msgid "DNS Default Domain" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:466 +#: usr/local/www/vpn_openvpn_csc.php:443 +#: usr/local/www/vpn_openvpn_server.php:1204 +#: usr/local/www/vpn_openvpn_server.php:1346 +#: usr/local/www/vpn_ipsec_mobile.php:491 +#: usr/local/www/vpn_openvpn_csc.php:442 +#: usr/local/www/vpn_openvpn_server.php:1388 +#: usr/local/www/vpn_openvpn_server.php:1440 +#: usr/local/www/vpn_openvpn_csc.php:442 +#: usr/local/www/vpn_ipsec_mobile.php:491 +#: usr/local/www/vpn_openvpn_server.php:1440 +msgid "Provide a default domain name to clients" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:480 +#: usr/local/www/vpn_openvpn_csc.php:458 +#: usr/local/www/vpn_openvpn_server.php:1219 +#: usr/local/www/vpn_openvpn_server.php:1361 +#: usr/local/www/vpn_ipsec_mobile.php:529 +#: usr/local/www/vpn_openvpn_csc.php:457 +#: usr/local/www/vpn_openvpn_server.php:1403 +#: usr/local/www/vpn_openvpn_server.php:1455 +#: usr/local/www/vpn_openvpn_csc.php:457 +#: usr/local/www/vpn_ipsec_mobile.php:529 +#: usr/local/www/vpn_openvpn_server.php:1455 +msgid "DNS Servers" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:489 +#: usr/local/www/vpn_openvpn_csc.php:468 +#: usr/local/www/vpn_openvpn_server.php:1229 +#: usr/local/www/vpn_openvpn_server.php:1371 +#: usr/local/www/vpn_ipsec_mobile.php:538 +#: usr/local/www/vpn_openvpn_csc.php:467 +#: usr/local/www/vpn_openvpn_server.php:1413 +#: usr/local/www/vpn_openvpn_server.php:1465 +#: usr/local/www/vpn_openvpn_csc.php:467 +#: usr/local/www/vpn_ipsec_mobile.php:538 +#: usr/local/www/vpn_openvpn_server.php:1465 +msgid "Provide a DNS server list to clients" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:522 +#: usr/local/www/vpn_openvpn_csc.php:606 +#: usr/local/www/vpn_openvpn_server.php:1367 +#: usr/local/www/vpn_openvpn_server.php:1509 +#: usr/local/www/vpn_ipsec_mobile.php:571 +#: usr/local/www/vpn_openvpn_csc.php:605 +#: usr/local/www/vpn_openvpn_server.php:1551 +#: usr/local/www/vpn_openvpn_server.php:1603 +#: usr/local/www/vpn_openvpn_csc.php:605 +#: usr/local/www/vpn_ipsec_mobile.php:571 +#: usr/local/www/vpn_openvpn_server.php:1603 +msgid "WINS Servers" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:531 +#: usr/local/www/vpn_openvpn_csc.php:616 +#: usr/local/www/vpn_openvpn_server.php:1377 +#: usr/local/www/vpn_openvpn_server.php:1519 +#: usr/local/www/vpn_ipsec_mobile.php:580 +#: usr/local/www/vpn_openvpn_csc.php:615 +#: usr/local/www/vpn_openvpn_server.php:1561 +#: usr/local/www/vpn_openvpn_server.php:1613 +#: usr/local/www/vpn_openvpn_csc.php:615 +#: usr/local/www/vpn_ipsec_mobile.php:580 +#: usr/local/www/vpn_openvpn_server.php:1613 +msgid "Provide a WINS server list to clients" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:552 +#: usr/local/www/vpn_ipsec_mobile.php:601 +#: usr/local/www/vpn_ipsec_mobile.php:601 +msgid "Phase2 PFS Group" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:561 +#: usr/local/www/vpn_ipsec_mobile.php:610 +#: usr/local/www/vpn_ipsec_mobile.php:610 +msgid "" +"Provide the Phase2 PFS group to clients ( overrides all mobile phase2 " +"settings )" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:568 +#: usr/local/www/system_groupmanager.php:71 +#: usr/local/www/vpn_ipsec_mobile.php:617 +#: usr/local/www/system_groupmanager.php:71 +#: usr/local/www/vpn_ipsec_mobile.php:617 +msgid "Group" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:582 +#: usr/local/www/vpn_ipsec_mobile.php:631 +#: usr/local/www/vpn_ipsec_mobile.php:631 +msgid "Login Banner" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:591 +#: usr/local/www/vpn_ipsec_mobile.php:640 +#: usr/local/www/vpn_ipsec_mobile.php:640 +msgid "Provide a login banner to clients" +msgstr "" + +#: usr/local/www/interfaces_lagg.php:70 usr/local/www/interfaces_lagg.php:74 +#: usr/local/www/interfaces_lagg.php:74 +msgid "This LAGG interface cannot be deleted because it is still being used." +msgstr "" + +#: usr/local/www/interfaces_lagg.php:140 usr/local/www/interfaces_lagg.php:141 +#: usr/local/www/interfaces_lagg.php:145 usr/local/www/interfaces_lagg.php:145 +msgid "" +"LAGG allows for link aggregation, bonding and fault tolerance. Only " +"unassigned interfaces can be added to LAGG." +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:86 +#: usr/local/www/interfaces_lagg_edit.php:88 +#: usr/local/www/interfaces_lagg_edit.php:88 +msgid "Lagg protocol" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:131 +#: usr/local/www/interfaces_lagg_edit.php:132 +#: usr/local/www/interfaces_lagg_edit.php:145 +#: usr/local/www/interfaces_lagg_edit.php:145 +msgid "LAGG configuration" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:149 +#: usr/local/www/interfaces_lagg_edit.php:150 +#: usr/local/www/interfaces_lagg_edit.php:163 +#: usr/local/www/interfaces_lagg_edit.php:163 +msgid "Choose the members that will be used for the link aggregation" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:152 +#: usr/local/www/interfaces_lagg_edit.php:153 +#: usr/local/www/interfaces_lagg_edit.php:166 +#: usr/local/www/interfaces_lagg_edit.php:166 +msgid "Lag proto" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:168 +#: usr/local/www/interfaces_lagg_edit.php:169 +#: usr/local/www/interfaces_lagg_edit.php:182 +#: usr/local/www/interfaces_lagg_edit.php:181 +#: usr/local/www/interfaces_lagg_edit.php:181 +msgid "failover" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:169 +#: usr/local/www/interfaces_lagg_edit.php:170 +#: usr/local/www/interfaces_lagg_edit.php:183 +#: usr/local/www/interfaces_lagg_edit.php:182 +#: usr/local/www/interfaces_lagg_edit.php:182 +msgid "" +"Sends and receives traffic only through the master port. If the master port " +"becomes unavailable, the next active port is used. The first interface " +"added is the master port; any interfaces added after that are used as " +"failover devices." +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:174 +#: usr/local/www/interfaces_lagg_edit.php:175 +#: usr/local/www/interfaces_lagg_edit.php:188 +#: usr/local/www/interfaces_lagg_edit.php:187 +#: usr/local/www/interfaces_lagg_edit.php:187 +msgid "fec" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:174 +#: usr/local/www/interfaces_lagg_edit.php:175 +#: usr/local/www/interfaces_lagg_edit.php:188 +#: usr/local/www/interfaces_lagg_edit.php:187 +#: usr/local/www/interfaces_lagg_edit.php:187 +msgid "" +"Supports Cisco EtherChannel. This is a static setup and does not negotiate " +"aggregation with the peer or exchange frames to monitor the link." +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:178 +#: usr/local/www/interfaces_lagg_edit.php:179 +#: usr/local/www/interfaces_lagg_edit.php:192 +#: usr/local/www/interfaces_lagg_edit.php:191 +#: usr/local/www/interfaces_lagg_edit.php:191 +msgid "lacp" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:178 +#: usr/local/www/interfaces_lagg_edit.php:179 +#: usr/local/www/interfaces_lagg_edit.php:192 +#: usr/local/www/interfaces_lagg_edit.php:191 +#: usr/local/www/interfaces_lagg_edit.php:191 +msgid "" +"Supports the IEEE 802.3ad Link Aggregation Control Protocol (LACP) and the " +"Marker Protocol. LACP will negotiate a set of aggregable links with the " +"peer in to one or more Link Aggregated Groups. Each LAG is composed of " +"ports of the same speed, set to full-duplex operation. The traffic will be " +"balanced across the ports in the LAG with the greatest total speed, in most " +"cases there will only be one LAG which contains all ports. In the event of " +"changes in physical connectivity, Link Aggregation will quickly converge to " +"a new configuration." +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:189 +#: usr/local/www/interfaces_lagg_edit.php:190 +#: usr/local/www/interfaces_lagg_edit.php:203 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/interfaces_lagg_edit.php:202 +msgid "loadbalance" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:189 +#: usr/local/www/interfaces_lagg_edit.php:190 +#: usr/local/www/interfaces_lagg_edit.php:203 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/interfaces_lagg_edit.php:202 +msgid "" +"Balances outgoing traffic across the active ports based on hashed protocol " +"header information and accepts incoming traffic from any active port. This " +"is a static setup and does not negotiate aggregation with the peer or " +"exchange frames to monitor the link. The hash includes the Ethernet source " +"and destination address, and, if available, the VLAN tag, and the IP source " +"and destination address" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:197 +#: usr/local/www/interfaces_lagg_edit.php:198 +#: usr/local/www/interfaces_lagg_edit.php:211 +#: usr/local/www/interfaces_lagg_edit.php:210 +#: usr/local/www/interfaces_lagg_edit.php:210 +msgid "roundrobin" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:197 +#: usr/local/www/interfaces_lagg_edit.php:198 +#: usr/local/www/interfaces_lagg_edit.php:211 +#: usr/local/www/interfaces_lagg_edit.php:210 +#: usr/local/www/interfaces_lagg_edit.php:210 +msgid "" +"Distributes outgoing traffic using a round-robin scheduler through all " +"active ports and accepts incoming traffic from any active port" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:201 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/interfaces_lagg_edit.php:215 +#: usr/local/www/interfaces_lagg_edit.php:214 +#: usr/local/www/interfaces_lagg_edit.php:214 +msgid "" +"This protocol is intended to do nothing: it disables any traffic without " +"disabling the lagg interface itself" +msgstr "" + +#: usr/local/www/interfaces_ppps.php:62 usr/local/www/interfaces_ppps.php:62 +msgid "" +"This point-to-point link cannot be deleted because it is still being used as " +"an interface." +msgstr "" + +#: usr/local/www/interfaces_ppps.php:78 usr/local/www/interfaces_ppps.php:78 +msgid "Interfaces: PPPs" +msgstr "" + +#: usr/local/www/interfaces_ppps.php:109 usr/local/www/interfaces_ppps.php:110 +#: usr/local/www/interfaces_ppps.php:110 +msgid "Interface(s)/Port(s)" +msgstr "" + +#: usr/local/www/interfaces_ppps.php:132 usr/local/www/interfaces_ppps.php:133 +#: usr/local/www/interfaces_ppps.php:133 +msgid "Do you really want to delete this PPP interface?" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:182 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +msgid "Link Interface(s)" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/services_dhcp.php:587 usr/local/www/services_dhcpv6.php:522 +#: usr/local/www/services_dhcp.php:600 usr/local/www/services_dhcpv6.php:596 +#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcpv6.php:527 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/services_dhcp.php:720 usr/local/www/services_dhcpv6.php:542 +#: usr/local/www/services_dhcp.php:740 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/services_dhcp.php:740 usr/local/www/services_dhcpv6.php:542 +msgid "Subnet" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:207 +#: usr/local/www/interfaces_ppps_edit.php:213 +#: usr/local/www/interfaces_ppps_edit.php:213 +msgid "Please choose a Link Type." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:211 +#: usr/local/www/interfaces_ppps_edit.php:217 +#: usr/local/www/interfaces_ppps_edit.php:217 +msgid "" +"Multilink connections (MLPPP) using the PPP link type is not currently " +"supported. Please select only one Link Interface." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:213 +#: usr/local/www/interfaces_ppps_edit.php:219 +#: usr/local/www/interfaces_ppps_edit.php:219 +msgid "The Service name contains invalid characters." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:215 +#: usr/local/www/interfaces_ppps_edit.php:221 +#: usr/local/www/interfaces_ppps_edit.php:221 +msgid "Do not specify both a Service name and a NULL Service name." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:229 +#: usr/local/www/interfaces_ppps_edit.php:235 +#: usr/local/www/interfaces_ppps_edit.php:235 +msgid "" +"A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE " +"Periodic reset fields." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:231 +#: usr/local/www/interfaces_ppps_edit.php:237 +#: usr/local/www/interfaces_ppps_edit.php:237 +msgid "" +"A valid PPPoE reset day of month must be specified (1-31) in the Custom " +"PPPoE Periodic reset fields. No checks are done on valid # of days per month" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:233 +#: usr/local/www/interfaces_ppps_edit.php:239 +#: usr/local/www/interfaces_ppps_edit.php:239 +msgid "" +"A valid PPPoE reset year must be specified. Don't select a year in the past!" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:238 +#: usr/local/www/interfaces_ppps_edit.php:244 +#: usr/local/www/interfaces_ppps_edit.php:244 +#, php-format +msgid "A valid local IP address must be specified for %s." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:240 +#: usr/local/www/interfaces_ppps_edit.php:246 +#: usr/local/www/interfaces_ppps_edit.php:246 +#, php-format +msgid "A valid gateway IP address OR hostname must be specified for %s." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:242 +#: usr/local/www/interfaces_ppps_edit.php:248 +#: usr/local/www/interfaces_ppps_edit.php:248 +#, php-format +msgid "The bandwidth value for %s must be an integer." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:244 +#: usr/local/www/interfaces_ppps_edit.php:250 +#: usr/local/www/interfaces_ppps_edit.php:250 +#, php-format +msgid "The MTU for %s must be greater than 576 bytes." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:246 +#: usr/local/www/interfaces_ppps_edit.php:252 +#: usr/local/www/interfaces_ppps_edit.php:252 +#, php-format +msgid "The MRU for %s must be greater than 576 bytes." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:381 +#: usr/local/www/system_authservers.php:577 +#: usr/local/www/interfaces_ppps_edit.php:382 +#: usr/local/www/system_authservers.php:582 +#: usr/local/www/interfaces_ppps_edit.php:388 +#: usr/local/www/system_authservers.php:589 +#: usr/local/www/interfaces_ppps_edit.php:388 +#: usr/local/www/system_authservers.php:589 +msgid "Select" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:398 +#: usr/local/www/interfaces_ppps_edit.php:399 +#: usr/local/www/interfaces_ppps_edit.php:405 +#: usr/local/www/interfaces_ppps_edit.php:405 +msgid "PPPs configuration" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:401 +#: usr/local/www/interfaces_ppps_edit.php:402 +#: usr/local/www/interfaces_ppps_edit.php:408 +#: usr/local/www/interfaces_ppps_edit.php:408 +msgid "Link Type" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:416 +#: usr/local/www/interfaces_ppps_edit.php:417 +#: usr/local/www/interfaces_ppps_edit.php:423 +#: usr/local/www/interfaces_ppps_edit.php:423 +msgid "Link interface(s)" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:422 +#: usr/local/www/interfaces_ppps_edit.php:423 +#: usr/local/www/interfaces_ppps_edit.php:429 +#: usr/local/www/interfaces_ppps_edit.php:429 +msgid "Select at least two interfaces for Multilink (MLPPP) connections." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:470 +#: usr/local/www/interfaces_ppps_edit.php:471 +#: usr/local/www/interfaces_ppps_edit.php:477 +#: usr/local/www/interfaces_ppps_edit.php:477 +msgid "" +"You may enter a description here for your reference. Description will appear " +"in the \"Interfaces Assign\" select lists." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:526 +#: usr/local/www/interfaces_ppps_edit.php:527 +#: usr/local/www/interfaces_ppps_edit.php:533 +#: usr/local/www/interfaces_ppps_edit.php:531 +#: usr/local/www/interfaces_ppps_edit.php:531 +msgid "Note: Typically *99# for GSM networks and #777 for CDMA networks" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:540 +#: usr/local/www/interfaces_ppps_edit.php:541 +#: usr/local/www/interfaces_ppps_edit.php:547 +#: usr/local/www/interfaces_ppps_edit.php:545 +#: usr/local/www/interfaces_ppps_edit.php:545 +msgid "APN number (optional)" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:543 +#: usr/local/www/interfaces_ppps_edit.php:544 +#: usr/local/www/interfaces_ppps_edit.php:550 +#: usr/local/www/interfaces_ppps_edit.php:548 +#: usr/local/www/interfaces_ppps_edit.php:548 +msgid "" +"Note: Defaults to 1 if you set APN above. Ignored if you set no APN above." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:547 +#: usr/local/www/interfaces_ppps_edit.php:548 +#: usr/local/www/interfaces_ppps_edit.php:554 +#: usr/local/www/interfaces_ppps_edit.php:552 +#: usr/local/www/interfaces_ppps_edit.php:552 +msgid "SIM PIN" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:554 +#: usr/local/www/interfaces_ppps_edit.php:555 +#: usr/local/www/interfaces_ppps_edit.php:561 +#: usr/local/www/interfaces_ppps_edit.php:559 +#: usr/local/www/interfaces_ppps_edit.php:559 +msgid "SIM PIN wait" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:557 +#: usr/local/www/interfaces_ppps_edit.php:558 +#: usr/local/www/interfaces_ppps_edit.php:564 +#: usr/local/www/interfaces_ppps_edit.php:562 +#: usr/local/www/interfaces_ppps_edit.php:562 +msgid "" +"Note: Time to wait for SIM to discover network after PIN is sent to SIM " +"(seconds)." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:561 +#: usr/local/www/interfaces_ppps_edit.php:562 +#: usr/local/www/interfaces_ppps_edit.php:568 +#: usr/local/www/interfaces_ppps_edit.php:566 +#: usr/local/www/interfaces_ppps_edit.php:566 +msgid "Init String" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:564 +#: usr/local/www/interfaces_ppps_edit.php:565 +#: usr/local/www/interfaces_ppps_edit.php:571 +#: usr/local/www/interfaces_ppps_edit.php:569 +#: usr/local/www/interfaces_ppps_edit.php:569 +msgid "" +"Note: Enter the modem initialization string here. Do NOT include the \"AT\" " +"string at the beginning of the command. Many modern USB 3G modems don't need " +"an initialization string." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:569 +#: usr/local/www/interfaces_ppps_edit.php:570 +#: usr/local/www/interfaces_ppps_edit.php:576 +#: usr/local/www/interfaces_ppps_edit.php:574 +#: usr/local/www/interfaces_ppps_edit.php:574 +msgid "Connection Timeout" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:572 +#: usr/local/www/interfaces_ppps_edit.php:573 +#: usr/local/www/interfaces_ppps_edit.php:579 +#: usr/local/www/interfaces_ppps_edit.php:577 +#: usr/local/www/interfaces_ppps_edit.php:577 +msgid "" +"Note: Enter timeout in seconds for connection to be established (sec.) " +"Default is 45 sec." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:576 +#: usr/local/www/interfaces_ppps_edit.php:577 +#: usr/local/www/interfaces_ppps_edit.php:583 +#: usr/local/www/interfaces_ppps_edit.php:581 +#: usr/local/www/interfaces_ppps_edit.php:581 +msgid "Uptime Logging" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:578 +#: usr/local/www/interfaces_ppps_edit.php:579 +#: usr/local/www/interfaces_ppps_edit.php:585 +#: usr/local/www/interfaces_ppps_edit.php:583 +#: usr/local/www/interfaces_ppps_edit.php:583 +msgid "Enable persistent logging of connection uptime." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:579 +#: usr/local/www/interfaces_ppps_edit.php:580 +#: usr/local/www/interfaces_ppps_edit.php:586 +#: usr/local/www/interfaces_ppps_edit.php:584 +#: usr/local/www/interfaces_ppps_edit.php:584 +msgid "" +"This option causes cumulative uptime to be recorded and displayed on the " +"Status Interfaces page." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:591 +#: usr/local/www/interfaces_ppps_edit.php:592 +#: usr/local/www/interfaces_ppps_edit.php:598 +#: usr/local/www/interfaces_ppps_edit.php:596 +#: usr/local/www/interfaces_ppps_edit.php:596 +msgid "Configure a NULL Service name" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:592 +#: usr/local/www/interfaces_ppps_edit.php:593 +#: usr/local/www/interfaces_ppps_edit.php:599 +#: usr/local/www/interfaces_ppps_edit.php:597 +#: usr/local/www/interfaces_ppps_edit.php:597 +msgid "" +"Hint: this field can usually be left empty. Service name will not be " +"configured if this field is empty. Check the \"Configure NULL\" box to " +"configure a blank Service name." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:652 usr/local/www/vpn_pppoe.php:102 +#: usr/local/www/diag_ipsec.php:91 usr/local/www/diag_ipsec.php:102 +#: usr/local/www/vpn_pppoe.php:103 usr/local/www/diag_ipsec.php:103 +#: usr/local/www/interfaces_ppps_edit.php:653 usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/interfaces_ppps_edit.php:659 usr/local/www/diag_ipsec.php:105 +#: usr/local/www/interfaces_ppps_edit.php:657 usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/interfaces_ppps_edit.php:657 usr/local/www/diag_ipsec.php:105 +msgid "Local IP" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:667 +#: usr/local/www/interfaces_ppps_edit.php:668 +#: usr/local/www/interfaces_ppps_edit.php:674 +#: usr/local/www/interfaces_ppps_edit.php:672 +#: usr/local/www/interfaces_ppps_edit.php:672 +msgid "IP Address OR Hostname" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:678 +#: usr/local/www/interfaces_ppps_edit.php:679 +#: usr/local/www/interfaces_ppps_edit.php:685 +#: usr/local/www/interfaces_ppps_edit.php:683 +#: usr/local/www/interfaces_ppps_edit.php:683 +msgid "Dial On Demand" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:680 +#: usr/local/www/interfaces_ppps_edit.php:681 +#: usr/local/www/interfaces_ppps_edit.php:687 +#: usr/local/www/interfaces_ppps_edit.php:685 +#: usr/local/www/interfaces_ppps_edit.php:685 +msgid "Enable Dial-on-Demand mode" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:681 +#: usr/local/www/interfaces_ppps_edit.php:682 +#: usr/local/www/interfaces_ppps_edit.php:688 +#: usr/local/www/interfaces_ppps_edit.php:686 +#: usr/local/www/interfaces_ppps_edit.php:686 +msgid "" +"This option causes the interface to operate in dial-on-demand mode. Do NOT " +"enable if you want your link to be always up. The interface is configured, " +"but the actual connection of the link is delayed until qualifying outgoing " +"traffic is detected." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:686 +#: usr/local/www/interfaces_ppps_edit.php:687 +#: usr/local/www/interfaces_ppps_edit.php:693 +#: usr/local/www/interfaces_ppps_edit.php:691 +#: usr/local/www/interfaces_ppps_edit.php:691 +msgid "Idle Timeout" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:688 +#: usr/local/www/interfaces_ppps_edit.php:689 +#: usr/local/www/interfaces_ppps_edit.php:695 +#: usr/local/www/interfaces_ppps_edit.php:693 +#: usr/local/www/interfaces_ppps_edit.php:693 +msgid "(seconds) Default is 0, which disables the timeout feature." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:689 +#: usr/local/www/interfaces_ppps_edit.php:690 +#: usr/local/www/interfaces_ppps_edit.php:696 +#: usr/local/www/interfaces_ppps_edit.php:694 +#: usr/local/www/interfaces_ppps_edit.php:694 +msgid "" +"If no incoming or outgoing packets are transmitted for the entered number of " +"seconds the connection is brought down." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:690 +#: usr/local/www/interfaces_ppps_edit.php:691 +#: usr/local/www/interfaces_ppps_edit.php:697 +#: usr/local/www/interfaces_ppps_edit.php:695 +#: usr/local/www/interfaces_ppps_edit.php:695 +msgid "" +"When the idle timeout occurs, if the dial-on-demand option is enabled, mpd " +"goes back into dial-on-demand mode. Otherwise, the interface is brought down " +"and all associated routes removed." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:694 +#: usr/local/www/vpn_openvpn_client.php:787 +#: usr/local/www/vpn_openvpn_server.php:1077 +#: usr/local/www/vpn_openvpn_server.php:1219 +#: usr/local/www/vpn_openvpn_client.php:792 +#: usr/local/www/interfaces_ppps_edit.php:695 +#: usr/local/www/vpn_openvpn_server.php:1261 +#: usr/local/www/vpn_openvpn_client.php:838 +#: usr/local/www/vpn_openvpn_client.php:857 +#: usr/local/www/interfaces_ppps_edit.php:701 +#: usr/local/www/vpn_openvpn_server.php:1288 +#: usr/local/www/interfaces_ppps_edit.php:699 +#: usr/local/www/vpn_openvpn_client.php:857 +#: usr/local/www/interfaces_ppps_edit.php:699 +#: usr/local/www/vpn_openvpn_server.php:1288 +msgid "Compression" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:696 +#: usr/local/www/interfaces_ppps_edit.php:697 +#: usr/local/www/interfaces_ppps_edit.php:703 +#: usr/local/www/interfaces_ppps_edit.php:701 +#: usr/local/www/interfaces_ppps_edit.php:701 +msgid "Disable vjcomp(compression) (auto-negotiated by default)." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:697 +#: usr/local/www/interfaces_ppps_edit.php:698 +#: usr/local/www/interfaces_ppps_edit.php:704 +#: usr/local/www/interfaces_ppps_edit.php:702 +#: usr/local/www/interfaces_ppps_edit.php:702 +msgid "" +"This option enables Van Jacobson TCP header compression, which saves several " +"bytes per TCP data packet. You almost always want this option. This " +"compression ineffective for TCP connections with enabled modern extensions " +"like time stamping or SACK, which modify TCP options between sequential " +"packets." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:703 +#: usr/local/www/interfaces_ppps_edit.php:704 +#: usr/local/www/interfaces_ppps_edit.php:710 +#: usr/local/www/interfaces_ppps_edit.php:708 +#: usr/local/www/interfaces_ppps_edit.php:708 +msgid "TCPmssFix" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:705 +#: usr/local/www/interfaces_ppps_edit.php:706 +#: usr/local/www/interfaces_ppps_edit.php:712 +#: usr/local/www/interfaces_ppps_edit.php:710 +#: usr/local/www/interfaces_ppps_edit.php:710 +msgid "Disable tcpmssfix (enabled by default)." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:706 +#: usr/local/www/interfaces_ppps_edit.php:707 +#: usr/local/www/interfaces_ppps_edit.php:713 +#: usr/local/www/interfaces_ppps_edit.php:711 +#: usr/local/www/interfaces_ppps_edit.php:711 +msgid "" +"This option causes mpd to adjust incoming and outgoing TCP SYN segments so " +"that the requested maximum segment size is not greater than the amount " +"allowed by the interface MTU. This is necessary in many setups to avoid " +"problems caused by routers that drop ICMP Datagram Too Big messages. Without " +"these messages, the originating machine sends data, it passes the rogue " +"router then hits a machine that has an MTU that is not big enough for the " +"data. Because the IP Don't Fragment option is set, this machine sends an " +"ICMP Datagram Too Big message back to the originator and drops the packet. " +"The rogue router drops the ICMP message and the originator never gets to " +"discover that it must reduce the fragment size or drop the IP Don't Fragment " +"option from its outgoing data." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:714 +#: usr/local/www/interfaces_ppps_edit.php:715 +#: usr/local/www/interfaces_ppps_edit.php:721 +#: usr/local/www/interfaces_ppps_edit.php:719 +#: usr/local/www/interfaces_ppps_edit.php:719 +msgid "ShortSeq" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:716 +#: usr/local/www/interfaces_ppps_edit.php:717 +#: usr/local/www/interfaces_ppps_edit.php:723 +#: usr/local/www/interfaces_ppps_edit.php:721 +#: usr/local/www/interfaces_ppps_edit.php:721 +msgid "Disable shortseq (auto-negotiated by default)." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:717 +#: usr/local/www/interfaces_ppps_edit.php:718 +#: usr/local/www/interfaces_ppps_edit.php:724 +#: usr/local/www/interfaces_ppps_edit.php:722 +#: usr/local/www/interfaces_ppps_edit.php:722 +msgid "" +"This option is only meaningful if multi-link PPP is negotiated. It " +"proscribes shorter multi-link fragment headers, saving two bytes on every " +"frame. It is not necessary to disable this for connections that are not " +"multi-link." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:722 +#: usr/local/www/interfaces_ppps_edit.php:723 +#: usr/local/www/interfaces_ppps_edit.php:729 +#: usr/local/www/interfaces_ppps_edit.php:727 +#: usr/local/www/interfaces_ppps_edit.php:727 +msgid "ACFComp" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:724 +#: usr/local/www/interfaces_ppps_edit.php:725 +#: usr/local/www/interfaces_ppps_edit.php:731 +#: usr/local/www/interfaces_ppps_edit.php:729 +#: usr/local/www/interfaces_ppps_edit.php:729 +msgid "Disable acfcomp (compression) (auto-negotiated by default)." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:725 +#: usr/local/www/interfaces_ppps_edit.php:726 +#: usr/local/www/interfaces_ppps_edit.php:732 +#: usr/local/www/interfaces_ppps_edit.php:730 +#: usr/local/www/interfaces_ppps_edit.php:730 +msgid "" +"Address and control field compression. This option only applies to " +"asynchronous link types. It saves two bytes per frame." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:729 +#: usr/local/www/interfaces_ppps_edit.php:730 +#: usr/local/www/interfaces_ppps_edit.php:736 +#: usr/local/www/interfaces_ppps_edit.php:734 +#: usr/local/www/interfaces_ppps_edit.php:734 +msgid "ProtoComp" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:731 +#: usr/local/www/interfaces_ppps_edit.php:732 +#: usr/local/www/interfaces_ppps_edit.php:738 +#: usr/local/www/interfaces_ppps_edit.php:736 +#: usr/local/www/interfaces_ppps_edit.php:736 +msgid "Disable protocomp (compression) (auto-negotiated by default)." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:732 +#: usr/local/www/interfaces_ppps_edit.php:733 +#: usr/local/www/interfaces_ppps_edit.php:739 +#: usr/local/www/interfaces_ppps_edit.php:737 +#: usr/local/www/interfaces_ppps_edit.php:737 +msgid "" +"Protocol field compression. This option saves one byte per frame for most " +"frames." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:746 +#: usr/local/www/interfaces_ppps_edit.php:747 +#: usr/local/www/interfaces_ppps_edit.php:753 +#: usr/local/www/interfaces_ppps_edit.php:750 +#: usr/local/www/interfaces_ppps_edit.php:750 +msgid "Link Parameters" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:753 +#: usr/local/www/interfaces_ppps_edit.php:754 +#: usr/local/www/interfaces_ppps_edit.php:760 +#: usr/local/www/interfaces_ppps_edit.php:757 +#: usr/local/www/interfaces_ppps_edit.php:757 +msgid "" +"Set ONLY for MLPPP connections and ONLY when links have different bandwidths." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:760 +#: usr/local/www/interfaces_ppps_edit.php:761 +#: usr/local/www/interfaces_ppps_edit.php:767 +#: usr/local/www/interfaces_ppps_edit.php:764 +#: usr/local/www/interfaces_ppps_edit.php:764 +msgid "MTU will default to 1492." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:764 +#: usr/local/www/interfaces_ppps_edit.php:765 +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:768 +#: usr/local/www/interfaces_ppps_edit.php:768 +msgid "MRU" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:767 +#: usr/local/www/interfaces_ppps_edit.php:774 +#: usr/local/www/interfaces_ppps_edit.php:768 +#: usr/local/www/interfaces_ppps_edit.php:775 +#: usr/local/www/interfaces_ppps_edit.php:781 +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:778 +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:778 +msgid "will be auto-negotiated by default." +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:772 +#: usr/local/www/interfaces_ppps_edit.php:778 +#: usr/local/www/interfaces_ppps_edit.php:775 +#: usr/local/www/interfaces_ppps_edit.php:775 +msgid "MRRU" +msgstr "" + +#: usr/local/www/interfaces_ppps_edit.php:774 +#: usr/local/www/interfaces_ppps_edit.php:775 +#: usr/local/www/interfaces_ppps_edit.php:781 +#: usr/local/www/interfaces_ppps_edit.php:778 +#: usr/local/www/interfaces_ppps_edit.php:778 +msgid "Set ONLY for MLPPP connections." +msgstr "" + +#: usr/local/www/interfaces_qinq.php:64 usr/local/www/interfaces_qinq.php:66 +#: usr/local/www/interfaces_qinq.php:66 +msgid "" +"This QinQ cannot be deleted because it is still being used as an interface." +msgstr "" + +#: usr/local/www/interfaces_qinq.php:86 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_qinq.php:89 usr/local/www/interfaces_qinq.php:89 +#: usr/local/www/interfaces_qinq_edit.php:39 +msgid "QinQ" +msgstr "" + +#: usr/local/www/interfaces_qinq.php:117 +#: usr/local/www/interfaces_qinq_edit.php:356 +#: usr/local/www/interfaces_qinq_edit.php:357 +#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:121 +#: usr/local/www/interfaces_qinq_edit.php:360 +#: usr/local/www/interfaces_qinq.php:121 +#: usr/local/www/interfaces_qinq_edit.php:360 +msgid "Tag" +msgstr "" + +#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:119 +#: usr/local/www/interfaces_qinq.php:122 usr/local/www/interfaces_qinq.php:122 +msgid "QinQ members" +msgstr "" + +#: usr/local/www/interfaces_qinq.php:142 usr/local/www/interfaces_qinq.php:143 +#: usr/local/www/interfaces_qinq.php:146 usr/local/www/interfaces_qinq.php:146 +msgid "Do you really want to delete this QinQ?" +msgstr "" + +#: usr/local/www/interfaces_qinq.php:153 usr/local/www/interfaces_qinq.php:154 +#: usr/local/www/interfaces_qinq.php:157 usr/local/www/interfaces_qinq.php:157 +#, php-format +msgid "" +"Not all drivers/NICs support 802.1Q QinQ tagging properly. On cards that do " +"not explicitly support it, QinQ tagging will still work, but the reduced MTU " +"may cause problems. See the %s handbook for information on supported cards." +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:84 +#: usr/local/www/interfaces_qinq_edit.php:85 +#: usr/local/www/interfaces_qinq_edit.php:85 +msgid "First level tag cannot be empty." +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:86 +#: usr/local/www/interfaces_qinq_edit.php:87 +#: usr/local/www/interfaces_qinq_edit.php:87 +msgid "" +"You are editing an existing entry and modifying the first level tag is not " +"allowed." +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:88 +#: usr/local/www/interfaces_qinq_edit.php:89 +#: usr/local/www/interfaces_qinq_edit.php:89 +msgid "" +"You are editing an existing entry and modifying the interface is not allowed." +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:92 +#: usr/local/www/interfaces_qinq_edit.php:93 +#: usr/local/www/interfaces_qinq_edit.php:93 +msgid "QinQ level already exists for this interface, edit it!" +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:96 +#: usr/local/www/interfaces_qinq_edit.php:97 +#: usr/local/www/interfaces_qinq_edit.php:97 +msgid "" +"A normal VLAN exists with this tag please remove it to use this tag for QinQ " +"first level." +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:123 +#: usr/local/www/interfaces_qinq_edit.php:133 +#: usr/local/www/interfaces_qinq_edit.php:124 +#: usr/local/www/interfaces_qinq_edit.php:134 +#: usr/local/www/interfaces_qinq_edit.php:124 +#: usr/local/www/interfaces_qinq_edit.php:134 +msgid "Tags can contain only numbers or a range in format #-#." +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:193 +#: usr/local/www/interfaces_qinq_edit.php:194 +#: usr/local/www/interfaces_qinq_edit.php:197 +#: usr/local/www/interfaces_qinq_edit.php:197 +msgid "QinQ VLANs group" +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:269 +#: usr/local/www/interfaces_qinq_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:273 +#: usr/local/www/interfaces_qinq_edit.php:272 +#: usr/local/www/interfaces_qinq_edit.php:272 +msgid "members" +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:273 +#: usr/local/www/interfaces_qinq_edit.php:274 +#: usr/local/www/interfaces_qinq_edit.php:277 +#: usr/local/www/interfaces_qinq_edit.php:276 +#: usr/local/www/interfaces_qinq_edit.php:276 +msgid "detail" +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:285 +#: usr/local/www/interfaces_qinq_edit.php:286 +#: usr/local/www/interfaces_qinq_edit.php:289 +#: usr/local/www/interfaces_qinq_edit.php:289 +msgid "Interface QinQ Edit" +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:305 +#: usr/local/www/interfaces_qinq_edit.php:306 +#: usr/local/www/interfaces_qinq_edit.php:309 +#: usr/local/www/interfaces_qinq_edit.php:309 +msgid "Only QinQ capable interfaces will be shown." +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:308 +#: usr/local/www/interfaces_qinq_edit.php:309 +#: usr/local/www/interfaces_qinq_edit.php:312 +#: usr/local/www/interfaces_qinq_edit.php:312 +msgid "First level tag" +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:313 +#: usr/local/www/interfaces_qinq_edit.php:314 +#: usr/local/www/interfaces_qinq_edit.php:317 +#: usr/local/www/interfaces_qinq_edit.php:317 +msgid "" +"This is the first level VLAN tag. On top of this are stacked the member " +"VLANs defined below." +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:333 +#: usr/local/www/interfaces_qinq_edit.php:334 +#: usr/local/www/interfaces_qinq_edit.php:337 +#: usr/local/www/interfaces_qinq_edit.php:337 +msgid "" +"Adds interface to QinQ interface groups so you can write filter rules easily." +msgstr "" + +#: usr/local/www/interfaces_qinq_edit.php:350 +#: usr/local/www/interfaces_qinq_edit.php:351 +#: usr/local/www/interfaces_qinq_edit.php:354 +#: usr/local/www/interfaces_qinq_edit.php:354 +msgid "" +"You can specify ranges in the input below. The format is pretty simple i.e " +"9-100 or 10.20..." +msgstr "" + +#: usr/local/www/interfaces_wireless.php:63 +#: usr/local/www/interfaces_wireless.php:65 +#: usr/local/www/interfaces_wireless.php:65 +msgid "" +"This wireless clone cannot be deleted because it is assigned as an interface." +msgstr "" + +#: usr/local/www/interfaces_wireless.php:124 +#: usr/local/www/interfaces_wireless.php:125 +#: usr/local/www/interfaces_wireless.php:127 +#: usr/local/www/interfaces_wireless.php:127 +msgid "Do you really want to delete this wireless clone?" +msgstr "" + +#: usr/local/www/interfaces_wireless.php:135 +#: usr/local/www/interfaces_wireless.php:136 +#: usr/local/www/interfaces_wireless.php:138 +#: usr/local/www/interfaces_wireless.php:138 +msgid "" +"Here you can configure clones of wireless interfaces, which can be assigned " +"as separate independent interfaces. Only available on wireless chipsets that " +"support this, with limitations on the number that can be created in each " +"mode." +msgstr "" + +#: usr/local/www/interfaces_wireless_edit.php:116 +#: usr/local/www/interfaces_wireless_edit.php:118 +#: usr/local/www/interfaces_wireless_edit.php:118 +msgid "" +"This wireless clone cannot be modified because it is still assigned as an " +"interface." +msgstr "" + +#: usr/local/www/interfaces_wireless_edit.php:118 +#: usr/local/www/interfaces_wireless_edit.php:120 +#: usr/local/www/interfaces_wireless_edit.php:120 +msgid "" +"Use the configuration page for the assigned interface to change the mode." +msgstr "" + +#: usr/local/www/interfaces_wireless_edit.php:123 +#: usr/local/www/interfaces_wireless_edit.php:125 +#: usr/local/www/interfaces_wireless_edit.php:125 +#, php-format +msgid "" +"Error creating interface with mode %1$s. The %2$s interface may not support " +"creating more clones with the selected mode." +msgstr "" + +#: usr/local/www/interfaces_wireless_edit.php:128 +#: usr/local/www/interfaces_wireless_edit.php:130 +#: usr/local/www/interfaces_wireless_edit.php:130 +#, php-format +msgid "Created with id %s" +msgstr "" + +#: usr/local/www/interfaces_wireless_edit.php:131 +#: usr/local/www/interfaces_wireless_edit.php:133 +#: usr/local/www/interfaces_wireless_edit.php:133 +msgid "Created without id" +msgstr "" + +#: usr/local/www/interfaces_wireless_edit.php:156 +#: usr/local/www/interfaces_wireless_edit.php:158 +#: usr/local/www/interfaces_wireless_edit.php:158 +msgid "Wireless clone configuration" +msgstr "" + +#: usr/local/www/load_balancer_monitor.php:72 +#: usr/local/www/load_balancer_monitor.php:72 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"pool." +msgstr "" + +#: usr/local/www/load_balancer_monitor.php:102 +#: usr/local/www/load_balancer_relay_protocol.php:114 +#: usr/local/www/load_balancer_setting.php:111 +#: usr/local/www/load_balancer_setting.php:110 +#: usr/local/www/load_balancer_monitor.php:100 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/load_balancer_setting.php:110 +#: usr/local/www/load_balancer_monitor.php:100 +msgid "The load balancer configuration has been changed" +msgstr "" + +#: usr/local/www/vpn_pppoe.php:96 usr/local/www/vpn_pppoe.php:97 +#: usr/local/www/vpn_pppoe.php:98 usr/local/www/vpn_pppoe.php:98 +msgid "The PPPoE entry list has been changed" +msgstr "" + +#: usr/local/www/vpn_pppoe.php:103 +#: usr/local/www/services_captiveportal_zones.php:54 +#: usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/services_captiveportal_zones.php:55 +#: usr/local/www/vpn_pppoe.php:105 usr/local/www/vpn_pppoe.php:105 +#: usr/local/www/services_captiveportal_zones.php:55 +msgid "Number of users" +msgstr "" + +#: usr/local/www/vpn_pppoe.php:109 usr/local/www/vpn_pppoe.php:144 +#: usr/local/www/vpn_pppoe.php:110 usr/local/www/vpn_pppoe.php:145 +#: usr/local/www/vpn_pppoe.php:111 usr/local/www/vpn_pppoe.php:146 +#: usr/local/www/vpn_pppoe.php:111 usr/local/www/vpn_pppoe.php:146 +msgid "add a new pppoe instance" +msgstr "" + +#: usr/local/www/vpn_pppoe.php:131 usr/local/www/vpn_pppoe.php:132 +#: usr/local/www/vpn_pppoe.php:133 usr/local/www/vpn_pppoe.php:133 +msgid "edit pppoe instance" +msgstr "" + +#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133 +#: usr/local/www/vpn_pppoe.php:134 usr/local/www/vpn_pppoe.php:134 +msgid "" +"Do you really want to delete this entry? All elements that still use it will " +"become invalid (e.g. filter rules)!" +msgstr "" + +#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133 +#: usr/local/www/vpn_pppoe.php:134 usr/local/www/vpn_pppoe.php:134 +msgid "delete pppoe instance" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:66 +#: usr/local/www/load_balancer_monitor_edit.php:66 +msgid "Load Balancer: Monitor:" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:95 +#: usr/local/www/load_balancer_monitor_edit.php:95 +msgid "This monitor name has already been used. Monitor names must be unique." +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:98 +#: usr/local/www/load_balancer_pool_edit.php:86 +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:127 +#: usr/local/www/load_balancer_relay_protocol_edit.php:89 +#: usr/local/www/load_balancer_relay_protocol_edit.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:127 +#: usr/local/www/load_balancer_monitor_edit.php:98 +#: usr/local/www/load_balancer_pool_edit.php:86 +msgid "You cannot use spaces in the 'name' field." +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:112 +#: usr/local/www/services_dhcp_edit.php:118 +#: usr/local/www/services_dnsmasq_edit.php:85 +#: usr/local/www/services_dhcpv6_edit.php:115 +#: usr/local/www/services_dnsmasq_edit.php:86 +#: usr/local/www/services_dhcpv6_edit.php:117 +#: usr/local/www/services_dhcp_edit.php:120 +#: usr/local/www/services_dhcpv6_edit.php:120 +#: usr/local/www/services_dhcp_edit.php:154 +#: usr/local/www/services_dhcpv6_edit.php:120 +#: usr/local/www/services_dhcp_edit.php:154 +#: usr/local/www/load_balancer_monitor_edit.php:112 +#: usr/local/www/services_dnsmasq_edit.php:86 +msgid "The hostname can only contain the characters A-Z, 0-9 and '-'." +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:118 +#: usr/local/www/load_balancer_monitor_edit.php:118 +msgid "HTTP(s) codes must be from RFC2616." +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:122 +#: usr/local/www/load_balancer_monitor_edit.php:122 +msgid "The path to monitor must be set." +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:145 +#: usr/local/www/load_balancer_monitor_edit.php:145 +#, php-format +msgid "modified '%s' monitor:" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:197 +msgid "ICMP" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:268 +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/system_advanced_admin.php:311 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:266 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/system_advanced_admin.php:311 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:266 +msgid "HTTP" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:301 +#: usr/local/www/system_advanced_admin.php:314 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:299 +#: usr/local/www/system_advanced_admin.php:314 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:299 +msgid "HTTPS" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:335 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:333 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:333 +msgid "Send/Expect" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:232 +#: usr/local/www/load_balancer_monitor_edit.php:230 +#: usr/local/www/load_balancer_monitor_edit.php:230 +msgid "Edit Load Balancer - Monitor entry" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:272 +#: usr/local/www/load_balancer_monitor_edit.php:305 +#: usr/local/www/load_balancer_monitor_edit.php:270 +#: usr/local/www/load_balancer_monitor_edit.php:303 +#: usr/local/www/load_balancer_monitor_edit.php:270 +#: usr/local/www/load_balancer_monitor_edit.php:303 +msgid "Path" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:278 +#: usr/local/www/load_balancer_monitor_edit.php:311 +#: usr/local/www/diag_ping.php:55 usr/local/www/diag_ping.php:90 +#: usr/local/www/services_dnsmasq.php:243 +#: usr/local/www/services_dnsmasq_edit.php:141 +#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:89 +#: usr/local/www/services_rfc2136_edit.php:169 +#: usr/local/www/services_dnsmasq_edit.php:196 +#: usr/local/www/services_dnsmasq_edit.php:237 +#: usr/local/www/services_unbound.php:279 +#: usr/local/www/services_dnsmasq.php:244 +#: usr/local/www/services_dnsmasq_edit.php:197 +#: usr/local/www/services_dnsmasq_edit.php:238 +#: usr/local/www/load_balancer_monitor_edit.php:276 +#: usr/local/www/load_balancer_monitor_edit.php:309 +#: usr/local/www/diag_testport.php:60 usr/local/www/diag_testport.php:117 +#: usr/local/www/diag_traceroute.php:93 usr/local/www/services_dnsmasq.php:269 +#: usr/local/www/diag_traceroute.php:63 usr/local/www/diag_traceroute.php:99 +#: usr/local/www/diag_ping.php:57 usr/local/www/diag_ping.php:97 +#: usr/local/www/services_dnsmasq.php:282 +#: usr/local/www/services_dnsmasq.php:346 usr/local/www/diag_testport.php:60 +#: usr/local/www/diag_testport.php:117 usr/local/www/diag_traceroute.php:63 +#: usr/local/www/diag_traceroute.php:99 +#: usr/local/www/load_balancer_monitor_edit.php:276 +#: usr/local/www/load_balancer_monitor_edit.php:309 +#: usr/local/www/diag_ping.php:57 usr/local/www/diag_ping.php:97 +#: usr/local/www/services_dnsmasq_edit.php:197 +#: usr/local/www/services_dnsmasq_edit.php:238 +#: usr/local/www/services_rfc2136_edit.php:169 +#: usr/local/www/services_dnsmasq.php:346 +msgid "Host" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:280 +#: usr/local/www/load_balancer_monitor_edit.php:313 +#: usr/local/www/load_balancer_monitor_edit.php:278 +#: usr/local/www/load_balancer_monitor_edit.php:311 +#: usr/local/www/load_balancer_monitor_edit.php:278 +#: usr/local/www/load_balancer_monitor_edit.php:311 +msgid "Hostname for Host: header if needed." +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:284 +#: usr/local/www/load_balancer_monitor_edit.php:317 +#: usr/local/www/load_balancer_monitor_edit.php:282 +#: usr/local/www/load_balancer_monitor_edit.php:315 +#: usr/local/www/load_balancer_monitor_edit.php:282 +#: usr/local/www/load_balancer_monitor_edit.php:315 +msgid "HTTP Code" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:339 +#: usr/local/www/load_balancer_monitor_edit.php:337 +#: usr/local/www/load_balancer_monitor_edit.php:337 +msgid "Send string" +msgstr "" + +#: usr/local/www/load_balancer_monitor_edit.php:345 +#: usr/local/www/load_balancer_monitor_edit.php:343 +#: usr/local/www/load_balancer_monitor_edit.php:343 +msgid "Expect string" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:65 +#: usr/local/www/load_balancer_pool_edit.php:65 +msgid "Load Balancer: Pool:" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:76 +msgid "Server List" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:83 +#: usr/local/www/load_balancer_pool_edit.php:83 +msgid "This pool name has already been used. Pool names must be unique." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:89 +#: usr/local/www/load_balancer_virtual_server_edit.php:92 +msgid "The port must be an integer between 1 and 65535." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:93 +#: usr/local/www/load_balancer_pool_edit.php:93 +msgid "The retry value must be an integer between 1 and 65535." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:98 +#, php-format +msgid "%s is not a valid IP address (in \"enabled\" list)." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:105 +#, php-format +msgid "%s is not a valid IP address (in \"disabled\" list)." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:114 +#: usr/local/www/load_balancer_pool_edit.php:120 +#: usr/local/www/load_balancer_pool_edit.php:120 +msgid "Invalid monitor chosen." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:121 +#: usr/local/www/load_balancer_pool_edit.php:127 +#: usr/local/www/load_balancer_pool_edit.php:127 +#, php-format +msgid " modified '%s' pool:" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:178 +#: usr/local/www/load_balancer_pool_edit.php:186 +#: usr/local/www/load_balancer_pool_edit.php:184 +#: usr/local/www/load_balancer_pool_edit.php:184 +msgid "Add/edit Load Balancer - Pool entry" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:190 +#: usr/local/www/load_balancer_pool_edit.php:198 +#: usr/local/www/load_balancer_pool_edit.php:196 +#: usr/local/www/load_balancer_pool_edit.php:196 +msgid "Load Balance" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:191 +#: usr/local/www/load_balancer_pool_edit.php:199 +#: usr/local/www/load_balancer_pool_edit.php:197 +#: usr/local/www/load_balancer_pool_edit.php:197 +msgid "Manual Failover" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:206 +#: usr/local/www/load_balancer_pool_edit.php:215 +#: usr/local/www/load_balancer_pool_edit.php:213 +#: usr/local/www/load_balancer_pool_edit.php:213 +msgid "This is the port your servers are listening on." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:210 +#: usr/local/www/load_balancer_pool_edit.php:227 +#: usr/local/www/load_balancer_pool_edit.php:225 +#: usr/local/www/load_balancer_pool_edit.php:225 +msgid "Retry" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:213 +#: usr/local/www/load_balancer_pool_edit.php:230 +#: usr/local/www/load_balancer_pool_edit.php:228 +#: usr/local/www/load_balancer_pool_edit.php:228 +msgid "" +"Optionally specify how many times to retry checking a server before " +"declaring it down." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:220 +#: usr/local/www/load_balancer_pool_edit.php:237 +#: usr/local/www/load_balancer_pool_edit.php:235 +#: usr/local/www/load_balancer_pool_edit.php:235 +msgid "Add item to pool" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/load_balancer_pool_edit.php:255 +#: usr/local/www/load_balancer_pool_edit.php:253 +#: usr/local/www/load_balancer_pool_edit.php:253 +msgid "" +"Please add a monitor IP address on the monitors tab if you wish to use this " +"feature." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:244 +#: usr/local/www/load_balancer_pool_edit.php:261 +#: usr/local/www/load_balancer_pool_edit.php:259 +#: usr/local/www/load_balancer_pool_edit.php:259 +msgid "Server IP Address" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:247 +#: usr/local/www/load_balancer_pool_edit.php:264 +#: usr/local/www/load_balancer_pool_edit.php:262 +#: usr/local/www/load_balancer_pool_edit.php:262 +msgid "Add to pool" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:254 +#: usr/local/www/load_balancer_pool_edit.php:271 +#: usr/local/www/load_balancer_pool_edit.php:269 +#: usr/local/www/load_balancer_pool_edit.php:269 +msgid "Current Pool Members" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:264 +#: usr/local/www/load_balancer_pool_edit.php:281 +#: usr/local/www/load_balancer_pool_edit.php:279 +#: usr/local/www/load_balancer_pool_edit.php:279 +msgid "Pool Disabled" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:277 +#: usr/local/www/load_balancer_pool_edit.php:300 +#: usr/local/www/load_balancer_relay_protocol_edit.php:253 +#: usr/local/www/load_balancer_pool_edit.php:294 +#: usr/local/www/load_balancer_pool_edit.php:317 +#: usr/local/www/load_balancer_relay_protocol_edit.php:251 +#: usr/local/www/load_balancer_pool_edit.php:292 +#: usr/local/www/load_balancer_pool_edit.php:315 +#: usr/local/www/load_balancer_relay_protocol_edit.php:251 +#: usr/local/www/load_balancer_pool_edit.php:292 +#: usr/local/www/load_balancer_pool_edit.php:315 +msgid "Remove" +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:287 +#: usr/local/www/load_balancer_pool_edit.php:304 +#: usr/local/www/load_balancer_pool_edit.php:302 +#: usr/local/www/load_balancer_pool_edit.php:302 +msgid "Enabled (default)" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:61 +#: usr/local/www/load_balancer_virtual_server_edit.php:61 +msgid "Load Balancer: Virtual Server:" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:261 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/load_balancer_virtual_server_edit.php:250 +#: usr/local/www/load_balancer_virtual_server_edit.php:248 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:248 +#: usr/local/www/load_balancer_relay_protocol.php:100 +msgid "Relay Protocol" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:86 +#: usr/local/www/load_balancer_virtual_server_edit.php:86 +msgid "" +"This virtual server name has already been used. Virtual server names must " +"be unique." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:95 +#, php-format +msgid "%s is not a valid IP address." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:102 +#: usr/local/www/load_balancer_virtual_server_edit.php:104 +#: usr/local/www/load_balancer_virtual_server_edit.php:104 +#, php-format +msgid "modified '%s' vs:" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:104 +#: usr/local/www/load_balancer_virtual_server_edit.php:106 +#: usr/local/www/load_balancer_virtual_server_edit.php:106 +#, php-format +msgid "created '%s' vs:" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/status_lb_vs.php:56 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/status_lb_vs.php:56 +msgid "Virtual Server" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:180 +#: usr/local/www/load_balancer_virtual_server_edit.php:154 +#: usr/local/www/load_balancer_virtual_server_edit.php:152 +#: usr/local/www/load_balancer_virtual_server_edit.php:152 +msgid "Edit Load Balancer - Virtual Server entry" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:198 +#: usr/local/www/load_balancer_virtual_server_edit.php:172 +#: usr/local/www/load_balancer_virtual_server_edit.php:170 +#: usr/local/www/load_balancer_virtual_server_edit.php:170 +msgid "" +"This is normally the WAN IP address that you would like the server to listen " +"on. All connections to this IP and port will be forwarded to the pool " +"cluster." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:205 +#: usr/local/www/load_balancer_virtual_server_edit.php:186 +#: usr/local/www/load_balancer_virtual_server_edit.php:184 +#: usr/local/www/load_balancer_virtual_server_edit.php:184 +msgid "" +"This is the port that the clients will connect to. All connections to this " +"port will be forwarded to the pool cluster." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:209 +#: usr/local/www/load_balancer_virtual_server_edit.php:198 +#: usr/local/www/load_balancer_virtual_server_edit.php:196 +#: usr/local/www/load_balancer_virtual_server_edit.php:196 +msgid "Virtual Server Pool" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:212 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/load_balancer_virtual_server_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:220 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +msgid "Please add a pool on the Pools tab to use this feature." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:244 +#: usr/local/www/load_balancer_virtual_server_edit.php:233 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +msgid "" +"This is the server that clients will be redirected to if *ALL* servers in " +"the pool are offline." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:279 +#: usr/local/www/status_captiveportal_test.php:92 +#: usr/local/www/load_balancer_virtual_server_edit.php:268 +#: usr/local/www/status_captiveportal_test.php:93 +#: usr/local/www/load_balancer_virtual_server_edit.php:266 +#: usr/local/www/status_captiveportal_expire.php:92 +#: usr/local/www/status_captiveportal_test.php:94 +#: usr/local/www/load_balancer_virtual_server_edit.php:266 +#: usr/local/www/status_captiveportal_expire.php:92 +#: usr/local/www/status_captiveportal_test.php:94 +msgid "Submit" +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:289 +#: usr/local/www/load_balancer_virtual_server_edit.php:278 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +msgid "" +"Don't forget to add a firewall rule for the virtual server/pool after you're " +"finished setting it up." +msgstr "" + +#: usr/local/www/pkg_mgr.php:70 usr/local/www/pkg_mgr.php:82 +#: usr/local/www/pkg_mgr.php:89 +#, php-format +msgid "Unable to retrieve package info from %s. Cached data will be used." +msgstr "" + +#: usr/local/www/pkg_mgr.php:73 usr/local/www/pkg_mgr.php:85 +#: usr/local/www/pkg_mgr.php:92 +#, php-format +msgid "" +"Unable to communicate with %1$s. Please verify DNS and interface " +"configuration, and that %2$s has functional Internet connectivity." +msgstr "" + +#: usr/local/www/pkg_mgr.php:122 usr/local/www/pkg_mgr.php:216 +#: usr/local/www/pkg_mgr.php:137 usr/local/www/pkg_mgr.php:243 +#: usr/local/www/pkg_mgr.php:246 usr/local/www/pkg_mgr.php:140 +#: usr/local/www/pkg_mgr.php:249 usr/local/www/pkg_mgr.php:187 +#: usr/local/www/pkg_mgr.php:253 +msgid "There are currently no packages available for installation." +msgstr "" + +#: usr/local/www/pkg_mgr.php:192 usr/local/www/pkg_mgr.php:228 +#: usr/local/www/pkg_mgr.php:231 usr/local/www/pkg_mgr.php:235 +msgid "platform" +msgstr "" + +#: usr/local/www/pkg_mgr.php:210 +msgid "Do you really want to install this package?" +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_install.php:55 +#: usr/local/www/pkg_mgr_install.php:55 +msgid "Install Package" +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:72 usr/local/www/pkg_mgr_install.php:70 +#: usr/local/www/pkg_mgr_install.php:70 +msgid "Available packages" +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:75 usr/local/www/pkg_mgr_install.php:73 +#: usr/local/www/pkg_mgr_install.php:73 +msgid "Installed packages" +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:76 usr/local/www/pkg_mgr_install.php:74 +#: usr/local/www/pkg_mgr_install.php:74 +msgid "Package Installer" +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:124 usr/local/www/pkg_mgr_install.php:134 +#: usr/local/www/pkg_mgr_install.php:132 usr/local/www/pkg_mgr_install.php:128 +#: usr/local/www/pkg_mgr_install.php:128 +msgid "Creating restore point before package installation." +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:132 usr/local/www/pkg_mgr_install.php:133 +#: usr/local/www/pkg_mgr_install.php:141 usr/local/www/pkg_mgr_install.php:142 +#: usr/local/www/pkg_mgr_install.php:139 usr/local/www/pkg_mgr_install.php:140 +#: usr/local/www/pkg_mgr_install.php:135 usr/local/www/pkg_mgr_install.php:136 +#: usr/local/www/pkg_mgr_install.php:135 usr/local/www/pkg_mgr_install.php:136 +msgid "Package deleted." +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:147 usr/local/www/pkg_mgr_install.php:148 +#: usr/local/www/pkg_mgr_install.php:156 usr/local/www/pkg_mgr_install.php:157 +#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155 +#: usr/local/www/pkg_mgr_install.php:150 usr/local/www/pkg_mgr_install.php:151 +#: usr/local/www/pkg_mgr_install.php:150 usr/local/www/pkg_mgr_install.php:151 +msgid "Package reinstallation failed." +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:151 usr/local/www/pkg_mgr_install.php:152 +#: usr/local/www/pkg_mgr_install.php:160 usr/local/www/pkg_mgr_install.php:161 +#: usr/local/www/pkg_mgr_install.php:158 usr/local/www/pkg_mgr_install.php:159 +#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155 +#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155 +msgid "Package reinstalled." +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:163 usr/local/www/pkg_mgr_install.php:172 +#: usr/local/www/pkg_mgr_install.php:170 usr/local/www/pkg_mgr_install.php:166 +#: usr/local/www/pkg_mgr_install.php:166 +msgid "installation completed." +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:166 usr/local/www/pkg_mgr_install.php:175 +#: usr/local/www/pkg_mgr_install.php:173 usr/local/www/pkg_mgr_install.php:169 +#: usr/local/www/pkg_mgr_install.php:169 +#, php-format +msgid "Could not find %s." +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:182 usr/local/www/pkg_mgr_install.php:183 +#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:192 +#: usr/local/www/pkg_mgr_install.php:188 usr/local/www/pkg_mgr_install.php:189 +#: usr/local/www/pkg_mgr_install.php:184 usr/local/www/pkg_mgr_install.php:185 +#: usr/local/www/pkg_mgr_install.php:184 usr/local/www/pkg_mgr_install.php:185 +msgid "All packages reinstalled." +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:194 +#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:204 +#: usr/local/www/pkg_mgr_install.php:199 usr/local/www/pkg_mgr_install.php:203 +#: usr/local/www/pkg_mgr_install.php:195 usr/local/www/pkg_mgr_install.php:195 +#: usr/local/www/pkg_mgr_install.php:199 +msgid "Installation of" +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:200 +#: usr/local/www/pkg_mgr_install.php:199 usr/local/www/pkg_mgr_install.php:195 +#: usr/local/www/pkg_mgr_install.php:195 +msgid "FAILED!" +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:201 +#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:196 +#: usr/local/www/pkg_mgr_install.php:196 +msgid "Installation halted." +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:194 usr/local/www/pkg_mgr_install.php:204 +#: usr/local/www/pkg_mgr_install.php:203 usr/local/www/pkg_mgr_install.php:199 +#: usr/local/www/pkg_mgr_install.php:199 +msgid "completed." +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208 +#: usr/local/www/pkg_mgr_install.php:207 usr/local/www/pkg_mgr_install.php:203 +#: usr/local/www/pkg_mgr_install.php:203 +msgid "Installation completed." +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208 +#: usr/local/www/pkg_mgr_install.php:207 usr/local/www/pkg_mgr_install.php:203 +#: usr/local/www/pkg_mgr_install.php:203 +msgid "setup instructions" +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:210 +#: usr/local/www/pkg_mgr_install.php:209 usr/local/www/pkg_mgr_install.php:205 +#: usr/local/www/pkg_mgr_install.php:205 +msgid "" +"Installation completed. Please check to make sure that the package is " +"configured from the respective menu then start the package." +msgstr "" + +#: usr/local/www/preload.php:6 +msgid "You are not allowed to access this page." +msgstr "" + +#: usr/local/www/progress.php:25 usr/local/www/progress.php:22 +msgid "Invalid Meter ID" +msgstr "" + +#: usr/local/www/progress.php:46 usr/local/www/progress.php:43 +msgid "UPLOAD completed" +msgstr "" + +#: usr/local/www/progress.php:58 usr/local/www/progress.php:55 +msgid "Uploading Files... Please wait..." +msgstr "" + +#: usr/local/www/progress.php:68 usr/local/www/progress.php:65 +msgid "Uploading files..." +msgstr "" + +#: usr/local/www/progress.php:87 usr/local/www/progress.php:84 +msgid "Time Remaining:" +msgstr "" + +#: usr/local/www/progress.php:88 usr/local/www/progress.php:85 +msgid "Speed:" +msgstr "" + +#: usr/local/www/progress.php:88 usr/local/www/progress.php:85 +msgid "KB/sec" +msgstr "" + +#: usr/local/www/progress.php:92 usr/local/www/progress.php:89 +msgid "Uploaded:" +msgstr "" + +#: usr/local/www/progress.php:93 usr/local/www/progress.php:90 +msgid "File Size:" +msgstr "" + +#: usr/local/www/progress.php:97 usr/local/www/progress.php:94 +msgid "Completed:" +msgstr "" + +#: usr/local/www/diag_dns.php:34 usr/local/www/diag_dns.php:250 +#: usr/local/www/fbegin.inc:192 usr/local/www/fbegin.inc:210 +#: usr/local/www/diag_dns.php:249 usr/local/www/fbegin.inc:218 +#: usr/local/www/fbegin.inc:209 usr/local/www/diag_dns.php:266 +#: usr/local/www/diag_dns.php:34 usr/local/www/diag_dns.php:266 +#: usr/local/www/fbegin.inc:209 +msgid "DNS Lookup" +msgstr "" + +#: usr/local/www/diag_dns.php:100 usr/local/www/diag_dns.php:100 +msgid "Host must be a valid hostname or IP address." +msgstr "" + +#: usr/local/www/diag_dns.php:110 usr/local/www/diag_dns.php:109 +#: usr/local/www/diag_dns.php:109 +msgid "No response" +msgstr "" + +#: usr/local/www/diag_dns.php:143 usr/local/www/diag_dns.php:142 +#: usr/local/www/diag_dns.php:142 +msgid "No record found" +msgstr "" + +#: usr/local/www/diag_dns.php:158 usr/local/www/diag_dns.php:157 +#: usr/local/www/diag_dns.php:174 usr/local/www/diag_dns.php:174 +msgid "Resolve DNS hostname or IP" +msgstr "" + +#: usr/local/www/diag_dns.php:161 usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 usr/local/www/diag_dns.php:160 +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:187 usr/local/www/diag_dns.php:177 +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:187 usr/local/www/diag_dns.php:177 +msgid "Hostname or IP" +msgstr "" + +#: usr/local/www/diag_dns.php:203 usr/local/www/diag_dns.php:202 +#: usr/local/www/diag_dns.php:219 usr/local/www/diag_dns.php:219 +msgid "Resolution time per server" +msgstr "" + +#: usr/local/www/diag_dns.php:211 usr/local/www/diag_dns.php:210 +#: usr/local/www/diag_dns.php:227 usr/local/www/diag_dns.php:227 +msgid "Query time" +msgstr "" + +#: usr/local/www/diag_dns.php:235 usr/local/www/diag_dns.php:234 +#: usr/local/www/diag_dns.php:251 usr/local/www/diag_dns.php:251 +msgid "More Information:" +msgstr "" + +#: usr/local/www/diag_dns.php:237 usr/local/www/diag_ping.php:43 +#: usr/local/www/diag_ping.php:87 usr/local/www/diag_ping.php:119 +#: usr/local/www/fbegin.inc:200 usr/local/www/fbegin.inc:218 +#: usr/local/www/diag_dns.php:236 usr/local/www/fbegin.inc:226 +#: usr/local/www/fbegin.inc:217 usr/local/www/diag_ping.php:44 +#: usr/local/www/diag_ping.php:94 usr/local/www/diag_ping.php:141 +#: usr/local/www/diag_dns.php:253 usr/local/www/diag_ping.php:44 +#: usr/local/www/diag_ping.php:94 usr/local/www/diag_ping.php:141 +#: usr/local/www/diag_dns.php:253 usr/local/www/fbegin.inc:217 +msgid "Ping" +msgstr "" + +#: usr/local/www/diag_dns.php:238 usr/local/www/diag_traceroute.php:45 +#: usr/local/www/diag_traceroute.php:86 usr/local/www/diag_traceroute.php:112 +#: usr/local/www/fbegin.inc:209 usr/local/www/fbegin.inc:227 +#: usr/local/www/diag_dns.php:237 usr/local/www/fbegin.inc:236 +#: usr/local/www/diag_traceroute.php:90 usr/local/www/diag_traceroute.php:136 +#: usr/local/www/fbegin.inc:228 usr/local/www/diag_traceroute.php:46 +#: usr/local/www/diag_traceroute.php:96 usr/local/www/diag_traceroute.php:155 +#: usr/local/www/diag_dns.php:254 usr/local/www/diag_traceroute.php:46 +#: usr/local/www/diag_traceroute.php:96 usr/local/www/diag_traceroute.php:155 +#: usr/local/www/diag_dns.php:254 usr/local/www/fbegin.inc:228 +msgid "Traceroute" +msgstr "" + +#: usr/local/www/diag_dns.php:240 usr/local/www/diag_dns.php:239 +#: usr/local/www/diag_dns.php:256 usr/local/www/diag_dns.php:256 +msgid "" +"NOTE: The following links are to external services, so their reliability " +"cannot be guaranteed." +msgstr "" + +#: usr/local/www/diag_dns.php:241 usr/local/www/diag_dns.php:240 +#: usr/local/www/diag_dns.php:257 usr/local/www/diag_dns.php:257 +msgid "IP WHOIS @ DNS Stuff" +msgstr "" + +#: usr/local/www/diag_dns.php:242 usr/local/www/diag_dns.php:241 +#: usr/local/www/diag_dns.php:258 usr/local/www/diag_dns.php:258 +msgid "IP Info @ DNS Stuff" +msgstr "" + +#: usr/local/www/reboot.php:44 +msgid " Yes " +msgstr "" + +#: usr/local/www/reboot.php:45 usr/local/www/reboot.php:76 +#: usr/local/www/reboot.php:56 usr/local/www/reboot.php:56 +msgid "The system is rebooting now. This may take one minute." +msgstr "" + +#: usr/local/www/reboot.php:51 usr/local/www/reboot.php:48 +#: usr/local/www/reboot.php:48 +msgid "Reboot System" +msgstr "" + +#: usr/local/www/reboot.php:59 usr/local/www/reboot.php:62 +#: usr/local/www/reboot.php:62 +msgid "Are you sure you want to reboot the system?" +msgstr "" + +#: usr/local/www/restart_httpd.php:42 usr/local/www/restart_httpd.php:42 +msgid "Restarting httpd" +msgstr "" + +#: usr/local/www/restart_httpd.php:50 usr/local/www/restart_httpd.php:50 +msgid "Mounting file systems read/write" +msgstr "" + +#: usr/local/www/restart_httpd.php:53 usr/local/www/restart_httpd.php:53 +msgid "Forcing all PHP file permissions to 0755" +msgstr "" + +#: usr/local/www/restart_httpd.php:56 usr/local/www/restart_httpd.php:56 +msgid "Mounting file systems read only" +msgstr "" + +#: usr/local/www/restart_httpd.php:59 usr/local/www/restart_httpd.php:59 +msgid "Restarting mini_httpd" +msgstr "" + +#: usr/local/www/edit.php:39 usr/local/www/edit.php:42 +#: usr/local/www/edit.php:41 usr/local/www/edit.php:41 +msgid "Edit file" +msgstr "" + +#: usr/local/www/edit.php:46 usr/local/www/edit.php:62 +#: usr/local/www/edit.php:49 usr/local/www/edit.php:65 +#: usr/local/www/edit.php:48 usr/local/www/edit.php:48 +#: usr/local/www/edit.php:65 +msgid "No file name specified" +msgstr "" + +#: usr/local/www/edit.php:48 usr/local/www/edit.php:51 +#: usr/local/www/edit.php:50 usr/local/www/edit.php:50 +msgid "Loading a directory is not supported" +msgstr "" + +#: usr/local/www/edit.php:50 usr/local/www/edit.php:53 +#: usr/local/www/edit.php:52 usr/local/www/edit.php:52 +msgid "File does not exist or is not a regular file" +msgstr "" + +#: usr/local/www/edit.php:54 usr/local/www/edit.php:57 +#: usr/local/www/edit.php:56 usr/local/www/edit.php:56 +msgid "Failed to read file" +msgstr "" + +#: usr/local/www/edit.php:74 usr/local/www/edit.php:77 +#: usr/local/www/edit.php:77 +msgid "Failed to write file" +msgstr "" + +#: usr/local/www/edit.php:76 usr/local/www/edit.php:79 +#: usr/local/www/edit.php:79 +msgid "Error while writing file" +msgstr "" + +#: usr/local/www/edit.php:78 usr/local/www/edit.php:81 +#: usr/local/www/edit.php:81 +msgid "File successfully saved" +msgstr "" + +#: usr/local/www/edit.php:98 usr/local/www/edit.php:101 +#: usr/local/www/edit.php:101 +msgid "Loading file" +msgstr "" + +#: usr/local/www/edit.php:117 usr/local/www/edit.php:120 +#: usr/local/www/edit.php:121 usr/local/www/edit.php:121 +msgid "File successfully loaded" +msgstr "" + +#: usr/local/www/edit.php:140 usr/local/www/edit.php:143 +#: usr/local/www/edit.php:144 usr/local/www/edit.php:144 +msgid "Saving file" +msgstr "" + +#: usr/local/www/edit.php:177 usr/local/www/edit.php:180 +#: usr/local/www/edit.php:181 usr/local/www/edit.php:181 +msgid "Save / Load from path" +msgstr "" + +#: usr/local/www/edit.php:179 usr/local/www/edit.php:182 +#: usr/local/www/edit.php:183 usr/local/www/edit.php:183 +msgid "Load" +msgstr "" + +#: usr/local/www/edit.php:180 usr/local/www/edit.php:183 +#: usr/local/www/edit.php:184 usr/local/www/edit.php:184 +msgid "Browse" +msgstr "" + +#: usr/local/www/services_captiveportal.php:63 +#: usr/local/www/services_captiveportal_filemanager.php:75 +#: usr/local/www/services_captiveportal_filemanager.php:150 +#: usr/local/www/services_captiveportal_ip.php:64 +#: usr/local/www/services_captiveportal_ip.php:104 +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_mac.php:63 +#: usr/local/www/services_captiveportal_mac.php:154 +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_captiveportal_hostname.php:66 +#: usr/local/www/services_captiveportal_hostname.php:109 +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers.php:403 +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_captiveportal_vouchers.php:410 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/services_captiveportal_vouchers.php:423 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_ip.php:102 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/services_captiveportal_mac.php:152 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/services_captiveportal_hostname.php:107 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/services_captiveportal_filemanager.php:147 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:432 +#: usr/local/www/services_captiveportal_mac.php:162 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_ip.php:102 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:437 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/services_captiveportal_hostname.php:107 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/services_captiveportal_filemanager.php:147 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/services_captiveportal_mac.php:162 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +msgid "Captive portal" +msgstr "" + +#: usr/local/www/services_captiveportal.php:146 +#: usr/local/www/services_captiveportal_zones_edit.php:61 +#: usr/local/www/services_captiveportal_zones_edit.php:99 +#: usr/local/www/services_captiveportal.php:147 +#: usr/local/www/services_captiveportal.php:153 +#: usr/local/www/services_captiveportal_zones_edit.php:59 +#: usr/local/www/services_captiveportal_zones_edit.php:101 +#: usr/local/www/services_captiveportal_zones_edit.php:97 +#: usr/local/www/services_captiveportal.php:155 +#: usr/local/www/services_captiveportal_zones_edit.php:59 +#: usr/local/www/services_captiveportal_zones_edit.php:97 +#: usr/local/www/services_captiveportal.php:155 +msgid "Zone name" +msgstr "" + +#: usr/local/www/services_captiveportal.php:154 +#: usr/local/www/services_captiveportal.php:155 +#: usr/local/www/services_captiveportal.php:161 +#: usr/local/www/services_captiveportal.php:163 +#: usr/local/www/services_captiveportal.php:163 +#, php-format +msgid "" +"The captive portal cannot be used on interface %s since it is part of a " +"bridge." +msgstr "" + +#: usr/local/www/services_captiveportal.php:158 +#: usr/local/www/services_captiveportal.php:159 +#: usr/local/www/services_captiveportal.php:165 +#: usr/local/www/services_captiveportal.php:167 +#: usr/local/www/services_captiveportal.php:167 +#, php-format +msgid "" +"The captive portal cannot be used on interface %s since it is used already " +"on %s instance." +msgstr "" + +#: usr/local/www/services_captiveportal.php:166 +#: usr/local/www/services_captiveportal.php:167 +msgid "Certificate and key must be specified for HTTPS login." +msgstr "" + +#: usr/local/www/services_captiveportal.php:169 +#: usr/local/www/system_camanager.php:168 +#: usr/local/www/system_certmanager.php:168 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/services_captiveportal.php:170 +#: usr/local/www/system_camanager.php:170 +#: usr/local/www/system_certmanager.php:199 +#: usr/local/www/system_camanager.php:170 +#: usr/local/www/system_certmanager.php:199 +msgid "This certificate does not appear to be valid." +msgstr "" + +#: usr/local/www/services_captiveportal.php:171 +#: usr/local/www/services_captiveportal.php:172 +msgid "This intermmediate certificate does not appear to be valid." +msgstr "" + +#: usr/local/www/services_captiveportal.php:173 +#: usr/local/www/services_captiveportal.php:174 +msgid "This key does not appear to be valid." +msgstr "" + +#: usr/local/www/services_captiveportal.php:177 +#: usr/local/www/services_captiveportal.php:178 +#: usr/local/www/services_captiveportal.php:176 +#: usr/local/www/services_captiveportal.php:178 +msgid "The HTTPS server name must be specified for HTTPS login." +msgstr "" + +#: usr/local/www/services_captiveportal.php:183 +#: usr/local/www/services_captiveportal.php:184 +#: usr/local/www/services_captiveportal.php:182 +#: usr/local/www/services_captiveportal.php:185 +#: usr/local/www/services_captiveportal.php:185 +msgid "The timeout must be at least 1 minute." +msgstr "" + +#: usr/local/www/services_captiveportal.php:186 +#: usr/local/www/services_captiveportal.php:187 +#: usr/local/www/services_captiveportal.php:185 +#: usr/local/www/services_captiveportal.php:203 +#: usr/local/www/services_captiveportal.php:203 +msgid "The idle timeout must be at least 1 minute." +msgstr "" + +#: usr/local/www/services_captiveportal.php:189 +#: usr/local/www/services_captiveportal.php:190 +#: usr/local/www/services_captiveportal.php:188 +#: usr/local/www/services_captiveportal.php:206 +#: usr/local/www/services_captiveportal.php:206 +msgid "The pass-through credit count must be a number or left blank." +msgstr "" + +#: usr/local/www/services_captiveportal.php:192 +#: usr/local/www/services_captiveportal.php:193 +#: usr/local/www/services_captiveportal.php:191 +#: usr/local/www/services_captiveportal.php:209 +#: usr/local/www/services_captiveportal.php:209 +msgid "" +"The waiting period to restore pass-through credits must be above 0 hours." +msgstr "" + +#: usr/local/www/services_captiveportal.php:196 +#: usr/local/www/services_captiveportal.php:199 +#: usr/local/www/services_captiveportal.php:202 +#: usr/local/www/services_captiveportal.php:205 +#: usr/local/www/services_captiveportal_ip_edit.php:107 +#: usr/local/www/services_captiveportal.php:197 +#: usr/local/www/services_captiveportal.php:200 +#: usr/local/www/services_captiveportal.php:203 +#: usr/local/www/services_captiveportal.php:206 +#: usr/local/www/services_captiveportal.php:195 +#: usr/local/www/services_captiveportal.php:198 +#: usr/local/www/services_captiveportal.php:201 +#: usr/local/www/services_captiveportal.php:204 +#: usr/local/www/services_captiveportal_ip_edit.php:105 +#: usr/local/www/services_captiveportal_ip_edit.php:104 +#: usr/local/www/services_captiveportal.php:213 +#: usr/local/www/services_captiveportal.php:216 +#: usr/local/www/services_captiveportal.php:219 +#: usr/local/www/services_captiveportal.php:222 +#: usr/local/www/services_captiveportal_ip_edit.php:104 +#: usr/local/www/services_captiveportal.php:213 +#: usr/local/www/services_captiveportal.php:216 +#: usr/local/www/services_captiveportal.php:219 +#: usr/local/www/services_captiveportal.php:222 +#, php-format +msgid "A valid IP address must be specified. [%s]" +msgstr "" + +#: usr/local/www/services_captiveportal.php:208 +#: usr/local/www/services_captiveportal.php:211 +#: usr/local/www/services_captiveportal.php:214 +#: usr/local/www/services_captiveportal.php:217 +#: usr/local/www/services_captiveportal.php:220 +#: usr/local/www/services_captiveportal.php:209 +#: usr/local/www/services_captiveportal.php:212 +#: usr/local/www/services_captiveportal.php:215 +#: usr/local/www/services_captiveportal.php:218 +#: usr/local/www/services_captiveportal.php:221 +#: usr/local/www/services_captiveportal.php:207 +#: usr/local/www/services_captiveportal.php:210 +#: usr/local/www/services_captiveportal.php:213 +#: usr/local/www/services_captiveportal.php:216 +#: usr/local/www/services_captiveportal.php:219 +#: usr/local/www/services_captiveportal.php:225 +#: usr/local/www/services_captiveportal.php:228 +#: usr/local/www/services_captiveportal.php:231 +#: usr/local/www/services_captiveportal.php:234 +#: usr/local/www/services_captiveportal.php:237 +#: usr/local/www/services_captiveportal.php:225 +#: usr/local/www/services_captiveportal.php:228 +#: usr/local/www/services_captiveportal.php:231 +#: usr/local/www/services_captiveportal.php:234 +#: usr/local/www/services_captiveportal.php:237 +#, php-format +msgid "A valid port number must be specified. [%s]" +msgstr "" + +#: usr/local/www/services_captiveportal.php:223 +#: usr/local/www/services_captiveportal.php:224 +#: usr/local/www/services_captiveportal.php:222 +#: usr/local/www/services_captiveportal.php:240 +#: usr/local/www/services_captiveportal.php:240 +msgid "" +"The maximum number of concurrent connections per client IP address may not " +"be larger than the global maximum." +msgstr "" + +#: usr/local/www/services_captiveportal.php:421 +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal.php:423 +#: usr/local/www/services_captiveportal.php:441 +#: usr/local/www/services_captiveportal.php:441 +msgid "Captive portal(s)" +msgstr "" + +#: usr/local/www/services_captiveportal.php:422 +#: usr/local/www/services_captiveportal_filemanager.php:151 +#: usr/local/www/services_captiveportal_ip.php:105 +#: usr/local/www/services_captiveportal_mac.php:155 +#: usr/local/www/services_captiveportal_hostname.php:110 +#: usr/local/www/services_captiveportal_vouchers.php:404 +#: usr/local/www/services_captiveportal_vouchers.php:411 +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_vouchers.php:424 +#: usr/local/www/services_captiveportal_ip.php:103 +#: usr/local/www/services_captiveportal_mac.php:153 +#: usr/local/www/services_captiveportal_hostname.php:108 +#: usr/local/www/services_captiveportal.php:424 +#: usr/local/www/services_captiveportal_filemanager.php:148 +#: usr/local/www/services_captiveportal_vouchers.php:433 +#: usr/local/www/services_captiveportal_mac.php:163 +#: usr/local/www/services_captiveportal.php:442 +#: usr/local/www/services_captiveportal_ip.php:103 +#: usr/local/www/services_captiveportal_vouchers.php:438 +#: usr/local/www/services_captiveportal_hostname.php:108 +#: usr/local/www/services_captiveportal_filemanager.php:148 +#: usr/local/www/services_captiveportal.php:442 +#: usr/local/www/services_captiveportal_mac.php:163 +msgid "Pass-through MAC" +msgstr "" + +#: usr/local/www/services_captiveportal.php:423 +#: usr/local/www/services_captiveportal_filemanager.php:152 +#: usr/local/www/services_captiveportal_ip.php:106 +#: usr/local/www/services_captiveportal_mac.php:156 +#: usr/local/www/services_captiveportal_vouchers.php:405 +#: usr/local/www/services_captiveportal_vouchers.php:412 +#: usr/local/www/services_captiveportal.php:427 +#: usr/local/www/services_captiveportal_vouchers.php:425 +#: usr/local/www/services_captiveportal_ip.php:104 +#: usr/local/www/services_captiveportal_mac.php:154 +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal_filemanager.php:149 +#: usr/local/www/services_captiveportal_vouchers.php:434 +#: usr/local/www/services_captiveportal_mac.php:164 +#: usr/local/www/services_captiveportal.php:443 +#: usr/local/www/services_captiveportal_ip.php:104 +#: usr/local/www/services_captiveportal_vouchers.php:439 +#: usr/local/www/services_captiveportal_filemanager.php:149 +#: usr/local/www/services_captiveportal.php:443 +#: usr/local/www/services_captiveportal_mac.php:164 +msgid "Allowed IP addresses" +msgstr "" + +#: usr/local/www/services_captiveportal.php:424 +#: usr/local/www/services_captiveportal_filemanager.php:153 +#: usr/local/www/services_captiveportal_ip.php:107 +#: usr/local/www/services_captiveportal_mac.php:157 +#: usr/local/www/services_captiveportal_hostname.php:112 +#: usr/local/www/services_captiveportal_vouchers.php:406 +#: usr/local/www/services_captiveportal_vouchers.php:413 +#: usr/local/www/services_captiveportal.php:428 +#: usr/local/www/services_captiveportal_vouchers.php:426 +#: usr/local/www/services_captiveportal_ip.php:105 +#: usr/local/www/services_captiveportal_mac.php:155 +#: usr/local/www/services_captiveportal_hostname.php:110 +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_filemanager.php:150 +#: usr/local/www/services_captiveportal_vouchers.php:435 +#: usr/local/www/services_captiveportal_mac.php:165 +#: usr/local/www/services_captiveportal.php:444 +#: usr/local/www/services_captiveportal_ip.php:105 +#: usr/local/www/services_captiveportal_vouchers.php:440 +#: usr/local/www/services_captiveportal_hostname.php:110 +#: usr/local/www/services_captiveportal_filemanager.php:150 +#: usr/local/www/services_captiveportal.php:444 +#: usr/local/www/services_captiveportal_mac.php:165 +msgid "Allowed Hostnames" +msgstr "" + +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal.php:587 +#: usr/local/www/services_captiveportal_filemanager.php:154 +#: usr/local/www/services_captiveportal_ip.php:108 +#: usr/local/www/services_captiveportal_mac.php:158 +#: usr/local/www/services_captiveportal_hostname.php:113 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers.php:407 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_vouchers.php:414 +#: usr/local/www/services_captiveportal.php:429 +#: usr/local/www/services_captiveportal.php:592 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/services_captiveportal_vouchers.php:427 +#: usr/local/www/services_captiveportal_ip.php:106 +#: usr/local/www/services_captiveportal_mac.php:156 +#: usr/local/www/services_captiveportal_hostname.php:111 +#: usr/local/www/services_captiveportal.php:427 +#: usr/local/www/services_captiveportal.php:590 +#: usr/local/www/services_captiveportal_filemanager.php:151 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:436 +#: usr/local/www/services_captiveportal.php:584 +#: usr/local/www/services_captiveportal_mac.php:166 +#: usr/local/www/services_captiveportal.php:445 +#: usr/local/www/services_captiveportal.php:600 +#: usr/local/www/services_captiveportal_ip.php:106 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:441 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_hostname.php:111 +#: usr/local/www/services_captiveportal_filemanager.php:151 +#: usr/local/www/services_captiveportal.php:445 +#: usr/local/www/services_captiveportal.php:600 +#: usr/local/www/services_captiveportal_mac.php:166 +msgid "Vouchers" +msgstr "" + +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_filemanager.php:155 +#: usr/local/www/services_captiveportal_ip.php:109 +#: usr/local/www/services_captiveportal_mac.php:159 +#: usr/local/www/services_captiveportal_hostname.php:114 +#: usr/local/www/services_captiveportal_vouchers.php:408 +#: usr/local/www/services_captiveportal_vouchers.php:415 +#: usr/local/www/services_captiveportal.php:430 +#: usr/local/www/services_captiveportal_vouchers.php:428 +#: usr/local/www/services_captiveportal_ip.php:107 +#: usr/local/www/services_captiveportal_mac.php:157 +#: usr/local/www/services_captiveportal_hostname.php:112 +#: usr/local/www/services_captiveportal.php:428 +#: usr/local/www/services_captiveportal_filemanager.php:152 +#: usr/local/www/services_captiveportal_vouchers.php:437 +#: usr/local/www/services_captiveportal_mac.php:167 +#: usr/local/www/services_captiveportal.php:446 +#: usr/local/www/services_captiveportal_ip.php:107 +#: usr/local/www/services_captiveportal_vouchers.php:442 +#: usr/local/www/services_captiveportal_hostname.php:112 +#: usr/local/www/services_captiveportal_filemanager.php:152 +#: usr/local/www/services_captiveportal.php:446 +#: usr/local/www/services_captiveportal_mac.php:167 +msgid "File Manager" +msgstr "" + +#: usr/local/www/services_captiveportal.php:436 +#: usr/local/www/services_captiveportal.php:440 +#: usr/local/www/services_captiveportal.php:438 +#: usr/local/www/services_captiveportal.php:456 +#: usr/local/www/services_captiveportal.php:456 +msgid "Enable captive portal" +msgstr "" + +#: usr/local/www/services_captiveportal.php:450 +#: usr/local/www/services_captiveportal.php:455 +#: usr/local/www/services_captiveportal.php:453 +#: usr/local/www/services_captiveportal.php:471 +#: usr/local/www/services_captiveportal.php:471 +msgid "Select the interface(s) to enable for captive portal." +msgstr "" + +#: usr/local/www/services_captiveportal.php:453 +#: usr/local/www/services_captiveportal.php:458 +#: usr/local/www/services_captiveportal.php:456 +#: usr/local/www/services_captiveportal.php:474 +#: usr/local/www/services_captiveportal.php:474 +msgid "Maximum concurrent connections" +msgstr "" + +#: usr/local/www/services_captiveportal.php:457 +#: usr/local/www/services_captiveportal.php:462 +#: usr/local/www/services_captiveportal.php:460 +#: usr/local/www/services_captiveportal.php:478 +#: usr/local/www/services_captiveportal.php:478 +msgid "per client IP address (0 = no limit)" +msgstr "" + +#: usr/local/www/services_captiveportal.php:460 +msgid "" +"This setting limits the number of concurrent connections to the captive " +"portal HTTP(S) server. This does not set how many users can be logged in to " +"the captive portal, but rather how many users can load the portal page or " +"authenticate at the same time! Default is 4 connections per client IP " +"address, with a total maximum of 16 connections." +msgstr "" + +#: usr/local/www/services_captiveportal.php:468 +#: usr/local/www/services_captiveportal.php:475 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/system_advanced_misc.php:426 +#: usr/local/www/system_advanced_misc.php:469 +#: usr/local/www/services_captiveportal.php:473 +#: usr/local/www/services_captiveportal.php:480 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/system_advanced_misc.php:518 +#: usr/local/www/services_captiveportal.php:471 +#: usr/local/www/services_captiveportal.php:478 +#: usr/local/www/system_advanced_misc.php:530 +#: usr/local/www/system_advanced_misc.php:651 +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:496 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/system_advanced_misc.php:651 +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:496 +msgid "minutes" +msgstr "" + +#: usr/local/www/services_captiveportal.php:469 +#: usr/local/www/services_captiveportal.php:474 +#: usr/local/www/services_captiveportal.php:472 +#: usr/local/www/services_captiveportal.php:490 +#: usr/local/www/services_captiveportal.php:490 +msgid "" +"Clients will be disconnected after this amount of inactivity. They may log " +"in again immediately, though. Leave this field blank for no idle timeout." +msgstr "" + +#: usr/local/www/services_captiveportal.php:472 +#: usr/local/www/services_captiveportal.php:477 +#: usr/local/www/services_captiveportal.php:475 +#: usr/local/www/services_captiveportal.php:493 +#: usr/local/www/services_captiveportal.php:493 +msgid "Hard timeout" +msgstr "" + +#: usr/local/www/services_captiveportal.php:476 +#: usr/local/www/services_captiveportal.php:481 +#: usr/local/www/services_captiveportal.php:479 +#: usr/local/www/services_captiveportal.php:497 +#: usr/local/www/services_captiveportal.php:497 +msgid "" +"Clients will be disconnected after this amount of time, regardless of " +"activity. They may log in again immediately, though. Leave this field blank " +"for no hard timeout (not recommended unless an idle timeout is set)." +msgstr "" + +#: usr/local/www/services_captiveportal.php:479 +#: usr/local/www/services_captiveportal.php:484 +#: usr/local/www/services_captiveportal.php:482 +#: usr/local/www/services_captiveportal.php:500 +#: usr/local/www/services_captiveportal.php:500 +msgid "Pass-through credits allowed per MAC address" +msgstr "" + +#: usr/local/www/services_captiveportal.php:482 +#: usr/local/www/services_captiveportal.php:487 +#: usr/local/www/services_captiveportal.php:485 +#: usr/local/www/services_captiveportal.php:503 +#: usr/local/www/services_captiveportal.php:503 +msgid "per client MAC address (0 or blank = none)" +msgstr "" + +#: usr/local/www/services_captiveportal.php:483 +#: usr/local/www/services_captiveportal.php:488 +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/services_captiveportal.php:504 +#: usr/local/www/services_captiveportal.php:504 +msgid "" +"This setting allows passing through the captive portal without " +"authentication a limited number of times per MAC address. Once used up, the " +"client can only log in with valid credentials until the waiting period " +"specified below has expired. Recommended to set a hard timeout and/or idle " +"timeout when using this for it to be effective." +msgstr "" + +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/services_captiveportal.php:491 +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:507 +#: usr/local/www/services_captiveportal.php:507 +msgid "Waiting period to restore pass-through credits" +msgstr "" + +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:494 +#: usr/local/www/services_captiveportal.php:492 +#: usr/local/www/services_captiveportal.php:510 +#: usr/local/www/services_captiveportal.php:510 +msgid "hours" +msgstr "" + +#: usr/local/www/services_captiveportal.php:490 +#: usr/local/www/services_captiveportal.php:495 +#: usr/local/www/services_captiveportal.php:493 +#: usr/local/www/services_captiveportal.php:511 +#: usr/local/www/services_captiveportal.php:511 +msgid "" +"Clients will have their available pass-through credits restored to the " +"original count after this amount of time since using the first one. This " +"must be above 0 hours if pass-through credits are enabled." +msgstr "" + +#: usr/local/www/services_captiveportal.php:493 +#: usr/local/www/services_captiveportal.php:498 +#: usr/local/www/services_captiveportal.php:496 +#: usr/local/www/services_captiveportal.php:514 +#: usr/local/www/services_captiveportal.php:514 +msgid "Reset waiting period on attempted access" +msgstr "" + +#: usr/local/www/services_captiveportal.php:496 +#: usr/local/www/services_captiveportal.php:501 +#: usr/local/www/services_captiveportal.php:499 +#: usr/local/www/services_captiveportal.php:517 +#: usr/local/www/services_captiveportal.php:517 +msgid "Enable waiting period reset on attempted access" +msgstr "" + +#: usr/local/www/services_captiveportal.php:497 +#: usr/local/www/services_captiveportal.php:502 +#: usr/local/www/services_captiveportal.php:500 +#: usr/local/www/services_captiveportal.php:518 +#: usr/local/www/services_captiveportal.php:518 +msgid "" +"If enabled, the waiting period is reset to the original duration if access " +"is attempted when all pass-through credits have already been exhausted." +msgstr "" + +#: usr/local/www/services_captiveportal.php:500 +#: usr/local/www/services_captiveportal.php:505 +#: usr/local/www/services_captiveportal.php:503 +#: usr/local/www/services_captiveportal.php:521 +#: usr/local/www/services_captiveportal.php:521 +msgid "Logout popup window" +msgstr "" + +#: usr/local/www/services_captiveportal.php:503 +#: usr/local/www/services_captiveportal.php:508 +#: usr/local/www/services_captiveportal.php:506 +#: usr/local/www/services_captiveportal.php:524 +#: usr/local/www/services_captiveportal.php:524 +msgid "Enable logout popup window" +msgstr "" + +#: usr/local/www/services_captiveportal.php:504 +#: usr/local/www/services_captiveportal.php:509 +#: usr/local/www/services_captiveportal.php:507 +#: usr/local/www/services_captiveportal.php:525 +#: usr/local/www/services_captiveportal.php:525 +msgid "" +"If enabled, a popup window will appear when clients are allowed through the " +"captive portal. This allows clients to explicitly disconnect themselves " +"before the idle or hard timeout occurs." +msgstr "" + +#: usr/local/www/services_captiveportal.php:507 +#: usr/local/www/services_captiveportal.php:512 +#: usr/local/www/services_captiveportal.php:510 +#: usr/local/www/services_captiveportal.php:528 +#: usr/local/www/services_captiveportal.php:528 +msgid "Pre-authentication redirect URL" +msgstr "" + +#: usr/local/www/services_captiveportal.php:510 +#: usr/local/www/services_captiveportal.php:515 +#: usr/local/www/services_captiveportal.php:513 +#: usr/local/www/services_captiveportal.php:531 +#: usr/local/www/services_captiveportal.php:531 +#, php-format +msgid "" +"Use this field to set $PORTAL_REDIRURL$ variable which can be accessed using " +"your custom captive portal index.php page or error pages." +msgstr "" + +#: usr/local/www/services_captiveportal.php:514 +#: usr/local/www/services_captiveportal.php:519 +#: usr/local/www/services_captiveportal.php:517 +#: usr/local/www/services_captiveportal.php:535 +#: usr/local/www/services_captiveportal.php:535 +msgid "After authentication Redirection URL" +msgstr "" + +#: usr/local/www/services_captiveportal.php:518 +#: usr/local/www/services_captiveportal.php:523 +#: usr/local/www/services_captiveportal.php:521 +#: usr/local/www/services_captiveportal.php:539 +#: usr/local/www/services_captiveportal.php:539 +msgid "" +"If you provide a URL here, clients will be redirected to that URL instead of " +"the one they initially tried to access after they've authenticated." +msgstr "" + +#: usr/local/www/services_captiveportal.php:522 +#: usr/local/www/services_captiveportal.php:527 +#: usr/local/www/services_captiveportal.php:525 +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:543 +msgid "Concurrent user logins" +msgstr "" + +#: usr/local/www/services_captiveportal.php:525 +#: usr/local/www/services_captiveportal.php:530 +#: usr/local/www/services_captiveportal.php:528 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:546 +msgid "Disable concurrent logins" +msgstr "" + +#: usr/local/www/services_captiveportal.php:526 +#: usr/local/www/services_captiveportal.php:531 +#: usr/local/www/services_captiveportal.php:529 +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:547 +msgid "" +"If this option is set, only the most recent login per username will be " +"active. Subsequent logins will cause machines previously logged in with the " +"same username to be disconnected." +msgstr "" + +#: usr/local/www/services_captiveportal.php:529 +#: usr/local/www/services_captiveportal.php:534 +#: usr/local/www/services_captiveportal.php:532 +#: usr/local/www/services_captiveportal.php:550 +#: usr/local/www/services_captiveportal.php:550 +msgid "MAC filtering" +msgstr "" + +#: usr/local/www/services_captiveportal.php:532 +#: usr/local/www/services_captiveportal.php:537 +#: usr/local/www/services_captiveportal.php:535 +#: usr/local/www/services_captiveportal.php:553 +#: usr/local/www/services_captiveportal.php:553 +msgid "Disable MAC filtering" +msgstr "" + +#: usr/local/www/services_captiveportal.php:533 +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:536 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:554 +msgid "" +"If this option is set, no attempts will be made to ensure that the MAC " +"address of clients stays the same while they're logged in.This is required " +"when the MAC address of the client cannot be determined (usually because " +"there are routers between" +msgstr "" + +#: usr/local/www/services_captiveportal.php:534 +#: usr/local/www/services_captiveportal.php:539 +#: usr/local/www/services_captiveportal.php:537 +#: usr/local/www/services_captiveportal.php:555 +#: usr/local/www/services_captiveportal.php:555 +msgid "and the clients)." +msgstr "" + +#: usr/local/www/services_captiveportal.php:535 +#: usr/local/www/services_captiveportal.php:540 +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:556 +#: usr/local/www/services_captiveportal.php:556 +msgid "If this is enabled, RADIUS MAC authentication cannot be used." +msgstr "" + +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:541 +#: usr/local/www/services_captiveportal.php:559 +#: usr/local/www/services_captiveportal.php:559 +msgid "Pass-through MAC Auto Entry" +msgstr "" + +#: usr/local/www/services_captiveportal.php:541 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:544 +#: usr/local/www/services_captiveportal.php:562 +#: usr/local/www/services_captiveportal.php:562 +msgid "Enable Pass-through MAC automatic additions" +msgstr "" + +#: usr/local/www/services_captiveportal.php:542 +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:545 +#: usr/local/www/services_captiveportal.php:563 +#: usr/local/www/services_captiveportal.php:563 +msgid "" +"If this option is set, a MAC passthrough entry is automatically added after " +"the user has successfully authenticated. Users of that MAC address will " +"never have to authenticate again." +msgstr "" + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +msgid "" +"To remove the passthrough MAC entry you either have to log in and remove it " +"manually from the" +msgstr "" + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +msgid "Pass-through MAC tab" +msgstr "" + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +msgid "or send a POST from another system to remove it." +msgstr "" + +#: usr/local/www/services_captiveportal.php:544 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:565 +#: usr/local/www/services_captiveportal.php:565 +msgid "" +"If this is enabled, RADIUS MAC authentication cannot be used. Also, the " +"logout window will not be shown." +msgstr "" + +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:550 +#: usr/local/www/services_captiveportal.php:568 +#: usr/local/www/services_captiveportal.php:568 +msgid "Enable Pass-through MAC automatic addition with username" +msgstr "" + +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:553 +#: usr/local/www/services_captiveportal.php:551 +#: usr/local/www/services_captiveportal.php:569 +#: usr/local/www/services_captiveportal.php:569 +msgid "" +"If this option is set, with the automatically MAC passthrough entry created " +"the username, used during authentication, will be saved." +msgstr "" + +#: usr/local/www/services_captiveportal.php:553 +#: usr/local/www/services_captiveportal.php:558 +#: usr/local/www/services_captiveportal.php:556 +#: usr/local/www/services_captiveportal.php:574 +#: usr/local/www/services_captiveportal.php:574 +msgid "Per-user bandwidth restriction" +msgstr "" + +#: usr/local/www/services_captiveportal.php:556 +#: usr/local/www/services_captiveportal.php:561 +#: usr/local/www/services_captiveportal.php:559 +#: usr/local/www/services_captiveportal.php:577 +#: usr/local/www/services_captiveportal.php:577 +msgid "Enable per-user bandwidth restriction" +msgstr "" + +#: usr/local/www/services_captiveportal.php:559 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:562 +#: usr/local/www/services_captiveportal.php:580 +#: usr/local/www/services_captiveportal.php:580 +msgid "Default download" +msgstr "" + +#: usr/local/www/services_captiveportal.php:563 +#: usr/local/www/services_captiveportal.php:568 +#: usr/local/www/services_captiveportal.php:566 +#: usr/local/www/services_captiveportal.php:584 +#: usr/local/www/services_captiveportal.php:584 +msgid "Default upload" +msgstr "" + +#: usr/local/www/services_captiveportal.php:567 +#: usr/local/www/services_captiveportal.php:572 +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:588 +#: usr/local/www/services_captiveportal.php:588 +msgid "" +"If this option is set, the captive portal will restrict each user who logs " +"in to the specified default bandwidth. RADIUS can override the default " +"settings. Leave empty or set to 0 for no limit." +msgstr "" + +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:575 +#: usr/local/www/services_captiveportal.php:573 +msgid "PMS authentication" +msgstr "" + +#: usr/local/www/services_captiveportal.php:573 +#: usr/local/www/services_captiveportal.php:578 +#: usr/local/www/services_captiveportal.php:576 +msgid "Enable PMS authentication" +msgstr "" + +#: usr/local/www/services_captiveportal.php:574 +#: usr/local/www/services_captiveportal.php:579 +#: usr/local/www/services_captiveportal.php:577 +msgid "" +"If this option is set, users will be authenticated through the PMS backend " +"if they fill the necessary information in the login page." +msgstr "" + +#: usr/local/www/services_captiveportal.php:583 +#: usr/local/www/services_captiveportal.php:588 +#: usr/local/www/services_captiveportal.php:586 +#: usr/local/www/services_captiveportal.php:580 +#: usr/local/www/services_captiveportal.php:596 +#: usr/local/www/services_captiveportal.php:596 +msgid "No Authentication" +msgstr "" + +#: usr/local/www/services_captiveportal.php:587 +#: usr/local/www/diag_ipsec.php:194 +#: usr/local/www/services_captiveportal.php:592 +#: usr/local/www/diag_ipsec.php:195 +#: usr/local/www/services_captiveportal.php:590 +#: usr/local/www/diag_ipsec.php:196 +#: usr/local/www/services_captiveportal.php:584 +#: usr/local/www/services_captiveportal.php:600 +#: usr/local/www/diag_ipsec.php:196 +#: usr/local/www/services_captiveportal.php:600 +msgid "Local" +msgstr "" + +#: usr/local/www/services_captiveportal.php:587 usr/local/www/fbegin.inc:93 +#: usr/local/www/fbegin.inc:95 usr/local/www/system_usermanager.php:54 +#: usr/local/www/fbegin.inc:110 usr/local/www/fbegin.inc:112 +#: usr/local/www/services_captiveportal.php:592 usr/local/www/fbegin.inc:119 +#: usr/local/www/fbegin.inc:121 usr/local/www/services_captiveportal.php:590 +#: usr/local/www/services_captiveportal.php:584 usr/local/www/fbegin.inc:111 +#: usr/local/www/fbegin.inc:113 usr/local/www/services_captiveportal.php:600 +#: usr/local/www/services_captiveportal.php:600 usr/local/www/fbegin.inc:111 +#: usr/local/www/fbegin.inc:113 usr/local/www/system_usermanager.php:54 +msgid "User Manager" +msgstr "" + +#: usr/local/www/services_captiveportal.php:591 +#: usr/local/www/services_captiveportal.php:596 +#: usr/local/www/services_captiveportal.php:594 +#: usr/local/www/services_captiveportal.php:612 +#: usr/local/www/services_captiveportal.php:612 +msgid "RADIUS Authentication" +msgstr "" + +#: usr/local/www/services_captiveportal.php:599 +#: usr/local/www/services_captiveportal.php:635 +#: usr/local/www/services_captiveportal.php:678 +#: usr/local/www/services_captiveportal.php:633 +#: usr/local/www/services_captiveportal.php:676 +#: usr/local/www/services_captiveportal.php:634 +#: usr/local/www/services_captiveportal.php:677 +#: usr/local/www/services_captiveportal.php:650 +#: usr/local/www/services_captiveportal.php:693 +#: usr/local/www/services_captiveportal.php:650 +#: usr/local/www/services_captiveportal.php:693 +msgid "Primary RADIUS server" +msgstr "" + +#: usr/local/www/services_captiveportal.php:604 +#: usr/local/www/services_captiveportal.php:640 +#: usr/local/www/services_captiveportal.php:638 +#: usr/local/www/services_captiveportal.php:639 +#: usr/local/www/services_captiveportal.php:655 +#: usr/local/www/services_captiveportal.php:655 +msgid "" +"Enter the IP address of the RADIUS server which users of the captive portal " +"have to authenticate against." +msgstr "" + +#: usr/local/www/services_captiveportal.php:609 +#: usr/local/www/services_captiveportal.php:645 +#: usr/local/www/services_captiveportal.php:643 +#: usr/local/www/services_captiveportal.php:644 +#: usr/local/www/services_captiveportal.php:660 +#: usr/local/www/services_captiveportal.php:660 +msgid "Leave this field blank to use the default port (1812)." +msgstr "" + +#: usr/local/www/services_captiveportal.php:612 +#: usr/local/www/services_captiveportal.php:632 +#: usr/local/www/services_captiveportal.php:651 +#: usr/local/www/services_captiveportal.php:670 +#: usr/local/www/services_captiveportal.php:725 +#: usr/local/www/services_captiveportal.php:648 +#: usr/local/www/services_captiveportal.php:668 +#: usr/local/www/services_captiveportal.php:690 +#: usr/local/www/services_captiveportal.php:709 +#: usr/local/www/services_captiveportal.php:767 +#: usr/local/www/services_captiveportal.php:646 +#: usr/local/www/services_captiveportal.php:666 +#: usr/local/www/services_captiveportal.php:688 +#: usr/local/www/services_captiveportal.php:707 +#: usr/local/www/services_captiveportal.php:765 +#: usr/local/www/services_captiveportal.php:647 +#: usr/local/www/services_captiveportal.php:667 +#: usr/local/www/services_captiveportal.php:689 +#: usr/local/www/services_captiveportal.php:708 +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:705 +#: usr/local/www/services_captiveportal.php:724 +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:705 +#: usr/local/www/services_captiveportal.php:724 +msgid "Shared secret" +msgstr "" + +#: usr/local/www/services_captiveportal.php:614 +#: usr/local/www/services_captiveportal.php:650 +#: usr/local/www/services_captiveportal.php:648 +#: usr/local/www/services_captiveportal.php:649 +#: usr/local/www/services_captiveportal.php:665 +#: usr/local/www/services_captiveportal.php:665 +msgid "" +"Leave this field blank to not use a RADIUS shared secret (not recommended)." +msgstr "" + +#: usr/local/www/services_captiveportal.php:620 usr/local/www/vpn_pptp.php:440 +#: usr/local/www/services_captiveportal.php:656 +#: usr/local/www/services_captiveportal.php:697 usr/local/www/vpn_pptp.php:442 +#: usr/local/www/services_captiveportal.php:654 +#: usr/local/www/services_captiveportal.php:695 +#: usr/local/www/services_captiveportal.php:655 +#: usr/local/www/services_captiveportal.php:696 usr/local/www/vpn_pptp.php:445 +#: usr/local/www/services_captiveportal.php:671 +#: usr/local/www/services_captiveportal.php:712 +#: usr/local/www/services_captiveportal.php:671 +#: usr/local/www/services_captiveportal.php:712 usr/local/www/vpn_pptp.php:445 +msgid "Secondary RADIUS server" +msgstr "" + +#: usr/local/www/services_captiveportal.php:625 +#: usr/local/www/services_captiveportal.php:661 +#: usr/local/www/services_captiveportal.php:659 +#: usr/local/www/services_captiveportal.php:660 +#: usr/local/www/services_captiveportal.php:676 +#: usr/local/www/services_captiveportal.php:676 +msgid "" +"If you have a second RADIUS server, you can activate it by entering its IP " +"address here." +msgstr "" + +#: usr/local/www/services_captiveportal.php:639 +msgid "Tertiary RADIUS server" +msgstr "" + +#: usr/local/www/services_captiveportal.php:644 +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:681 +#: usr/local/www/services_captiveportal.php:682 +#: usr/local/www/services_captiveportal.php:698 +#: usr/local/www/services_captiveportal.php:698 +msgid "" +"If you have a third RADIUS server, you can activate it by entering its IP " +"address here." +msgstr "" + +#: usr/local/www/services_captiveportal.php:658 +msgid "Quaternary RADIUS server" +msgstr "" + +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:702 +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/services_captiveportal.php:701 +#: usr/local/www/services_captiveportal.php:717 +#: usr/local/www/services_captiveportal.php:717 +msgid "" +"If you have a fourth RADIUS server, you can activate it by entering its IP " +"address here." +msgstr "" + +#: usr/local/www/services_captiveportal.php:677 +#: usr/local/www/services_captiveportal.php:719 +#: usr/local/www/services_captiveportal.php:717 +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/services_captiveportal.php:731 +#: usr/local/www/services_captiveportal.php:731 +msgid "Accounting" +msgstr "" + +#: usr/local/www/services_captiveportal.php:682 +#: usr/local/www/services_captiveportal.php:724 +#: usr/local/www/services_captiveportal.php:722 +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:736 +msgid "send RADIUS accounting packets" +msgstr "" + +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:725 +#: usr/local/www/services_captiveportal.php:723 +#: usr/local/www/services_captiveportal.php:721 +#: usr/local/www/services_captiveportal.php:737 +#: usr/local/www/services_captiveportal.php:737 +msgid "" +"If this is enabled, RADIUS accounting packets will be sent to the primary " +"RADIUS server." +msgstr "" + +#: usr/local/www/services_captiveportal.php:686 +#: usr/local/www/services_captiveportal.php:728 +#: usr/local/www/services_captiveportal.php:726 +#: usr/local/www/services_captiveportal.php:724 +#: usr/local/www/services_captiveportal.php:740 +#: usr/local/www/services_captiveportal.php:740 +msgid "Accounting port" +msgstr "" + +#: usr/local/www/services_captiveportal.php:688 +#: usr/local/www/services_captiveportal.php:730 +#: usr/local/www/services_captiveportal.php:728 +#: usr/local/www/services_captiveportal.php:726 +#: usr/local/www/services_captiveportal.php:742 +#: usr/local/www/services_captiveportal.php:742 +msgid "Leave blank to use the default port (1813)." +msgstr "" + +#: usr/local/www/services_captiveportal.php:694 +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:734 +#: usr/local/www/services_captiveportal.php:746 +#: usr/local/www/services_captiveportal.php:762 +#: usr/local/www/services_captiveportal.php:762 +msgid "Reauthentication" +msgstr "" + +#: usr/local/www/services_captiveportal.php:699 +#: usr/local/www/services_captiveportal.php:741 +#: usr/local/www/services_captiveportal.php:739 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:764 +#: usr/local/www/services_captiveportal.php:764 +msgid "Reauthenticate connected users every minute" +msgstr "" + +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/services_captiveportal.php:742 +#: usr/local/www/services_captiveportal.php:740 +#: usr/local/www/services_captiveportal.php:749 +#: usr/local/www/services_captiveportal.php:765 +#: usr/local/www/services_captiveportal.php:765 +msgid "" +"If reauthentication is enabled, Access-Requests will be sent to the RADIUS " +"server for each user that is logged in every minute. If an Access-Reject is " +"received for a user, that user is disconnected from the captive portal " +"immediately." +msgstr "" + +#: usr/local/www/services_captiveportal.php:704 +#: usr/local/www/services_captiveportal.php:746 +#: usr/local/www/services_captiveportal.php:744 +#: usr/local/www/services_captiveportal.php:732 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:748 +msgid "Accounting updates" +msgstr "" + +#: usr/local/www/services_captiveportal.php:706 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:746 +#: usr/local/www/services_captiveportal.php:734 +#: usr/local/www/services_captiveportal.php:750 +#: usr/local/www/services_captiveportal.php:750 +msgid "no accounting updates" +msgstr "" + +#: usr/local/www/services_captiveportal.php:707 +#: usr/local/www/services_captiveportal.php:749 +#: usr/local/www/services_captiveportal.php:747 +#: usr/local/www/services_captiveportal.php:735 +#: usr/local/www/services_captiveportal.php:751 +#: usr/local/www/services_captiveportal.php:751 +msgid "stop/start accounting" +msgstr "" + +#: usr/local/www/services_captiveportal.php:708 +#: usr/local/www/services_captiveportal.php:750 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:752 +#: usr/local/www/services_captiveportal.php:752 +msgid "interim update" +msgstr "" + +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/services_captiveportal.php:757 +#: usr/local/www/services_captiveportal.php:755 +#: usr/local/www/services_captiveportal.php:753 +#: usr/local/www/services_captiveportal.php:769 +#: usr/local/www/services_captiveportal.php:769 +msgid "RADIUS MAC authentication" +msgstr "" + +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/services_captiveportal.php:762 +#: usr/local/www/services_captiveportal.php:760 +#: usr/local/www/services_captiveportal.php:755 +#: usr/local/www/services_captiveportal.php:771 +#: usr/local/www/services_captiveportal.php:771 +msgid "Enable RADIUS MAC authentication" +msgstr "" + +#: usr/local/www/services_captiveportal.php:721 +#: usr/local/www/services_captiveportal.php:763 +#: usr/local/www/services_captiveportal.php:761 +#: usr/local/www/services_captiveportal.php:756 +#: usr/local/www/services_captiveportal.php:772 +#: usr/local/www/services_captiveportal.php:772 +msgid "" +"If this option is enabled, the captive portal will try to authenticate users " +"by sending their MAC address as the username and the password entered below " +"to the RADIUS server." +msgstr "" + +#: usr/local/www/services_captiveportal.php:732 +#: usr/local/www/services_captiveportal.php:774 +#: usr/local/www/services_captiveportal.php:772 +#: usr/local/www/services_captiveportal.php:743 +#: usr/local/www/services_captiveportal.php:759 +#: usr/local/www/services_captiveportal.php:759 +msgid "RADIUS options" +msgstr "" + +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:778 +#: usr/local/www/services_captiveportal.php:776 +#: usr/local/www/services_captiveportal.php:764 +#: usr/local/www/services_captiveportal.php:780 +#: usr/local/www/services_captiveportal.php:780 +msgid "RADIUS NAS IP attribute" +msgstr "" + +#: usr/local/www/services_captiveportal.php:766 +#: usr/local/www/services_captiveportal.php:808 +#: usr/local/www/services_captiveportal.php:806 +#: usr/local/www/services_captiveportal.php:794 +#: usr/local/www/services_captiveportal.php:810 +#: usr/local/www/services_captiveportal.php:810 +msgid "Choose the IP to use for calling station attribute." +msgstr "" + +#: usr/local/www/services_captiveportal.php:771 +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:811 +#: usr/local/www/services_captiveportal.php:799 +#: usr/local/www/services_captiveportal.php:815 +#: usr/local/www/services_captiveportal.php:815 +msgid "Session-Timeout" +msgstr "" + +#: usr/local/www/services_captiveportal.php:772 +#: usr/local/www/services_captiveportal.php:814 +#: usr/local/www/services_captiveportal.php:812 +#: usr/local/www/services_captiveportal.php:800 +#: usr/local/www/services_captiveportal.php:816 +#: usr/local/www/services_captiveportal.php:816 +msgid "Use RADIUS Session-Timeout attributes" +msgstr "" + +#: usr/local/www/services_captiveportal.php:773 +#: usr/local/www/services_captiveportal.php:815 +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:817 +#: usr/local/www/services_captiveportal.php:817 +msgid "" +"When this is enabled, clients will be disconnected after the amount of time " +"retrieved from the RADIUS Session-Timeout attribute." +msgstr "" + +#: usr/local/www/services_captiveportal.php:789 +#: usr/local/www/services_captiveportal.php:831 +#: usr/local/www/services_captiveportal.php:829 +#: usr/local/www/services_captiveportal.php:817 +#: usr/local/www/services_captiveportal.php:833 +#: usr/local/www/services_captiveportal.php:833 +#, php-format +msgid "" +"If RADIUS type is set to Cisco, in Access-Requests the value of Calling-" +"Station-Id will be set to the client's IP address and the Called-Station-Id " +"to the client's MAC address. Default behavior is Calling-Station-Id = " +"client's MAC address and Called-Station-Id = %s's WAN IP address." +msgstr "" + +#: usr/local/www/services_captiveportal.php:796 +#: usr/local/www/services_captiveportal.php:838 +#: usr/local/www/services_captiveportal.php:836 +#: usr/local/www/services_captiveportal.php:834 +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/services_captiveportal.php:850 +msgid "MAC address format" +msgstr "" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "singledash" +msgstr "" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "ietf" +msgstr "" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "cisco" +msgstr "" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "unformatted" +msgstr "" + +#: usr/local/www/services_captiveportal.php:810 +#: usr/local/www/services_captiveportal.php:852 +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/services_captiveportal.php:849 +#: usr/local/www/services_captiveportal.php:865 +#: usr/local/www/services_captiveportal.php:865 +msgid "" +"This option changes the MAC address format used in the whole RADIUS system. " +"Change this if you also" +msgstr "" + +#: usr/local/www/services_captiveportal.php:811 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:851 +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/services_captiveportal.php:866 +#: usr/local/www/services_captiveportal.php:866 +msgid "need to change the username format for RADIUS MAC authentication." +msgstr "" + +#: usr/local/www/services_captiveportal.php:812 +#: usr/local/www/services_captiveportal.php:854 +#: usr/local/www/services_captiveportal.php:852 +#: usr/local/www/services_captiveportal.php:851 +#: usr/local/www/services_captiveportal.php:867 +#: usr/local/www/services_captiveportal.php:867 +msgid "default:" +msgstr "" + +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:855 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:852 +#: usr/local/www/services_captiveportal.php:868 +#: usr/local/www/services_captiveportal.php:868 +msgid "singledash:" +msgstr "" + +#: usr/local/www/services_captiveportal.php:814 +#: usr/local/www/services_captiveportal.php:856 +#: usr/local/www/services_captiveportal.php:854 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:869 +#: usr/local/www/services_captiveportal.php:869 +msgid "ietf:" +msgstr "" + +#: usr/local/www/services_captiveportal.php:815 +#: usr/local/www/services_captiveportal.php:857 +#: usr/local/www/services_captiveportal.php:855 +#: usr/local/www/services_captiveportal.php:854 +#: usr/local/www/services_captiveportal.php:870 +#: usr/local/www/services_captiveportal.php:870 +msgid "cisco:" +msgstr "" + +#: usr/local/www/services_captiveportal.php:816 +#: usr/local/www/services_captiveportal.php:858 +#: usr/local/www/services_captiveportal.php:856 +#: usr/local/www/services_captiveportal.php:855 +#: usr/local/www/services_captiveportal.php:871 +#: usr/local/www/services_captiveportal.php:871 +msgid "unformatted:" +msgstr "" + +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/services_captiveportal.php:861 +#: usr/local/www/services_captiveportal.php:859 +#: usr/local/www/services_captiveportal.php:877 +#: usr/local/www/services_captiveportal.php:877 +msgid "HTTPS login" +msgstr "" + +#: usr/local/www/services_captiveportal.php:822 +#: usr/local/www/services_captiveportal.php:864 +#: usr/local/www/services_captiveportal.php:862 +#: usr/local/www/services_captiveportal.php:880 +#: usr/local/www/services_captiveportal.php:880 +msgid "Enable HTTPS login" +msgstr "" + +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:865 +msgid "" +"If enabled, the username and password will be transmitted over an HTTPS " +"connection to protect against eavesdroppers. A server name, certificate and " +"matching private key must also be specified below." +msgstr "" + +#: usr/local/www/services_captiveportal.php:826 +#: usr/local/www/services_captiveportal.php:868 +#: usr/local/www/services_captiveportal.php:866 +#: usr/local/www/services_captiveportal.php:884 +#: usr/local/www/services_captiveportal.php:884 +msgid "HTTPS server name" +msgstr "" + +#: usr/local/www/services_captiveportal.php:829 +#: usr/local/www/services_captiveportal.php:871 +#: usr/local/www/services_captiveportal.php:869 +#: usr/local/www/services_captiveportal.php:887 +#: usr/local/www/services_captiveportal.php:887 +#, php-format +msgid "" +"This name will be used in the form action for the HTTPS POST and should " +"match the Common Name (CN) in your certificate (otherwise, the client " +"browser will most likely display a security warning). Make sure captive " +"portal clients can resolve this name in DNS and verify on the client that " +"the IP resolves to the correct interface IP on %s." +msgstr "" + +#: usr/local/www/services_captiveportal.php:832 +#: usr/local/www/services_captiveportal.php:874 +msgid "HTTPS certificate" +msgstr "" + +#: usr/local/www/services_captiveportal.php:836 +#: usr/local/www/services_captiveportal.php:878 +msgid "Paste a signed certificate in X.509 PEM format here." +msgstr "" + +#: usr/local/www/services_captiveportal.php:839 +#: usr/local/www/services_captiveportal.php:881 +msgid "HTTPS private key" +msgstr "" + +#: usr/local/www/services_captiveportal.php:843 +#: usr/local/www/services_captiveportal.php:885 +msgid "Paste an RSA private key in PEM format here." +msgstr "" + +#: usr/local/www/services_captiveportal.php:846 +#: usr/local/www/services_captiveportal.php:888 +msgid "HTTPS intermediate certificate" +msgstr "" + +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/system_camanager.php:406 +#: usr/local/www/system_certmanager.php:515 +#: usr/local/www/system_certmanager.php:614 +#: usr/local/www/services_captiveportal.php:892 +#: usr/local/www/system_camanager.php:413 +#: usr/local/www/system_certmanager.php:623 +#: usr/local/www/system_certmanager.php:624 +#: usr/local/www/system_camanager.php:413 +#: usr/local/www/system_certmanager.php:624 +msgid "Paste a certificate in X.509 PEM format here." +msgstr "" + +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:895 +#: usr/local/www/services_captiveportal.php:891 +#: usr/local/www/services_captiveportal.php:893 +#: usr/local/www/services_captiveportal.php:909 +#: usr/local/www/services_captiveportal.php:909 +msgid "Portal page contents" +msgstr "" + +#: usr/local/www/services_captiveportal.php:865 +#: usr/local/www/services_captiveportal.php:899 +#: usr/local/www/services_captiveportal.php:913 +#: usr/local/www/services_captiveportal.php:910 +#: usr/local/www/services_captiveportal.php:944 +#: usr/local/www/services_captiveportal.php:958 +#: usr/local/www/services_captiveportal.php:906 +#: usr/local/www/services_captiveportal.php:940 +#: usr/local/www/services_captiveportal.php:954 +#: usr/local/www/services_captiveportal.php:908 +#: usr/local/www/services_captiveportal.php:942 +#: usr/local/www/services_captiveportal.php:956 +#: usr/local/www/services_captiveportal.php:924 +#: usr/local/www/services_captiveportal.php:972 +#: usr/local/www/services_captiveportal.php:924 +#: usr/local/www/services_captiveportal.php:958 +#: usr/local/www/services_captiveportal.php:972 +msgid "View current page" +msgstr "" + +#: usr/local/www/services_captiveportal.php:871 +#: usr/local/www/services_captiveportal.php:916 +#: usr/local/www/services_captiveportal.php:912 +#: usr/local/www/services_captiveportal.php:914 +#: usr/local/www/services_captiveportal.php:930 +#: usr/local/www/services_captiveportal.php:930 +#, php-format +msgid "" +"Upload an HTML/PHP file for the portal page here (leave blank to keep the " +"current one). Make sure to include a form (POST to %1$s) with a submit " +"button (%2$s) and a hidden field with %3$s and %4$s. Include the %5$s and " +"%6$s and/or %7$s input fields if authentication is enabled, otherwise it " +"will always fail." +msgstr "" + +#: usr/local/www/services_captiveportal.php:882 +#: usr/local/www/services_captiveportal.php:927 +#: usr/local/www/services_captiveportal.php:923 +#: usr/local/www/services_captiveportal.php:925 +#: usr/local/www/services_captiveportal.php:941 +#: usr/local/www/services_captiveportal.php:941 +msgid "Example code for the form:" +msgstr "" + +#: usr/local/www/services_captiveportal.php:894 +#: usr/local/www/services_captiveportal.php:939 +#: usr/local/www/services_captiveportal.php:935 +#: usr/local/www/services_captiveportal.php:937 +#: usr/local/www/services_captiveportal.php:953 +#: usr/local/www/services_captiveportal.php:953 +msgid "error page" +msgstr "" + +#: usr/local/www/services_captiveportal.php:895 +#: usr/local/www/services_captiveportal.php:909 +#: usr/local/www/services_captiveportal.php:940 +#: usr/local/www/services_captiveportal.php:954 +#: usr/local/www/services_captiveportal.php:936 +#: usr/local/www/services_captiveportal.php:950 +#: usr/local/www/services_captiveportal.php:938 +#: usr/local/www/services_captiveportal.php:952 +#: usr/local/www/services_captiveportal.php:968 +#: usr/local/www/services_captiveportal.php:954 +#: usr/local/www/services_captiveportal.php:968 +msgid "contents" +msgstr "" + +#: usr/local/www/services_captiveportal.php:903 +#: usr/local/www/services_captiveportal.php:948 +#: usr/local/www/services_captiveportal.php:944 +#: usr/local/www/services_captiveportal.php:946 +#: usr/local/www/services_captiveportal.php:962 +#: usr/local/www/services_captiveportal.php:962 +msgid "" +"The contents of the HTML/PHP file that you upload here are displayed when an " +"authentication error occurs. You may include" +msgstr "" + +#: usr/local/www/services_captiveportal.php:904 +#: usr/local/www/services_captiveportal.php:949 +#: usr/local/www/services_captiveportal.php:945 +#: usr/local/www/services_captiveportal.php:947 +#: usr/local/www/services_captiveportal.php:963 +#: usr/local/www/services_captiveportal.php:963 +msgid "" +"which will be replaced by the error or reply messages from the RADIUS " +"server, if any." +msgstr "" + +#: usr/local/www/services_captiveportal.php:907 usr/local/www/fbegin.inc:86 +#: usr/local/www/fbegin.inc:103 usr/local/www/services_captiveportal.php:952 +#: usr/local/www/fbegin.inc:112 usr/local/www/services_captiveportal.php:948 +#: usr/local/www/services_captiveportal.php:950 usr/local/www/fbegin.inc:104 +#: usr/local/www/services_captiveportal.php:966 +#: usr/local/www/services_captiveportal.php:966 usr/local/www/fbegin.inc:104 +msgid "Logout" +msgstr "" + +#: usr/local/www/services_captiveportal.php:917 +#: usr/local/www/services_captiveportal.php:962 +#: usr/local/www/services_captiveportal.php:958 +#: usr/local/www/services_captiveportal.php:960 +#: usr/local/www/services_captiveportal.php:976 +#: usr/local/www/services_captiveportal.php:976 +msgid "" +"The contents of the HTML/PHP file that you upload here are displayed on " +"authentication success when the logout popup is enabled." +msgstr "" + +#: usr/local/www/services_captiveportal.php:930 +#: usr/local/www/services_captiveportal.php:975 +#: usr/local/www/services_captiveportal.php:971 +#: usr/local/www/services_captiveportal.php:973 +#: usr/local/www/services_captiveportal.php:989 +#: usr/local/www/services_captiveportal.php:989 +msgid "" +"Changing any settings on this page will disconnect all clients! Don't forget " +"to enable the DHCP server on your captive portal interface! Make sure that " +"the default/maximum DHCP lease time is higher than the timeout entered on " +"this page. Also, the DNS forwarder needs to be enabled for DNS lookups by " +"unauthenticated clients to work." +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:101 +#: usr/local/www/services_captiveportal_filemanager.php:98 +#: usr/local/www/services_captiveportal_filemanager.php:98 +#, php-format +msgid "A file with the name '%s' already exists." +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:108 +#: usr/local/www/services_captiveportal_filemanager.php:105 +#: usr/local/www/services_captiveportal_filemanager.php:105 +msgid "The total size of all files uploaded may not exceed " +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:163 +#: usr/local/www/system_firmware_restorefullbackup.php:141 +#: usr/local/www/services_captiveportal_filemanager.php:160 +#: usr/local/www/diag_system_pftop.php:140 +#: usr/local/www/diag_system_pftop.php:159 +#: usr/local/www/diag_system_pftop.php:140 +#: usr/local/www/diag_system_pftop.php:159 +#: usr/local/www/services_captiveportal_filemanager.php:160 +#: usr/local/www/system_firmware_restorefullbackup.php:141 +msgid "Size" +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:168 +#: usr/local/www/services_captiveportal_filemanager.php:207 +#: usr/local/www/services_captiveportal_filemanager.php:165 +#: usr/local/www/services_captiveportal_filemanager.php:204 +#: usr/local/www/services_captiveportal_filemanager.php:165 +#: usr/local/www/services_captiveportal_filemanager.php:204 +msgid "add file" +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:179 +#: usr/local/www/services_captiveportal_filemanager.php:176 +#: usr/local/www/services_captiveportal_filemanager.php:176 +msgid "Do you really want to delete this file?" +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:179 +#: usr/local/www/services_captiveportal_filemanager.php:176 +#: usr/local/www/services_captiveportal_filemanager.php:176 +msgid "delete file" +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:186 +#: usr/local/www/services_captiveportal_filemanager.php:183 +#: usr/local/www/services_captiveportal_filemanager.php:183 +msgid "TOTAL" +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:197 +#: usr/local/www/services_captiveportal_filemanager.php:194 +#: usr/local/www/services_captiveportal_filemanager.php:194 +msgid "cancel" +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:217 +#: usr/local/www/services_captiveportal_filemanager.php:214 +#: usr/local/www/services_captiveportal_filemanager.php:214 +msgid "" +"Any files that you upload here with the filename prefix of captiveportal- " +"will be made available in the root directory of the captive portal HTTP(S) " +"server. You may reference them directly from your portal page HTML code " +"using relative paths. Example: you've uploaded an image with the name " +"'captiveportal-test.jpg' using the file manager. Then you can include it in " +"your portal page like this:" +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:224 +#: usr/local/www/services_captiveportal_filemanager.php:221 +#: usr/local/www/services_captiveportal_filemanager.php:221 +msgid "" +"In addition, you can also upload .php files for execution. You can pass the " +"filename to your custom page from the initial page by using text similar to:" +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:227 +#: usr/local/www/services_captiveportal_filemanager.php:224 +#: usr/local/www/services_captiveportal_filemanager.php:224 +msgid "Acceptable usage policy" +msgstr "" + +#: usr/local/www/services_captiveportal_filemanager.php:229 +#: usr/local/www/services_captiveportal_filemanager.php:226 +#: usr/local/www/services_captiveportal_filemanager.php:226 +#, php-format +msgid "The total size limit for all files is %s." +msgstr "" + +#: usr/local/www/diag_limiter_info.php:46 +#: usr/local/www/diag_limiter_info.php:46 +msgid "Diagnostics: Limiter Info" +msgstr "" + +#: usr/local/www/diag_limiter_info.php:108 +#: usr/local/www/diag_limiter_info.php:109 +#: usr/local/www/diag_limiter_info.php:109 +msgid "Gathering Limiter information, please wait..." +msgstr "" + +#: usr/local/www/firewall_nat.php:197 usr/local/www/firewall_nat.php:202 +#: usr/local/www/firewall_nat.php:205 usr/local/www/firewall_nat.php:205 +msgid "Src. addr" +msgstr "" + +#: usr/local/www/firewall_nat.php:198 usr/local/www/firewall_nat.php:203 +#: usr/local/www/firewall_nat.php:206 usr/local/www/firewall_nat.php:206 +msgid "Src. ports" +msgstr "" + +#: usr/local/www/firewall_nat.php:199 usr/local/www/firewall_nat.php:204 +#: usr/local/www/firewall_nat.php:207 usr/local/www/firewall_nat.php:207 +msgid "Dest. addr" +msgstr "" + +#: usr/local/www/firewall_nat.php:200 usr/local/www/firewall_nat.php:205 +#: usr/local/www/firewall_nat.php:208 usr/local/www/firewall_nat.php:208 +msgid "Dest. ports" +msgstr "" + +#: usr/local/www/firewall_nat.php:201 usr/local/www/firewall_nat.php:206 +#: usr/local/www/firewall_nat.php:209 usr/local/www/firewall_nat.php:209 +msgid "NAT IP" +msgstr "" + +#: usr/local/www/firewall_nat.php:202 usr/local/www/firewall_nat.php:207 +#: usr/local/www/firewall_nat.php:210 usr/local/www/firewall_nat.php:210 +msgid "NAT Ports" +msgstr "" + +#: usr/local/www/firewall_nat.php:252 usr/local/www/firewall_nat.php:265 +#: usr/local/www/firewall_nat.php:268 usr/local/www/firewall_nat.php:268 +msgid "All traffic matching this NAT entry is passed" +msgstr "" + +#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267 +#: usr/local/www/firewall_nat.php:270 usr/local/www/firewall_nat.php:270 +msgid "Firewall rule ID" +msgstr "" + +#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267 +#: usr/local/www/firewall_nat.php:270 usr/local/www/firewall_nat.php:270 +msgid "is managed with this rule" +msgstr "" + +#: usr/local/www/firewall_nat.php:313 usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326 +#: usr/local/www/firewall_nat_out.php:448 +#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:329 +#: usr/local/www/firewall_nat_out.php:454 usr/local/www/firewall_nat.php:329 +#: usr/local/www/firewall_nat_out.php:454 +msgid "Do you really want to delete this rule?" +msgstr "" + +#: usr/local/www/firewall_nat.php:349 usr/local/www/firewall_nat.php:362 +#: usr/local/www/firewall_nat.php:365 usr/local/www/firewall_nat.php:365 +msgid "linked rule" +msgstr "" + +#: usr/local/www/diag_ipsec.php:78 usr/local/www/diag_ipsec_sad.php:73 +#: usr/local/www/diag_ipsec_spd.php:72 usr/local/www/diag_ipsec.php:88 +#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec_sad.php:74 +#: usr/local/www/diag_ipsec_spd.php:73 usr/local/www/diag_ipsec.php:91 +#: usr/local/www/diag_ipsec.php:91 usr/local/www/diag_ipsec_spd.php:73 +#: usr/local/www/diag_ipsec_sad.php:74 +msgid "Overview" +msgstr "" + +#: usr/local/www/diag_ipsec.php:79 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/diag_ipsec_sad.php:74 usr/local/www/diag_ipsec_spd.php:73 +#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec.php:90 +#: usr/local/www/diag_ipsec_sad.php:75 usr/local/www/diag_ipsec_spd.php:74 +#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec.php:92 +#: usr/local/www/diag_ipsec_spd.php:74 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/diag_ipsec_sad.php:75 +msgid "SAD" +msgstr "" + +#: usr/local/www/diag_ipsec.php:80 usr/local/www/diag_ipsec_sad.php:75 +#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_ipsec_spd.php:74 +#: usr/local/www/diag_ipsec.php:90 usr/local/www/diag_ipsec.php:91 +#: usr/local/www/diag_ipsec_sad.php:76 usr/local/www/diag_ipsec_spd.php:75 +#: usr/local/www/diag_ipsec.php:93 usr/local/www/diag_ipsec.php:93 +#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_ipsec_spd.php:75 +#: usr/local/www/diag_ipsec_sad.php:76 +msgid "SPD" +msgstr "" + +#: usr/local/www/diag_ipsec.php:81 usr/local/www/diag_ipsec_sad.php:76 +#: usr/local/www/diag_ipsec_spd.php:75 usr/local/www/diag_ipsec.php:91 +#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec_sad.php:77 +#: usr/local/www/diag_ipsec_spd.php:76 usr/local/www/diag_ipsec.php:94 +#: usr/local/www/diag_ipsec.php:94 usr/local/www/diag_ipsec_spd.php:76 +#: usr/local/www/diag_ipsec_sad.php:77 +msgid "Logs" +msgstr "" + +#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec.php:103 +#: usr/local/www/diag_ipsec.php:104 usr/local/www/diag_ipsec.php:106 +#: usr/local/www/diag_ipsec.php:106 +msgid "Remote IP" +msgstr "" + +#: usr/local/www/diag_ipsec.php:93 usr/local/www/vpn_ipsec_phase2.php:419 +#: usr/local/www/diag_ipsec.php:104 usr/local/www/vpn_ipsec_phase2.php:445 +#: usr/local/www/diag_ipsec.php:105 usr/local/www/vpn_ipsec_phase2.php:511 +#: usr/local/www/diag_ipsec.php:107 usr/local/www/vpn_ipsec_phase2.php:533 +#: usr/local/www/diag_ipsec.php:107 usr/local/www/vpn_ipsec_phase2.php:533 +msgid "Local Network" +msgstr "" + +#: usr/local/www/diag_ipsec.php:94 usr/local/www/vpn_ipsec_phase2.php:461 +#: usr/local/www/vpn_openvpn_client.php:762 +#: usr/local/www/vpn_openvpn_server.php:1055 usr/local/www/diag_ipsec.php:105 +#: usr/local/www/vpn_openvpn_server.php:1197 +#: usr/local/www/vpn_ipsec_phase2.php:487 +#: usr/local/www/vpn_openvpn_client.php:767 usr/local/www/diag_ipsec.php:106 +#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/diag_ipsec.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:610 usr/local/www/diag_ipsec.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:610 +msgid "Remote Network" +msgstr "" + +#: usr/local/www/diag_ipsec.php:165 usr/local/www/diag_ipsec_sad.php:135 +#: usr/local/www/diag_ipsec_spd.php:144 usr/local/www/diag_ipsec_sad.php:136 +#: usr/local/www/diag_ipsec_spd.php:145 usr/local/www/diag_ipsec_spd.php:145 +#: usr/local/www/diag_ipsec_sad.php:136 +msgid "You can configure your IPsec" +msgstr "" + +#: usr/local/www/diag_ipsec_sad.php:90 usr/local/www/diag_ipsec_sad.php:91 +#: usr/local/www/diag_ipsec_sad.php:91 +msgid "SPI" +msgstr "" + +#: usr/local/www/diag_ipsec_sad.php:91 usr/local/www/diag_ipsec_sad.php:92 +#: usr/local/www/diag_ipsec_sad.php:92 +msgid "Enc. alg." +msgstr "" + +#: usr/local/www/diag_ipsec_sad.php:92 usr/local/www/diag_ipsec_sad.php:93 +#: usr/local/www/diag_ipsec_sad.php:93 +msgid "Auth. alg." +msgstr "" + +#: usr/local/www/diag_ipsec_sad.php:93 usr/local/www/diag_ipsec_sad.php:94 +#: usr/local/www/diag_ipsec_sad.php:94 +msgid "Data" +msgstr "" + +#: usr/local/www/diag_ipsec_sad.php:112 usr/local/www/diag_ipsec_sad.php:113 +#: usr/local/www/diag_ipsec_sad.php:113 +msgid "Do you really want to delete this security association?" +msgstr "" + +#: usr/local/www/diag_ipsec_sad.php:121 usr/local/www/diag_ipsec_sad.php:122 +#: usr/local/www/diag_ipsec_sad.php:122 +msgid "No IPsec security associations." +msgstr "" + +#: usr/local/www/services_captiveportal_ip.php:123 +#: usr/local/www/services_captiveportal_ip.php:163 +#: usr/local/www/services_captiveportal_hostname.php:128 +#: usr/local/www/services_captiveportal_hostname.php:164 +#: usr/local/www/services_captiveportal_ip.php:121 +#: usr/local/www/services_captiveportal_ip.php:161 +#: usr/local/www/services_captiveportal_hostname.php:126 +#: usr/local/www/services_captiveportal_hostname.php:162 +#: usr/local/www/services_captiveportal_ip.php:121 +#: usr/local/www/services_captiveportal_ip.php:161 +#: usr/local/www/services_captiveportal_hostname.php:126 +#: usr/local/www/services_captiveportal_hostname.php:162 +msgid "add address" +msgstr "" + +#: usr/local/www/services_captiveportal_ip.php:153 +#: usr/local/www/services_captiveportal_hostname.php:154 +#: usr/local/www/services_captiveportal_ip.php:151 +#: usr/local/www/services_captiveportal_hostname.php:152 +#: usr/local/www/services_captiveportal_ip.php:151 +#: usr/local/www/services_captiveportal_hostname.php:152 +msgid "edit address" +msgstr "" + +#: usr/local/www/services_captiveportal_ip.php:154 +#: usr/local/www/services_captiveportal_hostname.php:155 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +msgid "Do you really want to delete this address?" +msgstr "" + +#: usr/local/www/services_captiveportal_ip.php:154 +#: usr/local/www/services_captiveportal_hostname.php:155 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +msgid "delete address" +msgstr "" + +#: usr/local/www/services_captiveportal_ip.php:172 +#: usr/local/www/services_captiveportal_ip.php:170 +#: usr/local/www/services_captiveportal_ip.php:170 +msgid "" +"Adding allowed IP addresses will allow IP access to/from these addresses " +"through the captive portal without being taken to the portal page. This can " +"be used for a web server serving images for the portal page or a DNS server " +"on another network, for example. By specifying from addresses, it " +"may be used to always allow pass-through access from a client behind the " +"captive portal." +msgstr "" + +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "All connections" +msgstr "" + +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +msgid "the IP address are allowed" +msgstr "" + +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:182 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "from" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +msgid "Edit allowed IP address" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:102 +#: usr/local/www/services_captiveportal_ip_edit.php:100 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +msgid "Allowed IP address" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:110 +#: usr/local/www/services_captiveportal_mac_edit.php:108 +#: usr/local/www/services_captiveportal_hostname_edit.php:110 +#: usr/local/www/services_captiveportal_hostname_edit.php:108 +#: usr/local/www/services_captiveportal_mac_edit.php:106 +#: usr/local/www/services_captiveportal_ip_edit.php:108 +#: usr/local/www/services_captiveportal_ip_edit.php:110 +#: usr/local/www/services_captiveportal_hostname_edit.php:108 +#: usr/local/www/services_captiveportal_mac_edit.php:106 +msgid "Upload speed needs to be an integer" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:113 +#: usr/local/www/services_captiveportal_mac_edit.php:110 +#: usr/local/www/services_captiveportal_hostname_edit.php:112 +#: usr/local/www/services_captiveportal_hostname_edit.php:110 +#: usr/local/www/services_captiveportal_mac_edit.php:108 +#: usr/local/www/services_captiveportal_ip_edit.php:111 +#: usr/local/www/services_captiveportal_ip_edit.php:113 +#: usr/local/www/services_captiveportal_hostname_edit.php:110 +#: usr/local/www/services_captiveportal_mac_edit.php:108 +msgid "Download speed needs to be an integer" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:120 +#: usr/local/www/services_captiveportal_mac_edit.php:117 +#: usr/local/www/services_captiveportal_hostname_edit.php:119 +#: usr/local/www/services_captiveportal_hostname_edit.php:117 +#: usr/local/www/services_captiveportal_mac_edit.php:115 +#: usr/local/www/services_captiveportal_ip_edit.php:118 +#: usr/local/www/services_captiveportal_ip_edit.php:120 +#: usr/local/www/services_captiveportal_hostname_edit.php:117 +#: usr/local/www/services_captiveportal_mac_edit.php:115 +msgid "already allowed" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:175 +#: usr/local/www/services_captiveportal_ip_edit.php:173 +#: usr/local/www/services_captiveportal_ip_edit.php:184 +#: usr/local/www/services_captiveportal_ip_edit.php:184 +msgid "Edit allowed ip rule" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/system_gateways_edit.php:442 +#: usr/local/www/system_gateways_edit.php:454 +#: usr/local/www/system_gateways_edit.php:463 +#: usr/local/www/system_gateways_edit.php:475 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +#: usr/local/www/system_gateways_edit.php:569 +#: usr/local/www/system_gateways_edit.php:581 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +#: usr/local/www/system_gateways_edit.php:573 +#: usr/local/www/system_gateways_edit.php:585 +#: usr/local/www/system_gateways_edit.php:575 +#: usr/local/www/system_gateways_edit.php:587 +#: usr/local/www/system_gateways_edit.php:605 +#: usr/local/www/system_gateways_edit.php:617 +#: usr/local/www/system_gateways_edit.php:605 +#: usr/local/www/system_gateways_edit.php:617 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +msgid "From" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/system_gateways_edit.php:445 +#: usr/local/www/system_gateways_edit.php:457 +#: usr/local/www/system_gateways_edit.php:466 +#: usr/local/www/system_gateways_edit.php:478 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +#: usr/local/www/system_gateways_edit.php:572 +#: usr/local/www/system_gateways_edit.php:584 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +#: usr/local/www/system_gateways_edit.php:576 +#: usr/local/www/system_gateways_edit.php:588 +#: usr/local/www/system_gateways_edit.php:578 +#: usr/local/www/system_gateways_edit.php:590 +#: usr/local/www/system_gateways_edit.php:608 +#: usr/local/www/system_gateways_edit.php:620 +#: usr/local/www/system_gateways_edit.php:608 +#: usr/local/www/system_gateways_edit.php:620 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +msgid "To" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +msgid "Use" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +msgid "" +"to always allow an IP address through the captive portal (without " +"authentication)" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +msgid "" +"to allow access from all clients (even non-authenticated ones) behind the " +"portal to this IP address" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:204 +#: usr/local/www/services_captiveportal_ip_edit.php:202 +#: usr/local/www/services_captiveportal_ip_edit.php:196 +#: usr/local/www/services_captiveportal_ip_edit.php:196 +msgid "IP address and subnet mask. Use /32 for a single IP" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:215 +#: usr/local/www/services_captiveportal_mac_edit.php:189 +#: usr/local/www/services_captiveportal_hostname_edit.php:189 +#: usr/local/www/services_captiveportal_hostname_edit.php:187 +#: usr/local/www/services_captiveportal_mac_edit.php:187 +#: usr/local/www/services_captiveportal_ip_edit.php:213 +#: usr/local/www/services_captiveportal_ip_edit.php:207 +#: usr/local/www/services_captiveportal_mac_edit.php:200 +#: usr/local/www/services_captiveportal_ip_edit.php:207 +#: usr/local/www/services_captiveportal_hostname_edit.php:189 +#: usr/local/www/services_captiveportal_mac_edit.php:200 +msgid "Bandwidth up" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:218 +#: usr/local/www/services_captiveportal_ip_edit.php:216 +#: usr/local/www/services_captiveportal_ip_edit.php:210 +#: usr/local/www/services_captiveportal_ip_edit.php:210 +msgid "Enter a upload limit to be enforced on this IP address in Kbit/s" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:222 +#: usr/local/www/services_captiveportal_mac_edit.php:195 +#: usr/local/www/services_captiveportal_hostname_edit.php:195 +#: usr/local/www/services_captiveportal_hostname_edit.php:193 +#: usr/local/www/services_captiveportal_mac_edit.php:193 +#: usr/local/www/services_captiveportal_ip_edit.php:220 +#: usr/local/www/services_captiveportal_ip_edit.php:214 +#: usr/local/www/services_captiveportal_mac_edit.php:206 +#: usr/local/www/services_captiveportal_ip_edit.php:214 +#: usr/local/www/services_captiveportal_hostname_edit.php:195 +#: usr/local/www/services_captiveportal_mac_edit.php:206 +msgid "Bandwidth down" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:225 +#: usr/local/www/services_captiveportal_ip_edit.php:223 +#: usr/local/www/services_captiveportal_ip_edit.php:217 +#: usr/local/www/services_captiveportal_ip_edit.php:217 +msgid "Enter a download limit to be enforced on this IP address in Kbit/s" +msgstr "" + +#: usr/local/www/services_captiveportal_mac.php:80 +#: usr/local/www/services_captiveportal_mac.php:78 +#: usr/local/www/services_captiveportal_mac.php:78 +msgid "No entry exists yet!" +msgstr "" + +#: usr/local/www/services_captiveportal_mac.php:84 +#: usr/local/www/services_captiveportal_mac.php:82 +#: usr/local/www/services_captiveportal_mac.php:82 +msgid "Please set the zone on which the operation should be allowed" +msgstr "" + +#: usr/local/www/services_captiveportal_mac.php:96 +#: usr/local/www/services_captiveportal_mac.php:94 +#: usr/local/www/services_captiveportal_mac.php:94 +msgid "No entry exists for this username:" +msgstr "" + +#: usr/local/www/services_captiveportal_mac.php:115 +#: usr/local/www/services_captiveportal_mac.php:113 +#: usr/local/www/services_captiveportal_mac.php:118 +#: usr/local/www/services_captiveportal_mac.php:118 +msgid "The entry was sucessfully deleted" +msgstr "" + +#: usr/local/www/services_captiveportal_mac.php:117 +#: usr/local/www/services_captiveportal_mac.php:115 +#: usr/local/www/services_captiveportal_mac.php:120 +#: usr/local/www/services_captiveportal_mac.php:120 +msgid "No entry exists for this mac address:" +msgstr "" + +#: usr/local/www/services_captiveportal_mac.php:148 +#: usr/local/www/services_captiveportal_mac.php:146 +#: usr/local/www/services_captiveportal_mac.php:156 +#: usr/local/www/services_captiveportal_mac.php:156 +msgid "" +"The captive portal MAC address configuration has been changed.
    You must " +"apply the changes in order for them to take effect." +msgstr "" + +#: usr/local/www/services_captiveportal_mac.php:180 +#: usr/local/www/services_captiveportal_mac.php:178 +#: usr/local/www/services_captiveportal_mac.php:188 +#: usr/local/www/services_captiveportal_mac.php:188 +msgid "edit host" +msgstr "" + +#: usr/local/www/services_captiveportal_mac.php:181 +#: usr/local/www/services_dnsmasq.php:276 +#: usr/local/www/services_unbound.php:312 +#: usr/local/www/services_dnsmasq.php:277 +#: usr/local/www/services_captiveportal_mac.php:179 +#: usr/local/www/services_dnsmasq.php:302 +#: usr/local/www/services_captiveportal_mac.php:189 +#: usr/local/www/services_dnsmasq.php:315 +#: usr/local/www/services_dnsmasq.php:379 +#: usr/local/www/services_dnsmasq.php:379 +#: usr/local/www/services_captiveportal_mac.php:189 +msgid "Do you really want to delete this host?" +msgstr "" + +#: usr/local/www/services_captiveportal_mac.php:181 +#: usr/local/www/services_captiveportal_mac.php:179 +#: usr/local/www/services_captiveportal_mac.php:189 +#: usr/local/www/services_captiveportal_mac.php:189 +msgid "delete host" +msgstr "" + +#: usr/local/www/services_captiveportal_mac.php:186 +#: usr/local/www/services_captiveportal_mac.php:184 +#: usr/local/www/services_captiveportal_mac.php:194 +#: usr/local/www/services_captiveportal_mac.php:194 +msgid "add host" +msgstr "" + +#: usr/local/www/services_captiveportal_mac.php:192 +#: usr/local/www/services_captiveportal_mac.php:190 +#: usr/local/www/services_captiveportal_mac.php:200 +#: usr/local/www/services_captiveportal_mac.php:200 +msgid "" +"Adding MAC addresses as pass-through MACs allows them access through the " +"captive portal automatically without being taken to the portal page." +msgstr "" + +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +msgid "Edit pass-through MAC address" +msgstr "" + +#: usr/local/www/services_captiveportal_mac_edit.php:105 +#: usr/local/www/services_captiveportal_mac_edit.php:103 +#: usr/local/www/services_captiveportal_mac_edit.php:103 +msgid "A valid MAC address must be specified" +msgstr "" + +#: usr/local/www/services_captiveportal_mac_edit.php:172 +#: usr/local/www/services_captiveportal_mac_edit.php:170 +#: usr/local/www/services_captiveportal_mac_edit.php:177 +#: usr/local/www/services_captiveportal_mac_edit.php:177 +msgid "Edit Pass-through MAC address" +msgstr "" + +#: usr/local/www/services_captiveportal_mac_edit.php:179 +#: usr/local/www/services_captiveportal_mac_edit.php:177 +#: usr/local/www/services_captiveportal_mac_edit.php:190 +#: usr/local/www/services_captiveportal_mac_edit.php:190 +msgid "MAC address (6 hex octets separated by colons)" +msgstr "" + +#: usr/local/www/services_captiveportal_mac_edit.php:192 +#: usr/local/www/services_captiveportal_mac_edit.php:190 +#: usr/local/www/services_captiveportal_mac_edit.php:203 +#: usr/local/www/services_captiveportal_mac_edit.php:203 +msgid "Enter a upload limit to be enforced on this MAC address in Kbit/s" +msgstr "" + +#: usr/local/www/services_captiveportal_mac_edit.php:198 +#: usr/local/www/services_captiveportal_mac_edit.php:196 +#: usr/local/www/services_captiveportal_mac_edit.php:209 +#: usr/local/www/services_captiveportal_mac_edit.php:209 +msgid "Enter a download limit to be enforced on this MAC address in Kbit/s" +msgstr "" + +#: usr/local/www/diag_ipsec_spd.php:90 usr/local/www/diag_ipsec_spd.php:91 +#: usr/local/www/diag_ipsec_spd.php:91 +msgid "Tunnel endpoints" +msgstr "" + +#: usr/local/www/diag_ipsec_spd.php:108 usr/local/www/diag_ipsec_spd.php:109 +#: usr/local/www/diag_ipsec_spd.php:109 +msgid "Do you really want to delete this security policy?" +msgstr "" + +#: usr/local/www/diag_ipsec_spd.php:119 usr/local/www/diag_ipsec_spd.php:120 +#: usr/local/www/diag_ipsec_spd.php:120 +msgid "incoming (as seen by firewall)" +msgstr "" + +#: usr/local/www/diag_ipsec_spd.php:126 usr/local/www/diag_ipsec_spd.php:127 +#: usr/local/www/diag_ipsec_spd.php:127 +msgid "outgoing (as seen by firewall)" +msgstr "" + +#: usr/local/www/diag_ipsec_spd.php:131 usr/local/www/diag_ipsec_spd.php:132 +#: usr/local/www/diag_ipsec_spd.php:132 +msgid "No IPsec security policies." +msgstr "" + +#: usr/local/www/diag_ping.php:59 usr/local/www/diag_ping.php:61 +#: usr/local/www/diag_ping.php:61 +#, php-format +msgid "Count must be between 1 and %s" +msgstr "" + +#: usr/local/www/diag_ping.php:126 usr/local/www/diag_ping.php:148 +#: usr/local/www/diag_ping.php:148 +msgid "Ping output" +msgstr "" + +#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcp.php:111 +msgid "" +"The DHCP Server can only be enabled on interfaces configured with static IP " +"addresses" +msgstr "" + +#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcpv6.php:74 +#: usr/local/www/services_router_advertisements.php:75 +#: usr/local/www/services_dhcpv6.php:75 +#: usr/local/www/services_router_advertisements.php:75 +#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcpv6.php:75 +msgid "Only interfaces configured with a static IP will be shown" +msgstr "" + +#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177 +#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189 +#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +msgid "Range begin" +msgstr "" + +#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177 +#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189 +#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +msgid "Range end" +msgstr "" + +#: usr/local/www/services_dhcp.php:212 usr/local/www/services_dhcp.php:214 +#: usr/local/www/services_dhcpv6.php:182 usr/local/www/services_dhcpv6.php:186 +#: usr/local/www/services_dhcpv6.php:188 usr/local/www/services_dhcp.php:213 +#: usr/local/www/services_dhcp.php:215 usr/local/www/services_dhcpv6.php:194 +#: usr/local/www/services_dhcpv6.php:198 usr/local/www/services_dhcpv6.php:200 +#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcp.php:261 +#: usr/local/www/services_dhcpv6.php:179 usr/local/www/services_dhcpv6.php:183 +#: usr/local/www/services_dhcpv6.php:185 usr/local/www/services_dhcp.php:240 +#: usr/local/www/services_dhcp.php:242 usr/local/www/services_dhcpv6.php:173 +#: usr/local/www/services_dhcpv6.php:177 usr/local/www/services_dhcp.php:240 +#: usr/local/www/services_dhcp.php:242 usr/local/www/services_dhcpv6.php:173 +#: usr/local/www/services_dhcpv6.php:177 usr/local/www/services_dhcpv6.php:179 +msgid "A valid range must be specified." +msgstr "" + +#: usr/local/www/services_dhcp.php:216 usr/local/www/services_dhcp.php:217 +#: usr/local/www/services_dhcp.php:263 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/services_dhcp.php:244 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/services_dhcp.php:244 +msgid "A valid IP address must be specified for the gateway." +msgstr "" + +#: usr/local/www/services_dhcp.php:218 usr/local/www/services_dhcp.php:219 +#: usr/local/www/services_dhcp.php:265 +#: usr/local/www/services_dhcp_edit.php:209 +#: usr/local/www/services_dhcp.php:246 +#: usr/local/www/services_dhcp_edit.php:209 +#: usr/local/www/services_dhcp.php:246 +msgid "" +"A valid IP address must be specified for the primary/secondary WINS servers." +msgstr "" + +#: usr/local/www/services_dhcp.php:223 usr/local/www/services_dhcp.php:224 +#: usr/local/www/services_dhcp.php:270 +#: usr/local/www/services_dhcp_edit.php:215 +#: usr/local/www/services_dhcp.php:251 +#: usr/local/www/services_dhcp_edit.php:215 +#: usr/local/www/services_dhcp.php:251 +#, php-format +msgid "" +"The gateway address %s does not lie within the chosen interface's subnet." +msgstr "" + +#: usr/local/www/services_dhcp.php:226 usr/local/www/services_dhcp.php:227 +#: usr/local/www/services_dhcp.php:273 +#: usr/local/www/services_dhcp_edit.php:218 +#: usr/local/www/services_dhcp.php:254 +#: usr/local/www/services_dhcp_edit.php:218 +#: usr/local/www/services_dhcp.php:254 +msgid "" +"A valid IP address must be specified for the primary/secondary DNS servers." +msgstr "" + +#: usr/local/www/services_dhcp.php:229 usr/local/www/services_dhcpv6.php:195 +#: usr/local/www/services_dhcp.php:230 usr/local/www/services_dhcpv6.php:207 +#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcpv6.php:192 +#: usr/local/www/services_dhcp_edit.php:221 +#: usr/local/www/services_dhcp.php:257 usr/local/www/services_dhcpv6.php:186 +#: usr/local/www/services_dhcp_edit.php:221 +#: usr/local/www/services_dhcp.php:257 usr/local/www/services_dhcpv6.php:186 +msgid "The default lease time must be at least 60 seconds." +msgstr "" + +#: usr/local/www/services_dhcp.php:231 usr/local/www/services_dhcpv6.php:197 +#: usr/local/www/services_dhcp.php:232 usr/local/www/services_dhcpv6.php:209 +#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcpv6.php:194 +#: usr/local/www/services_dhcp_edit.php:223 +#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcpv6.php:188 +#: usr/local/www/services_dhcp.php:279 +#: usr/local/www/services_dhcp_edit.php:223 +#: usr/local/www/services_dhcp.php:279 usr/local/www/services_dhcpv6.php:188 +msgid "" +"The maximum lease time must be at least 60 seconds and higher than the " +"default lease time." +msgstr "" + +#: usr/local/www/services_dhcp.php:233 usr/local/www/services_dhcpv6.php:199 +#: usr/local/www/services_dhcp.php:234 usr/local/www/services_dhcpv6.php:211 +#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcpv6.php:196 +#: usr/local/www/services_dhcp_edit.php:225 +#: usr/local/www/services_dhcp.php:261 usr/local/www/services_dhcpv6.php:190 +#: usr/local/www/services_dhcp.php:281 +#: usr/local/www/services_dhcp_edit.php:225 +#: usr/local/www/services_dhcp.php:281 usr/local/www/services_dhcpv6.php:190 +msgid "A valid domain name must be specified for the dynamic DNS registration." +msgstr "" + +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcp.php:246 +#: usr/local/www/services_dhcp.php:298 +#: usr/local/www/services_dhcp_edit.php:237 +#: usr/local/www/services_dhcp.php:279 usr/local/www/services_dhcp.php:299 +#: usr/local/www/services_dhcp_edit.php:237 +#: usr/local/www/services_dhcp.php:299 +msgid "" +"A valid IP address must be specified for the primary/secondary NTP servers." +msgstr "" + +#: usr/local/www/services_dhcp.php:237 usr/local/www/services_dhcpv6.php:203 +#: usr/local/www/services_dhcp.php:248 usr/local/www/services_dhcpv6.php:225 +#: usr/local/www/services_dhcp.php:300 usr/local/www/services_dhcpv6.php:210 +#: usr/local/www/services_dhcp.php:281 usr/local/www/services_dhcpv6.php:204 +#: usr/local/www/services_dhcp.php:301 usr/local/www/services_dhcp.php:301 +#: usr/local/www/services_dhcpv6.php:204 +msgid "A valid domain name must be specified for the DNS domain." +msgstr "" + +#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcp.php:250 +#: usr/local/www/services_dhcp.php:302 +#: usr/local/www/services_dhcp_edit.php:239 +#: usr/local/www/services_dhcp.php:283 usr/local/www/services_dhcp.php:303 +#: usr/local/www/services_dhcp_edit.php:239 +#: usr/local/www/services_dhcp.php:303 +msgid "A valid IP address or hostname must be specified for the TFTP server." +msgstr "" + +#: usr/local/www/services_dhcp.php:241 usr/local/www/services_dhcp.php:252 +#: usr/local/www/services_dhcp.php:304 +#: usr/local/www/services_dhcp_edit.php:241 +#: usr/local/www/services_dhcp.php:285 usr/local/www/services_dhcp.php:305 +#: usr/local/www/services_dhcp_edit.php:241 +#: usr/local/www/services_dhcp.php:305 +msgid "A valid IP address must be specified for the network boot server." +msgstr "" + +#: usr/local/www/services_dhcp.php:244 usr/local/www/services_dhcp.php:255 +#: usr/local/www/services_dhcp.php:307 usr/local/www/services_dhcp.php:288 +#: usr/local/www/services_dhcp.php:308 usr/local/www/services_dhcp.php:308 +msgid "You cannot use the network address in the starting subnet range." +msgstr "" + +#: usr/local/www/services_dhcp.php:246 usr/local/www/services_dhcp.php:257 +#: usr/local/www/services_dhcp.php:309 usr/local/www/services_dhcp.php:290 +#: usr/local/www/services_dhcp.php:310 usr/local/www/services_dhcp.php:310 +msgid "You cannot use the broadcast address in the ending subnet range." +msgstr "" + +#: usr/local/www/services_dhcp.php:253 usr/local/www/services_dhcp.php:264 +#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcp.php:297 +#: usr/local/www/services_dhcp.php:317 usr/local/www/services_dhcp.php:317 +#, php-format +msgid "The subnet range cannot overlap with virtual IP address %s." +msgstr "" + +#: usr/local/www/services_dhcp.php:268 usr/local/www/services_dhcp.php:279 +#: usr/local/www/services_dhcp.php:331 usr/local/www/services_dhcp.php:312 +#: usr/local/www/services_dhcp.php:332 usr/local/www/services_dhcp.php:332 +msgid "Text type cannot include quotation marks." +msgstr "" + +#: usr/local/www/services_dhcp.php:270 usr/local/www/services_dhcp.php:281 +#: usr/local/www/services_dhcp.php:333 usr/local/www/services_dhcp.php:314 +#: usr/local/www/services_dhcp.php:334 usr/local/www/services_dhcp.php:334 +msgid "" +"String type must be enclosed in quotes like \"this\" or must be a series of " +"octets specified in hexadecimal, separated by colons, like 01:23:45:67:89:ab:" +"cd:ef" +msgstr "" + +#: usr/local/www/services_dhcp.php:272 usr/local/www/services_dhcp.php:283 +#: usr/local/www/services_dhcp.php:335 usr/local/www/services_dhcp.php:316 +#: usr/local/www/services_dhcp.php:336 usr/local/www/services_dhcp.php:336 +msgid "Boolean type must be true, false, on, or off." +msgstr "" + +#: usr/local/www/services_dhcp.php:274 usr/local/www/services_dhcp.php:285 +#: usr/local/www/services_dhcp.php:337 usr/local/www/services_dhcp.php:318 +#: usr/local/www/services_dhcp.php:338 usr/local/www/services_dhcp.php:338 +msgid "Unsigned 8-bit integer type must be a number in the range 0 to 255." +msgstr "" + +#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcp.php:287 +#: usr/local/www/services_dhcp.php:339 usr/local/www/services_dhcp.php:320 +#: usr/local/www/services_dhcp.php:340 usr/local/www/services_dhcp.php:340 +msgid "Unsigned 16-bit integer type must be a number in the range 0 to 65535." +msgstr "" + +#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcp.php:289 +#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcp.php:322 +#: usr/local/www/services_dhcp.php:342 usr/local/www/services_dhcp.php:342 +msgid "" +"Unsigned 32-bit integer type must be a number in the range 0 to 4294967295." +msgstr "" + +#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcp.php:291 +#: usr/local/www/services_dhcp.php:343 usr/local/www/services_dhcp.php:324 +#: usr/local/www/services_dhcp.php:344 usr/local/www/services_dhcp.php:344 +msgid "Signed 8-bit integer type must be a number in the range -128 to 127." +msgstr "" + +#: usr/local/www/services_dhcp.php:282 usr/local/www/services_dhcp.php:293 +#: usr/local/www/services_dhcp.php:345 usr/local/www/services_dhcp.php:326 +#: usr/local/www/services_dhcp.php:346 usr/local/www/services_dhcp.php:346 +msgid "" +"Signed 16-bit integer type must be a number in the range -32768 to 32767." +msgstr "" + +#: usr/local/www/services_dhcp.php:284 usr/local/www/services_dhcp.php:295 +#: usr/local/www/services_dhcp.php:347 usr/local/www/services_dhcp.php:328 +#: usr/local/www/services_dhcp.php:348 usr/local/www/services_dhcp.php:348 +msgid "" +"Signed 32-bit integer type must be a number in the range -2147483648 to " +"2147483647." +msgstr "" + +#: usr/local/www/services_dhcp.php:286 usr/local/www/services_dhcp.php:297 +#: usr/local/www/services_dhcp.php:349 usr/local/www/services_dhcp.php:330 +#: usr/local/www/services_dhcp.php:350 usr/local/www/services_dhcp.php:350 +msgid "IP address or host type must be an IP address or host name." +msgstr "" + +#: usr/local/www/services_dhcp.php:297 usr/local/www/services_dhcpv6.php:230 +#: usr/local/www/services_dhcp.php:308 usr/local/www/services_dhcpv6.php:252 +#: usr/local/www/services_dhcp.php:360 usr/local/www/services_dhcpv6.php:237 +#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcpv6.php:232 +#: usr/local/www/services_dhcp.php:361 usr/local/www/services_dhcp.php:361 +#: usr/local/www/services_dhcpv6.php:232 +msgid "The specified range lies outside of the current subnet." +msgstr "" + +#: usr/local/www/services_dhcp.php:301 usr/local/www/services_dhcp.php:312 +#: usr/local/www/services_dhcpv6.php:257 usr/local/www/services_dhcp.php:364 +#: usr/local/www/services_dhcpv6.php:242 usr/local/www/services_dhcp.php:345 +#: usr/local/www/services_dhcpv6.php:237 usr/local/www/services_dhcp.php:365 +#: usr/local/www/services_dhcp.php:365 usr/local/www/services_dhcpv6.php:237 +msgid "The range is invalid (first element higher than second element)." +msgstr "" + +#: usr/local/www/services_dhcp.php:305 usr/local/www/services_dhcpv6.php:240 +#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcpv6.php:261 +#: usr/local/www/services_dhcp.php:372 usr/local/www/services_dhcpv6.php:246 +#: usr/local/www/services_dhcp.php:368 usr/local/www/services_dhcpv6.php:241 +#: usr/local/www/services_dhcp.php:388 usr/local/www/services_dhcp.php:388 +#: usr/local/www/services_dhcpv6.php:241 +#, php-format +msgid "" +"You must disable the DHCP relay on the %s interface before enabling the DHCP " +"server." +msgstr "" + +#: usr/local/www/services_dhcp.php:315 usr/local/www/services_dhcp.php:326 +#: usr/local/www/services_dhcpv6.php:276 usr/local/www/services_dhcp.php:382 +#: usr/local/www/services_dhcpv6.php:261 usr/local/www/services_dhcp.php:378 +#: usr/local/www/services_dhcpv6.php:256 usr/local/www/services_dhcp.php:398 +#: usr/local/www/services_dhcp.php:398 usr/local/www/services_dhcpv6.php:256 +#, php-format +msgid "The DHCP range cannot overlap any static DHCP mappings." +msgstr "" + +#: usr/local/www/services_dhcp.php:421 usr/local/www/services_dhcp.php:433 +#: usr/local/www/services_dhcp.php:527 usr/local/www/services_dhcp.php:526 +#: usr/local/www/services_dhcp.php:546 usr/local/www/services_dhcp.php:546 +msgid "DHCP server" +msgstr "" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:559 +msgid "Text" +msgstr "" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:559 +msgid "String" +msgstr "" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:559 +msgid "Boolean" +msgstr "" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:560 +msgid "Unsigned 8-bit integer" +msgstr "" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:560 +msgid "Unsigned 16-bit integer" +msgstr "" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:560 +msgid "Unsigned 32-bit integer" +msgstr "" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561 +msgid "Signed 8-bit integer" +msgstr "" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561 +msgid "Signed 16-bit integer" +msgstr "" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561 +msgid "Signed 32-bit integer" +msgstr "" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561 +msgid "IP address or host" +msgstr "" + +#: usr/local/www/services_dhcp.php:528 usr/local/www/services_dhcpv6.php:453 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcpv6.php:480 +#: usr/local/www/services_dhcp.php:645 usr/local/www/services_dhcpv6.php:460 +#: usr/local/www/services_dhcp.php:647 usr/local/www/services_dhcpv6.php:455 +#: usr/local/www/services_dhcp.php:667 usr/local/www/services_dhcp.php:667 +#: usr/local/www/services_dhcpv6.php:455 +msgid "" +"DHCP Relay is currently enabled. Cannot enable the DHCP Server service while " +"the DHCP Relay is enabled on any interface." +msgstr "" + +#: usr/local/www/services_dhcp.php:536 usr/local/www/services_dhcpv6.php:461 +#: usr/local/www/services_dhcp.php:549 usr/local/www/services_dhcpv6.php:488 +#: usr/local/www/services_dhcp.php:653 usr/local/www/services_dhcpv6.php:468 +#: usr/local/www/services_dhcp.php:655 usr/local/www/services_dhcpv6.php:463 +#: usr/local/www/services_dhcp.php:675 usr/local/www/services_dhcp.php:675 +#: usr/local/www/services_dhcpv6.php:463 +msgid "The static mapping configuration has been changed" +msgstr "" + +#: usr/local/www/services_dhcp.php:575 usr/local/www/services_dhcp.php:588 +#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcp.php:695 +#: usr/local/www/services_dhcp.php:715 usr/local/www/services_dhcp.php:715 +#, php-format +msgid "Enable DHCP server on %s interface" +msgstr "" + +#: usr/local/www/services_dhcp.php:583 usr/local/www/services_dhcpv6.php:518 +#: usr/local/www/services_dhcp.php:596 usr/local/www/services_dhcpv6.php:592 +#: usr/local/www/services_dhcp.php:706 usr/local/www/services_dhcpv6.php:523 +#: usr/local/www/services_dhcp.php:708 usr/local/www/services_dhcpv6.php:534 +#: usr/local/www/services_dhcp.php:728 usr/local/www/services_dhcp.php:728 +#: usr/local/www/services_dhcpv6.php:534 +msgid "Deny unknown clients" +msgstr "" + +#: usr/local/www/services_dhcp.php:584 usr/local/www/services_dhcpv6.php:519 +#: usr/local/www/services_dhcp.php:597 usr/local/www/services_dhcpv6.php:593 +#: usr/local/www/services_dhcp.php:707 usr/local/www/services_dhcpv6.php:524 +#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:535 +#: usr/local/www/services_dhcp.php:729 usr/local/www/services_dhcp.php:729 +#: usr/local/www/services_dhcpv6.php:535 +msgid "" +"If this is checked, only the clients defined below will get DHCP leases from " +"this server. " +msgstr "" + +#: usr/local/www/services_dhcp.php:593 usr/local/www/services_dhcpv6.php:528 +#: usr/local/www/services_dhcp.php:606 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_dhcp.php:716 usr/local/www/services_dhcpv6.php:533 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +#: usr/local/www/services_dhcp.php:726 usr/local/www/services_dhcpv6.php:548 +#: usr/local/www/services_dhcp.php:746 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +#: usr/local/www/services_dhcp.php:746 usr/local/www/services_dhcpv6.php:548 +msgid "Subnet mask" +msgstr "" + +#: usr/local/www/services_dhcp.php:599 usr/local/www/services_dhcpv6.php:534 +#: usr/local/www/services_dhcp.php:612 usr/local/www/services_dhcpv6.php:608 +#: usr/local/www/services_dhcp.php:722 usr/local/www/services_dhcpv6.php:539 +#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:554 +#: usr/local/www/services_dhcp.php:752 usr/local/www/services_dhcp.php:752 +#: usr/local/www/services_dhcpv6.php:554 +msgid "Available range" +msgstr "" + +#: usr/local/www/services_dhcp.php:616 usr/local/www/services_dhcpv6.php:552 +#: usr/local/www/services_dhcp.php:629 usr/local/www/services_dhcpv6.php:625 +#: usr/local/www/services_dhcp.php:750 usr/local/www/vpn_l2tp.php:342 +#: usr/local/www/services_dhcpv6.php:556 usr/local/www/vpn_l2tp.php:345 +#: usr/local/www/services_dhcp.php:760 usr/local/www/services_dhcpv6.php:573 +#: usr/local/www/services_dhcp.php:780 usr/local/www/vpn_l2tp.php:345 +#: usr/local/www/services_dhcp.php:780 usr/local/www/services_dhcpv6.php:573 +msgid "Subnet Mask" +msgstr "" + +#: usr/local/www/services_dhcp.php:633 usr/local/www/services_dhcpv6.php:569 +#: usr/local/www/services_dhcp.php:646 usr/local/www/services_dhcpv6.php:642 +#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:573 +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:590 +#: usr/local/www/services_dhcp.php:797 usr/local/www/services_dhcp.php:797 +#: usr/local/www/services_dhcpv6.php:590 +msgid "Range" +msgstr "" + +#: usr/local/www/services_dhcp.php:640 usr/local/www/services_dhcp.php:653 +#: usr/local/www/services_dhcp.php:829 +#: usr/local/www/services_dhcp_edit.php:395 +#: usr/local/www/services_dhcp.php:843 usr/local/www/services_dhcp.php:863 +#: usr/local/www/services_dhcp_edit.php:395 +#: usr/local/www/services_dhcp.php:863 +msgid "WINS servers" +msgstr "" + +#: usr/local/www/services_dhcp.php:651 usr/local/www/services_dhcpv6.php:594 +#: usr/local/www/services_dhcp.php:664 usr/local/www/services_dhcpv6.php:671 +#: usr/local/www/services_router_advertisements.php:376 +#: usr/local/www/services_dhcp.php:840 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_dhcp_edit.php:406 +#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:619 +#: usr/local/www/services_router_advertisements.php:371 +#: usr/local/www/services_dhcp.php:874 +#: usr/local/www/services_router_advertisements.php:371 +#: usr/local/www/services_dhcp_edit.php:406 +#: usr/local/www/services_dhcp.php:874 usr/local/www/services_dhcpv6.php:619 +msgid "" +"NOTE: leave blank to use the system default DNS servers - this interface's " +"IP if DNS forwarder is enabled, otherwise the servers configured on the " +"General page." +msgstr "" + +#: usr/local/www/services_dhcp.php:658 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_dhcp.php:671 usr/local/www/services_dhcp.php:847 +#: usr/local/www/services_dhcp_edit.php:413 +#: usr/local/www/services_dhcp.php:861 usr/local/www/services_dhcp.php:881 +#: usr/local/www/services_dhcp_edit.php:413 +#: usr/local/www/services_dhcp.php:881 +msgid "" +"The default is to use the IP on this interface of the firewall as the " +"gateway. Specify an alternate gateway here if this is not the correct " +"gateway for your network." +msgstr "" + +#: usr/local/www/services_dhcp.php:662 usr/local/www/services_dhcpv6.php:607 +#: usr/local/www/services_dhcp.php:675 usr/local/www/services_dhcpv6.php:675 +#: usr/local/www/services_dhcp.php:851 usr/local/www/services_dhcpv6.php:606 +#: usr/local/www/services_dhcp_edit.php:417 +#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:623 +#: usr/local/www/services_dhcp.php:885 +#: usr/local/www/services_dhcp_edit.php:417 +#: usr/local/www/services_dhcp.php:885 usr/local/www/services_dhcpv6.php:623 +msgid "Domain name" +msgstr "" + +#: usr/local/www/services_dhcp.php:665 usr/local/www/services_dhcpv6.php:610 +#: usr/local/www/services_dhcp.php:678 usr/local/www/services_dhcpv6.php:678 +#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:609 +#: usr/local/www/services_dhcp_edit.php:420 +#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcpv6.php:626 +#: usr/local/www/services_dhcp.php:888 +#: usr/local/www/services_dhcp_edit.php:420 +#: usr/local/www/services_dhcp.php:888 usr/local/www/services_dhcpv6.php:626 +msgid "" +"The default is to use the domain name of this system as the default domain " +"name provided by DHCP. You may specify an alternate domain name here." +msgstr "" + +#: usr/local/www/services_dhcp.php:669 usr/local/www/services_dhcpv6.php:614 +#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:682 +#: usr/local/www/services_router_advertisements.php:381 +#: usr/local/www/services_dhcp.php:858 usr/local/www/services_dhcpv6.php:613 +#: usr/local/www/services_dhcp_edit.php:424 +#: usr/local/www/services_dhcp.php:872 usr/local/www/services_dhcpv6.php:630 +#: usr/local/www/services_router_advertisements.php:376 +#: usr/local/www/services_dhcp.php:892 +#: usr/local/www/services_router_advertisements.php:376 +#: usr/local/www/services_dhcp_edit.php:424 +#: usr/local/www/services_dhcp.php:892 usr/local/www/services_dhcpv6.php:630 +msgid "Domain search list" +msgstr "" + +#: usr/local/www/services_dhcp.php:672 usr/local/www/services_dhcpv6.php:617 +msgid "The DHCP server can optionally provide a domain search list." +msgstr "" + +#: usr/local/www/services_dhcp.php:676 usr/local/www/services_dhcpv6.php:621 +#: usr/local/www/services_dhcp.php:689 usr/local/www/services_dhcpv6.php:689 +#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:620 +#: usr/local/www/services_dhcp_edit.php:431 +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:637 +#: usr/local/www/services_dhcp.php:899 +#: usr/local/www/services_dhcp_edit.php:431 +#: usr/local/www/services_dhcp.php:899 usr/local/www/services_dhcpv6.php:637 +msgid "Default lease time" +msgstr "" + +#: usr/local/www/services_dhcp.php:680 usr/local/www/services_dhcpv6.php:625 +#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcpv6.php:693 +#: usr/local/www/services_dhcp.php:869 usr/local/www/services_dhcpv6.php:624 +#: usr/local/www/services_dhcp_edit.php:435 +#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:641 +#: usr/local/www/services_dhcp.php:903 +#: usr/local/www/services_dhcp_edit.php:435 +#: usr/local/www/services_dhcp.php:903 usr/local/www/services_dhcpv6.php:641 +msgid "" +"This is used for clients that do not ask for a specific expiration time." +msgstr "" + +#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:627 +#: usr/local/www/services_dhcp.php:695 usr/local/www/services_dhcpv6.php:695 +#: usr/local/www/services_dhcp.php:871 usr/local/www/services_dhcpv6.php:626 +#: usr/local/www/services_dhcp_edit.php:437 +#: usr/local/www/services_dhcp.php:885 usr/local/www/services_dhcpv6.php:643 +#: usr/local/www/services_dhcp.php:905 +#: usr/local/www/services_dhcp_edit.php:437 +#: usr/local/www/services_dhcp.php:905 usr/local/www/services_dhcpv6.php:643 +msgid "The default is 7200 seconds." +msgstr "" + +#: usr/local/www/services_dhcp.php:686 usr/local/www/services_dhcpv6.php:631 +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:699 +#: usr/local/www/services_dhcp.php:875 usr/local/www/services_dhcpv6.php:630 +#: usr/local/www/services_dhcp_edit.php:441 +#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:647 +#: usr/local/www/services_dhcp.php:909 +#: usr/local/www/services_dhcp_edit.php:441 +#: usr/local/www/services_dhcp.php:909 usr/local/www/services_dhcpv6.php:647 +msgid "Maximum lease time" +msgstr "" + +#: usr/local/www/services_dhcp.php:690 usr/local/www/services_dhcpv6.php:635 +#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcpv6.php:703 +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:634 +#: usr/local/www/services_dhcp_edit.php:445 +#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:651 +#: usr/local/www/services_dhcp.php:913 +#: usr/local/www/services_dhcp_edit.php:445 +#: usr/local/www/services_dhcp.php:913 usr/local/www/services_dhcpv6.php:651 +msgid "" +"This is the maximum lease time for clients that ask for a specific " +"expiration time." +msgstr "" + +#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcpv6.php:637 +#: usr/local/www/services_dhcp.php:705 usr/local/www/services_dhcpv6.php:705 +#: usr/local/www/services_dhcp.php:881 usr/local/www/services_dhcpv6.php:636 +#: usr/local/www/services_dhcp_edit.php:447 +#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcpv6.php:653 +#: usr/local/www/services_dhcp.php:915 +#: usr/local/www/services_dhcp_edit.php:447 +#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:653 +msgid "The default is 86400 seconds." +msgstr "" + +#: usr/local/www/services_dhcp.php:696 usr/local/www/services_dhcpv6.php:641 +#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:886 usr/local/www/services_dhcpv6.php:640 +#: usr/local/www/services_dhcp.php:900 usr/local/www/services_dhcpv6.php:657 +#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcp.php:920 +#: usr/local/www/services_dhcpv6.php:657 +msgid "Failover peer IP:" +msgstr "" + +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:644 +#: usr/local/www/services_dhcp.php:712 usr/local/www/services_dhcpv6.php:712 +#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:643 +#: usr/local/www/services_dhcpv6.php:660 usr/local/www/services_dhcpv6.php:660 +msgid "" +"Leave blank to disable. Enter the interface IP address of the other " +"machine. Machines must be using CARP." +msgstr "" + +#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcp.php:716 +#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcp.php:909 +#: usr/local/www/services_dhcp.php:1150 usr/local/www/services_dhcp.php:929 +#: usr/local/www/services_dhcp.php:1170 usr/local/www/services_dhcp.php:929 +#: usr/local/www/services_dhcp.php:1170 +msgid "Static ARP" +msgstr "" + +#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcp.php:723 +#: usr/local/www/services_dhcp.php:902 usr/local/www/services_dhcp.php:916 +#: usr/local/www/services_dhcp.php:936 usr/local/www/services_dhcp.php:936 +msgid "Enable Static ARP entries" +msgstr "" + +#: usr/local/www/services_dhcp.php:715 usr/local/www/services_dhcp.php:728 +#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:921 +#: usr/local/www/services_dhcp.php:941 +msgid "" +"Only the machines listed below will be able to communicate with the firewall " +"on this NIC." +msgstr "" + +#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcpv6.php:651 +#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcpv6.php:744 +#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcpv6.php:675 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcpv6.php:692 +#: usr/local/www/services_dhcp.php:978 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp.php:978 usr/local/www/services_dhcpv6.php:692 +msgid "Show Dynamic DNS" +msgstr "" + +#: usr/local/www/services_dhcp.php:729 usr/local/www/services_dhcpv6.php:655 +#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:748 +#: usr/local/www/services_dhcp.php:949 usr/local/www/services_dhcpv6.php:679 +#: usr/local/www/services_dhcp_edit.php:458 +#: usr/local/www/services_dhcp.php:962 usr/local/www/services_dhcpv6.php:696 +#: usr/local/www/services_dhcp.php:982 +#: usr/local/www/services_dhcp_edit.php:458 +#: usr/local/www/services_dhcp.php:982 usr/local/www/services_dhcpv6.php:696 +msgid "Enable registration of DHCP client names in DNS." +msgstr "" + +#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:658 +#: usr/local/www/services_dhcp.php:770 usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/services_dhcp.php:952 usr/local/www/services_dhcpv6.php:682 +#: usr/local/www/services_dhcp_edit.php:461 +#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcpv6.php:699 +#: usr/local/www/services_dhcp.php:985 +#: usr/local/www/services_dhcp_edit.php:461 +#: usr/local/www/services_dhcp.php:985 usr/local/www/services_dhcpv6.php:699 +msgid "Note: Leave blank to disable dynamic DNS registration." +msgstr "" + +#: usr/local/www/services_dhcp.php:733 usr/local/www/services_dhcpv6.php:659 +#: usr/local/www/services_dhcp.php:771 usr/local/www/services_dhcpv6.php:752 +#: usr/local/www/services_dhcp.php:953 usr/local/www/services_dhcpv6.php:683 +#: usr/local/www/services_dhcp_edit.php:462 +#: usr/local/www/services_dhcp.php:966 usr/local/www/services_dhcpv6.php:700 +#: usr/local/www/services_dhcp.php:986 +#: usr/local/www/services_dhcp_edit.php:462 +#: usr/local/www/services_dhcp.php:986 usr/local/www/services_dhcpv6.php:700 +msgid "" +"Enter the dynamic DNS domain which will be used to register client names in " +"the DNS server." +msgstr "" + +#: usr/local/www/services_dhcp.php:738 usr/local/www/services_dhcpv6.php:664 +#: usr/local/www/services_dhcp.php:776 usr/local/www/services_dhcpv6.php:757 +#: usr/local/www/services_dhcp.php:972 usr/local/www/services_dhcpv6.php:688 +#: usr/local/www/services_dhcp_edit.php:467 +#: usr/local/www/services_dhcp.php:985 usr/local/www/services_dhcpv6.php:705 +#: usr/local/www/services_dhcp.php:1005 +#: usr/local/www/services_dhcp_edit.php:467 +#: usr/local/www/services_dhcp.php:1005 usr/local/www/services_dhcpv6.php:705 +msgid "NTP servers" +msgstr "" + +#: usr/local/www/services_dhcp.php:741 usr/local/www/services_dhcpv6.php:667 +#: usr/local/www/services_dhcp.php:779 usr/local/www/services_dhcpv6.php:760 +#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcpv6.php:708 +#: usr/local/www/services_dhcp.php:1008 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcpv6.php:708 +msgid "Show NTP configuration" +msgstr "" + +#: usr/local/www/services_dhcp.php:750 usr/local/www/services_dhcpv6.php:676 +#: usr/local/www/services_dhcp.php:788 usr/local/www/services_dhcpv6.php:770 +#: usr/local/www/services_dhcp.php:984 usr/local/www/services_dhcpv6.php:701 +#: usr/local/www/services_dhcp_edit.php:479 +#: usr/local/www/services_dhcp.php:997 usr/local/www/services_dhcpv6.php:718 +#: usr/local/www/services_dhcp.php:1017 +#: usr/local/www/services_dhcp_edit.php:479 +#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:718 +msgid "TFTP server" +msgstr "" + +#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcpv6.php:679 +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:773 +#: usr/local/www/services_dhcp.php:987 usr/local/www/services_dhcpv6.php:704 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:1000 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcp.php:1020 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:1020 usr/local/www/services_dhcpv6.php:721 +msgid "Show TFTP configuration" +msgstr "" + +#: usr/local/www/services_dhcp.php:757 usr/local/www/services_dhcpv6.php:683 +#: usr/local/www/services_dhcp.php:795 usr/local/www/services_dhcpv6.php:777 +#: usr/local/www/services_dhcp.php:991 usr/local/www/services_dhcpv6.php:708 +#: usr/local/www/services_dhcp_edit.php:486 +#: usr/local/www/services_dhcp.php:1004 usr/local/www/services_dhcpv6.php:725 +#: usr/local/www/services_dhcp.php:1024 +#: usr/local/www/services_dhcp_edit.php:486 +#: usr/local/www/services_dhcp.php:1024 usr/local/www/services_dhcpv6.php:725 +msgid "" +"Leave blank to disable. Enter a full hostname or IP for the TFTP server." +msgstr "" + +#: usr/local/www/services_dhcp.php:762 usr/local/www/services_dhcpv6.php:688 +#: usr/local/www/services_dhcp.php:800 usr/local/www/services_dhcpv6.php:783 +#: usr/local/www/services_dhcp.php:996 usr/local/www/services_dhcpv6.php:714 +#: usr/local/www/services_dhcp.php:1009 usr/local/www/services_dhcpv6.php:731 +#: usr/local/www/services_dhcp.php:1029 usr/local/www/services_dhcp.php:1029 +#: usr/local/www/services_dhcpv6.php:731 +msgid "LDAP URI" +msgstr "" + +#: usr/local/www/services_dhcp.php:765 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcp.php:803 usr/local/www/services_dhcpv6.php:786 +#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcpv6.php:717 +#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcpv6.php:734 +#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcp.php:1032 +#: usr/local/www/services_dhcpv6.php:734 +msgid "Show LDAP configuration" +msgstr "" + +#: usr/local/www/services_dhcp.php:769 usr/local/www/services_dhcpv6.php:695 +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:1003 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcp.php:1016 usr/local/www/services_dhcpv6.php:738 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcp.php:1036 +#: usr/local/www/services_dhcpv6.php:738 +msgid "" +"Leave blank to disable. Enter a full URI for the LDAP server in the form " +"ldap://ldap.example.com/dc=example,dc=com" +msgstr "" + +#: usr/local/www/services_dhcp.php:774 usr/local/www/services_dhcpv6.php:700 +#: usr/local/www/services_dhcp.php:812 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcpv6.php:726 +#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:743 +#: usr/local/www/services_dhcp.php:1041 usr/local/www/services_dhcp.php:1041 +#: usr/local/www/services_dhcpv6.php:743 +msgid "Enable network booting" +msgstr "" + +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:703 +#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcpv6.php:798 +#: usr/local/www/services_dhcp.php:1011 usr/local/www/services_dhcpv6.php:729 +#: usr/local/www/services_dhcp.php:1024 usr/local/www/services_dhcpv6.php:746 +#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcp.php:1044 +#: usr/local/www/services_dhcpv6.php:746 +msgid "Show Network booting" +msgstr "" + +#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcpv6.php:707 +#: usr/local/www/services_dhcp.php:819 usr/local/www/services_dhcpv6.php:802 +#: usr/local/www/services_dhcp.php:1015 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/services_dhcp.php:1028 usr/local/www/services_dhcpv6.php:750 +#: usr/local/www/services_dhcp.php:1048 usr/local/www/services_dhcp.php:1048 +#: usr/local/www/services_dhcpv6.php:750 +msgid "Enables network booting." +msgstr "" + +#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735 +#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752 +#: usr/local/www/services_dhcp.php:1050 usr/local/www/services_dhcp.php:1050 +#: usr/local/www/services_dhcpv6.php:752 +msgid "Enter the IP of the" +msgstr "" + +#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735 +#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752 +#: usr/local/www/services_dhcp.php:1050 usr/local/www/services_dhcp.php:1050 +#: usr/local/www/services_dhcpv6.php:752 +msgid "next-server" +msgstr "" + +#: usr/local/www/services_dhcp.php:785 usr/local/www/services_dhcpv6.php:711 +#: usr/local/www/services_dhcp.php:823 usr/local/www/services_dhcpv6.php:806 +#: usr/local/www/services_dhcp.php:1019 usr/local/www/services_dhcpv6.php:737 +#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcpv6.php:754 +#: usr/local/www/services_dhcp.php:1052 usr/local/www/services_dhcp.php:1052 +#: usr/local/www/services_dhcpv6.php:754 +msgid "and the filename" +msgstr "" + +#: usr/local/www/services_dhcp.php:787 usr/local/www/services_dhcpv6.php:713 +#: usr/local/www/services_dhcp.php:825 usr/local/www/services_dhcpv6.php:808 +#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:739 +#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:756 +#: usr/local/www/services_dhcp.php:1054 usr/local/www/services_dhcp.php:1054 +#: usr/local/www/services_dhcpv6.php:756 +msgid "" +"Note: You need both a filename and a boot server configured for this to work!" +msgstr "" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/services_dhcp.php:1056 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcpv6.php:758 +msgid "Enter the" +msgstr "" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/services_dhcp.php:1056 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcpv6.php:758 +msgid "root-path" +msgstr "" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/services_dhcp.php:1056 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcpv6.php:758 +msgid "string" +msgstr "" + +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:717 +#: usr/local/www/services_dhcp.php:829 usr/local/www/services_dhcpv6.php:812 +#: usr/local/www/services_dhcp.php:1025 usr/local/www/services_dhcpv6.php:743 +#: usr/local/www/services_dhcp.php:1038 usr/local/www/services_dhcpv6.php:760 +#: usr/local/www/services_dhcp.php:1058 usr/local/www/services_dhcp.php:1058 +#: usr/local/www/services_dhcpv6.php:760 +msgid "" +"Note: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname" +msgstr "" + +#: usr/local/www/services_dhcp.php:796 usr/local/www/services_dhcpv6.php:722 +#: usr/local/www/services_dhcp.php:834 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1031 usr/local/www/services_dhcpv6.php:748 +#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcpv6.php:765 +#: usr/local/www/services_dhcp.php:1064 usr/local/www/services_dhcp.php:1064 +#: usr/local/www/services_dhcpv6.php:765 +msgid "Additional BOOTP/DHCP Options" +msgstr "" + +#: usr/local/www/services_dhcp.php:799 usr/local/www/services_dhcpv6.php:725 +#: usr/local/www/services_dhcp.php:837 usr/local/www/services_dhcpv6.php:820 +#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:768 +#: usr/local/www/services_dhcp.php:1067 usr/local/www/services_dhcp.php:1067 +#: usr/local/www/services_dhcpv6.php:768 +msgid "Show Additional BOOTP/DHCP Options" +msgstr "" + +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828 +#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759 +#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776 +#: usr/local/www/services_dhcp.php:1075 usr/local/www/services_dhcp.php:1075 +#: usr/local/www/services_dhcpv6.php:776 +msgid "" +"Enter the DHCP option number and the value for each item you would like to " +"include in the DHCP lease information. For a list of available options " +"please visit this" +msgstr "" + +#: usr/local/www/services_dhcp.php:812 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/services_dhcpv6.php:738 usr/local/www/services_dhcp.php:850 +#: usr/local/www/services_dhcpv6.php:833 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:764 +#: usr/local/www/services_dhcp.php:1060 usr/local/www/services_dhcpv6.php:781 +#: usr/local/www/services_dhcp.php:1080 usr/local/www/services_dhcp.php:1080 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_dhcpv6.php:781 +msgid "Number" +msgstr "" + +#: usr/local/www/services_dhcp.php:814 +#: usr/local/www/load_balancer_relay_action_edit.php:506 +#: usr/local/www/system_advanced_sysctl.php:173 +#: usr/local/www/system_advanced_sysctl.php:249 +#: usr/local/www/services_dhcpv6.php:739 +#: usr/local/www/system_certmanager.php:763 +#: usr/local/www/load_balancer_relay_action_edit.php:505 +#: usr/local/www/services_dhcp.php:852 usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/load_balancer_relay_action_edit.php:503 +#: usr/local/www/services_dhcp.php:1049 usr/local/www/services_dhcpv6.php:765 +#: usr/local/www/services_dhcp.php:1062 +#: usr/local/www/system_certmanager.php:788 +#: usr/local/www/services_dhcpv6.php:782 usr/local/www/services_dhcp.php:1082 +#: usr/local/www/system_certmanager.php:789 +#: usr/local/www/services_dhcp.php:1082 +#: usr/local/www/system_certmanager.php:789 +#: usr/local/www/load_balancer_relay_action_edit.php:503 +#: usr/local/www/services_dhcpv6.php:782 +#: usr/local/www/system_advanced_sysctl.php:173 +#: usr/local/www/system_advanced_sysctl.php:249 +msgid "Value" +msgstr "" + +#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885 +#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816 +#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833 +#: usr/local/www/services_dhcp.php:1152 usr/local/www/services_dhcp.php:1152 +#: usr/local/www/services_dhcpv6.php:833 +msgid "The DNS servers entered in" +msgstr "" + +#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885 +#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816 +#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833 +#: usr/local/www/services_dhcp.php:1152 usr/local/www/services_dhcp.php:1152 +#: usr/local/www/services_dhcpv6.php:833 +msgid "System: General setup" +msgstr "" + +#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dhcpv6.php:791 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886 +#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/services_dhcp.php:1153 usr/local/www/services_dhcp.php:1153 +#: usr/local/www/services_dhcpv6.php:834 +msgid "(or the" +msgstr "" + +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792 +#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887 +#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818 +#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835 +#: usr/local/www/services_dhcp.php:1154 usr/local/www/services_dhcp.php:1154 +#: usr/local/www/services_dhcpv6.php:835 +msgid "if enabled)" +msgstr "" + +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792 +#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887 +#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818 +#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835 +#: usr/local/www/services_dhcp.php:1154 usr/local/www/services_dhcp.php:1154 +#: usr/local/www/services_dhcpv6.php:835 +msgid "will be assigned to clients by the DHCP server." +msgstr "" + +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890 +#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcpv6.php:821 +#: usr/local/www/services_dhcp.php:1137 usr/local/www/services_dhcpv6.php:838 +#: usr/local/www/services_dhcp.php:1157 usr/local/www/services_dhcp.php:1157 +#: usr/local/www/services_dhcpv6.php:838 +msgid "The DHCP lease table can be viewed on the" +msgstr "" + +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890 +#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcp.php:1137 +#: usr/local/www/services_dhcp.php:1157 usr/local/www/services_dhcp.php:1157 +msgid "Status: DHCP leases" +msgstr "" + +#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:796 +#: usr/local/www/services_dhcp.php:921 usr/local/www/services_dhcpv6.php:891 +#: usr/local/www/services_dhcp.php:1125 usr/local/www/services_dhcpv6.php:822 +#: usr/local/www/services_dhcp.php:1138 usr/local/www/services_dhcpv6.php:839 +#: usr/local/www/services_dhcp.php:1158 usr/local/www/services_dhcp.php:1158 +#: usr/local/www/services_dhcpv6.php:839 +msgid "page." +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:116 +#: usr/local/www/services_dhcpv6_edit.php:113 +#: usr/local/www/services_dhcpv6_edit.php:115 +#: usr/local/www/services_dhcp_edit.php:118 +#: usr/local/www/services_dhcpv6_edit.php:118 +#: usr/local/www/services_dhcp_edit.php:152 +#: usr/local/www/services_dhcpv6_edit.php:118 +#: usr/local/www/services_dhcp_edit.php:152 +msgid "The hostname cannot end with a hyphen according to RFC952" +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:121 +#: usr/local/www/services_dhcpv6_edit.php:118 +#: usr/local/www/services_dhcpv6_edit.php:120 +#: usr/local/www/services_dhcp_edit.php:123 +#: usr/local/www/services_dhcpv6_edit.php:123 +#: usr/local/www/services_dhcp_edit.php:157 +#: usr/local/www/services_dhcpv6_edit.php:123 +#: usr/local/www/services_dhcp_edit.php:157 +msgid "" +"A valid hostname is specified, but the domain name part should be omitted" +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:132 +#: usr/local/www/services_dhcp_edit.php:134 +#: usr/local/www/services_dhcp_edit.php:168 +#: usr/local/www/services_dhcp_edit.php:168 +msgid "Static ARP is enabled. You must specify an IP address." +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:141 +#: usr/local/www/services_dhcp_edit.php:143 +#: usr/local/www/services_dhcp_edit.php:177 +#: usr/local/www/services_dhcp_edit.php:177 +msgid "This Hostname, IP or MAC address already exists." +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:152 +#: usr/local/www/services_dhcp_edit.php:154 +#: usr/local/www/services_dhcp_edit.php:188 +#: usr/local/www/services_dhcp_edit.php:188 +#, php-format +msgid "The IP address must not be within the DHCP range for this interface." +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:159 +#: usr/local/www/services_dhcp_edit.php:161 +#: usr/local/www/services_dhcp_edit.php:202 +#: usr/local/www/services_dhcp_edit.php:202 +#, php-format +msgid "The IP address must lie in the %s subnet." +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/services_dhcp_edit.php:193 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dhcp_edit.php:301 +msgid "Edit static mapping" +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:204 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/services_dhcp_edit.php:206 +#: usr/local/www/services_dhcp_edit.php:334 +#: usr/local/www/services_dhcp_edit.php:334 +msgid "Static DHCP Mapping" +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:215 +#: usr/local/www/services_dhcp_edit.php:218 +#: usr/local/www/services_dhcp_edit.php:217 +#: usr/local/www/services_dhcp_edit.php:345 +#: usr/local/www/services_captiveportal_mac_edit.php:188 +#: usr/local/www/services_dhcp_edit.php:345 +#: usr/local/www/services_captiveportal_mac_edit.php:188 +msgid "Copy my MAC address" +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:217 +#: usr/local/www/services_dhcp_edit.php:220 +#: usr/local/www/services_dhcp_edit.php:219 +#: usr/local/www/services_dhcp_edit.php:347 +#: usr/local/www/services_dhcp_edit.php:347 +msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx" +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:225 +#: usr/local/www/services_dhcp_edit.php:228 +msgid "" +"If no IP address is given, one will be dynamically allocated from the pool." +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:231 +#: usr/local/www/services_dhcpv6_edit.php:208 +#: usr/local/www/services_dhcpv6_edit.php:211 +#: usr/local/www/services_dhcp_edit.php:234 +#: usr/local/www/services_dhcpv6_edit.php:213 +#: usr/local/www/services_dhcp_edit.php:236 +#: usr/local/www/services_dhcpv6_edit.php:216 +#: usr/local/www/services_dhcp_edit.php:364 +#: usr/local/www/services_dhcpv6_edit.php:216 +#: usr/local/www/services_dhcp_edit.php:364 +msgid "Name of the host, without domain part." +msgstr "" + +#: usr/local/www/services_dhcp_relay.php:72 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/services_dhcp_relay.php:72 +msgid "Destination Server" +msgstr "" + +#: usr/local/www/services_dhcp_relay.php:80 +msgid "A valid Destination Server IP address must be specified." +msgstr "" + +#: usr/local/www/services_dhcp_relay.php:100 usr/local/www/fbegin.inc:122 +#: usr/local/www/status_services.php:295 +#: usr/local/www/widgets/widgets/services_status.widget.php:100 +#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:278 +#: usr/local/www/fbegin.inc:148 usr/local/www/fbegin.inc:140 +#: etc/inc/service-utils.inc:277 etc/inc/service-utils.inc:294 +#: usr/local/www/fbegin.inc:140 usr/local/www/services_dhcp_relay.php:100 +#: etc/inc/service-utils.inc:294 +msgid "DHCP Relay" +msgstr "" + +#: usr/local/www/services_dhcp_relay.php:144 +#: usr/local/www/services_dhcp_relay.php:145 +#: usr/local/www/services_dhcp_relay.php:145 +msgid "DHCP Relay configuration" +msgstr "" + +#: usr/local/www/services_dhcp_relay.php:150 +#: usr/local/www/services_dhcp_relay.php:151 +#: usr/local/www/services_dhcp_relay.php:151 +#, php-format +msgid "Enable DHCP relay on interface" +msgstr "" + +#: usr/local/www/services_dhcp_relay.php:175 +#: usr/local/www/services_dhcpv6_relay.php:176 +#: usr/local/www/services_dhcp_relay.php:176 +#: usr/local/www/services_dhcpv6_relay.php:177 +#: usr/local/www/services_dhcpv6_relay.php:177 +#: usr/local/www/services_dhcp_relay.php:176 +msgid "Append circuit ID and agent ID to requests" +msgstr "" + +#: usr/local/www/services_dhcp_relay.php:176 +#: usr/local/www/services_dhcp_relay.php:177 +#: usr/local/www/services_dhcp_relay.php:177 +#, php-format +msgid "" +"If this is checked, the DHCP relay will append the circuit ID (%s interface " +"number) and the agent ID to the DHCP request." +msgstr "" + +#: usr/local/www/services_dhcp_relay.php:179 +#: usr/local/www/services_dhcpv6_relay.php:180 +#: usr/local/www/services_dhcp_relay.php:180 +#: usr/local/www/services_dhcpv6_relay.php:181 +#: usr/local/www/services_dhcpv6_relay.php:181 +#: usr/local/www/services_dhcp_relay.php:180 +msgid "Destination server" +msgstr "" + +#: usr/local/www/services_dhcp_relay.php:183 +#: usr/local/www/services_dhcp_relay.php:184 +#: usr/local/www/services_dhcp_relay.php:184 +msgid "" +"This is the IP address of the server to which DHCP requests are relayed. You " +"can enter multiple server IP addresses, separated by commas. Select \"Proxy " +"requests to DHCP server on WAN subnet\" to relay DHCP packets to the server " +"that was used on the WAN interface." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:80 usr/local/www/services_dnsmasq.php:84 +#: usr/local/www/services_dnsmasq.php:86 +#: usr/local/www/services_dnsmasq.php:107 +#: usr/local/www/services_dnsmasq.php:107 +msgid "Invalid custom options" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:147 +#: usr/local/www/services_dnsmasq.php:148 +#: usr/local/www/services_dnsmasq.php:152 +#: usr/local/www/services_dnsmasq.php:154 +#: usr/local/www/services_dnsmasq.php:175 +#: usr/local/www/services_dnsmasq.php:175 +msgid "The DNS forwarder configuration has been changed" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:151 +#: usr/local/www/services_dnsmasq.php:152 +#: usr/local/www/services_dnsmasq.php:156 +#: usr/local/www/services_dnsmasq.php:158 +#: usr/local/www/services_dnsmasq.php:179 +#: usr/local/www/services_dnsmasq.php:179 +msgid "General DNS Forwarder Options" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:157 +#: usr/local/www/services_dnsmasq.php:158 +#: usr/local/www/services_dnsmasq.php:162 +#: usr/local/www/services_dnsmasq.php:164 +#: usr/local/www/services_dnsmasq.php:185 +#: usr/local/www/services_dnsmasq.php:185 +msgid "Enable DNS forwarder" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:161 +#: usr/local/www/services_unbound.php:211 +#: usr/local/www/services_dnsmasq.php:162 +#: usr/local/www/services_dnsmasq.php:166 +#: usr/local/www/services_dnsmasq.php:168 +#: usr/local/www/services_dnsmasq.php:189 +#: usr/local/www/services_dnsmasq.php:189 +msgid "DHCP Registration" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:164 +#: usr/local/www/services_dnsmasq.php:165 +#: usr/local/www/services_dnsmasq.php:169 +#: usr/local/www/services_dnsmasq.php:171 +#: usr/local/www/services_dnsmasq.php:192 +#: usr/local/www/services_dnsmasq.php:192 +msgid "Register DHCP leases in DNS forwarder" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:165 +#: usr/local/www/services_dnsmasq.php:166 +#: usr/local/www/services_dnsmasq.php:170 +#: usr/local/www/services_dnsmasq.php:172 +#: usr/local/www/services_dnsmasq.php:193 +#: usr/local/www/services_dnsmasq.php:193 +#, php-format +msgid "" +"If this option is set, then machines that specify their hostname when " +"requesting a DHCP lease will be registered in the DNS forwarder, so that " +"their name can be resolved. You should also set the domain in %sSystem: " +"General setup%s to the proper value." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:173 +#: usr/local/www/services_unbound.php:223 +#: usr/local/www/services_dnsmasq.php:174 +#: usr/local/www/services_dnsmasq.php:178 +#: usr/local/www/services_dnsmasq.php:180 +#: usr/local/www/services_dnsmasq.php:201 +#: usr/local/www/services_dnsmasq.php:201 +msgid "Static DHCP" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:176 +#: usr/local/www/services_dnsmasq.php:177 +#: usr/local/www/services_dnsmasq.php:181 +#: usr/local/www/services_dnsmasq.php:183 +#: usr/local/www/services_dnsmasq.php:204 +#: usr/local/www/services_dnsmasq.php:204 +msgid "Register DHCP static mappings in DNS forwarder" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:177 +#: usr/local/www/services_dnsmasq.php:178 +#: usr/local/www/services_dnsmasq.php:182 +#: usr/local/www/services_dnsmasq.php:184 +#: usr/local/www/services_dnsmasq.php:205 +#: usr/local/www/services_dnsmasq.php:205 +#, php-format +msgid "" +"If this option is set, then DHCP static mappings will be registered in the " +"DNS forwarder, so that their name can be resolved. You should also set the " +"domain in %sSystem: General setup%s to the proper value." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:184 +#: usr/local/www/services_unbound.php:234 +#: usr/local/www/services_dnsmasq.php:185 +#: usr/local/www/services_dnsmasq.php:189 +#: usr/local/www/services_dnsmasq.php:191 +#: usr/local/www/services_dnsmasq.php:212 +#: usr/local/www/services_dnsmasq.php:212 +msgid "Prefer DHCP" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:187 +#: usr/local/www/services_unbound.php:237 +#: usr/local/www/services_dnsmasq.php:188 +#: usr/local/www/services_dnsmasq.php:192 +#: usr/local/www/services_dnsmasq.php:194 +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_dnsmasq.php:215 +msgid "Resolve DHCP mappings first" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:188 +#: usr/local/www/services_unbound.php:238 +#: usr/local/www/services_dnsmasq.php:189 +#: usr/local/www/services_dnsmasq.php:193 +#: usr/local/www/services_dnsmasq.php:195 +#: usr/local/www/services_dnsmasq.php:216 +#: usr/local/www/services_dnsmasq.php:216 +#, php-format +msgid "" +"If this option is set, then DHCP mappings will be resolved before the manual " +"list of names below. This only affects the name given for a reverse lookup " +"(PTR)." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:202 +#: usr/local/www/services_dnsmasq.php:203 +#: usr/local/www/services_dnsmasq.php:228 +#: usr/local/www/services_dnsmasq.php:241 +#: usr/local/www/services_dnsmasq.php:305 +#: usr/local/www/services_dnsmasq.php:305 +msgid "" +"Enter any additional options you would like to add to the dnsmasq " +"configuration here, separated by a space or newline" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_dnsmasq.php:216 +#: usr/local/www/services_dnsmasq.php:241 +#: usr/local/www/services_dnsmasq.php:254 +#: usr/local/www/services_dnsmasq.php:318 +#: usr/local/www/services_dnsmasq.php:318 +#, php-format +msgid "" +"If the DNS forwarder is enabled, the DHCP service (if enabled) will " +"automatically serve the LAN IP address as a DNS server to DHCP clients so " +"they will use the forwarder. The DNS forwarder will use the DNS servers " +"entered in %sSystem: General setup%s or those obtained via DHCP or PPP on " +"WAN if the "Allow DNS server list to be overridden by DHCP/PPP on " +"WAN" is checked. If you don't use that option (or if you use a static " +"IP address on WAN), you must manually specify at least one DNS server on the " +"%sSystem:General setup%s page." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:231 +#: usr/local/www/services_unbound.php:267 +#: usr/local/www/services_dnsmasq.php:232 +#: usr/local/www/services_dnsmasq.php:257 +#: usr/local/www/services_dnsmasq.php:270 +#: usr/local/www/services_dnsmasq.php:334 +#: usr/local/www/services_dnsmasq.php:334 +msgid "Host Overrides" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:235 +#: usr/local/www/services_unbound.php:271 +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_dnsmasq.php:261 +#: usr/local/www/services_dnsmasq.php:274 +#: usr/local/www/services_dnsmasq.php:338 +#: usr/local/www/services_dnsmasq.php:338 +msgid "" +"Entries in this section override individual results from the forwarders." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_unbound.php:272 +#: usr/local/www/services_dnsmasq.php:237 +#: usr/local/www/services_dnsmasq.php:262 +#: usr/local/www/services_dnsmasq.php:275 +#: usr/local/www/services_dnsmasq.php:339 +#: usr/local/www/services_dnsmasq.php:339 +msgid "Use these for changing DNS results or for adding custom DNS records." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:299 +#: usr/local/www/services_dnsmasq.php:320 +#: usr/local/www/services_unbound.php:335 +#: usr/local/www/services_dnsmasq.php:321 +#: usr/local/www/services_dnsmasq.php:346 +#: usr/local/www/services_dnsmasq.php:359 +#: usr/local/www/services_dnsmasq.php:423 +#: usr/local/www/services_dnsmasq.php:423 +msgid "Domain Overrides" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:303 +#: usr/local/www/services_dnsmasq.php:324 +#: usr/local/www/services_unbound.php:339 +#: usr/local/www/services_dnsmasq.php:325 +#: usr/local/www/services_dnsmasq.php:350 +#: usr/local/www/services_dnsmasq.php:363 +#: usr/local/www/services_dnsmasq.php:427 +#: usr/local/www/services_dnsmasq.php:427 +msgid "" +"Entries in this area override an entire domain by specifying an " +"authoritative DNS server to be queried for that domain." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:337 +#: usr/local/www/services_dnsmasq.php:358 +#: usr/local/www/services_unbound.php:373 +#: usr/local/www/services_dnsmasq.php:359 +#: usr/local/www/services_dnsmasq.php:384 +#: usr/local/www/services_dnsmasq.php:397 +#: usr/local/www/services_dnsmasq.php:461 +#: usr/local/www/services_dnsmasq.php:461 +msgid "Do you really want to delete this domain override?" +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:100 +#: usr/local/www/services_dnsmasq_edit.php:138 +#: usr/local/www/services_dnsmasq_edit.php:138 +msgid "This host/domain already exists." +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dnsmasq_edit.php:166 +msgid "Edit host" +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:138 +#: usr/local/www/services_dnsmasq_edit.php:193 +#: usr/local/www/services_dnsmasq_edit.php:194 +#: usr/local/www/services_dnsmasq_edit.php:194 +msgid "Edit DNS Forwarder entry" +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:144 +#: usr/local/www/services_dnsmasq_edit.php:199 +#: usr/local/www/services_dnsmasq_edit.php:200 +#: usr/local/www/services_dnsmasq_edit.php:200 +msgid "Name of the host, without domain part" +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:146 +#: usr/local/www/services_dnsmasq_edit.php:201 +#: usr/local/www/services_dnsmasq_edit.php:202 +#: usr/local/www/services_dnsmasq_edit.php:202 +msgid "myhost" +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:152 +#: usr/local/www/services_dnsmasq_edit.php:207 +#: usr/local/www/services_dnsmasq_edit.php:208 +#: usr/local/www/services_dnsmasq_edit.php:208 +msgid "Domain of the host" +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:153 +#: usr/local/www/services_dnsmasq_edit.php:208 +#: usr/local/www/services_dnsmasq_edit.php:209 +#: usr/local/www/services_dnsmasq_edit.php:209 +msgid "example.com" +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:159 +#: usr/local/www/services_dnsmasq_edit.php:214 +#: usr/local/www/services_dnsmasq_edit.php:215 +#: usr/local/www/services_dnsmasq_edit.php:215 +msgid "IP address of the host" +msgstr "" + +#: usr/local/www/diag_pkglogs.php:81 usr/local/www/diag_pkglogs.php:81 +msgid "Package logs" +msgstr "" + +#: usr/local/www/diag_pkglogs.php:92 usr/local/www/diag_pkglogs.php:92 +msgid "No packages with logging facilities are currently installed." +msgstr "" + +#: usr/local/www/diag_pkglogs.php:103 usr/local/www/diag_pkglogs.php:105 +#: usr/local/www/diag_pkglogs.php:103 usr/local/www/diag_pkglogs.php:105 +#, php-format +msgid "%s" +msgstr "" + +#: usr/local/www/diag_pkglogs.php:118 usr/local/www/diag_pkglogs.php:118 +#, php-format +msgid "Last %1$s %2$s log entries" +msgstr "" + +#: usr/local/www/status.php:110 usr/local/www/status.php:111 +#: usr/local/www/status.php:111 +msgid "This status page includes the following information" +msgstr "" + +#: usr/local/www/status.php:225 usr/local/www/status.php:226 +#: usr/local/www/status.php:230 usr/local/www/status.php:230 +msgid "" +"Note: make sure to remove any sensitive information (passwords, maybe also " +"IP addresses) before posting information from this page in public places " +"(like mailing lists)" +msgstr "" + +#: usr/local/www/status.php:228 usr/local/www/status.php:229 +#: usr/local/www/status.php:233 usr/local/www/status.php:233 +msgid "Passwords in config.xml have been automatically removed" +msgstr "" + +#: usr/local/www/bandwidth_by_ip.php:54 usr/local/www/bandwidth_by_ip.php:67 +#: usr/local/www/bandwidth_by_ip.php:61 usr/local/www/bandwidth_by_ip.php:103 +#: usr/local/www/bandwidth_by_ip.php:103 +msgid "no info" +msgstr "" + +#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_pptp.php:353 +#: usr/local/www/vpn_l2tp.php:73 usr/local/www/vpn_l2tp.php:321 +#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_pppoe_edit.php:424 +#: usr/local/www/vpn_pppoe_edit.php:425 usr/local/www/vpn_pptp.php:355 +#: usr/local/www/vpn_l2tp.php:74 usr/local/www/vpn_pppoe_edit.php:428 +#: usr/local/www/vpn_pptp.php:358 usr/local/www/vpn_l2tp.php:74 +#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_pppoe_edit.php:428 +#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_pptp.php:358 +msgid "Server address" +msgstr "" + +#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_l2tp.php:73 +#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_l2tp.php:74 +#: usr/local/www/vpn_l2tp.php:74 usr/local/www/vpn_pppoe_edit.php:112 +#: usr/local/www/vpn_pptp.php:82 +msgid "Remote start address" +msgstr "" + +#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_l2tp.php:78 +#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_l2tp.php:79 +#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pppoe_edit.php:117 +#: usr/local/www/vpn_pptp.php:87 +msgid "RADIUS server address" +msgstr "" + +#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_pptp.php:432 +#: usr/local/www/vpn_l2tp.php:78 usr/local/www/vpn_l2tp.php:428 +#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_pptp.php:434 +#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pptp.php:437 +#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pppoe_edit.php:117 +#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_pptp.php:437 +msgid "RADIUS shared secret" +msgstr "" + +#: usr/local/www/vpn_pptp.php:93 usr/local/www/vpn_l2tp.php:84 +#: usr/local/www/vpn_pppoe_edit.php:123 usr/local/www/vpn_l2tp.php:85 +#: usr/local/www/vpn_l2tp.php:85 usr/local/www/vpn_pppoe_edit.php:123 +#: usr/local/www/vpn_pptp.php:93 +msgid "A valid server address must be specified." +msgstr "" + +#: usr/local/www/vpn_pptp.php:96 usr/local/www/vpn_l2tp.php:87 +#: usr/local/www/vpn_pppoe_edit.php:125 usr/local/www/vpn_l2tp.php:88 +#: usr/local/www/vpn_l2tp.php:91 usr/local/www/vpn_pptp.php:99 +#: usr/local/www/vpn_l2tp.php:91 usr/local/www/vpn_pppoe_edit.php:125 +#: usr/local/www/vpn_pptp.php:99 +msgid "A valid remote start address must be specified." +msgstr "" + +#: usr/local/www/vpn_pptp.php:99 usr/local/www/vpn_l2tp.php:90 +#: usr/local/www/vpn_pppoe_edit.php:127 usr/local/www/vpn_l2tp.php:91 +#: usr/local/www/vpn_l2tp.php:94 usr/local/www/vpn_pptp.php:102 +#: usr/local/www/vpn_l2tp.php:94 usr/local/www/vpn_pppoe_edit.php:127 +#: usr/local/www/vpn_pptp.php:102 +msgid "A valid RADIUS server address must be specified." +msgstr "" + +#: usr/local/www/vpn_pptp.php:108 usr/local/www/vpn_l2tp.php:106 +#: usr/local/www/vpn_pppoe_edit.php:134 usr/local/www/vpn_l2tp.php:107 +#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_pptp.php:111 +#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_pppoe_edit.php:134 +#: usr/local/www/vpn_pptp.php:111 +msgid "The specified server address lies in the remote subnet." +msgstr "" + +#: usr/local/www/vpn_pptp.php:112 usr/local/www/vpn_l2tp.php:109 +#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_l2tp.php:113 +#: usr/local/www/vpn_pptp.php:115 usr/local/www/vpn_l2tp.php:113 +#: usr/local/www/vpn_pptp.php:115 +msgid "The specified server address is equal to the LAN interface address." +msgstr "" + +#: usr/local/www/vpn_pptp.php:117 usr/local/www/vpn_pptp.php:120 +#: usr/local/www/vpn_pptp.php:120 +msgid "PPTP redirection target address" +msgstr "" + +#: usr/local/www/vpn_pptp.php:122 usr/local/www/vpn_pptp.php:125 +#: usr/local/www/vpn_pptp.php:125 +msgid "A valid target address must be specified." +msgstr "" + +#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users_edit.php:135 usr/local/www/vpn_pptp.php:196 +#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/vpn_pptp.php:196 +#: usr/local/www/vpn_pptp_users_edit.php:135 +msgid "VPN PPTP" +msgstr "" + +#: usr/local/www/vpn_pptp.php:300 usr/local/www/vpn_pptp_users.php:89 +#: usr/local/www/vpn_l2tp.php:280 usr/local/www/vpn_l2tp_users.php:92 +#: usr/local/www/vpn_pptp.php:302 usr/local/www/vpn_l2tp_users.php:93 +#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_pptp_users.php:90 +#: usr/local/www/vpn_l2tp.php:284 usr/local/www/vpn_pptp.php:305 +#: usr/local/www/vpn_l2tp.php:284 usr/local/www/vpn_pptp_users.php:90 +#: usr/local/www/vpn_l2tp_users.php:93 usr/local/www/vpn_pptp.php:305 +msgid "Configuration" +msgstr "" + +#: usr/local/www/vpn_pptp.php:301 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users.php:90 +#: usr/local/www/system_authservers.php:421 +#: usr/local/www/system_groupmanager.php:240 +#: usr/local/www/system_groupmanager_addprivs.php:168 +#: usr/local/www/system_usermanager.php:440 +#: usr/local/www/system_usermanager_addprivs.php:167 +#: usr/local/www/system_usermanager_settings.php:113 +#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users.php:93 +#: usr/local/www/system_usermanager.php:438 +#: usr/local/www/system_groupmanager_addprivs.php:166 +#: usr/local/www/vpn_pptp.php:303 usr/local/www/vpn_l2tp_users.php:94 +#: usr/local/www/vpn_l2tp.php:282 usr/local/www/vpn_pptp_users.php:91 +#: usr/local/www/system_authservers.php:426 usr/local/www/vpn_l2tp.php:285 +#: usr/local/www/system_authservers.php:433 usr/local/www/vpn_pptp.php:306 +#: usr/local/www/system_usermanager_settings.php:115 +#: usr/local/www/vpn_l2tp.php:285 usr/local/www/system_groupmanager.php:240 +#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/vpn_pptp_users.php:91 +#: usr/local/www/system_usermanager_addprivs.php:167 +#: usr/local/www/vpn_l2tp_users.php:38 usr/local/www/vpn_l2tp_users.php:94 +#: usr/local/www/system_authservers.php:433 +#: usr/local/www/system_groupmanager_addprivs.php:166 +#: usr/local/www/vpn_pptp.php:306 +#: usr/local/www/system_usermanager_settings.php:115 +#: usr/local/www/system_usermanager.php:438 +msgid "Users" +msgstr "" + +#: usr/local/www/vpn_pptp.php:320 usr/local/www/vpn_pptp.php:322 +#: usr/local/www/vpn_pptp.php:325 usr/local/www/vpn_pptp.php:325 +msgid "Redirect incoming PPTP connections to" +msgstr "" + +#: usr/local/www/vpn_pptp.php:322 usr/local/www/vpn_pptp.php:324 +#: usr/local/www/vpn_pptp.php:327 usr/local/www/vpn_pptp.php:327 +msgid "PPTP redirection" +msgstr "" + +#: usr/local/www/vpn_pptp.php:326 usr/local/www/vpn_pptp.php:328 +#: usr/local/www/vpn_pptp.php:331 usr/local/www/vpn_pptp.php:331 +msgid "" +"Enter the IP address of a host which will accept incoming PPTP connections" +msgstr "" + +#: usr/local/www/vpn_pptp.php:332 usr/local/www/vpn_pptp.php:334 +#: usr/local/www/vpn_pptp.php:337 usr/local/www/vpn_pptp.php:337 +msgid "Enable PPTP server" +msgstr "" + +#: usr/local/www/vpn_pptp.php:335 usr/local/www/vpn_pptp.php:337 +#: usr/local/www/vpn_pptp.php:340 usr/local/www/vpn_pptp.php:340 +msgid "No. PPTP users" +msgstr "" + +#: usr/local/www/vpn_pptp.php:349 usr/local/www/vpn_pptp.php:351 +#: usr/local/www/vpn_pptp.php:354 usr/local/www/vpn_pptp.php:354 +msgid "Hint: 10 is ten PPTP clients" +msgstr "" + +#: usr/local/www/vpn_pptp.php:357 usr/local/www/vpn_pptp.php:359 +#: usr/local/www/vpn_pptp.php:362 usr/local/www/vpn_pptp.php:362 +msgid "" +"Enter the IP address the PPTP server should give to clients for use as their " +"\"gateway\"" +msgstr "" + +#: usr/local/www/vpn_pptp.php:359 usr/local/www/vpn_l2tp.php:327 +#: usr/local/www/vpn_pppoe_edit.php:430 usr/local/www/vpn_pppoe_edit.php:431 +#: usr/local/www/vpn_pptp.php:361 usr/local/www/vpn_l2tp.php:328 +#: usr/local/www/vpn_l2tp.php:331 usr/local/www/vpn_pppoe_edit.php:434 +#: usr/local/www/vpn_pptp.php:364 usr/local/www/vpn_l2tp.php:331 +#: usr/local/www/vpn_pppoe_edit.php:434 usr/local/www/vpn_pptp.php:364 +msgid "Typically this is set to an unused IP just outside of the client range" +msgstr "" + +#: usr/local/www/vpn_pptp.php:362 usr/local/www/vpn_l2tp.php:330 +#: usr/local/www/vpn_pppoe_edit.php:433 usr/local/www/vpn_pppoe_edit.php:434 +#: usr/local/www/vpn_pptp.php:364 usr/local/www/vpn_l2tp.php:331 +#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_pppoe_edit.php:437 +#: usr/local/www/vpn_pptp.php:367 usr/local/www/vpn_l2tp.php:334 +#: usr/local/www/vpn_pppoe_edit.php:437 usr/local/www/vpn_pptp.php:367 +msgid "" +"NOTE: This should NOT be set to any IP address currently in use on this " +"firewall" +msgstr "" + +#: usr/local/www/vpn_pptp.php:365 usr/local/www/vpn_l2tp.php:333 +#: usr/local/www/vpn_pppoe_edit.php:436 usr/local/www/vpn_pppoe_edit.php:437 +#: usr/local/www/vpn_pptp.php:367 usr/local/www/vpn_pppoe_edit.php:440 +#: usr/local/www/vpn_pptp.php:370 usr/local/www/vpn_pppoe_edit.php:440 +#: usr/local/www/vpn_pptp.php:370 +msgid "Remote address range" +msgstr "" + +#: usr/local/www/vpn_pptp.php:370 usr/local/www/vpn_pptp.php:372 +#: usr/local/www/vpn_pptp.php:375 usr/local/www/vpn_pptp.php:375 +msgid "Specify the starting address for the client IP subnet" +msgstr "" + +#: usr/local/www/vpn_pptp.php:373 usr/local/www/vpn_pptp.php:375 +#: usr/local/www/vpn_pptp.php:378 usr/local/www/vpn_pptp.php:378 +msgid "PPTP DNS Servers" +msgstr "" + +#: usr/local/www/vpn_pptp.php:379 usr/local/www/vpn_pptp.php:381 +#: usr/local/www/vpn_pptp.php:384 usr/local/www/vpn_pptp.php:384 +msgid "primary and secondary DNS servers assigned to PPTP clients" +msgstr "" + +#: usr/local/www/vpn_pptp.php:382 usr/local/www/vpn_l2tp.php:404 +#: usr/local/www/vpn_pptp.php:384 usr/local/www/vpn_l2tp.php:405 +#: usr/local/www/vpn_l2tp.php:408 usr/local/www/vpn_pptp.php:387 +#: usr/local/www/vpn_l2tp.php:408 usr/local/www/vpn_pptp.php:387 +msgid "WINS Server" +msgstr "" + +#: usr/local/www/vpn_pptp.php:388 usr/local/www/vpn_l2tp.php:410 +#: usr/local/www/vpn_pppoe_edit.php:461 usr/local/www/vpn_pppoe_edit.php:462 +#: usr/local/www/vpn_pptp.php:390 usr/local/www/vpn_l2tp.php:411 +#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pptp.php:393 usr/local/www/vpn_l2tp.php:414 +#: usr/local/www/vpn_pppoe_edit.php:465 usr/local/www/vpn_pptp.php:393 +msgid "RADIUS" +msgstr "" + +#: usr/local/www/vpn_pptp.php:391 usr/local/www/vpn_l2tp.php:413 +#: usr/local/www/vpn_pppoe_edit.php:464 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pptp.php:393 usr/local/www/vpn_l2tp.php:414 +#: usr/local/www/vpn_l2tp.php:417 usr/local/www/vpn_pppoe_edit.php:468 +#: usr/local/www/vpn_pptp.php:396 usr/local/www/vpn_l2tp.php:417 +#: usr/local/www/vpn_pppoe_edit.php:468 usr/local/www/vpn_pptp.php:396 +msgid "Use a RADIUS server for authentication" +msgstr "" + +#: usr/local/www/vpn_pptp.php:392 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pppoe_edit.php:466 usr/local/www/vpn_pptp.php:394 +#: usr/local/www/vpn_pppoe_edit.php:469 usr/local/www/vpn_pptp.php:397 +#: usr/local/www/vpn_pppoe_edit.php:469 usr/local/www/vpn_pptp.php:397 +msgid "" +"When set, all users will be authenticated using the RADIUS server specified " +"below. The local user database will not be used" +msgstr "" + +#: usr/local/www/vpn_pptp.php:397 usr/local/www/vpn_l2tp.php:417 +#: usr/local/www/vpn_pppoe_edit.php:470 usr/local/www/vpn_pppoe_edit.php:471 +#: usr/local/www/vpn_pptp.php:399 usr/local/www/vpn_l2tp.php:418 +#: usr/local/www/vpn_l2tp.php:421 usr/local/www/vpn_pppoe_edit.php:474 +#: usr/local/www/vpn_pptp.php:402 usr/local/www/vpn_l2tp.php:421 +#: usr/local/www/vpn_pppoe_edit.php:474 usr/local/www/vpn_pptp.php:402 +msgid "Enable RADIUS accounting" +msgstr "" + +#: usr/local/www/vpn_pptp.php:398 usr/local/www/vpn_pppoe_edit.php:472 +#: usr/local/www/vpn_pppoe_edit.php:473 usr/local/www/vpn_pptp.php:400 +#: usr/local/www/vpn_pppoe_edit.php:476 usr/local/www/vpn_pptp.php:403 +#: usr/local/www/vpn_pppoe_edit.php:476 usr/local/www/vpn_pptp.php:403 +msgid "Sends accounting packets to the RADIUS server" +msgstr "" + +#: usr/local/www/vpn_pptp.php:401 usr/local/www/vpn_pptp.php:403 +#: usr/local/www/vpn_pptp.php:406 usr/local/www/vpn_pptp.php:406 +msgid "Secondary RADIUS server for failover authentication" +msgstr "" + +#: usr/local/www/vpn_pptp.php:402 usr/local/www/vpn_pptp.php:404 +#: usr/local/www/vpn_pptp.php:407 usr/local/www/vpn_pptp.php:407 +msgid "" +"When set, all requests will go to the secondary server when primary fails" +msgstr "" + +#: usr/local/www/vpn_pptp.php:405 usr/local/www/vpn_pppoe_edit.php:492 +#: usr/local/www/vpn_pppoe_edit.php:493 usr/local/www/vpn_pptp.php:407 +#: usr/local/www/vpn_pppoe_edit.php:496 usr/local/www/vpn_pptp.php:410 +#: usr/local/www/vpn_pppoe_edit.php:496 usr/local/www/vpn_pptp.php:410 +msgid "RADIUS issued IPs" +msgstr "" + +#: usr/local/www/vpn_pptp.php:406 usr/local/www/vpn_pptp.php:408 +#: usr/local/www/vpn_pptp.php:411 usr/local/www/vpn_pptp.php:411 +msgid "Issue IP addresses via RADIUS server" +msgstr "" + +#: usr/local/www/vpn_pptp.php:411 usr/local/www/vpn_pptp.php:413 +#: usr/local/www/vpn_pptp.php:416 usr/local/www/vpn_pptp.php:416 +msgid "RADIUS NAS IP" +msgstr "" + +#: usr/local/www/vpn_pptp.php:417 usr/local/www/vpn_pppoe_edit.php:485 +#: usr/local/www/vpn_pppoe_edit.php:486 usr/local/www/vpn_pptp.php:419 +#: usr/local/www/vpn_pppoe_edit.php:489 usr/local/www/vpn_pptp.php:422 +#: usr/local/www/vpn_pppoe_edit.php:489 usr/local/www/vpn_pptp.php:422 +msgid "RADIUS Accounting Update" +msgstr "" + +#: usr/local/www/vpn_pptp.php:423 usr/local/www/vpn_pptp.php:425 +#: usr/local/www/vpn_l2tp.php:422 usr/local/www/vpn_l2tp.php:425 +#: usr/local/www/vpn_pptp.php:428 usr/local/www/vpn_l2tp.php:425 +#: usr/local/www/vpn_pptp.php:428 +msgid "RADIUS Server" +msgstr "" + +#: usr/local/www/vpn_pptp.php:429 usr/local/www/vpn_pptp.php:446 +#: usr/local/www/vpn_pptp.php:431 usr/local/www/vpn_pptp.php:448 +#: usr/local/www/vpn_pptp.php:434 usr/local/www/vpn_pptp.php:451 +#: usr/local/www/vpn_pptp.php:434 usr/local/www/vpn_pptp.php:451 +msgid "" +"Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS " +"server" +msgstr "" + +#: usr/local/www/vpn_pptp.php:436 usr/local/www/vpn_pppoe_edit.php:510 +#: usr/local/www/vpn_pppoe_edit.php:527 usr/local/www/vpn_pppoe_edit.php:511 +#: usr/local/www/vpn_pppoe_edit.php:528 usr/local/www/vpn_pptp.php:438 +#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:531 +#: usr/local/www/vpn_pptp.php:441 usr/local/www/vpn_pppoe_edit.php:514 +#: usr/local/www/vpn_pppoe_edit.php:531 usr/local/www/vpn_pptp.php:441 +msgid "" +"Enter the shared secret that will be used to authenticate to the RADIUS " +"server" +msgstr "" + +#: usr/local/www/vpn_pptp.php:449 usr/local/www/vpn_pptp.php:451 +#: usr/local/www/vpn_pptp.php:454 usr/local/www/vpn_pptp.php:454 +msgid "Secondary RADIUS shared secret" +msgstr "" + +#: usr/local/www/vpn_pptp.php:453 usr/local/www/vpn_pptp.php:455 +#: usr/local/www/vpn_pptp.php:458 usr/local/www/vpn_pptp.php:458 +msgid "" +"Enter the shared secret that will be used to authenticate to the secondary " +"RADIUS server" +msgstr "" + +#: usr/local/www/vpn_pptp.php:463 usr/local/www/vpn_pptp.php:465 +#: usr/local/www/vpn_pptp.php:468 usr/local/www/vpn_pptp.php:468 +msgid "Require 128-bit encryption" +msgstr "" + +#: usr/local/www/vpn_pptp.php:464 usr/local/www/vpn_pptp.php:466 +#: usr/local/www/vpn_pptp.php:469 usr/local/www/vpn_pptp.php:469 +msgid "" +"When set, only 128-bit encryption will be accepted. Otherwise 40-bit and 56-" +"bit encryption will be accepted as well. Note that encryption will always be " +"forced on PPTP connections (i.e. unencrypted connections will not be " +"accepted)" +msgstr "" + +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 usr/local/www/vpn_pptp.php:483 +msgid "don't forget to " +msgstr "" + +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 usr/local/www/vpn_pptp.php:483 +msgid "add a firewall rule" +msgstr "" + +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 usr/local/www/vpn_pptp.php:483 +msgid "to permit traffic from PPTP clients" +msgstr "" + +#: usr/local/www/vpn_pptp_users.php:81 usr/local/www/vpn_l2tp_users.php:84 +#: usr/local/www/vpn_l2tp_users.php:85 usr/local/www/vpn_pptp_users.php:82 +#: usr/local/www/vpn_pptp_users.php:82 usr/local/www/vpn_l2tp_users.php:85 +msgid "Warning: RADIUS is enabled. The local user database will not be used." +msgstr "" + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84 +#: usr/local/www/vpn_pptp_users.php:84 +msgid "The PPTP user list has been modified" +msgstr "" + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_l2tp_users.php:86 +#: usr/local/www/vpn_l2tp_users.php:87 usr/local/www/vpn_pptp_users.php:84 +#: usr/local/www/vpn_pptp_users.php:84 usr/local/www/vpn_l2tp_users.php:87 +msgid "You must apply the changes in order for them to take effect" +msgstr "" + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84 +#: usr/local/www/vpn_pptp_users.php:84 +msgid "Warning: this will terminate all current PPTP sessions" +msgstr "" + +#: usr/local/www/vpn_pptp_users.php:104 usr/local/www/vpn_pptp_users.php:127 +#: usr/local/www/system_usermanager.php:842 +#: usr/local/www/vpn_l2tp_users.php:120 +#: usr/local/www/system_usermanager.php:840 +#: usr/local/www/system_usermanager.php:845 +#: usr/local/www/vpn_l2tp_users.php:121 usr/local/www/vpn_pptp_users.php:105 +#: usr/local/www/vpn_pptp_users.php:128 +#: usr/local/www/system_usermanager.php:798 +#: usr/local/www/vpn_pptp_users.php:105 usr/local/www/vpn_pptp_users.php:128 +#: usr/local/www/vpn_l2tp_users.php:121 +#: usr/local/www/system_usermanager.php:798 +msgid "add user" +msgstr "" + +#: usr/local/www/vpn_pptp_users.php:117 +#: usr/local/www/system_usermanager.php:824 +#: usr/local/www/system_usermanager.php:822 +#: usr/local/www/system_usermanager.php:825 +#: usr/local/www/vpn_pptp_users.php:118 +#: usr/local/www/system_usermanager.php:848 +#: usr/local/www/vpn_pptp_users.php:118 +#: usr/local/www/system_usermanager.php:848 +msgid "edit user" +msgstr "" + +#: usr/local/www/vpn_pptp_users.php:118 usr/local/www/vpn_l2tp_users.php:115 +#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119 +#: usr/local/www/vpn_pptp_users.php:119 usr/local/www/vpn_l2tp_users.php:116 +msgid "Do you really want to delete this user?" +msgstr "" + +#: usr/local/www/vpn_pptp_users.php:118 +#: usr/local/www/system_usermanager.php:829 +#: usr/local/www/vpn_l2tp_users.php:115 +#: usr/local/www/system_usermanager.php:827 +#: usr/local/www/system_usermanager.php:830 +#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119 +#: usr/local/www/system_usermanager.php:853 +#: usr/local/www/vpn_pptp_users.php:119 usr/local/www/vpn_l2tp_users.php:116 +#: usr/local/www/system_usermanager.php:853 +msgid "delete user" +msgstr "" + +#: usr/local/www/vpn_pptp_users_edit.php:85 +#: usr/local/www/services_dyndns_edit.php:94 +#: usr/local/www/system_usermanager.php:199 +#: usr/local/www/vpn_l2tp_users_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:110 +#: usr/local/www/vpn_l2tp_users_edit.php:88 +#: usr/local/www/services_dyndns_edit.php:111 +#: usr/local/www/services_dyndns_edit.php:111 +#: usr/local/www/vpn_l2tp_users_edit.php:88 +#: usr/local/www/vpn_pptp_users_edit.php:85 +#: usr/local/www/system_usermanager.php:199 +msgid "The username contains invalid characters." +msgstr "" + +#: usr/local/www/vpn_pptp_users_edit.php:88 +#: usr/local/www/vpn_pptp_users_edit.php:88 +msgid "The password cannot start with '!'." +msgstr "" + +#: usr/local/www/vpn_pptp_users_edit.php:91 +#: usr/local/www/vpn_l2tp_users_edit.php:90 +#: usr/local/www/vpn_l2tp_users_edit.php:91 +#: usr/local/www/vpn_l2tp_users_edit.php:91 +#: usr/local/www/vpn_pptp_users_edit.php:91 +msgid "The password contains invalid characters." +msgstr "" + +#: usr/local/www/vpn_pptp_users_edit.php:94 +#: usr/local/www/system_usermanager.php:205 +#: usr/local/www/system_usermanager_passwordmg.php:54 +#: usr/local/www/vpn_l2tp_users_edit.php:93 +#: usr/local/www/vpn_l2tp_users_edit.php:94 +#: usr/local/www/system_usermanager_passwordmg.php:54 +#: usr/local/www/vpn_l2tp_users_edit.php:94 +#: usr/local/www/vpn_pptp_users_edit.php:94 +#: usr/local/www/system_usermanager.php:205 +msgid "The passwords do not match." +msgstr "" + +#: usr/local/www/vpn_pptp_users_edit.php:97 +#: usr/local/www/vpn_l2tp_users_edit.php:96 +#: usr/local/www/vpn_l2tp_users_edit.php:97 +#: usr/local/www/vpn_l2tp_users_edit.php:97 +#: usr/local/www/vpn_pptp_users_edit.php:97 +msgid "The IP address entered is not valid." +msgstr "" + +#: usr/local/www/vpn_pptp_users_edit.php:104 +#: usr/local/www/system_usermanager.php:215 +#: usr/local/www/vpn_l2tp_users_edit.php:103 +#: usr/local/www/vpn_l2tp_users_edit.php:104 +#: usr/local/www/vpn_l2tp_users_edit.php:104 +#: usr/local/www/vpn_pptp_users_edit.php:104 +#: usr/local/www/system_usermanager.php:215 +msgid "Another entry with the same username already exists." +msgstr "" + +#: usr/local/www/vpn_pptp_users_edit.php:155 +#: usr/local/www/vpn_l2tp_users_edit.php:163 +#: usr/local/www/vpn_pptp_users_edit.php:156 +#: usr/local/www/vpn_l2tp_users_edit.php:164 +#: usr/local/www/vpn_l2tp_users_edit.php:164 +#: usr/local/www/vpn_pptp_users_edit.php:156 +msgid "confirmation" +msgstr "" + +#: usr/local/www/vpn_pptp_users_edit.php:156 +#: usr/local/www/vpn_pptp_users_edit.php:157 +#: usr/local/www/vpn_pptp_users_edit.php:157 +msgid "If you want to change the users' password, enter it here twice." +msgstr "" + +#: usr/local/www/vpn_pptp_users_edit.php:163 +#: usr/local/www/vpn_l2tp_users_edit.php:171 +#: usr/local/www/vpn_pptp_users_edit.php:164 +#: usr/local/www/vpn_l2tp_users_edit.php:172 +#: usr/local/www/vpn_l2tp_users_edit.php:172 +#: usr/local/www/vpn_pptp_users_edit.php:164 +msgid "" +"If you want the user to be assigned a specific IP address, enter it here." +msgstr "" + +#: usr/local/www/wizard.php:65 usr/local/www/wizard.php:71 +#: usr/local/www/wizard.php:65 usr/local/www/wizard.php:71 +#, php-format +msgid "ERROR: Could not open %s." +msgstr "" + +#: usr/local/www/wizard.php:77 usr/local/www/wizard.php:77 +#, php-format +msgid "ERROR: Could not parse %s/wizards/%s file." +msgstr "" + +#: usr/local/www/load_balancer_relay_action_edit.php:65 +#: usr/local/www/load_balancer_relay_action_edit.php:65 +msgid "Load Balancer: Relay Action:" +msgstr "" + +#: usr/local/www/load_balancer_relay_action_edit.php:124 +#: usr/local/www/load_balancer_relay_action_edit.php:124 +msgid "This action name has already been used. Action names must be unique." +msgstr "" + +#: usr/local/www/load_balancer_relay_action_edit.php:134 +#: usr/local/www/load_balancer_relay_action_edit.php:134 +#, php-format +msgid "modified '%s' action:" +msgstr "" + +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +msgid "DNS" +msgstr "" + +#: usr/local/www/load_balancer_relay_action_edit.php:408 +#: usr/local/www/load_balancer_relay_action_edit.php:407 +#: usr/local/www/load_balancer_relay_action_edit.php:405 +#: usr/local/www/load_balancer_relay_action_edit.php:405 +msgid "Edit Load Balancer - Relay Action entry" +msgstr "" + +#: usr/local/www/load_balancer_relay_action_edit.php:508 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:173 +#: usr/local/www/load_balancer_relay_action_edit.php:507 +#: usr/local/www/load_balancer_relay_action_edit.php:505 +#: usr/local/www/load_balancer_relay_action_edit.php:505 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:173 +msgid "Key" +msgstr "" + +#: usr/local/www/load_balancer_relay_action_edit.php:517 +#: usr/local/www/load_balancer_relay_action_edit.php:537 +#: usr/local/www/load_balancer_relay_action_edit.php:516 +#: usr/local/www/load_balancer_relay_action_edit.php:536 +#: usr/local/www/load_balancer_relay_action_edit.php:514 +#: usr/local/www/load_balancer_relay_action_edit.php:534 +#: usr/local/www/load_balancer_relay_action_edit.php:514 +#: usr/local/www/load_balancer_relay_action_edit.php:534 +msgid "TODO" +msgstr "" + +#: usr/local/www/xmlrpc.php:58 usr/local/www/xmlrpc.php:54 +msgid "Disallowing CARP sync loop." +msgstr "" + +#: usr/local/www/xmlrpc.php:67 usr/local/www/xmlrpc.php:63 +#: usr/local/www/xmlrpc.php:67 +msgid "Authentication failed" +msgstr "" + +#: usr/local/www/xmlrpc.php:78 usr/local/www/xmlrpc.php:74 +#: usr/local/www/xmlrpc.php:78 +msgid "" +"XMLRPC wrapper for eval(). This method must be called with two parameters: a " +"string containing the local system\\'s password followed by the PHP code to " +"evaluate." +msgstr "" + +#: usr/local/www/xmlrpc.php:109 usr/local/www/xmlrpc.php:105 +#: usr/local/www/xmlrpc.php:109 +msgid "" +"XMLRPC wrapper for mwexec(). This method must be called with two parameters: " +"a string containing the local system\\'s password followed by an shell " +"command to execute." +msgstr "" + +#: usr/local/www/xmlrpc.php:133 usr/local/www/xmlrpc.php:129 +#: usr/local/www/xmlrpc.php:133 +msgid "" +"XMLRPC wrapper for backup_config_section. This method must be called with " +"two parameters: a string containing the local system\\'s password followed " +"by an array containing the keys to be backed up." +msgstr "" + +#: usr/local/www/xmlrpc.php:156 usr/local/www/xmlrpc.php:152 +#: usr/local/www/xmlrpc.php:159 usr/local/www/xmlrpc.php:159 +msgid "" +"XMLRPC wrapper for restore_config_section. This method must be called with " +"two parameters: a string containing the local system\\'s password and an " +"array to merge into the system\\'s config. This function returns true upon " +"completion." +msgstr "" + +#: usr/local/www/xmlrpc.php:203 usr/local/www/xmlrpc.php:282 +#: usr/local/www/xmlrpc.php:307 usr/local/www/xmlrpc.php:212 +#: usr/local/www/xmlrpc.php:291 usr/local/www/xmlrpc.php:316 +#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:313 +#: usr/local/www/xmlrpc.php:224 usr/local/www/xmlrpc.php:308 +#: usr/local/www/xmlrpc.php:337 usr/local/www/xmlrpc.php:224 +#: usr/local/www/xmlrpc.php:308 usr/local/www/xmlrpc.php:337 +#, php-format +msgid "Merged in config (%s sections) from XMLRPC client." +msgstr "" + +#: usr/local/www/xmlrpc.php:263 usr/local/www/xmlrpc.php:272 +#: usr/local/www/xmlrpc.php:269 usr/local/www/xmlrpc.php:286 +#: usr/local/www/xmlrpc.php:286 +msgid "" +"XMLRPC wrapper for merging package sections. This method must be called with " +"two parameters: a string containing the local system\\'s password and an " +"array to merge into the system\\'s config. This function returns true upon " +"completion." +msgstr "" + +#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:297 +#: usr/local/www/xmlrpc.php:294 usr/local/www/xmlrpc.php:314 +#: usr/local/www/xmlrpc.php:314 +msgid "" +"XMLRPC wrapper for merge_config_section. This method must be called with two " +"parameters: a string containing the local system\\'s password and an array " +"to merge into the system\\'s config. This function returns true upon " +"completion." +msgstr "" + +#: usr/local/www/xmlrpc.php:312 usr/local/www/xmlrpc.php:321 +#: usr/local/www/xmlrpc.php:318 usr/local/www/xmlrpc.php:342 +#: usr/local/www/xmlrpc.php:342 +msgid "" +"Basic XMLRPC wrapper for filter_configure. This method must be called with " +"one paramater: a string containing the local system\\'s password. This " +"function returns true upon completion." +msgstr "" + +#: usr/local/www/xmlrpc.php:342 usr/local/www/xmlrpc.php:351 +#: usr/local/www/xmlrpc.php:348 usr/local/www/xmlrpc.php:372 +#: usr/local/www/xmlrpc.php:372 +msgid "Basic XMLRPC wrapper for configuring CARP interfaces." +msgstr "" + +#: usr/local/www/xmlrpc.php:364 usr/local/www/xmlrpc.php:385 +#: usr/local/www/xmlrpc.php:373 usr/local/www/xmlrpc.php:394 +#: usr/local/www/xmlrpc.php:370 usr/local/www/xmlrpc.php:391 +#: usr/local/www/xmlrpc.php:397 usr/local/www/xmlrpc.php:418 +#: usr/local/www/xmlrpc.php:397 usr/local/www/xmlrpc.php:418 +msgid "" +"Basic XMLRPC wrapper for check_firmware_version. This function will return " +"the output of check_firmware_version upon completion." +msgstr "" + +#: usr/local/www/xmlrpc.php:406 usr/local/www/xmlrpc.php:415 +#: usr/local/www/xmlrpc.php:412 usr/local/www/xmlrpc.php:439 +#: usr/local/www/xmlrpc.php:439 +msgid "Basic XMLRPC wrapper for rc.reboot." +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:65 +#: usr/local/www/load_balancer_relay_protocol_edit.php:65 +msgid "Load Balancer: Relay Protocol:" +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:86 +#: usr/local/www/load_balancer_relay_protocol_edit.php:86 +msgid "" +"This protocol name has already been used. Protocol names must be unique." +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:105 +#: usr/local/www/load_balancer_relay_protocol_edit.php:105 +#, php-format +msgid "modified '%s' load balancing protocol:" +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:107 +#: usr/local/www/load_balancer_relay_protocol_edit.php:107 +msgid "name" +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:108 +#: usr/local/www/load_balancer_relay_protocol_edit.php:110 +#: usr/local/www/load_balancer_relay_protocol_edit.php:108 +#: usr/local/www/load_balancer_relay_protocol_edit.php:110 +msgid "type" +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:109 +#: usr/local/www/load_balancer_relay_protocol_edit.php:109 +msgid "description" +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:111 +#: usr/local/www/load_balancer_relay_protocol_edit.php:111 +msgid "action" +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:192 +#: usr/local/www/load_balancer_relay_protocol_edit.php:190 +#: usr/local/www/load_balancer_relay_protocol_edit.php:190 +msgid "Edit Load Balancer - Relay Protocol entry" +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:227 +#: usr/local/www/load_balancer_relay_protocol_edit.php:225 +#: usr/local/www/load_balancer_relay_protocol_edit.php:225 +msgid "Add / remove available actions" +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:237 +#: usr/local/www/load_balancer_relay_protocol_edit.php:235 +#: usr/local/www/load_balancer_relay_protocol_edit.php:235 +msgid "Available Actions" +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:252 +#: usr/local/www/system_crlmanager.php:474 +#: usr/local/www/load_balancer_relay_protocol_edit.php:250 +#: usr/local/www/system_crlmanager.php:507 +#: usr/local/www/load_balancer_relay_protocol_edit.php:250 +#: usr/local/www/system_crlmanager.php:507 +msgid "Add" +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:259 +#: usr/local/www/load_balancer_relay_protocol_edit.php:257 +#: usr/local/www/load_balancer_relay_protocol_edit.php:257 +msgid "Enabled Actions" +msgstr "" + +#: usr/local/www/pkg_mgr_settings.php:62 usr/local/www/pkg_mgr_settings.php:94 +#: usr/local/www/pkg_mgr_settings.php:93 usr/local/www/pkg_mgr_settings.php:62 +#: usr/local/www/pkg_mgr_settings.php:93 +msgid "Package Settings" +msgstr "" + +#: usr/local/www/pkg_mgr_settings.php:92 usr/local/www/pkg_mgr_settings.php:91 +#: usr/local/www/pkg_mgr_settings.php:91 +#, php-format +msgid "%s packages" +msgstr "" + +#: usr/local/www/pkg_mgr_settings.php:102 +#: usr/local/www/pkg_mgr_settings.php:105 +#: usr/local/www/pkg_mgr_settings.php:101 +#: usr/local/www/pkg_mgr_settings.php:104 +#: usr/local/www/pkg_mgr_settings.php:101 +#: usr/local/www/pkg_mgr_settings.php:104 +msgid "Package Repository URL" +msgstr "" + +#: usr/local/www/pkg_mgr_settings.php:107 +#: usr/local/www/pkg_mgr_settings.php:106 +#: usr/local/www/pkg_mgr_settings.php:106 +msgid "Use a different URL server for packages other than" +msgstr "" + +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/pkg_mgr_settings.php:111 +#: usr/local/www/pkg_mgr_settings.php:111 +#, php-format +msgid "This is where %s will check for packages when the" +msgstr "" + +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/pkg_mgr_settings.php:111 +#: usr/local/www/pkg_mgr_settings.php:111 +msgid "System: Packages" +msgstr "" + +#: usr/local/www/services_captiveportal_hostname.php:111 +#: usr/local/www/services_captiveportal_hostname.php:109 +#: usr/local/www/services_captiveportal_hostname.php:109 +msgid "Allowed IP Addresses" +msgstr "" + +#: usr/local/www/services_captiveportal_hostname.php:173 +#: usr/local/www/services_captiveportal_hostname.php:171 +#: usr/local/www/services_captiveportal_hostname.php:171 +msgid "" +"Adding allowed Hostnames will allow a DNS hostname access to/from access " +"through the captive portal without being taken to the portal page. This can " +"be used for a web server serving images for the portal page or a DNS server " +"on another network, for example. By specifying from addresses, it " +"may be used to always allow pass-through access from a client behind the " +"captive portal." +msgstr "" + +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "the Hostname are allowed" +msgstr "" + +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +msgid "Edit allowed Hostname" +msgstr "" + +#: usr/local/www/services_captiveportal_hostname_edit.php:102 +#: usr/local/www/services_captiveportal_hostname_edit.php:100 +#: usr/local/www/services_captiveportal_hostname_edit.php:100 +msgid "Allowed Hostname" +msgstr "" + +#: usr/local/www/services_captiveportal_hostname_edit.php:107 +#: usr/local/www/services_captiveportal_hostname_edit.php:105 +#: usr/local/www/services_captiveportal_hostname_edit.php:105 +#, php-format +msgid "A valid Hostname must be specified. [%s]" +msgstr "" + +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +msgid "" +"to always allow an Hostname through the captive portal (without " +"authentication)" +msgstr "" + +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +msgid "" +"to allow access from all clients (even non-authenticated ones) behind the " +"portal to this Hostname" +msgstr "" + +#: usr/local/www/services_captiveportal_hostname_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:190 +#: usr/local/www/services_captiveportal_hostname_edit.php:192 +msgid "Enter a upload limit to be enforced on this Hostname in Kbit/s" +msgstr "" + +#: usr/local/www/services_captiveportal_hostname_edit.php:198 +#: usr/local/www/services_captiveportal_hostname_edit.php:196 +#: usr/local/www/services_captiveportal_hostname_edit.php:198 +msgid "Enter a download limit to be enforced on this Hostname in Kbit/s" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:67 +#: usr/local/www/services_captiveportal_vouchers.php:64 +#: usr/local/www/services_captiveportal_vouchers.php:64 +msgid "" +"You will need to recreate any existing Voucher Rolls due to the public and " +"private key changes. Click cancel if you do not wish to recreate the " +"vouchers." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:114 +#: usr/local/www/services_captiveportal_vouchers.php:123 +#: usr/local/www/services_captiveportal_vouchers.php:130 +#: usr/local/www/services_captiveportal_vouchers.php:130 +msgid "Voucher invalid" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:116 +#: usr/local/www/services_captiveportal_vouchers.php:125 +#: usr/local/www/services_captiveportal_vouchers.php:132 +#: usr/local/www/services_captiveportal_vouchers.php:132 +msgid "Voucher expired" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:139 +#: usr/local/www/services_captiveportal_vouchers.php:148 +#: usr/local/www/services_captiveportal_vouchers.php:155 +#: usr/local/www/services_captiveportal_vouchers.php:155 +msgid "Cannot write private key file" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:157 +#: usr/local/www/services_captiveportal_vouchers.php:166 +#: usr/local/www/services_captiveportal_vouchers.php:175 +#: usr/local/www/services_captiveportal_vouchers.php:175 +msgid "Need private RSA key to print vouchers" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "charset" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "rollbits" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "ticketbits" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "checksumbits" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "publickey" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "magic" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:565 +#: usr/local/www/services_captiveportal_vouchers.php:572 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:585 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:594 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:599 +msgid "Synchronize Voucher Database IP" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync port" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync password" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync username" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:203 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:222 +#: usr/local/www/services_captiveportal_vouchers.php:222 +msgid "Need at least 2 characters to create vouchers." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:205 +#: usr/local/www/services_captiveportal_vouchers.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:224 +#: usr/local/www/services_captiveportal_vouchers.php:224 +msgid "Double quotes aren't allowed." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:207 +#: usr/local/www/services_captiveportal_vouchers.php:217 +#: usr/local/www/services_captiveportal_vouchers.php:226 +#: usr/local/www/services_captiveportal_vouchers.php:226 +msgid "aren't allowed." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:209 +#: usr/local/www/services_captiveportal_vouchers.php:219 +#: usr/local/www/services_captiveportal_vouchers.php:228 +#: usr/local/www/services_captiveportal_vouchers.php:228 +msgid "# of Bits to store Roll Id needs to be between 1..31." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:211 +#: usr/local/www/services_captiveportal_vouchers.php:221 +#: usr/local/www/services_captiveportal_vouchers.php:230 +#: usr/local/www/services_captiveportal_vouchers.php:230 +msgid "# of Bits to store Ticket Id needs to be between 1..16." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:223 +#: usr/local/www/services_captiveportal_vouchers.php:232 +#: usr/local/www/services_captiveportal_vouchers.php:232 +msgid "# of Bits to store checksum needs to be between 1..31." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:225 +#: usr/local/www/services_captiveportal_vouchers.php:234 +#: usr/local/www/services_captiveportal_vouchers.php:234 +msgid "This doesn't look like an RSA Public key." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:217 +#: usr/local/www/services_captiveportal_vouchers.php:227 +#: usr/local/www/services_captiveportal_vouchers.php:236 +#: usr/local/www/services_captiveportal_vouchers.php:236 +msgid "This doesn't look like an RSA Private key." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:219 +#: usr/local/www/services_captiveportal_vouchers.php:229 +#: usr/local/www/services_captiveportal_vouchers.php:238 +#: usr/local/www/services_captiveportal_vouchers.php:238 +msgid "You cannot sync the voucher database to this host (itself)." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:421 +#: usr/local/www/services_captiveportal_vouchers.php:428 +#: usr/local/www/services_captiveportal_vouchers.php:441 +#: usr/local/www/services_captiveportal_vouchers.php:450 +#: usr/local/www/services_captiveportal_vouchers.php:455 +msgid "Enable Vouchers" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:435 +#: usr/local/www/services_captiveportal_vouchers_edit.php:173 +#: usr/local/www/status_captiveportal_vouchers.php:116 +#: usr/local/www/services_captiveportal_vouchers.php:442 +#: usr/local/www/status_captiveportal_vouchers.php:117 +#: usr/local/www/services_captiveportal_vouchers.php:455 +#: usr/local/www/services_captiveportal_vouchers_edit.php:171 +#: usr/local/www/services_captiveportal_vouchers.php:464 +#: usr/local/www/status_captiveportal_vouchers.php:122 +#: usr/local/www/services_captiveportal_vouchers.php:469 +#: usr/local/www/services_captiveportal_vouchers_edit.php:171 +#: usr/local/www/status_captiveportal_vouchers.php:122 +msgid "Roll" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:436 +#: usr/local/www/status_captiveportal_voucher_rolls.php:86 +#: usr/local/www/services_captiveportal_vouchers.php:443 +#: usr/local/www/services_captiveportal_vouchers.php:456 +#: usr/local/www/status_captiveportal_voucher_rolls.php:87 +#: usr/local/www/services_captiveportal_vouchers.php:465 +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:470 +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +msgid "Minutes/Ticket" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:437 +#: usr/local/www/services_captiveportal_vouchers.php:444 +#: usr/local/www/services_captiveportal_vouchers.php:457 +#: usr/local/www/services_captiveportal_vouchers.php:466 +#: usr/local/www/services_captiveportal_vouchers.php:471 +msgid "of Tickets" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:438 +#: usr/local/www/services_captiveportal_vouchers_edit.php:197 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +#: usr/local/www/services_captiveportal_vouchers.php:445 +#: usr/local/www/services_captiveportal_vouchers.php:458 +#: usr/local/www/services_captiveportal_vouchers_edit.php:195 +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:467 +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +#: usr/local/www/services_captiveportal_vouchers.php:472 +#: usr/local/www/services_captiveportal_vouchers_edit.php:195 +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +msgid "Comment" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:458 +#: usr/local/www/services_captiveportal_vouchers.php:465 +#: usr/local/www/services_captiveportal_vouchers.php:478 +#: usr/local/www/services_captiveportal_vouchers.php:487 +#: usr/local/www/services_captiveportal_vouchers.php:492 +msgid "edit voucher" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:459 +#: usr/local/www/services_captiveportal_vouchers.php:466 +#: usr/local/www/services_captiveportal_vouchers.php:479 +#: usr/local/www/services_captiveportal_vouchers.php:488 +#: usr/local/www/services_captiveportal_vouchers.php:493 +msgid "" +"Do you really want to delete this voucher? This makes all vouchers from this " +"roll invalid" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:459 +#: usr/local/www/services_captiveportal_vouchers.php:466 +#: usr/local/www/services_captiveportal_vouchers.php:479 +#: usr/local/www/services_captiveportal_vouchers.php:488 +#: usr/local/www/services_captiveportal_vouchers.php:493 +msgid "delete vouchers" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:460 +#: usr/local/www/services_captiveportal_vouchers.php:467 +#: usr/local/www/services_captiveportal_vouchers.php:480 +#: usr/local/www/services_captiveportal_vouchers.php:489 +#: usr/local/www/services_captiveportal_vouchers.php:494 +msgid "generate vouchers for this roll to CSV file" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:470 +#: usr/local/www/services_captiveportal_vouchers.php:477 +#: usr/local/www/services_captiveportal_vouchers.php:490 +#: usr/local/www/services_captiveportal_vouchers.php:499 +#: usr/local/www/services_captiveportal_vouchers.php:504 +msgid "add voucher" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:475 +#: usr/local/www/services_captiveportal_vouchers.php:482 +#: usr/local/www/services_captiveportal_vouchers.php:495 +#: usr/local/www/services_captiveportal_vouchers.php:504 +#: usr/local/www/services_captiveportal_vouchers.php:509 +msgid "" +"Create, generate and activate Rolls with Vouchers that allow access through " +"the captive portal for the configured time. Once a voucher is activated, its " +"clock is started and runs uninterrupted until it expires. During that time, " +"the voucher can be re-used from the same or a different computer. If the " +"voucher is used again from another computer, the previous session is stopped." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:481 +#: usr/local/www/services_captiveportal_vouchers.php:488 +#: usr/local/www/services_captiveportal_vouchers.php:501 +#: usr/local/www/services_captiveportal_vouchers.php:510 +#: usr/local/www/services_captiveportal_vouchers.php:515 +msgid "" +"Enable Voucher support first using the checkbox above and hit Save at the " +"bottom." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:486 +#: usr/local/www/services_captiveportal_vouchers.php:493 +#: usr/local/www/services_captiveportal_vouchers.php:506 +#: usr/local/www/services_captiveportal_vouchers.php:515 +#: usr/local/www/services_captiveportal_vouchers.php:520 +msgid "Voucher public key" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:520 +#: usr/local/www/services_captiveportal_vouchers.php:525 +msgid "" +"Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is " +"used to decrypt vouchers." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:520 +#: usr/local/www/services_captiveportal_vouchers.php:527 +#: usr/local/www/services_captiveportal_vouchers.php:525 +#: usr/local/www/services_captiveportal_vouchers.php:532 +msgid "Generate" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:520 +#: usr/local/www/services_captiveportal_vouchers.php:527 +#: usr/local/www/services_captiveportal_vouchers.php:525 +#: usr/local/www/services_captiveportal_vouchers.php:532 +msgid "new key" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:494 +#: usr/local/www/services_captiveportal_vouchers.php:501 +#: usr/local/www/services_captiveportal_vouchers.php:514 +#: usr/local/www/services_captiveportal_vouchers.php:523 +#: usr/local/www/services_captiveportal_vouchers.php:528 +msgid "Voucher private key" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:527 +#: usr/local/www/services_captiveportal_vouchers.php:532 +msgid "" +"Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is " +"only used to generate encrypted vouchers and doesn't need to be available if " +"the vouchers have been generated offline." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:502 +#: usr/local/www/services_captiveportal_vouchers.php:509 +#: usr/local/www/services_captiveportal_vouchers.php:522 +#: usr/local/www/services_captiveportal_vouchers.php:531 +#: usr/local/www/services_captiveportal_vouchers.php:536 +msgid "Character set" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:506 +#: usr/local/www/services_captiveportal_vouchers.php:513 +#: usr/local/www/services_captiveportal_vouchers.php:526 +#: usr/local/www/services_captiveportal_vouchers.php:535 +#: usr/local/www/services_captiveportal_vouchers.php:540 +msgid "" +"Tickets are generated with the specified character set. It should contain " +"printable characters (numbers, lower case and upper case letters) that are " +"hard to confuse with others. Avoid e.g. 0/O and l/1." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:510 +#: usr/local/www/services_captiveportal_vouchers.php:517 +#: usr/local/www/services_captiveportal_vouchers.php:530 +#: usr/local/www/services_captiveportal_vouchers.php:539 +#: usr/local/www/services_captiveportal_vouchers.php:544 +msgid "of Roll Bits" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:514 +#: usr/local/www/services_captiveportal_vouchers.php:521 +#: usr/local/www/services_captiveportal_vouchers.php:534 +#: usr/local/www/services_captiveportal_vouchers.php:543 +#: usr/local/www/services_captiveportal_vouchers.php:548 +msgid "" +"Reserves a range in each voucher to store the Roll # it belongs to. Allowed " +"range: 1..31. Sum of Roll+Ticket+Checksum bits must be one Bit less than the " +"RSA key size." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:525 +#: usr/local/www/services_captiveportal_vouchers.php:538 +#: usr/local/www/services_captiveportal_vouchers.php:547 +#: usr/local/www/services_captiveportal_vouchers.php:552 +msgid "of Ticket Bits" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:522 +#: usr/local/www/services_captiveportal_vouchers.php:529 +#: usr/local/www/services_captiveportal_vouchers.php:542 +#: usr/local/www/services_captiveportal_vouchers.php:551 +#: usr/local/www/services_captiveportal_vouchers.php:556 +msgid "" +"Reserves a range in each voucher to store the Ticket# it belongs to. Allowed " +"range: 1..16. Using 16 bits allows a roll to have up to 65535 vouchers. A " +"bit array, stored in RAM and in the config, is used to mark if a voucher has " +"been used. A bit array for 65535 vouchers requires 8 KB of storage." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:526 +#: usr/local/www/services_captiveportal_vouchers.php:533 +#: usr/local/www/services_captiveportal_vouchers.php:546 +#: usr/local/www/services_captiveportal_vouchers.php:555 +#: usr/local/www/services_captiveportal_vouchers.php:560 +msgid "of Checksum Bits" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:530 +#: usr/local/www/services_captiveportal_vouchers.php:537 +#: usr/local/www/services_captiveportal_vouchers.php:550 +#: usr/local/www/services_captiveportal_vouchers.php:559 +#: usr/local/www/services_captiveportal_vouchers.php:564 +msgid "" +"Reserves a range in each voucher to store a simple checksum over Roll # and " +"Ticket#. Allowed range is 0..31." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:534 +#: usr/local/www/services_captiveportal_vouchers.php:541 +#: usr/local/www/services_captiveportal_vouchers.php:554 +#: usr/local/www/services_captiveportal_vouchers.php:563 +#: usr/local/www/services_captiveportal_vouchers.php:568 +msgid "Magic Number" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:538 +#: usr/local/www/services_captiveportal_vouchers.php:545 +#: usr/local/www/services_captiveportal_vouchers.php:558 +#: usr/local/www/services_captiveportal_vouchers.php:567 +#: usr/local/www/services_captiveportal_vouchers.php:572 +msgid "" +"Magic number stored in every voucher. Verified during voucher check. Size " +"depends on how many bits are left by Roll+Ticket+Checksum bits. If all bits " +"are used, no magic number will be used and checked." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:542 +#: usr/local/www/services_captiveportal_vouchers.php:549 +#: usr/local/www/services_captiveportal_vouchers.php:562 +#: usr/local/www/services_captiveportal_vouchers.php:571 +#: usr/local/www/services_captiveportal_vouchers.php:576 +msgid "Invalid Voucher Message" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:545 +#: usr/local/www/services_captiveportal_vouchers.php:552 +#: usr/local/www/services_captiveportal_vouchers.php:565 +#: usr/local/www/services_captiveportal_vouchers.php:574 +#: usr/local/www/services_captiveportal_vouchers.php:579 +msgid "" +"Error message displayed for invalid vouchers on captive portal error page" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:549 +#: usr/local/www/services_captiveportal_vouchers.php:556 +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:578 +#: usr/local/www/services_captiveportal_vouchers.php:583 +msgid "Expired Voucher Message" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:552 +#: usr/local/www/services_captiveportal_vouchers.php:559 +#: usr/local/www/services_captiveportal_vouchers.php:572 +#: usr/local/www/services_captiveportal_vouchers.php:581 +#: usr/local/www/services_captiveportal_vouchers.php:586 +msgid "" +"Error message displayed for expired vouchers on captive portal error page" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:562 +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:582 +#: usr/local/www/services_captiveportal_vouchers.php:591 +#: usr/local/www/services_captiveportal_vouchers.php:596 +msgid "Voucher database synchronization" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:568 +#: usr/local/www/services_captiveportal_vouchers.php:575 +#: usr/local/www/services_captiveportal_vouchers.php:588 +#: usr/local/www/services_captiveportal_vouchers.php:597 +#: usr/local/www/services_captiveportal_vouchers.php:602 +msgid "" +"IP address of master nodes webConfigurator to synchronize voucher database " +"and used vouchers from." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:576 +#: usr/local/www/services_captiveportal_vouchers.php:589 +#: usr/local/www/services_captiveportal_vouchers.php:598 +#: usr/local/www/services_captiveportal_vouchers.php:603 +msgid "NOTE: this should be setup on the slave nodes and not the primary node!" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:573 +#: usr/local/www/services_captiveportal_vouchers.php:580 +#: usr/local/www/services_captiveportal_vouchers.php:593 +#: usr/local/www/services_captiveportal_vouchers.php:602 +#: usr/local/www/services_captiveportal_vouchers.php:607 +msgid "Voucher sync port" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:576 +#: usr/local/www/services_captiveportal_vouchers.php:583 +#: usr/local/www/services_captiveportal_vouchers.php:596 +#: usr/local/www/services_captiveportal_vouchers.php:605 +#: usr/local/www/services_captiveportal_vouchers.php:610 +msgid "" +"This is the port of the master voucher nodes webConfigurator. Example: 443" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:580 +#: usr/local/www/services_captiveportal_vouchers.php:587 +#: usr/local/www/services_captiveportal_vouchers.php:600 +#: usr/local/www/services_captiveportal_vouchers.php:609 +#: usr/local/www/services_captiveportal_vouchers.php:614 +msgid "Voucher sync username" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:583 +#: usr/local/www/services_captiveportal_vouchers.php:590 +#: usr/local/www/services_captiveportal_vouchers.php:603 +#: usr/local/www/services_captiveportal_vouchers.php:612 +#: usr/local/www/services_captiveportal_vouchers.php:617 +msgid "This is the username of the master voucher nodes webConfigurator." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:587 +#: usr/local/www/services_captiveportal_vouchers.php:594 +#: usr/local/www/services_captiveportal_vouchers.php:607 +#: usr/local/www/services_captiveportal_vouchers.php:616 +#: usr/local/www/services_captiveportal_vouchers.php:621 +msgid "Voucher sync password" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:590 +#: usr/local/www/services_captiveportal_vouchers.php:597 +#: usr/local/www/services_captiveportal_vouchers.php:610 +#: usr/local/www/services_captiveportal_vouchers.php:619 +#: usr/local/www/services_captiveportal_vouchers.php:624 +msgid "This is the password of the master voucher nodes webConfigurator." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:604 +#: usr/local/www/services_captiveportal_vouchers.php:611 +#: usr/local/www/services_captiveportal_vouchers.php:625 +#: usr/local/www/services_captiveportal_vouchers.php:634 +#: usr/local/www/services_captiveportal_vouchers.php:639 +msgid "" +"Changing any Voucher parameter (apart from managing the list of Rolls) on " +"this page will render existing vouchers useless if they were generated with " +"different settings." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:606 +#: usr/local/www/services_captiveportal_vouchers.php:613 +#: usr/local/www/services_captiveportal_vouchers.php:627 +#: usr/local/www/services_captiveportal_vouchers.php:636 +#: usr/local/www/services_captiveportal_vouchers.php:641 +msgid "" +"Specifying the Voucher Database Synchronization options will not record any " +"other value from the other options. They will be retrieved/synced from the " +"master." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +msgid "Edit Voucher Rolls" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:101 +#: usr/local/www/services_captiveportal_vouchers_edit.php:99 +#: usr/local/www/services_captiveportal_vouchers_edit.php:99 +#, php-format +msgid "Roll number %s already exists." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:107 +#: usr/local/www/services_captiveportal_vouchers_edit.php:105 +#: usr/local/www/services_captiveportal_vouchers_edit.php:105 +#, php-format +msgid "Roll number must be numeric and less than %s" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:110 +#: usr/local/www/services_captiveportal_vouchers_edit.php:108 +#: usr/local/www/services_captiveportal_vouchers_edit.php:108 +#, php-format +msgid "A roll has at least one voucher and less than %s." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:113 +#: usr/local/www/services_captiveportal_vouchers_edit.php:111 +#: usr/local/www/services_captiveportal_vouchers_edit.php:111 +msgid "Each voucher must be good for at least 1 minute." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:134 +#: usr/local/www/services_captiveportal_vouchers_edit.php:132 +#: usr/local/www/services_captiveportal_vouchers_edit.php:132 +#, php-format +msgid "All %1$s vouchers from Roll %2$s marked unused" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:177 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +msgid "Enter the Roll" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:177 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +msgid "found on top of the generated/printed vouchers" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:181 +#: usr/local/www/services_captiveportal_vouchers_edit.php:179 +#: usr/local/www/services_captiveportal_vouchers_edit.php:179 +msgid "Minutes per Ticket" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:185 +#: usr/local/www/services_captiveportal_vouchers_edit.php:183 +#: usr/local/www/services_captiveportal_vouchers_edit.php:183 +msgid "" +"Defines the time in minutes that a user is allowed access. The clock starts " +"ticking the first time a voucher is used for authentication" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:193 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +msgid "Enter the number of vouchers" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:193 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +msgid "" +"found on top of the generated/printed vouchers. WARNING: Changing this " +"number for an existing Roll will mark all vouchers as unused again" +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:201 +#: usr/local/www/services_captiveportal_vouchers_edit.php:199 +#: usr/local/www/services_captiveportal_vouchers_edit.php:199 +msgid "Can be used to further identify this roll. Ignored by the system" +msgstr "" + +#: usr/local/www/diag_resetstate.php:54 usr/local/www/diag_resetstate.php:54 +msgid "The state table has been flushed successfully." +msgstr "" + +#: usr/local/www/diag_resetstate.php:60 usr/local/www/diag_resetstate.php:60 +msgid "The source tracking table has been flushed successfully." +msgstr "" + +#: usr/local/www/diag_resetstate.php:64 usr/local/www/diag_resetstate.php:64 +msgid "Reset state" +msgstr "" + +#: usr/local/www/diag_resetstate.php:91 usr/local/www/diag_resetstate.php:91 +msgid "Firewall state table" +msgstr "" + +#: usr/local/www/diag_resetstate.php:93 usr/local/www/diag_resetstate.php:93 +msgid "" +"Resetting the state tables will remove all entries from the corresponding " +"tables. This means that all open connections will be broken and will have to " +"be re-established. This may be necessary after making substantial changes to " +"the firewall and/or NAT rules, especially if there are IP protocol mappings " +"(e.g. for PPTP or IPv6) with open connections." +msgstr "" + +#: usr/local/www/diag_resetstate.php:100 usr/local/www/diag_resetstate.php:100 +msgid "" +"The firewall will normally leave the state tables intact when changing rules." +msgstr "" + +#: usr/local/www/diag_resetstate.php:103 usr/local/www/diag_resetstate.php:103 +msgid "" +"NOTE: If you reset the firewall state table, the browser session may appear " +"to be hung after clicking "Reset". Simply refresh the page to " +"continue." +msgstr "" + +#: usr/local/www/diag_resetstate.php:113 usr/local/www/diag_resetstate.php:113 +msgid "Firewall Source Tracking" +msgstr "" + +#: usr/local/www/diag_resetstate.php:115 usr/local/www/diag_resetstate.php:115 +msgid "" +"Resetting the source tracking table will remove all source/destination " +"associations. This means that the \"sticky\" source/destination association " +"will be cleared for all clients." +msgstr "" + +#: usr/local/www/diag_resetstate.php:119 usr/local/www/diag_resetstate.php:119 +msgid "This does not clear active connection states, only source tracking." +msgstr "" + +#: usr/local/www/diag_resetstate.php:127 usr/local/www/status_lb_pool.php:218 +#: usr/local/www/status_lb_pool.php:218 usr/local/www/diag_resetstate.php:127 +msgid "Reset" +msgstr "" + +#: usr/local/www/status_filter_reload.php:44 +#: usr/local/www/status_filter_reload.php:44 +msgid "Filter Reload Status" +msgstr "" + +#: usr/local/www/status_filter_reload.php:88 +#: usr/local/www/status_filter_reload.php:89 +#: usr/local/www/status_filter_reload.php:89 +msgid "" +"This page will automatically refresh every 3 seconds until the filter is " +"done reloading" +msgstr "" + +#: usr/local/www/diag_routes.php:45 usr/local/www/diag_routes.php:45 +msgid "Routing tables" +msgstr "" + +#: usr/local/www/diag_routes.php:58 usr/local/www/diag_routes.php:59 +#: usr/local/www/diag_routes.php:59 +msgid "Name resolution" +msgstr "" + +#: usr/local/www/diag_routes.php:62 usr/local/www/diag_routes.php:63 +#: usr/local/www/diag_routes.php:63 +msgid "Enable this to attempt to resolve names when displaying the tables." +msgstr "" + +#: usr/local/www/diag_routes.php:69 usr/local/www/diag_routes.php:70 +#: usr/local/www/diag_routes.php:70 +msgid "Show" +msgstr "" + +#: usr/local/www/diag_routes.php:72 +msgid "" +"By enabling name resolution, the query should take a bit longer. You can " +"stop it at any time by clicking the Stop button in your browser" +msgstr "" + +#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:63 +#: usr/local/www/diag_traceroute.php:63 +msgid "ttl" +msgstr "" + +#: usr/local/www/diag_traceroute.php:66 usr/local/www/diag_traceroute.php:67 +#: usr/local/www/diag_traceroute.php:67 +#, php-format +msgid "Maximum number of hops must be between 1 and %s" +msgstr "" + +#: usr/local/www/diag_traceroute.php:94 usr/local/www/diag_traceroute.php:112 +#: usr/local/www/diag_traceroute.php:131 usr/local/www/diag_traceroute.php:131 +msgid "Maximum number of hops" +msgstr "" + +#: usr/local/www/diag_traceroute.php:104 usr/local/www/diag_traceroute.php:128 +#: usr/local/www/diag_traceroute.php:147 usr/local/www/diag_traceroute.php:147 +msgid "Use ICMP" +msgstr "" + +#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:141 +#: usr/local/www/diag_traceroute.php:162 usr/local/www/diag_traceroute.php:162 +msgid "" +"Traceroute may take a while to complete. You may hit the Stop button on your " +"browser at any time to see the progress of failed traceroutes." +msgstr "" + +#: usr/local/www/diag_traceroute.php:120 usr/local/www/diag_traceroute.php:144 +#: usr/local/www/diag_traceroute.php:173 usr/local/www/diag_traceroute.php:173 +msgid "Traceroute output:" +msgstr "" + +#: usr/local/www/diag_traceroute.php:137 +msgid "Multi-wan is not supported from this utility currently." +msgstr "" + +#: usr/local/www/status_graph.php:85 usr/local/www/fbegin.inc:173 +#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:199 +#: usr/local/www/status_graph.php:90 usr/local/www/status_graph.php:101 +#: usr/local/www/fbegin.inc:190 usr/local/www/status_graph.php:111 +#: usr/local/www/status_graph.php:111 usr/local/www/fbegin.inc:190 +msgid "Traffic Graph" +msgstr "" + +#: usr/local/www/status_graph.php:197 +msgid "" +"Your browser does not support the type SVG! You need to either use Firefox " +"or download the Adobe SVG plugin" +msgstr "" + +#: usr/local/www/status_graph.php:203 usr/local/www/status_graph.php:198 +#: usr/local/www/status_graph.php:209 usr/local/www/status_graph.php:220 +#: usr/local/www/status_graph.php:242 usr/local/www/status_graph.php:242 +msgid "Host IP" +msgstr "" + +#: usr/local/www/status_graph.php:204 usr/local/www/status_graph.php:199 +#: usr/local/www/status_graph.php:210 usr/local/www/status_graph.php:221 +#: usr/local/www/status_graph.php:243 usr/local/www/status_graph.php:243 +msgid "Bandwidth In" +msgstr "" + +#: usr/local/www/status_graph.php:205 usr/local/www/status_graph.php:200 +#: usr/local/www/status_graph.php:211 usr/local/www/status_graph.php:222 +#: usr/local/www/status_graph.php:244 usr/local/www/status_graph.php:244 +msgid "Bandwidth Out" +msgstr "" + +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +#: usr/local/www/status_graph.php:330 usr/local/www/status_graph.php:330 +msgid "the" +msgstr "" + +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +#: usr/local/www/status_graph.php:330 usr/local/www/status_graph.php:330 +msgid "Adobe SVG Viewer" +msgstr "" + +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +#: usr/local/www/status_graph.php:330 usr/local/www/status_graph.php:330 +msgid "" +"Firefox 1.5 or later or other browser supporting SVG is required to view the " +"graph" +msgstr "" + +#: usr/local/www/carp_status.php:71 usr/local/www/carp_status.php:67 +#: usr/local/www/carp_status.php:67 +#, php-format +msgid "" +"%s IPs have been disabled. Please note that disabling does not survive a " +"reboot." +msgstr "" + +#: usr/local/www/carp_status.php:73 usr/local/www/carp_status.php:69 +#: usr/local/www/carp_status.php:69 +msgid "CARP has been enabled." +msgstr "" + +#: usr/local/www/carp_status.php:127 usr/local/www/carp_status.php:120 +#: usr/local/www/carp_status.php:120 +msgid "Enable Carp" +msgstr "" + +#: usr/local/www/carp_status.php:130 usr/local/www/carp_status.php:123 +#: usr/local/www/carp_status.php:123 +msgid "Disable Carp" +msgstr "" + +#: usr/local/www/carp_status.php:138 usr/local/www/carp_status.php:131 +#: usr/local/www/carp_status.php:131 +msgid "CARP Interface" +msgstr "" + +#: usr/local/www/carp_status.php:144 usr/local/www/carp_status.php:137 +#: usr/local/www/carp_status.php:137 +msgid "Could not locate any defined CARP interfaces." +msgstr "" + +#: usr/local/www/carp_status.php:196 +msgid "You can configure CARP settings" +msgstr "" + +#: usr/local/www/carp_status.php:202 usr/local/www/carp_status.php:195 +#: usr/local/www/carp_status.php:195 +msgid "pfSync nodes" +msgstr "" + +#: usr/local/www/status_interfaces.php:81 +#: usr/local/www/status_interfaces.php:84 +#: usr/local/www/status_interfaces.php:84 +msgid "interface" +msgstr "" + +#: usr/local/www/status_interfaces.php:99 +#: usr/local/www/status_interfaces.php:117 +#: usr/local/www/status_interfaces.php:102 +#: usr/local/www/status_interfaces.php:120 +#: usr/local/www/status_interfaces.php:102 +#: usr/local/www/status_interfaces.php:120 +msgid "Release" +msgstr "" + +#: usr/local/www/status_interfaces.php:102 +#: usr/local/www/status_interfaces.php:120 +#: usr/local/www/status_interfaces.php:105 +#: usr/local/www/status_interfaces.php:123 +#: usr/local/www/status_interfaces.php:105 +#: usr/local/www/status_interfaces.php:123 +msgid "Renew" +msgstr "" + +#: usr/local/www/status_interfaces.php:117 +#: usr/local/www/status_interfaces.php:132 +#: usr/local/www/status_interfaces.php:147 +#: usr/local/www/status_interfaces.php:163 +#: usr/local/www/status_interfaces.php:135 +#: usr/local/www/status_interfaces.php:150 +#: usr/local/www/status_interfaces.php:165 +#: usr/local/www/status_interfaces.php:181 +#: usr/local/www/status_interfaces.php:138 +#: usr/local/www/status_interfaces.php:153 +#: usr/local/www/status_interfaces.php:168 +#: usr/local/www/status_interfaces.php:184 +#: usr/local/www/status_interfaces.php:138 +#: usr/local/www/status_interfaces.php:153 +#: usr/local/www/status_interfaces.php:168 +#: usr/local/www/status_interfaces.php:184 +msgid "Connect" +msgstr "" + +#: usr/local/www/status_interfaces.php:171 +#: usr/local/www/status_interfaces.php:189 +#: usr/local/www/status_interfaces.php:192 +#: usr/local/www/status_interfaces.php:192 +msgid "Uptime " +msgstr "" + +#: usr/local/www/status_interfaces.php:200 +#: usr/local/www/status_interfaces.php:274 +#: usr/local/www/status_interfaces.php:277 +#: usr/local/www/status_interfaces.php:277 +msgid "Subnet mask IPv4" +msgstr "" + +#: usr/local/www/status_interfaces.php:207 +#: usr/local/www/status_interfaces.php:281 +#: usr/local/www/status_interfaces.php:284 +#: usr/local/www/status_interfaces.php:284 +msgid "Gateway IPv4" +msgstr "" + +#: usr/local/www/status_interfaces.php:224 +#: usr/local/www/status_interfaces.php:305 +#: usr/local/www/status_interfaces.php:308 +#: usr/local/www/status_interfaces.php:308 +msgid "Subnet mask IPv6" +msgstr "" + +#: usr/local/www/status_interfaces.php:239 +#: usr/local/www/status_interfaces.php:320 +#: usr/local/www/status_interfaces.php:323 +#: usr/local/www/status_interfaces.php:323 +msgid "ISP DNS servers" +msgstr "" + +#: usr/local/www/status_interfaces.php:251 +#: usr/local/www/status_interfaces.php:332 +#: usr/local/www/status_interfaces.php:335 +#: usr/local/www/status_interfaces.php:335 +msgid "Media" +msgstr "" + +#: usr/local/www/status_interfaces.php:272 +#: usr/local/www/status_interfaces.php:369 +#: usr/local/www/status_interfaces.php:372 +#: usr/local/www/status_interfaces.php:372 +msgid "BSSID" +msgstr "" + +#: usr/local/www/status_interfaces.php:279 +#: usr/local/www/diag_dump_states_sources.php:148 +#: usr/local/www/status_interfaces.php:376 +#: usr/local/www/status_interfaces.php:379 +#: usr/local/www/diag_dump_states_sources.php:147 +#: usr/local/www/diag_system_pftop.php:158 +#: usr/local/www/diag_dump_states_sources.php:147 +#: usr/local/www/status_interfaces.php:379 +#: usr/local/www/diag_system_pftop.php:158 +msgid "Rate" +msgstr "" + +#: usr/local/www/status_interfaces.php:286 +#: usr/local/www/status_interfaces.php:383 +#: usr/local/www/status_interfaces.php:386 +#: usr/local/www/status_interfaces.php:386 +msgid "RSSI" +msgstr "" + +#: usr/local/www/status_interfaces.php:293 +#: usr/local/www/status_interfaces.php:390 +#: usr/local/www/status_interfaces.php:393 +#: usr/local/www/status_interfaces.php:393 +msgid "In/out packets" +msgstr "" + +#: usr/local/www/status_interfaces.php:302 +#: usr/local/www/status_interfaces.php:399 +#: usr/local/www/status_interfaces.php:402 +#: usr/local/www/status_interfaces.php:402 +msgid "In/out packets (pass)" +msgstr "" + +#: usr/local/www/status_interfaces.php:311 +#: usr/local/www/status_interfaces.php:408 +#: usr/local/www/status_interfaces.php:411 +#: usr/local/www/status_interfaces.php:411 +msgid "In/out packets (block)" +msgstr "" + +#: usr/local/www/status_interfaces.php:321 +#: usr/local/www/status_interfaces.php:418 +#: usr/local/www/status_interfaces.php:421 +#: usr/local/www/status_interfaces.php:421 +msgid "In/out errors" +msgstr "" + +#: usr/local/www/status_interfaces.php:329 +#: usr/local/www/status_interfaces.php:426 +#: usr/local/www/status_interfaces.php:429 +#: usr/local/www/status_interfaces.php:429 +msgid "Collisions" +msgstr "" + +#: usr/local/www/status_interfaces.php:338 +#: usr/local/www/status_interfaces.php:435 +#: usr/local/www/status_interfaces.php:438 +#: usr/local/www/status_interfaces.php:438 +#, php-format +msgid "Bridge (%s)" +msgstr "" + +#: usr/local/www/status_interfaces.php:360 +#: usr/local/www/status_interfaces.php:457 +#: usr/local/www/status_interfaces.php:460 +#: usr/local/www/status_interfaces.php:460 +msgid "Interrupts/Second" +msgstr "" + +#: usr/local/www/status_interfaces.php:363 +#: usr/local/www/status_interfaces.php:460 +#: usr/local/www/status_interfaces.php:463 +#: usr/local/www/status_interfaces.php:463 +msgid "total" +msgstr "" + +#: usr/local/www/status_interfaces.php:376 +#: usr/local/www/status_interfaces.php:473 +#: usr/local/www/status_interfaces.php:476 +#: usr/local/www/status_interfaces.php:476 +#, php-format +msgid "" +"Using dial-on-demand will bring the connection up again if any packet " +"triggers it. To substantiate this point: disconnecting manually will %snot%s " +"prevent dial-on-demand from making connections to the outside! Don't use " +"dial-on-demand if you want to make sure that the line is kept disconnected." +msgstr "" + +#: usr/local/www/exec.php:91 usr/local/www/exec.php:93 +#: usr/local/www/exec.php:93 +msgid "Execute command" +msgstr "" + +#: usr/local/www/exec.php:153 usr/local/www/exec.php:155 +#: usr/local/www/exec.php:155 +msgid "Nothing to recall" +msgstr "" + +#: usr/local/www/exec.php:222 usr/local/www/exec.php:224 +#: usr/local/www/exec.php:224 +msgid "Note: this function is unsupported. Use it on your own risk" +msgstr "" + +#: usr/local/www/exec.php:253 usr/local/www/exec.php:255 +#: usr/local/www/exec.php:255 +msgid "Execute Shell command" +msgstr "" + +#: usr/local/www/exec.php:256 usr/local/www/exec.php:309 +#: usr/local/www/exec.php:258 usr/local/www/exec.php:311 +#: usr/local/www/exec.php:258 usr/local/www/exec.php:311 +msgid "Command" +msgstr "" + +#: usr/local/www/exec.php:264 usr/local/www/exec.php:315 +#: usr/local/www/exec.php:266 usr/local/www/exec.php:317 +#: usr/local/www/exec.php:266 usr/local/www/exec.php:317 +msgid "Execute" +msgstr "" + +#: usr/local/www/exec.php:266 usr/local/www/status_upnp.php:77 +#: usr/local/www/exec.php:268 usr/local/www/status_upnp.php:78 +#: usr/local/www/exec.php:268 usr/local/www/status_upnp.php:78 +msgid "Clear" +msgstr "" + +#: usr/local/www/exec.php:276 usr/local/www/exec.php:278 +#: usr/local/www/exec.php:278 +msgid "File to download" +msgstr "" + +#: usr/local/www/exec.php:293 usr/local/www/exec.php:295 +#: usr/local/www/exec.php:295 +msgid "File to upload" +msgstr "" + +#: usr/local/www/exec.php:306 usr/local/www/exec.php:308 +#: usr/local/www/exec.php:308 +msgid "PHP Execute" +msgstr "" + +#: usr/local/www/exec.php:317 usr/local/www/exec.php:319 +#: usr/local/www/exec.php:319 +msgid "Example" +msgstr "" + +#: usr/local/www/exec_raw.php:47 +msgid "Nothing specified. Cannot continue." +msgstr "" + +#: usr/local/www/fbegin.inc:88 usr/local/www/fbegin.inc:105 +#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:106 +#: usr/local/www/fbegin.inc:106 +msgid "Packages" +msgstr "" + +#: usr/local/www/fbegin.inc:89 usr/local/www/fbegin.inc:106 +#: usr/local/www/fbegin.inc:115 usr/local/www/fbegin.inc:107 +#: usr/local/www/fbegin.inc:107 +msgid "Setup Wizard" +msgstr "" + +#: usr/local/www/fbegin.inc:90 usr/local/www/diag_logs_routing.php:54 +#: usr/local/www/diag_logs_routing.php:84 usr/local/www/fbegin.inc:107 +#: usr/local/www/diag_logs_resolver.php:98 usr/local/www/diag_logs.php:97 +#: usr/local/www/diag_logs_wireless.php:86 +#: usr/local/www/diag_logs_gateways.php:98 +#: usr/local/www/diag_logs_routing.php:85 usr/local/www/fbegin.inc:116 +#: usr/local/www/diag_logs_resolver.php:99 +#: usr/local/www/diag_logs_wireless.php:87 +#: usr/local/www/diag_logs_gateways.php:99 usr/local/www/fbegin.inc:108 +#: usr/local/www/diag_logs_routing.php:54 +#: usr/local/www/diag_logs_routing.php:85 usr/local/www/diag_logs.php:97 +#: usr/local/www/diag_logs_gateways.php:99 usr/local/www/fbegin.inc:108 +#: usr/local/www/diag_logs_wireless.php:87 +#: usr/local/www/diag_logs_resolver.php:99 +msgid "Routing" +msgstr "" + +#: usr/local/www/fbegin.inc:91 usr/local/www/fbegin.inc:108 +#: usr/local/www/fbegin.inc:117 usr/local/www/fbegin.inc:109 +#: usr/local/www/fbegin.inc:109 +msgid "Cert Manager" +msgstr "" + +#: usr/local/www/fbegin.inc:123 usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/fbegin.inc:140 usr/local/www/fbegin.inc:149 +#: usr/local/www/fbegin.inc:141 usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/fbegin.inc:141 +msgid "DHCPv6 Relay" +msgstr "" + +#: usr/local/www/fbegin.inc:126 usr/local/www/fbegin.inc:143 +#: usr/local/www/services_dhcpv6.php:581 +#: usr/local/www/services_router_advertisements.php:260 +#: usr/local/www/services_dhcpv6.php:502 usr/local/www/services_dhcpv6.php:512 +#: usr/local/www/services_dhcpv6.php:513 usr/local/www/services_dhcpv6.php:523 +#: usr/local/www/services_router_advertisements.php:255 +#: usr/local/www/services_router_advertisements.php:255 +#: usr/local/www/services_dhcpv6.php:513 usr/local/www/services_dhcpv6.php:523 +msgid "DHCPv6 Server" +msgstr "" + +#: usr/local/www/fbegin.inc:129 usr/local/www/status_services.php:316 +#: usr/local/www/widgets/widgets/services_status.widget.php:121 +#: usr/local/www/fbegin.inc:146 etc/inc/service-utils.inc:299 +#: usr/local/www/fbegin.inc:155 usr/local/www/fbegin.inc:147 +#: etc/inc/service-utils.inc:298 etc/inc/service-utils.inc:315 +#: usr/local/www/fbegin.inc:147 etc/inc/service-utils.inc:315 +msgid "IGMP proxy" +msgstr "" + +#: usr/local/www/fbegin.inc:131 usr/local/www/fbegin.inc:149 +msgid "OLSR" +msgstr "" + +#: usr/local/www/fbegin.inc:132 usr/local/www/vpn_pppoe_edit.php:234 +#: usr/local/www/fbegin.inc:150 usr/local/www/fbegin.inc:158 +#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/vpn_pppoe_edit.php:237 +#: usr/local/www/fbegin.inc:150 +msgid "PPPoE Server" +msgstr "" + +#: usr/local/www/fbegin.inc:133 usr/local/www/fbegin.inc:151 +#: usr/local/www/fbegin.inc:159 +msgid "RIP" +msgstr "" + +#: usr/local/www/fbegin.inc:139 usr/local/www/fbegin.inc:175 +#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:193 +#: usr/local/www/fbegin.inc:165 usr/local/www/fbegin.inc:201 +#: usr/local/www/fbegin.inc:156 usr/local/www/fbegin.inc:192 +#: usr/local/www/fbegin.inc:156 usr/local/www/fbegin.inc:192 +msgid "UPnP & NAT-PMP" +msgstr "" + +#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:174 +#: usr/local/www/fbegin.inc:182 usr/local/www/fbegin.inc:173 +#: usr/local/www/fbegin.inc:173 +msgid "CARP (failover)" +msgstr "" + +#: usr/local/www/fbegin.inc:158 usr/local/www/fbegin.inc:175 +#: usr/local/www/fbegin.inc:183 usr/local/www/fbegin.inc:174 +#: usr/local/www/fbegin.inc:174 +msgid "Dashboard" +msgstr "" + +#: usr/local/www/fbegin.inc:160 usr/local/www/fbegin.inc:177 +#: usr/local/www/fbegin.inc:185 usr/local/www/fbegin.inc:176 +#: usr/local/www/fbegin.inc:176 +msgid "DHCP Leases" +msgstr "" + +#: usr/local/www/fbegin.inc:161 usr/local/www/fbegin.inc:178 +#: usr/local/www/fbegin.inc:186 usr/local/www/fbegin.inc:177 +#: usr/local/www/fbegin.inc:177 +msgid "DHCPv6 Leases" +msgstr "" + +#: usr/local/www/fbegin.inc:162 usr/local/www/fbegin.inc:179 +#: usr/local/www/fbegin.inc:187 usr/local/www/fbegin.inc:178 +#: usr/local/www/fbegin.inc:178 +msgid "Filter Reload" +msgstr "" + +#: usr/local/www/fbegin.inc:168 usr/local/www/fbegin.inc:186 +#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:185 +#: usr/local/www/fbegin.inc:185 +msgid "Package Logs" +msgstr "" + +#: usr/local/www/fbegin.inc:169 usr/local/www/status_queues.php:98 +#: usr/local/www/status_rrd_graph.php:338 +#: usr/local/www/status_rrd_graph_settings.php:57 +#: usr/local/www/status_rrd_graph_settings.php:137 +#: usr/local/www/fbegin.inc:187 +#: usr/local/www/status_rrd_graph_settings.php:138 +#: usr/local/www/status_queues.php:101 usr/local/www/status_rrd_graph.php:386 +#: usr/local/www/fbegin.inc:195 usr/local/www/status_rrd_graph.php:411 +#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:186 +#: usr/local/www/status_rrd_graph.php:411 +#: usr/local/www/status_rrd_graph_settings.php:57 +#: usr/local/www/status_rrd_graph_settings.php:138 +#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:186 +msgid "Queues" +msgstr "" + +#: usr/local/www/fbegin.inc:170 usr/local/www/status_rrd_graph.php:224 +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_settings.php:113 +#: usr/local/www/status_rrd_graph_settings.php:171 +#: usr/local/www/fbegin.inc:188 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/status_rrd_graph_settings.php:172 +#: usr/local/www/status_rrd_graph.php:244 usr/local/www/fbegin.inc:196 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/status_rrd_graph.php:248 usr/local/www/fbegin.inc:187 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/status_rrd_graph.php:248 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/status_rrd_graph_settings.php:172 +#: usr/local/www/fbegin.inc:187 +msgid "RRD Graphs" +msgstr "" + +#: usr/local/www/fbegin.inc:172 usr/local/www/fbegin.inc:190 +#: usr/local/www/fbegin.inc:198 usr/local/www/fbegin.inc:189 +#: usr/local/www/fbegin.inc:189 +msgid "System Logs" +msgstr "" + +#: usr/local/www/fbegin.inc:188 +msgid "ARP Tables" +msgstr "" + +#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:209 +#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:208 +#: usr/local/www/fbegin.inc:208 +msgid "Command Prompt" +msgstr "" + +#: usr/local/www/fbegin.inc:193 usr/local/www/fbegin.inc:211 +#: usr/local/www/fbegin.inc:219 usr/local/www/fbegin.inc:210 +#: usr/local/www/fbegin.inc:210 +msgid "Edit File" +msgstr "" + +#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:212 +#: usr/local/www/fbegin.inc:220 usr/local/www/fbegin.inc:211 +#: usr/local/www/fbegin.inc:211 +msgid "Factory Defaults" +msgstr "" + +#: usr/local/www/fbegin.inc:195 usr/local/www/fbegin.inc:213 +#: usr/local/www/fbegin.inc:221 usr/local/www/fbegin.inc:212 +#: usr/local/www/fbegin.inc:212 +msgid "Halt System" +msgstr "" + +#: usr/local/www/fbegin.inc:196 usr/local/www/fbegin.inc:214 +#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:213 +#: usr/local/www/fbegin.inc:213 +msgid "Limiter Info" +msgstr "" + +#: usr/local/www/fbegin.inc:197 usr/local/www/diag_ndp.php:103 +#: usr/local/www/fbegin.inc:215 usr/local/www/fbegin.inc:223 +#: usr/local/www/fbegin.inc:214 usr/local/www/diag_ndp.php:103 +#: usr/local/www/fbegin.inc:214 +msgid "NDP Table" +msgstr "" + +#: usr/local/www/fbegin.inc:201 usr/local/www/fbegin.inc:219 +#: usr/local/www/fbegin.inc:227 usr/local/www/fbegin.inc:219 +msgid "pfInfo" +msgstr "" + +#: usr/local/www/fbegin.inc:202 usr/local/www/fbegin.inc:220 +#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:220 +msgid "pfTop" +msgstr "" + +#: usr/local/www/fbegin.inc:203 usr/local/www/fbegin.inc:221 +#: usr/local/www/fbegin.inc:229 usr/local/www/fbegin.inc:221 +msgid "Reboot" +msgstr "" + +#: usr/local/www/fbegin.inc:205 usr/local/www/fbegin.inc:223 +#: usr/local/www/widgets/widgets/smart_status.widget.php:38 +#: usr/local/www/fbegin.inc:231 +#: usr/local/www/widgets/widgets/smart_status.widget.php:39 +#: usr/local/www/fbegin.inc:223 +#: usr/local/www/widgets/widgets/smart_status.widget.php:39 +msgid "SMART Status" +msgstr "" + +#: usr/local/www/fbegin.inc:207 usr/local/www/fbegin.inc:225 +#: usr/local/www/fbegin.inc:234 usr/local/www/fbegin.inc:226 +#: usr/local/www/fbegin.inc:226 +msgid "States Summary" +msgstr "" + +#: usr/local/www/fbegin.inc:208 usr/local/www/fbegin.inc:226 +#: usr/local/www/fbegin.inc:235 usr/local/www/fbegin.inc:227 +#: usr/local/www/fbegin.inc:227 +msgid "System Activity" +msgstr "" + +#: usr/local/www/fbegin.inc:216 usr/local/www/fbegin.inc:233 +#: usr/local/www/fbegin.inc:242 usr/local/www/fbegin.inc:234 +#: usr/local/www/fbegin.inc:234 +msgid "Restart HTTPD" +msgstr "" + +#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:240 +#: usr/local/www/fbegin.inc:249 usr/local/www/fbegin.inc:241 +#: usr/local/www/fbegin.inc:241 +msgid "About this Page" +msgstr "" + +#: usr/local/www/fbegin.inc:224 usr/local/www/fbegin.inc:242 +#: usr/local/www/fbegin.inc:251 usr/local/www/fbegin.inc:243 +#: usr/local/www/fbegin.inc:243 +msgid "Bug Database" +msgstr "" + +#: usr/local/www/fbegin.inc:225 usr/local/www/fbegin.inc:243 +#: usr/local/www/fbegin.inc:252 usr/local/www/fbegin.inc:244 +#: usr/local/www/fbegin.inc:244 +msgid "User Forum" +msgstr "" + +#: usr/local/www/fbegin.inc:226 usr/local/www/fbegin.inc:244 +#: usr/local/www/fbegin.inc:253 usr/local/www/fbegin.inc:245 +#: usr/local/www/fbegin.inc:245 +msgid "Documentation" +msgstr "" + +#: usr/local/www/fbegin.inc:227 usr/local/www/fbegin.inc:245 +#: usr/local/www/fbegin.inc:254 usr/local/www/fbegin.inc:246 +#: usr/local/www/fbegin.inc:246 +msgid "Developers Wiki" +msgstr "" + +#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:246 +#: usr/local/www/fbegin.inc:255 usr/local/www/fbegin.inc:247 +#: usr/local/www/fbegin.inc:247 +msgid "Paid Support" +msgstr "" + +#: usr/local/www/fbegin.inc:229 usr/local/www/fbegin.inc:247 +#: usr/local/www/fbegin.inc:256 usr/local/www/fbegin.inc:248 +#: usr/local/www/fbegin.inc:248 +msgid "pfSense Book" +msgstr "" + +#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:248 +#: usr/local/www/fbegin.inc:257 usr/local/www/fbegin.inc:249 +#: usr/local/www/fbegin.inc:249 +msgid "Search portal" +msgstr "" + +#: usr/local/www/fbegin.inc:231 usr/local/www/fbegin.inc:249 +#: usr/local/www/fbegin.inc:258 usr/local/www/fbegin.inc:250 +#: usr/local/www/fbegin.inc:250 +msgid "FreeBSD Handbook" +msgstr "" + +#: usr/local/www/fbegin.inc:376 usr/local/www/fbegin.inc:394 +#: usr/local/www/fbegin.inc:340 usr/local/www/fbegin.inc:332 +#: usr/local/www/fbegin.inc:332 +msgid "Help" +msgstr "" + +#: usr/local/www/fbegin.inc:425 usr/local/www/fbegin.inc:443 +msgid "Status of items on this page." +msgstr "" + +#: usr/local/www/fbegin.inc:428 usr/local/www/fbegin.inc:446 +msgid "Log entries for items on this page." +msgstr "" + +#: usr/local/www/fbegin.inc:431 usr/local/www/fbegin.inc:449 +msgid "Help for items on this page." +msgstr "" + +#: usr/local/www/fbegin.inc:441 usr/local/www/fbegin.inc:459 +#: usr/local/www/fbegin.inc:429 usr/local/www/fbegin.inc:421 +#: usr/local/www/fbegin.inc:421 +msgid "" +"Packages are currently being reinstalled in the background.

    Do not make " +"changes in the GUI until this is complete." +msgstr "" + +#: usr/local/www/status_queues.php:98 usr/local/www/status_queues.php:101 +#: usr/local/www/status_queues.php:109 usr/local/www/status_queues.php:109 +msgid "Traffic shaper" +msgstr "" + +#: usr/local/www/status_queues.php:107 usr/local/www/status_queues.php:110 +#: usr/local/www/status_queues.php:111 usr/local/www/status_queues.php:117 +#: usr/local/www/status_queues.php:117 +msgid "Traffic shaping is not configured." +msgstr "" + +#: usr/local/www/status_queues.php:136 usr/local/www/status_queues.php:143 +#: usr/local/www/status_queues.php:144 usr/local/www/status_queues.php:149 +#: usr/local/www/status_queues.php:149 +msgid "Statistics" +msgstr "" + +#: usr/local/www/status_queues.php:158 usr/local/www/status_queues.php:165 +#: usr/local/www/status_queues.php:166 usr/local/www/status_queues.php:223 +#: usr/local/www/status_queues.php:224 usr/local/www/status_queues.php:224 +msgid "Loading" +msgstr "" + +#: usr/local/www/status_queues.php:173 usr/local/www/status_queues.php:181 +#: usr/local/www/status_queues.php:182 usr/local/www/status_queues.php:164 +#: usr/local/www/status_queues.php:164 +msgid "Queue graphs take 5 seconds to sample data" +msgstr "" + +#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182 +#: usr/local/www/status_queues.php:183 usr/local/www/status_queues.php:165 +#: usr/local/www/status_queues.php:165 +msgid "You can configure the Traffic Shaper" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:211 +#: usr/local/www/status_rrd_graph_settings.php:59 +#: usr/local/www/status_rrd_graph.php:174 +#: usr/local/www/status_rrd_graph.php:179 +#: usr/local/www/status_rrd_graph.php:179 +#: usr/local/www/status_rrd_graph_settings.php:59 +msgid "Inverse" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:212 +#: usr/local/www/status_rrd_graph_settings.php:60 +#: usr/local/www/status_rrd_graph.php:175 +#: usr/local/www/status_rrd_graph.php:180 +#: usr/local/www/status_rrd_graph.php:180 +#: usr/local/www/status_rrd_graph_settings.php:60 +msgid "Absolute" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:61 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph_settings.php:61 +msgid "Absolute Timespans" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:62 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph_settings.php:62 +msgid "Current Period" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:63 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph_settings.php:63 +msgid "Previous Period" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:331 +#: usr/local/www/status_rrd_graph_settings.php:54 +#: usr/local/www/status_rrd_graph_settings.php:130 +#: usr/local/www/status_rrd_graph_settings.php:131 +#: usr/local/www/status_rrd_graph.php:379 +#: usr/local/www/status_rrd_graph.php:404 +#: usr/local/www/status_rrd_graph.php:404 +#: usr/local/www/status_rrd_graph_settings.php:54 +#: usr/local/www/status_rrd_graph_settings.php:131 +msgid "Traffic" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:333 +#: usr/local/www/status_rrd_graph_settings.php:55 +#: usr/local/www/status_rrd_graph_settings.php:132 +#: usr/local/www/status_rrd_graph_settings.php:133 +#: usr/local/www/status_rrd_graph.php:381 +#: usr/local/www/status_rrd_graph.php:406 +#: usr/local/www/status_rrd_graph.php:406 +#: usr/local/www/status_rrd_graph_settings.php:55 +#: usr/local/www/status_rrd_graph_settings.php:133 +msgid "Packets" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:335 +#: usr/local/www/status_rrd_graph_settings.php:56 +#: usr/local/www/status_rrd_graph_settings.php:134 +#: usr/local/www/status_rrd_graph_settings.php:135 +#: usr/local/www/status_rrd_graph.php:383 +#: usr/local/www/status_rrd_graph.php:408 +#: usr/local/www/status_rrd_graph.php:408 +#: usr/local/www/status_rrd_graph_settings.php:56 +#: usr/local/www/status_rrd_graph_settings.php:135 +msgid "Quality" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:340 +#: usr/local/www/status_rrd_graph_settings.php:139 +#: usr/local/www/status_rrd_graph_settings.php:140 +#: usr/local/www/status_rrd_graph.php:388 +#: usr/local/www/status_rrd_graph.php:413 +#: usr/local/www/status_rrd_graph.php:413 +#: usr/local/www/status_rrd_graph_settings.php:140 +msgid "QueueDrops" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:348 +#: usr/local/www/status_rrd_graph_settings.php:147 +#: usr/local/www/status_rrd_graph_settings.php:148 +#: usr/local/www/status_rrd_graph.php:396 +#: usr/local/www/status_rrd_graph.php:421 +#: usr/local/www/status_rrd_graph.php:421 +#: usr/local/www/status_rrd_graph_settings.php:148 +msgid "Cellular" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:371 +#: usr/local/www/status_rrd_graph.php:419 +#: usr/local/www/status_rrd_graph.php:451 +#: usr/local/www/status_rrd_graph.php:451 +msgid "" +"Note: Change of color and/or style may not take effect until the next refresh" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:375 +#: usr/local/www/status_rrd_graph.php:423 +#: usr/local/www/status_rrd_graph.php:455 +#: usr/local/www/status_rrd_graph.php:455 +msgid "Graphs:" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:432 +#: usr/local/www/status_rrd_graph.php:480 +#: usr/local/www/status_rrd_graph.php:515 +#: usr/local/www/status_rrd_graph.php:515 +msgid "Style:" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:446 +#: usr/local/www/status_rrd_graph.php:494 +#: usr/local/www/status_rrd_graph.php:529 +#: usr/local/www/status_rrd_graph.php:529 +msgid "Period:" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:461 +#: usr/local/www/status_rrd_graph.php:513 +#: usr/local/www/status_rrd_graph.php:548 +#: usr/local/www/status_rrd_graph.php:548 +msgid "Start:" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:463 +#: usr/local/www/status_rrd_graph.php:515 +#: usr/local/www/status_rrd_graph.php:550 +#: usr/local/www/status_rrd_graph.php:550 +msgid "End:" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:465 +#: usr/local/www/status_rrd_graph.php:517 +#: usr/local/www/status_rrd_graph.php:552 +#: usr/local/www/status_rrd_graph.php:552 +msgid "Go" +msgstr "" + +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/status_rrd_graph_img.php:43 +msgid "Image viewer" +msgstr "" + +#: usr/local/www/status_rrd_graph_img.php:216 +#: usr/local/www/status_rrd_graph_img.php:221 +#: usr/local/www/status_rrd_graph_img.php:221 +#, php-format +msgid "rrdcolors.inc.php for theme %s does not exist, using defaults!" +msgstr "" + +#: usr/local/www/status_rrd_graph_img.php:1095 +#: usr/local/www/status_rrd_graph_img.php:1088 +#: usr/local/www/status_rrd_graph_img.php:1093 +#: usr/local/www/status_rrd_graph_img.php:1093 +#, php-format +msgid "Sorry we do not have data to graph for %s" +msgstr "" + +#: usr/local/www/status_rrd_graph_img.php:1115 +#: usr/local/www/status_rrd_graph_img.php:1108 +#: usr/local/www/status_rrd_graph_img.php:1113 +#: usr/local/www/status_rrd_graph_img.php:1113 +#, php-format +msgid "Failed to create graph with error code %1$s, the error is: %2$s" +msgstr "" + +#: usr/local/www/status_rrd_graph_img.php:1117 +#: usr/local/www/status_rrd_graph_img.php:1124 +#: usr/local/www/status_rrd_graph_img.php:1110 +#: usr/local/www/status_rrd_graph_img.php:1115 +#: usr/local/www/status_rrd_graph_img.php:1122 +#: usr/local/www/status_rrd_graph_img.php:1115 +#: usr/local/www/status_rrd_graph_img.php:1122 +#, php-format +msgid "failed to create graph from %s%s, removing database" +msgstr "" + +#: usr/local/www/status_rrd_graph_settings.php:174 +#: usr/local/www/status_rrd_graph_settings.php:175 +#: usr/local/www/status_rrd_graph_settings.php:175 +msgid "Enables the RRD graphing backend." +msgstr "" + +#: usr/local/www/status_rrd_graph_settings.php:178 +#: usr/local/www/status_rrd_graph_settings.php:179 +#: usr/local/www/status_rrd_graph_settings.php:179 +msgid "Default category" +msgstr "" + +#: usr/local/www/status_rrd_graph_settings.php:189 +#: usr/local/www/status_rrd_graph_settings.php:190 +#: usr/local/www/status_rrd_graph_settings.php:190 +msgid "This selects default category." +msgstr "" + +#: usr/local/www/status_rrd_graph_settings.php:193 +#: usr/local/www/status_rrd_graph_settings.php:194 +#: usr/local/www/status_rrd_graph_settings.php:194 +msgid "Default style" +msgstr "" + +#: usr/local/www/status_rrd_graph_settings.php:204 +#: usr/local/www/status_rrd_graph_settings.php:205 +#: usr/local/www/status_rrd_graph_settings.php:205 +msgid "This selects the default style." +msgstr "" + +#: usr/local/www/status_rrd_graph_settings.php:208 +#: usr/local/www/status_rrd_graph_settings.php:209 +#: usr/local/www/status_rrd_graph_settings.php:209 +msgid "Default period" +msgstr "" + +#: usr/local/www/status_rrd_graph_settings.php:219 +#: usr/local/www/status_rrd_graph_settings.php:220 +#: usr/local/www/status_rrd_graph_settings.php:220 +msgid "This selects the default period." +msgstr "" + +#: usr/local/www/status_rrd_graph_settings.php:231 +#: usr/local/www/status_rrd_graph_settings.php:232 +#: usr/local/www/status_rrd_graph_settings.php:232 +msgid "Reset RRD Data" +msgstr "" + +#: usr/local/www/status_rrd_graph_settings.php:231 +#: usr/local/www/status_rrd_graph_settings.php:232 +#: usr/local/www/status_rrd_graph_settings.php:232 +msgid "" +"Do you really want to reset the RRD graphs? This will erase all graph data." +msgstr "" + +#: usr/local/www/status_rrd_graph_settings.php:237 +#: usr/local/www/status_rrd_graph_settings.php:238 +#: usr/local/www/status_rrd_graph_settings.php:238 +msgid "" +"Graphs will not be allowed to be recreated within a 1 minute interval, " +"please take this into account after changing the style." +msgstr "" + +#: usr/local/www/status_services.php:60 +#: usr/local/www/widgets/widgets/services_status.widget.php:54 +#: etc/inc/service-utils.inc:387 etc/inc/service-utils.inc:386 +#: etc/inc/service-utils.inc:403 etc/inc/service-utils.inc:403 +msgid "Not available." +msgstr "" + +#: usr/local/www/status_services.php:112 usr/local/www/status_services.php:100 +#: usr/local/www/status_services.php:98 etc/inc/service-utils.inc:657 +#: etc/inc/service-utils.inc:660 etc/inc/service-utils.inc:660 +#, php-format +msgid "%s has been restarted." +msgstr "" + +#: usr/local/www/status_services.php:159 usr/local/www/status_services.php:151 +#: usr/local/www/status_services.php:149 etc/inc/service-utils.inc:544 +#: etc/inc/service-utils.inc:547 etc/inc/service-utils.inc:547 +#, php-format +msgid "%s has been started." +msgstr "" + +#: usr/local/www/status_services.php:218 usr/local/www/status_services.php:214 +#: usr/local/www/status_services.php:212 etc/inc/service-utils.inc:605 +#: etc/inc/service-utils.inc:608 etc/inc/service-utils.inc:608 +#, php-format +msgid "%s has been stopped." +msgstr "" + +#: usr/local/www/status_services.php:269 +#: usr/local/www/widgets/widgets/services_status.widget.php:74 +#: etc/inc/service-utils.inc:247 etc/inc/service-utils.inc:246 +#: etc/inc/service-utils.inc:263 etc/inc/service-utils.inc:263 +msgid "NTP clock sync" +msgstr "" + +#: usr/local/www/status_services.php:302 +#: usr/local/www/widgets/widgets/services_status.widget.php:107 +#: etc/inc/service-utils.inc:285 etc/inc/service-utils.inc:284 +#: etc/inc/service-utils.inc:301 etc/inc/service-utils.inc:301 +msgid "DHCP Service" +msgstr "" + +#: usr/local/www/status_services.php:309 +#: usr/local/www/widgets/widgets/services_status.widget.php:114 +#: etc/inc/service-utils.inc:292 etc/inc/service-utils.inc:291 +#: etc/inc/service-utils.inc:308 etc/inc/service-utils.inc:308 +msgid "SNMP Service" +msgstr "" + +#: usr/local/www/status_services.php:323 +#: usr/local/www/widgets/widgets/services_status.widget.php:128 +#: etc/inc/service-utils.inc:306 etc/inc/service-utils.inc:305 +#: etc/inc/service-utils.inc:322 etc/inc/service-utils.inc:322 +msgid "UPnP Service" +msgstr "" + +#: usr/local/www/status_services.php:353 +#: usr/local/www/widgets/widgets/services_status.widget.php:158 +#: etc/inc/service-utils.inc:343 etc/inc/service-utils.inc:342 +#: etc/inc/service-utils.inc:359 etc/inc/service-utils.inc:359 +msgid "Server load balancing daemon" +msgstr "" + +#: usr/local/www/status_services.php:380 +#: usr/local/www/widgets/widgets/services_status.widget.php:210 +#: etc/inc/service-utils.inc:411 etc/inc/service-utils.inc:410 +#: etc/inc/service-utils.inc:427 etc/inc/service-utils.inc:430 +#: etc/inc/service-utils.inc:430 +msgid "Running" +msgstr "" + +#: usr/local/www/status_services.php:383 +#: usr/local/www/widgets/widgets/services_status.widget.php:213 +#: etc/inc/service-utils.inc:420 etc/inc/service-utils.inc:419 +#: etc/inc/service-utils.inc:437 etc/inc/service-utils.inc:440 +#: etc/inc/service-utils.inc:440 +msgid "Stopped" +msgstr "" + +#: usr/local/www/status_services.php:392 +#: usr/local/www/widgets/widgets/services_status.widget.php:222 +msgid "Restart Service" +msgstr "" + +#: usr/local/www/status_services.php:398 +#: usr/local/www/widgets/widgets/services_status.widget.php:228 +msgid "Stop Service" +msgstr "" + +#: usr/local/www/status_services.php:407 +#: usr/local/www/widgets/widgets/services_status.widget.php:237 +msgid "Start Service" +msgstr "" + +#: usr/local/www/status_services.php:412 +#: usr/local/www/widgets/widgets/services_status.widget.php:242 +#: usr/local/www/status_services.php:271 +#: usr/local/www/widgets/widgets/services_status.widget.php:83 +#: usr/local/www/status_services.php:269 usr/local/www/status_services.php:110 +#: usr/local/www/widgets/widgets/services_status.widget.php:84 +#: usr/local/www/status_services.php:110 +#: usr/local/www/widgets/widgets/services_status.widget.php:84 +msgid "No services found" +msgstr "" + +#: usr/local/www/status_upnp.php:48 usr/local/www/status_upnp.php:48 +msgid "Rules have been cleared and the daemon restarted" +msgstr "" + +#: usr/local/www/status_upnp.php:58 usr/local/www/status_upnp.php:58 +msgid "UPnP & NAT-PMP Status" +msgstr "" + +#: usr/local/www/status_upnp.php:67 usr/local/www/status_upnp.php:68 +#: usr/local/www/status_upnp.php:68 +msgid "UPnP is currently disabled." +msgstr "" + +#: usr/local/www/status_upnp.php:77 usr/local/www/status_upnp.php:78 +#: usr/local/www/status_upnp.php:78 +msgid "all currently connected sessions" +msgstr "" + +#: usr/local/www/diag_arp.php:261 usr/local/www/fbegin.inc:206 +#: usr/local/www/fbegin.inc:214 usr/local/www/fbegin.inc:205 +#: usr/local/www/diag_arp.php:261 usr/local/www/fbegin.inc:205 +msgid "ARP Table" +msgstr "" + +#: usr/local/www/diag_arp.php:271 usr/local/www/diag_ndp.php:113 +#: usr/local/www/diag_ndp.php:113 usr/local/www/diag_arp.php:271 +msgid "Loading, please wait..." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:158 +#: usr/local/www/services_dyndns_edit.php:92 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/services_dyndns_edit.php:220 +#: usr/local/www/services_dyndns_edit.php:93 +#: usr/local/www/services_dyndns_edit.php:222 +#: usr/local/www/services_dyndns_edit.php:93 +#: usr/local/www/services_dyndns_edit.php:222 +msgid "Service type" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:92 +#: usr/local/www/services_dyndns_edit.php:108 +#: usr/local/www/services_dyndns_edit.php:109 +#: usr/local/www/services_dyndns_edit.php:109 +msgid "The MX contains invalid characters." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:133 +#: usr/local/www/services_dyndns_edit.php:147 +#: usr/local/www/services_dyndns_edit.php:156 +#: usr/local/www/services_dyndns_edit.php:205 +#: usr/local/www/services_dyndns_edit.php:160 +#: usr/local/www/services_dyndns_edit.php:209 +#: usr/local/www/services_dyndns_edit.php:162 +#: usr/local/www/services_dyndns_edit.php:211 +#: usr/local/www/services_dyndns_edit.php:162 +#: usr/local/www/services_dyndns_edit.php:211 +msgid "Dynamic DNS client" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:154 +#: usr/local/www/services_rfc2136_edit.php:188 +#: usr/local/www/services_dyndns_edit.php:212 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/services_dyndns_edit.php:218 +#: usr/local/www/services_dyndns_edit.php:218 +#: usr/local/www/services_rfc2136_edit.php:188 +msgid "yes" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:172 +#: usr/local/www/services_rfc2136_edit.php:134 +#: usr/local/www/services_dyndns_edit.php:230 +#: usr/local/www/services_dyndns_edit.php:234 +#: usr/local/www/services_dyndns_edit.php:236 +#: usr/local/www/services_dyndns_edit.php:236 +#: usr/local/www/services_rfc2136_edit.php:134 +msgid "Interface to monitor" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:191 +#: usr/local/www/services_dyndns_edit.php:274 +#: usr/local/www/services_dyndns_edit.php:278 +#: usr/local/www/services_dyndns_edit.php:280 +#: usr/local/www/services_dyndns_edit.php:280 +msgid "Enter the complete host/domain name. example: myhost.dyndns.org" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:192 +#: usr/local/www/services_dyndns_edit.php:275 +#: usr/local/www/services_dyndns_edit.php:279 +#: usr/local/www/services_dyndns_edit.php:281 +#: usr/local/www/services_dyndns_edit.php:281 +msgid "For he.net tunnelbroker, enter your tunnel ID" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:197 +#: usr/local/www/services_dyndns_edit.php:280 +#: usr/local/www/services_dyndns_edit.php:284 +#: usr/local/www/services_dyndns_edit.php:286 +#: usr/local/www/services_dyndns_edit.php:286 +msgid "MX" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:201 +#: usr/local/www/services_dyndns_edit.php:284 +#: usr/local/www/services_dyndns_edit.php:288 +#: usr/local/www/services_dyndns_edit.php:290 +#: usr/local/www/services_dyndns_edit.php:290 +msgid "" +"Note: With DynDNS service you can only use a hostname, not an IP address." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:203 +#: usr/local/www/services_dyndns_edit.php:286 +#: usr/local/www/services_dyndns_edit.php:290 +#: usr/local/www/services_dyndns_edit.php:292 +#: usr/local/www/services_dyndns_edit.php:292 +msgid "" +"Set this option only if you need a special MX record. Not all services " +"support this." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:207 +#: usr/local/www/services_dyndns_edit.php:290 +#: usr/local/www/services_dyndns_edit.php:294 +#: usr/local/www/services_dyndns_edit.php:296 +#: usr/local/www/services_dyndns_edit.php:296 +msgid "Wildcards" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/services_dyndns_edit.php:293 +#: usr/local/www/services_dyndns_edit.php:297 +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:305 +msgid "Enable " +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/services_dyndns_edit.php:293 +#: usr/local/www/services_dyndns_edit.php:297 +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:299 +msgid "Wildcard" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:216 +msgid "Username is required for all types except Namecheap and FreeDNS." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:224 +#: usr/local/www/services_dyndns_edit.php:309 +#: usr/local/www/services_dyndns_edit.php:313 +#: usr/local/www/services_dyndns_edit.php:321 +#: usr/local/www/services_dyndns_edit.php:321 +msgid "" +"FreeDNS (freedns.afraid.org): Enter your \"Authentication Token\" provided " +"by FreeDNS." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:246 +#: usr/local/www/services_dyndns_edit.php:377 +#: usr/local/www/services_dyndns_edit.php:381 +#: usr/local/www/services_dyndns_edit.php:389 +#: usr/local/www/services_dyndns_edit.php:389 +#, php-format +msgid "" +"You must configure a DNS server in %sSystem:\n" +" General setup%s or allow the DNS server list to be " +"overridden\n" +" by DHCP/PPP on WAN for dynamic DNS updates to work." +msgstr "" + +#: usr/local/www/services_igmpproxy.php:80 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/services_igmpproxy.php:80 +msgid "IGMP Proxy" +msgstr "" + +#: usr/local/www/services_igmpproxy.php:90 +#: usr/local/www/services_igmpproxy.php:90 +msgid "The IGMP entry list has been changed" +msgstr "" + +#: usr/local/www/services_igmpproxy.php:103 +#: usr/local/www/services_igmpproxy.php:146 +#: usr/local/www/services_igmpproxy.php:103 +#: usr/local/www/services_igmpproxy.php:146 +msgid "add a new igmpentry" +msgstr "" + +#: usr/local/www/services_igmpproxy.php:133 +#: usr/local/www/services_igmpproxy.php:133 +msgid "edit igmpentry" +msgstr "" + +#: usr/local/www/services_igmpproxy.php:134 +#: usr/local/www/services_igmpproxy.php:134 +msgid "" +"Do you really want to delete this igmpentry? All elements that still use it " +"will become invalid (e.g. filter rules)!" +msgstr "" + +#: usr/local/www/services_igmpproxy.php:134 +#: usr/local/www/services_igmpproxy.php:134 +msgid "delete igmpentry" +msgstr "" + +#: usr/local/www/services_igmpproxy.php:161 +#: usr/local/www/services_igmpproxy.php:161 +msgid "" +"Please add the interface for upstream, the allowed subnets, and the " +"downstream interfaces you would like the proxy to allow. Only one 'upstream' " +"interface can be configured." +msgstr "" + +#: usr/local/www/services_igmpproxy_edit.php:79 +#: usr/local/www/services_igmpproxy_edit.php:79 +msgid "Only one 'upstream' interface can be configured." +msgstr "" + +#: usr/local/www/services_igmpproxy_edit.php:158 +#: usr/local/www/services_igmpproxy_edit.php:160 +#: usr/local/www/services_igmpproxy_edit.php:160 +msgid "IGMP Proxy Edit" +msgstr "" + +#: usr/local/www/services_igmpproxy_edit.php:188 +#: usr/local/www/services_igmpproxy_edit.php:190 +#: usr/local/www/services_igmpproxy_edit.php:190 +msgid "Upstream Interface" +msgstr "" + +#: usr/local/www/services_igmpproxy_edit.php:189 +#: usr/local/www/services_igmpproxy_edit.php:191 +#: usr/local/www/services_igmpproxy_edit.php:191 +msgid "Downstream Interface" +msgstr "" + +#: usr/local/www/services_igmpproxy_edit.php:193 +#: usr/local/www/services_igmpproxy_edit.php:195 +#: usr/local/www/services_igmpproxy_edit.php:195 +msgid "" +"The upstream network interface is the outgoing interface which is " +"responsible for communicating to available multicast data sources. There can " +"only be one upstream interface." +msgstr "" + +#: usr/local/www/services_igmpproxy_edit.php:199 +#: usr/local/www/services_igmpproxy_edit.php:201 +#: usr/local/www/services_igmpproxy_edit.php:201 +msgid "Downstream" +msgstr "" + +#: usr/local/www/services_igmpproxy_edit.php:199 +#: usr/local/www/services_igmpproxy_edit.php:201 +#: usr/local/www/services_igmpproxy_edit.php:201 +msgid "" +"network interfaces are the distribution interfaces to the destination " +"networks, where multicast clients can join groups and receive multicast " +"data. One or more downstream interfaces must be configured." +msgstr "" + +#: usr/local/www/services_igmpproxy_edit.php:206 +#: usr/local/www/services_igmpproxy_edit.php:208 +#: usr/local/www/services_igmpproxy_edit.php:208 +msgid "Threshold" +msgstr "" + +#: usr/local/www/services_igmpproxy_edit.php:211 +#: usr/local/www/services_igmpproxy_edit.php:213 +#: usr/local/www/services_igmpproxy_edit.php:213 +msgid "" +"Defines the TTL threshold for the network interface. Packets with a " +"lower TTL than the threshold value will be ignored. This setting is " +"optional, and by default the threshold is 1." +msgstr "" + +#: usr/local/www/services_igmpproxy_edit.php:218 +#: usr/local/www/services_igmpproxy_edit.php:220 +#: usr/local/www/services_igmpproxy_edit.php:220 +msgid "Network (s)" +msgstr "" + +#: usr/local/www/services_rfc2136.php:55 usr/local/www/services_rfc2136.php:55 +msgid "RFC 2136 clients" +msgstr "" + +#: usr/local/www/services_rfc2136.php:99 +#: usr/local/www/vpn_openvpn_client.php:894 +#: usr/local/www/vpn_openvpn_client.php:899 +#: usr/local/www/vpn_openvpn_client.php:952 +#: usr/local/www/services_rfc2136.php:118 +#: usr/local/www/vpn_openvpn_client.php:971 +#: usr/local/www/services_rfc2136.php:118 +#: usr/local/www/vpn_openvpn_client.php:971 +msgid "Do you really want to delete this client?" +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:153 +#: usr/local/www/services_dyndns_edit.php:348 +#: usr/local/www/services_dyndns_edit.php:352 +#: usr/local/www/services_dyndns_edit.php:360 +#: usr/local/www/services_dyndns_edit.php:360 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:153 +msgid "TTL" +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:159 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:159 +msgid "Key name" +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:76 +#: usr/local/www/services_rfc2136_edit.php:76 +msgid "The DNS update host name contains invalid characters." +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:78 +#: usr/local/www/services_rfc2136_edit.php:78 +msgid "The DNS update TTL must be an integer." +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:80 +#: usr/local/www/services_rfc2136_edit.php:80 +msgid "The DNS update key name contains invalid characters." +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:100 +#: usr/local/www/services_rfc2136_edit.php:100 +msgid "New/Edited RFC2136 dnsupdate entry was posted." +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/services_rfc2136_edit.php:123 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/services_rfc2136_edit.php:123 +msgid "RFC 2136 client" +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:163 +#: usr/local/www/services_rfc2136_edit.php:163 +msgid "This must match the setting on the DNS server." +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:166 +#: usr/local/www/services_rfc2136_edit.php:166 +msgid "Key type" +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:168 +#: usr/local/www/services_captiveportal_zones.php:52 +#: usr/local/www/services_captiveportal_zones.php:53 +#: usr/local/www/services_captiveportal_zones.php:53 +#: usr/local/www/services_rfc2136_edit.php:168 +msgid "Zone" +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:170 +#: usr/local/www/services_rfc2136_edit.php:170 +msgid " User" +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:177 +#: usr/local/www/services_rfc2136_edit.php:177 +msgid "Paste an HMAC-MD5 key here." +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:189 +#: usr/local/www/services_rfc2136_edit.php:189 +msgid "Use TCP instead of UDP" +msgstr "" + +#: usr/local/www/services_rfc2136_edit.php:210 +#: usr/local/www/services_rfc2136_edit.php:210 +#, php-format +msgid "" +"You must configure a DNS server in %sSystem: General setup %sor allow the " +"DNS server list to be overridden by DHCP/PPP on WAN for dynamic DNS updates " +"to work." +msgstr "" + +#: usr/local/www/status_captiveportal_test.php:82 +#: usr/local/www/status_captiveportal_test.php:83 +#: usr/local/www/status_captiveportal_expire.php:82 +#: usr/local/www/status_captiveportal_test.php:84 +#: usr/local/www/status_captiveportal_expire.php:82 +#: usr/local/www/status_captiveportal_test.php:84 +msgid "Voucher(s)" +msgstr "" + +#: usr/local/www/status_captiveportal_test.php:86 +#: usr/local/www/status_captiveportal_test.php:87 +#: usr/local/www/status_captiveportal_test.php:88 +#: usr/local/www/status_captiveportal_test.php:88 +msgid "" +"Enter multiple vouchers separated by space or newline. The remaining time, " +"if valid, will be shown for each voucher" +msgstr "" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:85 +#: usr/local/www/status_captiveportal_voucher_rolls.php:86 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +msgid "Roll#" +msgstr "" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:87 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +msgid "# of Tickets" +msgstr "" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +#: usr/local/www/status_captiveportal_voucher_rolls.php:92 +#: usr/local/www/status_captiveportal_voucher_rolls.php:92 +msgid "used" +msgstr "" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +#: usr/local/www/status_captiveportal_voucher_rolls.php:93 +#: usr/local/www/status_captiveportal_voucher_rolls.php:93 +msgid "active" +msgstr "" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +#: usr/local/www/status_captiveportal_voucher_rolls.php:92 +#: usr/local/www/status_captiveportal_voucher_rolls.php:94 +#: usr/local/www/status_captiveportal_voucher_rolls.php:94 +msgid "ready" +msgstr "" + +#: usr/local/www/status_captiveportal_vouchers.php:115 +#: usr/local/www/status_captiveportal_vouchers.php:116 +#: usr/local/www/status_captiveportal_vouchers.php:121 +#: usr/local/www/status_captiveportal_vouchers.php:121 +msgid "Voucher" +msgstr "" + +#: usr/local/www/status_captiveportal_vouchers.php:117 +#: usr/local/www/status_captiveportal_vouchers.php:118 +#: usr/local/www/status_captiveportal_vouchers.php:123 +#: usr/local/www/status_captiveportal_vouchers.php:123 +msgid "Activated at" +msgstr "" + +#: usr/local/www/status_captiveportal_vouchers.php:118 +#: usr/local/www/status_captiveportal_vouchers.php:119 +#: usr/local/www/status_captiveportal_vouchers.php:124 +#: usr/local/www/status_captiveportal_vouchers.php:124 +msgid "Expires in" +msgstr "" + +#: usr/local/www/status_captiveportal_vouchers.php:119 +#: usr/local/www/status_captiveportal_vouchers.php:120 +#: usr/local/www/status_captiveportal_vouchers.php:125 +#: usr/local/www/status_captiveportal_vouchers.php:125 +msgid "Expires at" +msgstr "" + +#: usr/local/www/status_captiveportal_vouchers.php:127 +#: usr/local/www/status_captiveportal_vouchers.php:128 +#: usr/local/www/status_captiveportal_vouchers.php:133 +#: usr/local/www/status_captiveportal_vouchers.php:133 +msgid "min" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:48 +#: usr/local/www/status_dhcp_leases.php:49 +#: usr/local/www/status_dhcp_leases.php:49 +msgid "DHCP leases" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:287 +#: usr/local/www/status_dhcpv6_leases.php:328 +#: usr/local/www/status_dhcpv6_leases.php:372 +#: usr/local/www/status_dhcp_leases.php:308 +#: usr/local/www/status_dhcpv6_leases.php:373 +#: usr/local/www/status_dhcp_leases.php:310 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:310 +msgid "Failover Group" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:288 +#: usr/local/www/status_dhcpv6_leases.php:329 +#: usr/local/www/status_dhcpv6_leases.php:373 +#: usr/local/www/status_dhcp_leases.php:309 +#: usr/local/www/status_dhcpv6_leases.php:374 +#: usr/local/www/status_dhcp_leases.php:311 +#: usr/local/www/status_dhcpv6_leases.php:377 +#: usr/local/www/status_dhcpv6_leases.php:377 +#: usr/local/www/status_dhcp_leases.php:311 +msgid "My State" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:289 +#: usr/local/www/status_dhcp_leases.php:291 +#: usr/local/www/status_dhcpv6_leases.php:330 +#: usr/local/www/status_dhcpv6_leases.php:332 +#: usr/local/www/status_dhcpv6_leases.php:374 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:310 +#: usr/local/www/status_dhcp_leases.php:312 +#: usr/local/www/status_dhcpv6_leases.php:375 +#: usr/local/www/status_dhcpv6_leases.php:377 +#: usr/local/www/status_dhcp_leases.php:314 +#: usr/local/www/status_dhcpv6_leases.php:378 +#: usr/local/www/status_dhcpv6_leases.php:380 +#: usr/local/www/status_dhcpv6_leases.php:378 +#: usr/local/www/status_dhcpv6_leases.php:380 +#: usr/local/www/status_dhcp_leases.php:312 +#: usr/local/www/status_dhcp_leases.php:314 +msgid "Since" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:290 +#: usr/local/www/status_dhcpv6_leases.php:331 +#: usr/local/www/status_dhcpv6_leases.php:375 +#: usr/local/www/status_dhcp_leases.php:311 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:313 +#: usr/local/www/status_dhcpv6_leases.php:379 +#: usr/local/www/status_dhcpv6_leases.php:379 +#: usr/local/www/status_dhcp_leases.php:313 +msgid "Peer State" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:322 +#: usr/local/www/status_dhcpv6_leases.php:364 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:485 +#: usr/local/www/status_dhcp_leases.php:343 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcpv6_leases.php:486 +#: usr/local/www/status_dhcp_leases.php:345 +#: usr/local/www/status_dhcpv6_leases.php:412 +#: usr/local/www/status_dhcpv6_leases.php:489 +#: usr/local/www/status_dhcpv6_leases.php:412 +#: usr/local/www/status_dhcpv6_leases.php:489 +#: usr/local/www/status_dhcp_leases.php:345 +msgid "End" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:323 +#: usr/local/www/status_gateway_groups.php:132 +#: usr/local/www/status_gateways.php:127 usr/local/www/status_gateways.php:131 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:57 +#: usr/local/www/status_dhcpv6_leases.php:365 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcp_leases.php:344 +#: usr/local/www/status_dhcpv6_leases.php:410 +#: usr/local/www/status_gateways.php:128 usr/local/www/status_gateways.php:132 +#: usr/local/www/status_dhcp_leases.php:346 +#: usr/local/www/status_gateway_groups.php:133 +#: usr/local/www/status_dhcpv6_leases.php:413 +#: usr/local/www/status_dhcpv6_leases.php:413 +#: usr/local/www/status_dhcp_leases.php:346 +#: usr/local/www/status_gateway_groups.php:133 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:57 +#: usr/local/www/status_gateways.php:128 usr/local/www/status_gateways.php:132 +msgid "Online" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:324 +#: usr/local/www/status_dhcpv6_leases.php:366 +#: usr/local/www/status_dhcpv6_leases.php:410 +#: usr/local/www/status_dhcp_leases.php:345 +#: usr/local/www/status_dhcpv6_leases.php:411 +#: usr/local/www/status_dhcp_leases.php:347 +#: usr/local/www/status_dhcpv6_leases.php:414 +#: usr/local/www/status_dhcpv6_leases.php:414 +#: usr/local/www/status_dhcp_leases.php:347 +msgid "Lease Type" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:368 +#: usr/local/www/status_dhcp_leases.php:389 +#: usr/local/www/status_dhcp_leases.php:393 +#: usr/local/www/status_dhcp_leases.php:393 +msgid "send Wake on LAN packet to this MAC address" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:390 +#: usr/local/www/status_dhcpv6_leases.php:417 +#: usr/local/www/status_dhcpv6_leases.php:461 +#: usr/local/www/status_dhcp_leases.php:411 +#: usr/local/www/status_dhcpv6_leases.php:462 +#: usr/local/www/status_dhcp_leases.php:415 +#: usr/local/www/status_dhcpv6_leases.php:465 +#: usr/local/www/status_dhcpv6_leases.php:465 +#: usr/local/www/status_dhcp_leases.php:415 +msgid "add a static mapping for this MAC address" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:397 +#: usr/local/www/status_dhcp_leases.php:418 +#: usr/local/www/status_dhcp_leases.php:422 +#: usr/local/www/status_dhcp_leases.php:422 +msgid "add a Wake on LAN mapping for this MAC address" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:402 +#: usr/local/www/status_dhcpv6_leases.php:426 +#: usr/local/www/status_dhcpv6_leases.php:470 +#: usr/local/www/status_dhcp_leases.php:423 +#: usr/local/www/status_dhcpv6_leases.php:471 +#: usr/local/www/status_dhcp_leases.php:427 +#: usr/local/www/status_dhcpv6_leases.php:474 +#: usr/local/www/status_dhcpv6_leases.php:474 +#: usr/local/www/status_dhcp_leases.php:427 +msgid "delete this DHCP lease" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:415 +#: usr/local/www/status_dhcpv6_leases.php:439 +#: usr/local/www/status_dhcpv6_leases.php:540 +#: usr/local/www/status_dhcp_leases.php:436 +#: usr/local/www/status_dhcpv6_leases.php:541 +#: usr/local/www/status_dhcp_leases.php:440 +#: usr/local/www/status_dhcpv6_leases.php:544 +#: usr/local/www/status_dhcpv6_leases.php:544 +#: usr/local/www/status_dhcp_leases.php:440 +msgid "Show active and static leases only" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:418 +#: usr/local/www/status_dhcpv6_leases.php:442 +#: usr/local/www/status_dhcpv6_leases.php:543 +#: usr/local/www/status_dhcp_leases.php:439 +#: usr/local/www/status_dhcpv6_leases.php:544 +#: usr/local/www/status_dhcp_leases.php:443 +#: usr/local/www/status_dhcpv6_leases.php:547 +#: usr/local/www/status_dhcpv6_leases.php:547 +#: usr/local/www/status_dhcp_leases.php:443 +msgid "Show all configured leases" +msgstr "" + +#: usr/local/www/status_dhcp_leases.php:422 +#: usr/local/www/status_dhcpv6_leases.php:446 +#: usr/local/www/status_dhcpv6_leases.php:547 +#: usr/local/www/status_dhcp_leases.php:443 +#: usr/local/www/status_dhcpv6_leases.php:548 +#: usr/local/www/status_dhcp_leases.php:447 +#: usr/local/www/status_dhcpv6_leases.php:551 +#: usr/local/www/status_dhcpv6_leases.php:551 +#: usr/local/www/status_dhcp_leases.php:447 +msgid "No leases file found. Is the DHCP server active" +msgstr "" + +#: usr/local/www/status_gateway_groups.php:100 +#: usr/local/www/status_gateway_groups.php:101 +#: usr/local/www/status_gateway_groups.php:101 +#, php-format +msgid "Tier %s" +msgstr "" + +#: usr/local/www/status_gateway_groups.php:126 +#: usr/local/www/status_gateways.php:121 usr/local/www/status_gateways.php:122 +#: usr/local/www/status_gateway_groups.php:127 +#: usr/local/www/status_gateway_groups.php:127 +#: usr/local/www/status_gateways.php:122 +msgid "Warning, Packetloss" +msgstr "" + +#: usr/local/www/status_gateway_groups.php:129 +#: usr/local/www/status_gateways.php:124 usr/local/www/status_gateways.php:125 +#: usr/local/www/status_gateway_groups.php:130 +#: usr/local/www/status_gateway_groups.php:130 +#: usr/local/www/status_gateways.php:125 +msgid "Warning, Latency" +msgstr "" + +#: usr/local/www/status_gateway_groups.php:135 +#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108 +#: usr/local/www/status_gateways.php:134 +#: usr/local/www/widgets/widgets/gateways.widget.php:69 +#: usr/local/www/widgets/widgets/gateways.widget.php:77 +#: usr/local/www/widgets/widgets/gateways.widget.php:98 +#: usr/local/www/status_gateway_groups.php:136 +#: usr/local/www/status_gateway_groups.php:136 +msgid "Gathering data" +msgstr "" + +#: usr/local/www/status_gateways.php:75 usr/local/www/status_gateways.php:76 +#: usr/local/www/status_gateways.php:76 +msgid "RTT" +msgstr "" + +#: usr/local/www/status_gateways.php:76 usr/local/www/status_gateways.php:77 +#: usr/local/www/status_gateways.php:77 +msgid "Loss" +msgstr "" + +#: usr/local/www/status_gateways.php:144 +#, php-format +msgid "Last check %s" +msgstr "" + +#: usr/local/www/status_graph_cpu.php:41 usr/local/www/status_graph_cpu.php:41 +msgid "CPU load" +msgstr "" + +#: usr/local/www/status_graph_cpu.php:46 usr/local/www/status_graph_cpu.php:46 +msgid "Status: CPU Graph" +msgstr "" + +#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph_cpu.php:53 +msgid "if you can't see the graph, you may have to install the" +msgstr "" + +#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph_cpu.php:53 +msgid "Adobe SVG viewer" +msgstr "" + +#: usr/local/www/status_lb_vs.php:78 usr/local/www/vpn_ipsec_phase2.php:427 +#: usr/local/www/vpn_ipsec_phase2.php:469 +#: usr/local/www/vpn_ipsec_phase2.php:475 +#: usr/local/www/vpn_ipsec_phase2.php:453 +#: usr/local/www/vpn_ipsec_phase2.php:495 +#: usr/local/www/vpn_ipsec_phase2.php:501 +#: usr/local/www/vpn_ipsec_phase2.php:519 +#: usr/local/www/vpn_ipsec_phase2.php:555 +#: usr/local/www/vpn_ipsec_phase2.php:597 +#: usr/local/www/vpn_ipsec_phase2.php:603 +#: usr/local/www/vpn_ipsec_phase2.php:541 +#: usr/local/www/vpn_ipsec_phase2.php:576 +#: usr/local/www/vpn_ipsec_phase2.php:618 +#: usr/local/www/vpn_ipsec_phase2.php:624 usr/local/www/status_lb_vs.php:78 +#: usr/local/www/vpn_ipsec_phase2.php:541 +#: usr/local/www/vpn_ipsec_phase2.php:576 +#: usr/local/www/vpn_ipsec_phase2.php:618 +#: usr/local/www/vpn_ipsec_phase2.php:624 +msgid "Address" +msgstr "" + +#: usr/local/www/status_openvpn.php:145 usr/local/www/status_openvpn.php:146 +#: usr/local/www/status_openvpn.php:147 usr/local/www/status_openvpn.php:147 +msgid "Client connections" +msgstr "" + +#: usr/local/www/status_openvpn.php:152 usr/local/www/system_camanager.php:534 +#: usr/local/www/system_certmanager.php:627 +#: usr/local/www/system_certmanager.php:730 +#: usr/local/www/vpn_openvpn_csc.php:673 +#: usr/local/www/system_certmanager.php:743 +#: usr/local/www/system_certmanager.php:896 +#: usr/local/www/system_camanager.php:535 usr/local/www/status_openvpn.php:153 +#: usr/local/www/vpn_openvpn_csc.php:672 +#: usr/local/www/system_camanager.php:559 usr/local/www/status_openvpn.php:214 +#: usr/local/www/system_certmanager.php:768 +#: usr/local/www/system_certmanager.php:938 +#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:224 +#: usr/local/www/system_certmanager.php:769 +#: usr/local/www/system_certmanager.php:942 +#: usr/local/www/system_camanager.php:559 usr/local/www/status_openvpn.php:154 +#: usr/local/www/status_openvpn.php:224 usr/local/www/vpn_openvpn_csc.php:672 +#: usr/local/www/system_certmanager.php:769 +#: usr/local/www/system_certmanager.php:942 +msgid "Common Name" +msgstr "" + +#: usr/local/www/status_openvpn.php:153 usr/local/www/status_openvpn.php:154 +#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:155 +#: usr/local/www/status_openvpn.php:225 usr/local/www/status_openvpn.php:155 +#: usr/local/www/status_openvpn.php:225 +msgid "Real Address" +msgstr "" + +#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:155 +#: usr/local/www/status_openvpn.php:156 usr/local/www/status_openvpn.php:156 +msgid "Virtual Address" +msgstr "" + +#: usr/local/www/status_openvpn.php:155 usr/local/www/status_openvpn.php:213 +#: usr/local/www/status_openvpn.php:264 usr/local/www/status_openvpn.php:156 +#: usr/local/www/status_openvpn.php:216 usr/local/www/status_openvpn.php:267 +#: usr/local/www/status_openvpn.php:315 usr/local/www/status_openvpn.php:157 +#: usr/local/www/status_openvpn.php:274 usr/local/www/status_openvpn.php:335 +#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:274 +#: usr/local/www/status_openvpn.php:335 +msgid "Connected Since" +msgstr "" + +#: usr/local/www/status_openvpn.php:156 usr/local/www/status_openvpn.php:216 +#: usr/local/www/status_openvpn.php:267 usr/local/www/status_openvpn.php:157 +#: usr/local/www/status_openvpn.php:219 usr/local/www/status_openvpn.php:270 +#: usr/local/www/status_openvpn.php:318 usr/local/www/status_openvpn.php:158 +#: usr/local/www/status_openvpn.php:277 usr/local/www/status_openvpn.php:338 +#: usr/local/www/status_openvpn.php:158 usr/local/www/status_openvpn.php:277 +#: usr/local/www/status_openvpn.php:338 +msgid "Bytes Sent" +msgstr "" + +#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:217 +#: usr/local/www/status_openvpn.php:268 usr/local/www/status_openvpn.php:158 +#: usr/local/www/status_openvpn.php:220 usr/local/www/status_openvpn.php:271 +#: usr/local/www/status_openvpn.php:319 usr/local/www/status_openvpn.php:159 +#: usr/local/www/status_openvpn.php:159 +msgid "Bytes Received" +msgstr "" + +#: usr/local/www/status_openvpn.php:184 usr/local/www/status_openvpn.php:185 +#: usr/local/www/status_openvpn.php:186 usr/local/www/status_openvpn.php:186 +msgid "Kill client connection from" +msgstr "" + +#: usr/local/www/status_openvpn.php:205 usr/local/www/status_openvpn.php:208 +#: usr/local/www/status_openvpn.php:256 usr/local/www/status_openvpn.php:266 +#: usr/local/www/status_openvpn.php:266 +msgid "Peer to Peer Server Instance Statistics" +msgstr "" + +#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265 +#: usr/local/www/status_openvpn.php:217 usr/local/www/status_openvpn.php:268 +#: usr/local/www/status_openvpn.php:316 usr/local/www/status_openvpn.php:275 +#: usr/local/www/status_openvpn.php:336 usr/local/www/status_openvpn.php:275 +#: usr/local/www/status_openvpn.php:336 +msgid "Virtual Addr" +msgstr "" + +#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266 +#: usr/local/www/status_openvpn.php:218 usr/local/www/status_openvpn.php:269 +#: usr/local/www/status_openvpn.php:317 usr/local/www/status_openvpn.php:276 +#: usr/local/www/status_openvpn.php:337 usr/local/www/status_openvpn.php:276 +#: usr/local/www/status_openvpn.php:337 +msgid "Remote Host" +msgstr "" + +#: usr/local/www/status_openvpn.php:256 usr/local/www/status_openvpn.php:259 +#: usr/local/www/status_openvpn.php:307 usr/local/www/status_openvpn.php:327 +#: usr/local/www/status_openvpn.php:327 +msgid "Client Instance Statistics" +msgstr "" + +#: usr/local/www/status_openvpn.php:304 usr/local/www/status_openvpn.php:307 +#: usr/local/www/status_openvpn.php:355 +msgid "" +"You need to bind each OpenVPN client to enable its management daemon: use " +"'Local port' setting in the OpenVPN client screen" +msgstr "" + +#: usr/local/www/status_openvpn.php:308 usr/local/www/status_openvpn.php:311 +#: usr/local/www/status_openvpn.php:359 usr/local/www/status_openvpn.php:389 +#: usr/local/www/status_openvpn.php:389 +msgid "No OpenVPN instance defined" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:87 +#: usr/local/www/system_advanced_admin.php:87 +msgid "You must specify a valid webConfigurator port number" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:91 +#: usr/local/www/system_advanced_admin.php:91 +msgid "Max Processes must be a number 1 or greater" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:97 +#: usr/local/www/system_advanced_admin.php:97 +#, php-format +msgid "Alternate hostname %s is not a valid hostname." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:102 +#: usr/local/www/services_dnsmasq.php:92 +#: usr/local/www/system_advanced_admin.php:102 +#: usr/local/www/services_dnsmasq.php:92 +msgid "You must specify a valid port number" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:232 +#: usr/local/www/system_advanced_admin.php:232 +#, php-format +msgid "One moment...redirecting to %s in 20 seconds." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:242 +#: usr/local/www/system_advanced_admin.php:242 +msgid "Advanced: Admin Access" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:274 +#: usr/local/www/system_advanced_firewall.php:215 +#: usr/local/www/system_advanced_misc.php:206 +#: usr/local/www/system_advanced_network.php:182 +#: usr/local/www/system_advanced_notifications.php:151 +#: usr/local/www/system_advanced_sysctl.php:147 +#: usr/local/www/system_advanced_firewall.php:229 +#: usr/local/www/system_advanced_notifications.php:160 +#: usr/local/www/system_advanced_misc.php:232 +#: usr/local/www/system_advanced_misc.php:251 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_firewall.php:258 +#: usr/local/www/system_advanced_misc.php:302 +#: usr/local/www/system_advanced_admin.php:274 +#: usr/local/www/system_advanced_misc.php:302 +#: usr/local/www/system_advanced_firewall.php:258 +#: usr/local/www/system_advanced_notifications.php:160 +#: usr/local/www/system_advanced_network.php:182 +#: usr/local/www/system_advanced_sysctl.php:147 +msgid "Admin Access" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:275 +#: usr/local/www/system_advanced_firewall.php:216 +#: usr/local/www/system_advanced_misc.php:207 +#: usr/local/www/system_advanced_network.php:183 +#: usr/local/www/system_advanced_notifications.php:152 +#: usr/local/www/system_advanced_sysctl.php:148 +#: usr/local/www/system_advanced_firewall.php:230 +#: usr/local/www/system_advanced_notifications.php:161 +#: usr/local/www/system_advanced_misc.php:233 +#: usr/local/www/system_advanced_misc.php:252 +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_firewall.php:259 +#: usr/local/www/system_advanced_misc.php:303 +#: usr/local/www/system_advanced_admin.php:275 +#: usr/local/www/system_advanced_misc.php:303 +#: usr/local/www/system_advanced_firewall.php:259 +#: usr/local/www/system_advanced_notifications.php:161 +#: usr/local/www/system_advanced_network.php:183 +#: usr/local/www/system_advanced_sysctl.php:148 +msgid "Firewall / NAT" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:276 +#: usr/local/www/system_advanced_firewall.php:217 +#: usr/local/www/system_advanced_misc.php:208 +#: usr/local/www/system_advanced_network.php:184 +#: usr/local/www/system_advanced_notifications.php:153 +#: usr/local/www/system_advanced_sysctl.php:149 +#: usr/local/www/system_advanced_firewall.php:231 +#: usr/local/www/system_advanced_notifications.php:162 +#: usr/local/www/system_advanced_misc.php:234 +#: usr/local/www/system_advanced_misc.php:253 +#: usr/local/www/system_advanced_misc.php:257 +#: usr/local/www/system_advanced_firewall.php:260 +#: usr/local/www/system_advanced_misc.php:304 +#: usr/local/www/system_advanced_admin.php:276 +#: usr/local/www/system_advanced_misc.php:304 +#: usr/local/www/system_advanced_firewall.php:260 +#: usr/local/www/system_advanced_notifications.php:162 +#: usr/local/www/system_advanced_network.php:184 +#: usr/local/www/system_advanced_sysctl.php:149 +msgid "Networking" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:277 +#: usr/local/www/system_advanced_firewall.php:218 +#: usr/local/www/system_advanced_misc.php:209 +#: usr/local/www/system_advanced_network.php:185 +#: usr/local/www/system_advanced_notifications.php:154 +#: usr/local/www/system_advanced_sysctl.php:150 +#: usr/local/www/system_advanced_firewall.php:232 +#: usr/local/www/system_advanced_notifications.php:163 +#: usr/local/www/system_advanced_misc.php:235 +#: usr/local/www/system_advanced_misc.php:254 +#: usr/local/www/system_advanced_misc.php:258 +#: usr/local/www/system_advanced_firewall.php:261 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_admin.php:277 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_firewall.php:261 +#: usr/local/www/system_advanced_notifications.php:163 +#: usr/local/www/system_advanced_network.php:185 +#: usr/local/www/system_advanced_sysctl.php:150 +msgid "Miscellaneous" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:278 +#: usr/local/www/system_advanced_firewall.php:219 +#: usr/local/www/system_advanced_misc.php:210 +#: usr/local/www/system_advanced_network.php:186 +#: usr/local/www/system_advanced_notifications.php:155 +#: usr/local/www/system_advanced_sysctl.php:151 +#: usr/local/www/system_advanced_firewall.php:233 +#: usr/local/www/system_advanced_notifications.php:164 +#: usr/local/www/system_advanced_misc.php:236 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_misc.php:259 +#: usr/local/www/system_advanced_firewall.php:262 +#: usr/local/www/system_advanced_misc.php:306 +#: usr/local/www/system_advanced_admin.php:278 +#: usr/local/www/system_advanced_misc.php:306 +#: usr/local/www/system_advanced_firewall.php:262 +#: usr/local/www/system_advanced_notifications.php:164 +#: usr/local/www/system_advanced_network.php:186 +#: usr/local/www/system_advanced_sysctl.php:151 +msgid "System Tunables" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:279 +#: usr/local/www/system_advanced_firewall.php:220 +#: usr/local/www/system_advanced_misc.php:211 +#: usr/local/www/system_advanced_network.php:187 +#: usr/local/www/system_advanced_notifications.php:156 +#: usr/local/www/system_advanced_sysctl.php:152 +#: usr/local/www/system_advanced_firewall.php:234 +#: usr/local/www/system_advanced_notifications.php:165 +#: usr/local/www/system_advanced_misc.php:237 +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_misc.php:260 +#: usr/local/www/system_advanced_firewall.php:263 +#: usr/local/www/system_advanced_misc.php:307 +#: usr/local/www/system_advanced_admin.php:279 +#: usr/local/www/system_advanced_misc.php:307 +#: usr/local/www/system_advanced_firewall.php:263 +#: usr/local/www/system_advanced_notifications.php:165 +#: usr/local/www/system_advanced_network.php:187 +#: usr/local/www/system_advanced_sysctl.php:152 +msgid "Notifications" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:297 +#: usr/local/www/system_advanced_admin.php:297 +msgid "webConfigurator" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:317 +#: usr/local/www/system_advanced_admin.php:317 +msgid "No Certificates have been defined. You must" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:318 +#: usr/local/www/system_advanced_admin.php:318 +msgid "Create or Import" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:319 +#: usr/local/www/system_advanced_admin.php:319 +msgid "a Certificate before SSL can be enabled." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:324 +#: usr/local/www/services_captiveportal.php:872 +#: usr/local/www/services_captiveportal.php:874 +#: usr/local/www/services_captiveportal.php:890 +#: usr/local/www/system_advanced_admin.php:324 +#: usr/local/www/services_captiveportal.php:890 +msgid "SSL Certificate" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:339 +#: usr/local/www/system_advanced_admin.php:339 +msgid "TCP port" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:344 +#: usr/local/www/system_advanced_admin.php:344 +msgid "" +"Enter a custom port number for the webConfigurator above if you want to " +"override the default (80 for HTTP, 443 for HTTPS). Changes will take effect " +"immediately after save." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:351 +#: usr/local/www/system_advanced_admin.php:351 +msgid "Max Processes" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:356 +#: usr/local/www/system_advanced_admin.php:356 +msgid "" +"Enter the number of webConfigurator processes you want to run. This defaults " +"to 2. Increasing this will allow more users/browsers to access the GUI " +"concurrently." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:363 +#: usr/local/www/system_advanced_admin.php:363 +msgid "WebGUI redirect" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:366 +#: usr/local/www/system_advanced_admin.php:366 +msgid "Disable webConfigurator redirect rule" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:368 +#: usr/local/www/system_advanced_admin.php:368 +msgid "" +"When this is unchecked, access to the webConfigurator is always permitted " +"even on port 80, regardless of the listening port configured. Check this box " +"to disable this automatically added redirect rule. " +msgstr "" + +#: usr/local/www/system_advanced_admin.php:375 +#: usr/local/www/system_advanced_admin.php:375 +msgid "WebGUI Login Autocomplete" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:378 +#: usr/local/www/system_advanced_admin.php:378 +msgid "Disable webConfigurator login autocomplete" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:380 +#: usr/local/www/system_advanced_admin.php:380 +msgid "" +"When this is unchecked, login credentials for the webConfigurator may be " +"saved by the browser. While convenient, some security standards require this " +"to be disabled. Check this box to disable autocomplete on the login form so " +"that browsers will not prompt to save credentials (NOTE: Some browsers do " +"not respect this option). " +msgstr "" + +#: usr/local/www/system_advanced_admin.php:387 +#: usr/local/www/system_advanced_admin.php:387 +msgid "WebGUI login messages" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:390 +#: usr/local/www/system_advanced_admin.php:390 +msgid "Disable logging of webConfigurator successful logins" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:392 +#: usr/local/www/system_advanced_admin.php:392 +msgid "" +"When this is checked, successful logins to the webConfigurator will not be " +"logged." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:398 +#: usr/local/www/system_advanced_admin.php:398 +msgid "Anti-lockout" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:407 +#: usr/local/www/system_advanced_admin.php:407 +msgid "Disable webConfigurator anti-lockout rule" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:409 +#: usr/local/www/system_advanced_admin.php:409 +#, php-format +msgid "" +"When this is unchecked, access to the webConfigurator on the %s interface is " +"always permitted, regardless of the user-defined firewall rule set. Check " +"this box to disable this automatically added rule, so access to the " +"webConfigurator is controlled by the user-defined firewall rules (ensure you " +"have a firewall rule in place that allows you in, or you will lock yourself " +"out!)" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:415 +#: usr/local/www/system_advanced_admin.php:415 +msgid "" +"Hint: the "Set interface(s) IP address" option in the console menu " +"resets this setting as well." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:419 +#: usr/local/www/system_advanced_admin.php:419 +msgid "DNS Rebind Check" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:422 +#: usr/local/www/system_advanced_admin.php:422 +msgid "Disable DNS Rebinding Checks" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:424 +#: usr/local/www/system_advanced_admin.php:424 +msgid "" +"When this is unchecked, your system is protected against DNS Rebinding attacks. This blocks " +"private IP responses from your configured DNS servers. Check this box to " +"disable this protection if it interferes with webConfigurator access or name " +"resolution in your environment. " +msgstr "" + +#: usr/local/www/system_advanced_admin.php:431 +#: usr/local/www/system_advanced_admin.php:431 +msgid "Alternate Hostnames" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:435 +#: usr/local/www/system_advanced_admin.php:435 +msgid "Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:437 +#: usr/local/www/system_advanced_admin.php:437 +msgid "" +"Here you can specify alternate hostnames by which the router may be queried, " +"to bypass the DNS Rebinding Attack checks. Separate hostnames with spaces." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:442 +#: usr/local/www/system_advanced_admin.php:442 +msgid "Browser HTTP_REFERER enforcement" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:445 +#: usr/local/www/system_advanced_admin.php:445 +msgid "Disable HTTP_REFERER enforcement check" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:447 +msgid "" +"When this is unchecked, access to the webConfigurator is protected against " +"HTTP_REFERER redirection attempts. Check this box to disable this protection " +"if you find that it interferes with webConfigurator access in certain corner " +"cases such as using external scripts to interact with this system. More " +"information on HTTP_REFERER is available from Wikipedia." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:457 +#: usr/local/www/system_advanced_admin.php:457 +msgid "Secure Shell" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:460 +#: usr/local/www/system_advanced_admin.php:460 +msgid "Secure Shell Server" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:463 +#: usr/local/www/system_advanced_admin.php:463 +msgid "Enable Secure Shell" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:467 +#: usr/local/www/system_advanced_admin.php:467 +msgid "Authentication Method" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:470 +msgid "Disable password login for Secure Shell (RSA key only)" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:472 +#: usr/local/www/system_advanced_admin.php:472 +msgid "When enabled, authorized keys need to be configured for each" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:473 +#: usr/local/www/system_advanced_admin.php:473 +msgid "user" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:474 +#: usr/local/www/system_advanced_admin.php:474 +msgid "that has been granted secure shell access." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:478 +#: usr/local/www/system_advanced_admin.php:478 +msgid "SSH port" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:482 +#: usr/local/www/system_advanced_admin.php:482 +msgid "Note: Leave this blank for the default of 22." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:489 +#: usr/local/www/system_advanced_admin.php:489 +msgid "Serial Communcations" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:493 +#: usr/local/www/system_advanced_admin.php:493 +msgid "Serial Terminal" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:496 +#: usr/local/www/system_advanced_admin.php:496 +msgid "" +"Enables the first serial port with 9600/8/N/1 by default, or another speed " +"selectable below." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:497 +#: usr/local/www/system_advanced_admin.php:497 +msgid "" +"Note: This will redirect the console output and messages to the serial " +"port. You can still access the console menu from the internal video card/" +"keyboard. A null modem serial cable or adapter is required to use the " +"serial console." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:502 +#: usr/local/www/system_advanced_admin.php:502 +msgid "Serial Speed" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:512 +#: usr/local/www/system_advanced_admin.php:512 +msgid "Allows selection of different speeds for the serial console port." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:519 +#: usr/local/www/system_advanced_admin.php:519 +msgid "Console Options" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:522 +#: usr/local/www/system_advanced_admin.php:522 +msgid "Console menu" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:525 +#: usr/local/www/system_advanced_admin.php:525 +msgid "Password protect the console menu" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:527 +#: usr/local/www/system_advanced_admin.php:527 +msgid "Changes to this option will take effect after a reboot." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:564 +#: usr/local/www/system_advanced_admin.php:564 +msgid "secure shell configuration has changed. Stopping sshd." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:567 +#: usr/local/www/system_advanced_admin.php:567 +msgid "secure shell configuration has changed. Restarting sshd." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:574 +#: usr/local/www/system_advanced_admin.php:574 +msgid "webConfigurator configuration has changed. Restarting webConfigurator." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:78 +#: usr/local/www/system_advanced_firewall.php:77 +#: usr/local/www/system_advanced_firewall.php:88 +#: usr/local/www/system_advanced_firewall.php:88 +msgid "The Firewall Maximum States value must be an integer." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:81 +#: usr/local/www/system_advanced_firewall.php:83 +#: usr/local/www/system_advanced_firewall.php:94 +#: usr/local/www/system_advanced_firewall.php:94 +msgid "The Firewall Maximum Table Entries value must be an integer." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:84 +#: usr/local/www/system_advanced_firewall.php:86 +#: usr/local/www/system_advanced_firewall.php:97 +#: usr/local/www/system_advanced_firewall.php:97 +msgid "The TCP idle timeout must be an integer." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:87 +#: usr/local/www/system_advanced_firewall.php:89 +#: usr/local/www/system_advanced_firewall.php:100 +#: usr/local/www/system_advanced_firewall.php:100 +msgid "The Reflection timeout must be an integer." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:178 +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/system_advanced_firewall.php:221 +#: usr/local/www/system_advanced_firewall.php:221 +msgid "Advanced: Firewall and NAT" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:190 +#: usr/local/www/system_advanced_firewall.php:204 +#: usr/local/www/system_advanced_firewall.php:233 +#: usr/local/www/system_advanced_firewall.php:233 +msgid "as the name says, it's the normal optimization algorithm" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:191 +#: usr/local/www/system_advanced_firewall.php:205 +#: usr/local/www/system_advanced_firewall.php:234 +#: usr/local/www/system_advanced_firewall.php:234 +msgid "" +"used for high latency links, such as satellite links. Expires idle " +"connections later than default" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/system_advanced_firewall.php:206 +msgid "" +"expires idle connections quicker. More efficient use of CPU and memory but " +"can drop legitimate connections" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:193 +#: usr/local/www/system_advanced_firewall.php:207 +msgid "" +"tries to avoid dropping any legitimate connections at the expense of " +"increased memory usage and CPU utilization." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:239 +#: usr/local/www/system_advanced_firewall.php:253 +#: usr/local/www/system_advanced_firewall.php:282 +#: usr/local/www/system_advanced_firewall.php:281 +#: usr/local/www/system_advanced_firewall.php:281 +msgid "Firewall Advanced" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:242 +#: usr/local/www/system_advanced_firewall.php:256 +#: usr/local/www/system_advanced_firewall.php:285 +#: usr/local/www/system_advanced_firewall.php:284 +#: usr/local/www/system_advanced_firewall.php:284 +msgid "IP Do-Not-Fragment compatibility" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:245 +#: usr/local/www/system_advanced_firewall.php:259 +#: usr/local/www/system_advanced_firewall.php:288 +#: usr/local/www/system_advanced_firewall.php:287 +#: usr/local/www/system_advanced_firewall.php:287 +msgid "Clear invalid DF bits instead of dropping the packets" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:246 +#: usr/local/www/system_advanced_firewall.php:260 +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/system_advanced_firewall.php:288 +#: usr/local/www/system_advanced_firewall.php:288 +msgid "" +"This allows for communications with hosts that generate fragmented packets " +"with the don't fragment (DF) bit set. Linux NFS is known to do this. This " +"will cause the filter to not drop such packets but instead clear the don't " +"fragment bit." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:253 +#: usr/local/www/system_advanced_firewall.php:267 +#: usr/local/www/system_advanced_firewall.php:296 +#: usr/local/www/system_advanced_firewall.php:295 +#: usr/local/www/system_advanced_firewall.php:295 +msgid "IP Random id generation" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:256 +#: usr/local/www/system_advanced_firewall.php:270 +#: usr/local/www/system_advanced_firewall.php:299 +#: usr/local/www/system_advanced_firewall.php:298 +#: usr/local/www/system_advanced_firewall.php:298 +msgid "" +"Insert a stronger id into IP header of packets passing through the filter." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:257 +#: usr/local/www/system_advanced_firewall.php:271 +#: usr/local/www/system_advanced_firewall.php:300 +#: usr/local/www/system_advanced_firewall.php:299 +#: usr/local/www/system_advanced_firewall.php:299 +msgid "" +"Replaces the IP identification field of packets with random values to " +"compensate for operating systems that use predictable values. This option " +"only applies to packets that are not fragmented after the optional packet " +"reassembly." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:264 +#: usr/local/www/system_advanced_firewall.php:278 +#: usr/local/www/system_advanced_firewall.php:307 +#: usr/local/www/system_advanced_firewall.php:306 +#: usr/local/www/system_advanced_firewall.php:306 +msgid "Firewall Optimization Options" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:267 +#: usr/local/www/system_advanced_firewall.php:281 +#: usr/local/www/system_advanced_firewall.php:310 +#: usr/local/www/system_advanced_firewall.php:309 +#: usr/local/www/system_advanced_firewall.php:309 +msgid "normal" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:268 +#: usr/local/www/system_advanced_firewall.php:282 +#: usr/local/www/system_advanced_firewall.php:311 +#: usr/local/www/system_advanced_firewall.php:310 +#: usr/local/www/system_advanced_firewall.php:310 +msgid "high-latency" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:269 +#: usr/local/www/system_advanced_firewall.php:283 +#: usr/local/www/system_advanced_firewall.php:312 +#: usr/local/www/system_advanced_firewall.php:311 +#: usr/local/www/system_advanced_firewall.php:311 +msgid "aggressive" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:270 +#: usr/local/www/system_advanced_firewall.php:284 +#: usr/local/www/system_advanced_firewall.php:313 +#: usr/local/www/system_advanced_firewall.php:312 +#: usr/local/www/system_advanced_firewall.php:312 +msgid "conservative" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:278 +#: usr/local/www/system_advanced_firewall.php:292 +#: usr/local/www/system_advanced_firewall.php:321 +#: usr/local/www/system_advanced_firewall.php:322 +#: usr/local/www/system_advanced_firewall.php:322 +msgid "Select the type of state table optimization to use" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:282 +#: usr/local/www/system_advanced_firewall.php:296 +#: usr/local/www/system_advanced_firewall.php:325 +#: usr/local/www/system_advanced_firewall.php:326 +#: usr/local/www/system_advanced_firewall.php:326 +msgid "Disable Firewall" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:285 +#: usr/local/www/system_advanced_firewall.php:299 +#: usr/local/www/system_advanced_firewall.php:328 +#: usr/local/www/system_advanced_firewall.php:329 +#: usr/local/www/system_advanced_firewall.php:329 +msgid "Disable all packet filtering." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:287 +#: usr/local/www/system_advanced_firewall.php:301 +#: usr/local/www/system_advanced_firewall.php:330 +#: usr/local/www/system_advanced_firewall.php:331 +#: usr/local/www/system_advanced_firewall.php:331 +#, php-format +msgid "Note: This converts %s into a routing only platform!" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:288 +#: usr/local/www/system_advanced_firewall.php:302 +#: usr/local/www/system_advanced_firewall.php:331 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:332 +msgid "Note: This will also turn off NAT!" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:333 +#: usr/local/www/system_advanced_firewall.php:333 +msgid "If you only want to disable NAT, and not firewall rules, visit the" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:333 +#: usr/local/www/system_advanced_firewall.php:333 +msgid "Outbound NAT" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:294 +#: usr/local/www/system_advanced_firewall.php:308 +#: usr/local/www/system_advanced_firewall.php:337 +#: usr/local/www/system_advanced_firewall.php:338 +#: usr/local/www/system_advanced_firewall.php:338 +msgid "Disable Firewall Scrub" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:297 +#: usr/local/www/system_advanced_firewall.php:311 +#: usr/local/www/system_advanced_firewall.php:340 +#: usr/local/www/system_advanced_firewall.php:341 +#: usr/local/www/system_advanced_firewall.php:341 +msgid "" +"Disables the PF scrubbing option which can sometimes interfere with NFS and " +"PPTP traffic." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:302 +#: usr/local/www/system_advanced_firewall.php:316 +#: usr/local/www/system_advanced_firewall.php:360 +#: usr/local/www/system_advanced_firewall.php:361 +#: usr/local/www/system_advanced_firewall.php:361 +msgid "Firewall Maximum States" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:306 +#: usr/local/www/system_advanced_firewall.php:320 +#: usr/local/www/system_advanced_firewall.php:364 +#: usr/local/www/system_advanced_firewall.php:365 +#: usr/local/www/system_advanced_firewall.php:365 +msgid "Maximum number of connections to hold in the firewall state table." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:308 +#: usr/local/www/system_advanced_firewall.php:322 +#: usr/local/www/system_advanced_firewall.php:366 +#: usr/local/www/system_advanced_firewall.php:367 +#: usr/local/www/system_advanced_firewall.php:367 +msgid "" +"Note: Leave this blank for the default. On your system the default size is:" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:312 +#: usr/local/www/system_advanced_firewall.php:342 +#: usr/local/www/system_advanced_firewall.php:386 +#: usr/local/www/system_advanced_firewall.php:387 +#: usr/local/www/system_advanced_firewall.php:387 +msgid "Firewall Maximum Table Entries" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:316 +#: usr/local/www/system_advanced_firewall.php:346 +#: usr/local/www/system_advanced_firewall.php:390 +#: usr/local/www/system_advanced_firewall.php:391 +#: usr/local/www/system_advanced_firewall.php:391 +msgid "" +"Maximum number of table entries for systems such as aliases, sshlockout, " +"snort, etc, combined." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:319 +#: usr/local/www/system_advanced_firewall.php:334 +#: usr/local/www/system_advanced_firewall.php:349 +#: usr/local/www/system_advanced_firewall.php:378 +#: usr/local/www/system_advanced_firewall.php:393 +#: usr/local/www/system_advanced_firewall.php:379 +#: usr/local/www/system_advanced_firewall.php:394 +#: usr/local/www/system_advanced_firewall.php:379 +#: usr/local/www/system_advanced_firewall.php:394 +msgid "Note: Leave this blank for the default." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:321 +#: usr/local/www/system_advanced_firewall.php:336 +#: usr/local/www/system_advanced_firewall.php:351 +#: usr/local/www/system_advanced_firewall.php:380 +#: usr/local/www/system_advanced_firewall.php:395 +#: usr/local/www/system_advanced_firewall.php:381 +#: usr/local/www/system_advanced_firewall.php:396 +#: usr/local/www/system_advanced_firewall.php:381 +#: usr/local/www/system_advanced_firewall.php:396 +msgid "On your system the default size is:" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:327 +#: usr/local/www/system_advanced_firewall.php:357 +#: usr/local/www/system_advanced_firewall.php:401 +#: usr/local/www/system_advanced_firewall.php:402 +#: usr/local/www/system_advanced_firewall.php:402 +msgid "Static route filtering" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:330 +#: usr/local/www/system_advanced_firewall.php:360 +#: usr/local/www/system_advanced_firewall.php:404 +#: usr/local/www/system_advanced_firewall.php:405 +#: usr/local/www/system_advanced_firewall.php:405 +msgid "Bypass firewall rules for traffic on the same interface" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:362 +#: usr/local/www/system_advanced_firewall.php:406 +#: usr/local/www/system_advanced_firewall.php:407 +#: usr/local/www/system_advanced_firewall.php:407 +msgid "" +"This option only applies if you have defined one or more static routes. If " +"it is enabled, traffic that enters and leaves through the same interface " +"will not be checked by the firewall. This may be desirable in some " +"situations where multiple subnets are connected to the same interface." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:342 +#: usr/local/www/system_advanced_firewall.php:372 +#: usr/local/www/system_advanced_firewall.php:416 +#: usr/local/www/system_advanced_firewall.php:417 +#: usr/local/www/system_advanced_firewall.php:417 +msgid "Disable all auto-added VPN rules." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:344 +#: usr/local/www/system_advanced_firewall.php:374 +#: usr/local/www/system_advanced_firewall.php:418 +#: usr/local/www/system_advanced_firewall.php:419 +#: usr/local/www/system_advanced_firewall.php:419 +msgid "Note: This disables automatically added rules for IPsec, PPTP." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:352 +#: usr/local/www/system_advanced_firewall.php:382 +#: usr/local/www/system_advanced_firewall.php:426 +#: usr/local/www/system_advanced_firewall.php:427 +#: usr/local/www/system_advanced_firewall.php:427 +msgid "Disable reply-to on WAN rules" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:354 +#: usr/local/www/system_advanced_firewall.php:384 +#: usr/local/www/system_advanced_firewall.php:428 +#: usr/local/www/system_advanced_firewall.php:429 +#: usr/local/www/system_advanced_firewall.php:429 +msgid "" +"With Multi-WAN you generally want to ensure traffic leaves the same " +"interface it arrives on, hence reply-to is added automatically by default. " +"When using bridging, you must disable this behavior if the WAN gateway IP is " +"different from the gateway IP of the hosts behind the bridged interface." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:364 +#: usr/local/www/system_advanced_firewall.php:404 +#: usr/local/www/system_advanced_firewall.php:466 +#: usr/local/www/system_advanced_firewall.php:467 +#: usr/local/www/system_advanced_firewall.php:467 +msgid "Network Address Translation" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:367 +msgid "Disable NAT Reflection for port forwards" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:370 +msgid "" +"Disables the automatic creation of additional NAT redirect rules for access " +"to port forwards on your external IP addresses from within your internal " +"networks. Note: Reflection for port forward entries is skipped for ranges " +"larger than 500 ports." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:374 +#: usr/local/www/system_advanced_firewall.php:425 +#: usr/local/www/system_advanced_firewall.php:487 +#: usr/local/www/system_advanced_firewall.php:488 +#: usr/local/www/system_advanced_firewall.php:488 +msgid "Reflection Timeout" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:377 +msgid "" +"Enter value for Reflection timeout in seconds. Note: Only applies to " +"Reflection on port forwards." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:381 +msgid "Disable NAT Reflection for 1:1 NAT" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:384 +msgid "" +"Disables the automatic creation of additional NAT 1:1 mappings for access to " +"1:1 mappings of your external IP addresses from within your internal " +"networks. Note: Reflection for 1:1 NAT might not fully work in certain " +"complex routing scenarios." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:391 +#: usr/local/www/system_advanced_firewall.php:448 +#: usr/local/www/system_advanced_firewall.php:510 +#: usr/local/www/system_advanced_firewall.php:511 +#: usr/local/www/system_advanced_firewall.php:511 +msgid "" +"Automatically create outbound NAT rules which assist inbound NAT rules that " +"direct traffic back out to the same subnet it originated from." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:393 +msgid "" +"Currently only applies to 1:1 NAT rules. Required for full functionality of " +"NAT Reflection for 1:1 NAT." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:397 +#: usr/local/www/system_advanced_firewall.php:456 +#: usr/local/www/system_advanced_firewall.php:518 +#: usr/local/www/system_advanced_firewall.php:519 +#: usr/local/www/system_advanced_firewall.php:519 +msgid "TFTP Proxy" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:407 +#: usr/local/www/system_advanced_firewall.php:466 +#: usr/local/www/system_advanced_firewall.php:528 +#: usr/local/www/system_advanced_firewall.php:529 +#: usr/local/www/system_advanced_firewall.php:529 +msgid "Choose the interfaces where you want TFTP proxy helper to be enabled." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:179 +#: usr/local/www/system_advanced_misc.php:199 +#: usr/local/www/system_advanced_misc.php:218 +#: usr/local/www/system_advanced_misc.php:222 +#: usr/local/www/system_advanced_misc.php:254 +#: usr/local/www/system_advanced_misc.php:254 +msgid "Advanced: Miscellaneous" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:229 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_misc.php:274 +#: usr/local/www/system_advanced_misc.php:278 +#: usr/local/www/system_advanced_misc.php:325 +#: usr/local/www/system_advanced_misc.php:325 +msgid "Proxy support" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:232 +#: usr/local/www/system_advanced_misc.php:258 +#: usr/local/www/system_advanced_misc.php:277 +#: usr/local/www/system_advanced_misc.php:281 +#: usr/local/www/system_advanced_misc.php:328 +#: usr/local/www/system_advanced_misc.php:328 +msgid "Proxy URL" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:236 +#: usr/local/www/system_advanced_misc.php:262 +#: usr/local/www/system_advanced_misc.php:281 +#: usr/local/www/system_advanced_misc.php:285 +#: usr/local/www/system_advanced_misc.php:332 +#: usr/local/www/system_advanced_misc.php:332 +#, php-format +msgid "Proxy url for allowing %s to use this proxy to connect outside." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:240 +#: usr/local/www/system_advanced_misc.php:266 +#: usr/local/www/system_advanced_misc.php:285 +#: usr/local/www/system_advanced_misc.php:289 +#: usr/local/www/system_advanced_misc.php:336 +#: usr/local/www/system_advanced_misc.php:336 +msgid "Proxy Port" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:244 +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_advanced_misc.php:289 +#: usr/local/www/system_advanced_misc.php:293 +#: usr/local/www/system_advanced_misc.php:340 +#: usr/local/www/system_advanced_misc.php:340 +#, php-format +msgid "" +"Proxy port to use when %s connects to the proxy URL configured above. " +"Default is 8080 for http protocol or 443 for ssl." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:248 +#: usr/local/www/system_advanced_misc.php:274 +#: usr/local/www/system_advanced_misc.php:293 +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:344 +#: usr/local/www/system_advanced_misc.php:344 +msgid "Proxy Username" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:252 +#: usr/local/www/system_advanced_misc.php:278 +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:301 +#: usr/local/www/system_advanced_misc.php:348 +#: usr/local/www/system_advanced_misc.php:348 +#, php-format +msgid "Proxy username for allowing %s to use this proxy to connect outside" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_misc.php:282 +#: usr/local/www/system_advanced_misc.php:301 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_misc.php:352 +#: usr/local/www/system_advanced_misc.php:352 +msgid "Proxy Pass" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:260 +#: usr/local/www/system_advanced_misc.php:286 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_misc.php:309 +#: usr/local/www/system_advanced_misc.php:356 +#: usr/local/www/system_advanced_misc.php:356 +#, php-format +msgid "Proxy password for allowing %s to use this proxy to connect outside" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:264 +#: usr/local/www/system_advanced_misc.php:267 +#: usr/local/www/system_advanced_misc.php:282 +#: usr/local/www/system_advanced_misc.php:290 +#: usr/local/www/system_advanced_misc.php:293 +#: usr/local/www/system_advanced_misc.php:314 +#: usr/local/www/system_advanced_misc.php:309 +#: usr/local/www/system_advanced_misc.php:312 +#: usr/local/www/system_advanced_misc.php:333 +#: usr/local/www/system_advanced_misc.php:313 +#: usr/local/www/system_advanced_misc.php:316 +#: usr/local/www/system_advanced_misc.php:337 +#: usr/local/www/system_advanced_misc.php:360 +#: usr/local/www/system_advanced_misc.php:363 +#: usr/local/www/system_advanced_misc.php:384 +#: usr/local/www/system_advanced_misc.php:360 +#: usr/local/www/system_advanced_misc.php:363 +#: usr/local/www/system_advanced_misc.php:384 +msgid "Load Balancing" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_advanced_misc.php:296 +#: usr/local/www/system_advanced_misc.php:315 +#: usr/local/www/system_advanced_misc.php:319 +#: usr/local/www/system_advanced_misc.php:366 +#: usr/local/www/system_advanced_misc.php:366 +msgid "Use sticky connections" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:271 +msgid "" +"Successive connections will be redirected to the servers in a round-robin " +"manner with connections from the same source being sent to the same web " +"server. This 'sticky connection' will exist as long as there are states that " +"refer to this connection. Once the states expire, so will the sticky " +"connection. Further connections from that host will be redirected to the " +"next web server in the round robin." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:285 +#: usr/local/www/system_advanced_misc.php:317 +#: usr/local/www/system_advanced_misc.php:336 +#: usr/local/www/system_advanced_misc.php:340 +#: usr/local/www/system_advanced_misc.php:387 +#: usr/local/www/system_advanced_misc.php:387 +msgid "Allow default gateway switching" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:286 +#: usr/local/www/system_advanced_misc.php:318 +#: usr/local/www/system_advanced_misc.php:337 +#: usr/local/www/system_advanced_misc.php:341 +#: usr/local/www/system_advanced_misc.php:388 +#: usr/local/www/system_advanced_misc.php:388 +msgid "" +"If the link where the default gateway resides fails switch the default " +"gateway to another available one." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:294 +#: usr/local/www/system_advanced_misc.php:326 +#: usr/local/www/system_advanced_misc.php:345 +#: usr/local/www/system_advanced_misc.php:349 +#: usr/local/www/system_advanced_misc.php:396 +#: usr/local/www/system_advanced_misc.php:396 +msgid "Power savings" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:329 +#: usr/local/www/system_advanced_misc.php:348 +#: usr/local/www/system_advanced_misc.php:352 +#: usr/local/www/system_advanced_misc.php:399 +#: usr/local/www/system_advanced_misc.php:399 +msgid "PowerD" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:300 +#: usr/local/www/system_advanced_misc.php:332 +#: usr/local/www/system_advanced_misc.php:351 +#: usr/local/www/system_advanced_misc.php:355 +#: usr/local/www/system_advanced_misc.php:402 +#: usr/local/www/system_advanced_misc.php:402 +msgid "Use PowerD" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:302 +msgid "" +"The powerd utility monitors the system state and sets various power control " +"options accordingly. It offers three modes (maximum, minimum, and adaptive) " +"that can be individually selected while on AC power or batteries. The modes " +"maximum, minimum, and adaptive may be abbreviated max, min, adp. Maximum " +"mode chooses the highest performance values. Minimum mode selects the " +"lowest performance values to get the most power savings. Adaptive mode " +"attempts to strike a balance by degrading performance when the system " +"appears idle and increasing it when the system is busy. It offers a good " +"balance between a small performance loss for greatly " +msgstr "" + +#: usr/local/www/system_advanced_misc.php:318 +#: usr/local/www/system_advanced_misc.php:361 +msgid "glxsb Crypto Acceleration" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:321 +#: usr/local/www/system_advanced_misc.php:364 +msgid "glxsb" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:324 +#: usr/local/www/system_advanced_misc.php:367 +msgid "Use glxsb" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:326 +#: usr/local/www/system_advanced_misc.php:369 +msgid "" +"The AMD Geode LX Security Block will accelerate some cryptographic functions " +"on systems which have the chip. Do not enable this option if you have a Hifn " +"cryptographic acceleration card, as this will take precedence and the Hifn " +"card will not be used. Acceleration should be automatic for IPsec when using " +"Rijndael (AES). OpenVPN should be set for AES-128-CBC." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:332 +#: usr/local/www/system_advanced_misc.php:375 +msgid "" +"If you do not have a glxsb chip in your system, this option will have no " +"effect. To unload the module, uncheck this option and then reboot." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:340 +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:432 +#: usr/local/www/system_advanced_misc.php:444 +#: usr/local/www/system_advanced_misc.php:491 +#: usr/local/www/system_advanced_misc.php:491 +msgid "IP Security" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:343 +#: usr/local/www/system_advanced_misc.php:386 +#: usr/local/www/system_advanced_misc.php:435 +#: usr/local/www/system_advanced_misc.php:447 +#: usr/local/www/system_advanced_misc.php:494 +#: usr/local/www/system_advanced_misc.php:494 +msgid "Security Associations" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:346 +#: usr/local/www/system_advanced_misc.php:389 +#: usr/local/www/system_advanced_misc.php:438 +#: usr/local/www/system_advanced_misc.php:450 +#: usr/local/www/system_advanced_misc.php:497 +#: usr/local/www/system_advanced_misc.php:497 +msgid "Prefer older IPsec SAs" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:348 +#: usr/local/www/system_advanced_misc.php:391 +#: usr/local/www/system_advanced_misc.php:440 +#: usr/local/www/system_advanced_misc.php:452 +#: usr/local/www/system_advanced_misc.php:499 +#: usr/local/www/system_advanced_misc.php:499 +msgid "" +"By default, if several SAs match, the newest one is preferred if it's at " +"least 30 seconds old. Select this option to always prefer old SAs over new " +"ones." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:354 +#: usr/local/www/system_advanced_misc.php:397 +#: usr/local/www/system_advanced_misc.php:446 +#: usr/local/www/system_advanced_misc.php:458 +#: usr/local/www/system_advanced_misc.php:505 +#: usr/local/www/system_advanced_misc.php:505 +msgid "IPsec Debug" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:357 +#: usr/local/www/system_advanced_misc.php:400 +#: usr/local/www/system_advanced_misc.php:449 +#: usr/local/www/system_advanced_misc.php:461 +#: usr/local/www/system_advanced_misc.php:508 +#: usr/local/www/system_advanced_misc.php:508 +msgid "Start racoon in debug mode" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:359 +#: usr/local/www/system_advanced_misc.php:402 +#: usr/local/www/system_advanced_misc.php:451 +#: usr/local/www/system_advanced_misc.php:463 +#: usr/local/www/system_advanced_misc.php:510 +#: usr/local/www/system_advanced_misc.php:510 +msgid "" +"Launches racoon in debug mode so that more verbose logs will be generated to " +"aid in troubleshooting." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:404 +#: usr/local/www/system_advanced_misc.php:453 +#: usr/local/www/system_advanced_misc.php:465 +#: usr/local/www/system_advanced_misc.php:512 +#: usr/local/www/system_advanced_misc.php:512 +msgid "NOTE: Changing this setting will restart racoon." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:365 +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:457 +#: usr/local/www/system_advanced_misc.php:469 +#: usr/local/www/system_advanced_misc.php:516 +#: usr/local/www/system_advanced_misc.php:516 +msgid "Maximum MSS" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:368 +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:460 +#: usr/local/www/system_advanced_misc.php:472 +#: usr/local/www/system_advanced_misc.php:519 +#: usr/local/www/system_advanced_misc.php:519 +msgid "Enable MSS clamping on VPN traffic" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:372 +#: usr/local/www/system_advanced_misc.php:415 +#: usr/local/www/system_advanced_misc.php:464 +#: usr/local/www/system_advanced_misc.php:476 +#: usr/local/www/system_advanced_misc.php:523 +#: usr/local/www/system_advanced_misc.php:523 +msgid "" +"Enable MSS clamping on TCP flows over VPN. This helps overcome problems with " +"PMTUD on IPsec VPN links. If left blank, the default value is 1400 bytes. " +msgstr "" + +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:426 +#: usr/local/www/system_advanced_misc.php:475 +#: usr/local/www/system_advanced_misc.php:487 +#: usr/local/www/system_advanced_misc.php:534 +#: usr/local/www/system_advanced_misc.php:534 +msgid "Schedule States" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:387 +#: usr/local/www/system_advanced_misc.php:430 +#: usr/local/www/system_advanced_misc.php:479 +#: usr/local/www/system_advanced_misc.php:491 +#: usr/local/www/system_advanced_misc.php:538 +#: usr/local/www/system_advanced_misc.php:538 +msgid "" +"By default schedules clear the states of existing connections when the " +"expiration time has come. This option overrides that behavior by not " +"clearing states for existing connections." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:395 +#: usr/local/www/system_advanced_misc.php:438 +#: usr/local/www/system_advanced_misc.php:487 +#: usr/local/www/system_advanced_misc.php:499 +#: usr/local/www/system_advanced_misc.php:546 +#: usr/local/www/system_advanced_misc.php:546 +msgid "Gateway Monitoring" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:402 +#: usr/local/www/system_advanced_misc.php:445 +#: usr/local/www/system_advanced_misc.php:494 +#: usr/local/www/system_advanced_misc.php:506 +#: usr/local/www/system_advanced_misc.php:553 +#: usr/local/www/system_advanced_misc.php:553 +msgid "" +"By default the monitoring process will flush states for a gateway that goes " +"down. This option overrides that behavior by not clearing states for " +"existing connections." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:454 +#: usr/local/www/system_advanced_misc.php:503 +#: usr/local/www/system_advanced_misc.php:515 +#: usr/local/www/system_advanced_misc.php:636 +#: usr/local/www/system_advanced_misc.php:636 +msgid "Hardware Settings" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:457 +#: usr/local/www/system_advanced_misc.php:506 +#: usr/local/www/system_advanced_misc.php:518 +#: usr/local/www/system_advanced_misc.php:639 +#: usr/local/www/system_advanced_misc.php:639 +msgid "Hard disk standby time " +msgstr "" + +#: usr/local/www/system_advanced_misc.php:421 +#: usr/local/www/system_advanced_misc.php:464 +#: usr/local/www/system_advanced_misc.php:513 +#: usr/local/www/system_advanced_misc.php:525 +#: usr/local/www/system_advanced_misc.php:646 +#: usr/local/www/system_advanced_misc.php:646 +msgid "Always on" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:430 +#: usr/local/www/system_advanced_misc.php:473 +#: usr/local/www/system_advanced_misc.php:522 +#: usr/local/www/system_advanced_misc.php:534 +#: usr/local/www/system_advanced_misc.php:655 +#: usr/local/www/system_advanced_misc.php:655 +msgid "" +"Puts the hard disk into standby mode when the selected amount of time after " +"the last access has elapsed." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:431 +#: usr/local/www/system_advanced_misc.php:474 +#: usr/local/www/system_advanced_misc.php:523 +#: usr/local/www/system_advanced_misc.php:535 +#: usr/local/www/system_advanced_misc.php:656 +#: usr/local/www/system_advanced_misc.php:656 +msgid "Do not set this for CF cards." +msgstr "" + +#: usr/local/www/system_advanced_network.php:68 +#: usr/local/www/system_advanced_network.php:68 +msgid "You must specify an IP address to NAT IPv6 packets." +msgstr "" + +#: usr/local/www/system_advanced_network.php:148 +#: usr/local/www/system_advanced_network.php:148 +msgid "Advanced: Networking" +msgstr "" + +#: usr/local/www/system_advanced_network.php:205 +#: usr/local/www/system_advanced_network.php:205 +msgid "IPv6 Options" +msgstr "" + +#: usr/local/www/system_advanced_network.php:208 +#: usr/local/www/system_advanced_network.php:211 +#: usr/local/www/system_advanced_network.php:208 +#: usr/local/www/system_advanced_network.php:211 +msgid "Allow IPv6" +msgstr "" + +#: usr/local/www/system_advanced_network.php:212 +msgid "All IPv6 will be blocked unless this box is checked." +msgstr "" + +#: usr/local/www/system_advanced_network.php:217 +#: usr/local/www/system_advanced_network.php:218 +#: usr/local/www/system_advanced_network.php:218 +msgid "IPv6 over IPv4 Tunneling" +msgstr "" + +#: usr/local/www/system_advanced_network.php:220 +#: usr/local/www/system_advanced_network.php:221 +#: usr/local/www/system_advanced_network.php:221 +msgid "Enable IPv4 NAT encapsulation of IPv6 packets" +msgstr "" + +#: usr/local/www/system_advanced_network.php:221 +#: usr/local/www/system_advanced_network.php:222 +#: usr/local/www/system_advanced_network.php:222 +msgid "" +"This provides an RFC 2893 compatibility mechanism that can be used to " +"tunneling IPv6 packets over IPv4 routing infrastructures. If enabled, don't " +"forget to add a firewall rule to permit IPv6 packets." +msgstr "" + +#: usr/local/www/system_advanced_network.php:234 +#: usr/local/www/system_advanced_network.php:235 +#: usr/local/www/system_advanced_network.php:235 +msgid "Network Interfaces" +msgstr "" + +#: usr/local/www/system_advanced_network.php:237 +#: usr/local/www/system_advanced_network.php:238 +#: usr/local/www/system_advanced_network.php:238 +msgid "Device polling" +msgstr "" + +#: usr/local/www/system_advanced_network.php:240 +#: usr/local/www/system_advanced_network.php:241 +#: usr/local/www/system_advanced_network.php:241 +msgid "Enable device polling" +msgstr "" + +#: usr/local/www/system_advanced_network.php:241 +#: usr/local/www/system_advanced_network.php:242 +#: usr/local/www/system_advanced_network.php:242 +#, php-format +msgid "" +"Device polling is a technique that lets the system periodically poll network " +"devices for new data instead of relying on interrupts. This prevents your " +"webConfigurator, SSH, etc. from being inaccessible due to interrupt floods " +"when under extreme load. Generally this is not recommended. Not all NICs " +"support polling; see the %s homepage for a list of supported cards." +msgstr "" + +#: usr/local/www/system_advanced_network.php:245 +#: usr/local/www/system_advanced_network.php:246 +#: usr/local/www/system_advanced_network.php:246 +msgid "Hardware Checksum Offloading" +msgstr "" + +#: usr/local/www/system_advanced_network.php:248 +#: usr/local/www/system_advanced_network.php:249 +#: usr/local/www/system_advanced_network.php:249 +msgid "Disable hardware checksum offload" +msgstr "" + +#: usr/local/www/system_advanced_network.php:249 +#: usr/local/www/system_advanced_network.php:250 +#: usr/local/www/system_advanced_network.php:250 +msgid "" +"Checking this option will disable hardware checksum offloading. Checksum " +"offloading is broken in some hardware, particularly some Realtek cards. " +"Rarely, drivers may have problems with checksum offloading and some specific " +"NICs." +msgstr "" + +#: usr/local/www/system_advanced_network.php:253 +#: usr/local/www/system_advanced_network.php:254 +#: usr/local/www/system_advanced_network.php:254 +msgid "Hardware TCP Segmentation Offloading" +msgstr "" + +#: usr/local/www/system_advanced_network.php:256 +#: usr/local/www/system_advanced_network.php:257 +#: usr/local/www/system_advanced_network.php:257 +msgid "Disable hardware TCP segmentation offload" +msgstr "" + +#: usr/local/www/system_advanced_network.php:257 +#: usr/local/www/system_advanced_network.php:258 +#: usr/local/www/system_advanced_network.php:258 +msgid "" +"Checking this option will disable hardware TCP segmentation offloading (TSO, " +"TSO4, TSO6). This offloading is broken in some hardware drivers, and may " +"impact performance with some specific NICs." +msgstr "" + +#: usr/local/www/system_advanced_network.php:261 +#: usr/local/www/system_advanced_network.php:262 +#: usr/local/www/system_advanced_network.php:262 +msgid "Hardware Large Receive Offloading" +msgstr "" + +#: usr/local/www/system_advanced_network.php:264 +#: usr/local/www/system_advanced_network.php:265 +#: usr/local/www/system_advanced_network.php:265 +msgid "Disable hardware large receive offload" +msgstr "" + +#: usr/local/www/system_advanced_network.php:265 +#: usr/local/www/system_advanced_network.php:266 +#: usr/local/www/system_advanced_network.php:266 +msgid "" +"Checking this option will disable hardware large receive offloading (LRO). " +"This offloading is broken in some hardware drivers, and may impact " +"performance with some specific NICs." +msgstr "" + +#: usr/local/www/system_advanced_network.php:269 +#: usr/local/www/system_advanced_network.php:270 +#: usr/local/www/system_advanced_network.php:270 +msgid "ARP Handling" +msgstr "" + +#: usr/local/www/system_advanced_network.php:272 +#: usr/local/www/system_advanced_network.php:273 +#: usr/local/www/system_advanced_network.php:273 +msgid "Suppress ARP messages" +msgstr "" + +#: usr/local/www/system_advanced_network.php:273 +#: usr/local/www/system_advanced_network.php:274 +#: usr/local/www/system_advanced_network.php:274 +msgid "" +"This option will suppress ARP log messages when multiple interfaces reside " +"on the same broadcast domain" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:118 +#: usr/local/www/system_advanced_notifications.php:124 +#: usr/local/www/system_advanced_notifications.php:127 +#: usr/local/www/system_advanced_notifications.php:133 +#: usr/local/www/system_advanced_notifications.php:127 +#: usr/local/www/system_advanced_notifications.php:133 +#, php-format +msgid "This is a test message from %s. It is safe to ignore this message." +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:131 +#: usr/local/www/system_advanced_notifications.php:140 +#: usr/local/www/system_advanced_notifications.php:140 +msgid "Advanced: Notifications" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:168 +#: usr/local/www/system_advanced_notifications.php:177 +#: usr/local/www/system_advanced_notifications.php:177 +msgid "Growl" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:171 +#: usr/local/www/system_advanced_notifications.php:180 +#: usr/local/www/system_advanced_notifications.php:180 +msgid "Registration Name" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:174 +#: usr/local/www/system_advanced_notifications.php:183 +#: usr/local/www/system_advanced_notifications.php:183 +msgid "Enter the name to register with the Growl server (default: PHP-Growl)." +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:178 +#: usr/local/www/system_advanced_notifications.php:187 +#: usr/local/www/system_advanced_notifications.php:187 +msgid "Notification Name" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:181 +#: usr/local/www/system_advanced_notifications.php:190 +#: usr/local/www/system_advanced_notifications.php:190 +#, php-format +msgid "Enter a name for the Growl notifications (default: %s growl alert)." +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:188 +#: usr/local/www/system_advanced_notifications.php:197 +#: usr/local/www/system_advanced_notifications.php:197 +msgid "" +"This is the IP address that you would like to send growl notifications to." +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:195 +#: usr/local/www/system_advanced_notifications.php:204 +#: usr/local/www/system_advanced_notifications.php:204 +msgid "Enter the password of the remote growl notification device." +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:203 +#: usr/local/www/system_advanced_notifications.php:212 +#: usr/local/www/system_advanced_notifications.php:212 +msgid "SMTP E-Mail" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:206 +#: usr/local/www/system_advanced_notifications.php:215 +#: usr/local/www/system_advanced_notifications.php:215 +msgid "E-Mail server" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:209 +#: usr/local/www/system_advanced_notifications.php:218 +#: usr/local/www/system_advanced_notifications.php:218 +msgid "" +"This is the FQDN or IP address of the SMTP E-Mail server to which " +"notifications will be sent." +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:213 +#: usr/local/www/system_advanced_notifications.php:222 +#: usr/local/www/system_advanced_notifications.php:222 +msgid "SMTP Port of E-Mail server" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:217 +#: usr/local/www/system_advanced_notifications.php:226 +#: usr/local/www/system_advanced_notifications.php:226 +msgid "" +"This is the port of the SMTP E-Mail server, typically 25, 587 (submission) " +"or 465 (smtps, tick ssl/tls checkbox)" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:221 +#: usr/local/www/system_advanced_notifications.php:230 +#: usr/local/www/system_advanced_notifications.php:230 +msgid "From e-mail address" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:224 +#: usr/local/www/system_advanced_notifications.php:233 +#: usr/local/www/system_advanced_notifications.php:233 +msgid "This is the e-mail address that will appear in the from field." +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:228 +#: usr/local/www/system_advanced_notifications.php:237 +#: usr/local/www/system_advanced_notifications.php:237 +msgid "Notification E-Mail address" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:231 +#: usr/local/www/system_advanced_notifications.php:240 +#: usr/local/www/system_advanced_notifications.php:240 +msgid "" +"Enter the e-mail address that you would like email notifications sent to." +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:235 +#: usr/local/www/system_advanced_notifications.php:244 +#: usr/local/www/system_advanced_notifications.php:244 +msgid "Notification E-Mail auth username (optional)" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:238 +#: usr/local/www/system_advanced_notifications.php:247 +#: usr/local/www/system_advanced_notifications.php:247 +msgid "Enter the e-mail address username for SMTP authentication." +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:242 +#: usr/local/www/system_advanced_notifications.php:251 +#: usr/local/www/system_advanced_notifications.php:251 +msgid "Notification E-Mail auth password" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:245 +#: usr/local/www/system_advanced_notifications.php:254 +#: usr/local/www/system_advanced_notifications.php:254 +msgid "Enter the e-mail address password for SMTP authentication." +msgstr "" + +#: usr/local/www/system_advanced_sysctl.php:125 +#: usr/local/www/system_advanced_sysctl.php:125 +msgid "Advanced: System Tunables" +msgstr "" + +#: usr/local/www/system_advanced_sysctl.php:139 +#: usr/local/www/system_advanced_sysctl.php:139 +msgid "" +"The firewall tunables have changed. You must apply the configuration to " +"take affect." +msgstr "" + +#: usr/local/www/system_advanced_sysctl.php:171 +#: usr/local/www/system_advanced_sysctl.php:171 +msgid "Tunable Name" +msgstr "" + +#: usr/local/www/system_advanced_sysctl.php:234 +#: usr/local/www/system_advanced_sysctl.php:234 +msgid "Edit system tunable" +msgstr "" + +#: usr/local/www/system_advanced_sysctl.php:237 +#: usr/local/www/system_advanced_sysctl.php:237 +msgid "Tunable" +msgstr "" + +#: usr/local/www/system_authservers.php:44 +#: usr/local/www/system_authservers.php:44 +msgid "Authentication Servers" +msgstr "" + +#: usr/local/www/system_authservers.php:83 +#: usr/local/www/system_authservers.php:84 +#: usr/local/www/system_authservers.php:84 +msgid "deleted" +msgstr "" + +#: usr/local/www/system_authservers.php:160 +#: usr/local/www/system_authservers.php:183 +#: usr/local/www/system_authservers.php:438 +#: usr/local/www/system_camanager.php:165 +#: usr/local/www/system_camanager.php:177 +#: usr/local/www/system_camanager.php:192 +#: usr/local/www/system_camanager.php:369 +#: usr/local/www/system_certmanager.php:164 +#: usr/local/www/system_certmanager.php:176 +#: usr/local/www/system_certmanager.php:193 +#: usr/local/www/system_certmanager.php:307 +#: usr/local/www/system_certmanager.php:495 +#: usr/local/www/system_certmanager.php:801 +#: usr/local/www/system_crlmanager.php:193 +#: usr/local/www/system_crlmanager.php:200 +#: usr/local/www/system_crlmanager.php:318 +#: usr/local/www/system_usermanager.php:189 +#: usr/local/www/system_usermanager.php:705 +#: usr/local/www/system_certmanager.php:192 +#: usr/local/www/system_certmanager.php:204 +#: usr/local/www/system_certmanager.php:222 +#: usr/local/www/system_certmanager.php:394 +#: usr/local/www/system_certmanager.php:594 +#: usr/local/www/system_certmanager.php:967 +#: usr/local/www/system_usermanager.php:703 +#: usr/local/www/system_crlmanager.php:192 +#: usr/local/www/system_crlmanager.php:199 +#: usr/local/www/system_crlmanager.php:319 +#: usr/local/www/system_crlmanager.php:404 +#: usr/local/www/system_authservers.php:161 +#: usr/local/www/system_authservers.php:184 +#: usr/local/www/system_authservers.php:443 +#: usr/local/www/system_camanager.php:167 +#: usr/local/www/system_camanager.php:179 +#: usr/local/www/system_camanager.php:194 +#: usr/local/www/system_camanager.php:376 +#: usr/local/www/system_certmanager.php:195 +#: usr/local/www/system_certmanager.php:207 +#: usr/local/www/system_certmanager.php:225 +#: usr/local/www/system_certmanager.php:403 +#: usr/local/www/system_certmanager.php:603 +#: usr/local/www/system_certmanager.php:1009 +#: usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 +#: usr/local/www/system_authservers.php:450 +#: usr/local/www/system_certmanager.php:604 +#: usr/local/www/system_certmanager.php:1013 +#: usr/local/www/system_camanager.php:167 +#: usr/local/www/system_camanager.php:179 +#: usr/local/www/system_camanager.php:194 +#: usr/local/www/system_camanager.php:376 +#: usr/local/www/system_certmanager.php:195 +#: usr/local/www/system_certmanager.php:207 +#: usr/local/www/system_certmanager.php:225 +#: usr/local/www/system_certmanager.php:403 +#: usr/local/www/system_certmanager.php:604 +#: usr/local/www/system_certmanager.php:1013 +#: usr/local/www/system_crlmanager.php:192 +#: usr/local/www/system_crlmanager.php:199 +#: usr/local/www/system_crlmanager.php:319 +#: usr/local/www/system_crlmanager.php:404 +#: usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 +#: usr/local/www/system_authservers.php:450 +#: usr/local/www/system_usermanager.php:189 +#: usr/local/www/system_usermanager.php:703 +msgid "Descriptive name" +msgstr "" + +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:484 +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:489 +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:496 +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:496 +msgid "Port value" +msgstr "" + +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:490 +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:495 +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:502 +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:502 +msgid "Transport" +msgstr "" + +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:526 +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:531 +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:538 +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:538 +msgid "Protocol version" +msgstr "" + +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:168 +msgid "Search level" +msgstr "" + +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:169 +msgid "User naming Attribute" +msgstr "" + +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:170 +#: usr/local/www/system_authservers.php:170 +msgid "Group naming Attribute" +msgstr "" + +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:665 +#: usr/local/www/system_authservers.php:170 +#: usr/local/www/system_authservers.php:670 +#: usr/local/www/system_authservers.php:171 +#: usr/local/www/system_authservers.php:677 +#: usr/local/www/system_authservers.php:171 +#: usr/local/www/system_authservers.php:677 +msgid "Group member attribute" +msgstr "" + +#: usr/local/www/system_authservers.php:170 +#: usr/local/www/system_authservers.php:171 +#: usr/local/www/system_authservers.php:172 +#: usr/local/www/system_authservers.php:172 +msgid "Authentication container" +msgstr "" + +#: usr/local/www/system_authservers.php:175 +#: usr/local/www/system_authservers.php:176 +#: usr/local/www/system_authservers.php:177 +#: usr/local/www/system_authservers.php:177 +msgid "Bind user DN" +msgstr "" + +#: usr/local/www/system_authservers.php:176 +#: usr/local/www/system_authservers.php:177 +#: usr/local/www/system_authservers.php:178 +#: usr/local/www/system_authservers.php:178 +msgid "Bind Password" +msgstr "" + +#: usr/local/www/system_authservers.php:191 +#: usr/local/www/system_authservers.php:707 +#: usr/local/www/system_authservers.php:192 +#: usr/local/www/system_authservers.php:712 +#: usr/local/www/system_authservers.php:193 +#: usr/local/www/system_authservers.php:719 +#: usr/local/www/system_authservers.php:193 +#: usr/local/www/system_authservers.php:719 +msgid "Authentication port value" +msgstr "" + +#: usr/local/www/system_authservers.php:197 +#: usr/local/www/system_authservers.php:713 +#: usr/local/www/system_authservers.php:198 +#: usr/local/www/system_authservers.php:718 +#: usr/local/www/system_authservers.php:199 +#: usr/local/www/system_authservers.php:725 +#: usr/local/www/system_authservers.php:199 +#: usr/local/www/system_authservers.php:725 +msgid "Accounting port value" +msgstr "" + +#: usr/local/www/system_authservers.php:202 +#: usr/local/www/system_authservers.php:686 +#: usr/local/www/system_authservers.php:203 +#: usr/local/www/system_authservers.php:691 +#: usr/local/www/system_authservers.php:204 +#: usr/local/www/system_authservers.php:698 +#: usr/local/www/system_authservers.php:204 +#: usr/local/www/system_authservers.php:698 +msgid "Shared Secret" +msgstr "" + +#: usr/local/www/system_authservers.php:209 +#: usr/local/www/system_authservers.php:210 +#: usr/local/www/system_authservers.php:211 +#: usr/local/www/system_authservers.php:211 +msgid "The host name contains invalid characters." +msgstr "" + +#: usr/local/www/system_authservers.php:212 +#: usr/local/www/system_authservers.php:213 +#: usr/local/www/system_authservers.php:214 +#: usr/local/www/system_authservers.php:214 +msgid "An authentication server with the same name already exists." +msgstr "" + +#: usr/local/www/system_authservers.php:382 +#: usr/local/www/system_authservers.php:383 +#: usr/local/www/system_authservers.php:390 +#: usr/local/www/system_authservers.php:390 +msgid "Please fill the required values." +msgstr "" + +#: usr/local/www/system_authservers.php:388 +#: usr/local/www/system_authservers.php:389 +#: usr/local/www/system_authservers.php:396 +#: usr/local/www/system_authservers.php:396 +msgid "Please fill the bind username/password." +msgstr "" + +#: usr/local/www/system_authservers.php:406 +#: usr/local/www/system_usermanager_settings.php:103 +#: usr/local/www/system_authservers.php:411 +#: usr/local/www/system_authservers.php:418 +#: usr/local/www/system_usermanager_settings.php:104 +#: usr/local/www/system_authservers.php:418 +#: usr/local/www/system_usermanager_settings.php:104 +msgid "Popup blocker detected. Action aborted." +msgstr "" + +#: usr/local/www/system_authservers.php:475 +#: usr/local/www/system_authservers.php:480 +#: usr/local/www/system_authservers.php:487 +#: usr/local/www/system_authservers.php:487 +msgid "LDAP Server Settings" +msgstr "" + +#: usr/local/www/system_authservers.php:478 +#: usr/local/www/system_authservers.php:680 +#: usr/local/www/system_authservers.php:483 +#: usr/local/www/system_authservers.php:685 +#: usr/local/www/system_authservers.php:490 +#: usr/local/www/system_authservers.php:692 +#: usr/local/www/system_authservers.php:490 +#: usr/local/www/system_authservers.php:692 +msgid "Hostname or IP address" +msgstr "" + +#: usr/local/www/system_authservers.php:505 +#: usr/local/www/vpn_openvpn_client.php:629 +#: usr/local/www/vpn_openvpn_server.php:778 +#: usr/local/www/vpn_openvpn_server.php:851 +#: usr/local/www/vpn_openvpn_client.php:634 +#: usr/local/www/vpn_openvpn_server.php:879 +#: usr/local/www/vpn_openvpn_client.php:652 +#: usr/local/www/system_authservers.php:510 +#: usr/local/www/vpn_openvpn_client.php:671 +#: usr/local/www/system_authservers.php:517 +#: usr/local/www/vpn_openvpn_server.php:906 +#: usr/local/www/vpn_openvpn_client.php:671 +#: usr/local/www/system_authservers.php:517 +#: usr/local/www/vpn_openvpn_server.php:906 +msgid "Peer Certificate Authority" +msgstr "" + +#: usr/local/www/system_authservers.php:518 +#: usr/local/www/system_authservers.php:523 +#: usr/local/www/system_authservers.php:530 +#: usr/local/www/system_authservers.php:530 +msgid "This option is used if 'SSL Encrypted' option is choosen." +msgstr "" + +#: usr/local/www/system_authservers.php:519 +#: usr/local/www/system_authservers.php:524 +#: usr/local/www/system_authservers.php:531 +#: usr/local/www/system_authservers.php:531 +msgid "It must match with the CA in the AD otherwise problems will arise." +msgstr "" + +#: usr/local/www/system_authservers.php:541 +#: usr/local/www/system_authservers.php:546 +#: usr/local/www/system_authservers.php:553 +#: usr/local/www/system_authservers.php:553 +msgid "Search scope" +msgstr "" + +#: usr/local/www/system_authservers.php:545 +#: usr/local/www/system_authservers.php:550 +#: usr/local/www/system_authservers.php:557 +#: usr/local/www/system_authservers.php:557 +msgid "Level:" +msgstr "" + +#: usr/local/www/system_authservers.php:560 +#: usr/local/www/system_authservers.php:565 +#: usr/local/www/system_authservers.php:572 +#: usr/local/www/system_authservers.php:572 +msgid "Base DN:" +msgstr "" + +#: usr/local/www/system_authservers.php:570 +#: usr/local/www/system_authservers.php:575 +#: usr/local/www/system_authservers.php:582 +#: usr/local/www/system_authservers.php:582 +msgid "Authentication containers" +msgstr "" + +#: usr/local/www/system_authservers.php:574 +#: usr/local/www/system_authservers.php:579 +#: usr/local/www/system_authservers.php:586 +#: usr/local/www/system_authservers.php:586 +msgid "Containers:" +msgstr "" + +#: usr/local/www/system_authservers.php:578 +#: usr/local/www/system_authservers.php:583 +#: usr/local/www/system_authservers.php:590 +#: usr/local/www/system_authservers.php:590 +msgid "" +"Note: Semi-Colon separated. This will be prepended to the search base dn " +"above or you can specify full container path." +msgstr "" + +#: usr/local/www/system_authservers.php:579 +#: usr/local/www/system_authservers.php:584 +#: usr/local/www/system_authservers.php:591 +#: usr/local/www/system_authservers.php:591 +msgid "Example: CN=Users;DC=example" +msgstr "" + +#: usr/local/www/system_authservers.php:580 +#: usr/local/www/system_authservers.php:585 +#: usr/local/www/system_authservers.php:592 +#: usr/local/www/system_authservers.php:592 +msgid "Example: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com " +msgstr "" + +#: usr/local/www/system_authservers.php:587 +#: usr/local/www/system_authservers.php:592 +#: usr/local/www/system_authservers.php:599 +#: usr/local/www/system_authservers.php:599 +msgid "Extended Query" +msgstr "" + +#: usr/local/www/system_authservers.php:597 +#: usr/local/www/system_authservers.php:602 +#: usr/local/www/system_authservers.php:609 +#: usr/local/www/system_authservers.php:609 +msgid "" +"Example: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,DC=example," +"DC=com " +msgstr "" + +#: usr/local/www/system_authservers.php:604 +#: usr/local/www/system_authservers.php:609 +#: usr/local/www/system_authservers.php:616 +#: usr/local/www/system_authservers.php:616 +msgid "Bind credentials" +msgstr "" + +#: usr/local/www/system_authservers.php:612 +#: usr/local/www/system_authservers.php:617 +#: usr/local/www/system_authservers.php:624 +#: usr/local/www/system_authservers.php:624 +msgid "Use anonymous binds to resolve distinguished names" +msgstr "" + +#: usr/local/www/system_authservers.php:621 +#: usr/local/www/system_authservers.php:626 +#: usr/local/www/system_authservers.php:633 +#: usr/local/www/system_authservers.php:633 +msgid "User DN:" +msgstr "" + +#: usr/local/www/system_authservers.php:637 +#: usr/local/www/system_authservers.php:642 +#: usr/local/www/system_authservers.php:649 +#: usr/local/www/system_authservers.php:649 +msgid "Initial Template" +msgstr "" + +#: usr/local/www/system_authservers.php:653 +#: usr/local/www/system_authservers.php:658 +#: usr/local/www/system_authservers.php:665 +#: usr/local/www/system_authservers.php:665 +msgid "User naming attribute" +msgstr "" + +#: usr/local/www/system_authservers.php:659 +#: usr/local/www/system_authservers.php:664 +#: usr/local/www/system_authservers.php:671 +#: usr/local/www/system_authservers.php:671 +msgid "Group naming attribute" +msgstr "" + +#: usr/local/www/system_authservers.php:677 +#: usr/local/www/system_authservers.php:682 +#: usr/local/www/system_authservers.php:689 +#: usr/local/www/system_authservers.php:689 +msgid "Radius Server Settings" +msgstr "" + +#: usr/local/www/system_authservers.php:692 +#: usr/local/www/system_authservers.php:697 +#: usr/local/www/system_authservers.php:704 +#: usr/local/www/system_authservers.php:704 +msgid "Services offered" +msgstr "" + +#: usr/local/www/system_authservers.php:737 +#: usr/local/www/system_authservers.php:743 +#: usr/local/www/system_authservers.php:759 +#: usr/local/www/system_authservers.php:759 +msgid "Server Name" +msgstr "" + +#: usr/local/www/system_authservers.php:739 +#: usr/local/www/system_authservers.php:745 +#: usr/local/www/system_authservers.php:761 usr/local/www/diag_dns.php:154 +#: usr/local/www/system_authservers.php:761 usr/local/www/diag_dns.php:154 +msgid "Host Name" +msgstr "" + +#: usr/local/www/system_authservers.php:756 +#: usr/local/www/vpn_openvpn_server.php:1479 +#: usr/local/www/vpn_openvpn_server.php:1621 +#: usr/local/www/vpn_openvpn_server.php:1662 +#: usr/local/www/system_authservers.php:764 +#: usr/local/www/system_authservers.php:780 +#: usr/local/www/vpn_openvpn_server.php:1714 +#: usr/local/www/system_authservers.php:797 +#: usr/local/www/system_authservers.php:797 +#: usr/local/www/vpn_openvpn_server.php:1714 +msgid "edit server" +msgstr "" + +#: usr/local/www/system_authservers.php:759 +#: usr/local/www/system_authservers.php:767 +#: usr/local/www/system_authservers.php:783 +#: usr/local/www/system_authservers.php:800 +#: usr/local/www/system_authservers.php:800 +msgid "Do you really want to delete this Server?" +msgstr "" + +#: usr/local/www/system_authservers.php:760 +#: usr/local/www/vpn_openvpn_server.php:1483 +#: usr/local/www/vpn_openvpn_server.php:1625 +#: usr/local/www/vpn_openvpn_server.php:1666 +#: usr/local/www/system_authservers.php:768 +#: usr/local/www/system_authservers.php:784 +#: usr/local/www/vpn_openvpn_server.php:1718 +#: usr/local/www/system_authservers.php:801 +#: usr/local/www/system_authservers.php:801 +#: usr/local/www/vpn_openvpn_server.php:1718 +msgid "delete server" +msgstr "" + +#: usr/local/www/system_authservers.php:772 +#: usr/local/www/vpn_openvpn_server.php:1496 +#: usr/local/www/vpn_openvpn_server.php:1638 +#: usr/local/www/vpn_openvpn_server.php:1679 +#: usr/local/www/system_authservers.php:782 +#: usr/local/www/system_authservers.php:798 +#: usr/local/www/vpn_openvpn_server.php:1731 +#: usr/local/www/system_authservers.php:770 +#: usr/local/www/system_authservers.php:770 +#: usr/local/www/vpn_openvpn_server.php:1731 +msgid "add server" +msgstr "" + +#: usr/local/www/system_authservers.php:779 +#: usr/local/www/system_authservers.php:789 +#: usr/local/www/system_authservers.php:805 +#: usr/local/www/system_authservers.php:777 +#: usr/local/www/system_authservers.php:777 +msgid "Additional authentication servers can be added here." +msgstr "" + +#: usr/local/www/system_camanager.php:44 usr/local/www/system_camanager.php:44 +msgid "Import an existing Certificate Authority" +msgstr "" + +#: usr/local/www/system_camanager.php:45 usr/local/www/system_camanager.php:45 +msgid "Create an internal Certificate Authority" +msgstr "" + +#: usr/local/www/system_camanager.php:46 usr/local/www/system_camanager.php:46 +msgid "Create an intermediate Certificate Authority" +msgstr "" + +#: usr/local/www/system_camanager.php:50 usr/local/www/system_camanager.php:51 +#: usr/local/www/system_camanager.php:51 +msgid "Certificate Authority Manager" +msgstr "" + +#: usr/local/www/system_camanager.php:95 usr/local/www/system_camanager.php:96 +#: usr/local/www/system_camanager.php:96 +#, php-format +msgid "Certificate Authority %s and its CRLs (if any) successfully deleted" +msgstr "" + +#: usr/local/www/system_camanager.php:166 +#: usr/local/www/system_camanager.php:402 +#: usr/local/www/system_certmanager.php:165 +#: usr/local/www/system_certmanager.php:511 +#: usr/local/www/system_certmanager.php:193 +#: usr/local/www/system_certmanager.php:610 +#: usr/local/www/system_camanager.php:168 +#: usr/local/www/system_camanager.php:409 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/system_certmanager.php:619 +#: usr/local/www/system_certmanager.php:620 +#: usr/local/www/system_camanager.php:168 +#: usr/local/www/system_camanager.php:409 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/system_certmanager.php:620 +msgid "Certificate data" +msgstr "" + +#: usr/local/www/system_camanager.php:170 +#: usr/local/www/system_camanager.php:172 +#: usr/local/www/system_camanager.php:172 +msgid "Encrypted private keys are not yet supported." +msgstr "" + +#: usr/local/www/system_camanager.php:178 +#: usr/local/www/system_camanager.php:194 +#: usr/local/www/system_camanager.php:453 +#: usr/local/www/system_certmanager.php:178 +#: usr/local/www/system_certmanager.php:194 +#: usr/local/www/system_certmanager.php:566 +#: usr/local/www/system_certmanager.php:656 +#: usr/local/www/system_usermanager.php:191 +#: usr/local/www/system_usermanager.php:725 +#: usr/local/www/system_certmanager.php:206 +#: usr/local/www/system_certmanager.php:223 +#: usr/local/www/system_certmanager.php:665 +#: usr/local/www/system_certmanager.php:820 +#: usr/local/www/system_usermanager.php:723 +#: usr/local/www/system_camanager.php:454 +#: usr/local/www/system_camanager.php:180 +#: usr/local/www/system_camanager.php:196 +#: usr/local/www/system_camanager.php:461 +#: usr/local/www/system_certmanager.php:209 +#: usr/local/www/system_certmanager.php:226 +#: usr/local/www/system_certmanager.php:674 +#: usr/local/www/system_certmanager.php:845 +#: usr/local/www/system_certmanager.php:675 +#: usr/local/www/system_certmanager.php:849 +#: usr/local/www/system_camanager.php:180 +#: usr/local/www/system_camanager.php:196 +#: usr/local/www/system_camanager.php:461 +#: usr/local/www/system_certmanager.php:209 +#: usr/local/www/system_certmanager.php:226 +#: usr/local/www/system_certmanager.php:675 +#: usr/local/www/system_certmanager.php:849 +#: usr/local/www/system_usermanager.php:191 +#: usr/local/www/system_usermanager.php:723 +msgid "Key length" +msgstr "" + +#: usr/local/www/system_camanager.php:179 +#: usr/local/www/system_camanager.php:195 +#: usr/local/www/system_camanager.php:469 +#: usr/local/www/system_certmanager.php:179 +#: usr/local/www/system_certmanager.php:582 +#: usr/local/www/system_crlmanager.php:366 +#: usr/local/www/system_usermanager.php:192 +#: usr/local/www/system_usermanager.php:739 +#: usr/local/www/vpn_ipsec_phase1.php:758 +#: usr/local/www/vpn_ipsec_phase2.php:619 +#: usr/local/www/system_certmanager.php:208 +#: usr/local/www/system_certmanager.php:698 +#: usr/local/www/system_usermanager.php:737 +#: usr/local/www/system_camanager.php:470 +#: usr/local/www/vpn_ipsec_phase2.php:645 +#: usr/local/www/vpn_ipsec_phase1.php:771 +#: usr/local/www/system_crlmanager.php:367 +#: usr/local/www/vpn_ipsec_phase2.php:741 +#: usr/local/www/vpn_ipsec_phase1.php:768 +#: usr/local/www/system_camanager.php:181 +#: usr/local/www/system_camanager.php:197 +#: usr/local/www/system_camanager.php:493 +#: usr/local/www/system_certmanager.php:211 +#: usr/local/www/system_certmanager.php:723 +#: usr/local/www/vpn_ipsec_phase1.php:789 +#: usr/local/www/vpn_ipsec_phase2.php:762 +#: usr/local/www/system_certmanager.php:724 +#: usr/local/www/system_camanager.php:181 +#: usr/local/www/system_camanager.php:197 +#: usr/local/www/system_camanager.php:493 +#: usr/local/www/system_certmanager.php:211 +#: usr/local/www/system_certmanager.php:724 +#: usr/local/www/system_crlmanager.php:367 +#: usr/local/www/vpn_ipsec_phase1.php:789 +#: usr/local/www/system_usermanager.php:192 +#: usr/local/www/system_usermanager.php:737 +#: usr/local/www/vpn_ipsec_phase2.php:762 +msgid "Lifetime" +msgstr "" + +#: usr/local/www/system_camanager.php:180 +#: usr/local/www/system_camanager.php:196 +#: usr/local/www/system_certmanager.php:180 +#: usr/local/www/system_certmanager.php:195 +#: usr/local/www/system_certmanager.php:209 +#: usr/local/www/system_certmanager.php:224 +#: usr/local/www/system_camanager.php:182 +#: usr/local/www/system_camanager.php:198 +#: usr/local/www/system_certmanager.php:212 +#: usr/local/www/system_certmanager.php:227 +#: usr/local/www/system_camanager.php:182 +#: usr/local/www/system_camanager.php:198 +#: usr/local/www/system_certmanager.php:212 +#: usr/local/www/system_certmanager.php:227 +msgid "Distinguished name Country Code" +msgstr "" + +#: usr/local/www/system_camanager.php:181 +#: usr/local/www/system_camanager.php:197 +#: usr/local/www/system_certmanager.php:181 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/system_certmanager.php:210 +#: usr/local/www/system_certmanager.php:225 +#: usr/local/www/system_camanager.php:183 +#: usr/local/www/system_camanager.php:199 +#: usr/local/www/system_certmanager.php:213 +#: usr/local/www/system_certmanager.php:228 +#: usr/local/www/system_camanager.php:183 +#: usr/local/www/system_camanager.php:199 +#: usr/local/www/system_certmanager.php:213 +#: usr/local/www/system_certmanager.php:228 +msgid "Distinguished name State or Province" +msgstr "" + +#: usr/local/www/system_camanager.php:182 +#: usr/local/www/system_camanager.php:198 +#: usr/local/www/system_certmanager.php:182 +#: usr/local/www/system_certmanager.php:197 +#: usr/local/www/system_certmanager.php:211 +#: usr/local/www/system_certmanager.php:226 +#: usr/local/www/system_camanager.php:184 +#: usr/local/www/system_camanager.php:200 +#: usr/local/www/system_certmanager.php:214 +#: usr/local/www/system_certmanager.php:229 +#: usr/local/www/system_camanager.php:184 +#: usr/local/www/system_camanager.php:200 +#: usr/local/www/system_certmanager.php:214 +#: usr/local/www/system_certmanager.php:229 +msgid "Distinguished name City" +msgstr "" + +#: usr/local/www/system_camanager.php:183 +#: usr/local/www/system_camanager.php:199 +#: usr/local/www/system_certmanager.php:183 +#: usr/local/www/system_certmanager.php:198 +#: usr/local/www/system_certmanager.php:212 +#: usr/local/www/system_certmanager.php:227 +#: usr/local/www/system_camanager.php:185 +#: usr/local/www/system_camanager.php:201 +#: usr/local/www/system_certmanager.php:215 +#: usr/local/www/system_certmanager.php:230 +#: usr/local/www/system_camanager.php:185 +#: usr/local/www/system_camanager.php:201 +#: usr/local/www/system_certmanager.php:215 +#: usr/local/www/system_certmanager.php:230 +msgid "Distinguished name Organization" +msgstr "" + +#: usr/local/www/system_camanager.php:184 +#: usr/local/www/system_camanager.php:200 +#: usr/local/www/system_certmanager.php:184 +#: usr/local/www/system_certmanager.php:199 +#: usr/local/www/system_certmanager.php:213 +#: usr/local/www/system_certmanager.php:228 +#: usr/local/www/system_camanager.php:186 +#: usr/local/www/system_camanager.php:202 +#: usr/local/www/system_certmanager.php:216 +#: usr/local/www/system_certmanager.php:231 +#: usr/local/www/system_camanager.php:186 +#: usr/local/www/system_camanager.php:202 +#: usr/local/www/system_certmanager.php:216 +#: usr/local/www/system_certmanager.php:231 +msgid "Distinguished name Email Address" +msgstr "" + +#: usr/local/www/system_camanager.php:185 +#: usr/local/www/system_camanager.php:201 +#: usr/local/www/system_certmanager.php:185 +#: usr/local/www/system_certmanager.php:200 +#: usr/local/www/system_certmanager.php:214 +#: usr/local/www/system_certmanager.php:229 +#: usr/local/www/system_camanager.php:187 +#: usr/local/www/system_camanager.php:203 +#: usr/local/www/system_certmanager.php:217 +#: usr/local/www/system_certmanager.php:232 +#: usr/local/www/system_camanager.php:187 +#: usr/local/www/system_camanager.php:203 +#: usr/local/www/system_certmanager.php:217 +#: usr/local/www/system_certmanager.php:232 +msgid "Distinguished name Common Name" +msgstr "" + +#: usr/local/www/system_camanager.php:193 +#: usr/local/www/system_camanager.php:436 +#: usr/local/www/system_camanager.php:437 +#: usr/local/www/system_camanager.php:195 +#: usr/local/www/system_camanager.php:444 +#: usr/local/www/system_camanager.php:195 +#: usr/local/www/system_camanager.php:444 +msgid "Signing Certificate Authority" +msgstr "" + +#: usr/local/www/system_camanager.php:348 +#: usr/local/www/system_certmanager.php:458 +#: usr/local/www/system_crlmanager.php:283 +#: usr/local/www/system_certmanager.php:557 +#: usr/local/www/system_crlmanager.php:284 +#: usr/local/www/system_camanager.php:355 +#: usr/local/www/system_certmanager.php:566 +#: usr/local/www/system_certmanager.php:567 +#: usr/local/www/system_camanager.php:355 +#: usr/local/www/system_certmanager.php:567 +#: usr/local/www/system_crlmanager.php:284 +msgid "CAs" +msgstr "" + +#: usr/local/www/system_camanager.php:349 +#: usr/local/www/system_camanager.php:568 +#: usr/local/www/system_certmanager.php:459 +#: usr/local/www/system_crlmanager.php:284 +#: usr/local/www/system_crlmanager.php:489 +#: usr/local/www/system_certmanager.php:558 +#: usr/local/www/system_camanager.php:569 +#: usr/local/www/system_crlmanager.php:285 +#: usr/local/www/system_crlmanager.php:522 +#: usr/local/www/system_camanager.php:356 +#: usr/local/www/system_camanager.php:593 +#: usr/local/www/system_certmanager.php:567 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_camanager.php:356 +#: usr/local/www/system_camanager.php:593 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_crlmanager.php:285 +#: usr/local/www/system_crlmanager.php:522 +msgid "Certificates" +msgstr "" + +#: usr/local/www/system_camanager.php:350 +#: usr/local/www/system_certmanager.php:460 +#: usr/local/www/system_crlmanager.php:285 +#: usr/local/www/system_certmanager.php:559 +#: usr/local/www/system_crlmanager.php:286 +#: usr/local/www/system_camanager.php:357 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_certmanager.php:569 +#: usr/local/www/system_camanager.php:357 +#: usr/local/www/system_certmanager.php:569 +#: usr/local/www/system_crlmanager.php:286 +msgid "Certificate Revocation" +msgstr "" + +#: usr/local/www/system_camanager.php:376 +#: usr/local/www/system_certmanager.php:475 +#: usr/local/www/system_crlmanager.php:300 +#: usr/local/www/system_certmanager.php:574 +#: usr/local/www/system_crlmanager.php:301 +#: usr/local/www/system_camanager.php:383 +#: usr/local/www/system_certmanager.php:583 +#: usr/local/www/system_certmanager.php:584 +#: usr/local/www/system_camanager.php:383 +#: usr/local/www/system_certmanager.php:584 +#: usr/local/www/system_crlmanager.php:301 +msgid "Method" +msgstr "" + +#: usr/local/www/system_camanager.php:398 +#: usr/local/www/system_camanager.php:405 +#: usr/local/www/system_camanager.php:405 +msgid "Existing Certificate Authority" +msgstr "" + +#: usr/local/www/system_camanager.php:410 +#: usr/local/www/system_camanager.php:417 +#: usr/local/www/system_camanager.php:417 +msgid "Certificate Private Key" +msgstr "" + +#: usr/local/www/system_camanager.php:410 +#: usr/local/www/system_camanager.php:417 +#: usr/local/www/system_camanager.php:417 +msgid "(optional)" +msgstr "" + +#: usr/local/www/system_camanager.php:414 +#: usr/local/www/system_camanager.php:421 +#: usr/local/www/system_camanager.php:421 +msgid "" +"Paste the private key for the above certificate here. This is optional in " +"most cases, but required if you need to generate a Certificate Revocation " +"List (CRL)." +msgstr "" + +#: usr/local/www/system_camanager.php:420 +#: usr/local/www/system_crlmanager.php:374 +#: usr/local/www/system_crlmanager.php:375 +#: usr/local/www/system_crlmanager.php:375 +msgid "Serial" +msgstr "" + +#: usr/local/www/system_camanager.php:433 +#: usr/local/www/system_camanager.php:434 +#: usr/local/www/system_camanager.php:441 +#: usr/local/www/system_camanager.php:441 +msgid "Internal Certificate Authority" +msgstr "" + +#: usr/local/www/system_camanager.php:472 +#: usr/local/www/system_certmanager.php:585 +#: usr/local/www/system_crlmanager.php:369 +#: usr/local/www/system_certmanager.php:701 +#: usr/local/www/system_camanager.php:473 +#: usr/local/www/system_crlmanager.php:370 +#: usr/local/www/system_camanager.php:496 +#: usr/local/www/system_certmanager.php:726 +#: usr/local/www/system_certmanager.php:727 +#: usr/local/www/system_camanager.php:496 +#: usr/local/www/system_certmanager.php:727 +#: usr/local/www/system_crlmanager.php:370 +msgid "days" +msgstr "" + +#: usr/local/www/system_camanager.php:480 +#: usr/local/www/system_certmanager.php:593 +#: usr/local/www/system_certmanager.php:676 +#: usr/local/www/system_certmanager.php:709 +#: usr/local/www/system_certmanager.php:842 +#: usr/local/www/system_camanager.php:481 +#: usr/local/www/system_camanager.php:504 +#: usr/local/www/system_certmanager.php:734 +#: usr/local/www/system_certmanager.php:883 +#: usr/local/www/system_certmanager.php:735 +#: usr/local/www/system_certmanager.php:887 +#: usr/local/www/system_camanager.php:504 +#: usr/local/www/system_certmanager.php:735 +#: usr/local/www/system_certmanager.php:887 +msgid "Country Code" +msgstr "" + +#: usr/local/www/system_camanager.php:494 +#: usr/local/www/system_certmanager.php:599 +#: usr/local/www/system_certmanager.php:690 +#: usr/local/www/system_certmanager.php:715 +#: usr/local/www/system_certmanager.php:856 +#: usr/local/www/system_camanager.php:495 +#: usr/local/www/system_camanager.php:519 +#: usr/local/www/system_certmanager.php:740 +#: usr/local/www/system_certmanager.php:898 +#: usr/local/www/system_certmanager.php:741 +#: usr/local/www/system_certmanager.php:902 +#: usr/local/www/system_camanager.php:519 +#: usr/local/www/system_certmanager.php:741 +#: usr/local/www/system_certmanager.php:902 +msgid "State or Province" +msgstr "" + +#: usr/local/www/system_camanager.php:498 +#: usr/local/www/system_camanager.php:508 +#: usr/local/www/system_camanager.php:518 +#: usr/local/www/system_camanager.php:528 +#: usr/local/www/system_camanager.php:538 +#: usr/local/www/system_camanager.php:499 +#: usr/local/www/system_camanager.php:509 +#: usr/local/www/system_camanager.php:519 +#: usr/local/www/system_camanager.php:529 +#: usr/local/www/system_camanager.php:539 +#: usr/local/www/system_camanager.php:523 +#: usr/local/www/system_camanager.php:533 +#: usr/local/www/system_camanager.php:543 +#: usr/local/www/system_camanager.php:553 +#: usr/local/www/system_camanager.php:563 +#: usr/local/www/system_camanager.php:523 +#: usr/local/www/system_camanager.php:533 +#: usr/local/www/system_camanager.php:543 +#: usr/local/www/system_camanager.php:553 +#: usr/local/www/system_camanager.php:563 +msgid "ex:" +msgstr "" + +#: usr/local/www/system_camanager.php:500 +#: usr/local/www/system_certmanager.php:696 +#: usr/local/www/system_certmanager.php:862 +#: usr/local/www/system_camanager.php:501 +#: usr/local/www/system_camanager.php:525 +#: usr/local/www/system_certmanager.php:904 +#: usr/local/www/system_certmanager.php:908 +#: usr/local/www/system_camanager.php:525 +#: usr/local/www/system_certmanager.php:908 +msgid "Texas" +msgstr "" + +#: usr/local/www/system_camanager.php:504 +#: usr/local/www/system_certmanager.php:605 +#: usr/local/www/system_certmanager.php:700 +#: usr/local/www/system_certmanager.php:721 +#: usr/local/www/system_certmanager.php:866 +#: usr/local/www/system_camanager.php:505 +#: usr/local/www/system_camanager.php:529 +#: usr/local/www/system_certmanager.php:746 +#: usr/local/www/system_certmanager.php:908 +#: usr/local/www/system_certmanager.php:747 +#: usr/local/www/system_certmanager.php:912 +#: usr/local/www/system_camanager.php:529 +#: usr/local/www/system_certmanager.php:747 +#: usr/local/www/system_certmanager.php:912 +msgid "City" +msgstr "" + +#: usr/local/www/system_camanager.php:510 +#: usr/local/www/system_certmanager.php:706 +#: usr/local/www/system_certmanager.php:872 +#: usr/local/www/system_camanager.php:511 +#: usr/local/www/system_camanager.php:535 +#: usr/local/www/system_certmanager.php:914 +#: usr/local/www/system_certmanager.php:918 +#: usr/local/www/system_camanager.php:535 +#: usr/local/www/system_certmanager.php:918 +msgid "Austin" +msgstr "" + +#: usr/local/www/system_camanager.php:514 +#: usr/local/www/system_certmanager.php:611 +#: usr/local/www/system_certmanager.php:710 +#: usr/local/www/system_certmanager.php:727 +#: usr/local/www/system_certmanager.php:876 +#: usr/local/www/system_camanager.php:515 +#: usr/local/www/system_camanager.php:539 +#: usr/local/www/system_certmanager.php:752 +#: usr/local/www/system_certmanager.php:918 +#: usr/local/www/system_certmanager.php:753 +#: usr/local/www/system_certmanager.php:922 +#: usr/local/www/system_camanager.php:539 +#: usr/local/www/system_certmanager.php:753 +#: usr/local/www/system_certmanager.php:922 +msgid "Organization" +msgstr "" + +#: usr/local/www/system_camanager.php:520 +#: usr/local/www/system_certmanager.php:716 +#: usr/local/www/system_certmanager.php:882 +#: usr/local/www/system_camanager.php:521 +#: usr/local/www/system_camanager.php:545 +#: usr/local/www/system_certmanager.php:924 +#: usr/local/www/system_certmanager.php:928 +#: usr/local/www/system_camanager.php:545 +#: usr/local/www/system_certmanager.php:928 +msgid "My Company Inc." +msgstr "" + +#: usr/local/www/system_camanager.php:530 +#: usr/local/www/system_camanager.php:531 +#: usr/local/www/system_camanager.php:555 +#: usr/local/www/system_camanager.php:555 +msgid "admin@mycompany.com" +msgstr "" + +#: usr/local/www/system_camanager.php:540 +#: usr/local/www/system_camanager.php:541 +#: usr/local/www/system_camanager.php:565 +#: usr/local/www/system_camanager.php:565 +msgid "internal-ca" +msgstr "" + +#: usr/local/www/system_camanager.php:566 +#: usr/local/www/system_crlmanager.php:488 +#: usr/local/www/system_camanager.php:567 +#: usr/local/www/system_crlmanager.php:521 +#: usr/local/www/system_camanager.php:591 +#: usr/local/www/system_camanager.php:591 +#: usr/local/www/system_crlmanager.php:521 +msgid "Internal" +msgstr "" + +#: usr/local/www/system_camanager.php:567 +#: usr/local/www/system_certmanager.php:855 +#: usr/local/www/system_certmanager.php:1021 +#: usr/local/www/system_camanager.php:568 +#: usr/local/www/system_camanager.php:592 +#: usr/local/www/system_certmanager.php:1063 +#: usr/local/www/system_certmanager.php:1067 +#: usr/local/www/system_camanager.php:592 +#: usr/local/www/system_certmanager.php:1067 +msgid "Issuer" +msgstr "" + +#: usr/local/www/system_camanager.php:569 +#: usr/local/www/system_certmanager.php:856 +#: usr/local/www/system_certmanager.php:1022 +#: usr/local/www/system_camanager.php:570 +#: usr/local/www/system_camanager.php:594 +#: usr/local/www/system_certmanager.php:1064 +#: usr/local/www/system_certmanager.php:1068 +#: usr/local/www/system_camanager.php:594 +#: usr/local/www/system_certmanager.php:1068 +msgid "Distinguished Name" +msgstr "" + +#: usr/local/www/system_camanager.php:579 +#: usr/local/www/system_certmanager.php:869 +#: usr/local/www/system_certmanager.php:1036 +#: usr/local/www/system_camanager.php:580 +#: usr/local/www/system_camanager.php:605 +#: usr/local/www/system_certmanager.php:1079 +#: usr/local/www/system_certmanager.php:1083 +#: usr/local/www/system_camanager.php:605 +#: usr/local/www/system_certmanager.php:1083 +msgid "self-signed" +msgstr "" + +#: usr/local/www/system_camanager.php:581 +#: usr/local/www/system_certmanager.php:871 +#: usr/local/www/system_certmanager.php:1038 +#: usr/local/www/system_camanager.php:582 +#: usr/local/www/system_camanager.php:607 +#: usr/local/www/system_certmanager.php:1081 +#: usr/local/www/system_certmanager.php:1085 +#: usr/local/www/system_camanager.php:607 +#: usr/local/www/system_certmanager.php:1085 +msgid "external" +msgstr "" + +#: usr/local/www/system_camanager.php:626 +#: usr/local/www/system_camanager.php:627 +#: usr/local/www/system_camanager.php:665 +#: usr/local/www/system_camanager.php:665 +msgid "edit CA" +msgstr "" + +#: usr/local/www/system_camanager.php:629 +#: usr/local/www/system_camanager.php:630 +#: usr/local/www/system_camanager.php:668 +#: usr/local/www/system_camanager.php:668 +msgid "export CA cert" +msgstr "" + +#: usr/local/www/system_camanager.php:633 +#: usr/local/www/system_camanager.php:634 +#: usr/local/www/system_camanager.php:672 +#: usr/local/www/system_camanager.php:672 +msgid "export CA private key" +msgstr "" + +#: usr/local/www/system_camanager.php:636 +#: usr/local/www/system_camanager.php:637 +#: usr/local/www/system_camanager.php:675 +#: usr/local/www/system_camanager.php:675 +msgid "" +"Do you really want to delete this Certificate Authority and its CRLs, and " +"unreference any associated certificates?" +msgstr "" + +#: usr/local/www/system_camanager.php:637 +#: usr/local/www/system_camanager.php:638 +#: usr/local/www/system_camanager.php:676 +#: usr/local/www/system_camanager.php:676 +msgid "delete ca" +msgstr "" + +#: usr/local/www/system_camanager.php:649 +#: usr/local/www/system_certmanager.php:952 +#: usr/local/www/system_certmanager.php:1132 +#: usr/local/www/system_camanager.php:650 +#: usr/local/www/system_certmanager.php:1135 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1191 +#: usr/local/www/system_certmanager.php:1195 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1195 +msgid "add or import ca" +msgstr "" + +#: usr/local/www/system_camanager.php:649 +#: usr/local/www/system_certmanager.php:952 +#: usr/local/www/system_certmanager.php:1132 +#: usr/local/www/system_camanager.php:650 +#: usr/local/www/system_certmanager.php:1135 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1191 +#: usr/local/www/system_certmanager.php:1195 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1195 +msgid "add ca" +msgstr "" + +#: usr/local/www/system_camanager.php:656 +#: usr/local/www/system_camanager.php:657 +#: usr/local/www/system_camanager.php:695 +#: usr/local/www/system_camanager.php:695 +msgid "Additional trusted Certificate Authorities can be added here." +msgstr "" + +#: usr/local/www/system_certmanager.php:44 +#: usr/local/www/system_certmanager.php:44 +msgid "Import an existing Certificate" +msgstr "" + +#: usr/local/www/system_certmanager.php:45 +#: usr/local/www/system_certmanager.php:45 +msgid "Create an internal Certificate" +msgstr "" + +#: usr/local/www/system_certmanager.php:46 +#: usr/local/www/system_certmanager.php:46 +msgid "Create a Certificate Signing Request" +msgstr "" + +#: usr/local/www/system_certmanager.php:51 +#: usr/local/www/system_certmanager.php:56 +#: usr/local/www/system_certmanager.php:57 +#: usr/local/www/system_certmanager.php:57 +msgid "Certificate Manager" +msgstr "" + +#: usr/local/www/system_certmanager.php:57 +#: usr/local/www/system_certmanager.php:62 +#: usr/local/www/system_certmanager.php:63 +#: usr/local/www/system_certmanager.php:63 +msgid "Choose an existing certificate" +msgstr "" + +#: usr/local/www/system_certmanager.php:96 +#: usr/local/www/system_certmanager.php:101 +#: usr/local/www/system_certmanager.php:102 +#: usr/local/www/system_certmanager.php:102 +#, php-format +msgid "Certificate %s successfully deleted" +msgstr "" + +#: usr/local/www/system_certmanager.php:166 +#: usr/local/www/system_certmanager.php:194 +#: usr/local/www/system_certmanager.php:197 +#: usr/local/www/system_certmanager.php:197 +msgid "Key data" +msgstr "" + +#: usr/local/www/system_certmanager.php:177 +#: usr/local/www/system_certmanager.php:549 +#: usr/local/www/system_usermanager.php:190 +#: usr/local/www/system_usermanager.php:711 +#: usr/local/www/system_certmanager.php:205 +#: usr/local/www/system_certmanager.php:648 +#: usr/local/www/system_usermanager.php:709 +#: usr/local/www/system_certmanager.php:208 +#: usr/local/www/system_certmanager.php:657 +#: usr/local/www/system_certmanager.php:658 +#: usr/local/www/system_certmanager.php:208 +#: usr/local/www/system_certmanager.php:658 +#: usr/local/www/system_usermanager.php:190 +#: usr/local/www/system_usermanager.php:709 +msgid "Certificate authority" +msgstr "" + +#: usr/local/www/system_certmanager.php:205 +#: usr/local/www/system_certmanager.php:234 +#: usr/local/www/system_certmanager.php:237 +#: usr/local/www/system_certmanager.php:237 +msgid "Existing Certificate Choice" +msgstr "" + +#: usr/local/www/system_certmanager.php:300 +#: usr/local/www/system_certmanager.php:796 +#: usr/local/www/system_certmanager.php:840 +#: usr/local/www/system_certmanager.php:387 +#: usr/local/www/system_certmanager.php:962 +#: usr/local/www/system_certmanager.php:1006 +#: usr/local/www/system_certmanager.php:396 +#: usr/local/www/system_certmanager.php:1004 +#: usr/local/www/system_certmanager.php:1048 +#: usr/local/www/system_certmanager.php:1008 +#: usr/local/www/system_certmanager.php:1052 +#: usr/local/www/system_certmanager.php:396 +#: usr/local/www/system_certmanager.php:1008 +#: usr/local/www/system_certmanager.php:1052 +msgid "Update" +msgstr "" + +#: usr/local/www/system_certmanager.php:308 +#: usr/local/www/system_certmanager.php:822 +#: usr/local/www/system_certmanager.php:395 +#: usr/local/www/system_certmanager.php:988 +#: usr/local/www/system_certmanager.php:404 +#: usr/local/www/system_certmanager.php:1030 +#: usr/local/www/system_certmanager.php:404 +msgid "Final Certificate data" +msgstr "" + +#: usr/local/www/system_certmanager.php:328 +#: usr/local/www/system_certmanager.php:415 +#: usr/local/www/system_certmanager.php:424 +#: usr/local/www/system_certmanager.php:424 +#, php-format +msgid "The certificate modulus does not match the signing request modulus." +msgstr "" + +#: usr/local/www/system_certmanager.php:507 +#: usr/local/www/system_certmanager.php:606 +#: usr/local/www/system_certmanager.php:615 +#: usr/local/www/system_certmanager.php:616 +#: usr/local/www/system_certmanager.php:616 +msgid "Import Certificate" +msgstr "" + +#: usr/local/www/system_certmanager.php:519 +#: usr/local/www/system_certmanager.php:618 +#: usr/local/www/system_certmanager.php:627 +#: usr/local/www/system_certmanager.php:628 +#: usr/local/www/system_certmanager.php:628 +msgid "Private key data" +msgstr "" + +#: usr/local/www/system_certmanager.php:523 +#: usr/local/www/system_certmanager.php:622 +#: usr/local/www/system_certmanager.php:631 +#: usr/local/www/system_certmanager.php:632 +#: usr/local/www/system_certmanager.php:632 +msgid "Paste a private key in X.509 PEM format here." +msgstr "" + +#: usr/local/www/system_certmanager.php:533 +#: usr/local/www/system_certmanager.php:632 +#: usr/local/www/system_certmanager.php:641 +#: usr/local/www/system_certmanager.php:642 +#: usr/local/www/system_certmanager.php:642 +msgid "Internal Certificate" +msgstr "" + +#: usr/local/www/system_certmanager.php:540 +#: usr/local/www/system_certmanager.php:639 +#: usr/local/www/system_certmanager.php:648 +#: usr/local/www/system_certmanager.php:649 +#: usr/local/www/system_certmanager.php:649 +msgid "No internal Certificate Authorities have been defined. You must" +msgstr "" + +#: usr/local/www/system_certmanager.php:542 +#: usr/local/www/system_certmanager.php:641 +#: usr/local/www/system_certmanager.php:650 +#: usr/local/www/system_certmanager.php:651 +#: usr/local/www/system_certmanager.php:651 +msgid "an internal CA before creating an internal certificate." +msgstr "" + +#: usr/local/www/system_certmanager.php:623 +#: usr/local/www/system_certmanager.php:726 +#: usr/local/www/system_certmanager.php:739 +#: usr/local/www/system_certmanager.php:892 +#: usr/local/www/system_certmanager.php:764 +#: usr/local/www/system_certmanager.php:934 +#: usr/local/www/system_certmanager.php:765 +#: usr/local/www/system_certmanager.php:938 +#: usr/local/www/system_certmanager.php:765 +#: usr/local/www/system_certmanager.php:938 +msgid "webadmin@mycompany.com" +msgstr "" + +#: usr/local/www/system_certmanager.php:637 +#: usr/local/www/system_certmanager.php:736 +#: usr/local/www/system_certmanager.php:753 +#: usr/local/www/system_certmanager.php:902 +#: usr/local/www/system_certmanager.php:778 +#: usr/local/www/system_certmanager.php:944 +#: usr/local/www/system_certmanager.php:779 +#: usr/local/www/system_certmanager.php:948 +#: usr/local/www/system_certmanager.php:779 +#: usr/local/www/system_certmanager.php:948 +msgid "www.example.com" +msgstr "" + +#: usr/local/www/system_certmanager.php:653 +#: usr/local/www/system_certmanager.php:817 +#: usr/local/www/system_certmanager.php:842 +#: usr/local/www/system_certmanager.php:846 +#: usr/local/www/system_certmanager.php:846 +msgid "External Signing Request" +msgstr "" + +#: usr/local/www/system_certmanager.php:749 +#: usr/local/www/system_certmanager.php:915 +#: usr/local/www/system_certmanager.php:957 +#: usr/local/www/system_certmanager.php:961 +#: usr/local/www/system_certmanager.php:961 +msgid "Choose an Existing Certificate" +msgstr "" + +#: usr/local/www/system_certmanager.php:752 +#: usr/local/www/system_certmanager.php:918 +#: usr/local/www/system_certmanager.php:960 +#: usr/local/www/system_certmanager.php:964 +#: usr/local/www/system_certmanager.php:964 +msgid "Existing Certificates" +msgstr "" + +#: usr/local/www/system_certmanager.php:810 +#: usr/local/www/system_certmanager.php:976 +#: usr/local/www/system_certmanager.php:1018 +#: usr/local/www/system_certmanager.php:1022 +#: usr/local/www/system_certmanager.php:1022 +msgid "Complete Signing Request" +msgstr "" + +#: usr/local/www/system_certmanager.php:814 +#: usr/local/www/system_certmanager.php:980 +#: usr/local/www/system_certmanager.php:1022 +msgid "Signing Request data" +msgstr "" + +#: usr/local/www/system_certmanager.php:818 +#: usr/local/www/system_certmanager.php:984 +#: usr/local/www/system_certmanager.php:1026 +#: usr/local/www/system_certmanager.php:1030 +#: usr/local/www/system_certmanager.php:1030 +msgid "" +"Copy the certificate signing data from here and forward it to your " +"certificate authority for signing." +msgstr "" + +#: usr/local/www/system_certmanager.php:826 +#: usr/local/www/system_certmanager.php:992 +#: usr/local/www/system_certmanager.php:1034 +#: usr/local/www/system_certmanager.php:1038 +#: usr/local/www/system_certmanager.php:1038 +msgid "Paste the certificate received from your certificate authority here." +msgstr "" + +#: usr/local/www/system_certmanager.php:857 +#: usr/local/www/system_crlmanager.php:490 +#: usr/local/www/system_certmanager.php:1023 +#: usr/local/www/system_crlmanager.php:523 +#: usr/local/www/system_certmanager.php:1065 +#: usr/local/www/system_certmanager.php:1069 +#: usr/local/www/system_certmanager.php:1069 +#: usr/local/www/system_crlmanager.php:523 +msgid "In Use" +msgstr "" + +#: usr/local/www/system_certmanager.php:877 +#: usr/local/www/system_certmanager.php:1044 +#: usr/local/www/system_certmanager.php:1087 +#: usr/local/www/system_certmanager.php:1091 +#: usr/local/www/system_certmanager.php:1091 +msgid "external - signature pending" +msgstr "" + +#: usr/local/www/system_certmanager.php:926 +#: usr/local/www/system_usermanager.php:658 +#: usr/local/www/system_certmanager.php:1103 +#: usr/local/www/system_usermanager.php:656 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1162 +#: usr/local/www/system_certmanager.php:1166 +#: usr/local/www/system_certmanager.php:1166 +#: usr/local/www/system_usermanager.php:656 +msgid "export cert" +msgstr "" + +#: usr/local/www/system_certmanager.php:926 +#: usr/local/www/system_certmanager.php:929 +#: usr/local/www/system_certmanager.php:1103 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1162 +#: usr/local/www/system_certmanager.php:1165 +#: usr/local/www/system_certmanager.php:1166 +#: usr/local/www/system_certmanager.php:1169 +#: usr/local/www/system_certmanager.php:1166 +#: usr/local/www/system_certmanager.php:1169 +msgid "export ca" +msgstr "" + +#: usr/local/www/system_certmanager.php:929 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1165 +#: usr/local/www/system_certmanager.php:1169 +#: usr/local/www/system_certmanager.php:1169 +msgid "export key" +msgstr "" + +#: usr/local/www/system_certmanager.php:932 +#: usr/local/www/system_certmanager.php:1112 +#: usr/local/www/system_certmanager.php:1115 +#: usr/local/www/system_certmanager.php:1171 +#: usr/local/www/system_certmanager.php:1175 +#: usr/local/www/system_certmanager.php:1175 +msgid "Do you really want to delete this Certificate?" +msgstr "" + +#: usr/local/www/system_certmanager.php:933 +#: usr/local/www/system_usermanager.php:661 +#: usr/local/www/system_certmanager.php:1113 +#: usr/local/www/system_usermanager.php:659 +#: usr/local/www/system_certmanager.php:1116 +#: usr/local/www/system_certmanager.php:1172 +#: usr/local/www/system_certmanager.php:1176 +#: usr/local/www/system_certmanager.php:1176 +#: usr/local/www/system_usermanager.php:659 +msgid "delete cert" +msgstr "" + +#: usr/local/www/system_certmanager.php:939 +#: usr/local/www/system_certmanager.php:1119 +#: usr/local/www/system_certmanager.php:1122 +#: usr/local/www/system_certmanager.php:1178 +#: usr/local/www/system_certmanager.php:1182 +#: usr/local/www/system_certmanager.php:1182 +msgid "update csr" +msgstr "" + +#: usr/local/www/system_certmanager.php:958 +#: usr/local/www/system_certmanager.php:1138 +#: usr/local/www/system_certmanager.php:1141 +#: usr/local/www/system_certmanager.php:1197 +#: usr/local/www/system_certmanager.php:1201 +#: usr/local/www/system_certmanager.php:1201 +msgid "Note: You can only delete a certificate if it is not currently in use." +msgstr "" + +#: usr/local/www/system_crlmanager.php:46 +#: usr/local/www/system_crlmanager.php:46 +msgid "Certificate Revocation List Manager" +msgstr "" + +#: usr/local/www/system_crlmanager.php:49 +#: usr/local/www/system_crlmanager.php:49 +msgid "Create an internal Certificate Revocation List" +msgstr "" + +#: usr/local/www/system_crlmanager.php:50 +#: usr/local/www/system_crlmanager.php:50 +msgid "Import an existing Certificate Revocation List" +msgstr "" + +#: usr/local/www/system_crlmanager.php:86 +#: usr/local/www/system_crlmanager.php:86 +msgid "Invalid CRL reference." +msgstr "" + +#: usr/local/www/system_crlmanager.php:92 +#: usr/local/www/system_crlmanager.php:92 +#, php-format +msgid "Certificate Revocation List %s is in use and cannot be deleted" +msgstr "" + +#: usr/local/www/system_crlmanager.php:98 +#: usr/local/www/system_crlmanager.php:98 +#, php-format +msgid "Certificate Revocation List %s successfully deleted" +msgstr "" + +#: usr/local/www/system_crlmanager.php:136 +#: usr/local/www/system_crlmanager.php:136 +msgid "Both the Certificate and CRL must be specified." +msgstr "" + +#: usr/local/www/system_crlmanager.php:140 +#: usr/local/www/system_crlmanager.php:140 +msgid "CA mismatch between the Certificate and CRL. Unable to Revoke." +msgstr "" + +#: usr/local/www/system_crlmanager.php:143 +#: usr/local/www/system_crlmanager.php:143 +msgid "Cannot revoke certificates for an imported/external CRL." +msgstr "" + +#: usr/local/www/system_crlmanager.php:175 +#: usr/local/www/system_crlmanager.php:177 +#: usr/local/www/system_crlmanager.php:175 +#: usr/local/www/system_crlmanager.php:177 +#, php-format +msgid "Deleted Certificate %s from CRL %s" +msgstr "" + +#: usr/local/www/system_crlmanager.php:179 +#: usr/local/www/system_crlmanager.php:179 +#, php-format +msgid "Failed to delete Certificate %s from CRL %s" +msgstr "" + +#: usr/local/www/system_crlmanager.php:194 +#: usr/local/www/system_crlmanager.php:193 +#: usr/local/www/system_crlmanager.php:193 +msgid "Certificate Revocation List data" +msgstr "" + +#: usr/local/www/system_crlmanager.php:201 +#: usr/local/www/system_crlmanager.php:324 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/vpn_openvpn_server.php:287 +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/system_crlmanager.php:200 +#: usr/local/www/system_crlmanager.php:325 +#: usr/local/www/vpn_openvpn_server.php:288 +#: usr/local/www/vpn_openvpn_client.php:220 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/vpn_openvpn_server.php:309 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/system_crlmanager.php:200 +#: usr/local/www/system_crlmanager.php:325 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/vpn_openvpn_server.php:309 +msgid "Certificate Authority" +msgstr "" + +#: usr/local/www/system_crlmanager.php:345 +#: usr/local/www/system_crlmanager.php:346 +#: usr/local/www/system_crlmanager.php:346 +msgid "Existing Certificate Revocation List" +msgstr "" + +#: usr/local/www/system_crlmanager.php:349 +#: usr/local/www/system_crlmanager.php:350 +#: usr/local/www/system_crlmanager.php:410 +#: usr/local/www/system_crlmanager.php:350 +#: usr/local/www/system_crlmanager.php:410 +msgid "CRL data" +msgstr "" + +#: usr/local/www/system_crlmanager.php:353 +#: usr/local/www/system_crlmanager.php:354 +#: usr/local/www/system_crlmanager.php:414 +#: usr/local/www/system_crlmanager.php:354 +#: usr/local/www/system_crlmanager.php:414 +msgid "Paste a Certificate Revocation List in X.509 CRL format here." +msgstr "" + +#: usr/local/www/system_crlmanager.php:363 +#: usr/local/www/system_crlmanager.php:364 +#: usr/local/www/system_crlmanager.php:364 +msgid "Internal Certificate Revocation List" +msgstr "" + +#: usr/local/www/system_crlmanager.php:370 +#: usr/local/www/system_crlmanager.php:371 +#: usr/local/www/system_crlmanager.php:371 +msgid "Default: 9999" +msgstr "" + +#: usr/local/www/system_crlmanager.php:378 +#: usr/local/www/system_crlmanager.php:379 +#: usr/local/www/system_crlmanager.php:379 +msgid "Default: 0" +msgstr "" + +#: usr/local/www/system_crlmanager.php:401 +#: usr/local/www/system_crlmanager.php:434 +#: usr/local/www/system_crlmanager.php:434 +msgid "Currently Revoked Certificates for CRL" +msgstr "" + +#: usr/local/www/system_crlmanager.php:405 +#: usr/local/www/system_crlmanager.php:438 +#: usr/local/www/system_crlmanager.php:438 +msgid "Certificate Name" +msgstr "" + +#: usr/local/www/system_crlmanager.php:406 +#: usr/local/www/system_crlmanager.php:439 +#: usr/local/www/system_crlmanager.php:439 +msgid "Revocation Reason" +msgstr "" + +#: usr/local/www/system_crlmanager.php:407 +#: usr/local/www/system_crlmanager.php:440 +#: usr/local/www/system_crlmanager.php:440 +msgid "Revoked At" +msgstr "" + +#: usr/local/www/system_crlmanager.php:416 +#: usr/local/www/system_crlmanager.php:449 +#: usr/local/www/system_crlmanager.php:449 +msgid "No Certificates Found for this CRL." +msgstr "" + +#: usr/local/www/system_crlmanager.php:435 +#: usr/local/www/system_crlmanager.php:468 +#: usr/local/www/system_crlmanager.php:468 +msgid "Do you really want to delete this Certificate from the CRL?" +msgstr "" + +#: usr/local/www/system_crlmanager.php:436 +#: usr/local/www/system_crlmanager.php:469 +#: usr/local/www/system_crlmanager.php:469 +msgid "Delete this certificate from the CRL " +msgstr "" + +#: usr/local/www/system_crlmanager.php:453 +#: usr/local/www/system_crlmanager.php:486 +#: usr/local/www/system_crlmanager.php:486 +msgid "No Certificates Found for this CA." +msgstr "" + +#: usr/local/www/system_crlmanager.php:460 +#: usr/local/www/system_crlmanager.php:493 +#: usr/local/www/system_crlmanager.php:493 +msgid "Choose a Certificate to Revoke" +msgstr "" + +#: usr/local/www/system_crlmanager.php:465 +#: usr/local/www/system_crlmanager.php:498 +#: usr/local/www/system_crlmanager.php:498 +msgid "Reason" +msgstr "" + +#: usr/local/www/system_crlmanager.php:527 +#: usr/local/www/system_crlmanager.php:560 +#: usr/local/www/system_crlmanager.php:568 +#: usr/local/www/system_crlmanager.php:568 +#, php-format +msgid "Add or Import CRL for %s" +msgstr "" + +#: usr/local/www/system_crlmanager.php:527 +#: usr/local/www/system_crlmanager.php:531 +#: usr/local/www/system_crlmanager.php:560 +#: usr/local/www/system_crlmanager.php:564 +#: usr/local/www/system_crlmanager.php:568 +#: usr/local/www/system_crlmanager.php:572 +#: usr/local/www/system_crlmanager.php:568 +#: usr/local/www/system_crlmanager.php:572 +msgid "add crl" +msgstr "" + +#: usr/local/www/system_crlmanager.php:531 +#: usr/local/www/system_crlmanager.php:564 +#: usr/local/www/system_crlmanager.php:572 +#: usr/local/www/system_crlmanager.php:572 +#, php-format +msgid "Import CRL for %s" +msgstr "" + +#: usr/local/www/system_crlmanager.php:552 +#: usr/local/www/system_crlmanager.php:585 +#: usr/local/www/system_crlmanager.php:593 +#: usr/local/www/system_crlmanager.php:593 +msgid "Export CRL" +msgstr "" + +#: usr/local/www/system_crlmanager.php:557 +#: usr/local/www/system_crlmanager.php:590 +#: usr/local/www/system_crlmanager.php:594 +#: usr/local/www/system_crlmanager.php:598 +#: usr/local/www/system_crlmanager.php:602 +#: usr/local/www/system_crlmanager.php:598 +#: usr/local/www/system_crlmanager.php:602 +msgid "Edit CRL" +msgstr "" + +#: usr/local/www/system_crlmanager.php:561 +#: usr/local/www/system_crlmanager.php:598 +#: usr/local/www/system_crlmanager.php:606 +#: usr/local/www/system_crlmanager.php:606 +msgid "Do you really want to delete this Certificate Revocation List?" +msgstr "" + +#: usr/local/www/system_crlmanager.php:562 +#: usr/local/www/system_crlmanager.php:599 +#: usr/local/www/system_crlmanager.php:607 +#: usr/local/www/system_crlmanager.php:607 +msgid "Delete CRL" +msgstr "" + +#: usr/local/www/system_crlmanager.php:582 +#: usr/local/www/system_crlmanager.php:619 +#: usr/local/www/system_crlmanager.php:531 +#: usr/local/www/system_crlmanager.php:531 +msgid "Additional Certificate Revocation Lists can be added here." +msgstr "" + +#: usr/local/www/system_gateway_groups.php:75 +#: usr/local/www/system_gateway_groups.php:76 +#: usr/local/www/system_gateway_groups.php:85 +#: usr/local/www/system_gateway_groups.php:85 +msgid "removed gateway group" +msgstr "" + +#: usr/local/www/system_gateway_groups.php:101 +#: usr/local/www/system_gateway_groups.php:102 +#: usr/local/www/system_gateway_groups.php:111 +#: usr/local/www/system_gateway_groups.php:111 +#, php-format +msgid "" +"The gateway configuration has been changed.%sYou must apply the changes in " +"order for them to take effect." +msgstr "" + +#: usr/local/www/system_gateway_groups.php:165 +#: usr/local/www/system_gateway_groups.php:166 +#: usr/local/www/system_gateway_groups.php:187 +#: usr/local/www/system_gateway_groups.php:187 +msgid "Do you really want to delete this gateway group?" +msgstr "" + +#: usr/local/www/system_gateway_groups.php:195 +#: usr/local/www/system_gateway_groups.php:196 +#: usr/local/www/system_gateway_groups.php:205 +#: usr/local/www/system_gateway_groups.php:205 +msgid "" +"Remember to use these Gateway Groups in firewall rules in order to enable " +"load balancing, failover, or policy-based routing. Without rules directing " +"traffic into the Gateway Groups, they will not be used." +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:50 +#: usr/local/www/system_gateway_groups_edit.php:53 +#: usr/local/www/system_gateway_groups_edit.php:53 +msgid "Member Down" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:51 +#: usr/local/www/system_gateway_groups_edit.php:54 +#: usr/local/www/system_gateway_groups_edit.php:54 +msgid "Packet Loss" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:52 +#: usr/local/www/system_gateway_groups_edit.php:55 +#: usr/local/www/system_gateway_groups_edit.php:55 +msgid "High Latency" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:53 +#: usr/local/www/system_gateway_groups_edit.php:56 +#: usr/local/www/system_gateway_groups_edit.php:56 +msgid "Packet Loss or High Latency" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:85 +#: usr/local/www/system_gateway_groups_edit.php:88 +#: usr/local/www/system_gateway_groups_edit.php:88 +msgid "A valid gateway group name must be specified." +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:88 +#: usr/local/www/system_gateways_edit.php:106 +#: usr/local/www/system_gateway_groups_edit.php:91 +#: usr/local/www/system_gateways_edit.php:107 +#: usr/local/www/system_gateways_edit.php:108 +#: usr/local/www/system_gateways_edit.php:108 +#: usr/local/www/system_gateway_groups_edit.php:91 +msgid "The gateway name must not contain invalid characters." +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:99 +#: usr/local/www/system_gateway_groups_edit.php:102 +#: usr/local/www/system_gateway_groups_edit.php:105 +#: usr/local/www/system_gateway_groups_edit.php:105 +#, php-format +msgid "A gateway group with this name \"%s\" already exists." +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:115 +#: usr/local/www/system_gateway_groups_edit.php:119 +#: usr/local/www/system_gateway_groups_edit.php:122 +#: usr/local/www/system_gateway_groups_edit.php:122 +#, php-format +msgid "" +"A gateway group cannot have the same name with a gateway \"%s\" please " +"choose another name." +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:119 +#: usr/local/www/system_gateway_groups_edit.php:123 +#: usr/local/www/system_gateway_groups_edit.php:126 +#: usr/local/www/system_gateway_groups_edit.php:126 +msgid "No gateway(s) have been selected to be used in this group" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/system_gateways_edit.php:344 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/system_gateways_edit.php:350 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/system_gateways_edit.php:456 +#: usr/local/www/system_gateways_edit.php:458 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_gateways_edit.php:488 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_gateways_edit.php:488 +msgid "Edit gateway" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:155 +#: usr/local/www/system_gateway_groups_edit.php:166 +#: usr/local/www/system_gateway_groups_edit.php:225 +msgid "Edit gateway entry" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:164 +#: usr/local/www/system_gateway_groups_edit.php:175 +#: usr/local/www/system_gateway_groups_edit.php:234 +#: usr/local/www/system_gateway_groups_edit.php:238 +#: usr/local/www/system_gateway_groups_edit.php:238 +msgid "Gateway Priority" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:185 +#: usr/local/www/system_gateway_groups_edit.php:208 +#: usr/local/www/system_gateway_groups_edit.php:268 +#: usr/local/www/system_gateway_groups_edit.php:272 +#: usr/local/www/system_gateway_groups_edit.php:272 +msgid "Never" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:186 +#: usr/local/www/system_gateway_groups_edit.php:209 +#: usr/local/www/system_gateway_groups_edit.php:269 +#: usr/local/www/system_gateway_groups_edit.php:273 +#: usr/local/www/system_gateway_groups_edit.php:273 +msgid "Tier 1" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:187 +#: usr/local/www/system_gateway_groups_edit.php:210 +#: usr/local/www/system_gateway_groups_edit.php:270 +#: usr/local/www/system_gateway_groups_edit.php:274 +#: usr/local/www/system_gateway_groups_edit.php:274 +msgid "Tier 2" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:188 +#: usr/local/www/system_gateway_groups_edit.php:211 +#: usr/local/www/system_gateway_groups_edit.php:271 +#: usr/local/www/system_gateway_groups_edit.php:275 +#: usr/local/www/system_gateway_groups_edit.php:275 +msgid "Tier 3" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:189 +#: usr/local/www/system_gateway_groups_edit.php:212 +#: usr/local/www/system_gateway_groups_edit.php:272 +#: usr/local/www/system_gateway_groups_edit.php:276 +#: usr/local/www/system_gateway_groups_edit.php:276 +msgid "Tier 4" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:190 +#: usr/local/www/system_gateway_groups_edit.php:213 +#: usr/local/www/system_gateway_groups_edit.php:273 +#: usr/local/www/system_gateway_groups_edit.php:277 +#: usr/local/www/system_gateway_groups_edit.php:277 +msgid "Tier 5" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:195 +#: usr/local/www/system_gateway_groups_edit.php:247 +#: usr/local/www/system_gateway_groups_edit.php:307 +#: usr/local/www/system_gateway_groups_edit.php:311 +#: usr/local/www/system_gateway_groups_edit.php:311 +msgid "Link Priority" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:196 +#: usr/local/www/system_gateway_groups_edit.php:248 +#: usr/local/www/system_gateway_groups_edit.php:308 +#: usr/local/www/system_gateway_groups_edit.php:312 +#: usr/local/www/system_gateway_groups_edit.php:312 +msgid "" +"The priority selected here defines in what order failover and balancing of " +"links will be done. Multiple links of the same priority will balance " +"connections until all links in the priority will be exhausted. If all links " +"in a priority level are exhausted we will use the next available link(s) in " +"the next priority level." +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:205 +#: usr/local/www/system_gateway_groups_edit.php:260 +#: usr/local/www/system_gateway_groups_edit.php:320 +#: usr/local/www/system_gateway_groups_edit.php:322 +#: usr/local/www/system_gateway_groups_edit.php:322 +msgid "Trigger Level" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:216 +#: usr/local/www/system_gateway_groups_edit.php:271 +#: usr/local/www/system_gateway_groups_edit.php:331 +#: usr/local/www/system_gateway_groups_edit.php:333 +#: usr/local/www/system_gateway_groups_edit.php:333 +msgid "When to trigger exclusion of a member" +msgstr "" + +#: usr/local/www/system_gateways.php:134 usr/local/www/system_gateways.php:134 +msgid "The gateway configuration has been changed." +msgstr "" + +#: usr/local/www/system_gateways.php:155 +#: usr/local/www/system_gateways_edit.php:398 +#: usr/local/www/system_gateways_edit.php:419 +#: usr/local/www/system_gateways_edit.php:525 +#: usr/local/www/system_gateways_edit.php:529 +#: usr/local/www/system_gateways_edit.php:531 +#: usr/local/www/system_gateways_edit.php:561 +#: usr/local/www/system_gateways_edit.php:561 +#: usr/local/www/system_gateways.php:155 +msgid "Monitor IP" +msgstr "" + +#: usr/local/www/system_gateways.php:205 usr/local/www/system_gateways.php:205 +msgid "Do you really want to delete this gateway?" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:110 +#: usr/local/www/system_gateways_edit.php:111 +#: usr/local/www/system_gateways_edit.php:112 +#: usr/local/www/system_gateways_edit.php:112 +msgid "A valid gateway IP address must be specified." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:118 +#: usr/local/www/system_gateways_edit.php:119 +#: usr/local/www/system_gateways_edit.php:120 +#: usr/local/www/system_gateways_edit.php:133 +#: usr/local/www/system_gateways_edit.php:148 +#: usr/local/www/system_gateways_edit.php:148 +msgid "You can not use a IPv6 Gateway Address on a IPv4 only interface." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:122 +#: usr/local/www/system_gateways_edit.php:133 +#: usr/local/www/system_gateways_edit.php:123 +#: usr/local/www/system_gateways_edit.php:136 +#: usr/local/www/system_gateways_edit.php:124 +#: usr/local/www/system_gateways_edit.php:137 +#, php-format +msgid "" +"The gateway address %1$s does not lie within the chosen interface's subnet " +"'%2$s'." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:129 +#: usr/local/www/system_gateways_edit.php:132 +#: usr/local/www/system_gateways_edit.php:133 +#: usr/local/www/system_gateways_edit.php:120 +#: usr/local/www/system_gateways_edit.php:120 +msgid "You can not use a IPv4 Gateway Address on a IPv6 only interface." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:139 +#: usr/local/www/system_gateways_edit.php:143 +#: usr/local/www/system_gateways_edit.php:144 +#: usr/local/www/system_gateways_edit.php:174 +#: usr/local/www/system_gateways_edit.php:174 +msgid "" +"Dynamic gateway values cannot be specified for interfaces with a static IPv4 " +"configuration." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:143 +#: usr/local/www/system_gateways_edit.php:147 +#: usr/local/www/system_gateways_edit.php:148 +#: usr/local/www/system_gateways_edit.php:178 +#: usr/local/www/system_gateways_edit.php:178 +msgid "" +"Dynamic gateway values cannot be specified for interfaces with a static IPv6 " +"configuration." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:147 +#: usr/local/www/system_gateways_edit.php:151 +#: usr/local/www/system_gateways_edit.php:152 +#: usr/local/www/system_gateways_edit.php:182 +#: usr/local/www/system_gateways_edit.php:182 +msgid "A valid monitor IP address must be specified." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:160 +#: usr/local/www/system_gateways_edit.php:168 +#: usr/local/www/system_gateways_edit.php:178 +#: usr/local/www/system_gateways_edit.php:208 +#: usr/local/www/system_gateways_edit.php:208 +msgid "Changing name on a gateway is not allowed." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:165 +#: usr/local/www/system_gateways_edit.php:173 +#: usr/local/www/system_gateways_edit.php:183 +#: usr/local/www/system_gateways_edit.php:213 +#: usr/local/www/system_gateways_edit.php:213 +#, php-format +msgid "The gateway name \"%s\" already exists." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:171 +#: usr/local/www/system_gateways_edit.php:179 +#: usr/local/www/system_gateways_edit.php:189 +#: usr/local/www/system_gateways_edit.php:219 +#: usr/local/www/system_gateways_edit.php:219 +#, php-format +msgid "The gateway IP address \"%s\" already exists." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:177 +#: usr/local/www/system_gateways_edit.php:185 +#: usr/local/www/system_gateways_edit.php:195 +#: usr/local/www/system_gateways_edit.php:225 +#: usr/local/www/system_gateways_edit.php:225 +#, php-format +msgid "" +"The monitor IP address \"%s\" is already in use. You must choose a different " +"monitor IP." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:187 +#: usr/local/www/system_gateways_edit.php:220 +#: usr/local/www/system_gateways_edit.php:195 +#: usr/local/www/system_gateways_edit.php:228 +msgid "The low latency watermark needs to be a numeric value." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:193 +#: usr/local/www/system_gateways_edit.php:201 +msgid "The high latency watermark needs to be a numeric value." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:198 +#: usr/local/www/system_gateways_edit.php:206 +msgid "The low loss watermark needs to be a numeric value." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:203 +#: usr/local/www/system_gateways_edit.php:211 +msgid "The high loss watermark needs to be a numeric value." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:209 +#: usr/local/www/system_gateways_edit.php:217 +msgid "" +"The High latency watermark needs to be higher then the low latency watermark" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:215 +#: usr/local/www/system_gateways_edit.php:223 +msgid "" +"The High packet loss watermark needs to be higher then the low packet loss " +"watermark" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:363 +#: usr/local/www/system_gateways_edit.php:369 +#: usr/local/www/system_gateways_edit.php:475 +#: usr/local/www/system_gateways_edit.php:474 +#: usr/local/www/system_gateways_edit.php:476 +#: usr/local/www/system_gateways_edit.php:506 +#: usr/local/www/system_gateways_edit.php:506 +msgid "Use BGPD" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:367 +#: usr/local/www/system_gateways_edit.php:373 +#: usr/local/www/system_gateways_edit.php:479 +#: usr/local/www/system_gateways_edit.php:478 +#: usr/local/www/system_gateways_edit.php:480 +#: usr/local/www/system_gateways_edit.php:510 +#: usr/local/www/system_gateways_edit.php:510 +msgid "Choose which interface this gateway applies to." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:373 +#: usr/local/www/system_gateways_edit.php:394 +#: usr/local/www/system_gateways_edit.php:500 +#: usr/local/www/system_gateways_edit.php:502 +#: usr/local/www/system_gateways_edit.php:504 +#: usr/local/www/system_gateways_edit.php:534 +#: usr/local/www/system_gateways_edit.php:534 +msgid "Gateway name" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:379 +#: usr/local/www/system_gateways_edit.php:400 +#: usr/local/www/system_gateways_edit.php:506 +#: usr/local/www/system_gateways_edit.php:509 +#: usr/local/www/system_gateways_edit.php:511 +#: usr/local/www/system_gateways_edit.php:541 +#: usr/local/www/system_gateways_edit.php:541 +msgid "Gateway IP address" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:382 +#: usr/local/www/system_gateways_edit.php:385 +#: usr/local/www/system_gateways_edit.php:403 +#: usr/local/www/system_gateways_edit.php:406 +#: usr/local/www/system_gateways_edit.php:509 +#: usr/local/www/system_gateways_edit.php:512 +#: usr/local/www/system_gateways_edit.php:513 +#: usr/local/www/system_gateways_edit.php:516 +#: usr/local/www/system_gateways_edit.php:515 +#: usr/local/www/system_gateways_edit.php:518 +#: usr/local/www/system_gateways_edit.php:545 +#: usr/local/www/system_gateways_edit.php:548 +#: usr/local/www/system_gateways_edit.php:545 +#: usr/local/www/system_gateways_edit.php:548 +msgid "Default Gateway" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:386 +#: usr/local/www/system_gateways_edit.php:407 +#: usr/local/www/system_gateways_edit.php:513 +#: usr/local/www/system_gateways_edit.php:517 +#: usr/local/www/system_gateways_edit.php:519 +#: usr/local/www/system_gateways_edit.php:549 +#: usr/local/www/system_gateways_edit.php:549 +msgid "This will select the above gateway as the default gateway" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:390 +#: usr/local/www/system_gateways_edit.php:393 +#: usr/local/www/system_gateways_edit.php:411 +#: usr/local/www/system_gateways_edit.php:414 +#: usr/local/www/system_gateways_edit.php:517 +#: usr/local/www/system_gateways_edit.php:520 +#: usr/local/www/system_gateways_edit.php:521 +#: usr/local/www/system_gateways_edit.php:524 +#: usr/local/www/system_gateways_edit.php:523 +#: usr/local/www/system_gateways_edit.php:526 +#: usr/local/www/system_gateways_edit.php:553 +#: usr/local/www/system_gateways_edit.php:556 +#: usr/local/www/system_gateways_edit.php:553 +#: usr/local/www/system_gateways_edit.php:556 +msgid "Disable Gateway Monitoring" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:394 +#: usr/local/www/system_gateways_edit.php:415 +#: usr/local/www/system_gateways_edit.php:521 +#: usr/local/www/system_gateways_edit.php:525 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/system_gateways_edit.php:557 +#: usr/local/www/system_gateways_edit.php:557 +msgid "This will consider this gateway as always being up" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:407 +#: usr/local/www/system_gateways_edit.php:428 +#: usr/local/www/system_gateways_edit.php:534 +#: usr/local/www/system_gateways_edit.php:538 +#: usr/local/www/system_gateways_edit.php:540 +#: usr/local/www/system_gateways_edit.php:570 +#: usr/local/www/system_gateways_edit.php:570 +msgid "Alternative monitor IP" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:408 +#: usr/local/www/system_gateways_edit.php:429 +#: usr/local/www/system_gateways_edit.php:535 +#: usr/local/www/system_gateways_edit.php:539 +#: usr/local/www/system_gateways_edit.php:541 +#: usr/local/www/system_gateways_edit.php:571 +#: usr/local/www/system_gateways_edit.php:571 +msgid "" +"Enter an alternative address here to be used to monitor the link. This is " +"used for the quality RRD graphs as well as the load balancer entries. Use " +"this if the gateway does not respond to ICMP echo requests (pings)" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:436 +#: usr/local/www/system_gateways_edit.php:457 +#: usr/local/www/system_gateways_edit.php:563 +#: usr/local/www/system_gateways_edit.php:567 +#: usr/local/www/system_gateways_edit.php:569 +#: usr/local/www/system_gateways_edit.php:599 +#: usr/local/www/system_gateways_edit.php:599 +msgid "Weight for this gateway when used in a Gateway Group." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:440 +#: usr/local/www/system_gateways_edit.php:461 +#: usr/local/www/system_gateways_edit.php:567 +#: usr/local/www/system_gateways_edit.php:571 +#: usr/local/www/system_gateways_edit.php:573 +#: usr/local/www/system_gateways_edit.php:603 +#: usr/local/www/system_gateways_edit.php:603 +msgid "Latency thresholds" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:448 +#: usr/local/www/system_gateways_edit.php:469 +msgid "" +"These define the low and high water marks for latency in milliseconds. " +"Default is 100/200." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:452 +#: usr/local/www/system_gateways_edit.php:473 +#: usr/local/www/system_gateways_edit.php:579 +#: usr/local/www/system_gateways_edit.php:583 +#: usr/local/www/system_gateways_edit.php:585 +#: usr/local/www/system_gateways_edit.php:615 +#: usr/local/www/system_gateways_edit.php:615 +msgid "Packet Loss thresholds" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:460 +#: usr/local/www/system_gateways_edit.php:481 +msgid "" +"These define the low and high water marks for packet loss in %. Default is " +"10/20." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:464 +#: usr/local/www/system_gateways_edit.php:496 +#: usr/local/www/system_gateways_edit.php:602 +#: usr/local/www/system_gateways_edit.php:606 +#: usr/local/www/system_gateways_edit.php:608 +#: usr/local/www/system_gateways_edit.php:638 +#: usr/local/www/system_gateways_edit.php:638 +msgid "Down" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:468 +msgid "" +"This defines the down time for the alarm to fire in seconds. Default is 10." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:472 +#: usr/local/www/system_gateways_edit.php:485 +#: usr/local/www/system_gateways_edit.php:591 +#: usr/local/www/system_gateways_edit.php:595 +#: usr/local/www/system_gateways_edit.php:597 +#: usr/local/www/system_gateways_edit.php:627 +#: usr/local/www/system_gateways_edit.php:627 +msgid "Frequency Probe" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:476 +msgid "" +"This defines the frequency that an icmp probe will be sent in seconds. " +"Default is 1." +msgstr "" + +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/system_groupmanager_addprivs.php:56 +msgid "Group manager" +msgstr "" + +#: usr/local/www/system_groupmanager.php:72 +#: usr/local/www/system_groupmanager.php:96 +#: usr/local/www/system_usermanager.php:90 +#: usr/local/www/system_usermanager.php:105 +#: usr/local/www/system_groupmanager.php:72 +#: usr/local/www/system_groupmanager.php:96 +#: usr/local/www/system_usermanager.php:90 +#: usr/local/www/system_usermanager.php:105 +msgid "successfully deleted" +msgstr "" + +#: usr/local/www/system_groupmanager.php:95 +#: usr/local/www/system_usermanager.php:104 +#: usr/local/www/system_groupmanager.php:95 +#: usr/local/www/system_usermanager.php:104 +msgid "Privilege" +msgstr "" + +#: usr/local/www/system_groupmanager.php:122 +#: usr/local/www/system_groupmanager.php:122 +msgid "The group name contains invalid characters." +msgstr "" + +#: usr/local/www/system_groupmanager.php:128 +#: usr/local/www/system_groupmanager.php:128 +msgid "Another entry with the same group name already exists." +msgstr "" + +#: usr/local/www/system_groupmanager.php:262 +#: usr/local/www/system_usermanager.php:462 +#: usr/local/www/system_usermanager.php:460 +#: usr/local/www/system_groupmanager.php:262 +#: usr/local/www/system_usermanager.php:460 +msgid "Defined by" +msgstr "" + +#: usr/local/www/system_groupmanager.php:269 +#: usr/local/www/system_groupmanager.php:404 +#: usr/local/www/system_groupmanager.php:405 +#: usr/local/www/system_groupmanager.php:269 +#: usr/local/www/system_groupmanager.php:405 +msgid "Group name" +msgstr "" + +#: usr/local/www/system_groupmanager.php:279 +#: usr/local/www/system_groupmanager.php:279 +msgid "Group description, for your own information only" +msgstr "" + +#: usr/local/www/system_groupmanager.php:286 +#: usr/local/www/system_usermanager.php:511 +#: usr/local/www/system_usermanager.php:509 +#: usr/local/www/system_groupmanager.php:286 +#: usr/local/www/system_usermanager.php:509 +msgid "Group Memberships" +msgstr "" + +#: usr/local/www/system_groupmanager.php:291 +#: usr/local/www/system_groupmanager.php:291 +msgid "Not Members" +msgstr "" + +#: usr/local/www/system_groupmanager.php:309 +#: usr/local/www/system_groupmanager.php:309 +msgid "Add Members" +msgstr "" + +#: usr/local/www/system_groupmanager.php:313 +#: usr/local/www/system_groupmanager.php:313 +msgid "Remove Members" +msgstr "" + +#: usr/local/www/system_groupmanager.php:334 +#: usr/local/www/system_groupmanager_addprivs.php:196 +#: usr/local/www/system_usermanager.php:565 +#: usr/local/www/system_usermanager_addprivs.php:193 +#: usr/local/www/system_usermanager.php:563 +#: usr/local/www/system_groupmanager_addprivs.php:194 +#: usr/local/www/system_groupmanager.php:334 +#: usr/local/www/system_usermanager_addprivs.php:193 +#: usr/local/www/system_groupmanager_addprivs.php:194 +#: usr/local/www/system_usermanager.php:563 +msgid "Hold down CTRL (pc)/COMMAND (mac) key to select multiple items" +msgstr "" + +#: usr/local/www/system_groupmanager.php:342 +#: usr/local/www/system_groupmanager.php:342 +msgid "Assigned Privileges" +msgstr "" + +#: usr/local/www/system_groupmanager.php:363 +#: usr/local/www/system_usermanager.php:601 +#: usr/local/www/system_usermanager.php:599 +#: usr/local/www/system_groupmanager.php:363 +#: usr/local/www/system_usermanager.php:599 +msgid "Do you really want to delete this privilege?" +msgstr "" + +#: usr/local/www/system_groupmanager.php:406 +#: usr/local/www/system_groupmanager.php:407 +#: usr/local/www/system_groupmanager.php:407 +msgid "Member Count" +msgstr "" + +#: usr/local/www/system_groupmanager.php:447 +#: usr/local/www/system_groupmanager.php:450 +#: usr/local/www/system_groupmanager.php:468 +#: usr/local/www/system_groupmanager.php:468 +msgid "Do you really want to delete this group?" +msgstr "" + +#: usr/local/www/system_groupmanager.php:448 +#: usr/local/www/system_groupmanager.php:451 +#: usr/local/www/system_groupmanager.php:469 +#: usr/local/www/system_groupmanager.php:469 +msgid "delete group" +msgstr "" + +#: usr/local/www/system_groupmanager.php:460 +#: usr/local/www/system_groupmanager.php:465 +#: usr/local/www/system_groupmanager.php:415 +#: usr/local/www/system_groupmanager.php:415 +msgid "add group" +msgstr "" + +#: usr/local/www/system_groupmanager.php:467 +msgid "" +"Additional webConfigurator groups can be added here. \n" +"\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by " +"users who are members of the group.\n" +"\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system " +"defined object.\n" +"\t\t\t\t\t\t\t\tSome system object properties can be modified but they " +"cannot be deleted." +msgstr "" + +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/system_groupmanager_addprivs.php:56 +msgid "Add privileges" +msgstr "" + +#: usr/local/www/system_groupmanager_addprivs.php:79 +#: usr/local/www/system_usermanager_addprivs.php:84 +#: usr/local/www/system_usermanager_addprivs.php:84 +#: usr/local/www/system_groupmanager_addprivs.php:79 +msgid "Selected priveleges" +msgstr "" + +#: usr/local/www/system_groupmanager_addprivs.php:182 +#: usr/local/www/system_usermanager_addprivs.php:181 +#: usr/local/www/system_groupmanager_addprivs.php:180 +#: usr/local/www/system_usermanager_addprivs.php:181 +#: usr/local/www/system_groupmanager_addprivs.php:180 +msgid "System Privileges" +msgstr "" + +#: usr/local/www/system_groupmanager_addprivs.php:218 +#: usr/local/www/system_usermanager_addprivs.php:199 +#: usr/local/www/system_groupmanager_addprivs.php:216 +#: usr/local/www/system_usermanager_addprivs.php:199 +#: usr/local/www/system_groupmanager_addprivs.php:218 +msgid "Select a privilege from the list above for a description" +msgstr "" + +#: usr/local/www/system_usermanager.php:157 +#: usr/local/www/system_usermanager.php:692 +#: usr/local/www/system_usermanager.php:701 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/system_usermanager.php:690 +#: usr/local/www/system_usermanager.php:699 +#: usr/local/www/vpn_openvpn_server.php:287 +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/vpn_openvpn_server.php:288 +#: usr/local/www/vpn_openvpn_client.php:220 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/vpn_openvpn_server.php:309 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/system_usermanager.php:157 +#: usr/local/www/system_usermanager.php:690 +#: usr/local/www/system_usermanager.php:699 +#: usr/local/www/vpn_openvpn_server.php:309 +msgid "Certificate" +msgstr "" + +#: usr/local/www/system_usermanager.php:158 +#: usr/local/www/system_usermanager.php:158 +msgid "association removed." +msgstr "" + +#: usr/local/www/system_usermanager.php:202 +#: usr/local/www/system_usermanager.php:202 +msgid "The username is longer than 16 characters." +msgstr "" + +#: usr/local/www/system_usermanager.php:226 +#: usr/local/www/system_usermanager.php:226 +msgid "That username is reserved by the system." +msgstr "" + +#: usr/local/www/system_usermanager.php:250 +#: usr/local/www/system_usermanager.php:246 +#: usr/local/www/system_usermanager.php:246 +msgid "Invalid expiration date format; use MM/DD/YYYY instead." +msgstr "" + +#: usr/local/www/system_usermanager.php:257 +#: usr/local/www/system_usermanager.php:253 +#: usr/local/www/system_usermanager.php:253 +msgid "Invalid internal Certificate Authority" +msgstr "" + +#: usr/local/www/system_usermanager.php:489 +#: usr/local/www/system_usermanager_passwordmg.php:109 +#: usr/local/www/system_usermanager.php:487 +#: usr/local/www/system_usermanager_passwordmg.php:110 +#: usr/local/www/system_usermanager_passwordmg.php:115 +#: usr/local/www/system_usermanager_passwordmg.php:115 +#: usr/local/www/system_usermanager.php:487 +msgid "(confirmation)" +msgstr "" + +#: usr/local/www/system_usermanager.php:493 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/system_usermanager.php:491 +#: usr/local/www/system_usermanager.php:786 +#: usr/local/www/system_usermanager.php:787 +#: usr/local/www/system_usermanager.php:491 +#: usr/local/www/system_usermanager.php:787 +msgid "Full name" +msgstr "" + +#: usr/local/www/system_usermanager.php:497 +#: usr/local/www/system_usermanager.php:495 +#: usr/local/www/system_usermanager.php:495 +msgid "User's full name, for your own information only" +msgstr "" + +#: usr/local/www/system_usermanager.php:501 +#: usr/local/www/system_usermanager.php:499 +#: usr/local/www/system_usermanager.php:499 +msgid "Expiration date" +msgstr "" + +#: usr/local/www/system_usermanager.php:505 +#: usr/local/www/system_usermanager.php:503 +#: usr/local/www/system_usermanager.php:503 +msgid "Pick a date" +msgstr "" + +#: usr/local/www/system_usermanager.php:508 +#: usr/local/www/system_usermanager.php:506 +#: usr/local/www/system_usermanager.php:506 +msgid "" +"Leave blank if the account shouldn't expire, otherwise enter the expiration " +"date in the following format: mm/dd/yyyy" +msgstr "" + +#: usr/local/www/system_usermanager.php:516 +#: usr/local/www/system_usermanager.php:514 +#: usr/local/www/system_usermanager.php:514 +msgid "Not Member Of" +msgstr "" + +#: usr/local/www/system_usermanager.php:536 +#: usr/local/www/system_usermanager.php:534 +#: usr/local/www/system_usermanager.php:534 +msgid "Add Groups" +msgstr "" + +#: usr/local/www/system_usermanager.php:540 +#: usr/local/www/system_usermanager.php:538 +#: usr/local/www/system_usermanager.php:538 +msgid "Remove Groups" +msgstr "" + +#: usr/local/www/system_usermanager.php:544 +#: usr/local/www/system_usermanager.php:542 +#: usr/local/www/system_usermanager.php:542 +msgid "Member Of" +msgstr "" + +#: usr/local/www/system_usermanager.php:572 +#: usr/local/www/system_usermanager.php:570 +#: usr/local/www/system_usermanager.php:570 +msgid "Effective Privileges" +msgstr "" + +#: usr/local/www/system_usermanager.php:576 +#: usr/local/www/system_usermanager.php:574 +#: usr/local/www/system_usermanager.php:574 +msgid "Inherited From" +msgstr "" + +#: usr/local/www/system_usermanager.php:626 +#: usr/local/www/system_usermanager.php:624 +#: usr/local/www/system_usermanager.php:624 +msgid "User Certificates" +msgstr "" + +#: usr/local/www/system_usermanager.php:631 +#: usr/local/www/system_usermanager.php:629 +#: usr/local/www/system_usermanager.php:629 +msgid "CA" +msgstr "" + +#: usr/local/www/system_usermanager.php:655 +#: usr/local/www/system_usermanager.php:653 +#: usr/local/www/system_usermanager.php:653 +msgid "export private key" +msgstr "" + +#: usr/local/www/system_usermanager.php:660 +#: usr/local/www/system_usermanager.php:658 +#: usr/local/www/system_usermanager.php:658 +msgid "Do you really want to remove this certificate association?" +msgstr "" + +#: usr/local/www/system_usermanager.php:660 +#: usr/local/www/system_usermanager.php:658 +#: usr/local/www/system_usermanager.php:658 +msgid "(Certificate will not be deleted)" +msgstr "" + +#: usr/local/www/system_usermanager.php:694 +#: usr/local/www/system_usermanager.php:692 +#: usr/local/www/system_usermanager.php:692 +msgid "Click to create a user certificate." +msgstr "" + +#: usr/local/www/system_usermanager.php:752 +#: usr/local/www/system_usermanager.php:758 +#: usr/local/www/system_usermanager.php:750 +#: usr/local/www/system_usermanager.php:756 +#: usr/local/www/system_usermanager.php:750 +#: usr/local/www/system_usermanager.php:756 +msgid "Authorized keys" +msgstr "" + +#: usr/local/www/system_usermanager.php:754 +#: usr/local/www/system_usermanager.php:752 +#: usr/local/www/system_usermanager.php:752 +msgid "Click to paste an authorized key." +msgstr "" + +#: usr/local/www/system_usermanager.php:762 +#: usr/local/www/system_usermanager.php:760 +#: usr/local/www/system_usermanager.php:760 +msgid "Paste an authorized keys file here." +msgstr "" + +#: usr/local/www/system_usermanager.php:766 +#: usr/local/www/system_usermanager.php:764 +#: usr/local/www/system_usermanager.php:764 +msgid "IPsec Pre-Shared Key" +msgstr "" + +#: usr/local/www/system_usermanager.php:828 +#: usr/local/www/system_usermanager.php:826 +#: usr/local/www/system_usermanager.php:829 +#: usr/local/www/system_usermanager.php:852 +#: usr/local/www/system_usermanager.php:852 +msgid "Do you really want to delete this User?" +msgstr "" + +#: usr/local/www/system_usermanager.php:849 +#: usr/local/www/system_usermanager.php:847 +#: usr/local/www/system_usermanager.php:852 +#: usr/local/www/system_usermanager.php:805 +#: usr/local/www/system_usermanager.php:805 +msgid "" +"Additional users can be added here. User permissions for accessing the " +"webConfigurator can be assigned directly or inherited from group " +"memberships. An icon that appears grey indicates that it is a system defined " +"object. Some system object properties can be modified but they cannot be " +"deleted." +msgstr "" + +#: usr/local/www/system_usermanager.php:854 +#: usr/local/www/system_usermanager.php:852 +#: usr/local/www/system_usermanager.php:857 +#: usr/local/www/system_usermanager.php:810 +#: usr/local/www/system_usermanager.php:810 +msgid "" +"Accounts created here are also used for other parts of the system such as " +"OpenVPN, IPsec, and Captive Portal." +msgstr "" + +#: usr/local/www/system_usermanager_passwordmg.php:43 +#: usr/local/www/system_usermanager_passwordmg.php:43 +msgid "User Password" +msgstr "" + +#: usr/local/www/system_usermanager_passwordmg.php:63 +#: usr/local/www/system_usermanager_passwordmg.php:63 +msgid "Password successfully changed" +msgstr "" + +#: usr/local/www/system_usermanager_passwordmg.php:86 +#: usr/local/www/system_usermanager_passwordmg.php:87 +#: usr/local/www/system_usermanager_passwordmg.php:92 +#: usr/local/www/system_usermanager_passwordmg.php:92 +msgid "Sorry, you cannot change the password for a non-local user." +msgstr "" + +#: usr/local/www/system_usermanager_passwordmg.php:112 +#: usr/local/www/system_usermanager_passwordmg.php:113 +#: usr/local/www/system_usermanager_passwordmg.php:118 +#: usr/local/www/system_usermanager_passwordmg.php:118 +msgid "Select a new password" +msgstr "" + +#: usr/local/www/system_usermanager_settings.php:51 +#: usr/local/www/system_usermanager_settings.php:51 +msgid "User manager settings" +msgstr "" + +#: usr/local/www/system_usermanager_settings.php:61 +#: usr/local/www/system_usermanager_settings.php:61 +msgid "Session timeout must be an integer value." +msgstr "" + +#: usr/local/www/system_usermanager_settings.php:71 +#: usr/local/www/system_usermanager_settings.php:71 +msgid "" +"The test was not performed because it is supported only for ldap based " +"backends." +msgstr "" + +#: usr/local/www/system_usermanager_settings.php:131 +#: usr/local/www/system_usermanager_settings.php:134 +#: usr/local/www/system_usermanager_settings.php:134 +msgid "Session Timeout" +msgstr "" + +#: usr/local/www/system_usermanager_settings.php:135 +#: usr/local/www/system_usermanager_settings.php:138 +#: usr/local/www/system_usermanager_settings.php:138 +msgid "" +"Time in minutes to expire idle management sessions. The default is 4 hours " +"(240 minutes)." +msgstr "" + +#: usr/local/www/system_usermanager_settings.php:136 +#: usr/local/www/system_usermanager_settings.php:139 +#: usr/local/www/system_usermanager_settings.php:139 +msgid "Enter 0 to never expire sessions. NOTE: This is a security risk!" +msgstr "" + +#: usr/local/www/system_usermanager_settings.php:162 +#: usr/local/www/system_usermanager_settings.php:165 +#: usr/local/www/system_usermanager_settings.php:165 +msgid "Save and Test" +msgstr "" + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97 +msgid "" +"Could not connect to the LDAP server. Please check your LDAP configuration." +msgstr "" + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98 +#: usr/local/www/system_usermanager_settings_test.php:119 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98 +#: usr/local/www/system_usermanager_settings_test.php:119 +msgid "Close" +msgstr "" + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100 +msgid "Please select which containers to Authenticate against:" +msgstr "" + +#: usr/local/www/system_usermanager_settings_test.php:76 +#: usr/local/www/system_usermanager_settings_test.php:76 +#, php-format +msgid "Could not find settings for %s%s" +msgstr "" + +#: usr/local/www/system_usermanager_settings_test.php:78 +msgid "Testing pfSense LDAP settings... One moment please..." +msgstr "" + +#: usr/local/www/system_usermanager_settings_test.php:82 +#: usr/local/www/system_usermanager_settings_test.php:82 +msgid "Attempting connection to" +msgstr "" + +#: usr/local/www/system_usermanager_settings_test.php:86 +#: usr/local/www/system_usermanager_settings_test.php:86 +msgid "Attempting bind to" +msgstr "" + +#: usr/local/www/system_usermanager_settings_test.php:90 +#: usr/local/www/system_usermanager_settings_test.php:90 +msgid "Attempting to fetch Organizational Units from" +msgstr "" + +#: usr/local/www/system_usermanager_settings_test.php:96 +#: usr/local/www/system_usermanager_settings_test.php:96 +msgid "Organization units found" +msgstr "" + +#: usr/local/www/system_usermanager_settings_test.php:103 +#: usr/local/www/system_usermanager_settings_test.php:108 +#: usr/local/www/system_usermanager_settings_test.php:112 +#: usr/local/www/system_usermanager_settings_test.php:103 +#: usr/local/www/system_usermanager_settings_test.php:108 +#: usr/local/www/system_usermanager_settings_test.php:112 +msgid "failed" +msgstr "" + +#: usr/local/www/upload_progress.php:44 +msgid "Sorry, we could not find an uploadid code." +msgstr "" + +#: usr/local/www/upload_progress.php:86 +msgid "Uploading Files" +msgstr "" + +#: usr/local/www/upload_progress.php:86 +msgid "Please wait" +msgstr "" + +#: usr/local/www/upload_progress.php:95 +msgid "Uploading file" +msgstr "" + +#: usr/local/www/upload_progress.php:123 +msgid "Uploaded" +msgstr "" + +#: usr/local/www/upload_progress.php:133 +msgid "File Size" +msgstr "" + +#: usr/local/www/upload_progress.php:145 +msgid "Completed" +msgstr "" + +#: usr/local/www/upload_progress.php:155 +msgid "Estimated" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:160 +#: usr/local/www/vpn_ipsec_phase1.php:662 +#: usr/local/www/vpn_ipsec_phase1.php:675 +#: usr/local/www/vpn_ipsec_mobile.php:347 usr/local/www/vpn_ipsec_keys.php:104 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:135 usr/local/www/interfaces.php:2486 +#: usr/local/www/vpn_ipsec_phase1.php:674 +#: usr/local/www/vpn_ipsec_phase1.php:695 usr/local/www/interfaces.php:2516 +#: usr/local/www/interfaces.php:2562 usr/local/www/interfaces.php:2551 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:135 +#: usr/local/www/vpn_ipsec_phase1.php:160 +#: usr/local/www/vpn_ipsec_phase1.php:695 +#: usr/local/www/vpn_ipsec_mobile.php:347 usr/local/www/vpn_ipsec_keys.php:104 +#: usr/local/www/interfaces.php:2551 +msgid "Pre-Shared Key" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:171 +#: usr/local/www/vpn_ipsec_phase1.php:564 +#: usr/local/www/vpn_ipsec_phase1.php:577 +#: usr/local/www/vpn_ipsec_phase1.php:576 +#: usr/local/www/vpn_ipsec_phase1.php:597 +#: usr/local/www/vpn_ipsec_phase1.php:171 +#: usr/local/www/vpn_ipsec_phase1.php:597 +msgid "Remote gateway" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:177 +#: usr/local/www/vpn_ipsec_phase1.php:177 +msgid "The P1 lifetime must be an integer." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:180 +#: usr/local/www/vpn_ipsec_phase1.php:181 +#: usr/local/www/vpn_ipsec_phase1.php:181 +msgid "A valid remote gateway address or host name must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:188 +#: usr/local/www/vpn_ipsec_phase1.php:194 +#: usr/local/www/vpn_ipsec_phase1.php:194 +#, php-format +msgid "The remote gateway \"%1$s\" is already used by phase1 \"%2$s\"." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:201 +#: usr/local/www/vpn_ipsec_phase1.php:222 +#: usr/local/www/vpn_ipsec_phase1.php:222 +msgid "Please enter an address for 'My Identifier'" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:204 +#: usr/local/www/vpn_ipsec_phase1.php:225 +#: usr/local/www/vpn_ipsec_phase1.php:225 +msgid "Please enter a keyid tag for 'My Identifier'" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:207 +#: usr/local/www/vpn_ipsec_phase1.php:228 +#: usr/local/www/vpn_ipsec_phase1.php:228 +msgid "Please enter a fully qualified domain name for 'My Identifier'" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:210 +#: usr/local/www/vpn_ipsec_phase1.php:231 +#: usr/local/www/vpn_ipsec_phase1.php:231 +msgid "Please enter a user and fully qualified domain name for 'My Identifier'" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:213 +#: usr/local/www/vpn_ipsec_phase1.php:234 +#: usr/local/www/vpn_ipsec_phase1.php:234 +msgid "Please enter a dynamic domain name for 'My Identifier'" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:216 +#: usr/local/www/vpn_ipsec_phase1.php:237 +#: usr/local/www/vpn_ipsec_phase1.php:237 +msgid "A valid IP address for 'My identifier' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:219 +#: usr/local/www/vpn_ipsec_phase1.php:240 +#: usr/local/www/vpn_ipsec_phase1.php:240 +msgid "A valid domain name for 'My identifier' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:223 +#: usr/local/www/vpn_ipsec_phase1.php:244 +#: usr/local/www/vpn_ipsec_phase1.php:244 +msgid "A valid FQDN for 'My identifier' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:228 +#: usr/local/www/vpn_ipsec_phase1.php:249 +#: usr/local/www/vpn_ipsec_phase1.php:249 +msgid "" +"A valid User FQDN in the form of user@my.domain.com for 'My identifier' must " +"be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:233 +#: usr/local/www/vpn_ipsec_phase1.php:254 +#: usr/local/www/vpn_ipsec_phase1.php:254 +msgid "A valid Dynamic DNS address for 'My identifier' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:243 +#: usr/local/www/vpn_ipsec_phase1.php:264 +#: usr/local/www/vpn_ipsec_phase1.php:264 +msgid "Please enter an address for 'Peer Identifier'" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:246 +#: usr/local/www/vpn_ipsec_phase1.php:267 +#: usr/local/www/vpn_ipsec_phase1.php:267 +msgid "Please enter a keyid tag for 'Peer Identifier'" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:249 +#: usr/local/www/vpn_ipsec_phase1.php:270 +#: usr/local/www/vpn_ipsec_phase1.php:270 +msgid "Please enter a fully qualified domain name for 'Peer Identifier'" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:252 +#: usr/local/www/vpn_ipsec_phase1.php:273 +#: usr/local/www/vpn_ipsec_phase1.php:273 +msgid "" +"Please enter a user and fully qualified domain name for 'Peer Identifier'" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:255 +#: usr/local/www/vpn_ipsec_phase1.php:276 +#: usr/local/www/vpn_ipsec_phase1.php:276 +msgid "A valid IP address for 'Peer identifier' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:258 +#: usr/local/www/vpn_ipsec_phase1.php:279 +#: usr/local/www/vpn_ipsec_phase1.php:279 +msgid "A valid domain name for 'Peer identifier' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:262 +#: usr/local/www/vpn_ipsec_phase1.php:283 +#: usr/local/www/vpn_ipsec_phase1.php:283 +msgid "A valid FQDN for 'Peer identifier' must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:267 +#: usr/local/www/vpn_ipsec_phase1.php:288 +#: usr/local/www/vpn_ipsec_phase1.php:288 +msgid "" +"A valid User FQDN in the form of user@my.domain.com for 'Peer identifier' " +"must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:273 +#: usr/local/www/vpn_ipsec_phase1.php:294 +#: usr/local/www/vpn_ipsec_phase1.php:294 +msgid "A numeric value must be specified for DPD delay." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:276 +#: usr/local/www/vpn_ipsec_phase1.php:297 +#: usr/local/www/vpn_ipsec_phase1.php:297 +msgid "A numeric value must be specified for DPD retries." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +msgid "Edit Phase 1" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:509 +#: usr/local/www/vpn_openvpn_client.php:383 +#: usr/local/www/vpn_openvpn_csc.php:311 +#: usr/local/www/vpn_openvpn_server.php:601 +#: usr/local/www/vpn_openvpn_server.php:674 +#: usr/local/www/vpn_openvpn_client.php:388 +#: usr/local/www/vpn_openvpn_csc.php:310 +#: usr/local/www/vpn_openvpn_server.php:692 +#: usr/local/www/vpn_openvpn_client.php:396 +#: usr/local/www/vpn_ipsec_phase1.php:508 +#: usr/local/www/vpn_openvpn_client.php:414 +#: usr/local/www/vpn_ipsec_phase1.php:529 +#: usr/local/www/vpn_openvpn_server.php:718 +#: usr/local/www/vpn_openvpn_client.php:414 +#: usr/local/www/vpn_openvpn_csc.php:310 +#: usr/local/www/vpn_ipsec_phase1.php:529 +#: usr/local/www/vpn_openvpn_server.php:718 +msgid "General information" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:515 +#: usr/local/www/vpn_ipsec_phase1.php:514 +#: usr/local/www/vpn_ipsec_phase1.php:535 +#: usr/local/www/vpn_ipsec_phase1.php:535 +msgid "Disable this phase1 entry" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:517 +#: usr/local/www/vpn_ipsec_phase1.php:516 +#: usr/local/www/vpn_ipsec_phase1.php:537 +#: usr/local/www/vpn_ipsec_phase1.php:537 +msgid "" +"Set this option to disable this phase1 without removing it from the list" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:523 +#: usr/local/www/vpn_ipsec_phase1.php:522 +#: usr/local/www/vpn_ipsec_phase1.php:543 +#: usr/local/www/vpn_ipsec_phase1.php:543 +msgid "Internet Protocol" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:534 +#: usr/local/www/vpn_ipsec_phase1.php:533 +#: usr/local/www/vpn_ipsec_phase1.php:554 +#: usr/local/www/vpn_ipsec_phase1.php:554 +msgid "Select the Internet Protocol family from this dropdown" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:557 +#: usr/local/www/vpn_ipsec_phase1.php:570 +#: usr/local/www/vpn_ipsec_phase1.php:569 +#: usr/local/www/vpn_ipsec_phase1.php:590 +#: usr/local/www/vpn_ipsec_phase1.php:590 +msgid "Select the interface for the local endpoint of this phase1 entry" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:568 +#: usr/local/www/vpn_ipsec_phase1.php:581 +#: usr/local/www/vpn_ipsec_phase1.php:580 +#: usr/local/www/vpn_ipsec_phase1.php:601 +#: usr/local/www/vpn_ipsec_phase1.php:601 +msgid "Enter the public IP address or host name of the remote gateway" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:590 +#: usr/local/www/vpn_ipsec_phase1.php:603 +#: usr/local/www/vpn_ipsec_phase1.php:602 +#: usr/local/www/vpn_ipsec_phase1.php:623 +#: usr/local/www/vpn_ipsec_phase1.php:623 +msgid "Phase 1 proposal (Authentication)" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:594 +#: usr/local/www/vpn_openvpn_client.php:514 +#: usr/local/www/vpn_openvpn_client.php:519 +#: usr/local/www/vpn_ipsec_phase1.php:607 +#: usr/local/www/vpn_openvpn_client.php:537 +#: usr/local/www/vpn_ipsec_phase1.php:606 +#: usr/local/www/vpn_openvpn_client.php:556 +#: usr/local/www/vpn_ipsec_phase1.php:627 +#: usr/local/www/vpn_openvpn_client.php:556 +#: usr/local/www/vpn_ipsec_phase1.php:627 +msgid "Authentication method" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:609 +#: usr/local/www/vpn_ipsec_phase1.php:735 +#: usr/local/www/vpn_ipsec_phase1.php:753 +#: usr/local/www/vpn_ipsec_phase1.php:622 +#: usr/local/www/vpn_ipsec_phase1.php:748 +#: usr/local/www/vpn_ipsec_phase1.php:766 +#: usr/local/www/vpn_ipsec_phase1.php:621 +#: usr/local/www/vpn_ipsec_phase1.php:747 +#: usr/local/www/vpn_ipsec_phase1.php:763 +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:768 +#: usr/local/www/vpn_ipsec_phase1.php:784 +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:768 +#: usr/local/www/vpn_ipsec_phase1.php:784 +msgid "Must match the setting chosen on the remote side" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:614 +#: usr/local/www/vpn_ipsec_phase1.php:627 +#: usr/local/www/vpn_ipsec_phase1.php:626 +#: usr/local/www/vpn_ipsec_phase1.php:647 +#: usr/local/www/vpn_ipsec_phase1.php:647 +msgid "Negotiation mode" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:625 +#: usr/local/www/vpn_ipsec_phase1.php:638 +#: usr/local/www/vpn_ipsec_phase1.php:637 +#: usr/local/www/vpn_ipsec_phase1.php:658 +#: usr/local/www/vpn_ipsec_phase1.php:658 +msgid "Aggressive is more flexible, but less secure" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:629 +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:641 +#: usr/local/www/vpn_ipsec_phase1.php:662 +#: usr/local/www/vpn_ipsec_phase1.php:662 +msgid "My identifier" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:655 +#: usr/local/www/vpn_ipsec_phase1.php:654 +#: usr/local/www/vpn_ipsec_phase1.php:675 +#: usr/local/www/vpn_ipsec_phase1.php:675 +msgid "Peer identifier" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:657 +#: usr/local/www/vpn_ipsec_phase1.php:670 +#: usr/local/www/vpn_ipsec_phase1.php:669 +#: usr/local/www/vpn_ipsec_phase1.php:690 +#: usr/local/www/vpn_ipsec_phase1.php:690 +msgid "" +"NOTE: This is known as the \"group\" setting on some VPN client " +"implementations" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:668 +#: usr/local/www/vpn_ipsec_phase1.php:681 +msgid "Input your pre-shared key string" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:673 +#: usr/local/www/vpn_ipsec_phase1.php:686 +#: usr/local/www/vpn_ipsec_phase1.php:685 +#: usr/local/www/vpn_ipsec_phase1.php:706 +#: usr/local/www/vpn_ipsec_phase1.php:706 +msgid "Policy Generation" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:684 +#: usr/local/www/vpn_ipsec_phase1.php:697 +#: usr/local/www/vpn_ipsec_phase1.php:696 +#: usr/local/www/vpn_ipsec_phase1.php:717 +#: usr/local/www/vpn_ipsec_phase1.php:717 +msgid "" +"When working as a responder (as with mobile clients), this controls how " +"policies are generated based on SA proposals." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:689 +#: usr/local/www/vpn_ipsec_phase1.php:702 +#: usr/local/www/vpn_ipsec_phase1.php:701 +#: usr/local/www/vpn_ipsec_phase1.php:722 +#: usr/local/www/vpn_ipsec_phase1.php:722 +msgid "Proposal Checking" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:700 +#: usr/local/www/vpn_ipsec_phase1.php:713 +#: usr/local/www/vpn_ipsec_phase1.php:712 +#: usr/local/www/vpn_ipsec_phase1.php:733 +#: usr/local/www/vpn_ipsec_phase1.php:733 +msgid "" +"Specifies the action of lifetime length, key length, and PFS of the phase 2 " +"selection on the responder side, and the action of lifetime check in phase 1." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:705 +#: usr/local/www/vpn_openvpn_client.php:706 +#: usr/local/www/vpn_openvpn_server.php:898 +#: usr/local/www/vpn_openvpn_server.php:971 +#: usr/local/www/vpn_openvpn_client.php:711 +#: usr/local/www/vpn_ipsec_phase1.php:718 +#: usr/local/www/vpn_openvpn_server.php:999 +#: usr/local/www/vpn_openvpn_client.php:729 +#: usr/local/www/vpn_ipsec_phase1.php:717 +#: usr/local/www/vpn_openvpn_client.php:748 +#: usr/local/www/vpn_ipsec_phase1.php:738 +#: usr/local/www/vpn_openvpn_server.php:1026 +#: usr/local/www/vpn_openvpn_client.php:748 +#: usr/local/www/vpn_ipsec_phase1.php:738 +#: usr/local/www/vpn_openvpn_server.php:1026 +msgid "Encryption algorithm" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:724 +#: usr/local/www/vpn_ipsec_phase1.php:737 +#: usr/local/www/vpn_ipsec_phase1.php:736 +#: usr/local/www/vpn_ipsec_phase1.php:757 +#: usr/local/www/vpn_ipsec_phase1.php:757 +msgid "Hash algorithm" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:740 +#: usr/local/www/vpn_ipsec_phase1.php:753 +#: usr/local/www/vpn_ipsec_phase1.php:752 +#: usr/local/www/vpn_ipsec_phase1.php:773 +#: usr/local/www/vpn_ipsec_phase1.php:773 +msgid "DH key group" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:751 +#: usr/local/www/vpn_ipsec_phase2.php:603 +#: usr/local/www/vpn_ipsec_phase2.php:629 +#: usr/local/www/vpn_ipsec_phase1.php:764 +msgid "1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:765 +#: usr/local/www/vpn_ipsec_phase1.php:778 +#: usr/local/www/vpn_ipsec_phase1.php:775 +#: usr/local/www/vpn_ipsec_phase1.php:796 +#: usr/local/www/vpn_ipsec_phase1.php:796 +msgid "My Certificate" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:779 +#: usr/local/www/vpn_ipsec_phase1.php:792 +#: usr/local/www/vpn_ipsec_phase1.php:789 +#: usr/local/www/vpn_ipsec_phase1.php:810 +#: usr/local/www/vpn_ipsec_phase1.php:810 +msgid "Select a certificate previously configured in the Certificate Manager" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:784 +#: usr/local/www/vpn_ipsec_phase1.php:797 +#: usr/local/www/vpn_ipsec_phase1.php:794 +#: usr/local/www/vpn_ipsec_phase1.php:815 +#: usr/local/www/vpn_ipsec_phase1.php:815 +msgid "My Certificate Authority" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:798 +#: usr/local/www/vpn_ipsec_phase1.php:811 +#: usr/local/www/vpn_ipsec_phase1.php:808 +#: usr/local/www/vpn_ipsec_phase1.php:829 +#: usr/local/www/vpn_ipsec_phase1.php:829 +msgid "" +"Select a certificate authority previously configured in the Certificate " +"Manager" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:809 +#: usr/local/www/vpn_ipsec_phase1.php:822 +#: usr/local/www/vpn_ipsec_phase1.php:819 +#: usr/local/www/vpn_ipsec_phase1.php:840 +#: usr/local/www/vpn_ipsec_phase1.php:840 +msgid "NAT Traversal" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:814 +#: usr/local/www/vpn_ipsec_phase1.php:827 +#: usr/local/www/vpn_ipsec_phase1.php:824 +#: usr/local/www/vpn_ipsec_phase1.php:845 +#: usr/local/www/vpn_ipsec_phase1.php:845 +msgid "Force" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:818 +#: usr/local/www/vpn_ipsec_phase1.php:831 +#: usr/local/www/vpn_ipsec_phase1.php:828 +#: usr/local/www/vpn_ipsec_phase1.php:849 +#: usr/local/www/vpn_ipsec_phase1.php:849 +msgid "" +"Set this option to enable the use of NAT-T (i.e. the encapsulation of ESP in " +"UDP packets) if needed, which can help with clients that are behind " +"restrictive firewalls" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:824 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:834 +#: usr/local/www/vpn_ipsec_phase1.php:855 +#: usr/local/www/vpn_ipsec_phase1.php:855 +msgid "Dead Peer Detection" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:827 +#: usr/local/www/vpn_ipsec_phase1.php:840 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:858 +#: usr/local/www/vpn_ipsec_phase1.php:858 +msgid "Enable DPD" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:833 +#: usr/local/www/vpn_ipsec_phase1.php:846 +#: usr/local/www/vpn_ipsec_phase1.php:843 +#: usr/local/www/vpn_ipsec_phase1.php:864 +#: usr/local/www/vpn_ipsec_phase1.php:864 +msgid "Delay between requesting peer acknowledgement" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:850 +#: usr/local/www/vpn_ipsec_phase1.php:847 +#: usr/local/www/vpn_ipsec_phase1.php:868 +#: usr/local/www/vpn_ipsec_phase1.php:868 +msgid "retries" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:839 +#: usr/local/www/vpn_ipsec_phase1.php:852 +#: usr/local/www/vpn_ipsec_phase1.php:849 +#: usr/local/www/vpn_ipsec_phase1.php:870 +#: usr/local/www/vpn_ipsec_phase1.php:870 +msgid "Number of consecutive failures allowed before disconnect" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:109 +#: usr/local/www/vpn_ipsec_phase2.php:111 +#: usr/local/www/vpn_ipsec_phase2.php:111 +msgid "A valid ikeid must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:113 +#: usr/local/www/vpn_ipsec_phase2.php:115 +#: usr/local/www/vpn_ipsec_phase2.php:115 +msgid "Local network type" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:113 +#: usr/local/www/vpn_ipsec_phase2.php:115 +#: usr/local/www/vpn_ipsec_phase2.php:115 +msgid "P2 Hash Algorithms" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:116 +#: usr/local/www/vpn_ipsec_phase2.php:118 +#: usr/local/www/vpn_ipsec_phase2.php:118 +msgid "Remote network type" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:126 +#: usr/local/www/vpn_ipsec_phase2.php:128 +#: usr/local/www/vpn_ipsec_phase2.php:128 +msgid "A valid local network bit count must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:129 +#: usr/local/www/vpn_ipsec_phase2.php:131 +#: usr/local/www/vpn_ipsec_phase2.php:131 +msgid "A valid local network IP address must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:136 +#: usr/local/www/vpn_ipsec_phase2.php:146 +#: usr/local/www/vpn_ipsec_phase2.php:170 +#: usr/local/www/vpn_ipsec_phase2.php:178 +#: usr/local/www/vpn_ipsec_phase2.php:178 +msgid "A valid remote network bit count must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:139 +#: usr/local/www/vpn_ipsec_phase2.php:149 +#: usr/local/www/vpn_ipsec_phase2.php:173 +#: usr/local/www/vpn_ipsec_phase2.php:181 +#: usr/local/www/vpn_ipsec_phase2.php:181 +msgid "A valid remote network IP address must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:158 +#: usr/local/www/vpn_ipsec_phase2.php:162 +#: usr/local/www/vpn_ipsec_phase2.php:168 +#: usr/local/www/vpn_ipsec_phase2.php:172 +#: usr/local/www/vpn_ipsec_phase2.php:192 +#: usr/local/www/vpn_ipsec_phase2.php:196 +#: usr/local/www/vpn_ipsec_phase2.php:206 +#: usr/local/www/vpn_ipsec_phase2.php:210 +#: usr/local/www/vpn_ipsec_phase2.php:206 +#: usr/local/www/vpn_ipsec_phase2.php:210 +msgid "Phase2 with this Local Network is already defined for mobile clients." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:189 +#: usr/local/www/vpn_ipsec_phase2.php:193 +#: usr/local/www/vpn_ipsec_phase2.php:199 +#: usr/local/www/vpn_ipsec_phase2.php:203 +#: usr/local/www/vpn_ipsec_phase2.php:223 +#: usr/local/www/vpn_ipsec_phase2.php:227 +#: usr/local/www/vpn_ipsec_phase2.php:237 +#: usr/local/www/vpn_ipsec_phase2.php:241 +#: usr/local/www/vpn_ipsec_phase2.php:237 +#: usr/local/www/vpn_ipsec_phase2.php:241 +msgid "" +"Phase2 with this Local/Remote networks combination is already defined for " +"this Phase1." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:204 +#: usr/local/www/vpn_ipsec_phase2.php:216 +#: usr/local/www/vpn_ipsec_phase2.php:240 +#: usr/local/www/vpn_ipsec_phase2.php:254 +#: usr/local/www/vpn_ipsec_phase2.php:254 +msgid "At least one encryption algorithm must be selected." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:207 +#: usr/local/www/vpn_ipsec_phase2.php:220 +#: usr/local/www/vpn_ipsec_phase2.php:244 +#: usr/local/www/vpn_ipsec_phase2.php:258 +#: usr/local/www/vpn_ipsec_phase2.php:258 +msgid "The P2 lifetime must be an integer." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +msgid "Edit Phase 2" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:396 +#: usr/local/www/vpn_ipsec_phase2.php:422 +#: usr/local/www/vpn_ipsec_phase2.php:488 +#: usr/local/www/vpn_ipsec_phase2.php:510 +#: usr/local/www/vpn_ipsec_phase2.php:510 +msgid "Disable this phase2 entry" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:398 +#: usr/local/www/vpn_ipsec_phase2.php:424 +#: usr/local/www/vpn_ipsec_phase2.php:490 +#: usr/local/www/vpn_ipsec_phase2.php:512 +#: usr/local/www/vpn_ipsec_phase2.php:512 +msgid "" +"Set this option to disable this phase2 entry without removing it from the " +"list" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:433 +#: usr/local/www/vpn_ipsec_phase2.php:459 +#: usr/local/www/vpn_ipsec_phase2.php:525 +#: usr/local/www/vpn_ipsec_phase2.php:561 +#: usr/local/www/vpn_ipsec_phase2.php:547 +#: usr/local/www/vpn_ipsec_phase2.php:582 +#: usr/local/www/vpn_ipsec_phase2.php:547 +#: usr/local/www/vpn_ipsec_phase2.php:582 +#, php-format +msgid "%s subnet" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:512 +#: usr/local/www/vpn_ipsec_phase2.php:538 +#: usr/local/www/vpn_ipsec_phase2.php:640 +#: usr/local/www/vpn_ipsec_phase2.php:661 +#: usr/local/www/vpn_ipsec_phase2.php:661 +msgid "Phase 2 proposal (SA/Key Exchange)" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:527 +#: usr/local/www/vpn_ipsec_phase2.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:655 +#: usr/local/www/vpn_ipsec_phase2.php:676 +#: usr/local/www/vpn_ipsec_phase2.php:676 +msgid "ESP is encryption, AH is authentication only" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:532 +#: usr/local/www/vpn_ipsec_phase2.php:558 +#: usr/local/www/vpn_ipsec_phase2.php:660 +#: usr/local/www/vpn_ipsec_phase2.php:681 +#: usr/local/www/vpn_ipsec_phase2.php:681 +msgid "Encryption algorithms" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:574 +#: usr/local/www/vpn_ipsec_phase2.php:600 +#: usr/local/www/vpn_ipsec_phase2.php:702 +#: usr/local/www/vpn_ipsec_phase2.php:723 +#: usr/local/www/vpn_ipsec_phase2.php:723 +msgid "" +"Hint: use 3DES for best compatibility or if you have a hardware crypto " +"accelerator card. Blowfish is usually the fastest in software encryption" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:580 +#: usr/local/www/vpn_ipsec_phase2.php:606 +#: usr/local/www/vpn_ipsec_phase2.php:708 +#: usr/local/www/vpn_ipsec_phase2.php:729 +#: usr/local/www/vpn_ipsec_phase2.php:729 +msgid "Hash algorithms" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:590 +#: usr/local/www/vpn_ipsec_phase2.php:616 +#: usr/local/www/vpn_ipsec_phase2.php:718 +#: usr/local/www/vpn_ipsec_phase2.php:739 +#: usr/local/www/vpn_ipsec_phase2.php:739 +msgid "PFS key group" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:614 +#: usr/local/www/vpn_ipsec_phase2.php:640 +#: usr/local/www/vpn_ipsec_phase2.php:736 +#: usr/local/www/vpn_ipsec_phase2.php:757 +#: usr/local/www/vpn_ipsec_phase2.php:757 +msgid "Set globally in mobile client options" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:632 +#: usr/local/www/vpn_ipsec_phase2.php:658 +#: usr/local/www/vpn_ipsec_phase2.php:754 +#: usr/local/www/vpn_ipsec_phase2.php:775 +#: usr/local/www/vpn_ipsec_phase2.php:775 +msgid "Automatically ping host" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:300 +msgid "Enable l2tp server" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:325 usr/local/www/vpn_l2tp.php:326 +#: usr/local/www/vpn_l2tp.php:329 usr/local/www/vpn_l2tp.php:329 +msgid "" +"Enter the IP address the L2TP server should give to clients for use as their " +"\"gateway\"" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:337 usr/local/www/vpn_l2tp.php:338 +#: usr/local/www/vpn_l2tp.php:341 usr/local/www/vpn_l2tp.php:341 +msgid "Specify the starting address for the client IP address subnet." +msgstr "" + +#: usr/local/www/vpn_l2tp.php:341 usr/local/www/vpn_pppoe_edit.php:390 +#: usr/local/www/vpn_pppoe_edit.php:391 usr/local/www/vpn_pppoe_edit.php:394 +#: usr/local/www/vpn_pppoe_edit.php:394 +msgid "Subnet netmask" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:354 usr/local/www/vpn_pppoe_edit.php:403 +#: usr/local/www/vpn_pppoe_edit.php:404 usr/local/www/vpn_l2tp.php:355 +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_pppoe_edit.php:407 +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_pppoe_edit.php:407 +msgid "is" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:359 +#: usr/local/www/vpn_l2tp.php:362 usr/local/www/vpn_l2tp.php:362 +msgid "Number of L2TP users" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:371 usr/local/www/vpn_l2tp.php:372 +#: usr/local/www/vpn_l2tp.php:375 usr/local/www/vpn_l2tp.php:375 +msgid "is ten L2TP clients" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:375 usr/local/www/vpn_l2tp.php:376 +#: usr/local/www/vpn_l2tp.php:379 usr/local/www/vpn_l2tp.php:379 +msgid "Secret" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:379 usr/local/www/vpn_l2tp.php:380 +#: usr/local/www/vpn_l2tp.php:383 usr/local/www/vpn_l2tp.php:383 +msgid "" +"Specify optional secret shared between peers. Required on some devices/" +"setups." +msgstr "" + +#: usr/local/www/vpn_l2tp.php:383 +msgid "Encryption type" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:386 usr/local/www/vpn_l2tp.php:387 +#: usr/local/www/vpn_l2tp.php:390 usr/local/www/vpn_l2tp.php:390 +msgid "CHAP" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:387 usr/local/www/services_captiveportal.php:607 +#: usr/local/www/services_captiveportal.php:605 usr/local/www/vpn_l2tp.php:388 +#: usr/local/www/vpn_l2tp.php:391 usr/local/www/services_captiveportal.php:606 +#: usr/local/www/services_captiveportal.php:622 usr/local/www/vpn_l2tp.php:391 +#: usr/local/www/services_captiveportal.php:622 +msgid "PAP" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:390 usr/local/www/vpn_l2tp.php:391 +#: usr/local/www/vpn_l2tp.php:394 usr/local/www/vpn_l2tp.php:394 +msgid "Specifies which protocol to use for authentication." +msgstr "" + +#: usr/local/www/vpn_l2tp.php:394 usr/local/www/vpn_l2tp.php:395 +#: usr/local/www/vpn_l2tp.php:398 usr/local/www/vpn_l2tp.php:398 +msgid "L2TP DNS Servers" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:400 usr/local/www/vpn_l2tp.php:401 +#: usr/local/www/vpn_l2tp.php:404 usr/local/www/vpn_l2tp.php:404 +msgid "primary and secondary DNS servers assigned to L2TP clients" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_l2tp.php:415 +#: usr/local/www/vpn_l2tp.php:418 usr/local/www/vpn_l2tp.php:418 +msgid "" +"When set, all users will be authenticated using the RADIUS server specified " +"below. The local user database will not be used." +msgstr "" + +#: usr/local/www/vpn_l2tp.php:418 usr/local/www/vpn_l2tp.php:419 +#: usr/local/www/vpn_l2tp.php:422 usr/local/www/vpn_l2tp.php:422 +msgid "Sends accounting packets to the RADIUS server." +msgstr "" + +#: usr/local/www/vpn_l2tp.php:421 +msgid "RADIUS server" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:425 usr/local/www/vpn_l2tp.php:426 +#: usr/local/www/vpn_l2tp.php:429 usr/local/www/vpn_l2tp.php:429 +msgid "Enter the IP address of the RADIUS server." +msgstr "" + +#: usr/local/www/vpn_l2tp.php:432 usr/local/www/vpn_l2tp.php:433 +#: usr/local/www/vpn_l2tp.php:436 usr/local/www/vpn_l2tp.php:436 +msgid "" +"Enter the shared secret that will be used to authenticate to the RADIUS " +"server." +msgstr "" + +#: usr/local/www/vpn_l2tp.php:435 +msgid "RADIUS issued IP's" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:439 usr/local/www/vpn_l2tp.php:440 +#: usr/local/www/vpn_l2tp.php:443 usr/local/www/vpn_l2tp.php:443 +msgid "Issue IP Addresses via RADIUS server." +msgstr "" + +#: usr/local/www/vpn_l2tp.php:452 usr/local/www/vpn_l2tp.php:453 +#: usr/local/www/vpn_l2tp.php:456 usr/local/www/vpn_l2tp.php:456 +msgid "" +"Don't forget to add a firewall rule to permit traffic from L2TP clients!" +msgstr "" + +#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87 +#: usr/local/www/vpn_l2tp_users.php:87 +msgid "The l2tp user list has been modified" +msgstr "" + +#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87 +#: usr/local/www/vpn_l2tp_users.php:87 +msgid "Warning: this will terminate all current l2tp sessions!" +msgstr "" + +#: usr/local/www/vpn_l2tp_users_edit.php:164 +#: usr/local/www/vpn_l2tp_users_edit.php:165 +#: usr/local/www/vpn_l2tp_users_edit.php:165 +msgid "If you want to change the users password, enter it here twice." +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:40 +#: usr/local/www/vpn_openvpn_client.php:366 +#: usr/local/www/vpn_openvpn_csc.php:294 +#: usr/local/www/vpn_openvpn_server.php:584 +#: usr/local/www/vpn_openvpn_server.php:657 +#: usr/local/www/vpn_openvpn_client.php:371 +#: usr/local/www/vpn_openvpn_csc.php:293 +#: usr/local/www/vpn_openvpn_server.php:675 +#: usr/local/www/vpn_openvpn_client.php:379 +#: usr/local/www/vpn_openvpn_client.php:397 +#: usr/local/www/vpn_openvpn_server.php:701 +#: usr/local/www/vpn_openvpn_client.php:40 +#: usr/local/www/vpn_openvpn_client.php:397 +#: usr/local/www/vpn_openvpn_csc.php:293 +#: usr/local/www/vpn_openvpn_server.php:701 +msgid "Client" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:82 +#: usr/local/www/vpn_openvpn_client.php:86 +#: usr/local/www/vpn_openvpn_client.php:86 +msgid "Client successfully deleted" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:164 +#: usr/local/www/vpn_openvpn_server.php:227 +#: usr/local/www/vpn_openvpn_server.php:232 +#: usr/local/www/vpn_openvpn_client.php:165 +#: usr/local/www/vpn_openvpn_server.php:233 +#: usr/local/www/vpn_openvpn_client.php:171 +#: usr/local/www/vpn_openvpn_client.php:182 +#: usr/local/www/vpn_openvpn_server.php:254 +#: usr/local/www/vpn_openvpn_client.php:182 +#: usr/local/www/vpn_openvpn_server.php:254 +msgid "The specified 'Local port' is in use. Please select another value" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:183 +#: usr/local/www/vpn_openvpn_client.php:184 +#: usr/local/www/vpn_openvpn_client.php:190 +#: usr/local/www/vpn_openvpn_client.php:201 +#: usr/local/www/vpn_openvpn_client.php:201 +msgid "User name and password are required for proxy with authentication." +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:200 +#: usr/local/www/vpn_openvpn_server.php:235 +#: usr/local/www/vpn_openvpn_server.php:240 +#: usr/local/www/vpn_openvpn_client.php:204 +#: usr/local/www/vpn_openvpn_server.php:241 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_client.php:228 +#: usr/local/www/vpn_openvpn_server.php:262 +#: usr/local/www/vpn_openvpn_client.php:228 +#: usr/local/www/vpn_openvpn_server.php:262 +msgid "The field 'Shared Key' does not appear to be valid" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:205 +#: usr/local/www/vpn_openvpn_server.php:240 +#: usr/local/www/vpn_openvpn_server.php:245 +#: usr/local/www/vpn_openvpn_client.php:209 +#: usr/local/www/vpn_openvpn_server.php:246 +#: usr/local/www/vpn_openvpn_client.php:215 +#: usr/local/www/vpn_openvpn_client.php:233 +#: usr/local/www/vpn_openvpn_server.php:267 +#: usr/local/www/vpn_openvpn_client.php:233 +#: usr/local/www/vpn_openvpn_server.php:267 +msgid "The field 'TLS Authentication Key' does not appear to be valid" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/vpn_openvpn_server.php:286 +#: usr/local/www/vpn_openvpn_server.php:291 +#: usr/local/www/vpn_openvpn_client.php:218 +#: usr/local/www/vpn_openvpn_server.php:292 +#: usr/local/www/vpn_openvpn_client.php:224 +#: usr/local/www/vpn_openvpn_client.php:242 +#: usr/local/www/vpn_openvpn_server.php:313 +#: usr/local/www/vpn_openvpn_client.php:242 +#: usr/local/www/vpn_openvpn_server.php:313 +msgid "Shared key" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:367 +#: usr/local/www/vpn_openvpn_csc.php:295 +#: usr/local/www/vpn_openvpn_server.php:585 +#: usr/local/www/vpn_openvpn_server.php:658 +#: usr/local/www/vpn_openvpn_client.php:372 +#: usr/local/www/vpn_openvpn_csc.php:294 +#: usr/local/www/vpn_openvpn_server.php:676 +#: usr/local/www/vpn_openvpn_client.php:380 +#: usr/local/www/vpn_openvpn_client.php:398 +#: usr/local/www/vpn_openvpn_server.php:702 +#: usr/local/www/vpn_openvpn_client.php:398 +#: usr/local/www/vpn_openvpn_csc.php:294 +#: usr/local/www/vpn_openvpn_server.php:702 +msgid "Client Specific Overrides" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:397 +#: usr/local/www/vpn_openvpn_client.php:402 +#: usr/local/www/vpn_openvpn_client.php:410 +#: usr/local/www/vpn_openvpn_client.php:428 +#: usr/local/www/vpn_openvpn_client.php:428 +msgid "Disable this client" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:402 +#: usr/local/www/vpn_openvpn_client.php:407 +#: usr/local/www/vpn_openvpn_client.php:415 +#: usr/local/www/vpn_openvpn_client.php:433 +#: usr/local/www/vpn_openvpn_client.php:433 +msgid "" +"Set this option to disable this client without removing it from the list" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:406 +#: usr/local/www/vpn_openvpn_server.php:624 +#: usr/local/www/vpn_openvpn_server.php:697 +#: usr/local/www/vpn_openvpn_client.php:411 +#: usr/local/www/vpn_openvpn_server.php:715 +#: usr/local/www/vpn_openvpn_client.php:419 +#: usr/local/www/vpn_openvpn_client.php:437 +#: usr/local/www/vpn_openvpn_server.php:741 +#: usr/local/www/vpn_openvpn_client.php:437 +#: usr/local/www/vpn_openvpn_server.php:741 +msgid "Server Mode" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:436 +#: usr/local/www/vpn_openvpn_client.php:441 +#: usr/local/www/vpn_openvpn_client.php:449 +#: usr/local/www/vpn_openvpn_client.php:467 +#: usr/local/www/vpn_openvpn_client.php:467 +msgid "Device mode" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:476 +#: usr/local/www/vpn_openvpn_server.php:716 +#: usr/local/www/vpn_openvpn_server.php:789 +#: usr/local/www/vpn_openvpn_client.php:481 +#: usr/local/www/vpn_openvpn_server.php:817 +#: usr/local/www/vpn_openvpn_client.php:499 +#: usr/local/www/vpn_openvpn_client.php:518 +#: usr/local/www/vpn_openvpn_server.php:844 +#: usr/local/www/vpn_openvpn_client.php:518 +#: usr/local/www/vpn_openvpn_server.php:844 +msgid "Local port" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:480 +#: usr/local/www/vpn_openvpn_client.php:485 +#: usr/local/www/vpn_openvpn_client.php:503 +#: usr/local/www/vpn_openvpn_client.php:522 +#: usr/local/www/vpn_openvpn_client.php:522 +msgid "" +"Set this option if you would like to bind to a specific port. Leave this " +"blank or enter 0 for a random dynamic port." +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:484 +#: usr/local/www/vpn_openvpn_client.php:489 +#: usr/local/www/vpn_openvpn_client.php:507 +#: usr/local/www/vpn_openvpn_client.php:526 +#: usr/local/www/vpn_openvpn_client.php:526 +msgid "Server host or address" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:490 +#: usr/local/www/vpn_openvpn_client.php:495 +#: usr/local/www/vpn_openvpn_client.php:513 +#: usr/local/www/vpn_openvpn_client.php:532 +#: usr/local/www/vpn_openvpn_client.php:532 +msgid "Server port" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:496 +#: usr/local/www/vpn_openvpn_client.php:501 +#: usr/local/www/vpn_openvpn_client.php:519 +#: usr/local/www/vpn_openvpn_client.php:538 +#: usr/local/www/vpn_openvpn_client.php:538 +msgid "Proxy host or address" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:502 +#: usr/local/www/vpn_openvpn_client.php:507 +#: usr/local/www/vpn_openvpn_client.php:525 +#: usr/local/www/vpn_openvpn_client.php:544 +#: usr/local/www/vpn_openvpn_client.php:544 +msgid "Proxy port" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:508 +#: usr/local/www/vpn_openvpn_client.php:513 +#: usr/local/www/vpn_openvpn_client.php:531 +#: usr/local/www/vpn_openvpn_client.php:550 +#: usr/local/www/vpn_openvpn_client.php:550 +msgid "Proxy authentication extra options" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:520 +#: usr/local/www/vpn_openvpn_client.php:525 +#: usr/local/www/vpn_openvpn_client.php:543 +#: usr/local/www/vpn_openvpn_client.php:562 +#: usr/local/www/vpn_openvpn_client.php:562 +msgid "basic" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:521 +#: usr/local/www/vpn_openvpn_client.php:526 +#: usr/local/www/vpn_openvpn_client.php:544 +#: usr/local/www/vpn_openvpn_client.php:563 +#: usr/local/www/vpn_openvpn_client.php:563 +msgid "ntlm" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:552 +#: usr/local/www/vpn_openvpn_client.php:557 +#: usr/local/www/vpn_openvpn_client.php:575 +#: usr/local/www/vpn_openvpn_client.php:594 +#: usr/local/www/vpn_openvpn_client.php:594 +msgid "Server host name resolution" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:562 +#: usr/local/www/vpn_openvpn_client.php:567 +#: usr/local/www/vpn_openvpn_client.php:585 +#: usr/local/www/vpn_openvpn_client.php:604 +#: usr/local/www/vpn_openvpn_client.php:604 +msgid "Infinitely resolve server" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:567 +#: usr/local/www/vpn_openvpn_client.php:572 +#: usr/local/www/vpn_openvpn_client.php:590 +#: usr/local/www/vpn_openvpn_client.php:609 +#: usr/local/www/vpn_openvpn_client.php:609 +msgid "" +"Continuously attempt to resolve the server host name. Useful when " +"communicating with a server that is not permanently connected to the Internet" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:584 +#: usr/local/www/vpn_openvpn_server.php:733 +#: usr/local/www/vpn_openvpn_server.php:806 +#: usr/local/www/vpn_openvpn_client.php:589 +#: usr/local/www/vpn_openvpn_server.php:834 +#: usr/local/www/vpn_openvpn_client.php:607 +#: usr/local/www/vpn_openvpn_client.php:626 +#: usr/local/www/vpn_openvpn_server.php:861 +#: usr/local/www/vpn_openvpn_client.php:626 +#: usr/local/www/vpn_openvpn_server.php:861 +msgid "Cryptographic Settings" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:587 +#: usr/local/www/vpn_openvpn_server.php:736 +#: usr/local/www/vpn_openvpn_server.php:809 +#: usr/local/www/vpn_openvpn_client.php:592 +#: usr/local/www/vpn_openvpn_server.php:837 +#: usr/local/www/vpn_openvpn_client.php:610 +#: usr/local/www/vpn_openvpn_client.php:629 +#: usr/local/www/vpn_openvpn_server.php:864 +#: usr/local/www/vpn_openvpn_client.php:629 +#: usr/local/www/vpn_openvpn_server.php:864 +msgid "TLS Authentication" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:597 +#: usr/local/www/vpn_openvpn_server.php:746 +#: usr/local/www/vpn_openvpn_server.php:819 +#: usr/local/www/vpn_openvpn_client.php:602 +#: usr/local/www/vpn_openvpn_server.php:847 +#: usr/local/www/vpn_openvpn_client.php:620 +#: usr/local/www/vpn_openvpn_client.php:639 +#: usr/local/www/vpn_openvpn_server.php:874 +#: usr/local/www/vpn_openvpn_client.php:639 +#: usr/local/www/vpn_openvpn_server.php:874 +msgid "Enable authentication of TLS packets" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:611 +#: usr/local/www/vpn_openvpn_server.php:760 +#: usr/local/www/vpn_openvpn_server.php:833 +#: usr/local/www/vpn_openvpn_client.php:616 +#: usr/local/www/vpn_openvpn_server.php:861 +#: usr/local/www/vpn_openvpn_client.php:634 +#: usr/local/www/vpn_openvpn_client.php:653 +#: usr/local/www/vpn_openvpn_server.php:888 +#: usr/local/www/vpn_openvpn_client.php:653 +#: usr/local/www/vpn_openvpn_server.php:888 +msgid "Automatically generate a shared TLS authentication key" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:622 +#: usr/local/www/vpn_openvpn_client.php:699 +#: usr/local/www/vpn_openvpn_server.php:771 +#: usr/local/www/vpn_openvpn_server.php:891 +#: usr/local/www/vpn_openvpn_server.php:844 +#: usr/local/www/vpn_openvpn_server.php:964 +#: usr/local/www/vpn_openvpn_client.php:627 +#: usr/local/www/vpn_openvpn_client.php:704 +#: usr/local/www/vpn_openvpn_server.php:872 +#: usr/local/www/vpn_openvpn_server.php:992 +#: usr/local/www/vpn_openvpn_client.php:645 +#: usr/local/www/vpn_openvpn_client.php:722 +#: usr/local/www/vpn_openvpn_client.php:664 +#: usr/local/www/vpn_openvpn_client.php:741 +#: usr/local/www/vpn_openvpn_server.php:899 +#: usr/local/www/vpn_openvpn_server.php:1019 +#: usr/local/www/vpn_openvpn_client.php:664 +#: usr/local/www/vpn_openvpn_client.php:741 +#: usr/local/www/vpn_openvpn_server.php:899 +#: usr/local/www/vpn_openvpn_server.php:1019 +msgid "Paste your shared key here" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:648 +#: usr/local/www/vpn_openvpn_client.php:653 +#: usr/local/www/vpn_openvpn_client.php:671 +#: usr/local/www/vpn_openvpn_client.php:690 +#: usr/local/www/vpn_openvpn_client.php:690 +msgid "Client Certificate" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:677 +#: usr/local/www/vpn_openvpn_server.php:869 +#: usr/local/www/vpn_openvpn_server.php:942 +#: usr/local/www/vpn_openvpn_client.php:682 +#: usr/local/www/vpn_openvpn_server.php:970 +#: usr/local/www/vpn_openvpn_client.php:700 +#: usr/local/www/vpn_openvpn_client.php:719 +#: usr/local/www/vpn_openvpn_server.php:997 +#: usr/local/www/vpn_openvpn_client.php:719 +#: usr/local/www/vpn_openvpn_server.php:997 +msgid "Shared Key" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:688 +#: usr/local/www/vpn_openvpn_server.php:880 +#: usr/local/www/vpn_openvpn_server.php:953 +#: usr/local/www/vpn_openvpn_client.php:693 +#: usr/local/www/vpn_openvpn_server.php:981 +#: usr/local/www/vpn_openvpn_client.php:711 +#: usr/local/www/vpn_openvpn_client.php:730 +#: usr/local/www/vpn_openvpn_server.php:1008 +#: usr/local/www/vpn_openvpn_client.php:730 +#: usr/local/www/vpn_openvpn_server.php:1008 +msgid "Automatically generate a shared key" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:724 +#: usr/local/www/vpn_openvpn_server.php:916 +#: usr/local/www/vpn_openvpn_server.php:989 +#: usr/local/www/vpn_openvpn_client.php:729 +#: usr/local/www/vpn_openvpn_server.php:1017 +#: usr/local/www/vpn_openvpn_client.php:747 +#: usr/local/www/vpn_openvpn_client.php:766 +#: usr/local/www/vpn_openvpn_server.php:1044 +#: usr/local/www/vpn_openvpn_client.php:766 +#: usr/local/www/vpn_openvpn_server.php:1044 +msgid "Hardware Crypto" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:745 +#: usr/local/www/vpn_openvpn_csc.php:374 +#: usr/local/www/vpn_openvpn_server.php:980 +#: usr/local/www/vpn_openvpn_server.php:1053 +#: usr/local/www/vpn_openvpn_client.php:750 +#: usr/local/www/vpn_openvpn_csc.php:373 +#: usr/local/www/vpn_openvpn_server.php:1081 +#: usr/local/www/vpn_openvpn_client.php:768 +#: usr/local/www/vpn_openvpn_client.php:787 +#: usr/local/www/vpn_openvpn_server.php:1108 +#: usr/local/www/vpn_openvpn_client.php:787 +#: usr/local/www/vpn_openvpn_csc.php:373 +#: usr/local/www/vpn_openvpn_server.php:1108 +msgid "Tunnel Settings" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:748 +#: usr/local/www/vpn_openvpn_csc.php:377 +#: usr/local/www/vpn_openvpn_server.php:1450 +#: usr/local/www/vpn_openvpn_server.php:1592 +#: usr/local/www/vpn_openvpn_client.php:753 +#: usr/local/www/vpn_openvpn_csc.php:376 +#: usr/local/www/vpn_openvpn_server.php:1633 +#: usr/local/www/vpn_openvpn_server.php:1685 +#: usr/local/www/vpn_openvpn_csc.php:376 +#: usr/local/www/vpn_openvpn_server.php:1685 +msgid "Tunnel Network" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:752 +#: usr/local/www/vpn_openvpn_csc.php:381 +#: usr/local/www/vpn_openvpn_client.php:757 +#: usr/local/www/vpn_openvpn_csc.php:380 +#: usr/local/www/vpn_openvpn_client.php:775 +#: usr/local/www/vpn_openvpn_client.php:794 +#: usr/local/www/vpn_openvpn_client.php:794 +#: usr/local/www/vpn_openvpn_csc.php:380 +msgid "" +"This is the virtual network used for private communications between this " +"client and the server expressed using CIDR (eg. 10.0.8.0/24). The first " +"network address is assumed to be the server address and the second network " +"address will be assigned to the client virtual interface" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:766 +#: usr/local/www/vpn_openvpn_client.php:771 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter here the " +"remote LAN here. You may leave this blank to only communicate with other " +"clients" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:776 +#: usr/local/www/vpn_openvpn_client.php:781 +#: usr/local/www/vpn_openvpn_client.php:827 +#: usr/local/www/vpn_openvpn_client.php:846 +#: usr/local/www/vpn_openvpn_client.php:846 +msgid "Limit outgoing bandwidth" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:780 +#: usr/local/www/vpn_openvpn_client.php:785 +#: usr/local/www/vpn_openvpn_client.php:831 +#: usr/local/www/vpn_openvpn_client.php:850 +#: usr/local/www/vpn_openvpn_client.php:850 +msgid "" +"Maximum outgoing bandwidth for this tunnel. Leave empty for no limit. The " +"input value has to be something between 100 bytes/sec and 100 Mbytes/sec " +"(entered as bytes per second)" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:797 +#: usr/local/www/vpn_openvpn_server.php:1087 +#: usr/local/www/vpn_openvpn_server.php:1229 +#: usr/local/www/vpn_openvpn_client.php:802 +#: usr/local/www/vpn_openvpn_server.php:1271 +#: usr/local/www/vpn_openvpn_client.php:848 +#: usr/local/www/vpn_openvpn_client.php:867 +#: usr/local/www/vpn_openvpn_server.php:1298 +#: usr/local/www/vpn_openvpn_client.php:867 +#: usr/local/www/vpn_openvpn_server.php:1298 +msgid "Compress tunnel packets using the LZO algorithm" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:805 +#: usr/local/www/vpn_openvpn_server.php:1095 +#: usr/local/www/vpn_openvpn_server.php:1237 +#: usr/local/www/vpn_openvpn_client.php:810 +#: usr/local/www/vpn_openvpn_server.php:1279 +#: usr/local/www/vpn_openvpn_client.php:856 +#: usr/local/www/vpn_openvpn_client.php:875 +#: usr/local/www/vpn_openvpn_server.php:1306 +#: usr/local/www/vpn_openvpn_client.php:875 +#: usr/local/www/vpn_openvpn_server.php:1306 +msgid "Type-of-Service" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:815 +#: usr/local/www/vpn_openvpn_server.php:1105 +#: usr/local/www/vpn_openvpn_server.php:1247 +#: usr/local/www/vpn_openvpn_client.php:820 +#: usr/local/www/vpn_openvpn_server.php:1289 +#: usr/local/www/vpn_openvpn_client.php:866 +#: usr/local/www/vpn_openvpn_client.php:885 +#: usr/local/www/vpn_openvpn_server.php:1316 +#: usr/local/www/vpn_openvpn_client.php:885 +#: usr/local/www/vpn_openvpn_server.php:1316 +msgid "" +"Set the TOS IP header value of tunnel packets to match the encapsulated " +"packet value" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:826 +#: usr/local/www/vpn_openvpn_server.php:1409 +#: usr/local/www/vpn_openvpn_server.php:1551 +#: usr/local/www/vpn_openvpn_client.php:831 +#: usr/local/www/vpn_openvpn_server.php:1593 +#: usr/local/www/vpn_openvpn_client.php:880 +#: usr/local/www/vpn_openvpn_client.php:899 +#: usr/local/www/vpn_openvpn_server.php:1645 +#: usr/local/www/vpn_openvpn_client.php:899 +#: usr/local/www/vpn_openvpn_server.php:1645 +msgid "Advanced configuration" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:835 +#: usr/local/www/vpn_openvpn_client.php:840 +#: usr/local/www/vpn_openvpn_client.php:889 +#: usr/local/www/vpn_openvpn_client.php:908 +#: usr/local/www/vpn_openvpn_client.php:908 +msgid "" +"Enter any additional options you would like to add to the OpenVPN client " +"configuration here, separated by a semicolon" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:836 +#: usr/local/www/vpn_openvpn_client.php:841 +#: usr/local/www/vpn_openvpn_client.php:890 +msgid "EXAMPLE: route 10.0.0.0 255.255.255.0;" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:891 +#: usr/local/www/vpn_openvpn_client.php:896 +#: usr/local/www/vpn_openvpn_client.php:949 +#: usr/local/www/vpn_openvpn_client.php:968 +#: usr/local/www/vpn_openvpn_client.php:968 +msgid "edit client" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:895 +#: usr/local/www/vpn_openvpn_client.php:900 +#: usr/local/www/vpn_openvpn_client.php:953 +#: usr/local/www/vpn_openvpn_client.php:972 +#: usr/local/www/vpn_openvpn_client.php:972 +msgid "delete client" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:908 +#: usr/local/www/vpn_openvpn_client.php:913 +#: usr/local/www/vpn_openvpn_client.php:966 +#: usr/local/www/vpn_openvpn_client.php:985 +#: usr/local/www/vpn_openvpn_client.php:985 +msgid "add client" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:915 +#: usr/local/www/vpn_openvpn_client.php:920 +#: usr/local/www/vpn_openvpn_client.php:973 +#: usr/local/www/vpn_openvpn_client.php:992 +#: usr/local/www/vpn_openvpn_client.php:992 +msgid "Additional OpenVPN clients can be added here." +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:40 usr/local/www/vpn_openvpn_csc.php:40 +msgid "Client Specific Override" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:67 usr/local/www/vpn_openvpn_csc.php:66 +#: usr/local/www/vpn_openvpn_csc.php:66 +msgid "Client Specific Override successfully deleted" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:131 +#: usr/local/www/vpn_openvpn_server.php:244 +#: usr/local/www/vpn_openvpn_server.php:249 +#: usr/local/www/vpn_openvpn_csc.php:130 +#: usr/local/www/vpn_openvpn_server.php:250 +#: usr/local/www/vpn_openvpn_server.php:271 +#: usr/local/www/vpn_openvpn_csc.php:130 +#: usr/local/www/vpn_openvpn_server.php:271 +msgid "The field 'DNS Server #1' must contain a valid IP address" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:133 +#: usr/local/www/vpn_openvpn_server.php:246 +#: usr/local/www/vpn_openvpn_server.php:251 +#: usr/local/www/vpn_openvpn_csc.php:132 +#: usr/local/www/vpn_openvpn_server.php:252 +#: usr/local/www/vpn_openvpn_server.php:273 +#: usr/local/www/vpn_openvpn_csc.php:132 +#: usr/local/www/vpn_openvpn_server.php:273 +msgid "The field 'DNS Server #2' must contain a valid IP address" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:135 +#: usr/local/www/vpn_openvpn_server.php:248 +#: usr/local/www/vpn_openvpn_server.php:253 +#: usr/local/www/vpn_openvpn_csc.php:134 +#: usr/local/www/vpn_openvpn_server.php:254 +#: usr/local/www/vpn_openvpn_server.php:275 +#: usr/local/www/vpn_openvpn_csc.php:134 +#: usr/local/www/vpn_openvpn_server.php:275 +msgid "The field 'DNS Server #3' must contain a valid IP address" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:137 +#: usr/local/www/vpn_openvpn_server.php:250 +#: usr/local/www/vpn_openvpn_server.php:255 +#: usr/local/www/vpn_openvpn_csc.php:136 +#: usr/local/www/vpn_openvpn_server.php:256 +#: usr/local/www/vpn_openvpn_server.php:277 +#: usr/local/www/vpn_openvpn_csc.php:136 +#: usr/local/www/vpn_openvpn_server.php:277 +msgid "The field 'DNS Server #4' must contain a valid IP address" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:142 +#: usr/local/www/vpn_openvpn_server.php:255 +#: usr/local/www/vpn_openvpn_server.php:260 +#: usr/local/www/vpn_openvpn_csc.php:141 +#: usr/local/www/vpn_openvpn_server.php:261 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/vpn_openvpn_csc.php:141 +#: usr/local/www/vpn_openvpn_server.php:282 +msgid "The field 'NTP Server #1' must contain a valid IP address" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:144 +#: usr/local/www/vpn_openvpn_server.php:257 +#: usr/local/www/vpn_openvpn_server.php:262 +#: usr/local/www/vpn_openvpn_csc.php:143 +#: usr/local/www/vpn_openvpn_server.php:263 +#: usr/local/www/vpn_openvpn_server.php:284 +#: usr/local/www/vpn_openvpn_csc.php:143 +#: usr/local/www/vpn_openvpn_server.php:284 +msgid "The field 'NTP Server #2' must contain a valid IP address" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:146 +#: usr/local/www/vpn_openvpn_server.php:259 +#: usr/local/www/vpn_openvpn_server.php:264 +#: usr/local/www/vpn_openvpn_csc.php:145 +#: usr/local/www/vpn_openvpn_server.php:265 +#: usr/local/www/vpn_openvpn_server.php:286 +#: usr/local/www/vpn_openvpn_csc.php:145 +#: usr/local/www/vpn_openvpn_server.php:286 +msgid "The field 'NTP Server #3' must contain a valid IP address" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:148 +#: usr/local/www/vpn_openvpn_server.php:261 +#: usr/local/www/vpn_openvpn_server.php:266 +#: usr/local/www/vpn_openvpn_csc.php:147 +#: usr/local/www/vpn_openvpn_server.php:267 +#: usr/local/www/vpn_openvpn_server.php:288 +#: usr/local/www/vpn_openvpn_csc.php:147 +#: usr/local/www/vpn_openvpn_server.php:288 +msgid "The field 'NTP Server #4' must contain a valid IP address" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:154 +#: usr/local/www/vpn_openvpn_server.php:267 +#: usr/local/www/vpn_openvpn_server.php:272 +#: usr/local/www/vpn_openvpn_csc.php:153 +#: usr/local/www/vpn_openvpn_server.php:273 +#: usr/local/www/vpn_openvpn_server.php:294 +#: usr/local/www/vpn_openvpn_csc.php:153 +#: usr/local/www/vpn_openvpn_server.php:294 +msgid "The field 'WINS Server #1' must contain a valid IP address" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:156 +#: usr/local/www/vpn_openvpn_server.php:269 +#: usr/local/www/vpn_openvpn_server.php:274 +#: usr/local/www/vpn_openvpn_csc.php:155 +#: usr/local/www/vpn_openvpn_server.php:275 +#: usr/local/www/vpn_openvpn_server.php:296 +#: usr/local/www/vpn_openvpn_csc.php:155 +#: usr/local/www/vpn_openvpn_server.php:296 +msgid "The field 'WINS Server #2' must contain a valid IP address" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:160 +#: usr/local/www/vpn_openvpn_server.php:273 +#: usr/local/www/vpn_openvpn_server.php:278 +#: usr/local/www/vpn_openvpn_csc.php:159 +#: usr/local/www/vpn_openvpn_server.php:279 +#: usr/local/www/vpn_openvpn_server.php:300 +#: usr/local/www/vpn_openvpn_csc.php:159 +#: usr/local/www/vpn_openvpn_server.php:300 +msgid "" +"The field 'NetBIOS Data Distribution Server #1' must contain a valid IP " +"address" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:325 usr/local/www/vpn_openvpn_csc.php:324 +#: usr/local/www/vpn_openvpn_csc.php:324 +msgid "Disable this override" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:330 usr/local/www/vpn_openvpn_csc.php:329 +#: usr/local/www/vpn_openvpn_csc.php:329 +msgid "" +"Set this option to disable this client-specific override without removing it " +"from the list" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:334 usr/local/www/vpn_openvpn_csc.php:333 +#: usr/local/www/vpn_openvpn_csc.php:333 +msgid "Common name" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:338 usr/local/www/vpn_openvpn_csc.php:337 +#: usr/local/www/vpn_openvpn_csc.php:337 +msgid "Enter the client's X.509 common name here" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:350 usr/local/www/vpn_openvpn_csc.php:349 +#: usr/local/www/vpn_openvpn_csc.php:349 +msgid "Connection blocking" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:360 usr/local/www/vpn_openvpn_csc.php:359 +#: usr/local/www/vpn_openvpn_csc.php:359 +msgid "Block this client connection based on its common name" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:365 usr/local/www/vpn_openvpn_csc.php:364 +#: usr/local/www/vpn_openvpn_csc.php:364 +msgid "" +"Don't use this option to permanently disable a client due to a compromised " +"key or password. Use a CRL (certificate revocation list) instead" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:391 +#: usr/local/www/vpn_openvpn_server.php:1011 +#: usr/local/www/vpn_openvpn_server.php:1153 +#: usr/local/www/vpn_openvpn_csc.php:390 +#: usr/local/www/vpn_openvpn_server.php:1181 +#: usr/local/www/vpn_openvpn_server.php:1208 +#: usr/local/www/vpn_openvpn_csc.php:390 +#: usr/local/www/vpn_openvpn_server.php:1208 +msgid "Redirect Gateway" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:401 +#: usr/local/www/vpn_openvpn_server.php:1021 +#: usr/local/www/vpn_openvpn_server.php:1163 +#: usr/local/www/vpn_openvpn_csc.php:400 +#: usr/local/www/vpn_openvpn_server.php:1191 +#: usr/local/www/vpn_openvpn_server.php:1218 +#: usr/local/www/vpn_openvpn_csc.php:400 +#: usr/local/www/vpn_openvpn_server.php:1218 +msgid "Force all client generated traffic through the tunnel" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:412 +#: usr/local/www/vpn_openvpn_server.php:1155 +#: usr/local/www/vpn_openvpn_server.php:1297 +#: usr/local/www/vpn_openvpn_csc.php:411 +#: usr/local/www/vpn_openvpn_server.php:1339 +#: usr/local/www/vpn_openvpn_server.php:1366 +#: usr/local/www/vpn_openvpn_csc.php:411 +#: usr/local/www/vpn_openvpn_server.php:1366 +msgid "Client Settings" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:415 usr/local/www/vpn_openvpn_csc.php:414 +#: usr/local/www/vpn_openvpn_csc.php:414 +msgid "Server Definitions" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:425 usr/local/www/vpn_openvpn_csc.php:424 +#: usr/local/www/vpn_openvpn_csc.php:424 +msgid "Prevent this client from receiving any server-defined client settings" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:510 +#: usr/local/www/vpn_openvpn_server.php:1271 +#: usr/local/www/vpn_openvpn_server.php:1413 +#: usr/local/www/vpn_openvpn_csc.php:509 +#: usr/local/www/vpn_openvpn_server.php:1455 +#: usr/local/www/vpn_openvpn_server.php:1507 +#: usr/local/www/vpn_openvpn_csc.php:509 +#: usr/local/www/vpn_openvpn_server.php:1507 +msgid "NTP Servers" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:520 +#: usr/local/www/vpn_openvpn_server.php:1281 +#: usr/local/www/vpn_openvpn_server.php:1423 +#: usr/local/www/vpn_openvpn_csc.php:519 +#: usr/local/www/vpn_openvpn_server.php:1465 +#: usr/local/www/vpn_openvpn_server.php:1517 +#: usr/local/www/vpn_openvpn_csc.php:519 +#: usr/local/www/vpn_openvpn_server.php:1517 +msgid "Provide a NTP server list to clients" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:546 +#: usr/local/www/vpn_openvpn_server.php:1307 +#: usr/local/www/vpn_openvpn_server.php:1449 +#: usr/local/www/vpn_openvpn_csc.php:545 +#: usr/local/www/vpn_openvpn_server.php:1491 +#: usr/local/www/vpn_openvpn_server.php:1543 +#: usr/local/www/vpn_openvpn_csc.php:545 +#: usr/local/www/vpn_openvpn_server.php:1543 +msgid "NetBIOS Options" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:556 +#: usr/local/www/vpn_openvpn_server.php:1317 +#: usr/local/www/vpn_openvpn_server.php:1459 +#: usr/local/www/vpn_openvpn_csc.php:555 +#: usr/local/www/vpn_openvpn_server.php:1501 +#: usr/local/www/vpn_openvpn_server.php:1553 +#: usr/local/www/vpn_openvpn_csc.php:555 +#: usr/local/www/vpn_openvpn_server.php:1553 +msgid "Enable NetBIOS over TCP/IP" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:561 +msgid "" +"If this option is not set, all NetBIOS-over-TCP/IP options (includeing WINS) " +"will be disabled" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:568 +#: usr/local/www/vpn_openvpn_server.php:1329 +#: usr/local/www/vpn_openvpn_server.php:1471 +#: usr/local/www/vpn_openvpn_csc.php:567 +#: usr/local/www/vpn_openvpn_server.php:1513 +#: usr/local/www/vpn_openvpn_server.php:1565 +#: usr/local/www/vpn_openvpn_csc.php:567 +#: usr/local/www/vpn_openvpn_server.php:1565 +msgid "Node Type" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:581 +#: usr/local/www/vpn_openvpn_server.php:1342 +#: usr/local/www/vpn_openvpn_server.php:1484 +#: usr/local/www/vpn_openvpn_csc.php:580 +#: usr/local/www/vpn_openvpn_server.php:1526 +#: usr/local/www/vpn_openvpn_server.php:1578 +#: usr/local/www/vpn_openvpn_csc.php:580 +#: usr/local/www/vpn_openvpn_server.php:1578 +msgid "" +"Possible options: b-node (broadcasts), p-node (point-to-point name queries " +"to a WINS server), m-node (broadcast then query name server), and h-node " +"(query name server, then broadcast)" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:595 +#: usr/local/www/vpn_openvpn_server.php:1356 +#: usr/local/www/vpn_openvpn_server.php:1498 +#: usr/local/www/vpn_openvpn_csc.php:594 +#: usr/local/www/vpn_openvpn_server.php:1540 +#: usr/local/www/vpn_openvpn_server.php:1592 +#: usr/local/www/vpn_openvpn_csc.php:594 +#: usr/local/www/vpn_openvpn_server.php:1592 +msgid "" +"A NetBIOS Scope\tID provides an extended naming service for\tNetBIOS over " +"TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to " +"only those nodes with the same NetBIOS scope ID" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:648 usr/local/www/vpn_openvpn_csc.php:647 +#: usr/local/www/vpn_openvpn_csc.php:647 +msgid "" +"Enter any additional options you would like to add for this client specific " +"override, separated by a semicolon" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:649 +#: usr/local/www/vpn_openvpn_server.php:1419 +#: usr/local/www/vpn_openvpn_server.php:1561 +#: usr/local/www/vpn_openvpn_csc.php:648 +#: usr/local/www/vpn_openvpn_server.php:1603 +#: usr/local/www/vpn_openvpn_server.php:1655 +#: usr/local/www/vpn_openvpn_csc.php:648 +#: usr/local/www/vpn_openvpn_server.php:1655 +msgid "EXAMPLE: push \"route 10.0.0.0 255.255.255.0\"" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:696 usr/local/www/vpn_openvpn_csc.php:695 +#: usr/local/www/vpn_openvpn_csc.php:695 +msgid "edit csc" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:699 usr/local/www/vpn_openvpn_csc.php:698 +#: usr/local/www/vpn_openvpn_csc.php:698 +msgid "Do you really want to delete this csc?" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:700 usr/local/www/vpn_openvpn_csc.php:699 +#: usr/local/www/vpn_openvpn_csc.php:699 +msgid "delete csc" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:711 usr/local/www/vpn_openvpn_csc.php:710 +#: usr/local/www/vpn_openvpn_csc.php:710 +msgid "add csc" +msgstr "" + +#: usr/local/www/vpn_openvpn_csc.php:718 usr/local/www/vpn_openvpn_csc.php:717 +#: usr/local/www/vpn_openvpn_csc.php:717 +msgid "Additional OpenVPN client specific overrides can be added here." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:86 +#: usr/local/www/vpn_openvpn_server.php:87 +#: usr/local/www/vpn_openvpn_server.php:87 +msgid "Server successfully deleted" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:210 +#: usr/local/www/vpn_openvpn_server.php:215 +#: usr/local/www/vpn_openvpn_server.php:216 +#: usr/local/www/vpn_openvpn_server.php:228 +#: usr/local/www/vpn_openvpn_server.php:228 +msgid "" +"You must select a Backend for Authentication if the server mode requires " +"User Auth." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:277 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/vpn_openvpn_server.php:283 +#: usr/local/www/vpn_openvpn_server.php:304 +#: usr/local/www/vpn_openvpn_server.php:304 +msgid "The field 'Concurrent connections' must be numeric." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:290 +#: usr/local/www/vpn_openvpn_server.php:296 +#: usr/local/www/vpn_openvpn_server.php:297 +#: usr/local/www/vpn_openvpn_server.php:318 +#: usr/local/www/vpn_openvpn_server.php:318 +msgid "Tunnel network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:615 +#: usr/local/www/vpn_openvpn_server.php:688 +#: usr/local/www/vpn_openvpn_server.php:706 +#: usr/local/www/vpn_openvpn_server.php:732 +#: usr/local/www/vpn_openvpn_server.php:732 +msgid "Disable this server" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:620 +#: usr/local/www/vpn_openvpn_server.php:693 +#: usr/local/www/vpn_openvpn_server.php:711 +#: usr/local/www/vpn_openvpn_server.php:737 +#: usr/local/www/vpn_openvpn_server.php:737 +msgid "" +"Set this option to disable this server without removing it from the list" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:639 +#: usr/local/www/vpn_openvpn_server.php:712 +#: usr/local/www/vpn_openvpn_server.php:730 +#: usr/local/www/vpn_openvpn_server.php:756 +#: usr/local/www/vpn_openvpn_server.php:756 +msgid "Backend for authentication" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:671 +#: usr/local/www/vpn_openvpn_server.php:744 +#: usr/local/www/vpn_openvpn_server.php:762 +#: usr/local/www/vpn_openvpn_server.php:788 +#: usr/local/www/vpn_openvpn_server.php:788 +msgid "Device Mode" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:797 +#: usr/local/www/vpn_openvpn_server.php:870 +#: usr/local/www/vpn_openvpn_server.php:898 +#: usr/local/www/vpn_openvpn_server.php:925 +#: usr/local/www/vpn_openvpn_server.php:925 +msgid "Peer Certificate Revocation List" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:822 +#: usr/local/www/vpn_openvpn_server.php:895 +#: usr/local/www/vpn_openvpn_server.php:923 +#: usr/local/www/vpn_openvpn_server.php:950 +#: usr/local/www/vpn_openvpn_server.php:950 +msgid "Server Certificate" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:851 +#: usr/local/www/vpn_openvpn_server.php:924 +#: usr/local/www/vpn_openvpn_server.php:952 +#: usr/local/www/vpn_openvpn_server.php:979 +#: usr/local/www/vpn_openvpn_server.php:979 +msgid "DH Parameters Length" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:934 +#: usr/local/www/vpn_openvpn_server.php:1007 +#: usr/local/www/vpn_openvpn_server.php:1035 +#: usr/local/www/vpn_openvpn_server.php:1062 +#: usr/local/www/vpn_openvpn_server.php:1062 +msgid "Certificate Depth" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:952 +#: usr/local/www/vpn_openvpn_server.php:1025 +#: usr/local/www/vpn_openvpn_server.php:1053 +#: usr/local/www/vpn_openvpn_server.php:1080 +#: usr/local/www/vpn_openvpn_server.php:1080 +msgid "" +"When a certificate-based client logs in, do not accept certificates below " +"this depth. Useful for denying certificates made with intermediate CAs " +"generated from the same CA as the server." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:959 +#: usr/local/www/vpn_openvpn_server.php:1032 +#: usr/local/www/vpn_openvpn_server.php:1060 +#: usr/local/www/vpn_openvpn_server.php:1087 +#: usr/local/www/vpn_openvpn_server.php:1087 +msgid "Strict User/CN Matching" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:969 +#: usr/local/www/vpn_openvpn_server.php:1042 +#: usr/local/www/vpn_openvpn_server.php:1070 +#: usr/local/www/vpn_openvpn_server.php:1097 +#: usr/local/www/vpn_openvpn_server.php:1097 +msgid "" +"When authenticating users, enforce a match between the common name of the " +"client certificate and the username given at login." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:983 +#: usr/local/www/vpn_openvpn_server.php:1056 +#: usr/local/www/vpn_openvpn_server.php:1084 +#: usr/local/www/vpn_openvpn_client.php:771 +#: usr/local/www/vpn_openvpn_client.php:790 +#: usr/local/www/vpn_openvpn_server.php:1111 +#: usr/local/www/vpn_openvpn_client.php:790 +#: usr/local/www/vpn_openvpn_server.php:1111 +msgid "IPv4 Tunnel Network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:987 +#: usr/local/www/vpn_openvpn_server.php:1060 +#: usr/local/www/vpn_openvpn_server.php:1088 +#: usr/local/www/vpn_openvpn_server.php:1115 +#: usr/local/www/vpn_openvpn_server.php:1115 +msgid "" +"This is the IPv4 virtual network used for private communications between " +"this server and client hosts expressed using CIDR (eg. 10.0.8.0/24). The " +"first network address will be assigned to the\tserver virtual interface. The " +"remaining network addresses can optionally be assigned to connecting " +"clients. (see Address Pool)" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:997 +#: usr/local/www/vpn_openvpn_server.php:1070 +#: usr/local/www/vpn_openvpn_server.php:1098 +#: usr/local/www/vpn_openvpn_client.php:785 +#: usr/local/www/vpn_openvpn_client.php:804 +#: usr/local/www/vpn_openvpn_server.php:1125 +#: usr/local/www/vpn_openvpn_client.php:804 +#: usr/local/www/vpn_openvpn_server.php:1125 +msgid "IPv6 Tunnel Network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1001 +#: usr/local/www/vpn_openvpn_server.php:1074 +msgid "" +"This is the IPv6 virtual network used for private communications between " +"this server and client hosts expressed using CIDR (eg. fe80::/64). The first " +"network address will be assigned to the\tserver virtual interface. The " +"remaining network addresses can optionally be assigned to connecting " +"clients. (see Address Pool)" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1029 +#: usr/local/www/vpn_openvpn_server.php:1171 +#: usr/local/www/vpn_openvpn_server.php:1199 +msgid "IPv4 Local Network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1033 +#: usr/local/www/vpn_openvpn_server.php:1175 +#: usr/local/www/vpn_openvpn_server.php:1203 +msgid "" +"This is the network that will be accessible from the remote endpoint. " +"Expressed as a CIDR range. You may leave this blank if you don't want to add " +"a route to the local network through this tunnel on the remote machine. This " +"is generally set to your LAN network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1042 +#: usr/local/www/vpn_openvpn_server.php:1184 +#: usr/local/www/vpn_openvpn_server.php:1212 +msgid "IPv6 Local Network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1046 +#: usr/local/www/vpn_openvpn_server.php:1188 +#: usr/local/www/vpn_openvpn_server.php:1216 +msgid "" +"This is the IPv6 network that will be accessible from the remote endpoint. " +"Expressed as a CIDR range. You may leave this blank if you don't want to add " +"a route to the local network through this tunnel on the remote machine. This " +"is generally set to your LAN network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1059 +#: usr/local/www/vpn_openvpn_server.php:1201 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter here the " +"remote LAN here. You may leave this blank if you don't want a site-to-site " +"VPN" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1069 +#: usr/local/www/vpn_openvpn_server.php:1211 +#: usr/local/www/vpn_openvpn_server.php:1253 +#: usr/local/www/vpn_openvpn_server.php:1280 +#: usr/local/www/vpn_openvpn_server.php:1280 +msgid "Concurrent connections" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1073 +#: usr/local/www/vpn_openvpn_server.php:1215 +#: usr/local/www/vpn_openvpn_server.php:1257 +#: usr/local/www/vpn_openvpn_server.php:1284 +#: usr/local/www/vpn_openvpn_server.php:1284 +msgid "" +"Specify the maximum number of clients allowed to concurrently connect to " +"this server" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1113 +#: usr/local/www/vpn_openvpn_server.php:1255 +#: usr/local/www/vpn_openvpn_server.php:1297 +#: usr/local/www/vpn_openvpn_server.php:1324 +#: usr/local/www/vpn_openvpn_server.php:1324 +msgid "Inter-client communication" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1123 +#: usr/local/www/vpn_openvpn_server.php:1265 +#: usr/local/www/vpn_openvpn_server.php:1307 +#: usr/local/www/vpn_openvpn_server.php:1334 +#: usr/local/www/vpn_openvpn_server.php:1334 +msgid "Allow communication between clients connected to this server" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1131 +#: usr/local/www/vpn_openvpn_server.php:1273 +#: usr/local/www/vpn_openvpn_server.php:1315 +#: usr/local/www/vpn_openvpn_server.php:1342 +#: usr/local/www/vpn_openvpn_server.php:1342 +msgid "Duplicate Connections" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1141 +#: usr/local/www/vpn_openvpn_server.php:1283 +#: usr/local/www/vpn_openvpn_server.php:1325 +#: usr/local/www/vpn_openvpn_server.php:1352 +#: usr/local/www/vpn_openvpn_server.php:1352 +msgid "" +"Allow multiple concurrent connections from clients using the same Common " +"Name.
    NOTE: This is not generally recommended, but may be needed for " +"some scenarios." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1158 +#: usr/local/www/vpn_openvpn_server.php:1300 +#: usr/local/www/vpn_openvpn_server.php:1342 +#: usr/local/www/vpn_openvpn_server.php:1369 +#: usr/local/www/vpn_openvpn_server.php:1369 +msgid "Dynamic IP" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1168 +#: usr/local/www/vpn_openvpn_server.php:1310 +#: usr/local/www/vpn_openvpn_server.php:1352 +#: usr/local/www/vpn_openvpn_server.php:1379 +#: usr/local/www/vpn_openvpn_server.php:1379 +msgid "" +"Allow connected clients to retain their connections if their IP address " +"changes" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1176 +#: usr/local/www/vpn_openvpn_server.php:1318 +#: usr/local/www/vpn_openvpn_server.php:1360 +#: usr/local/www/vpn_openvpn_server.php:1387 +#: usr/local/www/vpn_openvpn_server.php:1387 +msgid "Address Pool" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1186 +#: usr/local/www/vpn_openvpn_server.php:1328 +#: usr/local/www/vpn_openvpn_server.php:1370 +#: usr/local/www/vpn_openvpn_server.php:1397 +#: usr/local/www/vpn_openvpn_server.php:1397 +msgid "Provide a virtual adapter IP address to clients (see Tunnel Network)" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1322 +#: usr/local/www/vpn_openvpn_server.php:1464 +#: usr/local/www/vpn_openvpn_csc.php:560 +#: usr/local/www/vpn_openvpn_server.php:1506 +#: usr/local/www/vpn_openvpn_server.php:1558 +#: usr/local/www/vpn_openvpn_csc.php:560 +#: usr/local/www/vpn_openvpn_server.php:1558 +msgid "" +"If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) " +"will be disabled" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1352 +#: usr/local/www/vpn_openvpn_server.php:1494 +#: usr/local/www/vpn_openvpn_server.php:1536 +#: usr/local/www/vpn_openvpn_server.php:1588 +#: usr/local/www/vpn_openvpn_server.php:1588 +msgid "Scope ID" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1418 +#: usr/local/www/vpn_openvpn_server.php:1560 +#: usr/local/www/vpn_openvpn_server.php:1602 +#: usr/local/www/vpn_openvpn_server.php:1654 +#: usr/local/www/vpn_openvpn_server.php:1654 +msgid "" +"Enter any additional options you would like to add to the OpenVPN server " +"configuration here, separated by a semicolon" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1449 +#: usr/local/www/vpn_openvpn_server.php:1591 +#: usr/local/www/vpn_openvpn_server.php:1632 +#: usr/local/www/vpn_openvpn_server.php:1684 +#: usr/local/www/vpn_openvpn_server.php:1684 +msgid "Protocol / Port" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1482 +#: usr/local/www/vpn_openvpn_server.php:1624 +#: usr/local/www/vpn_openvpn_server.php:1665 +#: usr/local/www/vpn_openvpn_server.php:1717 +#: usr/local/www/vpn_openvpn_server.php:1717 +msgid "Do you really want to delete this server?" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1503 +#: usr/local/www/vpn_openvpn_server.php:1645 +#: usr/local/www/vpn_openvpn_server.php:1686 +#: usr/local/www/vpn_openvpn_server.php:1738 +#: usr/local/www/vpn_openvpn_server.php:1738 +msgid "Additional OpenVPN servers can be added here." +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:136 usr/local/www/vpn_pppoe_edit.php:136 +msgid "The specified server address is equal to an interface ip address." +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:141 usr/local/www/vpn_pppoe_edit.php:141 +#, php-format +msgid "No password specified for username %s" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:143 usr/local/www/vpn_pppoe_edit.php:143 +#, php-format +msgid "Incorrect ip address specified for username %s" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:355 usr/local/www/vpn_pppoe_edit.php:356 +#: usr/local/www/vpn_pppoe_edit.php:359 usr/local/www/vpn_pppoe_edit.php:359 +msgid "PPPoE server configuration" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:368 usr/local/www/vpn_pppoe_edit.php:369 +#: usr/local/www/vpn_pppoe_edit.php:372 usr/local/www/vpn_pppoe_edit.php:372 +msgid "Enable PPPoE server" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:403 usr/local/www/vpn_pppoe_edit.php:404 +#: usr/local/www/vpn_pppoe_edit.php:407 usr/local/www/vpn_pppoe_edit.php:407 +msgid "Hint" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:407 usr/local/www/vpn_pppoe_edit.php:408 +#: usr/local/www/vpn_pppoe_edit.php:411 usr/local/www/vpn_pppoe_edit.php:411 +msgid "No. PPPoE users" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:420 usr/local/www/vpn_pppoe_edit.php:421 +#: usr/local/www/vpn_pppoe_edit.php:424 usr/local/www/vpn_pppoe_edit.php:424 +msgid "Hint: 10 is ten PPPoE clients" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:428 usr/local/www/vpn_pppoe_edit.php:429 +#: usr/local/www/vpn_pppoe_edit.php:432 usr/local/www/vpn_pppoe_edit.php:432 +msgid "" +"Enter the IP address the PPPoE server should give to clients for use as " +"their \"gateway\"" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:440 usr/local/www/vpn_pppoe_edit.php:441 +#: usr/local/www/vpn_pppoe_edit.php:444 usr/local/www/vpn_pppoe_edit.php:444 +msgid "Specify the starting address for the client IP address subnet" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:457 usr/local/www/vpn_pppoe_edit.php:458 +#: usr/local/www/vpn_pppoe_edit.php:461 usr/local/www/vpn_pppoe_edit.php:461 +msgid "" +"If entered they will be given to all PPPoE clients, else LAN DNS and one WAN " +"DNS will go to all clients" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:474 usr/local/www/vpn_pppoe_edit.php:475 +#: usr/local/www/vpn_pppoe_edit.php:478 usr/local/www/vpn_pppoe_edit.php:478 +msgid "Use Backup RADIUS Server" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:475 usr/local/www/vpn_pppoe_edit.php:476 +#: usr/local/www/vpn_pppoe_edit.php:479 usr/local/www/vpn_pppoe_edit.php:479 +msgid "" +"When set, if primary server fails all requests will be sent via backup server" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:478 usr/local/www/vpn_pppoe_edit.php:479 +#: usr/local/www/vpn_pppoe_edit.php:482 usr/local/www/vpn_pppoe_edit.php:482 +msgid "NAS IP Address" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:481 usr/local/www/vpn_pppoe_edit.php:482 +#: usr/local/www/vpn_pppoe_edit.php:485 usr/local/www/vpn_pppoe_edit.php:485 +msgid "RADIUS server NAS IP Address" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:488 usr/local/www/vpn_pppoe_edit.php:489 +#: usr/local/www/vpn_pppoe_edit.php:492 usr/local/www/vpn_pppoe_edit.php:492 +msgid "RADIUS accounting update period in seconds" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:495 usr/local/www/vpn_pppoe_edit.php:496 +#: usr/local/www/vpn_pppoe_edit.php:499 usr/local/www/vpn_pppoe_edit.php:499 +msgid "Issue IP Addresses via RADIUS server" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:498 usr/local/www/vpn_pppoe_edit.php:499 +#: usr/local/www/vpn_pppoe_edit.php:502 usr/local/www/vpn_pppoe_edit.php:502 +msgid "RADIUS server Primary" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:503 usr/local/www/vpn_pppoe_edit.php:504 +#: usr/local/www/vpn_pppoe_edit.php:507 usr/local/www/vpn_pppoe_edit.php:507 +msgid "" +"Enter the IP address, authentication port and accounting port (optional) of " +"the RADIUS server." +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:504 usr/local/www/vpn_pppoe_edit.php:520 +#: usr/local/www/vpn_pppoe_edit.php:505 usr/local/www/vpn_pppoe_edit.php:521 +#: usr/local/www/vpn_pppoe_edit.php:508 usr/local/www/vpn_pppoe_edit.php:524 +#: usr/local/www/vpn_pppoe_edit.php:508 usr/local/www/vpn_pppoe_edit.php:524 +msgid "standard port 1812 and 1813 accounting" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:507 usr/local/www/vpn_pppoe_edit.php:508 +#: usr/local/www/vpn_pppoe_edit.php:511 usr/local/www/vpn_pppoe_edit.php:511 +msgid "RADIUS primary shared secret" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:515 +#: usr/local/www/vpn_pppoe_edit.php:518 usr/local/www/vpn_pppoe_edit.php:518 +msgid "RADIUS server Secondary" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:519 usr/local/www/vpn_pppoe_edit.php:520 +#: usr/local/www/vpn_pppoe_edit.php:523 usr/local/www/vpn_pppoe_edit.php:523 +msgid "" +"Enter the IP address, authentication port and accounting port (optional) of " +"the backup RADIUS server." +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:523 usr/local/www/vpn_pppoe_edit.php:524 +#: usr/local/www/vpn_pppoe_edit.php:527 usr/local/www/vpn_pppoe_edit.php:527 +msgid "RADIUS secondary shared secret" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:531 usr/local/www/vpn_pppoe_edit.php:532 +#: usr/local/www/vpn_pppoe_edit.php:535 usr/local/www/vpn_pppoe_edit.php:535 +msgid "User (s)" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/vpn_pppoe_edit.php:597 +#: usr/local/www/vpn_pppoe_edit.php:600 usr/local/www/vpn_pppoe_edit.php:600 +msgid "" +"don't forget to add a firewall rule to permit traffic from PPPoE clients" +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:37 +msgid "You need to specify the number of connections." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:42 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:42 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:43 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:43 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:42 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:42 +msgid "The number of connections should be greater than 1." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:65 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:63 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:64 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:71 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:63 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:64 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:71 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:63 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:63 +msgid "You have less interfaces than number of connections!" +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:445 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:518 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:459 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:551 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:489 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:586 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:293 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:372 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:588 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:443 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:516 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:489 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:588 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:459 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:551 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:443 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:516 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:293 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:372 +msgid "" +"Address must be a valid IP address or Firewall Alias. Please correct this " +"value to continue." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:505 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:536 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:539 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:568 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:574 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:601 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:358 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:392 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:576 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:603 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:503 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:534 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:576 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:603 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:539 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:568 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:503 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:534 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:358 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:392 +msgid "Only percentage bandwidth specification is allowed." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:695 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1044 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:722 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1106 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:756 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1154 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:930 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:758 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1156 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:693 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1042 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:758 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1156 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:722 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1106 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:693 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1042 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:930 +msgid "" +"Custom Bandwidths are greater than 30%. Please lower them for the wizard to " +"continue." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1346 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1408 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1462 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1205 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1464 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1344 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1464 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1408 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1344 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1205 +msgid "Penalty Box" +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1366 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1482 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364 +msgid "VOIP Adapter" +msgstr "" + +#: usr/local/www/wizards/openvpn_wizard.inc:602 +#: usr/local/www/wizards/openvpn_wizard.inc:618 +#: usr/local/www/wizards/openvpn_wizard.inc:619 +#: usr/local/www/wizards/openvpn_wizard.inc:602 +#: usr/local/www/wizards/openvpn_wizard.inc:619 +#, php-format +msgid "OpenVPN %s wizard" +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:268 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:268 +msgid "You cannot specify bandwidth smaller than 1!" +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:278 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:288 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:288 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:278 +msgid "You cannot select the same interface for local and outside." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:276 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:276 +msgid "You cannot specify 0 bandwidth!" +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:297 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:297 +msgid "You cannot select the same interface twice on local interfaces." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:37 +msgid "You need to specify the number of local interfaces connected." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:41 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:41 +msgid "The number of local connection needs to be greater than 1." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:240 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:240 +msgid "Upload bandwidth of connection is not valid." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:245 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:245 +msgid "Download bandwidth of connection is not valid." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:252 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:252 +msgid "You cannot specify bandwidth less than 1!" +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:257 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:262 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:257 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:262 +msgid "We do not support Bandwidths smaller than 128Kbit/s for CBQ scheduler." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:300 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:300 +msgid "Upload or download bandwidth is not valid." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:317 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:317 +#, php-format +msgid "" +"You cannot set the VoIP upload bandwidth on WAN connection higher than " +"80% of the connection." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:324 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:334 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:324 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:334 +#, php-format +msgid "" +"You cannot set the VoIP download bandwidth on connection higher than 80% of " +"the connection." +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:162 +#: usr/local/www/widgets/widgets/system_information.widget.php:153 +#: usr/local/www/widgets/widgets/system_information.widget.php:159 +#: usr/local/www/widgets/widgets/system_information.widget.php:160 +#: usr/local/www/widgets/widgets/system_information.widget.php:158 +#: usr/local/www/widgets/widgets/system_information.widget.php:160 +msgid "Current date/time" +msgstr "" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:41 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:41 +msgid "Computer / Device" +msgstr "" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:67 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:67 +msgid "Wake Up" +msgstr "" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:72 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:72 +msgid "No saved WoL addresses" +msgstr "" + +#: usr/local/www/firewall_nat_npt.php:105 +#: usr/local/www/firewall_nat_npt.php:105 +msgid "External Prefix" +msgstr "" + +#: usr/local/www/firewall_nat_npt.php:106 +#: usr/local/www/firewall_nat_npt.php:106 +msgid "Internal prefix" +msgstr "" + +#: usr/local/www/firewall_nat_npt_edit.php:106 +#: usr/local/www/firewall_nat_npt_edit.php:106 +msgid "Source prefix" +msgstr "" + +#: usr/local/www/firewall_nat_npt_edit.php:108 +#: usr/local/www/firewall_nat_npt_edit.php:108 +msgid "Destination prefix" +msgstr "" + +#: usr/local/www/firewall_nat_npt_edit.php:156 +#: usr/local/www/firewall_nat_npt_edit.php:161 +#: usr/local/www/firewall_nat_npt_edit.php:160 +#: usr/local/www/firewall_nat_npt_edit.php:158 +#: usr/local/www/firewall_nat_npt_edit.php:158 +msgid "Edit NAT NPt entry" +msgstr "" + +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_npt_edit.php:211 +#: usr/local/www/firewall_nat_npt_edit.php:210 +#: usr/local/www/firewall_nat_npt_edit.php:209 +#: usr/local/www/firewall_nat_npt_edit.php:209 +msgid "Internal IPv6 Prefix" +msgstr "" + +#: usr/local/www/firewall_nat_npt_edit.php:228 +#: usr/local/www/firewall_nat_npt_edit.php:233 +#: usr/local/www/firewall_nat_npt_edit.php:232 +#: usr/local/www/firewall_nat_npt_edit.php:231 +#: usr/local/www/firewall_nat_npt_edit.php:231 +msgid "" +"Enter the internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. " +"The prefix size specified for the internal IPv6 prefix will be applied to " +"the \n" +"external prefix." +msgstr "" + +#: usr/local/www/firewall_nat_npt_edit.php:234 +#: usr/local/www/firewall_nat_npt_edit.php:239 +#: usr/local/www/firewall_nat_npt_edit.php:238 +#: usr/local/www/firewall_nat_npt_edit.php:237 +#: usr/local/www/firewall_nat_npt_edit.php:237 +msgid "Destination IPv6 Prefix" +msgstr "" + +#: usr/local/www/firewall_nat_npt_edit.php:258 +#: usr/local/www/firewall_nat_npt_edit.php:263 +#: usr/local/www/firewall_nat_npt_edit.php:262 +#: usr/local/www/firewall_nat_npt_edit.php:261 +#: usr/local/www/firewall_nat_npt_edit.php:261 +msgid "Enter the Global Unicast routable IPv6 prefix here" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:74 +#: usr/local/www/services_router_advertisements.php:74 +#: usr/local/www/services_router_advertisements.php:74 +#: usr/local/www/services_dhcpv6.php:74 +msgid "" +"The DHCPv6 Server can only be enabled on interfaces configured with static " +"IP addresses" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:184 usr/local/www/services_dhcpv6.php:196 +#: usr/local/www/services_dhcpv6.php:181 usr/local/www/services_dhcpv6.php:175 +#: usr/local/www/services_dhcpv6.php:175 +msgid "A valid prefix range must be specified." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:190 usr/local/www/services_dhcpv6.php:202 +#: usr/local/www/services_dhcpv6.php:187 usr/local/www/services_dhcpv6.php:181 +#: usr/local/www/services_dhcpv6.php:181 +msgid "A valid IPv6 address must be specified for the gateway." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:192 usr/local/www/services_dhcpv6.php:204 +#: usr/local/www/services_router_advertisements.php:154 +#: usr/local/www/services_dhcpv6.php:189 usr/local/www/services_dhcpv6.php:183 +#: usr/local/www/services_router_advertisements.php:149 +#: usr/local/www/services_router_advertisements.php:149 +#: usr/local/www/services_dhcpv6.php:183 +msgid "" +"A valid IPv6 address must be specified for the primary/secondary DNS servers." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:201 usr/local/www/services_dhcpv6.php:223 +#: usr/local/www/services_dhcpv6.php:208 usr/local/www/services_dhcpv6.php:202 +#: usr/local/www/services_dhcpv6.php:202 +msgid "" +"A valid IPv6 address must be specified for the primary/secondary NTP servers." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:205 usr/local/www/services_dhcpv6.php:227 +#: usr/local/www/services_dhcpv6.php:212 usr/local/www/services_dhcpv6.php:206 +#: usr/local/www/services_dhcpv6.php:206 +msgid "A valid IPv6 address or hostname must be specified for the TFTP server." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:207 usr/local/www/services_dhcpv6.php:229 +#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:208 +#: usr/local/www/services_dhcpv6.php:208 +msgid "A valid IPv6 address must be specified for the network boot server." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:236 +#: usr/local/www/services_dhcpv6.php:221 usr/local/www/services_dhcpv6.php:215 +#: usr/local/www/services_dhcpv6.php:215 +#, php-format +msgid "The subnet range cannot overlap with virtual IPv6 address %s." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:359 usr/local/www/services_dhcpv6.php:386 +#: usr/local/www/services_dhcpv6.php:367 usr/local/www/services_dhcpv6.php:362 +#: usr/local/www/services_dhcpv6.php:362 +msgid "DHCPv6 server" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:497 usr/local/www/services_dhcpv6.php:524 +#: usr/local/www/services_router_advertisements.php:261 +#: usr/local/www/services_router_advertisements.php:270 +#: usr/local/www/services_dhcpv6.php:503 usr/local/www/services_dhcpv6.php:514 +#: usr/local/www/services_router_advertisements.php:256 +#: usr/local/www/services_router_advertisements.php:265 +#: usr/local/www/services_router_advertisements.php:256 +#: usr/local/www/services_router_advertisements.php:265 +#: usr/local/www/services_dhcpv6.php:514 +msgid "Router Advertisements" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:504 +#, php-format +msgid "" +"Select the Operating Mode for the router advertisement Daemon. Use \"Router " +"Only\" to only advertise the router, \"Unmanaged\" for Router Advertising " +"with Stateless Autoconfig, \"Managed\" for DHCPv6 only with router " +"advertisements, \"Assisted\" for DHCPv6 Combined with Stateless Autoconfig" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:510 usr/local/www/services_dhcpv6.php:584 +#: usr/local/www/services_dhcpv6.php:515 usr/local/www/services_dhcpv6.php:526 +#: usr/local/www/services_dhcpv6.php:526 +#, php-format +msgid "Enable DHCPv6 server on %s interface" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:649 +#: usr/local/www/services_dhcpv6.php:580 usr/local/www/services_dhcpv6.php:597 +#: usr/local/www/services_dhcpv6.php:597 +msgid "Prefix Delegation Range" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:580 +msgid "prefix length" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:585 +msgid "" +"You can define a Prefix range here for DHCP Prefix Delegation. This allows " +"for \n" +"\t\t\t\t\tassigning networks to subrouters" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:803 +#: usr/local/www/status_dhcpv6_leases.php:361 +#: usr/local/www/status_dhcpv6_leases.php:405 +#: usr/local/www/status_dhcpv6_leases.php:483 +#: usr/local/www/services_dhcpv6.php:898 +#: usr/local/www/status_dhcpv6_leases.php:406 +#: usr/local/www/status_dhcpv6_leases.php:484 +#: usr/local/www/services_dhcpv6.php:829 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcpv6_leases.php:487 +#: usr/local/www/services_dhcpv6.php:850 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcpv6_leases.php:487 +#: usr/local/www/services_dhcpv6.php:850 +msgid "DUID" +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:106 +#: usr/local/www/services_dhcpv6_edit.php:189 +#: usr/local/www/services_dhcpv6_edit.php:108 +#: usr/local/www/services_dhcpv6_edit.php:192 +#: usr/local/www/services_dhcpv6_edit.php:191 +#: usr/local/www/services_dhcpv6_edit.php:111 +#: usr/local/www/services_dhcpv6_edit.php:194 +#: usr/local/www/services_dhcpv6_edit.php:111 +#: usr/local/www/services_dhcpv6_edit.php:194 +msgid "DUID Identifier" +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:126 +#: usr/local/www/services_dhcpv6_edit.php:128 +#: usr/local/www/services_dhcpv6_edit.php:131 +#: usr/local/www/services_dhcpv6_edit.php:131 +msgid "A valid DUID Identifier must be specified." +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:135 +#: usr/local/www/services_dhcpv6_edit.php:137 +#: usr/local/www/services_dhcpv6_edit.php:140 +#: usr/local/www/services_dhcpv6_edit.php:140 +msgid "This Hostname, IP or DUID Identifier already exists." +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dhcpv6_edit.php:178 +msgid "DHCPv6" +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:186 +#: usr/local/www/services_dhcpv6_edit.php:189 +#: usr/local/www/services_dhcpv6_edit.php:188 +#: usr/local/www/services_dhcpv6_edit.php:191 +#: usr/local/www/services_dhcpv6_edit.php:191 +msgid "Static DHCPv6 Mapping" +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:193 +#: usr/local/www/services_dhcpv6_edit.php:196 +#: usr/local/www/services_dhcpv6_edit.php:195 +#: usr/local/www/services_dhcpv6_edit.php:198 +#: usr/local/www/services_dhcpv6_edit.php:198 +msgid "Enter a DUID Identifier in the following format: " +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:202 +#: usr/local/www/services_dhcpv6_edit.php:205 +msgid "" +"If no IPv6 address is given, one will be dynamically allocated from the " +"pool." +msgstr "" + +#: usr/local/www/services_dhcpv6_relay.php:81 +#: usr/local/www/services_dhcpv6_relay.php:81 +msgid "A valid Destination Server IPv6 address must be specified." +msgstr "" + +#: usr/local/www/services_dhcpv6_relay.php:145 +#: usr/local/www/services_dhcpv6_relay.php:146 +#: usr/local/www/services_dhcpv6_relay.php:146 +msgid "DHCPv6 Relay configuration" +msgstr "" + +#: usr/local/www/services_dhcpv6_relay.php:151 +#: usr/local/www/services_dhcpv6_relay.php:152 +#: usr/local/www/services_dhcpv6_relay.php:152 +#, php-format +msgid "Enable DHCPv6 relay on interface" +msgstr "" + +#: usr/local/www/services_dhcpv6_relay.php:169 +#: usr/local/www/services_dhcpv6_relay.php:170 +#: usr/local/www/services_dhcpv6_relay.php:170 +msgid "Interfaces without an IPv6 address will not be shown." +msgstr "" + +#: usr/local/www/services_dhcpv6_relay.php:177 +#: usr/local/www/services_dhcpv6_relay.php:178 +#: usr/local/www/services_dhcpv6_relay.php:178 +#, php-format +msgid "" +"If this is checked, the DHCPv6 relay will append the circuit ID (%s " +"interface number) and the agent ID to the DHCPv6 request." +msgstr "" + +#: usr/local/www/services_dhcpv6_relay.php:184 +#: usr/local/www/services_dhcpv6_relay.php:185 +#: usr/local/www/services_dhcpv6_relay.php:185 +msgid "" +"This is the IPv6 address of the server to which DHCPv6 requests are relayed. " +"You can enter multiple server IPv6 addresses, separated by commas. Select " +"\"Proxy requests to DHCPv6 server on WAN subnet\" to relay DHCPv6 packets to " +"the server that was used on the WAN interface." +msgstr "" + +#: usr/local/www/status_dhcpv6_leases.php:49 +#: usr/local/www/status_dhcpv6_leases.php:50 +#: usr/local/www/status_dhcpv6_leases.php:50 +msgid "DHCPv6 leases" +msgstr "" + +#: usr/local/www/status_dhcpv6_leases.php:360 +#: usr/local/www/status_dhcpv6_leases.php:404 +#: usr/local/www/status_dhcpv6_leases.php:482 +#: usr/local/www/status_dhcpv6_leases.php:405 +#: usr/local/www/status_dhcpv6_leases.php:483 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:486 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:486 +msgid "IAID" +msgstr "" + +#: usr/local/www/status_dhcpv6_leases.php:362 +#: usr/local/www/status_dhcpv6_leases.php:406 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/status_dhcpv6_leases.php:410 +#: usr/local/www/status_dhcpv6_leases.php:410 +msgid "Hostname/MAC" +msgstr "" + +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_wireless.php:99 +#: usr/local/www/diag_logs_wireless.php:100 +#: usr/local/www/diag_logs_wireless.php:100 +#, php-format +msgid "Wireless (hostapd) log entries" +msgstr "" + +#: usr/local/www/services_captiveportal_zones.php:37 +#: usr/local/www/services_captiveportal_zones.php:37 +msgid "Captiveportal" +msgstr "" + +#: usr/local/www/services_captiveportal_zones.php:37 +#: usr/local/www/services_captiveportal_zones.php:37 +msgid "Zones" +msgstr "" + +#: usr/local/www/services_captiveportal_zones.php:47 +#: usr/local/www/services_captiveportal_zones.php:48 +#: usr/local/www/services_captiveportal_zones.php:48 +msgid "The CaptivePortal entry list has been changed" +msgstr "" + +#: usr/local/www/services_captiveportal_zones.php:60 +#: usr/local/www/services_captiveportal_zones.php:101 +#: usr/local/www/services_captiveportal_zones.php:61 +#: usr/local/www/services_captiveportal_zones.php:102 +#: usr/local/www/services_captiveportal_zones.php:61 +#: usr/local/www/services_captiveportal_zones.php:102 +msgid "add a new captiveportal instance" +msgstr "" + +#: usr/local/www/services_captiveportal_zones.php:88 +#: usr/local/www/services_captiveportal_zones.php:89 +#: usr/local/www/services_captiveportal_zones.php:89 +msgid "edit captiveportal instance" +msgstr "" + +#: usr/local/www/services_captiveportal_zones.php:89 +#: usr/local/www/services_captiveportal_zones.php:90 +#: usr/local/www/services_captiveportal_zones.php:90 +msgid "delete captiveportal instance" +msgstr "" + +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +msgid "Edit Zones" +msgstr "" + +#: usr/local/www/services_captiveportal_zones_edit.php:67 +#: usr/local/www/services_captiveportal_zones_edit.php:69 +#: usr/local/www/services_captiveportal_zones_edit.php:69 +msgid "already exists" +msgstr "" + +#: usr/local/www/services_captiveportal_zones_edit.php:96 +#: usr/local/www/services_captiveportal_zones_edit.php:98 +#: usr/local/www/services_captiveportal_zones_edit.php:94 +#: usr/local/www/services_captiveportal_zones_edit.php:94 +msgid "Edit Captiveportal Zones" +msgstr "" + +#: usr/local/www/services_captiveportal_zones_edit.php:103 +msgid "Zone name. Cannot contain spaces." +msgstr "" + +#: usr/local/www/system_firmware_restorefullbackup.php:104 +#: usr/local/www/system_firmware_restorefullbackup.php:104 +msgid "Restore full backup" +msgstr "" + +#: usr/local/www/system_firmware_restorefullbackup.php:139 +#: usr/local/www/system_firmware_restorefullbackup.php:139 +msgid "Filename" +msgstr "" + +#: usr/local/www/system_firmware_restorefullbackup.php:162 +#: usr/local/www/system_firmware_restorefullbackup.php:162 +msgid "Do you really want to delete this backup?" +msgstr "" + +#: usr/local/www/system_firmware_restorefullbackup.php:174 +msgid "

    Could not locate any previous backups.
    " +msgstr "" + +#: usr/local/www/system_firmware_restorefullbackup.php:184 +#: usr/local/www/system_firmware_restorefullbackup.php:184 +msgid "Restore" +msgstr "" + +#: usr/local/www/diag_dump_states_sources.php:65 +#: usr/local/www/diag_dump_states_sources.php:65 +msgid "Show Source Tracking" +msgstr "" + +#: usr/local/www/diag_dump_states_sources.php:145 +#: usr/local/www/diag_dump_states_sources.php:144 +#: usr/local/www/diag_dump_states_sources.php:144 +msgid "Source -> Destination" +msgstr "" + +#: usr/local/www/diag_dump_states_sources.php:146 +#: usr/local/www/diag_dump_states_sources.php:145 +#: usr/local/www/diag_dump_states_sources.php:145 +msgid "# States" +msgstr "" + +#: usr/local/www/diag_dump_states_sources.php:147 +#: usr/local/www/diag_dump_states_sources.php:146 +#: usr/local/www/diag_dump_states_sources.php:146 +msgid "# Connections" +msgstr "" + +#: usr/local/www/diag_dump_states_sources.php:180 +#: usr/local/www/diag_dump_states_sources.php:179 +#: usr/local/www/diag_dump_states_sources.php:179 +msgid "Remove all source tracking entries from" +msgstr "" + +#: usr/local/www/diag_dump_states_sources.php:190 +#: usr/local/www/diag_dump_states_sources.php:189 +#: usr/local/www/diag_dump_states_sources.php:189 +msgid "No source tracking entries were found." +msgstr "" + +#: etc/inc/system.inc:418 etc/inc/system.inc:425 etc/inc/system.inc:426 +#, php-format +msgid "Not adding default route because OLSR dynamic gateway is enabled." +msgstr "" + +#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:124 +#: etc/inc/priv.defs.inc:124 +msgid "WebCfg - Diagnostics: Logs: Gateways page" +msgstr "" + +#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:125 +#: etc/inc/priv.defs.inc:125 +msgid "Allow access to the 'Diagnostics: Logs: System: Gateways' page." +msgstr "" + +#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:130 +#: etc/inc/priv.defs.inc:130 +msgid "WebCfg - Diagnostics: Logs: Resolver page" +msgstr "" + +#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:131 +#: etc/inc/priv.defs.inc:131 +msgid "Allow access to the 'Diagnostics: Logs: System: Resolver' page." +msgstr "" + +#: etc/inc/priv.defs.inc:130 etc/inc/priv.defs.inc:136 +#: etc/inc/priv.defs.inc:136 +msgid "WebCfg - Diagnostics: Logs: Wireless page" +msgstr "" + +#: etc/inc/priv.defs.inc:131 etc/inc/priv.defs.inc:137 +#: etc/inc/priv.defs.inc:137 +msgid "Allow access to the 'Diagnostics: Logs: System: Wireless' page." +msgstr "" + +#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:154 +#: etc/inc/priv.defs.inc:154 +msgid "WebCfg - Status: System logs: NTP page" +msgstr "" + +#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:155 +#: etc/inc/priv.defs.inc:155 +msgid "Allow access to the 'Status: System logs: NTP' page." +msgstr "" + +#: etc/inc/pfsense-utils.inc:2377 etc/inc/pfsense-utils.inc:2468 +#: etc/inc/pfsense-utils.inc:2521 etc/inc/pfsense-utils.inc:2528 +#: etc/inc/pfsense-utils.inc:2535 etc/inc/pfsense-utils.inc:2539 +#: etc/inc/pfsense-utils.inc:2581 +msgid "English" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2378 etc/inc/pfsense-utils.inc:2469 +#: etc/inc/pfsense-utils.inc:2522 etc/inc/pfsense-utils.inc:2529 +#: etc/inc/pfsense-utils.inc:2536 etc/inc/pfsense-utils.inc:2540 +#: etc/inc/pfsense-utils.inc:2593 +msgid "Portuguese (Brazil)" +msgstr "" + +#: etc/inc/interfaces.inc:251 etc/inc/interfaces.inc:250 +#: etc/inc/interfaces.inc:248 etc/inc/interfaces.inc:248 +msgid "interface_vlan_configure called with if undefined." +msgstr "" + +#: etc/inc/interfaces.inc:292 etc/inc/interfaces.inc:291 +#: etc/inc/interfaces.inc:289 etc/inc/interfaces.inc:289 +#, php-format +msgid "interface_qinq_configure called with if undefined.%s" +msgstr "" + +#: etc/inc/interfaces.inc:377 etc/inc/interfaces.inc:376 +#: etc/inc/interfaces.inc:380 etc/inc/interfaces.inc:380 +#, php-format +msgid "interface_qinq2_configure called with if undefined.%s" +msgstr "" + +#: etc/inc/interfaces.inc:2152 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interface_carpdev_configure() for " +"writing.%s" +msgstr "" + +#: etc/inc/interfaces.inc:2995 +msgid "Could not bring wanif up in interface_carpdev_dhcp_configure()" +msgstr "" + +#: etc/inc/interfaces.inc:3500 etc/inc/interfaces.inc:3360 +#: etc/inc/interfaces.inc:3453 etc/inc/interfaces.inc:3580 +#: etc/inc/interfaces.inc:3525 etc/inc/interfaces.inc:3525 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for " +"writing.%s" +msgstr "" + +#: etc/inc/services.inc:1085 etc/inc/services.inc:1217 +#: etc/inc/services.inc:1211 etc/inc/services.inc:1218 +#: etc/inc/services.inc:1270 +msgid "Started IGMP proxy service." +msgstr "" + +#: usr/local/www/diag_logs_routing.php:74 +#: usr/local/www/diag_logs_settings.php:224 usr/local/www/fbegin.inc:148 +#: usr/local/www/fbegin.inc:183 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111 +#: usr/local/www/diag_logs_vpn.php:135 usr/local/www/diag_logs_ppp.php:79 +#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs.php:86 +#: usr/local/www/status_ntpd.php:94 usr/local/www/diag_logs_dhcp.php:79 +#: usr/local/www/diag_logs_wireless.php:76 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/services_ntpd.php:71 usr/local/www/diag_logs_gateways.php:87 +#: usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_filter.php:110 +#: usr/local/www/diag_logs_routing.php:75 +#: usr/local/www/diag_logs_settings.php:231 usr/local/www/fbegin.inc:157 +#: usr/local/www/fbegin.inc:191 usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112 +#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/status_ntpd.php:109 usr/local/www/diag_logs_dhcp.php:80 +#: usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/services_ntpd.php:76 usr/local/www/diag_logs_gateways.php:88 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_filter.php:100 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_ppp.php:77 usr/local/www/fbegin.inc:149 +#: usr/local/www/fbegin.inc:182 usr/local/www/diag_logs_filter.php:130 +#: usr/local/www/status_ntpd.php:115 usr/local/www/diag_logs_auth.php:75 +#: usr/local/www/diag_logs_settings.php:231 +#: usr/local/www/diag_logs_filter.php:130 +#: usr/local/www/diag_logs_routing.php:75 usr/local/www/diag_logs_dhcp.php:80 +#: usr/local/www/services_ntpd.php:76 usr/local/www/diag_logs.php:86 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/diag_logs_openvpn.php:79 usr/local/www/diag_logs_ppp.php:77 +#: usr/local/www/status_ntpd.php:115 usr/local/www/diag_logs_gateways.php:88 +#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:182 +#: usr/local/www/diag_logs_relayd.php:76 usr/local/www/diag_logs_vpn.php:135 +#: usr/local/www/diag_logs_ipsec.php:112 +#: usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/diag_logs_resolver.php:88 +#: usr/local/www/diag_logs_filter_summary.php:194 +msgid "NTP" +msgstr "" + +#: usr/local/www/diag_logs_routing.php:82 +#: usr/local/www/diag_logs_resolver.php:96 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs.php:95 usr/local/www/diag_logs_wireless.php:84 +#: usr/local/www/diag_logs_gateways.php:96 +#: usr/local/www/diag_logs_routing.php:83 +#: usr/local/www/diag_logs_resolver.php:97 +#: usr/local/www/diag_logs_wireless.php:85 +#: usr/local/www/diag_logs_gateways.php:97 +#: usr/local/www/diag_logs_routing.php:83 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs.php:95 usr/local/www/diag_logs_gateways.php:97 +#: usr/local/www/diag_logs_wireless.php:85 +#: usr/local/www/diag_logs_resolver.php:97 +msgid "General" +msgstr "" + +#: usr/local/www/diag_logs_routing.php:85 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_resolver.php:99 usr/local/www/diag_logs.php:98 +#: usr/local/www/diag_logs_wireless.php:87 +#: usr/local/www/diag_logs_gateways.php:99 +#: usr/local/www/diag_logs_routing.php:86 +#: usr/local/www/diag_logs_resolver.php:100 +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_gateways.php:100 +#: usr/local/www/diag_logs_routing.php:86 usr/local/www/diag_logs.php:98 +#: usr/local/www/diag_logs_gateways.php:100 +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_resolver.php:100 +msgid "Resolver" +msgstr "" + +#: usr/local/www/diag_logs_routing.php:97 +#: usr/local/www/diag_logs_routing.php:98 +#: usr/local/www/diag_logs_routing.php:98 +#, php-format +msgid "Routing daemon log entries" +msgstr "" + +#: usr/local/www/system_routes_edit.php:158 +#: usr/local/www/system_routes_edit.php:169 +#: usr/local/www/system_routes_edit.php:171 +#: usr/local/www/system_routes_edit.php:165 +msgid "A route to these destination networks already exists" +msgstr "" + +#: usr/local/www/system_routes_edit.php:302 +#: usr/local/www/system_routes_edit.php:303 +#: usr/local/www/system_routes_edit.php:326 +#: usr/local/www/system_routes_edit.php:335 +#: usr/local/www/system_routes_edit.php:329 +msgid "Disable this static route" +msgstr "" + +#: usr/local/www/system_routes_edit.php:303 +#: usr/local/www/system_routes_edit.php:304 +#: usr/local/www/system_routes_edit.php:327 +#: usr/local/www/system_routes_edit.php:336 +#: usr/local/www/system_routes_edit.php:330 +msgid "" +"Set this option to disable this static route without removing it from the " +"list." +msgstr "" + +#: usr/local/www/pkg_mgr.php:185 usr/local/www/pkg_mgr_installed.php:178 +#: usr/local/www/pkg_mgr_installed.php:180 usr/local/www/pkg_mgr.php:188 +#: usr/local/www/pkg_mgr_installed.php:180 usr/local/www/pkg_mgr.php:205 +msgid "Package info" +msgstr "" + +#: usr/local/www/pkg_mgr.php:189 usr/local/www/pkg_mgr_installed.php:182 +#: usr/local/www/pkg_mgr_installed.php:184 usr/local/www/pkg_mgr.php:192 +#: usr/local/www/pkg_mgr_installed.php:184 usr/local/www/pkg_mgr.php:208 +msgid "No package info, check the forum" +msgstr "" + +#: usr/local/www/pkg_mgr.php:193 +msgid "Click on package name to access it's website." +msgstr "" + +#: usr/local/www/pkg_mgr.php:217 usr/local/www/pkg_mgr.php:220 +#: usr/local/www/pkg_mgr.php:223 +msgid "Click " +msgstr "" + +#: usr/local/www/pkg_mgr.php:232 usr/local/www/pkg_mgr_installed.php:199 +#: usr/local/www/pkg_mgr_installed.php:201 usr/local/www/pkg_mgr.php:235 +#: usr/local/www/pkg_mgr_installed.php:201 usr/local/www/pkg_mgr.php:239 +msgid "Click package info for more details about " +msgstr "" + +#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240 +#: usr/local/www/pkg_mgr.php:243 usr/local/www/pkg_mgr.php:247 +msgid "Do you really want to install " +msgstr "" + +#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240 +#: usr/local/www/pkg_mgr.php:243 usr/local/www/pkg_mgr.php:247 +msgid "Install " +msgstr "" + +#: usr/local/www/services_unbound_acls.php:57 +msgid "Access List successfully deleted" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:173 +msgid "" +"The settings for the DNS Resolver have changed. You must apply the " +"configuration to take affect." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:181 +msgid "General Settings" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:182 +#: usr/local/www/services_unbound.php:137 +#: usr/local/www/services_unbound_advanced.php:124 +msgid "Advanced settings" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:183 +#: usr/local/www/services_unbound.php:138 +#: usr/local/www/services_unbound_advanced.php:125 +msgid "Access Lists" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:200 +#, php-format +msgid "%s Access List" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:203 +msgid "Access List name" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:207 +msgid "Provide an Access List name." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:222 +msgid "" +"Choose what to do with DNS requests that match the criteria specified below." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:223 +msgid "" +"Deny: This action stops queries from hosts within the netblock " +"defined below." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:224 +msgid "" +"Refuse: This action also stops queries from hosts within the netblock " +"defined below, but sends a DNS rcode REFUSED error message back to the " +"client." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:225 +msgid "" +"Allow: This action allows queries from hosts within the netblock " +"defined below." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:226 +msgid "" +"Allow Snoop: This action allows recursive and nonrecursive access " +"from hosts within the netblock defined below. Used for cache snooping and " +"ideally should only be configured for your administrative host." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:231 +msgid "Networks" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:317 +msgid "Access List Name" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:340 +msgid "edit access list" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:343 +msgid "Do you really want to delete this access list?" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:344 +msgid "delete access list" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:357 +msgid "Add new Access List" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:364 +msgid "Access Lists to control access to the DNS Resolver can be defined here." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:86 +#: usr/local/www/diag_logs_settings.php:87 +#: usr/local/www/diag_logs_settings.php:87 +msgid "" +"A valid IP address/hosname or IP/hostname:port must be specified for remote " +"syslog server #1." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:89 +#: usr/local/www/diag_logs_settings.php:90 +#: usr/local/www/diag_logs_settings.php:90 +msgid "" +"A valid IP address/hosname or IP/hostname:port must be specified for remote " +"syslog server #2." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:92 +#: usr/local/www/diag_logs_settings.php:93 +#: usr/local/www/diag_logs_settings.php:93 +msgid "" +"A valid IP address/hosname or IP/hostname:port must be specified for remote " +"syslog server #3." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:234 +#: usr/local/www/diag_logs_settings.php:241 +#: usr/local/www/diag_logs_settings.php:241 +msgid "General Logging Options" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:245 +#: usr/local/www/diag_logs_settings.php:252 +#: usr/local/www/diag_logs_settings.php:252 +msgid "" +"Hint: This is only the number of log entries displayed in the GUI. It does " +"not affect how many entries are contained in the actual log files." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:251 +#: usr/local/www/diag_logs_settings.php:258 +#: usr/local/www/diag_logs_settings.php:258 +msgid "" +"Hint: packets that are blocked by the implicit default block rule will not " +"be logged if you uncheck this option. Per-rule logging options are still " +"respected." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:259 +#: usr/local/www/diag_logs_settings.php:266 +#: usr/local/www/diag_logs_settings.php:266 +msgid "" +"Hint: If this is checked, filter logs are shown as generated by the packet " +"filter, without any formatting. This will reveal more detailed information, " +"but it is more difficult to read." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:265 +#: usr/local/www/diag_logs_settings.php:285 +#: usr/local/www/diag_logs_settings.php:285 +msgid "Disable writing log files to the local disk" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:274 +#: usr/local/www/diag_logs_settings.php:294 +#: usr/local/www/diag_logs_settings.php:294 +msgid "Remote Logging Options" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:277 +#: usr/local/www/diag_logs_settings.php:297 +#: usr/local/www/diag_logs_settings.php:297 +msgid "Enable Remote Logging" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:279 +#: usr/local/www/diag_logs_settings.php:299 +#: usr/local/www/diag_logs_settings.php:299 +msgid "Send log messages to remote syslog server" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:282 +#: usr/local/www/diag_logs_settings.php:302 +#: usr/local/www/diag_logs_settings.php:302 +msgid "Remote Syslog Servers" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:299 +#: usr/local/www/diag_logs_settings.php:319 +#: usr/local/www/diag_logs_settings.php:319 +msgid "IP addresses of remote syslog servers, or an IP:port." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:304 +#: usr/local/www/diag_logs_settings.php:324 +#: usr/local/www/diag_logs_settings.php:324 +msgid "Remote Syslog Contents" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:334 +#: usr/local/www/diag_logs_settings.php:354 +#: usr/local/www/diag_logs_settings.php:354 +msgid "" +"syslog sends UDP datagrams to port 514 on the specified remote syslog " +"server, unless another port is specified. Be sure to set syslogd on the " +"remote server to accept syslog messages from" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:229 +#: usr/local/www/system_gateway_groups_edit.php:289 +#: usr/local/www/system_gateway_groups_edit.php:293 +#: usr/local/www/system_gateway_groups_edit.php:293 +msgid "Interface Address" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:253 +#: usr/local/www/system_gateway_groups_edit.php:313 +msgid "" +"The virtual IP field selects what (virtual) IP should be used when this " +"group applies to a local Dyndns, IPsec or openvpn endpoint" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:102 +#: usr/local/www/services_dyndns_edit.php:322 +#: usr/local/www/services_dyndns_edit.php:326 +#: usr/local/www/services_dyndns_edit.php:103 +#: usr/local/www/services_dyndns_edit.php:334 +#: usr/local/www/services_dyndns_edit.php:103 +#: usr/local/www/services_dyndns_edit.php:334 +msgid "Update URL" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:254 +#: usr/local/www/services_dyndns_edit.php:258 +#: usr/local/www/services_dyndns_edit.php:260 +#: usr/local/www/services_dyndns_edit.php:260 +msgid "Interface to send update from" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:262 +#: usr/local/www/services_dyndns_edit.php:266 +#: usr/local/www/services_dyndns_edit.php:268 +#: usr/local/www/services_dyndns_edit.php:268 +msgid "Note: This is almost always the same as the Interface to Monitor." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:303 +#: usr/local/www/services_dyndns_edit.php:311 +#: usr/local/www/services_dyndns_edit.php:311 +msgid "" +"Username is required for all types except Namecheap, FreeDNS and Custom " +"Entries." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:300 +#: usr/local/www/services_dyndns_edit.php:304 +#: usr/local/www/services_dyndns_edit.php:312 +#: usr/local/www/services_dyndns_edit.php:312 +msgid "Route 53: Enter your Access Key ID." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:301 +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/services_dyndns_edit.php:313 +#: usr/local/www/services_dyndns_edit.php:313 +msgid "" +"For Custom Entries, Username and Password represent HTTP Authentication " +"username and passwords." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:310 +#: usr/local/www/services_dyndns_edit.php:314 +#: usr/local/www/services_dyndns_edit.php:322 +#: usr/local/www/services_dyndns_edit.php:322 +msgid "Route 53: Enter your Secret Access Key." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:315 +#: usr/local/www/services_dyndns_edit.php:319 +#: usr/local/www/services_dyndns_edit.php:327 +#: usr/local/www/services_dyndns_edit.php:327 +msgid "Zone ID" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:318 +#: usr/local/www/services_dyndns_edit.php:322 +#: usr/local/www/services_dyndns_edit.php:330 +#: usr/local/www/services_dyndns_edit.php:330 +msgid "" +"Enter Zone ID that you received when you created your domain in Route 53." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:325 +#: usr/local/www/services_dyndns_edit.php:329 +#: usr/local/www/services_dyndns_edit.php:337 +#: usr/local/www/services_dyndns_edit.php:337 +msgid "" +"This is the only field required by for Custom Dynamic DNS, and is only used " +"by Custom Entries." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:327 +#: usr/local/www/services_dyndns_edit.php:338 +#: usr/local/www/services_dyndns_edit.php:331 +#: usr/local/www/services_dyndns_edit.php:342 +#: usr/local/www/services_dyndns_edit.php:339 +#: usr/local/www/services_dyndns_edit.php:350 +#: usr/local/www/services_dyndns_edit.php:339 +#: usr/local/www/services_dyndns_edit.php:350 +msgid "" +"If you need the new IP to be included in the request, put %IP% in its place." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:331 +#: usr/local/www/services_dyndns_edit.php:335 +#: usr/local/www/services_dyndns_edit.php:343 +#: usr/local/www/services_dyndns_edit.php:343 +msgid "Result Match" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:334 +#: usr/local/www/services_dyndns_edit.php:338 +#: usr/local/www/services_dyndns_edit.php:346 +#: usr/local/www/services_dyndns_edit.php:346 +msgid "This field is only used by Custom Dynamic DNS Entries." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:336 +#: usr/local/www/services_dyndns_edit.php:340 +#: usr/local/www/services_dyndns_edit.php:348 +#: usr/local/www/services_dyndns_edit.php:348 +msgid "" +"This field should be identical to what your DDNS Provider will return if the " +"update succeeds, leave it blank to disable checking of returned results." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:340 +#: usr/local/www/services_dyndns_edit.php:344 +#: usr/local/www/services_dyndns_edit.php:352 +#: usr/local/www/services_dyndns_edit.php:352 +msgid "" +"If you need to include multiple possible values, sperate them with a |. If " +"your provider includes a |, escape it with \\|" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:342 +#: usr/local/www/services_dyndns_edit.php:346 +#: usr/local/www/services_dyndns_edit.php:354 +#: usr/local/www/services_dyndns_edit.php:354 +msgid "" +"Tabs (\\t), newlines (\\n) and carriage returns (\\r) at the beginning or " +"end of the returned results are removed before comparison." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:351 +#: usr/local/www/services_dyndns_edit.php:355 +#: usr/local/www/services_dyndns_edit.php:363 +#: usr/local/www/services_dyndns_edit.php:363 +msgid "Choose TTL for your dns record." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/services_dyndns_edit.php:374 +#: usr/local/www/services_dyndns_edit.php:382 +#: usr/local/www/services_dyndns_edit.php:382 +msgid "Save & Force Update" +msgstr "" + +#: usr/local/www/fbegin.inc:102 usr/local/www/fbegin.inc:111 +#: usr/local/www/fbegin.inc:103 usr/local/www/fbegin.inc:103 +msgid "High Avail. Sync" +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:119 +#: usr/local/www/services_dnsmasq_edit.php:119 +msgid "Alias Domain" +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:124 +#: usr/local/www/services_dnsmasq_edit.php:124 +msgid "" +"Hostnames in alias list can only contain the characters A-Z, 0-9 and '-'." +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/services_dnsmasq_edit.php:127 +msgid "A valid domain must be specified in alias list." +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:232 +#: usr/local/www/services_dnsmasq_edit.php:233 +#: usr/local/www/services_dnsmasq_edit.php:233 +msgid "Enter additional names for this host." +msgstr "" + +#: usr/local/www/pkg.php:238 usr/local/www/pkg.php:186 +#: usr/local/www/pkg.php:186 +msgid "Saving changes..." +msgstr "" + +#: usr/local/www/pkg.php:239 usr/local/www/pkg.php:187 +#: usr/local/www/pkg.php:187 +msgid "Do you really want to save changes?" +msgstr "" + +#: usr/local/www/status_interfaces.php:196 +#: usr/local/www/status_interfaces.php:199 +#: usr/local/www/status_interfaces.php:199 +msgid "Cell Signal (RSSI)" +msgstr "" + +#: usr/local/www/status_interfaces.php:203 +#: usr/local/www/status_interfaces.php:206 +#: usr/local/www/status_interfaces.php:206 +msgid "Cell Mode" +msgstr "" + +#: usr/local/www/status_interfaces.php:210 +#: usr/local/www/status_interfaces.php:213 +#: usr/local/www/status_interfaces.php:213 +msgid "Cell SIM State" +msgstr "" + +#: usr/local/www/status_interfaces.php:217 +#: usr/local/www/status_interfaces.php:220 +#: usr/local/www/status_interfaces.php:220 +msgid "Cell Service" +msgstr "" + +#: usr/local/www/status_interfaces.php:224 +#: usr/local/www/status_interfaces.php:227 +#: usr/local/www/status_interfaces.php:227 +msgid "Cell Upstream" +msgstr "" + +#: usr/local/www/status_interfaces.php:231 +#: usr/local/www/status_interfaces.php:234 +#: usr/local/www/status_interfaces.php:234 +msgid "Cell Downstream" +msgstr "" + +#: usr/local/www/status_interfaces.php:238 +#: usr/local/www/status_interfaces.php:241 +#: usr/local/www/status_interfaces.php:241 +msgid "Cell Current Up" +msgstr "" + +#: usr/local/www/status_interfaces.php:245 +#: usr/local/www/status_interfaces.php:248 +#: usr/local/www/status_interfaces.php:248 +msgid "Cell Current Down" +msgstr "" + +#: usr/local/www/status_interfaces.php:289 +#: usr/local/www/status_interfaces.php:292 +#: usr/local/www/status_interfaces.php:292 +msgid "IPv6 Link Local" +msgstr "" + +#: usr/local/www/status_interfaces.php:339 +#: usr/local/www/status_interfaces.php:342 +#: usr/local/www/status_interfaces.php:342 +msgid "LAGG Protocol" +msgstr "" + +#: usr/local/www/status_interfaces.php:346 +#: usr/local/www/status_interfaces.php:349 +#: usr/local/www/status_interfaces.php:349 +msgid "LAGG Ports" +msgstr "" + +#: usr/local/www/diag_defaults.php:51 usr/local/www/diag_defaults.php:61 +#: usr/local/www/diag_defaults.php:61 +msgid "" +"The system has been reset to factory defaults and is now rebooting. This may " +"take a few minutes, depending on your hardware." +msgstr "" + +#: usr/local/www/carp_status.php:196 usr/local/www/carp_status.php:189 +#: usr/local/www/carp_status.php:189 +msgid "You can configure high availability sync settings" +msgstr "" + +#: usr/local/www/load_balancer_setting.php:69 +#: usr/local/www/load_balancer_setting.php:69 +msgid "Timeout must be a numeric value" +msgstr "" + +#: usr/local/www/load_balancer_setting.php:73 +#: usr/local/www/load_balancer_setting.php:73 +msgid "Interval must be a numeric value" +msgstr "" + +#: usr/local/www/load_balancer_setting.php:78 +#: usr/local/www/load_balancer_setting.php:78 +msgid "Prefork must be a numeric value" +msgstr "" + +#: usr/local/www/load_balancer_setting.php:81 +#: usr/local/www/load_balancer_setting.php:81 +msgid "Prefork value must be between 1 and 32" +msgstr "" + +#: usr/local/www/load_balancer_setting.php:132 +#: usr/local/www/load_balancer_setting.php:131 +#: usr/local/www/load_balancer_setting.php:131 +msgid "Relayd global settings" +msgstr "" + +#: usr/local/www/load_balancer_setting.php:135 +#: usr/local/www/load_balancer_setting.php:134 +#: usr/local/www/load_balancer_setting.php:134 +msgid "timeout" +msgstr "" + +#: usr/local/www/load_balancer_setting.php:139 +#: usr/local/www/load_balancer_setting.php:138 +#: usr/local/www/load_balancer_setting.php:138 +msgid "" +"Set the global timeout in milliseconds for checks. Leave blank to use the " +"default value of 1000 ms " +msgstr "" + +#: usr/local/www/load_balancer_setting.php:143 +#: usr/local/www/load_balancer_setting.php:142 +#: usr/local/www/load_balancer_setting.php:142 +msgid "interval" +msgstr "" + +#: usr/local/www/load_balancer_setting.php:147 +#: usr/local/www/load_balancer_setting.php:146 +#: usr/local/www/load_balancer_setting.php:146 +msgid "" +"Set the interval in seconds at which the member of a pool will be checked. " +"Leave blank to use the default interval of 10 seconds" +msgstr "" + +#: usr/local/www/load_balancer_setting.php:151 +#: usr/local/www/load_balancer_setting.php:150 +#: usr/local/www/load_balancer_setting.php:150 +msgid "prefork" +msgstr "" + +#: usr/local/www/load_balancer_setting.php:155 +#: usr/local/www/load_balancer_setting.php:154 +#: usr/local/www/load_balancer_setting.php:154 +msgid "" +"Number of processes used by relayd. Leave blank to use the default value of " +"5 processes" +msgstr "" + +#: usr/local/www/services_dhcp_relay.php:80 +#: usr/local/www/services_dhcp_relay.php:80 +msgid "A valid Destination Server IP address must be specified." +msgstr "" + +#: usr/local/www/diag_ipsec.php:65 usr/local/www/diag_ipsec.php:66 +#: usr/local/www/diag_ipsec.php:68 usr/local/www/diag_ipsec.php:68 +msgid "Disconnected user" +msgstr "" + +#: usr/local/www/diag_ipsec.php:192 usr/local/www/diag_ipsec.php:193 +#: usr/local/www/diag_ipsec.php:194 usr/local/www/diag_ipsec.php:194 +msgid "Mobile User" +msgstr "" + +#: usr/local/www/diag_ipsec.php:193 usr/local/www/diag_ipsec.php:194 +#: usr/local/www/diag_ipsec.php:195 usr/local/www/diag_ipsec.php:195 +msgid "Login Time" +msgstr "" + +#: usr/local/www/diag_ipsec.php:195 usr/local/www/diag_ipsec.php:196 +#: usr/local/www/diag_ipsec.php:197 usr/local/www/diag_ipsec.php:197 +msgid "Remote" +msgstr "" + +#: usr/local/www/diag_ipsec.php:223 usr/local/www/diag_ipsec.php:224 +#: usr/local/www/diag_ipsec.php:225 usr/local/www/diag_ipsec.php:225 +msgid "You can configure IPsec" +msgstr "" + +#: usr/local/www/system_certmanager.php:207 +#: usr/local/www/system_certmanager.php:681 +#: usr/local/www/system_certmanager.php:210 +#: usr/local/www/system_certmanager.php:706 +#: usr/local/www/system_certmanager.php:707 +#: usr/local/www/system_certmanager.php:210 +#: usr/local/www/system_certmanager.php:707 +msgid "Certificate Type" +msgstr "" + +#: usr/local/www/system_certmanager.php:694 +#: usr/local/www/system_certmanager.php:719 +#: usr/local/www/system_certmanager.php:720 +#: usr/local/www/system_certmanager.php:720 +msgid "" +"Type of certificate to generate. Used for placing restrictions on the usage " +"of the generated certificate." +msgstr "" + +#: usr/local/www/system_certmanager.php:757 +#: usr/local/www/system_certmanager.php:782 +#: usr/local/www/system_certmanager.php:783 +#: usr/local/www/system_certmanager.php:783 +msgid "Alternative Names" +msgstr "" + +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1112 +#: usr/local/www/system_certmanager.php:1168 +#: usr/local/www/system_certmanager.php:1172 +#: usr/local/www/system_certmanager.php:1172 +msgid "export cert+key in .p12" +msgstr "" + +#: usr/local/www/diag_backup.php:192 usr/local/www/diag_backup.php:192 +msgid "RRD Data" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:224 +#: usr/local/www/firewall_rules_edit.php:237 +#: usr/local/www/firewall_rules_edit.php:222 +#: usr/local/www/firewall_rules_edit.php:236 +#: usr/local/www/firewall_rules_edit.php:219 +#: usr/local/www/firewall_rules_edit.php:233 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:239 +msgid "You can not assign a gateway to a rule that applies to IPv4 and IPv6" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:248 +#: usr/local/www/firewall_rules_edit.php:245 +#: usr/local/www/firewall_rules_edit.php:251 +#: usr/local/www/firewall_rules_edit.php:251 +msgid "" +"You can not assign a protocol other then ICMP, TCP, UDP or TCP/UDP to a rule " +"that applies to IPv4 and IPv6" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:253 +#: usr/local/www/firewall_rules_edit.php:252 +#: usr/local/www/firewall_rules_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:255 +#: usr/local/www/firewall_rules_edit.php:255 +msgid "You can not assign a ICMP type to a rule that applies to IPv4 and IPv6" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:415 +#: usr/local/www/firewall_rules_edit.php:418 +#: usr/local/www/firewall_rules_edit.php:424 +#: usr/local/www/firewall_rules_edit.php:424 +msgid "You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1300 +#: usr/local/www/firewall_rules_edit.php:1307 +#: usr/local/www/firewall_rules_edit.php:1306 +#: usr/local/www/firewall_rules_edit.php:1306 +msgid "802.1p" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1308 +#: usr/local/www/firewall_rules_edit.php:1323 +#: usr/local/www/firewall_rules_edit.php:1330 +#: usr/local/www/firewall_rules_edit.php:1341 +#: usr/local/www/firewall_rules_edit.php:1341 +msgid "Choose 802.1p priority to match on" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1312 +#: usr/local/www/firewall_rules_edit.php:1327 +#: usr/local/www/firewall_rules_edit.php:1334 +#: usr/local/www/firewall_rules_edit.php:1345 +#: usr/local/www/firewall_rules_edit.php:1345 +msgid "Choose 802.1p priority to apply" +msgstr "" + +#: usr/local/www/services_unbound.php:102 +#: usr/local/www/services_unbound_advanced.php:88 +msgid "DNS Resolver" +msgstr "" + +#: usr/local/www/services_unbound.php:129 +msgid "The configuration for the DNS Resolver, has been changed" +msgstr "" + +#: usr/local/www/services_unbound.php:136 +#: usr/local/www/services_unbound_advanced.php:123 +msgid "General settings" +msgstr "" + +#: usr/local/www/services_unbound.php:147 +msgid "General DNS Resolver Options" +msgstr "" + +#: usr/local/www/services_unbound.php:153 +msgid "Enable DNS Resolver" +msgstr "" + +#: usr/local/www/services_unbound.php:157 +msgid "Network interfaces" +msgstr "" + +#: usr/local/www/services_unbound.php:172 +msgid "" +"The DNS Resolver Server will listen on the selected interfaces. To add an " +"interface click inside the interface box and select the interface from the " +"drop down." +msgstr "" + +#: usr/local/www/services_unbound.php:177 +msgid "Outgoing interfaces" +msgstr "" + +#: usr/local/www/services_unbound.php:192 +msgid "" +"Utilize different network interface(s) that the DNS Resolver will use to " +"send queries to authoritative servers and receive their replies. By default " +"all interfaces are used." +msgstr "" + +#: usr/local/www/services_unbound.php:197 +msgid "DNSSEC" +msgstr "" + +#: usr/local/www/services_unbound.php:200 +msgid "Enable DNSSEC Support" +msgstr "" + +#: usr/local/www/services_unbound.php:204 +msgid "Forwarding" +msgstr "" + +#: usr/local/www/services_unbound.php:207 +msgid "Enable Forwarding Mode" +msgstr "" + +#: usr/local/www/services_unbound.php:214 +msgid "Register DHCP leases in the DNS Resolver" +msgstr "" + +#: usr/local/www/services_unbound.php:215 +#, php-format +msgid "" +"If this option is set, then machines that specify their hostname when " +"requesting a DHCP lease will be registered in the DNS Resolver, so that " +"their name can be resolved. You should also set the domain in %sSystem: " +"General setup%s to the proper value." +msgstr "" + +#: usr/local/www/services_unbound.php:226 +msgid "Register DHCP static mappings in the DNS Resolver" +msgstr "" + +#: usr/local/www/services_unbound.php:227 +#, php-format +msgid "" +"If this option is set, then DHCP static mappings will be registered in the " +"DNS Resolver, so that their name can be resolved. You should also set the " +"domain in %sSystem: General setup%s to the proper value." +msgstr "" + +#: usr/local/www/services_unbound.php:254 +#, php-format +msgid "" +"If the DNS Resolver is enabled, the DHCP service (if enabled) will " +"automatically serve the LAN IP address as a DNS server to DHCP clients so " +"they will use the DNS Resolver. If Forwarding, is enabled, the DNS Resolver " +"will use the DNS servers entered in %sSystem: General setup%s or those " +"obtained via DHCP or PPP on WAN if the "Allow DNS server list to be " +"overridden by DHCP/PPP on WAN" is checked." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:116 +msgid "The configuration of the DNS Resolver, has been changed" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:134 +msgid "Advanced Resolver Options" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:137 +msgid "Hide Identity" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:140 +msgid "If enabled, id.server and hostname.bind queries are refused." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:144 +msgid "Hide Version" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:147 +msgid "If enabled, version.server and version.bind queries are refused." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:151 +msgid "Prefetch Support" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:154 +msgid "" +"Message cache elements are prefetched before they expire to help keep the " +"cache up to date. When enabled, this option can cause an increase of around " +"10% more DNS traffic and load on the server, but frequently requested items " +"will not expire from the cache." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:158 +msgid "Prefetch DNS Key Support" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:161 +#, php-format +msgid "" +"DNSKEY's are fetched earlier in the validation process when a %sDelegation " +"signer%s is encountered. This helps lower the latency of requests but does " +"utilize a little more CPU." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:165 +msgid "Harden Glue" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:168 +msgid "Only trust glue if it is within the servers authority." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:172 +msgid "Harden DNSSEC data" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:175 +msgid "" +"DNSSEC data is required for trust-anchored zones. If such data is absent, " +"the zone becomes bogus. If this is disabled and no DNSSEC data is received, " +"then the zone is made insecure." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:179 +msgid "Message Cache Size" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:190 +msgid "" +"Size of the message cache. The message cache stores DNS rcodes and " +"validation statuses. The RRSet cache will automatically be set to twice this " +"amount. The RRSet cache contains the actual RR data. The default is 4 " +"megabytes." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:194 +msgid "Outgoing TCP Buffers" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:204 +msgid "" +"The number of outgoing TCP buffers to allocate per thread. The default value " +"is 10. If 0 is selected then no TCP queries, to authoritative servers, are " +"done." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:208 +msgid "Incoming TCP Buffers" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:218 +msgid "" +"The number of incoming TCP buffers to allocate per thread. The default value " +"is 10. If 0 is selected then no TCP queries, from clients, are accepted." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:222 +msgid "EDNS Buffer Size" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:229 +msgid "" +"Number of bytes size to advertise as the EDNS reassembly buffer size. This " +"is the value that is used in UDP datagrams sent to peers. RFC recommendation " +"is 4096 (which is the default). If you have fragmentation reassemble " +"problems, usually seen as timeouts, then a value of 1480 should help. The " +"512 value bypasses most MTU path problems, but it can generate an excessive " +"amount of TCP fallback." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:233 +msgid "Number of queries per thread" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:240 +msgid "" +"The number of queries that every thread will service simultaneously. If more " +"queries arrive that need to be serviced, and no queries can be jostled, then " +"these queries are dropped." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:244 +msgid "Jostle Timeout" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:252 +msgid "" +"This timeout is used for when the server is very busy. This protects against " +"denial of service by slow queries or high query rates. The default value is " +"200 milliseconds." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:256 +msgid "Maximum TTL for RRsets and messages" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:259 +msgid "" +"Configure a maximum Time to live for RRsets and messages in the cache. The " +"default is 86400 seconds (1 day). When the internal TTL expires the cache " +"item is expired. This can be configured to force the resolver to query for " +"data more often and not trust (very large) TTL values." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:263 +msgid "Minimum TTL for RRsets and messages" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:266 +msgid "" +"Configure a minimum Time to live for RRsets and messages in the cache. The " +"default is 0 seconds. If the minimum value kicks in, the data is cached for " +"longer than the domain owner intended, and thus less queries are made to " +"look up the data. The 0 value ensures the data in the cache is as the domain " +"owner intended. High values can lead to trouble as the data in the cache " +"might not match up with the actual data anymore." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:270 +msgid "TTL for Host cache entries" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:279 +msgid "" +"Time to live for entries in the host cache. The host cache contains " +"roundtrip timing and EDNS support information. The default is 15 minutes." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:283 +msgid "TTL for lame delegation" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:292 +msgid "" +"Time to live for when a delegation is considered to be lame. The default is " +"15 minutes." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:296 +msgid "Number of Hosts to cache" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:305 +msgid "Number of hosts for which information is cached. The default is 10,000." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:309 +msgid "Unwanted Reply Threshold" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:319 +msgid "" +"If enabled, a total number of unwanted replies is kept track of in every " +"thread. When it reaches the threshold, a defensive action is taken and a " +"warning is printed to the log file. This defensive action is to clear the " +"RRSet and message caches, hopefully flushing away any poison. The default is " +"disabled, but if enabled a a value of 10 million is suggested." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:323 +msgid "Log level verbosity" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:333 +msgid "Select the log verbosity." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:80 +#: usr/local/www/system_advanced_firewall.php:91 +#: usr/local/www/system_advanced_firewall.php:91 +msgid "The Firewall Maximum Tables value must be an integer." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:326 +#: usr/local/www/system_advanced_firewall.php:370 +#: usr/local/www/system_advanced_firewall.php:371 +#: usr/local/www/system_advanced_firewall.php:371 +msgid "Firewall Maximum Tables" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:330 +#: usr/local/www/system_advanced_firewall.php:374 +#: usr/local/www/system_advanced_firewall.php:375 +#: usr/local/www/system_advanced_firewall.php:375 +msgid "" +"Maximum number of tables for systems such as aliases, sshlockout, snort, " +"etc, combined." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:331 +#: usr/local/www/system_advanced_firewall.php:375 +#: usr/local/www/system_advanced_firewall.php:376 +#: usr/local/www/system_advanced_firewall.php:376 +msgid "" +"This is the actual number of tables, not the number of entries inside the " +"tables (see below)" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:393 +#: usr/local/www/system_advanced_firewall.php:437 +#: usr/local/www/system_advanced_firewall.php:438 +#: usr/local/www/system_advanced_firewall.php:438 +msgid "Disable Negate rule on policy routing rules" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:395 +#: usr/local/www/system_advanced_firewall.php:439 +#: usr/local/www/system_advanced_firewall.php:440 +#: usr/local/www/system_advanced_firewall.php:440 +msgid "" +"With Multi-WAN you generally want to ensure traffic reaches directly " +"connected networks and VPN networks when using policy routing. You can " +"disable this for special purposes but it requires manually creating rules " +"for these networks" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:407 +#: usr/local/www/system_advanced_firewall.php:469 +#: usr/local/www/system_advanced_firewall.php:470 +#: usr/local/www/system_advanced_firewall.php:470 +msgid "NAT Reflection mode for port forwards" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:411 +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_nat_edit.php:788 +#: usr/local/www/system_advanced_firewall.php:473 +#: usr/local/www/firewall_nat_edit.php:800 +#: usr/local/www/system_advanced_firewall.php:474 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/system_advanced_firewall.php:474 +msgid "Enable (NAT + Proxy)" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:412 +#: usr/local/www/firewall_nat_edit.php:795 +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:789 +#: usr/local/www/system_advanced_firewall.php:474 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/system_advanced_firewall.php:475 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/system_advanced_firewall.php:475 +msgid "Enable (Pure NAT)" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:415 +#: usr/local/www/system_advanced_firewall.php:477 +#: usr/local/www/system_advanced_firewall.php:478 +#: usr/local/www/system_advanced_firewall.php:478 +msgid "" +"When enabled, this automatically creates additional NAT redirect rules for " +"access to port forwards on your external IP addresses from within your " +"internal networks." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:417 +#: usr/local/www/system_advanced_firewall.php:479 +#: usr/local/www/system_advanced_firewall.php:480 +#: usr/local/www/system_advanced_firewall.php:480 +msgid "" +"The NAT + proxy mode uses a helper program to send packets to the target of " +"the port forward. It is useful in setups where the interface and/or gateway " +"IP used for communication with the target cannot be accurately determined at " +"the time the rules are loaded. Reflection rules are not created for ranges " +"larger than 500 ports and will not be used for more than 1000 ports total " +"between all port forwards. Only TCP and UDP protocols are supported." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:419 +#: usr/local/www/system_advanced_firewall.php:481 +#: usr/local/www/system_advanced_firewall.php:482 +#: usr/local/www/system_advanced_firewall.php:482 +msgid "" +"The pure NAT mode uses a set of NAT rules to direct packets to the target of " +"the port forward. It has better scalability, but it must be possible to " +"accurately determine the interface and gateway IP used for communication " +"with the target at the time the rules are loaded. There are no inherent " +"limits to the number of ports other than the limits of the protocols. All " +"protocols available for port forwards are supported." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:421 +#: usr/local/www/system_advanced_firewall.php:441 +#: usr/local/www/system_advanced_firewall.php:483 +#: usr/local/www/system_advanced_firewall.php:503 +#: usr/local/www/system_advanced_firewall.php:484 +#: usr/local/www/system_advanced_firewall.php:504 +#: usr/local/www/system_advanced_firewall.php:484 +#: usr/local/www/system_advanced_firewall.php:504 +msgid "" +"Individual rules may be configured to override this system setting on a per-" +"rule basis." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:428 +#: usr/local/www/system_advanced_firewall.php:490 +#: usr/local/www/system_advanced_firewall.php:491 +#: usr/local/www/system_advanced_firewall.php:491 +msgid "Enter value for Reflection timeout in seconds." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:430 +#: usr/local/www/system_advanced_firewall.php:492 +#: usr/local/www/system_advanced_firewall.php:493 +#: usr/local/www/system_advanced_firewall.php:493 +msgid "Note: Only applies to Reflection on port forwards in NAT + proxy mode." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:434 +#: usr/local/www/system_advanced_firewall.php:496 +#: usr/local/www/system_advanced_firewall.php:497 +#: usr/local/www/system_advanced_firewall.php:497 +msgid "Enable NAT Reflection for 1:1 NAT" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:437 +#: usr/local/www/system_advanced_firewall.php:499 +#: usr/local/www/system_advanced_firewall.php:500 +#: usr/local/www/system_advanced_firewall.php:500 +msgid "" +"Enables the automatic creation of additional NAT redirect rules for access " +"to 1:1 mappings of your external IP addresses from within your internal " +"networks." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:439 +#: usr/local/www/system_advanced_firewall.php:501 +#: usr/local/www/system_advanced_firewall.php:502 +#: usr/local/www/system_advanced_firewall.php:502 +msgid "" +"Note: Reflection on 1:1 mappings is only for the inbound component of the " +"1:1 mappings. This functions the same as the pure NAT mode for port " +"forwards. For more details, refer to the pure NAT mode description above." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:445 +#: usr/local/www/system_advanced_firewall.php:507 +#: usr/local/www/system_advanced_firewall.php:508 +#: usr/local/www/system_advanced_firewall.php:508 +msgid "Enable automatic outbound NAT for Reflection" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:450 +#: usr/local/www/system_advanced_firewall.php:512 +#: usr/local/www/system_advanced_firewall.php:513 +#: usr/local/www/system_advanced_firewall.php:513 +msgid "" +"Required for full functionality of the pure NAT mode of NAT Reflection for " +"port forwards or NAT Reflection for 1:1 NAT." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:452 +#: usr/local/www/system_advanced_firewall.php:514 +#: usr/local/www/system_advanced_firewall.php:515 +#: usr/local/www/system_advanced_firewall.php:515 +msgid "" +"Note: This only works for assigned interfaces. Other interfaces require " +"manually creating the outbound NAT rules that direct the reply packets back " +"through the router." +msgstr "" + +#: usr/local/www/diag_logs_ntpd.php:85 usr/local/www/diag_logs_ntpd.php:86 +#: usr/local/www/diag_logs_ntpd.php:86 +#, php-format +msgid "Last %s NTP log entries" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:468 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/firewall_aliases_edit.php:492 +#: usr/local/www/firewall_aliases_edit.php:478 +msgid "" +"Enter as many hosts as you would like. Hosts must be specified by their IP " +"address or fully qualified domain name (FQDN). FQDN hostnames are " +"periodically re-resolved and updated. If multiple IPs are returned by a DNS " +"query, all are used." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:590 +#: usr/local/www/firewall_aliases_edit.php:593 +#: usr/local/www/firewall_aliases_edit.php:624 +#: usr/local/www/firewall_aliases_edit.php:610 +msgid "" +"The name of the alias may only consist of the characters \"a-z, A-Z, 0-9 and " +"_\"." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:470 +#: usr/local/www/system_advanced_admin.php:470 +msgid "Disable password login for Secure Shell (RSA/DSA key only)" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:113 usr/local/www/diag_confbak.php:154 +#: usr/local/www/pkg_mgr_installed.php:115 +#: usr/local/www/pkg_mgr_installed.php:115 +#: usr/local/www/widgets/widgets/system_information.widget.php:92 +#: usr/local/www/diag_confbak.php:154 +msgid "Version" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:197 +#: usr/local/www/pkg_mgr_installed.php:199 +#: usr/local/www/pkg_mgr_installed.php:199 +msgid "Click on " +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:205 +#: usr/local/www/pkg_mgr_installed.php:208 +#: usr/local/www/pkg_mgr_installed.php:210 +#: usr/local/www/pkg_mgr_installed.php:210 +msgid "Remove " +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:209 +#: usr/local/www/pkg_mgr_installed.php:212 +#: usr/local/www/pkg_mgr_installed.php:215 +#: usr/local/www/pkg_mgr_installed.php:214 +#: usr/local/www/pkg_mgr_installed.php:217 +#: usr/local/www/pkg_mgr_installed.php:214 +#: usr/local/www/pkg_mgr_installed.php:217 +msgid "Reinstall " +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:262 +#: usr/local/www/system_advanced_notifications.php:262 +msgid "System Sounds" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:265 +#: usr/local/www/system_advanced_notifications.php:265 +msgid "Startup/Shutdown Sound" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:268 +#: usr/local/www/system_advanced_notifications.php:268 +msgid "Disable the startup/shutdown beep" +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:270 +#: usr/local/www/system_advanced_notifications.php:270 +msgid "When this is checked, startup and shutdown sounds will no longer play." +msgstr "" + +#: usr/local/www/status_rrd_graph.php:146 +#: usr/local/www/status_rrd_graph.php:151 +#: usr/local/www/status_rrd_graph.php:151 +msgid "Invalid start date/time:" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:159 +#: usr/local/www/status_rrd_graph.php:164 +#: usr/local/www/status_rrd_graph.php:164 +msgid "Invalid end date/time:" +msgstr "" + +#: usr/local/www/status_rrd_graph.php:509 +#: usr/local/www/status_rrd_graph.php:544 +#: usr/local/www/status_rrd_graph.php:544 +msgid "Enter date and/or time. Current timezone:" +msgstr "" + +#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:125 +#: usr/local/www/status_ntpd.php:131 usr/local/www/status_ntpd.php:131 +msgid "Ref ID" +msgstr "" + +#: usr/local/www/status_ntpd.php:110 usr/local/www/status_ntpd.php:126 +#: usr/local/www/status_ntpd.php:132 usr/local/www/status_ntpd.php:132 +msgid "Stratum" +msgstr "" + +#: usr/local/www/status_ntpd.php:112 usr/local/www/status_ntpd.php:128 +#: usr/local/www/status_ntpd.php:134 usr/local/www/status_ntpd.php:134 +msgid "When" +msgstr "" + +#: usr/local/www/status_ntpd.php:113 usr/local/www/status_ntpd.php:129 +#: usr/local/www/status_ntpd.php:135 usr/local/www/status_ntpd.php:135 +msgid "Poll" +msgstr "" + +#: usr/local/www/status_ntpd.php:114 usr/local/www/status_ntpd.php:130 +#: usr/local/www/status_ntpd.php:136 usr/local/www/status_ntpd.php:136 +msgid "Reach" +msgstr "" + +#: usr/local/www/status_ntpd.php:116 usr/local/www/status_ntpd.php:132 +#: usr/local/www/status_ntpd.php:138 usr/local/www/status_ntpd.php:138 +msgid "Offset" +msgstr "" + +#: usr/local/www/status_ntpd.php:117 usr/local/www/status_ntpd.php:133 +#: usr/local/www/status_ntpd.php:139 usr/local/www/status_ntpd.php:139 +msgid "Jitter" +msgstr "" + +#: usr/local/www/firewall_rules.php:790 usr/local/www/firewall_rules.php:783 +#: usr/local/www/firewall_rules.php:784 usr/local/www/firewall_rules.php:784 +msgid "No floating rules are currently defined." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:316 +#: usr/local/www/system_advanced_misc.php:320 +#: usr/local/www/system_advanced_misc.php:367 +#: usr/local/www/system_advanced_misc.php:367 +msgid "" +"Successive connections will be redirected to the servers in a round-robin " +"manner with connections from the same source being sent to the same web " +"server. This 'sticky connection' will exist as long as there are states that " +"refer to this connection. Once the states expire, so will the sticky " +"connection. Further connections from that host will be redirected to the " +"next web server in the round robin. Changing this option will restart the " +"Load Balancing service." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:308 +#: usr/local/www/system_advanced_misc.php:327 +#: usr/local/www/system_advanced_misc.php:331 +#: usr/local/www/system_advanced_misc.php:378 +#: usr/local/www/system_advanced_misc.php:378 +msgid "" +"Set the source tracking timeout for sticky connections. By default this is " +"0, so source tracking is removed as soon as the state expires. Setting this " +"timeout higher will cause the source/destination relationship to persist for " +"longer periods of time." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:336 +#: usr/local/www/system_advanced_misc.php:355 +#: usr/local/www/system_advanced_misc.php:359 +#: usr/local/www/system_advanced_misc.php:367 +#: usr/local/www/system_advanced_misc.php:406 +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:406 +#: usr/local/www/system_advanced_misc.php:414 +msgid "Hiadaptive" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:337 +#: usr/local/www/system_advanced_misc.php:356 +#: usr/local/www/system_advanced_misc.php:360 +#: usr/local/www/system_advanced_misc.php:368 +#: usr/local/www/system_advanced_misc.php:407 +#: usr/local/www/system_advanced_misc.php:415 +#: usr/local/www/system_advanced_misc.php:407 +#: usr/local/www/system_advanced_misc.php:415 +msgid "Adaptive" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:338 +#: usr/local/www/system_advanced_misc.php:357 +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:369 +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:416 +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:416 +msgid "Minimum" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:339 +#: usr/local/www/system_advanced_misc.php:358 +#: usr/local/www/system_advanced_misc.php:362 +#: usr/local/www/system_advanced_misc.php:370 +#: usr/local/www/system_advanced_misc.php:409 +#: usr/local/www/system_advanced_misc.php:417 +#: usr/local/www/system_advanced_misc.php:409 +#: usr/local/www/system_advanced_misc.php:417 +msgid "Maximum" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:342 +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:373 +#: usr/local/www/system_advanced_misc.php:420 +#: usr/local/www/system_advanced_misc.php:420 +msgid "" +"The powerd utility monitors the system state and sets various power control " +"options accordingly. It offers four modes (maximum, minimum, adaptive and " +"hiadaptive) that can be individually selected while on AC power or " +"batteries. The modes maximum, minimum, adaptive and hiadaptive may be " +"abbreviated max, min, adp, hadp. Maximum mode chooses the highest " +"performance values. Minimum mode selects the lowest performance values to " +"get the most power savings. Adaptive mode attempts to strike a balance by " +"degrading performance when the system appears idle and increasing it when " +"the system is busy. It offers a good balance between a small performance " +"loss for greatly increased power savings. Hiadaptive mode is alike adaptive " +"mode, but tuned for systems where performance and interactivity are more " +"importantthan power consumption. It rises frequency faster, drops slower " +"andkeeps twice lower CPU load." +msgstr "" + +#: usr/local/www/firewall_shaper_vinterface.php:204 +#: usr/local/www/firewall_shaper_vinterface.php:228 +#: usr/local/www/firewall_shaper_vinterface.php:205 +#: usr/local/www/firewall_shaper_vinterface.php:230 +#: usr/local/www/firewall_shaper_vinterface.php:205 +#: usr/local/www/firewall_shaper_vinterface.php:230 +msgid "You cannot name a child queue with the same name as a parent limiter" +msgstr "" + +#: usr/local/www/diag_routes.php:72 usr/local/www/diag_routes.php:73 +#: usr/local/www/diag_routes.php:73 +msgid "" +"By enabling name resolution, the query should take a bit longer. You can " +"stop it at any time by clicking the Stop button in your browser." +msgstr "" + +#: usr/local/www/status_dhcpv6_leases.php:481 +#: usr/local/www/status_dhcpv6_leases.php:482 +#: usr/local/www/status_dhcpv6_leases.php:485 +#: usr/local/www/status_dhcpv6_leases.php:485 +msgid "IPv6 Prefix" +msgstr "" + +#: usr/local/www/services_captiveportal.php:465 +#: usr/local/www/services_captiveportal.php:463 +#: usr/local/www/services_captiveportal.php:481 +#: usr/local/www/services_captiveportal.php:481 +msgid "" +"This setting limits the number of concurrent connections to the captive " +"portal HTTP(S) server. This does not set how many users can be logged in to " +"the captive portal, but rather how many users can load the portal page or " +"authenticate at the same time! Possible setting allowed is: minimum 4 " +"connections per client IP address, with a total maximum of 100 connections." +msgstr "" + +#: usr/local/www/services_captiveportal.php:602 +#: usr/local/www/services_captiveportal.php:600 +#: usr/local/www/services_captiveportal.php:601 +#: usr/local/www/services_captiveportal.php:617 +#: usr/local/www/services_captiveportal.php:617 +msgid "Radius Protocol" +msgstr "" + +#: usr/local/www/services_captiveportal.php:611 +#: usr/local/www/services_captiveportal.php:609 +#: usr/local/www/services_captiveportal.php:610 +#: usr/local/www/services_captiveportal.php:626 +#: usr/local/www/services_captiveportal.php:626 +msgid "CHAP_MD5" +msgstr "" + +#: usr/local/www/services_captiveportal.php:615 +#: usr/local/www/services_captiveportal.php:613 +#: usr/local/www/services_captiveportal.php:614 +#: usr/local/www/services_captiveportal.php:630 +#: usr/local/www/services_captiveportal.php:630 +msgid "MSCHAPv1" +msgstr "" + +#: usr/local/www/services_captiveportal.php:619 +#: usr/local/www/services_captiveportal.php:617 +#: usr/local/www/services_captiveportal.php:618 +#: usr/local/www/services_captiveportal.php:634 +#: usr/local/www/services_captiveportal.php:634 +msgid "MSCHAPv2" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:389 +#: usr/local/www/system_gateways_edit.php:495 +#: usr/local/www/system_gateways_edit.php:497 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/system_gateways_edit.php:527 +msgid "Choose the Internet Protocol this gateway uses." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:490 +msgid "" +"This defines how often that an icmp probe will be sent in seconds. Default " +"is 1." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:491 +#: usr/local/www/system_gateways_edit.php:597 +#: usr/local/www/system_gateways_edit.php:601 +#: usr/local/www/system_gateways_edit.php:603 +#: usr/local/www/system_gateways_edit.php:633 +#: usr/local/www/system_gateways_edit.php:633 +msgid "" +"NOTE: The quality graph is averaged over seconds, not intervals, so as the " +"frequency probe is increased the accuracy of the quality graph is decreased." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:500 +msgid "" +"This defines the number of bad probes before the alarm will fire. Default is " +"10." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:505 +msgid "" +"NOTE: The total time before a gateway is down is the product of the " +"Frequency Probe and the Down fields. By default this is 1*10=10 seconds." +msgstr "" + +#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108 +#: usr/local/www/status_gateways.php:134 +#: usr/local/www/widgets/widgets/gateways.widget.php:73 +#: usr/local/www/widgets/widgets/gateways.widget.php:81 +#: usr/local/www/status_gateways.php:101 usr/local/www/status_gateways.php:109 +#: usr/local/www/status_gateways.php:135 +#: usr/local/www/widgets/widgets/gateways.widget.php:94 +#: usr/local/www/widgets/widgets/gateways.widget.php:103 +#: usr/local/www/widgets/widgets/gateways.widget.php:95 +#: usr/local/www/widgets/widgets/gateways.widget.php:104 +#: usr/local/www/widgets/widgets/gateways.widget.php:95 +#: usr/local/www/widgets/widgets/gateways.widget.php:104 +#: usr/local/www/status_gateways.php:101 usr/local/www/status_gateways.php:109 +#: usr/local/www/status_gateways.php:135 +msgid "Pending" +msgstr "" + +#: usr/local/www/status_gateways.php:140 usr/local/www/status_gateways.php:141 +#: usr/local/www/status_gateways.php:141 +msgid "Last check:" +msgstr "" + +#: usr/local/www/diag_dump_states.php:145 +#: usr/local/www/diag_dump_states.php:144 +msgid "Current state count" +msgstr "" + +#: usr/local/www/diag_dump_states.php:147 +#: usr/local/www/diag_dump_states.php:146 +msgid "Matching filter" +msgstr "" + +#: usr/local/www/diag_dump_states.php:155 +#: usr/local/www/diag_dump_states.php:154 +#: usr/local/www/diag_dump_states.php:143 +#: usr/local/www/diag_dump_states.php:143 +msgid "Kill" +msgstr "" + +#: usr/local/www/services_dyndns.php:184 usr/local/www/services_dyndns.php:180 +#: usr/local/www/services_dyndns.php:180 +msgid "" +"You can force an update for an IP address on the edit page for that service." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:299 +#: usr/local/www/vpn_openvpn_server.php:300 +#: usr/local/www/vpn_openvpn_server.php:321 +#: usr/local/www/vpn_openvpn_server.php:321 +msgid "" +"Using a tunnel network and server bridge settings together is not allowed." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:302 +#: usr/local/www/vpn_openvpn_server.php:303 +#: usr/local/www/vpn_openvpn_server.php:324 +#: usr/local/www/vpn_openvpn_server.php:324 +msgid "Server Bridge DHCP Start and End must both be empty, or defined." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:304 +#: usr/local/www/vpn_openvpn_server.php:305 +#: usr/local/www/vpn_openvpn_server.php:326 +#: usr/local/www/vpn_openvpn_server.php:326 +msgid "Server Bridge DHCP Start must be an IPv4 address." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:306 +#: usr/local/www/vpn_openvpn_server.php:307 +#: usr/local/www/vpn_openvpn_server.php:328 +#: usr/local/www/vpn_openvpn_server.php:328 +msgid "Server Bridge DHCP End must be an IPv4 address." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:308 +#: usr/local/www/vpn_openvpn_server.php:309 +#: usr/local/www/vpn_openvpn_server.php:330 +#: usr/local/www/vpn_openvpn_server.php:330 +msgid "The Server Bridge DHCP range is invalid (start higher than end)." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1084 +#: usr/local/www/vpn_openvpn_server.php:1112 +#: usr/local/www/vpn_openvpn_server.php:1139 +#: usr/local/www/vpn_openvpn_server.php:1139 +msgid "Bridge DHCP" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1094 +#: usr/local/www/vpn_openvpn_server.php:1122 +#: usr/local/www/vpn_openvpn_server.php:1149 +#: usr/local/www/vpn_openvpn_server.php:1149 +msgid "Allow clients on the bridge to obtain DHCP." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1102 +#: usr/local/www/vpn_openvpn_server.php:1130 +#: usr/local/www/vpn_openvpn_server.php:1157 +#: usr/local/www/vpn_openvpn_server.php:1157 +msgid "Bridge Interface" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1124 +msgid "" +"The interface to which this tap instance will be, bridged. This is not done " +"automatically. You must assign this interface and create the bridge " +"separately. This setting controls which existing IP address and subnet mask " +"are used by OpenVPN for the bridge. Setting this to 'none' will cause the " +"Server Bridge DHCP settings below to be ignored." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1133 +#: usr/local/www/vpn_openvpn_server.php:1161 +#: usr/local/www/vpn_openvpn_server.php:1188 +#: usr/local/www/vpn_openvpn_server.php:1188 +msgid "Server Bridge DHCP Start" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1137 +msgid "" +"When using tap mode as multi-point server, you may optionally supply a DHCP " +"range to use on the interface to which this tap instance is bridged. If " +"these settings are left blank, DHCP will be passed through to the LAN, and " +"the interface setting above will be ignored." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1146 +#: usr/local/www/vpn_openvpn_server.php:1174 +#: usr/local/www/vpn_openvpn_server.php:1201 +#: usr/local/www/vpn_openvpn_server.php:1201 +msgid "Server Bridge DHCP End" +msgstr "" + +#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcpv6.php:216 +#: usr/local/www/services_router_advertisements.php:159 +#: usr/local/www/services_dhcp.php:285 usr/local/www/services_dhcpv6.php:201 +#: usr/local/www/services_dhcp_edit.php:230 +#: usr/local/www/services_dhcp.php:266 usr/local/www/services_dhcpv6.php:195 +#: usr/local/www/services_router_advertisements.php:154 +#: usr/local/www/services_dhcp.php:286 +#: usr/local/www/services_router_advertisements.php:154 +#: usr/local/www/services_dhcp_edit.php:230 +#: usr/local/www/services_dhcp.php:286 usr/local/www/services_dhcpv6.php:195 +msgid "A valid domain search list must be specified." +msgstr "" + +#: usr/local/www/services_dhcp.php:685 usr/local/www/services_dhcp.php:861 +#: usr/local/www/services_dhcp_edit.php:427 +#: usr/local/www/services_dhcp.php:875 usr/local/www/services_dhcp.php:895 +#: usr/local/www/services_dhcp_edit.php:427 +#: usr/local/www/services_dhcp.php:895 +msgid "" +"The DHCP server can optionally provide a domain search list. Use the " +"semicolon character as seperator " +msgstr "" + +#: usr/local/www/services_dhcp.php:735 usr/local/www/services_dhcpv6.php:716 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:647 +#: usr/local/www/services_dhcp.php:930 usr/local/www/services_dhcpv6.php:664 +#: usr/local/www/services_dhcp.php:950 usr/local/www/services_dhcp.php:950 +#: usr/local/www/services_dhcpv6.php:664 +msgid "Time format change" +msgstr "" + +#: usr/local/www/services_dhcp.php:744 usr/local/www/services_dhcp.php:925 +#: usr/local/www/services_dhcp.php:939 usr/local/www/services_dhcp.php:959 +#: usr/local/www/services_dhcp.php:959 +msgid "Change DHCP display lease time from UTC to local time." +msgstr "" + +#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:932 +msgid "" +"By default DHCP leases are displayed in UTC time. By checking this \n" +"\t\t\t\t\t\tbox DHCP lease time will be displayed in local time and set to " +"time zone selected. This will be used for all DHCP interfaces lease time." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:92 +#: usr/local/www/load_balancer_virtual_server_edit.php:92 +msgid "" +"The port must be an integer between 1 and 65535, a port alias, or left blank." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:95 +#: usr/local/www/load_balancer_virtual_server_edit.php:95 +#, php-format +msgid "%s is not a valid IP address, IPv4 subnet, or alias." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:97 +#: usr/local/www/load_balancer_virtual_server_edit.php:97 +#, php-format +msgid "%s is a subnet containing more than 64 IP addresses." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:173 +#: usr/local/www/load_balancer_virtual_server_edit.php:171 +#: usr/local/www/load_balancer_virtual_server_edit.php:171 +msgid "" +"You may also specify a host alias listed in Firewall -> Aliases here." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:187 +#: usr/local/www/load_balancer_virtual_server_edit.php:185 +#: usr/local/www/load_balancer_virtual_server_edit.php:185 +msgid "If left blank, listening ports from the pool will be used." +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:188 +#: usr/local/www/load_balancer_pool_edit.php:216 +#: usr/local/www/load_balancer_virtual_server_edit.php:186 +#: usr/local/www/load_balancer_pool_edit.php:214 +#: usr/local/www/load_balancer_virtual_server_edit.php:186 +#: usr/local/www/load_balancer_pool_edit.php:214 +msgid "" +"You may also specify a port alias listed in Firewall -> Aliases here." +msgstr "" + +#: usr/local/www/system_hasync.php:96 usr/local/www/system_hasync.php:97 +#: usr/local/www/system_hasync.php:97 +msgid "High Availability Sync" +msgstr "" + +#: usr/local/www/services_ntpd.php:86 usr/local/www/services_ntpd.php:92 +#: usr/local/www/services_ntpd.php:92 +msgid "NTP Server Configuration" +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:391 +#: usr/local/www/interfaces_bridge_edit.php:392 +#: usr/local/www/interfaces_bridge_edit.php:393 +#: usr/local/www/interfaces_bridge_edit.php:396 +#: usr/local/www/interfaces_bridge_edit.php:396 +msgid "" +"Set the Spanning Tree priority of interface to value. The default is 128. " +"The minimum is 0 and the maximum is 240. Increments of 16." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:172 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:235 +#: usr/local/www/diag_packet_capture.php:235 +msgid "Select the protocol to capture, or Any." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:245 +#: usr/local/www/diag_packet_capture.php:292 +#: usr/local/www/diag_packet_capture.php:310 +#: usr/local/www/diag_packet_capture.php:310 +msgid "View Capture" +msgstr "" + +#: usr/local/www/system_camanager.php:420 +#: usr/local/www/system_camanager.php:427 +#: usr/local/www/system_camanager.php:427 +msgid "Serial for next certificate" +msgstr "" + +#: usr/local/www/system_camanager.php:423 +#: usr/local/www/system_camanager.php:430 +#: usr/local/www/system_camanager.php:430 +msgid "" +"Enter a decimal number to be used as the serial number for the next " +"certificate to be created using this CA." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:140 +#: usr/local/www/vpn_ipsec_phase2.php:141 +#: usr/local/www/vpn_ipsec_phase2.php:163 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +msgid "Invalid Local Network." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:140 +#: usr/local/www/vpn_ipsec_phase2.php:141 +#: usr/local/www/vpn_ipsec_phase2.php:163 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +msgid "has no subnet." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:233 +#: usr/local/www/firewall_nat_edit.php:238 +#: usr/local/www/firewall_nat_edit.php:243 +#: usr/local/www/firewall_nat_edit.php:243 +#, php-format +msgid "" +"A valid local port must be specified. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_nat_edit.php:792 +#: usr/local/www/firewall_nat_edit.php:787 +#: usr/local/www/firewall_nat_edit.php:799 +#: usr/local/www/firewall_nat_edit.php:800 +#: usr/local/www/firewall_nat_edit.php:800 +msgid "Use system default" +msgstr "" + +#: usr/local/www/interfaces.php:463 usr/local/www/interfaces.php:460 +#: usr/local/www/interfaces.php:448 usr/local/www/interfaces.php:453 +#: usr/local/www/interfaces.php:449 usr/local/www/interfaces.php:449 +msgid "" +"This interface is referenced by IPv4 VIPs. Please delete those before " +"setting the interface to 'none' configuration." +msgstr "" + +#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:513 +#: usr/local/www/interfaces.php:501 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:502 usr/local/www/interfaces.php:502 +msgid "" +"This interface is referenced by IPv6 VIPs. Please delete those before " +"setting the interface to 'none' configuration." +msgstr "" + +#: usr/local/www/interfaces.php:526 usr/local/www/interfaces.php:523 +#: usr/local/www/interfaces.php:511 +#, php-format +msgid "You can only have one interface configured as %s or 6to4." +msgstr "" + +#: usr/local/www/interfaces.php:536 usr/local/www/interfaces.php:533 +#: usr/local/www/interfaces.php:521 +#, php-format +msgid "You can only have one interface configured as %s or 6rd." +msgstr "" + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:546 +#: usr/local/www/interfaces.php:534 usr/local/www/interfaces.php:541 +#: usr/local/www/interfaces.php:537 usr/local/www/interfaces.php:537 +msgid "You must enter a valid hexadecimal number for the IPv6 prefix ID." +msgstr "" + +#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:550 +#: usr/local/www/interfaces.php:538 usr/local/www/interfaces.php:545 +#: usr/local/www/interfaces.php:541 usr/local/www/interfaces.php:541 +msgid "You specified an IPv6 prefix ID that is out of range." +msgstr "" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158 +msgid "SLAAC" +msgstr "" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158 +msgid "6rd Tunnel" +msgstr "" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158 +msgid "6to4 Tunnel" +msgstr "" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158 +msgid "Track Interface" +msgstr "" + +#: usr/local/www/interfaces.php:1411 usr/local/www/interfaces.php:1399 +#: usr/local/www/interfaces.php:1412 usr/local/www/interfaces.php:1455 +#: usr/local/www/interfaces.php:1450 usr/local/www/interfaces.php:1450 +msgid "" +"If you leave this field blank, the adapter's default MTU will be used. This " +"is typically 1500 bytes but can vary in some circumstances." +msgstr "" + +#: usr/local/www/interfaces.php:1768 usr/local/www/interfaces.php:1756 +#: usr/local/www/interfaces.php:1774 usr/local/www/interfaces.php:1820 +#: usr/local/www/interfaces.php:1812 usr/local/www/interfaces.php:1812 +msgid "6RD Rapid Deployment" +msgstr "" + +#: usr/local/www/interfaces.php:1771 usr/local/www/interfaces.php:1759 +#: usr/local/www/interfaces.php:1777 usr/local/www/interfaces.php:1823 +#: usr/local/www/interfaces.php:1815 usr/local/www/interfaces.php:1815 +msgid "6RD prefix" +msgstr "" + +#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1763 +#: usr/local/www/interfaces.php:1781 usr/local/www/interfaces.php:1827 +#: usr/local/www/interfaces.php:1819 usr/local/www/interfaces.php:1819 +msgid "" +"The value in this field is the 6RD IPv6 prefix assigned by your ISP. e.g. " +"'2001:db8::/32'" +msgstr "" + +#: usr/local/www/interfaces.php:1779 usr/local/www/interfaces.php:1767 +#: usr/local/www/interfaces.php:1785 usr/local/www/interfaces.php:1831 +#: usr/local/www/interfaces.php:1823 usr/local/www/interfaces.php:1823 +msgid "6RD Border Relay" +msgstr "" + +#: usr/local/www/interfaces.php:1783 usr/local/www/interfaces.php:1771 +#: usr/local/www/interfaces.php:1789 usr/local/www/interfaces.php:1835 +#: usr/local/www/interfaces.php:1827 usr/local/www/interfaces.php:1827 +msgid "" +"The value in this field is 6RD IPv4 gateway address assigned by your ISP" +msgstr "" + +#: usr/local/www/interfaces.php:1787 usr/local/www/interfaces.php:1775 +#: usr/local/www/interfaces.php:1793 usr/local/www/interfaces.php:1839 +#: usr/local/www/interfaces.php:1831 usr/local/www/interfaces.php:1831 +msgid "6RD IPv4 Prefix length" +msgstr "" + +#: usr/local/www/interfaces.php:1799 usr/local/www/interfaces.php:1787 +#: usr/local/www/interfaces.php:1805 usr/local/www/interfaces.php:1851 +#: usr/local/www/interfaces.php:1843 usr/local/www/interfaces.php:1843 +msgid "" +"The value in this field is the 6RD IPv4 prefix length. Normally specified by " +"the ISP. A value of 0 means we embed the entire IPv4 address in the 6RD " +"prefix." +msgstr "" + +#: usr/local/www/interfaces.php:1809 usr/local/www/interfaces.php:1797 +#: usr/local/www/interfaces.php:1818 usr/local/www/interfaces.php:1864 +#: usr/local/www/interfaces.php:1856 usr/local/www/interfaces.php:1856 +msgid "Track IPv6 Interface" +msgstr "" + +#: usr/local/www/interfaces.php:1812 usr/local/www/interfaces.php:1800 +#: usr/local/www/interfaces.php:1821 usr/local/www/interfaces.php:1867 +#: usr/local/www/interfaces.php:1859 usr/local/www/interfaces.php:1859 +msgid "IPv6 Interface" +msgstr "" + +#: usr/local/www/interfaces.php:1838 usr/local/www/interfaces.php:1826 +#: usr/local/www/interfaces.php:1847 usr/local/www/interfaces.php:1893 +#: usr/local/www/interfaces.php:1885 usr/local/www/interfaces.php:1885 +msgid "This selects the dynamic IPv6 WAN interface to track for configuration" +msgstr "" + +#: usr/local/www/interfaces.php:1842 usr/local/www/interfaces.php:1830 +#: usr/local/www/interfaces.php:1851 usr/local/www/interfaces.php:1897 +#: usr/local/www/interfaces.php:1889 usr/local/www/interfaces.php:1889 +msgid "IPv6 Prefix ID" +msgstr "" + +#: usr/local/www/interfaces.php:1853 usr/local/www/interfaces.php:1841 +#: usr/local/www/interfaces.php:1862 usr/local/www/interfaces.php:1908 +#: usr/local/www/interfaces.php:1898 usr/local/www/interfaces.php:1898 +msgid "" +"The value in this field is the (Delegated) IPv6 prefix id. This determines " +"the configurable network ID based on the dynamic IPv6 connection" +msgstr "" + +#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1843 +#: usr/local/www/interfaces.php:1864 usr/local/www/interfaces.php:1910 +#, php-format +msgid "" +"Enter a hexadecimal value between %x and %x here, or leave blank." +msgstr "" + +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2344 +#: usr/local/www/interfaces.php:2374 usr/local/www/interfaces.php:2420 +#: usr/local/www/interfaces.php:2409 usr/local/www/interfaces.php:2409 +msgid "" +"Note: Only required in Access Point mode. If left blank in Ad-hoc or " +"Infrastructure mode, this interface will connect to any available SSID" +msgstr "" + +#: usr/local/www/interfaces.php:2576 usr/local/www/interfaces.php:2564 +#: usr/local/www/interfaces.php:2594 usr/local/www/interfaces.php:2640 +#: usr/local/www/interfaces.php:2629 usr/local/www/interfaces.php:2629 +msgid "Secondary 802.1X Authentication Server IP Address" +msgstr "" + +#: usr/local/www/interfaces.php:2583 usr/local/www/interfaces.php:2571 +#: usr/local/www/interfaces.php:2601 usr/local/www/interfaces.php:2647 +#: usr/local/www/interfaces.php:2636 usr/local/www/interfaces.php:2636 +msgid "Secondary 802.1X Authentication Server Port" +msgstr "" + +#: usr/local/www/interfaces.php:2590 usr/local/www/interfaces.php:2578 +#: usr/local/www/interfaces.php:2608 usr/local/www/interfaces.php:2654 +#: usr/local/www/interfaces.php:2643 usr/local/www/interfaces.php:2643 +msgid "Secondary 802.1X Authentication Server Shared Secret" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:196 +#: usr/local/www/vpn_openvpn_client.php:202 +#: usr/local/www/vpn_openvpn_client.php:220 +#: usr/local/www/vpn_openvpn_client.php:220 +msgid "The bandwidth limit must be a positive numeric value." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:89 +#: usr/local/www/load_balancer_pool_edit.php:89 +msgid "The port must be an integer between 1 and 65535, or a port alias." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:98 +#: usr/local/www/load_balancer_pool_edit.php:98 +#, php-format +msgid "%s is not a valid IP address or IPv4 subnet (in \"enabled\" list)." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:101 +#: usr/local/www/load_balancer_pool_edit.php:101 +#, php-format +msgid "" +"%s is a subnet containing more than 64 IP addresses (in \"enabled\" list)." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:108 +#: usr/local/www/load_balancer_pool_edit.php:108 +#, php-format +msgid "%s is not a valid IP address or IPv4 subnet (in \"disabled\" list)." +msgstr "" + +#: usr/local/www/load_balancer_pool_edit.php:111 +#: usr/local/www/load_balancer_pool_edit.php:111 +#, php-format +msgid "" +"%s is a subnet containing more than 64 IP addresses (in \"disabled\" list)." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:153 +#: usr/local/www/firewall_virtual_ip_edit.php:152 +#: usr/local/www/firewall_virtual_ip_edit.php:144 +#: usr/local/www/firewall_virtual_ip_edit.php:160 +#: usr/local/www/firewall_virtual_ip_edit.php:160 +#, php-format +msgid "" +"VHID %s is already in use on interface %s. Pick a unique number on this " +"interface." +msgstr "" + +#: usr/local/www/services_snmp.php:391 usr/local/www/services_snmp.php:392 +#: usr/local/www/services_snmp.php:407 usr/local/www/services_snmp.php:407 +msgid "Interface Binding" +msgstr "" + +#: usr/local/www/services_snmp.php:396 usr/local/www/services_snmp.php:397 +#: usr/local/www/services_snmp.php:412 usr/local/www/services_snmp.php:412 +msgid "Bind Interface" +msgstr "" + +#: usr/local/www/widgets/widgets/smart_status.widget.php:36 +#: usr/local/www/widgets/widgets/smart_status.widget.php:37 +#: usr/local/www/widgets/widgets/smart_status.widget.php:37 +msgid "Drive" +msgstr "" + +#: usr/local/www/widgets/widgets/smart_status.widget.php:37 +#: usr/local/www/widgets/widgets/smart_status.widget.php:38 +#: usr/local/www/widgets/widgets/smart_status.widget.php:38 +msgid "Ident" +msgstr "" + +#: usr/local/www/system.php:418 usr/local/www/system.php:411 +#: usr/local/www/system.php:409 usr/local/www/system.php:409 +msgid "Language" +msgstr "" + +#: usr/local/www/system.php:431 usr/local/www/system.php:424 +#: usr/local/www/system.php:422 usr/local/www/system.php:422 +msgid "Choose a language for the webConfigurator" +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:118 +#: usr/local/www/firewall_virtual_ip.php:115 +#: usr/local/www/firewall_virtual_ip.php:127 +#: usr/local/www/firewall_virtual_ip.php:150 +#: usr/local/www/firewall_virtual_ip.php:150 +msgid "" +"This entry cannot be deleted because it is still referenced by a CARP IP " +"with the description" +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:124 +#: usr/local/www/firewall_virtual_ip.php:121 +#: usr/local/www/firewall_virtual_ip.php:132 +#: usr/local/www/firewall_virtual_ip.php:155 +#: usr/local/www/firewall_virtual_ip.php:155 +msgid "" +"This entry cannot be deleted because it is still referenced by an IP alias " +"entry with the description" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:531 +#: usr/local/www/services_router_advertisements.php:277 +#: usr/local/www/services_router_advertisements.php:272 +#: usr/local/www/services_router_advertisements.php:272 +#, php-format +msgid "Select the Operating Mode for the Router Advertisement (RA) Daemon." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:532 +#: usr/local/www/services_router_advertisements.php:278 +#: usr/local/www/services_router_advertisements.php:273 +#: usr/local/www/services_router_advertisements.php:273 +#, php-format +msgid "" +"Use \"Router Only\" to only advertise this router, \"Unmanaged\" for Router " +"Advertising with Stateless Autoconfig, \"Managed\" for assignment through " +"(a) DHCPv6 Server, \"Assisted\" for DHCPv6 Server assignment combined with " +"Stateless Autoconfig" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:533 +#: usr/local/www/services_router_advertisements.php:279 +#: usr/local/www/services_router_advertisements.php:274 +#: usr/local/www/services_router_advertisements.php:274 +#, php-format +msgid "" +"It is not required to activate this DHCPv6 server when set to \"Managed\", " +"this can be another host on the network" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:537 +#: usr/local/www/services_router_advertisements.php:283 +#: usr/local/www/services_router_advertisements.php:278 +#: usr/local/www/services_router_advertisements.php:278 +msgid "Router Priority" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:544 +#: usr/local/www/services_router_advertisements.php:290 +#: usr/local/www/services_router_advertisements.php:285 +#: usr/local/www/services_router_advertisements.php:285 +#, php-format +msgid "Select the Priority for the Router Advertisement (RA) Daemon." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:558 +#: usr/local/www/services_router_advertisements.php:304 +#: usr/local/www/services_router_advertisements.php:299 +#: usr/local/www/services_router_advertisements.php:299 +msgid "RA Interface" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:566 +#: usr/local/www/services_router_advertisements.php:312 +#: usr/local/www/services_router_advertisements.php:307 +#: usr/local/www/services_router_advertisements.php:307 +#, php-format +msgid "Select the Interface for the Router Advertisement (RA) Daemon." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:653 usr/local/www/services_dhcpv6.php:584 +msgid "prefix delegation size" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:662 usr/local/www/services_dhcpv6.php:593 +#: usr/local/www/services_dhcpv6.php:610 usr/local/www/services_dhcpv6.php:610 +msgid "" +"You can define a Prefix range here for DHCP Prefix Delegation. This allows " +"for \n" +"\t\t\t\t\tassigning networks to subrouters. The start and end of the range " +"must end on boundaries of the prefix delegation size." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:685 usr/local/www/services_dhcpv6.php:616 +#: usr/local/www/services_dhcpv6.php:633 usr/local/www/services_dhcpv6.php:633 +msgid "" +"The DHCP server can optionally provide a domain search list. Use the " +"semicolon character as seperator" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:725 usr/local/www/services_dhcpv6.php:656 +#: usr/local/www/services_dhcpv6.php:673 usr/local/www/services_dhcpv6.php:673 +msgid "Change DHCPv6 display lease time from UTC to local time." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:663 +#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:680 +msgid "" +"By default DHCPv6 leases are displayed in UTC time. By checking this \n" +"\t\t\t\t\t\tbox DHCPv6 lease time will be displayed in local time and set to " +"time zone selected. This will be used for all DHCPv6 interfaces lease time." +msgstr "" + +#: etc/inc/priv.defs.inc:64 etc/inc/priv.defs.inc:64 +msgid "WebCfg - Diagnostics: Sockets page" +msgstr "" + +#: etc/inc/priv.defs.inc:65 etc/inc/priv.defs.inc:65 +msgid "Allow access to the 'Diagnostics: Sockets' page." +msgstr "" + +#: etc/inc/config.console.inc:263 etc/inc/config.console.inc:263 +#, php-format +msgid "" +"%sEnter the Optional %s interface name or 'a' for auto-detection%s(or " +"nothing if finished):%s" +msgstr "" + +#: etc/inc/shaper.inc:2909 etc/inc/shaper.inc:2910 etc/inc/shaper.inc:2915 +#: etc/inc/shaper.inc:2983 etc/inc/shaper.inc:3041 +#, php-format +msgid "Bandwidth for schedule %s must be an integer." +msgstr "" + +#: etc/inc/shaper.inc:2915 etc/inc/shaper.inc:2916 etc/inc/shaper.inc:2921 +#: etc/inc/shaper.inc:2989 etc/inc/shaper.inc:3047 +msgid "You need to specify a schedule for every additional entry" +msgstr "" + +#: etc/inc/shaper.inc:2917 etc/inc/shaper.inc:2918 etc/inc/shaper.inc:2923 +#: etc/inc/shaper.inc:2991 etc/inc/shaper.inc:3049 +msgid "If more than one bandwidth configured all schedules need to be selected" +msgstr "" + +#: etc/inc/shaper.inc:2919 etc/inc/shaper.inc:2920 etc/inc/shaper.inc:2925 +#: etc/inc/shaper.inc:2993 etc/inc/shaper.inc:3051 +msgid "At least one bw specification is necessary" +msgstr "" + +#: etc/inc/shaper.inc:3200 etc/inc/shaper.inc:3201 etc/inc/shaper.inc:3208 +#: etc/inc/shaper.inc:3276 etc/inc/shaper.inc:3332 +msgid "add another schedule" +msgstr "" + +#: etc/inc/functions.inc:94 etc/inc/functions.inc:94 +msgid "Acknowledge All Notices" +msgstr "" + +#: etc/inc/functions.inc:95 etc/inc/functions.inc:95 +msgid "Click to Acknowledge" +msgstr "" + +#: etc/inc/functions.inc:113 etc/inc/functions.inc:113 +msgid "unread notice" +msgstr "" + +#: etc/inc/functions.inc:115 etc/inc/functions.inc:115 +msgid "unread notices" +msgstr "" + +#: etc/inc/service-utils.inc:234 etc/inc/service-utils.inc:233 +#: etc/inc/service-utils.inc:250 etc/inc/service-utils.inc:250 +msgid "Router Advertisement Daemon" +msgstr "" + +#: etc/inc/service-utils.inc:313 etc/inc/service-utils.inc:312 +#: etc/inc/service-utils.inc:329 etc/inc/service-utils.inc:329 +msgid "RIP Daemon" +msgstr "" + +#: etc/inc/service-utils.inc:413 etc/inc/service-utils.inc:422 +#: etc/inc/service-utils.inc:412 etc/inc/service-utils.inc:421 +#: etc/inc/service-utils.inc:429 etc/inc/service-utils.inc:439 +#: etc/inc/service-utils.inc:432 etc/inc/service-utils.inc:442 +#: etc/inc/service-utils.inc:432 etc/inc/service-utils.inc:442 +#, php-format +msgid "%s Service is" +msgstr "" + +#: etc/inc/service-utils.inc:447 etc/inc/service-utils.inc:446 +#: etc/inc/service-utils.inc:464 etc/inc/service-utils.inc:467 +#: etc/inc/service-utils.inc:467 +#, php-format +msgid "Restart %sService" +msgstr "" + +#: etc/inc/service-utils.inc:458 etc/inc/service-utils.inc:457 +#: etc/inc/service-utils.inc:475 etc/inc/service-utils.inc:478 +#: etc/inc/service-utils.inc:478 +#, php-format +msgid "Stop %sService" +msgstr "" + +#: etc/inc/service-utils.inc:471 etc/inc/service-utils.inc:470 +#: etc/inc/service-utils.inc:491 etc/inc/service-utils.inc:494 +#: etc/inc/service-utils.inc:494 +#, php-format +msgid "Start %sService" +msgstr "" + +#: etc/inc/filter.inc:2993 etc/inc/filter.inc:3079 etc/inc/filter.inc:3103 +#: etc/inc/filter.inc:3108 etc/inc/filter.inc:3103 +msgid "Removed 15 minute filter reload for Time Based Rules" +msgstr "" + +#: usr/local/www/pkg_mgr.php:193 usr/local/www/pkg_mgr.php:196 +#: usr/local/www/pkg_mgr.php:212 +msgid "Click on package name to access its website." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:276 +#: usr/local/www/diag_logs_settings.php:276 +msgid "Show the applied rule description below or in the firewall log rows." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:278 +#: usr/local/www/diag_logs_settings.php:278 +msgid "" +"Displaying rule descriptions for all lines in the log might affect " +"performance with large rulessets." +msgstr "" + +#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:144 +#: usr/local/www/fbegin.inc:144 +msgid "DHCPv6 Server/RA" +msgstr "" + +#: usr/local/www/fbegin.inc:232 usr/local/www/diag_sockets.php:44 +#: usr/local/www/fbegin.inc:224 usr/local/www/fbegin.inc:224 +#: usr/local/www/diag_sockets.php:44 +msgid "Sockets" +msgstr "" + +#: usr/local/www/fbegin.inc:419 usr/local/www/fbegin.inc:411 +#: usr/local/www/fbegin.inc:411 +msgid "Help for items on this page" +msgstr "" + +#: usr/local/www/system_groupmanager.php:472 +#: usr/local/www/system_groupmanager.php:422 +#: usr/local/www/system_groupmanager.php:422 +msgid "" +"Additional webConfigurator groups can be added here. \n" +"\t\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by " +"users who are members of the group.\n" +"\t\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system " +"defined object.\n" +"\t\t\t\t\t\t\t\t\tSome system object properties can be modified but they " +"cannot be deleted." +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +msgid "or" +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:204 +#: usr/local/www/services_dhcpv6_edit.php:207 +#: usr/local/www/services_dhcpv6_edit.php:207 +msgid "If an IPv6 address is entered, the address must be outside of the pool." +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:206 +#: usr/local/www/services_dhcpv6_edit.php:209 +#: usr/local/www/services_dhcpv6_edit.php:209 +msgid "" +"If no IPv6 address is given, one will be dynamically allocated from the pool." +msgstr "" + +#: usr/local/www/services_router_advertisements.php:118 +#: usr/local/www/services_router_advertisements.php:117 +#: usr/local/www/services_router_advertisements.php:117 +msgid "" +"Subnets are specified in CIDR format. Select the CIDR mask that pertains to " +"each entry. /128 specifies a single IPv6 host; /64 specifies a normal IPv6 " +"network; etc. If no subnets are specified here, the Router Advertisement " +"(RA) Daemon will advertise to the subnet to which the router's interface is " +"assigned." +msgstr "" + +#: usr/local/www/services_router_advertisements.php:149 +#: usr/local/www/services_router_advertisements.php:144 +#: usr/local/www/services_router_advertisements.php:144 +#, php-format +msgid "An invalid subnet or alias was specified. [%s/%s]" +msgstr "" + +#: usr/local/www/services_router_advertisements.php:194 +#: usr/local/www/services_router_advertisements.php:189 +#: usr/local/www/services_router_advertisements.php:189 +msgid "Router advertisements" +msgstr "" + +#: usr/local/www/services_router_advertisements.php:318 +#: usr/local/www/services_router_advertisements.php:313 +#: usr/local/www/services_router_advertisements.php:313 +msgid "RA Subnet(s)" +msgstr "" + +#: usr/local/www/services_router_advertisements.php:384 +#: usr/local/www/services_router_advertisements.php:379 +#: usr/local/www/services_router_advertisements.php:379 +msgid "" +"The RA server can optionally provide a domain search list. Use the semicolon " +"character as seperator" +msgstr "" + +#: usr/local/www/services_router_advertisements.php:392 +#: usr/local/www/services_router_advertisements.php:387 +#: usr/local/www/services_router_advertisements.php:387 +msgid "Use same settings as DHCPv6 server" +msgstr "" + +#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94 +#: usr/local/www/vpn_ipsec_phase2.php:475 +#: usr/local/www/vpn_ipsec_phase1.php:498 usr/local/www/vpn_ipsec.php:148 +#: usr/local/www/vpn_ipsec_phase1.php:519 +#: usr/local/www/vpn_ipsec_phase2.php:497 usr/local/www/vpn_ipsec.php:148 +#: usr/local/www/vpn_ipsec_phase1.php:519 usr/local/www/vpn_ipsec_keys.php:94 +#: usr/local/www/vpn_ipsec_phase2.php:497 +msgid "Pre-Shared Keys" +msgstr "" + +#: usr/local/www/system_usermanager_settings_test.php:78 +#: usr/local/www/system_usermanager_settings_test.php:78 +#, php-format +msgid "Testing %s LDAP settings... One moment please..." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:149 +#: usr/local/www/vpn_ipsec_mobile.php:149 +msgid "A valid split DNS domain list must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:505 +#: usr/local/www/vpn_ipsec_mobile.php:505 +msgid "Split DNS" +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:514 +#: usr/local/www/vpn_ipsec_mobile.php:514 +msgid "" +"Provide a list of split DNS domain names to clients. Enter a comma separated " +"list." +msgstr "" + +#: usr/local/www/vpn_ipsec_mobile.php:515 +#: usr/local/www/vpn_ipsec_mobile.php:515 +msgid "" +"NOTE: If left blank, and a default domain is set, it will be used for this " +"value." +msgstr "" + +#: usr/local/www/firewall_shaper.php:131 +#: usr/local/www/firewall_shaper_vinterface.php:146 +#: usr/local/www/firewall_shaper.php:131 +#: usr/local/www/firewall_shaper_vinterface.php:146 +msgid "Unable to write config.xml (Access Denied?)" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:455 +#: usr/local/www/firewall_rules_edit.php:458 +#: usr/local/www/firewall_rules_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:464 +msgid "" +"Please select a gateway, normaly the interface selected gateway, so the " +"limiters work correctly" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys.php:136 usr/local/www/vpn_ipsec_keys.php:136 +msgid "Do you really want to delete this Pre-Shared Key?" +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:83 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:83 +msgid "A valid domain must be specified after _msdcs." +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:93 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:93 +msgid "An interface IP address must be specified for the DNS query source." +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144 +msgid "Source IP" +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:147 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:147 +msgid "" +"Source IP address for queries to the DNS server for the override domain." +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148 +msgid "Leave blank unless your DNS server is accessed through a VPN tunnel." +msgstr "" + +#: usr/local/www/system_crlmanager.php:401 +#: usr/local/www/system_crlmanager.php:401 +msgid "Edit Imported Certificate Revocation List" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:206 +#: usr/local/www/system_advanced_firewall.php:235 +#: usr/local/www/system_advanced_firewall.php:235 +msgid "" +"expires idle connections quicker. More efficient use of CPU and memory but " +"can drop legitimate idle connections" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:207 +#: usr/local/www/system_advanced_firewall.php:236 +#: usr/local/www/system_advanced_firewall.php:236 +msgid "" +"tries to avoid dropping any legitimate idle connections at the expense of " +"increased memory usage and CPU utilization." +msgstr "" + +#: usr/local/www/vpn_pptp.php:297 usr/local/www/vpn_pptp.php:300 +#: usr/local/www/vpn_pptp.php:300 +msgid "" +"PPTP is no longer considered a secure VPN technology because it relies upon " +"MS-CHAPv2 which has been compromised. If you continue to use PPTP be aware " +"that intercepted traffic can be decrypted by a third party, so it should be " +"considered unencrypted. We advise migrating to another VPN type such as " +"OpenVPN or IPsec.

    Read More" +msgstr "" + +#: usr/local/www/status_ntpd.php:185 usr/local/www/status_ntpd.php:191 +#: usr/local/www/status_ntpd.php:191 +msgid "Clock Latitude" +msgstr "" + +#: usr/local/www/status_ntpd.php:186 usr/local/www/status_ntpd.php:192 +#: usr/local/www/status_ntpd.php:192 +msgid "Clock Longitude" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:77 +#: usr/local/www/system_advanced_misc.php:80 +#: usr/local/www/system_advanced_misc.php:84 +#: usr/local/www/system_advanced_misc.php:84 +msgid "AMD Geode LX Security Block" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:78 +#: usr/local/www/system_advanced_misc.php:81 +#: usr/local/www/system_advanced_misc.php:85 +#: usr/local/www/system_advanced_misc.php:85 +msgid "AES-NI CPU-based Acceleration" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:80 +#: usr/local/www/system_advanced_misc.php:83 +#: usr/local/www/system_advanced_misc.php:87 +#: usr/local/www/system_advanced_misc.php:87 +msgid "Intel Core* CPU on-die thermal sensor" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:81 +#: usr/local/www/system_advanced_misc.php:84 +#: usr/local/www/system_advanced_misc.php:88 +#: usr/local/www/system_advanced_misc.php:88 +msgid "AMD K8, K10 and K11 CPU on-die thermal sensor" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:92 +#: usr/local/www/system_advanced_misc.php:95 +#: usr/local/www/system_advanced_misc.php:99 +#: usr/local/www/system_advanced_misc.php:99 +msgid "Please select a valid Cryptographic Accelerator." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:95 +#: usr/local/www/system_advanced_misc.php:98 +#: usr/local/www/system_advanced_misc.php:102 +#: usr/local/www/system_advanced_misc.php:102 +msgid "Please select a valid Thermal Hardware Sensor." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:380 +#: usr/local/www/system_advanced_misc.php:392 +#: usr/local/www/system_advanced_misc.php:439 +#: usr/local/www/system_advanced_misc.php:439 +msgid "Cryptographic Hardware Acceleration" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:395 +#: usr/local/www/system_advanced_misc.php:442 +#: usr/local/www/system_advanced_misc.php:442 +msgid "Cryptographic Hardware" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:392 +#: usr/local/www/system_advanced_misc.php:404 +#: usr/local/www/system_advanced_misc.php:451 +#: usr/local/www/system_advanced_misc.php:451 +msgid "" +"A cryptographic accelerator module will use hardware support to speed up " +"some cryptographic functions on systems which have the chip. Do not enable " +"this option if you have a Hifn cryptographic acceleration card, as this will " +"take precedence and the Hifn card will not be used. Acceleration should be " +"automatic for IPsec when using a cipher supported by your chip, such as " +"AES-128. OpenVPN should be set for AES-128-CBC and have cryptodev enabled " +"for hardware acceleration." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:400 +#: usr/local/www/system_advanced_misc.php:412 +#: usr/local/www/system_advanced_misc.php:459 +#: usr/local/www/system_advanced_misc.php:459 +msgid "" +"If you do not have a crypto chip in your system, this option will have no " +"effect. To unload the selected module, set this option to 'none' and then " +"reboot." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:420 +#: usr/local/www/system_advanced_misc.php:423 +#: usr/local/www/system_advanced_misc.php:467 +#: usr/local/www/system_advanced_misc.php:470 +#: usr/local/www/system_advanced_misc.php:467 +#: usr/local/www/system_advanced_misc.php:470 +msgid "Thermal Sensors" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:426 +#: usr/local/www/system_advanced_misc.php:473 +#: usr/local/www/system_advanced_misc.php:473 +msgid "None/ACPI" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:420 +#: usr/local/www/system_advanced_misc.php:432 +#: usr/local/www/system_advanced_misc.php:479 +#: usr/local/www/system_advanced_misc.php:479 +msgid "" +"If you have a supported CPU, selecting a themal sensor will load the " +"appropriate driver to read its temperature. Setting this to 'None' will " +"attempt to read the temperature from an ACPI-compliant motherboard sensor " +"instead, if one is present." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:424 +#: usr/local/www/system_advanced_misc.php:436 +#: usr/local/www/system_advanced_misc.php:483 +#: usr/local/www/system_advanced_misc.php:483 +msgid "" +"If you do not have a supported thermal sensor chip in your system, this " +"option will have no effect. To unload the selected module, set this option " +"to 'none' and then reboot." +msgstr "" + +#: usr/local/www/services_captiveportal.php:173 +#: usr/local/www/services_captiveportal.php:175 +#: usr/local/www/services_captiveportal.php:175 +msgid "Certificate must be specified for HTTPS login." +msgstr "" + +#: usr/local/www/services_captiveportal.php:863 +#: usr/local/www/services_captiveportal.php:865 +#: usr/local/www/services_captiveportal.php:881 +#: usr/local/www/services_captiveportal.php:881 +msgid "" +"If enabled, the username and password will be transmitted over an HTTPS " +"connection to protect against eavesdroppers. A server name and certificate " +"must also be specified below." +msgstr "" + +#: usr/local/www/services_captiveportal.php:886 +#: usr/local/www/services_captiveportal.php:888 +#: usr/local/www/services_captiveportal.php:904 +#: usr/local/www/services_captiveportal.php:904 +msgid "No Certificates defined." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:205 +#: usr/local/www/system_gateways_edit.php:235 +#: usr/local/www/system_gateways_edit.php:235 +msgid "The low latency threshold needs to be a numeric value." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:208 +#: usr/local/www/system_gateways_edit.php:238 +#: usr/local/www/system_gateways_edit.php:238 +msgid "The low latency threshold needs to be positive." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:215 +#: usr/local/www/system_gateways_edit.php:245 +#: usr/local/www/system_gateways_edit.php:245 +msgid "The high latency threshold needs to be a numeric value." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:218 +#: usr/local/www/system_gateways_edit.php:248 +#: usr/local/www/system_gateways_edit.php:248 +msgid "The high latency threshold needs to be positive." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:225 +#: usr/local/www/system_gateways_edit.php:255 +#: usr/local/www/system_gateways_edit.php:255 +msgid "The low Packet Loss threshold needs to be a numeric value." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:228 +#: usr/local/www/system_gateways_edit.php:258 +#: usr/local/www/system_gateways_edit.php:258 +msgid "The low Packet Loss threshold needs to be positive." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:231 +#: usr/local/www/system_gateways_edit.php:261 +#: usr/local/www/system_gateways_edit.php:261 +msgid "The low Packet Loss threshold needs to be less than 100." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:238 +#: usr/local/www/system_gateways_edit.php:268 +#: usr/local/www/system_gateways_edit.php:268 +msgid "The high Packet Loss threshold needs to be a numeric value." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:241 +#: usr/local/www/system_gateways_edit.php:271 +#: usr/local/www/system_gateways_edit.php:271 +msgid "The high Packet Loss threshold needs to be positive." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:244 +#: usr/local/www/system_gateways_edit.php:274 +#: usr/local/www/system_gateways_edit.php:274 +msgid "The high Packet Loss threshold needs to be 100 or less." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:252 +#: usr/local/www/system_gateways_edit.php:282 +#: usr/local/www/system_gateways_edit.php:282 +msgid "" +"The high latency threshold needs to be higher than the low latency threshold" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:275 +#: usr/local/www/system_gateways_edit.php:305 +#: usr/local/www/system_gateways_edit.php:305 +msgid "" +"The high Packet Loss threshold needs to be higher than the low Packet Loss " +"threshold" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:297 +#: usr/local/www/system_gateways_edit.php:327 +#: usr/local/www/system_gateways_edit.php:327 +msgid "The frequency probe interval needs to be a numeric value." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:300 +#: usr/local/www/system_gateways_edit.php:330 +#: usr/local/www/system_gateways_edit.php:330 +msgid "The frequency probe interval needs to be positive." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:307 +#: usr/local/www/system_gateways_edit.php:337 +#: usr/local/www/system_gateways_edit.php:337 +msgid "The down time setting needs to be a numeric value." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:310 +#: usr/local/www/system_gateways_edit.php:340 +#: usr/local/www/system_gateways_edit.php:340 +msgid "The down time setting needs to be positive." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:318 +#: usr/local/www/system_gateways_edit.php:348 +#: usr/local/www/system_gateways_edit.php:348 +msgid "" +"The Frequency Probe interval needs to be less than the down time setting." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:611 +#: usr/local/www/system_gateways_edit.php:615 +#: usr/local/www/system_gateways_edit.php:617 +#: usr/local/www/system_gateways_edit.php:647 +msgid "" +"NOTE: The Frequency Probe interval must be less than the Down time, " +"otherwise the gateway will seem to go down then come up again at the next " +"probe." +msgstr "" + +#: usr/local/www/shortcuts.inc:96 usr/local/www/shortcuts.inc:96 +msgid "Main page for this section" +msgstr "" + +#: usr/local/www/shortcuts.inc:120 usr/local/www/shortcuts.inc:120 +msgid "Status of items on this page" +msgstr "" + +#: usr/local/www/shortcuts.inc:127 usr/local/www/shortcuts.inc:127 +msgid "Log entries for items on this page" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1102 +#: usr/local/www/vpn_openvpn_server.php:1129 +#: usr/local/www/vpn_openvpn_server.php:1129 +msgid "" +"This is the IPv6 virtual network used for private communications between " +"this server and client hosts expressed using CIDR (eg. fe80::/64). The first " +"network address will be assigned to the server virtual interface. The " +"remaining network addresses can optionally be assigned to connecting " +"clients. (see Address Pool)" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1152 +#: usr/local/www/vpn_openvpn_server.php:1179 +#: usr/local/www/vpn_openvpn_server.php:1179 +msgid "" +"The interface to which this tap instance will be bridged. This is not done " +"automatically. You must assign this interface and create the bridge " +"separately. This setting controls which existing IP address and subnet mask " +"are used by OpenVPN for the bridge. Setting this to 'none' will cause the " +"Server Bridge DHCP settings below to be ignored." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1165 +#: usr/local/www/vpn_openvpn_server.php:1192 +#: usr/local/www/vpn_openvpn_server.php:1192 +msgid "" +"When using tap mode as a multi-point server, you may optionally supply a " +"DHCP range to use on the interface to which this tap instance is bridged. If " +"these settings are left blank, DHCP will be passed through to the LAN, and " +"the interface setting above will be ignored." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1225 +#: usr/local/www/vpn_openvpn_client.php:799 +msgid "IPv4 Remote Network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1229 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote " +"LAN here. You may leave this blank if you don't want a site-to-site VPN" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1239 +#: usr/local/www/vpn_openvpn_client.php:813 +msgid "IPv6 Remote Network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1243 +msgid "" +"This is an IPv6 network that will be routed through the tunnel, so that a " +"site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the " +"remote LAN here. You may leave this blank if you don't want a site-to-site " +"VPN" +msgstr "" + +#: usr/local/www/services_dhcp.php:293 usr/local/www/services_dhcp.php:274 +#: usr/local/www/services_dhcp.php:294 usr/local/www/services_dhcp.php:294 +msgid "" +"If you specify a mac allow list, it must contain only valid partial MAC " +"addresses." +msgstr "" + +#: usr/local/www/services_dhcp.php:295 usr/local/www/services_dhcp.php:276 +#: usr/local/www/services_dhcp.php:296 usr/local/www/services_dhcp.php:296 +msgid "" +"If you specify a mac deny list, it must contain only valid partial MAC " +"addresses." +msgstr "" + +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcp.php:701 +#: usr/local/www/services_dhcp.php:721 usr/local/www/services_dhcp.php:721 +msgid "" +"Editing Pool-Specific Options. To return to the Interface, click its tab " +"above." +msgstr "" + +#: usr/local/www/services_dhcp.php:775 usr/local/www/services_dhcp.php:785 +#: usr/local/www/services_dhcp.php:805 usr/local/www/services_dhcp.php:805 +msgid "Additional Pools" +msgstr "" + +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:787 +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcp.php:807 +msgid "" +"If you need additional pools of addresses inside of this subnet outside the " +"above Range, they may be specified here." +msgstr "" + +#: usr/local/www/services_dhcp.php:780 usr/local/www/services_dhcp.php:790 +#: usr/local/www/services_dhcp.php:810 usr/local/www/services_dhcp.php:810 +msgid "Pool Start" +msgstr "" + +#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcp.php:791 +#: usr/local/www/services_dhcp.php:811 usr/local/www/services_dhcp.php:811 +msgid "Pool End" +msgstr "" + +#: usr/local/www/services_dhcp.php:805 usr/local/www/services_dhcp.php:819 +#: usr/local/www/services_dhcp.php:839 usr/local/www/services_dhcp.php:839 +msgid "Do you really want to delete this pool?" +msgstr "" + +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:971 +#: usr/local/www/services_dhcp.php:991 usr/local/www/services_dhcp.php:991 +msgid "MAC Address Control" +msgstr "" + +#: usr/local/www/services_dhcp.php:961 usr/local/www/services_dhcp.php:974 +#: usr/local/www/services_dhcp.php:994 usr/local/www/services_dhcp.php:994 +msgid "Show MAC Address Control" +msgstr "" + +#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcp.php:978 +#: usr/local/www/services_dhcp.php:998 usr/local/www/services_dhcp.php:998 +msgid "" +"Enter a list of partial MAC addresses to allow, comma separated, no spaces, " +"such as " +msgstr "" + +#: usr/local/www/services_dhcp.php:967 usr/local/www/services_dhcp.php:980 +#: usr/local/www/services_dhcp.php:1000 usr/local/www/services_dhcp.php:1000 +msgid "" +"Enter a list of partial MAC addresses to deny access, comma separated, no " +"spaces, such as " +msgstr "" + +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +msgid "You cannot use spaces or slashes in the 'name' field." +msgstr "" + +#: usr/local/www/guiconfig.inc:1009 usr/local/www/guiconfig.inc:1024 +#: usr/local/www/guiconfig.inc:1021 usr/local/www/guiconfig.inc:1021 +msgid "move mouse out this alias to hide" +msgstr "" + +#: usr/local/www/guiconfig.inc:1066 usr/local/www/guiconfig.inc:1081 +#: usr/local/www/guiconfig.inc:1078 usr/local/www/guiconfig.inc:1078 +msgid "edit this alias" +msgstr "" + +#: usr/local/www/guiconfig.inc:1077 usr/local/www/guiconfig.inc:1089 +#: usr/local/www/guiconfig.inc:1092 usr/local/www/guiconfig.inc:1104 +#: usr/local/www/guiconfig.inc:1101 usr/local/www/guiconfig.inc:1089 +#: usr/local/www/guiconfig.inc:1101 +msgid "loading..." +msgstr "" + +#: usr/local/www/system_firmware_settings.php:175 +#: usr/local/www/system_firmware_settings.php:184 +#: usr/local/www/system_firmware_settings.php:186 +#: usr/local/www/system_firmware_settings.php:186 +msgid "Dashboard check" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:179 +#: usr/local/www/system_firmware_settings.php:188 +#: usr/local/www/system_firmware_settings.php:190 +#: usr/local/www/system_firmware_settings.php:190 +msgid "Disable the automatic dashboard auto-update check." +msgstr "" + +#: usr/local/www/services_ntpd.php:119 usr/local/www/services_ntpd.php:119 +msgid "Interfaces without an IP address will not be shown." +msgstr "" + +#: usr/local/www/services_ntpd.php:121 usr/local/www/services_ntpd.php:121 +msgid "Selecting no interfaces will listen on all interfaces with a wildcard." +msgstr "" + +#: usr/local/www/services_ntpd.php:122 usr/local/www/services_ntpd.php:122 +msgid "" +"Selecting all interfaces will explicitly listen on only the interfaces/IPs " +"specified." +msgstr "" + +#: usr/local/www/services_ntpd.php:140 usr/local/www/services_ntpd.php:140 +msgid "The GPS must provide NMEA format output!" +msgstr "" + +#: usr/local/www/services_ntpd.php:142 usr/local/www/services_ntpd.php:142 +msgid "" +"All serial ports are listed, be sure to pick only the port with the GPS " +"attached." +msgstr "" + +#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144 +msgid "It is best to configure at least 2 servers under" +msgstr "" + +#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144 +msgid "System > General" +msgstr "" + +#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144 +msgid "" +"to avoid loss of sync if the GPS data is not valid over time. Otherwise ntpd " +"may only use values from the unsynchronized local clock when providing time " +"to clients." +msgstr "" + +#: usr/local/www/firewall_aliases.php:177 +#: usr/local/www/firewall_aliases.php:175 +#: usr/local/www/firewall_aliases.php:175 +msgid "Ports" +msgstr "" + +#: usr/local/www/firewall_aliases.php:178 +#: usr/local/www/firewall_aliases.php:176 +#: usr/local/www/firewall_aliases.php:176 +msgid "Urls" +msgstr "" + +#: usr/local/www/firewall_aliases.php:195 +#: usr/local/www/firewall_aliases.php:272 +#: usr/local/www/firewall_aliases.php:274 +#: usr/local/www/firewall_aliases.php:275 +#: usr/local/www/firewall_aliases.php:195 +#: usr/local/www/firewall_aliases.php:275 +msgid "Add a new alias" +msgstr "" + +#: usr/local/www/firewall_aliases.php:255 +#: usr/local/www/firewall_aliases.php:256 +#: usr/local/www/firewall_aliases.php:257 +#: usr/local/www/firewall_aliases.php:257 +msgid "Edit alias" +msgstr "" + +#: usr/local/www/firewall_aliases.php:256 +#: usr/local/www/firewall_aliases.php:257 +#: usr/local/www/firewall_aliases.php:258 +#: usr/local/www/firewall_aliases.php:258 +msgid "Delete alias" +msgstr "" + +#: usr/local/www/services_captiveportal_zones_edit.php:64 +#: usr/local/www/services_captiveportal_zones_edit.php:64 +msgid "The zone name can only contain letters, digits, and underscores (_)." +msgstr "" + +#: usr/local/www/services_captiveportal_zones_edit.php:105 +#: usr/local/www/services_captiveportal_zones_edit.php:101 +#: usr/local/www/services_captiveportal_zones_edit.php:101 +msgid "Zone name. Can only contain letters, digits, and underscores (_)." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:81 +#: usr/local/www/diag_packet_capture.php:81 +msgid "Invalid interface." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:84 +#: usr/local/www/diag_packet_capture.php:84 +msgid "Invalid address family." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:87 +#: usr/local/www/diag_packet_capture.php:87 +msgid "Invalid protocol." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:92 +#: usr/local/www/diag_packet_capture.php:92 +#, php-format +msgid "A valid IP address or CIDR block must be specified. [%s]" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:97 +#: usr/local/www/diag_packet_capture.php:97 +msgid "Invalid value specified for port." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:104 +#: usr/local/www/diag_packet_capture.php:104 +msgid "Invalid value specified for packet length." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:111 +#: usr/local/www/diag_packet_capture.php:111 +msgid "Invalid value specified for packet count." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:148 +#: usr/local/www/vpn_ipsec_phase2.php:152 +#: usr/local/www/vpn_ipsec_phase2.php:152 +msgid "A valid NAT local network bit count must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:150 +#: usr/local/www/vpn_ipsec_phase2.php:154 +#: usr/local/www/vpn_ipsec_phase2.php:154 +msgid "" +"You cannot configure a network type address for NAT while only an address " +"type is selected for local source." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:153 +#: usr/local/www/vpn_ipsec_phase2.php:157 +#: usr/local/www/vpn_ipsec_phase2.php:157 +msgid "A valid NAT local network IP address must be specified." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:548 +#: usr/local/www/vpn_ipsec_phase2.php:569 +#: usr/local/www/vpn_ipsec_phase2.php:569 +msgid "" +"In case you need NAT/BINAT on this network specify the address to be " +"translated" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys_edit.php:114 +#: usr/local/www/vpn_ipsec_keys_edit.php:114 +msgid "VPN: IPsec: Edit Pre-Shared Key" +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:227 +#: usr/local/www/services_dhcp_edit.php:355 +#: usr/local/www/services_dhcp_edit.php:355 +msgid "If an IPv4 address is entered, the address must be outside of the pool." +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:357 +#: usr/local/www/services_dhcp_edit.php:357 +msgid "" +"If no IPv4 address is given, one will be dynamically allocated from the pool." +msgstr "" + +#: usr/local/www/interfaces.php:2460 usr/local/www/interfaces.php:2490 +#: usr/local/www/interfaces.php:2536 usr/local/www/interfaces.php:2525 +#: usr/local/www/interfaces.php:2525 +msgid "WPA Pre-Shared Key" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:789 +#: usr/local/www/vpn_openvpn_client.php:808 +#: usr/local/www/vpn_openvpn_client.php:808 +msgid "" +"This is the IPv6 virtual network used for private communications between " +"this client and the server expressed using CIDR (eg. fe80::/64). The first " +"network address is assumed to be the server address and the second network " +"address will be assigned to the client virtual interface" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:803 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote " +"LAN here. You may leave this blank to only communicate with other clients" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:817 +msgid "" +"This is an IPv6 network that will be routed through the tunnel, so that a " +"site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the " +"remote LAN here. You may leave this blank to only communicate with other " +"clients" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:301 usr/local/www/vpn_l2tp.php:304 +#: usr/local/www/vpn_l2tp.php:304 +msgid "Enable L2TP server" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:322 usr/local/www/vpn_l2tp.php:325 +#: usr/local/www/vpn_l2tp.php:325 +msgid "Server Address" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_l2tp.php:337 +#: usr/local/www/vpn_l2tp.php:337 +msgid "Remote Address Range" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:384 usr/local/www/vpn_l2tp.php:387 +#: usr/local/www/vpn_l2tp.php:387 +msgid "Authentication Type" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:429 usr/local/www/vpn_l2tp.php:432 +#: usr/local/www/vpn_l2tp.php:432 +msgid "RADIUS Shared Secret" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:436 usr/local/www/vpn_l2tp.php:439 +#: usr/local/www/vpn_l2tp.php:439 +msgid "RADIUS Issued IP's" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:126 +#: usr/local/www/firewall_virtual_ip_edit.php:128 +#: usr/local/www/firewall_virtual_ip_edit.php:128 +msgid "The /31 and /32 subnet mask are invalid for CARP IPs." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:132 +#: usr/local/www/firewall_virtual_ip_edit.php:132 +msgid "The /127 and /128 subnet mask are invalid for CARP IPs." +msgstr "" + +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +#: usr/local/www/interfaces_gif.php:141 +msgid "" +"If you are using a GIF tunnel to connect to a Hurricane Electric (he.net) " +"Tunnel Broker on a WAN with a dynamic IP, you may want to add a" +msgstr "" + +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +#: usr/local/www/interfaces_gif.php:141 +msgid "HE.net Tunnelbroker type DynDNS Entry" +msgstr "" + +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +#: usr/local/www/interfaces_gif.php:141 +msgid "to keep your tunnel functional when your IP changes." +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:102 +#: usr/local/www/widgets/widgets/system_information.widget.php:103 +#: usr/local/www/widgets/widgets/system_information.widget.php:101 +#: usr/local/www/widgets/widgets/system_information.widget.php:103 +msgid "Obtaining update status" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:680 +#: usr/local/www/vpn_ipsec_phase1.php:701 +#: usr/local/www/vpn_ipsec_phase1.php:701 +msgid "Input your Pre-Shared Key string" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:179 usr/local/www/diag_nanobsd.php:170 +#: usr/local/www/diag_nanobsd.php:170 +msgid "Media Read/Write Status" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:183 +#: usr/local/www/diag_nanobsd.php:183 +msgid "Read/Write" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:194 usr/local/www/diag_nanobsd.php:185 +#: usr/local/www/diag_nanobsd.php:185 +msgid "Switch to Read-Only" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:187 +#: usr/local/www/diag_nanobsd.php:187 +msgid "Read-Only" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:198 usr/local/www/diag_nanobsd.php:189 +#: usr/local/www/diag_nanobsd.php:189 +msgid "Switch to Read/Write" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:201 usr/local/www/diag_nanobsd.php:192 +#: usr/local/www/diag_nanobsd.php:192 +msgid "" +"NOTE: This setting is only temporary, and can be switched dynamically in the " +"background." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:208 usr/local/www/diag_nanobsd.php:199 +#: usr/local/www/diag_nanobsd.php:199 +msgid "Keep media mounted read/write at all times." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:821 usr/local/www/services_dhcpv6.php:838 +#: usr/local/www/services_dhcpv6.php:838 +msgid "Status: DHCPv6 leases" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:307 +#: usr/local/www/diag_logs_filter.php:307 +msgid "Rule" +msgstr "" + +#: usr/local/www/system_firmware.php:55 usr/local/www/system_firmware.php:55 +msgid "Standard Kernel" +msgstr "" + +#: usr/local/www/system_firmware.php:56 usr/local/www/system_firmware.php:56 +msgid "Embedded Kernel" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:88 usr/local/www/vpn_pptp.php:96 +#: usr/local/www/vpn_l2tp.php:88 usr/local/www/vpn_pptp.php:96 +msgid "" +"'Server address' parameter should NOT be set to any IP address currently in " +"use on this firewall." +msgstr "" + +#: usr/local/www/system_camanager.php:220 +#: usr/local/www/system_certmanager.php:299 +#: usr/local/www/system_certmanager.php:301 +#: usr/local/www/system_camanager.php:220 +#: usr/local/www/system_certmanager.php:299 +#: usr/local/www/system_certmanager.php:301 +msgid "Please select a valid Key Length." +msgstr "" + +#: usr/local/www/system_camanager.php:222 +#: usr/local/www/system_certmanager.php:303 +#: usr/local/www/system_camanager.php:222 +#: usr/local/www/system_certmanager.php:303 +msgid "Please select a valid Digest Algorithm." +msgstr "" + +#: usr/local/www/system_camanager.php:477 +#: usr/local/www/system_certmanager.php:690 +#: usr/local/www/system_certmanager.php:863 +#: usr/local/www/system_certmanager.php:691 +#: usr/local/www/system_certmanager.php:867 +#: usr/local/www/system_camanager.php:477 +#: usr/local/www/system_certmanager.php:691 +#: usr/local/www/system_certmanager.php:867 +msgid "Digest Algorithm" +msgstr "" + +#: usr/local/www/system_camanager.php:489 +#: usr/local/www/system_certmanager.php:702 +#: usr/local/www/system_certmanager.php:875 +#: usr/local/www/system_certmanager.php:703 +#: usr/local/www/system_certmanager.php:879 +#: usr/local/www/system_camanager.php:489 +#: usr/local/www/system_certmanager.php:703 +#: usr/local/www/system_certmanager.php:879 +msgid "" +"NOTE: It is recommended to use an algorithm stronger than SHA1 when possible." +msgstr "" + +#: usr/local/www/system_camanager.php:653 +#: usr/local/www/system_certmanager.php:1127 +#: usr/local/www/system_certmanager.php:1131 +#: usr/local/www/system_camanager.php:653 +#: usr/local/www/system_certmanager.php:1131 +msgid "Valid From" +msgstr "" + +#: usr/local/www/system_camanager.php:658 +#: usr/local/www/system_certmanager.php:1132 +#: usr/local/www/system_certmanager.php:1136 +#: usr/local/www/system_camanager.php:658 +#: usr/local/www/system_certmanager.php:1136 +msgid "Valid Until" +msgstr "" + +#: usr/local/www/services_captiveportal_ip_edit.php:107 +#: usr/local/www/services_captiveportal_ip_edit.php:107 +msgid "A valid subnet mask must be specified" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:160 +#: usr/local/www/vpn_openvpn_server.php:213 +#: usr/local/www/vpn_openvpn_client.php:160 +#: usr/local/www/vpn_openvpn_server.php:213 +msgid "" +"Protocol and IP address families do not match. You cannot select an IPv6 " +"protocol and an IPv4 IP address." +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:162 +#: usr/local/www/vpn_openvpn_server.php:215 +#: usr/local/www/vpn_openvpn_client.php:162 +#: usr/local/www/vpn_openvpn_server.php:215 +msgid "" +"Protocol and IP address families do not match. You cannot select an IPv4 " +"protocol and an IPv6 IP address." +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:164 +#: usr/local/www/vpn_openvpn_server.php:217 +#: usr/local/www/vpn_openvpn_client.php:164 +#: usr/local/www/vpn_openvpn_server.php:217 +msgid "" +"An IPv4 protocol was selected, but the selected interface has no IPv4 " +"address." +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:166 +#: usr/local/www/vpn_openvpn_server.php:219 +#: usr/local/www/vpn_openvpn_client.php:166 +#: usr/local/www/vpn_openvpn_server.php:219 +msgid "" +"An IPv6 protocol was selected, but the selected interface has no IPv6 " +"address." +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:818 +#: usr/local/www/vpn_openvpn_server.php:1252 +#: usr/local/www/vpn_openvpn_client.php:818 +#: usr/local/www/vpn_openvpn_server.php:1252 +msgid "IPv4 Remote Network/s" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:822 +#: usr/local/www/vpn_openvpn_client.php:822 +msgid "" +"These are the IPv4 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more CIDR ranges. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank to only communicate with other clients" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:832 +#: usr/local/www/vpn_openvpn_server.php:1266 +#: usr/local/www/vpn_openvpn_client.php:832 +#: usr/local/www/vpn_openvpn_server.php:1266 +msgid "IPv6 Remote Network/s" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:836 +#: usr/local/www/vpn_openvpn_client.php:836 +msgid "" +"These are the IPv6 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank to only communicate with other clients" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:909 +#: usr/local/www/vpn_openvpn_client.php:909 +msgid "EXAMPLE:" +msgstr "" + +#: usr/local/www/status_openvpn.php:201 usr/local/www/status_openvpn.php:211 +#: usr/local/www/status_openvpn.php:211 +msgid "Show Routing Table" +msgstr "" + +#: usr/local/www/status_openvpn.php:201 usr/local/www/status_openvpn.php:211 +#: usr/local/www/status_openvpn.php:211 +msgid "Display OpenVPN's internal routing table for this server." +msgstr "" + +#: usr/local/www/status_openvpn.php:207 usr/local/www/status_openvpn.php:217 +#: usr/local/www/status_openvpn.php:217 +msgid "Routing Table" +msgstr "" + +#: usr/local/www/status_openvpn.php:216 usr/local/www/status_openvpn.php:226 +#: usr/local/www/status_openvpn.php:226 +msgid "Target Network" +msgstr "" + +#: usr/local/www/status_openvpn.php:217 usr/local/www/status_openvpn.php:227 +#: usr/local/www/status_openvpn.php:227 +msgid "Last Used" +msgstr "" + +#: usr/local/www/status_openvpn.php:239 usr/local/www/status_openvpn.php:249 +#: usr/local/www/status_openvpn.php:249 +msgid "" +"An IP address followed by C indicates a host currently connected through the " +"VPN." +msgstr "" + +#: usr/local/www/diag_testport.php:49 usr/local/www/diag_testport.php:114 +#: usr/local/www/fbegin.inc:218 usr/local/www/diag_testport.php:49 +#: usr/local/www/diag_testport.php:114 usr/local/www/fbegin.inc:218 +msgid "Test Port" +msgstr "" + +#: usr/local/www/diag_testport.php:64 usr/local/www/diag_testport.php:64 +msgid "Please enter a valid IP or hostname." +msgstr "" + +#: usr/local/www/diag_testport.php:68 usr/local/www/diag_testport.php:68 +msgid "Please enter a valid port number." +msgstr "" + +#: usr/local/www/diag_testport.php:72 usr/local/www/diag_testport.php:72 +msgid "Please enter a valid source port number, or leave the field blank." +msgstr "" + +#: usr/local/www/diag_testport.php:76 usr/local/www/diag_testport.php:76 +msgid "You cannot connect to an IPv4 address using IPv6." +msgstr "" + +#: usr/local/www/diag_testport.php:79 usr/local/www/diag_testport.php:79 +msgid "You cannot connect to an IPv6 address using IPv4." +msgstr "" + +#: usr/local/www/diag_testport.php:106 usr/local/www/diag_testport.php:106 +msgid "" +"This page allows you to perform a simple TCP connection test to determine if " +"a host is up and accepting connections on a given port. This test does not " +"function for UDP since there is no way to reliably determine if a UDP port " +"accepts connections in this manner." +msgstr "" + +#: usr/local/www/diag_testport.php:108 usr/local/www/diag_testport.php:108 +msgid "" +"No data is transmitted to the remote host during this test, it will only " +"attempt to open a connection and optionally display the data sent back from " +"the server." +msgstr "" + +#: usr/local/www/diag_testport.php:132 usr/local/www/diag_testport.php:132 +msgid "This should typically be left blank." +msgstr "" + +#: usr/local/www/diag_testport.php:136 usr/local/www/diag_testport.php:136 +msgid "Show Remote Text" +msgstr "" + +#: usr/local/www/diag_testport.php:139 usr/local/www/diag_testport.php:139 +msgid "" +"Shows the text given by the server when connecting to the port. Will take " +"10+ seconds to display if checked." +msgstr "" + +#: usr/local/www/diag_testport.php:159 usr/local/www/diag_testport.php:161 +#: usr/local/www/diag_traceroute.php:104 usr/local/www/diag_ping.php:102 +#: usr/local/www/diag_testport.php:161 usr/local/www/diag_traceroute.php:104 +#: usr/local/www/diag_ping.php:102 +msgid "IP Protocol" +msgstr "" + +#: usr/local/www/diag_testport.php:166 usr/local/www/diag_testport.php:168 +#: usr/local/www/diag_testport.php:168 +msgid "IPv4" +msgstr "" + +#: usr/local/www/diag_testport.php:169 usr/local/www/diag_testport.php:171 +#: usr/local/www/diag_testport.php:171 +msgid "IPv6" +msgstr "" + +#: usr/local/www/diag_testport.php:173 usr/local/www/diag_testport.php:175 +#: usr/local/www/diag_testport.php:175 +msgid "" +"If you force IPv4 or IPv6 and use a hostname that does not contain a result " +"using that protocol, it will result in an error. For example if you force " +"IPv4 and use a hostname that only returns an AAAA IPv6 IP address, it will " +"not work." +msgstr "" + +#: usr/local/www/diag_testport.php:186 usr/local/www/diag_testport.php:188 +#: usr/local/www/diag_testport.php:188 +msgid "Port Test Results" +msgstr "" + +#: usr/local/www/diag_testport.php:246 usr/local/www/diag_testport.php:248 +#: usr/local/www/diag_testport.php:248 +msgid "" +"No output received, or connection failed. Try with \"Show Remote Text\" " +"unchecked first." +msgstr "" + +#: usr/local/www/diag_testport.php:248 usr/local/www/diag_testport.php:250 +#: usr/local/www/diag_testport.php:250 +msgid "Connection failed (Refused/Timeout)" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1295 +#: usr/local/www/firewall_nat_edit.php:780 +#: usr/local/www/firewall_nat_out_edit.php:647 +#: usr/local/www/firewall_rules_edit.php:1302 +#: usr/local/www/firewall_nat_edit.php:792 +#: usr/local/www/firewall_nat_out_edit.php:659 +#: usr/local/www/firewall_rules_edit.php:1301 +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_rules_edit.php:1301 +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_nat_out_edit.php:659 +msgid "" +"Hint: This prevents the rule on Master from automatically syncing to other " +"CARP members. This does NOT prevent the rule from being overwritten on Slave." +msgstr "" + +#: usr/local/www/interfaces_qinq.php:68 usr/local/www/interfaces_qinq.php:68 +msgid "QinQ interface does not exist" +msgstr "" + +#: usr/local/www/interfaces_vlan_edit.php:84 +#: usr/local/www/interfaces_vlan_edit.php:84 +msgid "Interface supplied as parent is invalid" +msgstr "" + +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_firmware_settings.php:153 +#: usr/local/www/system_firmware_settings.php:153 +#, php-format +msgid "" +"Entries denoted by \"Current architecture\" match the architecture of your " +"current installation, such as %s. Changing architectures during an upgrade " +"is not recommended, and may require a manual reboot after the update " +"completes." +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:95 +#: usr/local/www/interfaces_lagg_edit.php:98 +#: usr/local/www/interfaces_lagg_edit.php:95 +#: usr/local/www/interfaces_lagg_edit.php:98 +msgid "Interface supplied as member is invalid" +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:101 +#: usr/local/www/interfaces_lagg_edit.php:101 +msgid "Protocol supplied is invalid" +msgstr "" + +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_captiveportal_expire.php:73 +#: usr/local/www/status_captiveportal_vouchers.php:112 +#: usr/local/www/status_captiveportal.php:110 +#: usr/local/www/status_captiveportal_test.php:75 +#: usr/local/www/status_captiveportal_voucher_rolls.php:79 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_captiveportal_expire.php:73 +#: usr/local/www/status_captiveportal_vouchers.php:112 +#: usr/local/www/status_captiveportal.php:110 +#: usr/local/www/status_captiveportal_test.php:75 +#: usr/local/www/status_captiveportal_voucher_rolls.php:79 +msgid "Expire Vouchers" +msgstr "" + +#: usr/local/www/status_captiveportal_expire.php:86 +#: usr/local/www/status_captiveportal_expire.php:86 +msgid "" +"Enter multiple vouchers separated by space or newline. All valid vouchers " +"will be marked as expired" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:835 +#: usr/local/www/firewall_nat_edit.php:847 +#: usr/local/www/firewall_nat_edit.php:848 +#: usr/local/www/firewall_nat_edit.php:848 +msgid "" +"NOTE: The \"pass\" selection does not work properly with Multi-WAN. It will " +"only work on an interface containing the default gateway." +msgstr "" + +#: usr/local/www/interfaces_vlan.php:71 usr/local/www/interfaces_vlan.php:71 +msgid "Invalid VLAN interface." +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:87 +#: usr/local/www/interfaces_gif_edit.php:87 +msgid "" +"The alias IP address family has to match the family of the remote peer " +"address." +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:193 +#: usr/local/www/services_dhcp_edit.php:193 +msgid "" +"The IP address must not be within the range configured on a DHCP pool for " +"this interface." +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:388 +#: usr/local/www/services_dhcp_edit.php:388 +msgid "ARP Table Static Entry" +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:391 +#: usr/local/www/services_dhcp_edit.php:391 +msgid "Create an ARP Table Static Entry for this MAC & IP Address pair. " +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:117 +#: usr/local/www/firewall_virtual_ip_edit.php:117 +msgid "This IP address is being used by another interface or VIP." +msgstr "" + +#: usr/local/www/diag_traceroute.php:122 usr/local/www/diag_traceroute.php:141 +#: usr/local/www/diag_traceroute.php:141 +msgid "Reverse Address Lookup" +msgstr "" + +#: usr/local/www/interfaces_bridge.php:70 +#: usr/local/www/interfaces_bridge.php:70 +msgid "Invalid bridge interface." +msgstr "" + +#: usr/local/www/diag_smart.php:339 usr/local/www/diag_smart.php:339 +msgid "Perform Self-tests" +msgstr "" + +#: usr/local/www/diag_smart.php:384 usr/local/www/diag_smart.php:384 +msgid "Self-test" +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1485 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1428 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1365 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1226 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225 +msgid "Connections From Upstream SIP Server" +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1497 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1440 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1377 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1238 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1499 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1442 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1379 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1240 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1498 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1441 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1378 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1239 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1498 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1441 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1378 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1239 +msgid "Connections To Upstream SIP Server" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:149 usr/local/www/vpn_pppoe_edit.php:149 +msgid "Wrong data submitted" +msgstr "" + +#: usr/local/www/license.php:158 usr/local/www/license.php:158 +msgid "1992-2012 The FreeBSD Project. All rights reserved" +msgstr "" + +#: usr/local/www/license.php:161 usr/local/www/license.php:161 +msgid "1999-2010 The PHP Group. All rights reserved." +msgstr "" + +#: usr/local/www/license.php:164 usr/local/www/license.php:164 +msgid "2004, Jan Knescke, incremental" +msgstr "" + +#: usr/local/www/license.php:168 usr/local/www/license.php:168 +msgid "2004-2012 Internet Software Consortium, Inc." +msgstr "" + +#: usr/local/www/license.php:169 usr/local/www/license.php:169 +msgid "1995-2003 Internet Software Consortium" +msgstr "" + +#: usr/local/www/services_dhcp.php:352 usr/local/www/services_dhcp.php:372 +#: usr/local/www/services_dhcp.php:372 +msgid "" +"The specified range must not be within the DHCP range for this interface." +msgstr "" + +#: usr/local/www/services_dhcp.php:361 usr/local/www/services_dhcp.php:381 +#: usr/local/www/services_dhcp.php:381 +msgid "" +"The specified range must not be within the range configured on a DHCP pool " +"for this interface." +msgstr "" + +#: usr/local/www/services_dhcp.php:713 usr/local/www/services_dhcp.php:733 +#: usr/local/www/services_dhcp.php:733 +msgid "Pool Description" +msgstr "" + +#: usr/local/www/services_dhcp.php:903 usr/local/www/services_dhcp.php:923 +#: usr/local/www/services_dhcp.php:923 +msgid "" +"Leave blank to disable. Enter the interface IP address of the other " +"machine. Machines must be using CARP. Interface's advskew determines " +"whether the DHCPd process is Primary or Secondary. Ensure one machine's " +"advskew<20 (and the other is >20)." +msgstr "" + +#: usr/local/www/services_dhcp.php:946 usr/local/www/services_dhcp.php:966 +#: usr/local/www/services_dhcp.php:966 +msgid "" +"By default DHCP leases are displayed in UTC time. By checking this\n" +"\t\t\t\t\t\tbox DHCP lease time will be displayed in local time and set to " +"time zone selected. This will be used for all DHCP interfaces lease time." +msgstr "" + +#: usr/local/www/services_dhcp.php:1146 usr/local/www/services_dhcp.php:1166 +#: usr/local/www/services_dhcp.php:1166 +msgid "DHCP Static Mappings for this interface." +msgstr "" + +#: usr/local/www/diag_system_pftop.php:133 +#: usr/local/www/diag_system_pftop.php:133 +msgid "View type:" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:136 +#: usr/local/www/diag_system_pftop.php:136 +msgid "Label" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:141 +#: usr/local/www/diag_system_pftop.php:141 +msgid "Speed" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:150 +#: usr/local/www/diag_system_pftop.php:150 +msgid "Age" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:151 +#: usr/local/www/diag_system_pftop.php:151 +msgid "Bytes" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:152 +#: usr/local/www/diag_system_pftop.php:152 +msgid "Destination Address" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:154 +#: usr/local/www/diag_system_pftop.php:154 +msgid "Expiry" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:156 +#: usr/local/www/diag_system_pftop.php:156 +msgid "Peak" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:157 +#: usr/local/www/diag_system_pftop.php:157 +msgid "Packet" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:161 usr/local/www/diag_testport.php:143 +#: usr/local/www/diag_traceroute.php:113 usr/local/www/diag_ping.php:111 +#: usr/local/www/diag_testport.php:143 usr/local/www/diag_traceroute.php:113 +#: usr/local/www/diag_system_pftop.php:161 usr/local/www/diag_ping.php:111 +msgid "Source Address" +msgstr "" + +#: usr/local/www/diag_system_pftop.php:166 +#: usr/local/www/diag_system_pftop.php:166 +msgid "Number of States:" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:357 +#: usr/local/www/system_advanced_misc.php:404 +#: usr/local/www/system_advanced_misc.php:404 +msgid "On AC Power Mode" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:365 +#: usr/local/www/system_advanced_misc.php:412 +#: usr/local/www/system_advanced_misc.php:412 +msgid "On Battery Power Mode" +msgstr "" + +#: usr/local/www/bandwidth_by_ip.php:24 usr/local/www/bandwidth_by_ip.php:24 +msgid "Wrong Interface" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:601 usr/local/www/services_dhcpv6.php:601 +msgid "Prefix Delegation Size" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:846 usr/local/www/services_dhcpv6.php:846 +msgid "DHCPv6 Static Mappings for this interface." +msgstr "" + +#: usr/local/www/system_authservers.php:217 +#: usr/local/www/system_authservers.php:217 +msgid "RADIUS Timeout value must be numeric and positive." +msgstr "" + +#: usr/local/www/system_authservers.php:731 +#: usr/local/www/system_authservers.php:731 +msgid "Authentication Timeout" +msgstr "" + +#: usr/local/www/system_authservers.php:734 +#: usr/local/www/system_authservers.php:734 +msgid "" +"This value controls how long, in seconds, that the RADIUS server may take to " +"respond to an authentication request." +msgstr "" + +#: usr/local/www/system_authservers.php:735 +#: usr/local/www/system_authservers.php:735 +msgid "If left blank, the default value is 5 seconds." +msgstr "" + +#: usr/local/www/system_authservers.php:736 +#: usr/local/www/system_authservers.php:736 +msgid "" +"NOTE: If you are using an interactive two-factor authentication system, " +"increase this timeout to account for how long it will take the user to " +"receive and enter a token." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:80 +#: usr/local/www/system_advanced_firewall.php:80 +msgid "The Firewall Adaptive values must be set together." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:82 +#: usr/local/www/system_advanced_firewall.php:82 +msgid "The Firewall Adaptive Start value must be an integer." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:85 +#: usr/local/www/system_advanced_firewall.php:85 +msgid "The Firewall Adaptive End value must be an integer." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:345 +#: usr/local/www/system_advanced_firewall.php:346 +#: usr/local/www/system_advanced_firewall.php:346 +msgid "Firewall Adaptive Timeouts" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:347 +#: usr/local/www/system_advanced_firewall.php:348 +#: usr/local/www/system_advanced_firewall.php:348 +msgid "" +"Timeouts for states can be scaled adaptively as the number of state table " +"entries grows." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:350 +#: usr/local/www/system_advanced_firewall.php:351 +#: usr/local/www/system_advanced_firewall.php:351 +msgid "" +"When the number of state entries exceeds this value, adaptive scaling " +"begins. All timeout values are scaled linearly with factor (adaptive.end - " +"number of states) / (adaptive.end - adaptive.start)." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:354 +#: usr/local/www/system_advanced_firewall.php:355 +#: usr/local/www/system_advanced_firewall.php:355 +msgid "" +"When reaching this number of state entries, all timeout values become zero, " +"effectively purging all state entries immediately. This value is used to " +"define the scale factor, it should not actually be reached (set a lower " +"state limit, see below)." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:356 +#: usr/local/www/system_advanced_firewall.php:357 +#: usr/local/www/system_advanced_firewall.php:357 +msgid "Note: Leave this blank for the default(0)." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:447 +#: usr/local/www/system_advanced_firewall.php:448 +#: usr/local/www/system_advanced_firewall.php:448 +msgid "Bogon Networks" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:450 +#: usr/local/www/system_advanced_firewall.php:451 +#: usr/local/www/system_advanced_firewall.php:451 +msgid "Update Frequency" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:453 +#: usr/local/www/system_advanced_firewall.php:454 +#: usr/local/www/system_advanced_firewall.php:454 +msgid "Monthly" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:454 +#: usr/local/www/system_advanced_firewall.php:455 +#: usr/local/www/system_advanced_firewall.php:455 +msgid "Weekly" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:455 +#: usr/local/www/system_advanced_firewall.php:456 +#: usr/local/www/system_advanced_firewall.php:456 +msgid "Daily" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:458 +#: usr/local/www/system_advanced_firewall.php:459 +#: usr/local/www/system_advanced_firewall.php:459 +msgid "" +"The frequency of updating the lists of IP addresses that are reserved (but " +"not RFC 1918) or not yet assigned by IANA." +msgstr "" + +#: usr/local/www/services_captiveportal.php:227 +#: usr/local/www/services_captiveportal.php:243 +#: usr/local/www/services_captiveportal.php:243 +msgid "" +"The NAS-Identifier must be 3-253 characters long and should only contain " +"ASCII characters." +msgstr "" + +#: usr/local/www/services_captiveportal.php:593 +#: usr/local/www/services_captiveportal.php:609 +#: usr/local/www/services_captiveportal.php:609 +msgid "Allow only users/groups with 'Captive portal login' privilege set" +msgstr "" + +#: usr/local/www/services_captiveportal.php:760 +#: usr/local/www/services_captiveportal.php:776 +#: usr/local/www/services_captiveportal.php:776 +msgid "MAC authentication secret" +msgstr "" + +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:839 +#: usr/local/www/services_captiveportal.php:839 +msgid "Accounting Style" +msgstr "" + +#: usr/local/www/services_captiveportal.php:824 +#: usr/local/www/services_captiveportal.php:840 +#: usr/local/www/services_captiveportal.php:840 +msgid "Invert Acct-Input-Octets and Acct-Output-Octets" +msgstr "" + +#: usr/local/www/services_captiveportal.php:825 +#: usr/local/www/services_captiveportal.php:841 +#: usr/local/www/services_captiveportal.php:841 +msgid "" +"When this is enabled, data counts for RADIUS accounting packets will be " +"taken from the client perspective, not the NAS. Acct-Input-Octets will " +"represent download, and Acct-Output-Octets will represent upload." +msgstr "" + +#: usr/local/www/services_captiveportal.php:829 +#: usr/local/www/services_captiveportal.php:845 +#: usr/local/www/services_captiveportal.php:845 +msgid "NAS Identifier" +msgstr "" + +#: usr/local/www/services_captiveportal.php:831 +#: usr/local/www/services_captiveportal.php:847 +#: usr/local/www/services_captiveportal.php:847 +msgid "Specify a NAS identifier to override the default value" +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:193 usr/local/www/pkg_mgr_install.php:189 +#: usr/local/www/pkg_mgr_install.php:189 +msgid "No packages are installed." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:154 +#: usr/local/www/interfaces_bridge_edit.php:154 +msgid "A member interface passed does not exist in configuration" +msgstr "" + +#: usr/local/www/status_queues.php:150 usr/local/www/status_queues.php:150 +msgid "PPS" +msgstr "" + +#: usr/local/www/status_queues.php:152 usr/local/www/status_queues.php:152 +msgid "Borrows" +msgstr "" + +#: usr/local/www/status_queues.php:153 usr/local/www/status_queues.php:153 +msgid "Suspends" +msgstr "" + +#: usr/local/www/status_queues.php:154 usr/local/www/status_queues.php:154 +msgid "Drops" +msgstr "" + +#: usr/local/www/status_queues.php:155 usr/local/www/status_queues.php:155 +msgid "Length" +msgstr "" + +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:51 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:78 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:78 +msgid "Int." +msgstr "" + +#: usr/local/www/widgets/widgets/log.widget.php:164 +#: usr/local/www/widgets/widgets/log.widget.php:168 +#: usr/local/www/widgets/widgets/log.widget.php:176 +msgid "IF" +msgstr "" + +#: usr/local/www/widgets/widgets/log.widget.php:167 +#: usr/local/www/widgets/widgets/log.widget.php:171 +msgid "Prot" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:199 +#: usr/local/www/services_dnsmasq.php:201 +#: usr/local/www/services_dnsmasq.php:222 +#: usr/local/www/services_dnsmasq.php:222 +msgid "DNS Query Forwarding" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:202 +#: usr/local/www/services_dnsmasq.php:204 +#: usr/local/www/services_dnsmasq.php:225 +#: usr/local/www/services_dnsmasq.php:225 +msgid "Query DNS servers sequentially" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:203 +#: usr/local/www/services_dnsmasq.php:205 +#: usr/local/www/services_dnsmasq.php:226 +#: usr/local/www/services_dnsmasq.php:226 +#, php-format +msgid "" +"If this option is set, %s DNS Forwarder (dnsmasq) will query the DNS servers " +"sequentially in the order specified (System - General Setup - DNS " +"Servers), rather than all at once in parallel. " +msgstr "" + +#: usr/local/www/services_dnsmasq.php:212 +#: usr/local/www/services_dnsmasq.php:214 +#: usr/local/www/services_dnsmasq.php:235 +#: usr/local/www/services_dnsmasq.php:235 +msgid "Require domain" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:213 +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_dnsmasq.php:236 +#, php-format +msgid "" +"If this option is set, %s DNS Forwarder (dnsmasq) will not forward A or AAAA " +"queries for plain names, without dots or domain parts, to upstream name " +"servers. If the name is not known from /etc/hosts or DHCP then a \"not found" +"\" answer is returned. " +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:183 +#: usr/local/www/vpn_ipsec_phase1.php:183 +msgid "" +"A valid remote gateway IPv4 address must be specified or you need to change " +"protocol to IPv6" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:185 +#: usr/local/www/vpn_ipsec_phase1.php:185 +msgid "" +"A valid remote gateway IPv6 address must be specified or you need to change " +"protocol to IPv4" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:205 +#: usr/local/www/vpn_ipsec_phase1.php:205 +msgid "There is a Phase 2 using IPv6, you cannot use IPv4." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:209 +#: usr/local/www/vpn_ipsec_phase1.php:209 +msgid "There is a Phase 2 using IPv4, you cannot use IPv6." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1226 +#: usr/local/www/vpn_openvpn_server.php:1226 +msgid "IPv4 Local Network/s" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1230 +#: usr/local/www/vpn_openvpn_server.php:1230 +msgid "" +"These are the IPv4 networks that will be accessible from the remote " +"endpoint. Expressed as a comma-separated list of one or more CIDR ranges. " +"You may leave this blank if you don't want to add a route to the local " +"network through this tunnel on the remote machine. This is generally set to " +"your LAN network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1239 +#: usr/local/www/vpn_openvpn_server.php:1239 +msgid "IPv6 Local Network/s" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1243 +#: usr/local/www/vpn_openvpn_server.php:1243 +msgid "" +"These are the IPv6 networks that will be accessible from the remote " +"endpoint. Expressed as a comma-separated list of one or more IP/PREFIX. You " +"may leave this blank if you don't want to add a route to the local network " +"through this tunnel on the remote machine. This is generally set to your LAN " +"network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1256 +#: usr/local/www/vpn_openvpn_server.php:1256 +msgid "" +"These are the IPv4 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more CIDR ranges. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank if you don't want a site-to-site VPN" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1270 +#: usr/local/www/vpn_openvpn_server.php:1270 +msgid "" +"These are the IPv6 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank if you don't want a site-to-site VPN" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1405 +#: usr/local/www/vpn_openvpn_server.php:1405 +msgid "Topology" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1415 +#: usr/local/www/vpn_openvpn_server.php:1415 +msgid "" +"Allocate only one IP per client (topology subnet), rather than an isolated " +"subnet per client (topology net30)." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1422 +#: usr/local/www/vpn_openvpn_server.php:1422 +msgid "" +"Relevant when supplying a virtual adapter IP address to clients when using " +"tun mode on IPv4." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1423 +#: usr/local/www/vpn_openvpn_server.php:1423 +msgid "" +"Some clients may require this even for IPv6, such as OpenVPN Connect (iOS/" +"Android). Others may break if it is present, such as older versions of " +"OpenVPN or clients such as Yealink phones." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:133 +#: usr/local/www/vpn_ipsec_phase2.php:133 +msgid "" +"A valid local network IPv4 address must be specified or you need to change " +"Mode to IPv6" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:135 +#: usr/local/www/vpn_ipsec_phase2.php:135 +msgid "" +"A valid local network IPv6 address must be specified or you need to change " +"Mode to IPv4" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:159 +#: usr/local/www/vpn_ipsec_phase2.php:159 +msgid "" +"A valid NAT local network IPv4 address must be specified or you need to " +"change Mode to IPv6" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:161 +#: usr/local/www/vpn_ipsec_phase2.php:161 +msgid "" +"A valid NAT local network IPv6 address must be specified or you need to " +"change Mode to IPv4" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:183 +#: usr/local/www/vpn_ipsec_phase2.php:183 +msgid "" +"A valid remote network IPv4 address must be specified or you need to change " +"Mode to IPv6" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:185 +#: usr/local/www/vpn_ipsec_phase2.php:185 +msgid "" +"A valid remote network IPv6 address must be specified or you need to change " +"Mode to IPv4" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:192 +#: usr/local/www/vpn_ipsec_phase2.php:192 +msgid "Mobile IPsec only supports Tunnel mode." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:287 +#: usr/local/www/vpn_ipsec_phase2.php:287 +msgid "Phase 1 is using IPv4. You cannot use Tunnel IPv6 on Phase 2." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:289 +#: usr/local/www/vpn_ipsec_phase2.php:289 +msgid "Phase 1 is using IPv6. You cannot use Tunnel IPv4 on Phase 2." +msgstr "" + +#: usr/local/www/interfaces_assign.php:210 +#: usr/local/www/interfaces_assign.php:210 +#, php-format +msgid "" +"You cannot set port %s to interface %s because this interface is a member of " +"%s." +msgstr "" + +#: usr/local/www/services_snmp.php:395 usr/local/www/services_snmp.php:395 +msgid "UCD" +msgstr "" + +#: usr/local/www/services_snmp.php:397 usr/local/www/services_snmp.php:397 +msgid "Regex" +msgstr "" + +#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:560 +#: usr/local/www/interfaces.php:556 usr/local/www/interfaces.php:556 +msgid "This IPv4 address is being used by another interface or VIP." +msgstr "" + +#: usr/local/www/interfaces.php:557 usr/local/www/interfaces.php:565 +#: usr/local/www/interfaces.php:561 usr/local/www/interfaces.php:561 +msgid "This IPv4 address conflicts with a Static Route." +msgstr "" + +#: usr/local/www/interfaces.php:568 usr/local/www/interfaces.php:577 +#: usr/local/www/interfaces.php:573 usr/local/www/interfaces.php:573 +msgid "This IPv6 address is being used by another interface or VIP." +msgstr "" + +#: usr/local/www/interfaces.php:572 usr/local/www/interfaces.php:582 +#: usr/local/www/interfaces.php:578 usr/local/www/interfaces.php:578 +msgid "This IPv6 address conflicts with a Static Route." +msgstr "" + +#: usr/local/www/interfaces.php:2651 usr/local/www/interfaces.php:2697 +#: usr/local/www/interfaces.php:2686 usr/local/www/interfaces.php:2686 +msgid "" +"Note: The update frequency can be changed under System->Advanced Firewall/" +"NAT settings." +msgstr "" + +#: etc/inc/priv/user.priv.inc:6 etc/inc/priv/user.priv.inc:6 +msgid "User - Services - Captive portal login" +msgstr "" + +#: etc/inc/priv/user.priv.inc:7 etc/inc/priv/user.priv.inc:7 +msgid "Indicates whether the user is able to login on the captive portal." +msgstr "" + +#: etc/inc/pkg-utils.inc:617 etc/inc/pkg-utils.inc:618 +#: etc/inc/pkg-utils.inc:617 etc/inc/pkg-utils.inc:618 +#, php-format +msgid "Package %s is not supported on this version." +msgstr "" + +#: etc/inc/priv.defs.inc:732 etc/inc/priv.defs.inc:732 +msgid "WebCfg - Services: Captive portal: Allowed Hostnames page" +msgstr "" + +#: etc/inc/priv.defs.inc:733 etc/inc/priv.defs.inc:739 +#: etc/inc/priv.defs.inc:733 etc/inc/priv.defs.inc:739 +msgid "Allow access to the 'Services: Captive portal: Allowed Hostnames' page." +msgstr "" + +#: etc/inc/priv.defs.inc:738 etc/inc/priv.defs.inc:738 +msgid "WebCfg - Services: Captive portal: Edit Allowed Hostnames page" +msgstr "" + +#: etc/inc/priv.defs.inc:1136 etc/inc/priv.defs.inc:1136 +msgid "WebCfg - System: User Manager: settings page" +msgstr "" + +#: etc/inc/priv.defs.inc:1137 etc/inc/priv.defs.inc:1137 +msgid "Allow access to the 'System: User Manager: settings' page." +msgstr "" + +#: etc/inc/interfaces.inc:294 etc/inc/interfaces.inc:294 +#, php-format +msgid "interface_qinq_configure called with invalid if.%s" +msgstr "" + +#: etc/inc/interfaces.inc:401 etc/inc/interfaces.inc:401 +msgid "Creating wireless clone interfaces..." +msgstr "" + +#: etc/inc/interfaces.inc:1139 etc/inc/interfaces.inc:1141 +#: etc/inc/interfaces.inc:1141 +msgid "Wrong parameters used during interface_bring_down" +msgstr "" + +#: etc/inc/services.inc:2013 etc/inc/services.inc:2053 +#: etc/inc/services.inc:2084 etc/inc/services.inc:2148 +#, php-format +msgid "Removed cron job for %s" +msgstr "" + +#: etc/inc/openvpn.inc:257 etc/inc/openvpn.inc:257 +#, php-format +msgid "The field '%s' must contain a single valid %s CIDR range." +msgstr "" + +#: etc/inc/openvpn.inc:269 etc/inc/openvpn.inc:269 +#, php-format +msgid "" +"The field '%s' must contain only valid %s CIDR range(s) separated by commas." +msgstr "" + +#: etc/inc/vpn.inc:1780 etc/inc/vpn.inc:1793 etc/inc/vpn.inc:1790 +#, php-format +msgid "" +"Removing SPDs from tunnel gw '%1$s'. Local Subnet '%2$s' and Remote Subnet " +"'%3$s'. Reloading policy" +msgstr "" + +#: etc/inc/pfsense-utils.inc:938 etc/inc/pfsense-utils.inc:938 +msgid "Disabling auto login was not possible." +msgstr "" + +#: etc/inc/pfsense-utils.inc:956 etc/inc/pfsense-utils.inc:956 +msgid "Enabled console auto login, console menu is NOT password protected." +msgstr "" + +#: etc/inc/pfsense-utils.inc:958 etc/inc/pfsense-utils.inc:958 +msgid "Disabled console auto login, console menu is password protected." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:552 +#: usr/local/www/system_gateways_edit.php:582 +#: usr/local/www/system_gateways_edit.php:582 +msgid " - Show advanced option" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:302 +#: usr/local/www/services_dyndns_edit.php:302 +msgid "Verbose logging" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/services_dyndns_edit.php:305 +msgid "verbose logging" +msgstr "" + +#: usr/local/www/status_openvpn.php:278 usr/local/www/status_openvpn.php:339 +#: usr/local/www/status_openvpn.php:278 usr/local/www/status_openvpn.php:339 +msgid "Bytes Rcvd" +msgstr "" + +#: usr/local/www/status_openvpn.php:385 usr/local/www/status_openvpn.php:385 +msgid "" +"If you have custom options that override the management features of OpenVPN " +"on a client or server, they will cause that OpenVPN instance to not work " +"correctly with this status page." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1579 +#: usr/local/www/firewall_nat_edit.php:863 +#: usr/local/www/firewall_nat_out_edit.php:678 +#: usr/local/www/firewall_rules_edit.php:1590 +#: usr/local/www/firewall_nat_edit.php:864 +#: usr/local/www/firewall_rules_edit.php:1590 +#: usr/local/www/firewall_nat_edit.php:864 +#: usr/local/www/firewall_nat_out_edit.php:678 +msgid "Rule Information" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1583 +#: usr/local/www/firewall_nat_edit.php:867 +#: usr/local/www/firewall_nat_out_edit.php:682 +#: usr/local/www/firewall_rules_edit.php:1594 +#: usr/local/www/firewall_nat_edit.php:868 +#: usr/local/www/firewall_rules_edit.php:1594 +#: usr/local/www/firewall_nat_edit.php:868 +#: usr/local/www/firewall_nat_out_edit.php:682 +msgid "Created" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1591 +#: usr/local/www/firewall_nat_edit.php:875 +#: usr/local/www/firewall_nat_out_edit.php:690 +#: usr/local/www/firewall_rules_edit.php:1602 +#: usr/local/www/firewall_nat_edit.php:876 +#: usr/local/www/firewall_rules_edit.php:1602 +#: usr/local/www/firewall_nat_edit.php:876 +#: usr/local/www/firewall_nat_out_edit.php:690 +msgid "Updated" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:163 +#: usr/local/www/diag_logs_filter.php:163 +msgid "Source IP Address" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:175 +#: usr/local/www/diag_logs_filter.php:255 +#: usr/local/www/diag_logs_filter.php:175 +#: usr/local/www/diag_logs_filter.php:255 +msgid "Quantity" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:185 +#: usr/local/www/diag_logs_filter.php:185 +msgid "Destination IP Address" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:193 +#: usr/local/www/diag_logs_filter.php:193 +msgid "Protocol Flags" +msgstr "" + +#: usr/local/www/diag_logs_filter.php:203 +#: usr/local/www/diag_logs_filter.php:266 +#: usr/local/www/diag_logs_filter.php:203 +#: usr/local/www/diag_logs_filter.php:266 +#, php-format +msgid "Matches %1$s regular expression%2$s." +msgstr "" + +#: usr/local/www/diag_logs_filter.php:204 +#: usr/local/www/diag_logs_filter.php:204 +msgid "Precede with exclamation (!) as first character to exclude match." +msgstr "" + +#: usr/local/www/diag_logs_filter.php:251 +#: usr/local/www/diag_logs_filter.php:251 +msgid "Filter expresion" +msgstr "" + +#: usr/local/www/diag_dump_states.php:136 +#: usr/local/www/diag_dump_states.php:136 +msgid "Current total state count" +msgstr "" + +#: usr/local/www/diag_dump_states.php:218 +#: usr/local/www/diag_dump_states.php:218 +msgid "States matching current filter" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:417 +#: usr/local/www/firewall_nat_edit.php:417 +msgid "NAT Port Forward" +msgstr "" + +#: usr/local/www/status_graph.php:242 usr/local/www/status_graph.php:242 +msgid "Host Name or IP" +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:210 +#: usr/local/www/interfaces_gif_edit.php:210 +msgid "ECN friendly behavior" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:146 +#: usr/local/www/firewall_virtual_ip_edit.php:146 +msgid "You cannot use the network address for this VIP" +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:148 +#: usr/local/www/firewall_virtual_ip_edit.php:148 +msgid "You cannot use the broadcast address for this VIP" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:204 +#: usr/local/www/diag_packet_capture.php:204 +msgid "Promiscuous" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:207 +#: usr/local/www/diag_packet_capture.php:207 +msgid "If checked, the" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:207 +#: usr/local/www/diag_packet_capture.php:207 +msgid "packet capture" +msgstr "" + +#: usr/local/www/diag_packet_capture.php:207 +#: usr/local/www/diag_packet_capture.php:207 +msgid "will be performed using promiscuous mode." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:208 +#: usr/local/www/diag_packet_capture.php:208 +msgid "Some network adapters do not support or work well in promiscuous mode." +msgstr "" + +#: usr/local/www/diag_traceroute.php:72 usr/local/www/diag_ping.php:67 +#: usr/local/www/diag_traceroute.php:72 usr/local/www/diag_ping.php:67 +msgid "When using IPv4, the target host must be an IPv4 address or hostname." +msgstr "" + +#: usr/local/www/diag_traceroute.php:74 usr/local/www/diag_ping.php:69 +#: usr/local/www/diag_traceroute.php:74 usr/local/www/diag_ping.php:69 +msgid "When using IPv6, the target host must be an IPv6 address or hostname." +msgstr "" + +#: usr/local/www/diag_traceroute.php:164 usr/local/www/diag_traceroute.php:164 +msgid "" +"Using a source interface/IP address that does not match selected type (IPv4, " +"IPv6) will result in an error or empty output." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1472 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1493 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1507 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1524 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1543 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1567 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1594 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1647 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1416 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1436 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1450 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1467 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1486 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1510 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1589 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1352 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1373 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1387 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1403 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1422 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1446 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1473 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1526 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1213 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1234 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1248 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1265 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1284 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1308 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1335 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1388 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1471 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1492 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1506 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1523 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1566 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1593 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1646 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1415 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1435 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1449 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1466 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1485 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1509 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1588 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1351 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1372 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1386 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1402 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1421 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1445 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1472 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1525 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1212 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1233 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1247 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1264 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1283 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1307 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1334 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1387 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1471 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1492 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1506 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1523 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1566 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1593 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1646 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1415 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1435 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1449 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1466 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1485 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1509 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1588 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1351 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1372 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1386 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1402 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1421 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1445 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1472 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1525 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1212 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1233 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1247 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1264 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1283 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1307 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1334 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1387 +msgid "Traffic Shaper Wizard" +msgstr "" + +#: usr/local/www/wizards/openvpn_wizard.inc:614 +#: usr/local/www/wizards/openvpn_wizard.inc:629 +#: usr/local/www/wizards/openvpn_wizard.inc:614 +#: usr/local/www/wizards/openvpn_wizard.inc:629 +msgid "OpenVPN Wizard" +msgstr "" + +#: usr/local/www/services_dhcp.php:274 usr/local/www/services_dhcp.php:274 +#, php-format +msgid "" +"The Captive Portal zone '%s' has Hard Timeout parameter set to a value " +"bigger than Default lease time (%s)." +msgstr "" + +#: usr/local/www/system_certmanager.php:1026 +#: usr/local/www/system_certmanager.php:1026 +msgid "Signing request data" +msgstr "" + +#: usr/local/www/system_certmanager.php:1034 +#: usr/local/www/system_certmanager.php:1034 +msgid "Final certificate data" +msgstr "" + +#: usr/local/www/system_advanced_admin.php:447 +#: usr/local/www/system_advanced_admin.php:447 +msgid "" +"When this is unchecked, access to the webConfigurator is protected against " +"HTTP_REFERER redirection attempts. Check this box to disable this protection " +"if you find that it interferes with webConfigurator access in certain corner " +"cases such as using external scripts to interact with this system. More " +"information on HTTP_REFERER is available from Wikipedia." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:105 +#: usr/local/www/system_advanced_misc.php:105 +msgid "/tmp Size must be numeric and should not be less than 40MB." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:108 +#: usr/local/www/system_advanced_misc.php:108 +msgid "/var Size must be numeric and should not be less than 60MB." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:558 +#: usr/local/www/system_advanced_misc.php:558 +msgid "Skip rules when gateway is down" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:562 +#: usr/local/www/system_advanced_misc.php:562 +msgid "" +"By default, when a rule has a specific gateway set, and this gateway is " +"down, rule is created and traffic is sent to default gateway.This option " +"overrides that behavior and the rule is not created when gateway is down" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:568 +#: usr/local/www/system_advanced_misc.php:568 +msgid "RAM Disk Settings (Reboot to Apply Changes)" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:572 +#: usr/local/www/system_advanced_misc.php:572 +msgid "Use RAM Disks" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:575 +#: usr/local/www/system_advanced_misc.php:575 +msgid "Use memory file system for /tmp and /var" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:576 +#: usr/local/www/system_advanced_misc.php:576 +msgid "" +"Set this if you wish to use /tmp and /var as RAM disks (memory file system " +"disks) on a full install rather than use the hard disk. Setting this will " +"cause the data in /tmp and /var to be lost at reboot, including log data. " +"RRD and DHCP Leases will be retained." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:582 +#: usr/local/www/system_advanced_misc.php:582 +msgid "/tmp RAM Disk Size" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:586 +#: usr/local/www/system_advanced_misc.php:586 +msgid "" +"Set the size, in MB, for the /tmp RAM disk. Leave blank for 40MB. Do not set " +"lower than 40." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:591 +#: usr/local/www/system_advanced_misc.php:591 +msgid "/var RAM Disk Size" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:595 +#: usr/local/www/system_advanced_misc.php:595 +msgid "" +"Set the size, in MB, for the /var RAM disk. Leave blank for 60MB. Do not set " +"lower than 60." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:600 +#: usr/local/www/system_advanced_misc.php:600 +msgid "Periodic RRD Backup" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:616 +#: usr/local/www/system_advanced_misc.php:616 +msgid "Periodic DHCP Leases Backup" +msgstr "" + +#: usr/local/www/system_routes_edit.php:132 +#, php-format +msgid "" +"The alias (%s) has one or more FQDNs configured and cannot be used to " +"configure a static route." +msgstr "" + +#: usr/local/www/system_routes_edit.php:179 +#: usr/local/www/system_routes_edit.php:186 +#: usr/local/www/system_routes_edit.php:181 +#: usr/local/www/system_routes_edit.php:188 +#: usr/local/www/system_routes_edit.php:175 +#: usr/local/www/system_routes_edit.php:182 +#, php-format +msgid "This network conflicts with address configured on interface %s." +msgstr "" + +#: usr/local/www/firewall_nat_out.php:117 +#: usr/local/www/firewall_nat_out.php:128 +#: usr/local/www/firewall_nat_out.php:141 +#: usr/local/www/firewall_nat_out.php:157 +#: usr/local/www/firewall_nat_out.php:178 +#: usr/local/www/firewall_nat_out.php:199 +#: usr/local/www/firewall_nat_out.php:214 +#: usr/local/www/firewall_nat_out.php:117 +#: usr/local/www/firewall_nat_out.php:128 +#: usr/local/www/firewall_nat_out.php:141 +#: usr/local/www/firewall_nat_out.php:157 +#: usr/local/www/firewall_nat_out.php:178 +#: usr/local/www/firewall_nat_out.php:199 +#: usr/local/www/firewall_nat_out.php:214 +msgid "Manual Outbound NAT Switch" +msgstr "" + +#: usr/local/www/firewall_rules.php:311 usr/local/www/firewall_rules.php:313 +#: usr/local/www/firewall_rules.php:311 usr/local/www/firewall_rules.php:313 +msgid "" +"The firewall rule configuration has been changed.
    You must apply the " +"changes in order for them to take effect." +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:100 +#: usr/local/www/system_gateway_groups_edit.php:100 +msgid "Changing name on a gateway group is not allowed." +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/system_gateway_groups_edit.php:150 +msgid "Edit gateway group" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:229 +#: usr/local/www/system_gateway_groups_edit.php:229 +msgid "Edit gateway group entry" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:317 +#: usr/local/www/system_gateway_groups_edit.php:317 +msgid "" +"The virtual IP field selects what (virtual) IP should be used when this " +"group applies to a local Dynamic DNS, IPsec or OpenVPN endpoint" +msgstr "" + +#: usr/local/www/services_captiveportal.php:198 +#: usr/local/www/services_captiveportal.php:198 +msgid "" +"Hard timeout must be less or equal Default lease time set on DHCP Server" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:245 +#: usr/local/www/firewall_aliases_edit.php:245 +#, php-format +msgid "You must provide a valid URL. Could not fetch usable data from '%s'." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:250 +#: usr/local/www/firewall_aliases_edit.php:250 +#, php-format +msgid "URL '%s' is not valid." +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:288 +msgid "This alias is used on a static route and cannot contain FQDNs." +msgstr "" + +#: usr/local/www/system_firmware_restorefullbackup.php:174 +#: usr/local/www/system_firmware_restorefullbackup.php:174 +msgid "Could not locate any previous backups." +msgstr "" + +#: usr/local/www/system_firmware_restorefullbackup.php:182 +#: usr/local/www/system_firmware_restorefullbackup.php:182 +msgid "do not restore config.xml." +msgstr "" + +#: usr/local/www/diag_dns.php:156 usr/local/www/diag_dns.php:156 +msgid "Query Time" +msgstr "" + +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:131 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:131 +msgid "Checking ..." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:224 +#: usr/local/www/services_dnsmasq.php:245 +#: usr/local/www/services_dnsmasq.php:245 +msgid "Do not forward private reverse lookups" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:225 +#: usr/local/www/services_dnsmasq.php:246 +#: usr/local/www/services_dnsmasq.php:246 +#, php-format +msgid "" +"If this option is set, %s DNS Forwarder (dnsmasq) will not forward reverse " +"DNS lookups (PTR) for private addresses (RFC 1918) to upstream name " +"servers. Any entries in the Domain Overrides section forwarding private \"n." +"n.n.in-addr.arpa\" names to a specific server are still forwarded. If the IP " +"to name is not known from /etc/hosts, DHCP or a specific domain override " +"then a \"not found\" answer is immediately returned. " +msgstr "" + +#: usr/local/www/system_advanced_network.php:212 +#: usr/local/www/system_advanced_network.php:212 +msgid "" +"All IPv6 traffic will be blocked by the firewall unless this box is checked." +msgstr "" + +#: usr/local/www/system_advanced_network.php:213 +#: usr/local/www/system_advanced_network.php:213 +msgid "" +"NOTE: This does not disable any IPv6 features on the firewall, it only " +"blocks traffic." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:234 usr/local/www/diag_nanobsd.php:234 +msgid "RRD/DHCP Backup" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:236 usr/local/www/diag_nanobsd.php:236 +msgid "These options have been relocated to" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:236 usr/local/www/diag_nanobsd.php:236 +msgid "System > Advanced, Miscellaneous tab" +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90 +msgid "" +"A valid IP address must be specified, or # for an exclusion or ! to not " +"forward at all." +msgstr "" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +msgid "" +"Or enter ! for lookups for this host/subdomain to NOT be forwarded anywhere." +msgstr "" + +#: usr/local/www/interfaces.php:517 usr/local/www/interfaces.php:513 +#: usr/local/www/interfaces.php:513 +msgid "You can only have one interface configured in 6rd with same prefix." +msgstr "" + +#: usr/local/www/interfaces.php:528 usr/local/www/interfaces.php:524 +#: usr/local/www/interfaces.php:524 +#, php-format +msgid "You can only have one interface configured as 6to4." +msgstr "" + +#: usr/local/www/interfaces.php:648 usr/local/www/interfaces.php:644 +#: usr/local/www/interfaces.php:644 +msgid "MTU of a vlan should not be bigger than parent interface." +msgstr "" + +#: usr/local/www/interfaces.php:663 usr/local/www/interfaces.php:659 +#: usr/local/www/interfaces.php:659 +#, php-format +msgid "Interface %s (VLAN) has MTU set to a bigger value" +msgstr "" + +#: etc/inc/easyrule.inc:118 etc/inc/easyrule.inc:301 etc/inc/easyrule.inc:118 +#: etc/inc/easyrule.inc:301 +msgid "Easy Rule" +msgstr "" + +#: etc/inc/vpn.inc:1015 etc/inc/vpn.inc:1014 +#, php-format +msgid "" +"Ignoring IPsec racoon daemon reload since there are no tunnels on interface " +"%s" +msgstr "" + +#: etc/inc/auth.inc:1127 etc/inc/auth.inc:1127 +#, php-format +msgid "ERROR! Could not login to server %1$s as user %2$s: %3$s" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:139 +#: usr/local/www/system_gateways_edit.php:167 +#: usr/local/www/system_gateways_edit.php:139 +#: usr/local/www/system_gateways_edit.php:167 +#, php-format +msgid "" +"The gateway address %1$s does not lie within one of the chosen interface's " +"subnets." +msgstr "" + +#: usr/local/www/diag_arp.php:342 usr/local/www/diag_arp.php:342 +msgid "NOTE: Local IPv6 peers use" +msgstr "" + +#: usr/local/www/diag_arp.php:342 usr/local/www/diag_arp.php:342 +msgid "NDP" +msgstr "" + +#: usr/local/www/diag_arp.php:342 usr/local/www/diag_arp.php:342 +msgid "instead of ARP" +msgstr "" + +#: usr/local/www/firewall_virtual_ip.php:128 +#: usr/local/www/firewall_virtual_ip.php:128 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"Gateway." +msgstr "" + +#: usr/local/www/interfaces_gif_edit.php:169 +#: usr/local/www/interfaces_gif_edit.php:169 +msgid "" +"The interface here serves as the local address to be used for the gif tunnel." +msgstr "" + +#: usr/local/www/services_dhcp.php:941 usr/local/www/services_dhcp.php:941 +msgid "" +"This option persists even if DHCP server is disabled. Only the machines " +"listed below will be able to communicate with the firewall on this NIC." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:381 +#: usr/local/www/interfaces_bridge_edit.php:381 +msgid "" +"Set the transmit hold count for Spanning Tree. This is the number of " +"packets transmitted before being rate limited. The default is 6. The " +"minimum is 1 and the maximum is 10." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:254 +#: usr/local/www/services_dnsmasq.php:254 +msgid "Listen Port" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:258 +#: usr/local/www/services_dnsmasq.php:258 +msgid "" +"The port used for responding to DNS queries. It should normally be left " +"blank unless another service needs to bind to TCP/UDP port 53." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:268 +#: usr/local/www/services_dnsmasq.php:268 +msgid "" +"Interface IPs used by the DNS Forwarder for responding to queries from " +"clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries " +"to other interface IPs not selected below are discarded. The default " +"behavior is to respond to queries on every available IPv4 and IPv6 address." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:288 +#: usr/local/www/services_dnsmasq.php:288 +msgid "Strict Interface Binding" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:290 +#: usr/local/www/services_dnsmasq.php:290 +msgid "" +"If this option is set, the DNS forwarder will only bind to the interfaces " +"containing the IP addresses selected above, rather than binding to all " +"interfaces and discarding queries to other addresses." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:292 +#: usr/local/www/services_dnsmasq.php:292 +msgid "" +"NOTE: This option does NOT work with IPv6. If set, dnsmasq will not bind to " +"IPv6 addresses." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:523 +#: usr/local/www/firewall_nat_out_edit.php:561 +#: usr/local/www/firewall_nat_out_edit.php:523 +#: usr/local/www/firewall_nat_out_edit.php:561 +msgid "(leave blank for any)" +msgstr "" + +#: usr/local/www/interfaces.php:1900 usr/local/www/interfaces.php:1900 +#, php-format +msgid "" +"Enter a hexadecimal value between %x and %x here, default value is 0." +msgstr "" + +#: etc/inc/shaper.inc:1232 etc/inc/shaper.inc:1232 +msgid "Codel Active Queue" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2537 etc/inc/pfsense-utils.inc:2541 +#: etc/inc/pfsense-utils.inc:2598 +msgid "Turkish" +msgstr "" + +#: usr/local/www/system_gateways_edit.php:647 +msgid "" +"The Frequency Probe interval must be less than the Down time, otherwise the " +"gateway will seem to go down then come up again at the next probe." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:648 +msgid "" +"The total time before a gateway is down is the product of the Frequency " +"Probe and the Down fields. By default this is 1*10=10 seconds." +msgstr "" + +#: usr/local/www/pkg_mgr.php:169 +msgid "Other Categories" +msgstr "" + +#: usr/local/www/pkg_mgr.php:223 +msgid " version to check its change log." +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:109 +msgid "Platform" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:127 +msgid "NanoBSD Boot Slice" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:138 +msgid "CPU Type" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:151 +msgid "Hardware crypto" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:156 +msgid "Uptime" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:166 +msgid "DNS server(s)" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:178 +msgid "Last config change" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:183 +msgid "State table size" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:187 +msgid "Show states" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:191 +msgid "MBUF Usage" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:202 +msgid "Temperature" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:212 +msgid "Load average" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:218 +msgid "CPU usage" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:227 +msgid "Memory usage" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:237 +msgid "SWAP usage" +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:247 +msgid "Disk usage" +msgstr "" + +#: etc/inc/shaper.inc:2904 +msgid "IPV4 bit mask must be blank or numeric value between 1 and 32." +msgstr "" + +#: etc/inc/shaper.inc:2907 +msgid "IPV6 bit mask must be blank or numeric value between 1 and 128." +msgstr "" + +#: etc/inc/shaper.inc:3352 etc/inc/shaper.inc:3625 +msgid "" +"If 'source' or 'destination' slots is chosen, \n" +"a dynamic pipe with the bandwidth, delay, packet loss and queue size given " +"above will \n" +"be created for each source/destination IP address encountered, \n" +"respectively. This makes it possible to easily specify bandwidth \n" +"limits per host." +msgstr "" + +#: etc/inc/shaper.inc:3373 +msgid "" +"If 'source' or 'destination' slots is chosen, \n" +"leaving the mask bits blank will create one pipe per host. Otherwise " +"specify \n" +"the number of 'one' bits in the subnet mask used to group multiple hosts \n" +"per pipe." +msgstr "" + +#: etc/inc/shaper.inc:3646 +msgid "" +"If 'source' or 'destination' slots is chosen, \n" +"leaving the mask bits blank will create one pipe per host. Otherwise " +"specify \n" +"the number of 'one' bits in the subnet mask used to group multiple hosts \n" +"per queue." +msgstr "" + +#: etc/inc/pfsense-utils.inc:2575 +msgid "Albanian" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2576 +msgid "Bulgarian" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2577 +msgid "Chinese (Simplified)" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2578 +msgid "Chinese (Traditional)" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2579 +msgid "Dutch" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2580 +msgid "Danish" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2582 +msgid "Finnish" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2583 +msgid "French" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2584 +msgid "German" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2585 +msgid "Greek" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2586 +msgid "Hungarian" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2587 +msgid "Italian" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2588 +msgid "Japanese" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2589 +msgid "Korean" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2590 +msgid "Latvian" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2591 +msgid "Norwegian (Bokmal)" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2592 +msgid "Polish" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2594 +msgid "Portuguese (Portugal)" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2595 +msgid "Romanian" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2596 +msgid "Russian" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2597 +msgid "Slovenian" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2599 +msgid "Spanish" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2600 +msgid "Swedish" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2601 +msgid "Slovak" +msgstr "" + +#: etc/inc/pfsense-utils.inc:2602 +msgid "Czech" +msgstr "" diff --git a/usr/local/share/locale/ja/LC_MESSAGES/pfSense.po b/usr/local/share/locale/ja/LC_MESSAGES/pfSense.po new file mode 100644 index 000000000..499621895 --- /dev/null +++ b/usr/local/share/locale/ja/LC_MESSAGES/pfSense.po @@ -0,0 +1,48739 @@ +# Language translation for pfSense project. +# Copyright (C) 2011-2014 Electric Sheep Fencing LLC +# This file is distributed under the same license as the pfSense package. +# Kiyo Takami and Isaac (.ike) Levy, 2013. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: 0.1\n" +"Report-Msgid-Bugs-To: foof@blackskyresearch.net\n" +"POT-Creation-Date: 2013-12-31 18:00-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: The Foof \n" +"Language-Team: JAPANESE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: vim(1), awk(1), sed(1)\n, https://github.com/soimort/google-translate-cli" +"X-Machinegen: translate.google.com" + +#: etc/inc/PEAR.inc:161 +#, php-format +msgid "PEAR constructor called, class=%s\n" +msgstr "ã¨å‘¼ã°ã‚Œã‚‹PEARã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã€ã‚¯ãƒ©ã‚¹=" + +#: etc/inc/PEAR.inc:198 +#, php-format +msgid "PEAR destructor called, class=%s\n" +msgstr "ã¨å‘¼ã°ã‚Œã‚‹PEARã®ãƒ‡ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã€ã‚¯ãƒ©ã‚¹=" + +#: etc/inc/PEAR.inc:337 etc/inc/PEAR.inc:595 etc/inc/PEAR.inc:632 +msgid "invalid error callback" +msgstr "エラー·コールãƒãƒƒã‚¯ç„¡åй" + +#: etc/inc/PEAR.inc:342 etc/inc/PEAR.inc:600 etc/inc/PEAR.inc:637 +msgid "invalid error mode" +msgstr "エラーモード無効" + +#: etc/inc/PEAR.inc:445 etc/inc/PEAR.inc:451 +msgid "The expected error you submitted does not exist" +msgstr "ã‚ãªãŸãŒæå‡ºã—ãŸäºˆæƒ³ã•れるエラーãŒå­˜åœ¨ã—ã¦ã„ã¾ã›ã‚“" + +#: etc/inc/PEAR.inc:455 +msgid "The expected error you submitted is empty" +msgstr "ã‚ãªãŸãŒæå‡ºã—ãŸäºˆæƒ³ã•れるエラーã¯ç©ºã§ã™" + +#: etc/inc/PEAR.inc:866 +msgid "" +"PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions" +msgstr "PEAR_ERROR_EXCEPTIONã¯ä¾‹å¤–ã®å»ƒæ­¢ã•れã€ä½¿ç”¨ã‚¯ãƒ©ã‚¹ã®PEAR_ErrorStackã§ã™" + +#: etc/inc/PEAR.inc:1023 +#, php-format +msgid "" +"[%s: message="%s" code=%d mode=callback callback=%s prefix="%s" info="%s" +""]" +msgstr ""((%s: message="%s" code=%d mode=callback callback=%s prefix="%s" info="%s""))" + +#: etc/inc/PEAR.inc:1041 +#, php-format +msgid "[%s: message="%s" code=%d mode=%s level=%s prefix="%s" info="%s"]" +msgstr "((%s: message="%s" code=%d mode=%s level=%s prefix="%s" info="%s"))" + +#: etc/inc/array_intersect_key.inc:37 etc/inc/array_intersect_key.inc:37 +msgid "Wrong parameter count for array_intersect_key()" +msgstr "é–“é•ã£ãŸãƒ‘ラメータ数 array_intersect_key.()" + +#: etc/inc/array_intersect_key.inc:45 etc/inc/array_intersect_key.inc:45 +msgid "array_intersect_key() Argument #" +msgstr "array_intersect_key.() アーギュメント #" + +#: etc/inc/array_intersect_key.inc:46 etc/inc/array_intersect_key.inc:46 +msgid " is not an array" +msgstr " ã¯é…列ã§ã¯ã‚りã¾ã›ã‚“" + +#: etc/inc/auth.inc:100 etc/inc/auth.inc:100 +msgid "" +"Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/" +"DNS_rebinding
    Try accessing the router by IP address instead of by " +"hostname." +msgstr ""検出ã•ã‚ŒãŸæ½œåœ¨çš„ãªDNSå†ãƒã‚¤ãƒ³ãƒ‰æ”»æ’ƒ, 見る http://en.wikipedia.org/wiki/"DNS_rebinding
    "IPアドレスã§ãƒ«ãƒ¼ã‚¿ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ä»£ã‚りã«ãƒ›ã‚¹ãƒˆåã§ã¿ã¦ãã ã•ã„。" + +#: etc/inc/auth.inc:115 etc/inc/auth.inc:115 +msgid "Redirecting..." +msgstr "リダイレクト..." + +#: etc/inc/auth.inc:115 etc/inc/auth.inc:115 +msgid "Redirecting to the dashboard..." +msgstr "ダッシュボードã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ..." + +#: etc/inc/auth.inc:315 etc/inc/auth.inc:335 etc/inc/auth.inc:406 +#: etc/inc/auth.inc:433 etc/inc/auth.inc:478 etc/inc/auth.inc:609 +#: etc/inc/auth.inc:621 etc/inc/auth.inc:311 etc/inc/auth.inc:331 +#: etc/inc/auth.inc:402 etc/inc/auth.inc:431 etc/inc/auth.inc:487 +#: etc/inc/auth.inc:618 etc/inc/auth.inc:630 etc/inc/auth.inc:311 +#: etc/inc/auth.inc:331 etc/inc/auth.inc:402 etc/inc/auth.inc:431 +#: etc/inc/auth.inc:487 etc/inc/auth.inc:618 etc/inc/auth.inc:630 +#, php-format +msgid "Running: %s" +msgstr "%s 実行中" + +#: etc/inc/auth.inc:656 etc/inc/auth.inc:728 etc/inc/auth.inc:796 +#: etc/inc/auth.inc:1040 etc/inc/auth.inc:665 etc/inc/auth.inc:737 +#: etc/inc/auth.inc:805 etc/inc/auth.inc:1049 etc/inc/auth.inc:1053 +#: etc/inc/auth.inc:806 etc/inc/auth.inc:1057 etc/inc/auth.inc:665 +#: etc/inc/auth.inc:737 etc/inc/auth.inc:806 etc/inc/auth.inc:1057 +#, php-format +msgid "ERROR! Could not connect to server %s." +msgstr "エラー!サーãƒãƒ¼%sã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/auth.inc:674 etc/inc/auth.inc:683 etc/inc/auth.inc:683 +#, php-format +msgid "LDAP: Could not lookup CA by reference for host %s." +msgstr "LDAP:ホスト%sã‚’å‚ç…§ã—ãŸçµæžœã€CAを検索ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/auth.inc:783 etc/inc/auth.inc:792 etc/inc/auth.inc:793 +#: etc/inc/auth.inc:793 +msgid "" +"ERROR! ldap_get_user_ous() backed selected with no LDAP authentication " +"server defined." +msgstr "エラー! ldap_get_user_ous.() ãŒå®šç¾©ã•れã¦ã„ãªã„LDAPèªè¨¼ã‚µãƒ¼ãƒã¨é¸æŠžã—ãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—。" + +#: etc/inc/auth.inc:807 etc/inc/auth.inc:816 etc/inc/auth.inc:818 +#: etc/inc/auth.inc:818 +#, php-format +msgid "ERROR! ldap_get_user_ous() could not bind anonymously to server %s." +msgstr "エラー! ldap_get_user_ous.() サーãƒ%sã«åŒ¿åã§ãƒã‚¤ãƒ³ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/auth.inc:812 etc/inc/auth.inc:821 etc/inc/auth.inc:823 +#: etc/inc/auth.inc:823 +#, php-format +msgid "ERROR! ldap_get_user_ous() could not bind to server %s." +msgstr "エラー! ldap_get_user_ous.() サーãƒ%sã‚’ãƒã‚¤ãƒ³ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/auth.inc:908 etc/inc/auth.inc:917 etc/inc/auth.inc:919 +#: etc/inc/auth.inc:919 +#, php-format +msgid "ERROR! ldap_get_groups() Could not connect to server %s." +msgstr "エラー! ldap_get_groups.() サーãƒãƒ¼%sã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/auth.inc:918 etc/inc/auth.inc:927 etc/inc/auth.inc:930 +#: etc/inc/auth.inc:930 +#, php-format +msgid "ERROR! ldap_get_groups() could not bind anonymously to server %s." +msgstr "エラー! ldap_get_groups.() サーãƒ%sã«åŒ¿åã§ãƒã‚¤ãƒ³ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/auth.inc:923 etc/inc/auth.inc:932 etc/inc/auth.inc:935 +#: etc/inc/auth.inc:935 +#, php-format +msgid "ERROR! ldap_get_groups() could not bind to server %s." +msgstr "エラー! ldap_get_groups.() サーãƒ%sã‚’ãƒã‚¤ãƒ³ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/auth.inc:1020 etc/inc/auth.inc:1029 etc/inc/auth.inc:1033 +#: etc/inc/auth.inc:1036 etc/inc/auth.inc:1036 +msgid "" +"ERROR! ldap_backed() called with no LDAP authentication server defined. " +"Defaulting to local user database. Visit System -> User Manager." +msgstr ""エラー\! ldap_backed.() ã¯LDAPèªè¨¼ã‚µãƒ¼ãƒãƒ¼ã®å®šç¾©ãªã呼ã³å‡ºã•れã¾ã—ãŸã€‚"ローカルユーザデータベースã«ãƒ‡ãƒ•ォルト設定。"㸠システム -> ユーザーマãƒãƒ¼ã‚¸ãƒ£" + +#: etc/inc/auth.inc:1023 etc/inc/auth.inc:1032 etc/inc/auth.inc:1036 +#: etc/inc/auth.inc:1039 etc/inc/auth.inc:1039 +msgid "ERROR! ldap_backed() called with no LDAP authentication server defined." +msgstr "エラー! ldap_backed.() ã¯LDAPèªè¨¼ã‚µãƒ¼ãƒãƒ¼ã®å®šç¾©ãªã呼ã³å‡ºã•れã¾ã—ãŸã€‚" + +#: etc/inc/auth.inc:1054 etc/inc/auth.inc:1063 etc/inc/auth.inc:1067 +#: etc/inc/auth.inc:1071 etc/inc/auth.inc:1071 +#, php-format +msgid "ERROR! Could not bind to server %s." +msgstr "エラー! サーãƒãƒ¼%sã«ãƒã‚¤ãƒ³ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/auth.inc:1071 etc/inc/auth.inc:1080 etc/inc/auth.inc:1084 +#: etc/inc/auth.inc:1085 etc/inc/auth.inc:1089 etc/inc/auth.inc:1089 +#, php-format +msgid "Now Searching for %s in directory." +msgstr "ディレクトリ内ã§%sを検索中。" + +#: etc/inc/auth.inc:1075 etc/inc/auth.inc:1084 etc/inc/auth.inc:1088 +#: etc/inc/auth.inc:1090 etc/inc/auth.inc:1094 etc/inc/auth.inc:1094 +#, php-format +msgid "Now Searching in server %1$s, container %2$s with filter %3$s." +msgstr "サーãƒãƒ¼%1$sã¨ã‚³ãƒ³ãƒ†ãƒŠ%2$s内をフィルター%3$sã§æ¤œç´¢ä¸­ã€‚" + +#: etc/inc/auth.inc:1086 etc/inc/auth.inc:1095 etc/inc/auth.inc:1099 +#: etc/inc/auth.inc:1101 etc/inc/auth.inc:1105 etc/inc/auth.inc:1105 +#, php-format +msgid "Search resulted in error: %s" +msgstr "æ¤œç´¢çµæžœã‚¨ãƒ©ãƒ¼ï¼š%s" + +#: etc/inc/auth.inc:1102 etc/inc/auth.inc:1111 etc/inc/auth.inc:1115 +#: etc/inc/auth.inc:1117 etc/inc/auth.inc:1121 etc/inc/auth.inc:1121 +msgid "ERROR! Either LDAP search failed, or multiple users were found." +msgstr "エラー! LDAP検索ã«å¤±æ•—ã—ã¾ã—ãŸã€ã¾ãŸã¯è¤‡æ•°ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚" + +#: etc/inc/auth.inc:1108 etc/inc/auth.inc:1117 etc/inc/auth.inc:1121 +#: etc/inc/auth.inc:1123 +#, php-format +msgid "ERROR! Could not login to server %1$s as user %2$s." +msgstr "エラー! ユーザーå%2$sã¯ã‚µãƒ¼ãƒ%1$sã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/auth.inc:1113 etc/inc/auth.inc:1122 etc/inc/auth.inc:1126 +#: etc/inc/auth.inc:1129 etc/inc/auth.inc:1133 etc/inc/auth.inc:1133 +#, php-format +msgid "Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s." +msgstr "DN = %3$sã¨LDAPサーãƒãƒ¼%2$s経由%1$sã¨ã—ã¦æ­£å¸¸ã«ãƒ­ã‚°ã‚¤ãƒ³ã—" + +#: etc/inc/auth.inc:1144 etc/inc/auth.inc:1153 etc/inc/auth.inc:1157 +#: etc/inc/auth.inc:1163 etc/inc/auth.inc:1167 etc/inc/auth.inc:1167 +#, php-format +msgid "Radius start: %s
    \n" +msgstr "RADIUSスタート: " + +#: etc/inc/auth.inc:1155 etc/inc/auth.inc:1164 etc/inc/auth.inc:1168 +#: etc/inc/auth.inc:1174 etc/inc/auth.inc:1178 etc/inc/auth.inc:1178 +#, php-format +msgid "Radius send failed: %s
    \n" +msgstr "RADIUSé€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸ: %s
    \n" + +#: etc/inc/auth.inc:1159 etc/inc/auth.inc:1170 etc/inc/auth.inc:1174 +#: etc/inc/auth.inc:1180 etc/inc/auth.inc:1184 etc/inc/auth.inc:1184 +#, php-format +msgid "Radius Auth succeeded" +msgstr "RADIUSèªè¨¼ãŒæˆåŠŸã—ã¾ã—ãŸ" + +#: etc/inc/auth.inc:1164 etc/inc/auth.inc:1175 etc/inc/auth.inc:1179 +#: etc/inc/auth.inc:1185 etc/inc/auth.inc:1189 etc/inc/auth.inc:1189 +#, php-format +msgid "Radius Auth rejected" +msgstr "RADIUSèªè¨¼ã¯æ‹’å¦" + +#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218 +#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237 etc/inc/auth.inc:1228 +#: etc/inc/auth.inc:1243 etc/inc/auth.inc:1232 etc/inc/auth.inc:1247 +#: etc/inc/auth.inc:1232 etc/inc/auth.inc:1247 +msgid "Local Database" +msgstr "ローカルデータベース" + +#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218 +#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237 +msgid "Local Auth" +msgstr "ローカルèªè¨¼" + +#: etc/inc/auth.inc:1293 etc/inc/auth.inc:1317 etc/inc/auth.inc:1321 +#: etc/inc/auth.inc:1327 etc/inc/auth.inc:1331 etc/inc/auth.inc:1331 +#, php-format +msgid "Successful login for user '%1$s' from: %2$s" +msgstr "%2$sã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼'%1$s'ãŸã‚ã®ãƒ­ã‚°ã‚¤ãƒ³ã«æˆåŠŸ" + +#: etc/inc/auth.inc:1347 etc/inc/auth.inc:1371 etc/inc/auth.inc:1375 +#: etc/inc/auth.inc:1381 etc/inc/auth.inc:1385 etc/inc/auth.inc:1385 +#, php-format +msgid "Session timed out for user '%1$s' from: %2$s" +msgstr "セッションã¯%2$sã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼'%1$s'ãŸã‚タイムアウトã—ã¾ã—ãŸ" + +#: etc/inc/auth.inc:1349 etc/inc/auth.inc:1373 etc/inc/auth.inc:1377 +#: etc/inc/auth.inc:1383 etc/inc/auth.inc:1387 etc/inc/auth.inc:1387 +#, php-format +msgid "User logged out for user '%1$s' from: %2$s" +msgstr "ユーザーã¯%2$sã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼'%1$s'ãŒãƒ­ã‚°ã‚¢ã‚¦ãƒˆã™ã‚‹" + +#: etc/inc/captiveportal.inc:1374 etc/inc/captiveportal.inc:1383 +#: etc/inc/captiveportal.inc:1420 etc/inc/captiveportal.inc:1335 +#: etc/inc/captiveportal.inc:1338 etc/inc/captiveportal.inc:1338 +#, php-format +msgid "Error: cannot open '%s' in captiveportal_write_elements()%s" +msgstr "エラー: captiveportal_write_elements.()%s を処ç†'%s'ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“" + +#: etc/inc/config.inc:100 etc/inc/config.inc:100 +msgid "Upgrading m0n0wall configuration to pfSense... " +msgstr "pfSenseã«m0n0wallæ§‹æˆã®ã‚¢ãƒƒãƒ—グレード... " + +#: etc/inc/config.inc:103 etc/inc/config.inc:103 +msgid "ERROR! Could not convert m0n0wall -> pfsense in config.xml" +msgstr "エラー! m0n0wallã¯config.xmlã«pfsenseã«å¤‰æ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/config.inc:133 etc/inc/config.inc:133 +msgid "CDROM build" +msgstr "CD-ROMã®ãƒ“ルド" + +#: etc/inc/config.inc:134 etc/inc/config.inc:135 etc/inc/config.inc:134 +#: etc/inc/config.inc:135 +msgid "CFG:" +msgstr "CFG:" + +#: etc/inc/config.inc:136 etc/inc/config.inc:136 +msgid "TYPE:" +msgstr "タイプ:" + +#: etc/inc/config.inc:151 etc/inc/config.inc:166 etc/inc/config.inc:151 +#: etc/inc/config.inc:166 +#, php-format +msgid "Found configuration on %s.%s" +msgstr "%s.%sタブã®è¨­å®š" + +#: etc/inc/config.inc:180 etc/inc/config.inc:181 etc/inc/config.lib.inc:105 +#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:245 +#: etc/inc/config.lib.inc:266 etc/inc/config.lib.inc:267 +#: etc/inc/config.inc:180 etc/inc/config.inc:181 etc/inc/config.lib.inc:105 +#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:245 +#: etc/inc/config.lib.inc:266 etc/inc/config.lib.inc:267 +msgid "No config.xml found, attempting last known config restore." +msgstr "ã„ã„ãˆconfig.xmlã«ã¯æœ€å¾Œã®æ—¢çŸ¥ã®è¨­å®šã®å¾©å…ƒã‚’試ã¿ã¦ã€è¦‹ã¤ã‹ã‚‰ãªã‹ã£ãŸã€‚" + +#: etc/inc/config.inc:184 etc/inc/config.inc:184 +msgid "No config.xml or config backups found, resetting to factory defaults." +msgstr "å…¨ãconfig.xmlや設定ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—å·¥å ´å‡ºè·æ™‚設定ã¸ã®ãƒªã‚»ãƒƒãƒˆã€è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/filter.inc:197 etc/inc/filter.inc:194 etc/inc/filter.inc:193 +#: etc/inc/filter.inc:168 etc/inc/filter.inc:168 +msgid "Initializing" +msgstr "イニシャライズ" + +#: etc/inc/filter.inc:209 etc/inc/filter.inc:206 etc/inc/filter.inc:205 +#: etc/inc/filter.inc:180 etc/inc/filter.inc:180 +msgid "Configuring firewall" +msgstr "設定ファイアウォール" + +#: etc/inc/filter.inc:214 etc/inc/filter.inc:211 etc/inc/filter.inc:210 +#: etc/inc/filter.inc:185 etc/inc/filter.inc:185 +msgid "Creating aliases" +msgstr "エイリアスã®ä½œæˆ" + +#: etc/inc/filter.inc:219 etc/inc/filter.inc:218 etc/inc/filter.inc:193 +#: etc/inc/filter.inc:193 +msgid "Generating NAT rules" +msgstr "NATã®ãƒ«ãƒ¼ãƒ«ã‚’生æˆã™ã‚‹" + +#: etc/inc/filter.inc:224 etc/inc/filter.inc:223 etc/inc/filter.inc:198 +#: etc/inc/filter.inc:198 +msgid "Generating filter rules" +msgstr "フィルタルールを生æˆã™ã‚‹" + +#: etc/inc/filter.inc:230 etc/inc/filter.inc:229 etc/inc/filter.inc:204 +#: etc/inc/filter.inc:204 +msgid "Generating ALTQ queues" +msgstr "ALTQキューを生æˆã™ã‚‹" + +#: etc/inc/filter.inc:232 etc/inc/filter.inc:216 etc/inc/filter.inc:215 +#: etc/inc/filter.inc:190 etc/inc/filter.inc:190 +msgid "Generating Limiter rules" +msgstr "リミッタールールを生æˆã™ã‚‹" + +#: etc/inc/filter.inc:234 etc/inc/filter.inc:232 etc/inc/filter.inc:231 +#: etc/inc/filter.inc:206 etc/inc/filter.inc:206 +msgid "Generating Layer7 rules" +msgstr "生æˆãƒ¬ã‚¤ãƒ¤7ルール" + +#: etc/inc/filter.inc:238 etc/inc/filter.inc:236 etc/inc/filter.inc:235 +#: etc/inc/filter.inc:210 etc/inc/filter.inc:210 +msgid "Loading filter rules" +msgstr "フィルタルールã®ãƒ­ãƒ¼ãƒ‰" + +#: etc/inc/filter.inc:245 etc/inc/filter.inc:243 etc/inc/filter.inc:242 +#: etc/inc/filter.inc:217 etc/inc/filter.inc:217 +msgid "Filter is disabled. Not loading rules." +msgstr "フィルタãŒç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚ルールをロードã—ã¦ã„ãªã„。" + +#: etc/inc/filter.inc:247 etc/inc/filter.inc:418 etc/inc/interfaces.inc:217 +#: etc/inc/interfaces.inc:234 etc/inc/interfaces.inc:360 +#: etc/inc/interfaces.inc:410 etc/inc/interfaces.inc:664 +#: etc/inc/interfaces.inc:924 etc/inc/interfaces.inc:964 +#: etc/inc/interfaces.inc:979 etc/inc/interfaces.inc:1780 +#: etc/inc/pkg-utils.inc:586 etc/inc/pkg-utils.inc:596 +#: etc/inc/pkg-utils.inc:619 etc/inc/pkg-utils.inc:696 +#: etc/inc/pkg-utils.inc:711 etc/inc/pkg-utils.inc:755 +#: etc/inc/pkg-utils.inc:786 etc/inc/pkg-utils.inc:805 +#: etc/inc/pkg-utils.inc:812 etc/inc/pkg-utils.inc:829 +#: etc/inc/pkg-utils.inc:845 etc/inc/pkg-utils.inc:861 +#: etc/inc/pkg-utils.inc:967 etc/inc/pkg-utils.inc:984 +#: etc/inc/pkg-utils.inc:1009 etc/inc/pkg-utils.inc:1054 +#: etc/inc/pkg-utils.inc:1063 etc/inc/pkg-utils.inc:1073 +#: etc/inc/pkg-utils.inc:1088 etc/inc/pkg-utils.inc:1095 +#: etc/inc/pkg-utils.inc:1114 etc/inc/services.inc:899 +#: etc/inc/services.inc:1234 etc/inc/services.inc:1297 +#: etc/inc/services.inc:1477 etc/inc/system.inc:651 etc/inc/system.inc:674 +#: etc/inc/system.inc:759 etc/inc/system.inc:1197 etc/inc/system.inc:1278 +#: etc/inc/system.inc:1409 etc/inc/rrd.inc:782 etc/inc/system.inc:699 +#: etc/inc/system.inc:722 etc/inc/system.inc:806 etc/inc/system.inc:1249 +#: etc/inc/system.inc:1334 etc/inc/system.inc:1466 etc/inc/pkg-utils.inc:612 +#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:645 +#: etc/inc/pkg-utils.inc:722 etc/inc/pkg-utils.inc:737 +#: etc/inc/pkg-utils.inc:781 etc/inc/pkg-utils.inc:841 +#: etc/inc/pkg-utils.inc:848 etc/inc/pkg-utils.inc:865 +#: etc/inc/pkg-utils.inc:881 etc/inc/pkg-utils.inc:897 +#: etc/inc/pkg-utils.inc:1004 etc/inc/pkg-utils.inc:1021 +#: etc/inc/pkg-utils.inc:1046 etc/inc/pkg-utils.inc:1091 +#: etc/inc/pkg-utils.inc:1100 etc/inc/pkg-utils.inc:1110 +#: etc/inc/pkg-utils.inc:1125 etc/inc/pkg-utils.inc:1132 +#: etc/inc/pkg-utils.inc:1151 etc/inc/interfaces.inc:219 +#: etc/inc/interfaces.inc:236 etc/inc/interfaces.inc:362 +#: etc/inc/interfaces.inc:412 etc/inc/interfaces.inc:671 +#: etc/inc/interfaces.inc:951 etc/inc/interfaces.inc:991 +#: etc/inc/interfaces.inc:1006 etc/inc/interfaces.inc:1845 etc/inc/rrd.inc:806 +#: etc/inc/services.inc:1028 etc/inc/services.inc:1370 +#: etc/inc/services.inc:1434 etc/inc/services.inc:1669 etc/inc/filter.inc:245 +#: etc/inc/filter.inc:420 etc/inc/system.inc:703 etc/inc/system.inc:726 +#: etc/inc/system.inc:804 etc/inc/system.inc:1229 etc/inc/system.inc:1376 +#: etc/inc/system.inc:1508 etc/inc/pkg-utils.inc:394 etc/inc/pkg-utils.inc:613 +#: etc/inc/pkg-utils.inc:623 etc/inc/pkg-utils.inc:646 +#: etc/inc/pkg-utils.inc:723 etc/inc/pkg-utils.inc:738 +#: etc/inc/pkg-utils.inc:782 etc/inc/pkg-utils.inc:813 +#: etc/inc/pkg-utils.inc:842 etc/inc/pkg-utils.inc:849 +#: etc/inc/pkg-utils.inc:866 etc/inc/pkg-utils.inc:882 +#: etc/inc/pkg-utils.inc:898 etc/inc/pkg-utils.inc:1005 +#: etc/inc/pkg-utils.inc:1022 etc/inc/pkg-utils.inc:1047 +#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1101 +#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1126 +#: etc/inc/pkg-utils.inc:1133 etc/inc/pkg-utils.inc:1152 +#: etc/inc/interfaces.inc:218 etc/inc/interfaces.inc:235 +#: etc/inc/interfaces.inc:361 etc/inc/interfaces.inc:411 +#: etc/inc/interfaces.inc:670 etc/inc/interfaces.inc:950 +#: etc/inc/interfaces.inc:990 etc/inc/interfaces.inc:1005 +#: etc/inc/interfaces.inc:1849 etc/inc/services.inc:1160 +#: etc/inc/services.inc:1509 etc/inc/services.inc:1573 +#: etc/inc/services.inc:1808 etc/inc/filter.inc:244 etc/inc/filter.inc:423 +#: etc/inc/filter.inc:219 etc/inc/filter.inc:395 etc/inc/pkg-utils.inc:411 +#: etc/inc/pkg-utils.inc:648 etc/inc/pkg-utils.inc:658 +#: etc/inc/pkg-utils.inc:681 etc/inc/pkg-utils.inc:758 +#: etc/inc/pkg-utils.inc:773 etc/inc/pkg-utils.inc:817 +#: etc/inc/pkg-utils.inc:877 etc/inc/pkg-utils.inc:884 +#: etc/inc/pkg-utils.inc:901 etc/inc/pkg-utils.inc:917 +#: etc/inc/pkg-utils.inc:933 etc/inc/pkg-utils.inc:1040 +#: etc/inc/pkg-utils.inc:1057 etc/inc/pkg-utils.inc:1082 +#: etc/inc/pkg-utils.inc:1127 etc/inc/pkg-utils.inc:1136 +#: etc/inc/pkg-utils.inc:1146 etc/inc/pkg-utils.inc:1161 +#: etc/inc/pkg-utils.inc:1168 etc/inc/pkg-utils.inc:1187 +#: etc/inc/interfaces.inc:216 etc/inc/interfaces.inc:233 +#: etc/inc/interfaces.inc:365 etc/inc/interfaces.inc:422 +#: etc/inc/interfaces.inc:697 etc/inc/interfaces.inc:1033 +#: etc/inc/interfaces.inc:1054 etc/inc/interfaces.inc:1069 +#: etc/inc/interfaces.inc:1889 etc/inc/services.inc:1154 +#: etc/inc/services.inc:1499 etc/inc/services.inc:1596 +#: etc/inc/services.inc:1797 etc/inc/system.inc:712 etc/inc/system.inc:735 +#: etc/inc/system.inc:815 etc/inc/system.inc:1178 etc/inc/system.inc:1318 +#: etc/inc/system.inc:1457 etc/inc/rrd.inc:829 etc/inc/filter.inc:399 +#: etc/inc/interfaces.inc:1894 etc/inc/services.inc:1516 +#: etc/inc/services.inc:1628 etc/inc/services.inc:1837 etc/inc/rrd.inc:831 +#: etc/inc/services.inc:1659 etc/inc/services.inc:1868 etc/inc/rrd.inc:834 +#: etc/inc/filter.inc:219 etc/inc/filter.inc:399 etc/inc/pkg-utils.inc:411 +#: etc/inc/pkg-utils.inc:648 etc/inc/pkg-utils.inc:658 +#: etc/inc/pkg-utils.inc:681 etc/inc/pkg-utils.inc:758 +#: etc/inc/pkg-utils.inc:773 etc/inc/pkg-utils.inc:817 +#: etc/inc/pkg-utils.inc:848 etc/inc/pkg-utils.inc:877 +#: etc/inc/pkg-utils.inc:884 etc/inc/pkg-utils.inc:901 +#: etc/inc/pkg-utils.inc:917 etc/inc/pkg-utils.inc:933 +#: etc/inc/pkg-utils.inc:1040 etc/inc/pkg-utils.inc:1057 +#: etc/inc/pkg-utils.inc:1082 etc/inc/pkg-utils.inc:1127 +#: etc/inc/pkg-utils.inc:1136 etc/inc/pkg-utils.inc:1146 +#: etc/inc/pkg-utils.inc:1161 etc/inc/pkg-utils.inc:1168 +#: etc/inc/pkg-utils.inc:1187 etc/inc/interfaces.inc:216 +#: etc/inc/interfaces.inc:233 etc/inc/interfaces.inc:365 +#: etc/inc/interfaces.inc:422 etc/inc/interfaces.inc:697 +#: etc/inc/interfaces.inc:1005 etc/inc/interfaces.inc:1033 +#: etc/inc/interfaces.inc:1054 etc/inc/interfaces.inc:1069 +#: etc/inc/interfaces.inc:1894 etc/inc/services.inc:1212 +#: etc/inc/services.inc:1568 etc/inc/services.inc:1723 +#: etc/inc/services.inc:1932 etc/inc/system.inc:771 etc/inc/system.inc:794 +#: etc/inc/system.inc:874 etc/inc/system.inc:1237 etc/inc/system.inc:1377 +#: etc/inc/system.inc:1516 etc/inc/rrd.inc:834 +msgid "done." +msgstr "完了。" + +#: etc/inc/filter.inc:259 etc/inc/filter.inc:265 etc/inc/filter.inc:289 +#: etc/inc/filter.inc:269 etc/inc/filter.inc:269 +msgid "Setting up logging information" +msgstr "ログ情報ã®è¨­å®š" + +#: etc/inc/filter.inc:290 etc/inc/filter.inc:294 etc/inc/filter.inc:274 +#: etc/inc/filter.inc:274 +msgid "Setting up SCRUB information" +msgstr "SCRUB情報を設定ã™ã‚‹" + +#: etc/inc/filter.inc:336 etc/inc/filter.inc:338 etc/inc/filter.inc:341 +#: etc/inc/filter.inc:313 etc/inc/filter.inc:313 +#, php-format +msgid "The line in question reads [%1$d]: %2$s" +msgstr "%2$s:å•題ã®è¡Œã¯((%1$d))を読ã¿è¾¼ã¿" + +#: etc/inc/filter.inc:338 etc/inc/filter.inc:340 etc/inc/filter.inc:342 +#: etc/inc/filter.inc:343 etc/inc/filter.inc:345 etc/inc/filter.inc:316 +#: etc/inc/filter.inc:317 etc/inc/filter.inc:316 etc/inc/filter.inc:317 +#, php-format +msgid "There were error(s) loading the rules: %1$s - %2$s" +msgstr "ルールã®ãƒ­ãƒ¼ãƒ‰ä¸­ã«ã‚¨ãƒ©ãƒ¼ï¼ˆS)ãŒã‚りã¾ã—ãŸï¼š%1$s - %2$s" + +#: etc/inc/filter.inc:349 etc/inc/filter.inc:351 etc/inc/filter.inc:354 +#: etc/inc/filter.inc:324 etc/inc/filter.inc:324 +msgid "PF was wedged/busy and has been reset." +msgstr "PFã¯å¿™ã—ã„/押ã—è¾¼ã¾ã‚Œã€ãƒªã‚»ãƒƒãƒˆã•れã¾ã—ãŸã€‚" + +#: etc/inc/filter.inc:355 etc/inc/filter.inc:357 etc/inc/filter.inc:360 +#: etc/inc/filter.inc:329 etc/inc/filter.inc:333 etc/inc/filter.inc:333 +msgid "Starting up layer7 daemon" +msgstr "レイヤ7デーモンを起動" + +#: etc/inc/filter.inc:403 etc/inc/filter.inc:405 etc/inc/filter.inc:408 +#: etc/inc/filter.inc:380 etc/inc/filter.inc:384 etc/inc/filter.inc:384 +msgid "Processing down interface states" +msgstr "ç•Œé¢æº–ä½ã‚’下処ç†" + +#: etc/inc/filter.inc:407 etc/inc/filter.inc:409 etc/inc/filter.inc:412 +#: etc/inc/filter.inc:384 etc/inc/filter.inc:388 etc/inc/filter.inc:388 +msgid "Running plugins" +msgstr "プラグインを実行ã—ã¦ã„ã‚‹" + +#: etc/inc/filter.inc:411 etc/inc/filter.inc:413 etc/inc/filter.inc:416 +#: etc/inc/filter.inc:388 etc/inc/filter.inc:392 etc/inc/filter.inc:392 +msgid "Running plugins (pf)" +msgstr "実行ã•れã¦ã„るプラグイン(PF)" + +#: etc/inc/filter.inc:413 etc/inc/filter.inc:415 etc/inc/filter.inc:418 +#: etc/inc/filter.inc:390 etc/inc/filter.inc:394 etc/inc/filter.inc:394 +msgid "Plugins completed." +msgstr "プラグイン完了" + +#: etc/inc/filter.inc:416 usr/local/www/restart_httpd.php:52 +#: usr/local/www/restart_httpd.php:55 usr/local/www/restart_httpd.php:58 +#: usr/local/www/restart_httpd.php:61 etc/inc/filter.inc:418 +#: etc/inc/filter.inc:421 etc/inc/filter.inc:393 etc/inc/filter.inc:397 +#: usr/local/www/restart_httpd.php:52 usr/local/www/restart_httpd.php:55 +#: usr/local/www/restart_httpd.php:58 usr/local/www/restart_httpd.php:61 +#: etc/inc/filter.inc:397 +msgid "Done" +msgstr "行ã†" + +#: etc/inc/filter.inc:636 etc/inc/filter.inc:649 etc/inc/filter.inc:652 +#: etc/inc/filter.inc:641 etc/inc/filter.inc:657 etc/inc/filter.inc:652 +msgid "Creating gateway group item..." +msgstr "ゲートウェイ·グループ項目を作æˆã—ã¦ã„ã¾ã™..." + +#: etc/inc/filter.inc:666 etc/inc/filter.inc:681 etc/inc/filter.inc:684 +#: etc/inc/filter.inc:673 etc/inc/filter.inc:687 etc/inc/filter.inc:692 +#: etc/inc/filter.inc:687 +#, php-format +msgid "Setting up route with %1$s on %2$s" +msgstr "%2$sã®ä¸Šã®%1$sã§ãƒ«ãƒ¼ãƒˆã‚’設定ã™ã‚‹" + +#: etc/inc/filter.inc:673 etc/inc/filter.inc:688 etc/inc/filter.inc:691 +#: etc/inc/filter.inc:680 etc/inc/filter.inc:694 etc/inc/filter.inc:699 +#: etc/inc/filter.inc:694 +#, php-format +msgid "" +"An error occurred while trying to find the interface got %s . The rule has " +"not been added." +msgstr ""インタフェースã¯%sã‚’æŒã£è¦‹ã¤ã‘よã†ã¨ã—ã¦ã„ã‚‹ã¨ãã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"ルールãŒè¿½åŠ ã•れã¦ã„ã¾ã›ã‚“。" + +#: etc/inc/filter.inc:937 etc/inc/filter.inc:987 etc/inc/filter.inc:975 +#: etc/inc/filter.inc:1009 etc/inc/filter.inc:1027 etc/inc/filter.inc:1032 +#: etc/inc/filter.inc:1027 +#, php-format +msgid "Creating reflection NAT rule for %s..." +msgstr "%sã®ãŸã‚ã®åå°„NATルールを作æˆã—ã¦ã„ã¾ã™..." + +#: etc/inc/filter.inc:991 etc/inc/filter.inc:1076 etc/inc/filter.inc:1064 +#: etc/inc/filter.inc:1098 etc/inc/filter.inc:1116 etc/inc/filter.inc:1121 +#: etc/inc/filter.inc:1116 +#, php-format +msgid "Creating reflection rule for %s..." +msgstr "%sã®ãŸã‚ã®åå°„ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ã¦ã„ã¾ã™..." + +#: etc/inc/filter.inc:1251 etc/inc/filter.inc:1338 etc/inc/filter.inc:1326 +#: etc/inc/filter.inc:1360 etc/inc/filter.inc:1378 etc/inc/filter.inc:1383 +#: etc/inc/filter.inc:1378 +msgid "Creating 1:1 rules..." +msgstr "1:1ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ã¦ã„ã¾ã™..." + +#: etc/inc/filter.inc:1350 etc/inc/filter.inc:1437 etc/inc/filter.inc:1454 +#: etc/inc/filter.inc:1501 etc/inc/filter.inc:1519 etc/inc/filter.inc:1524 +#: etc/inc/filter.inc:1519 +#, php-format +msgid "Creating advanced outbound rule %s" +msgstr "高度ãªã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰ãƒ«ãƒ¼ãƒ«%sを作æˆ" + +#: etc/inc/filter.inc:1386 etc/inc/filter.inc:1473 etc/inc/filter.inc:1490 +#: etc/inc/filter.inc:1533 etc/inc/filter.inc:1551 etc/inc/filter.inc:1556 +#: etc/inc/filter.inc:1551 +msgid "Creating outbound NAT rules" +msgstr "アウトãƒã‚¦ãƒ³ãƒ‰NATルールを作æˆã™ã‚‹" + +#: etc/inc/filter.inc:1481 etc/inc/filter.inc:1566 etc/inc/filter.inc:1583 +#: etc/inc/filter.inc:1626 etc/inc/filter.inc:1644 etc/inc/filter.inc:1649 +#: etc/inc/filter.inc:1644 +#, php-format +msgid "Creating outbound rules %1$s - (%2$s)" +msgstr "%1$s - (%2$s) をアウトãƒã‚¦ãƒ³ãƒ‰ãƒ«ãƒ¼ãƒ«ã®ä½œæˆ" + +#: etc/inc/filter.inc:1499 etc/inc/filter.inc:1584 etc/inc/filter.inc:1601 +#: etc/inc/filter.inc:1644 etc/inc/filter.inc:1662 etc/inc/filter.inc:1667 +#: etc/inc/filter.inc:1662 +msgid "Setting up TFTP helper" +msgstr "TFTPヘルパーã®è¨­å®š" + +#: etc/inc/filter.inc:1545 etc/inc/filter.inc:1630 etc/inc/filter.inc:1644 +#: etc/inc/filter.inc:1676 etc/inc/filter.inc:1694 etc/inc/filter.inc:1699 +#: etc/inc/filter.inc:1694 +#, php-format +msgid "Creating NAT rule %s" +msgstr "NATルール%sã¯ä½œæˆ" + +#: etc/inc/filter.inc:1689 etc/inc/filter.inc:1837 etc/inc/filter.inc:1850 +#: etc/inc/filter.inc:1882 etc/inc/filter.inc:1900 etc/inc/filter.inc:1905 +#: etc/inc/filter.inc:1900 +#, php-format +msgid "Creating filter rule %s ..." +msgstr "フィルタルール%sã¯ä½œæˆ..." + +#: etc/inc/filter.inc:1827 etc/inc/filter.inc:1975 etc/inc/filter.inc:1988 +#: etc/inc/filter.inc:2024 etc/inc/filter.inc:2054 etc/inc/filter.inc:2059 +#: etc/inc/filter.inc:2054 +#, php-format +msgid "filter_generate_address: %s is not a valid source port." +msgstr "filter_generate_address:%sã‚’ã€æœ‰åйãªé€ä¿¡å…ƒãƒãƒ¼ãƒˆã§ã¯ã‚りã¾ã›ã‚“。" + +#: etc/inc/filter.inc:1943 etc/inc/filter.inc:2094 etc/inc/filter.inc:2107 +#: etc/inc/filter.inc:2142 etc/inc/filter.inc:2172 etc/inc/filter.inc:2177 +#: etc/inc/filter.inc:2172 +#, php-format +msgid "Setting up pass/block rules %s" +msgstr "パス/ブロックルール%sã®è¨­å®š" + +#: etc/inc/filter.inc:1962 etc/inc/filter.inc:2113 etc/inc/filter.inc:2126 +#: etc/inc/filter.inc:2157 etc/inc/filter.inc:2187 etc/inc/filter.inc:2192 +#: etc/inc/filter.inc:2187 +#, php-format +msgid "Could not find IPv4 gateway for interface (%s)." +msgstr "インターフェイスã®IPv4ゲートウェイ(%s)を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/filter.inc:1989 etc/inc/filter.inc:2140 etc/inc/filter.inc:2153 +#: etc/inc/filter.inc:2182 etc/inc/filter.inc:2214 etc/inc/filter.inc:2219 +#: etc/inc/filter.inc:2214 +#, php-format +msgid "Creating rule %s" +msgstr "ルール%sを作æˆä¸­" + +#: etc/inc/filter.inc:2198 etc/inc/filter.inc:2355 etc/inc/filter.inc:2378 +#: etc/inc/filter.inc:2407 etc/inc/filter.inc:2439 etc/inc/filter.inc:2444 +#: etc/inc/filter.inc:2439 +msgid "Creating default rules" +msgstr "デフォルトã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆä¸­" + +#: etc/inc/filter.inc:2649 etc/inc/filter.inc:2862 etc/inc/filter.inc:2887 +#: etc/inc/filter.inc:2976 etc/inc/filter.inc:3000 etc/inc/filter.inc:3005 +#: etc/inc/filter.inc:3000 +msgid "Creating IPsec rules..." +msgstr "IPsecã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆä¸­..." + +#: etc/inc/filter.inc:2702 etc/inc/filter.inc:2915 etc/inc/filter.inc:2940 +#: etc/inc/filter.inc:3026 etc/inc/filter.inc:3050 etc/inc/filter.inc:3055 +#: etc/inc/filter.inc:3050 +msgid "" +"Please use filter_tdr_install_cron() function tdr_install_cron will be " +"deprecated!" +msgstr ""filter_tdr_install_cron.() を使用ã—ã¦ãã ã•ã„æ©Ÿèƒ½tdr_install_cronã¯ã¯å»ƒæ­¢ã•れã¾ã™ï¼" + +#: etc/inc/filter.inc:2747 etc/inc/filter.inc:2960 etc/inc/filter.inc:2986 +#: etc/inc/filter.inc:3072 etc/inc/filter.inc:3096 etc/inc/filter.inc:3101 +#: etc/inc/filter.inc:3096 +msgid "Installed 15 minute filter reload for Time Based Rules" +msgstr "時間ベースã®ãƒ«ãƒ¼ãƒ«ã®ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•15分ã®ãƒ•ィルターリロード" + +#: etc/inc/filter.inc:3102 etc/inc/filter.inc:3313 etc/inc/filter.inc:3293 +#: etc/inc/filter.inc:3389 etc/inc/filter.inc:3413 etc/inc/filter.inc:3418 +#: etc/inc/filter.inc:3412 +#, php-format +msgid "Checking for %1$s PF hooks in package %2$s" +msgstr "パッケージ%2$sを処ç†%1$s PFフックã®ãƒã‚§ãƒƒã‚¯" + +#: etc/inc/filter.inc:3107 etc/inc/filter.inc:3318 etc/inc/filter.inc:3299 +#: etc/inc/filter.inc:3395 etc/inc/filter.inc:3419 etc/inc/filter.inc:3424 +#: etc/inc/filter.inc:3418 +#, php-format +msgid "Processing early %1$s rules for package %2$s" +msgstr "パッケージ%2$sを早期%1$sã®ãƒ«ãƒ¼ãƒ«ã®å‡¦ç†" + +#: etc/inc/filter.inc:3112 etc/inc/filter.inc:3323 etc/inc/filter.inc:3304 +#: etc/inc/filter.inc:3400 etc/inc/filter.inc:3424 etc/inc/filter.inc:3429 +#: etc/inc/filter.inc:3423 +#, php-format +msgid "There was an error while parsing the package filter rules for %s." +msgstr "%sã®ãƒ‘ッケージフィルタルール解æžä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: etc/inc/interfaces.inc:51 etc/inc/interfaces.inc:53 +#: etc/inc/interfaces.inc:51 +msgid "interfaces_bring_up() was called but no variable defined." +msgstr "interfaces_bring_up.() ãŒå‘¼ã³å‡ºã•ã—ã‹ã—ã€èª°å¤‰æ•°ãŒå®šç¾©ã•れã¦ã„ãªã‹ã£ãŸã€‚" + +#: etc/inc/interfaces.inc:213 etc/inc/interfaces.inc:215 +#: etc/inc/interfaces.inc:214 etc/inc/interfaces.inc:212 +#: etc/inc/interfaces.inc:212 +msgid "Configuring loopback interface..." +msgstr "ループãƒãƒƒã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを設定中..." + +#: etc/inc/interfaces.inc:224 etc/inc/interfaces.inc:226 +#: etc/inc/interfaces.inc:225 etc/inc/interfaces.inc:223 +#: etc/inc/interfaces.inc:223 +msgid "Configuring VLAN interfaces..." +msgstr "VLANインターフェイスを設定中..." + +#: etc/inc/interfaces.inc:241 etc/inc/interfaces.inc:243 +#: etc/inc/interfaces.inc:242 etc/inc/interfaces.inc:240 +#: etc/inc/interfaces.inc:240 +msgid "VLAN: called with wrong options. Problems with config!" +msgstr "VLAN:間é•ã£ãŸã‚ªãƒ—ションを使用ã—ã¦å‘¼ã³å‡ºã•。設定ã«å•題ãŒï¼" + +#: etc/inc/interfaces.inc:249 +msgid "interface_vlan_confgure called with if undefined." +msgstr "定義ã•れã¦ã„ãªã„å ´åˆã§å‘¼ã³å‡ºã•れinterface_vlan_confgure。" + +#: etc/inc/interfaces.inc:283 etc/inc/interfaces.inc:367 +#: etc/inc/interfaces.inc:285 etc/inc/interfaces.inc:369 +#: etc/inc/interfaces.inc:284 etc/inc/interfaces.inc:368 +#: etc/inc/interfaces.inc:282 etc/inc/interfaces.inc:372 +#: etc/inc/interfaces.inc:282 etc/inc/interfaces.inc:372 +#, php-format +msgid "QinQ compat VLAN: called with wrong options. Problems with config!%s" +msgstr "QinQã®äº’æ›VLAN:間é•ã£ãŸã‚ªãƒ—ションを使用ã—ã¦å‘¼ã³å‡ºã•。設定ã«å•題ãŒï¼%s" + +#: etc/inc/interfaces.inc:290 etc/inc/interfaces.inc:375 +#, php-format +msgid "interface_qinq_confgure called with if undefined.%s" +msgstr "ã¨å‘¼ã°interface_qinq_confgureå ´åˆundefined.%s" + +#: etc/inc/interfaces.inc:352 etc/inc/interfaces.inc:354 +#: etc/inc/interfaces.inc:353 etc/inc/interfaces.inc:357 +#: etc/inc/interfaces.inc:357 +msgid "Configuring QinQ interfaces..." +msgstr "QinQサブインターフェイスã®è¨­å®š..." + +#: etc/inc/interfaces.inc:396 etc/inc/interfaces.inc:398 +#: etc/inc/interfaces.inc:397 +msgid "Creating other wireless clone interfaces..." +msgstr "ä»–ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ³Â·ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを作æˆä¸­..." + +#: etc/inc/interfaces.inc:439 etc/inc/interfaces.inc:438 +#: etc/inc/interfaces.inc:437 etc/inc/interfaces.inc:466 +#: etc/inc/interfaces.inc:466 +#, php-format +msgid "No members found on %s" +msgstr "%sã«ã¯ãƒ¡ãƒ³ãƒãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/interfaces.inc:505 etc/inc/interfaces.inc:512 +#: etc/inc/interfaces.inc:511 etc/inc/interfaces.inc:541 +#: etc/inc/interfaces.inc:541 +msgid "realif not defined in interfaces bridge - up" +msgstr "realifインターフェースブリッジã§å®šç¾©ã•れã¦ã„ã¾ã›ã‚“ - アップ" + +#: etc/inc/interfaces.inc:618 etc/inc/interfaces.inc:625 +#: etc/inc/interfaces.inc:624 etc/inc/interfaces.inc:654 +#: etc/inc/interfaces.inc:654 +msgid "bridgeif not defined -- could not bring interface up" +msgstr "bridgeif定義ã•れã¦ã„ãªã„ - インタフェースをæŒã¡å‡ºã™ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/interfaces.inc:652 etc/inc/interfaces.inc:659 +#: etc/inc/interfaces.inc:658 etc/inc/interfaces.inc:685 +#: etc/inc/interfaces.inc:685 +msgid "Configuring LAGG interfaces..." +msgstr "LAGGインターフェイスã®è¨­å®š..." + +#: etc/inc/interfaces.inc:790 etc/inc/interfaces.inc:801 +#: etc/inc/interfaces.inc:800 etc/inc/interfaces.inc:835 +#: etc/inc/interfaces.inc:835 +msgid "Could not bring greif up -- variable not defined." +msgstr "変数定義ã•れã¦ã„ã¾ã›ã‚“ - 最大グライフãªã‚Œãªã‹ã£ãŸã€‚" + +#: etc/inc/interfaces.inc:833 etc/inc/interfaces.inc:851 +#: etc/inc/interfaces.inc:850 etc/inc/interfaces.inc:899 +#: etc/inc/interfaces.inc:899 +msgid "" +"could not bring realif up -- variable not defined -- " +"interface_gif_configure()" +msgstr ""変数ã«å®šç¾©ã•れã¦ã„ãªã„ - - interface_gif_configure.()"を最大realifãªã‚Œãªã‹ã£ãŸ" + +#: etc/inc/interfaces.inc:856 etc/inc/interfaces.inc:874 +#: etc/inc/interfaces.inc:873 etc/inc/interfaces.inc:922 +#: etc/inc/interfaces.inc:922 +msgid "could not bring gifif up -- variable not defined" +msgstr "変数定義ã•れã¦ã„ã¾ã›ã‚“ - 最大gififãªã‚Œãªã‹ã£ãŸ" + +#: etc/inc/interfaces.inc:919 etc/inc/interfaces.inc:957 +#: etc/inc/interfaces.inc:972 etc/inc/interfaces.inc:945 +#: etc/inc/interfaces.inc:984 etc/inc/interfaces.inc:999 +#: etc/inc/interfaces.inc:944 etc/inc/interfaces.inc:983 +#: etc/inc/interfaces.inc:998 etc/inc/interfaces.inc:1026 +#: etc/inc/interfaces.inc:1047 etc/inc/interfaces.inc:1062 +#: etc/inc/interfaces.inc:999 etc/inc/interfaces.inc:1026 +#: etc/inc/interfaces.inc:1047 etc/inc/interfaces.inc:1062 +#, php-format +msgid "Configuring %s interface..." +msgstr "%sã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを設定中..." + +#: etc/inc/interfaces.inc:921 etc/inc/interfaces.inc:959 +#: etc/inc/interfaces.inc:974 etc/inc/interfaces.inc:948 +#: etc/inc/interfaces.inc:986 etc/inc/interfaces.inc:1001 +#: etc/inc/interfaces.inc:947 etc/inc/interfaces.inc:985 +#: etc/inc/interfaces.inc:1000 etc/inc/interfaces.inc:1002 +#: etc/inc/interfaces.inc:1028 etc/inc/interfaces.inc:1049 +#: etc/inc/interfaces.inc:1064 etc/inc/interfaces.inc:1002 +#: etc/inc/interfaces.inc:1028 etc/inc/interfaces.inc:1049 +#: etc/inc/interfaces.inc:1064 +#, php-format +msgid "Configuring %s" +msgstr "%s を設定中" + +#: etc/inc/interfaces.inc:1299 etc/inc/interfaces.inc:1339 +#: etc/inc/interfaces.inc:1338 etc/inc/interfaces.inc:1407 +#: etc/inc/interfaces.inc:1412 etc/inc/interfaces.inc:1412 +#, php-format +msgid "Can't find PPP config for %s in interface_ppps_configure()." +msgstr "interface_ppps_configure.() を処ç†%sã®PPP設定を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/interfaces.inc:1362 etc/inc/interfaces.inc:1402 +#: etc/inc/interfaces.inc:1401 etc/inc/interfaces.inc:1464 +#: etc/inc/interfaces.inc:1469 etc/inc/interfaces.inc:1469 +#, php-format +msgid "" +"Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in " +"interfaces_ppps_configure." +msgstr ""interfaces_ppps_configure中%2$sã‚’ãŸã‚%1$sã‹ã‚‰PPTP/L2TPリモート"IPアドレスをå–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/interfaces.inc:1369 etc/inc/interfaces.inc:1409 +#: etc/inc/interfaces.inc:1408 etc/inc/interfaces.inc:1471 +#: etc/inc/interfaces.inc:1476 etc/inc/interfaces.inc:1476 +#, php-format +msgid "" +"Device %s does not exist. PPP link cannot start without the modem device." +msgstr ""デãƒã‚¤ã‚¹%sã¯å­˜åœ¨ã—ã¾ã›ã‚“。 PPPリンクã¯ã€ãƒ¢ãƒ‡ãƒ è£…ç½®ãªã—ã§é–‹å§‹ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: etc/inc/interfaces.inc:1374 etc/inc/interfaces.inc:1414 +#: etc/inc/interfaces.inc:1413 etc/inc/interfaces.inc:1476 +#: etc/inc/interfaces.inc:1481 etc/inc/interfaces.inc:1481 +#, php-format +msgid "Unkown %s configured as ppp interface." +msgstr "UNKOWN %sã¯ã€PPPインターフェイスã¨ã—ã¦è¨­å®šã€‚" + +#: etc/inc/interfaces.inc:1641 etc/inc/interfaces.inc:1686 +#: etc/inc/interfaces.inc:1685 etc/inc/interfaces.inc:1748 +#: etc/inc/interfaces.inc:1753 etc/inc/interfaces.inc:1753 +#, php-format +msgid "Error: cannot open mpd_%s.conf in interface_ppps_configure().%s" +msgstr "エラー:interface_ppps_configure.().%s を処ç†mpd_%s.confé–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/interfaces.inc:1702 etc/inc/interfaces.inc:1771 +#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1828 +#: etc/inc/interfaces.inc:1833 etc/inc/interfaces.inc:1833 +msgid "Configuring CARP settings..." +msgstr "CARPを設定中..." + +#: etc/inc/interfaces.inc:1723 etc/inc/interfaces.inc:1788 +#: etc/inc/interfaces.inc:1787 +msgid "Enable CARP ARP-balancing" +msgstr "CARP ARPãƒãƒ©ãƒ³ã‚¹ã‚’有効ã«ã™ã‚‹" + +#: etc/inc/interfaces.inc:1724 etc/inc/interfaces.inc:1789 +#: etc/inc/interfaces.inc:1788 +msgid "Disallow CARP preemption" +msgstr "CARPãƒ—ãƒªã‚¨ãƒ³ãƒ—ã‚·ãƒ§ãƒ³ã‚’ç¦æ­¢ã™ã‚‹" + +#: etc/inc/interfaces.inc:1726 etc/inc/interfaces.inc:1791 +#: etc/inc/interfaces.inc:1790 +msgid "Enable CARP preemption" +msgstr "CARPプリエンプションを有効ã«ã™ã‚‹" + +#: etc/inc/interfaces.inc:1728 etc/inc/interfaces.inc:1793 +#: etc/inc/interfaces.inc:1792 +msgid "Enable CARP logging" +msgstr "CARPã®ãƒ­ã‚°ã‚’有効ã«ã™ã‚‹" + +#: etc/inc/interfaces.inc:1744 etc/inc/interfaces.inc:1809 +#: etc/inc/interfaces.inc:1808 +msgid "Could not create rules.boot file!" +msgstr "rules.bootファイルを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸï¼" + +#: etc/inc/interfaces.inc:1750 etc/inc/interfaces.inc:1815 +#: etc/inc/interfaces.inc:1814 +msgid "Bring up pfsync0 syncpeer" +msgstr "pfsync0ã®syncpeerã‚’æŒã¡å‡ºã™" + +#: etc/inc/interfaces.inc:1752 etc/inc/interfaces.inc:1817 +#: etc/inc/interfaces.inc:1816 +msgid "Bring up pfsync0 syncdev" +msgstr "pfsync0ã®syncdevã‚’æŒã¡å‡ºã™" + +#: etc/inc/interfaces.inc:1754 etc/inc/interfaces.inc:1819 +#: etc/inc/interfaces.inc:1818 +msgid "Bring up pfsync0" +msgstr "pfsync0ã‚’æŒã¡å‡ºã™" + +#: etc/inc/interfaces.inc:1768 etc/inc/interfaces.inc:1833 +#: etc/inc/interfaces.inc:1837 +msgid "Allow CARP." +msgstr "CARPを許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1835 +#: etc/inc/interfaces.inc:1839 +msgid "Disallow CARP." +msgstr "CARPã‚’ç¦æ­¢ã€‚" + +#: etc/inc/interfaces.inc:1963 etc/inc/interfaces.inc:2038 +#: etc/inc/interfaces.inc:2020 etc/inc/interfaces.inc:2099 +#: etc/inc/interfaces.inc:2016 etc/inc/interfaces.inc:2056 +#: etc/inc/interfaces.inc:2061 etc/inc/interfaces.inc:2061 +#, php-format +msgid "" +"Interface specified for the virtual IP address %s does not exist. Skipping " +"this VIP." +msgstr ""仮想IPアドレス%sã«æŒ‡å®šã•れãŸã‚¤ãƒ³ã‚¿ãƒ•ェースãŒå­˜åœ¨ã—ã¾ã›ã‚“。ã“ã®VIPをスキップã™ã‚‹ã€‚" + +#: etc/inc/interfaces.inc:1972 etc/inc/interfaces.inc:2029 +#: etc/inc/interfaces.inc:2025 etc/inc/interfaces.inc:2065 +#: etc/inc/interfaces.inc:2070 etc/inc/interfaces.inc:2070 +#, php-format +msgid "" +"Sorry but we could not find a matching real interface subnet for the virtual " +"IP address %s." +msgstr ""申ã—訳ã‚りã¾ã›ã‚“ãŒã€æˆ‘々ã¯ä»®æƒ³IPv4アドレス%sã®ãƒžãƒƒãƒãƒ³ã‚°å®Ÿéš›"ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’見ã¤ã‘られã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/interfaces.inc:1981 etc/inc/interfaces.inc:2038 +#: etc/inc/interfaces.inc:2034 etc/inc/interfaces.inc:2074 +#: etc/inc/interfaces.inc:2079 etc/inc/interfaces.inc:2079 +#, php-format +msgid "" +"Sorry but we could not find a matching real interface subnet for the virtual " +"IPv6 address %s." +msgstr ""申ã—訳ã‚りã¾ã›ã‚“ãŒã€æˆ‘々ã¯ä»®æƒ³IPv6アドレス%sã®ãƒžãƒƒãƒãƒ³ã‚°å®Ÿéš›"ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’見ã¤ã‘られã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/interfaces.inc:2084 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interfaces_carpdev_configure() for " +"writing.%s" +msgstr ""エラー:writing.%s用interfaces_carpdev_configure.()を処ç†dhclient_%s.confã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/interfaces.inc:2117 etc/inc/interfaces.inc:2185 +#: etc/inc/interfaces.inc:2104 etc/inc/interfaces.inc:2144 +#: etc/inc/interfaces.inc:2149 etc/inc/interfaces.inc:2149 +#, php-format +msgid "Interface %s changed to hostap mode" +msgstr "インターフェース%sã‚’hostapモードã«å¤‰æ›´" + +#: etc/inc/interfaces.inc:2121 etc/inc/interfaces.inc:2189 +#: etc/inc/interfaces.inc:2108 etc/inc/interfaces.inc:2148 +#: etc/inc/interfaces.inc:2153 etc/inc/interfaces.inc:2153 +#, php-format +msgid "Interface %s changed to adhoc mode" +msgstr "インターフェース%sã¯ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã«å¤‰æ›´" + +#: etc/inc/interfaces.inc:2125 etc/inc/interfaces.inc:2193 +#: etc/inc/interfaces.inc:2112 etc/inc/interfaces.inc:2152 +#: etc/inc/interfaces.inc:2157 etc/inc/interfaces.inc:2157 +#, php-format +msgid "Interface %s changed to infrastructure mode" +msgstr "インターフェース%sアドホックモードã«å¤‰æ›´" + +#: etc/inc/interfaces.inc:2137 etc/inc/interfaces.inc:2205 +#: etc/inc/interfaces.inc:2124 etc/inc/interfaces.inc:2164 +#: etc/inc/interfaces.inc:2169 etc/inc/interfaces.inc:2169 +#, php-format +msgid "Cloning new wireless interface %s" +msgstr "æ–°ã—ã„無線インタフェース%sã®ã‚¯ãƒ­ãƒ¼ãƒ³ä½œæˆ" + +#: etc/inc/interfaces.inc:2142 etc/inc/interfaces.inc:2210 +#: etc/inc/interfaces.inc:2129 etc/inc/interfaces.inc:2169 +#: etc/inc/interfaces.inc:2174 etc/inc/interfaces.inc:2174 +#, php-format +msgid "Failed to clone interface %1$s with error code %2$s, output %3$s" +msgstr "エラーコード%2$sã€å‡ºåŠ›%3$sã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã¯%1$sã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2790 +#: etc/inc/interfaces.inc:2709 etc/inc/interfaces.inc:2761 +#: etc/inc/interfaces.inc:2784 etc/inc/interfaces.inc:2784 +msgid "Generating new MAC address." +msgstr "æ–°ã—ã„MACアドレスを生æˆã™ã‚‹ã€‚" + +#: etc/inc/interfaces.inc:2721 etc/inc/interfaces.inc:2796 +#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2767 +#: etc/inc/interfaces.inc:2790 etc/inc/interfaces.inc:2790 +#, php-format +msgid "" +"The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been " +"automatically replaced with %2$s" +msgstr ""無効ãªMACアドレスã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã¯%1$s上(ff:ff:ff:ff:ff:ff)"ãŒè‡ªå‹•çš„%2$sã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸ" + +#: etc/inc/interfaces.inc:2910 +msgid "Could not bring wanif up in terface_carpdev_dhcp_configure()" +msgstr "terface_carpdev_dhcp_configure.() を処ç†wanifã‚’æŒã¡å‡ºã™ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/interfaces.inc:3016 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interfaces_wan_dhcp_configure() for " +"writing.%s" +msgstr ""エラー:writing.%sãŸã‚ interfaces_wan_dhcp_configure.() ã«dhclient_%s.conf"ã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“" + +msgstr ""エラー:writing.%sãŸã‚ interfaces_wan_dhcp_configure.() ã«dhclient_%s.conf"ã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/interfaces.inc:3029 etc/inc/interfaces.inc:3513 +#: etc/inc/interfaces.inc:3373 etc/inc/interfaces.inc:3466 +#: etc/inc/interfaces.inc:3593 etc/inc/interfaces.inc:3538 +#: etc/inc/interfaces.inc:3538 +#, php-format +msgid "Invalid interface "%s" in interface_dhcp_configure()" +msgstr "interface_dhcp_configure.() 内ã®ç„¡åйãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス"%s"" + +#: etc/inc/interfaces.inc:3064 etc/inc/interfaces.inc:3548 +#: etc/inc/interfaces.inc:3408 etc/inc/interfaces.inc:3501 +#: etc/inc/interfaces.inc:3628 etc/inc/interfaces.inc:3573 +#: etc/inc/interfaces.inc:3573 +#, php-format +msgid "Could not bring up %s interface in interface_dhcp_configure()" +msgstr "interface_dhcp_configure.() ã§%sã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを起動ã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/notices.inc:76 etc/inc/notices.inc:76 +#, php-format +msgid "Could not open %s for writing" +msgstr "書ãè¾¼ã¿ç”¨%sã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/notices.inc:327 etc/inc/notices.inc:327 +#, php-format +msgid "Message sent to %s OK" +msgstr "((OK))ã‚’%sã¯ã«é€ä¿¡ã•れãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" + +#: etc/inc/notices.inc:330 etc/inc/notices.inc:331 etc/inc/notices.inc:330 +#: etc/inc/notices.inc:331 +#, php-format +msgid "Could not send the message to %1$s -- Error: %2$s" +msgstr "%1$sã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã§ãã¾ã›ã‚“ã§ã—㟠- エラー:%2$s" + +#: etc/inc/openvpn.inc:83 etc/inc/openvpn.inc:90 etc/inc/openvpn.inc:81 +#: etc/inc/openvpn.inc:88 etc/inc/openvpn.inc:81 etc/inc/openvpn.inc:88 +msgid "Peer to Peer ( SSL/TLS )" +msgstr "ピア·ツー·ピア(SSL / TLS)" + +#: etc/inc/openvpn.inc:84 etc/inc/openvpn.inc:91 etc/inc/openvpn.inc:82 +#: etc/inc/openvpn.inc:89 etc/inc/openvpn.inc:82 etc/inc/openvpn.inc:89 +msgid "Peer to Peer ( Shared Key )" +msgstr "ピアツーピア(共有éµï¼‰" + +#: etc/inc/openvpn.inc:85 etc/inc/openvpn.inc:83 etc/inc/openvpn.inc:83 +msgid "Remote Access ( SSL/TLS )" +msgstr "リモートアクセス ( SSL/TLS )" + +#: etc/inc/openvpn.inc:86 etc/inc/openvpn.inc:84 etc/inc/openvpn.inc:84 +msgid "Remote Access ( User Auth )" +msgstr "リモートアクセス(ユーザèªè¨¼ï¼‰" + +#: etc/inc/openvpn.inc:87 etc/inc/openvpn.inc:85 etc/inc/openvpn.inc:85 +msgid "Remote Access ( SSL/TLS + User Auth )" +msgstr "リモートアクセス ( SSL/TLS + ユーザèªè¨¼)" + +#: etc/inc/openvpn.inc:179 etc/inc/openvpn.inc:177 etc/inc/openvpn.inc:195 +#: etc/inc/openvpn.inc:195 +msgid "None (No Encryption)" +msgstr "ãªã—(暗å·åŒ–ãªã—)" + +#: etc/inc/openvpn.inc:203 etc/inc/openvpn.inc:201 etc/inc/openvpn.inc:238 +#: etc/inc/openvpn.inc:238 +#, php-format +msgid "The field '%s' must contain a valid IP address or domain name." +msgstr "フィールド㌠'%s'ã¯æœ‰åйãªIPアドレスã¾ãŸã¯ãƒ‰ãƒ¡ã‚¤ãƒ³åãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/openvpn.inc:210 etc/inc/openvpn.inc:208 etc/inc/openvpn.inc:245 +#: etc/inc/openvpn.inc:245 +#, php-format +msgid "The field '%s' must contain a valid port, ranging from 0 to 65535." +msgstr "フィールド㌠'%s'ã¯0〜65535ç¯„å›²ã€æœ‰åйãªãƒãƒ¼ãƒˆãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/openvpn.inc:219 etc/inc/openvpn.inc:217 +#, php-format +msgid "The field '%s' must contain a valid CIDR range." +msgstr "フィールド㌠'%s'ã¯æœ‰åйãªCIDR範囲ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/pfsense-utils.inc:345 etc/inc/pfsense-utils.inc:330 +#: etc/inc/pfsense-utils.inc:330 +msgid "MASTER" +# ikenote: not sure if this is the best word to use? +msgstr "マスター" + +#: etc/inc/pfsense-utils.inc:347 etc/inc/pfsense-utils.inc:332 +#: etc/inc/pfsense-utils.inc:332 +msgid "BACKUP" +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—" + +#: etc/inc/pfsense-utils.inc:349 etc/inc/pfsense-utils.inc:334 +#: etc/inc/pfsense-utils.inc:334 +msgid "INIT" +# ikenote: not sure if this is the best word to use? +msgstr "イニシャライズ" + +#: etc/inc/pfsense-utils.inc:417 etc/inc/pfsense-utils.inc:402 +#: etc/inc/pfsense-utils.inc:402 +msgid "After synch increase advertising skew" +msgstr "後ã®åŒæœŸã®å¢—加広告スキュー" + +#: etc/inc/pfsense-utils.inc:462 etc/inc/pfsense-utils.inc:447 +#: etc/inc/pfsense-utils.inc:447 +msgid "Error creating socket!" +msgstr "エラーソケットを作æˆã™ã‚‹ï¼" + +#: etc/inc/pfsense-utils.inc:463 etc/inc/pfsense-utils.inc:448 +#: etc/inc/pfsense-utils.inc:448 +#, php-format +msgid "Error code is '%1$s' - %2$s" +msgstr "'%2$s' - エラーコードã¯'%1$s'ã§ã™" + +#: etc/inc/pfsense-utils.inc:468 etc/inc/pfsense-utils.inc:453 +#: etc/inc/pfsense-utils.inc:453 +#, php-format +msgid "setsockopt() failed, error: %s" +msgstr "%s :setsockopt.() ã€ã‚¨ãƒ©ãƒ¼ã€éšœå®³ãŒç™ºç”Ÿã—ãŸ" + +#: etc/inc/pfsense-utils.inc:471 etc/inc/pfsense-utils.inc:456 +#: etc/inc/pfsense-utils.inc:456 +#, php-format +msgid "Magic Packet sent (%1$s) to {%2$s} MAC=%3$s" +msgstr "マジックパケットã¯ã€MAC=%3$sã‚’{%2$s}ã™ã‚‹ã¯(%1$s)ã‚’é€ã£ãŸ" + +#: etc/inc/pfsense-utils.inc:518 etc/inc/pfsense-utils.inc:540 +#: etc/inc/pfsense-utils.inc:533 etc/inc/pfsense-utils.inc:555 +#: etc/inc/pfsense-utils.inc:518 etc/inc/pfsense-utils.inc:540 +#, php-format +msgid "Restored %s of config file (maybe from CARP partner)" +msgstr "configファイルã®å¾©å…ƒ%sã¯ï¼ˆå¤šåˆ†CARPパートナーã‹ã‚‰ï¼‰" + +#: etc/inc/pfsense-utils.inc:699 etc/inc/pfsense-utils.inc:714 +#: etc/inc/pfsense-utils.inc:699 +#, php-format +msgid "XMLRPC communication error: %s" +msgstr "XMLRPC通信エラー:%s" + +#: etc/inc/pfsense-utils.inc:702 etc/inc/pfsense-utils.inc:717 +#: etc/inc/pfsense-utils.inc:702 +#, php-format +msgid "XMLRPC request failed with error %1$s: %2$s" +msgstr "XMLRPCè¦æ±‚ã¯ã€ã‚¨ãƒ©ãƒ¼ã¯%1$sã§å¤±æ•—ã—ã¾ã—ãŸï¼š%2$s" + +#: etc/inc/pfsense-utils.inc:795 etc/inc/pfsense-utils.inc:810 +#: etc/inc/pfsense-utils.inc:795 +msgid "reload_interfaces_sync() is starting." +msgstr "reload_interfaces_sync.() é–‹å§‹ã—ã¦ã„ã¾ã™ã€‚" + +#: etc/inc/pfsense-utils.inc:803 etc/inc/pfsense-utils.inc:818 +#: etc/inc/pfsense-utils.inc:803 +msgid "Enabling system routing" +msgstr "システムルーティングを有効ã«ã™ã‚‹" + +#: etc/inc/pfsense-utils.inc:806 etc/inc/pfsense-utils.inc:821 +#: etc/inc/pfsense-utils.inc:806 +msgid "Cleaning up Interfaces" +msgstr "インタフェースã®ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—" + +#: etc/inc/pfsense-utils.inc:912 etc/inc/pfsense-utils.inc:927 +#: etc/inc/pfsense-utils.inc:936 etc/inc/pfsense-utils.inc:936 +msgid "Enabling auto login was not possible." +msgstr "自動ログインを有効ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/pfsense-utils.inc:1100 etc/inc/pfsense-utils.inc:1137 +#: etc/inc/pfsense-utils.inc:1191 etc/inc/pfsense-utils.inc:1196 +#: etc/inc/pfsense-utils.inc:1196 +msgid "No history data found!" +msgstr "履歴ã¯ã‚りã¾ã›ã‚“データ発見ï¼" + +#: etc/inc/pfsense-utils.inc:1222 etc/inc/pfsense-utils.inc:1260 +#: etc/inc/pfsense-utils.inc:1313 etc/inc/pfsense-utils.inc:1318 +#: etc/inc/pfsense-utils.inc:1318 +msgid "device not present! Is the modem attached to the system?" +msgstr "デãƒã‚¤ã‚¹ãŒå­˜åœ¨ã—ã¾ã›ã‚“ï¼ãƒ¢ãƒ‡ãƒ ãŒã‚·ã‚¹ãƒ†ãƒ ã«æŽ¥ç¶šã•れã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ" + +#: etc/inc/pfsense-utils.inc:1262 etc/inc/pfsense-utils.inc:1327 +#: etc/inc/pfsense-utils.inc:1380 etc/inc/pfsense-utils.inc:1385 +#: etc/inc/pfsense-utils.inc:1385 +msgid "running" +msgstr "ランニング" + +#: etc/inc/pfsense-utils.inc:1263 usr/local/www/graph.php:201 +#: etc/inc/pfsense-utils.inc:1328 etc/inc/pfsense-utils.inc:1381 +#: etc/inc/pfsense-utils.inc:1386 usr/local/www/graph.php:201 +#: etc/inc/pfsense-utils.inc:1386 +msgid "up" +msgstr "アップ" + +#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371 +#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429 +#: etc/inc/pfsense-utils.inc:1429 +msgid "blocking" +msgstr "ブロッキング" + +#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371 +#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429 +#: etc/inc/pfsense-utils.inc:1429 +msgid "check for ethernet loops" +msgstr "イーサãƒãƒƒãƒˆãƒ«ãƒ¼ãƒ—ã®æœ‰ç„¡ã‚’調ã¹ã‚‹" + +#: etc/inc/pfsense-utils.inc:1303 etc/inc/pfsense-utils.inc:1374 +#: etc/inc/pfsense-utils.inc:1427 etc/inc/pfsense-utils.inc:1432 +#: etc/inc/pfsense-utils.inc:1432 +msgid "learning" +msgstr "ラーニング" + +#: etc/inc/pfsense-utils.inc:1306 etc/inc/pfsense-utils.inc:1377 +#: etc/inc/pfsense-utils.inc:1430 etc/inc/pfsense-utils.inc:1435 +#: etc/inc/pfsense-utils.inc:1435 +msgid "forwarding" +msgstr "転é€" + +#: etc/inc/pfsense-utils.inc:1417 etc/inc/pfsense-utils.inc:1493 +#: etc/inc/pfsense-utils.inc:1546 etc/inc/pfsense-utils.inc:1551 +#: etc/inc/pfsense-utils.inc:1555 +#, php-format +msgid "DNSCACHE: Found old IP %1$s and new IP %2$s" +msgstr "DNSCACHE:実測å¤ã„IPã¯%1$sã¨æ–°ã—ã„IP %2$s" + +#: etc/inc/pkg-utils.inc:211 etc/inc/pkg-utils.inc:226 +#: etc/inc/pkg-utils.inc:244 etc/inc/pkg-utils.inc:244 +msgid "Resyncing configuration for all packages." +msgstr "ã™ã¹ã¦ã®ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ§‹æˆã‚’å†åŒæœŸã€‚" + +#: etc/inc/pkg-utils.inc:231 etc/inc/pkg-utils.inc:246 +#: etc/inc/pkg-utils.inc:264 etc/inc/pkg-utils.inc:264 +msgid "Syncing packages:" +msgstr "ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã‚’åŒæœŸã™ã‚‹ï¼š" + +#: etc/inc/pkg-utils.inc:273 etc/inc/pkg-utils.inc:288 +#: etc/inc/pkg-utils.inc:306 etc/inc/pkg-utils.inc:306 +#, php-format +msgid "" +"The %1$s package is missing required dependencies and must be reinstalled. " +"%2$s" +msgstr ""%1$sパッケージã«ã¯ã€å¿…è¦ãªä¾å­˜é–¢ä¿‚ãŒæ¬ è½ã—ã¦ã€å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"%2$s" + +#: etc/inc/pkg-utils.inc:297 etc/inc/pkg-utils.inc:437 +#: etc/inc/pkg-utils.inc:312 etc/inc/pkg-utils.inc:462 +#: etc/inc/pkg-utils.inc:464 etc/inc/pkg-utils.inc:330 +#: etc/inc/pkg-utils.inc:481 etc/inc/pkg-utils.inc:330 +#: etc/inc/pkg-utils.inc:481 +#, php-format +msgid "" +"The %s package is missing required dependencies and must be reinstalled." +msgstr ""%sパッケージã«ã¯ã€å¿…è¦ãªä¾å­˜é–¢ä¿‚ãŒæ¬ è½ã—ã¦ã€å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/pkg-utils.inc:404 etc/inc/pkg-utils.inc:429 +#: etc/inc/pkg-utils.inc:431 etc/inc/pkg-utils.inc:448 +#: etc/inc/pkg-utils.inc:448 +#, php-format +msgid "" +"The %s package is missing its configuration file and must be reinstalled." +msgstr ""%sパッケージã«ã¯ã€ãã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ãŒæ¬ è½ã—ã¦ã€å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/pkg-utils.inc:563 usr/local/www/pkg_mgr_install.php:101 +#: etc/inc/pkg-utils.inc:589 etc/inc/pkg-utils.inc:590 +#: usr/local/www/pkg_mgr_install.php:99 etc/inc/pkg-utils.inc:625 +#: usr/local/www/pkg_mgr_install.php:97 usr/local/www/pkg_mgr_install.php:97 +#: etc/inc/pkg-utils.inc:625 +msgid "Beginning package installation." +msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’é–‹å§‹ã™ã‚‹ã€‚" + +#: etc/inc/pkg-utils.inc:564 etc/inc/pkg-utils.inc:565 +#: etc/inc/pkg-utils.inc:590 etc/inc/pkg-utils.inc:591 +#: etc/inc/pkg-utils.inc:592 etc/inc/pkg-utils.inc:626 +#: etc/inc/pkg-utils.inc:627 etc/inc/pkg-utils.inc:626 +#: etc/inc/pkg-utils.inc:627 +#, php-format +msgid "Beginning package installation for %s ." +msgstr "%sãŸã‚ã«é–‹å§‹ã™ã‚‹ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€‚" + +#: etc/inc/pkg-utils.inc:569 etc/inc/pkg-utils.inc:595 +#: etc/inc/pkg-utils.inc:596 etc/inc/pkg-utils.inc:631 +#: etc/inc/pkg-utils.inc:631 +msgid "Downloading package configuration file... " +msgstr "パッケージ構æˆãƒ•ァイルã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰... " + +#: etc/inc/pkg-utils.inc:571 etc/inc/pkg-utils.inc:597 +#: etc/inc/pkg-utils.inc:598 etc/inc/pkg-utils.inc:633 +#: etc/inc/pkg-utils.inc:633 +msgid "Downloading package configuration file..." +msgstr "パッケージ構æˆãƒ•ァイルã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰..." + +#: etc/inc/pkg-utils.inc:575 etc/inc/pkg-utils.inc:601 +#: etc/inc/pkg-utils.inc:602 etc/inc/pkg-utils.inc:637 +#: etc/inc/pkg-utils.inc:637 +msgid "" +"ERROR! Unable to fetch package configuration file. Aborting installation." +msgstr ""エラーï¼ãƒ‘ッケージ構æˆãƒ•ァイルをå–å¾—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。インストールを中止ã—ã¦ã„ã¾ã™ã€‚" + +#: etc/inc/pkg-utils.inc:577 etc/inc/pkg-utils.inc:603 +#: etc/inc/pkg-utils.inc:604 etc/inc/pkg-utils.inc:639 +#: etc/inc/pkg-utils.inc:639 +msgid "" +"ERROR! Unable to fetch package configuration file. Aborting package " +"installation." +msgstr ""エラーï¼ãƒ‘ッケージ構æˆãƒ•ァイルをå–å¾—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。"パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’中止ã—ã¦ã„ã¾ã™ã€‚" + +#: etc/inc/pkg-utils.inc:579 etc/inc/pkg-utils.inc:605 +#: etc/inc/pkg-utils.inc:606 etc/inc/pkg-utils.inc:641 +#: etc/inc/pkg-utils.inc:641 +msgid "" +"failed!\n" +"\n" +"Installation aborted.\n" +msgstr ""失敗ã—ã¾ã—ãŸï¼\n"\n"インストールãŒä¸­æ­¢ã•れã¾ã—ãŸã€‚\n" + +#: etc/inc/pkg-utils.inc:591 etc/inc/pkg-utils.inc:617 +#: etc/inc/pkg-utils.inc:618 etc/inc/pkg-utils.inc:653 +#: etc/inc/pkg-utils.inc:653 +msgid "Saving updated package information..." +msgstr "æ›´æ–°ã•れãŸãƒ‘ッケージ情報ã®ä¿å­˜..." + +#: etc/inc/pkg-utils.inc:595 etc/inc/pkg-utils.inc:621 +#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:657 +#: etc/inc/pkg-utils.inc:657 +#, php-format +msgid "Installed %s package." +msgstr "インストールã•れã¦ãƒ‘ッケージ。" + +#: etc/inc/pkg-utils.inc:599 etc/inc/pkg-utils.inc:625 +#: etc/inc/pkg-utils.inc:626 etc/inc/pkg-utils.inc:661 +#: etc/inc/pkg-utils.inc:661 +#, php-format +msgid "Overwrote previous installation of %s." +msgstr "%sã®ä¸Šæ›¸ã以å‰ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€‚" + +#: etc/inc/pkg-utils.inc:600 etc/inc/pkg-utils.inc:626 +#: etc/inc/pkg-utils.inc:627 etc/inc/pkg-utils.inc:662 +#: etc/inc/pkg-utils.inc:662 +msgid "overwrite!" +msgstr "オーãƒãƒ¼ãƒ©ã‚¤ãƒˆ!" + +#: etc/inc/pkg-utils.inc:612 etc/inc/pkg-utils.inc:638 +#: etc/inc/pkg-utils.inc:639 etc/inc/pkg-utils.inc:674 +#: etc/inc/pkg-utils.inc:674 +msgid "Failed to install package." +msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" + +#: etc/inc/pkg-utils.inc:616 etc/inc/pkg-utils.inc:642 +#: etc/inc/pkg-utils.inc:643 etc/inc/pkg-utils.inc:678 +#: etc/inc/pkg-utils.inc:678 +msgid "Writing configuration... " +msgstr "設定を書ãè¾¼ã¿ä¸­... " + +#: etc/inc/pkg-utils.inc:652 etc/inc/pkg-utils.inc:678 +#: etc/inc/pkg-utils.inc:679 etc/inc/pkg-utils.inc:714 +#: etc/inc/pkg-utils.inc:714 +#, php-format +msgid "The %s package is not installed.%sInstallation aborted." +msgstr "%sパッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。%sインストールãŒä¸­æ­¢ã•れã¾ã—ãŸã€‚" + +#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693 +#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729 +#: etc/inc/pkg-utils.inc:729 +msgid "Installing" +msgstr "インストール" + +#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693 +#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729 +#: etc/inc/pkg-utils.inc:729 +msgid "and its dependencies." +msgstr "ã¨ãã®ä¾å­˜é–¢ä¿‚。" + +#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694 +#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730 +#: etc/inc/pkg-utils.inc:730 +msgid "Downloading" +msgstr "ダウンロード中" + +#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694 +#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730 +#: etc/inc/pkg-utils.inc:730 +msgid "and its dependencies... " +msgstr "ã¨ãã®ä¾å­˜é–¢ä¿‚... " + +#: etc/inc/pkg-utils.inc:680 etc/inc/pkg-utils.inc:706 +#: etc/inc/pkg-utils.inc:707 etc/inc/pkg-utils.inc:742 +#: etc/inc/pkg-utils.inc:742 +msgid "Package WAS NOT installed properly." +msgstr "ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ãŒæ­£ã—ãインストールã•れã¦ã„ã¾ã›ã‚“。" + +#: etc/inc/pkg-utils.inc:693 etc/inc/pkg-utils.inc:719 +#: etc/inc/pkg-utils.inc:720 etc/inc/pkg-utils.inc:755 +#: etc/inc/pkg-utils.inc:755 +msgid "Loading package configuration... " +msgstr "パッケージ構æˆã‚’読ã¿è¾¼ã‚“ã§ã„ã¾ã™... " + +#: etc/inc/pkg-utils.inc:698 etc/inc/pkg-utils.inc:724 +#: etc/inc/pkg-utils.inc:725 etc/inc/pkg-utils.inc:760 +#: etc/inc/pkg-utils.inc:760 +msgid "Configuring package components...\n" +msgstr "パッケージコンãƒãƒ¼ãƒãƒ³ãƒˆã®è¨­å®š...\n" + +#: etc/inc/pkg-utils.inc:704 etc/inc/pkg-utils.inc:1049 +#: etc/inc/pkg-utils.inc:730 etc/inc/pkg-utils.inc:1086 +#: etc/inc/pkg-utils.inc:731 etc/inc/pkg-utils.inc:1087 +#: etc/inc/pkg-utils.inc:766 etc/inc/pkg-utils.inc:1122 +#: etc/inc/pkg-utils.inc:766 etc/inc/pkg-utils.inc:1122 +msgid "System files... " +msgstr "システムファイル..." + +#: etc/inc/pkg-utils.inc:716 etc/inc/pkg-utils.inc:742 +#: etc/inc/pkg-utils.inc:743 etc/inc/pkg-utils.inc:778 +#: etc/inc/pkg-utils.inc:778 +msgid "Additional files... " +msgstr "追加ファイル..." + +#: etc/inc/pkg-utils.inc:742 etc/inc/pkg-utils.inc:768 +#: etc/inc/pkg-utils.inc:769 etc/inc/pkg-utils.inc:804 +#: etc/inc/pkg-utils.inc:804 +msgid "Extracting tarball to -C for " +msgstr "ã®ãŸã‚ã« -C ã¸ã®tarballã‚’è§£å‡" + +#: etc/inc/pkg-utils.inc:748 etc/inc/pkg-utils.inc:774 +#: etc/inc/pkg-utils.inc:775 etc/inc/pkg-utils.inc:810 +#: etc/inc/pkg-utils.inc:810 +#, php-format +msgid "Changing file mode to %1$s for %2$s%3$s%4$s" +msgstr "%2$s%3$s%4$sã‚’ã™ã‚‹ãŸã‚ã«%1$sã«ãƒ•ァイルモードを変更ã™ã‚‹" + +#: etc/inc/pkg-utils.inc:764 etc/inc/pkg-utils.inc:1025 +#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:1062 +#: etc/inc/pkg-utils.inc:791 etc/inc/pkg-utils.inc:1063 +#: etc/inc/pkg-utils.inc:826 etc/inc/pkg-utils.inc:1098 +#: etc/inc/pkg-utils.inc:826 etc/inc/pkg-utils.inc:1098 +msgid "Loading package instructions..." +msgstr "ローディングパッケージã®èª¬æ˜Žæ›¸..." + +#: etc/inc/pkg-utils.inc:779 etc/inc/pkg-utils.inc:805 +#: etc/inc/pkg-utils.inc:806 etc/inc/pkg-utils.inc:841 +#: etc/inc/pkg-utils.inc:841 +msgid "Custom commands..." +msgstr "カスタムコマンド..." + +#: etc/inc/pkg-utils.inc:783 etc/inc/pkg-utils.inc:809 +#: etc/inc/pkg-utils.inc:810 etc/inc/pkg-utils.inc:845 +#: etc/inc/pkg-utils.inc:845 +msgid "Executing custom_php_global_functions()..." +msgstr "custom_php_global_functions.() を実行..." + +#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:816 +#: etc/inc/pkg-utils.inc:817 etc/inc/pkg-utils.inc:852 +#: etc/inc/pkg-utils.inc:852 +msgid "Executing custom_php_install_command()..." +msgstr "custom_php_global_functions.() を実行..." + +#: etc/inc/pkg-utils.inc:809 etc/inc/pkg-utils.inc:845 +#: etc/inc/pkg-utils.inc:846 etc/inc/pkg-utils.inc:881 +#: etc/inc/pkg-utils.inc:881 +msgid "Executing custom_php_resync_config_command()..." +msgstr "custom_php_global_functions.() を実行..." + +#: etc/inc/pkg-utils.inc:818 etc/inc/pkg-utils.inc:972 +#: etc/inc/pkg-utils.inc:854 etc/inc/pkg-utils.inc:1009 +#: etc/inc/pkg-utils.inc:855 etc/inc/pkg-utils.inc:1010 +#: etc/inc/pkg-utils.inc:890 etc/inc/pkg-utils.inc:1045 +#: etc/inc/pkg-utils.inc:890 etc/inc/pkg-utils.inc:1045 +msgid "Menu items... " +msgstr "メニュー項目..." + +#: etc/inc/pkg-utils.inc:834 etc/inc/pkg-utils.inc:870 +#: etc/inc/pkg-utils.inc:871 etc/inc/pkg-utils.inc:906 +#: etc/inc/pkg-utils.inc:906 +msgid "Integrated Tab items... " +msgstr "çµ±åˆã•れãŸã‚¿ãƒ–é …ç›®..." + +#: etc/inc/pkg-utils.inc:850 etc/inc/pkg-utils.inc:989 +#: etc/inc/pkg-utils.inc:886 etc/inc/pkg-utils.inc:1026 +#: etc/inc/pkg-utils.inc:887 etc/inc/pkg-utils.inc:1027 +#: etc/inc/pkg-utils.inc:922 etc/inc/pkg-utils.inc:1062 +#: etc/inc/pkg-utils.inc:922 etc/inc/pkg-utils.inc:1062 +msgid "Services... " +msgstr "サービス..." + +#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901 +#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937 +#: etc/inc/pkg-utils.inc:937 +msgid "Loading package configuration... failed!" +msgstr "パッケージ構æˆã‚’読ã¿è¾¼ã‚“ã§ã„ã¾ã™...失敗ã—ã¾ã—ãŸï¼" + +#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901 +#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937 +#: etc/inc/pkg-utils.inc:937 +msgid "Installation aborted." +msgstr "インストールãŒä¸­æ­¢ã•れã¾ã—ãŸã€‚" + +#: etc/inc/pkg-utils.inc:867 etc/inc/pkg-utils.inc:903 +#: etc/inc/pkg-utils.inc:904 etc/inc/pkg-utils.inc:939 +#: etc/inc/pkg-utils.inc:939 +msgid "Unable to load package configuration. Installation aborted." +msgstr "パッケージ構æˆã‚’読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。インストールãŒä¸­æ­¢ã•れã¾ã—ãŸã€‚" + +#: etc/inc/pkg-utils.inc:911 etc/inc/pkg-utils.inc:948 +#: etc/inc/pkg-utils.inc:949 etc/inc/pkg-utils.inc:984 +#: etc/inc/pkg-utils.inc:984 +#, php-format +msgid "Starting package deletion for %s..." +msgstr "%sã®ãƒ‘ッケージã®å‰Šé™¤ã‚’é–‹å§‹ã™ã‚‹..." + +#: etc/inc/pkg-utils.inc:931 etc/inc/pkg-utils.inc:968 +#: etc/inc/pkg-utils.inc:969 etc/inc/pkg-utils.inc:1004 +#: etc/inc/pkg-utils.inc:1004 +#, php-format +msgid "The %s package is not installed.%sDeletion aborted." +msgstr "%sã®ãƒ‘ッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。%sを削除ã¯ä¸­æ­¢ã•れã¾ã—ãŸã€‚" + +#: etc/inc/pkg-utils.inc:942 etc/inc/pkg-utils.inc:979 +#: etc/inc/pkg-utils.inc:980 etc/inc/pkg-utils.inc:1015 +#: etc/inc/pkg-utils.inc:1015 +#, php-format +msgid "Removing %s package... " +msgstr "%sã®ãƒ‘ッケージを削除ã—ã¦ã„ã¾ã™..." + +#: etc/inc/pkg-utils.inc:943 etc/inc/pkg-utils.inc:980 +#: etc/inc/pkg-utils.inc:981 etc/inc/pkg-utils.inc:1016 +#: etc/inc/pkg-utils.inc:1016 +#, php-format +msgid "Removing %s components..." +msgstr "%sã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’削除ã—ã¦ã„ã¾ã™..." + +#: etc/inc/pkg-utils.inc:955 etc/inc/pkg-utils.inc:992 +#: etc/inc/pkg-utils.inc:993 etc/inc/pkg-utils.inc:1028 +#: etc/inc/pkg-utils.inc:1028 +msgid "Tabs items... " +msgstr "タブ項目... " + +#: etc/inc/pkg-utils.inc:1059 etc/inc/pkg-utils.inc:1096 +#: etc/inc/pkg-utils.inc:1097 etc/inc/pkg-utils.inc:1132 +#: etc/inc/pkg-utils.inc:1132 +msgid "Deinstall commands... " +msgstr "アンインストールコマンド... " + +#: etc/inc/pkg-utils.inc:1069 etc/inc/pkg-utils.inc:1106 +#: etc/inc/pkg-utils.inc:1107 etc/inc/pkg-utils.inc:1142 +#: etc/inc/pkg-utils.inc:1142 +msgid "Removing package instructions..." +msgstr "ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æŒ‡ç¤ºã«å¾“ã£ã¦å‰Šé™¤ã—ã¦ã„ã¾ã™..." + +#: etc/inc/pkg-utils.inc:1071 etc/inc/pkg-utils.inc:1108 +#: etc/inc/pkg-utils.inc:1109 etc/inc/pkg-utils.inc:1144 +#: etc/inc/pkg-utils.inc:1144 +#, php-format +msgid "Remove '%s'" +msgstr "'%s'をを削除" + +#: etc/inc/pkg-utils.inc:1078 etc/inc/pkg-utils.inc:1115 +#: etc/inc/pkg-utils.inc:1116 etc/inc/pkg-utils.inc:1151 +#: etc/inc/pkg-utils.inc:1151 +msgid "Auxiliary files... " +msgstr "補助ファイル... " + +#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1129 +#: etc/inc/pkg-utils.inc:1130 etc/inc/pkg-utils.inc:1165 +#: etc/inc/pkg-utils.inc:1165 +msgid "Package XML... " +msgstr "パッケージXML... " + +#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1148 +#: etc/inc/pkg-utils.inc:1149 etc/inc/pkg-utils.inc:1184 +#: etc/inc/pkg-utils.inc:1184 +msgid "Configuration... " +msgstr "コンフィギュレーション··· " + +#: etc/inc/pkg-utils.inc:1205 etc/inc/pkg-utils.inc:1242 +#: etc/inc/pkg-utils.inc:1243 etc/inc/pkg-utils.inc:1274 +#: etc/inc/pkg-utils.inc:1274 +#, php-format +msgid "" +" >>> Unable to communicate with %1$s. Please verify DNS and interface " +"configuration, and that %2$s has functional Internet connectivity." +msgstr ""%1$sã¨é€šä¿¡ã§ãã¾ã›ã‚“。DNSã¨ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®è¨­å®šã‚’確èªã—ã¦ãã ã•ã„ã€"ãã®%2$sã€æ©Ÿèƒ½ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã‚’æŒã£ã¦ã„ã¾ã™ã€‚" + +#: etc/inc/radius.inc:404 etc/inc/radius.inc:406 etc/inc/radius.inc:406 +msgid "Error sending request:" +msgstr "リクエストé€ä¿¡ã‚¨ãƒ©ãƒ¼ï¼š" + +#: etc/inc/radius.inc:410 etc/inc/radius.inc:412 etc/inc/radius.inc:412 +msgid "RADIUS_ACCESS_ACCEPT is unexpected for accounting" +msgstr "RADIUS_ACCESS_ACCEPTã¯ã€ä¼šè¨ˆã®ãŸã‚ã«äºˆæƒ³å¤–ã§ã‚ã‚‹" + +#: etc/inc/radius.inc:419 etc/inc/radius.inc:421 etc/inc/radius.inc:421 +msgid "RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication" +msgstr "RADIUS_ACCOUNTING_RESPONSEã¯ã€èªè¨¼ã®ãŸã‚ã«äºˆæƒ³å¤–ã§ã‚ã‚‹" + +#: etc/inc/radius.inc:424 etc/inc/radius.inc:426 etc/inc/radius.inc:426 +#, php-format +msgid "Unexpected return value: %s" +msgstr "予期ã—ãªã„戻り値:%s" + +#: etc/inc/services.inc:262 etc/inc/services.inc:333 etc/inc/services.inc:360 +#: etc/inc/services.inc:369 etc/inc/services.inc:371 etc/inc/services.inc:373 +#, php-format +msgid "DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s" +msgstr "DHCPリースã¯%1$sã§çµ‚了ã—ã¾ã—ãŸå¾©å…ƒã«å¤±æ•—ã—ã¾ã—ãŸã€ã‚¨ãƒ©ãƒ¼ï¼š%2$s%3$s" + +#: etc/inc/services.inc:275 etc/inc/services.inc:346 etc/inc/services.inc:373 +#: etc/inc/services.inc:382 etc/inc/services.inc:387 etc/inc/services.inc:389 +msgid "Starting DHCP service..." +msgstr "DHCPサービスを開始..." + +#: etc/inc/services.inc:282 etc/inc/services.inc:353 etc/inc/services.inc:380 +#: etc/inc/services.inc:820 etc/inc/services.inc:825 etc/inc/services.inc:877 +#, php-format +msgid "Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s" +msgstr "エラー:services_dhcpdv4_configure.().%s を処ç†dhcpd.confã®é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/services.inc:353 etc/inc/services.inc:434 etc/inc/services.inc:461 +#: etc/inc/services.inc:463 etc/inc/services.inc:468 etc/inc/services.inc:469 +msgid "Warning! DHCP Failover setup and no CARP virtual IP's defined!" +msgstr "警告ï¼DHCPフェールオーãƒãƒ¼ã®è¨­å®šãªã—CARP仮想IPã®å®šç¾©ã•れãŸï¼" + +#: etc/inc/services.inc:949 etc/inc/services.inc:1078 +#: etc/inc/services.inc:1210 etc/inc/services.inc:1203 +#: etc/inc/services.inc:1209 etc/inc/services.inc:1261 +msgid "Could not write Igmpproxy configuration file!" +msgstr "Igmpproxy設定ファイルを書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸï¼" + +#: etc/inc/services.inc:956 +msgid "Started Igmpproxy service successfully." +msgstr "首尾Igmpproxyサービスを開始ã—ã¾ã—ãŸã€‚" + +#: etc/inc/services.inc:980 etc/inc/services.inc:1109 +#: etc/inc/services.inc:1241 etc/inc/services.inc:1235 +#: etc/inc/services.inc:1242 etc/inc/services.inc:1294 +msgid "Starting DHCP relay service..." +msgstr "DHCPリレーサービスを開始..." + +#: etc/inc/services.inc:1096 etc/inc/services.inc:1223 +#: etc/inc/services.inc:1355 etc/inc/services.inc:1350 +#: etc/inc/services.inc:1365 etc/inc/services.inc:1417 +msgid "Starting DHCPv6 relay service..." +msgstr "DHCPv6リレーサービスを開始..." + +#: etc/inc/services.inc:1222 etc/inc/services.inc:1358 +#: etc/inc/services.inc:1493 etc/inc/services.inc:1489 +#: etc/inc/services.inc:1505 etc/inc/services.inc:1557 +msgid "Starting DynDNS clients..." +msgstr "DynDNSクライアント起動中..." + +#: etc/inc/services.inc:1255 etc/inc/services.inc:1392 +#: etc/inc/services.inc:1531 etc/inc/services.inc:1545 +#: etc/inc/services.inc:1562 etc/inc/services.inc:1622 +msgid "Starting DNS forwarder..." +msgstr "DNSフォワーダを開始..." + +#: etc/inc/services.inc:1324 etc/inc/services.inc:1507 +#: etc/inc/services.inc:1646 etc/inc/services.inc:1623 +#: etc/inc/services.inc:1655 etc/inc/services.inc:1686 +#: etc/inc/services.inc:1750 +msgid "Starting SNMP daemon... " +msgstr "SNMPデーモンを起動ã™ã‚‹... " + +#: etc/inc/services.inc:1329 etc/inc/services.inc:1512 +#: etc/inc/services.inc:1651 etc/inc/services.inc:1628 +#: etc/inc/services.inc:1660 etc/inc/services.inc:1691 +#: etc/inc/services.inc:1755 +#, php-format +msgid "Error: cannot open snmpd.conf in services_snmpd_configure().%s" +msgstr "エラー:services_snmpd_configure.().%sを処ç†ã®snmpd.confã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/services.inc:1875 etc/inc/services.inc:2067 +#: etc/inc/services.inc:1919 etc/inc/services.inc:1908 +#: etc/inc/services.inc:1948 etc/inc/services.inc:1979 +#: etc/inc/services.inc:2043 +msgid "pfSense specific crontab entries" +msgstr "pfSense特定crontabã®ã‚¨ãƒ³ãƒˆãƒª" + +#: etc/inc/services.inc:1876 etc/inc/services.inc:2068 +#: etc/inc/services.inc:1920 etc/inc/services.inc:1909 +#: etc/inc/services.inc:1949 etc/inc/services.inc:1980 +#: etc/inc/services.inc:2044 +msgid "Created:" +msgstr "作æˆï¼š" + +#: etc/inc/services.inc:1890 etc/inc/services.inc:2082 +#: etc/inc/services.inc:1934 etc/inc/services.inc:1923 +#: etc/inc/services.inc:1963 etc/inc/services.inc:1994 +#: etc/inc/services.inc:2058 +msgid "If possible do not add items to this file manually." +msgstr "ã§ãれã°ã“ã®ãƒ•ァイルã«é …目を手動ã§è¿½åŠ ã—ãªã„ã§ãã ã•ã„。" + +#: etc/inc/services.inc:1891 etc/inc/services.inc:2083 +#: etc/inc/services.inc:1935 etc/inc/services.inc:1924 +#: etc/inc/services.inc:1964 etc/inc/services.inc:1995 +#: etc/inc/services.inc:2059 +msgid "" +"If you do so, this file must be terminated with a blank line (e.g. new line)" +msgstr ""ãã®å ´åˆã€ã“ã®ãƒ•ァイルã«ã¯ã€ç©ºç™½è¡Œï¼ˆä¾‹ãˆã°æ–°ã—ã„行)ã§çµ‚了ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: etc/inc/services.inc:1934 etc/inc/services.inc:2126 +#: etc/inc/services.inc:1978 etc/inc/services.inc:1968 +#: etc/inc/services.inc:2008 etc/inc/services.inc:2039 +#: etc/inc/services.inc:2103 +msgid "Starting UPnP service... " +msgstr "UPnPサービスを開始... " + +#: etc/inc/services.inc:1969 etc/inc/services.inc:2161 +#: etc/inc/services.inc:2013 etc/inc/services.inc:2005 +#: etc/inc/services.inc:2045 etc/inc/services.inc:2076 +#: etc/inc/services.inc:2140 +#, php-format +msgid "Installed cron job for %s" +msgstr "%sã®ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«cronジョブ" + +#: etc/inc/services.inc:1972 etc/inc/services.inc:2164 +#: etc/inc/services.inc:2016 etc/inc/services.inc:2008 +#: etc/inc/services.inc:2048 etc/inc/services.inc:2079 +#: etc/inc/services.inc:2143 +#, php-format +msgid "Updated cron job for %s" +msgstr "%sã®ãŸã‚ã®æ›´æ–°ã•れãŸcronジョブ" + +#: etc/inc/services.inc:1977 etc/inc/services.inc:2169 +#: etc/inc/services.inc:2021 +#, php-format +msgid "Remvoed cron job for %s" +msgstr "%sã®ãŸã‚ã«å–り外ã•cronジョブ" + +#: etc/inc/shaper.inc:189 etc/inc/shaper.inc:190 etc/inc/shaper.inc:190 +#, php-format +msgid "The field '%s' contains invalid characters." +msgstr "フィールド㌠'%s'ã¯ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: etc/inc/shaper.inc:195 etc/inc/shaper.inc:196 etc/inc/shaper.inc:196 +#, php-format +msgid "The field '%s' is required." +msgstr "フィールド㌠'%s'ãŒå¿…è¦ã§ã™ã€‚" + +#: etc/inc/shaper.inc:317 etc/inc/shaper.inc:651 etc/inc/shaper.inc:1544 +#: etc/inc/shaper.inc:1850 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2327 +#: etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2593 etc/inc/shaper.inc:2787 +#: etc/inc/shaper.inc:3023 usr/local/www/interfaces_ppps_edit.php:750 +#: etc/inc/shaper.inc:318 etc/inc/shaper.inc:652 etc/inc/shaper.inc:1546 +#: etc/inc/shaper.inc:1852 etc/inc/shaper.inc:2194 etc/inc/shaper.inc:2329 +#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2595 etc/inc/shaper.inc:2789 +#: etc/inc/shaper.inc:3031 etc/inc/shaper.inc:3161 +#: usr/local/www/interfaces_ppps_edit.php:751 +#: usr/local/www/interfaces_ppps_edit.php:757 +#: usr/local/www/status_queues.php:151 etc/inc/shaper.inc:1547 +#: etc/inc/shaper.inc:1853 etc/inc/shaper.inc:2195 etc/inc/shaper.inc:2330 +#: etc/inc/shaper.inc:2470 etc/inc/shaper.inc:2596 etc/inc/shaper.inc:2790 +#: etc/inc/shaper.inc:3162 etc/inc/shaper.inc:654 etc/inc/shaper.inc:1550 +#: etc/inc/shaper.inc:1858 etc/inc/shaper.inc:2200 etc/inc/shaper.inc:2335 +#: etc/inc/shaper.inc:2475 etc/inc/shaper.inc:2601 etc/inc/shaper.inc:2795 +#: etc/inc/shaper.inc:3169 usr/local/www/interfaces_ppps_edit.php:754 +#: etc/inc/shaper.inc:321 etc/inc/shaper.inc:678 etc/inc/shaper.inc:1601 +#: etc/inc/shaper.inc:1916 etc/inc/shaper.inc:2258 etc/inc/shaper.inc:2398 +#: etc/inc/shaper.inc:2538 etc/inc/shaper.inc:2669 etc/inc/shaper.inc:2863 +#: etc/inc/shaper.inc:3237 usr/local/www/interfaces_ppps_edit.php:754 +#: usr/local/www/status_queues.php:151 etc/inc/shaper.inc:321 +#: etc/inc/shaper.inc:678 etc/inc/shaper.inc:1601 etc/inc/shaper.inc:1916 +#: etc/inc/shaper.inc:2258 etc/inc/shaper.inc:2398 etc/inc/shaper.inc:2538 +#: etc/inc/shaper.inc:2669 etc/inc/shaper.inc:2882 etc/inc/shaper.inc:3293 +msgid "Bandwidth" +msgstr "帯域幅" + +#: etc/inc/shaper.inc:319 etc/inc/shaper.inc:1546 etc/inc/shaper.inc:2194 +#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2789 etc/inc/shaper.inc:320 +#: etc/inc/shaper.inc:1548 etc/inc/shaper.inc:2196 etc/inc/shaper.inc:2471 +#: etc/inc/shaper.inc:2791 etc/inc/shaper.inc:1549 etc/inc/shaper.inc:2197 +#: etc/inc/shaper.inc:2472 etc/inc/shaper.inc:2792 etc/inc/shaper.inc:1552 +#: etc/inc/shaper.inc:2202 etc/inc/shaper.inc:2477 etc/inc/shaper.inc:2797 +#: etc/inc/shaper.inc:323 etc/inc/shaper.inc:1603 etc/inc/shaper.inc:2260 +#: etc/inc/shaper.inc:2540 etc/inc/shaper.inc:2865 etc/inc/shaper.inc:323 +#: etc/inc/shaper.inc:1603 etc/inc/shaper.inc:2260 etc/inc/shaper.inc:2540 +#: etc/inc/shaper.inc:2884 +msgid "Bandwidthtype" +msgstr "帯域幅タイプ" + +#: etc/inc/shaper.inc:324 etc/inc/shaper.inc:1552 etc/inc/shaper.inc:2199 +#: etc/inc/shaper.inc:2474 etc/inc/shaper.inc:2900 etc/inc/shaper.inc:325 +#: etc/inc/shaper.inc:1554 etc/inc/shaper.inc:2201 etc/inc/shaper.inc:2476 +#: etc/inc/shaper.inc:2904 etc/inc/shaper.inc:1555 etc/inc/shaper.inc:2202 +#: etc/inc/shaper.inc:2477 etc/inc/shaper.inc:1558 etc/inc/shaper.inc:2207 +#: etc/inc/shaper.inc:2482 etc/inc/shaper.inc:328 etc/inc/shaper.inc:1609 +#: etc/inc/shaper.inc:2265 etc/inc/shaper.inc:2545 etc/inc/shaper.inc:328 +#: etc/inc/shaper.inc:1609 etc/inc/shaper.inc:2265 etc/inc/shaper.inc:2545 +msgid "Bandwidth must be an integer." +msgstr "帯域幅ã¯ã€æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:326 etc/inc/shaper.inc:1555 etc/inc/shaper.inc:2203 +#: etc/inc/shaper.inc:2478 etc/inc/shaper.inc:327 etc/inc/shaper.inc:1557 +#: etc/inc/shaper.inc:2205 etc/inc/shaper.inc:2480 etc/inc/shaper.inc:1558 +#: etc/inc/shaper.inc:2206 etc/inc/shaper.inc:2481 etc/inc/shaper.inc:1561 +#: etc/inc/shaper.inc:2211 etc/inc/shaper.inc:2486 etc/inc/shaper.inc:330 +#: etc/inc/shaper.inc:1612 etc/inc/shaper.inc:2269 etc/inc/shaper.inc:2549 +#: etc/inc/shaper.inc:330 etc/inc/shaper.inc:1612 etc/inc/shaper.inc:2269 +#: etc/inc/shaper.inc:2549 +msgid "Bandwidth cannot be negative." +msgstr "帯域幅ã¯ã€è² ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:328 etc/inc/shaper.inc:329 etc/inc/shaper.inc:332 +#: etc/inc/shaper.inc:332 +msgid "Qlimit must be an integer." +msgstr "Qlimitã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:330 etc/inc/shaper.inc:331 etc/inc/shaper.inc:334 +#: etc/inc/shaper.inc:334 +msgid "Qlimit must be an positive." +msgstr "Qlimitã¯æ­£ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:332 etc/inc/shaper.inc:333 etc/inc/shaper.inc:336 +#: etc/inc/shaper.inc:336 +msgid "Tbrsize must be an integer." +msgstr "Tbrsizeã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:334 etc/inc/shaper.inc:335 etc/inc/shaper.inc:338 +#: etc/inc/shaper.inc:338 +msgid "Tbrsize must be an positive." +msgstr "Tbrsizeã¯æ­£ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:614 etc/inc/shaper.inc:1120 etc/inc/shaper.inc:3269 +#: etc/inc/shaper.inc:3488 etc/inc/shaper.inc:615 etc/inc/shaper.inc:1121 +#: etc/inc/shaper.inc:3277 etc/inc/shaper.inc:3500 etc/inc/shaper.inc:3432 +#: etc/inc/shaper.inc:3655 etc/inc/shaper.inc:1122 etc/inc/shaper.inc:3433 +#: etc/inc/shaper.inc:3656 etc/inc/shaper.inc:617 etc/inc/shaper.inc:1126 +#: etc/inc/shaper.inc:3440 etc/inc/shaper.inc:3663 etc/inc/shaper.inc:637 +#: etc/inc/shaper.inc:1169 etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3731 +#: etc/inc/shaper.inc:637 etc/inc/shaper.inc:1169 etc/inc/shaper.inc:3589 +#: etc/inc/shaper.inc:3836 +msgid "Enable/Disable" +msgstr "有効/無効" + +#: etc/inc/shaper.inc:619 etc/inc/shaper.inc:620 etc/inc/shaper.inc:622 +#: etc/inc/shaper.inc:642 etc/inc/shaper.inc:642 +msgid "Enable/disable discipline and its children" +msgstr "è¦å¾‹ã¨ãã®å­ã‚’有効ã¾ãŸã¯ç„¡åйã«ã™ã‚‹" + +#: etc/inc/shaper.inc:621 etc/inc/shaper.inc:965 etc/inc/shaper.inc:2791 +#: etc/inc/shaper.inc:3016 etc/inc/shaper.inc:3276 etc/inc/shaper.inc:3496 +#: etc/inc/shaper.inc:3568 usr/local/www/load_balancer_virtual_server.php:128 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/load_balancer_relay_action.php:140 +#: usr/local/www/interfaces_groups.php:94 +#: usr/local/www/firewall_aliases.php:165 +#: usr/local/www/firewall_aliases_edit.php:134 +#: usr/local/www/firewall_aliases_edit.php:576 +#: usr/local/www/firewall_schedule.php:96 +#: usr/local/www/load_balancer_pool.php:131 +#: usr/local/www/load_balancer_monitor.php:122 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:235 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:181 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:183 +#: usr/local/www/services_captiveportal_filemanager.php:162 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:411 +#: usr/local/www/load_balancer_relay_protocol.php:134 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:195 +#: usr/local/www/services_igmpproxy.php:95 +#: usr/local/www/status_gateways.php:72 usr/local/www/status_lb_pool.php:130 +#: usr/local/www/status_lb_vs.php:77 usr/local/www/status_openvpn.php:211 +#: usr/local/www/status_openvpn.php:262 usr/local/www/system_camanager.php:565 +#: usr/local/www/system_certmanager.php:854 +#: usr/local/www/system_crlmanager.php:487 +#: usr/local/www/system_gateways.php:152 +#: usr/local/www/system_gateways_edit.php:98 +#: usr/local/www/system_gateways_edit.php:370 +#: usr/local/www/system_groupmanager.php:346 +#: usr/local/www/system_usermanager.php:577 +#: usr/local/www/system_usermanager.php:630 etc/inc/shaper.inc:622 +#: etc/inc/shaper.inc:966 etc/inc/shaper.inc:2793 etc/inc/shaper.inc:3020 +#: etc/inc/shaper.inc:3284 etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3580 +#: usr/local/www/pkg_mgr.php:129 usr/local/www/system_certmanager.php:1020 +#: usr/local/www/load_balancer_relay_action_edit.php:410 +#: usr/local/www/system_usermanager.php:575 +#: usr/local/www/system_usermanager.php:628 +#: usr/local/www/firewall_aliases_edit.php:581 +#: usr/local/www/pkg_mgr_installed.php:111 +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/system_gateways_edit.php:99 +#: usr/local/www/system_gateways_edit.php:391 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/load_balancer_virtual_server_edit.php:157 +#: usr/local/www/firewall_aliases.php:168 +#: usr/local/www/system_camanager.php:566 +#: usr/local/www/load_balancer_pool_edit.php:189 +#: usr/local/www/load_balancer_pool.php:132 etc/inc/shaper.inc:3150 +#: etc/inc/shaper.inc:3439 etc/inc/shaper.inc:3663 etc/inc/shaper.inc:3735 +#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265 +#: usr/local/www/load_balancer_relay_protocol_edit.php:193 +#: usr/local/www/interfaces_groups.php:95 +#: usr/local/www/load_balancer_relay_action_edit.php:408 +#: usr/local/www/load_balancer_monitor_edit.php:233 +#: usr/local/www/system_crlmanager.php:520 +#: usr/local/www/firewall_aliases_edit.php:584 +#: usr/local/www/load_balancer_virtual_server.php:127 +#: usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:497 +#: usr/local/www/status_gateways.php:73 +#: usr/local/www/services_captiveportal_filemanager.php:159 +#: usr/local/www/load_balancer_monitor.php:121 +#: usr/local/www/load_balancer_relay_protocol.php:132 +#: usr/local/www/load_balancer_virtual_server_edit.php:155 +#: usr/local/www/firewall_aliases.php:188 +#: usr/local/www/load_balancer_relay_action.php:138 +#: usr/local/www/load_balancer_pool_edit.php:187 +#: usr/local/www/load_balancer_pool.php:130 +#: usr/local/www/system_gateways_edit.php:499 +#: usr/local/www/system_camanager.php:590 usr/local/www/status_openvpn.php:313 +#: usr/local/www/system_certmanager.php:1062 etc/inc/shaper.inc:2794 +#: etc/inc/shaper.inc:3151 etc/inc/shaper.inc:3440 etc/inc/shaper.inc:3664 +#: etc/inc/shaper.inc:3736 usr/local/www/system_gateways_edit.php:501 +#: usr/local/www/status_openvpn.php:272 usr/local/www/status_openvpn.php:333 +#: usr/local/www/pkg_mgr_installed.php:113 +#: usr/local/www/system_certmanager.php:1066 usr/local/www/pkg_mgr.php:132 +#: usr/local/www/firewall_aliases_edit.php:128 +#: usr/local/www/firewall_aliases_edit.php:615 etc/inc/shaper.inc:624 +#: etc/inc/shaper.inc:970 etc/inc/shaper.inc:2799 etc/inc/shaper.inc:3158 +#: etc/inc/shaper.inc:3447 etc/inc/shaper.inc:3671 etc/inc/shaper.inc:3743 +#: usr/local/www/system_gateways_edit.php:531 etc/inc/shaper.inc:644 +#: etc/inc/shaper.inc:1002 etc/inc/shaper.inc:2867 etc/inc/shaper.inc:3226 +#: etc/inc/shaper.inc:3515 etc/inc/shaper.inc:3739 etc/inc/shaper.inc:3811 +#: usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:531 +#: usr/local/www/system_camanager.php:590 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:193 +#: usr/local/www/system_groupmanager.php:346 +#: usr/local/www/firewall_schedule.php:96 usr/local/www/status_openvpn.php:272 +#: usr/local/www/status_openvpn.php:333 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:155 +#: usr/local/www/firewall_aliases.php:188 +#: usr/local/www/load_balancer_relay_protocol.php:132 +#: usr/local/www/pkg_mgr_installed.php:113 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/load_balancer_relay_action.php:138 +#: usr/local/www/system_certmanager.php:1066 +#: usr/local/www/status_lb_pool.php:130 usr/local/www/interfaces_groups.php:95 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:408 +#: usr/local/www/pkg_mgr.php:177 usr/local/www/system_crlmanager.php:520 +#: usr/local/www/load_balancer_pool.php:130 +#: usr/local/www/services_captiveportal_filemanager.php:159 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:233 +#: usr/local/www/firewall_aliases_edit.php:128 +#: usr/local/www/firewall_aliases_edit.php:601 +#: usr/local/www/services_igmpproxy.php:95 +#: usr/local/www/widgets/widgets/system_information.widget.php:88 +#: usr/local/www/load_balancer_monitor.php:121 +#: usr/local/www/system_usermanager.php:575 +#: usr/local/www/system_usermanager.php:628 +#: usr/local/www/system_gateways.php:152 +#: usr/local/www/load_balancer_virtual_server.php:127 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:187 +#: usr/local/www/status_lb_vs.php:77 usr/local/www/status_gateways.php:73 +#: etc/inc/shaper.inc:644 etc/inc/shaper.inc:1002 etc/inc/shaper.inc:2886 +#: etc/inc/shaper.inc:3282 etc/inc/shaper.inc:3596 etc/inc/shaper.inc:3844 +#: etc/inc/shaper.inc:3916 +msgid "Name" +msgstr "ãƒãƒ¼ãƒ " + +#: etc/inc/shaper.inc:625 etc/inc/shaper.inc:626 etc/inc/shaper.inc:628 +#: etc/inc/shaper.inc:648 etc/inc/shaper.inc:648 +msgid "Scheduler Type " +msgstr "スケジューラã®ç¨®é¡ž " + +#: etc/inc/shaper.inc:647 etc/inc/shaper.inc:648 etc/inc/shaper.inc:650 +#: etc/inc/shaper.inc:674 etc/inc/shaper.inc:674 +msgid "NOTE: Changing this changes all child queues!" +msgstr "注:ã“れã¯ã€ã™ã¹ã¦ã®å­ã®ã‚­ãƒ¥ãƒ¼ã‚’変更ã™ã‚‹å¤‰æ›´ï¼" + +#: etc/inc/shaper.inc:648 etc/inc/shaper.inc:649 etc/inc/shaper.inc:651 +#: etc/inc/shaper.inc:675 etc/inc/shaper.inc:675 +msgid " Beware you can lose information." +msgstr " 情報を失ã†å¯èƒ½æ€§ãŒã‚りã¾ã™æ³¨æ„ã—ã¦ãã ã•ã„。" + +#: etc/inc/shaper.inc:686 etc/inc/shaper.inc:687 etc/inc/shaper.inc:689 +#: etc/inc/shaper.inc:713 etc/inc/shaper.inc:713 +msgid "" +"Adjusts the size, in bytes, of the token bucket regulator. If not specified, " +"heuristics based on the interface bandwidth are used to determine the size." +msgstr ""トークンãƒã‚±ãƒƒãƒˆãƒ¬ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã®ã‚µã‚¤ã‚ºã‚’ãƒã‚¤ãƒˆå˜ä½ã§ã€èª¿æ•´ã—ã¾ã™ã€‚"指定ã—ãªã„å ´åˆã€ãƒ’ューリスティックã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®å¸¯åŸŸå¹…ã«åŸºã¥ã„ã¦"サイズを決定ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる。" + +#: etc/inc/shaper.inc:978 etc/inc/shaper.inc:979 etc/inc/shaper.inc:983 +#: etc/inc/shaper.inc:1015 etc/inc/shaper.inc:1015 +msgid "The priority must be an integer between 1 and 15." +msgstr "優先度ã¯1ã‹ã‚‰15ã¾ã§ã®æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:981 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:982 +#: etc/inc/shaper.inc:2804 etc/inc/shaper.inc:2805 etc/inc/shaper.inc:986 +#: etc/inc/shaper.inc:2810 etc/inc/shaper.inc:1018 etc/inc/shaper.inc:2878 +#: etc/inc/shaper.inc:1018 etc/inc/shaper.inc:2897 +msgid "Queue limit must be an integer" +msgstr "キュー制é™ã¯ã€æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: etc/inc/shaper.inc:983 etc/inc/shaper.inc:984 etc/inc/shaper.inc:988 +#: etc/inc/shaper.inc:1020 etc/inc/shaper.inc:1020 +msgid "Queue limit must be positive" +msgstr "キュー制é™ã¯æ­£ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: etc/inc/shaper.inc:985 etc/inc/shaper.inc:987 etc/inc/shaper.inc:2804 +#: etc/inc/shaper.inc:2806 etc/inc/shaper.inc:3573 etc/inc/shaper.inc:986 +#: etc/inc/shaper.inc:988 etc/inc/shaper.inc:2808 etc/inc/shaper.inc:3585 +#: etc/inc/shaper.inc:3740 etc/inc/shaper.inc:2807 etc/inc/shaper.inc:2809 +#: etc/inc/shaper.inc:3741 etc/inc/shaper.inc:990 etc/inc/shaper.inc:992 +#: etc/inc/shaper.inc:2812 etc/inc/shaper.inc:2814 etc/inc/shaper.inc:3748 +#: etc/inc/shaper.inc:1022 etc/inc/shaper.inc:1024 etc/inc/shaper.inc:2880 +#: etc/inc/shaper.inc:2882 etc/inc/shaper.inc:3816 etc/inc/shaper.inc:1022 +#: etc/inc/shaper.inc:1024 etc/inc/shaper.inc:2899 etc/inc/shaper.inc:2901 +#: etc/inc/shaper.inc:3921 +msgid "Queue names must be alphanumeric and _ or - only." +msgstr "キューåã¯è‹±æ•°å­—ã§ã¨ '_'ã¾ãŸã¯å¿…è¦ãŒã‚りã¾ã™' - 'ã®ã¿ã€‚" + +#: etc/inc/shaper.inc:989 etc/inc/shaper.inc:990 etc/inc/shaper.inc:991 +#: etc/inc/shaper.inc:995 etc/inc/shaper.inc:1027 etc/inc/shaper.inc:1027 +msgid "Only one default queue per interface is allowed." +msgstr "インターフェイスã”ã¨ã«1ã¤ã ã‘ã®ãƒ‡ãƒ•ォルトã®ã‚­ãƒ¥ãƒ¼ãŒè¨±å¯ã•れã¦ã„ã¾ã™ã€‚" + +#: etc/inc/shaper.inc:1125 etc/inc/shaper.inc:1126 etc/inc/shaper.inc:1127 +#: etc/inc/shaper.inc:1131 etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1174 +msgid "Enable/Disable queue and its children" +msgstr "キューã¨ãã®å­ã‚’有効ã¾ãŸã¯ç„¡åйã«ã™ã‚‹" + +#: etc/inc/shaper.inc:1129 etc/inc/shaper.inc:1130 etc/inc/shaper.inc:1131 +#: etc/inc/shaper.inc:1135 etc/inc/shaper.inc:1178 etc/inc/shaper.inc:1178 +msgid "Queue Name" +msgstr "キューå" + +#: etc/inc/shaper.inc:1136 etc/inc/shaper.inc:1137 etc/inc/shaper.inc:1138 +#: etc/inc/shaper.inc:1142 etc/inc/shaper.inc:1185 etc/inc/shaper.inc:1185 +msgid "" +"Enter the name of the queue here. Do not use spaces and limit the size to " +"15 characters." +msgstr ""ã“ã“ã«ã‚­ãƒ¥ãƒ¼ã®åå‰ã‚’入力ã—ã¾ã™ã€‚"スペースを使用ã—ã€15文字ã¾ã§ã®ã‚µã‚¤ã‚ºã‚’é™å®šã™ã‚‹ã‚‚ã®ã§ã¯ãªã„。" + +#: etc/inc/shaper.inc:1139 usr/local/www/interfaces_bridge_edit.php:354 +#: usr/local/www/interfaces_bridge_edit.php:373 +#: usr/local/www/system_gateway_groups.php:122 etc/inc/shaper.inc:1140 +#: usr/local/www/interfaces_bridge_edit.php:363 +#: usr/local/www/interfaces_bridge_edit.php:382 +#: usr/local/www/system_gateway_groups.php:123 +#: usr/local/www/interfaces_bridge_edit.php:364 +#: usr/local/www/interfaces_bridge_edit.php:383 +#: usr/local/www/interfaces_bridge_edit.php:365 +#: usr/local/www/interfaces_bridge_edit.php:384 etc/inc/shaper.inc:1141 +#: usr/local/www/system_gateway_groups.php:132 etc/inc/shaper.inc:1145 +#: usr/local/www/interfaces_bridge_edit.php:367 +#: usr/local/www/interfaces_bridge_edit.php:386 etc/inc/shaper.inc:1188 +#: usr/local/www/interfaces_bridge_edit.php:367 +#: usr/local/www/interfaces_bridge_edit.php:386 +#: usr/local/www/system_gateway_groups.php:132 etc/inc/shaper.inc:1188 +msgid "Priority" +msgstr "プライオリティ" + +#: etc/inc/shaper.inc:1143 etc/inc/shaper.inc:1144 etc/inc/shaper.inc:1145 +#: etc/inc/shaper.inc:1149 etc/inc/shaper.inc:1192 etc/inc/shaper.inc:1192 +msgid "" +"For hfsc, the range is 0 to 7. The default is 1. Hfsc queues with a higher " +"priority are preferred in the case of overload." +msgstr ""HFSCã®å ´åˆã€ç¯„囲ã¯0〜7ã§ã™ã€‚デフォルトã¯1ã§ã™ã€‚"優先度ã®é«˜ã„キューã¯HFSCéŽè² è·ã®å ´åˆã«å¥½ã¾ã—ã„。" + +#: etc/inc/shaper.inc:1146 etc/inc/shaper.inc:1147 etc/inc/shaper.inc:1148 +#: etc/inc/shaper.inc:1152 etc/inc/shaper.inc:1195 etc/inc/shaper.inc:1195 +msgid "Queue limit" +msgstr "キュー制é™" + +#: etc/inc/shaper.inc:1150 etc/inc/shaper.inc:1151 etc/inc/shaper.inc:1152 +#: etc/inc/shaper.inc:1156 etc/inc/shaper.inc:1199 etc/inc/shaper.inc:1199 +msgid "Queue limit in packets per second." +msgstr "1ç§’ã‚ãŸã‚Šã®ãƒ‘ケット数ã€ã‚­ãƒ¥ãƒ¼åˆ¶é™ã€‚" + +#: etc/inc/shaper.inc:1153 etc/inc/shaper.inc:1154 etc/inc/shaper.inc:1155 +#: etc/inc/shaper.inc:1159 etc/inc/shaper.inc:1202 etc/inc/shaper.inc:1202 +msgid "Scheduler options" +msgstr "スケジューラオプション" + +#: etc/inc/shaper.inc:1158 etc/inc/shaper.inc:1161 etc/inc/shaper.inc:1159 +#: etc/inc/shaper.inc:1162 etc/inc/shaper.inc:1160 etc/inc/shaper.inc:1163 +#: etc/inc/shaper.inc:1164 etc/inc/shaper.inc:1167 etc/inc/shaper.inc:1207 +#: etc/inc/shaper.inc:1210 etc/inc/shaper.inc:1207 etc/inc/shaper.inc:1210 +msgid "Default queue" +msgstr "デフォルトã®ã‚­ãƒ¥ãƒ¼" + +#: etc/inc/shaper.inc:1168 etc/inc/shaper.inc:1169 etc/inc/shaper.inc:1170 +#: etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1217 etc/inc/shaper.inc:1217 +msgid "Random Early Detection" +msgstr "ランダム早期検出" + +#: etc/inc/shaper.inc:1173 etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1175 +#: etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1222 etc/inc/shaper.inc:1222 +msgid "Random Early Detection In and Out" +msgstr "ランダム早期検出Inã¨Out" + +#: etc/inc/shaper.inc:1178 etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180 +#: etc/inc/shaper.inc:1184 etc/inc/shaper.inc:1227 etc/inc/shaper.inc:1227 +msgid "Explicit Congestion Notification" +msgstr "明示的輻輳通知" + +#: etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180 etc/inc/shaper.inc:1181 +#: etc/inc/shaper.inc:1185 etc/inc/shaper.inc:1233 etc/inc/shaper.inc:1233 +msgid "Select options for this queue" +msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã®((オプション))ã‚’é¸æŠžã—ã¾ã™" + +#: etc/inc/shaper.inc:1181 etc/inc/shaper.inc:3069 etc/inc/shaper.inc:3501 +#: usr/local/www/load_balancer_virtual_server.php:134 +#: usr/local/www/pkg_mgr_installed.php:94 +#: usr/local/www/firewall_aliases_import.php:140 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:121 +#: usr/local/www/firewall_virtual_ip_edit.php:538 +#: usr/local/www/load_balancer_relay_action.php:143 +#: usr/local/www/services_dyndns.php:103 usr/local/www/services_wol.php:163 +#: usr/local/www/services_wol_edit.php:148 +#: usr/local/www/interfaces_bridge.php:109 +#: usr/local/www/interfaces_bridge_edit.php:273 +#: usr/local/www/interfaces_gif.php:108 +#: usr/local/www/interfaces_gif_edit.php:208 +#: usr/local/www/interfaces_gre.php:109 +#: usr/local/www/interfaces_gre_edit.php:219 +#: usr/local/www/interfaces_groups.php:96 +#: usr/local/www/interfaces_groups_edit.php:259 +#: usr/local/www/firewall_aliases.php:167 +#: usr/local/www/firewall_aliases_edit.php:455 +#: usr/local/www/firewall_aliases_edit.php:591 +#: usr/local/www/firewall_aliases_edit.php:626 +#: usr/local/www/firewall_nat_1to1.php:108 +#: usr/local/www/firewall_nat_1to1_edit.php:440 +#: usr/local/www/firewall_nat_edit.php:769 +#: usr/local/www/firewall_nat_out.php:349 +#: usr/local/www/firewall_nat_out_edit.php:636 +#: usr/local/www/firewall_rules.php:374 +#: usr/local/www/firewall_rules_edit.php:1053 +#: usr/local/www/firewall_schedule.php:98 +#: usr/local/www/firewall_schedule_edit.php:793 +#: usr/local/www/firewall_schedule_edit.php:998 +#: usr/local/www/firewall_virtual_ip.php:187 usr/local/www/interfaces.php:1244 +#: usr/local/www/load_balancer_pool.php:136 +#: usr/local/www/interfaces_vlan.php:110 +#: usr/local/www/interfaces_vlan_edit.php:179 +#: usr/local/www/system_routes.php:129 +#: usr/local/www/system_routes_edit.php:267 +#: usr/local/www/interfaces_lagg.php:114 +#: usr/local/www/interfaces_lagg_edit.php:208 +#: usr/local/www/interfaces_ppps.php:110 +#: usr/local/www/interfaces_ppps_edit.php:467 +#: usr/local/www/interfaces_qinq.php:119 +#: usr/local/www/interfaces_qinq_edit.php:337 +#: usr/local/www/interfaces_wireless.php:108 +#: usr/local/www/interfaces_wireless_edit.php:185 +#: usr/local/www/load_balancer_monitor.php:124 usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:241 +#: usr/local/www/load_balancer_pool_edit.php:196 +#: usr/local/www/load_balancer_virtual_server_edit.php:189 +#: usr/local/www/pkg_mgr.php:118 usr/local/www/firewall_nat.php:203 +#: usr/local/www/diag_ipsec.php:95 +#: usr/local/www/services_captiveportal_ip.php:118 +#: usr/local/www/services_captiveportal_ip_edit.php:208 +#: usr/local/www/services_captiveportal_mac.php:168 +#: usr/local/www/services_captiveportal_mac_edit.php:182 +#: usr/local/www/services_dhcp.php:893 +#: usr/local/www/services_dhcp_edit.php:242 +#: usr/local/www/services_dnsmasq.php:246 +#: usr/local/www/services_dnsmasq.php:313 +#: usr/local/www/services_dnsmasq_edit.php:163 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:417 +#: usr/local/www/load_balancer_relay_protocol.php:137 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:218 +#: usr/local/www/services_captiveportal_hostname.php:123 +#: usr/local/www/services_captiveportal_hostname_edit.php:183 +#: usr/local/www/status_services.php:245 usr/local/www/status_upnp.php:88 +#: usr/local/www/services_dyndns_edit.php:228 +#: usr/local/www/services_igmpproxy.php:98 +#: usr/local/www/services_igmpproxy_edit.php:175 +#: usr/local/www/services_rfc2136.php:80 +#: usr/local/www/services_rfc2136_edit.php:192 +#: usr/local/www/status_gateway_groups.php:76 +#: usr/local/www/status_gateways.php:78 usr/local/www/status_lb_pool.php:134 +#: usr/local/www/status_lb_vs.php:81 +#: usr/local/www/system_advanced_sysctl.php:172 +#: usr/local/www/system_advanced_sysctl.php:243 +#: usr/local/www/system_gateway_groups.php:123 +#: usr/local/www/system_gateway_groups_edit.php:219 +#: usr/local/www/system_gateways.php:156 +#: usr/local/www/system_gateways_edit.php:484 +#: usr/local/www/system_groupmanager.php:275 +#: usr/local/www/system_groupmanager.php:347 +#: usr/local/www/system_groupmanager.php:405 +#: usr/local/www/system_groupmanager_addprivs.php:216 +#: usr/local/www/system_usermanager.php:578 +#: usr/local/www/system_usermanager_addprivs.php:197 +#: usr/local/www/vpn_ipsec_phase1.php:575 +#: usr/local/www/vpn_ipsec_phase2.php:497 +#: usr/local/www/vpn_openvpn_client.php:573 +#: usr/local/www/vpn_openvpn_client.php:863 +#: usr/local/www/vpn_openvpn_csc.php:342 usr/local/www/vpn_openvpn_csc.php:674 +#: usr/local/www/vpn_openvpn_server.php:722 +#: usr/local/www/vpn_openvpn_server.php:1451 +#: usr/local/www/vpn_pppoe_edit.php:444 usr/local/www/firewall_nat_npt.php:107 +#: usr/local/www/firewall_nat_npt_edit.php:261 +#: usr/local/www/services_dhcpv6.php:806 +#: usr/local/www/services_dhcpv6_edit.php:219 +#: usr/local/www/services_captiveportal_zones.php:55 +#: usr/local/www/services_captiveportal_zones_edit.php:106 +#: etc/inc/shaper.inc:1182 etc/inc/shaper.inc:3077 etc/inc/shaper.inc:3513 +#: usr/local/www/system_routes_edit.php:307 usr/local/www/pkg_mgr.php:132 +#: usr/local/www/services_unbound_acls.php:238 +#: usr/local/www/services_unbound_acls.php:292 +#: usr/local/www/services_unbound_acls.php:319 +#: usr/local/www/system_gateway_groups_edit.php:274 +#: usr/local/www/services_dnsmasq.php:334 +#: usr/local/www/services_dyndns_edit.php:358 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/services_dnsmasq_edit.php:218 +#: usr/local/www/services_dnsmasq_edit.php:239 +#: usr/local/www/firewall_nat_1to1_edit.php:447 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/firewall_nat_npt_edit.php:266 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/diag_ipsec.php:106 +#: usr/local/www/load_balancer_relay_action_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/services_unbound.php:282 +#: usr/local/www/services_unbound.php:349 +#: usr/local/www/system_usermanager.php:576 +#: usr/local/www/services_igmpproxy_edit.php:177 +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:596 +#: usr/local/www/firewall_aliases_edit.php:631 +#: usr/local/www/pkg_mgr_installed.php:114 +#: usr/local/www/firewall_rules.php:378 +#: usr/local/www/load_balancer_virtual_server.php:135 +#: usr/local/www/system_groupmanager_addprivs.php:214 +#: usr/local/www/system_gateways_edit.php:519 +#: usr/local/www/load_balancer_monitor.php:125 +#: usr/local/www/services_dyndns.php:112 +#: usr/local/www/vpn_openvpn_server.php:795 +#: usr/local/www/vpn_openvpn_server.php:1593 +#: usr/local/www/services_dhcp.php:931 +#: usr/local/www/load_balancer_virtual_server_edit.php:163 +#: usr/local/www/interfaces_bridge_edit.php:282 +#: usr/local/www/firewall_aliases.php:170 +#: usr/local/www/vpn_ipsec_phase2.php:523 +#: usr/local/www/firewall_nat_edit.php:776 +#: usr/local/www/services_dhcp_edit.php:251 usr/local/www/interfaces.php:1348 +#: usr/local/www/vpn_openvpn_client.php:578 +#: usr/local/www/vpn_openvpn_client.php:868 +#: usr/local/www/load_balancer_pool_edit.php:204 +#: usr/local/www/firewall_virtual_ip_edit.php:526 +#: usr/local/www/interfaces_gre_edit.php:218 +#: usr/local/www/load_balancer_pool.php:137 +#: usr/local/www/vpn_ipsec_phase1.php:588 +#: usr/local/www/services_dhcpv6.php:901 etc/inc/shaper.inc:3225 +#: etc/inc/shaper.inc:3668 usr/local/www/vpn_pppoe_edit.php:445 +#: usr/local/www/system_routes_edit.php:308 +#: usr/local/www/system_gateway_groups_edit.php:334 +#: usr/local/www/interfaces_vlan_edit.php:180 +#: usr/local/www/services_dnsmasq.php:247 +#: usr/local/www/services_dnsmasq.php:335 +#: usr/local/www/firewall_nat_out.php:360 +#: usr/local/www/system_groupmanager.php:406 +#: usr/local/www/services_dnsmasq_edit.php:219 +#: usr/local/www/services_dnsmasq_edit.php:240 +#: usr/local/www/load_balancer_relay_protocol_edit.php:216 +#: usr/local/www/firewall_nat_1to1_edit.php:445 +#: usr/local/www/services_dhcpv6_edit.php:230 +#: usr/local/www/services_captiveportal_ip.php:116 +#: usr/local/www/firewall_nat_npt_edit.php:265 usr/local/www/vpn_pppoe.php:105 +#: usr/local/www/interfaces_groups.php:97 +#: usr/local/www/services_captiveportal_hostname_edit.php:181 +#: usr/local/www/interfaces_qinq_edit.php:338 +#: usr/local/www/interfaces_gif_edit.php:209 usr/local/www/diag_ipsec.php:107 +#: usr/local/www/firewall_nat.php:208 usr/local/www/interfaces_qinq.php:120 +#: usr/local/www/load_balancer_relay_action_edit.php:414 +#: usr/local/www/interfaces_ppps.php:111 +#: usr/local/www/load_balancer_monitor_edit.php:239 +#: usr/local/www/services_captiveportal_mac.php:166 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151 +#: usr/local/www/services_captiveportal_mac_edit.php:180 +#: usr/local/www/firewall_schedule_edit.php:792 +#: usr/local/www/firewall_schedule_edit.php:997 +#: usr/local/www/interfaces_bridge.php:110 +#: usr/local/www/interfaces_ppps_edit.php:468 +#: usr/local/www/interfaces_lagg.php:115 +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/firewall_aliases_edit.php:599 +#: usr/local/www/firewall_aliases_edit.php:634 +#: usr/local/www/interfaces_lagg_edit.php:209 +#: usr/local/www/vpn_openvpn_csc.php:341 usr/local/www/vpn_openvpn_csc.php:673 +#: usr/local/www/services_captiveportal_hostname.php:121 +#: usr/local/www/firewall_rules.php:371 usr/local/www/interfaces_gre.php:110 +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/interfaces_wireless.php:109 +#: usr/local/www/system_gateway_groups.php:124 +#: usr/local/www/status_services.php:241 +#: usr/local/www/system_gateways_edit.php:619 +#: usr/local/www/status_gateways.php:79 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/services_captiveportal_ip_edit.php:206 +#: usr/local/www/load_balancer_relay_protocol.php:135 +#: usr/local/www/vpn_openvpn_server.php:823 +#: usr/local/www/vpn_openvpn_server.php:1634 usr/local/www/status_upnp.php:89 +#: usr/local/www/services_dhcp.php:1135 +#: usr/local/www/load_balancer_virtual_server_edit.php:161 +#: usr/local/www/interfaces_bridge_edit.php:283 +#: usr/local/www/firewall_aliases.php:190 +#: usr/local/www/load_balancer_relay_action.php:141 +#: usr/local/www/interfaces_groups_edit.php:260 +#: usr/local/www/services_captiveportal_zones_edit.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:625 +#: usr/local/www/interfaces_vlan.php:111 +#: usr/local/www/firewall_nat_edit.php:775 +#: usr/local/www/services_dhcp_edit.php:253 usr/local/www/interfaces.php:1336 +#: usr/local/www/services_captiveportal_zones.php:56 +#: usr/local/www/vpn_openvpn_client.php:596 +#: usr/local/www/vpn_openvpn_client.php:921 +#: usr/local/www/status_gateway_groups.php:77 +#: usr/local/www/load_balancer_pool_edit.php:202 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/interfaces_gif.php:109 +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/firewall_virtual_ip.php:191 +#: usr/local/www/vpn_ipsec_phase1.php:587 +#: usr/local/www/services_dhcpv6.php:832 usr/local/www/services_rfc2136.php:81 +#: usr/local/www/status_services.php:239 +#: usr/local/www/system_gateways_edit.php:623 +#: usr/local/www/services_captiveportal_ip_edit.php:200 +#: usr/local/www/vpn_pppoe.php:106 +#: usr/local/www/interfaces_wireless_edit.php:187 +#: usr/local/www/services_captiveportal_zones_edit.php:105 +#: usr/local/www/vpn_openvpn_client.php:615 +#: usr/local/www/vpn_openvpn_client.php:940 +#: usr/local/www/services_dhcpv6_edit.php:233 +#: usr/local/www/services_dyndns_edit.php:362 +#: usr/local/www/firewall_rules_edit.php:1103 +#: usr/local/www/interfaces_qinq.php:123 +#: usr/local/www/interfaces_vlan_edit.php:183 +#: usr/local/www/interfaces_ppps_edit.php:474 +#: usr/local/www/firewall_virtual_ip.php:205 +#: usr/local/www/interfaces_lagg_edit.php:222 +#: usr/local/www/firewall_nat_edit.php:770 +#: usr/local/www/interfaces_lagg.php:119 usr/local/www/interfaces_vlan.php:117 +#: usr/local/www/interfaces_gif_edit.php:220 +#: usr/local/www/services_dhcp_edit.php:381 +#: usr/local/www/firewall_virtual_ip_edit.php:463 +#: usr/local/www/diag_ipsec.php:109 usr/local/www/interfaces_bridge.php:116 +#: usr/local/www/interfaces_wireless.php:111 +#: usr/local/www/system_routes.php:133 usr/local/www/vpn_pppoe_edit.php:448 +#: usr/local/www/services_dhcp.php:792 usr/local/www/services_dhcp.php:1154 +#: usr/local/www/services_captiveportal_mac_edit.php:193 +#: usr/local/www/services_dhcpv6.php:853 +#: usr/local/www/interfaces_bridge_edit.php:284 +#: usr/local/www/services_dnsmasq.php:272 +#: usr/local/www/services_dnsmasq.php:360 +#: usr/local/www/services_captiveportal_mac.php:176 +#: usr/local/www/vpn_ipsec_phase1.php:608 usr/local/www/interfaces_gre.php:114 +#: usr/local/www/firewall_nat_out_edit.php:651 +#: usr/local/www/vpn_openvpn_server.php:850 +#: usr/local/www/vpn_openvpn_server.php:1686 +#: usr/local/www/vpn_ipsec_phase2.php:646 usr/local/www/services_dyndns.php:93 +#: usr/local/www/interfaces_gif.php:113 +#: usr/local/www/interfaces_qinq_edit.php:341 +#: usr/local/www/interfaces.php:1349 etc/inc/shaper.inc:1183 +#: etc/inc/shaper.inc:3226 etc/inc/shaper.inc:3669 +#: usr/local/www/status_services.php:80 +#: usr/local/www/system_gateways_edit.php:625 +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/firewall_rules_edit.php:1116 +#: usr/local/www/firewall_nat_edit.php:782 +#: usr/local/www/firewall_virtual_ip_edit.php:483 +#: usr/local/www/pkg_mgr_installed.php:116 usr/local/www/services_dhcp.php:812 +#: usr/local/www/services_dhcp.php:1174 usr/local/www/pkg_mgr.php:135 +#: usr/local/www/system_routes_edit.php:331 +#: usr/local/www/firewall_nat_out.php:367 usr/local/www/firewall_rules.php:369 +#: usr/local/www/system_gateway_groups_edit.php:336 +#: usr/local/www/firewall_aliases_edit.php:482 +#: usr/local/www/firewall_aliases_edit.php:630 +#: usr/local/www/firewall_aliases_edit.php:665 +#: usr/local/www/services_dnsmasq.php:285 +#: usr/local/www/services_dnsmasq.php:373 +#: usr/local/www/firewall_nat_out_edit.php:663 +#: usr/local/www/services_dyndns.php:89 +#: usr/local/www/system_gateway_groups.php:133 +#: usr/local/www/interfaces.php:1391 etc/inc/shaper.inc:1187 +#: etc/inc/shaper.inc:3233 etc/inc/shaper.inc:3481 etc/inc/shaper.inc:3676 +#: usr/local/www/system_gateways_edit.php:655 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_virtual_ip.php:228 +#: usr/local/www/interfaces_lagg_edit.php:221 +#: usr/local/www/firewall_nat_edit.php:783 usr/local/www/system_routes.php:149 +#: usr/local/www/firewall_nat.php:211 usr/local/www/system_routes_edit.php:340 +#: usr/local/www/firewall_nat_out.php:366 +#: usr/local/www/interfaces_bridge_edit.php:286 +#: usr/local/www/services_dnsmasq.php:349 +#: usr/local/www/services_dnsmasq.php:437 usr/local/www/interfaces.php:1386 +#: etc/inc/shaper.inc:1235 etc/inc/shaper.inc:3301 etc/inc/shaper.inc:3549 +#: etc/inc/shaper.inc:3744 usr/local/www/services_rfc2136.php:81 +#: usr/local/www/status_services.php:80 +#: usr/local/www/system_gateways_edit.php:656 +#: usr/local/www/services_captiveportal_ip_edit.php:200 +#: usr/local/www/vpn_pppoe.php:106 +#: usr/local/www/interfaces_wireless_edit.php:187 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:216 +#: usr/local/www/system_groupmanager.php:275 +#: usr/local/www/system_groupmanager.php:347 +#: usr/local/www/system_groupmanager.php:406 +#: usr/local/www/services_captiveportal_zones_edit.php:105 +#: usr/local/www/interfaces_gre_edit.php:219 +#: usr/local/www/vpn_openvpn_client.php:615 +#: usr/local/www/vpn_openvpn_client.php:940 +#: usr/local/www/firewall_schedule.php:98 +#: usr/local/www/system_usermanager_addprivs.php:197 +#: usr/local/www/services_dhcpv6_edit.php:233 +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/services_wol.php:163 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/load_balancer_virtual_server_edit.php:161 +#: usr/local/www/services_captiveportal_ip.php:116 +#: usr/local/www/interfaces_qinq.php:123 +#: usr/local/www/interfaces_vlan_edit.php:183 +#: usr/local/www/interfaces_ppps_edit.php:474 +#: usr/local/www/firewall_virtual_ip.php:228 +#: usr/local/www/vpn_openvpn_csc.php:341 usr/local/www/vpn_openvpn_csc.php:673 +#: usr/local/www/interfaces_lagg_edit.php:221 +#: usr/local/www/firewall_schedule_edit.php:792 +#: usr/local/www/firewall_schedule_edit.php:997 +#: usr/local/www/firewall_nat_edit.php:783 +#: usr/local/www/interfaces_lagg.php:119 usr/local/www/interfaces_vlan.php:117 +#: usr/local/www/services_captiveportal_hostname_edit.php:183 +#: usr/local/www/interfaces_gif_edit.php:220 +#: usr/local/www/firewall_aliases.php:190 +#: usr/local/www/services_dhcp_edit.php:381 +#: usr/local/www/services_wol_edit.php:148 +#: usr/local/www/firewall_virtual_ip_edit.php:483 +#: usr/local/www/load_balancer_relay_protocol.php:135 +#: usr/local/www/diag_ipsec.php:109 usr/local/www/pkg_mgr_installed.php:116 +#: usr/local/www/interfaces_bridge.php:116 +#: usr/local/www/firewall_aliases_import.php:140 +#: usr/local/www/interfaces_wireless.php:111 +#: usr/local/www/system_routes.php:149 +#: usr/local/www/load_balancer_relay_action.php:141 +#: usr/local/www/vpn_pppoe_edit.php:448 usr/local/www/services_dhcp.php:812 +#: usr/local/www/services_dhcp.php:1174 usr/local/www/firewall_nat.php:211 +#: usr/local/www/status_lb_pool.php:134 usr/local/www/interfaces_groups.php:97 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:414 +#: usr/local/www/pkg_mgr.php:183 usr/local/www/system_routes_edit.php:334 +#: usr/local/www/services_captiveportal_mac_edit.php:193 +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/services_captiveportal_hostname.php:121 +#: usr/local/www/services_dhcpv6.php:853 +#: usr/local/www/firewall_nat_out.php:366 +#: usr/local/www/interfaces_ppps.php:111 usr/local/www/firewall_rules.php:369 +#: usr/local/www/firewall_nat_npt.php:107 +#: usr/local/www/firewall_nat_1to1.php:108 +#: usr/local/www/firewall_nat_npt_edit.php:265 +#: usr/local/www/interfaces_groups_edit.php:260 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:239 +#: usr/local/www/system_gateway_groups_edit.php:336 +#: usr/local/www/services_captiveportal_zones.php:56 +#: usr/local/www/system_groupmanager_addprivs.php:216 +#: usr/local/www/firewall_aliases_edit.php:468 +#: usr/local/www/firewall_aliases_edit.php:616 +#: usr/local/www/firewall_aliases_edit.php:651 +#: usr/local/www/interfaces_bridge_edit.php:286 +#: usr/local/www/services_igmpproxy_edit.php:177 +#: usr/local/www/services_igmpproxy.php:98 +#: usr/local/www/firewall_nat_1to1_edit.php:447 +#: usr/local/www/status_gateway_groups.php:77 +#: usr/local/www/services_dnsmasq_edit.php:219 +#: usr/local/www/services_dnsmasq_edit.php:240 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/services_rfc2136_edit.php:192 +#: usr/local/www/services_dnsmasq.php:349 +#: usr/local/www/services_dnsmasq.php:437 +#: usr/local/www/services_captiveportal_mac.php:176 +#: usr/local/www/vpn_ipsec_phase1.php:608 usr/local/www/interfaces_gre.php:114 +#: usr/local/www/system_usermanager.php:576 +#: usr/local/www/system_gateways.php:156 +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/load_balancer_pool_edit.php:202 +#: usr/local/www/status_lb_vs.php:81 +#: usr/local/www/firewall_nat_out_edit.php:663 +#: usr/local/www/vpn_openvpn_server.php:850 +#: usr/local/www/vpn_openvpn_server.php:1686 +#: usr/local/www/vpn_ipsec_phase2.php:646 usr/local/www/status_gateways.php:79 +#: usr/local/www/services_dyndns.php:89 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151 +#: usr/local/www/interfaces_gif.php:113 +#: usr/local/www/interfaces_qinq_edit.php:341 +#: usr/local/www/system_gateway_groups.php:133 +#: usr/local/www/status_upnp.php:89 +#: usr/local/www/system_advanced_sysctl.php:172 +#: usr/local/www/system_advanced_sysctl.php:243 +#: usr/local/www/interfaces.php:1386 etc/inc/shaper.inc:1235 +#: etc/inc/shaper.inc:3378 etc/inc/shaper.inc:3651 etc/inc/shaper.inc:3849 +msgid "Description" +msgstr "デスクリプション" + +#: etc/inc/shaper.inc:1207 etc/inc/shaper.inc:1209 etc/inc/shaper.inc:1210 +#: etc/inc/shaper.inc:1214 etc/inc/shaper.inc:1262 etc/inc/shaper.inc:1262 +msgid "Bandwidth:" +msgstr "帯域幅:" + +#: etc/inc/shaper.inc:1212 etc/inc/shaper.inc:1214 etc/inc/shaper.inc:1215 +#: etc/inc/shaper.inc:1218 etc/inc/shaper.inc:1266 etc/inc/shaper.inc:1266 +msgid "Priority: on" +msgstr "優先:オン" + +#: etc/inc/shaper.inc:1215 etc/inc/shaper.inc:1217 etc/inc/shaper.inc:1218 +#: etc/inc/shaper.inc:1221 etc/inc/shaper.inc:1269 etc/inc/shaper.inc:1269 +msgid "Default: on" +msgstr "デフォルト:オン" + +#: etc/inc/shaper.inc:1222 etc/inc/shaper.inc:1223 etc/inc/shaper.inc:1224 +#: etc/inc/shaper.inc:1225 etc/inc/shaper.inc:1226 etc/inc/shaper.inc:1228 +#: etc/inc/shaper.inc:1229 etc/inc/shaper.inc:1276 etc/inc/shaper.inc:1277 +#: etc/inc/shaper.inc:1276 etc/inc/shaper.inc:1277 +msgid "Delete queue from interface" +msgstr "インターフェイスã‹ã‚‰ã‚­ãƒ¥ãƒ¼ã‚’削除" + +#: etc/inc/shaper.inc:1559 etc/inc/shaper.inc:2207 etc/inc/shaper.inc:2483 +#: etc/inc/shaper.inc:1561 etc/inc/shaper.inc:2209 etc/inc/shaper.inc:2485 +#: etc/inc/shaper.inc:1562 etc/inc/shaper.inc:2210 etc/inc/shaper.inc:2486 +#: etc/inc/shaper.inc:1565 etc/inc/shaper.inc:2215 etc/inc/shaper.inc:2491 +#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:2273 etc/inc/shaper.inc:2554 +#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:2273 etc/inc/shaper.inc:2554 +msgid "Bandwidth in percentage should be between 1 and 100 bounds." +msgstr "割åˆã®å¸¯åŸŸå¹…ã¯1ã¨100ã®å¢ƒç•Œã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:1576 etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1579 +#: etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1633 etc/inc/shaper.inc:1633 +msgid "upperlimit service curve defined but missing (d) value" +msgstr "UPPERLIMITサービスカーブãŒå®šç¾©ã•れã¦ã„ã¾ã™ãŒã€ä¸è¶³ã—ã¦ã„ã‚‹(d)ã®å€¤" + +#: etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1581 +#: etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1635 etc/inc/shaper.inc:1635 +msgid "" +"upperlimit service curve defined but missing initial bandwidth (m1) value" +msgstr "UPPERLIMITサービス曲線ãŒä¸è¶³ã—ã¦ã„ã‚‹åˆæœŸã®å¸¯åŸŸå¹…(m1)ã®å€¤ã‚’定義ã•れã¦ã„ã¾ã™ãŒã€" + +#: etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1583 +#: etc/inc/shaper.inc:1586 etc/inc/shaper.inc:1637 etc/inc/shaper.inc:1637 +msgid "upperlimit m1 value needs to be Kb, Mb, Gb, or %" +msgstr "upperlimit m1ã®å€¤ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹" + +#: etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1585 +#: etc/inc/shaper.inc:1588 etc/inc/shaper.inc:1639 etc/inc/shaper.inc:1639 +msgid "upperlimit d value needs to be numeric" +msgstr "upperlimit då€¤ã¯æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1586 etc/inc/shaper.inc:1587 +#: etc/inc/shaper.inc:1590 etc/inc/shaper.inc:1641 etc/inc/shaper.inc:1641 +msgid "upperlimit m2 value needs to be Kb, Mb, Gb, or %" +msgstr "upperlimit m2 値ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹" + +#: etc/inc/shaper.inc:1598 etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1601 +#: etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1655 etc/inc/shaper.inc:1655 +msgid "linkshare service curve defined but missing (d) value" +msgstr "リンクシェア·サービス曲線定義ã•れã¦ã„ã‚‹ãŒã€ä¸è¶³ã—ã¦ã„る(d)ã®å€¤" + +#: etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1603 +#: etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1657 etc/inc/shaper.inc:1657 +msgid "" +"linkshare service curve defined but missing initial bandwidth (m1) value" +msgstr ""リンクシェア·サービス曲線定義ã•れã¦ã„ã‚‹ãŒã€ä¸è¶³ã—ã¦ã„ã‚‹åˆæœŸã®å¸¯åŸŸå¹…(m1)ã®å€¤" + +#: etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1605 +#: etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1659 etc/inc/shaper.inc:1659 +msgid "linkshare m1 value needs to be Kb, Mb, Gb, or %" +msgstr "リンクシェアã®m1ã®å€¤ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹" + +#: etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1607 +#: etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1661 etc/inc/shaper.inc:1661 +msgid "linkshare d value needs to be numeric" +msgstr "リンクシェアã®då€¤ã¯æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1609 +#: etc/inc/shaper.inc:1612 etc/inc/shaper.inc:1663 etc/inc/shaper.inc:1663 +msgid "linkshare m2 value needs to be Kb, Mb, Gb, or %" +msgstr "リンクシェアã®m2ã®å€¤ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹" + +#: etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1611 +#: etc/inc/shaper.inc:1614 etc/inc/shaper.inc:1665 etc/inc/shaper.inc:1665 +msgid "realtime service curve defined but missing (d) value" +msgstr "リアルタイムサービス曲線定義ã•れã¦ã„ã‚‹ãŒã€ä¸è¶³ã—ã¦ã„る(d)ã®å€¤" + +#: etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1612 etc/inc/shaper.inc:1613 +#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:1667 etc/inc/shaper.inc:1667 +msgid "realtime service curve defined but missing initial bandwidth (m1) value" +msgstr "リアルタイムサービス曲線定義ã•れã¦ã„ã‚‹ãŒã€ä¸è¶³ã—ã¦ã„ã‚‹åˆæœŸã®å¸¯åŸŸå¹…(m1)ã®å€¤" + +#: etc/inc/shaper.inc:1625 etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1628 +#: etc/inc/shaper.inc:1631 etc/inc/shaper.inc:1682 etc/inc/shaper.inc:1682 +msgid "realtime m1 value needs to be Kb, Mb, Gb, or %" +msgstr "リアルタイムm1ã®å€¤ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹" + +#: etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1630 +#: etc/inc/shaper.inc:1633 etc/inc/shaper.inc:1684 etc/inc/shaper.inc:1684 +msgid "realtime d value needs to be numeric" +msgstr "リアルタイムDå€¤ã¯æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1631 etc/inc/shaper.inc:1632 +#: etc/inc/shaper.inc:1635 etc/inc/shaper.inc:1686 etc/inc/shaper.inc:1686 +msgid "realtime m2 value needs to be Kb, Mb, Gb, or %" +msgstr "リアルタイムã®m2値ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹" + +#: etc/inc/shaper.inc:1858 etc/inc/shaper.inc:2336 etc/inc/shaper.inc:2602 +#: etc/inc/shaper.inc:3039 etc/inc/shaper.inc:1860 etc/inc/shaper.inc:2338 +#: etc/inc/shaper.inc:2604 etc/inc/shaper.inc:3047 etc/inc/shaper.inc:1861 +#: etc/inc/shaper.inc:2339 etc/inc/shaper.inc:2605 etc/inc/shaper.inc:1866 +#: etc/inc/shaper.inc:2344 etc/inc/shaper.inc:2610 etc/inc/shaper.inc:1924 +#: etc/inc/shaper.inc:2407 etc/inc/shaper.inc:2678 etc/inc/shaper.inc:1924 +#: etc/inc/shaper.inc:2407 etc/inc/shaper.inc:2678 +msgid "Gbit/s" +msgstr "Gビット/ç§’" + +#: etc/inc/shaper.inc:1862 etc/inc/shaper.inc:2340 etc/inc/shaper.inc:2606 +#: etc/inc/shaper.inc:3035 etc/inc/shaper.inc:1864 etc/inc/shaper.inc:2342 +#: etc/inc/shaper.inc:2608 etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1865 +#: etc/inc/shaper.inc:2343 etc/inc/shaper.inc:2609 etc/inc/shaper.inc:1870 +#: etc/inc/shaper.inc:2348 etc/inc/shaper.inc:2614 etc/inc/shaper.inc:1928 +#: etc/inc/shaper.inc:2411 etc/inc/shaper.inc:2682 etc/inc/shaper.inc:1928 +#: etc/inc/shaper.inc:2411 etc/inc/shaper.inc:2682 +msgid "Mbit/s" +msgstr "Mビット/ç§’" + +#: etc/inc/shaper.inc:1866 etc/inc/shaper.inc:2344 etc/inc/shaper.inc:2610 +#: etc/inc/shaper.inc:3031 usr/local/www/services_captiveportal.php:560 +#: usr/local/www/services_captiveportal.php:564 etc/inc/shaper.inc:1868 +#: etc/inc/shaper.inc:2346 etc/inc/shaper.inc:2612 etc/inc/shaper.inc:3039 +#: usr/local/www/services_captiveportal.php:565 +#: usr/local/www/services_captiveportal.php:569 +#: usr/local/www/services_captiveportal.php:563 +#: usr/local/www/services_captiveportal.php:567 etc/inc/shaper.inc:1869 +#: etc/inc/shaper.inc:2347 etc/inc/shaper.inc:2613 +#: usr/local/www/services_captiveportal.php:581 +#: usr/local/www/services_captiveportal.php:585 etc/inc/shaper.inc:1874 +#: etc/inc/shaper.inc:2352 etc/inc/shaper.inc:2618 etc/inc/shaper.inc:1932 +#: etc/inc/shaper.inc:2415 etc/inc/shaper.inc:2686 +#: usr/local/www/services_captiveportal.php:581 +#: usr/local/www/services_captiveportal.php:585 etc/inc/shaper.inc:1932 +#: etc/inc/shaper.inc:2415 etc/inc/shaper.inc:2686 +msgid "Kbit/s" +msgstr "Kビット/ç§’" + +#: etc/inc/shaper.inc:1870 etc/inc/shaper.inc:2348 etc/inc/shaper.inc:2614 +#: etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1872 etc/inc/shaper.inc:2350 +#: etc/inc/shaper.inc:2616 etc/inc/shaper.inc:3051 etc/inc/shaper.inc:1873 +#: etc/inc/shaper.inc:2351 etc/inc/shaper.inc:2617 etc/inc/shaper.inc:1878 +#: etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 etc/inc/shaper.inc:1936 +#: etc/inc/shaper.inc:2419 etc/inc/shaper.inc:2690 etc/inc/shaper.inc:1936 +#: etc/inc/shaper.inc:2419 etc/inc/shaper.inc:2690 +msgid "Bit/s" +msgstr "ビット/ç§’" + +#: etc/inc/shaper.inc:1876 etc/inc/shaper.inc:2354 etc/inc/shaper.inc:2620 +#: etc/inc/shaper.inc:1878 etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 +#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:2357 etc/inc/shaper.inc:2623 +#: etc/inc/shaper.inc:1884 etc/inc/shaper.inc:2362 etc/inc/shaper.inc:2628 +#: etc/inc/shaper.inc:1942 etc/inc/shaper.inc:2425 etc/inc/shaper.inc:2696 +#: etc/inc/shaper.inc:1942 etc/inc/shaper.inc:2425 etc/inc/shaper.inc:2696 +msgid "Choose the amount of bandwidth for this queue" +msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã®å¸¯åŸŸå¹…ã®é‡ã‚’é¸æŠžã—ã¦ãã ã•ã„" + +#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:1881 etc/inc/shaper.inc:1882 +#: etc/inc/shaper.inc:1887 etc/inc/shaper.inc:1945 etc/inc/shaper.inc:1945 +msgid "Service Curve (sc)" +msgstr "サービス曲線(SC)" + +#: etc/inc/shaper.inc:1886 etc/inc/shaper.inc:1888 etc/inc/shaper.inc:1889 +#: etc/inc/shaper.inc:1894 etc/inc/shaper.inc:1952 etc/inc/shaper.inc:1952 +msgid "Upperlimit:" +msgstr "上é™ï¼š" + +#: etc/inc/shaper.inc:1901 etc/inc/shaper.inc:1903 etc/inc/shaper.inc:1904 +#: etc/inc/shaper.inc:1909 etc/inc/shaper.inc:1967 etc/inc/shaper.inc:1967 +msgid "The maximum allowed bandwidth for the queue." +msgstr "最大値ã¯ã€ã‚­ãƒ¥ãƒ¼ã®å¸¯åŸŸå¹…ã‚’å¯èƒ½ã«ã—ãŸã€‚" + +#: etc/inc/shaper.inc:1905 etc/inc/shaper.inc:1907 etc/inc/shaper.inc:1908 +#: etc/inc/shaper.inc:1913 etc/inc/shaper.inc:1971 etc/inc/shaper.inc:1971 +msgid "Real time:" +msgstr "リアルタイム:" + +#: etc/inc/shaper.inc:1920 etc/inc/shaper.inc:1922 etc/inc/shaper.inc:1923 +#: etc/inc/shaper.inc:1928 etc/inc/shaper.inc:1986 etc/inc/shaper.inc:1986 +msgid "The minimum required bandwidth for the queue." +msgstr "最å°å€¤ã¯ã€ã‚­ãƒ¥ãƒ¼ã®å¸¯åŸŸã‚’å¿…è¦ã¨ã—ãŸã€‚" + +#: etc/inc/shaper.inc:1924 etc/inc/shaper.inc:1926 etc/inc/shaper.inc:1927 +#: etc/inc/shaper.inc:1932 etc/inc/shaper.inc:1990 etc/inc/shaper.inc:1990 +msgid "Link share:" +msgstr "共有リンク:" + +#: etc/inc/shaper.inc:1939 etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1942 +#: etc/inc/shaper.inc:1947 etc/inc/shaper.inc:2005 etc/inc/shaper.inc:2005 +msgid "The bandwidth share of a backlogged queue - this overrides priority." +msgstr "ãƒãƒƒã‚¯ãƒ­ã‚°ã‚­ãƒ¥ãƒ¼ã®å¸¯åŸŸå¹…ã®å…±æœ‰ - ã“れã¯ã€å„ªå…ˆåº¦ã‚’上書ãã™ã‚‹ã€‚" + +#: etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1943 etc/inc/shaper.inc:1944 +#: etc/inc/shaper.inc:1949 etc/inc/shaper.inc:2007 etc/inc/shaper.inc:2007 +msgid "" +"The format for service curve specifications is (m1, d, m2). m2 controls the " +"bandwidth assigned to the queue. m1 and d are optional and can be used to " +"control the initial bandwidth assignment. For the first d milliseconds the " +"queue gets the bandwidth given as m1, afterwards the value given in m2." +msgstr ""サービスカーブ仕様ã®å½¢å¼ã¯ã€ï¼ˆm1ã€dã€m2)。 m2ã¯ã‚­ãƒ¥ãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸå¸¯åŸŸå¹…を制御ã—ã¾ã™ã€‚"m1ãŠã‚ˆã³dã¯ä»»æ„ã§ã‚ã‚Šã€æœ€åˆã®å¸¯åŸŸå¹…ã®å‰²ã‚Šå½“ã¦ã‚’制御ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãる。"最åˆã®dミリ秒待ã¡ã€ãã®å¾Œm1ã€m2ã§ä¸Žãˆã‚‰ã‚ŒãŸå€¤ã¨ã—ã¦ä¸Žãˆã‚‰ã‚ŒãŸå¸¯åŸŸå¹…ã‚’å–å¾—ã—ã¾ã™ã€‚" + +#: etc/inc/shaper.inc:2190 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2193 +#: etc/inc/shaper.inc:2198 etc/inc/shaper.inc:2256 etc/inc/shaper.inc:2256 +msgid "Priority must be an integer between 1 and 7." +msgstr "優先順ä½ã¯1ã‹ã‚‰7ã¾ã§ã®æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 etc/inc/shaper.inc:2358 +#: etc/inc/shaper.inc:2624 etc/inc/shaper.inc:2359 etc/inc/shaper.inc:2625 +#: etc/inc/shaper.inc:2364 etc/inc/shaper.inc:2630 etc/inc/shaper.inc:2427 +#: etc/inc/shaper.inc:2698 etc/inc/shaper.inc:2427 etc/inc/shaper.inc:2698 +msgid "Scheduler specific options" +msgstr "スケジューラ固有ã®ã‚ªãƒ—ション" + +#: etc/inc/shaper.inc:2360 etc/inc/shaper.inc:2362 etc/inc/shaper.inc:2363 +#: etc/inc/shaper.inc:2368 etc/inc/shaper.inc:2431 etc/inc/shaper.inc:2431 +msgid "Borrow from other queues when available" +msgstr "ä»–ã®ã‚­ãƒ¥ãƒ¼ã‹ã‚‰å€Ÿã‚Šã‚‹éš›ã«åˆ©ç”¨ã§ãã‚‹" + +#: etc/inc/shaper.inc:2465 etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2468 +#: etc/inc/shaper.inc:2473 etc/inc/shaper.inc:2536 etc/inc/shaper.inc:2536 +msgid "Priority must be an integer between 1 and 255." +msgstr "優先順ä½ã¯1ã‹ã‚‰255ã¾ã§ã®æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:2628 etc/inc/shaper.inc:2630 etc/inc/shaper.inc:2631 +#: etc/inc/shaper.inc:2636 etc/inc/shaper.inc:2704 etc/inc/shaper.inc:2704 +msgid "Number of buckets available." +msgstr "利用å¯èƒ½ãªãƒã‚±ãƒƒãƒˆæ•°ã€‚" + +#: etc/inc/shaper.inc:2633 etc/inc/shaper.inc:2635 etc/inc/shaper.inc:2636 +#: etc/inc/shaper.inc:2641 etc/inc/shaper.inc:2709 etc/inc/shaper.inc:2709 +msgid "Bandwidth limit for hosts to not saturate link." +msgstr "ホストãŒãƒªãƒ³ã‚¯ã‚’飽和ã—ãªã„よã†ã«ã™ã‚‹ãŸã‚ã®å¸¯åŸŸå¹…制é™ã€‚" + +#: etc/inc/shaper.inc:2797 etc/inc/shaper.inc:2799 etc/inc/shaper.inc:2800 +#: etc/inc/shaper.inc:2805 etc/inc/shaper.inc:2873 etc/inc/shaper.inc:2892 +msgid "Plr must be an integer between 1 and 100." +msgstr "Plr 1〜100ã®æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: etc/inc/shaper.inc:2800 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:2803 +#: etc/inc/shaper.inc:2808 etc/inc/shaper.inc:2876 etc/inc/shaper.inc:2895 +msgid "Buckets must be an integer between 16 and 65535." +msgstr "ãƒã‚±ãƒƒãƒˆã¯ã€16〜65535ã®é–“ã®æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: etc/inc/shaper.inc:2902 etc/inc/shaper.inc:2906 etc/inc/shaper.inc:2921 +#: etc/inc/shaper.inc:2922 etc/inc/shaper.inc:2927 etc/inc/shaper.inc:2995 +#: etc/inc/shaper.inc:3053 +msgid "Delay must be an integer." +msgstr "é…å»¶ã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:3009 usr/local/www/services_snmp.php:276 +#: usr/local/www/services_snmp.php:336 usr/local/www/interfaces.php:1234 +#: usr/local/www/system_firmware.php:131 +#: usr/local/www/services_dnsmasq.php:154 usr/local/www/diag_routes.php:60 +#: usr/local/www/services_rfc2136_edit.php:128 +#: usr/local/www/vpn_ipsec_phase1.php:813 etc/inc/shaper.inc:3013 +#: usr/local/www/services_unbound.php:150 usr/local/www/interfaces.php:1338 +#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:334 +#: usr/local/www/vpn_ipsec_phase1.php:826 etc/inc/shaper.inc:3143 +#: usr/local/www/services_dnsmasq.php:155 usr/local/www/diag_routes.php:61 +#: usr/local/www/system_firmware.php:138 usr/local/www/interfaces.php:1326 +#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:335 +#: usr/local/www/vpn_ipsec_phase1.php:823 +#: usr/local/www/system_firmware.php:133 +#: usr/local/www/services_dnsmasq.php:159 +#: usr/local/www/vpn_ipsec_phase1.php:844 usr/local/www/services_snmp.php:285 +#: usr/local/www/services_snmp.php:345 usr/local/www/interfaces.php:1339 +#: etc/inc/shaper.inc:3144 usr/local/www/services_dnsmasq.php:161 +#: usr/local/www/interfaces.php:1381 etc/inc/shaper.inc:3151 +#: usr/local/www/services_dnsmasq.php:182 usr/local/www/interfaces.php:1376 +#: etc/inc/shaper.inc:3219 usr/local/www/system_firmware.php:133 +#: usr/local/www/diag_routes.php:61 +#: usr/local/www/services_rfc2136_edit.php:128 +#: usr/local/www/services_dnsmasq.php:182 +#: usr/local/www/vpn_ipsec_phase1.php:844 usr/local/www/services_snmp.php:285 +#: usr/local/www/services_snmp.php:345 usr/local/www/interfaces.php:1376 +#: etc/inc/shaper.inc:3275 +msgid "Enable" +msgstr "有効ã«ã™ã‚‹" + +#: etc/inc/shaper.inc:3014 etc/inc/shaper.inc:3018 etc/inc/shaper.inc:3148 +#: etc/inc/shaper.inc:3149 etc/inc/shaper.inc:3156 etc/inc/shaper.inc:3224 +#: etc/inc/shaper.inc:3280 +msgid "Enable limiter and its children" +msgstr "リミッターã¨ãã®å­ã‚’有効ã«ã™ã‚‹" + +#: etc/inc/shaper.inc:3046 etc/inc/shaper.inc:3283 etc/inc/shaper.inc:3054 +#: etc/inc/shaper.inc:3295 etc/inc/shaper.inc:3202 etc/inc/shaper.inc:3450 +#: etc/inc/shaper.inc:3203 etc/inc/shaper.inc:3451 etc/inc/shaper.inc:3210 +#: etc/inc/shaper.inc:3458 etc/inc/shaper.inc:3278 etc/inc/shaper.inc:3526 +#: etc/inc/shaper.inc:3334 etc/inc/shaper.inc:3607 +msgid "Mask" +msgstr "マスク" + +#: etc/inc/shaper.inc:3056 etc/inc/shaper.inc:3293 etc/inc/shaper.inc:3064 +#: etc/inc/shaper.inc:3305 etc/inc/shaper.inc:3212 etc/inc/shaper.inc:3460 +#: etc/inc/shaper.inc:3213 etc/inc/shaper.inc:3461 etc/inc/shaper.inc:3220 +#: etc/inc/shaper.inc:3468 etc/inc/shaper.inc:3288 etc/inc/shaper.inc:3536 +#: etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3618 +msgid "Source addresses" +msgstr "é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: etc/inc/shaper.inc:3060 etc/inc/shaper.inc:3297 etc/inc/shaper.inc:3068 +#: etc/inc/shaper.inc:3309 etc/inc/shaper.inc:3216 etc/inc/shaper.inc:3464 +#: etc/inc/shaper.inc:3217 etc/inc/shaper.inc:3465 etc/inc/shaper.inc:3224 +#: etc/inc/shaper.inc:3472 etc/inc/shaper.inc:3292 etc/inc/shaper.inc:3540 +#: etc/inc/shaper.inc:3349 etc/inc/shaper.inc:3622 +msgid "Destination addresses" +msgstr "宛先アドレス" + +#: etc/inc/shaper.inc:3063 etc/inc/shaper.inc:3300 etc/inc/shaper.inc:3071 +#: etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3219 etc/inc/shaper.inc:3467 +#: etc/inc/shaper.inc:3220 etc/inc/shaper.inc:3468 etc/inc/shaper.inc:3227 +#: etc/inc/shaper.inc:3475 etc/inc/shaper.inc:3295 etc/inc/shaper.inc:3543 +msgid "" +"If 'source' or 'destination' is chosen, \n" +"a dynamic pipe with the bandwidth, delay, packet loss and queue size given " +"above will \n" +"be created for each source/destination IP address encountered, \n" +"respectively. This makes it possible to easily specify bandwidth \n" +"limits per host." +msgstr ""「ソースã€ã¾ãŸã¯ã€Œé€ä¿¡å…ˆã€ãŒé¸æŠžã•れãŸå ´åˆã€å‰è¨˜æ‰€å®šã®å¸¯åŸŸå¹…ã€é…å»¶ã€ãƒ‘ケットæå¤±ã€"キューサイズã®å‹•的パイプã¯ãれãžã‚Œã€é­é‡ã—ãŸå„é€ä¿¡å…ƒ/宛先IPアドレスãŒä½œæˆã•れã¾ã™ã€‚"ã“れã«ã‚ˆã‚Šã€ç°¡å˜ã«ãƒ›ã‚¹ãƒˆã”ã¨ã«å¸¯åŸŸå¹…制é™ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: etc/inc/shaper.inc:3075 etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3507 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:124 +#: usr/local/www/firewall_virtual_ip_edit.php:541 +#: usr/local/www/services_wol_edit.php:151 +#: usr/local/www/interfaces_gif_edit.php:211 +#: usr/local/www/interfaces_gre_edit.php:222 +#: usr/local/www/interfaces_groups_edit.php:264 +#: usr/local/www/firewall_aliases_edit.php:596 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +#: usr/local/www/firewall_nat_edit.php:772 +#: usr/local/www/firewall_nat_out_edit.php:639 +#: usr/local/www/firewall_schedule_edit.php:796 +#: usr/local/www/firewall_schedule_edit.php:970 +#: usr/local/www/interfaces_vlan_edit.php:182 +#: usr/local/www/system_routes_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:342 +#: usr/local/www/interfaces_wireless_edit.php:188 +#: usr/local/www/services_dhcp_edit.php:245 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_igmpproxy_edit.php:180 +#: usr/local/www/system_gateway_groups_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:264 +#: usr/local/www/services_dhcpv6_edit.php:222 etc/inc/shaper.inc:3083 +#: etc/inc/shaper.inc:3324 etc/inc/shaper.inc:3519 +#: usr/local/www/system_routes_edit.php:310 +#: usr/local/www/system_gateway_groups_edit.php:278 +#: usr/local/www/services_dnsmasq_edit.php:221 +#: usr/local/www/firewall_nat_1to1_edit.php:450 +#: usr/local/www/services_dhcpv6_edit.php:231 +#: usr/local/www/firewall_nat_npt_edit.php:269 +#: usr/local/www/firewall_nat_out_edit.php:652 +#: usr/local/www/services_igmpproxy_edit.php:182 +#: usr/local/www/firewall_aliases_edit.php:601 +#: usr/local/www/firewall_nat_edit.php:779 +#: usr/local/www/services_dhcp_edit.php:254 +#: usr/local/www/firewall_virtual_ip_edit.php:529 +#: usr/local/www/interfaces_gre_edit.php:221 etc/inc/shaper.inc:3231 +#: etc/inc/shaper.inc:3479 etc/inc/shaper.inc:3674 +#: usr/local/www/system_routes_edit.php:311 +#: usr/local/www/system_gateway_groups_edit.php:338 +#: usr/local/www/interfaces_vlan_edit.php:183 +#: usr/local/www/services_dnsmasq_edit.php:222 +#: usr/local/www/firewall_nat_1to1_edit.php:448 +#: usr/local/www/services_dhcpv6_edit.php:233 +#: usr/local/www/firewall_nat_npt_edit.php:268 +#: usr/local/www/interfaces_qinq_edit.php:343 +#: usr/local/www/interfaces_gif_edit.php:212 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:154 +#: usr/local/www/firewall_schedule_edit.php:795 +#: usr/local/www/firewall_schedule_edit.php:969 +#: usr/local/www/firewall_aliases_edit.php:604 +#: usr/local/www/interfaces_groups_edit.php:265 +#: usr/local/www/firewall_nat_edit.php:778 +#: usr/local/www/services_dhcp_edit.php:256 +#: usr/local/www/firewall_virtual_ip_edit.php:474 +#: usr/local/www/interfaces_wireless_edit.php:190 +#: usr/local/www/services_dhcpv6_edit.php:236 +#: usr/local/www/interfaces_vlan_edit.php:186 +#: usr/local/www/firewall_nat_edit.php:773 +#: usr/local/www/interfaces_gif_edit.php:223 +#: usr/local/www/services_dhcp_edit.php:384 +#: usr/local/www/firewall_virtual_ip_edit.php:466 +#: usr/local/www/firewall_nat_out_edit.php:654 +#: usr/local/www/interfaces_qinq_edit.php:346 etc/inc/shaper.inc:3232 +#: etc/inc/shaper.inc:3480 etc/inc/shaper.inc:3675 +#: usr/local/www/firewall_nat_edit.php:785 +#: usr/local/www/firewall_virtual_ip_edit.php:486 +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/system_gateway_groups_edit.php:339 +#: usr/local/www/firewall_aliases_edit.php:635 +#: usr/local/www/firewall_nat_out_edit.php:666 etc/inc/shaper.inc:3239 +#: etc/inc/shaper.inc:3487 etc/inc/shaper.inc:3682 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/system_routes_edit.php:343 etc/inc/shaper.inc:3307 +#: etc/inc/shaper.inc:3555 etc/inc/shaper.inc:3750 +#: usr/local/www/interfaces_wireless_edit.php:190 +#: usr/local/www/interfaces_gre_edit.php:222 +#: usr/local/www/services_dhcpv6_edit.php:236 +#: usr/local/www/interfaces_vlan_edit.php:186 +#: usr/local/www/firewall_schedule_edit.php:795 +#: usr/local/www/firewall_schedule_edit.php:969 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/interfaces_gif_edit.php:223 +#: usr/local/www/services_dhcp_edit.php:384 +#: usr/local/www/services_wol_edit.php:151 +#: usr/local/www/firewall_virtual_ip_edit.php:486 +#: usr/local/www/system_routes_edit.php:337 +#: usr/local/www/firewall_nat_npt_edit.php:268 +#: usr/local/www/interfaces_groups_edit.php:265 +#: usr/local/www/system_gateway_groups_edit.php:339 +#: usr/local/www/firewall_aliases_edit.php:621 +#: usr/local/www/services_igmpproxy_edit.php:182 +#: usr/local/www/firewall_nat_1to1_edit.php:450 +#: usr/local/www/services_dnsmasq_edit.php:222 +#: usr/local/www/firewall_nat_out_edit.php:666 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:154 +#: usr/local/www/interfaces_qinq_edit.php:346 etc/inc/shaper.inc:3384 +#: etc/inc/shaper.inc:3657 etc/inc/shaper.inc:3855 +msgid "You may enter a description here for your reference (not parsed)." +msgstr "ã“ã“ã«å‚照用ã®èª¬æ˜Žæ–‡ã‚’入力ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ï¼ˆæ§‹æ–‡è§£æžã•れã¾ã›ã‚“)。" + +#: etc/inc/shaper.inc:3081 etc/inc/shaper.inc:3318 +#: usr/local/www/interfaces_bridge_edit.php:281 +#: usr/local/www/interfaces_ppps_edit.php:738 etc/inc/shaper.inc:3089 +#: etc/inc/shaper.inc:3330 usr/local/www/interfaces_bridge_edit.php:290 +#: etc/inc/shaper.inc:3237 etc/inc/shaper.inc:3485 +#: usr/local/www/interfaces_ppps_edit.php:739 +#: usr/local/www/interfaces_bridge_edit.php:291 +#: usr/local/www/interfaces_ppps_edit.php:745 +#: usr/local/www/interfaces_bridge_edit.php:292 etc/inc/shaper.inc:3238 +#: etc/inc/shaper.inc:3486 etc/inc/shaper.inc:3245 etc/inc/shaper.inc:3493 +#: usr/local/www/interfaces_ppps_edit.php:743 +#: usr/local/www/interfaces_bridge_edit.php:294 etc/inc/shaper.inc:3313 +#: etc/inc/shaper.inc:3561 usr/local/www/interfaces_ppps_edit.php:743 +#: usr/local/www/interfaces_bridge_edit.php:294 etc/inc/shaper.inc:3390 +#: etc/inc/shaper.inc:3663 +msgid "Show advanced options" +msgstr "高度ãªã‚ªãƒ—ションを表示ã™ã‚‹" + +#: etc/inc/shaper.inc:3085 etc/inc/shaper.inc:3093 +#: usr/local/www/status_ntpd.php:115 etc/inc/shaper.inc:3241 +#: usr/local/www/status_ntpd.php:131 etc/inc/shaper.inc:3242 +#: usr/local/www/status_ntpd.php:137 etc/inc/shaper.inc:3249 +#: etc/inc/shaper.inc:3317 usr/local/www/status_ntpd.php:137 +#: etc/inc/shaper.inc:3394 +msgid "Delay" +msgstr "ディレイ" + +#: etc/inc/shaper.inc:3089 etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3245 +#: etc/inc/shaper.inc:3246 etc/inc/shaper.inc:3253 etc/inc/shaper.inc:3321 +#: etc/inc/shaper.inc:3398 +msgid "" +"Hint: in most cases, you should specify 0 here (or leave the field empty)" +msgstr ""ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã‚ãªãŸã¯ã“ã“ã«0を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼ˆã‹ãƒ•ィールドを空ã«ã—ã¦ãŠã)" + +#: etc/inc/shaper.inc:3093 etc/inc/shaper.inc:3329 etc/inc/shaper.inc:3101 +#: etc/inc/shaper.inc:3341 etc/inc/shaper.inc:3249 etc/inc/shaper.inc:3496 +#: etc/inc/shaper.inc:3250 etc/inc/shaper.inc:3497 etc/inc/shaper.inc:3257 +#: etc/inc/shaper.inc:3504 etc/inc/shaper.inc:3325 etc/inc/shaper.inc:3572 +#: etc/inc/shaper.inc:3402 etc/inc/shaper.inc:3674 +msgid "Packet loss rate" +msgstr "パケットæå¤±çއ" + +#: etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3333 etc/inc/shaper.inc:3105 +#: etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3253 etc/inc/shaper.inc:3500 +#: etc/inc/shaper.inc:3254 etc/inc/shaper.inc:3501 etc/inc/shaper.inc:3261 +#: etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3329 etc/inc/shaper.inc:3576 +#: etc/inc/shaper.inc:3406 etc/inc/shaper.inc:3678 +msgid "" +"Hint: in most cases, you should specify 0 here (or leave the field empty). A " +"value of 0.001 means one packet in 1000 gets dropped" +msgstr ""ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã‚ãªãŸã¯ã“ã“ã«0を指定ã™ã‚‹ï¼ˆã‹ãƒ•ィールドを空ã«ã—ã¦ãŠã)必è¦ãŒã‚りã¾ã™ã€‚"0.001ã®å€¤ã¯ã€1000å¹´ã«ãŠã‘ã‚‹1パケットã¯ãƒ‰ãƒ­ãƒƒãƒ—ã•れã¾ã™ã“ã¨ã‚’æ„味" + +#: etc/inc/shaper.inc:3102 etc/inc/shaper.inc:3338 etc/inc/shaper.inc:3110 +#: etc/inc/shaper.inc:3350 etc/inc/shaper.inc:3258 etc/inc/shaper.inc:3505 +#: etc/inc/shaper.inc:3259 etc/inc/shaper.inc:3506 etc/inc/shaper.inc:3266 +#: etc/inc/shaper.inc:3513 etc/inc/shaper.inc:3334 etc/inc/shaper.inc:3581 +#: etc/inc/shaper.inc:3411 etc/inc/shaper.inc:3683 +msgid "Queue Size" +msgstr "キューサイズ" + +#: etc/inc/shaper.inc:3107 etc/inc/shaper.inc:3343 etc/inc/shaper.inc:3115 +#: etc/inc/shaper.inc:3355 etc/inc/shaper.inc:3263 etc/inc/shaper.inc:3510 +#: etc/inc/shaper.inc:3264 etc/inc/shaper.inc:3511 etc/inc/shaper.inc:3271 +#: etc/inc/shaper.inc:3518 etc/inc/shaper.inc:3339 etc/inc/shaper.inc:3586 +#: etc/inc/shaper.inc:3416 etc/inc/shaper.inc:3688 +msgid "" +"Hint: in most cases, you should leave the field empty. All packets in this " +"pipe are placed into a fixed-size queue first, then they are delayed by " +"value specified in the Delay field, and then they are delivered to their " +"destination." +msgstr ""ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ç©ºã®ãƒ•ィールドを残ã—ã¦ãã ã•ã„。"ã“ã®é…管内ã®ã™ã¹ã¦ã®ãƒ‘ケットã¯ã€æœ€åˆã«å›ºå®šã‚µã‚¤ã‚ºã®ã‚­ãƒ¥ãƒ¼ã«é…ç½®ã•れã¦ã„ã‚‹"ãã—ã¦ãれらã¯ã€Delayãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã§æŒ‡å®šã•れãŸå€¤é…れã§è¡¨ç¤ºã•れã¦ã„ã¾ã™"ãã—ã¦ã€å½¼ã‚‰ã¯ã€ãã®é€ä¿¡å…ˆã«é…ä¿¡ã•れã¾ã™ã€‚" + +#: etc/inc/shaper.inc:3113 etc/inc/shaper.inc:3349 etc/inc/shaper.inc:3121 +#: etc/inc/shaper.inc:3361 etc/inc/shaper.inc:3269 etc/inc/shaper.inc:3516 +#: etc/inc/shaper.inc:3270 etc/inc/shaper.inc:3517 etc/inc/shaper.inc:3277 +#: etc/inc/shaper.inc:3524 etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3592 +#: etc/inc/shaper.inc:3422 etc/inc/shaper.inc:3694 +msgid "Bucket Size" +msgstr "ãƒã‚±ãƒƒãƒˆã‚µã‚¤ã‚º" + +#: etc/inc/shaper.inc:3118 etc/inc/shaper.inc:3354 etc/inc/shaper.inc:3126 +#: etc/inc/shaper.inc:3366 etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3521 +#: etc/inc/shaper.inc:3275 etc/inc/shaper.inc:3522 etc/inc/shaper.inc:3282 +#: etc/inc/shaper.inc:3529 etc/inc/shaper.inc:3350 etc/inc/shaper.inc:3597 +#: etc/inc/shaper.inc:3427 etc/inc/shaper.inc:3699 +msgid "" +"Hint: in most cases, you should leave the field empty. It increases the hash " +"size set." +msgstr ""ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ç©ºã®ãƒ•ィールドを残ã—ã¦ãã ã•ã„。"ã“れã¯ã€ãƒãƒƒã‚·ãƒ¥Â·ã‚µã‚¤ã‚ºã®ã‚»ãƒƒãƒˆãŒå¢—加ã—ã¾ã™ã€‚" + +msgstr ""ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ç©ºã®ãƒ•ィールドを残ã—ã¦ãã ã•ã„。"ã“れã¯ã€ãƒãƒƒã‚·ãƒ¥Â·ã‚µã‚¤ã‚ºã®ã‚»ãƒƒãƒˆãŒå¢—加ã—ã¾ã™ã€‚" + +#: etc/inc/shaper.inc:3176 etc/inc/shaper.inc:3184 etc/inc/shaper.inc:3339 +#: etc/inc/shaper.inc:3340 etc/inc/shaper.inc:3347 etc/inc/shaper.inc:3415 +#: etc/inc/shaper.inc:3495 +msgid "Weight must be an integer between 1 and 100." +msgstr "é‡é‡ã¯1ã‹ã‚‰100ã¾ã§ã®æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3282 etc/inc/shaper.inc:3437 +#: etc/inc/shaper.inc:3438 etc/inc/shaper.inc:3445 etc/inc/shaper.inc:3513 +#: etc/inc/shaper.inc:3594 +msgid "Enable/Disable queue" +msgstr "キューを有効ã¾ãŸã¯ç„¡åйã«ã™ã‚‹" + +#: etc/inc/shaper.inc:3289 usr/local/www/firewall_rules.php:760 +#: usr/local/www/firewall_rules_edit.php:1224 +#: usr/local/www/firewall_rules_edit.php:1231 +#: usr/local/www/diag_system_pftop.php:107 +#: usr/local/www/interfaces_lagg_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:234 +#: usr/local/www/vpn_openvpn_client.php:519 etc/inc/shaper.inc:3301 +#: usr/local/www/firewall_rules_edit.php:1259 +#: usr/local/www/firewall_rules_edit.php:1266 +#: usr/local/www/firewall_rules.php:757 +#: usr/local/www/load_balancer_virtual_server_edit.php:223 +#: usr/local/www/vpn_openvpn_client.php:524 etc/inc/shaper.inc:3456 +#: usr/local/www/vpn_ipsec_mobile.php:403 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/firewall_rules.php:750 +#: usr/local/www/load_balancer_virtual_server_edit.php:221 +#: usr/local/www/vpn_openvpn_client.php:542 +#: usr/local/www/vpn_openvpn_client.php:561 +#: usr/local/www/firewall_rules_edit.php:1274 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/interfaces_lagg_edit.php:215 etc/inc/shaper.inc:3457 +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1289 +#: usr/local/www/firewall_rules.php:749 etc/inc/shaper.inc:3464 +#: usr/local/www/firewall_rules_edit.php:1282 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/interfaces_lagg_edit.php:214 etc/inc/shaper.inc:3532 +#: usr/local/www/vpn_openvpn_client.php:561 +#: usr/local/www/firewall_rules_edit.php:1282 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/load_balancer_virtual_server_edit.php:221 +#: usr/local/www/interfaces_lagg_edit.php:214 +#: usr/local/www/firewall_rules.php:749 usr/local/www/vpn_ipsec_mobile.php:403 +#: etc/inc/shaper.inc:3614 +msgid "none" +msgstr "ãªã—" + +#: etc/inc/shaper.inc:3321 usr/local/www/system_gateways_edit.php:424 +#: etc/inc/shaper.inc:3333 usr/local/www/system_gateways_edit.php:445 +#: etc/inc/shaper.inc:3488 usr/local/www/system_gateways_edit.php:551 +#: usr/local/www/system_gateways_edit.php:555 etc/inc/shaper.inc:3489 +#: usr/local/www/system_gateways_edit.php:557 etc/inc/shaper.inc:3496 +#: usr/local/www/system_gateways_edit.php:587 etc/inc/shaper.inc:3564 +#: usr/local/www/system_gateways_edit.php:587 etc/inc/shaper.inc:3666 +msgid "Weight" +msgstr "ウエート" + +#: etc/inc/shaper.inc:3325 etc/inc/shaper.inc:3337 etc/inc/shaper.inc:3492 +#: etc/inc/shaper.inc:3493 etc/inc/shaper.inc:3500 etc/inc/shaper.inc:3568 +#: etc/inc/shaper.inc:3670 +msgid "" +"Hint: For queues under the same parent this specifies the share that a queue " +"gets(values range from 1 to 100, you can leave it blank otherwise)" +msgstr ""ヒント:åŒã˜è¦ªã®ä¸‹ã«ã‚­ãƒ¥ãƒ¼ã®å ´åˆã€ã“れã¯ã‚­ãƒ¥ãƒ¼ãŒå–å¾—ã™ã‚‹å…±æœ‰ã‚’指定"(値ã¯1ã‹ã‚‰100ã®ç¯„囲ã«ã¯ã€ãã†ã§ãªã„å ´åˆã€ç©ºç™½ã®ã¾ã¾ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼‰" + +#: etc/inc/shaper.inc:3353 etc/inc/shaper.inc:3365 etc/inc/shaper.inc:3520 +#: etc/inc/shaper.inc:3521 etc/inc/shaper.inc:3528 etc/inc/shaper.inc:3596 +#: etc/inc/shaper.inc:3698 +msgid "slots" +msgstr "スロット" + +#: etc/inc/shaper.inc:3494 etc/inc/shaper.inc:3506 etc/inc/shaper.inc:3661 +#: etc/inc/shaper.inc:3662 etc/inc/shaper.inc:3669 etc/inc/shaper.inc:3737 +#: etc/inc/shaper.inc:3842 +msgid "Enable/Disable layer7 Container" +msgstr "レイヤ7コンテナを有効ã¾ãŸã¯ç„¡åйã«ã—ã¾ã™" + +#: etc/inc/shaper.inc:3744 etc/inc/shaper.inc:3756 etc/inc/shaper.inc:3911 +#: etc/inc/shaper.inc:3912 etc/inc/shaper.inc:3919 etc/inc/shaper.inc:3987 +#: etc/inc/shaper.inc:4092 +#, php-format +msgid "Sending HUP signal to %s" +msgstr "%sã«HUPシグナルをé€ã‚‹" + +#: etc/inc/shaper.inc:4052 etc/inc/shaper.inc:4112 etc/inc/shaper.inc:4269 +#: etc/inc/shaper.inc:4270 etc/inc/shaper.inc:4277 etc/inc/shaper.inc:4345 +#: etc/inc/shaper.inc:4450 +msgid " Clone shaper/queue on this interface" +msgstr " Clone shaper/queue on this interface" + +#: etc/inc/shaper.inc:4060 etc/inc/shaper.inc:4067 etc/inc/shaper.inc:4120 +#: etc/inc/shaper.inc:4127 etc/inc/shaper.inc:4277 etc/inc/shaper.inc:4284 +#: etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285 etc/inc/shaper.inc:4292 +#: etc/inc/shaper.inc:4353 etc/inc/shaper.inc:4360 etc/inc/shaper.inc:4458 +#: etc/inc/shaper.inc:4465 +#, php-format +msgid "Welcome to the %s Traffic Shaper." +msgstr "%sã®ãƒˆãƒ©ãƒ•ィック·シェーパã«ã‚ˆã†ã“ã。" + +#: etc/inc/shaper.inc:4061 etc/inc/shaper.inc:4068 etc/inc/shaper.inc:4121 +#: etc/inc/shaper.inc:4128 etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285 +#: etc/inc/shaper.inc:4279 etc/inc/shaper.inc:4286 etc/inc/shaper.inc:4293 +#: etc/inc/shaper.inc:4354 etc/inc/shaper.inc:4361 etc/inc/shaper.inc:4459 +#: etc/inc/shaper.inc:4466 +msgid "" +"The tree on the left helps you navigate through the queues
    buttons at " +"the bottom represent queue actions and are activated accordingly." +msgstr ""å·¦å´ã®ãƒ„リーã§ã¯ã€ã‚­ãƒ¥ãƒ¼ã®å‹•作を表ã—ã¦ãŠã‚Šã€ãれã«å¿œã˜ã¦
    èµ·å‹•ã•れる下部"ã«ã‚­ãƒ¥ãƒ¼ãƒœã‚¿ãƒ³ã‚’ナビゲートã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚" + +#: etc/inc/system.inc:430 etc/inc/system.inc:449 etc/inc/system.inc:457 +#: etc/inc/system.inc:467 +#, php-format +msgid "Static Routes: Gateway IP could not be found for %s" +msgstr "é™çš„ルート:ゲートウェイã®IPã¯%sを見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/system.inc:497 etc/inc/system.inc:529 etc/inc/system.inc:533 +#: etc/inc/system.inc:547 etc/inc/system.inc:606 +msgid "Starting syslog..." +msgstr "syslogã‚’é–‹å§‹..." + +#: etc/inc/system.inc:536 etc/inc/system.inc:568 etc/inc/system.inc:572 +#: etc/inc/system.inc:695 etc/inc/system.inc:754 +#, php-format +msgid "Error: cannot open syslog.conf in system_syslogd_start().%s" +msgstr "エラー:system_syslogd_start.().%s 処ç†ã®syslog.confã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/system.inc:664 etc/inc/system.inc:712 etc/inc/system.inc:716 +#: etc/inc/system.inc:725 etc/inc/system.inc:784 +msgid "Initializing PCMCIA..." +msgstr "PCMCIAã®åˆæœŸåŒ–..." + +#: etc/inc/system.inc:676 etc/inc/system.inc:761 etc/inc/system.inc:1412 +#: etc/inc/system.inc:1415 etc/inc/system.inc:724 etc/inc/system.inc:808 +#: etc/inc/system.inc:1469 etc/inc/system.inc:1472 etc/inc/system.inc:728 +#: etc/inc/system.inc:806 etc/inc/system.inc:1511 etc/inc/system.inc:1514 +#: etc/inc/system.inc:737 etc/inc/system.inc:817 etc/inc/system.inc:1460 +#: etc/inc/system.inc:1463 etc/inc/system.inc:796 etc/inc/system.inc:876 +#: etc/inc/system.inc:1519 etc/inc/system.inc:1522 +msgid "failed!" +msgstr "フェイル" + +#: etc/inc/system.inc:687 etc/inc/system.inc:735 etc/inc/system.inc:739 +#: etc/inc/system.inc:748 etc/inc/system.inc:807 +msgid "Starting webConfigurator..." +msgstr "webConfiguratorã‚’é–‹å§‹..." + +#: etc/inc/system.inc:719 etc/inc/system.inc:767 etc/inc/system.inc:771 +#: etc/inc/system.inc:775 etc/inc/system.inc:834 +msgid "webConfigurator default" +msgstr "webConfiguratorデフォルト" + +#: etc/inc/system.inc:729 etc/inc/system.inc:777 etc/inc/system.inc:781 +#: etc/inc/system.inc:785 etc/inc/system.inc:844 +msgid "Importing HTTPS certificate" +msgstr "HTTPS証明書ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#: etc/inc/system.inc:1115 etc/inc/system.inc:1167 etc/inc/system.inc:1147 +#: etc/inc/system.inc:1096 etc/inc/system.inc:1155 +#, php-format +msgid "Error: cannot open cert.pem in system_webgui_start().%s" +msgstr "エラー:system_webgui_start.().%s 処ç†cert.pemã«é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/system.inc:1126 etc/inc/system.inc:1178 etc/inc/system.inc:1158 +#: etc/inc/system.inc:1107 etc/inc/system.inc:1166 +#, php-format +msgid "Error: cannot open ca.pem in system_webgui_start().%s" +msgstr "エラー:system_webgui_start.().%s 処ç†ca.pemã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/system.inc:1134 etc/inc/system.inc:1186 etc/inc/system.inc:1166 +#: etc/inc/system.inc:1115 etc/inc/system.inc:1174 +msgid "ssl configuration" +msgstr "SSL設定" + +#: etc/inc/system.inc:1161 etc/inc/system.inc:1213 etc/inc/system.inc:1193 +#: etc/inc/system.inc:1142 etc/inc/system.inc:1201 +#, php-format +msgid "Error: cannot open %s in system_generate_lighty_config().%s" +msgstr "エラー:system_generate_lighty_config.().%s 処ç†%sã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/system.inc:1181 etc/inc/system.inc:1233 etc/inc/system.inc:1213 +#: etc/inc/system.inc:1162 etc/inc/system.inc:1221 +msgid "Setting timezone..." +msgstr "タイムゾーンã®è¨­å®š..." + +#: etc/inc/system.inc:1270 etc/inc/system.inc:1326 etc/inc/system.inc:1368 +#: etc/inc/system.inc:1310 etc/inc/system.inc:1369 +msgid "Syncing system time before startup..." +msgstr "èµ·å‹•ã™ã‚‹å‰ã«ã€ã‚·ã‚¹ãƒ†ãƒ ã®æ™‚åˆ»ã‚’åŒæœŸã•ã›ã‚‹..." + +#: etc/inc/system.inc:1376 etc/inc/system.inc:1433 etc/inc/system.inc:1475 +#: etc/inc/system.inc:1424 etc/inc/system.inc:1483 +#, php-format +msgid "Error: cannot open dmesg.boot in system_dmesg_save().%s" +msgstr "エラー:system_dmesg_save.().%s 処ç†dmesg.booté–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/system.inc:1397 etc/inc/system.inc:1454 etc/inc/system.inc:1496 +#: etc/inc/system.inc:1445 etc/inc/system.inc:1504 +msgid "Setting hard disk standby... " +msgstr "ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã®ã‚¹ã‚¿ãƒ³ãƒã‚¤ã®è¨­å®š... " + +#: etc/inc/system.inc:1514 etc/inc/system.inc:1571 etc/inc/system.inc:1613 +#: etc/inc/system.inc:1562 etc/inc/system.inc:1621 +msgid "Generic PC" +msgstr "一般的ãªPC" + +#: etc/inc/system.inc:1517 etc/inc/system.inc:1574 etc/inc/system.inc:1616 +#: etc/inc/system.inc:1565 etc/inc/system.inc:1624 +msgid "Generic PC (CD-ROM)" +msgstr "一般的ãªPC (シーディーロム)" + +#: etc/inc/system.inc:1526 etc/inc/system.inc:1583 etc/inc/system.inc:1625 +#: etc/inc/system.inc:1574 etc/inc/system.inc:1633 +msgid "PC Engines WRAP" +msgstr "PCエンジンラップ" + +#: etc/inc/system.inc:1529 etc/inc/system.inc:1586 etc/inc/system.inc:1628 +#: etc/inc/system.inc:1577 etc/inc/system.inc:1636 +msgid "PC Engines ALIX" +msgstr "PCエンジンALIX" + +#: etc/inc/system.inc:1541 etc/inc/system.inc:1598 etc/inc/system.inc:1640 +#: etc/inc/system.inc:1589 etc/inc/system.inc:1648 +msgid "embedded (unknown)" +msgstr "埋ã‚è¾¼ã¿ï¼ˆä¸æ˜Žï¼‰" + +msgstr "埋ã‚è¾¼ã¿ï¼ˆä¸æ˜Žï¼‰" + +#: etc/inc/util.inc:99 etc/inc/util.inc:101 etc/inc/util.inc:101 +#, php-format +msgid "WARNING: Could not mark subsystem: %s dirty" +msgstr "警告:サブシステムをマークã§ãã¾ã›ã‚“ã§ã—ãŸï¼šæ±šã„%s" + +#: etc/inc/util.inc:119 etc/inc/util.inc:121 etc/inc/util.inc:121 +msgid "WARNING: You must give a name as parameter to lock() function." +msgstr "警告:ã‚ãªãŸãŒæ©Ÿèƒ½ã‚’ lock.() パラメータã¨ã—ã¦åå‰ã‚’付ã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/util.inc:213 etc/inc/util.inc:208 etc/inc/util.inc:238 +#: etc/inc/util.inc:240 etc/inc/util.inc:240 +#, php-format +msgid "Reference %s is going negative, not doing unreference." +msgstr "å‚ç…§%sã¯ã¯ã€è² æ–¹å‘ã®éžå‚照を実行ã—ã¦ã„ã¾ã›ã‚“。" + +#: etc/inc/util.inc:980 etc/inc/util.inc:981 etc/inc/util.inc:1026 +#: etc/inc/util.inc:1076 etc/inc/util.inc:1080 etc/inc/util.inc:1080 +#, php-format +msgid "The command '%1$s' returned exit code '%2$d', the output was '%3$s' " +msgstr "コマンドã¯ã€Œ%1$sã€ãŒçµ‚了コード'%2$dã€ã‚’è¿”ã•れるã¨ã€å‡ºåŠ›ã¯ã€Œ%3$sã€ã ã£ãŸ" + +#: etc/inc/vpn.inc:126 etc/inc/vpn.inc:134 etc/inc/vpn.inc:133 +msgid "Configuring IPsec VPN... " +msgstr "IPsecã®VPNを設定... " + +#: etc/inc/vpn.inc:229 etc/inc/vpn.inc:228 etc/inc/vpn.inc:238 +#: etc/inc/vpn.inc:237 etc/inc/vpn.inc:236 +#, php-format +msgid "Error: Invalid certificate info for %s" +msgstr "エラー:%s無効ãªè¨¼æ˜Žæ›¸æƒ…å ±" + +#: etc/inc/vpn.inc:235 etc/inc/vpn.inc:234 etc/inc/vpn.inc:244 +#: etc/inc/vpn.inc:243 etc/inc/vpn.inc:242 +#, php-format +msgid "Error: Invalid certificate hash info for %s" +msgstr "エラー:%s無効ãªè¨¼æ˜Žæ›¸ã®ãƒãƒƒã‚·ãƒ¥æƒ…å ±" + +#: etc/inc/vpn.inc:240 etc/inc/vpn.inc:239 etc/inc/vpn.inc:249 +#: etc/inc/vpn.inc:248 etc/inc/vpn.inc:247 +#, php-format +msgid "Error: Cannot write IPsec CA file for %s" +msgstr "エラー: %sã®IPsec CAファイルを書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“" + +#: etc/inc/vpn.inc:249 etc/inc/vpn.inc:248 +#, php-format +msgid "Error: cannot open psk.txt in vpn_ipsec_configure()." +msgstr "エラー: vpn_ipsec_configure.()ã«psk.txtã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:312 etc/inc/vpn.inc:311 +#, php-format +msgid "Error: cannot open racoon.conf in vpn_ipsec_configure()." +msgstr "エラー: vpn_ipsec_configure.()ã§ã®racoon.confã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:404 etc/inc/vpn.inc:403 +#, php-format +msgid "Error: cannot open server %s in vpn.\n" +msgstr "エラー: vpn.\nã§ã‚µãƒ¼ãƒãƒ¼%sã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/vpn.inc:560 etc/inc/vpn.inc:559 etc/inc/vpn.inc:546 +#: etc/inc/vpn.inc:549 etc/inc/vpn.inc:548 +#, php-format +msgid "Error: Invalid phase1 certificate reference for %s" +msgstr "エラー: %sã®ç„¡åйãªãƒ•ェーズ1証明書ã®å‚ç…§" + +#: etc/inc/vpn.inc:569 etc/inc/vpn.inc:568 etc/inc/vpn.inc:555 +#: etc/inc/vpn.inc:558 etc/inc/vpn.inc:557 +#, php-format +msgid "Error: Cannot write phase1 certificate file for %s" +msgstr "エラー: %sãŸã‚ã®ãƒ•ェーズ1ã®è¨¼æ˜Žæ›¸ãƒ•ァイルを書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“" + +#: etc/inc/vpn.inc:580 etc/inc/vpn.inc:579 etc/inc/vpn.inc:566 +#: etc/inc/vpn.inc:569 etc/inc/vpn.inc:568 +#, php-format +msgid "Error: Cannot write phase1 key file for %s" +msgstr "エラー: %sãŸã‚ã®ãƒ•ェーズ1キーファイルを書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“" + +#: etc/inc/vpn.inc:593 etc/inc/vpn.inc:592 etc/inc/vpn.inc:579 +#: etc/inc/vpn.inc:582 etc/inc/vpn.inc:581 +#, php-format +msgid "Error: Cannot write phase1 CA certificate file for %s" +msgstr "エラー: %sãŸã‚ã®ãƒ•ェーズ1ã®CA証明書ファイルを書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“" + +#: etc/inc/vpn.inc:826 etc/inc/vpn.inc:829 +#, php-format +msgid "Error: cannot open spd.conf in vpn_ipsec_configure()." +msgstr "エラー: vpn_ipsec_configure.()ã«spd.confã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:1008 etc/inc/vpn.inc:1014 etc/inc/vpn.inc:1013 +#: etc/inc/vpn.inc:1022 etc/inc/vpn.inc:1035 etc/inc/vpn.inc:1034 +msgid "Forcefully reloading IPsec racoon daemon" +msgstr "強制的ã«IPsec racoonデーモンをå†ãƒ­ãƒ¼ãƒ‰" + +#: etc/inc/vpn.inc:1052 etc/inc/vpn.inc:1058 etc/inc/vpn.inc:1056 +#: etc/inc/vpn.inc:1065 etc/inc/vpn.inc:1078 etc/inc/vpn.inc:1077 +msgid "Configuring PPTP VPN service... " +msgstr "PPTPã®VPNサービスã®è¨­å®š..." + +#: etc/inc/vpn.inc:1062 etc/inc/vpn.inc:1068 etc/inc/vpn.inc:1066 +#: etc/inc/vpn.inc:1075 etc/inc/vpn.inc:1088 etc/inc/vpn.inc:1087 +msgid "Could not kill mpd within 3 seconds. Trying again." +msgstr "3秒以内ã«MPDを殺ã™ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚å†è©¦è¡Œã€‚" + +#: etc/inc/vpn.inc:1085 etc/inc/vpn.inc:1091 etc/inc/vpn.inc:1089 +#: etc/inc/vpn.inc:1098 etc/inc/vpn.inc:1111 etc/inc/vpn.inc:1110 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_pptpd_configure()." +msgstr "エラー: vpn_pptpd_configure.()ã«mpd.confã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:1198 etc/inc/vpn.inc:1204 etc/inc/vpn.inc:1202 +#: etc/inc/vpn.inc:1212 etc/inc/vpn.inc:1225 etc/inc/vpn.inc:1224 +#, php-format +msgid "Error: cannot open mpd.links in vpn_pptpd_configure()." +msgstr "エラー: vpn_pptpd_configure.()ã«mpd.linksã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:1222 etc/inc/vpn.inc:1228 etc/inc/vpn.inc:1226 +#: etc/inc/vpn.inc:1237 etc/inc/vpn.inc:1250 etc/inc/vpn.inc:1249 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_pptpd_configure()." +msgstr "エラー: vpn_pptpd_configure.()ã«mpd.secretã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:1279 etc/inc/vpn.inc:1285 etc/inc/vpn.inc:1283 +#: etc/inc/vpn.inc:1295 etc/inc/vpn.inc:1308 etc/inc/vpn.inc:1307 +msgid "Configuring PPPoE VPN service... " +msgstr "PPPoEã®VPNサービスã®è¨­å®š..." + +#: etc/inc/vpn.inc:1303 etc/inc/vpn.inc:1309 etc/inc/vpn.inc:1307 +#: etc/inc/vpn.inc:1319 etc/inc/vpn.inc:1332 etc/inc/vpn.inc:1331 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_pppoe_configure()." +msgstr "エラー: vpn_pppoe_configure.()ã«mpd.confã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:1406 etc/inc/vpn.inc:1412 etc/inc/vpn.inc:1410 +#: etc/inc/vpn.inc:1423 etc/inc/vpn.inc:1436 etc/inc/vpn.inc:1435 +#, php-format +msgid "Error: cannot open mpd.links in vpn_pppoe_configure()." +msgstr "エラー: vpn_pppoe_configure.()ã«mpd.linksã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:1432 etc/inc/vpn.inc:1438 etc/inc/vpn.inc:1436 +#: etc/inc/vpn.inc:1450 etc/inc/vpn.inc:1463 etc/inc/vpn.inc:1462 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_pppoe_configure()." +msgstr "エラー: vpn_pppoe_configure.()ã«mpd.secretã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:1460 usr/local/www/system_firmware_check.php:139 +#: etc/inc/vpn.inc:1470 etc/inc/vpn.inc:1468 +#: usr/local/www/system_firmware_check.php:141 etc/inc/vpn.inc:1483 +#: usr/local/www/system_firmware_check.php:133 etc/inc/vpn.inc:1496 +#: usr/local/www/system_firmware_check.php:133 etc/inc/vpn.inc:1495 +msgid "done" +msgstr "終ã‚ã£ãŸ" + +#: etc/inc/vpn.inc:1479 etc/inc/vpn.inc:1489 etc/inc/vpn.inc:1487 +#: etc/inc/vpn.inc:1502 etc/inc/vpn.inc:1515 etc/inc/vpn.inc:1514 +msgid "Configuring l2tp VPN service... " +msgstr "L2TPã®VPNサービスã®è¨­å®š..." + +#: etc/inc/vpn.inc:1504 etc/inc/vpn.inc:1514 etc/inc/vpn.inc:1512 +#: etc/inc/vpn.inc:1527 etc/inc/vpn.inc:1540 etc/inc/vpn.inc:1539 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_l2tp_configure()." +msgstr "エラー: vpn_l2tp_configure.()ã«mpd.confã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:1597 etc/inc/vpn.inc:1607 etc/inc/vpn.inc:1605 +#: etc/inc/vpn.inc:1621 etc/inc/vpn.inc:1634 etc/inc/vpn.inc:1633 +#, php-format +msgid "Error: cannot open mpd.links in vpn_l2tp_configure()." +msgstr "エラー: vpn_l2tp_configure.()ã«mpd.linksã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:1622 etc/inc/vpn.inc:1632 etc/inc/vpn.inc:1630 +#: etc/inc/vpn.inc:1647 etc/inc/vpn.inc:1660 etc/inc/vpn.inc:1659 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_l2tp_configure()." +msgstr "エラー: vpn_l2tp_configure.()ã«mpd.secretã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/vpn.inc:1769 etc/inc/vpn.inc:1779 etc/inc/vpn.inc:1764 +#: etc/inc/vpn.inc:1836 etc/inc/vpn.inc:1849 etc/inc/vpn.inc:1846 +#, php-format +msgid "Could not determine VPN endpoint for '%s'" +msgstr "「 %s'ã®VPNエンドãƒã‚¤ãƒ³ãƒˆã‚’決定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/vpn.inc:1774 etc/inc/vpn.inc:1784 etc/inc/vpn.inc:1769 +#: etc/inc/vpn.inc:1841 etc/inc/vpn.inc:1854 etc/inc/vpn.inc:1851 +#, php-format +msgid "" +"IPSEC: ERROR: One of the endpoints is not a IP address. Old EP '%1$s' new EP " +"'%2$s'" +msgstr "「 IPSEC :エラー:エンドãƒã‚¤ãƒ³ãƒˆã®ä¸€ã¤ã¯ã€ IPã‚¢ãƒ‰ãƒ¬ã‚¹ã®æ—§EP "ã¯%1$s'æ–°EPã§ã¯ã‚りã¾ã›ã‚“〠「 %2$s'" + +#: etc/inc/vpn.inc:1777 etc/inc/vpn.inc:1787 etc/inc/vpn.inc:1772 +#: etc/inc/vpn.inc:1844 etc/inc/vpn.inc:1857 etc/inc/vpn.inc:1854 +#, php-format +msgid "" +"IPSEC: ERROR: One of the remote endpoints is not a IP address. Old RG '%1$s' " +"new RG '%2$s'" +msgstr "「 IPSEC :エラー:リモートエンドãƒã‚¤ãƒ³ãƒˆã®ä¸€ã¤ã¯ã€ IPアドレスオールドRG'ã¯%1$s ã€ã§ã¯ãªã„「新ã—ã„RG' %2$s'" + +#: etc/inc/vpn.inc:1833 etc/inc/vpn.inc:1843 etc/inc/vpn.inc:1835 +#: etc/inc/vpn.inc:1907 etc/inc/vpn.inc:1920 etc/inc/vpn.inc:1917 +#, php-format +msgid "" +"Reloading IPsec tunnel '%1$s'. Previous IP '%2$s', current IP '%3$s'. " +"Reloading policy" +msgstr "「リロードIPsecトンãƒãƒ«ã€ã¯%1$s' 。以å‰ã®IP' %2$s'ã€ç¾åœ¨ã®IP' %3$s' 。 "リロードãƒãƒªã‚·ãƒ¼" + +#: etc/inc/xmlparse.inc:85 etc/inc/xmlparse_attr.inc:78 +#: etc/inc/xmlparse_attr.inc:78 etc/inc/xmlparse.inc:85 +#, php-format +msgid "XML error: %1$s at line %2$d cannot occur more than once" +msgstr "XMLエラー:行% 2ã® $ dã®ã¯%1$sãŒè¤‡æ•°å›žå‡ºç¾ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/xmlparse.inc:176 etc/inc/xmlparse_attr.inc:187 +#: etc/inc/xmlparse_attr.inc:187 etc/inc/xmlparse.inc:176 +msgid "Error: could not open XML input" +msgstr "エラー: XML入力をオープンã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/xmlparse.inc:182 etc/inc/xmlparse.inc:182 +#, php-format +msgid "XML error: %1$s at line %2$d in %3$s" +msgstr "XMLエラー:行%ã§ã¯%1$s %3$s中2 $ dã®" + +#: etc/inc/xmlparse.inc:198 etc/inc/xmlparse_attr.inc:210 +#: etc/inc/xmlparse.inc:199 etc/inc/xmlparse_attr.inc:210 +#: etc/inc/xmlparse.inc:199 +#, php-format +msgid "XML error: no %s object found!" +msgstr "XMLエラー:ãªã—%sオブジェクト見ã¤ã‹ã‚‰ãªã„ ï¼" + +#: etc/inc/xmlrpc_client.inc:152 etc/inc/xmlrpc_client.inc:152 +msgid "Unknown method" +msgstr "æœªçŸ¥ã®æ–¹æ³•" + +#: etc/inc/xmlrpc_client.inc:153 etc/inc/xmlrpc_client.inc:153 +msgid "Invalid return payload: enable debugging to examine incoming payload" +msgstr "ç„¡åŠ¹ãªæˆ»ã‚Šãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ï¼šå—信ペイロードを検査ã™ã‚‹ãŸã‚ã«ãƒ‡ãƒãƒƒã‚°ã‚’有効ã«" + +#: etc/inc/xmlrpc_client.inc:154 etc/inc/xmlrpc_client.inc:154 +msgid "Incorrect parameters passed to method" +msgstr "ãƒ¡ã‚½ãƒƒãƒ‰ã«æ¸¡ã•れãŸãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãŒæ­£ã—ãã‚りã¾ã›ã‚“" + +#: etc/inc/xmlrpc_client.inc:155 etc/inc/xmlrpc_client.inc:155 +msgid "Can't introspect: method unknown" +msgstr "イントロスペクションã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“:メソッド未知" + +#: etc/inc/xmlrpc_client.inc:156 etc/inc/xmlrpc_client.inc:156 +msgid "Didn't receive 200 OK from remote server." +msgstr "リモートサーãƒã‹ã‚‰200 OKã‚’å—ä¿¡ã—ã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/xmlrpc_client.inc:157 etc/inc/xmlrpc_client.inc:157 +msgid "The requested method didn't return an XML_RPC_Response object." +msgstr "è¦æ±‚ã•れãŸãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã¯XML_RPC_ResponseオブジェクトãŒè¿”ã•れã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/xmlrpc_client.inc:158 etc/inc/xmlrpc_client.inc:158 +msgid "Invalid request payload" +msgstr "無効ãªè¦æ±‚ペイロード" + +#: etc/inc/xmlrpc_client.inc:260 etc/inc/xmlrpc_client.inc:260 +msgid "missing top level xmlrpc element" +msgstr "トップレベルã®XMLRPCè¦ç´ ãŒã‚りã¾ã›ã‚“" + +#: etc/inc/xmlrpc_client.inc:268 etc/inc/xmlrpc_client.inc:268 +#, php-format +msgid "xmlrpc element %1$s cannot be child of %2$s" +msgstr "XMLRPCè¦ç´ ã¯%1$sã¯%2$sã®å­ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/xmlrpc_client.inc:431 etc/inc/xmlrpc_client.inc:431 +msgid "Non-numeric value received in INT or DOUBLE" +msgstr "数値以外ã®å€¤ãŒINTã¾ãŸã¯DOUBLEã§å—ä¿¡" + +#: etc/inc/xmlrpc_client.inc:860 etc/inc/xmlrpc_client.inc:860 +#, php-format +msgid "send()'s %s parameter must be an XML_RPC_Message object." +msgstr "send.()ã®%sパラメータã¯XML_RPC_Messageオブジェクトã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/xmlrpc_client.inc:951 etc/inc/xmlrpc_client.inc:951 +#, php-format +msgid "" +"Connection to proxy server \n" +" %1$s:%2$s failed. %3$s" +msgstr "ã¯%1$s 「プロキシサーãƒ\nã¸ã®æŽ¥ç¶šã€ : %2$sã«å¤±æ•—ã—ã¾ã—ãŸã€‚ %3$s" + +#: etc/inc/xmlrpc_client.inc:957 etc/inc/xmlrpc_client.inc:957 +#, php-format +msgid "" +"Connection to RPC server \n" +" %1$s:%2$s failed. %3$s" +msgstr "ã¯%1$s 「RPCサーãƒãƒ¼\nã¸ã®æŽ¥ç¶šã€ : %2$sã«å¤±æ•—ã—ã¾ã—ãŸã€‚ %3$s" + +#: etc/inc/xmlrpc_client.inc:1330 etc/inc/xmlrpc_client.inc:1330 +msgid "The submitted request did not contain this parameter" +msgstr "é€ä¿¡ã•れãŸè¦æ±‚ã¯ã€ã“ã®ãƒ‘ラメータãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/xmlrpc_client.inc:1361 etc/inc/xmlrpc_client.inc:1361 +msgid "mb_convert_encoding() is not available" +msgstr "mb_convert_encoding.()ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“" + +#: etc/inc/xmlrpc_client.inc:1470 etc/inc/xmlrpc_client.inc:1470 +#, php-format +msgid "HTTP error, got response: %s" +msgstr "HTTPã‚¨ãƒ©ãƒ¼ã€æŒã£å¿œç­”: %s" + +#: etc/inc/xmlrpc_client.inc:1496 +msgid "XML error at line 1, check URL" +msgstr "1行目ã®XMLエラー〠URLを確èªã—ã¦ãã ã•ã„" + +#: etc/inc/xmlrpc_client.inc:1591 etc/inc/xmlrpc_client.inc:1593 +#: etc/inc/xmlrpc_client.inc:1593 +msgid "Scalar can have only one value" +msgstr "スカラ1ã¤ã®å€¤ã—ã‹æŒã¤ã“ã¨ãŒã§ãã¾ã™" + +#: etc/inc/xmlrpc_client.inc:1598 etc/inc/xmlrpc_client.inc:1600 +#: etc/inc/xmlrpc_client.inc:1600 +#, php-format +msgid "Not a scalar type (%s)" +msgstr "スカラ型ã§ãªã„( %s )" + +#: etc/inc/xmlrpc_client.inc:1634 etc/inc/xmlrpc_client.inc:1650 +#: etc/inc/xmlrpc_client.inc:1636 etc/inc/xmlrpc_client.inc:1652 +#: etc/inc/xmlrpc_client.inc:1636 etc/inc/xmlrpc_client.inc:1652 +#, php-format +msgid "Already initialized as a [%s]" +msgstr "ã™ã§ã«ï¼ˆ ) ( %s )ã¨ã—ã¦åˆæœŸåŒ–" + +#: etc/inc/xmlrpc_server.inc:48 etc/inc/xmlrpc_server.inc:48 +msgid "" +"This method lists all the methods that the XML-RPC server knows how to " +"dispatch" +msgstr "発é€"ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€XML -RPCサーãƒãŒã©ã®ã‚ˆã†ã«çŸ¥ã£ã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒä¸€è¦§è¡¨ç¤ºã•れã¾ã™"" + +#: etc/inc/xmlrpc_server.inc:66 etc/inc/xmlrpc_server.inc:66 +msgid "" +"Returns an array of known signatures (an array of arrays) for the method " +"name passed. If no signatures are known, returns a none-array (test for " +"type != array to detect missing signature)" +msgstr "渡ã•れãŸåå‰"メソッドã®ãŸã‚ã«çŸ¥ã‚‰ã‚Œã¦ã‚·ã‚°ãƒãƒãƒ£ã®é…列(é…列ã®é…列)を返ã—ã¾ã™ã€ 。全ãç½²åãŒçŸ¥ã‚‰ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ ( 「タイプ ï¼ =è¡Œæ–¹ä¸æ˜Žã®ç½²åを検出ã™ã‚‹ãŸã‚ã®ã‚¢ãƒ¬ã‚¤ã®ãŸã‚ã®ãƒ†ã‚¹ãƒˆï¼‰ãªã— - é…列を返ã—ã¾ã™" + +#: etc/inc/xmlrpc_server.inc:86 etc/inc/xmlrpc_server.inc:86 +msgid "" +"Returns help text if defined for the method passed, otherwise returns an " +"empty string" +msgstr "ç©ºã®æ–‡å­—列"渡ã•れãŸãƒ¡ã‚½ãƒƒãƒ‰ã®ãŸã‚ã«å®šç¾©ã•れã¦ã„ã‚‹å ´åˆæˆ»ã‚Šå€¤ã¯ã€ãƒ†ã‚­ã‚¹ãƒˆã‚’助ã‘ã‚‹ã€ãã†ã§ãªã‘れã°è¿”ã™ã€" + +#: etc/inc/authgui.inc:73 etc/inc/authgui.inc:73 +msgid "No page assigned to this user! Click here to logout." +msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒšãƒ¼ã‚¸ã§ã™ï¼ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã™ã‚‹ã«ã¯ã“ã“をクリックã—ã¦ãã ã•ã„。" + +#: etc/inc/authgui.inc:97 etc/inc/authgui.inc:103 etc/inc/authgui.inc:103 +#, php-format +msgid "Error: %1$s Description: %2$s" +msgstr "エラー:ã¯%1$sã®èª¬æ˜Žï¼š %2$s" + +#: etc/inc/authgui.inc:160 etc/inc/authgui.inc:159 etc/inc/authgui.inc:165 +#: etc/inc/authgui.inc:165 +msgid "unknown reason" +msgstr "未知ã®åŽŸå› " + +#: etc/inc/authgui.inc:161 etc/inc/authgui.inc:160 etc/inc/authgui.inc:166 +#: etc/inc/authgui.inc:166 +#, php-format +msgid "Invalid login (%s)." +msgstr "無効ãªãƒ­ã‚°ã‚¤ãƒ³ï¼ˆ %s ) 。" + +#: etc/inc/authgui.inc:166 etc/inc/authgui.inc:165 etc/inc/authgui.inc:171 +#: etc/inc/authgui.inc:171 +#, php-format +msgid "This device is currently being maintained by: %s." +msgstr "%s. :ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã¯ã€ç¾åœ¨ã§ç¶­æŒã•れã¦ã„ã‚‹" + +#: etc/inc/authgui.inc:214 etc/inc/authgui.inc:277 etc/inc/authgui.inc:212 +#: etc/inc/authgui.inc:275 etc/inc/authgui.inc:235 etc/inc/authgui.inc:298 +#: etc/inc/authgui.inc:235 etc/inc/authgui.inc:298 +msgid "Login" +msgstr "ログイン" + +#: etc/inc/authgui.inc:242 etc/inc/authgui.inc:240 etc/inc/authgui.inc:263 +#: etc/inc/authgui.inc:263 +msgid "" +"You are accessing this router by an IP address not configured locally, which " +"may be forwarded by NAT or other means.

    If you did not setup this " +"forwarding, you may be the target of a man-in-the-middle attack." +msgstr "NATã¾ãŸã¯ãã®ä»–ã®æ‰‹æ®µã«ã‚ˆã£ã¦è»¢é€ã•れã¦ã‚‚よã„ã€ã¯ãƒ­ãƒ¼ã‚«ãƒ«ã«è¨­å®šã•れã¦ã„ãªã„IPアドレスã«ã‚ˆã£ã¦ã€ã“ã®ãƒ«ãƒ¼ã‚¿ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã„る〠。セットアップã“ã®ã€Œè»¢é€ã—ãªã‹ã£ãŸ

    Ifã¯ã€ man-in-the-middleæ”»æ’ƒã®æ¨™çš„ã¨ãªã‚‹å¯èƒ½æ€§ãŒã‚る。" + +#: etc/inc/authgui.inc:251 etc/inc/authgui.inc:249 etc/inc/authgui.inc:272 +#: etc/inc/authgui.inc:272 +msgid "Username:" +msgstr "ユーザーå:" + +#: etc/inc/authgui.inc:258 usr/local/www/diag_backup.php:597 +#: usr/local/www/system_authservers.php:627 etc/inc/authgui.inc:256 +#: usr/local/www/diag_backup.php:676 usr/local/www/system_authservers.php:632 +#: usr/local/www/system_authservers.php:639 usr/local/www/diag_backup.php:681 +#: etc/inc/authgui.inc:279 usr/local/www/system_authservers.php:639 +#: usr/local/www/diag_backup.php:681 etc/inc/authgui.inc:279 +msgid "Password:" +msgstr "パスワード:" + +#: etc/inc/authgui.inc:265 etc/inc/authgui.inc:263 etc/inc/authgui.inc:286 +#: etc/inc/authgui.inc:286 +msgid "Enter username and password to login." +msgstr "ユーザåã¨ãƒ‘スワードを入力ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¾ã™ã€‚" + +#: etc/inc/authgui.inc:271 etc/inc/authgui.inc:269 etc/inc/authgui.inc:292 +#: etc/inc/authgui.inc:292 +msgid "Your browser must support cookies to login." +msgstr "ãŠä½¿ã„ã®ãƒ–ラウザã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ãŸã‚ã«Cookieをサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/cmd_chain.inc:101 +#, php-format +msgid "CmdCHAIN is executing -> %1$s - %2$s" +msgstr "CmdCHAIN​​ãŒå®Ÿè¡Œã•れã¦ã„ã‚‹ - u003eã¯%1$s - %2$s" + +#: etc/inc/cmd_chain.inc:109 etc/inc/cmd_chain.inc:111 +#, php-format +msgid "%1$s failed with return code -> %2$s. The command was %3$s" +msgstr "ã¯%1$s ã€æˆ»ã‚Šã‚³ãƒ¼ãƒ‰ã§å¤±æ•—ã—ã¾ã—㟠- u003e %2$s 。コマンドã¯%3$sãŸ" + +#: etc/inc/config.console.inc:58 etc/inc/config.console.inc:58 +msgid "DANGER! WARNING! ACHTUNG!" +msgstr "å±é™º ï¼è­¦å‘Š ï¼ ACHTUNG ï¼" + +#: etc/inc/config.console.inc:59 etc/inc/config.console.inc:59 +#, php-format +msgid "%s requires *AT LEAST* %s RAM to function correctly.%s" +msgstr "%sã¯* correctly.%s機能ã™ã‚‹ã«ã¯ã€å°‘ãªãã¨ã‚‚* %s RAMãŒå¿…è¦ã§ã™" + +#: etc/inc/config.console.inc:60 etc/inc/config.console.inc:60 +#, php-format +msgid "Only (%s) MB RAM has been detected.%s" +msgstr "ã®ã¿ï¼ˆ %s ) MBã®RAMãŒdetected.%sã•れã¦ã„ã‚‹" + +#: etc/inc/config.console.inc:61 etc/inc/config.console.inc:61 +msgid "Press ENTER to continue." +msgstr "Enterキーを押ã—ã¦ç¶šè¡Œã—ã¾ã™ã€‚" + +#: etc/inc/config.console.inc:83 etc/inc/config.console.inc:495 +#: etc/inc/config.console.inc:497 etc/inc/config.console.inc:83 +#: etc/inc/config.console.inc:497 +msgid "No interfaces found!" +msgstr "何ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯ã€è¦‹ã¤ã‹ã‚‰ãªã„ï¼" + +#: etc/inc/config.console.inc:181 etc/inc/config.console.inc:181 +msgid "VLAN interfaces:" +msgstr "VLANインタフェース:" + +#: etc/inc/config.console.inc:207 etc/inc/config.console.inc:207 +msgid "Enter the WAN interface name or 'a' for auto-detection:" +msgstr ": WANインターフェイスåã€ã¾ãŸã¯è‡ªå‹•検出ã®ãŸã‚ã®ã€ŒAã€ã‚’入力ã—ã¦ãã ã•ã„" + +#: etc/inc/config.console.inc:215 etc/inc/config.console.inc:276 +#: etc/inc/config.console.inc:518 etc/inc/config.console.inc:520 +#: etc/inc/config.console.inc:244 etc/inc/config.console.inc:215 +#: etc/inc/config.console.inc:244 etc/inc/config.console.inc:276 +#: etc/inc/config.console.inc:520 +#, php-format +msgid "%sInvalid interface name '%s'%s" +msgstr "%sInvalidインタフェースå「 %s' %s" + +#: etc/inc/config.console.inc:222 etc/inc/config.console.inc:222 +#, php-format +msgid "" +"%sEnter the LAN interface name or 'a' for auto-detection %sNOTE: this " +"enables full Firewalling/NAT mode.%s(or nothing if finished):%s" +msgstr "「LANインタフェースåã¾ãŸã¯''自動検出%sNOTEãŸã‚%sEnter :ã“れã¯ã€Œãƒ•ルファイアウォー/ NAT mode.%s (ã¾ãŸã¯å®Œæˆã—ãŸå ´åˆNothing)を有効ã«ã—ã¾ã™ã€‚ %s" + +#: etc/inc/config.console.inc:244 +#, php-format +msgid "%sInvalid interface name '%s'%s)" +msgstr "%sInvalidインタフェースå「 %s' %s )" + +#: etc/inc/config.console.inc:261 etc/inc/config.console.inc:261 +#, php-format +msgid "%sOptional interface %s description found: %s" +msgstr "%s : %sOptionalインタフェースãŒè¨˜è¿°ç™ºè¦‹ã‚’%s" + +#: etc/inc/config.console.inc:264 +#, php-format +msgid "(or nothing if finished):%s" +msgstr "(ã¾ãŸã¯ä½•も終ã‚ã£ã¦ã„ã‚‹å ´åˆï¼‰ : %s" + +#: etc/inc/config.console.inc:270 etc/inc/config.console.inc:270 +msgid "Optional" +msgstr "オプショナル" + +#: etc/inc/config.console.inc:304 etc/inc/config.console.inc:304 +msgid "The interfaces will be assigned as follows:" +msgstr "次ã®ã‚ˆã†ã«ã‚¤ãƒ³ã‚¿ãƒ•ェースãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚" + +#: etc/inc/config.console.inc:416 etc/inc/config.console.inc:418 +#: etc/inc/config.console.inc:418 +#, php-format +msgid "%sWriting configuration..." +msgstr "設定を%sWriting..." + +#: etc/inc/config.console.inc:418 etc/inc/config.console.inc:420 +#: etc/inc/config.console.inc:420 +#, php-format +msgid "done.%s" +msgstr "done.%s" + +#: etc/inc/config.console.inc:425 etc/inc/config.console.inc:427 +#: etc/inc/config.console.inc:427 +msgid "One moment while we reload the settings..." +msgstr "一瞬我々ã¯ã€è¨­å®šã‚’リロードã—ãªãŒã‚‰..." + +#: etc/inc/config.console.inc:429 etc/inc/config.console.inc:431 +#: etc/inc/config.console.inc:431 +msgid " done!" +msgstr "行゠ï¼" + +#: etc/inc/config.console.inc:449 etc/inc/config.console.inc:451 +#: etc/inc/config.console.inc:451 +#, php-format +msgid "Detected link-up on interface %s.%s" +msgstr "インタフェース%s.%sã§æ¤œå‡ºã•れãŸãƒªãƒ³ã‚¯ã‚¢ãƒƒãƒ—" + +#: etc/inc/config.console.inc:454 etc/inc/config.console.inc:456 +#: etc/inc/config.console.inc:456 +#, php-format +msgid "No link-up detected.%s" +msgstr "ã„ã„ãˆãƒªãƒ³ã‚¯ã‚¢ãƒƒãƒ—detected.%sã‚“" + +#: etc/inc/config.console.inc:493 etc/inc/config.console.inc:495 +#: etc/inc/config.console.inc:495 +msgid "VLAN Capable interfaces:" +msgstr "VLAN対応インターフェイス:" + +#: etc/inc/config.console.inc:508 etc/inc/config.console.inc:510 +#: etc/inc/config.console.inc:510 +msgid "No VLAN capable interfaces detected." +msgstr "ã„ã„ãˆã€VLANãŒå¯èƒ½ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯ã€æ¤œå‡ºã•れã¾ã›ã‚“。" + +#: etc/inc/config.console.inc:512 etc/inc/config.console.inc:514 +#: etc/inc/config.console.inc:514 +msgid "" +"Enter the parent interface name for the new VLAN (or nothing if finished):" +msgstr "「新ã—ã„VLAN (ã¾ãŸã¯å®Œæˆã—ãŸå ´åˆã¯Nothing)ã®è¦ªã‚¤ãƒ³ã‚¿ãƒ•ェースåを入力ã—ã¾ã™ã€‚" + +#: etc/inc/config.console.inc:525 etc/inc/config.console.inc:527 +#: etc/inc/config.console.inc:527 +msgid "Enter the VLAN tag (1-4094):" +msgstr "VLANタグ( 1-4094 )を入力ã—ã¾ã™ã€‚" + +#: etc/inc/config.console.inc:529 etc/inc/config.console.inc:531 +#: etc/inc/config.console.inc:531 +#, php-format +msgid "%sInvalid VLAN tag '%s'%s" +msgstr "%sInvalid VLANタグ「 %s' %s" + +#: etc/inc/config.lib.inc:79 etc/inc/config.lib.inc:79 +msgid "Config.xml unlocked." +msgstr "config.xmlãŒã‚¢ãƒ³ãƒ­ãƒƒã‚¯ã€‚" + +#: etc/inc/config.lib.inc:82 etc/inc/config.lib.inc:82 +msgid "Invalid password entered. Please try again." +msgstr "無効ãªãƒ‘スワードãŒå…¥åŠ›ã•れã¾ã—ãŸã€‚ã‚‚ã†ä¸€åº¦ã‚„り直ã—ã¦ãã ã•ã„。" + +#: etc/inc/config.lib.inc:110 etc/inc/config.lib.inc:140 +#: etc/inc/config.lib.inc:271 etc/inc/config.lib.inc:110 +#: etc/inc/config.lib.inc:140 etc/inc/config.lib.inc:271 +msgid "" +"Config.xml is corrupted and is 0 bytes. Could not restore a previous backup." +msgstr "「 config.xmlã¨ã„ã†ç ´æã—〠0ãƒã‚¤ãƒˆã§ã‚る。以å‰ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を復元ã§ãã¾ã›ã‚“ã§ã—ãŸã•れã¦ã„る。" + +#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149 +#: etc/inc/config.lib.inc:552 etc/inc/config.lib.inc:560 +#: etc/inc/config.lib.inc:577 etc/inc/config.lib.inc:555 +#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149 +#: etc/inc/config.lib.inc:555 +msgid "Could not restore config.xml." +msgstr "config.xmlã«ã¯å¾©å…ƒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/config.lib.inc:210 etc/inc/config.lib.inc:211 +#: etc/inc/config.lib.inc:210 etc/inc/config.lib.inc:211 +#, php-format +msgid "%1$s is restoring the configuration %2$s" +msgstr "ã¯%1$sã¯ã€ã‚³ãƒ³ãƒ•ィギュレーション%2$sを復元ã•れã¦ã„ã‚‹" + +#: etc/inc/config.lib.inc:233 etc/inc/config.lib.inc:233 +msgid "Resetting factory defaults..." +msgstr "å·¥å ´å‡ºè·æ™‚ã®è¨­å®šã‚’リセットã™ã‚‹..." + +#: etc/inc/config.lib.inc:236 etc/inc/config.lib.inc:236 +msgid "" +"No XML configuration file found - using factory defaults.\n" +"Make sure that the configuration floppy disk with the conf/config.xml\n" +"file is inserted. If it isn't, your configuration changes will be lost\n" +"on reboot.\n" +msgstr "「見ã¤ã‹ã‚Šã¾ã›ã‚“XML設定ファイル - 工場defaults.\n使用ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ãã†ã§ãªã„å ´åˆã¯ç ”究会/ config.xml\n "ファイルを使用ã—ã¦æ§‹æˆã‚’ãƒ•ãƒ­ãƒƒãƒ”ãƒ¼ãƒ‡ã‚£ã‚¹ã‚¯ãŒæŒ¿å…¥ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã€è¨­å®šã®å¤‰æ›´ã¯lost\nã§ããªããªã‚Šã¾ã™ã€Œ reboot.\n上" + +#: etc/inc/config.lib.inc:249 etc/inc/config.lib.inc:249 +#, php-format +msgid "XML configuration file not found. %s cannot continue booting." +msgstr "XML設定ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 %sã¯ãƒ–ートを続行ã§ãã¾ã›ã‚“。" + +#: etc/inc/config.lib.inc:255 etc/inc/config.lib.inc:255 +msgid "" +"Last known config found and restored. Please double check your " +"configuration file for accuracy." +msgstr "精度ã®ãŸã‚ã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã€Œæœ€å¾Œã®æ—¢çŸ¥ã®è¨­å®šãŒè¦‹ã¤ã‹ã‚Šã€å¾©å…ƒã•れãŸã€‚ã‚ãªãŸã‚’å†ç¢ºèªã—ã¦ãã ã•ã„〠。" + +#: etc/inc/config.lib.inc:317 etc/inc/config.lib.inc:320 +#: etc/inc/config.lib.inc:320 +msgid "Disk is dirty. Running fsck -y" +msgstr "ãƒ‡ã‚£ã‚¹ã‚¯ãŒæ±šã‚Œã¦ã„ã¾ã™ã€‚ fsckã‚’-Y稼åƒ" + +#: etc/inc/config.lib.inc:328 etc/inc/config.lib.inc:331 +#: etc/inc/config.lib.inc:331 +msgid "File system is dirty. Launching FSCK for /" +msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã¯æ±šã‚Œã¦ã„る。 /ã®ãŸã‚ã®èµ·å‹•FSCK" + +#: etc/inc/config.lib.inc:379 etc/inc/config.lib.inc:382 +#: etc/inc/config.lib.inc:382 +#, php-format +msgid "Start Configuration upgrade at %s, set execution timeout to 15 minutes" +msgstr "%sã§ã®ã‚³ãƒ³ãƒ•ィギュレーションã®ã‚¢ãƒƒãƒ—グレード〠15分ã«è¨­å®šã•れã€å®Ÿè¡Œã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’é–‹å§‹" + +#: etc/inc/config.lib.inc:389 etc/inc/config.lib.inc:390 +#: etc/inc/config.lib.inc:392 etc/inc/config.lib.inc:393 +#: etc/inc/config.lib.inc:392 etc/inc/config.lib.inc:393 +msgid "Updated bogon update frequency to 3am" +msgstr "åˆå‰3æ™‚ã«æ›´æ–°ã•れãŸbogonã®æ›´æ–°é »åº¦" + +#: etc/inc/config.lib.inc:420 etc/inc/config.lib.inc:423 +#: etc/inc/config.lib.inc:423 +#, php-format +msgid "Ended Configuration upgrade at %s" +msgstr "%sã§ã‚¨ãƒ³ãƒ‰æ§‹æˆã®ã‚¢ãƒƒãƒ—グレード" + +#: etc/inc/config.lib.inc:423 etc/inc/config.lib.inc:426 +#: etc/inc/config.lib.inc:426 +#, php-format +msgid "Upgraded config version level from %1$s to %2$s" +msgstr "%2$sã«ã¯%1$sã‹ã‚‰ã‚¢ãƒƒãƒ—グレードã—ãŸã‚³ãƒ³ãƒ•ィギュレーションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³Â·ãƒ¬ãƒ™ãƒ«" + +#: etc/inc/config.lib.inc:512 etc/inc/config.lib.inc:520 +#: etc/inc/config.lib.inc:537 etc/inc/config.lib.inc:903 +#: etc/inc/config.lib.inc:903 +#, php-format +msgid "%s made unknown change" +msgstr "%sã¯ã€æœªçŸ¥ã®å¤‰æ›´ã‚’行ã£ãŸ" + +#: etc/inc/config.lib.inc:525 etc/inc/config.lib.inc:533 +#: etc/inc/config.lib.inc:550 etc/inc/config.lib.inc:528 +#: etc/inc/config.lib.inc:528 +msgid "WARNING: Config contents could not be save. Could not open file!" +msgstr "警告:構æˆå†…容ã¯ä¿å­˜ã•れã¾ã›ã‚“ã§ã—ãŸã€‚ファイルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸï¼" + +#: etc/inc/config.lib.inc:527 etc/inc/config.lib.inc:535 +#: etc/inc/config.lib.inc:552 etc/inc/config.lib.inc:530 +#: etc/inc/config.lib.inc:530 +#, php-format +msgid "Unable to open %s/config.xml for writing in write_config()%s" +msgstr "write_config.()%sã«æ›¸ã込むãŸã‚%s / config.xmlã®ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: etc/inc/config.lib.inc:636 etc/inc/config.lib.inc:644 +#: etc/inc/config.lib.inc:661 etc/inc/config.lib.inc:639 +#: etc/inc/config.lib.inc:639 +msgid "Reverted to" +msgstr "ã«æˆ»ã£ãŸ" + +#: etc/inc/config.lib.inc:651 etc/inc/config.lib.inc:659 +#: etc/inc/config.lib.inc:676 etc/inc/config.lib.inc:654 +#: etc/inc/config.lib.inc:654 +msgid "Installing configuration..." +msgstr "æ§‹æˆã‚’インストール..." + +#: etc/inc/config.lib.inc:653 etc/inc/config.lib.inc:661 +#: etc/inc/config.lib.inc:678 etc/inc/config.lib.inc:656 +#: etc/inc/config.lib.inc:656 +msgid "Installing configuration ...." +msgstr "æ§‹æˆã‚’インストール...." + +#: etc/inc/config.lib.inc:704 etc/inc/config.lib.inc:712 +#: etc/inc/config.lib.inc:729 etc/inc/config.lib.inc:707 +#: etc/inc/config.lib.inc:707 +msgid "XML error: unable to open file" +msgstr "XMLエラー:ファイルをオープンã§ãã¾ã›ã‚“" + +#: etc/inc/config.lib.inc:710 etc/inc/config.lib.inc:718 +#: etc/inc/config.lib.inc:735 etc/inc/config.lib.inc:713 +#: etc/inc/config.lib.inc:713 +#, php-format +msgid "%1$s at line %2$d" +msgstr "行%ã§ã¯%1$s 2 $ dã®" + +#: etc/inc/config.lib.inc:756 etc/inc/config.lib.inc:758 +#: etc/inc/config.lib.inc:764 etc/inc/config.lib.inc:766 +#: etc/inc/config.lib.inc:781 etc/inc/config.lib.inc:783 +#: etc/inc/config.lib.inc:759 etc/inc/config.lib.inc:761 +#: etc/inc/config.lib.inc:759 etc/inc/config.lib.inc:761 +#, php-format +msgid "The backup cache file %s is corrupted. Unlinking." +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—キャッシュファイル%sãŒç ´æã—ã¦ã„ã¾ã™ã€‚リンク解除。" + +#: etc/inc/easyrule.inc:116 etc/inc/easyrule.inc:117 etc/inc/easyrule.inc:117 +msgid "Easy Rule: Blocked from Firewall Log View" +msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ï¼šãƒ•ァイアウォールログã®è¡¨ç¤ºãŒãƒ–ロックã•れ" + +#: etc/inc/easyrule.inc:165 etc/inc/easyrule.inc:173 etc/inc/easyrule.inc:181 +#: etc/inc/easyrule.inc:177 etc/inc/easyrule.inc:185 etc/inc/easyrule.inc:178 +#: etc/inc/easyrule.inc:186 etc/inc/easyrule.inc:178 etc/inc/easyrule.inc:186 +msgid "Entry added" +msgstr "副出記入" + +#: etc/inc/easyrule.inc:170 etc/inc/easyrule.inc:178 etc/inc/easyrule.inc:182 +#: etc/inc/easyrule.inc:183 etc/inc/easyrule.inc:183 +msgid "Hosts blocked from Firewall Log view" +msgstr "ファイアウォールログビューã‹ã‚‰ãƒ–ロックã®ãƒ›ã‚¹ãƒˆ" + +#: etc/inc/easyrule.inc:249 etc/inc/easyrule.inc:257 etc/inc/easyrule.inc:262 +#: etc/inc/easyrule.inc:263 etc/inc/easyrule.inc:263 +msgid "Easy Rule: Passed from Firewall Log View" +msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ï¼šãƒ•ァイアウォールログビューã‹ã‚‰æ¸¡ã•れãŸ" + +#: etc/inc/easyrule.inc:280 etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:309 +#: etc/inc/easyrule.inc:313 etc/inc/easyrule.inc:318 etc/inc/easyrule.inc:318 +msgid "Tried to block invalid IP:" +msgstr "無効ãªIPをブロックã—よã†ã¨ã—ãŸã€‚" + +#: etc/inc/easyrule.inc:284 etc/inc/easyrule.inc:307 etc/inc/easyrule.inc:313 +#: etc/inc/easyrule.inc:317 etc/inc/easyrule.inc:322 etc/inc/easyrule.inc:322 +msgid "Invalid interface for block rule:" +msgstr "ブロックルールã®ç„¡åйãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス:" + +#: etc/inc/easyrule.inc:287 etc/inc/easyrule.inc:310 etc/inc/easyrule.inc:316 +#: etc/inc/easyrule.inc:320 etc/inc/easyrule.inc:325 etc/inc/easyrule.inc:325 +msgid "Host added successfully" +msgstr "ホスト正常ã«è¿½åŠ " + +#: etc/inc/easyrule.inc:289 etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:318 +#: etc/inc/easyrule.inc:322 etc/inc/easyrule.inc:327 etc/inc/easyrule.inc:327 +msgid "Failed to create block rule, alias, or add host." +msgstr "ブロックルールã€ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã€ã¾ãŸã¯ãƒ›ã‚¹ãƒˆã‚’追加ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚" + +#: etc/inc/easyrule.inc:292 etc/inc/easyrule.inc:315 etc/inc/easyrule.inc:321 +#: etc/inc/easyrule.inc:325 etc/inc/easyrule.inc:330 etc/inc/easyrule.inc:330 +msgid "Tried to block but had no host IP or interface" +msgstr "ブロックã—よã†ã¨ã—ãŸãŒã€æŒã£ã¦ã„ãŸã‚“ホストIPã¾ã›ã‚“ã¾ãŸã¯ã‚¤ãƒ³ã‚¿ãƒ•ェース" + +#: etc/inc/easyrule.inc:294 etc/inc/easyrule.inc:317 etc/inc/easyrule.inc:323 +#: etc/inc/easyrule.inc:327 etc/inc/easyrule.inc:332 etc/inc/easyrule.inc:332 +msgid "Unknown block error." +msgstr "䏿˜Žãªãƒ–ロックエラー。" + +#: etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:334 +#: etc/inc/easyrule.inc:338 etc/inc/easyrule.inc:343 etc/inc/easyrule.inc:343 +msgid "Invalid interface for pass rule:" +msgstr "パス·ルールã®ç„¡åйãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス:" + +#: etc/inc/easyrule.inc:306 etc/inc/easyrule.inc:329 etc/inc/easyrule.inc:337 +#: etc/inc/easyrule.inc:341 etc/inc/easyrule.inc:346 etc/inc/easyrule.inc:346 +msgid "Invalid protocol for pass rule:" +msgstr "パス·ルールã®ç„¡åйãªãƒ—ロトコル:" + +#: etc/inc/easyrule.inc:309 etc/inc/easyrule.inc:332 etc/inc/easyrule.inc:340 +#: etc/inc/easyrule.inc:344 etc/inc/easyrule.inc:349 etc/inc/easyrule.inc:349 +msgid "Tried to pass invalid source IP:" +msgstr "無効ãªé€ä¿¡å…ƒIPアドレスを渡ãã†ã¨ã—ã¾ã—ãŸã€‚" + +#: etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:335 etc/inc/easyrule.inc:343 +#: etc/inc/easyrule.inc:347 etc/inc/easyrule.inc:352 etc/inc/easyrule.inc:352 +msgid "Tried to pass invalid destination IP:" +msgstr "無効ãªé€ä¿¡å…ˆIPを渡ãã†ã¨ã—ã¾ã—ãŸã€‚" + +#: etc/inc/easyrule.inc:316 etc/inc/easyrule.inc:339 etc/inc/easyrule.inc:347 +#: etc/inc/easyrule.inc:351 etc/inc/easyrule.inc:356 etc/inc/easyrule.inc:356 +msgid "Missing destination port:" +msgstr "ä¸è¶³ã—ã¦ã„る宛先ãƒãƒ¼ãƒˆï¼š" + +#: etc/inc/easyrule.inc:319 etc/inc/easyrule.inc:342 etc/inc/easyrule.inc:350 +#: etc/inc/easyrule.inc:354 etc/inc/easyrule.inc:359 etc/inc/easyrule.inc:359 +msgid "Tried to pass invalid destination port:" +msgstr "無効ãªå®›å…ˆãƒãƒ¼ãƒˆã‚’渡ãã†ã¨ã—ã¾ã—ãŸã€‚" + +#: etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:349 etc/inc/easyrule.inc:357 +#: etc/inc/easyrule.inc:361 etc/inc/easyrule.inc:366 etc/inc/easyrule.inc:366 +msgid "Successfully added pass rule!" +msgstr "正常ã«è¿½åŠ ã•れã€ãƒ‘スã®ãƒ«ãƒ¼ãƒ« ï¼" + +#: etc/inc/easyrule.inc:328 etc/inc/easyrule.inc:351 etc/inc/easyrule.inc:359 +#: etc/inc/easyrule.inc:363 etc/inc/easyrule.inc:368 etc/inc/easyrule.inc:368 +msgid "Failed to add pass rule." +msgstr "パス·ルールを追加ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/easyrule.inc:331 etc/inc/easyrule.inc:354 etc/inc/easyrule.inc:362 +#: etc/inc/easyrule.inc:366 etc/inc/easyrule.inc:371 etc/inc/easyrule.inc:371 +msgid "Missing parameters for pass rule." +msgstr "パス·ルールã®ãƒ‘ラメータãŒã‚りã¾ã›ã‚“。" + +#: etc/inc/easyrule.inc:333 etc/inc/easyrule.inc:356 etc/inc/easyrule.inc:364 +#: etc/inc/easyrule.inc:368 etc/inc/easyrule.inc:373 etc/inc/easyrule.inc:373 +msgid "Unknown pass error." +msgstr "未知ã®ãƒ‘スエラー。" + +#: etc/inc/filter_log.inc:164 etc/inc/filter_log.inc:167 +#: etc/inc/filter_log.inc:191 etc/inc/filter_log.inc:201 +#: etc/inc/filter_log.inc:201 +#, php-format +msgid "" +"There was a error parsing rule: %s. Please report to mailing list or forum." +msgstr "%s.ãŒãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã‚„フォーラムã«å ±å‘Šã—ã¦ãã ã•ã„。「エラー解æžãƒ«ãƒ¼ãƒ«ãŒã‚りã¾ã—ãŸã€‚" + +#: etc/inc/filter_log.inc:208 etc/inc/filter_log.inc:210 +#: etc/inc/filter_log.inc:213 etc/inc/filter_log.inc:237 +#: etc/inc/filter_log.inc:247 etc/inc/filter_log.inc:247 +#, php-format +msgid "Service %1$s/%2$s: %3$s" +msgstr "サービス%1$s/%2$s : %3$s" + +#: etc/inc/gwlb.inc:230 etc/inc/gwlb.inc:237 etc/inc/gwlb.inc:242 +#: etc/inc/gwlb.inc:244 etc/inc/gwlb.inc:244 +#, php-format +msgid "" +"Removing static route for monitor %1$s and adding a new route through %2$s" +msgstr "「モニターã¯%1$sã®ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã®å–り外ã—ã¨%2$sを通ã˜ã¦æ–°ã—ã„ルートを追加ã™ã‚‹" + +#: etc/inc/gwlb.inc:501 etc/inc/gwlb.inc:727 etc/inc/gwlb.inc:750 +#, php-format +msgid "MONITOR: %s is down, removing from routing group" +msgstr "モニタ: %s ã€ã‚°ãƒ«ãƒ¼ãƒ—をルーティングã‹ã‚‰å–り出ã—ã€ãƒ€ã‚¦ãƒ³ã—ã¦ã„ã‚‹" + +#: etc/inc/gwlb.inc:505 etc/inc/gwlb.inc:731 etc/inc/gwlb.inc:754 +#, php-format +msgid "MONITOR: %s has packet loss, removing from routing group" +msgstr "MONITOR : %sã¯ã€ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰é™¤åŽ»ã—ã€ãƒ‘ケットæå¤±ã‚’有ã™ã‚‹" + +#: etc/inc/gwlb.inc:509 etc/inc/gwlb.inc:735 etc/inc/gwlb.inc:758 +#, php-format +msgid "MONITOR: %s has high latency, removing from routing group" +msgstr "モニタ: %s ã€ã‚°ãƒ«ãƒ¼ãƒ—をルーティングã‹ã‚‰å–り出ã—ã€å¤§ããªé…å»¶ãŒã‚ã‚‹" + +#: etc/inc/gwlb.inc:526 etc/inc/gwlb.inc:752 etc/inc/gwlb.inc:775 +msgid "Gateways status could not be determined, considering all as up/active." +msgstr "ゲートウェイã®çŠ¶æ…‹ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ–/アップã¨ã—ã¦ã€ã™ã¹ã¦ã‚’考慮ã—ã€æ±ºå®šã™ã‚‹ã“ã¨ãŒã§ããªã‹ã£ãŸã€‚" + +#: etc/inc/gwlb.inc:580 etc/inc/gwlb.inc:809 etc/inc/gwlb.inc:835 +#: etc/inc/gwlb.inc:844 etc/inc/gwlb.inc:823 etc/inc/gwlb.inc:807 +#: etc/inc/gwlb.inc:807 +#, php-format +msgid "Updating gateway group gateway for %1$s - new gateway is %2$s" +msgstr "ã¯%1$sã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤Â·ã‚°ãƒ«ãƒ¼ãƒ—ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã®æ›´æ–° - æ–°è¦ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã¯ã€ %2$sã§ã™" + +#: etc/inc/ipsec.inc:39 etc/inc/ipsec.inc:39 +msgid "My IP address" +msgstr "ç§ã®IPアドレス" + +#: etc/inc/ipsec.inc:40 etc/inc/ipsec.inc:49 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:114 +#: usr/local/www/diag_logs_vpn.php:178 +#: usr/local/www/status_captiveportal.php:160 +#: usr/local/www/services_captiveportal.php:602 +#: usr/local/www/services_captiveportal.php:623 +#: usr/local/www/services_captiveportal.php:642 +#: usr/local/www/services_captiveportal.php:661 +#: usr/local/www/services_captiveportal_ip.php:117 +#: usr/local/www/services_captiveportal_ip_edit.php:195 +#: usr/local/www/services_dhcp.php:891 +#: usr/local/www/services_dhcp_edit.php:221 +#: usr/local/www/services_dnsmasq_edit.php:80 +#: usr/local/www/services_dnsmasq_edit.php:156 +#: usr/local/www/vpn_pptp_users.php:99 +#: usr/local/www/vpn_pptp_users_edit.php:160 usr/local/www/diag_arp.php:313 +#: usr/local/www/status_dhcp_leases.php:318 +#: usr/local/www/system_advanced_network.php:226 +#: usr/local/www/vpn_ipsec_phase2.php:635 usr/local/www/vpn_l2tp_users.php:102 +#: usr/local/www/vpn_l2tp_users_edit.php:168 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:211 +#: usr/local/www/diag_logs_vpn.php:177 +#: usr/local/www/services_captiveportal.php:638 +#: usr/local/www/services_captiveportal.php:659 +#: usr/local/www/services_captiveportal.php:681 +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/status_dhcp_leases.php:339 +#: usr/local/www/services_dhcp.php:929 usr/local/www/vpn_ipsec_phase2.php:661 +#: usr/local/www/services_dhcp_edit.php:224 +#: usr/local/www/services_dnsmasq_edit.php:212 +#: usr/local/www/services_captiveportal_ip.php:115 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137 +#: usr/local/www/vpn_l2tp_users.php:103 +#: usr/local/www/services_captiveportal.php:636 +#: usr/local/www/services_captiveportal.php:657 +#: usr/local/www/services_captiveportal.php:679 +#: usr/local/www/services_captiveportal.php:698 +#: usr/local/www/status_dhcp_leases.php:341 +#: usr/local/www/services_captiveportal_ip_edit.php:193 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/vpn_ipsec_phase2.php:757 +#: usr/local/www/vpn_pptp_users_edit.php:161 +#: usr/local/www/services_dhcp_edit.php:223 +#: usr/local/www/vpn_l2tp_users_edit.php:169 +#: usr/local/www/vpn_pptp_users.php:100 +#: usr/local/www/services_captiveportal_ip_edit.php:187 +#: usr/local/www/services_dhcp_edit.php:351 +#: usr/local/www/services_dhcp.php:1152 +#: usr/local/www/status_captiveportal.php:146 +#: usr/local/www/services_captiveportal.php:637 +#: usr/local/www/services_captiveportal.php:658 +#: usr/local/www/services_captiveportal.php:680 +#: usr/local/www/services_captiveportal.php:699 +#: usr/local/www/vpn_ipsec_phase2.php:778 usr/local/www/services_dhcp.php:1172 +#: usr/local/www/services_captiveportal.php:653 +#: usr/local/www/services_captiveportal.php:674 +#: usr/local/www/services_captiveportal.php:696 +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/system_advanced_network.php:227 +#: usr/local/www/services_captiveportal_ip_edit.php:187 +#: usr/local/www/diag_arp.php:313 usr/local/www/vpn_pptp_users.php:100 +#: usr/local/www/services_captiveportal_ip.php:115 +#: usr/local/www/services_dhcp_edit.php:351 +#: usr/local/www/services_dhcp.php:1172 usr/local/www/vpn_l2tp_users.php:103 +#: usr/local/www/status_captiveportal.php:146 +#: usr/local/www/services_captiveportal.php:653 +#: usr/local/www/services_captiveportal.php:674 +#: usr/local/www/services_captiveportal.php:696 +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/status_dhcp_leases.php:341 +#: usr/local/www/vpn_l2tp_users_edit.php:169 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:212 +#: usr/local/www/diag_logs_vpn.php:177 +#: usr/local/www/vpn_pptp_users_edit.php:161 +#: usr/local/www/system_advanced_network.php:227 +#: usr/local/www/vpn_ipsec_phase2.php:778 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137 +#: etc/inc/ipsec.inc:40 etc/inc/ipsec.inc:49 +msgid "IP address" +msgstr "IPアドレス" + +#: etc/inc/ipsec.inc:41 etc/inc/ipsec.inc:50 +#: usr/local/www/system_camanager.php:476 +#: usr/local/www/system_certmanager.php:589 +#: usr/local/www/system_certmanager.php:672 +#: usr/local/www/system_certmanager.php:705 +#: usr/local/www/system_certmanager.php:838 +#: usr/local/www/system_camanager.php:477 +#: usr/local/www/system_camanager.php:500 +#: usr/local/www/system_certmanager.php:730 +#: usr/local/www/system_certmanager.php:879 +#: usr/local/www/system_certmanager.php:731 +#: usr/local/www/system_certmanager.php:883 +#: usr/local/www/system_camanager.php:500 +#: usr/local/www/system_certmanager.php:731 +#: usr/local/www/system_certmanager.php:883 etc/inc/ipsec.inc:41 +#: etc/inc/ipsec.inc:50 +msgid "Distinguished name" +msgstr "識別å" + +#: etc/inc/ipsec.inc:42 etc/inc/ipsec.inc:51 etc/inc/ipsec.inc:42 +#: etc/inc/ipsec.inc:51 +msgid "User distinguished name" +msgstr "ユーザー識別å" + +#: etc/inc/ipsec.inc:43 etc/inc/ipsec.inc:52 etc/inc/ipsec.inc:43 +#: etc/inc/ipsec.inc:52 +msgid "ASN.1 distinguished Name" +msgstr "ASN.1ã®è­˜åˆ¥å" + +#: etc/inc/ipsec.inc:44 etc/inc/ipsec.inc:53 etc/inc/ipsec.inc:44 +#: etc/inc/ipsec.inc:53 +msgid "KeyID tag" +msgstr "KEYIDã‚¿ã‚°" + +#: etc/inc/ipsec.inc:45 usr/local/www/services_dhcp.php:722 +#: usr/local/www/fbegin.inc:128 usr/local/www/services_dhcpv6.php:648 +#: usr/local/www/fbegin.inc:145 usr/local/www/services_dhcp.php:760 +#: usr/local/www/services_dhcpv6.php:741 usr/local/www/fbegin.inc:154 +#: usr/local/www/services_dhcp.php:942 usr/local/www/services_dhcpv6.php:672 +#: usr/local/www/services_dhcp_edit.php:451 +#: usr/local/www/services_dhcp.php:955 usr/local/www/services_dhcpv6.php:689 +#: usr/local/www/fbegin.inc:146 usr/local/www/services_dhcp.php:975 +#: usr/local/www/services_dhcp_edit.php:451 +#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcpv6.php:689 +#: usr/local/www/fbegin.inc:146 etc/inc/ipsec.inc:45 +msgid "Dynamic DNS" +msgstr "ダイナミックDNS" + +#: etc/inc/ipsec.inc:48 etc/inc/ipsec.inc:48 +msgid "Peer IP address" +msgstr "ピアIPアドレス" + +#: etc/inc/ipsec.inc:256 usr/local/www/vpn_ipsec.php:206 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase2.php:255 usr/local/www/vpn_ipsec.php:217 +#: usr/local/www/vpn_ipsec_phase2.php:268 etc/inc/ipsec.inc:281 +#: usr/local/www/vpn_ipsec.php:216 usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec.php:222 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase2.php:316 etc/inc/ipsec.inc:289 +#: usr/local/www/vpn_ipsec.php:222 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase2.php:316 etc/inc/ipsec.inc:289 +msgid "Mobile Client" +msgstr "移動クライアント" + +#: etc/inc/ipsec.inc:258 usr/local/www/interfaces_bridge_edit.php:428 +#: usr/local/www/firewall_nat_edit.php:797 +#: usr/local/www/firewall_nat_edit.php:828 usr/local/www/interfaces.php:1032 +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1385 +#: usr/local/www/interfaces.php:1491 usr/local/www/interfaces.php:1567 +#: usr/local/www/vpn_ipsec_phase2.php:435 +#: usr/local/www/interfaces_bridge_edit.php:437 +#: usr/local/www/vpn_ipsec_phase2.php:461 +#: usr/local/www/firewall_nat_edit.php:805 +#: usr/local/www/firewall_nat_edit.php:836 usr/local/www/interfaces.php:1118 +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1489 +#: usr/local/www/interfaces.php:1597 etc/inc/ipsec.inc:283 +#: usr/local/www/system_advanced_misc.php:386 +#: usr/local/www/interfaces_bridge_edit.php:438 +#: usr/local/www/vpn_ipsec_phase2.php:527 +#: usr/local/www/vpn_ipsec_phase2.php:563 +#: usr/local/www/firewall_nat_edit.php:804 +#: usr/local/www/firewall_nat_edit.php:835 usr/local/www/interfaces.php:1106 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1477 +#: usr/local/www/interfaces.php:1585 usr/local/www/firewall_nat_edit.php:799 +#: usr/local/www/firewall_nat_edit.php:830 +#: usr/local/www/diag_system_pftop.php:155 +#: usr/local/www/system_advanced_misc.php:398 +#: usr/local/www/interfaces_bridge_edit.php:439 +#: usr/local/www/vpn_ipsec_phase2.php:584 usr/local/www/interfaces.php:1120 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1490 +#: usr/local/www/interfaces.php:1595 etc/inc/ipsec.inc:292 +#: usr/local/www/firewall_nat_edit.php:811 +#: usr/local/www/firewall_nat_edit.php:842 +#: usr/local/www/system_advanced_misc.php:445 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1535 usr/local/www/interfaces.php:1641 +#: usr/local/www/firewall_nat_edit.php:812 +#: usr/local/www/firewall_nat_edit.php:843 +#: usr/local/www/interfaces_bridge_edit.php:443 +#: usr/local/www/interfaces.php:1157 usr/local/www/interfaces.php:1158 +#: usr/local/www/interfaces.php:1529 usr/local/www/interfaces.php:1634 +#: usr/local/www/firewall_nat_edit.php:812 +#: usr/local/www/firewall_nat_edit.php:843 +#: usr/local/www/diag_system_pftop.php:155 +#: usr/local/www/system_advanced_misc.php:445 +#: usr/local/www/interfaces_bridge_edit.php:443 +#: usr/local/www/vpn_ipsec_phase2.php:584 usr/local/www/interfaces.php:1157 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1529 +#: usr/local/www/interfaces.php:1634 etc/inc/ipsec.inc:292 +msgid "None" +msgstr "ãªã—" + +#: etc/inc/meta.inc:68 etc/inc/meta.inc:68 +#, php-format +msgid "list_phpfiles: unable to examine path %s\n" +msgstr "list_phpfiles :パス%s\nを調ã¹ã‚‹ã“ã¨ãŒã§ããªã„" + +#: etc/inc/meta.inc:99 etc/inc/meta.inc:99 +#, php-format +msgid "unable to read %s\n" +msgstr "%s\nを読ã¿å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" + +#: etc/inc/meta.inc:132 etc/inc/meta.inc:132 +#, php-format +msgid "error: tag mismatch ( %1$s != %2$s ) in '%3$s'%4$s" +msgstr "エラー:' %3$s' ï¼… 4 $ s内ã®ã‚¿ã‚°ãŒä¸€è‡´ã—ã¾ã›ã‚“(ã¯%1$sã® = %2$s ï¼ï¼‰" + +#: etc/inc/meta.inc:143 etc/inc/meta.inc:143 +#, php-format +msgid "warning: tag %1$s has no data in '%2$s'%3$s" +msgstr "警告:タグã¯%1$sã¯ã€Œ %2$s' %3$s内ã®ãƒ‡ãƒ¼ã‚¿ãŒã‚りã¾ã›ã‚“" + +#: etc/inc/meta.inc:163 etc/inc/meta.inc:163 +#, php-format +msgid "warning: tag %1$s has malformed data in '%2$s'%3$s" +msgstr "警告:タグã¯%1$sã¯ã€Œ %2$s' %3$s内ã®ãƒ‡ãƒ¼ã‚¿ã‚’䏿­£ãªå½¢å¼ã—ã¦ã„ã‚‹" + +#: etc/inc/meta.inc:185 etc/inc/meta.inc:185 +#, php-format +msgid "warning: tag %1$s has invalid data in '%2$s'%3$s" +msgstr "警告:タグã¯%1$sã¯ã€Œ %2$s' %3$sã«ç„¡åйãªãƒ‡ãƒ¼ã‚¿ã‚’æŒã£ã¦ã„ã‚‹" + +#: etc/inc/priv.defs.inc:10 etc/inc/priv.defs.inc:10 +msgid "WebCfg - All pages" +msgstr "WebCfg - 全ページ" + +#: etc/inc/priv.defs.inc:11 etc/inc/priv.defs.inc:11 +msgid "Allow access to all pages" +msgstr "ã™ã¹ã¦ã®ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯" + +#: etc/inc/priv.defs.inc:16 etc/inc/priv.defs.inc:16 +msgid "WebCfg - Status: CARP page" +msgstr "WebCfg - ステータス: CARPページ" + +#: etc/inc/priv.defs.inc:17 etc/inc/priv.defs.inc:17 +msgid "Allow access to the 'Status: CARP' page." +msgstr "ページ: 「 CARP状æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:22 etc/inc/priv.defs.inc:22 +msgid "WebCfg - Crash reporter" +msgstr "WebCfg - クラッシュレãƒãƒ¼ã‚¿" + +#: etc/inc/priv.defs.inc:23 etc/inc/priv.defs.inc:23 +msgid "Uploads crash reports to pfSense and or deletes crash reports." +msgstr "pfSenseã¨ORã¸ã®ã‚¢ãƒƒãƒ—ロードã®ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãƒ¬ãƒãƒ¼ãƒˆã‚’削除ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:28 etc/inc/priv.defs.inc:28 +msgid "WebCfg - Diagnostics: ARP Table page" +msgstr "WebCfg - 診断: ARPテーブルページ" + +#: etc/inc/priv.defs.inc:29 etc/inc/priv.defs.inc:29 +msgid "Allow access to the 'Diagnostics: ARP Table' page." +msgstr "ページ: 「 ARPテーブル診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:34 etc/inc/priv.defs.inc:34 +msgid "WebCfg - Diagnostics: Authentication page" +msgstr "WebCfg - 診断:èªè¨¼ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:35 etc/inc/priv.defs.inc:35 +msgid "Allow access to the 'Diagnostics: Authentication' page." +msgstr "ページ:'èªè¨¼è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:40 etc/inc/priv.defs.inc:40 +msgid "WebCfg - Diagnostics: Backup/restore page" +msgstr "WebCfg - 診断:ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—/ページを復元ã™ã‚‹" + +#: etc/inc/priv.defs.inc:41 etc/inc/priv.defs.inc:41 +msgid "Allow access to the 'Diagnostics: Backup/restore' page." +msgstr "ページ: 「ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—/リストア診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:46 etc/inc/priv.defs.inc:46 +msgid "WebCfg - Diagnostics: Configuration History page" +msgstr "WebCfg - 診断:構æˆå±¥æ­´ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:47 etc/inc/priv.defs.inc:47 +msgid "Allow access to the 'Diagnostics: Configuration History' page." +msgstr "ページ: 「設定履歴診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:52 etc/inc/priv.defs.inc:52 +msgid "WebCfg - Diagnostics: Factory defaults page" +msgstr "WebCfg - è¨ºæ–­ï¼šå·¥å ´å‡ºè·æ™‚ã®ãƒ‡ãƒ•ォルト設定ページ" + +#: etc/inc/priv.defs.inc:53 etc/inc/priv.defs.inc:53 +msgid "Allow access to the 'Diagnostics: Factory defaults' page." +msgstr "ページ: ã€Œå·¥å ´å‡ºè·æ™‚ã®ãƒ‡ãƒ•ォルト値診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:58 etc/inc/priv.defs.inc:58 +msgid "WebCfg - Diagnostics: Show States page" +msgstr "WebCfg - 診断:表示状態ページ" + +#: etc/inc/priv.defs.inc:59 etc/inc/priv.defs.inc:59 +msgid "Allow access to the 'Diagnostics: Show States' page." +msgstr "' :表示状態ã®è¨ºæ–­ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:64 etc/inc/priv.defs.inc:70 etc/inc/priv.defs.inc:70 +msgid "WebCfg - Status: IPsec page" +msgstr "WebCfg - ステータス: IPsecã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:65 etc/inc/priv.defs.inc:71 etc/inc/priv.defs.inc:71 +msgid "Allow access to the 'Status: IPsec' page." +msgstr "ページ: 「 IPsecã®çжæ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:70 etc/inc/priv.defs.inc:76 etc/inc/priv.defs.inc:76 +msgid "WebCfg - Status: IPsec: SAD page" +msgstr "WebCfg - ステータス: IPsecã®ï¼š SADページ" + +#: etc/inc/priv.defs.inc:71 etc/inc/priv.defs.inc:77 etc/inc/priv.defs.inc:77 +msgid "Allow access to the 'Status: IPsec: SAD' page." +msgstr "ページ': IPsecã®SAD状æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:76 etc/inc/priv.defs.inc:82 etc/inc/priv.defs.inc:82 +msgid "WebCfg - Status: IPsec: SPD page" +msgstr "WebCfg - ステータス: IPsecã®ï¼š SPDページ" + +#: etc/inc/priv.defs.inc:77 etc/inc/priv.defs.inc:83 etc/inc/priv.defs.inc:83 +msgid "Allow access to the 'Status: IPsec: SPD' page." +msgstr "ページ': IPsecã®SPDステータス'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:82 etc/inc/priv.defs.inc:88 etc/inc/priv.defs.inc:88 +msgid "WebCfg - Diag IPsec XML page" +msgstr "WebCfg - ダイアグã®IPsec XMLページ" + +#: etc/inc/priv.defs.inc:83 etc/inc/priv.defs.inc:89 etc/inc/priv.defs.inc:89 +msgid "Allow access to the 'Diag IPsec XML' page." +msgstr "「ダイアグã®IPsec XML ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:88 etc/inc/priv.defs.inc:184 +#: etc/inc/priv.defs.inc:220 etc/inc/priv.defs.inc:226 +#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:238 +#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:94 +#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:250 +#: etc/inc/priv.defs.inc:94 etc/inc/priv.defs.inc:208 +#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:250 +msgid "WebCfg - Diagnostics: System Activity" +msgstr "WebCfg - 診断:システムアクティビティ" + +#: etc/inc/priv.defs.inc:89 etc/inc/priv.defs.inc:185 +#: etc/inc/priv.defs.inc:221 etc/inc/priv.defs.inc:227 +#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:239 +#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:95 +#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:251 +#: etc/inc/priv.defs.inc:95 etc/inc/priv.defs.inc:209 +#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:251 +msgid "Allows access to the 'Diagnostics: System Activity' page" +msgstr "ã“ã¨ãŒã§ãã¾ã™'診断:システム動作'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:94 etc/inc/priv.defs.inc:100 +#: etc/inc/priv.defs.inc:100 +msgid "WebCfg - Diagnostics: Logs: System page" +msgstr "WebCfg - 診断:ログ: Systemページ" + +#: etc/inc/priv.defs.inc:95 etc/inc/priv.defs.inc:101 +#: etc/inc/priv.defs.inc:101 +msgid "Allow access to the 'Diagnostics: Logs: System' page." +msgstr "ページ':ログシステム診断プログラムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:100 etc/inc/priv.defs.inc:106 +#: etc/inc/priv.defs.inc:106 +msgid "WebCfg - Status: System logs: Portal Auth page" +msgstr "WebCfg - ステータス:システムログ:ãƒãƒ¼ã‚¿ãƒ«èªè¨¼ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:101 etc/inc/priv.defs.inc:107 +#: etc/inc/priv.defs.inc:107 +msgid "Allow access to the 'Status: System logs: Portal Auth' page." +msgstr "ページ':システムログãƒãƒ¼ã‚¿ãƒ«èªè¨¼ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:106 etc/inc/priv.defs.inc:112 +#: etc/inc/priv.defs.inc:112 +msgid "WebCfg - Diagnostics: Logs: DHCP page" +msgstr "WebCfg - 診断:ログ: DHCPページ" + +#: etc/inc/priv.defs.inc:107 etc/inc/priv.defs.inc:113 +#: etc/inc/priv.defs.inc:113 +msgid "Allow access to the 'Diagnostics: Logs: DHCP' page." +msgstr "ページ':ログDHCPã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:112 etc/inc/priv.defs.inc:118 +#: etc/inc/priv.defs.inc:118 +msgid "WebCfg - Diagnostics: Logs: Firewall page" +msgstr "WebCfg - 診断:ログ:ファイアウォールã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:113 etc/inc/priv.defs.inc:119 +#: etc/inc/priv.defs.inc:119 +msgid "Allow access to the 'Diagnostics: Logs: Firewall' page." +msgstr "ページ':ログファイアウォール診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:136 +#: etc/inc/priv.defs.inc:142 etc/inc/priv.defs.inc:142 +msgid "WebCfg - Hidden: No longer included page" +msgstr "WebCfg - éžè¡¨ç¤ºï¼šã‚‚ã†å«ã¾ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:137 +#: etc/inc/priv.defs.inc:143 etc/inc/priv.defs.inc:143 +msgid "Allow access to the 'Hidden: No longer included' page." +msgstr "ページ:'ã¯ã‚‚ã¯ã‚„å«ã¾ã‚Œã¦éš ã•れãŸ'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:142 +#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:148 +#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:148 +#: etc/inc/priv.defs.inc:166 +msgid "WebCfg - Status: System logs: IPsec VPN page" +msgstr "WebCfg - ステータス:システムログ: IPsec VPNã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:143 +#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:149 +#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:149 +#: etc/inc/priv.defs.inc:167 +msgid "Allow access to the 'Status: System logs: IPsec VPN' page." +msgstr "ページ':システムログã®IPsec VPNã®çжæ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:130 +msgid "WebCfg - Status: System logs: OpenNTPD page" +msgstr "WebCfg - ステータス:システムログ: OpenNTPDページ" + +#: etc/inc/priv.defs.inc:131 +msgid "Allow access to the 'Status: System logs: OpenNTPD' page." +msgstr "ページ':システムログOpenNTPD状æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:136 etc/inc/priv.defs.inc:154 +#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:160 +msgid "WebCfg - Status: System logs: OpenVPN page" +msgstr "WebCfg - ステータス:システムログ: OpenVPNã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:137 etc/inc/priv.defs.inc:155 +#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:161 +msgid "Allow access to the 'Status: System logs: OpenVPN' page." +msgstr "ページ':システムログOpenVPNã®çжæ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:166 +#: etc/inc/priv.defs.inc:172 etc/inc/priv.defs.inc:172 +msgid "WebCfg - Status: System logs: Load Balancer page" +msgstr "WebCfg - ステータス:システムログ:ロードãƒãƒ©ãƒ³ã‚µãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:167 +#: etc/inc/priv.defs.inc:173 etc/inc/priv.defs.inc:173 +msgid "Allow access to the 'Status: System logs: Load Balancer' page." +msgstr "ページ':システムログã¯ã€Load Balancerã®çŠ¶æ…‹ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:154 etc/inc/priv.defs.inc:172 +#: etc/inc/priv.defs.inc:178 etc/inc/priv.defs.inc:178 +msgid "WebCfg - Diagnostics: Logs: Settings page" +msgstr "WebCfg - 診断:ログ:((設定))ページ" + +#: etc/inc/priv.defs.inc:155 etc/inc/priv.defs.inc:173 +#: etc/inc/priv.defs.inc:179 etc/inc/priv.defs.inc:179 +msgid "Allow access to the 'Diagnostics: Logs: Settings' page." +msgstr "ページ':ログ設定ã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:178 +#: etc/inc/priv.defs.inc:184 etc/inc/priv.defs.inc:184 +msgid "WebCfg - Diagnostics: Logs: VPN page" +msgstr "WebCfg - 診断:ログ: VPNã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:179 +#: etc/inc/priv.defs.inc:185 etc/inc/priv.defs.inc:185 +msgid "Allow access to the 'Diagnostics: Logs: VPN' page." +msgstr "ページ':ログVPNã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:184 +#: etc/inc/priv.defs.inc:190 etc/inc/priv.defs.inc:190 +msgid "WebCfg - Diagnostics: NanoBSD" +msgstr "WebCfg - 診断: NanoBSDã®" + +#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:185 +#: etc/inc/priv.defs.inc:191 etc/inc/priv.defs.inc:191 +msgid "Allow access to the 'Diagnostics: NanoBSD' page." +msgstr "ページ:' NanoBSDã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:172 etc/inc/priv.defs.inc:190 +#: etc/inc/priv.defs.inc:196 etc/inc/priv.defs.inc:196 +msgid "WebCfg - Diagnostics: Packet Capture page" +msgstr "WebCfg - 診断:パケットキャプãƒãƒ£ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:173 etc/inc/priv.defs.inc:191 +#: etc/inc/priv.defs.inc:197 etc/inc/priv.defs.inc:197 +msgid "Allow access to the 'Diagnostics: Packet Capture' page." +msgstr "ページ: 「パケットキャプãƒãƒ£è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:178 etc/inc/priv.defs.inc:196 +#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:202 +msgid "WebCfg - Diagnostics: Patterns page" +msgstr "WebCfg - 診断:パターンページ" + +#: etc/inc/priv.defs.inc:179 etc/inc/priv.defs.inc:197 +#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:203 +msgid "Allow access to the 'Diagnostics: Patterns' page." +msgstr "ページ:'パターン診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:190 etc/inc/priv.defs.inc:208 +#: etc/inc/priv.defs.inc:214 etc/inc/priv.defs.inc:214 +msgid "WebCfg - Diagnostics: Ping page" +msgstr "WebCfg - 診断: Pingã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:191 etc/inc/priv.defs.inc:209 +#: etc/inc/priv.defs.inc:215 etc/inc/priv.defs.inc:215 +msgid "Allow access to the 'Diagnostics: Ping' page." +msgstr "ページ:' Pingã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:196 etc/inc/priv.defs.inc:214 +#: etc/inc/priv.defs.inc:220 etc/inc/priv.defs.inc:220 +msgid "WebCfg - Status: Package logs page" +msgstr "WebCfg - ステータス:パッケージログページ" + +#: etc/inc/priv.defs.inc:197 etc/inc/priv.defs.inc:215 +#: etc/inc/priv.defs.inc:221 etc/inc/priv.defs.inc:221 +msgid "Allow access to the 'Status: Package logs' page." +msgstr "ページ:'パッケージログステータスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:220 +#: etc/inc/priv.defs.inc:226 etc/inc/priv.defs.inc:226 +msgid "WebCfg - Diagnostics: Reset state page" +msgstr "WebCfg - 診断:状態ページをリセット" + +#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:221 +#: etc/inc/priv.defs.inc:227 etc/inc/priv.defs.inc:227 +msgid "Allow access to the 'Diagnostics: Reset state' page." +msgstr "ページ: 「リセット状態診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:226 +#: etc/inc/priv.defs.inc:232 etc/inc/priv.defs.inc:232 +msgid "WebCfg - Diagnostics: Routing tables page" +msgstr "WebCfg - 診断:ルーティングテーブルページ" + +#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:227 +#: etc/inc/priv.defs.inc:233 etc/inc/priv.defs.inc:233 +msgid "Allow access to the 'Diagnostics: Routing tables' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€Œè¨ºæ–­ï¼šãƒ†ãƒ¼ãƒ–ルルーティングã€ãƒšãƒ¼ã‚¸ã‚’。" + +#: etc/inc/priv.defs.inc:214 etc/inc/priv.defs.inc:232 +#: etc/inc/priv.defs.inc:238 etc/inc/priv.defs.inc:238 +msgid "WebCfg - Diagnostics: States Summary page" +msgstr "WebCfg - è¨ºæ–­ï¼šç±³å›½ã®æ¦‚è¦))ページ" + +#: etc/inc/priv.defs.inc:215 etc/inc/priv.defs.inc:233 +#: etc/inc/priv.defs.inc:239 etc/inc/priv.defs.inc:239 +msgid "Allow access to the 'Diagnostics: States Summary' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€Œè¨ºæ–­ï¼šç±³å›½æ¦‚ç•¥))ページ。" + +#: etc/inc/priv.defs.inc:232 etc/inc/priv.defs.inc:250 +#: etc/inc/priv.defs.inc:256 etc/inc/priv.defs.inc:256 +msgid "WebCfg - Diagnostics: PF Table IP addresses" +msgstr "WebCfg - 診断:PF表ã®IPアドレス" + +#: etc/inc/priv.defs.inc:233 etc/inc/priv.defs.inc:251 +#: etc/inc/priv.defs.inc:257 etc/inc/priv.defs.inc:257 +msgid "Allow access to the 'Diagnostics: Tables' page." +msgstr "ページ:「表ã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:238 etc/inc/priv.defs.inc:256 +#: etc/inc/priv.defs.inc:262 etc/inc/priv.defs.inc:262 +msgid "WebCfg - Diagnostics: Traceroute page" +msgstr "WebCfg - 診断:tracerouteã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:239 etc/inc/priv.defs.inc:257 +#: etc/inc/priv.defs.inc:263 etc/inc/priv.defs.inc:263 +msgid "Allow access to the 'Diagnostics: Traceroute' page." +msgstr "ページ:「トレースルート診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:262 +#: etc/inc/priv.defs.inc:268 etc/inc/priv.defs.inc:268 +msgid "WebCfg - Diagnostics: Edit FIle" +msgstr "WebCfg - 診断:編集ファイル" + +#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:263 +#: etc/inc/priv.defs.inc:269 etc/inc/priv.defs.inc:269 +msgid "Allow access to the 'Diagnostics: Edit File' page." +msgstr "ページ:'ファイルã®ç·¨é›†è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:250 etc/inc/priv.defs.inc:268 +#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:276 +#: etc/inc/priv.defs.inc:276 +msgid "WebCfg - Diagnostics: Command page" +msgstr "WebCfg - 診断:コマンドã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:251 etc/inc/priv.defs.inc:269 +#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:277 +#: etc/inc/priv.defs.inc:277 +msgid "Allow access to the 'Diagnostics: Command' page." +msgstr "ページ:'コマンド診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:256 etc/inc/priv.defs.inc:274 +#: etc/inc/priv.defs.inc:280 +msgid "WebCfg - Hidden: Exec Raw page" +msgstr "WebCfg - éžè¡¨ç¤ºï¼š Execã®ç”Ÿã®ãƒšãƒ¼ã‚¸ãŒ" + +#: etc/inc/priv.defs.inc:257 etc/inc/priv.defs.inc:275 +#: etc/inc/priv.defs.inc:281 +msgid "Allow access to the 'Hidden: Exec Raw' page." +msgstr "ページ:' Execã®ç”Ÿã®éš ã‚ŒãŸã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:262 etc/inc/priv.defs.inc:280 +#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:282 +#: etc/inc/priv.defs.inc:282 +msgid "WebCfg - Firewall: Aliases page" +msgstr "WebCfg - ファイアウォール:エイリアスページ" + +#: etc/inc/priv.defs.inc:263 etc/inc/priv.defs.inc:281 +#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:283 +#: etc/inc/priv.defs.inc:283 +msgid "Allow access to the 'Firewall: Aliases' page." +msgstr "ページ: 「エイリアスファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:268 etc/inc/priv.defs.inc:286 +#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:288 +#: etc/inc/priv.defs.inc:288 +msgid "WebCfg - Firewall: Alias: Edit page" +msgstr "WebCfg - ファイアウォール:別å: Editページ" + +#: etc/inc/priv.defs.inc:269 etc/inc/priv.defs.inc:287 +#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:289 +#: etc/inc/priv.defs.inc:289 +msgid "Allow access to the 'Firewall: Alias: Edit' page." +msgstr "ページ':エイリアスã®ç·¨é›†ãƒ•ァイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:292 +#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:294 +#: etc/inc/priv.defs.inc:294 +msgid "WebCfg - Firewall: Alias: Import page" +msgstr "WebCfg - ファイアウォール:別å: Importページ" + +#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:293 +#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:295 +#: etc/inc/priv.defs.inc:295 +msgid "Allow access to the 'Firewall: Alias: Import' page." +msgstr "' :別å:輸入ファイアウォールã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:280 etc/inc/priv.defs.inc:298 +#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:300 +#: etc/inc/priv.defs.inc:300 +msgid "WebCfg - Firewall: NAT: Port Forward page" +msgstr "WebCfg - ファイアウォール: NAT :ãƒãƒ¼ãƒˆãƒ•ォワードページ" + +#: etc/inc/priv.defs.inc:281 etc/inc/priv.defs.inc:299 +#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:301 +#: etc/inc/priv.defs.inc:301 +msgid "Allow access to the 'Firewall: NAT: Port Forward' page." +msgstr "ページ': NATã®ãƒãƒ¼ãƒˆãƒ•ォワードファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:304 +#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:306 +#: etc/inc/priv.defs.inc:306 +msgid "WebCfg - Firewall: NAT: 1:1 page" +msgstr "WebCfg - ファイアウォール: NATã®1:1ページ" + +#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:305 +#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:307 +#: etc/inc/priv.defs.inc:307 +msgid "Allow access to the 'Firewall: NAT: 1:1' page." +msgstr "ページ': NATã®åˆå‰1時01ファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:310 +#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:312 +#: etc/inc/priv.defs.inc:312 +msgid "WebCfg - Firewall: NAT: 1:1: Edit page" +msgstr "WebCfg - ファイアウォール: NAT : 1時01分: Editページ" + +#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:311 +#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:313 +#: etc/inc/priv.defs.inc:313 +msgid "Allow access to the 'Firewall: NAT: 1:1: Edit' page." +msgstr "' : NAT :åˆå‰1時01分:編集ファイアウォールã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:316 +#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:318 +#: etc/inc/priv.defs.inc:318 +msgid "WebCfg - Firewall: NAT: Port Forward: Edit page" +msgstr "WebCfg - ファイアウォール: NAT :ãƒãƒ¼ãƒˆãƒ•ォワード: Editページ" + +#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:317 +#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:319 +#: etc/inc/priv.defs.inc:319 +msgid "Allow access to the 'Firewall: NAT: Port Forward: Edit' page." +msgstr "ページ' : NAT :ãƒãƒ¼ãƒˆãƒ•ォワード編集ファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:322 +#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:324 +#: etc/inc/priv.defs.inc:324 +msgid "WebCfg - Firewall: NAT: Outbound page" +msgstr "WebCfg - ファイアウォール: NAT :発信ページ" + +#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:323 +#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:325 +#: etc/inc/priv.defs.inc:325 +msgid "Allow access to the 'Firewall: NAT: Outbound' page." +msgstr "ページ': NATã®ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰ãƒ•ァイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:328 +#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:330 +#: etc/inc/priv.defs.inc:330 +msgid "WebCfg - Firewall: NAT: Outbound: Edit page" +msgstr "WebCfg - ファイアウォール: NAT :é€ä¿¡ï¼š Editページ" + +#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:329 +#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:331 +#: etc/inc/priv.defs.inc:331 +msgid "Allow access to the 'Firewall: NAT: Outbound: Edit' page." +msgstr "ページ' : NAT :アウトãƒã‚¦ãƒ³ãƒ‰ç·¨é›†ãƒ•ァイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:334 +#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:336 +#: etc/inc/priv.defs.inc:336 +msgid "WebCfg - Firewall: Rules page" +msgstr "WebCfg - ファイアウォール:ルールページ" + +#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:335 +#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:337 +#: etc/inc/priv.defs.inc:337 +msgid "Allow access to the 'Firewall: Rules' page." +msgstr "' :ルールファイアウォールã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:340 +#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:342 +#: etc/inc/priv.defs.inc:342 +msgid "WebCfg - Firewall: Rules: Edit page" +msgstr "WebCfg - ファイアウォール:ルール: Editページ" + +#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:341 +#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:343 +#: etc/inc/priv.defs.inc:343 +msgid "Allow access to the 'Firewall: Rules: Edit' page." +msgstr "ページ':ルールã®ç·¨é›†ãƒ•ァイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:346 +#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:348 +#: etc/inc/priv.defs.inc:348 +msgid "WebCfg - Firewall: Schedules page" +msgstr "WebCfg - ファイアウォール:スケジュール·ページ" + +#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:347 +#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:349 +#: etc/inc/priv.defs.inc:349 +msgid "Allow access to the 'Firewall: Schedules' page." +msgstr "ページ: 「スケジュールファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:352 +#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:354 +#: etc/inc/priv.defs.inc:354 +msgid "WebCfg - Firewall: Schedules: Edit page" +msgstr "WebCfg - ファイアウォール:スケジュール: Editページ" + +#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:353 +#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:355 +#: etc/inc/priv.defs.inc:355 +msgid "Allow access to the 'Firewall: Schedules: Edit' page." +msgstr "ページ':スケジュールを編集ファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:358 +#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:360 +#: etc/inc/priv.defs.inc:360 +msgid "WebCfg - Firewall: Traffic Shaper page" +msgstr "WebCfg - ファイアウォール:トラフィックシェイパーページ" + +#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:359 +#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:361 +#: etc/inc/priv.defs.inc:361 +msgid "Allow access to the 'Firewall: Traffic Shaper' page." +msgstr "ページ: 「トラフィック·シェイパーファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:364 +#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:366 +#: etc/inc/priv.defs.inc:366 +msgid "WebCfg - Firewall: Traffic Shaper: Layer7 page" +msgstr "WebCfg - ファイアウォール:トラフィックシェイパー:レイヤ7ページ" + +#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:365 +#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:367 +#: etc/inc/priv.defs.inc:367 +msgid "Allow access to the 'Firewall: Traffic Shaper: Layer7' page." +msgstr "ページ': Traffic Shaperã¯ãƒ¬ã‚¤ãƒ¤7ファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:370 +#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:372 +#: etc/inc/priv.defs.inc:372 +msgid "WebCfg - Firewall: Traffic Shaper: Queues page" +msgstr "WebCfg - ファイアウォール:トラフィックシェイパー:キューページ" + +#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:371 +#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:373 +#: etc/inc/priv.defs.inc:373 +msgid "Allow access to the 'Firewall: Traffic Shaper: Queues' page." +msgstr "ページ': Traffic Shaperã¯ã‚­ãƒ¥ãƒ¼ãƒ•ァイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:376 +#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:378 +#: etc/inc/priv.defs.inc:378 +msgid "WebCfg - Firewall: Traffic Shaper: Limiter page" +msgstr "WebCfg - ファイアウォール:トラフィックシェイパー:リミッターページ" + +#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:377 +#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:379 +#: etc/inc/priv.defs.inc:379 +msgid "Allow access to the 'Firewall: Traffic Shaper: Limiter' page." +msgstr "ページ': Traffic Shaperã¯ãƒªãƒŸãƒƒã‚¿ãƒ¼ãƒ•ァイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:382 +#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:384 +#: etc/inc/priv.defs.inc:384 +msgid "WebCfg - Firewall: Traffic Shaper: Wizard page" +msgstr "WebCfg - ファイアウォール:トラフィックシェイパー:ウィザードã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:383 +#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:385 +#: etc/inc/priv.defs.inc:385 +msgid "Allow access to the 'Firewall: Traffic Shaper: Wizard' page." +msgstr "ページ': Traffic Shaperã¯ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ãƒ•ァイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:388 +#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:390 +#: etc/inc/priv.defs.inc:390 +msgid "WebCfg - Firewall: Virtual IP Addresses page" +msgstr "WebCfg - ファイアウォール:仮想IPアドレス))ページ" + +#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:389 +#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:391 +#: etc/inc/priv.defs.inc:391 +msgid "Allow access to the 'Firewall: Virtual IP Addresses' page." +msgstr "ページ:「仮想IPアドレスファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:394 +#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:396 +#: etc/inc/priv.defs.inc:396 +msgid "WebCfg - Firewall: Virtual IP Address: Edit page" +msgstr "WebCfg - ファイアウォール:仮想IPアドレス:Editページ" + +#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:395 +#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:397 +#: etc/inc/priv.defs.inc:397 +msgid "Allow access to the 'Firewall: Virtual IP Address: Edit' page." +msgstr "ページ':仮想IPアドレスを編集ファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:400 +#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:402 +#: etc/inc/priv.defs.inc:402 +msgid "WebCfg - AJAX: Get Service Providers" +msgstr "WebCfg - AJAX:サービスプロãƒã‚¤ãƒ€ã‚’å–å¾—ã™ã‚‹" + +#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:401 +#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:403 +#: etc/inc/priv.defs.inc:403 +msgid "Allow access to the 'AJAX: Service Providers' page." +msgstr "ページ:「サービスプロãƒã‚¤ãƒ€AJAXã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:406 +#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:408 +#: etc/inc/priv.defs.inc:408 +msgid "WebCfg - AJAX: Get Stats" +msgstr "WebCfg - AJAX:ゲット統計" + +#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:407 +#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:409 +#: etc/inc/priv.defs.inc:409 +msgid "Allow access to the 'AJAX: Get Stats' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚ページ'ã€Ajaxを統計å–å¾—))を。" + +#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:412 +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:414 +#: etc/inc/priv.defs.inc:414 +msgid "WebCfg - Diagnostics: Interface Traffic page" +msgstr "WebCfg - 診断:インターフェイストラフィックページ" + +#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:413 +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:415 +#: etc/inc/priv.defs.inc:415 +msgid "Allow access to the 'Diagnostics: Interface Traffic' page." +msgstr "ページ:「インターフェーストラフィック診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:814 +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:832 +#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:838 +#: etc/inc/priv.defs.inc:420 etc/inc/priv.defs.inc:846 +#: etc/inc/priv.defs.inc:420 etc/inc/priv.defs.inc:846 +msgid "WebCfg - Diagnostics: CPU Utilization page" +msgstr "WebCfg - 診断:CPU使用率ページ" + +#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:815 +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:833 +#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:839 +#: etc/inc/priv.defs.inc:421 etc/inc/priv.defs.inc:847 +#: etc/inc/priv.defs.inc:421 etc/inc/priv.defs.inc:847 +msgid "Allow access to the 'Diagnostics: CPU Utilization' page." +msgstr "ページ:「CPU使用率ã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:424 +#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:426 +#: etc/inc/priv.defs.inc:426 +msgid "WebCfg - Diagnostics: Halt system page" +msgstr "WebCfg - è¨ºæ–­ï¼šåœæ­¢ã‚·ã‚¹ãƒ†ãƒ ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:425 +#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:427 +#: etc/inc/priv.defs.inc:427 +msgid "Allow access to the 'Diagnostics: Halt system' page." +msgstr "ページ:'ホルトシステム診断プログラムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:430 +#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:432 +#: etc/inc/priv.defs.inc:432 +msgid "WebCfg - Required for javascript page" +msgstr "WebCfg - javascriptã®ãƒšãƒ¼ã‚¸ã«å¿…è¦ãª" + +#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:431 +#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:433 +#: etc/inc/priv.defs.inc:433 +msgid "Allow access to the 'Required for javascript' page." +msgstr "「 JavaScriptãŒå¿…è¦ã§ã™ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:436 +#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:438 +#: etc/inc/priv.defs.inc:438 +msgid "WebCfg - XMLRPC Interface Stats page" +msgstr "WebCfg - XMLRPCインタフェース統計ページ" + +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:437 +#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:439 +#: etc/inc/priv.defs.inc:439 +msgid "Allow access to the 'XMLRPC Interface Stats' page." +msgstr "' XMLRPCインタフェース統計ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:442 +#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:444 +#: etc/inc/priv.defs.inc:444 +msgid "WebCfg - System: Login / Logout page / Dashboard" +msgstr "WebCfg - システム:ログイン/ログアウトページ/ダッシュボード" + +#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:443 +#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:445 +#: etc/inc/priv.defs.inc:445 +msgid "Allow access to the 'System: Login / Logout' page and Dashboard." +msgstr "ページã¨ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰ï¼š'ログイン/ログアウトシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:448 +#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:450 +#: etc/inc/priv.defs.inc:450 +msgid "WebCfg - Interfaces: WAN page" +msgstr "WebCfg - インターフェース: WANã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:449 +#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:451 +#: etc/inc/priv.defs.inc:451 +msgid "Allow access to the 'Interfaces' page." +msgstr "'インタフェース'ページã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:454 +#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:456 +#: etc/inc/priv.defs.inc:456 +msgid "WebCfg - Interfaces: Assign network ports page" +msgstr "WebCfg - インターフェース:ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒˆã®ãƒšãƒ¼ã‚¸ã‚’割り当ã¦" + +#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:455 +#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:457 +#: etc/inc/priv.defs.inc:457 +msgid "Allow access to the 'Interfaces: Assign network ports' page." +msgstr "ページ:'割り当ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒˆã‚¤ãƒ³ã‚¿ãƒ•ェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:460 +#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:462 +#: etc/inc/priv.defs.inc:462 +msgid "WebCfg - Interfaces: Bridge page" +msgstr "WebCfg - インターフェース:ブリッジページ" + +#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:461 +#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:463 +#: etc/inc/priv.defs.inc:463 +msgid "Allow access to the 'Interfaces: Bridge' page." +msgstr "ページ: 「ブリッジ·インタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:466 +#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:468 +#: etc/inc/priv.defs.inc:468 +msgid "WebCfg - Interfaces: Bridge edit page" +msgstr "WebCfg - インターフェース:ブリッジEditページ" + +#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:467 +#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:469 +#: etc/inc/priv.defs.inc:469 +msgid "Allow access to the 'Interfaces: Bridge : Edit' page." +msgstr "ページ':橋編集インタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:472 +#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:474 +#: etc/inc/priv.defs.inc:474 +msgid "WebCfg - Interfaces: GIF page" +msgstr "WebCfg - インターフェース: GIFページ" + +#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:473 +#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:475 +#: etc/inc/priv.defs.inc:475 +msgid "Allow access to the 'Interfaces: GIF' page." +msgstr "ページ:' GIFインタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:478 +#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:480 +#: etc/inc/priv.defs.inc:480 +msgid "WebCfg - Interfaces: GIF: Edit page" +msgstr "WebCfg - インターフェース: GIF : Editページ" + +#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:479 +#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:481 +#: etc/inc/priv.defs.inc:481 +msgid "Allow access to the 'Interfaces: GIF: Edit' page." +msgstr "ページ': GIF編集インタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:484 +#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:486 +#: etc/inc/priv.defs.inc:486 +msgid "WebCfg - Interfaces: GRE page" +msgstr "WebCfg - インターフェース: GREã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:485 +#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:487 +#: etc/inc/priv.defs.inc:487 +msgid "Allow access to the 'Interfaces: GRE' page." +msgstr "ページ: 「 GREインタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:490 +#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:492 +#: etc/inc/priv.defs.inc:492 +msgid "WebCfg - Interfaces: GRE: Edit page" +msgstr "WebCfg - インターフェース: GRE : Editページ" + +#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:491 +#: etc/inc/priv.defs.inc:497 etc/inc/priv.defs.inc:493 +#: etc/inc/priv.defs.inc:493 +msgid "Allow access to the 'Interfaces: GRE: Edit' page." +msgstr "ページ': GRE編集インタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:496 +#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:498 +#: etc/inc/priv.defs.inc:498 +msgid "WebCfg - Interfaces: Groups page" +msgstr "WebCfg - インターフェース:グループ))ページ" + +#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:497 +#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:499 +#: etc/inc/priv.defs.inc:499 +msgid "Create interface groups" +msgstr "インタフェースグループを作æˆã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:502 +#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:504 +#: etc/inc/priv.defs.inc:504 +msgid "WebCfg - Interfaces: Groups: Edit page" +msgstr "WebCfg - インターフェース:グループ:Editページ" + +#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:503 +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:505 +#: etc/inc/priv.defs.inc:505 +msgid "Edit Interface groups" +msgstr "インターフェースã®ç·¨é›†ã‚°ãƒ«ãƒ¼ãƒ—" + +#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:508 +#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:510 +#: etc/inc/priv.defs.inc:510 +msgid "WebCfg - Interfaces: LAGG: page" +msgstr "WebCfg - インターフェース:LAGG:ページ" + +#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:497 +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:515 +#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:511 +#: etc/inc/priv.defs.inc:517 etc/inc/priv.defs.inc:511 +#: etc/inc/priv.defs.inc:517 +msgid "Edit Interface LAGG" +msgstr "インターフェースã®ç·¨é›†LAGG" + +#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:514 +#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:516 +#: etc/inc/priv.defs.inc:516 +msgid "WebCfg - Interfaces: LAGG: Edit page" +msgstr "WebCfg - インターフェース:LAGG:Editページ" + +#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:520 +#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:522 +#: etc/inc/priv.defs.inc:522 +msgid "WebCfg - Interfaces: ppps page" +msgstr "WebCfg - インターフェース:購買力平価ページ" + +#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:521 +#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:523 +#: etc/inc/priv.defs.inc:523 +msgid "Allow access to the 'Interfaces: ppps' page." +msgstr "ページ: 'ã®PPPインタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:526 +#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:528 +#: etc/inc/priv.defs.inc:528 +msgid "WebCfg - Interfaces: PPPs: Edit page" +msgstr "WebCfg - インターフェース:購買力平価:Editページ" + +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:527 +#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:529 +#: etc/inc/priv.defs.inc:529 +msgid "Allow access to the 'Interfaces: PPPs: Edit' page." +msgstr "ページ':PPPã®ç·¨é›†ã‚¤ãƒ³ã‚¿ãƒ•ェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:532 +#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:534 +#: etc/inc/priv.defs.inc:534 +msgid "WebCfg - Interfaces: QinQ page" +msgstr "WebCfg - インターフェース:QinQサブページ" + +#: etc/inc/priv.defs.inc:515 etc/inc/priv.defs.inc:533 +#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:535 +#: etc/inc/priv.defs.inc:535 +msgid "Allow access to the 'Interfaces: QinQ' page." +msgstr "ページ: 'ã®QinQインターフェイスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:538 +#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:540 +#: etc/inc/priv.defs.inc:540 +msgid "WebCfg - Interfaces: QinQ: Edit page" +msgstr "WebCfg - インターフェース:ã®QinQ:Editページ"" + +#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:539 +#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:541 +#: etc/inc/priv.defs.inc:541 +msgid "Edit Interface qinq" +msgstr "インターフェースã®ç·¨é›†ã®QinQ" + +#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:544 +#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:546 +#: etc/inc/priv.defs.inc:546 +msgid "WebCfg - Interfaces: VLAN page" +msgstr "WebCfg - インターフェース:VLANã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:545 +#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:547 +#: etc/inc/priv.defs.inc:547 +msgid "Allow access to the 'Interfaces: VLAN' page." +msgstr "Allow access to the 'Interfaces: VLAN' page." + +#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:550 +#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:552 +#: etc/inc/priv.defs.inc:552 +msgid "WebCfg - Interfaces: VLAN: Edit page" +msgstr "WebCfg - インターフェース:VLAN:Editページ" + +#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:551 +#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:553 +#: etc/inc/priv.defs.inc:553 +msgid "Allow access to the 'Interfaces: VLAN: Edit' page." +msgstr "ページ':VLANã®ç·¨é›†ã‚¤ãƒ³ã‚¿ãƒ•ェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:556 +#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:558 +#: etc/inc/priv.defs.inc:558 +msgid "WebCfg - Interfaces: Wireless page" +msgstr "WebCfg - インターフェース:ワイヤレスページ" + +#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:557 +#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:559 +#: etc/inc/priv.defs.inc:559 +msgid "Allow access to the 'Interfaces: Wireless' page." +msgstr "ページ:「ワイヤレスインターフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:562 +#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:564 +#: etc/inc/priv.defs.inc:564 +msgid "WebCfg - Interfaces: Wireless edit page" +msgstr "WebCfg - インターフェース:ワイヤレスEditページ" + +#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:563 +#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:565 +#: etc/inc/priv.defs.inc:565 +msgid "Allow access to the 'Interfaces: Wireless : Edit' page." +msgstr "ページ':ワイヤレス編集インタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:568 +#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:570 +#: etc/inc/priv.defs.inc:570 +msgid "WebCfg - System: License page" +msgstr "WebCfg - システム:ライセンスページ" + +#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:569 +#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:571 +#: etc/inc/priv.defs.inc:571 +msgid "Allow access to the 'System: License' page." +msgstr "ページ:「ライセンスシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:574 +#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:576 +#: etc/inc/priv.defs.inc:576 +msgid "WebCfg - Services: Load Balancer: Monitors page" +msgstr "WebCfg - サービス:監視))ページ:ロードãƒãƒ©ãƒ³ã‚µ" + +#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:575 +#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:577 +#: etc/inc/priv.defs.inc:577 +msgid "Allow access to the 'Services: Load Balancer: Monitors' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ¢ãƒ‹ã‚¿ãƒ¼ã®ãƒšãƒ¼ã‚¸ã‚’。" + +#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:580 +#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:582 +#: etc/inc/priv.defs.inc:582 +msgid "WebCfg - Services: Load Balancer: Monitor: Edit page" +msgstr "WebCfg - サービス:モニタ:Editページロードãƒãƒ©ãƒ³ã‚µ" + +#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:581 +#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:583 +#: etc/inc/priv.defs.inc:583 +msgid "Allow access to the 'Services: Load Balancer: Monitor: Edit' page." +msgstr "Allow access to the 'Services: Load Balancer: Monitor: Edit' page." + +#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:586 +#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:588 +#: etc/inc/priv.defs.inc:588 +msgid "WebCfg - Load Balancer: Pool page" +msgstr "WebCfg - ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ—ールページを" + +#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:587 +#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:589 +#: etc/inc/priv.defs.inc:589 +msgid "Allow access to the 'Load Balancer: Pool' page." +msgstr "ページ: 「プールã®Load Balancer ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:592 +#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:594 +#: etc/inc/priv.defs.inc:594 +msgid "WebCfg - Load Balancer: Pool: Edit page" +msgstr "WebCfg - ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ—ール:Editページ" + +#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:593 +#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:595 +#: etc/inc/priv.defs.inc:595 +msgid "Allow access to the 'Load Balancer: Pool: Edit' page." +msgstr "ページ':プールã®ç·¨é›†ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:598 +#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:600 +#: etc/inc/priv.defs.inc:600 +msgid "WebCfg - Services: Load Balancer: Relay Actions page" +msgstr "WebCfg - サービス:リレーアクション))ページ:ロードãƒãƒ©ãƒ³ã‚µ" + +#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:599 +#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:601 +#: etc/inc/priv.defs.inc:601 +msgid "Allow access to the 'Services: Load Balancer: Relay Actions' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã€ãƒšãƒ¼ã‚¸ã‚’。" + +#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:604 +#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:606 +#: etc/inc/priv.defs.inc:606 +msgid "WebCfg - Services: Load Balancer: Relay Action: Edit page" +msgstr "WebCfg - サービス:リレー動作:Editページãƒãƒ©ãƒ³ã‚µã‚’ロード" + +#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:605 +#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:607 +#: etc/inc/priv.defs.inc:607 +msgid "Allow access to the 'Services: Load Balancer: Relay Action: Edit' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ãƒšãƒ¼ã‚¸ã€ã‚µãƒ¼ãƒ“ス:リレー動作:編集ロードãƒãƒ©ãƒ³ã‚µã€ 。" + +#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:610 +#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:612 +#: etc/inc/priv.defs.inc:612 +msgid "WebCfg - Services: Load Balancer: Relay Protocols page" +msgstr "WebCfg - サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼ãƒ—ロトコル))ページを" + +#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:611 +#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:613 +#: etc/inc/priv.defs.inc:613 +msgid "Allow access to the 'Services: Load Balancer: Relay Protocols' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼Â·ãƒ—ロトコルã€ã®ãƒšãƒ¼ã‚¸ã‚’。" + +#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:616 +#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:618 +#: etc/inc/priv.defs.inc:618 +msgid "WebCfg - Services: Load Balancer: Relay Protocol: Edit page" +msgstr "WebCfg - サービス:リレープロトコル::Editページãƒãƒ©ãƒ³ã‚µã‚’ロード" + +#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:617 +#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:619 +#: etc/inc/priv.defs.inc:619 +msgid "" +"Allow access to the 'Services: Load Balancer: Relay Protocol: Edit' page." +msgstr ""ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼ãƒ—ロトコル:編集'ページ。" + +#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:622 +#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:624 +#: etc/inc/priv.defs.inc:624 +msgid "WebCfg - Services: Load Balancer: Virtual Servers page" +msgstr "WebCfg - サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šä»®æƒ³ã‚µãƒ¼ãƒãƒ¼ã®ãƒšãƒ¼ã‚¸ã‚’" + +#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:623 +#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:625 +#: etc/inc/priv.defs.inc:625 +msgid "Allow access to the 'Services: Load Balancer: Virtual Servers' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šä»®æƒ³ã‚µãƒ¼ãƒã®ãƒšãƒ¼ã‚¸ã‚’。" + +#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:628 +#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:630 +#: etc/inc/priv.defs.inc:630 +msgid "WebCfg - Load Balancer: Virtual Server: Edit page" +msgstr "WebCfg - ロード·ãƒãƒ©ãƒ³ã‚µï¼šä»®æƒ³ã‚µãƒ¼ãƒãƒ¼ï¼šEditページ" + +#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:629 +#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:631 +#: etc/inc/priv.defs.inc:631 +msgid "Allow access to the 'Load Balancer: Virtual Server: Edit' page." +msgstr "ページ':仮想サーãƒãƒ¼ã®ç·¨é›†ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:634 +#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:636 +#: etc/inc/priv.defs.inc:636 +msgid "WebCfg - Package: Settings page" +msgstr "WebCfg - パッケージ: Settingsページ" + +#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:635 +#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:637 +#: etc/inc/priv.defs.inc:637 +msgid "Allow access to the 'Package: Settings' page." +msgstr "ページ: 「設定パッケージ'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:640 +#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:642 +#: etc/inc/priv.defs.inc:642 +msgid "WebCfg - Package: Edit page" +msgstr "WebCfg - パッケージ: Editページ" + +#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:641 +#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:643 +#: etc/inc/priv.defs.inc:643 +msgid "Allow access to the 'Package: Edit' page." +msgstr "ページ: 「編集パッケージ'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:646 +#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:648 +#: etc/inc/priv.defs.inc:648 +msgid "WebCfg - System: Package Manager page" +msgstr "WebCfg - システム:パッケージマãƒãƒ¼ã‚¸ãƒ£))ページ" + +#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:647 +#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:649 +#: etc/inc/priv.defs.inc:649 +msgid "Allow access to the 'System: Package Manager' page." +msgstr "ページ:'パッケージマãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚" + +#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:652 +#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:654 +#: etc/inc/priv.defs.inc:654 +msgid "WebCfg - System: Package Manager: Install Package page" +msgstr "WebCfg - システム:パッケージマãƒãƒ¼ã‚¸ãƒ£ï¼šãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«))ページ" + +#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:653 +#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:655 +#: etc/inc/priv.defs.inc:655 +msgid "Allow access to the 'System: Package Manager: Install Package' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹' :パッケージマãƒãƒ¼ã‚¸ãƒ£ï¼šã‚·ã‚¹ãƒ†ãƒ ã®ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€ãƒšãƒ¼ã‚¸ã‚’。" + +#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:658 +#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:660 +#: etc/inc/priv.defs.inc:660 +msgid "WebCfg - System: Package Manager: Installed page" +msgstr "WebCfg - システム:パッケージマãƒãƒ¼ã‚¸ãƒ£ï¼šã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:659 +#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:661 +#: etc/inc/priv.defs.inc:661 +msgid "Allow access to the 'System: Package Manager: Installed' page." +msgstr "ページ':パッケージマãƒãƒ¼ã‚¸ãƒ£ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:664 +#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:666 +#: etc/inc/priv.defs.inc:666 +msgid "WebCfg - Packages: Settings page" +msgstr "WebCfg - パッケージ:Settingsページ" + +#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:665 +#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:667 +#: etc/inc/priv.defs.inc:667 +msgid "Allow access to the 'Packages: Settings' page." +msgstr "ページ: 「設定パッケージã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:670 +#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:672 +#: etc/inc/priv.defs.inc:672 +msgid "WebCfg - Diagnostics: Reboot System page" +msgstr "WebCfg - 診断:å†èµ·å‹•システムページ" + +#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:671 +#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:673 +#: etc/inc/priv.defs.inc:673 +msgid "Allow access to the 'Diagnostics: Reboot System' page." +msgstr "ページ: 「å†èµ·å‹•ã®ã‚·ã‚¹ãƒ†ãƒ è¨ºæ–­ãƒ—ログラムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:676 +#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:678 +#: etc/inc/priv.defs.inc:678 +msgid "WebCfg - Diagnostics: Restart HTTPD : System page" +msgstr "WebCfg - 診断:å†èµ·å‹•HTTPD:システムページ" + +#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:677 +#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:679 +#: etc/inc/priv.defs.inc:679 +msgid "Allow access to the 'Diagnostics: Restart HTTPD: System' page." +msgstr "ページ':å†èµ·å‹•httpdã®ã‚·ã‚¹ãƒ†ãƒ è¨ºæ–­ãƒ—ログラムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:682 +#: etc/inc/priv.defs.inc:688 etc/inc/priv.defs.inc:684 +#: etc/inc/priv.defs.inc:684 +msgid "WebCfg - Services: Captive portal page" +msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:683 +#: etc/inc/priv.defs.inc:689 etc/inc/priv.defs.inc:685 +#: etc/inc/priv.defs.inc:685 +msgid "Allow access to the 'Services: Captive portal' page." +msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:688 +#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:690 +#: etc/inc/priv.defs.inc:690 +msgid "WebCfg - Services: Captive portal: File Manager page" +msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šãƒ•ァイルマãƒãƒ¼ã‚¸ãƒ£ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:689 +#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:691 +#: etc/inc/priv.defs.inc:691 +msgid "Allow access to the 'Services: Captive portal: File Manager' page." +msgstr "ページ':キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒ•ァイルマãƒãƒ¼ã‚¸ãƒ£ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:688 +#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:706 +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712 +#: etc/inc/priv.defs.inc:696 etc/inc/priv.defs.inc:708 +#: etc/inc/priv.defs.inc:696 etc/inc/priv.defs.inc:708 +msgid "WebCfg - Services: Captive portal: Allowed IPs page" +msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šå¯IPアドレスページ" + +#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:689 +#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:707 +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713 +#: etc/inc/priv.defs.inc:697 etc/inc/priv.defs.inc:709 +#: etc/inc/priv.defs.inc:697 etc/inc/priv.defs.inc:709 +msgid "Allow access to the 'Services: Captive portal: Allowed IPs' page." +msgstr "ページ':キャプティブãƒãƒ¼ã‚¿ãƒ«å¯ã®IPサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:694 +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712 +#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:718 +#: etc/inc/priv.defs.inc:702 etc/inc/priv.defs.inc:714 +#: etc/inc/priv.defs.inc:702 etc/inc/priv.defs.inc:714 +msgid "WebCfg - Services: Captive portal: Edit Allowed IPs page" +msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šç·¨é›†å¯ã®IPページ" + +#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:695 +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713 +#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:719 +#: etc/inc/priv.defs.inc:703 etc/inc/priv.defs.inc:715 +#: etc/inc/priv.defs.inc:703 etc/inc/priv.defs.inc:715 +msgid "Allow access to the 'Services: Captive portal: Edit Allowed IPs' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šç·¨é›†IPを許å¯ã€ã®ãƒšãƒ¼ã‚¸ã€‚" + +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:718 +#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:720 +#: etc/inc/priv.defs.inc:720 +msgid "WebCfg - Services: Captive portal: Mac Addresses page" +msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šMACアドレスã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:719 +#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:721 +#: etc/inc/priv.defs.inc:721 +msgid "Allow access to the 'Services: Captive portal: Mac Addresses' page." +msgstr "ページ':キャプティブãƒãƒ¼ã‚¿ãƒ«ã®MACアドレスサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:724 +#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:726 +#: etc/inc/priv.defs.inc:726 +msgid "WebCfg - Services: Captive portal: Edit MAC Addresses page" +msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šç·¨é›†ã®MACアドレス))ページ" + +#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:725 +#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:727 +#: etc/inc/priv.defs.inc:727 +msgid "" +"Allow access to the 'Services: Captive portal: Edit MAC Addresses' page." +msgstr "ページ"':キャプティブãƒãƒ¼ã‚¿ãƒ«ã®ç·¨é›†MACアドレスサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:712 etc/inc/priv.defs.inc:730 +#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:744 +#: etc/inc/priv.defs.inc:744 +msgid "WebCfg - Services: Captive portal Vouchers page" +msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:713 etc/inc/priv.defs.inc:731 +#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:745 +#: etc/inc/priv.defs.inc:745 +msgid "Allow access to the 'Services: Captive portal Vouchers' page." +msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:742 +#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:756 +#: etc/inc/priv.defs.inc:756 +msgid "WebCfg - Services: DHCP server page" +msgstr "WebCfg - サービス:DHCP Serverページ" + +#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:743 +#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:757 +#: etc/inc/priv.defs.inc:757 +msgid "Allow access to the 'Services: DHCP server' page." +msgstr "ページ:「DHCPサーãƒã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:748 +#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:762 +#: etc/inc/priv.defs.inc:762 +msgid "WebCfg - Services: DHCP Server : Edit static mapping page" +msgstr "WebCfg - サービス:DHCPサーãƒï¼šé™çš„マッピングページを編集" + +#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:749 +#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:763 +#: etc/inc/priv.defs.inc:763 +msgid "Allow access to the 'Services: DHCP Server : Edit static mapping' page." +msgstr "ページ': DHCPサーãƒã®ç·¨é›†é™çš„マッピングサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:754 +#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:768 +#: etc/inc/priv.defs.inc:768 +msgid "WebCfg - Services: DHCP Relay page" +msgstr "WebCfg - サービス:DHCPリレーページ" + +#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:755 +#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:769 +#: etc/inc/priv.defs.inc:769 +msgid "Allow access to the 'Services: DHCP Relay' page." +msgstr "ページ: 「 DHCPリレーサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:742 etc/inc/priv.defs.inc:760 +#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:774 +#: etc/inc/priv.defs.inc:774 +msgid "WebCfg - Services: DHCPv6 Relay page" +msgstr "WebCfg - Services: DHCPv6 Relay page" + +#: etc/inc/priv.defs.inc:743 etc/inc/priv.defs.inc:761 +#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:775 +#: etc/inc/priv.defs.inc:775 +msgid "Allow access to the 'Services: DHCPv6 Relay' page." +msgstr "ページ: 「 DHCPv6リレーサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:766 +#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:780 +#: etc/inc/priv.defs.inc:780 +msgid "WebCfg - Services: DNS Forwarder page" +msgstr "WebCfg - サービス: DNSフォワーダページ" + +#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:767 +#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:781 +#: etc/inc/priv.defs.inc:781 +msgid "Allow access to the 'Services: DNS Forwarder' page." +msgstr "ページ: 「 DNSフォワーダサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:772 +#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:786 +#: etc/inc/priv.defs.inc:786 +msgid "WebCfg - Services: DNS Forwarder: Edit Domain Override page" +msgstr "WebCfg - サービス: DNSフォワーダ:ドメイン編集オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:773 +#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:787 +#: etc/inc/priv.defs.inc:787 +msgid "" +"Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page." +msgstr "ページ"': DNSフォワーダドメイン編集オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:778 +#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:792 +#: etc/inc/priv.defs.inc:792 +msgid "WebCfg - Services: DNS Forwarder: Edit host page" +msgstr "WebCfg - サービス: DNSフォワーダ:編集ホストページ" + +#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:779 +#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:793 +#: etc/inc/priv.defs.inc:793 +msgid "Allow access to the 'Services: DNS Forwarder: Edit host' page." +msgstr "ページ': DNSフォワーダã®ç·¨é›†ãƒ›ã‚¹ãƒˆã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:784 +#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:798 +#: etc/inc/priv.defs.inc:798 +msgid "WebCfg - Services: Dynamic DNS clients page" +msgstr "WebCfg - サービス:ダイナミックDNSクライアントã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:785 +#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:799 +#: etc/inc/priv.defs.inc:799 +msgid "Allow access to the 'Services: Dynamic DNS clients' page." +msgstr "ページ: 「ダイナミックDNSクライアントサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:790 +#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:804 +#: etc/inc/priv.defs.inc:804 +msgid "WebCfg - Services: Dynamic DNS client page" +msgstr "WebCfg - サービス:ダイナミックDNSクライアントページ" + +#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:791 +#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:805 +#: etc/inc/priv.defs.inc:805 +msgid "Allow access to the 'Services: Dynamic DNS client' page." +msgstr "ページ: 「ダイナミックDNSクライアントサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:796 +#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:810 +#: etc/inc/priv.defs.inc:810 +msgid "WebCfg - Services: Igmpproxy page" +msgstr "WebCfg - サービス: Igmpproxyページ" + +#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:797 +#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:811 +#: etc/inc/priv.defs.inc:811 +msgid "Allow access to the 'Services: Igmpproxy' page." +msgstr "ページ:' Igmpproxyサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:802 +#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:816 +#: etc/inc/priv.defs.inc:816 +msgid "WebCfg - Firewall: Igmpproxy: Edit page" +msgstr "WebCfg - ファイアウォール: Igmpproxy : Editページ" + +#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:803 +#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:817 +#: etc/inc/priv.defs.inc:817 +msgid "Allow access to the 'Firewall: Igmpproxy' page." +msgstr "' : Igmpproxyファイアウォールã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:808 +#: etc/inc/priv.defs.inc:814 etc/inc/priv.defs.inc:822 +#: etc/inc/priv.defs.inc:822 +msgid "WebCfg - Services: RFC 2136 clients page" +msgstr "WebCfg - サービス: RFC 2136 Clientsページ" + +#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:809 +#: etc/inc/priv.defs.inc:815 etc/inc/priv.defs.inc:823 +#: etc/inc/priv.defs.inc:823 +msgid "Allow access to the 'Services: RFC 2136 clients' page." +msgstr "ページ:' ã€RFC 2136ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆÂ·ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:814 +#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:828 +#: etc/inc/priv.defs.inc:828 +msgid "WebCfg - Services: SNMP page" +msgstr "WebCfg - サービス:SNMP]ページ" + +#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:815 +#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:829 +#: etc/inc/priv.defs.inc:829 +msgid "Allow access to the 'Services: SNMP' page." +msgstr "ページ: 「 SNMPサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:820 +#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:834 +#: etc/inc/priv.defs.inc:834 +msgid "WebCfg - Services: Wake on LAN page" +msgstr "WebCfg - サービス: LANã®ãƒšãƒ¼ã‚¸ã§ã‚¦ã‚§ã‚¤ã‚¯" + +#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:821 +#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:835 +#: etc/inc/priv.defs.inc:835 +msgid "Allow access to the 'Services: Wake on LAN' page." +msgstr "ページ: 「モーニングLAN上ã®ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:826 +#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:840 +#: etc/inc/priv.defs.inc:840 +msgid "WebCfg - Services: Wake on LAN: Edit page" +msgstr "WebCfg - サービス: Wake on LANã¯ï¼š Editページ" + +#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:827 +#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:841 +#: etc/inc/priv.defs.inc:841 +msgid "Allow access to the 'Services: Wake on LAN: Edit' page." +msgstr "ページ':ウェイクLAN上ã®ã‚µãƒ¼ãƒ“スを編集ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:838 +#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:852 +#: etc/inc/priv.defs.inc:852 +msgid "WebCfg - Hidden: Detailed Status page" +msgstr "WebCfg - éžè¡¨ç¤ºï¼šè©³ç´°ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸ã«ã¯ã€" + +#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:839 +#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:853 +#: etc/inc/priv.defs.inc:853 +msgid "Allow access to the 'Hidden: Detailed Status' page." +msgstr "ページ: 「詳細ステータス隠れãŸã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:844 +#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:858 +#: etc/inc/priv.defs.inc:858 +msgid "WebCfg - Status: Captive portal page" +msgstr "WebCfg - ステータス:キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:845 +#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:859 +#: etc/inc/priv.defs.inc:859 +msgid "Allow access to the 'Status: Captive portal' page." +msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:850 +#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:864 +#: etc/inc/priv.defs.inc:864 +msgid "WebCfg - Status: Captive portal test Vouchers page" +msgstr "WebCfg - ステータス:キャプティブãƒãƒ¼ã‚¿ãƒ«ã®è©¦é¨“ãƒã‚¦ãƒãƒ£ãƒ¼ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:851 +#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:865 +#: etc/inc/priv.defs.inc:865 +msgid "Allow access to the 'Status: Captive portal Test Vouchers' page." +msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ã®ãƒ†ã‚¹ãƒˆãƒã‚¦ãƒãƒ£ãƒ¼çжæ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:838 etc/inc/priv.defs.inc:856 +#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:870 +#: etc/inc/priv.defs.inc:870 +msgid "WebCfg - Status: Captive portal Voucher Rolls page" +msgstr "WebCfg - ステータス:キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ­ãƒ¼ãƒ«ã‚¹ãƒ­ã‚¤ã‚¹ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:839 etc/inc/priv.defs.inc:857 +#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:871 +#: etc/inc/priv.defs.inc:871 +msgid "Allow access to the 'Status: Captive portal Voucher Rolls' page." +msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ­ãƒ¼ãƒ«ã‚¹ãƒ­ã‚¤ã‚¹çжæ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:862 +#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:876 +#: etc/inc/priv.defs.inc:876 +msgid "WebCfg - Status: Captive portal Vouchers page" +msgstr "WebCfg - ステータス:キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:863 +#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:877 +#: etc/inc/priv.defs.inc:877 +msgid "Allow access to the 'Status: Captive portal Vouchers' page." +msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼çжæ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:868 +#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:882 +#: etc/inc/priv.defs.inc:882 +msgid "WebCfg - Status: DHCP leases page" +msgstr "WebCfg - ステータス: DHCPã¯ã€ãƒšãƒ¼ã‚¸ã‚’リース" + +#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:869 +#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:883 +#: etc/inc/priv.defs.inc:883 +msgid "Allow access to the 'Status: DHCP leases' page." +msgstr "ページ: 「 DHCPã®ãƒªãƒ¼ã‚¹çжæ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:874 +#: etc/inc/priv.defs.inc:880 etc/inc/priv.defs.inc:888 +#: etc/inc/priv.defs.inc:888 +msgid "WebCfg - Status: Filter Reload Status page" +msgstr "WebCfg - ステータス:フィルタã®ãƒªãƒ­ãƒ¼ãƒ‰ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:875 +#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:889 +#: etc/inc/priv.defs.inc:889 +msgid "Allow access to the 'Status: Filter Reload Status' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚ページ「ステータスをリロードステータスフィルタ〠。" + +#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:880 +#: etc/inc/priv.defs.inc:886 etc/inc/priv.defs.inc:894 +#: etc/inc/priv.defs.inc:894 +msgid "WebCfg - Status: Gateway Groups page" +msgstr "WebCfg - ステータス:ゲートウェイグループ]" + +#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:881 +#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:895 +#: etc/inc/priv.defs.inc:895 +msgid "Allow access to the 'Status: Gateway Groups' page." +msgstr "ページ:'ゲートウェイグループステータス'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:886 +#: etc/inc/priv.defs.inc:892 etc/inc/priv.defs.inc:900 +#: etc/inc/priv.defs.inc:900 +msgid "WebCfg - Status: Gateways page" +msgstr "WebCfg - ステータス:ゲートウェイページ" + +#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:887 +#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:901 +#: etc/inc/priv.defs.inc:901 +msgid "Allow access to the 'Status: Gateways' page." +msgstr "ページ:'ゲートウェイã®çжæ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:892 +#: etc/inc/priv.defs.inc:898 etc/inc/priv.defs.inc:906 +#: etc/inc/priv.defs.inc:906 +msgid "WebCfg - Status: Traffic Graph page" +msgstr "WebCfg - ステータス:トラフィックグラフページ" + +#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:893 +#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:907 +#: etc/inc/priv.defs.inc:907 +msgid "Allow access to the 'Status: Traffic Graph' page." +msgstr "ページ: 「トラフィックグラフ状æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:899 +#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:913 +#: etc/inc/priv.defs.inc:913 +msgid "WebCfg - Status: CPU load page" +msgstr "WebCfg - ステータス: CPUè² è·ã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:882 etc/inc/priv.defs.inc:900 +#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:914 +#: etc/inc/priv.defs.inc:914 +msgid "Allow access to the 'Status: CPU load' page." +msgstr "ページ: 「 CPUè² è·çжæ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:905 +#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:919 +#: etc/inc/priv.defs.inc:919 +msgid "WebCfg - Status: Interfaces page" +msgstr "WebCfg - ステータス: Interfacesページ" + +#: etc/inc/priv.defs.inc:888 etc/inc/priv.defs.inc:906 +#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:920 +#: etc/inc/priv.defs.inc:920 +msgid "Allow access to the 'Status: Interfaces' page." +msgstr "ページ: 「インタフェースã®çŠ¶æ…‹ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:911 +#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:925 +#: etc/inc/priv.defs.inc:925 +msgid "WebCfg - Status: Load Balancer: Pool page" +msgstr "WebCfg - ステータス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ—ールページ" + +#: etc/inc/priv.defs.inc:894 etc/inc/priv.defs.inc:912 +#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:926 +#: etc/inc/priv.defs.inc:926 +msgid "Allow access to the 'Status: Load Balancer: Pool' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'ステータス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ—ール'ページを。" + +#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:917 +#: etc/inc/priv.defs.inc:923 etc/inc/priv.defs.inc:931 +#: etc/inc/priv.defs.inc:931 +msgid "WebCfg - Status: Load Balancer: Virtual Server page" +msgstr "WebCfg - ステータス:仮想サーãƒãƒ¼ã®ãƒšãƒ¼ã‚¸ï¼šãƒãƒ©ãƒ³ã‚µã‚’ロード" + +#: etc/inc/priv.defs.inc:900 etc/inc/priv.defs.inc:918 +#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:932 +#: etc/inc/priv.defs.inc:932 +msgid "Allow access to the 'Status: Load Balancer: Virtual Server' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'ステータス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šä»®æƒ³ã‚µãƒ¼ãƒãƒ¼ã€ãƒšãƒ¼ã‚¸ã‚’。" + +#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:923 +#: etc/inc/priv.defs.inc:929 etc/inc/priv.defs.inc:937 +#: etc/inc/priv.defs.inc:937 +msgid "WebCfg - Status: OpenVPN page" +msgstr "WebCfg - ステータス: OpenVPNã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:924 +#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:938 +#: etc/inc/priv.defs.inc:938 +msgid "Allow access to the 'Status: OpenVPN' page." +msgstr "ページ: 「 OpenVPNã®çжæ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:929 +#: etc/inc/priv.defs.inc:935 etc/inc/priv.defs.inc:943 +#: etc/inc/priv.defs.inc:943 +msgid "WebCfg - Status: Traffic shaper: Queues page" +msgstr "WebCfg - ステータス:トラフィックシェイ:キューページ" + +#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:930 +#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:944 +#: etc/inc/priv.defs.inc:944 +msgid "Allow access to the 'Status: Traffic shaper: Queues' page." +msgstr "ページ':トラフィックシェーパキューã®çŠ¶æ…‹ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:935 +#: etc/inc/priv.defs.inc:941 etc/inc/priv.defs.inc:949 +#: etc/inc/priv.defs.inc:949 +msgid "WebCfg - Status: RRD Graphs page" +msgstr "WebCfg - ステータス: RRDグラフページ" + +#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:936 +#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:950 +#: etc/inc/priv.defs.inc:950 +msgid "Allow access to the 'Status: RRD Graphs' page." +msgstr "ページ:' RRDグラフã®çжæ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:942 +#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:956 +#: etc/inc/priv.defs.inc:956 +msgid "WebCfg - Status: RRD Graphs settings page" +msgstr "WebCfg - ステータス: RRDグラフã®è¨­å®šãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:925 etc/inc/priv.defs.inc:943 +#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:957 +#: etc/inc/priv.defs.inc:957 +msgid "Allow access to the 'Status: RRD Graphs: settings' page." +msgstr "ページ': RRDグラフã®è¨­å®šçжæ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:948 +#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:962 +#: etc/inc/priv.defs.inc:962 +msgid "WebCfg - Status: Services page" +msgstr "WebCfg - ステータス:サービスページ" + +#: etc/inc/priv.defs.inc:931 etc/inc/priv.defs.inc:949 +#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:963 +#: etc/inc/priv.defs.inc:963 +msgid "Allow access to the 'Status: Services' page." +msgstr "ページ: 「サービスステータスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:954 +#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:968 +#: etc/inc/priv.defs.inc:968 +msgid "WebCfg - Status: UPnP Status page" +msgstr "WebCfg - ステータス: UPnPã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:937 etc/inc/priv.defs.inc:955 +#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:969 +#: etc/inc/priv.defs.inc:969 +msgid "Allow access to the 'Status: UPnP Status' page." +msgstr "ページ: 「 UPnPã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:960 +#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:974 +#: etc/inc/priv.defs.inc:974 +msgid "WebCfg - Status: Wireless page" +msgstr "WebCfg - ステータス:ワイヤレスページ" + +#: etc/inc/priv.defs.inc:943 etc/inc/priv.defs.inc:961 +#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:975 +#: etc/inc/priv.defs.inc:975 +msgid "Allow access to the 'Status: Wireless' page." +msgstr "ページ: 「ワイヤレスステータスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:966 +#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:980 +#: etc/inc/priv.defs.inc:980 +msgid "WebCfg - System: General Setup page" +msgstr "WebCfg - システム: General Setupページ" + +#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:967 +#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:981 +#: etc/inc/priv.defs.inc:981 +msgid "Allow access to the 'System: General Setup' page." +msgstr "ページ: 「一般的ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—システムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:972 +#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:986 +#: etc/inc/priv.defs.inc:986 +msgid "WebCfg - System: Advanced: Admin Access Page" +msgstr "WebCfg - システム:高度:管ç†ã‚¢ã‚¯ã‚»ã‚¹ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:973 +#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:987 +#: etc/inc/priv.defs.inc:987 +msgid "Allow access to the 'System: Advanced: Admin Access' page." +msgstr "ページ':上級管ç†è€…ã®ã‚¢ã‚¯ã‚»ã‚¹Â·ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:978 +#: etc/inc/priv.defs.inc:984 etc/inc/priv.defs.inc:992 +#: etc/inc/priv.defs.inc:992 +msgid "WebCfg - System: Advanced: Firewall and NAT page" +msgstr "WebCfg - システム:高度:ファイアウォールやNATã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:979 +#: etc/inc/priv.defs.inc:985 etc/inc/priv.defs.inc:993 +#: etc/inc/priv.defs.inc:993 +msgid "Allow access to the 'System: Advanced: Firewall and NAT' page." +msgstr "' :高度:ファイアウォールã¨NATシステムã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:984 +#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:998 +#: etc/inc/priv.defs.inc:998 +msgid "WebCfg - System: Advanced: Miscellaneous page" +msgstr "WebCfg - システム:高度:ãã®ä»–ã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:985 +#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:999 +#: etc/inc/priv.defs.inc:999 +msgid "Allow access to the 'System: Advanced: Miscellaneous' page." +msgstr "' :高度:雑多ãªã‚·ã‚¹ãƒ†ãƒ ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:990 +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1004 +#: etc/inc/priv.defs.inc:1004 +msgid "WebCfg - System: Advanced: Network page" +msgstr "WebCfg - システム:拡張:ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:991 +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1005 +#: etc/inc/priv.defs.inc:1005 +msgid "Allow access to the 'System: Advanced: Networking' page." +msgstr "' :高度:ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:984 +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1002 +#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1010 +#: etc/inc/priv.defs.inc:1016 etc/inc/priv.defs.inc:1010 +#: etc/inc/priv.defs.inc:1016 +msgid "WebCfg - System: Advanced: Tunables page" +msgstr "WebCfg - システム:高度:ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°ãƒ‘ラメータページ" + +#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:985 +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1003 +#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1011 +#: etc/inc/priv.defs.inc:1017 etc/inc/priv.defs.inc:1011 +#: etc/inc/priv.defs.inc:1017 +msgid "Allow access to the 'System: Advanced: Tunables' page." +msgstr "' :高度:ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°å¯èƒ½ã‚·ã‚¹ãƒ†ãƒ ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:1008 +#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1022 +#: etc/inc/priv.defs.inc:1022 +msgid "WebCfg - System: Authentication Servers" +msgstr "WebCfg - システム:èªè¨¼ã‚µãƒ¼ãƒãƒ¼" + +#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:1009 +#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1023 +#: etc/inc/priv.defs.inc:1023 +msgid "Allow access to the 'System: Authentication Servers' page." +msgstr "ページ:'èªè¨¼ã‚µãƒ¼ãƒãƒ¼ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1014 +#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1028 +#: etc/inc/priv.defs.inc:1028 +msgid "WebCfg - System: CA Manager" +msgstr "WebCfg - システム:カリフォルニアマãƒãƒ¼ã‚¸ãƒ£ãƒ¼" + +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1015 +#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1029 +#: etc/inc/priv.defs.inc:1029 +msgid "Allow access to the 'System: CA Manager' page." +msgstr "ページ:'CAマãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚" + +#: etc/inc/priv.defs.inc:1002 etc/inc/priv.defs.inc:1020 +#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1034 +#: etc/inc/priv.defs.inc:1034 +msgid "WebCfg - System: Certificate Manager" +msgstr "WebCfg - システム:証明書マãƒãƒ¼ã‚¸ãƒ£" + +#: etc/inc/priv.defs.inc:1003 etc/inc/priv.defs.inc:1021 +#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1035 +#: etc/inc/priv.defs.inc:1035 +msgid "Allow access to the 'System: Certificate Manager' page." +msgstr "ページ: 「証明書マãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚" + +#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1026 +#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1040 +#: etc/inc/priv.defs.inc:1040 +msgid "WebCfg - System: CRL Manager" +msgstr "WebCfg - システム: CRLマãƒãƒ¼ã‚¸ãƒ£ãƒ¼" + +#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1027 +#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1041 +#: etc/inc/priv.defs.inc:1041 +msgid "Allow access to the 'System: CRL Manager' page." +msgstr "ページ: 「 CRLマãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚" + +#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1032 +#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1046 +#: etc/inc/priv.defs.inc:1046 +msgid "WebCfg - System: Firmware: Manual Update page" +msgstr "WebCfg - システム:ファームウェア:手動アップデートページ" + +#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1033 +#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1047 +#: etc/inc/priv.defs.inc:1047 +msgid "Allow access to the 'System: Firmware: Manual Update' page." +msgstr "ページ'ï¼šãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®æ‰‹å‹•更新システムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1038 +#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1052 +#: etc/inc/priv.defs.inc:1052 +msgid "WebCfg - System: Firmware: Check For Update page" +msgstr "WebCfg - システム:ファームウェア:アップデートページã§ã¯ãƒã‚§ãƒƒã‚¯" + +#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1039 +#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1053 +#: etc/inc/priv.defs.inc:1053 +msgid "Allow access to the 'System: Firmware: Check For Update' page." +msgstr "ページ'ï¼šãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®æ›´æ–°ã‚’確èªã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1044 +#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1058 +#: etc/inc/priv.defs.inc:1058 +msgid "WebCfg - System: Firmware: Auto Update page" +msgstr "WebCfg - システム:ファームウェア:自動アップデートページ" + +#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1045 +#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1059 +#: etc/inc/priv.defs.inc:1059 +msgid "Allow access to the 'System: Firmware: Auto Update' page." +msgstr "ページ':ファームウェアã®è‡ªå‹•アップデートシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1050 +#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1064 +#: etc/inc/priv.defs.inc:1064 +msgid "WebCfg - System: Firmware: Settings page" +msgstr "WebCfg - システム:ファームウェア: Settingsページ" + +#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1051 +#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1065 +#: etc/inc/priv.defs.inc:1065 +msgid "Allow access to the 'System: Firmware: Settings' page." +msgstr "ページ':ファームウェアã®è¨­å®šã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1056 +#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1070 +#: etc/inc/priv.defs.inc:1070 +msgid "WebCfg - System: Gateway Groups page" +msgstr "WebCfg - システム:ゲートウェイグループ]" + +#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1057 +#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1071 +#: etc/inc/priv.defs.inc:1071 +msgid "Allow access to the 'System: Gateway Groups' page." +msgstr "ページ:'ゲートウェイグループシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1062 +#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1076 +#: etc/inc/priv.defs.inc:1076 +msgid "WebCfg - System: Gateways: Edit Gateway Groups page" +msgstr "WebCfg - システム:ゲートウェイ:編集ゲートウェイグループ]" + +#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1063 +#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1077 +#: etc/inc/priv.defs.inc:1077 +msgid "Allow access to the 'System: Gateways: Edit Gateway Groups' page." +msgstr "ページ':ゲートウェイã®ç·¨é›†ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚°ãƒ«ãƒ¼ãƒ—システムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1068 +#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1082 +#: etc/inc/priv.defs.inc:1082 +msgid "WebCfg - System: Gateways page" +msgstr "WebCfg - システム:ゲートウェイページ" + +#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1069 +#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1083 +#: etc/inc/priv.defs.inc:1083 +msgid "Allow access to the 'System: Gateways' page." +msgstr "ページ: 「ゲートウェイシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1074 +#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1088 +#: etc/inc/priv.defs.inc:1088 +msgid "WebCfg - System: Gateways: Edit Gateway page" +msgstr "WebCfg - システム:ゲートウェイ:編集ゲートウェイページ" + +#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1075 +#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1089 +#: etc/inc/priv.defs.inc:1089 +msgid "Allow access to the 'System: Gateways: Edit Gateway' page." +msgstr "ページ':ゲートウェイã®ç·¨é›†ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1080 +#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1094 +#: etc/inc/priv.defs.inc:1094 +msgid "WebCfg - System: Group manager page" +msgstr "WebCfg - システム:グループマãƒãƒ¼ã‚¸ãƒ£ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1081 +#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1095 +#: etc/inc/priv.defs.inc:1095 +msgid "Allow access to the 'System: Group manager' page." +msgstr "ページ: 「グループ·マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1086 +#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1100 +#: etc/inc/priv.defs.inc:1100 +msgid "WebCfg - System: Group Manager: Add Privileges page" +msgstr "WebCfg - システム:グループマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ï¼šç‰¹æ¨©ã®ãƒšãƒ¼ã‚¸ã‚’追加" + +#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1087 +#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1101 +#: etc/inc/priv.defs.inc:1101 +msgid "Allow access to the 'System: Group Manager: Add Privileges' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€ :グループ·マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ï¼šã‚·ã‚¹ãƒ†ãƒ æ¨©é™ã®è¿½åŠ ã€ãƒšãƒ¼ã‚¸ãŒã€‚" + +#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1092 +#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1106 +#: etc/inc/priv.defs.inc:1106 +msgid "WebCfg - System: Static Routes page" +msgstr "WebCfg - システム:é™çš„ルート]ページ" + +#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1093 +#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1107 +#: etc/inc/priv.defs.inc:1107 +msgid "Allow access to the 'System: Static Routes' page." +msgstr "ページ: 「スタティックルートシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1098 +#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1112 +#: etc/inc/priv.defs.inc:1112 +msgid "WebCfg - System: Static Routes: Edit route page" +msgstr "WebCfg - システム:é™çš„ルート:編集ルートページ" + +#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1099 +#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1113 +#: etc/inc/priv.defs.inc:1113 +msgid "Allow access to the 'System: Static Routes: Edit route' page." +msgstr "ページ':é™çš„ルートã®ç·¨é›†ãƒ«ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1104 +#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1118 +#: etc/inc/priv.defs.inc:1118 +msgid "WebCfg - System: User Manager page" +msgstr "WebCfg - システム:ユーザーマãƒãƒ¼ã‚¸ãƒ£ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1105 +#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1119 +#: etc/inc/priv.defs.inc:1119 +msgid "Allow access to the 'System: User Manager' page." +msgstr "ページ: 「ユーザーマãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚" + +#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1110 +#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1124 +#: etc/inc/priv.defs.inc:1124 +msgid "WebCfg - System: User Manager: Add Privileges page" +msgstr "WebCfg - システム:ユーザーマãƒãƒ¼ã‚¸ãƒ£ï¼šæ¨©é™]ページを追加ã™ã‚‹" + +#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1111 +#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1125 +#: etc/inc/priv.defs.inc:1125 +msgid "Allow access to the 'System: User Manager: Add Privileges' page." +msgstr "ページ':ユーザーマãƒãƒ¼ã‚¸ãƒ£ã®æ¨©é™ã®è¿½åŠ ã‚·ã‚¹ãƒ†ãƒ ã€ã‚’ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1116 +#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1130 +#: etc/inc/priv.defs.inc:1130 +msgid "WebCfg - System: User Password Manager page" +msgstr "WebCfg - システム:ユーザーパスワードマãƒãƒ¼ã‚¸ãƒ£]ページ" + +#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1117 +#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1131 +#: etc/inc/priv.defs.inc:1131 +msgid "Allow access to the 'System: User Password Manager' page." +msgstr "ページ: 「ユーザー·パスワードマãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚" + +#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1122 +#: etc/inc/priv.defs.inc:1128 +msgid "WebCfg - System: User manager: settings page" +msgstr "WebCfg - システム:ユーザーマãƒãƒ¼ã‚¸ãƒ£ï¼šè¨­å®šãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1123 +#: etc/inc/priv.defs.inc:1129 +msgid "Allow access to the 'System: User manager: settings' page." +msgstr "ページ':ユーザーマãƒãƒ¼ã‚¸ãƒ£ã®è¨­å®šã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1128 +#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1142 +#: etc/inc/priv.defs.inc:1142 +msgid "WebCfg - System: User Manager: Settings: Test LDAP page" +msgstr "WebCfg - システム:ユーザーマãƒãƒ¼ã‚¸ãƒ£ï¼šã‚»ãƒƒãƒ†ã‚£ãƒ³ã‚°ï¼šãƒ†ã‚¹ãƒˆã®LDAPページ" + +#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1129 +#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1143 +#: etc/inc/priv.defs.inc:1143 +msgid "Allow access to the 'System: User Manager: Settings: Test LDAP' page." +msgstr "ページ' :ユーザーマãƒãƒ¼ã‚¸ãƒ£ï¼šè¨­å®šãƒ†ã‚¹ãƒˆLDAPシステムã®'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1134 +#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1148 +#: etc/inc/priv.defs.inc:1148 +msgid "WebCfg - System: Firmware: Manual Update page (progress bar)" +msgstr "WebCfg - システム:ファームウェア:手動アップデートページ(プログレスãƒãƒ¼ï¼‰" + +#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1135 +#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1149 +#: etc/inc/priv.defs.inc:1149 +msgid "" +"Allow access to the 'System: Firmware: Manual Update: Progress bar' page." +msgstr "ページ"' :ファームウェア:手動アップデートプログレスãƒãƒ¼ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1140 +#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1154 +#: etc/inc/priv.defs.inc:1154 +msgid "WebCfg - Hidden: Upload Configuration page" +msgstr "WebCfg - éžè¡¨ç¤ºï¼šã‚¢ãƒƒãƒ—ロード設定]ページãŒ" + +#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1141 +#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1155 +#: etc/inc/priv.defs.inc:1155 +msgid "Allow access to the 'Hidden: Upload Configuration' page." +msgstr "ページ:'アップロードã®è¨­å®šéš ã‚ŒãŸã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1128 etc/inc/priv.defs.inc:1146 +#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1160 +#: etc/inc/priv.defs.inc:1160 +msgid "WebCfg - VPN: IPsec page" +msgstr "WebCfg - VPN : IPsecã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:1129 etc/inc/priv.defs.inc:1147 +#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1161 +#: etc/inc/priv.defs.inc:1161 +msgid "Allow access to the 'VPN: IPsec' page." +msgstr "ページ:'ã®IPsec VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1152 +#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1166 +#: etc/inc/priv.defs.inc:1166 +msgid "WebCfg - VPN: IPsec: Pre-Shared Keys List" +msgstr "WebCfg - VPN : IPsecã®ï¼šäº‹å‰å…±æœ‰éµãƒªã‚¹ãƒˆ" + +#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1153 +#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1167 +#: etc/inc/priv.defs.inc:1167 +msgid "Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page." +msgstr "ページ': IPsecã®äº‹å‰å…±æœ‰éµãƒªã‚¹ãƒˆã®VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1158 +#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1172 +#: etc/inc/priv.defs.inc:1172 +msgid "WebCfg - VPN: IPsec: Edit Pre-Shared Keys" +msgstr "WebCfg - VPN : IPsecã®ç·¨é›†ï¼šäº‹å‰å…±æœ‰éµ" + +#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1159 +#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1173 +#: etc/inc/priv.defs.inc:1173 +msgid "Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€ã«VPNを: IPsecã®ç·¨é›†ï¼šäº‹å‰å…±æœ‰éµã€ã®ãƒšãƒ¼ã‚¸ã€‚" + +#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1164 +#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1178 +#: etc/inc/priv.defs.inc:1178 +msgid "WebCfg - VPN: IPsec: Mobile page" +msgstr "WebCfg - VPN : IPsecã®ï¼šãƒ¢ãƒã‚¤ãƒ«ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1165 +#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1179 +#: etc/inc/priv.defs.inc:1179 +msgid "Allow access to the 'VPN: IPsec: Mobile' page." +msgstr "ページ': IPsecã®ãƒ¢ãƒã‚¤ãƒ«VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1170 +#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1184 +#: etc/inc/priv.defs.inc:1184 +msgid "WebCfg - VPN: IPsec: Edit Phase 1 page" +msgstr "WebCfg - VPN : IPsecã®ç·¨é›†ï¼šãƒ•ェーズ1ページ" + +#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1171 +#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1185 +#: etc/inc/priv.defs.inc:1185 +msgid "Allow access to the 'VPN: IPsec: Edit Phase 1' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€ã«VPNを: IPsecã®ç·¨é›†ï¼šãƒ•ェーズ1 ã€ã®ãƒšãƒ¼ã‚¸ã€‚" + +#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1176 +#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1190 +#: etc/inc/priv.defs.inc:1190 +msgid "WebCfg - VPN: IPsec: Edit Phase 2 page" +msgstr "WebCfg - VPN : IPsecã®ç·¨é›†ï¼šãƒ•ェーズ2ページ" + +#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1177 +#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1191 +#: etc/inc/priv.defs.inc:1191 +msgid "Allow access to the 'VPN: IPsec: Edit Phase 2' page." +msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€ã«VPNを: IPsecã®ç·¨é›†ï¼šãƒ•ェーズ2 ã€ã®ãƒšãƒ¼ã‚¸ã€‚" + +#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1182 +#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1196 +#: etc/inc/priv.defs.inc:1196 +msgid "WebCfg - VPN: VPN L2TP page" +msgstr "WebCfg - VPN : VPN L2TPページ" + +#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1183 +#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1197 +#: etc/inc/priv.defs.inc:1197 +msgid "Allow access to the 'VPN: VPN L2TP' page." +msgstr "ページ: 「 VPNã®L2TP VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1188 +#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1202 +#: etc/inc/priv.defs.inc:1202 +msgid "WebCfg - VPN: VPN L2TP : Users page" +msgstr "WebCfg - VPN : VPN L2TP :ユーザーã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1189 +#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1203 +#: etc/inc/priv.defs.inc:1203 +msgid "Allow access to the 'VPN: VPN L2TP : Users' page." +msgstr "ページ': VPN L2TPユーザーVPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1194 +#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1208 +#: etc/inc/priv.defs.inc:1208 +msgid "WebCfg - VPN: VPN L2TP : Users : Edit page" +msgstr "WebCfg - VPN : VPN L2TP :ユーザー: Editページ" + +#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1195 +#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1209 +#: etc/inc/priv.defs.inc:1209 +msgid "Allow access to the 'VPN: VPN L2TP : Users : Edit' page." +msgstr "ページ' : VPN L2TP :ユーザーã®ç·¨é›†VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1200 +#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1214 +#: etc/inc/priv.defs.inc:1214 +msgid "WebCfg - OpenVPN: Client page" +msgstr "WebCfg - OpenVPNã®ï¼š Clientページ" + +#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1201 +#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1215 +#: etc/inc/priv.defs.inc:1215 +msgid "Allow access to the 'OpenVPN: Client' page." +msgstr "ページ:'クライアントã®OpenVPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1206 +#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1220 +#: etc/inc/priv.defs.inc:1220 +msgid "WebCfg - OpenVPN: Client Specific Override page" +msgstr "WebCfg - OpenVPNã®ï¼šã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå›ºæœ‰ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1207 +#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1221 +#: etc/inc/priv.defs.inc:1221 +msgid "Allow access to the 'OpenVPN: Client Specific Override' page." +msgstr "ページ:'クライアントã®ç‰¹å®šã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰OpenVPNã®'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1212 +#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1226 +#: etc/inc/priv.defs.inc:1226 +msgid "WebCfg - OpenVPN: Server page" +msgstr "WebCfg - OpenVPNã®ï¼š Serverページ" + +#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1213 +#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1227 +#: etc/inc/priv.defs.inc:1227 +msgid "Allow access to the 'OpenVPN: Server' page." +msgstr "ページ:'サーãƒãƒ¼OpenVPNã®'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1218 +#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1232 +#: etc/inc/priv.defs.inc:1232 +msgid "WebCfg - Services: PPPoE Server page" +msgstr "WebCfg - サービス: PPPoEサーãƒãƒšãƒ¼ã‚¸ã«" + +#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1219 +#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1233 +#: etc/inc/priv.defs.inc:1233 +msgid "Allow access to the 'Services: PPPoE Server' page." +msgstr "ページ:'ã®PPPoEサーãƒã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1224 +#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1238 +#: etc/inc/priv.defs.inc:1238 +msgid "WebCfg - Services: PPPoE Server: Edit page" +msgstr "WebCfg - サービス: PPPoEサーãƒï¼š Editページ" + +#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1225 +#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1239 +#: etc/inc/priv.defs.inc:1239 +msgid "Allow access to the 'Services: PPPoE Server: Edit' page." +msgstr "ページ': PPPoEサーãƒã‚µãƒ¼ãƒ“スを編集ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1230 +#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1244 +#: etc/inc/priv.defs.inc:1244 +msgid "WebCfg - VPN: VPN PPTP page" +msgstr "WebCfg - VPN : VPNã®PPTPページ" + +#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1231 +#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1245 +#: etc/inc/priv.defs.inc:1245 +msgid "Allow access to the 'VPN: VPN PPTP' page." +msgstr "ページ: 「 VPN PPTP VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1236 +#: etc/inc/priv.defs.inc:1242 etc/inc/priv.defs.inc:1250 +#: etc/inc/priv.defs.inc:1250 +msgid "WebCfg - VPN: VPN PPTP: Users page" +msgstr "WebCfg - VPN : VPNã®PPTP :ユーザーã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1237 +#: etc/inc/priv.defs.inc:1243 etc/inc/priv.defs.inc:1251 +#: etc/inc/priv.defs.inc:1251 +msgid "Allow access to the 'VPN: VPN PPTP: Users' page." +msgstr "ページ': VPN PPTPユーザーVPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1242 +#: etc/inc/priv.defs.inc:1248 etc/inc/priv.defs.inc:1256 +#: etc/inc/priv.defs.inc:1256 +msgid "WebCfg - VPN: VPN PPTP: User: Edit page" +msgstr "WebCfg - VPN : VPN PPTPユーザー: Editページ" + +#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1243 +#: etc/inc/priv.defs.inc:1249 etc/inc/priv.defs.inc:1257 +#: etc/inc/priv.defs.inc:1257 +msgid "Allow access to the 'VPN: VPN PPTP: User: Edit' page." +msgstr "ページ' : VPN PPTP :ユーザーã®ç·¨é›†VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1248 +#: etc/inc/priv.defs.inc:1254 etc/inc/priv.defs.inc:1262 +#: etc/inc/priv.defs.inc:1262 +msgid "WebCfg - pfSense wizard subsystem page" +msgstr "WebCfg - pfSenseウィザード·サブページ" + +#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1249 +#: etc/inc/priv.defs.inc:1255 etc/inc/priv.defs.inc:1263 +#: etc/inc/priv.defs.inc:1263 +msgid "Allow access to the 'pfSense wizard subsystem' page." +msgstr "「 pfSenseウィザードサブシステムã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1254 +#: etc/inc/priv.defs.inc:1260 etc/inc/priv.defs.inc:1268 +#: etc/inc/priv.defs.inc:1268 +msgid "WebCfg - XMLRPC Library page" +msgstr "WebCfg - XMLRPCライブラリページ" + +#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1255 +#: etc/inc/priv.defs.inc:1261 etc/inc/priv.defs.inc:1269 +#: etc/inc/priv.defs.inc:1269 +msgid "Allow access to the 'XMLRPC Library' page." +msgstr "' XMLRPCライブラリã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/rrd.inc:45 etc/inc/rrd.inc:45 +#, php-format +msgid "RRD dump failed exited with %1$s, the error is: %2$s" +msgstr "RRDダンプãŒã¯%1$sã§çµ‚了ã—ã¾ã—ãŸå¤±æ•—ã—ã€ã‚¨ãƒ©ãƒ¼ã¯ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚ %2$s" + +#: etc/inc/rrd.inc:56 etc/inc/rrd.inc:92 etc/inc/rrd.inc:96 etc/inc/rrd.inc:98 +#: etc/inc/rrd.inc:98 +#, php-format +msgid "RRD create failed exited with %1$s, the error is: %2$s" +msgstr "RRDã¯%1$sã§çµ‚了ã—ã¾ã—ãŸä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€ã‚¨ãƒ©ãƒ¼ï¼š %2$s" + +#: etc/inc/rrd.inc:70 etc/inc/rrd.inc:106 etc/inc/rrd.inc:110 +#: etc/inc/rrd.inc:113 etc/inc/rrd.inc:113 +#, php-format +msgid "" +"Import RRD has %1$s DS values and %2$s RRA databases, new format RRD has " +"%3$s DS values and %4$s RRA databases" +msgstr "%3$s DSã®å€¤ãŠã‚ˆã³ï¼… 4 $ sã®RRAデータベース「インãƒãƒ¼ãƒˆRRDã¯ã¯%1$s ã€DS値ã¨%2$sã®RRAデータベース〠RRDãŒæŒã¤æ–°ã—ã„フォーマットをæŒã£ã¦ã„ã‚‹ã€" + +#: etc/inc/rrd.inc:154 etc/inc/rrd.inc:190 etc/inc/rrd.inc:194 +#: etc/inc/rrd.inc:197 etc/inc/rrd.inc:197 +#, php-format +msgid "The new RRD now has %1$s DS values and %2$s RRA databases" +msgstr "æ–°ã—ã„RRDã¯ä»Šã¯%1$s DSã®å€¤ã¨%2$sã®RRAデータベースをæŒã£ã¦ã„ã‚‹" + +#: etc/inc/rrd.inc:162 etc/inc/rrd.inc:198 etc/inc/rrd.inc:202 +#: etc/inc/rrd.inc:205 etc/inc/rrd.inc:205 +msgid "Generating RRD graphs..." +msgstr "RRDグラフを生æˆã™ã‚‹..." + +#: etc/inc/rrd.inc:247 +#, php-format +msgid "RRD restore failed exited with %1$s, the error is: %2$s%3$s" +msgstr "RRDã¯%1$sã§çµ‚了ã—ã¾ã—ãŸå¾©å…ƒã«å¤±æ•—ã—ã¾ã—ãŸã€ã‚¨ãƒ©ãƒ¼ï¼š %2$s%3$s" + +#: etc/inc/rrd.inc:758 etc/inc/rrd.inc:782 etc/inc/rrd.inc:803 +#: etc/inc/rrd.inc:805 etc/inc/rrd.inc:808 etc/inc/rrd.inc:808 +msgid "Creating rrd update script" +msgstr "RRD更新スクリプトã®ä½œæˆ" + +#: etc/inc/smtp.inc:92 etc/inc/smtp.inc:92 +msgid ": data access time out" +msgstr ":外データアクセス時間" + +#: etc/inc/smtp.inc:95 etc/inc/smtp.inc:95 +msgid ": the server disconnected" +msgstr ":切断ã•れãŸã‚µãƒ¼ãƒãƒ¼" + +#: etc/inc/smtp.inc:107 etc/inc/smtp.inc:107 +msgid "reached the end of data while reading from the SMTP server conection" +msgstr "SMTPサーãƒãŸã£ã‹ã‚‰èª­ã¿å–り中ã«ãƒ‡ãƒ¼ã‚¿ã®æœ€å¾Œã«åˆ°é”ã—ãŸ" + +#: etc/inc/smtp.inc:113 etc/inc/smtp.inc:113 +msgid "it was not possible to read line from the SMTP server" +msgstr "ãれã¯ã€SMTPサーãƒãƒ¼ã‹ã‚‰ã®ãƒ©ã‚¤ãƒ³ã‚’読むã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/smtp.inc:135 etc/inc/smtp.inc:135 +msgid "it was not possible to send a line to the SMTP server" +msgstr "ãれã¯SMTPサーãƒã«è¡Œã‚’é€ä¿¡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/smtp.inc:149 etc/inc/smtp.inc:149 +msgid "it was not possible to send data to the SMTP server" +msgstr "ã“れã¯ã€SMTPサーãƒãƒ¼ã«ãƒ‡ãƒ¼ã‚¿ã‚’é€ä¿¡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/smtp.inc:221 etc/inc/smtp.inc:221 +msgid "establishing SSL connections requires at least PHP version 4.3.0" +msgstr "SSL接続を確立ã™ã‚‹ã“ã¨ã¯ã€å°‘ãªãã¨ã‚‚ã€PHPã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³4.3.0ãŒå¿…è¦ã§ã™" + +#: etc/inc/smtp.inc:224 etc/inc/smtp.inc:224 +msgid "establishing SSL connections requires the OpenSSL extension enabled" +msgstr "SSL接続を確立ã™ã‚‹ã“ã¨ã¯æœ‰åйã®OpenSSL拡張モジュールを必è¦ã¨" + +#: etc/inc/smtp.inc:233 etc/inc/smtp.inc:233 +#, php-format +msgid "could not resolve host "%s"" +msgstr "ホスト「 %s "を解決ã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/smtp.inc:237 etc/inc/smtp.inc:237 +#, php-format +msgid "domain "%s" resolved to an address excluded to be valid" +msgstr "有効ã§ã‚ã‚‹ãŸã‚ã«é™¤å¤–ã•れãŸã‚¢ãƒ‰ãƒ¬ã‚¹ã«è§£æ±ºã•れãŸãƒ‰ãƒ¡ã‚¤ãƒ³ã€ %s ã€" + +#: etc/inc/smtp.inc:239 etc/inc/smtp.inc:239 +#, php-format +msgid "Connecting to host address "%1$s" port %2$s..." +msgstr "アドレス "ã¯%1$s "ãƒãƒ¼ãƒˆ%2$sã‚’ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã™ã‚‹..." + +#: etc/inc/smtp.inc:246 etc/inc/smtp.inc:246 +msgid "-3 socket could not be created" +msgstr "-3ソケットを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/smtp.inc:248 etc/inc/smtp.inc:248 +#, php-format +msgid "-4 dns lookup on hostname "%s" failed" +msgstr "-4 DNSルックアップã®ãƒ›ã‚¹ãƒˆåã®ã€Œ %s 「失敗ã—ãŸ" + +#: etc/inc/smtp.inc:250 etc/inc/smtp.inc:250 +msgid "-5 connection refused or timed out" +msgstr "-5æŽ¥ç¶šãŒæ‹’å¦ã¾ãŸã¯ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ" + +#: etc/inc/smtp.inc:252 etc/inc/smtp.inc:252 +msgid "-6 fdopen() call failed" +msgstr "-6 fdopen.()呼ã³å‡ºã—ã«å¤±æ•—ã—ã¾ã—ãŸ" + +#: etc/inc/smtp.inc:254 etc/inc/smtp.inc:254 +msgid "-7 setvbuf() call failed" +msgstr "-7 setvbuf.()呼ã³å‡ºã—ã«å¤±æ•—ã—ã¾ã—ãŸ" + +#: etc/inc/smtp.inc:256 etc/inc/smtp.inc:256 +#, php-format +msgid "could not connect to the host "%1$s": %2$s" +msgstr "ホスト"ã¯%1$s "ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ %2$s" + +#: etc/inc/smtp.inc:265 etc/inc/smtp.inc:265 +msgid "" +"it is not possible to authenticate using the specified mechanism because the " +"SASL library class is not loaded" +msgstr "SASLライブラリクラスロードã•れã¦ã„ãªã„ã€ã“ã¨ãŒåŽŸå› æŒ‡å®šã•れãŸãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã‚’使用ã—ã¦èªè¨¼ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã€" + +#: etc/inc/smtp.inc:289 etc/inc/smtp.inc:289 +#, php-format +msgid "authenticated mechanism %1$s may not be used: %2$s" +msgstr "èªè¨¼ã•ã‚ŒãŸæ©Ÿæ§‹ã¯%1$sを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 %2$s" + +#: etc/inc/smtp.inc:294 etc/inc/smtp.inc:294 +msgid "Could not start the SASL authentication client:" +msgstr "SASLèªè¨¼ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’èµ·å‹•ã§ãã¾ã›ã‚“ã§ã—ãŸï¼š" + +#: etc/inc/smtp.inc:301 etc/inc/smtp.inc:301 +msgid "Could not send the AUTH command" +msgstr "AUTHコマンドをé€ä¿¡ã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/smtp.inc:316 etc/inc/smtp.inc:346 etc/inc/smtp.inc:316 +#: etc/inc/smtp.inc:346 +msgid "Authentication error:" +msgstr "èªè¨¼ã‚¨ãƒ©ãƒ¼ï¼š" + +#: etc/inc/smtp.inc:331 etc/inc/smtp.inc:331 +msgid "Could not send the authentication step message" +msgstr "èªè¨¼ã‚¹ãƒ†ãƒƒãƒ—メッセージをé€ä¿¡ã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/smtp.inc:351 etc/inc/smtp.inc:351 +msgid "Could not process the SASL authentication step:" +msgstr "SASLèªè¨¼ã‚¹ãƒ†ãƒƒãƒ—を処ç†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/smtp.inc:365 etc/inc/smtp.inc:365 +msgid "connection is already established" +msgstr "接続ãŒã™ã§ã«ç¢ºç«‹ã•れã¦ã„ã‚‹" + +#: etc/inc/smtp.inc:403 etc/inc/smtp.inc:403 +msgid "it was not specified the POP3 authentication user" +msgstr "ãれã¯ã€POP3èªè¨¼ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æŒ‡å®šã•れã¦ã„ãªã‹ã£ãŸ" + +#: etc/inc/smtp.inc:409 etc/inc/smtp.inc:409 +msgid "it was not specified the POP3 authentication password" +msgstr "ãれã¯ã€POP3èªè¨¼ãƒ‘スワードを指定ã—ãªã‹ã£ãŸ" + +#: etc/inc/smtp.inc:413 etc/inc/smtp.inc:413 +#, php-format +msgid "Resolving POP3 authentication host "%s"..." +msgstr "POP3èªè¨¼ãƒ›ã‚¹ãƒˆã€ %s ã€ã‚’解決ã™ã‚‹..." + +#: etc/inc/smtp.inc:420 etc/inc/smtp.inc:420 +msgid "POP3 authentication server greeting was not found" +msgstr "POP3èªè¨¼ã‚µãƒ¼ãƒã®ã‚°ãƒªãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/smtp.inc:428 etc/inc/smtp.inc:428 +msgid "POP3 authentication user was not accepted:" +msgstr "POP3èªè¨¼ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒå—ã‘入れられã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/smtp.inc:436 etc/inc/smtp.inc:436 +msgid "POP3 authentication password was not accepted:" +msgstr "POP3èªè¨¼ã®ãƒ‘スワードãŒå—ã‘入れられã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/smtp.inc:445 etc/inc/smtp.inc:445 +msgid "could not determine the SMTP to connect" +msgstr "接続ã™ã‚‹ãŸã‚ã«SMTPを決定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/smtp.inc:451 etc/inc/smtp.inc:451 +#, php-format +msgid "Resolving SMTP server domain "%s"..." +msgstr "解決SMTPサーãƒãƒ‰ãƒ¡ã‚¤ãƒ³ã€ %s "..." + +#: etc/inc/smtp.inc:463 etc/inc/smtp.inc:463 +#, php-format +msgid "Connected to SMTP server "%s"." +msgstr "SMTPサーãƒã€ %s ã€ã«æŽ¥ç¶šã•れã¦ã„る。" + +#: etc/inc/smtp.inc:517 etc/inc/smtp.inc:519 etc/inc/smtp.inc:519 +msgid "server does not require authentication" +msgstr "サーãƒãŒèªè¨¼ã‚’å¿…è¦ã¨ã—ãªã„" + +#: etc/inc/smtp.inc:581 etc/inc/smtp.inc:583 etc/inc/smtp.inc:583 +msgid "" +"it is not supported any of the authentication mechanisms required by the " +"server" +msgstr "サーãƒãƒ¼ã€ã¨ã¯ã€ã«ã‚ˆã£ã¦å¿…è¦ã¨ã•れるèªè¨¼ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã®ã„ãšã‚Œã‚‚サãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“ "" + +#: etc/inc/smtp.inc:613 etc/inc/smtp.inc:615 etc/inc/smtp.inc:615 +msgid "" +"direct delivery connection is already established and sender is already set" +msgstr "「直接å—ã‘æ¸¡ã—接続ãŒã™ã§ã«ç¢ºç«‹ã•れã€é€ä¿¡è€…ãŒã™ã§ã«è¨­å®šã•れã¦ã„ã¾ã™" + +#: etc/inc/smtp.inc:621 etc/inc/smtp.inc:623 etc/inc/smtp.inc:623 +msgid "connection is not in the initial state" +msgstr "接続ã¯ã€åˆæœŸçŠ¶æ…‹ã§ã¯ã‚りã¾ã›ã‚“" + +#: etc/inc/smtp.inc:643 etc/inc/smtp.inc:645 etc/inc/smtp.inc:645 +msgid "it was not specified a valid direct recipient" +msgstr "ãれã¯ã€æœ‰åйãªç›´æŽ¥å—ä¿¡è€…ã«æŒ‡å®šã•れã¦ã„ãªã‹ã£ãŸ" + +#: etc/inc/smtp.inc:662 etc/inc/smtp.inc:664 etc/inc/smtp.inc:664 +msgid "" +"it is not possible to deliver directly to recipients of different domains" +msgstr "「ãれã¯ç•°ãªã‚‹ãƒ‰ãƒ¡ã‚¤ãƒ³ã®å—信者ã«ç›´æŽ¥é…ä¿¡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/smtp.inc:667 etc/inc/smtp.inc:669 etc/inc/smtp.inc:669 +msgid "connection is already established and the recipient is already set" +msgstr "接続ãŒã™ã§ã«ç¢ºç«‹ã•れã€å—信者ãŒã™ã§ã«è¨­å®šã•れã¦ã„ã¾ã™" + +#: etc/inc/smtp.inc:679 etc/inc/smtp.inc:681 etc/inc/smtp.inc:681 +msgid "connection is not in the recipient setting state" +msgstr "接続ã¯ã€å—信者ã®è¨­å®šçŠ¶æ…‹ã§ã¯ã‚りã¾ã›ã‚“" + +#: etc/inc/smtp.inc:708 etc/inc/smtp.inc:710 etc/inc/smtp.inc:710 +msgid "connection is not in the start sending data state" +msgstr "接続ãŒé–‹å§‹é€ä¿¡ãƒ‡ãƒ¼ã‚¿çŠ¶æ…‹ã§ã¯ã‚りã¾ã›ã‚“" + +#: etc/inc/smtp.inc:738 etc/inc/smtp.inc:749 etc/inc/smtp.inc:740 +#: etc/inc/smtp.inc:751 etc/inc/smtp.inc:740 etc/inc/smtp.inc:751 +msgid "connection is not in the sending data state" +msgstr "接続ã¯ã€ãƒ‡ãƒ¼ã‚¿é€ä¿¡çŠ¶æ…‹ã§ã¯ãªã„" + +#: etc/inc/smtp.inc:785 etc/inc/smtp.inc:787 etc/inc/smtp.inc:787 +msgid "it was not previously established a SMTP connection" +msgstr "ãれã¯ã€ä»¥å‰ã®SMTP接続を確立ã—ã¦ã„ãªã‹ã£ãŸ" + +#: etc/inc/upgrade_config.inc:113 etc/inc/upgrade_config.inc:113 +#, php-format +msgid "%sWarning: filter rule removed (interface '%s' does not exist anymore)." +msgstr "%sWarning :削除フィルタルール(インタフェース「 %s ã€ã¯ã‚‚ã¯ã‚„存在ã—ãªã„) 。" + +#: etc/inc/upgrade_config.inc:125 etc/inc/upgrade_config.inc:125 +#, php-format +msgid "" +"%sWarning: filter rule removed (source network '%s' does not exist anymore)." +msgstr "「 %sWarning :削除フィルタルール(ソース·ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ %s ã€ã¯ã‚‚ã¯ã‚„存在ã—ãªã„) 。" + +#: etc/inc/upgrade_config.inc:138 etc/inc/upgrade_config.inc:138 +#, php-format +msgid "" +"%sWarning: filter rule removed (destination network '%s' does not exist " +"anymore)." +msgstr "「 : (もã†%sWarning削除フィルタルール宛先ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯' %s'ã¯å­˜åœ¨ã—ã¾ã›ã‚“〠) 。" + +#: etc/inc/upgrade_config.inc:158 etc/inc/upgrade_config.inc:158 +#, php-format +msgid "" +"%sWarning: traffic shaper rule removed (interface '%s' does not exist " +"anymore)." +msgstr "「 : (もã†%sWarning削除トラフィックシェールールインターフェース「 %s'ã¯å­˜åœ¨ã—ã¾ã›ã‚“〠) 。" + +#: etc/inc/upgrade_config.inc:170 etc/inc/upgrade_config.inc:170 +#, php-format +msgid "" +"%sWarning: traffic shaper rule removed (source network '%s' does not exist " +"anymore)." +msgstr "「 : (もã†%sWarning削除トラフィックシェールールソース·ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ %s'ã¯å­˜åœ¨ã—ã¾ã›ã‚“〠) 。" + +#: etc/inc/upgrade_config.inc:183 etc/inc/upgrade_config.inc:183 +#, php-format +msgid "" +"%sWarning: traffic shaper rule removed (destination network '%s' does not " +"exist anymore)." +msgstr "「 %sWarning :削除トラフィックシェールール(' %s'宛先ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒã‚りã¾ã›ã‚“ã€ã‚‚ã¯ã‚„存在) 。" + +#: etc/inc/upgrade_config.inc:333 etc/inc/upgrade_config.inc:333 +#, php-format +msgid "CARP vhid %s" +msgstr "CARPã®VHIDã®%s" + +#: etc/inc/upgrade_config.inc:510 etc/inc/upgrade_config.inc:510 +msgid "Permit IPsec traffic." +msgstr "IPsecトラフィックを許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/upgrade_config.inc:585 etc/inc/upgrade_config.inc:585 +msgid "System Administrators" +msgstr "システム管ç†è€…" + +#: etc/inc/upgrade_config.inc:604 etc/inc/upgrade_config.inc:604 +msgid "" +"Indicates whether this user will lock access to the webConfigurator for " +"other users." +msgstr "ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€Œã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŽ¢ã—webConfiguratorã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ロックã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€ 。" + +#: etc/inc/upgrade_config.inc:607 etc/inc/upgrade_config.inc:607 +msgid "" +"Indicates whether this user will lock individual HTML pages after having " +"accessed a particular page (the lock will be freed if the user leaves or " +"saves the page form)." +msgstr "特定ã®ãƒšãƒ¼ã‚¸ã‚’(ユーザーãŒãƒ­ã‚°ã‚ªãƒ•ã—ãŸã¨ãã€ã¾ãŸã¯ã€Œãƒšãƒ¼ã‚¸ã®ãƒ•ォームをä¿å­˜ã™ã‚‹å ´åˆã¯ã€ãƒ­ãƒƒã‚¯ãŒè§£æ”¾ã•れã¾ã™ï¼‰ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã€ã€Œã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã—ãŸå¾Œã€å€‹ã€…ã®HTMLページをロックã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€ 。" + +#: etc/inc/upgrade_config.inc:610 etc/inc/upgrade_config.inc:610 +msgid "Indicates whether this user is able to login for example via SSH." +msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€SSH経由ã§ä¾‹ãˆã°ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" + +#: etc/inc/upgrade_config.inc:613 etc/inc/upgrade_config.inc:613 +#, php-format +msgid "" +"Indicates whether this user is allowed to copy files onto the %s appliance " +"via SCP/SFTP. If you are going to use this privilege, you must install " +"scponly on the appliance (Hint: pkg_add -r scponly)." +msgstr "SCP / SFTP経由ã§ã€Œã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ%sアプライアンスã«ãƒ•ァイルをコピーã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€ 。ã“ã®æ¨©é™ã‚’使用ã—よã†ã¨ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚¢ãƒ—ライアンス( : scponlyã®pkg_addã«-Rヒント)ã«scponlyã®ã€Œã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/upgrade_config.inc:616 etc/inc/upgrade_config.inc:616 +msgid "" +"This user is associated with the UNIX root user (you should associate this " +"privilege only with one single user)." +msgstr "「 (一ã¤ã ã‘å˜ä¸€ã®ãƒ¦ãƒ¼ã‚¶ã¨æ¨©é™ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€UNIXã®rootユーザーã“れを関連付ã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼‰ã¨é–¢é€£ã—ã¦ã„る〠。" + +#: etc/inc/upgrade_config.inc:633 etc/inc/upgrade_config.inc:633 +msgid "Drop packets to closed TCP ports without returning a RST" +msgstr "RSTã‚’è¿”ã•ãšã«ã€é–‰ã˜ãŸTCPãƒãƒ¼ãƒˆã«ãƒ‘ケットをドロップã™ã‚‹" + +#: etc/inc/upgrade_config.inc:637 etc/inc/upgrade_config.inc:637 +msgid "Do not send ICMP port unreachable messages for closed UDP ports" +msgstr "é–‰ã˜ã‚‰ã‚ŒãŸUDPãƒãƒ¼ãƒˆã®ãŸã‚ã®ICMPãƒãƒ¼ãƒˆåˆ°é”ä¸èƒ½ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã—ãªã„ã§ãã ã•ã„" + +#: etc/inc/upgrade_config.inc:641 etc/inc/upgrade_config.inc:641 +msgid "Randomize the ID field in IP packets (default is 0: sequential IP IDs)" +msgstr "IPパケット内ã®IDフィールドをランダム化ã—ã¾ã™ï¼ˆãƒ‡ãƒ•ォルトã¯0ã§ã‚る:連続ã—ãŸIPã®ID )" + +#: etc/inc/upgrade_config.inc:645 etc/inc/upgrade_config.inc:645 +msgid "Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)" +msgstr "ドロップSYN- FINパケット(休憩ã®RFC1379ãŒã€èª°ã‚‚ã¨ã«ã‹ããれを使用ã—ã¾ã›ã‚“)" + +#: etc/inc/upgrade_config.inc:649 etc/inc/upgrade_config.inc:649 +msgid "Sending of IPv4 ICMP redirects" +msgstr "IPv4ã®ICMPリダイレクトをé€ä¿¡" + +#: etc/inc/upgrade_config.inc:653 etc/inc/upgrade_config.inc:653 +msgid "Sending of IPv6 ICMP redirects" +msgstr "IPv6ã®ICMPリダイレクトをé€ä¿¡" + +#: etc/inc/upgrade_config.inc:657 etc/inc/upgrade_config.inc:657 +msgid "Generate SYN cookies for outbound SYN-ACK packets" +msgstr "アウトãƒã‚¦ãƒ³ãƒ‰SYN- ACKパケットã®ãŸã‚ã«SYNクッキーを生æˆ" + +#: etc/inc/upgrade_config.inc:661 etc/inc/upgrade_config.inc:661 +msgid "Maximum incoming TCP datagram size" +msgstr "最大ç€ä¿¡TCPデータグラムサイズ" + +#: etc/inc/upgrade_config.inc:665 etc/inc/upgrade_config.inc:665 +msgid "Maximum outgoing TCP datagram size" +msgstr "最大発信TCPデータグラムサイズ" + +#: etc/inc/upgrade_config.inc:669 etc/inc/upgrade_config.inc:669 +msgid "" +"Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-" +"January/002534.html)" +msgstr "「 ( January/002534.htmlã‚’æ—©é€ã‚Šã¯http://lists.freebsd.org/pipermail/freebsd-net/2004-ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 ")" + +#: etc/inc/upgrade_config.inc:673 etc/inc/upgrade_config.inc:673 +msgid "Do not delay ACK to try and piggyback it onto a data packet" +msgstr "データパケットã«ãれを試ã—ã¦ã¿ã¦ã€ãƒ”ギーãƒãƒƒã‚¯ã«ACKã‚’é…らã›ãªã„ã§ãã ã•ã„" + +#: etc/inc/upgrade_config.inc:677 etc/inc/upgrade_config.inc:677 +msgid "Maximum outgoing UDP datagram size" +msgstr "最大é€ä¿¡UDPデータグラムサイズ" + +#: etc/inc/upgrade_config.inc:681 etc/inc/upgrade_config.inc:681 +msgid "" +"Handling of non-IP packets which are not passed to pfil (see if_bridge(4))" +msgstr "「 pfilã‚’ã«æ¸¡ã•れã¾ã›ã‚“éžIPパケットã®å‡¦ç†ã¯ã€ ( if_bridge (4)をå‚照)" + +#: etc/inc/upgrade_config.inc:685 etc/inc/upgrade_config.inc:685 +msgid "Allow unprivileged access to tap(4) device nodes" +msgstr "( 4 )デãƒã‚¤ã‚¹ãƒŽãƒ¼ãƒ‰ã‚’タップã—ã¦ã€æ¨©é™ã®ãªã„アクセスをå¯èƒ½ã«ã™ã‚‹" + +#: etc/inc/upgrade_config.inc:689 etc/inc/upgrade_config.inc:689 +msgid "Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())" +msgstr "ランダム化ã€PIDã®ï¼ˆSRC / SYS /カーン/ kern_fork.cå‚照: sysctl_kern_randompid.() )" + +#: etc/inc/upgrade_config.inc:693 etc/inc/upgrade_config.inc:693 +msgid "" +"The system will attempt to calculate the bandwidth delay product for each " +"connection and limit the amount of data queued to the network to just the " +"amount required to maintain optimum throughput. " +msgstr "接続ã—ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ã‚­ãƒ¥ãƒ¼ã•れãŸãƒ‡ãƒ¼ã‚¿ã®é‡ã‚’制é™ã™ã‚‹ã€Œã‚·ã‚¹ãƒ†ãƒ æ¯Žã«å¸¯åŸŸå¹…é…å»¶ç©ã‚’計算ã—よã†ã¨ã™ã‚‹ã€Œæœ€é©ãªã‚¹ãƒ«ãƒ¼ãƒ—ットを維æŒã™ã‚‹ãŸã‚ã«å¿…è¦ãªã‚ãšã‹ãªã€é‡ã§ã‚る。" + +#: etc/inc/upgrade_config.inc:697 etc/inc/upgrade_config.inc:697 +msgid "Set ICMP Limits" +msgstr "ICMPã®åˆ¶é™ã‚’設定" + +#: etc/inc/upgrade_config.inc:701 etc/inc/upgrade_config.inc:701 +msgid "TCP Offload engine" +msgstr "TCPオフロードエンジン" + +#: etc/inc/upgrade_config.inc:742 etc/inc/upgrade_config.inc:742 +#, php-format +msgid "Interface %s Static Gateway" +msgstr "インターフェイス%sé™çš„ゲートウェイ" + +#: etc/inc/upgrade_config.inc:745 etc/inc/upgrade_config.inc:745 +#, php-format +msgid "Interface %s Dynamic Gateway" +msgstr "インターフェイス%sダイナミックゲートウェイ" + +#: etc/inc/upgrade_config.inc:810 etc/inc/upgrade_config.inc:811 +#: etc/inc/upgrade_config.inc:811 +#, php-format +msgid "Upgraded static route for %s" +msgstr "%sãŸã‚ã«ã‚¢ãƒƒãƒ—グレードスタティックルート" + +#: etc/inc/upgrade_config.inc:907 etc/inc/upgrade_config.inc:908 +#: etc/inc/upgrade_config.inc:908 +#, php-format +msgid "Sitedown pool for VS: %s" +msgstr "VS用Sitedownプール: %s" + +#: etc/inc/upgrade_config.inc:1060 etc/inc/upgrade_config.inc:1062 +#: etc/inc/upgrade_config.inc:1063 etc/inc/upgrade_config.inc:1063 +#, php-format +msgid "phase2 for %s" +msgstr "%sãŸã‚ã®ãƒ•ェーズ2" + +#: etc/inc/upgrade_config.inc:1287 etc/inc/upgrade_config.inc:1289 +#: etc/inc/upgrade_config.inc:1290 etc/inc/upgrade_config.inc:1290 +#, php-format +msgid "Upgraded Dyndns %s" +msgstr "アップグレードã•れãŸãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNS %s" + +#: etc/inc/upgrade_config.inc:1339 etc/inc/upgrade_config.inc:1341 +#: etc/inc/upgrade_config.inc:1342 etc/inc/upgrade_config.inc:1342 +msgid "All Users" +msgstr "ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼" + +#: etc/inc/upgrade_config.inc:1471 etc/inc/upgrade_config.inc:1473 +#: etc/inc/upgrade_config.inc:1474 etc/inc/upgrade_config.inc:1474 +#, php-format +msgid "Converted bridged %s" +msgstr "変æ›ã•ã‚ŒãŸæ©‹ã‹ã‘%s" + +#: etc/inc/upgrade_config.inc:1797 etc/inc/upgrade_config.inc:1845 +#: etc/inc/upgrade_config.inc:1847 etc/inc/upgrade_config.inc:1848 +#: etc/inc/upgrade_config.inc:1848 +msgid "Auto added OpenVPN rule from config upgrade." +msgstr "自動設定ã®ã‚¢ãƒƒãƒ—グレードã‹ã‚‰OpenVPNã®ãƒ«ãƒ¼ãƒ«ã‚’追加ã—ã¾ã—ãŸã€‚" + +#: etc/inc/voucher.inc:364 etc/inc/voucher.inc:367 etc/inc/voucher.inc:382 +#, php-format +msgid "%1$s (%2$s/%3$s) active and good for %4$d Minutes" +msgstr "ã¯%1$s ( %2$s/%3$s )アクティブãŠã‚ˆã³ï¼… 4 ã®$ d分ã®ãŸã‚ã«è‰¯ã„" + +#: etc/inc/voucher.inc:401 etc/inc/voucher.inc:404 etc/inc/voucher.inc:419 +msgid "Access denied!" +msgstr "アクセスã¯ã€ã‚’å¦å®šï¼" + +#: etc/inc/voucher.inc:403 etc/inc/voucher.inc:406 etc/inc/voucher.inc:421 +#, php-format +msgid "Access granted for %d Minutes in total." +msgstr "アクセスã¯å…¨éƒ¨ã§ï¼… d分ã«ä»˜ä¸Žã•れãŸã€‚" + +#: etc/inc/voucher.inc:466 etc/inc/voucher.inc:469 etc/inc/voucher.inc:484 +msgid "Enabling voucher support... " +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã™ã‚‹..." + +#: etc/inc/voucher.inc:505 etc/inc/voucher.inc:508 etc/inc/voucher.inc:523 +#, php-format +msgid "Error: cannot write voucher.cfg" +msgstr "エラー: voucher.cfgを書ã込むã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: etc/inc/voucher.inc:556 etc/inc/voucher.inc:559 etc/inc/voucher.inc:574 +#, php-format +msgid "cant write %1$s/voucher_%s_used_%2$s.db" +msgstr "カント書ãè¾¼ã¿%1$s/voucher_%s_used_%2$s.db" + +#: etc/inc/voucher.inc:635 etc/inc/voucher.inc:638 etc/inc/voucher.inc:653 +#, php-format +msgid "cant read %1$s/voucher_%s_used_%2$s.db" +msgstr "カント%1$s/voucher_%s_used_%2$s.dbを読む" + +#: etc/inc/voucher.inc:653 etc/inc/voucher.inc:652 etc/inc/voucher.inc:655 +#: etc/inc/voucher.inc:670 +#, php-format +msgid "Voucher: %s" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ï¼š %s" + +#: etc/inc/xmlparse_attr.inc:197 etc/inc/xmlparse_attr.inc:197 +#, php-format +msgid "XML error: %1$s at line %2$d" +msgstr "XMLエラー:行%ã§ã¯%1$s 2 $ dã®" + +#: etc/inc/xmlreader.inc:129 etc/inc/xmlreader.inc:129 +#, php-format +msgid "Error returned while trying to parse %s" +msgstr "%sã‚’è§£æžã—よã†ã¨ã—ã¦ã‚¨ãƒ©ãƒ¼ãŒè¿”ã•" + +#: etc/inc/zeromq.inc:225 etc/inc/zeromq.inc:236 etc/inc/zeromq.inc:225 +#: etc/inc/zeromq.inc:236 +#, php-format +msgid "Merged in config (%s sections) from ZeroMQ client." +msgstr "ZeroMQクライアントã‹ã‚‰ï¼ˆã‚»ã‚¯ã‚·ãƒ§ãƒ³%s )設定ã«åˆä½µã—ã¾ã—ãŸã€‚" + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/services_dyndns.php:76 usr/local/www/services_snmp.php:159 +#: usr/local/www/services_wol.php:115 usr/local/www/services_wol_edit.php:112 +#: usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/services_captiveportal.php:63 +#: usr/local/www/services_captiveportal_filemanager.php:75 +#: usr/local/www/services_captiveportal_ip.php:64 +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_mac.php:63 +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_dhcp.php:421 +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/services_dhcp_relay.php:100 +#: usr/local/www/services_dnsmasq.php:119 +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/services_captiveportal_hostname.php:66 +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/fbegin.inc:171 usr/local/www/fbegin.inc:343 +#: usr/local/www/status_services.php:226 +#: usr/local/www/services_dyndns_edit.php:133 +#: usr/local/www/services_igmpproxy.php:80 +#: usr/local/www/services_rfc2136.php:55 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/vpn_pppoe_edit.php:234 usr/local/www/services_dhcpv6.php:359 +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_dyndns_edit.php:156 usr/local/www/fbegin.inc:189 +#: usr/local/www/fbegin.inc:361 usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/services_unbound.php:102 +#: usr/local/www/services_unbound_advanced.php:88 +#: usr/local/www/services_dyndns.php:85 usr/local/www/services_dhcp.php:433 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/services_ntpd.php:71 usr/local/www/services_dhcp_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/services_dhcpv6.php:386 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/fbegin.inc:197 usr/local/www/fbegin.inc:307 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_router_advertisements.php:194 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/status_services.php:222 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_dhcp.php:527 usr/local/www/services_ntpd.php:76 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_dhcpv6.php:367 +#: usr/local/www/system_authservers.php:187 +#: usr/local/www/status_services.php:220 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dyndns_edit.php:160 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/services_dhcp.php:526 +#: usr/local/www/services_dhcpv6.php:362 +#: usr/local/www/system_authservers.php:188 usr/local/www/fbegin.inc:188 +#: usr/local/www/fbegin.inc:299 usr/local/www/services_dnsmasq.php:123 +#: usr/local/www/services_dyndns.php:64 usr/local/www/services_snmp.php:165 +#: usr/local/www/status_services.php:63 +#: usr/local/www/services_router_advertisements.php:189 +#: usr/local/www/services_dyndns_edit.php:162 +#: usr/local/www/services_dhcp.php:546 usr/local/www/services_dnsmasq.php:125 +#: usr/local/www/services_dyndns.php:60 usr/local/www/services_dnsmasq.php:146 +#: usr/local/www/services_rfc2136.php:55 usr/local/www/status_services.php:63 +#: usr/local/www/services_router_advertisements.php:189 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dyndns_edit.php:162 +#: usr/local/www/services_wol.php:115 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/services_wol_edit.php:112 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/services_ntpd.php:76 +#: usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/services_dhcp.php:546 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/services_dhcpv6.php:362 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/system_authservers.php:188 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_igmpproxy.php:80 +#: usr/local/www/services_dnsmasq_edit.php:166 usr/local/www/fbegin.inc:188 +#: usr/local/www/fbegin.inc:299 usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/services_dnsmasq.php:146 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/services_dyndns.php:60 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dhcp_relay.php:100 +#: usr/local/www/services_snmp.php:165 +msgid "Services" +msgstr "サービス" + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/diag_logs.php:84 usr/local/www/diag_logs_auth.php:72 +#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_filter.php:108 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_ipsec.php:109 usr/local/www/diag_logs_ntpd.php:72 +#: usr/local/www/diag_logs_openvpn.php:76 +#: usr/local/www/diag_logs_settings.php:217 +#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/diag_logs_filter_summary.php:191 +#: usr/local/www/diag_logs_ppp.php:77 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/diag_logs_relayd.php:73 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/fbegin.inc:130 usr/local/www/fbegin.inc:165 +#: usr/local/www/status_lb_pool.php:62 usr/local/www/status_lb_vs.php:56 +#: usr/local/www/diag_logs_wireless.php:74 +#: usr/local/www/diag_logs_routing.php:72 +#: usr/local/www/diag_logs_settings.php:222 usr/local/www/fbegin.inc:147 +#: usr/local/www/fbegin.inc:182 usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/diag_logs_resolver.php:85 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/diag_logs_gateways.php:85 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_routing.php:73 +#: usr/local/www/diag_logs_settings.php:229 usr/local/www/fbegin.inc:156 +#: usr/local/www/fbegin.inc:190 usr/local/www/diag_logs_relayd.php:74 +#: usr/local/www/diag_logs_auth.php:73 usr/local/www/diag_logs_ipsec.php:110 +#: usr/local/www/diag_logs_resolver.php:86 usr/local/www/diag_logs_ntpd.php:73 +#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_wireless.php:75 +#: usr/local/www/diag_logs_filter_summary.php:192 +#: usr/local/www/diag_logs_gateways.php:86 +#: usr/local/www/diag_logs_openvpn.php:77 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_filter.php:98 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_ppp.php:75 usr/local/www/fbegin.inc:148 +#: usr/local/www/fbegin.inc:181 usr/local/www/diag_logs_filter.php:128 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/diag_logs_auth.php:73 +#: usr/local/www/diag_logs_settings.php:229 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/diag_logs_filter.php:128 +#: usr/local/www/diag_logs_routing.php:73 usr/local/www/diag_logs_dhcp.php:78 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/diag_logs.php:84 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_ntpd.php:73 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/diag_logs_openvpn.php:77 usr/local/www/status_lb_pool.php:62 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/diag_logs_ppp.php:75 usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/diag_logs_gateways.php:86 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/fbegin.inc:148 usr/local/www/fbegin.inc:181 +#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_relayd.php:74 +#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/diag_logs_ipsec.php:110 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/status_lb_vs.php:56 usr/local/www/diag_logs_wireless.php:75 +#: usr/local/www/diag_logs_resolver.php:86 +#: usr/local/www/diag_logs_filter_summary.php:192 +msgid "Load Balancer" +msgstr "ãƒãƒ©ãƒ³ã‚µã‚’ロードã™ã‚‹" + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_virtual_server.php:116 +#: usr/local/www/load_balancer_relay_action.php:127 +#: usr/local/www/load_balancer_pool.php:119 +#: usr/local/www/load_balancer_monitor.php:110 +#: usr/local/www/load_balancer_relay_protocol.php:123 +#: usr/local/www/status_lb_pool.php:121 usr/local/www/status_lb_vs.php:68 +#: usr/local/www/load_balancer_setting.php:120 +#: usr/local/www/load_balancer_setting.php:119 +#: usr/local/www/load_balancer_virtual_server.php:114 +#: usr/local/www/load_balancer_monitor.php:108 +#: usr/local/www/load_balancer_relay_protocol.php:121 +#: usr/local/www/load_balancer_relay_action.php:125 +#: usr/local/www/load_balancer_pool.php:117 +#: usr/local/www/load_balancer_relay_protocol.php:121 +#: usr/local/www/load_balancer_relay_action.php:125 +#: usr/local/www/status_lb_pool.php:121 +#: usr/local/www/load_balancer_setting.php:119 +#: usr/local/www/load_balancer_pool.php:117 +#: usr/local/www/load_balancer_monitor.php:108 +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_virtual_server.php:114 +#: usr/local/www/status_lb_vs.php:68 +msgid "Virtual Servers" +msgstr "仮想サーãƒãƒ¼" + +#: usr/local/www/load_balancer_virtual_server.php:108 +#: usr/local/www/load_balancer_virtual_server.php:106 +#: usr/local/www/load_balancer_virtual_server.php:106 +msgid "The virtual server configuration has been changed" +msgstr "仮想サーãƒãƒ¼ã®æ§‹æˆãŒå¤‰æ›´ã•れã¾ã—ãŸ" + +#: usr/local/www/load_balancer_virtual_server.php:108 +#: usr/local/www/firewall_shaper_layer7.php:401 +#: usr/local/www/firewall_shaper_vinterface.php:366 +#: usr/local/www/firewall_shaper_wizards.php:96 +#: usr/local/www/firewall_aliases.php:160 +#: usr/local/www/firewall_nat_1to1.php:87 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_shaper.php:403 +#: usr/local/www/firewall_shaper_queues.php:187 +#: usr/local/www/firewall_virtual_ip.php:164 usr/local/www/interfaces.php:1222 +#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86 +#: usr/local/www/vpn_ipsec_mobile.php:303 +#: usr/local/www/load_balancer_monitor.php:102 usr/local/www/vpn_pppoe.php:96 +#: usr/local/www/firewall_nat.php:175 usr/local/www/services_dhcp.php:536 +#: usr/local/www/services_dnsmasq.php:147 +#: usr/local/www/load_balancer_relay_protocol.php:114 +#: usr/local/www/services_igmpproxy.php:90 +#: usr/local/www/system_gateways.php:134 usr/local/www/firewall_nat_npt.php:87 +#: usr/local/www/services_dhcpv6.php:461 +#: usr/local/www/services_captiveportal_zones.php:47 +#: usr/local/www/firewall_nat_out.php:304 +#: usr/local/www/load_balancer_setting.php:111 +#: usr/local/www/services_unbound.php:129 +#: usr/local/www/services_unbound_advanced.php:116 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/services_dhcp.php:549 usr/local/www/firewall_aliases.php:163 +#: usr/local/www/interfaces.php:1326 usr/local/www/services_dhcpv6.php:488 +#: usr/local/www/services_dnsmasq.php:148 +#: usr/local/www/firewall_nat_out.php:305 +#: usr/local/www/load_balancer_setting.php:110 usr/local/www/vpn_pppoe.php:97 +#: usr/local/www/vpn_ipsec.php:133 usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/firewall_nat.php:180 usr/local/www/firewall_shaper.php:404 +#: usr/local/www/vpn_ipsec_keys.php:85 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/load_balancer_virtual_server.php:106 +#: usr/local/www/load_balancer_monitor.php:100 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/services_dhcp.php:653 usr/local/www/firewall_aliases.php:167 +#: usr/local/www/interfaces.php:1314 +#: usr/local/www/services_captiveportal_zones.php:48 +#: usr/local/www/firewall_virtual_ip.php:167 +#: usr/local/www/services_dhcpv6.php:468 usr/local/www/vpn_pppoe.php:98 +#: usr/local/www/vpn_ipsec.php:139 usr/local/www/firewall_virtual_ip.php:181 +#: usr/local/www/services_dhcp.php:655 usr/local/www/services_dhcpv6.php:463 +#: usr/local/www/services_dnsmasq.php:152 usr/local/www/interfaces.php:1327 +#: usr/local/www/firewall_shaper.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/firewall_shaper_queues.php:188 +#: usr/local/www/firewall_aliases.php:166 +#: usr/local/www/firewall_shaper_wizards.php:97 +#: usr/local/www/services_dhcp.php:675 usr/local/www/firewall_nat_out.php:312 +#: usr/local/www/services_dnsmasq.php:154 usr/local/www/interfaces.php:1369 +#: usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/services_dnsmasq.php:175 usr/local/www/interfaces.php:1364 +#: usr/local/www/firewall_shaper_layer7.php:401 usr/local/www/vpn_pppoe.php:98 +#: usr/local/www/firewall_shaper.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/vpn_ipsec.php:139 usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_shaper_queues.php:188 +#: usr/local/www/firewall_aliases.php:166 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/firewall_shaper_wizards.php:97 +#: usr/local/www/services_dhcp.php:675 usr/local/www/firewall_nat.php:183 +#: usr/local/www/load_balancer_setting.php:110 +#: usr/local/www/services_dhcpv6.php:463 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_npt.php:87 +#: usr/local/www/firewall_nat_1to1.php:87 +#: usr/local/www/services_captiveportal_zones.php:48 +#: usr/local/www/services_igmpproxy.php:90 +#: usr/local/www/load_balancer_monitor.php:100 +#: usr/local/www/services_dnsmasq.php:175 +#: usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/system_gateways.php:134 +#: usr/local/www/load_balancer_virtual_server.php:106 +#: usr/local/www/vpn_ipsec_keys.php:85 usr/local/www/interfaces.php:1364 +msgid "You must apply the changes in order for them to take effect." +msgstr "ã‚ãªãŸã¯ãれらを有効ã«ã™ã‚‹ãŸã‚ã«å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/load_balancer_virtual_server.php:115 +#: usr/local/www/load_balancer_relay_action.php:126 +#: usr/local/www/load_balancer_pool.php:118 +#: usr/local/www/load_balancer_monitor.php:109 +#: usr/local/www/load_balancer_relay_protocol.php:122 +#: usr/local/www/status_lb_pool.php:120 usr/local/www/status_lb_vs.php:67 +#: usr/local/www/load_balancer_setting.php:119 +#: usr/local/www/load_balancer_setting.php:118 +#: usr/local/www/load_balancer_virtual_server.php:113 +#: usr/local/www/load_balancer_monitor.php:107 +#: usr/local/www/load_balancer_relay_protocol.php:120 +#: usr/local/www/load_balancer_relay_action.php:124 +#: usr/local/www/load_balancer_pool.php:116 +#: usr/local/www/load_balancer_relay_protocol.php:120 +#: usr/local/www/load_balancer_relay_action.php:124 +#: usr/local/www/status_lb_pool.php:120 +#: usr/local/www/load_balancer_setting.php:118 +#: usr/local/www/load_balancer_pool.php:116 +#: usr/local/www/load_balancer_monitor.php:107 +#: usr/local/www/load_balancer_virtual_server.php:113 +#: usr/local/www/status_lb_vs.php:67 +msgid "Pools" +msgstr "プール" + +#: usr/local/www/load_balancer_virtual_server.php:117 +#: usr/local/www/load_balancer_relay_action.php:125 +#: usr/local/www/load_balancer_pool.php:120 +#: usr/local/www/load_balancer_monitor.php:111 +#: usr/local/www/load_balancer_relay_protocol.php:121 +#: usr/local/www/load_balancer_setting.php:121 +#: usr/local/www/load_balancer_setting.php:120 +#: usr/local/www/load_balancer_virtual_server.php:115 +#: usr/local/www/load_balancer_monitor.php:109 +#: usr/local/www/load_balancer_relay_protocol.php:119 +#: usr/local/www/load_balancer_relay_action.php:123 +#: usr/local/www/load_balancer_pool.php:118 +#: usr/local/www/load_balancer_relay_protocol.php:119 +#: usr/local/www/load_balancer_relay_action.php:123 +#: usr/local/www/load_balancer_setting.php:120 +#: usr/local/www/load_balancer_pool.php:118 +#: usr/local/www/load_balancer_monitor.php:109 +#: usr/local/www/load_balancer_virtual_server.php:115 +msgid "Monitors" +msgstr "モニター" + +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/firewall_shaper_layer7.php:466 +#: usr/local/www/interfaces_bridge_edit.php:291 +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:185 +#: usr/local/www/firewall_nat_edit.php:518 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:456 +#: usr/local/www/firewall_rules_edit.php:808 +#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/diag_ipsec_spd.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:424 +#: usr/local/www/status_upnp.php:86 +#: usr/local/www/services_rfc2136_edit.php:186 +#: usr/local/www/system_advanced_admin.php:300 +#: usr/local/www/vpn_ipsec_phase2.php:516 +#: usr/local/www/vpn_openvpn_client.php:421 +#: usr/local/www/vpn_openvpn_client.php:861 +#: usr/local/www/vpn_openvpn_server.php:656 +#: usr/local/www/firewall_nat_out_edit.php:469 +#: usr/local/www/load_balancer_relay_action_edit.php:423 +#: usr/local/www/firewall_rules_edit.php:843 +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/vpn_openvpn_server.php:729 +#: usr/local/www/interfaces_bridge_edit.php:300 +#: usr/local/www/diag_packet_capture.php:160 +#: usr/local/www/vpn_ipsec_phase2.php:542 +#: usr/local/www/firewall_nat_edit.php:525 +#: usr/local/www/vpn_openvpn_client.php:426 +#: usr/local/www/vpn_openvpn_client.php:866 +#: usr/local/www/load_balancer_relay_action_edit.php:421 +#: usr/local/www/diag_ipsec_sad.php:90 +#: usr/local/www/load_balancer_virtual_server.php:128 +#: usr/local/www/vpn_openvpn_server.php:747 usr/local/www/status_upnp.php:87 +#: usr/local/www/interfaces_bridge_edit.php:301 +#: usr/local/www/diag_packet_capture.php:207 +#: usr/local/www/vpn_ipsec_phase2.php:644 +#: usr/local/www/firewall_nat_edit.php:524 +#: usr/local/www/vpn_openvpn_client.php:434 +#: usr/local/www/vpn_openvpn_client.php:919 +#: usr/local/www/diag_ipsec_spd.php:90 +#: usr/local/www/vpn_openvpn_client.php:452 +#: usr/local/www/vpn_openvpn_client.php:938 +#: usr/local/www/firewall_rules_edit.php:846 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:519 +#: usr/local/www/interfaces_bridge_edit.php:302 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:473 +#: usr/local/www/vpn_openvpn_server.php:773 +#: usr/local/www/vpn_ipsec_phase2.php:665 +#: usr/local/www/firewall_rules_edit.php:858 +#: usr/local/www/diag_logs_filter.php:171 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/firewall_rules_edit.php:857 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/interfaces_bridge_edit.php:304 +#: usr/local/www/firewall_shaper_layer7.php:466 +#: usr/local/www/vpn_openvpn_client.php:452 +#: usr/local/www/vpn_openvpn_client.php:938 +#: usr/local/www/firewall_rules_edit.php:857 +#: usr/local/www/diag_logs_filter.php:171 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/diag_ipsec_spd.php:90 +#: usr/local/www/system_advanced_admin.php:300 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:421 +#: usr/local/www/interfaces_bridge_edit.php:304 +#: usr/local/www/services_rfc2136_edit.php:186 +#: usr/local/www/load_balancer_virtual_server.php:128 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/diag_ipsec_sad.php:90 +#: usr/local/www/vpn_openvpn_server.php:773 +#: usr/local/www/vpn_ipsec_phase2.php:665 usr/local/www/status_upnp.php:87 +msgid "Protocol" +msgstr "プロトコル" + +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/diag_tables.php:133 +#: usr/local/www/interfaces_ppps_edit.php:660 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:195 +#: usr/local/www/system_advanced_notifications.php:185 +#: usr/local/www/diag_tables.php:132 +#: usr/local/www/system_advanced_notifications.php:194 +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/load_balancer_virtual_server_edit.php:169 +#: usr/local/www/interfaces_ppps_edit.php:661 +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/load_balancer_virtual_server_edit.php:167 +#: usr/local/www/interfaces_ppps_edit.php:667 usr/local/www/diag_dns.php:153 +#: usr/local/www/interfaces_ppps_edit.php:665 +#: usr/local/www/diag_tables.php:133 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:167 +#: usr/local/www/interfaces_ppps_edit.php:665 usr/local/www/diag_dns.php:153 +#: usr/local/www/system_advanced_notifications.php:194 +#: usr/local/www/load_balancer_virtual_server.php:129 +msgid "IP Address" +msgstr "IPアドレス" + +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/diag_packet_capture.php:165 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_rules.php:365 usr/local/www/firewall_rules.php:367 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:203 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:202 +#: usr/local/www/services_captiveportal.php:607 +#: usr/local/www/services_captiveportal.php:628 +#: usr/local/www/services_captiveportal.php:647 +#: usr/local/www/services_captiveportal.php:666 +#: usr/local/www/status_upnp.php:85 +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_rules.php:369 usr/local/www/firewall_rules.php:371 +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/services_captiveportal.php:643 +#: usr/local/www/services_captiveportal.php:664 +#: usr/local/www/services_captiveportal.php:686 +#: usr/local/www/services_captiveportal.php:705 +#: usr/local/www/load_balancer_virtual_server_edit.php:183 +#: usr/local/www/diag_packet_capture.php:185 +#: usr/local/www/load_balancer_pool_edit.php:211 +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_rules.php:362 usr/local/www/firewall_rules.php:364 +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/services_captiveportal.php:641 +#: usr/local/www/services_captiveportal.php:662 +#: usr/local/www/services_captiveportal.php:684 +#: usr/local/www/services_captiveportal.php:703 +#: usr/local/www/status_upnp.php:86 +#: usr/local/www/load_balancer_virtual_server_edit.php:181 +#: usr/local/www/diag_packet_capture.php:232 +#: usr/local/www/load_balancer_pool_edit.php:209 +#: usr/local/www/load_balancer_pool.php:133 usr/local/www/diag_testport.php:60 +#: usr/local/www/diag_testport.php:123 +#: usr/local/www/services_captiveportal.php:642 +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:685 +#: usr/local/www/services_captiveportal.php:704 +#: usr/local/www/diag_packet_capture.php:248 +#: usr/local/www/firewall_rules.php:360 +#: usr/local/www/services_captiveportal.php:658 +#: usr/local/www/services_captiveportal.php:679 +#: usr/local/www/services_captiveportal.php:701 +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/firewall_aliases_edit.php:486 +#: usr/local/www/diag_testport.php:60 usr/local/www/diag_testport.php:123 +#: usr/local/www/load_balancer_virtual_server_edit.php:181 +#: usr/local/www/diag_packet_capture.php:248 +#: usr/local/www/load_balancer_pool.php:133 +#: usr/local/www/firewall_rules.php:360 usr/local/www/firewall_rules.php:362 +#: usr/local/www/services_captiveportal.php:658 +#: usr/local/www/services_captiveportal.php:679 +#: usr/local/www/services_captiveportal.php:701 +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/firewall_aliases_edit.php:472 +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:209 +#: usr/local/www/status_upnp.php:86 +msgid "Port" +msgstr "ãƒãƒ¼ãƒˆ" + +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/status_lb_pool.php:62 +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/status_lb_pool.php:62 usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/load_balancer_pool_edit.php:159 +msgid "Pool" +msgstr "プール" + +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/load_balancer_virtual_server_edit.php:228 +#: usr/local/www/load_balancer_virtual_server.php:134 +#: usr/local/www/load_balancer_virtual_server_edit.php:217 +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/load_balancer_virtual_server_edit.php:215 +#: usr/local/www/load_balancer_virtual_server_edit.php:215 +#: usr/local/www/load_balancer_virtual_server.php:132 +msgid "Fall Back Pool" +msgstr "プールã®ãƒ•ォールãƒãƒƒã‚¯" + +#: usr/local/www/diag_tables.php:44 usr/local/www/diag_defaults.php:58 +#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_nanobsd.php:49 +#: usr/local/www/diag_packet_capture.php:41 +#: usr/local/www/crash_reporter.php:82 +#: usr/local/www/diag_authentication.php:69 usr/local/www/diag_backup.php:499 +#: usr/local/www/diag_confbak.php:98 usr/local/www/halt.php:59 +#: usr/local/www/diag_smart.php:14 usr/local/www/diag_states_summary.php:185 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_dns.php:34 +#: usr/local/www/reboot.php:51 usr/local/www/edit.php:39 +#: usr/local/www/diag_ping.php:43 usr/local/www/diag_resetstate.php:64 +#: usr/local/www/diag_routes.php:45 usr/local/www/diag_traceroute.php:45 +#: usr/local/www/exec.php:91 usr/local/www/fbegin.inc:367 +#: usr/local/www/diag_arp.php:261 usr/local/www/diag_ndp.php:103 +#: usr/local/www/system_firmware_restorefullbackup.php:104 +#: usr/local/www/diag_dump_states_sources.php:65 usr/local/www/fbegin.inc:385 +#: usr/local/www/diag_backup.php:576 usr/local/www/reboot.php:48 +#: usr/local/www/edit.php:42 usr/local/www/diag_dump_states.php:75 +#: usr/local/www/halt.php:54 usr/local/www/diag_states_summary.php:174 +#: usr/local/www/fbegin.inc:331 usr/local/www/diag_sockets.php:44 +#: usr/local/www/exec.php:93 usr/local/www/diag_packet_capture.php:43 +#: usr/local/www/diag_states_summary.php:176 +#: usr/local/www/diag_testport.php:49 usr/local/www/diag_defaults.php:52 +#: usr/local/www/diag_backup.php:581 usr/local/www/edit.php:41 +#: usr/local/www/fbegin.inc:323 usr/local/www/diag_dump_states.php:67 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/diag_traceroute.php:46 usr/local/www/diag_ping.php:44 +#: usr/local/www/diag_ndp.php:103 usr/local/www/reboot.php:48 +#: usr/local/www/diag_arp.php:261 usr/local/www/diag_authentication.php:69 +#: usr/local/www/diag_tables.php:44 usr/local/www/diag_testport.php:49 +#: usr/local/www/diag_dump_states.php:67 +#: usr/local/www/diag_states_summary.php:176 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/diag_defaults.php:52 +#: usr/local/www/diag_dump_states_sources.php:65 +#: usr/local/www/diag_packet_capture.php:43 usr/local/www/diag_routes.php:45 +#: usr/local/www/diag_traceroute.php:46 usr/local/www/diag_smart.php:14 +#: usr/local/www/exec.php:93 usr/local/www/halt.php:54 +#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_backup.php:581 +#: usr/local/www/diag_ping.php:44 usr/local/www/diag_resetstate.php:64 +#: usr/local/www/system_firmware_restorefullbackup.php:104 +#: usr/local/www/diag_dns.php:34 usr/local/www/edit.php:41 +#: usr/local/www/fbegin.inc:323 usr/local/www/diag_confbak.php:98 +#: usr/local/www/diag_sockets.php:44 usr/local/www/diag_nanobsd.php:49 +#: usr/local/www/crash_reporter.php:82 +msgid "Diagnostics" +msgstr "診断法" + +#: usr/local/www/diag_tables.php:44 usr/local/www/fbegin.inc:199 +#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:225 +#: usr/local/www/fbegin.inc:216 usr/local/www/diag_tables.php:44 +#: usr/local/www/fbegin.inc:216 +msgid "Tables" +msgstr "テーブル" + +#: usr/local/www/diag_tables.php:86 usr/local/www/diag_tables.php:87 +#: usr/local/www/diag_tables.php:87 +msgid "The bogons database has been updated." +msgstr "bogonsãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/diag_tables.php:118 usr/local/www/diag_tables.php:117 +#: usr/local/www/diag_tables.php:118 +msgid "Table:" +msgstr "表:" + +#: usr/local/www/diag_tables.php:152 usr/local/www/diag_tables.php:151 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:155 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:155 +msgid "No entries exist in this table." +msgstr "エントリã¯ã“ã®è¡¨ã«å­˜åœ¨ã—ã¾ã›ã‚“。" + +#: usr/local/www/diag_tables.php:160 usr/local/www/diag_backup.php:163 +#: usr/local/www/exec.php:273 usr/local/www/exec.php:283 +#: usr/local/www/system_firmware_restorefullbackup.php:166 +#: usr/local/www/diag_tables.php:159 usr/local/www/diag_backup.php:250 +#: usr/local/www/exec.php:275 usr/local/www/exec.php:285 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +#: usr/local/www/exec.php:275 usr/local/www/exec.php:285 +#: usr/local/www/diag_backup.php:250 +#: usr/local/www/system_firmware_restorefullbackup.php:166 +msgid "Download" +msgstr "ダウンロード" + +#: usr/local/www/diag_tables.php:160 usr/local/www/diag_tables.php:159 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +msgid " the latest bogon data." +msgstr "最新ã®bogonデータ。" + +#: usr/local/www/diag_tables.php:162 +#: usr/local/www/firewall_shaper_layer7.php:576 +#: usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/system_firmware_restorefullbackup.php:163 +#: usr/local/www/diag_tables.php:161 usr/local/www/services_dhcpv6.php:853 +#: usr/local/www/services_dhcpv6.php:784 usr/local/www/diag_tables.php:165 +#: usr/local/www/services_dhcpv6.php:801 +#: usr/local/www/firewall_shaper_layer7.php:571 +#: usr/local/www/firewall_shaper_layer7.php:571 +#: usr/local/www/diag_tables.php:165 usr/local/www/services_dhcpv6.php:801 +#: usr/local/www/system_firmware_restorefullbackup.php:163 +msgid "Delete" +msgstr "削除" + +#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161 +#: usr/local/www/diag_tables.php:165 usr/local/www/diag_tables.php:165 +msgid "all" +msgstr "ã™ã¹ã¦" + +#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161 +#: usr/local/www/diag_tables.php:165 usr/local/www/diag_tables.php:162 +#: usr/local/www/diag_tables.php:165 +msgid "entries in this table." +msgstr "ã“ã®è¡¨ã®ã‚¨ãƒ³ãƒˆãƒªã€‚" + +#: usr/local/www/pkg_edit.php:61 usr/local/www/pkg.php:51 +#: usr/local/www/pkg.php:55 usr/local/www/pkg_edit.php:69 +#: usr/local/www/pkg.php:55 usr/local/www/pkg_edit.php:69 +msgid "ERROR: No package defined." +msgstr "エラー:パッケージ定義ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/pkg_edit.php:256 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/services_wol_edit.php:112 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_rules_edit.php:628 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_wireless_edit.php:145 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/vpn_pppoe_edit.php:234 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 usr/local/www/pkg_edit.php:251 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 usr/local/www/pkg_edit.php:254 +#: usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/firewall_nat_edit.php:439 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +#: usr/local/www/vpn_pppoe_edit.php:237 +#: usr/local/www/interfaces_bridge_edit.php:236 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_nat_edit.php:452 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/firewall_nat_edit.php:452 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/services_wol_edit.php:112 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/vpn_pppoe_edit.php:237 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/firewall_aliases_edit.php:56 usr/local/www/pkg_edit.php:254 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/interfaces_bridge_edit.php:236 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/interfaces_qinq_edit.php:39 +msgid "Edit" +msgstr "編集" + +#: usr/local/www/pkg_edit.php:260 usr/local/www/pkg_edit.php:255 +#: usr/local/www/pkg_edit.php:258 usr/local/www/pkg_edit.php:258 +msgid "Package Editor" +msgstr "パッケージ·エディター" + +#: usr/local/www/pkg_edit.php:405 +#: usr/local/www/firewall_aliases_import.php:154 +#: usr/local/www/firewall_shaper_layer7.php:569 +#: usr/local/www/firewall_shaper_vinterface.php:307 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:546 +#: usr/local/www/diag_logs_settings.php:321 usr/local/www/diag_nanobsd.php:219 +#: usr/local/www/services_snmp.php:400 usr/local/www/services_wol_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:583 +#: usr/local/www/interfaces_gif_edit.php:218 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/interfaces_groups_edit.php:322 +#: usr/local/www/firewall_aliases_edit.php:686 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:846 +#: usr/local/www/firewall_nat_out.php:320 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:1065 +#: usr/local/www/firewall_rules_edit.php:1480 +#: usr/local/www/firewall_schedule_edit.php:1156 +#: usr/local/www/firewall_shaper.php:349 usr/local/www/interfaces.php:2443 +#: usr/local/www/interfaces_assign.php:501 usr/local/www/diag_smart.php:219 +#: usr/local/www/system.php:447 usr/local/www/interfaces_vlan_edit.php:189 +#: usr/local/www/system_firmware_settings.php:238 +#: usr/local/www/system_routes_edit.php:275 usr/local/www/vpn_ipsec.php:168 +#: usr/local/www/vpn_ipsec_keys_edit.php:144 +#: usr/local/www/vpn_ipsec_mobile.php:608 +#: usr/local/www/interfaces_lagg_edit.php:218 +#: usr/local/www/interfaces_ppps_edit.php:783 +#: usr/local/www/interfaces_qinq_edit.php:394 +#: usr/local/www/interfaces_wireless_edit.php:195 +#: usr/local/www/load_balancer_monitor_edit.php:356 +#: usr/local/www/load_balancer_pool_edit.php:311 usr/local/www/edit.php:181 +#: usr/local/www/services_captiveportal.php:923 +#: usr/local/www/services_captiveportal_ip_edit.php:231 +#: usr/local/www/services_captiveportal_mac_edit.php:203 +#: usr/local/www/services_dhcp.php:871 +#: usr/local/www/services_dhcp_edit.php:251 +#: usr/local/www/services_dhcp_relay.php:189 +#: usr/local/www/services_dnsmasq.php:209 +#: usr/local/www/services_dnsmasq_edit.php:172 usr/local/www/vpn_pptp.php:472 +#: usr/local/www/vpn_pptp_users_edit.php:168 +#: usr/local/www/load_balancer_relay_action_edit.php:557 +#: usr/local/www/load_balancer_relay_protocol_edit.php:280 +#: usr/local/www/pkg_mgr_settings.php:120 +#: usr/local/www/services_captiveportal_hostname_edit.php:203 +#: usr/local/www/services_captiveportal_vouchers.php:597 +#: usr/local/www/services_captiveportal_vouchers_edit.php:207 +#: usr/local/www/status_rrd_graph_settings.php:225 +#: usr/local/www/services_dyndns_edit.php:236 +#: usr/local/www/services_igmpproxy.php:155 +#: usr/local/www/services_igmpproxy_edit.php:280 +#: usr/local/www/services_rfc2136_edit.php:200 +#: usr/local/www/status_lb_pool.php:217 +#: usr/local/www/system_advanced_admin.php:535 +#: usr/local/www/system_advanced_firewall.php:416 +#: usr/local/www/system_advanced_misc.php:442 +#: usr/local/www/system_advanced_network.php:304 +#: usr/local/www/system_advanced_notifications.php:93 +#: usr/local/www/system_advanced_notifications.php:254 +#: usr/local/www/system_advanced_sysctl.php:104 +#: usr/local/www/system_advanced_sysctl.php:257 +#: usr/local/www/system_authservers.php:724 +#: usr/local/www/system_camanager.php:359 +#: usr/local/www/system_camanager.php:552 +#: usr/local/www/system_certmanager.php:155 +#: usr/local/www/system_certmanager.php:469 +#: usr/local/www/system_certmanager.php:787 +#: usr/local/www/system_crlmanager.php:294 +#: usr/local/www/system_crlmanager.php:387 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateways_edit.php:492 +#: usr/local/www/system_groupmanager.php:390 +#: usr/local/www/system_groupmanager_addprivs.php:224 +#: usr/local/www/system_usermanager.php:774 +#: usr/local/www/system_usermanager_addprivs.php:205 +#: usr/local/www/system_usermanager_passwordmg.php:119 +#: usr/local/www/system_usermanager_settings.php:161 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124 +#: usr/local/www/vpn_ipsec_phase1.php:855 +#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/vpn_l2tp.php:445 +#: usr/local/www/vpn_l2tp_users_edit.php:176 +#: usr/local/www/vpn_openvpn_client.php:845 +#: usr/local/www/vpn_openvpn_csc.php:658 +#: usr/local/www/vpn_openvpn_server.php:1433 +#: usr/local/www/vpn_pppoe_edit.php:589 +#: usr/local/www/firewall_nat_npt_edit.php:270 +#: usr/local/www/services_dhcpv6.php:784 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/services_dhcpv6_relay.php:190 +#: usr/local/www/system_routes_edit.php:315 +#: usr/local/www/services_unbound_acls.php:101 +#: usr/local/www/services_unbound_acls.php:306 +#: usr/local/www/diag_logs_settings.php:328 +#: usr/local/www/system_gateway_groups_edit.php:283 +#: usr/local/www/services_captiveportal_vouchers.php:604 +#: usr/local/www/services_dyndns_edit.php:366 +#: usr/local/www/firewall_nat_out.php:330 +#: usr/local/www/services_dnsmasq_edit.php:284 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dhcpv6_edit.php:237 +#: usr/local/www/firewall_nat_npt_edit.php:275 +#: usr/local/www/load_balancer_setting.php:161 +#: usr/local/www/status_rrd_graph_settings.php:226 +#: usr/local/www/pkg_edit.php:413 usr/local/www/firewall_nat_out_edit.php:662 +#: usr/local/www/system_certmanager.php:183 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_certmanager.php:953 +#: usr/local/www/load_balancer_relay_action_edit.php:556 +#: usr/local/www/firewall_rules_edit.php:1100 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/services_unbound.php:245 +#: usr/local/www/system_usermanager.php:772 +#: usr/local/www/services_igmpproxy_edit.php:282 +#: usr/local/www/system_advanced_firewall.php:475 +#: usr/local/www/firewall_aliases_edit.php:691 +#: usr/local/www/system_advanced_notifications.php:96 +#: usr/local/www/system_advanced_notifications.php:281 +#: usr/local/www/system_advanced_misc.php:485 +#: usr/local/www/firewall_shaper_vinterface.php:317 +#: usr/local/www/system_groupmanager_addprivs.php:222 +#: usr/local/www/edit.php:184 usr/local/www/services_captiveportal.php:968 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/vpn_openvpn_server.php:1575 +#: usr/local/www/services_dhcp.php:909 usr/local/www/services_ntpd.php:121 +#: usr/local/www/interfaces_bridge_edit.php:592 +#: usr/local/www/system_camanager.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:674 +#: usr/local/www/firewall_nat_edit.php:854 +#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:2644 +#: usr/local/www/vpn_openvpn_client.php:850 +#: usr/local/www/load_balancer_pool_edit.php:328 +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/services_snmp.php:414 usr/local/www/system.php:476 +#: usr/local/www/interfaces_gre_edit.php:228 +#: usr/local/www/vpn_ipsec_phase1.php:868 usr/local/www/diag_nanobsd.php:218 +#: usr/local/www/services_dhcpv6.php:574 usr/local/www/services_dhcpv6.php:879 +#: usr/local/www/vpn_pppoe_edit.php:590 +#: usr/local/www/system_routes_edit.php:316 +#: usr/local/www/diag_logs_settings.php:348 +#: usr/local/www/system_gateway_groups_edit.php:343 +#: usr/local/www/interfaces_vlan_edit.php:190 +#: usr/local/www/services_dnsmasq.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:618 +#: usr/local/www/firewall_nat_out.php:331 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/services_captiveportal_vouchers_edit.php:205 +#: usr/local/www/firewall_nat_1to1_edit.php:464 +#: usr/local/www/services_dhcpv6_edit.php:239 +#: usr/local/www/services_router_advertisements.php:400 +#: usr/local/www/firewall_nat_npt_edit.php:274 +#: usr/local/www/load_balancer_setting.php:160 usr/local/www/vpn_ipsec.php:167 +#: usr/local/www/services_dhcp_relay.php:190 +#: usr/local/www/services_captiveportal_hostname_edit.php:201 +#: usr/local/www/vpn_ipsec_mobile.php:657 usr/local/www/pkg_edit.php:416 +#: usr/local/www/interfaces_qinq_edit.php:395 +#: usr/local/www/interfaces_gif_edit.php:219 +#: usr/local/www/firewall_shaper.php:350 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/services_captiveportal_mac_edit.php:201 +#: usr/local/www/firewall_schedule_edit.php:1155 +#: usr/local/www/interfaces_ppps_edit.php:784 +#: usr/local/www/system_crlmanager.php:295 +#: usr/local/www/system_crlmanager.php:388 +#: usr/local/www/system_crlmanager.php:420 +#: usr/local/www/firewall_aliases_edit.php:694 usr/local/www/vpn_pptp.php:474 +#: usr/local/www/interfaces_lagg_edit.php:219 +#: usr/local/www/vpn_openvpn_csc.php:657 +#: usr/local/www/system_advanced_misc.php:534 +#: usr/local/www/firewall_shaper_vinterface.php:319 +#: usr/local/www/services_captiveportal.php:964 +#: usr/local/www/system_gateways_edit.php:627 +#: usr/local/www/services_dhcpv6_relay.php:191 +#: usr/local/www/system_usermanager_passwordmg.php:120 +#: usr/local/www/interfaces_assign.php:495 +#: usr/local/www/services_captiveportal_ip_edit.php:229 +#: usr/local/www/vpn_openvpn_server.php:1616 +#: usr/local/www/services_dhcp.php:1113 +#: usr/local/www/system_firmware_settings.php:251 +#: usr/local/www/services_ntpd.php:151 +#: usr/local/www/interfaces_bridge_edit.php:593 +#: usr/local/www/interfaces_groups_edit.php:323 +#: usr/local/www/vpn_ipsec_phase2.php:770 +#: usr/local/www/firewall_nat_edit.php:853 +#: usr/local/www/vpn_pptp_users_edit.php:169 +#: usr/local/www/vpn_ipsec_keys_edit.php:143 +#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:2632 +#: usr/local/www/vpn_openvpn_client.php:903 +#: usr/local/www/load_balancer_pool_edit.php:326 +#: usr/local/www/vpn_l2tp_users_edit.php:177 usr/local/www/vpn_l2tp.php:446 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/services_snmp.php:415 usr/local/www/system.php:469 +#: usr/local/www/vpn_ipsec_phase1.php:865 usr/local/www/diag_nanobsd.php:209 +#: usr/local/www/diag_nanobsd.php:277 usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/system_authservers.php:729 usr/local/www/vpn_l2tp.php:449 +#: usr/local/www/system_gateways_edit.php:632 +#: usr/local/www/system_camanager.php:366 +#: usr/local/www/system_camanager.php:577 +#: usr/local/www/services_captiveportal_ip_edit.php:223 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/vpn_openvpn_client.php:922 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1566 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:790 usr/local/www/vpn_ipsec.php:173 +#: usr/local/www/system_firmware_settings.php:260 +#: usr/local/www/interfaces_lagg_edit.php:232 +#: usr/local/www/firewall_nat_edit.php:849 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/diag_smart.php:240 +#: usr/local/www/services_captiveportal_vouchers.php:627 +#: usr/local/www/vpn_pppoe_edit.php:593 usr/local/www/services_dhcp.php:1126 +#: usr/local/www/system_certmanager.php:186 +#: usr/local/www/system_certmanager.php:577 +#: usr/local/www/system_certmanager.php:995 +#: usr/local/www/system_advanced_misc.php:546 +#: usr/local/www/services_captiveportal_mac_edit.php:214 +#: usr/local/www/services_dhcpv6.php:827 +#: usr/local/www/system_usermanager_passwordmg.php:125 +#: usr/local/www/system_authservers.php:745 +#: usr/local/www/system_advanced_firewall.php:537 +#: usr/local/www/services_captiveportal.php:966 usr/local/www/vpn_pptp.php:477 +#: usr/local/www/pkg_edit.php:420 usr/local/www/edit.php:185 +#: usr/local/www/interfaces_bridge_edit.php:594 +#: usr/local/www/services_dnsmasq.php:235 +#: usr/local/www/vpn_ipsec_phase1.php:886 +#: usr/local/www/firewall_nat_out_edit.php:664 +#: usr/local/www/vpn_openvpn_server.php:1668 +#: usr/local/www/vpn_ipsec_phase2.php:791 usr/local/www/services_snmp.php:430 +#: usr/local/www/interfaces_qinq_edit.php:398 +#: usr/local/www/interfaces.php:2664 +#: usr/local/www/firewall_shaper_layer7.php:565 +#: usr/local/www/services_router_advertisements.php:395 +#: usr/local/www/system_gateways_edit.php:634 +#: usr/local/www/services_dyndns_edit.php:378 +#: usr/local/www/firewall_rules_edit.php:1128 +#: usr/local/www/firewall_rules_edit.php:1602 +#: usr/local/www/system_firmware_settings.php:266 usr/local/www/system.php:467 +#: usr/local/www/firewall_nat_edit.php:889 +#: usr/local/www/firewall_virtual_ip_edit.php:491 +#: usr/local/www/services_dhcp.php:1146 +#: usr/local/www/system_certmanager.php:578 +#: usr/local/www/system_certmanager.php:999 +#: usr/local/www/system_advanced_misc.php:667 +#: usr/local/www/system_routes_edit.php:339 +#: usr/local/www/firewall_nat_out.php:338 +#: usr/local/www/system_gateway_groups_edit.php:344 +#: usr/local/www/system_advanced_firewall.php:538 +#: usr/local/www/services_captiveportal.php:982 +#: usr/local/www/firewall_aliases_edit.php:725 +#: usr/local/www/pkg_mgr_settings.php:123 +#: usr/local/www/system_usermanager_settings.php:164 +#: usr/local/www/services_dnsmasq.php:248 +#: usr/local/www/system_advanced_network.php:305 +#: usr/local/www/firewall_nat_out_edit.php:704 +#: usr/local/www/diag_nanobsd.php:200 usr/local/www/interfaces.php:2710 +#: usr/local/www/system_gateways_edit.php:664 +#: usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/firewall_rules_edit.php:1613 +#: usr/local/www/interfaces_ppps_edit.php:787 +#: usr/local/www/interfaces_lagg_edit.php:231 +#: usr/local/www/firewall_nat_edit.php:890 +#: usr/local/www/system_routes_edit.php:349 +#: usr/local/www/firewall_nat_out.php:337 +#: usr/local/www/interfaces_groups_edit.php:320 usr/local/www/pkg_edit.php:422 +#: usr/local/www/interfaces_bridge_edit.php:598 +#: usr/local/www/services_dnsmasq.php:312 usr/local/www/interfaces.php:2699 +#: usr/local/www/firewall_shaper_layer7.php:565 usr/local/www/vpn_l2tp.php:449 +#: usr/local/www/services_router_advertisements.php:395 +#: usr/local/www/system_gateways_edit.php:665 +#: usr/local/www/system_camanager.php:366 +#: usr/local/www/system_camanager.php:577 +#: usr/local/www/services_captiveportal_ip_edit.php:223 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/firewall_shaper.php:350 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/system_groupmanager.php:390 +#: usr/local/www/diag_logs_settings.php:348 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/firewall_shaper_vinterface.php:319 +#: usr/local/www/vpn_openvpn_client.php:922 +#: usr/local/www/system_usermanager_addprivs.php:205 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:378 +#: usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/firewall_rules_edit.php:1613 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:787 usr/local/www/vpn_ipsec.php:173 +#: usr/local/www/system_firmware_settings.php:266 +#: usr/local/www/vpn_openvpn_csc.php:657 +#: usr/local/www/interfaces_lagg_edit.php:231 usr/local/www/system.php:467 +#: usr/local/www/firewall_schedule_edit.php:1155 +#: usr/local/www/firewall_nat_edit.php:890 +#: usr/local/www/services_captiveportal_hostname_edit.php:203 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/vpn_ipsec_keys_edit.php:143 +#: usr/local/www/services_wol_edit.php:157 +#: usr/local/www/firewall_virtual_ip_edit.php:491 +#: usr/local/www/services_ntpd.php:151 +#: usr/local/www/status_rrd_graph_settings.php:226 +#: usr/local/www/services_dhcpv6_relay.php:191 +#: usr/local/www/firewall_aliases_import.php:154 +#: usr/local/www/diag_smart.php:240 +#: usr/local/www/services_captiveportal_vouchers.php:632 +#: usr/local/www/vpn_pppoe_edit.php:593 usr/local/www/services_dhcp.php:1146 +#: usr/local/www/services_captiveportal_vouchers_edit.php:205 +#: usr/local/www/system_certmanager.php:186 +#: usr/local/www/system_certmanager.php:578 +#: usr/local/www/system_certmanager.php:999 +#: usr/local/www/status_lb_pool.php:217 +#: usr/local/www/load_balancer_setting.php:160 +#: usr/local/www/system_advanced_admin.php:535 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/system_advanced_misc.php:667 +#: usr/local/www/system_routes_edit.php:343 +#: usr/local/www/services_captiveportal_mac_edit.php:214 +#: usr/local/www/system_crlmanager.php:295 +#: usr/local/www/system_crlmanager.php:388 +#: usr/local/www/system_crlmanager.php:420 +#: usr/local/www/services_dhcpv6.php:827 +#: usr/local/www/firewall_nat_out.php:337 +#: usr/local/www/system_usermanager_passwordmg.php:125 +#: usr/local/www/firewall_nat_npt_edit.php:274 +#: usr/local/www/interfaces_groups_edit.php:320 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/system_gateway_groups_edit.php:344 +#: usr/local/www/system_authservers.php:745 +#: usr/local/www/system_advanced_firewall.php:538 +#: usr/local/www/services_captiveportal.php:982 +#: usr/local/www/system_groupmanager_addprivs.php:224 +#: usr/local/www/firewall_aliases_edit.php:711 usr/local/www/vpn_pptp.php:477 +#: usr/local/www/pkg_mgr_settings.php:123 +#: usr/local/www/system_usermanager_settings.php:164 +#: usr/local/www/pkg_edit.php:422 usr/local/www/edit.php:185 +#: usr/local/www/vpn_l2tp_users_edit.php:177 +#: usr/local/www/interfaces_bridge_edit.php:598 +#: usr/local/www/services_igmpproxy_edit.php:282 +#: usr/local/www/services_igmpproxy.php:155 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124 +#: usr/local/www/system_advanced_notifications.php:96 +#: usr/local/www/system_advanced_notifications.php:281 +#: usr/local/www/vpn_pptp_users_edit.php:169 +#: usr/local/www/services_rfc2136_edit.php:200 +#: usr/local/www/services_dnsmasq.php:312 +#: usr/local/www/vpn_ipsec_phase1.php:886 +#: usr/local/www/system_usermanager.php:772 +#: usr/local/www/vpn_ipsec_mobile.php:657 +#: usr/local/www/load_balancer_pool_edit.php:326 +#: usr/local/www/system_advanced_network.php:305 +#: usr/local/www/firewall_nat_out_edit.php:704 +#: usr/local/www/vpn_openvpn_server.php:1668 +#: usr/local/www/vpn_ipsec_phase2.php:791 usr/local/www/diag_nanobsd.php:200 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/services_dhcp_relay.php:190 +#: usr/local/www/interfaces_assign.php:501 usr/local/www/services_snmp.php:430 +#: usr/local/www/interfaces_qinq_edit.php:395 +#: usr/local/www/system_advanced_sysctl.php:104 +#: usr/local/www/system_advanced_sysctl.php:257 +#: usr/local/www/interfaces.php:2699 +msgid "Save" +msgstr "ä¿å­˜" + +#: usr/local/www/pkg_edit.php:415 usr/local/www/firewall_rules_edit.php:1077 +#: usr/local/www/pkg_edit.php:424 usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/pkg_edit.php:427 usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/pkg_edit.php:431 usr/local/www/firewall_rules_edit.php:1140 +#: usr/local/www/firewall_rules_edit.php:1139 usr/local/www/pkg_edit.php:433 +#: usr/local/www/firewall_rules_edit.php:1139 usr/local/www/pkg_edit.php:433 +msgid "Advanced features" +msgstr "é«˜åº¦ãªæ©Ÿèƒ½" + +#: usr/local/www/pkg_edit.php:817 usr/local/www/firewall_shaper_layer7.php:65 +#: usr/local/www/diag_packet_capture.php:203 usr/local/www/vpn_ipsec.php:422 +#: usr/local/www/interfaces_wireless.php:133 usr/local/www/vpn_pptp.php:477 +#: usr/local/www/status_graph.php:291 usr/local/www/carp_status.php:194 +#: usr/local/www/status_queues.php:172 usr/local/www/status_graph_cpu.php:53 +#: usr/local/www/vpn_pppoe_edit.php:595 usr/local/www/vpn_ipsec.php:433 +#: usr/local/www/status_graph.php:286 usr/local/www/pkg_edit.php:864 +#: usr/local/www/status_queues.php:180 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/carp_status.php:187 +#: usr/local/www/vpn_ipsec.php:432 usr/local/www/status_graph.php:297 +#: usr/local/www/pkg_edit.php:873 usr/local/www/status_queues.php:181 +#: usr/local/www/vpn_pptp.php:479 usr/local/www/interfaces_wireless.php:134 +#: usr/local/www/diag_packet_capture.php:270 usr/local/www/vpn_ipsec.php:438 +#: usr/local/www/status_graph.php:308 +#: usr/local/www/interfaces_wireless.php:136 +#: usr/local/www/vpn_pppoe_edit.php:599 usr/local/www/vpn_pptp.php:482 +#: usr/local/www/pkg_edit.php:917 usr/local/www/status_queues.php:163 +#: usr/local/www/status_graph.php:330 +#: usr/local/www/diag_packet_capture.php:208 +#: usr/local/www/diag_packet_capture.php:288 usr/local/www/pkg_edit.php:921 +#: usr/local/www/firewall_shaper_layer7.php:65 usr/local/www/vpn_ipsec.php:438 +#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph.php:330 +#: usr/local/www/diag_packet_capture.php:208 +#: usr/local/www/diag_packet_capture.php:288 +#: usr/local/www/interfaces_wireless.php:136 +#: usr/local/www/vpn_pppoe_edit.php:599 usr/local/www/vpn_pptp.php:482 +#: usr/local/www/pkg_edit.php:921 usr/local/www/status_queues.php:163 +#: usr/local/www/carp_status.php:187 +msgid "Note" +msgstr "ノート" + +#: usr/local/www/pkg_edit.php:823 usr/local/www/pkg_edit.php:835 +#: usr/local/www/firewall_aliases_import.php:155 +#: usr/local/www/firewall_shaper_layer7.php:573 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:546 +#: usr/local/www/services_wol_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:583 +#: usr/local/www/interfaces_gif_edit.php:218 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/interfaces_groups_edit.php:323 +#: usr/local/www/firewall_aliases_edit.php:687 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:846 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:1065 +#: usr/local/www/firewall_rules_edit.php:1480 +#: usr/local/www/firewall_schedule_edit.php:1157 +#: usr/local/www/interfaces.php:1443 usr/local/www/interfaces.php:1549 +#: usr/local/www/interfaces.php:2444 +#: usr/local/www/interfaces_vlan_edit.php:189 +#: usr/local/www/system_routes_edit.php:255 +#: usr/local/www/system_routes_edit.php:275 +#: usr/local/www/interfaces_lagg_edit.php:218 +#: usr/local/www/interfaces_ppps_edit.php:784 +#: usr/local/www/interfaces_qinq_edit.php:395 +#: usr/local/www/interfaces_wireless_edit.php:195 +#: usr/local/www/load_balancer_monitor_edit.php:356 +#: usr/local/www/load_balancer_pool_edit.php:312 +#: usr/local/www/load_balancer_virtual_server_edit.php:280 +#: usr/local/www/services_captiveportal.php:924 +#: usr/local/www/services_dhcp_edit.php:251 +#: usr/local/www/services_dnsmasq_edit.php:172 +#: usr/local/www/load_balancer_relay_action_edit.php:557 +#: usr/local/www/load_balancer_relay_protocol_edit.php:280 +#: usr/local/www/services_captiveportal_vouchers.php:598 +#: usr/local/www/services_dyndns_edit.php:237 +#: usr/local/www/services_igmpproxy_edit.php:281 +#: usr/local/www/services_rfc2136_edit.php:201 +#: usr/local/www/system_advanced_sysctl.php:258 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateways_edit.php:492 +#: usr/local/www/system_groupmanager_addprivs.php:225 +#: usr/local/www/system_usermanager_addprivs.php:206 +#: usr/local/www/vpn_l2tp_users_edit.php:177 +#: usr/local/www/vpn_pppoe_edit.php:590 +#: usr/local/www/firewall_nat_npt_edit.php:270 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/system_routes_edit.php:287 +#: usr/local/www/system_routes_edit.php:315 +#: usr/local/www/services_unbound_acls.php:306 +#: usr/local/www/system_gateway_groups_edit.php:283 +#: usr/local/www/services_captiveportal_vouchers.php:605 +#: usr/local/www/services_dyndns_edit.php:367 +#: usr/local/www/services_dnsmasq_edit.php:284 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dhcpv6_edit.php:237 +#: usr/local/www/firewall_nat_npt_edit.php:275 usr/local/www/pkg_edit.php:870 +#: usr/local/www/firewall_nat_out_edit.php:662 +#: usr/local/www/load_balancer_relay_action_edit.php:556 +#: usr/local/www/firewall_rules_edit.php:1100 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/services_igmpproxy_edit.php:283 +#: usr/local/www/firewall_aliases_edit.php:692 +#: usr/local/www/system_groupmanager_addprivs.php:223 +#: usr/local/www/services_captiveportal.php:969 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/load_balancer_virtual_server_edit.php:269 +#: usr/local/www/interfaces_bridge_edit.php:592 +#: usr/local/www/firewall_nat_edit.php:854 +#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:1655 +#: usr/local/www/interfaces.php:2645 +#: usr/local/www/load_balancer_pool_edit.php:329 +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/interfaces_gre_edit.php:228 +#: usr/local/www/vpn_pppoe_edit.php:591 +#: usr/local/www/system_routes_edit.php:288 +#: usr/local/www/system_routes_edit.php:316 +#: usr/local/www/system_gateway_groups_edit.php:343 +#: usr/local/www/interfaces_vlan_edit.php:190 +#: usr/local/www/services_captiveportal_vouchers.php:619 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/firewall_nat_1to1_edit.php:464 +#: usr/local/www/services_dhcpv6_edit.php:239 +#: usr/local/www/firewall_nat_npt_edit.php:274 usr/local/www/pkg_edit.php:879 +#: usr/local/www/interfaces_qinq_edit.php:396 +#: usr/local/www/interfaces_gif_edit.php:219 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/firewall_schedule_edit.php:1156 +#: usr/local/www/interfaces_ppps_edit.php:785 +#: usr/local/www/firewall_aliases_edit.php:695 +#: usr/local/www/interfaces_lagg_edit.php:219 +#: usr/local/www/services_captiveportal.php:965 +#: usr/local/www/system_gateways_edit.php:627 +#: usr/local/www/load_balancer_virtual_server_edit.php:267 +#: usr/local/www/interfaces_bridge_edit.php:593 +#: usr/local/www/interfaces_groups_edit.php:324 +#: usr/local/www/firewall_nat_edit.php:853 +#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:1537 +#: usr/local/www/interfaces.php:1643 usr/local/www/interfaces.php:2633 +#: usr/local/www/load_balancer_pool_edit.php:327 +#: usr/local/www/vpn_l2tp_users_edit.php:178 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/system_gateways_edit.php:632 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:371 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1566 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:791 +#: usr/local/www/interfaces_lagg_edit.php:232 +#: usr/local/www/firewall_nat_edit.php:849 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/services_captiveportal_vouchers.php:628 +#: usr/local/www/vpn_pppoe_edit.php:594 +#: usr/local/www/services_captiveportal.php:967 usr/local/www/pkg_edit.php:923 +#: usr/local/www/interfaces_bridge_edit.php:594 +#: usr/local/www/firewall_nat_out_edit.php:664 +#: usr/local/www/interfaces_qinq_edit.php:399 +#: usr/local/www/interfaces.php:1547 usr/local/www/interfaces.php:1652 +#: usr/local/www/interfaces.php:2665 +#: usr/local/www/firewall_shaper_layer7.php:568 +#: usr/local/www/system_gateways_edit.php:634 +#: usr/local/www/services_dyndns_edit.php:379 +#: usr/local/www/firewall_rules_edit.php:1128 +#: usr/local/www/firewall_rules_edit.php:1602 +#: usr/local/www/firewall_nat_edit.php:889 +#: usr/local/www/firewall_virtual_ip_edit.php:491 +#: usr/local/www/system_routes_edit.php:313 +#: usr/local/www/system_routes_edit.php:339 +#: usr/local/www/system_gateway_groups_edit.php:344 +#: usr/local/www/services_captiveportal.php:983 +#: usr/local/www/firewall_aliases_edit.php:726 +#: usr/local/www/firewall_nat_out_edit.php:704 +#: usr/local/www/interfaces.php:1592 usr/local/www/interfaces.php:1698 +#: usr/local/www/interfaces.php:2711 +#: usr/local/www/system_gateways_edit.php:664 +#: usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/firewall_rules_edit.php:1613 +#: usr/local/www/interfaces_ppps_edit.php:788 +#: usr/local/www/interfaces_lagg_edit.php:231 +#: usr/local/www/firewall_nat_edit.php:890 +#: usr/local/www/system_routes_edit.php:319 +#: usr/local/www/system_routes_edit.php:349 +#: usr/local/www/interfaces_groups_edit.php:321 usr/local/www/pkg_edit.php:927 +#: usr/local/www/interfaces_bridge_edit.php:598 +#: usr/local/www/interfaces.php:1586 usr/local/www/interfaces.php:1691 +#: usr/local/www/interfaces.php:2700 +#: usr/local/www/firewall_shaper_layer7.php:568 +#: usr/local/www/system_gateways_edit.php:665 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/system_usermanager_addprivs.php:206 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:379 +#: usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/firewall_rules_edit.php:1613 +#: usr/local/www/load_balancer_virtual_server_edit.php:267 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:788 +#: usr/local/www/interfaces_lagg_edit.php:231 +#: usr/local/www/firewall_schedule_edit.php:1156 +#: usr/local/www/firewall_nat_edit.php:890 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/services_wol_edit.php:157 +#: usr/local/www/firewall_virtual_ip_edit.php:491 +#: usr/local/www/firewall_aliases_import.php:155 +#: usr/local/www/services_captiveportal_vouchers.php:633 +#: usr/local/www/vpn_pppoe_edit.php:594 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/system_routes_edit.php:313 +#: usr/local/www/system_routes_edit.php:343 +#: usr/local/www/firewall_nat_npt_edit.php:274 +#: usr/local/www/interfaces_groups_edit.php:321 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/system_gateway_groups_edit.php:344 +#: usr/local/www/services_captiveportal.php:983 +#: usr/local/www/system_groupmanager_addprivs.php:225 +#: usr/local/www/firewall_aliases_edit.php:712 usr/local/www/pkg_edit.php:927 +#: usr/local/www/vpn_l2tp_users_edit.php:178 +#: usr/local/www/interfaces_bridge_edit.php:598 +#: usr/local/www/services_igmpproxy_edit.php:283 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/services_rfc2136_edit.php:201 +#: usr/local/www/load_balancer_pool_edit.php:327 +#: usr/local/www/firewall_nat_out_edit.php:704 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/interfaces_qinq_edit.php:396 +#: usr/local/www/system_advanced_sysctl.php:258 +#: usr/local/www/interfaces.php:1586 usr/local/www/interfaces.php:1691 +#: usr/local/www/interfaces.php:2700 +msgid "Cancel" +msgstr "キャンセル" + +#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:1083 +#: usr/local/www/firewall_rules_edit.php:1117 +#: usr/local/www/firewall_rules_edit.php:1133 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1217 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1291 +#: usr/local/www/firewall_rules_edit.php:1342 +#: usr/local/www/firewall_rules_edit.php:1392 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/interfaces.php:1330 usr/local/www/interfaces.php:1940 +#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcp.php:741 +#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcp.php:765 +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:799 +#: usr/local/www/services_dnsmasq.php:194 +#: usr/local/www/services_dnsmasq.php:197 +#: usr/local/www/services_dnsmasq.php:200 usr/local/www/fbegin.inc:83 +#: usr/local/www/system_gateways_edit.php:415 +#: usr/local/www/vpn_openvpn_client.php:829 +#: usr/local/www/vpn_openvpn_csc.php:642 +#: usr/local/www/vpn_openvpn_server.php:1412 +#: usr/local/www/services_dhcpv6.php:651 usr/local/www/services_dhcpv6.php:667 +#: usr/local/www/services_dhcpv6.php:679 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcpv6.php:703 usr/local/www/services_dhcpv6.php:725 +#: usr/local/www/fbegin.inc:99 usr/local/www/pkg_edit.php:1052 +#: usr/local/www/firewall_rules_edit.php:943 +#: usr/local/www/firewall_rules_edit.php:1118 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/firewall_rules_edit.php:1168 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1252 +#: usr/local/www/firewall_rules_edit.php:1276 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1331 +#: usr/local/www/firewall_rules_edit.php:1358 +#: usr/local/www/firewall_rules_edit.php:1413 +#: usr/local/www/firewall_rules_edit.php:1463 +#: usr/local/www/firewall_rules_edit.php:1517 +#: usr/local/www/services_unbound_advanced.php:88 +#: usr/local/www/system_gateways_edit.php:436 +#: usr/local/www/vpn_openvpn_server.php:1554 +#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcp.php:779 +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcp.php:803 +#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcp.php:837 +#: usr/local/www/firewall_nat_edit.php:538 usr/local/www/interfaces.php:1434 +#: usr/local/www/interfaces.php:2118 usr/local/www/vpn_openvpn_client.php:834 +#: usr/local/www/services_dhcpv6.php:744 usr/local/www/services_dhcpv6.php:760 +#: usr/local/www/services_dhcpv6.php:773 usr/local/www/services_dhcpv6.php:786 +#: usr/local/www/services_dhcpv6.php:798 usr/local/www/services_dhcpv6.php:820 +#: usr/local/www/services_dnsmasq.php:195 +#: usr/local/www/services_dnsmasq.php:198 +#: usr/local/www/services_dnsmasq.php:201 usr/local/www/fbegin.inc:108 +#: usr/local/www/pkg_edit.php:1063 usr/local/www/vpn_openvpn_csc.php:641 +#: usr/local/www/system_gateways_edit.php:542 +#: usr/local/www/vpn_openvpn_server.php:1596 +#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcp.php:961 +#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcp.php:987 +#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcp.php:1011 +#: usr/local/www/services_dhcp.php:1034 +#: usr/local/www/firewall_nat_edit.php:537 usr/local/www/interfaces.php:1422 +#: usr/local/www/interfaces.php:2106 usr/local/www/vpn_openvpn_client.php:883 +#: usr/local/www/services_dhcpv6.php:675 usr/local/www/services_dhcpv6.php:704 +#: usr/local/www/services_dhcpv6.php:717 usr/local/www/services_dhcpv6.php:729 +#: usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/system_gateways_edit.php:546 +#: usr/local/www/vpn_openvpn_client.php:902 +#: usr/local/www/firewall_rules_edit.php:952 +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1267 +#: usr/local/www/firewall_rules_edit.php:1303 +#: usr/local/www/firewall_rules_edit.php:1346 +#: usr/local/www/firewall_rules_edit.php:1373 +#: usr/local/www/firewall_rules_edit.php:1428 +#: usr/local/www/firewall_rules_edit.php:1478 +#: usr/local/www/firewall_rules_edit.php:1532 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:974 +#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcp.php:1000 +#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcp.php:1024 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:692 +#: usr/local/www/services_dhcpv6.php:708 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcpv6.php:734 usr/local/www/services_dhcpv6.php:746 +#: usr/local/www/services_dhcpv6.php:768 usr/local/www/pkg_edit.php:1107 +#: usr/local/www/fbegin.inc:100 usr/local/www/services_dnsmasq.php:220 +#: usr/local/www/services_dnsmasq.php:223 +#: usr/local/www/services_dnsmasq.php:226 +#: usr/local/www/vpn_openvpn_server.php:1648 usr/local/www/interfaces.php:1435 +#: usr/local/www/interfaces.php:2136 +#: usr/local/www/system_gateways_edit.php:548 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_rules_edit.php:1146 +#: usr/local/www/firewall_rules_edit.php:1180 +#: usr/local/www/firewall_rules_edit.php:1196 +#: usr/local/www/firewall_rules_edit.php:1236 +#: usr/local/www/firewall_rules_edit.php:1298 +#: usr/local/www/firewall_rules_edit.php:1310 +#: usr/local/www/firewall_rules_edit.php:1353 +#: usr/local/www/firewall_rules_edit.php:1380 +#: usr/local/www/firewall_rules_edit.php:1435 +#: usr/local/www/firewall_rules_edit.php:1485 +#: usr/local/www/firewall_rules_edit.php:1540 +#: usr/local/www/firewall_nat_edit.php:544 usr/local/www/services_dhcp.php:978 +#: usr/local/www/services_dhcp.php:994 usr/local/www/services_dhcp.php:1008 +#: usr/local/www/services_dhcp.php:1020 usr/local/www/services_dhcp.php:1032 +#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcp.php:1067 +#: usr/local/www/services_dnsmasq.php:233 +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_dnsmasq.php:239 usr/local/www/interfaces.php:1479 +#: usr/local/www/interfaces.php:2182 +#: usr/local/www/system_gateways_edit.php:578 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:1145 +#: usr/local/www/firewall_rules_edit.php:1179 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1235 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1297 +#: usr/local/www/firewall_rules_edit.php:1309 +#: usr/local/www/firewall_rules_edit.php:1364 +#: usr/local/www/firewall_rules_edit.php:1391 +#: usr/local/www/firewall_rules_edit.php:1496 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/firewall_nat_edit.php:545 usr/local/www/pkg_edit.php:1114 +#: usr/local/www/services_dnsmasq.php:297 +#: usr/local/www/services_dnsmasq.php:300 +#: usr/local/www/services_dnsmasq.php:303 usr/local/www/interfaces.php:1474 +#: usr/local/www/interfaces.php:2171 +#: usr/local/www/system_gateways_edit.php:578 +#: usr/local/www/vpn_openvpn_client.php:902 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:1145 +#: usr/local/www/firewall_rules_edit.php:1179 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1235 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1297 +#: usr/local/www/firewall_rules_edit.php:1309 +#: usr/local/www/firewall_rules_edit.php:1364 +#: usr/local/www/firewall_rules_edit.php:1391 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/firewall_rules_edit.php:1496 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/vpn_openvpn_csc.php:641 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:978 usr/local/www/services_dhcp.php:994 +#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcp.php:1020 +#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcp.php:1044 +#: usr/local/www/services_dhcp.php:1067 usr/local/www/services_dhcpv6.php:692 +#: usr/local/www/services_dhcpv6.php:708 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcpv6.php:734 usr/local/www/services_dhcpv6.php:746 +#: usr/local/www/services_dhcpv6.php:768 usr/local/www/pkg_edit.php:1114 +#: usr/local/www/fbegin.inc:100 usr/local/www/services_dnsmasq.php:297 +#: usr/local/www/services_dnsmasq.php:300 +#: usr/local/www/services_dnsmasq.php:303 +#: usr/local/www/vpn_openvpn_server.php:1648 usr/local/www/interfaces.php:1474 +#: usr/local/www/interfaces.php:2171 +msgid "Advanced" +msgstr "高度ãª" + +#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_rules_edit.php:1083 +#: usr/local/www/firewall_rules_edit.php:1117 +#: usr/local/www/firewall_rules_edit.php:1133 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1217 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1291 +#: usr/local/www/firewall_rules_edit.php:1342 +#: usr/local/www/firewall_rules_edit.php:1392 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/interfaces.php:1330 usr/local/www/services_dnsmasq.php:197 +#: usr/local/www/pkg_edit.php:1052 usr/local/www/firewall_rules_edit.php:1118 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/firewall_rules_edit.php:1168 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1252 +#: usr/local/www/firewall_rules_edit.php:1276 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1331 +#: usr/local/www/firewall_rules_edit.php:1358 +#: usr/local/www/firewall_rules_edit.php:1413 +#: usr/local/www/firewall_rules_edit.php:1463 +#: usr/local/www/firewall_rules_edit.php:1517 +#: usr/local/www/interfaces.php:1434 usr/local/www/services_dnsmasq.php:198 +#: usr/local/www/pkg_edit.php:1063 usr/local/www/interfaces.php:1422 +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1267 +#: usr/local/www/firewall_rules_edit.php:1303 +#: usr/local/www/firewall_rules_edit.php:1346 +#: usr/local/www/firewall_rules_edit.php:1373 +#: usr/local/www/firewall_rules_edit.php:1428 +#: usr/local/www/firewall_rules_edit.php:1478 +#: usr/local/www/firewall_rules_edit.php:1532 usr/local/www/pkg_edit.php:1107 +#: usr/local/www/services_dnsmasq.php:223 usr/local/www/interfaces.php:1435 +#: usr/local/www/firewall_rules_edit.php:1146 +#: usr/local/www/firewall_rules_edit.php:1180 +#: usr/local/www/firewall_rules_edit.php:1196 +#: usr/local/www/firewall_rules_edit.php:1236 +#: usr/local/www/firewall_rules_edit.php:1298 +#: usr/local/www/firewall_rules_edit.php:1310 +#: usr/local/www/firewall_rules_edit.php:1353 +#: usr/local/www/firewall_rules_edit.php:1380 +#: usr/local/www/firewall_rules_edit.php:1435 +#: usr/local/www/firewall_rules_edit.php:1485 +#: usr/local/www/firewall_rules_edit.php:1540 +#: usr/local/www/services_dnsmasq.php:236 usr/local/www/interfaces.php:1479 +#: usr/local/www/firewall_rules_edit.php:1145 +#: usr/local/www/firewall_rules_edit.php:1179 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1235 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1297 +#: usr/local/www/firewall_rules_edit.php:1309 +#: usr/local/www/firewall_rules_edit.php:1364 +#: usr/local/www/firewall_rules_edit.php:1391 +#: usr/local/www/firewall_rules_edit.php:1496 +#: usr/local/www/firewall_rules_edit.php:1551 usr/local/www/pkg_edit.php:1114 +#: usr/local/www/services_dnsmasq.php:300 usr/local/www/interfaces.php:1474 +#: usr/local/www/firewall_rules_edit.php:1145 +#: usr/local/www/firewall_rules_edit.php:1179 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1235 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1297 +#: usr/local/www/firewall_rules_edit.php:1309 +#: usr/local/www/firewall_rules_edit.php:1364 +#: usr/local/www/firewall_rules_edit.php:1391 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/firewall_rules_edit.php:1496 +#: usr/local/www/firewall_rules_edit.php:1551 usr/local/www/pkg_edit.php:1114 +#: usr/local/www/services_dnsmasq.php:300 usr/local/www/interfaces.php:1474 +msgid "Show advanced option" +msgstr "高度ãªã‚ªãƒ—ションを表示ã™ã‚‹" + +#: usr/local/www/pkg_mgr_installed.php:45 +#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs.php:77 usr/local/www/diag_logs_auth.php:65 +#: usr/local/www/diag_logs_dhcp.php:70 usr/local/www/diag_logs_filter.php:101 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_ipsec.php:102 usr/local/www/diag_logs_ntpd.php:65 +#: usr/local/www/diag_logs_openvpn.php:69 +#: usr/local/www/diag_logs_settings.php:210 +#: usr/local/www/diag_logs_vpn.php:126 usr/local/www/diag_backup.php:117 +#: usr/local/www/system.php:74 usr/local/www/system.php:231 +#: usr/local/www/system.php:251 usr/local/www/system_firmware.php:102 +#: usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_settings.php:74 +#: usr/local/www/system_routes.php:94 usr/local/www/system_routes_edit.php:165 +#: usr/local/www/diag_logs_filter_summary.php:184 +#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/diag_logs_relayd.php:66 +#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81 +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_settings.php:62 +#: usr/local/www/fbegin.inc:319 usr/local/www/fbegin.inc:440 +#: usr/local/www/status_rrd_graph.php:329 +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_settings.php:53 +#: usr/local/www/status_rrd_graph_settings.php:128 +#: usr/local/www/system_advanced_admin.php:242 +#: usr/local/www/system_advanced_firewall.php:178 +#: usr/local/www/system_advanced_misc.php:179 +#: usr/local/www/system_advanced_network.php:148 +#: usr/local/www/system_advanced_notifications.php:131 +#: usr/local/www/system_advanced_sysctl.php:125 +#: usr/local/www/system_authservers.php:44 +#: usr/local/www/system_camanager.php:50 +#: usr/local/www/system_certmanager.php:51 +#: usr/local/www/system_crlmanager.php:46 +#: usr/local/www/system_gateway_groups.php:88 +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways.php:120 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/system_usermanager.php:54 +#: usr/local/www/system_usermanager_passwordmg.php:43 +#: usr/local/www/system_usermanager_settings.php:51 +#: usr/local/www/diag_logs_wireless.php:67 +#: usr/local/www/diag_logs_routing.php:65 +#: usr/local/www/system_routes_edit.php:198 usr/local/www/pkg_mgr.php:55 +#: usr/local/www/pkg_mgr.php:93 usr/local/www/diag_logs_settings.php:215 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/fbegin.inc:337 usr/local/www/fbegin.inc:458 +#: usr/local/www/status_rrd_graph_settings.php:129 +#: usr/local/www/system_certmanager.php:56 usr/local/www/diag_backup.php:195 +#: usr/local/www/diag_logs_resolver.php:78 +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 +#: usr/local/www/system_advanced_notifications.php:140 +#: usr/local/www/status_rrd_graph.php:377 +#: usr/local/www/system_advanced_misc.php:199 +#: usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/system_hasync.php:96 usr/local/www/diag_logs_gateways.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:98 usr/local/www/system.php:75 +#: usr/local/www/system.php:242 usr/local/www/system.php:262 +#: usr/local/www/diag_logs_routing.php:66 +#: usr/local/www/diag_logs_settings.php:222 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/fbegin.inc:283 usr/local/www/fbegin.inc:428 +#: usr/local/www/diag_logs_relayd.php:67 usr/local/www/diag_logs_auth.php:66 +#: usr/local/www/diag_logs_ipsec.php:103 +#: usr/local/www/diag_logs_resolver.php:79 usr/local/www/diag_logs_ntpd.php:66 +#: usr/local/www/system_advanced_misc.php:218 +#: usr/local/www/diag_logs_dhcp.php:71 +#: usr/local/www/system_gateway_groups.php:89 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/diag_logs_wireless.php:68 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210 +#: usr/local/www/diag_logs_filter_summary.php:185 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_gateways.php:79 +#: usr/local/www/diag_logs_openvpn.php:70 +#: usr/local/www/diag_logs_filter_dynamic.php:99 usr/local/www/system.php:235 +#: usr/local/www/system.php:255 usr/local/www/diag_logs_filter.php:91 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_camanager.php:51 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/status_rrd_graph.php:402 +#: usr/local/www/diag_logs_filter_dynamic.php:97 +#: usr/local/www/system_routes.php:98 usr/local/www/system_hasync.php:97 +#: usr/local/www/system_certmanager.php:57 +#: usr/local/www/system_advanced_misc.php:222 +#: usr/local/www/diag_logs_ppp.php:68 +#: usr/local/www/system_advanced_firewall.php:221 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:275 +#: usr/local/www/fbegin.inc:420 usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/system_advanced_misc.php:254 usr/local/www/pkg_mgr.php:94 +#: usr/local/www/system_routes_edit.php:227 +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/system_gateway_groups.php:98 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_routes.php:113 +#: usr/local/www/system_routes_edit.php:229 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:210 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_camanager.php:51 usr/local/www/diag_logs_auth.php:66 +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/diag_logs_settings.php:222 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_routing.php:66 usr/local/www/system.php:75 +#: usr/local/www/system.php:235 usr/local/www/system.php:255 +#: usr/local/www/diag_logs_dhcp.php:71 usr/local/www/status_rrd_graph.php:402 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 +#: usr/local/www/status_rrd_graph_settings.php:53 +#: usr/local/www/status_rrd_graph_settings.php:129 +#: usr/local/www/diag_logs.php:77 +#: usr/local/www/diag_logs_filter_dynamic.php:97 +#: usr/local/www/system_routes.php:113 usr/local/www/diag_logs_ntpd.php:66 +#: usr/local/www/system_hasync.php:97 usr/local/www/system_certmanager.php:57 +#: usr/local/www/diag_logs_openvpn.php:70 +#: usr/local/www/system_advanced_admin.php:242 +#: usr/local/www/system_advanced_misc.php:254 usr/local/www/pkg_mgr.php:57 +#: usr/local/www/pkg_mgr.php:104 usr/local/www/diag_logs_ppp.php:68 +#: usr/local/www/system_routes_edit.php:223 +#: usr/local/www/system_crlmanager.php:46 +#: usr/local/www/system_usermanager_passwordmg.php:43 +#: usr/local/www/diag_logs_gateways.php:79 +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/system_authservers.php:44 +#: usr/local/www/system_advanced_firewall.php:221 +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/diag_backup.php:195 usr/local/www/pkg_mgr_settings.php:62 +#: usr/local/www/system_usermanager_settings.php:51 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:275 +#: usr/local/www/fbegin.inc:420 usr/local/www/diag_logs_relayd.php:67 +#: usr/local/www/diag_logs_vpn.php:126 +#: usr/local/www/system_advanced_notifications.php:140 +#: usr/local/www/diag_logs_ipsec.php:103 +#: usr/local/www/system_usermanager.php:54 +#: usr/local/www/system_gateways.php:120 +#: usr/local/www/system_advanced_network.php:148 +#: usr/local/www/diag_logs_wireless.php:68 +#: usr/local/www/system_gateway_groups.php:98 +#: usr/local/www/diag_logs_resolver.php:79 +#: usr/local/www/system_advanced_sysctl.php:125 +#: usr/local/www/diag_logs_filter_summary.php:185 +msgid "System" +msgstr "システム" + +#: usr/local/www/pkg_mgr_installed.php:45 +#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_backup.php:113 +#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81 +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/fbegin.inc:440 +#: usr/local/www/pkg_mgr.php:55 usr/local/www/pkg_mgr.php:93 +#: usr/local/www/fbegin.inc:458 usr/local/www/diag_backup.php:190 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/fbegin.inc:428 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:420 +#: usr/local/www/pkg_mgr.php:94 usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/pkg_mgr.php:57 +#: usr/local/www/pkg_mgr.php:104 usr/local/www/diag_backup.php:190 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:420 +msgid "Package Manager" +msgstr "パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼" + +#: usr/local/www/pkg_mgr_installed.php:76 usr/local/www/pkg_mgr.php:99 +#: usr/local/www/pkg_mgr.php:115 usr/local/www/pkg_mgr_installed.php:97 +#: usr/local/www/pkg_mgr_installed.php:99 usr/local/www/pkg_mgr.php:118 +#: usr/local/www/pkg_mgr_installed.php:99 usr/local/www/pkg_mgr.php:127 +msgid "Available Packages" +msgstr "利用å¯èƒ½ãªãƒ‘ッケージ" + +#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/pkg_mgr.php:103 +#: usr/local/www/pkg_mgr_settings.php:93 usr/local/www/pkg_mgr.php:119 +#: usr/local/www/pkg_mgr_installed.php:101 +#: usr/local/www/pkg_mgr_installed.php:103 usr/local/www/pkg_mgr.php:122 +#: usr/local/www/pkg_mgr_settings.php:92 +#: usr/local/www/pkg_mgr_installed.php:103 usr/local/www/pkg_mgr.php:128 +#: usr/local/www/pkg_mgr_settings.php:92 +msgid "Installed Packages" +msgstr "インストール済ã¿ãƒ‘ッケージ" + +#: usr/local/www/pkg_mgr_installed.php:90 usr/local/www/pkg_mgr.php:113 +msgid "Package Name" +msgstr "パッケージå" + +#: usr/local/www/pkg_mgr_installed.php:91 usr/local/www/pkg_mgr.php:114 +#: usr/local/www/pkg_mgr.php:130 usr/local/www/pkg_mgr_installed.php:112 +#: usr/local/www/pkg_mgr_installed.php:114 usr/local/www/pkg_mgr.php:133 +#: usr/local/www/pkg_mgr_installed.php:114 usr/local/www/pkg_mgr.php:180 +msgid "Category" +msgstr "カテゴリ" + +#: usr/local/www/pkg_mgr_installed.php:92 +#: usr/local/www/pkg_mgr_installed.php:150 usr/local/www/pkg_mgr.php:117 +#: usr/local/www/pkg_mgr.php:200 +msgid "Package Info" +msgstr "パッケージ情報" + +#: usr/local/www/pkg_mgr_installed.php:93 +msgid "Package Version" +msgstr "パッケージãƒãƒ¼ã‚¸ãƒ§ãƒ³" + +#: usr/local/www/pkg_mgr_installed.php:116 +#: usr/local/www/pkg_mgr_installed.php:122 +#: usr/local/www/pkg_mgr_installed.php:142 +#: usr/local/www/pkg_mgr_installed.php:144 +#: usr/local/www/pkg_mgr_installed.php:151 +#: usr/local/www/pkg_mgr_installed.php:153 +#: usr/local/www/pkg_mgr_installed.php:146 +#: usr/local/www/pkg_mgr_installed.php:155 +#: usr/local/www/pkg_mgr_installed.php:144 +#: usr/local/www/pkg_mgr_installed.php:146 +#: usr/local/www/pkg_mgr_installed.php:153 +#: usr/local/www/pkg_mgr_installed.php:155 +msgid "Available" +msgstr "利用ã§ãã‚‹" + +#: usr/local/www/pkg_mgr_installed.php:117 +#: usr/local/www/pkg_mgr_installed.php:123 +#: usr/local/www/pkg_mgr_installed.php:145 +#: usr/local/www/pkg_mgr_installed.php:154 +#: usr/local/www/pkg_mgr_installed.php:147 +#: usr/local/www/pkg_mgr_installed.php:156 +#: usr/local/www/pkg_mgr_installed.php:147 +#: usr/local/www/pkg_mgr_installed.php:156 +msgid "Installed" +msgstr "インストールã•れã¦" + +#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202 +msgid "No info, check the" +msgstr "情報無ã€ãƒã‚§ãƒƒã‚¯ã—ãªã„" + +#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202 +msgid "forum" +msgstr "フォーラム" + +#: usr/local/www/pkg_mgr_installed.php:163 +msgid "Do you really want to remove this package?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ‘ッケージを削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/pkg_mgr_installed.php:164 +msgid "Remove this package." +msgstr "ã“ã®ãƒ‘ッケージを削除ã—ã¾ã™ã€‚" + +#: usr/local/www/pkg_mgr_installed.php:168 +msgid "Reinstall this package." +msgstr "ã“ã®ãƒ‘ッケージをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„。" + +#: usr/local/www/pkg_mgr_installed.php:171 +msgid "Reinstall this package's GUI components." +msgstr "ã“ã®ãƒ‘ッケージã®GUIコンãƒãƒ¼ãƒãƒ³ãƒˆã‚’å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚" + +#: usr/local/www/pkg_mgr_installed.php:181 +#: usr/local/www/pkg_mgr_installed.php:222 +#: usr/local/www/pkg_mgr_installed.php:225 +#: usr/local/www/pkg_mgr_installed.php:227 +#: usr/local/www/pkg_mgr_installed.php:227 +msgid "There are no packages currently installed." +msgstr "ç¾åœ¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãªã„パッケージãŒã‚りã¾ã›ã‚“。" + +#: usr/local/www/easyrule.php:34 usr/local/www/easyrule.php:34 +msgid "Status : EasyRule" +msgstr "ステータス: EasyRule" + +#: usr/local/www/easyrule.php:69 usr/local/www/easyrule.php:69 +msgid "Message" +msgstr "メッセージ" + +#: usr/local/www/easyrule.php:72 usr/local/www/easyrule.php:72 +msgid "" +"This is the Easy Rule status page, mainly used to display errors when adding " +"rules. If you are seeing this, there apparently was not an error, and you " +"navigated to the page directly without telling it what to do" +msgstr "ルールを"ã“れã¯ä¸»ã«è¿½åŠ ã™ã‚‹ã¨ãã«ã‚¨ãƒ©ãƒ¼ã‚’表示ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れるã€ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸ã€ã§ã™ã€‚ã‚ãªãŸã¯ã“れを見ã¦ã„ã‚‹å ´åˆã¯ã€æ˜Žã‚‰ã‹ã«èª¤ã‚ŠãŒãªã‹ã£ãŸã—ã€ã‚ãªãŸãŒã€Œä½•を行ã†ã«ã¯ã€ãれをä¼ãˆã‚‹ã“ã¨ãªãã€ç›´æŽ¥ãƒšãƒ¼ã‚¸ã«ç§»å‹•" + +#: usr/local/www/easyrule.php:75 usr/local/www/easyrule.php:75 +msgid "" +"This page is meant to be called from the block/pass buttons on the Firewall " +"Logs page" +msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€ãƒ•ァイアウォールã®ãƒ­ã‚°ãƒšãƒ¼ã‚¸ä¸Šã®ãƒ–ロック/パスボタンã‹ã‚‰å‘¼ã³å‡ºã•れるã“ã¨ã‚’æ„図ã—ã¦" + +#: usr/local/www/easyrule.php:75 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs_auth.php:54 usr/local/www/diag_logs_dhcp.php:59 +#: usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/status_wireless.php:41 usr/local/www/status_wireless.php:77 +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/pkg_mgr.php:116 usr/local/www/diag_ipsec.php:48 +#: usr/local/www/diag_ipsec.php:96 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_pkglogs.php:81 +#: usr/local/www/status_filter_reload.php:44 usr/local/www/status_graph.php:85 +#: usr/local/www/carp_status.php:100 usr/local/www/carp_status.php:140 +#: usr/local/www/status_interfaces.php:58 +#: usr/local/www/status_interfaces.php:85 usr/local/www/fbegin.inc:359 +#: usr/local/www/status_queues.php:98 usr/local/www/status_rrd_graph.php:224 +#: usr/local/www/status_rrd_graph_settings.php:113 +#: usr/local/www/status_services.php:226 usr/local/www/status_services.php:246 +#: usr/local/www/status_upnp.php:58 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/status_dhcp_leases.php:48 +#: usr/local/www/status_gateway_groups.php:52 +#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:77 +#: usr/local/www/status_graph_cpu.php:41 usr/local/www/status_lb_pool.php:62 +#: usr/local/www/status_lb_vs.php:56 usr/local/www/status_lb_vs.php:80 +#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:212 +#: usr/local/www/status_openvpn.php:263 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:43 +#: usr/local/www/status_dhcpv6_leases.php:49 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_routing.php:54 usr/local/www/pkg_mgr.php:131 +#: usr/local/www/diag_logs_settings.php:136 usr/local/www/fbegin.inc:377 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/status_queues.php:101 usr/local/www/diag_ipsec.php:107 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/status_rrd_graph.php:244 usr/local/www/status_ntpd.php:94 +#: usr/local/www/status_ntpd.php:107 usr/local/www/status_dhcpv6_leases.php:50 +#: usr/local/www/status_dhcp_leases.php:49 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266 +#: usr/local/www/diag_logs_settings.php:143 usr/local/www/fbegin.inc:323 +#: usr/local/www/status_interfaces.php:60 +#: usr/local/www/status_interfaces.php:88 usr/local/www/carp_status.php:92 +#: usr/local/www/carp_status.php:133 usr/local/www/status_graph.php:90 +#: usr/local/www/diag_ipsec.php:108 usr/local/www/status_wireless.php:78 +#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:123 +#: usr/local/www/status_services.php:222 usr/local/www/status_services.php:242 +#: usr/local/www/status_gateways.php:78 usr/local/www/diag_logs_filter.php:79 +#: usr/local/www/status_services.php:220 usr/local/www/status_services.php:240 +#: usr/local/www/status_openvpn.php:314 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_graph.php:101 usr/local/www/diag_ipsec.php:110 +#: usr/local/www/status_rrd_graph.php:248 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:315 +#: usr/local/www/status_services.php:63 usr/local/www/status_services.php:81 +#: usr/local/www/status_openvpn.php:273 usr/local/www/status_openvpn.php:334 +#: usr/local/www/diag_logs_filter.php:109 usr/local/www/status_graph.php:111 +#: usr/local/www/pkg_mgr.php:134 usr/local/www/status_ntpd.php:115 +#: usr/local/www/status_ntpd.php:129 usr/local/www/status_services.php:63 +#: usr/local/www/status_services.php:81 +#: usr/local/www/status_dhcpv6_leases.php:50 +#: usr/local/www/status_wireless.php:41 usr/local/www/status_wireless.php:78 +#: usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:273 +#: usr/local/www/status_openvpn.php:334 usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_graph_cpu.php:41 +#: usr/local/www/diag_logs_routing.php:54 usr/local/www/status_graph.php:111 +#: usr/local/www/diag_logs_dhcp.php:59 +#: usr/local/www/status_filter_reload.php:44 usr/local/www/diag_ipsec.php:48 +#: usr/local/www/diag_ipsec.php:110 usr/local/www/status_rrd_graph.php:248 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/status_interfaces.php:60 +#: usr/local/www/status_interfaces.php:88 usr/local/www/diag_ipsec_spd.php:49 +#: usr/local/www/diag_logs_openvpn.php:45 usr/local/www/status_lb_pool.php:62 +#: usr/local/www/pkg_mgr.php:182 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/diag_pkglogs.php:81 usr/local/www/status_ntpd.php:115 +#: usr/local/www/status_ntpd.php:129 usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_dhcp_leases.php:49 usr/local/www/status_queues.php:109 +#: usr/local/www/status_gateway_groups.php:52 usr/local/www/fbegin.inc:315 +#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_ipsec.php:91 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:43 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_lb_vs.php:56 usr/local/www/status_lb_vs.php:80 +#: usr/local/www/diag_ipsec_sad.php:49 usr/local/www/status_gateways.php:51 +#: usr/local/www/status_gateways.php:78 +#: usr/local/www/diag_logs_wireless.php:56 usr/local/www/status_upnp.php:58 +#: usr/local/www/easyrule.php:75 usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/carp_status.php:92 usr/local/www/carp_status.php:133 +msgid "Status" +msgstr "ステータス" + +#: usr/local/www/easyrule.php:75 usr/local/www/easyrule.php:75 +msgid "System Logs, Firewall Tab" +msgstr "システムログã€ãƒ•ァイアウォールタブ" + +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/diag_logs.php:78 usr/local/www/diag_logs_auth.php:66 +#: usr/local/www/diag_logs_dhcp.php:71 usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter.php:102 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_ipsec.php:103 usr/local/www/diag_logs_ntpd.php:66 +#: usr/local/www/diag_logs_openvpn.php:70 +#: usr/local/www/diag_logs_settings.php:211 +#: usr/local/www/diag_logs_vpn.php:127 usr/local/www/firewall_aliases.php:150 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_rules.php:52 +#: usr/local/www/firewall_rules_edit.php:628 +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/firewall_shaper.php:54 +#: usr/local/www/firewall_virtual_ip.php:149 +#: usr/local/www/diag_logs_filter_summary.php:185 +#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_relayd.php:67 +#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:335 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/diag_logs_wireless.php:68 +#: usr/local/www/diag_logs_routing.php:66 +#: usr/local/www/diag_logs_settings.php:216 usr/local/www/fbegin.inc:353 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/diag_logs_resolver.php:79 +#: usr/local/www/firewall_aliases.php:153 +#: usr/local/www/diag_logs_gateways.php:79 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/diag_logs_filter_dynamic.php:99 +#: usr/local/www/diag_logs_routing.php:67 +#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:299 +#: usr/local/www/diag_logs_relayd.php:68 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:165 usr/local/www/diag_logs_auth.php:67 +#: usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/diag_logs_ipsec.php:104 +#: usr/local/www/diag_logs_resolver.php:80 usr/local/www/diag_logs_ntpd.php:67 +#: usr/local/www/firewall_rules.php:49 usr/local/www/diag_logs_dhcp.php:72 +#: usr/local/www/diag_logs_wireless.php:69 +#: usr/local/www/diag_logs_filter_summary.php:186 +#: usr/local/www/firewall_aliases.php:155 +#: usr/local/www/diag_logs_gateways.php:80 +#: usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/diag_logs_openvpn.php:71 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/firewall_virtual_ip.php:152 +#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_filter.php:92 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/firewall_virtual_ip.php:166 +#: usr/local/www/firewall_nat_edit.php:439 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +#: usr/local/www/diag_logs_filter_dynamic.php:98 +#: usr/local/www/diag_logs_ppp.php:69 usr/local/www/fbegin.inc:291 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_aliases.php:154 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper.php:54 usr/local/www/diag_logs_auth.php:67 +#: usr/local/www/diag_logs_settings.php:223 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/diag_logs_routing.php:67 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/firewall_nat_edit.php:452 +#: usr/local/www/firewall_aliases.php:154 usr/local/www/diag_logs_dhcp.php:72 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/firewall_shaper_wizards.php:73 usr/local/www/diag_logs.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:98 +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/diag_logs_ntpd.php:67 usr/local/www/firewall_nat.php:166 +#: usr/local/www/diag_logs_openvpn.php:71 usr/local/www/diag_logs_ppp.php:69 +#: usr/local/www/firewall_nat_out.php:301 usr/local/www/firewall_rules.php:49 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/diag_logs_gateways.php:80 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/firewall_nat_1to1_edit.php:221 usr/local/www/fbegin.inc:291 +#: usr/local/www/diag_logs_relayd.php:68 usr/local/www/diag_logs_vpn.php:127 +#: usr/local/www/diag_logs_ipsec.php:104 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/diag_logs_wireless.php:69 +#: usr/local/www/diag_logs_resolver.php:80 +#: usr/local/www/diag_logs_filter_summary.php:186 +msgid "Firewall" +msgstr "ファイアウォール" + +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/firewall_aliases.php:150 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/diag_backup.php:103 usr/local/www/fbegin.inc:110 +#: usr/local/www/fbegin.inc:127 usr/local/www/services_dnsmasq_edit.php:225 +#: usr/local/www/diag_backup.php:180 usr/local/www/firewall_aliases.php:153 +#: usr/local/www/fbegin.inc:136 usr/local/www/services_dnsmasq_edit.php:226 +#: usr/local/www/firewall_aliases.php:155 usr/local/www/fbegin.inc:128 +#: usr/local/www/firewall_aliases.php:154 +#: usr/local/www/firewall_aliases.php:154 +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/diag_backup.php:180 +#: usr/local/www/services_dnsmasq_edit.php:226 usr/local/www/fbegin.inc:128 +msgid "Aliases" +msgstr "エイリアス" + +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_aliases_import.php:48 +msgid "Bulk import" +msgstr "一括インãƒãƒ¼ãƒˆ" + +#: usr/local/www/firewall_aliases_import.php:64 +#: usr/local/www/firewall_aliases_import.php:64 +msgid "The alias name may only consist of the characters" +msgstr "エイリアスåã¯ã€æ–‡å­—ã ã‘ã§æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãã‚‹" + +#: usr/local/www/firewall_aliases_import.php:68 +#: usr/local/www/firewall_aliases_edit.php:151 +#: usr/local/www/firewall_aliases_edit.php:145 +#: usr/local/www/firewall_aliases_import.php:68 +#: usr/local/www/firewall_aliases_edit.php:145 +msgid "An alias with this name already exists." +msgstr "ã“ã®åå‰ã®åˆ¥åãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/firewall_aliases_import.php:74 +#: usr/local/www/firewall_aliases_edit.php:160 +#: usr/local/www/firewall_aliases_edit.php:154 +#: usr/local/www/firewall_aliases_import.php:74 +#: usr/local/www/firewall_aliases_edit.php:154 +#, php-format +msgid "Cannot use a reserved keyword as alias name %s" +msgstr "別å%sã¨ã—ã¦äºˆç´„キーワードを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/firewall_aliases_import.php:79 +#: usr/local/www/firewall_aliases_edit.php:165 +#: usr/local/www/firewall_aliases_edit.php:159 +#: usr/local/www/firewall_aliases_import.php:79 +#: usr/local/www/firewall_aliases_edit.php:159 +msgid "An interface description with this name already exists." +msgstr "ã“ã®åå‰ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®èª¬æ˜Žã¯ã€ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/firewall_aliases_import.php:94 +#: usr/local/www/firewall_aliases_import.php:94 +#, php-format +msgid "%s is not an IP address. Please correct the error to continue" +msgstr "%sã¯ã€IPアドレスã§ã¯ã‚りã¾ã›ã‚“。継続ã—ã¦ã€ã‚¨ãƒ©ãƒ¼ã‚’修正ã—ã¦ãã ã•ã„" + +#: usr/local/www/firewall_aliases_import.php:131 +#: usr/local/www/firewall_aliases_import.php:131 +msgid "Alias Import" +msgstr "エイリアスã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#: usr/local/www/firewall_aliases_import.php:134 +#: usr/local/www/firewall_aliases_import.php:134 +msgid "Alias Name" +msgstr "別å" + +#: usr/local/www/firewall_aliases_import.php:137 +#: usr/local/www/firewall_aliases_edit.php:585 +#: usr/local/www/firewall_aliases_import.php:137 +msgid "" +"The name of the alias may only consist of the characters "a-z, A-Z and " +"0-9"." +msgstr "AZ 〠AZ㨠"0-9 ""エイリアスã®åå‰ãŒæ–‡å­—ã®ã¿ã§æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãる〠。" + +#: usr/local/www/firewall_aliases_import.php:142 +#: usr/local/www/interfaces_lagg_edit.php:211 +#: usr/local/www/services_captiveportal_ip_edit.php:211 +#: usr/local/www/services_captiveportal_mac_edit.php:185 +#: usr/local/www/services_captiveportal_hostname_edit.php:186 +#: usr/local/www/system_gateways_edit.php:487 +#: usr/local/www/vpn_ipsec_phase1.php:580 +#: usr/local/www/vpn_ipsec_phase2.php:502 +#: usr/local/www/vpn_openvpn_client.php:577 +#: usr/local/www/vpn_openvpn_csc.php:346 +#: usr/local/www/vpn_openvpn_server.php:726 +#: usr/local/www/services_captiveportal_zones_edit.php:109 +#: usr/local/www/system_gateways_edit.php:522 +#: usr/local/www/vpn_openvpn_server.php:799 +#: usr/local/www/vpn_ipsec_phase2.php:528 +#: usr/local/www/vpn_openvpn_client.php:582 +#: usr/local/www/vpn_ipsec_phase1.php:593 +#: usr/local/www/services_captiveportal_hostname_edit.php:184 +#: usr/local/www/services_captiveportal_mac_edit.php:183 +#: usr/local/www/interfaces_lagg_edit.php:212 +#: usr/local/www/vpn_openvpn_csc.php:345 +#: usr/local/www/system_gateways_edit.php:622 +#: usr/local/www/services_captiveportal_ip_edit.php:209 +#: usr/local/www/vpn_openvpn_server.php:827 +#: usr/local/www/services_captiveportal_zones_edit.php:111 +#: usr/local/www/vpn_ipsec_phase2.php:630 +#: usr/local/www/vpn_openvpn_client.php:600 +#: usr/local/www/vpn_ipsec_phase1.php:592 +#: usr/local/www/system_gateways_edit.php:626 +#: usr/local/www/services_captiveportal_ip_edit.php:203 +#: usr/local/www/vpn_openvpn_client.php:619 +#: usr/local/www/interfaces_lagg_edit.php:225 +#: usr/local/www/services_captiveportal_mac_edit.php:196 +#: usr/local/www/vpn_ipsec_phase1.php:613 +#: usr/local/www/vpn_openvpn_server.php:854 +#: usr/local/www/vpn_ipsec_phase2.php:651 +#: usr/local/www/system_gateways_edit.php:628 +#: usr/local/www/system_gateways_edit.php:658 +#: usr/local/www/interfaces_lagg_edit.php:224 +#: usr/local/www/system_gateways_edit.php:659 +#: usr/local/www/services_captiveportal_ip_edit.php:203 +#: usr/local/www/services_captiveportal_zones_edit.php:109 +#: usr/local/www/vpn_openvpn_client.php:619 +#: usr/local/www/vpn_openvpn_csc.php:345 +#: usr/local/www/interfaces_lagg_edit.php:224 +#: usr/local/www/services_captiveportal_hostname_edit.php:186 +#: usr/local/www/firewall_aliases_import.php:142 +#: usr/local/www/services_captiveportal_mac_edit.php:196 +#: usr/local/www/vpn_ipsec_phase1.php:613 +#: usr/local/www/vpn_openvpn_server.php:854 +#: usr/local/www/vpn_ipsec_phase2.php:651 +msgid "You may enter a description here for your reference (not parsed)" +msgstr "ã“ã“ã«å‚照用ã®èª¬æ˜Žæ–‡ã‚’入力ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ï¼ˆæ§‹æ–‡è§£æžã•れã¾ã›ã‚“)" + +#: usr/local/www/firewall_aliases_import.php:146 +#: usr/local/www/firewall_aliases_import.php:146 +msgid "Aliases to import" +msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ã‚¨ã‚¤ãƒªã‚¢ã‚¹" + +#: usr/local/www/firewall_aliases_import.php:148 +#: usr/local/www/firewall_aliases_import.php:148 +msgid "" +"Paste in the aliases to import separated by a carriage return. Common " +"examples are lists of IPs, networks, blacklists, etc." +msgstr "「キャリッジリターンã§åŒºåˆ‡ã‚‰ã‚ŒãŸã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹åˆ¥åã«è²¼ã‚Šä»˜ã‘ã¾ã™ã€‚共通ã€ã®ä¾‹ã§ã‚ã‚‹ãªã©IPSã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ãƒ–ラックリストã®ä¸€è¦§è¡¨ç¤º" + +#: usr/local/www/firewall_aliases_import.php:149 +#: usr/local/www/firewall_aliases_import.php:149 +msgid "The list may contain only IP addresses." +msgstr "リストã¯ã€ IPアドレスをå«ã‚“ã§ã‚‚よã„。" + +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_shaper.php:54 usr/local/www/diag_backup.php:121 +#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:131 +#: usr/local/www/diag_backup.php:199 usr/local/www/fbegin.inc:140 +#: usr/local/www/fbegin.inc:132 usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper.php:54 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/diag_backup.php:199 usr/local/www/fbegin.inc:132 +msgid "Traffic Shaper" +msgstr "トラフィックシェー" + +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_layer7.php:410 +#: usr/local/www/firewall_shaper_vinterface.php:375 +#: usr/local/www/firewall_shaper_wizards.php:105 +#: usr/local/www/firewall_rules_edit.php:1443 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_queues.php:196 +#: usr/local/www/firewall_rules_edit.php:1514 +#: usr/local/www/firewall_shaper_vinterface.php:385 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_vinterface.php:392 +#: usr/local/www/firewall_rules_edit.php:1529 +#: usr/local/www/firewall_shaper.php:414 +#: usr/local/www/firewall_shaper_vinterface.php:395 +#: usr/local/www/firewall_rules_edit.php:1537 +#: usr/local/www/firewall_shaper_queues.php:197 +#: usr/local/www/firewall_shaper_wizards.php:106 +#: usr/local/www/firewall_rules_edit.php:1548 +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_layer7.php:410 +#: usr/local/www/firewall_shaper.php:414 +#: usr/local/www/firewall_shaper_vinterface.php:395 +#: usr/local/www/firewall_rules_edit.php:1548 +#: usr/local/www/firewall_shaper_queues.php:197 +#: usr/local/www/firewall_shaper_wizards.php:106 +msgid "Layer7" +msgstr "レイヤ7" + +#: usr/local/www/firewall_shaper_layer7.php:66 +#: usr/local/www/firewall_shaper_layer7.php:66 +msgid "You can add new layer7 protocol patterns by simply uploading the file" +msgstr "ã‚ãªãŸã¯ã€å˜ã«ãƒ•ァイルをアップロードã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€æ–°ãŸãªãƒ¬ã‚¤ãƒ¤7プロトコルã®ãƒ‘ターンを追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/firewall_shaper_layer7.php:66 +#: usr/local/www/firewall_virtual_ip.php:243 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2559 usr/local/www/carp_status.php:196 +#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/carp_status.php:189 usr/local/www/status_queues.php:183 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/firewall_virtual_ip.php:249 +#: usr/local/www/firewall_virtual_ip.php:269 +#: usr/local/www/status_queues.php:165 usr/local/www/interfaces.php:2774 +#: usr/local/www/interfaces.php:2783 usr/local/www/interfaces.php:2820 +#: usr/local/www/interfaces.php:2829 usr/local/www/firewall_virtual_ip.php:292 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +#: usr/local/www/firewall_shaper_layer7.php:66 +#: usr/local/www/firewall_virtual_ip.php:292 +#: usr/local/www/status_queues.php:165 usr/local/www/interfaces.php:2806 +#: usr/local/www/interfaces.php:2815 usr/local/www/carp_status.php:189 +msgid "here" +msgstr "ã“ã“ã«" + +#: usr/local/www/firewall_shaper_layer7.php:111 +#: usr/local/www/firewall_shaper_layer7.php:111 +msgid "Layer7 Rules Container not found!" +msgstr "レイヤ7ルールコンテナãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ ï¼" + +#: usr/local/www/firewall_shaper_layer7.php:161 +#: usr/local/www/firewall_shaper_layer7.php:161 +msgid "Found the following repeated protocol definitions" +msgstr "次ã®å復プロトコル定義を見ã¤ã‘ãŸ" + +#: usr/local/www/firewall_shaper_layer7.php:401 +#: usr/local/www/firewall_shaper_queues.php:187 +#: usr/local/www/firewall_shaper_queues.php:188 +#: usr/local/www/firewall_shaper_layer7.php:401 +#: usr/local/www/firewall_shaper_queues.php:188 +msgid "The traffic shaper configuration has been changed" +msgstr "ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚·ã‚§ãƒ¼ãƒ‘ã®æ§‹æˆãŒå¤‰æ›´ã•れã¾ã—ãŸ" + +#: usr/local/www/firewall_shaper_layer7.php:407 +#: usr/local/www/firewall_shaper_vinterface.php:372 +#: usr/local/www/firewall_shaper_wizards.php:102 +#: usr/local/www/firewall_shaper.php:409 +#: usr/local/www/firewall_shaper_queues.php:193 +#: usr/local/www/firewall_shaper_vinterface.php:382 +#: usr/local/www/firewall_shaper.php:410 +#: usr/local/www/firewall_shaper_vinterface.php:389 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:392 +#: usr/local/www/firewall_shaper_queues.php:194 +#: usr/local/www/firewall_shaper_wizards.php:103 +#: usr/local/www/firewall_shaper_layer7.php:407 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:392 +#: usr/local/www/firewall_shaper_queues.php:194 +#: usr/local/www/firewall_shaper_wizards.php:103 +msgid "By Interface" +msgstr "インタフェースã§" + +#: usr/local/www/firewall_shaper_layer7.php:408 +#: usr/local/www/firewall_shaper_vinterface.php:373 +#: usr/local/www/firewall_shaper_wizards.php:103 +#: usr/local/www/firewall_shaper.php:410 +#: usr/local/www/firewall_shaper_queues.php:194 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:390 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:393 +#: usr/local/www/firewall_shaper_queues.php:195 +#: usr/local/www/firewall_shaper_wizards.php:104 +#: usr/local/www/firewall_shaper_layer7.php:408 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:393 +#: usr/local/www/firewall_shaper_queues.php:195 +#: usr/local/www/firewall_shaper_wizards.php:104 +msgid "By Queue" +msgstr "キューã«ã‚ˆã£ã¦" + +#: usr/local/www/firewall_shaper_layer7.php:409 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_vinterface.php:374 +#: usr/local/www/firewall_shaper_wizards.php:104 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_queues.php:195 +#: usr/local/www/firewall_shaper_vinterface.php:384 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:391 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_vinterface.php:394 +#: usr/local/www/firewall_shaper_queues.php:196 +#: usr/local/www/firewall_shaper_wizards.php:105 +#: usr/local/www/firewall_shaper_layer7.php:409 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_vinterface.php:394 +#: usr/local/www/firewall_shaper_queues.php:196 +#: usr/local/www/firewall_shaper_wizards.php:105 +msgid "Limiter" +msgstr "リミッタ" + +#: usr/local/www/firewall_shaper_layer7.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_shaper_wizards.php:106 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_queues.php:197 +#: usr/local/www/vpn_openvpn_client.php:368 +#: usr/local/www/vpn_openvpn_csc.php:296 +#: usr/local/www/vpn_openvpn_server.php:586 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/vpn_openvpn_server.php:659 +#: usr/local/www/vpn_openvpn_client.php:373 +#: usr/local/www/firewall_shaper.php:414 usr/local/www/vpn_openvpn_csc.php:295 +#: usr/local/www/firewall_shaper_vinterface.php:393 +#: usr/local/www/vpn_openvpn_server.php:677 +#: usr/local/www/vpn_openvpn_client.php:381 +#: usr/local/www/vpn_openvpn_client.php:399 +#: usr/local/www/vpn_openvpn_server.php:703 +#: usr/local/www/firewall_shaper.php:415 +#: usr/local/www/firewall_shaper_vinterface.php:396 +#: usr/local/www/firewall_shaper_queues.php:198 +#: usr/local/www/firewall_shaper_wizards.php:107 +#: usr/local/www/firewall_shaper_layer7.php:411 +#: usr/local/www/firewall_shaper.php:415 +#: usr/local/www/firewall_shaper_vinterface.php:396 +#: usr/local/www/vpn_openvpn_client.php:399 +#: usr/local/www/vpn_openvpn_csc.php:295 +#: usr/local/www/firewall_shaper_queues.php:198 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_shaper_wizards.php:107 +#: usr/local/www/vpn_openvpn_server.php:703 +msgid "Wizards" +msgstr "ウィザーズ" + +#: usr/local/www/firewall_shaper_layer7.php:432 +#: usr/local/www/firewall_shaper_layer7.php:432 +msgid "Create new l7 rules group" +msgstr "æ–°ã—ã„L7ルール·グループを作æˆã™ã‚‹" + +#: usr/local/www/firewall_shaper_layer7.php:445 +#: usr/local/www/firewall_shaper_layer7.php:445 +msgid "Rule(s)" +msgstr "è¦å‰‡ï¼ˆå˜æ•°ã¾ãŸã¯è¤‡æ•°ï¼‰" + +#: usr/local/www/firewall_shaper_layer7.php:457 +#: usr/local/www/firewall_shaper_layer7.php:457 +msgid "Add one or more rules" +msgstr "1ã¤ä»¥ä¸Šã®ãƒ«ãƒ¼ãƒ«ã‚’追加" + +#: usr/local/www/firewall_shaper_layer7.php:473 +#: usr/local/www/firewall_shaper_layer7.php:473 +msgid "Structure" +msgstr "構造" + +#: usr/local/www/firewall_shaper_layer7.php:480 +#: usr/local/www/firewall_shaper_layer7.php:480 +msgid "Behaviour" +msgstr "行動" + +#: usr/local/www/firewall_shaper_layer7.php:558 +#: usr/local/www/interfaces_groups_edit.php:315 +#: usr/local/www/firewall_aliases_edit.php:680 +#: usr/local/www/interfaces_qinq_edit.php:387 +#: usr/local/www/services_dhcp.php:855 +#: usr/local/www/services_igmpproxy_edit.php:273 +#: usr/local/www/vpn_pppoe_edit.php:573 usr/local/www/services_dhcpv6.php:768 +#: usr/local/www/services_unbound_acls.php:279 +#: usr/local/www/services_dnsmasq_edit.php:271 +#: usr/local/www/system_certmanager.php:793 +#: usr/local/www/services_igmpproxy_edit.php:275 +#: usr/local/www/firewall_aliases_edit.php:685 +#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:863 +#: usr/local/www/vpn_pppoe_edit.php:574 +#: usr/local/www/services_dnsmasq_edit.php:272 +#: usr/local/www/services_router_advertisements.php:358 +#: usr/local/www/interfaces_qinq_edit.php:388 +#: usr/local/www/firewall_aliases_edit.php:688 +#: usr/local/www/services_dhcp.php:1090 +#: usr/local/www/interfaces_groups_edit.php:316 +#: usr/local/www/services_dhcpv6.php:794 usr/local/www/vpn_pppoe_edit.php:577 +#: usr/local/www/services_dhcp.php:1103 +#: usr/local/www/system_certmanager.php:818 +#: usr/local/www/services_dhcpv6.php:811 +#: usr/local/www/interfaces_qinq_edit.php:391 +#: usr/local/www/firewall_shaper_layer7.php:555 +#: usr/local/www/services_router_advertisements.php:353 +#: usr/local/www/services_dhcp.php:1123 +#: usr/local/www/system_certmanager.php:820 +#: usr/local/www/firewall_aliases_edit.php:717 +#: usr/local/www/interfaces_groups_edit.php:313 +#: usr/local/www/firewall_shaper_layer7.php:555 +#: usr/local/www/services_router_advertisements.php:353 +#: usr/local/www/vpn_pppoe_edit.php:577 usr/local/www/services_dhcp.php:1123 +#: usr/local/www/system_certmanager.php:820 +#: usr/local/www/services_dhcpv6.php:811 +#: usr/local/www/interfaces_groups_edit.php:313 +#: usr/local/www/firewall_aliases_edit.php:703 +#: usr/local/www/services_igmpproxy_edit.php:275 +#: usr/local/www/services_dnsmasq_edit.php:272 +#: usr/local/www/interfaces_qinq_edit.php:388 +msgid "add another entry" +msgstr "別ã®ã‚¨ãƒ³ãƒˆãƒªã‚’追加" + +#: usr/local/www/firewall_shaper_vinterface.php:102 +#: usr/local/www/firewall_shaper_vinterface.php:102 +msgid "" +"This pipe/queue is referenced in filter rules, please remove references from " +"there before deleting." +msgstr "削除ã™ã‚‹å‰ã«ã€ãã“ã«ã€Œã“ã®ãƒ‘イプ/キューã¯ãƒ•ィルタルールã§å‚ç…§ã•れã¦ã‹ã‚‰å‚照を削除ã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/firewall_shaper_vinterface.php:114 +#: usr/local/www/firewall_shaper_vinterface.php:114 +#, php-format +msgid "No queue with name %s was found!" +msgstr "åå‰%sã¨ã®ã‚­ãƒ¥ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—㟠ï¼" + +#: usr/local/www/firewall_shaper_vinterface.php:160 +#: usr/local/www/firewall_shaper.php:159 usr/local/www/firewall_shaper.php:160 +#: usr/local/www/firewall_shaper.php:160 +#: usr/local/www/firewall_shaper_vinterface.php:160 +msgid "Could not create new queue/discipline!" +msgstr "æ–°ã—ã„キュー/è¦å¾‹ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸï¼" + +#: usr/local/www/firewall_shaper_vinterface.php:172 +#: usr/local/www/firewall_shaper_vinterface.php:181 +#: usr/local/www/firewall_shaper_vinterface.php:190 +#: usr/local/www/firewall_shaper.php:175 usr/local/www/firewall_shaper.php:184 +#: usr/local/www/firewall_shaper.php:193 +#: usr/local/www/firewall_shaper_vinterface.php:182 +#: usr/local/www/firewall_shaper_vinterface.php:192 +#: usr/local/www/firewall_shaper.php:176 usr/local/www/firewall_shaper.php:185 +#: usr/local/www/firewall_shaper.php:194 +#: usr/local/www/firewall_shaper_vinterface.php:173 +#: usr/local/www/firewall_shaper_vinterface.php:183 +#: usr/local/www/firewall_shaper_vinterface.php:193 +#: usr/local/www/firewall_shaper.php:176 usr/local/www/firewall_shaper.php:185 +#: usr/local/www/firewall_shaper.php:194 +#: usr/local/www/firewall_shaper_vinterface.php:173 +#: usr/local/www/firewall_shaper_vinterface.php:183 +#: usr/local/www/firewall_shaper_vinterface.php:193 +msgid "Queue not found!" +msgstr "キューãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ ï¼" + +#: usr/local/www/firewall_shaper_vinterface.php:235 +#: usr/local/www/firewall_shaper.php:270 +#: usr/local/www/firewall_shaper_vinterface.php:245 +#: usr/local/www/firewall_shaper.php:271 +#: usr/local/www/firewall_shaper_vinterface.php:247 +#: usr/local/www/firewall_shaper.php:271 +#: usr/local/www/firewall_shaper_vinterface.php:247 +msgid "Could not add new queue." +msgstr "æ–°ã—ã„キューを追加ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/firewall_shaper_vinterface.php:304 +#: usr/local/www/firewall_shaper.php:346 +#: usr/local/www/firewall_shaper_vinterface.php:314 +#: usr/local/www/firewall_shaper.php:347 +#: usr/local/www/firewall_shaper_vinterface.php:316 +#: usr/local/www/firewall_shaper.php:347 +#: usr/local/www/firewall_shaper_vinterface.php:316 +msgid "Queue Actions" +msgstr "アクションをキュー" + +#: usr/local/www/firewall_shaper_vinterface.php:315 +#: usr/local/www/firewall_shaper.php:357 +#: usr/local/www/firewall_shaper_vinterface.php:325 +#: usr/local/www/firewall_shaper.php:358 +#: usr/local/www/firewall_shaper_vinterface.php:327 +#: usr/local/www/firewall_shaper.php:358 +#: usr/local/www/firewall_shaper_vinterface.php:327 +msgid "Add new queue" +msgstr "æ–°ã—ã„キューを追加ã™ã‚‹" + +#: usr/local/www/firewall_shaper_vinterface.php:326 +#: usr/local/www/firewall_shaper.php:367 +#: usr/local/www/firewall_shaper_vinterface.php:336 +#: usr/local/www/firewall_shaper.php:368 +#: usr/local/www/firewall_shaper_vinterface.php:338 +#: usr/local/www/firewall_shaper.php:368 +#: usr/local/www/firewall_shaper_vinterface.php:338 +msgid "Delete this queue" +msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã®å‰Šé™¤" + +#: usr/local/www/firewall_shaper_vinterface.php:328 +#: usr/local/www/firewall_shaper_vinterface.php:338 +#: usr/local/www/firewall_shaper_vinterface.php:340 +#: usr/local/www/firewall_shaper_vinterface.php:340 +msgid "Delete virtual interface" +msgstr "仮想インターフェイスを削除ã™ã‚‹" + +#: usr/local/www/firewall_shaper_vinterface.php:366 +#: usr/local/www/firewall_shaper_wizards.php:96 +#: usr/local/www/firewall_shaper.php:403 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/firewall_shaper.php:404 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/firewall_shaper.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/firewall_shaper_wizards.php:97 +#: usr/local/www/firewall_shaper.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/firewall_shaper_wizards.php:97 +msgid "The traffic shaper configuration has been changed." +msgstr "ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚·ã‚§ãƒ¼ãƒ‘ã®æ§‹æˆãŒå¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/firewall_shaper_vinterface.php:395 +#: usr/local/www/firewall_shaper_vinterface.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:415 +#: usr/local/www/firewall_shaper_vinterface.php:415 +msgid "Create new limiter" +msgstr "æ–°ã—ã„リミッターを作æˆ" + +#: usr/local/www/firewall_shaper_wizards.php:76 +#: usr/local/www/firewall_shaper_wizards.php:76 +msgid "Single Lan multi Wan" +msgstr "å˜ä¸€ã®LANマルãƒãƒ¯ãƒ³" + +#: usr/local/www/firewall_shaper_wizards.php:77 +#: usr/local/www/firewall_shaper_wizards.php:77 +msgid "Single Wan multi Lan" +msgstr "シングルワンマルãƒè˜­" + +#: usr/local/www/firewall_shaper_wizards.php:78 +#: usr/local/www/firewall_shaper_wizards.php:78 +msgid "Multiple Lan/Wan" +msgstr "複数ã®LAN / WAN" + +#: usr/local/www/firewall_shaper_wizards.php:79 +#: usr/local/www/firewall_shaper_wizards.php:79 +msgid "Dedicated Links" +msgstr "ã®å°‚用リンク" + +#: usr/local/www/firewall_shaper_wizards.php:115 +#: usr/local/www/firewall_shaper_wizards.php:116 +#: usr/local/www/firewall_shaper_wizards.php:116 +msgid "Wizard function" +msgstr "ウィザード機能" + +#: usr/local/www/firewall_shaper_wizards.php:116 +#: usr/local/www/firewall_shaper_wizards.php:117 +#: usr/local/www/firewall_shaper_wizards.php:117 +msgid "Wizard Link" +msgstr "ウィザードã®ãƒªãƒ³ã‚¯" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:107 +#: usr/local/www/system.php:113 usr/local/www/system.php:265 +#: usr/local/www/services_dnsmasq.php:244 +#: usr/local/www/services_dnsmasq.php:311 +#: usr/local/www/services_dnsmasq_edit.php:80 +#: usr/local/www/services_dnsmasq_edit.php:149 +#: usr/local/www/services_dnsmasq.php:332 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:204 +#: usr/local/www/services_dnsmasq_edit.php:238 +#: usr/local/www/services_unbound.php:280 +#: usr/local/www/services_unbound.php:347 usr/local/www/system.php:114 +#: usr/local/www/system.php:276 usr/local/www/services_dnsmasq.php:245 +#: usr/local/www/services_dnsmasq.php:333 +#: usr/local/www/services_dnsmasq_edit.php:205 +#: usr/local/www/services_dnsmasq_edit.php:239 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/system.php:107 usr/local/www/system.php:269 +#: usr/local/www/services_dnsmasq.php:270 +#: usr/local/www/services_dnsmasq.php:358 +#: usr/local/www/services_dnsmasq.php:283 +#: usr/local/www/services_dnsmasq.php:371 +#: usr/local/www/services_dnsmasq.php:347 +#: usr/local/www/services_dnsmasq.php:435 usr/local/www/system.php:107 +#: usr/local/www/system.php:269 usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:205 +#: usr/local/www/services_dnsmasq_edit.php:239 +#: usr/local/www/services_dnsmasq.php:347 +#: usr/local/www/services_dnsmasq.php:435 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +msgid "Domain" +msgstr "ドメイン" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:70 +#: usr/local/www/services_dnsmasq_edit.php:88 +#: usr/local/www/services_dnsmasq_edit.php:89 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87 +#: usr/local/www/services_dnsmasq_edit.php:89 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87 +msgid "A valid domain must be specified." +msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:73 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90 +msgid "A valid IP address must be specified, or # for an exclusion." +msgstr "有効ãªIPã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæŒ‡å®šã•れãŸã€ã¾ãŸã¯ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dnsmasq.php:119 +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/services_dhcpv6.php:791 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/services_dnsmasq.php:123 usr/local/www/services_dhcp.php:1153 +#: usr/local/www/services_dnsmasq.php:125 +#: usr/local/www/services_dnsmasq.php:146 usr/local/www/services_dhcp.php:1153 +#: usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dnsmasq.php:146 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +msgid "DNS forwarder" +msgstr "DNSフォワーダ" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +msgid "Edit Domain Override" +msgstr "ドメイン編集オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:110 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:133 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:133 +msgid "Domain to override (NOTE: this does not have to be a valid TLD!)" +msgstr "オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ãƒ‰ãƒ¡ã‚¤ãƒ³ï¼ˆæ³¨ï¼šã“ã‚ŒãŒæœ‰åйãªTLD ã§ã‚ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“)" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/firewall_nat_edit.php:745 usr/local/www/system.php:260 +#: usr/local/www/system.php:271 usr/local/www/services_dnsmasq_edit.php:146 +#: usr/local/www/services_dnsmasq_edit.php:153 +#: usr/local/www/services_dnsmasq_edit.php:160 +#: usr/local/www/services_dnsmasq_edit.php:201 +#: usr/local/www/services_dnsmasq_edit.php:208 +#: usr/local/www/services_dnsmasq_edit.php:215 +#: usr/local/www/firewall_nat_edit.php:752 usr/local/www/system.php:282 +#: usr/local/www/services_dnsmasq_edit.php:202 +#: usr/local/www/services_dnsmasq_edit.php:209 +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +#: usr/local/www/firewall_nat_edit.php:751 usr/local/www/system.php:264 +#: usr/local/www/system.php:275 usr/local/www/firewall_nat_edit.php:746 +#: usr/local/www/firewall_nat_edit.php:758 +#: usr/local/www/firewall_nat_edit.php:759 usr/local/www/system.php:264 +#: usr/local/www/system.php:275 usr/local/www/firewall_nat_edit.php:759 +#: usr/local/www/services_dnsmasq_edit.php:202 +#: usr/local/www/services_dnsmasq_edit.php:209 +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +msgid "e.g." +msgstr "例ãˆã°" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +msgid "test" +msgstr "テスト" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:117 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:140 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:140 +msgid "IP address of the authoritative DNS server for this domain" +msgstr "ã“ã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã®æ¨©é™DNSサーãƒã®IPアドレス" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +msgid "" +"Or enter # for an exclusion to pass through this host/subdomain to standard " +"nameservers instead of a previous override." +msgstr ""ã¾ãŸã¯Enter" + +#: usr/local/www/firewall_virtual_ip_edit.php:106 +#: usr/local/www/firewall_virtual_ip_edit.php:415 +#: usr/local/www/load_balancer_relay_action.php:141 +#: usr/local/www/firewall_aliases_edit.php:601 +#: usr/local/www/firewall_virtual_ip.php:186 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:247 +#: usr/local/www/services_captiveportal.php:777 +#: usr/local/www/services_dhcp.php:813 +#: usr/local/www/load_balancer_relay_action_edit.php:463 +#: usr/local/www/load_balancer_relay_protocol.php:135 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:201 +#: usr/local/www/services_igmpproxy.php:96 +#: usr/local/www/services_igmpproxy_edit.php:185 +#: usr/local/www/system_authservers.php:161 +#: usr/local/www/system_authservers.php:184 +#: usr/local/www/system_authservers.php:449 +#: usr/local/www/system_authservers.php:738 +#: usr/local/www/vpn_ipsec_phase2.php:423 +#: usr/local/www/vpn_ipsec_phase2.php:465 +#: usr/local/www/system_certmanager.php:762 +#: usr/local/www/load_balancer_relay_action_edit.php:462 +#: usr/local/www/services_igmpproxy_edit.php:187 +#: usr/local/www/firewall_aliases_edit.php:606 +#: usr/local/www/status_ntpd.php:111 +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/load_balancer_monitor.php:124 +#: usr/local/www/services_dhcp.php:851 usr/local/www/vpn_ipsec_phase2.php:449 +#: usr/local/www/vpn_ipsec_phase2.php:491 +#: usr/local/www/firewall_virtual_ip_edit.php:403 +#: usr/local/www/load_balancer_relay_protocol_edit.php:199 +#: usr/local/www/load_balancer_relay_action_edit.php:460 +#: usr/local/www/load_balancer_monitor_edit.php:245 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/status_ntpd.php:127 +#: usr/local/www/services_captiveportal.php:817 +#: usr/local/www/load_balancer_monitor.php:122 +#: usr/local/www/load_balancer_relay_protocol.php:133 +#: usr/local/www/services_dhcp.php:1048 +#: usr/local/www/load_balancer_relay_action.php:139 +#: usr/local/www/vpn_ipsec_phase2.php:515 +#: usr/local/www/vpn_ipsec_phase2.php:551 +#: usr/local/www/vpn_ipsec_phase2.php:593 +#: usr/local/www/firewall_virtual_ip_edit.php:355 +#: usr/local/www/firewall_virtual_ip.php:190 +#: usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 +#: usr/local/www/system_authservers.php:454 +#: usr/local/www/system_authservers.php:744 +#: usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_virtual_ip_edit.php:347 +#: usr/local/www/services_dhcp.php:1061 +#: usr/local/www/system_certmanager.php:787 +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/system_authservers.php:461 +#: usr/local/www/system_authservers.php:760 +#: usr/local/www/services_captiveportal.php:805 +#: usr/local/www/vpn_ipsec_phase2.php:537 +#: usr/local/www/vpn_ipsec_phase2.php:572 +#: usr/local/www/vpn_ipsec_phase2.php:614 +#: usr/local/www/firewall_virtual_ip_edit.php:367 +#: usr/local/www/services_dhcp.php:1081 +#: usr/local/www/system_certmanager.php:788 usr/local/www/status_ntpd.php:133 +#: usr/local/www/services_captiveportal.php:821 +#: usr/local/www/firewall_aliases_edit.php:640 +#: usr/local/www/firewall_virtual_ip.php:227 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:199 +#: usr/local/www/firewall_virtual_ip.php:227 +#: usr/local/www/firewall_virtual_ip_edit.php:106 +#: usr/local/www/firewall_virtual_ip_edit.php:367 +#: usr/local/www/load_balancer_relay_protocol.php:133 +#: usr/local/www/load_balancer_relay_action.php:139 +#: usr/local/www/services_dhcp.php:1081 +#: usr/local/www/system_certmanager.php:788 +#: usr/local/www/load_balancer_relay_action_edit.php:460 +#: usr/local/www/status_ntpd.php:133 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:245 +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/system_authservers.php:461 +#: usr/local/www/system_authservers.php:760 +#: usr/local/www/services_captiveportal.php:821 +#: usr/local/www/firewall_aliases_edit.php:626 +#: usr/local/www/services_igmpproxy_edit.php:187 +#: usr/local/www/services_igmpproxy.php:96 +#: usr/local/www/load_balancer_monitor.php:122 +#: usr/local/www/vpn_ipsec_phase2.php:537 +#: usr/local/www/vpn_ipsec_phase2.php:572 +#: usr/local/www/vpn_ipsec_phase2.php:614 +msgid "Type" +msgstr "タイプ" + +#: usr/local/www/firewall_virtual_ip_edit.php:111 +#: usr/local/www/diag_logs_settings.php:88 +#: usr/local/www/services_dhcp_edit.php:126 +#: usr/local/www/services_dnsmasq_edit.php:91 +#: usr/local/www/services_dnsmasq_edit.php:92 +#: usr/local/www/services_dhcp_edit.php:128 +#: usr/local/www/firewall_virtual_ip_edit.php:114 +#: usr/local/www/services_dhcp_edit.php:162 +#: usr/local/www/firewall_virtual_ip_edit.php:115 +#: usr/local/www/services_dhcp_edit.php:162 +#: usr/local/www/firewall_virtual_ip_edit.php:115 +#: usr/local/www/services_dnsmasq_edit.php:92 +msgid "A valid IP address must be specified." +msgstr "有効ãªIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_virtual_ip_edit.php:116 +#: usr/local/www/firewall_virtual_ip_edit.php:119 +#: usr/local/www/firewall_virtual_ip_edit.php:123 +#: usr/local/www/firewall_virtual_ip_edit.php:123 +msgid "" +"The interface chosen for the VIP has no IPv4 or IPv6 address configured so " +"it cannot be used as a parent for the VIP." +msgstr "「 VIPã®ãŸã‚ã«é¸æŠžã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã«ã¯IPv4アドレスをæŒã£ã¦ã„ãªã„ã‹ã€è¨­å®šã•れãŸIPv6アドレスã¯ã€ãã®ã€Œãれã¯ã€VIPã®è¦ªã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_virtual_ip_edit.php:118 +#: usr/local/www/firewall_virtual_ip_edit.php:121 +#, php-format +msgid "The %s IP address may not be used in a virtual entry." +msgstr "%s IPアドレスã¯ã€ä»®æƒ³ã‚¨ãƒ³ãƒˆãƒªã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_virtual_ip_edit.php:123 +#: usr/local/www/firewall_virtual_ip_edit.php:126 +msgid "The /32 subnet mask is invalid for CARP IPs." +msgstr "/ 32サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€CARPã®IPアドレスã¯ç„¡åйã§ã™ã€‚" + +#: usr/local/www/firewall_virtual_ip_edit.php:127 +#: usr/local/www/firewall_virtual_ip_edit.php:130 +msgid "The /128 subnet mask is invalid for CARP IPs." +msgstr "/ 128サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€CARPã®IPアドレスã¯ç„¡åйã§ã™ã€‚" + +#: usr/local/www/firewall_virtual_ip_edit.php:135 +#: usr/local/www/firewall_virtual_ip_edit.php:138 +msgid "There is already a virtual IP entry for the specified IP address." +msgstr "指定ã—ãŸIPアドレスã®ä»®æƒ³IPã‚¨ãƒ³ãƒˆãƒªãŒæ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_virtual_ip_edit.php:150 +#, php-format +msgid "VHID %s is already in use. Pick a unique number." +msgstr "VHIDã®%sã¯æ—¢ã«ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚一æ„ã®ç•ªå·ã‚’é¸ã¶ã€‚" + +#: usr/local/www/firewall_virtual_ip_edit.php:154 +#: usr/local/www/firewall_virtual_ip_edit.php:157 +#: usr/local/www/firewall_virtual_ip_edit.php:156 +#: usr/local/www/firewall_virtual_ip_edit.php:148 +#: usr/local/www/firewall_virtual_ip_edit.php:164 +#: usr/local/www/firewall_virtual_ip_edit.php:164 +msgid "" +"You must specify a CARP password that is shared between the two VHID members." +msgstr ""ã‚ãªãŸã¯2 VHIDメンãƒãƒ¼é–“ã§å…±æœ‰ã•れã¦ã„ã‚‹CARPã®ãƒ‘スワードを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_virtual_ip_edit.php:161 +#: usr/local/www/firewall_virtual_ip_edit.php:170 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +#: usr/local/www/firewall_virtual_ip_edit.php:164 +#: usr/local/www/firewall_virtual_ip_edit.php:173 +#: usr/local/www/firewall_virtual_ip_edit.php:185 +#: usr/local/www/firewall_virtual_ip_edit.php:163 +#: usr/local/www/firewall_virtual_ip_edit.php:172 +#: usr/local/www/firewall_virtual_ip_edit.php:184 +#: usr/local/www/firewall_virtual_ip_edit.php:155 +#: usr/local/www/firewall_virtual_ip_edit.php:176 +#: usr/local/www/firewall_virtual_ip_edit.php:178 +#: usr/local/www/firewall_virtual_ip_edit.php:197 +#: usr/local/www/firewall_virtual_ip_edit.php:178 +#: usr/local/www/firewall_virtual_ip_edit.php:197 +#, php-format +msgid "" +"Sorry, we could not locate an interface with a matching subnet for %s. " +"Please add an IP alias in this subnet on this interface." +msgstr "「申ã—訳ã‚りã¾ã›ã‚“ãŒã€æˆ‘々ã¯%s.用一致ã™ã‚‹ã‚µãƒ–ãƒãƒƒãƒˆã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§ã“ã®ã‚µãƒ–ãƒãƒƒãƒˆå†…ã®IPエイリアスを追加ã—ã¦ãã ã•ã„。" + +#: usr/local/www/firewall_virtual_ip_edit.php:174 +#: usr/local/www/firewall_virtual_ip_edit.php:177 +#: usr/local/www/firewall_virtual_ip_edit.php:176 +#: usr/local/www/firewall_virtual_ip_edit.php:168 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +msgid "For this type of vip a carp parent is not allowed." +msgstr "VIPã“ã®ç¨®ã®ã‚³ã‚¤è¦ªãŒè¨±å¯ã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/firewall_virtual_ip_edit.php:188 +#: usr/local/www/firewall_virtual_ip_edit.php:191 +#: usr/local/www/firewall_virtual_ip_edit.php:190 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +#: usr/local/www/firewall_virtual_ip_edit.php:203 +#: usr/local/www/firewall_virtual_ip_edit.php:203 +msgid "For this type of VIP, a CARP parent is not allowed." +msgstr "VIPã®ã“ã®ç¨®ã®ã‚³ã‚¤ã®è¦ªãŒè¨±å¯ã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/firewall_virtual_ip_edit.php:202 +msgid "This entry cannot be modified because it is still referenced by CARP" +msgstr "ãれã¯ã¾ã CARPã«ã‚ˆã£ã¦å‚ç…§ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å¤‰æ›´ã§ãã¾ã›ã‚“" + +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +msgid "Virtual IP Address" +msgstr "仮想IPアドレス" + +#: usr/local/www/firewall_virtual_ip_edit.php:300 +#: usr/local/www/firewall_virtual_ip_edit.php:302 +#: usr/local/www/firewall_virtual_ip_edit.php:288 +#: usr/local/www/firewall_virtual_ip_edit.php:290 +#: usr/local/www/firewall_virtual_ip_edit.php:287 +#: usr/local/www/firewall_virtual_ip_edit.php:289 +#: usr/local/www/firewall_virtual_ip_edit.php:279 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/firewall_virtual_ip_edit.php:299 +#: usr/local/www/firewall_virtual_ip_edit.php:301 +#: usr/local/www/firewall_virtual_ip_edit.php:299 +#: usr/local/www/firewall_virtual_ip_edit.php:301 +msgid "" +"This must be the network's subnet mask. It does not specify a CIDR range." +msgstr "「ã“れã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ CIDR範囲を指定ã—ã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/firewall_virtual_ip_edit.php:301 +#: usr/local/www/firewall_virtual_ip_edit.php:289 +#: usr/local/www/firewall_virtual_ip_edit.php:288 +#: usr/local/www/firewall_virtual_ip_edit.php:280 +#: usr/local/www/firewall_virtual_ip_edit.php:300 +#: usr/local/www/firewall_virtual_ip_edit.php:300 +msgid "This is a CIDR block of proxy ARP addresses." +msgstr "ã“れã¯ã€ãƒ—ロキシARPã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã®CIDRブロックã§ã™ã€‚" + +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:400 +#: usr/local/www/firewall_virtual_ip_edit.php:352 +#: usr/local/www/firewall_virtual_ip_edit.php:344 +#: usr/local/www/firewall_virtual_ip_edit.php:364 +#: usr/local/www/firewall_virtual_ip_edit.php:364 +msgid "Edit Virtual IP" +msgstr "仮想IPを編集" + +#: usr/local/www/firewall_virtual_ip_edit.php:418 +#: usr/local/www/firewall_virtual_ip_edit.php:406 +#: usr/local/www/firewall_virtual_ip_edit.php:362 +#: usr/local/www/firewall_virtual_ip_edit.php:354 +#: usr/local/www/firewall_virtual_ip_edit.php:374 +#: usr/local/www/firewall_virtual_ip_edit.php:374 +msgid "Proxy ARP" +msgstr "プロキシARP" + +#: usr/local/www/firewall_virtual_ip_edit.php:420 +#: usr/local/www/carp_status.php:100 +#: usr/local/www/firewall_virtual_ip_edit.php:408 +#: usr/local/www/carp_status.php:92 +#: usr/local/www/firewall_virtual_ip_edit.php:360 +#: usr/local/www/firewall_virtual_ip_edit.php:352 +#: usr/local/www/firewall_virtual_ip_edit.php:372 +#: usr/local/www/firewall_virtual_ip_edit.php:372 +#: usr/local/www/carp_status.php:92 +msgid "CARP" +msgstr "CARP" + +#: usr/local/www/firewall_virtual_ip_edit.php:422 +#: usr/local/www/firewall_virtual_ip_edit.php:410 +#: usr/local/www/firewall_virtual_ip_edit.php:364 +#: usr/local/www/firewall_virtual_ip_edit.php:356 +#: usr/local/www/firewall_virtual_ip_edit.php:376 +#: usr/local/www/firewall_virtual_ip_edit.php:376 +msgid "Other" +msgstr "ãã®ä»–" + +#: usr/local/www/firewall_virtual_ip_edit.php:424 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:358 +#: usr/local/www/firewall_virtual_ip_edit.php:350 +#: usr/local/www/firewall_virtual_ip_edit.php:370 +#: usr/local/www/firewall_virtual_ip_edit.php:370 +msgid "IP Alias" +msgstr "IPエイリアス" + +#: usr/local/www/firewall_virtual_ip_edit.php:435 +#: usr/local/www/diag_packet_capture.php:119 +#: usr/local/www/services_wol.php:130 usr/local/www/services_wol.php:161 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:126 +#: usr/local/www/interfaces_bridge.php:107 +#: usr/local/www/interfaces_gif.php:106 usr/local/www/interfaces_gre.php:107 +#: usr/local/www/interfaces_groups_edit.php:274 +#: usr/local/www/firewall_nat_1to1.php:104 +#: usr/local/www/firewall_nat_1to1_edit.php:114 +#: usr/local/www/firewall_nat_1to1_edit.php:280 +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:185 +#: usr/local/www/firewall_nat_edit.php:476 +#: usr/local/www/firewall_nat_out.php:341 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:417 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/interfaces_assign.php:420 +#: usr/local/www/interfaces_vlan.php:108 usr/local/www/system_routes.php:128 +#: usr/local/www/interfaces_lagg.php:112 usr/local/www/interfaces_ppps.php:108 +#: usr/local/www/interfaces_qinq.php:116 +#: usr/local/www/interfaces_wireless.php:106 usr/local/www/vpn_pppoe.php:101 +#: usr/local/www/services_captiveportal.php:146 usr/local/www/diag_ping.php:95 +#: usr/local/www/services_dhcp_relay.php:72 usr/local/www/status_graph.php:179 +#: usr/local/www/diag_arp.php:316 +#: usr/local/www/services_igmpproxy_edit.php:161 +#: usr/local/www/system_gateways.php:153 +#: usr/local/www/system_gateways_edit.php:98 +#: usr/local/www/system_gateways_edit.php:347 +#: usr/local/www/vpn_ipsec_phase1.php:538 usr/local/www/vpn_l2tp.php:304 +#: usr/local/www/vpn_openvpn_client.php:451 +#: usr/local/www/vpn_openvpn_server.php:691 +#: usr/local/www/vpn_pppoe_edit.php:372 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:42 +#: usr/local/www/diag_ndp.php:132 usr/local/www/firewall_nat_npt.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:166 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/firewall_nat_out.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:287 +#: usr/local/www/firewall_nat_npt_edit.php:171 +#: usr/local/www/status_graph.php:177 +#: usr/local/www/firewall_nat_out_edit.php:430 +#: usr/local/www/firewall_rules_edit.php:760 +#: usr/local/www/services_igmpproxy_edit.php:163 +#: usr/local/www/services_captiveportal.php:147 +#: usr/local/www/system_gateways_edit.php:99 +#: usr/local/www/system_gateways_edit.php:353 +#: usr/local/www/services_dyndns.php:108 +#: usr/local/www/vpn_openvpn_server.php:764 +#: usr/local/www/diag_packet_capture.php:123 +#: usr/local/www/firewall_nat_edit.php:483 +#: usr/local/www/vpn_openvpn_client.php:456 +#: usr/local/www/firewall_virtual_ip_edit.php:423 +#: usr/local/www/vpn_pppoe_edit.php:373 usr/local/www/firewall_nat_out.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:285 +#: usr/local/www/firewall_nat_npt_edit.php:170 usr/local/www/vpn_pppoe.php:102 +#: usr/local/www/status_graph.php:183 usr/local/www/interfaces_qinq.php:117 +#: usr/local/www/interfaces_ppps.php:109 +#: usr/local/www/interfaces_bridge.php:108 +#: usr/local/www/interfaces_lagg.php:113 usr/local/www/interfaces_gre.php:108 +#: usr/local/www/interfaces_wireless.php:107 +#: usr/local/www/services_captiveportal.php:153 +#: usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:459 +#: usr/local/www/interfaces_assign.php:414 +#: usr/local/www/vpn_openvpn_server.php:782 +#: usr/local/www/interfaces_groups_edit.php:275 +#: usr/local/www/diag_packet_capture.php:181 +#: usr/local/www/interfaces_vlan.php:109 +#: usr/local/www/firewall_nat_edit.php:482 +#: usr/local/www/vpn_openvpn_client.php:464 usr/local/www/vpn_l2tp.php:305 +#: usr/local/www/firewall_virtual_ip_edit.php:368 +#: usr/local/www/interfaces_gif.php:107 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/vpn_ipsec_phase1.php:537 usr/local/www/vpn_l2tp.php:308 +#: usr/local/www/vpn_pppoe.php:103 usr/local/www/vpn_openvpn_client.php:482 +#: usr/local/www/diag_testport.php:143 +#: usr/local/www/firewall_rules_edit.php:763 +#: usr/local/www/interfaces_qinq.php:120 +#: usr/local/www/firewall_virtual_ip.php:203 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:477 usr/local/www/status_graph.php:196 +#: usr/local/www/interfaces_lagg.php:117 usr/local/www/interfaces_vlan.php:115 +#: usr/local/www/firewall_virtual_ip_edit.php:360 +#: usr/local/www/interfaces_bridge.php:114 +#: usr/local/www/interfaces_wireless.php:109 +#: usr/local/www/system_routes.php:132 usr/local/www/vpn_pppoe_edit.php:376 +#: usr/local/www/services_captiveportal.php:155 +#: usr/local/www/vpn_ipsec_phase1.php:558 usr/local/www/interfaces_gre.php:112 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:434 +#: usr/local/www/vpn_openvpn_server.php:808 +#: usr/local/www/services_dyndns.php:89 usr/local/www/interfaces_gif.php:111 +#: usr/local/www/system_gateways_edit.php:461 +#: usr/local/www/firewall_rules_edit.php:775 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:215 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:489 usr/local/www/status_graph.php:206 +#: usr/local/www/firewall_virtual_ip_edit.php:380 +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:446 +#: usr/local/www/services_dyndns.php:85 +#: usr/local/www/system_gateways_edit.php:491 +#: usr/local/www/firewall_virtual_ip.php:226 +#: usr/local/www/firewall_nat_edit.php:490 usr/local/www/system_routes.php:148 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/firewall_nat_npt_edit.php:169 +#: usr/local/www/firewall_nat_1to1_edit.php:286 usr/local/www/diag_ndp.php:132 +#: usr/local/www/vpn_l2tp.php:308 usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:491 usr/local/www/vpn_pppoe.php:103 +#: usr/local/www/diag_arp.php:316 usr/local/www/vpn_openvpn_client.php:482 +#: usr/local/www/services_wol.php:130 usr/local/www/services_wol.php:161 +#: usr/local/www/firewall_rules_edit.php:775 +#: usr/local/www/interfaces_qinq.php:120 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:215 +#: usr/local/www/firewall_virtual_ip.php:226 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:490 usr/local/www/status_graph.php:206 +#: usr/local/www/interfaces_lagg.php:117 usr/local/www/interfaces_vlan.php:115 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:126 +#: usr/local/www/firewall_virtual_ip_edit.php:380 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/interfaces_bridge.php:114 +#: usr/local/www/interfaces_wireless.php:109 +#: usr/local/www/system_routes.php:148 usr/local/www/vpn_pppoe_edit.php:376 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/interfaces_ppps.php:109 +#: usr/local/www/firewall_nat_npt.php:104 +#: usr/local/www/firewall_nat_1to1.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:169 +#: usr/local/www/interfaces_groups_edit.php:275 +#: usr/local/www/services_captiveportal.php:155 +#: usr/local/www/services_igmpproxy_edit.php:163 +#: usr/local/www/firewall_nat_1to1_edit.php:114 +#: usr/local/www/firewall_nat_1to1_edit.php:286 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:42 +#: usr/local/www/vpn_ipsec_phase1.php:558 usr/local/www/interfaces_gre.php:112 +#: usr/local/www/system_gateways.php:153 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:446 +#: usr/local/www/vpn_openvpn_server.php:808 +#: usr/local/www/services_dyndns.php:85 +#: usr/local/www/services_dhcp_relay.php:72 +#: usr/local/www/interfaces_gif.php:111 +#: usr/local/www/interfaces_assign.php:420 +msgid "Interface" +msgstr "インターフェース" + +#: usr/local/www/firewall_virtual_ip_edit.php:452 +#: usr/local/www/firewall_virtual_ip_edit.php:440 +#: usr/local/www/firewall_virtual_ip_edit.php:385 +#: usr/local/www/firewall_virtual_ip_edit.php:377 +#: usr/local/www/firewall_virtual_ip_edit.php:397 +#: usr/local/www/firewall_virtual_ip_edit.php:397 +msgid "IP Address(es)" +msgstr "IPアドレス( ES )" + +#: usr/local/www/firewall_virtual_ip_edit.php:456 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_out_edit.php:472 +#: usr/local/www/firewall_nat_out_edit.php:506 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules_edit.php:958 +#: usr/local/www/firewall_nat_1to1_edit.php:345 +#: usr/local/www/firewall_nat_1to1_edit.php:400 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/firewall_nat_out_edit.php:519 +#: usr/local/www/firewall_rules_edit.php:900 +#: usr/local/www/firewall_rules_edit.php:993 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_virtual_ip_edit.php:444 +#: usr/local/www/firewall_nat_1to1_edit.php:343 +#: usr/local/www/firewall_nat_1to1_edit.php:398 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_virtual_ip_edit.php:389 +#: usr/local/www/firewall_rules_edit.php:903 +#: usr/local/www/firewall_rules_edit.php:1002 +#: usr/local/www/firewall_nat_edit.php:546 +#: usr/local/www/firewall_nat_edit.php:635 +#: usr/local/www/firewall_virtual_ip_edit.php:381 +#: usr/local/www/firewall_nat_out_edit.php:489 +#: usr/local/www/firewall_nat_out_edit.php:523 +#: usr/local/www/firewall_rules_edit.php:915 +#: usr/local/www/firewall_rules_edit.php:1015 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_virtual_ip_edit.php:401 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_nat_out_edit.php:535 +#: usr/local/www/firewall_rules_edit.php:914 +#: usr/local/www/firewall_rules_edit.php:1014 +#: usr/local/www/firewall_nat_edit.php:559 +#: usr/local/www/firewall_nat_edit.php:648 +#: usr/local/www/firewall_nat_1to1_edit.php:344 +#: usr/local/www/firewall_nat_1to1_edit.php:399 +#: usr/local/www/firewall_nat_out_edit.php:536 +#: usr/local/www/firewall_rules_edit.php:914 +#: usr/local/www/firewall_rules_edit.php:1014 +#: usr/local/www/firewall_nat_edit.php:559 +#: usr/local/www/firewall_nat_edit.php:648 +#: usr/local/www/firewall_virtual_ip_edit.php:401 +#: usr/local/www/firewall_nat_1to1_edit.php:344 +#: usr/local/www/firewall_nat_1to1_edit.php:399 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_nat_out_edit.php:536 +msgid "Type:" +msgstr "タイプ:" + +#: usr/local/www/firewall_virtual_ip_edit.php:459 +#: usr/local/www/firewall_virtual_ip_edit.php:447 +#: usr/local/www/firewall_virtual_ip_edit.php:392 +#: usr/local/www/firewall_virtual_ip_edit.php:384 +#: usr/local/www/firewall_virtual_ip_edit.php:404 +#: usr/local/www/firewall_virtual_ip_edit.php:404 +msgid "Single address" +msgstr "å˜ä¸€ã®ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/firewall_virtual_ip_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:452 +#: usr/local/www/firewall_aliases_edit.php:624 +#: usr/local/www/firewall_nat_1to1_edit.php:345 +#: usr/local/www/firewall_nat_1to1_edit.php:400 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_nat_out_edit.php:476 +#: usr/local/www/firewall_nat_out_edit.php:511 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/system_routes.php:126 usr/local/www/vpn_ipsec_mobile.php:408 +#: usr/local/www/services_igmpproxy_edit.php:223 +#: usr/local/www/vpn_ipsec_phase2.php:428 +#: usr/local/www/vpn_ipsec_phase2.php:470 +#: usr/local/www/services_unbound_acls.php:236 +#: usr/local/www/firewall_nat_1to1_edit.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:407 +#: usr/local/www/firewall_nat_out_edit.php:489 +#: usr/local/www/firewall_nat_out_edit.php:524 +#: usr/local/www/firewall_rules_edit.php:907 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/services_igmpproxy_edit.php:225 +#: usr/local/www/firewall_aliases_edit.php:455 +#: usr/local/www/firewall_aliases_edit.php:629 +#: usr/local/www/vpn_ipsec_phase2.php:454 +#: usr/local/www/vpn_ipsec_phase2.php:496 +#: usr/local/www/firewall_nat_edit.php:559 +#: usr/local/www/firewall_nat_edit.php:648 +#: usr/local/www/firewall_virtual_ip_edit.php:449 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/vpn_ipsec_mobile.php:433 +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/firewall_aliases_edit.php:632 +#: usr/local/www/vpn_ipsec_phase2.php:520 +#: usr/local/www/vpn_ipsec_phase2.php:556 +#: usr/local/www/vpn_ipsec_phase2.php:598 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_virtual_ip_edit.php:394 +#: usr/local/www/firewall_rules_edit.php:916 +#: usr/local/www/firewall_rules_edit.php:1015 +#: usr/local/www/firewall_nat_edit.php:553 +#: usr/local/www/firewall_nat_edit.php:642 +#: usr/local/www/firewall_virtual_ip_edit.php:386 +#: usr/local/www/system_routes.php:130 +#: usr/local/www/firewall_nat_out_edit.php:493 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/vpn_ipsec_phase2.php:542 +#: usr/local/www/vpn_ipsec_phase2.php:577 +#: usr/local/www/vpn_ipsec_phase2.php:619 +#: usr/local/www/firewall_rules_edit.php:928 +#: usr/local/www/firewall_rules_edit.php:1028 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_virtual_ip_edit.php:406 +#: usr/local/www/firewall_aliases_edit.php:479 +#: usr/local/www/firewall_aliases_edit.php:663 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:540 +#: usr/local/www/firewall_rules_edit.php:927 +#: usr/local/www/firewall_rules_edit.php:1027 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 usr/local/www/system_routes.php:146 +#: usr/local/www/firewall_nat_1to1_edit.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:406 +#: usr/local/www/firewall_nat_out_edit.php:541 +#: usr/local/www/firewall_rules_edit.php:927 +#: usr/local/www/firewall_rules_edit.php:1027 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 +#: usr/local/www/firewall_virtual_ip_edit.php:406 +#: usr/local/www/system_routes.php:146 +#: usr/local/www/firewall_aliases_edit.php:465 +#: usr/local/www/firewall_aliases_edit.php:649 +#: usr/local/www/services_igmpproxy_edit.php:225 +#: usr/local/www/firewall_nat_1to1_edit.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:406 +#: usr/local/www/vpn_ipsec_mobile.php:433 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:541 +#: usr/local/www/vpn_ipsec_phase2.php:542 +#: usr/local/www/vpn_ipsec_phase2.php:577 +#: usr/local/www/vpn_ipsec_phase2.php:619 +msgid "Network" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_nat_1to1_edit.php:367 +#: usr/local/www/firewall_nat_1to1_edit.php:422 +#: usr/local/www/firewall_nat_edit.php:575 +#: usr/local/www/firewall_nat_edit.php:685 +#: usr/local/www/firewall_nat_out_edit.php:479 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:542 +#: usr/local/www/firewall_rules_edit.php:895 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/vpn_ipsec_phase2.php:440 +#: usr/local/www/firewall_nat_npt_edit.php:216 +#: usr/local/www/firewall_nat_npt_edit.php:244 +#: usr/local/www/firewall_nat_1to1_edit.php:374 +#: usr/local/www/firewall_nat_1to1_edit.php:429 +#: usr/local/www/firewall_nat_npt_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:249 +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/firewall_nat_out_edit.php:555 +#: usr/local/www/firewall_rules_edit.php:930 +#: usr/local/www/firewall_rules_edit.php:1023 +#: usr/local/www/vpn_ipsec_phase2.php:466 +#: usr/local/www/firewall_nat_edit.php:582 +#: usr/local/www/firewall_nat_edit.php:692 +#: usr/local/www/firewall_virtual_ip_edit.php:455 +#: usr/local/www/firewall_nat_1to1_edit.php:372 +#: usr/local/www/firewall_nat_1to1_edit.php:427 +#: usr/local/www/firewall_nat_npt_edit.php:220 +#: usr/local/www/firewall_nat_npt_edit.php:248 +#: usr/local/www/vpn_ipsec_phase2.php:532 +#: usr/local/www/vpn_ipsec_phase2.php:568 +#: usr/local/www/firewall_nat_edit.php:581 +#: usr/local/www/firewall_nat_edit.php:691 +#: usr/local/www/firewall_virtual_ip_edit.php:400 +#: usr/local/www/firewall_rules_edit.php:939 +#: usr/local/www/firewall_rules_edit.php:1038 +#: usr/local/www/firewall_nat_edit.php:576 +#: usr/local/www/firewall_nat_edit.php:686 +#: usr/local/www/firewall_virtual_ip_edit.php:392 +#: usr/local/www/firewall_nat_out_edit.php:496 +#: usr/local/www/firewall_nat_out_edit.php:532 +#: usr/local/www/firewall_nat_out_edit.php:559 +#: usr/local/www/vpn_ipsec_phase2.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:589 +#: usr/local/www/firewall_rules_edit.php:951 +#: usr/local/www/firewall_rules_edit.php:1051 +#: usr/local/www/firewall_nat_edit.php:588 +#: usr/local/www/firewall_nat_edit.php:698 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_nat_out_edit.php:508 +#: usr/local/www/firewall_nat_out_edit.php:544 +#: usr/local/www/firewall_nat_out_edit.php:571 +#: usr/local/www/firewall_rules_edit.php:950 +#: usr/local/www/firewall_rules_edit.php:1050 +#: usr/local/www/firewall_nat_edit.php:589 +#: usr/local/www/firewall_nat_edit.php:699 +#: usr/local/www/firewall_nat_npt_edit.php:219 +#: usr/local/www/firewall_nat_npt_edit.php:247 +#: usr/local/www/firewall_nat_1to1_edit.php:373 +#: usr/local/www/firewall_nat_1to1_edit.php:428 +#: usr/local/www/firewall_nat_out_edit.php:510 +#: usr/local/www/firewall_nat_out_edit.php:545 +#: usr/local/www/firewall_rules_edit.php:950 +#: usr/local/www/firewall_rules_edit.php:1050 +#: usr/local/www/firewall_nat_edit.php:589 +#: usr/local/www/firewall_nat_edit.php:699 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_nat_npt_edit.php:219 +#: usr/local/www/firewall_nat_npt_edit.php:247 +#: usr/local/www/firewall_nat_1to1_edit.php:373 +#: usr/local/www/firewall_nat_1to1_edit.php:428 +#: usr/local/www/firewall_nat_out_edit.php:510 +#: usr/local/www/firewall_nat_out_edit.php:545 +#: usr/local/www/firewall_nat_out_edit.php:571 +#: usr/local/www/vpn_ipsec_phase2.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:589 +msgid "Address:" +msgstr "使‰€ï¼š" + +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:404 +#: usr/local/www/firewall_virtual_ip_edit.php:424 +#: usr/local/www/firewall_virtual_ip_edit.php:424 +msgid "Expansion:" +msgstr "拡大:" + +#: usr/local/www/firewall_virtual_ip_edit.php:499 +#: usr/local/www/firewall_virtual_ip_edit.php:487 +#: usr/local/www/firewall_virtual_ip_edit.php:432 +#: usr/local/www/firewall_virtual_ip_edit.php:424 +#: usr/local/www/firewall_virtual_ip_edit.php:444 +#: usr/local/www/firewall_virtual_ip_edit.php:444 +msgid "Virtual IP Password" +msgstr "仮想IPパスワード" + +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/firewall_virtual_ip_edit.php:489 +#: usr/local/www/firewall_virtual_ip_edit.php:434 +#: usr/local/www/firewall_virtual_ip_edit.php:426 +#: usr/local/www/firewall_virtual_ip_edit.php:446 +#: usr/local/www/firewall_virtual_ip_edit.php:446 +msgid "Enter the VHID group password." +msgstr "VHIDグループã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/firewall_virtual_ip_edit.php:505 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:438 +#: usr/local/www/firewall_virtual_ip_edit.php:430 +#: usr/local/www/firewall_virtual_ip_edit.php:450 +#: usr/local/www/firewall_virtual_ip_edit.php:450 +msgid "VHID Group" +msgstr "VHIDグループ" + +#: usr/local/www/firewall_virtual_ip_edit.php:513 +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/firewall_virtual_ip_edit.php:446 +#: usr/local/www/firewall_virtual_ip_edit.php:438 +#: usr/local/www/firewall_virtual_ip_edit.php:458 +#: usr/local/www/firewall_virtual_ip_edit.php:458 +msgid "Enter the VHID group that the machines will share" +msgstr "マシンãŒå…±æœ‰ã™ã‚‹VHIDグループを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/firewall_virtual_ip_edit.php:517 +#: usr/local/www/firewall_virtual_ip_edit.php:505 +#: usr/local/www/firewall_virtual_ip_edit.php:450 +#: usr/local/www/firewall_virtual_ip_edit.php:442 +#: usr/local/www/firewall_virtual_ip_edit.php:462 +#: usr/local/www/firewall_virtual_ip_edit.php:462 +msgid "Advertising Frequency" +msgstr "広告頻度" + +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/firewall_virtual_ip_edit.php:522 +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_virtual_ip_edit.php:459 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +msgid "" +"The frequency that this machine will advertise. 0 means usually master. " +"Otherwise the lowest combination of both values in the cluster determines " +"the master." +msgstr "「ã“ã®ãƒžã‚·ãƒ³ãŒåºƒå‘Šã™ã‚‹ã“ã¨ã‚’周波数。 0ã¯é€šå¸¸ã®ãƒžã‚¹ã‚¿ãƒ¼ã‚’æ„味ã™ã‚‹ã€ãã†ã§ãªã„å ´åˆã¯ã€ã‚¯ãƒ©ã‚¹ã‚¿å†…ã®ä¸¡æ–¹ã®å€¤ã®æœ€ã‚‚低ã„組ã¿åˆã‚ã›ã¯"ãƒžã‚¹ã‚¿ãƒ¼ãŒæ±ºå®šã•れã¾ã™ã€‚" + +#: usr/local/www/firewall_virtual_ip_edit.php:557 +#: usr/local/www/diag_logs_settings.php:326 +#: usr/local/www/diag_packet_capture.php:195 +#: usr/local/www/services_dyndns.php:160 usr/local/www/services_wol.php:210 +#: usr/local/www/interfaces_bridge.php:144 +#: usr/local/www/interfaces_bridge_edit.php:446 +#: usr/local/www/interfaces_bridge_edit.php:490 +#: usr/local/www/interfaces_bridge_edit.php:534 +#: usr/local/www/interfaces_gif.php:132 usr/local/www/interfaces_gre.php:133 +#: usr/local/www/interfaces_groups.php:148 +#: usr/local/www/firewall_aliases.php:229 +#: usr/local/www/firewall_nat_1to1.php:179 +#: usr/local/www/firewall_nat_out.php:459 +#: usr/local/www/firewall_schedule.php:240 usr/local/www/diag_backup.php:655 +#: usr/local/www/firewall_virtual_ip.php:241 usr/local/www/interfaces.php:1845 +#: usr/local/www/interfaces_vlan.php:134 usr/local/www/system_routes.php:188 +#: usr/local/www/interfaces_lagg.php:138 +#: usr/local/www/interfaces_ppps_edit.php:620 +#: usr/local/www/interfaces_qinq.php:151 +#: usr/local/www/load_balancer_virtual_server_edit.php:289 +#: usr/local/www/services_captiveportal.php:929 +#: usr/local/www/services_captiveportal_filemanager.php:215 +#: usr/local/www/diag_ipsec.php:163 usr/local/www/diag_ipsec_sad.php:134 +#: usr/local/www/services_captiveportal_ip.php:170 +#: usr/local/www/services_captiveportal_mac.php:190 +#: usr/local/www/diag_ipsec_spd.php:143 usr/local/www/services_dhcp.php:715 +#: usr/local/www/services_dhcp.php:876 usr/local/www/services_dnsmasq.php:214 +#: usr/local/www/services_captiveportal_hostname.php:171 +#: usr/local/www/services_captiveportal_vouchers.php:603 +#: usr/local/www/diag_routes.php:72 +#: usr/local/www/status_rrd_graph_settings.php:236 +#: usr/local/www/services_dyndns_edit.php:189 +#: usr/local/www/services_dyndns_edit.php:245 +#: usr/local/www/services_igmpproxy.php:161 +#: usr/local/www/services_rfc2136_edit.php:209 +#: usr/local/www/system_advanced_admin.php:289 +#: usr/local/www/system_gateway_groups.php:195 usr/local/www/vpn_l2tp.php:451 +#: usr/local/www/services_dhcpv6.php:789 +#: usr/local/www/diag_logs_settings.php:333 +#: usr/local/www/services_captiveportal_vouchers.php:610 +#: usr/local/www/services_dyndns_edit.php:272 +#: usr/local/www/services_dyndns_edit.php:376 +#: usr/local/www/firewall_nat_out.php:470 usr/local/www/system_routes.php:199 +#: usr/local/www/status_rrd_graph_settings.php:237 +#: usr/local/www/diag_ipsec.php:221 usr/local/www/diag_backup.php:736 +#: usr/local/www/services_unbound.php:253 +#: usr/local/www/services_captiveportal.php:974 +#: usr/local/www/services_dyndns.php:181 usr/local/www/services_dhcp.php:728 +#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:914 +#: usr/local/www/load_balancer_virtual_server_edit.php:278 +#: usr/local/www/interfaces_bridge_edit.php:455 +#: usr/local/www/interfaces_bridge_edit.php:499 +#: usr/local/www/interfaces_bridge_edit.php:543 +#: usr/local/www/firewall_aliases.php:232 +#: usr/local/www/diag_packet_capture.php:215 usr/local/www/interfaces.php:2023 +#: usr/local/www/firewall_virtual_ip_edit.php:545 +#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:884 +#: usr/local/www/diag_logs_settings.php:353 +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:624 +#: usr/local/www/firewall_nat_out.php:471 +#: usr/local/www/services_captiveportal_ip.php:168 +#: usr/local/www/interfaces_groups.php:149 usr/local/www/diag_ipsec.php:222 +#: usr/local/www/interfaces_qinq.php:152 usr/local/www/diag_ipsec_sad.php:135 +#: usr/local/www/services_captiveportal_mac.php:188 +#: usr/local/www/interfaces_bridge.php:145 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces_lagg.php:139 +#: usr/local/www/services_captiveportal_hostname.php:169 +#: usr/local/www/interfaces_gre.php:134 usr/local/www/diag_routes.php:73 +#: usr/local/www/system_gateway_groups.php:196 +#: usr/local/www/services_captiveportal.php:970 +#: usr/local/www/services_captiveportal_filemanager.php:212 +#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:932 +#: usr/local/www/services_dhcp.php:1118 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +#: usr/local/www/interfaces_bridge_edit.php:456 +#: usr/local/www/interfaces_bridge_edit.php:500 +#: usr/local/www/interfaces_bridge_edit.php:544 +#: usr/local/www/firewall_aliases.php:284 +#: usr/local/www/diag_packet_capture.php:262 +#: usr/local/www/interfaces_vlan.php:135 usr/local/www/interfaces.php:2011 +#: usr/local/www/vpn_l2tp.php:452 +#: usr/local/www/firewall_virtual_ip_edit.php:490 +#: usr/local/www/interfaces_gif.php:133 usr/local/www/diag_ipsec_spd.php:144 +#: usr/local/www/firewall_virtual_ip.php:247 +#: usr/local/www/services_dhcpv6.php:663 usr/local/www/services_dhcpv6.php:815 +#: usr/local/www/vpn_l2tp.php:455 usr/local/www/services_dyndns_edit.php:276 +#: usr/local/www/services_dyndns_edit.php:380 +#: usr/local/www/interfaces_qinq.php:155 +#: usr/local/www/interfaces_ppps_edit.php:627 +#: usr/local/www/firewall_virtual_ip.php:267 +#: usr/local/www/interfaces_lagg.php:143 usr/local/www/interfaces_vlan.php:141 +#: usr/local/www/firewall_virtual_ip_edit.php:482 +#: usr/local/www/diag_ipsec.php:223 usr/local/www/interfaces_bridge.php:151 +#: usr/local/www/services_captiveportal_vouchers.php:633 +#: usr/local/www/system_routes.php:203 usr/local/www/services_dhcp.php:921 +#: usr/local/www/services_dhcp.php:946 usr/local/www/services_dhcp.php:1131 +#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:832 +#: usr/local/www/firewall_nat_out.php:468 +#: usr/local/www/services_captiveportal.php:972 +#: usr/local/www/diag_backup.php:741 +#: usr/local/www/interfaces_bridge_edit.php:457 +#: usr/local/www/interfaces_bridge_edit.php:501 +#: usr/local/www/interfaces_bridge_edit.php:545 +#: usr/local/www/services_dnsmasq.php:240 +#: usr/local/www/services_captiveportal_mac.php:198 +#: usr/local/www/interfaces_gre.php:138 usr/local/www/interfaces_gif.php:137 +#: usr/local/www/interfaces.php:2038 +#: usr/local/www/services_dyndns_edit.php:278 +#: usr/local/www/services_dyndns_edit.php:388 +#: usr/local/www/firewall_aliases.php:287 +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/diag_packet_capture.php:279 +#: usr/local/www/services_dhcp.php:941 usr/local/www/services_dhcp.php:966 +#: usr/local/www/services_dhcp.php:1151 usr/local/www/firewall_nat_out.php:475 +#: usr/local/www/services_captiveportal.php:988 +#: usr/local/www/services_dnsmasq.php:253 +#: usr/local/www/services_dyndns.php:177 +#: usr/local/www/system_gateway_groups.php:205 +#: usr/local/www/interfaces.php:2084 +#: usr/local/www/interfaces_ppps_edit.php:625 +#: usr/local/www/firewall_virtual_ip.php:290 +#: usr/local/www/firewall_aliases.php:288 usr/local/www/system_routes.php:219 +#: usr/local/www/firewall_nat_out.php:474 +#: usr/local/www/interfaces_bridge_edit.php:461 +#: usr/local/www/interfaces_bridge_edit.php:505 +#: usr/local/www/interfaces_bridge_edit.php:549 +#: usr/local/www/services_dnsmasq.php:317 usr/local/www/interfaces.php:2073 +#: usr/local/www/vpn_l2tp.php:455 usr/local/www/diag_logs_settings.php:353 +#: usr/local/www/firewall_schedule.php:240 +#: usr/local/www/services_dyndns_edit.php:278 +#: usr/local/www/services_dyndns_edit.php:388 +#: usr/local/www/services_wol.php:210 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +#: usr/local/www/services_captiveportal_ip.php:168 +#: usr/local/www/interfaces_qinq.php:155 +#: usr/local/www/interfaces_ppps_edit.php:625 +#: usr/local/www/firewall_virtual_ip.php:290 +#: usr/local/www/interfaces_lagg.php:143 usr/local/www/interfaces_vlan.php:141 +#: usr/local/www/firewall_aliases.php:288 +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/diag_ipsec.php:223 +#: usr/local/www/status_rrd_graph_settings.php:237 +#: usr/local/www/diag_packet_capture.php:279 usr/local/www/diag_routes.php:73 +#: usr/local/www/interfaces_bridge.php:151 +#: usr/local/www/services_captiveportal_vouchers.php:638 +#: usr/local/www/system_routes.php:219 usr/local/www/services_dhcp.php:941 +#: usr/local/www/services_dhcp.php:966 usr/local/www/services_dhcp.php:1151 +#: usr/local/www/diag_ipsec_spd.php:144 +#: usr/local/www/interfaces_groups.php:148 +#: usr/local/www/services_captiveportal_hostname.php:169 +#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:832 +#: usr/local/www/firewall_nat_out.php:474 +#: usr/local/www/services_captiveportal_filemanager.php:212 +#: usr/local/www/firewall_nat_1to1.php:179 +#: usr/local/www/services_captiveportal.php:988 +#: usr/local/www/diag_backup.php:741 +#: usr/local/www/interfaces_bridge_edit.php:461 +#: usr/local/www/interfaces_bridge_edit.php:505 +#: usr/local/www/interfaces_bridge_edit.php:549 +#: usr/local/www/services_igmpproxy.php:161 +#: usr/local/www/services_rfc2136_edit.php:209 +#: usr/local/www/services_dnsmasq.php:317 +#: usr/local/www/services_captiveportal_mac.php:198 +#: usr/local/www/interfaces_gre.php:138 usr/local/www/diag_ipsec_sad.php:135 +#: usr/local/www/services_dyndns.php:177 usr/local/www/interfaces_gif.php:137 +#: usr/local/www/system_gateway_groups.php:205 +#: usr/local/www/interfaces.php:2073 +msgid "Note:" +msgstr "注æ„:" + +#: usr/local/www/firewall_virtual_ip_edit.php:559 +#: usr/local/www/firewall_virtual_ip_edit.php:547 +#: usr/local/www/firewall_virtual_ip_edit.php:492 +#: usr/local/www/firewall_virtual_ip_edit.php:484 +#: usr/local/www/firewall_virtual_ip_edit.php:503 +#: usr/local/www/firewall_virtual_ip_edit.php:503 +msgid "" +"Proxy ARP and Other type Virtual IPs cannot be bound to by anything running " +"on the firewall, such as IPsec, OpenVPN, etc. Use a CARP or IP Alias type " +"address for these cases." +msgstr "ã“ã®ã‚ˆã†ãªå ´åˆã®ãŸã‚ã«ã€CARPã¾ãŸã¯IPエイリアスタイプ "アドレスを使用ã—ã¦ãã ã•ã„ãªã©ã®IPsec 〠OpenVPNã‚’ã€ã¨ã—ã¦ã€ãƒ•ァイアウォールã®ã€Œãƒ—ロキシARPãŠã‚ˆã³ä»–ã®ã‚¿ã‚¤ãƒ—ã®ä»®æƒ³IPã¯ä½•も実行ã—ã¦ã«ãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/firewall_virtual_ip_edit.php:560 +#: usr/local/www/firewall_virtual_ip_edit.php:548 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:485 +#: usr/local/www/firewall_virtual_ip_edit.php:504 +#: usr/local/www/firewall_virtual_ip_edit.php:504 +msgid "For more information on CARP and the above values, visit the OpenBSD " +msgstr "CARPã¨ä¸Šè¨˜ã®å€¤ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ OpenBSDã®ã‚’ã”覧ãã ã•ã„" + +#: usr/local/www/firewall_virtual_ip_edit.php:560 +#: usr/local/www/firewall_virtual_ip_edit.php:548 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:485 +#: usr/local/www/firewall_virtual_ip_edit.php:504 +#: usr/local/www/firewall_virtual_ip_edit.php:504 +msgid "CARP FAQ" +msgstr "CARPよãã‚る質å•" + +#: usr/local/www/load_balancer_relay_action.php:74 +#: usr/local/www/load_balancer_relay_action.php:74 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"relay protocol." +msgstr "リレープロトコル"ãれã¯ã¾ã å°‘ãªãã¨ã‚‚1ã«ã‚ˆã£ã¦å‚ç…§ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +msgid "Relay Action" +msgstr "リレー動作" + +#: usr/local/www/load_balancer_relay_action.php:118 +#: usr/local/www/load_balancer_relay_action.php:116 +#: usr/local/www/load_balancer_relay_action.php:116 +msgid "" +"The load balancer configuration has been changed.
    You must apply the " +"changes in order for them to take effect." +msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚ã®å¤‰æ›´ã€ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µè¨­å®šãŒå¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚検索ã—ã¦ã€é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/load_balancer_relay_action.php:128 +#: usr/local/www/load_balancer_relay_action.php:126 +#: usr/local/www/load_balancer_relay_action.php:126 +msgid "Relay Actions" +msgstr "アクションリレー" + +#: usr/local/www/load_balancer_relay_action.php:129 +#: usr/local/www/load_balancer_relay_action.php:127 +#: usr/local/www/load_balancer_relay_action.php:127 +msgid "Relay Protocols" +msgstr "リレープロトコル" + +#: usr/local/www/load_balancer_relay_action.php:142 +#: usr/local/www/interfaces_qinq_edit.php:318 +#: usr/local/www/load_balancer_relay_action_edit.php:515 +#: usr/local/www/load_balancer_relay_action_edit.php:535 +#: usr/local/www/load_balancer_relay_protocol.php:136 +#: usr/local/www/load_balancer_relay_action_edit.php:514 +#: usr/local/www/load_balancer_relay_action_edit.php:534 +#: usr/local/www/interfaces_qinq_edit.php:319 +#: usr/local/www/load_balancer_relay_action_edit.php:512 +#: usr/local/www/load_balancer_relay_action_edit.php:532 +#: usr/local/www/load_balancer_relay_protocol.php:134 +#: usr/local/www/load_balancer_relay_action.php:140 +#: usr/local/www/interfaces_qinq_edit.php:322 +#: usr/local/www/load_balancer_relay_protocol.php:134 +#: usr/local/www/load_balancer_relay_action.php:140 +#: usr/local/www/load_balancer_relay_action_edit.php:512 +#: usr/local/www/load_balancer_relay_action_edit.php:532 +#: usr/local/www/interfaces_qinq_edit.php:322 +msgid "Options" +msgstr "オプション" + +#: usr/local/www/diag_defaults.php:51 +msgid "" +"The system has been reset to factory defaults and is now rebooting. This may " +"take one minute." +msgstr "「システムã¯å·¥å ´å‡ºè·æ™‚ã®è¨­å®šã«ãƒªã‚»ãƒƒãƒˆã•れã€ç¾åœ¨ã€å†èµ·å‹•ã•れã¦ã„る。ã“れã¯å¯èƒ½æ€§"1分ã»ã©ã‹ã‹ã‚‹ã€‚" + +#: usr/local/www/diag_defaults.php:58 usr/local/www/diag_defaults.php:52 +#: usr/local/www/diag_defaults.php:52 +msgid "Factory defaults" +msgstr "å·¥å ´å‡ºè·æ™‚ã®ãƒ‡ãƒ•ォルト" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70 +#: usr/local/www/diag_defaults.php:70 +msgid "If you click" +msgstr "ã‚ãªãŸãŒã‚¯ãƒªãƒƒã‚¯ã—ãŸå ´åˆ" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:81 +#: usr/local/www/crash_reporter.php:76 usr/local/www/halt.php:69 +#: usr/local/www/pkg.php:342 usr/local/www/system_firmware.php:229 +#: usr/local/www/reboot.php:61 usr/local/www/reboot.php:72 +#: usr/local/www/pkg.php:424 usr/local/www/reboot.php:53 +#: usr/local/www/reboot.php:64 usr/local/www/halt.php:60 +#: usr/local/www/system_firmware.php:236 usr/local/www/system_firmware.php:239 +#: usr/local/www/diag_defaults.php:60 usr/local/www/diag_defaults.php:70 +#: usr/local/www/diag_defaults.php:82 usr/local/www/system_firmware.php:239 +#: usr/local/www/reboot.php:53 usr/local/www/reboot.php:64 +#: usr/local/www/pkg.php:424 usr/local/www/diag_defaults.php:60 +#: usr/local/www/diag_defaults.php:70 usr/local/www/diag_defaults.php:82 +#: usr/local/www/halt.php:60 usr/local/www/halt.php:69 +#: usr/local/www/crash_reporter.php:76 +msgid "Yes" +msgstr "ã¯ã„" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70 +#: usr/local/www/diag_defaults.php:70 +msgid "the firewall will:" +msgstr "ファイアウォールã¯ã€ä»¥ä¸‹ã¨ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/diag_defaults.php:70 usr/local/www/diag_defaults.php:72 +#: usr/local/www/diag_defaults.php:72 +msgid "Reset to factory defaults" +msgstr "å·¥å ´å‡ºè·æ™‚ã®è¨­å®šã«ãƒªã‚»ãƒƒãƒˆ" + +#: usr/local/www/diag_defaults.php:71 usr/local/www/diag_defaults.php:73 +#: usr/local/www/diag_defaults.php:73 +msgid "LAN IP address will be reset to 192.168.1.1" +msgstr "LAN IPアドレスã¯192.168.1.1ã«ãƒªã‚»ãƒƒãƒˆã•れã¾ã™" + +#: usr/local/www/diag_defaults.php:72 usr/local/www/diag_defaults.php:74 +#: usr/local/www/diag_defaults.php:74 +msgid "System will be configured as a DHCP server on the default LAN interface" +msgstr "システムã¯ãƒ‡ãƒ•ォルトã®LANインターフェイス上ã§DHCPサーãƒã¨ã—ã¦è¨­å®šã•れã¾ã™" + +#: usr/local/www/diag_defaults.php:73 usr/local/www/diag_defaults.php:75 +#: usr/local/www/diag_defaults.php:75 +msgid "Reboot after changes are installed" +msgstr "変更ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸå¾Œã«å†èµ·å‹•ã—ã¾ã™" + +#: usr/local/www/diag_defaults.php:74 usr/local/www/diag_defaults.php:76 +#: usr/local/www/diag_defaults.php:76 +msgid "" +"WAN interface will be set to obtain an address automatically from a DHCP " +"server" +msgstr "サーãƒã€ WANインターフェイスãŒDHCPã‹ã‚‰è‡ªå‹•çš„ã«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å–å¾—ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れる"" + +#: usr/local/www/diag_defaults.php:75 usr/local/www/diag_defaults.php:77 +#: usr/local/www/diag_defaults.php:77 +msgid "webConfigurator admin username will be reset to 'admin'" +msgstr "webConfigurator管ç†è€…ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒãƒªã‚»ãƒƒãƒˆã•れã¾ã™ã€Œç®¡ç†è€…ã€ã«" + +#: usr/local/www/diag_defaults.php:76 usr/local/www/diag_defaults.php:78 +#: usr/local/www/diag_defaults.php:78 +msgid "webConfigurator admin password will be reset to" +msgstr "webConfigurator管ç†è€…パスワードã«ãƒªã‚»ãƒƒãƒˆã•れã¾ã™" + +#: usr/local/www/diag_defaults.php:79 usr/local/www/diag_defaults.php:80 +#: usr/local/www/diag_defaults.php:80 +msgid "Are you sure you want to proceed?" +msgstr "ã‚ãªãŸãŒç¶šè¡Œã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ" + +#: usr/local/www/diag_defaults.php:82 usr/local/www/crash_reporter.php:77 +#: usr/local/www/halt.php:70 usr/local/www/pkg.php:340 +#: usr/local/www/system_firmware.php:230 usr/local/www/reboot.php:62 +#: usr/local/www/pkg.php:422 usr/local/www/reboot.php:43 +#: usr/local/www/reboot.php:65 usr/local/www/halt.php:49 +#: usr/local/www/system_firmware.php:237 usr/local/www/system_firmware.php:240 +#: usr/local/www/diag_defaults.php:47 usr/local/www/diag_defaults.php:83 +#: usr/local/www/system_firmware.php:240 usr/local/www/reboot.php:43 +#: usr/local/www/reboot.php:65 usr/local/www/pkg.php:422 +#: usr/local/www/diag_defaults.php:47 usr/local/www/diag_defaults.php:83 +#: usr/local/www/halt.php:49 usr/local/www/halt.php:70 +#: usr/local/www/crash_reporter.php:77 +msgid "No" +msgstr "ã„ã„ãˆ" + +#: usr/local/www/diag_logs.php:65 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_routing.php:54 +#: usr/local/www/diag_logs_settings.php:136 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/diag_logs_filter.php:109 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_routing.php:54 usr/local/www/diag_logs_dhcp.php:59 +#: usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_ppp.php:57 usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_ipsec.php:91 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_filter_summary.php:34 +msgid "System logs" +msgstr "システムログ" + +#: usr/local/www/diag_logs.php:79 usr/local/www/diag_logs_auth.php:67 +#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_dhcp.php:72 +#: usr/local/www/diag_logs_filter.php:103 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_ipsec.php:104 usr/local/www/diag_logs_ntpd.php:67 +#: usr/local/www/diag_logs_openvpn.php:71 +#: usr/local/www/diag_logs_settings.php:212 +#: usr/local/www/diag_logs_vpn.php:128 usr/local/www/interfaces.php:1032 +#: usr/local/www/diag_logs_filter_summary.php:186 +#: usr/local/www/diag_logs_ppp.php:72 usr/local/www/diag_logs_relayd.php:68 +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/diag_logs_wireless.php:69 +#: usr/local/www/diag_logs_routing.php:67 +#: usr/local/www/diag_logs_settings.php:217 +#: usr/local/www/diag_logs_resolver.php:80 +#: usr/local/www/diag_logs_gateways.php:80 +#: usr/local/www/services_dhcp_edit.php:193 usr/local/www/interfaces.php:1118 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_routing.php:68 +#: usr/local/www/diag_logs_settings.php:224 +#: usr/local/www/diag_logs_relayd.php:69 usr/local/www/diag_logs_auth.php:68 +#: usr/local/www/diag_logs_ipsec.php:105 +#: usr/local/www/diag_logs_resolver.php:81 usr/local/www/diag_logs_ntpd.php:68 +#: usr/local/www/diag_logs_dhcp.php:73 usr/local/www/diag_logs_wireless.php:70 +#: usr/local/www/diag_logs_filter_summary.php:187 +#: usr/local/www/diag_logs_gateways.php:81 +#: usr/local/www/diag_logs_openvpn.php:72 usr/local/www/interfaces.php:1106 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_filter.php:93 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/diag_logs_filter_dynamic.php:99 +#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/interfaces.php:1120 +#: usr/local/www/diag_logs_filter.php:123 usr/local/www/interfaces.php:1162 +#: usr/local/www/interfaces.php:1157 usr/local/www/diag_logs_auth.php:68 +#: usr/local/www/diag_logs_settings.php:224 +#: usr/local/www/diag_logs_filter.php:123 +#: usr/local/www/diag_logs_routing.php:68 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_dhcp.php:73 +#: usr/local/www/diag_logs.php:79 +#: usr/local/www/diag_logs_filter_dynamic.php:99 +#: usr/local/www/diag_logs_ntpd.php:68 usr/local/www/diag_logs_openvpn.php:72 +#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/diag_logs_gateways.php:81 +#: usr/local/www/diag_logs_relayd.php:69 usr/local/www/diag_logs_vpn.php:128 +#: usr/local/www/diag_logs_ipsec.php:105 +#: usr/local/www/diag_logs_wireless.php:70 +#: usr/local/www/diag_logs_resolver.php:81 +#: usr/local/www/diag_logs_filter_summary.php:187 +#: usr/local/www/interfaces.php:1157 +msgid "DHCP" +msgstr "DHCP" + +#: usr/local/www/diag_logs.php:80 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_auth.php:68 usr/local/www/diag_logs_dhcp.php:73 +#: usr/local/www/diag_logs_filter.php:104 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_ipsec.php:105 usr/local/www/diag_logs_ntpd.php:68 +#: usr/local/www/diag_logs_openvpn.php:72 +#: usr/local/www/diag_logs_settings.php:213 +#: usr/local/www/diag_logs_vpn.php:129 +#: usr/local/www/diag_logs_filter_summary.php:187 +#: usr/local/www/diag_logs_ppp.php:73 usr/local/www/diag_logs_relayd.php:69 +#: usr/local/www/diag_logs_wireless.php:70 +#: usr/local/www/diag_logs_routing.php:68 +#: usr/local/www/diag_logs_settings.php:218 +#: usr/local/www/diag_logs_resolver.php:81 +#: usr/local/www/diag_logs_gateways.php:81 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_routing.php:69 +#: usr/local/www/diag_logs_settings.php:225 +#: usr/local/www/diag_logs_relayd.php:70 usr/local/www/diag_logs_auth.php:69 +#: usr/local/www/diag_logs_ipsec.php:106 +#: usr/local/www/diag_logs_resolver.php:82 usr/local/www/diag_logs_ntpd.php:69 +#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_wireless.php:71 +#: usr/local/www/diag_logs_filter_summary.php:188 +#: usr/local/www/diag_logs_gateways.php:82 +#: usr/local/www/diag_logs_openvpn.php:73 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_filter.php:94 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_filter.php:124 +#: usr/local/www/diag_logs_auth.php:54 usr/local/www/diag_logs_auth.php:69 +#: usr/local/www/diag_logs_settings.php:225 +#: usr/local/www/diag_logs_filter.php:124 +#: usr/local/www/diag_logs_routing.php:69 usr/local/www/diag_logs_dhcp.php:74 +#: usr/local/www/diag_logs.php:80 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_ntpd.php:69 usr/local/www/diag_logs_openvpn.php:73 +#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_gateways.php:82 +#: usr/local/www/diag_logs_relayd.php:70 usr/local/www/diag_logs_vpn.php:129 +#: usr/local/www/diag_logs_ipsec.php:106 +#: usr/local/www/diag_logs_wireless.php:71 +#: usr/local/www/diag_logs_resolver.php:82 +#: usr/local/www/diag_logs_filter_summary.php:188 +msgid "Portal Auth" +msgstr "ãƒãƒ¼ã‚¿ãƒ«èªè¨¼" + +#: usr/local/www/diag_logs.php:81 usr/local/www/diag_logs_auth.php:69 +#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_filter.php:105 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_ipsec.php:106 usr/local/www/diag_logs_ntpd.php:69 +#: usr/local/www/diag_logs_openvpn.php:73 +#: usr/local/www/diag_logs_settings.php:214 +#: usr/local/www/diag_logs_vpn.php:130 +#: usr/local/www/diag_logs_filter_summary.php:188 +#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:74 +#: usr/local/www/diag_logs_relayd.php:70 +#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/diag_ipsec.php:48 +#: usr/local/www/diag_ipsec_sad.php:49 usr/local/www/diag_ipsec_spd.php:49 +#: usr/local/www/fbegin.inc:147 usr/local/www/fbegin.inc:164 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 +#: usr/local/www/diag_logs_wireless.php:71 +#: usr/local/www/diag_logs_routing.php:69 +#: usr/local/www/diag_logs_settings.php:219 usr/local/www/fbegin.inc:181 +#: usr/local/www/diag_logs_resolver.php:82 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/diag_logs_gateways.php:82 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_routing.php:70 +#: usr/local/www/diag_logs_settings.php:226 usr/local/www/fbegin.inc:172 +#: usr/local/www/fbegin.inc:189 usr/local/www/diag_logs_relayd.php:71 +#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:70 +#: usr/local/www/diag_logs_ipsec.php:107 +#: usr/local/www/diag_logs_resolver.php:83 usr/local/www/diag_logs_ntpd.php:70 +#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_wireless.php:72 +#: usr/local/www/diag_logs_filter_summary.php:189 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/diag_logs_gateways.php:83 +#: usr/local/www/diag_logs_openvpn.php:74 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_filter.php:95 usr/local/www/vpn_ipsec.php:125 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_ppp.php:72 usr/local/www/fbegin.inc:163 +#: usr/local/www/fbegin.inc:180 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_filter.php:125 usr/local/www/diag_logs_auth.php:70 +#: usr/local/www/diag_logs_settings.php:226 +#: usr/local/www/diag_logs_filter.php:125 usr/local/www/vpn_ipsec.php:125 +#: usr/local/www/diag_logs_routing.php:70 usr/local/www/diag_logs_dhcp.php:75 +#: usr/local/www/diag_ipsec.php:48 usr/local/www/diag_logs.php:81 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_ntpd.php:70 usr/local/www/diag_ipsec_spd.php:49 +#: usr/local/www/diag_logs_openvpn.php:74 usr/local/www/diag_logs_ppp.php:72 +#: usr/local/www/diag_logs_gateways.php:83 usr/local/www/fbegin.inc:163 +#: usr/local/www/fbegin.inc:180 usr/local/www/diag_logs_relayd.php:71 +#: usr/local/www/diag_logs_vpn.php:130 usr/local/www/diag_logs_ipsec.php:107 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_wireless.php:72 +#: usr/local/www/diag_logs_resolver.php:83 +#: usr/local/www/diag_logs_filter_summary.php:189 +msgid "IPsec" +msgstr "IPsecã®" + +#: usr/local/www/diag_logs.php:82 usr/local/www/diag_logs_auth.php:70 +#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_filter.php:106 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_ipsec.php:107 usr/local/www/diag_logs_ntpd.php:70 +#: usr/local/www/diag_logs_openvpn.php:74 +#: usr/local/www/diag_logs_settings.php:215 +#: usr/local/www/diag_logs_vpn.php:131 usr/local/www/interfaces.php:1032 +#: usr/local/www/diag_logs_filter_summary.php:189 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_ppp.php:75 +#: usr/local/www/diag_logs_relayd.php:71 +#: usr/local/www/status_interfaces.php:154 +#: usr/local/www/diag_logs_wireless.php:72 +#: usr/local/www/diag_logs_routing.php:70 +#: usr/local/www/diag_logs_settings.php:220 +#: usr/local/www/status_interfaces.php:172 +#: usr/local/www/diag_logs_resolver.php:83 +#: usr/local/www/diag_logs_gateways.php:83 usr/local/www/interfaces.php:1118 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_routing.php:71 +#: usr/local/www/diag_logs_settings.php:227 +#: usr/local/www/diag_logs_relayd.php:72 +#: usr/local/www/status_interfaces.php:175 usr/local/www/diag_logs_auth.php:71 +#: usr/local/www/diag_logs_ipsec.php:108 +#: usr/local/www/diag_logs_resolver.php:84 usr/local/www/diag_logs_ntpd.php:71 +#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_wireless.php:73 +#: usr/local/www/diag_logs_filter_summary.php:190 +#: usr/local/www/diag_logs_gateways.php:84 +#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/interfaces.php:1106 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_filter.php:96 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_ppp.php:57 usr/local/www/diag_logs_ppp.php:73 +#: usr/local/www/interfaces.php:1120 usr/local/www/diag_logs_filter.php:126 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157 +#: usr/local/www/diag_logs_auth.php:71 +#: usr/local/www/diag_logs_settings.php:227 +#: usr/local/www/diag_logs_filter.php:126 +#: usr/local/www/diag_logs_routing.php:71 usr/local/www/diag_logs_dhcp.php:76 +#: usr/local/www/diag_logs.php:82 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_ntpd.php:71 usr/local/www/status_interfaces.php:175 +#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/diag_logs_ppp.php:73 usr/local/www/diag_logs_gateways.php:84 +#: usr/local/www/diag_logs_relayd.php:72 usr/local/www/diag_logs_vpn.php:131 +#: usr/local/www/diag_logs_ipsec.php:108 +#: usr/local/www/diag_logs_wireless.php:73 +#: usr/local/www/diag_logs_resolver.php:84 +#: usr/local/www/diag_logs_filter_summary.php:190 +#: usr/local/www/interfaces.php:1157 +msgid "PPP" +msgstr "PPP" + +#: usr/local/www/diag_logs.php:83 usr/local/www/diag_logs_auth.php:71 +#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_filter.php:107 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_ipsec.php:108 usr/local/www/diag_logs_ntpd.php:71 +#: usr/local/www/diag_logs_openvpn.php:75 +#: usr/local/www/diag_logs_settings.php:216 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_vpn.php:132 +#: usr/local/www/diag_logs_filter_summary.php:190 +#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:76 +#: usr/local/www/diag_logs_relayd.php:72 +#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/vpn_pppoe.php:86 +#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users_edit.php:135 usr/local/www/fbegin.inc:351 +#: usr/local/www/status_rrd_graph_settings.php:151 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/diag_logs_wireless.php:73 +#: usr/local/www/diag_logs_routing.php:71 +#: usr/local/www/diag_logs_settings.php:221 usr/local/www/fbegin.inc:369 +#: usr/local/www/status_rrd_graph_settings.php:152 +#: usr/local/www/diag_logs_resolver.php:84 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/diag_logs_gateways.php:84 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_routing.php:72 +#: usr/local/www/diag_logs_settings.php:228 usr/local/www/fbegin.inc:315 +#: usr/local/www/diag_logs_relayd.php:73 +#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:72 +#: usr/local/www/diag_logs_ipsec.php:109 +#: usr/local/www/diag_logs_resolver.php:85 usr/local/www/diag_logs_ntpd.php:72 +#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_wireless.php:74 +#: usr/local/www/diag_logs_filter_summary.php:191 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/diag_logs_gateways.php:85 +#: usr/local/www/diag_logs_openvpn.php:76 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_filter.php:97 usr/local/www/vpn_pppoe.php:87 +#: usr/local/www/vpn_ipsec.php:125 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_ppp.php:74 usr/local/www/vpn_pptp.php:196 +#: usr/local/www/fbegin.inc:307 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_filter.php:127 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/vpn_pppoe.php:87 usr/local/www/diag_logs_auth.php:72 +#: usr/local/www/diag_logs_settings.php:228 +#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/diag_logs_filter.php:127 +#: usr/local/www/vpn_ipsec.php:125 usr/local/www/diag_logs_routing.php:72 +#: usr/local/www/diag_logs_dhcp.php:77 +#: usr/local/www/status_rrd_graph_settings.php:152 +#: usr/local/www/diag_logs.php:83 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_ntpd.php:72 usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/diag_logs_openvpn.php:76 usr/local/www/diag_logs_ppp.php:74 +#: usr/local/www/diag_logs_gateways.php:85 usr/local/www/vpn_pptp.php:196 +#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:307 +#: usr/local/www/diag_logs_relayd.php:73 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_vpn.php:132 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/diag_logs_ipsec.php:109 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_mobile.php:240 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_wireless.php:74 +#: usr/local/www/diag_logs_resolver.php:85 +#: usr/local/www/diag_logs_filter_summary.php:191 +msgid "VPN" +msgstr "VPN" + +#: usr/local/www/diag_logs.php:85 usr/local/www/diag_logs_auth.php:73 +#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_ipsec.php:110 usr/local/www/diag_logs_ntpd.php:73 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_openvpn.php:77 +#: usr/local/www/diag_logs_settings.php:218 +#: usr/local/www/diag_logs_vpn.php:134 +#: usr/local/www/diag_packet_capture.php:130 usr/local/www/diag_backup.php:112 +#: usr/local/www/license.php:213 +#: usr/local/www/diag_logs_filter_summary.php:192 +#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/diag_logs_relayd.php:74 +#: usr/local/www/status_graph.php:66 usr/local/www/fbegin.inc:148 +#: usr/local/www/fbegin.inc:166 usr/local/www/status_services.php:343 +#: usr/local/www/status_openvpn.php:46 usr/local/www/vpn_openvpn_client.php:40 +#: usr/local/www/vpn_openvpn_csc.php:40 +#: usr/local/www/vpn_openvpn_server.php:40 +#: usr/local/www/widgets/widgets/services_status.widget.php:148 +#: usr/local/www/diag_logs_wireless.php:75 +#: usr/local/www/diag_logs_routing.php:73 +#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:165 +#: usr/local/www/fbegin.inc:184 usr/local/www/diag_backup.php:189 +#: usr/local/www/diag_logs_resolver.php:86 +#: usr/local/www/diag_packet_capture.php:134 +#: usr/local/www/diag_logs_gateways.php:86 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: etc/inc/service-utils.inc:333 usr/local/www/diag_logs_routing.php:74 +#: usr/local/www/diag_logs_settings.php:230 usr/local/www/fbegin.inc:173 +#: usr/local/www/fbegin.inc:192 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111 +#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:74 +#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_wireless.php:76 +#: usr/local/www/vpn_openvpn_server.php:423 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/diag_packet_capture.php:64 +#: usr/local/www/diag_logs_gateways.php:87 +#: usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_filter.php:99 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_ppp.php:76 usr/local/www/fbegin.inc:164 +#: usr/local/www/fbegin.inc:183 usr/local/www/vpn_openvpn_server.php:445 +#: etc/inc/service-utils.inc:332 usr/local/www/diag_logs_filter.php:129 +#: etc/inc/system.inc:1627 etc/inc/service-utils.inc:349 +#: etc/inc/system.inc:1635 usr/local/www/diag_logs_auth.php:74 +#: usr/local/www/diag_logs_settings.php:230 +#: usr/local/www/vpn_openvpn_client.php:40 usr/local/www/status_openvpn.php:46 +#: usr/local/www/diag_logs_filter.php:129 usr/local/www/vpn_openvpn_csc.php:40 +#: usr/local/www/diag_logs_routing.php:74 usr/local/www/status_graph.php:66 +#: usr/local/www/diag_logs_dhcp.php:79 +#: usr/local/www/diag_packet_capture.php:64 usr/local/www/diag_logs.php:85 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/license.php:213 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_openvpn.php:78 usr/local/www/diag_logs_ppp.php:76 +#: usr/local/www/diag_logs_gateways.php:87 usr/local/www/diag_backup.php:189 +#: usr/local/www/fbegin.inc:164 usr/local/www/fbegin.inc:183 +#: usr/local/www/diag_logs_relayd.php:75 usr/local/www/diag_logs_vpn.php:134 +#: usr/local/www/diag_logs_ipsec.php:111 +#: usr/local/www/vpn_openvpn_server.php:445 +#: usr/local/www/diag_logs_wireless.php:76 +#: usr/local/www/diag_logs_resolver.php:87 +#: usr/local/www/diag_logs_filter_summary.php:193 etc/inc/system.inc:1694 +#: etc/inc/service-utils.inc:349 +msgid "OpenVPN" +msgstr "OpenVPNã®" + +#: usr/local/www/diag_logs.php:86 usr/local/www/diag_logs_auth.php:74 +#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_filter.php:110 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/diag_logs_ipsec.php:111 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_settings.php:219 +#: usr/local/www/diag_logs_vpn.php:135 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/diag_logs_ppp.php:79 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/fbegin.inc:141 usr/local/www/diag_logs_wireless.php:76 +msgid "OpenNTPD" +msgstr "OpenNTPD" + +#: usr/local/www/diag_logs.php:87 usr/local/www/diag_logs_auth.php:75 +#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_filter.php:111 +#: usr/local/www/diag_logs_filter_dynamic.php:110 +#: usr/local/www/diag_logs_ipsec.php:112 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_settings.php:220 +#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/interfaces_bridge.php:91 +#: usr/local/www/interfaces_gif.php:90 usr/local/www/interfaces_gre.php:91 +#: usr/local/www/interfaces_groups.php:77 +#: usr/local/www/interfaces_assign.php:404 +#: usr/local/www/status_wireless.php:41 usr/local/www/interfaces_vlan.php:92 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/diag_logs_ppp.php:80 usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/interfaces_lagg.php:96 usr/local/www/interfaces_ppps.php:92 +#: usr/local/www/interfaces_qinq.php:100 +#: usr/local/www/interfaces_wireless.php:76 +#: usr/local/www/interfaces_wireless.php:90 +#: usr/local/www/interfaces_wireless_edit.php:145 usr/local/www/fbegin.inc:183 +#: usr/local/www/status_rrd_graph.php:344 +#: usr/local/www/status_rrd_graph_settings.php:143 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/diag_logs_routing.php:86 usr/local/www/fbegin.inc:201 +#: usr/local/www/status_rrd_graph_settings.php:144 +#: usr/local/www/diag_logs_resolver.php:100 usr/local/www/diag_logs.php:99 +#: usr/local/www/status_rrd_graph.php:392 +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_gateways.php:100 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_routing.php:87 usr/local/www/fbegin.inc:209 +#: usr/local/www/interfaces_groups.php:78 +#: usr/local/www/interfaces_qinq.php:101 usr/local/www/interfaces_ppps.php:93 +#: usr/local/www/interfaces_bridge.php:92 +#: usr/local/www/diag_logs_resolver.php:101 +#: usr/local/www/interfaces_lagg.php:97 usr/local/www/interfaces_gre.php:92 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/diag_logs_wireless.php:89 +#: usr/local/www/interfaces_assign.php:398 +#: usr/local/www/diag_logs_gateways.php:101 +#: usr/local/www/interfaces_vlan.php:93 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/interfaces_gif.php:91 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_lagg.php:101 +#: usr/local/www/interfaces_vlan.php:99 usr/local/www/status_rrd_graph.php:417 +#: usr/local/www/interfaces_bridge.php:98 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/interfaces_wireless.php:93 usr/local/www/fbegin.inc:200 +#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_gif.php:95 +#: usr/local/www/status_wireless.php:41 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_qinq.php:104 +#: usr/local/www/diag_logs_routing.php:87 +#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_vlan.php:99 +#: usr/local/www/status_rrd_graph.php:417 +#: usr/local/www/status_rrd_graph_settings.php:144 +#: usr/local/www/diag_logs.php:99 usr/local/www/interfaces_bridge.php:98 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/interfaces_wireless.php:93 +#: usr/local/www/interfaces_groups.php:78 usr/local/www/interfaces_ppps.php:93 +#: usr/local/www/diag_logs_gateways.php:101 usr/local/www/fbegin.inc:200 +#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_gif.php:95 +#: usr/local/www/interfaces_assign.php:404 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_wireless.php:89 +#: usr/local/www/diag_logs_resolver.php:101 +msgid "Wireless" +msgstr "ワイヤレス" + +#: usr/local/www/diag_logs.php:88 usr/local/www/diag_logs_auth.php:76 +#: usr/local/www/diag_logs_dhcp.php:81 usr/local/www/diag_logs_filter.php:112 +#: usr/local/www/diag_logs_filter_dynamic.php:111 +#: usr/local/www/diag_logs_ipsec.php:113 usr/local/www/diag_logs_ntpd.php:76 +#: usr/local/www/diag_logs_openvpn.php:80 +#: usr/local/www/diag_logs_settings.php:132 +#: usr/local/www/diag_logs_settings.php:221 +#: usr/local/www/diag_logs_vpn.php:137 +#: usr/local/www/system_firmware_settings.php:74 +#: usr/local/www/diag_logs_filter_summary.php:195 +#: usr/local/www/diag_logs_ppp.php:81 usr/local/www/diag_logs_relayd.php:77 +#: usr/local/www/status_rrd_graph.php:361 +#: usr/local/www/status_rrd_graph_settings.php:160 +#: usr/local/www/system_authservers.php:423 +#: usr/local/www/system_groupmanager.php:242 +#: usr/local/www/system_groupmanager_addprivs.php:170 +#: usr/local/www/system_usermanager.php:442 +#: usr/local/www/system_usermanager_addprivs.php:169 +#: usr/local/www/system_usermanager_settings.php:115 +#: usr/local/www/diag_logs_wireless.php:78 +#: usr/local/www/diag_logs_routing.php:75 +#: usr/local/www/diag_logs_settings.php:136 +#: usr/local/www/diag_logs_settings.php:225 +#: usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_setting.php:122 +#: usr/local/www/status_rrd_graph_settings.php:161 +#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112 +#: usr/local/www/system_usermanager.php:440 +#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/diag_logs_ppp.php:80 +#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/diag_logs.php:87 usr/local/www/status_rrd_graph.php:409 +#: usr/local/www/load_balancer_virtual_server.php:118 +#: usr/local/www/system_groupmanager_addprivs.php:168 +#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/load_balancer_monitor.php:112 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/diag_logs_gateways.php:88 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/load_balancer_pool.php:121 +#: usr/local/www/diag_logs_filter.php:111 +#: usr/local/www/diag_logs_routing.php:76 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_settings.php:232 +#: usr/local/www/load_balancer_setting.php:121 +#: usr/local/www/diag_logs_resolver.php:89 +#: usr/local/www/load_balancer_virtual_server.php:116 +#: usr/local/www/load_balancer_monitor.php:110 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_gateways.php:89 +#: usr/local/www/diag_logs_filter_dynamic.php:110 +#: usr/local/www/load_balancer_pool.php:119 +#: usr/local/www/system_authservers.php:428 +#: usr/local/www/diag_logs_filter.php:101 +#: usr/local/www/status_rrd_graph.php:434 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/system_authservers.php:435 +#: usr/local/www/diag_logs_filter.php:131 +#: usr/local/www/system_usermanager_settings.php:117 +#: usr/local/www/diag_logs_auth.php:76 +#: usr/local/www/system_groupmanager.php:242 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_settings.php:232 +#: usr/local/www/system_usermanager_addprivs.php:169 +#: usr/local/www/diag_logs_filter.php:131 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_routing.php:76 usr/local/www/diag_logs_dhcp.php:81 +#: usr/local/www/status_rrd_graph.php:434 +#: usr/local/www/status_rrd_graph_settings.php:161 +#: usr/local/www/diag_logs.php:87 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_ntpd.php:76 usr/local/www/diag_logs_openvpn.php:80 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_setting.php:121 +#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/load_balancer_pool.php:119 +#: usr/local/www/diag_logs_gateways.php:89 +#: usr/local/www/system_authservers.php:435 +#: usr/local/www/system_groupmanager_addprivs.php:168 +#: usr/local/www/system_usermanager_settings.php:117 +#: usr/local/www/diag_logs_relayd.php:77 usr/local/www/diag_logs_vpn.php:136 +#: usr/local/www/diag_logs_ipsec.php:113 +#: usr/local/www/load_balancer_monitor.php:110 +#: usr/local/www/system_usermanager.php:440 +#: usr/local/www/load_balancer_virtual_server.php:116 +#: usr/local/www/diag_logs_wireless.php:78 +#: usr/local/www/diag_logs_resolver.php:89 +#: usr/local/www/diag_logs_filter_summary.php:195 +msgid "Settings" +msgstr "セッティング" + +#: usr/local/www/diag_logs.php:98 usr/local/www/diag_logs_resolver.php:110 +#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_gateways.php:110 +#: usr/local/www/diag_logs_resolver.php:111 +#: usr/local/www/diag_logs_gateways.php:111 usr/local/www/diag_logs.php:109 +#: usr/local/www/diag_logs_gateways.php:111 +#: usr/local/www/diag_logs_resolver.php:111 +#, php-format +msgid "Last %s system log entries" +msgstr "最後%sシステムログエントリ" + +#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_auth.php:90 +#: usr/local/www/diag_logs_dhcp.php:95 usr/local/www/diag_logs_filter.php:208 +#: usr/local/www/diag_logs_ipsec.php:150 usr/local/www/diag_logs_ntpd.php:91 +#: usr/local/www/diag_logs_openvpn.php:97 usr/local/www/diag_logs_vpn.php:188 +#: usr/local/www/diag_logs_ppp.php:114 usr/local/www/diag_logs_relayd.php:91 +#: usr/local/www/diag_logs_wireless.php:92 +#: usr/local/www/diag_logs_routing.php:101 +#: usr/local/www/diag_logs_relayd.php:90 usr/local/www/diag_logs_auth.php:89 +#: usr/local/www/diag_logs_ipsec.php:149 usr/local/www/diag_logs_vpn.php:187 +#: usr/local/www/diag_logs_ppp.php:113 +#: usr/local/www/diag_logs_resolver.php:121 +#: usr/local/www/diag_logs_ntpd.php:90 usr/local/www/diag_logs.php:120 +#: usr/local/www/diag_logs_dhcp.php:94 +#: usr/local/www/diag_logs_wireless.php:103 +#: usr/local/www/diag_logs_gateways.php:121 +#: usr/local/www/diag_logs_openvpn.php:96 +#: usr/local/www/diag_logs_filter.php:205 +#: usr/local/www/diag_logs_routing.php:102 +#: usr/local/www/diag_logs_resolver.php:122 +#: usr/local/www/diag_logs_wireless.php:104 +#: usr/local/www/diag_logs_gateways.php:122 +#: usr/local/www/diag_logs_filter.php:264 usr/local/www/diag_logs_ppp.php:95 +#: usr/local/www/diag_logs_ipsec.php:151 +#: usr/local/www/diag_logs_filter.php:398 usr/local/www/diag_logs_auth.php:90 +#: usr/local/www/diag_logs_filter.php:398 +#: usr/local/www/diag_logs_routing.php:102 usr/local/www/diag_logs_dhcp.php:95 +#: usr/local/www/diag_logs.php:120 usr/local/www/diag_logs_ntpd.php:91 +#: usr/local/www/diag_logs_openvpn.php:97 usr/local/www/diag_logs_ppp.php:95 +#: usr/local/www/diag_logs_gateways.php:122 +#: usr/local/www/diag_logs_relayd.php:91 usr/local/www/diag_logs_vpn.php:187 +#: usr/local/www/diag_logs_ipsec.php:151 +#: usr/local/www/diag_logs_wireless.php:104 +#: usr/local/www/diag_logs_resolver.php:122 +msgid "Clear log" +msgstr "ãƒ­ã‚°ã®æ¶ˆåŽ»" + +#: usr/local/www/diag_logs.php:115 usr/local/www/diag_logs_filter.php:128 +#: usr/local/www/diag_dump_states.php:138 +#: usr/local/www/diag_dump_states_sources.php:133 +#: usr/local/www/diag_logs_resolver.php:127 usr/local/www/diag_logs.php:126 +#: usr/local/www/diag_dump_states.php:153 +#: usr/local/www/diag_logs_gateways.php:127 +#: usr/local/www/diag_logs_filter.php:127 +#: usr/local/www/diag_logs_resolver.php:128 +#: usr/local/www/diag_dump_states_sources.php:132 +#: usr/local/www/diag_dump_states.php:152 +#: usr/local/www/diag_logs_gateways.php:128 +#: usr/local/www/diag_logs_filter.php:147 +#: usr/local/www/diag_logs_filter.php:197 +#: usr/local/www/diag_logs_filter.php:260 +#: usr/local/www/diag_dump_states.php:141 +#: usr/local/www/diag_logs_filter.php:197 +#: usr/local/www/diag_logs_filter.php:260 +#: usr/local/www/diag_dump_states.php:141 +#: usr/local/www/diag_dump_states_sources.php:132 +#: usr/local/www/diag_logs.php:126 usr/local/www/diag_logs_gateways.php:128 +#: usr/local/www/diag_logs_resolver.php:128 +msgid "Filter" +msgstr "フィルター" + +#: usr/local/www/diag_logs_auth.php:86 usr/local/www/diag_logs_auth.php:85 +#: usr/local/www/diag_logs_auth.php:86 +#, php-format +msgid "Last %s Portal Auth log entries" +msgstr "最後%sãƒãƒ¼ã‚¿ãƒ«èªè¨¼ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª" + +#: usr/local/www/diag_logs_dhcp.php:91 usr/local/www/diag_logs_dhcp.php:90 +#: usr/local/www/diag_logs_dhcp.php:91 +#, php-format +msgid "Last %s DHCP service log entries" +msgstr "最後%s DHCPサービスã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª" + +#: usr/local/www/diag_logs_filter.php:56 usr/local/www/diag_logs_filter.php:63 +#: usr/local/www/diag_logs_filter.php:63 +msgid "The rule that triggered this action is" +msgstr "ã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’トリガã—ãŸãƒ«ãƒ¼ãƒ«ãŒã‚ã‚‹" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter_summary.php:204 +msgid "Normal View" +msgstr "通常ã®ãƒ“ュー" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter_summary.php:204 +msgid "Dynamic View" +msgstr "動的ビュー" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter.php:274 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter_summary.php:204 +msgid "Summary View" +msgstr "概è¦ãƒ“ュー" + +#: usr/local/www/diag_logs_filter.php:139 +#: usr/local/www/diag_logs_filter.php:138 +#: usr/local/www/diag_logs_filter.php:170 +#: usr/local/www/diag_logs_filter.php:296 +#: usr/local/www/diag_logs_filter.php:296 +#, php-format +msgid "Last %s firewall log entries." +msgstr "最後%sã¯ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã‚’ファイアウォール。" + +#: usr/local/www/diag_logs_filter.php:141 +#: usr/local/www/diag_logs_filter.php:140 +#: usr/local/www/diag_logs_filter.php:172 +#: usr/local/www/diag_logs_filter.php:298 +#: usr/local/www/diag_logs_filter.php:298 +msgid "matched log entries." +msgstr "一致ã—ãŸãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã€‚" + +#: usr/local/www/diag_logs_filter.php:143 +#: usr/local/www/diag_logs_filter.php:142 +#: usr/local/www/diag_logs_filter.php:173 +#: usr/local/www/diag_logs_filter.php:299 +#: usr/local/www/diag_logs_filter.php:299 +#, php-format +msgid "Max(%s)" +msgstr "マックス( %s )" + +#: usr/local/www/diag_logs_filter.php:146 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#: usr/local/www/diag_logs_filter.php:145 +#: usr/local/www/diag_logs_filter_dynamic.php:125 +#: usr/local/www/diag_logs_filter.php:177 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/widgets/widgets/log.widget.php:163 +#: usr/local/www/diag_logs_filter.php:303 +#: usr/local/www/widgets/widgets/log.widget.php:167 +#: usr/local/www/diag_logs_filter.php:303 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/widgets/widgets/log.widget.php:174 +msgid "Act" +msgstr "行為" + +#: usr/local/www/diag_logs_filter.php:147 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_vpn.php:175 +#: usr/local/www/firewall_schedule_edit.php:910 +#: usr/local/www/diag_logs_vpn.php:174 +#: usr/local/www/diag_logs_filter_dynamic.php:125 +#: usr/local/www/diag_logs_filter.php:146 +#: usr/local/www/firewall_schedule_edit.php:909 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter.php:178 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_system_pftop.php:143 +#: usr/local/www/diag_logs_filter.php:159 +#: usr/local/www/diag_logs_filter.php:304 +#: usr/local/www/diag_logs_filter.php:159 +#: usr/local/www/diag_logs_filter.php:304 +#: usr/local/www/firewall_schedule_edit.php:909 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_system_pftop.php:143 usr/local/www/diag_logs_vpn.php:174 +#: usr/local/www/widgets/widgets/log.widget.php:175 +msgid "Time" +msgstr "時間" + +#: usr/local/www/diag_logs_filter.php:148 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/firewall_nat.php:195 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter.php:147 usr/local/www/firewall_nat.php:200 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/diag_logs_filter.php:305 usr/local/www/firewall_nat.php:203 +#: usr/local/www/diag_logs_filter.php:305 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/firewall_nat.php:203 +msgid "If" +msgstr "ã‚‚ã—" + +#: usr/local/www/diag_logs_filter.php:149 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/firewall_nat_edit.php:529 +#: usr/local/www/firewall_nat_edit.php:535 +#: usr/local/www/firewall_nat_out.php:342 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:468 +#: usr/local/www/firewall_rules.php:364 +#: usr/local/www/firewall_rules_edit.php:855 +#: usr/local/www/vpn_ipsec_mobile.php:356 +#: usr/local/www/vpn_ipsec_mobile.php:377 usr/local/www/diag_ipsec_sad.php:87 +#: usr/local/www/diag_ipsec_spd.php:86 usr/local/www/firewall_nat_out.php:352 +#: usr/local/www/firewall_nat_out_edit.php:481 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules.php:368 +#: usr/local/www/firewall_nat_edit.php:536 +#: usr/local/www/firewall_nat_edit.php:542 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_filter.php:148 +#: usr/local/www/firewall_nat_out.php:353 +#: usr/local/www/vpn_ipsec_mobile.php:383 +#: usr/local/www/vpn_ipsec_mobile.php:401 usr/local/www/diag_ipsec_sad.php:88 +#: usr/local/www/firewall_rules.php:361 +#: usr/local/www/firewall_nat_edit.php:541 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/diag_ipsec_spd.php:87 usr/local/www/diag_logs_filter.php:183 +#: usr/local/www/firewall_rules_edit.php:893 +#: usr/local/www/firewall_nat_edit.php:530 +#: usr/local/www/diag_logs_filter_dynamic.php:131 +#: usr/local/www/widgets/widgets/log.widget.php:165 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/firewall_rules_edit.php:905 +#: usr/local/www/diag_logs_filter.php:309 +#: usr/local/www/firewall_nat_edit.php:548 +#: usr/local/www/firewall_nat_out.php:360 usr/local/www/firewall_rules.php:359 +#: usr/local/www/widgets/widgets/log.widget.php:169 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:497 +#: usr/local/www/firewall_rules_edit.php:904 +#: usr/local/www/firewall_nat_edit.php:543 +#: usr/local/www/firewall_nat_edit.php:549 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/firewall_rules_edit.php:904 +#: usr/local/www/diag_logs_filter.php:309 +#: usr/local/www/firewall_nat_edit.php:543 +#: usr/local/www/firewall_nat_edit.php:549 +#: usr/local/www/diag_logs_filter_dynamic.php:131 +#: usr/local/www/diag_ipsec_spd.php:87 usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/firewall_rules.php:359 +#: usr/local/www/widgets/widgets/log.widget.php:177 +#: usr/local/www/vpn_ipsec_mobile.php:383 +#: usr/local/www/vpn_ipsec_mobile.php:401 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:497 +#: usr/local/www/diag_ipsec_sad.php:88 +msgid "Source" +msgstr "ソース" + +#: usr/local/www/diag_logs_filter.php:150 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/firewall_nat_1to1_edit.php:383 +#: usr/local/www/firewall_nat_edit.php:624 +#: usr/local/www/firewall_nat_out.php:344 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:498 +#: usr/local/www/firewall_rules.php:366 +#: usr/local/www/firewall_rules_edit.php:948 +#: usr/local/www/diag_ipsec_sad.php:88 usr/local/www/diag_ipsec_spd.php:87 +#: usr/local/www/firewall_nat_out.php:354 +#: usr/local/www/firewall_nat_1to1_edit.php:390 +#: usr/local/www/firewall_nat_out_edit.php:511 +#: usr/local/www/firewall_rules_edit.php:983 +#: usr/local/www/firewall_rules.php:370 +#: usr/local/www/firewall_nat_edit.php:631 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/diag_logs_filter.php:149 +#: usr/local/www/firewall_nat_out.php:355 +#: usr/local/www/firewall_nat_1to1_edit.php:388 +#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/firewall_rules.php:363 +#: usr/local/www/firewall_nat_edit.php:630 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_ipsec_spd.php:88 usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/firewall_rules_edit.php:992 +#: usr/local/www/firewall_nat_edit.php:625 +#: usr/local/www/diag_logs_filter_dynamic.php:132 +#: usr/local/www/widgets/widgets/log.widget.php:166 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/firewall_rules_edit.php:1005 +#: usr/local/www/diag_logs_filter.php:310 +#: usr/local/www/firewall_nat_edit.php:637 +#: usr/local/www/firewall_nat_out.php:362 usr/local/www/firewall_rules.php:361 +#: usr/local/www/widgets/widgets/log.widget.php:170 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:527 +#: usr/local/www/firewall_rules_edit.php:1004 +#: usr/local/www/firewall_nat_edit.php:638 +#: usr/local/www/firewall_nat_out.php:361 +#: usr/local/www/firewall_nat_1to1_edit.php:389 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/firewall_rules_edit.php:1004 +#: usr/local/www/diag_logs_filter.php:310 +#: usr/local/www/firewall_nat_edit.php:638 +#: usr/local/www/diag_logs_filter_dynamic.php:132 +#: usr/local/www/diag_ipsec_spd.php:88 usr/local/www/firewall_nat_out.php:361 +#: usr/local/www/firewall_rules.php:361 +#: usr/local/www/firewall_nat_1to1_edit.php:389 +#: usr/local/www/widgets/widgets/log.widget.php:178 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/diag_ipsec_sad.php:89 +msgid "Destination" +msgstr "å…ˆ" + +#: usr/local/www/diag_logs_filter.php:151 +#: usr/local/www/diag_logs_filter_dynamic.php:131 +#: usr/local/www/diag_dump_states.php:150 usr/local/www/firewall_rules.php:363 +#: usr/local/www/diag_states_summary.php:152 +#: usr/local/www/firewall_nat.php:196 usr/local/www/firewall_rules.php:367 +#: usr/local/www/diag_dump_states.php:168 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_states_summary.php:141 +#: usr/local/www/diag_logs_filter.php:150 usr/local/www/firewall_nat.php:201 +#: usr/local/www/firewall_rules.php:360 usr/local/www/diag_dump_states.php:167 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/diag_states_summary.php:143 +#: usr/local/www/diag_logs_filter.php:185 +#: usr/local/www/diag_logs_filter_dynamic.php:133 +#: usr/local/www/diag_logs_filter.php:311 +#: usr/local/www/diag_dump_states.php:156 usr/local/www/firewall_rules.php:358 +#: usr/local/www/firewall_nat.php:204 usr/local/www/diag_logs_filter.php:311 +#: usr/local/www/diag_dump_states.php:156 +#: usr/local/www/diag_states_summary.php:143 +#: usr/local/www/diag_logs_filter_dynamic.php:133 +#: usr/local/www/firewall_nat.php:204 usr/local/www/firewall_rules.php:358 +msgid "Proto" +msgstr "プロト" + +#: usr/local/www/diag_logs_filter.php:178 +#: usr/local/www/diag_logs_filter.php:183 +#: usr/local/www/diag_logs_filter_summary.php:81 +#: usr/local/www/diag_logs_filter.php:175 +#: usr/local/www/diag_logs_filter.php:180 +#: usr/local/www/diag_logs_filter_summary.php:82 +#: usr/local/www/diag_logs_filter.php:221 +#: usr/local/www/diag_logs_filter.php:228 +#: usr/local/www/diag_logs_filter.php:351 +#: usr/local/www/diag_logs_filter.php:353 +#: usr/local/www/diag_logs_filter.php:360 +#: usr/local/www/diag_logs_filter.php:362 +#: usr/local/www/widgets/widgets/log.widget.php:189 +#: usr/local/www/widgets/widgets/log.widget.php:192 +#: usr/local/www/diag_logs_filter.php:351 +#: usr/local/www/diag_logs_filter.php:353 +#: usr/local/www/diag_logs_filter.php:360 +#: usr/local/www/diag_logs_filter.php:362 +#: usr/local/www/widgets/widgets/log.widget.php:197 +#: usr/local/www/widgets/widgets/log.widget.php:200 +#: usr/local/www/diag_logs_filter_summary.php:82 +msgid "Reverse Resolve with DNS" +msgstr "DNSã«é€†è§£æ±º" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:355 +msgid "Easy Rule: Add to Block List" +msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ï¼šãƒªã‚¹ãƒˆã‚’ブロックã™ã‚‹ãŸã‚ã«è¿½åŠ ã™ã‚‹" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:355 +msgid "Do you really want to add this BLOCK rule?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ–ロックルールを追加ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Easy Rule is still experimental." +msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ã¯ã€ã¾ã å®Ÿé¨“çš„ãªã‚‚ã®ã§ã™ã€‚" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Continue at risk of your own peril." +msgstr "ã‚ãªãŸè‡ªèº«ã®å±é™ºã®ãƒªã‚¹ã‚¯ãŒç¶™ç¶šã™ã‚‹ã€‚" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Backups are also nice." +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã‚‚ã„ã„ã§ã™ã€‚" + +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:364 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Easy Rule: Pass this traffic" +msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ï¼šã“ã®ãƒˆãƒ©ãƒ•ィックを通éŽã•ã›ã‚‹" + +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:364 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Do you really want to add this PASS rule?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ‘スã®è¦å‰‡ã‚’追加ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/diag_logs_filter.php:196 +#: usr/local/www/diag_logs_filter.php:193 +#: usr/local/www/diag_logs_filter.php:251 +#: usr/local/www/diag_logs_filter.php:385 +#: usr/local/www/diag_logs_filter.php:385 +#, php-format +msgid "Last %s firewall log entries" +msgstr "最後%sファイアウォールã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª" + +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +msgid "Firewall (Dynamic View)" +msgstr "ファイアウォール(ダイナミックビュー)" + +#: usr/local/www/diag_logs_filter_dynamic.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:120 +#: usr/local/www/diag_logs_filter_dynamic.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#, php-format +msgid "Last %s records" +msgstr "最後%sレコード" + +#: usr/local/www/diag_logs_filter_dynamic.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:120 +#: usr/local/www/diag_logs_filter_dynamic.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +msgid "Pause:" +msgstr "ä¸€æ™‚åœæ­¢ï¼š" + +#: usr/local/www/diag_logs_filter_dynamic.php:153 +#: usr/local/www/diag_logs_filter_dynamic.php:151 +#: usr/local/www/diag_logs_filter_dynamic.php:152 +#: usr/local/www/diag_logs_filter_dynamic.php:165 +#: usr/local/www/diag_logs_filter_dynamic.php:165 +msgid "TCP Flags" +msgstr "TCPフラグ" + +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/status_services.php:330 +#: usr/local/www/widgets/widgets/services_status.widget.php:135 +#: etc/inc/service-utils.inc:320 etc/inc/service-utils.inc:319 +#: etc/inc/service-utils.inc:336 usr/local/www/diag_logs_ipsec.php:91 +#: etc/inc/service-utils.inc:336 +msgid "IPsec VPN" +msgstr "IPsec VPNã®" + +#: usr/local/www/diag_logs_ipsec.php:123 usr/local/www/diag_logs_ipsec.php:122 +#: usr/local/www/diag_logs_ipsec.php:123 +#, php-format +msgid "Last %s IPsec log entries" +msgstr "最後%s IPsecã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª" + +#: usr/local/www/diag_logs_ipsec.php:135 usr/local/www/diag_logs_ppp.php:99 +#: usr/local/www/diag_logs_ipsec.php:134 usr/local/www/diag_logs_ppp.php:98 +#: usr/local/www/diag_logs_ipsec.php:136 usr/local/www/diag_logs_ipsec.php:136 +msgid "Unknown Gateway/Dynamic" +msgstr "未知ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤/ダイナミック" + +#: usr/local/www/diag_logs_ntpd.php:86 +#, php-format +msgid "Last %s OpenNTPD log entries" +msgstr "最後%sã¯ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã‚’OpenNTPD" + +#: usr/local/www/diag_logs_openvpn.php:90 +#: usr/local/www/diag_logs_openvpn.php:89 +#: usr/local/www/diag_logs_openvpn.php:90 +#, php-format +msgid "Last %s OpenVPN log entries" +msgstr "最後%s OpenVPNã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª" + +#: usr/local/www/diag_dump_states.php:51 usr/local/www/status_openvpn.php:59 +#: usr/local/www/widgets/widgets/openvpn.widget.php:16 +#: usr/local/www/diag_dump_states_sources.php:51 +#: usr/local/www/widgets/widgets/openvpn.widget.php:17 +#: usr/local/www/status_openvpn.php:61 usr/local/www/status_openvpn.php:62 +#: usr/local/www/status_openvpn.php:62 usr/local/www/diag_dump_states.php:51 +#: usr/local/www/diag_dump_states_sources.php:51 +#: usr/local/www/widgets/widgets/openvpn.widget.php:17 +msgid "invalid input" +msgstr "無効入力" + +#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_dump_states.php:75 +#: usr/local/www/diag_dump_states.php:67 usr/local/www/diag_dump_states.php:67 +msgid "Show States" +msgstr "表示状態" + +#: usr/local/www/diag_dump_states.php:95 usr/local/www/status_openvpn.php:130 +#: usr/local/www/widgets/widgets/openvpn.widget.php:84 +#: usr/local/www/diag_dump_states_sources.php:95 +#: usr/local/www/diag_dump_states.php:105 +#: usr/local/www/widgets/widgets/openvpn.widget.php:85 +#: usr/local/www/status_openvpn.php:131 +#: usr/local/www/diag_dump_states_sources.php:94 +#: usr/local/www/diag_dump_states.php:104 usr/local/www/status_openvpn.php:132 +#: usr/local/www/diag_dump_states.php:96 usr/local/www/status_openvpn.php:132 +#: usr/local/www/diag_dump_states.php:96 +#: usr/local/www/diag_dump_states_sources.php:94 +#: usr/local/www/widgets/widgets/openvpn.widget.php:84 +msgid "An error occurred." +msgstr "エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: usr/local/www/diag_dump_states.php:110 +#: usr/local/www/diag_states_summary.php:151 +#: usr/local/www/diag_states_summary.php:153 +#: usr/local/www/diag_resetstate.php:77 usr/local/www/fbegin.inc:206 +#: usr/local/www/system_advanced_misc.php:398 +#: usr/local/www/diag_dump_states_sources.php:110 usr/local/www/fbegin.inc:224 +#: usr/local/www/system_advanced_misc.php:441 +#: usr/local/www/diag_dump_states.php:120 +#: usr/local/www/diag_states_summary.php:140 +#: usr/local/www/diag_states_summary.php:142 usr/local/www/fbegin.inc:233 +#: usr/local/www/system_advanced_misc.php:490 +#: usr/local/www/diag_dump_states_sources.php:109 +#: usr/local/www/diag_dump_states.php:119 +#: usr/local/www/diag_states_summary.php:144 +#: usr/local/www/system_advanced_misc.php:502 usr/local/www/fbegin.inc:225 +#: usr/local/www/diag_dump_states.php:111 +#: usr/local/www/system_advanced_misc.php:549 +#: usr/local/www/diag_dump_states.php:111 +#: usr/local/www/diag_states_summary.php:142 +#: usr/local/www/diag_states_summary.php:144 +#: usr/local/www/diag_dump_states_sources.php:109 +#: usr/local/www/system_advanced_misc.php:549 +#: usr/local/www/diag_resetstate.php:77 usr/local/www/fbegin.inc:225 +msgid "States" +msgstr "米国" + +#: usr/local/www/diag_dump_states.php:112 usr/local/www/diag_resetstate.php:79 +#: usr/local/www/diag_dump_states_sources.php:111 +#: usr/local/www/diag_dump_states.php:122 +#: usr/local/www/diag_dump_states_sources.php:110 +#: usr/local/www/diag_dump_states.php:121 +#: usr/local/www/diag_dump_states.php:113 +#: usr/local/www/diag_dump_states.php:113 +#: usr/local/www/diag_dump_states_sources.php:110 +#: usr/local/www/diag_resetstate.php:79 +msgid "Source Tracking" +msgstr "ソースã®è¿½è·¡" + +#: usr/local/www/diag_dump_states.php:113 usr/local/www/diag_resetstate.php:80 +#: usr/local/www/diag_dump_states_sources.php:112 +#: usr/local/www/diag_dump_states.php:123 +#: usr/local/www/diag_dump_states_sources.php:111 +#: usr/local/www/diag_dump_states.php:122 +#: usr/local/www/diag_dump_states.php:114 +#: usr/local/www/diag_dump_states.php:114 +#: usr/local/www/diag_dump_states_sources.php:111 +#: usr/local/www/diag_resetstate.php:80 +msgid "Reset States" +msgstr "米国ã®ãƒªã‚»ãƒƒãƒˆ" + +#: usr/local/www/diag_dump_states.php:134 +msgid "Current state count:" +msgstr "ç¾åœ¨ã®çŠ¶æ…‹ã‚«ã‚¦ãƒ³ãƒˆï¼š" + +#: usr/local/www/diag_dump_states.php:136 +#: usr/local/www/diag_dump_states_sources.php:131 +#: usr/local/www/diag_dump_states.php:151 +#: usr/local/www/diag_dump_states_sources.php:130 +#: usr/local/www/diag_dump_states.php:150 +#: usr/local/www/diag_dump_states.php:139 +#: usr/local/www/diag_dump_states.php:139 +#: usr/local/www/diag_dump_states_sources.php:130 +msgid "Filter expression:" +msgstr "å¼ã‚’フィルタ:" + +#: usr/local/www/diag_dump_states.php:151 +#: usr/local/www/diag_dump_states.php:169 +#: usr/local/www/diag_dump_states.php:168 +#: usr/local/www/diag_dump_states.php:157 +#: usr/local/www/diag_dump_states.php:157 +msgid "Source -> Router -> Destination" +msgstr "ソース - u003eルータ - u003e目的地" + +#: usr/local/www/diag_dump_states.php:152 +#: usr/local/www/status_dhcpv6_leases.php:486 +#: usr/local/www/diag_dump_states.php:170 +#: usr/local/www/status_dhcpv6_leases.php:487 +#: usr/local/www/diag_dump_states.php:169 +#: usr/local/www/status_dhcpv6_leases.php:490 +#: usr/local/www/diag_system_pftop.php:142 +#: usr/local/www/diag_dump_states.php:158 +#: usr/local/www/status_dhcpv6_leases.php:490 +#: usr/local/www/diag_dump_states.php:158 +#: usr/local/www/diag_system_pftop.php:142 +msgid "State" +msgstr "状態" + +#: usr/local/www/diag_dump_states.php:185 +#: usr/local/www/diag_dump_states.php:203 +#: usr/local/www/diag_dump_states.php:202 +#: usr/local/www/diag_dump_states.php:194 +#: usr/local/www/diag_dump_states.php:194 +msgid "Remove all state entries from" +msgstr "ã‹ã‚‰ã™ã¹ã¦ã®çŠ¶æ…‹ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã™ã‚‹" + +#: usr/local/www/diag_dump_states.php:185 +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:735 usr/local/www/diag_confbak.php:111 +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_dhcp.php:636 +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_dhcpv6.php:572 usr/local/www/services_dhcpv6.php:579 +#: usr/local/www/diag_dump_states_sources.php:180 +#: usr/local/www/diag_dump_states.php:203 usr/local/www/services_dhcp.php:649 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/services_dhcpv6.php:645 usr/local/www/services_dhcpv6.php:652 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/diag_dump_states_sources.php:179 +#: usr/local/www/diag_dump_states.php:202 usr/local/www/services_dhcp.php:770 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:583 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:736 usr/local/www/services_dhcp.php:780 +#: usr/local/www/services_dhcpv6.php:593 usr/local/www/services_dhcpv6.php:600 +#: usr/local/www/diag_dump_states.php:194 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:748 usr/local/www/services_dhcp.php:800 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/diag_dump_states.php:194 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/diag_dump_states_sources.php:179 +#: usr/local/www/services_dhcp.php:800 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_dhcpv6.php:593 usr/local/www/services_dhcpv6.php:600 +#: usr/local/www/diag_confbak.php:111 +msgid "to" +msgstr "ã¸" + +#: usr/local/www/diag_dump_states.php:194 +#: usr/local/www/diag_dump_states.php:212 +#: usr/local/www/diag_dump_states.php:211 +#: usr/local/www/diag_dump_states.php:205 +#: usr/local/www/diag_dump_states.php:205 +msgid "No states were found." +msgstr "何ã®çŠ¶æ…‹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/diag_logs_settings.php:79 +msgid "A valid IP address must be specified for remote syslog server #1." +msgstr "有効ãªIPアドレスã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆsyslogサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/diag_logs_settings.php:82 +msgid "A valid IP address must be specified for remote syslog server #2." +msgstr "有効ãªIPアドレスã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆsyslogサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/diag_logs_settings.php:85 +msgid "A valid IP address must be specified for remote syslog server #3." +msgstr "有効ãªIPアドレスã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆsyslogサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/diag_logs_settings.php:92 +#: usr/local/www/diag_logs_settings.php:96 +#: usr/local/www/diag_logs_settings.php:97 +#: usr/local/www/diag_logs_settings.php:97 +msgid "Number of log entries to show must be between 5 and 2000." +msgstr "表示ã™ã‚‹ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã®æ•°ã¯ã€ 5å¹´ã‹ã‚‰2000å¹´ã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/diag_logs_settings.php:232 +#: usr/local/www/diag_logs_settings.php:239 +#: usr/local/www/diag_logs_settings.php:246 +#: usr/local/www/diag_logs_settings.php:246 +msgid "Show log entries in reverse order (newest entries on top)" +msgstr "逆ã®é †åºã§è¡¨ç¤ºã™ã‚‹ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªï¼ˆä¸€ç•ªä¸Šã®æœ€æ–°ã®ã‚¨ãƒ³ãƒˆãƒªï¼‰" + +#: usr/local/www/diag_logs_settings.php:236 +msgid "Number of log entries to show:" +msgstr "ショーã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã®æ•°ï¼š" + +#: usr/local/www/diag_logs_settings.php:242 +#: usr/local/www/diag_logs_settings.php:250 +#: usr/local/www/diag_logs_settings.php:257 +#: usr/local/www/diag_logs_settings.php:257 +msgid "Log packets blocked by the default rule" +msgstr "デフォルトã®ãƒ«ãƒ¼ãƒ«ã§ãƒ–ロックã•れãŸãƒ‘ケットをログã«è¨˜éŒ²ã™ã‚‹" + +#: usr/local/www/diag_logs_settings.php:243 +msgid "" +"Hint: packets that are blocked by the implicit default block rule will not " +"be logged anymore if you uncheck this option. Per-rule logging options are " +"not affected." +msgstr ""ヒント:暗黙ã®ãƒ‡ãƒ•ォルトã®ãƒ–ロックルールã«ã‚ˆã£ã¦ãƒ–ロックã•れãŸãƒ‘ケットãŒãªã„ã€ã“ã®ã‚ªãƒ—ションをオフã«ã—ãŸå ´åˆã¯ã‚‚ã†ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã€‚ルールã”ã¨ã®ãƒ­ã‚°ã‚ªãƒ—ションã€ã®å½±éŸ¿ã‚’å—ã‘ã¾ã›ã‚“。" + +#: usr/local/www/diag_logs_settings.php:250 +#: usr/local/www/diag_logs_settings.php:258 +#: usr/local/www/diag_logs_settings.php:265 +#: usr/local/www/diag_logs_settings.php:265 +msgid "Show raw filter logs" +msgstr "生ã®ãƒ•ィルタログを表示ã™ã‚‹" + +#: usr/local/www/diag_logs_settings.php:251 +msgid "" +"Hint: If this is checked, filter logs are shown as generated by the packet " +"filter, without any formatting. This will reveal more detailed information." +msgstr ""ヒント:ã“れをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ãƒ‘ケットã«ã‚ˆã£ã¦ç”Ÿæˆã•れるよã†ã«ã€ãƒ•ィルタログãŒè¡¨ç¤ºã•れã¾ã™"をフォーマットã›ãšã«ã€ãƒ•ィルタ。ã“れã¯ã€ã‚ˆã‚Šè©³ç´°ãªæƒ…報を明らã‹ã«ã™ã‚‹ã€‚" + +#: usr/local/www/diag_logs_settings.php:256 +#: usr/local/www/diag_logs_settings.php:267 +#: usr/local/www/diag_logs_settings.php:287 +#: usr/local/www/diag_logs_settings.php:287 +msgid "Disable writing log files to the local RAM disk" +msgstr "ローカルRAMディスクã«ãƒ­ã‚°ãƒ•ァイルを書ãè¾¼ã¿ä¸å¯ã«" + +#: usr/local/www/diag_logs_settings.php:261 +msgid "Enable syslog'ing to remote syslog server" +msgstr "リモートsyslogサーãƒã«syslog'ing有効ã«ã—ã¾ã™" + +#: usr/local/www/diag_logs_settings.php:264 +msgid "Remote syslog servers" +msgstr "リモートsyslogサーãƒ" + +#: usr/local/www/diag_logs_settings.php:269 +#: usr/local/www/diag_logs_settings.php:277 +#: usr/local/www/diag_logs_settings.php:285 +#: usr/local/www/vpn_ipsec_mobile.php:496 +#: usr/local/www/vpn_ipsec_mobile.php:502 +#: usr/local/www/vpn_ipsec_mobile.php:508 +#: usr/local/www/vpn_ipsec_mobile.php:514 +#: usr/local/www/vpn_ipsec_mobile.php:538 +#: usr/local/www/vpn_ipsec_mobile.php:544 usr/local/www/diag_dns.php:208 +#: usr/local/www/services_rfc2136_edit.php:180 +#: usr/local/www/vpn_openvpn_client.php:365 +#: usr/local/www/vpn_openvpn_client.php:862 +#: usr/local/www/vpn_openvpn_csc.php:293 usr/local/www/vpn_openvpn_csc.php:477 +#: usr/local/www/vpn_openvpn_csc.php:485 usr/local/www/vpn_openvpn_csc.php:493 +#: usr/local/www/vpn_openvpn_csc.php:501 usr/local/www/vpn_openvpn_csc.php:529 +#: usr/local/www/vpn_openvpn_csc.php:537 usr/local/www/vpn_openvpn_csc.php:625 +#: usr/local/www/vpn_openvpn_csc.php:633 +#: usr/local/www/vpn_openvpn_server.php:40 +#: usr/local/www/vpn_openvpn_server.php:583 +#: usr/local/www/vpn_openvpn_server.php:1238 +#: usr/local/www/vpn_openvpn_server.php:1246 +#: usr/local/www/vpn_openvpn_server.php:1254 +#: usr/local/www/vpn_openvpn_server.php:1262 +#: usr/local/www/vpn_openvpn_server.php:1290 +#: usr/local/www/vpn_openvpn_server.php:1298 +#: usr/local/www/vpn_openvpn_server.php:1386 +#: usr/local/www/vpn_openvpn_server.php:1394 +#: usr/local/www/diag_logs_settings.php:286 +#: usr/local/www/diag_logs_settings.php:290 +#: usr/local/www/diag_logs_settings.php:294 usr/local/www/status_ntpd.php:108 +#: usr/local/www/diag_dns.php:207 usr/local/www/vpn_openvpn_server.php:656 +#: usr/local/www/vpn_openvpn_server.php:1380 +#: usr/local/www/vpn_openvpn_server.php:1388 +#: usr/local/www/vpn_openvpn_server.php:1396 +#: usr/local/www/vpn_openvpn_server.php:1404 +#: usr/local/www/vpn_openvpn_server.php:1432 +#: usr/local/www/vpn_openvpn_server.php:1440 +#: usr/local/www/vpn_openvpn_server.php:1528 +#: usr/local/www/vpn_openvpn_server.php:1536 +#: usr/local/www/vpn_openvpn_client.php:370 +#: usr/local/www/vpn_openvpn_client.php:867 +#: usr/local/www/diag_logs_settings.php:306 +#: usr/local/www/diag_logs_settings.php:310 +#: usr/local/www/diag_logs_settings.php:314 +#: usr/local/www/vpn_ipsec_mobile.php:545 +#: usr/local/www/vpn_ipsec_mobile.php:551 +#: usr/local/www/vpn_ipsec_mobile.php:557 +#: usr/local/www/vpn_ipsec_mobile.php:563 +#: usr/local/www/vpn_ipsec_mobile.php:587 +#: usr/local/www/vpn_ipsec_mobile.php:593 +#: usr/local/www/vpn_openvpn_csc.php:292 usr/local/www/vpn_openvpn_csc.php:476 +#: usr/local/www/vpn_openvpn_csc.php:484 usr/local/www/vpn_openvpn_csc.php:492 +#: usr/local/www/vpn_openvpn_csc.php:500 usr/local/www/vpn_openvpn_csc.php:528 +#: usr/local/www/vpn_openvpn_csc.php:536 usr/local/www/vpn_openvpn_csc.php:624 +#: usr/local/www/vpn_openvpn_csc.php:632 usr/local/www/status_ntpd.php:124 +#: usr/local/www/vpn_openvpn_server.php:423 +#: usr/local/www/vpn_openvpn_server.php:674 +#: usr/local/www/vpn_openvpn_server.php:1422 +#: usr/local/www/vpn_openvpn_server.php:1430 +#: usr/local/www/vpn_openvpn_server.php:1438 +#: usr/local/www/vpn_openvpn_server.php:1446 +#: usr/local/www/vpn_openvpn_server.php:1474 +#: usr/local/www/vpn_openvpn_server.php:1482 +#: usr/local/www/vpn_openvpn_server.php:1570 +#: usr/local/www/vpn_openvpn_server.php:1578 +#: usr/local/www/vpn_openvpn_client.php:378 +#: usr/local/www/vpn_openvpn_client.php:920 +#: usr/local/www/vpn_openvpn_client.php:396 +#: usr/local/www/vpn_openvpn_client.php:939 +#: usr/local/www/vpn_openvpn_server.php:445 +#: usr/local/www/vpn_openvpn_server.php:700 +#: usr/local/www/vpn_openvpn_server.php:1490 +#: usr/local/www/vpn_openvpn_server.php:1498 +#: usr/local/www/vpn_openvpn_server.php:1526 +#: usr/local/www/vpn_openvpn_server.php:1534 +#: usr/local/www/vpn_openvpn_server.php:1622 +#: usr/local/www/vpn_openvpn_server.php:1630 usr/local/www/status_ntpd.php:130 +#: usr/local/www/diag_dns.php:156 usr/local/www/diag_dns.php:224 +#: usr/local/www/diag_logs_settings.php:306 +#: usr/local/www/diag_logs_settings.php:310 +#: usr/local/www/diag_logs_settings.php:314 +#: usr/local/www/vpn_openvpn_client.php:396 +#: usr/local/www/vpn_openvpn_client.php:939 +#: usr/local/www/vpn_openvpn_csc.php:292 usr/local/www/vpn_openvpn_csc.php:476 +#: usr/local/www/vpn_openvpn_csc.php:484 usr/local/www/vpn_openvpn_csc.php:492 +#: usr/local/www/vpn_openvpn_csc.php:500 usr/local/www/vpn_openvpn_csc.php:528 +#: usr/local/www/vpn_openvpn_csc.php:536 usr/local/www/vpn_openvpn_csc.php:624 +#: usr/local/www/vpn_openvpn_csc.php:632 usr/local/www/status_ntpd.php:130 +#: usr/local/www/diag_dns.php:156 usr/local/www/diag_dns.php:224 +#: usr/local/www/services_rfc2136_edit.php:180 +#: usr/local/www/vpn_ipsec_mobile.php:545 +#: usr/local/www/vpn_ipsec_mobile.php:551 +#: usr/local/www/vpn_ipsec_mobile.php:557 +#: usr/local/www/vpn_ipsec_mobile.php:563 +#: usr/local/www/vpn_ipsec_mobile.php:587 +#: usr/local/www/vpn_ipsec_mobile.php:593 +#: usr/local/www/vpn_openvpn_server.php:445 +#: usr/local/www/vpn_openvpn_server.php:700 +#: usr/local/www/vpn_openvpn_server.php:1474 +#: usr/local/www/vpn_openvpn_server.php:1482 +#: usr/local/www/vpn_openvpn_server.php:1490 +#: usr/local/www/vpn_openvpn_server.php:1498 +#: usr/local/www/vpn_openvpn_server.php:1526 +#: usr/local/www/vpn_openvpn_server.php:1534 +#: usr/local/www/vpn_openvpn_server.php:1622 +#: usr/local/www/vpn_openvpn_server.php:1630 +msgid "Server" +msgstr "サーãƒãƒ¼" + +#: usr/local/www/diag_logs_settings.php:296 +msgid "IP addresses of remote syslog servers" +msgstr "リモートsyslogサーãƒã®IPアドレス" + +#: usr/local/www/diag_logs_settings.php:300 +#: usr/local/www/diag_logs_settings.php:309 +#: usr/local/www/diag_logs_settings.php:329 +#: usr/local/www/diag_logs_settings.php:329 +msgid "System events" +msgstr "システム·イベント" + +#: usr/local/www/diag_logs_settings.php:302 +#: usr/local/www/diag_logs_settings.php:311 +#: usr/local/www/diag_logs_settings.php:331 +#: usr/local/www/diag_logs_settings.php:331 +msgid "Firewall events" +msgstr "ファイアウォールイベント" + +#: usr/local/www/diag_logs_settings.php:304 +#: usr/local/www/diag_logs_settings.php:313 +#: usr/local/www/diag_logs_settings.php:333 +#: usr/local/www/diag_logs_settings.php:333 +msgid "DHCP service events" +msgstr "DHCPサービスã®ã‚¤ãƒ™ãƒ³ãƒˆ" + +#: usr/local/www/diag_logs_settings.php:306 +#: usr/local/www/diag_logs_settings.php:315 +#: usr/local/www/diag_logs_settings.php:335 +#: usr/local/www/diag_logs_settings.php:335 +msgid "Portal Auth events" +msgstr "ãƒãƒ¼ã‚¿ãƒ«èªè¨¼ã‚¤ãƒ™ãƒ³ãƒˆ" + +#: usr/local/www/diag_logs_settings.php:308 +#: usr/local/www/diag_logs_settings.php:317 +#: usr/local/www/diag_logs_settings.php:337 +#: usr/local/www/diag_logs_settings.php:337 +msgid "VPN (PPTP, IPsec, OpenVPN) events" +msgstr "VPN ( PPTP 〠IPsecã®ã€ OpenVPNã®ï¼‰ã‚¤ãƒ™ãƒ³ãƒˆ" + +#: usr/local/www/diag_logs_settings.php:310 +#: usr/local/www/diag_logs_settings.php:319 +#: usr/local/www/diag_logs_settings.php:339 +#: usr/local/www/diag_logs_settings.php:339 +msgid "Gateway Monitor events" +msgstr "ゲートウェイモニタイベント" + +#: usr/local/www/diag_logs_settings.php:312 +#: usr/local/www/diag_logs_settings.php:321 +#: usr/local/www/diag_logs_settings.php:341 +#: usr/local/www/diag_logs_settings.php:341 +msgid "Server Load Balancer events" +msgstr "サーãƒãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã‚¤ãƒ™ãƒ³ãƒˆ" + +#: usr/local/www/diag_logs_settings.php:314 +#: usr/local/www/diag_logs_settings.php:323 +#: usr/local/www/diag_logs_settings.php:343 +#: usr/local/www/diag_logs_settings.php:343 +msgid "Wireless events" +msgstr "ワイヤレスイベント" + +#: usr/local/www/diag_logs_settings.php:316 +#: usr/local/www/diag_logs_settings.php:307 +#: usr/local/www/diag_logs_settings.php:327 +#: usr/local/www/diag_logs_settings.php:327 +msgid "Everything" +msgstr "ã™ã¹ã¦ã®ã‚‚ã®" + +#: usr/local/www/diag_logs_settings.php:327 +msgid "" +"syslog sends UDP datagrams to port 514 on the specified remote syslog " +"server. Be sure to set syslogd on the remote server to accept syslog " +"messages from" +msgstr "サーãƒãƒ¼ã€Œ syslogãŒæŒ‡å®šã•れãŸãƒªãƒ¢ãƒ¼ãƒˆã®syslogã®ãƒãƒ¼ãƒˆ514ã«UDPデータグラムをé€ä¿¡ã—ã¾ã™ã€ 。ã‹ã‚‰ã®syslog ã€ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ã‘入れるよã†ã«ãƒªãƒ¢ãƒ¼ãƒˆÂ·ã‚µãƒ¼ãƒãƒ¼ä¸Šã®syslogd設定ã—ã¦ãã ã•ã„" + +#: usr/local/www/diag_logs_vpn.php:144 usr/local/www/diag_logs_vpn.php:143 +#: usr/local/www/diag_logs_vpn.php:143 +msgid "PPTP Logins" +msgstr "PPTPログイン" + +#: usr/local/www/diag_logs_vpn.php:147 usr/local/www/diag_logs_vpn.php:146 +#: usr/local/www/diag_logs_vpn.php:146 +msgid "PPTP Raw" +msgstr "PPTP生" + +#: usr/local/www/diag_logs_vpn.php:150 usr/local/www/diag_logs_vpn.php:149 +#: usr/local/www/diag_logs_vpn.php:149 +msgid "PPPoE Logins" +msgstr "PPPoEã®ãƒ­ã‚°ã‚¤ãƒ³" + +#: usr/local/www/diag_logs_vpn.php:153 usr/local/www/diag_logs_vpn.php:152 +#: usr/local/www/diag_logs_vpn.php:152 +msgid "PPPoE Raw" +msgstr "PPPoEã®ç”Ÿ" + +#: usr/local/www/diag_logs_vpn.php:156 usr/local/www/diag_logs_vpn.php:155 +#: usr/local/www/diag_logs_vpn.php:155 +msgid "L2TP Logins" +msgstr "L2TPログイン" + +#: usr/local/www/diag_logs_vpn.php:159 usr/local/www/diag_logs_vpn.php:158 +#: usr/local/www/diag_logs_vpn.php:158 +msgid "L2TP Raw" +msgstr "L2TP生" + +#: usr/local/www/diag_logs_vpn.php:171 usr/local/www/diag_logs_vpn.php:170 +#: usr/local/www/diag_logs_vpn.php:170 +#, php-format +msgid "Last %1$s %2$s VPN log entries" +msgstr "最後ã¯%1$s %2$s VPNã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª" + +#: usr/local/www/diag_logs_vpn.php:176 +#: usr/local/www/firewall_rules_edit.php:659 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:484 +#: usr/local/www/services_unbound_acls.php:211 +#: usr/local/www/services_unbound_acls.php:318 +#: usr/local/www/load_balancer_relay_action_edit.php:483 +#: usr/local/www/firewall_rules_edit.php:692 +#: usr/local/www/diag_logs_vpn.php:175 +#: usr/local/www/load_balancer_relay_action_edit.php:481 +#: usr/local/www/firewall_rules_edit.php:695 +#: usr/local/www/firewall_rules_edit.php:707 +#: usr/local/www/diag_logs_filter.php:151 +#: usr/local/www/firewall_rules_edit.php:707 +#: usr/local/www/diag_logs_filter.php:151 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:481 +#: usr/local/www/diag_logs_vpn.php:175 +msgid "Action" +msgstr "アクション" + +#: usr/local/www/diag_logs_vpn.php:177 +#: usr/local/www/diag_authentication.php:59 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/system_groupmanager.php:426 +#: usr/local/www/system_usermanager.php:89 +#: usr/local/www/system_usermanager.php:808 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/system_usermanager.php:806 +#: usr/local/www/diag_logs_vpn.php:176 +#: usr/local/www/system_groupmanager.php:429 +#: usr/local/www/system_usermanager.php:809 +#: usr/local/www/system_groupmanager.php:448 +#: usr/local/www/system_usermanager.php:832 +#: usr/local/www/diag_authentication.php:59 +#: usr/local/www/system_groupmanager.php:448 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/diag_logs_vpn.php:176 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/system_usermanager.php:89 +#: usr/local/www/system_usermanager.php:832 +msgid "User" +msgstr "ユーザー" + +#: usr/local/www/diag_nanobsd.php:49 usr/local/www/fbegin.inc:212 +#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:239 +#: usr/local/www/fbegin.inc:231 usr/local/www/fbegin.inc:231 +#: usr/local/www/diag_nanobsd.php:49 +msgid "NanoBSD" +msgstr "NanoBSDã®" + +#: usr/local/www/diag_nanobsd.php:70 usr/local/www/diag_nanobsd.php:69 +#: usr/local/www/diag_nanobsd.php:69 +msgid "Setting slice information, please wait..." +msgstr "スライス情報を設定ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." + +#: usr/local/www/diag_nanobsd.php:79 usr/local/www/diag_nanobsd.php:78 +#: usr/local/www/diag_nanobsd.php:78 +msgid "The boot slice has been set to" +msgstr "ブート·スライスã«è¨­å®šã•れã¦ã„ã‚‹" + +#: usr/local/www/diag_nanobsd.php:86 usr/local/www/diag_nanobsd.php:85 +#: usr/local/www/diag_nanobsd.php:85 +msgid "Duplicating slice. Please wait, this will take a moment..." +msgstr "スライスを複製。ã“れã¯å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚‹ã§ã—ょã†ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." + +#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94 +#: usr/local/www/diag_nanobsd.php:94 +msgid "The slice has been duplicated." +msgstr "スライスãŒè¤‡è£½ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94 +#: usr/local/www/diag_nanobsd.php:94 +msgid "" +"If you would like to boot from this newly duplicated slice please set it " +"using the bootup information area." +msgstr "ブートアップ情報領域を使用ã—ã¦ã€Œã‚ãªãŸã¯ã€ã“ã®æ–°ãŸã«è¤‡è£½ã•れãŸã‚¹ãƒ©ã‚¤ã‚¹ã‹ã‚‰èµ·å‹•ã—ãŸã„å ´åˆã«è¨­å®šã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/diag_nanobsd.php:97 usr/local/www/diag_nanobsd.php:96 +#: usr/local/www/diag_nanobsd.php:96 +msgid "There was an error while duplicating the slice. Operation aborted." +msgstr "スライスを複製中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚æ“作ã¯ä¸­æ–­ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/diag_nanobsd.php:128 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2559 +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/load_balancer_virtual_server_edit.php:212 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/load_balancer_virtual_server_edit.php:244 +#: usr/local/www/system_advanced_firewall.php:231 +#: usr/local/www/system_advanced_misc.php:221 +#: usr/local/www/system_advanced_network.php:197 +#: usr/local/www/system_advanced_sysctl.php:163 +#: usr/local/www/system_routes_edit.php:374 +#: usr/local/www/system_advanced_firewall.php:245 +#: usr/local/www/system_advanced_admin.php:289 +#: usr/local/www/system_advanced_misc.php:247 +#: usr/local/www/load_balancer_virtual_server_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:220 +#: usr/local/www/load_balancer_virtual_server_edit.php:233 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/diag_nanobsd.php:127 usr/local/www/system_routes_edit.php:375 +#: usr/local/www/system_advanced_misc.php:266 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +#: usr/local/www/system_firmware_settings.php:156 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/diag_nanobsd.php:148 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_advanced_firewall.php:274 +#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783 +#: usr/local/www/system_firmware_settings.php:167 +#: usr/local/www/system_advanced_misc.php:317 +#: usr/local/www/system_routes_edit.php:399 +#: usr/local/www/system_advanced_firewall.php:273 +#: usr/local/www/diag_nanobsd.php:139 usr/local/www/interfaces.php:2820 +#: usr/local/www/interfaces.php:2829 usr/local/www/system_routes_edit.php:409 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/system_firmware_settings.php:167 +#: usr/local/www/system_advanced_admin.php:289 +#: usr/local/www/system_advanced_misc.php:317 +#: usr/local/www/system_routes_edit.php:403 +#: usr/local/www/system_advanced_firewall.php:273 +#: usr/local/www/system_advanced_network.php:197 +#: usr/local/www/diag_nanobsd.php:139 +#: usr/local/www/system_advanced_sysctl.php:163 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +msgid "NOTE:" +msgstr "注:" + +#: usr/local/www/diag_nanobsd.php:130 +#: usr/local/www/system_advanced_admin.php:291 +#: usr/local/www/system_advanced_firewall.php:233 +#: usr/local/www/system_advanced_misc.php:223 +#: usr/local/www/system_advanced_network.php:199 +#: usr/local/www/system_advanced_sysctl.php:165 +#: usr/local/www/system_advanced_firewall.php:247 +#: usr/local/www/system_advanced_misc.php:249 +#: usr/local/www/diag_nanobsd.php:129 +#: usr/local/www/system_advanced_misc.php:268 +#: usr/local/www/diag_nanobsd.php:150 +#: usr/local/www/system_advanced_misc.php:272 +#: usr/local/www/system_advanced_firewall.php:276 +#: usr/local/www/system_advanced_misc.php:319 +#: usr/local/www/system_advanced_firewall.php:275 +#: usr/local/www/diag_nanobsd.php:141 +#: usr/local/www/system_advanced_admin.php:291 +#: usr/local/www/system_advanced_misc.php:319 +#: usr/local/www/system_advanced_firewall.php:275 +#: usr/local/www/system_advanced_network.php:199 +#: usr/local/www/diag_nanobsd.php:141 +#: usr/local/www/system_advanced_sysctl.php:165 +msgid "The options on this page are intended for use by advanced users only." +msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®ã‚ªãƒ—ションã¯ã€ä¸Šç´šãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿ãŒä½¿ç”¨ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" + +#: usr/local/www/diag_nanobsd.php:136 usr/local/www/diag_nanobsd.php:135 +#: usr/local/www/diag_nanobsd.php:156 usr/local/www/diag_nanobsd.php:147 +#: usr/local/www/diag_nanobsd.php:147 +msgid "Bootup information" +msgstr "情報をブートアップ" + +#: usr/local/www/diag_nanobsd.php:139 usr/local/www/diag_nanobsd.php:138 +#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:150 +#: usr/local/www/diag_nanobsd.php:150 +msgid "NanoBSD Image size" +msgstr "NanoBSDã®ç”»åƒã‚µã‚¤ã‚º" + +#: usr/local/www/diag_nanobsd.php:145 usr/local/www/diag_nanobsd.php:144 +#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:156 +#: usr/local/www/diag_nanobsd.php:156 +msgid "Bootup" +msgstr "ブートアップ" + +#: usr/local/www/diag_nanobsd.php:148 usr/local/www/diag_nanobsd.php:147 +#: usr/local/www/diag_nanobsd.php:168 usr/local/www/diag_nanobsd.php:159 +#: usr/local/www/diag_nanobsd.php:159 +msgid "Bootup slice is currently:" +msgstr "ブートアップスライスã¯ã€ç¾åœ¨ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™" + +#: usr/local/www/diag_nanobsd.php:149 usr/local/www/diag_nanobsd.php:148 +#: usr/local/www/diag_nanobsd.php:169 usr/local/www/diag_nanobsd.php:160 +#: usr/local/www/diag_nanobsd.php:160 +msgid "This will switch the bootup slice to the alternate slice." +msgstr "ã“れã¯åˆ¥ã®ã‚¹ãƒ©ã‚¤ã‚¹ã«ãƒ–ートアップスライスを切り替ãˆã¾ã™ã€‚" + +#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:158 +#: usr/local/www/diag_nanobsd.php:217 usr/local/www/diag_nanobsd.php:208 +#: usr/local/www/diag_nanobsd.php:208 +msgid "Duplicate bootup slice to alternate" +msgstr "交互ã«ãƒ–ートアップスライスを複製" + +#: usr/local/www/diag_nanobsd.php:162 usr/local/www/diag_nanobsd.php:161 +#: usr/local/www/diag_nanobsd.php:220 usr/local/www/diag_nanobsd.php:211 +#: usr/local/www/diag_nanobsd.php:211 +msgid "Duplicate bootup slice" +msgstr "ブートアップスライスを複製" + +#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:164 +#: usr/local/www/diag_nanobsd.php:223 usr/local/www/diag_nanobsd.php:214 +#: usr/local/www/diag_nanobsd.php:214 +msgid "Destination slice:" +msgstr "å…ˆã®ã‚¹ãƒ©ã‚¤ã‚¹ï¼š" + +#: usr/local/www/diag_nanobsd.php:172 usr/local/www/diag_nanobsd.php:171 +#: usr/local/www/diag_nanobsd.php:230 usr/local/www/diag_nanobsd.php:221 +#: usr/local/www/diag_nanobsd.php:221 +msgid "" +"This will duplicate the bootup slice to the alternate slice. Use this if " +"you would like to duplicate the known good working boot partition to the " +"alternate." +msgstr ""ã“れã¯åˆ¥ã®ã‚¹ãƒ©ã‚¤ã‚¹ã«ã€èµ·å‹•スライスを複製ã—ã¾ã™ã€‚å ´åˆã¯ã€ã“れを使用ã—ã¦"ã‚ãªãŸã¯"代替ã«çŸ¥ã‚‰ã‚Œã¦ã„る良好ãªãƒ–ートパーティションを複製ã—ãŸã„ã¨æ€ã„ã¾ã™ã€‚" + +#: usr/local/www/diag_nanobsd.php:182 usr/local/www/diag_nanobsd.php:181 +#: usr/local/www/diag_nanobsd.php:240 usr/local/www/diag_nanobsd.php:231 +#: usr/local/www/diag_nanobsd.php:231 +msgid "Periodic Data Backup" +msgstr "定期的ãªãƒ‡ãƒ¼ã‚¿ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—" + +#: usr/local/www/diag_nanobsd.php:185 usr/local/www/diag_nanobsd.php:184 +#: usr/local/www/diag_nanobsd.php:243 +msgid "RRD Backup" +msgstr "RRDã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—" + +#: usr/local/www/diag_nanobsd.php:188 usr/local/www/diag_nanobsd.php:205 +#: usr/local/www/diag_nanobsd.php:187 usr/local/www/diag_nanobsd.php:204 +#: usr/local/www/diag_nanobsd.php:246 usr/local/www/diag_nanobsd.php:263 +#: usr/local/www/system_advanced_misc.php:602 +#: usr/local/www/system_advanced_misc.php:618 +#: usr/local/www/system_advanced_misc.php:602 +#: usr/local/www/system_advanced_misc.php:618 +msgid "Frequency:" +msgstr "周波数:" + +#: usr/local/www/diag_nanobsd.php:190 usr/local/www/diag_nanobsd.php:207 +#: usr/local/www/system_firmware.php:133 +#: usr/local/www/services_dyndns_edit.php:152 +#: usr/local/www/vpn_ipsec_phase1.php:812 +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/system_advanced_firewall.php:410 +#: usr/local/www/firewall_nat_edit.php:796 +#: usr/local/www/vpn_ipsec_phase1.php:825 usr/local/www/diag_nanobsd.php:189 +#: usr/local/www/diag_nanobsd.php:206 usr/local/www/system_firmware.php:140 +#: usr/local/www/firewall_nat_edit.php:795 +#: usr/local/www/vpn_ipsec_phase1.php:822 usr/local/www/diag_nanobsd.php:248 +#: usr/local/www/diag_nanobsd.php:265 usr/local/www/system_firmware.php:135 +#: usr/local/www/services_dyndns_edit.php:214 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/system_advanced_firewall.php:472 +#: usr/local/www/vpn_ipsec_phase1.php:843 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/system_advanced_misc.php:604 +#: usr/local/www/system_advanced_misc.php:620 +#: usr/local/www/system_advanced_firewall.php:473 +#: usr/local/www/firewall_nat_edit.php:803 +#: usr/local/www/system_firmware.php:135 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:803 +#: usr/local/www/system_advanced_misc.php:604 +#: usr/local/www/system_advanced_misc.php:620 +#: usr/local/www/system_advanced_firewall.php:473 +#: usr/local/www/vpn_ipsec_phase1.php:843 +msgid "Disable" +msgstr "無効ã«ã™ã‚‹" + +#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:209 +#: usr/local/www/diag_nanobsd.php:191 usr/local/www/diag_nanobsd.php:208 +#: usr/local/www/diag_nanobsd.php:250 usr/local/www/diag_nanobsd.php:267 +#: usr/local/www/system_advanced_misc.php:606 +#: usr/local/www/system_advanced_misc.php:622 +#: usr/local/www/system_advanced_misc.php:606 +#: usr/local/www/system_advanced_misc.php:622 +msgid "hour" +msgstr "時間" + +#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:195 +#: usr/local/www/diag_nanobsd.php:254 +#: usr/local/www/system_advanced_misc.php:610 +#: usr/local/www/system_advanced_misc.php:610 +msgid "" +"This will periodically backup the RRD data so it can be restored " +"automatically on the next boot. Keep in mind that the more frequent the " +"backup, the more writes will happen to your media." +msgstr "次回ã®èµ·å‹•時ã«è‡ªå‹•的㫠"ã“れã¯RRDデータを定期的ã«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—復元ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã®ã§ã€ 。より頻ç¹ã«ã¯ã€ã€Œãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã€ã‚ˆã‚Šå¤šãã®æ›¸ãè¾¼ã¿ãŒã€ãƒ¡ãƒ‡ã‚£ã‚¢ã¯ã©ã†ãªã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" + +#: usr/local/www/diag_nanobsd.php:202 usr/local/www/diag_nanobsd.php:201 +#: usr/local/www/diag_nanobsd.php:260 +msgid "DHCP Leases Backup" +msgstr "DHCPã¯ã€ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®ãƒªãƒ¼ã‚¹" + +#: usr/local/www/diag_nanobsd.php:213 usr/local/www/diag_nanobsd.php:212 +#: usr/local/www/diag_nanobsd.php:271 +#: usr/local/www/system_advanced_misc.php:626 +#: usr/local/www/system_advanced_misc.php:626 +msgid "" +"This will periodically backup the DHCP leases data so it can be restored " +"automatically on the next boot. Keep in mind that the more frequent the " +"backup, the more writes will happen to your media." +msgstr "次回ã®èµ·å‹•時ã«è‡ªå‹•çš„ã«ã€ŒãれãŒå¾©å…ƒã§ãるよã†ã«ã“れã¯ã€DHCPã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚’定期的ã«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—リースã¾ã™ã€ 。より頻ç¹ã«ã¯ã€ã€Œãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã€ã‚ˆã‚Šå¤šãã®æ›¸ãè¾¼ã¿ãŒã€ãƒ¡ãƒ‡ã‚£ã‚¢ã¯ã©ã†ãªã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" + +#: usr/local/www/diag_nanobsd.php:226 usr/local/www/diag_nanobsd.php:225 +#: usr/local/www/diag_nanobsd.php:284 usr/local/www/diag_nanobsd.php:244 +#: usr/local/www/diag_nanobsd.php:244 +msgid "View upgrade log" +msgstr "ビューアップグレードログ" + +#: usr/local/www/diag_nanobsd.php:229 usr/local/www/diag_nanobsd.php:228 +#: usr/local/www/diag_nanobsd.php:287 usr/local/www/diag_nanobsd.php:247 +#: usr/local/www/diag_nanobsd.php:247 +msgid "View previous upgrade log" +msgstr "å‰å›žã®ã‚¢ãƒƒãƒ—グレードログを表示ã™ã‚‹" + +#: usr/local/www/diag_packet_capture.php:38 +#: usr/local/www/diag_packet_capture.php:225 +#: usr/local/www/diag_packet_capture.php:246 +#: usr/local/www/diag_packet_capture.php:40 +#: usr/local/www/diag_packet_capture.php:293 +#: usr/local/www/diag_packet_capture.php:311 +#: usr/local/www/diag_packet_capture.php:40 +#: usr/local/www/diag_packet_capture.php:311 +msgid "Download Capture" +msgstr "キャプãƒãƒ£ã‚’ダウンロード" + +#: usr/local/www/diag_packet_capture.php:41 usr/local/www/fbegin.inc:210 +#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:237 +#: usr/local/www/diag_packet_capture.php:43 usr/local/www/fbegin.inc:229 +#: usr/local/www/diag_packet_capture.php:43 usr/local/www/fbegin.inc:229 +msgid "Packet Capture" +msgstr "パケットキャプãƒãƒ£" + +#: usr/local/www/diag_packet_capture.php:71 +#: usr/local/www/diag_packet_capture.php:220 +#: usr/local/www/diag_packet_capture.php:265 +#: usr/local/www/status_dhcp_leases.php:321 +#: usr/local/www/status_dhcpv6_leases.php:363 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/status_dhcpv6_leases.php:484 +#: usr/local/www/status_dhcp_leases.php:342 +#: usr/local/www/diag_packet_capture.php:75 +#: usr/local/www/diag_packet_capture.php:240 +#: usr/local/www/diag_packet_capture.php:294 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:485 +#: usr/local/www/status_dhcp_leases.php:344 +#: usr/local/www/diag_packet_capture.php:129 +#: usr/local/www/diag_packet_capture.php:287 +#: usr/local/www/diag_packet_capture.php:341 +#: usr/local/www/status_dhcpv6_leases.php:411 +#: usr/local/www/status_dhcpv6_leases.php:488 +#: usr/local/www/diag_packet_capture.php:137 +#: usr/local/www/diag_packet_capture.php:305 +#: usr/local/www/diag_packet_capture.php:359 +#: usr/local/www/status_dhcpv6_leases.php:411 +#: usr/local/www/status_dhcpv6_leases.php:488 +#: usr/local/www/diag_packet_capture.php:137 +#: usr/local/www/diag_packet_capture.php:305 +#: usr/local/www/diag_packet_capture.php:359 +#: usr/local/www/status_dhcp_leases.php:344 +msgid "Start" +msgstr "スタート" + +#: usr/local/www/diag_packet_capture.php:78 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:222 +#: usr/local/www/diag_packet_capture.php:82 +#: usr/local/www/diag_packet_capture.php:239 +#: usr/local/www/diag_packet_capture.php:242 +#: usr/local/www/diag_packet_capture.php:136 +#: usr/local/www/diag_packet_capture.php:286 +#: usr/local/www/diag_packet_capture.php:289 +#: usr/local/www/diag_packet_capture.php:144 +#: usr/local/www/diag_packet_capture.php:304 +#: usr/local/www/diag_packet_capture.php:307 +#: usr/local/www/diag_packet_capture.php:144 +#: usr/local/www/diag_packet_capture.php:304 +#: usr/local/www/diag_packet_capture.php:307 +msgid "Stop" +msgstr "åœæ­¢" + +#: usr/local/www/diag_packet_capture.php:116 +#: usr/local/www/diag_packet_capture.php:120 +#: usr/local/www/diag_packet_capture.php:178 +#: usr/local/www/diag_packet_capture.php:186 +#: usr/local/www/diag_packet_capture.php:186 +msgid "Packet capture" +msgstr "パケットキャプãƒãƒ£" + +#: usr/local/www/diag_packet_capture.php:141 +#: usr/local/www/diag_packet_capture.php:145 +#: usr/local/www/diag_packet_capture.php:192 +#: usr/local/www/diag_packet_capture.php:200 +#: usr/local/www/diag_packet_capture.php:200 +msgid "Select the interface on which to capture traffic." +msgstr "トラフィックをキャプãƒãƒ£ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:145 +#: usr/local/www/system_gateways_edit.php:376 +#: usr/local/www/diag_packet_capture.php:149 +#: usr/local/www/system_gateways_edit.php:482 +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/system_gateways_edit.php:484 +#: usr/local/www/diag_packet_capture.php:212 +#: usr/local/www/system_gateways_edit.php:514 +#: usr/local/www/system_gateways_edit.php:514 +#: usr/local/www/diag_packet_capture.php:212 +msgid "Address Family" +msgstr "アドレスファミリ" + +#: usr/local/www/diag_packet_capture.php:152 +#: usr/local/www/diag_packet_capture.php:156 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:219 +msgid "" +"Select the type of traffic to be captured, either Any, IPv4 only or IPv6 " +"only." +msgstr "「æ•ç²ã•れるトラフィックã®ç¨®é¡žã‚’é¸æŠžã—ã€ã„ãšã‚Œã‹ä»»æ„ã®ã¯IPv4ã®ã¿ã¾ãŸã¯IPv6 ã€ã®ã¿ã€‚" + +#: usr/local/www/diag_packet_capture.php:156 +#: usr/local/www/diag_packet_capture.php:176 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/diag_packet_capture.php:239 +#: usr/local/www/diag_packet_capture.php:239 +msgid "Host Address" +msgstr "ホストアドレス" + +#: usr/local/www/diag_packet_capture.php:159 +#: usr/local/www/diag_packet_capture.php:179 +#: usr/local/www/diag_packet_capture.php:226 +#: usr/local/www/diag_packet_capture.php:242 +#: usr/local/www/diag_packet_capture.php:242 +msgid "" +"This value is either the Source or Destination IP address or subnet in CIDR " +"notation. The packet capture will look for this address in either field." +msgstr "表記"ã“ã®å€¤ã¯ã€CIDRã§ã®ã‚½ãƒ¼ã‚¹ã¾ãŸã¯å®›å…ˆIPアドレスやサブãƒãƒƒãƒˆã®ã©ã¡ã‚‰ã‹ã§ã‚る〠。パケットキャプãƒãƒ£ã¯ã€ãƒ•ィールドã®ã„ãšã‚Œã‹ã§ã€ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’検索ã—ã¾ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:160 +#: usr/local/www/diag_packet_capture.php:180 +#: usr/local/www/diag_packet_capture.php:227 +#: usr/local/www/diag_packet_capture.php:243 +#: usr/local/www/diag_packet_capture.php:243 +msgid "" +"This value can be a domain name or IP address, or subnet in CIDR notation." +msgstr "「ã“ã®å€¤ã¯ã€ CIDR表記ã®ãƒ‰ãƒ¡ã‚¤ãƒ³åã¾ãŸã¯IPアドレスã€ã¾ãŸã¯ã‚µãƒ–ãƒãƒƒãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:161 +#: usr/local/www/diag_packet_capture.php:181 +#: usr/local/www/diag_packet_capture.php:228 +#: usr/local/www/diag_packet_capture.php:244 +#: usr/local/www/diag_packet_capture.php:244 +msgid "" +"If you leave this field blank, all packets on the specified interface will " +"be captured." +msgstr ""ã‚ãªãŸã¯ã€ã“ã®ãƒ•ィールドを空白ã®ã¾ã¾ã«ã—ã¦ãŠãã¨ã€æŒ‡å®šã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã®ã™ã¹ã¦ã®ãƒ‘ケットãŒã—ã¾ã™ã€æ•ç²ã™ã‚‹ã“ã¨ã€‚" + +#: usr/local/www/diag_packet_capture.php:168 +#: usr/local/www/diag_packet_capture.php:188 +#: usr/local/www/diag_packet_capture.php:235 +#: usr/local/www/diag_packet_capture.php:251 +#: usr/local/www/diag_packet_capture.php:251 +msgid "" +"The port can be either the source or destination port. The packet capture " +"will look for this port in either field." +msgstr "「ãƒãƒ¼ãƒˆã¯ã€é€ä¿¡å…ƒã¾ãŸã¯å®›å…ˆãƒãƒ¼ãƒˆã®ã„ãšã‚Œã‹ã«ãªã‚Šã¾ã™ã€‚パケットキャプãƒãƒ£ã€ã¯ã„ãšã‚Œã‹ã®ãƒ•ィールドã«ã€ã“ã®ãƒãƒ¼ãƒˆã‚’検索ã—ã¾ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:169 +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/diag_packet_capture.php:236 +#: usr/local/www/diag_packet_capture.php:252 +#: usr/local/www/diag_packet_capture.php:252 +msgid "Leave blank if you do not want to filter by port." +msgstr "ã‚ãªãŸã¯ã€ãƒãƒ¼ãƒˆã§ãƒ•ィルタã—ãŸããªã„å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:173 +#: usr/local/www/diag_packet_capture.php:193 +#: usr/local/www/diag_packet_capture.php:240 +#: usr/local/www/diag_packet_capture.php:256 +#: usr/local/www/diag_packet_capture.php:256 +msgid "Packet Length" +msgstr "パケット長" + +#: usr/local/www/diag_packet_capture.php:176 +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/diag_packet_capture.php:243 +#: usr/local/www/diag_packet_capture.php:259 +#: usr/local/www/diag_packet_capture.php:259 +msgid "" +"The Packet length is the number of bytes of each packet that will be " +"captured. Default value is 0, which will capture the entire frame regardless " +"of its size." +msgstr "æ•æ‰ã€Œãƒ‘ケット長ãŒã•れるå„パケットã®ãƒã‚¤ãƒˆæ•°ã§ã‚る〠。デフォルト値ã¯ã€ãã®ã‚µã‚¤ã‚ºã®ãŸã‚"ã«é–¢ä¿‚ãªãã€ãƒ•レーム全体をキャプãƒãƒ£ã—ã¦ã„る〠0ã§ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:180 usr/local/www/diag_ping.php:55 +#: usr/local/www/diag_ping.php:108 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/services_captiveportal_vouchers_edit.php:189 +#: usr/local/www/diag_packet_capture.php:200 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_captiveportal_vouchers_edit.php:187 +#: usr/local/www/diag_packet_capture.php:247 +#: usr/local/www/diag_packet_capture.php:263 usr/local/www/diag_ping.php:57 +#: usr/local/www/diag_ping.php:129 usr/local/www/diag_packet_capture.php:263 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_captiveportal_vouchers_edit.php:187 +#: usr/local/www/diag_ping.php:57 usr/local/www/diag_ping.php:129 +msgid "Count" +msgstr "カウント" + +#: usr/local/www/diag_packet_capture.php:183 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:250 +#: usr/local/www/diag_packet_capture.php:266 +#: usr/local/www/diag_packet_capture.php:266 +msgid "" +"This is the number of packets the packet capture will grab. Default value is " +"100." +msgstr "「ã“れã¯ã€ãƒ‘ケットキャプãƒãƒ£ãŒã¤ã‹ã‚€ã¾ã™ãƒ‘ã‚±ãƒƒãƒˆã®æ•°ã§ã™ã€‚デフォルト値ã¯"100 。" + +#: usr/local/www/diag_packet_capture.php:183 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:250 +#: usr/local/www/diag_packet_capture.php:266 +#: usr/local/www/diag_packet_capture.php:266 +msgid "Enter 0 (zero) for no count limit." +msgstr "無カウント制é™ã®ãŸã‚ã«0 (ゼロ)を入力ã—ã¾ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:186 +#: usr/local/www/diag_packet_capture.php:206 +#: usr/local/www/diag_packet_capture.php:253 +#: usr/local/www/diag_packet_capture.php:270 +#: usr/local/www/diag_packet_capture.php:270 +msgid "Level of Detail" +msgstr "詳細度" + +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/diag_packet_capture.php:209 +#: usr/local/www/diag_packet_capture.php:256 +#: usr/local/www/diag_packet_capture.php:273 +#: usr/local/www/diag_packet_capture.php:273 +msgid "Normal" +msgstr "通常ã®" + +#: usr/local/www/diag_packet_capture.php:190 +#: usr/local/www/diag_packet_capture.php:210 +#: usr/local/www/diag_packet_capture.php:257 +#: usr/local/www/diag_packet_capture.php:274 +#: usr/local/www/diag_packet_capture.php:274 +msgid "Medium" +msgstr "メディア" + +#: usr/local/www/diag_packet_capture.php:191 +#: usr/local/www/diag_packet_capture.php:211 +#: usr/local/www/diag_packet_capture.php:258 +#: usr/local/www/diag_packet_capture.php:275 +#: usr/local/www/diag_packet_capture.php:275 +msgid "High" +msgstr "高ã„" + +#: usr/local/www/diag_packet_capture.php:192 +#: usr/local/www/diag_packet_capture.php:212 +#: usr/local/www/diag_packet_capture.php:259 +#: usr/local/www/diag_packet_capture.php:276 +#: usr/local/www/diag_packet_capture.php:276 +msgid "Full" +msgstr "フル" + +#: usr/local/www/diag_packet_capture.php:194 +#: usr/local/www/diag_packet_capture.php:214 +#: usr/local/www/diag_packet_capture.php:261 +#: usr/local/www/diag_packet_capture.php:278 +#: usr/local/www/diag_packet_capture.php:278 +msgid "" +"This is the level of detail that will be displayed after hitting 'Stop' when " +"the packets have been captured." +msgstr "パケットãŒã‚­ãƒ£ãƒ—ãƒãƒ£ã•れã¦ããŸã€Œã“れãŒã¨ã' stop'を打ã£ãŸå¾Œã«è¡¨ç¤ºã•れãŸè©³ç´°ãƒ¬ãƒ™ãƒ«ã§ã‚る〠。" + +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/diag_packet_capture.php:216 +#: usr/local/www/diag_packet_capture.php:263 +#: usr/local/www/diag_packet_capture.php:280 +#: usr/local/www/diag_packet_capture.php:280 +msgid "" +"This option does not affect the level of detail when downloading the packet " +"capture." +msgstr "キャプãƒãƒ£"パケットをダウンロードã™ã‚‹ã¨ãã«ã“ã®ã‚ªãƒ—ションã¯ã€è©³ç´°ãƒ¬ãƒ™ãƒ«ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“〠。" + +#: usr/local/www/diag_packet_capture.php:199 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:266 +#: usr/local/www/diag_packet_capture.php:284 +#: usr/local/www/diag_packet_capture.php:284 +msgid "Reverse DNS Lookup" +msgstr "DNSã®é€†å¼•ã" + +#: usr/local/www/diag_packet_capture.php:202 +#: usr/local/www/diag_packet_capture.php:222 +#: usr/local/www/diag_packet_capture.php:269 +#: usr/local/www/diag_packet_capture.php:287 +#: usr/local/www/diag_packet_capture.php:287 +msgid "" +"This check box will cause the packet capture to perform a reverse DNS lookup " +"associated with all IP addresses." +msgstr "ã™ã¹ã¦ã®IPアドレスã«é–¢é€£ä»˜ã‘られã¦ã„ã‚‹"ã“ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã¯ã€ãƒ‘ケットキャプãƒãƒ£ã¯ã€ DNSã®é€†å¼•ããŒå®Ÿè¡Œã•れã¾ã™ã€ 。" + +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/diag_packet_capture.php:270 +#: usr/local/www/diag_packet_capture.php:288 +#: usr/local/www/diag_packet_capture.php:288 +msgid "This option can cause delays for large packet captures." +msgstr "ã“ã®ã‚ªãƒ—ションã¯ã€å¤§è¦æ¨¡ãªãƒ‘ケットキャプãƒãƒ£ã®é…å»¶ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:226 +#: usr/local/www/diag_packet_capture.php:247 +#: usr/local/www/diag_packet_capture.php:294 +#: usr/local/www/diag_packet_capture.php:312 +#: usr/local/www/diag_packet_capture.php:312 +msgid "The packet capture file was last updated:" +msgstr "パケットキャプãƒãƒ£ãƒ•ã‚¡ã‚¤ãƒ«ãŒæœ€å¾Œã«æ›´æ–°ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/diag_packet_capture.php:239 +#: usr/local/www/diag_packet_capture.php:267 +#: usr/local/www/diag_packet_capture.php:260 +#: usr/local/www/diag_packet_capture.php:296 +#: usr/local/www/diag_packet_capture.php:307 +#: usr/local/www/diag_packet_capture.php:343 +#: usr/local/www/diag_packet_capture.php:325 +#: usr/local/www/diag_packet_capture.php:361 +#: usr/local/www/diag_packet_capture.php:325 +#: usr/local/www/diag_packet_capture.php:361 +msgid "Packet Capture is running." +msgstr "パケットキャプãƒãƒ£ãŒå®Ÿè¡Œã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:272 +#: usr/local/www/diag_packet_capture.php:301 +#: usr/local/www/diag_packet_capture.php:347 +#: usr/local/www/diag_packet_capture.php:365 +#: usr/local/www/diag_packet_capture.php:365 +msgid "Packet Capture stopped." +msgstr "パケットキャプãƒãƒ£ã‚’åœæ­¢ã—ã¾ã—ãŸã€‚" + +#: usr/local/www/diag_packet_capture.php:272 +#: usr/local/www/diag_packet_capture.php:301 +#: usr/local/www/diag_packet_capture.php:347 +#: usr/local/www/diag_packet_capture.php:365 +#: usr/local/www/diag_packet_capture.php:365 +msgid "Packets Captured:" +msgstr "パケットã¯ã€ä¿å­˜ã•れãŸãƒ“デオ:" + +#: usr/local/www/crash_reporter.php:68 usr/local/www/crash_reporter.php:68 +msgid "Unfortunately we have detected a programming bug." +msgstr "残念ãªãŒã‚‰ã€æˆ‘々ã¯ã€ãƒ—ログラミングã®ãƒã‚°ã‚’検出ã—ãŸã€‚" + +#: usr/local/www/crash_reporter.php:69 usr/local/www/crash_reporter.php:69 +msgid "" +"Would you like to submit the programming debug logs to the pfSense " +"developers for inspection?" +msgstr "検査ã®ãŸã‚ã«é–‹ç™ºè€…ã¯ã€Œã‚ãªãŸã¯pfSenseã«ãƒ—ログラミングデãƒãƒƒã‚°ãƒ­ã‚°ã‚’é€ä¿¡ã—ãŸã„"?" + +#: usr/local/www/crash_reporter.php:71 usr/local/www/crash_reporter.php:71 +msgid "" +"Please double check the contents to ensure you are comfortable sending this " +"information before clicking Yes." +msgstr "[ã¯ã„]をクリックã™ã‚‹å‰ã«ã“ã®æƒ…報をé€ä¿¡ã™ã‚‹ã“ã¨ã§å¿«é©ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«å†…容をå†ç¢ºèªã—ã¦ãã ã•ã„。" + +#: usr/local/www/crash_reporter.php:73 usr/local/www/crash_reporter.php:73 +msgid "Contents of crash reports" +msgstr "クラッシュレãƒãƒ¼ãƒˆã®å†…容" + +#: usr/local/www/crash_reporter.php:76 usr/local/www/crash_reporter.php:76 +msgid " - Submit this to the developers for inspection" +msgstr " - 検査ã®ãŸã‚ã«ã€é–‹ç™ºè€…ã«ã“れをæå‡º" + +#: usr/local/www/crash_reporter.php:77 usr/local/www/crash_reporter.php:77 +msgid " - Just delete the crash report and take me back to the Dashboard" +msgstr " - ã¡ã‚‡ã†ã©ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãƒ¬ãƒãƒ¼ãƒˆã‚’削除ã—ã¦ã€ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰ã«ç§ã‚’å–り戻ã™" + +#: usr/local/www/crash_reporter.php:82 usr/local/www/crash_reporter.php:82 +msgid "Crash reporter" +msgstr "クラッシュレãƒãƒ¼ã‚¿ãƒ¼" + +#: usr/local/www/crash_reporter.php:101 usr/local/www/crash_reporter.php:103 +#: usr/local/www/crash_reporter.php:103 +msgid "Processing..." +msgstr "処ç†ä¸­..." + +#: usr/local/www/crash_reporter.php:108 usr/local/www/crash_reporter.php:110 +#: usr/local/www/crash_reporter.php:112 usr/local/www/crash_reporter.php:112 +msgid "Uploading..." +msgstr "アップロード..." + +#: usr/local/www/crash_reporter.php:116 +#: usr/local/www/services_captiveportal_zones_edit.php:115 +#: usr/local/www/crash_reporter.php:120 +#: usr/local/www/services_captiveportal_zones_edit.php:117 +#: usr/local/www/crash_reporter.php:122 +#: usr/local/www/services_captiveportal_zones_edit.php:115 +#: usr/local/www/crash_reporter.php:122 +msgid "Continue" +msgstr "ç¶šã‘ã‚‹" + +#: usr/local/www/crash_reporter.php:116 usr/local/www/crash_reporter.php:120 +#: usr/local/www/crash_reporter.php:122 usr/local/www/crash_reporter.php:122 +msgid " and delete crash report files from local disk." +msgstr "ローカルディスクã‹ã‚‰ã®ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãƒ¬ãƒãƒ¼ãƒˆãƒ•ァイルを削除ã—ã¾ã™ã€‚" + +#: usr/local/www/diag_authentication.php:52 +#: usr/local/www/diag_authentication.php:52 +msgid "is not a valid authentication server" +msgstr "有効ãªèªè¨¼ã‚µãƒ¼ãƒãƒ¼ã§ã¯ã‚りã¾ã›ã‚“" + +#: usr/local/www/diag_authentication.php:55 +#: usr/local/www/diag_authentication.php:55 +msgid "A username and password must be specified." +msgstr "ユーザーåã¨ãƒ‘スワードを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/diag_authentication.php:59 +#: usr/local/www/diag_authentication.php:59 +msgid "authenticated successfully." +msgstr "èªè¨¼ã«æˆåŠŸã€‚" + +#: usr/local/www/diag_authentication.php:61 +#: usr/local/www/diag_authentication.php:61 +msgid "This user is a member of these groups" +msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã“れらã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚ã‚‹" + +#: usr/local/www/diag_authentication.php:65 +#: usr/local/www/diag_authentication.php:65 +msgid "Authentication failed." +msgstr "èªè¨¼ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" + +#: usr/local/www/diag_authentication.php:69 usr/local/www/interfaces.php:2325 +#: usr/local/www/services_captiveportal.php:578 +#: usr/local/www/services_captiveportal.php:893 usr/local/www/fbegin.inc:189 +#: usr/local/www/fbegin.inc:207 usr/local/www/services_captiveportal.php:583 +#: usr/local/www/services_captiveportal.php:938 +#: usr/local/www/interfaces.php:2505 usr/local/www/fbegin.inc:215 +#: usr/local/www/services_captiveportal.php:581 +#: usr/local/www/services_captiveportal.php:934 +#: usr/local/www/interfaces.php:2493 +#: usr/local/www/services_captiveportal.php:575 +#: usr/local/www/services_captiveportal.php:936 usr/local/www/fbegin.inc:206 +#: usr/local/www/interfaces.php:2523 +#: usr/local/www/services_captiveportal.php:591 +#: usr/local/www/services_captiveportal.php:952 +#: usr/local/www/interfaces.php:2569 usr/local/www/interfaces.php:2558 +#: usr/local/www/diag_authentication.php:69 +#: usr/local/www/services_captiveportal.php:591 +#: usr/local/www/services_captiveportal.php:952 usr/local/www/fbegin.inc:206 +#: usr/local/www/interfaces.php:2558 +msgid "Authentication" +msgstr "èªè¨¼" + +#: usr/local/www/diag_authentication.php:90 +#: usr/local/www/system_authservers.php:82 +#: usr/local/www/system_usermanager_settings.php:140 +#: usr/local/www/diag_authentication.php:91 +#: usr/local/www/system_authservers.php:83 +#: usr/local/www/system_usermanager_settings.php:143 +#: usr/local/www/diag_authentication.php:91 +#: usr/local/www/system_authservers.php:83 +#: usr/local/www/system_usermanager_settings.php:143 +msgid "Authentication Server" +msgstr "èªè¨¼ã‚µãƒ¼ãƒãƒ¼" + +#: usr/local/www/diag_authentication.php:106 +#: usr/local/www/status_captiveportal.php:162 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/interfaces.php:1724 usr/local/www/interfaces.php:1789 +#: usr/local/www/interfaces.php:1895 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:510 +#: usr/local/www/vpn_pptp_users.php:98 +#: usr/local/www/vpn_pptp_users_edit.php:76 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:146 +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:213 +#: usr/local/www/system_usermanager.php:177 +#: usr/local/www/system_usermanager.php:182 +#: usr/local/www/system_usermanager.php:187 +#: usr/local/www/system_usermanager.php:475 +#: usr/local/www/system_usermanager.php:787 +#: usr/local/www/vpn_l2tp_users.php:101 +#: usr/local/www/vpn_l2tp_users_edit.php:78 +#: usr/local/www/vpn_l2tp_users_edit.php:81 +#: usr/local/www/vpn_l2tp_users_edit.php:154 +#: usr/local/www/vpn_openvpn_client.php:531 +#: usr/local/www/vpn_pppoe_edit.php:536 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:95 +#: usr/local/www/services_dyndns_edit.php:99 +#: usr/local/www/services_dyndns_edit.php:296 +#: usr/local/www/system_usermanager.php:473 +#: usr/local/www/system_usermanager.php:785 +#: usr/local/www/firewall_aliases_edit.php:473 +#: usr/local/www/interfaces.php:1902 usr/local/www/interfaces.php:1967 +#: usr/local/www/interfaces.php:2073 usr/local/www/vpn_openvpn_client.php:536 +#: usr/local/www/vpn_pppoe_edit.php:537 +#: usr/local/www/system_usermanager.php:786 +#: usr/local/www/interfaces_ppps_edit.php:511 +#: usr/local/www/firewall_aliases_edit.php:475 +#: usr/local/www/vpn_l2tp_users.php:102 +#: usr/local/www/diag_authentication.php:107 +#: usr/local/www/vpn_pptp_users_edit.php:147 usr/local/www/interfaces.php:1890 +#: usr/local/www/interfaces.php:1955 usr/local/www/interfaces.php:2061 +#: usr/local/www/vpn_openvpn_client.php:554 +#: usr/local/www/vpn_l2tp_users_edit.php:79 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:155 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97 +#: usr/local/www/vpn_pptp_users.php:99 +#: usr/local/www/vpn_openvpn_client.php:573 +#: usr/local/www/services_dyndns_edit.php:300 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:517 +#: usr/local/www/vpn_pppoe_edit.php:540 +#: usr/local/www/status_captiveportal.php:148 +#: usr/local/www/interfaces.php:1914 usr/local/www/interfaces.php:1982 +#: usr/local/www/interfaces.php:2091 +#: usr/local/www/services_dyndns_edit.php:100 +#: usr/local/www/services_dyndns_edit.php:308 +#: usr/local/www/firewall_aliases_edit.php:497 +#: usr/local/www/interfaces.php:1960 usr/local/www/interfaces.php:2028 +#: usr/local/www/interfaces.php:2137 +#: usr/local/www/interfaces_ppps_edit.php:515 +#: usr/local/www/interfaces.php:1948 usr/local/www/interfaces.php:2017 +#: usr/local/www/interfaces.php:2126 usr/local/www/diag_authentication.php:107 +#: usr/local/www/vpn_pptp_users.php:99 +#: usr/local/www/vpn_openvpn_client.php:573 +#: usr/local/www/services_dyndns_edit.php:100 +#: usr/local/www/services_dyndns_edit.php:308 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:515 +#: usr/local/www/vpn_pppoe_edit.php:540 usr/local/www/vpn_l2tp_users.php:102 +#: usr/local/www/status_captiveportal.php:148 +#: usr/local/www/firewall_aliases_edit.php:483 +#: usr/local/www/vpn_l2tp_users_edit.php:79 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:155 +#: usr/local/www/vpn_pptp_users_edit.php:76 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:147 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:95 +#: usr/local/www/system_usermanager.php:177 +#: usr/local/www/system_usermanager.php:182 +#: usr/local/www/system_usermanager.php:187 +#: usr/local/www/system_usermanager.php:473 +#: usr/local/www/system_usermanager.php:786 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces.php:2017 usr/local/www/interfaces.php:2126 +msgid "Username" +msgstr "ユーザå" + +#: usr/local/www/diag_authentication.php:112 usr/local/www/interfaces.php:1730 +#: usr/local/www/interfaces.php:1795 usr/local/www/interfaces.php:1901 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:516 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:151 +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:220 +#: usr/local/www/system_advanced_notifications.php:192 +#: usr/local/www/system_usermanager.php:183 +#: usr/local/www/system_usermanager.php:188 +#: usr/local/www/system_usermanager.php:482 +#: usr/local/www/system_usermanager_passwordmg.php:50 +#: usr/local/www/system_usermanager_passwordmg.php:98 +#: usr/local/www/system_usermanager_passwordmg.php:101 +#: usr/local/www/vpn_l2tp_users_edit.php:81 +#: usr/local/www/vpn_l2tp_users_edit.php:159 +#: usr/local/www/vpn_openvpn_client.php:541 +#: usr/local/www/vpn_pppoe_edit.php:537 +#: usr/local/www/services_dyndns_edit.php:97 +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/system_usermanager.php:480 +#: usr/local/www/system_advanced_notifications.php:201 +#: usr/local/www/interfaces.php:1908 usr/local/www/interfaces.php:1973 +#: usr/local/www/interfaces.php:2079 usr/local/www/vpn_openvpn_client.php:546 +#: usr/local/www/vpn_pppoe_edit.php:538 +#: usr/local/www/interfaces_ppps_edit.php:517 +#: usr/local/www/system_usermanager_passwordmg.php:99 +#: usr/local/www/system_usermanager_passwordmg.php:102 +#: usr/local/www/diag_authentication.php:113 +#: usr/local/www/vpn_pptp_users_edit.php:152 usr/local/www/interfaces.php:1896 +#: usr/local/www/interfaces.php:1961 usr/local/www/interfaces.php:2067 +#: usr/local/www/vpn_openvpn_client.php:564 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:160 +#: usr/local/www/vpn_openvpn_client.php:583 +#: usr/local/www/services_dyndns_edit.php:309 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:523 +#: usr/local/www/vpn_pppoe_edit.php:541 +#: usr/local/www/system_usermanager_passwordmg.php:104 +#: usr/local/www/system_usermanager_passwordmg.php:107 +#: usr/local/www/interfaces.php:1920 usr/local/www/interfaces.php:1988 +#: usr/local/www/interfaces.php:2097 usr/local/www/services_dyndns_edit.php:98 +#: usr/local/www/services_dyndns_edit.php:317 +#: usr/local/www/interfaces.php:1966 usr/local/www/interfaces.php:2034 +#: usr/local/www/interfaces.php:2143 +#: usr/local/www/interfaces_ppps_edit.php:521 +#: usr/local/www/interfaces.php:1954 usr/local/www/interfaces.php:2023 +#: usr/local/www/interfaces.php:2132 usr/local/www/diag_authentication.php:113 +#: usr/local/www/vpn_openvpn_client.php:583 +#: usr/local/www/services_dyndns_edit.php:98 +#: usr/local/www/services_dyndns_edit.php:317 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:521 +#: usr/local/www/vpn_pppoe_edit.php:541 +#: usr/local/www/system_usermanager_passwordmg.php:50 +#: usr/local/www/system_usermanager_passwordmg.php:104 +#: usr/local/www/system_usermanager_passwordmg.php:107 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:160 +#: usr/local/www/system_advanced_notifications.php:201 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:152 +#: usr/local/www/system_usermanager.php:183 +#: usr/local/www/system_usermanager.php:188 +#: usr/local/www/system_usermanager.php:480 usr/local/www/interfaces.php:1954 +#: usr/local/www/interfaces.php:2023 usr/local/www/interfaces.php:2132 +msgid "Password" +msgstr "パスワード" + +#: usr/local/www/diag_authentication.php:120 usr/local/www/diag_smart.php:346 +#: usr/local/www/diag_authentication.php:121 +#: usr/local/www/diag_testport.php:179 usr/local/www/diag_smart.php:367 +#: usr/local/www/diag_testport.php:181 +#: usr/local/www/diag_authentication.php:121 +#: usr/local/www/diag_testport.php:181 usr/local/www/diag_smart.php:367 +msgid "Test" +msgstr "テスト" + +#: usr/local/www/services_dyndns.php:76 usr/local/www/services_dyndns.php:85 +#: usr/local/www/services_dyndns.php:64 usr/local/www/services_dyndns.php:60 +#: usr/local/www/services_dyndns.php:60 +msgid "Dynamic DNS clients" +msgstr "ダイナミックDNSクライアント" + +#: usr/local/www/services_dyndns.php:89 usr/local/www/services_rfc2136.php:68 +#: usr/local/www/services_dyndns.php:98 usr/local/www/services_dyndns.php:78 +#: usr/local/www/services_dyndns.php:74 usr/local/www/services_rfc2136.php:68 +#: usr/local/www/services_dyndns.php:74 +msgid "DynDns" +msgstr "ダイナミックDNS" + +#: usr/local/www/services_dyndns.php:90 usr/local/www/services_rfc2136.php:69 +#: usr/local/www/services_dyndns.php:99 usr/local/www/services_dyndns.php:79 +#: usr/local/www/services_dyndns.php:75 usr/local/www/services_rfc2136.php:69 +#: usr/local/www/services_dyndns.php:75 +msgid "RFC 2136" +msgstr "RFC 2136" + +#: usr/local/www/services_dyndns.php:100 usr/local/www/status_services.php:244 +#: usr/local/www/services_dyndns.php:109 usr/local/www/status_services.php:240 +#: usr/local/www/status_services.php:238 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:52 +#: usr/local/www/services_dyndns.php:90 usr/local/www/status_services.php:79 +#: usr/local/www/status_openvpn.php:279 usr/local/www/status_openvpn.php:340 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:79 +#: usr/local/www/services_dyndns.php:86 usr/local/www/status_services.php:79 +#: usr/local/www/status_openvpn.php:279 usr/local/www/status_openvpn.php:340 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:79 +#: usr/local/www/services_dyndns.php:86 +msgid "Service" +msgstr "サービス" + +#: usr/local/www/services_dyndns.php:101 usr/local/www/interfaces.php:1612 +#: usr/local/www/system.php:113 usr/local/www/system.php:254 +#: usr/local/www/services_dhcp.php:892 +#: usr/local/www/services_dhcp_edit.php:228 +#: usr/local/www/services_captiveportal_hostname.php:122 +#: usr/local/www/services_captiveportal_hostname_edit.php:176 +#: usr/local/www/services_captiveportal_hostname_edit.php:180 +#: usr/local/www/diag_arp.php:315 usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:184 +#: usr/local/www/services_rfc2136.php:79 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:146 +#: usr/local/www/status_dhcp_leases.php:320 usr/local/www/diag_ndp.php:131 +#: usr/local/www/services_dhcpv6.php:805 +#: usr/local/www/services_dhcpv6_edit.php:205 +#: usr/local/www/services_dyndns_edit.php:95 +#: usr/local/www/services_dyndns_edit.php:267 +#: usr/local/www/services_dhcpv6_edit.php:208 +#: usr/local/www/status_dhcp_leases.php:341 +#: usr/local/www/services_dyndns.php:110 usr/local/www/services_dhcp.php:930 +#: usr/local/www/services_dhcp_edit.php:231 usr/local/www/interfaces.php:1690 +#: usr/local/www/system.php:114 usr/local/www/system.php:265 +#: usr/local/www/services_dhcpv6.php:900 +#: usr/local/www/services_dhcpv6_edit.php:210 +#: usr/local/www/services_captiveportal_hostname_edit.php:174 +#: usr/local/www/services_captiveportal_hostname_edit.php:178 +#: usr/local/www/services_captiveportal_hostname.php:120 +#: usr/local/www/status_dhcp_leases.php:343 +#: usr/local/www/services_dhcp.php:1134 +#: usr/local/www/services_dhcp_edit.php:233 usr/local/www/interfaces.php:1678 +#: usr/local/www/system.php:107 usr/local/www/system.php:258 +#: usr/local/www/services_dhcpv6.php:831 usr/local/www/services_rfc2136.php:80 +#: usr/local/www/services_dhcpv6_edit.php:213 +#: usr/local/www/services_dyndns_edit.php:271 +#: usr/local/www/services_dhcp_edit.php:361 +#: usr/local/www/services_dhcp.php:1153 usr/local/www/services_dhcpv6.php:852 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:53 +#: usr/local/www/services_dyndns.php:91 +#: usr/local/www/services_dyndns_edit.php:96 +#: usr/local/www/services_dyndns_edit.php:273 +#: usr/local/www/services_dhcp.php:1173 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:80 +#: usr/local/www/services_dyndns.php:87 usr/local/www/interfaces.php:1736 +#: usr/local/www/interfaces.php:1728 usr/local/www/services_rfc2136.php:80 +#: usr/local/www/diag_ndp.php:131 usr/local/www/diag_arp.php:315 +#: usr/local/www/services_dhcpv6_edit.php:213 +#: usr/local/www/services_dyndns_edit.php:96 +#: usr/local/www/services_dyndns_edit.php:273 usr/local/www/system.php:107 +#: usr/local/www/system.php:258 +#: usr/local/www/services_captiveportal_hostname_edit.php:176 +#: usr/local/www/services_captiveportal_hostname_edit.php:180 +#: usr/local/www/services_dhcp_edit.php:361 +#: usr/local/www/services_dhcp.php:1173 +#: usr/local/www/services_captiveportal_hostname.php:120 +#: usr/local/www/services_dhcpv6.php:852 +#: usr/local/www/status_dhcp_leases.php:343 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:80 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:146 +#: usr/local/www/services_dyndns.php:87 usr/local/www/interfaces.php:1728 +msgid "Hostname" +msgstr "ホストå" + +#: usr/local/www/services_dyndns.php:102 usr/local/www/services_dyndns.php:111 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:54 +#: usr/local/www/services_dyndns.php:92 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:81 +#: usr/local/www/services_dyndns.php:88 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:81 +#: usr/local/www/services_dyndns.php:88 +msgid "Cached IP" +msgstr "キャッシュã•れãŸIPアドレス" + +#: usr/local/www/services_dyndns.php:151 usr/local/www/services_wol.php:188 +#: usr/local/www/firewall_virtual_ip.php:221 +#: usr/local/www/system_advanced_sysctl.php:199 +#: usr/local/www/services_captiveportal_zones.php:89 +#: usr/local/www/services_dyndns.php:172 +#: usr/local/www/services_captiveportal_zones.php:90 +#: usr/local/www/firewall_virtual_ip.php:227 +#: usr/local/www/firewall_virtual_ip.php:247 +#: usr/local/www/services_dyndns.php:171 usr/local/www/services_dyndns.php:167 +#: usr/local/www/firewall_virtual_ip.php:270 +#: usr/local/www/services_wol.php:188 +#: usr/local/www/firewall_virtual_ip.php:270 +#: usr/local/www/services_captiveportal_zones.php:90 +#: usr/local/www/services_dyndns.php:167 +#: usr/local/www/system_advanced_sysctl.php:199 +msgid "Do you really want to delete this entry?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/services_dyndns.php:162 usr/local/www/services_dyndns.php:183 +#: usr/local/www/services_dyndns.php:179 usr/local/www/services_dyndns.php:179 +msgid "" +"IP addresses appearing in green are up to date with Dynamic DNS provider." +msgstr "「緑ã®ä¸­ã«ç¾ã‚Œã‚‹IPアドレスã¯ã€ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNSプロãƒã‚¤ãƒ€ã¨ã®æœ€æ–°ã®ã‚‚ã®ã§ã‚る。" + +#: usr/local/www/graph_cpu.php:83 usr/local/www/graph_cpu.php:83 +msgid "Cannot get CPU load" +msgstr "CPUè² è·ã‚’å–å¾—ã§ãã¾ã›ã‚“" + +#: usr/local/www/graph_cpu.php:84 usr/local/www/graph.php:123 +#: usr/local/www/graph.php:123 usr/local/www/graph_cpu.php:84 +msgid "Collecting initial data, please wait" +msgstr "åˆæœŸãƒ‡ãƒ¼ã‚¿ã‚’åŽé›†ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„" + +#: usr/local/www/graph_cpu.php:96 usr/local/www/graph.php:135 +#: usr/local/www/graph.php:135 usr/local/www/graph_cpu.php:96 +msgid "No URL for getURL" +msgstr "ã®getURLã®ãŸã‚ã®URLãŒãªã„" + +#: usr/local/www/graph_cpu.php:103 usr/local/www/graph.php:142 +#: usr/local/www/graph.php:142 usr/local/www/graph_cpu.php:103 +msgid "No callback function for getURL" +msgstr "ã®getURLã®ãŸã‚ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯é–¢æ•°ã¾ã›ã‚“" + +#: usr/local/www/graph_cpu.php:119 usr/local/www/graph.php:158 +#: usr/local/www/graph.php:158 usr/local/www/graph_cpu.php:119 +msgid "Both getURL and XMLHttpRequest are undefined" +msgstr "ã®getURLã¨XMLHttpRequestã®ä¸¡æ–¹ãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“" + +#: usr/local/www/services_snmp.php:87 usr/local/www/services_snmp.php:91 +#: usr/local/www/services_snmp.php:91 +msgid "Invalid character '#' in system location" +msgstr "ç„¡åŠ¹ãªæ–‡å­—'" + +#: usr/local/www/services_snmp.php:88 usr/local/www/services_snmp.php:92 +#: usr/local/www/services_snmp.php:92 +msgid "Invalid character '#' in system contact" +msgstr "ç„¡åŠ¹ãªæ–‡å­—'" + +#: usr/local/www/services_snmp.php:89 usr/local/www/services_snmp.php:93 +#: usr/local/www/services_snmp.php:93 +msgid "Invalid character '#' in read community string" +msgstr "ç„¡åŠ¹ãªæ–‡å­—'" + +#: usr/local/www/services_snmp.php:92 usr/local/www/services_snmp.php:96 +#: usr/local/www/services_snmp.php:96 +msgid "Community" +msgstr "コミュニティ" + +#: usr/local/www/services_snmp.php:96 usr/local/www/services_snmp.php:100 +#: usr/local/www/services_snmp.php:100 +msgid "Polling Port" +msgstr "ãƒãƒ¼ãƒªãƒ³ã‚°ãƒãƒ¼ãƒˆ" + +#: usr/local/www/services_snmp.php:103 usr/local/www/services_snmp.php:107 +#: usr/local/www/services_snmp.php:107 +msgid "Invalid character '#' in SNMP trap string" +msgstr "ç„¡åŠ¹ãªæ–‡å­—'" + +#: usr/local/www/services_snmp.php:106 usr/local/www/services_snmp.php:342 +#: usr/local/www/services_snmp.php:340 usr/local/www/services_snmp.php:341 +#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:351 +#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:351 +msgid "Trap server" +msgstr "トラップサーãƒ" + +#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:114 +#: usr/local/www/services_snmp.php:114 +msgid "Trap server port" +msgstr "トラップサーãƒãƒãƒ¼ãƒˆ" + +#: usr/local/www/services_snmp.php:114 usr/local/www/services_snmp.php:361 +#: usr/local/www/services_snmp.php:359 usr/local/www/services_snmp.php:360 +#: usr/local/www/services_snmp.php:118 usr/local/www/services_snmp.php:370 +#: usr/local/www/services_snmp.php:118 usr/local/www/services_snmp.php:370 +msgid "Trap string" +msgstr "トラップ文字列" + +#: usr/local/www/services_snmp.php:159 usr/local/www/fbegin.inc:134 +#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:160 +#: usr/local/www/fbegin.inc:151 usr/local/www/services_snmp.php:165 +#: usr/local/www/fbegin.inc:151 usr/local/www/services_snmp.php:165 +msgid "SNMP" +msgstr "SNMP" + +#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:273 +#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:284 +#: usr/local/www/services_snmp.php:284 +msgid "SNMP Daemon" +msgstr "SNMPデーモン" + +#: usr/local/www/services_snmp.php:281 usr/local/www/services_snmp.php:279 +#: usr/local/www/services_snmp.php:280 usr/local/www/services_snmp.php:290 +#: usr/local/www/services_snmp.php:290 +msgid "Polling Port " +msgstr "ãƒãƒ¼ãƒªãƒ³ã‚°ãƒãƒ¼ãƒˆ" + +#: usr/local/www/services_snmp.php:284 usr/local/www/services_snmp.php:282 +#: usr/local/www/services_snmp.php:283 usr/local/www/services_snmp.php:293 +#: usr/local/www/services_snmp.php:293 +msgid "Enter the port to accept polling events on (default 161)" +msgstr "(デフォルト161 )上ã§ã®ãƒãƒ¼ãƒªãƒ³ã‚°ã‚¤ãƒ™ãƒ³ãƒˆã‚’å—ã‘入れるãŸã‚ã«ãƒãƒ¼ãƒˆã‚’入力ã—ã¾ã™" + +#: usr/local/www/services_snmp.php:289 usr/local/www/services_snmp.php:287 +#: usr/local/www/services_snmp.php:288 usr/local/www/services_snmp.php:298 +#: usr/local/www/services_snmp.php:298 +msgid "System location" +msgstr "システムã®å ´æ‰€" + +#: usr/local/www/services_snmp.php:296 usr/local/www/services_snmp.php:294 +#: usr/local/www/services_snmp.php:295 usr/local/www/services_snmp.php:305 +#: usr/local/www/services_snmp.php:305 +msgid "System contact" +msgstr "システムã®é€£çµ¡å…ˆ" + +#: usr/local/www/services_snmp.php:303 usr/local/www/services_snmp.php:301 +#: usr/local/www/services_snmp.php:302 usr/local/www/services_snmp.php:312 +#: usr/local/www/services_snmp.php:312 +msgid "Read Community String" +msgstr "コミュニティストリングを読む" + +#: usr/local/www/services_snmp.php:306 usr/local/www/services_snmp.php:304 +#: usr/local/www/services_snmp.php:305 usr/local/www/services_snmp.php:315 +#: usr/local/www/services_snmp.php:315 +msgid "" +"The community string is like a password, restricting access to querying SNMP " +"to hosts knowing the community string. Use a strong value here to protect " +"from unauthorized information disclosure." +msgstr "コミュニティストリングを知ã£ã¦ã„るホストã«ã€Œã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£æ–‡å­—列ã¯ã€SNMPを照会ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制é™ã™ã‚‹ã€ãƒ‘スワードã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€ ã€‚ä¸æ­£ãªæƒ…報開示ã‹ã‚‰ã€Œä¿è­·ã™ã‚‹ãŸã‚ã«ã“ã“ã«å¼·åŠ›ãªå€¤ã‚’使用ã—ã¾ã™ã€‚" + +#: usr/local/www/services_snmp.php:335 usr/local/www/services_snmp.php:333 +#: usr/local/www/services_snmp.php:334 usr/local/www/services_snmp.php:344 +#: usr/local/www/services_snmp.php:344 +msgid "SNMP Traps" +msgstr "SNMPトラップ" + +#: usr/local/www/services_snmp.php:345 usr/local/www/services_snmp.php:343 +#: usr/local/www/services_snmp.php:344 usr/local/www/services_snmp.php:354 +#: usr/local/www/services_snmp.php:354 +msgid "Enter trap server name" +msgstr "トラップサーãƒåを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_snmp.php:350 usr/local/www/services_snmp.php:348 +#: usr/local/www/services_snmp.php:349 usr/local/www/services_snmp.php:359 +#: usr/local/www/services_snmp.php:359 +msgid "Trap server port " +msgstr "トラップサーãƒãƒãƒ¼ãƒˆ" + +#: usr/local/www/services_snmp.php:353 usr/local/www/services_snmp.php:351 +#: usr/local/www/services_snmp.php:352 usr/local/www/services_snmp.php:362 +#: usr/local/www/services_snmp.php:362 +msgid "Enter the port to send the traps to (default 162)" +msgstr "(デフォルト162 )ã«ãƒˆãƒ©ãƒƒãƒ—ã‚’é€ä¿¡ã™ã‚‹ã‚ˆã†ã«ãƒãƒ¼ãƒˆã‚’入力ã—ã¾ã™" + +#: usr/local/www/services_snmp.php:358 usr/local/www/services_snmp.php:356 +#: usr/local/www/services_snmp.php:357 usr/local/www/services_snmp.php:367 +#: usr/local/www/services_snmp.php:367 +msgid "Enter the SNMP trap string" +msgstr "SNMPãƒˆãƒ©ãƒƒãƒ—ã®æ–‡å­—列を入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_snmp.php:370 usr/local/www/services_snmp.php:368 +#: usr/local/www/services_snmp.php:369 usr/local/www/services_snmp.php:379 +#: usr/local/www/services_snmp.php:379 +msgid "Modules" +msgstr "モジュール" + +#: usr/local/www/services_snmp.php:376 usr/local/www/services_snmp.php:374 +#: usr/local/www/services_snmp.php:375 usr/local/www/services_snmp.php:385 +#: usr/local/www/services_snmp.php:385 +msgid "SNMP Modules" +msgstr "SNMPモジュール" + +#: usr/local/www/services_snmp.php:378 usr/local/www/services_snmp.php:376 +#: usr/local/www/services_snmp.php:377 usr/local/www/services_snmp.php:387 +#: usr/local/www/services_snmp.php:387 +msgid "MibII" +msgstr "MIBII" + +#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:378 +#: usr/local/www/services_snmp.php:379 usr/local/www/services_snmp.php:389 +#: usr/local/www/services_snmp.php:389 +msgid "Netgraph" +msgstr "NETGRAPH" + +#: usr/local/www/services_snmp.php:382 usr/local/www/license.php:171 +#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:381 +#: usr/local/www/services_snmp.php:391 usr/local/www/license.php:171 +#: usr/local/www/services_snmp.php:391 +msgid "PF" +msgstr "PF" + +#: usr/local/www/services_snmp.php:384 usr/local/www/services_snmp.php:382 +#: usr/local/www/services_snmp.php:383 usr/local/www/services_snmp.php:393 +#: usr/local/www/services_snmp.php:393 +msgid "Host Resources (Requires MibII)" +msgstr "ホストリソース( MIBIIãŒå¿…è¦ã§ã™ï¼‰" + +#: usr/local/www/services_snmp.php:391 +msgid "Bind to LAN interface only" +msgstr "LANインターフェイスã«ãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹ã ã‘" + +#: usr/local/www/services_snmp.php:393 +msgid "" +"This option can be useful when trying to access the SNMP agent by the LAN " +"interface's IP address through a VPN tunnel terminated on the WAN interface." +msgstr "WANインターフェイス上ã§çµ‚端VPNトンãƒãƒ«çµŒç”±ã§ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®IPアドレス「LANã«ã‚ˆã£ã¦SNMPエージェントã«ã‚¢ã‚¯ã‚»ã‚¹ã—よã†ã¨ã™ã‚‹ã¨ã€ã“ã®ã‚ªãƒ—ションãŒå½¹ç«‹ã¡ã¾ã™ã€ 。" + +#: usr/local/www/headjs.php:143 usr/local/www/firewall_rules.php:315 +#: usr/local/www/firewall_rules.php:319 usr/local/www/guiconfig.inc:302 +#: usr/local/www/firewall_rules.php:312 usr/local/www/guiconfig.inc:291 +#: usr/local/www/guiconfig.inc:290 usr/local/www/headjs.php:146 +#: usr/local/www/firewall_rules.php:311 usr/local/www/guiconfig.inc:287 +#: usr/local/www/firewall_rules.php:311 usr/local/www/guiconfig.inc:287 +#: usr/local/www/headjs.php:146 +msgid "Apply changes" +msgstr "変更をé©ç”¨" + +#: usr/local/www/services_wol.php:63 usr/local/www/services_wol.php:63 +#, php-format +msgid "Sent magic packet to %1$s (%2$s)%3$s" +msgstr "ã¯%1$s ( %2$s ) %3$sã«ãƒžã‚¸ãƒƒã‚¯ãƒ‘ケットをé€ä¿¡ã—ãŸ" + +#: usr/local/www/services_wol.php:65 usr/local/www/services_wol.php:65 +#, php-format +msgid "" +"Please check the %1$ssystem log%2$s, the wol command for %3$s (%4$s) did not " +"complete successfully%5$s" +msgstr "「 ( $ S ï¼… 4 ) %3$sãŸã‚〠WOLコマンドを%1$ssystemã®log%2$sを確èªã—ã¦ãã ã•ã„ã¾ã›ã‚“ã§ã—ãŸ"5 $ sã®ï¼…正常ã«å®Œäº†" + +#: usr/local/www/services_wol.php:86 usr/local/www/services_wol_edit.php:90 +#: usr/local/www/interfaces.php:541 usr/local/www/services_dhcp_edit.php:129 +#: usr/local/www/services_dhcp_edit.php:131 usr/local/www/interfaces.php:611 +#: usr/local/www/interfaces.php:608 usr/local/www/services_dhcp_edit.php:165 +#: usr/local/www/interfaces.php:623 usr/local/www/interfaces.php:634 +#: usr/local/www/interfaces.php:630 usr/local/www/services_wol.php:86 +#: usr/local/www/services_dhcp_edit.php:165 +#: usr/local/www/services_wol_edit.php:90 usr/local/www/interfaces.php:630 +msgid "A valid MAC address must be specified." +msgstr "有効ãªMACアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_wol.php:88 usr/local/www/services_wol.php:88 +msgid "A valid interface must be specified." +msgstr "有効ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_wol.php:94 usr/local/www/services_wol.php:94 +msgid "A valid ip could not be found!" +msgstr "有効ãªIPãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—㟠ï¼" + +#: usr/local/www/services_wol.php:99 usr/local/www/services_wol.php:99 +#, php-format +msgid "Sent magic packet to %s." +msgstr "%s.ã«é€ä¿¡ã•れãŸãƒžã‚¸ãƒƒã‚¯ãƒ‘ケット" + +#: usr/local/www/services_wol.php:101 usr/local/www/services_wol.php:101 +#, php-format +msgid "" +"Please check the %1$ssystem log%2$s, the wol command for %3$s did not " +"complete successfully%4$s" +msgstr "「 %1$ssystemã®log%2$sを確èªã—ã¦ãã ã•ã„〠%3$s用WOLコマンドã¯ã—ã¾ã›ã‚“ã§ã—ãŸ"4 $ sã®ï¼…正常ã«å®Œäº†" + +#: usr/local/www/services_wol.php:115 usr/local/www/services_wol.php:127 +#: usr/local/www/services_wol_edit.php:112 usr/local/www/diag_backup.php:123 +#: usr/local/www/fbegin.inc:142 usr/local/www/fbegin.inc:159 +#: usr/local/www/diag_backup.php:201 usr/local/www/fbegin.inc:167 +#: usr/local/www/fbegin.inc:158 usr/local/www/services_wol.php:115 +#: usr/local/www/services_wol.php:127 usr/local/www/services_wol_edit.php:112 +#: usr/local/www/diag_backup.php:201 usr/local/www/fbegin.inc:158 +msgid "Wake on LAN" +msgstr "Wake On LANã®" + +#: usr/local/www/services_wol.php:141 usr/local/www/services_wol.php:141 +msgid "Choose which interface the host to be woken up is connected to." +msgstr "ã«æŽ¥ç¶šã•れã¦ã„るウェイクアップã™ã‚‹ãƒ›ã‚¹ãƒˆã¨ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã‹ã‚’é¸æŠžã€‚" + +#: usr/local/www/services_wol.php:144 usr/local/www/services_wol.php:162 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:140 +#: usr/local/www/status_captiveportal.php:161 +#: usr/local/www/interfaces.php:1283 +#: usr/local/www/services_captiveportal_mac.php:167 +#: usr/local/www/services_captiveportal_mac_edit.php:98 +#: usr/local/www/services_captiveportal_mac_edit.php:175 +#: usr/local/www/services_dhcp.php:890 +#: usr/local/www/services_dhcp_edit.php:106 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/status_interfaces.php:178 usr/local/www/diag_arp.php:314 +#: usr/local/www/status_dhcp_leases.php:319 usr/local/www/diag_ndp.php:130 +#: usr/local/www/status_interfaces.php:252 +#: usr/local/www/status_dhcp_leases.php:340 +#: usr/local/www/services_dhcp.php:928 +#: usr/local/www/services_dhcp_edit.php:108 +#: usr/local/www/services_dhcp_edit.php:210 usr/local/www/interfaces.php:1387 +#: usr/local/www/status_interfaces.php:255 +#: usr/local/www/services_captiveportal_mac.php:165 +#: usr/local/www/services_captiveportal_mac_edit.php:96 +#: usr/local/www/services_captiveportal_mac_edit.php:173 +#: usr/local/www/status_dhcp_leases.php:342 +#: usr/local/www/services_dhcp.php:1132 +#: usr/local/www/services_dhcp_edit.php:209 usr/local/www/interfaces.php:1375 +#: usr/local/www/services_dhcp_edit.php:142 +#: usr/local/www/services_dhcp_edit.php:337 +#: usr/local/www/services_dhcp.php:1151 +#: usr/local/www/services_captiveportal_mac_edit.php:180 +#: usr/local/www/status_captiveportal.php:147 +#: usr/local/www/services_captiveportal_mac.php:175 +#: usr/local/www/interfaces.php:1388 usr/local/www/services_dhcp.php:1171 +#: usr/local/www/interfaces.php:1430 usr/local/www/interfaces.php:1425 +#: usr/local/www/diag_ndp.php:130 usr/local/www/diag_arp.php:314 +#: usr/local/www/services_wol.php:144 usr/local/www/services_wol.php:162 +#: usr/local/www/services_dhcp_edit.php:142 +#: usr/local/www/services_dhcp_edit.php:337 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:140 +#: usr/local/www/status_interfaces.php:255 +#: usr/local/www/services_dhcp.php:1171 +#: usr/local/www/services_captiveportal_mac_edit.php:96 +#: usr/local/www/services_captiveportal_mac_edit.php:180 +#: usr/local/www/status_captiveportal.php:147 +#: usr/local/www/status_dhcp_leases.php:342 +#: usr/local/www/services_captiveportal_mac.php:175 +#: usr/local/www/interfaces.php:1425 +msgid "MAC address" +msgstr "MACアドレス" + +#: usr/local/www/services_wol.php:148 usr/local/www/services_wol.php:148 +msgid "Enter a MAC address " +msgstr "MACアドレスを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_wol.php:148 usr/local/www/services_wol.php:148 +msgid "in the following format: xx:xx:xx:xx:xx:xx" +msgstr "次ã®å½¢å¼ã§ï¼š XX : XX : XX : XX : XX : XX" + +#: usr/local/www/services_wol.php:152 usr/local/www/diag_smart.php:244 +#: usr/local/www/diag_smart.php:265 usr/local/www/services_wol.php:152 +#: usr/local/www/diag_smart.php:265 +msgid "Send" +msgstr "é€ä¿¡" + +#: usr/local/www/services_wol.php:157 usr/local/www/services_wol.php:157 +msgid "Wake all clients at once: " +msgstr "一度ã«ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’覚ã¾ã™ã€‚" + +#: usr/local/www/services_wol.php:158 usr/local/www/services_wol.php:158 +msgid "Or Click the MAC address to wake up an individual device:" +msgstr "ã¾ãŸã¯å€‹ã€…ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’èµ·å‹•ã™ã‚‹ã®ã«MACアドレスをクリックã—ã¦ãã ã•ã„。" + +#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212 +msgid "" +"This service can be used to wake up (power on) computers by sending special" +msgstr "「ã“ã®ã‚µãƒ¼ãƒ“スã¯ã€ç‰¹åˆ¥ãªã‚’é€ä¿¡ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ (電æºON )コンピュータを起動ã™ã‚‹ã®ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212 +msgid "Magic Packets" +msgstr "マジックパケット" + +#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212 +msgid "" +"The NIC in the computer that is to be woken up must support Wake on LAN and " +"has to be configured properly (WOL cable, BIOS settings). " +msgstr "「ウェイクアップã™ã‚‹ã‚³ãƒ³ãƒ”ュータ内ã®NICãŒWake on LANã®ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹å¿…è¦ãŒã‚り〠「 ( WOLケーブル〠BIOS設定)を正ã—ã設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_wol_edit.php:123 +#: usr/local/www/services_wol_edit.php:123 +msgid "Edit WOL entry" +msgstr "編集WOLエントリ" + +#: usr/local/www/services_wol_edit.php:137 +#: usr/local/www/services_wol_edit.php:137 +msgid "Choose which interface this host is connected to." +msgstr "é¸æŠžã—ãŸã©ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã“ã®ãƒ›ã‚¹ãƒˆãŒã«æŽ¥ç¶šã•れã¦ã„る。" + +#: usr/local/www/services_wol_edit.php:144 +#: usr/local/www/services_wol_edit.php:144 +msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx" +msgstr "次ã®å½¢å¼ã§MACアドレスを入力ã—ã¦ãã ã•ã„: XX : XX : XX : XX : XX : XX" + +#: usr/local/www/status_captiveportal.php:58 +#: usr/local/www/status_captiveportal.php:58 +msgid "Status: Captive portal" +msgstr "ステータス:キャプティブãƒãƒ¼ã‚¿ãƒ«" + +#: usr/local/www/status_captiveportal.php:121 +#: usr/local/www/status_captiveportal_test.php:70 +#: usr/local/www/status_captiveportal_voucher_rolls.php:73 +#: usr/local/www/status_captiveportal_vouchers.php:103 +#: usr/local/www/status_captiveportal_vouchers.php:104 +#: usr/local/www/status_captiveportal_test.php:71 +#: usr/local/www/status_captiveportal_voucher_rolls.php:74 +#: usr/local/www/status_captiveportal_expire.php:69 +#: usr/local/www/status_captiveportal_vouchers.php:108 +#: usr/local/www/status_captiveportal.php:106 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +#: usr/local/www/status_captiveportal_expire.php:69 +#: usr/local/www/status_captiveportal_vouchers.php:108 +#: usr/local/www/status_captiveportal.php:106 +#: usr/local/www/status_captiveportal_test.php:71 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +msgid "Active Users" +msgstr "アクティブユーザー" + +#: usr/local/www/status_captiveportal.php:122 +#: usr/local/www/status_captiveportal_test.php:71 +#: usr/local/www/status_captiveportal_voucher_rolls.php:74 +#: usr/local/www/status_captiveportal_vouchers.php:104 +#: usr/local/www/status_captiveportal_vouchers.php:105 +#: usr/local/www/status_captiveportal_test.php:72 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +#: usr/local/www/status_captiveportal_expire.php:70 +#: usr/local/www/status_captiveportal_vouchers.php:109 +#: usr/local/www/status_captiveportal.php:107 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +#: usr/local/www/status_captiveportal_expire.php:70 +#: usr/local/www/status_captiveportal_vouchers.php:109 +#: usr/local/www/status_captiveportal.php:107 +#: usr/local/www/status_captiveportal_test.php:72 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +msgid "Active Vouchers" +msgstr "アクティブãƒã‚¦ãƒãƒ£ãƒ¼" + +#: usr/local/www/status_captiveportal.php:123 +#: usr/local/www/services_captiveportal_vouchers.php:426 +#: usr/local/www/status_captiveportal_test.php:72 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +#: usr/local/www/status_captiveportal_vouchers.php:105 +#: usr/local/www/services_captiveportal_vouchers.php:433 +#: usr/local/www/status_captiveportal_vouchers.php:106 +#: usr/local/www/services_captiveportal_vouchers.php:446 +#: usr/local/www/status_captiveportal_test.php:73 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +#: usr/local/www/status_captiveportal_expire.php:71 +#: usr/local/www/services_captiveportal_vouchers.php:455 +#: usr/local/www/status_captiveportal_vouchers.php:110 +#: usr/local/www/status_captiveportal.php:108 +#: usr/local/www/status_captiveportal_voucher_rolls.php:77 +#: usr/local/www/status_captiveportal_expire.php:71 +#: usr/local/www/services_captiveportal_vouchers.php:460 +#: usr/local/www/status_captiveportal_vouchers.php:110 +#: usr/local/www/status_captiveportal.php:108 +#: usr/local/www/status_captiveportal_test.php:73 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_voucher_rolls.php:77 +msgid "Voucher Rolls" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ­ãƒ¼ãƒ«ã‚¹ãƒ­ã‚¤ã‚¹" + +#: usr/local/www/status_captiveportal.php:124 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_test.php:73 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +#: usr/local/www/status_captiveportal_vouchers.php:106 +#: usr/local/www/status_captiveportal_vouchers.php:107 +#: usr/local/www/status_captiveportal_test.php:74 +#: usr/local/www/status_captiveportal_voucher_rolls.php:77 +#: usr/local/www/status_captiveportal_expire.php:72 +#: usr/local/www/status_captiveportal_vouchers.php:111 +#: usr/local/www/status_captiveportal.php:109 +#: usr/local/www/status_captiveportal_voucher_rolls.php:78 +#: usr/local/www/status_captiveportal_expire.php:72 +#: usr/local/www/status_captiveportal_vouchers.php:111 +#: usr/local/www/status_captiveportal.php:109 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_test.php:74 +#: usr/local/www/status_captiveportal_voucher_rolls.php:78 +msgid "Test Vouchers" +msgstr "テストãƒã‚¦ãƒãƒ£ãƒ¼" + +#: usr/local/www/status_captiveportal.php:135 +#: usr/local/www/status_captiveportal.php:121 +#: usr/local/www/status_captiveportal.php:121 +msgid "Captive Portal Zone" +msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚¾ãƒ¼ãƒ³" + +#: usr/local/www/status_captiveportal.php:157 +#: usr/local/www/status_captiveportal.php:143 +#: usr/local/www/status_captiveportal.php:143 +msgid "Captiveportal status" +msgstr "Captiveportal状æ³" + +#: usr/local/www/status_captiveportal.php:164 +#: usr/local/www/status_captiveportal.php:167 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:99 +#: usr/local/www/status_captiveportal.php:150 +#: usr/local/www/status_captiveportal.php:153 +#: usr/local/www/status_captiveportal.php:150 +#: usr/local/www/status_captiveportal.php:153 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97 +msgid "Session start" +msgstr "セッション開始" + +#: usr/local/www/status_captiveportal.php:165 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:98 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:100 +#: usr/local/www/status_captiveportal.php:151 +#: usr/local/www/status_captiveportal.php:151 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:98 +msgid "Last activity" +msgstr "æœ€å¾Œã®æ´»å‹•" + +#: usr/local/www/status_captiveportal.php:181 +#: usr/local/www/status_captiveportal.php:168 +#: usr/local/www/status_captiveportal.php:168 +msgid "Do you really want to disconnect this client?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’切断ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/status_captiveportal.php:181 +#: usr/local/www/status_interfaces.php:114 +#: usr/local/www/status_interfaces.php:129 +#: usr/local/www/status_interfaces.php:144 +#: usr/local/www/status_interfaces.php:159 +#: usr/local/www/status_interfaces.php:132 +#: usr/local/www/status_interfaces.php:147 +#: usr/local/www/status_interfaces.php:162 +#: usr/local/www/status_interfaces.php:177 +#: usr/local/www/status_interfaces.php:135 +#: usr/local/www/status_interfaces.php:150 +#: usr/local/www/status_interfaces.php:165 +#: usr/local/www/status_interfaces.php:180 +#: usr/local/www/status_captiveportal.php:168 +#: usr/local/www/status_interfaces.php:135 +#: usr/local/www/status_interfaces.php:150 +#: usr/local/www/status_interfaces.php:165 +#: usr/local/www/status_interfaces.php:180 +#: usr/local/www/status_captiveportal.php:168 +msgid "Disconnect" +msgstr "切断" + +#: usr/local/www/status_captiveportal.php:198 +#: usr/local/www/status_captiveportal.php:185 +#: usr/local/www/status_captiveportal.php:185 +msgid "Don't show last activity" +msgstr "最後ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを表示ã—ãªã„" + +#: usr/local/www/status_captiveportal.php:201 +#: usr/local/www/status_captiveportal.php:188 +#: usr/local/www/status_captiveportal.php:188 +msgid "Show last activity" +msgstr "最後ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを表示ã™ã‚‹" + +#: usr/local/www/installer/installer.php:186 +#: usr/local/www/installer/installer.php:186 +msgid "Could not open /tmp/installer.sh for writing" +msgstr "書ãè¾¼ã¿ç”¨ã«ã‚ªãƒ¼ãƒ—ンã§ãã¾ã›ã‚“ã§ã—ãŸ/ tmpã«/ installer.sh" + +#: usr/local/www/installer/installer.php:360 +#: usr/local/www/installer/installer.php:361 +#: usr/local/www/installer/installer.php:361 +#, php-format +msgid "Beginning installation on disk %s." +msgstr "ディスク%s.上ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã®é–‹å§‹" + +#: usr/local/www/installer/installer.php:409 +#: usr/local/www/installer/installer.php:410 +#: usr/local/www/installer/installer.php:410 +msgid "Installer" +msgstr "インストーラ" + +#: usr/local/www/installer/installer.php:916 +#: usr/local/www/installer/installer.php:1104 +#: usr/local/www/installer/installer.php:917 +#: usr/local/www/installer/installer.php:1105 +#: usr/local/www/installer/installer.php:917 +#: usr/local/www/installer/installer.php:1105 +msgid "ERROR: Could not find any suitable disks for installation." +msgstr "エラー:インストールã™ã‚‹ãŸã‚ã®ä»»æ„ã®é©åˆ‡ãªãƒ‡ã‚£ã‚¹ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/interfaces_bridge.php:64 +#: usr/local/www/interfaces_bridge.php:68 +#: usr/local/www/interfaces_bridge.php:68 +msgid "This bridge cannot be deleted because it is assigned as an interface." +msgstr "ãれã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¨ã—ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®æ©‹ã¯å‰Šé™¤ã§ãã¾ã›ã‚“。" + +#: usr/local/www/interfaces_bridge.php:77 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_gif.php:76 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre.php:77 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/diag_backup.php:109 usr/local/www/interfaces.php:1027 +#: usr/local/www/interfaces_assign.php:43 usr/local/www/interfaces_vlan.php:78 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/diag_logs_filter_summary.php:46 +#: usr/local/www/interfaces_lagg.php:82 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq.php:86 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_wireless.php:76 +#: usr/local/www/interfaces_wireless_edit.php:145 +#: usr/local/www/services_captiveportal.php:439 +#: usr/local/www/status_interfaces.php:58 usr/local/www/fbegin.inc:163 +#: usr/local/www/fbegin.inc:327 +#: usr/local/www/services_captiveportal_zones.php:53 +#: usr/local/www/fbegin.inc:180 usr/local/www/fbegin.inc:345 +#: usr/local/www/diag_backup.php:186 +#: usr/local/www/services_captiveportal.php:443 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/interfaces.php:1113 usr/local/www/fbegin.inc:188 +#: usr/local/www/fbegin.inc:291 usr/local/www/status_interfaces.php:60 +#: usr/local/www/services_captiveportal.php:441 +#: usr/local/www/diag_logs_filter_summary.php:47 +#: usr/local/www/interfaces.php:1101 +#: usr/local/www/services_captiveportal_zones.php:54 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_qinq.php:89 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_vlan.php:84 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/interfaces_bridge_edit.php:236 usr/local/www/fbegin.inc:179 +#: usr/local/www/fbegin.inc:283 usr/local/www/interfaces_gre.php:81 +#: usr/local/www/interfaces_gif.php:80 usr/local/www/interfaces.php:1115 +#: usr/local/www/services_captiveportal.php:459 +#: usr/local/www/interfaces.php:1157 usr/local/www/services_dnsmasq.php:262 +#: usr/local/www/interfaces.php:1152 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_qinq.php:89 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_vlan.php:84 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/status_interfaces.php:60 +#: usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/services_captiveportal_zones.php:54 +#: usr/local/www/services_captiveportal.php:459 +#: usr/local/www/diag_backup.php:186 +#: usr/local/www/interfaces_bridge_edit.php:236 usr/local/www/fbegin.inc:179 +#: usr/local/www/fbegin.inc:283 usr/local/www/services_dnsmasq.php:262 +#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gif.php:80 +#: usr/local/www/interfaces_assign.php:43 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/diag_logs_filter_summary.php:47 +#: usr/local/www/interfaces.php:1152 +msgid "Interfaces" +msgstr "インターフェース" + +#: usr/local/www/interfaces_bridge.php:77 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_bridge_edit.php:236 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_bridge_edit.php:236 +msgid "Bridge" +msgstr "ブリッジ" + +#: usr/local/www/interfaces_bridge.php:89 usr/local/www/interfaces_gif.php:88 +#: usr/local/www/interfaces_gre.php:89 usr/local/www/interfaces_groups.php:75 +#: usr/local/www/interfaces_assign.php:402 +#: usr/local/www/interfaces_vlan.php:90 usr/local/www/interfaces_lagg.php:94 +#: usr/local/www/interfaces_ppps.php:90 usr/local/www/interfaces_qinq.php:98 +#: usr/local/www/interfaces_wireless.php:88 +#: usr/local/www/interfaces_groups.php:76 usr/local/www/interfaces_qinq.php:99 +#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_bridge.php:90 +#: usr/local/www/interfaces_lagg.php:95 usr/local/www/interfaces_gre.php:90 +#: usr/local/www/interfaces_wireless.php:89 +#: usr/local/www/interfaces_assign.php:396 +#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_gif.php:89 +#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_bridge.php:96 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_bridge.php:96 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/interfaces_groups.php:76 usr/local/www/interfaces_ppps.php:91 +#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_assign.php:402 +msgid "Interface assignments" +msgstr "インターフェイスã®å‰²ã‚Šå½“ã¦" + +#: usr/local/www/interfaces_bridge.php:90 usr/local/www/interfaces_gif.php:89 +#: usr/local/www/interfaces_gre.php:90 usr/local/www/interfaces_groups.php:76 +#: usr/local/www/interfaces_assign.php:403 +#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_lagg.php:95 +#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_qinq.php:99 +#: usr/local/www/interfaces_wireless.php:89 +#: usr/local/www/interfaces_groups.php:77 +#: usr/local/www/interfaces_qinq.php:100 usr/local/www/interfaces_ppps.php:92 +#: usr/local/www/interfaces_bridge.php:91 usr/local/www/interfaces_lagg.php:96 +#: usr/local/www/interfaces_gre.php:91 +#: usr/local/www/interfaces_wireless.php:90 +#: usr/local/www/interfaces_assign.php:397 +#: usr/local/www/interfaces_vlan.php:92 usr/local/www/interfaces_gif.php:90 +#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_lagg.php:100 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_bridge.php:97 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_gre.php:95 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_lagg.php:100 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_bridge.php:97 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_groups.php:77 usr/local/www/interfaces_ppps.php:92 +#: usr/local/www/interfaces_gre.php:95 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_assign.php:403 +msgid "Interface Groups" +msgstr "インタフェースグループ" + +#: usr/local/www/interfaces_bridge.php:92 usr/local/www/interfaces_gif.php:91 +#: usr/local/www/interfaces_gre.php:92 usr/local/www/interfaces_groups.php:78 +#: usr/local/www/interfaces_assign.php:405 +#: usr/local/www/interfaces_vlan.php:93 usr/local/www/interfaces_lagg.php:97 +#: usr/local/www/interfaces_ppps.php:93 usr/local/www/interfaces_qinq.php:101 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/interfaces_groups.php:79 +#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_ppps.php:94 +#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_lagg.php:98 +#: usr/local/www/interfaces_gre.php:93 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_assign.php:399 +#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_gif.php:92 +#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_lagg.php:102 +#: usr/local/www/interfaces_vlan.php:100 +#: usr/local/www/interfaces_bridge.php:99 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_lagg.php:102 +#: usr/local/www/interfaces_vlan.php:100 +#: usr/local/www/interfaces_bridge.php:99 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_groups.php:79 usr/local/www/interfaces_ppps.php:94 +#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_assign.php:405 +msgid "VLANs" +msgstr "VLANã¯" + +#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_gif.php:92 +#: usr/local/www/interfaces_gre.php:93 usr/local/www/interfaces_groups.php:79 +#: usr/local/www/interfaces_assign.php:406 +#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_lagg.php:98 +#: usr/local/www/interfaces_ppps.php:94 usr/local/www/interfaces_qinq.php:102 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_groups.php:80 +#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_ppps.php:95 +#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_gre.php:94 +#: usr/local/www/interfaces_wireless.php:93 +#: usr/local/www/interfaces_assign.php:400 +#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_lagg.php:103 +#: usr/local/www/interfaces_vlan.php:101 +#: usr/local/www/interfaces_bridge.php:100 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_lagg.php:103 +#: usr/local/www/interfaces_vlan.php:101 +#: usr/local/www/interfaces_bridge.php:100 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_groups.php:80 usr/local/www/interfaces_ppps.php:95 +#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_assign.php:406 +msgid "QinQs" +msgstr "QinQs" + +#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_groups.php:80 +#: usr/local/www/interfaces_assign.php:407 +#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_ppps.php:95 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq.php:103 +#: usr/local/www/interfaces_wireless.php:93 +#: usr/local/www/interfaces_groups.php:81 +#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_ppps.php:96 +#: usr/local/www/interfaces_bridge.php:95 +#: usr/local/www/interfaces_lagg.php:100 usr/local/www/interfaces_gre.php:95 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_assign.php:401 +#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_qinq.php:107 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_vlan.php:102 +#: usr/local/www/interfaces_bridge.php:101 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_gre.php:99 usr/local/www/interfaces_gif.php:98 +#: usr/local/www/interfaces_qinq.php:107 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_vlan.php:102 +#: usr/local/www/interfaces_bridge.php:101 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_groups.php:81 usr/local/www/interfaces_ppps.php:96 +#: usr/local/www/interfaces_gre.php:99 usr/local/www/interfaces_gif.php:98 +#: usr/local/www/interfaces_assign.php:407 +msgid "PPPs" +msgstr "購買力平価" + +#: usr/local/www/interfaces_bridge.php:95 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_gre.php:77 usr/local/www/interfaces_gre.php:95 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups.php:81 +#: usr/local/www/interfaces_assign.php:408 +#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_lagg.php:100 +#: usr/local/www/interfaces_ppps.php:96 usr/local/www/interfaces_qinq.php:104 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_groups.php:82 +#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_ppps.php:97 +#: usr/local/www/interfaces_bridge.php:96 +#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_gre.php:96 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_assign.php:402 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_gif.php:95 +#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_lagg.php:105 +#: usr/local/www/interfaces_vlan.php:103 +#: usr/local/www/interfaces_bridge.php:102 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gre.php:100 +#: usr/local/www/interfaces_gif.php:99 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_lagg.php:105 +#: usr/local/www/interfaces_vlan.php:103 +#: usr/local/www/interfaces_bridge.php:102 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_groups.php:82 usr/local/www/interfaces_ppps.php:97 +#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gre.php:100 +#: usr/local/www/interfaces_gif.php:99 usr/local/www/interfaces_assign.php:408 +msgid "GRE" +msgstr "GRE" + +#: usr/local/www/interfaces_bridge.php:96 usr/local/www/interfaces_gif.php:76 +#: usr/local/www/interfaces_gif.php:95 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_groups.php:82 +#: usr/local/www/interfaces_assign.php:409 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_lagg.php:101 +#: usr/local/www/interfaces_ppps.php:97 usr/local/www/interfaces_qinq.php:105 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_groups.php:83 +#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_ppps.php:98 +#: usr/local/www/interfaces_bridge.php:97 +#: usr/local/www/interfaces_lagg.php:102 usr/local/www/interfaces_gre.php:97 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_assign.php:403 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_qinq.php:109 usr/local/www/interfaces_lagg.php:106 +#: usr/local/www/interfaces_vlan.php:104 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:103 +#: usr/local/www/interfaces_wireless.php:98 +#: usr/local/www/interfaces_gre.php:101 usr/local/www/interfaces_gif.php:80 +#: usr/local/www/interfaces_gif.php:100 usr/local/www/interfaces_qinq.php:109 +#: usr/local/www/interfaces_lagg.php:106 usr/local/www/interfaces_vlan.php:104 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:103 +#: usr/local/www/interfaces_wireless.php:98 +#: usr/local/www/interfaces_groups.php:83 usr/local/www/interfaces_ppps.php:98 +#: usr/local/www/interfaces_gre.php:101 usr/local/www/interfaces_gif.php:80 +#: usr/local/www/interfaces_gif.php:100 +#: usr/local/www/interfaces_assign.php:409 +msgid "GIF" +msgstr "GIF" + +#: usr/local/www/interfaces_bridge.php:97 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_groups.php:83 +#: usr/local/www/interfaces_assign.php:410 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_lagg.php:102 +#: usr/local/www/interfaces_ppps.php:98 usr/local/www/interfaces_qinq.php:106 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_groups.php:84 +#: usr/local/www/interfaces_qinq.php:107 usr/local/www/interfaces_ppps.php:99 +#: usr/local/www/interfaces_bridge.php:98 +#: usr/local/www/interfaces_lagg.php:103 usr/local/www/interfaces_gre.php:98 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_assign.php:404 +#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_qinq.php:110 usr/local/www/interfaces_lagg.php:107 +#: usr/local/www/interfaces_vlan.php:105 +#: usr/local/www/interfaces_bridge.php:104 +#: usr/local/www/interfaces_wireless.php:99 +#: usr/local/www/interfaces_gre.php:102 usr/local/www/interfaces_gif.php:101 +#: usr/local/www/interfaces_qinq.php:110 usr/local/www/interfaces_lagg.php:107 +#: usr/local/www/interfaces_vlan.php:105 +#: usr/local/www/interfaces_bridge.php:104 +#: usr/local/www/interfaces_wireless.php:99 +#: usr/local/www/interfaces_groups.php:84 usr/local/www/interfaces_ppps.php:99 +#: usr/local/www/interfaces_gre.php:102 usr/local/www/interfaces_gif.php:101 +#: usr/local/www/interfaces_assign.php:410 +msgid "Bridges" +msgstr "æ©‹" + +#: usr/local/www/interfaces_bridge.php:98 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_groups.php:84 +#: usr/local/www/interfaces_assign.php:411 +#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_lagg.php:82 +#: usr/local/www/interfaces_lagg.php:103 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps.php:99 usr/local/www/interfaces_qinq.php:107 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_groups.php:85 +#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_ppps.php:100 +#: usr/local/www/interfaces_bridge.php:99 +#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_gre.php:99 +#: usr/local/www/interfaces_wireless.php:98 +#: usr/local/www/interfaces_assign.php:405 +#: usr/local/www/interfaces_vlan.php:100 usr/local/www/interfaces_gif.php:98 +#: usr/local/www/interfaces_qinq.php:111 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_lagg.php:108 +#: usr/local/www/interfaces_vlan.php:106 +#: usr/local/www/interfaces_bridge.php:105 +#: usr/local/www/interfaces_wireless.php:100 +#: usr/local/www/interfaces_gre.php:103 usr/local/www/interfaces_gif.php:102 +#: usr/local/www/interfaces_qinq.php:111 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_lagg.php:108 +#: usr/local/www/interfaces_vlan.php:106 +#: usr/local/www/interfaces_bridge.php:105 +#: usr/local/www/interfaces_wireless.php:100 +#: usr/local/www/interfaces_groups.php:85 +#: usr/local/www/interfaces_ppps.php:100 usr/local/www/interfaces_gre.php:103 +#: usr/local/www/interfaces_gif.php:102 +#: usr/local/www/interfaces_assign.php:411 +msgid "LAGG" +msgstr "LAGG" + +#: usr/local/www/interfaces_bridge.php:108 +#: usr/local/www/interfaces_groups.php:95 +#: usr/local/www/interfaces_lagg.php:113 +#: usr/local/www/load_balancer_pool_edit.php:257 +#: usr/local/www/system_groupmanager.php:317 +#: usr/local/www/load_balancer_pool_edit.php:274 +#: usr/local/www/interfaces_groups.php:96 +#: usr/local/www/interfaces_bridge.php:109 +#: usr/local/www/interfaces_lagg.php:114 +#: usr/local/www/load_balancer_pool_edit.php:272 +#: usr/local/www/interfaces_lagg.php:118 +#: usr/local/www/interfaces_bridge.php:115 +#: usr/local/www/system_groupmanager.php:317 +#: usr/local/www/interfaces_lagg.php:118 +#: usr/local/www/interfaces_bridge.php:115 +#: usr/local/www/interfaces_groups.php:96 +#: usr/local/www/load_balancer_pool_edit.php:272 +msgid "Members" +msgstr "メンãƒãƒ¼" + +#: usr/local/www/interfaces_bridge.php:135 +#: usr/local/www/interfaces_bridge.php:136 +#: usr/local/www/interfaces_bridge.php:142 +#: usr/local/www/interfaces_bridge.php:142 +msgid "Do you really want to delete this bridge?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®æ©‹ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/interfaces_bridge.php:146 +#: usr/local/www/interfaces_bridge.php:147 +#: usr/local/www/interfaces_bridge.php:153 +#: usr/local/www/interfaces_bridge.php:153 +msgid "Here you can configure bridging of interfaces." +msgstr "ã“ã“ã§ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ãƒ–リッジングを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:111 +#: usr/local/www/interfaces_bridge_edit.php:119 +#: usr/local/www/interfaces_bridge_edit.php:119 +msgid "Member Interfaces" +msgstr "メンãƒãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス" + +#: usr/local/www/interfaces_bridge_edit.php:116 +#: usr/local/www/interfaces_bridge_edit.php:124 +#: usr/local/www/interfaces_bridge_edit.php:124 +msgid "Maxage needs to be an integer between 6 and 40." +msgstr "MAXAGEã¯6ã¨40ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:118 +#: usr/local/www/interfaces_bridge_edit.php:126 +#: usr/local/www/interfaces_bridge_edit.php:126 +msgid "Maxaddr needs to be an integer." +msgstr "Maxaddrã¯ã€æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:120 +#: usr/local/www/interfaces_bridge_edit.php:128 +#: usr/local/www/interfaces_bridge_edit.php:128 +msgid "Timeout needs to be an integer." +msgstr "ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:122 +#: usr/local/www/interfaces_bridge_edit.php:130 +#: usr/local/www/interfaces_bridge_edit.php:130 +msgid "Forward Delay needs to be an integer between 4 and 30." +msgstr "転é€é…å»¶ã¯4ã¨30ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:124 +#: usr/local/www/interfaces_bridge_edit.php:132 +#: usr/local/www/interfaces_bridge_edit.php:132 +msgid "Hello time for STP needs to be an integer between 1 and 2." +msgstr "ãƒãƒ­ãƒ¼STPã®ãŸã‚ã®æ™‚é–“ã¯1ã¨2ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚る。" + +#: usr/local/www/interfaces_bridge_edit.php:126 +#: usr/local/www/interfaces_bridge_edit.php:134 +#: usr/local/www/interfaces_bridge_edit.php:134 +msgid "Priority for STP needs to be an integer between 0 and 61440." +msgstr "STPã®å„ªå…ˆé †ä½ã¯0ã¨61440ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:128 +#: usr/local/www/interfaces_bridge_edit.php:136 +#: usr/local/www/interfaces_bridge_edit.php:136 +msgid "Transmit Hold Count for STP needs to be an integer between 1 and 10." +msgstr "STPã¯1 〜10ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ä¿ç•™ã‚«ã‚¦ãƒ³ãƒˆã‚’é€ä¿¡ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:131 +#: usr/local/www/interfaces_bridge_edit.php:139 +#: usr/local/www/interfaces_bridge_edit.php:139 +msgid "interface priority for STP needs to be an integer between 0 and 240." +msgstr "STPã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®å„ªå…ˆé †ä½ã¯0ã‹ã‚‰240ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:136 +#: usr/local/www/interfaces_bridge_edit.php:144 +#: usr/local/www/interfaces_bridge_edit.php:144 +msgid "" +"interface path cost for STP needs to be an integer between 1 and 200000000." +msgstr "「STPã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ãƒ‘スコストã¯1ã¨200000000ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:141 +#: usr/local/www/interfaces_bridge_edit.php:149 +#: usr/local/www/interfaces_bridge_edit.php:149 +msgid "You must select at least 2 member interfaces for a bridge." +msgstr "ã‚ãªãŸã¯æ©‹ã®ãŸã‚ã«å°‘ãªãã¨ã‚‚2メンãƒãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:147 +#: usr/local/www/interfaces_bridge_edit.php:155 +#: usr/local/www/interfaces_bridge_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:157 +msgid "Bridging a wireless interface is only possible in hostap mode." +msgstr "無線インタフェースをブリッジングã®hostapモードã§ã®ã¿å¯èƒ½ã§ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:149 +#: usr/local/www/interfaces_bridge_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:159 +#: usr/local/www/interfaces_bridge_edit.php:159 +msgid "" +"Span interface cannot be part of the bridge. Remove the span interface from " +"bridge members to continue." +msgstr "「スパンã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯ã€ãƒ–リッジã®ä¸€éƒ¨ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã‹ã‚‰ã‚¹ãƒ‘ンインターフェイスを削除ã—ã€ã€Œç¶™ç¶šã—ã¦ãƒ–リッジ部æã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:206 +#: usr/local/www/interfaces_gif_edit.php:106 +#: usr/local/www/interfaces_gre_edit.php:108 +#: usr/local/www/interfaces_vlan_edit.php:121 +#: usr/local/www/interfaces_lagg_edit.php:101 +#: usr/local/www/interfaces_bridge_edit.php:215 +#: usr/local/www/interfaces_vlan_edit.php:124 +#: usr/local/www/interfaces_lagg_edit.php:114 +#: usr/local/www/interfaces_gif_edit.php:114 +#: usr/local/www/interfaces_bridge_edit.php:217 +#: usr/local/www/interfaces_gre_edit.php:108 +#: usr/local/www/interfaces_vlan_edit.php:124 +#: usr/local/www/interfaces_lagg_edit.php:114 +#: usr/local/www/interfaces_gif_edit.php:114 +#: usr/local/www/interfaces_bridge_edit.php:217 +msgid "Error occurred creating interface, please retry." +msgstr "エラーãŒç™ºç”Ÿã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを作æˆã€å†è©¦è¡Œã—ã¦ãã ã•ã„。" + +#: usr/local/www/interfaces_bridge_edit.php:253 +#: usr/local/www/interfaces_bridge_edit.php:262 +#: usr/local/www/interfaces_bridge_edit.php:263 +#: usr/local/www/interfaces_bridge_edit.php:264 +#: usr/local/www/interfaces_bridge_edit.php:266 +#: usr/local/www/interfaces_bridge_edit.php:266 +msgid "Bridge configuration" +msgstr "ブリッジ構æˆ" + +#: usr/local/www/interfaces_bridge_edit.php:256 +#: usr/local/www/interfaces_lagg_edit.php:86 +#: usr/local/www/interfaces_bridge_edit.php:265 +#: usr/local/www/interfaces_bridge_edit.php:266 +#: usr/local/www/interfaces_lagg_edit.php:88 +#: usr/local/www/interfaces_bridge_edit.php:267 +#: usr/local/www/interfaces_bridge_edit.php:269 +#: usr/local/www/interfaces_lagg_edit.php:88 +#: usr/local/www/interfaces_bridge_edit.php:269 +msgid "Member interfaces" +msgstr "メンãƒãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス" + +#: usr/local/www/interfaces_bridge_edit.php:269 +#: usr/local/www/interfaces_bridge_edit.php:278 +#: usr/local/www/interfaces_bridge_edit.php:279 +#: usr/local/www/interfaces_bridge_edit.php:280 +#: usr/local/www/interfaces_bridge_edit.php:282 +#: usr/local/www/interfaces_bridge_edit.php:282 +msgid "Interfaces participating in the bridge." +msgstr "ブリッジã«å‚加ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス。" + +#: usr/local/www/interfaces_bridge_edit.php:285 +#: usr/local/www/interfaces_bridge_edit.php:294 +#: usr/local/www/interfaces_bridge_edit.php:295 +#: usr/local/www/interfaces_bridge_edit.php:296 +#: usr/local/www/interfaces_bridge_edit.php:298 +#: usr/local/www/interfaces_bridge_edit.php:298 +msgid "RSTP/STP" +msgstr "RSTP / STP" + +#: usr/local/www/interfaces_bridge_edit.php:288 +#: usr/local/www/interfaces_bridge_edit.php:297 +#: usr/local/www/interfaces_bridge_edit.php:298 +#: usr/local/www/interfaces_bridge_edit.php:299 +#: usr/local/www/interfaces_bridge_edit.php:301 +#: usr/local/www/interfaces_bridge_edit.php:301 +msgid "Enable spanning tree options for this bridge." +msgstr "ã“ã®ãƒ–リッジã®ãƒ„リーオプションã«ã¾ãŸãŒã‚‹æœ‰åйã«ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:304 +#: usr/local/www/interfaces_bridge_edit.php:313 +#: usr/local/www/interfaces_bridge_edit.php:314 +#: usr/local/www/interfaces_bridge_edit.php:315 +#: usr/local/www/interfaces_bridge_edit.php:317 +#: usr/local/www/interfaces_bridge_edit.php:317 +msgid "Protocol used for spanning tree." +msgstr "プロトコルã¯ã€ã‚¹ãƒ‘ニングツリーã«ä½¿ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:306 +#: usr/local/www/interfaces_bridge_edit.php:315 +#: usr/local/www/interfaces_bridge_edit.php:316 +#: usr/local/www/interfaces_bridge_edit.php:317 +#: usr/local/www/interfaces_bridge_edit.php:319 +#: usr/local/www/interfaces_bridge_edit.php:319 +msgid "STP interfaces" +msgstr "STPインターフェイス" + +#: usr/local/www/interfaces_bridge_edit.php:320 +#: usr/local/www/interfaces_bridge_edit.php:329 +#: usr/local/www/interfaces_bridge_edit.php:330 +#: usr/local/www/interfaces_bridge_edit.php:331 +#: usr/local/www/interfaces_bridge_edit.php:333 +#: usr/local/www/interfaces_bridge_edit.php:333 +msgid "" +"Enable Spanning Tree Protocol on interface. The if_bridge(4) driver has " +"support for the IEEE 802.1D Spanning Tree Protocol (STP). STP is used to " +"detect and remove loops in a network topology." +msgstr "「インターフェイス上ã§ã‚¹ãƒ‘ニングツリープロトコルを有効ã«ã—ã¾ã™ã€‚ if_bridgeを( 4 )ドライãƒãŒæŒã£ã¦ã„る「IEEE 802.1Dスパニングツリープロトコル(STP )をサãƒãƒ¼ãƒˆã€‚ STPã¯ã€ 「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒˆãƒãƒ­ã‚¸ãƒ¼å†…ã®ãƒ«ãƒ¼ãƒ—を検出ã—ã€é™¤åŽ»ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる。" + +#: usr/local/www/interfaces_bridge_edit.php:326 +#: usr/local/www/interfaces_bridge_edit.php:335 +#: usr/local/www/interfaces_bridge_edit.php:336 +#: usr/local/www/interfaces_bridge_edit.php:337 +#: usr/local/www/interfaces_bridge_edit.php:339 +#: usr/local/www/interfaces_bridge_edit.php:339 +msgid "Valid time" +msgstr "é©ç”¨æ™‚é–“" + +#: usr/local/www/interfaces_bridge_edit.php:328 +#: usr/local/www/interfaces_bridge_edit.php:338 +#: usr/local/www/interfaces_bridge_edit.php:347 +#: usr/local/www/interfaces_bridge_edit.php:416 +#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936 +#: usr/local/www/graph.php:120 usr/local/www/services_dhcp.php:679 +#: usr/local/www/services_dhcp.php:689 +#: usr/local/www/services_rfc2136_edit.php:156 +#: usr/local/www/vpn_ipsec_phase1.php:761 +#: usr/local/www/vpn_ipsec_phase1.php:831 +#: usr/local/www/vpn_ipsec_phase2.php:622 +#: usr/local/www/services_dhcpv6.php:624 usr/local/www/services_dhcpv6.php:634 +#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcp.php:702 +#: usr/local/www/interfaces_bridge_edit.php:337 +#: usr/local/www/interfaces_bridge_edit.php:356 +#: usr/local/www/interfaces_bridge_edit.php:425 +#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/interfaces.php:1995 +#: usr/local/www/interfaces.php:2114 usr/local/www/vpn_ipsec_phase1.php:774 +#: usr/local/www/vpn_ipsec_phase1.php:844 +#: usr/local/www/services_dhcpv6.php:692 usr/local/www/services_dhcpv6.php:702 +#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcp.php:878 +#: usr/local/www/interfaces_bridge_edit.php:348 +#: usr/local/www/interfaces_bridge_edit.php:357 +#: usr/local/www/interfaces_bridge_edit.php:426 +#: usr/local/www/vpn_ipsec_phase2.php:744 usr/local/www/interfaces.php:1983 +#: usr/local/www/interfaces.php:2102 usr/local/www/vpn_ipsec_phase1.php:771 +#: usr/local/www/vpn_ipsec_phase1.php:841 +#: usr/local/www/services_dhcpv6.php:623 usr/local/www/services_dhcpv6.php:633 +#: usr/local/www/services_dhcp_edit.php:434 +#: usr/local/www/services_dhcp_edit.php:444 +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcp.php:892 +#: usr/local/www/services_dhcpv6.php:640 usr/local/www/services_dhcpv6.php:650 +#: usr/local/www/interfaces_bridge_edit.php:339 +#: usr/local/www/interfaces_bridge_edit.php:349 +#: usr/local/www/interfaces_bridge_edit.php:358 +#: usr/local/www/interfaces_bridge_edit.php:427 +#: usr/local/www/vpn_ipsec_phase1.php:792 +#: usr/local/www/vpn_ipsec_phase1.php:862 +#: usr/local/www/vpn_ipsec_phase2.php:765 usr/local/www/interfaces.php:2010 +#: usr/local/www/interfaces.php:2132 usr/local/www/services_dhcp.php:902 +#: usr/local/www/services_dhcp.php:912 usr/local/www/interfaces.php:2056 +#: usr/local/www/interfaces.php:2178 +#: usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:351 +#: usr/local/www/interfaces_bridge_edit.php:360 +#: usr/local/www/interfaces_bridge_edit.php:431 +#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167 +#: usr/local/www/services_dhcp_edit.php:434 +#: usr/local/www/services_dhcp_edit.php:444 +#: usr/local/www/services_dhcp.php:902 usr/local/www/services_dhcp.php:912 +#: usr/local/www/services_dhcpv6.php:640 usr/local/www/services_dhcpv6.php:650 +#: usr/local/www/graph.php:120 usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:351 +#: usr/local/www/interfaces_bridge_edit.php:360 +#: usr/local/www/interfaces_bridge_edit.php:431 +#: usr/local/www/services_rfc2136_edit.php:156 +#: usr/local/www/vpn_ipsec_phase1.php:792 +#: usr/local/www/vpn_ipsec_phase1.php:862 +#: usr/local/www/vpn_ipsec_phase2.php:765 usr/local/www/interfaces.php:2045 +#: usr/local/www/interfaces.php:2167 +msgid "seconds" +msgstr "ç§’" + +#: usr/local/www/interfaces_bridge_edit.php:331 +#: usr/local/www/interfaces_bridge_edit.php:340 +#: usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:342 +#: usr/local/www/interfaces_bridge_edit.php:344 +#: usr/local/www/interfaces_bridge_edit.php:344 +msgid "" +"Set the time that a Spanning Tree Protocol configuration is valid. The " +"default is 20 seconds. The minimum is 6 seconds and the maximum is 40 " +"seconds." +msgstr "「スパニングツリープロトコルã®è¨­å®šãŒæœ‰åйã§ã‚る時間を設定ã—ã¾ã™ã€‚ 「デフォルトã¯20ç§’ã§ã™ã€‚最å°å€¤ã¯6ç§’ã§ã€æœ€å¤§å€¤ã¯40 ã€ç§’ã§ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:336 +#: usr/local/www/interfaces_bridge_edit.php:345 +#: usr/local/www/interfaces_bridge_edit.php:346 +#: usr/local/www/interfaces_bridge_edit.php:347 +#: usr/local/www/interfaces_bridge_edit.php:349 +#: usr/local/www/interfaces_bridge_edit.php:349 +msgid "Forward time" +msgstr "è»¢é€æ™‚é–“" + +#: usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:350 +#: usr/local/www/interfaces_bridge_edit.php:351 +#: usr/local/www/interfaces_bridge_edit.php:352 +#: usr/local/www/interfaces_bridge_edit.php:354 +#: usr/local/www/interfaces_bridge_edit.php:354 +msgid "" +"Set the time that must pass before an interface begins forwarding packets " +"when Spanning Tree is enabled. The default is 15 seconds. The minimum is 4 " +"seconds and the maximum is 30 seconds." +msgstr "ã‚¹ãƒ‘ãƒ‹ãƒ³ã‚°ãƒ„ãƒªãƒ¼ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹ã¨ãã«ã€Œã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスãŒãƒ‘ケットã®è»¢é€ã‚’é–‹å§‹ã™ã‚‹å‰ã«é€šéŽã—ãªã‘れã°ãªã‚‰ãªã„時間を設定ã—ã¾ã™ã€ 。デフォルトã¯15ç§’ã§ã™ã€‚最å°å€¤ã¯4ç§’ã€ã§ã€æœ€å¤§å€¤ã¯30ç§’ã§ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:345 +#: usr/local/www/interfaces_bridge_edit.php:354 +#: usr/local/www/interfaces_bridge_edit.php:355 +#: usr/local/www/interfaces_bridge_edit.php:356 +#: usr/local/www/interfaces_bridge_edit.php:358 +#: usr/local/www/interfaces_bridge_edit.php:358 +msgid "Hello time" +msgstr "ãƒãƒ­ãƒ¼ã‚¿ã‚¤ãƒ " + +#: usr/local/www/interfaces_bridge_edit.php:350 +#: usr/local/www/interfaces_bridge_edit.php:359 +#: usr/local/www/interfaces_bridge_edit.php:360 +#: usr/local/www/interfaces_bridge_edit.php:361 +#: usr/local/www/interfaces_bridge_edit.php:363 +#: usr/local/www/interfaces_bridge_edit.php:363 +msgid "" +"Set the time between broadcasting of Spanning Tree Protocol configuration " +"messages. The hello time may only be changed when operating in legacy STP " +"mode. The default is 2 seconds. The minimum is 1 second and the maximum is " +"2 seconds." +msgstr "メッセージ「スパニングツリープロトコルã®è¨­å®šã®æ”¾é€ã¾ã§ã®æ™‚間を設定ã—ã¦ãã ã•ã„〠。レガシーSTPã«å‹•作ã—ã¦ã„ã‚‹å ´åˆã€helloタイムã¯å¤‰æ›´ã•れるã“ã¨ãŒã‚りã¾ã™ã€ãƒ¢ãƒ¼ãƒ‰ã€‚デフォルトã¯2ç§’ã§ã™ã€‚最å°å€¤ã¯1ç§’ã§ã€æœ€å¤§å€¤ã¯ã€Œ 2秒。" + +#: usr/local/www/interfaces_bridge_edit.php:359 +#: usr/local/www/interfaces_bridge_edit.php:368 +#: usr/local/www/interfaces_bridge_edit.php:369 +#: usr/local/www/interfaces_bridge_edit.php:370 +#: usr/local/www/interfaces_bridge_edit.php:372 +#: usr/local/www/interfaces_bridge_edit.php:372 +msgid "" +"Set the bridge priority for Spanning Tree. The default is 32768. The " +"minimum is 0 and the maximum is 61440." +msgstr "「スパニングツリーã®ãƒ–リッジプライオリティを設定ã—ã¾ã™ã€‚デフォルトã¯32768ã§ã™ã€‚ "最å°å€¤ã¯0ã§ã€æœ€å¤§å€¤ã¯61440ã§ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:363 +#: usr/local/www/interfaces_bridge_edit.php:372 +#: usr/local/www/interfaces_bridge_edit.php:373 +#: usr/local/www/interfaces_bridge_edit.php:374 +#: usr/local/www/interfaces_bridge_edit.php:376 +#: usr/local/www/interfaces_bridge_edit.php:376 +msgid "Hold count" +msgstr "ã‚«ã‚¦ãƒ³ãƒˆã‚’ä¿æŒ" + +#: usr/local/www/interfaces_bridge_edit.php:368 +#: usr/local/www/interfaces_bridge_edit.php:377 +#: usr/local/www/interfaces_bridge_edit.php:378 +#: usr/local/www/interfaces_bridge_edit.php:379 +msgid "" +"Set the transmit hold count for Spanning Tree. This is the num- ber of " +"packets transmitted before being rate limited. The default is 6. The " +"minimum is 1 and the maximum is 10." +msgstr "レート制é™ã•れるå‰ã«é€ä¿¡ã•れãŸãƒ‘ケットã€ã‚¹ãƒ‘ニングツリーã®é€ä¿¡ãƒ›ãƒ¼ãƒ«ãƒ‰ã‚«ã‚¦ãƒ³ãƒˆã‚’設定ã—ã¾ã™ã€‚ã“れã¯Â·ãƒŠãƒ³ãƒãƒ¼ã§ã‚ã‚‹"。デフォルトã¯6ã§ã™ã€‚ 「最å°å€¤ã¯1ã§ã€æœ€å¤§å€¤ã¯10ã§ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:382 +msgid "" +"Set the Spanning Tree priority of interface to value. The default is 128. " +"The minimum is 0 and the maximum is 240." +msgstr "「値ã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ã‚¹ãƒ‘ニングツリー優先度を設定ã—ã¾ã™ã€‚デフォルトã¯128ã§ã™ã€‚ 「最å°å€¤ã¯0ã§ã€æœ€å¤§å€¤ã¯240ã§ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:386 +#: usr/local/www/interfaces_bridge_edit.php:395 +#: usr/local/www/interfaces_bridge_edit.php:396 +#: usr/local/www/interfaces_bridge_edit.php:397 +#: usr/local/www/interfaces_bridge_edit.php:400 +#: usr/local/www/interfaces_bridge_edit.php:400 +msgid "Path cost" +msgstr "パスコスト" + +#: usr/local/www/interfaces_bridge_edit.php:395 +#: usr/local/www/interfaces_bridge_edit.php:404 +#: usr/local/www/interfaces_bridge_edit.php:405 +#: usr/local/www/interfaces_bridge_edit.php:406 +#: usr/local/www/interfaces_bridge_edit.php:410 +#: usr/local/www/interfaces_bridge_edit.php:410 +msgid "" +"Set the Spanning Tree path cost of interface to value. The default is " +"calculated from the link speed. To change a previously selected path cost " +"back to automatic, set the cost to 0. The minimum is 1 and the maximum is " +"200000000." +msgstr "「値ã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ã‚¹ãƒ‘ニングツリーパスコストを設定ã—ã¾ã™ã€‚デフォルトã¯ã•れã¦ã„る「リンク速度ã‹ã‚‰ç®—出ã—ãŸã€‚以å‰ã«é¸æŠžã—ãŸãƒ‘スコストを変更ã™ã‚‹ã«ã¯ã€ ã€æˆ»ã£ã¦è‡ªå‹•ã«ã‚³ã‚¹ãƒˆã‚’0ã«è¨­å®šã™ã‚‹ã€‚最å°å€¤ã¯1ã§ã€æœ€å¤§å€¤ã¯ã€Œ 200000000 。" + +#: usr/local/www/interfaces_bridge_edit.php:404 +#: usr/local/www/interfaces_bridge_edit.php:413 +#: usr/local/www/interfaces_bridge_edit.php:414 +#: usr/local/www/interfaces_bridge_edit.php:415 +#: usr/local/www/interfaces_bridge_edit.php:419 +#: usr/local/www/interfaces_bridge_edit.php:419 +msgid "Cache size" +msgstr "キャッシュサイズ" + +#: usr/local/www/interfaces_bridge_edit.php:406 +#: usr/local/www/interfaces_bridge_edit.php:415 +#: usr/local/www/interfaces_bridge_edit.php:416 +#: usr/local/www/interfaces_bridge_edit.php:417 +#: usr/local/www/interfaces_bridge_edit.php:421 +#: usr/local/www/interfaces_bridge_edit.php:421 +msgid "entries" +msgstr "エントリー" + +#: usr/local/www/interfaces_bridge_edit.php:408 +#: usr/local/www/interfaces_bridge_edit.php:417 +#: usr/local/www/interfaces_bridge_edit.php:418 +#: usr/local/www/interfaces_bridge_edit.php:419 +#: usr/local/www/interfaces_bridge_edit.php:423 +#: usr/local/www/interfaces_bridge_edit.php:423 +msgid "" +"Set the size of the bridge address cache to size.tThe default is .100 " +"entries." +msgstr "エントリ「 size.tTheã®ãƒ‡ãƒ•ォルトã«ãƒ–リッジ·アドレス·キャッシュã®ã‚µã‚¤ã‚ºã‚’設定.100ã§ã™ã€ 。" + +#: usr/local/www/interfaces_bridge_edit.php:414 +#: usr/local/www/interfaces_bridge_edit.php:423 +#: usr/local/www/interfaces_bridge_edit.php:424 +#: usr/local/www/interfaces_bridge_edit.php:425 +#: usr/local/www/interfaces_bridge_edit.php:429 +#: usr/local/www/interfaces_bridge_edit.php:429 +msgid "Cache entry expire time" +msgstr "ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚¨ãƒ³ãƒˆãƒªã¯æœ‰åŠ¹æœŸé™ã‚’" + +#: usr/local/www/interfaces_bridge_edit.php:418 +#: usr/local/www/interfaces_bridge_edit.php:427 +#: usr/local/www/interfaces_bridge_edit.php:428 +#: usr/local/www/interfaces_bridge_edit.php:429 +#: usr/local/www/interfaces_bridge_edit.php:433 +#: usr/local/www/interfaces_bridge_edit.php:433 +msgid "" +"Set the timeout of address cache entries to this number of seconds. If " +"seconds is zero, then address cache entries will not be expired. The default " +"is 240 seconds." +msgstr "「ã“ã®ç§’æ•°ã«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚¨ãƒ³ãƒˆãƒªã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’設定ã—ã¾ã™ã€‚å ´åˆã¯ã€ "ç§’ãŒã‚¼ãƒ­ã®å ´åˆã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚¨ãƒ³ãƒˆãƒªãŒæœŸé™åˆ‡ã‚Œã«ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“å–り組む。デフォルト㯠"240ç§’ã§ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:425 +#: usr/local/www/interfaces_bridge_edit.php:434 +#: usr/local/www/interfaces_bridge_edit.php:435 +#: usr/local/www/interfaces_bridge_edit.php:436 +#: usr/local/www/interfaces_bridge_edit.php:440 +#: usr/local/www/interfaces_bridge_edit.php:440 +msgid "Span port" +msgstr "SPANãƒãƒ¼ãƒˆ" + +#: usr/local/www/interfaces_bridge_edit.php:439 +#: usr/local/www/interfaces_bridge_edit.php:448 +#: usr/local/www/interfaces_bridge_edit.php:449 +#: usr/local/www/interfaces_bridge_edit.php:450 +#: usr/local/www/interfaces_bridge_edit.php:454 +#: usr/local/www/interfaces_bridge_edit.php:454 +msgid "" +"Add the interface named by interface as a span port on the bridge. Span " +"ports transmit a copy of every frame received by the bridge. This is most " +"useful for snooping a bridged network passively on another host connected to " +"one of the span ports of the bridge." +msgstr "「ブリッジã®SPANãƒãƒ¼ãƒˆãªã©ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã«ã‚ˆã£ã¦æŒ‡å®šã•れãŸã‚¤ãƒ³ã‚¿ãƒ•ェースを追加ã—ã¾ã™ã€‚スパンã€ãƒãƒ¼ãƒˆã¯ã€ãƒ–リッジãŒå—ä¿¡ã—ãŸã™ã¹ã¦ã®ãƒ•レームã®ã‚³ãƒ”ーをé€ä¿¡ã™ã‚‹ã€‚ã“れã¯ãƒ–リッジã®ã‚¹ãƒ‘ンãƒãƒ¼ãƒˆã®1ã»ã¨ã‚“ã©ã® "ã«æŽ¥ç¶šã•れãŸåˆ¥ã®ãƒ›ã‚¹ãƒˆä¸Šã§å—å‹•çš„ã«ãƒ–リッジãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’スヌーピングã«ä¾¿åˆ©ã€ã§ã‚る。" + +#: usr/local/www/interfaces_bridge_edit.php:448 +#: usr/local/www/interfaces_bridge_edit.php:457 +#: usr/local/www/interfaces_bridge_edit.php:458 +#: usr/local/www/interfaces_bridge_edit.php:459 +#: usr/local/www/interfaces_bridge_edit.php:463 +#: usr/local/www/interfaces_bridge_edit.php:463 +msgid "The span interface cannot be part of the bridge member interfaces." +msgstr "スパンã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯ã€ãƒ–リッジメンãƒãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ä¸€éƒ¨ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/interfaces_bridge_edit.php:453 +#: usr/local/www/interfaces_bridge_edit.php:462 +#: usr/local/www/interfaces_bridge_edit.php:463 +#: usr/local/www/interfaces_bridge_edit.php:464 +#: usr/local/www/interfaces_bridge_edit.php:468 +#: usr/local/www/interfaces_bridge_edit.php:468 +msgid "Edge ports" +msgstr "エッジãƒãƒ¼ãƒˆ" + +#: usr/local/www/interfaces_bridge_edit.php:467 +#: usr/local/www/interfaces_bridge_edit.php:476 +#: usr/local/www/interfaces_bridge_edit.php:477 +#: usr/local/www/interfaces_bridge_edit.php:478 +#: usr/local/www/interfaces_bridge_edit.php:482 +#: usr/local/www/interfaces_bridge_edit.php:482 +msgid "" +"Set interface as an edge port. An edge port connects directly to end " +"stations and cannot create bridging loops in the network; this allows it to " +"transition straight to forwarding." +msgstr "「エッジãƒãƒ¼ãƒˆã¨ã—ã¦ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを設定ã—ã€ã‚¨ãƒƒã‚¸ãƒãƒ¼ãƒˆã¯ã€ã‚¨ãƒ³ãƒ‰ã«ç›´æŽ¥æŽ¥ç¶šã•れã¦ã„ã¾ã™ã€ã®ã‚¹ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å†…ã®ãƒ–リッジングループã¯ä½œæˆã§ãã¾ã›ã‚“ãŒã€ã“れã¯ãれãŒã¾ã£ã™ãフォワーディングを「移行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:473 +#: usr/local/www/interfaces_bridge_edit.php:482 +#: usr/local/www/interfaces_bridge_edit.php:483 +#: usr/local/www/interfaces_bridge_edit.php:484 +#: usr/local/www/interfaces_bridge_edit.php:488 +#: usr/local/www/interfaces_bridge_edit.php:488 +msgid "Auto Edge ports" +msgstr "自動エッジãƒãƒ¼ãƒˆ" + +#: usr/local/www/interfaces_bridge_edit.php:487 +#: usr/local/www/interfaces_bridge_edit.php:496 +#: usr/local/www/interfaces_bridge_edit.php:497 +#: usr/local/www/interfaces_bridge_edit.php:498 +#: usr/local/www/interfaces_bridge_edit.php:502 +#: usr/local/www/interfaces_bridge_edit.php:502 +msgid "" +"Allow interface to automatically detect edge status. This is the default " +"for all interfaces added to a bridge." +msgstr "ブリッジã«è¿½åŠ ã•れãŸã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®"インタフェースãŒè‡ªå‹•çš„ã«ã‚¨ãƒƒã‚¸ã®çŠ¶æ…‹ã‚’æ¤œå‡ºã™ã‚‹ã“ã¨ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚ã“れãŒãƒ‡ãƒ•ォルトã§ã™ã€ 。" + +#: usr/local/www/interfaces_bridge_edit.php:492 +#: usr/local/www/interfaces_bridge_edit.php:501 +#: usr/local/www/interfaces_bridge_edit.php:502 +#: usr/local/www/interfaces_bridge_edit.php:503 +#: usr/local/www/interfaces_bridge_edit.php:507 +#: usr/local/www/interfaces_bridge_edit.php:507 +msgid "This will disable the autoedge status of interfaces." +msgstr "ã“れã¯ã‚¤ãƒ³ã‚¿ãƒ•ェースã®autoedge状態ãŒç„¡åйã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:496 +#: usr/local/www/interfaces_bridge_edit.php:505 +#: usr/local/www/interfaces_bridge_edit.php:506 +#: usr/local/www/interfaces_bridge_edit.php:507 +#: usr/local/www/interfaces_bridge_edit.php:511 +#: usr/local/www/interfaces_bridge_edit.php:511 +msgid "PTP ports" +msgstr "PTPãƒãƒ¼ãƒˆ" + +#: usr/local/www/interfaces_bridge_edit.php:510 +#: usr/local/www/interfaces_bridge_edit.php:519 +#: usr/local/www/interfaces_bridge_edit.php:520 +#: usr/local/www/interfaces_bridge_edit.php:521 +#: usr/local/www/interfaces_bridge_edit.php:525 +#: usr/local/www/interfaces_bridge_edit.php:525 +msgid "" +"Set the interface as a point-to-point link. This is required for straight " +"transitions to forwarding and should be enabled on a direct link to another " +"RSTP-capable switch." +msgstr "「インターフェースã®è¨­å®šãƒã‚¤ãƒ³ãƒˆãƒ„ーãƒã‚¤ãƒ³ãƒˆãƒªãƒ³ã‚¯ã¨ã—ã¦ã€‚ã“れã¯çœŸã£ç›´ãã«å¿…è¦ã¨ã•れる「転é€ã«é·ç§»ã—ã€åˆ¥ã®ã€Œ RSTP対応スイッãƒã¸ã®ç›´æŽ¥ã®ãƒªãƒ³ã‚¯ã‚’有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:516 +#: usr/local/www/interfaces_bridge_edit.php:525 +#: usr/local/www/interfaces_bridge_edit.php:526 +#: usr/local/www/interfaces_bridge_edit.php:527 +#: usr/local/www/interfaces_bridge_edit.php:531 +#: usr/local/www/interfaces_bridge_edit.php:531 +msgid "Auto PTP ports" +msgstr "オートPTPãƒãƒ¼ãƒˆ" + +#: usr/local/www/interfaces_bridge_edit.php:530 +#: usr/local/www/interfaces_bridge_edit.php:539 +#: usr/local/www/interfaces_bridge_edit.php:540 +#: usr/local/www/interfaces_bridge_edit.php:541 +#: usr/local/www/interfaces_bridge_edit.php:545 +#: usr/local/www/interfaces_bridge_edit.php:545 +msgid "" +"Automatically detect the point-to-point status on interface by checking the " +"full duplex link status. This is the default for interfaces added to the " +"bridge." +msgstr "全二é‡ãƒªãƒ³ã‚¯çŠ¶æ…‹ã€ã‚’自動的ã«ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã®ãƒã‚¤ãƒ³ãƒˆãƒ„ーãƒã‚¤ãƒ³ãƒˆçŠ¶æ…‹ã‚’æ¤œå‡ºã€ ã€‚ã“れã¯ã€ "ブリッジã«è¿½åŠ ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã®ãƒ‡ãƒ•ォルトã§ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:536 +#: usr/local/www/interfaces_bridge_edit.php:545 +#: usr/local/www/interfaces_bridge_edit.php:546 +#: usr/local/www/interfaces_bridge_edit.php:547 +#: usr/local/www/interfaces_bridge_edit.php:551 +#: usr/local/www/interfaces_bridge_edit.php:551 +msgid "" +"The interfaces selected here will be removed from default autoedge status." +msgstr "「ã“ã“ã§é¸æŠžã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§ã¯ã€ãƒ‡ãƒ•ォルトã®autoedge状態ã‹ã‚‰å‰Šé™¤ã•れã¾ã™ã€‚" + +#: usr/local/www/interfaces_bridge_edit.php:540 +#: usr/local/www/interfaces_bridge_edit.php:549 +#: usr/local/www/interfaces_bridge_edit.php:550 +#: usr/local/www/interfaces_bridge_edit.php:551 +#: usr/local/www/interfaces_bridge_edit.php:555 +#: usr/local/www/interfaces_bridge_edit.php:555 +msgid "Sticky ports" +msgstr "スティッキーãƒãƒ¼ãƒˆ" + +#: usr/local/www/interfaces_bridge_edit.php:554 +#: usr/local/www/interfaces_bridge_edit.php:563 +#: usr/local/www/interfaces_bridge_edit.php:564 +#: usr/local/www/interfaces_bridge_edit.php:565 +#: usr/local/www/interfaces_bridge_edit.php:569 +#: usr/local/www/interfaces_bridge_edit.php:569 +msgid "" +"Mark an interface as a "sticky" interface. Dynamically learned address " +"entries are treated as static once entered into the cache. Sticky entries " +"are never aged out of the cache or replaced, even if the address is seen on " +"a different interface." +msgstr "「マークã¨ã—ã¦ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス「スティッキーã€ã‚¤ãƒ³ã‚¿ãƒ•ェースãŒå‹•çš„ã«å­¦ç¿’ã•れãŸã‚¢ãƒ‰ãƒ¬ã‚¹ "ã®ã‚¨ãƒ³ãƒˆãƒªã¯ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ã¨ã—ã¦æ‰±ã‚れã€ä¸€åº¦ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã«å…¥ã£ãŸã€‚スティッキエントリã«ã¯ç•°ãªã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース「アドレスãŒã§è¦‹ã¦ã„ã¦ã‚‚ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‹ã‚‰è€åŒ–ã—ãªã„ã€ã¾ãŸã¯äº¤æ›æ±ºã—ã¦ã‚り〠。" + +#: usr/local/www/interfaces_bridge_edit.php:561 +#: usr/local/www/interfaces_bridge_edit.php:570 +#: usr/local/www/interfaces_bridge_edit.php:571 +#: usr/local/www/interfaces_bridge_edit.php:572 +#: usr/local/www/interfaces_bridge_edit.php:576 +#: usr/local/www/interfaces_bridge_edit.php:576 +msgid "Private ports" +msgstr "プライベートãƒãƒ¼ãƒˆ" + +#: usr/local/www/interfaces_bridge_edit.php:575 +#: usr/local/www/interfaces_bridge_edit.php:584 +#: usr/local/www/interfaces_bridge_edit.php:585 +#: usr/local/www/interfaces_bridge_edit.php:586 +#: usr/local/www/interfaces_bridge_edit.php:590 +#: usr/local/www/interfaces_bridge_edit.php:590 +msgid "" +"Mark an interface as a "private" interface. A private interface does not " +"forward any traffic to any other port that is also a private interface." +msgstr "プライベート "ã¨ã—ã¦ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスマーク〠ã€ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを。プライベート·インタフェースãŒã‚りã¾ã›ã‚“ã€ã¾ãŸã€ãƒ—ライベート·インタフェースã§ã‚ã‚‹ä»–ã®ãƒãƒ¼ãƒˆã«ãƒˆãƒ©ãƒ•ィックを転é€ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_gif.php:64 usr/local/www/interfaces_gif.php:68 +#: usr/local/www/interfaces_gif.php:68 +msgid "" +"This gif TUNNEL cannot be deleted because it is still being used as an " +"interface." +msgstr "インターフェイス「ãれã¯ã¾ã ã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®GIFトンãƒãƒ«ã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/interfaces_gif.php:107 usr/local/www/interfaces_gre.php:108 +#: usr/local/www/interfaces_gre.php:109 usr/local/www/interfaces_gif.php:108 +#: usr/local/www/interfaces_gre.php:113 usr/local/www/interfaces_gif.php:112 +#: usr/local/www/interfaces_gre.php:113 usr/local/www/interfaces_gif.php:112 +msgid "Tunnel to..." +msgstr "トンãƒãƒ«ã«..." + +#: usr/local/www/interfaces_gif.php:123 usr/local/www/interfaces_gif.php:124 +#: usr/local/www/interfaces_gif.php:128 usr/local/www/interfaces_gif.php:128 +msgid "Do you really want to delete this gif tunnel?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®GIFトンãƒãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/interfaces_gif.php:134 usr/local/www/interfaces_gif.php:135 +#: usr/local/www/interfaces_gif.php:139 usr/local/www/interfaces_gif.php:139 +msgid "GIF tunnels are configured here." +msgstr "GIFトンãƒãƒ«ã¯ã“ã“ã§è¨­å®šã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces_gif_edit.php:72 +#: usr/local/www/interfaces_gif_edit.php:75 +#: usr/local/www/interfaces_gif_edit.php:75 +msgid "" +"Parent interface,Local address, Remote tunnel address, Remote tunnel " +"network, Local tunnel address" +msgstr "「親ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒˆãƒ³ãƒãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒˆãƒ³ãƒãƒ«ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒˆãƒ³ãƒãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/interfaces_gif_edit.php:78 +#: usr/local/www/interfaces_gre_edit.php:80 +#: usr/local/www/interfaces_gif_edit.php:81 +#: usr/local/www/interfaces_gre_edit.php:80 +#: usr/local/www/interfaces_gif_edit.php:81 +msgid "The tunnel local and tunnel remote fields must have valid IP addresses." +msgstr "トンãƒãƒ«ã®ãƒ­ãƒ¼ã‚«ãƒ«ãŠã‚ˆã³ãƒªãƒ¢ãƒ¼ãƒˆã®ãƒˆãƒ³ãƒãƒ«ã®ãƒ•ィールドã¯ã€æœ‰åйãªIPアドレスをæŒã£ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces_gif_edit.php:87 +#: usr/local/www/interfaces_gif_edit.php:95 +#: usr/local/www/interfaces_gif_edit.php:95 +#, php-format +msgid "A gif with the network %s is already defined." +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯%sã¨GIFãŒã™ã§ã«å®šç¾©ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces_gif_edit.php:136 +#: usr/local/www/interfaces_gif_edit.php:137 +#: usr/local/www/interfaces_gif_edit.php:138 +#: usr/local/www/interfaces_gif_edit.php:146 +#: usr/local/www/interfaces_gif_edit.php:146 +msgid "GIF configuration" +msgstr "GIFã®è¨­å®š" + +#: usr/local/www/interfaces_gif_edit.php:139 +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:141 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan_edit.php:153 +#: usr/local/www/interfaces_lagg_edit.php:134 +#: usr/local/www/interfaces_qinq_edit.php:288 +#: usr/local/www/interfaces_wireless_edit.php:84 +#: usr/local/www/interfaces_wireless_edit.php:159 +#: usr/local/www/interfaces_gif_edit.php:140 +#: usr/local/www/interfaces_vlan_edit.php:154 +#: usr/local/www/interfaces_qinq_edit.php:289 +#: usr/local/www/interfaces_gif_edit.php:141 +#: usr/local/www/interfaces_lagg_edit.php:135 +#: usr/local/www/interfaces_gre_edit.php:142 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:161 +#: usr/local/www/interfaces_vlan_edit.php:157 +#: usr/local/www/interfaces_lagg_edit.php:148 +#: usr/local/www/interfaces_gif_edit.php:149 +#: usr/local/www/interfaces_qinq_edit.php:292 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:161 +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:142 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan_edit.php:157 +#: usr/local/www/interfaces_lagg_edit.php:148 +#: usr/local/www/interfaces_gif_edit.php:149 +#: usr/local/www/interfaces_qinq_edit.php:292 +msgid "Parent interface" +msgstr "親インターフェース" + +#: usr/local/www/interfaces_gif_edit.php:156 +#: usr/local/www/interfaces_gif_edit.php:157 +#: usr/local/www/interfaces_gif_edit.php:158 +#: usr/local/www/interfaces_gif_edit.php:169 +msgid "" +"The interface here servers as the local address to be used for the gif " +"tunnel." +msgstr "トンãƒãƒ«"GIFã«ä½¿ç”¨ã™ã‚‹ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã—ã¦ã€ã“ã“ã§ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã®ã‚µãƒ¼ãƒãƒ¼ã€ 。" + +#: usr/local/www/interfaces_gif_edit.php:159 +#: usr/local/www/interfaces_gif_edit.php:160 +#: usr/local/www/interfaces_gif_edit.php:161 +#: usr/local/www/interfaces_gif_edit.php:172 +#: usr/local/www/interfaces_gif_edit.php:172 +msgid "gif remote address" +msgstr "GIFリモートアドレス" + +#: usr/local/www/interfaces_gif_edit.php:163 +#: usr/local/www/interfaces_gif_edit.php:164 +#: usr/local/www/interfaces_gif_edit.php:165 +#: usr/local/www/interfaces_gif_edit.php:176 +#: usr/local/www/interfaces_gif_edit.php:176 +msgid "Peer address where encapsulated gif packets will be sent. " +msgstr "カプセル化ã•れãŸGIFパケットãŒé€ä¿¡ã•れるピアアドレス。" + +#: usr/local/www/interfaces_gif_edit.php:166 +#: usr/local/www/interfaces_gif_edit.php:167 +#: usr/local/www/interfaces_gif_edit.php:168 +#: usr/local/www/interfaces_gif_edit.php:179 +#: usr/local/www/interfaces_gif_edit.php:179 +msgid "gif tunnel local address" +msgstr "GIFトンãƒãƒ«ã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/interfaces_gif_edit.php:170 +#: usr/local/www/interfaces_gif_edit.php:171 +#: usr/local/www/interfaces_gif_edit.php:172 +#: usr/local/www/interfaces_gif_edit.php:183 +#: usr/local/www/interfaces_gif_edit.php:183 +msgid "Local gif tunnel endpoint" +msgstr "ローカルGIFトンãƒãƒ«ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆ" + +#: usr/local/www/interfaces_gif_edit.php:173 +#: usr/local/www/interfaces_gif_edit.php:174 +#: usr/local/www/interfaces_gif_edit.php:175 +#: usr/local/www/interfaces_gif_edit.php:186 +#: usr/local/www/interfaces_gif_edit.php:186 +msgid "gif tunnel remote address " +msgstr "GIFトンãƒãƒ«ã®ãƒªãƒ¢ãƒ¼ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/interfaces_gif_edit.php:188 +#: usr/local/www/interfaces_gif_edit.php:189 +#: usr/local/www/interfaces_gif_edit.php:200 +#: usr/local/www/interfaces_gif_edit.php:200 +msgid "" +"Remote gif address endpoint. The subnet part is used for determining the " +"network that is tunnelled." +msgstr "「リモートgif注アドレス·エンドãƒã‚¤ãƒ³ãƒˆã€‚サブãƒãƒƒãƒˆéƒ¨ã‚’決定ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる「トンãƒãƒªãƒ³ã‚°ã•れã¦ã„ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€‚" + +#: usr/local/www/interfaces_gif_edit.php:191 +#: usr/local/www/interfaces_gif_edit.php:192 +#: usr/local/www/interfaces_gif_edit.php:203 +#: usr/local/www/interfaces_gif_edit.php:203 +msgid "Route caching " +msgstr "ルート·キャッシング" + +#: usr/local/www/interfaces_gif_edit.php:195 +#: usr/local/www/interfaces_gif_edit.php:196 +#: usr/local/www/interfaces_gif_edit.php:207 +#: usr/local/www/interfaces_gif_edit.php:207 +msgid "" +"Specify if route caching can be enabled. Be careful with these settings on " +"dynamic networks. " +msgstr "「ルートキャッシュを有効ã«ã§ãã‚‹ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚ã“れらã®è¨­å®šã«ã¯æ³¨æ„ã—ã¦ãã ã•ã„"ダイナミックãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€‚" + +#: usr/local/www/interfaces_gif_edit.php:198 +#: usr/local/www/interfaces_gif_edit.php:199 +#: usr/local/www/interfaces_gif_edit.php:210 +msgid "ECN friendly behaviour" +msgstr "é›»å­è¨¼åˆ¸å–引ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ã‚„ã•ã—ã„行動" + +#: usr/local/www/interfaces_gif_edit.php:203 +#: usr/local/www/interfaces_gif_edit.php:204 +#: usr/local/www/interfaces_gif_edit.php:215 +#: usr/local/www/interfaces_gif_edit.php:215 +msgid "" +"Note that the ECN friendly behavior violates RFC2893. This should be used " +"in mutual agreement with the peer." +msgstr "ピアã¨ã®åˆæ„ã§ã€Œé›»å­è¨¼åˆ¸å–引ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«å„ªã—ã„行動ãŒRFC2893ã«é•åã—ã¦ã„ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã“れを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/interfaces_gre.php:65 usr/local/www/interfaces_gre.php:69 +#: usr/local/www/interfaces_gre.php:69 +msgid "" +"This GRE tunnel cannot be deleted because it is still being used as an " +"interface." +msgstr "インターフェイス「ãれã¯ã¾ã ã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®GREトンãƒãƒ«ã‚’削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/interfaces_gre.php:124 usr/local/www/interfaces_gre.php:125 +#: usr/local/www/interfaces_gre.php:129 usr/local/www/interfaces_gre.php:129 +msgid "Do you really want to delete this GRE tunnel?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®GREトンãƒãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/interfaces_gre.php:133 usr/local/www/interfaces_gre.php:134 +#: usr/local/www/interfaces_gre.php:138 usr/local/www/interfaces_gre.php:138 +msgid "" +"Here you can configure Generic Routing Encapsulation (GRE - RFC 2784) " +"tunnels." +msgstr "トンãƒãƒ« - "ã“ã“ã§ã¯ç·ç§°ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚«ãƒ—セル化( RFC 2784 GRE )を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。" + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Local address" +msgstr "ローカルアドレス" + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Remote tunnel address" +msgstr "リモートトンãƒãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Remote tunnel network" +msgstr "リモートトンãƒãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Local tunnel address" +msgstr "ローカルトンãƒãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/interfaces_gre_edit.php:88 +#: usr/local/www/interfaces_gre_edit.php:88 +#, php-format +msgid "A GRE tunnel with the network %s is already defined." +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯%sã¨GREトンãƒãƒ«ã¯ã™ã§ã«å®šç¾©ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces_gre_edit.php:138 +#: usr/local/www/interfaces_gre_edit.php:139 +#: usr/local/www/interfaces_gre_edit.php:139 +msgid "GRE configuration" +msgstr "GREã®è¨­å®š" + +#: usr/local/www/interfaces_gre_edit.php:158 +#: usr/local/www/interfaces_gre_edit.php:159 +#: usr/local/www/interfaces_gre_edit.php:159 +msgid "" +"The interface here serves as the local address to be used for the GRE tunnel." +msgstr "「ã“ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã¯ã€ GREトンãƒãƒ«ã«ä½¿ç”¨ã™ã‚‹ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_gre_edit.php:161 +#: usr/local/www/interfaces_gre_edit.php:162 +#: usr/local/www/interfaces_gre_edit.php:162 +msgid "GRE remote address" +msgstr "GREã®ãƒªãƒ¢ãƒ¼ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/interfaces_gre_edit.php:165 +#: usr/local/www/interfaces_gre_edit.php:166 +#: usr/local/www/interfaces_gre_edit.php:166 +msgid "Peer address where encapsulated GRE packets will be sent " +msgstr "カプセル化ã•れãŸGREパケットã®é€ä¿¡å…ˆã¨ãªã‚‹ãƒ”アアドレス" + +#: usr/local/www/interfaces_gre_edit.php:168 +#: usr/local/www/interfaces_gre_edit.php:169 +#: usr/local/www/interfaces_gre_edit.php:169 +msgid "GRE tunnel local address " +msgstr "GREトンãƒãƒ«ã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/interfaces_gre_edit.php:172 +#: usr/local/www/interfaces_gre_edit.php:173 +#: usr/local/www/interfaces_gre_edit.php:173 +msgid "Local GRE tunnel endpoint" +msgstr "ローカルã®GREトンãƒãƒ«ã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆ" + +#: usr/local/www/interfaces_gre_edit.php:175 +#: usr/local/www/interfaces_gre_edit.php:176 +#: usr/local/www/interfaces_gre_edit.php:176 +msgid "GRE tunnel remote address " +msgstr "GREトンãƒãƒ«ã®ãƒªãƒ¢ãƒ¼ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/interfaces_gre_edit.php:190 +#: usr/local/www/interfaces_gre_edit.php:189 +#: usr/local/www/interfaces_gre_edit.php:190 +msgid "" +"Remote GRE address endpoint. The subnet part is used for the determining the " +"network that is tunneled." +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ãƒˆãƒ³ãƒãƒªãƒ³ã‚°ã•れる「リモートGREアドレスエンドãƒã‚¤ãƒ³ãƒˆã¯ã€‚サブãƒãƒƒãƒˆéƒ¨ã‚’決定ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる"。" + +#: usr/local/www/interfaces_gre_edit.php:193 +#: usr/local/www/interfaces_gre_edit.php:192 +#: usr/local/www/interfaces_gre_edit.php:193 +msgid "Mobile tunnel" +msgstr "モãƒã‚¤ãƒ«ãƒˆãƒ³ãƒãƒ«" + +#: usr/local/www/interfaces_gre_edit.php:197 +#: usr/local/www/interfaces_gre_edit.php:196 +#: usr/local/www/interfaces_gre_edit.php:197 +msgid "Specify which encapsulation method the tunnel should use. " +msgstr "トンãƒãƒ«ãŒä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚るカプセル化方法を指定ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_gre_edit.php:200 +#: usr/local/www/interfaces_gre_edit.php:199 +#: usr/local/www/interfaces_gre_edit.php:200 +msgid "Route search type" +msgstr "経路探索タイプ" + +#: usr/local/www/interfaces_gre_edit.php:205 +#: usr/local/www/interfaces_gre_edit.php:204 +#: usr/local/www/interfaces_gre_edit.php:205 +msgid "" +"For correct operation, the GRE device needs a route to the destination that " +"is less specific than the one over the tunnel. (Basically, there needs to " +"be a route to the decapsulating host that does not run over the tunnel, as " +"this would be a loop." +msgstr "トンãƒãƒ«ä¸Šã®1よりもå°ã•ã„固有ã§ã‚る「正常ãªå‹•作ã®ãŸã‚ã«ã¯ã€ GREã®ãƒ‡ãƒã‚¤ã‚¹ã¯ã€ãã®ç›®çš„地ã¸ã®ãƒ«ãƒ¼ãƒˆã‚’å¿…è¦ã¨ã—ã¾ã™ã€ 。 (基本的ã«ã€ã“れãŒãƒ«ãƒ¼ãƒ—ã«ãªã‚‹ã€ã¨ã€ãƒˆãƒ³ãƒãƒ«ä¸Šã§å®Ÿè¡Œã•れãªã„カプセル化解除ホストã¸ã®çµŒè·¯ã§ã‚ã‚‹ã“ã¨ã€ã«ã‚ã‚‹å¿…è¦ãŒã‚る。" + +#: usr/local/www/interfaces_gre_edit.php:212 +#: usr/local/www/interfaces_gre_edit.php:211 +#: usr/local/www/interfaces_gre_edit.php:212 +msgid "WCCP version" +msgstr "WCCPãƒãƒ¼ã‚¸ãƒ§ãƒ³" + +#: usr/local/www/interfaces_gre_edit.php:216 +#: usr/local/www/interfaces_gre_edit.php:215 +#: usr/local/www/interfaces_gre_edit.php:216 +msgid "" +"Specify which WCCP encapsulation(version 1 or 2) method the tunnel should use" +msgstr "「ã“れWCCPカプセル化(ãƒãƒ¼ã‚¸ãƒ§ãƒ³1ã¾ãŸã¯2 ï¼‰ã®æ–¹æ³•トンãƒãƒ«ãŒä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã‚’指定" + +#: usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/system_routes.php:117 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/system_authservers.php:422 +#: usr/local/www/system_gateway_groups.php:110 +#: usr/local/www/system_gateways.php:143 +#: usr/local/www/system_groupmanager.php:241 +#: usr/local/www/system_groupmanager_addprivs.php:169 +#: usr/local/www/system_usermanager.php:441 +#: usr/local/www/system_usermanager.php:790 +#: usr/local/www/system_usermanager_addprivs.php:168 +#: usr/local/www/system_usermanager_settings.php:114 +#: usr/local/www/system_usermanager.php:439 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/system_groupmanager_addprivs.php:167 +#: usr/local/www/system_usermanager.php:789 +#: usr/local/www/system_gateway_groups.php:111 +#: usr/local/www/system_authservers.php:427 +#: usr/local/www/system_routes.php:121 +#: usr/local/www/system_authservers.php:434 +#: usr/local/www/system_usermanager_settings.php:116 +#: usr/local/www/system_gateway_groups.php:120 +#: usr/local/www/system_routes.php:136 +#: usr/local/www/system_groupmanager.php:241 +#: usr/local/www/system_usermanager_addprivs.php:168 +#: usr/local/www/system_routes.php:136 usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/system_authservers.php:434 +#: usr/local/www/system_groupmanager_addprivs.php:167 +#: usr/local/www/system_usermanager_settings.php:116 +#: usr/local/www/system_usermanager.php:439 +#: usr/local/www/system_usermanager.php:789 +#: usr/local/www/system_gateways.php:143 +#: usr/local/www/system_gateway_groups.php:120 +msgid "Groups" +msgstr "グループ" + +#: usr/local/www/interfaces_groups.php:127 +#: usr/local/www/system_groupmanager.php:443 +#: usr/local/www/system_groupmanager.php:446 +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/system_groupmanager.php:464 +#: usr/local/www/system_groupmanager.php:464 +#: usr/local/www/interfaces_groups.php:128 +msgid "edit group" +msgstr "編集グループ" + +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/interfaces_groups.php:129 +#: usr/local/www/interfaces_groups.php:129 +msgid "" +"Do you really want to delete this group? All elements that still use it will " +"become invalid (e.g. filter rules)!" +msgstr " (例ãˆã°ãƒ•ィルタルール)ãŒç„¡åйã«ãªã‚‹ã€Œæœ¬å½“ã«ï¼Ÿã¾ã ãれを使用ã™ã‚‹ã™ã¹ã¦ã®è¦ç´ ãŒã—ã¾ã™ã€‚ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を削除ã—ã¾ã™ã‹"ï¼" + +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/interfaces_groups.php:129 +#: usr/local/www/interfaces_groups.php:129 +msgid "delete ifgroupentry" +msgstr "ifgroupentryを削除" + +#: usr/local/www/interfaces_groups.php:140 +#: usr/local/www/interfaces_groups.php:141 +#: usr/local/www/interfaces_groups.php:141 +msgid "add a new group" +msgstr "æ–°ã—ã„グループを追加" + +#: usr/local/www/interfaces_groups.php:148 +#: usr/local/www/interfaces_groups.php:149 +#: usr/local/www/interfaces_groups.php:148 +msgid "" +"Interface Groups allow you to create rules that apply to multiple interfaces " +"without duplicating the rules. If you remove members from an interface " +"group, the group rules no longer apply to that interface." +msgstr "ルールを複製ã™ã‚‹ã“ã¨ãªã「インターフェイスグループã¯ã€è¤‡æ•°ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã«é©ç”¨ã™ã‚‹ãƒ«ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。インターフェイス"グループã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’削除ã™ã‚‹ã¨ã€ã‚°ãƒ«ãƒ¼ãƒ—ルールã¯ã€ã‚‚ã¯ã‚„ãã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã«é©ç”¨ã•れã¾ã›ã‚“。" + +#: usr/local/www/interfaces_groups_edit.php:71 +#: usr/local/www/interfaces_groups_edit.php:72 +#: usr/local/www/interfaces_groups_edit.php:72 +msgid "Group name already exists!" +msgstr "グループåã¯ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ ï¼" + +#: usr/local/www/interfaces_groups_edit.php:74 +#: usr/local/www/interfaces_groups_edit.php:75 +#: usr/local/www/interfaces_groups_edit.php:75 +msgid "Only letters A-Z are allowed as the group name." +msgstr "å”¯ä¸€ã®æ–‡å­—A - Zã¯ã‚°ãƒ«ãƒ¼ãƒ—åã¨ã—ã¦è¨±å¯ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces_groups_edit.php:248 +#: usr/local/www/interfaces_groups_edit.php:249 +#: usr/local/www/interfaces_groups_edit.php:249 +msgid "Interface Groups Edit" +msgstr "インターフェースグループã®ç·¨é›†" + +#: usr/local/www/interfaces_groups_edit.php:251 +#: usr/local/www/status_gateway_groups.php:74 +#: usr/local/www/system_gateway_groups.php:120 +#: usr/local/www/system_gateway_groups_edit.php:158 +#: usr/local/www/system_gateway_groups_edit.php:161 +#: usr/local/www/system_groupmanager.php:117 +#: usr/local/www/system_gateway_groups_edit.php:169 +#: usr/local/www/system_gateway_groups_edit.php:172 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateway_groups_edit.php:231 +#: usr/local/www/system_gateway_groups.php:121 +#: usr/local/www/interfaces_groups_edit.php:252 +#: usr/local/www/status_gateway_groups.php:75 +#: usr/local/www/system_gateway_groups_edit.php:232 +#: usr/local/www/system_gateway_groups_edit.php:235 +#: usr/local/www/system_gateway_groups.php:130 +#: usr/local/www/system_groupmanager.php:117 +#: usr/local/www/interfaces_groups_edit.php:252 +#: usr/local/www/system_gateway_groups_edit.php:232 +#: usr/local/www/system_gateway_groups_edit.php:235 +#: usr/local/www/status_gateway_groups.php:75 +#: usr/local/www/system_gateway_groups.php:130 +msgid "Group Name" +msgstr "グループå" + +#: usr/local/www/interfaces_groups_edit.php:255 +#: usr/local/www/interfaces_groups_edit.php:256 +#: usr/local/www/interfaces_groups_edit.php:256 +msgid "No numbers or spaces are allowed. Only characters in a-zA-Z" +msgstr "å…¨ãæ•°å­—やスペースã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。 - ZA- Zã®ä¸­ã®æ–‡å­—ã®ã¿" + +#: usr/local/www/interfaces_groups_edit.php:269 +#: usr/local/www/interfaces_qinq_edit.php:347 +#: usr/local/www/interfaces_qinq_edit.php:348 +#: usr/local/www/interfaces_groups_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:351 +#: usr/local/www/interfaces_groups_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:351 +msgid "Member (s)" +msgstr "(履歴)" + +#: usr/local/www/firewall_aliases.php:103 +#: usr/local/www/firewall_aliases.php:106 +#: usr/local/www/firewall_aliases.php:107 +#: usr/local/www/firewall_aliases.php:106 +#, php-format +msgid "Cannot delete alias. Currently in use by %s" +msgstr "エイリアスを削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ç¾åœ¨%sã§ä½¿ç”¨ã•れã¦ã„ã‚‹" + +#: usr/local/www/firewall_aliases.php:160 +#: usr/local/www/firewall_aliases.php:163 +#: usr/local/www/firewall_aliases.php:167 +#: usr/local/www/firewall_aliases.php:166 +#: usr/local/www/firewall_aliases.php:166 +msgid "The alias list has been changed." +msgstr "エイリアスリストãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/firewall_aliases.php:166 +#: usr/local/www/services_igmpproxy.php:97 +#: usr/local/www/firewall_aliases.php:169 +#: usr/local/www/firewall_aliases.php:189 +#: usr/local/www/firewall_aliases.php:189 +#: usr/local/www/services_igmpproxy.php:97 +msgid "Values" +msgstr "値" + +#: usr/local/www/firewall_aliases.php:172 +#: usr/local/www/firewall_aliases.php:218 +#: usr/local/www/firewall_aliases.php:175 +#: usr/local/www/firewall_aliases.php:221 +msgid "add a new alias" +msgstr "æ–°ã—ã„エイリアスを追加" + +#: usr/local/www/firewall_aliases.php:204 +#: usr/local/www/firewall_schedule.php:220 +#: usr/local/www/firewall_aliases.php:207 +#: usr/local/www/firewall_schedule.php:220 +msgid "edit alias" +msgstr "編集別å" + +#: usr/local/www/firewall_aliases.php:205 +#: usr/local/www/firewall_aliases.php:208 +#: usr/local/www/firewall_aliases.php:256 +#: usr/local/www/firewall_aliases.php:257 +#: usr/local/www/firewall_aliases.php:258 +#: usr/local/www/firewall_aliases.php:258 +msgid "" +"Do you really want to delete this alias? All elements that still use it will " +"become invalid (e.g. filter rules)!" +msgstr "「ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’削除ã—ã¾ã™ã‹ï¼Ÿã¾ã ãれを使用ã™ã‚‹ã™ã¹ã¦ã®è¦ç´ ãŒã—ã¾ã™" (例ãˆã°ãƒ•ィルタルール)無効ã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/firewall_aliases.php:205 +#: usr/local/www/firewall_schedule.php:221 +#: usr/local/www/firewall_aliases.php:208 +#: usr/local/www/firewall_schedule.php:221 +msgid "delete alias" +msgstr "エイリアスを削除" + +#: usr/local/www/firewall_aliases.php:221 +#: usr/local/www/firewall_aliases.php:224 +#: usr/local/www/firewall_aliases.php:275 +#: usr/local/www/firewall_aliases.php:277 +#: usr/local/www/firewall_aliases.php:278 +#: usr/local/www/firewall_aliases.php:278 +msgid "Bulk import aliases from list" +msgstr "リストã‹ã‚‰ä¸€æ‹¬ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹" + +#: usr/local/www/firewall_aliases.php:229 +#: usr/local/www/firewall_aliases.php:232 +#: usr/local/www/firewall_aliases.php:284 +#: usr/local/www/firewall_aliases.php:287 +#: usr/local/www/firewall_aliases.php:288 +#: usr/local/www/firewall_aliases.php:288 +msgid "" +"Aliases act as placeholders for real hosts, networks or ports. They can be " +"used to minimize the number of changes that have to be made if a host, " +"network or port changes. You can enter the name of an alias instead of the " +"host, network or port in all fields that have a red background. The alias " +"will be resolved according to the list above. If an alias cannot be resolved " +"(e.g. because you deleted it), the corresponding element (e.g. filter/NAT/" +"shaper rule) will be considered invalid and skipped." +msgstr "「エイリアスã¯ã€å®Ÿéš›ã®ãƒ›ã‚¹ãƒˆã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¾ãŸã¯ãƒãƒ¼ãƒˆã®ãƒ—レースホルダã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚彼らãŒã™ã‚‹ã“ã¨ãŒã§ãる「ã‚ãªãŸã®ä»£ã‚りã«åˆ¥åã®åå‰ã‚’入力ã™ã‚‹ã“ã¨ãŒã§ãã€ãƒ›ã‚¹ãƒˆã€ 「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¾ãŸã¯ãƒãƒ¼ãƒˆãŒå¤‰æ›´ã•れãŸå ´åˆã€‚行ã‚ãªã‘れã°ãªã‚‰ãªã„å¤‰æ›´ã®æ•°ã‚’最å°åŒ–ã™ã‚‹ãŸã‚ã«ä½¿ç”¨èµ¤ã„背景をæŒã£ã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ•ィールドã§ã¯ã€Œãƒ›ã‚¹ãƒˆã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¾ãŸã¯ãƒãƒ¼ãƒˆã€‚エイリアスãŒã€Œä¸Šè¨˜ã®ãƒªã‚¹ãƒˆã«å¾“ã£ã¦è§£æ±ºã•れã¾ã™ã€‚エイリアスãŒè§£æ±ºã§ããªã„å ´åˆã¯ã€ã€Œ (ã‚ãªãŸãŒãれを削除ã—ãŸãªã©ãŸã‚) ã€å¯¾å¿œã™ã‚‹è¦ç´ ï¼ˆä¾‹ãˆã°ã€ãƒ•ィルタ/ NAT / 「シェールール)ã¯ã€ç„¡åйã¨ã¿ãªã•れã€ã‚¹ã‚­ãƒƒãƒ—ã•れã¾ã™ã€‚" + +#: usr/local/www/firewall_aliases_edit.php:105 +#: usr/local/www/firewall_aliases_edit.php:107 +#: usr/local/www/firewall_aliases_edit.php:107 +#, php-format +msgid "Sorry, an interface is already named %s." +msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯ã™ã§ã«%s.ã¨ã„ã†åå‰ã§ã™" + +#: usr/local/www/firewall_aliases_edit.php:140 +#: usr/local/www/firewall_aliases_edit.php:142 +#: usr/local/www/firewall_aliases_edit.php:134 +#: usr/local/www/firewall_aliases_edit.php:136 +#: usr/local/www/firewall_aliases_edit.php:134 +#: usr/local/www/firewall_aliases_edit.php:136 +msgid "Reserved word used for alias name." +msgstr "エイリアスåã«ä½¿ç”¨ã™ã‚‹äºˆç´„語。" + +#: usr/local/www/firewall_aliases_edit.php:145 +#: usr/local/www/firewall_aliases_edit.php:139 +#: usr/local/www/firewall_aliases_edit.php:139 +msgid "" +"The alias name must be less than 32 characters long and may only consist of " +"the characters" +msgstr "「エイリアスåã¯ã€é•·ã„32文字未満ã§ãªã‘れã°ãªã‚‰ãšã€å”¯ä¸€ã§æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã€ã®æ–‡å­—" + +#: usr/local/www/firewall_aliases_edit.php:187 +#: usr/local/www/firewall_aliases_edit.php:242 +#: usr/local/www/firewall_aliases_edit.php:188 +#: usr/local/www/firewall_aliases_edit.php:244 +#: usr/local/www/firewall_aliases_edit.php:182 +#: usr/local/www/firewall_aliases_edit.php:182 +msgid "You must provide a valid URL." +msgstr "有効ãªURLを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_aliases_edit.php:190 +#: usr/local/www/firewall_aliases_edit.php:191 +#: usr/local/www/firewall_aliases_edit.php:185 +#: usr/local/www/firewall_aliases_edit.php:185 +msgid "Unable to fetch usable data." +msgstr "使用å¯èƒ½ãªãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_aliases_edit.php:235 +#: usr/local/www/firewall_aliases_edit.php:237 +msgid "You must provide a valid URL. Could not fetch usable data." +msgstr "有効ãªURLを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚使用å¯èƒ½ãªãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/firewall_aliases_edit.php:261 +#: usr/local/www/firewall_aliases_edit.php:264 +#: usr/local/www/firewall_aliases_edit.php:278 +#: usr/local/www/firewall_aliases_edit.php:269 +msgid "is not a valid port or alias." +msgstr "有効ãªãƒãƒ¼ãƒˆã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/firewall_aliases_edit.php:266 +#: usr/local/www/firewall_aliases_edit.php:269 +#: usr/local/www/firewall_aliases_edit.php:283 +#: usr/local/www/firewall_aliases_edit.php:274 +#, php-format +msgid "%1$s is not a valid %2$s alias." +msgstr "ã¯%1$sã¯æœ‰åй%2$sã®åˆ¥åã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/firewall_aliases_edit.php:281 +#: usr/local/www/firewall_aliases_edit.php:284 +#: usr/local/www/firewall_aliases_edit.php:191 +#: usr/local/www/firewall_aliases_edit.php:221 +#: usr/local/www/firewall_aliases_edit.php:303 +#: usr/local/www/firewall_aliases_edit.php:191 +#: usr/local/www/firewall_aliases_edit.php:221 +#: usr/local/www/firewall_aliases_edit.php:289 +#, php-format +msgid "Entry added %s" +msgstr "エントリ追加%s" + +#: usr/local/www/firewall_aliases_edit.php:285 +#: usr/local/www/firewall_aliases_edit.php:288 +#: usr/local/www/firewall_aliases_edit.php:307 +#: usr/local/www/firewall_aliases_edit.php:293 +#, php-format +msgid "" +"The alias(es): %s cannot be nested because they are not of the same type." +msgstr "「エイリアス( ES ) :彼らã¯åŒã˜åž‹ã§ã¯ãªã„ãŸã‚%sを入れå­ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_aliases_edit.php:453 +#: usr/local/www/firewall_aliases_edit.php:605 +#: usr/local/www/firewall_aliases_edit.php:456 +#: usr/local/www/firewall_aliases_edit.php:610 +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:613 +#: usr/local/www/firewall_aliases_edit.php:480 +#: usr/local/www/firewall_aliases_edit.php:644 +#: usr/local/www/firewall_aliases_edit.php:466 +#: usr/local/www/firewall_aliases_edit.php:630 +msgid "Network(s)" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ï¼ˆå˜æ•°ã¾ãŸã¯è¤‡æ•°ï¼‰" + +#: usr/local/www/firewall_aliases_edit.php:454 +#: usr/local/www/services_igmpproxy_edit.php:224 +#: usr/local/www/services_unbound_acls.php:237 +#: usr/local/www/services_igmpproxy_edit.php:226 +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_aliases_edit.php:481 +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/services_igmpproxy_edit.php:226 +msgid "CIDR" +msgstr "CIDR" + +#: usr/local/www/firewall_aliases_edit.php:456 +#: usr/local/www/firewall_aliases_edit.php:604 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/firewall_aliases_edit.php:619 +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:622 +#: usr/local/www/firewall_aliases_edit.php:483 +#: usr/local/www/firewall_aliases_edit.php:643 +#: usr/local/www/firewall_aliases_edit.php:653 +#: usr/local/www/firewall_aliases_edit.php:469 +#: usr/local/www/firewall_aliases_edit.php:629 +#: usr/local/www/firewall_aliases_edit.php:639 +msgid "Host(s)" +msgstr "ãƒ›ã‚¹ãƒˆï¼ˆå˜æ•°ã¾ãŸã¯è¤‡æ•°ï¼‰" + +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/diag_states_summary.php:150 +#: usr/local/www/services_dnsmasq.php:245 +#: usr/local/www/services_dnsmasq.php:312 usr/local/www/vpn_pppoe_edit.php:538 +#: usr/local/www/services_dnsmasq.php:333 +#: usr/local/www/services_unbound.php:281 +#: usr/local/www/services_unbound.php:348 +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/diag_states_summary.php:139 +#: usr/local/www/vpn_pppoe_edit.php:539 usr/local/www/services_dnsmasq.php:246 +#: usr/local/www/services_dnsmasq.php:334 +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_aliases.php:176 +#: usr/local/www/diag_states_summary.php:141 +#: usr/local/www/vpn_pppoe_edit.php:542 usr/local/www/services_dnsmasq.php:271 +#: usr/local/www/services_dnsmasq.php:359 +#: usr/local/www/firewall_aliases.php:174 +#: usr/local/www/firewall_aliases_edit.php:484 +#: usr/local/www/services_dnsmasq.php:284 +#: usr/local/www/services_dnsmasq.php:372 +#: usr/local/www/services_dnsmasq.php:348 +#: usr/local/www/services_dnsmasq.php:436 +#: usr/local/www/diag_states_summary.php:141 +#: usr/local/www/firewall_aliases.php:174 usr/local/www/vpn_pppoe_edit.php:542 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/services_dnsmasq.php:348 +#: usr/local/www/services_dnsmasq.php:436 +msgid "IP" +msgstr "IP" + +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:606 +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:611 +#: usr/local/www/firewall_aliases_edit.php:463 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:485 +#: usr/local/www/firewall_aliases_edit.php:645 +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:631 +msgid "Port(s)" +msgstr "ãƒãƒ¼ãƒˆï¼ˆè¤‡æ•°å¯ï¼‰" + +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/firewall_aliases_edit.php:608 +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/firewall_aliases_edit.php:463 +#: usr/local/www/firewall_aliases_edit.php:613 +#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828 +#: usr/local/www/firewall_aliases_edit.php:465 +#: usr/local/www/firewall_aliases_edit.php:616 +#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759 +#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776 +#: usr/local/www/services_dhcp.php:1075 +#: usr/local/www/firewall_aliases_edit.php:487 +#: usr/local/www/firewall_aliases_edit.php:647 +#: usr/local/www/services_dhcp.php:1075 usr/local/www/services_dhcpv6.php:776 +#: usr/local/www/firewall_aliases_edit.php:473 +#: usr/local/www/firewall_aliases_edit.php:633 +msgid "URL" +msgstr "URLã¯" + +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:466 +#: usr/local/www/firewall_aliases_edit.php:617 +#: usr/local/www/firewall_aliases_edit.php:488 +#: usr/local/www/firewall_aliases_edit.php:648 +#: usr/local/www/firewall_aliases_edit.php:474 +#: usr/local/www/firewall_aliases_edit.php:634 +msgid "URL Table" +msgstr "URLテーブル" + +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_aliases_edit.php:465 +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:489 +#: usr/local/www/firewall_aliases_edit.php:475 +msgid "Update Freq." +msgstr "周波数を更新ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:469 +#: usr/local/www/firewall_aliases_edit.php:491 +#: usr/local/www/firewall_aliases_edit.php:477 +msgid "" +"Networks are specified in CIDR format. Select the CIDR mask that pertains " +"to each entry. /32 specifies a single IPv4 host, /128 specifies a single " +"IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, " +"etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 " +"or /128 for IPv6. You may also enter an IP range such as " +"192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to " +"fill the range." +msgstr "「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¯CIDRå½¢å¼ã§æŒ‡å®šã•れã¦ã„ã¾ã™ã€‚関連ã™ã‚‹CIDRãƒžã‚¹ã‚¯é¸æŠžã€ã®å„エントリã«ã¯ã€‚ / 32ã¯ã€å˜ä¸€ã®IPv4ホストを指定ã—〠/ 128ãªã©ã€ ã€é€šå¸¸ã®IPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’指定ã—ãŸIPv6ホスト〠255.255.255.0 〠/ 64 / 24指定"シングルを指定ホストå( FQDNã®ï¼‰ã‚‚IPv4ã®/ 32マスクを用ã„ã¦ã€æŒ‡å®šã™ã‚‹ã“ã¨ãŒ192.168.1.254ã®ã€Œ IPv6ã®ã‹/ 128 。ã¾ãŸã€ã®ã‚ˆã†ãªIPアドレスã®ç¯„囲を入力ã™ã‚‹ã“ã¨ã€ã¨CIDRãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãƒªã‚¹ãƒˆã¯ã€æ´¾ç”Ÿã•れã¾ã™ã€Œç¯„囲を入力ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_aliases_edit.php:465 +msgid "" +"Enter as many hosts as you would like. Hosts must be specified by their IP " +"address." +msgstr "「ã‚ãªãŸãŒæœ›ã‚“ã§ã„ã‚‹ã»ã©å¤šãã®ãƒ›ã‚¹ãƒˆã‚’入力ã—ã¾ã™ã€‚ホストãŒIPã‚¢ãƒ‰ãƒ¬ã‚¹ã§æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã€‚" + +#: usr/local/www/firewall_aliases_edit.php:466 +#: usr/local/www/firewall_aliases_edit.php:469 +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:493 +#: usr/local/www/firewall_aliases_edit.php:479 +msgid "" +"Enter as many ports as you wish. Port ranges can be expressed by seperating " +"with a colon." +msgstr "コロンã§"ã‚ãªãŸã¯ã€‚ãƒãƒ¼ãƒˆç¯„囲ãŒseperatingã§è¡¨ã™ã“ã¨ãŒã§ãã‚‹ã“ã¨ã‚’願ã†ã¨åŒæ•°ã®ãƒãƒ¼ãƒˆã‚’入力ã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/firewall_aliases_edit.php:472 +#: usr/local/www/firewall_aliases_edit.php:494 +#: usr/local/www/firewall_aliases_edit.php:480 +#, php-format +msgid "" +"Enter as many URLs as you wish. After saving %s will download the URL and " +"import the items into the alias. Use only with small sets of IP addresses " +"(less than 3000)." +msgstr "「ã‚ãªãŸãŒæœ›ã‚€é™ã‚Šå¤šãã®URLを入力ã—ã¦ãã ã•ã„。ä¿å­˜ã—ãŸå¾Œ%sã™ã‚‹URLをダウンロードã—〠「エイリアスã«ã‚¢ã‚¤ãƒ†ãƒ ã‚’インãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ IPアドレスã®å°ã•ãªã‚»ãƒƒãƒˆã€ ( 3000未満)ã§ã®ã¿ä½¿ç”¨ã—ã¦ãã ã•ã„。" + +#: usr/local/www/firewall_aliases_edit.php:468 +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:473 +#: usr/local/www/firewall_aliases_edit.php:495 +#: usr/local/www/firewall_aliases_edit.php:481 +#, php-format +msgid "" +"Enter a single URL containing a large number of IPs and/or Subnets. After " +"saving %s will download the URL and create a table file containing these " +"addresses. This will work with large numbers of addresses (30,000+) or small " +"numbers." +msgstr "%sã‚’ä¿å­˜ã™ã‚‹ã¨ã€URLをダウンロードã—ã€ã“れらをå«ã‚€ãƒ†ãƒ¼ãƒ–ルファイルãŒä½œæˆã•れã¾ã™"ã®å¾Œã«IPアドレスã€ãŠã‚ˆã³/ã¾ãŸã¯ã‚µãƒ–ãƒãƒƒãƒˆã®å¤šæ•°ã‚’å«ã‚€å˜ä¸€ã®URLを入力ã—ã¦ãã ã•ã„。""アドレスã¯ã€ã“れã¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤šæ•°ã®ï¼ˆ30,000 )ã§ä½œæ¥­ã—ãŸã‚Šã€å°ã•ãªã§ã—ょã†ã€æ•°å­—。" + +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:607 +#: usr/local/www/firewall_aliases_edit.php:474 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:476 +#: usr/local/www/firewall_aliases_edit.php:615 +#: usr/local/www/firewall_aliases_edit.php:498 +#: usr/local/www/firewall_aliases_edit.php:646 +#: usr/local/www/firewall_aliases_edit.php:484 +#: usr/local/www/firewall_aliases_edit.php:632 +msgid "OpenVPN Users" +msgstr "OpenVPNã®ãƒ¦ãƒ¼ã‚¶ãƒ¼" + +#: usr/local/www/firewall_aliases_edit.php:472 +#: usr/local/www/firewall_aliases_edit.php:475 +#: usr/local/www/firewall_aliases_edit.php:477 +#: usr/local/www/firewall_aliases_edit.php:499 +#: usr/local/www/firewall_aliases_edit.php:485 +msgid "Enter as many usernames as you wish." +msgstr "ã‚ãªãŸãŒæœ›ã‚€é™ã‚Šå¤šãã®ãƒ¦ãƒ¼ã‚¶åを入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/firewall_aliases_edit.php:573 +#: usr/local/www/firewall_aliases_edit.php:578 +#: usr/local/www/firewall_aliases_edit.php:581 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:598 +msgid "Alias Edit" +msgstr "エイリアスを編集" + +#: usr/local/www/firewall_aliases_edit.php:620 +#: usr/local/www/firewall_aliases_edit.php:625 +#: usr/local/www/firewall_aliases_edit.php:628 +#: usr/local/www/firewall_aliases_edit.php:659 +#: usr/local/www/firewall_aliases_edit.php:645 +msgid "Item information" +msgstr "アイテム情報" + +#: usr/local/www/firewall_aliases_edit.php:665 +#: usr/local/www/services_dnsmasq_edit.php:260 +#: usr/local/www/system_certmanager.php:782 +#: usr/local/www/firewall_aliases_edit.php:670 +#: usr/local/www/services_dnsmasq_edit.php:261 +#: usr/local/www/services_router_advertisements.php:343 +#: usr/local/www/firewall_aliases_edit.php:673 +#: usr/local/www/system_certmanager.php:807 +#: usr/local/www/services_router_advertisements.php:338 +#: usr/local/www/system_certmanager.php:808 +#: usr/local/www/firewall_aliases_edit.php:704 +#: usr/local/www/services_router_advertisements.php:338 +#: usr/local/www/system_certmanager.php:808 +#: usr/local/www/firewall_aliases_edit.php:690 +#: usr/local/www/services_dnsmasq_edit.php:261 +msgid "remove this entry" +msgstr "ã“ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã™ã‚‹" + +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/diag_backup.php:111 usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:111 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:140 usr/local/www/fbegin.inc:128 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/diag_backup.php:188 usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/fbegin.inc:137 usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:165 usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +#: usr/local/www/firewall_nat_edit.php:439 usr/local/www/fbegin.inc:129 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_virtual_ip.php:291 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_virtual_ip.php:291 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/diag_backup.php:188 +#: usr/local/www/firewall_nat_1to1_edit.php:221 usr/local/www/fbegin.inc:129 +#: usr/local/www/firewall_nat_out_edit.php:329 +msgid "NAT" +msgstr "NAT" + +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1.php:93 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_out.php:300 usr/local/www/firewall_nat.php:182 +#: usr/local/www/firewall_nat_npt.php:93 +#: usr/local/www/firewall_nat_out.php:310 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat.php:187 usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat.php:190 usr/local/www/firewall_nat_out.php:317 +#: usr/local/www/firewall_nat.php:190 usr/local/www/firewall_nat_out.php:317 +#: usr/local/www/firewall_nat_npt.php:93 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1.php:93 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +msgid "1:1" +msgstr "åˆå‰1時01分" + +#: usr/local/www/firewall_nat_1to1.php:87 usr/local/www/firewall_nat.php:175 +#: usr/local/www/firewall_nat_npt.php:87 usr/local/www/firewall_nat.php:180 +#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat.php:183 +#: usr/local/www/firewall_nat_npt.php:87 +#: usr/local/www/firewall_nat_1to1.php:87 +msgid "The NAT configuration has been changed" +msgstr "NAT設定ãŒå¤‰æ›´ã•れã¾ã—ãŸ" + +#: usr/local/www/firewall_nat_1to1.php:92 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:299 usr/local/www/firewall_nat.php:160 +#: usr/local/www/firewall_nat.php:181 usr/local/www/firewall_nat_npt.php:92 +#: usr/local/www/firewall_nat_out.php:309 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/firewall_nat_out.php:310 usr/local/www/firewall_nat.php:165 +#: usr/local/www/firewall_nat.php:186 usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_nat_edit.php:439 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_nat_out.php:317 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:316 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:316 +#: usr/local/www/firewall_nat_npt.php:92 +#: usr/local/www/firewall_nat_1to1.php:92 +msgid "Port Forward" +msgstr "ãƒãƒ¼ãƒˆãƒ•ォワード" + +#: usr/local/www/firewall_nat_1to1.php:94 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat_npt.php:94 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_out.php:312 usr/local/www/firewall_nat.php:188 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_nat_out.php:319 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_nat.php:191 usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat.php:191 usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat_npt.php:94 +#: usr/local/www/firewall_nat_1to1.php:94 +#: usr/local/www/firewall_nat_out_edit.php:329 +msgid "Outbound" +msgstr "外国行ãã®" + +#: usr/local/www/firewall_nat_1to1.php:95 +#: usr/local/www/firewall_nat_out.php:302 usr/local/www/firewall_nat.php:184 +#: usr/local/www/firewall_nat_npt.php:78 usr/local/www/firewall_nat_npt.php:95 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/firewall_nat_out.php:312 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:320 +#: usr/local/www/firewall_nat.php:192 usr/local/www/firewall_nat_out.php:319 +#: usr/local/www/firewall_nat.php:192 usr/local/www/firewall_nat_out.php:319 +#: usr/local/www/firewall_nat_npt.php:78 usr/local/www/firewall_nat_npt.php:95 +#: usr/local/www/firewall_nat_1to1.php:95 +#: usr/local/www/firewall_nat_npt_edit.php:144 +msgid "NPt" +msgstr "NPT" + +#: usr/local/www/firewall_nat_1to1.php:105 +#: usr/local/www/firewall_nat_1to1.php:105 +msgid "External IP" +msgstr "外部IP" + +#: usr/local/www/firewall_nat_1to1.php:106 +#: usr/local/www/firewall_nat_1to1_edit.php:328 +#: usr/local/www/status_upnp.php:87 +#: usr/local/www/firewall_nat_1to1_edit.php:335 +#: usr/local/www/firewall_nat_1to1_edit.php:333 +#: usr/local/www/status_upnp.php:88 +#: usr/local/www/firewall_nat_1to1_edit.php:334 +#: usr/local/www/firewall_nat_1to1.php:106 +#: usr/local/www/firewall_nat_1to1_edit.php:334 +#: usr/local/www/status_upnp.php:88 +msgid "Internal IP" +msgstr "内部IP" + +#: usr/local/www/firewall_nat_1to1.php:107 +#: usr/local/www/firewall_nat_1to1.php:107 +msgid "Destination IP" +msgstr "宛先IP" + +#: usr/local/www/firewall_nat_1to1.php:113 +#: usr/local/www/firewall_nat_1to1.php:172 +#: usr/local/www/firewall_nat_npt.php:112 +#: usr/local/www/firewall_nat_npt.php:170 +#: usr/local/www/firewall_nat_npt.php:112 +#: usr/local/www/firewall_nat_npt.php:170 +#: usr/local/www/firewall_nat_1to1.php:113 +#: usr/local/www/firewall_nat_1to1.php:172 +msgid "add rule" +msgstr "ルールを追加" + +#: usr/local/www/firewall_nat_1to1.php:159 +#: usr/local/www/firewall_rules.php:436 usr/local/www/firewall_rules.php:465 +#: usr/local/www/firewall_rules.php:493 usr/local/www/firewall_rules.php:776 +#: usr/local/www/firewall_nat.php:310 usr/local/www/firewall_nat_npt.php:157 +#: usr/local/www/firewall_rules.php:430 usr/local/www/firewall_rules.php:459 +#: usr/local/www/firewall_rules.php:487 usr/local/www/firewall_rules.php:773 +#: usr/local/www/firewall_nat.php:323 usr/local/www/firewall_rules.php:423 +#: usr/local/www/firewall_rules.php:452 usr/local/www/firewall_rules.php:480 +#: usr/local/www/firewall_rules.php:766 usr/local/www/firewall_rules.php:422 +#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479 +#: usr/local/www/firewall_nat.php:326 usr/local/www/firewall_nat.php:326 +#: usr/local/www/firewall_rules.php:422 usr/local/www/firewall_rules.php:451 +#: usr/local/www/firewall_rules.php:479 usr/local/www/firewall_rules.php:766 +#: usr/local/www/firewall_nat_npt.php:157 +#: usr/local/www/firewall_nat_1to1.php:159 +msgid "edit rule" +msgstr "編集è¦å‰‡" + +#: usr/local/www/firewall_nat_1to1.php:160 usr/local/www/services_dhcp.php:923 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/services_dhcpv6.php:836 usr/local/www/services_dhcp.php:961 +#: usr/local/www/services_dhcpv6.php:931 usr/local/www/services_dhcp.php:1165 +#: usr/local/www/services_dhcpv6.php:862 usr/local/www/services_dhcp.php:1189 +#: usr/local/www/services_dhcpv6.php:883 usr/local/www/services_dhcp.php:1209 +#: usr/local/www/services_dhcp.php:1209 usr/local/www/services_dhcpv6.php:883 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/firewall_nat_1to1.php:160 +msgid "Do you really want to delete this mapping?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ãƒžãƒƒãƒ”ングを削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/firewall_nat_1to1.php:160 +#: usr/local/www/firewall_rules.php:779 usr/local/www/firewall_nat.php:313 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/firewall_nat_out.php:450 usr/local/www/firewall_rules.php:776 +#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326 +#: usr/local/www/firewall_rules.php:769 usr/local/www/firewall_nat_out.php:448 +#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:329 +#: usr/local/www/firewall_nat_out.php:454 usr/local/www/firewall_nat.php:329 +#: usr/local/www/firewall_nat_out.php:454 usr/local/www/firewall_rules.php:769 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/firewall_nat_1to1.php:160 +msgid "delete rule" +msgstr "ルールを削除ã™ã‚‹" + +#: usr/local/www/firewall_nat_1to1.php:180 +#: usr/local/www/firewall_nat_1to1.php:180 +msgid "Depending on the way your WAN connection is setup, you may also need a" +msgstr "ã‚ãªãŸã®WAN接続ãŒã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã•れã¦ã„る方法ã«å¿œã˜ã¦ã€ã¾ãŸå¿…è¦ãªå ´åˆãŒã‚りã¾ã™" + +#: usr/local/www/firewall_nat_1to1.php:180 +#: usr/local/www/firewall_nat_1to1.php:180 +msgid "Virtual IP." +msgstr "仮想IP 。" + +#: usr/local/www/firewall_nat_1to1.php:181 +#: usr/local/www/firewall_nat_1to1.php:181 +msgid "" +"If you add a 1:1 NAT entry for any of the interface IPs on this system, it " +"will make this system inaccessible on that IP address. i.e. if you use your " +"WAN IP address, any services on this system (IPsec, OpenVPN server, etc.) " +"using the WAN IP address will no longer function." +msgstr "「ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスIPã®ã„ãšã‚Œã‹ã®1:1ã®NATエントリを追加ã™ã‚‹å ´åˆã¯ã€ 「ãã®IPアドレスã«ã€ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªããªã‚Šã¾ã™ã€‚ã¤ã¾ã‚Šã€ã‚ãªãŸã®ä½¿ç”¨ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã€Œ WAN IPアドレスをã€ã“ã®ã‚·ã‚¹ãƒ†ãƒ ï¼ˆ IPsecã®ã€ OpenVPNã®ã‚µãƒ¼ãƒãªã©ï¼‰ä¸Šã®ä»»æ„ã®ã‚µãƒ¼ãƒ“ス「WAN IPアドレスを使用ã—ã¦æ©Ÿèƒ½ã—ãªããªã‚Šã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_1to1_edit.php:109 +#: usr/local/www/firewall_nat_out_edit.php:125 +#: usr/local/www/firewall_nat_out_edit.php:129 +#: usr/local/www/firewall_nat_out_edit.php:135 +#: usr/local/www/firewall_nat_1to1_edit.php:109 +#: usr/local/www/firewall_nat_out_edit.php:135 +#, php-format +msgid "" +"Invalid characters detected (%s). Please remove invalid characters and save " +"again." +msgstr "ã€Œç„¡åŠ¹ãªæ–‡å­—ãŒï¼ˆ %s )を検出ã—ã¾ã—ãŸã€‚ç„¡åŠ¹ãªæ–‡å­—を削除ã—ã¦ãã ã•ã„ã—ã¦ä¿å­˜ã€ã‚’å†ã³ã€‚" + +#: usr/local/www/firewall_nat_1to1_edit.php:114 +#: usr/local/www/firewall_nat_1to1_edit.php:114 +msgid "External subnet" +msgstr "外部サブãƒãƒƒãƒˆ" + +#: usr/local/www/firewall_nat_1to1_edit.php:117 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:200 +#: usr/local/www/firewall_nat_edit.php:200 +#: usr/local/www/firewall_nat_1to1_edit.php:117 +msgid "Source address" +msgstr "é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/firewall_nat_1to1_edit.php:121 +#: usr/local/www/firewall_nat_edit.php:194 +#: usr/local/www/firewall_nat_edit.php:199 +#: usr/local/www/firewall_nat_edit.php:204 +#: usr/local/www/firewall_nat_edit.php:204 +#: usr/local/www/firewall_nat_1to1_edit.php:121 +msgid "Destination address" +msgstr "宛先アドレス" + +#: usr/local/www/firewall_nat_1to1_edit.php:145 +#: usr/local/www/firewall_nat_1to1_edit.php:152 +#: usr/local/www/firewall_nat_1to1_edit.php:152 +msgid "A valid external subnet must be specified." +msgstr "有効ãªå¤–部ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_1to1_edit.php:149 +#: usr/local/www/firewall_nat_edit.php:232 +#: usr/local/www/firewall_rules_edit.php:356 +#: usr/local/www/firewall_rules_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:156 +#: usr/local/www/firewall_rules_edit.php:385 +#: usr/local/www/firewall_rules_edit.php:389 +#: usr/local/www/firewall_nat_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:384 +#: usr/local/www/firewall_rules_edit.php:388 +#: usr/local/www/firewall_rules_edit.php:387 +#: usr/local/www/firewall_rules_edit.php:391 +#: usr/local/www/firewall_nat_edit.php:244 +#: usr/local/www/firewall_rules_edit.php:393 +#: usr/local/www/firewall_rules_edit.php:397 +#: usr/local/www/firewall_nat_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:393 +#: usr/local/www/firewall_rules_edit.php:397 +#: usr/local/www/firewall_nat_edit.php:249 +#: usr/local/www/firewall_nat_1to1_edit.php:156 +msgid "You must specify single host or alias for alias entries." +msgstr "エイリアスエントリã®å˜ä¸€ã®ãƒ›ã‚¹ãƒˆã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_1to1_edit.php:154 +#: usr/local/www/firewall_nat_1to1_edit.php:161 +#: usr/local/www/firewall_nat_1to1_edit.php:161 +#, php-format +msgid "%s is not a valid internal IP address." +msgstr "%sã¯ã€æœ‰åйãªå†…部IPアドレスã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/firewall_nat_1to1_edit.php:157 +#: usr/local/www/firewall_nat_1to1_edit.php:164 +#: usr/local/www/firewall_nat_1to1_edit.php:164 +msgid "A valid internal bit count must be specified." +msgstr "有効ãªå†…部ビット数を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_1to1_edit.php:164 +#: usr/local/www/firewall_nat_edit.php:245 +#: usr/local/www/firewall_rules_edit.php:373 +#: usr/local/www/firewall_nat_1to1_edit.php:171 +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:252 +#: usr/local/www/firewall_rules_edit.php:401 +#: usr/local/www/firewall_rules_edit.php:404 +#: usr/local/www/firewall_nat_edit.php:257 +#: usr/local/www/firewall_rules_edit.php:410 +#: usr/local/www/firewall_nat_edit.php:262 +#: usr/local/www/firewall_rules_edit.php:410 +#: usr/local/www/firewall_nat_edit.php:262 +#: usr/local/www/firewall_nat_1to1_edit.php:171 +#, php-format +msgid "%s is not a valid destination IP address or alias." +msgstr "%sã¯æœ‰åйãªå®›å…ˆIPアドレスã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/firewall_nat_1to1_edit.php:167 +#: usr/local/www/firewall_nat_edit.php:248 +#: usr/local/www/firewall_nat_out_edit.php:159 +#: usr/local/www/firewall_rules_edit.php:376 +#: usr/local/www/firewall_nat_1to1_edit.php:174 +#: usr/local/www/firewall_nat_out_edit.php:172 +#: usr/local/www/firewall_rules_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:255 +#: usr/local/www/firewall_rules_edit.php:404 +#: usr/local/www/firewall_rules_edit.php:407 +#: usr/local/www/firewall_nat_edit.php:260 +#: usr/local/www/firewall_nat_out_edit.php:176 +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:265 +#: usr/local/www/firewall_nat_out_edit.php:182 +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:265 +#: usr/local/www/firewall_nat_1to1_edit.php:174 +#: usr/local/www/firewall_nat_out_edit.php:182 +msgid "A valid destination bit count must be specified." +msgstr "有効ãªå®›å…ˆãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_1to1_edit.php:270 +#: usr/local/www/firewall_nat_1to1_edit.php:277 +#: usr/local/www/firewall_nat_1to1_edit.php:275 +#: usr/local/www/firewall_nat_1to1_edit.php:275 +msgid "Edit NAT 1:1 entry" +msgstr "編集NATã®åˆå‰1時01分エントリー" + +#: usr/local/www/firewall_nat_1to1_edit.php:273 +#: usr/local/www/firewall_nat_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:679 usr/local/www/interfaces.php:1828 +#: usr/local/www/interfaces_ppps_edit.php:603 +#: usr/local/www/system_usermanager.php:469 +#: usr/local/www/system_usermanager.php:789 +#: usr/local/www/vpn_ipsec_phase1.php:512 +#: usr/local/www/vpn_ipsec_phase2.php:393 +#: usr/local/www/vpn_openvpn_client.php:386 +#: usr/local/www/vpn_openvpn_client.php:860 +#: usr/local/www/vpn_openvpn_csc.php:314 usr/local/www/vpn_openvpn_csc.php:672 +#: usr/local/www/vpn_openvpn_server.php:604 +#: usr/local/www/vpn_openvpn_server.php:1448 +#: usr/local/www/firewall_nat_npt_edit.php:159 +#: usr/local/www/system_routes_edit.php:299 +#: usr/local/www/firewall_nat_1to1_edit.php:280 +#: usr/local/www/firewall_nat_npt_edit.php:164 +#: usr/local/www/firewall_rules_edit.php:712 +#: usr/local/www/system_usermanager.php:467 +#: usr/local/www/system_usermanager.php:787 +#: usr/local/www/vpn_openvpn_server.php:677 +#: usr/local/www/vpn_openvpn_server.php:1590 +#: usr/local/www/vpn_ipsec_phase2.php:419 +#: usr/local/www/firewall_nat_edit.php:467 usr/local/www/interfaces.php:2006 +#: usr/local/www/vpn_openvpn_client.php:391 +#: usr/local/www/vpn_openvpn_client.php:865 +#: usr/local/www/system_routes_edit.php:300 +#: usr/local/www/firewall_nat_1to1_edit.php:278 +#: usr/local/www/firewall_nat_npt_edit.php:163 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/interfaces_ppps_edit.php:604 +#: usr/local/www/vpn_openvpn_csc.php:313 usr/local/www/vpn_openvpn_csc.php:671 +#: usr/local/www/vpn_openvpn_server.php:695 +#: usr/local/www/vpn_openvpn_server.php:1631 +#: usr/local/www/vpn_ipsec_phase2.php:485 +#: usr/local/www/firewall_nat_edit.php:466 usr/local/www/interfaces.php:1994 +#: usr/local/www/vpn_openvpn_client.php:399 +#: usr/local/www/vpn_openvpn_client.php:918 +#: usr/local/www/vpn_ipsec_phase1.php:511 +#: usr/local/www/vpn_openvpn_client.php:417 +#: usr/local/www/vpn_openvpn_client.php:937 +#: usr/local/www/firewall_rules_edit.php:715 +#: usr/local/www/interfaces_ppps_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:461 +#: usr/local/www/vpn_ipsec_phase1.php:532 +#: usr/local/www/vpn_openvpn_server.php:721 +#: usr/local/www/vpn_openvpn_server.php:1683 +#: usr/local/www/vpn_ipsec_phase2.php:507 usr/local/www/interfaces.php:2021 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/firewall_nat_edit.php:473 +#: usr/local/www/system_routes_edit.php:323 usr/local/www/interfaces.php:2067 +#: etc/inc/service-utils.inc:437 usr/local/www/interfaces_ppps_edit.php:608 +#: usr/local/www/firewall_nat_edit.php:474 +#: usr/local/www/system_routes_edit.php:332 +#: usr/local/www/firewall_nat_npt_edit.php:161 +#: usr/local/www/interfaces.php:2056 etc/inc/service-utils.inc:440 +#: usr/local/www/vpn_openvpn_client.php:417 +#: usr/local/www/vpn_openvpn_client.php:937 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/interfaces_ppps_edit.php:608 +#: usr/local/www/vpn_openvpn_csc.php:313 usr/local/www/vpn_openvpn_csc.php:671 +#: usr/local/www/firewall_nat_edit.php:474 +#: usr/local/www/system_routes_edit.php:326 +#: usr/local/www/firewall_nat_npt_edit.php:161 +#: usr/local/www/firewall_nat_1to1_edit.php:278 +#: usr/local/www/vpn_ipsec_phase1.php:532 +#: usr/local/www/system_usermanager.php:467 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/vpn_openvpn_server.php:721 +#: usr/local/www/vpn_openvpn_server.php:1683 +#: usr/local/www/vpn_ipsec_phase2.php:507 usr/local/www/interfaces.php:2056 +#: etc/inc/service-utils.inc:440 +msgid "Disabled" +msgstr "ä½¿ç”¨ç¦æ­¢" + +#: usr/local/www/firewall_nat_1to1_edit.php:276 +#: usr/local/www/firewall_nat_edit.php:463 +#: usr/local/www/firewall_rules_edit.php:682 +#: usr/local/www/firewall_nat_npt_edit.php:162 +#: usr/local/www/firewall_nat_1to1_edit.php:283 +#: usr/local/www/firewall_nat_npt_edit.php:167 +#: usr/local/www/firewall_rules_edit.php:715 +#: usr/local/www/firewall_nat_edit.php:470 +#: usr/local/www/firewall_nat_1to1_edit.php:281 +#: usr/local/www/firewall_nat_npt_edit.php:166 +#: usr/local/www/firewall_nat_edit.php:469 +#: usr/local/www/firewall_rules_edit.php:718 +#: usr/local/www/firewall_nat_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:730 +#: usr/local/www/firewall_nat_edit.php:476 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_npt_edit.php:164 +#: usr/local/www/firewall_rules_edit.php:730 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_npt_edit.php:164 +#: usr/local/www/firewall_nat_1to1_edit.php:281 +msgid "Disable this rule" +msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã™ã‚‹" + +#: usr/local/www/firewall_nat_1to1_edit.php:277 +#: usr/local/www/firewall_nat_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:683 +#: usr/local/www/firewall_nat_npt_edit.php:163 +#: usr/local/www/firewall_nat_1to1_edit.php:284 +#: usr/local/www/firewall_nat_npt_edit.php:168 +#: usr/local/www/firewall_rules_edit.php:716 +#: usr/local/www/firewall_nat_edit.php:471 +#: usr/local/www/firewall_nat_1to1_edit.php:282 +#: usr/local/www/firewall_nat_npt_edit.php:167 +#: usr/local/www/firewall_nat_edit.php:470 +#: usr/local/www/firewall_rules_edit.php:719 +#: usr/local/www/firewall_nat_edit.php:465 +#: usr/local/www/firewall_rules_edit.php:731 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_npt_edit.php:165 +#: usr/local/www/firewall_rules_edit.php:731 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_npt_edit.php:165 +#: usr/local/www/firewall_nat_1to1_edit.php:282 +msgid "Set this option to disable this rule without removing it from the list." +msgstr "リストã‹ã‚‰å‰Šé™¤ã›ãšã«ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_1to1_edit.php:315 +#: usr/local/www/firewall_nat_npt_edit.php:202 +#: usr/local/www/firewall_nat_1to1_edit.php:322 +#: usr/local/www/firewall_nat_npt_edit.php:207 +#: usr/local/www/firewall_nat_1to1_edit.php:320 +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_npt_edit.php:205 +#: usr/local/www/firewall_nat_1to1_edit.php:321 +#: usr/local/www/firewall_nat_npt_edit.php:205 +#: usr/local/www/firewall_nat_1to1_edit.php:321 +msgid "Choose which interface this rule applies to" +msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ãŒé©ç”¨ã•ã‚Œã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ã¾ã™" + +#: usr/local/www/firewall_nat_1to1_edit.php:316 +#: usr/local/www/firewall_nat_npt_edit.php:203 +#: usr/local/www/firewall_nat_1to1_edit.php:323 +#: usr/local/www/firewall_nat_npt_edit.php:208 +#: usr/local/www/firewall_nat_1to1_edit.php:321 +#: usr/local/www/firewall_nat_npt_edit.php:207 +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_1to1_edit.php:322 +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_1to1_edit.php:322 +msgid "Hint: in most cases, you'll want to use WAN here" +msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã“ã“ã§ã€WANを使用ã—ãŸã„ã¨æ€ã†" + +#: usr/local/www/firewall_nat_1to1_edit.php:319 +#: usr/local/www/firewall_nat_1to1_edit.php:326 +#: usr/local/www/firewall_nat_1to1_edit.php:324 +#: usr/local/www/firewall_nat_1to1_edit.php:325 +#: usr/local/www/firewall_nat_1to1_edit.php:325 +msgid "External subnet IP" +msgstr "外部サブãƒãƒƒãƒˆIP" + +#: usr/local/www/firewall_nat_1to1_edit.php:323 +#: usr/local/www/firewall_nat_1to1_edit.php:330 +#: usr/local/www/firewall_nat_1to1_edit.php:328 +#: usr/local/www/firewall_nat_1to1_edit.php:329 +#: usr/local/www/firewall_nat_1to1_edit.php:329 +msgid "" +"Enter the external (usually on a WAN) subnet's starting address for the 1:1 " +"mapping. The subnet mask from the internal address below will be applied to " +"this IP address." +msgstr "マッピング「1:1ã®ã‚µãƒ–ãƒãƒƒãƒˆã®é–‹å§‹ã‚¢ãƒ‰ãƒ¬ã‚¹ï¼ˆé€šå¸¸ã¯WAN上)外部を入力ã—ã¦ãã ã•ã„ "。以下ã«å†…部アドレスã‹ã‚‰ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€ã“ã®IPアドレス "ã«é©ç”¨ã•れる。" + +#: usr/local/www/firewall_nat_1to1_edit.php:324 +#: usr/local/www/firewall_nat_1to1_edit.php:331 +#: usr/local/www/firewall_nat_1to1_edit.php:329 +#: usr/local/www/firewall_nat_1to1_edit.php:330 +#: usr/local/www/firewall_nat_1to1_edit.php:330 +msgid "" +"Hint: this is generally an address owned by the router itself on the " +"selected interface." +msgstr ""ヒント:ã“れã¯ä¸€èˆ¬çš„ã«ãƒ«ãƒ¼ã‚¿è‡ªèº«ãŒæ‰€æœ‰ã™ã‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã‚ã‚‹ã€Œé¸æŠžã•れãŸã‚¤ãƒ³ã‚¿ãƒ•ェース。" + +#: usr/local/www/firewall_nat_1to1_edit.php:331 +#: usr/local/www/firewall_nat_1to1_edit.php:386 +#: usr/local/www/firewall_nat_edit.php:538 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_rules_edit.php:858 +#: usr/local/www/firewall_rules_edit.php:951 +#: usr/local/www/firewall_nat_npt_edit.php:209 +#: usr/local/www/firewall_nat_npt_edit.php:237 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_npt_edit.php:214 +#: usr/local/www/firewall_nat_npt_edit.php:242 +#: usr/local/www/firewall_nat_out_edit.php:514 +#: usr/local/www/firewall_rules_edit.php:893 +#: usr/local/www/firewall_rules_edit.php:986 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_1to1_edit.php:336 +#: usr/local/www/firewall_nat_1to1_edit.php:391 +#: usr/local/www/firewall_nat_npt_edit.php:213 +#: usr/local/www/firewall_nat_npt_edit.php:241 +#: usr/local/www/firewall_nat_edit.php:544 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:896 +#: usr/local/www/firewall_rules_edit.php:995 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_nat_edit.php:628 +#: usr/local/www/firewall_nat_out_edit.php:518 +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:1008 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_nat_out_edit.php:530 +#: usr/local/www/firewall_rules_edit.php:907 +#: usr/local/www/firewall_rules_edit.php:1007 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_nat_npt_edit.php:212 +#: usr/local/www/firewall_nat_npt_edit.php:240 +#: usr/local/www/firewall_nat_1to1_edit.php:337 +#: usr/local/www/firewall_nat_1to1_edit.php:392 +#: usr/local/www/firewall_nat_out_edit.php:531 +#: usr/local/www/firewall_rules_edit.php:907 +#: usr/local/www/firewall_rules_edit.php:1007 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_nat_npt_edit.php:212 +#: usr/local/www/firewall_nat_npt_edit.php:240 +#: usr/local/www/firewall_nat_1to1_edit.php:337 +#: usr/local/www/firewall_nat_1to1_edit.php:392 +#: usr/local/www/firewall_nat_out_edit.php:531 +msgid "not" +msgstr "ã—ãªã„" + +#: usr/local/www/firewall_nat_1to1_edit.php:333 +#: usr/local/www/firewall_nat_1to1_edit.php:388 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/firewall_nat_edit.php:629 +#: usr/local/www/firewall_nat_out_edit.php:502 +#: usr/local/www/firewall_rules_edit.php:860 +#: usr/local/www/firewall_rules_edit.php:953 +#: usr/local/www/firewall_nat_npt_edit.php:211 +#: usr/local/www/firewall_nat_npt_edit.php:239 +#: usr/local/www/firewall_nat_1to1_edit.php:340 +#: usr/local/www/firewall_nat_1to1_edit.php:395 +#: usr/local/www/firewall_nat_npt_edit.php:216 +#: usr/local/www/firewall_nat_npt_edit.php:244 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/firewall_rules_edit.php:895 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:547 +#: usr/local/www/firewall_nat_edit.php:636 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_npt_edit.php:215 +#: usr/local/www/firewall_nat_npt_edit.php:243 +#: usr/local/www/firewall_nat_edit.php:546 +#: usr/local/www/firewall_nat_edit.php:635 +#: usr/local/www/firewall_rules_edit.php:898 +#: usr/local/www/firewall_rules_edit.php:997 +#: usr/local/www/firewall_nat_edit.php:541 +#: usr/local/www/firewall_nat_edit.php:630 +#: usr/local/www/firewall_nat_out_edit.php:519 +#: usr/local/www/firewall_rules_edit.php:910 +#: usr/local/www/firewall_rules_edit.php:1010 +#: usr/local/www/firewall_nat_edit.php:553 +#: usr/local/www/firewall_nat_edit.php:642 +#: usr/local/www/firewall_nat_out_edit.php:531 +#: usr/local/www/firewall_rules_edit.php:909 +#: usr/local/www/firewall_rules_edit.php:1009 +#: usr/local/www/firewall_nat_edit.php:554 +#: usr/local/www/firewall_nat_edit.php:643 +#: usr/local/www/firewall_nat_npt_edit.php:214 +#: usr/local/www/firewall_nat_npt_edit.php:242 +#: usr/local/www/firewall_nat_1to1_edit.php:339 +#: usr/local/www/firewall_nat_1to1_edit.php:394 +#: usr/local/www/firewall_nat_out_edit.php:532 +#: usr/local/www/firewall_rules_edit.php:909 +#: usr/local/www/firewall_rules_edit.php:1009 +#: usr/local/www/firewall_nat_edit.php:554 +#: usr/local/www/firewall_nat_edit.php:643 +#: usr/local/www/firewall_nat_npt_edit.php:214 +#: usr/local/www/firewall_nat_npt_edit.php:242 +#: usr/local/www/firewall_nat_1to1_edit.php:339 +#: usr/local/www/firewall_nat_1to1_edit.php:394 +#: usr/local/www/firewall_nat_out_edit.php:532 +msgid "Use this option to invert the sense of the match." +msgstr "マッãƒã®æ„味をå転ã•ã›ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを使用ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_1to1_edit.php:343 +#: usr/local/www/firewall_nat_1to1_edit.php:398 +#: usr/local/www/firewall_nat_edit.php:550 +#: usr/local/www/firewall_nat_edit.php:597 +#: usr/local/www/firewall_nat_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:639 +#: usr/local/www/firewall_nat_out_edit.php:475 +#: usr/local/www/firewall_nat_out_edit.php:509 +#: usr/local/www/firewall_nat_out_edit.php:569 +#: usr/local/www/firewall_rules.php:128 +#: usr/local/www/firewall_rules_edit.php:827 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules_edit.php:921 +#: usr/local/www/firewall_rules_edit.php:934 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:1013 +#: usr/local/www/firewall_rules_edit.php:1026 +#: usr/local/www/firewall_rules_edit.php:1090 +#: usr/local/www/services_captiveportal_ip.php:175 +#: usr/local/www/services_captiveportal_ip.php:182 +#: usr/local/www/services_captiveportal_hostname.php:176 +#: usr/local/www/services_captiveportal_hostname.php:183 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/firewall_nat_out_edit.php:488 +#: usr/local/www/firewall_nat_out_edit.php:522 +#: usr/local/www/firewall_nat_out_edit.php:582 +#: usr/local/www/firewall_rules_edit.php:862 +#: usr/local/www/firewall_rules_edit.php:905 +#: usr/local/www/firewall_rules_edit.php:956 +#: usr/local/www/firewall_rules_edit.php:969 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:998 +#: usr/local/www/firewall_rules_edit.php:1048 +#: usr/local/www/firewall_rules_edit.php:1061 +#: usr/local/www/firewall_rules_edit.php:1125 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:604 +#: usr/local/www/firewall_nat_edit.php:617 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_nat_1to1_edit.php:348 +#: usr/local/www/firewall_nat_1to1_edit.php:403 +#: usr/local/www/services_captiveportal_ip.php:173 +#: usr/local/www/services_captiveportal_ip.php:180 +#: usr/local/www/services_captiveportal_hostname.php:174 +#: usr/local/www/services_captiveportal_hostname.php:181 +#: usr/local/www/firewall_rules.php:126 +#: usr/local/www/firewall_nat_edit.php:556 +#: usr/local/www/firewall_nat_edit.php:603 +#: usr/local/www/firewall_nat_edit.php:616 +#: usr/local/www/firewall_nat_edit.php:645 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/firewall_rules_edit.php:978 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1007 +#: usr/local/www/firewall_rules_edit.php:1063 +#: usr/local/www/firewall_rules_edit.php:1076 +#: usr/local/www/firewall_rules_edit.php:1140 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:598 +#: usr/local/www/firewall_nat_edit.php:611 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:526 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:920 +#: usr/local/www/firewall_rules_edit.php:991 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1020 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_rules_edit.php:1153 +#: usr/local/www/firewall_nat_edit.php:563 +#: usr/local/www/firewall_nat_edit.php:623 +#: usr/local/www/firewall_nat_edit.php:652 +#: usr/local/www/firewall_nat_out_edit.php:504 +#: usr/local/www/firewall_nat_out_edit.php:538 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules_edit.php:919 +#: usr/local/www/firewall_rules_edit.php:977 +#: usr/local/www/firewall_rules_edit.php:990 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1019 +#: usr/local/www/firewall_rules_edit.php:1075 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:624 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/firewall_nat_1to1_edit.php:349 +#: usr/local/www/firewall_nat_1to1_edit.php:404 +#: usr/local/www/firewall_nat_out_edit.php:539 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules_edit.php:919 +#: usr/local/www/firewall_rules_edit.php:977 +#: usr/local/www/firewall_rules_edit.php:990 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1019 +#: usr/local/www/firewall_rules_edit.php:1075 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/services_captiveportal_ip.php:173 +#: usr/local/www/services_captiveportal_ip.php:180 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:611 +#: usr/local/www/firewall_nat_edit.php:624 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/services_captiveportal_hostname.php:174 +#: usr/local/www/services_captiveportal_hostname.php:181 +#: usr/local/www/firewall_rules.php:126 +#: usr/local/www/firewall_nat_1to1_edit.php:349 +#: usr/local/www/firewall_nat_1to1_edit.php:404 +#: usr/local/www/firewall_nat_out_edit.php:504 +#: usr/local/www/firewall_nat_out_edit.php:539 +msgid "any" +msgstr "ä»»æ„ã®" + +#: usr/local/www/firewall_nat_1to1_edit.php:344 +#: usr/local/www/firewall_nat_1to1_edit.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:349 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +msgid "Single host" +msgstr "å˜ä¸€å®¿ä¸»" + +#: usr/local/www/firewall_nat_1to1_edit.php:347 +#: usr/local/www/firewall_nat_1to1_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:554 +#: usr/local/www/firewall_nat_edit.php:643 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules_edit.php:967 +#: usr/local/www/firewall_nat_1to1_edit.php:354 +#: usr/local/www/firewall_nat_1to1_edit.php:409 +#: usr/local/www/firewall_rules_edit.php:909 +#: usr/local/www/firewall_rules_edit.php:1002 +#: usr/local/www/firewall_nat_edit.php:561 +#: usr/local/www/firewall_nat_edit.php:650 +#: usr/local/www/firewall_nat_1to1_edit.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:407 +#: usr/local/www/firewall_nat_edit.php:560 +#: usr/local/www/firewall_nat_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:918 +#: usr/local/www/firewall_rules_edit.php:1017 +#: usr/local/www/firewall_nat_edit.php:555 +#: usr/local/www/firewall_nat_edit.php:644 +#: usr/local/www/firewall_rules_edit.php:930 +#: usr/local/www/firewall_rules_edit.php:1030 +#: usr/local/www/firewall_nat_edit.php:567 +#: usr/local/www/firewall_nat_edit.php:656 +#: usr/local/www/firewall_rules_edit.php:929 +#: usr/local/www/firewall_rules_edit.php:1029 +#: usr/local/www/firewall_nat_edit.php:568 +#: usr/local/www/firewall_nat_edit.php:657 +#: usr/local/www/firewall_nat_1to1_edit.php:353 +#: usr/local/www/firewall_nat_1to1_edit.php:408 +#: usr/local/www/firewall_rules_edit.php:929 +#: usr/local/www/firewall_rules_edit.php:1029 +#: usr/local/www/firewall_nat_edit.php:568 +#: usr/local/www/firewall_nat_edit.php:657 +#: usr/local/www/firewall_nat_1to1_edit.php:353 +#: usr/local/www/firewall_nat_1to1_edit.php:408 +msgid "PPTP clients" +msgstr "PPTPクライアント" + +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:970 +#: usr/local/www/firewall_nat_1to1_edit.php:357 +#: usr/local/www/firewall_nat_1to1_edit.php:412 +#: usr/local/www/firewall_rules_edit.php:912 +#: usr/local/www/firewall_rules_edit.php:1005 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/firewall_nat_1to1_edit.php:355 +#: usr/local/www/firewall_nat_1to1_edit.php:410 +#: usr/local/www/firewall_nat_edit.php:563 +#: usr/local/www/firewall_nat_edit.php:652 +#: usr/local/www/firewall_rules_edit.php:921 +#: usr/local/www/firewall_rules_edit.php:1020 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_rules_edit.php:933 +#: usr/local/www/firewall_rules_edit.php:1033 +#: usr/local/www/firewall_nat_edit.php:570 +#: usr/local/www/firewall_nat_edit.php:659 +#: usr/local/www/firewall_rules_edit.php:932 +#: usr/local/www/firewall_rules_edit.php:1032 +#: usr/local/www/firewall_nat_edit.php:571 +#: usr/local/www/firewall_nat_edit.php:660 +#: usr/local/www/firewall_nat_1to1_edit.php:356 +#: usr/local/www/firewall_nat_1to1_edit.php:411 +#: usr/local/www/firewall_rules_edit.php:932 +#: usr/local/www/firewall_rules_edit.php:1032 +#: usr/local/www/firewall_nat_edit.php:571 +#: usr/local/www/firewall_nat_edit.php:660 +#: usr/local/www/firewall_nat_1to1_edit.php:356 +#: usr/local/www/firewall_nat_1to1_edit.php:411 +msgid "PPPoE clients" +msgstr "PPPoEクライアント" + +#: usr/local/www/firewall_nat_1to1_edit.php:353 +#: usr/local/www/firewall_nat_1to1_edit.php:408 +#: usr/local/www/firewall_nat_edit.php:560 +#: usr/local/www/firewall_nat_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:973 +#: usr/local/www/firewall_nat_1to1_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:415 +#: usr/local/www/firewall_rules_edit.php:915 +#: usr/local/www/firewall_rules_edit.php:1008 +#: usr/local/www/firewall_nat_edit.php:567 +#: usr/local/www/firewall_nat_edit.php:656 +#: usr/local/www/firewall_nat_1to1_edit.php:358 +#: usr/local/www/firewall_nat_1to1_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 +#: usr/local/www/firewall_rules_edit.php:924 +#: usr/local/www/firewall_rules_edit.php:1023 +#: usr/local/www/firewall_nat_edit.php:561 +#: usr/local/www/firewall_nat_edit.php:650 +#: usr/local/www/firewall_rules_edit.php:936 +#: usr/local/www/firewall_rules_edit.php:1036 +#: usr/local/www/firewall_nat_edit.php:573 +#: usr/local/www/firewall_nat_edit.php:662 +#: usr/local/www/firewall_rules_edit.php:935 +#: usr/local/www/firewall_rules_edit.php:1035 +#: usr/local/www/firewall_nat_edit.php:574 +#: usr/local/www/firewall_nat_edit.php:663 +#: usr/local/www/firewall_nat_1to1_edit.php:359 +#: usr/local/www/firewall_nat_1to1_edit.php:414 +#: usr/local/www/firewall_rules_edit.php:935 +#: usr/local/www/firewall_rules_edit.php:1035 +#: usr/local/www/firewall_nat_edit.php:574 +#: usr/local/www/firewall_nat_edit.php:663 +#: usr/local/www/firewall_nat_1to1_edit.php:359 +#: usr/local/www/firewall_nat_1to1_edit.php:414 +msgid "L2TP clients" +msgstr "L2TPクライアント" + +#: usr/local/www/firewall_nat_1to1_edit.php:358 +#: usr/local/www/firewall_nat_1to1_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_rules_edit.php:978 +#: usr/local/www/firewall_nat_1to1_edit.php:365 +#: usr/local/www/firewall_nat_1to1_edit.php:420 +#: usr/local/www/firewall_rules_edit.php:1013 +#: usr/local/www/firewall_nat_edit.php:572 +#: usr/local/www/firewall_nat_edit.php:661 +#: usr/local/www/firewall_nat_1to1_edit.php:363 +#: usr/local/www/firewall_nat_1to1_edit.php:418 +#: usr/local/www/firewall_nat_edit.php:571 +#: usr/local/www/firewall_nat_edit.php:660 +#: usr/local/www/firewall_rules_edit.php:1028 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 +#: usr/local/www/firewall_rules_edit.php:1041 +#: usr/local/www/firewall_nat_edit.php:578 +#: usr/local/www/firewall_nat_edit.php:667 +#: usr/local/www/firewall_rules_edit.php:1040 +#: usr/local/www/firewall_nat_edit.php:579 +#: usr/local/www/firewall_nat_edit.php:668 +#: usr/local/www/firewall_nat_1to1_edit.php:364 +#: usr/local/www/firewall_nat_1to1_edit.php:419 +#: usr/local/www/firewall_rules_edit.php:1040 +#: usr/local/www/firewall_nat_edit.php:579 +#: usr/local/www/firewall_nat_edit.php:668 +#: usr/local/www/firewall_nat_1to1_edit.php:364 +#: usr/local/www/firewall_nat_1to1_edit.php:419 +msgid "subnet" +msgstr "サブãƒãƒƒãƒˆ" + +#: usr/local/www/firewall_nat_1to1_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:415 +#: usr/local/www/firewall_nat_edit.php:567 +#: usr/local/www/firewall_nat_edit.php:656 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules_edit.php:980 +#: usr/local/www/firewall_nat_1to1_edit.php:367 +#: usr/local/www/firewall_nat_1to1_edit.php:422 +#: usr/local/www/firewall_rules_edit.php:922 +#: usr/local/www/firewall_rules_edit.php:1015 +#: usr/local/www/firewall_nat_edit.php:574 +#: usr/local/www/firewall_nat_edit.php:663 +#: usr/local/www/firewall_nat_1to1_edit.php:365 +#: usr/local/www/firewall_nat_1to1_edit.php:420 +#: usr/local/www/firewall_nat_edit.php:573 +#: usr/local/www/firewall_nat_edit.php:662 +#: usr/local/www/firewall_rules_edit.php:931 +#: usr/local/www/firewall_rules_edit.php:1030 +#: usr/local/www/firewall_nat_edit.php:568 +#: usr/local/www/firewall_nat_edit.php:657 +#: usr/local/www/firewall_rules_edit.php:943 +#: usr/local/www/firewall_rules_edit.php:1043 +#: usr/local/www/firewall_nat_edit.php:580 +#: usr/local/www/firewall_nat_edit.php:669 +#: usr/local/www/firewall_rules_edit.php:942 +#: usr/local/www/firewall_rules_edit.php:1042 +#: usr/local/www/firewall_nat_edit.php:581 +#: usr/local/www/firewall_nat_edit.php:670 +#: usr/local/www/firewall_nat_1to1_edit.php:366 +#: usr/local/www/firewall_nat_1to1_edit.php:421 +#: usr/local/www/firewall_rules_edit.php:942 +#: usr/local/www/firewall_rules_edit.php:1042 +#: usr/local/www/firewall_nat_edit.php:581 +#: usr/local/www/firewall_nat_edit.php:670 +#: usr/local/www/firewall_nat_1to1_edit.php:366 +#: usr/local/www/firewall_nat_1to1_edit.php:421 +msgid "address" +msgstr "アドレス" + +#: usr/local/www/firewall_nat_1to1_edit.php:379 +#: usr/local/www/firewall_nat_1to1_edit.php:386 +#: usr/local/www/firewall_nat_1to1_edit.php:384 +#: usr/local/www/firewall_nat_1to1_edit.php:385 +#: usr/local/www/firewall_nat_1to1_edit.php:385 +msgid "" +"Enter the internal (LAN) subnet for the 1:1 mapping. The subnet size " +"specified for the internal subnet will be applied to the external subnet." +msgstr "「 1対1ã®ãƒžãƒƒãƒ”ングã®ãŸã‚ã«ã€å†…部( LAN)ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’入力ã—ã¾ã™ã€‚サブãƒãƒƒãƒˆã‚µã‚¤ã‚ºã€Œå†…部サブãƒãƒƒãƒˆã«æŒ‡å®šã•れã€å¤–部ã®ã‚µãƒ–ãƒãƒƒãƒˆã«é©ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_1to1_edit.php:399 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_nat_1to1_edit.php:406 +#: usr/local/www/firewall_rules_edit.php:906 +#: usr/local/www/firewall_rules_edit.php:999 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_nat_1to1_edit.php:404 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_rules_edit.php:915 +#: usr/local/www/firewall_rules_edit.php:1014 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_rules_edit.php:927 +#: usr/local/www/firewall_rules_edit.php:1027 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/firewall_rules_edit.php:926 +#: usr/local/www/firewall_rules_edit.php:1026 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/firewall_rules_edit.php:926 +#: usr/local/www/firewall_rules_edit.php:1026 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +msgid "Single host or alias" +msgstr "å˜ä¸€ã®ãƒ›ã‚¹ãƒˆã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹" + +#: usr/local/www/firewall_nat_1to1_edit.php:436 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +#: usr/local/www/firewall_nat_1to1_edit.php:441 +#: usr/local/www/firewall_nat_1to1_edit.php:442 +#: usr/local/www/firewall_nat_1to1_edit.php:442 +msgid "" +"The 1:1 mapping will only be used for connections to or from the specified " +"destination." +msgstr "目的地「 1対1ã®ãƒžãƒƒãƒ”ングã¯ã€æŒ‡å®šã™ã‚‹ã‹ã€ã‹ã‚‰ã®æŽ¥ç¶šã«ä½¿ç”¨ã•れã¾ã™ã€ 。" + +#: usr/local/www/firewall_nat_1to1_edit.php:437 +#: usr/local/www/firewall_nat_1to1_edit.php:444 +#: usr/local/www/firewall_nat_1to1_edit.php:442 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +msgid "Hint: this is usually 'any'." +msgstr "ヒント:ã“れã¯é€šå¸¸ã€ 「任æ„ã®ã€ã§ã‚る。" + +#: usr/local/www/firewall_nat_1to1_edit.php:447 +#: usr/local/www/firewall_nat_edit.php:783 +#: usr/local/www/firewall_nat_1to1_edit.php:454 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/firewall_nat_1to1_edit.php:452 +#: usr/local/www/firewall_nat_edit.php:789 +#: usr/local/www/firewall_nat_edit.php:784 +#: usr/local/www/firewall_nat_edit.php:796 +#: usr/local/www/firewall_nat_edit.php:797 +#: usr/local/www/firewall_nat_edit.php:797 +#: usr/local/www/firewall_nat_1to1_edit.php:454 +msgid "NAT reflection" +msgstr "NATã®åå°„" + +#: usr/local/www/firewall_nat_1to1_edit.php:450 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/firewall_nat_1to1_edit.php:457 +#: usr/local/www/firewall_nat_1to1_edit.php:455 +#: usr/local/www/firewall_nat_1to1_edit.php:457 +msgid "use system default" +msgstr "システムã®ãƒ‡ãƒ•ォルトを使用" + +#: usr/local/www/firewall_nat_1to1_edit.php:451 +#: usr/local/www/firewall_nat_edit.php:787 +#: usr/local/www/firewall_nat_1to1_edit.php:458 +#: usr/local/www/firewall_nat_1to1_edit.php:456 +#: usr/local/www/firewall_nat_1to1_edit.php:458 +msgid "enable" +msgstr "有効ã«ã™ã‚‹" + +#: usr/local/www/firewall_nat_1to1_edit.php:452 +#: usr/local/www/firewall_nat_edit.php:788 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_1to1_edit.php:457 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +msgid "disable" +msgstr "無効ã«ã™ã‚‹" + +#: usr/local/www/firewall_nat_edit.php:109 +#: usr/local/www/firewall_nat_edit.php:114 +#: usr/local/www/firewall_nat_edit.php:119 +#: usr/local/www/firewall_nat_edit.php:119 +#, php-format +msgid "" +"Invalid characters detected %s. Please remove invalid characters and save " +"again." +msgstr "å†ã³"ç„¡åŠ¹ãªæ–‡å­—ãŒ%s.ã«ç„¡åŠ¹ãªæ–‡å­—を削除ã—ã¦ä¿å­˜ã—ã¦ãã ã•ã„æ¤œå‡ºã•れãŸã€Œ 。" + +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:192 +msgid "Destination port from" +msgstr "ã‹ã‚‰ã®å®›å…ˆãƒãƒ¼ãƒˆ" + +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:192 +msgid "Destination port to" +msgstr "宛先ãƒãƒ¼ãƒˆã«" + +#: usr/local/www/firewall_nat_edit.php:198 +#: usr/local/www/firewall_nat_edit.php:740 +#: usr/local/www/firewall_nat_edit.php:747 +#: usr/local/www/firewall_nat_edit.php:746 +#: usr/local/www/firewall_nat_edit.php:203 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/firewall_nat_edit.php:208 +#: usr/local/www/firewall_nat_edit.php:753 +#: usr/local/www/firewall_nat_edit.php:754 +#: usr/local/www/firewall_nat_edit.php:208 +#: usr/local/www/firewall_nat_edit.php:754 +msgid "Redirect target IP" +msgstr "ターゲットIPã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ" + +#: usr/local/www/firewall_nat_edit.php:213 +#: usr/local/www/firewall_nat_edit.php:220 +#: usr/local/www/firewall_nat_edit.php:225 +#: usr/local/www/firewall_nat_edit.php:230 +#: usr/local/www/firewall_nat_edit.php:230 +#, php-format +msgid ""%s" is not a valid redirect target IP address or host alias." +msgstr "「 %s "ã¯æœ‰åйãªãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/firewall_nat_edit.php:217 +#: usr/local/www/firewall_rules_edit.php:325 +#: usr/local/www/firewall_rules_edit.php:349 +#: usr/local/www/firewall_nat_edit.php:224 +#: usr/local/www/firewall_rules_edit.php:348 +#: usr/local/www/firewall_rules_edit.php:351 +#: usr/local/www/firewall_nat_edit.php:229 +#: usr/local/www/firewall_rules_edit.php:357 +#: usr/local/www/firewall_nat_edit.php:234 +#: usr/local/www/firewall_rules_edit.php:357 +#: usr/local/www/firewall_nat_edit.php:234 +#, php-format +msgid "" +"%s is not a valid start source port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "「 %sã¯æœ‰åйãªé–‹å§‹é€ä¿¡å…ƒãƒãƒ¼ãƒˆã§ã¯ã‚りã¾ã›ã‚“。ã“れã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。" + +#: usr/local/www/firewall_nat_edit.php:219 +#: usr/local/www/firewall_nat_edit.php:226 +#: usr/local/www/firewall_nat_edit.php:231 +#: usr/local/www/firewall_nat_edit.php:236 +#: usr/local/www/firewall_nat_edit.php:236 +#, php-format +msgid "" +"%s is not a valid end source port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "「 %sã¯æœ‰åйãªçµ‚了ã®é€ä¿¡å…ƒãƒãƒ¼ãƒˆã§ã¯ã‚りã¾ã›ã‚“。ã“れã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。" + +#: usr/local/www/firewall_nat_edit.php:221 +#: usr/local/www/firewall_rules_edit.php:329 +#: usr/local/www/firewall_rules_edit.php:353 +#: usr/local/www/firewall_nat_edit.php:228 +#: usr/local/www/firewall_rules_edit.php:352 +#: usr/local/www/firewall_rules_edit.php:355 +#: usr/local/www/firewall_nat_edit.php:233 +#: usr/local/www/firewall_rules_edit.php:361 +#: usr/local/www/firewall_nat_edit.php:238 +#: usr/local/www/firewall_rules_edit.php:361 +#: usr/local/www/firewall_nat_edit.php:238 +#, php-format +msgid "" +"%s is not a valid start destination port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "「 %sã¯æœ‰åйãªé–‹å§‹å®›å…ˆãƒãƒ¼ãƒˆã§ã¯ã‚りã¾ã›ã‚“。ã“れã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。" + +#: usr/local/www/firewall_nat_edit.php:223 +#: usr/local/www/firewall_rules_edit.php:331 +#: usr/local/www/firewall_rules_edit.php:355 +#: usr/local/www/firewall_nat_edit.php:230 +#: usr/local/www/firewall_rules_edit.php:354 +#: usr/local/www/firewall_rules_edit.php:357 +#: usr/local/www/firewall_nat_edit.php:235 +#: usr/local/www/firewall_rules_edit.php:363 +#: usr/local/www/firewall_nat_edit.php:240 +#: usr/local/www/firewall_rules_edit.php:363 +#: usr/local/www/firewall_nat_edit.php:240 +#, php-format +msgid "" +"%s is not a valid end destination port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "「 %sã¯æœ‰åйãªã‚¨ãƒ³ãƒ‰å®›å…ˆãƒãƒ¼ãƒˆã§ã¯ã‚りã¾ã›ã‚“。ã“れã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。" + +#: usr/local/www/firewall_nat_edit.php:226 +#, php-format +msgid "" +"%s is not a valid local port. It must be a port alias or integer between 1 " +"and 65535." +msgstr "「 %sã¯æœ‰åйãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒ¼ãƒˆã§ã¯ã‚りã¾ã›ã‚“。ã“れã¯ã€ 1é–“ã®ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã€ã¨65535 。" + +#: usr/local/www/firewall_nat_edit.php:237 +#: usr/local/www/firewall_rules_edit.php:365 +#: usr/local/www/firewall_rules_edit.php:394 +#: usr/local/www/firewall_nat_edit.php:244 +#: usr/local/www/firewall_rules_edit.php:393 +#: usr/local/www/firewall_rules_edit.php:396 +#: usr/local/www/firewall_nat_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:254 +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:254 +#, php-format +msgid "%s is not a valid source IP address or alias." +msgstr "%sã¯ã€æœ‰åйãªé€ä¿¡å…ƒIPアドレスã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/firewall_nat_edit.php:240 +#: usr/local/www/firewall_nat_out_edit.php:151 +#: usr/local/www/firewall_rules_edit.php:368 +#: usr/local/www/firewall_nat_out_edit.php:164 +#: usr/local/www/firewall_rules_edit.php:397 +#: usr/local/www/firewall_nat_edit.php:247 +#: usr/local/www/firewall_rules_edit.php:396 +#: usr/local/www/firewall_rules_edit.php:399 +#: usr/local/www/firewall_nat_edit.php:252 +#: usr/local/www/firewall_nat_out_edit.php:168 +#: usr/local/www/firewall_rules_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:257 +#: usr/local/www/firewall_nat_out_edit.php:174 +#: usr/local/www/firewall_rules_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:257 +#: usr/local/www/firewall_nat_out_edit.php:174 +msgid "A valid source bit count must be specified." +msgstr "有効ãªã‚½ãƒ¼ã‚¹ãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_edit.php:267 +#: usr/local/www/firewall_nat_edit.php:274 +#: usr/local/www/firewall_nat_edit.php:279 +#: usr/local/www/firewall_nat_edit.php:284 +#: usr/local/www/firewall_nat_edit.php:284 +msgid "The target port range must be an integer between 1 and 65535." +msgstr "ターゲットãƒãƒ¼ãƒˆã®ç¯„囲ã¯1 〜65535ã®é–“ã®æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/firewall_nat_edit.php:288 +#: usr/local/www/firewall_nat_edit.php:295 +#: usr/local/www/firewall_nat_edit.php:300 +#: usr/local/www/firewall_nat_edit.php:305 +#: usr/local/www/firewall_nat_edit.php:305 +msgid "The destination port range overlaps with an existing entry." +msgstr "宛先ãƒãƒ¼ãƒˆã®ç¯„囲ã¯ã€æ—¢å­˜ã®ã‚¨ãƒ³ãƒˆãƒªã¨é‡è¤‡ã™ã‚‹ã€‚" + +#: usr/local/www/firewall_nat_edit.php:453 +#: usr/local/www/firewall_nat_edit.php:460 +#: usr/local/www/firewall_nat_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:454 +#: usr/local/www/firewall_nat_edit.php:466 +#: usr/local/www/firewall_nat_edit.php:467 +#: usr/local/www/firewall_nat_edit.php:467 +msgid "Edit Redirect entry" +msgstr "編集リダイレクトエントリー" + +#: usr/local/www/firewall_nat_edit.php:468 +#: usr/local/www/firewall_nat_edit.php:475 +#: usr/local/www/firewall_nat_edit.php:474 +#: usr/local/www/firewall_nat_edit.php:469 +#: usr/local/www/firewall_nat_edit.php:481 +#: usr/local/www/firewall_nat_edit.php:482 +#: usr/local/www/firewall_nat_edit.php:482 +msgid "No RDR (NOT)" +msgstr "ノーRDR (NOT )" + +#: usr/local/www/firewall_nat_edit.php:471 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_edit.php:472 +#: usr/local/www/firewall_nat_edit.php:484 +#: usr/local/www/firewall_nat_edit.php:485 +#: usr/local/www/firewall_nat_edit.php:485 +msgid "" +"Enabling this option will disable redirection for traffic matching this rule." +msgstr ""ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒˆãƒ©ãƒ•ィックã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’無効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_edit.php:472 +#: usr/local/www/firewall_nat_edit.php:479 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_edit.php:473 +#: usr/local/www/firewall_nat_edit.php:485 +#: usr/local/www/firewall_nat_edit.php:486 +#: usr/local/www/firewall_nat_edit.php:486 +msgid "" +"Hint: this option is rarely needed, don't use this unless you know what " +"you're doing." +msgstr "ã‚ãªãŸãŒã‚„ã£ã¦ã„る: "ヒントã‚ãªãŸãŒçŸ¥ã£ã¦ã„ã‚‹é™ã‚Šã€ã“ã®ã‚ªãƒ—ションã¯ã»ã¨ã‚“ã©å¿…è¦ã‚りã¾ã›ã‚“ã€ã“れを使用ã—ãªã„ã§ãã ã•ã„〠。" + +#: usr/local/www/firewall_nat_edit.php:514 +#: usr/local/www/firewall_nat_out_edit.php:452 +#: usr/local/www/firewall_nat_out_edit.php:465 +#: usr/local/www/firewall_nat_edit.php:521 +#: usr/local/www/firewall_nat_edit.php:520 +#: usr/local/www/firewall_nat_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:469 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_nat_out_edit.php:481 +#: usr/local/www/firewall_nat_edit.php:528 +#: usr/local/www/firewall_nat_edit.php:528 +#: usr/local/www/firewall_nat_out_edit.php:481 +msgid "Choose which interface this rule applies to." +msgstr "é¸æŠžã—ã¦ã„るインターフェイスã€ã“ã®ãƒ«ãƒ¼ãƒ«ãŒé©ç”¨ã•れる。" + +#: usr/local/www/firewall_nat_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:453 +#: usr/local/www/firewall_nat_out_edit.php:466 +#: usr/local/www/firewall_nat_edit.php:522 +#: usr/local/www/firewall_nat_edit.php:521 +#: usr/local/www/firewall_nat_edit.php:516 +#: usr/local/www/firewall_nat_out_edit.php:470 +#: usr/local/www/firewall_nat_edit.php:528 +#: usr/local/www/firewall_nat_out_edit.php:482 +#: usr/local/www/firewall_nat_edit.php:529 +#: usr/local/www/firewall_nat_edit.php:529 +#: usr/local/www/firewall_nat_out_edit.php:482 +msgid "Hint: in most cases, you'll want to use WAN here." +msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã‚ãªãŸã¯ã“ã“ã§ã€WANを使ã†ã“ã¨ã«ãªã‚‹ã§ã—ょã†ã€‚" + +#: usr/local/www/firewall_nat_edit.php:524 +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_nat_edit.php:530 +#: usr/local/www/firewall_rules_edit.php:856 +#: usr/local/www/firewall_nat_edit.php:525 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_nat_edit.php:537 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_nat_edit.php:538 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_nat_edit.php:538 +msgid "Choose which IP protocol this rule should match." +msgstr "é¸æŠžã—ã¦ã„ã‚‹IPプロトコルã“ã®è¦å‰‡ã¯ã€ä¸€è‡´ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/firewall_nat_edit.php:540 +msgid "Hint: in most cases, you should specify" +msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€æ¬¡ã®ã‚ˆã†ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚り" + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +msgid "TCP" +msgstr "TCP" + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/diag_ipsec_sad.php:135 usr/local/www/diag_ipsec_spd.php:144 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/diag_ipsec_sad.php:136 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/diag_ipsec_spd.php:145 +#: usr/local/www/firewall_rules_edit.php:856 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/diag_ipsec_spd.php:145 usr/local/www/diag_ipsec_sad.php:136 +msgid "here." +msgstr "ã“ã“ã«ã€‚" + +#: usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_nat_edit.php:538 +#: usr/local/www/firewall_nat_edit.php:537 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/firewall_nat_edit.php:544 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/firewall_nat_edit.php:545 +msgid "Show source address and port range" +msgstr "é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹ãŠã‚ˆã³ãƒãƒ¼ãƒˆç¯„囲を表示ã™ã‚‹" + +#: usr/local/www/firewall_nat_edit.php:589 +#: usr/local/www/firewall_rules_edit.php:913 +#: usr/local/www/firewall_rules_edit.php:948 +#: usr/local/www/firewall_nat_edit.php:596 +#: usr/local/www/firewall_nat_edit.php:595 +#: usr/local/www/firewall_rules_edit.php:957 +#: usr/local/www/firewall_nat_edit.php:590 +#: usr/local/www/firewall_rules_edit.php:970 +#: usr/local/www/firewall_nat_edit.php:602 +#: usr/local/www/firewall_rules_edit.php:969 +#: usr/local/www/firewall_nat_edit.php:603 +#: usr/local/www/firewall_rules_edit.php:969 +#: usr/local/www/firewall_nat_edit.php:603 +msgid "Source port range" +msgstr "é€ä¿¡å…ƒãƒãƒ¼ãƒˆç¯„囲" + +#: usr/local/www/firewall_nat_edit.php:593 +#: usr/local/www/firewall_nat_edit.php:705 +#: usr/local/www/firewall_rules_edit.php:917 +#: usr/local/www/firewall_rules_edit.php:1009 +#: usr/local/www/firewall_rules_edit.php:952 +#: usr/local/www/firewall_rules_edit.php:1044 +#: usr/local/www/firewall_nat_edit.php:600 +#: usr/local/www/firewall_nat_edit.php:712 +#: usr/local/www/firewall_nat_edit.php:599 +#: usr/local/www/firewall_nat_edit.php:711 +#: usr/local/www/firewall_rules_edit.php:961 +#: usr/local/www/firewall_rules_edit.php:1059 +#: usr/local/www/firewall_nat_edit.php:594 +#: usr/local/www/firewall_nat_edit.php:706 +#: usr/local/www/firewall_rules_edit.php:974 +#: usr/local/www/firewall_rules_edit.php:1072 +#: usr/local/www/firewall_nat_edit.php:606 +#: usr/local/www/firewall_nat_edit.php:718 +#: usr/local/www/firewall_rules_edit.php:973 +#: usr/local/www/firewall_rules_edit.php:1071 +#: usr/local/www/firewall_nat_edit.php:607 +#: usr/local/www/firewall_nat_edit.php:719 +#: usr/local/www/firewall_rules_edit.php:973 +#: usr/local/www/firewall_rules_edit.php:1071 +#: usr/local/www/firewall_nat_edit.php:607 +#: usr/local/www/firewall_nat_edit.php:719 +msgid "from:" +msgstr "ã‹ã‚‰ï¼š" + +#: usr/local/www/firewall_nat_edit.php:596 +#: usr/local/www/firewall_nat_edit.php:609 +#: usr/local/www/firewall_nat_edit.php:708 +#: usr/local/www/firewall_nat_edit.php:721 +#: usr/local/www/firewall_nat_edit.php:751 +#: usr/local/www/firewall_rules_edit.php:920 +#: usr/local/www/firewall_rules_edit.php:933 +#: usr/local/www/firewall_rules_edit.php:1012 +#: usr/local/www/firewall_rules_edit.php:1025 +#: usr/local/www/firewall_rules_edit.php:955 +#: usr/local/www/firewall_rules_edit.php:968 +#: usr/local/www/firewall_rules_edit.php:1047 +#: usr/local/www/firewall_rules_edit.php:1060 +#: usr/local/www/firewall_nat_edit.php:603 +#: usr/local/www/firewall_nat_edit.php:616 +#: usr/local/www/firewall_nat_edit.php:715 +#: usr/local/www/firewall_nat_edit.php:728 +#: usr/local/www/firewall_nat_edit.php:758 +#: usr/local/www/firewall_nat_edit.php:602 +#: usr/local/www/firewall_nat_edit.php:615 +#: usr/local/www/firewall_nat_edit.php:714 +#: usr/local/www/firewall_nat_edit.php:727 +#: usr/local/www/firewall_nat_edit.php:757 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_rules_edit.php:977 +#: usr/local/www/firewall_rules_edit.php:1062 +#: usr/local/www/firewall_rules_edit.php:1075 +#: usr/local/www/firewall_nat_edit.php:597 +#: usr/local/www/firewall_nat_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:709 +#: usr/local/www/firewall_nat_edit.php:722 +#: usr/local/www/firewall_nat_edit.php:752 +#: usr/local/www/firewall_rules_edit.php:990 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/firewall_nat_edit.php:622 +#: usr/local/www/firewall_nat_edit.php:734 +#: usr/local/www/firewall_nat_edit.php:764 +#: usr/local/www/firewall_rules_edit.php:976 +#: usr/local/www/firewall_rules_edit.php:989 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:1087 +#: usr/local/www/firewall_nat_edit.php:623 +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_nat_edit.php:765 +#: usr/local/www/firewall_rules_edit.php:976 +#: usr/local/www/firewall_rules_edit.php:989 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:1087 +#: usr/local/www/firewall_nat_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:623 +#: usr/local/www/firewall_nat_edit.php:722 +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_nat_edit.php:765 +msgid "other" +msgstr "ãã®ä»–" + +#: usr/local/www/firewall_nat_edit.php:606 +#: usr/local/www/firewall_nat_edit.php:718 +#: usr/local/www/firewall_rules_edit.php:930 +#: usr/local/www/firewall_rules_edit.php:1022 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/firewall_rules_edit.php:1057 +#: usr/local/www/firewall_nat_edit.php:613 +#: usr/local/www/firewall_nat_edit.php:725 +#: usr/local/www/firewall_nat_edit.php:612 +#: usr/local/www/firewall_nat_edit.php:724 +#: usr/local/www/firewall_rules_edit.php:974 +#: usr/local/www/firewall_rules_edit.php:1072 +#: usr/local/www/firewall_nat_edit.php:607 +#: usr/local/www/firewall_nat_edit.php:719 +#: usr/local/www/firewall_rules_edit.php:987 +#: usr/local/www/firewall_rules_edit.php:1085 +#: usr/local/www/firewall_nat_edit.php:619 +#: usr/local/www/firewall_nat_edit.php:731 +#: usr/local/www/firewall_rules_edit.php:986 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:732 +#: usr/local/www/firewall_rules_edit.php:986 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:732 +msgid "to:" +msgstr "ã¸ï¼š" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "Specify the source port or port range for this rule" +msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã®é€ä¿¡å…ƒãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆç¯„囲を指定" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "This is usually" +msgstr "ã“れã¯é€šå¸¸" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "random" +msgstr "ランダム" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "" +"and almost never equal to the destination port range (and should usually be " +"'any')" +msgstr ""( 「任æ„ã®ã€ã¨å®›å…ˆãƒãƒ¼ãƒˆç¯„囲ã¨ã»ã¼ç­‰ã—ããªã‚‹ã“ã¨ã¯ã€é€šå¸¸ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“〠)" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:736 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1102 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:748 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1101 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1101 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:749 +msgid "Hint: you can leave the" +msgstr "ヒント:ã‚ãªãŸãŒæ®‹ã™ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "field empty if you only want to filter a single port." +msgstr "フィールドã«ã¯ã€å˜ä¸€ã®ãƒãƒ¼ãƒˆã‚’フィルタリングã™ã‚‹å ´åˆã¯ã€ç©ºã€‚" + +#: usr/local/www/firewall_nat_edit.php:701 +#: usr/local/www/firewall_nat_edit.php:708 +#: usr/local/www/firewall_nat_edit.php:707 +#: usr/local/www/firewall_nat_edit.php:702 +#: usr/local/www/firewall_nat_edit.php:714 +#: usr/local/www/firewall_nat_edit.php:715 +#: usr/local/www/firewall_nat_edit.php:715 +msgid "Destination port range" +msgstr "宛先ãƒãƒ¼ãƒˆç¯„囲" + +#: usr/local/www/firewall_nat_edit.php:733 +#: usr/local/www/firewall_nat_edit.php:740 +#: usr/local/www/firewall_nat_edit.php:739 +#: usr/local/www/firewall_nat_edit.php:734 +#: usr/local/www/firewall_nat_edit.php:746 +#: usr/local/www/firewall_nat_edit.php:747 +#: usr/local/www/firewall_nat_edit.php:747 +msgid "" +"Specify the port or port range for the destination of the packet for this " +"mapping." +msgstr "マッピング"ã“ã®ãŸã‚ã€ãƒ‘ケットã®é€ä¿¡å…ˆã®ãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆç¯„囲を指定ã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/firewall_nat_edit.php:736 +#: usr/local/www/firewall_nat_edit.php:748 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_nat_edit.php:749 +msgid "field empty if you only want to map a single port" +msgstr "フィールドã®ç©ºã®ã‚ãªãŸã¯ã€å˜ä¸€ã®ãƒãƒ¼ãƒˆã‚’マップã™ã‚‹å ´åˆ" + +#: usr/local/www/firewall_nat_edit.php:743 +#: usr/local/www/firewall_nat_edit.php:750 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_nat_edit.php:744 +#: usr/local/www/firewall_nat_edit.php:756 +#: usr/local/www/firewall_nat_edit.php:757 +#: usr/local/www/firewall_nat_edit.php:757 +msgid "" +"Enter the internal IP address of the server on which you want to map the " +"ports." +msgstr "ãƒãƒ¼ãƒˆã€ã‚’ã€ãƒžãƒƒãƒ—ã«ã—ãŸã„サーãƒãƒ¼ã®å†…部IPアドレスを入力ã—ã¦ãã ã•ã„ "。" + +#: usr/local/www/firewall_nat_edit.php:748 +#: usr/local/www/firewall_nat_edit.php:755 +#: usr/local/www/firewall_nat_edit.php:754 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_nat_edit.php:761 +#: usr/local/www/firewall_nat_edit.php:762 +#: usr/local/www/firewall_nat_edit.php:762 +msgid "Redirect target port" +msgstr "ターゲットãƒãƒ¼ãƒˆã‚’リダイレクト" + +#: usr/local/www/firewall_nat_edit.php:762 +#: usr/local/www/firewall_nat_edit.php:769 +#: usr/local/www/firewall_nat_edit.php:768 +#: usr/local/www/firewall_nat_edit.php:763 +#: usr/local/www/firewall_nat_edit.php:775 +#: usr/local/www/firewall_nat_edit.php:776 +#: usr/local/www/firewall_nat_edit.php:776 +msgid "" +"Specify the port on the machine with the IP address entered above. In case " +"of a port range, specify the beginning port of the range (the end port will " +"be calculated automatically)." +msgstr ""上ã§å…¥åŠ›ã—ãŸIPアドレスをæŒã¤ãƒžã‚·ãƒ³ã®ãƒãƒ¼ãƒˆã‚’指定ã—ã¾ã™ã€‚å ´åˆã¯ã€ã€Œãƒãƒ¼ãƒˆç¯„囲ã®ã€ (エンド·ãƒãƒ¼ãƒˆãŒã€Œè‡ªå‹•çš„ã«è¨ˆç®—ã•れã¾ã™ï¼‰ç¯„囲ã®é–‹å§‹ãƒãƒ¼ãƒˆã‚’指定ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_edit.php:766 +#: usr/local/www/firewall_nat_edit.php:773 +#: usr/local/www/firewall_nat_edit.php:772 +#: usr/local/www/firewall_nat_edit.php:767 +#: usr/local/www/firewall_nat_edit.php:779 +#: usr/local/www/firewall_nat_edit.php:780 +#: usr/local/www/firewall_nat_edit.php:780 +msgid "Hint: this is usually identical to the 'from' port above" +msgstr "ヒント:ã“れã¯ã€ãƒãƒ¼ãƒˆ'ã‹ã‚‰'上ã€é€šå¸¸ã¨åŒã˜ã§ã™" + +#: usr/local/www/firewall_nat_edit.php:776 +#: usr/local/www/firewall_nat_out_edit.php:629 +#: usr/local/www/firewall_rules_edit.php:1238 +#: usr/local/www/firewall_nat_out_edit.php:642 +#: usr/local/www/firewall_rules_edit.php:1273 +#: usr/local/www/firewall_nat_edit.php:783 +#: usr/local/www/firewall_nat_edit.php:782 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_nat_edit.php:777 +#: usr/local/www/firewall_nat_out_edit.php:644 +#: usr/local/www/firewall_rules_edit.php:1295 +#: usr/local/www/firewall_nat_edit.php:789 +#: usr/local/www/firewall_nat_out_edit.php:656 +#: usr/local/www/firewall_rules_edit.php:1294 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/firewall_rules_edit.php:1294 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/firewall_nat_out_edit.php:656 +msgid "No XMLRPC Sync" +msgstr "ã„ã„ãˆXMLRPCåŒæœŸã—ãªã„" + +#: usr/local/www/firewall_nat_edit.php:779 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/firewall_nat_edit.php:785 +msgid "" +"HINT: This prevents the rule from automatically syncing to other CARP members" +msgstr ""ヒント:ã“れã¯è‡ªå‹•çš„ã«ä»–ã®CARPã®ãƒ¡ãƒ³ãƒãƒ¼ã¨åŒæœŸã‹ã‚‰ãƒ«ãƒ¼ãƒ«ã‚’防ãŽ" + +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:825 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/firewall_nat_edit.php:833 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/firewall_nat_edit.php:832 +#: usr/local/www/firewall_nat_edit.php:796 +#: usr/local/www/firewall_nat_edit.php:827 +#: usr/local/www/firewall_nat_edit.php:808 +#: usr/local/www/firewall_nat_edit.php:839 +#: usr/local/www/firewall_nat_edit.php:809 +#: usr/local/www/firewall_nat_edit.php:840 +#: usr/local/www/firewall_nat_edit.php:809 +#: usr/local/www/firewall_nat_edit.php:840 +msgid "Filter rule association" +msgstr "フィルタ·ルールã®é–¢é€£ä»˜ã‘" + +#: usr/local/www/firewall_nat_edit.php:798 +#: usr/local/www/firewall_nat_edit.php:831 +#: usr/local/www/firewall_nat_edit.php:806 +#: usr/local/www/firewall_nat_edit.php:839 +#: usr/local/www/firewall_nat_edit.php:805 +#: usr/local/www/firewall_nat_edit.php:838 +#: usr/local/www/firewall_nat_edit.php:800 +#: usr/local/www/firewall_nat_edit.php:833 +#: usr/local/www/firewall_nat_edit.php:812 +#: usr/local/www/firewall_nat_edit.php:845 +#: usr/local/www/firewall_nat_edit.php:813 +#: usr/local/www/firewall_nat_edit.php:846 +#: usr/local/www/firewall_nat_edit.php:813 +#: usr/local/www/firewall_nat_edit.php:846 +msgid "Pass" +msgstr "パス" + +#: usr/local/www/firewall_nat_edit.php:808 +#: usr/local/www/firewall_nat_edit.php:816 +#: usr/local/www/firewall_nat_edit.php:815 +#: usr/local/www/firewall_nat_edit.php:810 +#: usr/local/www/firewall_nat_edit.php:822 +#: usr/local/www/firewall_nat_edit.php:823 +#: usr/local/www/firewall_nat_edit.php:823 +msgid "View the filter rule" +msgstr "フィルタルールを表示ã™ã‚‹" + +#: usr/local/www/firewall_nat_edit.php:816 +#: usr/local/www/firewall_nat_edit.php:824 +#: usr/local/www/firewall_nat_edit.php:823 +#: usr/local/www/firewall_nat_edit.php:818 +#: usr/local/www/firewall_nat_edit.php:830 +#: usr/local/www/firewall_nat_edit.php:831 +#: usr/local/www/firewall_nat_edit.php:831 +msgid "Create new associated filter rule" +msgstr "æ–°ã—ã„関連ã™ã‚‹ãƒ•ィルタルールを作æˆã™ã‚‹" + +#: usr/local/www/firewall_nat_edit.php:829 +#: usr/local/www/firewall_nat_edit.php:837 +#: usr/local/www/firewall_nat_edit.php:836 +#: usr/local/www/firewall_nat_edit.php:831 +#: usr/local/www/firewall_nat_edit.php:843 +#: usr/local/www/firewall_nat_edit.php:844 +#: usr/local/www/firewall_nat_edit.php:844 +msgid "Add associated filter rule" +msgstr "関連ã™ã‚‹ãƒ•ィルタルールを追加" + +#: usr/local/www/firewall_nat_edit.php:830 +#: usr/local/www/firewall_nat_edit.php:838 +#: usr/local/www/firewall_nat_edit.php:837 +#: usr/local/www/firewall_nat_edit.php:832 +#: usr/local/www/firewall_nat_edit.php:844 +#: usr/local/www/firewall_nat_edit.php:845 +#: usr/local/www/firewall_nat_edit.php:845 +msgid "Add unassociated filter rule" +msgstr "関連付ã‘られã¦ã„ãªã„フィルタルールを追加ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out.php:111 +#: usr/local/www/firewall_nat_out.php:112 +#: usr/local/www/firewall_nat_out.php:112 +#, php-format +msgid "Auto created rule for ISAKMP - %1$s to %2$s" +msgstr "%2$sã«ã¯%1$s - 自動ISAKMPã®ãŸã‚ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ãŸ" + +#: usr/local/www/firewall_nat_out.php:121 +#: usr/local/www/firewall_nat_out.php:123 +#: usr/local/www/firewall_nat_out.php:123 +#, php-format +msgid "Auto created rule for %1$s to %2$s" +msgstr "自動%2$sã«ã¯%1$sã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ã¾ã—ãŸ" + +#: usr/local/www/firewall_nat_out.php:131 +#: usr/local/www/firewall_nat_out.php:135 +#: usr/local/www/firewall_nat_out.php:135 +#, php-format +msgid "Auto created rule for localhost to %1$s" +msgstr "オートã¯%1$sã«localhostã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ãŸ" + +#: usr/local/www/firewall_nat_out.php:147 +#: usr/local/www/firewall_nat_out.php:148 +#: usr/local/www/firewall_nat_out.php:152 +#: usr/local/www/firewall_nat_out.php:152 +msgid "Auto created rule for PPTP server" +msgstr "オートã¯ã€PPTPサーãƒãƒ¼ç”¨ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ãŸ" + +#: usr/local/www/firewall_nat_out.php:167 +#: usr/local/www/firewall_nat_out.php:168 +#: usr/local/www/firewall_nat_out.php:173 +#: usr/local/www/firewall_nat_out.php:173 +msgid "Auto created rule for PPPoE server" +msgstr "自動PPPoEサーãƒã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ã¾ã—ãŸ" + +#: usr/local/www/firewall_nat_out.php:187 +#: usr/local/www/firewall_nat_out.php:188 +#: usr/local/www/firewall_nat_out.php:194 +#: usr/local/www/firewall_nat_out.php:194 +msgid "Auto created rule for L2TP server" +msgstr "オートã¯ã€L2TPサーãƒã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ã¾ã—ãŸ" + +#: usr/local/www/firewall_nat_out.php:201 +#: usr/local/www/firewall_nat_out.php:202 +#: usr/local/www/firewall_nat_out.php:209 +#: usr/local/www/firewall_nat_out.php:209 +msgid "Auto created rule for OpenVPN server" +msgstr "自動OpenVPNã®ã‚µãƒ¼ãƒãƒ¼ç”¨ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ãŸ" + +#: usr/local/www/firewall_nat_out.php:212 +#: usr/local/www/firewall_nat_out.php:213 +#: usr/local/www/firewall_nat_out.php:220 +#: usr/local/www/firewall_nat_out.php:220 +msgid "Default rules for each interface have been created." +msgstr "å„インタフェースã®ãƒ‡ãƒ•ォルトルールãŒä½œæˆã•れã¦ã„る。" + +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_out.php:304 +#: usr/local/www/firewall_nat_out.php:305 +#: usr/local/www/firewall_nat_out.php:312 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_out.php:311 +msgid "The NAT configuration has been changed." +msgstr "NAT設定ãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/firewall_nat_out.php:310 +#: usr/local/www/firewall_nat_out.php:320 +#: usr/local/www/firewall_nat_out.php:321 +#: usr/local/www/firewall_nat_out.php:328 +#: usr/local/www/firewall_nat_out.php:327 +#: usr/local/www/firewall_nat_out.php:327 +msgid "Mode:" +msgstr "モード:" + +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_out.php:323 +#: usr/local/www/firewall_nat_out.php:324 +#: usr/local/www/firewall_nat_out.php:331 +#: usr/local/www/firewall_nat_out.php:330 +#: usr/local/www/firewall_nat_out.php:330 +msgid "Automatic outbound NAT rule generation" +msgstr "自動アウトãƒã‚¦ãƒ³ãƒ‰NATルールã®ç”Ÿæˆ" + +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_out.php:323 +#: usr/local/www/firewall_nat_out.php:324 +#: usr/local/www/firewall_nat_out.php:331 +#: usr/local/www/firewall_nat_out.php:330 +#: usr/local/www/firewall_nat_out.php:330 +msgid "(IPsec passthrough included)" +msgstr "( IPsecã®ãƒ‘ススルーã¯å«ã¾ã‚Œã¦ã„ã¾ã™ï¼‰" + +#: usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat_out.php:328 +#: usr/local/www/firewall_nat_out.php:329 +#: usr/local/www/firewall_nat_out.php:336 +#: usr/local/www/firewall_nat_out.php:335 +#: usr/local/www/firewall_nat_out.php:335 +msgid "Manual Outbound NAT rule generation" +msgstr "手動ã®ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NATルールã®ç”Ÿæˆ" + +#: usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat_out.php:328 +#: usr/local/www/firewall_nat_out.php:329 +#: usr/local/www/firewall_nat_out.php:336 +#: usr/local/www/firewall_nat_out.php:335 +#: usr/local/www/firewall_nat_out.php:335 +msgid "(AON - Advanced Outbound NAT)" +msgstr "( AON - 高度ãªã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NAT)" + +#: usr/local/www/firewall_nat_out.php:336 +#: usr/local/www/firewall_nat_out.php:346 +#: usr/local/www/firewall_nat_out.php:347 +#: usr/local/www/firewall_nat_out.php:354 +#: usr/local/www/firewall_nat_out.php:353 +#: usr/local/www/firewall_nat_out.php:353 +msgid "Mappings:" +msgstr "マッピング:" + +#: usr/local/www/firewall_nat_out.php:343 +#: usr/local/www/firewall_nat_out.php:353 +#: usr/local/www/firewall_nat_out.php:354 usr/local/www/diag_testport.php:129 +#: usr/local/www/diag_system_pftop.php:160 +#: usr/local/www/diag_logs_filter.php:167 +#: usr/local/www/firewall_nat_out.php:361 +#: usr/local/www/firewall_nat_out.php:360 usr/local/www/diag_testport.php:129 +#: usr/local/www/diag_logs_filter.php:167 +#: usr/local/www/diag_system_pftop.php:160 +#: usr/local/www/firewall_nat_out.php:360 +msgid "Source Port" +msgstr "ソースãƒãƒ¼ãƒˆ" + +#: usr/local/www/firewall_nat_out.php:345 +#: usr/local/www/firewall_nat_out.php:355 +#: usr/local/www/firewall_nat_out.php:356 +#: usr/local/www/diag_system_pftop.php:153 +#: usr/local/www/diag_logs_filter.php:189 +#: usr/local/www/firewall_nat_out.php:363 +#: usr/local/www/firewall_nat_out.php:362 +#: usr/local/www/diag_logs_filter.php:189 +#: usr/local/www/diag_system_pftop.php:153 +#: usr/local/www/firewall_nat_out.php:362 +msgid "Destination Port" +msgstr "宛先ãƒãƒ¼ãƒˆ" + +#: usr/local/www/firewall_nat_out.php:346 +#: usr/local/www/firewall_nat_out.php:356 +#: usr/local/www/firewall_nat_out.php:357 +#: usr/local/www/firewall_nat_out.php:364 +#: usr/local/www/firewall_nat_out.php:363 +#: usr/local/www/firewall_nat_out.php:363 +msgid "NAT Address" +msgstr "NATアドレス" + +#: usr/local/www/firewall_nat_out.php:347 +#: usr/local/www/firewall_nat_out.php:357 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/firewall_nat_out.php:365 +#: usr/local/www/firewall_nat_out.php:364 +#: usr/local/www/firewall_nat_out.php:364 +msgid "NAT Port" +msgstr "NATã®ãƒãƒ¼ãƒˆ" + +#: usr/local/www/firewall_nat_out.php:348 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/firewall_nat_out.php:366 +#: usr/local/www/firewall_nat_out.php:365 +#: usr/local/www/firewall_nat_out.php:365 +msgid "Static Port" +msgstr "é™çš„ãƒãƒ¼ãƒˆ" + +#: usr/local/www/firewall_nat_out.php:354 +#: usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_nat_out.php:364 +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:365 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:459 +#: usr/local/www/firewall_nat_out.php:372 +#: usr/local/www/firewall_nat_out.php:466 +#: usr/local/www/firewall_nat_out.php:371 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:371 +#: usr/local/www/firewall_nat_out.php:465 +msgid "add new mapping" +msgstr "æ–°ã—ã„マッピングを追加ã™ã‚‹" + +#: usr/local/www/firewall_nat_out.php:425 +#: usr/local/www/firewall_nat_out.php:435 +#: usr/local/www/firewall_nat_out.php:436 +#: usr/local/www/firewall_nat_out.php:433 +#: usr/local/www/firewall_nat_out.php:440 +#: usr/local/www/firewall_nat_out.php:439 +#: usr/local/www/firewall_nat_out.php:439 +msgid "YES" +msgstr "YES" + +#: usr/local/www/firewall_nat_out.php:427 +#: usr/local/www/firewall_nat_out.php:437 +#: usr/local/www/firewall_nat_out.php:438 +#: usr/local/www/firewall_nat_out.php:435 +#: usr/local/www/firewall_nat_out.php:442 +#: usr/local/www/firewall_nat_out.php:441 +#: usr/local/www/firewall_nat_out.php:441 +msgid "NO" +msgstr "NO" + +#: usr/local/www/firewall_nat_out.php:436 +#: usr/local/www/firewall_nat_out.php:447 +#: usr/local/www/firewall_nat_out.php:448 +#: usr/local/www/firewall_nat_out.php:445 +#: usr/local/www/firewall_nat_out.php:452 +#: usr/local/www/firewall_nat_out.php:451 +#: usr/local/www/firewall_nat_out.php:451 +msgid "edit mapping" +msgstr "編集マッピング" + +#: usr/local/www/firewall_nat_out.php:439 usr/local/www/firewall_rules.php:435 +#: usr/local/www/firewall_rules.php:464 usr/local/www/firewall_rules.php:492 +#: usr/local/www/firewall_rules.php:775 usr/local/www/firewall_nat.php:309 +#: usr/local/www/firewall_nat_out.php:446 usr/local/www/firewall_rules.php:429 +#: usr/local/www/firewall_rules.php:458 usr/local/www/firewall_rules.php:486 +#: usr/local/www/firewall_rules.php:772 usr/local/www/firewall_nat_out.php:447 +#: usr/local/www/firewall_nat.php:322 usr/local/www/firewall_rules.php:422 +#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479 +#: usr/local/www/firewall_rules.php:765 usr/local/www/firewall_nat_out.php:444 +#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_rules.php:421 +#: usr/local/www/firewall_rules.php:450 usr/local/www/firewall_rules.php:478 +#: usr/local/www/firewall_nat.php:325 usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_nat.php:325 usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_rules.php:421 usr/local/www/firewall_rules.php:450 +#: usr/local/www/firewall_rules.php:478 usr/local/www/firewall_rules.php:765 +msgid "move selected rules before this rule" +msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã®å‰ã«ã€é¸æŠžã—ãŸãƒ«ãƒ¼ãƒ«ã‚’移動" + +#: usr/local/www/firewall_nat_out.php:440 usr/local/www/firewall_nat.php:314 +#: usr/local/www/firewall_nat_out.php:451 +#: usr/local/www/firewall_nat_out.php:452 usr/local/www/firewall_nat.php:327 +#: usr/local/www/firewall_nat_out.php:449 +#: usr/local/www/firewall_nat_out.php:456 usr/local/www/firewall_nat.php:330 +#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:330 +#: usr/local/www/firewall_nat_out.php:455 +msgid "add a new NAT based on this one" +msgstr "ã“ã®1ã«åŸºã¥ã„ã¦ã€æ–°ã—ã„NATを追加" + +#: usr/local/www/firewall_nat_out.php:449 +#: usr/local/www/firewall_nat_out.php:460 +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:458 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_nat_out.php:464 +msgid "move selected mappings to end" +msgstr "終了ã™ã‚‹ã«ã¯ã€é¸æŠžã—ãŸãƒžãƒƒãƒ”ングを移動" + +#: usr/local/www/firewall_nat_out.php:453 usr/local/www/firewall_rules.php:391 +#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:823 +#: usr/local/www/firewall_rules.php:824 usr/local/www/firewall_nat.php:209 +#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:332 +#: usr/local/www/firewall_nat.php:334 usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_rules.php:395 usr/local/www/firewall_rules.php:396 +#: usr/local/www/firewall_rules.php:825 usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat.php:214 usr/local/www/firewall_nat.php:216 +#: usr/local/www/firewall_nat.php:345 usr/local/www/firewall_nat.php:347 +#: usr/local/www/firewall_rules.php:388 usr/local/www/firewall_rules.php:389 +#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_rules.php:818 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:469 usr/local/www/firewall_rules.php:386 +#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:819 +#: usr/local/www/firewall_rules.php:820 usr/local/www/firewall_nat.php:217 +#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:348 +#: usr/local/www/firewall_nat.php:350 usr/local/www/firewall_nat_out.php:468 +#: usr/local/www/firewall_nat.php:217 usr/local/www/firewall_nat.php:219 +#: usr/local/www/firewall_nat.php:348 usr/local/www/firewall_nat.php:350 +#: usr/local/www/firewall_nat_out.php:468 usr/local/www/firewall_rules.php:386 +#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:819 +#: usr/local/www/firewall_rules.php:820 +msgid "delete selected rules" +msgstr "é¸æŠžã—ãŸãƒ«ãƒ¼ãƒ«ã‚’削除" + +#: usr/local/www/firewall_nat_out.php:453 +#: usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:469 +#: usr/local/www/firewall_nat_out.php:468 +#: usr/local/www/firewall_nat_out.php:468 +msgid "delete selected mappings" +msgstr "é¸æŠžã—ãŸãƒžãƒƒãƒ”ングを削除" + +#: usr/local/www/firewall_nat_out.php:453 +#: usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:469 +#: usr/local/www/firewall_nat_out.php:468 +#: usr/local/www/firewall_nat_out.php:468 +msgid "Do you really want to delete the selected mappings?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«é¸æŠžã—ãŸãƒžãƒƒãƒ”ングを削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:472 +#: usr/local/www/firewall_nat_out.php:473 +#: usr/local/www/firewall_nat_out.php:470 +#: usr/local/www/firewall_nat_out.php:477 +#: usr/local/www/firewall_nat_out.php:476 +#: usr/local/www/firewall_nat_out.php:476 +msgid "" +"With automatic outbound NAT enabled, a mapping is automatically created for " +"each interface's subnet (except WAN-type connections) and the rules on this " +"page are ignored.

    If manual outbound NAT is enabled, outbound NAT " +"rules will not be automatically generated and only the mappings you specify " +"on this page will be used.

    If a target address other than a WAN-" +"type interface's IP address is used, then depending on the way the WAN " +"connection is setup, a " +msgstr "「自動アウトãƒã‚¦ãƒ³ãƒ‰ã§ã®NATã¯ã€æœ‰åйãªãƒžãƒƒãƒ”ングãŒè‡ªå‹•çš„ã«ã®ãŸã‚ã«ä½œæˆã•れã¦ã„る「 (WANåž‹ã®æŽ¥ç¶šã‚’é™¤ã)å„インターフェイスã®ã‚µãƒ–ãƒãƒƒãƒˆã¨ã“れã«é–¢ã™ã‚‹ãƒ«ãƒ¼ãƒ«ã¯ãƒ«ãƒ¼ãƒ«ã€ãƒšãƒ¼ã‚¸ã«ã¯ã€æ‰‹å‹•ã®ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NATãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã€ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NAT ignored.

    ã§ã™ã€è‡ªå‹•çš„ã«ç”Ÿæˆã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“ã—ã€æŒ‡å®šã—ãŸãƒžãƒƒãƒ”ングã®ã¿ã€ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€‚

    を使用ã™ã‚‹å ´åˆã¯ã€WAN以外ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã€ã‚¿ã‚¤ãƒ—ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã®IPアドレスã¯ã€æ¬¡ã«ã‚ˆã†ã«ã€WANã«å¿œã˜ã¦ã€ä½¿ç”¨ã•れã¦ã„る「接続セットアップ〠aã¯" + +#: usr/local/www/firewall_nat_out.php:469 +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/carp_status.php:139 +#: usr/local/www/system_gateway_groups_edit.php:252 +#: usr/local/www/firewall_nat_out.php:480 +#: usr/local/www/firewall_nat_out_edit.php:601 +#: usr/local/www/system_gateway_groups_edit.php:312 +#: usr/local/www/firewall_nat_out.php:481 usr/local/www/carp_status.php:132 +#: usr/local/www/firewall_nat_out.php:478 +#: usr/local/www/firewall_nat_out_edit.php:604 +#: usr/local/www/firewall_nat_out.php:485 +#: usr/local/www/system_gateway_groups_edit.php:316 +#: usr/local/www/firewall_nat_out_edit.php:616 +#: usr/local/www/firewall_nat_out.php:484 +#: usr/local/www/firewall_nat_out.php:484 +#: usr/local/www/system_gateway_groups_edit.php:316 +#: usr/local/www/firewall_nat_out_edit.php:616 +#: usr/local/www/carp_status.php:132 +msgid "Virtual IP" +msgstr "仮想IP" + +#: usr/local/www/firewall_nat_out.php:470 +#: usr/local/www/firewall_nat_out.php:481 +#: usr/local/www/firewall_nat_out.php:482 +#: usr/local/www/firewall_nat_out.php:479 +#: usr/local/www/firewall_nat_out.php:486 +#: usr/local/www/firewall_nat_out.php:485 +#: usr/local/www/firewall_nat_out.php:485 +msgid " may also be required." +msgstr "ã¾ãŸå¿…è¦ã¨ã•れ得る。" + +#: usr/local/www/firewall_nat_out.php:472 +#: usr/local/www/firewall_nat_out.php:483 +#: usr/local/www/firewall_nat_out.php:484 +#: usr/local/www/firewall_nat_out.php:481 +#: usr/local/www/firewall_nat_out.php:488 +#: usr/local/www/firewall_nat_out.php:487 +#: usr/local/www/firewall_nat_out.php:487 +msgid "" +"To completely disable outbound NAT, switch to Manual Outbound NAT then " +"delete any NAT rules that appear in the list." +msgstr "「完全ã«ç„¡åйã«ã™ã‚‹ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NATã€æ‰‹å‹•アウトãƒã‚¦ãƒ³ãƒ‰NATã¸ã®åˆ‡ã‚Šæ›¿ãˆãŒã€ãã®å¾Œã«ã¯ã€Œãƒªã‚¹ãƒˆã«è¡¨ç¤ºã•れるã™ã¹ã¦ã®NATルールを削除。" + +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:140 +msgid "Source bit count" +msgstr "ソースビット数" + +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_rules_edit.php:310 +#: usr/local/www/firewall_rules_edit.php:334 +#: usr/local/www/firewall_rules_edit.php:333 +#: usr/local/www/firewall_rules_edit.php:336 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_rules_edit.php:342 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_rules_edit.php:342 +#: usr/local/www/firewall_nat_out_edit.php:140 +msgid "Destination bit count" +msgstr "å…ˆã®ãƒ“ット数" + +#: usr/local/www/firewall_nat_out_edit.php:137 +#: usr/local/www/firewall_nat_out_edit.php:150 +#: usr/local/www/firewall_nat_out_edit.php:154 +#: usr/local/www/firewall_nat_out_edit.php:160 +#: usr/local/www/firewall_nat_out_edit.php:160 +msgid "" +"You must supply either a valid port or port alias for the source port entry." +msgstr ""ã‚ãªãŸã¯ã€ã‚½ãƒ¼ã‚¹ãƒãƒ¼ãƒˆã®ã‚¨ãƒ³ãƒˆãƒªã®æœ‰åйãªãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆã®åˆ¥åã®ã„ãšã‚Œã‹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:153 +#: usr/local/www/firewall_nat_out_edit.php:157 +#: usr/local/www/firewall_nat_out_edit.php:163 +#: usr/local/www/firewall_nat_out_edit.php:163 +msgid "" +"You must supply either a valid port or port alias for the destination port " +"entry." +msgstr "エントリ"ã‚ãªãŸã¯ã€å®›å…ˆãƒãƒ¼ãƒˆã®æœ‰åйãªãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆã®åˆ¥åã®ã„ãšã‚Œã‹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/firewall_nat_out_edit.php:143 +#: usr/local/www/firewall_nat_out_edit.php:156 +#: usr/local/www/firewall_nat_out_edit.php:160 +#: usr/local/www/firewall_nat_out_edit.php:166 +#: usr/local/www/firewall_nat_out_edit.php:166 +msgid "You must supply a valid port for the NAT port entry." +msgstr "ã‚ãªãŸã¯ã€NATã®ãƒãƒ¼ãƒˆã‚¨ãƒ³ãƒˆãƒªã®æœ‰åйãªãƒãƒ¼ãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:147 +#: usr/local/www/firewall_nat_out_edit.php:160 +#: usr/local/www/firewall_nat_out_edit.php:164 +#: usr/local/www/firewall_nat_out_edit.php:170 +#: usr/local/www/firewall_nat_out_edit.php:170 +msgid "A valid source must be specified." +msgstr "有効ãªã‚½ãƒ¼ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:155 +#: usr/local/www/firewall_nat_out_edit.php:168 +#: usr/local/www/firewall_nat_out_edit.php:172 +#: usr/local/www/firewall_nat_out_edit.php:178 +#: usr/local/www/firewall_nat_out_edit.php:178 +msgid "A valid destination must be specified." +msgstr "有効ãªå®›å…ˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:163 +#: usr/local/www/firewall_nat_out_edit.php:176 +#: usr/local/www/firewall_nat_out_edit.php:180 +#: usr/local/www/firewall_nat_out_edit.php:186 +#: usr/local/www/firewall_nat_out_edit.php:186 +msgid "Negating destination address of "any" is invalid." +msgstr "ã®å¦å®šå®›å…ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã€Œanyã€ã¯ã€ç„¡åйã§ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:168 +#: usr/local/www/firewall_nat_out_edit.php:181 +#: usr/local/www/firewall_nat_out_edit.php:185 +#: usr/local/www/firewall_nat_out_edit.php:191 +#: usr/local/www/firewall_nat_out_edit.php:191 +msgid "A valid target IP address must be specified." +msgstr "有効ãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:173 +#: usr/local/www/firewall_nat_out_edit.php:186 +#: usr/local/www/firewall_nat_out_edit.php:190 +#: usr/local/www/firewall_nat_out_edit.php:196 +#: usr/local/www/firewall_nat_out_edit.php:196 +msgid "A valid target IP must be specified when using the 'Other Subnet' type." +msgstr "「ãã®ä»–サブãƒãƒƒãƒˆã€ã‚¿ã‚¤ãƒ—を使用ã—ã¦ã„ã‚‹å ´åˆã€æœ‰åйãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆIPを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:176 +#: usr/local/www/firewall_nat_out_edit.php:189 +#: usr/local/www/firewall_nat_out_edit.php:193 +#: usr/local/www/firewall_nat_out_edit.php:199 +#: usr/local/www/firewall_nat_out_edit.php:199 +msgid "" +"A valid target bit count must be specified when using the 'Other Subnet' " +"type." +msgstr "タイプ ""ãã®ä»–ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’「使用ã—ã¦ã„ã‚‹å ´åˆã€æœ‰åйãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/firewall_nat_out_edit.php:189 +#: usr/local/www/firewall_nat_out_edit.php:202 +#: usr/local/www/firewall_nat_out_edit.php:206 +#: usr/local/www/firewall_nat_out_edit.php:212 +#: usr/local/www/firewall_nat_out_edit.php:212 +msgid "Only Round Robin pool options may be chosen when selecting an alias." +msgstr "ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’é¸æŠžã™ã‚‹ã¨ãã«ã®ã¿ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ãƒ³Â·ãƒ—ãƒ¼ãƒ«Â·ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãる。" + +#: usr/local/www/firewall_nat_out_edit.php:403 +#: usr/local/www/firewall_nat_out_edit.php:416 +#: usr/local/www/firewall_nat_out_edit.php:420 +#: usr/local/www/firewall_nat_out_edit.php:432 +#: usr/local/www/firewall_nat_out_edit.php:432 +msgid "Edit Advanced Outbound NAT entry" +msgstr "編集高度ãªã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰ã®NATエントリ" + +#: usr/local/www/firewall_nat_out_edit.php:410 +#: usr/local/www/firewall_nat_out_edit.php:423 +#: usr/local/www/firewall_nat_out_edit.php:427 +#: usr/local/www/firewall_nat_out_edit.php:439 +#: usr/local/www/firewall_nat_out_edit.php:439 +msgid "Do not NAT" +msgstr "ã—ãªã„ã§ã€NAT" + +#: usr/local/www/firewall_nat_out_edit.php:413 +#: usr/local/www/firewall_nat_out_edit.php:426 +#: usr/local/www/firewall_nat_out_edit.php:430 +#: usr/local/www/firewall_nat_out_edit.php:442 +#: usr/local/www/firewall_nat_out_edit.php:442 +msgid "" +"Enabling this option will disable NAT for traffic matching this rule and " +"stop processing Outbound NAT rules." +msgstr ""ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒˆãƒ©ãƒ•ィックã®NATを無効ã«ã—ã¾ã™ã€Œã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NATルールã®å‡¦ç†ã‚’åœæ­¢ã™ã‚‹ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:414 +#: usr/local/www/firewall_nat_out_edit.php:427 +#: usr/local/www/firewall_nat_out_edit.php:431 +#: usr/local/www/firewall_nat_out_edit.php:443 +#: usr/local/www/firewall_nat_out_edit.php:443 +msgid "Hint: in most cases, you won't use this option." +msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã“ã®ã‚ªãƒ—ションを使用ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/firewall_nat_out_edit.php:463 +#: usr/local/www/firewall_nat_out_edit.php:476 +#: usr/local/www/firewall_nat_out_edit.php:480 +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:492 +msgid "Choose which protocol this rule should match." +msgstr "é¸æŠžã—ãŸã©ã®ãƒ—ロトコルã“ã®ãƒ«ãƒ¼ãƒ«ãŒä¸€è‡´ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:464 +#: usr/local/www/firewall_nat_out_edit.php:477 +#: usr/local/www/firewall_nat_out_edit.php:481 +#: usr/local/www/firewall_nat_out_edit.php:493 +#: usr/local/www/firewall_nat_out_edit.php:493 +#, php-format +msgid "Hint: in most cases, you should specify %s any %s here." +msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã‚ãªãŸã¯ã“ã“ã§ã©ã‚“ãª%s %s指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:488 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:517 +#: usr/local/www/firewall_nat_out_edit.php:519 +#: usr/local/www/firewall_nat_out_edit.php:519 +msgid "Enter the source network for the outbound NAT mapping." +msgstr "アウトãƒã‚¦ãƒ³ãƒ‰ã®NATマッピングã®ã‚½ãƒ¼ã‚¹Â·ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/firewall_nat_out_edit.php:491 +#: usr/local/www/firewall_nat_out_edit.php:504 +#: usr/local/www/firewall_nat_out_edit.php:508 +#: usr/local/www/firewall_nat_out_edit.php:520 +#: usr/local/www/firewall_nat_out_edit.php:522 +#: usr/local/www/firewall_nat_out_edit.php:522 +msgid "Source port:" +msgstr "é€ä¿¡å…ƒãƒãƒ¼ãƒˆï¼š" + +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:509 +#: usr/local/www/firewall_nat_out_edit.php:521 +msgid "" +"(leave \n" +"blank for any)" +msgstr "「 (任æ„ã®ç©ºç™½ã®\nã®ã¾ã¾ã«ã€ )" + +#: usr/local/www/firewall_nat_out_edit.php:526 +#: usr/local/www/firewall_nat_out_edit.php:539 +#: usr/local/www/firewall_nat_out_edit.php:543 +#: usr/local/www/firewall_nat_out_edit.php:555 +#: usr/local/www/firewall_nat_out_edit.php:556 +#: usr/local/www/firewall_nat_out_edit.php:556 +msgid "Enter the destination network for the outbound NAT mapping." +msgstr "アウトãƒã‚¦ãƒ³ãƒ‰ã®NATマッピングã®ãŸã‚ã«å®›å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’入力ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:530 +#: usr/local/www/firewall_nat_out_edit.php:543 +#: usr/local/www/firewall_nat_out_edit.php:547 +#: usr/local/www/firewall_nat_out_edit.php:559 +#: usr/local/www/firewall_nat_out_edit.php:560 +#: usr/local/www/firewall_nat_out_edit.php:560 +msgid "Destination port:" +msgstr "宛先ãƒãƒ¼ãƒˆï¼š" + +#: usr/local/www/firewall_nat_out_edit.php:531 +#: usr/local/www/firewall_nat_out_edit.php:544 +#: usr/local/www/firewall_nat_out_edit.php:548 +#: usr/local/www/firewall_nat_out_edit.php:560 +msgid "" +"(leave blank for \n" +"any)" +msgstr "「 (ã„ãšã‚Œã‹ã‚’\nã¯ç©ºç™½ã®ã¾ã¾ã«ã€ )" + +#: usr/local/www/firewall_nat_out_edit.php:538 +#: usr/local/www/firewall_nat_out_edit.php:551 +#: usr/local/www/firewall_nat_out_edit.php:555 +#: usr/local/www/firewall_nat_out_edit.php:567 +#: usr/local/www/firewall_nat_out_edit.php:567 +msgid "Translation" +msgstr "翻訳" + +#: usr/local/www/firewall_nat_out_edit.php:544 +#: usr/local/www/firewall_nat_out_edit.php:557 +#: usr/local/www/firewall_nat_out_edit.php:561 +#: usr/local/www/firewall_nat_out_edit.php:573 +#: usr/local/www/firewall_nat_out_edit.php:573 +msgid "Interface address" +msgstr "インターフェース·アドレス" + +#: usr/local/www/firewall_nat_out_edit.php:568 +#: usr/local/www/firewall_nat_out_edit.php:581 +#: usr/local/www/firewall_nat_out_edit.php:585 +#: usr/local/www/firewall_nat_out_edit.php:597 +#: usr/local/www/firewall_nat_out_edit.php:597 +msgid "Other Subnet (Enter Below)" +msgstr "ä»–ã®ã‚µãƒ–ãƒãƒƒãƒˆï¼ˆä¸‹è¨˜ã«å…¥åŠ›ï¼‰" + +#: usr/local/www/firewall_nat_out_edit.php:575 +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/firewall_nat_out_edit.php:591 +#: usr/local/www/firewall_nat_out_edit.php:603 +#: usr/local/www/firewall_nat_out_edit.php:603 +msgid "Other Subnet:" +msgstr "ãã®ä»–サブãƒãƒƒãƒˆï¼š" + +#: usr/local/www/firewall_nat_out_edit.php:586 +#: usr/local/www/firewall_nat_out_edit.php:599 +#: usr/local/www/firewall_nat_out_edit.php:602 +#: usr/local/www/firewall_nat_out_edit.php:614 +#: usr/local/www/firewall_nat_out_edit.php:614 +msgid "Packets matching this rule will be mapped to the IP address given here." +msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒ‘ケットã¯ã€ã“ã“ã§æŒ‡å®šã—ãŸIPアドレスã«ãƒžãƒƒãƒ”ングã•れã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:587 +#: usr/local/www/firewall_nat_out_edit.php:600 +#: usr/local/www/firewall_nat_out_edit.php:603 +#: usr/local/www/firewall_nat_out_edit.php:615 +#: usr/local/www/firewall_nat_out_edit.php:615 +msgid "" +"If you want this rule to apply to another IP address rather than the IP " +"address of the interface chosen above, select it here (you will need to " +"define " +msgstr "ä¸Šè¨˜é¸æŠžã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒã€Œã“ã®ãƒ«ãƒ¼ãƒ«ã¯IPã§ã¯ãªã別ã®IPアドレスã«é©ç”¨ã™ã‚‹å ´åˆã¯ã€ã€Œ (ã‚ãªãŸã¯ã€Œå®šç¾©ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ã“ã“ã§ãã‚Œã‚’é¸æŠž" + +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/firewall_nat_out_edit.php:601 +#: usr/local/www/firewall_nat_out_edit.php:604 +#: usr/local/www/firewall_nat_out_edit.php:616 +#: usr/local/www/firewall_nat_out_edit.php:616 +msgid "addresses on the interface first)." +msgstr "インターフェイス上ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæœ€åˆï¼‰ 。" + +#: usr/local/www/firewall_nat_out_edit.php:589 +#: usr/local/www/firewall_nat_out_edit.php:602 +msgid "" +"Also note that if you are trying to redirect connections on the LAN select " +"the "any" option." +msgstr ""ã™ã¹ã¦ã®"オプション"ã¾ãŸã€ã‚ãªãŸã¯ã€LANä¸Šã®æŽ¥ç¶šã‚’ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—よã†ã¨ã™ã‚‹å ´åˆã«é¸æŠžã—ã¦ã„ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/firewall_nat_out_edit.php:605 +#: usr/local/www/firewall_nat_out_edit.php:618 +#: usr/local/www/firewall_nat_out_edit.php:620 +#: usr/local/www/firewall_nat_out_edit.php:632 +#: usr/local/www/firewall_nat_out_edit.php:632 +msgid "" +"Only Round Robin types work with Host Aliases. Any type can be used with a " +"Subnet." +msgstr ""唯一ã®ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ン·タイプã¯ã€ãƒ›ã‚¹ãƒˆåˆ¥åã§å‹•作ã—ã¾ã™ã€‚ä»»æ„ã®ã‚¿ã‚¤ãƒ—ã§ä½¿ç”¨ã§ãる「サブãƒãƒƒãƒˆã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:606 +#: usr/local/www/firewall_nat_out_edit.php:619 +#: usr/local/www/firewall_nat_out_edit.php:621 +#: usr/local/www/firewall_nat_out_edit.php:633 +#: usr/local/www/firewall_nat_out_edit.php:633 +msgid "Round Robin: Loops through the translation addresses." +msgstr "ラウンドロビン:翻訳·アドレスをループã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:607 +#: usr/local/www/firewall_nat_out_edit.php:620 +#: usr/local/www/firewall_nat_out_edit.php:622 +#: usr/local/www/firewall_nat_out_edit.php:634 +#: usr/local/www/firewall_nat_out_edit.php:634 +msgid "Random: Selects an address from the translation address pool at random." +msgstr "ランダム:ランダムã«å¤‰æ›ã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ—ールã‹ã‚‰ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’é¸æŠžã™ã‚‹ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:608 +#: usr/local/www/firewall_nat_out_edit.php:621 +#: usr/local/www/firewall_nat_out_edit.php:623 +#: usr/local/www/firewall_nat_out_edit.php:635 +#: usr/local/www/firewall_nat_out_edit.php:635 +msgid "" +"Source Hash: Uses a hash of the source address to determine the translation " +"address, ensuring that the redirection address is always the same for a " +"given source." +msgstr "リダイレクションアドレスãŒã€Œä¸Žãˆã‚‰ã‚ŒãŸã‚½ãƒ¼ã‚¹ã®ãŸã‚ã«ã€å¸¸ã«åŒã˜ã§ã‚ã‚‹ã“ã¨ã‚’ä¿è¨¼ã—ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ï¼š 「ソースãƒãƒƒã‚·ãƒ¥ã¯ç¿»è¨³ã‚’決定ã™ã‚‹ãŸã‚ã«ã€é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã®ãƒãƒƒã‚·ãƒ¥ã‚’使用ã—ã¾ã™ã€ 。" + +#: usr/local/www/firewall_nat_out_edit.php:609 +#: usr/local/www/firewall_nat_out_edit.php:622 +#: usr/local/www/firewall_nat_out_edit.php:624 +#: usr/local/www/firewall_nat_out_edit.php:636 +#: usr/local/www/firewall_nat_out_edit.php:636 +msgid "" +"Bitmask: Applies the subnet mask and keeps the last portion identical; " +"10.0.1.50 -> x.x.x.50." +msgstr "「ビットマスク:サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚’é©ç”¨ã—ã€åŒä¸€ã®æœ€å¾Œã®éƒ¨åˆ†ã‚’ä¿æŒã—〠「 10.0.1.50㯠- u003e xxx50 。" + +#: usr/local/www/firewall_nat_out_edit.php:610 +#: usr/local/www/firewall_nat_out_edit.php:623 +#: usr/local/www/firewall_nat_out_edit.php:625 +#: usr/local/www/firewall_nat_out_edit.php:637 +#: usr/local/www/firewall_nat_out_edit.php:637 +msgid "" +"Sticky Address: The Sticky Address option can be used with the Random and " +"Round Robin pool types to ensure that a particular source address is always " +"mapped to the same translation address." +msgstr "ã€Œã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ¼ä½æ‰€ï¼šã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚ªãƒ—ションãŒãƒ©ãƒ³ãƒ€ãƒ ã§ä¸€ç·’ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã€ã¨ã¯ã€ç‰¹å®šã®é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€å¸¸ã«ã€ŒåŒã˜å¤‰æ›ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ãƒžãƒƒãƒ—ã•れã¦ã„ã‚‹ã“ã¨ã‚’ä¿è¨¼ã™ã‚‹ãŸã‚ã«ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ンプールタイプ。" + +#: usr/local/www/firewall_nat_out_edit.php:615 +#: usr/local/www/firewall_nat_out_edit.php:628 +#: usr/local/www/firewall_nat_out_edit.php:630 +#: usr/local/www/firewall_nat_out_edit.php:642 +#: usr/local/www/firewall_nat_out_edit.php:642 +msgid "Port:" +msgstr "ãƒãƒ¼ãƒˆï¼š" + +#: usr/local/www/firewall_nat_out_edit.php:619 +#: usr/local/www/firewall_nat_out_edit.php:632 +#: usr/local/www/firewall_nat_out_edit.php:634 +#: usr/local/www/firewall_nat_out_edit.php:646 +#: usr/local/www/firewall_nat_out_edit.php:646 +msgid "Enter the source port for the outbound NAT mapping." +msgstr "アウトãƒã‚¦ãƒ³ãƒ‰ã®NATマッピングã®ãŸã‚ã«é€ä¿¡å…ƒãƒãƒ¼ãƒˆã‚’入力ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_out_edit.php:622 +#: usr/local/www/firewall_nat_out_edit.php:635 +#: usr/local/www/firewall_nat_out_edit.php:637 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/firewall_nat_out_edit.php:649 +msgid "Static-port:" +msgstr "é™çš„ãƒãƒ¼ãƒˆï¼š" + +#: usr/local/www/firewall_nat_out_edit.php:632 +#: usr/local/www/firewall_nat_out_edit.php:645 +msgid "" +"HINT: This prevents the rule from automatically syncing to other CARP " +"members." +msgstr ""ヒント:ã“れã¯ã€è‡ªå‹•çš„ã«ä»–ã®CARPã¨åŒæœŸã‹ã‚‰ãƒ«ãƒ¼ãƒ«ã‚’防ãã€ã®ãƒ¡ãƒ³ãƒãƒ¼ã€‚" + +#: usr/local/www/firewall_rules.php:52 +#: usr/local/www/firewall_rules_edit.php:628 usr/local/www/fbegin.inc:112 +#: usr/local/www/fbegin.inc:129 usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/fbegin.inc:138 usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/firewall_rules.php:49 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/diag_system_pftop.php:139 usr/local/www/fbegin.inc:130 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/diag_system_pftop.php:139 usr/local/www/firewall_rules.php:49 +#: usr/local/www/fbegin.inc:130 +msgid "Rules" +msgstr "ルール" + +#: usr/local/www/firewall_rules.php:129 +#: usr/local/www/firewall_rules_edit.php:828 +#: usr/local/www/firewall_rules_edit.php:863 +#: usr/local/www/firewall_rules.php:127 +#: usr/local/www/firewall_rules_edit.php:866 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules.php:127 +msgid "Echo request" +msgstr "ã‚¨ã‚³ãƒ¼è¦æ±‚" + +#: usr/local/www/firewall_rules.php:130 +#: usr/local/www/firewall_rules_edit.php:829 +#: usr/local/www/firewall_rules_edit.php:864 +#: usr/local/www/firewall_rules.php:128 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules.php:128 +msgid "Echo reply" +msgstr "エコー応答" + +#: usr/local/www/firewall_rules.php:131 +#: usr/local/www/firewall_rules_edit.php:830 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules.php:129 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules.php:129 +msgid "Destination unreachable" +msgstr "宛先到é”ä¸èƒ½" + +#: usr/local/www/firewall_rules.php:132 +#: usr/local/www/firewall_rules_edit.php:831 +#: usr/local/www/firewall_rules_edit.php:866 +#: usr/local/www/firewall_rules.php:130 +#: usr/local/www/firewall_rules_edit.php:869 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules.php:130 +msgid "Source quench" +msgstr "é€ä¿¡å…ƒæŠ‘制" + +#: usr/local/www/firewall_rules.php:133 +#: usr/local/www/firewall_rules_edit.php:832 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_rules.php:131 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules_edit.php:882 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules.php:131 +msgid "Redirect" +msgstr "リダイレクト" + +#: usr/local/www/firewall_rules.php:134 +#: usr/local/www/firewall_rules_edit.php:833 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_rules.php:132 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules_edit.php:883 +#: usr/local/www/firewall_rules_edit.php:882 +#: usr/local/www/firewall_rules_edit.php:882 +#: usr/local/www/firewall_rules.php:132 +msgid "Alternate Host" +msgstr "中間宿主" + +#: usr/local/www/firewall_rules.php:135 +#: usr/local/www/firewall_rules_edit.php:834 +#: usr/local/www/firewall_rules_edit.php:869 +#: usr/local/www/firewall_rules.php:133 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules_edit.php:884 +#: usr/local/www/firewall_rules_edit.php:883 +#: usr/local/www/firewall_rules_edit.php:883 +#: usr/local/www/firewall_rules.php:133 +msgid "Router advertisement" +msgstr "ルーター通知" + +#: usr/local/www/firewall_rules.php:136 +#: usr/local/www/firewall_rules_edit.php:835 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules.php:134 +#: usr/local/www/firewall_rules_edit.php:873 +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules_edit.php:884 +#: usr/local/www/firewall_rules_edit.php:884 +#: usr/local/www/firewall_rules.php:134 +msgid "Router solicitation" +msgstr "ルータè¦è«‹" + +#: usr/local/www/firewall_rules.php:137 +#: usr/local/www/firewall_rules_edit.php:836 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules.php:135 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules.php:135 +msgid "Time exceeded" +msgstr "時間超éŽ" + +#: usr/local/www/firewall_rules.php:138 +#: usr/local/www/firewall_rules_edit.php:837 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules.php:136 +#: usr/local/www/firewall_rules_edit.php:875 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules.php:136 +msgid "Invalid IP header" +msgstr "無効ãªIPヘッダー" + +#: usr/local/www/firewall_rules.php:139 +#: usr/local/www/firewall_rules_edit.php:838 +#: usr/local/www/firewall_rules_edit.php:873 +#: usr/local/www/firewall_rules.php:137 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules_edit.php:888 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules.php:137 +msgid "Timestamp" +msgstr "タイムスタンプ" + +#: usr/local/www/firewall_rules.php:140 +#: usr/local/www/firewall_rules_edit.php:839 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules.php:138 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:889 +#: usr/local/www/firewall_rules_edit.php:888 +#: usr/local/www/firewall_rules_edit.php:888 +#: usr/local/www/firewall_rules.php:138 +msgid "Timestamp reply" +msgstr "タイムスタンプ応答" + +#: usr/local/www/firewall_rules.php:141 +#: usr/local/www/firewall_rules_edit.php:840 +#: usr/local/www/firewall_rules_edit.php:875 +#: usr/local/www/firewall_rules.php:139 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules_edit.php:889 +#: usr/local/www/firewall_rules_edit.php:889 +#: usr/local/www/firewall_rules.php:139 +msgid "Information request" +msgstr "æƒ…å ±è¦æ±‚" + +#: usr/local/www/firewall_rules.php:142 +#: usr/local/www/firewall_rules_edit.php:841 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules.php:140 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules_edit.php:891 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules.php:140 +msgid "Information reply" +msgstr "情報応答" + +#: usr/local/www/firewall_rules.php:143 +#: usr/local/www/firewall_rules_edit.php:842 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules.php:141 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:892 +#: usr/local/www/firewall_rules_edit.php:891 +#: usr/local/www/firewall_rules_edit.php:891 +#: usr/local/www/firewall_rules.php:141 +msgid "Address mask request" +msgstr "ã‚¢ãƒ‰ãƒ¬ã‚¹ãƒžã‚¹ã‚¯è¦æ±‚" + +#: usr/local/www/firewall_rules.php:144 +#: usr/local/www/firewall_rules_edit.php:843 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules.php:142 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules_edit.php:893 +#: usr/local/www/firewall_rules_edit.php:892 +#: usr/local/www/firewall_rules_edit.php:892 +#: usr/local/www/firewall_rules.php:142 +msgid "Address mask reply" +msgstr "アドレスマスク応答" + +#: usr/local/www/firewall_rules.php:201 usr/local/www/firewall_rules.php:205 +#: usr/local/www/firewall_rules.php:203 usr/local/www/firewall_rules.php:203 +#, php-format +msgid "" +"The settings have been applied. The firewall rules are now reloading in the " +"background.
    You can also %s monitor %s the reload progress" +msgstr "「設定ãŒé©ç”¨ã•れã¦ã„ã¾ã™ã€‚ファイアウォールã®ãƒ«ãƒ¼ãƒ«ã¯ä»Šã«ãƒªãƒ­ãƒ¼ãƒ‰ã•れる「 background.
    Youã“ã¨ã‚‚モニターãŒãƒªãƒ­ãƒ¼ãƒ‰ã®é€²è¡Œçжæ³ã‚’%s %sã§ã" + +#: usr/local/www/firewall_rules.php:315 usr/local/www/firewall_rules.php:317 +#: usr/local/www/firewall_rules.php:319 usr/local/www/firewall_rules.php:321 +#: usr/local/www/firewall_rules.php:312 usr/local/www/firewall_rules.php:314 +msgid "" +"The firewall rule configuration has been changed.
    You must apply the " +"changes in order for them to take effect." +msgstr "「ファイアウォールルールã®è¨­å®šãŒå¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚ã‚ãªãŸãŒé©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ãƒã‚¹ã‚¿ãƒ¼ã€Œãれらを有効ã«ã™ã‚‹ãŸã‚ã«å¤‰æ›´ã‚’。" + +#: usr/local/www/firewall_rules.php:338 usr/local/www/firewall_rules.php:342 +#: usr/local/www/firewall_rules.php:335 usr/local/www/firewall_rules.php:334 +#: usr/local/www/firewall_rules.php:334 +msgid "Floating" +msgstr "フローティング" + +#: usr/local/www/firewall_rules.php:359 +#: usr/local/www/load_balancer_relay_action_edit.php:510 +#: usr/local/www/load_balancer_relay_action_edit.php:509 +#: usr/local/www/firewall_rules.php:363 +#: usr/local/www/load_balancer_relay_action_edit.php:507 +#: usr/local/www/firewall_rules.php:356 usr/local/www/firewall_rules.php:354 +#: usr/local/www/load_balancer_relay_action_edit.php:507 +#: usr/local/www/firewall_rules.php:354 +msgid "ID" +msgstr "ID" + +#: usr/local/www/firewall_rules.php:368 +#: usr/local/www/firewall_rules_edit.php:1288 usr/local/www/interfaces.php:420 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1382 +#: usr/local/www/system_routes.php:127 usr/local/www/system_routes_edit.php:91 +#: usr/local/www/system_routes_edit.php:199 +#: usr/local/www/services_dhcp.php:655 usr/local/www/status_gateways.php:73 +#: usr/local/www/system_gateways.php:154 +#: usr/local/www/system_gateways_edit.php:376 +#: usr/local/www/services_dhcpv6.php:599 +#: usr/local/www/system_routes_edit.php:92 +#: usr/local/www/system_routes_edit.php:231 +#: usr/local/www/firewall_rules_edit.php:1355 +#: usr/local/www/firewall_rules.php:372 +#: usr/local/www/system_gateways_edit.php:397 +#: usr/local/www/services_dhcp.php:668 usr/local/www/interfaces.php:456 +#: usr/local/www/interfaces.php:509 usr/local/www/interfaces.php:1486 +#: usr/local/www/system_routes_edit.php:232 +#: usr/local/www/firewall_rules.php:365 +#: usr/local/www/system_gateways_edit.php:503 +#: usr/local/www/status_gateways.php:74 usr/local/www/services_dhcp.php:844 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:1474 +#: usr/local/www/system_gateways_edit.php:506 +#: usr/local/www/firewall_rules_edit.php:1370 +#: usr/local/www/services_dhcp_edit.php:410 +#: usr/local/www/diag_traceroute.php:98 usr/local/www/system_routes.php:131 +#: usr/local/www/services_dhcp.php:858 usr/local/www/interfaces.php:441 +#: usr/local/www/interfaces.php:494 usr/local/www/interfaces.php:1487 +#: usr/local/www/system_gateways_edit.php:508 +#: usr/local/www/firewall_rules_edit.php:1377 +#: usr/local/www/services_dhcp.php:878 usr/local/www/system_routes_edit.php:95 +#: usr/local/www/system_routes_edit.php:259 +#: usr/local/www/firewall_rules.php:363 usr/local/www/interfaces.php:446 +#: usr/local/www/interfaces.php:499 usr/local/www/interfaces.php:1532 +#: usr/local/www/system_gateways_edit.php:538 +#: usr/local/www/firewall_rules_edit.php:1388 +#: usr/local/www/system_routes.php:147 +#: usr/local/www/system_routes_edit.php:261 usr/local/www/interfaces.php:442 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1526 +#: usr/local/www/system_gateways_edit.php:538 +#: usr/local/www/firewall_rules_edit.php:1388 +#: usr/local/www/services_dhcp_edit.php:410 +#: usr/local/www/system_routes.php:147 usr/local/www/services_dhcp.php:878 +#: usr/local/www/system_routes_edit.php:97 +#: usr/local/www/system_routes_edit.php:255 +#: usr/local/www/firewall_rules.php:363 usr/local/www/system_gateways.php:154 +#: usr/local/www/status_gateways.php:74 usr/local/www/interfaces.php:442 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1526 +msgid "Gateway" +msgstr "ゲートウェイ" + +#: usr/local/www/firewall_rules.php:369 usr/local/www/status_queues.php:135 +#: usr/local/www/status_queues.php:142 usr/local/www/firewall_rules.php:373 +#: usr/local/www/status_queues.php:143 usr/local/www/firewall_rules.php:366 +#: usr/local/www/diag_system_pftop.php:138 usr/local/www/status_queues.php:148 +#: usr/local/www/firewall_rules.php:364 +#: usr/local/www/diag_system_pftop.php:138 +#: usr/local/www/firewall_rules.php:364 usr/local/www/status_queues.php:148 +msgid "Queue" +msgstr "キュー" + +#: usr/local/www/firewall_rules.php:370 +#: usr/local/www/firewall_rules_edit.php:1261 +#: usr/local/www/firewall_rules_edit.php:1328 +#: usr/local/www/firewall_rules.php:374 usr/local/www/firewall_rules.php:367 +#: usr/local/www/firewall_rules_edit.php:1343 +#: usr/local/www/firewall_rules_edit.php:1350 +#: usr/local/www/firewall_rules.php:365 +#: usr/local/www/firewall_rules_edit.php:1361 +#: usr/local/www/firewall_rules_edit.php:1361 +#: usr/local/www/firewall_rules.php:365 +msgid "Schedule" +msgstr "スケジュール" + +#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:824 +#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:334 +#: usr/local/www/firewall_rules.php:396 usr/local/www/firewall_rules.php:825 +#: usr/local/www/firewall_nat.php:216 usr/local/www/firewall_nat.php:347 +#: usr/local/www/firewall_rules.php:389 usr/local/www/firewall_rules.php:818 +#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:820 +#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:350 +#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:350 +#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:820 +msgid "Do you really want to delete the selected rules?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€é¸æŠžã—ãŸãƒ«ãƒ¼ãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/firewall_rules.php:394 usr/local/www/firewall_rules.php:794 +#: usr/local/www/firewall_rules.php:826 usr/local/www/firewall_rules.php:398 +#: usr/local/www/firewall_rules.php:795 usr/local/www/firewall_rules.php:827 +#: usr/local/www/firewall_rules.php:391 usr/local/www/firewall_rules.php:788 +#: usr/local/www/firewall_rules.php:820 usr/local/www/firewall_rules.php:390 +#: usr/local/www/firewall_rules.php:789 usr/local/www/firewall_rules.php:823 +#: usr/local/www/firewall_rules.php:390 usr/local/www/firewall_rules.php:789 +#: usr/local/www/firewall_rules.php:823 +msgid "add new rule" +msgstr "æ–°ã—ã„ルールを追加" + +#: usr/local/www/firewall_rules.php:431 usr/local/www/firewall_rules.php:425 +#: usr/local/www/firewall_rules.php:418 usr/local/www/firewall_rules.php:417 +#: usr/local/www/firewall_rules.php:417 +msgid "Anti-Lockout Rule" +msgstr "アンãƒãƒ­ãƒƒã‚¯ã‚¢ã‚¦ãƒˆãƒ«ãƒ¼ãƒ«" + +#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:469 +#: usr/local/www/firewall_rules.php:497 usr/local/www/firewall_rules.php:780 +#: usr/local/www/firewall_rules.php:434 usr/local/www/firewall_rules.php:463 +#: usr/local/www/firewall_rules.php:491 usr/local/www/firewall_rules.php:777 +#: usr/local/www/firewall_rules.php:427 usr/local/www/firewall_rules.php:456 +#: usr/local/www/firewall_rules.php:484 usr/local/www/firewall_rules.php:770 +#: usr/local/www/firewall_rules.php:426 usr/local/www/firewall_rules.php:455 +#: usr/local/www/firewall_rules.php:483 usr/local/www/firewall_rules.php:426 +#: usr/local/www/firewall_rules.php:455 usr/local/www/firewall_rules.php:483 +#: usr/local/www/firewall_rules.php:770 +msgid "add a new rule based on this one" +msgstr "ã“ã®1ã«åŸºã¥ã„ã¦ã€æ–°ã—ã„ルールを追加" + +#: usr/local/www/firewall_rules.php:453 usr/local/www/firewall_rules.php:447 +#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:439 +#: usr/local/www/firewall_rules.php:439 +msgid "RFC 1918 networks" +msgstr "RFC 1918ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/firewall_rules.php:460 usr/local/www/interfaces.php:2414 +#: usr/local/www/firewall_rules.php:454 usr/local/www/interfaces.php:2615 +#: usr/local/www/firewall_rules.php:447 usr/local/www/interfaces.php:2603 +#: usr/local/www/interfaces.php:2633 usr/local/www/firewall_rules.php:446 +#: usr/local/www/interfaces.php:2679 usr/local/www/interfaces.php:2668 +#: usr/local/www/firewall_rules.php:446 usr/local/www/interfaces.php:2668 +msgid "Block private networks" +msgstr "プライベートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’ブロックã™ã‚‹" + +#: usr/local/www/firewall_rules.php:481 usr/local/www/firewall_rules.php:475 +#: usr/local/www/firewall_rules.php:468 usr/local/www/firewall_rules.php:467 +#: usr/local/www/firewall_rules.php:467 +msgid "Reserved/not assigned by IANA" +msgstr "予約済ã¿/ IANAã«ã‚ˆã£ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„" + +#: usr/local/www/firewall_rules.php:488 usr/local/www/interfaces.php:2426 +#: usr/local/www/firewall_rules.php:482 usr/local/www/interfaces.php:2627 +#: usr/local/www/firewall_rules.php:475 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2645 usr/local/www/firewall_rules.php:474 +#: usr/local/www/interfaces.php:2691 usr/local/www/interfaces.php:2680 +#: usr/local/www/firewall_rules.php:474 usr/local/www/interfaces.php:2680 +msgid "Block bogon networks" +msgstr "ブロックbogonãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/firewall_rules.php:513 usr/local/www/firewall_rules.php:507 +#: usr/local/www/firewall_rules.php:500 usr/local/www/firewall_rules.php:499 +#: usr/local/www/firewall_rules.php:499 +msgid "advanced settings set" +msgstr "高度ãªè¨­å®šã¯ã€è¨­å®š" + +#: usr/local/www/firewall_rules.php:537 usr/local/www/firewall_rules.php:531 +#: usr/local/www/firewall_rules.php:524 usr/local/www/firewall_rules.php:524 +msgid "click to toggle enabled/disabled status" +msgstr "有効/無効状態を切り替ãˆã‚‹ã‚’クリックã—ã¾ã™" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:846 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:845 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:845 +#: usr/local/www/firewall_rules.php:561 +msgid "Mon" +msgstr "モン" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560 +#: usr/local/www/firewall_rules.php:561 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:561 +msgid "Tues" +msgstr "ç«æ›œ" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:848 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:847 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:847 +#: usr/local/www/firewall_rules.php:561 +msgid "Wed" +msgstr "çµå©š" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560 +#: usr/local/www/firewall_rules.php:561 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:561 +msgid "Thur" +msgstr "木" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:850 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:849 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:849 +#: usr/local/www/firewall_rules.php:561 +msgid "Fri" +msgstr "金" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:851 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:850 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:850 +#: usr/local/www/firewall_rules.php:561 +msgid "Sat" +msgstr "土" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:852 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:851 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:851 +#: usr/local/www/firewall_rules.php:561 +msgid "Sun" +msgstr "太陽" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "January" +msgstr "1月" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "February" +msgstr "2月" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "March" +msgstr "3月" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "April" +msgstr "4月" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "May" +msgstr "5月" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "June" +msgstr "6月" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "July" +msgstr "7月" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "August" +msgstr "8月" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "September" +msgstr "9月" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "October" +msgstr "10月" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "November" +msgstr "11月" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:562 +msgid "December" +msgstr "12月" + +#: usr/local/www/firewall_rules.php:685 usr/local/www/firewall_rules.php:679 +#: usr/local/www/firewall_rules.php:672 usr/local/www/firewall_rules.php:671 +#: usr/local/www/firewall_rules.php:671 +msgid "Traffic matching this rule is currently being denied" +msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒˆãƒ©ãƒ•ィックã¯ç¾åœ¨ã€æ‹’å¦ã•れã¦ã„ã‚‹" + +#: usr/local/www/firewall_rules.php:690 usr/local/www/firewall_rules.php:684 +#: usr/local/www/firewall_rules.php:677 usr/local/www/firewall_rules.php:674 +#: usr/local/www/firewall_rules.php:674 +msgid "Traffic matching this rule is currently being allowed" +msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒˆãƒ©ãƒ•ィックã¯ã€ç¾åœ¨è¨±å¯ã•れã¦ã„ã¾ã™" + +#: usr/local/www/firewall_rules.php:700 usr/local/www/firewall_rules.php:694 +#: usr/local/www/firewall_rules.php:687 usr/local/www/firewall_rules.php:682 +#: usr/local/www/firewall_rules.php:682 +msgid "This rule is not currently active because its period has expired" +msgstr "ãã®æœŸé–“ãŒæº€äº†ã—ãŸãŸã‚ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã¯ã€ç¾åœ¨ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã¯ã‚りã¾ã›ã‚“" + +#: usr/local/www/firewall_rules.php:792 usr/local/www/firewall_rules.php:785 +#: usr/local/www/firewall_rules.php:786 usr/local/www/firewall_rules.php:786 +msgid "No rules are currently defined for this interface" +msgstr "何ã®ãƒ«ãƒ¼ãƒ«ã¯ç¾åœ¨ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ãŸã‚ã«å®šç¾©ã•れã¦ã„ã¾ã›ã‚“" + +#: usr/local/www/firewall_rules.php:793 usr/local/www/firewall_rules.php:786 +#: usr/local/www/firewall_rules.php:787 usr/local/www/firewall_rules.php:787 +msgid "" +"All incoming connections on this interface will be blocked until you add " +"pass rules." +msgstr "パスルールã€ã‚’追加ã™ã‚‹ã¾ã§ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ã™ã¹ã¦ã®ç€ä¿¡æŽ¥ç¶šãŒãƒ–ロックã•れã¾ã™ã€ 。" + +#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795 +#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:789 +#: usr/local/www/firewall_rules.php:789 +msgid "Click the" +msgstr "クリック" + +#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795 +#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:789 +#: usr/local/www/firewall_rules.php:789 +msgid " button to add a new rule." +msgstr "æ–°ã—ã„ルールを追加ã™ã‚‹ãŸã‚ã®ãƒœã‚¿ãƒ³ã€‚" + +#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_nat.php:327 +#: usr/local/www/firewall_rules.php:818 usr/local/www/firewall_nat.php:340 +#: usr/local/www/firewall_rules.php:811 usr/local/www/firewall_rules.php:813 +#: usr/local/www/firewall_nat.php:343 usr/local/www/firewall_nat.php:343 +#: usr/local/www/firewall_rules.php:813 +msgid "move selected rules to end" +msgstr "終了ã™ã‚‹ã«ã¯ã€é¸æŠžã—ãŸãƒ«ãƒ¼ãƒ«ã‚’移動" + +#: usr/local/www/firewall_rules.php:835 usr/local/www/firewall_nat.php:345 +#: usr/local/www/firewall_rules.php:836 usr/local/www/firewall_nat.php:358 +#: usr/local/www/firewall_rules.php:829 usr/local/www/firewall_rules.php:832 +#: usr/local/www/firewall_nat.php:361 usr/local/www/firewall_nat.php:361 +#: usr/local/www/firewall_rules.php:832 +msgid "pass" +msgstr "åˆæ ¼" + +#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:839 +#: usr/local/www/firewall_rules.php:832 usr/local/www/firewall_rules.php:835 +#: usr/local/www/firewall_rules.php:835 +msgid "block" +msgstr "ブロック" + +#: usr/local/www/firewall_rules.php:841 usr/local/www/license.php:125 +#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:835 +#: usr/local/www/firewall_rules.php:838 usr/local/www/license.php:125 +#: usr/local/www/firewall_rules.php:838 +msgid "reject" +msgstr "æ‹’çµ¶ã™ã‚‹" + +#: usr/local/www/firewall_rules.php:844 usr/local/www/firewall_rules.php:845 +#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:841 +#: usr/local/www/firewall_rules.php:841 +msgid "log" +msgstr "ログ" + +#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:849 +#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:845 +#: usr/local/www/firewall_rules.php:845 +msgid "pass (disabled)" +msgstr "åˆæ ¼ï¼ˆç„¡åŠ¹ï¼‰" + +#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:852 +#: usr/local/www/firewall_rules.php:845 usr/local/www/firewall_rules.php:848 +#: usr/local/www/firewall_rules.php:848 +msgid "block (disabled)" +msgstr "ブロック(無効)" + +#: usr/local/www/firewall_rules.php:854 usr/local/www/firewall_rules.php:855 +#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:851 +#: usr/local/www/firewall_rules.php:851 +msgid "reject (disabled)" +msgstr "æ‹’å¦ï¼ˆç„¡åŠ¹ï¼‰" + +#: usr/local/www/firewall_rules.php:857 usr/local/www/firewall_rules.php:858 +#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:854 +#: usr/local/www/firewall_rules.php:854 +msgid "log (disabled)" +msgstr "LOG(使用ä¸å¯ï¼‰" + +#: usr/local/www/firewall_rules.php:863 +#: usr/local/www/load_balancer_pool.php:148 usr/local/www/vpn_l2tp.php:354 +#: usr/local/www/vpn_l2tp.php:371 usr/local/www/firewall_rules.php:864 +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/firewall_rules.php:857 usr/local/www/vpn_l2tp.php:355 +#: usr/local/www/vpn_l2tp.php:372 usr/local/www/load_balancer_pool.php:147 +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:375 +#: usr/local/www/firewall_rules.php:860 usr/local/www/vpn_l2tp.php:358 +#: usr/local/www/vpn_l2tp.php:375 usr/local/www/load_balancer_pool.php:147 +#: usr/local/www/firewall_rules.php:860 +msgid "Hint:" +msgstr "ヒント:" + +#: usr/local/www/firewall_rules.php:867 usr/local/www/firewall_rules.php:868 +#: usr/local/www/firewall_rules.php:861 usr/local/www/firewall_rules.php:864 +#: usr/local/www/firewall_rules.php:864 +msgid "" +"Rules are evaluated on a first-match basis (i.e. the action of the first " +"rule to match a packet will be executed). This means that if you use block " +"rules, you'll have to pay attention to the rule order. Everything that isn't " +"explicitly passed is blocked by default. " +msgstr "「 (パケットã¨ä¸€è‡´ã™ã‚‹ãƒ«ãƒ¼ãƒ«ãŒå®Ÿè¡Œã•れã¾ã™ãƒ«ãƒ¼ãƒ«ã€ã™ãªã‚ã¡æœ€åˆã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ï¼‰æœ€åˆã®ãƒžãƒƒãƒã«åŸºã¥ã„ã¦è©•価ã•れã¦ã„る〠。ã“れã¯ã€ãƒ–ロックを使用ã—ãŸå ´åˆã€æ˜Žç¤ºçš„ã«æ¸¡ã•れãŸãŒãƒ‡ãƒ•ォルトã§ãƒ–ロックã•れã¦ã„る「ルールã«ã¯ã€ãƒ«ãƒ¼ãƒ«ã®é †åºã§ã¯ã‚りã¾ã›ã‚“。ã™ã¹ã¦ã«æ³¨æ„を払ã†å¿…è¦ãŒã‚ã‚‹ã§ã—ょã†ã€ã¨ã„ã†ã“ã¨ã§ã™ã€‚" + +#: usr/local/www/firewall_rules.php:874 usr/local/www/firewall_rules.php:875 +#: usr/local/www/firewall_rules.php:868 usr/local/www/firewall_rules.php:871 +#: usr/local/www/firewall_rules.php:871 +msgid "" +"Floating rules are evaluated on a first-match basis (i.e. the action of the " +"first rule to match a packet will be executed) only if the 'quick' option is " +"checked on a rule. Otherwise they will only apply if no other rules match. " +"Pay close attention to the rule order and options chosen. If no rule here " +"matches, the per-interface or default rules are used. " +msgstr "ãã†ã§ãªã‘れã°ã€å½¼ã‚‰ã¯ã®ã¿é©ç”¨ã•れã¾ã™ã€‚ 「クイックã€ã‚ªãƒ—ションã¯ã€ã€Œãƒ«ãƒ¼ãƒ«ã«ãƒã‚§ãƒƒã‚¯ã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿ã€ 「 (パケットã¨ä¸€è‡´ã™ã‚‹æœ€åˆã®ãƒ«ãƒ¼ãƒ«ãŒå®Ÿè¡Œã•れã¾ã™æµ®å‹•ルールã€ã™ãªã‚ã¡ã®ä½œç”¨ãŒï¼‰æœ€åˆã®ãƒžãƒƒãƒã«åŸºã¥ã„ã¦è©•価ã•れã¦ã„る「ãªã—ã®å ´åˆãƒ«ãƒ¼ãƒ«ã®ä¸€è‡´ã¯ã€Œãƒ«ãƒ¼ãƒ«ã®é †åºã‚„é¸æŠžã—ãŸã‚ªãƒ—ションã«ç´°å¿ƒã®æ³¨æ„を払ã£ã¦ãã ã•ã„。ã“ã“ã«ã¯ãƒ«ãƒ¼ãƒ«ãŒã€Œä¸€è‡´ã—ãªã„å ´åˆã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスå˜ä½ã¾ãŸã¯ãƒ‡ãƒ•ォルトã®ãƒ«ãƒ¼ãƒ«ãŒä½¿ç”¨ã•れã¦ã„る。" + +#: usr/local/www/firewall_rules_edit.php:201 +#: usr/local/www/firewall_rules_edit.php:210 +msgid "Reject type rules only works when the protocol is set to TCP." +msgstr "プロトコルãŒTCPã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿æ©Ÿèƒ½ã‚¿ã‚¤ãƒ—ã®ãƒ«ãƒ¼ãƒ«ã‚’æ‹’å¦ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:204 +#: usr/local/www/firewall_rules_edit.php:213 +#: usr/local/www/firewall_rules_edit.php:210 +msgid "Queue type rules only work with queues." +msgstr "キュータイプã®ãƒ«ãƒ¼ãƒ«ã¯ã€ã‚­ãƒ¥ãƒ¼ã ã‘ã§å‹•作ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:212 +#: usr/local/www/firewall_rules_edit.php:227 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:222 +#: usr/local/www/firewall_rules_edit.php:228 +#: usr/local/www/firewall_rules_edit.php:228 +msgid "You can not assign a IPv4 gateway group on IPv6 Address Family rule" +msgstr "ã‚ãªãŸã¯ã€IPv6アドレスファミリルールã«IPv4ゲートウェイ·グループを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/firewall_rules_edit.php:215 +#: usr/local/www/firewall_rules_edit.php:230 +#: usr/local/www/firewall_rules_edit.php:228 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:231 +#: usr/local/www/firewall_rules_edit.php:231 +msgid "You can not assign a IPv6 gateway group on IPv4 Address Family rule" +msgstr "ã‚ãªãŸã¯ã€ IPv4アドレスファミリルールã«IPv6ゲートウェイ·グループを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/firewall_rules_edit.php:222 +#: usr/local/www/firewall_rules_edit.php:240 +#: usr/local/www/firewall_rules_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:236 +#: usr/local/www/firewall_rules_edit.php:242 +#: usr/local/www/firewall_rules_edit.php:242 +msgid "You can not assign the IPv4 Gateway to a IPv6 Filter rule" +msgstr "ã‚ãªãŸã¯ã€IPv6フィルタルールã«ã¯IPv4ゲートウェイを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:243 +#: usr/local/www/firewall_rules_edit.php:242 +#: usr/local/www/firewall_rules_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:245 +#: usr/local/www/firewall_rules_edit.php:245 +msgid "You can not assign the IPv6 Gateway to a IPv4 Filter rule" +msgstr "ã‚ãªãŸã¯ã€IPv4フィルタルールã«IPv6ゲートウェイを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/firewall_rules_edit.php:297 +#: usr/local/www/firewall_rules_edit.php:321 +#: usr/local/www/firewall_rules_edit.php:320 +#: usr/local/www/firewall_rules_edit.php:323 +#: usr/local/www/firewall_rules_edit.php:329 +#: usr/local/www/firewall_rules_edit.php:329 +#, php-format +msgid "%s is only valid with protocol tcp." +msgstr "%sã¯ãƒ—ロトコルTCPã§ã®ã¿æœ‰åйã§ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:299 +#: usr/local/www/firewall_rules_edit.php:323 +#: usr/local/www/firewall_rules_edit.php:322 +#: usr/local/www/firewall_rules_edit.php:325 +#: usr/local/www/firewall_rules_edit.php:331 +#: usr/local/www/firewall_rules_edit.php:331 +#, php-format +msgid "%s is only valid if the gateway is set to 'default'." +msgstr "ゲートウェイãŒã€Œãƒ‡ãƒ•ォルトã€ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆ%sã«ã®ã¿æœ‰åйã§ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:327 +#: usr/local/www/firewall_rules_edit.php:351 +#: usr/local/www/firewall_rules_edit.php:350 +#: usr/local/www/firewall_rules_edit.php:353 +#: usr/local/www/firewall_rules_edit.php:359 +#: usr/local/www/firewall_rules_edit.php:359 +#, php-format +msgid "" +"%s is not a valid end source port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "「 %sã¯æœ‰åйãªçµ‚了ã®é€ä¿¡å…ƒãƒãƒ¼ãƒˆã§ã¯ã‚りã¾ã›ã‚“。ã“れã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。" + +#: usr/local/www/firewall_rules_edit.php:381 +#: usr/local/www/firewall_rules_edit.php:410 +#: usr/local/www/firewall_rules_edit.php:409 +#: usr/local/www/firewall_rules_edit.php:412 +#: usr/local/www/firewall_rules_edit.php:418 +#: usr/local/www/firewall_rules_edit.php:418 +#, php-format +msgid "" +"The Source IP address %s Address Family differs from the destination %s." +msgstr "「é€ä¿¡å…ƒIPアドレス%sアドレスファミリã¯ã€å…ˆã®%s.ã¨ã¯ç•°ãªã‚Šã¾ã™" + +#: usr/local/www/firewall_rules_edit.php:383 +#: usr/local/www/firewall_rules_edit.php:412 +#: usr/local/www/firewall_rules_edit.php:411 +#: usr/local/www/firewall_rules_edit.php:414 +#: usr/local/www/firewall_rules_edit.php:420 +#: usr/local/www/firewall_rules_edit.php:420 +msgid "You can not use IPv6 addresses in IPv4 rules." +msgstr "ã‚ãªãŸã¯ã€IPv4ルールã§IPv6アドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_rules_edit.php:385 +#: usr/local/www/firewall_rules_edit.php:414 +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_rules_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:422 +#: usr/local/www/firewall_rules_edit.php:422 +msgid "You can not use IPv4 addresses in IPv6 rules." +msgstr "ã‚ãªãŸã¯ã€IPv6ルールã§IPv4アドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_rules_edit.php:434 +#: usr/local/www/firewall_rules_edit.php:433 +#: usr/local/www/firewall_rules_edit.php:436 +#: usr/local/www/firewall_rules_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:442 +msgid "OS detection is only valid with protocol tcp." +msgstr "OS検出ã€ãƒ—ロトコルã¯TCPã§ã®ã¿æœ‰åйã§ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:406 +#: usr/local/www/firewall_rules_edit.php:438 +#: usr/local/www/firewall_rules_edit.php:437 +#: usr/local/www/firewall_rules_edit.php:440 +#: usr/local/www/firewall_rules_edit.php:446 +#: usr/local/www/firewall_rules_edit.php:446 +msgid "You have to select a queue when you select an acknowledge queue too." +msgstr "ã‚ãªãŸã¯ã‚ãªãŸã‚‚èªã‚ã‚‹ã‚­ãƒ¥ãƒ¼ã‚’é¸æŠžã—ãŸã¨ãã«ã€ã‚­ãƒ¥ãƒ¼ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:408 +#: usr/local/www/firewall_rules_edit.php:440 +#: usr/local/www/firewall_rules_edit.php:439 +#: usr/local/www/firewall_rules_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:448 +#: usr/local/www/firewall_rules_edit.php:448 +msgid "Acknowledge queue and Queue cannot be the same." +msgstr "キューを確èªã—ã€ã‚­ãƒ¥ãƒ¼ã¯åŒã˜ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_rules_edit.php:411 +#: usr/local/www/firewall_rules_edit.php:443 +#: usr/local/www/firewall_rules_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:445 +#: usr/local/www/firewall_rules_edit.php:451 +#: usr/local/www/firewall_rules_edit.php:451 +msgid "" +"You can not use limiters in Floating rules without choosing a direction." +msgstr "「ã‚ãªãŸãŒæ–¹å‘ã‚’é¸ã°ãšãƒ•ローティングルールã®ä¸­ã§ãƒªãƒŸãƒƒã‚¿ãƒ¼ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_rules_edit.php:445 +#: usr/local/www/firewall_rules_edit.php:444 +#: usr/local/www/firewall_rules_edit.php:447 +#: usr/local/www/firewall_rules_edit.php:453 +#: usr/local/www/firewall_rules_edit.php:453 +msgid "" +"You can not use gateways in Floating rules without choosing a direction." +msgstr "「ã‚ãªãŸãŒæ–¹å‘ã‚’é¸ã°ãšãƒ•ローティングルール内ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_rules_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:448 +#: usr/local/www/firewall_rules_edit.php:447 +#: usr/local/www/firewall_rules_edit.php:450 +#: usr/local/www/firewall_rules_edit.php:456 +#: usr/local/www/firewall_rules_edit.php:456 +msgid "" +"You must select a queue for the In direction before selecting one for Out " +"too." +msgstr "ã‚ã¾ã‚Šã«ã‚‚"ã‚ãªãŸã¯ã‚¢ã‚¦ãƒˆã®ãŸã‚ã®1ã¤ã‚’é¸æŠžã™ã‚‹å‰ã«æ–¹å‘ã®ã‚­ãƒ¥ãƒ¼ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/firewall_rules_edit.php:418 +#: usr/local/www/firewall_rules_edit.php:450 +#: usr/local/www/firewall_rules_edit.php:449 +#: usr/local/www/firewall_rules_edit.php:452 +#: usr/local/www/firewall_rules_edit.php:458 +#: usr/local/www/firewall_rules_edit.php:458 +msgid "In and Out Queue cannot be the same." +msgstr "INã¨OUTキューãŒåŒã˜ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_rules_edit.php:420 +#: usr/local/www/firewall_rules_edit.php:422 +#: usr/local/www/firewall_rules_edit.php:452 +#: usr/local/www/firewall_rules_edit.php:454 +#: usr/local/www/firewall_rules_edit.php:451 +#: usr/local/www/firewall_rules_edit.php:453 +#: usr/local/www/firewall_rules_edit.php:456 +#: usr/local/www/firewall_rules_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:462 +#: usr/local/www/firewall_rules_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:462 +msgid "" +"You cannot select one queue and one virtual interface for IN and Out. both " +"must be from the same type." +msgstr "「ã‚ãªãŸã¯ã€ 1キューã¨INã¨OUTã®ãŸã‚ã®1ã¤ã®ä»®æƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã©ã¡ã‚‰ã‚‚「åŒã˜ã‚¿ã‚¤ãƒ—ã®ã‚‚ã®ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:425 +#: usr/local/www/firewall_rules_edit.php:457 +#: usr/local/www/firewall_rules_edit.php:458 +#: usr/local/www/firewall_rules_edit.php:461 +#: usr/local/www/firewall_rules_edit.php:467 +#: usr/local/www/firewall_rules_edit.php:467 +msgid "ID must be an integer" +msgstr "IDã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: usr/local/www/firewall_rules_edit.php:428 +#: usr/local/www/firewall_rules_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:461 +#: usr/local/www/firewall_rules_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:470 +#: usr/local/www/firewall_rules_edit.php:470 +msgid "You can only select a layer7 container for TCP and/or UDP protocols" +msgstr "ã‚ãªãŸã ã‘ã®TCPãŠã‚ˆã³/ã¾ãŸã¯UDPプロトコルã®ãŸã‚ã®ãƒ¬ã‚¤ãƒ¤7ã‚³ãƒ³ãƒ†ãƒŠã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/firewall_rules_edit.php:430 +#: usr/local/www/firewall_rules_edit.php:462 +#: usr/local/www/firewall_rules_edit.php:463 +#: usr/local/www/firewall_rules_edit.php:466 +#: usr/local/www/firewall_rules_edit.php:472 +#: usr/local/www/firewall_rules_edit.php:472 +msgid "You can only select a layer7 container for Pass type rules." +msgstr "ã‚ãªãŸã ã‘ã®é€šéŽåž‹ãƒ«ãƒ¼ãƒ«ã®ãƒ¬ã‚¤ãƒ¤7ã®ã‚³ãƒ³ãƒ†ãƒŠã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:443 +#: usr/local/www/firewall_rules_edit.php:475 +#: usr/local/www/firewall_rules_edit.php:476 +#: usr/local/www/firewall_rules_edit.php:479 +#: usr/local/www/firewall_rules_edit.php:485 +#: usr/local/www/firewall_rules_edit.php:485 +msgid "" +"If you specify TCP flags that should be set you should specify out of which " +"flags as well." +msgstr "åŒæ§˜ã«ãƒ•ラグ"ã‚ãªãŸãŒè¨­å®šã™ã‚‹å¿…è¦ãŒTCPフラグを指定ã—ãŸå ´åˆã«ã¯ã€ãã®ã†ã¡æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/firewall_rules_edit.php:652 +#: usr/local/www/firewall_rules_edit.php:685 +#: usr/local/www/firewall_rules_edit.php:688 +#: usr/local/www/firewall_rules_edit.php:700 +#: usr/local/www/firewall_rules_edit.php:700 +msgid "Edit Firewall rule" +msgstr "編集ファイアウォールルール" + +#: usr/local/www/firewall_rules_edit.php:673 +#: usr/local/www/firewall_rules_edit.php:706 +#: usr/local/www/firewall_rules_edit.php:709 +#: usr/local/www/firewall_rules_edit.php:721 +#: usr/local/www/firewall_rules_edit.php:721 +msgid "Choose what to do with packets that match the criteria specified below." +msgstr "ä¸‹ã®æŒ‡å®šã•ã‚ŒãŸæ¡ä»¶ã«ä¸€è‡´ã™ã‚‹ãƒ‘ケットをã©ã†ã™ã‚‹ã‹ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:674 +#: usr/local/www/firewall_rules_edit.php:707 +#: usr/local/www/firewall_rules_edit.php:710 +#: usr/local/www/firewall_rules_edit.php:722 +#: usr/local/www/firewall_rules_edit.php:722 +msgid "" +"Hint: the difference between block and reject is that with reject, a packet " +"(TCP RST or ICMP port unreachable for UDP) is returned to the sender, " +"whereas with block the packet is dropped silently. In either case, the " +"original packet is discarded." +msgstr ""ãƒ’ãƒ³ãƒˆï¼šãƒ–ãƒ­ãƒƒã‚¯ã¨æ‹’å¦ã®é•ã„ã§ã‚ã‚‹æ‹’å¦ã—ã¦ã€ãã®ãƒ‘ケット"オリジナル "ã®ãƒ–ロックã¨ã€ãƒ‘ケットãŒã„ãšã‚Œã®å ´åˆã‚‚ã€é»™ã£ã¦å»ƒæ£„ã•れã€ä¸€æ–¹ã€ 「 ( TCP RSTã¾ãŸã¯UDPã®åˆ°é”ä¸èƒ½ICMPãƒãƒ¼ãƒˆï¼‰ã¯ã€é€ä¿¡è€…ã«è¿”é€ã•れるパケットã¯ç ´æ£„ã•れる。" + +#: usr/local/www/firewall_rules_edit.php:689 +#: usr/local/www/firewall_rules_edit.php:722 +#: usr/local/www/firewall_rules_edit.php:725 +#: usr/local/www/firewall_rules_edit.php:737 +#: usr/local/www/firewall_rules_edit.php:737 +msgid "Quick" +msgstr "クイック" + +#: usr/local/www/firewall_rules_edit.php:693 +#: usr/local/www/firewall_rules_edit.php:726 +#: usr/local/www/firewall_rules_edit.php:729 +#: usr/local/www/firewall_rules_edit.php:741 +#: usr/local/www/firewall_rules_edit.php:741 +msgid "Apply the action immediately on match." +msgstr "一致ã«ã™ãã«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’é©ç”¨ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:694 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/firewall_rules_edit.php:730 +#: usr/local/www/firewall_rules_edit.php:742 +#: usr/local/www/firewall_rules_edit.php:742 +msgid "" +"Set this option if you need to apply this action to traffic that matches " +"this rule immediately." +msgstr "ã™ãã«ã“ã®ãƒ«ãƒ¼ãƒ«ã‚’"ã‚ãªãŸã¯ä¸€è‡´ã™ã‚‹ãƒˆãƒ©ãƒ•ィックã«ã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã€ 。" + +#: usr/local/www/firewall_rules_edit.php:701 +#: usr/local/www/firewall_rules_edit.php:734 +#: usr/local/www/firewall_rules_edit.php:737 +#: usr/local/www/firewall_rules_edit.php:749 +#: usr/local/www/firewall_rules_edit.php:749 +msgid "Associated filter rule" +msgstr "関連ã™ã‚‹ãƒ•ィルタルール" + +#: usr/local/www/firewall_rules_edit.php:703 +#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:137 +#: usr/local/www/firewall_rules_edit.php:736 +#: usr/local/www/firewall_rules_edit.php:739 +#: usr/local/www/diag_traceroute.php:141 +#: usr/local/www/firewall_rules_edit.php:751 +#: usr/local/www/diag_traceroute.php:161 +#: usr/local/www/firewall_rules_edit.php:751 +#: usr/local/www/diag_traceroute.php:161 +msgid "Note: " +msgstr "注æ„:" + +#: usr/local/www/firewall_rules_edit.php:703 +#: usr/local/www/firewall_rules_edit.php:736 +#: usr/local/www/firewall_rules_edit.php:739 +#: usr/local/www/firewall_rules_edit.php:751 +#: usr/local/www/firewall_rules_edit.php:751 +msgid "This is associated to a NAT rule." +msgstr "ã“れã¯ã€NATルールã«é–¢é€£ä»˜ã‘られã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:704 +#: usr/local/www/firewall_rules_edit.php:737 +#: usr/local/www/firewall_rules_edit.php:740 +#: usr/local/www/firewall_rules_edit.php:752 +#: usr/local/www/firewall_rules_edit.php:752 +msgid "" +"You cannot edit the interface, protocol, source, or destination of " +"associated filter rules." +msgstr "関連ã™ã‚‹ãƒ•ィルタルール"ã‚ãªãŸã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã€ãƒ—ロトコルã€é€ä¿¡å…ƒã€ã¾ãŸã¯å®›å…ˆã‚’編集ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/firewall_rules_edit.php:711 +#: usr/local/www/firewall_rules_edit.php:744 +#: usr/local/www/firewall_rules_edit.php:747 +#: usr/local/www/firewall_rules_edit.php:759 +#: usr/local/www/firewall_rules_edit.php:759 +msgid "View the NAT rule" +msgstr "NATルールを表示ã™ã‚‹" + +#: usr/local/www/firewall_rules_edit.php:768 +#: usr/local/www/firewall_rules_edit.php:803 +#: usr/local/www/firewall_rules_edit.php:806 +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/firewall_rules_edit.php:817 +#: usr/local/www/firewall_rules_edit.php:817 +msgid "Choose on which interface packets must come in to match this rule." +msgstr "ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスパケットãŒã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ã«ã¯æ¥ãªã‘れã°ãªã‚Šã¾ã›ã‚“]ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:774 +#: usr/local/www/services_captiveportal_ip_edit.php:178 +#: usr/local/www/diag_ipsec_spd.php:88 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:443 +#: usr/local/www/services_captiveportal_hostname_edit.php:160 +#: usr/local/www/load_balancer_relay_action_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:809 +#: usr/local/www/services_captiveportal_hostname_edit.php:158 +#: usr/local/www/load_balancer_relay_action_edit.php:440 +#: usr/local/www/services_captiveportal_ip_edit.php:176 +#: usr/local/www/diag_ipsec_spd.php:89 +#: usr/local/www/firewall_rules_edit.php:812 +#: usr/local/www/firewall_rules_edit.php:824 +#: usr/local/www/firewall_rules_edit.php:823 +#: usr/local/www/firewall_rules_edit.php:823 +#: usr/local/www/services_captiveportal_hostname_edit.php:160 +#: usr/local/www/diag_ipsec_spd.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:440 +msgid "Direction" +msgstr "æ–¹å‘" + +#: usr/local/www/firewall_rules_edit.php:792 +#: usr/local/www/firewall_rules_edit.php:827 +#: usr/local/www/firewall_rules_edit.php:830 +#: usr/local/www/firewall_rules_edit.php:842 +#: usr/local/www/firewall_rules_edit.php:841 +#: usr/local/www/firewall_rules_edit.php:841 +msgid "TCP/IP Version" +msgstr "TCP / IPã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³" + +#: usr/local/www/firewall_rules_edit.php:804 +#: usr/local/www/firewall_rules_edit.php:839 +#: usr/local/www/firewall_rules_edit.php:842 +#: usr/local/www/firewall_rules_edit.php:854 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_rules_edit.php:853 +msgid "Select the Internet Protocol version this rule applies to" +msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ãŒé©ç”¨ã•れるインターãƒãƒƒãƒˆÂ·ãƒ—ロトコル·ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’é¸æŠž" + +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_rules_edit.php:856 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_rules_edit.php:867 +msgid "Hint: in most cases, you should specify " +msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€æ¬¡ã®ã‚ˆã†ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚り" + +#: usr/local/www/firewall_rules_edit.php:822 +#: usr/local/www/firewall_rules_edit.php:857 +#: usr/local/www/firewall_rules_edit.php:860 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules_edit.php:871 +msgid "ICMP type" +msgstr "ICMPタイプ" + +#: usr/local/www/firewall_rules_edit.php:851 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules_edit.php:889 +#: usr/local/www/firewall_rules_edit.php:901 +#: usr/local/www/firewall_rules_edit.php:900 +#: usr/local/www/firewall_rules_edit.php:900 +msgid "" +"If you selected ICMP for the protocol above, you may specify an ICMP type " +"here." +msgstr "ã“ã“ã§"ã‚ãªãŸã¯ä¸Šè¨˜ã®ãƒ—ロトコルã®ãŸã‚ã«ICMPã‚’é¸æŠžã—ãŸå ´åˆã¯ã€ ICMPタイプを指定ã™ã‚‹ã“ã¨ã‚‚〠。" + +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules_edit.php:920 +#: usr/local/www/firewall_rules_edit.php:929 +#: usr/local/www/firewall_rules_edit.php:941 +#: usr/local/www/firewall_rules_edit.php:940 +#: usr/local/www/firewall_rules_edit.php:940 +msgid " subnet" +msgstr "サブãƒãƒƒãƒˆ" + +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:943 +#: usr/local/www/firewall_rules_edit.php:952 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:963 +msgid "Show source port range" +msgstr "é€ä¿¡å…ƒãƒãƒ¼ãƒˆç¯„囲を表示ã™ã‚‹" + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1000 +msgid "Specify the source port or port range for this rule." +msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã®é€ä¿¡å…ƒãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆç¯„囲を指定ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1000 +msgid "" +"and almost never equal to the destination port range (and should usually be" +msgstr "「宛先ãƒãƒ¼ãƒˆç¯„囲ã¨ã»ã¼ç­‰ã—ããªã‚‹ã“ã¨ã¯ï¼ˆé€šå¸¸ã¯ã‚ã‚‹ã¹ã" + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1102 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1101 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1101 +msgid "'to'" +msgstr "'ã‹ã‚‰'" + +#: usr/local/www/firewall_rules_edit.php:1005 +#: usr/local/www/firewall_rules_edit.php:1040 +#: usr/local/www/firewall_rules_edit.php:1055 +#: usr/local/www/firewall_rules_edit.php:1068 +#: usr/local/www/firewall_rules_edit.php:1067 +#: usr/local/www/firewall_rules_edit.php:1067 +msgid "Destination port range " +msgstr "宛先ãƒãƒ¼ãƒˆç¯„囲" + +#: usr/local/www/firewall_rules_edit.php:1037 +#: usr/local/www/firewall_rules_edit.php:1072 +#: usr/local/www/firewall_rules_edit.php:1087 +#: usr/local/www/firewall_rules_edit.php:1100 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1099 +msgid "" +"Specify the port or port range for the destination of the packet for this " +"rule." +msgstr "ルール"ã“ã®ãŸã‚ã€ãƒ‘ケットã®é€ä¿¡å…ˆã®ãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆç¯„囲を指定ã™ã‚‹ã€ 。" + +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_rules_edit.php:1102 +#: usr/local/www/firewall_rules_edit.php:1101 +#: usr/local/www/firewall_rules_edit.php:1101 +msgid "field empty if you only want to filter a single port" +msgstr "フィールドã®ç©ºã®ã‚ãªãŸã¯ã€å˜ä¸€ã®ãƒãƒ¼ãƒˆã‚’フィルタリングã—ãŸã„å ´åˆã«" + +#: usr/local/www/firewall_rules_edit.php:1044 +#: usr/local/www/firewall_rules_edit.php:1079 +#: usr/local/www/firewall_rules_edit.php:1094 +#: usr/local/www/firewall_rules_edit.php:1107 +#: usr/local/www/firewall_rules_edit.php:1106 +#: usr/local/www/firewall_rules_edit.php:1106 +msgid "Log" +msgstr "ログ" + +#: usr/local/www/firewall_rules_edit.php:1047 +#: usr/local/www/firewall_rules_edit.php:1082 +#: usr/local/www/firewall_rules_edit.php:1097 +#: usr/local/www/firewall_rules_edit.php:1110 +#: usr/local/www/firewall_rules_edit.php:1109 +#: usr/local/www/firewall_rules_edit.php:1109 +msgid "Log packets that are handled by this rule" +msgstr "ã“ã®è¦å‰‡ã«ã‚ˆã£ã¦å‡¦ç†ã•れãŸãƒ‘ケットをログã«è¨˜éŒ²ã™ã‚‹" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1111 +msgid "" +"Hint: the firewall has limited local log space. Don't turn on logging for " +"everything. If you want to do a lot of logging, consider using a remote " +"syslog server" +msgstr ""ヒント:ファイアウォールãŒãƒ­ãƒ¼ã‚«ãƒ«ã®ãƒ­ã‚°Â·ã‚¹ãƒšãƒ¼ã‚¹ãŒé™ã‚‰ã‚Œã¦ã„ã‚‹ãŸã‚ã€ãƒ­ã‚®ãƒ³ã‚°ã‚’オンã«ã—ãªã„ã§ãã ã•ã„。 ã€ã™ã¹ã¦ã®ã‚‚ã®ã€‚ロギングをãŸãã•ã‚“ã—ãŸã„å ´åˆã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã€Œ syslogサーãƒã‚’使用ã™ã‚‹ã“ã¨ã‚’検討" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1111 +msgid "see the" +msgstr "見る" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1111 +msgid "Diagnostics: System logs: Settings" +msgstr "診断:システムログ:セッティング" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/services_captiveportal.php:908 +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/services_captiveportal.php:953 +#: usr/local/www/services_captiveportal.php:949 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/services_captiveportal.php:951 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/system_advanced_firewall.php:333 +#: usr/local/www/services_captiveportal.php:967 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/system_advanced_firewall.php:333 +#: usr/local/www/services_captiveportal.php:967 +msgid "page" +msgstr "ページ" + +#: usr/local/www/firewall_rules_edit.php:1057 +#: usr/local/www/services_unbound_acls.php:296 +#: usr/local/www/firewall_rules_edit.php:1092 +#: usr/local/www/firewall_rules_edit.php:1107 +#: usr/local/www/firewall_rules_edit.php:1120 +#: usr/local/www/firewall_rules_edit.php:1119 +#: usr/local/www/firewall_rules_edit.php:1119 +msgid "You may enter a description here for your reference." +msgstr "ã“ã“ã«å‚照用ã®èª¬æ˜Žæ–‡ã‚’入力ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1080 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1130 +#: usr/local/www/firewall_rules_edit.php:1143 +#: usr/local/www/firewall_rules_edit.php:1142 +#: usr/local/www/firewall_rules_edit.php:1142 +msgid "Source OS" +msgstr "ソースã®OS" + +#: usr/local/www/firewall_rules_edit.php:1086 +#: usr/local/www/firewall_rules_edit.php:1121 +#: usr/local/www/firewall_rules_edit.php:1136 +#: usr/local/www/firewall_rules_edit.php:1149 +#: usr/local/www/firewall_rules_edit.php:1148 +#: usr/local/www/firewall_rules_edit.php:1148 +msgid "OS Type:" +msgstr "OSã®ç¨®é¡žï¼š" + +#: usr/local/www/firewall_rules_edit.php:1109 +#: usr/local/www/firewall_rules_edit.php:1144 +#: usr/local/www/firewall_rules_edit.php:1159 +#: usr/local/www/firewall_rules_edit.php:1172 +#: usr/local/www/firewall_rules_edit.php:1171 +#: usr/local/www/firewall_rules_edit.php:1171 +msgid "Note: this only works for TCP rules" +msgstr "注:TCPã®è¦å‰‡ã«ã¤ã„ã¦ã¯ã€ã“ã®å”¯ä¸€ã®ä½œå“" + +#: usr/local/www/firewall_rules_edit.php:1114 +#: usr/local/www/firewall_rules_edit.php:1149 +#: usr/local/www/firewall_rules_edit.php:1164 +#: usr/local/www/firewall_rules_edit.php:1177 +#: usr/local/www/firewall_rules_edit.php:1176 +#: usr/local/www/firewall_rules_edit.php:1176 +msgid "Diffserv Code Point" +msgstr "DiffServã®ã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆ" + +#: usr/local/www/firewall_rules_edit.php:1130 +#: usr/local/www/interfaces_ppps_edit.php:675 +#: usr/local/www/vpn_ipsec_phase1.php:806 +#: usr/local/www/vpn_ipsec_phase2.php:629 +#: usr/local/www/firewall_rules_edit.php:1165 +#: usr/local/www/vpn_ipsec_phase2.php:655 +#: usr/local/www/vpn_ipsec_phase1.php:819 +#: usr/local/www/interfaces_ppps_edit.php:676 +#: usr/local/www/vpn_ipsec_phase2.php:751 +#: usr/local/www/vpn_ipsec_phase1.php:816 +#: usr/local/www/firewall_rules_edit.php:1180 +#: usr/local/www/interfaces_ppps_edit.php:682 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase2.php:772 +#: usr/local/www/firewall_rules_edit.php:1193 +#: usr/local/www/firewall_rules_edit.php:1192 +#: usr/local/www/interfaces_ppps_edit.php:680 +#: usr/local/www/firewall_rules_edit.php:1192 +#: usr/local/www/interfaces_ppps_edit.php:680 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase2.php:772 +msgid "Advanced Options" +msgstr "詳細オプション" + +#: usr/local/www/firewall_rules_edit.php:1137 +#: usr/local/www/firewall_rules_edit.php:1172 +#: usr/local/www/firewall_rules_edit.php:1187 +#: usr/local/www/firewall_rules_edit.php:1200 +#: usr/local/www/firewall_rules_edit.php:1199 +#: usr/local/www/firewall_rules_edit.php:1199 +msgid "" +"This allows packets with IP options to pass. Otherwise they are blocked by " +"default. This is usually only seen with multicast traffic." +msgstr "「ã“れã¯ã€IPオプションをæŒã¤ãƒ‘ケットを通éŽã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã†ã§ãªã‘れã°å½¼ã‚‰ã¯ã«ã‚ˆã£ã¦ãƒ–ロックã•れã¦ã„る「デフォルト。ã“れã¯é€šå¸¸ã€ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆãƒˆãƒ©ãƒ•ィックã§è¦‹ã‚‰ã‚Œã‚‹ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1140 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1190 +#: usr/local/www/firewall_rules_edit.php:1203 +#: usr/local/www/firewall_rules_edit.php:1202 +#: usr/local/www/firewall_rules_edit.php:1202 +msgid "This will disable auto generated reply-to for this rule." +msgstr "ã“れã¯è‡ªå‹•返信ã«ã“ã®ãƒ«ãƒ¼ãƒ«ã®ãŸã‚ã«ç”ŸæˆãŒç„¡åйã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1143 +#: usr/local/www/firewall_rules_edit.php:1178 +#: usr/local/www/firewall_rules_edit.php:1193 +#: usr/local/www/firewall_rules_edit.php:1206 +#: usr/local/www/firewall_rules_edit.php:1205 +#: usr/local/www/firewall_rules_edit.php:1205 +msgid "" +"You can mark a packet matching this rule and use this mark to match on other " +"NAT/filter rules. It is called" +msgstr ""ã‚ãªãŸã¯ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒ‘ケットをマークã—ã€ä»–ã«ä¸€è‡´ã™ã‚‹ã‚ˆã†ã«ã€ã“ã®ãƒžãƒ¼ã‚¯ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ŒNAT /フィルタルール。ãれãŒå‘¼ã³å‡ºã•れã¾ã™" + +#: usr/local/www/firewall_rules_edit.php:1143 +#: usr/local/www/firewall_rules_edit.php:1178 +#: usr/local/www/firewall_rules_edit.php:1193 +#: usr/local/www/firewall_rules_edit.php:1206 +#: usr/local/www/firewall_rules_edit.php:1205 +#: usr/local/www/firewall_rules_edit.php:1205 +msgid "Policy filtering" +msgstr "ãƒãƒªã‚·ãƒ¼ã®ãƒ•ィルター" + +#: usr/local/www/firewall_rules_edit.php:1146 +#: usr/local/www/firewall_rules_edit.php:1181 +#: usr/local/www/firewall_rules_edit.php:1196 +#: usr/local/www/firewall_rules_edit.php:1209 +#: usr/local/www/firewall_rules_edit.php:1208 +#: usr/local/www/firewall_rules_edit.php:1208 +msgid "You can match packet on a mark placed before on another rule." +msgstr "ã‚ãªãŸãŒåˆ¥ã®ãƒ«ãƒ¼ãƒ«ä¸Šã®å‰ã«ç½®ã‹ãƒžãƒ¼ã‚¯ã§ãƒ‘ケットを一致ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1148 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1198 +#: usr/local/www/firewall_rules_edit.php:1211 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1210 +msgid " Maximum state entries this rule can create" +msgstr "最大ステートエントリã¯ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/firewall_rules_edit.php:1149 +#: usr/local/www/firewall_rules_edit.php:1184 +#: usr/local/www/firewall_rules_edit.php:1199 +#: usr/local/www/firewall_rules_edit.php:1212 +#: usr/local/www/firewall_rules_edit.php:1211 +#: usr/local/www/firewall_rules_edit.php:1211 +msgid " Maximum number of unique source hosts" +msgstr "一æ„ã®é€ä¿¡å…ƒãƒ›ã‚¹ãƒˆã®æœ€å¤§æ•°" + +#: usr/local/www/firewall_rules_edit.php:1150 +#: usr/local/www/firewall_rules_edit.php:1185 +#: usr/local/www/firewall_rules_edit.php:1200 +#: usr/local/www/firewall_rules_edit.php:1213 +#: usr/local/www/firewall_rules_edit.php:1212 +#: usr/local/www/firewall_rules_edit.php:1212 +msgid " Maximum number of established connections per host" +msgstr "ホストã‚ãŸã‚Šã®ç¢ºç«‹ã•ã‚ŒãŸæŽ¥ç¶šã®æœ€å¤§æ•°" + +#: usr/local/www/firewall_rules_edit.php:1151 +#: usr/local/www/firewall_rules_edit.php:1186 +#: usr/local/www/firewall_rules_edit.php:1201 +#: usr/local/www/firewall_rules_edit.php:1214 +#: usr/local/www/firewall_rules_edit.php:1213 +#: usr/local/www/firewall_rules_edit.php:1213 +msgid " Maximum state entries per host" +msgstr "ホストã”ã¨ã®æœ€å¤§ã‚¹ãƒ†ãƒ¼ãƒˆã‚¨ãƒ³ãƒˆãƒª" + +#: usr/local/www/firewall_rules_edit.php:1160 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1223 +#: usr/local/www/firewall_rules_edit.php:1222 +#: usr/local/www/firewall_rules_edit.php:1222 +msgid "Maximum new connections / per second(s)" +msgstr "æœ€å¤§ã®æ–°è¦æŽ¥ç¶š/秒(S )" + +#: usr/local/www/firewall_rules_edit.php:1164 +#: usr/local/www/firewall_rules_edit.php:1199 +#: usr/local/www/firewall_rules_edit.php:1214 +#: usr/local/www/firewall_rules_edit.php:1226 +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1225 +msgid "State Timeout in seconds" +msgstr "ç§’å˜ä½ã®çŠ¶æ…‹ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ" + +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1202 +#: usr/local/www/firewall_rules_edit.php:1217 +#: usr/local/www/firewall_rules_edit.php:1228 +#: usr/local/www/firewall_rules_edit.php:1227 +#: usr/local/www/firewall_rules_edit.php:1227 +msgid "Note: Leave fields blank to disable that feature." +msgstr "注:ã“ã®æ©Ÿèƒ½ã‚’無効ã«ç©ºæ¬„ã®ã¾ã¾ã«ã—ã¦ãŠãã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1172 +#: usr/local/www/firewall_rules_edit.php:1207 +#: usr/local/www/firewall_rules_edit.php:1222 +#: usr/local/www/firewall_rules_edit.php:1233 +#: usr/local/www/firewall_rules_edit.php:1232 +#: usr/local/www/firewall_rules_edit.php:1232 +msgid "TCP flags" +msgstr "TCPフラグ" + +#: usr/local/www/firewall_rules_edit.php:1206 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1256 +#: usr/local/www/firewall_rules_edit.php:1265 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1264 +msgid "Any flags." +msgstr "ä»»æ„ã®ãƒ•ラグ。" + +#: usr/local/www/firewall_rules_edit.php:1208 +#: usr/local/www/firewall_rules_edit.php:1243 +#: usr/local/www/firewall_rules_edit.php:1258 +#: usr/local/www/firewall_rules_edit.php:1267 +#: usr/local/www/firewall_rules_edit.php:1266 +#: usr/local/www/firewall_rules_edit.php:1266 +msgid "" +"Use this to choose TCP flags that must be set or cleared for this rule to " +"match." +msgstr "マッãƒã€ã«ã¯ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã«è¨­å®šã¾ãŸã¯ã‚¯ãƒªã‚¢ã™ã‚‹å¿…è¦ãŒTCPãƒ•ãƒ©ã‚°ã‚’é¸æŠžã—ã¦ã€ã“れを使用ã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/firewall_rules_edit.php:1214 +#: usr/local/www/firewall_rules_edit.php:1249 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1273 +#: usr/local/www/firewall_rules_edit.php:1272 +#: usr/local/www/firewall_rules_edit.php:1272 +msgid "State Type" +msgstr "ステートタイプ" + +#: usr/local/www/firewall_rules_edit.php:1221 +#: usr/local/www/firewall_rules_edit.php:1228 +#: usr/local/www/firewall_rules_edit.php:1256 +#: usr/local/www/firewall_rules_edit.php:1263 +#: usr/local/www/firewall_rules_edit.php:1271 +#: usr/local/www/firewall_rules_edit.php:1278 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1286 +#: usr/local/www/firewall_rules_edit.php:1279 +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1279 +#: usr/local/www/firewall_rules_edit.php:1285 +msgid "keep state" +msgstr "状態を維æŒã™ã‚‹" + +#: usr/local/www/firewall_rules_edit.php:1222 +#: usr/local/www/firewall_rules_edit.php:1229 +#: usr/local/www/firewall_rules_edit.php:1257 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1272 +#: usr/local/www/firewall_rules_edit.php:1279 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1286 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1286 +msgid "sloppy state" +msgstr "ãšã•ã‚“ãªçŠ¶æ…‹" + +#: usr/local/www/firewall_rules_edit.php:1223 +#: usr/local/www/firewall_rules_edit.php:1230 +#: usr/local/www/firewall_rules_edit.php:1258 +#: usr/local/www/firewall_rules_edit.php:1265 +#: usr/local/www/firewall_rules_edit.php:1273 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1282 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/firewall_rules_edit.php:1287 +msgid "synproxy state" +msgstr "synproxy状態" + +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1260 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1284 +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1283 +msgid "" +"Hint: Select which type of state tracking mechanism you would like to use. " +"If in doubt, use keep state." +msgstr ""ヒント:ã‚ãªãŸãŒä½¿ç”¨ã—ãŸã„種類を状態追跡機構ã®é¸æŠžã€ç–‘ã‚ã—ã„å ´åˆã¯ã€çŠ¶æ…‹ã‚’ç¶­æŒã—使用ã—ã¦ã„ã‚‹å ´åˆã€‚" + +#: usr/local/www/firewall_rules_edit.php:1228 +#: usr/local/www/firewall_rules_edit.php:1229 +#: usr/local/www/firewall_rules_edit.php:1263 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1278 +#: usr/local/www/firewall_rules_edit.php:1279 +#: usr/local/www/firewall_rules_edit.php:1286 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1286 +msgid "Works with all IP protocols." +msgstr "ã™ã¹ã¦ã®IPプロトコルã§å‹•作ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1230 +#: usr/local/www/firewall_rules_edit.php:1265 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1287 +msgid "" +"Proxies incoming TCP connections to help protect servers from spoofed TCP " +"SYN floods. This option includes the functionality of keep state and " +"modulate state combined." +msgstr "SYNフラッドã€ã‚¹ãƒ—ーフィングã•れãŸTCPã‹ã‚‰ã‚µãƒ¼ãƒãƒ¼ã‚’ä¿è­·ã™ã‚‹ãŸã‚ã«TCP接続をç€ä¿¡ãƒ—ロキシ〠。ã“ã®ã‚ªãƒ—ションã¯ã€çµ„ã¿åˆã‚ã›ã¦ã‚­ãƒ¼ãƒ—çŠ¶æ…‹ã®æ©Ÿèƒ½ã¨ã€Œèª¿ç¯€çŠ¶æ…‹ã‚’å«ã‚€ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1231 +#: usr/local/www/firewall_rules_edit.php:1266 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/firewall_rules_edit.php:1289 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1288 +msgid "" +"Do not use state mechanisms to keep track. This is only useful if you're " +"doing advanced queueing in certain situations. Please check the " +"documentation." +msgstr "特定ã®çжæ³ã§ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒˆÂ·ã‚­ãƒ¥ãƒ¼ã‚¤ãƒ³ã‚°ã‚’行ã£ã¦"ã‚ãªãŸãŒã—ã¦ã„ã‚‹å ´åˆã‚’追跡ã™ã‚‹ãŸã‚ã«çŠ¶æ…‹ã®ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã‚’使用ã—ãªã„ã§ãã ã•ã„。ã“れã¯ä¾¿åˆ©ã§ã™ã€ 。 「マニュアルを確èªã—ã¦ãã ã•ã„。" + +#: usr/local/www/firewall_rules_edit.php:1245 +#: usr/local/www/firewall_rules_edit.php:1280 +msgid "" +"Hint: This prevents the rule from automatically syncing to other CARP " +"members." +msgstr ""ヒント:ã“れã¯ã€è‡ªå‹•çš„ã«ä»–ã®CARPã¨åŒæœŸã‹ã‚‰ãƒ«ãƒ¼ãƒ«ã‚’防ãã€ã®ãƒ¡ãƒ³ãƒãƒ¼ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1350 +#: usr/local/www/firewall_rules_edit.php:1365 +#: usr/local/www/firewall_rules_edit.php:1372 +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1383 +msgid "Leave as 'none' to leave the rule enabled all the time." +msgstr "ã™ã¹ã¦ã®æ™‚間を有効ã«ã™ã‚‹ãƒ«ãƒ¼ãƒ«ã‚’残ã—ã¦ã€Œè©²å½“ãªã—ã€ã¨ã—ã¦ãŠãã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1295 +#: usr/local/www/services_captiveportal.php:779 +#: usr/local/www/services_captiveportal.php:799 +#: usr/local/www/firewall_rules_edit.php:1362 +#: usr/local/www/services_captiveportal.php:821 +#: usr/local/www/services_captiveportal.php:841 +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/services_captiveportal.php:839 +#: usr/local/www/firewall_rules_edit.php:1377 +#: usr/local/www/services_captiveportal.php:807 +#: usr/local/www/services_captiveportal.php:837 +#: usr/local/www/firewall_rules_edit.php:1384 +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/firewall_rules_edit.php:1395 +#: usr/local/www/firewall_rules_edit.php:1395 +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:853 +msgid "default" +msgstr "デフォルト" + +#: usr/local/www/firewall_rules_edit.php:1334 +#: usr/local/www/firewall_rules_edit.php:1405 +#: usr/local/www/firewall_rules_edit.php:1420 +#: usr/local/www/firewall_rules_edit.php:1427 +#: usr/local/www/firewall_rules_edit.php:1438 +#: usr/local/www/firewall_rules_edit.php:1438 +msgid "" +"Leave as 'default' to use the system routing table. Or choose a gateway to " +"utilize policy based routing." +msgstr "ãƒãƒªã‚·ãƒ¼ãƒ™ãƒ¼ã‚¹ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã™ã‚‹ã€ã«ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを使用ã™ã‚‹ã‚ˆã†ã«ã€Œãƒ‡ãƒ•ォルトã€ã®ã¾ã¾ã«ã—ã¾ã™ã€‚ã¾ãŸã¯ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã™ã‚‹ã€ 。" + +#: usr/local/www/firewall_rules_edit.php:1339 +#: usr/local/www/firewall_rules_edit.php:1410 +#: usr/local/www/firewall_rules_edit.php:1425 +#: usr/local/www/firewall_rules_edit.php:1432 +#: usr/local/www/firewall_rules_edit.php:1443 +#: usr/local/www/firewall_rules_edit.php:1443 +msgid "In/Out" +msgstr "イン/アウト" + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +#: usr/local/www/firewall_rules_edit.php:1476 +#: usr/local/www/firewall_rules_edit.php:1487 +#: usr/local/www/firewall_rules_edit.php:1487 +msgid "" +"Choose the Out queue/Virtual interface only if you have also selected In." +msgstr "「ã‚ãªãŸã‚‚ã€é¸æŠžã•れãŸå ´åˆã«ã®ã¿å‡ºåЛ待ã¡è¡Œåˆ—/ä»®æƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +#: usr/local/www/firewall_rules_edit.php:1476 +#: usr/local/www/firewall_rules_edit.php:1487 +#: usr/local/www/firewall_rules_edit.php:1487 +msgid "" +"The Out selection is applied to traffic leaving the interface where the rule " +"is created, In is applied to traffic coming into the chosen interface." +msgstr "作æˆã•れãŸã€Œã‚¢ã‚¦ãƒˆé¸æŠžã¯ãƒ«ãƒ¼ãƒ«ãŒã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã‹ã‚‰é€ä¿¡ã•れるトラフィックã«é©ç”¨ã•れã¦ã„ã‚‹ã€ã§ã¯ã€ãƒˆãƒ©ãƒ•ィックãŒé¸ã°ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã«ç€ä¿¡ã«é©ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +#: usr/local/www/firewall_rules_edit.php:1476 +#: usr/local/www/firewall_rules_edit.php:1487 +#: usr/local/www/firewall_rules_edit.php:1487 +msgid "" +"If you are creating a floating rule, if the direction is In then the same " +"rules apply, if the direction is out the selections are reverted Out is for " +"incoming and In is for outgoing." +msgstr "「フローティングルールを作æˆã™ã‚‹å ´åˆã¯æ–¹å‘ãŒåŒã˜ã§ã€ãã®å¾Œã«ã‚ã‚‹å ´åˆã¯ã€ 「方å‘ã¯é¸æŠžãŒã‚¢ã‚¦ãƒˆæˆ»ã•れ外ã®å ´åˆã®ãƒ«ãƒ¼ãƒ«ãŒé©ç”¨ã€Œç€ä¿¡ãŠã‚ˆã³Inã¯ã€ç™ºä¿¡ç”¨ã§ã™ç”¨ã§ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1389 +#: usr/local/www/firewall_rules_edit.php:1460 +#: usr/local/www/firewall_rules_edit.php:1475 +#: usr/local/www/firewall_rules_edit.php:1482 +#: usr/local/www/firewall_rules_edit.php:1493 +#: usr/local/www/firewall_rules_edit.php:1493 +msgid "Ackqueue/Queue" +msgstr "Ackqueue /キュー" + +#: usr/local/www/firewall_rules_edit.php:1439 +#: usr/local/www/firewall_rules_edit.php:1510 +#: usr/local/www/firewall_rules_edit.php:1525 +#: usr/local/www/firewall_rules_edit.php:1532 +#: usr/local/www/firewall_rules_edit.php:1543 +#: usr/local/www/firewall_rules_edit.php:1543 +msgid "Choose the Acknowledge Queue only if you have selected Queue." +msgstr "ã‚­ãƒ¥ãƒ¼ã‚’é¸æŠžã—ãŸå ´åˆã«ã®ã¿è‚¯å®šå¿œç­”ã‚­ãƒ¥ãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。" + +#: usr/local/www/firewall_rules_edit.php:1466 +#: usr/local/www/firewall_rules_edit.php:1537 +#: usr/local/www/firewall_rules_edit.php:1552 +#: usr/local/www/firewall_rules_edit.php:1560 +#: usr/local/www/firewall_rules_edit.php:1571 +#: usr/local/www/firewall_rules_edit.php:1571 +msgid "" +"Choose a Layer7 container to apply application protocol inspection rules. " +"These are valid for TCP and UDP protocols only." +msgstr "「アプリケーションプロトコルインスペクションルールをé©ç”¨ã™ã‚‹ãƒ¬ã‚¤ãƒ¤7ã®ã‚³ãƒ³ãƒ†ãƒŠã‚’é¸æŠžã—ã¾ã™ã€‚ 「ã“れらã¯TCPãŠã‚ˆã³UDPã®ã¿ã®ãƒ—ãƒ­ãƒˆã‚³ãƒ«ã«æœ‰åйã§ã™ã€‚" + +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_schedule_edit.php:61 usr/local/www/fbegin.inc:113 +#: usr/local/www/system_advanced_misc.php:380 usr/local/www/fbegin.inc:130 +#: usr/local/www/system_advanced_misc.php:423 usr/local/www/fbegin.inc:139 +#: usr/local/www/system_advanced_misc.php:472 +#: usr/local/www/system_advanced_misc.php:484 usr/local/www/fbegin.inc:131 +#: usr/local/www/system_advanced_misc.php:531 +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/system_advanced_misc.php:531 usr/local/www/fbegin.inc:131 +msgid "Schedules" +msgstr "スケジュール" + +#: usr/local/www/firewall_schedule.php:77 +#: usr/local/www/firewall_schedule.php:77 +#, php-format +msgid "Cannot delete Schedule. Currently in use by %s" +msgstr "スケジュールを削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ç¾åœ¨%sã§ä½¿ç”¨ã•れã¦ã„ã‚‹" + +#: usr/local/www/firewall_schedule.php:97 +#: usr/local/www/firewall_schedule.php:97 +msgid "Time Range(s)" +msgstr "時間範囲( S )" + +#: usr/local/www/firewall_schedule.php:103 +#: usr/local/www/firewall_schedule.php:233 +#: usr/local/www/firewall_schedule.php:103 +#: usr/local/www/firewall_schedule.php:233 +msgid "add a new schedule" +msgstr "æ–°ã—ã„スケジュールを追加" + +#: usr/local/www/firewall_schedule.php:115 +#: usr/local/www/firewall_schedule.php:115 +msgid "Schedule is currently active" +msgstr "スケジュールãŒç¾åœ¨ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã£ã¦ã„ã‚‹" + +#: usr/local/www/firewall_schedule.php:221 +#: usr/local/www/firewall_schedule.php:221 +msgid "Do you really want to delete this schedule?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/firewall_schedule.php:240 +#: usr/local/www/firewall_schedule.php:240 +msgid "" +"Schedules act as placeholders for time ranges to be used in Firewall Rules." +msgstr "時間ã®ãƒ—レースホルダã¯ã€ãƒ•ァイアウォールルールã§ä½¿ç”¨ã™ã‚‹ç¯„囲ã¨ã—ã¦ã€Œã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯è¡Œå‹•。" + +#: usr/local/www/firewall_schedule_edit.php:93 +#: usr/local/www/firewall_schedule_edit.php:93 +msgid "Schedule may not be named LAN." +msgstr "スケジュールã¯ã€LAN命åã•れãªã„å ´åˆãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_schedule_edit.php:95 +#: usr/local/www/firewall_schedule_edit.php:95 +msgid "Schedule may not be named WAN." +msgstr "スケジュールã¯ã€WAN命åã•れãªã„å ´åˆãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_schedule_edit.php:97 +#: usr/local/www/firewall_schedule_edit.php:97 +msgid "Schedule name cannot be blank." +msgstr "スケジュールåを空白ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_schedule_edit.php:101 +#: usr/local/www/firewall_schedule_edit.php:101 +msgid "Reserved word used for schedule name." +msgstr "スケジュールåã«ä½¿ç”¨ã™ã‚‹äºˆç´„語。" + +#: usr/local/www/firewall_schedule_edit.php:104 +#: usr/local/www/firewall_schedule_edit.php:104 +msgid "The schedule name may only consist of the characters a-z, A-Z, 0-9" +msgstr "スケジュールåã¯æ–‡å­—ã ã‘AZ 〠AZ ã€ã‹ã‚‰æ§‹æˆã•れã¦ã‚‚よã„0-9" + +#: usr/local/www/firewall_schedule_edit.php:113 +#: usr/local/www/firewall_schedule_edit.php:113 +msgid "A Schedule with this name already exists." +msgstr "ã“ã®åå‰ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/firewall_schedule_edit.php:170 +#: usr/local/www/firewall_schedule_edit.php:170 +msgid "The schedule must have at least one time range configured." +msgstr "スケジュールã¯ã€å°‘ãªãã¨ã‚‚1時間範囲ãŒè¨­å®šã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/firewall_schedule_edit.php:770 +#: usr/local/www/firewall_schedule_edit.php:769 +#: usr/local/www/firewall_schedule_edit.php:769 +msgid "Schedule information" +msgstr "スケジュール情報" + +#: usr/local/www/firewall_schedule_edit.php:776 +#: usr/local/www/firewall_schedule_edit.php:775 +#: usr/local/www/firewall_schedule_edit.php:775 +msgid "Schedule Name" +msgstr "スケジュールå" + +#: usr/local/www/firewall_schedule_edit.php:782 +#: usr/local/www/firewall_schedule_edit.php:781 +#: usr/local/www/firewall_schedule_edit.php:781 +msgid "NOTE: This schedule is in use so the name may not be modified!" +msgstr "注æ„:åå‰ã¯å¤‰æ›´ã•れãªã„å ´åˆãŒã‚りã¾ã™ã®ã§ã€ã“ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ä½¿ç”¨ä¸­ã§ã™ ï¼" + +#: usr/local/www/firewall_schedule_edit.php:787 +#: usr/local/www/firewall_schedule_edit.php:786 +#: usr/local/www/firewall_schedule_edit.php:786 +msgid "" +"The name of the alias may only consist of the characters a-z, A-Z and 0-9" +msgstr "「エイリアスã®åå‰ã¯ã€æ–‡å­—ã ã‘AZ 〠AZã¨0-9ã§æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãã‚‹" + +#: usr/local/www/firewall_schedule_edit.php:804 +#: usr/local/www/firewall_schedule_edit.php:803 +#: usr/local/www/firewall_schedule_edit.php:803 +msgid "Month" +msgstr "月" + +#: usr/local/www/firewall_schedule_edit.php:847 +#: usr/local/www/firewall_schedule_edit.php:846 +#: usr/local/www/firewall_schedule_edit.php:846 +msgid "Tue" +msgstr "ç«æ›œ" + +#: usr/local/www/firewall_schedule_edit.php:849 +#: usr/local/www/firewall_schedule_edit.php:848 +#: usr/local/www/firewall_schedule_edit.php:848 +msgid "Thu" +msgstr "木" + +#: usr/local/www/firewall_schedule_edit.php:906 +#: usr/local/www/firewall_schedule_edit.php:905 +#: usr/local/www/firewall_schedule_edit.php:905 +msgid "" +"Click individual date to select that date only. Click the appropriate " +"weekday Header to select all occurences of that weekday." +msgstr "「ãれã ã‘ã§æ—¥ä»˜ã‚’é¸æŠžã—ã€å€‹ã€…ã®æ—¥ä»˜ã‚’クリックã—ã¾ã™ã€‚é©åˆ‡ãªã‚¯ãƒªãƒƒã‚¯ã—㦠"ãã®æ›œæ—¥ã®ã™ã¹ã¦ã®å‡ºç¾ç®‡æ‰€ã‚’é¸æŠžã™ã‚‹ã«ã¯ã€å¹³æ—¥ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã€‚" + +#: usr/local/www/firewall_schedule_edit.php:914 +#: usr/local/www/firewall_schedule_edit.php:996 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:995 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:995 +msgid "Start Time" +msgstr "時間を開始" + +#: usr/local/www/firewall_schedule_edit.php:914 +#: usr/local/www/firewall_schedule_edit.php:997 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:996 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:996 +msgid "Stop Time" +msgstr "åœæ­¢æ™‚é–“" + +#: usr/local/www/firewall_schedule_edit.php:927 +#: usr/local/www/firewall_schedule_edit.php:952 +#: usr/local/www/firewall_schedule_edit.php:926 +#: usr/local/www/firewall_schedule_edit.php:951 +#: usr/local/www/firewall_schedule_edit.php:926 +#: usr/local/www/firewall_schedule_edit.php:951 +msgid "Hr" +msgstr "時間" + +#: usr/local/www/firewall_schedule_edit.php:934 +#: usr/local/www/firewall_schedule_edit.php:959 +#: usr/local/www/firewall_schedule_edit.php:933 +#: usr/local/www/firewall_schedule_edit.php:958 +#: usr/local/www/firewall_schedule_edit.php:933 +#: usr/local/www/firewall_schedule_edit.php:958 +msgid "Min" +msgstr "ミン" + +#: usr/local/www/firewall_schedule_edit.php:963 +#: usr/local/www/firewall_schedule_edit.php:962 +#: usr/local/www/firewall_schedule_edit.php:962 +msgid "" +"Select the time range for the day(s) selected on the Month(s) above. A full " +"day is 0:00-23:59." +msgstr "ã€Œä¸Šè¨˜ã®æœˆï¼ˆ S )上ã§é¸æŠžã—ãŸæ—¥ã®ï¼ˆS ï¼‰ã®æ™‚é–“ç¯„å›²ã‚’é¸æŠžã—ã¾ã™ã€‚完全㪠"æ—¥ã¯0:00-23:59ã§ã™ã€‚" + +#: usr/local/www/firewall_schedule_edit.php:967 +#: usr/local/www/firewall_schedule_edit.php:966 +#: usr/local/www/firewall_schedule_edit.php:966 +msgid "Time Range Description" +msgstr "時間範囲説明" + +#: usr/local/www/firewall_schedule_edit.php:977 +#: usr/local/www/firewall_schedule_edit.php:976 +#: usr/local/www/firewall_schedule_edit.php:976 +msgid "Add Time" +msgstr "時間を加ãˆ" + +#: usr/local/www/firewall_schedule_edit.php:978 +#: usr/local/www/firewall_schedule_edit.php:977 +#: usr/local/www/firewall_schedule_edit.php:977 +msgid "Clear Selection" +msgstr "é¸æŠžã‚’ã‚¯ãƒªã‚¢" + +#: usr/local/www/firewall_schedule_edit.php:987 +#: usr/local/www/firewall_schedule_edit.php:986 +#: usr/local/www/firewall_schedule_edit.php:986 +msgid "Schedule repeat" +msgstr "スケジュールã®ç¹°ã‚Šè¿”ã—" + +#: usr/local/www/firewall_schedule_edit.php:990 +#: usr/local/www/firewall_schedule_edit.php:989 +#: usr/local/www/firewall_schedule_edit.php:989 +msgid "Configured Ranges" +msgstr "æ§‹æˆã•れãŸç¯„囲" + +#: usr/local/www/firewall_schedule_edit.php:995 +#: usr/local/www/firewall_schedule_edit.php:994 +#: usr/local/www/firewall_schedule_edit.php:994 +msgid "Day(s)" +msgstr "日( S )" + +#: usr/local/www/firewall_shaper.php:369 usr/local/www/firewall_shaper.php:370 +#: usr/local/www/firewall_shaper.php:370 +msgid "Disable shaper on interface" +msgstr "インターフェイス上ã§ã‚·ã‚§ãƒ¼ãƒ‘ーを無効" + +#: usr/local/www/firewall_shaper.php:424 usr/local/www/firewall_shaper.php:425 +#: usr/local/www/firewall_shaper.php:426 usr/local/www/firewall_shaper.php:426 +msgid "Remove Shaper" +msgstr "シェイパーを削除ã™ã‚‹" + +#: usr/local/www/diag_backup.php:84 usr/local/www/diag_backup.php:161 +#: usr/local/www/diag_backup.php:161 +msgid "Restored base_package menus after configuration restore." +msgstr "コンフィギュレーション後ã«å¾©å…ƒbase_packageメニューãŒå¾©å…ƒã—ã¾ã™ã€‚" + +#: usr/local/www/diag_backup.php:104 usr/local/www/fbegin.inc:120 +#: usr/local/www/fbegin.inc:156 usr/local/www/status_rrd_graph_settings.php:58 +#: usr/local/www/status_rrd_graph_settings.php:155 +#: usr/local/www/status_services.php:275 +#: usr/local/www/widgets/widgets/services_status.widget.php:80 +#: usr/local/www/fbegin.inc:137 usr/local/www/fbegin.inc:173 +#: usr/local/www/status_rrd_graph_settings.php:156 +#: usr/local/www/diag_backup.php:181 etc/inc/service-utils.inc:256 +#: usr/local/www/fbegin.inc:146 usr/local/www/fbegin.inc:181 +#: usr/local/www/fbegin.inc:138 usr/local/www/fbegin.inc:172 +#: etc/inc/service-utils.inc:255 etc/inc/service-utils.inc:272 +#: usr/local/www/status_rrd_graph_settings.php:58 +#: usr/local/www/status_rrd_graph_settings.php:156 +#: usr/local/www/diag_backup.php:181 usr/local/www/fbegin.inc:138 +#: usr/local/www/fbegin.inc:172 etc/inc/service-utils.inc:272 +msgid "Captive Portal" +msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«" + +#: usr/local/www/diag_backup.php:105 usr/local/www/diag_backup.php:182 +#: usr/local/www/diag_backup.php:182 +msgid "Captive Portal Vouchers" +msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼" + +#: usr/local/www/diag_backup.php:106 usr/local/www/fbegin.inc:121 +#: usr/local/www/status_services.php:263 +#: usr/local/www/widgets/widgets/services_status.widget.php:68 +#: usr/local/www/fbegin.inc:138 usr/local/www/diag_backup.php:183 +#: etc/inc/service-utils.inc:241 usr/local/www/fbegin.inc:147 +#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:240 +#: etc/inc/service-utils.inc:257 usr/local/www/diag_backup.php:183 +#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:257 +msgid "DNS Forwarder" +msgstr "DNSフォワーダ" + +#: usr/local/www/diag_backup.php:107 usr/local/www/fbegin.inc:125 +#: usr/local/www/fbegin.inc:142 usr/local/www/diag_backup.php:184 +#: usr/local/www/fbegin.inc:151 usr/local/www/fbegin.inc:143 +#: usr/local/www/diag_backup.php:184 usr/local/www/fbegin.inc:143 +msgid "DHCP Server" +msgstr "DHCPサーãƒ" + +#: usr/local/www/diag_backup.php:108 usr/local/www/diag_backup.php:185 +#: usr/local/www/diag_backup.php:185 +msgid "Firewall Rules" +msgstr "ファイアウォールルール" + +#: usr/local/www/diag_backup.php:110 usr/local/www/diag_backup.php:187 +#: usr/local/www/diag_backup.php:187 +msgid "IPSEC" +msgstr "IPSEC" + +#: usr/local/www/diag_backup.php:114 usr/local/www/diag_backup.php:191 +#: usr/local/www/diag_backup.php:191 +msgid "PPTP Server" +msgstr "PPTPサーãƒãƒ¼" + +#: usr/local/www/diag_backup.php:115 usr/local/www/diag_backup.php:193 +#: usr/local/www/diag_backup.php:193 +msgid "Scheduled Tasks" +msgstr "予定ã•れãŸã‚¿ã‚¹ã‚¯" + +#: usr/local/www/diag_backup.php:116 usr/local/www/diag_backup.php:194 +#: usr/local/www/diag_backup.php:194 +msgid "Syslog" +msgstr "Syslogã®" + +#: usr/local/www/diag_backup.php:118 usr/local/www/diag_backup.php:196 +#: usr/local/www/diag_backup.php:196 +msgid "Static routes" +msgstr "スタティックルート" + +#: usr/local/www/diag_backup.php:119 usr/local/www/diag_backup.php:197 +#: usr/local/www/diag_backup.php:197 +msgid "System tunables" +msgstr "システム調整パラメータ" + +#: usr/local/www/diag_backup.php:120 usr/local/www/diag_backup.php:198 +#: usr/local/www/diag_backup.php:198 +msgid "SNMP Server" +msgstr "SNMPサーãƒ" + +#: usr/local/www/diag_backup.php:122 usr/local/www/diag_backup.php:200 +#: usr/local/www/diag_backup.php:200 +msgid "VLANS" +msgstr "ã®VLAN" + +#: usr/local/www/diag_backup.php:130 usr/local/www/diag_backup.php:205 +#: usr/local/www/diag_backup.php:205 +msgid "ALL" +msgstr "ALL" + +#: usr/local/www/diag_backup.php:157 usr/local/www/diag_backup.php:619 +#: usr/local/www/diag_backup.php:654 usr/local/www/diag_backup.php:244 +#: usr/local/www/diag_backup.php:698 usr/local/www/diag_backup.php:735 +#: usr/local/www/diag_backup.php:703 usr/local/www/diag_backup.php:740 +#: usr/local/www/diag_backup.php:244 usr/local/www/diag_backup.php:703 +#: usr/local/www/diag_backup.php:740 +msgid "Restore configuration" +msgstr "設定を復元ã™ã‚‹" + +#: usr/local/www/diag_backup.php:159 usr/local/www/diag_backup.php:246 +#: usr/local/www/diag_backup.php:246 +msgid "Reinstall" +msgstr "å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹" + +#: usr/local/www/diag_backup.php:161 usr/local/www/diag_backup.php:673 +#: usr/local/www/diag_backup.php:248 usr/local/www/diag_backup.php:754 +#: usr/local/www/diag_backup.php:762 usr/local/www/diag_backup.php:248 +#: usr/local/www/diag_backup.php:762 +msgid "Clear Package Lock" +msgstr "クリアパッケージ·ロック" + +#: usr/local/www/diag_backup.php:165 usr/local/www/diag_backup.php:252 +#: usr/local/www/diag_backup.php:252 +msgid "Restore version" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’復元" + +#: usr/local/www/diag_backup.php:180 usr/local/www/diag_backup.php:267 +#: usr/local/www/diag_backup.php:267 +msgid "You must supply and confirm the password for encryption." +msgstr "ã‚ãªãŸã¯ã€æš—å·åŒ–ã®ãƒ‘スワードを入力ã—ã¦ç¢ºèªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/diag_backup.php:182 usr/local/www/diag_backup.php:268 +#: usr/local/www/diag_backup.php:269 usr/local/www/diag_backup.php:346 +#: usr/local/www/diag_backup.php:269 usr/local/www/diag_backup.php:346 +msgid "The supplied 'Password' and 'Confirm' field values must match." +msgstr "供給'パスワード'ã¨' CONFIRMã€ãƒ•ィールドã®å€¤ãŒä¸€è‡´ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/diag_backup.php:266 usr/local/www/diag_backup.php:344 +#: usr/local/www/diag_backup.php:344 +msgid "You must supply and confirm the password for decryption." +msgstr "ã‚ãªãŸã¯ã€å¾©å·åŒ–ã«ãƒ‘スワードを入力ã—ã¦ç¢ºèªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/diag_backup.php:278 usr/local/www/diag_backup.php:356 +#: usr/local/www/diag_backup.php:356 +#, php-format +msgid "Warning, could not read file %s" +msgstr "ã€è­¦å‘Šãƒ•ァイル%sを読ã¿å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: usr/local/www/diag_backup.php:284 usr/local/www/diag_backup.php:362 +#: usr/local/www/diag_backup.php:362 +msgid "" +"The uploaded file does not appear to contain an encrypted pfsense " +"configuration." +msgstr "コンフィグレーション"アップロードã•れãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯æš—å·åŒ–ã•れãŸpfsenseã‚’å«ã‚€ã‚ˆã†ã«è¡¨ç¤ºã•れã¾ã›ã‚“〠。" + +#: usr/local/www/diag_backup.php:291 usr/local/www/diag_backup.php:369 +#: usr/local/www/diag_backup.php:369 +msgid "Upgrading m0n0wall configuration to pfsense." +msgstr "pfsenseã™ã‚‹m0n0wallã®æ§‹æˆã‚’アップグレードã™ã‚‹ã€‚" + +#: usr/local/www/diag_backup.php:299 usr/local/www/diag_backup.php:377 +#: usr/local/www/diag_backup.php:380 usr/local/www/diag_backup.php:377 +#: usr/local/www/diag_backup.php:380 +msgid "" +"You have selected to restore an area but we could not locate the correct xml " +"tag." +msgstr "「ã‚ãªãŸã¯ã€ã‚¨ãƒªã‚¢ã‚’回復ã™ã‚‹ãŸã‚ã«é¸æŠžã—ãŸãŒã€æˆ‘ã€…ã¯æ­£ã—ã„XML見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"タグを。" + +#: usr/local/www/diag_backup.php:303 usr/local/www/diag_backup.php:392 +#: usr/local/www/diag_backup.php:392 +msgid "" +"The configuration area has been restored. You may need to reboot the " +"firewall." +msgstr "「設定領域ãŒå¾©å…ƒã•れã¾ã—ãŸã€‚å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ã€ã®ãƒ•ァイアウォールを。" + +#: usr/local/www/diag_backup.php:307 usr/local/www/diag_backup.php:397 +#: usr/local/www/diag_backup.php:397 +#, php-format +msgid "" +"You have selected to restore the full configuration but we could not locate " +"a %s tag." +msgstr "「ã‚ãªãŸã¯ã€å®Œå…¨ãªæ§‹æˆã‚’復元ã™ã‚‹ã“ã¨ã‚’é¸æŠžã—ãŸãŒã€æˆ‘々ã¯è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€ %sタグを。" + +#: usr/local/www/diag_backup.php:438 usr/local/www/diag_backup.php:515 +#: usr/local/www/diag_backup.php:515 +msgid "The m0n0wall configuration has been restored and upgraded to pfSense." +msgstr "m0n0wallã®æ§‹æˆã¯pfSenseã«å¾©å…ƒã—ã¦ã‚¢ãƒƒãƒ—グレードã•れã¾ã—ãŸã€‚" + +#: usr/local/www/diag_backup.php:461 usr/local/www/diag_backup.php:485 +#: usr/local/www/diag_backup.php:538 usr/local/www/diag_backup.php:562 +#: usr/local/www/diag_backup.php:543 usr/local/www/diag_backup.php:567 +#: usr/local/www/diag_backup.php:543 usr/local/www/diag_backup.php:567 +msgid "The configuration could not be restored." +msgstr "設定ã¯å¾©å…ƒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/diag_backup.php:466 usr/local/www/diag_backup.php:543 +#: usr/local/www/diag_backup.php:548 usr/local/www/diag_backup.php:548 +msgid "The configuration could not be restored (file upload error)." +msgstr "æ§‹æˆã¯ã€ (ファイルã®ã‚¢ãƒƒãƒ—ロードエラー)復元ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/diag_backup.php:479 usr/local/www/diag_backup.php:556 +#: usr/local/www/diag_backup.php:561 usr/local/www/diag_backup.php:561 +msgid "" +"XXX - this feature may hose your config (do NOT backrev configs!) - billm" +msgstr "「XXX - ã“ã®æ©Ÿèƒ½ã¯ã€ã‚ãªãŸã®è¨­å®šã‚’ホースも( backrevãªã„ã‚³ãƒ³ãƒ•ã‚£ã‚°ã‚’è¡Œã† ï¼ ï¼‰ - billm" + +#: usr/local/www/diag_backup.php:488 usr/local/www/diag_backup.php:565 +#: usr/local/www/diag_backup.php:570 usr/local/www/diag_backup.php:570 +msgid "No version selected." +msgstr "noãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/diag_backup.php:499 usr/local/www/diag_backup.php:576 +#: usr/local/www/diag_backup.php:581 usr/local/www/diag_backup.php:581 +msgid "Backup/restore" +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—/リストア" + +#: usr/local/www/diag_backup.php:540 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624 +#: usr/local/www/diag_backup.php:624 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +msgid "The firewall configuration has been changed." +msgstr "ファイアウォールã®è¨­å®šãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/diag_backup.php:540 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624 +#: usr/local/www/diag_backup.php:624 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +msgid "The firewall is now rebooting." +msgstr "ファイアウォールã¯ã€ä»Šã€å†èµ·å‹•ã•れã¾ã™ã€‚" + +#: usr/local/www/diag_backup.php:549 usr/local/www/diag_confbak.php:139 +#: usr/local/www/diag_backup.php:628 usr/local/www/diag_backup.php:633 +#: usr/local/www/diag_backup.php:633 usr/local/www/diag_confbak.php:139 +msgid "Config History" +msgstr "è¨­å®šå¤‰æ›´ã®æ­´å²" + +#: usr/local/www/diag_backup.php:550 usr/local/www/diag_confbak.php:140 +#: usr/local/www/fbegin.inc:190 usr/local/www/fbegin.inc:208 +#: usr/local/www/diag_backup.php:629 usr/local/www/fbegin.inc:216 +#: usr/local/www/diag_backup.php:634 usr/local/www/fbegin.inc:207 +#: usr/local/www/diag_backup.php:634 usr/local/www/fbegin.inc:207 +#: usr/local/www/diag_confbak.php:140 +msgid "Backup/Restore" +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—/復元" + +#: usr/local/www/diag_backup.php:560 usr/local/www/diag_backup.php:639 +#: usr/local/www/diag_backup.php:644 usr/local/www/diag_backup.php:644 +msgid "Backup configuration" +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®æ§‹æˆ" + +#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644 +#: usr/local/www/diag_backup.php:649 usr/local/www/diag_backup.php:649 +msgid "Click this button to download the system configuration in XML format." +msgstr "XMLå½¢å¼ã§ã‚·ã‚¹ãƒ†ãƒ æ§‹æˆã‚’ダウンロードã™ã‚‹ã«ã¯ã“ã®ãƒœã‚¿ãƒ³ã‚’クリックã—ã¾ã™ã€‚" + +#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644 +#: usr/local/www/diag_backup.php:649 usr/local/www/diag_backup.php:649 +msgid "Backup area:" +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—領域:" + +#: usr/local/www/diag_backup.php:572 usr/local/www/diag_backup.php:651 +#: usr/local/www/diag_backup.php:656 usr/local/www/diag_backup.php:656 +msgid "Do not backup package information." +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã•れãªã„パッケージ情報を行ã„ã¾ã™ã€‚" + +#: usr/local/www/diag_backup.php:582 usr/local/www/diag_backup.php:661 +#: usr/local/www/diag_backup.php:666 usr/local/www/diag_backup.php:666 +msgid "Encrypt this configuration file." +msgstr "ã“ã®æ§‹æˆãƒ•ァイルを暗å·åŒ–ã™ã‚‹ã€‚" + +#: usr/local/www/diag_backup.php:590 usr/local/www/diag_backup.php:669 +#: usr/local/www/diag_backup.php:674 usr/local/www/diag_backup.php:674 +msgid "" +"Do not backup RRD data (NOTE: RRD Data can consume 4+ megabytes of config." +"xml space!)" +msgstr "「 ( ï¼ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã—ãªã„RRDデータDO注: RRDデータ設定ã®4メガãƒã‚¤ãƒˆã‚’消費ã™ã‚‹å¯èƒ½æ€§ãŒã€ŒXML空間 )" + +#: usr/local/www/diag_backup.php:605 usr/local/www/diag_backup.php:684 +#: usr/local/www/diag_backup.php:689 usr/local/www/diag_backup.php:689 +msgid "confirm:" +msgstr "確èªã—ã¦ãã ã•ã„。" + +#: usr/local/www/diag_backup.php:612 usr/local/www/diag_backup.php:691 +#: usr/local/www/diag_backup.php:696 usr/local/www/diag_backup.php:696 +msgid "Download configuration" +msgstr "ダウンロードã®è¨­å®š" + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703 +#: usr/local/www/diag_backup.php:708 usr/local/www/diag_backup.php:708 +msgid "Open a" +msgstr "オープンA" + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703 +#: usr/local/www/diag_backup.php:708 usr/local/www/diag_backup.php:708 +msgid "" +"configuration XML file and click the button below to restore the " +"configuration." +msgstr "「構æˆXMLファイルãŠã‚ˆã³å¾©å…ƒã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ã€Œè¨­å®šã‚’。" + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:705 +#: usr/local/www/diag_backup.php:710 usr/local/www/diag_backup.php:710 +msgid "Restore area:" +msgstr "エリアを復元ã—ã¾ã™ã€‚" + +#: usr/local/www/diag_backup.php:632 usr/local/www/diag_backup.php:713 +#: usr/local/www/diag_backup.php:718 usr/local/www/diag_backup.php:718 +msgid "Configuration file is encrypted." +msgstr "è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ãŒæš—å·åŒ–ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/diag_backup.php:639 usr/local/www/diag_backup.php:720 +#: usr/local/www/diag_backup.php:725 usr/local/www/diag_backup.php:725 +msgid "Password :" +msgstr "パスワード:" + +#: usr/local/www/diag_backup.php:647 usr/local/www/diag_backup.php:728 +#: usr/local/www/diag_backup.php:733 usr/local/www/diag_backup.php:733 +msgid "confirm :" +msgstr "確èªã—ã¦ãã ã•ã„。" + +#: usr/local/www/diag_backup.php:655 usr/local/www/diag_backup.php:736 +#: usr/local/www/diag_backup.php:741 usr/local/www/diag_backup.php:741 +msgid "The firewall will reboot after restoring the configuration." +msgstr "ファイアウォールã¯ã€è¨­å®šã‚’復元ã—ãŸå¾Œã«å†èµ·å‹•ã—ã¾ã™ã€‚" + +#: usr/local/www/diag_backup.php:663 usr/local/www/diag_backup.php:744 +#: usr/local/www/diag_backup.php:749 usr/local/www/diag_backup.php:749 +msgid "Package Functions" +msgstr "パッケージ·ファンクション" + +#: usr/local/www/diag_backup.php:668 usr/local/www/diag_backup.php:749 +#: usr/local/www/diag_backup.php:755 usr/local/www/diag_backup.php:755 +msgid "" +"Click this button to reinstall all system packages. This may take a while." +msgstr "「ã™ã¹ã¦ã®ã‚·ã‚¹ãƒ†ãƒ ãƒ‘ッケージをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ã“ã®ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。ã“ã‚Œã¯æ™‚é–“ãŒã‹ã‹ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/diag_backup.php:669 usr/local/www/diag_backup.php:750 +#: usr/local/www/diag_backup.php:756 usr/local/www/diag_backup.php:756 +msgid "Reinstall packages" +msgstr "パッケージをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" + +#: usr/local/www/diag_backup.php:672 usr/local/www/diag_backup.php:753 +#: usr/local/www/diag_backup.php:761 usr/local/www/diag_backup.php:761 +msgid "" +"Click this button to clear the package lock if a package fails to reinstall " +"properly after an upgrade." +msgstr "é©åˆ‡ã«ã‚¢ãƒƒãƒ—グレード後ã€ã€Œãƒ‘ッケージãŒå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ãŸå ´åˆã€ãƒ‘ッケージã®ãƒ­ãƒƒã‚¯ã‚’クリアã™ã‚‹ã«ã¯ã€ã“ã®ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„"。" + +#: usr/local/www/firewall_shaper_queues.php:172 +#: usr/local/www/firewall_shaper_queues.php:172 +msgid "Firewall: Shaper: By Queues View" +msgstr "ファイアウォール:シェイパー:キューを見るã“ã¨ã«ã‚ˆã‚Šã€" + +#: usr/local/www/diag_confbak.php:49 usr/local/www/diag_confbak.php:49 +#, php-format +msgid "Successfully reverted to timestamp %1$s with description "%2$s"." +msgstr "首尾よã説明「 %2$s ã€ã¨ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã¯%1$sã«æˆ»ã£ãŸã€‚" + +#: usr/local/www/diag_confbak.php:49 usr/local/www/diag_confbak.php:59 +#: usr/local/www/diag_confbak.php:111 usr/local/www/diag_confbak.php:161 +#: usr/local/www/diag_confbak.php:169 usr/local/www/diag_confbak.php:162 +#: usr/local/www/diag_confbak.php:171 +#: usr/local/www/firewall_rules_edit.php:1585 +#: usr/local/www/firewall_rules_edit.php:1593 +#: usr/local/www/firewall_nat_edit.php:869 +#: usr/local/www/firewall_nat_edit.php:877 +#: usr/local/www/firewall_nat_out_edit.php:684 +#: usr/local/www/firewall_nat_out_edit.php:692 +#: usr/local/www/firewall_rules_edit.php:1596 +#: usr/local/www/firewall_rules_edit.php:1604 +#: usr/local/www/firewall_nat_edit.php:870 +#: usr/local/www/firewall_nat_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:1596 +#: usr/local/www/firewall_rules_edit.php:1604 +#: usr/local/www/firewall_nat_edit.php:870 +#: usr/local/www/firewall_nat_edit.php:878 usr/local/www/diag_confbak.php:49 +#: usr/local/www/diag_confbak.php:59 usr/local/www/diag_confbak.php:111 +#: usr/local/www/diag_confbak.php:162 usr/local/www/diag_confbak.php:171 +#: usr/local/www/firewall_nat_out_edit.php:684 +#: usr/local/www/firewall_nat_out_edit.php:692 +msgid "n/j/y H:i:s" +msgstr "N / J / Yã®H : I: S" + +#: usr/local/www/diag_confbak.php:51 usr/local/www/diag_confbak.php:51 +msgid "Unable to revert to the selected configuration." +msgstr "é¸æŠžã•ã‚ŒãŸæ§‹æˆã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: usr/local/www/diag_confbak.php:59 usr/local/www/diag_confbak.php:59 +#, php-format +msgid "Deleted backup with timestamp %1$s and description "%2$s"." +msgstr "タイムスタンプã¯%1$sã¨èª¬æ˜Žã€Œ %2$s ã€ã§å‰Šé™¤ã•れãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—。" + +#: usr/local/www/diag_confbak.php:98 usr/local/www/diag_confbak.php:98 +msgid "Configuration History" +msgstr "æ§‹æˆå±¥æ­´" + +#: usr/local/www/diag_confbak.php:111 usr/local/www/diag_confbak.php:111 +msgid "Configuration diff from" +msgstr "ã‹ã‚‰è¨­å®šãƒ‡ãƒ•" + +#: usr/local/www/diag_confbak.php:152 usr/local/www/diag_confbak.php:206 +#: usr/local/www/diag_confbak.php:208 usr/local/www/diag_confbak.php:152 +#: usr/local/www/diag_confbak.php:208 +msgid "Diff" +msgstr "デフ" + +#: usr/local/www/diag_confbak.php:153 +#: usr/local/www/system_firmware_restorefullbackup.php:140 +#: usr/local/www/system_firmware_restorefullbackup.php:140 +#: usr/local/www/diag_confbak.php:153 +msgid "Date" +msgstr "日付" + +#: usr/local/www/diag_confbak.php:154 usr/local/www/diag_confbak.php:155 +#: usr/local/www/diag_confbak.php:155 +msgid "Configuration Change" +msgstr "æ§‹æˆå¤‰æ›´" + +#: usr/local/www/diag_confbak.php:163 usr/local/www/diag_confbak.php:165 +#: usr/local/www/diag_confbak.php:165 +msgid "Current" +msgstr "ç¾åœ¨ã®" + +#: usr/local/www/diag_confbak.php:171 usr/local/www/diag_confbak.php:173 +#: usr/local/www/widgets/widgets/gateways.widget.php:105 +#: usr/local/www/widgets/widgets/gateways.widget.php:128 +#: usr/local/www/widgets/widgets/gateways.widget.php:129 +#: usr/local/www/widgets/widgets/gateways.widget.php:129 +#: usr/local/www/diag_confbak.php:173 +msgid "Unknown" +msgstr "䏿˜Ž" + +#: usr/local/www/diag_confbak.php:189 usr/local/www/diag_confbak.php:191 +#: usr/local/www/diag_confbak.php:191 +msgid "Revert to this configuration?" +msgstr "ã“ã®æ§‹æˆã«æˆ»ã™ï¼Ÿ" + +#: usr/local/www/diag_confbak.php:190 usr/local/www/diag_confbak.php:192 +#: usr/local/www/diag_confbak.php:192 +msgid "Revert to this configuration" +msgstr "ã“ã®æ§‹æˆã«æˆ»ã™" + +#: usr/local/www/diag_confbak.php:194 usr/local/www/diag_confbak.php:196 +#: usr/local/www/diag_confbak.php:196 +msgid "Delete this configuration backup?" +msgstr "ã“ã®æ§‹æˆã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/diag_confbak.php:195 usr/local/www/diag_confbak.php:197 +#: usr/local/www/diag_confbak.php:197 +msgid "Remove this backup" +msgstr "ã“ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除" + +#: usr/local/www/diag_confbak.php:200 usr/local/www/diag_confbak.php:202 +#: usr/local/www/diag_confbak.php:202 +msgid "Download this backup" +msgstr "ã“ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—をダウンロードã™ã‚‹" + +#: usr/local/www/diag_confbak.php:212 usr/local/www/diag_confbak.php:214 +#: usr/local/www/diag_confbak.php:214 +msgid "No backups found." +msgstr "見ã¤ã‹ã‚Šã¾ã›ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/firewall_virtual_ip.php:106 +#: usr/local/www/firewall_virtual_ip.php:103 +#: usr/local/www/firewall_virtual_ip.php:103 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"NAT mapping." +msgstr "NATã®ãƒžãƒƒãƒ”ングã¯ã€Œãれã¯ã¾ã å°‘ãªãã¨ã‚‚1ã«ã‚ˆã£ã¦å‚ç…§ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/firewall_virtual_ip.php:118 +msgid "This entry cannot be deleted because it is still referenced by CARP" +msgstr "ãれã¯ã¾ã CARPã«ã‚ˆã£ã¦å‚ç…§ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“" + +#: usr/local/www/firewall_virtual_ip.php:124 +msgid "" +"This entry cannot be deleted because it is still referenced by ip alias entry" +msgstr "ãれã¯ã¾ã IPエイリアスエントリã«ã‚ˆã£ã¦å‚ç…§ã•れã¦ã„ã‚‹ãŸã‚〠「ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“" + +#: usr/local/www/firewall_virtual_ip.php:149 +#: usr/local/www/firewall_virtual_ip.php:152 +#: usr/local/www/firewall_virtual_ip.php:166 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/firewall_virtual_ip.php:189 +msgid "Virtual IP Addresses" +msgstr "仮想IPアドレス" + +#: usr/local/www/firewall_virtual_ip.php:164 +#: usr/local/www/firewall_virtual_ip.php:167 +#: usr/local/www/firewall_virtual_ip.php:181 +#: usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_virtual_ip.php:204 +msgid "The VIP configuration has been changed." +msgstr "VIPã®æ§‹æˆãŒå¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/firewall_virtual_ip.php:172 usr/local/www/fbegin.inc:115 +#: usr/local/www/fbegin.inc:132 usr/local/www/fbegin.inc:141 +#: usr/local/www/firewall_virtual_ip.php:175 +#: usr/local/www/firewall_virtual_ip.php:189 usr/local/www/fbegin.inc:133 +#: usr/local/www/firewall_virtual_ip.php:212 +#: usr/local/www/firewall_virtual_ip.php:212 usr/local/www/fbegin.inc:133 +msgid "Virtual IPs" +msgstr "仮想IP" + +#: usr/local/www/firewall_virtual_ip.php:173 +#: usr/local/www/firewall_virtual_ip.php:176 +#: usr/local/www/firewall_virtual_ip.php:190 +#: usr/local/www/firewall_virtual_ip.php:213 +#: usr/local/www/firewall_virtual_ip.php:213 +msgid "CARP Settings" +msgstr "CARPã®è¨­å®š" + +#: usr/local/www/firewall_virtual_ip.php:185 +#: usr/local/www/firewall_virtual_ip.php:188 +#: usr/local/www/firewall_virtual_ip.php:202 +#: usr/local/www/firewall_virtual_ip.php:225 +#: usr/local/www/firewall_virtual_ip.php:225 +msgid "Virtual IP address" +msgstr "仮想IPアドレス" + +#: usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +#: usr/local/www/firewall_virtual_ip.php:291 +#: usr/local/www/firewall_virtual_ip.php:291 +msgid "The virtual IP addresses defined on this page may be used in" +msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã§å®šç¾©ã•れãŸä»®æƒ³IPアドレスã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã‚‹" + +#: usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +#: usr/local/www/firewall_virtual_ip.php:291 +#: usr/local/www/firewall_virtual_ip.php:291 +msgid "mappings." +msgstr "マッピング。" + +#: usr/local/www/firewall_virtual_ip.php:243 +#: usr/local/www/firewall_virtual_ip.php:249 +#: usr/local/www/firewall_virtual_ip.php:269 +#: usr/local/www/firewall_virtual_ip.php:292 +#: usr/local/www/firewall_virtual_ip.php:292 +msgid "You can check the status of your CARP Virtual IPs and interfaces " +msgstr "ã‚ãªãŸã¯ã€CARPã®ä»®æƒ³IPã¨ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309 +#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297 +#: usr/local/www/guiconfig.inc:294 usr/local/www/guiconfig.inc:294 +msgid "apply" +msgstr "é©ç”¨ã™ã‚‹" + +#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309 +#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297 +#: usr/local/www/guiconfig.inc:294 usr/local/www/guiconfig.inc:294 +msgid "save" +msgstr "ä¿å­˜" + +#: usr/local/www/guiconfig.inc:295 usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/system_certmanager.php:541 +#: usr/local/www/system_certmanager.php:640 usr/local/www/guiconfig.inc:309 +#: usr/local/www/vpn_ipsec_mobile.php:335 usr/local/www/guiconfig.inc:298 +#: usr/local/www/system_certmanager.php:649 usr/local/www/guiconfig.inc:297 +#: usr/local/www/system_certmanager.php:650 usr/local/www/guiconfig.inc:294 +#: usr/local/www/system_certmanager.php:650 +#: usr/local/www/vpn_ipsec_mobile.php:335 usr/local/www/guiconfig.inc:294 +msgid "create" +msgstr "作る" + +#: usr/local/www/halt.php:52 usr/local/www/halt.php:61 +#: usr/local/www/halt.php:61 +msgid "The system is halting now. This may take one minute." +msgstr "システムãŒåœæ­¢ã•れる。ã“れã¯1分ã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/halt.php:59 usr/local/www/halt.php:54 +#: usr/local/www/halt.php:54 +msgid "Halt system" +msgstr "åœæ­¢ã‚·ã‚¹ãƒ†ãƒ " + +#: usr/local/www/halt.php:67 usr/local/www/halt.php:67 +msgid "Are you sure you want to halt the system?" +msgstr "ã‚ãªãŸã¯ã‚·ã‚¹ãƒ†ãƒ ã‚’åœæ­¢ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ" + +#: usr/local/www/index.php:115 usr/local/www/index.php:126 +#: usr/local/www/index.php:129 usr/local/www/index.php:126 +msgid "Widget configuration has been changed." +msgstr "ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®æ§‹æˆãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/index.php:172 usr/local/www/index.php:183 +#: usr/local/www/index.php:186 usr/local/www/index.php:183 +#, php-format +msgid "Welcome to %s!\n" +msgstr "%sã¸ã‚ˆã†ã“ã ï¼ \n" + +#: usr/local/www/index.php:173 usr/local/www/index.php:184 +#: usr/local/www/index.php:187 usr/local/www/index.php:184 +msgid "One moment while we start the initial setup wizard." +msgstr "ä¸€çž¬ã€æˆ‘ã€…ã¯æœ€åˆã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ウィザードを開始ã—ã¦ã„る。" + +#: usr/local/www/index.php:174 usr/local/www/index.php:185 +#: usr/local/www/index.php:188 usr/local/www/index.php:185 +msgid "" +"Embedded platform users: Please be patient, the wizard takes a little longer " +"to run than the normal GUI." +msgstr "通常ã®GUIよりも実行ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã€Œçµ„è¾¼ã¿ãƒ—ラットフォームã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„ã€ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ã¯å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ã€ 。" + +#: usr/local/www/index.php:175 usr/local/www/index.php:186 +#: usr/local/www/index.php:189 usr/local/www/index.php:186 +#, php-format +msgid "To bypass the wizard, click on the %s logo on the initial page." +msgstr "ウィザードをãƒã‚¤ãƒ‘スã™ã‚‹ã«ã¯ã€æœ€åˆã®ãƒšãƒ¼ã‚¸ã«ã‚ã‚‹%sã®ãƒ­ã‚´ã‚’クリックã—ã¦ãã ã•ã„。" + +#: usr/local/www/index.php:454 usr/local/www/index.php:446 +#: usr/local/www/index.php:463 usr/local/www/index.php:468 +#: usr/local/www/index.php:465 usr/local/www/index.php:465 +msgid "Status: Dashboard" +msgstr "ステータス:ダッシュボード" + +#: usr/local/www/index.php:486 usr/local/www/index.php:478 +#: usr/local/www/index.php:490 usr/local/www/index.php:494 +#: usr/local/www/index.php:491 usr/local/www/index.php:491 +msgid "Available Widgets" +msgstr "利用å¯èƒ½ãªã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆ" + +#: usr/local/www/index.php:524 usr/local/www/index.php:516 +#: usr/local/www/index.php:528 usr/local/www/index.php:531 +#: usr/local/www/index.php:528 +msgid "Welcome to the Dashboard page" +msgstr "ダッシュボードページã¸ã‚ˆã†ã“ã" + +#: usr/local/www/index.php:532 usr/local/www/index.php:524 +#: usr/local/www/index.php:536 usr/local/www/index.php:538 +#: usr/local/www/index.php:535 usr/local/www/index.php:535 +msgid "" +"This page allows you to customize the information you want to be displayed!" +msgstr ""ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€è¡¨ç¤ºã—ãŸã„情報をカスタマイズã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ ï¼" + +#: usr/local/www/index.php:533 usr/local/www/index.php:525 +#: usr/local/www/index.php:537 usr/local/www/index.php:539 +#: usr/local/www/index.php:536 usr/local/www/index.php:536 +msgid "To get started click the" +msgstr "クリック開始ã™ã‚‹ã«ã¯" + +#: usr/local/www/index.php:533 usr/local/www/index.php:525 +#: usr/local/www/index.php:537 usr/local/www/index.php:539 +#: usr/local/www/index.php:536 usr/local/www/index.php:536 +msgid "icon to add widgets." +msgstr "ウィジェットを追加ã™ã‚‹ã«ã¯ã€ã‚¢ã‚¤ã‚³ãƒ³ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" + +#: usr/local/www/index.php:535 usr/local/www/index.php:527 +#: usr/local/www/index.php:539 usr/local/www/index.php:541 +#: usr/local/www/index.php:538 usr/local/www/index.php:538 +msgid "You can move any widget around by clicking and dragging the title." +msgstr "ã‚ãªãŸã¯ã‚¿ã‚¤ãƒˆãƒ«ã‚’クリックã—ã¦ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§å‘¨ã‚Šã®ä»»æ„ã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã‚’移動ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/index.php:541 usr/local/www/index.php:534 +#: usr/local/www/index.php:546 usr/local/www/index.php:548 +#: usr/local/www/index.php:545 usr/local/www/index.php:545 +msgid "Click here to add widgets" +msgstr "ウィジェットを追加ã™ã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¦ãã ã•ã„" + +#: usr/local/www/index.php:543 usr/local/www/index.php:536 +#: usr/local/www/index.php:548 usr/local/www/index.php:550 +#: usr/local/www/index.php:547 usr/local/www/index.php:547 +msgid "Click here for help" +msgstr "ヘルプã¯ã“ã¡ã‚‰ã‹ã‚‰" + +#: usr/local/www/index.php:547 usr/local/www/index.php:540 +#: usr/local/www/index.php:552 usr/local/www/index.php:554 +#: usr/local/www/index.php:551 usr/local/www/index.php:551 +msgid "Save Settings" +msgstr "設定をä¿å­˜ã™ã‚‹" + +#: usr/local/www/index.php:699 usr/local/www/index.php:692 +#: usr/local/www/index.php:704 usr/local/www/index.php:701 +#: usr/local/www/index.php:701 +msgid "Loading selected widget" +msgstr "é¸æŠžã—ãŸã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®ãƒ­ãƒ¼ãƒ‰" + +#: usr/local/www/interfaces.php:186 usr/local/www/interfaces.php:184 +#: usr/local/www/interfaces.php:185 usr/local/www/interfaces.php:185 +#, php-format +msgid "Sorry, an alias with the name %s already exists." +msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€åå‰%sã¨ã®åˆ¥åãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:327 usr/local/www/interfaces.php:355 +#: usr/local/www/interfaces.php:352 usr/local/www/interfaces.php:350 +#: usr/local/www/interfaces.php:351 usr/local/www/interfaces.php:350 +msgid "You have already applied your settings!" +msgstr "ã‚ãªãŸã¯ã™ã§ã«ã‚ãªãŸã®è¨­å®šã‚’é©ç”¨ã—㟠ï¼" + +#: usr/local/www/interfaces.php:407 usr/local/www/interfaces.php:443 +#: usr/local/www/interfaces.php:440 usr/local/www/interfaces.php:428 +#: usr/local/www/interfaces.php:433 usr/local/www/interfaces.php:429 +#: usr/local/www/interfaces.php:429 +msgid "An interface with the specified description already exists." +msgstr "指定ã•れãŸèª¬æ˜Žã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:413 usr/local/www/interfaces.php:449 +#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:434 +#: usr/local/www/interfaces.php:439 usr/local/www/interfaces.php:435 +#: usr/local/www/interfaces.php:435 +msgid "" +"The DHCP Server is active on this interface and it can be used only with a " +"static IP configuration. Please disable the DHCP Server service on this " +"interface first, then change the interface configuration." +msgstr "「DHCPサーãƒã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã£ã¦ã„ã‚‹ã¨ã€ãれã ã‘ã§ä½¿ç”¨ã§ãる「é™çš„IP設定。ã“ã®ã€Œã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã§DHCPサーãƒãƒ¼ã‚µãƒ¼ãƒ“スを無効ã«ã—ã¦ãã ã•ã„ã¾ãšã€ãã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®è¨­å®šã‚’変更ã—ã¦ãã ã•ã„。" + +#: usr/local/www/interfaces.php:415 usr/local/www/interfaces.php:451 +#: usr/local/www/interfaces.php:448 usr/local/www/interfaces.php:436 +#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:437 +#: usr/local/www/interfaces.php:437 +msgid "" +"The DHCP6 Server is active on this interface and it can be used only with a " +"static IPv6 configuration. Please disable the DHCPv6 Server service on this " +"interface first, then change the interface configuration." +msgstr "「 DHCP6 Serverã¯ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã£ã¦ã„ã‚‹ã¨ã€ãれã ã‘ã§ä½¿ç”¨ã§ãる「é™çš„IPv6設定。ã“ã®ã€Œã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§DHCPv6サーãƒã‚µãƒ¼ãƒ“スを無効ã«ã—ã¦ãã ã•ã„ã¾ãšã€ãã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®è¨­å®šã‚’変更ã—ã¦ãã ã•ã„。" + +#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:1364 +#: usr/local/www/status_interfaces.php:192 +#: usr/local/www/status_interfaces.php:266 usr/local/www/interfaces.php:456 +#: usr/local/www/interfaces.php:1468 usr/local/www/status_interfaces.php:269 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:1456 +#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:1469 +#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:1514 +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:1508 +#: usr/local/www/status_interfaces.php:269 usr/local/www/interfaces.php:442 +#: usr/local/www/interfaces.php:1508 +msgid "IPv4 address" +msgstr "IPv4アドレス" + +#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:456 usr/local/www/interfaces.php:509 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:494 +#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:499 +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:495 +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:495 +msgid "Subnet bit count" +msgstr "サブãƒãƒƒãƒˆãƒ“ット数" + +#: usr/local/www/interfaces.php:427 usr/local/www/interfaces.php:480 +msgid "" +"This interface is referenced by VIPs please delete those before setting the " +"interface to 'none' configuration." +msgstr "'none'ã«è¨­å®šã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス「ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã¯ã€è¨­å®šã™ã‚‹å‰ã«ã€ãれらを削除ã—ã¦ãã ã•ã„è¦äººã«ã‚ˆã£ã¦å‚ç…§ã•れã¦ã„る〠。" + +#: usr/local/www/interfaces.php:432 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:521 +#: usr/local/www/interfaces.php:531 usr/local/www/interfaces.php:541 +#: usr/local/www/interfaces.php:546 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:518 usr/local/www/interfaces.php:528 +#: usr/local/www/interfaces.php:538 usr/local/www/interfaces.php:543 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:526 +#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:511 +#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:533 +#: usr/local/www/interfaces.php:454 usr/local/www/interfaces.php:507 +#: usr/local/www/interfaces.php:519 usr/local/www/interfaces.php:529 +#: usr/local/www/interfaces.php:534 usr/local/www/interfaces.php:454 +#: usr/local/www/interfaces.php:507 usr/local/www/interfaces.php:519 +#: usr/local/www/interfaces.php:529 usr/local/www/interfaces.php:534 +#, php-format +msgid "You have to reassign the interface to be able to configure as %s." +msgstr "ã‚ãªãŸã¯%s.ã¨ã—ã¦è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスをå†å‰²ã‚Šå½“ã¦ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1748 +#: usr/local/www/interfaces.php:472 usr/local/www/interfaces.php:1926 +#: usr/local/www/interfaces.php:469 usr/local/www/interfaces.php:1914 +#: usr/local/www/interfaces.php:457 usr/local/www/interfaces.php:1938 +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:1984 +#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:1972 +#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:1972 +msgid "Modem Port" +msgstr "モデムãƒãƒ¼ãƒˆ" + +#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1736 +#: usr/local/www/interfaces_ppps_edit.php:182 +#: usr/local/www/interfaces_ppps_edit.php:523 usr/local/www/interfaces.php:472 +#: usr/local/www/interfaces.php:1914 +#: usr/local/www/interfaces_ppps_edit.php:524 usr/local/www/interfaces.php:469 +#: usr/local/www/interfaces.php:1902 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:530 usr/local/www/interfaces.php:457 +#: usr/local/www/interfaces.php:1926 usr/local/www/interfaces.php:462 +#: usr/local/www/interfaces.php:1972 +#: usr/local/www/interfaces_ppps_edit.php:528 usr/local/www/interfaces.php:458 +#: usr/local/www/interfaces.php:1960 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:528 usr/local/www/interfaces.php:458 +#: usr/local/www/interfaces.php:1960 +msgid "Phone Number" +msgstr "電話番å·" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445 +#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:466 usr/local/www/interfaces.php:468 +#: usr/local/www/interfaces.php:471 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:467 +msgid "PPPoE username" +msgstr "PPPoEã®ãƒ¦ãƒ¼ã‚¶å" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445 +#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:466 usr/local/www/interfaces.php:468 +#: usr/local/www/interfaces.php:471 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:467 +msgid "PPPoE password" +msgstr "PPPoEã®ãƒ‘スワード" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452 +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:1807 +#: usr/local/www/interfaces.php:1926 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498 +#: usr/local/www/interfaces.php:1985 usr/local/www/interfaces.php:2104 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1973 +#: usr/local/www/interfaces.php:2092 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:2000 usr/local/www/interfaces.php:2122 +#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:2046 +#: usr/local/www/interfaces.php:2168 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:2035 usr/local/www/interfaces.php:2157 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:2035 usr/local/www/interfaces.php:2157 +msgid "Dial on demand" +msgstr "ダイヤルオンデマンド" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452 +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484 +msgid "Idle timeout value" +msgstr "アイドルタイムアウト値" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 +msgid "PPTP username" +msgstr "PPTPユーザå" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 +msgid "PPTP password" +msgstr "PPTPã®ãƒ‘スワード" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 +msgid "PPTP local IP address" +msgstr "PPTPローカルIPアドレス" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 +msgid "PPTP subnet" +msgstr "PPTPサブãƒãƒƒãƒˆ" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 +msgid "PPTP remote IP address" +msgstr "PPTPリモートIPアドレス" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488 +#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 +msgid "L2TP username" +msgstr "L2TPã®ãƒ¦ãƒ¼ã‚¶å" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488 +#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 +msgid "L2TP password" +msgstr "L2TPパスワード" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488 +#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 +msgid "L2TP remote IP address" +msgstr "L2TPリモートIPアドレス" + +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1470 +#: usr/local/www/status_interfaces.php:216 usr/local/www/diag_ndp.php:129 +#: usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcpv6_edit.php:198 +#: usr/local/www/status_dhcpv6_leases.php:359 +#: usr/local/www/services_dhcpv6_edit.php:201 +#: usr/local/www/status_interfaces.php:297 +#: usr/local/www/status_dhcpv6_leases.php:403 usr/local/www/interfaces.php:509 +#: usr/local/www/interfaces.php:1576 usr/local/www/services_dhcpv6.php:899 +#: usr/local/www/services_dhcpv6_edit.php:200 +#: usr/local/www/status_interfaces.php:300 +#: usr/local/www/status_dhcpv6_leases.php:404 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:1564 usr/local/www/services_dhcpv6.php:830 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/services_dhcpv6_edit.php:203 +#: usr/local/www/services_dhcpv6.php:851 usr/local/www/interfaces.php:494 +#: usr/local/www/interfaces.php:1574 usr/local/www/interfaces.php:499 +#: usr/local/www/interfaces.php:1620 usr/local/www/interfaces.php:495 +#: usr/local/www/interfaces.php:1613 usr/local/www/diag_ndp.php:129 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/services_dhcpv6_edit.php:203 +#: usr/local/www/status_interfaces.php:300 +#: usr/local/www/services_dhcpv6.php:851 usr/local/www/interfaces.php:495 +#: usr/local/www/interfaces.php:1613 +msgid "IPv6 address" +msgstr "IPv6アドレス" + +#: usr/local/www/interfaces.php:493 usr/local/www/interfaces.php:563 +#: usr/local/www/interfaces.php:560 usr/local/www/interfaces.php:550 +#: usr/local/www/interfaces.php:557 usr/local/www/interfaces.php:553 +#: usr/local/www/interfaces.php:553 +msgid "A valid IPv4 address must be specified." +msgstr "有効ãªIPv4アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:495 usr/local/www/services_dhcpv6_edit.php:123 +#: usr/local/www/services_dhcpv6_edit.php:125 usr/local/www/interfaces.php:565 +#: usr/local/www/interfaces.php:562 usr/local/www/services_dhcpv6_edit.php:128 +#: usr/local/www/interfaces.php:574 usr/local/www/interfaces.php:570 +#: usr/local/www/services_dhcpv6_edit.php:128 usr/local/www/interfaces.php:570 +msgid "A valid IPv6 address must be specified." +msgstr "有効ãªIPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:497 usr/local/www/interfaces.php:499 +#: usr/local/www/interfaces.php:567 usr/local/www/interfaces.php:569 +#: usr/local/www/interfaces.php:564 usr/local/www/interfaces.php:566 +#: usr/local/www/interfaces.php:579 usr/local/www/interfaces.php:581 +#: usr/local/www/interfaces.php:590 usr/local/www/interfaces.php:592 +#: usr/local/www/interfaces.php:586 usr/local/www/interfaces.php:588 +#: usr/local/www/interfaces.php:586 usr/local/www/interfaces.php:588 +msgid "A valid subnet bit count must be specified." +msgstr "有効ãªã‚µãƒ–ãƒãƒƒãƒˆãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:501 usr/local/www/interfaces.php:571 +#: usr/local/www/interfaces.php:568 usr/local/www/interfaces.php:583 +#: usr/local/www/interfaces.php:594 usr/local/www/interfaces.php:590 +#: usr/local/www/interfaces.php:590 +msgid "A valid alias IP address must be specified." +msgstr "有効ãªã‚¨ã‚¤ãƒªã‚¢ã‚¹IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:503 usr/local/www/interfaces.php:573 +#: usr/local/www/interfaces.php:570 usr/local/www/interfaces.php:585 +#: usr/local/www/interfaces.php:596 usr/local/www/interfaces.php:592 +#: usr/local/www/interfaces.php:592 +msgid "A valid alias subnet bit count must be specified." +msgstr "有効ãªã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚µãƒ–ãƒãƒƒãƒˆãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:517 usr/local/www/system_routes_edit.php:103 +#: usr/local/www/system_routes_edit.php:104 usr/local/www/interfaces.php:587 +#: usr/local/www/interfaces.php:584 usr/local/www/interfaces.php:599 +#: usr/local/www/system_routes_edit.php:107 usr/local/www/interfaces.php:610 +#: usr/local/www/interfaces.php:606 usr/local/www/system_routes_edit.php:109 +#: usr/local/www/interfaces.php:606 +msgid "A valid gateway must be specified." +msgstr "有効ãªã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:521 usr/local/www/interfaces.php:591 +#: usr/local/www/interfaces.php:588 usr/local/www/interfaces.php:603 +#: usr/local/www/interfaces.php:614 usr/local/www/interfaces.php:610 +#: usr/local/www/interfaces.php:610 +msgid "The service name contains invalid characters." +msgstr "サービスåã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:539 +#: usr/local/www/interfaces_ppps_edit.php:217 usr/local/www/interfaces.php:593 +#: usr/local/www/interfaces.php:609 usr/local/www/interfaces.php:590 +#: usr/local/www/interfaces.php:606 usr/local/www/interfaces_ppps_edit.php:223 +#: usr/local/www/interfaces.php:605 usr/local/www/interfaces.php:621 +#: usr/local/www/interfaces.php:616 usr/local/www/interfaces.php:632 +#: usr/local/www/interfaces.php:612 usr/local/www/interfaces.php:628 +#: usr/local/www/interfaces_ppps_edit.php:223 usr/local/www/interfaces.php:612 +#: usr/local/www/interfaces.php:628 +msgid "The idle timeout value must be an integer." +msgstr "ã‚¢ã‚¤ãƒ‰ãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/interfaces.php:526 usr/local/www/interfaces_ppps_edit.php:220 +#: usr/local/www/interfaces.php:596 usr/local/www/interfaces.php:593 +#: usr/local/www/interfaces_ppps_edit.php:226 usr/local/www/interfaces.php:608 +#: usr/local/www/interfaces.php:619 usr/local/www/interfaces.php:615 +#: usr/local/www/interfaces_ppps_edit.php:226 usr/local/www/interfaces.php:615 +msgid "A valid PPPoE reset hour must be specified (0-23)." +msgstr "有効ãªPPPoEã®ãƒªã‚»ãƒƒãƒˆæ™‚ã«ã¯ã€ ( 0-23 )を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:529 usr/local/www/interfaces_ppps_edit.php:223 +#: usr/local/www/interfaces.php:599 usr/local/www/interfaces.php:596 +#: usr/local/www/interfaces_ppps_edit.php:229 usr/local/www/interfaces.php:611 +#: usr/local/www/interfaces.php:622 usr/local/www/interfaces.php:618 +#: usr/local/www/interfaces_ppps_edit.php:229 usr/local/www/interfaces.php:618 +msgid "A valid PPPoE reset minute must be specified (0-59)." +msgstr "有効ãªPPPoEã®ãƒªã‚»ãƒƒãƒˆåˆ†ï¼ˆ 0〜59)を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:531 usr/local/www/interfaces_ppps_edit.php:225 +#: usr/local/www/interfaces.php:601 usr/local/www/interfaces.php:598 +#: usr/local/www/interfaces_ppps_edit.php:231 usr/local/www/interfaces.php:613 +#: usr/local/www/interfaces.php:624 usr/local/www/interfaces.php:620 +#: usr/local/www/interfaces_ppps_edit.php:231 usr/local/www/interfaces.php:620 +msgid "A valid PPPoE reset date must be specified (mm/dd/yyyy)." +msgstr "有効ãªã®PPPoEリセット日ã¯ï¼ˆ YYYY / MM / DD )を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:603 +#: usr/local/www/interfaces.php:600 usr/local/www/interfaces.php:615 +#: usr/local/www/interfaces.php:626 usr/local/www/interfaces.php:622 +#: usr/local/www/interfaces.php:622 +msgid "A valid PPTP local IP address must be specified." +msgstr "有効ãªPPTPローカルIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:535 usr/local/www/interfaces.php:605 +#: usr/local/www/interfaces.php:602 usr/local/www/interfaces.php:617 +#: usr/local/www/interfaces.php:628 usr/local/www/interfaces.php:624 +#: usr/local/www/interfaces.php:624 +msgid "A valid PPTP subnet bit count must be specified." +msgstr "有効ãªPPTPサブãƒãƒƒãƒˆãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:537 usr/local/www/interfaces.php:607 +#: usr/local/www/interfaces.php:604 usr/local/www/interfaces.php:619 +#: usr/local/www/interfaces.php:630 usr/local/www/interfaces.php:626 +#: usr/local/www/interfaces.php:626 +msgid "A valid PPTP remote IP address must be specified." +msgstr "有効ãªPPTPリモートIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:613 +#: usr/local/www/interfaces.php:610 usr/local/www/interfaces.php:625 +#: usr/local/www/interfaces.php:637 usr/local/www/interfaces.php:633 +#: usr/local/www/interfaces.php:633 +msgid "The MTU must be greater than 576 bytes." +msgstr "MTUã¯ã€ã‚ˆã‚Šå¤§ãã576ãƒã‚¤ãƒˆã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/interfaces.php:545 usr/local/www/interfaces.php:615 +#: usr/local/www/interfaces.php:612 usr/local/www/interfaces.php:627 +#: usr/local/www/interfaces.php:668 usr/local/www/interfaces.php:664 +#: usr/local/www/interfaces.php:664 +msgid "The MSS must be greater than 576 bytes." +msgstr "MSSã¯ã€ã‚ˆã‚Šå¤§ãã576ãƒã‚¤ãƒˆã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2164 +#: usr/local/www/load_balancer_pool.php:132 usr/local/www/vpn_ipsec.php:283 +#: usr/local/www/vpn_ipsec.php:457 usr/local/www/interfaces_wireless.php:107 +#: usr/local/www/interfaces_wireless_edit.php:84 +#: usr/local/www/interfaces_wireless_edit.php:176 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:187 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/status_lb_pool.php:131 usr/local/www/vpn_ipsec_phase2.php:404 +#: usr/local/www/vpn_ipsec.php:294 usr/local/www/vpn_ipsec.php:468 +#: usr/local/www/system_advanced_misc.php:334 +#: usr/local/www/vpn_ipsec_phase2.php:430 usr/local/www/interfaces.php:619 +#: usr/local/www/interfaces.php:2342 +#: usr/local/www/load_balancer_pool_edit.php:195 +#: usr/local/www/load_balancer_pool.php:133 usr/local/www/vpn_ipsec.php:293 +#: usr/local/www/vpn_ipsec.php:467 usr/local/www/system_advanced_misc.php:353 +#: usr/local/www/interfaces_wireless.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:496 usr/local/www/interfaces.php:616 +#: usr/local/www/interfaces.php:2330 +#: usr/local/www/load_balancer_pool_edit.php:193 +#: usr/local/www/load_balancer_pool.php:131 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:178 +#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:473 +#: usr/local/www/interfaces_wireless.php:110 +#: usr/local/www/vpn_ipsec_phase2.php:518 usr/local/www/interfaces.php:631 +#: usr/local/www/interfaces.php:2360 usr/local/www/interfaces.php:672 +#: usr/local/www/interfaces.php:2406 usr/local/www/interfaces.php:668 +#: usr/local/www/interfaces.php:2395 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:178 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:473 +#: usr/local/www/interfaces_wireless.php:110 +#: usr/local/www/status_lb_pool.php:131 +#: usr/local/www/load_balancer_pool.php:131 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:193 +#: usr/local/www/vpn_ipsec_phase2.php:518 usr/local/www/interfaces.php:668 +#: usr/local/www/interfaces.php:2395 +msgid "Mode" +msgstr "モード" + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2174 +#: usr/local/www/status_interfaces.php:265 +#: usr/local/www/status_interfaces.php:362 usr/local/www/interfaces.php:622 +#: usr/local/www/interfaces.php:2352 usr/local/www/status_interfaces.php:365 +#: usr/local/www/interfaces.php:619 usr/local/www/interfaces.php:2340 +#: usr/local/www/interfaces.php:634 usr/local/www/interfaces.php:2370 +#: usr/local/www/interfaces.php:675 usr/local/www/interfaces.php:2416 +#: usr/local/www/interfaces.php:671 usr/local/www/interfaces.php:2405 +#: usr/local/www/status_interfaces.php:365 usr/local/www/interfaces.php:671 +#: usr/local/www/interfaces.php:2405 +msgid "SSID" +msgstr "SSID" + +#: usr/local/www/interfaces.php:583 usr/local/www/interfaces.php:657 +#: usr/local/www/interfaces.php:654 usr/local/www/interfaces.php:669 +#: usr/local/www/interfaces.php:710 usr/local/www/interfaces.php:706 +#: usr/local/www/interfaces.php:706 +msgid "" +"Invalid WEP key size. Sizes should be 40 (64) bit keys or 104 (128) bit." +msgstr ""無効ãªWEPキーã®ã‚µã‚¤ã‚ºã€‚サイズã¯40 ( 64 )ビットキーã€ã¾ãŸã¯104 ( 128 )ビットã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/interfaces.php:591 usr/local/www/interfaces.php:665 +#: usr/local/www/interfaces.php:662 usr/local/www/interfaces.php:677 +#: usr/local/www/interfaces.php:718 usr/local/www/interfaces.php:714 +#: usr/local/www/interfaces.php:714 +msgid "The length of the passphrase should be between 8 and 63 characters." +msgstr "パスフレーズã®é•·ã•ã¯8 〜63文字ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:659 +#, php-format +msgid "Interface %s dynamic gateway" +msgstr "インタフェースã¯ã€å‹•的ゲートウェイを%s" + +#: usr/local/www/interfaces.php:1004 usr/local/www/interfaces.php:1090 +#: usr/local/www/interfaces.php:1078 usr/local/www/interfaces.php:1092 +#: usr/local/www/interfaces.php:1134 usr/local/www/interfaces.php:1129 +#: usr/local/www/interfaces.php:1129 +#, php-format +msgid "" +"Unable to change mode to %s. You may already have the maximum number of " +"wireless clones supported in this mode." +msgstr "ã“ã®ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れãŸç„¡ç·šã‚¯ãƒ­ãƒ¼ãƒ³"ã™ã§ã«æœ€å¤§æ•°ã‚’æŒã£ã¦ã„ã‚‹ã“ã¨ãŒã‚り%s.ã™ã‚‹ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/interfaces.php:1032 usr/local/www/interfaces.php:1118 +#: usr/local/www/interfaces.php:1106 usr/local/www/interfaces.php:1120 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157 +#: usr/local/www/interfaces.php:1157 +msgid "Static IPv4" +msgstr "é™çš„IPv4" + +#: usr/local/www/interfaces.php:1032 usr/local/www/vpn_pppoe.php:86 +#: usr/local/www/status_interfaces.php:109 +#: usr/local/www/status_interfaces.php:127 usr/local/www/interfaces.php:1118 +#: usr/local/www/status_interfaces.php:130 usr/local/www/interfaces.php:1106 +#: usr/local/www/vpn_pppoe.php:87 usr/local/www/interfaces.php:1120 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157 +#: usr/local/www/vpn_pppoe.php:87 usr/local/www/status_interfaces.php:130 +#: usr/local/www/interfaces.php:1157 +msgid "PPPoE" +msgstr "PPPoEã®" + +#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:124 +#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:166 +#: usr/local/www/status_interfaces.php:142 usr/local/www/interfaces.php:1118 +#: usr/local/www/fbegin.inc:174 usr/local/www/status_interfaces.php:145 +#: usr/local/www/interfaces.php:1106 usr/local/www/fbegin.inc:165 +#: usr/local/www/interfaces.php:1120 usr/local/www/interfaces.php:1162 +#: usr/local/www/interfaces.php:1157 usr/local/www/status_interfaces.php:145 +#: usr/local/www/fbegin.inc:165 usr/local/www/interfaces.php:1157 +msgid "PPTP" +msgstr "PPTP" + +#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:139 +#: usr/local/www/fbegin.inc:150 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:167 +#: usr/local/www/status_interfaces.php:157 usr/local/www/interfaces.php:1118 +#: usr/local/www/fbegin.inc:175 usr/local/www/status_interfaces.php:160 +#: usr/local/www/interfaces.php:1106 usr/local/www/fbegin.inc:166 +#: usr/local/www/interfaces.php:1120 usr/local/www/interfaces.php:1162 +#: usr/local/www/interfaces.php:1157 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/status_interfaces.php:160 usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:166 +#: usr/local/www/interfaces.php:1157 +msgid "L2TP" +msgstr "L2TP" + +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121 +#: usr/local/www/interfaces.php:1163 usr/local/www/interfaces.php:1158 +#: usr/local/www/interfaces.php:1158 +msgid "Static IPv6" +msgstr "é™çš„IPv6" + +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121 +#: usr/local/www/interfaces.php:1163 usr/local/www/interfaces.php:1158 +#: usr/local/www/interfaces.php:1158 +msgid "DHCP6" +msgstr "DHCP6" + +#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326 +#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327 +#: usr/local/www/interfaces.php:1369 usr/local/www/interfaces.php:1364 +#: usr/local/www/interfaces.php:1364 +#, php-format +msgid "The %s configuration has been changed." +msgstr "%sæ§‹æˆãŒå¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326 +#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327 +#: usr/local/www/interfaces.php:1369 usr/local/www/interfaces.php:1364 +#: usr/local/www/interfaces.php:1364 +msgid "Don't forget to adjust the DHCP Server range if needed after applying." +msgstr "é©ç”¨ã—ãŸå¾Œã€å¿…è¦ã«å¿œã˜ã¦ã€ DHCPサーãƒãƒ¼ã®ç¯„囲を調整ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„。" + +#: usr/local/www/interfaces.php:1231 usr/local/www/interfaces.php:1335 +#: usr/local/www/interfaces.php:1323 usr/local/www/interfaces.php:1336 +#: usr/local/www/interfaces.php:1378 usr/local/www/interfaces.php:1373 +#: usr/local/www/interfaces.php:1373 +msgid "General configuration" +msgstr "ä¸€èˆ¬çš„ãªæ§‹æˆ" + +#: usr/local/www/interfaces.php:1237 usr/local/www/interfaces.php:1341 +#: usr/local/www/interfaces.php:1329 usr/local/www/interfaces.php:1342 +#: usr/local/www/interfaces.php:1384 usr/local/www/interfaces.php:1379 +#: usr/local/www/interfaces.php:1379 +msgid "Enable Interface" +msgstr "インターフェイスをイãƒãƒ¼ãƒ–ルã«ã—ã¾ã™" + +#: usr/local/www/interfaces.php:1247 usr/local/www/interfaces.php:1351 +#: usr/local/www/interfaces.php:1339 usr/local/www/interfaces.php:1352 +#: usr/local/www/interfaces.php:1394 usr/local/www/interfaces.php:1389 +#: usr/local/www/interfaces.php:1389 +msgid "Enter a description (name) for the interface here." +msgstr "ã“ã“ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®èª¬æ˜Žï¼ˆåå‰ï¼‰ã‚’入力ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1251 usr/local/www/interfaces.php:1355 +#: usr/local/www/interfaces.php:1343 usr/local/www/interfaces.php:1356 +#: usr/local/www/interfaces.php:1398 usr/local/www/interfaces.php:1393 +#: usr/local/www/interfaces.php:1393 +msgid "IPv4 Configuration Type" +msgstr "IPv4ã®æ§‹æˆã‚¿ã‚¤ãƒ—" + +#: usr/local/www/interfaces.php:1267 usr/local/www/interfaces.php:1371 +#: usr/local/www/interfaces.php:1359 usr/local/www/interfaces.php:1372 +#: usr/local/www/interfaces.php:1414 usr/local/www/interfaces.php:1409 +#: usr/local/www/interfaces.php:1409 +msgid "IPv6 Configuration Type" +msgstr "IPv6ã®æ§‹æˆã‚¿ã‚¤ãƒ—" + +#: usr/local/www/interfaces.php:1292 usr/local/www/interfaces.php:1396 +#: usr/local/www/interfaces.php:1384 usr/local/www/interfaces.php:1397 +#: usr/local/www/interfaces.php:1439 usr/local/www/interfaces.php:1434 +#: usr/local/www/interfaces.php:1434 +msgid "Insert my local MAC address" +msgstr "ç§ã®åœ°å…ƒã®MACアドレスを挿入" + +#: usr/local/www/interfaces.php:1295 usr/local/www/interfaces.php:1399 +#: usr/local/www/interfaces.php:1387 usr/local/www/interfaces.php:1400 +#: usr/local/www/interfaces.php:1442 usr/local/www/interfaces.php:1437 +#: usr/local/www/interfaces.php:1437 +msgid "" +"This field can be used to modify ("spoof") the MAC address of this " +"interface" +msgstr "「ã“れã®MACアドレス "(ãªã‚Šã™ã¾ã—) ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをã“ã®ãƒ•ィールドã«å¤‰æ›´ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã‚‹"" + +#: usr/local/www/interfaces.php:1297 usr/local/www/interfaces.php:1401 +#: usr/local/www/interfaces.php:1389 usr/local/www/interfaces.php:1402 +#: usr/local/www/interfaces.php:1444 usr/local/www/interfaces.php:1439 +#: usr/local/www/interfaces.php:1439 +msgid "(may be required with some cable connections)" +msgstr "(一部ã®ã‚±ãƒ¼ãƒ–ル接続ã§å¿…è¦ã¨ãªã‚‹å ´åˆãŒã‚りã¾ã™ï¼‰" + +#: usr/local/www/interfaces.php:1298 usr/local/www/interfaces.php:1402 +#: usr/local/www/interfaces.php:1390 usr/local/www/interfaces.php:1403 +#: usr/local/www/interfaces.php:1445 usr/local/www/interfaces.php:1440 +#: usr/local/www/interfaces.php:1440 +msgid "" +"Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx or leave blank" +msgstr "XX: XX : XX : XX : XX : XXã¾ãŸã¯ç©ºç™½ã®ã¾ã¾ã«"次ã®å½¢å¼ã§MACアドレスを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/interfaces.php:1303 +#: usr/local/www/interfaces_ppps_edit.php:757 +#: usr/local/www/interfaces.php:1407 +#: usr/local/www/interfaces_ppps_edit.php:758 +#: usr/local/www/interfaces.php:1395 +#: usr/local/www/interfaces_ppps_edit.php:764 +#: usr/local/www/interfaces.php:1408 usr/local/www/interfaces.php:1450 +#: usr/local/www/interfaces_ppps_edit.php:761 +#: usr/local/www/interfaces.php:1445 +#: usr/local/www/interfaces_ppps_edit.php:761 +#: usr/local/www/interfaces.php:1445 +msgid "MTU" +msgstr "MTU" + +#: usr/local/www/interfaces.php:1307 +msgid "" +"If you leave this field blank, the adapter's default MTU will be used. This " +"is typically 1500 bytes but can vary on some hardware." +msgstr "「ã“ã®ãƒ•ィールドを空白ã®ã¾ã¾ã«ã™ã‚‹ã¨ã€ã‚¢ãƒ€ãƒ—ã‚¿ã®ãƒ‡ãƒ•ォルトã®MTUãŒä½¿ç”¨ã•れã¾ã™ã€‚ã“れã¯ã€ã€Œé€šå¸¸ã€ 1500ãƒã‚¤ãƒˆã§ã™ãŒã€ã„ãã¤ã‹ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ä¸Šã§ç•°ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1312 usr/local/www/interfaces.php:1416 +#: usr/local/www/interfaces.php:1404 usr/local/www/interfaces.php:1417 +#: usr/local/www/interfaces.php:1461 usr/local/www/interfaces.php:1456 +#: usr/local/www/interfaces.php:1456 +msgid "MSS" +msgstr "MSS" + +#: usr/local/www/interfaces.php:1316 usr/local/www/interfaces.php:1420 +#: usr/local/www/interfaces.php:1408 usr/local/www/interfaces.php:1421 +#: usr/local/www/interfaces.php:1465 usr/local/www/interfaces.php:1460 +#: usr/local/www/interfaces.php:1460 +msgid "" +"If you enter a value in this field, then MSS clamping for TCP connections to " +"the value entered above minus 40 (TCP/IP header size) will be in effect." +msgstr "マイナス40 ( TCP / IPヘッダã®ã‚µã‚¤ã‚ºï¼‰ã®ä¸Šã«å…¥åŠ›ã•れãŸå€¤ãŒæœ‰åйã«ãªã‚Šã¾ã™"ã‚ãªãŸã¯ã€ã“ã®ãƒ•ィールドã«å€¤ã‚’入力ã™ã‚‹ã¨ã€ MSSã¯ã€ã¸ã®TCP接続ã™ã‚‹ãŸã‚ã®ã‚¯ãƒ©ãƒ³ãƒ—〠。" + +#: usr/local/www/interfaces.php:1325 usr/local/www/interfaces.php:1429 +#: usr/local/www/interfaces.php:1417 usr/local/www/interfaces.php:1430 +#: usr/local/www/interfaces.php:1474 usr/local/www/interfaces.php:1469 +#: usr/local/www/interfaces.php:1469 +msgid "Speed and duplex" +msgstr "速度ã¨äºŒé‡" + +#: usr/local/www/interfaces.php:1346 usr/local/www/interfaces.php:1450 +#: usr/local/www/interfaces.php:1438 usr/local/www/interfaces.php:1451 +#: usr/local/www/interfaces.php:1495 usr/local/www/interfaces.php:1490 +#: usr/local/www/interfaces.php:1490 +msgid "" +"Here you can explicitly set speed and duplex mode for this interface. " +"WARNING: You MUST leave this set to autoselect (automatically negotiate " +"speed) unless the port this interface connects to has its speed and duplex " +"forced." +msgstr "「ã“ã“ã§ã¯ã€æ˜Žç¤ºçš„ã«ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®é€Ÿåº¦ã¨äºŒé‡ãƒ¢ãƒ¼ãƒ‰ã‚’設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ "警告:強制"ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースãŒã€ãã®é€Ÿåº¦ã¨ãƒ‡ãƒ¥ãƒ—ãƒ¬ãƒƒã‚¯ã‚¹ãŒæŒã£ã¦ã„ã‚‹ã«æŽ¥ç¶šã™ã‚‹ãƒãƒ¼ãƒˆãŒãªã„é™ã‚Šï¼ˆé€Ÿåº¦ã‚’自動的交渉) ã€ã‚ªãƒ¼ãƒˆã‚»ãƒ¬ã‚¯ãƒˆãŸã‚ã«ã“ã®ã‚»ãƒƒãƒˆã‚’残ã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1361 usr/local/www/interfaces.php:1465 +#: usr/local/www/interfaces.php:1453 usr/local/www/interfaces.php:1466 +#: usr/local/www/interfaces.php:1511 usr/local/www/interfaces.php:1505 +#: usr/local/www/interfaces.php:1505 +msgid "Static IPv4 configuration" +msgstr "é™çš„IPv4ã®è¨­å®š" + +#: usr/local/www/interfaces.php:1400 usr/local/www/interfaces.php:1506 +#: usr/local/www/system_routes_edit.php:212 +#: usr/local/www/system_routes_edit.php:244 usr/local/www/interfaces.php:1504 +#: usr/local/www/interfaces.php:1612 usr/local/www/system_routes_edit.php:245 +#: usr/local/www/interfaces.php:1492 usr/local/www/interfaces.php:1600 +#: usr/local/www/interfaces.php:1505 usr/local/www/interfaces.php:1610 +#: usr/local/www/system_routes_edit.php:272 usr/local/www/interfaces.php:1550 +#: usr/local/www/interfaces.php:1656 usr/local/www/system_routes_edit.php:274 +#: usr/local/www/interfaces.php:1544 usr/local/www/interfaces.php:1649 +#: usr/local/www/system_routes_edit.php:268 usr/local/www/interfaces.php:1544 +#: usr/local/www/interfaces.php:1649 +msgid "add a new one." +msgstr "æ–°ã—ã„ã‚‚ã®ã‚’追加ã—ã¦ãã ã•ã„。" + +#: usr/local/www/interfaces.php:1403 usr/local/www/interfaces.php:1507 +#: usr/local/www/interfaces.php:1495 usr/local/www/interfaces.php:1508 +#: usr/local/www/interfaces.php:1553 usr/local/www/interfaces.php:1547 +#: usr/local/www/interfaces.php:1547 +msgid "" +"If this interface is an Internet connection, select an existing Gateway from " +"the list or add one using the link above" +msgstr "リスト「ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã®å ´åˆã¯ã€æ—¢å­˜ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã™ã‚‹ã€ã¾ãŸã¯ä¸Šè¨˜ã®ãƒªãƒ³ã‚¯ã‚’使用ã—ã¦1を追加" + +#: usr/local/www/interfaces.php:1417 usr/local/www/system_routes_edit.php:224 +#: usr/local/www/system_routes_edit.php:256 usr/local/www/interfaces.php:1521 +#: usr/local/www/system_routes_edit.php:257 usr/local/www/interfaces.php:1509 +#: usr/local/www/interfaces.php:1522 usr/local/www/system_routes_edit.php:283 +#: usr/local/www/interfaces.php:1567 usr/local/www/system_routes_edit.php:287 +#: usr/local/www/interfaces.php:1561 usr/local/www/system_routes_edit.php:281 +#: usr/local/www/interfaces.php:1561 +msgid "Add new gateway:" +msgstr "æ–°ã—ã„ゲートウェイを追加ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1425 usr/local/www/interfaces.php:1529 +#: usr/local/www/interfaces.php:1517 usr/local/www/interfaces.php:1530 +#: usr/local/www/interfaces.php:1575 usr/local/www/interfaces.php:1569 +#: usr/local/www/interfaces.php:1569 +msgid "Default gateway:" +msgstr "デフォルトゲートウェイ:" + +#: usr/local/www/interfaces.php:1428 usr/local/www/system_routes_edit.php:240 +#: usr/local/www/system_routes_edit.php:272 usr/local/www/interfaces.php:1532 +#: usr/local/www/system_routes_edit.php:273 usr/local/www/interfaces.php:1520 +#: usr/local/www/interfaces.php:1533 usr/local/www/system_routes_edit.php:299 +#: usr/local/www/interfaces.php:1578 usr/local/www/system_routes_edit.php:305 +#: usr/local/www/interfaces.php:1572 usr/local/www/system_routes_edit.php:299 +#: usr/local/www/interfaces.php:1572 +msgid "Gateway Name:" +msgstr "ゲートウェイå:" + +#: usr/local/www/interfaces.php:1431 usr/local/www/interfaces.php:1535 +#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1536 +#: usr/local/www/interfaces.php:1581 usr/local/www/interfaces.php:1575 +#: usr/local/www/interfaces.php:1575 +msgid "Gateway IPv4:" +msgstr "ゲートウェイã®IPv4 :" + +#: usr/local/www/interfaces.php:1434 usr/local/www/interfaces.php:1540 +#: usr/local/www/system_routes_edit.php:246 +#: usr/local/www/system_routes_edit.php:278 usr/local/www/interfaces.php:1538 +#: usr/local/www/interfaces.php:1646 usr/local/www/system_routes_edit.php:279 +#: usr/local/www/interfaces.php:1526 usr/local/www/interfaces.php:1634 +#: usr/local/www/interfaces.php:1539 usr/local/www/interfaces.php:1644 +#: usr/local/www/system_routes_edit.php:305 usr/local/www/interfaces.php:1584 +#: usr/local/www/interfaces.php:1690 usr/local/www/system_routes_edit.php:311 +#: usr/local/www/interfaces.php:1578 usr/local/www/interfaces.php:1683 +#: usr/local/www/system_routes_edit.php:305 usr/local/www/interfaces.php:1578 +#: usr/local/www/interfaces.php:1683 +msgid "Description:" +msgstr "説明:" + +#: usr/local/www/interfaces.php:1442 usr/local/www/interfaces.php:1548 +#: usr/local/www/system_routes_edit.php:254 +#: usr/local/www/system_routes_edit.php:286 usr/local/www/interfaces.php:1654 +#: usr/local/www/system_routes_edit.php:287 usr/local/www/interfaces.php:1536 +#: usr/local/www/interfaces.php:1642 usr/local/www/interfaces.php:1546 +#: usr/local/www/interfaces.php:1651 usr/local/www/system_routes_edit.php:312 +#: usr/local/www/interfaces.php:1591 usr/local/www/interfaces.php:1697 +#: usr/local/www/system_routes_edit.php:318 usr/local/www/interfaces.php:1585 +#: usr/local/www/interfaces.php:1690 usr/local/www/system_routes_edit.php:312 +#: usr/local/www/interfaces.php:1585 usr/local/www/interfaces.php:1690 +msgid "Save Gateway" +msgstr "ゲートウェイã«ä¿å­˜" + +#: usr/local/www/interfaces.php:1467 usr/local/www/interfaces.php:1573 +#: usr/local/www/interfaces.php:1561 usr/local/www/interfaces.php:1571 +#: usr/local/www/interfaces.php:1617 usr/local/www/interfaces.php:1610 +#: usr/local/www/interfaces.php:1610 +msgid "Static IPv6 configuration" +msgstr "é™çš„IPv6æ§‹æˆ" + +#: usr/local/www/interfaces.php:1488 usr/local/www/status_interfaces.php:231 +#: usr/local/www/status_interfaces.php:312 usr/local/www/interfaces.php:1594 +#: usr/local/www/status_interfaces.php:315 usr/local/www/interfaces.php:1582 +#: usr/local/www/interfaces.php:1592 usr/local/www/interfaces.php:1638 +#: usr/local/www/interfaces.php:1631 usr/local/www/status_interfaces.php:315 +#: usr/local/www/interfaces.php:1631 +msgid "Gateway IPv6" +msgstr "ゲートウェイã®IPv6" + +#: usr/local/www/interfaces.php:1509 usr/local/www/interfaces.php:1615 +#: usr/local/www/interfaces.php:1603 usr/local/www/interfaces.php:1613 +#: usr/local/www/interfaces.php:1659 usr/local/www/interfaces.php:1652 +#: usr/local/www/interfaces.php:1652 +msgid "" +"If this interface is an Internet connection, select an existing Gateway from " +"the list or add a new one using the link above" +msgstr "リスト「ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã®å ´åˆã¯ã€æ—¢å­˜ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã™ã‚‹ã€ã¾ãŸã¯ä¸Šè¨˜ã®ãƒªãƒ³ã‚¯ã‚’使用ã—ã¦ã€æ–°ã—ã„1を追加" + +#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1629 +#: usr/local/www/interfaces.php:1617 usr/local/www/interfaces.php:1627 +#: usr/local/www/interfaces.php:1673 usr/local/www/interfaces.php:1666 +#: usr/local/www/interfaces.php:1666 +msgid "Add new v6 gateway:" +msgstr "æ–°ã—ã„V6ゲートウェイを追加ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1531 usr/local/www/interfaces.php:1637 +#: usr/local/www/interfaces.php:1625 usr/local/www/interfaces.php:1635 +#: usr/local/www/interfaces.php:1681 usr/local/www/interfaces.php:1674 +#: usr/local/www/interfaces.php:1674 +msgid "Default v6 gateway:" +msgstr "デフォルトV6ゲートウェイ:" + +#: usr/local/www/interfaces.php:1534 usr/local/www/interfaces.php:1640 +#: usr/local/www/interfaces.php:1628 usr/local/www/interfaces.php:1638 +#: usr/local/www/interfaces.php:1684 usr/local/www/interfaces.php:1677 +#: usr/local/www/interfaces.php:1677 +msgid "Gateway Name IPv6:" +msgstr "ゲートウェイåã®IPv6 :" + +#: usr/local/www/interfaces.php:1537 usr/local/www/interfaces.php:1643 +#: usr/local/www/interfaces.php:1631 usr/local/www/interfaces.php:1641 +#: usr/local/www/interfaces.php:1687 usr/local/www/interfaces.php:1680 +#: usr/local/www/interfaces.php:1680 +msgid "Gateway IPv6:" +msgstr "ゲートウェイã®IPv6 :" + +#: usr/local/www/interfaces.php:1564 +msgid "DHCPv6 Prefix Delegation ID" +msgstr "DHCPv6ã®ãƒ—レフィックス委任ID" + +#: usr/local/www/interfaces.php:1588 +msgid "" +"This ID sets the delegated DHCP-PD prefix number which will be used to setup " +"the interface." +msgstr "インターフェース「ã“ã®IDã¯ã€ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる委任DHCP -PDプレフィックス数を設定ã—ã¾ã™ã€ 。" + +#: usr/local/www/interfaces.php:1598 usr/local/www/interfaces.php:1676 +#: usr/local/www/interfaces.php:1664 usr/local/www/interfaces.php:1722 +#: usr/local/www/interfaces.php:1714 usr/local/www/interfaces.php:1714 +msgid "DHCP client configuration" +msgstr "DHCPã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æ§‹æˆ" + +#: usr/local/www/interfaces.php:1602 usr/local/www/interfaces.php:1680 +#: usr/local/www/interfaces.php:1668 usr/local/www/interfaces.php:1726 +#: usr/local/www/interfaces.php:1718 usr/local/www/interfaces.php:1718 +msgid "Enable DHCP+" +msgstr "DHCPを有効ã«ã™ã‚‹" + +#: usr/local/www/interfaces.php:1605 usr/local/www/interfaces.php:1683 +#: usr/local/www/interfaces.php:1671 usr/local/www/interfaces.php:1729 +#: usr/local/www/interfaces.php:1721 usr/local/www/interfaces.php:1721 +msgid "Enable DHCP+L2TP or DHCP+PPTP." +msgstr "DHCP L2TPã¾ãŸã¯DHCP PPTPを有効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1607 usr/local/www/interfaces.php:1685 +#: usr/local/www/interfaces.php:1673 usr/local/www/interfaces.php:1731 +#: usr/local/www/interfaces.php:1723 usr/local/www/interfaces.php:1723 +msgid "" +"Status changes on this interface will trigger reconfiguration (if necessary) " +"of the associated PPTP/L2TP link." +msgstr "関連ã™ã‚‹PPTP/L2TPリンクã®ã€Œ (必è¦ãªã‚‰ã°ï¼‰ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã®å¤‰æ›´ã¯ã€å†è¨­å®šã‚’トリガーã—ã¾ã™ã€ 。" + +#: usr/local/www/interfaces.php:1616 usr/local/www/interfaces.php:1694 +#: usr/local/www/interfaces.php:1682 usr/local/www/interfaces.php:1740 +#: usr/local/www/interfaces.php:1732 usr/local/www/interfaces.php:1732 +msgid "" +"The value in this field is sent as the DHCP client identifier and hostname " +"when requesting a DHCP lease. Some ISPs may require this (for client " +"identification)." +msgstr "DHCPãƒªãƒ¼ã‚¹ã‚’è¦æ±‚ã™ã‚‹ã¨ãã«ã€Œã“ã®ãƒ•ィールドã®å€¤ã¯ã€DHCPクライアント識別å­ã¨ãƒ›ã‚¹ãƒˆåã¨ã—ã¦é€ä¿¡ã•れã¾ã™ã€ 。 ISPã«ã‚ˆã£ã¦ã¯ã€ã“ã®ï¼ˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã€Œè­˜åˆ¥ï¼‰ã‚’å¿…è¦ã¨ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1622 usr/local/www/interfaces.php:1700 +#: usr/local/www/interfaces.php:1688 usr/local/www/interfaces.php:1746 +#: usr/local/www/interfaces.php:1738 usr/local/www/interfaces.php:1738 +msgid "Alias IPv4 address" +msgstr "別åIPv4アドレス" + +#: usr/local/www/interfaces.php:1636 usr/local/www/interfaces.php:1714 +#: usr/local/www/interfaces.php:1702 usr/local/www/interfaces.php:1760 +#: usr/local/www/interfaces.php:1752 usr/local/www/interfaces.php:1752 +msgid "" +"The value in this field is used as a fixed alias IPv4 address by the DHCP " +"client." +msgstr "クライアント「ã“ã®ãƒ•ィールドã®å€¤ã¯ã€DHCPãŒå›ºå®šã‚¨ã‚¤ãƒªã‚¢ã‚¹IPv4アドレスã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€ 。" + +#: usr/local/www/interfaces.php:1647 usr/local/www/interfaces.php:1725 +#: usr/local/www/interfaces.php:1713 usr/local/www/interfaces.php:1728 +#: usr/local/www/interfaces.php:1774 usr/local/www/interfaces.php:1766 +#: usr/local/www/interfaces.php:1766 +msgid "DHCP6 client configuration" +msgstr "DHCP6クライアント設定" + +#: usr/local/www/interfaces.php:1650 usr/local/www/interfaces.php:1729 +#: usr/local/www/interfaces.php:1717 usr/local/www/interfaces.php:1732 +#: usr/local/www/interfaces.php:1778 usr/local/www/interfaces.php:1770 +#: usr/local/www/interfaces.php:1770 +msgid "DHCPv6 Unique Identifier (DUID)" +msgstr "DHCPv6ã®ä¸€æ„識別å­ï¼ˆ DUID )" + +#: usr/local/www/interfaces.php:1654 usr/local/www/interfaces.php:1733 +#: usr/local/www/interfaces.php:1721 usr/local/www/interfaces.php:1736 +#: usr/local/www/interfaces.php:1782 usr/local/www/interfaces.php:1774 +#: usr/local/www/interfaces.php:1774 +msgid "" +"The value in this field is sent as the DHCPv6 client identifier when " +"requesting a DHCPv6 lease." +msgstr "DHCPv6ã®ãƒªãƒ¼ã‚¹ã‚’è¦æ±‚ã™ã‚‹ã€ã¨ã€ã“ã®ãƒ•ィールドã®å€¤ã¯ã€ DHCPv6クライアント識別å­ã¨ã—ã¦é€ä¿¡ã•れã¾ã™ã€ 。" + +#: usr/local/www/interfaces.php:1659 usr/local/www/interfaces.php:1738 +#: usr/local/www/interfaces.php:1726 usr/local/www/interfaces.php:1741 +#: usr/local/www/interfaces.php:1787 usr/local/www/interfaces.php:1779 +#: usr/local/www/interfaces.php:1779 +#, php-format +msgid "The current DUID is: '%s'" +msgstr "ç¾åœ¨ã®DUIDã¯ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚ 「 %s'" + +#: usr/local/www/interfaces.php:1665 usr/local/www/interfaces.php:1745 +#: usr/local/www/interfaces.php:1733 usr/local/www/interfaces.php:1748 +#: usr/local/www/interfaces.php:1794 usr/local/www/interfaces.php:1786 +#: usr/local/www/interfaces.php:1786 +msgid "DHCPv6 Prefix Delegation size" +msgstr "DHCPv6ã®ãƒ—レフィックス委任サイズ" + +#: usr/local/www/interfaces.php:1678 usr/local/www/interfaces.php:1758 +#: usr/local/www/interfaces.php:1746 usr/local/www/interfaces.php:1761 +#: usr/local/www/interfaces.php:1807 usr/local/www/interfaces.php:1799 +#: usr/local/www/interfaces.php:1799 +msgid "" +"The value in this field is the delegated prefix length provided by the " +"DHCPv6 server. Normally specified by the ISP." +msgstr "DHCPv6サーãƒã€Œã“ã®ãƒ•ィールドã®å€¤ã¯ãŒæä¾›ã™ã‚‹å§”任プレフィックス長ã€ã§ã™ã€‚通常〠ISPã«ã‚ˆã£ã¦æŒ‡å®šã•れãŸã€‚" + +#: usr/local/www/interfaces.php:1689 usr/local/www/interfaces.php:1867 +#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1879 +#: usr/local/www/interfaces.php:1925 usr/local/www/interfaces.php:1913 +#: usr/local/www/interfaces.php:1913 +msgid "PPP configuration" +msgstr "PPP設定" + +#: usr/local/www/interfaces.php:1692 +#: usr/local/www/interfaces_ppps_edit.php:478 +#: usr/local/www/interfaces.php:1870 +#: usr/local/www/interfaces_ppps_edit.php:479 +#: usr/local/www/interfaces.php:1858 +#: usr/local/www/interfaces_ppps_edit.php:485 +#: usr/local/www/interfaces.php:1882 usr/local/www/interfaces.php:1928 +#: usr/local/www/interfaces_ppps_edit.php:483 +#: usr/local/www/interfaces.php:1916 +#: usr/local/www/interfaces_ppps_edit.php:483 +#: usr/local/www/interfaces.php:1916 +msgid "Service Provider" +msgstr "サービスプロãƒã‚¤ãƒ€ãƒ¼" + +#: usr/local/www/interfaces.php:1696 +#: usr/local/www/interfaces_ppps_edit.php:482 +#: usr/local/www/interfaces.php:1874 +#: usr/local/www/interfaces_ppps_edit.php:483 +#: usr/local/www/interfaces.php:1862 +#: usr/local/www/interfaces_ppps_edit.php:489 +#: usr/local/www/interfaces.php:1886 usr/local/www/interfaces.php:1932 +#: usr/local/www/interfaces_ppps_edit.php:487 +#: usr/local/www/interfaces.php:1920 +#: usr/local/www/interfaces_ppps_edit.php:487 +#: usr/local/www/interfaces.php:1920 +msgid "Country:" +msgstr "国:" + +#: usr/local/www/interfaces.php:1704 +#: usr/local/www/interfaces_ppps_edit.php:490 +#: usr/local/www/interfaces.php:1882 +#: usr/local/www/interfaces_ppps_edit.php:491 +#: usr/local/www/interfaces.php:1870 +#: usr/local/www/interfaces_ppps_edit.php:497 +#: usr/local/www/interfaces.php:1894 usr/local/www/interfaces.php:1940 +#: usr/local/www/interfaces_ppps_edit.php:495 +#: usr/local/www/interfaces.php:1928 +#: usr/local/www/interfaces_ppps_edit.php:495 +#: usr/local/www/interfaces.php:1928 +msgid "Provider:" +msgstr "プロãƒã‚¤ãƒ€ãƒ¼ï¼š" + +#: usr/local/www/interfaces.php:1712 +#: usr/local/www/interfaces_ppps_edit.php:498 +#: usr/local/www/interfaces.php:1890 +#: usr/local/www/interfaces_ppps_edit.php:499 +#: usr/local/www/interfaces.php:1878 +#: usr/local/www/interfaces_ppps_edit.php:505 +#: usr/local/www/interfaces.php:1902 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces_ppps_edit.php:503 +#: usr/local/www/interfaces.php:1936 +#: usr/local/www/interfaces_ppps_edit.php:503 +#: usr/local/www/interfaces.php:1936 +msgid "Plan:" +msgstr "プラン:" + +#: usr/local/www/interfaces.php:1720 +#: usr/local/www/interfaces_ppps_edit.php:506 +#: usr/local/www/interfaces.php:1898 +#: usr/local/www/interfaces_ppps_edit.php:507 +#: usr/local/www/interfaces.php:1886 +#: usr/local/www/interfaces_ppps_edit.php:513 +#: usr/local/www/interfaces.php:1910 usr/local/www/interfaces.php:1956 +#: usr/local/www/interfaces_ppps_edit.php:511 +#: usr/local/www/interfaces.php:1944 +#: usr/local/www/interfaces_ppps_edit.php:511 +#: usr/local/www/interfaces.php:1944 +msgid "Select to fill in data for your service provider." +msgstr "サービスプロãƒã‚¤ãƒ€ã®ãŸã‚ã®ãƒ‡ãƒ¼ã‚¿ã‚’埋ã‚ã‚‹ãŸã‚ã«é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1742 +#: usr/local/www/interfaces_ppps_edit.php:530 +#: usr/local/www/interfaces.php:1920 +#: usr/local/www/interfaces_ppps_edit.php:531 +#: usr/local/www/interfaces.php:1908 +#: usr/local/www/interfaces_ppps_edit.php:537 +#: usr/local/www/interfaces.php:1932 usr/local/www/interfaces.php:1978 +#: usr/local/www/interfaces_ppps_edit.php:535 +#: usr/local/www/interfaces.php:1966 +#: usr/local/www/interfaces_ppps_edit.php:535 +#: usr/local/www/interfaces.php:1966 +msgid "Access Point Name (APN)" +msgstr "アクセスãƒã‚¤ãƒ³ãƒˆå( APN )" + +#: usr/local/www/interfaces.php:1766 usr/local/www/interfaces.php:1944 +#: usr/local/www/interfaces.php:1932 usr/local/www/interfaces.php:1956 +#: usr/local/www/interfaces.php:2002 usr/local/www/interfaces.php:1991 +#: usr/local/www/interfaces.php:1991 +msgid "Advanced PPP" +msgstr "先進的ãªPPPã®" + +#: usr/local/www/interfaces.php:1769 usr/local/www/interfaces.php:1774 +#: usr/local/www/interfaces.php:1875 usr/local/www/interfaces.php:1880 +#: usr/local/www/interfaces.php:1943 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces.php:1947 usr/local/www/interfaces.php:1952 +#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2058 +#: usr/local/www/interfaces.php:2121 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:1935 usr/local/www/interfaces.php:1940 +#: usr/local/www/interfaces.php:2041 usr/local/www/interfaces.php:2046 +#: usr/local/www/interfaces.php:2109 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:1959 usr/local/www/interfaces.php:1964 +#: usr/local/www/interfaces.php:2068 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces.php:2139 usr/local/www/interfaces.php:2144 +#: usr/local/www/interfaces.php:2005 usr/local/www/interfaces.php:2010 +#: usr/local/www/interfaces.php:2119 usr/local/www/interfaces.php:2185 +#: usr/local/www/interfaces.php:2190 usr/local/www/interfaces.php:1994 +#: usr/local/www/interfaces.php:1999 usr/local/www/interfaces.php:2103 +#: usr/local/www/interfaces.php:2108 usr/local/www/interfaces.php:2174 +#: usr/local/www/interfaces.php:2179 usr/local/www/interfaces.php:1994 +#: usr/local/www/interfaces.php:1999 usr/local/www/interfaces.php:2103 +#: usr/local/www/interfaces.php:2108 usr/local/www/interfaces.php:2174 +#: usr/local/www/interfaces.php:2179 +msgid "Click here" +msgstr "ã“ã¡ã‚‰ã‚’クリックã—ã¦" + +#: usr/local/www/interfaces.php:1770 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces.php:1936 usr/local/www/interfaces.php:1960 +#: usr/local/www/interfaces.php:2006 usr/local/www/interfaces.php:1995 +#: usr/local/www/interfaces.php:1995 +msgid "to edit PPP configuration." +msgstr "PPP設定を編集ã§ãã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1953 +#: usr/local/www/interfaces.php:1941 usr/local/www/interfaces.php:1965 +#: usr/local/www/interfaces.php:2011 usr/local/www/interfaces.php:2000 +#: usr/local/www/interfaces.php:2000 +msgid "to create a PPP configuration." +msgstr "PPPã®æ§‹æˆã‚’作æˆã™ã‚‹ã«ã¯ã€‚" + +#: usr/local/www/interfaces.php:1786 usr/local/www/interfaces.php:1964 +#: usr/local/www/interfaces.php:1952 usr/local/www/interfaces.php:1979 +#: usr/local/www/interfaces.php:2025 usr/local/www/interfaces.php:2014 +#: usr/local/www/interfaces.php:2014 +msgid "PPPoE configuration" +msgstr "PPPoEã®è¨­å®š" + +#: usr/local/www/interfaces.php:1801 +#: usr/local/www/interfaces_ppps_edit.php:589 +#: usr/local/www/interfaces.php:1979 +#: usr/local/www/interfaces_ppps_edit.php:590 +#: usr/local/www/interfaces.php:1967 +#: usr/local/www/interfaces_ppps_edit.php:596 +#: usr/local/www/interfaces.php:1994 usr/local/www/interfaces.php:2040 +#: usr/local/www/interfaces_ppps_edit.php:594 +#: usr/local/www/interfaces.php:2029 +#: usr/local/www/interfaces_ppps_edit.php:594 +#: usr/local/www/interfaces.php:2029 +msgid "Service name" +msgstr "サービスå" + +#: usr/local/www/interfaces.php:1803 usr/local/www/interfaces.php:1981 +#: usr/local/www/interfaces.php:1969 usr/local/www/interfaces.php:1996 +#: usr/local/www/interfaces.php:2042 usr/local/www/interfaces.php:2031 +#: usr/local/www/interfaces.php:2031 +msgid "Hint: this field can usually be left empty" +msgstr "ヒント:ã“ã®ãƒ•ィールドã¯é€šå¸¸ã€ç©ºã®ã¾ã¾ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/interfaces.php:1810 usr/local/www/interfaces.php:1929 +#: usr/local/www/interfaces.php:1988 usr/local/www/interfaces.php:2107 +#: usr/local/www/interfaces.php:1976 usr/local/www/interfaces.php:2095 +#: usr/local/www/interfaces.php:2003 usr/local/www/interfaces.php:2125 +#: usr/local/www/interfaces.php:2049 usr/local/www/interfaces.php:2171 +#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2160 +#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2160 +msgid "Enable Dial-On-Demand mode" +msgstr "有効ダイヤルオンデマンドモード" + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1989 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2004 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2039 +#: usr/local/www/interfaces.php:2039 +msgid "" +"This option causes the interface to operate in dial-on-demand mode, allowing " +"you to have a " +msgstr "ã‚ãªãŸãŒæŒã£ã¦ã„ã‚‹"ã“ã®ã‚ªãƒ—ションã¯å¯èƒ½ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ãƒ¢ãƒ¼ãƒ‰ã§å‹•作ã™ã‚‹ã‚ˆã†ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを引ãèµ·ã“ã™"" + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930 +#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096 +#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2172 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161 +msgid "virtual full time" +msgstr "仮想フルタイム" + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930 +#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096 +#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2172 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161 +msgid "" +"connection. The interface is configured, but the actual connection of the " +"link is delayed until qualifying outgoing traffic is detected." +msgstr "「接続。インタフェースãŒè¨­å®šã•れã¦ã„ã¾ã™ãŒã€å®Ÿéš›ã®æŽ¥ç¶šã€ã®ãƒªãƒ³ã‚¯ã¯ã€é€ä¿¡ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒæ¤œå‡ºã•れãŸäºˆé¸ã¾ã§é…å»¶ã•れる。" + +#: usr/local/www/interfaces.php:1815 usr/local/www/interfaces.php:1934 +#: usr/local/www/services_captiveportal.php:465 +#: usr/local/www/services_captiveportal.php:470 +#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2112 +#: usr/local/www/services_captiveportal.php:468 +#: usr/local/www/interfaces.php:1981 usr/local/www/interfaces.php:2100 +#: usr/local/www/interfaces.php:2008 usr/local/www/interfaces.php:2130 +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/interfaces.php:2054 usr/local/www/interfaces.php:2176 +#: usr/local/www/interfaces.php:2043 usr/local/www/interfaces.php:2165 +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/interfaces.php:2043 usr/local/www/interfaces.php:2165 +msgid "Idle timeout" +msgstr "アイドルタイムアウト" + +#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936 +#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:1983 usr/local/www/interfaces.php:2102 +#: usr/local/www/interfaces.php:2010 usr/local/www/interfaces.php:2132 +#: usr/local/www/interfaces.php:2056 usr/local/www/interfaces.php:2178 +#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167 +#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167 +msgid "" +"If no qualifying outgoing packets are transmitted for the specified number " +"of seconds, the connection is brought down. An idle timeout of zero disables " +"this feature." +msgstr "ç§’æ•°ã€ã¯äºˆé¸ç™ºä¿¡ãƒ‘ã‚±ãƒƒãƒˆãŒæŒ‡å®šã—ãŸæ•°ã®ãŸã‚ã«é€ä¿¡ã•れã¦ã„ãªã„å ´åˆã¯ã€ã€ŒæŽ¥ç¶šãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„る。ゼロã®ã‚¢ã‚¤ãƒ‰ãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯ã€ã€Œã“ã®æ©Ÿèƒ½ã¯ç„¡åйã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1821 +#: usr/local/www/interfaces_ppps_edit.php:596 +#: usr/local/www/interfaces.php:1999 +#: usr/local/www/interfaces_ppps_edit.php:597 +#: usr/local/www/interfaces.php:1987 +#: usr/local/www/interfaces_ppps_edit.php:603 +#: usr/local/www/interfaces.php:2014 usr/local/www/interfaces.php:2060 +#: usr/local/www/interfaces_ppps_edit.php:601 +#: usr/local/www/interfaces.php:2049 +#: usr/local/www/interfaces_ppps_edit.php:601 +#: usr/local/www/interfaces.php:2049 +msgid "Periodic reset" +msgstr "定期的ãªãƒªã‚»ãƒƒãƒˆ" + +#: usr/local/www/interfaces.php:1829 +#: usr/local/www/interfaces_ppps_edit.php:604 +#: usr/local/www/status_rrd_graph.php:359 +#: usr/local/www/status_rrd_graph_settings.php:158 +#: usr/local/www/status_rrd_graph_settings.php:159 +#: usr/local/www/status_rrd_graph.php:407 usr/local/www/interfaces.php:2007 +#: usr/local/www/interfaces_ppps_edit.php:605 +#: usr/local/www/interfaces.php:1995 +#: usr/local/www/interfaces_ppps_edit.php:611 +#: usr/local/www/status_rrd_graph.php:432 usr/local/www/interfaces.php:2022 +#: usr/local/www/interfaces.php:2068 +#: usr/local/www/interfaces_ppps_edit.php:609 +#: usr/local/www/interfaces.php:2057 +#: usr/local/www/interfaces_ppps_edit.php:609 +#: usr/local/www/status_rrd_graph.php:432 +#: usr/local/www/status_rrd_graph_settings.php:159 +#: usr/local/www/interfaces.php:2057 +msgid "Custom" +msgstr "カスタム" + +#: usr/local/www/interfaces.php:1830 +#: usr/local/www/interfaces_ppps_edit.php:605 +#: usr/local/www/interfaces.php:2008 +#: usr/local/www/interfaces_ppps_edit.php:606 +#: usr/local/www/interfaces.php:1996 +#: usr/local/www/interfaces_ppps_edit.php:612 +#: usr/local/www/interfaces.php:2023 usr/local/www/interfaces.php:2069 +#: usr/local/www/interfaces_ppps_edit.php:610 +#: usr/local/www/interfaces.php:2058 +#: usr/local/www/interfaces_ppps_edit.php:610 +#: usr/local/www/interfaces.php:2058 +msgid "Pre-Set" +msgstr "事å‰ã«è¨­å®š" + +#: usr/local/www/interfaces.php:1831 +#: usr/local/www/interfaces_ppps_edit.php:606 +#: usr/local/www/interfaces.php:2009 +#: usr/local/www/interfaces_ppps_edit.php:607 +#: usr/local/www/interfaces.php:1997 +#: usr/local/www/interfaces_ppps_edit.php:613 +#: usr/local/www/interfaces.php:2024 usr/local/www/interfaces.php:2070 +#: usr/local/www/interfaces_ppps_edit.php:611 +#: usr/local/www/interfaces.php:2059 +#: usr/local/www/interfaces_ppps_edit.php:611 +#: usr/local/www/interfaces.php:2059 +msgid "Select a reset timing type" +msgstr "リセットタイミングã®ç¨®é¡žã‚’é¸æŠžã—ã¾ã™" + +#: usr/local/www/interfaces.php:1839 +#: usr/local/www/interfaces_ppps_edit.php:614 +#: usr/local/www/interfaces.php:2017 +#: usr/local/www/interfaces_ppps_edit.php:615 +#: usr/local/www/interfaces.php:2005 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2032 usr/local/www/interfaces.php:2078 +#: usr/local/www/interfaces_ppps_edit.php:619 +#: usr/local/www/interfaces.php:2067 +#: usr/local/www/interfaces_ppps_edit.php:619 +#: usr/local/www/interfaces.php:2067 +msgid "hour (0-23)" +msgstr "時間( 0-23 )" + +#: usr/local/www/interfaces.php:1841 +#: usr/local/www/interfaces_ppps_edit.php:616 +#: usr/local/www/interfaces.php:2019 +#: usr/local/www/interfaces_ppps_edit.php:617 +#: usr/local/www/interfaces.php:2007 +#: usr/local/www/interfaces_ppps_edit.php:623 +#: usr/local/www/interfaces.php:2034 usr/local/www/interfaces.php:2080 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2069 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2069 +msgid "minute (0-59)" +msgstr "分(0〜59 )" + +#: usr/local/www/interfaces.php:1843 +#: usr/local/www/interfaces_ppps_edit.php:618 +#: usr/local/www/interfaces.php:2021 +#: usr/local/www/interfaces_ppps_edit.php:619 +#: usr/local/www/interfaces.php:2009 +#: usr/local/www/interfaces_ppps_edit.php:625 +#: usr/local/www/interfaces.php:2036 usr/local/www/interfaces.php:2082 +#: usr/local/www/interfaces_ppps_edit.php:623 +#: usr/local/www/interfaces.php:2071 +#: usr/local/www/interfaces_ppps_edit.php:623 +#: usr/local/www/interfaces.php:2071 +msgid "reset at a specific date (mm/dd/yyyy)" +msgstr "ç‰¹å®šã®æ—¥ä»˜ã«ãƒªã‚»ãƒƒãƒˆï¼ˆ YYYY / MM / DD )" + +#: usr/local/www/interfaces.php:1846 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2024 +#: usr/local/www/interfaces_ppps_edit.php:622 +#: usr/local/www/interfaces.php:2012 +#: usr/local/www/interfaces_ppps_edit.php:628 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2085 +#: usr/local/www/interfaces_ppps_edit.php:626 +#: usr/local/www/interfaces.php:2074 +#: usr/local/www/interfaces_ppps_edit.php:626 +#: usr/local/www/interfaces.php:2074 +msgid "" +"If you leave the date field empty, the reset will be executed each day at " +"the time you did specify using the minutes and hour field." +msgstr "ã‚ãªãŸã¯æ•°åˆ†ã¨æ™‚é–“ã®ãƒ•ィールドを使用ã—ã¦æŒ‡å®šã—ãŸæ™‚é–“ãŒã€Œç©ºã®æ—¥ä»˜ãƒ•ィールドã®ã¾ã¾ã«ã™ã‚‹ã¨ã€ãƒªã‚»ãƒƒãƒˆãŒã§æ¯Žæ—¥å®Ÿè¡Œã•れã¾ã™ã€ 。" + +#: usr/local/www/interfaces.php:1854 +#: usr/local/www/interfaces_ppps_edit.php:629 +#: usr/local/www/interfaces.php:2032 +#: usr/local/www/interfaces_ppps_edit.php:630 +#: usr/local/www/interfaces.php:2020 +#: usr/local/www/interfaces_ppps_edit.php:636 +#: usr/local/www/interfaces.php:2047 usr/local/www/interfaces.php:2093 +#: usr/local/www/interfaces_ppps_edit.php:634 +#: usr/local/www/interfaces.php:2082 +#: usr/local/www/interfaces_ppps_edit.php:634 +#: usr/local/www/interfaces.php:2082 +msgid "reset at each month ('0 0 1 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr *')" +msgstr "儿œˆã§ï¼ˆ'0 0 1 README.txtã‚’_NotesブートCF conf.defaultãªã©misc.translateルートsbinã«ã®TMPã®USR *' )をリセット" + +#: usr/local/www/interfaces.php:1857 +#: usr/local/www/interfaces_ppps_edit.php:632 +#: usr/local/www/interfaces.php:2035 +#: usr/local/www/interfaces_ppps_edit.php:633 +#: usr/local/www/interfaces.php:2023 +#: usr/local/www/interfaces_ppps_edit.php:639 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2096 +#: usr/local/www/interfaces_ppps_edit.php:637 +#: usr/local/www/interfaces.php:2085 +#: usr/local/www/interfaces_ppps_edit.php:637 +#: usr/local/www/interfaces.php:2085 +msgid "reset at each week ('0 0 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr 0')" +msgstr "毎週ã«ãƒªã‚»ãƒƒãƒˆï¼ˆ 0 0ã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«TMP USRã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«ã™ã‚‹ã®tmp USR 0')" + +#: usr/local/www/interfaces.php:1860 +#: usr/local/www/interfaces_ppps_edit.php:635 +#: usr/local/www/interfaces.php:2038 +#: usr/local/www/interfaces_ppps_edit.php:636 +#: usr/local/www/interfaces.php:2026 +#: usr/local/www/interfaces_ppps_edit.php:642 +#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2099 +#: usr/local/www/interfaces_ppps_edit.php:640 +#: usr/local/www/interfaces.php:2088 +#: usr/local/www/interfaces_ppps_edit.php:640 +#: usr/local/www/interfaces.php:2088 +msgid "reset at each day ('0 0 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr *')" +msgstr "毎日ã§ï¼ˆ'0 0ã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«TMP USRã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«ã®TMPã®USR *' )をリセット" + +#: usr/local/www/interfaces.php:1863 +#: usr/local/www/interfaces_ppps_edit.php:638 +#: usr/local/www/interfaces.php:2041 +#: usr/local/www/interfaces_ppps_edit.php:639 +#: usr/local/www/interfaces.php:2029 +#: usr/local/www/interfaces_ppps_edit.php:645 +#: usr/local/www/interfaces.php:2056 usr/local/www/interfaces.php:2102 +#: usr/local/www/interfaces_ppps_edit.php:643 +#: usr/local/www/interfaces.php:2091 +#: usr/local/www/interfaces_ppps_edit.php:643 +#: usr/local/www/interfaces.php:2091 +msgid "reset at each hour ('0 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr *')" +msgstr "時間ã”ã¨ã«ãƒªã‚»ãƒƒãƒˆï¼ˆ'0ã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«TMP USRã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«TMP USRã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«ã®TMPã®USR *')" + +#: usr/local/www/interfaces.php:1872 usr/local/www/interfaces.php:2050 +#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2065 +#: usr/local/www/interfaces.php:2111 usr/local/www/interfaces.php:2100 +#: usr/local/www/interfaces.php:2100 +msgid "Advanced and MLPPP" +msgstr "AdvancedãŠã‚ˆã³MLPPP" + +#: usr/local/www/interfaces.php:1876 usr/local/www/interfaces.php:2054 +#: usr/local/www/interfaces.php:2042 usr/local/www/interfaces.php:2069 +#: usr/local/www/interfaces.php:2115 usr/local/www/interfaces.php:2104 +#: usr/local/www/interfaces.php:2104 +msgid "" +"for additional PPPoE configuration options. Save first if you made changes." +msgstr "ã‚ãªãŸãŒå¤‰æ›´ã‚’加ãˆãŸå ´åˆã¯ã€ã€Œè¿½åŠ ã®PPPoEã®è¨­å®šã‚ªãƒ—ションã®ãŸã‚ã«æœ€åˆã«ä¿å­˜ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1881 usr/local/www/interfaces.php:2059 +#: usr/local/www/interfaces.php:2047 usr/local/www/interfaces.php:2074 +#: usr/local/www/interfaces.php:2120 usr/local/www/interfaces.php:2109 +#: usr/local/www/interfaces.php:2109 +msgid "for advanced PPPoE configuration options and MLPPP configuration." +msgstr "先進的ãªPPPoEã®è¨­å®šã‚ªãƒ—ションãŠã‚ˆã³MLPPPã®è¨­å®šã®ãŸã‚ã«ã€‚" + +#: usr/local/www/interfaces.php:1892 usr/local/www/interfaces.php:2070 +#: usr/local/www/interfaces.php:2058 usr/local/www/interfaces.php:2088 +#: usr/local/www/interfaces.php:2134 usr/local/www/interfaces.php:2123 +#: usr/local/www/interfaces.php:2123 +msgid "PPTP/L2TP configuration" +msgstr "PPTP/L2TPæ§‹æˆ" + +#: usr/local/www/interfaces.php:1907 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2103 usr/local/www/interfaces.php:2149 +#: usr/local/www/interfaces.php:2138 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2138 +msgid "Local IP address" +msgstr "ローカルIPアドレス" + +#: usr/local/www/interfaces.php:1920 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces.php:2098 usr/local/www/interfaces.php:2086 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2116 usr/local/www/interfaces.php:2162 +#: usr/local/www/interfaces.php:2151 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2151 +msgid "Remote IP address" +msgstr "リモートIPアドレス" + +#: usr/local/www/interfaces.php:1930 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:2096 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:2172 usr/local/www/interfaces.php:2161 +#: usr/local/www/interfaces.php:2161 +msgid "" +"This option causes the interface to operate in dial-on-demand mode, allowing " +"you to have a" +msgstr "ã‚ãªãŸãŒæŒã£ã¦ã„ã‚‹"ã“ã®ã‚ªãƒ—ションã¯å¯èƒ½ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ãƒ¢ãƒ¼ãƒ‰ã§å‹•作ã™ã‚‹ã‚ˆã†ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを引ãèµ·ã“ã™"" + +#: usr/local/www/interfaces.php:1944 usr/local/www/interfaces.php:2122 +#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2140 +#: usr/local/www/interfaces.php:2186 usr/local/www/interfaces.php:2175 +#: usr/local/www/interfaces.php:2175 +msgid "" +"for additional PPTP and L2TP configuration options. Save first if you made " +"changes." +msgstr "変更を"ã‚ãªãŸãŒè¡Œã£ãŸå ´åˆã€è¿½åŠ ã®PPTPã¨L2TPã®è¨­å®šã‚ªãƒ—ションã«ã¤ã„ã¦ã€‚ã¾ãšä¿å­˜ã€ 。" + +#: usr/local/www/interfaces.php:1949 usr/local/www/interfaces.php:2127 +#: usr/local/www/interfaces.php:2115 usr/local/www/interfaces.php:2145 +#: usr/local/www/interfaces.php:2191 usr/local/www/interfaces.php:2180 +#: usr/local/www/interfaces.php:2180 +msgid "for advanced PPTP and L2TP configuration options" +msgstr "高度ãªPPTPã¨L2TPã®è¨­å®šã‚ªãƒ—ション用" + +#: usr/local/www/interfaces.php:1964 usr/local/www/interfaces.php:2142 +#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2160 +#: usr/local/www/interfaces.php:2206 usr/local/www/interfaces.php:2195 +#: usr/local/www/interfaces.php:2195 +msgid "" +"Common wireless configuration - Settings apply to all wireless networks on" +msgstr "「一般的ãªãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹è¨­å®š - 設定上ã®ã™ã¹ã¦ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«é©ç”¨" + +#: usr/local/www/interfaces.php:1967 usr/local/www/interfaces.php:2145 +#: usr/local/www/interfaces.php:2133 usr/local/www/interfaces.php:2163 +#: usr/local/www/interfaces.php:2209 usr/local/www/interfaces.php:2198 +#: usr/local/www/interfaces.php:2198 +msgid "Persist common settings" +msgstr "共通ã®è¨­å®šã‚’永続化" + +#: usr/local/www/interfaces.php:1970 usr/local/www/interfaces.php:2148 +#: usr/local/www/interfaces.php:2136 usr/local/www/interfaces.php:2166 +#: usr/local/www/interfaces.php:2212 usr/local/www/interfaces.php:2201 +#: usr/local/www/interfaces.php:2201 +msgid "" +"Enabling this preserves the common wireless configuration through interface " +"deletions and reassignments." +msgstr "欠失ãŠã‚ˆã³å†å‰²ã‚Šå½“ã¦"ã“れを有効ã«ã™ã‚‹ã¨ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを介ã—ã¦å…±é€šã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹è¨­å®šã‚’ä¿å­˜ã—ã¾ã™ã€ 。" + +#: usr/local/www/interfaces.php:1974 usr/local/www/interfaces.php:2152 +#: usr/local/www/interfaces.php:2140 usr/local/www/interfaces.php:2170 +#: usr/local/www/interfaces.php:2216 usr/local/www/interfaces.php:2205 +#: usr/local/www/interfaces.php:2205 +msgid "Standard" +msgstr "標準" + +#: usr/local/www/interfaces.php:1990 usr/local/www/interfaces.php:2168 +#: usr/local/www/interfaces.php:2156 usr/local/www/interfaces.php:2186 +#: usr/local/www/interfaces.php:2232 usr/local/www/interfaces.php:2221 +#: usr/local/www/interfaces.php:2221 +msgid "Protection Mode" +msgstr "ä¿è­·ãƒ¢ãƒ¼ãƒ‰" + +#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2171 +#: usr/local/www/interfaces.php:2159 usr/local/www/interfaces.php:2189 +#: usr/local/www/interfaces.php:2235 usr/local/www/interfaces.php:2224 +#: usr/local/www/interfaces.php:2224 +msgid "Protection mode off" +msgstr "ä¿è­·ãƒ¢ãƒ¼ãƒ‰ã‚’オフ" + +#: usr/local/www/interfaces.php:1994 usr/local/www/interfaces.php:2172 +#: usr/local/www/interfaces.php:2160 usr/local/www/interfaces.php:2190 +#: usr/local/www/interfaces.php:2236 usr/local/www/interfaces.php:2225 +#: usr/local/www/interfaces.php:2225 +msgid "Protection mode CTS to self" +msgstr "自己ã¸ã®ä¿è­·ãƒ¢ãƒ¼ãƒ‰ã®CTS" + +#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2173 +#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2191 +#: usr/local/www/interfaces.php:2237 usr/local/www/interfaces.php:2226 +#: usr/local/www/interfaces.php:2226 +msgid "Protection mode RTS and CTS" +msgstr "ä¿è­·ãƒ¢ãƒ¼ãƒ‰ã®RTSã¨CTS" + +#: usr/local/www/interfaces.php:1998 usr/local/www/interfaces.php:2176 +#: usr/local/www/interfaces.php:2164 usr/local/www/interfaces.php:2194 +#: usr/local/www/interfaces.php:2240 usr/local/www/interfaces.php:2229 +#: usr/local/www/interfaces.php:2229 +msgid "" +"For IEEE 802.11g, use the specified technique for protecting OFDM frames in " +"a mixed 11b/11g network." +msgstr "æ··åˆãŸ11b/11gãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ŒIEEEã®802.11グラムã®ãŸã‚ã«ã€å†…ã®OFDMフレームをä¿è­·ã™ã‚‹ãŸã‚ã®æŒ‡å®šã•れãŸãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã‚’使用〠。" + +#: usr/local/www/interfaces.php:2006 usr/local/www/interfaces.php:2184 +#: usr/local/www/interfaces.php:2172 usr/local/www/interfaces.php:2202 +#: usr/local/www/interfaces.php:2248 usr/local/www/interfaces.php:2237 +#: usr/local/www/interfaces.php:2237 +msgid "Transmit power" +msgstr "動力をä¼é”" + +#: usr/local/www/interfaces.php:2019 usr/local/www/interfaces.php:2197 +#: usr/local/www/interfaces.php:2185 usr/local/www/interfaces.php:2215 +#: usr/local/www/interfaces.php:2261 usr/local/www/interfaces.php:2250 +#: usr/local/www/interfaces.php:2250 +msgid "" +"Note: Typically only a few discreet power settings are available and the " +"driver will use the setting closest to the specified value. Not all " +"adapters support changing the transmit power setting." +msgstr ""注:通常ã‚ãšã‹æ•°æŽ§ãˆã‚ãªé›»æºè¨­å®šãŒåˆ©ç”¨å¯èƒ½ã§ã‚り〠「ドライãƒãƒ¼ãŒæŒ‡å®šã•れãŸå€¤ã«è¨­å®šã—ã€æœ€ã‚‚è¿‘ã„使用ã•れã¾ã™ã€‚ã™ã¹ã¦ã§ã¯ãªã„ã€ã®ã‚¢ãƒ€ãƒ—ã‚¿ã¯ã€é€ä¿¡é›»åŠ›è¨­å®šã®å¤‰æ›´ã‚’サãƒãƒ¼ãƒˆã€‚" + +#: usr/local/www/interfaces.php:2023 usr/local/www/status_interfaces.php:258 +#: usr/local/www/status_interfaces.php:355 usr/local/www/interfaces.php:2201 +#: usr/local/www/status_interfaces.php:358 usr/local/www/interfaces.php:2189 +#: usr/local/www/interfaces.php:2219 usr/local/www/interfaces.php:2265 +#: usr/local/www/interfaces.php:2254 usr/local/www/status_interfaces.php:358 +#: usr/local/www/interfaces.php:2254 +msgid "Channel" +msgstr "ãƒãƒ£ãƒ³ãƒãƒ«" + +#: usr/local/www/interfaces.php:2026 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2204 +#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2263 +#: usr/local/www/interfaces.php:2192 usr/local/www/interfaces.php:2239 +#: usr/local/www/interfaces.php:2222 usr/local/www/interfaces.php:2269 +#: usr/local/www/interfaces.php:2281 usr/local/www/interfaces.php:2268 +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2327 +#: usr/local/www/interfaces.php:2257 usr/local/www/interfaces.php:2304 +#: usr/local/www/interfaces.php:2316 usr/local/www/interfaces.php:2257 +#: usr/local/www/interfaces.php:2304 usr/local/www/interfaces.php:2316 +msgid "Auto" +msgstr "オート" + +#: usr/local/www/interfaces.php:2046 usr/local/www/interfaces.php:2224 +#: usr/local/www/interfaces.php:2212 usr/local/www/interfaces.php:2242 +#: usr/local/www/interfaces.php:2288 usr/local/www/interfaces.php:2277 +#: usr/local/www/interfaces.php:2277 +msgid "" +"Legend: wireless standards - channel # (frequency @ max TX power / TX power " +"allowed in reg. domain)" +msgstr ""ä¼èª¬ï¼šãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹è¦æ ¼ - ãƒãƒ£ãƒ³ãƒãƒ«" + +#: usr/local/www/interfaces.php:2048 usr/local/www/interfaces.php:2226 +#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2244 +#: usr/local/www/interfaces.php:2290 usr/local/www/interfaces.php:2279 +#: usr/local/www/interfaces.php:2279 +msgid "" +"Note: Not all channels may be supported by your card. Auto may override the " +"wireless standard selected above." +msgstr ""注:ã™ã¹ã¦ã®ãƒãƒ£ãƒ³ãƒãƒ«ãŒã‚ãªãŸã®ã‚«ãƒ¼ãƒ‰ã§ã‚µãƒãƒ¼ãƒˆã•れる場åˆãŒã‚り自動上書ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ "上ã§é¸æŠžã—ãŸç„¡ç·šè¦æ ¼ã‚’。" + +#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2231 +#: usr/local/www/interfaces.php:2219 usr/local/www/interfaces.php:2249 +#: usr/local/www/interfaces.php:2295 usr/local/www/interfaces.php:2284 +#: usr/local/www/interfaces.php:2284 +msgid "Antenna settings" +msgstr "アンテナã®è¨­å®š" + +#: usr/local/www/interfaces.php:2059 usr/local/www/interfaces.php:2237 +#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2255 +#: usr/local/www/interfaces.php:2301 usr/local/www/interfaces.php:2290 +#: usr/local/www/interfaces.php:2290 +msgid "Diversity" +msgstr "多様性" + +#: usr/local/www/interfaces.php:2061 usr/local/www/interfaces.php:2072 +#: usr/local/www/interfaces.php:2084 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2146 +#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2250 +#: usr/local/www/interfaces.php:2262 usr/local/www/interfaces.php:2292 +#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2324 +#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2238 +#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2296 +#: usr/local/www/interfaces.php:2312 usr/local/www/diag_system_pftop.php:135 +#: usr/local/www/interfaces.php:2257 usr/local/www/interfaces.php:2268 +#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2326 +#: usr/local/www/interfaces.php:2342 usr/local/www/interfaces.php:2303 +#: usr/local/www/interfaces.php:2314 usr/local/www/interfaces.php:2356 +#: usr/local/www/interfaces.php:2372 usr/local/www/interfaces.php:2388 +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2345 +#: usr/local/www/interfaces.php:2361 usr/local/www/interfaces.php:2377 +#: usr/local/www/diag_system_pftop.php:135 usr/local/www/interfaces.php:2292 +#: usr/local/www/interfaces.php:2303 usr/local/www/interfaces.php:2315 +#: usr/local/www/interfaces.php:2345 usr/local/www/interfaces.php:2361 +#: usr/local/www/interfaces.php:2377 +msgid "Default" +msgstr "デフォルト" + +#: usr/local/www/interfaces.php:2062 usr/local/www/vpn_pptp.php:314 +#: usr/local/www/vpn_l2tp.php:294 usr/local/www/vpn_pppoe_edit.php:362 +#: usr/local/www/interfaces.php:2240 usr/local/www/vpn_pppoe_edit.php:363 +#: usr/local/www/vpn_pptp.php:316 usr/local/www/interfaces.php:2228 +#: usr/local/www/vpn_l2tp.php:295 usr/local/www/vpn_l2tp.php:298 +#: usr/local/www/vpn_pppoe_edit.php:366 usr/local/www/vpn_pptp.php:319 +#: usr/local/www/interfaces.php:2258 usr/local/www/interfaces.php:2304 +#: usr/local/www/interfaces.php:2293 usr/local/www/vpn_l2tp.php:298 +#: usr/local/www/vpn_pppoe_edit.php:366 usr/local/www/vpn_pptp.php:319 +#: usr/local/www/interfaces.php:2293 +msgid "Off" +msgstr "オフ" + +#: usr/local/www/interfaces.php:2063 usr/local/www/interfaces.php:2241 +#: usr/local/www/interfaces.php:2229 usr/local/www/interfaces.php:2259 +#: usr/local/www/interfaces.php:2305 usr/local/www/interfaces.php:2294 +#: usr/local/www/interfaces.php:2294 +msgid "On" +msgstr "上ã®" + +#: usr/local/www/interfaces.php:2070 usr/local/www/interfaces.php:2248 +#: usr/local/www/interfaces.php:2236 usr/local/www/interfaces.php:2266 +#: usr/local/www/interfaces.php:2312 usr/local/www/interfaces.php:2301 +#: usr/local/www/interfaces.php:2301 +msgid "Transmit antenna" +msgstr "アンテナをé€ä¿¡" + +#: usr/local/www/interfaces.php:2074 usr/local/www/interfaces.php:2086 +#: usr/local/www/interfaces.php:2252 usr/local/www/interfaces.php:2264 +#: usr/local/www/interfaces.php:2240 usr/local/www/interfaces.php:2270 +#: usr/local/www/interfaces.php:2282 usr/local/www/interfaces.php:2316 +#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2305 +#: usr/local/www/interfaces.php:2317 usr/local/www/interfaces.php:2305 +#: usr/local/www/interfaces.php:2317 +msgid "#1" +msgstr "" + +#: usr/local/www/interfaces.php:2075 usr/local/www/interfaces.php:2087 +#: usr/local/www/interfaces.php:2253 usr/local/www/interfaces.php:2265 +#: usr/local/www/interfaces.php:2241 usr/local/www/interfaces.php:2271 +#: usr/local/www/interfaces.php:2283 usr/local/www/interfaces.php:2317 +#: usr/local/www/interfaces.php:2329 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2318 +msgid "#2" +msgstr "" + +#: usr/local/www/interfaces.php:2082 usr/local/www/interfaces.php:2260 +#: usr/local/www/interfaces.php:2248 usr/local/www/interfaces.php:2278 +#: usr/local/www/interfaces.php:2324 usr/local/www/interfaces.php:2313 +#: usr/local/www/interfaces.php:2313 +msgid "Receive antenna" +msgstr "å—信アンテナ" + +#: usr/local/www/interfaces.php:2094 usr/local/www/interfaces.php:2272 +#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2290 +#: usr/local/www/interfaces.php:2336 usr/local/www/interfaces.php:2325 +#: usr/local/www/interfaces.php:2325 +msgid "" +"Note: The antenna numbers do not always match up with the labels on the card." +msgstr ""注:アンテナ番å·ã¯å¸¸ã«ã‚«ãƒ¼ãƒ‰ä¸Šã®ãƒ©ãƒ™ãƒ«ã¨ä¸€è‡´ã—ã¾ã›ã‚“。" + +#: usr/local/www/interfaces.php:2100 usr/local/www/interfaces.php:2278 +#: usr/local/www/interfaces.php:2266 usr/local/www/interfaces.php:2296 +#: usr/local/www/interfaces.php:2342 usr/local/www/interfaces.php:2331 +#: usr/local/www/interfaces.php:2331 +msgid "Distance setting" +msgstr "è·é›¢è¨­å®š" + +#: usr/local/www/interfaces.php:2104 usr/local/www/interfaces.php:2282 +#: usr/local/www/interfaces.php:2270 usr/local/www/interfaces.php:2300 +#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2335 +#: usr/local/www/interfaces.php:2335 +msgid "" +"Note: This field can be used to tune ACK/CTS timers to fit the distance " +"between AP and Client" +msgstr "APã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆé–“ã®ã€Œæ³¨æ„ã“ã®ãƒ•ィールドã«ã¯ã€è·é›¢ã«åˆã‚ã›ã¦èª¿æ•´ã•れãŸACK / CTSタイマーを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€" + +#: usr/local/www/interfaces.php:2105 usr/local/www/interfaces.php:2283 +#: usr/local/www/interfaces.php:2271 usr/local/www/interfaces.php:2301 +#: usr/local/www/interfaces.php:2347 usr/local/www/interfaces.php:2336 +#: usr/local/www/interfaces.php:2336 +msgid "(measured in Meters and works only for Atheros based cards !)" +msgstr "ï¼ˆãƒ¡ãƒ¼ãƒˆãƒ«ã§æ¸¬å®šã—ã€å”¯ä¸€ã®Atherosベースã®ã‚«ãƒ¼ãƒ‰ã®ãŸã‚ã«åƒã ï¼ ï¼‰" + +#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2288 +#: usr/local/www/interfaces.php:2276 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2352 usr/local/www/interfaces.php:2341 +#: usr/local/www/interfaces.php:2341 +msgid "Regulatory settings" +msgstr "è¦åˆ¶ã®è¨­å®š" + +#: usr/local/www/interfaces.php:2112 usr/local/www/interfaces.php:2290 +#: usr/local/www/interfaces.php:2278 usr/local/www/interfaces.php:2308 +#: usr/local/www/interfaces.php:2354 usr/local/www/interfaces.php:2343 +#: usr/local/www/interfaces.php:2343 +msgid "Regulatory domain" +msgstr "調節領域" + +#: usr/local/www/interfaces.php:2126 usr/local/www/interfaces.php:2304 +#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2322 +#: usr/local/www/interfaces.php:2368 usr/local/www/interfaces.php:2357 +#: usr/local/www/interfaces.php:2357 +msgid "" +"Note: Some cards have a default that is not recognized and require changing " +"the regulatory domain to one in this list for the changes to other " +"regulatory settings to work." +msgstr ""注:一部ã®ã‚«ãƒ¼ãƒ‰ãŒèªè­˜ã•れã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã•れã¦ã„ãªã„ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æŒã£ã¦ã„ã‚‹"動作ã™ã‚‹ã‚ˆã†ã«ã€ä»–ã®ã€Œèª¿ç¯€ã®è¨­å®šã‚’変更ã™ã‚‹ãŸã‚ã«ã€ã“ã®ãƒªã‚¹ãƒˆã«1ã¸ã®è¦åˆ¶åŒºåŸŸã‚’。" + +#: usr/local/www/interfaces.php:2128 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2294 usr/local/www/interfaces.php:2324 +#: usr/local/www/interfaces.php:2370 usr/local/www/interfaces.php:2359 +#: usr/local/www/interfaces.php:2359 +msgid "Country (listed with country code and regulatory domain)" +msgstr "国(国コードã¨èª¿ç¯€ãƒ‰ãƒ¡ã‚¤ãƒ³ã¨è¨˜è¼‰ã•れã¦ã„る)" + +#: usr/local/www/interfaces.php:2142 usr/local/www/interfaces.php:2320 +#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2338 +#: usr/local/www/interfaces.php:2384 usr/local/www/interfaces.php:2373 +#: usr/local/www/interfaces.php:2373 +msgid "" +"Note: Any country setting other than "Default" will override the " +"regulatory domain setting" +msgstr ""注:以外ã®è¨­å®šã™ã¹ã¦ã®å›½"デフォルトã¯è¦åˆ¶åŒºåŸŸã®è¨­å®šã€ã‚ˆã‚Šå„ªå…ˆã•れã¾ã™ã€" + +#: usr/local/www/interfaces.php:2144 usr/local/www/interfaces.php:2322 +#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2340 +#: usr/local/www/interfaces.php:2386 usr/local/www/interfaces.php:2375 +#: usr/local/www/interfaces.php:2375 +msgid "Location" +msgstr "場所" + +#: usr/local/www/interfaces.php:2147 usr/local/www/interfaces.php:2325 +#: usr/local/www/interfaces.php:2313 usr/local/www/interfaces.php:2343 +#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2378 +#: usr/local/www/interfaces.php:2378 +msgid "Indoor" +msgstr "屋内" + +#: usr/local/www/interfaces.php:2148 usr/local/www/interfaces.php:2326 +#: usr/local/www/interfaces.php:2314 usr/local/www/interfaces.php:2344 +#: usr/local/www/interfaces.php:2390 usr/local/www/interfaces.php:2379 +#: usr/local/www/interfaces.php:2379 +msgid "Outdoor" +msgstr "アウトドア" + +#: usr/local/www/interfaces.php:2149 usr/local/www/interfaces.php:2327 +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2345 +#: usr/local/www/interfaces.php:2391 usr/local/www/interfaces.php:2380 +#: usr/local/www/interfaces.php:2380 +msgid "Anywhere" +msgstr "ã©ã“ã§ã‚‚" + +#: usr/local/www/interfaces.php:2152 usr/local/www/interfaces.php:2330 +#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2348 +#: usr/local/www/interfaces.php:2394 usr/local/www/interfaces.php:2383 +#: usr/local/www/interfaces.php:2383 +msgid "" +"These settings may affect which channels are available and the maximum " +"transmit power allowed on those channels. Using the correct settings to " +"comply with local regulatory requirements is recommended." +msgstr "é€ä¿¡é›»åŠ›ãれらã®ãƒãƒ£ãƒãƒ«ä¸Šã§è¨±å¯"ã“れらã®è¨­å®šã¯ã€ãƒãƒ£ãƒãƒ«ãŒåˆ©ç”¨å¯èƒ½ã§ã‚ã‚Šã€æœ€å¤§å€¤ã¯ã©ã®å½±éŸ¿ã‚’与ãˆã‚‹å¯èƒ½æ€§ãŒã‚り〠。 「ç¾åœ°ã®è¦åˆ¶è¦ä»¶ã«æº–æ‹ ã—ã¦ã€æ­£ã—ã„設定を使用ã™ã‚‹ã“ã¨ã¯ãŠå‹§ã‚ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:2154 usr/local/www/interfaces.php:2332 +#: usr/local/www/interfaces.php:2320 usr/local/www/interfaces.php:2350 +#: usr/local/www/interfaces.php:2396 usr/local/www/interfaces.php:2385 +#: usr/local/www/interfaces.php:2385 +msgid "" +"Note: All wireless networks on this interface will be temporarily brought " +"down when changing regulatory settings. Some of the regulatory domains or " +"country codes may not be allowed by some cards. These settings may not be " +"able to add additional channels that are not already supported." +msgstr ""注:ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã®ã™ã¹ã¦ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒä¸€æ™‚çš„ã«æèµ·ã•れる「制御ã®è¨­å®šã‚’変更ã™ã‚‹ã¨ãã«ãƒ€ã‚¦ãƒ³ã€‚è¦åˆ¶åŒºåŸŸã¾ãŸã¯ä¸€éƒ¨ã®ã€Œå›½ã‚³ãƒ¼ãƒ‰ã¯ã€ä¸€éƒ¨ã®ã‚«ãƒ¼ãƒ‰ã§è¨±å¯ã•れãªã„ã“ã¨ãŒã‚りã¾ã™ã€‚ã“れらã®è¨­å®šã¯ãªã„ã‹ã‚‚ã—れãªã„ã€ãŒæ—¢ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„追加ã®ãƒãƒ£ãƒãƒ«ã‚’追加ã™ã‚‹ã“ã¨ãŒã§ã。" + +#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2339 +#: usr/local/www/interfaces.php:2327 usr/local/www/interfaces.php:2357 +#: usr/local/www/interfaces.php:2403 usr/local/www/interfaces.php:2392 +#: usr/local/www/interfaces.php:2392 +msgid "Network-specific wireless configuration" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å›ºæœ‰ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹è¨­å®š" + +#: usr/local/www/interfaces.php:2167 +#: usr/local/www/interfaces_wireless_edit.php:179 +#: usr/local/www/interfaces.php:2345 usr/local/www/interfaces.php:2333 +#: usr/local/www/interfaces_wireless_edit.php:181 +#: usr/local/www/interfaces.php:2363 usr/local/www/interfaces.php:2409 +#: usr/local/www/interfaces.php:2398 +#: usr/local/www/interfaces_wireless_edit.php:181 +#: usr/local/www/interfaces.php:2398 +msgid "Infrastructure (BSS)" +msgstr "インフラストラクãƒãƒ£ï¼ˆ BSS)" + +#: usr/local/www/interfaces.php:2168 +#: usr/local/www/interfaces_wireless_edit.php:180 +#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2334 +#: usr/local/www/interfaces_wireless_edit.php:182 +#: usr/local/www/interfaces.php:2364 usr/local/www/interfaces.php:2410 +#: usr/local/www/interfaces.php:2399 +#: usr/local/www/interfaces_wireless_edit.php:182 +#: usr/local/www/interfaces.php:2399 +msgid "Ad-hoc (IBSS)" +msgstr "アドホック( IBSS )" + +#: usr/local/www/interfaces.php:2169 +#: usr/local/www/interfaces_wireless_edit.php:181 +#: usr/local/www/interfaces.php:2347 usr/local/www/interfaces.php:2335 +#: usr/local/www/interfaces_wireless_edit.php:183 +#: usr/local/www/interfaces.php:2365 usr/local/www/interfaces.php:2411 +#: usr/local/www/interfaces.php:2400 +#: usr/local/www/interfaces_wireless_edit.php:183 +#: usr/local/www/interfaces.php:2400 +msgid "Access Point" +msgstr "アクセスãƒã‚¤ãƒ³ãƒˆ" + +#: usr/local/www/interfaces.php:2181 usr/local/www/interfaces.php:2361 +#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2379 +#: usr/local/www/interfaces.php:2425 usr/local/www/interfaces.php:2414 +#: usr/local/www/interfaces.php:2414 +msgid "Minimum wireless standard" +msgstr "最å°ç„¡ç·šè¦æ ¼" + +#: usr/local/www/interfaces.php:2184 usr/local/www/interfaces.php:2364 +#: usr/local/www/interfaces.php:2352 usr/local/www/interfaces.php:2382 +#: usr/local/www/interfaces.php:2428 usr/local/www/interfaces.php:2417 +#: usr/local/www/interfaces.php:2417 +msgid "Any" +msgstr "ä»»æ„ã®" + +#: usr/local/www/interfaces.php:2186 usr/local/www/interfaces.php:2366 +#: usr/local/www/interfaces.php:2354 usr/local/www/interfaces.php:2384 +#: usr/local/www/interfaces.php:2430 usr/local/www/interfaces.php:2419 +#: usr/local/www/interfaces.php:2419 +msgid "802.11g" +msgstr "802.11グラム" + +#: usr/local/www/interfaces.php:2188 usr/local/www/interfaces.php:2368 +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2386 +#: usr/local/www/interfaces.php:2432 usr/local/www/interfaces.php:2421 +#: usr/local/www/interfaces.php:2421 +msgid "802.11n" +msgstr "802.11nã®" + +#: usr/local/www/interfaces.php:2191 usr/local/www/interfaces.php:2371 +#: usr/local/www/interfaces.php:2359 usr/local/www/interfaces.php:2389 +#: usr/local/www/interfaces.php:2435 usr/local/www/interfaces.php:2424 +#: usr/local/www/interfaces.php:2424 +msgid "" +"When operating as an access point, allow only stations capable of the " +"selected wireless standard to associate (stations not capable are not " +"permitted to associate)." +msgstr "é¸æŠžã•れãŸç„¡ç·šè¦æ ¼ï¼ˆå¯¾å¿œã—ã¦ã„ãªã„å±€ã¯ã€Œé–¢é€£ä»˜ã‘ã‚‹ã“ã¨ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“)ã«é–¢é€£ä»˜ã‘ã‚‹ãŸã‚ã«ã€ã€Œã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆã¨ã—ã¦å‹•作ã™ã‚‹ã¨ãã€ã™ã‚‹ã“ã¨ãŒã§ãる唯一ã®å±€ãŒè¨±å¯ã™ã‚‹ã€ 。" + +#: usr/local/www/interfaces.php:2196 usr/local/www/interfaces.php:2376 +#: usr/local/www/interfaces.php:2364 usr/local/www/interfaces.php:2394 +#: usr/local/www/interfaces.php:2440 usr/local/www/interfaces.php:2429 +#: usr/local/www/interfaces.php:2429 +msgid "802.11g only" +msgstr "802.11グラムã®ã¿" + +#: usr/local/www/interfaces.php:2199 usr/local/www/interfaces.php:2379 +#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2397 +#: usr/local/www/interfaces.php:2443 usr/local/www/interfaces.php:2432 +#: usr/local/www/interfaces.php:2432 +msgid "" +"When operating as an access point in 802.11g mode, allow only 11g-capable " +"stations to associate (11b-only stations are not permitted to associate)." +msgstr "ステーション(11B専用ã®ã‚¹ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚’関連付ã‘ã‚‹ã“ã¨ãŒè¨±å¯ã•れã¦ã„ãªã„)ã«é–¢é€£ä»˜ã‘ã‚‹ãŸã‚ã«ã€ã®802.11gモードã§ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆã¨ã—ã¦å‹•作ã™ã‚‹å ´åˆã€å”¯ä¸€ã®11グラム対応ãŒã§ãるよã†ã«ã€ 。" + +#: usr/local/www/interfaces.php:2204 usr/local/www/interfaces.php:2384 +#: usr/local/www/interfaces.php:2372 usr/local/www/interfaces.php:2402 +#: usr/local/www/interfaces.php:2448 usr/local/www/interfaces.php:2437 +#: usr/local/www/interfaces.php:2437 +msgid "Allow intra-BSS communication" +msgstr "内ã®BSS通信を許å¯ã™ã‚‹" + +#: usr/local/www/interfaces.php:2208 usr/local/www/interfaces.php:2388 +#: usr/local/www/interfaces.php:2376 usr/local/www/interfaces.php:2406 +#: usr/local/www/interfaces.php:2452 usr/local/www/interfaces.php:2441 +#: usr/local/www/interfaces.php:2441 +msgid "" +"When operating as an access point, enable this if you want to pass packets " +"between wireless clients directly." +msgstr "直接無線クライアントã®é–“ã«ã€Œã‚ãªãŸã¯ã€ãƒ‘ケットを渡ã—ãŸã„å ´åˆã¯ã€ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆã¨ã—ã¦å‹•作ã—ã¦ã„ã‚‹å ´åˆã€ã“れをå¯èƒ½ã«ã™ã‚‹ã€ 。" + +#: usr/local/www/interfaces.php:2210 usr/local/www/interfaces.php:2390 +#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2408 +#: usr/local/www/interfaces.php:2454 usr/local/www/interfaces.php:2443 +#: usr/local/www/interfaces.php:2443 +msgid "" +"Disabling the internal bridging is useful when traffic is to be processed " +"with packet filtering." +msgstr "パケットフィルタリングã§ã€Œãƒˆãƒ©ãƒ•ィックãŒå‡¦ç†ã•れるã¨ãã«ã€å†…部ã®ãƒ–リッジを無効ã«ã™ã‚‹ã¨ä¾¿åˆ©ã§ã™ã€ 。" + +#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2394 +#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2412 +#: usr/local/www/interfaces.php:2458 usr/local/www/interfaces.php:2447 +#: usr/local/www/interfaces.php:2447 +msgid "Enable WME" +msgstr "WMEを有効ã«ã—ã¾ã™" + +#: usr/local/www/interfaces.php:2217 usr/local/www/interfaces.php:2397 +#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2415 +#: usr/local/www/interfaces.php:2461 usr/local/www/interfaces.php:2450 +#: usr/local/www/interfaces.php:2450 +msgid "Setting this option will force the card to use WME (wireless QoS)." +msgstr "ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã¨ã€ WME (無線QoS)を使用ã™ã‚‹ã‚ˆã†ã«ã‚«ãƒ¼ãƒ‰ã‚’強制ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:2221 usr/local/www/interfaces.php:2401 +#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2419 +#: usr/local/www/interfaces.php:2465 usr/local/www/interfaces.php:2454 +#: usr/local/www/interfaces.php:2454 +msgid "Enable Hide SSID" +msgstr "éžè¡¨ç¤ºã®SSIDを有効ã«ã™ã‚‹" + +#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2405 +#: usr/local/www/interfaces.php:2393 usr/local/www/interfaces.php:2423 +#: usr/local/www/interfaces.php:2469 usr/local/www/interfaces.php:2458 +#: usr/local/www/interfaces.php:2458 +msgid "Setting this option will force the card to NOT broadcast its SSID" +msgstr "ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã¨ã€ãã®SSIDをブロードキャストã—ãªã„よã†ã«ã€ã‚«ãƒ¼ãƒ‰ã‚’強制的ã«" + +#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2407 +#: usr/local/www/interfaces.php:2395 usr/local/www/interfaces.php:2425 +#: usr/local/www/interfaces.php:2471 usr/local/www/interfaces.php:2460 +#: usr/local/www/interfaces.php:2460 +msgid "(this might create problems for some clients)." +msgstr "(ã“れã¯ã„ãã¤ã‹ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãŸã‚ã®å•題を作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼‰ 。" + +#: usr/local/www/interfaces.php:2231 usr/local/www/interfaces.php:2411 +#: usr/local/www/interfaces.php:2399 usr/local/www/interfaces.php:2429 +#: usr/local/www/interfaces.php:2475 usr/local/www/interfaces.php:2464 +#: usr/local/www/interfaces.php:2464 +msgid "WEP" +msgstr "WEP" + +#: usr/local/www/interfaces.php:2234 usr/local/www/interfaces.php:2414 +#: usr/local/www/interfaces.php:2402 usr/local/www/interfaces.php:2432 +#: usr/local/www/interfaces.php:2478 usr/local/www/interfaces.php:2467 +#: usr/local/www/interfaces.php:2467 +msgid "Enable WEP" +msgstr "WEPを有効ã«" + +#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2419 +#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2437 +#: usr/local/www/interfaces.php:2483 usr/local/www/interfaces.php:2472 +#: usr/local/www/interfaces.php:2472 +msgid "TX key" +msgstr "TXキー" + +#: usr/local/www/interfaces.php:2242 usr/local/www/interfaces.php:2422 +#: usr/local/www/interfaces.php:2410 usr/local/www/interfaces.php:2440 +#: usr/local/www/interfaces.php:2486 usr/local/www/interfaces.php:2475 +#: usr/local/www/interfaces.php:2475 +msgid "Key 1:" +msgstr "キー1 :" + +#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2431 +#: usr/local/www/interfaces.php:2419 usr/local/www/interfaces.php:2449 +#: usr/local/www/interfaces.php:2495 usr/local/www/interfaces.php:2484 +#: usr/local/www/interfaces.php:2484 +msgid "Key 2:" +msgstr "キー2 :" + +#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2440 +#: usr/local/www/interfaces.php:2428 usr/local/www/interfaces.php:2458 +#: usr/local/www/interfaces.php:2504 usr/local/www/interfaces.php:2493 +#: usr/local/www/interfaces.php:2493 +msgid "Key 3:" +msgstr "キー3 :" + +#: usr/local/www/interfaces.php:2269 usr/local/www/interfaces.php:2449 +#: usr/local/www/interfaces.php:2437 usr/local/www/interfaces.php:2467 +#: usr/local/www/interfaces.php:2513 usr/local/www/interfaces.php:2502 +#: usr/local/www/interfaces.php:2502 +msgid "Key 4:" +msgstr "キー4 :" + +#: usr/local/www/interfaces.php:2279 usr/local/www/interfaces.php:2459 +#: usr/local/www/interfaces.php:2447 usr/local/www/interfaces.php:2477 +#: usr/local/www/interfaces.php:2523 usr/local/www/interfaces.php:2512 +#: usr/local/www/interfaces.php:2512 +msgid "" +"40 (64) bit keys may be entered as 5 ASCII characters or 10 hex digits " +"preceded by '0x'." +msgstr "'0 XãŒå‰ã«ã€ã€ 40 ( 64 )ビットã®ã‚­ãƒ¼ã¯ã€ 5文字ã®ASCII文字ã¾ãŸã¯10æ¡ã®16進数ã§å…¥åŠ›ã—ã¦ã‚‚よã„〠。" + +#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2460 +#: usr/local/www/interfaces.php:2448 usr/local/www/interfaces.php:2478 +#: usr/local/www/interfaces.php:2524 usr/local/www/interfaces.php:2513 +#: usr/local/www/interfaces.php:2513 +msgid "" +"104 (128) bit keys may be entered as 13 ASCII characters or 26 hex digits " +"preceded by '0x'." +msgstr "'0 X'ã®å‰ã€ 104 ( 128 )ビットã®ã‚­ãƒ¼ã¯13文字ã®ASCII文字ã¾ãŸã¯26æ¡ã®16進数ã§å…¥åŠ›ã—ã¦ã‚‚よã„〠。" + +#: usr/local/www/interfaces.php:2284 usr/local/www/interfaces.php:2308 +#: usr/local/www/interfaces.php:2464 usr/local/www/interfaces.php:2488 +#: usr/local/www/interfaces.php:2452 usr/local/www/interfaces.php:2476 +#: usr/local/www/interfaces.php:2482 usr/local/www/interfaces.php:2506 +#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2552 +#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2541 +#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2541 +msgid "WPA" +msgstr "WPA" + +#: usr/local/www/interfaces.php:2287 usr/local/www/interfaces.php:2467 +#: usr/local/www/interfaces.php:2455 usr/local/www/interfaces.php:2485 +#: usr/local/www/interfaces.php:2531 usr/local/www/interfaces.php:2520 +#: usr/local/www/interfaces.php:2520 +msgid "Enable WPA" +msgstr "WPAを有効ã«ã—ã¾ã™" + +#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2472 +msgid "WPA Pre Shared Key" +msgstr "WPA事å‰å…±æœ‰ã‚­ãƒ¼" + +#: usr/local/www/interfaces.php:2295 usr/local/www/interfaces.php:2475 +#: usr/local/www/interfaces.php:2463 usr/local/www/interfaces.php:2493 +#: usr/local/www/interfaces.php:2539 usr/local/www/interfaces.php:2528 +#: usr/local/www/interfaces.php:2528 +msgid "PSK:" +msgstr "PSK :" + +#: usr/local/www/interfaces.php:2301 usr/local/www/interfaces.php:2481 +#: usr/local/www/interfaces.php:2469 usr/local/www/interfaces.php:2499 +#: usr/local/www/interfaces.php:2545 usr/local/www/interfaces.php:2534 +#: usr/local/www/interfaces.php:2534 +msgid "Passphrase must be from 8 to 63 characters." +msgstr "パスフレーズã¯ã€8〜 63文字ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/interfaces.php:2305 usr/local/www/interfaces.php:2485 +#: usr/local/www/interfaces.php:2473 usr/local/www/interfaces.php:2503 +#: usr/local/www/interfaces.php:2549 usr/local/www/interfaces.php:2538 +#: usr/local/www/interfaces.php:2538 +msgid "WPA Mode" +msgstr "WPAモード" + +#: usr/local/www/interfaces.php:2309 usr/local/www/interfaces.php:2489 +#: usr/local/www/interfaces.php:2477 usr/local/www/interfaces.php:2507 +#: usr/local/www/interfaces.php:2553 usr/local/www/interfaces.php:2542 +#: usr/local/www/interfaces.php:2542 +msgid "WPA2" +msgstr "WPA2" + +#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2320 +#: usr/local/www/interfaces.php:2330 usr/local/www/interfaces.php:2339 +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/interfaces.php:2490 usr/local/www/interfaces.php:2500 +#: usr/local/www/interfaces.php:2510 usr/local/www/interfaces.php:2519 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/interfaces.php:2478 usr/local/www/interfaces.php:2488 +#: usr/local/www/interfaces.php:2498 usr/local/www/interfaces.php:2507 +#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2518 +#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2537 +#: usr/local/www/interfaces.php:2554 usr/local/www/interfaces.php:2564 +#: usr/local/www/interfaces.php:2574 usr/local/www/interfaces.php:2583 +#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2553 +#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2572 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2553 +#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2572 +msgid "Both" +msgstr "両方" + +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2495 +#: usr/local/www/interfaces.php:2483 usr/local/www/interfaces.php:2513 +#: usr/local/www/interfaces.php:2559 usr/local/www/interfaces.php:2548 +#: usr/local/www/interfaces.php:2548 +msgid "WPA Key Management Mode" +msgstr "WPAキー管ç†ãƒ¢ãƒ¼ãƒ‰" + +#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2498 +msgid "Pre Shared Key" +msgstr "事å‰å…±æœ‰ã‚­ãƒ¼" + +#: usr/local/www/interfaces.php:2319 usr/local/www/interfaces.php:2499 +#: usr/local/www/interfaces.php:2487 usr/local/www/interfaces.php:2517 +#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2552 +#: usr/local/www/interfaces.php:2552 +msgid "Extensible Authentication Protocol" +msgstr "æ‹¡å¼µèªè¨¼ãƒ—ロトコル" + +#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2508 +#: usr/local/www/interfaces.php:2496 usr/local/www/interfaces.php:2526 +#: usr/local/www/interfaces.php:2572 usr/local/www/interfaces.php:2561 +#: usr/local/www/interfaces.php:2561 +msgid "Open System Authentication" +msgstr "オープンシステムèªè¨¼" + +#: usr/local/www/interfaces.php:2329 usr/local/www/interfaces.php:2509 +#: usr/local/www/interfaces.php:2497 usr/local/www/interfaces.php:2527 +#: usr/local/www/interfaces.php:2573 usr/local/www/interfaces.php:2562 +#: usr/local/www/interfaces.php:2562 +msgid "Shared Key Authentication" +msgstr "共有éµèªè¨¼" + +#: usr/local/www/interfaces.php:2332 usr/local/www/interfaces.php:2512 +#: usr/local/www/interfaces.php:2500 usr/local/www/interfaces.php:2530 +#: usr/local/www/interfaces.php:2576 usr/local/www/interfaces.php:2565 +#: usr/local/www/interfaces.php:2565 +msgid "Note: Shared Key Authentication requires WEP." +msgstr "注æ„:共有キーèªè¨¼ãŒWEPã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:2336 usr/local/www/interfaces.php:2516 +#: usr/local/www/interfaces.php:2504 usr/local/www/interfaces.php:2534 +#: usr/local/www/interfaces.php:2580 usr/local/www/interfaces.php:2569 +#: usr/local/www/interfaces.php:2569 +msgid "WPA Pairwise" +msgstr "WPAペアワイズ" + +#: usr/local/www/interfaces.php:2340 usr/local/www/interfaces.php:2520 +#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2538 +#: usr/local/www/interfaces.php:2584 usr/local/www/interfaces.php:2573 +#: usr/local/www/interfaces.php:2573 +msgid "AES (recommended)" +msgstr "AES (推奨)" + +#: usr/local/www/interfaces.php:2341 usr/local/www/interfaces.php:2521 +#: usr/local/www/interfaces.php:2509 usr/local/www/interfaces.php:2539 +#: usr/local/www/interfaces.php:2585 usr/local/www/interfaces.php:2574 +#: usr/local/www/interfaces.php:2574 +msgid "TKIP" +msgstr "TKIP" + +#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2526 +#: usr/local/www/interfaces.php:2514 usr/local/www/interfaces.php:2544 +#: usr/local/www/interfaces.php:2590 usr/local/www/interfaces.php:2579 +#: usr/local/www/interfaces.php:2579 +msgid "Key Rotation" +msgstr "キーローテーション" + +#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2529 +#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2547 +#: usr/local/www/interfaces.php:2593 usr/local/www/interfaces.php:2582 +#: usr/local/www/interfaces.php:2582 +msgid "" +"Allowed values are 1-9999 but should not be longer than Master Key " +"Regeneration time." +msgstr ""指定ã§ãる値ã¯1ã‹ã‚‰9999ã§ã™ãŒã€ãƒžã‚¹ã‚¿ãƒ¼ã‚­ãƒ¼ã‚ˆã‚Šã‚‚é•·ãã™ã¹ãã§ã¯ãªã„ã€å†ç”Ÿæ™‚間。" + +#: usr/local/www/interfaces.php:2353 usr/local/www/interfaces.php:2533 +#: usr/local/www/interfaces.php:2521 usr/local/www/interfaces.php:2551 +#: usr/local/www/interfaces.php:2597 usr/local/www/interfaces.php:2586 +#: usr/local/www/interfaces.php:2586 +msgid "Master Key Regeneration" +msgstr "マスターキーã®å†ç”Ÿæˆ" + +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2536 +#: usr/local/www/interfaces.php:2524 usr/local/www/interfaces.php:2554 +#: usr/local/www/interfaces.php:2600 usr/local/www/interfaces.php:2589 +#: usr/local/www/interfaces.php:2589 +msgid "" +"Allowed values are 1-9999 but should not be shorter than Key Rotation time." +msgstr ""指定ã§ãる値ã¯1ã‹ã‚‰9999ã§ã™ãŒã€ã‚­ãƒ¼ãƒ­ãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³æ™‚間より短ãã™ã¹ãã§ã¯ãªã„。" + +#: usr/local/www/interfaces.php:2360 usr/local/www/interfaces.php:2540 +#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2558 +#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2593 +#: usr/local/www/interfaces.php:2593 +msgid "Strict Key Regeneration" +msgstr "厳密ãªã‚­ãƒ¼ã®å†ç”Ÿæˆ" + +#: usr/local/www/interfaces.php:2363 usr/local/www/interfaces.php:2543 +#: usr/local/www/interfaces.php:2531 usr/local/www/interfaces.php:2561 +#: usr/local/www/interfaces.php:2607 usr/local/www/interfaces.php:2596 +#: usr/local/www/interfaces.php:2596 +msgid "" +"Setting this option will force the AP to rekey whenever a client " +"disassociates." +msgstr "関連付ã‘を解除ã—〠"ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã¨ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã„ã¤ã§ã‚‚å†ç”Ÿæˆã™ã‚‹ãŸã‚ã«APを強制ã—ã¾ã™ã€ 。" + +#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2547 +#: usr/local/www/interfaces.php:2535 usr/local/www/interfaces.php:2565 +#: usr/local/www/interfaces.php:2611 usr/local/www/interfaces.php:2600 +#: usr/local/www/interfaces.php:2600 +msgid "Enable IEEE802.1X Authentication" +msgstr "IEEE802.1Xèªè¨¼ã‚’有効ã«ã—ã¾ã™" + +#: usr/local/www/interfaces.php:2370 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2538 usr/local/www/interfaces.php:2568 +#: usr/local/www/interfaces.php:2614 usr/local/www/interfaces.php:2603 +#: usr/local/www/interfaces.php:2603 +msgid "Setting this option will enable 802.1x authentication." +msgstr "ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã¨ã€ 802.1xèªè¨¼ã‚’有効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:2371 +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/status_openvpn.php:304 usr/local/www/interfaces.php:2551 +#: usr/local/www/load_balancer_pool_edit.php:255 +#: usr/local/www/status_openvpn.php:307 usr/local/www/interfaces.php:2539 +#: usr/local/www/load_balancer_pool_edit.php:253 +#: usr/local/www/status_openvpn.php:355 usr/local/www/interfaces.php:2569 +#: usr/local/www/status_openvpn.php:385 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2604 usr/local/www/status_openvpn.php:385 +#: usr/local/www/load_balancer_pool_edit.php:253 +#: usr/local/www/interfaces.php:2604 +msgid "NOTE" +msgstr "注" + +#: usr/local/www/interfaces.php:2371 usr/local/www/interfaces.php:2551 +#: usr/local/www/interfaces.php:2539 usr/local/www/interfaces.php:2569 +#: usr/local/www/interfaces.php:2615 usr/local/www/interfaces.php:2604 +#: usr/local/www/interfaces.php:2604 +msgid "this option requires checking the "Enable WPA box"." +msgstr "ã“ã®ã‚ªãƒ—ションã§ã¯ã€ 「有効WPAボックスã€ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:2375 usr/local/www/interfaces.php:2555 +#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2573 +#: usr/local/www/interfaces.php:2619 usr/local/www/interfaces.php:2608 +#: usr/local/www/interfaces.php:2608 +msgid "802.1X Authentication Server IP Address" +msgstr "802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼ã®IPアドレス" + +#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2558 +#: usr/local/www/interfaces.php:2579 usr/local/www/interfaces.php:2546 +#: usr/local/www/interfaces.php:2567 usr/local/www/interfaces.php:2576 +#: usr/local/www/interfaces.php:2597 usr/local/www/interfaces.php:2622 +#: usr/local/www/interfaces.php:2643 usr/local/www/interfaces.php:2611 +#: usr/local/www/interfaces.php:2632 usr/local/www/interfaces.php:2611 +#: usr/local/www/interfaces.php:2632 +msgid "" +"Enter the IP address of the 802.1X Authentication Server. This is commonly " +"a Radius server (FreeRadius, Internet Authentication Services, etc.)" +msgstr "「802.1Xèªè¨¼ã‚µãƒ¼ãƒã®IPアドレスを入力ã—ã¾ã™ã€‚ã“れã¯ã€ä¸€èˆ¬çš„ã«ã¯ã€Œ Radiusサーãƒï¼ˆã«FreeRadius ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆèªè¨¼ã‚µãƒ¼ãƒ“スãªã©ï¼‰" + +#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2562 +#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2580 +#: usr/local/www/interfaces.php:2626 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2615 +msgid "802.1X Authentication Server Port" +msgstr "802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒˆ" + +#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2565 +#: usr/local/www/interfaces.php:2586 usr/local/www/interfaces.php:2553 +#: usr/local/www/interfaces.php:2574 usr/local/www/interfaces.php:2583 +#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2629 +#: usr/local/www/interfaces.php:2650 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2639 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2639 +msgid "Leave blank for the default 1812 port." +msgstr "デフォルト1812ãƒãƒ¼ãƒˆã«å¯¾ã—ã¦ã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2569 +#: usr/local/www/interfaces.php:2557 usr/local/www/interfaces.php:2587 +#: usr/local/www/interfaces.php:2633 usr/local/www/interfaces.php:2622 +#: usr/local/www/interfaces.php:2622 +msgid "802.1X Authentication Server Shared Secret" +msgstr "802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼å…±æœ‰ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ" + +#: usr/local/www/interfaces.php:2396 usr/local/www/interfaces.php:2597 +#: usr/local/www/interfaces.php:2585 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2661 usr/local/www/interfaces.php:2650 +#: usr/local/www/interfaces.php:2650 +msgid "Authentication Roaming Preauth" +msgstr "èªè¨¼ãƒ­ãƒ¼ãƒŸãƒ³ã‚°PREAUTH" + +#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2608 +#: usr/local/www/interfaces.php:2596 usr/local/www/interfaces.php:2626 +#: usr/local/www/interfaces.php:2672 usr/local/www/interfaces.php:2661 +#: usr/local/www/interfaces.php:2661 +msgid "Private networks" +msgstr "プライベートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/interfaces.php:2415 usr/local/www/interfaces.php:2616 +#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2634 +#: usr/local/www/interfaces.php:2680 usr/local/www/interfaces.php:2669 +#: usr/local/www/interfaces.php:2669 +msgid "" +"When set, this option blocks traffic from IP addresses that are reserved for " +"private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as" +msgstr "「設定ã—ãŸå ´åˆã€ã“ã®ã‚ªãƒ—ションをブロックトラフィックã¯ã®ãŸã‚ã«äºˆç´„ã•れã¦ã„ã‚‹IPアドレスã‹ã‚‰ã®ã€Œ RFC 1918 ( 10月8日〠172.16/12 〠192.168/16 )ã«å¾“ã£ã¦ãƒ—ライベートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨ã—ã¦" + +#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636 +#: usr/local/www/interfaces.php:2682 usr/local/www/interfaces.php:2671 +#: usr/local/www/interfaces.php:2671 +msgid "well as loopback addresses (127/8)." +msgstr "ã ã‘ã§ãªãã€ãƒ«ãƒ¼ãƒ—ãƒãƒƒã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ï¼ˆ 8分ã®127 ) 。" + +#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636 +#: usr/local/www/interfaces.php:2682 usr/local/www/interfaces.php:2671 +#: usr/local/www/interfaces.php:2671 +msgid "" +"You should generally leave this option turned on, unless your WAN network " +"lies in such a private address space, too." +msgstr "ã“ã®ã‚ˆã†ãªãƒ—ライベートアドレス空間ã«ã‚りã™ãŽã¦ã€ 「ã‚ãªãŸã®WANãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒãªã„é™ã‚Šã€ä¸€èˆ¬çš„ã«ã¯ã€ã‚ªãƒ³ã«ãªã£ã¦ã€ã“ã®ã‚ªãƒ—ションを残ã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/interfaces.php:2427 usr/local/www/interfaces.php:2628 +#: usr/local/www/interfaces.php:2616 usr/local/www/interfaces.php:2646 +#: usr/local/www/interfaces.php:2692 usr/local/www/interfaces.php:2681 +#: usr/local/www/interfaces.php:2681 +msgid "" +"When set, this option blocks traffic from IP addresses that are reserved " +"(but not RFC 1918) or not yet assigned by IANA." +msgstr "「設定ã—ãŸå ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ãƒˆãƒ©ãƒ•ィックをブロックã—ã€IPアドレスã‹ã‚‰äºˆç´„ã•れã¦ã„ã‚‹ã“ã¨ã€ (ãŸã ã—ã€RFC 1918 )ã‹ã€ã¾ã IANAã«ã‚ˆã£ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„。" + +#: usr/local/www/interfaces.php:2429 usr/local/www/interfaces.php:2630 +#: usr/local/www/interfaces.php:2618 usr/local/www/interfaces.php:2648 +#: usr/local/www/interfaces.php:2694 usr/local/www/interfaces.php:2683 +#: usr/local/www/interfaces.php:2683 +msgid "" +"Bogons are prefixes that should never appear in the Internet routing table, " +"and obviously should not appear as the source address in any packets you " +"receive." +msgstr "「 Bogonsã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルã«è¡¨ç¤ºã•れãªã„よã†ã«ã—ã¦ãã ã•ã„æŽ¥é ­è¾žã§ã‚ã‚‹ã€ã¨æ˜Žã‚‰ã‹ã«ã‚ãªãŸã¯ã€ 「å—ä¿¡ã—ãŸã™ã¹ã¦ã®ãƒ‘ケットã®é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã—ã¦è¡¨ç¤ºã•れã¾ã›ã‚“。" + +#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2559 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783 +#: usr/local/www/interfaces.php:2820 usr/local/www/interfaces.php:2829 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +msgid "You can manage Gateways" +msgstr "ã‚ãªãŸã¯ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’管ç†ã§ãã‚‹" + +#: usr/local/www/interfaces_assign.php:43 +#: usr/local/www/interfaces_assign.php:43 +msgid "Assign network ports" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒˆã®å‰²ã‚Šå½“ã¦" + +#: usr/local/www/interfaces_assign.php:194 +#: usr/local/www/interfaces_assign.php:194 +#, php-format +msgid "Port %1$s was assigned to %2$s interfaces:" +msgstr "ãƒãƒ¼ãƒˆã¯%1$sã¯%2$sインタフェースã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸã€‚" + +#: usr/local/www/interfaces_assign.php:262 +#: usr/local/www/interfaces_assign.php:274 +#: usr/local/www/interfaces_assign.php:274 +msgid "" +"The interface is part of a group. Please remove it from the group to continue" +msgstr "「インターフェースã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸€éƒ¨ã§ã‚る。継続ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰å‰Šé™¤ã—ã¦ãã ã•ã„" + +#: usr/local/www/interfaces_assign.php:264 +#: usr/local/www/interfaces_assign.php:276 +#: usr/local/www/interfaces_assign.php:276 +msgid "" +"The interface is part of a bridge. Please remove it from the bridge to " +"continue" +msgstr "「インターフェイスã¯ã€ãƒ–リッジã®ä¸€éƒ¨ã§ã‚る。ブリッジã‹ã‚‰ãれを削除ã—ã¦ãã ã•ã„ã€ç¶™ç¶š" + +#: usr/local/www/interfaces_assign.php:266 +#: usr/local/www/interfaces_assign.php:278 +#: usr/local/www/interfaces_assign.php:278 +msgid "" +"The interface is part of a gre tunnel. Please delete the tunnel to continue" +msgstr "「インターフェースã¯GREトンãƒãƒ«ã®ä¸€éƒ¨ã§ã‚る。継続ã—ã¦ãƒˆãƒ³ãƒãƒ«ã‚’削除ã—ã¦ãã ã•ã„" + +#: usr/local/www/interfaces_assign.php:268 +#: usr/local/www/interfaces_assign.php:280 +#: usr/local/www/interfaces_assign.php:280 +msgid "" +"The interface is part of a gif tunnel. Please delete the tunnel to continue" +msgstr "「インターフェースã¯ã€GIFトンãƒãƒ«ã®ä¸€éƒ¨ã§ã‚る。継続ã—ã¦ãƒˆãƒ³ãƒãƒ«ã‚’削除ã—ã¦ãã ã•ã„" + +#: usr/local/www/interfaces_assign.php:318 +#: usr/local/www/interfaces_assign.php:312 +#: usr/local/www/interfaces_assign.php:318 +msgid "Interface has been deleted." +msgstr "インターフェイスã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/interfaces_assign.php:325 +#: usr/local/www/interfaces_assign.php:319 +#: usr/local/www/interfaces_assign.php:325 +msgid "lan" +msgstr "LAN" + +#: usr/local/www/interfaces_assign.php:326 +#: usr/local/www/interfaces_assign.php:320 +#: usr/local/www/interfaces_assign.php:326 +msgid "LAN" +msgstr "LAN" + +#: usr/local/www/interfaces_assign.php:366 +#: usr/local/www/interfaces_assign.php:360 +#: usr/local/www/interfaces_assign.php:366 +msgid "Interface has been added." +msgstr "インタフェースãŒè¿½åŠ ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/interfaces_assign.php:376 +#: usr/local/www/interfaces_assign.php:370 +#: usr/local/www/interfaces_assign.php:376 +msgid "The system is now rebooting. Please wait." +msgstr "システムãŒãƒªãƒ–ートã•れã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。" + +#: usr/local/www/interfaces_assign.php:378 +#: usr/local/www/interfaces_assign.php:372 +#: usr/local/www/interfaces_assign.php:378 +msgid "Reboot is needed. Please apply the settings in order to reboot." +msgstr "å†èµ·å‹•ãŒå¿…è¦ã«ãªã‚‹ã€‚å†èµ·å‹•ã™ã‚‹ãŸã‚ã«è¨­å®šã‚’é©ç”¨ã—ã¦ãã ã•ã„。" + +#: usr/local/www/interfaces_assign.php:380 +#: usr/local/www/interfaces_assign.php:374 +#: usr/local/www/interfaces_assign.php:380 +msgid "" +"Interface mismatch detected. Please resolve the mismatch and click Save. " +"The firewall will reboot afterwards." +msgstr "ファイアウォールã¯ã€ãã®å¾Œå†èµ·å‹•ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_assign.php:390 +#: usr/local/www/interfaces_assign.php:384 +#: usr/local/www/interfaces_assign.php:390 +msgid "" +"The interface configuration has been changed.
    You must apply the changes " +"in order for them to take effect." +msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚ã«ã€ã€Œã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®è¨­å®šãŒå¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚検索ã—ã¦ã€å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/interfaces_assign.php:421 +#: usr/local/www/interfaces_assign.php:415 +#: usr/local/www/interfaces_assign.php:421 +msgid "Network port" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒˆ" + +#: usr/local/www/interfaces_assign.php:437 +#: usr/local/www/interfaces_assign.php:431 +#: usr/local/www/interfaces_assign.php:437 +#, php-format +msgid "VLAN %1$s on %2$s" +msgstr "%2$sã®VLANã¯%1$s" + +#: usr/local/www/interfaces_assign.php:480 +#: usr/local/www/interfaces_assign.php:474 +#: usr/local/www/interfaces_assign.php:480 +msgid "Do you really want to delete this interface?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/interfaces_assign.php:480 +#: usr/local/www/interfaces_assign.php:474 +#: usr/local/www/interfaces_assign.php:480 +msgid "delete interface" +msgstr "インターフェイスを削除ã™ã‚‹" + +#: usr/local/www/interfaces_assign.php:489 +#: usr/local/www/interfaces_assign.php:483 +#: usr/local/www/interfaces_assign.php:489 +msgid "add interface" +msgstr "インタフェースを追加" + +#: usr/local/www/interfaces_assign.php:506 +#: usr/local/www/interfaces_assign.php:500 +#: usr/local/www/interfaces_assign.php:504 +#: usr/local/www/interfaces_assign.php:504 +msgid "" +"Interfaces that are configured as members of a lagg(4) interface will not be " +"shown." +msgstr "示ã•れã¦ã„る「 laggã®ãƒ¡ãƒ³ãƒãƒ¼ã¨ã—ã¦æ§‹æˆã•れãŸã‚¤ãƒ³ã‚¿ãƒ•ェースã¯ã€ ( 4 )インタフェースã¯ãªã‚Šã¾ã›ã‚“〠。" + +#: usr/local/www/diag_pf_info.php:46 usr/local/www/diag_pf_info.php:46 +msgid "Diagnostics: pfInfo" +msgstr "診断: PFINFO" + +#: usr/local/www/diag_pf_info.php:106 usr/local/www/diag_pf_info.php:103 +msgid "Gathering PF information, please wait..." +msgstr "PF情報をåŽé›†ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." + +#: usr/local/www/diag_smart.php:14 usr/local/www/diag_smart.php:14 +msgid "S.M.A.R.T. Monitor Tools" +msgstr "S.M.A.R.T.ツールを監視" + +#: usr/local/www/diag_smart.php:68 usr/local/www/diag_smart.php:73 +#: usr/local/www/diag_smart.php:73 +msgid "PASSED" +msgstr "PASSED" + +#: usr/local/www/diag_smart.php:69 usr/local/www/diag_smart.php:74 +#: usr/local/www/diag_smart.php:74 +msgid "FAILED" +msgstr "FAILED" + +#: usr/local/www/diag_smart.php:70 usr/local/www/diag_smart.php:75 +#: usr/local/www/diag_smart.php:75 +msgid "Warning" +msgstr "警告" + +#: usr/local/www/diag_smart.php:113 usr/local/www/diag_smart.php:413 +#: usr/local/www/diag_smart.php:126 usr/local/www/diag_smart.php:434 +#: usr/local/www/diag_smart.php:126 usr/local/www/diag_smart.php:434 +msgid "Abort" +msgstr "中止" + +#: usr/local/www/diag_smart.php:154 usr/local/www/diag_smart.php:175 +#: usr/local/www/diag_smart.php:175 +#, php-format +msgid "Email sent to %s" +msgstr "メール%sã«é€ã‚‰" + +#: usr/local/www/diag_smart.php:194 usr/local/www/diag_smart.php:266 +#: usr/local/www/diag_smart.php:215 usr/local/www/diag_smart.php:287 +#: usr/local/www/diag_smart.php:215 usr/local/www/diag_smart.php:287 +msgid "Information/Tests" +msgstr "情報/テスト" + +#: usr/local/www/diag_smart.php:195 usr/local/www/diag_smart.php:206 +#: usr/local/www/diag_smart.php:216 usr/local/www/diag_smart.php:227 +#: usr/local/www/diag_smart.php:216 usr/local/www/diag_smart.php:227 +msgid "Config" +msgstr "設定" + +#: usr/local/www/diag_smart.php:209 usr/local/www/system_camanager.php:524 +#: usr/local/www/system_certmanager.php:617 +#: usr/local/www/system_certmanager.php:720 +#: usr/local/www/system_certmanager.php:733 +#: usr/local/www/system_certmanager.php:886 +#: usr/local/www/system_camanager.php:525 +#: usr/local/www/system_camanager.php:549 usr/local/www/diag_smart.php:230 +#: usr/local/www/system_certmanager.php:758 +#: usr/local/www/system_certmanager.php:928 +#: usr/local/www/system_certmanager.php:759 +#: usr/local/www/system_certmanager.php:932 +#: usr/local/www/system_camanager.php:549 usr/local/www/diag_smart.php:230 +#: usr/local/www/system_certmanager.php:759 +#: usr/local/www/system_certmanager.php:932 +msgid "Email Address" +msgstr "é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/diag_smart.php:231 usr/local/www/diag_smart.php:252 +#: usr/local/www/diag_smart.php:252 +msgid "Test email" +msgstr "テストメール" + +#: usr/local/www/diag_smart.php:236 usr/local/www/diag_smart.php:257 +#: usr/local/www/diag_smart.php:257 +#, php-format +msgid "Send test email to %s" +msgstr "%sã«ãƒ†ã‚¹ãƒˆãƒ¡ãƒ¼ãƒ«ã‚’é€ä¿¡" + +#: usr/local/www/diag_smart.php:278 usr/local/www/diag_smart.php:283 +#: usr/local/www/diag_smart.php:299 usr/local/www/diag_smart.php:304 +#: usr/local/www/diag_smart.php:299 usr/local/www/diag_smart.php:304 +msgid "Info" +msgstr "インフォメーション" + +#: usr/local/www/diag_smart.php:281 usr/local/www/diag_smart.php:302 +#: usr/local/www/diag_smart.php:302 +msgid "Info type" +msgstr "情報ã®ç¨®é¡ž" + +#: usr/local/www/diag_smart.php:284 usr/local/www/diag_smart.php:305 +#: usr/local/www/diag_smart.php:305 +msgid "Health" +msgstr "å¥åº·" + +#: usr/local/www/diag_smart.php:285 usr/local/www/diag_smart.php:306 +#: usr/local/www/diag_smart.php:306 +msgid "SMART Capabilities" +msgstr "SMART機能" + +#: usr/local/www/diag_smart.php:286 usr/local/www/diag_smart.php:307 +#: usr/local/www/diag_smart.php:307 +msgid "Attributes" +msgstr "属性" + +#: usr/local/www/diag_smart.php:287 usr/local/www/firewall_aliases.php:179 +#: usr/local/www/diag_smart.php:308 usr/local/www/firewall_aliases.php:177 +#: usr/local/www/firewall_aliases.php:177 usr/local/www/diag_smart.php:308 +msgid "All" +msgstr "ã™ã¹ã¦" + +#: usr/local/www/diag_smart.php:291 usr/local/www/diag_smart.php:330 +#: usr/local/www/diag_smart.php:367 usr/local/www/diag_smart.php:397 +#: usr/local/www/diag_smart.php:312 usr/local/www/diag_smart.php:351 +#: usr/local/www/diag_smart.php:388 usr/local/www/diag_smart.php:418 +#: usr/local/www/diag_smart.php:312 usr/local/www/diag_smart.php:351 +#: usr/local/www/diag_smart.php:388 usr/local/www/diag_smart.php:418 +msgid "Device: /dev/" +msgstr "デãƒã‚¤ã‚¹ï¼šã¯/ dev /" + +#: usr/local/www/diag_smart.php:307 usr/local/www/diag_smart.php:383 +#: usr/local/www/diag_smart.php:328 usr/local/www/diag_smart.php:404 +#: usr/local/www/diag_smart.php:328 usr/local/www/diag_smart.php:404 +msgid "View" +msgstr "ビュー" + +#: usr/local/www/diag_smart.php:318 +msgid "Perform Self Tests" +msgstr "セルフ·テストを実行" + +#: usr/local/www/diag_smart.php:321 usr/local/www/diag_smart.php:342 +#: usr/local/www/diag_smart.php:342 +msgid "Test type" +msgstr "視力検査表" + +#: usr/local/www/diag_smart.php:323 +#: usr/local/www/status_gateway_groups.php:123 +#: usr/local/www/status_gateways.php:118 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60 +#: usr/local/www/status_gateways.php:119 +#: usr/local/www/status_gateway_groups.php:124 +#: usr/local/www/diag_smart.php:344 usr/local/www/diag_smart.php:344 +#: usr/local/www/status_gateway_groups.php:124 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60 +#: usr/local/www/status_gateways.php:119 +msgid "Offline" +msgstr "オフラインã§" + +#: usr/local/www/diag_smart.php:324 usr/local/www/diag_smart.php:345 +#: usr/local/www/diag_smart.php:345 +msgid "Short" +msgstr "ショート" + +#: usr/local/www/diag_smart.php:325 usr/local/www/diag_smart.php:346 +#: usr/local/www/diag_system_pftop.php:137 usr/local/www/diag_smart.php:346 +#: usr/local/www/diag_system_pftop.php:137 +msgid "Long" +msgstr "ロング" + +#: usr/local/www/diag_smart.php:326 usr/local/www/diag_smart.php:347 +#: usr/local/www/diag_smart.php:347 +msgid "Conveyance (ATA Disks Only)" +msgstr "æ¬é€ï¼ˆ ATAディスクã®ã¿ï¼‰" + +#: usr/local/www/diag_smart.php:357 usr/local/www/diag_smart.php:378 +#: usr/local/www/diag_smart.php:378 +msgid "View Logs" +msgstr "ログを見る" + +#: usr/local/www/diag_smart.php:360 usr/local/www/diag_smart.php:381 +#: usr/local/www/diag_smart.php:381 +msgid "Log type" +msgstr "タイプをログã«è¨˜éŒ²ã™ã‚‹" + +#: usr/local/www/diag_smart.php:362 usr/local/www/diag_smart.php:383 +#: usr/local/www/diag_smart.php:383 +msgid "Error" +msgstr "エラー" + +#: usr/local/www/diag_smart.php:363 +msgid "Self Test" +msgstr "セルフテスト" + +#: usr/local/www/diag_smart.php:394 usr/local/www/diag_smart.php:415 +#: usr/local/www/diag_smart.php:415 +msgid "Abort tests" +msgstr "テストを中止" + +#: usr/local/www/diag_smart.php:413 usr/local/www/diag_smart.php:434 +#: usr/local/www/diag_smart.php:434 +msgid "Do you really want to abort the test?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ãƒ†ã‚¹ãƒˆã‚’中止ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/diag_smart.php:428 usr/local/www/diag_smart.php:449 +#: usr/local/www/diag_smart.php:449 +msgid "Back" +msgstr "ãƒãƒƒã‚¯" + +#: usr/local/www/diag_states_summary.php:154 +#: usr/local/www/diag_states_summary.php:143 +#: usr/local/www/diag_states_summary.php:145 +#: usr/local/www/diag_states_summary.php:145 +msgid "Src Ports" +msgstr "SRCãƒãƒ¼ãƒˆ" + +#: usr/local/www/diag_states_summary.php:155 +#: usr/local/www/diag_states_summary.php:144 +#: usr/local/www/diag_states_summary.php:146 +#: usr/local/www/diag_states_summary.php:146 +msgid "Dst Ports" +msgstr "DSTãƒãƒ¼ãƒˆ" + +#: usr/local/www/diag_states_summary.php:185 +#: usr/local/www/diag_states_summary.php:174 +#: usr/local/www/diag_states_summary.php:176 +#: usr/local/www/diag_states_summary.php:176 +msgid "State Table Summary" +msgstr "çŠ¶æ…‹è¡¨ã®æ¦‚è¦" + +#: usr/local/www/diag_states_summary.php:191 +#: usr/local/www/diag_states_summary.php:180 +#: usr/local/www/diag_states_summary.php:182 +#: usr/local/www/diag_states_summary.php:182 +msgid "By Source IP" +msgstr "é€ä¿¡å…ƒIPã«ã‚ˆã‚‹" + +#: usr/local/www/diag_states_summary.php:192 +#: usr/local/www/diag_states_summary.php:181 +#: usr/local/www/diag_states_summary.php:183 +#: usr/local/www/diag_states_summary.php:183 +msgid "By Destination IP" +msgstr "宛先IPã«ã‚ˆã‚‹" + +#: usr/local/www/diag_states_summary.php:193 +#: usr/local/www/diag_states_summary.php:182 +#: usr/local/www/diag_states_summary.php:184 +#: usr/local/www/diag_states_summary.php:184 +msgid "Total per IP" +msgstr "IPアドレスã”ã¨ã®åˆè¨ˆ" + +#: usr/local/www/diag_states_summary.php:194 +#: usr/local/www/diag_states_summary.php:183 +#: usr/local/www/diag_states_summary.php:185 +#: usr/local/www/diag_states_summary.php:185 +msgid "By IP Pair" +msgstr "IPペアã§" + +#: usr/local/www/diag_system_activity.php:46 +#: usr/local/www/diag_system_activity.php:46 +msgid "Diagnostics: System Activity" +msgstr "診断:システムアクティビティ" + +#: usr/local/www/diag_system_activity.php:101 +#: usr/local/www/diag_system_activity.php:101 +msgid "Gathering CPU activity, please wait..." +msgstr "CPUアクティビティをåŽé›†ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." + +#: usr/local/www/diag_system_pftop.php:45 +#: usr/local/www/diag_system_pftop.php:45 +msgid "Diagnostics: pfTop" +msgstr "診断: pfTop" + +#: usr/local/www/diag_system_pftop.php:51 +#: usr/local/www/diag_system_pftop.php:62 +#: usr/local/www/diag_system_pftop.php:103 +msgid "bytes" +msgstr "ãƒã‚¤ãƒˆ" + +#: usr/local/www/diag_system_pftop.php:99 +#: usr/local/www/diag_system_pftop.php:148 +#: usr/local/www/diag_system_pftop.php:148 +msgid "Sort type:" +msgstr "ソートã®ç¨®é¡žï¼š" + +#: usr/local/www/diag_system_pftop.php:102 +msgid "age" +msgstr "時代" + +#: usr/local/www/diag_system_pftop.php:104 +msgid "dest" +msgstr "DEST" + +#: usr/local/www/diag_system_pftop.php:105 +msgid "dport" +msgstr "DPORT" + +#: usr/local/www/diag_system_pftop.php:106 +msgid "exp" +msgstr "EXP" + +#: usr/local/www/diag_system_pftop.php:108 +msgid "peak" +msgstr "ピーク" + +#: usr/local/www/diag_system_pftop.php:109 +msgid "pkt" +msgstr "PKT" + +#: usr/local/www/diag_system_pftop.php:110 +#: usr/local/www/status_interfaces.php:365 +#: usr/local/www/status_interfaces.php:462 +#: usr/local/www/status_interfaces.php:465 +#: usr/local/www/status_interfaces.php:465 +msgid "rate" +msgstr "率" + +#: usr/local/www/diag_system_pftop.php:111 +msgid "size" +msgstr "サイズ" + +#: usr/local/www/diag_system_pftop.php:112 +msgid "sport" +msgstr "スãƒãƒ¼ãƒ„" + +#: usr/local/www/diag_system_pftop.php:113 +msgid "src" +msgstr "SRC" + +#: usr/local/www/diag_system_pftop.php:126 +#: usr/local/www/diag_system_pftop.php:187 +#: usr/local/www/diag_system_pftop.php:187 +msgid "Gathering pfTOP activity, please wait..." +msgstr "pfTOPアクティビティをåŽé›†ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." + +#: usr/local/www/license.php:45 usr/local/www/license.php:45 +msgid "License" +msgstr "ライセンス" + +#: usr/local/www/license.php:47 usr/local/www/license.php:47 +msgid "is Copyright" +msgstr "著作権ã¯ã€" + +#: usr/local/www/license.php:47 usr/local/www/firewall_rules_edit.php:1585 +#: usr/local/www/firewall_rules_edit.php:1593 +#: usr/local/www/firewall_nat_edit.php:869 +#: usr/local/www/firewall_nat_edit.php:877 +#: usr/local/www/firewall_nat_out_edit.php:684 +#: usr/local/www/firewall_nat_out_edit.php:692 +#: usr/local/www/firewall_rules_edit.php:1596 +#: usr/local/www/firewall_rules_edit.php:1604 +#: usr/local/www/firewall_nat_edit.php:870 +#: usr/local/www/firewall_nat_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:1596 +#: usr/local/www/firewall_rules_edit.php:1604 +#: usr/local/www/firewall_nat_edit.php:870 +#: usr/local/www/firewall_nat_edit.php:878 usr/local/www/license.php:47 +#: usr/local/www/firewall_nat_out_edit.php:684 +#: usr/local/www/firewall_nat_out_edit.php:692 +msgid "by" +msgstr "ãƒã‚¤" + +#: usr/local/www/license.php:48 usr/local/www/license.php:52 +#: usr/local/www/license.php:48 usr/local/www/license.php:52 +msgid "All rights reserved" +msgstr "無断複写·転載をç¦ã˜ã¾ã™" + +#: usr/local/www/license.php:50 usr/local/www/license.php:50 +msgid "m0n0wall is Copyright " +msgstr "m0n0wallã®è‘—作権ã§ã™" + +#: usr/local/www/license.php:50 usr/local/www/license.php:50 +msgid "2002-2007 by Manuel Kasper" +msgstr "マヌエル·カスパーã«ã‚ˆã‚‹2002-2007" + +#: usr/local/www/license.php:53 usr/local/www/license.php:53 +msgid "Redistribution and use in source and binary forms, with or without" +msgstr "å†é…å¸ƒã®æœ‰ç„¡ã«ã‹ã‹ã‚らãšã€ã‚½ãƒ¼ã‚¹ãŠã‚ˆã³ãƒã‚¤ãƒŠãƒªå½¢å¼ã§ã®ä½¿ç”¨" + +#: usr/local/www/license.php:54 usr/local/www/license.php:54 +msgid "" +"modification, are permitted provided that the following conditions are met" +msgstr "「修正ã¯ã€æ¬¡ã®æ¡ä»¶ã‚’満ãŸã™å ´åˆã«è¨±å¯ã•れ" + +#: usr/local/www/license.php:57 usr/local/www/license.php:57 +msgid "" +"1. Redistributions of source code must retain the above copyright notice," +msgstr "「 1 。ソースコードã®å†é…布ã«ã¯ã€ä¸Šè¨˜ã®è‘—ä½œæ¨©è¡¨ç¤ºã‚’ä¿æŒã—ãªã‘れã°ãªã‚‰ãªã„ã€" + +#: usr/local/www/license.php:59 usr/local/www/license.php:59 +msgid "this list of conditions and the following disclaimer" +msgstr "ã“ã®æ¡ä»¶ãƒªã‚¹ãƒˆã€ãŠã‚ˆã³ä»¥ä¸‹ã®å…責" + +#: usr/local/www/license.php:61 usr/local/www/license.php:61 +msgid "2. Redistributions in binary form must reproduce the above copyright" +msgstr "2 。ãƒã‚¤ãƒŠãƒªå½¢å¼ã§å†é…布ã™ã‚‹å ´åˆã¯ã€ä¸Šè¨˜ã®è‘—作権を複写ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: usr/local/www/license.php:62 usr/local/www/license.php:62 +msgid "notice, this list of conditions and the following disclaimer in the" +msgstr "ã€ã“ã®æ¡ä»¶ãƒªã‚¹ãƒˆã€ãŠã‚ˆã³ä¸‹è¨˜ã®å…è²¬äº‹é …ã«æ°—付ã" + +#: usr/local/www/license.php:64 usr/local/www/license.php:64 +msgid "documentation and/or other materials provided with the distribution." +msgstr "ドキュメントãŠã‚ˆã³/ã¾ãŸã¯é…å¸ƒã§æä¾›ã•れる他ã®ç‰©è³ªã€‚" + +#: usr/local/www/license.php:66 usr/local/www/license.php:66 +msgid "THIS SOFTWARE IS PROVIDED " +msgstr "æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ãŒæä¾›ã•れ" + +#: usr/local/www/license.php:66 usr/local/www/license.php:66 +msgid "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES," +msgstr "ç¾çжã®ã¾ã¾'' ã€ã„ã‹ãªã‚‹æ˜Žç¤ºã¾ãŸã¯é»™ç¤ºã®ä¿è¨¼ã€" + +#: usr/local/www/license.php:68 usr/local/www/license.php:68 +msgid "" +"INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY" +msgstr "ã€Œä¸€åˆ‡ã®æ˜Žç¤ºã€ã‚’å«ã‚€ãŒã€ã“れらã«é™å®šã•れãªã„" + +#: usr/local/www/license.php:69 usr/local/www/license.php:69 +msgid "" +"AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE" +msgstr "特定ã®ç›®çš„ã«å¯¾ã™ã‚‹"ãŠã‚ˆã³é©åˆã¯ã€ã„ã‹ãªã‚‹å ´åˆã‚‚。放棄ã•れSHALL" + +#: usr/local/www/license.php:71 usr/local/www/license.php:71 +msgid "" +"AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY," +msgstr "「著者ã¯ã„ã‹ãªã‚‹ç›´æŽ¥çš„ã€é–“接的ã€å¶ç™ºçš„ã«å¯¾ã—ã¦ã€ä¸€åˆ‡è²¬ä»»ã‚’è² ã‚ã€ç‰¹æ®Šã€æ‡²æˆ’çš„ã€" + +#: usr/local/www/license.php:73 usr/local/www/license.php:73 +msgid "OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF" +msgstr "ã¾ãŸã¯ãã®ä»–ã‚’å«ã‚€ã§ã¯ãªãã€å¿…ç„¶çš„ãªæå®³ã¯ï¼ˆTO ã€èª¿é”ã®é™ã‚‰ã‚ŒãŸ" + +#: usr/local/www/license.php:75 usr/local/www/license.php:75 +msgid "" +"SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS" +msgstr "「代替商å“ã¾ãŸã¯ã‚µãƒ¼ãƒ“ス;ã®å–ªå¤±ã€ãƒ‡ãƒ¼ã‚¿ã‚„利益ã¾ãŸã¯äº‹æ¥­" + +#: usr/local/www/license.php:77 usr/local/www/license.php:77 +msgid "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN" +msgstr "中断ã¯ï¼‰ã„ã‹ãªã‚‹è²¬ä»»ã€ä¸æ³•INã®ä¸Šã®ä»»æ„ã®ç†è«–" + +#: usr/local/www/license.php:79 usr/local/www/license.php:79 +msgid "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)" +msgstr "契約〠(éŽå¤±ã‚’å«ã‚€ã¾ãŸã¯ãã®ä»–)厳格責任ã€ã¾ãŸã¯ä¸æ³•行為" + +#: usr/local/www/license.php:80 usr/local/www/license.php:80 +msgid "" +"ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE" +msgstr ""ã«ã¤ã„ã¦ã®é€šå‘ŠãŒã‚ã£ãŸå ´åˆã§ã‚‚ã€æœ¬ã‚½ãƒ•トウェアã®ä½¿ç”¨ã«ã©ã®ã‚ˆã†ãªæ–¹æ³•ã§èµ·å› " + +#: usr/local/www/license.php:82 usr/local/www/license.php:82 +msgid "POSSIBILITY OF SUCH DAMAGE" +msgstr "ãã®ã‚ˆã†ãªæå®³ã®å¯èƒ½æ€§ã«ã¤ã„ã¦" + +#: usr/local/www/license.php:84 usr/local/www/license.php:84 +msgid "The following persons have contributed code to m0n0wall" +msgstr "次ã®äººã¯m0n0wallã®ã«ã‚³ãƒ¼ãƒ‰ã‚’貢献ã—ã¦ã„ã‚‹" + +#: usr/local/www/license.php:86 usr/local/www/license.php:86 +msgid "Diagnostics: Ping function; WLAN channel auto-select; DNS forwarder" +msgstr "診断: Pingã®æ©Ÿèƒ½ã€ç„¡ç·šLANãƒãƒ£ãƒãƒ«ã‚’è‡ªå‹•é¸æŠžã€ DNSフォワーダ" + +#: usr/local/www/license.php:90 usr/local/www/license.php:90 +msgid "Timezone and NTP client support" +msgstr "タイムゾーンã¨NTPクライアントã®ã‚µãƒãƒ¼ãƒˆ" + +#: usr/local/www/license.php:94 usr/local/www/license.php:94 +msgid "" +"Remote syslog'ing; some code bits for DHCP server on optional interfaces" +msgstr "「リモートsyslog'ing ã€ã‚ªãƒ—ションã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã®DHCPサーãƒã®ãŸã‚ã®ã„ãã¤ã‹ã®ã‚³ãƒ¼ãƒ‰ãƒ“ット" + +#: usr/local/www/license.php:98 usr/local/www/license.php:98 +msgid "" +"Idea/code bits for encrypted webConfigurator passwords; minimalized SNMP " +"agent" +msgstr "「暗å·åŒ–webConfiguratorパスワードã®ã‚¢ã‚¤ãƒ‡ã‚¢/コードビット〠minimalized SNMP ã€ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆ" + +#: usr/local/www/license.php:102 usr/local/www/license.php:102 +msgid "Advanced outbound NAT: destination selection" +msgstr "高度ãªã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NAT :é€ä¿¡å…ˆã®é¸æŠž" + +#: usr/local/www/license.php:106 usr/local/www/license.php:106 +msgid "Filtering bridge patches " +msgstr "フィルタリングブリッジパッãƒ" + +#: usr/local/www/license.php:110 usr/local/www/license.php:110 +msgid "" +"Filter rule patches (ordering, block/pass, disabled); better status page;" +msgstr "「フィルタルールã®ãƒ‘ッãƒï¼ˆã‚ªãƒ¼ãƒ€ãƒªãƒ³ã‚°ã€ãƒ–ロック/パスã€ç„¡åŠ¹ï¼‰ ã€å„ªã‚ŒãŸã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸;" + +#: usr/local/www/license.php:112 usr/local/www/license.php:112 +msgid "webConfigurator assign network ports page " +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒˆã®ãƒšãƒ¼ã‚¸ã‚’割り当ã¦webConfigurator" + +#: usr/local/www/license.php:115 usr/local/www/license.php:115 +msgid "enhanced " +msgstr "強化ã•れãŸ" + +#: usr/local/www/license.php:115 usr/local/www/license.php:115 +msgid "execute command" +msgstr "コマンドを実行ã™ã‚‹" + +#: usr/local/www/license.php:116 usr/local/www/license.php:116 +msgid " page" +msgstr "ページ" + +#: usr/local/www/license.php:119 usr/local/www/license.php:119 +msgid "DHCP client: send hostname patch" +msgstr "DHCPクライアント:ホストåパッãƒã‚’é€ã‚‹" + +#: usr/local/www/license.php:122 usr/local/www/license.php:122 +msgid "DHCP lease list page" +msgstr "DHCPリースリストページ" + +#: usr/local/www/license.php:125 usr/local/www/license.php:125 +msgid "type filter rules; dial-on-demand" +msgstr "フィルタルールを入力ã—ã€ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰" + +#: usr/local/www/license.php:128 usr/local/www/license.php:128 +msgid "SVG-based traffic grapher" +msgstr "SVGベースã®ãƒˆãƒ©ãƒ•ィックグラファ" + +#: usr/local/www/license.php:131 usr/local/www/license.php:131 +msgid "per-user IP address assignments for PPTP VPN" +msgstr "PPTP VPN用ã®ãƒ¦ãƒ¼ã‚¶ã”ã¨ã®IPアドレスã®å‰²ã‚Šå½“ã¦" + +#: usr/local/www/license.php:134 usr/local/www/license.php:134 +msgid "NAT on optional interfaces" +msgstr "オプションã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã®NAT" + +#: usr/local/www/license.php:137 usr/local/www/license.php:137 +msgid "captive portal: pass-through MAC/IP addresses, RADIUS authentication" +msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šãƒ‘ススルーã®MAC / IPアドレス〠RADIUSèªè¨¼" + +#: usr/local/www/license.php:137 usr/local/www/license.php:137 +msgid "accounting;" +msgstr "会計;" + +#: usr/local/www/license.php:138 usr/local/www/license.php:138 +msgid "HTTP server concurrency limit" +msgstr "HTTPサーãƒãƒ¼ã®åŒæ™‚実行ã®åˆ¶é™" + +#: usr/local/www/license.php:141 usr/local/www/license.php:141 +msgid "traffic shaper TOS matching; magic shaper; DHCP deny unknown clients;" +msgstr "トラフィックシェーパã®ToSマッãƒãƒ³ã‚°ã€ãƒžã‚¸ãƒƒã‚¯ã‚·ã‚§ã‚¤ãƒ‘ー〠DHCPãŒæœªçŸ¥ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’å¦å®š;" + +#: usr/local/www/license.php:142 usr/local/www/license.php:142 +msgid "IPsec user FQDNs; DHCP relay" +msgstr "IPsecã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®FQDN 〠DHCPリレー" + +#: usr/local/www/license.php:145 usr/local/www/license.php:145 +msgid "IDE hard disk standby" +msgstr "IDEãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã®ã‚¹ã‚¿ãƒ³ãƒã‚¤" + +#: usr/local/www/license.php:148 usr/local/www/license.php:148 +msgid "CPU/memory usage display" +msgstr "CPU /メモリ使用é‡è¡¨ç¤º" + +#: usr/local/www/license.php:151 usr/local/www/license.php:151 +msgid "OpenVPN support" +msgstr "OpenVPNã®ã‚µãƒãƒ¼ãƒˆ" + +#: usr/local/www/license.php:153 usr/local/www/license.php:153 +msgid "is based upon/includes various free software packages, listed below." +msgstr "/ä¸‹è¨˜ã®æ§˜ã€…ãªç„¡æ–™ã®ã‚½ãƒ•トウェアパッケージãŒå«ã¾ã‚Œã¦åŸºã¥ã„ã¦ã„る。" + +#: usr/local/www/license.php:155 usr/local/www/license.php:155 +#, php-format +msgid "" +"The author of %s would like to thank the authors of these software packages " +"for their efforts" +msgstr "彼らã®åŠªåŠ›ã¯ã€ã€Œ %sã®è‘—者ã¯ã“れらã®ã‚½ãƒ•トウェアパッケージã®ä½œè€…ã«æ„Ÿè¬ã—ãŸã„ã¨æ€ã„ã¾ã™ã€" + +#: usr/local/www/license.php:158 usr/local/www/license.php:161 +#: usr/local/www/license.php:164 usr/local/www/license.php:168 +#: usr/local/www/license.php:174 usr/local/www/license.php:178 +#: usr/local/www/license.php:181 usr/local/www/license.php:184 +#: usr/local/www/license.php:187 usr/local/www/license.php:191 +#: usr/local/www/license.php:192 usr/local/www/license.php:194 +#: usr/local/www/license.php:200 usr/local/www/license.php:201 +#: usr/local/www/license.php:204 usr/local/www/license.php:211 +#: usr/local/www/license.php:169 usr/local/www/license.php:158 +#: usr/local/www/license.php:161 usr/local/www/license.php:164 +#: usr/local/www/license.php:168 usr/local/www/license.php:169 +#: usr/local/www/license.php:174 usr/local/www/license.php:178 +#: usr/local/www/license.php:181 usr/local/www/license.php:184 +#: usr/local/www/license.php:187 usr/local/www/license.php:191 +#: usr/local/www/license.php:192 usr/local/www/license.php:194 +#: usr/local/www/license.php:200 usr/local/www/license.php:201 +#: usr/local/www/license.php:204 usr/local/www/license.php:211 +msgid "Copyright" +msgstr "著作権" + +#: usr/local/www/license.php:158 +msgid " 1994-2003 FreeBSD, Inc. All rights reserved" +msgstr "1994-2003ã®FreeBSD ã€æ ªå¼ä¼šç¤¾ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ä¿æœ‰" + +#: usr/local/www/license.php:160 usr/local/www/license.php:160 +msgid "This product includes PHP, freely available from" +msgstr "本製å“ã¯ã€ã‹ã‚‰ç„¡æ–™ã§å…¥æ‰‹PHPã‚’å«ã¿" + +#: usr/local/www/license.php:161 +msgid "1999 - 2003 The PHP Group. All rights reserved" +msgstr "1999 - 2003ザ· PHPã®ã‚°ãƒ«ãƒ¼ãƒ—。無断複写·転載をç¦ã˜ã¾ã™" + +#: usr/local/www/license.php:163 usr/local/www/license.php:163 +msgid "LightTPD" +msgstr "lighttpdã®" + +#: usr/local/www/license.php:164 +msgid " 2004 by Jan Kneschke " +msgstr "2004ヤンKneschkeã«ã‚ˆã‚‹" + +#: usr/local/www/license.php:165 usr/local/www/license.php:175 +#: usr/local/www/license.php:165 usr/local/www/license.php:175 +msgid "All rights reserved." +msgstr "無断複写·転載をç¦ã˜ã¾ã™ã€‚" + +#: usr/local/www/license.php:167 usr/local/www/license.php:167 +msgid "ISC DHCP server " +msgstr "ISC DHCPサーãƒãƒ¼" + +#: usr/local/www/license.php:168 +msgid "1996-2003 Internet Software Consortium. All rights reserved." +msgstr "1996-2003 Internet Software Consortiumã®ã€‚無断複写·転載をç¦ã˜ã¾ã™ã€‚" + +#: usr/local/www/license.php:173 usr/local/www/license.php:173 +msgid "MPD - Multi-link PPP daemon for FreeBSD" +msgstr "MPD - FreeBSD用ã®ãƒžãƒ«ãƒãƒªãƒ³ã‚¯PPPデーモン" + +#: usr/local/www/license.php:177 usr/local/www/license.php:177 +msgid "Circular log support for FreeBSD syslogd " +msgstr "FreeBSDã®syslogdã®ãŸã‚ã®å¾ªç’°ãƒ­ã‚°ã®ã‚µãƒãƒ¼ãƒˆ" + +#: usr/local/www/license.php:180 usr/local/www/license.php:180 +msgid "Dnsmasq - a DNS forwarder for NAT firewalls" +msgstr "DNSMASQ - NATファイアウォールã®DNSフォワーダ" + +#: usr/local/www/license.php:183 usr/local/www/license.php:183 +msgid "Racoon" +msgstr "ラクーン" + +#: usr/local/www/license.php:184 usr/local/www/license.php:184 +msgid "1995-2002 WIDE Project. All rights reserved." +msgstr "1995-2002 WIDEプロジェクト。無断複写·転載をç¦ã˜ã¾ã™ã€‚" + +#: usr/local/www/license.php:186 usr/local/www/license.php:186 +msgid "msntp" +msgstr "msntp" + +#: usr/local/www/license.php:187 usr/local/www/license.php:187 +msgid "" +" 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. All rights " +"reserved." +msgstr "「 1996年〠1997年〠2000年メキシコマクラーレンã€ã‚±ãƒ³ãƒ–リッジ大学。ã™ã¹ã¦ã®è‘—作権ã¯ã€ 「予約。" + +#: usr/local/www/license.php:190 usr/local/www/license.php:190 +msgid "UCD-SNMP" +msgstr "UCD -SNMP" + +#: usr/local/www/license.php:191 usr/local/www/license.php:191 +msgid "1989, 1991, 1992 by Carnegie Mellon University." +msgstr "1989 〠1991 〠1992カーãƒã‚®ãƒ¼ãƒ¡ãƒ­ãƒ³å¤§å­¦ã«ã‚ˆã‚‹ã€‚" + +#: usr/local/www/license.php:192 usr/local/www/license.php:192 +msgid "" +"1996, 1998-2000 The Regents of the University of California. All rights " +"reserved" +msgstr "「 1996å¹´ã€ã‚«ãƒªãƒ•ォルニア大学ã®1998å¹´ã‹ã‚‰2000年ジェンツ。ã™ã¹ã¦ã®æ¨©åˆ©ã‚’「予約" + +#: usr/local/www/license.php:194 usr/local/www/license.php:194 +msgid "2001-2002, Network Associates Technology, Inc. All rights reserved." +msgstr "2001-2002 ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ã‚½ã‚·ã‚¨ã‚¤ãƒ„テクノロジー株å¼ä¼šç¤¾ã™ã¹ã¦ã®ç‰ˆæ¨©ã‚’ä¿æœ‰ã—ã¾ã™ã€‚" + +#: usr/local/www/license.php:196 usr/local/www/license.php:196 +msgid "Portions of this code are copyright" +msgstr "ã“ã®ã‚³ãƒ¼ãƒ‰ã®ä¸€éƒ¨ã¯ã€è‘—作権ã§ã‚ã‚‹" + +#: usr/local/www/license.php:196 usr/local/www/license.php:196 +msgid "2001-2002, Cambridge Broadband Ltd. All rights reserved." +msgstr "2001-2002 ã€ã‚±ãƒ³ãƒ–リッジ·ブロードãƒãƒ³ãƒ‰ï¼ˆæ ªï¼‰ã™ã¹ã¦ã®ç‰ˆæ¨©ã‚’ä¿æœ‰ã—ã¾ã™ã€‚" + +#: usr/local/www/license.php:199 usr/local/www/license.php:199 +msgid "choparp" +msgstr "choparp" + +#: usr/local/www/license.php:203 usr/local/www/license.php:203 +msgid "BPALogin" +msgstr "BPALogin" + +#: usr/local/www/license.php:203 usr/local/www/license.php:203 +msgid "lightweight portable BIDS2 login client" +msgstr "軽é‡ã®ãƒãƒ¼ã‚¿ãƒ–ルBIDS2ã®ãƒ­ã‚°ã‚¤ãƒ³ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆ" + +#: usr/local/www/license.php:204 usr/local/www/license.php:204 +msgid " 2001-3 Shane Hyde, and others." +msgstr "2001-3シェーンãƒã‚¤ãƒ‰ãªã©ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/license.php:206 usr/local/www/license.php:206 +msgid "php-radius" +msgstr "PHPåŠå¾„" + +#: usr/local/www/license.php:207 usr/local/www/license.php:207 +msgid "Copyright 2000, 2001, 2002 by Edwin Groothuis. All rights reserved." +msgstr "エドウィンGroothuis著作権2000 〠2001 〠2002 。無断複写·転載をç¦ã˜ã¾ã™ã€‚" + +#: usr/local/www/license.php:208 usr/local/www/license.php:208 +msgid "This product includes software developed by Edwin Groothuis." +msgstr "ã“ã®è£½å“ã¯ã€ã‚¨ãƒ‰ã‚¦ã‚£ãƒ³GroothuisãŒé–‹ç™ºã—ãŸã‚½ãƒ•トウェアãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/license.php:210 usr/local/www/license.php:210 +msgid "wol" +msgstr "WOL" + +#: usr/local/www/license.php:214 usr/local/www/license.php:214 +msgid "Copyright (C) 2002-2005 OpenVPN Solutions LLC " +msgstr "COPYRIGHT(C ) 2002ã‹ã‚‰2005 OpenVPNã®ã‚½ãƒªãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³LLC" + +#: usr/local/www/load_balancer_pool.php:72 +#: usr/local/www/load_balancer_relay_protocol.php:71 +#: usr/local/www/load_balancer_relay_protocol.php:71 +#: usr/local/www/load_balancer_pool.php:72 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"virtual server." +msgstr "仮想サーãƒãƒ¼ã€ã¨ã¯ã€ã¾ã å°‘ãªãã¨ã‚‚1ã«ã‚ˆã£ã¦å‚ç…§ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/load_balancer_pool.php:111 +#: usr/local/www/status_lb_pool.php:113 +#: usr/local/www/load_balancer_pool.php:109 +#: usr/local/www/status_lb_pool.php:113 +#: usr/local/www/load_balancer_pool.php:109 +#, php-format +msgid "" +"The load balancer configuration has been changed%sYou must apply the changes " +"in order for them to take effect." +msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚ã«ã€Œãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã®è¨­å®šã¯changed%sYouãŒå¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã—ãŸã€ 。" + +#: usr/local/www/load_balancer_pool.php:133 +#: usr/local/www/status_lb_pool.php:132 usr/local/www/status_lb_vs.php:79 +#: usr/local/www/system_authservers.php:424 +#: usr/local/www/system_groupmanager.php:243 +#: usr/local/www/system_groupmanager_addprivs.php:171 +#: usr/local/www/system_usermanager.php:443 +#: usr/local/www/system_usermanager_addprivs.php:170 +#: usr/local/www/system_usermanager_settings.php:116 +#: usr/local/www/system_usermanager.php:441 +#: usr/local/www/system_groupmanager_addprivs.php:169 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/load_balancer_pool.php:132 +#: usr/local/www/system_authservers.php:429 +#: usr/local/www/system_authservers.php:436 +#: usr/local/www/system_usermanager_settings.php:118 +#: usr/local/www/system_groupmanager.php:243 +#: usr/local/www/system_usermanager_addprivs.php:170 +#: usr/local/www/status_lb_pool.php:132 +#: usr/local/www/load_balancer_pool.php:132 +#: usr/local/www/system_authservers.php:436 +#: usr/local/www/system_groupmanager_addprivs.php:169 +#: usr/local/www/system_usermanager_settings.php:118 +#: usr/local/www/system_usermanager.php:441 usr/local/www/status_lb_vs.php:79 +msgid "Servers" +msgstr "サーãƒ" + +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:223 +#: usr/local/www/status_gateways.php:74 usr/local/www/status_lb_pool.php:133 +#: usr/local/www/load_balancer_pool_edit.php:240 +#: usr/local/www/load_balancer_pool.php:136 +#: usr/local/www/status_gateways.php:75 +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/status_lb_pool.php:133 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/status_gateways.php:75 +msgid "Monitor" +msgstr "モニター" + +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/load_balancer_pool.php:150 +#: usr/local/www/load_balancer_pool.php:148 +#: usr/local/www/load_balancer_pool.php:148 +#, php-format +msgid "" +"The Load Balancer in %s 2.0 is for server load balancing, not Multi-WAN. For " +"load balancing or failover for multiple WANs, use " +msgstr "「 %s 2.0ã®ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã¯ã€ã‚µãƒ¼ãƒãƒ¼ã®è² è·åˆ†æ•£ã®ãŸã‚ã§ã‚りã€ã§ã¯ãªã„複数WAN 。ã¯ã€ã€Œãƒ­ãƒ¼ãƒ‰Â·ãƒãƒ©ãƒ³ã‚·ãƒ³ã‚°ã‚„フェイルオーãƒãƒ¼ã€è¤‡æ•°ã®WANãŸã‚ã€ä½¿ç”¨" + +#: usr/local/www/load_balancer_pool.php:150 +#: usr/local/www/status_gateway_groups.php:48 +#: usr/local/www/status_gateway_groups.php:52 +#: usr/local/www/status_gateways.php:63 +#: usr/local/www/system_gateway_groups.php:52 +#: usr/local/www/system_gateway_groups.php:88 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/load_balancer_pool.php:151 +#: usr/local/www/system_gateway_groups.php:89 +#: usr/local/www/status_gateways.php:64 +#: usr/local/www/status_gateway_groups.php:66 +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/system_gateway_groups.php:53 +#: usr/local/www/system_gateway_groups.php:98 +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/status_gateway_groups.php:48 +#: usr/local/www/status_gateway_groups.php:52 +#: usr/local/www/status_gateway_groups.php:66 +#: usr/local/www/status_gateways.php:64 +#: usr/local/www/system_gateway_groups.php:53 +#: usr/local/www/system_gateway_groups.php:98 +msgid "Gateway Groups" +msgstr "ゲートウェイグループ" + +#: usr/local/www/pkg.php:358 usr/local/www/pkg.php:456 +#: usr/local/www/pkg.php:456 +msgid "Do you really want to delete this item?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/status_wireless.php:83 usr/local/www/status_wireless.php:84 +#: usr/local/www/status_wireless.php:84 +msgid "" +"Rescan has been initiated in the background. Refresh this page in 10 seconds " +"to see the results." +msgstr "「å†ã‚¹ã‚­ãƒ£ãƒ³ã¯ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§é–‹å§‹ã•れãŸã€‚ 10ç§’ã§ã“ã®ãƒšãƒ¼ã‚¸ã‚’æ›´æ–°ã—ã€ã€Œçµæžœã‚’確èªã™ã‚‹ã€‚" + +#: usr/local/www/status_wireless.php:97 usr/local/www/status_wireless.php:93 +#: usr/local/www/status_wireless.php:94 usr/local/www/status_wireless.php:94 +msgid "Nearby access points or ad-hoc peers" +msgstr "è¿‘ãã®ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆã‚„アドホックピア" + +#: usr/local/www/status_wireless.php:143 usr/local/www/status_wireless.php:140 +#: usr/local/www/status_wireless.php:141 usr/local/www/status_wireless.php:141 +msgid "Associated or ad-hoc peers" +msgstr "関連ã™ã‚‹ã‹ã€ã¾ãŸã¯ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ãƒ”ã‚¢" + +#: usr/local/www/system.php:118 usr/local/www/system.php:119 +#: usr/local/www/system.php:112 usr/local/www/system.php:112 +msgid "The hostname may only contain the characters a-z, 0-9 and '-'." +msgstr "' -'ホストåã¯0-9ã¨ã€ AZã®æ–‡å­—ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/system.php:121 usr/local/www/system.php:122 +#: usr/local/www/system.php:115 usr/local/www/system.php:115 +msgid "The domain may only contain the characters a-z, 0-9, '-' and '.'." +msgstr "ã¨' -'ドメインã¯ã€ 0〜9ã€A〜Zã®æ–‡å­—ã‚’å«ã‚€ã“ã¨ãŒã§ãã‚‹'。' 。" + +#: usr/local/www/system.php:131 +msgid "'." +msgstr "' 。" + +#: usr/local/www/system.php:137 usr/local/www/system.php:143 +#: usr/local/www/system.php:136 usr/local/www/system.php:136 +msgid "A valid TCP/IP port must be specified for the webConfigurator port." +msgstr "有効ãªTCP / IPãƒãƒ¼ãƒˆã¯webConfiguratorãƒãƒ¼ãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system.php:148 usr/local/www/system.php:154 +#: usr/local/www/system.php:147 usr/local/www/system.php:147 +#, php-format +msgid "" +"You can not assign a gateway to DNS '%s' server which is on a directly " +"connected network." +msgstr "接続ã•れãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ã¯ã€ç›´æŽ¥ä¸Šã«ã‚りã€DNS' %s'サーãƒãƒ¼ã¸ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/system.php:157 usr/local/www/system.php:163 +#: usr/local/www/system.php:156 usr/local/www/system.php:156 +msgid "" +"The time update interval must be either 0 (disabled) or between 6 and 1440." +msgstr "ã€Œæ™‚é–“ã®æ›´æ–°é–“éš”ã¯ã€ 0 (無効)ã¾ãŸã¯6ã¨1440ã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system.php:161 usr/local/www/system.php:167 +#: usr/local/www/system.php:160 usr/local/www/system.php:160 +msgid "" +"A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'." +msgstr "ã¨' -' "NTPタイムサーãƒåã¯ã€ 0〜9ã€A〜Zã®æ–‡å­—ã‚’å«ã‚€ã“ã¨ãŒã§ãã‚‹'。' 。" + +#: usr/local/www/system.php:231 usr/local/www/fbegin.inc:85 +#: usr/local/www/fbegin.inc:101 usr/local/www/system.php:242 +#: usr/local/www/fbegin.inc:110 usr/local/www/system.php:235 +#: usr/local/www/fbegin.inc:102 usr/local/www/system.php:235 +#: usr/local/www/fbegin.inc:102 +msgid "General Setup" +msgstr "一般的ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—" + +#: usr/local/www/system.php:258 usr/local/www/system.php:269 +#: usr/local/www/system.php:262 usr/local/www/system.php:262 +msgid "Name of the firewall host, without domain part" +msgstr "ドメイン部分ãªã—ã§ã€ãƒ•ァイアウォールã®ãƒ›ã‚¹ãƒˆã®åå‰" + +#: usr/local/www/system.php:269 usr/local/www/system.php:280 +#: usr/local/www/system.php:273 usr/local/www/system.php:273 +msgid "" +"Do not use 'local' as a domain name. It will cause local hosts running mDNS " +"(avahi, bonjour, etc.) to be unable to resolve local hosts not running mDNS." +msgstr "「ドメインåã¨ã—ã¦ã€Œãƒ­ãƒ¼ã‚«ãƒ«ã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。ã“れã¯ã€ mDNSã®ã‚’実行ã—ã¦ã„るローカルホストã®åŽŸå› ã¨ãªã‚Šã¾ã™ã€ã®mDNSを実行ã—ã¦ã„ãªã„ローカルホストを解決ã™ã‚‹ã“ã¨ãŒã§ããªã„よã†ã«ï¼ˆãªã©ã€ãƒœãƒ³ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ avahiã®ï¼‰ 。" + +#: usr/local/www/system.php:271 usr/local/www/system.php:282 +#: usr/local/www/system.php:275 usr/local/www/system.php:275 +msgid "mycorp.com, home, office, private, etc." +msgstr "mycorp.com ã€å®¶åº­ã€ã‚ªãƒ•ィスã€ãƒ—ライベートãªã©" + +#: usr/local/www/system.php:276 usr/local/www/services_dhcp.php:647 +#: usr/local/www/vpn_pppoe_edit.php:451 usr/local/www/services_dhcpv6.php:590 +#: usr/local/www/services_dhcp.php:660 usr/local/www/system.php:287 +#: usr/local/www/services_dhcpv6.php:667 usr/local/www/vpn_pppoe_edit.php:452 +#: usr/local/www/services_router_advertisements.php:372 +#: usr/local/www/services_dhcp.php:836 usr/local/www/system.php:280 +#: usr/local/www/services_dhcpv6.php:598 +#: usr/local/www/services_dhcp_edit.php:402 +#: usr/local/www/vpn_pppoe_edit.php:455 usr/local/www/services_dhcp.php:850 +#: usr/local/www/services_dhcpv6.php:615 +#: usr/local/www/services_router_advertisements.php:367 +#: usr/local/www/services_dhcp.php:870 +#: usr/local/www/services_router_advertisements.php:367 +#: usr/local/www/system.php:280 usr/local/www/services_dhcp_edit.php:402 +#: usr/local/www/vpn_pppoe_edit.php:455 usr/local/www/services_dhcp.php:870 +#: usr/local/www/services_dhcpv6.php:615 +msgid "DNS servers" +msgstr "DNSサーãƒ" + +#: usr/local/www/system.php:281 usr/local/www/system.php:292 +#: usr/local/www/system.php:285 usr/local/www/system.php:285 +msgid "DNS Server" +msgstr "DNSサーãƒ" + +#: usr/local/www/system.php:283 usr/local/www/system.php:294 +#: usr/local/www/system.php:287 usr/local/www/system.php:287 +msgid "Use gateway" +msgstr "ゲートウェイを使用" + +#: usr/local/www/system.php:331 usr/local/www/system.php:342 +#: usr/local/www/system.php:335 usr/local/www/system.php:334 +#: usr/local/www/system.php:334 +msgid "" +"Enter IP addresses to by used by the system for DNS resolution.These are " +"also used for the DHCP service, DNS forwarder and for PPTP VPN clients." +msgstr "「DNS resolution.TheseãŸã‚ã®ã‚·ã‚¹ãƒ†ãƒ ãŒä½¿ç”¨ã™ã‚‹ã“ã¨ã§ã€IPアドレスを入力ã—ã¦ã¯ã—ã¦ã„ã‚‹ã€ã¾ãŸã€ DHCPサービス〠DNSフォワーダã®ãŸã‚ã«ã¨PPTPã®VPNクライアントã§ä½¿ç”¨ã™ã‚‹ã€‚" + +#: usr/local/www/system.php:336 usr/local/www/system.php:347 +#: usr/local/www/system.php:340 usr/local/www/system.php:339 +#: usr/local/www/system.php:339 +msgid "" +"In addition, optionally select the gateway for each DNS server. When using " +"multiple WAN connections there should be at least one unique DNS server per " +"gateway." +msgstr "「ã•らã«ã€å¿…è¦ã«å¿œã˜ã¦ã€å„DNSサーãƒã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã—ã¾ã™ã€‚使用ã™ã‚‹å ´åˆã¯ã€ã€Œã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã€ã”ã¨ã«å°‘ãªãã¨ã‚‚1ã¤ã®å›ºæœ‰ã®DNSサーãƒãŒã‚ã‚‹ã¹ã複数ã®WAN接続を。" + +#: usr/local/www/system.php:343 usr/local/www/system.php:354 +#: usr/local/www/system.php:347 usr/local/www/system.php:346 +#: usr/local/www/system.php:346 +msgid "Allow DNS server list to be overridden by DHCP/PPP on WAN" +msgstr "DNSサーãƒãƒ¼ã®ãƒªã‚¹ãƒˆã¯ã€WAN上ã§DHCP / PPPã«ã‚ˆã£ã¦ç„¡åйã«ã§ãるよã†ã«ã™ã‚‹" + +#: usr/local/www/system.php:346 usr/local/www/system.php:357 +#: usr/local/www/system.php:350 usr/local/www/system.php:349 +#: usr/local/www/system.php:349 +#, php-format +msgid "" +"If this option is set, %s will use DNS servers assigned by a DHCP/PPP server " +"on WAN for its own purposes (including the DNS forwarder). However, they " +"will not be assigned to DHCP and PPTP VPN clients." +msgstr "( DNSフォワーダをå«ã‚€ï¼‰ç‹¬è‡ªã®ç›®çš„ã®ãŸã‚ã«ã€WAN上ã®ã€Œã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ %sã¯ã€DHCP / PPPサーãƒã«ã‚ˆã£ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸDNSサーãƒãƒ¼ã‚’使用ã—ã¾ã™ã€ 。ã—ã‹ã—ã€å½¼ã‚‰ã¯ "DHCPãŠã‚ˆã³PPTP VPNクライアントã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/system.php:355 usr/local/www/system.php:366 +#: usr/local/www/system.php:359 usr/local/www/system.php:358 +#: usr/local/www/system.php:358 +msgid "Do not use the DNS Forwarder as a DNS server for the firewall" +msgstr "ファイアウォールã®DNSサーãƒãƒ¼ã¨ã—ã¦ã®DNSフォワーダを使用ã—ãªã„ã§ãã ã•ã„" + +#: usr/local/www/system.php:358 usr/local/www/system.php:369 +#: usr/local/www/system.php:362 usr/local/www/system.php:361 +#: usr/local/www/system.php:361 +msgid "" +"By default localhost (127.0.0.1) will be used as the first DNS server where " +"the DNS forwarder is enabled, so system can use the DNS forwarder to perform " +"lookups. Checking this box omits localhost from the list of DNS servers." +msgstr "DNSãƒ•ã‚©ãƒ¯ãƒ¼ãƒ€ãŒæœ‰åйã«ãªã£ã¦ã„る「既定ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã§ã¯ï¼ˆ 127.0.0.1 )最åˆã®DNSサーãƒãƒ¼ã¨ã—ã¦ä½¿ç”¨ã•れる"ãŸã‚ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ã€ã“ã®ãƒœãƒƒã‚¯ã‚¹ã¯ã€DNSサーãƒãƒ¼ã®ãƒªã‚¹ãƒˆã‹ã‚‰ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã‚’çœç•¥ã—ã¦ç¢ºèªã™ã‚‹ã€‚ 「ルックアップを実行ã™ã‚‹ãŸã‚ã«DNSフォワーダを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/system.php:365 usr/local/www/system.php:376 +#: usr/local/www/system.php:369 usr/local/www/system.php:367 +#: usr/local/www/system.php:367 +msgid "Time zone" +msgstr "時間帯" + +#: usr/local/www/system.php:377 usr/local/www/system.php:388 +#: usr/local/www/system.php:381 usr/local/www/system.php:379 +#: usr/local/www/system.php:379 +msgid "Select the location closest to you" +msgstr "ã‚ãªãŸã«æœ€ã‚‚è¿‘ã„å ´æ‰€ã‚’é¸æŠžã—ã¾ã™" + +#: usr/local/www/system.php:395 usr/local/www/system.php:406 +#: usr/local/www/system.php:399 usr/local/www/system.php:397 +#: usr/local/www/system.php:397 +msgid "NTP time server" +msgstr "NTPタイムサーãƒ" + +#: usr/local/www/system.php:400 usr/local/www/system.php:411 +#: usr/local/www/system.php:404 usr/local/www/system.php:402 +#: usr/local/www/system.php:402 +msgid "" +"Use a space to separate multiple hosts (only one required). Remember to set " +"up at least one DNS server if you enter a host name here!" +msgstr "「複数ã®ãƒ›ã‚¹ãƒˆï¼ˆå¿…é ˆã®ã¿1 )をスペースã§åŒºåˆ‡ã‚Šã¾ã™ã€‚設定ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„"ã‚ãªãŸã¯ã“ã“ã«ãƒ›ã‚¹ãƒˆåを入力ã™ã‚‹ã¨ã€å°‘ãªãã¨ã‚‚1ã¤ã®DNSサーãƒãƒ¼ã‚’ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ— ï¼" + +#: usr/local/www/system.php:411 usr/local/www/system.php:440 +#: usr/local/www/system.php:433 usr/local/www/system.php:431 +#: usr/local/www/system.php:431 +msgid "Theme" +msgstr "テーマ" + +#: usr/local/www/system.php:435 usr/local/www/system.php:464 +#: usr/local/www/system.php:457 usr/local/www/system.php:455 +#: usr/local/www/system.php:455 +msgid "This will change the look and feel of" +msgstr "ã“れã¯ãƒ‡ã‚¶ã‚¤ãƒ³ã‚’変更ã™ã‚‹ãªã©ã®æ„Ÿã˜ã«ãªã‚Šã¾ã™" + +#: usr/local/www/interfaces_vlan.php:65 usr/local/www/interfaces_vlan.php:69 +#: usr/local/www/interfaces_vlan.php:69 +msgid "" +"This VLAN cannot be deleted because it is still being used as an interface." +msgstr "ãれã§ã‚‚インターフェイスã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ã‚‹ãŸã‚〠「ã“ã®VLANã¯å‰Šé™¤ã§ãã¾ã›ã‚“。" + +#: usr/local/www/interfaces_vlan.php:78 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_vlan.php:84 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_vlan.php:84 +msgid "VLAN" +msgstr "VLAN" + +#: usr/local/www/interfaces_vlan.php:109 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan.php:110 usr/local/www/interfaces_vlan.php:116 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan.php:116 +msgid "VLAN tag" +msgstr "VLANã‚¿ã‚°" + +#: usr/local/www/interfaces_vlan.php:125 usr/local/www/interfaces_vlan.php:126 +#: usr/local/www/interfaces_vlan.php:132 usr/local/www/interfaces_vlan.php:132 +msgid "Do you really want to delete this VLAN?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®VLANを削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/interfaces_vlan.php:136 usr/local/www/interfaces_vlan.php:137 +#: usr/local/www/interfaces_vlan.php:143 usr/local/www/interfaces_vlan.php:143 +#, php-format +msgid "" +"Not all drivers/NICs support 802.1Q VLAN tagging properly. On cards that do " +"not explicitly support it, VLAN tagging will still work, but the reduced MTU " +"may cause problems. See the %s handbook for information on supported cards." +msgstr "明示的ã«ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„"ã™ã¹ã¦ã®ãƒ‰ãƒ©ã‚¤ãƒ/ NICãŒ802.1Q VLANãŒãªã„カードã§ã¯ã€‚é©åˆ‡ã«ã‚¿ã‚°ä»˜ã‘をサãƒãƒ¼ãƒˆã—ãªã„〠〠VLANタギングã¯ã¾ã å‹•作ã—ã¾ã™ãŒã€ç¸®å°MTUã¯ã€Œå•題ãŒç™ºç”Ÿã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚サãƒãƒ¼ãƒˆã•れã¦ã„るカードã«ã¤ã„ã¦ã¯ã€ %sãƒãƒ³ãƒ‰ãƒ–ックをå‚ç…§ã—ã¦ãã ã•ã„。" + +#: usr/local/www/interfaces_vlan_edit.php:80 +#: usr/local/www/interfaces_vlan_edit.php:80 +msgid "The VLAN tag must be an integer between 1 and 4094." +msgstr "VLANã‚¿ã‚°ã¯ã€ 1 〜4094ã®æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/interfaces_vlan_edit.php:88 +#: usr/local/www/interfaces_vlan_edit.php:91 +#: usr/local/www/interfaces_vlan_edit.php:91 +#, php-format +msgid "A VLAN with the tag %s is already defined on this interface." +msgstr "ã‚¿ã‚°%sã§VLANãŒã™ã§ã«ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§å®šç¾©ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces_vlan_edit.php:95 +#: usr/local/www/interfaces_vlan_edit.php:98 +#: usr/local/www/interfaces_vlan_edit.php:98 +msgid "A QinQ VLAN exists with this tag please remove it to use this tag with." +msgstr "QinQã®VLANã¯ã€ã“ã®ã‚¿ã‚°ã«å­˜åœ¨ã—ã€ãれãŒã“ã®ã‚¿ã‚°ã‚’使用ã™ã‚‹ã“ã¨ã‚’削除ã—ã¦ãã ã•ã„。" + +#: usr/local/www/interfaces_vlan_edit.php:150 +#: usr/local/www/interfaces_vlan_edit.php:151 +#: usr/local/www/interfaces_vlan_edit.php:154 +#: usr/local/www/interfaces_vlan_edit.php:154 +msgid "VLAN configuration" +msgstr "VLANã®è¨­å®š" + +#: usr/local/www/interfaces_vlan_edit.php:169 +#: usr/local/www/interfaces_vlan_edit.php:170 +#: usr/local/www/interfaces_vlan_edit.php:173 +#: usr/local/www/interfaces_vlan_edit.php:173 +msgid "Only VLAN capable interfaces will be shown." +msgstr "VLANã®ã¿ãŒå¯èƒ½ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒè¡¨ç¤ºã•れã¾ã™ã€‚" + +#: usr/local/www/interfaces_vlan_edit.php:172 +#: usr/local/www/interfaces_vlan_edit.php:173 +#: usr/local/www/interfaces_vlan_edit.php:176 +#: usr/local/www/interfaces_vlan_edit.php:176 +msgid "VLAN tag " +msgstr "VLANã‚¿ã‚°" + +#: usr/local/www/interfaces_vlan_edit.php:176 +#: usr/local/www/interfaces_vlan_edit.php:177 +#: usr/local/www/interfaces_vlan_edit.php:180 +#: usr/local/www/interfaces_vlan_edit.php:180 +msgid "802.1Q VLAN tag (between 1 and 4094) " +msgstr "( 1ã¨4094ã®é–“) 802.1Q VLANã‚¿ã‚°" + +#: usr/local/www/system_firmware.php:82 usr/local/www/system_firmware.php:89 +#: usr/local/www/system_firmware.php:88 usr/local/www/system_firmware.php:88 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini" +msgstr "アップロードã•れãŸãƒ•ァイルã¯ã€php.iniã®upload_max_filesizeディレクティブã®å€¤ã‚’è¶…ãˆã¦" + +#: usr/local/www/system_firmware.php:84 usr/local/www/system_firmware.php:91 +#: usr/local/www/system_firmware.php:90 usr/local/www/system_firmware.php:90 +msgid "" +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " +"the HTML form" +msgstr "HTMLフォーム"アップロードã•れãŸãƒ•ã‚¡ã‚¤ãƒ«ã§æŒ‡å®šã•れãŸMAX_FILE_SIZEディレクティブã®å€¤ã‚’è¶…ãˆã¦ã€" + +#: usr/local/www/system_firmware.php:86 usr/local/www/system_firmware.php:93 +#: usr/local/www/system_firmware.php:92 usr/local/www/system_firmware.php:92 +msgid "The uploaded file was only partially uploaded" +msgstr "アップロードã•れãŸãƒ•ァイルã¯ã€éƒ¨åˆ†çš„ã«ã—ã‹ã‚¢ãƒƒãƒ—ロードã•れã¾ã—ãŸ" + +#: usr/local/www/system_firmware.php:88 usr/local/www/system_firmware.php:95 +#: usr/local/www/system_firmware.php:94 usr/local/www/system_firmware.php:94 +msgid "No file was uploaded" +msgstr "ファイルã¯ã‚¢ãƒƒãƒ—ロードã•れã¾ã›ã‚“ã§ã—ãŸ" + +#: usr/local/www/system_firmware.php:90 usr/local/www/system_firmware.php:97 +#: usr/local/www/system_firmware.php:96 usr/local/www/system_firmware.php:96 +msgid "Missing a temporary folder" +msgstr "一時フォルダãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" + +#: usr/local/www/system_firmware.php:92 usr/local/www/system_firmware.php:99 +#: usr/local/www/system_firmware.php:98 usr/local/www/system_firmware.php:98 +msgid "Failed to write file to disk" +msgstr "ディスクã¸ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ" + +#: usr/local/www/system_firmware.php:94 usr/local/www/system_firmware.php:101 +#: usr/local/www/system_firmware.php:100 usr/local/www/system_firmware.php:100 +msgid "File upload stopped by extension" +msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロードã¯ã€æ‹¡å¼µå­ã«ã‚ˆã£ã¦åœæ­¢" + +#: usr/local/www/system_firmware.php:96 usr/local/www/system_firmware.php:103 +#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:102 +msgid "Unknown upload error" +msgstr "䏿˜Žã®ã‚¢ãƒƒãƒ—ロードエラー" + +#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_settings.php:74 usr/local/www/fbegin.inc:84 +#: usr/local/www/fbegin.inc:100 usr/local/www/fbegin.inc:109 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/system_firmware.php:108 usr/local/www/fbegin.inc:101 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:210 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/system_firmware_auto.php:61 usr/local/www/fbegin.inc:101 +msgid "Firmware" +msgstr "ファームウェア" + +#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:238 +#: usr/local/www/system_firmware_auto.php:79 +#: usr/local/www/system_firmware_check.php:66 +#: usr/local/www/system_firmware_settings.php:110 +#: usr/local/www/system_firmware_restorefullbackup.php:125 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:245 +#: usr/local/www/system_firmware_settings.php:115 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:248 +#: usr/local/www/system_firmware_check.php:64 +#: usr/local/www/system_firmware_settings.php:117 +#: usr/local/www/system_firmware_auto.php:80 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:248 +#: usr/local/www/system_firmware_check.php:64 +#: usr/local/www/system_firmware_settings.php:117 +#: usr/local/www/system_firmware_auto.php:80 +#: usr/local/www/system_firmware_restorefullbackup.php:125 +msgid "Manual Update" +msgstr "手動更新" + +#: usr/local/www/system_firmware.php:107 usr/local/www/system_firmware.php:114 +#: usr/local/www/system_firmware.php:113 usr/local/www/system_firmware.php:113 +msgid "" +"An upgrade is currently in progress.

    The firewall will reboot when the " +"operation is complete." +msgstr "「アップグレードã¯ç¾åœ¨é€²è¡Œä¸­ã§ã‚る。ã¨ãu003cPu003eファイアウォールãŒå†èµ·å‹•ã—ã¾ã™ã€æ“作ãŒå®Œäº†ã—ãŸã€‚" + +#: usr/local/www/system_firmware.php:135 usr/local/www/system_firmware.php:142 +#: usr/local/www/system_firmware.php:137 usr/local/www/system_firmware.php:137 +msgid "Upgrade" +msgstr "アップグレード" + +#: usr/local/www/system_firmware.php:154 usr/local/www/system_firmware.php:161 +#: usr/local/www/system_firmware.php:156 usr/local/www/system_firmware.php:156 +msgid "The uploaded image file is not for this platform." +msgstr "アップロードã•れãŸç”»åƒãƒ•ァイルã¯ã€ã“ã®ãƒ—ラットフォーム用ã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/system_firmware.php:157 usr/local/www/system_firmware.php:164 +#: usr/local/www/system_firmware.php:159 usr/local/www/system_firmware.php:159 +msgid "Image upload failed (out of memory?)" +msgstr "ç”»åƒã®ã‚¢ãƒƒãƒ—ロードã¯ã€ (メモリãŒä¸è¶³ï¼Ÿ )ãŒå¤±æ•—ã—ã¾ã—ãŸ" + +#: usr/local/www/system_firmware.php:168 +#: usr/local/www/system_firmware_auto.php:201 +#: usr/local/www/system_firmware.php:175 usr/local/www/system_firmware.php:170 +#: usr/local/www/system_firmware_auto.php:203 +#: usr/local/www/system_firmware_auto.php:199 +#: usr/local/www/system_firmware.php:170 +#: usr/local/www/system_firmware_auto.php:199 +msgid "The digital signature on this image is invalid." +msgstr "ã“ã®ç”»åƒã®ãƒ‡ã‚¸ã‚¿ãƒ«ç½²åãŒç„¡åйã§ã™ã€‚" + +#: usr/local/www/system_firmware.php:170 +#: usr/local/www/system_firmware_auto.php:204 +#: usr/local/www/system_firmware.php:177 usr/local/www/system_firmware.php:172 +#: usr/local/www/system_firmware_auto.php:206 +#: usr/local/www/system_firmware_auto.php:202 +#: usr/local/www/system_firmware.php:172 +#: usr/local/www/system_firmware_auto.php:202 +msgid "This image is not digitally signed." +msgstr "ã“ã®ç”»åƒã¯ã€ãƒ‡ã‚¸ã‚¿ãƒ«ç½²åã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/system_firmware.php:172 +#: usr/local/www/system_firmware_auto.php:208 +#: usr/local/www/system_firmware.php:179 usr/local/www/system_firmware.php:174 +#: usr/local/www/system_firmware_auto.php:210 +#: usr/local/www/system_firmware_auto.php:206 +#: usr/local/www/system_firmware.php:174 +#: usr/local/www/system_firmware_auto.php:206 +msgid "There has been an error verifying the signature on this image." +msgstr "ã“ã®ç”»åƒã«ç½²åを検証エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" + +#: usr/local/www/system_firmware.php:175 +#: usr/local/www/system_firmware_auto.php:223 +#: usr/local/www/system_firmware.php:182 usr/local/www/system_firmware.php:177 +#: usr/local/www/system_firmware_auto.php:225 +#: usr/local/www/system_firmware_auto.php:221 +#: usr/local/www/system_firmware.php:177 +#: usr/local/www/system_firmware_auto.php:221 +msgid "The image file is corrupt." +msgstr "ç”»åƒãƒ•ァイルãŒå£Šã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_firmware.php:188 usr/local/www/system_firmware.php:195 +#: usr/local/www/system_firmware.php:190 usr/local/www/system_firmware.php:190 +msgid "" +"The firmware is now being updated. The firewall will reboot automatically." +msgstr "「ファームウェアã¯ç¾åœ¨æ›´æ–°ä¸­ã§ã™ã€‚ファイアウォールã¯è‡ªå‹•çš„ã«å†èµ·å‹•ã—ã¾ã™ã€‚" + +#: usr/local/www/system_firmware.php:196 usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware.php:204 usr/local/www/system_firmware.php:204 +#, php-format +msgid "Firmware image missing or other error, please try again %s." +msgstr "ファームウェアイメージ欠è½ã¾ãŸã¯ãã®ä»–ã®ã‚¨ãƒ©ãƒ¼ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„%s." + +#: usr/local/www/system_firmware.php:220 usr/local/www/system_firmware.php:227 +#: usr/local/www/system_firmware.php:230 usr/local/www/system_firmware.php:230 +msgid "" +"This means that the image you uploaded is not an official/supported image " +"and may lead to unexpected behavior or security compromises. Only install " +"images that come from sources that you trust, and make sure that the image " +"has not been tampered with." +msgstr "予期ã—ãªã„動作やセキュリティ侵害ã«ã¤ãªãŒã‚‹å¯èƒ½æ€§ãŒã‚りã€ã€Œã“れã¯ã€ã‚¢ãƒƒãƒ—ロードã•れãŸç”»åƒã¯ã€å…¬å¼/サãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ç”»åƒã§ã¯ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€ 。唯一㮠"ã‚ãªãŸãŒä¿¡é ¼ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã®ç”»åƒã‚’ã€ç”»åƒãŒã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ã€Œã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ”¹ã–ã‚“ã•れã¦ã„ãªã„。" + +#: usr/local/www/system_firmware.php:224 usr/local/www/system_firmware.php:231 +#: usr/local/www/system_firmware.php:234 usr/local/www/system_firmware.php:234 +msgid "Do you want to install this image anyway (on your own risk)?" +msgstr "ã‚ãªãŸãŒï¼ˆã”自身ã®è²¬ä»»ã§ï¼‰ã¨ã«ã‹ãã“ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’インストールã—ã¾ã™ã‹ï¼Ÿã‚’" + +#: usr/local/www/system_firmware.php:239 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/system_firmware_auto.php:80 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_check.php:67 +#: usr/local/www/system_firmware_settings.php:111 +#: usr/local/www/system_firmware_restorefullbackup.php:126 +#: usr/local/www/system_firmware.php:246 +#: usr/local/www/system_firmware_settings.php:116 +#: usr/local/www/system_firmware.php:249 +#: usr/local/www/system_firmware_check.php:65 +#: usr/local/www/system_firmware_settings.php:118 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/system_firmware_auto.php:81 +#: usr/local/www/system_firmware.php:249 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_check.php:65 +#: usr/local/www/system_firmware_settings.php:118 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/system_firmware_auto.php:81 +#: usr/local/www/system_firmware_restorefullbackup.php:126 +msgid "Auto Update" +msgstr "自動更新" + +#: usr/local/www/system_firmware.php:240 +#: usr/local/www/system_firmware_auto.php:81 +#: usr/local/www/system_firmware_check.php:68 +#: usr/local/www/system_firmware_settings.php:112 +#: usr/local/www/system_firmware_restorefullbackup.php:127 +#: usr/local/www/system_firmware.php:247 +#: usr/local/www/system_firmware_settings.php:117 +#: usr/local/www/system_firmware.php:250 +#: usr/local/www/system_firmware_check.php:66 +#: usr/local/www/system_firmware_settings.php:119 +#: usr/local/www/system_firmware_auto.php:82 +#: usr/local/www/system_firmware.php:250 +#: usr/local/www/system_firmware_check.php:66 +#: usr/local/www/system_firmware_settings.php:119 +#: usr/local/www/system_firmware_auto.php:82 +#: usr/local/www/system_firmware_restorefullbackup.php:127 +msgid "Updater Settings" +msgstr "アップデータã®è¨­å®š" + +#: usr/local/www/system_firmware.php:242 +#: usr/local/www/system_firmware_auto.php:83 +#: usr/local/www/system_firmware_check.php:70 +#: usr/local/www/system_firmware_settings.php:114 +#: usr/local/www/system_firmware_restorefullbackup.php:129 +#: usr/local/www/system_firmware.php:249 +#: usr/local/www/system_firmware_settings.php:119 +#: usr/local/www/system_firmware.php:252 +#: usr/local/www/system_firmware_check.php:68 +#: usr/local/www/system_firmware_settings.php:121 +#: usr/local/www/system_firmware_auto.php:84 +#: usr/local/www/system_firmware.php:252 +#: usr/local/www/system_firmware_check.php:68 +#: usr/local/www/system_firmware_settings.php:121 +#: usr/local/www/system_firmware_auto.php:84 +#: usr/local/www/system_firmware_restorefullbackup.php:129 +msgid "Restore Full Backup" +msgstr "フルãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を復元" + +#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259 +#: usr/local/www/system_firmware.php:262 usr/local/www/system_firmware.php:262 +msgid "Invoke" +msgstr "呼ã³å‡ºã™" + +#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259 +#: usr/local/www/system_firmware.php:262 usr/local/www/system_firmware.php:262 +msgid "Manual Upgrade" +msgstr "手動アップグレード" + +#: usr/local/www/system_firmware.php:259 usr/local/www/system_firmware.php:266 +#: usr/local/www/system_firmware.php:269 usr/local/www/system_firmware.php:269 +msgid "Enable firmware upload" +msgstr "ファームウェアã®ã‚¢ãƒƒãƒ—ロードを有効ã«ã™ã‚‹" + +#: usr/local/www/system_firmware.php:261 usr/local/www/system_firmware.php:268 +#: usr/local/www/system_firmware.php:271 usr/local/www/system_firmware.php:271 +#, php-format +msgid "Click "Enable firmware upload" to begin." +msgstr "é–‹å§‹ã™ã‚‹ã€Œãƒ•ァームウェアã®ã‚¢ãƒƒãƒ—ロードを有効ã«ã™ã‚‹ã€ã‚’クリックã—ã¾ã™ã€‚" + +#: usr/local/www/system_firmware.php:264 usr/local/www/system_firmware.php:271 +#: usr/local/www/system_firmware.php:274 usr/local/www/system_firmware.php:274 +msgid "Disable firmware upload" +msgstr "ファームウェアã®ã‚¢ãƒƒãƒ—ロードを無効ã«ã™ã‚‹" + +#: usr/local/www/system_firmware.php:282 usr/local/www/system_firmware.php:289 +#: usr/local/www/system_firmware.php:292 usr/local/www/system_firmware.php:292 +msgid "Please select kernel type" +msgstr "カーãƒãƒ«ã®ç¨®é¡žã‚’é¸æŠžã—ã¦ãã ã•ã„" + +#: usr/local/www/system_firmware.php:284 usr/local/www/system_firmware.php:55 +msgid "Multiprocessor kernel" +msgstr "マルãƒãƒ—ロセッサカーãƒãƒ«" + +#: usr/local/www/system_firmware.php:285 usr/local/www/system_firmware.php:56 +msgid "Uniprocessor kernel" +msgstr "ユニプロセッサカーãƒãƒ«" + +#: usr/local/www/system_firmware.php:286 usr/local/www/system_firmware.php:57 +msgid "Embedded kernel" +msgstr "埋ã‚è¾¼ã¾ã‚ŒãŸã‚«ãƒ¼ãƒãƒ«" + +#: usr/local/www/system_firmware.php:287 usr/local/www/system_firmware.php:58 +msgid "Developers kernel" +msgstr "開発者ã¯ã‚«ãƒ¼ãƒãƒ«" + +#: usr/local/www/system_firmware.php:298 +#: usr/local/www/system_firmware_check.php:103 +#: usr/local/www/system_firmware.php:304 usr/local/www/system_firmware.php:303 +#: usr/local/www/system_firmware_check.php:104 +#: usr/local/www/system_firmware_check.php:98 +#: usr/local/www/system_firmware.php:303 +#: usr/local/www/system_firmware_check.php:98 +msgid "Perform full backup prior to upgrade" +msgstr "å‰ã®ã‚¢ãƒƒãƒ—グレードã«ãƒ•ルãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を実行" + +#: usr/local/www/system_firmware.php:300 usr/local/www/system_firmware.php:306 +#: usr/local/www/system_firmware.php:306 +msgid "Upgrade firmware" +msgstr "ファームウェアをアップグレード" + +#: usr/local/www/system_firmware.php:301 usr/local/www/system_firmware.php:307 +#: usr/local/www/system_firmware.php:307 +msgid "Click "Upgrade firmware" to start the upgrade process." +msgstr "アップグレードプロセスを開始ã™ã‚‹ãŸã‚ã«ã€Œãƒ•ァームウェアã®ã‚¢ãƒƒãƒ—グレードã€ã‚’クリックã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_firmware.php:303 usr/local/www/system_firmware.php:309 +#: usr/local/www/system_firmware.php:309 +msgid "You must reboot the system before you can upgrade the firmware." +msgstr "ファームウェアをアップグレードã™ã‚‹å‰ã«ã€ã‚·ã‚¹ãƒ†ãƒ ã‚’å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_firmware.php:316 usr/local/www/system_firmware.php:322 +#: usr/local/www/system_firmware.php:320 usr/local/www/system_firmware.php:320 +msgid "Warning:" +msgstr "警告:" + +#: usr/local/www/system_firmware.php:319 usr/local/www/system_firmware.php:325 +#: usr/local/www/system_firmware.php:323 usr/local/www/system_firmware.php:323 +msgid "" +"DO NOT abort the firmware upgrade once it has started. The firewall will " +"reboot automatically after storing the new firmware. The configuration will " +"be maintained." +msgstr "「ãれãŒèµ·å‹•ã—ãŸå¾Œã¯ã€ãƒ•ァームウェアã®ã‚¢ãƒƒãƒ—グレードを中断ã—ãªã„ã§ãã ã•ã„。ファイアウォールãŒã—ã¾ã™"æ–°ã—ã„ファームウェアをä¿å­˜ã—ãŸå¾Œã€è‡ªå‹•çš„ã«å†èµ·å‹•ã—ã¾ã™ã€‚æ§‹æˆã¯ã€ 「維æŒã•れる。" + +#: usr/local/www/system_firmware_auto.php:115 +#: usr/local/www/system_firmware_auto.php:113 +#: usr/local/www/system_firmware_auto.php:113 +msgid "Beginning firmware upgrade" +msgstr "ファームウェアã®ã‚¢ãƒƒãƒ—グレードを開始" + +#: usr/local/www/system_firmware_auto.php:133 +#: usr/local/www/system_firmware_auto.php:135 +#: usr/local/www/system_firmware_auto.php:131 +#: usr/local/www/system_firmware_auto.php:131 +msgid "Downloading current version information" +msgstr "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報をダウンロードã™ã‚‹" + +#: usr/local/www/system_firmware_auto.php:148 +#: usr/local/www/system_firmware_auto.php:157 +#: usr/local/www/system_firmware_check.php:141 +#: usr/local/www/system_firmware_check.php:143 +#: usr/local/www/system_firmware_auto.php:150 +#: usr/local/www/system_firmware_auto.php:159 +#: usr/local/www/system_firmware_check.php:135 +#: usr/local/www/system_firmware_auto.php:146 +#: usr/local/www/system_firmware_auto.php:155 +#: usr/local/www/system_firmware_check.php:135 +#: usr/local/www/system_firmware_auto.php:146 +#: usr/local/www/system_firmware_auto.php:155 +msgid "Unable to check for updates." +msgstr "更新を確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_firmware_auto.php:162 +#: usr/local/www/system_firmware_auto.php:164 +#: usr/local/www/system_firmware_auto.php:160 +#: usr/local/www/system_firmware_auto.php:160 +msgid "Downloading updates" +msgstr "更新をダウンロードã™ã‚‹" + +#: usr/local/www/system_firmware_auto.php:172 +#: usr/local/www/system_firmware_auto.php:174 +#: usr/local/www/system_firmware_auto.php:170 +#: usr/local/www/system_firmware_auto.php:170 +msgid "download complete." +msgstr "完全ãªãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¾ã™ã€‚" + +#: usr/local/www/system_firmware_auto.php:174 +#: usr/local/www/system_firmware_check.php:159 +#: usr/local/www/system_firmware_check.php:161 +#: usr/local/www/system_firmware_auto.php:176 +#: usr/local/www/system_firmware_check.php:153 +#: usr/local/www/system_firmware_auto.php:172 +#: usr/local/www/system_firmware_check.php:153 +#: usr/local/www/system_firmware_auto.php:172 +msgid "You are on the latest version." +msgstr "最新ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚りã¾ã™ã€‚" + +#: usr/local/www/system_firmware_auto.php:214 +#: usr/local/www/system_firmware_auto.php:216 +#: usr/local/www/system_firmware_auto.php:212 +#: usr/local/www/system_firmware_auto.php:212 +msgid "" +"Update cannot continue. You can disable this check on the Updater Settings " +"tab." +msgstr "「アップデートを続行ã§ãã¾ã›ã‚“。ã‚ãªãŸã¯ã‚¢ãƒƒãƒ—データ設定ã§ã¯ã€ã“ã®ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ã‚¿ãƒ–をクリックã—ã¾ã™ã€‚" + +#: usr/local/www/system_firmware_auto.php:219 +#: usr/local/www/system_firmware_auto.php:221 +#: usr/local/www/system_firmware_auto.php:217 +#: usr/local/www/system_firmware_auto.php:217 +msgid "" +"Upgrade Image does not contain a signature but the system has been " +"configured to allow unsigned images. One moment please..." +msgstr "「アップグレードイメージã®ç½²åãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“ãŒã€ã‚·ã‚¹ãƒ†ãƒ ãŒã•れã¦ã„る「未署åã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’許å¯ã™ã‚‹ã‚ˆã†ã«è¨­å®šã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." + +#: usr/local/www/system_firmware_auto.php:224 +#: usr/local/www/system_firmware_auto.php:226 +#: usr/local/www/system_firmware_auto.php:222 +#: usr/local/www/system_firmware_auto.php:222 +msgid "Update cannot continue" +msgstr "アップデートを続行ã§ãã¾ã›ã‚“" + +#: usr/local/www/system_firmware_auto.php:235 +#: usr/local/www/system_firmware_auto.php:237 +#: usr/local/www/system_firmware_auto.php:233 +#: usr/local/www/system_firmware_auto.php:233 +msgid "Downloading complete but sha256 does not match." +msgstr "完全ãªãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã¯ãªã〠SHA256一致ã—ã¾ã›ã‚“。" + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:234 +#: usr/local/www/system_firmware_auto.php:234 +msgid "Auto upgrade aborted." +msgstr "自動アップグレードã¯ä¸­æ­¢ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:234 +#: usr/local/www/system_firmware_auto.php:234 +msgid "Downloaded SHA256" +msgstr "ダウンロードã•れãŸSHA256" + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:234 +#: usr/local/www/system_firmware_auto.php:234 +msgid "Needed SHA256" +msgstr "å¿…è¦ã«SHA256" + +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:240 +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:236 +msgid "is now upgrading." +msgstr "今アップグレードã•れã¦ã„る。" + +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:240 +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:236 +msgid "The firewall will reboot once the operation is completed." +msgstr "æ“作ãŒå®Œäº†ã—ãŸã‚‰ã€ãƒ•ァイアウォールãŒå†èµ·å‹•ã—ã¾ã™ã€‚" + +#: usr/local/www/system_firmware_auto.php:256 +#: usr/local/www/system_firmware_auto.php:258 +#: usr/local/www/system_firmware_auto.php:258 +msgid "Auto Update Download Status" +msgstr "自動更新ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰çжæ³" + +#: usr/local/www/system_firmware_auto.php:258 +#: usr/local/www/system_firmware_auto.php:260 +#: usr/local/www/system_firmware_auto.php:260 +msgid "Current Version" +msgstr "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³" + +#: usr/local/www/system_firmware_auto.php:259 +#: usr/local/www/system_firmware_auto.php:261 +#: usr/local/www/system_firmware_auto.php:261 +msgid "Latest Version" +msgstr "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³" + +#: usr/local/www/system_firmware_auto.php:260 +#: usr/local/www/system_firmware_auto.php:262 +#: usr/local/www/system_firmware_auto.php:262 +msgid "File size" +msgstr "ファイルサイズ" + +#: usr/local/www/system_firmware_auto.php:261 +#: usr/local/www/system_firmware_auto.php:263 +#: usr/local/www/system_firmware_auto.php:263 +msgid "Downloaded" +msgstr "ダウンロードã—ãŸ" + +#: usr/local/www/system_firmware_auto.php:262 +#: usr/local/www/system_firmware_auto.php:264 +#: usr/local/www/system_firmware_auto.php:264 +msgid "Percent" +msgstr "パーセント" + +#: usr/local/www/system_firmware_check.php:107 +#: usr/local/www/system_firmware_check.php:109 +#: usr/local/www/system_firmware_check.php:101 +#: usr/local/www/system_firmware_check.php:101 +msgid "Invoke Auto Upgrade" +msgstr "自動アップグレードを起動ã™ã‚‹" + +#: usr/local/www/system_firmware_check.php:125 +#: usr/local/www/system_firmware_check.php:127 +#: usr/local/www/system_firmware_check.php:119 +#: usr/local/www/system_firmware_check.php:119 +msgid "Downloading new version information..." +msgstr "æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報をダウンロード..." + +#: usr/local/www/system_firmware_check.php:143 +#: usr/local/www/system_firmware_check.php:145 +#: usr/local/www/system_firmware_check.php:137 +#: usr/local/www/system_firmware_check.php:137 +msgid "Could not contact custom update server." +msgstr "カスタムアップデートサーãƒã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/system_firmware_check.php:145 +#: usr/local/www/system_firmware_check.php:147 +#: usr/local/www/system_firmware_check.php:139 +#: usr/local/www/system_firmware_check.php:139 +#, php-format +msgid "Could not contact %1$s update server %2$s%3$s" +msgstr "ã¯%1$sアップデートサーãƒã®%2$s%3$sã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: usr/local/www/system_firmware_check.php:147 +#: usr/local/www/system_firmware_check.php:149 +#: usr/local/www/system_firmware_check.php:141 +#: usr/local/www/system_firmware_check.php:141 +msgid "Obtaining current version information..." +msgstr "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報をå–å¾—..." + +#: usr/local/www/system_firmware_check.php:172 +#: usr/local/www/system_firmware_check.php:174 +#: usr/local/www/system_firmware_check.php:178 +#: usr/local/www/system_firmware_check.php:178 +msgid "A new version is now available" +msgstr "æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã«ãªã‚Šã¾ã—ãŸ" + +#: usr/local/www/system_firmware_check.php:173 +#: usr/local/www/system_firmware_check.php:175 +#: usr/local/www/system_firmware_check.php:179 +#: usr/local/www/system_firmware_check.php:179 +msgid "Current version" +msgstr "ç¾ãƒãƒ¼ã‚¸ãƒ§ãƒ³" + +#: usr/local/www/system_firmware_check.php:175 +#: usr/local/www/system_firmware_check.php:177 +#: usr/local/www/system_firmware_check.php:181 +#: usr/local/www/system_firmware_check.php:181 +msgid "NanoBSD Size" +msgstr "NanoBSDã®ã‚µã‚¤ã‚º" + +#: usr/local/www/system_firmware_check.php:177 +#: usr/local/www/system_firmware_check.php:179 +#: usr/local/www/system_firmware_check.php:183 +#: usr/local/www/system_firmware_check.php:183 +msgid "Built On" +msgstr "ä¸Šã«æ§‹ç¯‰ã•れãŸ" + +#: usr/local/www/system_firmware_check.php:178 +#: usr/local/www/system_firmware_check.php:180 +#: usr/local/www/system_firmware_check.php:184 +#: usr/local/www/system_firmware_check.php:184 +msgid "New version" +msgstr "æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³" + +#: usr/local/www/system_firmware_check.php:179 +#: usr/local/www/system_firmware_check.php:181 +#: usr/local/www/system_firmware_check.php:185 +#: usr/local/www/system_firmware_check.php:185 +msgid "Update source" +msgstr "アップデート元" + +#: usr/local/www/system_firmware_settings.php:122 +#: usr/local/www/system_firmware_settings.php:127 +#: usr/local/www/system_firmware_settings.php:129 +#: usr/local/www/system_firmware_settings.php:129 +msgid "Firmware Branch" +msgstr "ファームウェア支店" + +#: usr/local/www/system_firmware_settings.php:126 +#: usr/local/www/system_firmware_settings.php:131 +#: usr/local/www/system_firmware_settings.php:133 +#: usr/local/www/system_firmware_settings.php:133 +msgid "Default Auto Update URLs" +msgstr "自動更新ã®URLをデフォルト" + +#: usr/local/www/system_firmware_settings.php:142 +#: usr/local/www/system_firmware_settings.php:147 +#: usr/local/www/system_firmware_settings.php:156 +#: usr/local/www/system_firmware_settings.php:158 +#: usr/local/www/system_firmware_settings.php:158 +msgid "Firmware Auto Update URL" +msgstr "ファームウェアã®è‡ªå‹•アップデートã®URL" + +#: usr/local/www/system_firmware_settings.php:144 +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:158 +#: usr/local/www/system_firmware_settings.php:160 +#: usr/local/www/system_firmware_settings.php:160 +msgid "Use a URL server for firmware upgrades other than" +msgstr "以外ã®ãƒ•ァームウェアã®ã‚¢ãƒƒãƒ—グレードã®URLサーãƒã‚’使用ã™ã‚‹" + +#: usr/local/www/system_firmware_settings.php:146 +#: usr/local/www/pkg_mgr_settings.php:109 +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_firmware_settings.php:160 +#: usr/local/www/system_firmware_settings.php:162 +#: usr/local/www/pkg_mgr_settings.php:108 +#: usr/local/www/system_firmware_settings.php:162 +#: usr/local/www/pkg_mgr_settings.php:108 +msgid "Base URL:" +msgstr "ベースURL :" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_firmware_settings.php:165 +msgid "This is where" +msgstr "ã“れã¯ã“ã“ã§" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_firmware_settings.php:165 +msgid "will check for newer firmware versions when the" +msgstr "æ–°ã—ã„ファームウェアã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã¨ã" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_firmware_settings.php:165 +msgid "System: Firmware: Auto Update" +msgstr "システム:ファームウェア:自動更新" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/pkg_mgr_settings.php:111 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/pkg_mgr_settings.php:111 +msgid "page is viewed." +msgstr "ページãŒè¦‹ã‚‰ã‚Œã‚‹ã€‚" + +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_firmware_settings.php:156 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_firmware_settings.php:167 +#: usr/local/www/system_firmware_settings.php:167 +#, php-format +msgid "" +"When a custom URL is enabled, the system will not verify the digital " +"signature from %s." +msgstr "%s.ã‹ã‚‰ç½²å「カスタムURLを有効ã«ã™ã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ã€ãƒ‡ã‚¸ã‚¿ãƒ«ã‚’検証ã—ã¾ã›ã‚“ã€" + +#: usr/local/www/system_firmware_settings.php:159 +#: usr/local/www/system_firmware_settings.php:164 +#: usr/local/www/system_firmware_settings.php:173 +#: usr/local/www/system_firmware_settings.php:175 +#: usr/local/www/system_firmware_settings.php:175 +msgid "Updates" +msgstr "アップデート" + +#: usr/local/www/system_firmware_settings.php:162 +#: usr/local/www/system_firmware_settings.php:167 +#: usr/local/www/system_firmware_settings.php:176 +#: usr/local/www/system_firmware_settings.php:178 +#: usr/local/www/system_firmware_settings.php:178 +msgid "Unsigned images" +msgstr "符å·ãªã—ã®ç”»åƒ" + +#: usr/local/www/system_firmware_settings.php:166 +#: usr/local/www/system_firmware_settings.php:171 +#: usr/local/www/system_firmware_settings.php:180 +#: usr/local/www/system_firmware_settings.php:182 +#: usr/local/www/system_firmware_settings.php:182 +msgid "" +"Allow auto-update firmware images with a missing or invalid digital " +"signature to be used." +msgstr "ç½²åã«ä½¿ç”¨ã™ã‚‹ã€ãŒãªã„ã‹ã€ã¾ãŸã¯ç„¡åйã§ã™ãƒ‡ã‚¸ã‚¿ãƒ«ã§è‡ªå‹•更新ファームウェアイメージを許å¯ã™ã‚‹ "。" + +#: usr/local/www/system_firmware_settings.php:174 +#: usr/local/www/system_firmware_settings.php:187 +#: usr/local/www/system_firmware_settings.php:196 +#: usr/local/www/system_firmware_settings.php:198 +#: usr/local/www/system_firmware_settings.php:198 +msgid "Gitsync" +msgstr "Gitsync" + +#: usr/local/www/system_firmware_settings.php:177 +#: usr/local/www/system_firmware_settings.php:190 +#: usr/local/www/system_firmware_settings.php:199 +#: usr/local/www/system_firmware_settings.php:201 +#: usr/local/www/system_firmware_settings.php:201 +msgid "Auto sync on update" +msgstr "更新時ã«è‡ªå‹•åŒæœŸ" + +#: usr/local/www/system_firmware_settings.php:181 +#: usr/local/www/system_firmware_settings.php:194 +#: usr/local/www/system_firmware_settings.php:203 +#: usr/local/www/system_firmware_settings.php:205 +#: usr/local/www/system_firmware_settings.php:205 +msgid "" +"After updating, sync with the following repository/branch before reboot." +msgstr "「更新後ã€å†èµ·å‹•ã™ã‚‹å‰ã«ã€æ¬¡ã®ãƒªãƒã‚¸ãƒˆãƒª/ブランãƒã¨åŒæœŸã€‚" + +#: usr/local/www/system_firmware_settings.php:193 +#: usr/local/www/system_firmware_settings.php:206 +#: usr/local/www/system_firmware_settings.php:215 +#: usr/local/www/system_firmware_settings.php:217 +#: usr/local/www/system_firmware_settings.php:217 +msgid "Repository URL" +msgstr "リãƒã‚¸ãƒˆãƒªURL" + +#: usr/local/www/system_firmware_settings.php:198 +#: usr/local/www/system_firmware_settings.php:211 +#: usr/local/www/system_firmware_settings.php:220 +#: usr/local/www/system_firmware_settings.php:222 +#: usr/local/www/system_firmware_settings.php:222 +#, php-format +msgid "The most recently used repository was %s" +msgstr "最近使用ã—ãŸãƒªãƒã‚¸ãƒˆãƒªãŒ%sãŸ" + +#: usr/local/www/system_firmware_settings.php:200 +#: usr/local/www/system_firmware_settings.php:213 +#: usr/local/www/system_firmware_settings.php:222 +#: usr/local/www/system_firmware_settings.php:224 +#: usr/local/www/system_firmware_settings.php:224 +msgid "This will be used if the field is left blank." +msgstr "フィールドを空白ã®ã¾ã¾ã«ã™ã‚‹å ´åˆã«ä½¿ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/system_firmware_settings.php:219 +#: usr/local/www/system_firmware_settings.php:232 +#: usr/local/www/system_firmware_settings.php:241 +#: usr/local/www/system_firmware_settings.php:243 +#: usr/local/www/system_firmware_settings.php:243 +msgid "Branch name" +msgstr "支店å" + +#: usr/local/www/system_firmware_settings.php:224 +#: usr/local/www/system_firmware_settings.php:237 +#: usr/local/www/system_firmware_settings.php:246 +#: usr/local/www/system_firmware_settings.php:248 +#: usr/local/www/system_firmware_settings.php:248 +#, php-format +msgid "The most recently used branch was %s" +msgstr "最近使用ã—ãŸãƒ–ランãƒãŒ%sãŸ" + +#: usr/local/www/system_firmware_settings.php:227 +#: usr/local/www/system_firmware_settings.php:240 +#: usr/local/www/system_firmware_settings.php:249 +#: usr/local/www/system_firmware_settings.php:251 +#: usr/local/www/system_firmware_settings.php:251 +msgid "Usually the branch name is master" +msgstr "通常ã€ãƒ–ランãƒåã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ã§ã‚ã‚‹" + +#: usr/local/www/system_firmware_settings.php:230 +#: usr/local/www/system_firmware_settings.php:243 +#: usr/local/www/system_firmware_settings.php:252 +#: usr/local/www/system_firmware_settings.php:254 +#: usr/local/www/system_firmware_settings.php:254 +msgid "Note: Sync will not be performed if a branch is not specified." +msgstr "注:ブランãƒãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã€åŒæœŸã¯å®Ÿè¡Œã•れã¾ã›ã‚“。" + +#: usr/local/www/system_routes.php:52 usr/local/www/system_routes.php:94 +#: usr/local/www/system_routes_edit.php:165 +#: usr/local/www/system_routes_edit.php:198 usr/local/www/system_routes.php:98 +#: usr/local/www/system_routes_edit.php:227 +#: usr/local/www/system_routes.php:113 +#: usr/local/www/system_routes_edit.php:229 usr/local/www/system_routes.php:52 +#: usr/local/www/system_routes.php:113 +#: usr/local/www/system_routes_edit.php:223 +msgid "Static Routes" +msgstr "スタティックルートã®" + +#: usr/local/www/system_routes.php:83 usr/local/www/system_routes.php:83 +msgid "removed route to" +msgstr "ã«å–り除ã‹ãƒ«ãƒ¼ãƒˆ" + +#: usr/local/www/system_routes.php:107 usr/local/www/system_routes.php:111 +#: usr/local/www/system_routes.php:126 usr/local/www/system_routes.php:126 +#, php-format +msgid "" +"The static route configuration has been changed.%sYou must apply the changes " +"in order for them to take effect." +msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚ã«ã€ã€Œã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã®è¨­å®šã¯changed.%sYouãŒå¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã—ãŸã€ 。" + +#: usr/local/www/system_routes.php:115 usr/local/www/fbegin.inc:159 +#: usr/local/www/status_gateway_groups.php:64 +#: usr/local/www/status_gateway_groups.php:75 +#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:62 +#: usr/local/www/system_gateway_groups.php:108 +#: usr/local/www/system_gateway_groups.php:121 +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways.php:120 usr/local/www/system_gateways.php:141 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/diag_logs_routing.php:83 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/fbegin.inc:176 usr/local/www/diag_logs_resolver.php:97 +#: usr/local/www/diag_logs.php:96 usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/diag_logs_wireless.php:85 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_gateways.php:97 +#: usr/local/www/diag_logs_routing.php:84 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/fbegin.inc:184 usr/local/www/diag_logs_resolver.php:98 +#: usr/local/www/system_gateway_groups.php:109 +#: usr/local/www/system_gateway_groups.php:122 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/status_gateways.php:63 +#: usr/local/www/diag_logs_wireless.php:86 +#: usr/local/www/diag_logs_gateways.php:98 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/status_gateway_groups.php:76 +#: usr/local/www/system_routes.php:119 usr/local/www/fbegin.inc:175 +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/system_gateway_groups.php:118 +#: usr/local/www/system_gateway_groups.php:131 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_routes.php:134 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/diag_logs_routing.php:84 usr/local/www/diag_logs.php:96 +#: usr/local/www/system_routes.php:134 usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_gateways.php:98 +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/status_gateway_groups.php:76 usr/local/www/fbegin.inc:175 +#: usr/local/www/system_gateways.php:120 usr/local/www/system_gateways.php:141 +#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:63 +#: usr/local/www/diag_logs_wireless.php:86 +#: usr/local/www/system_gateway_groups.php:118 +#: usr/local/www/system_gateway_groups.php:131 +#: usr/local/www/diag_logs_resolver.php:98 +msgid "Gateways" +msgstr "ゲートウェイ" + +#: usr/local/www/system_routes.php:116 usr/local/www/fbegin.inc:204 +#: usr/local/www/system_gateway_groups.php:109 +#: usr/local/www/system_gateways.php:142 usr/local/www/fbegin.inc:222 +#: usr/local/www/fbegin.inc:230 usr/local/www/system_gateway_groups.php:110 +#: usr/local/www/system_routes.php:120 +#: usr/local/www/system_gateway_groups.php:119 +#: usr/local/www/system_routes.php:135 usr/local/www/system_routes.php:135 +#: usr/local/www/fbegin.inc:222 usr/local/www/system_gateways.php:142 +#: usr/local/www/system_gateway_groups.php:119 +msgid "Routes" +msgstr "ルート" + +#: usr/local/www/system_routes.php:161 usr/local/www/system_routes.php:172 +#: usr/local/www/system_routes.php:176 usr/local/www/system_routes.php:192 +#: usr/local/www/system_routes.php:192 +msgid "Do you really want to delete this route?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ«ãƒ¼ãƒˆã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_routes.php:188 usr/local/www/system_routes.php:199 +#: usr/local/www/system_routes.php:203 usr/local/www/system_routes.php:219 +#: usr/local/www/system_routes.php:219 +msgid "" +"Do not enter static routes for networks assigned on any interface of this " +"firewall. Static routes are only used for networks reachable via a " +"different router, and not reachable via your default gateway." +msgstr "ファイアウォール"ã“ã®ã„ãšã‚Œã‹ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã§å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç”¨ã®ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã‚’入力ã—ãªã„ã§ãã ã•ã„〠。スタティックルートã¯ã€ãƒ‡ãƒ•ォルトゲートウェイを経由ã—ã¦ã€Œåˆ¥ã®ãƒ«ãƒ¼ã‚¿ã€ãŠã‚ˆã³åˆ°é”ã§ããªã„経由ã§åˆ°é”å¯èƒ½ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãŸã‚ã«ã®ã¿ä½¿ç”¨ã•れã¦ã„る。" + +#: usr/local/www/system_routes_edit.php:89 +#: usr/local/www/system_routes_edit.php:179 +#: usr/local/www/system_routes_edit.php:90 +#: usr/local/www/system_routes_edit.php:216 +#: usr/local/www/system_routes_edit.php:217 +#: usr/local/www/system_routes_edit.php:93 +#: usr/local/www/system_routes_edit.php:244 +#: usr/local/www/system_routes_edit.php:246 +#: usr/local/www/system_routes_edit.php:95 +#: usr/local/www/system_routes_edit.php:240 +msgid "Destination network" +msgstr "é€ä¿¡å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/system_routes_edit.php:90 +#: usr/local/www/system_routes_edit.php:91 +#: usr/local/www/system_routes_edit.php:94 +#: usr/local/www/system_routes_edit.php:96 +msgid "Destination network bit count" +msgstr "宛先ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ット数" + +#: usr/local/www/system_routes_edit.php:96 +#: usr/local/www/system_routes_edit.php:97 +#: usr/local/www/system_routes_edit.php:100 +#: usr/local/www/system_routes_edit.php:102 +msgid "A valid IPv4 or IPv6 destination network must be specified." +msgstr "有効ãªIPv4ã¾ãŸã¯IPv6宛先ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_routes_edit.php:99 +#: usr/local/www/system_routes_edit.php:100 +#: usr/local/www/system_routes_edit.php:103 +#: usr/local/www/system_routes_edit.php:105 +msgid "A valid destination network bit count must be specified." +msgstr "有効ãªå®›å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_routes_edit.php:114 +#: usr/local/www/system_routes_edit.php:118 +#: usr/local/www/system_routes_edit.php:121 +#: usr/local/www/system_routes_edit.php:123 +msgid "A IPv4 subnet can not be over 32 bits." +msgstr "IPv4サブãƒãƒƒãƒˆã¯32ビットを超ãˆã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_routes_edit.php:123 +msgid "A route to this destination network already exists." +msgstr "ã“ã®å®›å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒ«ãƒ¼ãƒˆãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_routes_edit.php:165 +#: usr/local/www/system_routes_edit.php:198 +#: usr/local/www/system_routes_edit.php:227 +#: usr/local/www/system_routes_edit.php:229 +#: usr/local/www/system_routes_edit.php:223 +msgid "Edit route" +msgstr "編集ルート" + +#: usr/local/www/system_routes_edit.php:176 +#: usr/local/www/system_routes_edit.php:213 +#: usr/local/www/system_routes_edit.php:214 +#: usr/local/www/system_routes_edit.php:241 +#: usr/local/www/system_routes_edit.php:243 +#: usr/local/www/system_routes_edit.php:237 +msgid "Edit route entry" +msgstr "編集ルートエントリ" + +#: usr/local/www/system_routes_edit.php:196 +#: usr/local/www/system_routes_edit.php:228 +#: usr/local/www/system_routes_edit.php:229 +#: usr/local/www/system_routes_edit.php:256 +#: usr/local/www/system_routes_edit.php:257 +#: usr/local/www/system_routes_edit.php:251 +msgid "Destination network for this static route" +msgstr "ã“ã®é™çš„ルートã®å®›å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/system_routes_edit.php:212 +#: usr/local/www/system_routes_edit.php:244 +#: usr/local/www/system_routes_edit.php:245 +#: usr/local/www/system_routes_edit.php:272 +#: usr/local/www/system_routes_edit.php:274 +#: usr/local/www/system_routes_edit.php:268 +msgid "Choose which gateway this route applies to or" +msgstr "ã“ã®ãƒ«ãƒ¼ãƒˆã¯ã€ORã«é©ç”¨ã•れã¦ã„ã‚‹ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã™ã‚‹" + +#: usr/local/www/system_routes_edit.php:228 +#: usr/local/www/system_routes_edit.php:260 +#: usr/local/www/system_routes_edit.php:261 +#: usr/local/www/system_routes_edit.php:287 +#: usr/local/www/system_routes_edit.php:291 +#: usr/local/www/system_routes_edit.php:285 +msgid "Default gateway:" +msgstr "デフォルトゲートウェイ:" + +#: usr/local/www/system_routes_edit.php:231 +#: usr/local/www/system_routes_edit.php:263 +#: usr/local/www/system_routes_edit.php:264 +#: usr/local/www/system_routes_edit.php:290 +#: usr/local/www/system_routes_edit.php:294 +#: usr/local/www/system_routes_edit.php:288 +msgid "Interface:" +msgstr "インターフェース:" + +#: usr/local/www/system_routes_edit.php:243 +#: usr/local/www/system_routes_edit.php:275 +#: usr/local/www/system_routes_edit.php:276 +#: usr/local/www/system_routes_edit.php:302 +#: usr/local/www/system_routes_edit.php:308 +#: usr/local/www/system_routes_edit.php:302 +msgid "Gateway IP:" +msgstr "ゲートウェイIP :" + +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/system_routes_edit.php:374 +#: usr/local/www/system_routes_edit.php:375 +#: usr/local/www/system_routes_edit.php:399 +#: usr/local/www/system_routes_edit.php:409 +#: usr/local/www/system_routes_edit.php:403 +#, php-format +msgid "You can manage Gateways %shere%s." +msgstr "ã‚ãªãŸã¯ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤%shere%sを管ç†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/system_routes_edit.php:337 +#: usr/local/www/system_routes_edit.php:377 +#: usr/local/www/system_routes_edit.php:378 +#: usr/local/www/system_routes_edit.php:402 +#: usr/local/www/system_routes_edit.php:412 +#: usr/local/www/system_routes_edit.php:406 +msgid "Sorry, we could not create your gateway at this time." +msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€ã“ã®æ™‚点ã§ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/diag_logs_filter_summary.php:34 +msgid "Firewall Log Summary" +msgstr "ファイアウォールã®ãƒ­ã‚°ã®æ¦‚è¦" + +#: usr/local/www/diag_logs_filter_summary.php:45 +#: usr/local/www/load_balancer_relay_protocol_edit.php:230 +#: usr/local/www/load_balancer_relay_protocol_edit.php:228 +#: usr/local/www/diag_logs_filter_summary.php:46 +#: usr/local/www/load_balancer_relay_protocol_edit.php:228 +#: usr/local/www/diag_logs_filter_summary.php:46 +msgid "Actions" +msgstr "アクション" + +#: usr/local/www/diag_logs_filter_summary.php:47 +#: usr/local/www/diag_logs_filter_summary.php:48 +#: usr/local/www/diag_logs_filter_summary.php:48 +msgid "Protocols" +msgstr "プロトコル" + +#: usr/local/www/diag_logs_filter_summary.php:48 +#: usr/local/www/diag_logs_filter_summary.php:49 +#: usr/local/www/diag_logs_filter_summary.php:49 +msgid "Source IPs" +msgstr "é€ä¿¡å…ƒIP" + +#: usr/local/www/diag_logs_filter_summary.php:49 +#: usr/local/www/diag_logs_filter_summary.php:50 +#: usr/local/www/diag_logs_filter_summary.php:50 +msgid "Destination IPs" +msgstr "é€ä¿¡å…ˆIPアドレス" + +#: usr/local/www/diag_logs_filter_summary.php:50 +#: usr/local/www/diag_logs_filter_summary.php:51 +#: usr/local/www/diag_logs_filter_summary.php:51 +msgid "Source Ports" +msgstr "é€ä¿¡å…ƒãƒãƒ¼ãƒˆ" + +#: usr/local/www/diag_logs_filter_summary.php:51 +#: usr/local/www/diag_logs_filter_summary.php:52 +#: usr/local/www/diag_logs_filter_summary.php:52 +msgid "Destination Ports" +msgstr "宛先ãƒãƒ¼ãƒˆ" + +#: usr/local/www/diag_logs_filter_summary.php:71 +#: usr/local/www/diag_logs_filter_summary.php:72 +#: usr/local/www/diag_logs_filter_summary.php:72 +msgid "data" +msgstr "データ" + +#: usr/local/www/diag_logs_filter_summary.php:208 +#: usr/local/www/diag_logs_filter_summary.php:207 +#: usr/local/www/diag_logs_filter_summary.php:208 +#, php-format +msgid "" +"This is a firewall log summary, of the last %1$s lines of the firewall log " +"(Max %2$s)." +msgstr "(最大%2$s ) "ã“れã¯ã€ãƒ•ァイアウォールã®ãƒ­ã‚°ã®æœ€å¾Œã¯%1$sç·šã‹ã‚‰ã€ãƒ•ァイアウォールã®ãƒ­ã‚°ã‚’ã¾ã¨ã‚ãŸã‚‚ã®ã§ã™ã€ 。" + +#: usr/local/www/diag_logs_filter_summary.php:209 +#: usr/local/www/diag_logs_filter_summary.php:208 +#: usr/local/www/diag_logs_filter_summary.php:209 +msgid "NOTE: IE8 users must enable compatibility view." +msgstr "注: IE8ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒäº’æ›è¡¨ç¤ºã‚’有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/uploadconfig.php:48 usr/local/www/uploadconfig.php:48 +msgid "ERR Could not save configuration." +msgstr "ERR設定をä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/uploadconfig.php:54 usr/local/www/uploadconfig.php:54 +msgid "OK" +msgstr "[OK]" + +#: usr/local/www/uploadconfig.php:57 usr/local/www/uploadconfig.php:57 +msgid "ERR Could not install configuration." +msgstr "ERR設定をインストールã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/uploadconfig.php:60 usr/local/www/uploadconfig.php:60 +msgid "ERR Invalid configuration received." +msgstr "ERR無効ãªè¨­å®šã‚’å—ä¿¡ã—ã¾ã—ãŸã€‚" + +#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86 +#: usr/local/www/vpn_ipsec_mobile.php:303 usr/local/www/vpn_ipsec.php:133 +#: usr/local/www/vpn_ipsec_mobile.php:330 usr/local/www/vpn_ipsec_keys.php:85 +#: usr/local/www/vpn_ipsec.php:139 usr/local/www/vpn_ipsec.php:139 +#: usr/local/www/vpn_ipsec_mobile.php:330 usr/local/www/vpn_ipsec_keys.php:85 +msgid "The IPsec tunnel configuration has been changed" +msgstr "IPsecトンãƒãƒ«ã®è¨­å®šãŒå¤‰æ›´ã•れã¾ã—ãŸ" + +#: usr/local/www/vpn_ipsec.php:141 usr/local/www/vpn_ipsec_keys.php:93 +#: usr/local/www/vpn_ipsec_mobile.php:318 +#: usr/local/www/vpn_ipsec_phase1.php:497 +#: usr/local/www/vpn_ipsec_phase2.php:381 +#: usr/local/www/vpn_ipsec_phase2.php:407 usr/local/www/vpn_ipsec.php:140 +#: usr/local/www/vpn_ipsec_mobile.php:345 usr/local/www/vpn_ipsec_keys.php:92 +#: usr/local/www/vpn_ipsec_phase2.php:473 +#: usr/local/www/vpn_ipsec_phase1.php:496 usr/local/www/vpn_ipsec.php:146 +#: usr/local/www/vpn_ipsec_phase1.php:517 +#: usr/local/www/vpn_ipsec_phase2.php:495 usr/local/www/vpn_ipsec.php:146 +#: usr/local/www/vpn_ipsec_phase1.php:517 +#: usr/local/www/vpn_ipsec_mobile.php:345 usr/local/www/vpn_ipsec_keys.php:92 +#: usr/local/www/vpn_ipsec_phase2.php:495 +msgid "Tunnels" +msgstr "トンãƒãƒ«" + +#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94 +#: usr/local/www/vpn_ipsec_mobile.php:319 +#: usr/local/www/vpn_ipsec_phase1.php:498 +#: usr/local/www/vpn_ipsec_phase2.php:382 +#: usr/local/www/vpn_ipsec_phase2.php:408 usr/local/www/vpn_ipsec.php:141 +#: usr/local/www/vpn_ipsec_mobile.php:346 usr/local/www/vpn_ipsec_keys.php:93 +#: usr/local/www/vpn_ipsec_phase2.php:474 +#: usr/local/www/vpn_ipsec_phase1.php:497 usr/local/www/vpn_ipsec.php:147 +#: usr/local/www/vpn_ipsec_phase1.php:518 +#: usr/local/www/vpn_ipsec_phase2.php:496 usr/local/www/vpn_ipsec.php:147 +#: usr/local/www/vpn_ipsec_phase1.php:518 +#: usr/local/www/vpn_ipsec_mobile.php:346 usr/local/www/vpn_ipsec_keys.php:93 +#: usr/local/www/vpn_ipsec_phase2.php:496 +msgid "Mobile clients" +msgstr "モãƒã‚¤ãƒ«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆ" + +#: usr/local/www/vpn_ipsec.php:143 usr/local/www/vpn_ipsec_keys.php:95 +#: usr/local/www/vpn_ipsec_mobile.php:320 +#: usr/local/www/vpn_ipsec_phase1.php:499 +#: usr/local/www/vpn_ipsec_phase2.php:383 +#: usr/local/www/vpn_ipsec_phase2.php:409 +msgid "Pre-shared keys" +msgstr "事å‰å…±æœ‰éµ" + +#: usr/local/www/vpn_ipsec.php:160 usr/local/www/vpn_ipsec.php:159 +#: usr/local/www/vpn_ipsec.php:165 usr/local/www/vpn_ipsec.php:165 +msgid "Enable IPsec" +msgstr "IPsecã®ã‚’å¯èƒ½ã«ã™ã‚‹" + +#: usr/local/www/vpn_ipsec.php:221 usr/local/www/vpn_ipsec.php:351 +#: usr/local/www/vpn_ipsec_phase2.php:552 usr/local/www/vpn_ipsec.php:232 +#: usr/local/www/vpn_ipsec.php:362 usr/local/www/vpn_ipsec_phase2.php:578 +#: usr/local/www/vpn_ipsec.php:231 usr/local/www/vpn_ipsec.php:361 +#: usr/local/www/vpn_ipsec_phase2.php:680 usr/local/www/vpn_ipsec.php:237 +#: usr/local/www/vpn_ipsec.php:367 usr/local/www/vpn_ipsec_phase2.php:701 +#: usr/local/www/vpn_ipsec.php:237 usr/local/www/vpn_ipsec.php:367 +#: usr/local/www/vpn_ipsec_phase2.php:701 +msgid "auto" +msgstr "オート" + +#: usr/local/www/vpn_ipsec.php:223 usr/local/www/vpn_ipsec.php:353 +#: usr/local/www/system_camanager.php:465 +#: usr/local/www/system_certmanager.php:578 +#: usr/local/www/vpn_ipsec_phase2.php:563 +#: usr/local/www/vpn_openvpn_server.php:864 usr/local/www/vpn_ipsec.php:234 +#: usr/local/www/vpn_ipsec.php:364 usr/local/www/system_certmanager.php:677 +#: usr/local/www/vpn_openvpn_server.php:937 +#: usr/local/www/system_camanager.php:466 +#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/vpn_ipsec.php:233 +#: usr/local/www/vpn_ipsec.php:363 usr/local/www/vpn_openvpn_server.php:965 +#: usr/local/www/vpn_ipsec_phase2.php:691 +#: usr/local/www/system_camanager.php:473 usr/local/www/vpn_ipsec.php:239 +#: usr/local/www/vpn_ipsec.php:369 usr/local/www/system_certmanager.php:686 +#: usr/local/www/vpn_openvpn_server.php:992 +#: usr/local/www/vpn_ipsec_phase2.php:712 +#: usr/local/www/system_certmanager.php:687 +#: usr/local/www/system_camanager.php:473 usr/local/www/vpn_ipsec.php:239 +#: usr/local/www/vpn_ipsec.php:369 usr/local/www/system_certmanager.php:687 +#: usr/local/www/vpn_openvpn_server.php:992 +#: usr/local/www/vpn_ipsec_phase2.php:712 +msgid "bits" +msgstr "ビット" + +#: usr/local/www/vpn_ipsec.php:243 usr/local/www/vpn_ipsec.php:254 +#: usr/local/www/vpn_ipsec.php:253 usr/local/www/vpn_ipsec.php:259 +#: usr/local/www/vpn_ipsec.php:259 +msgid "edit phase1 entry" +msgstr "フェーズ1ã®ã‚¨ãƒ³ãƒˆãƒªã‚’編集" + +#: usr/local/www/vpn_ipsec.php:247 usr/local/www/vpn_ipsec.php:258 +#: usr/local/www/vpn_ipsec.php:257 usr/local/www/vpn_ipsec.php:263 +#: usr/local/www/vpn_ipsec.php:263 +msgid "" +"Do you really want to delete this phase1 and all associated phase2 entries?" +msgstr "「ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ•ェーズ1ãŠã‚ˆã³é–¢é€£ã™ã‚‹ã™ã¹ã¦ã®ãƒ•ェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/vpn_ipsec.php:248 usr/local/www/vpn_ipsec.php:259 +#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:264 +#: usr/local/www/vpn_ipsec.php:264 +msgid "delete phase1 entry" +msgstr "フェーズ1ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除" + +#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:269 +#: usr/local/www/vpn_ipsec.php:268 usr/local/www/vpn_ipsec.php:274 +#: usr/local/www/vpn_ipsec.php:274 +msgid "copy phase1 entry" +msgstr "コピーフェーズ1エントリ" + +#: usr/local/www/vpn_ipsec.php:279 usr/local/www/vpn_ipsec.php:290 +#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:295 +#: usr/local/www/vpn_ipsec.php:295 +#, php-format +msgid "Show %s Phase-2 entries" +msgstr "%sフェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’表示ã™ã‚‹" + +#: usr/local/www/vpn_ipsec.php:285 usr/local/www/vpn_ipsec.php:296 +#: usr/local/www/vpn_ipsec.php:295 usr/local/www/vpn_ipsec.php:301 +#: usr/local/www/vpn_ipsec.php:301 +msgid "Local Subnet" +msgstr "ローカルサブãƒãƒƒãƒˆ" + +#: usr/local/www/vpn_ipsec.php:286 usr/local/www/vpn_ipsec.php:297 +#: usr/local/www/vpn_ipsec.php:296 usr/local/www/vpn_ipsec.php:302 +#: usr/local/www/vpn_ipsec.php:302 +msgid "Remote Subnet" +msgstr "リモートサブãƒãƒƒãƒˆ" + +#: usr/local/www/vpn_ipsec.php:288 usr/local/www/vpn_ipsec.php:299 +#: usr/local/www/vpn_ipsec.php:298 usr/local/www/vpn_ipsec.php:304 +#: usr/local/www/vpn_ipsec.php:304 +msgid "P2 Protocol" +msgstr "P2プロトコル" + +#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:300 +#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:305 +#: usr/local/www/vpn_ipsec.php:305 +msgid "P2 Transforms" +msgstr "P2変æ›" + +#: usr/local/www/vpn_ipsec.php:290 usr/local/www/vpn_ipsec.php:301 +#: usr/local/www/vpn_ipsec.php:300 usr/local/www/vpn_ipsec.php:306 +#: usr/local/www/vpn_ipsec.php:306 +msgid "P2 Auth Methods" +msgstr "P2ã¯èªè¨¼æ–¹æ³•" + +#: usr/local/www/vpn_ipsec.php:293 usr/local/www/vpn_ipsec.php:304 +#: usr/local/www/vpn_ipsec.php:303 usr/local/www/vpn_ipsec.php:309 +#: usr/local/www/vpn_ipsec.php:309 +msgid "add phase2 entry" +msgstr "フェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’追加" + +#: usr/local/www/vpn_ipsec.php:373 usr/local/www/vpn_ipsec.php:384 +#: usr/local/www/vpn_ipsec.php:383 usr/local/www/vpn_ipsec.php:389 +#: usr/local/www/vpn_ipsec.php:389 +msgid "edit phase2 entry" +msgstr "フェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’編集" + +#: usr/local/www/vpn_ipsec.php:375 usr/local/www/vpn_ipsec.php:386 +#: usr/local/www/vpn_ipsec.php:385 usr/local/www/vpn_ipsec.php:391 +#: usr/local/www/vpn_ipsec.php:391 +msgid "Do you really want to delete this phase2 entry?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ãƒ•ェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/vpn_ipsec.php:376 usr/local/www/vpn_ipsec.php:387 +#: usr/local/www/vpn_ipsec.php:386 usr/local/www/vpn_ipsec.php:392 +#: usr/local/www/vpn_ipsec.php:392 +msgid "delete phase2 entry" +msgstr "フェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除" + +#: usr/local/www/vpn_ipsec.php:379 usr/local/www/vpn_ipsec.php:390 +#: usr/local/www/vpn_ipsec.php:389 usr/local/www/vpn_ipsec.php:395 +#: usr/local/www/vpn_ipsec.php:395 +msgid "add a new Phase 2 based on this one" +msgstr "ã“ã®1ã«åŸºã¥ã„ã¦ã€æ–°ã—ã„フェーズ2を追加" + +#: usr/local/www/vpn_ipsec.php:410 usr/local/www/vpn_ipsec.php:421 +#: usr/local/www/vpn_ipsec.php:420 usr/local/www/vpn_ipsec.php:426 +#: usr/local/www/vpn_ipsec.php:426 +msgid "add phase1 entry" +msgstr "フェーズ1ã®ã‚¨ãƒ³ãƒˆãƒªã‚’追加" + +#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435 +#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440 +#: usr/local/www/vpn_ipsec.php:440 +msgid "You can check your IPsec status at" +msgstr "ã‚ãªãŸãŒã§ã‚ãªãŸã®IPsecã®çŠ¶æ…‹ã‚’ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435 +#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440 +#: usr/local/www/vpn_ipsec.php:440 +msgid "Status:IPsec" +msgstr "ステータス: IPsecã®" + +#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:436 +#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441 +#: usr/local/www/vpn_ipsec.php:441 +msgid "IPsec Debug Mode can be enabled at" +msgstr "IPsecã®ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã‚’有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:426 +#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:437 +#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441 +#: usr/local/www/vpn_ipsec.php:442 usr/local/www/vpn_ipsec.php:441 +#: usr/local/www/vpn_ipsec.php:442 +msgid "System:Advanced:Miscellaneous" +msgstr "システム:高度:ãã®ä»–" + +#: usr/local/www/vpn_ipsec.php:426 usr/local/www/vpn_ipsec.php:437 +#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:442 +#: usr/local/www/vpn_ipsec.php:442 +msgid "IPsec can be set to prefer older SAs at" +msgstr "IPsecã¯ã€å¤ã„SAã®æ™‚を好むよã†ã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/vpn_ipsec.php:456 usr/local/www/vpn_ipsec.php:467 +#: usr/local/www/vpn_ipsec.php:466 usr/local/www/vpn_ipsec.php:472 +#: usr/local/www/vpn_ipsec.php:472 +msgid "Remote Gateway" +msgstr "リモートゲートウェイ" + +#: usr/local/www/vpn_ipsec.php:458 usr/local/www/vpn_ipsec.php:469 +#: usr/local/www/vpn_ipsec.php:468 usr/local/www/vpn_ipsec.php:474 +#: usr/local/www/vpn_ipsec.php:474 +msgid "P1 Protocol" +msgstr "P1プロトコル" + +#: usr/local/www/vpn_ipsec.php:459 usr/local/www/vpn_ipsec.php:470 +#: usr/local/www/vpn_ipsec.php:469 usr/local/www/vpn_ipsec.php:475 +#: usr/local/www/vpn_ipsec.php:475 +msgid "P1 Transforms" +msgstr "P1変æ›" + +#: usr/local/www/vpn_ipsec.php:460 usr/local/www/vpn_ipsec.php:471 +#: usr/local/www/vpn_ipsec.php:470 usr/local/www/vpn_ipsec.php:476 +#: usr/local/www/vpn_ipsec.php:476 +msgid "P1 Description" +msgstr "P1ã®èª¬æ˜Ž" + +#: usr/local/www/diag_logs_ppp.php:91 usr/local/www/diag_logs_ppp.php:90 +#: usr/local/www/diag_logs_ppp.php:88 usr/local/www/diag_logs_ppp.php:88 +#, php-format +msgid "Last %s PPP log entries" +msgstr "最後%sã®PPPログエントリ" + +#: usr/local/www/diag_logs_relayd.php:87 usr/local/www/diag_logs_relayd.php:86 +#: usr/local/www/diag_logs_relayd.php:87 +#, php-format +msgid "Last %s Load Balancer log entries" +msgstr "最後%sロードãƒãƒ©ãƒ³ã‚µã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª" + +#: usr/local/www/graph.php:112 usr/local/www/graph.php:112 +msgid "In" +msgstr "ã§" + +#: usr/local/www/graph.php:113 usr/local/www/graph.php:113 +msgid "Out" +msgstr "アウト" + +#: usr/local/www/graph.php:117 usr/local/www/graph.php:117 +msgid "Switch to bytes/s" +msgstr "ãƒã‚¤ãƒˆ/ç§’ã«åˆ‡ã‚Šæ›¿ãˆã‚‹" + +#: usr/local/www/graph.php:118 usr/local/www/graph.php:118 +msgid "AutoScale" +msgstr "オートスケール" + +#: usr/local/www/graph.php:120 usr/local/www/graph.php:120 +msgid "Graph shows last" +msgstr "グラフã¯ã€æœ€å¾Œã«ç¤ºã—" + +#: usr/local/www/graph.php:195 usr/local/www/graph.php:195 +msgid "Switch to" +msgstr "切り替ãˆã‚‹" + +#: usr/local/www/graph.php:201 usr/local/www/graph.php:201 +msgid "follow" +msgstr "フォロー" + +#: usr/local/www/graph.php:361 usr/local/www/graph.php:361 +msgid "Kbps" +msgstr "kbpsã®" + +#: usr/local/www/graph.php:363 usr/local/www/graph.php:363 +msgid "Mbps" +msgstr "Mbpsã®" + +#: usr/local/www/graph.php:365 usr/local/www/graph.php:365 +msgid "Gbps" +msgstr "Gbpsã®" + +#: usr/local/www/graph.php:371 usr/local/www/graph.php:371 +msgid "KB/s" +msgstr "キロãƒã‚¤ãƒˆ/ç§’" + +#: usr/local/www/graph.php:373 usr/local/www/graph.php:373 +msgid "MB/s" +msgstr "MB /ç§’" + +#: usr/local/www/graph.php:375 usr/local/www/graph.php:375 +msgid "GB/s" +msgstr "GB /ç§’" + +#: usr/local/www/diag_patterns.php:43 +#: usr/local/www/services_captiveportal_filemanager.php:195 +#: usr/local/www/exec.php:290 usr/local/www/exec.php:300 +#: usr/local/www/exec.php:292 usr/local/www/exec.php:302 +#: usr/local/www/services_captiveportal_filemanager.php:192 +#: usr/local/www/exec.php:292 usr/local/www/exec.php:302 +#: usr/local/www/services_captiveportal_filemanager.php:192 +msgid "Upload" +msgstr "アップロード" + +#: usr/local/www/diag_patterns.php:46 usr/local/www/diag_patterns.php:46 +msgid "Uploaded file to" +msgstr "アップロードã•れãŸãƒ•ァイルã¸ã®" + +#: usr/local/www/diag_patterns.php:49 usr/local/www/diag_patterns.php:49 +msgid "Warning: You must upload a file with .pat extension." +msgstr "警告:ã‚ãªãŸã¯ãƒ‘ãƒƒãƒˆã®æ‹¡å¼µå­ã‚’æŒã¤ãƒ•ァイルをアップロードã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_patterns.php:58 +msgid "Add layer7 pattern" +msgstr "レイヤ7パターンを追加" + +#: usr/local/www/diag_patterns.php:69 usr/local/www/diag_patterns.php:69 +msgid "Upload layer7 pattern file" +msgstr "レイヤ7ã®ãƒ‘ターンファイルをアップロード" + +#: usr/local/www/diag_patterns.php:72 usr/local/www/diag_patterns.php:72 +msgid "File to upload:" +msgstr "アップロードã™ã‚‹ãƒ•ァイル:" + +#: usr/local/www/diag_patterns.php:80 usr/local/www/diag_patterns.php:43 +#: usr/local/www/diag_patterns.php:43 usr/local/www/diag_patterns.php:80 +msgid "Upload Pattern file" +msgstr "パターンファイルをアップロード" + +#: usr/local/www/vpn_ipsec_keys.php:64 usr/local/www/vpn_ipsec_keys.php:64 +msgid "Deleted IPsec Pre-Shared Key" +msgstr "削除ã•れãŸIPsecã®äº‹å‰å…±æœ‰ã‚­ãƒ¼" + +#: usr/local/www/vpn_ipsec_keys.php:71 usr/local/www/vpn_ipsec_keys.php:71 +msgid "VPN: IPsec: Keys" +msgstr "VPN : IPsecã®ï¼šã‚­ãƒ¼" + +#: usr/local/www/vpn_ipsec_keys.php:104 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:128 +#: usr/local/www/vpn_ipsec_keys.php:103 +#: usr/local/www/vpn_ipsec_keys_edit.php:127 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:127 +#: usr/local/www/vpn_ipsec_keys.php:103 +msgid "Identifier" +msgstr "識別å­" + +#: usr/local/www/vpn_ipsec_keys.php:105 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:136 +msgid "Pre-shared key" +msgstr "事å‰å…±æœ‰éµ" + +#: usr/local/www/vpn_ipsec_keys.php:110 usr/local/www/vpn_ipsec_keys.php:146 +#: usr/local/www/vpn_ipsec_keys.php:109 usr/local/www/vpn_ipsec_keys.php:145 +#: usr/local/www/vpn_ipsec_keys.php:109 usr/local/www/vpn_ipsec_keys.php:145 +msgid "add key" +msgstr "キーを追加" + +#: usr/local/www/vpn_ipsec_keys.php:123 usr/local/www/vpn_ipsec_keys.php:136 +#: usr/local/www/vpn_ipsec_keys.php:122 usr/local/www/vpn_ipsec_keys.php:135 +#: usr/local/www/vpn_ipsec_keys.php:122 usr/local/www/vpn_ipsec_keys.php:135 +msgid "edit key" +msgstr "EDITキー" + +#: usr/local/www/vpn_ipsec_keys.php:137 +msgid "Do you really want to delete this pre-shared key?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®äº‹å‰å…±æœ‰ã‚­ãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/vpn_ipsec_keys.php:137 usr/local/www/vpn_ipsec_keys.php:136 +#: usr/local/www/vpn_ipsec_keys.php:136 +msgid "delete key" +msgstr "削除キー" + +#: usr/local/www/vpn_ipsec_keys_edit.php:74 +#: usr/local/www/vpn_ipsec_keys_edit.php:74 +msgid "The identifier contains invalid characters." +msgstr "識別å­ã¯ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_keys_edit.php:77 +#: usr/local/www/vpn_ipsec_keys_edit.php:77 +msgid "A user with this name already exists. Add the key to the user instead." +msgstr "ã“ã®åå‰ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚代ã‚りã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚­ãƒ¼ã‚’追加ã—ã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_keys_edit.php:83 +#: usr/local/www/vpn_ipsec_keys_edit.php:83 +msgid "Another entry with the same identifier already exists." +msgstr "åŒã˜è­˜åˆ¥å­ã‚’æŒã¤åˆ¥ã®ã‚¨ãƒ³ãƒˆãƒªãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_keys_edit.php:100 +#: usr/local/www/vpn_ipsec_keys_edit.php:100 +msgid "Edited" +msgstr "編集済ã¿ã®" + +#: usr/local/www/vpn_ipsec_keys_edit.php:103 +#: usr/local/www/vpn_ipsec_keys_edit.php:103 +msgid "Added" +msgstr "追加ã•れãŸ" + +#: usr/local/www/vpn_ipsec_keys_edit.php:114 +msgid "VPN: IPsec: Edit pre-shared key" +msgstr "VPN : IPsecã®ç·¨é›†ï¼šäº‹å‰å…±æœ‰ã‚­ãƒ¼" + +#: usr/local/www/vpn_ipsec_keys_edit.php:132 +#: usr/local/www/vpn_ipsec_keys_edit.php:131 +#: usr/local/www/vpn_ipsec_keys_edit.php:131 +msgid "" +"This can be either an IP address, fully qualified domain name or an e-mail " +"address" +msgstr "アドレス「ã“れã¯ã€IPアドレスã€å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åã¾ãŸã¯é›»å­ãƒ¡ãƒ¼ãƒ«ã®ã„ãšã‚Œã‹ã«ãªã‚Šã¾ã™ã€" + +#: usr/local/www/vpn_ipsec_mobile.php:128 +#: usr/local/www/vpn_ipsec_mobile.php:132 +#: usr/local/www/vpn_ipsec_mobile.php:132 +msgid "User Authentication Source" +msgstr "ユーザーèªè¨¼å…ƒ" + +#: usr/local/www/vpn_ipsec_mobile.php:128 +#: usr/local/www/vpn_ipsec_mobile.php:132 +#: usr/local/www/vpn_ipsec_mobile.php:132 +msgid "Group Authentication Source" +msgstr "グループèªè¨¼å…ƒ" + +#: usr/local/www/vpn_ipsec_mobile.php:134 +#: usr/local/www/vpn_ipsec_mobile.php:138 +#: usr/local/www/vpn_ipsec_mobile.php:138 +msgid "" +"A valid IP address for 'Virtual Address Pool Network' must be specified." +msgstr "「「仮想アドレスプールã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯'ã®æœ‰åйãªIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_mobile.php:138 +#: usr/local/www/vpn_ipsec_mobile.php:142 +#: usr/local/www/vpn_ipsec_mobile.php:142 +msgid "A valid value for 'DNS Default Domain' must be specified." +msgstr "「 DNSã®ãƒ‡ãƒ•ォルトドメインã€ã®æœ‰åйãªå€¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_mobile.php:143 +#: usr/local/www/vpn_ipsec_mobile.php:159 +#: usr/local/www/vpn_ipsec_mobile.php:159 +msgid "" +"At least one DNS server must be specified to enable the DNS Server option." +msgstr "At least one DNS server must be specified to enable the DNS Server option." + +#: usr/local/www/vpn_ipsec_mobile.php:145 +#: usr/local/www/vpn_ipsec_mobile.php:161 +#: usr/local/www/vpn_ipsec_mobile.php:161 +msgid "A valid IP address for 'DNS Server #1' must be specified." +msgstr "「 DNSサーãƒãƒ¼ã®æœ‰åйãªIPアドレス" + +#: usr/local/www/vpn_ipsec_mobile.php:147 +#: usr/local/www/vpn_ipsec_mobile.php:163 +#: usr/local/www/vpn_ipsec_mobile.php:163 +msgid "A valid IP address for 'DNS Server #2' must be specified." +msgstr "「 DNSサーãƒãƒ¼ã®æœ‰åйãªIPアドレス" + +#: usr/local/www/vpn_ipsec_mobile.php:149 +#: usr/local/www/vpn_ipsec_mobile.php:165 +#: usr/local/www/vpn_ipsec_mobile.php:165 +msgid "A valid IP address for 'DNS Server #3' must be specified." +msgstr "「 DNSサーãƒãƒ¼ã®æœ‰åйãªIPアドレス" + +#: usr/local/www/vpn_ipsec_mobile.php:151 +#: usr/local/www/vpn_ipsec_mobile.php:167 +#: usr/local/www/vpn_ipsec_mobile.php:167 +msgid "A valid IP address for 'DNS Server #4' must be specified." +msgstr "「 DNSサーãƒãƒ¼ã®æœ‰åйãªIPアドレス" + +#: usr/local/www/vpn_ipsec_mobile.php:156 +#: usr/local/www/vpn_ipsec_mobile.php:172 +#: usr/local/www/vpn_ipsec_mobile.php:172 +msgid "" +"At least one WINS server must be specified to enable the DNS Server option." +msgstr "å°‘ãªãã¨ã‚‚1 WINSサーãƒã¯ã€DNSサーãƒãƒ¼]オプションを有効ã«ã™ã‚‹ãŸã‚ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_mobile.php:158 +#: usr/local/www/vpn_ipsec_mobile.php:174 +#: usr/local/www/vpn_ipsec_mobile.php:174 +msgid "A valid IP address for 'WINS Server #1' must be specified." +msgstr "ã®æœ‰åйãªIPアドレスã¯ã€ 「 WINSサーãƒãƒ¼" + +#: usr/local/www/vpn_ipsec_mobile.php:160 +#: usr/local/www/vpn_ipsec_mobile.php:176 +#: usr/local/www/vpn_ipsec_mobile.php:176 +msgid "A valid IP address for 'WINS Server #2' must be specified." +msgstr "ã®æœ‰åйãªIPアドレスã¯ã€ 「 WINSサーãƒãƒ¼" + +#: usr/local/www/vpn_ipsec_mobile.php:165 +#: usr/local/www/vpn_ipsec_mobile.php:181 +#: usr/local/www/vpn_ipsec_mobile.php:181 +msgid "A valid value for 'Login Banner' must be specified." +msgstr "「ログインãƒãƒŠãƒ¼ã€ã®æœ‰åйãªå€¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_mobile.php:220 +#: usr/local/www/vpn_ipsec_mobile.php:240 +#: usr/local/www/vpn_ipsec_mobile.php:240 +msgid "Mobile" +msgstr "æºå¸¯é›»è©±" + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "" +"Support for IPsec Mobile clients is enabled but a Phase1 definition was not " +"found" +msgstr "「 IPsecã®ãƒ¢ãƒã‚¤ãƒ«Â·ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚µãƒãƒ¼ãƒˆãŒæœ‰åйã«ãªã£ã¦ã„ã¾ã™ãŒã€ãƒ•ェーズ1ã®å®šç¾©ã¯ã•れã¾ã›ã‚“ã§ã—ãŸ"ãŒè¦‹ã¤ã‹ã‚Š" + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "Please click Create to define one." +msgstr "ã“れらã®ã„ãšã‚Œã‹ã‚’定義ã™ã‚‹ãŸã‚ã«ä½œæˆ]をクリックã—ã¦ãã ã•ã„。" + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "Create Phase1" +msgstr "フェーズ1を作æˆã—ã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/vpn_ipsec_mobile.php:357 +#: usr/local/www/vpn_ipsec_mobile.php:357 +msgid "IKE Extensions" +msgstr "IKEã®æ‹¡å¼µæ©Ÿèƒ½" + +#: usr/local/www/vpn_ipsec_mobile.php:339 +#: usr/local/www/vpn_ipsec_mobile.php:366 +#: usr/local/www/vpn_ipsec_mobile.php:366 +msgid "Enable IPsec Mobile Client Support" +msgstr "IPsecã®ãƒ¢ãƒã‚¤ãƒ«Â·ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/vpn_ipsec_mobile.php:350 +#: usr/local/www/vpn_ipsec_mobile.php:377 +#: usr/local/www/vpn_ipsec_mobile.php:377 +msgid "Extended Authentication (Xauth)" +msgstr "æ‹¡å¼µèªè¨¼ï¼ˆ Xauthã®ï¼‰" + +#: usr/local/www/vpn_ipsec_mobile.php:354 +#: usr/local/www/vpn_ipsec_mobile.php:381 +#: usr/local/www/vpn_ipsec_mobile.php:381 +msgid "User Authentication" +msgstr "ユーザーèªè¨¼" + +#: usr/local/www/vpn_ipsec_mobile.php:358 +#: usr/local/www/vpn_ipsec_mobile.php:379 +#: usr/local/www/vpn_ipsec_mobile.php:404 +#: usr/local/www/vpn_ipsec_mobile.php:404 +msgid "system" +msgstr "システム" + +#: usr/local/www/vpn_ipsec_mobile.php:375 +#: usr/local/www/vpn_ipsec_mobile.php:399 +#: usr/local/www/vpn_ipsec_mobile.php:399 +msgid "Group Authentication" +msgstr "グループèªè¨¼" + +#: usr/local/www/vpn_ipsec_mobile.php:388 +#: usr/local/www/vpn_ipsec_mobile.php:413 +#: usr/local/www/vpn_ipsec_mobile.php:413 +msgid "Client Configuration (mode-cfg)" +msgstr "クライアント構æˆï¼ˆãƒ¢ãƒ¼ãƒ‰CFG )" + +#: usr/local/www/vpn_ipsec_mobile.php:392 +#: usr/local/www/vpn_ipsec_mobile.php:417 +#: usr/local/www/vpn_ipsec_mobile.php:417 +msgid "Virtual Address Pool" +msgstr "仮想アドレスプール" + +#: usr/local/www/vpn_ipsec_mobile.php:401 +#: usr/local/www/vpn_ipsec_mobile.php:426 +#: usr/local/www/vpn_ipsec_mobile.php:426 +msgid "Provide a virtual IP address to clients" +msgstr "クライアントã«ä»®æƒ³IPアドレスをæä¾›ã™ã‚‹" + +#: usr/local/www/vpn_ipsec_mobile.php:424 +#: usr/local/www/vpn_ipsec_mobile.php:449 +#: usr/local/www/vpn_ipsec_mobile.php:449 +msgid "Network List" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚¹ãƒˆ" + +#: usr/local/www/vpn_ipsec_mobile.php:433 +#: usr/local/www/vpn_ipsec_mobile.php:458 +#: usr/local/www/vpn_ipsec_mobile.php:458 +msgid "Provide a list of accessible networks to clients" +msgstr "クライアントã«ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãƒªã‚¹ãƒˆã‚’æä¾›" + +#: usr/local/www/vpn_ipsec_mobile.php:440 +#: usr/local/www/vpn_ipsec_mobile.php:465 +#: usr/local/www/vpn_ipsec_mobile.php:465 +msgid "Save Xauth Password" +msgstr "Xauthã®ãƒ‘スワードをä¿å­˜ã™ã‚‹" + +#: usr/local/www/vpn_ipsec_mobile.php:449 +#: usr/local/www/vpn_ipsec_mobile.php:474 +#: usr/local/www/vpn_ipsec_mobile.php:474 +msgid "Allow clients to save Xauth passwords (Cisco VPN client only)." +msgstr "クライアントãŒXauthã®ãƒ‘スワードをä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼ˆCisco VPNクライアントã®ã¿ï¼‰ 。" + +#: usr/local/www/vpn_ipsec_mobile.php:450 +#: usr/local/www/vpn_ipsec_mobile.php:475 +#: usr/local/www/vpn_ipsec_mobile.php:475 +msgid "" +"NOTE: With iPhone clients, this does not work when deployed via the iPhone " +"configuration utility, only by manual entry." +msgstr ""注: iPhone経由ã§å±•é–‹ã•れãŸã¨ãã€iPhoneã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã€ã“れãŒå‹•作ã—ãªã„ã€ã ã‘手入力ã«ã‚ˆã£ã¦ã€ã‚³ãƒ³ãƒ•ィギュレーションユーティリティ。" + +#: usr/local/www/vpn_ipsec_mobile.php:457 +#: usr/local/www/vpn_openvpn_csc.php:433 +#: usr/local/www/vpn_openvpn_server.php:1194 +#: usr/local/www/vpn_openvpn_server.php:1336 +#: usr/local/www/vpn_ipsec_mobile.php:482 +#: usr/local/www/vpn_openvpn_csc.php:432 +#: usr/local/www/vpn_openvpn_server.php:1378 +#: usr/local/www/vpn_openvpn_server.php:1430 +#: usr/local/www/vpn_openvpn_csc.php:432 +#: usr/local/www/vpn_ipsec_mobile.php:482 +#: usr/local/www/vpn_openvpn_server.php:1430 +msgid "DNS Default Domain" +msgstr "DNSã®ãƒ‡ãƒ•ォルトドメイン" + +#: usr/local/www/vpn_ipsec_mobile.php:466 +#: usr/local/www/vpn_openvpn_csc.php:443 +#: usr/local/www/vpn_openvpn_server.php:1204 +#: usr/local/www/vpn_openvpn_server.php:1346 +#: usr/local/www/vpn_ipsec_mobile.php:491 +#: usr/local/www/vpn_openvpn_csc.php:442 +#: usr/local/www/vpn_openvpn_server.php:1388 +#: usr/local/www/vpn_openvpn_server.php:1440 +#: usr/local/www/vpn_openvpn_csc.php:442 +#: usr/local/www/vpn_ipsec_mobile.php:491 +#: usr/local/www/vpn_openvpn_server.php:1440 +msgid "Provide a default domain name to clients" +msgstr "クライアントã«ãƒ‡ãƒ•ォルトã®ãƒ‰ãƒ¡ã‚¤ãƒ³åã‚’æä¾›" + +#: usr/local/www/vpn_ipsec_mobile.php:480 +#: usr/local/www/vpn_openvpn_csc.php:458 +#: usr/local/www/vpn_openvpn_server.php:1219 +#: usr/local/www/vpn_openvpn_server.php:1361 +#: usr/local/www/vpn_ipsec_mobile.php:529 +#: usr/local/www/vpn_openvpn_csc.php:457 +#: usr/local/www/vpn_openvpn_server.php:1403 +#: usr/local/www/vpn_openvpn_server.php:1455 +#: usr/local/www/vpn_openvpn_csc.php:457 +#: usr/local/www/vpn_ipsec_mobile.php:529 +#: usr/local/www/vpn_openvpn_server.php:1455 +msgid "DNS Servers" +msgstr "DNSサーãƒãƒ¼" + +#: usr/local/www/vpn_ipsec_mobile.php:489 +#: usr/local/www/vpn_openvpn_csc.php:468 +#: usr/local/www/vpn_openvpn_server.php:1229 +#: usr/local/www/vpn_openvpn_server.php:1371 +#: usr/local/www/vpn_ipsec_mobile.php:538 +#: usr/local/www/vpn_openvpn_csc.php:467 +#: usr/local/www/vpn_openvpn_server.php:1413 +#: usr/local/www/vpn_openvpn_server.php:1465 +#: usr/local/www/vpn_openvpn_csc.php:467 +#: usr/local/www/vpn_ipsec_mobile.php:538 +#: usr/local/www/vpn_openvpn_server.php:1465 +msgid "Provide a DNS server list to clients" +msgstr "クライアントã«ã€DNSサーãƒãƒªã‚¹ãƒˆã‚’æä¾›" + +#: usr/local/www/vpn_ipsec_mobile.php:522 +#: usr/local/www/vpn_openvpn_csc.php:606 +#: usr/local/www/vpn_openvpn_server.php:1367 +#: usr/local/www/vpn_openvpn_server.php:1509 +#: usr/local/www/vpn_ipsec_mobile.php:571 +#: usr/local/www/vpn_openvpn_csc.php:605 +#: usr/local/www/vpn_openvpn_server.php:1551 +#: usr/local/www/vpn_openvpn_server.php:1603 +#: usr/local/www/vpn_openvpn_csc.php:605 +#: usr/local/www/vpn_ipsec_mobile.php:571 +#: usr/local/www/vpn_openvpn_server.php:1603 +msgid "WINS Servers" +msgstr "WINSサーãƒãƒ¼" + +#: usr/local/www/vpn_ipsec_mobile.php:531 +#: usr/local/www/vpn_openvpn_csc.php:616 +#: usr/local/www/vpn_openvpn_server.php:1377 +#: usr/local/www/vpn_openvpn_server.php:1519 +#: usr/local/www/vpn_ipsec_mobile.php:580 +#: usr/local/www/vpn_openvpn_csc.php:615 +#: usr/local/www/vpn_openvpn_server.php:1561 +#: usr/local/www/vpn_openvpn_server.php:1613 +#: usr/local/www/vpn_openvpn_csc.php:615 +#: usr/local/www/vpn_ipsec_mobile.php:580 +#: usr/local/www/vpn_openvpn_server.php:1613 +msgid "Provide a WINS server list to clients" +msgstr "クライアントã«ã€WINSサーãƒãƒ¼ã®ä¸€è¦§ã‚’æä¾›" + +#: usr/local/www/vpn_ipsec_mobile.php:552 +#: usr/local/www/vpn_ipsec_mobile.php:601 +#: usr/local/www/vpn_ipsec_mobile.php:601 +msgid "Phase2 PFS Group" +msgstr "フェーズ2 PFSグループ" + +#: usr/local/www/vpn_ipsec_mobile.php:561 +#: usr/local/www/vpn_ipsec_mobile.php:610 +#: usr/local/www/vpn_ipsec_mobile.php:610 +msgid "" +"Provide the Phase2 PFS group to clients ( overrides all mobile phase2 " +"settings )" +msgstr "「 (設定クライアントã¸ã®ãƒ•ェーズ2 PFSグループをæä¾›ã™ã‚‹ã™ã¹ã¦ã®ãƒ¢ãƒã‚¤ãƒ«Â·ãƒ•ェーズ2を上書ãã—ã¾ã™")" + +#: usr/local/www/vpn_ipsec_mobile.php:568 +#: usr/local/www/system_groupmanager.php:71 +#: usr/local/www/vpn_ipsec_mobile.php:617 +#: usr/local/www/system_groupmanager.php:71 +#: usr/local/www/vpn_ipsec_mobile.php:617 +msgid "Group" +msgstr "グループ" + +#: usr/local/www/vpn_ipsec_mobile.php:582 +#: usr/local/www/vpn_ipsec_mobile.php:631 +#: usr/local/www/vpn_ipsec_mobile.php:631 +msgid "Login Banner" +msgstr "ログインãƒãƒŠãƒ¼" + +#: usr/local/www/vpn_ipsec_mobile.php:591 +#: usr/local/www/vpn_ipsec_mobile.php:640 +#: usr/local/www/vpn_ipsec_mobile.php:640 +msgid "Provide a login banner to clients" +msgstr "クライアントã¸ã®ãƒ­ã‚°ã‚¤ãƒ³ãƒãƒŠãƒ¼ã‚’æä¾›" + +#: usr/local/www/interfaces_lagg.php:70 usr/local/www/interfaces_lagg.php:74 +#: usr/local/www/interfaces_lagg.php:74 +msgid "This LAGG interface cannot be deleted because it is still being used." +msgstr "ãれã¯ã¾ã ä½¿ç”¨ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®LAGGインターフェイスを削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/interfaces_lagg.php:140 usr/local/www/interfaces_lagg.php:141 +#: usr/local/www/interfaces_lagg.php:145 usr/local/www/interfaces_lagg.php:145 +msgid "" +"LAGG allows for link aggregation, bonding and fault tolerance. Only " +"unassigned interfaces can be added to LAGG." +msgstr "「 LAGG ã€ãƒªãƒ³ã‚¯ã‚¢ã‚°ãƒªã‚²ãƒ¼ã‚·ãƒ§ãƒ³ã€ãƒœãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãŠã‚ˆã³è€éšœå®³æ€§ã‚’å¯èƒ½ã«ã—ã¾ã™ã€‚ã®ã¿"未割り当ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã¯LAGGã«è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/interfaces_lagg_edit.php:86 +#: usr/local/www/interfaces_lagg_edit.php:88 +#: usr/local/www/interfaces_lagg_edit.php:88 +msgid "Lagg protocol" +msgstr "Laggプロトコル" + +#: usr/local/www/interfaces_lagg_edit.php:131 +#: usr/local/www/interfaces_lagg_edit.php:132 +#: usr/local/www/interfaces_lagg_edit.php:145 +#: usr/local/www/interfaces_lagg_edit.php:145 +msgid "LAGG configuration" +msgstr "LAGGæ§‹æˆ" + +#: usr/local/www/interfaces_lagg_edit.php:149 +#: usr/local/www/interfaces_lagg_edit.php:150 +#: usr/local/www/interfaces_lagg_edit.php:163 +#: usr/local/www/interfaces_lagg_edit.php:163 +msgid "Choose the members that will be used for the link aggregation" +msgstr "リンクアグリゲーションã®ãŸã‚ã«ä½¿ç”¨ã•れるメンãƒãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„" + +#: usr/local/www/interfaces_lagg_edit.php:152 +#: usr/local/www/interfaces_lagg_edit.php:153 +#: usr/local/www/interfaces_lagg_edit.php:166 +#: usr/local/www/interfaces_lagg_edit.php:166 +msgid "Lag proto" +msgstr "原始é…れ" + +#: usr/local/www/interfaces_lagg_edit.php:168 +#: usr/local/www/interfaces_lagg_edit.php:169 +#: usr/local/www/interfaces_lagg_edit.php:182 +#: usr/local/www/interfaces_lagg_edit.php:181 +#: usr/local/www/interfaces_lagg_edit.php:181 +msgid "failover" +msgstr "フェイルオーãƒãƒ¼" + +#: usr/local/www/interfaces_lagg_edit.php:169 +#: usr/local/www/interfaces_lagg_edit.php:170 +#: usr/local/www/interfaces_lagg_edit.php:183 +#: usr/local/www/interfaces_lagg_edit.php:182 +#: usr/local/www/interfaces_lagg_edit.php:182 +msgid "" +"Sends and receives traffic only through the master port. If the master port " +"becomes unavailable, the next active port is used. The first interface " +"added is the master port; any interfaces added after that are used as " +"failover devices." +msgstr "「é€ä¿¡ã®ã¿ãƒžã‚¹ã‚¿ãƒãƒ¼ãƒˆã‚’介ã—ã¦ãƒˆãƒ©ãƒ•ィックをå—ä¿¡ã—ã¾ã™ã€‚マスタãƒãƒ¼ãƒˆãŒã‚れã°ã€Œä½¿ç”¨ä¸å¯èƒ½ã«ãªã£ãŸã€æ¬¡ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãƒãƒ¼ãƒˆãŒä½¿ç”¨ã•れã¦ã„る。最åˆã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã€ã‚’追加ã¯ã€ãƒžã‚¹ã‚¿ãƒãƒ¼ãƒˆã§ã‚りã€ã™ãªã‚ã¡å¾Œã«è¿½åŠ ã•れãŸã‚¤ãƒ³ã‚¿ãƒ•ェースã¯ã€æ¬¡ã®ã‚ˆã†ã«ä½¿ç”¨ã•れã¦ã„る「フェイルオーãƒãƒ¼ãƒ‡ãƒã‚¤ã‚¹ã€‚" + +#: usr/local/www/interfaces_lagg_edit.php:174 +#: usr/local/www/interfaces_lagg_edit.php:175 +#: usr/local/www/interfaces_lagg_edit.php:188 +#: usr/local/www/interfaces_lagg_edit.php:187 +#: usr/local/www/interfaces_lagg_edit.php:187 +msgid "fec" +msgstr "FEC" + +#: usr/local/www/interfaces_lagg_edit.php:174 +#: usr/local/www/interfaces_lagg_edit.php:175 +#: usr/local/www/interfaces_lagg_edit.php:188 +#: usr/local/www/interfaces_lagg_edit.php:187 +#: usr/local/www/interfaces_lagg_edit.php:187 +msgid "" +"Supports Cisco EtherChannel. This is a static setup and does not negotiate " +"aggregation with the peer or exchange frames to monitor the link." +msgstr "「シスコã®EtherChannelãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚ã“れã¯ã€é™çš„ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã§ã€äº¤æ¸‰ã—ã¦ã„ãªã„"ã®ãƒªãƒ³ã‚¯ã‚’監視ã™ã‚‹ãŸã‚ã®ãƒ”ã‚¢ã¾ãŸã¯äº¤æ›ãƒ•レームã§å‡é›†ã‚’。" + +#: usr/local/www/interfaces_lagg_edit.php:178 +#: usr/local/www/interfaces_lagg_edit.php:179 +#: usr/local/www/interfaces_lagg_edit.php:192 +#: usr/local/www/interfaces_lagg_edit.php:191 +#: usr/local/www/interfaces_lagg_edit.php:191 +msgid "lacp" +msgstr "LACP" + +#: usr/local/www/interfaces_lagg_edit.php:178 +#: usr/local/www/interfaces_lagg_edit.php:179 +#: usr/local/www/interfaces_lagg_edit.php:192 +#: usr/local/www/interfaces_lagg_edit.php:191 +#: usr/local/www/interfaces_lagg_edit.php:191 +msgid "" +"Supports the IEEE 802.3ad Link Aggregation Control Protocol (LACP) and the " +"Marker Protocol. LACP will negotiate a set of aggregable links with the " +"peer in to one or more Link Aggregated Groups. Each LAG is composed of " +"ports of the same speed, set to full-duplex operation. The traffic will be " +"balanced across the ports in the LAG with the greatest total speed, in most " +"cases there will only be one LAG which contains all ports. In the event of " +"changes in physical connectivity, Link Aggregation will quickly converge to " +"a new configuration." +msgstr "ã€ã‚’サãƒãƒ¼ãƒˆã—ã€IEEE 802.3adリンクアグリゲーション制御プロトコル( LACP)や「マーカープロトコル。 LACPã¯ã€ã¨ä¸€ã¤ã«ã¾ã¨ã‚られる一連ã®ãƒªãƒ³ã‚¯äº¤æ¸‰ã™ã‚‹ã€ 1ã¤ä»¥ä¸Šã®ãƒªãƒ³ã‚¯é›†ç´„グループã¸ã®ãƒ”アをå„LAGãŒæ§‹æˆã•れã¦ã„る「全二é‡å‹•作ã«è¨­å®šã•れã¦åŒã˜é€Ÿåº¦ã®ãƒãƒ¼ãƒˆã€‚トラフィックã¯ä¾‹ã ã‘ã€ã™ã¹ã¦ã®ãƒãƒ¼ãƒˆãŒå«ã¾ã‚Œã¦ã„ã‚‹1 LAGãŒã‚ã‚‹ã ã‚ã†ã€ã»ã¨ã‚“ã©ã§ã€æœ€å¤§ã®åˆè¨ˆé€Ÿåº¦ãŒã€LAGãƒãƒ¼ãƒˆé–“ã§ãƒãƒ©ãƒ³ã‚¹ã®ã¨ã‚ŒãŸã€ã¨ãªã‚Šã¾ã™ã€‚ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã€æ–°ã—ã„コンフィギュレーションã€ã¯ã€ç‰©ç†çš„æŽ¥ç¶šã®å¤‰æ›´ã€ãƒªãƒ³ã‚¯ã‚¢ã‚°ãƒªã‚²ãƒ¼ã‚·ãƒ§ãƒ³ã¯æ€¥é€Ÿã«åŽæŸã™ã‚‹ã€ 。" + +#: usr/local/www/interfaces_lagg_edit.php:189 +#: usr/local/www/interfaces_lagg_edit.php:190 +#: usr/local/www/interfaces_lagg_edit.php:203 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/interfaces_lagg_edit.php:202 +msgid "loadbalance" +msgstr "ロードãƒãƒ©ãƒ³ã‚¹" + +#: usr/local/www/interfaces_lagg_edit.php:189 +#: usr/local/www/interfaces_lagg_edit.php:190 +#: usr/local/www/interfaces_lagg_edit.php:203 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/interfaces_lagg_edit.php:202 +msgid "" +"Balances outgoing traffic across the active ports based on hashed protocol " +"header information and accepts incoming traffic from any active port. This " +"is a static setup and does not negotiate aggregation with the peer or " +"exchange frames to monitor the link. The hash includes the Ethernet source " +"and destination address, and, if available, the VLAN tag, and the IP source " +"and destination address" +msgstr "ヘッダ情報ã¨ä»»æ„ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãƒãƒ¼ãƒˆã‹ã‚‰ç€ä¿¡ãƒˆãƒ©ãƒ•ィックをå—ã‘付ã‘〠「ãƒãƒƒã‚·ãƒ¥åŒ–ã•れãŸãƒ—ロトコルã«åŸºã¥ã„ã¦ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒãƒ¼ãƒˆé–“残高発信トラフィックを〠。ã“れã¯ã€Œé™çš„設定ã§ã€ãƒ”ã‚¢ã¾ãŸã¯ã¨ã®å‡é›†ã‚’ãƒã‚´ã‚·ã‚¨ãƒ¼ãƒˆã—ã¾ã›ã‚“ã€ã®ãƒªãƒ³ã‚¯ã‚’監視ã™ã‚‹ãŸã‚ã®äº¤æ›ãƒ•レーム。ãƒãƒƒã‚·ãƒ¥ã¯ã€ã‚¤ãƒ¼ã‚µãƒãƒƒãƒˆã‚½ãƒ¼ã‚¹ã€ã‚„宛先アドレスã€ãŠã‚ˆã³ã€å¯èƒ½ãªå ´åˆã€ VLANã‚¿ã‚°ã€ãŠã‚ˆã³IPソースã€ãŠã‚ˆã³å®›å…ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å«ã‚€" + +#: usr/local/www/interfaces_lagg_edit.php:197 +#: usr/local/www/interfaces_lagg_edit.php:198 +#: usr/local/www/interfaces_lagg_edit.php:211 +#: usr/local/www/interfaces_lagg_edit.php:210 +#: usr/local/www/interfaces_lagg_edit.php:210 +msgid "roundrobin" +msgstr "ラウンドロビン" + +#: usr/local/www/interfaces_lagg_edit.php:197 +#: usr/local/www/interfaces_lagg_edit.php:198 +#: usr/local/www/interfaces_lagg_edit.php:211 +#: usr/local/www/interfaces_lagg_edit.php:210 +#: usr/local/www/interfaces_lagg_edit.php:210 +msgid "" +"Distributes outgoing traffic using a round-robin scheduler through all " +"active ports and accepts incoming traffic from any active port" +msgstr "アクティブãƒãƒ¼ãƒˆã€Œã™ã¹ã¦ã‚’通ã˜ã¦ã€ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ンスケジューラを使用ã—ã¦ã€ç™ºä¿¡ãƒˆãƒ©ãƒ•ィックを分散ã€ã—ã€ä»»æ„ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãƒãƒ¼ãƒˆã‹ã‚‰ç€ä¿¡ãƒˆãƒ©ãƒ•ィックをå—ã‘付ã‘ã¾ã™" + +#: usr/local/www/interfaces_lagg_edit.php:201 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/interfaces_lagg_edit.php:215 +#: usr/local/www/interfaces_lagg_edit.php:214 +#: usr/local/www/interfaces_lagg_edit.php:214 +msgid "" +"This protocol is intended to do nothing: it disables any traffic without " +"disabling the lagg interface itself" +msgstr "「ã“ã®ãƒ—ロトコルã¯ã€ä½•ã‚‚ã—ãªã„ã“ã¨ã‚’æ„図ã—ã¦ã„る:ãれã¯ã›ãšã«ãƒˆãƒ©ãƒ•ィックを無効ã«ã—ã¾ã™ã€ laggインタフェース自体を無効ã«ã™ã‚‹" + +#: usr/local/www/interfaces_ppps.php:62 usr/local/www/interfaces_ppps.php:62 +msgid "" +"This point-to-point link cannot be deleted because it is still being used as " +"an interface." +msgstr "インターフェース「ãれã§ã‚‚ã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ã‚‹ã®ã§ã€ã“ã®ãƒã‚¤ãƒ³ãƒˆãƒ„ーãƒã‚¤ãƒ³ãƒˆãƒªãƒ³ã‚¯ã‚’削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/interfaces_ppps.php:78 usr/local/www/interfaces_ppps.php:78 +msgid "Interfaces: PPPs" +msgstr "インターフェース:購買力平価" + +#: usr/local/www/interfaces_ppps.php:109 usr/local/www/interfaces_ppps.php:110 +#: usr/local/www/interfaces_ppps.php:110 +msgid "Interface(s)/Port(s)" +msgstr "インターフェイス(複数å¯ï¼‰ /ãƒãƒ¼ãƒˆï¼ˆè¤‡æ•°å¯ï¼‰" + +#: usr/local/www/interfaces_ppps.php:132 usr/local/www/interfaces_ppps.php:133 +#: usr/local/www/interfaces_ppps.php:133 +msgid "Do you really want to delete this PPP interface?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®PPPインタフェースを削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/interfaces_ppps_edit.php:182 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +msgid "Link Interface(s)" +msgstr "リンク·インターフェース( S )" + +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/services_dhcp.php:587 usr/local/www/services_dhcpv6.php:522 +#: usr/local/www/services_dhcp.php:600 usr/local/www/services_dhcpv6.php:596 +#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcpv6.php:527 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/services_dhcp.php:720 usr/local/www/services_dhcpv6.php:542 +#: usr/local/www/services_dhcp.php:740 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/services_dhcp.php:740 usr/local/www/services_dhcpv6.php:542 +msgid "Subnet" +msgstr "サブãƒãƒƒãƒˆ" + +#: usr/local/www/interfaces_ppps_edit.php:207 +#: usr/local/www/interfaces_ppps_edit.php:213 +#: usr/local/www/interfaces_ppps_edit.php:213 +msgid "Please choose a Link Type." +msgstr "リンクタイプをãŠé¸ã³ä¸‹ã•ã„。" + +#: usr/local/www/interfaces_ppps_edit.php:211 +#: usr/local/www/interfaces_ppps_edit.php:217 +#: usr/local/www/interfaces_ppps_edit.php:217 +msgid "" +"Multilink connections (MLPPP) using the PPP link type is not currently " +"supported. Please select only one Link Interface." +msgstr "「 PPPリンクã®ç¨®é¡žã‚’使用ã—ã¦ãƒžãƒ«ãƒãƒªãƒ³ã‚¯æŽ¥ç¶šï¼ˆ MLPPP )ã¯ç¾åœ¨ã—ã¦ã„ãªã„ã€ãŒã‚µãƒãƒ¼ãƒˆã€‚唯一ã®1 Linkã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚’é¸æŠžã—ã¦ãã ã•ã„。" + +#: usr/local/www/interfaces_ppps_edit.php:213 +#: usr/local/www/interfaces_ppps_edit.php:219 +#: usr/local/www/interfaces_ppps_edit.php:219 +msgid "The Service name contains invalid characters." +msgstr "サービスåã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:215 +#: usr/local/www/interfaces_ppps_edit.php:221 +#: usr/local/www/interfaces_ppps_edit.php:221 +msgid "Do not specify both a Service name and a NULL Service name." +msgstr "サービスåã¨NULLã®ã‚µãƒ¼ãƒ“スåã®ä¸¡æ–¹ã‚’指定ã—ãªã„ã§ãã ã•ã„。" + +#: usr/local/www/interfaces_ppps_edit.php:229 +#: usr/local/www/interfaces_ppps_edit.php:235 +#: usr/local/www/interfaces_ppps_edit.php:235 +msgid "" +"A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE " +"Periodic reset fields." +msgstr "定期的ãªãƒªã‚»ãƒƒãƒˆã®ãƒ•ィールド"ã¯æœ‰åйãªã®PPPoEリセット月ã¯ã‚«ã‚¹ã‚¿ãƒ ã®PPPoEã§ï¼ˆ 1〜12)を指定ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“〠。" + +#: usr/local/www/interfaces_ppps_edit.php:231 +#: usr/local/www/interfaces_ppps_edit.php:237 +#: usr/local/www/interfaces_ppps_edit.php:237 +msgid "" +"A valid PPPoE reset day of month must be specified (1-31) in the Custom " +"PPPoE Periodic reset fields. No checks are done on valid # of days per month" +msgstr "ã€Œæœˆã®æœ‰åйãªPPPoEã®ãƒªã‚»ãƒƒãƒˆæ—¥ã¯ã‚«ã‚¹ã‚¿ãƒ ã§ï¼ˆ 1月31日)を指定ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã€ã®PPPoE定期フィールドをリセットã—ã¾ã™ã€‚ã„ã„ãˆãƒã‚§ãƒƒã‚¯ã¯æœ‰åйãªã§è¡Œã‚れã¦ã„ã¾ã›ã‚“" + +#: usr/local/www/interfaces_ppps_edit.php:233 +#: usr/local/www/interfaces_ppps_edit.php:239 +#: usr/local/www/interfaces_ppps_edit.php:239 +msgid "" +"A valid PPPoE reset year must be specified. Don't select a year in the past!" +msgstr "「有効ãªPPPoEã®ãƒªã‚»ãƒƒãƒˆã®å¹´ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚éŽåŽ»ã®ã®å¹´ã‚’é¸æŠžã—ãªã„ã§ãã ã•ã„ï¼" + +#: usr/local/www/interfaces_ppps_edit.php:238 +#: usr/local/www/interfaces_ppps_edit.php:244 +#: usr/local/www/interfaces_ppps_edit.php:244 +#, php-format +msgid "A valid local IP address must be specified for %s." +msgstr "有効ãªãƒ­ãƒ¼ã‚«ãƒ«IPアドレスã¯ã€ %s.を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/interfaces_ppps_edit.php:240 +#: usr/local/www/interfaces_ppps_edit.php:246 +#: usr/local/www/interfaces_ppps_edit.php:246 +#, php-format +msgid "A valid gateway IP address OR hostname must be specified for %s." +msgstr "有効ãªã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåãŒ%s.を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/interfaces_ppps_edit.php:242 +#: usr/local/www/interfaces_ppps_edit.php:248 +#: usr/local/www/interfaces_ppps_edit.php:248 +#, php-format +msgid "The bandwidth value for %s must be an integer." +msgstr "%sãŸã‚ã®å¸¯åŸŸå¹…ã®å€¤ã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/interfaces_ppps_edit.php:244 +#: usr/local/www/interfaces_ppps_edit.php:250 +#: usr/local/www/interfaces_ppps_edit.php:250 +#, php-format +msgid "The MTU for %s must be greater than 576 bytes." +msgstr "%sã®MTUã‚’è¶…ãˆã‚‹576ãƒã‚¤ãƒˆã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/interfaces_ppps_edit.php:246 +#: usr/local/www/interfaces_ppps_edit.php:252 +#: usr/local/www/interfaces_ppps_edit.php:252 +#, php-format +msgid "The MRU for %s must be greater than 576 bytes." +msgstr "%sã®ãŸã‚ã®MRUã‚’è¶…ãˆã‚‹576ãƒã‚¤ãƒˆã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/interfaces_ppps_edit.php:381 +#: usr/local/www/system_authservers.php:577 +#: usr/local/www/interfaces_ppps_edit.php:382 +#: usr/local/www/system_authservers.php:582 +#: usr/local/www/interfaces_ppps_edit.php:388 +#: usr/local/www/system_authservers.php:589 +#: usr/local/www/interfaces_ppps_edit.php:388 +#: usr/local/www/system_authservers.php:589 +msgid "Select" +msgstr "é¸æŠžã™ã‚‹" + +#: usr/local/www/interfaces_ppps_edit.php:398 +#: usr/local/www/interfaces_ppps_edit.php:399 +#: usr/local/www/interfaces_ppps_edit.php:405 +#: usr/local/www/interfaces_ppps_edit.php:405 +msgid "PPPs configuration" +msgstr "購買力平価ã®è¨­å®š" + +#: usr/local/www/interfaces_ppps_edit.php:401 +#: usr/local/www/interfaces_ppps_edit.php:402 +#: usr/local/www/interfaces_ppps_edit.php:408 +#: usr/local/www/interfaces_ppps_edit.php:408 +msgid "Link Type" +msgstr "リンク型" + +#: usr/local/www/interfaces_ppps_edit.php:416 +#: usr/local/www/interfaces_ppps_edit.php:417 +#: usr/local/www/interfaces_ppps_edit.php:423 +#: usr/local/www/interfaces_ppps_edit.php:423 +msgid "Link interface(s)" +msgstr "Linkインタフェース( S )" + +#: usr/local/www/interfaces_ppps_edit.php:422 +#: usr/local/www/interfaces_ppps_edit.php:423 +#: usr/local/www/interfaces_ppps_edit.php:429 +#: usr/local/www/interfaces_ppps_edit.php:429 +msgid "Select at least two interfaces for Multilink (MLPPP) connections." +msgstr "マルãƒãƒªãƒ³ã‚¯ï¼ˆ MLPPP )接続ã®ãŸã‚ã«å°‘ãªãã¨ã‚‚2ã¤ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:470 +#: usr/local/www/interfaces_ppps_edit.php:471 +#: usr/local/www/interfaces_ppps_edit.php:477 +#: usr/local/www/interfaces_ppps_edit.php:477 +msgid "" +"You may enter a description here for your reference. Description will appear " +"in the "Interfaces Assign" select lists." +msgstr ""ã“ã“ã«å‚照用ã®èª¬æ˜Žæ–‡ã‚’入力ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚"説明「インターフェイスã¯ã€å‰²ã‚Šå½“ã¦ã€é¸æŠžãƒªã‚¹ãƒˆã«è¡¨ç¤ºã•れã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:526 +#: usr/local/www/interfaces_ppps_edit.php:527 +#: usr/local/www/interfaces_ppps_edit.php:533 +#: usr/local/www/interfaces_ppps_edit.php:531 +#: usr/local/www/interfaces_ppps_edit.php:531 +msgid "Note: Typically *99# for GSM networks and #777 for CDMA networks" +msgstr "注æ„:GSMãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨CDMAãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãŸã‚ã®#777ãŸã‚通常*99" + +#: usr/local/www/interfaces_ppps_edit.php:540 +#: usr/local/www/interfaces_ppps_edit.php:541 +#: usr/local/www/interfaces_ppps_edit.php:547 +#: usr/local/www/interfaces_ppps_edit.php:545 +#: usr/local/www/interfaces_ppps_edit.php:545 +msgid "APN number (optional)" +msgstr "APN番å·ï¼ˆã‚ªãƒ—ション)" + +#: usr/local/www/interfaces_ppps_edit.php:543 +#: usr/local/www/interfaces_ppps_edit.php:544 +#: usr/local/www/interfaces_ppps_edit.php:550 +#: usr/local/www/interfaces_ppps_edit.php:548 +#: usr/local/www/interfaces_ppps_edit.php:548 +msgid "" +"Note: Defaults to 1 if you set APN above. Ignored if you set no APN above." +msgstr ""注: 1デフォルトã¯ä¸Šè¨˜ã®APNを設定ã—ãŸå ´åˆã€ä¸Šè¨˜ã®ãªã„APNを設定ã—ãªã„å ´åˆã¯ç„¡è¦–ã•れã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:547 +#: usr/local/www/interfaces_ppps_edit.php:548 +#: usr/local/www/interfaces_ppps_edit.php:554 +#: usr/local/www/interfaces_ppps_edit.php:552 +#: usr/local/www/interfaces_ppps_edit.php:552 +msgid "SIM PIN" +msgstr "SIMカードã®PIN" + +#: usr/local/www/interfaces_ppps_edit.php:554 +#: usr/local/www/interfaces_ppps_edit.php:555 +#: usr/local/www/interfaces_ppps_edit.php:561 +#: usr/local/www/interfaces_ppps_edit.php:559 +#: usr/local/www/interfaces_ppps_edit.php:559 +msgid "SIM PIN wait" +msgstr "ã®SIM端å­ã‚¦ã‚§ã‚¤ãƒˆ" + +#: usr/local/www/interfaces_ppps_edit.php:557 +#: usr/local/www/interfaces_ppps_edit.php:558 +#: usr/local/www/interfaces_ppps_edit.php:564 +#: usr/local/www/interfaces_ppps_edit.php:562 +#: usr/local/www/interfaces_ppps_edit.php:562 +msgid "" +"Note: Time to wait for SIM to discover network after PIN is sent to SIM " +"(seconds)." +msgstr ""注: SIMã¯PINã®å¾Œã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’検出ã™ã‚‹ã®ã‚’å¾…ã¤æ™‚é–“ãŒSIMã«é€ä¿¡ã•れã¾ã™ã€ (秒) 。" + +#: usr/local/www/interfaces_ppps_edit.php:561 +#: usr/local/www/interfaces_ppps_edit.php:562 +#: usr/local/www/interfaces_ppps_edit.php:568 +#: usr/local/www/interfaces_ppps_edit.php:566 +#: usr/local/www/interfaces_ppps_edit.php:566 +msgid "Init String" +msgstr "INIT文字列" + +#: usr/local/www/interfaces_ppps_edit.php:564 +#: usr/local/www/interfaces_ppps_edit.php:565 +#: usr/local/www/interfaces_ppps_edit.php:571 +#: usr/local/www/interfaces_ppps_edit.php:569 +#: usr/local/www/interfaces_ppps_edit.php:569 +msgid "" +"Note: Enter the modem initialization string here. Do NOT include the "AT" " +"string at the beginning of the command. Many modern USB 3G modems don't need " +"an initialization string." +msgstr ""注æ„:ã“ã“ã§ã®ãƒ¢ãƒ‡ãƒ ã®åˆæœŸåŒ–文字列を入力ã—ã¦å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。 ã€ã‚³ãƒžãƒ³ãƒ‰ã®å…ˆé ­ã«AT〠"ã¨ã„ã†æ–‡å­—列を。多ãã®ç¾ä»£ã®USB 3Gモデムã¯ã€ ã€ŒåˆæœŸåŒ–文字列ã¯å¿…è¦ã‚りã¾ã›ã‚“。" + +#: usr/local/www/interfaces_ppps_edit.php:569 +#: usr/local/www/interfaces_ppps_edit.php:570 +#: usr/local/www/interfaces_ppps_edit.php:576 +#: usr/local/www/interfaces_ppps_edit.php:574 +#: usr/local/www/interfaces_ppps_edit.php:574 +msgid "Connection Timeout" +msgstr "接続タイムアウト" + +#: usr/local/www/interfaces_ppps_edit.php:572 +#: usr/local/www/interfaces_ppps_edit.php:573 +#: usr/local/www/interfaces_ppps_edit.php:579 +#: usr/local/www/interfaces_ppps_edit.php:577 +#: usr/local/www/interfaces_ppps_edit.php:577 +msgid "" +"Note: Enter timeout in seconds for connection to be established (sec.) " +"Default is 45 sec." +msgstr ""注:確立ã™ã‚‹æŽ¥ç¶šã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’ç§’å˜ä½ã§å…¥åŠ›ã—ã¾ã™ï¼ˆç§’) ã€ã®ãƒ‡ãƒ•ォルトã¯45ç§’ã§ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:576 +#: usr/local/www/interfaces_ppps_edit.php:577 +#: usr/local/www/interfaces_ppps_edit.php:583 +#: usr/local/www/interfaces_ppps_edit.php:581 +#: usr/local/www/interfaces_ppps_edit.php:581 +msgid "Uptime Logging" +msgstr "ç¨¼åƒæ™‚é–“ã®ãƒ­ã‚°" + +#: usr/local/www/interfaces_ppps_edit.php:578 +#: usr/local/www/interfaces_ppps_edit.php:579 +#: usr/local/www/interfaces_ppps_edit.php:585 +#: usr/local/www/interfaces_ppps_edit.php:583 +#: usr/local/www/interfaces_ppps_edit.php:583 +msgid "Enable persistent logging of connection uptime." +msgstr "接続ã®ã‚¢ãƒƒãƒ—ã‚¿ã‚¤ãƒ ã®æ°¸ç¶šçš„ãªãƒ­ã‚°ã‚’有効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:579 +#: usr/local/www/interfaces_ppps_edit.php:580 +#: usr/local/www/interfaces_ppps_edit.php:586 +#: usr/local/www/interfaces_ppps_edit.php:584 +#: usr/local/www/interfaces_ppps_edit.php:584 +msgid "" +"This option causes cumulative uptime to be recorded and displayed on the " +"Status Interfaces page." +msgstr "ステータスInterfacesページ"ã“ã®ã‚ªãƒ—ションを記録ã—ã«è¡¨ç¤ºã•れる累ç©ç¨¼åƒæ™‚é–“ã®åŽŸå› ã¨ãªã‚‹ã€ 。" + +#: usr/local/www/interfaces_ppps_edit.php:591 +#: usr/local/www/interfaces_ppps_edit.php:592 +#: usr/local/www/interfaces_ppps_edit.php:598 +#: usr/local/www/interfaces_ppps_edit.php:596 +#: usr/local/www/interfaces_ppps_edit.php:596 +msgid "Configure a NULL Service name" +msgstr "NULLã®ã‚µãƒ¼ãƒ“スåを設定ã™ã‚‹" + +#: usr/local/www/interfaces_ppps_edit.php:592 +#: usr/local/www/interfaces_ppps_edit.php:593 +#: usr/local/www/interfaces_ppps_edit.php:599 +#: usr/local/www/interfaces_ppps_edit.php:597 +#: usr/local/www/interfaces_ppps_edit.php:597 +msgid "" +"Hint: this field can usually be left empty. Service name will not be " +"configured if this field is empty. Check the "Configure NULL" box to " +"configure a blank Service name." +msgstr ""ヒント:ã“ã®ãƒ•ィールドã¯é€šå¸¸ã€ç©ºã®ã¾ã¾ã«ã™ã‚‹ã“ã¨ãŒã§ãるサービスåã¯ã•れã¾ã›ã‚“。 「ã“ã®ãƒ•ィールドãŒç©ºã®å ´åˆã¯è¨­å®šã•れã¦ã„ã¾ã™ã€‚ 「ブランクサービスåを設定ã™ã‚‹ã«ã¯ã€ 「設定NULLã€ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’オンã«ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:652 usr/local/www/vpn_pppoe.php:102 +#: usr/local/www/diag_ipsec.php:91 usr/local/www/diag_ipsec.php:102 +#: usr/local/www/vpn_pppoe.php:103 usr/local/www/diag_ipsec.php:103 +#: usr/local/www/interfaces_ppps_edit.php:653 usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/interfaces_ppps_edit.php:659 usr/local/www/diag_ipsec.php:105 +#: usr/local/www/interfaces_ppps_edit.php:657 usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/interfaces_ppps_edit.php:657 usr/local/www/diag_ipsec.php:105 +msgid "Local IP" +msgstr "ローカルIP" + +#: usr/local/www/interfaces_ppps_edit.php:667 +#: usr/local/www/interfaces_ppps_edit.php:668 +#: usr/local/www/interfaces_ppps_edit.php:674 +#: usr/local/www/interfaces_ppps_edit.php:672 +#: usr/local/www/interfaces_ppps_edit.php:672 +msgid "IP Address OR Hostname" +msgstr "IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆå" + +#: usr/local/www/interfaces_ppps_edit.php:678 +#: usr/local/www/interfaces_ppps_edit.php:679 +#: usr/local/www/interfaces_ppps_edit.php:685 +#: usr/local/www/interfaces_ppps_edit.php:683 +#: usr/local/www/interfaces_ppps_edit.php:683 +msgid "Dial On Demand" +msgstr "ダイヤルオンデマンド" + +#: usr/local/www/interfaces_ppps_edit.php:680 +#: usr/local/www/interfaces_ppps_edit.php:681 +#: usr/local/www/interfaces_ppps_edit.php:687 +#: usr/local/www/interfaces_ppps_edit.php:685 +#: usr/local/www/interfaces_ppps_edit.php:685 +msgid "Enable Dial-on-Demand mode" +msgstr "ダイヤルオンデマンドモードを有効ã«ã™ã‚‹" + +#: usr/local/www/interfaces_ppps_edit.php:681 +#: usr/local/www/interfaces_ppps_edit.php:682 +#: usr/local/www/interfaces_ppps_edit.php:688 +#: usr/local/www/interfaces_ppps_edit.php:686 +#: usr/local/www/interfaces_ppps_edit.php:686 +msgid "" +"This option causes the interface to operate in dial-on-demand mode. Do NOT " +"enable if you want your link to be always up. The interface is configured, " +"but the actual connection of the link is delayed until qualifying outgoing " +"traffic is detected." +msgstr ""ã“ã®ã‚ªãƒ—ションã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスãŒãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ãƒ¢ãƒ¼ãƒ‰ã§å‹•作ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ãªã„ã€ã‚ãªãŸã®ãƒªãƒ³ã‚¯ã¯å¸¸ã«æœ€æ–°ã«ã—ãŸã„å ´åˆã¯ã€æœ‰åйã«ã—ã¾ã™ã€‚インターフェイスã¯ã€è¨­å®šã•れã¦ã„ã‚‹ã€ãŒã€ãƒªãƒ³ã‚¯ã®å®Ÿéš›ã®æŽ¥ç¶šã¯ã€ç™ºä¿¡äºˆé¸ã¾ã§é…å»¶ã•ã‚Œã‚‹ã€Œãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒæ¤œå‡ºã•れãŸã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:686 +#: usr/local/www/interfaces_ppps_edit.php:687 +#: usr/local/www/interfaces_ppps_edit.php:693 +#: usr/local/www/interfaces_ppps_edit.php:691 +#: usr/local/www/interfaces_ppps_edit.php:691 +msgid "Idle Timeout" +msgstr "アイドルタイムアウト" + +#: usr/local/www/interfaces_ppps_edit.php:688 +#: usr/local/www/interfaces_ppps_edit.php:689 +#: usr/local/www/interfaces_ppps_edit.php:695 +#: usr/local/www/interfaces_ppps_edit.php:693 +#: usr/local/www/interfaces_ppps_edit.php:693 +msgid "(seconds) Default is 0, which disables the timeout feature." +msgstr "(秒)デフォルトã¯ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆæ©Ÿèƒ½ã‚’無効ã«ã—〠0ã§ã‚る。" + +#: usr/local/www/interfaces_ppps_edit.php:689 +#: usr/local/www/interfaces_ppps_edit.php:690 +#: usr/local/www/interfaces_ppps_edit.php:696 +#: usr/local/www/interfaces_ppps_edit.php:694 +#: usr/local/www/interfaces_ppps_edit.php:694 +msgid "" +"If no incoming or outgoing packets are transmitted for the entered number of " +"seconds the connection is brought down." +msgstr "ç§’ã€ç€ä¿¡ã¾ãŸã¯ç™ºä¿¡ãƒ‘ケットãŒå…¥åŠ›ã—ãŸæ•°å€¤ã®ãŸã‚ã«é€ä¿¡ã•れã¦ã„ãªã„å ´åˆã¯ã€ŒæŽ¥ç¶šãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„る。" + +#: usr/local/www/interfaces_ppps_edit.php:690 +#: usr/local/www/interfaces_ppps_edit.php:691 +#: usr/local/www/interfaces_ppps_edit.php:697 +#: usr/local/www/interfaces_ppps_edit.php:695 +#: usr/local/www/interfaces_ppps_edit.php:695 +msgid "" +"When the idle timeout occurs, if the dial-on-demand option is enabled, mpd " +"goes back into dial-on-demand mode. Otherwise, the interface is brought down " +"and all associated routes removed." +msgstr "「アイドルタイムアウトãŒç™ºç”Ÿã™ã‚‹ã¨ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã€ MPDã¯ã€Œãƒãƒƒã‚¯ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ãƒ¢ãƒ¼ãƒ‰ã«ãªã‚Šã¾ã™ã€‚ãれ以外ã®å ´åˆã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスãŒãƒ€ã‚¦ãƒ³ã—〠"ãŠã‚ˆã³é–¢é€£ã™ã‚‹ã™ã¹ã¦ã®ãƒ«ãƒ¼ãƒˆãŒå‰Šé™¤ã•れã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:694 +#: usr/local/www/vpn_openvpn_client.php:787 +#: usr/local/www/vpn_openvpn_server.php:1077 +#: usr/local/www/vpn_openvpn_server.php:1219 +#: usr/local/www/vpn_openvpn_client.php:792 +#: usr/local/www/interfaces_ppps_edit.php:695 +#: usr/local/www/vpn_openvpn_server.php:1261 +#: usr/local/www/vpn_openvpn_client.php:838 +#: usr/local/www/vpn_openvpn_client.php:857 +#: usr/local/www/interfaces_ppps_edit.php:701 +#: usr/local/www/vpn_openvpn_server.php:1288 +#: usr/local/www/interfaces_ppps_edit.php:699 +#: usr/local/www/vpn_openvpn_client.php:857 +#: usr/local/www/interfaces_ppps_edit.php:699 +#: usr/local/www/vpn_openvpn_server.php:1288 +msgid "Compression" +msgstr "圧縮" + +#: usr/local/www/interfaces_ppps_edit.php:696 +#: usr/local/www/interfaces_ppps_edit.php:697 +#: usr/local/www/interfaces_ppps_edit.php:703 +#: usr/local/www/interfaces_ppps_edit.php:701 +#: usr/local/www/interfaces_ppps_edit.php:701 +msgid "Disable vjcomp(compression) (auto-negotiated by default)." +msgstr "VJCOMP (圧縮) (デフォルトã§ã¯ã‚ªãƒ¼ãƒˆãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ï¼‰ã‚’無効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:697 +#: usr/local/www/interfaces_ppps_edit.php:698 +#: usr/local/www/interfaces_ppps_edit.php:704 +#: usr/local/www/interfaces_ppps_edit.php:702 +#: usr/local/www/interfaces_ppps_edit.php:702 +msgid "" +"This option enables Van Jacobson TCP header compression, which saves several " +"bytes per TCP data packet. You almost always want this option. This " +"compression ineffective for TCP connections with enabled modern extensions " +"like time stamping or SACK, which modify TCP options between sequential " +"packets." +msgstr "ãƒã‚¤ãƒˆã‚ãŸã‚Šã®TCPデータパケットã€ã“ã®ã‚ªãƒ—ションã¯ã€ã„ãã¤ã‹ãŒä¿å­˜ã•れã¾ã™ãƒ´ã‚¡ãƒ³ãƒ¤ã‚³ãƒ–ソンTCPヘッダー圧縮をå¯èƒ½ã«ã€ 。ã‚ãªãŸã¯ã€ã»ã¨ã‚“ã©ã®å ´åˆã€ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæ¬²ã—ã„。シーケンシャル「パケット間ã®TCPオプションを変更ã—ã€ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã‚„SACKã®ã‚ˆã†ã«ã€ã“ã®ã€Œæœ‰åйç¾ä»£ã®æ‹¡å¼µå­ã‚’æŒã¤TCP接続ã®éžåŠ¹çŽ‡åœ§ç¸®ã€ ã€ ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:703 +#: usr/local/www/interfaces_ppps_edit.php:704 +#: usr/local/www/interfaces_ppps_edit.php:710 +#: usr/local/www/interfaces_ppps_edit.php:708 +#: usr/local/www/interfaces_ppps_edit.php:708 +msgid "TCPmssFix" +msgstr "TCPmssFix" + +#: usr/local/www/interfaces_ppps_edit.php:705 +#: usr/local/www/interfaces_ppps_edit.php:706 +#: usr/local/www/interfaces_ppps_edit.php:712 +#: usr/local/www/interfaces_ppps_edit.php:710 +#: usr/local/www/interfaces_ppps_edit.php:710 +msgid "Disable tcpmssfix (enabled by default)." +msgstr "ï¼ˆãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åŠ¹ï¼‰ã‚’ç„¡åŠ¹tcpmssfix 。" + +#: usr/local/www/interfaces_ppps_edit.php:706 +#: usr/local/www/interfaces_ppps_edit.php:707 +#: usr/local/www/interfaces_ppps_edit.php:713 +#: usr/local/www/interfaces_ppps_edit.php:711 +#: usr/local/www/interfaces_ppps_edit.php:711 +msgid "" +"This option causes mpd to adjust incoming and outgoing TCP SYN segments so " +"that the requested maximum segment size is not greater than the amount " +"allowed by the interface MTU. This is necessary in many setups to avoid " +"problems caused by routers that drop ICMP Datagram Too Big messages. Without " +"these messages, the originating machine sends data, it passes the rogue " +"router then hits a machine that has an MTU that is not big enough for the " +"data. Because the IP Don't Fragment option is set, this machine sends an " +"ICMP Datagram Too Big message back to the originator and drops the packet. " +"The rogue router drops the ICMP message and the originator never gets to " +"discover that it must reduce the fragment size or drop the IP Don't Fragment " +"option from its outgoing data." +msgstr "「ã“れã¯é¿ã‘ã‚‹ãŸã‚ã«ã€å¤šãã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã§å¿…è¦ã¨ãªã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®MTUã§è¨±å¯ã•れã¦ã„ã‚‹ã€Œè¦æ±‚ã•ã‚ŒãŸæœ€å¤§ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã‚µã‚¤ã‚ºã¯ã€é‡ã‚ˆã‚Šã‚‚大ãããªã„ã¨ã€ICMPをドロップã—ã€ãƒ«ãƒ¼ã‚¿ã«ã‚ˆã‚‹å•題を"ã“ã®ã‚ªãƒ—ションã¯ã¨ã¦ã‚‚ç€ä¿¡ãŠã‚ˆã³ç™ºä¿¡TCP SYNセグメントを調整ã™ã‚‹ãŸã‚ã«MPDã‚’èµ·ã“ã™ã€ãƒ‡ãƒ¼ã‚¿ã‚°ãƒ©ãƒ Too Bigメッセージ。ã›ãšã«ã€IPフラグメントオプションãŒè¨­å®šã•れã¦ã„ãªã„ãŸã‚ã€ãƒ«ãƒ¼ã‚¿ã—ã€ã€Œãƒ‡ãƒ¼ã‚¿ã®ãŸã‚ã®å分ãªå¤§ãã•ã§ã¯ã‚りã¾ã›ã‚“MTUã‚’æŒã¤ãƒžã‚·ãƒ³ã‚’打ã¤ã€ã“れらã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ã€ç™ºä¿¡æ©ŸãŒãƒ‡ãƒ¼ã‚¿ã‚’é€ä¿¡ã—ã€ãれãŒä¸æ­£ã«åˆæ ¼ã€ ã€ã“ã®ãƒžã‚·ãƒ³ã¯é€ä¿¡ã—ã¾ã™ã€ŒICMPデータグラムéŽå¤§ãƒãƒƒã‚¯ç™ºä¿¡ã¸ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨ã¯ãƒ‘ケットをドロップã—ã¾ã™ã€‚ ã€Œä¸æ­£ãªãƒ«ãƒ¼ã‚¿ã¯ã€ ICMPメッセージを削除ã—ã€ç™ºä¿¡è€…ã¯ã“ã¨ã‚’å¾—ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“"ãれã¯ãƒ•ラグメントサイズを減らã™ã‹ã€ã¾ãŸã¯IPãŒãã®ç™ºä¿¡ãƒ‡ãƒ¼ã‚¿ã‹ã‚‰"オプションを断片化ã—ãªã„ã§ãã ã•ã„削除ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã‚’発見。" + +#: usr/local/www/interfaces_ppps_edit.php:714 +#: usr/local/www/interfaces_ppps_edit.php:715 +#: usr/local/www/interfaces_ppps_edit.php:721 +#: usr/local/www/interfaces_ppps_edit.php:719 +#: usr/local/www/interfaces_ppps_edit.php:719 +msgid "ShortSeq" +msgstr "ShortSeq" + +#: usr/local/www/interfaces_ppps_edit.php:716 +#: usr/local/www/interfaces_ppps_edit.php:717 +#: usr/local/www/interfaces_ppps_edit.php:723 +#: usr/local/www/interfaces_ppps_edit.php:721 +#: usr/local/www/interfaces_ppps_edit.php:721 +msgid "Disable shortseq (auto-negotiated by default)." +msgstr "shortseqを(デフォルトã§ã¯ã‚ªãƒ¼ãƒˆãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ï¼‰ç„¡åйã«ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:717 +#: usr/local/www/interfaces_ppps_edit.php:718 +#: usr/local/www/interfaces_ppps_edit.php:724 +#: usr/local/www/interfaces_ppps_edit.php:722 +#: usr/local/www/interfaces_ppps_edit.php:722 +msgid "" +"This option is only meaningful if multi-link PPP is negotiated. It " +"proscribes shorter multi-link fragment headers, saving two bytes on every " +"frame. It is not necessary to disable this for connections that are not " +"multi-link." +msgstr "「マルãƒãƒªãƒ³ã‚¯PPPãŒãƒã‚´ã‚·ã‚¨ãƒ¼ãƒˆã•れã¦ã„ã‚‹å ´åˆã€ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã¯æ„味ãŒã‚りã¾ã™ã€‚ãれ㯠"ã™ã¹ã¦ã®ä¸Šã®2ãƒã‚¤ãƒˆç¯€ç´„短ã„マルãƒãƒªãƒ³ã‚¯ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆãƒ˜ãƒƒãƒ€ã‚’ã‚‚ç¦æ­¢ã€ã®ãƒ•レームを。ãれã¯ãªã„接続ã®ãŸã‚ã«ã“れを無効ã«ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“"マルãƒãƒªãƒ³ã‚¯ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:722 +#: usr/local/www/interfaces_ppps_edit.php:723 +#: usr/local/www/interfaces_ppps_edit.php:729 +#: usr/local/www/interfaces_ppps_edit.php:727 +#: usr/local/www/interfaces_ppps_edit.php:727 +msgid "ACFComp" +msgstr "ACFComp" + +#: usr/local/www/interfaces_ppps_edit.php:724 +#: usr/local/www/interfaces_ppps_edit.php:725 +#: usr/local/www/interfaces_ppps_edit.php:731 +#: usr/local/www/interfaces_ppps_edit.php:729 +#: usr/local/www/interfaces_ppps_edit.php:729 +msgid "Disable acfcomp (compression) (auto-negotiated by default)." +msgstr "acfcomp (圧縮) (デフォルトã§ã¯ã‚ªãƒ¼ãƒˆãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ï¼‰ã‚’無効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:725 +#: usr/local/www/interfaces_ppps_edit.php:726 +#: usr/local/www/interfaces_ppps_edit.php:732 +#: usr/local/www/interfaces_ppps_edit.php:730 +#: usr/local/www/interfaces_ppps_edit.php:730 +msgid "" +"Address and control field compression. This option only applies to " +"asynchronous link types. It saves two bytes per frame." +msgstr "「アドレスãŠã‚ˆã³åˆ¶å¾¡ãƒ•ィールドã®åœ§ç¸®ã€‚ã“ã®ã‚ªãƒ—ションã¯ã€ã«é©ç”¨ã•れã€ã€ŒéžåŒæœŸãƒªãƒ³ã‚¯ã‚¿ã‚¤ãƒ—。ã“れã¯ã€ãƒ•レームã‚ãŸã‚Š2ãƒã‚¤ãƒˆã‚’ä¿å­˜ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:729 +#: usr/local/www/interfaces_ppps_edit.php:730 +#: usr/local/www/interfaces_ppps_edit.php:736 +#: usr/local/www/interfaces_ppps_edit.php:734 +#: usr/local/www/interfaces_ppps_edit.php:734 +msgid "ProtoComp" +msgstr "ProtoComp" + +#: usr/local/www/interfaces_ppps_edit.php:731 +#: usr/local/www/interfaces_ppps_edit.php:732 +#: usr/local/www/interfaces_ppps_edit.php:738 +#: usr/local/www/interfaces_ppps_edit.php:736 +#: usr/local/www/interfaces_ppps_edit.php:736 +msgid "Disable protocomp (compression) (auto-negotiated by default)." +msgstr "protocomp (圧縮) (デフォルトã§ã¯ã‚ªãƒ¼ãƒˆãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ï¼‰ã‚’無効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:732 +#: usr/local/www/interfaces_ppps_edit.php:733 +#: usr/local/www/interfaces_ppps_edit.php:739 +#: usr/local/www/interfaces_ppps_edit.php:737 +#: usr/local/www/interfaces_ppps_edit.php:737 +msgid "" +"Protocol field compression. This option saves one byte per frame for most " +"frames." +msgstr "フレーム「プロトコルフィールド圧縮。ã“ã®ã‚ªãƒ—ションã¯ã€ã»ã¨ã‚“ã©ã®ãƒ•レームã‚ãŸã‚Š1ãƒã‚¤ãƒˆã‚’節約ã§ãã¾ã™ã€ 。" + +#: usr/local/www/interfaces_ppps_edit.php:746 +#: usr/local/www/interfaces_ppps_edit.php:747 +#: usr/local/www/interfaces_ppps_edit.php:753 +#: usr/local/www/interfaces_ppps_edit.php:750 +#: usr/local/www/interfaces_ppps_edit.php:750 +msgid "Link Parameters" +msgstr "リンク·パラメータ" + +#: usr/local/www/interfaces_ppps_edit.php:753 +#: usr/local/www/interfaces_ppps_edit.php:754 +#: usr/local/www/interfaces_ppps_edit.php:760 +#: usr/local/www/interfaces_ppps_edit.php:757 +#: usr/local/www/interfaces_ppps_edit.php:757 +msgid "" +"Set ONLY for MLPPP connections and ONLY when links have different bandwidths." +msgstr "「 MLPPP接続ã«ã®ã¿è¨­å®šã—ã€ãƒªãƒ³ã‚¯ã¯ç•°ãªã‚‹å¸¯åŸŸå¹…ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã®ã¿ã§ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:760 +#: usr/local/www/interfaces_ppps_edit.php:761 +#: usr/local/www/interfaces_ppps_edit.php:767 +#: usr/local/www/interfaces_ppps_edit.php:764 +#: usr/local/www/interfaces_ppps_edit.php:764 +msgid "MTU will default to 1492." +msgstr "MTUã¯1492ã«ãƒ‡ãƒ•ォルト設定ã•れã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:764 +#: usr/local/www/interfaces_ppps_edit.php:765 +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:768 +#: usr/local/www/interfaces_ppps_edit.php:768 +msgid "MRU" +msgstr "MRU" + +#: usr/local/www/interfaces_ppps_edit.php:767 +#: usr/local/www/interfaces_ppps_edit.php:774 +#: usr/local/www/interfaces_ppps_edit.php:768 +#: usr/local/www/interfaces_ppps_edit.php:775 +#: usr/local/www/interfaces_ppps_edit.php:781 +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:778 +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:778 +msgid "will be auto-negotiated by default." +msgstr "オートãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã¯ãƒ‡ãƒ•ォルトã§ã¨ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:772 +#: usr/local/www/interfaces_ppps_edit.php:778 +#: usr/local/www/interfaces_ppps_edit.php:775 +#: usr/local/www/interfaces_ppps_edit.php:775 +msgid "MRRU" +msgstr "MRRU" + +#: usr/local/www/interfaces_ppps_edit.php:774 +#: usr/local/www/interfaces_ppps_edit.php:775 +#: usr/local/www/interfaces_ppps_edit.php:781 +#: usr/local/www/interfaces_ppps_edit.php:778 +#: usr/local/www/interfaces_ppps_edit.php:778 +msgid "Set ONLY for MLPPP connections." +msgstr "ONLY MLPPP接続ã«è¨­å®šã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_qinq.php:64 usr/local/www/interfaces_qinq.php:66 +#: usr/local/www/interfaces_qinq.php:66 +msgid "" +"This QinQ cannot be deleted because it is still being used as an interface." +msgstr "ãれã¯ã¾ã ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ã‚‹ãŸã‚〠「ã“れã®QinQを削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/interfaces_qinq.php:86 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_qinq.php:89 usr/local/www/interfaces_qinq.php:89 +#: usr/local/www/interfaces_qinq_edit.php:39 +msgid "QinQ" +msgstr "ã®QinQ" + +#: usr/local/www/interfaces_qinq.php:117 +#: usr/local/www/interfaces_qinq_edit.php:356 +#: usr/local/www/interfaces_qinq_edit.php:357 +#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:121 +#: usr/local/www/interfaces_qinq_edit.php:360 +#: usr/local/www/interfaces_qinq.php:121 +#: usr/local/www/interfaces_qinq_edit.php:360 +msgid "Tag" +msgstr "ã‚¿ã‚°" + +#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:119 +#: usr/local/www/interfaces_qinq.php:122 usr/local/www/interfaces_qinq.php:122 +msgid "QinQ members" +msgstr "QinQã®ãƒ¡ãƒ³ãƒãƒ¼" + +#: usr/local/www/interfaces_qinq.php:142 usr/local/www/interfaces_qinq.php:143 +#: usr/local/www/interfaces_qinq.php:146 usr/local/www/interfaces_qinq.php:146 +msgid "Do you really want to delete this QinQ?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®QinQã®ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/interfaces_qinq.php:153 usr/local/www/interfaces_qinq.php:154 +#: usr/local/www/interfaces_qinq.php:157 usr/local/www/interfaces_qinq.php:157 +#, php-format +msgid "" +"Not all drivers/NICs support 802.1Q QinQ tagging properly. On cards that do " +"not explicitly support it, QinQ tagging will still work, but the reduced MTU " +"may cause problems. See the %s handbook for information on supported cards." +msgstr "明示的ã«ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„"ã™ã¹ã¦ã®ãƒ‰ãƒ©ã‚¤ãƒ/ NICãŒ802.1Q QinQã®ãŒãªã„カードã§ã¯ã€‚é©åˆ‡ã«ã‚¿ã‚°ä»˜ã‘をサãƒãƒ¼ãƒˆã—ãªã„〠ã€ã®QinQタギングã¯ã¾ã å‹•作ã—ã¾ã™ãŒã€ç¸®å°MTUã¯ã€Œå•題ãŒç™ºç”Ÿã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚サãƒãƒ¼ãƒˆã•れã¦ã„るカードã«ã¤ã„ã¦ã¯ã€ %sãƒãƒ³ãƒ‰ãƒ–ックをå‚ç…§ã—ã¦ãã ã•ã„。" + +#: usr/local/www/interfaces_qinq_edit.php:84 +#: usr/local/www/interfaces_qinq_edit.php:85 +#: usr/local/www/interfaces_qinq_edit.php:85 +msgid "First level tag cannot be empty." +msgstr "最åˆã®ãƒ¬ãƒ™ãƒ«ã®ã‚¿ã‚°ã¯ç©ºã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/interfaces_qinq_edit.php:86 +#: usr/local/www/interfaces_qinq_edit.php:87 +#: usr/local/www/interfaces_qinq_edit.php:87 +msgid "" +"You are editing an existing entry and modifying the first level tag is not " +"allowed." +msgstr "「既存ã®ã‚¨ãƒ³ãƒˆãƒªã‚’編集ã—ã€æœ€åˆã®ãƒ¬ãƒ™ãƒ«ã®ã‚¿ã‚°ãŒã•れã¦ã„ãªã„変更ã—ã¦ã„ã‚‹ã€ã“ã¨ãŒã§ãã¾ã—ãŸã€‚" + +#: usr/local/www/interfaces_qinq_edit.php:88 +#: usr/local/www/interfaces_qinq_edit.php:89 +#: usr/local/www/interfaces_qinq_edit.php:89 +msgid "" +"You are editing an existing entry and modifying the interface is not allowed." +msgstr "「ã‚ãªãŸã¯ã€æ—¢å­˜ã®ã‚¨ãƒ³ãƒˆãƒªã‚’編集ã—ã¦ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスãŒè¨±å¯ã•れã¦ã„ãªã„変更ã—ã¦ã„る。" + +#: usr/local/www/interfaces_qinq_edit.php:92 +#: usr/local/www/interfaces_qinq_edit.php:93 +#: usr/local/www/interfaces_qinq_edit.php:93 +msgid "QinQ level already exists for this interface, edit it!" +msgstr "ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯ã€ãれを編集ã™ã‚‹ãŸã‚ã«QinQã®ãƒ¬ãƒ™ãƒ«ãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ï¼" + +#: usr/local/www/interfaces_qinq_edit.php:96 +#: usr/local/www/interfaces_qinq_edit.php:97 +#: usr/local/www/interfaces_qinq_edit.php:97 +msgid "" +"A normal VLAN exists with this tag please remove it to use this tag for QinQ " +"first level." +msgstr "最åˆã®ãƒ¬ãƒ™ãƒ«ã€Œæ­£å¸¸ãªVLANã¯ã€ã“ã®ã‚¿ã‚°ã«å­˜åœ¨ã—ã€ãれãŒQinQã®ãŸã‚ã«ã€ã“ã®ã‚¿ã‚°ã‚’使用ã™ã‚‹ãŸã‚ã«å‰Šé™¤ã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/interfaces_qinq_edit.php:123 +#: usr/local/www/interfaces_qinq_edit.php:133 +#: usr/local/www/interfaces_qinq_edit.php:124 +#: usr/local/www/interfaces_qinq_edit.php:134 +#: usr/local/www/interfaces_qinq_edit.php:124 +#: usr/local/www/interfaces_qinq_edit.php:134 +msgid "Tags can contain only numbers or a range in format #-#." +msgstr "ã‚¿ã‚°ã¯ã€æ•°å­—ã‚„å½¢å¼ã®ç¯„囲をå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/interfaces_qinq_edit.php:193 +#: usr/local/www/interfaces_qinq_edit.php:194 +#: usr/local/www/interfaces_qinq_edit.php:197 +#: usr/local/www/interfaces_qinq_edit.php:197 +msgid "QinQ VLANs group" +msgstr "QinQã®VLANã®ã‚°ãƒ«ãƒ¼ãƒ—" + +#: usr/local/www/interfaces_qinq_edit.php:269 +#: usr/local/www/interfaces_qinq_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:273 +#: usr/local/www/interfaces_qinq_edit.php:272 +#: usr/local/www/interfaces_qinq_edit.php:272 +msgid "members" +msgstr "メンãƒãƒ¼" + +#: usr/local/www/interfaces_qinq_edit.php:273 +#: usr/local/www/interfaces_qinq_edit.php:274 +#: usr/local/www/interfaces_qinq_edit.php:277 +#: usr/local/www/interfaces_qinq_edit.php:276 +#: usr/local/www/interfaces_qinq_edit.php:276 +msgid "detail" +msgstr "詳細" + +#: usr/local/www/interfaces_qinq_edit.php:285 +#: usr/local/www/interfaces_qinq_edit.php:286 +#: usr/local/www/interfaces_qinq_edit.php:289 +#: usr/local/www/interfaces_qinq_edit.php:289 +msgid "Interface QinQ Edit" +msgstr "インタフェースã®QinQ編集" + +#: usr/local/www/interfaces_qinq_edit.php:305 +#: usr/local/www/interfaces_qinq_edit.php:306 +#: usr/local/www/interfaces_qinq_edit.php:309 +#: usr/local/www/interfaces_qinq_edit.php:309 +msgid "Only QinQ capable interfaces will be shown." +msgstr "唯一ã®QinQãŒå¯èƒ½ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒè¡¨ç¤ºã•れã¾ã™ã€‚" + +#: usr/local/www/interfaces_qinq_edit.php:308 +#: usr/local/www/interfaces_qinq_edit.php:309 +#: usr/local/www/interfaces_qinq_edit.php:312 +#: usr/local/www/interfaces_qinq_edit.php:312 +msgid "First level tag" +msgstr "最åˆã®ãƒ¬ãƒ™ãƒ«ã®ã‚¿ã‚°" + +#: usr/local/www/interfaces_qinq_edit.php:313 +#: usr/local/www/interfaces_qinq_edit.php:314 +#: usr/local/www/interfaces_qinq_edit.php:317 +#: usr/local/www/interfaces_qinq_edit.php:317 +msgid "" +"This is the first level VLAN tag. On top of this are stacked the member " +"VLANs defined below." +msgstr "「ã“ã‚Œã¯æœ€åˆã®ãƒ¬ãƒ™ãƒ«ã®VLANã‚¿ã‚°ã§ã™ã€‚ãã®ä¸Šã«ç©å±¤ã•れãŸãƒ¡ãƒ³ãƒãƒ¼ã§ã€Œ VLANãŒä»¥ä¸‹ã«å®šç¾©ã€‚" + +#: usr/local/www/interfaces_qinq_edit.php:333 +#: usr/local/www/interfaces_qinq_edit.php:334 +#: usr/local/www/interfaces_qinq_edit.php:337 +#: usr/local/www/interfaces_qinq_edit.php:337 +msgid "" +"Adds interface to QinQ interface groups so you can write filter rules easily." +msgstr "ã‚ãªãŸãŒç°¡å˜ã«ãƒ•ィルタルールを作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã®ã§ã€ 「 QinQサブインターフェイスグループã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを追加ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_qinq_edit.php:350 +#: usr/local/www/interfaces_qinq_edit.php:351 +#: usr/local/www/interfaces_qinq_edit.php:354 +#: usr/local/www/interfaces_qinq_edit.php:354 +msgid "" +"You can specify ranges in the input below. The format is pretty simple i.e " +"9-100 or 10.20..." +msgstr "「ã‚ãªãŸã¯ã€ä»¥ä¸‹ã®å…¥åŠ›ã§ç¯„囲を指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å½¢å¼ã€ã™ãªã‚ã¡éžå¸¸ã«ç°¡å˜ã§ã™ã€ 9ã‹ã‚‰100ã¾ãŸã¯10.20ã‚’..." + +#: usr/local/www/interfaces_wireless.php:63 +#: usr/local/www/interfaces_wireless.php:65 +#: usr/local/www/interfaces_wireless.php:65 +msgid "" +"This wireless clone cannot be deleted because it is assigned as an interface." +msgstr "ãれã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¨ã—ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã‚‹ã®ã§ã€ã€Œã“ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ³ã¯å‰Šé™¤ã§ãã¾ã›ã‚“。" + +#: usr/local/www/interfaces_wireless.php:124 +#: usr/local/www/interfaces_wireless.php:125 +#: usr/local/www/interfaces_wireless.php:127 +#: usr/local/www/interfaces_wireless.php:127 +msgid "Do you really want to delete this wireless clone?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/interfaces_wireless.php:135 +#: usr/local/www/interfaces_wireless.php:136 +#: usr/local/www/interfaces_wireless.php:138 +#: usr/local/www/interfaces_wireless.php:138 +msgid "" +"Here you can configure clones of wireless interfaces, which can be assigned " +"as separate independent interfaces. Only available on wireless chipsets that " +"support this, with limitations on the number that can be created in each " +"mode." +msgstr "別々ã®ç‹¬ç«‹ã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¨ã—ã¦ã€Œã“ã“ã§ã¯ã€å‰²ã‚Šå½“ã¦å¯èƒ½ãªç„¡ç·šã‚¤ãƒ³ã‚¿ãƒ•ェースã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’ã€è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。モードã€ãれãžã‚Œã«ä½œæˆã§ãã‚‹æ•°ã«ã¯åˆ¶é™ä»˜ãã§ã€ã“れをサãƒãƒ¼ãƒˆã™ã‚‹ã€ã¨ç„¡ç·šãƒãƒƒãƒ—セットã§ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚" + +#: usr/local/www/interfaces_wireless_edit.php:116 +#: usr/local/www/interfaces_wireless_edit.php:118 +#: usr/local/www/interfaces_wireless_edit.php:118 +msgid "" +"This wireless clone cannot be modified because it is still assigned as an " +"interface." +msgstr "インターフェース「ãれã¯ã¾ã ã¨ã—ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®ç„¡ç·šã‚¯ãƒ­ãƒ¼ãƒ³ã¯å¤‰æ›´ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/interfaces_wireless_edit.php:118 +#: usr/local/www/interfaces_wireless_edit.php:120 +#: usr/local/www/interfaces_wireless_edit.php:120 +msgid "" +"Use the configuration page for the assigned interface to change the mode." +msgstr "ã€ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹ã«ã¯ã€å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®è¨­å®šãƒšãƒ¼ã‚¸ã‚’使用ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces_wireless_edit.php:123 +#: usr/local/www/interfaces_wireless_edit.php:125 +#: usr/local/www/interfaces_wireless_edit.php:125 +#, php-format +msgid "" +"Error creating interface with mode %1$s. The %2$s interface may not support " +"creating more clones with the selected mode." +msgstr "é¸æŠžã—ãŸãƒ¢ãƒ¼ãƒ‰ã§ã‚ˆã‚Šå¤šãã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã™ã‚‹ã€ãƒ¢ãƒ¼ãƒ‰ã¯%1$sã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースを作æˆã™ã‚‹ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ %2$sインタフェースã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„å¯èƒ½æ€§ãŒã€ 。" + +#: usr/local/www/interfaces_wireless_edit.php:128 +#: usr/local/www/interfaces_wireless_edit.php:130 +#: usr/local/www/interfaces_wireless_edit.php:130 +#, php-format +msgid "Created with id %s" +msgstr "IDã®%sを使用ã—ã¦ä½œæˆ" + +#: usr/local/www/interfaces_wireless_edit.php:131 +#: usr/local/www/interfaces_wireless_edit.php:133 +#: usr/local/www/interfaces_wireless_edit.php:133 +msgid "Created without id" +msgstr "IDãªã—ã§ä½œæˆ" + +#: usr/local/www/interfaces_wireless_edit.php:156 +#: usr/local/www/interfaces_wireless_edit.php:158 +#: usr/local/www/interfaces_wireless_edit.php:158 +msgid "Wireless clone configuration" +msgstr "無線クローン構æˆ" + +#: usr/local/www/load_balancer_monitor.php:72 +#: usr/local/www/load_balancer_monitor.php:72 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"pool." +msgstr "プール「ãれã¯ã¾ã å°‘ãªãã¨ã‚‚1ã«ã‚ˆã£ã¦å‚ç…§ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/load_balancer_monitor.php:102 +#: usr/local/www/load_balancer_relay_protocol.php:114 +#: usr/local/www/load_balancer_setting.php:111 +#: usr/local/www/load_balancer_setting.php:110 +#: usr/local/www/load_balancer_monitor.php:100 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/load_balancer_setting.php:110 +#: usr/local/www/load_balancer_monitor.php:100 +msgid "The load balancer configuration has been changed" +msgstr "ロードãƒãƒ©ãƒ³ã‚µè¨­å®šãŒå¤‰æ›´ã•れã¾ã—ãŸ" + +#: usr/local/www/vpn_pppoe.php:96 usr/local/www/vpn_pppoe.php:97 +#: usr/local/www/vpn_pppoe.php:98 usr/local/www/vpn_pppoe.php:98 +msgid "The PPPoE entry list has been changed" +msgstr "PPPoEã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãƒªã‚¹ãƒˆãŒå¤‰æ›´ã•れã¾ã—ãŸ" + +#: usr/local/www/vpn_pppoe.php:103 +#: usr/local/www/services_captiveportal_zones.php:54 +#: usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/services_captiveportal_zones.php:55 +#: usr/local/www/vpn_pppoe.php:105 usr/local/www/vpn_pppoe.php:105 +#: usr/local/www/services_captiveportal_zones.php:55 +msgid "Number of users" +msgstr "ユーザー数" + +#: usr/local/www/vpn_pppoe.php:109 usr/local/www/vpn_pppoe.php:144 +#: usr/local/www/vpn_pppoe.php:110 usr/local/www/vpn_pppoe.php:145 +#: usr/local/www/vpn_pppoe.php:111 usr/local/www/vpn_pppoe.php:146 +#: usr/local/www/vpn_pppoe.php:111 usr/local/www/vpn_pppoe.php:146 +msgid "add a new pppoe instance" +msgstr "æ–°ã—ã„ã®PPPoEインスタンスを追加" + +#: usr/local/www/vpn_pppoe.php:131 usr/local/www/vpn_pppoe.php:132 +#: usr/local/www/vpn_pppoe.php:133 usr/local/www/vpn_pppoe.php:133 +msgid "edit pppoe instance" +msgstr "編集ã®PPPoEインスタンス" + +#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133 +#: usr/local/www/vpn_pppoe.php:134 usr/local/www/vpn_pppoe.php:134 +msgid "" +"Do you really want to delete this entry? All elements that still use it will " +"become invalid (e.g. filter rules)!" +msgstr " (例ãˆã°ãƒ•ィルタルール)ãŒç„¡åйã«ãªã‚‹ã€Œæœ¬å½“ã«ï¼Ÿã¾ã ãれを使用ã™ã‚‹ã™ã¹ã¦ã®è¦ç´ ãŒã—ã¾ã™ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã—ã¾ã™ã‹"ï¼" + +#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133 +#: usr/local/www/vpn_pppoe.php:134 usr/local/www/vpn_pppoe.php:134 +msgid "delete pppoe instance" +msgstr "ã®PPPoEインスタンスを削除" + +#: usr/local/www/load_balancer_monitor_edit.php:66 +#: usr/local/www/load_balancer_monitor_edit.php:66 +msgid "Load Balancer: Monitor:" +msgstr "ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ¢ãƒ‹ã‚¿ï¼š" + +#: usr/local/www/load_balancer_monitor_edit.php:95 +#: usr/local/www/load_balancer_monitor_edit.php:95 +msgid "This monitor name has already been used. Monitor names must be unique." +msgstr "ã“ã®ãƒ¢ãƒ‹ã‚¿åãŒæ—¢ã«ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚モニターåã¯ä¸€æ„ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_monitor_edit.php:98 +#: usr/local/www/load_balancer_pool_edit.php:86 +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:127 +#: usr/local/www/load_balancer_relay_protocol_edit.php:89 +#: usr/local/www/load_balancer_relay_protocol_edit.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:127 +#: usr/local/www/load_balancer_monitor_edit.php:98 +#: usr/local/www/load_balancer_pool_edit.php:86 +msgid "You cannot use spaces in the 'name' field." +msgstr "ã‚ãªãŸã¯ã€ 「åå‰ã€æ¬„ã«ã‚¹ãƒšãƒ¼ã‚¹ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_monitor_edit.php:112 +#: usr/local/www/services_dhcp_edit.php:118 +#: usr/local/www/services_dnsmasq_edit.php:85 +#: usr/local/www/services_dhcpv6_edit.php:115 +#: usr/local/www/services_dnsmasq_edit.php:86 +#: usr/local/www/services_dhcpv6_edit.php:117 +#: usr/local/www/services_dhcp_edit.php:120 +#: usr/local/www/services_dhcpv6_edit.php:120 +#: usr/local/www/services_dhcp_edit.php:154 +#: usr/local/www/services_dhcpv6_edit.php:120 +#: usr/local/www/services_dhcp_edit.php:154 +#: usr/local/www/load_balancer_monitor_edit.php:112 +#: usr/local/www/services_dnsmasq_edit.php:86 +msgid "The hostname can only contain the characters A-Z, 0-9 and '-'." +msgstr "' -'ホストåã¯æ–‡å­—ã ã‘ã€A〜Zã€0〜9ã¨ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/load_balancer_monitor_edit.php:118 +#: usr/local/www/load_balancer_monitor_edit.php:118 +msgid "HTTP(s) codes must be from RFC2616." +msgstr "HTTP(S )コードã¯RFC2616ã‹ã‚‰ã®ã‚‚ã®ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_monitor_edit.php:122 +#: usr/local/www/load_balancer_monitor_edit.php:122 +msgid "The path to monitor must be set." +msgstr "監視ã™ã‚‹ãŸã‚ã®ãƒ‘スを設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/load_balancer_monitor_edit.php:145 +#: usr/local/www/load_balancer_monitor_edit.php:145 +#, php-format +msgid "modified '%s' monitor:" +msgstr "修正ã•れãŸã€Œ %s'モニター:" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:197 +msgid "ICMP" +msgstr "ICMP" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:268 +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/system_advanced_admin.php:311 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:266 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/system_advanced_admin.php:311 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:266 +msgid "HTTP" +msgstr "HTTP" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:301 +#: usr/local/www/system_advanced_admin.php:314 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:299 +#: usr/local/www/system_advanced_admin.php:314 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:299 +msgid "HTTPS" +msgstr "HTTPS" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:335 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:333 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:333 +msgid "Send/Expect" +msgstr "センド/期待" + +#: usr/local/www/load_balancer_monitor_edit.php:232 +#: usr/local/www/load_balancer_monitor_edit.php:230 +#: usr/local/www/load_balancer_monitor_edit.php:230 +msgid "Edit Load Balancer - Monitor entry" +msgstr "編集ロードãƒãƒ©ãƒ³ã‚µ - エントリを監視" + +#: usr/local/www/load_balancer_monitor_edit.php:272 +#: usr/local/www/load_balancer_monitor_edit.php:305 +#: usr/local/www/load_balancer_monitor_edit.php:270 +#: usr/local/www/load_balancer_monitor_edit.php:303 +#: usr/local/www/load_balancer_monitor_edit.php:270 +#: usr/local/www/load_balancer_monitor_edit.php:303 +msgid "Path" +msgstr "パス" + +#: usr/local/www/load_balancer_monitor_edit.php:278 +#: usr/local/www/load_balancer_monitor_edit.php:311 +#: usr/local/www/diag_ping.php:55 usr/local/www/diag_ping.php:90 +#: usr/local/www/services_dnsmasq.php:243 +#: usr/local/www/services_dnsmasq_edit.php:141 +#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:89 +#: usr/local/www/services_rfc2136_edit.php:169 +#: usr/local/www/services_dnsmasq_edit.php:196 +#: usr/local/www/services_dnsmasq_edit.php:237 +#: usr/local/www/services_unbound.php:279 +#: usr/local/www/services_dnsmasq.php:244 +#: usr/local/www/services_dnsmasq_edit.php:197 +#: usr/local/www/services_dnsmasq_edit.php:238 +#: usr/local/www/load_balancer_monitor_edit.php:276 +#: usr/local/www/load_balancer_monitor_edit.php:309 +#: usr/local/www/diag_testport.php:60 usr/local/www/diag_testport.php:117 +#: usr/local/www/diag_traceroute.php:93 usr/local/www/services_dnsmasq.php:269 +#: usr/local/www/diag_traceroute.php:63 usr/local/www/diag_traceroute.php:99 +#: usr/local/www/diag_ping.php:57 usr/local/www/diag_ping.php:97 +#: usr/local/www/services_dnsmasq.php:282 +#: usr/local/www/services_dnsmasq.php:346 usr/local/www/diag_testport.php:60 +#: usr/local/www/diag_testport.php:117 usr/local/www/diag_traceroute.php:63 +#: usr/local/www/diag_traceroute.php:99 +#: usr/local/www/load_balancer_monitor_edit.php:276 +#: usr/local/www/load_balancer_monitor_edit.php:309 +#: usr/local/www/diag_ping.php:57 usr/local/www/diag_ping.php:97 +#: usr/local/www/services_dnsmasq_edit.php:197 +#: usr/local/www/services_dnsmasq_edit.php:238 +#: usr/local/www/services_rfc2136_edit.php:169 +#: usr/local/www/services_dnsmasq.php:346 +msgid "Host" +msgstr "ホスト" + +#: usr/local/www/load_balancer_monitor_edit.php:280 +#: usr/local/www/load_balancer_monitor_edit.php:313 +#: usr/local/www/load_balancer_monitor_edit.php:278 +#: usr/local/www/load_balancer_monitor_edit.php:311 +#: usr/local/www/load_balancer_monitor_edit.php:278 +#: usr/local/www/load_balancer_monitor_edit.php:311 +msgid "Hostname for Host: header if needed." +msgstr "ホストã®ãƒ›ã‚¹ãƒˆå:ヘッダを必è¦ã«å¿œã˜ã¦ã€‚" + +#: usr/local/www/load_balancer_monitor_edit.php:284 +#: usr/local/www/load_balancer_monitor_edit.php:317 +#: usr/local/www/load_balancer_monitor_edit.php:282 +#: usr/local/www/load_balancer_monitor_edit.php:315 +#: usr/local/www/load_balancer_monitor_edit.php:282 +#: usr/local/www/load_balancer_monitor_edit.php:315 +msgid "HTTP Code" +msgstr "HTTPコード" + +#: usr/local/www/load_balancer_monitor_edit.php:339 +#: usr/local/www/load_balancer_monitor_edit.php:337 +#: usr/local/www/load_balancer_monitor_edit.php:337 +msgid "Send string" +msgstr "文字列をé€ä¿¡" + +#: usr/local/www/load_balancer_monitor_edit.php:345 +#: usr/local/www/load_balancer_monitor_edit.php:343 +#: usr/local/www/load_balancer_monitor_edit.php:343 +msgid "Expect string" +msgstr "文字列を期待ã™ã‚‹" + +#: usr/local/www/load_balancer_pool_edit.php:65 +#: usr/local/www/load_balancer_pool_edit.php:65 +msgid "Load Balancer: Pool:" +msgstr "ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ—ール:" + +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:76 +msgid "Server List" +msgstr "サーãƒãƒ¼ãƒªã‚¹ãƒˆ" + +#: usr/local/www/load_balancer_pool_edit.php:83 +#: usr/local/www/load_balancer_pool_edit.php:83 +msgid "This pool name has already been used. Pool names must be unique." +msgstr "ã“ã®ãƒ—ールåãŒæ—¢ã«ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚プールåã¯ä¸€æ„ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_pool_edit.php:89 +#: usr/local/www/load_balancer_virtual_server_edit.php:92 +msgid "The port must be an integer between 1 and 65535." +msgstr "ãƒãƒ¼ãƒˆã¯1 〜65535ã®é–“ã®æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_pool_edit.php:93 +#: usr/local/www/load_balancer_pool_edit.php:93 +msgid "The retry value must be an integer between 1 and 65535." +msgstr "å†è©¦è¡Œå€¤ã¯1 〜65535ã®é–“ã®æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_pool_edit.php:98 +#, php-format +msgid "%s is not a valid IP address (in "enabled" list)." +msgstr "%sã¯ï¼ˆ 「有効ã€ãƒªã‚¹ãƒˆä¸­ã®ï¼‰æœ‰åйãªIPアドレスã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_pool_edit.php:105 +#, php-format +msgid "%s is not a valid IP address (in "disabled" list)." +msgstr "%sã¯ï¼ˆ 「無効ã€ãƒªã‚¹ãƒˆä¸­ã®ï¼‰æœ‰åйãªIPアドレスã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_pool_edit.php:114 +#: usr/local/www/load_balancer_pool_edit.php:120 +#: usr/local/www/load_balancer_pool_edit.php:120 +msgid "Invalid monitor chosen." +msgstr "無効ãªãƒ¢ãƒ‹ã‚¿ãŒé¸æŠžã—ãŸã€‚" + +#: usr/local/www/load_balancer_pool_edit.php:121 +#: usr/local/www/load_balancer_pool_edit.php:127 +#: usr/local/www/load_balancer_pool_edit.php:127 +#, php-format +msgid " modified '%s' pool:" +msgstr "修正ã•れãŸã€Œ %s'プール:" + +#: usr/local/www/load_balancer_pool_edit.php:178 +#: usr/local/www/load_balancer_pool_edit.php:186 +#: usr/local/www/load_balancer_pool_edit.php:184 +#: usr/local/www/load_balancer_pool_edit.php:184 +msgid "Add/edit Load Balancer - Pool entry" +msgstr "追加/編集ロードãƒãƒ©ãƒ³ã‚µ - プールエントリ" + +#: usr/local/www/load_balancer_pool_edit.php:190 +#: usr/local/www/load_balancer_pool_edit.php:198 +#: usr/local/www/load_balancer_pool_edit.php:196 +#: usr/local/www/load_balancer_pool_edit.php:196 +msgid "Load Balance" +msgstr "è² è·å¹³è¡¡" + +#: usr/local/www/load_balancer_pool_edit.php:191 +#: usr/local/www/load_balancer_pool_edit.php:199 +#: usr/local/www/load_balancer_pool_edit.php:197 +#: usr/local/www/load_balancer_pool_edit.php:197 +msgid "Manual Failover" +msgstr "手動フェイルオーãƒãƒ¼" + +#: usr/local/www/load_balancer_pool_edit.php:206 +#: usr/local/www/load_balancer_pool_edit.php:215 +#: usr/local/www/load_balancer_pool_edit.php:213 +#: usr/local/www/load_balancer_pool_edit.php:213 +msgid "This is the port your servers are listening on." +msgstr "ã“れã¯ã€ã‚µãƒ¼ãƒãƒ¼ãŒãƒªãƒƒã‚¹ãƒ³ã—ã¦ã„ã‚‹ãƒãƒ¼ãƒˆã§ã™ã€‚" + +#: usr/local/www/load_balancer_pool_edit.php:210 +#: usr/local/www/load_balancer_pool_edit.php:227 +#: usr/local/www/load_balancer_pool_edit.php:225 +#: usr/local/www/load_balancer_pool_edit.php:225 +msgid "Retry" +msgstr "リトライ" + +#: usr/local/www/load_balancer_pool_edit.php:213 +#: usr/local/www/load_balancer_pool_edit.php:230 +#: usr/local/www/load_balancer_pool_edit.php:228 +#: usr/local/www/load_balancer_pool_edit.php:228 +msgid "" +"Optionally specify how many times to retry checking a server before " +"declaring it down." +msgstr "ãれを宣言ã™ã‚‹"オプションã§å‰ã«ã‚µãƒ¼ãƒãƒ¼ã‚’ãƒã‚§ãƒƒã‚¯ã—å†è©¦è¡Œã™ã‚‹å›žæ•°ã‚’指定〠。" + +#: usr/local/www/load_balancer_pool_edit.php:220 +#: usr/local/www/load_balancer_pool_edit.php:237 +#: usr/local/www/load_balancer_pool_edit.php:235 +#: usr/local/www/load_balancer_pool_edit.php:235 +msgid "Add item to pool" +msgstr "プールã«é …目を追加ã™ã‚‹" + +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/load_balancer_pool_edit.php:255 +#: usr/local/www/load_balancer_pool_edit.php:253 +#: usr/local/www/load_balancer_pool_edit.php:253 +msgid "" +"Please add a monitor IP address on the monitors tab if you wish to use this " +"feature." +msgstr "ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹å ´åˆã®ãƒ¢ãƒ‹ã‚¿]タブã§ç›£è¦–IPアドレスを追加ã—ã¦ãã ã•ã„。" + +#: usr/local/www/load_balancer_pool_edit.php:244 +#: usr/local/www/load_balancer_pool_edit.php:261 +#: usr/local/www/load_balancer_pool_edit.php:259 +#: usr/local/www/load_balancer_pool_edit.php:259 +msgid "Server IP Address" +msgstr "サーãƒã®IPアドレス" + +#: usr/local/www/load_balancer_pool_edit.php:247 +#: usr/local/www/load_balancer_pool_edit.php:264 +#: usr/local/www/load_balancer_pool_edit.php:262 +#: usr/local/www/load_balancer_pool_edit.php:262 +msgid "Add to pool" +msgstr "プールã«è¿½åŠ " + +#: usr/local/www/load_balancer_pool_edit.php:254 +#: usr/local/www/load_balancer_pool_edit.php:271 +#: usr/local/www/load_balancer_pool_edit.php:269 +#: usr/local/www/load_balancer_pool_edit.php:269 +msgid "Current Pool Members" +msgstr "ç¾åœ¨ã®ãƒ—ールメンãƒãƒ¼" + +#: usr/local/www/load_balancer_pool_edit.php:264 +#: usr/local/www/load_balancer_pool_edit.php:281 +#: usr/local/www/load_balancer_pool_edit.php:279 +#: usr/local/www/load_balancer_pool_edit.php:279 +msgid "Pool Disabled" +msgstr "プールãƒãƒªã‚¢ãƒ•リー" + +#: usr/local/www/load_balancer_pool_edit.php:277 +#: usr/local/www/load_balancer_pool_edit.php:300 +#: usr/local/www/load_balancer_relay_protocol_edit.php:253 +#: usr/local/www/load_balancer_pool_edit.php:294 +#: usr/local/www/load_balancer_pool_edit.php:317 +#: usr/local/www/load_balancer_relay_protocol_edit.php:251 +#: usr/local/www/load_balancer_pool_edit.php:292 +#: usr/local/www/load_balancer_pool_edit.php:315 +#: usr/local/www/load_balancer_relay_protocol_edit.php:251 +#: usr/local/www/load_balancer_pool_edit.php:292 +#: usr/local/www/load_balancer_pool_edit.php:315 +msgid "Remove" +msgstr "削除ã™ã‚‹" + +#: usr/local/www/load_balancer_pool_edit.php:287 +#: usr/local/www/load_balancer_pool_edit.php:304 +#: usr/local/www/load_balancer_pool_edit.php:302 +#: usr/local/www/load_balancer_pool_edit.php:302 +msgid "Enabled (default)" +msgstr "有効(デフォルト)" + +#: usr/local/www/load_balancer_virtual_server_edit.php:61 +#: usr/local/www/load_balancer_virtual_server_edit.php:61 +msgid "Load Balancer: Virtual Server:" +msgstr "ロード·ãƒãƒ©ãƒ³ã‚µï¼šä»®æƒ³ã‚µãƒ¼ãƒãƒ¼ï¼š" + +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:261 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/load_balancer_virtual_server_edit.php:250 +#: usr/local/www/load_balancer_virtual_server_edit.php:248 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:248 +#: usr/local/www/load_balancer_relay_protocol.php:100 +msgid "Relay Protocol" +msgstr "リレー·プロトコル" + +#: usr/local/www/load_balancer_virtual_server_edit.php:86 +#: usr/local/www/load_balancer_virtual_server_edit.php:86 +msgid "" +"This virtual server name has already been used. Virtual server names must " +"be unique." +msgstr "「ã“ã®ä»®æƒ³ã‚µãƒ¼ãƒãƒ¼åã¯ã™ã§ã«ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚仮想サーãƒãƒ¼åãŒãªã‘れã°ãªã‚Šã¾ã›ã‚“ã€ã§ä¸€æ„ã§ã‚る。" + +#: usr/local/www/load_balancer_virtual_server_edit.php:95 +#, php-format +msgid "%s is not a valid IP address." +msgstr "%sã¯æœ‰åйãªIPアドレスã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_virtual_server_edit.php:102 +#: usr/local/www/load_balancer_virtual_server_edit.php:104 +#: usr/local/www/load_balancer_virtual_server_edit.php:104 +#, php-format +msgid "modified '%s' vs:" +msgstr ": VS修正' %s'" + +#: usr/local/www/load_balancer_virtual_server_edit.php:104 +#: usr/local/www/load_balancer_virtual_server_edit.php:106 +#: usr/local/www/load_balancer_virtual_server_edit.php:106 +#, php-format +msgid "created '%s' vs:" +msgstr "VS作æˆ' %s 〠:" + +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/status_lb_vs.php:56 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/status_lb_vs.php:56 +msgid "Virtual Server" +msgstr "仮想サーãƒ" + +#: usr/local/www/load_balancer_virtual_server_edit.php:180 +#: usr/local/www/load_balancer_virtual_server_edit.php:154 +#: usr/local/www/load_balancer_virtual_server_edit.php:152 +#: usr/local/www/load_balancer_virtual_server_edit.php:152 +msgid "Edit Load Balancer - Virtual Server entry" +msgstr "編集ロードãƒãƒ©ãƒ³ã‚µ - 仮想サーãƒãƒ¼ã®ã‚¨ãƒ³ãƒˆãƒª" + +#: usr/local/www/load_balancer_virtual_server_edit.php:198 +#: usr/local/www/load_balancer_virtual_server_edit.php:172 +#: usr/local/www/load_balancer_virtual_server_edit.php:170 +#: usr/local/www/load_balancer_virtual_server_edit.php:170 +msgid "" +"This is normally the WAN IP address that you would like the server to listen " +"on. All connections to this IP and port will be forwarded to the pool " +"cluster." +msgstr "ã®ã€Œã“れã¯é€šå¸¸ã€ã‚µãƒ¼ãƒãƒ¼ãŒå¾…機ã™ã‚‹ã‚ˆã†ã«ã—ãŸã„WAN IPアドレスã€ã§ã™ã€‚ã“ã®IPã¨ãƒãƒ¼ãƒˆã¸ã®ã™ã¹ã¦ã®æŽ¥ç¶šãƒ—ールã€ã‚¯ãƒ©ã‚¹ã‚¿ã«è»¢é€ã•れã¾ã™ã€‚" + +#: usr/local/www/load_balancer_virtual_server_edit.php:205 +#: usr/local/www/load_balancer_virtual_server_edit.php:186 +#: usr/local/www/load_balancer_virtual_server_edit.php:184 +#: usr/local/www/load_balancer_virtual_server_edit.php:184 +msgid "" +"This is the port that the clients will connect to. All connections to this " +"port will be forwarded to the pool cluster." +msgstr "「ã“れã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæŽ¥ç¶šã™ã‚‹ãƒãƒ¼ãƒˆã§ã™ã€‚ã“ã®ã¸ã®ã™ã¹ã¦ã®æŽ¥ç¶šã€ãƒãƒ¼ãƒˆã¯ã€ãƒ—ールã®ã‚¯ãƒ©ã‚¹ã‚¿ã«è»¢é€ã•れã¾ã™ã€‚" + +#: usr/local/www/load_balancer_virtual_server_edit.php:209 +#: usr/local/www/load_balancer_virtual_server_edit.php:198 +#: usr/local/www/load_balancer_virtual_server_edit.php:196 +#: usr/local/www/load_balancer_virtual_server_edit.php:196 +msgid "Virtual Server Pool" +msgstr "仮想サーãƒãƒ¼Â·ãƒ—ール" + +#: usr/local/www/load_balancer_virtual_server_edit.php:212 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/load_balancer_virtual_server_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:220 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +msgid "Please add a pool on the Pools tab to use this feature." +msgstr "ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹ã«ã¯ã€ãƒ—ール]タブã®[プールを追加ã—ã¦ãã ã•ã„。" + +#: usr/local/www/load_balancer_virtual_server_edit.php:244 +#: usr/local/www/load_balancer_virtual_server_edit.php:233 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +msgid "" +"This is the server that clients will be redirected to if *ALL* servers in " +"the pool are offline." +msgstr "プールオフラインã«ãªã£ã¦ã„ã‚‹"ã“れã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒ*ã§ã®* ALLã®ã‚µãƒ¼ãƒãƒ¼ãŒã‚れã°ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•れã€ã‚µãƒ¼ãƒãƒ¼ã§ã‚る「 。" + +#: usr/local/www/load_balancer_virtual_server_edit.php:279 +#: usr/local/www/status_captiveportal_test.php:92 +#: usr/local/www/load_balancer_virtual_server_edit.php:268 +#: usr/local/www/status_captiveportal_test.php:93 +#: usr/local/www/load_balancer_virtual_server_edit.php:266 +#: usr/local/www/status_captiveportal_expire.php:92 +#: usr/local/www/status_captiveportal_test.php:94 +#: usr/local/www/load_balancer_virtual_server_edit.php:266 +#: usr/local/www/status_captiveportal_expire.php:92 +#: usr/local/www/status_captiveportal_test.php:94 +msgid "Submit" +msgstr "æå‡ºã™ã‚‹" + +#: usr/local/www/load_balancer_virtual_server_edit.php:289 +#: usr/local/www/load_balancer_virtual_server_edit.php:278 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +msgid "" +"Don't forget to add a firewall rule for the virtual server/pool after you're " +"finished setting it up." +msgstr "ãれを設定終ãˆã€Œã‚ãªãŸãŒã—ã¦ã„ã‚‹ã®å¾Œã«ã€ä»®æƒ³ã‚µãƒ¼ãƒãƒ¼/プールã®ãƒ•ァイアウォールルールを追加ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„〠。" + +#: usr/local/www/pkg_mgr.php:70 usr/local/www/pkg_mgr.php:82 +#: usr/local/www/pkg_mgr.php:89 +#, php-format +msgid "Unable to retrieve package info from %s. Cached data will be used." +msgstr "%s.ã‹ã‚‰ãƒ‘ッケージ情報をå–å¾—ã§ãã¾ã›ã‚“キャッシュã•れãŸãƒ‡ãƒ¼ã‚¿ãŒä½¿ç”¨ã•れる。" + +#: usr/local/www/pkg_mgr.php:73 usr/local/www/pkg_mgr.php:85 +#: usr/local/www/pkg_mgr.php:92 +#, php-format +msgid "" +"Unable to communicate with %1$s. Please verify DNS and interface " +"configuration, and that %2$s has functional Internet connectivity." +msgstr "設定ã€ã¯%1$sã¨é€šä¿¡ã§ãã¾ã›ã‚“。 DNSã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースを確èªã—ã¦ãã ã•ã„〠ã€ãŠã‚ˆã³ãã®%2$s ã€æ©Ÿèƒ½ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã‚’æŒã£ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/pkg_mgr.php:122 usr/local/www/pkg_mgr.php:216 +#: usr/local/www/pkg_mgr.php:137 usr/local/www/pkg_mgr.php:243 +#: usr/local/www/pkg_mgr.php:246 usr/local/www/pkg_mgr.php:140 +#: usr/local/www/pkg_mgr.php:249 usr/local/www/pkg_mgr.php:187 +#: usr/local/www/pkg_mgr.php:253 +msgid "There are currently no packages available for installation." +msgstr "インストールã®ãŸã‚ã«åˆ©ç”¨å¯èƒ½ãªãƒ‘ッケージãŒã‚りã¾ã›ã‚“。" + +#: usr/local/www/pkg_mgr.php:192 usr/local/www/pkg_mgr.php:228 +#: usr/local/www/pkg_mgr.php:231 usr/local/www/pkg_mgr.php:235 +msgid "platform" +msgstr "プラットフォーム" + +#: usr/local/www/pkg_mgr.php:210 +msgid "Do you really want to install this package?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ‘ッケージをインストールã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_install.php:55 +#: usr/local/www/pkg_mgr_install.php:55 +msgid "Install Package" +msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" + +#: usr/local/www/pkg_mgr_install.php:72 usr/local/www/pkg_mgr_install.php:70 +#: usr/local/www/pkg_mgr_install.php:70 +msgid "Available packages" +msgstr "利用å¯èƒ½ãªãƒ‘ッケージ" + +#: usr/local/www/pkg_mgr_install.php:75 usr/local/www/pkg_mgr_install.php:73 +#: usr/local/www/pkg_mgr_install.php:73 +msgid "Installed packages" +msgstr "インストールã•れãŸãƒ‘ッケージ" + +#: usr/local/www/pkg_mgr_install.php:76 usr/local/www/pkg_mgr_install.php:74 +#: usr/local/www/pkg_mgr_install.php:74 +msgid "Package Installer" +msgstr "パッケージインストーラ" + +#: usr/local/www/pkg_mgr_install.php:124 usr/local/www/pkg_mgr_install.php:134 +#: usr/local/www/pkg_mgr_install.php:132 usr/local/www/pkg_mgr_install.php:128 +#: usr/local/www/pkg_mgr_install.php:128 +msgid "Creating restore point before package installation." +msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å‰ã«å¾©å…ƒãƒã‚¤ãƒ³ãƒˆã‚’作æˆã™ã‚‹ã€‚" + +#: usr/local/www/pkg_mgr_install.php:132 usr/local/www/pkg_mgr_install.php:133 +#: usr/local/www/pkg_mgr_install.php:141 usr/local/www/pkg_mgr_install.php:142 +#: usr/local/www/pkg_mgr_install.php:139 usr/local/www/pkg_mgr_install.php:140 +#: usr/local/www/pkg_mgr_install.php:135 usr/local/www/pkg_mgr_install.php:136 +#: usr/local/www/pkg_mgr_install.php:135 usr/local/www/pkg_mgr_install.php:136 +msgid "Package deleted." +msgstr "パッケージãŒå‰Šé™¤ã•れãŸã€‚" + +#: usr/local/www/pkg_mgr_install.php:147 usr/local/www/pkg_mgr_install.php:148 +#: usr/local/www/pkg_mgr_install.php:156 usr/local/www/pkg_mgr_install.php:157 +#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155 +#: usr/local/www/pkg_mgr_install.php:150 usr/local/www/pkg_mgr_install.php:151 +#: usr/local/www/pkg_mgr_install.php:150 usr/local/www/pkg_mgr_install.php:151 +msgid "Package reinstallation failed." +msgstr "パッケージã®å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" + +#: usr/local/www/pkg_mgr_install.php:151 usr/local/www/pkg_mgr_install.php:152 +#: usr/local/www/pkg_mgr_install.php:160 usr/local/www/pkg_mgr_install.php:161 +#: usr/local/www/pkg_mgr_install.php:158 usr/local/www/pkg_mgr_install.php:159 +#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155 +#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155 +msgid "Package reinstalled." +msgstr "パッケージã«ã¯ã€å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã—ãŸã€‚" + +#: usr/local/www/pkg_mgr_install.php:163 usr/local/www/pkg_mgr_install.php:172 +#: usr/local/www/pkg_mgr_install.php:170 usr/local/www/pkg_mgr_install.php:166 +#: usr/local/www/pkg_mgr_install.php:166 +msgid "installation completed." +msgstr "インストールãŒå®Œäº†ã—ã¾ã—ãŸã€‚" + +#: usr/local/www/pkg_mgr_install.php:166 usr/local/www/pkg_mgr_install.php:175 +#: usr/local/www/pkg_mgr_install.php:173 usr/local/www/pkg_mgr_install.php:169 +#: usr/local/www/pkg_mgr_install.php:169 +#, php-format +msgid "Could not find %s." +msgstr "%s.ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" + +#: usr/local/www/pkg_mgr_install.php:182 usr/local/www/pkg_mgr_install.php:183 +#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:192 +#: usr/local/www/pkg_mgr_install.php:188 usr/local/www/pkg_mgr_install.php:189 +#: usr/local/www/pkg_mgr_install.php:184 usr/local/www/pkg_mgr_install.php:185 +#: usr/local/www/pkg_mgr_install.php:184 usr/local/www/pkg_mgr_install.php:185 +msgid "All packages reinstalled." +msgstr "ã™ã¹ã¦ã®ãƒ‘ッケージã¯ã€å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã—ãŸã€‚" + +#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:194 +#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:204 +#: usr/local/www/pkg_mgr_install.php:199 usr/local/www/pkg_mgr_install.php:203 +#: usr/local/www/pkg_mgr_install.php:195 usr/local/www/pkg_mgr_install.php:195 +#: usr/local/www/pkg_mgr_install.php:199 +msgid "Installation of" +msgstr "ã®è¨­ç½®" + +#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:200 +#: usr/local/www/pkg_mgr_install.php:199 usr/local/www/pkg_mgr_install.php:195 +#: usr/local/www/pkg_mgr_install.php:195 +msgid "FAILED!" +msgstr "FAILED ï¼" + +#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:201 +#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:196 +#: usr/local/www/pkg_mgr_install.php:196 +msgid "Installation halted." +msgstr "インストールãŒåœæ­¢ã—ãŸã€‚" + +#: usr/local/www/pkg_mgr_install.php:194 usr/local/www/pkg_mgr_install.php:204 +#: usr/local/www/pkg_mgr_install.php:203 usr/local/www/pkg_mgr_install.php:199 +#: usr/local/www/pkg_mgr_install.php:199 +msgid "completed." +msgstr "完了ã—ã¾ã—ãŸã€‚" + +#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208 +#: usr/local/www/pkg_mgr_install.php:207 usr/local/www/pkg_mgr_install.php:203 +#: usr/local/www/pkg_mgr_install.php:203 +msgid "Installation completed." +msgstr "インストールãŒå®Œäº†ã—ã¾ã—ãŸã€‚" + +#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208 +#: usr/local/www/pkg_mgr_install.php:207 usr/local/www/pkg_mgr_install.php:203 +#: usr/local/www/pkg_mgr_install.php:203 +msgid "setup instructions" +msgstr "セットアップ手順" + +#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:210 +#: usr/local/www/pkg_mgr_install.php:209 usr/local/www/pkg_mgr_install.php:205 +#: usr/local/www/pkg_mgr_install.php:205 +msgid "" +"Installation completed. Please check to make sure that the package is " +"configured from the respective menu then start the package." +msgstr "ãれãžã‚Œã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰æ§‹æˆã•れãŸã€Œã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å®Œäº†ã—ã¾ã—ãŸã€‚パッケージãŒã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„〠ã€ãƒ‘ッケージを起動ã—ã¾ã™ã€‚" + +#: usr/local/www/preload.php:6 +msgid "You are not allowed to access this page." +msgstr "ã‚ãªãŸã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/progress.php:25 usr/local/www/progress.php:22 +msgid "Invalid Meter ID" +msgstr "無効ãªãƒ¡ãƒ¼ã‚¿ãƒ¼ç•ªå·" + +#: usr/local/www/progress.php:46 usr/local/www/progress.php:43 +msgid "UPLOAD completed" +msgstr "アップロード完了" + +#: usr/local/www/progress.php:58 usr/local/www/progress.php:55 +msgid "Uploading Files... Please wait..." +msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロード...ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." + +#: usr/local/www/progress.php:68 usr/local/www/progress.php:65 +msgid "Uploading files..." +msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロード..." + +#: usr/local/www/progress.php:87 usr/local/www/progress.php:84 +msgid "Time Remaining:" +msgstr "残り時間:" + +#: usr/local/www/progress.php:88 usr/local/www/progress.php:85 +msgid "Speed:" +msgstr "スピード:" + +#: usr/local/www/progress.php:88 usr/local/www/progress.php:85 +msgid "KB/sec" +msgstr "KB /ç§’" + +#: usr/local/www/progress.php:92 usr/local/www/progress.php:89 +msgid "Uploaded:" +msgstr "アップã—ãŸäººï¼š" + +#: usr/local/www/progress.php:93 usr/local/www/progress.php:90 +msgid "File Size:" +msgstr "ファイルサイズ:" + +#: usr/local/www/progress.php:97 usr/local/www/progress.php:94 +msgid "Completed:" +msgstr "完æˆï¼š" + +#: usr/local/www/diag_dns.php:34 usr/local/www/diag_dns.php:250 +#: usr/local/www/fbegin.inc:192 usr/local/www/fbegin.inc:210 +#: usr/local/www/diag_dns.php:249 usr/local/www/fbegin.inc:218 +#: usr/local/www/fbegin.inc:209 usr/local/www/diag_dns.php:266 +#: usr/local/www/diag_dns.php:34 usr/local/www/diag_dns.php:266 +#: usr/local/www/fbegin.inc:209 +msgid "DNS Lookup" +msgstr "DNSルックアップ" + +#: usr/local/www/diag_dns.php:100 usr/local/www/diag_dns.php:100 +msgid "Host must be a valid hostname or IP address." +msgstr "ホストã¯ã€æœ‰åйãªãƒ›ã‚¹ãƒˆåã¾ãŸã¯IPアドレスã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/diag_dns.php:110 usr/local/www/diag_dns.php:109 +#: usr/local/www/diag_dns.php:109 +msgid "No response" +msgstr "応答ãªã—" + +#: usr/local/www/diag_dns.php:143 usr/local/www/diag_dns.php:142 +#: usr/local/www/diag_dns.php:142 +msgid "No record found" +msgstr "見ã¤ã‹ã‚‰ãƒ¬ã‚³ãƒ¼ãƒ‰ã¾ã›ã‚“" + +#: usr/local/www/diag_dns.php:158 usr/local/www/diag_dns.php:157 +#: usr/local/www/diag_dns.php:174 usr/local/www/diag_dns.php:174 +msgid "Resolve DNS hostname or IP" +msgstr "DNSホストåã¾ãŸã¯IPアドレスを解決ã™ã‚‹" + +#: usr/local/www/diag_dns.php:161 usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 usr/local/www/diag_dns.php:160 +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:187 usr/local/www/diag_dns.php:177 +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:187 usr/local/www/diag_dns.php:177 +msgid "Hostname or IP" +msgstr "ホストåã¾ãŸã¯IP" + +#: usr/local/www/diag_dns.php:203 usr/local/www/diag_dns.php:202 +#: usr/local/www/diag_dns.php:219 usr/local/www/diag_dns.php:219 +msgid "Resolution time per server" +msgstr "サーãƒã‚ãŸã‚Šã®è§£æ±ºæ™‚é–“" + +#: usr/local/www/diag_dns.php:211 usr/local/www/diag_dns.php:210 +#: usr/local/www/diag_dns.php:227 usr/local/www/diag_dns.php:227 +msgid "Query time" +msgstr "クエリ時間" + +#: usr/local/www/diag_dns.php:235 usr/local/www/diag_dns.php:234 +#: usr/local/www/diag_dns.php:251 usr/local/www/diag_dns.php:251 +msgid "More Information:" +msgstr "ãã®ä»–ã®æƒ…報:" + +#: usr/local/www/diag_dns.php:237 usr/local/www/diag_ping.php:43 +#: usr/local/www/diag_ping.php:87 usr/local/www/diag_ping.php:119 +#: usr/local/www/fbegin.inc:200 usr/local/www/fbegin.inc:218 +#: usr/local/www/diag_dns.php:236 usr/local/www/fbegin.inc:226 +#: usr/local/www/fbegin.inc:217 usr/local/www/diag_ping.php:44 +#: usr/local/www/diag_ping.php:94 usr/local/www/diag_ping.php:141 +#: usr/local/www/diag_dns.php:253 usr/local/www/diag_ping.php:44 +#: usr/local/www/diag_ping.php:94 usr/local/www/diag_ping.php:141 +#: usr/local/www/diag_dns.php:253 usr/local/www/fbegin.inc:217 +msgid "Ping" +msgstr "ピン" + +#: usr/local/www/diag_dns.php:238 usr/local/www/diag_traceroute.php:45 +#: usr/local/www/diag_traceroute.php:86 usr/local/www/diag_traceroute.php:112 +#: usr/local/www/fbegin.inc:209 usr/local/www/fbegin.inc:227 +#: usr/local/www/diag_dns.php:237 usr/local/www/fbegin.inc:236 +#: usr/local/www/diag_traceroute.php:90 usr/local/www/diag_traceroute.php:136 +#: usr/local/www/fbegin.inc:228 usr/local/www/diag_traceroute.php:46 +#: usr/local/www/diag_traceroute.php:96 usr/local/www/diag_traceroute.php:155 +#: usr/local/www/diag_dns.php:254 usr/local/www/diag_traceroute.php:46 +#: usr/local/www/diag_traceroute.php:96 usr/local/www/diag_traceroute.php:155 +#: usr/local/www/diag_dns.php:254 usr/local/www/fbegin.inc:228 +msgid "Traceroute" +msgstr "トレースルート" + +#: usr/local/www/diag_dns.php:240 usr/local/www/diag_dns.php:239 +#: usr/local/www/diag_dns.php:256 usr/local/www/diag_dns.php:256 +msgid "" +"NOTE: The following links are to external services, so their reliability " +"cannot be guaranteed." +msgstr ""注:以下ã®ãƒªãƒ³ã‚¯ã¯å¤–部ã®ã‚µãƒ¼ãƒ“スã«ã‚ã‚‹ãŸã‚ã€ãã®ä¿¡é ¼æ€§ã€ã¯ä¿è¨¼ã§ãã¾ã›ã‚“。" + +#: usr/local/www/diag_dns.php:241 usr/local/www/diag_dns.php:240 +#: usr/local/www/diag_dns.php:257 usr/local/www/diag_dns.php:257 +msgid "IP WHOIS @ DNS Stuff" +msgstr "DNSã®ã‚¹ã‚¿ãƒƒãƒ•@ã®IP WHOIS" + +#: usr/local/www/diag_dns.php:242 usr/local/www/diag_dns.php:241 +#: usr/local/www/diag_dns.php:258 usr/local/www/diag_dns.php:258 +msgid "IP Info @ DNS Stuff" +msgstr "IP情報@ DNSã®ã‚¹ã‚¿ãƒƒãƒ•" + +#: usr/local/www/reboot.php:44 +msgid " Yes " +msgstr "ã¯ã„" + +#: usr/local/www/reboot.php:45 usr/local/www/reboot.php:76 +#: usr/local/www/reboot.php:56 usr/local/www/reboot.php:56 +msgid "The system is rebooting now. This may take one minute." +msgstr "システムãŒãƒªãƒ–ートã•れã¾ã™ã€‚ã“れã¯1分ã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/reboot.php:51 usr/local/www/reboot.php:48 +#: usr/local/www/reboot.php:48 +msgid "Reboot System" +msgstr "システムをå†èµ·å‹•" + +#: usr/local/www/reboot.php:59 usr/local/www/reboot.php:62 +#: usr/local/www/reboot.php:62 +msgid "Are you sure you want to reboot the system?" +msgstr "ã‚ãªãŸã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã‚’å†èµ·å‹•ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ" + +#: usr/local/www/restart_httpd.php:42 usr/local/www/restart_httpd.php:42 +msgid "Restarting httpd" +msgstr "httpdã®ã‚’å†èµ·å‹•ã™ã‚‹" + +#: usr/local/www/restart_httpd.php:50 usr/local/www/restart_httpd.php:50 +msgid "Mounting file systems read/write" +msgstr "ファイルシステムã®ãƒžã‚¦ãƒ³ãƒˆã¯èª­ã¿å–り/書ãè¾¼ã¿" + +#: usr/local/www/restart_httpd.php:53 usr/local/www/restart_httpd.php:53 +msgid "Forcing all PHP file permissions to 0755" +msgstr "0755ã¸ã®ã™ã¹ã¦ã®PHPファイルã®ãƒ‘ーミッションを強制的ã«" + +#: usr/local/www/restart_httpd.php:56 usr/local/www/restart_httpd.php:56 +msgid "Mounting file systems read only" +msgstr "ファイルシステムã®ãƒžã‚¦ãƒ³ãƒˆã¯èª­ã¿å–り専用" + +#: usr/local/www/restart_httpd.php:59 usr/local/www/restart_httpd.php:59 +msgid "Restarting mini_httpd" +msgstr "mini_httpdã‚’å†èµ·å‹•ã™ã‚‹" + +#: usr/local/www/edit.php:39 usr/local/www/edit.php:42 +#: usr/local/www/edit.php:41 usr/local/www/edit.php:41 +msgid "Edit file" +msgstr "編集ファイル" + +#: usr/local/www/edit.php:46 usr/local/www/edit.php:62 +#: usr/local/www/edit.php:49 usr/local/www/edit.php:65 +#: usr/local/www/edit.php:48 usr/local/www/edit.php:48 +#: usr/local/www/edit.php:65 +msgid "No file name specified" +msgstr "指定ã—ãŸãƒ•ァイルåãªã„" + +#: usr/local/www/edit.php:48 usr/local/www/edit.php:51 +#: usr/local/www/edit.php:50 usr/local/www/edit.php:50 +msgid "Loading a directory is not supported" +msgstr "ディレクトリã®èª­ã¿è¾¼ã¿ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" + +#: usr/local/www/edit.php:50 usr/local/www/edit.php:53 +#: usr/local/www/edit.php:52 usr/local/www/edit.php:52 +msgid "File does not exist or is not a regular file" +msgstr "ファイルãŒå­˜åœ¨ã—ãªã„ã‹ã€å®šæœŸçš„ãªãƒ•ァイルã§ã¯ãªã„。" + +#: usr/local/www/edit.php:54 usr/local/www/edit.php:57 +#: usr/local/www/edit.php:56 usr/local/www/edit.php:56 +msgid "Failed to read file" +msgstr "ファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ" + +#: usr/local/www/edit.php:74 usr/local/www/edit.php:77 +#: usr/local/www/edit.php:77 +msgid "Failed to write file" +msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ" + +#: usr/local/www/edit.php:76 usr/local/www/edit.php:79 +#: usr/local/www/edit.php:79 +msgid "Error while writing file" +msgstr "ã‚¨ãƒ©ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ä¸­ã«" + +#: usr/local/www/edit.php:78 usr/local/www/edit.php:81 +#: usr/local/www/edit.php:81 +msgid "File successfully saved" +msgstr "ä¿å­˜ã•れãŸãƒ•ァイルを正常" + +#: usr/local/www/edit.php:98 usr/local/www/edit.php:101 +#: usr/local/www/edit.php:101 +msgid "Loading file" +msgstr "ロードファイル" + +#: usr/local/www/edit.php:117 usr/local/www/edit.php:120 +#: usr/local/www/edit.php:121 usr/local/www/edit.php:121 +msgid "File successfully loaded" +msgstr "ロードファイルを正常" + +#: usr/local/www/edit.php:140 usr/local/www/edit.php:143 +#: usr/local/www/edit.php:144 usr/local/www/edit.php:144 +msgid "Saving file" +msgstr "ファイルã®ä¿å­˜" + +#: usr/local/www/edit.php:177 usr/local/www/edit.php:180 +#: usr/local/www/edit.php:181 usr/local/www/edit.php:181 +msgid "Save / Load from path" +msgstr "パスã‹ã‚‰ã‚»ãƒ¼ãƒ–/ロード" + +#: usr/local/www/edit.php:179 usr/local/www/edit.php:182 +#: usr/local/www/edit.php:183 usr/local/www/edit.php:183 +msgid "Load" +msgstr "ロード" + +#: usr/local/www/edit.php:180 usr/local/www/edit.php:183 +#: usr/local/www/edit.php:184 usr/local/www/edit.php:184 +msgid "Browse" +msgstr "ブラウズ" + +#: usr/local/www/services_captiveportal.php:63 +#: usr/local/www/services_captiveportal_filemanager.php:75 +#: usr/local/www/services_captiveportal_filemanager.php:150 +#: usr/local/www/services_captiveportal_ip.php:64 +#: usr/local/www/services_captiveportal_ip.php:104 +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_mac.php:63 +#: usr/local/www/services_captiveportal_mac.php:154 +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_captiveportal_hostname.php:66 +#: usr/local/www/services_captiveportal_hostname.php:109 +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers.php:403 +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_captiveportal_vouchers.php:410 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/services_captiveportal_vouchers.php:423 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_ip.php:102 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/services_captiveportal_mac.php:152 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/services_captiveportal_hostname.php:107 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/services_captiveportal_filemanager.php:147 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:432 +#: usr/local/www/services_captiveportal_mac.php:162 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_ip.php:102 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:437 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/services_captiveportal_hostname.php:107 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/services_captiveportal_filemanager.php:147 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/services_captiveportal_mac.php:162 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +msgid "Captive portal" +msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«" + +#: usr/local/www/services_captiveportal.php:146 +#: usr/local/www/services_captiveportal_zones_edit.php:61 +#: usr/local/www/services_captiveportal_zones_edit.php:99 +#: usr/local/www/services_captiveportal.php:147 +#: usr/local/www/services_captiveportal.php:153 +#: usr/local/www/services_captiveportal_zones_edit.php:59 +#: usr/local/www/services_captiveportal_zones_edit.php:101 +#: usr/local/www/services_captiveportal_zones_edit.php:97 +#: usr/local/www/services_captiveportal.php:155 +#: usr/local/www/services_captiveportal_zones_edit.php:59 +#: usr/local/www/services_captiveportal_zones_edit.php:97 +#: usr/local/www/services_captiveportal.php:155 +msgid "Zone name" +msgstr "ゾーンå" + +#: usr/local/www/services_captiveportal.php:154 +#: usr/local/www/services_captiveportal.php:155 +#: usr/local/www/services_captiveportal.php:161 +#: usr/local/www/services_captiveportal.php:163 +#: usr/local/www/services_captiveportal.php:163 +#, php-format +msgid "" +"The captive portal cannot be used on interface %s since it is part of a " +"bridge." +msgstr "æ©‹"ãれã¯ã®ä¸€éƒ¨ã§ã‚ã‚‹ãŸã‚キャプティブãƒãƒ¼ã‚¿ãƒ«ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ•ェース%sã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/services_captiveportal.php:158 +#: usr/local/www/services_captiveportal.php:159 +#: usr/local/www/services_captiveportal.php:165 +#: usr/local/www/services_captiveportal.php:167 +#: usr/local/www/services_captiveportal.php:167 +#, php-format +msgid "" +"The captive portal cannot be used on interface %s since it is used already " +"on %s instance." +msgstr "%sインスタンス上ã§ã€Œãã‚ŒãŒæ—¢ã«ä½¿ç”¨ã•れã¦ã„ã‚‹ã®ã§ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス%sã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/services_captiveportal.php:166 +#: usr/local/www/services_captiveportal.php:167 +msgid "Certificate and key must be specified for HTTPS login." +msgstr "証明書ã¨ã‚­ãƒ¼ã¯ã€HTTPSã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:169 +#: usr/local/www/system_camanager.php:168 +#: usr/local/www/system_certmanager.php:168 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/services_captiveportal.php:170 +#: usr/local/www/system_camanager.php:170 +#: usr/local/www/system_certmanager.php:199 +#: usr/local/www/system_camanager.php:170 +#: usr/local/www/system_certmanager.php:199 +msgid "This certificate does not appear to be valid." +msgstr "ã“ã®è¨¼æ˜Žæ›¸ã¯æœ‰åйã§ã‚ã‚‹ã¨è¡¨ç¤ºã•れã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal.php:171 +#: usr/local/www/services_captiveportal.php:172 +msgid "This intermmediate certificate does not appear to be valid." +msgstr "ã“ã®intermmediateè¨¼æ˜Žæ›¸ãŒæœ‰åйã§ã‚ã‚‹ã¨è¡¨ç¤ºã•れã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal.php:173 +#: usr/local/www/services_captiveportal.php:174 +msgid "This key does not appear to be valid." +msgstr "ã“ã®ã‚­ãƒ¼ã¯æœ‰åйã§ã‚ã‚‹ã¨è¡¨ç¤ºã•れã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal.php:177 +#: usr/local/www/services_captiveportal.php:178 +#: usr/local/www/services_captiveportal.php:176 +#: usr/local/www/services_captiveportal.php:178 +msgid "The HTTPS server name must be specified for HTTPS login." +msgstr "HTTPSサーãƒåã¯ã€HTTPSã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:183 +#: usr/local/www/services_captiveportal.php:184 +#: usr/local/www/services_captiveportal.php:182 +#: usr/local/www/services_captiveportal.php:185 +#: usr/local/www/services_captiveportal.php:185 +msgid "The timeout must be at least 1 minute." +msgstr "タイムアウトã¯1分以上ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:186 +#: usr/local/www/services_captiveportal.php:187 +#: usr/local/www/services_captiveportal.php:185 +#: usr/local/www/services_captiveportal.php:203 +#: usr/local/www/services_captiveportal.php:203 +msgid "The idle timeout must be at least 1 minute." +msgstr "アイドルタイムアウトã¯1分以上ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:189 +#: usr/local/www/services_captiveportal.php:190 +#: usr/local/www/services_captiveportal.php:188 +#: usr/local/www/services_captiveportal.php:206 +#: usr/local/www/services_captiveportal.php:206 +msgid "The pass-through credit count must be a number or left blank." +msgstr "パススルークレジット数ã¯ã€ç•ªå·ã¾ãŸã¯å·¦ç©ºç™½ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:192 +#: usr/local/www/services_captiveportal.php:193 +#: usr/local/www/services_captiveportal.php:191 +#: usr/local/www/services_captiveportal.php:209 +#: usr/local/www/services_captiveportal.php:209 +msgid "" +"The waiting period to restore pass-through credits must be above 0 hours." +msgstr "「パススルークレジットを復元ã™ã‚‹ãŸã‚ã«å¾…機期間ãŒ0時間以上ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal.php:196 +#: usr/local/www/services_captiveportal.php:199 +#: usr/local/www/services_captiveportal.php:202 +#: usr/local/www/services_captiveportal.php:205 +#: usr/local/www/services_captiveportal_ip_edit.php:107 +#: usr/local/www/services_captiveportal.php:197 +#: usr/local/www/services_captiveportal.php:200 +#: usr/local/www/services_captiveportal.php:203 +#: usr/local/www/services_captiveportal.php:206 +#: usr/local/www/services_captiveportal.php:195 +#: usr/local/www/services_captiveportal.php:198 +#: usr/local/www/services_captiveportal.php:201 +#: usr/local/www/services_captiveportal.php:204 +#: usr/local/www/services_captiveportal_ip_edit.php:105 +#: usr/local/www/services_captiveportal_ip_edit.php:104 +#: usr/local/www/services_captiveportal.php:213 +#: usr/local/www/services_captiveportal.php:216 +#: usr/local/www/services_captiveportal.php:219 +#: usr/local/www/services_captiveportal.php:222 +#: usr/local/www/services_captiveportal_ip_edit.php:104 +#: usr/local/www/services_captiveportal.php:213 +#: usr/local/www/services_captiveportal.php:216 +#: usr/local/www/services_captiveportal.php:219 +#: usr/local/www/services_captiveportal.php:222 +#, php-format +msgid "A valid IP address must be specified. [%s]" +msgstr "有効ãªIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ( ( %s ) )" + +#: usr/local/www/services_captiveportal.php:208 +#: usr/local/www/services_captiveportal.php:211 +#: usr/local/www/services_captiveportal.php:214 +#: usr/local/www/services_captiveportal.php:217 +#: usr/local/www/services_captiveportal.php:220 +#: usr/local/www/services_captiveportal.php:209 +#: usr/local/www/services_captiveportal.php:212 +#: usr/local/www/services_captiveportal.php:215 +#: usr/local/www/services_captiveportal.php:218 +#: usr/local/www/services_captiveportal.php:221 +#: usr/local/www/services_captiveportal.php:207 +#: usr/local/www/services_captiveportal.php:210 +#: usr/local/www/services_captiveportal.php:213 +#: usr/local/www/services_captiveportal.php:216 +#: usr/local/www/services_captiveportal.php:219 +#: usr/local/www/services_captiveportal.php:225 +#: usr/local/www/services_captiveportal.php:228 +#: usr/local/www/services_captiveportal.php:231 +#: usr/local/www/services_captiveportal.php:234 +#: usr/local/www/services_captiveportal.php:237 +#: usr/local/www/services_captiveportal.php:225 +#: usr/local/www/services_captiveportal.php:228 +#: usr/local/www/services_captiveportal.php:231 +#: usr/local/www/services_captiveportal.php:234 +#: usr/local/www/services_captiveportal.php:237 +#, php-format +msgid "A valid port number must be specified. [%s]" +msgstr "有効ãªãƒãƒ¼ãƒˆç•ªå·ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ( ( %s ) )" + +#: usr/local/www/services_captiveportal.php:223 +#: usr/local/www/services_captiveportal.php:224 +#: usr/local/www/services_captiveportal.php:222 +#: usr/local/www/services_captiveportal.php:240 +#: usr/local/www/services_captiveportal.php:240 +msgid "" +"The maximum number of concurrent connections per client IP address may not " +"be larger than the global maximum." +msgstr "「クライアントIPアドレスã”ã¨ã®åŒæ™‚æŽ¥ç¶šã®æœ€å¤§æ•°ãŒãªã„ã“ã¨ãŒã€ã€Œä¸–ç•Œçš„ãªæœ€å¤§å€¤ã‚ˆã‚Šã‚‚大ãããªã‚‹ã€‚" + +#: usr/local/www/services_captiveportal.php:421 +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal.php:423 +#: usr/local/www/services_captiveportal.php:441 +#: usr/local/www/services_captiveportal.php:441 +msgid "Captive portal(s)" +msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼ˆ S )" + +#: usr/local/www/services_captiveportal.php:422 +#: usr/local/www/services_captiveportal_filemanager.php:151 +#: usr/local/www/services_captiveportal_ip.php:105 +#: usr/local/www/services_captiveportal_mac.php:155 +#: usr/local/www/services_captiveportal_hostname.php:110 +#: usr/local/www/services_captiveportal_vouchers.php:404 +#: usr/local/www/services_captiveportal_vouchers.php:411 +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_vouchers.php:424 +#: usr/local/www/services_captiveportal_ip.php:103 +#: usr/local/www/services_captiveportal_mac.php:153 +#: usr/local/www/services_captiveportal_hostname.php:108 +#: usr/local/www/services_captiveportal.php:424 +#: usr/local/www/services_captiveportal_filemanager.php:148 +#: usr/local/www/services_captiveportal_vouchers.php:433 +#: usr/local/www/services_captiveportal_mac.php:163 +#: usr/local/www/services_captiveportal.php:442 +#: usr/local/www/services_captiveportal_ip.php:103 +#: usr/local/www/services_captiveportal_vouchers.php:438 +#: usr/local/www/services_captiveportal_hostname.php:108 +#: usr/local/www/services_captiveportal_filemanager.php:148 +#: usr/local/www/services_captiveportal.php:442 +#: usr/local/www/services_captiveportal_mac.php:163 +msgid "Pass-through MAC" +msgstr "パススルーMAC" + +#: usr/local/www/services_captiveportal.php:423 +#: usr/local/www/services_captiveportal_filemanager.php:152 +#: usr/local/www/services_captiveportal_ip.php:106 +#: usr/local/www/services_captiveportal_mac.php:156 +#: usr/local/www/services_captiveportal_vouchers.php:405 +#: usr/local/www/services_captiveportal_vouchers.php:412 +#: usr/local/www/services_captiveportal.php:427 +#: usr/local/www/services_captiveportal_vouchers.php:425 +#: usr/local/www/services_captiveportal_ip.php:104 +#: usr/local/www/services_captiveportal_mac.php:154 +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal_filemanager.php:149 +#: usr/local/www/services_captiveportal_vouchers.php:434 +#: usr/local/www/services_captiveportal_mac.php:164 +#: usr/local/www/services_captiveportal.php:443 +#: usr/local/www/services_captiveportal_ip.php:104 +#: usr/local/www/services_captiveportal_vouchers.php:439 +#: usr/local/www/services_captiveportal_filemanager.php:149 +#: usr/local/www/services_captiveportal.php:443 +#: usr/local/www/services_captiveportal_mac.php:164 +msgid "Allowed IP addresses" +msgstr "許å¯ã™ã‚‹IPアドレス" + +#: usr/local/www/services_captiveportal.php:424 +#: usr/local/www/services_captiveportal_filemanager.php:153 +#: usr/local/www/services_captiveportal_ip.php:107 +#: usr/local/www/services_captiveportal_mac.php:157 +#: usr/local/www/services_captiveportal_hostname.php:112 +#: usr/local/www/services_captiveportal_vouchers.php:406 +#: usr/local/www/services_captiveportal_vouchers.php:413 +#: usr/local/www/services_captiveportal.php:428 +#: usr/local/www/services_captiveportal_vouchers.php:426 +#: usr/local/www/services_captiveportal_ip.php:105 +#: usr/local/www/services_captiveportal_mac.php:155 +#: usr/local/www/services_captiveportal_hostname.php:110 +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_filemanager.php:150 +#: usr/local/www/services_captiveportal_vouchers.php:435 +#: usr/local/www/services_captiveportal_mac.php:165 +#: usr/local/www/services_captiveportal.php:444 +#: usr/local/www/services_captiveportal_ip.php:105 +#: usr/local/www/services_captiveportal_vouchers.php:440 +#: usr/local/www/services_captiveportal_hostname.php:110 +#: usr/local/www/services_captiveportal_filemanager.php:150 +#: usr/local/www/services_captiveportal.php:444 +#: usr/local/www/services_captiveportal_mac.php:165 +msgid "Allowed Hostnames" +msgstr "許å¯ã•れãŸãƒ›ã‚¹ãƒˆå" + +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal.php:587 +#: usr/local/www/services_captiveportal_filemanager.php:154 +#: usr/local/www/services_captiveportal_ip.php:108 +#: usr/local/www/services_captiveportal_mac.php:158 +#: usr/local/www/services_captiveportal_hostname.php:113 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers.php:407 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_vouchers.php:414 +#: usr/local/www/services_captiveportal.php:429 +#: usr/local/www/services_captiveportal.php:592 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/services_captiveportal_vouchers.php:427 +#: usr/local/www/services_captiveportal_ip.php:106 +#: usr/local/www/services_captiveportal_mac.php:156 +#: usr/local/www/services_captiveportal_hostname.php:111 +#: usr/local/www/services_captiveportal.php:427 +#: usr/local/www/services_captiveportal.php:590 +#: usr/local/www/services_captiveportal_filemanager.php:151 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:436 +#: usr/local/www/services_captiveportal.php:584 +#: usr/local/www/services_captiveportal_mac.php:166 +#: usr/local/www/services_captiveportal.php:445 +#: usr/local/www/services_captiveportal.php:600 +#: usr/local/www/services_captiveportal_ip.php:106 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:441 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_hostname.php:111 +#: usr/local/www/services_captiveportal_filemanager.php:151 +#: usr/local/www/services_captiveportal.php:445 +#: usr/local/www/services_captiveportal.php:600 +#: usr/local/www/services_captiveportal_mac.php:166 +msgid "Vouchers" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼" + +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_filemanager.php:155 +#: usr/local/www/services_captiveportal_ip.php:109 +#: usr/local/www/services_captiveportal_mac.php:159 +#: usr/local/www/services_captiveportal_hostname.php:114 +#: usr/local/www/services_captiveportal_vouchers.php:408 +#: usr/local/www/services_captiveportal_vouchers.php:415 +#: usr/local/www/services_captiveportal.php:430 +#: usr/local/www/services_captiveportal_vouchers.php:428 +#: usr/local/www/services_captiveportal_ip.php:107 +#: usr/local/www/services_captiveportal_mac.php:157 +#: usr/local/www/services_captiveportal_hostname.php:112 +#: usr/local/www/services_captiveportal.php:428 +#: usr/local/www/services_captiveportal_filemanager.php:152 +#: usr/local/www/services_captiveportal_vouchers.php:437 +#: usr/local/www/services_captiveportal_mac.php:167 +#: usr/local/www/services_captiveportal.php:446 +#: usr/local/www/services_captiveportal_ip.php:107 +#: usr/local/www/services_captiveportal_vouchers.php:442 +#: usr/local/www/services_captiveportal_hostname.php:112 +#: usr/local/www/services_captiveportal_filemanager.php:152 +#: usr/local/www/services_captiveportal.php:446 +#: usr/local/www/services_captiveportal_mac.php:167 +msgid "File Manager" +msgstr "ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼" + +#: usr/local/www/services_captiveportal.php:436 +#: usr/local/www/services_captiveportal.php:440 +#: usr/local/www/services_captiveportal.php:438 +#: usr/local/www/services_captiveportal.php:456 +#: usr/local/www/services_captiveportal.php:456 +msgid "Enable captive portal" +msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/services_captiveportal.php:450 +#: usr/local/www/services_captiveportal.php:455 +#: usr/local/www/services_captiveportal.php:453 +#: usr/local/www/services_captiveportal.php:471 +#: usr/local/www/services_captiveportal.php:471 +msgid "Select the interface(s) to enable for captive portal." +msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã®ãŸã‚ã«æœ‰åйã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:453 +#: usr/local/www/services_captiveportal.php:458 +#: usr/local/www/services_captiveportal.php:456 +#: usr/local/www/services_captiveportal.php:474 +#: usr/local/www/services_captiveportal.php:474 +msgid "Maximum concurrent connections" +msgstr "æœ€å¤§åŒæ™‚接続" + +#: usr/local/www/services_captiveportal.php:457 +#: usr/local/www/services_captiveportal.php:462 +#: usr/local/www/services_captiveportal.php:460 +#: usr/local/www/services_captiveportal.php:478 +#: usr/local/www/services_captiveportal.php:478 +msgid "per client IP address (0 = no limit)" +msgstr "クライアントã®IPアドレスã”ã¨ã«ï¼ˆ 0 =制é™ãªã—)" + +#: usr/local/www/services_captiveportal.php:460 +msgid "" +"This setting limits the number of concurrent connections to the captive " +"portal HTTP(S) server. This does not set how many users can be logged in to " +"the captive portal, but rather how many users can load the portal page or " +"authenticate at the same time! Default is 4 connections per client IP " +"address, with a total maximum of 16 connections." +msgstr "ãƒãƒ¼ã‚¿ãƒ«HTTP(S )サーãƒã€Œã“ã®è¨­å®šã§ã¯ã€ã‚­ãƒ£ãƒ—ティブã¸ã®åŒæ™‚接続数を制é™ã—ã¾ã™ã€ 。ã“れã¯ã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãるユーザー数ã¯è¨­å®šã—ã¾ã›ã‚“ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã®ã§ã¯ãªãã€ã©ã®ã‚ˆã†ã«å¤šãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒãƒ¼ã‚¿ãƒ«Â·ãƒšãƒ¼ã‚¸ã‚’ロードã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã€ã€ŒåŒã˜æ™‚é–“ã« ã§èªè¨¼ï¼ãƒ‡ãƒ•ォルトã¯16接続ã®åˆè¨ˆã€æœ€å¤§ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®IP "アドレスã‚ãŸã‚Š4接続ã§ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:468 +#: usr/local/www/services_captiveportal.php:475 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/system_advanced_misc.php:426 +#: usr/local/www/system_advanced_misc.php:469 +#: usr/local/www/services_captiveportal.php:473 +#: usr/local/www/services_captiveportal.php:480 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/system_advanced_misc.php:518 +#: usr/local/www/services_captiveportal.php:471 +#: usr/local/www/services_captiveportal.php:478 +#: usr/local/www/system_advanced_misc.php:530 +#: usr/local/www/system_advanced_misc.php:651 +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:496 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/system_advanced_misc.php:651 +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:496 +msgid "minutes" +msgstr "分" + +#: usr/local/www/services_captiveportal.php:469 +#: usr/local/www/services_captiveportal.php:474 +#: usr/local/www/services_captiveportal.php:472 +#: usr/local/www/services_captiveportal.php:490 +#: usr/local/www/services_captiveportal.php:490 +msgid "" +"Clients will be disconnected after this amount of inactivity. They may log " +"in again immediately, though. Leave this field blank for no idle timeout." +msgstr "「クライアントãŒéžã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªçŠ¶æ…‹ãŒã“ã®é‡ã®å¾Œã«åˆ‡æ–­ã•れã¾ã™ã€‚彼らãŒè¨˜éŒ²ã•れるã“ã¨ãŒã‚りã€ã€Œã—ã‹ã—ã€ã™ãã«å†åº¦ã€‚ãªã—アイドルタイムアウトã®ãŸã‚ã«ã€ã“ã®ãƒ•ィールドã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:472 +#: usr/local/www/services_captiveportal.php:477 +#: usr/local/www/services_captiveportal.php:475 +#: usr/local/www/services_captiveportal.php:493 +#: usr/local/www/services_captiveportal.php:493 +msgid "Hard timeout" +msgstr "ãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ" + +#: usr/local/www/services_captiveportal.php:476 +#: usr/local/www/services_captiveportal.php:481 +#: usr/local/www/services_captiveportal.php:479 +#: usr/local/www/services_captiveportal.php:497 +#: usr/local/www/services_captiveportal.php:497 +msgid "" +"Clients will be disconnected after this amount of time, regardless of " +"activity. They may log in again immediately, though. Leave this field blank " +"for no hard timeout (not recommended unless an idle timeout is set)." +msgstr "活性ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯é–¢ä¿‚ãªãã€ã“ã®æ™‚間後ã«åˆ‡æ–­ã•れã¾ã™ã€ 。彼らã¯ã€ã—ã‹ã—ã€ã™ãã«å†åº¦ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ãŒã§ãる。ãªã—ãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®ãŸã‚ã€ã“ã®ãƒ•ィールドを空白ã«ã—ã¦ã€ã®ã¾ã¾ã«ï¼ˆã‚¢ã‚¤ãƒ‰ãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒè¨­å®šã•れã¦ã„ãªã„é™ã‚ŠãŠå‹§ã‚ã—ã¾ã›ã‚“) 。" + +#: usr/local/www/services_captiveportal.php:479 +#: usr/local/www/services_captiveportal.php:484 +#: usr/local/www/services_captiveportal.php:482 +#: usr/local/www/services_captiveportal.php:500 +#: usr/local/www/services_captiveportal.php:500 +msgid "Pass-through credits allowed per MAC address" +msgstr "MACアドレスã”ã¨ã«è¨±å¯ã•れるパススルークレジット" + +#: usr/local/www/services_captiveportal.php:482 +#: usr/local/www/services_captiveportal.php:487 +#: usr/local/www/services_captiveportal.php:485 +#: usr/local/www/services_captiveportal.php:503 +#: usr/local/www/services_captiveportal.php:503 +msgid "per client MAC address (0 or blank = none)" +msgstr "クライアントã®MACアドレスã”ã¨ï¼ˆ 0ã¾ãŸã¯ç©ºç™½=ãªã—)" + +#: usr/local/www/services_captiveportal.php:483 +#: usr/local/www/services_captiveportal.php:488 +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/services_captiveportal.php:504 +#: usr/local/www/services_captiveportal.php:504 +msgid "" +"This setting allows passing through the captive portal without " +"authentication a limited number of times per MAC address. Once used up, the " +"client can only log in with valid credentials until the waiting period " +"specified below has expired. Recommended to set a hard timeout and/or idle " +"timeout when using this for it to be effective." +msgstr "èªè¨¼ã€MACアドレスã”ã¨ã«é™ã‚‰ã‚ŒãŸå›žæ•°ã‚’"ã“ã®è¨­å®šã¯ã›ãšã«ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚’通éŽã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ ã€‚ä»¥ä¸‹ã«æŒ‡å®šã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚ŒãŸå¾Œã¯ä½¿ã„切ã£ã¦ã€ 「待機期間ãŒã™ã‚‹ã¾ã§ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã€æœ‰åйãªè³‡æ ¼æƒ…報を使ã£ã¦ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。ãれを有効ã«ã™ã‚‹ã«ã¯ã€ã“れを使用ã™ã‚‹éš›ã«ãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŠã‚ˆã³/ã¾ãŸã¯ã‚¢ã‚¤ãƒ‰ãƒ«"タイムアウトを設定ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/services_captiveportal.php:491 +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:507 +#: usr/local/www/services_captiveportal.php:507 +msgid "Waiting period to restore pass-through credits" +msgstr "パススルークレジットを復元ã™ã‚‹ãŸã‚ã«æ™‚é–“ã‚’å¾…ã£ã¦ã„ã‚‹" + +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:494 +#: usr/local/www/services_captiveportal.php:492 +#: usr/local/www/services_captiveportal.php:510 +#: usr/local/www/services_captiveportal.php:510 +msgid "hours" +msgstr "営業時間" + +#: usr/local/www/services_captiveportal.php:490 +#: usr/local/www/services_captiveportal.php:495 +#: usr/local/www/services_captiveportal.php:493 +#: usr/local/www/services_captiveportal.php:511 +#: usr/local/www/services_captiveportal.php:511 +msgid "" +"Clients will have their available pass-through credits restored to the " +"original count after this amount of time since using the first one. This " +"must be above 0 hours if pass-through credits are enabled." +msgstr "最åˆã®ã‚‚ã®ã‚’使用ã—ã¦ã„ã‚‹ã®ã§ã€ã“ã®æ™‚間後ã«å…ƒã®æ•°ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã€åˆ©ç”¨å¯èƒ½ãªãƒ‘ススルークレジットã«å¾©å…ƒã•れã¾ã™ã€ ã€‚ãƒ‘ã‚¹ã‚¹ãƒ«ãƒ¼ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã€ã“れã¯ã€Œ 0時間以上ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal.php:493 +#: usr/local/www/services_captiveportal.php:498 +#: usr/local/www/services_captiveportal.php:496 +#: usr/local/www/services_captiveportal.php:514 +#: usr/local/www/services_captiveportal.php:514 +msgid "Reset waiting period on attempted access" +msgstr "試ã¿ã‚‰ã‚ŒãŸã‚¢ã‚¯ã‚»ã‚¹ã«æ™‚é–“ã‚’å¾…ã£ã¦ãƒªã‚»ãƒƒãƒˆ" + +#: usr/local/www/services_captiveportal.php:496 +#: usr/local/www/services_captiveportal.php:501 +#: usr/local/www/services_captiveportal.php:499 +#: usr/local/www/services_captiveportal.php:517 +#: usr/local/www/services_captiveportal.php:517 +msgid "Enable waiting period reset on attempted access" +msgstr "試ã¿ã‚‰ã‚ŒãŸã‚¢ã‚¯ã‚»ã‚¹ã«æœŸé–“ã®ãƒªã‚»ãƒƒãƒˆã‚’å¾…ã£ã¦æœ‰åйã«ã—ã¾ã™" + +#: usr/local/www/services_captiveportal.php:497 +#: usr/local/www/services_captiveportal.php:502 +#: usr/local/www/services_captiveportal.php:500 +#: usr/local/www/services_captiveportal.php:518 +#: usr/local/www/services_captiveportal.php:518 +msgid "" +"If enabled, the waiting period is reset to the original duration if access " +"is attempted when all pass-through credits have already been exhausted." +msgstr "ã™ã¹ã¦ã®ãƒ‘ã‚¹ã‚¹ãƒ«ãƒ¼ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆãŒæ—¢ã«å°½ããŸæ™‚ã«è©¦è¡Œã•れã¦ã„る「アクセスãŒã‚ã‚Œã°æœ‰åйã«ã—ãŸå ´åˆã€å¾…機期間ã¯ã€å…ƒã®ç¶™ç¶šæ™‚é–“ã«ãƒªã‚»ãƒƒãƒˆã•れã¾ã™ã€ 。" + +#: usr/local/www/services_captiveportal.php:500 +#: usr/local/www/services_captiveportal.php:505 +#: usr/local/www/services_captiveportal.php:503 +#: usr/local/www/services_captiveportal.php:521 +#: usr/local/www/services_captiveportal.php:521 +msgid "Logout popup window" +msgstr "ログアウトãƒãƒƒãƒ—アップウィンドウ" + +#: usr/local/www/services_captiveportal.php:503 +#: usr/local/www/services_captiveportal.php:508 +#: usr/local/www/services_captiveportal.php:506 +#: usr/local/www/services_captiveportal.php:524 +#: usr/local/www/services_captiveportal.php:524 +msgid "Enable logout popup window" +msgstr "ログアウトãƒãƒƒãƒ—アップウィンドウを有効ã«ã™ã‚‹" + +#: usr/local/www/services_captiveportal.php:504 +#: usr/local/www/services_captiveportal.php:509 +#: usr/local/www/services_captiveportal.php:507 +#: usr/local/www/services_captiveportal.php:525 +#: usr/local/www/services_captiveportal.php:525 +msgid "" +"If enabled, a popup window will appear when clients are allowed through the " +"captive portal. This allows clients to explicitly disconnect themselves " +"before the idle or hard timeout occurs." +msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒé€šéŽã‚’許å¯ã—ã¦ã„ã‚‹å ´åˆã«æœ‰åйã«ã—ãŸå ´åˆã€ãƒãƒƒãƒ—アップウィンドウãŒè¡¨ç¤ºã•れã¾ã™ã€ 。ã“れã¯ã‚¢ã‚¤ãƒ‰ãƒ«çŠ¶æ…‹ã¾ãŸã¯ãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒç™ºç”Ÿã™ã‚‹å‰ã«ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæ˜Žç¤ºçš„ã«ã€Œè‡ªåˆ†è‡ªèº«ã‚’切断ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:507 +#: usr/local/www/services_captiveportal.php:512 +#: usr/local/www/services_captiveportal.php:510 +#: usr/local/www/services_captiveportal.php:528 +#: usr/local/www/services_captiveportal.php:528 +msgid "Pre-authentication redirect URL" +msgstr "事å‰èªè¨¼ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURL" + +#: usr/local/www/services_captiveportal.php:510 +#: usr/local/www/services_captiveportal.php:515 +#: usr/local/www/services_captiveportal.php:513 +#: usr/local/www/services_captiveportal.php:531 +#: usr/local/www/services_captiveportal.php:531 +#, php-format +msgid "" +"Use this field to set $PORTAL_REDIRURL$ variable which can be accessed using " +"your custom captive portal index.php page or error pages." +msgstr "カスタムキャプティブãƒãƒ¼ã‚¿ãƒ«index.phpページã¾ãŸã¯ã‚¨ãƒ©ãƒ¼ãƒšãƒ¼ã‚¸ã€ã‚’使用ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ $ PORTAL_REDIRURL $変数セットã“ã®ãƒ•ィールドを使用ã™ã‚‹ã€ 。" + +#: usr/local/www/services_captiveportal.php:514 +#: usr/local/www/services_captiveportal.php:519 +#: usr/local/www/services_captiveportal.php:517 +#: usr/local/www/services_captiveportal.php:535 +#: usr/local/www/services_captiveportal.php:535 +msgid "After authentication Redirection URL" +msgstr "後ã«èªè¨¼ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURL" + +#: usr/local/www/services_captiveportal.php:518 +#: usr/local/www/services_captiveportal.php:523 +#: usr/local/www/services_captiveportal.php:521 +#: usr/local/www/services_captiveportal.php:539 +#: usr/local/www/services_captiveportal.php:539 +msgid "" +"If you provide a URL here, clients will be redirected to that URL instead of " +"the one they initially tried to access after they've authenticated." +msgstr "彼らãŒèªè¨¼ã•れãŸå¾Œã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ã€å½¼ã‚‰ãŒæœ€åˆã«è©¦ã—ãŸ1 "ã‚ãªãŸã¯ã“ã“ã«URLを指定ã—ãŸå ´åˆã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ä»£ã‚りã«ãã®URLã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•れã¾ã™ã€ 。" + +#: usr/local/www/services_captiveportal.php:522 +#: usr/local/www/services_captiveportal.php:527 +#: usr/local/www/services_captiveportal.php:525 +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:543 +msgid "Concurrent user logins" +msgstr "åŒæ™‚ユーザログイン" + +#: usr/local/www/services_captiveportal.php:525 +#: usr/local/www/services_captiveportal.php:530 +#: usr/local/www/services_captiveportal.php:528 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:546 +msgid "Disable concurrent logins" +msgstr "åŒæ™‚ログインを無効ã«ã™ã‚‹" + +#: usr/local/www/services_captiveportal.php:526 +#: usr/local/www/services_captiveportal.php:531 +#: usr/local/www/services_captiveportal.php:529 +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:547 +msgid "" +"If this option is set, only the most recent login per username will be " +"active. Subsequent logins will cause machines previously logged in with the " +"same username to be disconnected." +msgstr "アクティブ"ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã”ã¨ã«æœ€çµ‚ログインã¯ãªã‚Šã¾ã™ã€ 。以é™ã®ãƒ­ã‚°ã‚¤ãƒ³ã§ã¯ãƒžã‚·ãƒ³ãŒä»¥å‰ã«åˆ‡æ–­ã•れる「åŒã˜ãƒ¦ãƒ¼ã‚¶åã§ãƒ­ã‚°ã‚¤ãƒ³ãŒç™ºç”Ÿã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:529 +#: usr/local/www/services_captiveportal.php:534 +#: usr/local/www/services_captiveportal.php:532 +#: usr/local/www/services_captiveportal.php:550 +#: usr/local/www/services_captiveportal.php:550 +msgid "MAC filtering" +msgstr "MACフィルタリング" + +#: usr/local/www/services_captiveportal.php:532 +#: usr/local/www/services_captiveportal.php:537 +#: usr/local/www/services_captiveportal.php:535 +#: usr/local/www/services_captiveportal.php:553 +#: usr/local/www/services_captiveportal.php:553 +msgid "Disable MAC filtering" +msgstr "無効ã«ã™ã‚‹MACフィルタリング" + +#: usr/local/www/services_captiveportal.php:533 +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:536 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:554 +msgid "" +"If this option is set, no attempts will be made to ensure that the MAC " +"address of clients stays the same while they're logged in.This is required " +"when the MAC address of the client cannot be determined (usually because " +"there are routers between" +msgstr "彼らã¯in.ThisãŒå¿…è¦ã¨ã•れるログã«è¨˜éŒ²ã—ã¦ã„ã‚‹é–“ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¢ãƒ‰ãƒ¬ã‚¹åŒã˜ã¾ã¾"ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€è©¦ã¿ã¯MACãŒã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«è¡Œã‚れるã“ã¨ã¯ã‚りã¾ã›ã‚“""クライアントã®MACアドレスを決定ã™ã‚‹ã“ã¨ãŒã§ããªã„å ´åˆï¼ˆé€šå¸¸ã®ãŸã‚ã€ãŒé–“ã®ãƒ«ãƒ¼ã‚¿ãŒã‚りã¾ã™" + +#: usr/local/www/services_captiveportal.php:534 +#: usr/local/www/services_captiveportal.php:539 +#: usr/local/www/services_captiveportal.php:537 +#: usr/local/www/services_captiveportal.php:555 +#: usr/local/www/services_captiveportal.php:555 +msgid "and the clients)." +msgstr "ãŠã‚ˆã³ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆï¼‰ 。" + +#: usr/local/www/services_captiveportal.php:535 +#: usr/local/www/services_captiveportal.php:540 +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:556 +#: usr/local/www/services_captiveportal.php:556 +msgid "If this is enabled, RADIUS MAC authentication cannot be used." +msgstr "ã“ã‚ŒãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã€ RADIUS MACèªè¨¼ãŒä½¿ç”¨ã§ããªã„。" + +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:541 +#: usr/local/www/services_captiveportal.php:559 +#: usr/local/www/services_captiveportal.php:559 +msgid "Pass-through MAC Auto Entry" +msgstr "パススルーMAC自動エントリー" + +#: usr/local/www/services_captiveportal.php:541 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:544 +#: usr/local/www/services_captiveportal.php:562 +#: usr/local/www/services_captiveportal.php:562 +msgid "Enable Pass-through MAC automatic additions" +msgstr "パススルーMAC自動追加を有効ã«ã™ã‚‹" + +#: usr/local/www/services_captiveportal.php:542 +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:545 +#: usr/local/www/services_captiveportal.php:563 +#: usr/local/www/services_captiveportal.php:563 +msgid "" +"If this option is set, a MAC passthrough entry is automatically added after " +"the user has successfully authenticated. Users of that MAC address will " +"never have to authenticate again." +msgstr "ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ­£å¸¸ã«èªè¨¼ã•れãŸã€ã«ã¯ã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€ MACパススルーエントリãŒå¾Œã«è‡ªå‹•çš„ã«è¿½åŠ ã•れã¾ã™ã€ 。ãã®MACアドレスã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ 「å†åº¦èªè¨¼ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +msgid "" +"To remove the passthrough MAC entry you either have to log in and remove it " +"manually from the" +msgstr "ã‹ã‚‰æ‰‹å‹•ã§ã€Œãƒ‘ススルーMACエントリを削除ã™ã‚‹ã«ã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã€ãれを削除ã™ã‚‹å¿…è¦ãŒã„ãšã‚Œã‹"" + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +msgid "Pass-through MAC tab" +msgstr "パススルーã®MACタブ" + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +msgid "or send a POST from another system to remove it." +msgstr "ã¾ãŸã¯ãれを削除ã™ã‚‹ã«ã¯ã€åˆ¥ã®ã‚·ã‚¹ãƒ†ãƒ ã‹ã‚‰ã®POSTã‚’é€ä¿¡ã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:544 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:565 +#: usr/local/www/services_captiveportal.php:565 +msgid "" +"If this is enabled, RADIUS MAC authentication cannot be used. Also, the " +"logout window will not be shown." +msgstr "「ã“ã‚ŒãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ RADIUS MACèªè¨¼ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã¾ãŸã€ã€Œãƒ­ã‚°ã‚¢ã‚¦ãƒˆã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒè¡¨ç¤ºã•れã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:550 +#: usr/local/www/services_captiveportal.php:568 +#: usr/local/www/services_captiveportal.php:568 +msgid "Enable Pass-through MAC automatic addition with username" +msgstr "パススルーMACã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã§è‡ªå‹•追加を有効ã«ã™ã‚‹" + +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:553 +#: usr/local/www/services_captiveportal.php:551 +#: usr/local/www/services_captiveportal.php:569 +#: usr/local/www/services_captiveportal.php:569 +msgid "" +"If this option is set, with the automatically MAC passthrough entry created " +"the username, used during authentication, will be saved." +msgstr "èªè¨¼æ™‚ã«ä½¿ç”¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å〠「ã“ã®ã‚ªãƒ—ションã¯è‡ªå‹•çš„ã«ä½œæˆã•れãŸMACパススルーエントリã¨ã€è¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ã€Œä¿å­˜ã•れã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:553 +#: usr/local/www/services_captiveportal.php:558 +#: usr/local/www/services_captiveportal.php:556 +#: usr/local/www/services_captiveportal.php:574 +#: usr/local/www/services_captiveportal.php:574 +msgid "Per-user bandwidth restriction" +msgstr "ユーザã”ã¨ã®å¸¯åŸŸå¹…ã®åˆ¶é™" + +#: usr/local/www/services_captiveportal.php:556 +#: usr/local/www/services_captiveportal.php:561 +#: usr/local/www/services_captiveportal.php:559 +#: usr/local/www/services_captiveportal.php:577 +#: usr/local/www/services_captiveportal.php:577 +msgid "Enable per-user bandwidth restriction" +msgstr "ユーザã”ã¨ã®å¸¯åŸŸå¹…ã®åˆ¶é™ã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/services_captiveportal.php:559 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:562 +#: usr/local/www/services_captiveportal.php:580 +#: usr/local/www/services_captiveportal.php:580 +msgid "Default download" +msgstr "デフォルトã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰" + +#: usr/local/www/services_captiveportal.php:563 +#: usr/local/www/services_captiveportal.php:568 +#: usr/local/www/services_captiveportal.php:566 +#: usr/local/www/services_captiveportal.php:584 +#: usr/local/www/services_captiveportal.php:584 +msgid "Default upload" +msgstr "デフォルトã®ã‚¢ãƒƒãƒ—ロード" + +#: usr/local/www/services_captiveportal.php:567 +#: usr/local/www/services_captiveportal.php:572 +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:588 +#: usr/local/www/services_captiveportal.php:588 +msgid "" +"If this option is set, the captive portal will restrict each user who logs " +"in to the specified default bandwidth. RADIUS can override the default " +"settings. Leave empty or set to 0 for no limit." +msgstr "指定ã•れãŸãƒ‡ãƒ•ォルトã®å¸¯åŸŸå¹…ã«ã¯ã€Œã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã¯ãƒ­ã‚°ã‚ªãƒ³ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã”ã¨ã«åˆ¶é™ã—ã¾ã™ã€ 。 RADIUSã¯ãƒ‡ãƒ•ォルト㮠"設定を上書ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚制é™ãªã—ã«ç©ºã¾ãŸã¯0ã®ã¾ã¾ã«ã—ã¦ãŠã„ã¦ãã ã•ã„。" + +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:575 +#: usr/local/www/services_captiveportal.php:573 +msgid "PMS authentication" +msgstr "PMSèªè¨¼" + +#: usr/local/www/services_captiveportal.php:573 +#: usr/local/www/services_captiveportal.php:578 +#: usr/local/www/services_captiveportal.php:576 +msgid "Enable PMS authentication" +msgstr "PMSèªè¨¼ã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/services_captiveportal.php:574 +#: usr/local/www/services_captiveportal.php:579 +#: usr/local/www/services_captiveportal.php:577 +msgid "" +"If this option is set, users will be authenticated through the PMS backend " +"if they fill the necessary information in the login page." +msgstr "彼らã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ãƒšãƒ¼ã‚¸ã«å¿…è¦äº‹é …を記入ã—ãŸå ´åˆã€ã«ã¯ã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€PMSã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’使用ã—ã¦èªè¨¼ã•れã¾ã™ã€ 。" + +#: usr/local/www/services_captiveportal.php:583 +#: usr/local/www/services_captiveportal.php:588 +#: usr/local/www/services_captiveportal.php:586 +#: usr/local/www/services_captiveportal.php:580 +#: usr/local/www/services_captiveportal.php:596 +#: usr/local/www/services_captiveportal.php:596 +msgid "No Authentication" +msgstr "èªè¨¼ãªã—" + +#: usr/local/www/services_captiveportal.php:587 +#: usr/local/www/diag_ipsec.php:194 +#: usr/local/www/services_captiveportal.php:592 +#: usr/local/www/diag_ipsec.php:195 +#: usr/local/www/services_captiveportal.php:590 +#: usr/local/www/diag_ipsec.php:196 +#: usr/local/www/services_captiveportal.php:584 +#: usr/local/www/services_captiveportal.php:600 +#: usr/local/www/diag_ipsec.php:196 +#: usr/local/www/services_captiveportal.php:600 +msgid "Local" +msgstr "ローカル" + +#: usr/local/www/services_captiveportal.php:587 usr/local/www/fbegin.inc:93 +#: usr/local/www/fbegin.inc:95 usr/local/www/system_usermanager.php:54 +#: usr/local/www/fbegin.inc:110 usr/local/www/fbegin.inc:112 +#: usr/local/www/services_captiveportal.php:592 usr/local/www/fbegin.inc:119 +#: usr/local/www/fbegin.inc:121 usr/local/www/services_captiveportal.php:590 +#: usr/local/www/services_captiveportal.php:584 usr/local/www/fbegin.inc:111 +#: usr/local/www/fbegin.inc:113 usr/local/www/services_captiveportal.php:600 +#: usr/local/www/services_captiveportal.php:600 usr/local/www/fbegin.inc:111 +#: usr/local/www/fbegin.inc:113 usr/local/www/system_usermanager.php:54 +msgid "User Manager" +msgstr "ユーザーマãƒãƒ¼ã‚¸ãƒ£" + +#: usr/local/www/services_captiveportal.php:591 +#: usr/local/www/services_captiveportal.php:596 +#: usr/local/www/services_captiveportal.php:594 +#: usr/local/www/services_captiveportal.php:612 +#: usr/local/www/services_captiveportal.php:612 +msgid "RADIUS Authentication" +msgstr "RADIUSèªè¨¼" + +#: usr/local/www/services_captiveportal.php:599 +#: usr/local/www/services_captiveportal.php:635 +#: usr/local/www/services_captiveportal.php:678 +#: usr/local/www/services_captiveportal.php:633 +#: usr/local/www/services_captiveportal.php:676 +#: usr/local/www/services_captiveportal.php:634 +#: usr/local/www/services_captiveportal.php:677 +#: usr/local/www/services_captiveportal.php:650 +#: usr/local/www/services_captiveportal.php:693 +#: usr/local/www/services_captiveportal.php:650 +#: usr/local/www/services_captiveportal.php:693 +msgid "Primary RADIUS server" +msgstr "プライマリRADIUSサーãƒãƒ¼" + +#: usr/local/www/services_captiveportal.php:604 +#: usr/local/www/services_captiveportal.php:640 +#: usr/local/www/services_captiveportal.php:638 +#: usr/local/www/services_captiveportal.php:639 +#: usr/local/www/services_captiveportal.php:655 +#: usr/local/www/services_captiveportal.php:655 +msgid "" +"Enter the IP address of the RADIUS server which users of the captive portal " +"have to authenticate against." +msgstr "ã«å¯¾ã—ã¦èªè¨¼ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ RADIUSサーãƒã®IPアドレスを入力ã—ã¦ãã ã•ã„ "。" + +#: usr/local/www/services_captiveportal.php:609 +#: usr/local/www/services_captiveportal.php:645 +#: usr/local/www/services_captiveportal.php:643 +#: usr/local/www/services_captiveportal.php:644 +#: usr/local/www/services_captiveportal.php:660 +#: usr/local/www/services_captiveportal.php:660 +msgid "Leave this field blank to use the default port (1812)." +msgstr "デフォルトãƒãƒ¼ãƒˆï¼ˆ 1812 )を使用ã™ã‚‹ã«ã¯ã€ã“ã®ãƒ•ィールドを空白ã®ã¾ã¾ã«ã—ã¦ãŠãã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:612 +#: usr/local/www/services_captiveportal.php:632 +#: usr/local/www/services_captiveportal.php:651 +#: usr/local/www/services_captiveportal.php:670 +#: usr/local/www/services_captiveportal.php:725 +#: usr/local/www/services_captiveportal.php:648 +#: usr/local/www/services_captiveportal.php:668 +#: usr/local/www/services_captiveportal.php:690 +#: usr/local/www/services_captiveportal.php:709 +#: usr/local/www/services_captiveportal.php:767 +#: usr/local/www/services_captiveportal.php:646 +#: usr/local/www/services_captiveportal.php:666 +#: usr/local/www/services_captiveportal.php:688 +#: usr/local/www/services_captiveportal.php:707 +#: usr/local/www/services_captiveportal.php:765 +#: usr/local/www/services_captiveportal.php:647 +#: usr/local/www/services_captiveportal.php:667 +#: usr/local/www/services_captiveportal.php:689 +#: usr/local/www/services_captiveportal.php:708 +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:705 +#: usr/local/www/services_captiveportal.php:724 +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:705 +#: usr/local/www/services_captiveportal.php:724 +msgid "Shared secret" +msgstr "共有秘密éµ" + +#: usr/local/www/services_captiveportal.php:614 +#: usr/local/www/services_captiveportal.php:650 +#: usr/local/www/services_captiveportal.php:648 +#: usr/local/www/services_captiveportal.php:649 +#: usr/local/www/services_captiveportal.php:665 +#: usr/local/www/services_captiveportal.php:665 +msgid "" +"Leave this field blank to not use a RADIUS shared secret (not recommended)." +msgstr "「RADIUS共有シークレットを使用ã—ãªã„よã†ã«ã€ã“ã®ãƒ•ィールドを空白ã®ã¾ã¾ã«ã—ã¾ã™ï¼ˆæŽ¨å¥¨ã•れã¾ã›ã‚“) 。" + +#: usr/local/www/services_captiveportal.php:620 usr/local/www/vpn_pptp.php:440 +#: usr/local/www/services_captiveportal.php:656 +#: usr/local/www/services_captiveportal.php:697 usr/local/www/vpn_pptp.php:442 +#: usr/local/www/services_captiveportal.php:654 +#: usr/local/www/services_captiveportal.php:695 +#: usr/local/www/services_captiveportal.php:655 +#: usr/local/www/services_captiveportal.php:696 usr/local/www/vpn_pptp.php:445 +#: usr/local/www/services_captiveportal.php:671 +#: usr/local/www/services_captiveportal.php:712 +#: usr/local/www/services_captiveportal.php:671 +#: usr/local/www/services_captiveportal.php:712 usr/local/www/vpn_pptp.php:445 +msgid "Secondary RADIUS server" +msgstr "セカンダリRADIUSサーãƒ" + +#: usr/local/www/services_captiveportal.php:625 +#: usr/local/www/services_captiveportal.php:661 +#: usr/local/www/services_captiveportal.php:659 +#: usr/local/www/services_captiveportal.php:660 +#: usr/local/www/services_captiveportal.php:676 +#: usr/local/www/services_captiveportal.php:676 +msgid "" +"If you have a second RADIUS server, you can activate it by entering its IP " +"address here." +msgstr "ã“ã“ã§ã‚¢ãƒ‰ãƒ¬ã‚¹ "2å°ç›®ã®RADIUSサーãƒãŒã‚ã‚‹å ´åˆã¯ã€ãã®IPアドレスを入力ã—ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。" + +#: usr/local/www/services_captiveportal.php:639 +msgid "Tertiary RADIUS server" +msgstr "三次RADIUSサーãƒãƒ¼" + +#: usr/local/www/services_captiveportal.php:644 +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:681 +#: usr/local/www/services_captiveportal.php:682 +#: usr/local/www/services_captiveportal.php:698 +#: usr/local/www/services_captiveportal.php:698 +msgid "" +"If you have a third RADIUS server, you can activate it by entering its IP " +"address here." +msgstr "ã“ã“ã§ã‚¢ãƒ‰ãƒ¬ã‚¹ "サードRADIUSサーãƒãŒã‚ã‚‹å ´åˆã¯ã€ãã®IPアドレスを入力ã—ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。" + +#: usr/local/www/services_captiveportal.php:658 +msgid "Quaternary RADIUS server" +msgstr "第四紀ã®RADIUSサーãƒ" + +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:702 +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/services_captiveportal.php:701 +#: usr/local/www/services_captiveportal.php:717 +#: usr/local/www/services_captiveportal.php:717 +msgid "" +"If you have a fourth RADIUS server, you can activate it by entering its IP " +"address here." +msgstr "ã“ã“ã§ã‚¢ãƒ‰ãƒ¬ã‚¹ "4番目ã®RADIUSサーãƒãŒã‚ã‚‹å ´åˆã¯ã€ãã®IPアドレスを入力ã—ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。" + +#: usr/local/www/services_captiveportal.php:677 +#: usr/local/www/services_captiveportal.php:719 +#: usr/local/www/services_captiveportal.php:717 +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/services_captiveportal.php:731 +#: usr/local/www/services_captiveportal.php:731 +msgid "Accounting" +msgstr "会計" + +#: usr/local/www/services_captiveportal.php:682 +#: usr/local/www/services_captiveportal.php:724 +#: usr/local/www/services_captiveportal.php:722 +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:736 +msgid "send RADIUS accounting packets" +msgstr "RADIUSアカウンティングパケットをé€ä¿¡" + +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:725 +#: usr/local/www/services_captiveportal.php:723 +#: usr/local/www/services_captiveportal.php:721 +#: usr/local/www/services_captiveportal.php:737 +#: usr/local/www/services_captiveportal.php:737 +msgid "" +"If this is enabled, RADIUS accounting packets will be sent to the primary " +"RADIUS server." +msgstr "RADIUSサーãƒã¯ã€Œã“ã‚ŒãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ RADIUSアカウンティングパケットãŒãƒ—ライマリーã«é€ä¿¡ã•れã¾ã™ã€ 。" + +#: usr/local/www/services_captiveportal.php:686 +#: usr/local/www/services_captiveportal.php:728 +#: usr/local/www/services_captiveportal.php:726 +#: usr/local/www/services_captiveportal.php:724 +#: usr/local/www/services_captiveportal.php:740 +#: usr/local/www/services_captiveportal.php:740 +msgid "Accounting port" +msgstr "アカウンティングãƒãƒ¼ãƒˆ" + +#: usr/local/www/services_captiveportal.php:688 +#: usr/local/www/services_captiveportal.php:730 +#: usr/local/www/services_captiveportal.php:728 +#: usr/local/www/services_captiveportal.php:726 +#: usr/local/www/services_captiveportal.php:742 +#: usr/local/www/services_captiveportal.php:742 +msgid "Leave blank to use the default port (1813)." +msgstr "デフォルトã®ãƒãƒ¼ãƒˆï¼ˆ 1813 )を使用ã™ã‚‹ã‚ˆã†ã«ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:694 +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:734 +#: usr/local/www/services_captiveportal.php:746 +#: usr/local/www/services_captiveportal.php:762 +#: usr/local/www/services_captiveportal.php:762 +msgid "Reauthentication" +msgstr "å†èªè¨¼" + +#: usr/local/www/services_captiveportal.php:699 +#: usr/local/www/services_captiveportal.php:741 +#: usr/local/www/services_captiveportal.php:739 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:764 +#: usr/local/www/services_captiveportal.php:764 +msgid "Reauthenticate connected users every minute" +msgstr "接続中ã®ãƒ¦ãƒ¼ã‚¶æ¯Žåˆ†å†èªè¨¼" + +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/services_captiveportal.php:742 +#: usr/local/www/services_captiveportal.php:740 +#: usr/local/www/services_captiveportal.php:749 +#: usr/local/www/services_captiveportal.php:765 +#: usr/local/www/services_captiveportal.php:765 +msgid "" +"If reauthentication is enabled, Access-Requests will be sent to the RADIUS " +"server for each user that is logged in every minute. If an Access-Reject is " +"received for a user, that user is disconnected from the captive portal " +"immediately." +msgstr "毎分ログインã—ã¦ã„るユーザーã”ã¨ã«ã‚µãƒ¼ãƒãƒ¼"å†èªè¨¼ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€Access -è¦æ±‚ã¯ã€RADIUSã«é€ä¿¡ã•れã¾ã™ã€ 。アクセス拒å¦ã•れãŸå ´åˆã€ã™ãã«ã€Œåˆ©ç”¨è€…ã®ãŸã‚ã«å—ä¿¡ã™ã‚‹ã¨ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‹ã‚‰åˆ‡æ–­ã•れã¦ã„る〠。" + +#: usr/local/www/services_captiveportal.php:704 +#: usr/local/www/services_captiveportal.php:746 +#: usr/local/www/services_captiveportal.php:744 +#: usr/local/www/services_captiveportal.php:732 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:748 +msgid "Accounting updates" +msgstr "会計ã®ã‚¢ãƒƒãƒ—デート" + +#: usr/local/www/services_captiveportal.php:706 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:746 +#: usr/local/www/services_captiveportal.php:734 +#: usr/local/www/services_captiveportal.php:750 +#: usr/local/www/services_captiveportal.php:750 +msgid "no accounting updates" +msgstr "アカウンティングアップデートã¾ã›ã‚“" + +#: usr/local/www/services_captiveportal.php:707 +#: usr/local/www/services_captiveportal.php:749 +#: usr/local/www/services_captiveportal.php:747 +#: usr/local/www/services_captiveportal.php:735 +#: usr/local/www/services_captiveportal.php:751 +#: usr/local/www/services_captiveportal.php:751 +msgid "stop/start accounting" +msgstr "åœæ­¢/アカウンティング開始" + +#: usr/local/www/services_captiveportal.php:708 +#: usr/local/www/services_captiveportal.php:750 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:752 +#: usr/local/www/services_captiveportal.php:752 +msgid "interim update" +msgstr "中間更新" + +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/services_captiveportal.php:757 +#: usr/local/www/services_captiveportal.php:755 +#: usr/local/www/services_captiveportal.php:753 +#: usr/local/www/services_captiveportal.php:769 +#: usr/local/www/services_captiveportal.php:769 +msgid "RADIUS MAC authentication" +msgstr "RADIUS MACèªè¨¼" + +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/services_captiveportal.php:762 +#: usr/local/www/services_captiveportal.php:760 +#: usr/local/www/services_captiveportal.php:755 +#: usr/local/www/services_captiveportal.php:771 +#: usr/local/www/services_captiveportal.php:771 +msgid "Enable RADIUS MAC authentication" +msgstr "RADIUS MACèªè¨¼ã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/services_captiveportal.php:721 +#: usr/local/www/services_captiveportal.php:763 +#: usr/local/www/services_captiveportal.php:761 +#: usr/local/www/services_captiveportal.php:756 +#: usr/local/www/services_captiveportal.php:772 +#: usr/local/www/services_captiveportal.php:772 +msgid "" +"If this option is enabled, the captive portal will try to authenticate users " +"by sending their MAC address as the username and the password entered below " +"to the RADIUS server." +msgstr "ユーザåã¨RADIUSサーãƒã«ã€Œä¸‹ã®å…¥åŠ›ã•れãŸãƒ‘スワードãªã©ã®MACアドレスをé€ä¿¡ã™ã‚‹ã“ã¨ã§ã€ "ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’èªè¨¼ã—よã†ã¨ã—ã¾ã™ã€ 。" + +#: usr/local/www/services_captiveportal.php:732 +#: usr/local/www/services_captiveportal.php:774 +#: usr/local/www/services_captiveportal.php:772 +#: usr/local/www/services_captiveportal.php:743 +#: usr/local/www/services_captiveportal.php:759 +#: usr/local/www/services_captiveportal.php:759 +msgid "RADIUS options" +msgstr "RADIUSã®ã‚ªãƒ—ション" + +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:778 +#: usr/local/www/services_captiveportal.php:776 +#: usr/local/www/services_captiveportal.php:764 +#: usr/local/www/services_captiveportal.php:780 +#: usr/local/www/services_captiveportal.php:780 +msgid "RADIUS NAS IP attribute" +msgstr "RADIUSã®NAS IPアトリビュート" + +#: usr/local/www/services_captiveportal.php:766 +#: usr/local/www/services_captiveportal.php:808 +#: usr/local/www/services_captiveportal.php:806 +#: usr/local/www/services_captiveportal.php:794 +#: usr/local/www/services_captiveportal.php:810 +#: usr/local/www/services_captiveportal.php:810 +msgid "Choose the IP to use for calling station attribute." +msgstr "駅属性を呼ã³å‡ºã™ãŸã‚ã«ä½¿ç”¨ã™ã‚‹IPã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:771 +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:811 +#: usr/local/www/services_captiveportal.php:799 +#: usr/local/www/services_captiveportal.php:815 +#: usr/local/www/services_captiveportal.php:815 +msgid "Session-Timeout" +msgstr "セッションタイムアウト" + +#: usr/local/www/services_captiveportal.php:772 +#: usr/local/www/services_captiveportal.php:814 +#: usr/local/www/services_captiveportal.php:812 +#: usr/local/www/services_captiveportal.php:800 +#: usr/local/www/services_captiveportal.php:816 +#: usr/local/www/services_captiveportal.php:816 +msgid "Use RADIUS Session-Timeout attributes" +msgstr "RADIUSを使用セッションタイムアウト属性" + +#: usr/local/www/services_captiveportal.php:773 +#: usr/local/www/services_captiveportal.php:815 +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:817 +#: usr/local/www/services_captiveportal.php:817 +msgid "" +"When this is enabled, clients will be disconnected after the amount of time " +"retrieved from the RADIUS Session-Timeout attribute." +msgstr "RADIUSセッションタイムアウト属性ã‹ã‚‰å–å¾—ã—ãŸã€Œã“れを有効ã«ã™ã‚‹ã¨ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã€æ™‚é–“ã®çµŒéŽå¾Œã«åˆ‡æ–­ã•れã¾ã™ã€ 。" + +#: usr/local/www/services_captiveportal.php:789 +#: usr/local/www/services_captiveportal.php:831 +#: usr/local/www/services_captiveportal.php:829 +#: usr/local/www/services_captiveportal.php:817 +#: usr/local/www/services_captiveportal.php:833 +#: usr/local/www/services_captiveportal.php:833 +#, php-format +msgid "" +"If RADIUS type is set to Cisco, in Access-Requests the value of Calling-" +"Station-Id will be set to the client's IP address and the Called-Station-Id " +"to the client's MAC address. Default behavior is Calling-Station-Id = " +"client's MAC address and Called-Station-Id = %s's WAN IP address." +msgstr "「RADIUSタイプã¯ã‚¢ã‚¯ã‚»ã‚¹Â·ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®å€¤ã«ã€ã‚·ã‚¹ã‚³ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯å‘¼ã³å‡ºã— - 「ステーションIDã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®IPアドレスã¨å‘¼ã°ã‚Œé§…ã®ã‚¤ãƒ‰ã€ã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®MACアドレスã«è¨­å®šã•れã¾ã™ã€‚デフォルトã®å‹•作ã¯ã€ç™ºå‘¼å±€ã§ã‚り〠-ID = "クライアントã®MACアドレスã¨å‘¼ã°ã‚Œé§…ã®ã‚¤ãƒ‰= %sã®WAN IPアドレス。" + +#: usr/local/www/services_captiveportal.php:796 +#: usr/local/www/services_captiveportal.php:838 +#: usr/local/www/services_captiveportal.php:836 +#: usr/local/www/services_captiveportal.php:834 +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/services_captiveportal.php:850 +msgid "MAC address format" +msgstr "MACアドレス形å¼" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "singledash" +msgstr "singledash" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "ietf" +msgstr "IETF" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "cisco" +msgstr "シスコ" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "unformatted" +msgstr "未フォーマットã®" + +#: usr/local/www/services_captiveportal.php:810 +#: usr/local/www/services_captiveportal.php:852 +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/services_captiveportal.php:849 +#: usr/local/www/services_captiveportal.php:865 +#: usr/local/www/services_captiveportal.php:865 +msgid "" +"This option changes the MAC address format used in the whole RADIUS system. " +"Change this if you also" +msgstr ""ã“ã®ã‚ªãƒ—ションã¯ã€å…¨ä½“ã®RADIUSシステムã§ä½¿ç”¨ã•れるMACアドレス形å¼ãŒå¤‰æ›´ã•れã¾ã™ã€‚ 「ã‚ãªãŸã‚‚ã‚れã°ã€ã“れを変更ã™ã‚‹" + +#: usr/local/www/services_captiveportal.php:811 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:851 +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/services_captiveportal.php:866 +#: usr/local/www/services_captiveportal.php:866 +msgid "need to change the username format for RADIUS MAC authentication." +msgstr "RADIUS MACèªè¨¼ç”¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã®å½¢å¼ã‚’変更ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:812 +#: usr/local/www/services_captiveportal.php:854 +#: usr/local/www/services_captiveportal.php:852 +#: usr/local/www/services_captiveportal.php:851 +#: usr/local/www/services_captiveportal.php:867 +#: usr/local/www/services_captiveportal.php:867 +msgid "default:" +msgstr "デフォルト:" + +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:855 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:852 +#: usr/local/www/services_captiveportal.php:868 +#: usr/local/www/services_captiveportal.php:868 +msgid "singledash:" +msgstr "singledash :" + +#: usr/local/www/services_captiveportal.php:814 +#: usr/local/www/services_captiveportal.php:856 +#: usr/local/www/services_captiveportal.php:854 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:869 +#: usr/local/www/services_captiveportal.php:869 +msgid "ietf:" +msgstr "IETF :" + +#: usr/local/www/services_captiveportal.php:815 +#: usr/local/www/services_captiveportal.php:857 +#: usr/local/www/services_captiveportal.php:855 +#: usr/local/www/services_captiveportal.php:854 +#: usr/local/www/services_captiveportal.php:870 +#: usr/local/www/services_captiveportal.php:870 +msgid "cisco:" +msgstr "シスコ:" + +#: usr/local/www/services_captiveportal.php:816 +#: usr/local/www/services_captiveportal.php:858 +#: usr/local/www/services_captiveportal.php:856 +#: usr/local/www/services_captiveportal.php:855 +#: usr/local/www/services_captiveportal.php:871 +#: usr/local/www/services_captiveportal.php:871 +msgid "unformatted:" +msgstr "フォーマットã•れã¦ã„ãªã„:" + +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/services_captiveportal.php:861 +#: usr/local/www/services_captiveportal.php:859 +#: usr/local/www/services_captiveportal.php:877 +#: usr/local/www/services_captiveportal.php:877 +msgid "HTTPS login" +msgstr "HTTPSã®ãƒ­ã‚°ã‚¤ãƒ³" + +#: usr/local/www/services_captiveportal.php:822 +#: usr/local/www/services_captiveportal.php:864 +#: usr/local/www/services_captiveportal.php:862 +#: usr/local/www/services_captiveportal.php:880 +#: usr/local/www/services_captiveportal.php:880 +msgid "Enable HTTPS login" +msgstr "HTTPSã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’å¯èƒ½ã«ã™ã‚‹" + +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:865 +msgid "" +"If enabled, the username and password will be transmitted over an HTTPS " +"connection to protect against eavesdroppers. A server name, certificate and " +"matching private key must also be specified below." +msgstr "ç›—è´è€…ã‹ã‚‰ä¿è­·ã™ã‚‹ãŸã‚ã®æŽ¥ç¶šã€ã‚’有効ã«ã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードã¯ã€HTTPSを介ã—ã¦é€ä¿¡ã•れã¾ã™ã€ 。サーãƒãƒ¼åã€è¨¼æ˜Žæ›¸ã¨ã€Œä¸€è‡´ã™ã‚‹ç§˜å¯†éµã¯ã€ä»¥ä¸‹ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:826 +#: usr/local/www/services_captiveportal.php:868 +#: usr/local/www/services_captiveportal.php:866 +#: usr/local/www/services_captiveportal.php:884 +#: usr/local/www/services_captiveportal.php:884 +msgid "HTTPS server name" +msgstr "HTTPSサーãƒå" + +#: usr/local/www/services_captiveportal.php:829 +#: usr/local/www/services_captiveportal.php:871 +#: usr/local/www/services_captiveportal.php:869 +#: usr/local/www/services_captiveportal.php:887 +#: usr/local/www/services_captiveportal.php:887 +#, php-format +msgid "" +"This name will be used in the form action for the HTTPS POST and should " +"match the Common Name (CN) in your certificate (otherwise, the client " +"browser will most likely display a security warning). Make sure captive " +"portal clients can resolve this name in DNS and verify on the client that " +"the IP resolves to the correct interface IP on %s." +msgstr "「ã“ã®åå‰ã¯ã€HTTPS POSTã®ãƒ•ォームアクションã§ä½¿ç”¨ã•れã€å¿…è¦ãŒã‚りã¾ã™"ã‚ãªãŸã®è¨¼æ˜Žæ›¸ã®å…±é€šå(CN )ã¨ä¸€è‡´ã™ã‚‹ï¼ˆãã†ã§ãªã‘れã°ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã€Œãƒ–ラウザ最もå¯èƒ½æ€§ã®é«˜ã„セキュリティ警告ãŒè¡¨ç¤ºã•れã¾ã™ï¼‰ 。必ãšè™œã€ãƒãƒ¼ã‚¿ãƒ«ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’ã™ã‚‹ã“ã¨ãŒã§ãDNSã«ã“ã®åå‰ã‚’解決ã—〠IPãŒ%s.ä¸Šã®æ­£ã—ã„インターフェイスIPã«è§£æ±ºã•れるã€ã“ã¨ã‚’クライアントã«ç¢ºèªã—ã¦ãã ã•ã„" + +#: usr/local/www/services_captiveportal.php:832 +#: usr/local/www/services_captiveportal.php:874 +msgid "HTTPS certificate" +msgstr "HTTPS証明書" + +#: usr/local/www/services_captiveportal.php:836 +#: usr/local/www/services_captiveportal.php:878 +msgid "Paste a signed certificate in X.509 PEM format here." +msgstr "ã“ã“ã§ã€X.509 PEMå½¢å¼ã®ç½²å付ã証明書を貼り付ã‘ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:839 +#: usr/local/www/services_captiveportal.php:881 +msgid "HTTPS private key" +msgstr "HTTPSã®ç§˜å¯†éµ" + +#: usr/local/www/services_captiveportal.php:843 +#: usr/local/www/services_captiveportal.php:885 +msgid "Paste an RSA private key in PEM format here." +msgstr "ã“ã“ã«PEMå½¢å¼ã®RSA秘密éµã‚’貼り付ã‘ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:846 +#: usr/local/www/services_captiveportal.php:888 +msgid "HTTPS intermediate certificate" +msgstr "HTTPSã®ä¸­é–“証明書" + +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/system_camanager.php:406 +#: usr/local/www/system_certmanager.php:515 +#: usr/local/www/system_certmanager.php:614 +#: usr/local/www/services_captiveportal.php:892 +#: usr/local/www/system_camanager.php:413 +#: usr/local/www/system_certmanager.php:623 +#: usr/local/www/system_certmanager.php:624 +#: usr/local/www/system_camanager.php:413 +#: usr/local/www/system_certmanager.php:624 +msgid "Paste a certificate in X.509 PEM format here." +msgstr "ã“ã“ã§ã€X.509 PEMå½¢å¼ã®è¨¼æ˜Žæ›¸ã‚’貼り付ã‘ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:895 +#: usr/local/www/services_captiveportal.php:891 +#: usr/local/www/services_captiveportal.php:893 +#: usr/local/www/services_captiveportal.php:909 +#: usr/local/www/services_captiveportal.php:909 +msgid "Portal page contents" +msgstr "ãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã®å†…容" + +#: usr/local/www/services_captiveportal.php:865 +#: usr/local/www/services_captiveportal.php:899 +#: usr/local/www/services_captiveportal.php:913 +#: usr/local/www/services_captiveportal.php:910 +#: usr/local/www/services_captiveportal.php:944 +#: usr/local/www/services_captiveportal.php:958 +#: usr/local/www/services_captiveportal.php:906 +#: usr/local/www/services_captiveportal.php:940 +#: usr/local/www/services_captiveportal.php:954 +#: usr/local/www/services_captiveportal.php:908 +#: usr/local/www/services_captiveportal.php:942 +#: usr/local/www/services_captiveportal.php:956 +#: usr/local/www/services_captiveportal.php:924 +#: usr/local/www/services_captiveportal.php:972 +#: usr/local/www/services_captiveportal.php:924 +#: usr/local/www/services_captiveportal.php:958 +#: usr/local/www/services_captiveportal.php:972 +msgid "View current page" +msgstr "ç¾åœ¨ã®ãƒšãƒ¼ã‚¸ã‚’表示" + +#: usr/local/www/services_captiveportal.php:871 +#: usr/local/www/services_captiveportal.php:916 +#: usr/local/www/services_captiveportal.php:912 +#: usr/local/www/services_captiveportal.php:914 +#: usr/local/www/services_captiveportal.php:930 +#: usr/local/www/services_captiveportal.php:930 +#, php-format +msgid "" +"Upload an HTML/PHP file for the portal page here (leave blank to keep the " +"current one). Make sure to include a form (POST to %1$s) with a submit " +"button (%2$s) and a hidden field with %3$s and %4$s. Include the %5$s and " +"%6$s and/or %7$s input fields if authentication is enabled, otherwise it " +"will always fail." +msgstr "「 (ç¾åœ¨ã®1ã«ä¿ã¤ãŸã‚ã«ã€ç©ºç™½ã®ã¾ã¾ã«ï¼‰ã“ã“ã§ã€ãƒãƒ¼ã‚¿ãƒ«Â·ãƒšãƒ¼ã‚¸ã®HTML / PHPファイルã®ã‚¢ãƒƒãƒ—ロード〠。é€ä¿¡ã€ãƒœã‚¿ãƒ³ï¼ˆ %2$s )をæŒã¤ãƒ•ォーム(ã¯%1$sã«å¯¾ã—ã¦POST )㨠$ S %3$sãŠã‚ˆã³ï¼… 4ã§éš ã—フィールドãŒå«ã¾ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ãŒã€‚ $ S ï¼… 5ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ "èªè¨¼ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ï¼… 6 $ sãŠã‚ˆã³/ã¾ãŸã¯ï¼… 7 $ sã®å…¥åŠ›ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ ã€ãれ以外ã®å ´åˆã¯ã€ã€Œå¸¸ã«å¤±æ•—ã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:882 +#: usr/local/www/services_captiveportal.php:927 +#: usr/local/www/services_captiveportal.php:923 +#: usr/local/www/services_captiveportal.php:925 +#: usr/local/www/services_captiveportal.php:941 +#: usr/local/www/services_captiveportal.php:941 +msgid "Example code for the form:" +msgstr "フォームã®ã‚µãƒ³ãƒ—ルコード:" + +#: usr/local/www/services_captiveportal.php:894 +#: usr/local/www/services_captiveportal.php:939 +#: usr/local/www/services_captiveportal.php:935 +#: usr/local/www/services_captiveportal.php:937 +#: usr/local/www/services_captiveportal.php:953 +#: usr/local/www/services_captiveportal.php:953 +msgid "error page" +msgstr "エラーページ" + +#: usr/local/www/services_captiveportal.php:895 +#: usr/local/www/services_captiveportal.php:909 +#: usr/local/www/services_captiveportal.php:940 +#: usr/local/www/services_captiveportal.php:954 +#: usr/local/www/services_captiveportal.php:936 +#: usr/local/www/services_captiveportal.php:950 +#: usr/local/www/services_captiveportal.php:938 +#: usr/local/www/services_captiveportal.php:952 +#: usr/local/www/services_captiveportal.php:968 +#: usr/local/www/services_captiveportal.php:954 +#: usr/local/www/services_captiveportal.php:968 +msgid "contents" +msgstr "中身" + +#: usr/local/www/services_captiveportal.php:903 +#: usr/local/www/services_captiveportal.php:948 +#: usr/local/www/services_captiveportal.php:944 +#: usr/local/www/services_captiveportal.php:946 +#: usr/local/www/services_captiveportal.php:962 +#: usr/local/www/services_captiveportal.php:962 +msgid "" +"The contents of the HTML/PHP file that you upload here are displayed when an " +"authentication error occurs. You may include" +msgstr "èªè¨¼ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã€ã—ãŸã¨ãã«ã€ã“ã“ã§ã‚¢ãƒƒãƒ—ロードã—ãŸHTML / PHPファイルã®å†…容ãŒè¡¨ç¤ºã•れã¾ã™ã€ 。ã‚ãªãŸãŒå«ã¾ã‚Œã‚‹" + +#: usr/local/www/services_captiveportal.php:904 +#: usr/local/www/services_captiveportal.php:949 +#: usr/local/www/services_captiveportal.php:945 +#: usr/local/www/services_captiveportal.php:947 +#: usr/local/www/services_captiveportal.php:963 +#: usr/local/www/services_captiveportal.php:963 +msgid "" +"which will be replaced by the error or reply messages from the RADIUS " +"server, if any." +msgstr ""ã©ã®ã‚¨ãƒ©ãƒ¼ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã‹RADIUSã‹ã‚‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®è¿”ä¿¡ã€ãŒã‚れã°ã€ã‚µãƒ¼ãƒã€‚" + +#: usr/local/www/services_captiveportal.php:907 usr/local/www/fbegin.inc:86 +#: usr/local/www/fbegin.inc:103 usr/local/www/services_captiveportal.php:952 +#: usr/local/www/fbegin.inc:112 usr/local/www/services_captiveportal.php:948 +#: usr/local/www/services_captiveportal.php:950 usr/local/www/fbegin.inc:104 +#: usr/local/www/services_captiveportal.php:966 +#: usr/local/www/services_captiveportal.php:966 usr/local/www/fbegin.inc:104 +msgid "Logout" +msgstr "ログアウト" + +#: usr/local/www/services_captiveportal.php:917 +#: usr/local/www/services_captiveportal.php:962 +#: usr/local/www/services_captiveportal.php:958 +#: usr/local/www/services_captiveportal.php:960 +#: usr/local/www/services_captiveportal.php:976 +#: usr/local/www/services_captiveportal.php:976 +msgid "" +"The contents of the HTML/PHP file that you upload here are displayed on " +"authentication success when the logout popup is enabled." +msgstr "ログアウトãƒãƒƒãƒ—ã‚¢ãƒƒãƒ—ãŒæœ‰åйãªå ´åˆã«èªè¨¼æˆåŠŸã€ã¯ã€ã“ã“ã§ã‚¢ãƒƒãƒ—ロードã—ãŸHTML / PHPファイルã®å†…容ãŒä¸Šã«è¡¨ç¤ºã•れる"。" + +#: usr/local/www/services_captiveportal.php:930 +#: usr/local/www/services_captiveportal.php:975 +#: usr/local/www/services_captiveportal.php:971 +#: usr/local/www/services_captiveportal.php:973 +#: usr/local/www/services_captiveportal.php:989 +#: usr/local/www/services_captiveportal.php:989 +msgid "" +"Changing any settings on this page will disconnect all clients! Don't forget " +"to enable the DHCP server on your captive portal interface! Make sure that " +"the default/maximum DHCP lease time is higher than the timeout entered on " +"this page. Also, the DNS forwarder needs to be enabled for DNS lookups by " +"unauthenticated clients to work." +msgstr "「ã“ã®ãƒšãƒ¼ã‚¸ã®è¨­å®šã‚’変更ã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒåˆ‡æ–­ã•れã¾ã™ã€‚ ï¼å¿˜ã‚Œã¦ã¯ã„ã‘ãªã„"ã‚ãªãŸã®ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚¤ãƒ³ã‚¿ãƒ•ェース 上ã®DHCPサーãƒã‚’有効ã«ã™ã‚‹ãŸã‚ã«ï¼ã“ã®ãƒšãƒ¼ã‚¸ã®ã€Œãƒ‡ãƒ•ォルト/最大DHCPリース時間ãŒã§å…¥åŠ›ã•れãŸã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚ˆã‚Šã‚‚高ããªã£ã¦ã„ã‚‹ã€ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ã¾ãŸã€ DNSフォワーダãŒå‹•作ã™ã‚‹ã‚ˆã†ã«èªè¨¼ã•れã¦ã„ãªã„クライアントã€ã§DNSルックアップを有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal_filemanager.php:101 +#: usr/local/www/services_captiveportal_filemanager.php:98 +#: usr/local/www/services_captiveportal_filemanager.php:98 +#, php-format +msgid "A file with the name '%s' already exists." +msgstr "å' %s'ã‚’æŒã¤ãƒ•ァイルãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal_filemanager.php:108 +#: usr/local/www/services_captiveportal_filemanager.php:105 +#: usr/local/www/services_captiveportal_filemanager.php:105 +msgid "The total size of all files uploaded may not exceed " +msgstr "アップロードã•れãŸã™ã¹ã¦ã®ãƒ•ァイルã®åˆè¨ˆã‚µã‚¤ã‚ºãŒè¶…ãˆã¦ã¯ãªã‚‰ãªã„" + +#: usr/local/www/services_captiveportal_filemanager.php:163 +#: usr/local/www/system_firmware_restorefullbackup.php:141 +#: usr/local/www/services_captiveportal_filemanager.php:160 +#: usr/local/www/diag_system_pftop.php:140 +#: usr/local/www/diag_system_pftop.php:159 +#: usr/local/www/diag_system_pftop.php:140 +#: usr/local/www/diag_system_pftop.php:159 +#: usr/local/www/services_captiveportal_filemanager.php:160 +#: usr/local/www/system_firmware_restorefullbackup.php:141 +msgid "Size" +msgstr "サイズ" + +#: usr/local/www/services_captiveportal_filemanager.php:168 +#: usr/local/www/services_captiveportal_filemanager.php:207 +#: usr/local/www/services_captiveportal_filemanager.php:165 +#: usr/local/www/services_captiveportal_filemanager.php:204 +#: usr/local/www/services_captiveportal_filemanager.php:165 +#: usr/local/www/services_captiveportal_filemanager.php:204 +msgid "add file" +msgstr "ファイルを追加" + +#: usr/local/www/services_captiveportal_filemanager.php:179 +#: usr/local/www/services_captiveportal_filemanager.php:176 +#: usr/local/www/services_captiveportal_filemanager.php:176 +msgid "Do you really want to delete this file?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ•ァイルを削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/services_captiveportal_filemanager.php:179 +#: usr/local/www/services_captiveportal_filemanager.php:176 +#: usr/local/www/services_captiveportal_filemanager.php:176 +msgid "delete file" +msgstr "ファイルを削除ã™ã‚‹" + +#: usr/local/www/services_captiveportal_filemanager.php:186 +#: usr/local/www/services_captiveportal_filemanager.php:183 +#: usr/local/www/services_captiveportal_filemanager.php:183 +msgid "TOTAL" +msgstr "åˆè¨ˆ" + +#: usr/local/www/services_captiveportal_filemanager.php:197 +#: usr/local/www/services_captiveportal_filemanager.php:194 +#: usr/local/www/services_captiveportal_filemanager.php:194 +msgid "cancel" +msgstr "キャンセル" + +#: usr/local/www/services_captiveportal_filemanager.php:217 +#: usr/local/www/services_captiveportal_filemanager.php:214 +#: usr/local/www/services_captiveportal_filemanager.php:214 +msgid "" +"Any files that you upload here with the filename prefix of captiveportal- " +"will be made available in the root directory of the captive portal HTTP(S) " +"server. You may reference them directly from your portal page HTML code " +"using relative paths. Example: you've uploaded an image with the name " +"'captiveportal-test.jpg' using the file manager. Then you can include it in " +"your portal page like this:" +msgstr "「ã‚ãªãŸãŒãƒ•ァイルåã®æŽ¥é ­è¾žã§ã€ã“ã“ã§ã‚¢ãƒƒãƒ—ロードã—ãŸã™ã¹ã¦ã®ãƒ•ァイルcaptiveportal -ã€ã¯ã€Œ 。サーãƒãƒ¼ã¯ã€ãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã®HTMLコードã‹ã‚‰ç›´æŽ¥å‚ç…§ã™ã‚‹ã“ã¨ãŒã§ãる「キャプティブãƒãƒ¼ã‚¿ãƒ«HTTP(S)ã®ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ä½¿ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ç›¸å¯¾ãƒ‘スを使用ã—ãŸã€‚例:åå‰ã®ç”»åƒã‚¢ãƒƒãƒ—ロードã—ãŸã“ã®ã‚ˆã†ãªãƒãƒ¼ã‚¿ãƒ«Â·ãƒšãƒ¼ã‚¸ã€Œãƒ•ァイルマãƒãƒ¼ã‚¸ãƒ£ã‚’使ã£ã¦' captiveportal - test.jpgã¨ã„ã†ã®'次ã«ã€ãれをå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 〠:" + +#: usr/local/www/services_captiveportal_filemanager.php:224 +#: usr/local/www/services_captiveportal_filemanager.php:221 +#: usr/local/www/services_captiveportal_filemanager.php:221 +msgid "" +"In addition, you can also upload .php files for execution. You can pass the " +"filename to your custom page from the initial page by using text similar to:" +msgstr "「加ãˆã¦ã€ã¾ãŸã‚¢ãƒƒãƒ—ロードã§ãã‚‹PHPファイルを実行ã™ã‚‹ãŸã‚ã«ã‚ãªãŸãŒæ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ ã€ã®ã‚ˆã†ãªãƒ†ã‚­ã‚¹ãƒˆã‚’使ã£ã¦ã€æœ€åˆã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ã‚«ã‚¹ã‚¿ãƒ ãƒšãƒ¼ã‚¸ã«ãƒ•ァイルåを。" + +#: usr/local/www/services_captiveportal_filemanager.php:227 +#: usr/local/www/services_captiveportal_filemanager.php:224 +#: usr/local/www/services_captiveportal_filemanager.php:224 +msgid "Acceptable usage policy" +msgstr "許容å¯èƒ½ãªä½¿ç”¨ãƒãƒªã‚·ãƒ¼" + +#: usr/local/www/services_captiveportal_filemanager.php:229 +#: usr/local/www/services_captiveportal_filemanager.php:226 +#: usr/local/www/services_captiveportal_filemanager.php:226 +#, php-format +msgid "The total size limit for all files is %s." +msgstr "ã™ã¹ã¦ã®ãƒ•ァイルã®åˆè¨ˆã‚µã‚¤ã‚ºã®åˆ¶é™ã¯%s.ã§ã™" + +#: usr/local/www/diag_limiter_info.php:46 +#: usr/local/www/diag_limiter_info.php:46 +msgid "Diagnostics: Limiter Info" +msgstr "診断:リミッター情報" + +#: usr/local/www/diag_limiter_info.php:108 +#: usr/local/www/diag_limiter_info.php:109 +#: usr/local/www/diag_limiter_info.php:109 +msgid "Gathering Limiter information, please wait..." +msgstr "リミッター情報をåŽé›†ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." + +#: usr/local/www/firewall_nat.php:197 usr/local/www/firewall_nat.php:202 +#: usr/local/www/firewall_nat.php:205 usr/local/www/firewall_nat.php:205 +msgid "Src. addr" +msgstr "SRC 。 ADDR" + +#: usr/local/www/firewall_nat.php:198 usr/local/www/firewall_nat.php:203 +#: usr/local/www/firewall_nat.php:206 usr/local/www/firewall_nat.php:206 +msgid "Src. ports" +msgstr "SRC 。ãƒãƒ¼ãƒˆ" + +#: usr/local/www/firewall_nat.php:199 usr/local/www/firewall_nat.php:204 +#: usr/local/www/firewall_nat.php:207 usr/local/www/firewall_nat.php:207 +msgid "Dest. addr" +msgstr "DEST 。 ADDR" + +#: usr/local/www/firewall_nat.php:200 usr/local/www/firewall_nat.php:205 +#: usr/local/www/firewall_nat.php:208 usr/local/www/firewall_nat.php:208 +msgid "Dest. ports" +msgstr "DEST 。ãƒãƒ¼ãƒˆ" + +#: usr/local/www/firewall_nat.php:201 usr/local/www/firewall_nat.php:206 +#: usr/local/www/firewall_nat.php:209 usr/local/www/firewall_nat.php:209 +msgid "NAT IP" +msgstr "NAT IP" + +#: usr/local/www/firewall_nat.php:202 usr/local/www/firewall_nat.php:207 +#: usr/local/www/firewall_nat.php:210 usr/local/www/firewall_nat.php:210 +msgid "NAT Ports" +msgstr "NATã®ãƒãƒ¼ãƒˆ" + +#: usr/local/www/firewall_nat.php:252 usr/local/www/firewall_nat.php:265 +#: usr/local/www/firewall_nat.php:268 usr/local/www/firewall_nat.php:268 +msgid "All traffic matching this NAT entry is passed" +msgstr "ã“ã®NATエントリã«ä¸€è‡´ã™ã‚‹ã™ã¹ã¦ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒæ¸¡ã•れã¾ã™" + +#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267 +#: usr/local/www/firewall_nat.php:270 usr/local/www/firewall_nat.php:270 +msgid "Firewall rule ID" +msgstr "ファイアウォールã®ãƒ«ãƒ¼ãƒ«ID" + +#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267 +#: usr/local/www/firewall_nat.php:270 usr/local/www/firewall_nat.php:270 +msgid "is managed with this rule" +msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã§ç®¡ç†ã•れã¦ã„ã‚‹" + +#: usr/local/www/firewall_nat.php:313 usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326 +#: usr/local/www/firewall_nat_out.php:448 +#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:329 +#: usr/local/www/firewall_nat_out.php:454 usr/local/www/firewall_nat.php:329 +#: usr/local/www/firewall_nat_out.php:454 +msgid "Do you really want to delete this rule?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/firewall_nat.php:349 usr/local/www/firewall_nat.php:362 +#: usr/local/www/firewall_nat.php:365 usr/local/www/firewall_nat.php:365 +msgid "linked rule" +msgstr "リンクã•れãŸãƒ«ãƒ¼ãƒ«" + +#: usr/local/www/diag_ipsec.php:78 usr/local/www/diag_ipsec_sad.php:73 +#: usr/local/www/diag_ipsec_spd.php:72 usr/local/www/diag_ipsec.php:88 +#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec_sad.php:74 +#: usr/local/www/diag_ipsec_spd.php:73 usr/local/www/diag_ipsec.php:91 +#: usr/local/www/diag_ipsec.php:91 usr/local/www/diag_ipsec_spd.php:73 +#: usr/local/www/diag_ipsec_sad.php:74 +msgid "Overview" +msgstr "概è¦" + +#: usr/local/www/diag_ipsec.php:79 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/diag_ipsec_sad.php:74 usr/local/www/diag_ipsec_spd.php:73 +#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec.php:90 +#: usr/local/www/diag_ipsec_sad.php:75 usr/local/www/diag_ipsec_spd.php:74 +#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec.php:92 +#: usr/local/www/diag_ipsec_spd.php:74 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/diag_ipsec_sad.php:75 +msgid "SAD" +msgstr "SAD" + +#: usr/local/www/diag_ipsec.php:80 usr/local/www/diag_ipsec_sad.php:75 +#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_ipsec_spd.php:74 +#: usr/local/www/diag_ipsec.php:90 usr/local/www/diag_ipsec.php:91 +#: usr/local/www/diag_ipsec_sad.php:76 usr/local/www/diag_ipsec_spd.php:75 +#: usr/local/www/diag_ipsec.php:93 usr/local/www/diag_ipsec.php:93 +#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_ipsec_spd.php:75 +#: usr/local/www/diag_ipsec_sad.php:76 +msgid "SPD" +msgstr "SPD" + +#: usr/local/www/diag_ipsec.php:81 usr/local/www/diag_ipsec_sad.php:76 +#: usr/local/www/diag_ipsec_spd.php:75 usr/local/www/diag_ipsec.php:91 +#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec_sad.php:77 +#: usr/local/www/diag_ipsec_spd.php:76 usr/local/www/diag_ipsec.php:94 +#: usr/local/www/diag_ipsec.php:94 usr/local/www/diag_ipsec_spd.php:76 +#: usr/local/www/diag_ipsec_sad.php:77 +msgid "Logs" +msgstr "ログ" + +#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec.php:103 +#: usr/local/www/diag_ipsec.php:104 usr/local/www/diag_ipsec.php:106 +#: usr/local/www/diag_ipsec.php:106 +msgid "Remote IP" +msgstr "リモートIP" + +#: usr/local/www/diag_ipsec.php:93 usr/local/www/vpn_ipsec_phase2.php:419 +#: usr/local/www/diag_ipsec.php:104 usr/local/www/vpn_ipsec_phase2.php:445 +#: usr/local/www/diag_ipsec.php:105 usr/local/www/vpn_ipsec_phase2.php:511 +#: usr/local/www/diag_ipsec.php:107 usr/local/www/vpn_ipsec_phase2.php:533 +#: usr/local/www/diag_ipsec.php:107 usr/local/www/vpn_ipsec_phase2.php:533 +msgid "Local Network" +msgstr "ローカルãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/diag_ipsec.php:94 usr/local/www/vpn_ipsec_phase2.php:461 +#: usr/local/www/vpn_openvpn_client.php:762 +#: usr/local/www/vpn_openvpn_server.php:1055 usr/local/www/diag_ipsec.php:105 +#: usr/local/www/vpn_openvpn_server.php:1197 +#: usr/local/www/vpn_ipsec_phase2.php:487 +#: usr/local/www/vpn_openvpn_client.php:767 usr/local/www/diag_ipsec.php:106 +#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/diag_ipsec.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:610 usr/local/www/diag_ipsec.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:610 +msgid "Remote Network" +msgstr "é éš”ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/diag_ipsec.php:165 usr/local/www/diag_ipsec_sad.php:135 +#: usr/local/www/diag_ipsec_spd.php:144 usr/local/www/diag_ipsec_sad.php:136 +#: usr/local/www/diag_ipsec_spd.php:145 usr/local/www/diag_ipsec_spd.php:145 +#: usr/local/www/diag_ipsec_sad.php:136 +msgid "You can configure your IPsec" +msgstr "ã‚ãªãŸã®IPsecを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/diag_ipsec_sad.php:90 usr/local/www/diag_ipsec_sad.php:91 +#: usr/local/www/diag_ipsec_sad.php:91 +msgid "SPI" +msgstr "SPI" + +#: usr/local/www/diag_ipsec_sad.php:91 usr/local/www/diag_ipsec_sad.php:92 +#: usr/local/www/diag_ipsec_sad.php:92 +msgid "Enc. alg." +msgstr "ENC 。 ALG 。" + +#: usr/local/www/diag_ipsec_sad.php:92 usr/local/www/diag_ipsec_sad.php:93 +#: usr/local/www/diag_ipsec_sad.php:93 +msgid "Auth. alg." +msgstr "èªè¨¼ã€‚ ALG 。" + +#: usr/local/www/diag_ipsec_sad.php:93 usr/local/www/diag_ipsec_sad.php:94 +#: usr/local/www/diag_ipsec_sad.php:94 +msgid "Data" +msgstr "データ" + +#: usr/local/www/diag_ipsec_sad.php:112 usr/local/www/diag_ipsec_sad.php:113 +#: usr/local/www/diag_ipsec_sad.php:113 +msgid "Do you really want to delete this security association?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚¢ã‚½ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/diag_ipsec_sad.php:121 usr/local/www/diag_ipsec_sad.php:122 +#: usr/local/www/diag_ipsec_sad.php:122 +msgid "No IPsec security associations." +msgstr "ã„ã„ãˆIPsecセキュリティアソシエーションã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal_ip.php:123 +#: usr/local/www/services_captiveportal_ip.php:163 +#: usr/local/www/services_captiveportal_hostname.php:128 +#: usr/local/www/services_captiveportal_hostname.php:164 +#: usr/local/www/services_captiveportal_ip.php:121 +#: usr/local/www/services_captiveportal_ip.php:161 +#: usr/local/www/services_captiveportal_hostname.php:126 +#: usr/local/www/services_captiveportal_hostname.php:162 +#: usr/local/www/services_captiveportal_ip.php:121 +#: usr/local/www/services_captiveportal_ip.php:161 +#: usr/local/www/services_captiveportal_hostname.php:126 +#: usr/local/www/services_captiveportal_hostname.php:162 +msgid "add address" +msgstr "アドレスを追加" + +#: usr/local/www/services_captiveportal_ip.php:153 +#: usr/local/www/services_captiveportal_hostname.php:154 +#: usr/local/www/services_captiveportal_ip.php:151 +#: usr/local/www/services_captiveportal_hostname.php:152 +#: usr/local/www/services_captiveportal_ip.php:151 +#: usr/local/www/services_captiveportal_hostname.php:152 +msgid "edit address" +msgstr "編集アドレス" + +#: usr/local/www/services_captiveportal_ip.php:154 +#: usr/local/www/services_captiveportal_hostname.php:155 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +msgid "Do you really want to delete this address?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/services_captiveportal_ip.php:154 +#: usr/local/www/services_captiveportal_hostname.php:155 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +msgid "delete address" +msgstr "アドレスを削除" + +#: usr/local/www/services_captiveportal_ip.php:172 +#: usr/local/www/services_captiveportal_ip.php:170 +#: usr/local/www/services_captiveportal_ip.php:170 +msgid "" +"Adding allowed IP addresses will allow IP access to/from these addresses " +"through the captive portal without being taken to the portal page. This can " +"be used for a web server serving images for the portal page or a DNS server " +"on another network, for example. By specifying from addresses, it " +"may be used to always allow pass-through access from a client behind the " +"captive portal." +msgstr "ãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã«é€£ã‚Œã¦è¡Œã‹ã‚Œã‚‹ã“ã¨ãªãã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚’介ã—ã¦ã€Œè¨±å¯ã™ã‚‹IPアドレスを追加ã™ã‚‹ã¨ã€ã™ã‚‹/ã“れらã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã‚‰ã®IPアクセスを許å¯ã—ã¾ã™ã€ 。ã“れã¯ã€ä¾‹ãˆã°ã€åˆ¥ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã®ã€Œ Webサーãƒãƒ¼ãŒãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã¾ãŸã¯DNSサーãƒãƒ¼ç”¨ã®ç”»åƒã‚’æä¾›ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹"ã“ã¨ãŒã§ãã¾ã™ã€‚ u003c/ emu003eã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã‚‰ã®u003cemu003e指定ã™ã‚‹ã“ã¨ã§ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã€ã¯ã€å¸¸ã«èƒŒå¾Œã«ã‚るクライアントã‹ã‚‰ã®ãƒ‘ススルーã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ãŸã‚ã«ç”¨ã„ã‚‹ã“ã¨ãŒã§ãる〠。" + +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "All connections" +msgstr "ã™ã¹ã¦ã®æŽ¥ç¶š" + +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +msgid "the IP address are allowed" +msgstr "IPアドレスã¯è¨±å¯ã•れã¦ã„" + +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:182 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "from" +msgstr "ã‹ã‚‰" + +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +msgid "Edit allowed IP address" +msgstr "編集ã¯è¨±å¯ã•れãŸIPアドレス" + +#: usr/local/www/services_captiveportal_ip_edit.php:102 +#: usr/local/www/services_captiveportal_ip_edit.php:100 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +msgid "Allowed IP address" +msgstr "許å¯ã•れãŸIPアドレス" + +#: usr/local/www/services_captiveportal_ip_edit.php:110 +#: usr/local/www/services_captiveportal_mac_edit.php:108 +#: usr/local/www/services_captiveportal_hostname_edit.php:110 +#: usr/local/www/services_captiveportal_hostname_edit.php:108 +#: usr/local/www/services_captiveportal_mac_edit.php:106 +#: usr/local/www/services_captiveportal_ip_edit.php:108 +#: usr/local/www/services_captiveportal_ip_edit.php:110 +#: usr/local/www/services_captiveportal_hostname_edit.php:108 +#: usr/local/www/services_captiveportal_mac_edit.php:106 +msgid "Upload speed needs to be an integer" +msgstr "アップロード速度ã¯ã€æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹" + +#: usr/local/www/services_captiveportal_ip_edit.php:113 +#: usr/local/www/services_captiveportal_mac_edit.php:110 +#: usr/local/www/services_captiveportal_hostname_edit.php:112 +#: usr/local/www/services_captiveportal_hostname_edit.php:110 +#: usr/local/www/services_captiveportal_mac_edit.php:108 +#: usr/local/www/services_captiveportal_ip_edit.php:111 +#: usr/local/www/services_captiveportal_ip_edit.php:113 +#: usr/local/www/services_captiveportal_hostname_edit.php:110 +#: usr/local/www/services_captiveportal_mac_edit.php:108 +msgid "Download speed needs to be an integer" +msgstr "ダウンロード速度ã¯ã€æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹" + +#: usr/local/www/services_captiveportal_ip_edit.php:120 +#: usr/local/www/services_captiveportal_mac_edit.php:117 +#: usr/local/www/services_captiveportal_hostname_edit.php:119 +#: usr/local/www/services_captiveportal_hostname_edit.php:117 +#: usr/local/www/services_captiveportal_mac_edit.php:115 +#: usr/local/www/services_captiveportal_ip_edit.php:118 +#: usr/local/www/services_captiveportal_ip_edit.php:120 +#: usr/local/www/services_captiveportal_hostname_edit.php:117 +#: usr/local/www/services_captiveportal_mac_edit.php:115 +msgid "already allowed" +msgstr "æ—¢ã«è¨±å¯ã•れãŸ" + +#: usr/local/www/services_captiveportal_ip_edit.php:175 +#: usr/local/www/services_captiveportal_ip_edit.php:173 +#: usr/local/www/services_captiveportal_ip_edit.php:184 +#: usr/local/www/services_captiveportal_ip_edit.php:184 +msgid "Edit allowed ip rule" +msgstr "編集ã¯ã€IPルールを許å¯" + +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/system_gateways_edit.php:442 +#: usr/local/www/system_gateways_edit.php:454 +#: usr/local/www/system_gateways_edit.php:463 +#: usr/local/www/system_gateways_edit.php:475 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +#: usr/local/www/system_gateways_edit.php:569 +#: usr/local/www/system_gateways_edit.php:581 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +#: usr/local/www/system_gateways_edit.php:573 +#: usr/local/www/system_gateways_edit.php:585 +#: usr/local/www/system_gateways_edit.php:575 +#: usr/local/www/system_gateways_edit.php:587 +#: usr/local/www/system_gateways_edit.php:605 +#: usr/local/www/system_gateways_edit.php:617 +#: usr/local/www/system_gateways_edit.php:605 +#: usr/local/www/system_gateways_edit.php:617 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +msgid "From" +msgstr "ã‹ã‚‰" + +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/system_gateways_edit.php:445 +#: usr/local/www/system_gateways_edit.php:457 +#: usr/local/www/system_gateways_edit.php:466 +#: usr/local/www/system_gateways_edit.php:478 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +#: usr/local/www/system_gateways_edit.php:572 +#: usr/local/www/system_gateways_edit.php:584 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +#: usr/local/www/system_gateways_edit.php:576 +#: usr/local/www/system_gateways_edit.php:588 +#: usr/local/www/system_gateways_edit.php:578 +#: usr/local/www/system_gateways_edit.php:590 +#: usr/local/www/system_gateways_edit.php:608 +#: usr/local/www/system_gateways_edit.php:620 +#: usr/local/www/system_gateways_edit.php:608 +#: usr/local/www/system_gateways_edit.php:620 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +msgid "To" +msgstr "ã¸" + +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +msgid "Use" +msgstr "使用" + +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +msgid "" +"to always allow an IP address through the captive portal (without " +"authentication)" +msgstr "「 (èªè¨¼å¸¸æ™‚ãšã«ï¼‰ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚’使用ã—ã¦ã€IPアドレスを許å¯ã™ã‚‹ã«ã¯ã€ã€Œ" + +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +msgid "" +"to allow access from all clients (even non-authenticated ones) behind the " +"portal to this IP address" +msgstr "ã“ã®IPアドレスã«ãƒãƒ¼ã‚¿ãƒ«ã€ã®èƒŒå¾Œã«ã‚ã‚‹ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆï¼ˆãŸã¨ãˆéžèªè¨¼ã®ã‚‚ã®ï¼‰ã‹ã‚‰ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã‚ˆã†ã«ã€" + +#: usr/local/www/services_captiveportal_ip_edit.php:204 +#: usr/local/www/services_captiveportal_ip_edit.php:202 +#: usr/local/www/services_captiveportal_ip_edit.php:196 +#: usr/local/www/services_captiveportal_ip_edit.php:196 +msgid "IP address and subnet mask. Use /32 for a single IP" +msgstr "IPアドレスã¨ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã€‚å˜ä¸€ã®IPã®ãŸã‚ã«/ 32を使用ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_captiveportal_ip_edit.php:215 +#: usr/local/www/services_captiveportal_mac_edit.php:189 +#: usr/local/www/services_captiveportal_hostname_edit.php:189 +#: usr/local/www/services_captiveportal_hostname_edit.php:187 +#: usr/local/www/services_captiveportal_mac_edit.php:187 +#: usr/local/www/services_captiveportal_ip_edit.php:213 +#: usr/local/www/services_captiveportal_ip_edit.php:207 +#: usr/local/www/services_captiveportal_mac_edit.php:200 +#: usr/local/www/services_captiveportal_ip_edit.php:207 +#: usr/local/www/services_captiveportal_hostname_edit.php:189 +#: usr/local/www/services_captiveportal_mac_edit.php:200 +msgid "Bandwidth up" +msgstr "最大帯域幅" + +#: usr/local/www/services_captiveportal_ip_edit.php:218 +#: usr/local/www/services_captiveportal_ip_edit.php:216 +#: usr/local/www/services_captiveportal_ip_edit.php:210 +#: usr/local/www/services_captiveportal_ip_edit.php:210 +msgid "Enter a upload limit to be enforced on this IP address in Kbit/s" +msgstr "キロビット/ç§’ã§ã€ã“ã®IPアドレスã«é©ç”¨ã•れるアップロード制é™ã‚’入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_captiveportal_ip_edit.php:222 +#: usr/local/www/services_captiveportal_mac_edit.php:195 +#: usr/local/www/services_captiveportal_hostname_edit.php:195 +#: usr/local/www/services_captiveportal_hostname_edit.php:193 +#: usr/local/www/services_captiveportal_mac_edit.php:193 +#: usr/local/www/services_captiveportal_ip_edit.php:220 +#: usr/local/www/services_captiveportal_ip_edit.php:214 +#: usr/local/www/services_captiveportal_mac_edit.php:206 +#: usr/local/www/services_captiveportal_ip_edit.php:214 +#: usr/local/www/services_captiveportal_hostname_edit.php:195 +#: usr/local/www/services_captiveportal_mac_edit.php:206 +msgid "Bandwidth down" +msgstr "ダウン帯域幅" + +#: usr/local/www/services_captiveportal_ip_edit.php:225 +#: usr/local/www/services_captiveportal_ip_edit.php:223 +#: usr/local/www/services_captiveportal_ip_edit.php:217 +#: usr/local/www/services_captiveportal_ip_edit.php:217 +msgid "Enter a download limit to be enforced on this IP address in Kbit/s" +msgstr "キロビット/ç§’ã§ã®ã“ã®IPã‚¢ãƒ‰ãƒ¬ã‚¹ã«æ–½è¡Œã•れるよã†ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰åˆ¶é™ã‚’入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_captiveportal_mac.php:80 +#: usr/local/www/services_captiveportal_mac.php:78 +#: usr/local/www/services_captiveportal_mac.php:78 +msgid "No entry exists yet!" +msgstr "エントリãŒã¾ã å­˜åœ¨ã—ã¾ã›ã‚“ ï¼" + +#: usr/local/www/services_captiveportal_mac.php:84 +#: usr/local/www/services_captiveportal_mac.php:82 +#: usr/local/www/services_captiveportal_mac.php:82 +msgid "Please set the zone on which the operation should be allowed" +msgstr "æ“作ãŒè¨±å¯ã•れるã¹ãã‹ã«ã‚¾ãƒ¼ãƒ³ã‚’設定ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_captiveportal_mac.php:96 +#: usr/local/www/services_captiveportal_mac.php:94 +#: usr/local/www/services_captiveportal_mac.php:94 +msgid "No entry exists for this username:" +msgstr "エントリãŒã“ã®ãƒ¦ãƒ¼ã‚¶åã¯å­˜åœ¨ã—ã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal_mac.php:115 +#: usr/local/www/services_captiveportal_mac.php:113 +#: usr/local/www/services_captiveportal_mac.php:118 +#: usr/local/www/services_captiveportal_mac.php:118 +msgid "The entry was sucessfully deleted" +msgstr "エントリã¯sucessfully削除ã•れãŸ" + +#: usr/local/www/services_captiveportal_mac.php:117 +#: usr/local/www/services_captiveportal_mac.php:115 +#: usr/local/www/services_captiveportal_mac.php:120 +#: usr/local/www/services_captiveportal_mac.php:120 +msgid "No entry exists for this mac address:" +msgstr "エントリãŒã“ã®MACアドレスã¯å­˜åœ¨ã—ã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal_mac.php:148 +#: usr/local/www/services_captiveportal_mac.php:146 +#: usr/local/www/services_captiveportal_mac.php:156 +#: usr/local/www/services_captiveportal_mac.php:156 +msgid "" +"The captive portal MAC address configuration has been changed.
    You must " +"apply the changes in order for them to take effect." +msgstr "「キャプティブãƒãƒ¼ã‚¿ãƒ«ã®MACアドレスã®è¨­å®šãŒå¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚ã‚ãªãŸãŒã—ãªã‘れã°ãªã‚‰ãªã„ãƒã‚¹ã‚¿ãƒ¼ã€Œãれらを有効ã«ã™ã‚‹ãŸã‚ã«å¤‰æ›´ã‚’é©ç”¨ã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal_mac.php:180 +#: usr/local/www/services_captiveportal_mac.php:178 +#: usr/local/www/services_captiveportal_mac.php:188 +#: usr/local/www/services_captiveportal_mac.php:188 +msgid "edit host" +msgstr "編集ホスト" + +#: usr/local/www/services_captiveportal_mac.php:181 +#: usr/local/www/services_dnsmasq.php:276 +#: usr/local/www/services_unbound.php:312 +#: usr/local/www/services_dnsmasq.php:277 +#: usr/local/www/services_captiveportal_mac.php:179 +#: usr/local/www/services_dnsmasq.php:302 +#: usr/local/www/services_captiveportal_mac.php:189 +#: usr/local/www/services_dnsmasq.php:315 +#: usr/local/www/services_dnsmasq.php:379 +#: usr/local/www/services_dnsmasq.php:379 +#: usr/local/www/services_captiveportal_mac.php:189 +msgid "Do you really want to delete this host?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ›ã‚¹ãƒˆã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/services_captiveportal_mac.php:181 +#: usr/local/www/services_captiveportal_mac.php:179 +#: usr/local/www/services_captiveportal_mac.php:189 +#: usr/local/www/services_captiveportal_mac.php:189 +msgid "delete host" +msgstr "ホストを削除ã™ã‚‹" + +#: usr/local/www/services_captiveportal_mac.php:186 +#: usr/local/www/services_captiveportal_mac.php:184 +#: usr/local/www/services_captiveportal_mac.php:194 +#: usr/local/www/services_captiveportal_mac.php:194 +msgid "add host" +msgstr "ホストを追加" + +#: usr/local/www/services_captiveportal_mac.php:192 +#: usr/local/www/services_captiveportal_mac.php:190 +#: usr/local/www/services_captiveportal_mac.php:200 +#: usr/local/www/services_captiveportal_mac.php:200 +msgid "" +"Adding MAC addresses as pass-through MACs allows them access through the " +"captive portal automatically without being taken to the portal page." +msgstr "ãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã«é€£ã‚Œã¦è¡Œã‹ã‚Œã‚‹ã“ã¨ãªãã€è‡ªå‹•çš„ã«ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã€Œé€šéŽã®MACã¯ã‚’通ã—ã¦å½¼ã‚‰ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã‚ˆã†ã«MACアドレスを追加ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" + +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +msgid "Edit pass-through MAC address" +msgstr "パススルーã®MACアドレスを編集" + +#: usr/local/www/services_captiveportal_mac_edit.php:105 +#: usr/local/www/services_captiveportal_mac_edit.php:103 +#: usr/local/www/services_captiveportal_mac_edit.php:103 +msgid "A valid MAC address must be specified" +msgstr "有効ãªMACアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/services_captiveportal_mac_edit.php:172 +#: usr/local/www/services_captiveportal_mac_edit.php:170 +#: usr/local/www/services_captiveportal_mac_edit.php:177 +#: usr/local/www/services_captiveportal_mac_edit.php:177 +msgid "Edit Pass-through MAC address" +msgstr "編集パススルーMACアドレス" + +#: usr/local/www/services_captiveportal_mac_edit.php:179 +#: usr/local/www/services_captiveportal_mac_edit.php:177 +#: usr/local/www/services_captiveportal_mac_edit.php:190 +#: usr/local/www/services_captiveportal_mac_edit.php:190 +msgid "MAC address (6 hex octets separated by colons)" +msgstr "MACアドレス( 6進オクテットコロンã§åŒºåˆ‡ã‚‰ã‚ŒãŸï¼‰" + +#: usr/local/www/services_captiveportal_mac_edit.php:192 +#: usr/local/www/services_captiveportal_mac_edit.php:190 +#: usr/local/www/services_captiveportal_mac_edit.php:203 +#: usr/local/www/services_captiveportal_mac_edit.php:203 +msgid "Enter a upload limit to be enforced on this MAC address in Kbit/s" +msgstr "キロビット/ç§’ã§ã€ã“ã®MACã‚¢ãƒ‰ãƒ¬ã‚¹ã«æ–½è¡Œã•れるよã†ã«ã‚¢ãƒƒãƒ—ロード制é™ã‚’入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_captiveportal_mac_edit.php:198 +#: usr/local/www/services_captiveportal_mac_edit.php:196 +#: usr/local/www/services_captiveportal_mac_edit.php:209 +#: usr/local/www/services_captiveportal_mac_edit.php:209 +msgid "Enter a download limit to be enforced on this MAC address in Kbit/s" +msgstr "キロビット/ç§’ã§ã€ã“ã®MACã‚¢ãƒ‰ãƒ¬ã‚¹ã«æ–½è¡Œã•れるよã†ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰åˆ¶é™ã‚’入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/diag_ipsec_spd.php:90 usr/local/www/diag_ipsec_spd.php:91 +#: usr/local/www/diag_ipsec_spd.php:91 +msgid "Tunnel endpoints" +msgstr "トンãƒãƒ«ã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆ" + +#: usr/local/www/diag_ipsec_spd.php:108 usr/local/www/diag_ipsec_spd.php:109 +#: usr/local/www/diag_ipsec_spd.php:109 +msgid "Do you really want to delete this security policy?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒãƒªã‚·ãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/diag_ipsec_spd.php:119 usr/local/www/diag_ipsec_spd.php:120 +#: usr/local/www/diag_ipsec_spd.php:120 +msgid "incoming (as seen by firewall)" +msgstr "å…¥ã£ã¦ãる(ファイアウォールã§è¦‹ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ï¼‰" + +#: usr/local/www/diag_ipsec_spd.php:126 usr/local/www/diag_ipsec_spd.php:127 +#: usr/local/www/diag_ipsec_spd.php:127 +msgid "outgoing (as seen by firewall)" +msgstr "発信(ファイアウォールã§è¦‹ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ï¼‰" + +#: usr/local/www/diag_ipsec_spd.php:131 usr/local/www/diag_ipsec_spd.php:132 +#: usr/local/www/diag_ipsec_spd.php:132 +msgid "No IPsec security policies." +msgstr "ã„ã„ãˆIPsecセキュリティãƒãƒªã‚·ãƒ¼ã‚“。" + +#: usr/local/www/diag_ping.php:59 usr/local/www/diag_ping.php:61 +#: usr/local/www/diag_ping.php:61 +#, php-format +msgid "Count must be between 1 and %s" +msgstr "カウントã¯1ã¨%sã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: usr/local/www/diag_ping.php:126 usr/local/www/diag_ping.php:148 +#: usr/local/www/diag_ping.php:148 +msgid "Ping output" +msgstr "pingã®å‡ºåŠ›" + +#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcp.php:111 +msgid "" +"The DHCP Server can only be enabled on interfaces configured with static IP " +"addresses" +msgstr "アドレス「DHCPサーãƒãƒ¼ã¯ã€é™çš„IPアドレスã§è¨­å®šã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§æœ‰åйã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€" + +#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcpv6.php:74 +#: usr/local/www/services_router_advertisements.php:75 +#: usr/local/www/services_dhcpv6.php:75 +#: usr/local/www/services_router_advertisements.php:75 +#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcpv6.php:75 +msgid "Only interfaces configured with a static IP will be shown" +msgstr "é™çš„IPã§è¨­å®šã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã ã‘ãŒè¡¨ç¤ºã•れã¾ã™" + +#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177 +#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189 +#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +msgid "Range begin" +msgstr "範囲ã®é–‹å§‹" + +#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177 +#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189 +#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +msgid "Range end" +msgstr "範囲終了" + +#: usr/local/www/services_dhcp.php:212 usr/local/www/services_dhcp.php:214 +#: usr/local/www/services_dhcpv6.php:182 usr/local/www/services_dhcpv6.php:186 +#: usr/local/www/services_dhcpv6.php:188 usr/local/www/services_dhcp.php:213 +#: usr/local/www/services_dhcp.php:215 usr/local/www/services_dhcpv6.php:194 +#: usr/local/www/services_dhcpv6.php:198 usr/local/www/services_dhcpv6.php:200 +#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcp.php:261 +#: usr/local/www/services_dhcpv6.php:179 usr/local/www/services_dhcpv6.php:183 +#: usr/local/www/services_dhcpv6.php:185 usr/local/www/services_dhcp.php:240 +#: usr/local/www/services_dhcp.php:242 usr/local/www/services_dhcpv6.php:173 +#: usr/local/www/services_dhcpv6.php:177 usr/local/www/services_dhcp.php:240 +#: usr/local/www/services_dhcp.php:242 usr/local/www/services_dhcpv6.php:173 +#: usr/local/www/services_dhcpv6.php:177 usr/local/www/services_dhcpv6.php:179 +msgid "A valid range must be specified." +msgstr "有効ãªç¯„囲を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:216 usr/local/www/services_dhcp.php:217 +#: usr/local/www/services_dhcp.php:263 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/services_dhcp.php:244 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/services_dhcp.php:244 +msgid "A valid IP address must be specified for the gateway." +msgstr "有効ãªIPアドレスã¯ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:218 usr/local/www/services_dhcp.php:219 +#: usr/local/www/services_dhcp.php:265 +#: usr/local/www/services_dhcp_edit.php:209 +#: usr/local/www/services_dhcp.php:246 +#: usr/local/www/services_dhcp_edit.php:209 +#: usr/local/www/services_dhcp.php:246 +msgid "" +"A valid IP address must be specified for the primary/secondary WINS servers." +msgstr "「有効ãªIPアドレスã¯ã€ãƒ—ライマリ/セカンダリWINSサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:223 usr/local/www/services_dhcp.php:224 +#: usr/local/www/services_dhcp.php:270 +#: usr/local/www/services_dhcp_edit.php:215 +#: usr/local/www/services_dhcp.php:251 +#: usr/local/www/services_dhcp_edit.php:215 +#: usr/local/www/services_dhcp.php:251 +#, php-format +msgid "" +"The gateway address %s does not lie within the chosen interface's subnet." +msgstr "「ゲートウェイアドレス%sã¯ã€é¸æŠžã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ã‚µãƒ–ãƒãƒƒãƒˆå†…ã«ãªã„。" + +#: usr/local/www/services_dhcp.php:226 usr/local/www/services_dhcp.php:227 +#: usr/local/www/services_dhcp.php:273 +#: usr/local/www/services_dhcp_edit.php:218 +#: usr/local/www/services_dhcp.php:254 +#: usr/local/www/services_dhcp_edit.php:218 +#: usr/local/www/services_dhcp.php:254 +msgid "" +"A valid IP address must be specified for the primary/secondary DNS servers." +msgstr "「有効ãªIPアドレスã¯ã€ãƒ—ライマリ/セカンダリDNSサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:229 usr/local/www/services_dhcpv6.php:195 +#: usr/local/www/services_dhcp.php:230 usr/local/www/services_dhcpv6.php:207 +#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcpv6.php:192 +#: usr/local/www/services_dhcp_edit.php:221 +#: usr/local/www/services_dhcp.php:257 usr/local/www/services_dhcpv6.php:186 +#: usr/local/www/services_dhcp_edit.php:221 +#: usr/local/www/services_dhcp.php:257 usr/local/www/services_dhcpv6.php:186 +msgid "The default lease time must be at least 60 seconds." +msgstr "デフォルトã®ãƒªãƒ¼ã‚¹æ™‚é–“ã¯60秒以上ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:231 usr/local/www/services_dhcpv6.php:197 +#: usr/local/www/services_dhcp.php:232 usr/local/www/services_dhcpv6.php:209 +#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcpv6.php:194 +#: usr/local/www/services_dhcp_edit.php:223 +#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcpv6.php:188 +#: usr/local/www/services_dhcp.php:279 +#: usr/local/www/services_dhcp_edit.php:223 +#: usr/local/www/services_dhcp.php:279 usr/local/www/services_dhcpv6.php:188 +msgid "" +"The maximum lease time must be at least 60 seconds and higher than the " +"default lease time." +msgstr "デフォルトã®ãƒªãƒ¼ã‚¹æ™‚é–“"最大リース時間ã¯å°‘ãªãã¨ã‚‚60秒よりも高ããªã‘れã°ãªã‚‰ãªã„〠。" + +#: usr/local/www/services_dhcp.php:233 usr/local/www/services_dhcpv6.php:199 +#: usr/local/www/services_dhcp.php:234 usr/local/www/services_dhcpv6.php:211 +#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcpv6.php:196 +#: usr/local/www/services_dhcp_edit.php:225 +#: usr/local/www/services_dhcp.php:261 usr/local/www/services_dhcpv6.php:190 +#: usr/local/www/services_dhcp.php:281 +#: usr/local/www/services_dhcp_edit.php:225 +#: usr/local/www/services_dhcp.php:281 usr/local/www/services_dhcpv6.php:190 +msgid "A valid domain name must be specified for the dynamic DNS registration." +msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³åã¯ã€å‹•çš„DNS登録を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcp.php:246 +#: usr/local/www/services_dhcp.php:298 +#: usr/local/www/services_dhcp_edit.php:237 +#: usr/local/www/services_dhcp.php:279 usr/local/www/services_dhcp.php:299 +#: usr/local/www/services_dhcp_edit.php:237 +#: usr/local/www/services_dhcp.php:299 +msgid "" +"A valid IP address must be specified for the primary/secondary NTP servers." +msgstr "「有効ãªIPアドレスã¯ã€ãƒ—ライマリ/セカンダリã®NTPサーãƒãƒ¼ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:237 usr/local/www/services_dhcpv6.php:203 +#: usr/local/www/services_dhcp.php:248 usr/local/www/services_dhcpv6.php:225 +#: usr/local/www/services_dhcp.php:300 usr/local/www/services_dhcpv6.php:210 +#: usr/local/www/services_dhcp.php:281 usr/local/www/services_dhcpv6.php:204 +#: usr/local/www/services_dhcp.php:301 usr/local/www/services_dhcp.php:301 +#: usr/local/www/services_dhcpv6.php:204 +msgid "A valid domain name must be specified for the DNS domain." +msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³åã¯ã€ DNSドメインを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcp.php:250 +#: usr/local/www/services_dhcp.php:302 +#: usr/local/www/services_dhcp_edit.php:239 +#: usr/local/www/services_dhcp.php:283 usr/local/www/services_dhcp.php:303 +#: usr/local/www/services_dhcp_edit.php:239 +#: usr/local/www/services_dhcp.php:303 +msgid "A valid IP address or hostname must be specified for the TFTP server." +msgstr "有効ãªIPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåã¯ã€TFTPサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:241 usr/local/www/services_dhcp.php:252 +#: usr/local/www/services_dhcp.php:304 +#: usr/local/www/services_dhcp_edit.php:241 +#: usr/local/www/services_dhcp.php:285 usr/local/www/services_dhcp.php:305 +#: usr/local/www/services_dhcp_edit.php:241 +#: usr/local/www/services_dhcp.php:305 +msgid "A valid IP address must be specified for the network boot server." +msgstr "有効ãªIPアドレスã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ–ートサーãƒãƒ¼ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:244 usr/local/www/services_dhcp.php:255 +#: usr/local/www/services_dhcp.php:307 usr/local/www/services_dhcp.php:288 +#: usr/local/www/services_dhcp.php:308 usr/local/www/services_dhcp.php:308 +msgid "You cannot use the network address in the starting subnet range." +msgstr "ã‚ãªãŸãŒå§‹ã¾ã‚‹ã‚µãƒ–ãƒãƒƒãƒˆç¯„囲内ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:246 usr/local/www/services_dhcp.php:257 +#: usr/local/www/services_dhcp.php:309 usr/local/www/services_dhcp.php:290 +#: usr/local/www/services_dhcp.php:310 usr/local/www/services_dhcp.php:310 +msgid "You cannot use the broadcast address in the ending subnet range." +msgstr "ã‚ãªãŸãŒçµ‚ã‚るサブãƒãƒƒãƒˆç¯„囲内ã®ãƒ–ロードキャストアドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:253 usr/local/www/services_dhcp.php:264 +#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcp.php:297 +#: usr/local/www/services_dhcp.php:317 usr/local/www/services_dhcp.php:317 +#, php-format +msgid "The subnet range cannot overlap with virtual IP address %s." +msgstr "サブãƒãƒƒãƒˆç¯„囲ã¯ã€ä»®æƒ³IPアドレスã¨é‡è¤‡ã—ãªã„%s.ãŒã§ã" + +#: usr/local/www/services_dhcp.php:268 usr/local/www/services_dhcp.php:279 +#: usr/local/www/services_dhcp.php:331 usr/local/www/services_dhcp.php:312 +#: usr/local/www/services_dhcp.php:332 usr/local/www/services_dhcp.php:332 +msgid "Text type cannot include quotation marks." +msgstr "テキストタイプã¯ã€å¼•用符をå«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:270 usr/local/www/services_dhcp.php:281 +#: usr/local/www/services_dhcp.php:333 usr/local/www/services_dhcp.php:314 +#: usr/local/www/services_dhcp.php:334 usr/local/www/services_dhcp.php:334 +msgid "" +"String type must be enclosed in quotes like "this" or must be a series of " +"octets specified in hexadecimal, separated by colons, like 01:23:45:67:89:ab:" +"cd:ef" +msgstr "ã“ã®ã€Œæ–‡å­—列型ã®ã‚ˆã†ã«å¼•用符ã§å›²ã‚€å¿…è¦ãŒã‚りã¾ã™ã€ ã€ã‚„ã€ä¸€é€£ã®ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ "01:23:45:67:89ã®ã‚ˆã†ãªã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã‚‰ã‚ŒãŸ16é€²æ•°ã§æŒ‡å®šã‚ªã‚¯ãƒ†ãƒƒãƒˆã€ 〠: AB : "CD: EF" + +#: usr/local/www/services_dhcp.php:272 usr/local/www/services_dhcp.php:283 +#: usr/local/www/services_dhcp.php:335 usr/local/www/services_dhcp.php:316 +#: usr/local/www/services_dhcp.php:336 usr/local/www/services_dhcp.php:336 +msgid "Boolean type must be true, false, on, or off." +msgstr "booleanåž‹ã¯ã€ã‚ªãƒ³ã€ã¾ãŸã¯ã‚ªãƒ•å½ã€çœŸã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:274 usr/local/www/services_dhcp.php:285 +#: usr/local/www/services_dhcp.php:337 usr/local/www/services_dhcp.php:318 +#: usr/local/www/services_dhcp.php:338 usr/local/www/services_dhcp.php:338 +msgid "Unsigned 8-bit integer type must be a number in the range 0 to 255." +msgstr "符å·ãªã—8ビット整数型ã¯ã€ 255ã®ç¯„囲ã¯0ã®æ•°å­—ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcp.php:287 +#: usr/local/www/services_dhcp.php:339 usr/local/www/services_dhcp.php:320 +#: usr/local/www/services_dhcp.php:340 usr/local/www/services_dhcp.php:340 +msgid "Unsigned 16-bit integer type must be a number in the range 0 to 65535." +msgstr "符å·ãªã—ã®16ビット整数型65535ã®ç¯„囲ã¯0ã®æ•°å­—ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcp.php:289 +#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcp.php:322 +#: usr/local/www/services_dhcp.php:342 usr/local/www/services_dhcp.php:342 +msgid "" +"Unsigned 32-bit integer type must be a number in the range 0 to 4294967295." +msgstr "「符å·ãªã—32ビット整数型ãŒ4294967295ã®ç¯„囲ã¯0ã®æ•°å­—ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcp.php:291 +#: usr/local/www/services_dhcp.php:343 usr/local/www/services_dhcp.php:324 +#: usr/local/www/services_dhcp.php:344 usr/local/www/services_dhcp.php:344 +msgid "Signed 8-bit integer type must be a number in the range -128 to 127." +msgstr "符å·ä»˜ã8ビット整数型ã¯ç¯„囲-128〜127ã®æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:282 usr/local/www/services_dhcp.php:293 +#: usr/local/www/services_dhcp.php:345 usr/local/www/services_dhcp.php:326 +#: usr/local/www/services_dhcp.php:346 usr/local/www/services_dhcp.php:346 +msgid "" +"Signed 16-bit integer type must be a number in the range -32768 to 32767." +msgstr "「符å·ä»˜ã16ビット整数型ã®ç¯„囲-32768〜32767ã®æ•°å­—ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:284 usr/local/www/services_dhcp.php:295 +#: usr/local/www/services_dhcp.php:347 usr/local/www/services_dhcp.php:328 +#: usr/local/www/services_dhcp.php:348 usr/local/www/services_dhcp.php:348 +msgid "" +"Signed 32-bit integer type must be a number in the range -2147483648 to " +"2147483647." +msgstr "2147483647 「符å·ä»˜ã32ビット整数型ã¯-2147483648ã«å†…æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“〠。" + +#: usr/local/www/services_dhcp.php:286 usr/local/www/services_dhcp.php:297 +#: usr/local/www/services_dhcp.php:349 usr/local/www/services_dhcp.php:330 +#: usr/local/www/services_dhcp.php:350 usr/local/www/services_dhcp.php:350 +msgid "IP address or host type must be an IP address or host name." +msgstr "IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆã‚¿ã‚¤ãƒ—ã¯ã€IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:297 usr/local/www/services_dhcpv6.php:230 +#: usr/local/www/services_dhcp.php:308 usr/local/www/services_dhcpv6.php:252 +#: usr/local/www/services_dhcp.php:360 usr/local/www/services_dhcpv6.php:237 +#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcpv6.php:232 +#: usr/local/www/services_dhcp.php:361 usr/local/www/services_dhcp.php:361 +#: usr/local/www/services_dhcpv6.php:232 +msgid "The specified range lies outside of the current subnet." +msgstr "指定ã•れãŸç¯„囲ã¯ã€ç¾åœ¨ã®ã‚µãƒ–ãƒãƒƒãƒˆã®å¤–å´ã«ã‚る。" + +#: usr/local/www/services_dhcp.php:301 usr/local/www/services_dhcp.php:312 +#: usr/local/www/services_dhcpv6.php:257 usr/local/www/services_dhcp.php:364 +#: usr/local/www/services_dhcpv6.php:242 usr/local/www/services_dhcp.php:345 +#: usr/local/www/services_dhcpv6.php:237 usr/local/www/services_dhcp.php:365 +#: usr/local/www/services_dhcp.php:365 usr/local/www/services_dhcpv6.php:237 +msgid "The range is invalid (first element higher than second element)." +msgstr "範囲ã¯ã€ (第2è¦ç´ ã‚ˆã‚Šã‚‚ã€æœ€åˆã®è¦ç´ ãŒé«˜ã„)ãŒç„¡åйã§ã™ã€‚" + +#: usr/local/www/services_dhcp.php:305 usr/local/www/services_dhcpv6.php:240 +#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcpv6.php:261 +#: usr/local/www/services_dhcp.php:372 usr/local/www/services_dhcpv6.php:246 +#: usr/local/www/services_dhcp.php:368 usr/local/www/services_dhcpv6.php:241 +#: usr/local/www/services_dhcp.php:388 usr/local/www/services_dhcp.php:388 +#: usr/local/www/services_dhcpv6.php:241 +#, php-format +msgid "" +"You must disable the DHCP relay on the %s interface before enabling the DHCP " +"server." +msgstr "サーãƒã€ã¯ã€DHCPを有効ã«ã™ã‚‹å‰ã«%sインターフェイス上ã§DHCPリレーを無効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/services_dhcp.php:315 usr/local/www/services_dhcp.php:326 +#: usr/local/www/services_dhcpv6.php:276 usr/local/www/services_dhcp.php:382 +#: usr/local/www/services_dhcpv6.php:261 usr/local/www/services_dhcp.php:378 +#: usr/local/www/services_dhcpv6.php:256 usr/local/www/services_dhcp.php:398 +#: usr/local/www/services_dhcp.php:398 usr/local/www/services_dhcpv6.php:256 +#, php-format +msgid "The DHCP range cannot overlap any static DHCP mappings." +msgstr "DHCP範囲ã¯ã€é™çš„DHCPマッピングをオーãƒãƒ¼ãƒ©ãƒƒãƒ—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp.php:421 usr/local/www/services_dhcp.php:433 +#: usr/local/www/services_dhcp.php:527 usr/local/www/services_dhcp.php:526 +#: usr/local/www/services_dhcp.php:546 usr/local/www/services_dhcp.php:546 +msgid "DHCP server" +msgstr "DHCPサーãƒ" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:559 +msgid "Text" +msgstr "テキスト" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:559 +msgid "String" +msgstr "文字列" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:559 +msgid "Boolean" +msgstr "ブーリアン" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:560 +msgid "Unsigned 8-bit integer" +msgstr "符å·ãªã—8ビット整数" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:560 +msgid "Unsigned 16-bit integer" +msgstr "符å·ãªã—ã®16ビット整数" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:560 +msgid "Unsigned 32-bit integer" +msgstr "符å·ãªã—ã®32ビット整数" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561 +msgid "Signed 8-bit integer" +msgstr "符å·ä»˜ã8ビット整数" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561 +msgid "Signed 16-bit integer" +msgstr "符å·ä»˜ã16ビット整数" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561 +msgid "Signed 32-bit integer" +msgstr "符å·ä»˜ã32ビット整数" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561 +msgid "IP address or host" +msgstr "IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆ" + +#: usr/local/www/services_dhcp.php:528 usr/local/www/services_dhcpv6.php:453 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcpv6.php:480 +#: usr/local/www/services_dhcp.php:645 usr/local/www/services_dhcpv6.php:460 +#: usr/local/www/services_dhcp.php:647 usr/local/www/services_dhcpv6.php:455 +#: usr/local/www/services_dhcp.php:667 usr/local/www/services_dhcp.php:667 +#: usr/local/www/services_dhcpv6.php:455 +msgid "" +"DHCP Relay is currently enabled. Cannot enable the DHCP Server service while " +"the DHCP Relay is enabled on any interface." +msgstr "「 DHCPリレーã¯ã€ç¾åœ¨æœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚ãªãŒã‚‰ã€ DHCPサーãƒãƒ¼ã‚µãƒ¼ãƒ“スを有効ã«ã§ãã¾ã›ã‚“〠DHCPリレーã¯ã€ã©ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§æœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:536 usr/local/www/services_dhcpv6.php:461 +#: usr/local/www/services_dhcp.php:549 usr/local/www/services_dhcpv6.php:488 +#: usr/local/www/services_dhcp.php:653 usr/local/www/services_dhcpv6.php:468 +#: usr/local/www/services_dhcp.php:655 usr/local/www/services_dhcpv6.php:463 +#: usr/local/www/services_dhcp.php:675 usr/local/www/services_dhcp.php:675 +#: usr/local/www/services_dhcpv6.php:463 +msgid "The static mapping configuration has been changed" +msgstr "é™çš„ãªãƒžãƒƒãƒ”ング構æˆãŒå¤‰æ›´ã•れãŸ" + +#: usr/local/www/services_dhcp.php:575 usr/local/www/services_dhcp.php:588 +#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcp.php:695 +#: usr/local/www/services_dhcp.php:715 usr/local/www/services_dhcp.php:715 +#, php-format +msgid "Enable DHCP server on %s interface" +msgstr "%sインターフェイス上ã§DHCPサーãƒã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/services_dhcp.php:583 usr/local/www/services_dhcpv6.php:518 +#: usr/local/www/services_dhcp.php:596 usr/local/www/services_dhcpv6.php:592 +#: usr/local/www/services_dhcp.php:706 usr/local/www/services_dhcpv6.php:523 +#: usr/local/www/services_dhcp.php:708 usr/local/www/services_dhcpv6.php:534 +#: usr/local/www/services_dhcp.php:728 usr/local/www/services_dhcp.php:728 +#: usr/local/www/services_dhcpv6.php:534 +msgid "Deny unknown clients" +msgstr "䏿˜Žãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’å¦å®š" + +#: usr/local/www/services_dhcp.php:584 usr/local/www/services_dhcpv6.php:519 +#: usr/local/www/services_dhcp.php:597 usr/local/www/services_dhcpv6.php:593 +#: usr/local/www/services_dhcp.php:707 usr/local/www/services_dhcpv6.php:524 +#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:535 +#: usr/local/www/services_dhcp.php:729 usr/local/www/services_dhcp.php:729 +#: usr/local/www/services_dhcpv6.php:535 +msgid "" +"If this is checked, only the clients defined below will get DHCP leases from " +"this server. " +msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼"ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ä»¥ä¸‹ã«å®šç¾©ã•れã¦ã„る唯一ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰ã®DHCPリースをå–å¾—ã—ã¾ã™ã€ 。" + +#: usr/local/www/services_dhcp.php:593 usr/local/www/services_dhcpv6.php:528 +#: usr/local/www/services_dhcp.php:606 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_dhcp.php:716 usr/local/www/services_dhcpv6.php:533 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +#: usr/local/www/services_dhcp.php:726 usr/local/www/services_dhcpv6.php:548 +#: usr/local/www/services_dhcp.php:746 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +#: usr/local/www/services_dhcp.php:746 usr/local/www/services_dhcpv6.php:548 +msgid "Subnet mask" +msgstr "サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯" + +#: usr/local/www/services_dhcp.php:599 usr/local/www/services_dhcpv6.php:534 +#: usr/local/www/services_dhcp.php:612 usr/local/www/services_dhcpv6.php:608 +#: usr/local/www/services_dhcp.php:722 usr/local/www/services_dhcpv6.php:539 +#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:554 +#: usr/local/www/services_dhcp.php:752 usr/local/www/services_dhcp.php:752 +#: usr/local/www/services_dhcpv6.php:554 +msgid "Available range" +msgstr "利用å¯èƒ½ãªç¯„囲" + +#: usr/local/www/services_dhcp.php:616 usr/local/www/services_dhcpv6.php:552 +#: usr/local/www/services_dhcp.php:629 usr/local/www/services_dhcpv6.php:625 +#: usr/local/www/services_dhcp.php:750 usr/local/www/vpn_l2tp.php:342 +#: usr/local/www/services_dhcpv6.php:556 usr/local/www/vpn_l2tp.php:345 +#: usr/local/www/services_dhcp.php:760 usr/local/www/services_dhcpv6.php:573 +#: usr/local/www/services_dhcp.php:780 usr/local/www/vpn_l2tp.php:345 +#: usr/local/www/services_dhcp.php:780 usr/local/www/services_dhcpv6.php:573 +msgid "Subnet Mask" +msgstr "サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯" + +#: usr/local/www/services_dhcp.php:633 usr/local/www/services_dhcpv6.php:569 +#: usr/local/www/services_dhcp.php:646 usr/local/www/services_dhcpv6.php:642 +#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:573 +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:590 +#: usr/local/www/services_dhcp.php:797 usr/local/www/services_dhcp.php:797 +#: usr/local/www/services_dhcpv6.php:590 +msgid "Range" +msgstr "レンジ" + +#: usr/local/www/services_dhcp.php:640 usr/local/www/services_dhcp.php:653 +#: usr/local/www/services_dhcp.php:829 +#: usr/local/www/services_dhcp_edit.php:395 +#: usr/local/www/services_dhcp.php:843 usr/local/www/services_dhcp.php:863 +#: usr/local/www/services_dhcp_edit.php:395 +#: usr/local/www/services_dhcp.php:863 +msgid "WINS servers" +msgstr "WINSサーãƒãƒ¼" + +#: usr/local/www/services_dhcp.php:651 usr/local/www/services_dhcpv6.php:594 +#: usr/local/www/services_dhcp.php:664 usr/local/www/services_dhcpv6.php:671 +#: usr/local/www/services_router_advertisements.php:376 +#: usr/local/www/services_dhcp.php:840 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_dhcp_edit.php:406 +#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:619 +#: usr/local/www/services_router_advertisements.php:371 +#: usr/local/www/services_dhcp.php:874 +#: usr/local/www/services_router_advertisements.php:371 +#: usr/local/www/services_dhcp_edit.php:406 +#: usr/local/www/services_dhcp.php:874 usr/local/www/services_dhcpv6.php:619 +msgid "" +"NOTE: leave blank to use the system default DNS servers - this interface's " +"IP if DNS forwarder is enabled, otherwise the servers configured on the " +"General page." +msgstr ""注:システムã®ãƒ‡ãƒ•ォルトã®DNSサーãƒãƒ¼ã‚’使用ã™ã‚‹å ´åˆã¯ã€ç©ºç™½ã®ã¾ã¾ã« - ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã®ã€Œ DNSãƒ•ã‚©ãƒ¯ãƒ¼ãƒ€ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€IP ã€ãã†ã§ãªã„サーãƒã¯ã€Œä¸€èˆ¬çš„ãªãƒšãƒ¼ã‚¸ã§è¨­å®šã€‚" + +#: usr/local/www/services_dhcp.php:658 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_dhcp.php:671 usr/local/www/services_dhcp.php:847 +#: usr/local/www/services_dhcp_edit.php:413 +#: usr/local/www/services_dhcp.php:861 usr/local/www/services_dhcp.php:881 +#: usr/local/www/services_dhcp_edit.php:413 +#: usr/local/www/services_dhcp.php:881 +msgid "" +"The default is to use the IP on this interface of the firewall as the " +"gateway. Specify an alternate gateway here if this is not the correct " +"gateway for your network." +msgstr "ゲートウェイã¯ã€Œãƒ‡ãƒ•ォルトã§ã¯ã€ãƒ•ァイアウォールã®ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§IPを使用ã™ã‚‹ã“ã¨ã§ã™ã€ 。ã“れãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«é©ã—ã¦ã€Œã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã§ãªã„å ´åˆã¯ã€ã“ã“ã§åˆ¥ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’指定ã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:662 usr/local/www/services_dhcpv6.php:607 +#: usr/local/www/services_dhcp.php:675 usr/local/www/services_dhcpv6.php:675 +#: usr/local/www/services_dhcp.php:851 usr/local/www/services_dhcpv6.php:606 +#: usr/local/www/services_dhcp_edit.php:417 +#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:623 +#: usr/local/www/services_dhcp.php:885 +#: usr/local/www/services_dhcp_edit.php:417 +#: usr/local/www/services_dhcp.php:885 usr/local/www/services_dhcpv6.php:623 +msgid "Domain name" +msgstr "ドメインå" + +#: usr/local/www/services_dhcp.php:665 usr/local/www/services_dhcpv6.php:610 +#: usr/local/www/services_dhcp.php:678 usr/local/www/services_dhcpv6.php:678 +#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:609 +#: usr/local/www/services_dhcp_edit.php:420 +#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcpv6.php:626 +#: usr/local/www/services_dhcp.php:888 +#: usr/local/www/services_dhcp_edit.php:420 +#: usr/local/www/services_dhcp.php:888 usr/local/www/services_dhcpv6.php:626 +msgid "" +"The default is to use the domain name of this system as the default domain " +"name provided by DHCP. You may specify an alternate domain name here." +msgstr "DHCPã«ã‚ˆã£ã¦æä¾›ã•れãŸåå‰ã€Œãƒ‡ãƒ•ォルトã§ã¯ã€ãƒ‡ãƒ•ォルトã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã¨ã—ã¦ã€ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã®ãƒ‰ãƒ¡ã‚¤ãƒ³åを使用ã™ã‚‹ã“ã¨ã§ã™ã€ 。ã‚ãªãŸãŒã“ã“ã«ä»£æ›¿ãƒ‰ãƒ¡ã‚¤ãƒ³åを指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:669 usr/local/www/services_dhcpv6.php:614 +#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:682 +#: usr/local/www/services_router_advertisements.php:381 +#: usr/local/www/services_dhcp.php:858 usr/local/www/services_dhcpv6.php:613 +#: usr/local/www/services_dhcp_edit.php:424 +#: usr/local/www/services_dhcp.php:872 usr/local/www/services_dhcpv6.php:630 +#: usr/local/www/services_router_advertisements.php:376 +#: usr/local/www/services_dhcp.php:892 +#: usr/local/www/services_router_advertisements.php:376 +#: usr/local/www/services_dhcp_edit.php:424 +#: usr/local/www/services_dhcp.php:892 usr/local/www/services_dhcpv6.php:630 +msgid "Domain search list" +msgstr "ドメインサーãƒãƒªã‚¹ãƒˆ" + +#: usr/local/www/services_dhcp.php:672 usr/local/www/services_dhcpv6.php:617 +msgid "The DHCP server can optionally provide a domain search list." +msgstr "DHCPサーãƒã¯ã€å¿…è¦ã«å¿œã˜ã¦ã€ãƒ‰ãƒ¡ã‚¤ãƒ³æ¤œç´¢ãƒªã‚¹ãƒˆã‚’æä¾›ã™ã‚‹ã“ã¨ãŒã§ãる。" + +#: usr/local/www/services_dhcp.php:676 usr/local/www/services_dhcpv6.php:621 +#: usr/local/www/services_dhcp.php:689 usr/local/www/services_dhcpv6.php:689 +#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:620 +#: usr/local/www/services_dhcp_edit.php:431 +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:637 +#: usr/local/www/services_dhcp.php:899 +#: usr/local/www/services_dhcp_edit.php:431 +#: usr/local/www/services_dhcp.php:899 usr/local/www/services_dhcpv6.php:637 +msgid "Default lease time" +msgstr "デフォルトã®ãƒªãƒ¼ã‚¹æ™‚é–“" + +#: usr/local/www/services_dhcp.php:680 usr/local/www/services_dhcpv6.php:625 +#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcpv6.php:693 +#: usr/local/www/services_dhcp.php:869 usr/local/www/services_dhcpv6.php:624 +#: usr/local/www/services_dhcp_edit.php:435 +#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:641 +#: usr/local/www/services_dhcp.php:903 +#: usr/local/www/services_dhcp_edit.php:435 +#: usr/local/www/services_dhcp.php:903 usr/local/www/services_dhcpv6.php:641 +msgid "" +"This is used for clients that do not ask for a specific expiration time." +msgstr "「ã“れã¯ã€ç‰¹å®šã®æœ‰åŠ¹æœŸé™ã¯æ±‚ã‚ãªã„クライアントã®ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:627 +#: usr/local/www/services_dhcp.php:695 usr/local/www/services_dhcpv6.php:695 +#: usr/local/www/services_dhcp.php:871 usr/local/www/services_dhcpv6.php:626 +#: usr/local/www/services_dhcp_edit.php:437 +#: usr/local/www/services_dhcp.php:885 usr/local/www/services_dhcpv6.php:643 +#: usr/local/www/services_dhcp.php:905 +#: usr/local/www/services_dhcp_edit.php:437 +#: usr/local/www/services_dhcp.php:905 usr/local/www/services_dhcpv6.php:643 +msgid "The default is 7200 seconds." +msgstr "デフォルトã¯7200ç§’ã§ã™ã€‚" + +#: usr/local/www/services_dhcp.php:686 usr/local/www/services_dhcpv6.php:631 +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:699 +#: usr/local/www/services_dhcp.php:875 usr/local/www/services_dhcpv6.php:630 +#: usr/local/www/services_dhcp_edit.php:441 +#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:647 +#: usr/local/www/services_dhcp.php:909 +#: usr/local/www/services_dhcp_edit.php:441 +#: usr/local/www/services_dhcp.php:909 usr/local/www/services_dhcpv6.php:647 +msgid "Maximum lease time" +msgstr "最大リース時間" + +#: usr/local/www/services_dhcp.php:690 usr/local/www/services_dhcpv6.php:635 +#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcpv6.php:703 +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:634 +#: usr/local/www/services_dhcp_edit.php:445 +#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:651 +#: usr/local/www/services_dhcp.php:913 +#: usr/local/www/services_dhcp_edit.php:445 +#: usr/local/www/services_dhcp.php:913 usr/local/www/services_dhcpv6.php:651 +msgid "" +"This is the maximum lease time for clients that ask for a specific " +"expiration time." +msgstr "有効期é™ã¯ã€Œã“れã¯ã€ç‰¹å®šã‚’求ã‚ã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æœ€å¤§ãƒªãƒ¼ã‚¹æ™‚é–“ã§ã™ã€ 。" + +#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcpv6.php:637 +#: usr/local/www/services_dhcp.php:705 usr/local/www/services_dhcpv6.php:705 +#: usr/local/www/services_dhcp.php:881 usr/local/www/services_dhcpv6.php:636 +#: usr/local/www/services_dhcp_edit.php:447 +#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcpv6.php:653 +#: usr/local/www/services_dhcp.php:915 +#: usr/local/www/services_dhcp_edit.php:447 +#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:653 +msgid "The default is 86400 seconds." +msgstr "デフォルトã¯86400ç§’ã§ã™ã€‚" + +#: usr/local/www/services_dhcp.php:696 usr/local/www/services_dhcpv6.php:641 +#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:886 usr/local/www/services_dhcpv6.php:640 +#: usr/local/www/services_dhcp.php:900 usr/local/www/services_dhcpv6.php:657 +#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcp.php:920 +#: usr/local/www/services_dhcpv6.php:657 +msgid "Failover peer IP:" +msgstr "フェールオーãƒãƒ¼ãƒ”ã‚¢ã®IPアドレス:" + +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:644 +#: usr/local/www/services_dhcp.php:712 usr/local/www/services_dhcpv6.php:712 +#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:643 +#: usr/local/www/services_dhcpv6.php:660 usr/local/www/services_dhcpv6.php:660 +msgid "" +"Leave blank to disable. Enter the interface IP address of the other " +"machine. Machines must be using CARP." +msgstr "「無効ã«ã™ã‚‹å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãŠãã¾ã™ã€‚ä»–ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスIPアドレスを入力ã—〠"マシンを。マシンã¯ã€CARPを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcp.php:716 +#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcp.php:909 +#: usr/local/www/services_dhcp.php:1150 usr/local/www/services_dhcp.php:929 +#: usr/local/www/services_dhcp.php:1170 usr/local/www/services_dhcp.php:929 +#: usr/local/www/services_dhcp.php:1170 +msgid "Static ARP" +msgstr "スタティックARP" + +#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcp.php:723 +#: usr/local/www/services_dhcp.php:902 usr/local/www/services_dhcp.php:916 +#: usr/local/www/services_dhcp.php:936 usr/local/www/services_dhcp.php:936 +msgid "Enable Static ARP entries" +msgstr "スタティックARPエントリを有効ã«ã™ã‚‹" + +#: usr/local/www/services_dhcp.php:715 usr/local/www/services_dhcp.php:728 +#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:921 +#: usr/local/www/services_dhcp.php:941 +msgid "" +"Only the machines listed below will be able to communicate with the firewall " +"on this NIC." +msgstr "ã“ã®NICã¯ã€ã€Œä»¥ä¸‹ã«ç¤ºã™ã ã‘ã®ãƒžã‚·ãƒ³ãŒãƒ•ァイアウォールã¨é€šä¿¡ã§ãるよã†ã«ãªã‚Šã¾ã™ã€ 。" + +#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcpv6.php:651 +#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcpv6.php:744 +#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcpv6.php:675 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcpv6.php:692 +#: usr/local/www/services_dhcp.php:978 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp.php:978 usr/local/www/services_dhcpv6.php:692 +msgid "Show Dynamic DNS" +msgstr "ダイナミックDNSを表示" + +#: usr/local/www/services_dhcp.php:729 usr/local/www/services_dhcpv6.php:655 +#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:748 +#: usr/local/www/services_dhcp.php:949 usr/local/www/services_dhcpv6.php:679 +#: usr/local/www/services_dhcp_edit.php:458 +#: usr/local/www/services_dhcp.php:962 usr/local/www/services_dhcpv6.php:696 +#: usr/local/www/services_dhcp.php:982 +#: usr/local/www/services_dhcp_edit.php:458 +#: usr/local/www/services_dhcp.php:982 usr/local/www/services_dhcpv6.php:696 +msgid "Enable registration of DHCP client names in DNS." +msgstr "DNSã«DHCPクライアントåã®ç™»éŒ²ã‚’有効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:658 +#: usr/local/www/services_dhcp.php:770 usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/services_dhcp.php:952 usr/local/www/services_dhcpv6.php:682 +#: usr/local/www/services_dhcp_edit.php:461 +#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcpv6.php:699 +#: usr/local/www/services_dhcp.php:985 +#: usr/local/www/services_dhcp_edit.php:461 +#: usr/local/www/services_dhcp.php:985 usr/local/www/services_dhcpv6.php:699 +msgid "Note: Leave blank to disable dynamic DNS registration." +msgstr "注:動的DNS登録を無効ã«ã™ã‚‹ã«ã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:733 usr/local/www/services_dhcpv6.php:659 +#: usr/local/www/services_dhcp.php:771 usr/local/www/services_dhcpv6.php:752 +#: usr/local/www/services_dhcp.php:953 usr/local/www/services_dhcpv6.php:683 +#: usr/local/www/services_dhcp_edit.php:462 +#: usr/local/www/services_dhcp.php:966 usr/local/www/services_dhcpv6.php:700 +#: usr/local/www/services_dhcp.php:986 +#: usr/local/www/services_dhcp_edit.php:462 +#: usr/local/www/services_dhcp.php:986 usr/local/www/services_dhcpv6.php:700 +msgid "" +"Enter the dynamic DNS domain which will be used to register client names in " +"the DNS server." +msgstr "DNSサーãƒã€ã§ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆåを登録ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れるダイナミックDNSドメインを入力ã—ã¦ãã ã•ã„ "。" + +#: usr/local/www/services_dhcp.php:738 usr/local/www/services_dhcpv6.php:664 +#: usr/local/www/services_dhcp.php:776 usr/local/www/services_dhcpv6.php:757 +#: usr/local/www/services_dhcp.php:972 usr/local/www/services_dhcpv6.php:688 +#: usr/local/www/services_dhcp_edit.php:467 +#: usr/local/www/services_dhcp.php:985 usr/local/www/services_dhcpv6.php:705 +#: usr/local/www/services_dhcp.php:1005 +#: usr/local/www/services_dhcp_edit.php:467 +#: usr/local/www/services_dhcp.php:1005 usr/local/www/services_dhcpv6.php:705 +msgid "NTP servers" +msgstr "NTPサーãƒãƒ¼" + +#: usr/local/www/services_dhcp.php:741 usr/local/www/services_dhcpv6.php:667 +#: usr/local/www/services_dhcp.php:779 usr/local/www/services_dhcpv6.php:760 +#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcpv6.php:708 +#: usr/local/www/services_dhcp.php:1008 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcpv6.php:708 +msgid "Show NTP configuration" +msgstr "表示NTP設定" + +#: usr/local/www/services_dhcp.php:750 usr/local/www/services_dhcpv6.php:676 +#: usr/local/www/services_dhcp.php:788 usr/local/www/services_dhcpv6.php:770 +#: usr/local/www/services_dhcp.php:984 usr/local/www/services_dhcpv6.php:701 +#: usr/local/www/services_dhcp_edit.php:479 +#: usr/local/www/services_dhcp.php:997 usr/local/www/services_dhcpv6.php:718 +#: usr/local/www/services_dhcp.php:1017 +#: usr/local/www/services_dhcp_edit.php:479 +#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:718 +msgid "TFTP server" +msgstr "TFTPサーãƒ" + +#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcpv6.php:679 +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:773 +#: usr/local/www/services_dhcp.php:987 usr/local/www/services_dhcpv6.php:704 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:1000 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcp.php:1020 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:1020 usr/local/www/services_dhcpv6.php:721 +msgid "Show TFTP configuration" +msgstr "TFTP設定を表示ã—ã¾ã™" + +#: usr/local/www/services_dhcp.php:757 usr/local/www/services_dhcpv6.php:683 +#: usr/local/www/services_dhcp.php:795 usr/local/www/services_dhcpv6.php:777 +#: usr/local/www/services_dhcp.php:991 usr/local/www/services_dhcpv6.php:708 +#: usr/local/www/services_dhcp_edit.php:486 +#: usr/local/www/services_dhcp.php:1004 usr/local/www/services_dhcpv6.php:725 +#: usr/local/www/services_dhcp.php:1024 +#: usr/local/www/services_dhcp_edit.php:486 +#: usr/local/www/services_dhcp.php:1024 usr/local/www/services_dhcpv6.php:725 +msgid "" +"Leave blank to disable. Enter a full hostname or IP for the TFTP server." +msgstr "「無効ã«ã™ã‚‹å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã€‚ TFTPサーãƒã®å®Œå…¨ãªãƒ›ã‚¹ãƒˆåã¾ãŸã¯IPアドレスを入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/services_dhcp.php:762 usr/local/www/services_dhcpv6.php:688 +#: usr/local/www/services_dhcp.php:800 usr/local/www/services_dhcpv6.php:783 +#: usr/local/www/services_dhcp.php:996 usr/local/www/services_dhcpv6.php:714 +#: usr/local/www/services_dhcp.php:1009 usr/local/www/services_dhcpv6.php:731 +#: usr/local/www/services_dhcp.php:1029 usr/local/www/services_dhcp.php:1029 +#: usr/local/www/services_dhcpv6.php:731 +msgid "LDAP URI" +msgstr "LDAPã®URI" + +#: usr/local/www/services_dhcp.php:765 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcp.php:803 usr/local/www/services_dhcpv6.php:786 +#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcpv6.php:717 +#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcpv6.php:734 +#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcp.php:1032 +#: usr/local/www/services_dhcpv6.php:734 +msgid "Show LDAP configuration" +msgstr "LDAP設定を表示ã™ã‚‹" + +#: usr/local/www/services_dhcp.php:769 usr/local/www/services_dhcpv6.php:695 +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:1003 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcp.php:1016 usr/local/www/services_dhcpv6.php:738 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcp.php:1036 +#: usr/local/www/services_dhcpv6.php:738 +msgid "" +"Leave blank to disable. Enter a full URI for the LDAP server in the form " +"ldap://ldap.example.com/dc=example,dc=com" +msgstr "「無効ã«ã™ã‚‹å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã€‚å½¢å¼ã§LDAPサーãƒã®å®Œå…¨ãªURIを入力ã—ã¦ãã ã•ã„ "LDAP:/ / ldap.example.com / dc = exampleã€dc = comã®" + +#: usr/local/www/services_dhcp.php:774 usr/local/www/services_dhcpv6.php:700 +#: usr/local/www/services_dhcp.php:812 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcpv6.php:726 +#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:743 +#: usr/local/www/services_dhcp.php:1041 usr/local/www/services_dhcp.php:1041 +#: usr/local/www/services_dhcpv6.php:743 +msgid "Enable network booting" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ–ートを有効ã«ã™ã‚‹" + +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:703 +#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcpv6.php:798 +#: usr/local/www/services_dhcp.php:1011 usr/local/www/services_dhcpv6.php:729 +#: usr/local/www/services_dhcp.php:1024 usr/local/www/services_dhcpv6.php:746 +#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcp.php:1044 +#: usr/local/www/services_dhcpv6.php:746 +msgid "Show Network booting" +msgstr "表示ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯èµ·å‹•" + +#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcpv6.php:707 +#: usr/local/www/services_dhcp.php:819 usr/local/www/services_dhcpv6.php:802 +#: usr/local/www/services_dhcp.php:1015 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/services_dhcp.php:1028 usr/local/www/services_dhcpv6.php:750 +#: usr/local/www/services_dhcp.php:1048 usr/local/www/services_dhcp.php:1048 +#: usr/local/www/services_dhcpv6.php:750 +msgid "Enables network booting." +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ–ートを有効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735 +#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752 +#: usr/local/www/services_dhcp.php:1050 usr/local/www/services_dhcp.php:1050 +#: usr/local/www/services_dhcpv6.php:752 +msgid "Enter the IP of the" +msgstr "ã®IPアドレスを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735 +#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752 +#: usr/local/www/services_dhcp.php:1050 usr/local/www/services_dhcp.php:1050 +#: usr/local/www/services_dhcpv6.php:752 +msgid "next-server" +msgstr "次世代サーãƒãƒ¼" + +#: usr/local/www/services_dhcp.php:785 usr/local/www/services_dhcpv6.php:711 +#: usr/local/www/services_dhcp.php:823 usr/local/www/services_dhcpv6.php:806 +#: usr/local/www/services_dhcp.php:1019 usr/local/www/services_dhcpv6.php:737 +#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcpv6.php:754 +#: usr/local/www/services_dhcp.php:1052 usr/local/www/services_dhcp.php:1052 +#: usr/local/www/services_dhcpv6.php:754 +msgid "and the filename" +msgstr "ã¨ãƒ•ァイルå" + +#: usr/local/www/services_dhcp.php:787 usr/local/www/services_dhcpv6.php:713 +#: usr/local/www/services_dhcp.php:825 usr/local/www/services_dhcpv6.php:808 +#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:739 +#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:756 +#: usr/local/www/services_dhcp.php:1054 usr/local/www/services_dhcp.php:1054 +#: usr/local/www/services_dhcpv6.php:756 +msgid "" +"Note: You need both a filename and a boot server configured for this to work!" +msgstr ""注æ„:ã‚ãªãŸã¯ä»•事ã«ãƒ•ァイルåã¨ã€ã“ã®ãŸã‚ã«è¨­å®šã•れã¦ã„るブート·サーãƒã®ä¸¡æ–¹ãŒå¿…è¦ ï¼" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/services_dhcp.php:1056 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcpv6.php:758 +msgid "Enter the" +msgstr "入力ã™ã‚‹" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/services_dhcp.php:1056 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcpv6.php:758 +msgid "root-path" +msgstr "ルート·パス" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/services_dhcp.php:1056 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcpv6.php:758 +msgid "string" +msgstr "文字列" + +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:717 +#: usr/local/www/services_dhcp.php:829 usr/local/www/services_dhcpv6.php:812 +#: usr/local/www/services_dhcp.php:1025 usr/local/www/services_dhcpv6.php:743 +#: usr/local/www/services_dhcp.php:1038 usr/local/www/services_dhcpv6.php:760 +#: usr/local/www/services_dhcp.php:1058 usr/local/www/services_dhcp.php:1058 +#: usr/local/www/services_dhcpv6.php:760 +msgid "" +"Note: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname" +msgstr ""注:文字列形å¼ï¼š iSCSIイニシエータ: (サーãƒãƒ¼å) : (プロトコル) : (ãƒãƒ¼ãƒˆï¼‰ : ( LUN ) :ターゲットå" + +#: usr/local/www/services_dhcp.php:796 usr/local/www/services_dhcpv6.php:722 +#: usr/local/www/services_dhcp.php:834 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1031 usr/local/www/services_dhcpv6.php:748 +#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcpv6.php:765 +#: usr/local/www/services_dhcp.php:1064 usr/local/www/services_dhcp.php:1064 +#: usr/local/www/services_dhcpv6.php:765 +msgid "Additional BOOTP/DHCP Options" +msgstr "追加ã®BOOTP / DHCPオプション" + +#: usr/local/www/services_dhcp.php:799 usr/local/www/services_dhcpv6.php:725 +#: usr/local/www/services_dhcp.php:837 usr/local/www/services_dhcpv6.php:820 +#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:768 +#: usr/local/www/services_dhcp.php:1067 usr/local/www/services_dhcp.php:1067 +#: usr/local/www/services_dhcpv6.php:768 +msgid "Show Additional BOOTP/DHCP Options" +msgstr "追加ã®BOOTP / DHCPオプションを表示ã™ã‚‹" + +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828 +#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759 +#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776 +#: usr/local/www/services_dhcp.php:1075 usr/local/www/services_dhcp.php:1075 +#: usr/local/www/services_dhcpv6.php:776 +msgid "" +"Enter the DHCP option number and the value for each item you would like to " +"include in the DHCP lease information. For a list of available options " +"please visit this" +msgstr "DHCPリース情報ã«å«ã¾ã‚Œã‚‹ã€Œ DHCPオプション番å·ã€ã‚ãªãŸãŒã—ãŸã„é …ç›®ã”ã¨ã«å€¤ã‚’入力ã—ã¦ãã ã•ã„〠。使用å¯èƒ½ãªã‚ªãƒ—ションã®ãƒªã‚¹ãƒˆã«ã¤ã„ã¦ã¯ã€ 「ã“れをã”覧ãã ã•ã„。" + +#: usr/local/www/services_dhcp.php:812 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/services_dhcpv6.php:738 usr/local/www/services_dhcp.php:850 +#: usr/local/www/services_dhcpv6.php:833 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:764 +#: usr/local/www/services_dhcp.php:1060 usr/local/www/services_dhcpv6.php:781 +#: usr/local/www/services_dhcp.php:1080 usr/local/www/services_dhcp.php:1080 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_dhcpv6.php:781 +msgid "Number" +msgstr "æ•°" + +#: usr/local/www/services_dhcp.php:814 +#: usr/local/www/load_balancer_relay_action_edit.php:506 +#: usr/local/www/system_advanced_sysctl.php:173 +#: usr/local/www/system_advanced_sysctl.php:249 +#: usr/local/www/services_dhcpv6.php:739 +#: usr/local/www/system_certmanager.php:763 +#: usr/local/www/load_balancer_relay_action_edit.php:505 +#: usr/local/www/services_dhcp.php:852 usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/load_balancer_relay_action_edit.php:503 +#: usr/local/www/services_dhcp.php:1049 usr/local/www/services_dhcpv6.php:765 +#: usr/local/www/services_dhcp.php:1062 +#: usr/local/www/system_certmanager.php:788 +#: usr/local/www/services_dhcpv6.php:782 usr/local/www/services_dhcp.php:1082 +#: usr/local/www/system_certmanager.php:789 +#: usr/local/www/services_dhcp.php:1082 +#: usr/local/www/system_certmanager.php:789 +#: usr/local/www/load_balancer_relay_action_edit.php:503 +#: usr/local/www/services_dhcpv6.php:782 +#: usr/local/www/system_advanced_sysctl.php:173 +#: usr/local/www/system_advanced_sysctl.php:249 +msgid "Value" +msgstr "値" + +#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885 +#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816 +#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833 +#: usr/local/www/services_dhcp.php:1152 usr/local/www/services_dhcp.php:1152 +#: usr/local/www/services_dhcpv6.php:833 +msgid "The DNS servers entered in" +msgstr "ã«å…¥åŠ›ã•れãŸDNSサーãƒ" + +#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885 +#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816 +#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833 +#: usr/local/www/services_dhcp.php:1152 usr/local/www/services_dhcp.php:1152 +#: usr/local/www/services_dhcpv6.php:833 +msgid "System: General setup" +msgstr "システム:一般的ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—" + +#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dhcpv6.php:791 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886 +#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/services_dhcp.php:1153 usr/local/www/services_dhcp.php:1153 +#: usr/local/www/services_dhcpv6.php:834 +msgid "(or the" +msgstr "(ã¾ãŸã¯" + +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792 +#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887 +#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818 +#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835 +#: usr/local/www/services_dhcp.php:1154 usr/local/www/services_dhcp.php:1154 +#: usr/local/www/services_dhcpv6.php:835 +msgid "if enabled)" +msgstr "有効ãªå ´åˆï¼‰" + +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792 +#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887 +#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818 +#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835 +#: usr/local/www/services_dhcp.php:1154 usr/local/www/services_dhcp.php:1154 +#: usr/local/www/services_dhcpv6.php:835 +msgid "will be assigned to clients by the DHCP server." +msgstr "DHCPサーãƒã«ã‚ˆã£ã¦ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ã€‚" + +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890 +#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcpv6.php:821 +#: usr/local/www/services_dhcp.php:1137 usr/local/www/services_dhcpv6.php:838 +#: usr/local/www/services_dhcp.php:1157 usr/local/www/services_dhcp.php:1157 +#: usr/local/www/services_dhcpv6.php:838 +msgid "The DHCP lease table can be viewed on the" +msgstr "DHCPリーステーブルã«ã¯ã€ä¸Šã§é–²è¦§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890 +#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcp.php:1137 +#: usr/local/www/services_dhcp.php:1157 usr/local/www/services_dhcp.php:1157 +msgid "Status: DHCP leases" +msgstr "ステータス: DHCPリース" + +#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:796 +#: usr/local/www/services_dhcp.php:921 usr/local/www/services_dhcpv6.php:891 +#: usr/local/www/services_dhcp.php:1125 usr/local/www/services_dhcpv6.php:822 +#: usr/local/www/services_dhcp.php:1138 usr/local/www/services_dhcpv6.php:839 +#: usr/local/www/services_dhcp.php:1158 usr/local/www/services_dhcp.php:1158 +#: usr/local/www/services_dhcpv6.php:839 +msgid "page." +msgstr "ページ。" + +#: usr/local/www/services_dhcp_edit.php:116 +#: usr/local/www/services_dhcpv6_edit.php:113 +#: usr/local/www/services_dhcpv6_edit.php:115 +#: usr/local/www/services_dhcp_edit.php:118 +#: usr/local/www/services_dhcpv6_edit.php:118 +#: usr/local/www/services_dhcp_edit.php:152 +#: usr/local/www/services_dhcpv6_edit.php:118 +#: usr/local/www/services_dhcp_edit.php:152 +msgid "The hostname cannot end with a hyphen according to RFC952" +msgstr "ホストåã¯ã€ RFC952ã«å¾“ã£ã¦ãƒã‚¤ãƒ•ンã§çµ‚了ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/services_dhcp_edit.php:121 +#: usr/local/www/services_dhcpv6_edit.php:118 +#: usr/local/www/services_dhcpv6_edit.php:120 +#: usr/local/www/services_dhcp_edit.php:123 +#: usr/local/www/services_dhcpv6_edit.php:123 +#: usr/local/www/services_dhcp_edit.php:157 +#: usr/local/www/services_dhcpv6_edit.php:123 +#: usr/local/www/services_dhcp_edit.php:157 +msgid "" +"A valid hostname is specified, but the domain name part should be omitted" +msgstr "「有効ãªãƒ›ã‚¹ãƒˆåãŒæŒ‡å®šã•れã¦ã„ã‚‹ãŒã€ãƒ‰ãƒ¡ã‚¤ãƒ³åã®éƒ¨åˆ†ã¯çœç•¥ã•れるã¹ã" + +#: usr/local/www/services_dhcp_edit.php:132 +#: usr/local/www/services_dhcp_edit.php:134 +#: usr/local/www/services_dhcp_edit.php:168 +#: usr/local/www/services_dhcp_edit.php:168 +msgid "Static ARP is enabled. You must specify an IP address." +msgstr "スタティックARPãŒæœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚ã‚ãªãŸã¯ã€ IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp_edit.php:141 +#: usr/local/www/services_dhcp_edit.php:143 +#: usr/local/www/services_dhcp_edit.php:177 +#: usr/local/www/services_dhcp_edit.php:177 +msgid "This Hostname, IP or MAC address already exists." +msgstr "ã“ã®ãƒ›ã‚¹ãƒˆå〠IPアドレスã¾ãŸã¯MACアドレスãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_dhcp_edit.php:152 +#: usr/local/www/services_dhcp_edit.php:154 +#: usr/local/www/services_dhcp_edit.php:188 +#: usr/local/www/services_dhcp_edit.php:188 +#, php-format +msgid "The IP address must not be within the DHCP range for this interface." +msgstr "IPアドレスã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®DHCP範囲内ã«ã‚ã£ã¦ã¯ãªã‚‰ãªã„。" + +#: usr/local/www/services_dhcp_edit.php:159 +#: usr/local/www/services_dhcp_edit.php:161 +#: usr/local/www/services_dhcp_edit.php:202 +#: usr/local/www/services_dhcp_edit.php:202 +#, php-format +msgid "The IP address must lie in the %s subnet." +msgstr "IPアドレスã¯ã€ %sサブãƒãƒƒãƒˆå†…ã«ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/services_dhcp_edit.php:193 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dhcp_edit.php:301 +msgid "Edit static mapping" +msgstr "é™çš„マッピングを編集" + +#: usr/local/www/services_dhcp_edit.php:204 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/services_dhcp_edit.php:206 +#: usr/local/www/services_dhcp_edit.php:334 +#: usr/local/www/services_dhcp_edit.php:334 +msgid "Static DHCP Mapping" +msgstr "é™çš„DHCPマッピング" + +#: usr/local/www/services_dhcp_edit.php:215 +#: usr/local/www/services_dhcp_edit.php:218 +#: usr/local/www/services_dhcp_edit.php:217 +#: usr/local/www/services_dhcp_edit.php:345 +#: usr/local/www/services_captiveportal_mac_edit.php:188 +#: usr/local/www/services_dhcp_edit.php:345 +#: usr/local/www/services_captiveportal_mac_edit.php:188 +msgid "Copy my MAC address" +msgstr "ç§ã®MACアドレスをコピーã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcp_edit.php:217 +#: usr/local/www/services_dhcp_edit.php:220 +#: usr/local/www/services_dhcp_edit.php:219 +#: usr/local/www/services_dhcp_edit.php:347 +#: usr/local/www/services_dhcp_edit.php:347 +msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx" +msgstr "次ã®å½¢å¼ã§MACアドレスを入力ã—ã¦ãã ã•ã„: XX : XX : XX : XX : XX : XX" + +#: usr/local/www/services_dhcp_edit.php:225 +#: usr/local/www/services_dhcp_edit.php:228 +msgid "" +"If no IP address is given, one will be dynamically allocated from the pool." +msgstr "IPã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã€ 〠1ã¯ã€å‹•çš„ã«ãƒ—ールã‹ã‚‰å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚" + +#: usr/local/www/services_dhcp_edit.php:231 +#: usr/local/www/services_dhcpv6_edit.php:208 +#: usr/local/www/services_dhcpv6_edit.php:211 +#: usr/local/www/services_dhcp_edit.php:234 +#: usr/local/www/services_dhcpv6_edit.php:213 +#: usr/local/www/services_dhcp_edit.php:236 +#: usr/local/www/services_dhcpv6_edit.php:216 +#: usr/local/www/services_dhcp_edit.php:364 +#: usr/local/www/services_dhcpv6_edit.php:216 +#: usr/local/www/services_dhcp_edit.php:364 +msgid "Name of the host, without domain part." +msgstr "ドメイン部分ãªã—ã§ã€ãƒ›ã‚¹ãƒˆã®åå‰ã€‚" + +#: usr/local/www/services_dhcp_relay.php:72 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/services_dhcp_relay.php:72 +msgid "Destination Server" +msgstr "先サーãƒ" + +#: usr/local/www/services_dhcp_relay.php:80 +msgid "A valid Destination Server IP address must be specified." +msgstr "有効ãªå®›å…ˆã‚µãƒ¼ãƒã®IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp_relay.php:100 usr/local/www/fbegin.inc:122 +#: usr/local/www/status_services.php:295 +#: usr/local/www/widgets/widgets/services_status.widget.php:100 +#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:278 +#: usr/local/www/fbegin.inc:148 usr/local/www/fbegin.inc:140 +#: etc/inc/service-utils.inc:277 etc/inc/service-utils.inc:294 +#: usr/local/www/fbegin.inc:140 usr/local/www/services_dhcp_relay.php:100 +#: etc/inc/service-utils.inc:294 +msgid "DHCP Relay" +msgstr "DHCPリレー" + +#: usr/local/www/services_dhcp_relay.php:144 +#: usr/local/www/services_dhcp_relay.php:145 +#: usr/local/www/services_dhcp_relay.php:145 +msgid "DHCP Relay configuration" +msgstr "DHCPリレーã®è¨­å®š" + +#: usr/local/www/services_dhcp_relay.php:150 +#: usr/local/www/services_dhcp_relay.php:151 +#: usr/local/www/services_dhcp_relay.php:151 +#, php-format +msgid "Enable DHCP relay on interface" +msgstr "インターフェイス上ã§DHCPリレーを有効ã«ã™ã‚‹" + +#: usr/local/www/services_dhcp_relay.php:175 +#: usr/local/www/services_dhcpv6_relay.php:176 +#: usr/local/www/services_dhcp_relay.php:176 +#: usr/local/www/services_dhcpv6_relay.php:177 +#: usr/local/www/services_dhcpv6_relay.php:177 +#: usr/local/www/services_dhcp_relay.php:176 +msgid "Append circuit ID and agent ID to requests" +msgstr "è¦æ±‚ã«å›žç·šIDãŠã‚ˆã³ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆIDを追加" + +#: usr/local/www/services_dhcp_relay.php:176 +#: usr/local/www/services_dhcp_relay.php:177 +#: usr/local/www/services_dhcp_relay.php:177 +#, php-format +msgid "" +"If this is checked, the DHCP relay will append the circuit ID (%s interface " +"number) and the agent ID to the DHCP request." +msgstr "DHCPè¦æ±‚ã«"(番å·ã¨ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆIDãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ DHCPリレーã¯ã€å›žç·šID %sインターフェース)を追加ã—ã¾ã™ã€ 。" + +#: usr/local/www/services_dhcp_relay.php:179 +#: usr/local/www/services_dhcpv6_relay.php:180 +#: usr/local/www/services_dhcp_relay.php:180 +#: usr/local/www/services_dhcpv6_relay.php:181 +#: usr/local/www/services_dhcpv6_relay.php:181 +#: usr/local/www/services_dhcp_relay.php:180 +msgid "Destination server" +msgstr "é€ä¿¡å…ˆã‚µãƒ¼ãƒãƒ¼" + +#: usr/local/www/services_dhcp_relay.php:183 +#: usr/local/www/services_dhcp_relay.php:184 +#: usr/local/www/services_dhcp_relay.php:184 +msgid "" +"This is the IP address of the server to which DHCP requests are relayed. You " +"can enter multiple server IP addresses, separated by commas. Select "Proxy " +"requests to DHCP server on WAN subnet" to relay DHCP packets to the server " +"that was used on the WAN interface." +msgstr "「ã“れã¯DHCPè¦æ±‚を中継先ã®ã‚µãƒ¼ãƒãƒ¼ã®IPアドレスã§ã™ã€‚ã‚ãªãŸã¯ "カンマã§åŒºåˆ‡ã£ã¦è¤‡æ•°ã®ã‚µãƒ¼ãƒãƒ¼ã®IPアドレスをã€å…¥åŠ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ WANインターフェイス上ã§ä½¿ç”¨ã•れãŸã€Œã‚µãƒ¼ãƒã«DHCPパケットを中継ã™ã‚‹ã€ŒWANサブãƒãƒƒãƒˆä¸Šã®DHCPサーãƒãƒ¼ã‚’「プロキシã€ã®è¦æ±‚ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/services_dnsmasq.php:80 usr/local/www/services_dnsmasq.php:84 +#: usr/local/www/services_dnsmasq.php:86 +#: usr/local/www/services_dnsmasq.php:107 +#: usr/local/www/services_dnsmasq.php:107 +msgid "Invalid custom options" +msgstr "無効ãªã‚«ã‚¹ã‚¿ãƒ ã‚ªãƒ—ション" + +#: usr/local/www/services_dnsmasq.php:147 +#: usr/local/www/services_dnsmasq.php:148 +#: usr/local/www/services_dnsmasq.php:152 +#: usr/local/www/services_dnsmasq.php:154 +#: usr/local/www/services_dnsmasq.php:175 +#: usr/local/www/services_dnsmasq.php:175 +msgid "The DNS forwarder configuration has been changed" +msgstr "DNSフォワーダã®è¨­å®šãŒå¤‰æ›´ã•れã¾ã—ãŸ" + +#: usr/local/www/services_dnsmasq.php:151 +#: usr/local/www/services_dnsmasq.php:152 +#: usr/local/www/services_dnsmasq.php:156 +#: usr/local/www/services_dnsmasq.php:158 +#: usr/local/www/services_dnsmasq.php:179 +#: usr/local/www/services_dnsmasq.php:179 +msgid "General DNS Forwarder Options" +msgstr "一般的ãªDNSã®ãƒ•ォワーダオプション" + +#: usr/local/www/services_dnsmasq.php:157 +#: usr/local/www/services_dnsmasq.php:158 +#: usr/local/www/services_dnsmasq.php:162 +#: usr/local/www/services_dnsmasq.php:164 +#: usr/local/www/services_dnsmasq.php:185 +#: usr/local/www/services_dnsmasq.php:185 +msgid "Enable DNS forwarder" +msgstr "DNSフォワーダを有効ã«ã™ã‚‹" + +#: usr/local/www/services_dnsmasq.php:161 +#: usr/local/www/services_unbound.php:211 +#: usr/local/www/services_dnsmasq.php:162 +#: usr/local/www/services_dnsmasq.php:166 +#: usr/local/www/services_dnsmasq.php:168 +#: usr/local/www/services_dnsmasq.php:189 +#: usr/local/www/services_dnsmasq.php:189 +msgid "DHCP Registration" +msgstr "DHCP登録" + +#: usr/local/www/services_dnsmasq.php:164 +#: usr/local/www/services_dnsmasq.php:165 +#: usr/local/www/services_dnsmasq.php:169 +#: usr/local/www/services_dnsmasq.php:171 +#: usr/local/www/services_dnsmasq.php:192 +#: usr/local/www/services_dnsmasq.php:192 +msgid "Register DHCP leases in DNS forwarder" +msgstr "レジスタDHCPã¯DNSフォワーダ内ã®ãƒªãƒ¼ã‚¹" + +#: usr/local/www/services_dnsmasq.php:165 +#: usr/local/www/services_dnsmasq.php:166 +#: usr/local/www/services_dnsmasq.php:170 +#: usr/local/www/services_dnsmasq.php:172 +#: usr/local/www/services_dnsmasq.php:193 +#: usr/local/www/services_dnsmasq.php:193 +#, php-format +msgid "" +"If this option is set, then machines that specify their hostname when " +"requesting a DHCP lease will be registered in the DNS forwarder, so that " +"their name can be resolved. You should also set the domain in %sSystem: " +"General setup%s to the proper value." +msgstr "「ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ã¨ã彼らã®ãƒ›ã‚¹ãƒˆåを指定ã—ã¦ãƒžã‚·ãƒ³""自分ã®åå‰ã‚’入手ã—%sSystemドメインを設定ã™ã‚‹å¿…è¦ãŒè§£æ±ºã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ : "よã†ã«DHCPãƒªãƒ¼ã‚¹ã‚’è¦æ±‚ã™ã‚‹ã«ã¯ã€ DNSフォワーダã«ç™»éŒ²ã•れã¾ã™ä¸€èˆ¬setup%sを。é©åˆ‡ãªå€¤ã«ã­ã€‚" + +#: usr/local/www/services_dnsmasq.php:173 +#: usr/local/www/services_unbound.php:223 +#: usr/local/www/services_dnsmasq.php:174 +#: usr/local/www/services_dnsmasq.php:178 +#: usr/local/www/services_dnsmasq.php:180 +#: usr/local/www/services_dnsmasq.php:201 +#: usr/local/www/services_dnsmasq.php:201 +msgid "Static DHCP" +msgstr "é™çš„DHCP" + +#: usr/local/www/services_dnsmasq.php:176 +#: usr/local/www/services_dnsmasq.php:177 +#: usr/local/www/services_dnsmasq.php:181 +#: usr/local/www/services_dnsmasq.php:183 +#: usr/local/www/services_dnsmasq.php:204 +#: usr/local/www/services_dnsmasq.php:204 +msgid "Register DHCP static mappings in DNS forwarder" +msgstr "DNSフォワーダã§DHCPã®é™çš„マッピングを登録" + +#: usr/local/www/services_dnsmasq.php:177 +#: usr/local/www/services_dnsmasq.php:178 +#: usr/local/www/services_dnsmasq.php:182 +#: usr/local/www/services_dnsmasq.php:184 +#: usr/local/www/services_dnsmasq.php:205 +#: usr/local/www/services_dnsmasq.php:205 +#, php-format +msgid "" +"If this option is set, then DHCP static mappings will be registered in the " +"DNS forwarder, so that their name can be resolved. You should also set the " +"domain in %sSystem: General setup%s to the proper value." +msgstr "ãã®åå‰ãŒè§£æ±ºã§ãるよã†ã«ã€ DNSフォワーダã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€ DHCPã®é™çš„マッピングラーニング登録ã•れる〠。一般setup%s驿­£å€¤ã«ï¼šã¾ãŸ%sSystemã®ã€Œãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dnsmasq.php:184 +#: usr/local/www/services_unbound.php:234 +#: usr/local/www/services_dnsmasq.php:185 +#: usr/local/www/services_dnsmasq.php:189 +#: usr/local/www/services_dnsmasq.php:191 +#: usr/local/www/services_dnsmasq.php:212 +#: usr/local/www/services_dnsmasq.php:212 +msgid "Prefer DHCP" +msgstr "DHCPを好む" + +#: usr/local/www/services_dnsmasq.php:187 +#: usr/local/www/services_unbound.php:237 +#: usr/local/www/services_dnsmasq.php:188 +#: usr/local/www/services_dnsmasq.php:192 +#: usr/local/www/services_dnsmasq.php:194 +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_dnsmasq.php:215 +msgid "Resolve DHCP mappings first" +msgstr "最åˆã®DHCPマッピングを解決ã™ã‚‹" + +#: usr/local/www/services_dnsmasq.php:188 +#: usr/local/www/services_unbound.php:238 +#: usr/local/www/services_dnsmasq.php:189 +#: usr/local/www/services_dnsmasq.php:193 +#: usr/local/www/services_dnsmasq.php:195 +#: usr/local/www/services_dnsmasq.php:216 +#: usr/local/www/services_dnsmasq.php:216 +#, php-format +msgid "" +"If this option is set, then DHCP mappings will be resolved before the manual " +"list of names below. This only affects the name given for a reverse lookup " +"(PTR)." +msgstr "下ã®åå‰ã®ãƒªã‚¹ãƒˆã€ã«ã¯ã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ DHCPã®ãƒžãƒƒãƒ”ングã¯ã€ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã®å‰ã«è§£æ±ºã•れã¾ã™ã€ 。ã“れã¯ã€é€†å¼•ã〠( PTR ï¼‰ã«æŒ‡å®šã•れãŸåå‰ã«å½±éŸ¿ã‚’与ãˆã¾ã™ã€‚" + +#: usr/local/www/services_dnsmasq.php:202 +#: usr/local/www/services_dnsmasq.php:203 +#: usr/local/www/services_dnsmasq.php:228 +#: usr/local/www/services_dnsmasq.php:241 +#: usr/local/www/services_dnsmasq.php:305 +#: usr/local/www/services_dnsmasq.php:305 +msgid "" +"Enter any additional options you would like to add to the dnsmasq " +"configuration here, separated by a space or newline" +msgstr "以下ã«è¨­å®šã€ç©ºç™½ã‚„改行ã§åŒºåˆ‡ã‚‰ã‚ŒãŸã€Œã‚ãªãŸãŒDNSMASQã«è¿½åŠ ã™ã‚‹è¿½åŠ ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’å…¥åŠ›ã—ã¦ãã ã•ã„ "" + +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_dnsmasq.php:216 +#: usr/local/www/services_dnsmasq.php:241 +#: usr/local/www/services_dnsmasq.php:254 +#: usr/local/www/services_dnsmasq.php:318 +#: usr/local/www/services_dnsmasq.php:318 +#, php-format +msgid "" +"If the DNS forwarder is enabled, the DHCP service (if enabled) will " +"automatically serve the LAN IP address as a DNS server to DHCP clients so " +"they will use the forwarder. The DNS forwarder will use the DNS servers " +"entered in %sSystem: General setup%s or those obtained via DHCP or PPP on " +"WAN if the "Allow DNS server list to be overridden by DHCP/PPP on " +"WAN" is checked. If you don't use that option (or if you use a static " +"IP address on WAN), you must manually specify at least one DNS server on the " +"%sSystem:General setup%s page." +msgstr "「 DNSãƒ•ã‚©ãƒ¯ãƒ¼ãƒ€ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ DHCPサービス(有効ãªå ´åˆï¼‰ãŒã—ã¾ã™ã€ãŒè‡ªå‹•çš„ã®ã§ã€ã€Œå½¼ã‚‰ã¯ãƒ•ォワーダを使用ã—ã¾ã™ã€‚ DNSフォワーダã¯ã€ DNSサーãƒãƒ¼ã‚’使用ã—ã¾ã™"DHCPクライアントã«DNSサーãƒãƒ¼ã¨ã—ã¦LAN IPアドレスをæä¾›ã™ã‚‹ã®%sã«å…¥åŠ›ã•れãŸã€‚ ■システム:一般setup%sã¾ãŸã¯è¨±å¯ã•れã¦ã„ã‚‹DNSサーãƒãƒªã‚¹ãƒˆã€ŒWANã€ã§ã®DHCP / PPPã«ã‚ˆã£ã¦ç„¡åйã«ã•れるよã†ã«ã€ŒIF WAN ã€ãŒãƒã‚§ãƒƒã‚¯ã•れã¦ã„る上ã§ã®DHCPã‚„PPPを介ã—ã¦å¾—られãŸã‚‚ã®ã€‚ã‚ãªãŸã¯ãã®ã‚ªãƒ—ションを使用ã—ãªã„(ã¾ãŸã¯é™çš„使用ã™ã‚‹å ´åˆ%sSystem 「WAN上ã®IPアドレス)ã¯ã€æ‰‹å‹•ã§å°‘ãªãã¨ã‚‚1ã¤ã®DNSサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ã¨ã—ã¾ã™ã€‚全般setup%sページ。" + +#: usr/local/www/services_dnsmasq.php:231 +#: usr/local/www/services_unbound.php:267 +#: usr/local/www/services_dnsmasq.php:232 +#: usr/local/www/services_dnsmasq.php:257 +#: usr/local/www/services_dnsmasq.php:270 +#: usr/local/www/services_dnsmasq.php:334 +#: usr/local/www/services_dnsmasq.php:334 +msgid "Host Overrides" +msgstr "オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’ホストã™ã‚‹" + +#: usr/local/www/services_dnsmasq.php:235 +#: usr/local/www/services_unbound.php:271 +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_dnsmasq.php:261 +#: usr/local/www/services_dnsmasq.php:274 +#: usr/local/www/services_dnsmasq.php:338 +#: usr/local/www/services_dnsmasq.php:338 +msgid "" +"Entries in this section override individual results from the forwarders." +msgstr "「ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¨ãƒ³ãƒˆãƒªã¯ã€ãƒ•ォワーダーã‹ã‚‰ã®å€‹ã€…ã®çµæžœã‚’上書ãã—ã¾ã™ã€‚" + +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_unbound.php:272 +#: usr/local/www/services_dnsmasq.php:237 +#: usr/local/www/services_dnsmasq.php:262 +#: usr/local/www/services_dnsmasq.php:275 +#: usr/local/www/services_dnsmasq.php:339 +#: usr/local/www/services_dnsmasq.php:339 +msgid "Use these for changing DNS results or for adding custom DNS records." +msgstr "DNSã®çµæžœã‚’​​変更ã™ã‚‹ãŸã‚ã€ã¾ãŸã¯ã‚«ã‚¹ã‚¿ãƒ DNSレコードを追加ã™ã‚‹ãŸã‚ã«ã“れらを使用ã—ã¦ãã ã•ã„。" + +#: usr/local/www/services_dnsmasq.php:299 +#: usr/local/www/services_dnsmasq.php:320 +#: usr/local/www/services_unbound.php:335 +#: usr/local/www/services_dnsmasq.php:321 +#: usr/local/www/services_dnsmasq.php:346 +#: usr/local/www/services_dnsmasq.php:359 +#: usr/local/www/services_dnsmasq.php:423 +#: usr/local/www/services_dnsmasq.php:423 +msgid "Domain Overrides" +msgstr "ドメインオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰" + +#: usr/local/www/services_dnsmasq.php:303 +#: usr/local/www/services_dnsmasq.php:324 +#: usr/local/www/services_unbound.php:339 +#: usr/local/www/services_dnsmasq.php:325 +#: usr/local/www/services_dnsmasq.php:350 +#: usr/local/www/services_dnsmasq.php:363 +#: usr/local/www/services_dnsmasq.php:427 +#: usr/local/www/services_dnsmasq.php:427 +msgid "" +"Entries in this area override an entire domain by specifying an " +"authoritative DNS server to be queried for that domain." +msgstr "ãã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’照会ã™ã‚‹æ¨©é™ã‚’æŒã¤DNSサーãƒãƒ¼ã€ ã€ã“ã®ã‚¨ãƒªã‚¢å†…ã®ã‚¨ãƒ³ãƒˆãƒªã¯ã€æŒ‡å®šã™ã‚‹ã“ã¨ã§ã€ãƒ‰ãƒ¡ã‚¤ãƒ³å…¨ä½“を上書ãã™ã‚‹ã€ 。" + +#: usr/local/www/services_dnsmasq.php:337 +#: usr/local/www/services_dnsmasq.php:358 +#: usr/local/www/services_unbound.php:373 +#: usr/local/www/services_dnsmasq.php:359 +#: usr/local/www/services_dnsmasq.php:384 +#: usr/local/www/services_dnsmasq.php:397 +#: usr/local/www/services_dnsmasq.php:461 +#: usr/local/www/services_dnsmasq.php:461 +msgid "Do you really want to delete this domain override?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/services_dnsmasq_edit.php:100 +#: usr/local/www/services_dnsmasq_edit.php:138 +#: usr/local/www/services_dnsmasq_edit.php:138 +msgid "This host/domain already exists." +msgstr "ã“ã®ãƒ›ã‚¹ãƒˆ/ドメインãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dnsmasq_edit.php:166 +msgid "Edit host" +msgstr "編集ホスト" + +#: usr/local/www/services_dnsmasq_edit.php:138 +#: usr/local/www/services_dnsmasq_edit.php:193 +#: usr/local/www/services_dnsmasq_edit.php:194 +#: usr/local/www/services_dnsmasq_edit.php:194 +msgid "Edit DNS Forwarder entry" +msgstr "編集ã®DNSフォワーダエントリ" + +#: usr/local/www/services_dnsmasq_edit.php:144 +#: usr/local/www/services_dnsmasq_edit.php:199 +#: usr/local/www/services_dnsmasq_edit.php:200 +#: usr/local/www/services_dnsmasq_edit.php:200 +msgid "Name of the host, without domain part" +msgstr "ドメイン部分ãªã—ã§ã€ãƒ›ã‚¹ãƒˆã®åå‰" + +#: usr/local/www/services_dnsmasq_edit.php:146 +#: usr/local/www/services_dnsmasq_edit.php:201 +#: usr/local/www/services_dnsmasq_edit.php:202 +#: usr/local/www/services_dnsmasq_edit.php:202 +msgid "myhost" +msgstr "myhostã«" + +#: usr/local/www/services_dnsmasq_edit.php:152 +#: usr/local/www/services_dnsmasq_edit.php:207 +#: usr/local/www/services_dnsmasq_edit.php:208 +#: usr/local/www/services_dnsmasq_edit.php:208 +msgid "Domain of the host" +msgstr "ホストã®ãƒ‰ãƒ¡ã‚¤ãƒ³" + +#: usr/local/www/services_dnsmasq_edit.php:153 +#: usr/local/www/services_dnsmasq_edit.php:208 +#: usr/local/www/services_dnsmasq_edit.php:209 +#: usr/local/www/services_dnsmasq_edit.php:209 +msgid "example.com" +msgstr "example.com" + +#: usr/local/www/services_dnsmasq_edit.php:159 +#: usr/local/www/services_dnsmasq_edit.php:214 +#: usr/local/www/services_dnsmasq_edit.php:215 +#: usr/local/www/services_dnsmasq_edit.php:215 +msgid "IP address of the host" +msgstr "ホストã®IPアドレス" + +#: usr/local/www/diag_pkglogs.php:81 usr/local/www/diag_pkglogs.php:81 +msgid "Package logs" +msgstr "パッケージログ" + +#: usr/local/www/diag_pkglogs.php:92 usr/local/www/diag_pkglogs.php:92 +msgid "No packages with logging facilities are currently installed." +msgstr "ロギング機能ã¨ã®ãƒ‘ッケージã¯ç¾åœ¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/diag_pkglogs.php:103 usr/local/www/diag_pkglogs.php:105 +#: usr/local/www/diag_pkglogs.php:103 usr/local/www/diag_pkglogs.php:105 +#, php-format +msgid "%s" +msgstr "%s" + +#: usr/local/www/diag_pkglogs.php:118 usr/local/www/diag_pkglogs.php:118 +#, php-format +msgid "Last %1$s %2$s log entries" +msgstr "最後ã¯%1$s %2$sログエントリ" + +#: usr/local/www/status.php:110 usr/local/www/status.php:111 +#: usr/local/www/status.php:111 +msgid "This status page includes the following information" +msgstr "ã“ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹Â·ãƒšãƒ¼ã‚¸ã«ã¯ã€ä»¥ä¸‹ã®æƒ…å ±ãŒå«ã¾ã‚Œã¦ã„ã¾ã™" + +#: usr/local/www/status.php:225 usr/local/www/status.php:226 +#: usr/local/www/status.php:230 usr/local/www/status.php:230 +msgid "" +"Note: make sure to remove any sensitive information (passwords, maybe also " +"IP addresses) before posting information from this page in public places " +"(like mailing lists)" +msgstr "(メーリングリストã®ã‚ˆã†ãªï¼‰ 「公共ã®å ´ã§ã€ã“ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ã®æƒ…報を投稿ã™ã‚‹å‰ã«ã€Œ ( IPアドレス注機密情報ã€ãƒ‘スワードã€å¤šåˆ†ã‚‚)を除去ã™ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„ã€" + +#: usr/local/www/status.php:228 usr/local/www/status.php:229 +#: usr/local/www/status.php:233 usr/local/www/status.php:233 +msgid "Passwords in config.xml have been automatically removed" +msgstr "config.xml内ã®ãƒ‘スワードã¯è‡ªå‹•çš„ã«å‰Šé™¤ã•れã¾ã—ãŸ" + +#: usr/local/www/bandwidth_by_ip.php:54 usr/local/www/bandwidth_by_ip.php:67 +#: usr/local/www/bandwidth_by_ip.php:61 usr/local/www/bandwidth_by_ip.php:103 +#: usr/local/www/bandwidth_by_ip.php:103 +msgid "no info" +msgstr "情報ãªã—" + +#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_pptp.php:353 +#: usr/local/www/vpn_l2tp.php:73 usr/local/www/vpn_l2tp.php:321 +#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_pppoe_edit.php:424 +#: usr/local/www/vpn_pppoe_edit.php:425 usr/local/www/vpn_pptp.php:355 +#: usr/local/www/vpn_l2tp.php:74 usr/local/www/vpn_pppoe_edit.php:428 +#: usr/local/www/vpn_pptp.php:358 usr/local/www/vpn_l2tp.php:74 +#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_pppoe_edit.php:428 +#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_pptp.php:358 +msgid "Server address" +msgstr "サーãƒãƒ¼ã®ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_l2tp.php:73 +#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_l2tp.php:74 +#: usr/local/www/vpn_l2tp.php:74 usr/local/www/vpn_pppoe_edit.php:112 +#: usr/local/www/vpn_pptp.php:82 +msgid "Remote start address" +msgstr "リモートスタートアドレス" + +#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_l2tp.php:78 +#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_l2tp.php:79 +#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pppoe_edit.php:117 +#: usr/local/www/vpn_pptp.php:87 +msgid "RADIUS server address" +msgstr "RADIUSサーãƒã®IPアドレス" + +#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_pptp.php:432 +#: usr/local/www/vpn_l2tp.php:78 usr/local/www/vpn_l2tp.php:428 +#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_pptp.php:434 +#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pptp.php:437 +#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pppoe_edit.php:117 +#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_pptp.php:437 +msgid "RADIUS shared secret" +msgstr "RADIUSã®å…±æœ‰ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ" + +#: usr/local/www/vpn_pptp.php:93 usr/local/www/vpn_l2tp.php:84 +#: usr/local/www/vpn_pppoe_edit.php:123 usr/local/www/vpn_l2tp.php:85 +#: usr/local/www/vpn_l2tp.php:85 usr/local/www/vpn_pppoe_edit.php:123 +#: usr/local/www/vpn_pptp.php:93 +msgid "A valid server address must be specified." +msgstr "有効ãªã‚µãƒ¼ãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_pptp.php:96 usr/local/www/vpn_l2tp.php:87 +#: usr/local/www/vpn_pppoe_edit.php:125 usr/local/www/vpn_l2tp.php:88 +#: usr/local/www/vpn_l2tp.php:91 usr/local/www/vpn_pptp.php:99 +#: usr/local/www/vpn_l2tp.php:91 usr/local/www/vpn_pppoe_edit.php:125 +#: usr/local/www/vpn_pptp.php:99 +msgid "A valid remote start address must be specified." +msgstr "有効ãªãƒªãƒ¢ãƒ¼ãƒˆã‚¹ã‚¿ãƒ¼ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_pptp.php:99 usr/local/www/vpn_l2tp.php:90 +#: usr/local/www/vpn_pppoe_edit.php:127 usr/local/www/vpn_l2tp.php:91 +#: usr/local/www/vpn_l2tp.php:94 usr/local/www/vpn_pptp.php:102 +#: usr/local/www/vpn_l2tp.php:94 usr/local/www/vpn_pppoe_edit.php:127 +#: usr/local/www/vpn_pptp.php:102 +msgid "A valid RADIUS server address must be specified." +msgstr "有効ãªRADIUSサーãƒã®IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_pptp.php:108 usr/local/www/vpn_l2tp.php:106 +#: usr/local/www/vpn_pppoe_edit.php:134 usr/local/www/vpn_l2tp.php:107 +#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_pptp.php:111 +#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_pppoe_edit.php:134 +#: usr/local/www/vpn_pptp.php:111 +msgid "The specified server address lies in the remote subnet." +msgstr "指定ã•れãŸã‚µãƒ¼ãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ–ãƒãƒƒãƒˆã«ã‚る。" + +#: usr/local/www/vpn_pptp.php:112 usr/local/www/vpn_l2tp.php:109 +#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_l2tp.php:113 +#: usr/local/www/vpn_pptp.php:115 usr/local/www/vpn_l2tp.php:113 +#: usr/local/www/vpn_pptp.php:115 +msgid "The specified server address is equal to the LAN interface address." +msgstr "指定ã•れãŸã‚µãƒ¼ãƒã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€LANインターフェイスã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨åŒã˜ã§ã‚る。" + +#: usr/local/www/vpn_pptp.php:117 usr/local/www/vpn_pptp.php:120 +#: usr/local/www/vpn_pptp.php:120 +msgid "PPTP redirection target address" +msgstr "PPTPリダイレクト先ã®ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/vpn_pptp.php:122 usr/local/www/vpn_pptp.php:125 +#: usr/local/www/vpn_pptp.php:125 +msgid "A valid target address must be specified." +msgstr "有効ãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users_edit.php:135 usr/local/www/vpn_pptp.php:196 +#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/vpn_pptp.php:196 +#: usr/local/www/vpn_pptp_users_edit.php:135 +msgid "VPN PPTP" +msgstr "ã®VPN ã€PPTP" + +#: usr/local/www/vpn_pptp.php:300 usr/local/www/vpn_pptp_users.php:89 +#: usr/local/www/vpn_l2tp.php:280 usr/local/www/vpn_l2tp_users.php:92 +#: usr/local/www/vpn_pptp.php:302 usr/local/www/vpn_l2tp_users.php:93 +#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_pptp_users.php:90 +#: usr/local/www/vpn_l2tp.php:284 usr/local/www/vpn_pptp.php:305 +#: usr/local/www/vpn_l2tp.php:284 usr/local/www/vpn_pptp_users.php:90 +#: usr/local/www/vpn_l2tp_users.php:93 usr/local/www/vpn_pptp.php:305 +msgid "Configuration" +msgstr "設定" + +#: usr/local/www/vpn_pptp.php:301 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users.php:90 +#: usr/local/www/system_authservers.php:421 +#: usr/local/www/system_groupmanager.php:240 +#: usr/local/www/system_groupmanager_addprivs.php:168 +#: usr/local/www/system_usermanager.php:440 +#: usr/local/www/system_usermanager_addprivs.php:167 +#: usr/local/www/system_usermanager_settings.php:113 +#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users.php:93 +#: usr/local/www/system_usermanager.php:438 +#: usr/local/www/system_groupmanager_addprivs.php:166 +#: usr/local/www/vpn_pptp.php:303 usr/local/www/vpn_l2tp_users.php:94 +#: usr/local/www/vpn_l2tp.php:282 usr/local/www/vpn_pptp_users.php:91 +#: usr/local/www/system_authservers.php:426 usr/local/www/vpn_l2tp.php:285 +#: usr/local/www/system_authservers.php:433 usr/local/www/vpn_pptp.php:306 +#: usr/local/www/system_usermanager_settings.php:115 +#: usr/local/www/vpn_l2tp.php:285 usr/local/www/system_groupmanager.php:240 +#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/vpn_pptp_users.php:91 +#: usr/local/www/system_usermanager_addprivs.php:167 +#: usr/local/www/vpn_l2tp_users.php:38 usr/local/www/vpn_l2tp_users.php:94 +#: usr/local/www/system_authservers.php:433 +#: usr/local/www/system_groupmanager_addprivs.php:166 +#: usr/local/www/vpn_pptp.php:306 +#: usr/local/www/system_usermanager_settings.php:115 +#: usr/local/www/system_usermanager.php:438 +msgid "Users" +msgstr "ユーザー" + +#: usr/local/www/vpn_pptp.php:320 usr/local/www/vpn_pptp.php:322 +#: usr/local/www/vpn_pptp.php:325 usr/local/www/vpn_pptp.php:325 +msgid "Redirect incoming PPTP connections to" +msgstr "ã¸ã®ç€ä¿¡PPTP接続をリダイレクト" + +#: usr/local/www/vpn_pptp.php:322 usr/local/www/vpn_pptp.php:324 +#: usr/local/www/vpn_pptp.php:327 usr/local/www/vpn_pptp.php:327 +msgid "PPTP redirection" +msgstr "PPTPã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ" + +#: usr/local/www/vpn_pptp.php:326 usr/local/www/vpn_pptp.php:328 +#: usr/local/www/vpn_pptp.php:331 usr/local/www/vpn_pptp.php:331 +msgid "" +"Enter the IP address of a host which will accept incoming PPTP connections" +msgstr "「ç€ä¿¡PPTP接続をå—ã‘入れるホストã®IPアドレスを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_pptp.php:332 usr/local/www/vpn_pptp.php:334 +#: usr/local/www/vpn_pptp.php:337 usr/local/www/vpn_pptp.php:337 +msgid "Enable PPTP server" +msgstr "PPTPサーãƒãƒ¼ã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/vpn_pptp.php:335 usr/local/www/vpn_pptp.php:337 +#: usr/local/www/vpn_pptp.php:340 usr/local/www/vpn_pptp.php:340 +msgid "No. PPTP users" +msgstr "番å·PPTPユーザー" + +#: usr/local/www/vpn_pptp.php:349 usr/local/www/vpn_pptp.php:351 +#: usr/local/www/vpn_pptp.php:354 usr/local/www/vpn_pptp.php:354 +msgid "Hint: 10 is ten PPTP clients" +msgstr "ヒント:10 10 PPTPクライアントã§ã‚ã‚‹" + +#: usr/local/www/vpn_pptp.php:357 usr/local/www/vpn_pptp.php:359 +#: usr/local/www/vpn_pptp.php:362 usr/local/www/vpn_pptp.php:362 +msgid "" +"Enter the IP address the PPTP server should give to clients for use as their " +""gateway"" +msgstr "「 「ゲートウェイã€ã®IPアドレスを入力ã—ã¦PPTPサーãƒãƒ¼ã¯ã€ãã®ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ä¸Žãˆã‚‹å¿…è¦ãŒã‚りã¾ã™ã€" + +#: usr/local/www/vpn_pptp.php:359 usr/local/www/vpn_l2tp.php:327 +#: usr/local/www/vpn_pppoe_edit.php:430 usr/local/www/vpn_pppoe_edit.php:431 +#: usr/local/www/vpn_pptp.php:361 usr/local/www/vpn_l2tp.php:328 +#: usr/local/www/vpn_l2tp.php:331 usr/local/www/vpn_pppoe_edit.php:434 +#: usr/local/www/vpn_pptp.php:364 usr/local/www/vpn_l2tp.php:331 +#: usr/local/www/vpn_pppoe_edit.php:434 usr/local/www/vpn_pptp.php:364 +msgid "Typically this is set to an unused IP just outside of the client range" +msgstr "一般的ã«ã€ã“れã¯å˜ãªã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç¯„å›²å¤–ã®æœªä½¿ç”¨ã®IPã«è¨­å®šã•れã¦ã„ã¾ã™" + +#: usr/local/www/vpn_pptp.php:362 usr/local/www/vpn_l2tp.php:330 +#: usr/local/www/vpn_pppoe_edit.php:433 usr/local/www/vpn_pppoe_edit.php:434 +#: usr/local/www/vpn_pptp.php:364 usr/local/www/vpn_l2tp.php:331 +#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_pppoe_edit.php:437 +#: usr/local/www/vpn_pptp.php:367 usr/local/www/vpn_l2tp.php:334 +#: usr/local/www/vpn_pppoe_edit.php:437 usr/local/www/vpn_pptp.php:367 +msgid "" +"NOTE: This should NOT be set to any IP address currently in use on this " +"firewall" +msgstr ""注:ã“れã¯ã€ã“ã®ä¸Šã§ç¾åœ¨ä½¿ç”¨ä¸­ã®ä»»æ„ã®IPアドレスã«è¨­å®šã—ãªã„ã§ãã ã•ã„ã€ãƒ•ァイアウォール" + +#: usr/local/www/vpn_pptp.php:365 usr/local/www/vpn_l2tp.php:333 +#: usr/local/www/vpn_pppoe_edit.php:436 usr/local/www/vpn_pppoe_edit.php:437 +#: usr/local/www/vpn_pptp.php:367 usr/local/www/vpn_pppoe_edit.php:440 +#: usr/local/www/vpn_pptp.php:370 usr/local/www/vpn_pppoe_edit.php:440 +#: usr/local/www/vpn_pptp.php:370 +msgid "Remote address range" +msgstr "リモートアドレス範囲" + +#: usr/local/www/vpn_pptp.php:370 usr/local/www/vpn_pptp.php:372 +#: usr/local/www/vpn_pptp.php:375 usr/local/www/vpn_pptp.php:375 +msgid "Specify the starting address for the client IP subnet" +msgstr "クライアントIPサブãƒãƒƒãƒˆã®é–‹å§‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã™ã‚‹" + +#: usr/local/www/vpn_pptp.php:373 usr/local/www/vpn_pptp.php:375 +#: usr/local/www/vpn_pptp.php:378 usr/local/www/vpn_pptp.php:378 +msgid "PPTP DNS Servers" +msgstr "PPTP DNSサーãƒ" + +#: usr/local/www/vpn_pptp.php:379 usr/local/www/vpn_pptp.php:381 +#: usr/local/www/vpn_pptp.php:384 usr/local/www/vpn_pptp.php:384 +msgid "primary and secondary DNS servers assigned to PPTP clients" +msgstr "PPTPクライアントã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒ—ライマリãŠã‚ˆã³ã‚»ã‚«ãƒ³ãƒ€ãƒªDNSサーãƒ" + +#: usr/local/www/vpn_pptp.php:382 usr/local/www/vpn_l2tp.php:404 +#: usr/local/www/vpn_pptp.php:384 usr/local/www/vpn_l2tp.php:405 +#: usr/local/www/vpn_l2tp.php:408 usr/local/www/vpn_pptp.php:387 +#: usr/local/www/vpn_l2tp.php:408 usr/local/www/vpn_pptp.php:387 +msgid "WINS Server" +msgstr "WINSサーãƒãƒ¼" + +#: usr/local/www/vpn_pptp.php:388 usr/local/www/vpn_l2tp.php:410 +#: usr/local/www/vpn_pppoe_edit.php:461 usr/local/www/vpn_pppoe_edit.php:462 +#: usr/local/www/vpn_pptp.php:390 usr/local/www/vpn_l2tp.php:411 +#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pptp.php:393 usr/local/www/vpn_l2tp.php:414 +#: usr/local/www/vpn_pppoe_edit.php:465 usr/local/www/vpn_pptp.php:393 +msgid "RADIUS" +msgstr "RADIUS" + +#: usr/local/www/vpn_pptp.php:391 usr/local/www/vpn_l2tp.php:413 +#: usr/local/www/vpn_pppoe_edit.php:464 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pptp.php:393 usr/local/www/vpn_l2tp.php:414 +#: usr/local/www/vpn_l2tp.php:417 usr/local/www/vpn_pppoe_edit.php:468 +#: usr/local/www/vpn_pptp.php:396 usr/local/www/vpn_l2tp.php:417 +#: usr/local/www/vpn_pppoe_edit.php:468 usr/local/www/vpn_pptp.php:396 +msgid "Use a RADIUS server for authentication" +msgstr "èªè¨¼ç”¨ã®RADIUSサーãƒã‚’使用" + +#: usr/local/www/vpn_pptp.php:392 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pppoe_edit.php:466 usr/local/www/vpn_pptp.php:394 +#: usr/local/www/vpn_pppoe_edit.php:469 usr/local/www/vpn_pptp.php:397 +#: usr/local/www/vpn_pppoe_edit.php:469 usr/local/www/vpn_pptp.php:397 +msgid "" +"When set, all users will be authenticated using the RADIUS server specified " +"below. The local user database will not be used" +msgstr "下ã®ã€Œè¨­å®šã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ‡å®šã•れãŸRADIUSサーãƒã‚’使用ã—ã¦èªè¨¼ã•れã¾ã™ã€ 。ローカルユーザデータベースãŒä½¿ç”¨ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“" + +#: usr/local/www/vpn_pptp.php:397 usr/local/www/vpn_l2tp.php:417 +#: usr/local/www/vpn_pppoe_edit.php:470 usr/local/www/vpn_pppoe_edit.php:471 +#: usr/local/www/vpn_pptp.php:399 usr/local/www/vpn_l2tp.php:418 +#: usr/local/www/vpn_l2tp.php:421 usr/local/www/vpn_pppoe_edit.php:474 +#: usr/local/www/vpn_pptp.php:402 usr/local/www/vpn_l2tp.php:421 +#: usr/local/www/vpn_pppoe_edit.php:474 usr/local/www/vpn_pptp.php:402 +msgid "Enable RADIUS accounting" +msgstr "RADIUSアカウンティングを有効ã«ã™ã‚‹" + +#: usr/local/www/vpn_pptp.php:398 usr/local/www/vpn_pppoe_edit.php:472 +#: usr/local/www/vpn_pppoe_edit.php:473 usr/local/www/vpn_pptp.php:400 +#: usr/local/www/vpn_pppoe_edit.php:476 usr/local/www/vpn_pptp.php:403 +#: usr/local/www/vpn_pppoe_edit.php:476 usr/local/www/vpn_pptp.php:403 +msgid "Sends accounting packets to the RADIUS server" +msgstr "RADIUSサーãƒã«ã‚¢ã‚«ã‚¦ãƒ³ãƒ†ã‚£ãƒ³ã‚°ãƒ‘ケットをé€ä¿¡ã—ã¾ã™" + +#: usr/local/www/vpn_pptp.php:401 usr/local/www/vpn_pptp.php:403 +#: usr/local/www/vpn_pptp.php:406 usr/local/www/vpn_pptp.php:406 +msgid "Secondary RADIUS server for failover authentication" +msgstr "フェイルオーãƒãƒ¼èªè¨¼ã®ãŸã‚ã®ã‚»ã‚«ãƒ³ãƒ€ãƒªRADIUSサーãƒ" + +#: usr/local/www/vpn_pptp.php:402 usr/local/www/vpn_pptp.php:404 +#: usr/local/www/vpn_pptp.php:407 usr/local/www/vpn_pptp.php:407 +msgid "" +"When set, all requests will go to the secondary server when primary fails" +msgstr "設定ã™ã‚‹ã¨ã€ãƒ—ライマリã«éšœå®³ãŒç™ºç”Ÿã—ãŸå ´åˆã€ ã€ã™ã¹ã¦ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ã‚»ã‚«ãƒ³ãƒ€ãƒªã‚µãƒ¼ãƒã«ç§»å‹•ã—ã¾ã™" + +#: usr/local/www/vpn_pptp.php:405 usr/local/www/vpn_pppoe_edit.php:492 +#: usr/local/www/vpn_pppoe_edit.php:493 usr/local/www/vpn_pptp.php:407 +#: usr/local/www/vpn_pppoe_edit.php:496 usr/local/www/vpn_pptp.php:410 +#: usr/local/www/vpn_pppoe_edit.php:496 usr/local/www/vpn_pptp.php:410 +msgid "RADIUS issued IPs" +msgstr "RADIUSã¯ã€ IPを発行" + +#: usr/local/www/vpn_pptp.php:406 usr/local/www/vpn_pptp.php:408 +#: usr/local/www/vpn_pptp.php:411 usr/local/www/vpn_pptp.php:411 +msgid "Issue IP addresses via RADIUS server" +msgstr "RADIUSサーãƒãƒ¼ã‚’経由ã—ã¦ç™ºè¡Œã™ã‚‹IPアドレス" + +#: usr/local/www/vpn_pptp.php:411 usr/local/www/vpn_pptp.php:413 +#: usr/local/www/vpn_pptp.php:416 usr/local/www/vpn_pptp.php:416 +msgid "RADIUS NAS IP" +msgstr "RADIUSã®NAS IP" + +#: usr/local/www/vpn_pptp.php:417 usr/local/www/vpn_pppoe_edit.php:485 +#: usr/local/www/vpn_pppoe_edit.php:486 usr/local/www/vpn_pptp.php:419 +#: usr/local/www/vpn_pppoe_edit.php:489 usr/local/www/vpn_pptp.php:422 +#: usr/local/www/vpn_pppoe_edit.php:489 usr/local/www/vpn_pptp.php:422 +msgid "RADIUS Accounting Update" +msgstr "RADIUSアカウンティングアップデート" + +#: usr/local/www/vpn_pptp.php:423 usr/local/www/vpn_pptp.php:425 +#: usr/local/www/vpn_l2tp.php:422 usr/local/www/vpn_l2tp.php:425 +#: usr/local/www/vpn_pptp.php:428 usr/local/www/vpn_l2tp.php:425 +#: usr/local/www/vpn_pptp.php:428 +msgid "RADIUS Server" +msgstr "RADIUSサーãƒ" + +#: usr/local/www/vpn_pptp.php:429 usr/local/www/vpn_pptp.php:446 +#: usr/local/www/vpn_pptp.php:431 usr/local/www/vpn_pptp.php:448 +#: usr/local/www/vpn_pptp.php:434 usr/local/www/vpn_pptp.php:451 +#: usr/local/www/vpn_pptp.php:434 usr/local/www/vpn_pptp.php:451 +msgid "" +"Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS " +"server" +msgstr "サーãƒãƒ¼ã€ŒRADIUSã®ã‚¢ã‚«ã‚¦ãƒ³ãƒ†ã‚£ãƒ³ã‚°ãƒãƒ¼ãƒˆã€IPアドレス〠RADIUSãƒãƒ¼ãƒˆã€ãŠã‚ˆã³RADIUSを入力ã—ã¦ãã ã•ã„ "" + +#: usr/local/www/vpn_pptp.php:436 usr/local/www/vpn_pppoe_edit.php:510 +#: usr/local/www/vpn_pppoe_edit.php:527 usr/local/www/vpn_pppoe_edit.php:511 +#: usr/local/www/vpn_pppoe_edit.php:528 usr/local/www/vpn_pptp.php:438 +#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:531 +#: usr/local/www/vpn_pptp.php:441 usr/local/www/vpn_pppoe_edit.php:514 +#: usr/local/www/vpn_pppoe_edit.php:531 usr/local/www/vpn_pptp.php:441 +msgid "" +"Enter the shared secret that will be used to authenticate to the RADIUS " +"server" +msgstr "サーãƒãƒ¼ã€ŒRADIUSã¸ã®èªè¨¼ã«ä½¿ç”¨ã•れる共有秘密を入力ã—ã¦ãã ã•ã„ "" + +#: usr/local/www/vpn_pptp.php:449 usr/local/www/vpn_pptp.php:451 +#: usr/local/www/vpn_pptp.php:454 usr/local/www/vpn_pptp.php:454 +msgid "Secondary RADIUS shared secret" +msgstr "セカンダリRADIUS共有シークレット" + +#: usr/local/www/vpn_pptp.php:453 usr/local/www/vpn_pptp.php:455 +#: usr/local/www/vpn_pptp.php:458 usr/local/www/vpn_pptp.php:458 +msgid "" +"Enter the shared secret that will be used to authenticate to the secondary " +"RADIUS server" +msgstr "RADIUSサーãƒã€ŒäºŒæ¬¡ã¸ã®èªè¨¼ã«ä½¿ç”¨ã•れる共有秘密を入力ã—ã¦ãã ã•ã„ "" + +#: usr/local/www/vpn_pptp.php:463 usr/local/www/vpn_pptp.php:465 +#: usr/local/www/vpn_pptp.php:468 usr/local/www/vpn_pptp.php:468 +msgid "Require 128-bit encryption" +msgstr "128ビット暗å·åŒ–ã‚’è¦æ±‚" + +#: usr/local/www/vpn_pptp.php:464 usr/local/www/vpn_pptp.php:466 +#: usr/local/www/vpn_pptp.php:469 usr/local/www/vpn_pptp.php:469 +msgid "" +"When set, only 128-bit encryption will be accepted. Otherwise 40-bit and 56-" +"bit encryption will be accepted as well. Note that encryption will always be " +"forced on PPTP connections (i.e. unencrypted connections will not be " +"accepted)" +msgstr "「設定ã—ãŸå ´åˆã€å”¯ä¸€ã®128ビット暗å·åŒ–ã‚’å—ã‘入れられるãã†ã§ãªã„å ´åˆã¯40ビットãŠã‚ˆã³56 - 。 "ãƒ“ãƒƒãƒˆã®æš—å·åŒ–ãŒåŒæ§˜ã«å—ã‘入れられã¾ã™ã€‚æš—å·åŒ–ã¯ã€å¸¸ã«ã€Œ (å—ã‘入れã™ãªã‚ã¡æš—å·åŒ–ã•れã¦ã„ãªã„接続ã¯ã•れã¾ã›ã‚“) PPTP接続ã«å¼·åˆ¶"ã•れるã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 usr/local/www/vpn_pptp.php:483 +msgid "don't forget to " +msgstr "ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„" + +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 usr/local/www/vpn_pptp.php:483 +msgid "add a firewall rule" +msgstr "ファイアウォールルールを追加" + +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 usr/local/www/vpn_pptp.php:483 +msgid "to permit traffic from PPTP clients" +msgstr "PPTPクライアントã‹ã‚‰ã®ãƒˆãƒ©ãƒ•ィックを許å¯ã™ã‚‹" + +#: usr/local/www/vpn_pptp_users.php:81 usr/local/www/vpn_l2tp_users.php:84 +#: usr/local/www/vpn_l2tp_users.php:85 usr/local/www/vpn_pptp_users.php:82 +#: usr/local/www/vpn_pptp_users.php:82 usr/local/www/vpn_l2tp_users.php:85 +msgid "Warning: RADIUS is enabled. The local user database will not be used." +msgstr "警告: RADIUSãŒæœ‰åйã«ãªã£ã¦ã„る。ローカルユーザデータベースã¯ä½¿ç”¨ã•れã¾ã›ã‚“。" + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84 +#: usr/local/www/vpn_pptp_users.php:84 +msgid "The PPTP user list has been modified" +msgstr "PPTPユーザリストãŒå¤‰æ›´ã•れã¦ã„ã‚‹" + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_l2tp_users.php:86 +#: usr/local/www/vpn_l2tp_users.php:87 usr/local/www/vpn_pptp_users.php:84 +#: usr/local/www/vpn_pptp_users.php:84 usr/local/www/vpn_l2tp_users.php:87 +msgid "You must apply the changes in order for them to take effect" +msgstr "ãれらを有効ã«ã™ã‚‹ã«ã¯ã€é †åºã®å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84 +#: usr/local/www/vpn_pptp_users.php:84 +msgid "Warning: this will terminate all current PPTP sessions" +msgstr "警告:ã“れã¯ç¾åœ¨ã®ã™ã¹ã¦ã®PPTPセッションを終了ã—ã¾ã™" + +#: usr/local/www/vpn_pptp_users.php:104 usr/local/www/vpn_pptp_users.php:127 +#: usr/local/www/system_usermanager.php:842 +#: usr/local/www/vpn_l2tp_users.php:120 +#: usr/local/www/system_usermanager.php:840 +#: usr/local/www/system_usermanager.php:845 +#: usr/local/www/vpn_l2tp_users.php:121 usr/local/www/vpn_pptp_users.php:105 +#: usr/local/www/vpn_pptp_users.php:128 +#: usr/local/www/system_usermanager.php:798 +#: usr/local/www/vpn_pptp_users.php:105 usr/local/www/vpn_pptp_users.php:128 +#: usr/local/www/vpn_l2tp_users.php:121 +#: usr/local/www/system_usermanager.php:798 +msgid "add user" +msgstr "ユーザーを追加" + +#: usr/local/www/vpn_pptp_users.php:117 +#: usr/local/www/system_usermanager.php:824 +#: usr/local/www/system_usermanager.php:822 +#: usr/local/www/system_usermanager.php:825 +#: usr/local/www/vpn_pptp_users.php:118 +#: usr/local/www/system_usermanager.php:848 +#: usr/local/www/vpn_pptp_users.php:118 +#: usr/local/www/system_usermanager.php:848 +msgid "edit user" +msgstr "ユーザーã®ç·¨é›†" + +#: usr/local/www/vpn_pptp_users.php:118 usr/local/www/vpn_l2tp_users.php:115 +#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119 +#: usr/local/www/vpn_pptp_users.php:119 usr/local/www/vpn_l2tp_users.php:116 +msgid "Do you really want to delete this user?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/vpn_pptp_users.php:118 +#: usr/local/www/system_usermanager.php:829 +#: usr/local/www/vpn_l2tp_users.php:115 +#: usr/local/www/system_usermanager.php:827 +#: usr/local/www/system_usermanager.php:830 +#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119 +#: usr/local/www/system_usermanager.php:853 +#: usr/local/www/vpn_pptp_users.php:119 usr/local/www/vpn_l2tp_users.php:116 +#: usr/local/www/system_usermanager.php:853 +msgid "delete user" +msgstr "ユーザーを削除ã™ã‚‹" + +#: usr/local/www/vpn_pptp_users_edit.php:85 +#: usr/local/www/services_dyndns_edit.php:94 +#: usr/local/www/system_usermanager.php:199 +#: usr/local/www/vpn_l2tp_users_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:110 +#: usr/local/www/vpn_l2tp_users_edit.php:88 +#: usr/local/www/services_dyndns_edit.php:111 +#: usr/local/www/services_dyndns_edit.php:111 +#: usr/local/www/vpn_l2tp_users_edit.php:88 +#: usr/local/www/vpn_pptp_users_edit.php:85 +#: usr/local/www/system_usermanager.php:199 +msgid "The username contains invalid characters." +msgstr "ユーザーåã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/vpn_pptp_users_edit.php:88 +#: usr/local/www/vpn_pptp_users_edit.php:88 +msgid "The password cannot start with '!'." +msgstr "パスワードã¯' ï¼'ã§å§‹ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/vpn_pptp_users_edit.php:91 +#: usr/local/www/vpn_l2tp_users_edit.php:90 +#: usr/local/www/vpn_l2tp_users_edit.php:91 +#: usr/local/www/vpn_l2tp_users_edit.php:91 +#: usr/local/www/vpn_pptp_users_edit.php:91 +msgid "The password contains invalid characters." +msgstr "パスワードã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/vpn_pptp_users_edit.php:94 +#: usr/local/www/system_usermanager.php:205 +#: usr/local/www/system_usermanager_passwordmg.php:54 +#: usr/local/www/vpn_l2tp_users_edit.php:93 +#: usr/local/www/vpn_l2tp_users_edit.php:94 +#: usr/local/www/system_usermanager_passwordmg.php:54 +#: usr/local/www/vpn_l2tp_users_edit.php:94 +#: usr/local/www/vpn_pptp_users_edit.php:94 +#: usr/local/www/system_usermanager.php:205 +msgid "The passwords do not match." +msgstr "パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“。" + +#: usr/local/www/vpn_pptp_users_edit.php:97 +#: usr/local/www/vpn_l2tp_users_edit.php:96 +#: usr/local/www/vpn_l2tp_users_edit.php:97 +#: usr/local/www/vpn_l2tp_users_edit.php:97 +#: usr/local/www/vpn_pptp_users_edit.php:97 +msgid "The IP address entered is not valid." +msgstr "入力ã—ãŸIPã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæœ‰åйã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/vpn_pptp_users_edit.php:104 +#: usr/local/www/system_usermanager.php:215 +#: usr/local/www/vpn_l2tp_users_edit.php:103 +#: usr/local/www/vpn_l2tp_users_edit.php:104 +#: usr/local/www/vpn_l2tp_users_edit.php:104 +#: usr/local/www/vpn_pptp_users_edit.php:104 +#: usr/local/www/system_usermanager.php:215 +msgid "Another entry with the same username already exists." +msgstr "åŒã˜ãƒ¦ãƒ¼ã‚¶åã®åˆ¥ã®ã‚¨ãƒ³ãƒˆãƒªãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/vpn_pptp_users_edit.php:155 +#: usr/local/www/vpn_l2tp_users_edit.php:163 +#: usr/local/www/vpn_pptp_users_edit.php:156 +#: usr/local/www/vpn_l2tp_users_edit.php:164 +#: usr/local/www/vpn_l2tp_users_edit.php:164 +#: usr/local/www/vpn_pptp_users_edit.php:156 +msgid "confirmation" +msgstr "確èª" + +#: usr/local/www/vpn_pptp_users_edit.php:156 +#: usr/local/www/vpn_pptp_users_edit.php:157 +#: usr/local/www/vpn_pptp_users_edit.php:157 +msgid "If you want to change the users' password, enter it here twice." +msgstr "ã‚ãªãŸã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‘スワードを変更ã—ãŸã„å ´åˆã¯ã€äºŒåº¦ã“ã“ã«å…¥åŠ›ã—ã¾ã™ã€‚" + +#: usr/local/www/vpn_pptp_users_edit.php:163 +#: usr/local/www/vpn_l2tp_users_edit.php:171 +#: usr/local/www/vpn_pptp_users_edit.php:164 +#: usr/local/www/vpn_l2tp_users_edit.php:172 +#: usr/local/www/vpn_l2tp_users_edit.php:172 +#: usr/local/www/vpn_pptp_users_edit.php:164 +msgid "" +"If you want the user to be assigned a specific IP address, enter it here." +msgstr "ã‚ãªãŸã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç‰¹å®šã®IPアドレスを割り当ã¦ã‚‹ã“ã¨ãŒã—ãŸã„å ´åˆã¯"ã€ã“ã“ã«å…¥åŠ›ã—ã¾ã™ã€‚" + +#: usr/local/www/wizard.php:65 usr/local/www/wizard.php:71 +#: usr/local/www/wizard.php:65 usr/local/www/wizard.php:71 +#, php-format +msgid "ERROR: Could not open %s." +msgstr "ERROR : %s.ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ" + +#: usr/local/www/wizard.php:77 usr/local/www/wizard.php:77 +#, php-format +msgid "ERROR: Could not parse %s/wizards/%s file." +msgstr "ERROR : %s /ウィザード/ %sファイルを解æžã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/load_balancer_relay_action_edit.php:65 +#: usr/local/www/load_balancer_relay_action_edit.php:65 +msgid "Load Balancer: Relay Action:" +msgstr "ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼å‹•作:" + +#: usr/local/www/load_balancer_relay_action_edit.php:124 +#: usr/local/www/load_balancer_relay_action_edit.php:124 +msgid "This action name has already been used. Action names must be unique." +msgstr "ã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³åã¯æ—¢ã«ä½¿ç”¨ã•れã¦ã„る。アクションåã¯ä¸€æ„ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_relay_action_edit.php:134 +#: usr/local/www/load_balancer_relay_action_edit.php:134 +#, php-format +msgid "modified '%s' action:" +msgstr "修正ã•れãŸã€Œ %s'アクション:" + +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +msgid "DNS" +msgstr "DNS" + +#: usr/local/www/load_balancer_relay_action_edit.php:408 +#: usr/local/www/load_balancer_relay_action_edit.php:407 +#: usr/local/www/load_balancer_relay_action_edit.php:405 +#: usr/local/www/load_balancer_relay_action_edit.php:405 +msgid "Edit Load Balancer - Relay Action entry" +msgstr "編集ロードãƒãƒ©ãƒ³ã‚µ - リレーactionエントリ" + +#: usr/local/www/load_balancer_relay_action_edit.php:508 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:173 +#: usr/local/www/load_balancer_relay_action_edit.php:507 +#: usr/local/www/load_balancer_relay_action_edit.php:505 +#: usr/local/www/load_balancer_relay_action_edit.php:505 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:173 +msgid "Key" +msgstr "キー" + +#: usr/local/www/load_balancer_relay_action_edit.php:517 +#: usr/local/www/load_balancer_relay_action_edit.php:537 +#: usr/local/www/load_balancer_relay_action_edit.php:516 +#: usr/local/www/load_balancer_relay_action_edit.php:536 +#: usr/local/www/load_balancer_relay_action_edit.php:514 +#: usr/local/www/load_balancer_relay_action_edit.php:534 +#: usr/local/www/load_balancer_relay_action_edit.php:514 +#: usr/local/www/load_balancer_relay_action_edit.php:534 +msgid "TODO" +msgstr "TODO" + +#: usr/local/www/xmlrpc.php:58 usr/local/www/xmlrpc.php:54 +msgid "Disallowing CARP sync loop." +msgstr "CARPåŒæœŸãƒ«ãƒ¼ãƒ—を許å¯ã—ãªã„。" + +#: usr/local/www/xmlrpc.php:67 usr/local/www/xmlrpc.php:63 +#: usr/local/www/xmlrpc.php:67 +msgid "Authentication failed" +msgstr "èªè¨¼ã«å¤±æ•—ã—ã¾ã—ãŸ" + +#: usr/local/www/xmlrpc.php:78 usr/local/www/xmlrpc.php:74 +#: usr/local/www/xmlrpc.php:78 +msgid "" +"XMLRPC wrapper for eval(). This method must be called with two parameters: a " +"string containing the local system's password followed by the PHP code to " +"evaluate." +msgstr "「評価ã™ã‚‹ãŸã‚ã«ã€PHPコードãŒç¶šãローカルシステム'sã®ãƒ‘スワードをå«ã‚€æ–‡å­—列: "eval.().ãŸã‚ã®XMLRPCラッパーã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€2ã¤ã®ãƒ‘ラメータã§å‘¼ã³å‡ºã•ãªã‘れã°ãªã‚Šã¾ã›ã‚“〠。" + +#: usr/local/www/xmlrpc.php:109 usr/local/www/xmlrpc.php:105 +#: usr/local/www/xmlrpc.php:109 +msgid "" +"XMLRPC wrapper for mwexec(). This method must be called with two parameters: " +"a string containing the local system's password followed by an shell " +"command to execute." +msgstr "〠。 mwexec.()ãŸã‚ã®XMLRPCラッパーã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€2ã¤ã®ãƒ‘ラメータã§å‘¼ã³å‡ºã•れãªã‘れã°ãªã‚Šã¾ã›ã‚“。「ローカルシステム'sã®ãƒ‘スワードをå«ã‚€æ–‡å­—列を実行ã™ã‚‹ãŸã‚ã®ã‚·ã‚§ãƒ«ã€ã‚³ãƒžãƒ³ãƒ‰ãŒç¶šã。" + +#: usr/local/www/xmlrpc.php:133 usr/local/www/xmlrpc.php:129 +#: usr/local/www/xmlrpc.php:133 +msgid "" +"XMLRPC wrapper for backup_config_section. This method must be called with " +"two parameters: a string containing the local system's password followed " +"by an array containing the keys to be backed up." +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—対象ã®ã‚­ãƒ¼ã‚’å«ã‚€é…列ã«ã‚ˆã£ã¦"ã«ç¶šãã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚·ã‚¹ãƒ†ãƒ 'sã®ãƒ‘スワードをå«ã‚€æ–‡å­—列: 2パラメータã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 backup_config_sectionã®ãŸã‚ã®XMLRPCラッパーã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã¯ã€ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れãªã‘れã°ãªã‚‰ãªã„〠。" + +#: usr/local/www/xmlrpc.php:156 usr/local/www/xmlrpc.php:152 +#: usr/local/www/xmlrpc.php:159 usr/local/www/xmlrpc.php:159 +msgid "" +"XMLRPC wrapper for restore_config_section. This method must be called with " +"two parameters: a string containing the local system's password and an " +"array to merge into the system's config. This function returns true upon " +"completion." +msgstr "「 restore_config_section用XMLRPCラッパーã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€å‘¼ã³å‡ºã™å¿…è¦ãŒã‚りã¾ã™ã€‚ 「 2パラメータ:ローカルシステム'sã®ãƒ‘スワードã¨ã€Œ SYSTEM ã«ãƒžãƒ¼ã‚¸ã™ã‚‹é…列ã€ã‚’å«ã‚€æ–‡å­—列を完æˆã€‚ã®è¨­å®šã‚’ã“ã®é–¢æ•°ã¯ã€ä¸Šã«trueã‚’è¿”ã—ã¾ã™ã€ 。" + +#: usr/local/www/xmlrpc.php:203 usr/local/www/xmlrpc.php:282 +#: usr/local/www/xmlrpc.php:307 usr/local/www/xmlrpc.php:212 +#: usr/local/www/xmlrpc.php:291 usr/local/www/xmlrpc.php:316 +#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:313 +#: usr/local/www/xmlrpc.php:224 usr/local/www/xmlrpc.php:308 +#: usr/local/www/xmlrpc.php:337 usr/local/www/xmlrpc.php:224 +#: usr/local/www/xmlrpc.php:308 usr/local/www/xmlrpc.php:337 +#, php-format +msgid "Merged in config (%s sections) from XMLRPC client." +msgstr "XMLRPCクライアントã‹ã‚‰ï¼ˆã‚»ã‚¯ã‚·ãƒ§ãƒ³%s )設定ã«åˆä½µã—ã¾ã—ãŸã€‚" + +#: usr/local/www/xmlrpc.php:263 usr/local/www/xmlrpc.php:272 +#: usr/local/www/xmlrpc.php:269 usr/local/www/xmlrpc.php:286 +#: usr/local/www/xmlrpc.php:286 +msgid "" +"XMLRPC wrapper for merging package sections. This method must be called with " +"two parameters: a string containing the local system's password and an " +"array to merge into the system's config. This function returns true upon " +"completion." +msgstr "「パッケージã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’マージã™ã‚‹ãŸã‚ã®XMLRPCラッパーã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€å‘¼ã³å‡ºã™å¿…è¦ãŒã‚りã¾ã™ã€‚ 「 2パラメータ:ローカルシステム'sã®ãƒ‘スワードã¨ã€Œ SYSTEM ã«ãƒžãƒ¼ã‚¸ã™ã‚‹é…列ã€ã‚’å«ã‚€æ–‡å­—列を完æˆã€‚ã®è¨­å®šã‚’ã“ã®é–¢æ•°ã¯ã€ä¸Šã«trueã‚’è¿”ã—ã¾ã™ã€ 。" + +#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:297 +#: usr/local/www/xmlrpc.php:294 usr/local/www/xmlrpc.php:314 +#: usr/local/www/xmlrpc.php:314 +msgid "" +"XMLRPC wrapper for merge_config_section. This method must be called with two " +"parameters: a string containing the local system's password and an array " +"to merge into the system's config. This function returns true upon " +"completion." +msgstr "パラメータ"merge_config_sectionãŸã‚XMLRPCラッパーã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ 2ã¨å‘¼ã°ã‚Œãªã‘れã°ãªã‚Šã¾ã›ã‚“。 〠:ローカルシステム'sã®ãƒ‘スワードã¨ã‚¢ãƒ¬ã‚¤ã€ SYSTEM ã«ãƒžãƒ¼ã‚¸ã™ã‚‹ã€ã‚’å«ã‚€æ–‡å­—列を完æˆã€‚ã®è¨­å®šã‚’ã“ã®é–¢æ•°ã¯ã€ä¸Šã«trueã‚’è¿”ã—ã¾ã™ã€ 。" + +#: usr/local/www/xmlrpc.php:312 usr/local/www/xmlrpc.php:321 +#: usr/local/www/xmlrpc.php:318 usr/local/www/xmlrpc.php:342 +#: usr/local/www/xmlrpc.php:342 +msgid "" +"Basic XMLRPC wrapper for filter_configure. This method must be called with " +"one paramater: a string containing the local system's password. This " +"function returns true upon completion." +msgstr "ローカルシステム'sã®ãƒ‘スワードをå«ã‚€æ–‡å­—列: 1ã®paramater "。 filter_configureã®ãŸã‚ã®åŸºæœ¬çš„ãªXMLRPCラッパーã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã¯ã€ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れãªã‘れã°ãªã‚‰ãªã„〠。ã“ã®ã€Œæ©Ÿèƒ½ãŒå®Œäº†ã—ãŸæ™‚点ã§trueã‚’è¿”ã—ã¾ã™ã€‚" + +#: usr/local/www/xmlrpc.php:342 usr/local/www/xmlrpc.php:351 +#: usr/local/www/xmlrpc.php:348 usr/local/www/xmlrpc.php:372 +#: usr/local/www/xmlrpc.php:372 +msgid "Basic XMLRPC wrapper for configuring CARP interfaces." +msgstr "CARPインタフェースを設定ã™ã‚‹ãŸã‚ã®åŸºæœ¬çš„ãªXMLRPCラッパー。" + +#: usr/local/www/xmlrpc.php:364 usr/local/www/xmlrpc.php:385 +#: usr/local/www/xmlrpc.php:373 usr/local/www/xmlrpc.php:394 +#: usr/local/www/xmlrpc.php:370 usr/local/www/xmlrpc.php:391 +#: usr/local/www/xmlrpc.php:397 usr/local/www/xmlrpc.php:418 +#: usr/local/www/xmlrpc.php:397 usr/local/www/xmlrpc.php:418 +msgid "" +"Basic XMLRPC wrapper for check_firmware_version. This function will return " +"the output of check_firmware_version upon completion." +msgstr "完了時ã«check_firmware_versionã®å‡ºåŠ›ã‚’"check_firmware_versionãŸã‚ã®åŸºæœ¬XMLRPCラッパー。ã“ã®é–¢æ•°ã¯æˆ»ã‚Šã¾ã™ã€ 。" + +#: usr/local/www/xmlrpc.php:406 usr/local/www/xmlrpc.php:415 +#: usr/local/www/xmlrpc.php:412 usr/local/www/xmlrpc.php:439 +#: usr/local/www/xmlrpc.php:439 +msgid "Basic XMLRPC wrapper for rc.reboot." +msgstr "rc.rebootãŸã‚ã®åŸºæœ¬çš„ãªXMLRPCラッパー。" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:65 +#: usr/local/www/load_balancer_relay_protocol_edit.php:65 +msgid "Load Balancer: Relay Protocol:" +msgstr "ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼ãƒ—ロトコル:" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:86 +#: usr/local/www/load_balancer_relay_protocol_edit.php:86 +msgid "" +"This protocol name has already been used. Protocol names must be unique." +msgstr "「ã“ã®ãƒ—ロトコルåãŒæ—¢ã«ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚プロトコルåã¯ä¸€æ„ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:105 +#: usr/local/www/load_balancer_relay_protocol_edit.php:105 +#, php-format +msgid "modified '%s' load balancing protocol:" +msgstr "修正ã•れãŸã€Œ %s 「ロード·ãƒãƒ©ãƒ³ã‚·ãƒ³ã‚°Â·ãƒ—ロトコル:" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:107 +#: usr/local/www/load_balancer_relay_protocol_edit.php:107 +msgid "name" +msgstr "åå‰" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:108 +#: usr/local/www/load_balancer_relay_protocol_edit.php:110 +#: usr/local/www/load_balancer_relay_protocol_edit.php:108 +#: usr/local/www/load_balancer_relay_protocol_edit.php:110 +msgid "type" +msgstr "タイプ" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:109 +#: usr/local/www/load_balancer_relay_protocol_edit.php:109 +msgid "description" +msgstr "説明" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:111 +#: usr/local/www/load_balancer_relay_protocol_edit.php:111 +msgid "action" +msgstr "アクション" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:192 +#: usr/local/www/load_balancer_relay_protocol_edit.php:190 +#: usr/local/www/load_balancer_relay_protocol_edit.php:190 +msgid "Edit Load Balancer - Relay Protocol entry" +msgstr "編集ロードãƒãƒ©ãƒ³ã‚µ - リレープロトコルエントリ" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:227 +#: usr/local/www/load_balancer_relay_protocol_edit.php:225 +#: usr/local/www/load_balancer_relay_protocol_edit.php:225 +msgid "Add / remove available actions" +msgstr "追加/使用å¯èƒ½ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’削除" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:237 +#: usr/local/www/load_balancer_relay_protocol_edit.php:235 +#: usr/local/www/load_balancer_relay_protocol_edit.php:235 +msgid "Available Actions" +msgstr "使用å¯èƒ½ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:252 +#: usr/local/www/system_crlmanager.php:474 +#: usr/local/www/load_balancer_relay_protocol_edit.php:250 +#: usr/local/www/system_crlmanager.php:507 +#: usr/local/www/load_balancer_relay_protocol_edit.php:250 +#: usr/local/www/system_crlmanager.php:507 +msgid "Add" +msgstr "加ãˆã‚‹" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:259 +#: usr/local/www/load_balancer_relay_protocol_edit.php:257 +#: usr/local/www/load_balancer_relay_protocol_edit.php:257 +msgid "Enabled Actions" +msgstr "有効ã«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³" + +#: usr/local/www/pkg_mgr_settings.php:62 usr/local/www/pkg_mgr_settings.php:94 +#: usr/local/www/pkg_mgr_settings.php:93 usr/local/www/pkg_mgr_settings.php:62 +#: usr/local/www/pkg_mgr_settings.php:93 +msgid "Package Settings" +msgstr "パッケージ設定" + +#: usr/local/www/pkg_mgr_settings.php:92 usr/local/www/pkg_mgr_settings.php:91 +#: usr/local/www/pkg_mgr_settings.php:91 +#, php-format +msgid "%s packages" +msgstr "%sパッケージ" + +#: usr/local/www/pkg_mgr_settings.php:102 +#: usr/local/www/pkg_mgr_settings.php:105 +#: usr/local/www/pkg_mgr_settings.php:101 +#: usr/local/www/pkg_mgr_settings.php:104 +#: usr/local/www/pkg_mgr_settings.php:101 +#: usr/local/www/pkg_mgr_settings.php:104 +msgid "Package Repository URL" +msgstr "パッケージリãƒã‚¸ãƒˆãƒªã®URL" + +#: usr/local/www/pkg_mgr_settings.php:107 +#: usr/local/www/pkg_mgr_settings.php:106 +#: usr/local/www/pkg_mgr_settings.php:106 +msgid "Use a different URL server for packages other than" +msgstr "以外ã®ãƒ‘ッケージã«åˆ¥ã®URLサーãƒã‚’使用ã—ã¦ã€" + +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/pkg_mgr_settings.php:111 +#: usr/local/www/pkg_mgr_settings.php:111 +#, php-format +msgid "This is where %s will check for packages when the" +msgstr "%sパッケージをãƒã‚§ãƒƒã‚¯ã™ã‚‹å ´æ‰€ã§ã™ã¨ã" + +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/pkg_mgr_settings.php:111 +#: usr/local/www/pkg_mgr_settings.php:111 +msgid "System: Packages" +msgstr "システム:パッケージ" + +#: usr/local/www/services_captiveportal_hostname.php:111 +#: usr/local/www/services_captiveportal_hostname.php:109 +#: usr/local/www/services_captiveportal_hostname.php:109 +msgid "Allowed IP Addresses" +msgstr "許å¯ã™ã‚‹IPアドレス" + +#: usr/local/www/services_captiveportal_hostname.php:173 +#: usr/local/www/services_captiveportal_hostname.php:171 +#: usr/local/www/services_captiveportal_hostname.php:171 +msgid "" +"Adding allowed Hostnames will allow a DNS hostname access to/from access " +"through the captive portal without being taken to the portal page. This can " +"be used for a web server serving images for the portal page or a DNS server " +"on another network, for example. By specifying from addresses, it " +"may be used to always allow pass-through access from a client behind the " +"captive portal." +msgstr "ãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã«é€£ã‚Œã¦è¡Œã‹ã‚Œã‚‹ã“ã¨ãªãã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚’介ã—ã¦ã€Œè¨±å¯ã•れãŸãƒ›ã‚¹ãƒˆåを追加ã™ã‚‹ã¨ã€ã‚¢ã‚¯ã‚»ã‚¹ã¸ã®/ã‹ã‚‰ã®DNSホストåã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€ 。ã“れã¯ã€ä¾‹ãˆã°ã€åˆ¥ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã®ã€Œ Webサーãƒãƒ¼ãŒãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã¾ãŸã¯DNSサーãƒãƒ¼ç”¨ã®ç”»åƒã‚’æä¾›ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹"ã“ã¨ãŒã§ãã¾ã™ã€‚ u003c/ emu003eã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã‚‰ã®u003cemu003e指定ã™ã‚‹ã“ã¨ã§ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã€ã¯ã€å¸¸ã«èƒŒå¾Œã«ã‚るクライアントã‹ã‚‰ã®ãƒ‘ススルーã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ãŸã‚ã«ç”¨ã„ã‚‹ã“ã¨ãŒã§ãる〠。" + +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "the Hostname are allowed" +msgstr "ホストåãŒè¨±å¯ã•れã¦ã„" + +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +msgid "Edit allowed Hostname" +msgstr "編集許å¯ãƒ›ã‚¹ãƒˆå" + +#: usr/local/www/services_captiveportal_hostname_edit.php:102 +#: usr/local/www/services_captiveportal_hostname_edit.php:100 +#: usr/local/www/services_captiveportal_hostname_edit.php:100 +msgid "Allowed Hostname" +msgstr "許å¯ã•れãŸãƒ›ã‚¹ãƒˆå" + +#: usr/local/www/services_captiveportal_hostname_edit.php:107 +#: usr/local/www/services_captiveportal_hostname_edit.php:105 +#: usr/local/www/services_captiveportal_hostname_edit.php:105 +#, php-format +msgid "A valid Hostname must be specified. [%s]" +msgstr "有効ãªãƒ›ã‚¹ãƒˆåを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ( ( %s ) )" + +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +msgid "" +"to always allow an Hostname through the captive portal (without " +"authentication)" +msgstr "「 (èªè¨¼å¸¸æ™‚ãšã«ï¼‰ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚’介ã—ã¦ãƒ›ã‚¹ãƒˆåを許å¯ã™ã‚‹ã«ã¯ã€ã€Œ" + +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +msgid "" +"to allow access from all clients (even non-authenticated ones) behind the " +"portal to this Hostname" +msgstr "ã“ã®ãƒ›ã‚¹ãƒˆåã¸ã®ãƒãƒ¼ã‚¿ãƒ«ã€ã®å¾Œã‚ã«ï¼ˆã‚‚å«ã‚ã¦éžèªè¨¼ï¼‰ ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã«ã¯ã€ã€Œ" + +#: usr/local/www/services_captiveportal_hostname_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:190 +#: usr/local/www/services_captiveportal_hostname_edit.php:192 +msgid "Enter a upload limit to be enforced on this Hostname in Kbit/s" +msgstr "キロビット/ç§’ã§ã€ã“ã®ãƒ›ã‚¹ãƒˆåã«æ–½è¡Œã•れるよã†ã«ã‚¢ãƒƒãƒ—ロード制é™ã‚’入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_captiveportal_hostname_edit.php:198 +#: usr/local/www/services_captiveportal_hostname_edit.php:196 +#: usr/local/www/services_captiveportal_hostname_edit.php:198 +msgid "Enter a download limit to be enforced on this Hostname in Kbit/s" +msgstr "キロビット/ç§’ã§ã€ã“ã®ãƒ›ã‚¹ãƒˆåã«æ–½è¡Œã•れるよã†ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰åˆ¶é™ã‚’入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_captiveportal_vouchers.php:67 +#: usr/local/www/services_captiveportal_vouchers.php:64 +#: usr/local/www/services_captiveportal_vouchers.php:64 +msgid "" +"You will need to recreate any existing Voucher Rolls due to the public and " +"private key changes. Click cancel if you do not wish to recreate the " +"vouchers." +msgstr "ã‚ãªãŸã¯ã€å…¬é–‹éµã¨ç§˜å¯†éµã®å¤‰æ›´ã«ã‚ˆã‚‹æ—¢å­˜ã®ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ­ãƒ¼ãƒ«ã‚’å†ä½œæˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã‚ãªãŸãŒä¼ç¥¨ã‚’å†ä½œæˆã—ãŸããªã„å ´åˆã¯ã€[キャンセル]をクリックã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal_vouchers.php:114 +#: usr/local/www/services_captiveportal_vouchers.php:123 +#: usr/local/www/services_captiveportal_vouchers.php:130 +#: usr/local/www/services_captiveportal_vouchers.php:130 +msgid "Voucher invalid" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ç„¡åй" + +#: usr/local/www/services_captiveportal_vouchers.php:116 +#: usr/local/www/services_captiveportal_vouchers.php:125 +#: usr/local/www/services_captiveportal_vouchers.php:132 +#: usr/local/www/services_captiveportal_vouchers.php:132 +msgid "Voucher expired" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œ" + +#: usr/local/www/services_captiveportal_vouchers.php:139 +#: usr/local/www/services_captiveportal_vouchers.php:148 +#: usr/local/www/services_captiveportal_vouchers.php:155 +#: usr/local/www/services_captiveportal_vouchers.php:155 +msgid "Cannot write private key file" +msgstr "秘密éµãƒ•ァイルを書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“" + +#: usr/local/www/services_captiveportal_vouchers.php:157 +#: usr/local/www/services_captiveportal_vouchers.php:166 +#: usr/local/www/services_captiveportal_vouchers.php:175 +#: usr/local/www/services_captiveportal_vouchers.php:175 +msgid "Need private RSA key to print vouchers" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’å°åˆ·ã™ã‚‹RSA秘密éµã‚’å¿…è¦ã¨ã™ã‚‹" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "charset" +msgstr "文字セット" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "rollbits" +msgstr "rollbits" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "ticketbits" +msgstr "ticketbits" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "checksumbits" +msgstr "checksumbits" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "publickey" +msgstr "公開éµ" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "magic" +msgstr "マジック" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:565 +#: usr/local/www/services_captiveportal_vouchers.php:572 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:585 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:594 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:599 +msgid "Synchronize Voucher Database IP" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®IPã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’åŒæœŸã•ã›ã‚‹" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync port" +msgstr "åŒæœŸãƒãƒ¼ãƒˆ" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync password" +msgstr "åŒæœŸãƒ‘スワード" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync username" +msgstr "åŒæœŸãƒ¦ãƒ¼ã‚¶å" + +#: usr/local/www/services_captiveportal_vouchers.php:203 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:222 +#: usr/local/www/services_captiveportal_vouchers.php:222 +msgid "Need at least 2 characters to create vouchers." +msgstr "ä¼ç¥¨ã‚’作æˆã™ã‚‹ã«ã¯ã€å°‘ãªãã¨ã‚‚2文字を必è¦ã¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal_vouchers.php:205 +#: usr/local/www/services_captiveportal_vouchers.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:224 +#: usr/local/www/services_captiveportal_vouchers.php:224 +msgid "Double quotes aren't allowed." +msgstr "二é‡å¼•用符ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal_vouchers.php:207 +#: usr/local/www/services_captiveportal_vouchers.php:217 +#: usr/local/www/services_captiveportal_vouchers.php:226 +#: usr/local/www/services_captiveportal_vouchers.php:226 +msgid "aren't allowed." +msgstr "許å¯ã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal_vouchers.php:209 +#: usr/local/www/services_captiveportal_vouchers.php:219 +#: usr/local/www/services_captiveportal_vouchers.php:228 +#: usr/local/www/services_captiveportal_vouchers.php:228 +msgid "# of Bits to store Roll Id needs to be between 1..31." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:211 +#: usr/local/www/services_captiveportal_vouchers.php:221 +#: usr/local/www/services_captiveportal_vouchers.php:230 +#: usr/local/www/services_captiveportal_vouchers.php:230 +msgid "# of Bits to store Ticket Id needs to be between 1..16." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:223 +#: usr/local/www/services_captiveportal_vouchers.php:232 +#: usr/local/www/services_captiveportal_vouchers.php:232 +msgid "# of Bits to store checksum needs to be between 1..31." +msgstr "" + +#: usr/local/www/services_captiveportal_vouchers.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:225 +#: usr/local/www/services_captiveportal_vouchers.php:234 +#: usr/local/www/services_captiveportal_vouchers.php:234 +msgid "This doesn't look like an RSA Public key." +msgstr "ã“れã¯ã€RSA公開éµã®ã‚ˆã†ã«ã—ã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal_vouchers.php:217 +#: usr/local/www/services_captiveportal_vouchers.php:227 +#: usr/local/www/services_captiveportal_vouchers.php:236 +#: usr/local/www/services_captiveportal_vouchers.php:236 +msgid "This doesn't look like an RSA Private key." +msgstr "ã“れã¯RSA秘密éµã®ã‚ˆã†ã«ã—ã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal_vouchers.php:219 +#: usr/local/www/services_captiveportal_vouchers.php:229 +#: usr/local/www/services_captiveportal_vouchers.php:238 +#: usr/local/www/services_captiveportal_vouchers.php:238 +msgid "You cannot sync the voucher database to this host (itself)." +msgstr "ã‚ãªãŸã¯ã“ã®ãƒ›ã‚¹ãƒˆï¼ˆè‡ªä½“)ã«ã‚¯ãƒ¼ãƒãƒ³ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’åŒæœŸã§ãã¾ã›ã‚“。" + +#: usr/local/www/services_captiveportal_vouchers.php:421 +#: usr/local/www/services_captiveportal_vouchers.php:428 +#: usr/local/www/services_captiveportal_vouchers.php:441 +#: usr/local/www/services_captiveportal_vouchers.php:450 +#: usr/local/www/services_captiveportal_vouchers.php:455 +msgid "Enable Vouchers" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/services_captiveportal_vouchers.php:435 +#: usr/local/www/services_captiveportal_vouchers_edit.php:173 +#: usr/local/www/status_captiveportal_vouchers.php:116 +#: usr/local/www/services_captiveportal_vouchers.php:442 +#: usr/local/www/status_captiveportal_vouchers.php:117 +#: usr/local/www/services_captiveportal_vouchers.php:455 +#: usr/local/www/services_captiveportal_vouchers_edit.php:171 +#: usr/local/www/services_captiveportal_vouchers.php:464 +#: usr/local/www/status_captiveportal_vouchers.php:122 +#: usr/local/www/services_captiveportal_vouchers.php:469 +#: usr/local/www/services_captiveportal_vouchers_edit.php:171 +#: usr/local/www/status_captiveportal_vouchers.php:122 +msgid "Roll" +msgstr "ロール" + +#: usr/local/www/services_captiveportal_vouchers.php:436 +#: usr/local/www/status_captiveportal_voucher_rolls.php:86 +#: usr/local/www/services_captiveportal_vouchers.php:443 +#: usr/local/www/services_captiveportal_vouchers.php:456 +#: usr/local/www/status_captiveportal_voucher_rolls.php:87 +#: usr/local/www/services_captiveportal_vouchers.php:465 +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:470 +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +msgid "Minutes/Ticket" +msgstr "分/ãƒã‚±ãƒƒãƒˆ" + +#: usr/local/www/services_captiveportal_vouchers.php:437 +#: usr/local/www/services_captiveportal_vouchers.php:444 +#: usr/local/www/services_captiveportal_vouchers.php:457 +#: usr/local/www/services_captiveportal_vouchers.php:466 +#: usr/local/www/services_captiveportal_vouchers.php:471 +msgid "of Tickets" +msgstr "ãƒã‚±ãƒƒãƒˆ" + +#: usr/local/www/services_captiveportal_vouchers.php:438 +#: usr/local/www/services_captiveportal_vouchers_edit.php:197 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +#: usr/local/www/services_captiveportal_vouchers.php:445 +#: usr/local/www/services_captiveportal_vouchers.php:458 +#: usr/local/www/services_captiveportal_vouchers_edit.php:195 +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:467 +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +#: usr/local/www/services_captiveportal_vouchers.php:472 +#: usr/local/www/services_captiveportal_vouchers_edit.php:195 +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +msgid "Comment" +msgstr "コメント" + +#: usr/local/www/services_captiveportal_vouchers.php:458 +#: usr/local/www/services_captiveportal_vouchers.php:465 +#: usr/local/www/services_captiveportal_vouchers.php:478 +#: usr/local/www/services_captiveportal_vouchers.php:487 +#: usr/local/www/services_captiveportal_vouchers.php:492 +msgid "edit voucher" +msgstr "編集ãƒã‚¦ãƒãƒ£ãƒ¼" + +#: usr/local/www/services_captiveportal_vouchers.php:459 +#: usr/local/www/services_captiveportal_vouchers.php:466 +#: usr/local/www/services_captiveportal_vouchers.php:479 +#: usr/local/www/services_captiveportal_vouchers.php:488 +#: usr/local/www/services_captiveportal_vouchers.php:493 +msgid "" +"Do you really want to delete this voucher? This makes all vouchers from this " +"roll invalid" +msgstr "ロール無効"本当ã«ã“ã®ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿã“れã¯ã€ã“ã®ã‹ã‚‰ã®ã™ã¹ã¦ã®ãƒã‚¦ãƒãƒ£ãƒ¼ãŒä½œã‚‹"" + +#: usr/local/www/services_captiveportal_vouchers.php:459 +#: usr/local/www/services_captiveportal_vouchers.php:466 +#: usr/local/www/services_captiveportal_vouchers.php:479 +#: usr/local/www/services_captiveportal_vouchers.php:488 +#: usr/local/www/services_captiveportal_vouchers.php:493 +msgid "delete vouchers" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’削除" + +#: usr/local/www/services_captiveportal_vouchers.php:460 +#: usr/local/www/services_captiveportal_vouchers.php:467 +#: usr/local/www/services_captiveportal_vouchers.php:480 +#: usr/local/www/services_captiveportal_vouchers.php:489 +#: usr/local/www/services_captiveportal_vouchers.php:494 +msgid "generate vouchers for this roll to CSV file" +msgstr "CSVファイルã¸ã®ã“ã®ãƒ­ãƒ¼ãƒ«ã®ãŸã‚ã®ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’生æˆ" + +#: usr/local/www/services_captiveportal_vouchers.php:470 +#: usr/local/www/services_captiveportal_vouchers.php:477 +#: usr/local/www/services_captiveportal_vouchers.php:490 +#: usr/local/www/services_captiveportal_vouchers.php:499 +#: usr/local/www/services_captiveportal_vouchers.php:504 +msgid "add voucher" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’追加" + +#: usr/local/www/services_captiveportal_vouchers.php:475 +#: usr/local/www/services_captiveportal_vouchers.php:482 +#: usr/local/www/services_captiveportal_vouchers.php:495 +#: usr/local/www/services_captiveportal_vouchers.php:504 +#: usr/local/www/services_captiveportal_vouchers.php:509 +msgid "" +"Create, generate and activate Rolls with Vouchers that allow access through " +"the captive portal for the configured time. Once a voucher is activated, its " +"clock is started and runs uninterrupted until it expires. During that time, " +"the voucher can be re-used from the same or a different computer. If the " +"voucher is used again from another computer, the previous session is stopped." +msgstr "「作æˆç”Ÿæˆã—ã€çµŒç”±ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ãƒã‚¦ãƒãƒ£ãƒ¼ã¨ãƒ­ãƒ¼ãƒ«ã‚’アクティブã«ã€è¨­å®šã•ã‚ŒãŸæ™‚é–“ã®ãŸã‚ã®ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã€‚ãƒã‚¦ãƒãƒ£ãƒ¼ãŒèµ·å‹•ã•れるã¨ã€ãã®ã€Œã‚¯ãƒ­ãƒƒã‚¯ãŒé–‹å§‹ã•れã€ãれã¯ãã®é–“ã€æœŸé™åˆ‡ã‚Œã«ãªã‚‹ã¾ã§ä¸­æ–­ã›ãšã«å®Ÿè¡Œã€Œãƒã‚¦ãƒãƒ£ãƒ¼ã¯ã€åŒä¸€ã¾ãŸã¯ç•°ãªã‚‹ã‚³ãƒ³ãƒ”ュータã‹ã‚‰å†ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãる。 「ãƒã‚¦ãƒãƒ£ãƒ¼ã¯ã€åˆ¥ã®ã‚³ãƒ³ãƒ”ュータã‹ã‚‰å†åº¦ä½¿ç”¨ã•れる場åˆã€ä»¥å‰ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’åœæ­¢ã™ã‚‹ã€‚" + +#: usr/local/www/services_captiveportal_vouchers.php:481 +#: usr/local/www/services_captiveportal_vouchers.php:488 +#: usr/local/www/services_captiveportal_vouchers.php:501 +#: usr/local/www/services_captiveportal_vouchers.php:510 +#: usr/local/www/services_captiveportal_vouchers.php:515 +msgid "" +"Enable Voucher support first using the checkbox above and hit Save at the " +"bottom." +msgstr "「最åˆã«ã€ä¸Šè¨˜ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’使用ã—ã¦ã‚¯ãƒ¼ãƒãƒ³ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¦ã€ã§ã€ä¿å­˜ã‚’打ã¤ã€Œãƒœãƒˆãƒ ã€‚" + +#: usr/local/www/services_captiveportal_vouchers.php:486 +#: usr/local/www/services_captiveportal_vouchers.php:493 +#: usr/local/www/services_captiveportal_vouchers.php:506 +#: usr/local/www/services_captiveportal_vouchers.php:515 +#: usr/local/www/services_captiveportal_vouchers.php:520 +msgid "Voucher public key" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼å…¬é–‹éµ" + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:520 +#: usr/local/www/services_captiveportal_vouchers.php:525 +msgid "" +"Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is " +"used to decrypt vouchers." +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’復å·åŒ–ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる「 RSA公開éµã“ã“ã«PEMå½¢å¼ã®ï¼ˆ 64ビットã¾ãŸã¯ãれ以下) 。ã“ã®ã‚­ãƒ¼ã¯ã•れã¦è²¼ã‚Šä»˜ã‘〠。" + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:520 +#: usr/local/www/services_captiveportal_vouchers.php:527 +#: usr/local/www/services_captiveportal_vouchers.php:525 +#: usr/local/www/services_captiveportal_vouchers.php:532 +msgid "Generate" +msgstr "生æˆã™ã‚‹" + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:520 +#: usr/local/www/services_captiveportal_vouchers.php:527 +#: usr/local/www/services_captiveportal_vouchers.php:525 +#: usr/local/www/services_captiveportal_vouchers.php:532 +msgid "new key" +msgstr "æ–°ã—ã„キー" + +#: usr/local/www/services_captiveportal_vouchers.php:494 +#: usr/local/www/services_captiveportal_vouchers.php:501 +#: usr/local/www/services_captiveportal_vouchers.php:514 +#: usr/local/www/services_captiveportal_vouchers.php:523 +#: usr/local/www/services_captiveportal_vouchers.php:528 +msgid "Voucher private key" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ç§˜å¯†éµ" + +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:527 +#: usr/local/www/services_captiveportal_vouchers.php:532 +msgid "" +"Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is " +"only used to generate encrypted vouchers and doesn't need to be available if " +"the vouchers have been generated offline." +msgstr "「 RSA秘密éµã“ã“ã«PEMå½¢å¼ã®ï¼ˆ 64ビットã¾ãŸã¯ãれ以下) 。ã“ã®ã‚­ãƒ¼ãŒè²¼ã‚Šä»˜ã‘ã€ã®ã¿ã€æš—å·åŒ–ã•れãŸä¼ç¥¨ã‚’生æˆã—ã€ä¼ç¥¨ã‚’オフラインã§ç”Ÿæˆã•れãŸã€å ´åˆã«ä½¿ç”¨å¯èƒ½ã§ã‚ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“使用。" + +#: usr/local/www/services_captiveportal_vouchers.php:502 +#: usr/local/www/services_captiveportal_vouchers.php:509 +#: usr/local/www/services_captiveportal_vouchers.php:522 +#: usr/local/www/services_captiveportal_vouchers.php:531 +#: usr/local/www/services_captiveportal_vouchers.php:536 +msgid "Character set" +msgstr "文字セット" + +#: usr/local/www/services_captiveportal_vouchers.php:506 +#: usr/local/www/services_captiveportal_vouchers.php:513 +#: usr/local/www/services_captiveportal_vouchers.php:526 +#: usr/local/www/services_captiveportal_vouchers.php:535 +#: usr/local/www/services_captiveportal_vouchers.php:540 +msgid "" +"Tickets are generated with the specified character set. It should contain " +"printable characters (numbers, lower case and upper case letters) that are " +"hard to confuse with others. Avoid e.g. 0/O and l/1." +msgstr "「ãƒã‚±ãƒƒãƒˆã¯æŒ‡å®šã•ã‚ŒãŸæ–‡å­—セットã§ç”Ÿæˆã•れã¾ã™ã€‚ã“れã¯ã€å«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 「他ã®äººã¨æ··åŒã—ã«ãã„å°åˆ·å¯èƒ½ãªæ–‡å­—(数字ã€å°æ–‡å­—ã®ã¨å¤§æ–‡å­—を) 。例ãˆã°ã€0 / Oã¨L / 1ã‚’é¿ã‘ã¦ãã ã•ã„。" + +#: usr/local/www/services_captiveportal_vouchers.php:510 +#: usr/local/www/services_captiveportal_vouchers.php:517 +#: usr/local/www/services_captiveportal_vouchers.php:530 +#: usr/local/www/services_captiveportal_vouchers.php:539 +#: usr/local/www/services_captiveportal_vouchers.php:544 +msgid "of Roll Bits" +msgstr "ロールビットã®" + +#: usr/local/www/services_captiveportal_vouchers.php:514 +#: usr/local/www/services_captiveportal_vouchers.php:521 +#: usr/local/www/services_captiveportal_vouchers.php:534 +#: usr/local/www/services_captiveportal_vouchers.php:543 +#: usr/local/www/services_captiveportal_vouchers.php:548 +msgid "" +"Reserves a range in each voucher to store the Roll # it belongs to. Allowed " +"range: 1..31. Sum of Roll+Ticket+Checksum bits must be one Bit less than the " +"RSA key size." +msgstr "「ロールを格ç´ã™ã‚‹ãŸã‚ã«ã€å„ãƒã‚¦ãƒãƒ£ãƒ¼ã«ç¯„囲を予約" + +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:525 +#: usr/local/www/services_captiveportal_vouchers.php:538 +#: usr/local/www/services_captiveportal_vouchers.php:547 +#: usr/local/www/services_captiveportal_vouchers.php:552 +msgid "of Ticket Bits" +msgstr "ãƒã‚±ãƒƒãƒˆã®ãƒ“ット数" + +#: usr/local/www/services_captiveportal_vouchers.php:522 +#: usr/local/www/services_captiveportal_vouchers.php:529 +#: usr/local/www/services_captiveportal_vouchers.php:542 +#: usr/local/www/services_captiveportal_vouchers.php:551 +#: usr/local/www/services_captiveportal_vouchers.php:556 +msgid "" +"Reserves a range in each voucher to store the Ticket# it belongs to. Allowed " +"range: 1..16. Using 16 bits allows a roll to have up to 65535 vouchers. A " +"bit array, stored in RAM and in the config, is used to mark if a voucher has " +"been used. A bit array for 65535 vouchers requires 8 KB of storage." +msgstr "「ãƒã‚±ãƒƒãƒˆã‚’ä¿å­˜ã™ã‚‹ãŸã‚ã«ã€å„ãƒã‚¦ãƒãƒ£ãƒ¼ã«ç¯„囲を予約" + +#: usr/local/www/services_captiveportal_vouchers.php:526 +#: usr/local/www/services_captiveportal_vouchers.php:533 +#: usr/local/www/services_captiveportal_vouchers.php:546 +#: usr/local/www/services_captiveportal_vouchers.php:555 +#: usr/local/www/services_captiveportal_vouchers.php:560 +msgid "of Checksum Bits" +msgstr "ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã®ãƒ“ット数" + +#: usr/local/www/services_captiveportal_vouchers.php:530 +#: usr/local/www/services_captiveportal_vouchers.php:537 +#: usr/local/www/services_captiveportal_vouchers.php:550 +#: usr/local/www/services_captiveportal_vouchers.php:559 +#: usr/local/www/services_captiveportal_vouchers.php:564 +msgid "" +"Reserves a range in each voucher to store a simple checksum over Roll # and " +"Ticket#. Allowed range is 0..31." +msgstr "「ロールã«å¯¾ã™ã‚‹å˜ç´”ãªãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚’ä¿å­˜ã™ã‚‹ãŸã‚ã«ã€å„ãƒã‚¦ãƒãƒ£ãƒ¼ã§ã®ç¯„囲を予約" + +#: usr/local/www/services_captiveportal_vouchers.php:534 +#: usr/local/www/services_captiveportal_vouchers.php:541 +#: usr/local/www/services_captiveportal_vouchers.php:554 +#: usr/local/www/services_captiveportal_vouchers.php:563 +#: usr/local/www/services_captiveportal_vouchers.php:568 +msgid "Magic Number" +msgstr "マジックナンãƒãƒ¼" + +#: usr/local/www/services_captiveportal_vouchers.php:538 +#: usr/local/www/services_captiveportal_vouchers.php:545 +#: usr/local/www/services_captiveportal_vouchers.php:558 +#: usr/local/www/services_captiveportal_vouchers.php:567 +#: usr/local/www/services_captiveportal_vouchers.php:572 +msgid "" +"Magic number stored in every voucher. Verified during voucher check. Size " +"depends on how many bits are left by Roll+Ticket+Checksum bits. If all bits " +"are used, no magic number will be used and checked." +msgstr "「ãƒã‚¦ãƒãƒ£ãƒ¼ãƒã‚§ãƒƒã‚¯ã€‚広ã•ã”ã¨ã«ä¼ç¥¨ãŒæ¤œè¨¼æ¸ˆã¿ã«æ ¼ç´ã•れã¦ã„るマジックナンãƒãƒ¼ã¯ã€Œãƒ­ãƒ¼ãƒ«ãƒã‚±ãƒƒãƒˆãƒã‚§ãƒƒã‚¯ã‚µãƒ ãƒ“ットã ã‘残ã£ã¦ã„るビット数ã«ä¾å­˜ã—ã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ“ットãŒã€Œä½¿ç”¨ã•れã¦ã„ã‚‹å ´åˆã¯ã€ãƒžã‚¸ãƒƒã‚¯ãƒŠãƒ³ãƒãƒ¼ã¯ä½¿ç”¨ã•れãšã€ãƒã‚§ãƒƒã‚¯ã•れã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal_vouchers.php:542 +#: usr/local/www/services_captiveportal_vouchers.php:549 +#: usr/local/www/services_captiveportal_vouchers.php:562 +#: usr/local/www/services_captiveportal_vouchers.php:571 +#: usr/local/www/services_captiveportal_vouchers.php:576 +msgid "Invalid Voucher Message" +msgstr "無効ãªãƒã‚¦ãƒãƒ£ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" + +#: usr/local/www/services_captiveportal_vouchers.php:545 +#: usr/local/www/services_captiveportal_vouchers.php:552 +#: usr/local/www/services_captiveportal_vouchers.php:565 +#: usr/local/www/services_captiveportal_vouchers.php:574 +#: usr/local/www/services_captiveportal_vouchers.php:579 +msgid "" +"Error message displayed for invalid vouchers on captive portal error page" +msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚¨ãƒ©ãƒ¼ãƒšãƒ¼ã‚¸ã§ç„¡åйãªã‚¯ãƒ¼ãƒãƒ³ã«è¡¨ç¤ºã•れる"エラーメッセージ" + +#: usr/local/www/services_captiveportal_vouchers.php:549 +#: usr/local/www/services_captiveportal_vouchers.php:556 +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:578 +#: usr/local/www/services_captiveportal_vouchers.php:583 +msgid "Expired Voucher Message" +msgstr "期é™åˆ‡ã‚Œã®ã‚¯ãƒ¼ãƒãƒ³ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" + +#: usr/local/www/services_captiveportal_vouchers.php:552 +#: usr/local/www/services_captiveportal_vouchers.php:559 +#: usr/local/www/services_captiveportal_vouchers.php:572 +#: usr/local/www/services_captiveportal_vouchers.php:581 +#: usr/local/www/services_captiveportal_vouchers.php:586 +msgid "" +"Error message displayed for expired vouchers on captive portal error page" +msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚¨ãƒ©ãƒ¼ãƒšãƒ¼ã‚¸ä¸Šã®æœŸé™åˆ‡ã‚Œã®ã‚¯ãƒ¼ãƒãƒ³ã«è¡¨ç¤ºã•れる"エラーメッセージ" + +#: usr/local/www/services_captiveportal_vouchers.php:562 +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:582 +#: usr/local/www/services_captiveportal_vouchers.php:591 +#: usr/local/www/services_captiveportal_vouchers.php:596 +msgid "Voucher database synchronization" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®åŒæœŸ" + +#: usr/local/www/services_captiveportal_vouchers.php:568 +#: usr/local/www/services_captiveportal_vouchers.php:575 +#: usr/local/www/services_captiveportal_vouchers.php:588 +#: usr/local/www/services_captiveportal_vouchers.php:597 +#: usr/local/www/services_captiveportal_vouchers.php:602 +msgid "" +"IP address of master nodes webConfigurator to synchronize voucher database " +"and used vouchers from." +msgstr "「IPãƒã‚¦ãƒãƒ£ãƒ¼ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’åŒæœŸã™ã‚‹ã«ã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ãƒŽãƒ¼ãƒ‰webConfiguratorã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ã¨ã®ä½¿ç”¨ã®ãƒã‚¦ãƒãƒ£ãƒ¼ã€‚" + +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:576 +#: usr/local/www/services_captiveportal_vouchers.php:589 +#: usr/local/www/services_captiveportal_vouchers.php:598 +#: usr/local/www/services_captiveportal_vouchers.php:603 +msgid "NOTE: this should be setup on the slave nodes and not the primary node!" +msgstr "注:ã“れã¯ã€ã‚¹ãƒ¬ãƒ¼ãƒ–ノードã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã¨ãƒ—ライマリノードã§ã¯ãªã„ã¯ãšï¼" + +#: usr/local/www/services_captiveportal_vouchers.php:573 +#: usr/local/www/services_captiveportal_vouchers.php:580 +#: usr/local/www/services_captiveportal_vouchers.php:593 +#: usr/local/www/services_captiveportal_vouchers.php:602 +#: usr/local/www/services_captiveportal_vouchers.php:607 +msgid "Voucher sync port" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼åŒæœŸãƒãƒ¼ãƒˆ" + +#: usr/local/www/services_captiveportal_vouchers.php:576 +#: usr/local/www/services_captiveportal_vouchers.php:583 +#: usr/local/www/services_captiveportal_vouchers.php:596 +#: usr/local/www/services_captiveportal_vouchers.php:605 +#: usr/local/www/services_captiveportal_vouchers.php:610 +msgid "" +"This is the port of the master voucher nodes webConfigurator. Example: 443" +msgstr "「ã“れã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ãƒã‚¦ãƒãƒ£ãƒ¼ãƒŽãƒ¼ãƒ‰webConfiguratorã®ãƒãƒ¼ãƒˆã§ã™ä¾‹ï¼š 443" + +#: usr/local/www/services_captiveportal_vouchers.php:580 +#: usr/local/www/services_captiveportal_vouchers.php:587 +#: usr/local/www/services_captiveportal_vouchers.php:600 +#: usr/local/www/services_captiveportal_vouchers.php:609 +#: usr/local/www/services_captiveportal_vouchers.php:614 +msgid "Voucher sync username" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼åŒæœŸãƒ¦ãƒ¼ã‚¶å" + +#: usr/local/www/services_captiveportal_vouchers.php:583 +#: usr/local/www/services_captiveportal_vouchers.php:590 +#: usr/local/www/services_captiveportal_vouchers.php:603 +#: usr/local/www/services_captiveportal_vouchers.php:612 +#: usr/local/www/services_captiveportal_vouchers.php:617 +msgid "This is the username of the master voucher nodes webConfigurator." +msgstr "ã“れã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ãƒã‚¦ãƒãƒ£ãƒ¼ãƒŽãƒ¼ãƒ‰webConfiguratorã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã§ã™ã€‚" + +#: usr/local/www/services_captiveportal_vouchers.php:587 +#: usr/local/www/services_captiveportal_vouchers.php:594 +#: usr/local/www/services_captiveportal_vouchers.php:607 +#: usr/local/www/services_captiveportal_vouchers.php:616 +#: usr/local/www/services_captiveportal_vouchers.php:621 +msgid "Voucher sync password" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼åŒæœŸãƒ‘スワード" + +#: usr/local/www/services_captiveportal_vouchers.php:590 +#: usr/local/www/services_captiveportal_vouchers.php:597 +#: usr/local/www/services_captiveportal_vouchers.php:610 +#: usr/local/www/services_captiveportal_vouchers.php:619 +#: usr/local/www/services_captiveportal_vouchers.php:624 +msgid "This is the password of the master voucher nodes webConfigurator." +msgstr "ã“れã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ãƒã‚¦ãƒãƒ£ãƒ¼ãƒŽãƒ¼ãƒ‰webConfiguratorã®ãƒ‘スワードã§ã™ã€‚" + +#: usr/local/www/services_captiveportal_vouchers.php:604 +#: usr/local/www/services_captiveportal_vouchers.php:611 +#: usr/local/www/services_captiveportal_vouchers.php:625 +#: usr/local/www/services_captiveportal_vouchers.php:634 +#: usr/local/www/services_captiveportal_vouchers.php:639 +msgid "" +"Changing any Voucher parameter (apart from managing the list of Rolls) on " +"this page will render existing vouchers useless if they were generated with " +"different settings." +msgstr "彼らã¯ç•°ãªã‚‹è¨­å®šã€ã§ç”Ÿæˆã•れãŸå ´åˆã¯ã€ã“ã®ãƒšãƒ¼ã‚¸"ã«ï¼ˆé›¢ã‚Œã¦ãƒ­ãƒ¼ãƒ«ã®ãƒªã‚¹ãƒˆã‚’管ç†ã™ã‚‹ã‹ã‚‰ï¼‰ä»»æ„ã®ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ‘ラメータを変更ã™ã‚‹ã¨ã€ 「既存ã®å•†å“券ãŒç„¡é§„ã«ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal_vouchers.php:606 +#: usr/local/www/services_captiveportal_vouchers.php:613 +#: usr/local/www/services_captiveportal_vouchers.php:627 +#: usr/local/www/services_captiveportal_vouchers.php:636 +#: usr/local/www/services_captiveportal_vouchers.php:641 +msgid "" +"Specifying the Voucher Database Synchronization options will not record any " +"other value from the other options. They will be retrieved/synced from the " +"master." +msgstr "ä»–ã®ã‚ªãƒ—ションã‹ã‚‰åˆ¥ã®å€¤ã€Œã‚¯ãƒ¼ãƒãƒ³ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹åŒæœŸã‚ªãƒ—ションを指定ã™ã‚‹ã¨ã€ã„ãšã‚Œã‚‚記録ã•れã¾ã›ã‚“〠。彼らã¯ã€ 「マスターã‹ã‚‰åŒæœŸ/å–å¾—ã•れã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +msgid "Edit Voucher Rolls" +msgstr "編集ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ­ãƒ¼ãƒ«ã‚¹ãƒ­ã‚¤ã‚¹" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:101 +#: usr/local/www/services_captiveportal_vouchers_edit.php:99 +#: usr/local/www/services_captiveportal_vouchers_edit.php:99 +#, php-format +msgid "Roll number %s already exists." +msgstr "ロール番å·ã®%sã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:107 +#: usr/local/www/services_captiveportal_vouchers_edit.php:105 +#: usr/local/www/services_captiveportal_vouchers_edit.php:105 +#, php-format +msgid "Roll number must be numeric and less than %s" +msgstr "ロール番å·ã¯ã€æ•°å€¤ã‚„%s未満ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:110 +#: usr/local/www/services_captiveportal_vouchers_edit.php:108 +#: usr/local/www/services_captiveportal_vouchers_edit.php:108 +#, php-format +msgid "A roll has at least one voucher and less than %s." +msgstr "ロールã¯ã€å°‘ãªãã¨ã‚‚一ã¤ã®ãƒã‚¦ãƒãƒ£ãƒ¼ã¨%s.未満を有ã™ã‚‹" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:113 +#: usr/local/www/services_captiveportal_vouchers_edit.php:111 +#: usr/local/www/services_captiveportal_vouchers_edit.php:111 +msgid "Each voucher must be good for at least 1 minute." +msgstr "å„ãƒã‚¦ãƒãƒ£ãƒ¼ã¯1分以上良好ã§ãªã‘れã°ãªã‚‰ãªã„。" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:134 +#: usr/local/www/services_captiveportal_vouchers_edit.php:132 +#: usr/local/www/services_captiveportal_vouchers_edit.php:132 +#, php-format +msgid "All %1$s vouchers from Roll %2$s marked unused" +msgstr "ロール%2$sã‹ã‚‰ã™ã¹ã¦ã¯%1$såˆ¸ã¯æœªä½¿ç”¨ã¨ãƒžãƒ¼ã‚¯" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:177 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +msgid "Enter the Roll" +msgstr "ロールを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:177 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +msgid "found on top of the generated/printed vouchers" +msgstr "生æˆã•れãŸ/å°åˆ·ã•れãŸä¼ç¥¨ã®ä¸Šã«ç™ºè¦‹" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:181 +#: usr/local/www/services_captiveportal_vouchers_edit.php:179 +#: usr/local/www/services_captiveportal_vouchers_edit.php:179 +msgid "Minutes per Ticket" +msgstr "ãƒã‚±ãƒƒãƒˆã”ã¨ã®åˆ†" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:185 +#: usr/local/www/services_captiveportal_vouchers_edit.php:183 +#: usr/local/www/services_captiveportal_vouchers_edit.php:183 +msgid "" +"Defines the time in minutes that a user is allowed access. The clock starts " +"ticking the first time a voucher is used for authentication" +msgstr "「ユーザーãŒã‚¢ã‚¯ã‚»ã‚¹è¨±å¯ã•れã¦ã„る時間を分å˜ä½ã§å®šç¾©ã—ã¾ã™ã€‚クロック開始ã€ãƒã‚¦ãƒãƒ£ãƒ¼ãŒèªè¨¼ã«ä½¿ç”¨ã•れã¦ã„る最åˆã«åˆ»ã‚€" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:193 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +msgid "Enter the number of vouchers" +msgstr "ä¼ç¥¨ã®ç•ªå·ã‚’入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:193 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +msgid "" +"found on top of the generated/printed vouchers. WARNING: Changing this " +"number for an existing Roll will mark all vouchers as unused again" +msgstr "「生æˆã•れãŸ/å°åˆ·ã•れãŸä¼ç¥¨ã®ä¸Šã«è¦‹ã‚‰ã‚Œã‚‹è­¦å‘Šï¼šã“ã®å¤‰æ›´ã€ã‚’ã€æ—¢å­˜ã®ãƒ­ãƒ¼ãƒ«ã®ç•ªå·ãŒå†ã³ä½¿ç”¨ã•れã¦ã„ãªã„ãªã©ã€ã™ã¹ã¦ã®ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’マークã—ã¾ã™" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:201 +#: usr/local/www/services_captiveportal_vouchers_edit.php:199 +#: usr/local/www/services_captiveportal_vouchers_edit.php:199 +msgid "Can be used to further identify this roll. Ignored by the system" +msgstr "ã•らã«ã€ã“ã®ãƒ­ãƒ¼ãƒ«ã‚’識別ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚システムã§ã¯ç„¡è¦–" + +#: usr/local/www/diag_resetstate.php:54 usr/local/www/diag_resetstate.php:54 +msgid "The state table has been flushed successfully." +msgstr "çŠ¶æ…‹ãƒ†ãƒ¼ãƒ–ãƒ«ã¯æ­£å¸¸ã«ãƒ•ラッシュã•れã¦ã„る。" + +#: usr/local/www/diag_resetstate.php:60 usr/local/www/diag_resetstate.php:60 +msgid "The source tracking table has been flushed successfully." +msgstr "ã‚½ãƒ¼ã‚¹è¿½è·¡ãƒ†ãƒ¼ãƒ–ãƒ«ã¯æ­£å¸¸ã«ãƒ•ラッシュã•れã¦ã„る。" + +#: usr/local/www/diag_resetstate.php:64 usr/local/www/diag_resetstate.php:64 +msgid "Reset state" +msgstr "リセット状態" + +#: usr/local/www/diag_resetstate.php:91 usr/local/www/diag_resetstate.php:91 +msgid "Firewall state table" +msgstr "ファイアウォール状態テーブル" + +#: usr/local/www/diag_resetstate.php:93 usr/local/www/diag_resetstate.php:93 +msgid "" +"Resetting the state tables will remove all entries from the corresponding " +"tables. This means that all open connections will be broken and will have to " +"be re-established. This may be necessary after making substantial changes to " +"the firewall and/or NAT rules, especially if there are IP protocol mappings " +"(e.g. for PPTP or IPv6) with open connections." +msgstr "テーブル"状態テーブルをリセットã™ã‚‹ã¨ã€å¯¾å¿œã™ã‚‹ã‹ã‚‰ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã—ã¾ã™ã€ 。ã“れã¯ã€é–‹ã„ã¦ã„ã‚‹ã™ã¹ã¦ã®æŽ¥ç¶šãŒåˆ‡æ–­ã•れã€ã—ãªã‘れã°ãªã‚‰ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ï¼ˆ PPTP用ãªã©ã¾ãŸã¯ã€Œ IPプロトコルマッピングãŒã‚ã‚‹å ´åˆã¯ç‰¹ã«ã€ãƒ•ァイアウォールãŠã‚ˆã³/ã¾ãŸã¯NATã®ãƒ«ãƒ¼ãƒ«ã€Œå†ç¢ºç«‹ã™ã‚‹ã€‚ã“れã¯å¤§å¹…ã«å¤‰æ›´ã‚’加ãˆãŸå¾Œå¿…è¦ãªå ´åˆãŒã‚りã¾ã™ã€ã‚ªãƒ¼ãƒ—ン接続ã¨IPv6)ã®ã€‚" + +#: usr/local/www/diag_resetstate.php:100 usr/local/www/diag_resetstate.php:100 +msgid "" +"The firewall will normally leave the state tables intact when changing rules." +msgstr "ルールを変更ã™ã‚‹ã¨ãã«ã€Œãƒ•ァイアウォールã¯ã€é€šå¸¸ã¯ãã®ã¾ã¾ã®çŠ¶æ…‹ãƒ†ãƒ¼ãƒ–ãƒ«ã‚’æ®‹ã™ã€‚" + +#: usr/local/www/diag_resetstate.php:103 usr/local/www/diag_resetstate.php:103 +msgid "" +"NOTE: If you reset the firewall state table, the browser session may appear " +"to be hung after clicking "Reset". Simply refresh the page to " +"continue." +msgstr "「リセットã€ã‚’クリックã—ãŸå¾Œã«ãƒãƒ³ã‚°ã‚¢ãƒƒãƒ—ã—ã¦ã„るよã†ã«ã€ã€Œæ³¨ãƒ•ァイアウォール状態テーブルをリセットã™ã‚‹ã¨ã€ãƒ–ラウザセッションãŒè¡¨ç¤ºã•れるã“ã¨ãŒã‚りã¾ã™ã€ 。å˜ã«ã€Œç¶™ç¶šã—ã¦ãƒšãƒ¼ã‚¸ã‚’æ›´æ–°ã—ã¾ã™ã€‚" + +#: usr/local/www/diag_resetstate.php:113 usr/local/www/diag_resetstate.php:113 +msgid "Firewall Source Tracking" +msgstr "ファイアウォールソースã®è¿½è·¡" + +#: usr/local/www/diag_resetstate.php:115 usr/local/www/diag_resetstate.php:115 +msgid "" +"Resetting the source tracking table will remove all source/destination " +"associations. This means that the "sticky" source/destination association " +"will be cleared for all clients." +msgstr "団体「ソース追跡テーブルをリセットã™ã‚‹ã¨ã€ã™ã¹ã¦ã®é€ä¿¡å…ƒ/é€ä¿¡å…ˆã‚’削除ã—ã¾ã™ã€ 。ã“れã¯ã€Œç²˜ç€æ€§ã€ ã€é€ä¿¡å…ƒ/宛先å”会ã¯ã€Œã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãŸã‚ã«ã‚¯ãƒªã‚¢ã•れるã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" + +#: usr/local/www/diag_resetstate.php:119 usr/local/www/diag_resetstate.php:119 +msgid "This does not clear active connection states, only source tracking." +msgstr "ã“れã¯ã¯ã£ãりã—ãªã„ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæŽ¥ç¶šçŠ¶æ…‹ã€å”¯ä¸€ã®ã‚½ãƒ¼ã‚¹ã®è¿½è·¡ã‚’行ã„ã¾ã™ã€‚" + +#: usr/local/www/diag_resetstate.php:127 usr/local/www/status_lb_pool.php:218 +#: usr/local/www/status_lb_pool.php:218 usr/local/www/diag_resetstate.php:127 +msgid "Reset" +msgstr "リセット" + +#: usr/local/www/status_filter_reload.php:44 +#: usr/local/www/status_filter_reload.php:44 +msgid "Filter Reload Status" +msgstr "フィルタリロードステータス" + +#: usr/local/www/status_filter_reload.php:88 +#: usr/local/www/status_filter_reload.php:89 +#: usr/local/www/status_filter_reload.php:89 +msgid "" +"This page will automatically refresh every 3 seconds until the filter is " +"done reloading" +msgstr "リロード完了ã€ãƒ•ィルタãŒã•れるã¾ã§ã€ã“ã®ãƒšãƒ¼ã‚¸ã¯è‡ªå‹•çš„ã«3ç§’ã”ã¨ã«æ›´æ–°ã•れã¾ã™ã€" + +#: usr/local/www/diag_routes.php:45 usr/local/www/diag_routes.php:45 +msgid "Routing tables" +msgstr "ルーティングテーブル" + +#: usr/local/www/diag_routes.php:58 usr/local/www/diag_routes.php:59 +#: usr/local/www/diag_routes.php:59 +msgid "Name resolution" +msgstr "ã®åå‰è§£æ±º" + +#: usr/local/www/diag_routes.php:62 usr/local/www/diag_routes.php:63 +#: usr/local/www/diag_routes.php:63 +msgid "Enable this to attempt to resolve names when displaying the tables." +msgstr "テーブルを表示ã™ã‚‹ã¨ãã«åå‰ã‚’解決ã—よã†ã¨ã™ã‚‹ãŸã‚ã«ã€ã“れを有効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/diag_routes.php:69 usr/local/www/diag_routes.php:70 +#: usr/local/www/diag_routes.php:70 +msgid "Show" +msgstr "ショー" + +#: usr/local/www/diag_routes.php:72 +msgid "" +"By enabling name resolution, the query should take a bit longer. You can " +"stop it at any time by clicking the Stop button in your browser" +msgstr "åå‰è§£æ±ºã‚’å¯èƒ½ã«ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚¯ã‚¨ãƒªã¯å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚‹ã¯ãšã§ã™ã€‚ãŠä½¿ã„ã®ãƒ–ラウザã§ã€[åœæ­¢]ボタンをクリックã™ã‚‹ã¨ã€ã„ã¤ã§ã‚‚ãã‚Œã‚’åœæ­¢ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:63 +#: usr/local/www/diag_traceroute.php:63 +msgid "ttl" +msgstr "ttl" + +#: usr/local/www/diag_traceroute.php:66 usr/local/www/diag_traceroute.php:67 +#: usr/local/www/diag_traceroute.php:67 +#, php-format +msgid "Maximum number of hops must be between 1 and %s" +msgstr "最大ホップ数ã¯1ã¨%sã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: usr/local/www/diag_traceroute.php:94 usr/local/www/diag_traceroute.php:112 +#: usr/local/www/diag_traceroute.php:131 usr/local/www/diag_traceroute.php:131 +msgid "Maximum number of hops" +msgstr "ãƒ›ãƒƒãƒ—ã®æœ€å¤§æ•°" + +#: usr/local/www/diag_traceroute.php:104 usr/local/www/diag_traceroute.php:128 +#: usr/local/www/diag_traceroute.php:147 usr/local/www/diag_traceroute.php:147 +msgid "Use ICMP" +msgstr "使用ICMP" + +#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:141 +#: usr/local/www/diag_traceroute.php:162 usr/local/www/diag_traceroute.php:162 +msgid "" +"Traceroute may take a while to complete. You may hit the Stop button on your " +"browser at any time to see the progress of failed traceroutes." +msgstr "tracerouteã¯ã€å®Œäº†ã«æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã‚ãªãŸãŒå¤±æ•—ã—ãŸãƒˆãƒ¬ãƒ¼ã‚¹ãƒ«ãƒ¼ãƒˆã®é€²è¡Œçжæ³ã‚’確èªã™ã‚‹ãŸã‚ã«ã€ã„ã¤ã§ã‚‚ãŠä½¿ã„ã®ãƒ–ラウザã®[åœæ­¢]ボタンを押ã™ã“ã¨ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/diag_traceroute.php:120 usr/local/www/diag_traceroute.php:144 +#: usr/local/www/diag_traceroute.php:173 usr/local/www/diag_traceroute.php:173 +msgid "Traceroute output:" +msgstr "tracerouteã®å‡ºåŠ›ï¼š" + +#: usr/local/www/diag_traceroute.php:137 +msgid "Multi-wan is not supported from this utility currently." +msgstr "マルãƒWANã¯ç¾åœ¨ã€ã“ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ã‹ã‚‰ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“。" + +#: usr/local/www/status_graph.php:85 usr/local/www/fbegin.inc:173 +#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:199 +#: usr/local/www/status_graph.php:90 usr/local/www/status_graph.php:101 +#: usr/local/www/fbegin.inc:190 usr/local/www/status_graph.php:111 +#: usr/local/www/status_graph.php:111 usr/local/www/fbegin.inc:190 +msgid "Traffic Graph" +msgstr "トラフィックグラフ" + +#: usr/local/www/status_graph.php:197 +msgid "" +"Your browser does not support the type SVG! You need to either use Firefox " +"or download the Adobe SVG plugin" +msgstr "ã¾ãŸã¯Adobeã®SVGプラグインをダウンロード"ã‚ãªãŸã®ãƒ–ラウザã¯ã‚¿ã‚¤ãƒ—ã®SVG をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“ ï¼ã‚ãªãŸãŒFirefoxを使用ã™ã‚‹ã‹å¿…è¦ãŒã‚ã‚‹ã€" + +#: usr/local/www/status_graph.php:203 usr/local/www/status_graph.php:198 +#: usr/local/www/status_graph.php:209 usr/local/www/status_graph.php:220 +#: usr/local/www/status_graph.php:242 usr/local/www/status_graph.php:242 +msgid "Host IP" +msgstr "IPをホストã™ã‚‹" + +#: usr/local/www/status_graph.php:204 usr/local/www/status_graph.php:199 +#: usr/local/www/status_graph.php:210 usr/local/www/status_graph.php:221 +#: usr/local/www/status_graph.php:243 usr/local/www/status_graph.php:243 +msgid "Bandwidth In" +msgstr "帯域幅" + +#: usr/local/www/status_graph.php:205 usr/local/www/status_graph.php:200 +#: usr/local/www/status_graph.php:211 usr/local/www/status_graph.php:222 +#: usr/local/www/status_graph.php:244 usr/local/www/status_graph.php:244 +msgid "Bandwidth Out" +msgstr "帯域幅アウト" + +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +#: usr/local/www/status_graph.php:330 usr/local/www/status_graph.php:330 +msgid "the" +msgstr "ザ·" + +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +#: usr/local/www/status_graph.php:330 usr/local/www/status_graph.php:330 +msgid "Adobe SVG Viewer" +msgstr "アドビSVGビューアー" + +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +#: usr/local/www/status_graph.php:330 usr/local/www/status_graph.php:330 +msgid "" +"Firefox 1.5 or later or other browser supporting SVG is required to view the " +"graph" +msgstr "グラフ"ã®Firefox 1.5以é™ã€ã¾ãŸã¯ä»–ã®ãƒ–ラウザをサãƒãƒ¼ãƒˆã™ã‚‹SVGを表示ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ã€" + +#: usr/local/www/carp_status.php:71 usr/local/www/carp_status.php:67 +#: usr/local/www/carp_status.php:67 +#, php-format +msgid "" +"%s IPs have been disabled. Please note that disabling does not survive a " +"reboot." +msgstr "å†èµ·å‹•"%s IPãŒç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚ãã®ç„¡åŠ¹åŒ–ãŒç”Ÿå­˜ã—ã¾ã›ã‚“ã®ã§ã”注æ„ãã ã•ã„〠。" + +#: usr/local/www/carp_status.php:73 usr/local/www/carp_status.php:69 +#: usr/local/www/carp_status.php:69 +msgid "CARP has been enabled." +msgstr "CARPã¯æœ‰åйã«ãªã£ã¦ã„る。" + +#: usr/local/www/carp_status.php:127 usr/local/www/carp_status.php:120 +#: usr/local/www/carp_status.php:120 +msgid "Enable Carp" +msgstr "カープを有効ã«ã—ã¾ã™" + +#: usr/local/www/carp_status.php:130 usr/local/www/carp_status.php:123 +#: usr/local/www/carp_status.php:123 +msgid "Disable Carp" +msgstr "カープを無効ã«ã™ã‚‹" + +#: usr/local/www/carp_status.php:138 usr/local/www/carp_status.php:131 +#: usr/local/www/carp_status.php:131 +msgid "CARP Interface" +msgstr "CARPインタフェース" + +#: usr/local/www/carp_status.php:144 usr/local/www/carp_status.php:137 +#: usr/local/www/carp_status.php:137 +msgid "Could not locate any defined CARP interfaces." +msgstr "定義ã•れãŸä»»æ„ã®CARPインタフェースを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/carp_status.php:196 +msgid "You can configure CARP settings" +msgstr "ã‚ãªãŸã¯ã€ CARPã®è¨­å®šã‚’行ã†ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/carp_status.php:202 usr/local/www/carp_status.php:195 +#: usr/local/www/carp_status.php:195 +msgid "pfSync nodes" +msgstr "PFSYNC節" + +#: usr/local/www/status_interfaces.php:81 +#: usr/local/www/status_interfaces.php:84 +#: usr/local/www/status_interfaces.php:84 +msgid "interface" +msgstr "インターフェース" + +#: usr/local/www/status_interfaces.php:99 +#: usr/local/www/status_interfaces.php:117 +#: usr/local/www/status_interfaces.php:102 +#: usr/local/www/status_interfaces.php:120 +#: usr/local/www/status_interfaces.php:102 +#: usr/local/www/status_interfaces.php:120 +msgid "Release" +msgstr "リリース" + +#: usr/local/www/status_interfaces.php:102 +#: usr/local/www/status_interfaces.php:120 +#: usr/local/www/status_interfaces.php:105 +#: usr/local/www/status_interfaces.php:123 +#: usr/local/www/status_interfaces.php:105 +#: usr/local/www/status_interfaces.php:123 +msgid "Renew" +msgstr "æ›´æ–°ã™ã‚‹" + +#: usr/local/www/status_interfaces.php:117 +#: usr/local/www/status_interfaces.php:132 +#: usr/local/www/status_interfaces.php:147 +#: usr/local/www/status_interfaces.php:163 +#: usr/local/www/status_interfaces.php:135 +#: usr/local/www/status_interfaces.php:150 +#: usr/local/www/status_interfaces.php:165 +#: usr/local/www/status_interfaces.php:181 +#: usr/local/www/status_interfaces.php:138 +#: usr/local/www/status_interfaces.php:153 +#: usr/local/www/status_interfaces.php:168 +#: usr/local/www/status_interfaces.php:184 +#: usr/local/www/status_interfaces.php:138 +#: usr/local/www/status_interfaces.php:153 +#: usr/local/www/status_interfaces.php:168 +#: usr/local/www/status_interfaces.php:184 +msgid "Connect" +msgstr "接続ã™ã‚‹" + +#: usr/local/www/status_interfaces.php:171 +#: usr/local/www/status_interfaces.php:189 +#: usr/local/www/status_interfaces.php:192 +#: usr/local/www/status_interfaces.php:192 +msgid "Uptime " +msgstr "ç¨¼åƒæ™‚é–“" + +#: usr/local/www/status_interfaces.php:200 +#: usr/local/www/status_interfaces.php:274 +#: usr/local/www/status_interfaces.php:277 +#: usr/local/www/status_interfaces.php:277 +msgid "Subnet mask IPv4" +msgstr "サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯IPv4" + +#: usr/local/www/status_interfaces.php:207 +#: usr/local/www/status_interfaces.php:281 +#: usr/local/www/status_interfaces.php:284 +#: usr/local/www/status_interfaces.php:284 +msgid "Gateway IPv4" +msgstr "ゲートウェイã®IPv4" + +#: usr/local/www/status_interfaces.php:224 +#: usr/local/www/status_interfaces.php:305 +#: usr/local/www/status_interfaces.php:308 +#: usr/local/www/status_interfaces.php:308 +msgid "Subnet mask IPv6" +msgstr "サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã®IPv6" + +#: usr/local/www/status_interfaces.php:239 +#: usr/local/www/status_interfaces.php:320 +#: usr/local/www/status_interfaces.php:323 +#: usr/local/www/status_interfaces.php:323 +msgid "ISP DNS servers" +msgstr "ISPã®DNSサーãƒ" + +#: usr/local/www/status_interfaces.php:251 +#: usr/local/www/status_interfaces.php:332 +#: usr/local/www/status_interfaces.php:335 +#: usr/local/www/status_interfaces.php:335 +msgid "Media" +msgstr "メディア" + +#: usr/local/www/status_interfaces.php:272 +#: usr/local/www/status_interfaces.php:369 +#: usr/local/www/status_interfaces.php:372 +#: usr/local/www/status_interfaces.php:372 +msgid "BSSID" +msgstr "BSSID" + +#: usr/local/www/status_interfaces.php:279 +#: usr/local/www/diag_dump_states_sources.php:148 +#: usr/local/www/status_interfaces.php:376 +#: usr/local/www/status_interfaces.php:379 +#: usr/local/www/diag_dump_states_sources.php:147 +#: usr/local/www/diag_system_pftop.php:158 +#: usr/local/www/diag_dump_states_sources.php:147 +#: usr/local/www/status_interfaces.php:379 +#: usr/local/www/diag_system_pftop.php:158 +msgid "Rate" +msgstr "率" + +#: usr/local/www/status_interfaces.php:286 +#: usr/local/www/status_interfaces.php:383 +#: usr/local/www/status_interfaces.php:386 +#: usr/local/www/status_interfaces.php:386 +msgid "RSSI" +msgstr "RSSI" + +#: usr/local/www/status_interfaces.php:293 +#: usr/local/www/status_interfaces.php:390 +#: usr/local/www/status_interfaces.php:393 +#: usr/local/www/status_interfaces.php:393 +msgid "In/out packets" +msgstr "IN / OUTパケット" + +#: usr/local/www/status_interfaces.php:302 +#: usr/local/www/status_interfaces.php:399 +#: usr/local/www/status_interfaces.php:402 +#: usr/local/www/status_interfaces.php:402 +msgid "In/out packets (pass)" +msgstr "IN / OUTパケット( PASS)" + +#: usr/local/www/status_interfaces.php:311 +#: usr/local/www/status_interfaces.php:408 +#: usr/local/www/status_interfaces.php:411 +#: usr/local/www/status_interfaces.php:411 +msgid "In/out packets (block)" +msgstr "IN / OUTパケット(ブロック)" + +#: usr/local/www/status_interfaces.php:321 +#: usr/local/www/status_interfaces.php:418 +#: usr/local/www/status_interfaces.php:421 +#: usr/local/www/status_interfaces.php:421 +msgid "In/out errors" +msgstr "IN / OUTã®èª¤å·®" + +#: usr/local/www/status_interfaces.php:329 +#: usr/local/www/status_interfaces.php:426 +#: usr/local/www/status_interfaces.php:429 +#: usr/local/www/status_interfaces.php:429 +msgid "Collisions" +msgstr "è¡çª" + +#: usr/local/www/status_interfaces.php:338 +#: usr/local/www/status_interfaces.php:435 +#: usr/local/www/status_interfaces.php:438 +#: usr/local/www/status_interfaces.php:438 +#, php-format +msgid "Bridge (%s)" +msgstr "ブリッジ (%s)" + +#: usr/local/www/status_interfaces.php:360 +#: usr/local/www/status_interfaces.php:457 +#: usr/local/www/status_interfaces.php:460 +#: usr/local/www/status_interfaces.php:460 +msgid "Interrupts/Second" +msgstr "割り込ã¿/ç§’" + +#: usr/local/www/status_interfaces.php:363 +#: usr/local/www/status_interfaces.php:460 +#: usr/local/www/status_interfaces.php:463 +#: usr/local/www/status_interfaces.php:463 +msgid "total" +msgstr "ç·è¨ˆ" + +#: usr/local/www/status_interfaces.php:376 +#: usr/local/www/status_interfaces.php:473 +#: usr/local/www/status_interfaces.php:476 +#: usr/local/www/status_interfaces.php:476 +#, php-format +msgid "" +"Using dial-on-demand will bring the connection up again if any packet " +"triggers it. To substantiate this point: disconnecting manually will %snot%s " +"prevent dial-on-demand from making connections to the outside! Don't use " +"dial-on-demand if you want to make sure that the line is kept disconnected." +msgstr "ãれをトリガーã€ã®ã„ãšã‚Œã‹ã®ãƒ‘ケットãŒã‚れã°ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ä½¿ç”¨ã™ã‚‹ã¨ã€å†æŽ¥ç¶šãŒè¡¨ç¤ºã•れã¾ã™ã€ 。ã“ã®ç‚¹ã‚’実証ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«æ‰‹å‹•ã§åˆ‡æ–­ã™ã‚‹ã¨ã€ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ã¾ã™ã“ã¨ã‚’確èªã™ã‚‹ã‹ã©ã†ã‹ã®ãƒ©ã‚¤ãƒ³ãŒä¿ãŸã‚Œã¦ã„る「 ï¼ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰å¤–部ã¸ã®æŽ¥ç¶šã‚’行ã†ã¨ã€ ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„防ã〠%snot%sã¾ã™åˆ‡æ–­ã€‚" + +#: usr/local/www/exec.php:91 usr/local/www/exec.php:93 +#: usr/local/www/exec.php:93 +msgid "Execute command" +msgstr "コマンドを実行" + +#: usr/local/www/exec.php:153 usr/local/www/exec.php:155 +#: usr/local/www/exec.php:155 +msgid "Nothing to recall" +msgstr "ãªã—" + +#: usr/local/www/exec.php:222 usr/local/www/exec.php:224 +#: usr/local/www/exec.php:224 +msgid "Note: this function is unsupported. Use it on your own risk" +msgstr "注æ„: ã“ã®æ©Ÿèƒ½ã¯ã€ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。個人ã®è²¬ä»»ã§ã”使用ãã ã•ã„。" + +#: usr/local/www/exec.php:253 usr/local/www/exec.php:255 +#: usr/local/www/exec.php:255 +msgid "Execute Shell command" +msgstr "シェルコマンドを実行ã—ã¾ã™ã€‚" + +#: usr/local/www/exec.php:256 usr/local/www/exec.php:309 +#: usr/local/www/exec.php:258 usr/local/www/exec.php:311 +#: usr/local/www/exec.php:258 usr/local/www/exec.php:311 +msgid "Command" +msgstr "コマンド" + +#: usr/local/www/exec.php:264 usr/local/www/exec.php:315 +#: usr/local/www/exec.php:266 usr/local/www/exec.php:317 +#: usr/local/www/exec.php:266 usr/local/www/exec.php:317 +msgid "Execute" +msgstr "実行" + +#: usr/local/www/exec.php:266 usr/local/www/status_upnp.php:77 +#: usr/local/www/exec.php:268 usr/local/www/status_upnp.php:78 +#: usr/local/www/exec.php:268 usr/local/www/status_upnp.php:78 +msgid "Clear" +msgstr "クリアー" + +#: usr/local/www/exec.php:276 usr/local/www/exec.php:278 +#: usr/local/www/exec.php:278 +msgid "File to download" +msgstr "ダウンロードã™ã‚‹ãƒ•ァイル" + +#: usr/local/www/exec.php:293 usr/local/www/exec.php:295 +#: usr/local/www/exec.php:295 +msgid "File to upload" +msgstr "アップロードã™ã‚‹ãƒ•ァイル" + +#: usr/local/www/exec.php:306 usr/local/www/exec.php:308 +#: usr/local/www/exec.php:308 +msgid "PHP Execute" +msgstr "PHP実行" + +#: usr/local/www/exec.php:317 usr/local/www/exec.php:319 +#: usr/local/www/exec.php:319 +msgid "Example" +msgstr "例" + +#: usr/local/www/exec_raw.php:47 +msgid "Nothing specified. Cannot continue." +msgstr "指定ã•れãŸä½•ã‚‚ãªã„。続行ã§ãã¾ã›ã‚“。" + +#: usr/local/www/fbegin.inc:88 usr/local/www/fbegin.inc:105 +#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:106 +#: usr/local/www/fbegin.inc:106 +msgid "Packages" +msgstr "パッケージ" + +#: usr/local/www/fbegin.inc:89 usr/local/www/fbegin.inc:106 +#: usr/local/www/fbegin.inc:115 usr/local/www/fbegin.inc:107 +#: usr/local/www/fbegin.inc:107 +msgid "Setup Wizard" +msgstr "セットアップウィザード" + +#: usr/local/www/fbegin.inc:90 usr/local/www/diag_logs_routing.php:54 +#: usr/local/www/diag_logs_routing.php:84 usr/local/www/fbegin.inc:107 +#: usr/local/www/diag_logs_resolver.php:98 usr/local/www/diag_logs.php:97 +#: usr/local/www/diag_logs_wireless.php:86 +#: usr/local/www/diag_logs_gateways.php:98 +#: usr/local/www/diag_logs_routing.php:85 usr/local/www/fbegin.inc:116 +#: usr/local/www/diag_logs_resolver.php:99 +#: usr/local/www/diag_logs_wireless.php:87 +#: usr/local/www/diag_logs_gateways.php:99 usr/local/www/fbegin.inc:108 +#: usr/local/www/diag_logs_routing.php:54 +#: usr/local/www/diag_logs_routing.php:85 usr/local/www/diag_logs.php:97 +#: usr/local/www/diag_logs_gateways.php:99 usr/local/www/fbegin.inc:108 +#: usr/local/www/diag_logs_wireless.php:87 +#: usr/local/www/diag_logs_resolver.php:99 +msgid "Routing" +msgstr "ルーティング" + +#: usr/local/www/fbegin.inc:91 usr/local/www/fbegin.inc:108 +#: usr/local/www/fbegin.inc:117 usr/local/www/fbegin.inc:109 +#: usr/local/www/fbegin.inc:109 +msgid "Cert Manager" +msgstr "サティフィケートマãƒãƒ¼ã‚¸ãƒ£ãƒ¼" + +#: usr/local/www/fbegin.inc:123 usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/fbegin.inc:140 usr/local/www/fbegin.inc:149 +#: usr/local/www/fbegin.inc:141 usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/fbegin.inc:141 +msgid "DHCPv6 Relay" +msgstr "DHCPv6 リレー" + +#: usr/local/www/fbegin.inc:126 usr/local/www/fbegin.inc:143 +#: usr/local/www/services_dhcpv6.php:581 +#: usr/local/www/services_router_advertisements.php:260 +#: usr/local/www/services_dhcpv6.php:502 usr/local/www/services_dhcpv6.php:512 +#: usr/local/www/services_dhcpv6.php:513 usr/local/www/services_dhcpv6.php:523 +#: usr/local/www/services_router_advertisements.php:255 +#: usr/local/www/services_router_advertisements.php:255 +#: usr/local/www/services_dhcpv6.php:513 usr/local/www/services_dhcpv6.php:523 +msgid "DHCPv6 Server" +msgstr "DHCPv6 サーãƒãƒ¼" + +#: usr/local/www/fbegin.inc:129 usr/local/www/status_services.php:316 +#: usr/local/www/widgets/widgets/services_status.widget.php:121 +#: usr/local/www/fbegin.inc:146 etc/inc/service-utils.inc:299 +#: usr/local/www/fbegin.inc:155 usr/local/www/fbegin.inc:147 +#: etc/inc/service-utils.inc:298 etc/inc/service-utils.inc:315 +#: usr/local/www/fbegin.inc:147 etc/inc/service-utils.inc:315 +msgid "IGMP proxy" +msgstr "IGMP プロキシ" + +#: usr/local/www/fbegin.inc:131 usr/local/www/fbegin.inc:149 +msgid "OLSR" +msgstr "OSLR" + +#: usr/local/www/fbegin.inc:132 usr/local/www/vpn_pppoe_edit.php:234 +#: usr/local/www/fbegin.inc:150 usr/local/www/fbegin.inc:158 +#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/vpn_pppoe_edit.php:237 +#: usr/local/www/fbegin.inc:150 +msgid "PPPoE Server" +msgstr "PPPoE サーãƒãƒ¼" + +#: usr/local/www/fbegin.inc:133 usr/local/www/fbegin.inc:151 +#: usr/local/www/fbegin.inc:159 +msgid "RIP" +msgstr "RIP" + +#: usr/local/www/fbegin.inc:139 usr/local/www/fbegin.inc:175 +#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:193 +#: usr/local/www/fbegin.inc:165 usr/local/www/fbegin.inc:201 +#: usr/local/www/fbegin.inc:156 usr/local/www/fbegin.inc:192 +#: usr/local/www/fbegin.inc:156 usr/local/www/fbegin.inc:192 +msgid "UPnP & NAT-PMP" +msgstr "UPnP & NAT-PMP" + +#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:174 +#: usr/local/www/fbegin.inc:182 usr/local/www/fbegin.inc:173 +#: usr/local/www/fbegin.inc:173 +msgid "CARP (failover)" +msgstr "CARP (フェイルオーãƒãƒ¼)" + +#: usr/local/www/fbegin.inc:158 usr/local/www/fbegin.inc:175 +#: usr/local/www/fbegin.inc:183 usr/local/www/fbegin.inc:174 +#: usr/local/www/fbegin.inc:174 +msgid "Dashboard" +msgstr "ダッシュボード" + +#: usr/local/www/fbegin.inc:160 usr/local/www/fbegin.inc:177 +#: usr/local/www/fbegin.inc:185 usr/local/www/fbegin.inc:176 +#: usr/local/www/fbegin.inc:176 +msgid "DHCP Leases" +msgstr "DHCP リース" + +#: usr/local/www/fbegin.inc:161 usr/local/www/fbegin.inc:178 +#: usr/local/www/fbegin.inc:186 usr/local/www/fbegin.inc:177 +#: usr/local/www/fbegin.inc:177 +msgid "DHCPv6 Leases" +msgstr "DHCPv6 リース" + +#: usr/local/www/fbegin.inc:162 usr/local/www/fbegin.inc:179 +#: usr/local/www/fbegin.inc:187 usr/local/www/fbegin.inc:178 +#: usr/local/www/fbegin.inc:178 +msgid "Filter Reload" +msgstr "リロードを絞り込む" + +#: usr/local/www/fbegin.inc:168 usr/local/www/fbegin.inc:186 +#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:185 +#: usr/local/www/fbegin.inc:185 +msgid "Package Logs" +msgstr "パッケージログ" + +#: usr/local/www/fbegin.inc:169 usr/local/www/status_queues.php:98 +#: usr/local/www/status_rrd_graph.php:338 +#: usr/local/www/status_rrd_graph_settings.php:57 +#: usr/local/www/status_rrd_graph_settings.php:137 +#: usr/local/www/fbegin.inc:187 +#: usr/local/www/status_rrd_graph_settings.php:138 +#: usr/local/www/status_queues.php:101 usr/local/www/status_rrd_graph.php:386 +#: usr/local/www/fbegin.inc:195 usr/local/www/status_rrd_graph.php:411 +#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:186 +#: usr/local/www/status_rrd_graph.php:411 +#: usr/local/www/status_rrd_graph_settings.php:57 +#: usr/local/www/status_rrd_graph_settings.php:138 +#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:186 +msgid "Queues" +msgstr "キュー" + +#: usr/local/www/fbegin.inc:170 usr/local/www/status_rrd_graph.php:224 +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_settings.php:113 +#: usr/local/www/status_rrd_graph_settings.php:171 +#: usr/local/www/fbegin.inc:188 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/status_rrd_graph_settings.php:172 +#: usr/local/www/status_rrd_graph.php:244 usr/local/www/fbegin.inc:196 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/status_rrd_graph.php:248 usr/local/www/fbegin.inc:187 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/status_rrd_graph.php:248 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/status_rrd_graph_settings.php:172 +#: usr/local/www/fbegin.inc:187 +msgid "RRD Graphs" +msgstr "RRDグラフ" + +#: usr/local/www/fbegin.inc:172 usr/local/www/fbegin.inc:190 +#: usr/local/www/fbegin.inc:198 usr/local/www/fbegin.inc:189 +#: usr/local/www/fbegin.inc:189 +msgid "System Logs" +msgstr "システムログ" + +#: usr/local/www/fbegin.inc:188 +msgid "ARP Tables" +msgstr "ARPテーブル" + +#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:209 +#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:208 +#: usr/local/www/fbegin.inc:208 +msgid "Command Prompt" +msgstr "コマンドプロンプト" + +#: usr/local/www/fbegin.inc:193 usr/local/www/fbegin.inc:211 +#: usr/local/www/fbegin.inc:219 usr/local/www/fbegin.inc:210 +#: usr/local/www/fbegin.inc:210 +msgid "Edit File" +msgstr "ファイルã®ç·¨é›†" + +#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:212 +#: usr/local/www/fbegin.inc:220 usr/local/www/fbegin.inc:211 +#: usr/local/www/fbegin.inc:211 +msgid "Factory Defaults" +msgstr "å·¥å ´å‡ºè·æ™‚ã®ãƒ‡ãƒ•ォルト" + +#: usr/local/www/fbegin.inc:195 usr/local/www/fbegin.inc:213 +#: usr/local/www/fbegin.inc:221 usr/local/www/fbegin.inc:212 +#: usr/local/www/fbegin.inc:212 +msgid "Halt System" +msgstr "åœæ­¢ã‚·ã‚¹ãƒ†ãƒ " + +#: usr/local/www/fbegin.inc:196 usr/local/www/fbegin.inc:214 +#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:213 +#: usr/local/www/fbegin.inc:213 +msgid "Limiter Info" +msgstr "リミッタ情報" + +#: usr/local/www/fbegin.inc:197 usr/local/www/diag_ndp.php:103 +#: usr/local/www/fbegin.inc:215 usr/local/www/fbegin.inc:223 +#: usr/local/www/fbegin.inc:214 usr/local/www/diag_ndp.php:103 +#: usr/local/www/fbegin.inc:214 +msgid "NDP Table" +msgstr "NDP表" + +#: usr/local/www/fbegin.inc:201 usr/local/www/fbegin.inc:219 +#: usr/local/www/fbegin.inc:227 usr/local/www/fbegin.inc:219 +msgid "pfInfo" +msgstr "PFINFO" + +#: usr/local/www/fbegin.inc:202 usr/local/www/fbegin.inc:220 +#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:220 +msgid "pfTop" +msgstr "pfTop" + +#: usr/local/www/fbegin.inc:203 usr/local/www/fbegin.inc:221 +#: usr/local/www/fbegin.inc:229 usr/local/www/fbegin.inc:221 +msgid "Reboot" +msgstr "å†èµ·å‹•" + +#: usr/local/www/fbegin.inc:205 usr/local/www/fbegin.inc:223 +#: usr/local/www/widgets/widgets/smart_status.widget.php:38 +#: usr/local/www/fbegin.inc:231 +#: usr/local/www/widgets/widgets/smart_status.widget.php:39 +#: usr/local/www/fbegin.inc:223 +#: usr/local/www/widgets/widgets/smart_status.widget.php:39 +msgid "SMART Status" +msgstr "SMARTステータス" + +#: usr/local/www/fbegin.inc:207 usr/local/www/fbegin.inc:225 +#: usr/local/www/fbegin.inc:234 usr/local/www/fbegin.inc:226 +#: usr/local/www/fbegin.inc:226 +msgid "States Summary" +msgstr "米国ã®ã¾ã¨ã‚" + +#: usr/local/www/fbegin.inc:208 usr/local/www/fbegin.inc:226 +#: usr/local/www/fbegin.inc:235 usr/local/www/fbegin.inc:227 +#: usr/local/www/fbegin.inc:227 +msgid "System Activity" +msgstr "システム活動" + +#: usr/local/www/fbegin.inc:216 usr/local/www/fbegin.inc:233 +#: usr/local/www/fbegin.inc:242 usr/local/www/fbegin.inc:234 +#: usr/local/www/fbegin.inc:234 +msgid "Restart HTTPD" +msgstr "リスタートHTTPD" + +#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:240 +#: usr/local/www/fbegin.inc:249 usr/local/www/fbegin.inc:241 +#: usr/local/www/fbegin.inc:241 +msgid "About this Page" +msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã«ã¤ã„ã¦" + +#: usr/local/www/fbegin.inc:224 usr/local/www/fbegin.inc:242 +#: usr/local/www/fbegin.inc:251 usr/local/www/fbegin.inc:243 +#: usr/local/www/fbegin.inc:243 +msgid "Bug Database" +msgstr "ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹" + +#: usr/local/www/fbegin.inc:225 usr/local/www/fbegin.inc:243 +#: usr/local/www/fbegin.inc:252 usr/local/www/fbegin.inc:244 +#: usr/local/www/fbegin.inc:244 +msgid "User Forum" +msgstr "ユーザーフォーラム" + +#: usr/local/www/fbegin.inc:226 usr/local/www/fbegin.inc:244 +#: usr/local/www/fbegin.inc:253 usr/local/www/fbegin.inc:245 +#: usr/local/www/fbegin.inc:245 +msgid "Documentation" +msgstr "ドキュメンテーション" + +#: usr/local/www/fbegin.inc:227 usr/local/www/fbegin.inc:245 +#: usr/local/www/fbegin.inc:254 usr/local/www/fbegin.inc:246 +#: usr/local/www/fbegin.inc:246 +msgid "Developers Wiki" +msgstr "開発者ã¯ã‚¦ã‚£ã‚­" + +#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:246 +#: usr/local/www/fbegin.inc:255 usr/local/www/fbegin.inc:247 +#: usr/local/www/fbegin.inc:247 +msgid "Paid Support" +msgstr "有償サãƒãƒ¼ãƒˆ" + +#: usr/local/www/fbegin.inc:229 usr/local/www/fbegin.inc:247 +#: usr/local/www/fbegin.inc:256 usr/local/www/fbegin.inc:248 +#: usr/local/www/fbegin.inc:248 +msgid "pfSense Book" +msgstr "pfSenseブック" + +#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:248 +#: usr/local/www/fbegin.inc:257 usr/local/www/fbegin.inc:249 +#: usr/local/www/fbegin.inc:249 +msgid "Search portal" +msgstr "検索ãƒãƒ¼ã‚¿ãƒ«" + +#: usr/local/www/fbegin.inc:231 usr/local/www/fbegin.inc:249 +#: usr/local/www/fbegin.inc:258 usr/local/www/fbegin.inc:250 +#: usr/local/www/fbegin.inc:250 +msgid "FreeBSD Handbook" +msgstr "FreeBSDãƒãƒ³ãƒ‰ãƒ–ック" + +#: usr/local/www/fbegin.inc:376 usr/local/www/fbegin.inc:394 +#: usr/local/www/fbegin.inc:340 usr/local/www/fbegin.inc:332 +#: usr/local/www/fbegin.inc:332 +msgid "Help" +msgstr "助ã‘" + +#: usr/local/www/fbegin.inc:425 usr/local/www/fbegin.inc:443 +msgid "Status of items on this page." +msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é …ç›®ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã€‚" + +#: usr/local/www/fbegin.inc:428 usr/local/www/fbegin.inc:446 +msgid "Log entries for items on this page." +msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é …ç›®ã®ã‚¨ãƒ³ãƒˆãƒªã‚’ログã«è¨˜éŒ²ã—ã¾ã™ã€‚" + +#: usr/local/www/fbegin.inc:431 usr/local/www/fbegin.inc:449 +msgid "Help for items on this page." +msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é …ç›®ã®ãƒ˜ãƒ«ãƒ—を表示ã—ã¾ã™ã€‚" + +#: usr/local/www/fbegin.inc:441 usr/local/www/fbegin.inc:459 +#: usr/local/www/fbegin.inc:429 usr/local/www/fbegin.inc:421 +#: usr/local/www/fbegin.inc:421 +msgid "" +"Packages are currently being reinstalled in the background.

    Do not make " +"changes in the GUI until this is complete." +msgstr "「パッケージã¯ç¾åœ¨ã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„る。 u003cPu003eã¯ã—ãªã„ã§ãã ã•ã„ã€ã“れãŒå®Œäº†ã™ã‚‹ã¾ã§ã€GUIã®å¤‰æ›´ã‚’。" + +#: usr/local/www/status_queues.php:98 usr/local/www/status_queues.php:101 +#: usr/local/www/status_queues.php:109 usr/local/www/status_queues.php:109 +msgid "Traffic shaper" +msgstr "トラフィックシェー" + +#: usr/local/www/status_queues.php:107 usr/local/www/status_queues.php:110 +#: usr/local/www/status_queues.php:111 usr/local/www/status_queues.php:117 +#: usr/local/www/status_queues.php:117 +msgid "Traffic shaping is not configured." +msgstr "トラフィックシェーピングãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/status_queues.php:136 usr/local/www/status_queues.php:143 +#: usr/local/www/status_queues.php:144 usr/local/www/status_queues.php:149 +#: usr/local/www/status_queues.php:149 +msgid "Statistics" +msgstr "統計" + +#: usr/local/www/status_queues.php:158 usr/local/www/status_queues.php:165 +#: usr/local/www/status_queues.php:166 usr/local/www/status_queues.php:223 +#: usr/local/www/status_queues.php:224 usr/local/www/status_queues.php:224 +msgid "Loading" +msgstr "è·é‡" + +#: usr/local/www/status_queues.php:173 usr/local/www/status_queues.php:181 +#: usr/local/www/status_queues.php:182 usr/local/www/status_queues.php:164 +#: usr/local/www/status_queues.php:164 +msgid "Queue graphs take 5 seconds to sample data" +msgstr "キュー·グラフã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚’サンプリングã™ã‚‹ãŸã‚ã«5ç§’ã‚’è¦ã™ã‚‹" + +#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182 +#: usr/local/www/status_queues.php:183 usr/local/www/status_queues.php:165 +#: usr/local/www/status_queues.php:165 +msgid "You can configure the Traffic Shaper" +msgstr "ã‚ãªãŸã¯ã€ãƒˆãƒ©ãƒ•ィック·シェイパーを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/status_rrd_graph.php:211 +#: usr/local/www/status_rrd_graph_settings.php:59 +#: usr/local/www/status_rrd_graph.php:174 +#: usr/local/www/status_rrd_graph.php:179 +#: usr/local/www/status_rrd_graph.php:179 +#: usr/local/www/status_rrd_graph_settings.php:59 +msgid "Inverse" +msgstr "逆数" + +#: usr/local/www/status_rrd_graph.php:212 +#: usr/local/www/status_rrd_graph_settings.php:60 +#: usr/local/www/status_rrd_graph.php:175 +#: usr/local/www/status_rrd_graph.php:180 +#: usr/local/www/status_rrd_graph.php:180 +#: usr/local/www/status_rrd_graph_settings.php:60 +msgid "Absolute" +msgstr "絶対的ãª" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:61 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph_settings.php:61 +msgid "Absolute Timespans" +msgstr "絶対タイムスパン" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:62 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph_settings.php:62 +msgid "Current Period" +msgstr "当期" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:63 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph_settings.php:63 +msgid "Previous Period" +msgstr "剿œŸ" + +#: usr/local/www/status_rrd_graph.php:331 +#: usr/local/www/status_rrd_graph_settings.php:54 +#: usr/local/www/status_rrd_graph_settings.php:130 +#: usr/local/www/status_rrd_graph_settings.php:131 +#: usr/local/www/status_rrd_graph.php:379 +#: usr/local/www/status_rrd_graph.php:404 +#: usr/local/www/status_rrd_graph.php:404 +#: usr/local/www/status_rrd_graph_settings.php:54 +#: usr/local/www/status_rrd_graph_settings.php:131 +msgid "Traffic" +msgstr "トラフィック" + +#: usr/local/www/status_rrd_graph.php:333 +#: usr/local/www/status_rrd_graph_settings.php:55 +#: usr/local/www/status_rrd_graph_settings.php:132 +#: usr/local/www/status_rrd_graph_settings.php:133 +#: usr/local/www/status_rrd_graph.php:381 +#: usr/local/www/status_rrd_graph.php:406 +#: usr/local/www/status_rrd_graph.php:406 +#: usr/local/www/status_rrd_graph_settings.php:55 +#: usr/local/www/status_rrd_graph_settings.php:133 +msgid "Packets" +msgstr "パケット" + +#: usr/local/www/status_rrd_graph.php:335 +#: usr/local/www/status_rrd_graph_settings.php:56 +#: usr/local/www/status_rrd_graph_settings.php:134 +#: usr/local/www/status_rrd_graph_settings.php:135 +#: usr/local/www/status_rrd_graph.php:383 +#: usr/local/www/status_rrd_graph.php:408 +#: usr/local/www/status_rrd_graph.php:408 +#: usr/local/www/status_rrd_graph_settings.php:56 +#: usr/local/www/status_rrd_graph_settings.php:135 +msgid "Quality" +msgstr "å“質" + +#: usr/local/www/status_rrd_graph.php:340 +#: usr/local/www/status_rrd_graph_settings.php:139 +#: usr/local/www/status_rrd_graph_settings.php:140 +#: usr/local/www/status_rrd_graph.php:388 +#: usr/local/www/status_rrd_graph.php:413 +#: usr/local/www/status_rrd_graph.php:413 +#: usr/local/www/status_rrd_graph_settings.php:140 +msgid "QueueDrops" +msgstr "QueueDrops" + +#: usr/local/www/status_rrd_graph.php:348 +#: usr/local/www/status_rrd_graph_settings.php:147 +#: usr/local/www/status_rrd_graph_settings.php:148 +#: usr/local/www/status_rrd_graph.php:396 +#: usr/local/www/status_rrd_graph.php:421 +#: usr/local/www/status_rrd_graph.php:421 +#: usr/local/www/status_rrd_graph_settings.php:148 +msgid "Cellular" +msgstr "細胞ã®" + +#: usr/local/www/status_rrd_graph.php:371 +#: usr/local/www/status_rrd_graph.php:419 +#: usr/local/www/status_rrd_graph.php:451 +#: usr/local/www/status_rrd_graph.php:451 +msgid "" +"Note: Change of color and/or style may not take effect until the next refresh" +msgstr ""注:色ãŠã‚ˆã³/ã¾ãŸã¯ã‚¹ã‚¿ã‚¤ãƒ«ã®å¤‰æ›´ã¯ã€æ¬¡å›žã®æ›´æ–°ã¾ã§ã¯æœ‰åйã«ãªã‚Šã¾ã›ã‚“" + +#: usr/local/www/status_rrd_graph.php:375 +#: usr/local/www/status_rrd_graph.php:423 +#: usr/local/www/status_rrd_graph.php:455 +#: usr/local/www/status_rrd_graph.php:455 +msgid "Graphs:" +msgstr "グラフ:" + +#: usr/local/www/status_rrd_graph.php:432 +#: usr/local/www/status_rrd_graph.php:480 +#: usr/local/www/status_rrd_graph.php:515 +#: usr/local/www/status_rrd_graph.php:515 +msgid "Style:" +msgstr "スタイル:" + +#: usr/local/www/status_rrd_graph.php:446 +#: usr/local/www/status_rrd_graph.php:494 +#: usr/local/www/status_rrd_graph.php:529 +#: usr/local/www/status_rrd_graph.php:529 +msgid "Period:" +msgstr "期間:" + +#: usr/local/www/status_rrd_graph.php:461 +#: usr/local/www/status_rrd_graph.php:513 +#: usr/local/www/status_rrd_graph.php:548 +#: usr/local/www/status_rrd_graph.php:548 +msgid "Start:" +msgstr "èµ·å‹•ã—ã¾ã™ã€‚" + +#: usr/local/www/status_rrd_graph.php:463 +#: usr/local/www/status_rrd_graph.php:515 +#: usr/local/www/status_rrd_graph.php:550 +#: usr/local/www/status_rrd_graph.php:550 +msgid "End:" +msgstr "終了:" + +#: usr/local/www/status_rrd_graph.php:465 +#: usr/local/www/status_rrd_graph.php:517 +#: usr/local/www/status_rrd_graph.php:552 +#: usr/local/www/status_rrd_graph.php:552 +msgid "Go" +msgstr "行ã" + +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/status_rrd_graph_img.php:43 +msgid "Image viewer" +msgstr "ç”»åƒãƒ“ューアー" + +#: usr/local/www/status_rrd_graph_img.php:216 +#: usr/local/www/status_rrd_graph_img.php:221 +#: usr/local/www/status_rrd_graph_img.php:221 +#, php-format +msgid "rrdcolors.inc.php for theme %s does not exist, using defaults!" +msgstr "テーマ%s用rrdcolors.inc.phpã¯ãƒ‡ãƒ•ォルトを使用ã—ã¦ã€å­˜åœ¨ã—ã¾ã›ã‚“ ï¼" + +#: usr/local/www/status_rrd_graph_img.php:1095 +#: usr/local/www/status_rrd_graph_img.php:1088 +#: usr/local/www/status_rrd_graph_img.php:1093 +#: usr/local/www/status_rrd_graph_img.php:1093 +#, php-format +msgid "Sorry we do not have data to graph for %s" +msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€æˆ‘々ã¯%sãŸã‚ã€ã‚°ãƒ©ãƒ•ã«ãƒ‡ãƒ¼ã‚¿ã‚’æŒã£ã¦ã„ãªã„" + +#: usr/local/www/status_rrd_graph_img.php:1115 +#: usr/local/www/status_rrd_graph_img.php:1108 +#: usr/local/www/status_rrd_graph_img.php:1113 +#: usr/local/www/status_rrd_graph_img.php:1113 +#, php-format +msgid "Failed to create graph with error code %1$s, the error is: %2$s" +msgstr "エラーコードã¯%1$sã§ã‚°ãƒ©ãƒ•ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€ã‚¨ãƒ©ãƒ¼ï¼š %2$s" + +#: usr/local/www/status_rrd_graph_img.php:1117 +#: usr/local/www/status_rrd_graph_img.php:1124 +#: usr/local/www/status_rrd_graph_img.php:1110 +#: usr/local/www/status_rrd_graph_img.php:1115 +#: usr/local/www/status_rrd_graph_img.php:1122 +#: usr/local/www/status_rrd_graph_img.php:1115 +#: usr/local/www/status_rrd_graph_img.php:1122 +#, php-format +msgid "failed to create graph from %s%s, removing database" +msgstr "データベースを削除〠%s%sã‹ã‚‰ã‚°ãƒ©ãƒ•を作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: usr/local/www/status_rrd_graph_settings.php:174 +#: usr/local/www/status_rrd_graph_settings.php:175 +#: usr/local/www/status_rrd_graph_settings.php:175 +msgid "Enables the RRD graphing backend." +msgstr "ã®RRDグラフã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’有効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/status_rrd_graph_settings.php:178 +#: usr/local/www/status_rrd_graph_settings.php:179 +#: usr/local/www/status_rrd_graph_settings.php:179 +msgid "Default category" +msgstr "デフォルトã®ã‚«ãƒ†ã‚´ãƒª" + +#: usr/local/www/status_rrd_graph_settings.php:189 +#: usr/local/www/status_rrd_graph_settings.php:190 +#: usr/local/www/status_rrd_graph_settings.php:190 +msgid "This selects default category." +msgstr "ã“れã¯ãƒ‡ãƒ•ォルトã®ã‚«ãƒ†ã‚´ãƒªã‚’é¸æŠžã™ã‚‹ã€‚" + +#: usr/local/www/status_rrd_graph_settings.php:193 +#: usr/local/www/status_rrd_graph_settings.php:194 +#: usr/local/www/status_rrd_graph_settings.php:194 +msgid "Default style" +msgstr "デフォルトã®ã‚¹ã‚¿ã‚¤ãƒ«" + +#: usr/local/www/status_rrd_graph_settings.php:204 +#: usr/local/www/status_rrd_graph_settings.php:205 +#: usr/local/www/status_rrd_graph_settings.php:205 +msgid "This selects the default style." +msgstr "ã“れãŒãƒ‡ãƒ•ォルトã®ã‚¹ã‚¿ã‚¤ãƒ«ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/status_rrd_graph_settings.php:208 +#: usr/local/www/status_rrd_graph_settings.php:209 +#: usr/local/www/status_rrd_graph_settings.php:209 +msgid "Default period" +msgstr "ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æœŸé–“" + +#: usr/local/www/status_rrd_graph_settings.php:219 +#: usr/local/www/status_rrd_graph_settings.php:220 +#: usr/local/www/status_rrd_graph_settings.php:220 +msgid "This selects the default period." +msgstr "ã“れã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æœŸé–“ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/status_rrd_graph_settings.php:231 +#: usr/local/www/status_rrd_graph_settings.php:232 +#: usr/local/www/status_rrd_graph_settings.php:232 +msgid "Reset RRD Data" +msgstr "RRDデータをリセットã™ã‚‹" + +#: usr/local/www/status_rrd_graph_settings.php:231 +#: usr/local/www/status_rrd_graph_settings.php:232 +#: usr/local/www/status_rrd_graph_settings.php:232 +msgid "" +"Do you really want to reset the RRD graphs? This will erase all graph data." +msgstr ""本当ã«RRDグラフをリセットã—ã¾ã™ã‹ï¼Ÿã“れã¯ã€ã™ã¹ã¦ã®ã‚°ãƒ©ãƒ•ã®ãƒ‡ãƒ¼ã‚¿ãŒæ¶ˆåŽ»ã•れã¾ã™ã€‚" + +#: usr/local/www/status_rrd_graph_settings.php:237 +#: usr/local/www/status_rrd_graph_settings.php:238 +#: usr/local/www/status_rrd_graph_settings.php:238 +msgid "" +"Graphs will not be allowed to be recreated within a 1 minute interval, " +"please take this into account after changing the style." +msgstr "「グラフã¯1分間隔内ã§å†ä½œæˆã™ã‚‹ã“ã¨ã¯è¨±ã•れãªã„ã ã‚ã†ã€ã¨ã€ã‚¹ã‚¿ã‚¤ãƒ«ã‚’変更ã—ãŸå¾Œã€ã“れを考慮ã«å…¥ã‚Œã¦ãã ã•ã„。" + +#: usr/local/www/status_services.php:60 +#: usr/local/www/widgets/widgets/services_status.widget.php:54 +#: etc/inc/service-utils.inc:387 etc/inc/service-utils.inc:386 +#: etc/inc/service-utils.inc:403 etc/inc/service-utils.inc:403 +msgid "Not available." +msgstr "ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。" + +#: usr/local/www/status_services.php:112 usr/local/www/status_services.php:100 +#: usr/local/www/status_services.php:98 etc/inc/service-utils.inc:657 +#: etc/inc/service-utils.inc:660 etc/inc/service-utils.inc:660 +#, php-format +msgid "%s has been restarted." +msgstr "%sãŒå†èµ·å‹•ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/status_services.php:159 usr/local/www/status_services.php:151 +#: usr/local/www/status_services.php:149 etc/inc/service-utils.inc:544 +#: etc/inc/service-utils.inc:547 etc/inc/service-utils.inc:547 +#, php-format +msgid "%s has been started." +msgstr "%sãŒé–‹å§‹ã•れã¦ã„る。" + +#: usr/local/www/status_services.php:218 usr/local/www/status_services.php:214 +#: usr/local/www/status_services.php:212 etc/inc/service-utils.inc:605 +#: etc/inc/service-utils.inc:608 etc/inc/service-utils.inc:608 +#, php-format +msgid "%s has been stopped." +msgstr "%sãŒåœæ­¢ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/status_services.php:269 +#: usr/local/www/widgets/widgets/services_status.widget.php:74 +#: etc/inc/service-utils.inc:247 etc/inc/service-utils.inc:246 +#: etc/inc/service-utils.inc:263 etc/inc/service-utils.inc:263 +msgid "NTP clock sync" +msgstr "NTPã‚¯ãƒ­ãƒƒã‚¯åŒæœŸ" + +#: usr/local/www/status_services.php:302 +#: usr/local/www/widgets/widgets/services_status.widget.php:107 +#: etc/inc/service-utils.inc:285 etc/inc/service-utils.inc:284 +#: etc/inc/service-utils.inc:301 etc/inc/service-utils.inc:301 +msgid "DHCP Service" +msgstr "DHCPサービス" + +#: usr/local/www/status_services.php:309 +#: usr/local/www/widgets/widgets/services_status.widget.php:114 +#: etc/inc/service-utils.inc:292 etc/inc/service-utils.inc:291 +#: etc/inc/service-utils.inc:308 etc/inc/service-utils.inc:308 +msgid "SNMP Service" +msgstr "SNMPサービス" + +#: usr/local/www/status_services.php:323 +#: usr/local/www/widgets/widgets/services_status.widget.php:128 +#: etc/inc/service-utils.inc:306 etc/inc/service-utils.inc:305 +#: etc/inc/service-utils.inc:322 etc/inc/service-utils.inc:322 +msgid "UPnP Service" +msgstr "UPnPã®ã‚µãƒ¼ãƒ“ス" + +#: usr/local/www/status_services.php:353 +#: usr/local/www/widgets/widgets/services_status.widget.php:158 +#: etc/inc/service-utils.inc:343 etc/inc/service-utils.inc:342 +#: etc/inc/service-utils.inc:359 etc/inc/service-utils.inc:359 +msgid "Server load balancing daemon" +msgstr "サーãƒè² è·åˆ†æ•£ãƒ‡ãƒ¼ãƒ¢ãƒ³" + +#: usr/local/www/status_services.php:380 +#: usr/local/www/widgets/widgets/services_status.widget.php:210 +#: etc/inc/service-utils.inc:411 etc/inc/service-utils.inc:410 +#: etc/inc/service-utils.inc:427 etc/inc/service-utils.inc:430 +#: etc/inc/service-utils.inc:430 +msgid "Running" +msgstr "ランニング" + +#: usr/local/www/status_services.php:383 +#: usr/local/www/widgets/widgets/services_status.widget.php:213 +#: etc/inc/service-utils.inc:420 etc/inc/service-utils.inc:419 +#: etc/inc/service-utils.inc:437 etc/inc/service-utils.inc:440 +#: etc/inc/service-utils.inc:440 +msgid "Stopped" +msgstr "åœæ­¢" + +#: usr/local/www/status_services.php:392 +#: usr/local/www/widgets/widgets/services_status.widget.php:222 +msgid "Restart Service" +msgstr "å†èµ·å‹•ã®ã‚µãƒ¼ãƒ“ス" + +#: usr/local/www/status_services.php:398 +#: usr/local/www/widgets/widgets/services_status.widget.php:228 +msgid "Stop Service" +msgstr "ã‚µãƒ¼ãƒ“ã‚¹ã‚’åœæ­¢ã—ã¾ã™" + +#: usr/local/www/status_services.php:407 +#: usr/local/www/widgets/widgets/services_status.widget.php:237 +msgid "Start Service" +msgstr "サービスを開始" + +#: usr/local/www/status_services.php:412 +#: usr/local/www/widgets/widgets/services_status.widget.php:242 +#: usr/local/www/status_services.php:271 +#: usr/local/www/widgets/widgets/services_status.widget.php:83 +#: usr/local/www/status_services.php:269 usr/local/www/status_services.php:110 +#: usr/local/www/widgets/widgets/services_status.widget.php:84 +#: usr/local/www/status_services.php:110 +#: usr/local/www/widgets/widgets/services_status.widget.php:84 +msgid "No services found" +msgstr "見ã¤ã‹ã‚Šã¾ã›ã‚“サービス" + +#: usr/local/www/status_upnp.php:48 usr/local/www/status_upnp.php:48 +msgid "Rules have been cleared and the daemon restarted" +msgstr "ルールãŒã‚¯ãƒªã‚¢ã•れãŸã¨ãƒ‡ãƒ¼ãƒ¢ãƒ³ã‚’å†èµ·å‹•" + +#: usr/local/www/status_upnp.php:58 usr/local/www/status_upnp.php:58 +msgid "UPnP & NAT-PMP Status" +msgstr "UPnPã®ï¼† NAT -PMPã®çжæ³" + +#: usr/local/www/status_upnp.php:67 usr/local/www/status_upnp.php:68 +#: usr/local/www/status_upnp.php:68 +msgid "UPnP is currently disabled." +msgstr "UPnPã®ã¯ç¾åœ¨ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/status_upnp.php:77 usr/local/www/status_upnp.php:78 +#: usr/local/www/status_upnp.php:78 +msgid "all currently connected sessions" +msgstr "ã™ã¹ã¦ã®ç¾åœ¨æŽ¥ç¶šã—ã¦ã„るセッション" + +#: usr/local/www/diag_arp.php:261 usr/local/www/fbegin.inc:206 +#: usr/local/www/fbegin.inc:214 usr/local/www/fbegin.inc:205 +#: usr/local/www/diag_arp.php:261 usr/local/www/fbegin.inc:205 +msgid "ARP Table" +msgstr "ARPテーブル" + +#: usr/local/www/diag_arp.php:271 usr/local/www/diag_ndp.php:113 +#: usr/local/www/diag_ndp.php:113 usr/local/www/diag_arp.php:271 +msgid "Loading, please wait..." +msgstr "読ã¿è¾¼ã¿ä¸­ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." + +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:158 +#: usr/local/www/services_dyndns_edit.php:92 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/services_dyndns_edit.php:220 +#: usr/local/www/services_dyndns_edit.php:93 +#: usr/local/www/services_dyndns_edit.php:222 +#: usr/local/www/services_dyndns_edit.php:93 +#: usr/local/www/services_dyndns_edit.php:222 +msgid "Service type" +msgstr "サービスã®ç¨®é¡ž" + +#: usr/local/www/services_dyndns_edit.php:92 +#: usr/local/www/services_dyndns_edit.php:108 +#: usr/local/www/services_dyndns_edit.php:109 +#: usr/local/www/services_dyndns_edit.php:109 +msgid "The MX contains invalid characters." +msgstr "MXã¯ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_dyndns_edit.php:133 +#: usr/local/www/services_dyndns_edit.php:147 +#: usr/local/www/services_dyndns_edit.php:156 +#: usr/local/www/services_dyndns_edit.php:205 +#: usr/local/www/services_dyndns_edit.php:160 +#: usr/local/www/services_dyndns_edit.php:209 +#: usr/local/www/services_dyndns_edit.php:162 +#: usr/local/www/services_dyndns_edit.php:211 +#: usr/local/www/services_dyndns_edit.php:162 +#: usr/local/www/services_dyndns_edit.php:211 +msgid "Dynamic DNS client" +msgstr "ダイナミックDNSクライアント" + +#: usr/local/www/services_dyndns_edit.php:154 +#: usr/local/www/services_rfc2136_edit.php:188 +#: usr/local/www/services_dyndns_edit.php:212 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/services_dyndns_edit.php:218 +#: usr/local/www/services_dyndns_edit.php:218 +#: usr/local/www/services_rfc2136_edit.php:188 +msgid "yes" +msgstr "ã¯ã„" + +#: usr/local/www/services_dyndns_edit.php:172 +#: usr/local/www/services_rfc2136_edit.php:134 +#: usr/local/www/services_dyndns_edit.php:230 +#: usr/local/www/services_dyndns_edit.php:234 +#: usr/local/www/services_dyndns_edit.php:236 +#: usr/local/www/services_dyndns_edit.php:236 +#: usr/local/www/services_rfc2136_edit.php:134 +msgid "Interface to monitor" +msgstr "監視ã™ã‚‹ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ•ェース" + +#: usr/local/www/services_dyndns_edit.php:191 +#: usr/local/www/services_dyndns_edit.php:274 +#: usr/local/www/services_dyndns_edit.php:278 +#: usr/local/www/services_dyndns_edit.php:280 +#: usr/local/www/services_dyndns_edit.php:280 +msgid "Enter the complete host/domain name. example: myhost.dyndns.org" +msgstr "完全ãªãƒ›ã‚¹ãƒˆ/ドメインåを入力ã—ã¾ã™ã€‚例: myhost.dyndns.org" + +#: usr/local/www/services_dyndns_edit.php:192 +#: usr/local/www/services_dyndns_edit.php:275 +#: usr/local/www/services_dyndns_edit.php:279 +#: usr/local/www/services_dyndns_edit.php:281 +#: usr/local/www/services_dyndns_edit.php:281 +msgid "For he.net tunnelbroker, enter your tunnel ID" +msgstr "he.netã®tunnelbrokerã¯ã€ãŠä½¿ã„ã®ãƒˆãƒ³ãƒãƒ«IDを入力" + +#: usr/local/www/services_dyndns_edit.php:197 +#: usr/local/www/services_dyndns_edit.php:280 +#: usr/local/www/services_dyndns_edit.php:284 +#: usr/local/www/services_dyndns_edit.php:286 +#: usr/local/www/services_dyndns_edit.php:286 +msgid "MX" +msgstr "MX" + +#: usr/local/www/services_dyndns_edit.php:201 +#: usr/local/www/services_dyndns_edit.php:284 +#: usr/local/www/services_dyndns_edit.php:288 +#: usr/local/www/services_dyndns_edit.php:290 +#: usr/local/www/services_dyndns_edit.php:290 +msgid "" +"Note: With DynDNS service you can only use a hostname, not an IP address." +msgstr ""注:ダイナミックDNSサービスを使用ã™ã‚‹ã¨ã€ãƒ›ã‚¹ãƒˆåã ã‘ã§ãªã〠IPアドレスを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/services_dyndns_edit.php:203 +#: usr/local/www/services_dyndns_edit.php:286 +#: usr/local/www/services_dyndns_edit.php:290 +#: usr/local/www/services_dyndns_edit.php:292 +#: usr/local/www/services_dyndns_edit.php:292 +msgid "" +"Set this option only if you need a special MX record. Not all services " +"support this." +msgstr ""ã‚ãªãŸã¯ç‰¹åˆ¥ãªMXレコードãŒå¿…è¦ãªå ´åˆã«ã®ã¿ã€ã“ã®ã‚ªãƒ—ションを設定ã—ã¾ã™ã€‚ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“スãŒãªã„〠ã€ã“れをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_dyndns_edit.php:207 +#: usr/local/www/services_dyndns_edit.php:290 +#: usr/local/www/services_dyndns_edit.php:294 +#: usr/local/www/services_dyndns_edit.php:296 +#: usr/local/www/services_dyndns_edit.php:296 +msgid "Wildcards" +msgstr "ワイルドカード" + +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/services_dyndns_edit.php:293 +#: usr/local/www/services_dyndns_edit.php:297 +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:305 +msgid "Enable " +msgstr "有効ã«ã™ã‚‹" + +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/services_dyndns_edit.php:293 +#: usr/local/www/services_dyndns_edit.php:297 +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:299 +msgid "Wildcard" +msgstr "ワイルドカード" + +#: usr/local/www/services_dyndns_edit.php:216 +msgid "Username is required for all types except Namecheap and FreeDNS." +msgstr "ユーザåã¯Namecheapã¨FreeDNSを除ãã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ—ã®ãŸã‚ã«å¿…è¦ã¨ã•れã¦ã„る。" + +#: usr/local/www/services_dyndns_edit.php:224 +#: usr/local/www/services_dyndns_edit.php:309 +#: usr/local/www/services_dyndns_edit.php:313 +#: usr/local/www/services_dyndns_edit.php:321 +#: usr/local/www/services_dyndns_edit.php:321 +msgid "" +"FreeDNS (freedns.afraid.org): Enter your "Authentication Token" provided " +"by FreeDNS." +msgstr "「 FreeDNS ( freedns.afraid.org ) :ã‚ãªãŸã®å…¥åŠ›ã—ã¦ãã ã•ã„ "èªè¨¼ãƒˆãƒ¼ã‚¯ãƒ³ã¯FreeDNSã«ã‚ˆã£ã¦ã€Œæä¾›ã€ 。" + +#: usr/local/www/services_dyndns_edit.php:246 +#: usr/local/www/services_dyndns_edit.php:377 +#: usr/local/www/services_dyndns_edit.php:381 +#: usr/local/www/services_dyndns_edit.php:389 +#: usr/local/www/services_dyndns_edit.php:389 +#, php-format +msgid "" +"You must configure a DNS server in %sSystem:\n" +" General setup%s or allow the DNS server list to be " +"overridden\n" +" by DHCP/PPP on WAN for dynamic DNS updates to work." +msgstr ""ã‚ãªãŸã¯%sSystemã§DNSサーãƒãƒ¼ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ \n 「一般的setup%sã¾ãŸã¯DNSサーãƒã®ãƒªã‚¹ãƒˆãŒå‹•çš„DNSæ›´æ–°ãŒæ©Ÿèƒ½ã™ã‚‹ãŸã‚ã«ã€WAN上ã®DHCP / PPPã«ã‚ˆã‚‹ã€Œ overridden\n ã€ã§ã‚ã‚‹ã“ã¨ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚" + +#: usr/local/www/services_igmpproxy.php:80 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/services_igmpproxy.php:80 +msgid "IGMP Proxy" +msgstr "IGMPプロキシ" + +#: usr/local/www/services_igmpproxy.php:90 +#: usr/local/www/services_igmpproxy.php:90 +msgid "The IGMP entry list has been changed" +msgstr "IGMPエントリリストãŒå¤‰æ›´ã•れã¾ã—ãŸ" + +#: usr/local/www/services_igmpproxy.php:103 +#: usr/local/www/services_igmpproxy.php:146 +#: usr/local/www/services_igmpproxy.php:103 +#: usr/local/www/services_igmpproxy.php:146 +msgid "add a new igmpentry" +msgstr "æ–°ã—ã„igmpentryを追加" + +#: usr/local/www/services_igmpproxy.php:133 +#: usr/local/www/services_igmpproxy.php:133 +msgid "edit igmpentry" +msgstr "編集igmpentry" + +#: usr/local/www/services_igmpproxy.php:134 +#: usr/local/www/services_igmpproxy.php:134 +msgid "" +"Do you really want to delete this igmpentry? All elements that still use it " +"will become invalid (e.g. filter rules)!" +msgstr "「本当ã«ã“ã®igmpentryを削除ã—ã¾ã™ã‹ï¼Ÿã¾ã ãれãŒä½¿ç”¨ã™ã‚‹ã™ã¹ã¦ã®è¦ç´ ãŒ" (例ãˆã°ãƒ•ィルタルール)ã¯ç„¡åйã«ãªã‚Šã¾ã™ï¼" + +#: usr/local/www/services_igmpproxy.php:134 +#: usr/local/www/services_igmpproxy.php:134 +msgid "delete igmpentry" +msgstr "igmpentryを削除" + +#: usr/local/www/services_igmpproxy.php:161 +#: usr/local/www/services_igmpproxy.php:161 +msgid "" +"Please add the interface for upstream, the allowed subnets, and the " +"downstream interfaces you would like the proxy to allow. Only one 'upstream' " +"interface can be configured." +msgstr "「上æµã€è¨±å¯ã•れãŸã‚µãƒ–ãƒãƒƒãƒˆã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースを追加ã—ã€ã—ã¦ãã ã•ã„「ダウンストリームインターフェイスã¯ã€ã‚ãªãŸãŒã§ãるよã†ã«ã€ãƒ—ロキシをã—ãŸã„ã¨æ€ã„ã¾ã™ã€‚一ã¤ã ã‘'上æµã€ 「インタフェースãŒè¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/services_igmpproxy_edit.php:79 +#: usr/local/www/services_igmpproxy_edit.php:79 +msgid "Only one 'upstream' interface can be configured." +msgstr "一ã¤ã ã‘'上æµ'インタフェースãŒè¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/services_igmpproxy_edit.php:158 +#: usr/local/www/services_igmpproxy_edit.php:160 +#: usr/local/www/services_igmpproxy_edit.php:160 +msgid "IGMP Proxy Edit" +msgstr "IGMPプロキシ編集" + +#: usr/local/www/services_igmpproxy_edit.php:188 +#: usr/local/www/services_igmpproxy_edit.php:190 +#: usr/local/www/services_igmpproxy_edit.php:190 +msgid "Upstream Interface" +msgstr "アップストリームインターフェイス" + +#: usr/local/www/services_igmpproxy_edit.php:189 +#: usr/local/www/services_igmpproxy_edit.php:191 +#: usr/local/www/services_igmpproxy_edit.php:191 +msgid "Downstream Interface" +msgstr "ダウンストリームインターフェイス" + +#: usr/local/www/services_igmpproxy_edit.php:193 +#: usr/local/www/services_igmpproxy_edit.php:195 +#: usr/local/www/services_igmpproxy_edit.php:195 +msgid "" +"The upstream network interface is the outgoing interface which is " +"responsible for communicating to available multicast data sources. There can " +"only be one upstream interface." +msgstr "利用å¯èƒ½ãªãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆÂ·ãƒ‡ãƒ¼ã‚¿Â·ã‚½ãƒ¼ã‚¹ã¨ã®é€šä¿¡ã‚’担当ã™ã‚‹ã€Œ u003cBu003e上æµu003c / B u003eãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ•ェースãŒã‚る発信インターフェイスã§ã‚る〠。 「オンリーワンアップストリームインターフェイスãŒã‚ã‚‹å ´åˆã‚‚ã‚りã¾ã™ã€‚" + +#: usr/local/www/services_igmpproxy_edit.php:199 +#: usr/local/www/services_igmpproxy_edit.php:201 +#: usr/local/www/services_igmpproxy_edit.php:201 +msgid "Downstream" +msgstr "下æµ" + +#: usr/local/www/services_igmpproxy_edit.php:199 +#: usr/local/www/services_igmpproxy_edit.php:201 +#: usr/local/www/services_igmpproxy_edit.php:201 +msgid "" +"network interfaces are the distribution interfaces to the destination " +"networks, where multicast clients can join groups and receive multicast " +"data. One or more downstream interfaces must be configured." +msgstr "マルãƒã‚­ãƒ£ã‚¹ãƒˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒã‚°ãƒ«ãƒ¼ãƒ—ã«å‚加ã—ã€ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã€ã€Œãƒ‡ãƒ¼ã‚¿1ã¤ã¾ãŸã¯è¤‡æ•°ã®ãƒ€ã‚¦ãƒ³ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを構æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã‚’å—ã‘å–ã‚‹ã“ã¨ãŒã§ãã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ 「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¤ãƒ³ã‚¿ãƒ•ェースã¯ã€ç›®çš„地ã¸ã®é…布インターフェイスã§ã™ã€ 。" + +#: usr/local/www/services_igmpproxy_edit.php:206 +#: usr/local/www/services_igmpproxy_edit.php:208 +#: usr/local/www/services_igmpproxy_edit.php:208 +msgid "Threshold" +msgstr "ã—ãã„値" + +#: usr/local/www/services_igmpproxy_edit.php:211 +#: usr/local/www/services_igmpproxy_edit.php:213 +#: usr/local/www/services_igmpproxy_edit.php:213 +msgid "" +"Defines the TTL threshold for the network interface. Packets with a " +"lower TTL than the threshold value will be ignored. This setting is " +"optional, and by default the threshold is 1." +msgstr "「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¤ãƒ³ã‚¿ãƒ•ェースã®TTLã—ãã„値を定義ã—ã¾ã™ã€‚æŒã¤ãƒ‘ケット〠threshols値よりも低ã„TTLã¯ç„¡è¦–ã•れã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€ 「オプションã§ã€ãƒ‡ãƒ•ォルトã§ã¯ã€ã—ãã„値ã¯1ã§ã™ã€‚" + +#: usr/local/www/services_igmpproxy_edit.php:218 +#: usr/local/www/services_igmpproxy_edit.php:220 +#: usr/local/www/services_igmpproxy_edit.php:220 +msgid "Network (s)" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ï¼ˆå˜æ•°ã¾ãŸã¯è¤‡æ•°ï¼‰" + +#: usr/local/www/services_rfc2136.php:55 usr/local/www/services_rfc2136.php:55 +msgid "RFC 2136 clients" +msgstr "RFC 2136ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆ" + +#: usr/local/www/services_rfc2136.php:99 +#: usr/local/www/vpn_openvpn_client.php:894 +#: usr/local/www/vpn_openvpn_client.php:899 +#: usr/local/www/vpn_openvpn_client.php:952 +#: usr/local/www/services_rfc2136.php:118 +#: usr/local/www/vpn_openvpn_client.php:971 +#: usr/local/www/services_rfc2136.php:118 +#: usr/local/www/vpn_openvpn_client.php:971 +msgid "Do you really want to delete this client?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:153 +#: usr/local/www/services_dyndns_edit.php:348 +#: usr/local/www/services_dyndns_edit.php:352 +#: usr/local/www/services_dyndns_edit.php:360 +#: usr/local/www/services_dyndns_edit.php:360 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:153 +msgid "TTL" +msgstr "TTL" + +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:159 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:159 +msgid "Key name" +msgstr "キーå" + +#: usr/local/www/services_rfc2136_edit.php:76 +#: usr/local/www/services_rfc2136_edit.php:76 +msgid "The DNS update host name contains invalid characters." +msgstr "DNSæ›´æ–°ã®ãƒ›ã‚¹ãƒˆåãŒç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_rfc2136_edit.php:78 +#: usr/local/www/services_rfc2136_edit.php:78 +msgid "The DNS update TTL must be an integer." +msgstr "DNSæ›´æ–°TTLã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_rfc2136_edit.php:80 +#: usr/local/www/services_rfc2136_edit.php:80 +msgid "The DNS update key name contains invalid characters." +msgstr "DNS更新キーåã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_rfc2136_edit.php:100 +#: usr/local/www/services_rfc2136_edit.php:100 +msgid "New/Edited RFC2136 dnsupdate entry was posted." +msgstr "æ–°è¦/編集RFC2136ã®dnsupdateã‚¨ãƒ³ãƒˆãƒªãŒæŠ•ç¨¿ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/services_rfc2136_edit.php:123 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/services_rfc2136_edit.php:123 +msgid "RFC 2136 client" +msgstr "RFC 2136クライアント" + +#: usr/local/www/services_rfc2136_edit.php:163 +#: usr/local/www/services_rfc2136_edit.php:163 +msgid "This must match the setting on the DNS server." +msgstr "ã“れã¯ã€DNSサーãƒãƒ¼ã®è¨­å®šã¨ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_rfc2136_edit.php:166 +#: usr/local/www/services_rfc2136_edit.php:166 +msgid "Key type" +msgstr "キータイプ" + +#: usr/local/www/services_rfc2136_edit.php:168 +#: usr/local/www/services_captiveportal_zones.php:52 +#: usr/local/www/services_captiveportal_zones.php:53 +#: usr/local/www/services_captiveportal_zones.php:53 +#: usr/local/www/services_rfc2136_edit.php:168 +msgid "Zone" +msgstr "ゾーン" + +#: usr/local/www/services_rfc2136_edit.php:170 +#: usr/local/www/services_rfc2136_edit.php:170 +msgid " User" +msgstr "ユーザー" + +#: usr/local/www/services_rfc2136_edit.php:177 +#: usr/local/www/services_rfc2136_edit.php:177 +msgid "Paste an HMAC-MD5 key here." +msgstr "ã“ã“ã«HMAC- MD5キーを貼り付ã‘ã¾ã™ã€‚" + +#: usr/local/www/services_rfc2136_edit.php:189 +#: usr/local/www/services_rfc2136_edit.php:189 +msgid "Use TCP instead of UDP" +msgstr "UDPã§ã¯ãªãTCPを使用ã™ã‚‹" + +#: usr/local/www/services_rfc2136_edit.php:210 +#: usr/local/www/services_rfc2136_edit.php:210 +#, php-format +msgid "" +"You must configure a DNS server in %sSystem: General setup %sor allow the " +"DNS server list to be overridden by DHCP/PPP on WAN for dynamic DNS updates " +"to work." +msgstr ""ã‚ãªãŸã¯%sSystemã«DNSサーãƒã‚’設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼šä¸€èˆ¬çš„ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—%sor許å¯ã€ã®DNSサーãƒãƒªã‚¹ãƒˆã‚’機能ã•ã›ã‚‹ã«ã¯ã€ã€Œãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNSæ›´æ–°ã®ãŸã‚ã«ã€WAN上ã®DHCP / PPPã«ã‚ˆã£ã¦ç„¡åйã«ã•れるよã†ã«ã€‚" + +#: usr/local/www/status_captiveportal_test.php:82 +#: usr/local/www/status_captiveportal_test.php:83 +#: usr/local/www/status_captiveportal_expire.php:82 +#: usr/local/www/status_captiveportal_test.php:84 +#: usr/local/www/status_captiveportal_expire.php:82 +#: usr/local/www/status_captiveportal_test.php:84 +msgid "Voucher(s)" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ï¼ˆ S )" + +#: usr/local/www/status_captiveportal_test.php:86 +#: usr/local/www/status_captiveportal_test.php:87 +#: usr/local/www/status_captiveportal_test.php:88 +#: usr/local/www/status_captiveportal_test.php:88 +msgid "" +"Enter multiple vouchers separated by space or newline. The remaining time, " +"if valid, will be shown for each voucher" +msgstr "「空白や改行ã§åŒºåˆ‡ã‚‰ã‚ŒãŸè¤‡æ•°ã®ä¼ç¥¨ã‚’入力ã—ã¦ãã ã•ã„。残り時間を〠「有効ã§ã‚れã°ã€ãれãžã‚Œã®ã‚¯ãƒ¼ãƒãƒ³ã®ãŸã‚ã«è¡¨ç¤ºã•れã¾ã™" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:85 +#: usr/local/www/status_captiveportal_voucher_rolls.php:86 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +msgid "Roll#" +msgstr "ロール" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:87 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +msgid "# of Tickets" +msgstr "" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +#: usr/local/www/status_captiveportal_voucher_rolls.php:92 +#: usr/local/www/status_captiveportal_voucher_rolls.php:92 +msgid "used" +msgstr "使用ã•れãŸ" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +#: usr/local/www/status_captiveportal_voucher_rolls.php:93 +#: usr/local/www/status_captiveportal_voucher_rolls.php:93 +msgid "active" +msgstr "アクティブ" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +#: usr/local/www/status_captiveportal_voucher_rolls.php:92 +#: usr/local/www/status_captiveportal_voucher_rolls.php:94 +#: usr/local/www/status_captiveportal_voucher_rolls.php:94 +msgid "ready" +msgstr "レディー" + +#: usr/local/www/status_captiveportal_vouchers.php:115 +#: usr/local/www/status_captiveportal_vouchers.php:116 +#: usr/local/www/status_captiveportal_vouchers.php:121 +#: usr/local/www/status_captiveportal_vouchers.php:121 +msgid "Voucher" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼" + +#: usr/local/www/status_captiveportal_vouchers.php:117 +#: usr/local/www/status_captiveportal_vouchers.php:118 +#: usr/local/www/status_captiveportal_vouchers.php:123 +#: usr/local/www/status_captiveportal_vouchers.php:123 +msgid "Activated at" +msgstr "ã§æ´»æ€§åŒ–" + +#: usr/local/www/status_captiveportal_vouchers.php:118 +#: usr/local/www/status_captiveportal_vouchers.php:119 +#: usr/local/www/status_captiveportal_vouchers.php:124 +#: usr/local/www/status_captiveportal_vouchers.php:124 +msgid "Expires in" +msgstr "ã«å¤±åй" + +#: usr/local/www/status_captiveportal_vouchers.php:119 +#: usr/local/www/status_captiveportal_vouchers.php:120 +#: usr/local/www/status_captiveportal_vouchers.php:125 +#: usr/local/www/status_captiveportal_vouchers.php:125 +msgid "Expires at" +msgstr "ã§æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹" + +#: usr/local/www/status_captiveportal_vouchers.php:127 +#: usr/local/www/status_captiveportal_vouchers.php:128 +#: usr/local/www/status_captiveportal_vouchers.php:133 +#: usr/local/www/status_captiveportal_vouchers.php:133 +msgid "min" +msgstr "分" + +#: usr/local/www/status_dhcp_leases.php:48 +#: usr/local/www/status_dhcp_leases.php:49 +#: usr/local/www/status_dhcp_leases.php:49 +msgid "DHCP leases" +msgstr "DHCPリース" + +#: usr/local/www/status_dhcp_leases.php:287 +#: usr/local/www/status_dhcpv6_leases.php:328 +#: usr/local/www/status_dhcpv6_leases.php:372 +#: usr/local/www/status_dhcp_leases.php:308 +#: usr/local/www/status_dhcpv6_leases.php:373 +#: usr/local/www/status_dhcp_leases.php:310 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:310 +msgid "Failover Group" +msgstr "フェイルオーãƒãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—" + +#: usr/local/www/status_dhcp_leases.php:288 +#: usr/local/www/status_dhcpv6_leases.php:329 +#: usr/local/www/status_dhcpv6_leases.php:373 +#: usr/local/www/status_dhcp_leases.php:309 +#: usr/local/www/status_dhcpv6_leases.php:374 +#: usr/local/www/status_dhcp_leases.php:311 +#: usr/local/www/status_dhcpv6_leases.php:377 +#: usr/local/www/status_dhcpv6_leases.php:377 +#: usr/local/www/status_dhcp_leases.php:311 +msgid "My State" +msgstr "ç§ã®çŠ¶æ…‹" + +#: usr/local/www/status_dhcp_leases.php:289 +#: usr/local/www/status_dhcp_leases.php:291 +#: usr/local/www/status_dhcpv6_leases.php:330 +#: usr/local/www/status_dhcpv6_leases.php:332 +#: usr/local/www/status_dhcpv6_leases.php:374 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:310 +#: usr/local/www/status_dhcp_leases.php:312 +#: usr/local/www/status_dhcpv6_leases.php:375 +#: usr/local/www/status_dhcpv6_leases.php:377 +#: usr/local/www/status_dhcp_leases.php:314 +#: usr/local/www/status_dhcpv6_leases.php:378 +#: usr/local/www/status_dhcpv6_leases.php:380 +#: usr/local/www/status_dhcpv6_leases.php:378 +#: usr/local/www/status_dhcpv6_leases.php:380 +#: usr/local/www/status_dhcp_leases.php:312 +#: usr/local/www/status_dhcp_leases.php:314 +msgid "Since" +msgstr "ã‹ã‚‰" + +#: usr/local/www/status_dhcp_leases.php:290 +#: usr/local/www/status_dhcpv6_leases.php:331 +#: usr/local/www/status_dhcpv6_leases.php:375 +#: usr/local/www/status_dhcp_leases.php:311 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:313 +#: usr/local/www/status_dhcpv6_leases.php:379 +#: usr/local/www/status_dhcpv6_leases.php:379 +#: usr/local/www/status_dhcp_leases.php:313 +msgid "Peer State" +msgstr "ピア状態" + +#: usr/local/www/status_dhcp_leases.php:322 +#: usr/local/www/status_dhcpv6_leases.php:364 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:485 +#: usr/local/www/status_dhcp_leases.php:343 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcpv6_leases.php:486 +#: usr/local/www/status_dhcp_leases.php:345 +#: usr/local/www/status_dhcpv6_leases.php:412 +#: usr/local/www/status_dhcpv6_leases.php:489 +#: usr/local/www/status_dhcpv6_leases.php:412 +#: usr/local/www/status_dhcpv6_leases.php:489 +#: usr/local/www/status_dhcp_leases.php:345 +msgid "End" +msgstr "終ã‚り" + +#: usr/local/www/status_dhcp_leases.php:323 +#: usr/local/www/status_gateway_groups.php:132 +#: usr/local/www/status_gateways.php:127 usr/local/www/status_gateways.php:131 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:57 +#: usr/local/www/status_dhcpv6_leases.php:365 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcp_leases.php:344 +#: usr/local/www/status_dhcpv6_leases.php:410 +#: usr/local/www/status_gateways.php:128 usr/local/www/status_gateways.php:132 +#: usr/local/www/status_dhcp_leases.php:346 +#: usr/local/www/status_gateway_groups.php:133 +#: usr/local/www/status_dhcpv6_leases.php:413 +#: usr/local/www/status_dhcpv6_leases.php:413 +#: usr/local/www/status_dhcp_leases.php:346 +#: usr/local/www/status_gateway_groups.php:133 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:57 +#: usr/local/www/status_gateways.php:128 usr/local/www/status_gateways.php:132 +msgid "Online" +msgstr "オンライン" + +#: usr/local/www/status_dhcp_leases.php:324 +#: usr/local/www/status_dhcpv6_leases.php:366 +#: usr/local/www/status_dhcpv6_leases.php:410 +#: usr/local/www/status_dhcp_leases.php:345 +#: usr/local/www/status_dhcpv6_leases.php:411 +#: usr/local/www/status_dhcp_leases.php:347 +#: usr/local/www/status_dhcpv6_leases.php:414 +#: usr/local/www/status_dhcpv6_leases.php:414 +#: usr/local/www/status_dhcp_leases.php:347 +msgid "Lease Type" +msgstr "リースã®ç¨®é¡ž" + +#: usr/local/www/status_dhcp_leases.php:368 +#: usr/local/www/status_dhcp_leases.php:389 +#: usr/local/www/status_dhcp_leases.php:393 +#: usr/local/www/status_dhcp_leases.php:393 +msgid "send Wake on LAN packet to this MAC address" +msgstr "ã“ã®MACアドレスã«Wake on LANパケットをé€ä¿¡" + +#: usr/local/www/status_dhcp_leases.php:390 +#: usr/local/www/status_dhcpv6_leases.php:417 +#: usr/local/www/status_dhcpv6_leases.php:461 +#: usr/local/www/status_dhcp_leases.php:411 +#: usr/local/www/status_dhcpv6_leases.php:462 +#: usr/local/www/status_dhcp_leases.php:415 +#: usr/local/www/status_dhcpv6_leases.php:465 +#: usr/local/www/status_dhcpv6_leases.php:465 +#: usr/local/www/status_dhcp_leases.php:415 +msgid "add a static mapping for this MAC address" +msgstr "ã“ã®MACアドレスã®é™çš„マッピングを追加" + +#: usr/local/www/status_dhcp_leases.php:397 +#: usr/local/www/status_dhcp_leases.php:418 +#: usr/local/www/status_dhcp_leases.php:422 +#: usr/local/www/status_dhcp_leases.php:422 +msgid "add a Wake on LAN mapping for this MAC address" +msgstr "ã“ã®MACアドレス用ã®LANマッピングã«ã‚³ãƒ¼ãƒ«ã‚’追加" + +#: usr/local/www/status_dhcp_leases.php:402 +#: usr/local/www/status_dhcpv6_leases.php:426 +#: usr/local/www/status_dhcpv6_leases.php:470 +#: usr/local/www/status_dhcp_leases.php:423 +#: usr/local/www/status_dhcpv6_leases.php:471 +#: usr/local/www/status_dhcp_leases.php:427 +#: usr/local/www/status_dhcpv6_leases.php:474 +#: usr/local/www/status_dhcpv6_leases.php:474 +#: usr/local/www/status_dhcp_leases.php:427 +msgid "delete this DHCP lease" +msgstr "ã“ã®DHCPリースを削除" + +#: usr/local/www/status_dhcp_leases.php:415 +#: usr/local/www/status_dhcpv6_leases.php:439 +#: usr/local/www/status_dhcpv6_leases.php:540 +#: usr/local/www/status_dhcp_leases.php:436 +#: usr/local/www/status_dhcpv6_leases.php:541 +#: usr/local/www/status_dhcp_leases.php:440 +#: usr/local/www/status_dhcpv6_leases.php:544 +#: usr/local/www/status_dhcpv6_leases.php:544 +#: usr/local/www/status_dhcp_leases.php:440 +msgid "Show active and static leases only" +msgstr "アクティブãŠã‚ˆã³ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒªãƒ¼ã‚¹ã‚’表示ã™ã‚‹ã ã‘" + +#: usr/local/www/status_dhcp_leases.php:418 +#: usr/local/www/status_dhcpv6_leases.php:442 +#: usr/local/www/status_dhcpv6_leases.php:543 +#: usr/local/www/status_dhcp_leases.php:439 +#: usr/local/www/status_dhcpv6_leases.php:544 +#: usr/local/www/status_dhcp_leases.php:443 +#: usr/local/www/status_dhcpv6_leases.php:547 +#: usr/local/www/status_dhcpv6_leases.php:547 +#: usr/local/www/status_dhcp_leases.php:443 +msgid "Show all configured leases" +msgstr "設定ã•れã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒªãƒ¼ã‚¹ã‚’表示ã™ã‚‹" + +#: usr/local/www/status_dhcp_leases.php:422 +#: usr/local/www/status_dhcpv6_leases.php:446 +#: usr/local/www/status_dhcpv6_leases.php:547 +#: usr/local/www/status_dhcp_leases.php:443 +#: usr/local/www/status_dhcpv6_leases.php:548 +#: usr/local/www/status_dhcp_leases.php:447 +#: usr/local/www/status_dhcpv6_leases.php:551 +#: usr/local/www/status_dhcpv6_leases.php:551 +#: usr/local/www/status_dhcp_leases.php:447 +msgid "No leases file found. Is the DHCP server active" +msgstr "リースファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ DHCPサーãƒãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã£ã¦ã„ã‚‹" + +#: usr/local/www/status_gateway_groups.php:100 +#: usr/local/www/status_gateway_groups.php:101 +#: usr/local/www/status_gateway_groups.php:101 +#, php-format +msgid "Tier %s" +msgstr "ティア%s" + +#: usr/local/www/status_gateway_groups.php:126 +#: usr/local/www/status_gateways.php:121 usr/local/www/status_gateways.php:122 +#: usr/local/www/status_gateway_groups.php:127 +#: usr/local/www/status_gateway_groups.php:127 +#: usr/local/www/status_gateways.php:122 +msgid "Warning, Packetloss" +msgstr "警告ã€ãƒ‘ケットロス" + +#: usr/local/www/status_gateway_groups.php:129 +#: usr/local/www/status_gateways.php:124 usr/local/www/status_gateways.php:125 +#: usr/local/www/status_gateway_groups.php:130 +#: usr/local/www/status_gateway_groups.php:130 +#: usr/local/www/status_gateways.php:125 +msgid "Warning, Latency" +msgstr "警告ã€ãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ãƒ¼" + +#: usr/local/www/status_gateway_groups.php:135 +#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108 +#: usr/local/www/status_gateways.php:134 +#: usr/local/www/widgets/widgets/gateways.widget.php:69 +#: usr/local/www/widgets/widgets/gateways.widget.php:77 +#: usr/local/www/widgets/widgets/gateways.widget.php:98 +#: usr/local/www/status_gateway_groups.php:136 +#: usr/local/www/status_gateway_groups.php:136 +msgid "Gathering data" +msgstr "データã®åŽé›†" + +#: usr/local/www/status_gateways.php:75 usr/local/www/status_gateways.php:76 +#: usr/local/www/status_gateways.php:76 +msgid "RTT" +msgstr "RTT" + +#: usr/local/www/status_gateways.php:76 usr/local/www/status_gateways.php:77 +#: usr/local/www/status_gateways.php:77 +msgid "Loss" +msgstr "æå¤±" + +#: usr/local/www/status_gateways.php:144 +#, php-format +msgid "Last check %s" +msgstr "最後ã®ãƒã‚§ãƒƒã‚¯ã®%s" + +#: usr/local/www/status_graph_cpu.php:41 usr/local/www/status_graph_cpu.php:41 +msgid "CPU load" +msgstr "CPUè² è·" + +#: usr/local/www/status_graph_cpu.php:46 usr/local/www/status_graph_cpu.php:46 +msgid "Status: CPU Graph" +msgstr "ステータス: CPUã®ã‚°ãƒ©ãƒ•" + +#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph_cpu.php:53 +msgid "if you can't see the graph, you may have to install the" +msgstr "グラフを見るã“ã¨ãŒã§ããªã„å ´åˆã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph_cpu.php:53 +msgid "Adobe SVG viewer" +msgstr "アドビSVGビューア" + +#: usr/local/www/status_lb_vs.php:78 usr/local/www/vpn_ipsec_phase2.php:427 +#: usr/local/www/vpn_ipsec_phase2.php:469 +#: usr/local/www/vpn_ipsec_phase2.php:475 +#: usr/local/www/vpn_ipsec_phase2.php:453 +#: usr/local/www/vpn_ipsec_phase2.php:495 +#: usr/local/www/vpn_ipsec_phase2.php:501 +#: usr/local/www/vpn_ipsec_phase2.php:519 +#: usr/local/www/vpn_ipsec_phase2.php:555 +#: usr/local/www/vpn_ipsec_phase2.php:597 +#: usr/local/www/vpn_ipsec_phase2.php:603 +#: usr/local/www/vpn_ipsec_phase2.php:541 +#: usr/local/www/vpn_ipsec_phase2.php:576 +#: usr/local/www/vpn_ipsec_phase2.php:618 +#: usr/local/www/vpn_ipsec_phase2.php:624 usr/local/www/status_lb_vs.php:78 +#: usr/local/www/vpn_ipsec_phase2.php:541 +#: usr/local/www/vpn_ipsec_phase2.php:576 +#: usr/local/www/vpn_ipsec_phase2.php:618 +#: usr/local/www/vpn_ipsec_phase2.php:624 +msgid "Address" +msgstr "アドレス" + +#: usr/local/www/status_openvpn.php:145 usr/local/www/status_openvpn.php:146 +#: usr/local/www/status_openvpn.php:147 usr/local/www/status_openvpn.php:147 +msgid "Client connections" +msgstr "クライアント接続" + +#: usr/local/www/status_openvpn.php:152 usr/local/www/system_camanager.php:534 +#: usr/local/www/system_certmanager.php:627 +#: usr/local/www/system_certmanager.php:730 +#: usr/local/www/vpn_openvpn_csc.php:673 +#: usr/local/www/system_certmanager.php:743 +#: usr/local/www/system_certmanager.php:896 +#: usr/local/www/system_camanager.php:535 usr/local/www/status_openvpn.php:153 +#: usr/local/www/vpn_openvpn_csc.php:672 +#: usr/local/www/system_camanager.php:559 usr/local/www/status_openvpn.php:214 +#: usr/local/www/system_certmanager.php:768 +#: usr/local/www/system_certmanager.php:938 +#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:224 +#: usr/local/www/system_certmanager.php:769 +#: usr/local/www/system_certmanager.php:942 +#: usr/local/www/system_camanager.php:559 usr/local/www/status_openvpn.php:154 +#: usr/local/www/status_openvpn.php:224 usr/local/www/vpn_openvpn_csc.php:672 +#: usr/local/www/system_certmanager.php:769 +#: usr/local/www/system_certmanager.php:942 +msgid "Common Name" +msgstr "コモンãƒãƒ¼ãƒ " + +#: usr/local/www/status_openvpn.php:153 usr/local/www/status_openvpn.php:154 +#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:155 +#: usr/local/www/status_openvpn.php:225 usr/local/www/status_openvpn.php:155 +#: usr/local/www/status_openvpn.php:225 +msgid "Real Address" +msgstr "実アドレス" + +#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:155 +#: usr/local/www/status_openvpn.php:156 usr/local/www/status_openvpn.php:156 +msgid "Virtual Address" +msgstr "仮想アドレス" + +#: usr/local/www/status_openvpn.php:155 usr/local/www/status_openvpn.php:213 +#: usr/local/www/status_openvpn.php:264 usr/local/www/status_openvpn.php:156 +#: usr/local/www/status_openvpn.php:216 usr/local/www/status_openvpn.php:267 +#: usr/local/www/status_openvpn.php:315 usr/local/www/status_openvpn.php:157 +#: usr/local/www/status_openvpn.php:274 usr/local/www/status_openvpn.php:335 +#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:274 +#: usr/local/www/status_openvpn.php:335 +msgid "Connected Since" +msgstr "ä»¥æ¥æŽ¥ç¶š" + +#: usr/local/www/status_openvpn.php:156 usr/local/www/status_openvpn.php:216 +#: usr/local/www/status_openvpn.php:267 usr/local/www/status_openvpn.php:157 +#: usr/local/www/status_openvpn.php:219 usr/local/www/status_openvpn.php:270 +#: usr/local/www/status_openvpn.php:318 usr/local/www/status_openvpn.php:158 +#: usr/local/www/status_openvpn.php:277 usr/local/www/status_openvpn.php:338 +#: usr/local/www/status_openvpn.php:158 usr/local/www/status_openvpn.php:277 +#: usr/local/www/status_openvpn.php:338 +msgid "Bytes Sent" +msgstr "é€ä¿¡ã•れãŸãƒã‚¤ãƒˆ" + +#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:217 +#: usr/local/www/status_openvpn.php:268 usr/local/www/status_openvpn.php:158 +#: usr/local/www/status_openvpn.php:220 usr/local/www/status_openvpn.php:271 +#: usr/local/www/status_openvpn.php:319 usr/local/www/status_openvpn.php:159 +#: usr/local/www/status_openvpn.php:159 +msgid "Bytes Received" +msgstr "å—ä¿¡ãƒã‚¤ãƒˆ" + +#: usr/local/www/status_openvpn.php:184 usr/local/www/status_openvpn.php:185 +#: usr/local/www/status_openvpn.php:186 usr/local/www/status_openvpn.php:186 +msgid "Kill client connection from" +msgstr "ã‹ã‚‰ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆæŽ¥ç¶šã‚’強制終了" + +#: usr/local/www/status_openvpn.php:205 usr/local/www/status_openvpn.php:208 +#: usr/local/www/status_openvpn.php:256 usr/local/www/status_openvpn.php:266 +#: usr/local/www/status_openvpn.php:266 +msgid "Peer to Peer Server Instance Statistics" +msgstr "サーãƒãƒ¼ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹çµ±è¨ˆï¼ˆãƒ”アツーピア)" + +#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265 +#: usr/local/www/status_openvpn.php:217 usr/local/www/status_openvpn.php:268 +#: usr/local/www/status_openvpn.php:316 usr/local/www/status_openvpn.php:275 +#: usr/local/www/status_openvpn.php:336 usr/local/www/status_openvpn.php:275 +#: usr/local/www/status_openvpn.php:336 +msgid "Virtual Addr" +msgstr "仮想アドレス" + +#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266 +#: usr/local/www/status_openvpn.php:218 usr/local/www/status_openvpn.php:269 +#: usr/local/www/status_openvpn.php:317 usr/local/www/status_openvpn.php:276 +#: usr/local/www/status_openvpn.php:337 usr/local/www/status_openvpn.php:276 +#: usr/local/www/status_openvpn.php:337 +msgid "Remote Host" +msgstr "リモートホスト" + +#: usr/local/www/status_openvpn.php:256 usr/local/www/status_openvpn.php:259 +#: usr/local/www/status_openvpn.php:307 usr/local/www/status_openvpn.php:327 +#: usr/local/www/status_openvpn.php:327 +msgid "Client Instance Statistics" +msgstr "クライアントインスタンス統計" + +#: usr/local/www/status_openvpn.php:304 usr/local/www/status_openvpn.php:307 +#: usr/local/www/status_openvpn.php:355 +msgid "" +"You need to bind each OpenVPN client to enable its management daemon: use " +"'Local port' setting in the OpenVPN client screen" +msgstr ""ã‚ãªãŸã¯ã€ãã®ç®¡ç†ãƒ‡ãƒ¼ãƒ¢ãƒ³ã‚’有効ã«ã™ã‚‹ãŸã‚ã«ã€å„OpenVPNクライアントをãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚使用"OpenVPNクライアント画é¢ã§è¨­å®šã€Œãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒ¼ãƒˆã€ã‚’" + +#: usr/local/www/status_openvpn.php:308 usr/local/www/status_openvpn.php:311 +#: usr/local/www/status_openvpn.php:359 usr/local/www/status_openvpn.php:389 +#: usr/local/www/status_openvpn.php:389 +msgid "No OpenVPN instance defined" +msgstr "定義ã•れãŸã®OpenVPNインスタンスã¾ã›ã‚“" + +#: usr/local/www/system_advanced_admin.php:87 +#: usr/local/www/system_advanced_admin.php:87 +msgid "You must specify a valid webConfigurator port number" +msgstr "有効ãªwebConfiguratorãƒãƒ¼ãƒˆç•ªå·ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_advanced_admin.php:91 +#: usr/local/www/system_advanced_admin.php:91 +msgid "Max Processes must be a number 1 or greater" +msgstr "æœ€å¤§ãƒ—ãƒ­ã‚»ã‚¹ã¯æ•°1以上ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: usr/local/www/system_advanced_admin.php:97 +#: usr/local/www/system_advanced_admin.php:97 +#, php-format +msgid "Alternate hostname %s is not a valid hostname." +msgstr "代替ホストå%sã¯æœ‰åйãªãƒ›ã‚¹ãƒˆåã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/system_advanced_admin.php:102 +#: usr/local/www/services_dnsmasq.php:92 +#: usr/local/www/system_advanced_admin.php:102 +#: usr/local/www/services_dnsmasq.php:92 +msgid "You must specify a valid port number" +msgstr "有効ãªãƒãƒ¼ãƒˆç•ªå·ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/system_advanced_admin.php:232 +#: usr/local/www/system_advanced_admin.php:232 +#, php-format +msgid "One moment...redirecting to %s in 20 seconds." +msgstr "一ã¤ã®çž¬é–“ãŒÂ·Â·Â· 20ç§’ã§%sã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã™ã‚‹ã€‚" + +#: usr/local/www/system_advanced_admin.php:242 +#: usr/local/www/system_advanced_admin.php:242 +msgid "Advanced: Admin Access" +msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šç®¡ç†ã‚¢ã‚¯ã‚»ã‚¹" + +#: usr/local/www/system_advanced_admin.php:274 +#: usr/local/www/system_advanced_firewall.php:215 +#: usr/local/www/system_advanced_misc.php:206 +#: usr/local/www/system_advanced_network.php:182 +#: usr/local/www/system_advanced_notifications.php:151 +#: usr/local/www/system_advanced_sysctl.php:147 +#: usr/local/www/system_advanced_firewall.php:229 +#: usr/local/www/system_advanced_notifications.php:160 +#: usr/local/www/system_advanced_misc.php:232 +#: usr/local/www/system_advanced_misc.php:251 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_firewall.php:258 +#: usr/local/www/system_advanced_misc.php:302 +#: usr/local/www/system_advanced_admin.php:274 +#: usr/local/www/system_advanced_misc.php:302 +#: usr/local/www/system_advanced_firewall.php:258 +#: usr/local/www/system_advanced_notifications.php:160 +#: usr/local/www/system_advanced_network.php:182 +#: usr/local/www/system_advanced_sysctl.php:147 +msgid "Admin Access" +msgstr "管ç†è€…ã®ã‚¢ã‚¯ã‚»ã‚¹" + +#: usr/local/www/system_advanced_admin.php:275 +#: usr/local/www/system_advanced_firewall.php:216 +#: usr/local/www/system_advanced_misc.php:207 +#: usr/local/www/system_advanced_network.php:183 +#: usr/local/www/system_advanced_notifications.php:152 +#: usr/local/www/system_advanced_sysctl.php:148 +#: usr/local/www/system_advanced_firewall.php:230 +#: usr/local/www/system_advanced_notifications.php:161 +#: usr/local/www/system_advanced_misc.php:233 +#: usr/local/www/system_advanced_misc.php:252 +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_firewall.php:259 +#: usr/local/www/system_advanced_misc.php:303 +#: usr/local/www/system_advanced_admin.php:275 +#: usr/local/www/system_advanced_misc.php:303 +#: usr/local/www/system_advanced_firewall.php:259 +#: usr/local/www/system_advanced_notifications.php:161 +#: usr/local/www/system_advanced_network.php:183 +#: usr/local/www/system_advanced_sysctl.php:148 +msgid "Firewall / NAT" +msgstr "ファイアウォール/ NAT" + +#: usr/local/www/system_advanced_admin.php:276 +#: usr/local/www/system_advanced_firewall.php:217 +#: usr/local/www/system_advanced_misc.php:208 +#: usr/local/www/system_advanced_network.php:184 +#: usr/local/www/system_advanced_notifications.php:153 +#: usr/local/www/system_advanced_sysctl.php:149 +#: usr/local/www/system_advanced_firewall.php:231 +#: usr/local/www/system_advanced_notifications.php:162 +#: usr/local/www/system_advanced_misc.php:234 +#: usr/local/www/system_advanced_misc.php:253 +#: usr/local/www/system_advanced_misc.php:257 +#: usr/local/www/system_advanced_firewall.php:260 +#: usr/local/www/system_advanced_misc.php:304 +#: usr/local/www/system_advanced_admin.php:276 +#: usr/local/www/system_advanced_misc.php:304 +#: usr/local/www/system_advanced_firewall.php:260 +#: usr/local/www/system_advanced_notifications.php:162 +#: usr/local/www/system_advanced_network.php:184 +#: usr/local/www/system_advanced_sysctl.php:149 +msgid "Networking" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°" + +#: usr/local/www/system_advanced_admin.php:277 +#: usr/local/www/system_advanced_firewall.php:218 +#: usr/local/www/system_advanced_misc.php:209 +#: usr/local/www/system_advanced_network.php:185 +#: usr/local/www/system_advanced_notifications.php:154 +#: usr/local/www/system_advanced_sysctl.php:150 +#: usr/local/www/system_advanced_firewall.php:232 +#: usr/local/www/system_advanced_notifications.php:163 +#: usr/local/www/system_advanced_misc.php:235 +#: usr/local/www/system_advanced_misc.php:254 +#: usr/local/www/system_advanced_misc.php:258 +#: usr/local/www/system_advanced_firewall.php:261 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_admin.php:277 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_firewall.php:261 +#: usr/local/www/system_advanced_notifications.php:163 +#: usr/local/www/system_advanced_network.php:185 +#: usr/local/www/system_advanced_sysctl.php:150 +msgid "Miscellaneous" +msgstr "雑多" + +#: usr/local/www/system_advanced_admin.php:278 +#: usr/local/www/system_advanced_firewall.php:219 +#: usr/local/www/system_advanced_misc.php:210 +#: usr/local/www/system_advanced_network.php:186 +#: usr/local/www/system_advanced_notifications.php:155 +#: usr/local/www/system_advanced_sysctl.php:151 +#: usr/local/www/system_advanced_firewall.php:233 +#: usr/local/www/system_advanced_notifications.php:164 +#: usr/local/www/system_advanced_misc.php:236 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_misc.php:259 +#: usr/local/www/system_advanced_firewall.php:262 +#: usr/local/www/system_advanced_misc.php:306 +#: usr/local/www/system_advanced_admin.php:278 +#: usr/local/www/system_advanced_misc.php:306 +#: usr/local/www/system_advanced_firewall.php:262 +#: usr/local/www/system_advanced_notifications.php:164 +#: usr/local/www/system_advanced_network.php:186 +#: usr/local/www/system_advanced_sysctl.php:151 +msgid "System Tunables" +msgstr "システムã®ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°å¯èƒ½ãƒ‘ラメータ" + +#: usr/local/www/system_advanced_admin.php:279 +#: usr/local/www/system_advanced_firewall.php:220 +#: usr/local/www/system_advanced_misc.php:211 +#: usr/local/www/system_advanced_network.php:187 +#: usr/local/www/system_advanced_notifications.php:156 +#: usr/local/www/system_advanced_sysctl.php:152 +#: usr/local/www/system_advanced_firewall.php:234 +#: usr/local/www/system_advanced_notifications.php:165 +#: usr/local/www/system_advanced_misc.php:237 +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_misc.php:260 +#: usr/local/www/system_advanced_firewall.php:263 +#: usr/local/www/system_advanced_misc.php:307 +#: usr/local/www/system_advanced_admin.php:279 +#: usr/local/www/system_advanced_misc.php:307 +#: usr/local/www/system_advanced_firewall.php:263 +#: usr/local/www/system_advanced_notifications.php:165 +#: usr/local/www/system_advanced_network.php:187 +#: usr/local/www/system_advanced_sysctl.php:152 +msgid "Notifications" +msgstr "ãŠçŸ¥ã‚‰ã›ãƒ¡ãƒ¼ãƒ«" + +#: usr/local/www/system_advanced_admin.php:297 +#: usr/local/www/system_advanced_admin.php:297 +msgid "webConfigurator" +msgstr "webConfigurator" + +#: usr/local/www/system_advanced_admin.php:317 +#: usr/local/www/system_advanced_admin.php:317 +msgid "No Certificates have been defined. You must" +msgstr "ãªã—証明書ã¯ã€å®šç¾©ã•れã¦ã„ã¾ã›ã‚“。作業を行ã†å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/system_advanced_admin.php:318 +#: usr/local/www/system_advanced_admin.php:318 +msgid "Create or Import" +msgstr "作æˆã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#: usr/local/www/system_advanced_admin.php:319 +#: usr/local/www/system_advanced_admin.php:319 +msgid "a Certificate before SSL can be enabled." +msgstr "SSLå‰ã«è¨¼æ˜Žæ›¸ã‚’有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/system_advanced_admin.php:324 +#: usr/local/www/services_captiveportal.php:872 +#: usr/local/www/services_captiveportal.php:874 +#: usr/local/www/services_captiveportal.php:890 +#: usr/local/www/system_advanced_admin.php:324 +#: usr/local/www/services_captiveportal.php:890 +msgid "SSL Certificate" +msgstr "SSL証明書" + +#: usr/local/www/system_advanced_admin.php:339 +#: usr/local/www/system_advanced_admin.php:339 +msgid "TCP port" +msgstr "TCPãƒãƒ¼ãƒˆ" + +#: usr/local/www/system_advanced_admin.php:344 +#: usr/local/www/system_advanced_admin.php:344 +msgid "" +"Enter a custom port number for the webConfigurator above if you want to " +"override the default (80 for HTTP, 443 for HTTPS). Changes will take effect " +"immediately after save." +msgstr "( 〠HTTPã«HTTPSã®443ã‚’80ã«ï¼‰ãƒ‡ãƒ•ォルトを上書ã"ã‚ãªãŸãŒã—ãŸã„å ´åˆã¯ã€ä¸Šè¨˜ã®webConfigurator用ã®ã‚«ã‚¹ã‚¿ãƒ ãƒãƒ¼ãƒˆç•ªå·ã‚’入力ã—ã¦ãã ã•ã„〠。変更ã¯å¾Œã«ä¿å­˜ã€ã™ãã«ã€Œæœ‰åйã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/system_advanced_admin.php:351 +#: usr/local/www/system_advanced_admin.php:351 +msgid "Max Processes" +msgstr "最大プロセス" + +#: usr/local/www/system_advanced_admin.php:356 +#: usr/local/www/system_advanced_admin.php:356 +msgid "" +"Enter the number of webConfigurator processes you want to run. This defaults " +"to 2. Increasing this will allow more users/browsers to access the GUI " +"concurrently." +msgstr "2ã«ã€Œã‚ãªãŸã¯ã“ã®ãƒ‡ãƒ•ォルトを実行ã—ãŸã„webConfiguratorãƒ—ãƒ­ã‚»ã‚¹ã®æ•°ã‚’入力ã—ã¦ãã ã•ã„〠。ã“れを大ããã™ã‚‹ã¨ã€ã‚ˆã‚Šå¤šãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼/ブラウザãŒåŒæ™‚ã«GUI ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/system_advanced_admin.php:363 +#: usr/local/www/system_advanced_admin.php:363 +msgid "WebGUI redirect" +msgstr "WebGUIã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ" + +#: usr/local/www/system_advanced_admin.php:366 +#: usr/local/www/system_advanced_admin.php:366 +msgid "Disable webConfigurator redirect rule" +msgstr "webConfiguratorã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_admin.php:368 +#: usr/local/www/system_advanced_admin.php:368 +msgid "" +"When this is unchecked, access to the webConfigurator is always permitted " +"even on port 80, regardless of the listening port configured. Check this box " +"to disable this automatically added redirect rule. " +msgstr "設定ã«é–¢ä¿‚ãªãリスニングãƒãƒ¼ãƒˆã®ã€ã§ã‚‚ã€ãƒãƒ¼ãƒˆ80上ã§ã€Œã“れをオフã«ã™ã‚‹ã¨ã€ webConfiguratorã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã¯å¸¸ã«è¨±å¯ã•れã¦ã„る〠。ã“ã®è‡ªå‹•çš„ã«è¿½åŠ ã•れãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ãƒœãƒƒã‚¯ã‚¹ã€ã‚’確èªã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_admin.php:375 +#: usr/local/www/system_advanced_admin.php:375 +msgid "WebGUI Login Autocomplete" +msgstr "WebGUIã®ãƒ­ã‚°ã‚¤ãƒ³ã‚ªãƒ¼ãƒˆã‚³ãƒ³ãƒ—リート" + +#: usr/local/www/system_advanced_admin.php:378 +#: usr/local/www/system_advanced_admin.php:378 +msgid "Disable webConfigurator login autocomplete" +msgstr "webConfiguratorログインオートコンプリートを無効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_admin.php:380 +#: usr/local/www/system_advanced_admin.php:380 +msgid "" +"When this is unchecked, login credentials for the webConfigurator may be " +"saved by the browser. While convenient, some security standards require this " +"to be disabled. Check this box to disable autocomplete on the login form so " +"that browsers will not prompt to save credentials (NOTE: Some browsers do " +"not respect this option). " +msgstr "「ã“れをオフã«ã™ã‚‹ã¨ã€ webConfiguratorã®ãƒ­ã‚°ã‚¤ãƒ³èªè¨¼æƒ…å ±ã¨ã™ã‚‹ã“ã¨ãŒã§ãる「ブラウザã«ã‚ˆã£ã¦ä¿å­˜ã•れãŸã€‚便利ãªä¸€æ–¹ã§ã€ã„ãã¤ã‹ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£æ¨™æº–ã¯ã€Œç„¡åйã«ã™ã‚‹ãƒ­ã‚°ã‚¤ãƒ³ãƒ•ォームã«è‡ªå‹•補完を無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’オンã«ã—ã¾ã™ã®ã§ã€ "ã“れを必è¦ã¨ã™ã‚‹ãƒ–ラウザãŒèªè¨¼æƒ…å ±ä¿å­˜ã™ã‚‹ã‚ˆã†æ±‚ã‚られãªã„ã“ã¨ï¼ˆæ³¨ï¼šä¸€éƒ¨ã®ãƒ–ラウザã§ã¯ã€ "ã“ã®ã‚ªãƒ—ションを尊é‡ã—ãªã„ã§ãã ã•ã„) ​​。" + +#: usr/local/www/system_advanced_admin.php:387 +#: usr/local/www/system_advanced_admin.php:387 +msgid "WebGUI login messages" +msgstr "WebGUIã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" + +#: usr/local/www/system_advanced_admin.php:390 +#: usr/local/www/system_advanced_admin.php:390 +msgid "Disable logging of webConfigurator successful logins" +msgstr "webConfiguratoræˆåŠŸã—ãŸãƒ­ã‚°ã‚¤ãƒ³ã®ãƒ­ã‚°ã‚’無効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_admin.php:392 +#: usr/local/www/system_advanced_admin.php:392 +msgid "" +"When this is checked, successful logins to the webConfigurator will not be " +"logged." +msgstr "「ã“れをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ webConfiguratorã«æˆåŠŸã—ãŸãƒ­ã‚°ã‚¤ãƒ³ãŒã§ãã¾ã›ã‚“ã€ãƒ­ã‚°ã‚¤ãƒ³ã€‚" + +#: usr/local/www/system_advanced_admin.php:398 +#: usr/local/www/system_advanced_admin.php:398 +msgid "Anti-lockout" +msgstr "アンãƒãƒ­ãƒƒã‚¯ã‚¢ã‚¦ãƒˆ" + +#: usr/local/www/system_advanced_admin.php:407 +#: usr/local/www/system_advanced_admin.php:407 +msgid "Disable webConfigurator anti-lockout rule" +msgstr "webConfiguratorアンãƒãƒ­ãƒƒã‚¯ã‚¢ã‚¦ãƒˆãƒ«ãƒ¼ãƒ«ã‚’無効ã«" + +#: usr/local/www/system_advanced_admin.php:409 +#: usr/local/www/system_advanced_admin.php:409 +#, php-format +msgid "" +"When this is unchecked, access to the webConfigurator on the %s interface is " +"always permitted, regardless of the user-defined firewall rule set. Check " +"this box to disable this automatically added rule, so access to the " +"webConfigurator is controlled by the user-defined firewall rules (ensure you " +"have a firewall rule in place that allows you in, or you will lock yourself " +"out!)" +msgstr "「ã“れをオフã«ã™ã‚‹ã¨ã€ %sインターフェイス上webConfiguratorã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒã•れã¦ã„ã‚‹ã€ã«é–¢ä¿‚ãªãã€å¸¸ã«è¨­å®šã•れã€ãƒ¦ãƒ¼ã‚¶å®šç¾©ã®ãƒ•ァイアウォールルールをã€è¨±å¯ã—ãŸã€‚ãƒã‚§ãƒƒã‚¯ã€Œã“ã®æœ¬ãŒè‡ªå‹•çš„ã«è¿½åŠ ãƒ«ãƒ¼ãƒ«ã‚’ç„¡åŠ¹ã«ã™ã‚‹ãƒœãƒƒã‚¯ã‚¹ãªã®ã§ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’「 webConfiguratorã¯ï¼ˆã‚ãªãŸãŒ "ã‚ãªãŸã®ä¸­ã§å¯èƒ½ã«ã™ã‚‹å ´æ‰€ã«ãƒ•ァイアウォールルールをæŒã£ã¦ã„ã‚‹ã€ã¾ãŸã¯ã‚ãªãŸè‡ªèº«ã‚’ロックã—ã¾ã™ã€ã‚’確èªã—外ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ãƒ•ァイアウォールルールã«ã‚ˆã£ã¦åˆ¶å¾¡ã•れã¾ã™ ï¼ ï¼‰" + +#: usr/local/www/system_advanced_admin.php:415 +#: usr/local/www/system_advanced_admin.php:415 +msgid "" +"Hint: the "Set interface(s) IP address" option in the console menu " +"resets this setting as well." +msgstr "「ヒント: ã€ã‚’設定ã—ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス(S )ã®IPアドレス「コンソールメニューã®ã‚ªãƒ—ションã¯ã€ "ã ã‘ã§ãªãã€ã“ã®è¨­å®šã‚’リセットã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_admin.php:419 +#: usr/local/www/system_advanced_admin.php:419 +msgid "DNS Rebind Check" +msgstr "DNSã®å†ãƒã‚¤ãƒ³ãƒ‰ã‚’確èª" + +#: usr/local/www/system_advanced_admin.php:422 +#: usr/local/www/system_advanced_admin.php:422 +msgid "Disable DNS Rebinding Checks" +msgstr "DNSリãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãƒã‚§ãƒƒã‚¯ã‚’無効ã«" + +#: usr/local/www/system_advanced_admin.php:424 +#: usr/local/www/system_advanced_admin.php:424 +msgid "" +"When this is unchecked, your system is protected against DNS Rebinding attacks. This blocks " +"private IP responses from your configured DNS servers. Check this box to " +"disable this protection if it interferes with webConfigurator access or name " +"resolution in your environment. " +msgstr "「ã“れをオフã«ã™ã‚‹ã¨ã€ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã¯ã€ã‚‚ã—〠href="http://en."wikipedia.org/wiki/DNS_rebinding"u003e DNSã®å†ãƒã‚¤ãƒ³ãƒ‰æ”»æ’ƒu003c / au003eã§ä¿è­·ã•れã¦ã„ã¾ã™ã€‚ã“ã®ãƒ–ロックã¯ã€ãれãŒã‚ãªãŸã®ç’°å¢ƒã§webConfiguratorアクセスã¾ãŸã¯åå‰ã€Œè§£åƒåº¦ã¨å¹²æ¸‰ã™ã‚‹å ´åˆã¯ã€ã“ã®ä¿è­·ã‚’無効ã«ã™ã‚‹"ã‚ãªãŸã®è¨­å®šã•れãŸDNSサーãƒã‹ã‚‰ãƒ—ライベートIP応答ãŒã€‚ã™ã‚‹ã«ã¯ã€ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/system_advanced_admin.php:431 +#: usr/local/www/system_advanced_admin.php:431 +msgid "Alternate Hostnames" +msgstr "代替ホストå" + +#: usr/local/www/system_advanced_admin.php:435 +#: usr/local/www/system_advanced_admin.php:435 +msgid "Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks" +msgstr "DNSリãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã¨HTTP_REFERERãƒã‚§ãƒƒã‚¯ã®ãŸã‚ã®ä»£æ›¿ãƒ›ã‚¹ãƒˆå" + +#: usr/local/www/system_advanced_admin.php:437 +#: usr/local/www/system_advanced_admin.php:437 +msgid "" +"Here you can specify alternate hostnames by which the router may be queried, " +"to bypass the DNS Rebinding Attack checks. Separate hostnames with spaces." +msgstr "DNSã®å†ãƒã‚¤ãƒ³ãƒ‰æ”»æ’ƒãƒã‚§ãƒƒã‚¯ã‚’回é¿ã™ã‚‹ãŸã‚ã«"ã“ã“ã§ã¯ã€ãƒ«ãƒ¼ã‚¿ãŒç…§ä¼šã•れるã‹ã‚‚ã—れãªã„別ã®ãƒ›ã‚¹ãƒˆåを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。スペースã§åŒºåˆ‡ã‚Šã®ãƒ›ã‚¹ãƒˆå。" + +#: usr/local/www/system_advanced_admin.php:442 +#: usr/local/www/system_advanced_admin.php:442 +msgid "Browser HTTP_REFERER enforcement" +msgstr "ブラウザã®HTTP_REFERERã®æ–½è¡Œ" + +#: usr/local/www/system_advanced_admin.php:445 +#: usr/local/www/system_advanced_admin.php:445 +msgid "Disable HTTP_REFERER enforcement check" +msgstr "HTTP_REFERER執行ã®ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_admin.php:447 +msgid "" +"When this is unchecked, access to the webConfigurator is protected against " +"HTTP_REFERER redirection attempts. Check this box to disable this protection " +"if you find that it interferes with webConfigurator access in certain corner " +"cases such as using external scripts to interact with this system. More " +"information on HTTP_REFERER is available from Wikipedia." +msgstr "HTTP_REFERERリダイレクトã—よã†ã¨ã€Œã“れをオフã«ã™ã‚‹ã¨ã€ webConfiguratorã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒã‹ã‚‰ä¿è­·ã•れã¦ã„ã¾ã™ã€ 。ã“ã®ã‚ˆã†ãªã€ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã¨å¯¾è©±ã™ã‚‹å¤–部スクリプトを使用ã™ã‚‹ãªã©ã®ã‚±ãƒ¼ã‚¹"ã‚ãªãŸã¯ãれãŒç‰¹å®šã®éš…ã«webConfiguratorアクセスを妨害ã™ã‚‹ã“ã¨ã‚’発見ã—ãŸå ´åˆã€ã€Œã“ã®ä¿è­·ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’オンã«ã—ã¾ã™ã€‚ HTTP_REFERERã®è©³ç´°ã€ã®æƒ…å ±ã¯ã€ u003ca target='_new' href='http://"en.wikipedia.org/wiki/HTTP_referrer'u003eウィキペディアu003c/ A u003eã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™ã€‚" + +#: usr/local/www/system_advanced_admin.php:457 +#: usr/local/www/system_advanced_admin.php:457 +msgid "Secure Shell" +msgstr "セキュアシェル" + +#: usr/local/www/system_advanced_admin.php:460 +#: usr/local/www/system_advanced_admin.php:460 +msgid "Secure Shell Server" +msgstr "セキュアシェルサーãƒãƒ¼" + +#: usr/local/www/system_advanced_admin.php:463 +#: usr/local/www/system_advanced_admin.php:463 +msgid "Enable Secure Shell" +msgstr "セキュアシェルを有効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_admin.php:467 +#: usr/local/www/system_advanced_admin.php:467 +msgid "Authentication Method" +msgstr "èªè¨¼æ–¹æ³•" + +#: usr/local/www/system_advanced_admin.php:470 +msgid "Disable password login for Secure Shell (RSA key only)" +msgstr "セキュアシェルã®ãƒ‘スワードログインを無効ã«ã™ã‚‹ï¼ˆ RSAéµã®ã¿ï¼‰" + +#: usr/local/www/system_advanced_admin.php:472 +#: usr/local/www/system_advanced_admin.php:472 +msgid "When enabled, authorized keys need to be configured for each" +msgstr "有効ã«ã™ã‚‹ã¨ã€èªè¨¼æ¸ˆã¿ã®ã‚­ãƒ¼ã¯ã€ãれãžã‚Œã®ãŸã‚ã«è¨­å®šã•れる必è¦ãŒã‚ã‚‹" + +#: usr/local/www/system_advanced_admin.php:473 +#: usr/local/www/system_advanced_admin.php:473 +msgid "user" +msgstr "ユーザー" + +#: usr/local/www/system_advanced_admin.php:474 +#: usr/local/www/system_advanced_admin.php:474 +msgid "that has been granted secure shell access." +msgstr "ã¤ã¾ã‚Šã€ã‚»ã‚­ãƒ¥ã‚¢ã‚·ã‚§ãƒ«ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_admin.php:478 +#: usr/local/www/system_advanced_admin.php:478 +msgid "SSH port" +msgstr "SSHãƒãƒ¼ãƒˆ" + +#: usr/local/www/system_advanced_admin.php:482 +#: usr/local/www/system_advanced_admin.php:482 +msgid "Note: Leave this blank for the default of 22." +msgstr "注: 22ã®ãƒ‡ãƒ•ォルトã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_admin.php:489 +#: usr/local/www/system_advanced_admin.php:489 +msgid "Serial Communcations" +msgstr "シリアルCommuncations" + +#: usr/local/www/system_advanced_admin.php:493 +#: usr/local/www/system_advanced_admin.php:493 +msgid "Serial Terminal" +msgstr "シリアル端末" + +#: usr/local/www/system_advanced_admin.php:496 +#: usr/local/www/system_advanced_admin.php:496 +msgid "" +"Enables the first serial port with 9600/8/N/1 by default, or another speed " +"selectable below." +msgstr "以下ã®é¸æŠžå¯èƒ½ãªã€Œãƒ‡ãƒ•ォルトã§9600/8/N/1ã§æœ€åˆã®ã‚·ãƒªã‚¢ãƒ«ãƒãƒ¼ãƒˆã€ã¾ãŸã¯åˆ¥ã®é€Ÿåº¦ã‚’å¯èƒ½ã«ã—ã¾ã™ã€ 。" + +#: usr/local/www/system_advanced_admin.php:497 +#: usr/local/www/system_advanced_admin.php:497 +msgid "" +"Note: This will redirect the console output and messages to the serial " +"port. You can still access the console menu from the internal video card/" +"keyboard. A null modem serial cable or adapter is required to use the " +"serial console." +msgstr ""注:ã“れã¯ã€ã‚·ãƒªã‚¢ãƒ«ã‚³ãƒ³ã‚½ãƒ¼ãƒ«å‡ºåŠ›ã‚„ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—ã¾ã™ã€ãƒãƒ¼ãƒˆã€‚ã‚ãªãŸã¯ã¾ã ã€å†…部ビデオカード/ã‹ã‚‰ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãる「キーボード。 A u003cBu003eヌルモデムu003c / B u003eシリアルケーブルやアダプタãŒä½¿ç”¨ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™"シリアルコンソールを。" + +#: usr/local/www/system_advanced_admin.php:502 +#: usr/local/www/system_advanced_admin.php:502 +msgid "Serial Speed" +msgstr "シリアルãƒãƒ¼ãƒˆã®é€Ÿåº¦" + +#: usr/local/www/system_advanced_admin.php:512 +#: usr/local/www/system_advanced_admin.php:512 +msgid "Allows selection of different speeds for the serial console port." +msgstr "シリアルコンソールãƒãƒ¼ãƒˆã€ç•°ãªã‚‹é€Ÿåº¦ã®é¸æŠžãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/system_advanced_admin.php:519 +#: usr/local/www/system_advanced_admin.php:519 +msgid "Console Options" +msgstr "コンソールオプション" + +#: usr/local/www/system_advanced_admin.php:522 +#: usr/local/www/system_advanced_admin.php:522 +msgid "Console menu" +msgstr "[コンソール]メニュー" + +#: usr/local/www/system_advanced_admin.php:525 +#: usr/local/www/system_advanced_admin.php:525 +msgid "Password protect the console menu" +msgstr "パスワードã¯ã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’ä¿è­·" + +#: usr/local/www/system_advanced_admin.php:527 +#: usr/local/www/system_advanced_admin.php:527 +msgid "Changes to this option will take effect after a reboot." +msgstr "ã“ã®ã‚ªãƒ—ションã¸ã®å¤‰æ›´ã¯ã€å†èµ·å‹•å¾Œã«æœ‰åйã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/system_advanced_admin.php:564 +#: usr/local/www/system_advanced_admin.php:564 +msgid "secure shell configuration has changed. Stopping sshd." +msgstr "ã‚»ã‚­ãƒ¥ã‚¢ã‚·ã‚§ãƒ«ã®æ§‹æˆãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚ sshdã‚’åœæ­¢ã€‚" + +#: usr/local/www/system_advanced_admin.php:567 +#: usr/local/www/system_advanced_admin.php:567 +msgid "secure shell configuration has changed. Restarting sshd." +msgstr "ã‚»ã‚­ãƒ¥ã‚¢ã‚·ã‚§ãƒ«ã®æ§‹æˆãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚ sshdã‚’å†èµ·å‹•。" + +#: usr/local/www/system_advanced_admin.php:574 +#: usr/local/www/system_advanced_admin.php:574 +msgid "webConfigurator configuration has changed. Restarting webConfigurator." +msgstr "webConfiguratoræ§‹æˆãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚ webConfiguratorã‚’å†èµ·å‹•ã™ã‚‹ã€‚" + +#: usr/local/www/system_advanced_firewall.php:78 +#: usr/local/www/system_advanced_firewall.php:77 +#: usr/local/www/system_advanced_firewall.php:88 +#: usr/local/www/system_advanced_firewall.php:88 +msgid "The Firewall Maximum States value must be an integer." +msgstr "ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®æœ€å¤§çŠ¶æ…‹ã®å€¤ã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_advanced_firewall.php:81 +#: usr/local/www/system_advanced_firewall.php:83 +#: usr/local/www/system_advanced_firewall.php:94 +#: usr/local/www/system_advanced_firewall.php:94 +msgid "The Firewall Maximum Table Entries value must be an integer." +msgstr "ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®æœ€å¤§ãƒ†ãƒ¼ãƒ–ルエントリã®å€¤ã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_advanced_firewall.php:84 +#: usr/local/www/system_advanced_firewall.php:86 +#: usr/local/www/system_advanced_firewall.php:97 +#: usr/local/www/system_advanced_firewall.php:97 +msgid "The TCP idle timeout must be an integer." +msgstr "TCPã‚¢ã‚¤ãƒ‰ãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_advanced_firewall.php:87 +#: usr/local/www/system_advanced_firewall.php:89 +#: usr/local/www/system_advanced_firewall.php:100 +#: usr/local/www/system_advanced_firewall.php:100 +msgid "The Reflection timeout must be an integer." +msgstr "ãƒªãƒ•ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_advanced_firewall.php:178 +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/system_advanced_firewall.php:221 +#: usr/local/www/system_advanced_firewall.php:221 +msgid "Advanced: Firewall and NAT" +msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šãƒ•ァイアウォールã¨NAT" + +#: usr/local/www/system_advanced_firewall.php:190 +#: usr/local/www/system_advanced_firewall.php:204 +#: usr/local/www/system_advanced_firewall.php:233 +#: usr/local/www/system_advanced_firewall.php:233 +msgid "as the name says, it's the normal optimization algorithm" +msgstr "åå‰ãŒè¨€ã†ã‚ˆã†ã«ã€ãれã¯é€šå¸¸ã®æœ€é©åŒ–アルゴリズムã§ã™" + +#: usr/local/www/system_advanced_firewall.php:191 +#: usr/local/www/system_advanced_firewall.php:205 +#: usr/local/www/system_advanced_firewall.php:234 +#: usr/local/www/system_advanced_firewall.php:234 +msgid "" +"used for high latency links, such as satellite links. Expires idle " +"connections later than default" +msgstr "後ã§ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆä»¥å¤–ã®æŽ¥ç¶šã€ã¨ã¯ã€è¡›æ˜Ÿãƒªãƒ³ã‚¯ãªã©ã®é«˜é…延リンクã®ãŸã‚ã«ä½¿ç”¨ã•れる。アイドルã®Expires ã€" + +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/system_advanced_firewall.php:206 +msgid "" +"expires idle connections quicker. More efficient use of CPU and memory but " +"can drop legitimate connections" +msgstr "ã€Œè¿…é€Ÿã‚¢ã‚¤ãƒ‰ãƒ«çŠ¶æ…‹ã®æŽ¥ç¶šã‚’æœŸé™åˆ‡ã‚Œã«ã—ã¾ã™ã€‚ CPUã¨ãƒ¡ãƒ¢ãƒªãŒã€ã‚ˆã‚ŠåŠ¹çŽ‡çš„ã«ä½¿ç”¨ã€ã¨ã¯ã€æ­£å½“ãªæŽ¥ç¶šã‚’ãƒ‰ãƒ­ãƒƒãƒ—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/system_advanced_firewall.php:193 +#: usr/local/www/system_advanced_firewall.php:207 +msgid "" +"tries to avoid dropping any legitimate connections at the expense of " +"increased memory usage and CPU utilization." +msgstr "メモリ使用é‡ã®å¢—加やCPU使用率ã€ã‚’犠牲ã«ã—ã¦æ­£å½“ãªæŽ¥ç¶šã‚’è½ã¨ã•ãªã„よã†ã«ã—よã†ã¨ã—ã¾ã™ã€ 。" + +#: usr/local/www/system_advanced_firewall.php:239 +#: usr/local/www/system_advanced_firewall.php:253 +#: usr/local/www/system_advanced_firewall.php:282 +#: usr/local/www/system_advanced_firewall.php:281 +#: usr/local/www/system_advanced_firewall.php:281 +msgid "Firewall Advanced" +msgstr "ファイアウォールアドãƒãƒ³ã‚¹" + +#: usr/local/www/system_advanced_firewall.php:242 +#: usr/local/www/system_advanced_firewall.php:256 +#: usr/local/www/system_advanced_firewall.php:285 +#: usr/local/www/system_advanced_firewall.php:284 +#: usr/local/www/system_advanced_firewall.php:284 +msgid "IP Do-Not-Fragment compatibility" +msgstr "IPドゥ-NOT-フラグメントã®äº’æ›æ€§" + +#: usr/local/www/system_advanced_firewall.php:245 +#: usr/local/www/system_advanced_firewall.php:259 +#: usr/local/www/system_advanced_firewall.php:288 +#: usr/local/www/system_advanced_firewall.php:287 +#: usr/local/www/system_advanced_firewall.php:287 +msgid "Clear invalid DF bits instead of dropping the packets" +msgstr "代ã‚りã«ã€ãƒ‘ケットをドロップã™ã‚‹æ˜Žç¢ºãªç„¡åйã®DFビット" + +#: usr/local/www/system_advanced_firewall.php:246 +#: usr/local/www/system_advanced_firewall.php:260 +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/system_advanced_firewall.php:288 +#: usr/local/www/system_advanced_firewall.php:288 +msgid "" +"This allows for communications with hosts that generate fragmented packets " +"with the don't fragment (DF) bit set. Linux NFS is known to do this. This " +"will cause the filter to not drop such packets but instead clear the don't " +"fragment bit." +msgstr "断片化ã—ãªã„( DF )ã§ã€Œã“ã‚Œã¯æ–­ç‰‡åŒ–ã•れãŸãƒ‘ケットを生æˆã—ãŸãƒ›ã‚¹ãƒˆã¨ã®é€šä¿¡ã‚’å¯èƒ½ã«ã—ã€ã€Œè¨­å®šãƒ“ット。 Linuxã®NFSã¯ã€ã“ã®æ“作を行ã†ã“ã¨ãŒçŸ¥ã‚‰ã‚Œã¦ã„る。ã“れã¯ã€ "フィルタã¯ã€ã“ã®ã‚ˆã†ãªãƒ‘ケットをドロップã—ãªã„よã†ã«ãªã‚Šã¾ã™ãŒã€ä»£ã‚ã‚Šã«æ˜Žç¢ºãªã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã—ã¦ãŠã‚Šã¾ã›ã€Œãƒ•ラグメントビット。" + +#: usr/local/www/system_advanced_firewall.php:253 +#: usr/local/www/system_advanced_firewall.php:267 +#: usr/local/www/system_advanced_firewall.php:296 +#: usr/local/www/system_advanced_firewall.php:295 +#: usr/local/www/system_advanced_firewall.php:295 +msgid "IP Random id generation" +msgstr "IPランダムIDã®ç”Ÿæˆ" + +#: usr/local/www/system_advanced_firewall.php:256 +#: usr/local/www/system_advanced_firewall.php:270 +#: usr/local/www/system_advanced_firewall.php:299 +#: usr/local/www/system_advanced_firewall.php:298 +#: usr/local/www/system_advanced_firewall.php:298 +msgid "" +"Insert a stronger id into IP header of packets passing through the filter." +msgstr "「フィルターを通éŽã™ã‚‹ãƒ‘ケットã®IPヘッダã«å¼·ã„IDを挿入ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:257 +#: usr/local/www/system_advanced_firewall.php:271 +#: usr/local/www/system_advanced_firewall.php:300 +#: usr/local/www/system_advanced_firewall.php:299 +#: usr/local/www/system_advanced_firewall.php:299 +msgid "" +"Replaces the IP identification field of packets with random values to " +"compensate for operating systems that use predictable values. This option " +"only applies to packets that are not fragmented after the optional packet " +"reassembly." +msgstr "予測å¯èƒ½ãªå€¤ã‚’使用ã™ã‚‹ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã‚’補ã†ã€ãŸã‚ã«ãƒ©ãƒ³ãƒ€ãƒ ãªå€¤ã‚’æŒã¤ãƒ‘ケットã®IPè­˜åˆ¥ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’ç½®ãæ›ãˆã€ 。ã“ã®ã‚ªãƒ—ションã¯ã€å†æ§‹ç¯‰ã€ ã€ã‚ªãƒ—ションã®ãƒ‘ケットã®å¾Œã«æ–­ç‰‡åŒ–ã•れã¦ã„ãªã„パケットã«é©ç”¨ã•れã¾ã™ã€ 。" + +#: usr/local/www/system_advanced_firewall.php:264 +#: usr/local/www/system_advanced_firewall.php:278 +#: usr/local/www/system_advanced_firewall.php:307 +#: usr/local/www/system_advanced_firewall.php:306 +#: usr/local/www/system_advanced_firewall.php:306 +msgid "Firewall Optimization Options" +msgstr "ファイアウォール最é©åŒ–オプション" + +#: usr/local/www/system_advanced_firewall.php:267 +#: usr/local/www/system_advanced_firewall.php:281 +#: usr/local/www/system_advanced_firewall.php:310 +#: usr/local/www/system_advanced_firewall.php:309 +#: usr/local/www/system_advanced_firewall.php:309 +msgid "normal" +msgstr "ノーマル" + +#: usr/local/www/system_advanced_firewall.php:268 +#: usr/local/www/system_advanced_firewall.php:282 +#: usr/local/www/system_advanced_firewall.php:311 +#: usr/local/www/system_advanced_firewall.php:310 +#: usr/local/www/system_advanced_firewall.php:310 +msgid "high-latency" +msgstr "高レイテンシ" + +#: usr/local/www/system_advanced_firewall.php:269 +#: usr/local/www/system_advanced_firewall.php:283 +#: usr/local/www/system_advanced_firewall.php:312 +#: usr/local/www/system_advanced_firewall.php:311 +#: usr/local/www/system_advanced_firewall.php:311 +msgid "aggressive" +msgstr "ç©æ¥µçš„ãª" + +#: usr/local/www/system_advanced_firewall.php:270 +#: usr/local/www/system_advanced_firewall.php:284 +#: usr/local/www/system_advanced_firewall.php:313 +#: usr/local/www/system_advanced_firewall.php:312 +#: usr/local/www/system_advanced_firewall.php:312 +msgid "conservative" +msgstr "ä¿å®ˆçš„" + +#: usr/local/www/system_advanced_firewall.php:278 +#: usr/local/www/system_advanced_firewall.php:292 +#: usr/local/www/system_advanced_firewall.php:321 +#: usr/local/www/system_advanced_firewall.php:322 +#: usr/local/www/system_advanced_firewall.php:322 +msgid "Select the type of state table optimization to use" +msgstr "使用ã™ã‚‹çŠ¶æ…‹ãƒ†ãƒ¼ãƒ–ãƒ«ã®æœ€é©åŒ–ã®ç¨®é¡žã‚’é¸æŠžã—ã¾ã™" + +#: usr/local/www/system_advanced_firewall.php:282 +#: usr/local/www/system_advanced_firewall.php:296 +#: usr/local/www/system_advanced_firewall.php:325 +#: usr/local/www/system_advanced_firewall.php:326 +#: usr/local/www/system_advanced_firewall.php:326 +msgid "Disable Firewall" +msgstr "ファイアウォールを無効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_firewall.php:285 +#: usr/local/www/system_advanced_firewall.php:299 +#: usr/local/www/system_advanced_firewall.php:328 +#: usr/local/www/system_advanced_firewall.php:329 +#: usr/local/www/system_advanced_firewall.php:329 +msgid "Disable all packet filtering." +msgstr "ã™ã¹ã¦ã®ãƒ‘ケットフィルタリングを無効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:287 +#: usr/local/www/system_advanced_firewall.php:301 +#: usr/local/www/system_advanced_firewall.php:330 +#: usr/local/www/system_advanced_firewall.php:331 +#: usr/local/www/system_advanced_firewall.php:331 +#, php-format +msgid "Note: This converts %s into a routing only platform!" +msgstr "注æ„:ã“れã¯ã€ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã®ã¿ã€ãƒ—ラットフォームã®ã«%sã«å¤‰æ›ï¼" + +#: usr/local/www/system_advanced_firewall.php:288 +#: usr/local/www/system_advanced_firewall.php:302 +#: usr/local/www/system_advanced_firewall.php:331 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:332 +msgid "Note: This will also turn off NAT!" +msgstr "注æ„:ã“れã¯ã¾ãŸã€NAT をオフã«ã—ã¾ã™ï¼" + +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:333 +#: usr/local/www/system_advanced_firewall.php:333 +msgid "If you only want to disable NAT, and not firewall rules, visit the" +msgstr "ã‚ãªãŸã ã‘ã®NATã¯ãªãã€ãƒ•ァイアウォールã®ãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã™ã‚‹å ´åˆã¯ã€è¨ªå•" + +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:333 +#: usr/local/www/system_advanced_firewall.php:333 +msgid "Outbound NAT" +msgstr "アウトãƒã‚¦ãƒ³ãƒ‰ã®NAT" + +#: usr/local/www/system_advanced_firewall.php:294 +#: usr/local/www/system_advanced_firewall.php:308 +#: usr/local/www/system_advanced_firewall.php:337 +#: usr/local/www/system_advanced_firewall.php:338 +#: usr/local/www/system_advanced_firewall.php:338 +msgid "Disable Firewall Scrub" +msgstr "ファイアウォールスクラブを無効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_firewall.php:297 +#: usr/local/www/system_advanced_firewall.php:311 +#: usr/local/www/system_advanced_firewall.php:340 +#: usr/local/www/system_advanced_firewall.php:341 +#: usr/local/www/system_advanced_firewall.php:341 +msgid "" +"Disables the PF scrubbing option which can sometimes interfere with NFS and " +"PPTP traffic." +msgstr "PPTPãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã€æ™‚ã«ã¯NFSã¨ã‚’妨害ã™ã‚‹å¯èƒ½æ€§ãŒPFスクラブオプションを無効ã«ã—ã¾ã™ã€ 。" + +#: usr/local/www/system_advanced_firewall.php:302 +#: usr/local/www/system_advanced_firewall.php:316 +#: usr/local/www/system_advanced_firewall.php:360 +#: usr/local/www/system_advanced_firewall.php:361 +#: usr/local/www/system_advanced_firewall.php:361 +msgid "Firewall Maximum States" +msgstr "ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®æœ€å¤§çŠ¶æ…‹" + +#: usr/local/www/system_advanced_firewall.php:306 +#: usr/local/www/system_advanced_firewall.php:320 +#: usr/local/www/system_advanced_firewall.php:364 +#: usr/local/www/system_advanced_firewall.php:365 +#: usr/local/www/system_advanced_firewall.php:365 +msgid "Maximum number of connections to hold in the firewall state table." +msgstr "ファイアウォールã®çŠ¶æ…‹ãƒ†ãƒ¼ãƒ–ãƒ«ã«ä¿æŒã™ã‚‹æŽ¥ç¶šã®æœ€å¤§æ•°ã€‚" + +#: usr/local/www/system_advanced_firewall.php:308 +#: usr/local/www/system_advanced_firewall.php:322 +#: usr/local/www/system_advanced_firewall.php:366 +#: usr/local/www/system_advanced_firewall.php:367 +#: usr/local/www/system_advanced_firewall.php:367 +msgid "" +"Note: Leave this blank for the default. On your system the default size is:" +msgstr ""注:デフォルトã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãŠãã€ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®ãƒ‡ãƒ•ォルトã®ã‚µã‚¤ã‚ºã¯ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:312 +#: usr/local/www/system_advanced_firewall.php:342 +#: usr/local/www/system_advanced_firewall.php:386 +#: usr/local/www/system_advanced_firewall.php:387 +#: usr/local/www/system_advanced_firewall.php:387 +msgid "Firewall Maximum Table Entries" +msgstr "ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®æœ€å¤§ãƒ†ãƒ¼ãƒ–ルエントリ" + +#: usr/local/www/system_advanced_firewall.php:316 +#: usr/local/www/system_advanced_firewall.php:346 +#: usr/local/www/system_advanced_firewall.php:390 +#: usr/local/www/system_advanced_firewall.php:391 +#: usr/local/www/system_advanced_firewall.php:391 +msgid "" +"Maximum number of table entries for systems such as aliases, sshlockout, " +"snort, etc, combined." +msgstr "組ã¿åˆã‚ã›ãªã©Snortã®ã€ 「ã“ã®ã‚ˆã†ãªã‚¨ã‚¤ãƒªã‚¢ã‚¹ã€ sshlockout ã€ãªã©ã®ã‚·ã‚¹ãƒ†ãƒ ç”¨ã®ãƒ†ãƒ¼ãƒ–ãƒ«ã‚¨ãƒ³ãƒˆãƒªã®æœ€å¤§æ•°ã€ 。" + +#: usr/local/www/system_advanced_firewall.php:319 +#: usr/local/www/system_advanced_firewall.php:334 +#: usr/local/www/system_advanced_firewall.php:349 +#: usr/local/www/system_advanced_firewall.php:378 +#: usr/local/www/system_advanced_firewall.php:393 +#: usr/local/www/system_advanced_firewall.php:379 +#: usr/local/www/system_advanced_firewall.php:394 +#: usr/local/www/system_advanced_firewall.php:379 +#: usr/local/www/system_advanced_firewall.php:394 +msgid "Note: Leave this blank for the default." +msgstr "注:デフォルトã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:321 +#: usr/local/www/system_advanced_firewall.php:336 +#: usr/local/www/system_advanced_firewall.php:351 +#: usr/local/www/system_advanced_firewall.php:380 +#: usr/local/www/system_advanced_firewall.php:395 +#: usr/local/www/system_advanced_firewall.php:381 +#: usr/local/www/system_advanced_firewall.php:396 +#: usr/local/www/system_advanced_firewall.php:381 +#: usr/local/www/system_advanced_firewall.php:396 +msgid "On your system the default size is:" +msgstr "システムã®ãƒ‡ãƒ•ォルトã®ã‚µã‚¤ã‚ºã¯ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:327 +#: usr/local/www/system_advanced_firewall.php:357 +#: usr/local/www/system_advanced_firewall.php:401 +#: usr/local/www/system_advanced_firewall.php:402 +#: usr/local/www/system_advanced_firewall.php:402 +msgid "Static route filtering" +msgstr "スタティックルートフィルタリング" + +#: usr/local/www/system_advanced_firewall.php:330 +#: usr/local/www/system_advanced_firewall.php:360 +#: usr/local/www/system_advanced_firewall.php:404 +#: usr/local/www/system_advanced_firewall.php:405 +#: usr/local/www/system_advanced_firewall.php:405 +msgid "Bypass firewall rules for traffic on the same interface" +msgstr "åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã®ãƒˆãƒ©ãƒ•ィックã®ãŸã‚ã®ãƒã‚¤ãƒ‘スファイアウォールルール" + +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:362 +#: usr/local/www/system_advanced_firewall.php:406 +#: usr/local/www/system_advanced_firewall.php:407 +#: usr/local/www/system_advanced_firewall.php:407 +msgid "" +"This option only applies if you have defined one or more static routes. If " +"it is enabled, traffic that enters and leaves through the same interface " +"will not be checked by the firewall. This may be desirable in some " +"situations where multiple subnets are connected to the same interface." +msgstr ""ã‚ãªãŸã¯1ã¤ä»¥ä¸Šã®é™çš„ルートを定義ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションã¯é©ç”¨ã•れã¾ã™ã€‚å ´åˆã€ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹ã€å…¥ã£ã¦ã€åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを介ã—ã¦è‘‰ã®ãƒˆãƒ©ãƒ•ィックãŒçжæ³è¤‡æ•°ã®ã‚µãƒ–ãƒãƒƒãƒˆã€Œãƒ•ァイアウォールã«ã‚ˆã£ã¦ãƒã‚§ãƒƒã‚¯ã•れã¾ã›ã‚“。ã“れã¯ã€ã„ãã¤ã‹ã®ä¸­ã§æœ›ã¾ã—ã„ã“ã¨ãŒã‚ã‚‹ã€åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã«æŽ¥ç¶šã•れã¦ã„る。" + +#: usr/local/www/system_advanced_firewall.php:342 +#: usr/local/www/system_advanced_firewall.php:372 +#: usr/local/www/system_advanced_firewall.php:416 +#: usr/local/www/system_advanced_firewall.php:417 +#: usr/local/www/system_advanced_firewall.php:417 +msgid "Disable all auto-added VPN rules." +msgstr "ã™ã¹ã¦ã®è‡ªå‹•追加ã®VPNルールを無効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:344 +#: usr/local/www/system_advanced_firewall.php:374 +#: usr/local/www/system_advanced_firewall.php:418 +#: usr/local/www/system_advanced_firewall.php:419 +#: usr/local/www/system_advanced_firewall.php:419 +msgid "Note: This disables automatically added rules for IPsec, PPTP." +msgstr "注:ã“れã¯IPsecã®ã€ PPTPã®ãŸã‚ã«è‡ªå‹•çš„ã«è¿½åŠ ã•れãŸãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:352 +#: usr/local/www/system_advanced_firewall.php:382 +#: usr/local/www/system_advanced_firewall.php:426 +#: usr/local/www/system_advanced_firewall.php:427 +#: usr/local/www/system_advanced_firewall.php:427 +msgid "Disable reply-to on WAN rules" +msgstr "WANã®ãƒ«ãƒ¼ãƒ«ã«è¿”ä¿¡ã™ã‚‹ã‚’無効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_firewall.php:354 +#: usr/local/www/system_advanced_firewall.php:384 +#: usr/local/www/system_advanced_firewall.php:428 +#: usr/local/www/system_advanced_firewall.php:429 +#: usr/local/www/system_advanced_firewall.php:429 +msgid "" +"With Multi-WAN you generally want to ensure traffic leaves the same " +"interface it arrives on, hence reply-to is added automatically by default. " +"When using bridging, you must disable this behavior if the WAN gateway IP is " +"different from the gateway IP of the hosts behind the bridged interface." +msgstr "「マルãƒWANを使用ã™ã‚‹ã¨ã€ä¸€èˆ¬çš„ã«ã¯ã€ãƒˆãƒ©ãƒ•ィックã®è‘‰ã‚’確èªã—ãŸã„ã€åŒã˜"ã€ãれãŒåˆ°ç€ã—ãŸã‚¤ãƒ³ã‚¿ãƒ•ェースゆãˆè¿”ä¿¡å…ˆã¯ã€ãƒ‡ãƒ•ォルトã§è‡ªå‹•çš„ã«è¿½åŠ ã•れã¾ã™ã€‚ブリッジドインターフェイスã®èƒŒå¾Œã«ã‚るホストã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤IPアドレスã¨ã¯åˆ¥ã®ã€Œãƒ–リッジングを使用ã™ã‚‹å ´åˆã¯WANゲートウェイIPãŒã‚ã‚‹å ´åˆã¯ã€ã“ã®å‹•作を無効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/system_advanced_firewall.php:364 +#: usr/local/www/system_advanced_firewall.php:404 +#: usr/local/www/system_advanced_firewall.php:466 +#: usr/local/www/system_advanced_firewall.php:467 +#: usr/local/www/system_advanced_firewall.php:467 +msgid "Network Address Translation" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹å¤‰æ›" + +#: usr/local/www/system_advanced_firewall.php:367 +msgid "Disable NAT Reflection for port forwards" +msgstr "ãƒãƒ¼ãƒˆã«è»¢é€ã™ã‚‹ãŸã‚ã®NATリフレクションをディセーブル" + +#: usr/local/www/system_advanced_firewall.php:370 +msgid "" +"Disables the automatic creation of additional NAT redirect rules for access " +"to port forwards on your external IP addresses from within your internal " +"networks. Note: Reflection for port forward entries is skipped for ranges " +"larger than 500 ports." +msgstr "内部内ã‹ã‚‰å¤–部IPアドレス上ã®ãƒãƒ¼ãƒˆã«è»¢é€ã™ã‚‹ã€ã®ã‚¢ã‚¯ã‚»ã‚¹ã®ãŸã‚ã®è¦å‰‡ã‚’リダイレクトã®è¿½åŠ ã®NATã®è‡ªå‹•作æˆã‚’無効ã«ã—ã¾ã™""ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æ³¨æ„ã—ã¦ãã ã•ã„。ãƒãƒ¼ãƒˆãƒ•ォワードエントリã®åå°„ã¯ç¯„囲ã«ã¤ã„ã¦ã¯ã‚¹ã‚­ãƒƒãƒ—ã•れã€ã€Œã‚ˆã‚Šå¤§ãã500ãƒãƒ¼ãƒˆã€‚" + +#: usr/local/www/system_advanced_firewall.php:374 +#: usr/local/www/system_advanced_firewall.php:425 +#: usr/local/www/system_advanced_firewall.php:487 +#: usr/local/www/system_advanced_firewall.php:488 +#: usr/local/www/system_advanced_firewall.php:488 +msgid "Reflection Timeout" +msgstr "å射タイムアウト" + +#: usr/local/www/system_advanced_firewall.php:377 +msgid "" +"Enter value for Reflection timeout in seconds. Note: Only applies to " +"Reflection on port forwards." +msgstr "「秒ã«ãŠã‘ã‚‹å射タイムアウトã®å€¤ã‚’入力ã—ã¾ã™ï¼ˆæ³¨ï¼‰ 。ã«ã®ã¿é©ç”¨ã•れã€ã€Œãƒãƒ¼ãƒˆã«è»¢é€ä¸Šã®ãƒªãƒ•レクション。" + +#: usr/local/www/system_advanced_firewall.php:381 +msgid "Disable NAT Reflection for 1:1 NAT" +msgstr "1時01分ã€NATã®NATリフレクションをディセーブル" + +#: usr/local/www/system_advanced_firewall.php:384 +msgid "" +"Disables the automatic creation of additional NAT 1:1 mappings for access to " +"1:1 mappings of your external IP addresses from within your internal " +"networks. Note: Reflection for 1:1 NAT might not fully work in certain " +"complex routing scenarios." +msgstr "内部内ã‹ã‚‰å¤–部IPアドレスã®1:1ã®ãƒžãƒƒãƒ”ングã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ä»–ã®NAT 1時01分ã®ãƒžãƒƒãƒ”ングを自動的ã«ä½œæˆç„¡åйã«ã€ :複雑ãªãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã®ã‚·ãƒŠãƒªã‚ªã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æ³¨æ„ã—ã¦ãã ã•ã„。 1時01 NATã®ãƒªãƒ•レクションãŒå®Œå…¨ã«ç‰¹å®šã®ã§ã¯å‹•作ã—ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/system_advanced_firewall.php:391 +#: usr/local/www/system_advanced_firewall.php:448 +#: usr/local/www/system_advanced_firewall.php:510 +#: usr/local/www/system_advanced_firewall.php:511 +#: usr/local/www/system_advanced_firewall.php:511 +msgid "" +"Automatically create outbound NAT rules which assist inbound NAT rules that " +"direct traffic back out to the same subnet it originated from." +msgstr "直接的ãªãƒˆãƒ©ãƒ•ィックãŒåŒã˜ã‚µãƒ–ãƒãƒƒãƒˆã«å¤–ã«ãれãŒç”±æ¥ã™ã‚‹ã€Œè‡ªå‹•çš„ã«ç€ä¿¡NATルールを支æ´ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NATルールを作æˆã™ã‚‹ã€ 。" + +#: usr/local/www/system_advanced_firewall.php:393 +msgid "" +"Currently only applies to 1:1 NAT rules. Required for full functionality of " +"NAT Reflection for 1:1 NAT." +msgstr "「ç¾åœ¨ã¯ã€ 1時01 NATルールã«é©ç”¨ã•れã¾ã™ã€‚ã®ã™ã¹ã¦ã®æ©Ÿèƒ½ã«å¿…è¦ãªã€Œ1:1 NATã®NATリフレクション。" + +#: usr/local/www/system_advanced_firewall.php:397 +#: usr/local/www/system_advanced_firewall.php:456 +#: usr/local/www/system_advanced_firewall.php:518 +#: usr/local/www/system_advanced_firewall.php:519 +#: usr/local/www/system_advanced_firewall.php:519 +msgid "TFTP Proxy" +msgstr "TFTPプロキシ" + +#: usr/local/www/system_advanced_firewall.php:407 +#: usr/local/www/system_advanced_firewall.php:466 +#: usr/local/www/system_advanced_firewall.php:528 +#: usr/local/www/system_advanced_firewall.php:529 +#: usr/local/www/system_advanced_firewall.php:529 +msgid "Choose the interfaces where you want TFTP proxy helper to be enabled." +msgstr "ã‚ãªãŸã¯ã€TFTPプロキシヘルパーを有効ã«ã—ãŸã„ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:179 +#: usr/local/www/system_advanced_misc.php:199 +#: usr/local/www/system_advanced_misc.php:218 +#: usr/local/www/system_advanced_misc.php:222 +#: usr/local/www/system_advanced_misc.php:254 +#: usr/local/www/system_advanced_misc.php:254 +msgid "Advanced: Miscellaneous" +msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šãã®ä»–" + +#: usr/local/www/system_advanced_misc.php:229 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_misc.php:274 +#: usr/local/www/system_advanced_misc.php:278 +#: usr/local/www/system_advanced_misc.php:325 +#: usr/local/www/system_advanced_misc.php:325 +msgid "Proxy support" +msgstr "プロキシã®ã‚µãƒãƒ¼ãƒˆ" + +#: usr/local/www/system_advanced_misc.php:232 +#: usr/local/www/system_advanced_misc.php:258 +#: usr/local/www/system_advanced_misc.php:277 +#: usr/local/www/system_advanced_misc.php:281 +#: usr/local/www/system_advanced_misc.php:328 +#: usr/local/www/system_advanced_misc.php:328 +msgid "Proxy URL" +msgstr "プロキシã®URL" + +#: usr/local/www/system_advanced_misc.php:236 +#: usr/local/www/system_advanced_misc.php:262 +#: usr/local/www/system_advanced_misc.php:281 +#: usr/local/www/system_advanced_misc.php:285 +#: usr/local/www/system_advanced_misc.php:332 +#: usr/local/www/system_advanced_misc.php:332 +#, php-format +msgid "Proxy url for allowing %s to use this proxy to connect outside." +msgstr "%s外接続ã™ã‚‹ã«ã¯ã€ã“ã®ãƒ—ロキシを使用ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã®ãƒ—ロキシURL 。" + +#: usr/local/www/system_advanced_misc.php:240 +#: usr/local/www/system_advanced_misc.php:266 +#: usr/local/www/system_advanced_misc.php:285 +#: usr/local/www/system_advanced_misc.php:289 +#: usr/local/www/system_advanced_misc.php:336 +#: usr/local/www/system_advanced_misc.php:336 +msgid "Proxy Port" +msgstr "プロキシãƒãƒ¼ãƒˆ" + +#: usr/local/www/system_advanced_misc.php:244 +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_advanced_misc.php:289 +#: usr/local/www/system_advanced_misc.php:293 +#: usr/local/www/system_advanced_misc.php:340 +#: usr/local/www/system_advanced_misc.php:340 +#, php-format +msgid "" +"Proxy port to use when %s connects to the proxy URL configured above. " +"Default is 8080 for http protocol or 443 for ssl." +msgstr "デフォルト "%sプロキシURLã«ä¸Šè¨˜ã®ã‚ˆã†ã«æ§‹æˆã•れã¦ã„ã¾ã™ã€‚接続ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹ãƒ—ロキシãƒãƒ¼ãƒˆã¯ã€ 「SSLã®HTTPプロトコルã¾ãŸã¯443ã®ãŸã‚ã«8080ã§ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:248 +#: usr/local/www/system_advanced_misc.php:274 +#: usr/local/www/system_advanced_misc.php:293 +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:344 +#: usr/local/www/system_advanced_misc.php:344 +msgid "Proxy Username" +msgstr "[プロキシユーザーå" + +#: usr/local/www/system_advanced_misc.php:252 +#: usr/local/www/system_advanced_misc.php:278 +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:301 +#: usr/local/www/system_advanced_misc.php:348 +#: usr/local/www/system_advanced_misc.php:348 +#, php-format +msgid "Proxy username for allowing %s to use this proxy to connect outside" +msgstr "%s外接続ã™ã‚‹ã«ã¯ã€ã“ã®ãƒ—ロキシを使用ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã®ãƒ—ロキシã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å" + +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_misc.php:282 +#: usr/local/www/system_advanced_misc.php:301 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_misc.php:352 +#: usr/local/www/system_advanced_misc.php:352 +msgid "Proxy Pass" +msgstr "プロキシパス" + +#: usr/local/www/system_advanced_misc.php:260 +#: usr/local/www/system_advanced_misc.php:286 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_misc.php:309 +#: usr/local/www/system_advanced_misc.php:356 +#: usr/local/www/system_advanced_misc.php:356 +#, php-format +msgid "Proxy password for allowing %s to use this proxy to connect outside" +msgstr "%s外接続ã™ã‚‹ã«ã¯ã€ã“ã®ãƒ—ロキシを使用ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã®ãƒ—ロキシパスワード" + +#: usr/local/www/system_advanced_misc.php:264 +#: usr/local/www/system_advanced_misc.php:267 +#: usr/local/www/system_advanced_misc.php:282 +#: usr/local/www/system_advanced_misc.php:290 +#: usr/local/www/system_advanced_misc.php:293 +#: usr/local/www/system_advanced_misc.php:314 +#: usr/local/www/system_advanced_misc.php:309 +#: usr/local/www/system_advanced_misc.php:312 +#: usr/local/www/system_advanced_misc.php:333 +#: usr/local/www/system_advanced_misc.php:313 +#: usr/local/www/system_advanced_misc.php:316 +#: usr/local/www/system_advanced_misc.php:337 +#: usr/local/www/system_advanced_misc.php:360 +#: usr/local/www/system_advanced_misc.php:363 +#: usr/local/www/system_advanced_misc.php:384 +#: usr/local/www/system_advanced_misc.php:360 +#: usr/local/www/system_advanced_misc.php:363 +#: usr/local/www/system_advanced_misc.php:384 +msgid "Load Balancing" +msgstr "ロードãƒãƒ©ãƒ³ã‚·ãƒ³ã‚°" + +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_advanced_misc.php:296 +#: usr/local/www/system_advanced_misc.php:315 +#: usr/local/www/system_advanced_misc.php:319 +#: usr/local/www/system_advanced_misc.php:366 +#: usr/local/www/system_advanced_misc.php:366 +msgid "Use sticky connections" +msgstr "スティッキー接続を使用" + +#: usr/local/www/system_advanced_misc.php:271 +msgid "" +"Successive connections will be redirected to the servers in a round-robin " +"manner with connections from the same source being sent to the same web " +"server. This 'sticky connection' will exist as long as there are states that " +"refer to this connection. Once the states expire, so will the sticky " +"connection. Further connections from that host will be redirected to the " +"next web server in the round robin." +msgstr "åŒã˜Webã«é€ä¿¡ã•れã€åŒã˜é€ä¿¡å…ƒã‹ã‚‰ã®æŽ¥ç¶šã‚’æŒã¤æ–¹æ³•「連続接続ã¯ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ンã®ã‚µãƒ¼ãƒã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•れã€ã€Œã“ã®æŽ¥ç¶šã‚’å‚ç…§ã—ã¦ã€ã€Œã‚µãƒ¼ãƒã€‚ã“ã®ã€Œã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ¼æŽ¥ç¶šã¯ã€ 「é™ã‚Šã¨ã„ã†çŠ¶æ…‹ãŒã‚るよã†ã«å­˜åœ¨ã™ã‚‹ã“ã¨ã«ãªã‚‹ã€ ã€‚çŠ¶æ…‹ã¯æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¨ã€ãã®ã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ãƒ³ã®æ¬¡ã®Webサーãƒã€æŽ¥ç¶šã€‚ãã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®ã•らãªã‚‹æŽ¥ç¶šã¯ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•れã¾ã™ã€ã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:285 +#: usr/local/www/system_advanced_misc.php:317 +#: usr/local/www/system_advanced_misc.php:336 +#: usr/local/www/system_advanced_misc.php:340 +#: usr/local/www/system_advanced_misc.php:387 +#: usr/local/www/system_advanced_misc.php:387 +msgid "Allow default gateway switching" +msgstr "デフォルトゲートウェイã®åˆ‡ã‚Šæ›¿ãˆã‚’許å¯ã™ã‚‹" + +#: usr/local/www/system_advanced_misc.php:286 +#: usr/local/www/system_advanced_misc.php:318 +#: usr/local/www/system_advanced_misc.php:337 +#: usr/local/www/system_advanced_misc.php:341 +#: usr/local/www/system_advanced_misc.php:388 +#: usr/local/www/system_advanced_misc.php:388 +msgid "" +"If the link where the default gateway resides fails switch the default " +"gateway to another available one." +msgstr "別ã®åˆ©ç”¨å¯èƒ½ãª1ã¸ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã€ ã€ãƒ‡ãƒ•ォルトゲートウェイãŒå­˜åœ¨ã™ã‚‹ãƒªãƒ³ã‚¯ã¯ã€ãƒ‡ãƒ•ォルトを切り替ãˆã‚‹ã«å¤±æ•—ã—ãŸå ´åˆã€ 。" + +#: usr/local/www/system_advanced_misc.php:294 +#: usr/local/www/system_advanced_misc.php:326 +#: usr/local/www/system_advanced_misc.php:345 +#: usr/local/www/system_advanced_misc.php:349 +#: usr/local/www/system_advanced_misc.php:396 +#: usr/local/www/system_advanced_misc.php:396 +msgid "Power savings" +msgstr "電力ã®ç¯€ç´„" + +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:329 +#: usr/local/www/system_advanced_misc.php:348 +#: usr/local/www/system_advanced_misc.php:352 +#: usr/local/www/system_advanced_misc.php:399 +#: usr/local/www/system_advanced_misc.php:399 +msgid "PowerD" +msgstr "パワード" + +#: usr/local/www/system_advanced_misc.php:300 +#: usr/local/www/system_advanced_misc.php:332 +#: usr/local/www/system_advanced_misc.php:351 +#: usr/local/www/system_advanced_misc.php:355 +#: usr/local/www/system_advanced_misc.php:402 +#: usr/local/www/system_advanced_misc.php:402 +msgid "Use PowerD" +msgstr "パワードを使ã†" + +#: usr/local/www/system_advanced_misc.php:302 +msgid "" +"The powerd utility monitors the system state and sets various power control " +"options accordingly. It offers three modes (maximum, minimum, and adaptive) " +"that can be individually selected while on AC power or batteries. The modes " +"maximum, minimum, and adaptive may be abbreviated max, min, adp. Maximum " +"mode chooses the highest performance values. Minimum mode selects the " +"lowest performance values to get the most power savings. Adaptive mode " +"attempts to strike a balance by degrading performance when the system " +"appears idle and increasing it when the system is busy. It offers a good " +"balance between a small performance loss for greatly " +msgstr "「パワードユーティリティã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã®çŠ¶æ…‹ã‚’ç›£è¦–ã—ã€æ§˜ã€…ãªé›»åŠ›åˆ¶å¾¡ã«è¨­å®šã€ã¯ã€ãれã«å¿œã˜ã¦ã‚ªãƒ—ションを。ãれã¯ä¸‰ã¤ã®ãƒ¢ãƒ¼ãƒ‰ï¼ˆæœ€å¤§å€¤ã€æœ€å°å€¤ã€ãŠã‚ˆã³é©å¿œï¼‰æä¾›ã—ã¦ã„ã¾ã™ã€å€‹åˆ¥ã®ACé›»æºã¾ãŸã¯é›»æ± ã§ã„ã‚‹é–“ã«é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒ¢ãƒ¼ãƒ‰ã€ ã€æœ€å¤§å€¤ã€æœ€å°å€¤ã€ãŠã‚ˆã³é©å¿œãŒæœ€å¤§ã€æœ€å°ã€ ADPã‚’çœç•¥ã™ã‚‹ã“ã¨ãŒã§ãる。最大ã€ãƒ¢ãƒ¼ãƒ‰ã¯ã€æœ€é«˜ã®ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹å€¤ã‚’é¸æŠžã—ã¾ã™ã€‚最å°ãƒ¢ãƒ¼ãƒ‰ãŒé¸æŠžã•れã€ã€Œæœ€ã‚‚節電効果を得るãŸã‚ã«ã€æœ€ã‚‚低ã„パフォーマンス値を。é©å¿œãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ã‚¢ã‚¤ãƒ‰ãƒ«è¡¨ç¤ºã•れã€ã‚·ã‚¹ãƒ†ãƒ ãŒãƒ“ジー状態ã®ã¨ãã«ãれを増やã™ã€ã‚·ã‚¹ãƒ†ãƒ ãŒã¨ãã®ãƒ‘フォーマンスを低下ã•ã›ã‚‹ã“ã¨ã§ãƒãƒ©ãƒ³ã‚¹ã‚’å–ã‚‹ã—よã†ã¨ã—ã¾ã™ã€ 。ãれãŒå¤§å¹…用ã®å°ã•ãªãƒ‘フォーマンスã®ä½Žä¸‹ã¨ã®é–“ã«è‰¯å¥½ãªã€Œãƒãƒ©ãƒ³ã‚¹ã‚’æä¾›ã—ã¦ã„ã¾ã™" + +#: usr/local/www/system_advanced_misc.php:318 +#: usr/local/www/system_advanced_misc.php:361 +msgid "glxsb Crypto Acceleration" +msgstr "glxsbæš—å·åŒ–アクセラレーション" + +#: usr/local/www/system_advanced_misc.php:321 +#: usr/local/www/system_advanced_misc.php:364 +msgid "glxsb" +msgstr "glxsb" + +#: usr/local/www/system_advanced_misc.php:324 +#: usr/local/www/system_advanced_misc.php:367 +msgid "Use glxsb" +msgstr "glxsbを使ã†" + +#: usr/local/www/system_advanced_misc.php:326 +#: usr/local/www/system_advanced_misc.php:369 +msgid "" +"The AMD Geode LX Security Block will accelerate some cryptographic functions " +"on systems which have the chip. Do not enable this option if you have a Hifn " +"cryptographic acceleration card, as this will take precedence and the Hifn " +"card will not be used. Acceleration should be automatic for IPsec when using " +"Rijndael (AES). OpenVPN should be set for AES-128-CBC." +msgstr "ãƒãƒƒãƒ—ã‚’æŒã¤ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ã€ŒAMDã®Geode LXセキュリティブロックã¯ã€ã„ãã¤ã‹ã®æš—å·æ©Ÿèƒ½ã‚’加速ã—ã¦ã„ãã¾ã™ã€ 。ã‚ãªãŸã¯Hifnã®ã‚ã‚‹å ´åˆã¯ã€ã€Œæš—å·åŒ–アクセラレータカードをã€ã“れãŒå„ªå…ˆã•れã¾ã™ã—〠Hifnã®ã‚ˆã†ã«ã€ 「カードãŒä½¿ç”¨ã•れãªã„å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションを有効ã«ã—ãªã„ã§ãã ã•ã„。 「ラインダール( AES)を使用ã—ãŸå ´åˆã€åŠ é€ŸãŒIPsecã®è‡ªå‹•ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ OpenVPNã®ã¯ã€AES - 128 -CBCã®ãŸã‚ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:332 +#: usr/local/www/system_advanced_misc.php:375 +msgid "" +"If you do not have a glxsb chip in your system, this option will have no " +"effect. To unload the module, uncheck this option and then reboot." +msgstr "効果ã€ã‚’使用ã—ã¦ã„るシステムã§glxsbãƒãƒƒãƒ—ã‚’æŒã£ã¦ã„ãªã„å ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ã‚りã¾ã™ã€ 。モジュールをアンロードã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションをオフã«ã—ã¦ã‹ã‚‰å†èµ·å‹•ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:340 +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:432 +#: usr/local/www/system_advanced_misc.php:444 +#: usr/local/www/system_advanced_misc.php:491 +#: usr/local/www/system_advanced_misc.php:491 +msgid "IP Security" +msgstr "IPセキュリティ" + +#: usr/local/www/system_advanced_misc.php:343 +#: usr/local/www/system_advanced_misc.php:386 +#: usr/local/www/system_advanced_misc.php:435 +#: usr/local/www/system_advanced_misc.php:447 +#: usr/local/www/system_advanced_misc.php:494 +#: usr/local/www/system_advanced_misc.php:494 +msgid "Security Associations" +msgstr "セキュリティアソシエーション" + +#: usr/local/www/system_advanced_misc.php:346 +#: usr/local/www/system_advanced_misc.php:389 +#: usr/local/www/system_advanced_misc.php:438 +#: usr/local/www/system_advanced_misc.php:450 +#: usr/local/www/system_advanced_misc.php:497 +#: usr/local/www/system_advanced_misc.php:497 +msgid "Prefer older IPsec SAs" +msgstr "å¤ã„IPsec SAã®ã‚’好む" + +#: usr/local/www/system_advanced_misc.php:348 +#: usr/local/www/system_advanced_misc.php:391 +#: usr/local/www/system_advanced_misc.php:440 +#: usr/local/www/system_advanced_misc.php:452 +#: usr/local/www/system_advanced_misc.php:499 +#: usr/local/www/system_advanced_misc.php:499 +msgid "" +"By default, if several SAs match, the newest one is preferred if it's at " +"least 30 seconds old. Select this option to always prefer old SAs over new " +"ones." +msgstr "30秒以上å¤ã„ "ãれã¯ATã®å ´åˆã€ãƒ‡ãƒ•ォルトã§ã¯ã€ã„ãã¤ã‹ã®SAãŒä¸€è‡´ã™ã‚‹å ´åˆã€æœ€æ–°ã®1ãŒå¥½ã¾ã—ã„ã€ ã€‚å¸¸ã«æ–°ã—ã„「もã®ã‚ˆã‚Šå¤ã„SAを好む場åˆã¯ã€ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:354 +#: usr/local/www/system_advanced_misc.php:397 +#: usr/local/www/system_advanced_misc.php:446 +#: usr/local/www/system_advanced_misc.php:458 +#: usr/local/www/system_advanced_misc.php:505 +#: usr/local/www/system_advanced_misc.php:505 +msgid "IPsec Debug" +msgstr "IPsecã®ãƒ‡ãƒãƒƒã‚°" + +#: usr/local/www/system_advanced_misc.php:357 +#: usr/local/www/system_advanced_misc.php:400 +#: usr/local/www/system_advanced_misc.php:449 +#: usr/local/www/system_advanced_misc.php:461 +#: usr/local/www/system_advanced_misc.php:508 +#: usr/local/www/system_advanced_misc.php:508 +msgid "Start racoon in debug mode" +msgstr "デãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã§ã‚¢ãƒ©ã‚¤ã‚°ãƒžã‚’èµ·å‹•ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:359 +#: usr/local/www/system_advanced_misc.php:402 +#: usr/local/www/system_advanced_misc.php:451 +#: usr/local/www/system_advanced_misc.php:463 +#: usr/local/www/system_advanced_misc.php:510 +#: usr/local/www/system_advanced_misc.php:510 +msgid "" +"Launches racoon in debug mode so that more verbose logs will be generated to " +"aid in troubleshooting." +msgstr "トラブルシューティングを支æ´"より冗長ãªãƒ­ã‚°ãŒç”Ÿæˆã•れãŸã•れるよã†ã«ã€ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã§ã‚¢ãƒ©ã‚¤ã‚°ãƒžã‚’èµ·å‹•ã—ã¾ã™ã€ 。" + +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:404 +#: usr/local/www/system_advanced_misc.php:453 +#: usr/local/www/system_advanced_misc.php:465 +#: usr/local/www/system_advanced_misc.php:512 +#: usr/local/www/system_advanced_misc.php:512 +msgid "NOTE: Changing this setting will restart racoon." +msgstr "注:ã“ã®è¨­å®šã‚’変更ã™ã‚‹ã¨ã€ã‚¢ãƒ©ã‚¤ã‚°ãƒžã‚’å†èµ·å‹•ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:365 +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:457 +#: usr/local/www/system_advanced_misc.php:469 +#: usr/local/www/system_advanced_misc.php:516 +#: usr/local/www/system_advanced_misc.php:516 +msgid "Maximum MSS" +msgstr "最大MSS" + +#: usr/local/www/system_advanced_misc.php:368 +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:460 +#: usr/local/www/system_advanced_misc.php:472 +#: usr/local/www/system_advanced_misc.php:519 +#: usr/local/www/system_advanced_misc.php:519 +msgid "Enable MSS clamping on VPN traffic" +msgstr "MSSã¯ã€VPNトラフィックã«ã‚¯ãƒ©ãƒ³ãƒ—å¯èƒ½ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_misc.php:372 +#: usr/local/www/system_advanced_misc.php:415 +#: usr/local/www/system_advanced_misc.php:464 +#: usr/local/www/system_advanced_misc.php:476 +#: usr/local/www/system_advanced_misc.php:523 +#: usr/local/www/system_advanced_misc.php:523 +msgid "" +"Enable MSS clamping on TCP flows over VPN. This helps overcome problems with " +"PMTUD on IPsec VPN links. If left blank, the default value is 1400 bytes. " +msgstr "IPsec VPNã®ãƒªãƒ³ã‚¯ä¸Šã§PMTUD 「VPN上をæµã‚Œã‚‹TCP上ã§ã‚¯ãƒ©ãƒ³ãƒ—ã™ã‚‹MSSを有効ã«ã—ã¾ã™ã€‚ã“れã¯ã®å•題を克æœã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€ 。空白ã®å ´åˆã€ãƒ‡ãƒ•ォルト値ã¯1400ãƒã‚¤ãƒˆã§ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:426 +#: usr/local/www/system_advanced_misc.php:475 +#: usr/local/www/system_advanced_misc.php:487 +#: usr/local/www/system_advanced_misc.php:534 +#: usr/local/www/system_advanced_misc.php:534 +msgid "Schedule States" +msgstr "スケジュール状態" + +#: usr/local/www/system_advanced_misc.php:387 +#: usr/local/www/system_advanced_misc.php:430 +#: usr/local/www/system_advanced_misc.php:479 +#: usr/local/www/system_advanced_misc.php:491 +#: usr/local/www/system_advanced_misc.php:538 +#: usr/local/www/system_advanced_misc.php:538 +msgid "" +"By default schedules clear the states of existing connections when the " +"expiration time has come. This option overrides that behavior by not " +"clearing states for existing connections." +msgstr "有効期é™ãŒåˆ°æ¥ã—ãŸã€ã¨ãã«ã€ãƒ‡ãƒ•ォルトã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯æ—¢å­˜ã®æŽ¥ç¶šã®çŠ¶æ…‹ã‚’ã‚ªãƒ•ã«ã—ã¾ã™ã€ 。ã“ã®ã‚ªãƒ—ションã§ã¯ã€ ã€Œæ—¢å­˜ã®æŽ¥ç¶šã®ãŸã‚ã®çŠ¶æ…‹ã‚’ã‚¯ãƒªã‚¢ã—ã¦ã„ãªã„ã“ã¨ã§ã€ãã®å‹•作を無効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:395 +#: usr/local/www/system_advanced_misc.php:438 +#: usr/local/www/system_advanced_misc.php:487 +#: usr/local/www/system_advanced_misc.php:499 +#: usr/local/www/system_advanced_misc.php:546 +#: usr/local/www/system_advanced_misc.php:546 +msgid "Gateway Monitoring" +msgstr "ゲートウェイã®ç›£è¦–" + +#: usr/local/www/system_advanced_misc.php:402 +#: usr/local/www/system_advanced_misc.php:445 +#: usr/local/www/system_advanced_misc.php:494 +#: usr/local/www/system_advanced_misc.php:506 +#: usr/local/www/system_advanced_misc.php:553 +#: usr/local/www/system_advanced_misc.php:553 +msgid "" +"By default the monitoring process will flush states for a gateway that goes " +"down. This option overrides that behavior by not clearing states for " +"existing connections." +msgstr "ダウン "デフォルトã§ã¯ã€ç›£è¦–プロセスãŒè¡Œãゲートウェイã®çŠ¶æ…‹ã‚’ãƒ•ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã™ã€ 。ã“ã®ã‚ªãƒ—ションã§ã¯ã€æ—¢å­˜ã®æŽ¥ç¶šã€ã®çŠ¶æ…‹ã‚’ã‚¯ãƒªã‚¢ã—ã¦ã„ãªã„ã“ã¨ã«ã‚ˆã£ã¦ã€ãã®å‹•作を無効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:454 +#: usr/local/www/system_advanced_misc.php:503 +#: usr/local/www/system_advanced_misc.php:515 +#: usr/local/www/system_advanced_misc.php:636 +#: usr/local/www/system_advanced_misc.php:636 +msgid "Hardware Settings" +msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢è¨­å®š" + +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:457 +#: usr/local/www/system_advanced_misc.php:506 +#: usr/local/www/system_advanced_misc.php:518 +#: usr/local/www/system_advanced_misc.php:639 +#: usr/local/www/system_advanced_misc.php:639 +msgid "Hard disk standby time " +msgstr "ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯å¾…機時間" + +#: usr/local/www/system_advanced_misc.php:421 +#: usr/local/www/system_advanced_misc.php:464 +#: usr/local/www/system_advanced_misc.php:513 +#: usr/local/www/system_advanced_misc.php:525 +#: usr/local/www/system_advanced_misc.php:646 +#: usr/local/www/system_advanced_misc.php:646 +msgid "Always on" +msgstr "常ã«ã‚ªãƒ³" + +#: usr/local/www/system_advanced_misc.php:430 +#: usr/local/www/system_advanced_misc.php:473 +#: usr/local/www/system_advanced_misc.php:522 +#: usr/local/www/system_advanced_misc.php:534 +#: usr/local/www/system_advanced_misc.php:655 +#: usr/local/www/system_advanced_misc.php:655 +msgid "" +"Puts the hard disk into standby mode when the selected amount of time after " +"the last access has elapsed." +msgstr "最終アクセス経éŽã—ãŸã€å¾Œã®æ™‚é–“ã®é¸æŠžã•れãŸé‡ã¯ã€ã‚¹ã‚¿ãƒ³ãƒã‚¤ãƒ¢ãƒ¼ãƒ‰ã«ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã‚’ç½®ãã¾ã™ã€ 。" + +#: usr/local/www/system_advanced_misc.php:431 +#: usr/local/www/system_advanced_misc.php:474 +#: usr/local/www/system_advanced_misc.php:523 +#: usr/local/www/system_advanced_misc.php:535 +#: usr/local/www/system_advanced_misc.php:656 +#: usr/local/www/system_advanced_misc.php:656 +msgid "Do not set this for CF cards." +msgstr "CFカードã®ãŸã‚ã«ã“れを設定ã—ãªã„ã§ãã ã•ã„。" + +#: usr/local/www/system_advanced_network.php:68 +#: usr/local/www/system_advanced_network.php:68 +msgid "You must specify an IP address to NAT IPv6 packets." +msgstr "ã‚ãªãŸã¯ã€NAT ã€IPv6パケットã«IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_advanced_network.php:148 +#: usr/local/www/system_advanced_network.php:148 +msgid "Advanced: Networking" +msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°" + +#: usr/local/www/system_advanced_network.php:205 +#: usr/local/www/system_advanced_network.php:205 +msgid "IPv6 Options" +msgstr "IPv6ã®ã‚ªãƒ—ション" + +#: usr/local/www/system_advanced_network.php:208 +#: usr/local/www/system_advanced_network.php:211 +#: usr/local/www/system_advanced_network.php:208 +#: usr/local/www/system_advanced_network.php:211 +msgid "Allow IPv6" +msgstr "IPv6ã®ã‚’許容" + +#: usr/local/www/system_advanced_network.php:212 +msgid "All IPv6 will be blocked unless this box is checked." +msgstr "ã“ã®ãƒœãƒƒã‚¯ã‚¹ãŒãƒã‚§ãƒƒã‚¯ã•れã¦ã„ãªã„é™ã‚Šã€ã™ã¹ã¦ã®IPv6ãŒãƒ–ロックã•れã¾ã™ã€‚" + +#: usr/local/www/system_advanced_network.php:217 +#: usr/local/www/system_advanced_network.php:218 +#: usr/local/www/system_advanced_network.php:218 +msgid "IPv6 over IPv4 Tunneling" +msgstr "IPv4ã®ãƒˆãƒ³ãƒãƒªãƒ³ã‚°ä¸Šã®IPv6" + +#: usr/local/www/system_advanced_network.php:220 +#: usr/local/www/system_advanced_network.php:221 +#: usr/local/www/system_advanced_network.php:221 +msgid "Enable IPv4 NAT encapsulation of IPv6 packets" +msgstr "IPv6パケットã®IPv4ã®NATã®ã‚«ãƒ—セル化をå¯èƒ½ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_network.php:221 +#: usr/local/www/system_advanced_network.php:222 +#: usr/local/www/system_advanced_network.php:222 +msgid "" +"This provides an RFC 2893 compatibility mechanism that can be used to " +"tunneling IPv6 packets over IPv4 routing infrastructures. If enabled, don't " +"forget to add a firewall rule to permit IPv6 packets." +msgstr "IPv4ルーティングインフラ上ã§IPv6パケットをトンãƒãƒªãƒ³ã‚°"ã“れã¯ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã€RFC 2893äº’æ›æ€§ã®ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã‚’æä¾›ã—ã¾ã™ã€ 。有効ã«ã™ã‚‹ã¨ã€ 「 IPv6パケットを許å¯ã™ã‚‹ãƒ•ァイアウォールルールを追加ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„。" + +#: usr/local/www/system_advanced_network.php:234 +#: usr/local/www/system_advanced_network.php:235 +#: usr/local/www/system_advanced_network.php:235 +msgid "Network Interfaces" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¤ãƒ³ã‚¿ãƒ•ェース" + +#: usr/local/www/system_advanced_network.php:237 +#: usr/local/www/system_advanced_network.php:238 +#: usr/local/www/system_advanced_network.php:238 +msgid "Device polling" +msgstr "デãƒã‚¤ã‚¹ã®ãƒãƒ¼ãƒªãƒ³ã‚°" + +#: usr/local/www/system_advanced_network.php:240 +#: usr/local/www/system_advanced_network.php:241 +#: usr/local/www/system_advanced_network.php:241 +msgid "Enable device polling" +msgstr "デãƒã‚¤ã‚¹ã®ãƒãƒ¼ãƒªãƒ³ã‚°ã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_network.php:241 +#: usr/local/www/system_advanced_network.php:242 +#: usr/local/www/system_advanced_network.php:242 +#, php-format +msgid "" +"Device polling is a technique that lets the system periodically poll network " +"devices for new data instead of relying on interrupts. This prevents your " +"webConfigurator, SSH, etc. from being inaccessible due to interrupt floods " +"when under extreme load. Generally this is not recommended. Not all NICs " +"support polling; see the %s homepage for a list of supported cards." +msgstr "代ã‚りã«ã€å‰²ã‚Šè¾¼ã¿ã«ä¾å­˜ã™ã‚‹ã®ã§æ–°ã—ã„データã®ãŸã‚ã®ãƒ‡ãƒã‚¤ã‚¹ã¯ã€ã€Œãƒ‡ãƒã‚¤ã‚¹ã®ãƒãƒ¼ãƒªãƒ³ã‚°ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ãŒå®šæœŸçš„ã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’ãƒãƒ¼ãƒªãƒ³ã‚°ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™æŠ€è¡“ã§ã™ã€ 。ã“ã‚Œã¯æ™‚ã«æ¥µç«¯ãªè² è·ã®ä¸‹ã§"洪水を中断ã™ã‚‹ã“ã¨ãŒã‚¢ã‚¯ã‚»ã‚¹ä¸èƒ½ã®ãŸã‚ã§ã‚ã‚‹ã“ã¨ã‹ã‚‰webConfigurator 〠SSHãªã©ã€Œã‚ãªãŸã®ã‚’防ãã“ã¨ãŒã§ãã¾ã™ã€‚一般ã«ã€ã“れã¯ãŠå‹§ã‚ã§ãã¾ã›ã‚“。ã™ã¹ã¦ã®NICã¯ã€Œãƒãƒ¼ãƒªãƒ³ã‚°ã‚’サãƒãƒ¼ãƒˆã—ã€ã‚µãƒãƒ¼ãƒˆã•れã¦ã„るカードã®ãƒªã‚¹ãƒˆã«ã¤ã„ã¦ã¯ã€ %sホームページをå‚ç…§ã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_advanced_network.php:245 +#: usr/local/www/system_advanced_network.php:246 +#: usr/local/www/system_advanced_network.php:246 +msgid "Hardware Checksum Offloading" +msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚ªãƒ•ロード" + +#: usr/local/www/system_advanced_network.php:248 +#: usr/local/www/system_advanced_network.php:249 +#: usr/local/www/system_advanced_network.php:249 +msgid "Disable hardware checksum offload" +msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚ªãƒ•ロードを無効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_network.php:249 +#: usr/local/www/system_advanced_network.php:250 +#: usr/local/www/system_advanced_network.php:250 +msgid "" +"Checking this option will disable hardware checksum offloading. Checksum " +"offloading is broken in some hardware, particularly some Realtek cards. " +"Rarely, drivers may have problems with checksum offloading and some specific " +"NICs." +msgstr ""ã“ã®ã‚ªãƒ—ションをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚ªãƒ•ロードを無効ã«ã—ã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ã‚µãƒ "オフロードã¯ã€ä¸€éƒ¨ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã€ç‰¹ã«ã„ãã¤ã‹ã®Realtekã®ã‚«ãƒ¼ãƒ‰ã«åˆ†å‰²ã•れã¾ã™ã€‚ NICã¯ã€Œã¾ã‚Œã«ã€ãƒ‰ãƒ©ã‚¤ãƒãŒãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚ªãƒ•ロードã¨ã€ã„ãã¤ã‹ã®ç‰¹å®šã®å•題を有ã—ã¦ã„ãªãã¦ã‚‚よã„〠。" + +#: usr/local/www/system_advanced_network.php:253 +#: usr/local/www/system_advanced_network.php:254 +#: usr/local/www/system_advanced_network.php:254 +msgid "Hardware TCP Segmentation Offloading" +msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®TCPセグメンテーションオフロード" + +#: usr/local/www/system_advanced_network.php:256 +#: usr/local/www/system_advanced_network.php:257 +#: usr/local/www/system_advanced_network.php:257 +msgid "Disable hardware TCP segmentation offload" +msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã€TCPセグメンテーションオフロードを無効ã«" + +#: usr/local/www/system_advanced_network.php:257 +#: usr/local/www/system_advanced_network.php:258 +#: usr/local/www/system_advanced_network.php:258 +msgid "" +"Checking this option will disable hardware TCP segmentation offloading (TSO, " +"TSO4, TSO6). This offloading is broken in some hardware drivers, and may " +"impact performance with some specific NICs." +msgstr "〠( TSO4 〠TSO6ã“ã®ã‚ªãƒ—ションをオンã«ã™ã‚‹ã¨ã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢TCPセグメンテーションオフロードTSOを)無効ã«ãªã‚Šã¾ã™ã€ 。ã“ã®ã‚ªãƒ•ロードã¯ã€ä¸€éƒ¨ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ãƒ‰ãƒ©ã‚¤ãƒã«åˆ†å‰²ã•れ〠「ã„ãã¤ã‹ã®ç‰¹å®šã®NICã®ãƒ‘フォーマンスã«å½±éŸ¿ã‚’与ãˆã‚‹å¯èƒ½æ€§ãŒã‚る。" + +#: usr/local/www/system_advanced_network.php:261 +#: usr/local/www/system_advanced_network.php:262 +#: usr/local/www/system_advanced_network.php:262 +msgid "Hardware Large Receive Offloading" +msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢å¤§ããªã‚ªãƒ•ロードをå—ä¿¡" + +#: usr/local/www/system_advanced_network.php:264 +#: usr/local/www/system_advanced_network.php:265 +#: usr/local/www/system_advanced_network.php:265 +msgid "Disable hardware large receive offload" +msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã«å¤§ããªå—信オフロードを無効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_network.php:265 +#: usr/local/www/system_advanced_network.php:266 +#: usr/local/www/system_advanced_network.php:266 +msgid "" +"Checking this option will disable hardware large receive offloading (LRO). " +"This offloading is broken in some hardware drivers, and may impact " +"performance with some specific NICs." +msgstr ""ã“ã®ã‚ªãƒ—ションをオンã«ã™ã‚‹ã¨ã€ç„¡åйã«ãªã‚Šã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®å¤§ã€‚ ( LRO )ã®ã‚ªãƒ•ロードå—ä¿¡ã€ã“ã®ã‚ªãƒ•ロードã¯ã€ä¸€éƒ¨ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ãƒ‰ãƒ©ã‚¤ãƒã«åˆ†å‰²ã•れã€ã„ãã¤ã‹ã®ç‰¹å®šã®NICを「パフォーマンスã«å½±éŸ¿ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_advanced_network.php:269 +#: usr/local/www/system_advanced_network.php:270 +#: usr/local/www/system_advanced_network.php:270 +msgid "ARP Handling" +msgstr "ARPã®å–り扱ã„" + +#: usr/local/www/system_advanced_network.php:272 +#: usr/local/www/system_advanced_network.php:273 +#: usr/local/www/system_advanced_network.php:273 +msgid "Suppress ARP messages" +msgstr "ARPメッセージを抑制ã™ã‚‹" + +#: usr/local/www/system_advanced_network.php:273 +#: usr/local/www/system_advanced_network.php:274 +#: usr/local/www/system_advanced_network.php:274 +msgid "" +"This option will suppress ARP log messages when multiple interfaces reside " +"on the same broadcast domain" +msgstr "åŒã˜ãƒ–ロードキャストドメインã«ã€Œè¤‡æ•°ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスãŒå­˜åœ¨ã™ã‚‹å ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ã€ARP ã€ãƒ­ã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れãªããªã‚Šã¾ã™ã€" + +#: usr/local/www/system_advanced_notifications.php:118 +#: usr/local/www/system_advanced_notifications.php:124 +#: usr/local/www/system_advanced_notifications.php:127 +#: usr/local/www/system_advanced_notifications.php:133 +#: usr/local/www/system_advanced_notifications.php:127 +#: usr/local/www/system_advanced_notifications.php:133 +#, php-format +msgid "This is a test message from %s. It is safe to ignore this message." +msgstr "ã“れã¯%s.ã‹ã‚‰ã®ãƒ†ã‚¹ãƒˆÂ·ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã™ãれã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ã‚‚安全ã§ã™ã€‚" + +#: usr/local/www/system_advanced_notifications.php:131 +#: usr/local/www/system_advanced_notifications.php:140 +#: usr/local/www/system_advanced_notifications.php:140 +msgid "Advanced: Notifications" +msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šé€šçŸ¥" + +#: usr/local/www/system_advanced_notifications.php:168 +#: usr/local/www/system_advanced_notifications.php:177 +#: usr/local/www/system_advanced_notifications.php:177 +msgid "Growl" +msgstr "ã†ãªã‚Šå£°" + +#: usr/local/www/system_advanced_notifications.php:171 +#: usr/local/www/system_advanced_notifications.php:180 +#: usr/local/www/system_advanced_notifications.php:180 +msgid "Registration Name" +msgstr "登録å" + +#: usr/local/www/system_advanced_notifications.php:174 +#: usr/local/www/system_advanced_notifications.php:183 +#: usr/local/www/system_advanced_notifications.php:183 +msgid "Enter the name to register with the Growl server (default: PHP-Growl)." +msgstr "Growlã®ã‚µãƒ¼ãƒï¼ˆ : PHP- Growlã®ãƒ‡ãƒ•ォルト)ã«ç™»éŒ²ã™ã‚‹åå‰ã‚’入力ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_notifications.php:178 +#: usr/local/www/system_advanced_notifications.php:187 +#: usr/local/www/system_advanced_notifications.php:187 +msgid "Notification Name" +msgstr "通知å" + +#: usr/local/www/system_advanced_notifications.php:181 +#: usr/local/www/system_advanced_notifications.php:190 +#: usr/local/www/system_advanced_notifications.php:190 +#, php-format +msgid "Enter a name for the Growl notifications (default: %s growl alert)." +msgstr "Growl通知( : %sã†ãªã‚Šå£°ã‚¢ãƒ©ãƒ¼ãƒˆãƒ‡ãƒ•ォルト)ã®åå‰ã‚’入力ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_notifications.php:188 +#: usr/local/www/system_advanced_notifications.php:197 +#: usr/local/www/system_advanced_notifications.php:197 +msgid "" +"This is the IP address that you would like to send growl notifications to." +msgstr ""ã“れã¯ã‚ãªãŸãŒã«Growl通知をé€ä¿¡ã—ãŸã„IPアドレスã§ã™ã€‚" + +#: usr/local/www/system_advanced_notifications.php:195 +#: usr/local/www/system_advanced_notifications.php:204 +#: usr/local/www/system_advanced_notifications.php:204 +msgid "Enter the password of the remote growl notification device." +msgstr "リモートã†ãªã‚Šå£°ã®é€šçŸ¥ãƒ‡ãƒã‚¤ã‚¹ã®ãƒ‘スワードを入力ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_notifications.php:203 +#: usr/local/www/system_advanced_notifications.php:212 +#: usr/local/www/system_advanced_notifications.php:212 +msgid "SMTP E-Mail" +msgstr "SMTPé›»å­ãƒ¡ãƒ¼ãƒ«" + +#: usr/local/www/system_advanced_notifications.php:206 +#: usr/local/www/system_advanced_notifications.php:215 +#: usr/local/www/system_advanced_notifications.php:215 +msgid "E-Mail server" +msgstr "é›»å­ãƒ¡ãƒ¼ãƒ«ã‚µãƒ¼ãƒãƒ¼" + +#: usr/local/www/system_advanced_notifications.php:209 +#: usr/local/www/system_advanced_notifications.php:218 +#: usr/local/www/system_advanced_notifications.php:218 +msgid "" +"This is the FQDN or IP address of the SMTP E-Mail server to which " +"notifications will be sent." +msgstr "通知ãŒé€ä¿¡ã•れã¾ã™"ã“れã¯ã™ã‚‹SMTPé›»å­ãƒ¡ãƒ¼ãƒ«ã‚µãƒ¼ãƒã®FQDNã¾ãŸã¯IPアドレスã§ã™ã€ 。" + +#: usr/local/www/system_advanced_notifications.php:213 +#: usr/local/www/system_advanced_notifications.php:222 +#: usr/local/www/system_advanced_notifications.php:222 +msgid "SMTP Port of E-Mail server" +msgstr "é›»å­ãƒ¡ãƒ¼ãƒ«ã‚µãƒ¼ãƒã®SMTPãƒãƒ¼ãƒˆ" + +#: usr/local/www/system_advanced_notifications.php:217 +#: usr/local/www/system_advanced_notifications.php:226 +#: usr/local/www/system_advanced_notifications.php:226 +msgid "" +"This is the port of the SMTP E-Mail server, typically 25, 587 (submission) " +"or 465 (smtps, tick ssl/tls checkbox)" +msgstr "ã¾ãŸã¯465 ( SMTPS ã€ãƒ€ãƒ‹SSL / TLSãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ï¼‰ "ã“れã¯ã€SMTPé›»å­ãƒ¡ãƒ¼ãƒ«ã‚µãƒ¼ãƒãƒ¼ã®ãƒãƒ¼ãƒˆã€é€šå¸¸ã¯25 〠587 (サブミッション)ã§ã‚ã‚‹"" + +#: usr/local/www/system_advanced_notifications.php:221 +#: usr/local/www/system_advanced_notifications.php:230 +#: usr/local/www/system_advanced_notifications.php:230 +msgid "From e-mail address" +msgstr "Eメールアドレスã‹ã‚‰" + +#: usr/local/www/system_advanced_notifications.php:224 +#: usr/local/www/system_advanced_notifications.php:233 +#: usr/local/www/system_advanced_notifications.php:233 +msgid "This is the e-mail address that will appear in the from field." +msgstr "ã“れã¯ã‹ã‚‰ã®ãƒ•ィールドã«è¡¨ç¤ºã•れる電å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚" + +#: usr/local/www/system_advanced_notifications.php:228 +#: usr/local/www/system_advanced_notifications.php:237 +#: usr/local/www/system_advanced_notifications.php:237 +msgid "Notification E-Mail address" +msgstr "通知ã®é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/system_advanced_notifications.php:231 +#: usr/local/www/system_advanced_notifications.php:240 +#: usr/local/www/system_advanced_notifications.php:240 +msgid "" +"Enter the e-mail address that you would like email notifications sent to." +msgstr "「ã‚ãªãŸã¯ã«é€ã‚‰ã‚ŒãŸé›»å­ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã‚’ã”希望ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_advanced_notifications.php:235 +#: usr/local/www/system_advanced_notifications.php:244 +#: usr/local/www/system_advanced_notifications.php:244 +msgid "Notification E-Mail auth username (optional)" +msgstr "通知メールã®èªè¨¼ã®ãƒ¦ãƒ¼ã‚¶å(オプション)" + +#: usr/local/www/system_advanced_notifications.php:238 +#: usr/local/www/system_advanced_notifications.php:247 +#: usr/local/www/system_advanced_notifications.php:247 +msgid "Enter the e-mail address username for SMTP authentication." +msgstr "SMTPèªè¨¼ç”¨ã®é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åを入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_advanced_notifications.php:242 +#: usr/local/www/system_advanced_notifications.php:251 +#: usr/local/www/system_advanced_notifications.php:251 +msgid "Notification E-Mail auth password" +msgstr "通知メールã®èªè¨¼ãƒ‘スワード" + +#: usr/local/www/system_advanced_notifications.php:245 +#: usr/local/www/system_advanced_notifications.php:254 +#: usr/local/www/system_advanced_notifications.php:254 +msgid "Enter the e-mail address password for SMTP authentication." +msgstr "SMTPèªè¨¼ç”¨ã®é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ãƒ‘スワードを入力ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_sysctl.php:125 +#: usr/local/www/system_advanced_sysctl.php:125 +msgid "Advanced: System Tunables" +msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šã‚·ã‚¹ãƒ†ãƒ ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°å¯èƒ½" + +#: usr/local/www/system_advanced_sysctl.php:139 +#: usr/local/www/system_advanced_sysctl.php:139 +msgid "" +"The firewall tunables have changed. You must apply the configuration to " +"take affect." +msgstr "「ファイアウォールã®èª¿æ•´ãƒ‘ラメータãŒå¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚ã‚ãªãŸãŒã«è¨­å®šã‚’é©ç”¨ã—ãªã‘れã°ãªã‚‰ãªã„ã€æœ‰åйã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/system_advanced_sysctl.php:171 +#: usr/local/www/system_advanced_sysctl.php:171 +msgid "Tunable Name" +msgstr "調整å¯èƒ½ãªåå‰" + +#: usr/local/www/system_advanced_sysctl.php:234 +#: usr/local/www/system_advanced_sysctl.php:234 +msgid "Edit system tunable" +msgstr "編集システム調整" + +#: usr/local/www/system_advanced_sysctl.php:237 +#: usr/local/www/system_advanced_sysctl.php:237 +msgid "Tunable" +msgstr "調節å¯èƒ½ãª" + +#: usr/local/www/system_authservers.php:44 +#: usr/local/www/system_authservers.php:44 +msgid "Authentication Servers" +msgstr "èªè¨¼ã‚µãƒ¼ãƒãƒ¼" + +#: usr/local/www/system_authservers.php:83 +#: usr/local/www/system_authservers.php:84 +#: usr/local/www/system_authservers.php:84 +msgid "deleted" +msgstr "削除ã•れãŸ" + +#: usr/local/www/system_authservers.php:160 +#: usr/local/www/system_authservers.php:183 +#: usr/local/www/system_authservers.php:438 +#: usr/local/www/system_camanager.php:165 +#: usr/local/www/system_camanager.php:177 +#: usr/local/www/system_camanager.php:192 +#: usr/local/www/system_camanager.php:369 +#: usr/local/www/system_certmanager.php:164 +#: usr/local/www/system_certmanager.php:176 +#: usr/local/www/system_certmanager.php:193 +#: usr/local/www/system_certmanager.php:307 +#: usr/local/www/system_certmanager.php:495 +#: usr/local/www/system_certmanager.php:801 +#: usr/local/www/system_crlmanager.php:193 +#: usr/local/www/system_crlmanager.php:200 +#: usr/local/www/system_crlmanager.php:318 +#: usr/local/www/system_usermanager.php:189 +#: usr/local/www/system_usermanager.php:705 +#: usr/local/www/system_certmanager.php:192 +#: usr/local/www/system_certmanager.php:204 +#: usr/local/www/system_certmanager.php:222 +#: usr/local/www/system_certmanager.php:394 +#: usr/local/www/system_certmanager.php:594 +#: usr/local/www/system_certmanager.php:967 +#: usr/local/www/system_usermanager.php:703 +#: usr/local/www/system_crlmanager.php:192 +#: usr/local/www/system_crlmanager.php:199 +#: usr/local/www/system_crlmanager.php:319 +#: usr/local/www/system_crlmanager.php:404 +#: usr/local/www/system_authservers.php:161 +#: usr/local/www/system_authservers.php:184 +#: usr/local/www/system_authservers.php:443 +#: usr/local/www/system_camanager.php:167 +#: usr/local/www/system_camanager.php:179 +#: usr/local/www/system_camanager.php:194 +#: usr/local/www/system_camanager.php:376 +#: usr/local/www/system_certmanager.php:195 +#: usr/local/www/system_certmanager.php:207 +#: usr/local/www/system_certmanager.php:225 +#: usr/local/www/system_certmanager.php:403 +#: usr/local/www/system_certmanager.php:603 +#: usr/local/www/system_certmanager.php:1009 +#: usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 +#: usr/local/www/system_authservers.php:450 +#: usr/local/www/system_certmanager.php:604 +#: usr/local/www/system_certmanager.php:1013 +#: usr/local/www/system_camanager.php:167 +#: usr/local/www/system_camanager.php:179 +#: usr/local/www/system_camanager.php:194 +#: usr/local/www/system_camanager.php:376 +#: usr/local/www/system_certmanager.php:195 +#: usr/local/www/system_certmanager.php:207 +#: usr/local/www/system_certmanager.php:225 +#: usr/local/www/system_certmanager.php:403 +#: usr/local/www/system_certmanager.php:604 +#: usr/local/www/system_certmanager.php:1013 +#: usr/local/www/system_crlmanager.php:192 +#: usr/local/www/system_crlmanager.php:199 +#: usr/local/www/system_crlmanager.php:319 +#: usr/local/www/system_crlmanager.php:404 +#: usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 +#: usr/local/www/system_authservers.php:450 +#: usr/local/www/system_usermanager.php:189 +#: usr/local/www/system_usermanager.php:703 +msgid "Descriptive name" +msgstr "記述å" + +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:484 +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:489 +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:496 +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:496 +msgid "Port value" +msgstr "ãƒãƒ¼ãƒˆå€¤" + +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:490 +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:495 +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:502 +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:502 +msgid "Transport" +msgstr "輸é€" + +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:526 +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:531 +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:538 +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:538 +msgid "Protocol version" +msgstr "プロトコルãƒãƒ¼ã‚¸ãƒ§ãƒ³" + +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:168 +msgid "Search level" +msgstr "検索レベル" + +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:169 +msgid "User naming Attribute" +msgstr "ユーザーãƒãƒ¼ãƒŸãƒ³ã‚°å±žæ€§" + +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:170 +#: usr/local/www/system_authservers.php:170 +msgid "Group naming Attribute" +msgstr "グループã®ãƒãƒ¼ãƒŸãƒ³ã‚°å±žæ€§" + +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:665 +#: usr/local/www/system_authservers.php:170 +#: usr/local/www/system_authservers.php:670 +#: usr/local/www/system_authservers.php:171 +#: usr/local/www/system_authservers.php:677 +#: usr/local/www/system_authservers.php:171 +#: usr/local/www/system_authservers.php:677 +msgid "Group member attribute" +msgstr "グループメンãƒãƒ¼å±žæ€§" + +#: usr/local/www/system_authservers.php:170 +#: usr/local/www/system_authservers.php:171 +#: usr/local/www/system_authservers.php:172 +#: usr/local/www/system_authservers.php:172 +msgid "Authentication container" +msgstr "èªè¨¼ã‚³ãƒ³ãƒ†ãƒŠ" + +#: usr/local/www/system_authservers.php:175 +#: usr/local/www/system_authservers.php:176 +#: usr/local/www/system_authservers.php:177 +#: usr/local/www/system_authservers.php:177 +msgid "Bind user DN" +msgstr "ãƒã‚¤ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®DN" + +#: usr/local/www/system_authservers.php:176 +#: usr/local/www/system_authservers.php:177 +#: usr/local/www/system_authservers.php:178 +#: usr/local/www/system_authservers.php:178 +msgid "Bind Password" +msgstr "ãƒã‚¤ãƒ³ãƒ‰ãƒ‘スワード" + +#: usr/local/www/system_authservers.php:191 +#: usr/local/www/system_authservers.php:707 +#: usr/local/www/system_authservers.php:192 +#: usr/local/www/system_authservers.php:712 +#: usr/local/www/system_authservers.php:193 +#: usr/local/www/system_authservers.php:719 +#: usr/local/www/system_authservers.php:193 +#: usr/local/www/system_authservers.php:719 +msgid "Authentication port value" +msgstr "èªè¨¼ãƒãƒ¼ãƒˆã®å€¤" + +#: usr/local/www/system_authservers.php:197 +#: usr/local/www/system_authservers.php:713 +#: usr/local/www/system_authservers.php:198 +#: usr/local/www/system_authservers.php:718 +#: usr/local/www/system_authservers.php:199 +#: usr/local/www/system_authservers.php:725 +#: usr/local/www/system_authservers.php:199 +#: usr/local/www/system_authservers.php:725 +msgid "Accounting port value" +msgstr "会計ãƒãƒ¼ãƒˆå€¤" + +#: usr/local/www/system_authservers.php:202 +#: usr/local/www/system_authservers.php:686 +#: usr/local/www/system_authservers.php:203 +#: usr/local/www/system_authservers.php:691 +#: usr/local/www/system_authservers.php:204 +#: usr/local/www/system_authservers.php:698 +#: usr/local/www/system_authservers.php:204 +#: usr/local/www/system_authservers.php:698 +msgid "Shared Secret" +msgstr "共有秘密éµ" + +#: usr/local/www/system_authservers.php:209 +#: usr/local/www/system_authservers.php:210 +#: usr/local/www/system_authservers.php:211 +#: usr/local/www/system_authservers.php:211 +msgid "The host name contains invalid characters." +msgstr "ホストåãŒç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_authservers.php:212 +#: usr/local/www/system_authservers.php:213 +#: usr/local/www/system_authservers.php:214 +#: usr/local/www/system_authservers.php:214 +msgid "An authentication server with the same name already exists." +msgstr "åŒã˜åå‰ã®èªè¨¼ã‚µãƒ¼ãƒãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_authservers.php:382 +#: usr/local/www/system_authservers.php:383 +#: usr/local/www/system_authservers.php:390 +#: usr/local/www/system_authservers.php:390 +msgid "Please fill the required values." +msgstr "å¿…è¦ãªå€¤ã‚’入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_authservers.php:388 +#: usr/local/www/system_authservers.php:389 +#: usr/local/www/system_authservers.php:396 +#: usr/local/www/system_authservers.php:396 +msgid "Please fill the bind username/password." +msgstr "ãƒã‚¤ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼å/パスワードを入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_authservers.php:406 +#: usr/local/www/system_usermanager_settings.php:103 +#: usr/local/www/system_authservers.php:411 +#: usr/local/www/system_authservers.php:418 +#: usr/local/www/system_usermanager_settings.php:104 +#: usr/local/www/system_authservers.php:418 +#: usr/local/www/system_usermanager_settings.php:104 +msgid "Popup blocker detected. Action aborted." +msgstr "ãƒãƒƒãƒ—ã‚¢ãƒƒãƒ—ãƒ–ãƒ­ãƒƒã‚«ãƒ¼ãŒæ¤œå‡ºã•れã¾ã—ãŸã€‚アクションãŒä¸­æ­¢ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/system_authservers.php:475 +#: usr/local/www/system_authservers.php:480 +#: usr/local/www/system_authservers.php:487 +#: usr/local/www/system_authservers.php:487 +msgid "LDAP Server Settings" +msgstr "LDAPサーãƒãƒ¼ã®è¨­å®š" + +#: usr/local/www/system_authservers.php:478 +#: usr/local/www/system_authservers.php:680 +#: usr/local/www/system_authservers.php:483 +#: usr/local/www/system_authservers.php:685 +#: usr/local/www/system_authservers.php:490 +#: usr/local/www/system_authservers.php:692 +#: usr/local/www/system_authservers.php:490 +#: usr/local/www/system_authservers.php:692 +msgid "Hostname or IP address" +msgstr "ホストåã¾ãŸã¯IPアドレス" + +#: usr/local/www/system_authservers.php:505 +#: usr/local/www/vpn_openvpn_client.php:629 +#: usr/local/www/vpn_openvpn_server.php:778 +#: usr/local/www/vpn_openvpn_server.php:851 +#: usr/local/www/vpn_openvpn_client.php:634 +#: usr/local/www/vpn_openvpn_server.php:879 +#: usr/local/www/vpn_openvpn_client.php:652 +#: usr/local/www/system_authservers.php:510 +#: usr/local/www/vpn_openvpn_client.php:671 +#: usr/local/www/system_authservers.php:517 +#: usr/local/www/vpn_openvpn_server.php:906 +#: usr/local/www/vpn_openvpn_client.php:671 +#: usr/local/www/system_authservers.php:517 +#: usr/local/www/vpn_openvpn_server.php:906 +msgid "Peer Certificate Authority" +msgstr "èªè¨¼å±€ã®ãƒ”ã‚¢" + +#: usr/local/www/system_authservers.php:518 +#: usr/local/www/system_authservers.php:523 +#: usr/local/www/system_authservers.php:530 +#: usr/local/www/system_authservers.php:530 +msgid "This option is used if 'SSL Encrypted' option is choosen." +msgstr "「 SSLæš—å·åŒ–ã€ã‚ªãƒ—ションãŒé¸æŠžæ¸ˆã¿ã•れã¦ã„ã‚‹å ´åˆã€ã“ã®ã‚ªãƒ—ションãŒä½¿ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/system_authservers.php:519 +#: usr/local/www/system_authservers.php:524 +#: usr/local/www/system_authservers.php:531 +#: usr/local/www/system_authservers.php:531 +msgid "It must match with the CA in the AD otherwise problems will arise." +msgstr "ãã†ã§ãªã‘れã°ã€å•題ãŒç™ºç”Ÿã—ã¾ã™ã€ADã«ãŠã‘ã‚‹CAã¨ä¸€è‡´ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_authservers.php:541 +#: usr/local/www/system_authservers.php:546 +#: usr/local/www/system_authservers.php:553 +#: usr/local/www/system_authservers.php:553 +msgid "Search scope" +msgstr "検索範囲" + +#: usr/local/www/system_authservers.php:545 +#: usr/local/www/system_authservers.php:550 +#: usr/local/www/system_authservers.php:557 +#: usr/local/www/system_authservers.php:557 +msgid "Level:" +msgstr "レベル:" + +#: usr/local/www/system_authservers.php:560 +#: usr/local/www/system_authservers.php:565 +#: usr/local/www/system_authservers.php:572 +#: usr/local/www/system_authservers.php:572 +msgid "Base DN:" +msgstr "ベースDN :" + +#: usr/local/www/system_authservers.php:570 +#: usr/local/www/system_authservers.php:575 +#: usr/local/www/system_authservers.php:582 +#: usr/local/www/system_authservers.php:582 +msgid "Authentication containers" +msgstr "èªè¨¼ã‚³ãƒ³ãƒ†ãƒŠ" + +#: usr/local/www/system_authservers.php:574 +#: usr/local/www/system_authservers.php:579 +#: usr/local/www/system_authservers.php:586 +#: usr/local/www/system_authservers.php:586 +msgid "Containers:" +msgstr "コンテナ:" + +#: usr/local/www/system_authservers.php:578 +#: usr/local/www/system_authservers.php:583 +#: usr/local/www/system_authservers.php:590 +#: usr/local/www/system_authservers.php:590 +msgid "" +"Note: Semi-Colon separated. This will be prepended to the search base dn " +"above or you can specify full container path." +msgstr ""注:セミコロン区切りã“れã¯ã€æ¤œç´¢ãƒ™ãƒ¼ã‚¹DNã®å‰ã«è¿½åŠ ã•れã¾ã™ã€‚ 「上やã€ãƒ•ルコンテナã®ãƒ‘スを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/system_authservers.php:579 +#: usr/local/www/system_authservers.php:584 +#: usr/local/www/system_authservers.php:591 +#: usr/local/www/system_authservers.php:591 +msgid "Example: CN=Users;DC=example" +msgstr "例: CNã¯=ユーザー〠DC =例" + +#: usr/local/www/system_authservers.php:580 +#: usr/local/www/system_authservers.php:585 +#: usr/local/www/system_authservers.php:592 +#: usr/local/www/system_authservers.php:592 +msgid "Example: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com " +msgstr "例: CN =ユーザー〠DC =例〠DC = comã®ã€ OU = OtherUsers 〠DC =例〠DC = comã®" + +#: usr/local/www/system_authservers.php:587 +#: usr/local/www/system_authservers.php:592 +#: usr/local/www/system_authservers.php:599 +#: usr/local/www/system_authservers.php:599 +msgid "Extended Query" +msgstr "æ‹¡å¼µå•ã„åˆã‚ã›" + +#: usr/local/www/system_authservers.php:597 +#: usr/local/www/system_authservers.php:602 +#: usr/local/www/system_authservers.php:609 +#: usr/local/www/system_authservers.php:609 +msgid "" +"Example: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,DC=example," +"DC=com " +msgstr "「例: CN =グループå〠OU = MyGroups 〠DC =例〠DC = comã®ã€ OU = OtherUsers 〠DC =例〠「DC = comã®" + +#: usr/local/www/system_authservers.php:604 +#: usr/local/www/system_authservers.php:609 +#: usr/local/www/system_authservers.php:616 +#: usr/local/www/system_authservers.php:616 +msgid "Bind credentials" +msgstr "資格をãƒã‚¤ãƒ³ãƒ‰" + +#: usr/local/www/system_authservers.php:612 +#: usr/local/www/system_authservers.php:617 +#: usr/local/www/system_authservers.php:624 +#: usr/local/www/system_authservers.php:624 +msgid "Use anonymous binds to resolve distinguished names" +msgstr "識別åを解決ã™ã‚‹ãŸã‚ã«åŒ¿åãƒã‚¤ãƒ³ãƒ‰ã‚’使用ã—ã¦ã€" + +#: usr/local/www/system_authservers.php:621 +#: usr/local/www/system_authservers.php:626 +#: usr/local/www/system_authservers.php:633 +#: usr/local/www/system_authservers.php:633 +msgid "User DN:" +msgstr "ユーザーDN :" + +#: usr/local/www/system_authservers.php:637 +#: usr/local/www/system_authservers.php:642 +#: usr/local/www/system_authservers.php:649 +#: usr/local/www/system_authservers.php:649 +msgid "Initial Template" +msgstr "åˆæœŸãƒ†ãƒ³ãƒ—レート" + +#: usr/local/www/system_authservers.php:653 +#: usr/local/www/system_authservers.php:658 +#: usr/local/www/system_authservers.php:665 +#: usr/local/www/system_authservers.php:665 +msgid "User naming attribute" +msgstr "ユーザーãƒãƒ¼ãƒŸãƒ³ã‚°å±žæ€§" + +#: usr/local/www/system_authservers.php:659 +#: usr/local/www/system_authservers.php:664 +#: usr/local/www/system_authservers.php:671 +#: usr/local/www/system_authservers.php:671 +msgid "Group naming attribute" +msgstr "グループã®ãƒãƒ¼ãƒŸãƒ³ã‚°å±žæ€§" + +#: usr/local/www/system_authservers.php:677 +#: usr/local/www/system_authservers.php:682 +#: usr/local/www/system_authservers.php:689 +#: usr/local/www/system_authservers.php:689 +msgid "Radius Server Settings" +msgstr "RADIUSサーãƒã®è¨­å®š" + +#: usr/local/www/system_authservers.php:692 +#: usr/local/www/system_authservers.php:697 +#: usr/local/www/system_authservers.php:704 +#: usr/local/www/system_authservers.php:704 +msgid "Services offered" +msgstr "æä¾›ã™ã‚‹ã‚µãƒ¼ãƒ“ス" + +#: usr/local/www/system_authservers.php:737 +#: usr/local/www/system_authservers.php:743 +#: usr/local/www/system_authservers.php:759 +#: usr/local/www/system_authservers.php:759 +msgid "Server Name" +msgstr "サーãƒãƒ¼å" + +#: usr/local/www/system_authservers.php:739 +#: usr/local/www/system_authservers.php:745 +#: usr/local/www/system_authservers.php:761 usr/local/www/diag_dns.php:154 +#: usr/local/www/system_authservers.php:761 usr/local/www/diag_dns.php:154 +msgid "Host Name" +msgstr "ホストå" + +#: usr/local/www/system_authservers.php:756 +#: usr/local/www/vpn_openvpn_server.php:1479 +#: usr/local/www/vpn_openvpn_server.php:1621 +#: usr/local/www/vpn_openvpn_server.php:1662 +#: usr/local/www/system_authservers.php:764 +#: usr/local/www/system_authservers.php:780 +#: usr/local/www/vpn_openvpn_server.php:1714 +#: usr/local/www/system_authservers.php:797 +#: usr/local/www/system_authservers.php:797 +#: usr/local/www/vpn_openvpn_server.php:1714 +msgid "edit server" +msgstr "サーãƒãƒ¼ã®ç·¨é›†" + +#: usr/local/www/system_authservers.php:759 +#: usr/local/www/system_authservers.php:767 +#: usr/local/www/system_authservers.php:783 +#: usr/local/www/system_authservers.php:800 +#: usr/local/www/system_authservers.php:800 +msgid "Do you really want to delete this Server?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚µãƒ¼ãƒã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_authservers.php:760 +#: usr/local/www/vpn_openvpn_server.php:1483 +#: usr/local/www/vpn_openvpn_server.php:1625 +#: usr/local/www/vpn_openvpn_server.php:1666 +#: usr/local/www/system_authservers.php:768 +#: usr/local/www/system_authservers.php:784 +#: usr/local/www/vpn_openvpn_server.php:1718 +#: usr/local/www/system_authservers.php:801 +#: usr/local/www/system_authservers.php:801 +#: usr/local/www/vpn_openvpn_server.php:1718 +msgid "delete server" +msgstr "サーãƒã‚’削除" + +#: usr/local/www/system_authservers.php:772 +#: usr/local/www/vpn_openvpn_server.php:1496 +#: usr/local/www/vpn_openvpn_server.php:1638 +#: usr/local/www/vpn_openvpn_server.php:1679 +#: usr/local/www/system_authservers.php:782 +#: usr/local/www/system_authservers.php:798 +#: usr/local/www/vpn_openvpn_server.php:1731 +#: usr/local/www/system_authservers.php:770 +#: usr/local/www/system_authservers.php:770 +#: usr/local/www/vpn_openvpn_server.php:1731 +msgid "add server" +msgstr "サーãƒãƒ¼ã‚’追加" + +#: usr/local/www/system_authservers.php:779 +#: usr/local/www/system_authservers.php:789 +#: usr/local/www/system_authservers.php:805 +#: usr/local/www/system_authservers.php:777 +#: usr/local/www/system_authservers.php:777 +msgid "Additional authentication servers can be added here." +msgstr "追加ã®èªè¨¼ã‚µãƒ¼ãƒã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãる。" + +#: usr/local/www/system_camanager.php:44 usr/local/www/system_camanager.php:44 +msgid "Import an existing Certificate Authority" +msgstr "既存ã®èªè¨¼å±€ã‚’インãƒãƒ¼ãƒˆã™ã‚‹" + +#: usr/local/www/system_camanager.php:45 usr/local/www/system_camanager.php:45 +msgid "Create an internal Certificate Authority" +msgstr "内部èªè¨¼å±€ã‚’作æˆã™ã‚‹" + +#: usr/local/www/system_camanager.php:46 usr/local/www/system_camanager.php:46 +msgid "Create an intermediate Certificate Authority" +msgstr "中間èªè¨¼å±€ã‚’作æˆã™ã‚‹" + +#: usr/local/www/system_camanager.php:50 usr/local/www/system_camanager.php:51 +#: usr/local/www/system_camanager.php:51 +msgid "Certificate Authority Manager" +msgstr "èªè¨¼å±€ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼" + +#: usr/local/www/system_camanager.php:95 usr/local/www/system_camanager.php:96 +#: usr/local/www/system_camanager.php:96 +#, php-format +msgid "Certificate Authority %s and its CRLs (if any) successfully deleted" +msgstr "èªè¨¼å±€ã¯%sã¨ãã®CRLã¯ã€ (もã—ã‚れã°ï¼‰æ­£å¸¸ã«å‰Šé™¤" + +#: usr/local/www/system_camanager.php:166 +#: usr/local/www/system_camanager.php:402 +#: usr/local/www/system_certmanager.php:165 +#: usr/local/www/system_certmanager.php:511 +#: usr/local/www/system_certmanager.php:193 +#: usr/local/www/system_certmanager.php:610 +#: usr/local/www/system_camanager.php:168 +#: usr/local/www/system_camanager.php:409 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/system_certmanager.php:619 +#: usr/local/www/system_certmanager.php:620 +#: usr/local/www/system_camanager.php:168 +#: usr/local/www/system_camanager.php:409 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/system_certmanager.php:620 +msgid "Certificate data" +msgstr "証明書データ" + +#: usr/local/www/system_camanager.php:170 +#: usr/local/www/system_camanager.php:172 +#: usr/local/www/system_camanager.php:172 +msgid "Encrypted private keys are not yet supported." +msgstr "æš—å·åŒ–ã•れãŸç§˜å¯†éµã¯ã€ã¾ã ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/system_camanager.php:178 +#: usr/local/www/system_camanager.php:194 +#: usr/local/www/system_camanager.php:453 +#: usr/local/www/system_certmanager.php:178 +#: usr/local/www/system_certmanager.php:194 +#: usr/local/www/system_certmanager.php:566 +#: usr/local/www/system_certmanager.php:656 +#: usr/local/www/system_usermanager.php:191 +#: usr/local/www/system_usermanager.php:725 +#: usr/local/www/system_certmanager.php:206 +#: usr/local/www/system_certmanager.php:223 +#: usr/local/www/system_certmanager.php:665 +#: usr/local/www/system_certmanager.php:820 +#: usr/local/www/system_usermanager.php:723 +#: usr/local/www/system_camanager.php:454 +#: usr/local/www/system_camanager.php:180 +#: usr/local/www/system_camanager.php:196 +#: usr/local/www/system_camanager.php:461 +#: usr/local/www/system_certmanager.php:209 +#: usr/local/www/system_certmanager.php:226 +#: usr/local/www/system_certmanager.php:674 +#: usr/local/www/system_certmanager.php:845 +#: usr/local/www/system_certmanager.php:675 +#: usr/local/www/system_certmanager.php:849 +#: usr/local/www/system_camanager.php:180 +#: usr/local/www/system_camanager.php:196 +#: usr/local/www/system_camanager.php:461 +#: usr/local/www/system_certmanager.php:209 +#: usr/local/www/system_certmanager.php:226 +#: usr/local/www/system_certmanager.php:675 +#: usr/local/www/system_certmanager.php:849 +#: usr/local/www/system_usermanager.php:191 +#: usr/local/www/system_usermanager.php:723 +msgid "Key length" +msgstr "キーã®é•·ã•" + +#: usr/local/www/system_camanager.php:179 +#: usr/local/www/system_camanager.php:195 +#: usr/local/www/system_camanager.php:469 +#: usr/local/www/system_certmanager.php:179 +#: usr/local/www/system_certmanager.php:582 +#: usr/local/www/system_crlmanager.php:366 +#: usr/local/www/system_usermanager.php:192 +#: usr/local/www/system_usermanager.php:739 +#: usr/local/www/vpn_ipsec_phase1.php:758 +#: usr/local/www/vpn_ipsec_phase2.php:619 +#: usr/local/www/system_certmanager.php:208 +#: usr/local/www/system_certmanager.php:698 +#: usr/local/www/system_usermanager.php:737 +#: usr/local/www/system_camanager.php:470 +#: usr/local/www/vpn_ipsec_phase2.php:645 +#: usr/local/www/vpn_ipsec_phase1.php:771 +#: usr/local/www/system_crlmanager.php:367 +#: usr/local/www/vpn_ipsec_phase2.php:741 +#: usr/local/www/vpn_ipsec_phase1.php:768 +#: usr/local/www/system_camanager.php:181 +#: usr/local/www/system_camanager.php:197 +#: usr/local/www/system_camanager.php:493 +#: usr/local/www/system_certmanager.php:211 +#: usr/local/www/system_certmanager.php:723 +#: usr/local/www/vpn_ipsec_phase1.php:789 +#: usr/local/www/vpn_ipsec_phase2.php:762 +#: usr/local/www/system_certmanager.php:724 +#: usr/local/www/system_camanager.php:181 +#: usr/local/www/system_camanager.php:197 +#: usr/local/www/system_camanager.php:493 +#: usr/local/www/system_certmanager.php:211 +#: usr/local/www/system_certmanager.php:724 +#: usr/local/www/system_crlmanager.php:367 +#: usr/local/www/vpn_ipsec_phase1.php:789 +#: usr/local/www/system_usermanager.php:192 +#: usr/local/www/system_usermanager.php:737 +#: usr/local/www/vpn_ipsec_phase2.php:762 +msgid "Lifetime" +msgstr "一生" + +#: usr/local/www/system_camanager.php:180 +#: usr/local/www/system_camanager.php:196 +#: usr/local/www/system_certmanager.php:180 +#: usr/local/www/system_certmanager.php:195 +#: usr/local/www/system_certmanager.php:209 +#: usr/local/www/system_certmanager.php:224 +#: usr/local/www/system_camanager.php:182 +#: usr/local/www/system_camanager.php:198 +#: usr/local/www/system_certmanager.php:212 +#: usr/local/www/system_certmanager.php:227 +#: usr/local/www/system_camanager.php:182 +#: usr/local/www/system_camanager.php:198 +#: usr/local/www/system_certmanager.php:212 +#: usr/local/www/system_certmanager.php:227 +msgid "Distinguished name Country Code" +msgstr "識別åã®å›½ã‚³ãƒ¼ãƒ‰" + +#: usr/local/www/system_camanager.php:181 +#: usr/local/www/system_camanager.php:197 +#: usr/local/www/system_certmanager.php:181 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/system_certmanager.php:210 +#: usr/local/www/system_certmanager.php:225 +#: usr/local/www/system_camanager.php:183 +#: usr/local/www/system_camanager.php:199 +#: usr/local/www/system_certmanager.php:213 +#: usr/local/www/system_certmanager.php:228 +#: usr/local/www/system_camanager.php:183 +#: usr/local/www/system_camanager.php:199 +#: usr/local/www/system_certmanager.php:213 +#: usr/local/www/system_certmanager.php:228 +msgid "Distinguished name State or Province" +msgstr "識別åã®éƒ½é“府県" + +#: usr/local/www/system_camanager.php:182 +#: usr/local/www/system_camanager.php:198 +#: usr/local/www/system_certmanager.php:182 +#: usr/local/www/system_certmanager.php:197 +#: usr/local/www/system_certmanager.php:211 +#: usr/local/www/system_certmanager.php:226 +#: usr/local/www/system_camanager.php:184 +#: usr/local/www/system_camanager.php:200 +#: usr/local/www/system_certmanager.php:214 +#: usr/local/www/system_certmanager.php:229 +#: usr/local/www/system_camanager.php:184 +#: usr/local/www/system_camanager.php:200 +#: usr/local/www/system_certmanager.php:214 +#: usr/local/www/system_certmanager.php:229 +msgid "Distinguished name City" +msgstr "識別å市" + +#: usr/local/www/system_camanager.php:183 +#: usr/local/www/system_camanager.php:199 +#: usr/local/www/system_certmanager.php:183 +#: usr/local/www/system_certmanager.php:198 +#: usr/local/www/system_certmanager.php:212 +#: usr/local/www/system_certmanager.php:227 +#: usr/local/www/system_camanager.php:185 +#: usr/local/www/system_camanager.php:201 +#: usr/local/www/system_certmanager.php:215 +#: usr/local/www/system_certmanager.php:230 +#: usr/local/www/system_camanager.php:185 +#: usr/local/www/system_camanager.php:201 +#: usr/local/www/system_certmanager.php:215 +#: usr/local/www/system_certmanager.php:230 +msgid "Distinguished name Organization" +msgstr "識別å組織" + +#: usr/local/www/system_camanager.php:184 +#: usr/local/www/system_camanager.php:200 +#: usr/local/www/system_certmanager.php:184 +#: usr/local/www/system_certmanager.php:199 +#: usr/local/www/system_certmanager.php:213 +#: usr/local/www/system_certmanager.php:228 +#: usr/local/www/system_camanager.php:186 +#: usr/local/www/system_camanager.php:202 +#: usr/local/www/system_certmanager.php:216 +#: usr/local/www/system_certmanager.php:231 +#: usr/local/www/system_camanager.php:186 +#: usr/local/www/system_camanager.php:202 +#: usr/local/www/system_certmanager.php:216 +#: usr/local/www/system_certmanager.php:231 +msgid "Distinguished name Email Address" +msgstr "識別åã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/system_camanager.php:185 +#: usr/local/www/system_camanager.php:201 +#: usr/local/www/system_certmanager.php:185 +#: usr/local/www/system_certmanager.php:200 +#: usr/local/www/system_certmanager.php:214 +#: usr/local/www/system_certmanager.php:229 +#: usr/local/www/system_camanager.php:187 +#: usr/local/www/system_camanager.php:203 +#: usr/local/www/system_certmanager.php:217 +#: usr/local/www/system_certmanager.php:232 +#: usr/local/www/system_camanager.php:187 +#: usr/local/www/system_camanager.php:203 +#: usr/local/www/system_certmanager.php:217 +#: usr/local/www/system_certmanager.php:232 +msgid "Distinguished name Common Name" +msgstr "識別å共通å" + +#: usr/local/www/system_camanager.php:193 +#: usr/local/www/system_camanager.php:436 +#: usr/local/www/system_camanager.php:437 +#: usr/local/www/system_camanager.php:195 +#: usr/local/www/system_camanager.php:444 +#: usr/local/www/system_camanager.php:195 +#: usr/local/www/system_camanager.php:444 +msgid "Signing Certificate Authority" +msgstr "èªè¨¼å±€ã®ç½²å" + +#: usr/local/www/system_camanager.php:348 +#: usr/local/www/system_certmanager.php:458 +#: usr/local/www/system_crlmanager.php:283 +#: usr/local/www/system_certmanager.php:557 +#: usr/local/www/system_crlmanager.php:284 +#: usr/local/www/system_camanager.php:355 +#: usr/local/www/system_certmanager.php:566 +#: usr/local/www/system_certmanager.php:567 +#: usr/local/www/system_camanager.php:355 +#: usr/local/www/system_certmanager.php:567 +#: usr/local/www/system_crlmanager.php:284 +msgid "CAs" +msgstr "CAã¯" + +#: usr/local/www/system_camanager.php:349 +#: usr/local/www/system_camanager.php:568 +#: usr/local/www/system_certmanager.php:459 +#: usr/local/www/system_crlmanager.php:284 +#: usr/local/www/system_crlmanager.php:489 +#: usr/local/www/system_certmanager.php:558 +#: usr/local/www/system_camanager.php:569 +#: usr/local/www/system_crlmanager.php:285 +#: usr/local/www/system_crlmanager.php:522 +#: usr/local/www/system_camanager.php:356 +#: usr/local/www/system_camanager.php:593 +#: usr/local/www/system_certmanager.php:567 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_camanager.php:356 +#: usr/local/www/system_camanager.php:593 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_crlmanager.php:285 +#: usr/local/www/system_crlmanager.php:522 +msgid "Certificates" +msgstr "証明書" + +#: usr/local/www/system_camanager.php:350 +#: usr/local/www/system_certmanager.php:460 +#: usr/local/www/system_crlmanager.php:285 +#: usr/local/www/system_certmanager.php:559 +#: usr/local/www/system_crlmanager.php:286 +#: usr/local/www/system_camanager.php:357 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_certmanager.php:569 +#: usr/local/www/system_camanager.php:357 +#: usr/local/www/system_certmanager.php:569 +#: usr/local/www/system_crlmanager.php:286 +msgid "Certificate Revocation" +msgstr "証明書失効" + +#: usr/local/www/system_camanager.php:376 +#: usr/local/www/system_certmanager.php:475 +#: usr/local/www/system_crlmanager.php:300 +#: usr/local/www/system_certmanager.php:574 +#: usr/local/www/system_crlmanager.php:301 +#: usr/local/www/system_camanager.php:383 +#: usr/local/www/system_certmanager.php:583 +#: usr/local/www/system_certmanager.php:584 +#: usr/local/www/system_camanager.php:383 +#: usr/local/www/system_certmanager.php:584 +#: usr/local/www/system_crlmanager.php:301 +msgid "Method" +msgstr "方法" + +#: usr/local/www/system_camanager.php:398 +#: usr/local/www/system_camanager.php:405 +#: usr/local/www/system_camanager.php:405 +msgid "Existing Certificate Authority" +msgstr "既存ã®èªè¨¼å±€" + +#: usr/local/www/system_camanager.php:410 +#: usr/local/www/system_camanager.php:417 +#: usr/local/www/system_camanager.php:417 +msgid "Certificate Private Key" +msgstr "証明書ã®ç§˜å¯†éµ" + +#: usr/local/www/system_camanager.php:410 +#: usr/local/www/system_camanager.php:417 +#: usr/local/www/system_camanager.php:417 +msgid "(optional)" +msgstr "(オプション)" + +#: usr/local/www/system_camanager.php:414 +#: usr/local/www/system_camanager.php:421 +#: usr/local/www/system_camanager.php:421 +msgid "" +"Paste the private key for the above certificate here. This is optional in " +"most cases, but required if you need to generate a Certificate Revocation " +"List (CRL)." +msgstr "ã»ã¨ã‚“ã©ã®å ´åˆã€ã€Œã“ã“ã«ä¸Šè¨˜ã®è¨¼æ˜Žæ›¸ã®ç§˜å¯†éµã‚’ペーストã—ã¾ã™ã€‚ã“れã¯ã€ã‚ªãƒ—ションã®ã‚る「ã—ã‹ã—ã€ã‚ãªãŸãŒè¨¼æ˜Žæ›¸å¤±åйã€ãƒªã‚¹ãƒˆï¼ˆ CRL)を生æˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«å¿…è¦ã€‚" + +#: usr/local/www/system_camanager.php:420 +#: usr/local/www/system_crlmanager.php:374 +#: usr/local/www/system_crlmanager.php:375 +#: usr/local/www/system_crlmanager.php:375 +msgid "Serial" +msgstr "シリアル" + +#: usr/local/www/system_camanager.php:433 +#: usr/local/www/system_camanager.php:434 +#: usr/local/www/system_camanager.php:441 +#: usr/local/www/system_camanager.php:441 +msgid "Internal Certificate Authority" +msgstr "内部èªè¨¼å±€" + +#: usr/local/www/system_camanager.php:472 +#: usr/local/www/system_certmanager.php:585 +#: usr/local/www/system_crlmanager.php:369 +#: usr/local/www/system_certmanager.php:701 +#: usr/local/www/system_camanager.php:473 +#: usr/local/www/system_crlmanager.php:370 +#: usr/local/www/system_camanager.php:496 +#: usr/local/www/system_certmanager.php:726 +#: usr/local/www/system_certmanager.php:727 +#: usr/local/www/system_camanager.php:496 +#: usr/local/www/system_certmanager.php:727 +#: usr/local/www/system_crlmanager.php:370 +msgid "days" +msgstr "æ—¥" + +#: usr/local/www/system_camanager.php:480 +#: usr/local/www/system_certmanager.php:593 +#: usr/local/www/system_certmanager.php:676 +#: usr/local/www/system_certmanager.php:709 +#: usr/local/www/system_certmanager.php:842 +#: usr/local/www/system_camanager.php:481 +#: usr/local/www/system_camanager.php:504 +#: usr/local/www/system_certmanager.php:734 +#: usr/local/www/system_certmanager.php:883 +#: usr/local/www/system_certmanager.php:735 +#: usr/local/www/system_certmanager.php:887 +#: usr/local/www/system_camanager.php:504 +#: usr/local/www/system_certmanager.php:735 +#: usr/local/www/system_certmanager.php:887 +msgid "Country Code" +msgstr "国コード" + +#: usr/local/www/system_camanager.php:494 +#: usr/local/www/system_certmanager.php:599 +#: usr/local/www/system_certmanager.php:690 +#: usr/local/www/system_certmanager.php:715 +#: usr/local/www/system_certmanager.php:856 +#: usr/local/www/system_camanager.php:495 +#: usr/local/www/system_camanager.php:519 +#: usr/local/www/system_certmanager.php:740 +#: usr/local/www/system_certmanager.php:898 +#: usr/local/www/system_certmanager.php:741 +#: usr/local/www/system_certmanager.php:902 +#: usr/local/www/system_camanager.php:519 +#: usr/local/www/system_certmanager.php:741 +#: usr/local/www/system_certmanager.php:902 +msgid "State or Province" +msgstr "å·žã¾ãŸã¯çœŒ" + +#: usr/local/www/system_camanager.php:498 +#: usr/local/www/system_camanager.php:508 +#: usr/local/www/system_camanager.php:518 +#: usr/local/www/system_camanager.php:528 +#: usr/local/www/system_camanager.php:538 +#: usr/local/www/system_camanager.php:499 +#: usr/local/www/system_camanager.php:509 +#: usr/local/www/system_camanager.php:519 +#: usr/local/www/system_camanager.php:529 +#: usr/local/www/system_camanager.php:539 +#: usr/local/www/system_camanager.php:523 +#: usr/local/www/system_camanager.php:533 +#: usr/local/www/system_camanager.php:543 +#: usr/local/www/system_camanager.php:553 +#: usr/local/www/system_camanager.php:563 +#: usr/local/www/system_camanager.php:523 +#: usr/local/www/system_camanager.php:533 +#: usr/local/www/system_camanager.php:543 +#: usr/local/www/system_camanager.php:553 +#: usr/local/www/system_camanager.php:563 +msgid "ex:" +msgstr "例:" + +#: usr/local/www/system_camanager.php:500 +#: usr/local/www/system_certmanager.php:696 +#: usr/local/www/system_certmanager.php:862 +#: usr/local/www/system_camanager.php:501 +#: usr/local/www/system_camanager.php:525 +#: usr/local/www/system_certmanager.php:904 +#: usr/local/www/system_certmanager.php:908 +#: usr/local/www/system_camanager.php:525 +#: usr/local/www/system_certmanager.php:908 +msgid "Texas" +msgstr "テキサス州" + +#: usr/local/www/system_camanager.php:504 +#: usr/local/www/system_certmanager.php:605 +#: usr/local/www/system_certmanager.php:700 +#: usr/local/www/system_certmanager.php:721 +#: usr/local/www/system_certmanager.php:866 +#: usr/local/www/system_camanager.php:505 +#: usr/local/www/system_camanager.php:529 +#: usr/local/www/system_certmanager.php:746 +#: usr/local/www/system_certmanager.php:908 +#: usr/local/www/system_certmanager.php:747 +#: usr/local/www/system_certmanager.php:912 +#: usr/local/www/system_camanager.php:529 +#: usr/local/www/system_certmanager.php:747 +#: usr/local/www/system_certmanager.php:912 +msgid "City" +msgstr "都市" + +#: usr/local/www/system_camanager.php:510 +#: usr/local/www/system_certmanager.php:706 +#: usr/local/www/system_certmanager.php:872 +#: usr/local/www/system_camanager.php:511 +#: usr/local/www/system_camanager.php:535 +#: usr/local/www/system_certmanager.php:914 +#: usr/local/www/system_certmanager.php:918 +#: usr/local/www/system_camanager.php:535 +#: usr/local/www/system_certmanager.php:918 +msgid "Austin" +msgstr "オースティン" + +#: usr/local/www/system_camanager.php:514 +#: usr/local/www/system_certmanager.php:611 +#: usr/local/www/system_certmanager.php:710 +#: usr/local/www/system_certmanager.php:727 +#: usr/local/www/system_certmanager.php:876 +#: usr/local/www/system_camanager.php:515 +#: usr/local/www/system_camanager.php:539 +#: usr/local/www/system_certmanager.php:752 +#: usr/local/www/system_certmanager.php:918 +#: usr/local/www/system_certmanager.php:753 +#: usr/local/www/system_certmanager.php:922 +#: usr/local/www/system_camanager.php:539 +#: usr/local/www/system_certmanager.php:753 +#: usr/local/www/system_certmanager.php:922 +msgid "Organization" +msgstr "組織" + +#: usr/local/www/system_camanager.php:520 +#: usr/local/www/system_certmanager.php:716 +#: usr/local/www/system_certmanager.php:882 +#: usr/local/www/system_camanager.php:521 +#: usr/local/www/system_camanager.php:545 +#: usr/local/www/system_certmanager.php:924 +#: usr/local/www/system_certmanager.php:928 +#: usr/local/www/system_camanager.php:545 +#: usr/local/www/system_certmanager.php:928 +msgid "My Company Inc." +msgstr "ç§ã®ä¼šç¤¾ï¼ˆæ ªï¼‰" + +#: usr/local/www/system_camanager.php:530 +#: usr/local/www/system_camanager.php:531 +#: usr/local/www/system_camanager.php:555 +#: usr/local/www/system_camanager.php:555 +msgid "admin@mycompany.com" +msgstr "admin@mycompany.com" + +#: usr/local/www/system_camanager.php:540 +#: usr/local/www/system_camanager.php:541 +#: usr/local/www/system_camanager.php:565 +#: usr/local/www/system_camanager.php:565 +msgid "internal-ca" +msgstr "内部CA" + +#: usr/local/www/system_camanager.php:566 +#: usr/local/www/system_crlmanager.php:488 +#: usr/local/www/system_camanager.php:567 +#: usr/local/www/system_crlmanager.php:521 +#: usr/local/www/system_camanager.php:591 +#: usr/local/www/system_camanager.php:591 +#: usr/local/www/system_crlmanager.php:521 +msgid "Internal" +msgstr "内部" + +#: usr/local/www/system_camanager.php:567 +#: usr/local/www/system_certmanager.php:855 +#: usr/local/www/system_certmanager.php:1021 +#: usr/local/www/system_camanager.php:568 +#: usr/local/www/system_camanager.php:592 +#: usr/local/www/system_certmanager.php:1063 +#: usr/local/www/system_certmanager.php:1067 +#: usr/local/www/system_camanager.php:592 +#: usr/local/www/system_certmanager.php:1067 +msgid "Issuer" +msgstr "発行者" + +#: usr/local/www/system_camanager.php:569 +#: usr/local/www/system_certmanager.php:856 +#: usr/local/www/system_certmanager.php:1022 +#: usr/local/www/system_camanager.php:570 +#: usr/local/www/system_camanager.php:594 +#: usr/local/www/system_certmanager.php:1064 +#: usr/local/www/system_certmanager.php:1068 +#: usr/local/www/system_camanager.php:594 +#: usr/local/www/system_certmanager.php:1068 +msgid "Distinguished Name" +msgstr "識別å" + +#: usr/local/www/system_camanager.php:579 +#: usr/local/www/system_certmanager.php:869 +#: usr/local/www/system_certmanager.php:1036 +#: usr/local/www/system_camanager.php:580 +#: usr/local/www/system_camanager.php:605 +#: usr/local/www/system_certmanager.php:1079 +#: usr/local/www/system_certmanager.php:1083 +#: usr/local/www/system_camanager.php:605 +#: usr/local/www/system_certmanager.php:1083 +msgid "self-signed" +msgstr "自己署å" + +#: usr/local/www/system_camanager.php:581 +#: usr/local/www/system_certmanager.php:871 +#: usr/local/www/system_certmanager.php:1038 +#: usr/local/www/system_camanager.php:582 +#: usr/local/www/system_camanager.php:607 +#: usr/local/www/system_certmanager.php:1081 +#: usr/local/www/system_certmanager.php:1085 +#: usr/local/www/system_camanager.php:607 +#: usr/local/www/system_certmanager.php:1085 +msgid "external" +msgstr "外部" + +#: usr/local/www/system_camanager.php:626 +#: usr/local/www/system_camanager.php:627 +#: usr/local/www/system_camanager.php:665 +#: usr/local/www/system_camanager.php:665 +msgid "edit CA" +msgstr "カリフォルニア州ã®ç·¨é›†" + +#: usr/local/www/system_camanager.php:629 +#: usr/local/www/system_camanager.php:630 +#: usr/local/www/system_camanager.php:668 +#: usr/local/www/system_camanager.php:668 +msgid "export CA cert" +msgstr "輸出CA証明書" + +#: usr/local/www/system_camanager.php:633 +#: usr/local/www/system_camanager.php:634 +#: usr/local/www/system_camanager.php:672 +#: usr/local/www/system_camanager.php:672 +msgid "export CA private key" +msgstr "輸出CA秘密éµ" + +#: usr/local/www/system_camanager.php:636 +#: usr/local/www/system_camanager.php:637 +#: usr/local/www/system_camanager.php:675 +#: usr/local/www/system_camanager.php:675 +msgid "" +"Do you really want to delete this Certificate Authority and its CRLs, and " +"unreference any associated certificates?" +msgstr "「ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®èªè¨¼å±€ã¨ãã®CRLを削除ã—ãŸã„ã€ã¨ãªã„ "ä»»æ„ã®é–¢é€£ã®è¨¼æ˜Žæ›¸éžå‚照?" + +#: usr/local/www/system_camanager.php:637 +#: usr/local/www/system_camanager.php:638 +#: usr/local/www/system_camanager.php:676 +#: usr/local/www/system_camanager.php:676 +msgid "delete ca" +msgstr "CAを削除" + +#: usr/local/www/system_camanager.php:649 +#: usr/local/www/system_certmanager.php:952 +#: usr/local/www/system_certmanager.php:1132 +#: usr/local/www/system_camanager.php:650 +#: usr/local/www/system_certmanager.php:1135 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1191 +#: usr/local/www/system_certmanager.php:1195 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1195 +msgid "add or import ca" +msgstr "CAを追加ã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹" + +#: usr/local/www/system_camanager.php:649 +#: usr/local/www/system_certmanager.php:952 +#: usr/local/www/system_certmanager.php:1132 +#: usr/local/www/system_camanager.php:650 +#: usr/local/www/system_certmanager.php:1135 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1191 +#: usr/local/www/system_certmanager.php:1195 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1195 +msgid "add ca" +msgstr "CAを追加" + +#: usr/local/www/system_camanager.php:656 +#: usr/local/www/system_camanager.php:657 +#: usr/local/www/system_camanager.php:695 +#: usr/local/www/system_camanager.php:695 +msgid "Additional trusted Certificate Authorities can be added here." +msgstr "追加ã®ä¿¡é ¼ã§ãã‚‹èªè¨¼å±€ã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/system_certmanager.php:44 +#: usr/local/www/system_certmanager.php:44 +msgid "Import an existing Certificate" +msgstr "既存ã®è¨¼æ˜Žæ›¸ã‚’インãƒãƒ¼ãƒˆã™ã‚‹" + +#: usr/local/www/system_certmanager.php:45 +#: usr/local/www/system_certmanager.php:45 +msgid "Create an internal Certificate" +msgstr "内部証明書を作æˆã—ã¾ã™ã€‚" + +#: usr/local/www/system_certmanager.php:46 +#: usr/local/www/system_certmanager.php:46 +msgid "Create a Certificate Signing Request" +msgstr "証明書署åè¦æ±‚を作æˆã—ã¾ã™ã€‚" + +#: usr/local/www/system_certmanager.php:51 +#: usr/local/www/system_certmanager.php:56 +#: usr/local/www/system_certmanager.php:57 +#: usr/local/www/system_certmanager.php:57 +msgid "Certificate Manager" +msgstr "証明書マãƒãƒ¼ã‚¸ãƒ£" + +#: usr/local/www/system_certmanager.php:57 +#: usr/local/www/system_certmanager.php:62 +#: usr/local/www/system_certmanager.php:63 +#: usr/local/www/system_certmanager.php:63 +msgid "Choose an existing certificate" +msgstr "既存ã®è¨¼æ˜Žæ›¸ã‚’é¸æŠžã—ã¦ãã ã•ã„" + +#: usr/local/www/system_certmanager.php:96 +#: usr/local/www/system_certmanager.php:101 +#: usr/local/www/system_certmanager.php:102 +#: usr/local/www/system_certmanager.php:102 +#, php-format +msgid "Certificate %s successfully deleted" +msgstr "正常ã«å‰Šé™¤ã•れãŸè¨¼æ˜Žæ›¸%s" + +#: usr/local/www/system_certmanager.php:166 +#: usr/local/www/system_certmanager.php:194 +#: usr/local/www/system_certmanager.php:197 +#: usr/local/www/system_certmanager.php:197 +msgid "Key data" +msgstr "é‡è¦ãªãƒ‡ãƒ¼ã‚¿" + +#: usr/local/www/system_certmanager.php:177 +#: usr/local/www/system_certmanager.php:549 +#: usr/local/www/system_usermanager.php:190 +#: usr/local/www/system_usermanager.php:711 +#: usr/local/www/system_certmanager.php:205 +#: usr/local/www/system_certmanager.php:648 +#: usr/local/www/system_usermanager.php:709 +#: usr/local/www/system_certmanager.php:208 +#: usr/local/www/system_certmanager.php:657 +#: usr/local/www/system_certmanager.php:658 +#: usr/local/www/system_certmanager.php:208 +#: usr/local/www/system_certmanager.php:658 +#: usr/local/www/system_usermanager.php:190 +#: usr/local/www/system_usermanager.php:709 +msgid "Certificate authority" +msgstr "èªè¨¼å±€" + +#: usr/local/www/system_certmanager.php:205 +#: usr/local/www/system_certmanager.php:234 +#: usr/local/www/system_certmanager.php:237 +#: usr/local/www/system_certmanager.php:237 +msgid "Existing Certificate Choice" +msgstr "既存ã®è¨¼æ˜Žæ›¸ã®é¸æŠž" + +#: usr/local/www/system_certmanager.php:300 +#: usr/local/www/system_certmanager.php:796 +#: usr/local/www/system_certmanager.php:840 +#: usr/local/www/system_certmanager.php:387 +#: usr/local/www/system_certmanager.php:962 +#: usr/local/www/system_certmanager.php:1006 +#: usr/local/www/system_certmanager.php:396 +#: usr/local/www/system_certmanager.php:1004 +#: usr/local/www/system_certmanager.php:1048 +#: usr/local/www/system_certmanager.php:1008 +#: usr/local/www/system_certmanager.php:1052 +#: usr/local/www/system_certmanager.php:396 +#: usr/local/www/system_certmanager.php:1008 +#: usr/local/www/system_certmanager.php:1052 +msgid "Update" +msgstr "アップデート" + +#: usr/local/www/system_certmanager.php:308 +#: usr/local/www/system_certmanager.php:822 +#: usr/local/www/system_certmanager.php:395 +#: usr/local/www/system_certmanager.php:988 +#: usr/local/www/system_certmanager.php:404 +#: usr/local/www/system_certmanager.php:1030 +#: usr/local/www/system_certmanager.php:404 +msgid "Final Certificate data" +msgstr "最終的ãªè¨¼æ˜Žæ›¸ãƒ‡ãƒ¼ã‚¿" + +#: usr/local/www/system_certmanager.php:328 +#: usr/local/www/system_certmanager.php:415 +#: usr/local/www/system_certmanager.php:424 +#: usr/local/www/system_certmanager.php:424 +#, php-format +msgid "The certificate modulus does not match the signing request modulus." +msgstr "証明書ã®å¼¾æ€§çއã¯ã€ç½²åè¦æ±‚弾性率ã¨ä¸€è‡´ã—ãªã„。" + +#: usr/local/www/system_certmanager.php:507 +#: usr/local/www/system_certmanager.php:606 +#: usr/local/www/system_certmanager.php:615 +#: usr/local/www/system_certmanager.php:616 +#: usr/local/www/system_certmanager.php:616 +msgid "Import Certificate" +msgstr "証明書ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#: usr/local/www/system_certmanager.php:519 +#: usr/local/www/system_certmanager.php:618 +#: usr/local/www/system_certmanager.php:627 +#: usr/local/www/system_certmanager.php:628 +#: usr/local/www/system_certmanager.php:628 +msgid "Private key data" +msgstr "秘密éµãƒ‡ãƒ¼ã‚¿" + +#: usr/local/www/system_certmanager.php:523 +#: usr/local/www/system_certmanager.php:622 +#: usr/local/www/system_certmanager.php:631 +#: usr/local/www/system_certmanager.php:632 +#: usr/local/www/system_certmanager.php:632 +msgid "Paste a private key in X.509 PEM format here." +msgstr "ã“ã“ã§ã€X.509 PEMå½¢å¼ã®ç§˜å¯†éµã‚’貼り付ã‘ã¾ã™ã€‚" + +#: usr/local/www/system_certmanager.php:533 +#: usr/local/www/system_certmanager.php:632 +#: usr/local/www/system_certmanager.php:641 +#: usr/local/www/system_certmanager.php:642 +#: usr/local/www/system_certmanager.php:642 +msgid "Internal Certificate" +msgstr "内部èªè¨¼" + +#: usr/local/www/system_certmanager.php:540 +#: usr/local/www/system_certmanager.php:639 +#: usr/local/www/system_certmanager.php:648 +#: usr/local/www/system_certmanager.php:649 +#: usr/local/www/system_certmanager.php:649 +msgid "No internal Certificate Authorities have been defined. You must" +msgstr "ã¯å†…部èªè¨¼å±€ãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“。作業を行ã†å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/system_certmanager.php:542 +#: usr/local/www/system_certmanager.php:641 +#: usr/local/www/system_certmanager.php:650 +#: usr/local/www/system_certmanager.php:651 +#: usr/local/www/system_certmanager.php:651 +msgid "an internal CA before creating an internal certificate." +msgstr "内部証明書を作æˆã™ã‚‹å‰ã«ã€å†…部CA 。" + +#: usr/local/www/system_certmanager.php:623 +#: usr/local/www/system_certmanager.php:726 +#: usr/local/www/system_certmanager.php:739 +#: usr/local/www/system_certmanager.php:892 +#: usr/local/www/system_certmanager.php:764 +#: usr/local/www/system_certmanager.php:934 +#: usr/local/www/system_certmanager.php:765 +#: usr/local/www/system_certmanager.php:938 +#: usr/local/www/system_certmanager.php:765 +#: usr/local/www/system_certmanager.php:938 +msgid "webadmin@mycompany.com" +msgstr "webadmin@mycompany.com" + +#: usr/local/www/system_certmanager.php:637 +#: usr/local/www/system_certmanager.php:736 +#: usr/local/www/system_certmanager.php:753 +#: usr/local/www/system_certmanager.php:902 +#: usr/local/www/system_certmanager.php:778 +#: usr/local/www/system_certmanager.php:944 +#: usr/local/www/system_certmanager.php:779 +#: usr/local/www/system_certmanager.php:948 +#: usr/local/www/system_certmanager.php:779 +#: usr/local/www/system_certmanager.php:948 +msgid "www.example.com" +msgstr "www.example.com" + +#: usr/local/www/system_certmanager.php:653 +#: usr/local/www/system_certmanager.php:817 +#: usr/local/www/system_certmanager.php:842 +#: usr/local/www/system_certmanager.php:846 +#: usr/local/www/system_certmanager.php:846 +msgid "External Signing Request" +msgstr "外部署åè¦æ±‚" + +#: usr/local/www/system_certmanager.php:749 +#: usr/local/www/system_certmanager.php:915 +#: usr/local/www/system_certmanager.php:957 +#: usr/local/www/system_certmanager.php:961 +#: usr/local/www/system_certmanager.php:961 +msgid "Choose an Existing Certificate" +msgstr "既存ã®è¨¼æ˜Žæ›¸ã‚’é¸æŠžã™ã‚‹" + +#: usr/local/www/system_certmanager.php:752 +#: usr/local/www/system_certmanager.php:918 +#: usr/local/www/system_certmanager.php:960 +#: usr/local/www/system_certmanager.php:964 +#: usr/local/www/system_certmanager.php:964 +msgid "Existing Certificates" +msgstr "既存ã®è¨¼æ˜Žæ›¸" + +#: usr/local/www/system_certmanager.php:810 +#: usr/local/www/system_certmanager.php:976 +#: usr/local/www/system_certmanager.php:1018 +#: usr/local/www/system_certmanager.php:1022 +#: usr/local/www/system_certmanager.php:1022 +msgid "Complete Signing Request" +msgstr "完全ãªç½²åリクエスト" + +#: usr/local/www/system_certmanager.php:814 +#: usr/local/www/system_certmanager.php:980 +#: usr/local/www/system_certmanager.php:1022 +msgid "Signing Request data" +msgstr "ç½²åè¦æ±‚データ" + +#: usr/local/www/system_certmanager.php:818 +#: usr/local/www/system_certmanager.php:984 +#: usr/local/www/system_certmanager.php:1026 +#: usr/local/www/system_certmanager.php:1030 +#: usr/local/www/system_certmanager.php:1030 +msgid "" +"Copy the certificate signing data from here and forward it to your " +"certificate authority for signing." +msgstr "「ã“ã“ã‹ã‚‰è¨¼æ˜Žæ›¸ç½²åデータをコピーã—ã¦ã€ãれを転é€ã™ã‚‹ã€ã«ç½²åã™ã‚‹ãŸã‚ã®èªè¨¼å±€ã€‚" + +#: usr/local/www/system_certmanager.php:826 +#: usr/local/www/system_certmanager.php:992 +#: usr/local/www/system_certmanager.php:1034 +#: usr/local/www/system_certmanager.php:1038 +#: usr/local/www/system_certmanager.php:1038 +msgid "Paste the certificate received from your certificate authority here." +msgstr "ã“ã“ã«ã‚ãªãŸã®èªè¨¼å±€ã‹ã‚‰å—ã‘å–ã£ãŸè¨¼æ˜Žæ›¸ã‚’貼り付ã‘ã¾ã™ã€‚" + +#: usr/local/www/system_certmanager.php:857 +#: usr/local/www/system_crlmanager.php:490 +#: usr/local/www/system_certmanager.php:1023 +#: usr/local/www/system_crlmanager.php:523 +#: usr/local/www/system_certmanager.php:1065 +#: usr/local/www/system_certmanager.php:1069 +#: usr/local/www/system_certmanager.php:1069 +#: usr/local/www/system_crlmanager.php:523 +msgid "In Use" +msgstr "使用中" + +#: usr/local/www/system_certmanager.php:877 +#: usr/local/www/system_certmanager.php:1044 +#: usr/local/www/system_certmanager.php:1087 +#: usr/local/www/system_certmanager.php:1091 +#: usr/local/www/system_certmanager.php:1091 +msgid "external - signature pending" +msgstr "外部 - ç½²å申請中" + +#: usr/local/www/system_certmanager.php:926 +#: usr/local/www/system_usermanager.php:658 +#: usr/local/www/system_certmanager.php:1103 +#: usr/local/www/system_usermanager.php:656 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1162 +#: usr/local/www/system_certmanager.php:1166 +#: usr/local/www/system_certmanager.php:1166 +#: usr/local/www/system_usermanager.php:656 +msgid "export cert" +msgstr "輸出証明書" + +#: usr/local/www/system_certmanager.php:926 +#: usr/local/www/system_certmanager.php:929 +#: usr/local/www/system_certmanager.php:1103 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1162 +#: usr/local/www/system_certmanager.php:1165 +#: usr/local/www/system_certmanager.php:1166 +#: usr/local/www/system_certmanager.php:1169 +#: usr/local/www/system_certmanager.php:1166 +#: usr/local/www/system_certmanager.php:1169 +msgid "export ca" +msgstr "輸出CA" + +#: usr/local/www/system_certmanager.php:929 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1165 +#: usr/local/www/system_certmanager.php:1169 +#: usr/local/www/system_certmanager.php:1169 +msgid "export key" +msgstr "輸出キー" + +#: usr/local/www/system_certmanager.php:932 +#: usr/local/www/system_certmanager.php:1112 +#: usr/local/www/system_certmanager.php:1115 +#: usr/local/www/system_certmanager.php:1171 +#: usr/local/www/system_certmanager.php:1175 +#: usr/local/www/system_certmanager.php:1175 +msgid "Do you really want to delete this Certificate?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®è¨¼æ˜Žæ›¸ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_certmanager.php:933 +#: usr/local/www/system_usermanager.php:661 +#: usr/local/www/system_certmanager.php:1113 +#: usr/local/www/system_usermanager.php:659 +#: usr/local/www/system_certmanager.php:1116 +#: usr/local/www/system_certmanager.php:1172 +#: usr/local/www/system_certmanager.php:1176 +#: usr/local/www/system_certmanager.php:1176 +#: usr/local/www/system_usermanager.php:659 +msgid "delete cert" +msgstr "証明書を削除ã™ã‚‹" + +#: usr/local/www/system_certmanager.php:939 +#: usr/local/www/system_certmanager.php:1119 +#: usr/local/www/system_certmanager.php:1122 +#: usr/local/www/system_certmanager.php:1178 +#: usr/local/www/system_certmanager.php:1182 +#: usr/local/www/system_certmanager.php:1182 +msgid "update csr" +msgstr "æ›´æ–°CSR" + +#: usr/local/www/system_certmanager.php:958 +#: usr/local/www/system_certmanager.php:1138 +#: usr/local/www/system_certmanager.php:1141 +#: usr/local/www/system_certmanager.php:1197 +#: usr/local/www/system_certmanager.php:1201 +#: usr/local/www/system_certmanager.php:1201 +msgid "Note: You can only delete a certificate if it is not currently in use." +msgstr "注æ„:ç¾åœ¨ä½¿ç”¨ã•れã¦ã„ãªã„å ´åˆã«ã®ã¿ã€è¨¼æ˜Žæ›¸ã‚’削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/system_crlmanager.php:46 +#: usr/local/www/system_crlmanager.php:46 +msgid "Certificate Revocation List Manager" +msgstr "証明書失効リストマãƒãƒ¼ã‚¸ãƒ£" + +#: usr/local/www/system_crlmanager.php:49 +#: usr/local/www/system_crlmanager.php:49 +msgid "Create an internal Certificate Revocation List" +msgstr "内部証明書失効リストを作æˆã—ã¾ã™ã€‚" + +#: usr/local/www/system_crlmanager.php:50 +#: usr/local/www/system_crlmanager.php:50 +msgid "Import an existing Certificate Revocation List" +msgstr "既存ã®è¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆã‚’ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" + +#: usr/local/www/system_crlmanager.php:86 +#: usr/local/www/system_crlmanager.php:86 +msgid "Invalid CRL reference." +msgstr "無効ãªCRLã®å‚照。" + +#: usr/local/www/system_crlmanager.php:92 +#: usr/local/www/system_crlmanager.php:92 +#, php-format +msgid "Certificate Revocation List %s is in use and cannot be deleted" +msgstr "証明書失効リストã®%sãŒä½¿ç”¨ã•れã€å‰Šé™¤ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/system_crlmanager.php:98 +#: usr/local/www/system_crlmanager.php:98 +#, php-format +msgid "Certificate Revocation List %s successfully deleted" +msgstr "è¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆãŒæ­£å¸¸ã«å‰Šé™¤ã•れ%s" + +#: usr/local/www/system_crlmanager.php:136 +#: usr/local/www/system_crlmanager.php:136 +msgid "Both the Certificate and CRL must be specified." +msgstr "証明書ã¨CRLã®ä¸¡æ–¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_crlmanager.php:140 +#: usr/local/www/system_crlmanager.php:140 +msgid "CA mismatch between the Certificate and CRL. Unable to Revoke." +msgstr "証明書ã¨CRLã®é–“ã®CAãŒä¸€è‡´ã—ã¾ã›ã‚“。å–り消ã—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_crlmanager.php:143 +#: usr/local/www/system_crlmanager.php:143 +msgid "Cannot revoke certificates for an imported/external CRL." +msgstr "インãƒãƒ¼ãƒˆã•れãŸå¤–部/ CRLã®è¨¼æ˜Žæ›¸ã‚’失効ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_crlmanager.php:175 +#: usr/local/www/system_crlmanager.php:177 +#: usr/local/www/system_crlmanager.php:175 +#: usr/local/www/system_crlmanager.php:177 +#, php-format +msgid "Deleted Certificate %s from CRL %s" +msgstr "CRLã®%sã‹ã‚‰å‰Šé™¤ã•れãŸè¨¼æ˜Žæ›¸ã®%s" + +#: usr/local/www/system_crlmanager.php:179 +#: usr/local/www/system_crlmanager.php:179 +#, php-format +msgid "Failed to delete Certificate %s from CRL %s" +msgstr "CRLã®%sã‹ã‚‰è¨¼æ˜Žæ›¸%sã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ" + +#: usr/local/www/system_crlmanager.php:194 +#: usr/local/www/system_crlmanager.php:193 +#: usr/local/www/system_crlmanager.php:193 +msgid "Certificate Revocation List data" +msgstr "証明書失効リストデータ" + +#: usr/local/www/system_crlmanager.php:201 +#: usr/local/www/system_crlmanager.php:324 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/vpn_openvpn_server.php:287 +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/system_crlmanager.php:200 +#: usr/local/www/system_crlmanager.php:325 +#: usr/local/www/vpn_openvpn_server.php:288 +#: usr/local/www/vpn_openvpn_client.php:220 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/vpn_openvpn_server.php:309 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/system_crlmanager.php:200 +#: usr/local/www/system_crlmanager.php:325 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/vpn_openvpn_server.php:309 +msgid "Certificate Authority" +msgstr "èªè¨¼å±€" + +#: usr/local/www/system_crlmanager.php:345 +#: usr/local/www/system_crlmanager.php:346 +#: usr/local/www/system_crlmanager.php:346 +msgid "Existing Certificate Revocation List" +msgstr "既存ã®è¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆ" + +#: usr/local/www/system_crlmanager.php:349 +#: usr/local/www/system_crlmanager.php:350 +#: usr/local/www/system_crlmanager.php:410 +#: usr/local/www/system_crlmanager.php:350 +#: usr/local/www/system_crlmanager.php:410 +msgid "CRL data" +msgstr "CRLã®ãƒ‡ãƒ¼ã‚¿" + +#: usr/local/www/system_crlmanager.php:353 +#: usr/local/www/system_crlmanager.php:354 +#: usr/local/www/system_crlmanager.php:414 +#: usr/local/www/system_crlmanager.php:354 +#: usr/local/www/system_crlmanager.php:414 +msgid "Paste a Certificate Revocation List in X.509 CRL format here." +msgstr "ã“ã“ã§ã€X.509 CRLã®å½¢å¼ã§è¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆã‚’è²¼ã‚Šä»˜ã‘ã¾ã™ã€‚" + +#: usr/local/www/system_crlmanager.php:363 +#: usr/local/www/system_crlmanager.php:364 +#: usr/local/www/system_crlmanager.php:364 +msgid "Internal Certificate Revocation List" +msgstr "内部証明書失効リスト" + +#: usr/local/www/system_crlmanager.php:370 +#: usr/local/www/system_crlmanager.php:371 +#: usr/local/www/system_crlmanager.php:371 +msgid "Default: 9999" +msgstr "デフォルト: 9999" + +#: usr/local/www/system_crlmanager.php:378 +#: usr/local/www/system_crlmanager.php:379 +#: usr/local/www/system_crlmanager.php:379 +msgid "Default: 0" +msgstr "デフォルト: 0" + +#: usr/local/www/system_crlmanager.php:401 +#: usr/local/www/system_crlmanager.php:434 +#: usr/local/www/system_crlmanager.php:434 +msgid "Currently Revoked Certificates for CRL" +msgstr "CRLã®ç¾åœ¨å¤±åйã—ãŸè¨¼æ˜Žæ›¸" + +#: usr/local/www/system_crlmanager.php:405 +#: usr/local/www/system_crlmanager.php:438 +#: usr/local/www/system_crlmanager.php:438 +msgid "Certificate Name" +msgstr "証明書ã®åå‰" + +#: usr/local/www/system_crlmanager.php:406 +#: usr/local/www/system_crlmanager.php:439 +#: usr/local/www/system_crlmanager.php:439 +msgid "Revocation Reason" +msgstr "失効ç†ç”±" + +#: usr/local/www/system_crlmanager.php:407 +#: usr/local/www/system_crlmanager.php:440 +#: usr/local/www/system_crlmanager.php:440 +msgid "Revoked At" +msgstr "ã§ã‚‚å–り消ã™" + +#: usr/local/www/system_crlmanager.php:416 +#: usr/local/www/system_crlmanager.php:449 +#: usr/local/www/system_crlmanager.php:449 +msgid "No Certificates Found for this CRL." +msgstr "ã“ã®CRLãŒè¦‹ã¤ã‹ã‚Šã¾ã›è¨¼æ˜Žæ›¸ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/system_crlmanager.php:435 +#: usr/local/www/system_crlmanager.php:468 +#: usr/local/www/system_crlmanager.php:468 +msgid "Do you really want to delete this Certificate from the CRL?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€CRLã‹ã‚‰ã“ã®è¨¼æ˜Žæ›¸ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_crlmanager.php:436 +#: usr/local/www/system_crlmanager.php:469 +#: usr/local/www/system_crlmanager.php:469 +msgid "Delete this certificate from the CRL " +msgstr "CRLã‹ã‚‰ã“ã®è¨¼æ˜Žæ›¸ã‚’削除ã™ã‚‹" + +#: usr/local/www/system_crlmanager.php:453 +#: usr/local/www/system_crlmanager.php:486 +#: usr/local/www/system_crlmanager.php:486 +msgid "No Certificates Found for this CA." +msgstr "ã“ã®CAãŒè¦‹ã¤ã‹ã‚Šã¾ã›è¨¼æ˜Žæ›¸ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/system_crlmanager.php:460 +#: usr/local/www/system_crlmanager.php:493 +#: usr/local/www/system_crlmanager.php:493 +msgid "Choose a Certificate to Revoke" +msgstr "å–り消ã™ã«ã¯ã€è¨¼æ˜Žæ›¸ã‚’é¸æŠžã—ã¦ãã ã•ã„" + +#: usr/local/www/system_crlmanager.php:465 +#: usr/local/www/system_crlmanager.php:498 +#: usr/local/www/system_crlmanager.php:498 +msgid "Reason" +msgstr "ç†ç”±" + +#: usr/local/www/system_crlmanager.php:527 +#: usr/local/www/system_crlmanager.php:560 +#: usr/local/www/system_crlmanager.php:568 +#: usr/local/www/system_crlmanager.php:568 +#, php-format +msgid "Add or Import CRL for %s" +msgstr "%sãŸã‚ã«è¿½åŠ ã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã€CRL" + +#: usr/local/www/system_crlmanager.php:527 +#: usr/local/www/system_crlmanager.php:531 +#: usr/local/www/system_crlmanager.php:560 +#: usr/local/www/system_crlmanager.php:564 +#: usr/local/www/system_crlmanager.php:568 +#: usr/local/www/system_crlmanager.php:572 +#: usr/local/www/system_crlmanager.php:568 +#: usr/local/www/system_crlmanager.php:572 +msgid "add crl" +msgstr "CRLを追加" + +#: usr/local/www/system_crlmanager.php:531 +#: usr/local/www/system_crlmanager.php:564 +#: usr/local/www/system_crlmanager.php:572 +#: usr/local/www/system_crlmanager.php:572 +#, php-format +msgid "Import CRL for %s" +msgstr "%sã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆCRL" + +#: usr/local/www/system_crlmanager.php:552 +#: usr/local/www/system_crlmanager.php:585 +#: usr/local/www/system_crlmanager.php:593 +#: usr/local/www/system_crlmanager.php:593 +msgid "Export CRL" +msgstr "輸出CRL" + +#: usr/local/www/system_crlmanager.php:557 +#: usr/local/www/system_crlmanager.php:590 +#: usr/local/www/system_crlmanager.php:594 +#: usr/local/www/system_crlmanager.php:598 +#: usr/local/www/system_crlmanager.php:602 +#: usr/local/www/system_crlmanager.php:598 +#: usr/local/www/system_crlmanager.php:602 +msgid "Edit CRL" +msgstr "編集CRL" + +#: usr/local/www/system_crlmanager.php:561 +#: usr/local/www/system_crlmanager.php:598 +#: usr/local/www/system_crlmanager.php:606 +#: usr/local/www/system_crlmanager.php:606 +msgid "Do you really want to delete this Certificate Revocation List?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®è¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆã‚’å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_crlmanager.php:562 +#: usr/local/www/system_crlmanager.php:599 +#: usr/local/www/system_crlmanager.php:607 +#: usr/local/www/system_crlmanager.php:607 +msgid "Delete CRL" +msgstr "CRLを削除" + +#: usr/local/www/system_crlmanager.php:582 +#: usr/local/www/system_crlmanager.php:619 +#: usr/local/www/system_crlmanager.php:531 +#: usr/local/www/system_crlmanager.php:531 +msgid "Additional Certificate Revocation Lists can be added here." +msgstr "追加ã®è¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆã¯ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/system_gateway_groups.php:75 +#: usr/local/www/system_gateway_groups.php:76 +#: usr/local/www/system_gateway_groups.php:85 +#: usr/local/www/system_gateway_groups.php:85 +msgid "removed gateway group" +msgstr "削除ゲートウェイ·グループ" + +#: usr/local/www/system_gateway_groups.php:101 +#: usr/local/www/system_gateway_groups.php:102 +#: usr/local/www/system_gateway_groups.php:111 +#: usr/local/www/system_gateway_groups.php:111 +#, php-format +msgid "" +"The gateway configuration has been changed.%sYou must apply the changes in " +"order for them to take effect." +msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚「ゲートウェイ設定ã¯changed.%sYouãŒã§å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã—ãŸã€ 。" + +#: usr/local/www/system_gateway_groups.php:165 +#: usr/local/www/system_gateway_groups.php:166 +#: usr/local/www/system_gateway_groups.php:187 +#: usr/local/www/system_gateway_groups.php:187 +msgid "Do you really want to delete this gateway group?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤Â·ã‚°ãƒ«ãƒ¼ãƒ—を削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_gateway_groups.php:195 +#: usr/local/www/system_gateway_groups.php:196 +#: usr/local/www/system_gateway_groups.php:205 +#: usr/local/www/system_gateway_groups.php:205 +msgid "" +"Remember to use these Gateway Groups in firewall rules in order to enable " +"load balancing, failover, or policy-based routing. Without rules directing " +"traffic into the Gateway Groups, they will not be used." +msgstr "ロードãƒãƒ©ãƒ³ã‚·ãƒ³ã‚°ã€ãƒ•ェイルオーãƒãƒ¼ã€ã¾ãŸã¯ãƒãƒªã‚·ãƒ¼ãƒ™ãƒ¼ã‚¹ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã€ã‚’有効ã«ã™ã‚‹ãŸã‚ã«ã€ãƒ•ァイアウォールã®ãƒ«ãƒ¼ãƒ«ã§ã“れらã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚°ãƒ«ãƒ¼ãƒ—を使用ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„〠。ゲートウェイグループã«ã€Œãƒˆãƒ©ãƒ•ィックを導ãルールãŒãªã‘れã°ã€ãれらã¯ä½¿ç”¨ã•れã¾ã›ã‚“。" + +#: usr/local/www/system_gateway_groups_edit.php:50 +#: usr/local/www/system_gateway_groups_edit.php:53 +#: usr/local/www/system_gateway_groups_edit.php:53 +msgid "Member Down" +msgstr "メンãƒãƒ¼ãƒ€ã‚¦ãƒ³" + +#: usr/local/www/system_gateway_groups_edit.php:51 +#: usr/local/www/system_gateway_groups_edit.php:54 +#: usr/local/www/system_gateway_groups_edit.php:54 +msgid "Packet Loss" +msgstr "パケットロス" + +#: usr/local/www/system_gateway_groups_edit.php:52 +#: usr/local/www/system_gateway_groups_edit.php:55 +#: usr/local/www/system_gateway_groups_edit.php:55 +msgid "High Latency" +msgstr "高é…å»¶" + +#: usr/local/www/system_gateway_groups_edit.php:53 +#: usr/local/www/system_gateway_groups_edit.php:56 +#: usr/local/www/system_gateway_groups_edit.php:56 +msgid "Packet Loss or High Latency" +msgstr "パケットæå¤±ã¾ãŸã¯é«˜ã„レイテンシ" + +#: usr/local/www/system_gateway_groups_edit.php:85 +#: usr/local/www/system_gateway_groups_edit.php:88 +#: usr/local/www/system_gateway_groups_edit.php:88 +msgid "A valid gateway group name must be specified." +msgstr "有効ãªã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤Â·ã‚°ãƒ«ãƒ¼ãƒ—åを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_gateway_groups_edit.php:88 +#: usr/local/www/system_gateways_edit.php:106 +#: usr/local/www/system_gateway_groups_edit.php:91 +#: usr/local/www/system_gateways_edit.php:107 +#: usr/local/www/system_gateways_edit.php:108 +#: usr/local/www/system_gateways_edit.php:108 +#: usr/local/www/system_gateway_groups_edit.php:91 +msgid "The gateway name must not contain invalid characters." +msgstr "ゲートウェイåã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_gateway_groups_edit.php:99 +#: usr/local/www/system_gateway_groups_edit.php:102 +#: usr/local/www/system_gateway_groups_edit.php:105 +#: usr/local/www/system_gateway_groups_edit.php:105 +#, php-format +msgid "A gateway group with this name "%s" already exists." +msgstr "ã“ã®åå‰ã€Œ %s ã€ã¨ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤Â·ã‚°ãƒ«ãƒ¼ãƒ—ãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_gateway_groups_edit.php:115 +#: usr/local/www/system_gateway_groups_edit.php:119 +#: usr/local/www/system_gateway_groups_edit.php:122 +#: usr/local/www/system_gateway_groups_edit.php:122 +#, php-format +msgid "" +"A gateway group cannot have the same name with a gateway "%s" please " +"choose another name." +msgstr "「ゲートウェイ·グループã¯ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã¨åŒã˜åå‰ã‚’æŒã¤ã“ã¨ã¯ã§ãã¾ã›ã‚“""ãã ã•ã„ã€åˆ¥ã®åå‰ã‚’é¸æŠžã—%s 。" + +#: usr/local/www/system_gateway_groups_edit.php:119 +#: usr/local/www/system_gateway_groups_edit.php:123 +#: usr/local/www/system_gateway_groups_edit.php:126 +#: usr/local/www/system_gateway_groups_edit.php:126 +msgid "No gateway(s) have been selected to be used in this group" +msgstr "ã¾ã ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ï¼ˆè¤‡æ•°å¯ï¼‰ã¯ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—内ã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã«é¸æŠžã•れã¦ã„ãªã„" + +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/system_gateways_edit.php:344 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/system_gateways_edit.php:350 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/system_gateways_edit.php:456 +#: usr/local/www/system_gateways_edit.php:458 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_gateways_edit.php:488 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_gateways_edit.php:488 +msgid "Edit gateway" +msgstr "編集ゲートウェイ" + +#: usr/local/www/system_gateway_groups_edit.php:155 +#: usr/local/www/system_gateway_groups_edit.php:166 +#: usr/local/www/system_gateway_groups_edit.php:225 +msgid "Edit gateway entry" +msgstr "編集ゲートウェイエントリ" + +#: usr/local/www/system_gateway_groups_edit.php:164 +#: usr/local/www/system_gateway_groups_edit.php:175 +#: usr/local/www/system_gateway_groups_edit.php:234 +#: usr/local/www/system_gateway_groups_edit.php:238 +#: usr/local/www/system_gateway_groups_edit.php:238 +msgid "Gateway Priority" +msgstr "ゲートウェイã®å„ªå…ˆé †ä½" + +#: usr/local/www/system_gateway_groups_edit.php:185 +#: usr/local/www/system_gateway_groups_edit.php:208 +#: usr/local/www/system_gateway_groups_edit.php:268 +#: usr/local/www/system_gateway_groups_edit.php:272 +#: usr/local/www/system_gateway_groups_edit.php:272 +msgid "Never" +msgstr "決ã—ã¦" + +#: usr/local/www/system_gateway_groups_edit.php:186 +#: usr/local/www/system_gateway_groups_edit.php:209 +#: usr/local/www/system_gateway_groups_edit.php:269 +#: usr/local/www/system_gateway_groups_edit.php:273 +#: usr/local/www/system_gateway_groups_edit.php:273 +msgid "Tier 1" +msgstr "ティア1" + +#: usr/local/www/system_gateway_groups_edit.php:187 +#: usr/local/www/system_gateway_groups_edit.php:210 +#: usr/local/www/system_gateway_groups_edit.php:270 +#: usr/local/www/system_gateway_groups_edit.php:274 +#: usr/local/www/system_gateway_groups_edit.php:274 +msgid "Tier 2" +msgstr "ティア2" + +#: usr/local/www/system_gateway_groups_edit.php:188 +#: usr/local/www/system_gateway_groups_edit.php:211 +#: usr/local/www/system_gateway_groups_edit.php:271 +#: usr/local/www/system_gateway_groups_edit.php:275 +#: usr/local/www/system_gateway_groups_edit.php:275 +msgid "Tier 3" +msgstr "ティア3" + +#: usr/local/www/system_gateway_groups_edit.php:189 +#: usr/local/www/system_gateway_groups_edit.php:212 +#: usr/local/www/system_gateway_groups_edit.php:272 +#: usr/local/www/system_gateway_groups_edit.php:276 +#: usr/local/www/system_gateway_groups_edit.php:276 +msgid "Tier 4" +msgstr "ティア4" + +#: usr/local/www/system_gateway_groups_edit.php:190 +#: usr/local/www/system_gateway_groups_edit.php:213 +#: usr/local/www/system_gateway_groups_edit.php:273 +#: usr/local/www/system_gateway_groups_edit.php:277 +#: usr/local/www/system_gateway_groups_edit.php:277 +msgid "Tier 5" +msgstr "ティア5" + +#: usr/local/www/system_gateway_groups_edit.php:195 +#: usr/local/www/system_gateway_groups_edit.php:247 +#: usr/local/www/system_gateway_groups_edit.php:307 +#: usr/local/www/system_gateway_groups_edit.php:311 +#: usr/local/www/system_gateway_groups_edit.php:311 +msgid "Link Priority" +msgstr "リンク優先順ä½" + +#: usr/local/www/system_gateway_groups_edit.php:196 +#: usr/local/www/system_gateway_groups_edit.php:248 +#: usr/local/www/system_gateway_groups_edit.php:308 +#: usr/local/www/system_gateway_groups_edit.php:312 +#: usr/local/www/system_gateway_groups_edit.php:312 +msgid "" +"The priority selected here defines in what order failover and balancing of " +"links will be done. Multiple links of the same priority will balance " +"connections until all links in the priority will be exhausted. If all links " +"in a priority level are exhausted we will use the next available link(s) in " +"the next priority level." +msgstr "リンクãŒè¡Œã‚れã¾ã™"ã“ã“ã§é¸æŠžã®å„ªå…ˆé †ä½ã¯ã©ã®ã‚ˆã†ãªé †åºãƒ•ェイルオーãƒãƒ¼ã¨ã®ãƒãƒ©ãƒ³ã‚¹ã§å®šç¾©ã™ã‚‹ã€Œ 。 「優先内ã®ã™ã¹ã¦ã®ãƒªãƒ³ã‚¯ãŒæž¯æ¸‡ã™ã‚‹ã¾ã§ã€æŽ¥ç¶šã‚’。ã™ã¹ã¦ã®ãƒªãƒ³ã‚¯ãŒã€ŒåŒã˜å„ªå…ˆé †ä½ã®è¤‡æ•°ã®ãƒªãƒ³ã‚¯ãŒãƒãƒ©ãƒ³ã‚¹ã•優先レベルã®ãŒã€æˆ‘ã€…ã¯æ¬¡ã®å„ªå…ˆåº¦ãƒ¬ãƒ™ãƒ«ã€å†…ã®æ¬¡ã«ä½¿ç”¨å¯èƒ½ãªãƒªãƒ³ã‚¯ï¼ˆ S )を使用ã—ã¾ã™æŽ’æ°—ã•れる。" + +#: usr/local/www/system_gateway_groups_edit.php:205 +#: usr/local/www/system_gateway_groups_edit.php:260 +#: usr/local/www/system_gateway_groups_edit.php:320 +#: usr/local/www/system_gateway_groups_edit.php:322 +#: usr/local/www/system_gateway_groups_edit.php:322 +msgid "Trigger Level" +msgstr "トリガレベル" + +#: usr/local/www/system_gateway_groups_edit.php:216 +#: usr/local/www/system_gateway_groups_edit.php:271 +#: usr/local/www/system_gateway_groups_edit.php:331 +#: usr/local/www/system_gateway_groups_edit.php:333 +#: usr/local/www/system_gateway_groups_edit.php:333 +msgid "When to trigger exclusion of a member" +msgstr "メンãƒãƒ¼ã®é™¤å¤–をトリガーã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°" + +#: usr/local/www/system_gateways.php:134 usr/local/www/system_gateways.php:134 +msgid "The gateway configuration has been changed." +msgstr "ゲートウェイã®è¨­å®šãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚" + +#: usr/local/www/system_gateways.php:155 +#: usr/local/www/system_gateways_edit.php:398 +#: usr/local/www/system_gateways_edit.php:419 +#: usr/local/www/system_gateways_edit.php:525 +#: usr/local/www/system_gateways_edit.php:529 +#: usr/local/www/system_gateways_edit.php:531 +#: usr/local/www/system_gateways_edit.php:561 +#: usr/local/www/system_gateways_edit.php:561 +#: usr/local/www/system_gateways.php:155 +msgid "Monitor IP" +msgstr "監視IP" + +#: usr/local/www/system_gateways.php:205 usr/local/www/system_gateways.php:205 +msgid "Do you really want to delete this gateway?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_gateways_edit.php:110 +#: usr/local/www/system_gateways_edit.php:111 +#: usr/local/www/system_gateways_edit.php:112 +#: usr/local/www/system_gateways_edit.php:112 +msgid "A valid gateway IP address must be specified." +msgstr "有効ãªã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_gateways_edit.php:118 +#: usr/local/www/system_gateways_edit.php:119 +#: usr/local/www/system_gateways_edit.php:120 +#: usr/local/www/system_gateways_edit.php:133 +#: usr/local/www/system_gateways_edit.php:148 +#: usr/local/www/system_gateways_edit.php:148 +msgid "You can not use a IPv6 Gateway Address on a IPv4 only interface." +msgstr "ã‚ãªãŸã¯ã€IPv4ã®ã¿ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã§IPv6ゲートウェイアドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:122 +#: usr/local/www/system_gateways_edit.php:133 +#: usr/local/www/system_gateways_edit.php:123 +#: usr/local/www/system_gateways_edit.php:136 +#: usr/local/www/system_gateways_edit.php:124 +#: usr/local/www/system_gateways_edit.php:137 +#, php-format +msgid "" +"The gateway address %1$s does not lie within the chosen interface's subnet " +"'%2$s'." +msgstr "「 %2$s 〠「ゲートウェイアドレスã¯%1$sã¯ã€é¸æŠžã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ã‚µãƒ–ãƒãƒƒãƒˆå†…ã«ãªã„〠。" + +#: usr/local/www/system_gateways_edit.php:129 +#: usr/local/www/system_gateways_edit.php:132 +#: usr/local/www/system_gateways_edit.php:133 +#: usr/local/www/system_gateways_edit.php:120 +#: usr/local/www/system_gateways_edit.php:120 +msgid "You can not use a IPv4 Gateway Address on a IPv6 only interface." +msgstr "ã‚ãªãŸã¯ã€IPv6ã®ã¿ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã§IPv4ゲートウェイアドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:139 +#: usr/local/www/system_gateways_edit.php:143 +#: usr/local/www/system_gateways_edit.php:144 +#: usr/local/www/system_gateways_edit.php:174 +#: usr/local/www/system_gateways_edit.php:174 +msgid "" +"Dynamic gateway values cannot be specified for interfaces with a static IPv4 " +"configuration." +msgstr "æ§‹æˆã®ã€Œå‹•的ゲートウェイ値ã¯ã€é™çš„IPv4ã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースを指定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/system_gateways_edit.php:143 +#: usr/local/www/system_gateways_edit.php:147 +#: usr/local/www/system_gateways_edit.php:148 +#: usr/local/www/system_gateways_edit.php:178 +#: usr/local/www/system_gateways_edit.php:178 +msgid "" +"Dynamic gateway values cannot be specified for interfaces with a static IPv6 " +"configuration." +msgstr "æ§‹æˆã®ã€Œå‹•的ゲートウェイ値ã¯ã€é™çš„IPv6ã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースを指定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/system_gateways_edit.php:147 +#: usr/local/www/system_gateways_edit.php:151 +#: usr/local/www/system_gateways_edit.php:152 +#: usr/local/www/system_gateways_edit.php:182 +#: usr/local/www/system_gateways_edit.php:182 +msgid "A valid monitor IP address must be specified." +msgstr "有効ãªç›£è¦–IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_gateways_edit.php:160 +#: usr/local/www/system_gateways_edit.php:168 +#: usr/local/www/system_gateways_edit.php:178 +#: usr/local/www/system_gateways_edit.php:208 +#: usr/local/www/system_gateways_edit.php:208 +msgid "Changing name on a gateway is not allowed." +msgstr "ゲートウェイ上ã®å¤‰æ›´åãŒè¨±å¯ã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:165 +#: usr/local/www/system_gateways_edit.php:173 +#: usr/local/www/system_gateways_edit.php:183 +#: usr/local/www/system_gateways_edit.php:213 +#: usr/local/www/system_gateways_edit.php:213 +#, php-format +msgid "The gateway name "%s" already exists." +msgstr "ゲートウェイå〠%s "ã¯ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_gateways_edit.php:171 +#: usr/local/www/system_gateways_edit.php:179 +#: usr/local/www/system_gateways_edit.php:189 +#: usr/local/www/system_gateways_edit.php:219 +#: usr/local/www/system_gateways_edit.php:219 +#, php-format +msgid "The gateway IP address "%s" already exists." +msgstr "ゲートウェイIPアドレス〠%s "ã¯ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_gateways_edit.php:177 +#: usr/local/www/system_gateways_edit.php:185 +#: usr/local/www/system_gateways_edit.php:195 +#: usr/local/www/system_gateways_edit.php:225 +#: usr/local/www/system_gateways_edit.php:225 +#, php-format +msgid "" +"The monitor IP address "%s" is already in use. You must choose a different " +"monitor IP." +msgstr "「モニタIPアドレス "%sã¯ã€Œæ—¢ã«ä½¿ç”¨ã•れã¦ã„る。別ã®é¸æŠžã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“"監視IPを。" + +#: usr/local/www/system_gateways_edit.php:187 +#: usr/local/www/system_gateways_edit.php:220 +#: usr/local/www/system_gateways_edit.php:195 +#: usr/local/www/system_gateways_edit.php:228 +msgid "The low latency watermark needs to be a numeric value." +msgstr "低é…å»¶é€ã‹ã—ã¯æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:193 +#: usr/local/www/system_gateways_edit.php:201 +msgid "The high latency watermark needs to be a numeric value." +msgstr "高é…å»¶é€ã‹ã—ã¯æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:198 +#: usr/local/www/system_gateways_edit.php:206 +msgid "The low loss watermark needs to be a numeric value." +msgstr "低æå¤±é€ã‹ã—ã¯æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:203 +#: usr/local/www/system_gateways_edit.php:211 +msgid "The high loss watermark needs to be a numeric value." +msgstr "高æå¤±é€ã‹ã—ã¯æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:209 +#: usr/local/www/system_gateways_edit.php:217 +msgid "" +"The High latency watermark needs to be higher then the low latency watermark" +msgstr "「高レイテンシã®é€ã‹ã—ã¯ã€ä½Žãƒ¬ã‚¤ãƒ†ãƒ³ã‚·Â·ã‚¦ã‚©ãƒ¼ã‚¿ãƒ¼ãƒžãƒ¼ã‚¯ã‚ˆã‚Šé«˜ã„ã“ã¨ãŒå¿…è¦ã§ã‚ã‚‹" + +#: usr/local/www/system_gateways_edit.php:215 +#: usr/local/www/system_gateways_edit.php:223 +msgid "" +"The High packet loss watermark needs to be higher then the low packet loss " +"watermark" +msgstr "é€ã‹ã—を​​「高パケットæå¤±ã®é€ã‹ã—ã¯ã€ä½Žãƒ‘ケットæå¤±ã‚ˆã‚Šé«˜ã„ã“ã¨ãŒå¿…è¦ã§ã‚ã‚‹"" + +#: usr/local/www/system_gateways_edit.php:363 +#: usr/local/www/system_gateways_edit.php:369 +#: usr/local/www/system_gateways_edit.php:475 +#: usr/local/www/system_gateways_edit.php:474 +#: usr/local/www/system_gateways_edit.php:476 +#: usr/local/www/system_gateways_edit.php:506 +#: usr/local/www/system_gateways_edit.php:506 +msgid "Use BGPD" +msgstr "bgpdをを使用ã—ã¦ãã ã•ã„" + +#: usr/local/www/system_gateways_edit.php:367 +#: usr/local/www/system_gateways_edit.php:373 +#: usr/local/www/system_gateways_edit.php:479 +#: usr/local/www/system_gateways_edit.php:478 +#: usr/local/www/system_gateways_edit.php:480 +#: usr/local/www/system_gateways_edit.php:510 +#: usr/local/www/system_gateways_edit.php:510 +msgid "Choose which interface this gateway applies to." +msgstr "é¸æŠžã—ã¦ã„るインターフェイスã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ãŒé©ç”¨ã•れる。" + +#: usr/local/www/system_gateways_edit.php:373 +#: usr/local/www/system_gateways_edit.php:394 +#: usr/local/www/system_gateways_edit.php:500 +#: usr/local/www/system_gateways_edit.php:502 +#: usr/local/www/system_gateways_edit.php:504 +#: usr/local/www/system_gateways_edit.php:534 +#: usr/local/www/system_gateways_edit.php:534 +msgid "Gateway name" +msgstr "ゲートウェイå" + +#: usr/local/www/system_gateways_edit.php:379 +#: usr/local/www/system_gateways_edit.php:400 +#: usr/local/www/system_gateways_edit.php:506 +#: usr/local/www/system_gateways_edit.php:509 +#: usr/local/www/system_gateways_edit.php:511 +#: usr/local/www/system_gateways_edit.php:541 +#: usr/local/www/system_gateways_edit.php:541 +msgid "Gateway IP address" +msgstr "ゲートウェイIPアドレス" + +#: usr/local/www/system_gateways_edit.php:382 +#: usr/local/www/system_gateways_edit.php:385 +#: usr/local/www/system_gateways_edit.php:403 +#: usr/local/www/system_gateways_edit.php:406 +#: usr/local/www/system_gateways_edit.php:509 +#: usr/local/www/system_gateways_edit.php:512 +#: usr/local/www/system_gateways_edit.php:513 +#: usr/local/www/system_gateways_edit.php:516 +#: usr/local/www/system_gateways_edit.php:515 +#: usr/local/www/system_gateways_edit.php:518 +#: usr/local/www/system_gateways_edit.php:545 +#: usr/local/www/system_gateways_edit.php:548 +#: usr/local/www/system_gateways_edit.php:545 +#: usr/local/www/system_gateways_edit.php:548 +msgid "Default Gateway" +msgstr "デフォルトゲートウェイ" + +#: usr/local/www/system_gateways_edit.php:386 +#: usr/local/www/system_gateways_edit.php:407 +#: usr/local/www/system_gateways_edit.php:513 +#: usr/local/www/system_gateways_edit.php:517 +#: usr/local/www/system_gateways_edit.php:519 +#: usr/local/www/system_gateways_edit.php:549 +#: usr/local/www/system_gateways_edit.php:549 +msgid "This will select the above gateway as the default gateway" +msgstr "ã“れãŒãƒ‡ãƒ•ォルトゲートウェイã¨ã—ã¦ä¸Šè¨˜ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã—ã¾ã™" + +#: usr/local/www/system_gateways_edit.php:390 +#: usr/local/www/system_gateways_edit.php:393 +#: usr/local/www/system_gateways_edit.php:411 +#: usr/local/www/system_gateways_edit.php:414 +#: usr/local/www/system_gateways_edit.php:517 +#: usr/local/www/system_gateways_edit.php:520 +#: usr/local/www/system_gateways_edit.php:521 +#: usr/local/www/system_gateways_edit.php:524 +#: usr/local/www/system_gateways_edit.php:523 +#: usr/local/www/system_gateways_edit.php:526 +#: usr/local/www/system_gateways_edit.php:553 +#: usr/local/www/system_gateways_edit.php:556 +#: usr/local/www/system_gateways_edit.php:553 +#: usr/local/www/system_gateways_edit.php:556 +msgid "Disable Gateway Monitoring" +msgstr "ゲートウェイã®ç›£è¦–を無効ã«" + +#: usr/local/www/system_gateways_edit.php:394 +#: usr/local/www/system_gateways_edit.php:415 +#: usr/local/www/system_gateways_edit.php:521 +#: usr/local/www/system_gateways_edit.php:525 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/system_gateways_edit.php:557 +#: usr/local/www/system_gateways_edit.php:557 +msgid "This will consider this gateway as always being up" +msgstr "ã“れã¯ã€å¸¸ã«ã€æœ€å¤§ã§ã‚ã‚‹ã¨ã—ã¦ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’検討ã—ã¾ã™" + +#: usr/local/www/system_gateways_edit.php:407 +#: usr/local/www/system_gateways_edit.php:428 +#: usr/local/www/system_gateways_edit.php:534 +#: usr/local/www/system_gateways_edit.php:538 +#: usr/local/www/system_gateways_edit.php:540 +#: usr/local/www/system_gateways_edit.php:570 +#: usr/local/www/system_gateways_edit.php:570 +msgid "Alternative monitor IP" +msgstr "代替監視IP" + +#: usr/local/www/system_gateways_edit.php:408 +#: usr/local/www/system_gateways_edit.php:429 +#: usr/local/www/system_gateways_edit.php:535 +#: usr/local/www/system_gateways_edit.php:539 +#: usr/local/www/system_gateways_edit.php:541 +#: usr/local/www/system_gateways_edit.php:571 +#: usr/local/www/system_gateways_edit.php:571 +msgid "" +"Enter an alternative address here to be used to monitor the link. This is " +"used for the quality RRD graphs as well as the load balancer entries. Use " +"this if the gateway does not respond to ICMP echo requests (pings)" +msgstr "「リンクを監視ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã“ã“ã«ä»£æ›¿ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。ã“れãŒã•れã¦ã„る「å“質ã®RRDグラフã ã‘ã§ãªãã€ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã®ã‚¨ãƒ³ãƒˆãƒªã«ä½¿ç”¨ã€‚ゲートウェイãŒICMPã‚¨ã‚³ãƒ¼è¦æ±‚ã«å¿œç­”ã—ãªã„å ´åˆã¯ã€ã€Œã“れを使用(ã®ping )" + +#: usr/local/www/system_gateways_edit.php:436 +#: usr/local/www/system_gateways_edit.php:457 +#: usr/local/www/system_gateways_edit.php:563 +#: usr/local/www/system_gateways_edit.php:567 +#: usr/local/www/system_gateways_edit.php:569 +#: usr/local/www/system_gateways_edit.php:599 +#: usr/local/www/system_gateways_edit.php:599 +msgid "Weight for this gateway when used in a Gateway Group." +msgstr "ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã®é‡ã¿ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤Â·ã‚°ãƒ«ãƒ¼ãƒ—ã§ä½¿ç”¨ã•れる。" + +#: usr/local/www/system_gateways_edit.php:440 +#: usr/local/www/system_gateways_edit.php:461 +#: usr/local/www/system_gateways_edit.php:567 +#: usr/local/www/system_gateways_edit.php:571 +#: usr/local/www/system_gateways_edit.php:573 +#: usr/local/www/system_gateways_edit.php:603 +#: usr/local/www/system_gateways_edit.php:603 +msgid "Latency thresholds" +msgstr "å¾…ã¡æ™‚é–“ã®ã—ãã„値" + +#: usr/local/www/system_gateways_edit.php:448 +#: usr/local/www/system_gateways_edit.php:469 +msgid "" +"These define the low and high water marks for latency in milliseconds. " +"Default is 100/200." +msgstr "「ã“れらã¯ãƒŸãƒªç§’ã®ãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ã®ãŸã‚ã®ãƒ­ãƒ¼ã¨ãƒã‚¤ã‚¦ã‚©ãƒ¼ã‚¿ãƒ¼ãƒžãƒ¼ã‚¯ã‚’定義ã—ã¾ã™ã€‚ 「デフォルトã¯100/200ã§ã™ã€‚" + +#: usr/local/www/system_gateways_edit.php:452 +#: usr/local/www/system_gateways_edit.php:473 +#: usr/local/www/system_gateways_edit.php:579 +#: usr/local/www/system_gateways_edit.php:583 +#: usr/local/www/system_gateways_edit.php:585 +#: usr/local/www/system_gateways_edit.php:615 +#: usr/local/www/system_gateways_edit.php:615 +msgid "Packet Loss thresholds" +msgstr "パケットæå¤±ã®ã—ãã„値" + +#: usr/local/www/system_gateways_edit.php:460 +#: usr/local/www/system_gateways_edit.php:481 +msgid "" +"These define the low and high water marks for packet loss in %. Default is " +"10/20." +msgstr "「ã“れらã¯ï¼…ã§ãƒ‘ケットæå¤±ã®ä½ŽåŸŸã¨é«˜ã‚¦ã‚©ãƒ¼ã‚¿ãƒ¼ãƒžãƒ¼ã‚¯ã‚’定義ã—ã¾ã™ã€‚デフォルト㯠"10/20 。" + +#: usr/local/www/system_gateways_edit.php:464 +#: usr/local/www/system_gateways_edit.php:496 +#: usr/local/www/system_gateways_edit.php:602 +#: usr/local/www/system_gateways_edit.php:606 +#: usr/local/www/system_gateways_edit.php:608 +#: usr/local/www/system_gateways_edit.php:638 +#: usr/local/www/system_gateways_edit.php:638 +msgid "Down" +msgstr "ダウン" + +#: usr/local/www/system_gateways_edit.php:468 +msgid "" +"This defines the down time for the alarm to fire in seconds. Default is 10." +msgstr "「ã“れã¯ã€ç§’å˜ä½ã§ç™ºå°„ã™ã‚‹ã‚¢ãƒ©ãƒ¼ãƒ ã®åœæ­¢æ™‚間を定義ã—ã¾ã™ã€‚デフォルトã¯10ã§ã™ã€‚" + +#: usr/local/www/system_gateways_edit.php:472 +#: usr/local/www/system_gateways_edit.php:485 +#: usr/local/www/system_gateways_edit.php:591 +#: usr/local/www/system_gateways_edit.php:595 +#: usr/local/www/system_gateways_edit.php:597 +#: usr/local/www/system_gateways_edit.php:627 +#: usr/local/www/system_gateways_edit.php:627 +msgid "Frequency Probe" +msgstr "高周波プローブ" + +#: usr/local/www/system_gateways_edit.php:476 +msgid "" +"This defines the frequency that an icmp probe will be sent in seconds. " +"Default is 1." +msgstr "「ã“れã¯ã€ICMPãƒ—ãƒ­ãƒ¼ãƒ–ã¯æ•°ç§’ã§é€ä¿¡ã•れる頻度を定義ã—ã¾ã™ã€‚ 「デフォルトã¯1ã§ã™ã€‚" + +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/system_groupmanager_addprivs.php:56 +msgid "Group manager" +msgstr "グループマãƒãƒ¼ã‚¸ãƒ£ãƒ¼" + +#: usr/local/www/system_groupmanager.php:72 +#: usr/local/www/system_groupmanager.php:96 +#: usr/local/www/system_usermanager.php:90 +#: usr/local/www/system_usermanager.php:105 +#: usr/local/www/system_groupmanager.php:72 +#: usr/local/www/system_groupmanager.php:96 +#: usr/local/www/system_usermanager.php:90 +#: usr/local/www/system_usermanager.php:105 +msgid "successfully deleted" +msgstr "正常ã«å‰Šé™¤" + +#: usr/local/www/system_groupmanager.php:95 +#: usr/local/www/system_usermanager.php:104 +#: usr/local/www/system_groupmanager.php:95 +#: usr/local/www/system_usermanager.php:104 +msgid "Privilege" +msgstr "特権" + +#: usr/local/www/system_groupmanager.php:122 +#: usr/local/www/system_groupmanager.php:122 +msgid "The group name contains invalid characters." +msgstr "グループåã¯ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_groupmanager.php:128 +#: usr/local/www/system_groupmanager.php:128 +msgid "Another entry with the same group name already exists." +msgstr "åŒã˜ã‚°ãƒ«ãƒ¼ãƒ—åã‚’æŒã¤åˆ¥ã®ã‚¨ãƒ³ãƒˆãƒªãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_groupmanager.php:262 +#: usr/local/www/system_usermanager.php:462 +#: usr/local/www/system_usermanager.php:460 +#: usr/local/www/system_groupmanager.php:262 +#: usr/local/www/system_usermanager.php:460 +msgid "Defined by" +msgstr "ã§å®šç¾©ã•れãŸ" + +#: usr/local/www/system_groupmanager.php:269 +#: usr/local/www/system_groupmanager.php:404 +#: usr/local/www/system_groupmanager.php:405 +#: usr/local/www/system_groupmanager.php:269 +#: usr/local/www/system_groupmanager.php:405 +msgid "Group name" +msgstr "グループå" + +#: usr/local/www/system_groupmanager.php:279 +#: usr/local/www/system_groupmanager.php:279 +msgid "Group description, for your own information only" +msgstr "ã‚ãªãŸè‡ªèº«ã®æƒ…å ±ã®ã¿ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®èª¬æ˜Žã€" + +#: usr/local/www/system_groupmanager.php:286 +#: usr/local/www/system_usermanager.php:511 +#: usr/local/www/system_usermanager.php:509 +#: usr/local/www/system_groupmanager.php:286 +#: usr/local/www/system_usermanager.php:509 +msgid "Group Memberships" +msgstr "グループメンãƒãƒ¼ã‚·ãƒƒãƒ—" + +#: usr/local/www/system_groupmanager.php:291 +#: usr/local/www/system_groupmanager.php:291 +msgid "Not Members" +msgstr "ã„ãªã„メンãƒãƒ¼" + +#: usr/local/www/system_groupmanager.php:309 +#: usr/local/www/system_groupmanager.php:309 +msgid "Add Members" +msgstr "メンãƒãƒ¼ã‚’追加" + +#: usr/local/www/system_groupmanager.php:313 +#: usr/local/www/system_groupmanager.php:313 +msgid "Remove Members" +msgstr "メンãƒãƒ¼ã‚’削除" + +#: usr/local/www/system_groupmanager.php:334 +#: usr/local/www/system_groupmanager_addprivs.php:196 +#: usr/local/www/system_usermanager.php:565 +#: usr/local/www/system_usermanager_addprivs.php:193 +#: usr/local/www/system_usermanager.php:563 +#: usr/local/www/system_groupmanager_addprivs.php:194 +#: usr/local/www/system_groupmanager.php:334 +#: usr/local/www/system_usermanager_addprivs.php:193 +#: usr/local/www/system_groupmanager_addprivs.php:194 +#: usr/local/www/system_usermanager.php:563 +msgid "Hold down CTRL (pc)/COMMAND (mac) key to select multiple items" +msgstr "複数ã®é …ç›®ã‚’é¸æŠžã™ã‚‹ã«ã¯ã€CTRL ( PC ) / Commandキー(Mac )キーを押ã—ãŸã¾ã¾" + +#: usr/local/www/system_groupmanager.php:342 +#: usr/local/www/system_groupmanager.php:342 +msgid "Assigned Privileges" +msgstr "割り当ã¦ã‚‰ã‚ŒãŸæ¨©é™" + +#: usr/local/www/system_groupmanager.php:363 +#: usr/local/www/system_usermanager.php:601 +#: usr/local/www/system_usermanager.php:599 +#: usr/local/www/system_groupmanager.php:363 +#: usr/local/www/system_usermanager.php:599 +msgid "Do you really want to delete this privilege?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®æ¨©é™ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_groupmanager.php:406 +#: usr/local/www/system_groupmanager.php:407 +#: usr/local/www/system_groupmanager.php:407 +msgid "Member Count" +msgstr "メンãƒãƒ¼æ•°" + +#: usr/local/www/system_groupmanager.php:447 +#: usr/local/www/system_groupmanager.php:450 +#: usr/local/www/system_groupmanager.php:468 +#: usr/local/www/system_groupmanager.php:468 +msgid "Do you really want to delete this group?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_groupmanager.php:448 +#: usr/local/www/system_groupmanager.php:451 +#: usr/local/www/system_groupmanager.php:469 +#: usr/local/www/system_groupmanager.php:469 +msgid "delete group" +msgstr "グループを削除" + +#: usr/local/www/system_groupmanager.php:460 +#: usr/local/www/system_groupmanager.php:465 +#: usr/local/www/system_groupmanager.php:415 +#: usr/local/www/system_groupmanager.php:415 +msgid "add group" +msgstr "グループを追加" + +#: usr/local/www/system_groupmanager.php:467 +msgid "" +"Additional webConfigurator groups can be added here. \n" +"ttttttttGroup permissions can be assigned which are inherited by " +"users who are members of the group.\n" +"ttttttttAn icon that appears grey indicates that it is a system " +"defined object.\n" +"ttttttttSome system object properties can be modified but they " +"cannot be deleted." +msgstr "「追加webConfiguratorグループã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ \n 〠ttttttttGroup許å¯ãŒç°è‰²ã€ãれãŒã‚·ã‚¹ãƒ†ãƒ ã€ã«å®šç¾©ã•れãŸã‚ªãƒ–ジェクトã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦è¡¨ç¤ºã•れttttttttAnアイコン〠group.\nã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚るユーザーã€ã«ç¶™æ‰¿ã•れã¦å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ \n 「 ttttttttSomeシステムオブジェクトã®ãƒ—ロパティを変更ã§ãã¾ã™ãŒã€ãれらã¯ã€Œå‰Šé™¤ã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/system_groupmanager_addprivs.php:56 +msgid "Add privileges" +msgstr "特権を追加" + +#: usr/local/www/system_groupmanager_addprivs.php:79 +#: usr/local/www/system_usermanager_addprivs.php:84 +#: usr/local/www/system_usermanager_addprivs.php:84 +#: usr/local/www/system_groupmanager_addprivs.php:79 +msgid "Selected priveleges" +msgstr "é¸æŠžã—ãŸpriveleges" + +#: usr/local/www/system_groupmanager_addprivs.php:182 +#: usr/local/www/system_usermanager_addprivs.php:181 +#: usr/local/www/system_groupmanager_addprivs.php:180 +#: usr/local/www/system_usermanager_addprivs.php:181 +#: usr/local/www/system_groupmanager_addprivs.php:180 +msgid "System Privileges" +msgstr "システム権é™" + +#: usr/local/www/system_groupmanager_addprivs.php:218 +#: usr/local/www/system_usermanager_addprivs.php:199 +#: usr/local/www/system_groupmanager_addprivs.php:216 +#: usr/local/www/system_usermanager_addprivs.php:199 +#: usr/local/www/system_groupmanager_addprivs.php:218 +msgid "Select a privilege from the list above for a description" +msgstr "説明ã«ã¤ã„ã¦ã¯ã€ä¸Šè¨˜ã®ãƒªã‚¹ãƒˆã‹ã‚‰æ¨©é™ã‚’é¸æŠž" + +#: usr/local/www/system_usermanager.php:157 +#: usr/local/www/system_usermanager.php:692 +#: usr/local/www/system_usermanager.php:701 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/system_usermanager.php:690 +#: usr/local/www/system_usermanager.php:699 +#: usr/local/www/vpn_openvpn_server.php:287 +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/vpn_openvpn_server.php:288 +#: usr/local/www/vpn_openvpn_client.php:220 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/vpn_openvpn_server.php:309 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/system_usermanager.php:157 +#: usr/local/www/system_usermanager.php:690 +#: usr/local/www/system_usermanager.php:699 +#: usr/local/www/vpn_openvpn_server.php:309 +msgid "Certificate" +msgstr "証明書" + +#: usr/local/www/system_usermanager.php:158 +#: usr/local/www/system_usermanager.php:158 +msgid "association removed." +msgstr "関連付ã‘ã¯å‰Šé™¤ã•れã¾ã™ã€‚" + +#: usr/local/www/system_usermanager.php:202 +#: usr/local/www/system_usermanager.php:202 +msgid "The username is longer than 16 characters." +msgstr "ユーザーåã¯16文字を超ãˆã¦ã„る。" + +#: usr/local/www/system_usermanager.php:226 +#: usr/local/www/system_usermanager.php:226 +msgid "That username is reserved by the system." +msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã«ã‚ˆã£ã¦äºˆç´„ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_usermanager.php:250 +#: usr/local/www/system_usermanager.php:246 +#: usr/local/www/system_usermanager.php:246 +msgid "Invalid expiration date format; use MM/DD/YYYY instead." +msgstr "ç„¡åŠ¹ãªæœ‰åŠ¹æœŸé™ã®æ—¥ä»˜ãƒ•ォーマットã€ä»£ã‚りã«ã€MM / DD / YYYYを使用ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_usermanager.php:257 +#: usr/local/www/system_usermanager.php:253 +#: usr/local/www/system_usermanager.php:253 +msgid "Invalid internal Certificate Authority" +msgstr "無効ãªå†…部èªè¨¼å±€" + +#: usr/local/www/system_usermanager.php:489 +#: usr/local/www/system_usermanager_passwordmg.php:109 +#: usr/local/www/system_usermanager.php:487 +#: usr/local/www/system_usermanager_passwordmg.php:110 +#: usr/local/www/system_usermanager_passwordmg.php:115 +#: usr/local/www/system_usermanager_passwordmg.php:115 +#: usr/local/www/system_usermanager.php:487 +msgid "(confirmation)" +msgstr "(確èªï¼‰" + +#: usr/local/www/system_usermanager.php:493 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/system_usermanager.php:491 +#: usr/local/www/system_usermanager.php:786 +#: usr/local/www/system_usermanager.php:787 +#: usr/local/www/system_usermanager.php:491 +#: usr/local/www/system_usermanager.php:787 +msgid "Full name" +msgstr "フルãƒãƒ¼ãƒ " + +#: usr/local/www/system_usermanager.php:497 +#: usr/local/www/system_usermanager.php:495 +#: usr/local/www/system_usermanager.php:495 +msgid "User's full name, for your own information only" +msgstr "ã‚ãªãŸè‡ªèº«ã®æƒ…å ±ã®ã¿ã®ãŸã‚ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ°åã€" + +#: usr/local/www/system_usermanager.php:501 +#: usr/local/www/system_usermanager.php:499 +#: usr/local/www/system_usermanager.php:499 +msgid "Expiration date" +msgstr "有効期é™" + +#: usr/local/www/system_usermanager.php:505 +#: usr/local/www/system_usermanager.php:503 +#: usr/local/www/system_usermanager.php:503 +msgid "Pick a date" +msgstr "æ—¥ä»˜ã‚’é¸æŠžã™ã‚‹" + +#: usr/local/www/system_usermanager.php:508 +#: usr/local/www/system_usermanager.php:506 +#: usr/local/www/system_usermanager.php:506 +msgid "" +"Leave blank if the account shouldn't expire, otherwise enter the expiration " +"date in the following format: mm/dd/yyyy" +msgstr "次ã®å½¢å¼ã§æ—¥ä»˜"ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã¦ã„ãªã„ã‹ã©ã†ã‹ãã†ã§ãªã„有効期é™ã‚’入力ã—ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€ : MM / DD / YYYY" + +#: usr/local/www/system_usermanager.php:516 +#: usr/local/www/system_usermanager.php:514 +#: usr/local/www/system_usermanager.php:514 +msgid "Not Member Of" +msgstr "ã®ãƒ¡ãƒ³ãƒãƒ¼ã˜ã‚ƒãªã„ã®" + +#: usr/local/www/system_usermanager.php:536 +#: usr/local/www/system_usermanager.php:534 +#: usr/local/www/system_usermanager.php:534 +msgid "Add Groups" +msgstr "グループã®è¿½åŠ " + +#: usr/local/www/system_usermanager.php:540 +#: usr/local/www/system_usermanager.php:538 +#: usr/local/www/system_usermanager.php:538 +msgid "Remove Groups" +msgstr "グループを削除ã™ã‚‹" + +#: usr/local/www/system_usermanager.php:544 +#: usr/local/www/system_usermanager.php:542 +#: usr/local/www/system_usermanager.php:542 +msgid "Member Of" +msgstr "メンãƒãƒ¼ã®" + +#: usr/local/www/system_usermanager.php:572 +#: usr/local/www/system_usermanager.php:570 +#: usr/local/www/system_usermanager.php:570 +msgid "Effective Privileges" +msgstr "åŠ¹æžœçš„ãªæ¨©é™" + +#: usr/local/www/system_usermanager.php:576 +#: usr/local/www/system_usermanager.php:574 +#: usr/local/www/system_usermanager.php:574 +msgid "Inherited From" +msgstr "ã‹ã‚‰ç¶™æ‰¿ã•れã¦ã„ã¾ã™" + +#: usr/local/www/system_usermanager.php:626 +#: usr/local/www/system_usermanager.php:624 +#: usr/local/www/system_usermanager.php:624 +msgid "User Certificates" +msgstr "ユーザー証明書" + +#: usr/local/www/system_usermanager.php:631 +#: usr/local/www/system_usermanager.php:629 +#: usr/local/www/system_usermanager.php:629 +msgid "CA" +msgstr "カリフォルニア州" + +#: usr/local/www/system_usermanager.php:655 +#: usr/local/www/system_usermanager.php:653 +#: usr/local/www/system_usermanager.php:653 +msgid "export private key" +msgstr "[秘密キーã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" + +#: usr/local/www/system_usermanager.php:660 +#: usr/local/www/system_usermanager.php:658 +#: usr/local/www/system_usermanager.php:658 +msgid "Do you really want to remove this certificate association?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®è¨¼æ˜Žæ›¸ã®é–¢é€£ä»˜ã‘を削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_usermanager.php:660 +#: usr/local/www/system_usermanager.php:658 +#: usr/local/www/system_usermanager.php:658 +msgid "(Certificate will not be deleted)" +msgstr "(証明書ã¯å‰Šé™¤ã•れã¾ã›ã‚“)" + +#: usr/local/www/system_usermanager.php:694 +#: usr/local/www/system_usermanager.php:692 +#: usr/local/www/system_usermanager.php:692 +msgid "Click to create a user certificate." +msgstr "ユーザー証明書を作æˆã™ã‚‹å ´åˆã«ã‚¯ãƒªãƒƒã‚¯ã—ã¾ã™ã€‚" + +#: usr/local/www/system_usermanager.php:752 +#: usr/local/www/system_usermanager.php:758 +#: usr/local/www/system_usermanager.php:750 +#: usr/local/www/system_usermanager.php:756 +#: usr/local/www/system_usermanager.php:750 +#: usr/local/www/system_usermanager.php:756 +msgid "Authorized keys" +msgstr "èªè¨¼ã‚­ãƒ¼" + +#: usr/local/www/system_usermanager.php:754 +#: usr/local/www/system_usermanager.php:752 +#: usr/local/www/system_usermanager.php:752 +msgid "Click to paste an authorized key." +msgstr "許å¯ã•れãŸã‚­ãƒ¼ã‚’貼り付ã‘]をクリックã—ã¾ã™ã€‚" + +#: usr/local/www/system_usermanager.php:762 +#: usr/local/www/system_usermanager.php:760 +#: usr/local/www/system_usermanager.php:760 +msgid "Paste an authorized keys file here." +msgstr "èªè¨¼ã‚­ãƒ¼ã¯ã€ã“ã“ã§ãƒ•ァイルを貼り付ã‘ã¾ã™ã€‚" + +#: usr/local/www/system_usermanager.php:766 +#: usr/local/www/system_usermanager.php:764 +#: usr/local/www/system_usermanager.php:764 +msgid "IPsec Pre-Shared Key" +msgstr "IPsecã®äº‹å‰å…±æœ‰ã‚­ãƒ¼" + +#: usr/local/www/system_usermanager.php:828 +#: usr/local/www/system_usermanager.php:826 +#: usr/local/www/system_usermanager.php:829 +#: usr/local/www/system_usermanager.php:852 +#: usr/local/www/system_usermanager.php:852 +msgid "Do you really want to delete this User?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_usermanager.php:849 +#: usr/local/www/system_usermanager.php:847 +#: usr/local/www/system_usermanager.php:852 +#: usr/local/www/system_usermanager.php:805 +#: usr/local/www/system_usermanager.php:805 +msgid "" +"Additional users can be added here. User permissions for accessing the " +"webConfigurator can be assigned directly or inherited from group " +"memberships. An icon that appears grey indicates that it is a system defined " +"object. Some system object properties can be modified but they cannot be " +"deleted." +msgstr "「追加ユーザーã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚アクセスã™ã‚‹ãŸã‚ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ¨©é™ã€ webConfiguratorãŒç›´æŽ¥å‰²ã‚Šå½“ã¦ãŸã‚Šã€ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ç¶™æ‰¿ã™ã‚‹ã“ã¨ãŒã§ãã€ã€Œãƒ¡ãƒ³ãƒãƒ¼ã‚·ãƒƒãƒ—。グレーã«è¡¨ç¤ºã•れるアイコンã¯ã€ãれãŒå®šç¾©ã•れãŸã‚·ã‚¹ãƒ†ãƒ ã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã‚‹"オブジェクト。ã„ãã¤ã‹ã®ã‚·ã‚¹ãƒ†ãƒ ã‚ªãƒ–ジェクトã®ãƒ—ロパティを変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ 「削除ã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_usermanager.php:854 +#: usr/local/www/system_usermanager.php:852 +#: usr/local/www/system_usermanager.php:857 +#: usr/local/www/system_usermanager.php:810 +#: usr/local/www/system_usermanager.php:810 +msgid "" +"Accounts created here are also used for other parts of the system such as " +"OpenVPN, IPsec, and Captive Portal." +msgstr "OpenVPNã¯ã€ IPsecã€ãŠã‚ˆã³ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã€Œã“ã“ã§ä½œæˆã—ãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã¾ãŸã€ãªã©ã®ã‚·ã‚¹ãƒ†ãƒ ã®ä»–ã®éƒ¨åˆ†ã«ä½¿ç”¨ã•れã¾ã™ã€ 。" + +#: usr/local/www/system_usermanager_passwordmg.php:43 +#: usr/local/www/system_usermanager_passwordmg.php:43 +msgid "User Password" +msgstr "利用者パスワード" + +#: usr/local/www/system_usermanager_passwordmg.php:63 +#: usr/local/www/system_usermanager_passwordmg.php:63 +msgid "Password successfully changed" +msgstr "ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã¯æ­£å¸¸ã«å¤‰æ›´ã•れãŸ" + +#: usr/local/www/system_usermanager_passwordmg.php:86 +#: usr/local/www/system_usermanager_passwordmg.php:87 +#: usr/local/www/system_usermanager_passwordmg.php:92 +#: usr/local/www/system_usermanager_passwordmg.php:92 +msgid "Sorry, you cannot change the password for a non-local user." +msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€ã‚ãªãŸãŒéžãƒ­ãƒ¼ã‚«ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‘スワードを変更ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_usermanager_passwordmg.php:112 +#: usr/local/www/system_usermanager_passwordmg.php:113 +#: usr/local/www/system_usermanager_passwordmg.php:118 +#: usr/local/www/system_usermanager_passwordmg.php:118 +msgid "Select a new password" +msgstr "æ–°ã—ã„ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’é¸æŠžã™ã‚‹" + +#: usr/local/www/system_usermanager_settings.php:51 +#: usr/local/www/system_usermanager_settings.php:51 +msgid "User manager settings" +msgstr "ユーザーマãƒãƒ¼ã‚¸ãƒ£ã®è¨­å®š" + +#: usr/local/www/system_usermanager_settings.php:61 +#: usr/local/www/system_usermanager_settings.php:61 +msgid "Session timeout must be an integer value." +msgstr "ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯æ•´æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_usermanager_settings.php:71 +#: usr/local/www/system_usermanager_settings.php:71 +msgid "" +"The test was not performed because it is supported only for ldap based " +"backends." +msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰"ãれãŒå”¯ä¸€ã®LDAPベースã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ãŸã‚ã€ãƒ†ã‚¹ãƒˆã¯å®Ÿè¡Œã•れã¾ã›ã‚“ã§ã—ãŸã€ 。" + +#: usr/local/www/system_usermanager_settings.php:131 +#: usr/local/www/system_usermanager_settings.php:134 +#: usr/local/www/system_usermanager_settings.php:134 +msgid "Session Timeout" +msgstr "セッションタイムアウト" + +#: usr/local/www/system_usermanager_settings.php:135 +#: usr/local/www/system_usermanager_settings.php:138 +#: usr/local/www/system_usermanager_settings.php:138 +msgid "" +"Time in minutes to expire idle management sessions. The default is 4 hours " +"(240 minutes)." +msgstr "「時間ã¯åˆ†å˜ä½ã§ã‚¢ã‚¤ãƒ‰ãƒ«ã®ç®¡ç†ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’期é™åˆ‡ã‚Œã«ã™ã‚‹ã€‚デフォルトã¯4時間ã§ã™ã€ ( 240分) 。" + +#: usr/local/www/system_usermanager_settings.php:136 +#: usr/local/www/system_usermanager_settings.php:139 +#: usr/local/www/system_usermanager_settings.php:139 +msgid "Enter 0 to never expire sessions. NOTE: This is a security risk!" +msgstr "セッションを無期é™ã«ã™ã‚‹ã«ã¯ã€0を入力ã—ã¦ãã ã•ã„。注:ã“れã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒªã‚¹ã‚¯ã®ã§ã™ï¼" + +#: usr/local/www/system_usermanager_settings.php:162 +#: usr/local/www/system_usermanager_settings.php:165 +#: usr/local/www/system_usermanager_settings.php:165 +msgid "Save and Test" +msgstr "ä¿å­˜ã—ã¦ãƒ†ã‚¹ãƒˆ" + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97 +msgid "" +"Could not connect to the LDAP server. Please check your LDAP configuration." +msgstr "「 LDAPサーãƒãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã‚ãªãŸã®LDAP設定を確èªã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98 +#: usr/local/www/system_usermanager_settings_test.php:119 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98 +#: usr/local/www/system_usermanager_settings_test.php:119 +msgid "Close" +msgstr "クローズ" + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100 +msgid "Please select which containers to Authenticate against:" +msgstr "ã«å¯¾ã—ã¦èªè¨¼ã‚’ã©ã®ã‚³ãƒ³ãƒ†ãƒŠã‚’é¸æŠžã—ã¦ãã ã•ã„:" + +#: usr/local/www/system_usermanager_settings_test.php:76 +#: usr/local/www/system_usermanager_settings_test.php:76 +#, php-format +msgid "Could not find settings for %s%s" +msgstr "%s%sã®è¨­å®šã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: usr/local/www/system_usermanager_settings_test.php:78 +msgid "Testing pfSense LDAP settings... One moment please..." +msgstr "テストpfSenseã®LDAP設定...ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." + +#: usr/local/www/system_usermanager_settings_test.php:82 +#: usr/local/www/system_usermanager_settings_test.php:82 +msgid "Attempting connection to" +msgstr "ã¸ã®æŽ¥ç¶šã‚’試ã¿ã‚‹" + +#: usr/local/www/system_usermanager_settings_test.php:86 +#: usr/local/www/system_usermanager_settings_test.php:86 +msgid "Attempting bind to" +msgstr "ã«ãƒã‚¤ãƒ³ãƒ‰ã‚’試ã¿ã‚‹" + +#: usr/local/www/system_usermanager_settings_test.php:90 +#: usr/local/www/system_usermanager_settings_test.php:90 +msgid "Attempting to fetch Organizational Units from" +msgstr "ã‹ã‚‰çµ„ç¹”å˜ä½ã‚’å–å¾—ã—よã†ã¨ã™ã‚‹ã¨ã€" + +#: usr/local/www/system_usermanager_settings_test.php:96 +#: usr/local/www/system_usermanager_settings_test.php:96 +msgid "Organization units found" +msgstr "見ã¤ã‹ã£ãŸçµ„ç¹”å˜ä½" + +#: usr/local/www/system_usermanager_settings_test.php:103 +#: usr/local/www/system_usermanager_settings_test.php:108 +#: usr/local/www/system_usermanager_settings_test.php:112 +#: usr/local/www/system_usermanager_settings_test.php:103 +#: usr/local/www/system_usermanager_settings_test.php:108 +#: usr/local/www/system_usermanager_settings_test.php:112 +msgid "failed" +msgstr "失敗ã—ãŸ" + +#: usr/local/www/upload_progress.php:44 +msgid "Sorry, we could not find an uploadid code." +msgstr "申ã—訳ã‚りã¾ã›ã‚“ãŒã€æˆ‘々ã¯uploadidコードを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/upload_progress.php:86 +msgid "Uploading Files" +msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロード" + +#: usr/local/www/upload_progress.php:86 +msgid "Please wait" +msgstr "ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„" + +#: usr/local/www/upload_progress.php:95 +msgid "Uploading file" +msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロード" + +#: usr/local/www/upload_progress.php:123 +msgid "Uploaded" +msgstr "アップロードã•れãŸ" + +#: usr/local/www/upload_progress.php:133 +msgid "File Size" +msgstr "ファイルサイズ" + +#: usr/local/www/upload_progress.php:145 +msgid "Completed" +msgstr "完æˆã—ãŸ" + +#: usr/local/www/upload_progress.php:155 +msgid "Estimated" +msgstr "推定" + +#: usr/local/www/vpn_ipsec_phase1.php:160 +#: usr/local/www/vpn_ipsec_phase1.php:662 +#: usr/local/www/vpn_ipsec_phase1.php:675 +#: usr/local/www/vpn_ipsec_mobile.php:347 usr/local/www/vpn_ipsec_keys.php:104 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:135 usr/local/www/interfaces.php:2486 +#: usr/local/www/vpn_ipsec_phase1.php:674 +#: usr/local/www/vpn_ipsec_phase1.php:695 usr/local/www/interfaces.php:2516 +#: usr/local/www/interfaces.php:2562 usr/local/www/interfaces.php:2551 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:135 +#: usr/local/www/vpn_ipsec_phase1.php:160 +#: usr/local/www/vpn_ipsec_phase1.php:695 +#: usr/local/www/vpn_ipsec_mobile.php:347 usr/local/www/vpn_ipsec_keys.php:104 +#: usr/local/www/interfaces.php:2551 +msgid "Pre-Shared Key" +msgstr "事å‰å…±æœ‰éµ" + +#: usr/local/www/vpn_ipsec_phase1.php:171 +#: usr/local/www/vpn_ipsec_phase1.php:564 +#: usr/local/www/vpn_ipsec_phase1.php:577 +#: usr/local/www/vpn_ipsec_phase1.php:576 +#: usr/local/www/vpn_ipsec_phase1.php:597 +#: usr/local/www/vpn_ipsec_phase1.php:171 +#: usr/local/www/vpn_ipsec_phase1.php:597 +msgid "Remote gateway" +msgstr "リモートゲートウェイ" + +#: usr/local/www/vpn_ipsec_phase1.php:177 +#: usr/local/www/vpn_ipsec_phase1.php:177 +msgid "The P1 lifetime must be an integer." +msgstr "P1ã¯å¯¿å‘½ãŒæ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/vpn_ipsec_phase1.php:180 +#: usr/local/www/vpn_ipsec_phase1.php:181 +#: usr/local/www/vpn_ipsec_phase1.php:181 +msgid "A valid remote gateway address or host name must be specified." +msgstr "有効ãªãƒªãƒ¢ãƒ¼ãƒˆã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚¢ãƒ‰ãƒ¬ã‚¹ã¾ãŸã¯ãƒ›ã‚¹ãƒˆåを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase1.php:188 +#: usr/local/www/vpn_ipsec_phase1.php:194 +#: usr/local/www/vpn_ipsec_phase1.php:194 +#, php-format +msgid "The remote gateway "%1$s" is already used by phase1 "%2$s"." +msgstr "リモートゲートウェイã€ã¯%1$s "ã¯ã™ã§ã«ãƒ•ェーズ1 〠%2$s ã€ã§ä½¿ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase1.php:201 +#: usr/local/www/vpn_ipsec_phase1.php:222 +#: usr/local/www/vpn_ipsec_phase1.php:222 +msgid "Please enter an address for 'My Identifier'" +msgstr "「ç§ã®è­˜åˆ¥å­'ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/vpn_ipsec_phase1.php:204 +#: usr/local/www/vpn_ipsec_phase1.php:225 +#: usr/local/www/vpn_ipsec_phase1.php:225 +msgid "Please enter a keyid tag for 'My Identifier'" +msgstr "「ç§ã®è­˜åˆ¥å­'ã®ãŸã‚ã®éµIDタグを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_ipsec_phase1.php:207 +#: usr/local/www/vpn_ipsec_phase1.php:228 +#: usr/local/www/vpn_ipsec_phase1.php:228 +msgid "Please enter a fully qualified domain name for 'My Identifier'" +msgstr "「ç§ã®è­˜åˆ¥å­'ã®å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_ipsec_phase1.php:210 +#: usr/local/www/vpn_ipsec_phase1.php:231 +#: usr/local/www/vpn_ipsec_phase1.php:231 +msgid "Please enter a user and fully qualified domain name for 'My Identifier'" +msgstr "「ç§ã®è­˜åˆ¥å­'ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_ipsec_phase1.php:213 +#: usr/local/www/vpn_ipsec_phase1.php:234 +#: usr/local/www/vpn_ipsec_phase1.php:234 +msgid "Please enter a dynamic domain name for 'My Identifier'" +msgstr "「ç§ã®è­˜åˆ¥å­'ã®å‹•çš„ãªãƒ‰ãƒ¡ã‚¤ãƒ³åを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_ipsec_phase1.php:216 +#: usr/local/www/vpn_ipsec_phase1.php:237 +#: usr/local/www/vpn_ipsec_phase1.php:237 +msgid "A valid IP address for 'My identifier' must be specified." +msgstr "「ç§ã®è­˜åˆ¥å­'ã®æœ‰åйãªIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase1.php:219 +#: usr/local/www/vpn_ipsec_phase1.php:240 +#: usr/local/www/vpn_ipsec_phase1.php:240 +msgid "A valid domain name for 'My identifier' must be specified." +msgstr "「ç§ã®è­˜åˆ¥å­'ã®ãŸã‚ã®æœ‰åйãªãƒ‰ãƒ¡ã‚¤ãƒ³åを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase1.php:223 +#: usr/local/www/vpn_ipsec_phase1.php:244 +#: usr/local/www/vpn_ipsec_phase1.php:244 +msgid "A valid FQDN for 'My identifier' must be specified." +msgstr "「ç§ã®è­˜åˆ¥å­'ã®æœ‰åйãªFQDNã¯æŒ‡å®šã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/vpn_ipsec_phase1.php:228 +#: usr/local/www/vpn_ipsec_phase1.php:249 +#: usr/local/www/vpn_ipsec_phase1.php:249 +msgid "" +"A valid User FQDN in the form of user@my.domain.com for 'My identifier' must " +"be specified." +msgstr "「「ç§ã®è­˜åˆ¥å­'ã®user@my.domain.comã®å½¢ã§æœ‰åйãªãƒ¦ãƒ¼ã‚¶FQDNã¯ãªã‚Šã¾ã›ã‚“ã€æŒ‡å®šã•れ。" + +#: usr/local/www/vpn_ipsec_phase1.php:233 +#: usr/local/www/vpn_ipsec_phase1.php:254 +#: usr/local/www/vpn_ipsec_phase1.php:254 +msgid "A valid Dynamic DNS address for 'My identifier' must be specified." +msgstr "「ç§ã®è­˜åˆ¥å­'ã®æœ‰åйãªãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNSアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase1.php:243 +#: usr/local/www/vpn_ipsec_phase1.php:264 +#: usr/local/www/vpn_ipsec_phase1.php:264 +msgid "Please enter an address for 'Peer Identifier'" +msgstr "「ピア識別å­'ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/vpn_ipsec_phase1.php:246 +#: usr/local/www/vpn_ipsec_phase1.php:267 +#: usr/local/www/vpn_ipsec_phase1.php:267 +msgid "Please enter a keyid tag for 'Peer Identifier'" +msgstr "「ピア識別å­'ã®éµIDタグを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_ipsec_phase1.php:249 +#: usr/local/www/vpn_ipsec_phase1.php:270 +#: usr/local/www/vpn_ipsec_phase1.php:270 +msgid "Please enter a fully qualified domain name for 'Peer Identifier'" +msgstr "「ピア識別å­'ã®å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_ipsec_phase1.php:252 +#: usr/local/www/vpn_ipsec_phase1.php:273 +#: usr/local/www/vpn_ipsec_phase1.php:273 +msgid "" +"Please enter a user and fully qualified domain name for 'Peer Identifier'" +msgstr "「「ピア識別å­'ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_ipsec_phase1.php:255 +#: usr/local/www/vpn_ipsec_phase1.php:276 +#: usr/local/www/vpn_ipsec_phase1.php:276 +msgid "A valid IP address for 'Peer identifier' must be specified." +msgstr "「ピア識別å­'ã®æœ‰åйãªIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase1.php:258 +#: usr/local/www/vpn_ipsec_phase1.php:279 +#: usr/local/www/vpn_ipsec_phase1.php:279 +msgid "A valid domain name for 'Peer identifier' must be specified." +msgstr "「ピア識別å­'ã®æœ‰åйãªãƒ‰ãƒ¡ã‚¤ãƒ³åを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase1.php:262 +#: usr/local/www/vpn_ipsec_phase1.php:283 +#: usr/local/www/vpn_ipsec_phase1.php:283 +msgid "A valid FQDN for 'Peer identifier' must be specified." +msgstr "「ピア識別å­'ã®æœ‰åйãªFQDNã¯æŒ‡å®šã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/vpn_ipsec_phase1.php:267 +#: usr/local/www/vpn_ipsec_phase1.php:288 +#: usr/local/www/vpn_ipsec_phase1.php:288 +msgid "" +"A valid User FQDN in the form of user@my.domain.com for 'Peer identifier' " +"must be specified." +msgstr "「「ピア識別å­'ã®user@my.domain.comã®å½¢ã§æœ‰åйãªãƒ¦ãƒ¼ã‚¶FQDNã¯ã€ŒæŒ‡å®šã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/vpn_ipsec_phase1.php:273 +#: usr/local/www/vpn_ipsec_phase1.php:294 +#: usr/local/www/vpn_ipsec_phase1.php:294 +msgid "A numeric value must be specified for DPD delay." +msgstr "数値ã¯ã€DPDé…延を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase1.php:276 +#: usr/local/www/vpn_ipsec_phase1.php:297 +#: usr/local/www/vpn_ipsec_phase1.php:297 +msgid "A numeric value must be specified for DPD retries." +msgstr "数値ã¯ã€DPDå†è©¦è¡Œã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +msgid "Edit Phase 1" +msgstr "編集フェーズ1" + +#: usr/local/www/vpn_ipsec_phase1.php:509 +#: usr/local/www/vpn_openvpn_client.php:383 +#: usr/local/www/vpn_openvpn_csc.php:311 +#: usr/local/www/vpn_openvpn_server.php:601 +#: usr/local/www/vpn_openvpn_server.php:674 +#: usr/local/www/vpn_openvpn_client.php:388 +#: usr/local/www/vpn_openvpn_csc.php:310 +#: usr/local/www/vpn_openvpn_server.php:692 +#: usr/local/www/vpn_openvpn_client.php:396 +#: usr/local/www/vpn_ipsec_phase1.php:508 +#: usr/local/www/vpn_openvpn_client.php:414 +#: usr/local/www/vpn_ipsec_phase1.php:529 +#: usr/local/www/vpn_openvpn_server.php:718 +#: usr/local/www/vpn_openvpn_client.php:414 +#: usr/local/www/vpn_openvpn_csc.php:310 +#: usr/local/www/vpn_ipsec_phase1.php:529 +#: usr/local/www/vpn_openvpn_server.php:718 +msgid "General information" +msgstr "ä¸€èˆ¬çš„ãªæƒ…å ±" + +#: usr/local/www/vpn_ipsec_phase1.php:515 +#: usr/local/www/vpn_ipsec_phase1.php:514 +#: usr/local/www/vpn_ipsec_phase1.php:535 +#: usr/local/www/vpn_ipsec_phase1.php:535 +msgid "Disable this phase1 entry" +msgstr "ã“ã®ãƒ•ェーズ1ã®ã‚¨ãƒ³ãƒˆãƒªã‚’無効化" + +#: usr/local/www/vpn_ipsec_phase1.php:517 +#: usr/local/www/vpn_ipsec_phase1.php:516 +#: usr/local/www/vpn_ipsec_phase1.php:537 +#: usr/local/www/vpn_ipsec_phase1.php:537 +msgid "" +"Set this option to disable this phase1 without removing it from the list" +msgstr "「リストã‹ã‚‰å‰Šé™¤ã›ãšã«ã€ã“ã®ãƒ•ェーズ1を無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定" + +#: usr/local/www/vpn_ipsec_phase1.php:523 +#: usr/local/www/vpn_ipsec_phase1.php:522 +#: usr/local/www/vpn_ipsec_phase1.php:543 +#: usr/local/www/vpn_ipsec_phase1.php:543 +msgid "Internet Protocol" +msgstr "インターãƒãƒƒãƒˆãƒ—ロトコル" + +#: usr/local/www/vpn_ipsec_phase1.php:534 +#: usr/local/www/vpn_ipsec_phase1.php:533 +#: usr/local/www/vpn_ipsec_phase1.php:554 +#: usr/local/www/vpn_ipsec_phase1.php:554 +msgid "Select the Internet Protocol family from this dropdown" +msgstr "ã“ã®ãƒ‰ãƒ­ãƒƒãƒ—ダウンã‹ã‚‰ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ—ãƒ­ãƒˆã‚³ãƒ«ãƒ•ã‚¡ãƒŸãƒªã‚’é¸æŠž" + +#: usr/local/www/vpn_ipsec_phase1.php:557 +#: usr/local/www/vpn_ipsec_phase1.php:570 +#: usr/local/www/vpn_ipsec_phase1.php:569 +#: usr/local/www/vpn_ipsec_phase1.php:590 +#: usr/local/www/vpn_ipsec_phase1.php:590 +msgid "Select the interface for the local endpoint of this phase1 entry" +msgstr "ã“ã®ãƒ•ェーズ1エントリã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—" + +#: usr/local/www/vpn_ipsec_phase1.php:568 +#: usr/local/www/vpn_ipsec_phase1.php:581 +#: usr/local/www/vpn_ipsec_phase1.php:580 +#: usr/local/www/vpn_ipsec_phase1.php:601 +#: usr/local/www/vpn_ipsec_phase1.php:601 +msgid "Enter the public IP address or host name of the remote gateway" +msgstr "パブリックIPアドレスã¾ãŸã¯ãƒªãƒ¢ãƒ¼ãƒˆã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã®ãƒ›ã‚¹ãƒˆåを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_ipsec_phase1.php:590 +#: usr/local/www/vpn_ipsec_phase1.php:603 +#: usr/local/www/vpn_ipsec_phase1.php:602 +#: usr/local/www/vpn_ipsec_phase1.php:623 +#: usr/local/www/vpn_ipsec_phase1.php:623 +msgid "Phase 1 proposal (Authentication)" +msgstr "フェーズ1プロãƒãƒ¼ã‚¶ãƒ«ï¼ˆèªè¨¼ï¼‰" + +#: usr/local/www/vpn_ipsec_phase1.php:594 +#: usr/local/www/vpn_openvpn_client.php:514 +#: usr/local/www/vpn_openvpn_client.php:519 +#: usr/local/www/vpn_ipsec_phase1.php:607 +#: usr/local/www/vpn_openvpn_client.php:537 +#: usr/local/www/vpn_ipsec_phase1.php:606 +#: usr/local/www/vpn_openvpn_client.php:556 +#: usr/local/www/vpn_ipsec_phase1.php:627 +#: usr/local/www/vpn_openvpn_client.php:556 +#: usr/local/www/vpn_ipsec_phase1.php:627 +msgid "Authentication method" +msgstr "èªè¨¼æ–¹æ³•" + +#: usr/local/www/vpn_ipsec_phase1.php:609 +#: usr/local/www/vpn_ipsec_phase1.php:735 +#: usr/local/www/vpn_ipsec_phase1.php:753 +#: usr/local/www/vpn_ipsec_phase1.php:622 +#: usr/local/www/vpn_ipsec_phase1.php:748 +#: usr/local/www/vpn_ipsec_phase1.php:766 +#: usr/local/www/vpn_ipsec_phase1.php:621 +#: usr/local/www/vpn_ipsec_phase1.php:747 +#: usr/local/www/vpn_ipsec_phase1.php:763 +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:768 +#: usr/local/www/vpn_ipsec_phase1.php:784 +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:768 +#: usr/local/www/vpn_ipsec_phase1.php:784 +msgid "Must match the setting chosen on the remote side" +msgstr "リモートå´ã§é¸æŠžã—ãŸè¨­å®šã¨ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/vpn_ipsec_phase1.php:614 +#: usr/local/www/vpn_ipsec_phase1.php:627 +#: usr/local/www/vpn_ipsec_phase1.php:626 +#: usr/local/www/vpn_ipsec_phase1.php:647 +#: usr/local/www/vpn_ipsec_phase1.php:647 +msgid "Negotiation mode" +msgstr "ãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ãƒ¢ãƒ¼ãƒ‰" + +#: usr/local/www/vpn_ipsec_phase1.php:625 +#: usr/local/www/vpn_ipsec_phase1.php:638 +#: usr/local/www/vpn_ipsec_phase1.php:637 +#: usr/local/www/vpn_ipsec_phase1.php:658 +#: usr/local/www/vpn_ipsec_phase1.php:658 +msgid "Aggressive is more flexible, but less secure" +msgstr "攻撃的ãªã€ã‚ˆã‚ŠæŸ”軟ãªã€ã—ã‹ã—安全性ãŒä½Žããªã‚Šã¾ã™" + +#: usr/local/www/vpn_ipsec_phase1.php:629 +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:641 +#: usr/local/www/vpn_ipsec_phase1.php:662 +#: usr/local/www/vpn_ipsec_phase1.php:662 +msgid "My identifier" +msgstr "ç§ã®è­˜åˆ¥å­" + +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:655 +#: usr/local/www/vpn_ipsec_phase1.php:654 +#: usr/local/www/vpn_ipsec_phase1.php:675 +#: usr/local/www/vpn_ipsec_phase1.php:675 +msgid "Peer identifier" +msgstr "ピア識別å­" + +#: usr/local/www/vpn_ipsec_phase1.php:657 +#: usr/local/www/vpn_ipsec_phase1.php:670 +#: usr/local/www/vpn_ipsec_phase1.php:669 +#: usr/local/www/vpn_ipsec_phase1.php:690 +#: usr/local/www/vpn_ipsec_phase1.php:690 +msgid "" +"NOTE: This is known as the "group" setting on some VPN client " +"implementations" +msgstr ""注:ã“れã¯ã¨ã—ã¦çŸ¥ã‚‰ã‚Œã¦ã„ã‚‹"ã®å®Ÿè£…〠"一部ã®VPNクライアントã®è¨­å®šã€ã‚°ãƒ«ãƒ¼ãƒ—" + +#: usr/local/www/vpn_ipsec_phase1.php:668 +#: usr/local/www/vpn_ipsec_phase1.php:681 +msgid "Input your pre-shared key string" +msgstr "入力ã‚ãªãŸã®äº‹å‰å…±æœ‰ã‚­ãƒ¼ã®æ–‡å­—列" + +#: usr/local/www/vpn_ipsec_phase1.php:673 +#: usr/local/www/vpn_ipsec_phase1.php:686 +#: usr/local/www/vpn_ipsec_phase1.php:685 +#: usr/local/www/vpn_ipsec_phase1.php:706 +#: usr/local/www/vpn_ipsec_phase1.php:706 +msgid "Policy Generation" +msgstr "ãƒãƒªã‚·ãƒ¼ç”Ÿæˆ" + +#: usr/local/www/vpn_ipsec_phase1.php:684 +#: usr/local/www/vpn_ipsec_phase1.php:697 +#: usr/local/www/vpn_ipsec_phase1.php:696 +#: usr/local/www/vpn_ipsec_phase1.php:717 +#: usr/local/www/vpn_ipsec_phase1.php:717 +msgid "" +"When working as a responder (as with mobile clients), this controls how " +"policies are generated based on SA proposals." +msgstr "ãƒãƒªã‚·ãƒ¼ã¯ã€SAã®ææ¡ˆã«åŸºã¥ã„ã¦ç”Ÿæˆã•れãŸã€ (モãƒã‚¤ãƒ«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨åŒæ§˜ã«ï¼‰å¿œç­”者ã¨ã—ã¦åƒã„ã¦ã„ãŸã¨ãã«ã€ã“れã¯ã©ã®ã‚ˆã†ã«åˆ¶å¾¡ã™ã‚‹ã€Œ 。" + +#: usr/local/www/vpn_ipsec_phase1.php:689 +#: usr/local/www/vpn_ipsec_phase1.php:702 +#: usr/local/www/vpn_ipsec_phase1.php:701 +#: usr/local/www/vpn_ipsec_phase1.php:722 +#: usr/local/www/vpn_ipsec_phase1.php:722 +msgid "Proposal Checking" +msgstr "プロãƒãƒ¼ã‚¶ãƒ«ã®ãƒã‚§ãƒƒã‚¯" + +#: usr/local/www/vpn_ipsec_phase1.php:700 +#: usr/local/www/vpn_ipsec_phase1.php:713 +#: usr/local/www/vpn_ipsec_phase1.php:712 +#: usr/local/www/vpn_ipsec_phase1.php:733 +#: usr/local/www/vpn_ipsec_phase1.php:733 +msgid "" +"Specifies the action of lifetime length, key length, and PFS of the phase 2 " +"selection on the responder side, and the action of lifetime check in phase 1." +msgstr "「寿命ã®é•·ã•ã€ã‚­ãƒ¼ã®é•·ã•ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’指定ã—ã€ãƒ•ェーズ2ã®PFS 「応答者å´ã®é¸æŠžã€ãŠã‚ˆã³ãƒ•ェーズ1ã§ã®å¯¿å‘½ç¢ºèªã®ä½œç”¨ã€‚" + +#: usr/local/www/vpn_ipsec_phase1.php:705 +#: usr/local/www/vpn_openvpn_client.php:706 +#: usr/local/www/vpn_openvpn_server.php:898 +#: usr/local/www/vpn_openvpn_server.php:971 +#: usr/local/www/vpn_openvpn_client.php:711 +#: usr/local/www/vpn_ipsec_phase1.php:718 +#: usr/local/www/vpn_openvpn_server.php:999 +#: usr/local/www/vpn_openvpn_client.php:729 +#: usr/local/www/vpn_ipsec_phase1.php:717 +#: usr/local/www/vpn_openvpn_client.php:748 +#: usr/local/www/vpn_ipsec_phase1.php:738 +#: usr/local/www/vpn_openvpn_server.php:1026 +#: usr/local/www/vpn_openvpn_client.php:748 +#: usr/local/www/vpn_ipsec_phase1.php:738 +#: usr/local/www/vpn_openvpn_server.php:1026 +msgid "Encryption algorithm" +msgstr "æš—å·åŒ–アルゴリズム" + +#: usr/local/www/vpn_ipsec_phase1.php:724 +#: usr/local/www/vpn_ipsec_phase1.php:737 +#: usr/local/www/vpn_ipsec_phase1.php:736 +#: usr/local/www/vpn_ipsec_phase1.php:757 +#: usr/local/www/vpn_ipsec_phase1.php:757 +msgid "Hash algorithm" +msgstr "ãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ " + +#: usr/local/www/vpn_ipsec_phase1.php:740 +#: usr/local/www/vpn_ipsec_phase1.php:753 +#: usr/local/www/vpn_ipsec_phase1.php:752 +#: usr/local/www/vpn_ipsec_phase1.php:773 +#: usr/local/www/vpn_ipsec_phase1.php:773 +msgid "DH key group" +msgstr "DHéµã‚°ãƒ«ãƒ¼ãƒ—" + +#: usr/local/www/vpn_ipsec_phase1.php:751 +#: usr/local/www/vpn_ipsec_phase2.php:603 +#: usr/local/www/vpn_ipsec_phase2.php:629 +#: usr/local/www/vpn_ipsec_phase1.php:764 +msgid "1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit" +msgstr "1 = 768ビット〠2 = 1024ビット〠5 = 1536ビット" + +#: usr/local/www/vpn_ipsec_phase1.php:765 +#: usr/local/www/vpn_ipsec_phase1.php:778 +#: usr/local/www/vpn_ipsec_phase1.php:775 +#: usr/local/www/vpn_ipsec_phase1.php:796 +#: usr/local/www/vpn_ipsec_phase1.php:796 +msgid "My Certificate" +msgstr "ç§ã®è¨¼æ˜Žæ›¸" + +#: usr/local/www/vpn_ipsec_phase1.php:779 +#: usr/local/www/vpn_ipsec_phase1.php:792 +#: usr/local/www/vpn_ipsec_phase1.php:789 +#: usr/local/www/vpn_ipsec_phase1.php:810 +#: usr/local/www/vpn_ipsec_phase1.php:810 +msgid "Select a certificate previously configured in the Certificate Manager" +msgstr "以å‰ã«è¨¼æ˜Žæ›¸ãƒžãƒãƒ¼ã‚¸ãƒ£ã§è¨­å®šã•れãŸè¨¼æ˜Žæ›¸ã‚’é¸æŠžã—ã¾ã™" + +#: usr/local/www/vpn_ipsec_phase1.php:784 +#: usr/local/www/vpn_ipsec_phase1.php:797 +#: usr/local/www/vpn_ipsec_phase1.php:794 +#: usr/local/www/vpn_ipsec_phase1.php:815 +#: usr/local/www/vpn_ipsec_phase1.php:815 +msgid "My Certificate Authority" +msgstr "ç§ã®èªè¨¼å±€" + +#: usr/local/www/vpn_ipsec_phase1.php:798 +#: usr/local/www/vpn_ipsec_phase1.php:811 +#: usr/local/www/vpn_ipsec_phase1.php:808 +#: usr/local/www/vpn_ipsec_phase1.php:829 +#: usr/local/www/vpn_ipsec_phase1.php:829 +msgid "" +"Select a certificate authority previously configured in the Certificate " +"Manager" +msgstr "Managerã€ã®ä»¥å‰ã®è¨¼æ˜Žæ›¸ã§æ§‹æˆã•れãŸèªè¨¼å±€ã‚’é¸æŠžã—ã¦"" + +#: usr/local/www/vpn_ipsec_phase1.php:809 +#: usr/local/www/vpn_ipsec_phase1.php:822 +#: usr/local/www/vpn_ipsec_phase1.php:819 +#: usr/local/www/vpn_ipsec_phase1.php:840 +#: usr/local/www/vpn_ipsec_phase1.php:840 +msgid "NAT Traversal" +msgstr "NATトラãƒãƒ¼ã‚µãƒ«" + +#: usr/local/www/vpn_ipsec_phase1.php:814 +#: usr/local/www/vpn_ipsec_phase1.php:827 +#: usr/local/www/vpn_ipsec_phase1.php:824 +#: usr/local/www/vpn_ipsec_phase1.php:845 +#: usr/local/www/vpn_ipsec_phase1.php:845 +msgid "Force" +msgstr "力" + +#: usr/local/www/vpn_ipsec_phase1.php:818 +#: usr/local/www/vpn_ipsec_phase1.php:831 +#: usr/local/www/vpn_ipsec_phase1.php:828 +#: usr/local/www/vpn_ipsec_phase1.php:849 +#: usr/local/www/vpn_ipsec_phase1.php:849 +msgid "" +"Set this option to enable the use of NAT-T (i.e. the encapsulation of ESP in " +"UDP packets) if needed, which can help with clients that are behind " +"restrictive firewalls" +msgstr "å¿…è¦ã«å¿œã˜ã¦ã€ 「制é™çš„ファイヤーウォールã®å†…å´ã«ã‚るクライアントを支æ´ã™ã‚‹ã“ã¨ãŒã§ãã¦ã„る〠( UDPパケット内ã®ESPã®ã‚«ãƒ—セルIE) NAT-Tã®ä½¿ç”¨ã‚’有効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã€" + +#: usr/local/www/vpn_ipsec_phase1.php:824 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:834 +#: usr/local/www/vpn_ipsec_phase1.php:855 +#: usr/local/www/vpn_ipsec_phase1.php:855 +msgid "Dead Peer Detection" +msgstr "デッドピア検知" + +#: usr/local/www/vpn_ipsec_phase1.php:827 +#: usr/local/www/vpn_ipsec_phase1.php:840 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:858 +#: usr/local/www/vpn_ipsec_phase1.php:858 +msgid "Enable DPD" +msgstr "DPDを有効ã«ã—ã¾ã™" + +#: usr/local/www/vpn_ipsec_phase1.php:833 +#: usr/local/www/vpn_ipsec_phase1.php:846 +#: usr/local/www/vpn_ipsec_phase1.php:843 +#: usr/local/www/vpn_ipsec_phase1.php:864 +#: usr/local/www/vpn_ipsec_phase1.php:864 +msgid "Delay between requesting peer acknowledgement" +msgstr "ピアã®ç¢ºèªå¿œç­”ã‚’è¦æ±‚é–“ã®é…å»¶" + +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:850 +#: usr/local/www/vpn_ipsec_phase1.php:847 +#: usr/local/www/vpn_ipsec_phase1.php:868 +#: usr/local/www/vpn_ipsec_phase1.php:868 +msgid "retries" +msgstr "リトライ" + +#: usr/local/www/vpn_ipsec_phase1.php:839 +#: usr/local/www/vpn_ipsec_phase1.php:852 +#: usr/local/www/vpn_ipsec_phase1.php:849 +#: usr/local/www/vpn_ipsec_phase1.php:870 +#: usr/local/www/vpn_ipsec_phase1.php:870 +msgid "Number of consecutive failures allowed before disconnect" +msgstr "切断ã™ã‚‹å‰ã«è¨±å¯ã•れãŸé€£ç¶šå¤±æ•—回数" + +#: usr/local/www/vpn_ipsec_phase2.php:109 +#: usr/local/www/vpn_ipsec_phase2.php:111 +#: usr/local/www/vpn_ipsec_phase2.php:111 +msgid "A valid ikeid must be specified." +msgstr "有効ãªikeidを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:113 +#: usr/local/www/vpn_ipsec_phase2.php:115 +#: usr/local/www/vpn_ipsec_phase2.php:115 +msgid "Local network type" +msgstr "ローカルãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç¨®é¡ž" + +#: usr/local/www/vpn_ipsec_phase2.php:113 +#: usr/local/www/vpn_ipsec_phase2.php:115 +#: usr/local/www/vpn_ipsec_phase2.php:115 +msgid "P2 Hash Algorithms" +msgstr "P2ã¯ãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ " + +#: usr/local/www/vpn_ipsec_phase2.php:116 +#: usr/local/www/vpn_ipsec_phase2.php:118 +#: usr/local/www/vpn_ipsec_phase2.php:118 +msgid "Remote network type" +msgstr "リモートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç¨®é¡ž" + +#: usr/local/www/vpn_ipsec_phase2.php:126 +#: usr/local/www/vpn_ipsec_phase2.php:128 +#: usr/local/www/vpn_ipsec_phase2.php:128 +msgid "A valid local network bit count must be specified." +msgstr "有効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:129 +#: usr/local/www/vpn_ipsec_phase2.php:131 +#: usr/local/www/vpn_ipsec_phase2.php:131 +msgid "A valid local network IP address must be specified." +msgstr "有効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:136 +#: usr/local/www/vpn_ipsec_phase2.php:146 +#: usr/local/www/vpn_ipsec_phase2.php:170 +#: usr/local/www/vpn_ipsec_phase2.php:178 +#: usr/local/www/vpn_ipsec_phase2.php:178 +msgid "A valid remote network bit count must be specified." +msgstr "有効ãªãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:139 +#: usr/local/www/vpn_ipsec_phase2.php:149 +#: usr/local/www/vpn_ipsec_phase2.php:173 +#: usr/local/www/vpn_ipsec_phase2.php:181 +#: usr/local/www/vpn_ipsec_phase2.php:181 +msgid "A valid remote network IP address must be specified." +msgstr "有効ãªãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:158 +#: usr/local/www/vpn_ipsec_phase2.php:162 +#: usr/local/www/vpn_ipsec_phase2.php:168 +#: usr/local/www/vpn_ipsec_phase2.php:172 +#: usr/local/www/vpn_ipsec_phase2.php:192 +#: usr/local/www/vpn_ipsec_phase2.php:196 +#: usr/local/www/vpn_ipsec_phase2.php:206 +#: usr/local/www/vpn_ipsec_phase2.php:210 +#: usr/local/www/vpn_ipsec_phase2.php:206 +#: usr/local/www/vpn_ipsec_phase2.php:210 +msgid "Phase2 with this Local Network is already defined for mobile clients." +msgstr "ã“ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨ã®ãƒ•ェーズ2ã¯ã€ã™ã§ã«ãƒ¢ãƒã‚¤ãƒ«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãŸã‚ã«å®šç¾©ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:189 +#: usr/local/www/vpn_ipsec_phase2.php:193 +#: usr/local/www/vpn_ipsec_phase2.php:199 +#: usr/local/www/vpn_ipsec_phase2.php:203 +#: usr/local/www/vpn_ipsec_phase2.php:223 +#: usr/local/www/vpn_ipsec_phase2.php:227 +#: usr/local/www/vpn_ipsec_phase2.php:237 +#: usr/local/www/vpn_ipsec_phase2.php:241 +#: usr/local/www/vpn_ipsec_phase2.php:237 +#: usr/local/www/vpn_ipsec_phase2.php:241 +msgid "" +"Phase2 with this Local/Remote networks combination is already defined for " +"this Phase1." +msgstr "ã“ã®ãƒ•ェーズ1 "ã“ã®ãƒ­ãƒ¼ã‚«ãƒ«/リモートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®çµ„ã¿åˆã‚ã›ã§ãƒ•ェーズ2ãŒæ—¢ã«ã®ãŸã‚ã«å®šç¾©ã•れã¦ã„る〠。" + +#: usr/local/www/vpn_ipsec_phase2.php:204 +#: usr/local/www/vpn_ipsec_phase2.php:216 +#: usr/local/www/vpn_ipsec_phase2.php:240 +#: usr/local/www/vpn_ipsec_phase2.php:254 +#: usr/local/www/vpn_ipsec_phase2.php:254 +msgid "At least one encryption algorithm must be selected." +msgstr "å°‘ãªãã¨ã‚‚1æš—å·åŒ–ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:207 +#: usr/local/www/vpn_ipsec_phase2.php:220 +#: usr/local/www/vpn_ipsec_phase2.php:244 +#: usr/local/www/vpn_ipsec_phase2.php:258 +#: usr/local/www/vpn_ipsec_phase2.php:258 +msgid "The P2 lifetime must be an integer." +msgstr "P2ã¯å¯¿å‘½ãŒæ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +msgid "Edit Phase 2" +msgstr "編集フェーズ2" + +#: usr/local/www/vpn_ipsec_phase2.php:396 +#: usr/local/www/vpn_ipsec_phase2.php:422 +#: usr/local/www/vpn_ipsec_phase2.php:488 +#: usr/local/www/vpn_ipsec_phase2.php:510 +#: usr/local/www/vpn_ipsec_phase2.php:510 +msgid "Disable this phase2 entry" +msgstr "ã“ã®ãƒ•ェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’無効化" + +#: usr/local/www/vpn_ipsec_phase2.php:398 +#: usr/local/www/vpn_ipsec_phase2.php:424 +#: usr/local/www/vpn_ipsec_phase2.php:490 +#: usr/local/www/vpn_ipsec_phase2.php:512 +#: usr/local/www/vpn_ipsec_phase2.php:512 +msgid "" +"Set this option to disable this phase2 entry without removing it from the " +"list" +msgstr "リストã€ã‹ã‚‰å‰Šé™¤ã›ãšã«ã€ã“ã®ãƒ•ェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã€" + +#: usr/local/www/vpn_ipsec_phase2.php:433 +#: usr/local/www/vpn_ipsec_phase2.php:459 +#: usr/local/www/vpn_ipsec_phase2.php:525 +#: usr/local/www/vpn_ipsec_phase2.php:561 +#: usr/local/www/vpn_ipsec_phase2.php:547 +#: usr/local/www/vpn_ipsec_phase2.php:582 +#: usr/local/www/vpn_ipsec_phase2.php:547 +#: usr/local/www/vpn_ipsec_phase2.php:582 +#, php-format +msgid "%s subnet" +msgstr "%sサブãƒãƒƒãƒˆ" + +#: usr/local/www/vpn_ipsec_phase2.php:512 +#: usr/local/www/vpn_ipsec_phase2.php:538 +#: usr/local/www/vpn_ipsec_phase2.php:640 +#: usr/local/www/vpn_ipsec_phase2.php:661 +#: usr/local/www/vpn_ipsec_phase2.php:661 +msgid "Phase 2 proposal (SA/Key Exchange)" +msgstr "フェーズ2ã®ææ¡ˆï¼ˆ SA /éµäº¤æ›ï¼‰" + +#: usr/local/www/vpn_ipsec_phase2.php:527 +#: usr/local/www/vpn_ipsec_phase2.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:655 +#: usr/local/www/vpn_ipsec_phase2.php:676 +#: usr/local/www/vpn_ipsec_phase2.php:676 +msgid "ESP is encryption, AH is authentication only" +msgstr "ESPã¯æš—å·åŒ–ã•れ〠AHã¯èªè¨¼ã®ã¿ã§ã™" + +#: usr/local/www/vpn_ipsec_phase2.php:532 +#: usr/local/www/vpn_ipsec_phase2.php:558 +#: usr/local/www/vpn_ipsec_phase2.php:660 +#: usr/local/www/vpn_ipsec_phase2.php:681 +#: usr/local/www/vpn_ipsec_phase2.php:681 +msgid "Encryption algorithms" +msgstr "æš—å·åŒ–アルゴリズム" + +#: usr/local/www/vpn_ipsec_phase2.php:574 +#: usr/local/www/vpn_ipsec_phase2.php:600 +#: usr/local/www/vpn_ipsec_phase2.php:702 +#: usr/local/www/vpn_ipsec_phase2.php:723 +#: usr/local/www/vpn_ipsec_phase2.php:723 +msgid "" +"Hint: use 3DES for best compatibility or if you have a hardware crypto " +"accelerator card. Blowfish is usually the fastest in software encryption" +msgstr ""ヒント:最高ã®äº’æ›æ€§ã®ãŸã‚ã«ã€ã¾ãŸã¯ã‚ãªãŸãŒãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æš—å·ãŒã‚ã‚‹å ´åˆã¯3DESを使用ã™ã‚‹ã€Œã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚¿ã‚«ãƒ¼ãƒ‰ã‚’。フグã¯é€šå¸¸ã€ã‚½ãƒ•トウェア暗å·åŒ–ã§æœ€é€Ÿã§ã‚ã‚‹" + +#: usr/local/www/vpn_ipsec_phase2.php:580 +#: usr/local/www/vpn_ipsec_phase2.php:606 +#: usr/local/www/vpn_ipsec_phase2.php:708 +#: usr/local/www/vpn_ipsec_phase2.php:729 +#: usr/local/www/vpn_ipsec_phase2.php:729 +msgid "Hash algorithms" +msgstr "ãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ " + +#: usr/local/www/vpn_ipsec_phase2.php:590 +#: usr/local/www/vpn_ipsec_phase2.php:616 +#: usr/local/www/vpn_ipsec_phase2.php:718 +#: usr/local/www/vpn_ipsec_phase2.php:739 +#: usr/local/www/vpn_ipsec_phase2.php:739 +msgid "PFS key group" +msgstr "PFSキー群" + +#: usr/local/www/vpn_ipsec_phase2.php:614 +#: usr/local/www/vpn_ipsec_phase2.php:640 +#: usr/local/www/vpn_ipsec_phase2.php:736 +#: usr/local/www/vpn_ipsec_phase2.php:757 +#: usr/local/www/vpn_ipsec_phase2.php:757 +msgid "Set globally in mobile client options" +msgstr "モãƒã‚¤ãƒ«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚ªãƒ—ションã§ã‚°ãƒ­ãƒ¼ãƒãƒ«ã«è¨­å®š" + +#: usr/local/www/vpn_ipsec_phase2.php:632 +#: usr/local/www/vpn_ipsec_phase2.php:658 +#: usr/local/www/vpn_ipsec_phase2.php:754 +#: usr/local/www/vpn_ipsec_phase2.php:775 +#: usr/local/www/vpn_ipsec_phase2.php:775 +msgid "Automatically ping host" +msgstr "自動的ã«pingをホスト" + +#: usr/local/www/vpn_l2tp.php:300 +msgid "Enable l2tp server" +msgstr "L2TPサーãƒã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/vpn_l2tp.php:325 usr/local/www/vpn_l2tp.php:326 +#: usr/local/www/vpn_l2tp.php:329 usr/local/www/vpn_l2tp.php:329 +msgid "" +"Enter the IP address the L2TP server should give to clients for use as their " +""gateway"" +msgstr "「 「ゲートウェイ〠L2TPサーãƒã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ãŸã‚ã«é¡§å®¢ã«å½¼ã‚‰ã®ã‚’与ãˆã‚‹å¿…è¦ãŒã‚りã€IPアドレスを入力ã—ã¦ãã ã•ã„ "" + +#: usr/local/www/vpn_l2tp.php:337 usr/local/www/vpn_l2tp.php:338 +#: usr/local/www/vpn_l2tp.php:341 usr/local/www/vpn_l2tp.php:341 +msgid "Specify the starting address for the client IP address subnet." +msgstr "クライアントã®IPアドレスã€ã‚µãƒ–ãƒãƒƒãƒˆã®é–‹å§‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã—ã¾ã™ã€‚" + +#: usr/local/www/vpn_l2tp.php:341 usr/local/www/vpn_pppoe_edit.php:390 +#: usr/local/www/vpn_pppoe_edit.php:391 usr/local/www/vpn_pppoe_edit.php:394 +#: usr/local/www/vpn_pppoe_edit.php:394 +msgid "Subnet netmask" +msgstr "サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯" + +#: usr/local/www/vpn_l2tp.php:354 usr/local/www/vpn_pppoe_edit.php:403 +#: usr/local/www/vpn_pppoe_edit.php:404 usr/local/www/vpn_l2tp.php:355 +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_pppoe_edit.php:407 +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_pppoe_edit.php:407 +msgid "is" +msgstr "ã§ã™" + +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:359 +#: usr/local/www/vpn_l2tp.php:362 usr/local/www/vpn_l2tp.php:362 +msgid "Number of L2TP users" +msgstr "L2TPãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ•°" + +#: usr/local/www/vpn_l2tp.php:371 usr/local/www/vpn_l2tp.php:372 +#: usr/local/www/vpn_l2tp.php:375 usr/local/www/vpn_l2tp.php:375 +msgid "is ten L2TP clients" +msgstr "10 L2TPクライアントã§ã‚ã‚‹" + +#: usr/local/www/vpn_l2tp.php:375 usr/local/www/vpn_l2tp.php:376 +#: usr/local/www/vpn_l2tp.php:379 usr/local/www/vpn_l2tp.php:379 +msgid "Secret" +msgstr "秘密" + +#: usr/local/www/vpn_l2tp.php:379 usr/local/www/vpn_l2tp.php:380 +#: usr/local/www/vpn_l2tp.php:383 usr/local/www/vpn_l2tp.php:383 +msgid "" +"Specify optional secret shared between peers. Required on some devices/" +"setups." +msgstr "「ピア間ã§å…±æœ‰ã•れã€ã‚ªãƒ—ションã®ç§˜å¯†ã‚’指定ã—ã¾ã™ã€‚一部ã®ãƒ‡ãƒã‚¤ã‚¹/上ã§å¿…è¦ãª"セットアップ。" + +#: usr/local/www/vpn_l2tp.php:383 +msgid "Encryption type" +msgstr "æš—å·åŒ–ã®ç¨®é¡ž" + +#: usr/local/www/vpn_l2tp.php:386 usr/local/www/vpn_l2tp.php:387 +#: usr/local/www/vpn_l2tp.php:390 usr/local/www/vpn_l2tp.php:390 +msgid "CHAP" +msgstr "CHAP" + +#: usr/local/www/vpn_l2tp.php:387 usr/local/www/services_captiveportal.php:607 +#: usr/local/www/services_captiveportal.php:605 usr/local/www/vpn_l2tp.php:388 +#: usr/local/www/vpn_l2tp.php:391 usr/local/www/services_captiveportal.php:606 +#: usr/local/www/services_captiveportal.php:622 usr/local/www/vpn_l2tp.php:391 +#: usr/local/www/services_captiveportal.php:622 +msgid "PAP" +msgstr "PAP" + +#: usr/local/www/vpn_l2tp.php:390 usr/local/www/vpn_l2tp.php:391 +#: usr/local/www/vpn_l2tp.php:394 usr/local/www/vpn_l2tp.php:394 +msgid "Specifies which protocol to use for authentication." +msgstr "èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ãƒ—ロトコルを指定ã—ã¾ã™ã€‚" + +#: usr/local/www/vpn_l2tp.php:394 usr/local/www/vpn_l2tp.php:395 +#: usr/local/www/vpn_l2tp.php:398 usr/local/www/vpn_l2tp.php:398 +msgid "L2TP DNS Servers" +msgstr "L2TP DNSサーãƒ" + +#: usr/local/www/vpn_l2tp.php:400 usr/local/www/vpn_l2tp.php:401 +#: usr/local/www/vpn_l2tp.php:404 usr/local/www/vpn_l2tp.php:404 +msgid "primary and secondary DNS servers assigned to L2TP clients" +msgstr "L2TPクライアントã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒ—ライマリãŠã‚ˆã³ã‚»ã‚«ãƒ³ãƒ€ãƒªDNSサーãƒ" + +#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_l2tp.php:415 +#: usr/local/www/vpn_l2tp.php:418 usr/local/www/vpn_l2tp.php:418 +msgid "" +"When set, all users will be authenticated using the RADIUS server specified " +"below. The local user database will not be used." +msgstr "下ã®ã€Œè¨­å®šã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ‡å®šã•れãŸRADIUSサーãƒã‚’使用ã—ã¦èªè¨¼ã•れã¾ã™ã€ 。ローカルユーザデータベースã¯ä½¿ç”¨ã•れã¾ã›ã‚“。" + +#: usr/local/www/vpn_l2tp.php:418 usr/local/www/vpn_l2tp.php:419 +#: usr/local/www/vpn_l2tp.php:422 usr/local/www/vpn_l2tp.php:422 +msgid "Sends accounting packets to the RADIUS server." +msgstr "RADIUSサーãƒã«ã‚¢ã‚«ã‚¦ãƒ³ãƒ†ã‚£ãƒ³ã‚°ãƒ‘ケットをé€ä¿¡ã—ã¾ã™ã€‚" + +#: usr/local/www/vpn_l2tp.php:421 +msgid "RADIUS server" +msgstr "RADIUSサーãƒãƒ¼" + +#: usr/local/www/vpn_l2tp.php:425 usr/local/www/vpn_l2tp.php:426 +#: usr/local/www/vpn_l2tp.php:429 usr/local/www/vpn_l2tp.php:429 +msgid "Enter the IP address of the RADIUS server." +msgstr "RADIUSサーãƒã®IPアドレスを入力ã—ã¾ã™ã€‚" + +#: usr/local/www/vpn_l2tp.php:432 usr/local/www/vpn_l2tp.php:433 +#: usr/local/www/vpn_l2tp.php:436 usr/local/www/vpn_l2tp.php:436 +msgid "" +"Enter the shared secret that will be used to authenticate to the RADIUS " +"server." +msgstr "サーãƒãƒ¼ã€ŒRADIUSã¸ã®èªè¨¼ã«ä½¿ç”¨ã•れる共有秘密を入力ã—ã¦ãã ã•ã„ "。" + +#: usr/local/www/vpn_l2tp.php:435 +msgid "RADIUS issued IP's" +msgstr "RADIUSã¯ã€IPã®ã‚’発行ã—ã¾ã—ãŸ" + +#: usr/local/www/vpn_l2tp.php:439 usr/local/www/vpn_l2tp.php:440 +#: usr/local/www/vpn_l2tp.php:443 usr/local/www/vpn_l2tp.php:443 +msgid "Issue IP Addresses via RADIUS server." +msgstr "å•題ã®IPã¯ã€RADIUSサーãƒã‚’経由ã—ã¦è§£æ±ºã€‚" + +#: usr/local/www/vpn_l2tp.php:452 usr/local/www/vpn_l2tp.php:453 +#: usr/local/www/vpn_l2tp.php:456 usr/local/www/vpn_l2tp.php:456 +msgid "" +"Don't forget to add a firewall rule to permit traffic from L2TP clients!" +msgstr "「 L2TPクライアントã‹ã‚‰ã®ãƒˆãƒ©ãƒ•ィックを許å¯ã™ã‚‹ãƒ•ァイアウォールルールを追加ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„ ï¼" + +#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87 +#: usr/local/www/vpn_l2tp_users.php:87 +msgid "The l2tp user list has been modified" +msgstr "L2TPユーザリストãŒå¤‰æ›´ã•れã¦ã„ã‚‹" + +#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87 +#: usr/local/www/vpn_l2tp_users.php:87 +msgid "Warning: this will terminate all current l2tp sessions!" +msgstr "警告:ã“れã¯ç¾åœ¨ã®ã™ã¹ã¦ã®L2TPセッションを終了ã—ã¾ã™ ï¼" + +#: usr/local/www/vpn_l2tp_users_edit.php:164 +#: usr/local/www/vpn_l2tp_users_edit.php:165 +#: usr/local/www/vpn_l2tp_users_edit.php:165 +msgid "If you want to change the users password, enter it here twice." +msgstr "ã‚ãªãŸã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‘スワードを変更ã™ã‚‹å ´åˆã¯ã€äºŒåº¦ã“ã“ã«å…¥åŠ›ã—ã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_client.php:40 +#: usr/local/www/vpn_openvpn_client.php:366 +#: usr/local/www/vpn_openvpn_csc.php:294 +#: usr/local/www/vpn_openvpn_server.php:584 +#: usr/local/www/vpn_openvpn_server.php:657 +#: usr/local/www/vpn_openvpn_client.php:371 +#: usr/local/www/vpn_openvpn_csc.php:293 +#: usr/local/www/vpn_openvpn_server.php:675 +#: usr/local/www/vpn_openvpn_client.php:379 +#: usr/local/www/vpn_openvpn_client.php:397 +#: usr/local/www/vpn_openvpn_server.php:701 +#: usr/local/www/vpn_openvpn_client.php:40 +#: usr/local/www/vpn_openvpn_client.php:397 +#: usr/local/www/vpn_openvpn_csc.php:293 +#: usr/local/www/vpn_openvpn_server.php:701 +msgid "Client" +msgstr "クライアント" + +#: usr/local/www/vpn_openvpn_client.php:82 +#: usr/local/www/vpn_openvpn_client.php:86 +#: usr/local/www/vpn_openvpn_client.php:86 +msgid "Client successfully deleted" +msgstr "クライアント正常ã«å‰Šé™¤" + +#: usr/local/www/vpn_openvpn_client.php:164 +#: usr/local/www/vpn_openvpn_server.php:227 +#: usr/local/www/vpn_openvpn_server.php:232 +#: usr/local/www/vpn_openvpn_client.php:165 +#: usr/local/www/vpn_openvpn_server.php:233 +#: usr/local/www/vpn_openvpn_client.php:171 +#: usr/local/www/vpn_openvpn_client.php:182 +#: usr/local/www/vpn_openvpn_server.php:254 +#: usr/local/www/vpn_openvpn_client.php:182 +#: usr/local/www/vpn_openvpn_server.php:254 +msgid "The specified 'Local port' is in use. Please select another value" +msgstr "指定ã•れãŸ'ローカルãƒãƒ¼ãƒˆã¯ã€Œä½¿ç”¨ä¸­ã§ã™ã€‚別ã®å€¤ã‚’é¸æŠžã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_openvpn_client.php:183 +#: usr/local/www/vpn_openvpn_client.php:184 +#: usr/local/www/vpn_openvpn_client.php:190 +#: usr/local/www/vpn_openvpn_client.php:201 +#: usr/local/www/vpn_openvpn_client.php:201 +msgid "User name and password are required for proxy with authentication." +msgstr "ユーザーåã¨ãƒ‘スワードã¯ã€èªè¨¼ä»˜ãプロキシã®ãŸã‚ã«å¿…è¦ã¨ã•れる。" + +#: usr/local/www/vpn_openvpn_client.php:200 +#: usr/local/www/vpn_openvpn_server.php:235 +#: usr/local/www/vpn_openvpn_server.php:240 +#: usr/local/www/vpn_openvpn_client.php:204 +#: usr/local/www/vpn_openvpn_server.php:241 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_client.php:228 +#: usr/local/www/vpn_openvpn_server.php:262 +#: usr/local/www/vpn_openvpn_client.php:228 +#: usr/local/www/vpn_openvpn_server.php:262 +msgid "The field 'Shared Key' does not appear to be valid" +msgstr "フィールド'共有キー'ã¯æœ‰åйã§ã¯ãªã„よã†ã§ã™" + +#: usr/local/www/vpn_openvpn_client.php:205 +#: usr/local/www/vpn_openvpn_server.php:240 +#: usr/local/www/vpn_openvpn_server.php:245 +#: usr/local/www/vpn_openvpn_client.php:209 +#: usr/local/www/vpn_openvpn_server.php:246 +#: usr/local/www/vpn_openvpn_client.php:215 +#: usr/local/www/vpn_openvpn_client.php:233 +#: usr/local/www/vpn_openvpn_server.php:267 +#: usr/local/www/vpn_openvpn_client.php:233 +#: usr/local/www/vpn_openvpn_server.php:267 +msgid "The field 'TLS Authentication Key' does not appear to be valid" +msgstr "フィールド' TLSèªè¨¼ã‚­ãƒ¼'ã¯æœ‰åйã§ã¯ãªã„よã†ã§ã™" + +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/vpn_openvpn_server.php:286 +#: usr/local/www/vpn_openvpn_server.php:291 +#: usr/local/www/vpn_openvpn_client.php:218 +#: usr/local/www/vpn_openvpn_server.php:292 +#: usr/local/www/vpn_openvpn_client.php:224 +#: usr/local/www/vpn_openvpn_client.php:242 +#: usr/local/www/vpn_openvpn_server.php:313 +#: usr/local/www/vpn_openvpn_client.php:242 +#: usr/local/www/vpn_openvpn_server.php:313 +msgid "Shared key" +msgstr "共有éµ" + +#: usr/local/www/vpn_openvpn_client.php:367 +#: usr/local/www/vpn_openvpn_csc.php:295 +#: usr/local/www/vpn_openvpn_server.php:585 +#: usr/local/www/vpn_openvpn_server.php:658 +#: usr/local/www/vpn_openvpn_client.php:372 +#: usr/local/www/vpn_openvpn_csc.php:294 +#: usr/local/www/vpn_openvpn_server.php:676 +#: usr/local/www/vpn_openvpn_client.php:380 +#: usr/local/www/vpn_openvpn_client.php:398 +#: usr/local/www/vpn_openvpn_server.php:702 +#: usr/local/www/vpn_openvpn_client.php:398 +#: usr/local/www/vpn_openvpn_csc.php:294 +#: usr/local/www/vpn_openvpn_server.php:702 +msgid "Client Specific Overrides" +msgstr "クライアント固有ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰" + +#: usr/local/www/vpn_openvpn_client.php:397 +#: usr/local/www/vpn_openvpn_client.php:402 +#: usr/local/www/vpn_openvpn_client.php:410 +#: usr/local/www/vpn_openvpn_client.php:428 +#: usr/local/www/vpn_openvpn_client.php:428 +msgid "Disable this client" +msgstr "ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’無効ã«ã™ã‚‹" + +#: usr/local/www/vpn_openvpn_client.php:402 +#: usr/local/www/vpn_openvpn_client.php:407 +#: usr/local/www/vpn_openvpn_client.php:415 +#: usr/local/www/vpn_openvpn_client.php:433 +#: usr/local/www/vpn_openvpn_client.php:433 +msgid "" +"Set this option to disable this client without removing it from the list" +msgstr "「リストã‹ã‚‰å‰Šé™¤ã›ãšã«ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定" + +#: usr/local/www/vpn_openvpn_client.php:406 +#: usr/local/www/vpn_openvpn_server.php:624 +#: usr/local/www/vpn_openvpn_server.php:697 +#: usr/local/www/vpn_openvpn_client.php:411 +#: usr/local/www/vpn_openvpn_server.php:715 +#: usr/local/www/vpn_openvpn_client.php:419 +#: usr/local/www/vpn_openvpn_client.php:437 +#: usr/local/www/vpn_openvpn_server.php:741 +#: usr/local/www/vpn_openvpn_client.php:437 +#: usr/local/www/vpn_openvpn_server.php:741 +msgid "Server Mode" +msgstr "サーãƒãƒ¢ãƒ¼ãƒ‰" + +#: usr/local/www/vpn_openvpn_client.php:436 +#: usr/local/www/vpn_openvpn_client.php:441 +#: usr/local/www/vpn_openvpn_client.php:449 +#: usr/local/www/vpn_openvpn_client.php:467 +#: usr/local/www/vpn_openvpn_client.php:467 +msgid "Device mode" +msgstr "デãƒã‚¤ã‚¹ãƒ¢ãƒ¼ãƒ‰" + +#: usr/local/www/vpn_openvpn_client.php:476 +#: usr/local/www/vpn_openvpn_server.php:716 +#: usr/local/www/vpn_openvpn_server.php:789 +#: usr/local/www/vpn_openvpn_client.php:481 +#: usr/local/www/vpn_openvpn_server.php:817 +#: usr/local/www/vpn_openvpn_client.php:499 +#: usr/local/www/vpn_openvpn_client.php:518 +#: usr/local/www/vpn_openvpn_server.php:844 +#: usr/local/www/vpn_openvpn_client.php:518 +#: usr/local/www/vpn_openvpn_server.php:844 +msgid "Local port" +msgstr "ローカルãƒãƒ¼ãƒˆ" + +#: usr/local/www/vpn_openvpn_client.php:480 +#: usr/local/www/vpn_openvpn_client.php:485 +#: usr/local/www/vpn_openvpn_client.php:503 +#: usr/local/www/vpn_openvpn_client.php:522 +#: usr/local/www/vpn_openvpn_client.php:522 +msgid "" +"Set this option if you would like to bind to a specific port. Leave this " +"blank or enter 0 for a random dynamic port." +msgstr "「ã‚ãªãŸã¯ã€ç‰¹å®šã®ãƒãƒ¼ãƒˆã«ãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã—ã¾ã™ã€‚ã“ã®ã¾ã¾ã€Œãƒ–ランクã¾ãŸã¯ãƒ©ãƒ³ãƒ€ãƒ å‹•çš„ãƒãƒ¼ãƒˆã«0を入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/vpn_openvpn_client.php:484 +#: usr/local/www/vpn_openvpn_client.php:489 +#: usr/local/www/vpn_openvpn_client.php:507 +#: usr/local/www/vpn_openvpn_client.php:526 +#: usr/local/www/vpn_openvpn_client.php:526 +msgid "Server host or address" +msgstr "Serverホストã¾ãŸã¯ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/vpn_openvpn_client.php:490 +#: usr/local/www/vpn_openvpn_client.php:495 +#: usr/local/www/vpn_openvpn_client.php:513 +#: usr/local/www/vpn_openvpn_client.php:532 +#: usr/local/www/vpn_openvpn_client.php:532 +msgid "Server port" +msgstr "サーãƒãƒãƒ¼ãƒˆ" + +#: usr/local/www/vpn_openvpn_client.php:496 +#: usr/local/www/vpn_openvpn_client.php:501 +#: usr/local/www/vpn_openvpn_client.php:519 +#: usr/local/www/vpn_openvpn_client.php:538 +#: usr/local/www/vpn_openvpn_client.php:538 +msgid "Proxy host or address" +msgstr "プロキシã®ãƒ›ã‚¹ãƒˆã¾ãŸã¯ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/vpn_openvpn_client.php:502 +#: usr/local/www/vpn_openvpn_client.php:507 +#: usr/local/www/vpn_openvpn_client.php:525 +#: usr/local/www/vpn_openvpn_client.php:544 +#: usr/local/www/vpn_openvpn_client.php:544 +msgid "Proxy port" +msgstr "プロキシãƒãƒ¼ãƒˆ" + +#: usr/local/www/vpn_openvpn_client.php:508 +#: usr/local/www/vpn_openvpn_client.php:513 +#: usr/local/www/vpn_openvpn_client.php:531 +#: usr/local/www/vpn_openvpn_client.php:550 +#: usr/local/www/vpn_openvpn_client.php:550 +msgid "Proxy authentication extra options" +msgstr "プロキシèªè¨¼ã®ä½™åˆ†ãªã‚ªãƒ—ション" + +#: usr/local/www/vpn_openvpn_client.php:520 +#: usr/local/www/vpn_openvpn_client.php:525 +#: usr/local/www/vpn_openvpn_client.php:543 +#: usr/local/www/vpn_openvpn_client.php:562 +#: usr/local/www/vpn_openvpn_client.php:562 +msgid "basic" +msgstr "基本" + +#: usr/local/www/vpn_openvpn_client.php:521 +#: usr/local/www/vpn_openvpn_client.php:526 +#: usr/local/www/vpn_openvpn_client.php:544 +#: usr/local/www/vpn_openvpn_client.php:563 +#: usr/local/www/vpn_openvpn_client.php:563 +msgid "ntlm" +msgstr "NTLM" + +#: usr/local/www/vpn_openvpn_client.php:552 +#: usr/local/www/vpn_openvpn_client.php:557 +#: usr/local/www/vpn_openvpn_client.php:575 +#: usr/local/www/vpn_openvpn_client.php:594 +#: usr/local/www/vpn_openvpn_client.php:594 +msgid "Server host name resolution" +msgstr "サーãƒãƒ¼ã®ãƒ›ã‚¹ãƒˆå解決" + +#: usr/local/www/vpn_openvpn_client.php:562 +#: usr/local/www/vpn_openvpn_client.php:567 +#: usr/local/www/vpn_openvpn_client.php:585 +#: usr/local/www/vpn_openvpn_client.php:604 +#: usr/local/www/vpn_openvpn_client.php:604 +msgid "Infinitely resolve server" +msgstr "ç„¡é™ã«è§£æ±ºã‚µãƒ¼ãƒ" + +#: usr/local/www/vpn_openvpn_client.php:567 +#: usr/local/www/vpn_openvpn_client.php:572 +#: usr/local/www/vpn_openvpn_client.php:590 +#: usr/local/www/vpn_openvpn_client.php:609 +#: usr/local/www/vpn_openvpn_client.php:609 +msgid "" +"Continuously attempt to resolve the server host name. Useful when " +"communicating with a server that is not permanently connected to the Internet" +msgstr "「継続的ã«ã‚µãƒ¼ãƒã®ãƒ›ã‚¹ãƒˆåを解決ã—よã†ã€‚ã¨ãã«ä¾¿åˆ©ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«å¸¸æ™‚接続ã•れã¦ã„ãªã„サーãƒãƒ¼ã¨ã®é€šä¿¡" + +#: usr/local/www/vpn_openvpn_client.php:584 +#: usr/local/www/vpn_openvpn_server.php:733 +#: usr/local/www/vpn_openvpn_server.php:806 +#: usr/local/www/vpn_openvpn_client.php:589 +#: usr/local/www/vpn_openvpn_server.php:834 +#: usr/local/www/vpn_openvpn_client.php:607 +#: usr/local/www/vpn_openvpn_client.php:626 +#: usr/local/www/vpn_openvpn_server.php:861 +#: usr/local/www/vpn_openvpn_client.php:626 +#: usr/local/www/vpn_openvpn_server.php:861 +msgid "Cryptographic Settings" +msgstr "æš—å·åŒ–設定" + +#: usr/local/www/vpn_openvpn_client.php:587 +#: usr/local/www/vpn_openvpn_server.php:736 +#: usr/local/www/vpn_openvpn_server.php:809 +#: usr/local/www/vpn_openvpn_client.php:592 +#: usr/local/www/vpn_openvpn_server.php:837 +#: usr/local/www/vpn_openvpn_client.php:610 +#: usr/local/www/vpn_openvpn_client.php:629 +#: usr/local/www/vpn_openvpn_server.php:864 +#: usr/local/www/vpn_openvpn_client.php:629 +#: usr/local/www/vpn_openvpn_server.php:864 +msgid "TLS Authentication" +msgstr "TLSèªè¨¼" + +#: usr/local/www/vpn_openvpn_client.php:597 +#: usr/local/www/vpn_openvpn_server.php:746 +#: usr/local/www/vpn_openvpn_server.php:819 +#: usr/local/www/vpn_openvpn_client.php:602 +#: usr/local/www/vpn_openvpn_server.php:847 +#: usr/local/www/vpn_openvpn_client.php:620 +#: usr/local/www/vpn_openvpn_client.php:639 +#: usr/local/www/vpn_openvpn_server.php:874 +#: usr/local/www/vpn_openvpn_client.php:639 +#: usr/local/www/vpn_openvpn_server.php:874 +msgid "Enable authentication of TLS packets" +msgstr "TLSパケットã®èªè¨¼ã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/vpn_openvpn_client.php:611 +#: usr/local/www/vpn_openvpn_server.php:760 +#: usr/local/www/vpn_openvpn_server.php:833 +#: usr/local/www/vpn_openvpn_client.php:616 +#: usr/local/www/vpn_openvpn_server.php:861 +#: usr/local/www/vpn_openvpn_client.php:634 +#: usr/local/www/vpn_openvpn_client.php:653 +#: usr/local/www/vpn_openvpn_server.php:888 +#: usr/local/www/vpn_openvpn_client.php:653 +#: usr/local/www/vpn_openvpn_server.php:888 +msgid "Automatically generate a shared TLS authentication key" +msgstr "自動的ã«å…±æœ‰TLSèªè¨¼ã‚­ãƒ¼ã‚’生æˆ" + +#: usr/local/www/vpn_openvpn_client.php:622 +#: usr/local/www/vpn_openvpn_client.php:699 +#: usr/local/www/vpn_openvpn_server.php:771 +#: usr/local/www/vpn_openvpn_server.php:891 +#: usr/local/www/vpn_openvpn_server.php:844 +#: usr/local/www/vpn_openvpn_server.php:964 +#: usr/local/www/vpn_openvpn_client.php:627 +#: usr/local/www/vpn_openvpn_client.php:704 +#: usr/local/www/vpn_openvpn_server.php:872 +#: usr/local/www/vpn_openvpn_server.php:992 +#: usr/local/www/vpn_openvpn_client.php:645 +#: usr/local/www/vpn_openvpn_client.php:722 +#: usr/local/www/vpn_openvpn_client.php:664 +#: usr/local/www/vpn_openvpn_client.php:741 +#: usr/local/www/vpn_openvpn_server.php:899 +#: usr/local/www/vpn_openvpn_server.php:1019 +#: usr/local/www/vpn_openvpn_client.php:664 +#: usr/local/www/vpn_openvpn_client.php:741 +#: usr/local/www/vpn_openvpn_server.php:899 +#: usr/local/www/vpn_openvpn_server.php:1019 +msgid "Paste your shared key here" +msgstr "ã“ã“ã«ã‚ãªãŸã®å…±æœ‰ã‚­ãƒ¼ã‚’貼り付ã‘ã‚‹" + +#: usr/local/www/vpn_openvpn_client.php:648 +#: usr/local/www/vpn_openvpn_client.php:653 +#: usr/local/www/vpn_openvpn_client.php:671 +#: usr/local/www/vpn_openvpn_client.php:690 +#: usr/local/www/vpn_openvpn_client.php:690 +msgid "Client Certificate" +msgstr "クライアント証明書" + +#: usr/local/www/vpn_openvpn_client.php:677 +#: usr/local/www/vpn_openvpn_server.php:869 +#: usr/local/www/vpn_openvpn_server.php:942 +#: usr/local/www/vpn_openvpn_client.php:682 +#: usr/local/www/vpn_openvpn_server.php:970 +#: usr/local/www/vpn_openvpn_client.php:700 +#: usr/local/www/vpn_openvpn_client.php:719 +#: usr/local/www/vpn_openvpn_server.php:997 +#: usr/local/www/vpn_openvpn_client.php:719 +#: usr/local/www/vpn_openvpn_server.php:997 +msgid "Shared Key" +msgstr "共有éµ" + +#: usr/local/www/vpn_openvpn_client.php:688 +#: usr/local/www/vpn_openvpn_server.php:880 +#: usr/local/www/vpn_openvpn_server.php:953 +#: usr/local/www/vpn_openvpn_client.php:693 +#: usr/local/www/vpn_openvpn_server.php:981 +#: usr/local/www/vpn_openvpn_client.php:711 +#: usr/local/www/vpn_openvpn_client.php:730 +#: usr/local/www/vpn_openvpn_server.php:1008 +#: usr/local/www/vpn_openvpn_client.php:730 +#: usr/local/www/vpn_openvpn_server.php:1008 +msgid "Automatically generate a shared key" +msgstr "自動的ã«å…±æœ‰éµã‚’生æˆã™ã‚‹" + +#: usr/local/www/vpn_openvpn_client.php:724 +#: usr/local/www/vpn_openvpn_server.php:916 +#: usr/local/www/vpn_openvpn_server.php:989 +#: usr/local/www/vpn_openvpn_client.php:729 +#: usr/local/www/vpn_openvpn_server.php:1017 +#: usr/local/www/vpn_openvpn_client.php:747 +#: usr/local/www/vpn_openvpn_client.php:766 +#: usr/local/www/vpn_openvpn_server.php:1044 +#: usr/local/www/vpn_openvpn_client.php:766 +#: usr/local/www/vpn_openvpn_server.php:1044 +msgid "Hardware Crypto" +msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æš—å·" + +#: usr/local/www/vpn_openvpn_client.php:745 +#: usr/local/www/vpn_openvpn_csc.php:374 +#: usr/local/www/vpn_openvpn_server.php:980 +#: usr/local/www/vpn_openvpn_server.php:1053 +#: usr/local/www/vpn_openvpn_client.php:750 +#: usr/local/www/vpn_openvpn_csc.php:373 +#: usr/local/www/vpn_openvpn_server.php:1081 +#: usr/local/www/vpn_openvpn_client.php:768 +#: usr/local/www/vpn_openvpn_client.php:787 +#: usr/local/www/vpn_openvpn_server.php:1108 +#: usr/local/www/vpn_openvpn_client.php:787 +#: usr/local/www/vpn_openvpn_csc.php:373 +#: usr/local/www/vpn_openvpn_server.php:1108 +msgid "Tunnel Settings" +msgstr "トンãƒãƒ«è¨­å®š" + +#: usr/local/www/vpn_openvpn_client.php:748 +#: usr/local/www/vpn_openvpn_csc.php:377 +#: usr/local/www/vpn_openvpn_server.php:1450 +#: usr/local/www/vpn_openvpn_server.php:1592 +#: usr/local/www/vpn_openvpn_client.php:753 +#: usr/local/www/vpn_openvpn_csc.php:376 +#: usr/local/www/vpn_openvpn_server.php:1633 +#: usr/local/www/vpn_openvpn_server.php:1685 +#: usr/local/www/vpn_openvpn_csc.php:376 +#: usr/local/www/vpn_openvpn_server.php:1685 +msgid "Tunnel Network" +msgstr "トンãƒãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/vpn_openvpn_client.php:752 +#: usr/local/www/vpn_openvpn_csc.php:381 +#: usr/local/www/vpn_openvpn_client.php:757 +#: usr/local/www/vpn_openvpn_csc.php:380 +#: usr/local/www/vpn_openvpn_client.php:775 +#: usr/local/www/vpn_openvpn_client.php:794 +#: usr/local/www/vpn_openvpn_client.php:794 +#: usr/local/www/vpn_openvpn_csc.php:380 +msgid "" +"This is the virtual network used for private communications between this " +"client and the server expressed using CIDR (eg. 10.0.8.0/24). The first " +"network address is assumed to be the server address and the second network " +"address will be assigned to the client virtual interface" +msgstr "クライアントã¨ã‚µãƒ¼ãƒãƒ¼ã®ã€Œã“れã¯ã€ã“ã®é–“ã®ãƒ—ライベート通信ã«ä½¿ç”¨ã•れる仮想ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る「 CIDR (例: 10.0.8.0/24 )を使用ã—ã¦è¡¨ç¾ã€‚最åˆã®ã€Œãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ã‚µãƒ¼ãƒã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã‚ã‚‹ã¨ã¿ãªã•れã€ç¬¬äºŒã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"アドレスã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ä»®æƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™" + +#: usr/local/www/vpn_openvpn_client.php:766 +#: usr/local/www/vpn_openvpn_client.php:771 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter here the " +"remote LAN here. You may leave this blank to only communicate with other " +"clients" +msgstr "「ã“れã¯ãƒˆãƒ³ãƒãƒ«ã‚’経由ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•れるãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹ã€ãã®çµæžœã€ã‚µã‚¤ãƒˆãƒ„ーã€ã‚µã‚¤ãƒˆVPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 「 CIDRã®ç¯„囲ã¨ã—ã¦è¡¨ã•。ã“れã¯ã€ã‚µã‚¤ãƒˆé–“VPNã®å ´åˆã¯ã€ã“ã“ã§å…¥åŠ›ã—ãŸã€Œã“ã“ã«ãƒªãƒ¢ãƒ¼ãƒˆLAN 。ã‚ãªãŸã ã‘ã®ä»–ã®ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨é€šä¿¡ã™ã‚‹ãŸã‚ã«ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ" + +#: usr/local/www/vpn_openvpn_client.php:776 +#: usr/local/www/vpn_openvpn_client.php:781 +#: usr/local/www/vpn_openvpn_client.php:827 +#: usr/local/www/vpn_openvpn_client.php:846 +#: usr/local/www/vpn_openvpn_client.php:846 +msgid "Limit outgoing bandwidth" +msgstr "発信帯域幅を制é™" + +#: usr/local/www/vpn_openvpn_client.php:780 +#: usr/local/www/vpn_openvpn_client.php:785 +#: usr/local/www/vpn_openvpn_client.php:831 +#: usr/local/www/vpn_openvpn_client.php:850 +#: usr/local/www/vpn_openvpn_client.php:850 +msgid "" +"Maximum outgoing bandwidth for this tunnel. Leave empty for no limit. The " +"input value has to be something between 100 bytes/sec and 100 Mbytes/sec " +"(entered as bytes per second)" +msgstr "「ã“ã®ãƒˆãƒ³ãƒãƒ«ã®æœ€å¤§é€ä¿¡å¸¯åŸŸå¹…ã¯åˆ¶é™ãªã—ã«ç©ºã®ã¾ã¾ã«ã—ã¾ã™ã€‚ 「入力値ãŒ100ãƒã‚¤ãƒˆ/ç§’ã¨100Mãƒã‚¤ãƒˆ/ç§’ã®é–“ã«ä½•ã‹ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ (ãƒã‚¤ãƒˆ/ç§’ã§å…¥åŠ›ï¼‰" + +#: usr/local/www/vpn_openvpn_client.php:797 +#: usr/local/www/vpn_openvpn_server.php:1087 +#: usr/local/www/vpn_openvpn_server.php:1229 +#: usr/local/www/vpn_openvpn_client.php:802 +#: usr/local/www/vpn_openvpn_server.php:1271 +#: usr/local/www/vpn_openvpn_client.php:848 +#: usr/local/www/vpn_openvpn_client.php:867 +#: usr/local/www/vpn_openvpn_server.php:1298 +#: usr/local/www/vpn_openvpn_client.php:867 +#: usr/local/www/vpn_openvpn_server.php:1298 +msgid "Compress tunnel packets using the LZO algorithm" +msgstr "LZOアルゴリズムを使用ã—ã¦ã€ãƒˆãƒ³ãƒãƒ«ãƒ‘ケットを圧縮" + +#: usr/local/www/vpn_openvpn_client.php:805 +#: usr/local/www/vpn_openvpn_server.php:1095 +#: usr/local/www/vpn_openvpn_server.php:1237 +#: usr/local/www/vpn_openvpn_client.php:810 +#: usr/local/www/vpn_openvpn_server.php:1279 +#: usr/local/www/vpn_openvpn_client.php:856 +#: usr/local/www/vpn_openvpn_client.php:875 +#: usr/local/www/vpn_openvpn_server.php:1306 +#: usr/local/www/vpn_openvpn_client.php:875 +#: usr/local/www/vpn_openvpn_server.php:1306 +msgid "Type-of-Service" +msgstr "サービスタイプ" + +#: usr/local/www/vpn_openvpn_client.php:815 +#: usr/local/www/vpn_openvpn_server.php:1105 +#: usr/local/www/vpn_openvpn_server.php:1247 +#: usr/local/www/vpn_openvpn_client.php:820 +#: usr/local/www/vpn_openvpn_server.php:1289 +#: usr/local/www/vpn_openvpn_client.php:866 +#: usr/local/www/vpn_openvpn_client.php:885 +#: usr/local/www/vpn_openvpn_server.php:1316 +#: usr/local/www/vpn_openvpn_client.php:885 +#: usr/local/www/vpn_openvpn_server.php:1316 +msgid "" +"Set the TOS IP header value of tunnel packets to match the encapsulated " +"packet value" +msgstr "パケット値「カプセル化ã«åˆã‚ã›ã¦ã€ãƒˆãƒ³ãƒãƒ«ãƒ‘ケットã®TOS IPヘッダーã®å€¤ã‚’設定ã—ã¾ã™"" + +#: usr/local/www/vpn_openvpn_client.php:826 +#: usr/local/www/vpn_openvpn_server.php:1409 +#: usr/local/www/vpn_openvpn_server.php:1551 +#: usr/local/www/vpn_openvpn_client.php:831 +#: usr/local/www/vpn_openvpn_server.php:1593 +#: usr/local/www/vpn_openvpn_client.php:880 +#: usr/local/www/vpn_openvpn_client.php:899 +#: usr/local/www/vpn_openvpn_server.php:1645 +#: usr/local/www/vpn_openvpn_client.php:899 +#: usr/local/www/vpn_openvpn_server.php:1645 +msgid "Advanced configuration" +msgstr "高度ãªè¨­å®š" + +#: usr/local/www/vpn_openvpn_client.php:835 +#: usr/local/www/vpn_openvpn_client.php:840 +#: usr/local/www/vpn_openvpn_client.php:889 +#: usr/local/www/vpn_openvpn_client.php:908 +#: usr/local/www/vpn_openvpn_client.php:908 +msgid "" +"Enter any additional options you would like to add to the OpenVPN client " +"configuration here, separated by a semicolon" +msgstr "セミコロンã§åŒºåˆ‡ã‚‰ã‚Œã€ä»¥ä¸‹ã«è¨­å®šã€ã§ã¯ã€ OpenVPNクライアントã«è¿½åŠ ã™ã‚‹è¿½åŠ ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’å…¥åŠ›ã—ã¦ãã ã•ã„ "" + +#: usr/local/www/vpn_openvpn_client.php:836 +#: usr/local/www/vpn_openvpn_client.php:841 +#: usr/local/www/vpn_openvpn_client.php:890 +msgid "EXAMPLE: route 10.0.0.0 255.255.255.0;" +msgstr "例:ルート10.0.0.0 255.255.255.0;" + +#: usr/local/www/vpn_openvpn_client.php:891 +#: usr/local/www/vpn_openvpn_client.php:896 +#: usr/local/www/vpn_openvpn_client.php:949 +#: usr/local/www/vpn_openvpn_client.php:968 +#: usr/local/www/vpn_openvpn_client.php:968 +msgid "edit client" +msgstr "編集クライアント" + +#: usr/local/www/vpn_openvpn_client.php:895 +#: usr/local/www/vpn_openvpn_client.php:900 +#: usr/local/www/vpn_openvpn_client.php:953 +#: usr/local/www/vpn_openvpn_client.php:972 +#: usr/local/www/vpn_openvpn_client.php:972 +msgid "delete client" +msgstr "クライアントを削除ã™ã‚‹" + +#: usr/local/www/vpn_openvpn_client.php:908 +#: usr/local/www/vpn_openvpn_client.php:913 +#: usr/local/www/vpn_openvpn_client.php:966 +#: usr/local/www/vpn_openvpn_client.php:985 +#: usr/local/www/vpn_openvpn_client.php:985 +msgid "add client" +msgstr "クライアントを追加" + +#: usr/local/www/vpn_openvpn_client.php:915 +#: usr/local/www/vpn_openvpn_client.php:920 +#: usr/local/www/vpn_openvpn_client.php:973 +#: usr/local/www/vpn_openvpn_client.php:992 +#: usr/local/www/vpn_openvpn_client.php:992 +msgid "Additional OpenVPN clients can be added here." +msgstr "追加ã®OpenVPNã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_csc.php:40 usr/local/www/vpn_openvpn_csc.php:40 +msgid "Client Specific Override" +msgstr "クライアント固有ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰" + +#: usr/local/www/vpn_openvpn_csc.php:67 usr/local/www/vpn_openvpn_csc.php:66 +#: usr/local/www/vpn_openvpn_csc.php:66 +msgid "Client Specific Override successfully deleted" +msgstr "クライアント固有ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ãŒæ­£å¸¸ã«å‰Šé™¤" + +#: usr/local/www/vpn_openvpn_csc.php:131 +#: usr/local/www/vpn_openvpn_server.php:244 +#: usr/local/www/vpn_openvpn_server.php:249 +#: usr/local/www/vpn_openvpn_csc.php:130 +#: usr/local/www/vpn_openvpn_server.php:250 +#: usr/local/www/vpn_openvpn_server.php:271 +#: usr/local/www/vpn_openvpn_csc.php:130 +#: usr/local/www/vpn_openvpn_server.php:271 +msgid "The field 'DNS Server #1' must contain a valid IP address" +msgstr "フィールドã®DNSサーãƒãƒ¼" + +#: usr/local/www/vpn_openvpn_csc.php:133 +#: usr/local/www/vpn_openvpn_server.php:246 +#: usr/local/www/vpn_openvpn_server.php:251 +#: usr/local/www/vpn_openvpn_csc.php:132 +#: usr/local/www/vpn_openvpn_server.php:252 +#: usr/local/www/vpn_openvpn_server.php:273 +#: usr/local/www/vpn_openvpn_csc.php:132 +#: usr/local/www/vpn_openvpn_server.php:273 +msgid "The field 'DNS Server #2' must contain a valid IP address" +msgstr "フィールドã®DNSサーãƒãƒ¼" + +#: usr/local/www/vpn_openvpn_csc.php:135 +#: usr/local/www/vpn_openvpn_server.php:248 +#: usr/local/www/vpn_openvpn_server.php:253 +#: usr/local/www/vpn_openvpn_csc.php:134 +#: usr/local/www/vpn_openvpn_server.php:254 +#: usr/local/www/vpn_openvpn_server.php:275 +#: usr/local/www/vpn_openvpn_csc.php:134 +#: usr/local/www/vpn_openvpn_server.php:275 +msgid "The field 'DNS Server #3' must contain a valid IP address" +msgstr "フィールドã®DNSサーãƒãƒ¼" + +#: usr/local/www/vpn_openvpn_csc.php:137 +#: usr/local/www/vpn_openvpn_server.php:250 +#: usr/local/www/vpn_openvpn_server.php:255 +#: usr/local/www/vpn_openvpn_csc.php:136 +#: usr/local/www/vpn_openvpn_server.php:256 +#: usr/local/www/vpn_openvpn_server.php:277 +#: usr/local/www/vpn_openvpn_csc.php:136 +#: usr/local/www/vpn_openvpn_server.php:277 +msgid "The field 'DNS Server #4' must contain a valid IP address" +msgstr "フィールドã®DNSサーãƒãƒ¼" + +#: usr/local/www/vpn_openvpn_csc.php:142 +#: usr/local/www/vpn_openvpn_server.php:255 +#: usr/local/www/vpn_openvpn_server.php:260 +#: usr/local/www/vpn_openvpn_csc.php:141 +#: usr/local/www/vpn_openvpn_server.php:261 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/vpn_openvpn_csc.php:141 +#: usr/local/www/vpn_openvpn_server.php:282 +msgid "The field 'NTP Server #1' must contain a valid IP address" +msgstr "フィールド「 NTPサーãƒ" + +#: usr/local/www/vpn_openvpn_csc.php:144 +#: usr/local/www/vpn_openvpn_server.php:257 +#: usr/local/www/vpn_openvpn_server.php:262 +#: usr/local/www/vpn_openvpn_csc.php:143 +#: usr/local/www/vpn_openvpn_server.php:263 +#: usr/local/www/vpn_openvpn_server.php:284 +#: usr/local/www/vpn_openvpn_csc.php:143 +#: usr/local/www/vpn_openvpn_server.php:284 +msgid "The field 'NTP Server #2' must contain a valid IP address" +msgstr "フィールド「 NTPサーãƒ" + +#: usr/local/www/vpn_openvpn_csc.php:146 +#: usr/local/www/vpn_openvpn_server.php:259 +#: usr/local/www/vpn_openvpn_server.php:264 +#: usr/local/www/vpn_openvpn_csc.php:145 +#: usr/local/www/vpn_openvpn_server.php:265 +#: usr/local/www/vpn_openvpn_server.php:286 +#: usr/local/www/vpn_openvpn_csc.php:145 +#: usr/local/www/vpn_openvpn_server.php:286 +msgid "The field 'NTP Server #3' must contain a valid IP address" +msgstr "フィールド「 NTPサーãƒ" + +#: usr/local/www/vpn_openvpn_csc.php:148 +#: usr/local/www/vpn_openvpn_server.php:261 +#: usr/local/www/vpn_openvpn_server.php:266 +#: usr/local/www/vpn_openvpn_csc.php:147 +#: usr/local/www/vpn_openvpn_server.php:267 +#: usr/local/www/vpn_openvpn_server.php:288 +#: usr/local/www/vpn_openvpn_csc.php:147 +#: usr/local/www/vpn_openvpn_server.php:288 +msgid "The field 'NTP Server #4' must contain a valid IP address" +msgstr "フィールド「 NTPサーãƒ" + +#: usr/local/www/vpn_openvpn_csc.php:154 +#: usr/local/www/vpn_openvpn_server.php:267 +#: usr/local/www/vpn_openvpn_server.php:272 +#: usr/local/www/vpn_openvpn_csc.php:153 +#: usr/local/www/vpn_openvpn_server.php:273 +#: usr/local/www/vpn_openvpn_server.php:294 +#: usr/local/www/vpn_openvpn_csc.php:153 +#: usr/local/www/vpn_openvpn_server.php:294 +msgid "The field 'WINS Server #1' must contain a valid IP address" +msgstr "フィールドã«ã¯ã€ 「 WINSサーãƒãƒ¼" + +#: usr/local/www/vpn_openvpn_csc.php:156 +#: usr/local/www/vpn_openvpn_server.php:269 +#: usr/local/www/vpn_openvpn_server.php:274 +#: usr/local/www/vpn_openvpn_csc.php:155 +#: usr/local/www/vpn_openvpn_server.php:275 +#: usr/local/www/vpn_openvpn_server.php:296 +#: usr/local/www/vpn_openvpn_csc.php:155 +#: usr/local/www/vpn_openvpn_server.php:296 +msgid "The field 'WINS Server #2' must contain a valid IP address" +msgstr "フィールドã«ã¯ã€ 「 WINSサーãƒãƒ¼" + +#: usr/local/www/vpn_openvpn_csc.php:160 +#: usr/local/www/vpn_openvpn_server.php:273 +#: usr/local/www/vpn_openvpn_server.php:278 +#: usr/local/www/vpn_openvpn_csc.php:159 +#: usr/local/www/vpn_openvpn_server.php:279 +#: usr/local/www/vpn_openvpn_server.php:300 +#: usr/local/www/vpn_openvpn_csc.php:159 +#: usr/local/www/vpn_openvpn_server.php:300 +msgid "" +"The field 'NetBIOS Data Distribution Server #1' must contain a valid IP " +"address" +msgstr "「フィールドã€ã®NetBIOSデータé…信サーãƒ" + +#: usr/local/www/vpn_openvpn_csc.php:325 usr/local/www/vpn_openvpn_csc.php:324 +#: usr/local/www/vpn_openvpn_csc.php:324 +msgid "Disable this override" +msgstr "ã“ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’無効ã«ã™ã‚‹" + +#: usr/local/www/vpn_openvpn_csc.php:330 usr/local/www/vpn_openvpn_csc.php:329 +#: usr/local/www/vpn_openvpn_csc.php:329 +msgid "" +"Set this option to disable this client-specific override without removing it " +"from the list" +msgstr "リストã‹ã‚‰ã€Œå‰Šé™¤ã›ãšã«ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå›ºæœ‰ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã€" + +#: usr/local/www/vpn_openvpn_csc.php:334 usr/local/www/vpn_openvpn_csc.php:333 +#: usr/local/www/vpn_openvpn_csc.php:333 +msgid "Common name" +msgstr "共通å" + +#: usr/local/www/vpn_openvpn_csc.php:338 usr/local/www/vpn_openvpn_csc.php:337 +#: usr/local/www/vpn_openvpn_csc.php:337 +msgid "Enter the client's X.509 common name here" +msgstr "ã“ã“ã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®X.509共通åを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/vpn_openvpn_csc.php:350 usr/local/www/vpn_openvpn_csc.php:349 +#: usr/local/www/vpn_openvpn_csc.php:349 +msgid "Connection blocking" +msgstr "接続ブロック" + +#: usr/local/www/vpn_openvpn_csc.php:360 usr/local/www/vpn_openvpn_csc.php:359 +#: usr/local/www/vpn_openvpn_csc.php:359 +msgid "Block this client connection based on its common name" +msgstr "ãã®å…±é€šã®åå‰ã«åŸºã¥ã„ã¦ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆæŽ¥ç¶šã‚’ブロックã™ã‚‹" + +#: usr/local/www/vpn_openvpn_csc.php:365 usr/local/www/vpn_openvpn_csc.php:364 +#: usr/local/www/vpn_openvpn_csc.php:364 +msgid "" +"Don't use this option to permanently disable a client due to a compromised " +"key or password. Use a CRL (certificate revocation list) instead" +msgstr "キーã¾ãŸã¯ãƒ‘スワード「永久ã«èµ·å› ã™ã‚‹ä¾µå®³ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを使用ã—ãªã„ã§ãã ã•ã„〠。代ã‚りã«ã€CRL (証明書失効リスト)を使用" + +#: usr/local/www/vpn_openvpn_csc.php:391 +#: usr/local/www/vpn_openvpn_server.php:1011 +#: usr/local/www/vpn_openvpn_server.php:1153 +#: usr/local/www/vpn_openvpn_csc.php:390 +#: usr/local/www/vpn_openvpn_server.php:1181 +#: usr/local/www/vpn_openvpn_server.php:1208 +#: usr/local/www/vpn_openvpn_csc.php:390 +#: usr/local/www/vpn_openvpn_server.php:1208 +msgid "Redirect Gateway" +msgstr "ゲートウェイã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ" + +#: usr/local/www/vpn_openvpn_csc.php:401 +#: usr/local/www/vpn_openvpn_server.php:1021 +#: usr/local/www/vpn_openvpn_server.php:1163 +#: usr/local/www/vpn_openvpn_csc.php:400 +#: usr/local/www/vpn_openvpn_server.php:1191 +#: usr/local/www/vpn_openvpn_server.php:1218 +#: usr/local/www/vpn_openvpn_csc.php:400 +#: usr/local/www/vpn_openvpn_server.php:1218 +msgid "Force all client generated traffic through the tunnel" +msgstr "トンãƒãƒ«ã‚’介ã—ã¦ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç”Ÿæˆã•れãŸãƒˆãƒ©ãƒ•ィックを強制的ã«" + +#: usr/local/www/vpn_openvpn_csc.php:412 +#: usr/local/www/vpn_openvpn_server.php:1155 +#: usr/local/www/vpn_openvpn_server.php:1297 +#: usr/local/www/vpn_openvpn_csc.php:411 +#: usr/local/www/vpn_openvpn_server.php:1339 +#: usr/local/www/vpn_openvpn_server.php:1366 +#: usr/local/www/vpn_openvpn_csc.php:411 +#: usr/local/www/vpn_openvpn_server.php:1366 +msgid "Client Settings" +msgstr "クライアント設定" + +#: usr/local/www/vpn_openvpn_csc.php:415 usr/local/www/vpn_openvpn_csc.php:414 +#: usr/local/www/vpn_openvpn_csc.php:414 +msgid "Server Definitions" +msgstr "サーãƒãƒ¼å®šç¾©" + +#: usr/local/www/vpn_openvpn_csc.php:425 usr/local/www/vpn_openvpn_csc.php:424 +#: usr/local/www/vpn_openvpn_csc.php:424 +msgid "Prevent this client from receiving any server-defined client settings" +msgstr "ä»»æ„ã®ã‚µãƒ¼ãƒãƒ¼ã«å®šç¾©ã•れãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®è¨­å®šã‚’å—ã‘ã¦ã‹ã‚‰ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’防ã" + +#: usr/local/www/vpn_openvpn_csc.php:510 +#: usr/local/www/vpn_openvpn_server.php:1271 +#: usr/local/www/vpn_openvpn_server.php:1413 +#: usr/local/www/vpn_openvpn_csc.php:509 +#: usr/local/www/vpn_openvpn_server.php:1455 +#: usr/local/www/vpn_openvpn_server.php:1507 +#: usr/local/www/vpn_openvpn_csc.php:509 +#: usr/local/www/vpn_openvpn_server.php:1507 +msgid "NTP Servers" +msgstr "NTPサーãƒãƒ¼" + +#: usr/local/www/vpn_openvpn_csc.php:520 +#: usr/local/www/vpn_openvpn_server.php:1281 +#: usr/local/www/vpn_openvpn_server.php:1423 +#: usr/local/www/vpn_openvpn_csc.php:519 +#: usr/local/www/vpn_openvpn_server.php:1465 +#: usr/local/www/vpn_openvpn_server.php:1517 +#: usr/local/www/vpn_openvpn_csc.php:519 +#: usr/local/www/vpn_openvpn_server.php:1517 +msgid "Provide a NTP server list to clients" +msgstr "クライアントã«NTPサーãƒãƒ¼ã®ãƒªã‚¹ãƒˆã‚’æä¾›" + +#: usr/local/www/vpn_openvpn_csc.php:546 +#: usr/local/www/vpn_openvpn_server.php:1307 +#: usr/local/www/vpn_openvpn_server.php:1449 +#: usr/local/www/vpn_openvpn_csc.php:545 +#: usr/local/www/vpn_openvpn_server.php:1491 +#: usr/local/www/vpn_openvpn_server.php:1543 +#: usr/local/www/vpn_openvpn_csc.php:545 +#: usr/local/www/vpn_openvpn_server.php:1543 +msgid "NetBIOS Options" +msgstr "NetBIOSã®ã‚ªãƒ—ション" + +#: usr/local/www/vpn_openvpn_csc.php:556 +#: usr/local/www/vpn_openvpn_server.php:1317 +#: usr/local/www/vpn_openvpn_server.php:1459 +#: usr/local/www/vpn_openvpn_csc.php:555 +#: usr/local/www/vpn_openvpn_server.php:1501 +#: usr/local/www/vpn_openvpn_server.php:1553 +#: usr/local/www/vpn_openvpn_csc.php:555 +#: usr/local/www/vpn_openvpn_server.php:1553 +msgid "Enable NetBIOS over TCP/IP" +msgstr "NetBIOS over TCP / IPを有効ã«ã™ã‚‹" + +#: usr/local/www/vpn_openvpn_csc.php:561 +msgid "" +"If this option is not set, all NetBIOS-over-TCP/IP options (includeing WINS) " +"will be disabled" +msgstr ""ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã€ã™ã¹ã¦ã®NetBIOS-over-TCP/IPオプション( WINSを内蔵ã—ã¦ã„) ã€ã¯ç„¡åйã«ãªã‚Šã¾ã™" + +#: usr/local/www/vpn_openvpn_csc.php:568 +#: usr/local/www/vpn_openvpn_server.php:1329 +#: usr/local/www/vpn_openvpn_server.php:1471 +#: usr/local/www/vpn_openvpn_csc.php:567 +#: usr/local/www/vpn_openvpn_server.php:1513 +#: usr/local/www/vpn_openvpn_server.php:1565 +#: usr/local/www/vpn_openvpn_csc.php:567 +#: usr/local/www/vpn_openvpn_server.php:1565 +msgid "Node Type" +msgstr "ノード種別" + +#: usr/local/www/vpn_openvpn_csc.php:581 +#: usr/local/www/vpn_openvpn_server.php:1342 +#: usr/local/www/vpn_openvpn_server.php:1484 +#: usr/local/www/vpn_openvpn_csc.php:580 +#: usr/local/www/vpn_openvpn_server.php:1526 +#: usr/local/www/vpn_openvpn_server.php:1578 +#: usr/local/www/vpn_openvpn_csc.php:580 +#: usr/local/www/vpn_openvpn_server.php:1578 +msgid "" +"Possible options: b-node (broadcasts), p-node (point-to-point name queries " +"to a WINS server), m-node (broadcast then query name server), and h-node " +"(query name server, then broadcast)" +msgstr "「å¯èƒ½ãªã‚ªãƒ—ション:B-ノード(ブロードキャスト) 〠Pノード(ãƒã‚¤ãƒ³ãƒˆÂ·ãƒ„ー·ãƒã‚¤ãƒ³ãƒˆã®åå‰ç…§ä¼šã€ 〠WINSサーãƒãƒ¼ã«ï¼‰ 〠Mノード(ãƒãƒ¼ãƒ ã‚µãƒ¼ãƒã«ç…§ä¼šã—ã€ãƒ–ロードキャスト) ã€ãŠã‚ˆã³hノード〠(クエリーãƒãƒ¼ãƒ ã‚µãƒ¼ãƒãã®å¾Œãƒ–ロードキャスト)" + +#: usr/local/www/vpn_openvpn_csc.php:595 +#: usr/local/www/vpn_openvpn_server.php:1356 +#: usr/local/www/vpn_openvpn_server.php:1498 +#: usr/local/www/vpn_openvpn_csc.php:594 +#: usr/local/www/vpn_openvpn_server.php:1540 +#: usr/local/www/vpn_openvpn_server.php:1592 +#: usr/local/www/vpn_openvpn_csc.php:594 +#: usr/local/www/vpn_openvpn_server.php:1592 +msgid "" +"A NetBIOS ScopetID provides an extended naming service fortNetBIOS over " +"TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to " +"only those nodes with the same NetBIOS scope ID" +msgstr "TCP / IPã€ã®NetBIOS ScopetIDéŽå‰°æ‹¡å¼µãƒãƒ¼ãƒŸãƒ³ã‚°ã‚µãƒ¼ãƒ“スfortNetBIOSã‚’æä¾›ã—ã¦ã„ã¾ã™ã€ 。 NetBIOSスコープIDã¯ã€å˜ä¸€ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§NetBIOSトラフィックを分離ã™ã‚‹ã€ã¨ã¯ã€åŒã˜NetBIOSスコープIDã‚’æŒã¤ãƒŽãƒ¼ãƒ‰ã®ã¿" + +#: usr/local/www/vpn_openvpn_csc.php:648 usr/local/www/vpn_openvpn_csc.php:647 +#: usr/local/www/vpn_openvpn_csc.php:647 +msgid "" +"Enter any additional options you would like to add for this client specific " +"override, separated by a semicolon" +msgstr "オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã€ã‚»ãƒŸã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã‚‰ã‚ŒãŸã€Œã‚ãªãŸã¯ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ç‰¹å®šã®ãŸã‚ã«è¿½åŠ ã—ãŸã„ä»»æ„ã®è¿½åŠ ã®ã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„ "" + +#: usr/local/www/vpn_openvpn_csc.php:649 +#: usr/local/www/vpn_openvpn_server.php:1419 +#: usr/local/www/vpn_openvpn_server.php:1561 +#: usr/local/www/vpn_openvpn_csc.php:648 +#: usr/local/www/vpn_openvpn_server.php:1603 +#: usr/local/www/vpn_openvpn_server.php:1655 +#: usr/local/www/vpn_openvpn_csc.php:648 +#: usr/local/www/vpn_openvpn_server.php:1655 +msgid "EXAMPLE: push "route 10.0.0.0 255.255.255.0"" +msgstr "例:プッシュã€ãƒ«ãƒ¼ãƒˆ10.0.0.0 255.255.255.0 "" + +#: usr/local/www/vpn_openvpn_csc.php:696 usr/local/www/vpn_openvpn_csc.php:695 +#: usr/local/www/vpn_openvpn_csc.php:695 +msgid "edit csc" +msgstr "編集CSC" + +#: usr/local/www/vpn_openvpn_csc.php:699 usr/local/www/vpn_openvpn_csc.php:698 +#: usr/local/www/vpn_openvpn_csc.php:698 +msgid "Do you really want to delete this csc?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®CSCを削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/vpn_openvpn_csc.php:700 usr/local/www/vpn_openvpn_csc.php:699 +#: usr/local/www/vpn_openvpn_csc.php:699 +msgid "delete csc" +msgstr "CSCを削除" + +#: usr/local/www/vpn_openvpn_csc.php:711 usr/local/www/vpn_openvpn_csc.php:710 +#: usr/local/www/vpn_openvpn_csc.php:710 +msgid "add csc" +msgstr "CSCを追加" + +#: usr/local/www/vpn_openvpn_csc.php:718 usr/local/www/vpn_openvpn_csc.php:717 +#: usr/local/www/vpn_openvpn_csc.php:717 +msgid "Additional OpenVPN client specific overrides can be added here." +msgstr "追加ã®OpenVPNクライアント固有ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’ã“ã“ã«è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:86 +#: usr/local/www/vpn_openvpn_server.php:87 +#: usr/local/www/vpn_openvpn_server.php:87 +msgid "Server successfully deleted" +msgstr "サーãƒãƒ¼ã‚’正常ã«å‰Šé™¤" + +#: usr/local/www/vpn_openvpn_server.php:210 +#: usr/local/www/vpn_openvpn_server.php:215 +#: usr/local/www/vpn_openvpn_server.php:216 +#: usr/local/www/vpn_openvpn_server.php:228 +#: usr/local/www/vpn_openvpn_server.php:228 +msgid "" +"You must select a Backend for Authentication if the server mode requires " +"User Auth." +msgstr "ユーザーèªè¨¼ã‚’「サーãƒãƒ¼Â·ãƒ¢ãƒ¼ãƒ‰ãŒå¿…è¦ãªå ´åˆã¯ã€èªè¨¼ã®ãŸã‚ã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/vpn_openvpn_server.php:277 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/vpn_openvpn_server.php:283 +#: usr/local/www/vpn_openvpn_server.php:304 +#: usr/local/www/vpn_openvpn_server.php:304 +msgid "The field 'Concurrent connections' must be numeric." +msgstr "ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã€ŒåŒæ™‚接続ã€ã¯æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/vpn_openvpn_server.php:290 +#: usr/local/www/vpn_openvpn_server.php:296 +#: usr/local/www/vpn_openvpn_server.php:297 +#: usr/local/www/vpn_openvpn_server.php:318 +#: usr/local/www/vpn_openvpn_server.php:318 +msgid "Tunnel network" +msgstr "トンãƒãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/vpn_openvpn_server.php:615 +#: usr/local/www/vpn_openvpn_server.php:688 +#: usr/local/www/vpn_openvpn_server.php:706 +#: usr/local/www/vpn_openvpn_server.php:732 +#: usr/local/www/vpn_openvpn_server.php:732 +msgid "Disable this server" +msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã‚’使用ä¸å¯ã«" + +#: usr/local/www/vpn_openvpn_server.php:620 +#: usr/local/www/vpn_openvpn_server.php:693 +#: usr/local/www/vpn_openvpn_server.php:711 +#: usr/local/www/vpn_openvpn_server.php:737 +#: usr/local/www/vpn_openvpn_server.php:737 +msgid "" +"Set this option to disable this server without removing it from the list" +msgstr "「リストã‹ã‚‰å‰Šé™¤ã›ãšã«ã€ã“ã®ã‚µãƒ¼ãƒãƒ¼ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定" + +#: usr/local/www/vpn_openvpn_server.php:639 +#: usr/local/www/vpn_openvpn_server.php:712 +#: usr/local/www/vpn_openvpn_server.php:730 +#: usr/local/www/vpn_openvpn_server.php:756 +#: usr/local/www/vpn_openvpn_server.php:756 +msgid "Backend for authentication" +msgstr "èªè¨¼ã®ãŸã‚ã«ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰" + +#: usr/local/www/vpn_openvpn_server.php:671 +#: usr/local/www/vpn_openvpn_server.php:744 +#: usr/local/www/vpn_openvpn_server.php:762 +#: usr/local/www/vpn_openvpn_server.php:788 +#: usr/local/www/vpn_openvpn_server.php:788 +msgid "Device Mode" +msgstr "デãƒã‚¤ã‚¹ãƒ¢ãƒ¼ãƒ‰" + +#: usr/local/www/vpn_openvpn_server.php:797 +#: usr/local/www/vpn_openvpn_server.php:870 +#: usr/local/www/vpn_openvpn_server.php:898 +#: usr/local/www/vpn_openvpn_server.php:925 +#: usr/local/www/vpn_openvpn_server.php:925 +msgid "Peer Certificate Revocation List" +msgstr "証明書失効リストピア" + +#: usr/local/www/vpn_openvpn_server.php:822 +#: usr/local/www/vpn_openvpn_server.php:895 +#: usr/local/www/vpn_openvpn_server.php:923 +#: usr/local/www/vpn_openvpn_server.php:950 +#: usr/local/www/vpn_openvpn_server.php:950 +msgid "Server Certificate" +msgstr "サーãƒãƒ¼è¨¼æ˜Žæ›¸" + +#: usr/local/www/vpn_openvpn_server.php:851 +#: usr/local/www/vpn_openvpn_server.php:924 +#: usr/local/www/vpn_openvpn_server.php:952 +#: usr/local/www/vpn_openvpn_server.php:979 +#: usr/local/www/vpn_openvpn_server.php:979 +msgid "DH Parameters Length" +msgstr "DHパラメータ長" + +#: usr/local/www/vpn_openvpn_server.php:934 +#: usr/local/www/vpn_openvpn_server.php:1007 +#: usr/local/www/vpn_openvpn_server.php:1035 +#: usr/local/www/vpn_openvpn_server.php:1062 +#: usr/local/www/vpn_openvpn_server.php:1062 +msgid "Certificate Depth" +msgstr "è¨¼æ˜Žæ›¸ã®æ·±ã•" + +#: usr/local/www/vpn_openvpn_server.php:952 +#: usr/local/www/vpn_openvpn_server.php:1025 +#: usr/local/www/vpn_openvpn_server.php:1053 +#: usr/local/www/vpn_openvpn_server.php:1080 +#: usr/local/www/vpn_openvpn_server.php:1080 +msgid "" +"When a certificate-based client logs in, do not accept certificates below " +"this depth. Useful for denying certificates made with intermediate CAs " +"generated from the same CA as the server." +msgstr "ã“ã®æ·±ã•ã€ã®è¨¼æ˜Žæ›¸ãƒ™ãƒ¼ã‚¹ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®è¨¼æ˜Žæ›¸ã‚’å—ã‘入れãªã„〠。サーãƒã¨åŒã˜CAã‹ã‚‰ç”Ÿæˆã•れãŸä¸­é–“CA ã€ã§ä½œã‚‰ã‚ŒãŸè¨¼æ˜Žæ›¸ã‚’å¦å®šã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:959 +#: usr/local/www/vpn_openvpn_server.php:1032 +#: usr/local/www/vpn_openvpn_server.php:1060 +#: usr/local/www/vpn_openvpn_server.php:1087 +#: usr/local/www/vpn_openvpn_server.php:1087 +msgid "Strict User/CN Matching" +msgstr "厳格ãªãƒ¦ãƒ¼ã‚¶ãƒ¼/ CNマッãƒãƒ³ã‚°" + +#: usr/local/www/vpn_openvpn_server.php:969 +#: usr/local/www/vpn_openvpn_server.php:1042 +#: usr/local/www/vpn_openvpn_server.php:1070 +#: usr/local/www/vpn_openvpn_server.php:1097 +#: usr/local/www/vpn_openvpn_server.php:1097 +msgid "" +"When authenticating users, enforce a match between the common name of the " +"client certificate and the username given at login." +msgstr "クライアント証明書ã¨ã€ãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«æŒ‡å®šã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼åã€ãƒ¦ãƒ¼ã‚¶ã‚’èªè¨¼ã™ã‚‹ã¨ãã®ä¸€èˆ¬çš„ãªåå‰ã¨ã®é–“ã®ä¸€è‡´ã‚’強制ã™ã‚‹ã€ 。" + +#: usr/local/www/vpn_openvpn_server.php:983 +#: usr/local/www/vpn_openvpn_server.php:1056 +#: usr/local/www/vpn_openvpn_server.php:1084 +#: usr/local/www/vpn_openvpn_client.php:771 +#: usr/local/www/vpn_openvpn_client.php:790 +#: usr/local/www/vpn_openvpn_server.php:1111 +#: usr/local/www/vpn_openvpn_client.php:790 +#: usr/local/www/vpn_openvpn_server.php:1111 +msgid "IPv4 Tunnel Network" +msgstr "IPv4ã®ãƒˆãƒ³ãƒãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/vpn_openvpn_server.php:987 +#: usr/local/www/vpn_openvpn_server.php:1060 +#: usr/local/www/vpn_openvpn_server.php:1088 +#: usr/local/www/vpn_openvpn_server.php:1115 +#: usr/local/www/vpn_openvpn_server.php:1115 +msgid "" +"This is the IPv4 virtual network used for private communications between " +"this server and client hosts expressed using CIDR (eg. 10.0.8.0/24). The " +"first network address will be assigned to thetserver virtual interface. The " +"remaining network addresses can optionally be assigned to connecting " +"clients. (see Address Pool)" +msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ›ã‚¹ãƒˆã€Œã“れã¯é–“ã®ãƒ—ライベート通信ã«ä½¿ç”¨ã•れるIPv4ã®ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る「 CIDR (例: 10.0.8.0/24 )を使用ã—ã¦è¡¨ç¾ã€‚ 「最åˆã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒthetserver仮想インターフェイスã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚ 「残りã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€å¿…è¦ã«å¿œã˜ã¦ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æŽ¥ç¶šã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ (アドレスプールをå‚ç…§ã—ã¦ãã ã•ã„)" + +#: usr/local/www/vpn_openvpn_server.php:997 +#: usr/local/www/vpn_openvpn_server.php:1070 +#: usr/local/www/vpn_openvpn_server.php:1098 +#: usr/local/www/vpn_openvpn_client.php:785 +#: usr/local/www/vpn_openvpn_client.php:804 +#: usr/local/www/vpn_openvpn_server.php:1125 +#: usr/local/www/vpn_openvpn_client.php:804 +#: usr/local/www/vpn_openvpn_server.php:1125 +msgid "IPv6 Tunnel Network" +msgstr "IPv6トンãƒãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/vpn_openvpn_server.php:1001 +#: usr/local/www/vpn_openvpn_server.php:1074 +msgid "" +"This is the IPv6 virtual network used for private communications between " +"this server and client hosts expressed using CIDR (eg. fe80::/64). The first " +"network address will be assigned to thetserver virtual interface. The " +"remaining network addresses can optionally be assigned to connecting " +"clients. (see Address Pool)" +msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ›ã‚¹ãƒˆã€Œã“れã¯é–“ã®ãƒ—ライベート通信ã«ä½¿ç”¨ã•れるIPv6ã®ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹"(例: FE80:: / 64 ) ã€CIDRを使用ã—ã¦è¡¨ç¾ã€‚最åˆã®ã€Œãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯thetserver仮想インターフェイスã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚ 「残りã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€å¿…è¦ã«å¿œã˜ã¦ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æŽ¥ç¶šã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ (アドレスプールをå‚ç…§ã—ã¦ãã ã•ã„)" + +#: usr/local/www/vpn_openvpn_server.php:1029 +#: usr/local/www/vpn_openvpn_server.php:1171 +#: usr/local/www/vpn_openvpn_server.php:1199 +msgid "IPv4 Local Network" +msgstr "IPv4ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/vpn_openvpn_server.php:1033 +#: usr/local/www/vpn_openvpn_server.php:1175 +#: usr/local/www/vpn_openvpn_server.php:1203 +msgid "" +"This is the network that will be accessible from the remote endpoint. " +"Expressed as a CIDR range. You may leave this blank if you don't want to add " +"a route to the local network through this tunnel on the remote machine. This " +"is generally set to your LAN network" +msgstr ""ã“れã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã•れるãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る。 ã€ã®CIDR範囲ã¨ã—ã¦è¡¨ã•。ã‚ãªãŸãŒè¿½åŠ ã—ãŸããªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã‚‚"リモートマシン上ã§ã“ã®ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒ«ãƒ¼ãƒˆã‚’。ã“れã¯ã€ 「一般的ã«ã€ã‚ãªãŸã®LANãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«è¨­å®šã•れã¦ã„ã‚‹" + +#: usr/local/www/vpn_openvpn_server.php:1042 +#: usr/local/www/vpn_openvpn_server.php:1184 +#: usr/local/www/vpn_openvpn_server.php:1212 +msgid "IPv6 Local Network" +msgstr "IPv6ローカルãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/vpn_openvpn_server.php:1046 +#: usr/local/www/vpn_openvpn_server.php:1188 +#: usr/local/www/vpn_openvpn_server.php:1216 +msgid "" +"This is the IPv6 network that will be accessible from the remote endpoint. " +"Expressed as a CIDR range. You may leave this blank if you don't want to add " +"a route to the local network through this tunnel on the remote machine. This " +"is generally set to your LAN network" +msgstr "「ã“れã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã€IPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る。 ã€ã®CIDR範囲ã¨ã—ã¦è¡¨ã•。ã‚ãªãŸãŒè¿½åŠ ã—ãŸããªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã‚‚"リモートマシン上ã§ã“ã®ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒ«ãƒ¼ãƒˆã‚’。ã“れã¯ã€ 「一般的ã«ã€ã‚ãªãŸã®LANãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«è¨­å®šã•れã¦ã„ã‚‹" + +#: usr/local/www/vpn_openvpn_server.php:1059 +#: usr/local/www/vpn_openvpn_server.php:1201 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter here the " +"remote LAN here. You may leave this blank if you don't want a site-to-site " +"VPN" +msgstr "「ã“れã¯ãƒˆãƒ³ãƒãƒ«ã‚’経由ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•れるãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹ã€ãã®çµæžœã€ã‚µã‚¤ãƒˆãƒ„ーã€ã‚µã‚¤ãƒˆVPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 「 CIDRã®ç¯„囲ã¨ã—ã¦è¡¨ã•。ã“れã¯ã€ã‚µã‚¤ãƒˆé–“VPNã®å ´åˆã¯ã€ã“ã“ã§å…¥åŠ›ã—ãŸã€Œã“ã“ã«ãƒªãƒ¢ãƒ¼ãƒˆLAN 。サイトツーサイト「VPNを使用ã—ãªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ" + +#: usr/local/www/vpn_openvpn_server.php:1069 +#: usr/local/www/vpn_openvpn_server.php:1211 +#: usr/local/www/vpn_openvpn_server.php:1253 +#: usr/local/www/vpn_openvpn_server.php:1280 +#: usr/local/www/vpn_openvpn_server.php:1280 +msgid "Concurrent connections" +msgstr "åŒæ™‚接続" + +#: usr/local/www/vpn_openvpn_server.php:1073 +#: usr/local/www/vpn_openvpn_server.php:1215 +#: usr/local/www/vpn_openvpn_server.php:1257 +#: usr/local/www/vpn_openvpn_server.php:1284 +#: usr/local/www/vpn_openvpn_server.php:1284 +msgid "" +"Specify the maximum number of clients allowed to concurrently connect to " +"this server" +msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã€ŒåŒæ™‚ã«ã¸ã®æŽ¥ç¶šã‚’許å¯ã™ã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æœ€å¤§æ•°ã‚’指定ã™ã‚‹ã€" + +#: usr/local/www/vpn_openvpn_server.php:1113 +#: usr/local/www/vpn_openvpn_server.php:1255 +#: usr/local/www/vpn_openvpn_server.php:1297 +#: usr/local/www/vpn_openvpn_server.php:1324 +#: usr/local/www/vpn_openvpn_server.php:1324 +msgid "Inter-client communication" +msgstr "クライアント間通信" + +#: usr/local/www/vpn_openvpn_server.php:1123 +#: usr/local/www/vpn_openvpn_server.php:1265 +#: usr/local/www/vpn_openvpn_server.php:1307 +#: usr/local/www/vpn_openvpn_server.php:1334 +#: usr/local/www/vpn_openvpn_server.php:1334 +msgid "Allow communication between clients connected to this server" +msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã«æŽ¥ç¶šã—ã¦ã„るクライアント間ã®é€šä¿¡ã‚’å¯èƒ½ã«" + +#: usr/local/www/vpn_openvpn_server.php:1131 +#: usr/local/www/vpn_openvpn_server.php:1273 +#: usr/local/www/vpn_openvpn_server.php:1315 +#: usr/local/www/vpn_openvpn_server.php:1342 +#: usr/local/www/vpn_openvpn_server.php:1342 +msgid "Duplicate Connections" +msgstr "接続を復元" + +#: usr/local/www/vpn_openvpn_server.php:1141 +#: usr/local/www/vpn_openvpn_server.php:1283 +#: usr/local/www/vpn_openvpn_server.php:1325 +#: usr/local/www/vpn_openvpn_server.php:1352 +#: usr/local/www/vpn_openvpn_server.php:1352 +msgid "" +"Allow multiple concurrent connections from clients using the same Common " +"Name.
    NOTE: This is not generally recommended, but may be needed for " +"some scenarios." +msgstr "Name.
    NOTE 「åŒã˜å…±é€šä½¿ç”¨ã—ã¦ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰ã®è¤‡æ•°ã®åŒæ™‚接続を許å¯ã™ã‚‹ã€ :ã“れã¯ã€ä¸€èˆ¬çš„ã«ã¯ãŠå‹§ã‚ã—ã¾ã›ã‚“ãŒã€ã„ãã¤ã‹ã®ã‚·ãƒŠãƒªã‚ªã€ã®ãŸã‚ã«å¿…è¦ãªå ´åˆãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:1158 +#: usr/local/www/vpn_openvpn_server.php:1300 +#: usr/local/www/vpn_openvpn_server.php:1342 +#: usr/local/www/vpn_openvpn_server.php:1369 +#: usr/local/www/vpn_openvpn_server.php:1369 +msgid "Dynamic IP" +msgstr "å‹•çš„IP" + +#: usr/local/www/vpn_openvpn_server.php:1168 +#: usr/local/www/vpn_openvpn_server.php:1310 +#: usr/local/www/vpn_openvpn_server.php:1352 +#: usr/local/www/vpn_openvpn_server.php:1379 +#: usr/local/www/vpn_openvpn_server.php:1379 +msgid "" +"Allow connected clients to retain their connections if their IP address " +"changes" +msgstr "「接続ã•れãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæŽ¥ç¶šã‚’ç¶­æŒã§ãるよã†ã«ã—ã€ãã®IPアドレスãŒã‚れã°ã€Œå¤‰åŒ–" + +#: usr/local/www/vpn_openvpn_server.php:1176 +#: usr/local/www/vpn_openvpn_server.php:1318 +#: usr/local/www/vpn_openvpn_server.php:1360 +#: usr/local/www/vpn_openvpn_server.php:1387 +#: usr/local/www/vpn_openvpn_server.php:1387 +msgid "Address Pool" +msgstr "アドレスプール" + +#: usr/local/www/vpn_openvpn_server.php:1186 +#: usr/local/www/vpn_openvpn_server.php:1328 +#: usr/local/www/vpn_openvpn_server.php:1370 +#: usr/local/www/vpn_openvpn_server.php:1397 +#: usr/local/www/vpn_openvpn_server.php:1397 +msgid "Provide a virtual adapter IP address to clients (see Tunnel Network)" +msgstr "クライアントã«ä»®æƒ³ã‚¢ãƒ€ãƒ—ã‚¿ã®IPアドレスを指定ã—ã¾ã™ï¼ˆãƒˆãƒ³ãƒãƒ«Â·ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ï¼‰" + +#: usr/local/www/vpn_openvpn_server.php:1322 +#: usr/local/www/vpn_openvpn_server.php:1464 +#: usr/local/www/vpn_openvpn_csc.php:560 +#: usr/local/www/vpn_openvpn_server.php:1506 +#: usr/local/www/vpn_openvpn_server.php:1558 +#: usr/local/www/vpn_openvpn_csc.php:560 +#: usr/local/www/vpn_openvpn_server.php:1558 +msgid "" +"If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) " +"will be disabled" +msgstr ""ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã€ ( WINSã‚’å«ã‚€ï¼‰ã™ã¹ã¦ã®NetBIOS-over-TCP/IPオプションãŒã€Œç„¡åйã«ãªã‚Šã¾ã™" + +#: usr/local/www/vpn_openvpn_server.php:1352 +#: usr/local/www/vpn_openvpn_server.php:1494 +#: usr/local/www/vpn_openvpn_server.php:1536 +#: usr/local/www/vpn_openvpn_server.php:1588 +#: usr/local/www/vpn_openvpn_server.php:1588 +msgid "Scope ID" +msgstr "スコープID" + +#: usr/local/www/vpn_openvpn_server.php:1418 +#: usr/local/www/vpn_openvpn_server.php:1560 +#: usr/local/www/vpn_openvpn_server.php:1602 +#: usr/local/www/vpn_openvpn_server.php:1654 +#: usr/local/www/vpn_openvpn_server.php:1654 +msgid "" +"Enter any additional options you would like to add to the OpenVPN server " +"configuration here, separated by a semicolon" +msgstr "セミコロンã§åŒºåˆ‡ã‚‰ã‚Œã€ä»¥ä¸‹ã«è¨­å®šã€ã§ã¯ã€ OpenVPNã®ã‚µãƒ¼ãƒãƒ¼ã«è¿½åŠ ã™ã‚‹è¿½åŠ ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’å…¥åŠ›ã—ã¦ãã ã•ã„ "" + +#: usr/local/www/vpn_openvpn_server.php:1449 +#: usr/local/www/vpn_openvpn_server.php:1591 +#: usr/local/www/vpn_openvpn_server.php:1632 +#: usr/local/www/vpn_openvpn_server.php:1684 +#: usr/local/www/vpn_openvpn_server.php:1684 +msgid "Protocol / Port" +msgstr "プロトコル/ãƒãƒ¼ãƒˆ" + +#: usr/local/www/vpn_openvpn_server.php:1482 +#: usr/local/www/vpn_openvpn_server.php:1624 +#: usr/local/www/vpn_openvpn_server.php:1665 +#: usr/local/www/vpn_openvpn_server.php:1717 +#: usr/local/www/vpn_openvpn_server.php:1717 +msgid "Do you really want to delete this server?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚µãƒ¼ãƒãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/vpn_openvpn_server.php:1503 +#: usr/local/www/vpn_openvpn_server.php:1645 +#: usr/local/www/vpn_openvpn_server.php:1686 +#: usr/local/www/vpn_openvpn_server.php:1738 +#: usr/local/www/vpn_openvpn_server.php:1738 +msgid "Additional OpenVPN servers can be added here." +msgstr "追加ã®OpenVPNã®ã‚µãƒ¼ãƒãŒã“ã“ã«æ·»åŠ ã™ã‚‹ã“ã¨ãŒã§ãる。" + +#: usr/local/www/vpn_pppoe_edit.php:136 usr/local/www/vpn_pppoe_edit.php:136 +msgid "The specified server address is equal to an interface ip address." +msgstr "指定ã•れãŸã‚µãƒ¼ãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスIPアドレスã¨åŒã˜ã§ã‚る。" + +#: usr/local/www/vpn_pppoe_edit.php:141 usr/local/www/vpn_pppoe_edit.php:141 +#, php-format +msgid "No password specified for username %s" +msgstr "ユーザーå%sã«æŒ‡å®šã—ãŸãƒ‘スワードã¾ã›ã‚“" + +#: usr/local/www/vpn_pppoe_edit.php:143 usr/local/www/vpn_pppoe_edit.php:143 +#, php-format +msgid "Incorrect ip address specified for username %s" +msgstr "ユーザーå%sã«æŒ‡å®šã•れã€èª¤ã£ãŸIPアドレス" + +#: usr/local/www/vpn_pppoe_edit.php:355 usr/local/www/vpn_pppoe_edit.php:356 +#: usr/local/www/vpn_pppoe_edit.php:359 usr/local/www/vpn_pppoe_edit.php:359 +msgid "PPPoE server configuration" +msgstr "PPPoEサーãƒã®è¨­å®š" + +#: usr/local/www/vpn_pppoe_edit.php:368 usr/local/www/vpn_pppoe_edit.php:369 +#: usr/local/www/vpn_pppoe_edit.php:372 usr/local/www/vpn_pppoe_edit.php:372 +msgid "Enable PPPoE server" +msgstr "PPPoEサーãƒã‚’有効ã«ã—ã¾ã™" + +#: usr/local/www/vpn_pppoe_edit.php:403 usr/local/www/vpn_pppoe_edit.php:404 +#: usr/local/www/vpn_pppoe_edit.php:407 usr/local/www/vpn_pppoe_edit.php:407 +msgid "Hint" +msgstr "ヒント" + +#: usr/local/www/vpn_pppoe_edit.php:407 usr/local/www/vpn_pppoe_edit.php:408 +#: usr/local/www/vpn_pppoe_edit.php:411 usr/local/www/vpn_pppoe_edit.php:411 +msgid "No. PPPoE users" +msgstr "ã„ã„ãˆPPPoEã®ãƒ¦ãƒ¼ã‚¶ãƒ¼" + +#: usr/local/www/vpn_pppoe_edit.php:420 usr/local/www/vpn_pppoe_edit.php:421 +#: usr/local/www/vpn_pppoe_edit.php:424 usr/local/www/vpn_pppoe_edit.php:424 +msgid "Hint: 10 is ten PPPoE clients" +msgstr "ヒント:10 10 PPPoEクライアントã§ã™" + +#: usr/local/www/vpn_pppoe_edit.php:428 usr/local/www/vpn_pppoe_edit.php:429 +#: usr/local/www/vpn_pppoe_edit.php:432 usr/local/www/vpn_pppoe_edit.php:432 +msgid "" +"Enter the IP address the PPPoE server should give to clients for use as " +"their "gateway"" +msgstr "彼らã®ã€Œã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã€ 「 IPアドレスを入力ã—ã¦PPPoEサーãƒã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ä¸Žãˆã‚‹å¿…è¦ãŒã‚りã¾ã™ã€" + +#: usr/local/www/vpn_pppoe_edit.php:440 usr/local/www/vpn_pppoe_edit.php:441 +#: usr/local/www/vpn_pppoe_edit.php:444 usr/local/www/vpn_pppoe_edit.php:444 +msgid "Specify the starting address for the client IP address subnet" +msgstr "クライアントã®IPアドレスã€ã‚µãƒ–ãƒãƒƒãƒˆã®é–‹å§‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定" + +#: usr/local/www/vpn_pppoe_edit.php:457 usr/local/www/vpn_pppoe_edit.php:458 +#: usr/local/www/vpn_pppoe_edit.php:461 usr/local/www/vpn_pppoe_edit.php:461 +msgid "" +"If entered they will be given to all PPPoE clients, else LAN DNS and one WAN " +"DNS will go to all clients" +msgstr "「入力ã—ãŸå ´åˆã€ãれらã¯ã™ã¹ã¦ã®PPPoEクライアントã«ä¸Žãˆã‚‰ã‚Œã¾ã™ã€ä»–ã®LAN DNSã¨1 WAN〠DNSã¯ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«è¡Œã" + +#: usr/local/www/vpn_pppoe_edit.php:474 usr/local/www/vpn_pppoe_edit.php:475 +#: usr/local/www/vpn_pppoe_edit.php:478 usr/local/www/vpn_pppoe_edit.php:478 +msgid "Use Backup RADIUS Server" +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—RADIUSサーãƒã‚’使用" + +#: usr/local/www/vpn_pppoe_edit.php:475 usr/local/www/vpn_pppoe_edit.php:476 +#: usr/local/www/vpn_pppoe_edit.php:479 usr/local/www/vpn_pppoe_edit.php:479 +msgid "" +"When set, if primary server fails all requests will be sent via backup server" +msgstr "ã€ã«è¨­å®šã™ã‚‹ã¨ã€ãƒ—ライマリサーãƒãŒã™ã¹ã¦ã®è¦æ±‚を失敗ã—ãŸå ´åˆã«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—サーãƒã‚’経由ã—ã¦é€ä¿¡ã•れã¾ã™" + +#: usr/local/www/vpn_pppoe_edit.php:478 usr/local/www/vpn_pppoe_edit.php:479 +#: usr/local/www/vpn_pppoe_edit.php:482 usr/local/www/vpn_pppoe_edit.php:482 +msgid "NAS IP Address" +msgstr "NASã®IPアドレス" + +#: usr/local/www/vpn_pppoe_edit.php:481 usr/local/www/vpn_pppoe_edit.php:482 +#: usr/local/www/vpn_pppoe_edit.php:485 usr/local/www/vpn_pppoe_edit.php:485 +msgid "RADIUS server NAS IP Address" +msgstr "RADIUSサーãƒã®NASã®IPアドレス" + +#: usr/local/www/vpn_pppoe_edit.php:488 usr/local/www/vpn_pppoe_edit.php:489 +#: usr/local/www/vpn_pppoe_edit.php:492 usr/local/www/vpn_pppoe_edit.php:492 +msgid "RADIUS accounting update period in seconds" +msgstr "ç§’å˜ä½ã®RADIUSアカウンティング更新期間" + +#: usr/local/www/vpn_pppoe_edit.php:495 usr/local/www/vpn_pppoe_edit.php:496 +#: usr/local/www/vpn_pppoe_edit.php:499 usr/local/www/vpn_pppoe_edit.php:499 +msgid "Issue IP Addresses via RADIUS server" +msgstr "RADIUSサーãƒãƒ¼ã‚’経由ã—ã¦ç™ºè¡Œã™ã‚‹IPアドレス" + +#: usr/local/www/vpn_pppoe_edit.php:498 usr/local/www/vpn_pppoe_edit.php:499 +#: usr/local/www/vpn_pppoe_edit.php:502 usr/local/www/vpn_pppoe_edit.php:502 +msgid "RADIUS server Primary" +msgstr "RADIUSサーãƒã®ãƒ—ライマリ" + +#: usr/local/www/vpn_pppoe_edit.php:503 usr/local/www/vpn_pppoe_edit.php:504 +#: usr/local/www/vpn_pppoe_edit.php:507 usr/local/www/vpn_pppoe_edit.php:507 +msgid "" +"Enter the IP address, authentication port and accounting port (optional) of " +"the RADIUS server." +msgstr "RADIUSサーãƒã€ã®IPアドレスã€èªè¨¼ãƒãƒ¼ãƒˆã¨ã‚¢ã‚«ã‚¦ãƒ³ãƒ†ã‚£ãƒ³ã‚°ãƒãƒ¼ãƒˆã‚’入力ã—ã¾ã™ï¼ˆã‚ªãƒ—ション) 〠。" + +#: usr/local/www/vpn_pppoe_edit.php:504 usr/local/www/vpn_pppoe_edit.php:520 +#: usr/local/www/vpn_pppoe_edit.php:505 usr/local/www/vpn_pppoe_edit.php:521 +#: usr/local/www/vpn_pppoe_edit.php:508 usr/local/www/vpn_pppoe_edit.php:524 +#: usr/local/www/vpn_pppoe_edit.php:508 usr/local/www/vpn_pppoe_edit.php:524 +msgid "standard port 1812 and 1813 accounting" +msgstr "標準ã®ãƒãƒ¼ãƒˆ1812ãŠã‚ˆã³1813会計" + +#: usr/local/www/vpn_pppoe_edit.php:507 usr/local/www/vpn_pppoe_edit.php:508 +#: usr/local/www/vpn_pppoe_edit.php:511 usr/local/www/vpn_pppoe_edit.php:511 +msgid "RADIUS primary shared secret" +msgstr "RADIUSプライマリ共有シークレット" + +#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:515 +#: usr/local/www/vpn_pppoe_edit.php:518 usr/local/www/vpn_pppoe_edit.php:518 +msgid "RADIUS server Secondary" +msgstr "RADIUSサーãƒã®ã‚»ã‚«ãƒ³ãƒ€ãƒª" + +#: usr/local/www/vpn_pppoe_edit.php:519 usr/local/www/vpn_pppoe_edit.php:520 +#: usr/local/www/vpn_pppoe_edit.php:523 usr/local/www/vpn_pppoe_edit.php:523 +msgid "" +"Enter the IP address, authentication port and accounting port (optional) of " +"the backup RADIUS server." +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—RADIUSサーãƒã€ã®IPアドレスã€èªè¨¼ãƒãƒ¼ãƒˆã¨ã‚¢ã‚«ã‚¦ãƒ³ãƒ†ã‚£ãƒ³ã‚°ãƒãƒ¼ãƒˆã‚’入力ã—ã¾ã™ï¼ˆã‚ªãƒ—ション) 〠。" + +#: usr/local/www/vpn_pppoe_edit.php:523 usr/local/www/vpn_pppoe_edit.php:524 +#: usr/local/www/vpn_pppoe_edit.php:527 usr/local/www/vpn_pppoe_edit.php:527 +msgid "RADIUS secondary shared secret" +msgstr "RADIUSセカンダリ共有秘密" + +#: usr/local/www/vpn_pppoe_edit.php:531 usr/local/www/vpn_pppoe_edit.php:532 +#: usr/local/www/vpn_pppoe_edit.php:535 usr/local/www/vpn_pppoe_edit.php:535 +msgid "User (s)" +msgstr "ユーザ(複数å¯ï¼‰" + +#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/vpn_pppoe_edit.php:597 +#: usr/local/www/vpn_pppoe_edit.php:600 usr/local/www/vpn_pppoe_edit.php:600 +msgid "" +"don't forget to add a firewall rule to permit traffic from PPPoE clients" +msgstr "「 PPPoEクライアントã‹ã‚‰ã®ãƒˆãƒ©ãƒ•ィックを許å¯ã™ã‚‹ãƒ•ァイアウォールルールを追加ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:37 +msgid "You need to specify the number of connections." +msgstr "ã‚ãªãŸã¯ã€æŽ¥ç¶šã®æ•°ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:42 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:42 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:43 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:43 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:42 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:42 +msgid "The number of connections should be greater than 1." +msgstr "接続数ã¯1より大ãããªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:65 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:63 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:64 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:71 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:63 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:64 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:71 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:63 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:63 +msgid "You have less interfaces than number of connections!" +msgstr "ã‚ãªãŸã¯ã€æŽ¥ç¶šã®æ•°ã‚ˆã‚Šã‚‚å°‘ãªã„インタフェースをæŒã£ã¦ã„ã‚‹ ï¼" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:445 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:518 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:459 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:551 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:489 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:586 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:293 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:372 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:588 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:443 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:516 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:489 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:588 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:459 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:551 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:443 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:516 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:293 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:372 +msgid "" +"Address must be a valid IP address or Firewall Alias. Please correct this " +"value to continue." +msgstr "ã€Œã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæœ‰åйãªIPアドレスã¾ãŸã¯ãƒ•ァイアウォールエイリアスã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ã“ã®ä¿®æ­£ã—ã¦ãã ã•ã„ã€ã‚’継続ã™ã‚‹ä¾¡å€¤ã€‚" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:505 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:536 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:539 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:568 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:574 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:601 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:358 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:392 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:576 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:603 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:503 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:534 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:576 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:603 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:539 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:568 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:503 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:534 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:358 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:392 +msgid "Only percentage bandwidth specification is allowed." +msgstr "唯一ã®å¸¯åŸŸå¹…ã®å‰²åˆï¼ˆï¼…ï¼‰ã®æŒ‡å®šãŒè¨±å¯ã•れã¾ã™ã€‚" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:695 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1044 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:722 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1106 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:756 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1154 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:930 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:758 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1156 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:693 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1042 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:758 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1156 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:722 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1106 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:693 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1042 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:930 +msgid "" +"Custom Bandwidths are greater than 30%. Please lower them for the wizard to " +"continue." +msgstr "「カスタム帯域幅ãŒ30ï¼…ã‚’è¶…ãˆã¦ã„ã¾ã™ã€‚ウィザードã®ãŸã‚ã«ãれらを下ã’ã¦ãã ã•ã„ã€ç¶™ç¶šã€‚" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1346 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1408 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1462 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1205 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1464 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1344 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1464 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1408 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1344 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1205 +msgid "Penalty Box" +msgstr "ペナルティーボックス" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1366 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1482 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364 +msgid "VOIP Adapter" +msgstr "VOIPアダプタ" + +#: usr/local/www/wizards/openvpn_wizard.inc:602 +#: usr/local/www/wizards/openvpn_wizard.inc:618 +#: usr/local/www/wizards/openvpn_wizard.inc:619 +#: usr/local/www/wizards/openvpn_wizard.inc:602 +#: usr/local/www/wizards/openvpn_wizard.inc:619 +#, php-format +msgid "OpenVPN %s wizard" +msgstr "OpenVPNã®%sウィザード" + +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:268 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:268 +msgid "You cannot specify bandwidth smaller than 1!" +msgstr "ã‚ãªãŸã¯1 よりもå°ã•ã„帯域幅を指定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ï¼" + +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:278 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:288 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:288 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:278 +msgid "You cannot select the same interface for local and outside." +msgstr "ã‚ãªãŸãŒå¤–ã§ã€ãƒ­ãƒ¼ã‚«ãƒ«ãŠã‚ˆã³ã®ãŸã‚ã®åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:276 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:276 +msgid "You cannot specify 0 bandwidth!" +msgstr "ã‚ãªãŸãŒ0ã®å¸¯åŸŸå¹…を指定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ï¼" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:297 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:297 +msgid "You cannot select the same interface twice on local interfaces." +msgstr "ã‚ãªãŸã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã§äºŒåº¦åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:37 +msgid "You need to specify the number of local interfaces connected." +msgstr "ã‚ãªãŸãŒæŽ¥ç¶šã•れã¦ã„ã‚‹ãƒ­ãƒ¼ã‚«ãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®æ•°ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:41 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:41 +msgid "The number of local connection needs to be greater than 1." +msgstr "ãƒ­ãƒ¼ã‚«ãƒ«æŽ¥ç¶šã®æ•°ãŒ1より大ããã™ã‚‹å¿…è¦ãŒã‚る。" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:240 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:240 +msgid "Upload bandwidth of connection is not valid." +msgstr "コãƒã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰å¸¯åŸŸå¹…ãŒæœ‰åйã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:245 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:245 +msgid "Download bandwidth of connection is not valid." +msgstr "接続ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰å¸¯åŸŸå¹…ãŒæœ‰åйã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:252 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:252 +msgid "You cannot specify bandwidth less than 1!" +msgstr "ã‚ãªãŸã¯ã€å¸¯åŸŸå¹…ãŒ1未満を指定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ï¼" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:257 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:262 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:257 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:262 +msgid "We do not support Bandwidths smaller than 128Kbit/s for CBQ scheduler." +msgstr "我々ã¯128Kbit / sã®CBQスケジューラ用よりもå°ã•ã„帯域幅をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:300 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:300 +msgid "Upload or download bandwidth is not valid." +msgstr "アップロードã¾ãŸã¯ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã®å¸¯åŸŸå¹…ãŒæœ‰åйã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:317 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:317 +#, php-format +msgid "" +"You cannot set the VoIP upload bandwidth on WAN connection higher than " +"80% of the connection." +msgstr "接続ã®80ï¼… 「ã‚ãªãŸãŒã‚ˆã‚Šé«˜ã„WAN接続上ã§ã®VoIPã®ã‚¢ãƒƒãƒ—ロードã®å¸¯åŸŸå¹…を設定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:324 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:334 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:324 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:334 +#, php-format +msgid "" +"You cannot set the VoIP download bandwidth on connection higher than 80% of " +"the connection." +msgstr "コãƒã‚¯ã‚·ãƒ§ãƒ³"ã‚ãªãŸã¯80ï¼…ã‚ˆã‚Šã‚‚é«˜ã„æŽ¥ç¶šã§ã®VoIPダウンロード帯域幅を設定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/widgets/widgets/system_information.widget.php:162 +#: usr/local/www/widgets/widgets/system_information.widget.php:153 +#: usr/local/www/widgets/widgets/system_information.widget.php:159 +#: usr/local/www/widgets/widgets/system_information.widget.php:160 +#: usr/local/www/widgets/widgets/system_information.widget.php:158 +#: usr/local/www/widgets/widgets/system_information.widget.php:160 +msgid "Current date/time" +msgstr "ç¾åœ¨ã®æ—¥ä»˜/時刻" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:41 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:41 +msgid "Computer / Device" +msgstr "コンピュータ/デãƒã‚¤ã‚¹" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:67 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:67 +msgid "Wake Up" +msgstr "目を覚ã¾ã™" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:72 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:72 +msgid "No saved WoL addresses" +msgstr "ã¯ä¿å­˜ã•れãªã„ã®WOLアドレス" + +#: usr/local/www/firewall_nat_npt.php:105 +#: usr/local/www/firewall_nat_npt.php:105 +msgid "External Prefix" +msgstr "外部プレフィックス" + +#: usr/local/www/firewall_nat_npt.php:106 +#: usr/local/www/firewall_nat_npt.php:106 +msgid "Internal prefix" +msgstr "内部接頭" + +#: usr/local/www/firewall_nat_npt_edit.php:106 +#: usr/local/www/firewall_nat_npt_edit.php:106 +msgid "Source prefix" +msgstr "元プレフィクス" + +#: usr/local/www/firewall_nat_npt_edit.php:108 +#: usr/local/www/firewall_nat_npt_edit.php:108 +msgid "Destination prefix" +msgstr "宛先プレフィックス" + +#: usr/local/www/firewall_nat_npt_edit.php:156 +#: usr/local/www/firewall_nat_npt_edit.php:161 +#: usr/local/www/firewall_nat_npt_edit.php:160 +#: usr/local/www/firewall_nat_npt_edit.php:158 +#: usr/local/www/firewall_nat_npt_edit.php:158 +msgid "Edit NAT NPt entry" +msgstr "編集NAT NPTエントリー" + +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_npt_edit.php:211 +#: usr/local/www/firewall_nat_npt_edit.php:210 +#: usr/local/www/firewall_nat_npt_edit.php:209 +#: usr/local/www/firewall_nat_npt_edit.php:209 +msgid "Internal IPv6 Prefix" +msgstr "内部ã®IPv6プレフィックス" + +#: usr/local/www/firewall_nat_npt_edit.php:228 +#: usr/local/www/firewall_nat_npt_edit.php:233 +#: usr/local/www/firewall_nat_npt_edit.php:232 +#: usr/local/www/firewall_nat_npt_edit.php:231 +#: usr/local/www/firewall_nat_npt_edit.php:231 +msgid "" +"Enter the internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. " +"The prefix size specified for the internal IPv6 prefix will be applied to " +"the \n" +"external prefix." +msgstr "「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—レフィックスã®ç¿»è¨³ã®ãŸã‚ã®å†…部( LAN) ULAã®IPv6プレフィックスを入力ã—ã¾ã™ã€‚ 「内部IPv6ãƒ—ãƒ¬ãƒ•ã‚£ãƒƒã‚¯ã‚¹ã«æŒ‡å®šã•れãŸãƒ—レフィックスサイズãŒã€Œ \n 「外部プレフィックスã«é©ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/firewall_nat_npt_edit.php:234 +#: usr/local/www/firewall_nat_npt_edit.php:239 +#: usr/local/www/firewall_nat_npt_edit.php:238 +#: usr/local/www/firewall_nat_npt_edit.php:237 +#: usr/local/www/firewall_nat_npt_edit.php:237 +msgid "Destination IPv6 Prefix" +msgstr "å…ˆã®IPv6プレフィックス" + +#: usr/local/www/firewall_nat_npt_edit.php:258 +#: usr/local/www/firewall_nat_npt_edit.php:263 +#: usr/local/www/firewall_nat_npt_edit.php:262 +#: usr/local/www/firewall_nat_npt_edit.php:261 +#: usr/local/www/firewall_nat_npt_edit.php:261 +msgid "Enter the Global Unicast routable IPv6 prefix here" +msgstr "ã“ã“ã§ã‚°ãƒ­ãƒ¼ãƒãƒ«ãƒ¦ãƒ‹ã‚­ãƒ£ã‚¹ãƒˆãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°å¯èƒ½ãªIPv6プレフィックスを入力ã—ã¦ãã ã•ã„" + +#: usr/local/www/services_dhcpv6.php:74 +#: usr/local/www/services_router_advertisements.php:74 +#: usr/local/www/services_router_advertisements.php:74 +#: usr/local/www/services_dhcpv6.php:74 +msgid "" +"The DHCPv6 Server can only be enabled on interfaces configured with static " +"IP addresses" +msgstr "IPアドレスã®ã€Œ DHCPv6サーãƒã¯ã€é™çš„ã«è¨­å®šã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§æœ‰åйã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€" + +#: usr/local/www/services_dhcpv6.php:184 usr/local/www/services_dhcpv6.php:196 +#: usr/local/www/services_dhcpv6.php:181 usr/local/www/services_dhcpv6.php:175 +#: usr/local/www/services_dhcpv6.php:175 +msgid "A valid prefix range must be specified." +msgstr "有効ãªãƒ—レフィックス範囲を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6.php:190 usr/local/www/services_dhcpv6.php:202 +#: usr/local/www/services_dhcpv6.php:187 usr/local/www/services_dhcpv6.php:181 +#: usr/local/www/services_dhcpv6.php:181 +msgid "A valid IPv6 address must be specified for the gateway." +msgstr "有効ãªIPv6アドレスã¯ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6.php:192 usr/local/www/services_dhcpv6.php:204 +#: usr/local/www/services_router_advertisements.php:154 +#: usr/local/www/services_dhcpv6.php:189 usr/local/www/services_dhcpv6.php:183 +#: usr/local/www/services_router_advertisements.php:149 +#: usr/local/www/services_router_advertisements.php:149 +#: usr/local/www/services_dhcpv6.php:183 +msgid "" +"A valid IPv6 address must be specified for the primary/secondary DNS servers." +msgstr "「有効ãªIPv6アドレスã¯ã€ãƒ—ライマリ/セカンダリDNSサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6.php:201 usr/local/www/services_dhcpv6.php:223 +#: usr/local/www/services_dhcpv6.php:208 usr/local/www/services_dhcpv6.php:202 +#: usr/local/www/services_dhcpv6.php:202 +msgid "" +"A valid IPv6 address must be specified for the primary/secondary NTP servers." +msgstr "「有効ãªIPv6アドレスã¯ã€ãƒ—ライマリ/セカンダリã®NTPサーãƒãƒ¼ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6.php:205 usr/local/www/services_dhcpv6.php:227 +#: usr/local/www/services_dhcpv6.php:212 usr/local/www/services_dhcpv6.php:206 +#: usr/local/www/services_dhcpv6.php:206 +msgid "A valid IPv6 address or hostname must be specified for the TFTP server." +msgstr "有効ãªIPv6アドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåã¯ã€TFTPサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6.php:207 usr/local/www/services_dhcpv6.php:229 +#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:208 +#: usr/local/www/services_dhcpv6.php:208 +msgid "A valid IPv6 address must be specified for the network boot server." +msgstr "有効ãªIPv6アドレスã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ–ートサーãƒãƒ¼ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:236 +#: usr/local/www/services_dhcpv6.php:221 usr/local/www/services_dhcpv6.php:215 +#: usr/local/www/services_dhcpv6.php:215 +#, php-format +msgid "The subnet range cannot overlap with virtual IPv6 address %s." +msgstr "サブãƒãƒƒãƒˆç¯„囲ã¯ã€ä»®æƒ³IPv6アドレス%s.ã¨é‡è¤‡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/services_dhcpv6.php:359 usr/local/www/services_dhcpv6.php:386 +#: usr/local/www/services_dhcpv6.php:367 usr/local/www/services_dhcpv6.php:362 +#: usr/local/www/services_dhcpv6.php:362 +msgid "DHCPv6 server" +msgstr "DHCPv6サーãƒ" + +#: usr/local/www/services_dhcpv6.php:497 usr/local/www/services_dhcpv6.php:524 +#: usr/local/www/services_router_advertisements.php:261 +#: usr/local/www/services_router_advertisements.php:270 +#: usr/local/www/services_dhcpv6.php:503 usr/local/www/services_dhcpv6.php:514 +#: usr/local/www/services_router_advertisements.php:256 +#: usr/local/www/services_router_advertisements.php:265 +#: usr/local/www/services_router_advertisements.php:256 +#: usr/local/www/services_router_advertisements.php:265 +#: usr/local/www/services_dhcpv6.php:514 +msgid "Router Advertisements" +msgstr "ルーター通知" + +#: usr/local/www/services_dhcpv6.php:504 +#, php-format +msgid "" +"Select the Operating Mode for the router advertisement Daemon. Use "Router " +"Only" to only advertise the router, "Unmanaged" for Router Advertising " +"with Stateless Autoconfig, "Managed" for DHCPv6 only with router " +"advertisements, "Assisted" for DHCPv6 Combined with Stateless Autoconfig" +msgstr "「ルータ広告デーモンã®ãŸã‚ã®å‹•ä½œãƒ¢ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¾ã™ã€‚使用ã—ã¦ã€Œãƒ«ãƒ¼ã‚¿åºƒå‘Šã®ãŸã‚ã®ã€Œç®¡ç†å¯¾è±¡å¤–〠ã€ãƒ«ãƒ¼ã‚¿ã‚’宣ä¼"ã®ã¿"ã®ã¿ã¸ã®ãƒ«ãƒ¼ã‚¿ã®ã€Œã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹è‡ªå‹•設定ã§ã€ 「管ç†ã€ DHCPv6ã®å ´åˆã¯ã€ãƒ«ãƒ¼ã‚¿ã¨"広告〠DHCPv6ã®ãŸã‚ã®ã€Œæ”¯æ´ã€ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹è‡ªå‹•設定ã¨çµ„ã¿åˆã‚ã›ã‚‹" + +#: usr/local/www/services_dhcpv6.php:510 usr/local/www/services_dhcpv6.php:584 +#: usr/local/www/services_dhcpv6.php:515 usr/local/www/services_dhcpv6.php:526 +#: usr/local/www/services_dhcpv6.php:526 +#, php-format +msgid "Enable DHCPv6 server on %s interface" +msgstr "%sインターフェイス上ã®DHCPv6サーãƒã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:649 +#: usr/local/www/services_dhcpv6.php:580 usr/local/www/services_dhcpv6.php:597 +#: usr/local/www/services_dhcpv6.php:597 +msgid "Prefix Delegation Range" +msgstr "接頭委任範囲" + +#: usr/local/www/services_dhcpv6.php:580 +msgid "prefix length" +msgstr "プレフィックス長" + +#: usr/local/www/services_dhcpv6.php:585 +msgid "" +"You can define a Prefix range here for DHCP Prefix Delegation. This allows " +"for \n" +"tttttassigning networks to subrouters" +msgstr "subroutersã«\nãŸã‚ã®ã€Œ tttttassigningãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ã¯ã€DHCPプレフィックス委任ã®ãŸã‚ã«ã“ã“プレフィックス範囲を定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れãŒå¯èƒ½ã«ã€" + +#: usr/local/www/services_dhcpv6.php:803 +#: usr/local/www/status_dhcpv6_leases.php:361 +#: usr/local/www/status_dhcpv6_leases.php:405 +#: usr/local/www/status_dhcpv6_leases.php:483 +#: usr/local/www/services_dhcpv6.php:898 +#: usr/local/www/status_dhcpv6_leases.php:406 +#: usr/local/www/status_dhcpv6_leases.php:484 +#: usr/local/www/services_dhcpv6.php:829 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcpv6_leases.php:487 +#: usr/local/www/services_dhcpv6.php:850 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcpv6_leases.php:487 +#: usr/local/www/services_dhcpv6.php:850 +msgid "DUID" +msgstr "DUID" + +#: usr/local/www/services_dhcpv6_edit.php:106 +#: usr/local/www/services_dhcpv6_edit.php:189 +#: usr/local/www/services_dhcpv6_edit.php:108 +#: usr/local/www/services_dhcpv6_edit.php:192 +#: usr/local/www/services_dhcpv6_edit.php:191 +#: usr/local/www/services_dhcpv6_edit.php:111 +#: usr/local/www/services_dhcpv6_edit.php:194 +#: usr/local/www/services_dhcpv6_edit.php:111 +#: usr/local/www/services_dhcpv6_edit.php:194 +msgid "DUID Identifier" +msgstr "DUID識別å­" + +#: usr/local/www/services_dhcpv6_edit.php:126 +#: usr/local/www/services_dhcpv6_edit.php:128 +#: usr/local/www/services_dhcpv6_edit.php:131 +#: usr/local/www/services_dhcpv6_edit.php:131 +msgid "A valid DUID Identifier must be specified." +msgstr "有効ãªDUID識別å­ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6_edit.php:135 +#: usr/local/www/services_dhcpv6_edit.php:137 +#: usr/local/www/services_dhcpv6_edit.php:140 +#: usr/local/www/services_dhcpv6_edit.php:140 +msgid "This Hostname, IP or DUID Identifier already exists." +msgstr "ã“ã®ãƒ›ã‚¹ãƒˆåã¯ã€ IPã¾ãŸã¯DUID識別å­ã¯ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dhcpv6_edit.php:178 +msgid "DHCPv6" +msgstr "DHCPv6ã®" + +#: usr/local/www/services_dhcpv6_edit.php:186 +#: usr/local/www/services_dhcpv6_edit.php:189 +#: usr/local/www/services_dhcpv6_edit.php:188 +#: usr/local/www/services_dhcpv6_edit.php:191 +#: usr/local/www/services_dhcpv6_edit.php:191 +msgid "Static DHCPv6 Mapping" +msgstr "é™çš„DHCPv6ã®ãƒžãƒƒãƒ”ング" + +#: usr/local/www/services_dhcpv6_edit.php:193 +#: usr/local/www/services_dhcpv6_edit.php:196 +#: usr/local/www/services_dhcpv6_edit.php:195 +#: usr/local/www/services_dhcpv6_edit.php:198 +#: usr/local/www/services_dhcpv6_edit.php:198 +msgid "Enter a DUID Identifier in the following format: " +msgstr "次ã®å½¢å¼ã§DUID識別å­ã‚’入力ã—ã¦ãã ã•ã„:" + +#: usr/local/www/services_dhcpv6_edit.php:202 +#: usr/local/www/services_dhcpv6_edit.php:205 +msgid "" +"If no IPv6 address is given, one will be dynamically allocated from the " +"pool." +msgstr "プールã€ã¯ã€IPv6ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã€ 1ãŒå‹•çš„ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€ 。" + +#: usr/local/www/services_dhcpv6_relay.php:81 +#: usr/local/www/services_dhcpv6_relay.php:81 +msgid "A valid Destination Server IPv6 address must be specified." +msgstr "有効ãªå®›å…ˆã‚µãƒ¼ãƒã®IPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6_relay.php:145 +#: usr/local/www/services_dhcpv6_relay.php:146 +#: usr/local/www/services_dhcpv6_relay.php:146 +msgid "DHCPv6 Relay configuration" +msgstr "DHCPv6リレーã®è¨­å®š" + +#: usr/local/www/services_dhcpv6_relay.php:151 +#: usr/local/www/services_dhcpv6_relay.php:152 +#: usr/local/www/services_dhcpv6_relay.php:152 +#, php-format +msgid "Enable DHCPv6 relay on interface" +msgstr "インターフェイス上ã®DHCPv6リレーを有効ã«ã™ã‚‹" + +#: usr/local/www/services_dhcpv6_relay.php:169 +#: usr/local/www/services_dhcpv6_relay.php:170 +#: usr/local/www/services_dhcpv6_relay.php:170 +msgid "Interfaces without an IPv6 address will not be shown." +msgstr "IPv6アドレスã®ãªã„インターフェースã¯è¡¨ç¤ºã•れã¾ã›ã‚“。" + +#: usr/local/www/services_dhcpv6_relay.php:177 +#: usr/local/www/services_dhcpv6_relay.php:178 +#: usr/local/www/services_dhcpv6_relay.php:178 +#, php-format +msgid "" +"If this is checked, the DHCPv6 relay will append the circuit ID (%s " +"interface number) and the agent ID to the DHCPv6 request." +msgstr "DHCPv6ã®è¦æ±‚ã«ã€Œ (インターフェイス番å·ã¨ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆIDãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ DHCPv6リレーã¯å›žç·šID %s )を追加ã—ã¾ã™ã€ 。" + +#: usr/local/www/services_dhcpv6_relay.php:184 +#: usr/local/www/services_dhcpv6_relay.php:185 +#: usr/local/www/services_dhcpv6_relay.php:185 +msgid "" +"This is the IPv6 address of the server to which DHCPv6 requests are relayed. " +"You can enter multiple server IPv6 addresses, separated by commas. Select " +""Proxy requests to DHCPv6 server on WAN subnet" to relay DHCPv6 packets to " +"the server that was used on the WAN interface." +msgstr "「ã“れã¯ã€DHCPv6è¦æ±‚ãŒä¸­ç¶™ã•れるよã†ã«ã‚µãƒ¼ãƒã®IPv6アドレスã§ã™ã€‚ "ã‚ãªãŸã¯ã‚«ãƒ³ãƒžã§åŒºåˆ‡ã£ã¦è¤‡æ•°ã®ã‚µãƒ¼ãƒã®IPv6アドレスを入力ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 「 WANインターフェイス上ã§ä½¿ç”¨ã•れãŸã€Œã‚µãƒ¼ãƒã¸ã®DHCPv6パケットを中継ã™ã‚‹ã€ŒWANサブãƒãƒƒãƒˆä¸Šã®DHCPv6サーãƒã¸ã®ãƒ—ロキシã®è¦æ±‚ã€ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/status_dhcpv6_leases.php:49 +#: usr/local/www/status_dhcpv6_leases.php:50 +#: usr/local/www/status_dhcpv6_leases.php:50 +msgid "DHCPv6 leases" +msgstr "DHCPv6ã®ãƒªãƒ¼ã‚¹" + +#: usr/local/www/status_dhcpv6_leases.php:360 +#: usr/local/www/status_dhcpv6_leases.php:404 +#: usr/local/www/status_dhcpv6_leases.php:482 +#: usr/local/www/status_dhcpv6_leases.php:405 +#: usr/local/www/status_dhcpv6_leases.php:483 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:486 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:486 +msgid "IAID" +msgstr "IAID" + +#: usr/local/www/status_dhcpv6_leases.php:362 +#: usr/local/www/status_dhcpv6_leases.php:406 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/status_dhcpv6_leases.php:410 +#: usr/local/www/status_dhcpv6_leases.php:410 +msgid "Hostname/MAC" +msgstr "ホストå/ MAC" + +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_wireless.php:99 +#: usr/local/www/diag_logs_wireless.php:100 +#: usr/local/www/diag_logs_wireless.php:100 +#, php-format +msgid "Wireless (hostapd) log entries" +msgstr "ワイヤレス( hostapdã®ï¼‰ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª" + +#: usr/local/www/services_captiveportal_zones.php:37 +#: usr/local/www/services_captiveportal_zones.php:37 +msgid "Captiveportal" +msgstr "Captiveportal" + +#: usr/local/www/services_captiveportal_zones.php:37 +#: usr/local/www/services_captiveportal_zones.php:37 +msgid "Zones" +msgstr "ゾーン" + +#: usr/local/www/services_captiveportal_zones.php:47 +#: usr/local/www/services_captiveportal_zones.php:48 +#: usr/local/www/services_captiveportal_zones.php:48 +msgid "The CaptivePortal entry list has been changed" +msgstr "CaptivePortalã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãƒªã‚¹ãƒˆãŒå¤‰æ›´ã•れã¾ã—ãŸ" + +#: usr/local/www/services_captiveportal_zones.php:60 +#: usr/local/www/services_captiveportal_zones.php:101 +#: usr/local/www/services_captiveportal_zones.php:61 +#: usr/local/www/services_captiveportal_zones.php:102 +#: usr/local/www/services_captiveportal_zones.php:61 +#: usr/local/www/services_captiveportal_zones.php:102 +msgid "add a new captiveportal instance" +msgstr "æ–°ã—ã„captiveportalインスタンスを追加" + +#: usr/local/www/services_captiveportal_zones.php:88 +#: usr/local/www/services_captiveportal_zones.php:89 +#: usr/local/www/services_captiveportal_zones.php:89 +msgid "edit captiveportal instance" +msgstr "captiveportalインスタンスを編集" + +#: usr/local/www/services_captiveportal_zones.php:89 +#: usr/local/www/services_captiveportal_zones.php:90 +#: usr/local/www/services_captiveportal_zones.php:90 +msgid "delete captiveportal instance" +msgstr "captiveportalインスタンスを削除" + +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +msgid "Edit Zones" +msgstr "編集ゾーン" + +#: usr/local/www/services_captiveportal_zones_edit.php:67 +#: usr/local/www/services_captiveportal_zones_edit.php:69 +#: usr/local/www/services_captiveportal_zones_edit.php:69 +msgid "already exists" +msgstr "ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™" + +#: usr/local/www/services_captiveportal_zones_edit.php:96 +#: usr/local/www/services_captiveportal_zones_edit.php:98 +#: usr/local/www/services_captiveportal_zones_edit.php:94 +#: usr/local/www/services_captiveportal_zones_edit.php:94 +msgid "Edit Captiveportal Zones" +msgstr "編集Captiveportalゾーン" + +#: usr/local/www/services_captiveportal_zones_edit.php:103 +msgid "Zone name. Cannot contain spaces." +msgstr "ゾーンå。スペースをå«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_firmware_restorefullbackup.php:104 +#: usr/local/www/system_firmware_restorefullbackup.php:104 +msgid "Restore full backup" +msgstr "フルãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を復元" + +#: usr/local/www/system_firmware_restorefullbackup.php:139 +#: usr/local/www/system_firmware_restorefullbackup.php:139 +msgid "Filename" +msgstr "ファイルå" + +#: usr/local/www/system_firmware_restorefullbackup.php:162 +#: usr/local/www/system_firmware_restorefullbackup.php:162 +msgid "Do you really want to delete this backup?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/system_firmware_restorefullbackup.php:174 +msgid "

    Could not locate any previous backups.
    " +msgstr "u003cCENTERu003eã¯ä»¥å‰ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ u003c /センターu003e" + +#: usr/local/www/system_firmware_restorefullbackup.php:184 +#: usr/local/www/system_firmware_restorefullbackup.php:184 +msgid "Restore" +msgstr "復元ã™ã‚‹" + +#: usr/local/www/diag_dump_states_sources.php:65 +#: usr/local/www/diag_dump_states_sources.php:65 +msgid "Show Source Tracking" +msgstr "表示ã™ã‚‹ã‚½ãƒ¼ã‚¹ã®è¿½è·¡" + +#: usr/local/www/diag_dump_states_sources.php:145 +#: usr/local/www/diag_dump_states_sources.php:144 +#: usr/local/www/diag_dump_states_sources.php:144 +msgid "Source -> Destination" +msgstr "ソース - u003eã™ã¹ã¦ã®å¸‚町æ‘" + +#: usr/local/www/diag_dump_states_sources.php:146 +#: usr/local/www/diag_dump_states_sources.php:145 +#: usr/local/www/diag_dump_states_sources.php:145 +msgid "# States" +msgstr "" + +#: usr/local/www/diag_dump_states_sources.php:147 +#: usr/local/www/diag_dump_states_sources.php:146 +#: usr/local/www/diag_dump_states_sources.php:146 +msgid "# Connections" +msgstr "" + +#: usr/local/www/diag_dump_states_sources.php:180 +#: usr/local/www/diag_dump_states_sources.php:179 +#: usr/local/www/diag_dump_states_sources.php:179 +msgid "Remove all source tracking entries from" +msgstr "ã‹ã‚‰ã™ã¹ã¦ã®ã‚½ãƒ¼ã‚¹ã®è¿½è·¡ã‚¨ãƒ³ãƒˆãƒªã‚’削除" + +#: usr/local/www/diag_dump_states_sources.php:190 +#: usr/local/www/diag_dump_states_sources.php:189 +#: usr/local/www/diag_dump_states_sources.php:189 +msgid "No source tracking entries were found." +msgstr "ソースãªã—ã®è¿½è·¡ã‚¨ãƒ³ãƒˆãƒªãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: etc/inc/system.inc:418 etc/inc/system.inc:425 etc/inc/system.inc:426 +#, php-format +msgid "Not adding default route because OLSR dynamic gateway is enabled." +msgstr "OLSRãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹ãŸã‚ã€ãƒ‡ãƒ•ォルトルートを追加ã—ãªã„。" + +#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:124 +#: etc/inc/priv.defs.inc:124 +msgid "WebCfg - Diagnostics: Logs: Gateways page" +msgstr "WebCfg - 診断:ログ:ゲートウェイページ" + +#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:125 +#: etc/inc/priv.defs.inc:125 +msgid "Allow access to the 'Diagnostics: Logs: System: Gateways' page." +msgstr "ページ' :ログ:システムゲートウェイ診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:130 +#: etc/inc/priv.defs.inc:130 +msgid "WebCfg - Diagnostics: Logs: Resolver page" +msgstr "WebCfg - 診断:ログ:レゾルãƒãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:131 +#: etc/inc/priv.defs.inc:131 +msgid "Allow access to the 'Diagnostics: Logs: System: Resolver' page." +msgstr "ページ' :ログ:システムリゾルãƒè¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:130 etc/inc/priv.defs.inc:136 +#: etc/inc/priv.defs.inc:136 +msgid "WebCfg - Diagnostics: Logs: Wireless page" +msgstr "WebCfg - 診断:ログ:ワイヤレスページ" + +#: etc/inc/priv.defs.inc:131 etc/inc/priv.defs.inc:137 +#: etc/inc/priv.defs.inc:137 +msgid "Allow access to the 'Diagnostics: Logs: System: Wireless' page." +msgstr "ページ' :ログ:システムワイヤレス診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:154 +#: etc/inc/priv.defs.inc:154 +msgid "WebCfg - Status: System logs: NTP page" +msgstr "WebCfg - ステータス:システムログ: NTPã®ãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:155 +#: etc/inc/priv.defs.inc:155 +msgid "Allow access to the 'Status: System logs: NTP' page." +msgstr "ページ':システムログã®NTPステータス'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/pfsense-utils.inc:2377 etc/inc/pfsense-utils.inc:2468 +#: etc/inc/pfsense-utils.inc:2521 etc/inc/pfsense-utils.inc:2528 +#: etc/inc/pfsense-utils.inc:2535 etc/inc/pfsense-utils.inc:2539 +#: etc/inc/pfsense-utils.inc:2581 +msgid "English" +msgstr "英語" + +#: etc/inc/pfsense-utils.inc:2378 etc/inc/pfsense-utils.inc:2469 +#: etc/inc/pfsense-utils.inc:2522 etc/inc/pfsense-utils.inc:2529 +#: etc/inc/pfsense-utils.inc:2536 etc/inc/pfsense-utils.inc:2540 +#: etc/inc/pfsense-utils.inc:2593 +msgid "Portuguese (Brazil)" +msgstr "ãƒãƒ«ãƒˆã‚¬ãƒ«èªžï¼ˆãƒ–ラジル)" + +#: etc/inc/interfaces.inc:251 etc/inc/interfaces.inc:250 +#: etc/inc/interfaces.inc:248 etc/inc/interfaces.inc:248 +msgid "interface_vlan_configure called with if undefined." +msgstr "interface_vlan_configureã«å®šç¾©ã•れã¦ã„ãªã„å ´åˆã«å‘¼ã³å‡ºã•れる。" + +#: etc/inc/interfaces.inc:292 etc/inc/interfaces.inc:291 +#: etc/inc/interfaces.inc:289 etc/inc/interfaces.inc:289 +#, php-format +msgid "interface_qinq_configure called with if undefined.%s" +msgstr "interface_qinq_configureã§å‘¼ã³å‡ºã•れãŸå ´åˆundefined.%s" + +#: etc/inc/interfaces.inc:377 etc/inc/interfaces.inc:376 +#: etc/inc/interfaces.inc:380 etc/inc/interfaces.inc:380 +#, php-format +msgid "interface_qinq2_configure called with if undefined.%s" +msgstr "interface_qinq2_configureã§å‘¼ã³å‡ºã•れãŸå ´åˆundefined.%s" + +#: etc/inc/interfaces.inc:2152 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interface_carpdev_configure() for " +"writing.%s" +msgstr "writing.%s : 「エラーã®ãŸã‚interface_carpdev_configure.()ã«dhclient_%s.confé–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“ã€" + +#: etc/inc/interfaces.inc:2995 +msgid "Could not bring wanif up in interface_carpdev_dhcp_configure()" +msgstr "interface_carpdev_dhcp_configure.()ã«wanifã‚’æŒã¡å‡ºã™ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: etc/inc/interfaces.inc:3500 etc/inc/interfaces.inc:3360 +#: etc/inc/interfaces.inc:3453 etc/inc/interfaces.inc:3580 +#: etc/inc/interfaces.inc:3525 etc/inc/interfaces.inc:3525 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for " +"writing.%s" +msgstr "writing.%s : 「エラーã®ãŸã‚interface_dhcp_configure.()ã«dhclient_%s.confé–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“ã€" + +#: etc/inc/services.inc:1085 etc/inc/services.inc:1217 +#: etc/inc/services.inc:1211 etc/inc/services.inc:1218 +#: etc/inc/services.inc:1270 +msgid "Started IGMP proxy service." +msgstr "ã¯ã˜ã‚ã«ã€IGMPプロキシサービス。" + +#: usr/local/www/diag_logs_routing.php:74 +#: usr/local/www/diag_logs_settings.php:224 usr/local/www/fbegin.inc:148 +#: usr/local/www/fbegin.inc:183 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111 +#: usr/local/www/diag_logs_vpn.php:135 usr/local/www/diag_logs_ppp.php:79 +#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs.php:86 +#: usr/local/www/status_ntpd.php:94 usr/local/www/diag_logs_dhcp.php:79 +#: usr/local/www/diag_logs_wireless.php:76 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/services_ntpd.php:71 usr/local/www/diag_logs_gateways.php:87 +#: usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_filter.php:110 +#: usr/local/www/diag_logs_routing.php:75 +#: usr/local/www/diag_logs_settings.php:231 usr/local/www/fbegin.inc:157 +#: usr/local/www/fbegin.inc:191 usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112 +#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/status_ntpd.php:109 usr/local/www/diag_logs_dhcp.php:80 +#: usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/services_ntpd.php:76 usr/local/www/diag_logs_gateways.php:88 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_filter.php:100 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_ppp.php:77 usr/local/www/fbegin.inc:149 +#: usr/local/www/fbegin.inc:182 usr/local/www/diag_logs_filter.php:130 +#: usr/local/www/status_ntpd.php:115 usr/local/www/diag_logs_auth.php:75 +#: usr/local/www/diag_logs_settings.php:231 +#: usr/local/www/diag_logs_filter.php:130 +#: usr/local/www/diag_logs_routing.php:75 usr/local/www/diag_logs_dhcp.php:80 +#: usr/local/www/services_ntpd.php:76 usr/local/www/diag_logs.php:86 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/diag_logs_openvpn.php:79 usr/local/www/diag_logs_ppp.php:77 +#: usr/local/www/status_ntpd.php:115 usr/local/www/diag_logs_gateways.php:88 +#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:182 +#: usr/local/www/diag_logs_relayd.php:76 usr/local/www/diag_logs_vpn.php:135 +#: usr/local/www/diag_logs_ipsec.php:112 +#: usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/diag_logs_resolver.php:88 +#: usr/local/www/diag_logs_filter_summary.php:194 +msgid "NTP" +msgstr "NTP" + +#: usr/local/www/diag_logs_routing.php:82 +#: usr/local/www/diag_logs_resolver.php:96 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs.php:95 usr/local/www/diag_logs_wireless.php:84 +#: usr/local/www/diag_logs_gateways.php:96 +#: usr/local/www/diag_logs_routing.php:83 +#: usr/local/www/diag_logs_resolver.php:97 +#: usr/local/www/diag_logs_wireless.php:85 +#: usr/local/www/diag_logs_gateways.php:97 +#: usr/local/www/diag_logs_routing.php:83 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs.php:95 usr/local/www/diag_logs_gateways.php:97 +#: usr/local/www/diag_logs_wireless.php:85 +#: usr/local/www/diag_logs_resolver.php:97 +msgid "General" +msgstr "一般" + +#: usr/local/www/diag_logs_routing.php:85 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_resolver.php:99 usr/local/www/diag_logs.php:98 +#: usr/local/www/diag_logs_wireless.php:87 +#: usr/local/www/diag_logs_gateways.php:99 +#: usr/local/www/diag_logs_routing.php:86 +#: usr/local/www/diag_logs_resolver.php:100 +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_gateways.php:100 +#: usr/local/www/diag_logs_routing.php:86 usr/local/www/diag_logs.php:98 +#: usr/local/www/diag_logs_gateways.php:100 +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_resolver.php:100 +msgid "Resolver" +msgstr "リゾルãƒ" + +#: usr/local/www/diag_logs_routing.php:97 +#: usr/local/www/diag_logs_routing.php:98 +#: usr/local/www/diag_logs_routing.php:98 +#, php-format +msgid "Routing daemon log entries" +msgstr "デーモンログエントリをルーティング" + +#: usr/local/www/system_routes_edit.php:158 +#: usr/local/www/system_routes_edit.php:169 +#: usr/local/www/system_routes_edit.php:171 +#: usr/local/www/system_routes_edit.php:165 +msgid "A route to these destination networks already exists" +msgstr "ã“れらã®å®›å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒ«ãƒ¼ãƒˆãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™" + +#: usr/local/www/system_routes_edit.php:302 +#: usr/local/www/system_routes_edit.php:303 +#: usr/local/www/system_routes_edit.php:326 +#: usr/local/www/system_routes_edit.php:335 +#: usr/local/www/system_routes_edit.php:329 +msgid "Disable this static route" +msgstr "ã“ã®ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã‚’無効ã«ã™ã‚‹" + +#: usr/local/www/system_routes_edit.php:303 +#: usr/local/www/system_routes_edit.php:304 +#: usr/local/www/system_routes_edit.php:327 +#: usr/local/www/system_routes_edit.php:336 +#: usr/local/www/system_routes_edit.php:330 +msgid "" +"Set this option to disable this static route without removing it from the " +"list." +msgstr "リストã€ã‹ã‚‰å‰Šé™¤ã›ãšã«ã€ã“ã®ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã€ 。" + +#: usr/local/www/pkg_mgr.php:185 usr/local/www/pkg_mgr_installed.php:178 +#: usr/local/www/pkg_mgr_installed.php:180 usr/local/www/pkg_mgr.php:188 +#: usr/local/www/pkg_mgr_installed.php:180 usr/local/www/pkg_mgr.php:205 +msgid "Package info" +msgstr "パッケージ情報" + +#: usr/local/www/pkg_mgr.php:189 usr/local/www/pkg_mgr_installed.php:182 +#: usr/local/www/pkg_mgr_installed.php:184 usr/local/www/pkg_mgr.php:192 +#: usr/local/www/pkg_mgr_installed.php:184 usr/local/www/pkg_mgr.php:208 +msgid "No package info, check the forum" +msgstr "ã„ã„ãˆãƒ‘ッケージ情報ã¯ã€ãƒ•ォーラムをãƒã‚§ãƒƒã‚¯ã—ã¦ã„ã¾ã›ã‚“" + +#: usr/local/www/pkg_mgr.php:193 +msgid "Click on package name to access it's website." +msgstr "ãれã¯ã€ã‚¦ã‚§ãƒ–サイトã®ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ã€ãƒ‘ッケージåをクリックã—ã¾ã™ã€‚" + +#: usr/local/www/pkg_mgr.php:217 usr/local/www/pkg_mgr.php:220 +#: usr/local/www/pkg_mgr.php:223 +msgid "Click " +msgstr "クリック" + +#: usr/local/www/pkg_mgr.php:232 usr/local/www/pkg_mgr_installed.php:199 +#: usr/local/www/pkg_mgr_installed.php:201 usr/local/www/pkg_mgr.php:235 +#: usr/local/www/pkg_mgr_installed.php:201 usr/local/www/pkg_mgr.php:239 +msgid "Click package info for more details about " +msgstr "ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ãƒ‘ッケージ情報]をクリックã—ã¾ã™ " + +#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240 +#: usr/local/www/pkg_mgr.php:243 usr/local/www/pkg_mgr.php:247 +msgid "Do you really want to install " +msgstr "ã‚ãªãŸãŒæœ¬å½“ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã‹" + +#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240 +#: usr/local/www/pkg_mgr.php:243 usr/local/www/pkg_mgr.php:247 +msgid "Install " +msgstr "インストール" + +#: usr/local/www/services_unbound_acls.php:57 +msgid "Access List successfully deleted" +msgstr "正常ã«å‰Šé™¤ã‚¢ã‚¯ã‚»ã‚¹ãƒªã‚¹ãƒˆ" + +#: usr/local/www/services_unbound_acls.php:173 +msgid "" +"The settings for the DNS Resolver have changed. You must apply the " +"configuration to take affect." +msgstr "「 DNSリゾルãƒã®è¨­å®šãŒå¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚ã‚ãªãŸãŒé©ç”¨ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“"有効ã«ã™ã‚‹ã«è¨­å®šã‚’。" + +#: usr/local/www/services_unbound_acls.php:181 +msgid "General Settings" +msgstr "一般設定" + +#: usr/local/www/services_unbound_acls.php:182 +#: usr/local/www/services_unbound.php:137 +#: usr/local/www/services_unbound_advanced.php:124 +msgid "Advanced settings" +msgstr "[詳細設定]" + +#: usr/local/www/services_unbound_acls.php:183 +#: usr/local/www/services_unbound.php:138 +#: usr/local/www/services_unbound_advanced.php:125 +msgid "Access Lists" +msgstr "アクセスリスト" + +#: usr/local/www/services_unbound_acls.php:200 +#, php-format +msgid "%s Access List" +msgstr "%sアクセスリスト" + +#: usr/local/www/services_unbound_acls.php:203 +msgid "Access List name" +msgstr "アクセスリストå" + +#: usr/local/www/services_unbound_acls.php:207 +msgid "Provide an Access List name." +msgstr "アクセスリストåを指定ã—ã¾ã™ã€‚" + +#: usr/local/www/services_unbound_acls.php:222 +msgid "" +"Choose what to do with DNS requests that match the criteria specified below." +msgstr "ã€Œä¸‹ã®æŒ‡å®šã•ã‚ŒãŸæ¡ä»¶ã«ä¸€è‡´ã™ã‚‹DNSè¦æ±‚ã‚’ã©ã†ã™ã‚‹ã‹ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/services_unbound_acls.php:223 +msgid "" +"Deny: This action stops queries from hosts within the netblock " +"defined below." +msgstr "「拒å¦u003cbu003eキーワード: u003c/ B u003eã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ãƒãƒƒãƒˆãƒ–ロック内ã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®ã‚¯ã‚¨ãƒªã‚’åœæ­¢ã—ã€ã€Œä»¥ä¸‹ã«å®šç¾©ã™ã‚‹ã€‚" + +#: usr/local/www/services_unbound_acls.php:224 +msgid "" +"Refuse: This action also stops queries from hosts within the netblock " +"defined below, but sends a DNS rcode REFUSED error message back to the " +"client." +msgstr "「拒å¦u003cbu003eキーワード: u003c/ B u003eã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«ã¯ã€ãƒãƒƒãƒˆãƒ–ロック内ã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®ã‚¯ã‚¨ãƒªã‚’åœæ­¢ã—ã€ã€Œä»¥ä¸‹ã«å®šç¾©ã—ã¾ã™ãŒã€ DNSã®RCODEãŒæˆ»ã£ã¦ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒæ‹’å¦é€ä¿¡ã—ã¾ã™ã€‚" + +#: usr/local/www/services_unbound_acls.php:225 +msgid "" +"Allow: This action allows queries from hosts within the netblock " +"defined below." +msgstr "「許å¯u003cbu003eキーワード: u003c/ B u003eã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ãƒãƒƒãƒˆãƒ–ロック内ã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®ç…§ä¼šãŒã§ãã¾ã™ã€ä»¥ä¸‹ã«å®šç¾©ã€‚" + +#: usr/local/www/services_unbound_acls.php:226 +msgid "" +"Allow Snoop: This action allows recursive and nonrecursive access " +"from hosts within the netblock defined below. Used for cache snooping and " +"ideally should only be configured for your administrative host." +msgstr "「許å¯u003cbu003eキーワードã®ã‚¹ãƒŒãƒ¼ãƒ—: u003c/ B u003eã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€å†å¸°ã¨éžå†å¸°ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã«ã™ã‚‹ã€ä»¥ä¸‹ã«å®šç¾©ãƒãƒƒãƒˆãƒ–ロック内ã®ãƒ›ã‚¹ãƒˆã‚’購入ã™ã‚‹ã€‚キャッシュスヌーピングã®ãŸã‚ã«ä½¿ç”¨ã—ã€ ã€Œç†æƒ³çš„ã«ã®ã¿ç®¡ç†è€…ã®ãƒ›ã‚¹ãƒˆç”¨ã«æ§‹æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_unbound_acls.php:231 +msgid "Networks" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹" + +#: usr/local/www/services_unbound_acls.php:317 +msgid "Access List Name" +msgstr "アクセスリストå" + +#: usr/local/www/services_unbound_acls.php:340 +msgid "edit access list" +msgstr "編集アクセスリスト" + +#: usr/local/www/services_unbound_acls.php:343 +msgid "Do you really want to delete this access list?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒªã‚¹ãƒˆã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/services_unbound_acls.php:344 +msgid "delete access list" +msgstr "アクセスリストを削除ã™ã‚‹" + +#: usr/local/www/services_unbound_acls.php:357 +msgid "Add new Access List" +msgstr "æ–°ã—ã„アクセスリストを追加" + +#: usr/local/www/services_unbound_acls.php:364 +msgid "Access Lists to control access to the DNS Resolver can be defined here." +msgstr "DNSリゾルãƒã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制御ã™ã‚‹ã‚¢ã‚¯ã‚»ã‚¹ãƒªã‚¹ãƒˆã¯ã€ã“ã“ã§å®šç¾©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/diag_logs_settings.php:86 +#: usr/local/www/diag_logs_settings.php:87 +#: usr/local/www/diag_logs_settings.php:87 +msgid "" +"A valid IP address/hosname or IP/hostname:port must be specified for remote " +"syslog server #1." +msgstr "syslogサーãƒï¼š 「有効ãªIPアドレス/ hosnameã¾ãŸã¯IP /ホストåã€ãƒãƒ¼ãƒˆã€ãƒªãƒ¢ãƒ¼ãƒˆã®ãŸã‚ã«æŒ‡å®šã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã€" + +#: usr/local/www/diag_logs_settings.php:89 +#: usr/local/www/diag_logs_settings.php:90 +#: usr/local/www/diag_logs_settings.php:90 +msgid "" +"A valid IP address/hosname or IP/hostname:port must be specified for remote " +"syslog server #2." +msgstr "syslogサーãƒï¼š 「有効ãªIPアドレス/ hosnameã¾ãŸã¯IP /ホストåã€ãƒãƒ¼ãƒˆã€ãƒªãƒ¢ãƒ¼ãƒˆã®ãŸã‚ã«æŒ‡å®šã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã€" + +#: usr/local/www/diag_logs_settings.php:92 +#: usr/local/www/diag_logs_settings.php:93 +#: usr/local/www/diag_logs_settings.php:93 +msgid "" +"A valid IP address/hosname or IP/hostname:port must be specified for remote " +"syslog server #3." +msgstr "syslogサーãƒï¼š 「有効ãªIPアドレス/ hosnameã¾ãŸã¯IP /ホストåã€ãƒãƒ¼ãƒˆã€ãƒªãƒ¢ãƒ¼ãƒˆã®ãŸã‚ã«æŒ‡å®šã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã€" + +#: usr/local/www/diag_logs_settings.php:234 +#: usr/local/www/diag_logs_settings.php:241 +#: usr/local/www/diag_logs_settings.php:241 +msgid "General Logging Options" +msgstr "一般的ãªãƒ­ã‚°ã‚ªãƒ—ション" + +#: usr/local/www/diag_logs_settings.php:245 +#: usr/local/www/diag_logs_settings.php:252 +#: usr/local/www/diag_logs_settings.php:252 +msgid "" +"Hint: This is only the number of log entries displayed in the GUI. It does " +"not affect how many entries are contained in the actual log files." +msgstr ""ヒント:ã“れã¯ã€ GUIã«è¡¨ç¤ºã™ã‚‹ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã®æ•°ã ã‘ã§ãれãŒãªã„。 ã€ã¯ã€å®Ÿéš›ã®ãƒ­ã‚°ãƒ•ァイルã«å«ã¾ã‚Œã¦ã„ã‚‹ã‚¨ãƒ³ãƒˆãƒªã®æ•°ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“。" + +#: usr/local/www/diag_logs_settings.php:251 +#: usr/local/www/diag_logs_settings.php:258 +#: usr/local/www/diag_logs_settings.php:258 +msgid "" +"Hint: packets that are blocked by the implicit default block rule will not " +"be logged if you uncheck this option. Per-rule logging options are still " +"respected." +msgstr ""ヒント:暗黙ã®ãƒ‡ãƒ•ォルトã®ãƒ–ロックルールã«ã‚ˆã£ã¦ãƒ–ロックã•れãŸãƒ‘ケットãŒãªã„ã€ã“ã®ã‚ªãƒ—ションをオフã«ã—ãŸå ´åˆè¨˜éŒ²ã•れる。ルールã”ã¨ã®ãƒ­ã‚°è¨˜éŒ²ã‚ªãƒ—ションã¯ã€ä¾ç„¶ã¨ã—ã¦ã€Œå°Šé‡ã•れã¦ã„る。" + +#: usr/local/www/diag_logs_settings.php:259 +#: usr/local/www/diag_logs_settings.php:266 +#: usr/local/www/diag_logs_settings.php:266 +msgid "" +"Hint: If this is checked, filter logs are shown as generated by the packet " +"filter, without any formatting. This will reveal more detailed information, " +"but it is more difficult to read." +msgstr ""ヒント:ã“れをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ãƒ‘ケットã«ã‚ˆã£ã¦ç”Ÿæˆã•れるよã†ã«ã€ãƒ•ィルタログãŒè¡¨ç¤ºã•れã¾ã™"をフォーマットã›ãšã«ã€ãƒ•ィルタ。ã“れã¯ã€ã‚ˆã‚Šè©³ç´°ãªæƒ…報を明らã‹ã«ã™ã‚‹ã€ãŒã€ãれã¯èª­ã‚€ã“ã¨ãŒå›°é›£ã§ã‚る。" + +#: usr/local/www/diag_logs_settings.php:265 +#: usr/local/www/diag_logs_settings.php:285 +#: usr/local/www/diag_logs_settings.php:285 +msgid "Disable writing log files to the local disk" +msgstr "ローカルディスクã¸ã®æ›¸ãè¾¼ã¿ã®ãƒ­ã‚°ãƒ•ァイルを無効ã«ã™ã‚‹" + +#: usr/local/www/diag_logs_settings.php:274 +#: usr/local/www/diag_logs_settings.php:294 +#: usr/local/www/diag_logs_settings.php:294 +msgid "Remote Logging Options" +msgstr "リモートロギングオプション" + +#: usr/local/www/diag_logs_settings.php:277 +#: usr/local/www/diag_logs_settings.php:297 +#: usr/local/www/diag_logs_settings.php:297 +msgid "Enable Remote Logging" +msgstr "リモートロギングを有効ã«ã™ã‚‹" + +#: usr/local/www/diag_logs_settings.php:279 +#: usr/local/www/diag_logs_settings.php:299 +#: usr/local/www/diag_logs_settings.php:299 +msgid "Send log messages to remote syslog server" +msgstr "リモートsyslogサーãƒã«ãƒ­ã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡" + +#: usr/local/www/diag_logs_settings.php:282 +#: usr/local/www/diag_logs_settings.php:302 +#: usr/local/www/diag_logs_settings.php:302 +msgid "Remote Syslog Servers" +msgstr "リモートsyslogサーãƒ" + +#: usr/local/www/diag_logs_settings.php:299 +#: usr/local/www/diag_logs_settings.php:319 +#: usr/local/www/diag_logs_settings.php:319 +msgid "IP addresses of remote syslog servers, or an IP:port." +msgstr "リモートsyslogサーãƒã€ã¾ãŸã¯IPã®IPアドレス:ãƒãƒ¼ãƒˆã€‚" + +#: usr/local/www/diag_logs_settings.php:304 +#: usr/local/www/diag_logs_settings.php:324 +#: usr/local/www/diag_logs_settings.php:324 +msgid "Remote Syslog Contents" +msgstr "リモートsyslogã®å†…容" + +#: usr/local/www/diag_logs_settings.php:334 +#: usr/local/www/diag_logs_settings.php:354 +#: usr/local/www/diag_logs_settings.php:354 +msgid "" +"syslog sends UDP datagrams to port 514 on the specified remote syslog " +"server, unless another port is specified. Be sure to set syslogd on the " +"remote server to accept syslog messages from" +msgstr "別ã®ãƒãƒ¼ãƒˆã‚’指定ã—ãªã„é™ã‚Šã€ã‚µãƒ¼ãƒã€Œ syslogãŒæŒ‡å®šã•れãŸãƒªãƒ¢ãƒ¼ãƒˆã®syslogã®ãƒãƒ¼ãƒˆ514ã«UDPデータグラムをé€ä¿¡ã—ã¾ã™ã€ 。ã‹ã‚‰ã®syslogメッセージをå—ã‘入れるãŸã‚ã«ã€Œãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ¼ãƒä¸Šã®syslogd設定ã—ã¦ãã ã•ã„" + +#: usr/local/www/system_gateway_groups_edit.php:229 +#: usr/local/www/system_gateway_groups_edit.php:289 +#: usr/local/www/system_gateway_groups_edit.php:293 +#: usr/local/www/system_gateway_groups_edit.php:293 +msgid "Interface Address" +msgstr "インターフェース·アドレス" + +#: usr/local/www/system_gateway_groups_edit.php:253 +#: usr/local/www/system_gateway_groups_edit.php:313 +msgid "" +"The virtual IP field selects what (virtual) IP should be used when this " +"group applies to a local Dyndns, IPsec or openvpn endpoint" +msgstr "グループローカルDynDNSã®ã€ IPsecã‚„OpenVPNã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã«é©ç”¨ã•れã€ã€Œä»®æƒ³IPフィールドã¯ã€ã“れãŒã¨ã(仮想) IPãŒä½¿ç”¨ã™ã¹ãã‹é¸æŠž"" + +#: usr/local/www/services_dyndns_edit.php:102 +#: usr/local/www/services_dyndns_edit.php:322 +#: usr/local/www/services_dyndns_edit.php:326 +#: usr/local/www/services_dyndns_edit.php:103 +#: usr/local/www/services_dyndns_edit.php:334 +#: usr/local/www/services_dyndns_edit.php:103 +#: usr/local/www/services_dyndns_edit.php:334 +msgid "Update URL" +msgstr "æ›´æ–°URL" + +#: usr/local/www/services_dyndns_edit.php:254 +#: usr/local/www/services_dyndns_edit.php:258 +#: usr/local/www/services_dyndns_edit.php:260 +#: usr/local/www/services_dyndns_edit.php:260 +msgid "Interface to send update from" +msgstr "ã‹ã‚‰æ›´æ–°ã‚’é€ä¿¡ã™ã‚‹ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ•ェース" + +#: usr/local/www/services_dyndns_edit.php:262 +#: usr/local/www/services_dyndns_edit.php:266 +#: usr/local/www/services_dyndns_edit.php:268 +#: usr/local/www/services_dyndns_edit.php:268 +msgid "Note: This is almost always the same as the Interface to Monitor." +msgstr "注æ„:ã“れã¯ã»ã¨ã‚“ã©ã®å ´åˆã€ãƒ¢ãƒ‹ã‚¿ãƒ¼ã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã¨åŒã˜ã§ã™ã€‚" + +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:303 +#: usr/local/www/services_dyndns_edit.php:311 +#: usr/local/www/services_dyndns_edit.php:311 +msgid "" +"Username is required for all types except Namecheap, FreeDNS and Custom " +"Entries." +msgstr "エントリ"ユーザーåã¯Namecheap 〠FreeDNSã¨ã‚«ã‚¹ã‚¿ãƒ ã‚’除ãã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ—ã®ãŸã‚ã«å¿…è¦ã¨ã•れる〠。" + +#: usr/local/www/services_dyndns_edit.php:300 +#: usr/local/www/services_dyndns_edit.php:304 +#: usr/local/www/services_dyndns_edit.php:312 +#: usr/local/www/services_dyndns_edit.php:312 +msgid "Route 53: Enter your Access Key ID." +msgstr "ルート53 :ã‚ãªãŸã®ã‚¢ã‚¯ã‚»ã‚¹ã‚­ãƒ¼IDを入力ã—ã¾ã™ã€‚" + +#: usr/local/www/services_dyndns_edit.php:301 +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/services_dyndns_edit.php:313 +#: usr/local/www/services_dyndns_edit.php:313 +msgid "" +"For Custom Entries, Username and Password represent HTTP Authentication " +"username and passwords." +msgstr "ユーザåã¨ãƒ‘スワードã®ã€Œã‚«ã‚¹ã‚¿ãƒ ã‚¨ãƒ³ãƒˆãƒªã®å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードã¯HTTPèªè¨¼ã‚’表ã™"。" + +#: usr/local/www/services_dyndns_edit.php:310 +#: usr/local/www/services_dyndns_edit.php:314 +#: usr/local/www/services_dyndns_edit.php:322 +#: usr/local/www/services_dyndns_edit.php:322 +msgid "Route 53: Enter your Secret Access Key." +msgstr "ルート53 :ã‚ãªãŸã®ç§˜å¯†ã‚¢ã‚¯ã‚»ã‚¹ã‚­ãƒ¼ã‚’入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/services_dyndns_edit.php:315 +#: usr/local/www/services_dyndns_edit.php:319 +#: usr/local/www/services_dyndns_edit.php:327 +#: usr/local/www/services_dyndns_edit.php:327 +msgid "Zone ID" +msgstr "ゾーンID" + +#: usr/local/www/services_dyndns_edit.php:318 +#: usr/local/www/services_dyndns_edit.php:322 +#: usr/local/www/services_dyndns_edit.php:330 +#: usr/local/www/services_dyndns_edit.php:330 +msgid "" +"Enter Zone ID that you received when you created your domain in Route 53." +msgstr ""ã‚ãªãŸã¯ãƒ«ãƒ¼ãƒˆ53ã«ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’作æˆã—ãŸã¨ãã«å—ã‘å–ã£ãŸã‚¾ãƒ¼ãƒ³IDを入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/services_dyndns_edit.php:325 +#: usr/local/www/services_dyndns_edit.php:329 +#: usr/local/www/services_dyndns_edit.php:337 +#: usr/local/www/services_dyndns_edit.php:337 +msgid "" +"This is the only field required by for Custom Dynamic DNS, and is only used " +"by Custom Entries." +msgstr "「ã“れã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNS用ãŒå¿…è¦ã¨ã™ã‚‹å”¯ä¸€ã®ãƒ•ィールドã§ã‚りã€å”¯ä¸€ä½¿ç”¨ã•れã¦ã„る「カスタムエントリã«ã‚ˆã£ã¦ã€‚" + +#: usr/local/www/services_dyndns_edit.php:327 +#: usr/local/www/services_dyndns_edit.php:338 +#: usr/local/www/services_dyndns_edit.php:331 +#: usr/local/www/services_dyndns_edit.php:342 +#: usr/local/www/services_dyndns_edit.php:339 +#: usr/local/www/services_dyndns_edit.php:350 +#: usr/local/www/services_dyndns_edit.php:339 +#: usr/local/www/services_dyndns_edit.php:350 +msgid "" +"If you need the new IP to be included in the request, put %IP% in its place." +msgstr "「ã‚ãªãŸã¯ã€è¦æ±‚ã«å«ã¾ã‚Œã‚‹ã‚ˆã†ã«æ–°ã—ã„IPãŒå¿…è¦ãªå ´åˆã¯ã€ãã®å ´æ‰€ã§ï¼…ã®IP ï¼…ã‚’ç½®ã。" + +#: usr/local/www/services_dyndns_edit.php:331 +#: usr/local/www/services_dyndns_edit.php:335 +#: usr/local/www/services_dyndns_edit.php:343 +#: usr/local/www/services_dyndns_edit.php:343 +msgid "Result Match" +msgstr "çµæžœãƒžãƒƒãƒ" + +#: usr/local/www/services_dyndns_edit.php:334 +#: usr/local/www/services_dyndns_edit.php:338 +#: usr/local/www/services_dyndns_edit.php:346 +#: usr/local/www/services_dyndns_edit.php:346 +msgid "This field is only used by Custom Dynamic DNS Entries." +msgstr "ã“ã®ãƒ•ィールドã¯ã€ã‚«ã‚¹ã‚¿ãƒ Â·ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNSã®ã‚¨ãƒ³ãƒˆãƒªã§ä½¿ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/services_dyndns_edit.php:336 +#: usr/local/www/services_dyndns_edit.php:340 +#: usr/local/www/services_dyndns_edit.php:348 +#: usr/local/www/services_dyndns_edit.php:348 +msgid "" +"This field should be identical to what your DDNS Provider will return if the " +"update succeeds, leave it blank to disable checking of returned results." +msgstr "æ›´æ–°æˆåŠŸã€è¿”ã•ã‚Œã‚‹çµæžœã®ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ç©ºç™½ã®ã¾ã¾"ã“ã®ãƒ•ィールドã«ã¯ã€ DDNSプロãƒã‚¤ãƒ€ã®å ´åˆã«è¿”ã•れるã‹ã¨åŒä¸€ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/services_dyndns_edit.php:340 +#: usr/local/www/services_dyndns_edit.php:344 +#: usr/local/www/services_dyndns_edit.php:352 +#: usr/local/www/services_dyndns_edit.php:352 +msgid "" +"If you need to include multiple possible values, sperate them with a |. If " +"your provider includes a |, escape it with |" +msgstr "「ã‚ãªãŸã¯ã€è¤‡æ•°ã®å¯èƒ½ãªå€¤ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ãれらをsperate | 。場åˆã¯"| ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—プロãƒã‚¤ãƒ€ãŒå«ã¾ã‚Œã¦ã„|" + +#: usr/local/www/services_dyndns_edit.php:342 +#: usr/local/www/services_dyndns_edit.php:346 +#: usr/local/www/services_dyndns_edit.php:354 +#: usr/local/www/services_dyndns_edit.php:354 +msgid "" +"Tabs (t), newlines (\n) and carriage returns (r) at the beginning or " +"end of the returned results are removed before comparison." +msgstr "è¿”ã•ã‚Œã‚‹çµæžœã®æœ«å°¾ã€Œæœ€åˆã‹ã®ã‚¿ãƒ–( t)ã¯ã€æ”¹è¡Œï¼ˆ \n )ã¨ã‚­ãƒ£ãƒªãƒƒã‚¸ãƒªã‚¿ãƒ¼ãƒ³ï¼ˆ r)ã¯ã€Œæ¯”較ã®å‰ã«å‰Šé™¤ã•れã¾ã™ã€‚" + +#: usr/local/www/services_dyndns_edit.php:351 +#: usr/local/www/services_dyndns_edit.php:355 +#: usr/local/www/services_dyndns_edit.php:363 +#: usr/local/www/services_dyndns_edit.php:363 +msgid "Choose TTL for your dns record." +msgstr "ã‚ãªãŸã®DNSレコードã®TTLã‚’é¸æŠžã—ã¦ãã ã•ã„。" + +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/services_dyndns_edit.php:374 +#: usr/local/www/services_dyndns_edit.php:382 +#: usr/local/www/services_dyndns_edit.php:382 +msgid "Save & Force Update" +msgstr "ä¿å­˜ã—ã¦å¼·åˆ¶ã‚¢ãƒƒãƒ—デート" + +#: usr/local/www/fbegin.inc:102 usr/local/www/fbegin.inc:111 +#: usr/local/www/fbegin.inc:103 usr/local/www/fbegin.inc:103 +msgid "High Avail. Sync" +msgstr "é«˜ç©ºãæœ‰ã‚ŠåŒæœŸã™ã‚‹" + +#: usr/local/www/services_dnsmasq_edit.php:119 +#: usr/local/www/services_dnsmasq_edit.php:119 +msgid "Alias Domain" +msgstr "エイリアスドメイン" + +#: usr/local/www/services_dnsmasq_edit.php:124 +#: usr/local/www/services_dnsmasq_edit.php:124 +msgid "" +"Hostnames in alias list can only contain the characters A-Z, 0-9 and '-'." +msgstr "' -' "エイリアスリスト内ã®ãƒ›ã‚¹ãƒˆåã¯æ–‡å­—ã ã‘ã€A〜Zã€0〜9ã¨ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/services_dnsmasq_edit.php:127 +msgid "A valid domain must be specified in alias list." +msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³ã¯ã€åˆ¥åãƒªã‚¹ãƒˆã§æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dnsmasq_edit.php:232 +#: usr/local/www/services_dnsmasq_edit.php:233 +#: usr/local/www/services_dnsmasq_edit.php:233 +msgid "Enter additional names for this host." +msgstr "ã“ã®ãƒ›ã‚¹ãƒˆã®è¿½åŠ ã®åå‰ã‚’入力ã—ã¾ã™ã€‚" + +#: usr/local/www/pkg.php:238 usr/local/www/pkg.php:186 +#: usr/local/www/pkg.php:186 +msgid "Saving changes..." +msgstr "変更をä¿å­˜..." + +#: usr/local/www/pkg.php:239 usr/local/www/pkg.php:187 +#: usr/local/www/pkg.php:187 +msgid "Do you really want to save changes?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€å¤‰æ›´ã‚’ä¿å­˜ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/status_interfaces.php:196 +#: usr/local/www/status_interfaces.php:199 +#: usr/local/www/status_interfaces.php:199 +msgid "Cell Signal (RSSI)" +msgstr "細胞シグナル( RSSI )" + +#: usr/local/www/status_interfaces.php:203 +#: usr/local/www/status_interfaces.php:206 +#: usr/local/www/status_interfaces.php:206 +msgid "Cell Mode" +msgstr "セルモード" + +#: usr/local/www/status_interfaces.php:210 +#: usr/local/www/status_interfaces.php:213 +#: usr/local/www/status_interfaces.php:213 +msgid "Cell SIM State" +msgstr "セルã®SIM状態" + +#: usr/local/www/status_interfaces.php:217 +#: usr/local/www/status_interfaces.php:220 +#: usr/local/www/status_interfaces.php:220 +msgid "Cell Service" +msgstr "セルサービス" + +#: usr/local/www/status_interfaces.php:224 +#: usr/local/www/status_interfaces.php:227 +#: usr/local/www/status_interfaces.php:227 +msgid "Cell Upstream" +msgstr "セル上æµ" + +#: usr/local/www/status_interfaces.php:231 +#: usr/local/www/status_interfaces.php:234 +#: usr/local/www/status_interfaces.php:234 +msgid "Cell Downstream" +msgstr "セルダウンストリーム" + +#: usr/local/www/status_interfaces.php:238 +#: usr/local/www/status_interfaces.php:241 +#: usr/local/www/status_interfaces.php:241 +msgid "Cell Current Up" +msgstr "セル電æµã‚¢ãƒƒãƒ—" + +#: usr/local/www/status_interfaces.php:245 +#: usr/local/www/status_interfaces.php:248 +#: usr/local/www/status_interfaces.php:248 +msgid "Cell Current Down" +msgstr "セル電æµãƒ€ã‚¦ãƒ³" + +#: usr/local/www/status_interfaces.php:289 +#: usr/local/www/status_interfaces.php:292 +#: usr/local/www/status_interfaces.php:292 +msgid "IPv6 Link Local" +msgstr "IPv6ã®ãƒªãƒ³ã‚¯ãƒ­ãƒ¼ã‚«ãƒ«" + +#: usr/local/www/status_interfaces.php:339 +#: usr/local/www/status_interfaces.php:342 +#: usr/local/www/status_interfaces.php:342 +msgid "LAGG Protocol" +msgstr "LAGGプロトコル" + +#: usr/local/www/status_interfaces.php:346 +#: usr/local/www/status_interfaces.php:349 +#: usr/local/www/status_interfaces.php:349 +msgid "LAGG Ports" +msgstr "LAGGãƒãƒ¼ãƒˆ" + +#: usr/local/www/diag_defaults.php:51 usr/local/www/diag_defaults.php:61 +#: usr/local/www/diag_defaults.php:61 +msgid "" +"The system has been reset to factory defaults and is now rebooting. This may " +"take a few minutes, depending on your hardware." +msgstr "「システムã¯å·¥å ´å‡ºè·æ™‚ã®è¨­å®šã«ãƒªã‚»ãƒƒãƒˆã•れã€ç¾åœ¨ã€å†èµ·å‹•ã•れã¦ã„る。ã“れã¯å¯èƒ½æ€§ã€ã¯ã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã«å¿œã˜ã¦ã€æ•°åˆ†ã‹ã‹ã‚‹ã€‚" + +#: usr/local/www/carp_status.php:196 usr/local/www/carp_status.php:189 +#: usr/local/www/carp_status.php:189 +msgid "You can configure high availability sync settings" +msgstr "ã‚ãªãŸã¯ã€é«˜å¯ç”¨æ€§åŒæœŸè¨­å®šã‚’行ã†ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/load_balancer_setting.php:69 +#: usr/local/www/load_balancer_setting.php:69 +msgid "Timeout must be a numeric value" +msgstr "ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯æ•°å€¤ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/load_balancer_setting.php:73 +#: usr/local/www/load_balancer_setting.php:73 +msgid "Interval must be a numeric value" +msgstr "é–“éš”ã¯æ•°å€¤ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/load_balancer_setting.php:78 +#: usr/local/www/load_balancer_setting.php:78 +msgid "Prefork must be a numeric value" +msgstr "preforkã®ã¯ã€æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: usr/local/www/load_balancer_setting.php:81 +#: usr/local/www/load_balancer_setting.php:81 +msgid "Prefork value must be between 1 and 32" +msgstr "preforkã®å€¤ã¯1ã¨32ã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" + +#: usr/local/www/load_balancer_setting.php:132 +#: usr/local/www/load_balancer_setting.php:131 +#: usr/local/www/load_balancer_setting.php:131 +msgid "Relayd global settings" +msgstr "Relaydグローãƒãƒ«è¨­å®š" + +#: usr/local/www/load_balancer_setting.php:135 +#: usr/local/www/load_balancer_setting.php:134 +#: usr/local/www/load_balancer_setting.php:134 +msgid "timeout" +msgstr "タイムアウト" + +#: usr/local/www/load_balancer_setting.php:139 +#: usr/local/www/load_balancer_setting.php:138 +#: usr/local/www/load_balancer_setting.php:138 +msgid "" +"Set the global timeout in milliseconds for checks. Leave blank to use the " +"default value of 1000 ms " +msgstr "「ãƒã‚§ãƒƒã‚¯ã®ãŸã‚ã®ãƒŸãƒªç§’å˜ä½ã§ã‚°ãƒ­ãƒ¼ãƒãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’設定ã—ã¾ã™ã€‚使用ã™ã‚‹ã«ã¯ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€ 1000å¹´ã€MSã®ãƒ‡ãƒ•ォルト値を" + +#: usr/local/www/load_balancer_setting.php:143 +#: usr/local/www/load_balancer_setting.php:142 +#: usr/local/www/load_balancer_setting.php:142 +msgid "interval" +msgstr "インターãƒãƒ«" + +#: usr/local/www/load_balancer_setting.php:147 +#: usr/local/www/load_balancer_setting.php:146 +#: usr/local/www/load_balancer_setting.php:146 +msgid "" +"Set the interval in seconds at which the member of a pool will be checked. " +"Leave blank to use the default interval of 10 seconds" +msgstr "「プールã®ãƒ¡ãƒ³ãƒãƒ¼ãŒãƒã‚§ãƒƒã‚¯ã•れる間隔を秒å˜ä½ã§è¨­å®šã—ã¾ã™ã€‚ "10ç§’ã®ãƒ‡ãƒ•ォルト間隔を使用ã™ã‚‹ã«ã¯ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™" + +#: usr/local/www/load_balancer_setting.php:151 +#: usr/local/www/load_balancer_setting.php:150 +#: usr/local/www/load_balancer_setting.php:150 +msgid "prefork" +msgstr "preforkã®" + +#: usr/local/www/load_balancer_setting.php:155 +#: usr/local/www/load_balancer_setting.php:154 +#: usr/local/www/load_balancer_setting.php:154 +msgid "" +"Number of processes used by relayd. Leave blank to use the default value of " +"5 processes" +msgstr "5プロセス〠relaydãŒä½¿ç”¨ã™ã‚‹ãƒ—ãƒ­ã‚»ã‚¹ã®æ•°ã¯ã€ãƒ‡ãƒ•ォルト値を使用ã™ã‚‹ã«ã¯ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€" + +#: usr/local/www/services_dhcp_relay.php:80 +#: usr/local/www/services_dhcp_relay.php:80 +msgid "A valid Destination Server IP address must be specified." +msgstr "有効ãªå®›å…ˆã‚µãƒ¼ãƒã®IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/diag_ipsec.php:65 usr/local/www/diag_ipsec.php:66 +#: usr/local/www/diag_ipsec.php:68 usr/local/www/diag_ipsec.php:68 +msgid "Disconnected user" +msgstr "切断ã•れãŸãƒ¦ãƒ¼ã‚¶" + +#: usr/local/www/diag_ipsec.php:192 usr/local/www/diag_ipsec.php:193 +#: usr/local/www/diag_ipsec.php:194 usr/local/www/diag_ipsec.php:194 +msgid "Mobile User" +msgstr "モãƒã‚¤ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼" + +#: usr/local/www/diag_ipsec.php:193 usr/local/www/diag_ipsec.php:194 +#: usr/local/www/diag_ipsec.php:195 usr/local/www/diag_ipsec.php:195 +msgid "Login Time" +msgstr "ログイン時刻" + +#: usr/local/www/diag_ipsec.php:195 usr/local/www/diag_ipsec.php:196 +#: usr/local/www/diag_ipsec.php:197 usr/local/www/diag_ipsec.php:197 +msgid "Remote" +msgstr "リモート" + +#: usr/local/www/diag_ipsec.php:223 usr/local/www/diag_ipsec.php:224 +#: usr/local/www/diag_ipsec.php:225 usr/local/www/diag_ipsec.php:225 +msgid "You can configure IPsec" +msgstr "ã‚ãªãŸã¯ã€IPsecã‚’æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/system_certmanager.php:207 +#: usr/local/www/system_certmanager.php:681 +#: usr/local/www/system_certmanager.php:210 +#: usr/local/www/system_certmanager.php:706 +#: usr/local/www/system_certmanager.php:707 +#: usr/local/www/system_certmanager.php:210 +#: usr/local/www/system_certmanager.php:707 +msgid "Certificate Type" +msgstr "証明書ã®ç¨®é¡ž" + +#: usr/local/www/system_certmanager.php:694 +#: usr/local/www/system_certmanager.php:719 +#: usr/local/www/system_certmanager.php:720 +#: usr/local/www/system_certmanager.php:720 +msgid "" +"Type of certificate to generate. Used for placing restrictions on the usage " +"of the generated certificate." +msgstr "ã€ã‚’生æˆã™ã‚‹è¨¼æ˜Žæ›¸ã®ç¨®é¡žã€‚使用方法ã«åˆ¶é™ã‚’é…ç½®ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる「生æˆã•れãŸè¨¼æ˜Žæ›¸ã®ã€‚" + +#: usr/local/www/system_certmanager.php:757 +#: usr/local/www/system_certmanager.php:782 +#: usr/local/www/system_certmanager.php:783 +#: usr/local/www/system_certmanager.php:783 +msgid "Alternative Names" +msgstr "代替å" + +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1112 +#: usr/local/www/system_certmanager.php:1168 +#: usr/local/www/system_certmanager.php:1172 +#: usr/local/www/system_certmanager.php:1172 +msgid "export cert+key in .p12" +msgstr "。 P12ã®è¼¸å‡ºè¨¼æ˜Žæ›¸ã®ã‚­ãƒ¼" + +#: usr/local/www/diag_backup.php:192 usr/local/www/diag_backup.php:192 +msgid "RRD Data" +msgstr "RRDデータ" + +#: usr/local/www/firewall_rules_edit.php:224 +#: usr/local/www/firewall_rules_edit.php:237 +#: usr/local/www/firewall_rules_edit.php:222 +#: usr/local/www/firewall_rules_edit.php:236 +#: usr/local/www/firewall_rules_edit.php:219 +#: usr/local/www/firewall_rules_edit.php:233 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:239 +msgid "You can not assign a gateway to a rule that applies to IPv4 and IPv6" +msgstr "ã‚ãªãŸã¯ã€IPv4ãŠã‚ˆã³IPv6ã«é©ç”¨ã™ã‚‹ãƒ«ãƒ¼ãƒ«ã¸ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/firewall_rules_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:248 +#: usr/local/www/firewall_rules_edit.php:245 +#: usr/local/www/firewall_rules_edit.php:251 +#: usr/local/www/firewall_rules_edit.php:251 +msgid "" +"You can not assign a protocol other then ICMP, TCP, UDP or TCP/UDP to a rule " +"that applies to IPv4 and IPv6" +msgstr "「ã‚ãªãŸã¯ã€ä»–ã®ãƒ—ロトコルを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“è¦å‰‡ã€ãã®å¾ŒICMPã€TCP 〠UDPã¾ãŸã¯TCP / UDP 〠IPv4ãŠã‚ˆã³IPv6ã«ã‚‚é©ç”¨ã•れ" + +#: usr/local/www/firewall_rules_edit.php:253 +#: usr/local/www/firewall_rules_edit.php:252 +#: usr/local/www/firewall_rules_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:255 +#: usr/local/www/firewall_rules_edit.php:255 +msgid "You can not assign a ICMP type to a rule that applies to IPv4 and IPv6" +msgstr "ã‚ãªãŸã¯ã€IPv4ãŠã‚ˆã³IPv6ã«é©ç”¨ã™ã‚‹ãƒ«ãƒ¼ãƒ«ã«ICMPタイプを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/firewall_rules_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:415 +#: usr/local/www/firewall_rules_edit.php:418 +#: usr/local/www/firewall_rules_edit.php:424 +#: usr/local/www/firewall_rules_edit.php:424 +msgid "You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules." +msgstr "ã‚ãªãŸãŒçµ„ã¿åˆã‚ã•れãŸIPv4ã®IPv6ルールã§IPv4ã¾ãŸã¯IPv6アドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1300 +#: usr/local/www/firewall_rules_edit.php:1307 +#: usr/local/www/firewall_rules_edit.php:1306 +#: usr/local/www/firewall_rules_edit.php:1306 +msgid "802.1p" +msgstr "802.1pã®" + +#: usr/local/www/firewall_rules_edit.php:1308 +#: usr/local/www/firewall_rules_edit.php:1323 +#: usr/local/www/firewall_rules_edit.php:1330 +#: usr/local/www/firewall_rules_edit.php:1341 +#: usr/local/www/firewall_rules_edit.php:1341 +msgid "Choose 802.1p priority to match on" +msgstr "上ã¨ä¸€è‡´ã™ã‚‹ã‚ˆã†ã«802.1pãƒ—ãƒ©ã‚¤ã‚ªãƒªãƒ†ã‚£ã‚’é¸æŠžã—ã¦ãã ã•ã„" + +#: usr/local/www/firewall_rules_edit.php:1312 +#: usr/local/www/firewall_rules_edit.php:1327 +#: usr/local/www/firewall_rules_edit.php:1334 +#: usr/local/www/firewall_rules_edit.php:1345 +#: usr/local/www/firewall_rules_edit.php:1345 +msgid "Choose 802.1p priority to apply" +msgstr "é©ç”¨ã™ã‚‹802.1pãƒ—ãƒ©ã‚¤ã‚ªãƒªãƒ†ã‚£ã‚’é¸æŠžã—ã¦ãã ã•ã„" + +#: usr/local/www/services_unbound.php:102 +#: usr/local/www/services_unbound_advanced.php:88 +msgid "DNS Resolver" +msgstr "DNSリゾルãƒ" + +#: usr/local/www/services_unbound.php:129 +msgid "The configuration for the DNS Resolver, has been changed" +msgstr "DNSリゾルãƒã®è¨­å®šã¯ã€å¤‰æ›´ã•れãŸ" + +#: usr/local/www/services_unbound.php:136 +#: usr/local/www/services_unbound_advanced.php:123 +msgid "General settings" +msgstr "一般的ãªè¨­å®š" + +#: usr/local/www/services_unbound.php:147 +msgid "General DNS Resolver Options" +msgstr "一般的ãªDNSリゾルãƒã®ã‚ªãƒ—ション" + +#: usr/local/www/services_unbound.php:153 +msgid "Enable DNS Resolver" +msgstr "DNSリゾルãƒã‚’有効ã«ã—ã¾ã™" + +#: usr/local/www/services_unbound.php:157 +msgid "Network interfaces" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¤ãƒ³ã‚¿ãƒ•ェース" + +#: usr/local/www/services_unbound.php:172 +msgid "" +"The DNS Resolver Server will listen on the selected interfaces. To add an " +"interface click inside the interface box and select the interface from the " +"drop down." +msgstr "「 DNSリゾルãƒã‚µãƒ¼ãƒãŒé¸æŠžã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã§å¾…機ã—ã¾ã™ã€‚追加ã™ã‚‹ã«ã¯ã€ã€Œã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースボックス内部インターフェイスをクリックã—ã¦ã¨ "ドロップダウンメニューã‹ã‚‰ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/services_unbound.php:177 +msgid "Outgoing interfaces" +msgstr "発信インターフェイス" + +#: usr/local/www/services_unbound.php:192 +msgid "" +"Utilize different network interface(s) that the DNS Resolver will use to " +"send queries to authoritative servers and receive their replies. By default " +"all interfaces are used." +msgstr "ãã®è¿”信を権å¨ã‚µãƒ¼ãƒã«ã‚¯ã‚¨ãƒªãƒ¼ã‚’é€ä¿¡ã—ã€å—信〠DNSリゾルãƒãŒã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹åˆ¥ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¤ãƒ³ã‚¿ãƒ•ェース(S )を利用〠。デフォルトã§ã¯ã€Œã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスãŒä½¿ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/services_unbound.php:197 +msgid "DNSSEC" +msgstr "DNSSEC" + +#: usr/local/www/services_unbound.php:200 +msgid "Enable DNSSEC Support" +msgstr "DNSSECサãƒãƒ¼ãƒˆã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/services_unbound.php:204 +msgid "Forwarding" +msgstr "転é€" + +#: usr/local/www/services_unbound.php:207 +msgid "Enable Forwarding Mode" +msgstr "転é€ãƒ¢ãƒ¼ãƒ‰ã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/services_unbound.php:214 +msgid "Register DHCP leases in the DNS Resolver" +msgstr "レジスタDHCPã¯DNSリゾルãƒå†…ã®ãƒªãƒ¼ã‚¹" + +#: usr/local/www/services_unbound.php:215 +#, php-format +msgid "" +"If this option is set, then machines that specify their hostname when " +"requesting a DHCP lease will be registered in the DNS Resolver, so that " +"their name can be resolved. You should also set the domain in %sSystem: " +"General setup%s to the proper value." +msgstr "「ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ã¨ã彼らã®ãƒ›ã‚¹ãƒˆåを指定ã—ã¦ãƒžã‚·ãƒ³""自分ã®åå‰ã‚’入手ã—%sSystemドメインを設定ã™ã‚‹å¿…è¦ãŒè§£æ±ºã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ : "よã†ã«DHCPãƒªãƒ¼ã‚¹ã‚’è¦æ±‚ã™ã‚‹ã«ã¯ã€ DNSリゾルãƒã«ç™»éŒ²ã•れã¾ã™ä¸€èˆ¬setup%sを。é©åˆ‡ãªå€¤ã«ã­ã€‚" + +#: usr/local/www/services_unbound.php:226 +msgid "Register DHCP static mappings in the DNS Resolver" +msgstr "DNSリゾルãƒã®ãƒ¬ã‚¸ã‚¹ã‚¿ã®DHCPé™çš„マッピング" + +#: usr/local/www/services_unbound.php:227 +#, php-format +msgid "" +"If this option is set, then DHCP static mappings will be registered in the " +"DNS Resolver, so that their name can be resolved. You should also set the " +"domain in %sSystem: General setup%s to the proper value." +msgstr "ãã®åå‰ãŒè§£æ±ºã§ãるよã†ã«ã€ DNSリゾルãƒã€Œã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€ DHCPã®é™çš„マッピングラーニング登録ã•れる〠。一般setup%s驿­£å€¤ã«ï¼šã¾ãŸ%sSystemã®ã€Œãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_unbound.php:254 +#, php-format +msgid "" +"If the DNS Resolver is enabled, the DHCP service (if enabled) will " +"automatically serve the LAN IP address as a DNS server to DHCP clients so " +"they will use the DNS Resolver. If Forwarding, is enabled, the DNS Resolver " +"will use the DNS servers entered in %sSystem: General setup%s or those " +"obtained via DHCP or PPP on WAN if the "Allow DNS server list to be " +"overridden by DHCP/PPP on WAN" is checked." +msgstr "「 DNSリゾルãƒãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ DHCPサービス(有効ãªå ´åˆï¼‰ãŒã—ã¾ã™ã€ãŒè‡ªå‹•çš„ã«DHCPクライアントã«DNSサーãƒãƒ¼ã¨ã—ã¦LANã®IPアドレスをæä¾›ã™ã‚‹ã®ã§ã€ "彼らã¯ã€DNSリゾルãƒã‚’使用ã—ã¾ã™ã€‚転é€ãŒã€æœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ DNSリゾルãƒã¯ã€ "æ„志一般setup%sã¾ãŸã¯DNSサーãƒãƒ¼ãƒªã‚¹ãƒˆã€ã¨ã¯ã€WAN上ã§DHCP / PPPã«ã‚ˆã£ã¦ç„¡åйã«ã™ã‚‹ã€ã“ã¨ãŒã§ãるよã†ã«ã™ã‚‹ãƒã‚§ãƒƒã‚¯ã•れã¦ã„ã‚‹ã€å ´åˆã«ã¯ã€WAN上ã§ã®DHCPã‚„PPPを介ã—ã¦å–å¾—ã—ãŸã€Œã‚‚ã®ï¼š DNSã®%sSystemã«å…¥åŠ›ã•れãŸã‚µãƒ¼ãƒã‚’使用ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_unbound_advanced.php:116 +msgid "The configuration of the DNS Resolver, has been changed" +msgstr "DNSリゾルãƒã®è¨­å®šã¯ã€å¤‰æ›´ã•れãŸ" + +#: usr/local/www/services_unbound_advanced.php:134 +msgid "Advanced Resolver Options" +msgstr "高度ãªãƒ¬ã‚¾ãƒ«ãƒã‚ªãƒ—ション" + +#: usr/local/www/services_unbound_advanced.php:137 +msgid "Hide Identity" +msgstr "éš ã™ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£" + +#: usr/local/www/services_unbound_advanced.php:140 +msgid "If enabled, id.server and hostname.bind queries are refused." +msgstr "有効ã«ã™ã‚‹ã¨ã€ id.serverã¨hostname.bindã‚¯ã‚¨ãƒªãŒæ‹’å¦ã•れã¾ã™ã€‚" + +#: usr/local/www/services_unbound_advanced.php:144 +msgid "Hide Version" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’éš ã™" + +#: usr/local/www/services_unbound_advanced.php:147 +msgid "If enabled, version.server and version.bind queries are refused." +msgstr "有効ã«ã™ã‚‹ã¨ã€ version.serverã¨ã‚¯ã‚¨ãƒªversion.bindãŒæ‹’å¦ã•れã¾ã™ã€‚" + +#: usr/local/www/services_unbound_advanced.php:151 +msgid "Prefetch Support" +msgstr "プリフェッãƒã®ã‚µãƒãƒ¼ãƒˆ" + +#: usr/local/www/services_unbound_advanced.php:154 +msgid "" +"Message cache elements are prefetched before they expire to help keep the " +"cache up to date. When enabled, this option can cause an increase of around " +"10% more DNS traffic and load on the server, but frequently requested items " +"will not expire from the cache." +msgstr "最新ã§ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã€Œå½¼ã‚‰ãŒä¿ã¤ãŸã‚ã«æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹å‰ã«ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚­ãƒ£ãƒƒã‚·ãƒ¥è¦ç´ ãŒãƒ—リフェッãƒã•れる〠。有効ã«ã™ã‚‹ã¨ã€ã“ã®ã‚ªãƒ—ションã¯å‘¨ã‚Šã®å¢—加原因ã¨ãªã‚Šã¾ã™ã€ 10パーセント以上ã®DNSトラフィックã¨ã‚µãƒ¼ãƒãƒ¼ã®è² è·ãŒã€ã—ã‹ã—é »ç¹ã«è¦æ±‚ã•れる項目ã¯ã€ 「キャッシュã‹ã‚‰æœ‰åŠ¹æœŸé™ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/services_unbound_advanced.php:158 +msgid "Prefetch DNS Key Support" +msgstr "プリフェッãƒDNSキーã®ã‚µãƒãƒ¼ãƒˆ" + +#: usr/local/www/services_unbound_advanced.php:161 +#, php-format +msgid "" +"DNSKEY's are fetched earlier in the validation process when a %sDelegation " +"signer%s is encountered. This helps lower the latency of requests but does " +"utilize a little more CPU." +msgstr "signer%sé­é‡ã—ãŸ"DNSKEYã®ã¯ã€ä»¥å‰ã®æ¤œè¨¼ãƒ—ロセスã«ãŠã‘ã‚‹%sDelegationãŒæ™‚ã«ãƒ•ェッãƒã•れる〠。ã“れã¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®ãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ã‚’下ã’ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ "ã‚‚ã†å°‘ã—ã®CPUを利用ã—ã¦ã„ãªã„。" + +#: usr/local/www/services_unbound_advanced.php:165 +msgid "Harden Glue" +msgstr "ãƒãƒ¼ãƒ‡ãƒ³ã‚°ãƒ«ãƒ¼" + +#: usr/local/www/services_unbound_advanced.php:168 +msgid "Only trust glue if it is within the servers authority." +msgstr "ãれã¯ã‚µãƒ¼ãƒã®æ¨©é™ã®ç¯„囲内ã§ã‚ã‚‹å ´åˆã«ã®ã¿æŽ¥ç€å‰¤ã‚’ä¿¡é ¼ã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_unbound_advanced.php:172 +msgid "Harden DNSSEC data" +msgstr "ãƒãƒ¼ãƒ‡ãƒ³DNSSECデータ" + +#: usr/local/www/services_unbound_advanced.php:175 +msgid "" +"DNSSEC data is required for trust-anchored zones. If such data is absent, " +"the zone becomes bogus. If this is disabled and no DNSSEC data is received, " +"then the zone is made insecure." +msgstr "「 DNSSECデータãŒä¿¡é ¼ã‚¢ãƒ³ã‚«ãƒ¼ã‚¾ãƒ¼ãƒ³ã«å¿…è¦ã¨ã•れる。ã“ã®ã‚ˆã†ãªãƒ‡ãƒ¼ã‚¿ãŒå­˜åœ¨ã—ãªã„å ´åˆã¯ã€ã€Œã‚¾ãƒ¼ãƒ³ãŒå½ã¨ãªã‚‹ã€‚ã“れã¯ç„¡åйã§ã€ DNSSECデータãŒå—ä¿¡ã•れãªã„å ´åˆã€ 「次ã«ã‚¾ãƒ¼ãƒ³ãŒå®‰å…¨ã§è¡Œã‚れる。" + +#: usr/local/www/services_unbound_advanced.php:179 +msgid "Message Cache Size" +msgstr "メッセージキャッシュサイズ" + +#: usr/local/www/services_unbound_advanced.php:190 +msgid "" +"Size of the message cache. The message cache stores DNS rcodes and " +"validation statuses. The RRSet cache will automatically be set to twice this " +"amount. The RRSet cache contains the actual RR data. The default is 4 " +"megabytes." +msgstr "「メッセージ·キャッシュã®ã‚µã‚¤ã‚ºã€‚メッセージキャッシュを格ç´ã™ã‚‹DNS rcodesã¨ã€Œæ¤œè¨¼ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã€‚資æºãƒ¬ã‚³ãƒ¼ãƒ‰é›†åˆã‚­ãƒ£ãƒƒã‚·ãƒ¥ã¯è‡ªå‹•çš„ã«2回ã«è¨­å®šã•れã¾ã™ã€é‡ã€‚資æºãƒ¬ã‚³ãƒ¼ãƒ‰é›†åˆã‚­ãƒ£ãƒƒã‚·ãƒ¥ã¯ã€å®Ÿéš›ã®RRデータãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚デフォルトã¯4ã§ã™ã€ãƒ¡ã‚¬ãƒã‚¤ãƒˆã€‚" + +#: usr/local/www/services_unbound_advanced.php:194 +msgid "Outgoing TCP Buffers" +msgstr "発信TCPãƒãƒƒãƒ•ã‚¡" + +#: usr/local/www/services_unbound_advanced.php:204 +msgid "" +"The number of outgoing TCP buffers to allocate per thread. The default value " +"is 10. If 0 is selected then no TCP queries, to authoritative servers, are " +"done." +msgstr "「スレッドã”ã¨ã«å‰²ã‚Šå½“ã¦ã‚‹ãŸã‚ã®ç™ºä¿¡TCPãƒãƒƒãƒ•ã‚¡ã®æ•°ã€‚デフォルト値ã¯ã€Œ 10ã§ã™ã€‚ 0ã¯æ¨©å¨ã‚µãƒ¼ãƒã«ã¯ã€ä½•ã®TCPã‚¯ã‚¨ãƒªã‚’é¸æŠžã•れã¦ã„ãªã„å ´åˆã¯ã€ 「実行ã•れã¾ã™ã€‚" + +#: usr/local/www/services_unbound_advanced.php:208 +msgid "Incoming TCP Buffers" +msgstr "ç€ä¿¡TCPãƒãƒƒãƒ•ã‚¡" + +#: usr/local/www/services_unbound_advanced.php:218 +msgid "" +"The number of incoming TCP buffers to allocate per thread. The default value " +"is 10. If 0 is selected then no TCP queries, from clients, are accepted." +msgstr "「スレッドã”ã¨ã«å‰²ã‚Šå½“ã¦ã‚‹ãŸã‚ã®ç€ä¿¡TCPãƒãƒƒãƒ•ã‚¡ã®æ•°ã€‚デフォルト値ã¯ã€Œ 10ã§ã™ã€‚ 0ã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰ã®ãã®å¾Œã®TCPクエリーをã€é¸æŠžã•れã¦ã„ãªã„å ´åˆã¯ã€å—ã‘入れられã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/services_unbound_advanced.php:222 +msgid "EDNS Buffer Size" +msgstr "EDNSãƒãƒƒãƒ•ァサイズ" + +#: usr/local/www/services_unbound_advanced.php:229 +msgid "" +"Number of bytes size to advertise as the EDNS reassembly buffer size. This " +"is the value that is used in UDP datagrams sent to peers. RFC recommendation " +"is 4096 (which is the default). If you have fragmentation reassemble " +"problems, usually seen as timeouts, then a value of 1480 should help. The " +"512 value bypasses most MTU path problems, but it can generate an excessive " +"amount of TCP fallback." +msgstr "「 EDNS組立ãƒãƒƒãƒ•ァサイズã¨ã—ã¦ã‚¢ãƒ‰ãƒã‚¿ã‚¤ã‚ºã™ã‚‹ãƒã‚¤ãƒˆã‚µã‚¤ã‚ºã®æ•°ã€‚ã“れã¯ã€ "ピアã«é€ä¿¡ã•れるUDPデータグラムã§ä½¿ç”¨ã•れる値ã§ã™ã€‚ RFC勧告ã¯é€šå¸¸ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¨è¦‹ã‚‰ã‚ŒãŸå•題をã€ãã—ã¦1480å¹´ã®å€¤ã¯å½¹ç«‹ã¤ã¯ãš"ã‚ãªãŸã¯æ–­ç‰‡åŒ–ãŒå†æ§‹æˆã—ã¦ã„ã‚‹å ´åˆã€‚ (デフォルト) 4096 ã€ã§ã™ã€‚ 「 512ã®å€¤ã¯ã€ã»ã¨ã‚“ã©ã®MTUパスã®å•題を迂回ã™ã‚‹ãŒã€ãれã¯ã€éŽå‰°ãªç”Ÿæˆã™ã‚‹ã“ã¨ãŒã§ãã€ã€ŒTCPフォールãƒãƒƒã‚¯ã®é‡ã‚’。" + +#: usr/local/www/services_unbound_advanced.php:233 +msgid "Number of queries per thread" +msgstr "スレッドã‚ãŸã‚Šã®ã‚¯ã‚¨ãƒªæ•°" + +#: usr/local/www/services_unbound_advanced.php:240 +msgid "" +"The number of queries that every thread will service simultaneously. If more " +"queries arrive that need to be serviced, and no queries can be jostled, then " +"these queries are dropped." +msgstr "クエリサービスをå—ã‘ã‚‹ãŸã‚ã«ãã®å¿…è¦æ€§ã‚’ç€ã‘ãªã„クエリã¯ã‚‚ã¾ã§ããªã„ã€ã‚ˆã‚Šã¯å ´åˆã€ã™ã¹ã¦ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒåŒæ™‚ã«ã‚µãƒ¼ãƒ“スã™ã‚‹ã‚¯ã‚¨ãƒªã®æ•°ã¯ã€‚ 〠ã€ãã—ã¦ã€Œã“れらã®ã‚¯ã‚¨ãƒªã¯å‰Šé™¤ã•れã¾ã™ã€‚" + +#: usr/local/www/services_unbound_advanced.php:244 +msgid "Jostle Timeout" +msgstr "モーターボータイムアウト" + +#: usr/local/www/services_unbound_advanced.php:252 +msgid "" +"This timeout is used for when the server is very busy. This protects against " +"denial of service by slow queries or high query rates. The default value is " +"200 milliseconds." +msgstr "「ã“ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯ã€ã‚µãƒ¼ãƒãƒ¼ãŒéžå¸¸ã«ãƒ“ジーã§ã‚ã‚‹ã¨ãã«ä½¿ç”¨ã•れã¾ã™ã€‚ã“れã¯ã‹ã‚‰ä¿è­·ã€Œã‚¹ãƒ­ãƒ¼ã‚¯ã‚¨ãƒªã¾ãŸã¯é«˜ã„ã‚¯ã‚¨ãƒªãªæ–™é‡‘ã§ã‚µãƒ¼ãƒ“ス拒å¦ã€‚デフォルト値ã¯ã€Œ200ミリ秒ã§ã‚る。" + +#: usr/local/www/services_unbound_advanced.php:256 +msgid "Maximum TTL for RRsets and messages" +msgstr "RRセットãŠã‚ˆã³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æœ€å¤§ã®TTL" + +#: usr/local/www/services_unbound_advanced.php:259 +msgid "" +"Configure a maximum Time to live for RRsets and messages in the cache. The " +"default is 86400 seconds (1 day). When the internal TTL expires the cache " +"item is expired. This can be configured to force the resolver to query for " +"data more often and not trust (very large) TTL values." +msgstr "「キャッシュ内ã®RRセットãŠã‚ˆã³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ãŸã‚ã«ç”Ÿãã‚‹ã®æœ€å¤§æ™‚間を設定ã—ã¾ã™ã€‚ 「デフォルトã¯86400秒( 1日)ã§ã™ã€‚内部ã®TTLã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¨ã€ãƒ‡ãƒ¼ã‚¿ã‚’より頻ç¹ã§ã¯ãªãã€ä¿¡é ¼ï¼ˆéžå¸¸ã«å¤§ãã„) TTL値ã€ã®é …ç›®ã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã¦ã„る。ã“れã¯ç…§ä¼šã™ã‚‹ãŸã‚ã«ã€ãƒªã‚¾ãƒ«ãƒã‚’強制的ã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。" + +#: usr/local/www/services_unbound_advanced.php:263 +msgid "Minimum TTL for RRsets and messages" +msgstr "RRセットãŠã‚ˆã³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æœ€å°ã®TTL" + +#: usr/local/www/services_unbound_advanced.php:266 +msgid "" +"Configure a minimum Time to live for RRsets and messages in the cache. The " +"default is 0 seconds. If the minimum value kicks in, the data is cached for " +"longer than the domain owner intended, and thus less queries are made to " +"look up the data. The 0 value ensures the data in the cache is as the domain " +"owner intended. High values can lead to trouble as the data in the cache " +"might not match up with the actual data anymore." +msgstr "「キャッシュ内ã®RRセットãŠã‚ˆã³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ãŸã‚ã«ç”Ÿãã‚‹ã®æœ€å°æ™‚間を設定ã—ã¾ã™ã€‚ 「デフォルト値ã¯0ç§’ã§ã™ã€‚最å°å€¤ã¯ä¸­ã®ã‚­ãƒƒã‚¯ã¨ã€ãƒ‡ãƒ¼ã‚¿ãŒã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•れã€ã€Œæ„図ã—ãŸãƒ‰ãƒ¡ã‚¤ãƒ³ã‚ªãƒ¼ãƒŠãƒ¼ã‚ˆã‚Šã‚‚é•·ã„ãŸã‚ã€å°‘ãªã„クエリãŒã™ã‚‹ãŸã‚ã«è¡Œã‚れる「データを検索ã—ã¾ã™ã€‚ 0値ã¯ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ã€Œæ‰€æœ‰è€…ãŒæ„図ã—ãŸã€‚高ã„値ã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥å†…ã®ãƒ‡ãƒ¼ã‚¿ã®ã‚ˆã†ã«ã€ãƒˆãƒ©ãƒ–ルã«ã¤ãªãŒã‚‹å¯èƒ½æ€§ã€ã¨ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥å†…ã®ãƒ‡ãƒ¼ã‚¿ã¯ã‚‚ã†å®Ÿéš›ã®ãƒ‡ãƒ¼ã‚¿ã¨ä¸€è‡´ã—ãªã„å ´åˆãŒã‚りã¾ã™ãŒä¿è¨¼ã•れã¾ã™ã€‚" + +#: usr/local/www/services_unbound_advanced.php:270 +msgid "TTL for Host cache entries" +msgstr "ホストキャッシュエントリã®TTL" + +#: usr/local/www/services_unbound_advanced.php:279 +msgid "" +"Time to live for entries in the host cache. The host cache contains " +"roundtrip timing and EDNS support information. The default is 15 minutes." +msgstr "往復ã®ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã¨EDNSサãƒãƒ¼ãƒˆæƒ…報を「ホストキャッシュ内ã®ã‚¨ãƒ³ãƒˆãƒªã®å­˜ç¶šæ™‚é–“ã¯ã€ãƒ›ã‚¹ãƒˆÂ·ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€ 。デフォルトã¯15分ã§ã™ã€‚" + +#: usr/local/www/services_unbound_advanced.php:283 +msgid "TTL for lame delegation" +msgstr "ä¸å®Œå…¨ãªå§”ä»»ã®TTL" + +#: usr/local/www/services_unbound_advanced.php:292 +msgid "" +"Time to live for when a delegation is considered to be lame. The default is " +"15 minutes." +msgstr "15分「委任ãŒãƒ©ãƒ¡ã§ã‚ã‚‹ã¨ã¿ãªã•れãŸã¨ãã®ãŸã‚ã«ç”Ÿãる時間。デフォルトã¯ã€Œã€‚" + +#: usr/local/www/services_unbound_advanced.php:296 +msgid "Number of Hosts to cache" +msgstr "キャッシュã«ãƒ›ã‚¹ãƒˆã®æ•°" + +#: usr/local/www/services_unbound_advanced.php:305 +msgid "Number of hosts for which information is cached. The default is 10,000." +msgstr "情報ãŒã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•れã¦ã„ã‚‹ãƒ›ã‚¹ãƒˆã®æ•°ã€‚デフォルトã¯10,000ã§ã™ã€‚" + +#: usr/local/www/services_unbound_advanced.php:309 +msgid "Unwanted Reply Threshold" +msgstr "ä¸è¦ãªè¿”ä¿¡ã—ãã„値" + +#: usr/local/www/services_unbound_advanced.php:319 +msgid "" +"If enabled, a total number of unwanted replies is kept track of in every " +"thread. When it reaches the threshold, a defensive action is taken and a " +"warning is printed to the log file. This defensive action is to clear the " +"RRSet and message caches, hopefully flushing away any poison. The default is " +"disabled, but if enabled a a value of 10 million is suggested." +msgstr "スレッド「有効ã«ã™ã‚‹ã¨ã€ä¸å¿…è¦ãªå›žç­”ã®åˆè¨ˆæ•°ã¯ã€ã™ã¹ã¦ã®å†…ã®ãƒˆãƒ©ãƒƒã‚¯ã‚’ä¿ãŸã‚Œã¦ã„る〠。ãれãŒã—ãã„値ã«é”ã™ã‚‹ã¨ã€é˜²å¾¡çš„ãªè¡Œå‹•ãŒã¨ã‚‰ã‚Œã¦ãŠã‚Šã€ã†ã¾ãã„ã‘ã°ã©ã‚“ãªæ¯’ã‚’æ´—ã„æµã™ã€ RRSetã«ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã€è­¦å‘ŠãŒãƒ­ã‚°ãƒ•ァイルã«å‡ºåŠ›ã•れã¾ã™ã€‚ã“ã®é˜²å¾¡çš„ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ã‚ªãƒ•ã«ã—ã¦ã„ã¾ã™ã€ 。デフォルトã¯ã€Œç„¡åйã«ãªã£ã¦ã„ã¾ã™ãŒã€åƒä¸‡ã®æœ‰åйã«ã—ãŸå ´åˆã€AAã®å€¤ãŒææ¡ˆã•れã¦ã„る。" + +#: usr/local/www/services_unbound_advanced.php:323 +msgid "Log level verbosity" +msgstr "レベルã®å†—長性をログã«è¨˜éŒ²" + +#: usr/local/www/services_unbound_advanced.php:333 +msgid "Select the log verbosity." +msgstr "ログã®è©³ç´°åº¦ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:80 +#: usr/local/www/system_advanced_firewall.php:91 +#: usr/local/www/system_advanced_firewall.php:91 +msgid "The Firewall Maximum Tables value must be an integer." +msgstr "ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®æœ€å¤§ãƒ†ãƒ¼ãƒ–ルã®å€¤ã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_advanced_firewall.php:326 +#: usr/local/www/system_advanced_firewall.php:370 +#: usr/local/www/system_advanced_firewall.php:371 +#: usr/local/www/system_advanced_firewall.php:371 +msgid "Firewall Maximum Tables" +msgstr "ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®æœ€å¤§è¡¨" + +#: usr/local/www/system_advanced_firewall.php:330 +#: usr/local/www/system_advanced_firewall.php:374 +#: usr/local/www/system_advanced_firewall.php:375 +#: usr/local/www/system_advanced_firewall.php:375 +msgid "" +"Maximum number of tables for systems such as aliases, sshlockout, snort, " +"etc, combined." +msgstr "ãªã©ã€åˆã‚ã›ã¦ã€Œã“ã®ã‚ˆã†ãªã‚¨ã‚¤ãƒªã‚¢ã‚¹ã€ sshlockout 〠Snortã®ã‚ˆã†ãªã‚·ã‚¹ãƒ†ãƒ ã®ãŸã‚ã®ãƒ†ãƒ¼ãƒ–ãƒ«ã®æœ€å¤§æ•°ã€ 。" + +#: usr/local/www/system_advanced_firewall.php:331 +#: usr/local/www/system_advanced_firewall.php:375 +#: usr/local/www/system_advanced_firewall.php:376 +#: usr/local/www/system_advanced_firewall.php:376 +msgid "" +"This is the actual number of tables, not the number of entries inside the " +"tables (see below)" +msgstr "テーブル(下記å‚照) ã€ã“れã¯ã€ãƒ†ãƒ¼ãƒ–ルã®å®Ÿéš›ã®æ•°ã§ã¯ãªãã€å†…部ã®ã‚¨ãƒ³ãƒˆãƒªã®æ•°ã§ã‚ã‚‹"" + +#: usr/local/www/system_advanced_firewall.php:393 +#: usr/local/www/system_advanced_firewall.php:437 +#: usr/local/www/system_advanced_firewall.php:438 +#: usr/local/www/system_advanced_firewall.php:438 +msgid "Disable Negate rule on policy routing rules" +msgstr "ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ«ãƒ¼ãƒ«ã«å¦å®šã®ãƒ«ãƒ¼ãƒ«ã‚’無効ã«" + +#: usr/local/www/system_advanced_firewall.php:395 +#: usr/local/www/system_advanced_firewall.php:439 +#: usr/local/www/system_advanced_firewall.php:440 +#: usr/local/www/system_advanced_firewall.php:440 +msgid "" +"With Multi-WAN you generally want to ensure traffic reaches directly " +"connected networks and VPN networks when using policy routing. You can " +"disable this for special purposes but it requires manually creating rules " +"for these networks" +msgstr "ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã™ã‚‹å ´åˆã¯ã€æŽ¥ç¶šã•れãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨VPNãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’「マルãƒWANを使用ã™ã‚‹ã¨ã€ä¸€èˆ¬çš„ã«ã¯ã€ãƒˆãƒ©ãƒ•ィックãŒç›´æŽ¥åˆ°é”ã—ãŸã“ã¨ã‚’確èªã—ãŸã„〠。ã‚ãªãŸã¯ "特別ãªç›®çš„ã®ãŸã‚ã«ã“れを無効ã«ã™ã‚‹ãŒã€ãれã¯ã€æ‰‹å‹•ã§ãƒ«ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹å¿…è¦ã€ãŒã§ãã€ã“れらã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãŸã‚ã«" + +#: usr/local/www/system_advanced_firewall.php:407 +#: usr/local/www/system_advanced_firewall.php:469 +#: usr/local/www/system_advanced_firewall.php:470 +#: usr/local/www/system_advanced_firewall.php:470 +msgid "NAT Reflection mode for port forwards" +msgstr "ãƒãƒ¼ãƒˆã«è»¢é€ã™ã‚‹ãŸã‚ã€NATå射モード" + +#: usr/local/www/system_advanced_firewall.php:411 +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_nat_edit.php:788 +#: usr/local/www/system_advanced_firewall.php:473 +#: usr/local/www/firewall_nat_edit.php:800 +#: usr/local/www/system_advanced_firewall.php:474 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/system_advanced_firewall.php:474 +msgid "Enable (NAT + Proxy)" +msgstr "イãƒãƒ¼ãƒ–ル( NATプロキシ)" + +#: usr/local/www/system_advanced_firewall.php:412 +#: usr/local/www/firewall_nat_edit.php:795 +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:789 +#: usr/local/www/system_advanced_firewall.php:474 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/system_advanced_firewall.php:475 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/system_advanced_firewall.php:475 +msgid "Enable (Pure NAT)" +msgstr "イãƒãƒ¼ãƒ–ル(ピュアNAT)" + +#: usr/local/www/system_advanced_firewall.php:415 +#: usr/local/www/system_advanced_firewall.php:477 +#: usr/local/www/system_advanced_firewall.php:478 +#: usr/local/www/system_advanced_firewall.php:478 +msgid "" +"When enabled, this automatically creates additional NAT redirect rules for " +"access to port forwards on your external IP addresses from within your " +"internal networks." +msgstr "ã‚ãªãŸã®ã€Œå†…部ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å†…ã‹ã‚‰å¤–部IPアドレスã®ãƒãƒ¼ãƒˆã«è»¢é€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã€ã‚’有効ã«ã™ã‚‹ã¨ã€ã“れã¯è‡ªå‹•çš„ã«è¿½åŠ ã®NATãŒãŸã‚ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã€ 。" + +#: usr/local/www/system_advanced_firewall.php:417 +#: usr/local/www/system_advanced_firewall.php:479 +#: usr/local/www/system_advanced_firewall.php:480 +#: usr/local/www/system_advanced_firewall.php:480 +msgid "" +"The NAT + proxy mode uses a helper program to send packets to the target of " +"the port forward. It is useful in setups where the interface and/or gateway " +"IP used for communication with the target cannot be accurately determined at " +"the time the rules are loaded. Reflection rules are not created for ranges " +"larger than 500 ports and will not be used for more than 1000 ports total " +"between all port forwards. Only TCP and UDP protocols are supported." +msgstr "ãƒãƒ¼ãƒˆãƒ•ォワード「NATプロキシモードã§ã¯ã€ç›®æ¨™ã«ãƒ‘ケットをé€ä¿¡ã™ã‚‹ãŸã‚ã«ãƒ˜ãƒ«ãƒ‘ープログラムを使用ã—ã¦ã„ã¾ã™ã€ 。ãれã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスãŠã‚ˆã³/ã¾ãŸã¯ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã®ãƒ«ãƒ¼ãƒ«ãŒãƒ­ãƒ¼ãƒ‰ã•れã¦ã„る時間〠ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¨ã®é€šä¿¡ã«ä½¿ç”¨ã™ã‚‹IPã‚’æ­£ç¢ºã«æ±ºå®šã™ã‚‹ã“ã¨ãŒã§ããªã„ã€ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã«ä¾¿åˆ©ã§ã™ã€‚å射ルールã¯ç¯„囲ã®ãŸã‚ã«ä½œæˆã•れã¦ã„ãªã„ã€ã‚’è¶…ãˆã‚‹500ãƒãƒ¼ãƒˆã¨åˆè¨ˆ1000以上ã®ãƒãƒ¼ãƒˆã«ä½¿ç”¨ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“"ã™ã¹ã¦ã®ãƒãƒ¼ãƒˆã«è»¢é€é–“。ã ã‘TCPãŠã‚ˆã³UDPプロトコルãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:419 +#: usr/local/www/system_advanced_firewall.php:481 +#: usr/local/www/system_advanced_firewall.php:482 +#: usr/local/www/system_advanced_firewall.php:482 +msgid "" +"The pure NAT mode uses a set of NAT rules to direct packets to the target of " +"the port forward. It has better scalability, but it must be possible to " +"accurately determine the interface and gateway IP used for communication " +"with the target at the time the rules are loaded. There are no inherent " +"limits to the number of ports other than the limits of the protocols. All " +"protocols available for port forwards are supported." +msgstr "ãƒãƒ¼ãƒˆãƒ•ォワード「純粋ãªNATモードã§ã¯ã€ç›®æ¨™ã¸ã®ç›´æŽ¥ã®ãƒ‘ケットã«NATè¦å‰‡ã®ã‚»ãƒƒãƒˆã‚’使用ã—ã¦ã„ã¾ã™ã€ 。ãれã¯ã€ã‚ˆã‚Šè‰¯ã„スケーラビリティをæŒã£ã¦ã„ã¾ã™ãŒã€ãれã¯ãƒ«ãƒ¼ãƒ«ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚ŒãŸæ™‚点ã§ã€å¯¾è±¡ã¨ã®ã€Œæ­£ç¢ºé€šä¿¡ã«ä½¿ç”¨ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスãŠã‚ˆã³ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤IPを決定ã€ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ã¯å›ºæœ‰ã®ã€Œãƒ—ロトコルã®åˆ¶é™ã‚ˆã‚Šã‚‚ã€ä»–ã®ãƒãƒ¼ãƒˆã®æ•°ã«ã¯é™ç•ŒãŒã€‚ã™ã¹ã¦ã€ãŒå­˜åœ¨ã—ãªã„ãƒãƒ¼ãƒˆã«è»¢é€ã«åˆ©ç”¨å¯èƒ½ãªãƒ—ロトコルãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:421 +#: usr/local/www/system_advanced_firewall.php:441 +#: usr/local/www/system_advanced_firewall.php:483 +#: usr/local/www/system_advanced_firewall.php:503 +#: usr/local/www/system_advanced_firewall.php:484 +#: usr/local/www/system_advanced_firewall.php:504 +#: usr/local/www/system_advanced_firewall.php:484 +#: usr/local/www/system_advanced_firewall.php:504 +msgid "" +"Individual rules may be configured to override this system setting on a per-" +"rule basis." +msgstr "ルールベースã€å€‹ã€…ã®ãƒ«ãƒ¼ãƒ«ã”ã¨ã®ä¸Šã§ã“ã®ã‚·ã‚¹ãƒ†ãƒ è¨­å®šã‚’上書ãã™ã‚‹ã‚ˆã†ã«æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãる〠。" + +#: usr/local/www/system_advanced_firewall.php:428 +#: usr/local/www/system_advanced_firewall.php:490 +#: usr/local/www/system_advanced_firewall.php:491 +#: usr/local/www/system_advanced_firewall.php:491 +msgid "Enter value for Reflection timeout in seconds." +msgstr "ç§’å˜ä½ã§ãƒªãƒ•レクションã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®å€¤ã‚’入力ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:430 +#: usr/local/www/system_advanced_firewall.php:492 +#: usr/local/www/system_advanced_firewall.php:493 +#: usr/local/www/system_advanced_firewall.php:493 +msgid "Note: Only applies to Reflection on port forwards in NAT + proxy mode." +msgstr "注:ã®ã¿ã€NATプロキシモードã®ãƒãƒ¼ãƒˆã‚’転é€ã§ã®åå°„ã«ã‚‚é©ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:434 +#: usr/local/www/system_advanced_firewall.php:496 +#: usr/local/www/system_advanced_firewall.php:497 +#: usr/local/www/system_advanced_firewall.php:497 +msgid "Enable NAT Reflection for 1:1 NAT" +msgstr "1時01分ã€NATã®NATリフレクションを有効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_firewall.php:437 +#: usr/local/www/system_advanced_firewall.php:499 +#: usr/local/www/system_advanced_firewall.php:500 +#: usr/local/www/system_advanced_firewall.php:500 +msgid "" +"Enables the automatic creation of additional NAT redirect rules for access " +"to 1:1 mappings of your external IP addresses from within your internal " +"networks." +msgstr "内部ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å†…ã‹ã‚‰å¤–部IPアドレスã®1:1マッピングã«ã€Œã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ãƒ«ãƒ¼ãƒ«ã‚’リダイレクトã®è¿½åŠ ã®NATã®è‡ªå‹•作æˆã‚’å¯èƒ½ã«ã—ã¾ã™ã€ 。" + +#: usr/local/www/system_advanced_firewall.php:439 +#: usr/local/www/system_advanced_firewall.php:501 +#: usr/local/www/system_advanced_firewall.php:502 +#: usr/local/www/system_advanced_firewall.php:502 +msgid "" +"Note: Reflection on 1:1 mappings is only for the inbound component of the " +"1:1 mappings. This functions the same as the pure NAT mode for port " +"forwards. For more details, refer to the pure NAT mode description above." +msgstr ""注1:1マッピングã®ãƒªãƒ•レクションã®ã¿ã®ã‚¤ãƒ³ãƒã‚¦ãƒ³ãƒ‰ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã«ã‚る「1:1マッピング。ã“れã¯ã€ãƒãƒ¼ãƒˆ"を転é€ã™ã‚‹ãŸã‚ã®ç´”粋ãªNATモードã¨åŒã˜ã‚ˆã†ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚詳細ã¯ã€ä¸Šè¨˜ã®ç´”粋ãªNATモードã®èª¬æ˜Žã‚’å‚ç…§ã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_advanced_firewall.php:445 +#: usr/local/www/system_advanced_firewall.php:507 +#: usr/local/www/system_advanced_firewall.php:508 +#: usr/local/www/system_advanced_firewall.php:508 +msgid "Enable automatic outbound NAT for Reflection" +msgstr "リフレクションã®è‡ªå‹•発信NATを有効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_firewall.php:450 +#: usr/local/www/system_advanced_firewall.php:512 +#: usr/local/www/system_advanced_firewall.php:513 +#: usr/local/www/system_advanced_firewall.php:513 +msgid "" +"Required for full functionality of the pure NAT mode of NAT Reflection for " +"port forwards or NAT Reflection for 1:1 NAT." +msgstr "ãƒãƒ¼ãƒˆã«è»¢é€ã¾ãŸã¯1:1 NAT用ã®NATåå°„ã€ã®NATリフレクションã®ç´”粋ãªNATモードã®å…¨æ©Ÿèƒ½ã«å¿…è¦ãª"。" + +#: usr/local/www/system_advanced_firewall.php:452 +#: usr/local/www/system_advanced_firewall.php:514 +#: usr/local/www/system_advanced_firewall.php:515 +#: usr/local/www/system_advanced_firewall.php:515 +msgid "" +"Note: This only works for assigned interfaces. Other interfaces require " +"manually creating the outbound NAT rules that direct the reply packets back " +"through the router." +msgstr "手動ã§å¿œç­”ãŒãƒ«ãƒ¼ã‚¿ã‚’介ã—ã¦ã€Œé€£ç¶šãƒ‘ケット直接アウトãƒã‚¦ãƒ³ãƒ‰NATルールã®ä½œæˆï¼šã€Œæ³¨æ„ã—ã¦ãã ã•ã„。割り当ã¦ã‚‰ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス用ã®ã¿å‹•作ãã®ä»–ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスãŒå¿…è¦ã§ã™ã€ 。" + +#: usr/local/www/diag_logs_ntpd.php:85 usr/local/www/diag_logs_ntpd.php:86 +#: usr/local/www/diag_logs_ntpd.php:86 +#, php-format +msgid "Last %s NTP log entries" +msgstr "最後%sã®NTPログエントリ" + +#: usr/local/www/firewall_aliases_edit.php:468 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/firewall_aliases_edit.php:492 +#: usr/local/www/firewall_aliases_edit.php:478 +msgid "" +"Enter as many hosts as you would like. Hosts must be specified by their IP " +"address or fully qualified domain name (FQDN). FQDN hostnames are " +"periodically re-resolved and updated. If multiple IPs are returned by a DNS " +"query, all are used." +msgstr "「ã‚ãªãŸãŒæœ›ã‚“ã§ã„ã‚‹ã»ã©å¤šãã®ãƒ›ã‚¹ãƒˆã‚’入力ã—ã¾ã™ã€‚ホストãŒIPã‚¢ãƒ‰ãƒ¬ã‚¹ã§æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã¾ãŸã¯å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³å(FQDN ) 。 FQDNホストåã¯ã€ã‚¯ã‚¨ãƒªã€ã™ã¹ã¦ãŒä½¿ç”¨ã•れã¦ã„る「定期的ã«è¤‡æ•°ã®IPアドレスãŒDNSã«ã‚ˆã£ã¦è¿”ã•れãŸå ´åˆã€‚å†è§£æ±ºã•ã‚Œã€æ›´æ–°ã•れる〠。" + +#: usr/local/www/firewall_aliases_edit.php:590 +#: usr/local/www/firewall_aliases_edit.php:593 +#: usr/local/www/firewall_aliases_edit.php:624 +#: usr/local/www/firewall_aliases_edit.php:610 +msgid "" +"The name of the alias may only consist of the characters "a-z, A-Z, 0-9 and " +"_"." +msgstr "AZ 〠AZ,0-9ã€ãŠã‚ˆã³"_""エイリアスã®åå‰ãŒæ–‡å­—ã®ã¿ã§æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãる〠。" + +#: usr/local/www/system_advanced_admin.php:470 +#: usr/local/www/system_advanced_admin.php:470 +msgid "Disable password login for Secure Shell (RSA/DSA key only)" +msgstr "セキュアシェルã®ãƒ‘スワードログインを無効(RSA / DSAéµã®å ´åˆã®ã¿ï¼‰" + +#: usr/local/www/pkg_mgr_installed.php:113 usr/local/www/diag_confbak.php:154 +#: usr/local/www/pkg_mgr_installed.php:115 +#: usr/local/www/pkg_mgr_installed.php:115 +#: usr/local/www/widgets/widgets/system_information.widget.php:92 +#: usr/local/www/diag_confbak.php:154 +msgid "Version" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³" + +#: usr/local/www/pkg_mgr_installed.php:197 +#: usr/local/www/pkg_mgr_installed.php:199 +#: usr/local/www/pkg_mgr_installed.php:199 +msgid "Click on " +msgstr "をクリックã—ã¾ã™" + +#: usr/local/www/pkg_mgr_installed.php:205 +#: usr/local/www/pkg_mgr_installed.php:208 +#: usr/local/www/pkg_mgr_installed.php:210 +#: usr/local/www/pkg_mgr_installed.php:210 +msgid "Remove " +msgstr "削除ã™ã‚‹" + +#: usr/local/www/pkg_mgr_installed.php:209 +#: usr/local/www/pkg_mgr_installed.php:212 +#: usr/local/www/pkg_mgr_installed.php:215 +#: usr/local/www/pkg_mgr_installed.php:214 +#: usr/local/www/pkg_mgr_installed.php:217 +#: usr/local/www/pkg_mgr_installed.php:214 +#: usr/local/www/pkg_mgr_installed.php:217 +msgid "Reinstall " +msgstr "å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹" + +#: usr/local/www/system_advanced_notifications.php:262 +#: usr/local/www/system_advanced_notifications.php:262 +msgid "System Sounds" +msgstr "システムサウンド" + +#: usr/local/www/system_advanced_notifications.php:265 +#: usr/local/www/system_advanced_notifications.php:265 +msgid "Startup/Shutdown Sound" +msgstr "èµ·å‹•/åœæ­¢éŸ³" + +#: usr/local/www/system_advanced_notifications.php:268 +#: usr/local/www/system_advanced_notifications.php:268 +msgid "Disable the startup/shutdown beep" +msgstr "èµ·å‹•/åœæ­¢ãƒ“ープ音を無効ã«ã™ã‚‹" + +#: usr/local/www/system_advanced_notifications.php:270 +#: usr/local/www/system_advanced_notifications.php:270 +msgid "When this is checked, startup and shutdown sounds will no longer play." +msgstr "ã“れをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€èµ·å‹•ã¨ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã®éŸ³ã¯ã€ã‚‚ã¯ã‚„å†ç”Ÿã•れã¾ã›ã‚“。" + +#: usr/local/www/status_rrd_graph.php:146 +#: usr/local/www/status_rrd_graph.php:151 +#: usr/local/www/status_rrd_graph.php:151 +msgid "Invalid start date/time:" +msgstr "無効ãªé–‹å§‹æ—¥/時間:" + +#: usr/local/www/status_rrd_graph.php:159 +#: usr/local/www/status_rrd_graph.php:164 +#: usr/local/www/status_rrd_graph.php:164 +msgid "Invalid end date/time:" +msgstr "無効ãªçµ‚了日/時間:" + +#: usr/local/www/status_rrd_graph.php:509 +#: usr/local/www/status_rrd_graph.php:544 +#: usr/local/www/status_rrd_graph.php:544 +msgid "Enter date and/or time. Current timezone:" +msgstr "日付ãŠã‚ˆã³/ã¾ãŸã¯æ™‚刻を入力ã—ã¾ã™ã€‚ç¾åœ¨ã®ã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ï¼š" + +#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:125 +#: usr/local/www/status_ntpd.php:131 usr/local/www/status_ntpd.php:131 +msgid "Ref ID" +msgstr "REF ID" + +#: usr/local/www/status_ntpd.php:110 usr/local/www/status_ntpd.php:126 +#: usr/local/www/status_ntpd.php:132 usr/local/www/status_ntpd.php:132 +msgid "Stratum" +msgstr "地層" + +#: usr/local/www/status_ntpd.php:112 usr/local/www/status_ntpd.php:128 +#: usr/local/www/status_ntpd.php:134 usr/local/www/status_ntpd.php:134 +msgid "When" +msgstr "時" + +#: usr/local/www/status_ntpd.php:113 usr/local/www/status_ntpd.php:129 +#: usr/local/www/status_ntpd.php:135 usr/local/www/status_ntpd.php:135 +msgid "Poll" +msgstr "世論調査" + +#: usr/local/www/status_ntpd.php:114 usr/local/www/status_ntpd.php:130 +#: usr/local/www/status_ntpd.php:136 usr/local/www/status_ntpd.php:136 +msgid "Reach" +msgstr "リーãƒ" + +#: usr/local/www/status_ntpd.php:116 usr/local/www/status_ntpd.php:132 +#: usr/local/www/status_ntpd.php:138 usr/local/www/status_ntpd.php:138 +msgid "Offset" +msgstr "オフセット" + +#: usr/local/www/status_ntpd.php:117 usr/local/www/status_ntpd.php:133 +#: usr/local/www/status_ntpd.php:139 usr/local/www/status_ntpd.php:139 +msgid "Jitter" +msgstr "ジッタ" + +#: usr/local/www/firewall_rules.php:790 usr/local/www/firewall_rules.php:783 +#: usr/local/www/firewall_rules.php:784 usr/local/www/firewall_rules.php:784 +msgid "No floating rules are currently defined." +msgstr "ã„ã„ãˆæµ®å‹•ルールã¯ã€ç¾åœ¨å®šç¾©ã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:316 +#: usr/local/www/system_advanced_misc.php:320 +#: usr/local/www/system_advanced_misc.php:367 +#: usr/local/www/system_advanced_misc.php:367 +msgid "" +"Successive connections will be redirected to the servers in a round-robin " +"manner with connections from the same source being sent to the same web " +"server. This 'sticky connection' will exist as long as there are states that " +"refer to this connection. Once the states expire, so will the sticky " +"connection. Further connections from that host will be redirected to the " +"next web server in the round robin. Changing this option will restart the " +"Load Balancing service." +msgstr "åŒã˜Webã«é€ä¿¡ã•れã€åŒã˜é€ä¿¡å…ƒã‹ã‚‰ã®æŽ¥ç¶šã‚’æŒã¤æ–¹æ³•「連続接続ã¯ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ンã®ã‚µãƒ¼ãƒã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•れã€ã€Œã“ã®æŽ¥ç¶šã‚’å‚ç…§ã—ã¦ã€ã€Œã‚µãƒ¼ãƒã€‚ã“ã®ã€Œã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ¼æŽ¥ç¶šã¯ã€ 「é™ã‚Šã¨ã„ã†çŠ¶æ…‹ãŒã‚るよã†ã«å­˜åœ¨ã™ã‚‹ã“ã¨ã«ãªã‚‹ã€ ã€‚çŠ¶æ…‹ã¯æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¨ã€ãã®ã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ãƒ³ã®æ¬¡ã®Webサーãƒã€æŽ¥ç¶šã€‚ãã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®ã•らãªã‚‹æŽ¥ç¶šã¯ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•れã¾ã™ã€ã«ãªã‚Šã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションを変更ã™ã‚‹ã¨ã€ 「ロードãƒãƒ©ãƒ³ã‚·ãƒ³ã‚°ã‚µãƒ¼ãƒ“スをå†èµ·å‹•ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:308 +#: usr/local/www/system_advanced_misc.php:327 +#: usr/local/www/system_advanced_misc.php:331 +#: usr/local/www/system_advanced_misc.php:378 +#: usr/local/www/system_advanced_misc.php:378 +msgid "" +"Set the source tracking timeout for sticky connections. By default this is " +"0, so source tracking is removed as soon as the state expires. Setting this " +"timeout higher will cause the source/destination relationship to persist for " +"longer periods of time." +msgstr "「スティッキー接続ã®é€ä¿¡å…ƒã®è¿½è·¡ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’設定ã—ã¾ã™ã€‚デフォルトã§ã¯ã€ã“れã¯ã€Œ 0ãŸã‚ã€ã‚½ãƒ¼ã‚¹ã®è¿½è·¡ã¨ã™ãçŠ¶æ…‹ãŒæœŸé™åˆ‡ã‚Œã«ãªã£ãŸã¨ã—ã¦é™¤åŽ»ã•れる。ã“ã®è¨­å®šã¯ã€ã‚ˆã‚Šé•·ã„期間「タイムアウト高ãã—ã¦é€ä¿¡å…ƒ/é€ä¿¡å…ˆã®é–¢ä¿‚ãŒæŒç¶šã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€ 。" + +#: usr/local/www/system_advanced_misc.php:336 +#: usr/local/www/system_advanced_misc.php:355 +#: usr/local/www/system_advanced_misc.php:359 +#: usr/local/www/system_advanced_misc.php:367 +#: usr/local/www/system_advanced_misc.php:406 +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:406 +#: usr/local/www/system_advanced_misc.php:414 +msgid "Hiadaptive" +msgstr "Hiadaptive" + +#: usr/local/www/system_advanced_misc.php:337 +#: usr/local/www/system_advanced_misc.php:356 +#: usr/local/www/system_advanced_misc.php:360 +#: usr/local/www/system_advanced_misc.php:368 +#: usr/local/www/system_advanced_misc.php:407 +#: usr/local/www/system_advanced_misc.php:415 +#: usr/local/www/system_advanced_misc.php:407 +#: usr/local/www/system_advanced_misc.php:415 +msgid "Adaptive" +msgstr "é©å¿œåž‹" + +#: usr/local/www/system_advanced_misc.php:338 +#: usr/local/www/system_advanced_misc.php:357 +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:369 +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:416 +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:416 +msgid "Minimum" +msgstr "最å°" + +#: usr/local/www/system_advanced_misc.php:339 +#: usr/local/www/system_advanced_misc.php:358 +#: usr/local/www/system_advanced_misc.php:362 +#: usr/local/www/system_advanced_misc.php:370 +#: usr/local/www/system_advanced_misc.php:409 +#: usr/local/www/system_advanced_misc.php:417 +#: usr/local/www/system_advanced_misc.php:409 +#: usr/local/www/system_advanced_misc.php:417 +msgid "Maximum" +msgstr "最大" + +#: usr/local/www/system_advanced_misc.php:342 +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:373 +#: usr/local/www/system_advanced_misc.php:420 +#: usr/local/www/system_advanced_misc.php:420 +msgid "" +"The powerd utility monitors the system state and sets various power control " +"options accordingly. It offers four modes (maximum, minimum, adaptive and " +"hiadaptive) that can be individually selected while on AC power or " +"batteries. The modes maximum, minimum, adaptive and hiadaptive may be " +"abbreviated max, min, adp, hadp. Maximum mode chooses the highest " +"performance values. Minimum mode selects the lowest performance values to " +"get the most power savings. Adaptive mode attempts to strike a balance by " +"degrading performance when the system appears idle and increasing it when " +"the system is busy. It offers a good balance between a small performance " +"loss for greatly increased power savings. Hiadaptive mode is alike adaptive " +"mode, but tuned for systems where performance and interactivity are more " +"importantthan power consumption. It rises frequency faster, drops slower " +"andkeeps twice lower CPU load." +msgstr "「パワードユーティリティã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã®çŠ¶æ…‹ã‚’ç›£è¦–ã—ã€æ§˜ã€…ãªé›»åŠ›åˆ¶å¾¡ã«è¨­å®šã€ã¯ã€ãれã«å¿œã˜ã¦ã‚ªãƒ—ションを。ã“れã¯ã€ãƒãƒƒãƒ†ãƒªãƒ¼ã€Œå€‹åˆ¥ã®ACé›»æºã¾ãŸã¯ã‚ªãƒ³ã—ãªãŒã‚‰ã€é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼ˆ hiadaptive 4ã¤ã®ãƒ¢ãƒ¼ãƒ‰ã€æœ€å¤§å€¤ã€æœ€å°å€¤ã€é©å¿œã¨ï¼‰ã€ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚ãƒ¢ãƒ¼ãƒ‰æœ€å¤§å€¤ã€æœ€å°å€¤ã€é©å¿œã¨hiadaptiveã¯ã€Œæœ€å¤§ã€æœ€å°ã€ ADP 〠hadpã‚’çŸ­ç¸®ã€‚æœ€å¤§ãƒ¢ãƒ¼ãƒ‰ã¯æœ€é«˜é¸ã¶ã€ã“ã¨ãŒãƒ‘フォーマンス値を。最å°ãƒ¢ãƒ¼ãƒ‰ãŒã€Œæœ€ã‚‚節電効果ãŒå¾—られã¾ã™ã€‚é©å¿œãƒ¢ãƒ¼ãƒ‰ãŒã§ãƒãƒ©ãƒ³ã‚¹ã‚’å–ã‚‹ã—よã†ã¨ã—ãŸã€ã«ã€æœ€ã‚‚低ã„ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹å€¤ã‚’é¸æŠžã—ã¦ã€ã‚·ã‚¹ãƒ†ãƒ ãŒã‚¢ã‚¤ãƒ‰ãƒ«çŠ¶æ…‹ã®è¡¨ç¤ºã•れãŸã¨ãã«ãƒ‘フォーマンスを低下ã•ã›ã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ãŒãƒ“ジー状態ã®ã¨ãã«ã€ŒãれãŒå¤§ãããªã‚‹ã€‚ã“れã¯ã€å°ã•ãªãƒ‘フォーマンスã®é–“ã®è‰¯å¥½ãªãƒãƒ©ãƒ³ã‚¹ã‚’æä¾›ã—ã¦ã„ã¾ã™å¤§å¹…ã«å¢—加ã—ã€é›»åŠ›ã®ç¯€ç´„ã®ãŸã‚ã€ã®æå¤±ã€‚ Hiadaptiveモードをå•ã‚ãšã€é©å¿œåž‹ã€ãƒ¢ãƒ¼ãƒ‰ãŒã€ãƒ‘フォーマンスã¨ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–性をよりアールシステム用ã«èª¿æ•´ã•れãŸã€ã§ã‚ã‚‹importantthan消費電力。ãれã¯ã€å‘¨æ³¢æ•°é€Ÿã上昇ã—ã€é…ããªã‚‹ã€ andkeepså€ä½Žã„CPUè² è·ãŒä½Žä¸‹ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_shaper_vinterface.php:204 +#: usr/local/www/firewall_shaper_vinterface.php:228 +#: usr/local/www/firewall_shaper_vinterface.php:205 +#: usr/local/www/firewall_shaper_vinterface.php:230 +#: usr/local/www/firewall_shaper_vinterface.php:205 +#: usr/local/www/firewall_shaper_vinterface.php:230 +msgid "You cannot name a child queue with the same name as a parent limiter" +msgstr "ã‚ãªãŸã¯ã€è¦ªãƒªãƒŸãƒƒã‚¿ã¨åŒã˜åå‰ã®å­ã‚­ãƒ¥ãƒ¼ã«åå‰ã‚’付ã‘ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/diag_routes.php:72 usr/local/www/diag_routes.php:73 +#: usr/local/www/diag_routes.php:73 +msgid "" +"By enabling name resolution, the query should take a bit longer. You can " +"stop it at any time by clicking the Stop button in your browser." +msgstr "åå‰è§£æ±ºã‚’å¯èƒ½ã«ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚¯ã‚¨ãƒªã¯å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚‹ã¯ãšã§ã™ã€‚ãŠä½¿ã„ã®ãƒ–ラウザã§ã€[åœæ­¢]ボタンをクリックã™ã‚‹ã¨ã€ã„ã¤ã§ã‚‚ãã‚Œã‚’åœæ­¢ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/status_dhcpv6_leases.php:481 +#: usr/local/www/status_dhcpv6_leases.php:482 +#: usr/local/www/status_dhcpv6_leases.php:485 +#: usr/local/www/status_dhcpv6_leases.php:485 +msgid "IPv6 Prefix" +msgstr "IPv6ã®ãƒ—レフィックス" + +#: usr/local/www/services_captiveportal.php:465 +#: usr/local/www/services_captiveportal.php:463 +#: usr/local/www/services_captiveportal.php:481 +#: usr/local/www/services_captiveportal.php:481 +msgid "" +"This setting limits the number of concurrent connections to the captive " +"portal HTTP(S) server. This does not set how many users can be logged in to " +"the captive portal, but rather how many users can load the portal page or " +"authenticate at the same time! Possible setting allowed is: minimum 4 " +"connections per client IP address, with a total maximum of 100 connections." +msgstr "ãƒãƒ¼ã‚¿ãƒ«HTTP(S )サーãƒã€Œã“ã®è¨­å®šã§ã¯ã€ã‚­ãƒ£ãƒ—ティブã¸ã®åŒæ™‚接続数を制é™ã—ã¾ã™ã€ 。ã“れã¯ã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãるユーザー数ã¯è¨­å®šã—ã¾ã›ã‚“ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã®ã§ã¯ãªãã€ã©ã®ã‚ˆã†ã«å¤šãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒãƒ¼ã‚¿ãƒ«Â·ãƒšãƒ¼ã‚¸ã‚’ロードã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã€ã€ŒåŒã˜æ™‚é–“ã« ã§èªè¨¼ï¼è¨±å¯ã•れãŸå¯èƒ½æ€§ã®è¨­å®šã¯ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚クライアントã®IPアドレスã”ã¨ã«æœ€å°4 "ã®æŽ¥ç¶šã€ 100接続ã®åˆè¨ˆã€æœ€å¤§ã€‚" + +#: usr/local/www/services_captiveportal.php:602 +#: usr/local/www/services_captiveportal.php:600 +#: usr/local/www/services_captiveportal.php:601 +#: usr/local/www/services_captiveportal.php:617 +#: usr/local/www/services_captiveportal.php:617 +msgid "Radius Protocol" +msgstr "åŠå¾„プロトコル" + +#: usr/local/www/services_captiveportal.php:611 +#: usr/local/www/services_captiveportal.php:609 +#: usr/local/www/services_captiveportal.php:610 +#: usr/local/www/services_captiveportal.php:626 +#: usr/local/www/services_captiveportal.php:626 +msgid "CHAP_MD5" +msgstr "CHAP_MD5" + +#: usr/local/www/services_captiveportal.php:615 +#: usr/local/www/services_captiveportal.php:613 +#: usr/local/www/services_captiveportal.php:614 +#: usr/local/www/services_captiveportal.php:630 +#: usr/local/www/services_captiveportal.php:630 +msgid "MSCHAPv1" +msgstr "MSCHAPv1ã®" + +#: usr/local/www/services_captiveportal.php:619 +#: usr/local/www/services_captiveportal.php:617 +#: usr/local/www/services_captiveportal.php:618 +#: usr/local/www/services_captiveportal.php:634 +#: usr/local/www/services_captiveportal.php:634 +msgid "MSCHAPv2" +msgstr "MSCHAPv2ã®" + +#: usr/local/www/system_gateways_edit.php:389 +#: usr/local/www/system_gateways_edit.php:495 +#: usr/local/www/system_gateways_edit.php:497 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/system_gateways_edit.php:527 +msgid "Choose the Internet Protocol this gateway uses." +msgstr "ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ãŒä½¿ç”¨ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ—ãƒ­ãƒˆã‚³ãƒ«ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/system_gateways_edit.php:490 +msgid "" +"This defines how often that an icmp probe will be sent in seconds. Default " +"is 1." +msgstr "1ã§ã‚ã‚‹"ã“れã¯ã©ã®ãらã„ã®é »åº¦ã§ã€ICMPãƒ—ãƒ­ãƒ¼ãƒ–ã¯æ•°ç§’ã§é€ä¿¡ã•れるã“ã¨ã§ã€ãƒ‡ãƒ•ォルト定義〠。" + +#: usr/local/www/system_gateways_edit.php:491 +#: usr/local/www/system_gateways_edit.php:597 +#: usr/local/www/system_gateways_edit.php:601 +#: usr/local/www/system_gateways_edit.php:603 +#: usr/local/www/system_gateways_edit.php:633 +#: usr/local/www/system_gateways_edit.php:633 +msgid "" +"NOTE: The quality graph is averaged over seconds, not intervals, so as the " +"frequency probe is increased the accuracy of the quality graph is decreased." +msgstr ""注:ãªã‚‹ã‚ˆã†ã«å“質ã®ã‚°ãƒ©ãƒ•ã¯ã€ç§’ã§ã¯ãªãã€é–“éš”ã«ã‚ãŸã£ã¦å¹³å‡åŒ–ã•れã€ã€Œé«˜å‘¨æ³¢ãƒ—ローブã€å“質グラフã®ç²¾åº¦ã‚’増加ã•ãŒæ¸›å°‘ã™ã‚‹ã€‚" + +#: usr/local/www/system_gateways_edit.php:500 +msgid "" +"This defines the number of bad probes before the alarm will fire. Default is " +"10." +msgstr "「アラームãŒèµ·å‹•ã•れるå‰ã«ã€ã“ã‚Œã¯æ‚ªã„ãƒ—ãƒ­ãƒ¼ãƒ–ã®æ•°ã‚’定義ã—ã¾ã™ã€‚デフォルト㯠"10 。" + +#: usr/local/www/system_gateways_edit.php:505 +msgid "" +"NOTE: The total time before a gateway is down is the product of the " +"Frequency Probe and the Down fields. By default this is 1*10=10 seconds." +msgstr ""注:ゲートウェイã®å‰ã«åˆè¨ˆæ™‚é–“ãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„ã‚‹ã®ç”£ç‰©ã§ã‚る「高周波プローブã¨ä¸‹ã®ãƒ•ィールド。デフォルトã§ã¯ã€ 1 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr 10 = 10ç§’ã§ã™ã€‚" + +#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108 +#: usr/local/www/status_gateways.php:134 +#: usr/local/www/widgets/widgets/gateways.widget.php:73 +#: usr/local/www/widgets/widgets/gateways.widget.php:81 +#: usr/local/www/status_gateways.php:101 usr/local/www/status_gateways.php:109 +#: usr/local/www/status_gateways.php:135 +#: usr/local/www/widgets/widgets/gateways.widget.php:94 +#: usr/local/www/widgets/widgets/gateways.widget.php:103 +#: usr/local/www/widgets/widgets/gateways.widget.php:95 +#: usr/local/www/widgets/widgets/gateways.widget.php:104 +#: usr/local/www/widgets/widgets/gateways.widget.php:95 +#: usr/local/www/widgets/widgets/gateways.widget.php:104 +#: usr/local/www/status_gateways.php:101 usr/local/www/status_gateways.php:109 +#: usr/local/www/status_gateways.php:135 +msgid "Pending" +msgstr "ペンディング" + +#: usr/local/www/status_gateways.php:140 usr/local/www/status_gateways.php:141 +#: usr/local/www/status_gateways.php:141 +msgid "Last check:" +msgstr "最後ã®ãƒã‚§ãƒƒã‚¯ï¼š" + +#: usr/local/www/diag_dump_states.php:145 +#: usr/local/www/diag_dump_states.php:144 +msgid "Current state count" +msgstr "ç¾åœ¨ã®çŠ¶æ…‹ã‚«ã‚¦ãƒ³ãƒˆ" + +#: usr/local/www/diag_dump_states.php:147 +#: usr/local/www/diag_dump_states.php:146 +msgid "Matching filter" +msgstr "マッãƒãƒ³ã‚°ãƒ•ィルタ" + +#: usr/local/www/diag_dump_states.php:155 +#: usr/local/www/diag_dump_states.php:154 +#: usr/local/www/diag_dump_states.php:143 +#: usr/local/www/diag_dump_states.php:143 +msgid "Kill" +msgstr "殺ã™" + +#: usr/local/www/services_dyndns.php:184 usr/local/www/services_dyndns.php:180 +#: usr/local/www/services_dyndns.php:180 +msgid "" +"You can force an update for an IP address on the edit page for that service." +msgstr "「ã‚ãªãŸã¯ã€ãã®ã‚µãƒ¼ãƒ“スã®ç·¨é›†ãƒšãƒ¼ã‚¸ä¸Šã®IPã‚¢ãƒ‰ãƒ¬ã‚¹ã®æ›´æ–°ã‚’強制ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:299 +#: usr/local/www/vpn_openvpn_server.php:300 +#: usr/local/www/vpn_openvpn_server.php:321 +#: usr/local/www/vpn_openvpn_server.php:321 +msgid "" +"Using a tunnel network and server bridge settings together is not allowed." +msgstr "「一緒ã«ãƒˆãƒ³ãƒãƒ«ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨ã‚µãƒ¼ãƒã®ãƒ–リッジ設定を使用ã™ã‚‹ã“ã¨ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/vpn_openvpn_server.php:302 +#: usr/local/www/vpn_openvpn_server.php:303 +#: usr/local/www/vpn_openvpn_server.php:324 +#: usr/local/www/vpn_openvpn_server.php:324 +msgid "Server Bridge DHCP Start and End must both be empty, or defined." +msgstr "サーãƒãƒ¼æ©‹DHCPé–‹å§‹ã¨çµ‚了ã®ä¸¡æ–¹ã®ç©ºã€ã¾ãŸã¯å®šç¾©ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:304 +#: usr/local/www/vpn_openvpn_server.php:305 +#: usr/local/www/vpn_openvpn_server.php:326 +#: usr/local/www/vpn_openvpn_server.php:326 +msgid "Server Bridge DHCP Start must be an IPv4 address." +msgstr "サーãƒãƒ¼Â·ãƒ–リッジã®DHCPã®é–‹å§‹ã¯ã€IPv4アドレスã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:306 +#: usr/local/www/vpn_openvpn_server.php:307 +#: usr/local/www/vpn_openvpn_server.php:328 +#: usr/local/www/vpn_openvpn_server.php:328 +msgid "Server Bridge DHCP End must be an IPv4 address." +msgstr "サーãƒãƒ¼Â·ãƒ–リッジã®DHCPエンドã¯ã€IPv4アドレスã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:308 +#: usr/local/www/vpn_openvpn_server.php:309 +#: usr/local/www/vpn_openvpn_server.php:330 +#: usr/local/www/vpn_openvpn_server.php:330 +msgid "The Server Bridge DHCP range is invalid (start higher than end)." +msgstr "サーãƒãƒ¼ãƒ–リッジDHCP範囲ã¯ï¼ˆç«¯éƒ¨ã‚ˆã‚Šã‚‚高ã„開始)ã¯ç„¡åйã§ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:1084 +#: usr/local/www/vpn_openvpn_server.php:1112 +#: usr/local/www/vpn_openvpn_server.php:1139 +#: usr/local/www/vpn_openvpn_server.php:1139 +msgid "Bridge DHCP" +msgstr "ブリッジDHCP" + +#: usr/local/www/vpn_openvpn_server.php:1094 +#: usr/local/www/vpn_openvpn_server.php:1122 +#: usr/local/www/vpn_openvpn_server.php:1149 +#: usr/local/www/vpn_openvpn_server.php:1149 +msgid "Allow clients on the bridge to obtain DHCP." +msgstr "æ©‹ã®ä¸Šã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒDHCPã‚’å–å¾—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:1102 +#: usr/local/www/vpn_openvpn_server.php:1130 +#: usr/local/www/vpn_openvpn_server.php:1157 +#: usr/local/www/vpn_openvpn_server.php:1157 +msgid "Bridge Interface" +msgstr "ブリッジインターフェース" + +#: usr/local/www/vpn_openvpn_server.php:1124 +msgid "" +"The interface to which this tap instance will be, bridged. This is not done " +"automatically. You must assign this interface and create the bridge " +"separately. This setting controls which existing IP address and subnet mask " +"are used by OpenVPN for the bridge. Setting this to 'none' will cause the " +"Server Bridge DHCP settings below to be ignored." +msgstr "自動的ã«ã€Œã“ã®ã‚¿ãƒƒãƒ—インスタンスãŒå…ˆã¨ãªã‚‹ã‚¤ãƒ³ã‚¿ãƒ•ェースãŒã€ã“れã¯è¡Œã‚れã¾ã›ã‚“架橋〠。ã‚ãªãŸã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを割り当ã¦ã€ 「別途既存ã®IPアドレスã¨ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€ã“ã®è¨­å®šã‚’制御ã—「ブリッジ用ã®OpenVPNã§ä½¿ç”¨ã•れã¦ã„ã‚‹ãŒã€ãƒ–リッジを作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚' none'ã«ã€ã“れを設定ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã€Œã‚µãƒ¼ãƒãƒ¼Â·ãƒ–リッジDHCP設定ãŒç„¡è¦–ã•れるよã†ã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:1133 +#: usr/local/www/vpn_openvpn_server.php:1161 +#: usr/local/www/vpn_openvpn_server.php:1188 +#: usr/local/www/vpn_openvpn_server.php:1188 +msgid "Server Bridge DHCP Start" +msgstr "サーãƒãƒ¼Â·ãƒ–リッジã®DHCPスタート" + +#: usr/local/www/vpn_openvpn_server.php:1137 +msgid "" +"When using tap mode as multi-point server, you may optionally supply a DHCP " +"range to use on the interface to which this tap instance is bridged. If " +"these settings are left blank, DHCP will be passed through to the LAN, and " +"the interface setting above will be ignored." +msgstr "ã“ã®ã‚¿ãƒƒãƒ—ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒæž¶æ©‹ã•れã¦ã„るよã†ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã§ä½¿ç”¨ã™ã‚‹ç¯„囲「マルãƒãƒã‚¤ãƒ³ãƒˆã‚µãƒ¼ãƒãƒ¼ã¨ã—ã¦ã‚¿ãƒƒãƒ—·モードを使用ã™ã‚‹ã¨ãã¯ã€å¿…è¦ã«å¿œã˜ã¦ã€DHCPを供給ã™ã‚‹ã“ã¨ãŒã§ãる〠。場åˆã¯"ã“れらã®è¨­å®šã¯ç©ºç™½ã®ã¾ã¾ã«ã€ DHCPãŒLANã«é€šéŽã•れ〠「上記ã®è¨­å®šã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯ç„¡è¦–ã•れã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:1146 +#: usr/local/www/vpn_openvpn_server.php:1174 +#: usr/local/www/vpn_openvpn_server.php:1201 +#: usr/local/www/vpn_openvpn_server.php:1201 +msgid "Server Bridge DHCP End" +msgstr "サーãƒãƒ¼Â·ãƒ–リッジã®DHCP終了" + +#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcpv6.php:216 +#: usr/local/www/services_router_advertisements.php:159 +#: usr/local/www/services_dhcp.php:285 usr/local/www/services_dhcpv6.php:201 +#: usr/local/www/services_dhcp_edit.php:230 +#: usr/local/www/services_dhcp.php:266 usr/local/www/services_dhcpv6.php:195 +#: usr/local/www/services_router_advertisements.php:154 +#: usr/local/www/services_dhcp.php:286 +#: usr/local/www/services_router_advertisements.php:154 +#: usr/local/www/services_dhcp_edit.php:230 +#: usr/local/www/services_dhcp.php:286 usr/local/www/services_dhcpv6.php:195 +msgid "A valid domain search list must be specified." +msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³æ¤œç´¢ãƒªã‚¹ãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:685 usr/local/www/services_dhcp.php:861 +#: usr/local/www/services_dhcp_edit.php:427 +#: usr/local/www/services_dhcp.php:875 usr/local/www/services_dhcp.php:895 +#: usr/local/www/services_dhcp_edit.php:427 +#: usr/local/www/services_dhcp.php:895 +msgid "" +"The DHCP server can optionally provide a domain search list. Use the " +"semicolon character as seperator " +msgstr "「 DHCPサーãƒã¯ã€å¿…è¦ã«å¿œã˜ã¦ãƒ‰ãƒ¡ã‚¤ãƒ³æ¤œç´¢ãƒªã‚¹ãƒˆã‚’æä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚使用ã™ã‚‹ã€ SEPERATORã¨ã—ã¦ã‚»ãƒŸã‚³ãƒ­ãƒ³ã‚’" + +#: usr/local/www/services_dhcp.php:735 usr/local/www/services_dhcpv6.php:716 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:647 +#: usr/local/www/services_dhcp.php:930 usr/local/www/services_dhcpv6.php:664 +#: usr/local/www/services_dhcp.php:950 usr/local/www/services_dhcp.php:950 +#: usr/local/www/services_dhcpv6.php:664 +msgid "Time format change" +msgstr "時刻形å¼ã®å¤‰æ›´" + +#: usr/local/www/services_dhcp.php:744 usr/local/www/services_dhcp.php:925 +#: usr/local/www/services_dhcp.php:939 usr/local/www/services_dhcp.php:959 +#: usr/local/www/services_dhcp.php:959 +msgid "Change DHCP display lease time from UTC to local time." +msgstr "UTCã‹ã‚‰ç¾åœ°æ™‚刻ã«ã€DHCPã®è¡¨ç¤ºãƒªãƒ¼ã‚¹æ™‚間を変更ã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:932 +msgid "" +"By default DHCP leases are displayed in UTC time. By checking this \n" +"ttttttbox DHCP lease time will be displayed in local time and set to " +"time zone selected. This will be used for all DHCP interfaces lease time." +msgstr "「デフォルトã®DHCPã§ãƒªãƒ¼ã‚¹ã¯UTC時間ã§è¡¨ç¤ºã•れã¾ã™ã€‚ã“ã®\nã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ã§ã€Œ ttttttboxã®DHCPリース時間ã¯ã€é¸æŠžã—ãŸã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ã€ã‚’ç¾åœ°æ™‚é–“ã§è¡¨ç¤ºã•れã€è¨­å®šã•れã¾ã™ã€‚ã“れã¯ã€ã™ã¹ã¦ã®DHCPインターフェイスã®ãƒªãƒ¼ã‚¹æ™‚é–“ã®ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/load_balancer_virtual_server_edit.php:92 +#: usr/local/www/load_balancer_virtual_server_edit.php:92 +msgid "" +"The port must be an integer between 1 and 65535, a port alias, or left blank." +msgstr "「ãƒãƒ¼ãƒˆã¯1 〜65535ã®æ•´æ•°ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã€ã¾ãŸã¯å·¦ç©ºç™½ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/load_balancer_virtual_server_edit.php:95 +#: usr/local/www/load_balancer_virtual_server_edit.php:95 +#, php-format +msgid "%s is not a valid IP address, IPv4 subnet, or alias." +msgstr "%sã¯æœ‰åйãªIPアドレス〠IPv4サブãƒãƒƒãƒˆã€ã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_virtual_server_edit.php:97 +#: usr/local/www/load_balancer_virtual_server_edit.php:97 +#, php-format +msgid "%s is a subnet containing more than 64 IP addresses." +msgstr "%sã¯64以上ã®IPアドレスをå«ã‚€ã‚µãƒ–ãƒãƒƒãƒˆã§ã™ã€‚" + +#: usr/local/www/load_balancer_virtual_server_edit.php:173 +#: usr/local/www/load_balancer_virtual_server_edit.php:171 +#: usr/local/www/load_balancer_virtual_server_edit.php:171 +msgid "" +"You may also specify a host alias listed in Firewall -> Aliases here." +msgstr "ã“ã¡ã‚‰u003eエイリアス - "ã‚ãªãŸã¯ã€ãƒ•ァイアウォールã«è¨˜è¼‰ã•れã¦ã„るホストã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" + +#: usr/local/www/load_balancer_virtual_server_edit.php:187 +#: usr/local/www/load_balancer_virtual_server_edit.php:185 +#: usr/local/www/load_balancer_virtual_server_edit.php:185 +msgid "If left blank, listening ports from the pool will be used." +msgstr "プールã‹ã‚‰ã®ãƒãƒ¼ãƒˆãŒä½¿ç”¨ã•れã¾ã™èžã„ã¦ã€ç©ºç™½ã®ã¾ã¾ã«ã—ãŸå ´åˆã€‚" + +#: usr/local/www/load_balancer_virtual_server_edit.php:188 +#: usr/local/www/load_balancer_pool_edit.php:216 +#: usr/local/www/load_balancer_virtual_server_edit.php:186 +#: usr/local/www/load_balancer_pool_edit.php:214 +#: usr/local/www/load_balancer_virtual_server_edit.php:186 +#: usr/local/www/load_balancer_pool_edit.php:214 +msgid "" +"You may also specify a port alias listed in Firewall -> Aliases here." +msgstr "ã“ã¡ã‚‰u003eエイリアス - "ã‚ãªãŸã¯ã€ãƒ•ァイアウォールã«è¨˜è¼‰ã•れã¦ã„ã‚‹ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" + +#: usr/local/www/system_hasync.php:96 usr/local/www/system_hasync.php:97 +#: usr/local/www/system_hasync.php:97 +msgid "High Availability Sync" +msgstr "高å¯ç”¨æ€§åŒæœŸ" + +#: usr/local/www/services_ntpd.php:86 usr/local/www/services_ntpd.php:92 +#: usr/local/www/services_ntpd.php:92 +msgid "NTP Server Configuration" +msgstr "NTPサーãƒã®è¨­å®š" + +#: usr/local/www/interfaces_bridge_edit.php:391 +#: usr/local/www/interfaces_bridge_edit.php:392 +#: usr/local/www/interfaces_bridge_edit.php:393 +#: usr/local/www/interfaces_bridge_edit.php:396 +#: usr/local/www/interfaces_bridge_edit.php:396 +msgid "" +"Set the Spanning Tree priority of interface to value. The default is 128. " +"The minimum is 0 and the maximum is 240. Increments of 16." +msgstr "「値ã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ã‚¹ãƒ‘ニングツリー優先度を設定ã—ã¾ã™ã€‚デフォルトã¯128ã§ã™ã€‚ 「最å°å€¤ã¯0ã§ã€æœ€å¤§å€¤ã¯240ã§ã™ã€‚ 16ãšã¤å¢—加。" + +#: usr/local/www/diag_packet_capture.php:172 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:235 +#: usr/local/www/diag_packet_capture.php:235 +msgid "Select the protocol to capture, or Any." +msgstr "キャプãƒãƒ£ã™ã‚‹ãƒ—ロトコルã€ã¾ãŸã¯ã™ã¹ã¦ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:245 +#: usr/local/www/diag_packet_capture.php:292 +#: usr/local/www/diag_packet_capture.php:310 +#: usr/local/www/diag_packet_capture.php:310 +msgid "View Capture" +msgstr "ビューキャプãƒãƒ£ãƒ¼" + +#: usr/local/www/system_camanager.php:420 +#: usr/local/www/system_camanager.php:427 +#: usr/local/www/system_camanager.php:427 +msgid "Serial for next certificate" +msgstr "次ã®è¨¼æ˜Žæ›¸ã®ã‚·ãƒªã‚¢ãƒ«" + +#: usr/local/www/system_camanager.php:423 +#: usr/local/www/system_camanager.php:430 +#: usr/local/www/system_camanager.php:430 +msgid "" +"Enter a decimal number to be used as the serial number for the next " +"certificate to be created using this CA." +msgstr "ã“ã®CAを使用ã—ã¦ä½œæˆã•れる証明書ã®ã€Œæ¬¡ã®ã‚·ãƒªã‚¢ãƒ«ç•ªå·ã¨ã—ã¦ä½¿ç”¨ã•れる進数を入力ã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/vpn_ipsec_phase2.php:140 +#: usr/local/www/vpn_ipsec_phase2.php:141 +#: usr/local/www/vpn_ipsec_phase2.php:163 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +msgid "Invalid Local Network." +msgstr "無効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:140 +#: usr/local/www/vpn_ipsec_phase2.php:141 +#: usr/local/www/vpn_ipsec_phase2.php:163 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +msgid "has no subnet." +msgstr "何ã®ã‚µãƒ–ãƒãƒƒãƒˆãŒã‚りã¾ã›ã‚“。" + +#: usr/local/www/firewall_nat_edit.php:233 +#: usr/local/www/firewall_nat_edit.php:238 +#: usr/local/www/firewall_nat_edit.php:243 +#: usr/local/www/firewall_nat_edit.php:243 +#, php-format +msgid "" +"A valid local port must be specified. It must be a port alias or integer " +"between 1 and 65535." +msgstr "「有効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒ¼ãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。" + +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_nat_edit.php:792 +#: usr/local/www/firewall_nat_edit.php:787 +#: usr/local/www/firewall_nat_edit.php:799 +#: usr/local/www/firewall_nat_edit.php:800 +#: usr/local/www/firewall_nat_edit.php:800 +msgid "Use system default" +msgstr "システムã®ãƒ‡ãƒ•ォルトを使用ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:463 usr/local/www/interfaces.php:460 +#: usr/local/www/interfaces.php:448 usr/local/www/interfaces.php:453 +#: usr/local/www/interfaces.php:449 usr/local/www/interfaces.php:449 +msgid "" +"This interface is referenced by IPv4 VIPs. Please delete those before " +"setting the interface to 'none' configuration." +msgstr "「ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã¯ã€IPv4ã®VIPã‹ã‚‰å‚ç…§ã•れã¦ã„る。å‰ã«ã€ã“れらを削除ã—ã¦ãã ã•ã„"'none'ã«è¨­å®šã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを設定ã™ã‚‹ã€‚" + +#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:513 +#: usr/local/www/interfaces.php:501 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:502 usr/local/www/interfaces.php:502 +msgid "" +"This interface is referenced by IPv6 VIPs. Please delete those before " +"setting the interface to 'none' configuration." +msgstr "「ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã¯ã€IPv6ã®VIPã‹ã‚‰å‚ç…§ã•れã¦ã„る。å‰ã«ã€ã“れらを削除ã—ã¦ãã ã•ã„"'none'ã«è¨­å®šã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを設定ã™ã‚‹ã€‚" + +#: usr/local/www/interfaces.php:526 usr/local/www/interfaces.php:523 +#: usr/local/www/interfaces.php:511 +#, php-format +msgid "You can only have one interface configured as %s or 6to4." +msgstr "ã‚ãªãŸã ã‘ã®1インタフェースãŒ%sã‚„6to4ã®ã‚ˆã†ã«æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:536 usr/local/www/interfaces.php:533 +#: usr/local/www/interfaces.php:521 +#, php-format +msgid "You can only have one interface configured as %s or 6rd." +msgstr "ã‚ãªãŸã ã‘ã®1インタフェースãŒ%sã¾ãŸã¯6RDã¨ã—ã¦è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:546 +#: usr/local/www/interfaces.php:534 usr/local/www/interfaces.php:541 +#: usr/local/www/interfaces.php:537 usr/local/www/interfaces.php:537 +msgid "You must enter a valid hexadecimal number for the IPv6 prefix ID." +msgstr "ã‚ãªãŸã¯ã€ IPv6プレフィックスIDã«å¯¾ã—ã¦æœ‰åйãª16進数を入力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:550 +#: usr/local/www/interfaces.php:538 usr/local/www/interfaces.php:545 +#: usr/local/www/interfaces.php:541 usr/local/www/interfaces.php:541 +msgid "You specified an IPv6 prefix ID that is out of range." +msgstr "ã‚ãªãŸãŒç¯„囲外ã§ã™IPv6プレフィックスIDを指定。" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158 +msgid "SLAAC" +msgstr "SLAAC" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158 +msgid "6rd Tunnel" +msgstr "6RDトンãƒãƒ«" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158 +msgid "6to4 Tunnel" +msgstr "ã®6to4トンãƒãƒ«" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158 +msgid "Track Interface" +msgstr "トラックインターフェイス" + +#: usr/local/www/interfaces.php:1411 usr/local/www/interfaces.php:1399 +#: usr/local/www/interfaces.php:1412 usr/local/www/interfaces.php:1455 +#: usr/local/www/interfaces.php:1450 usr/local/www/interfaces.php:1450 +msgid "" +"If you leave this field blank, the adapter's default MTU will be used. This " +"is typically 1500 bytes but can vary in some circumstances." +msgstr "「ã“ã®ãƒ•ィールドを空白ã®ã¾ã¾ã«ã™ã‚‹ã¨ã€ã‚¢ãƒ€ãƒ—ã‚¿ã®ãƒ‡ãƒ•ォルトã®MTUãŒä½¿ç”¨ã•れã¾ã™ã€‚ã“れã¯ã€ã€Œé€šå¸¸ã€ 1500ãƒã‚¤ãƒˆã§ã™ãŒã€ã„ãã¤ã‹ã®çжæ³ã§å¤‰åŒ–ã™ã‚‹ã“ã¨ãŒã§ãる。" + +#: usr/local/www/interfaces.php:1768 usr/local/www/interfaces.php:1756 +#: usr/local/www/interfaces.php:1774 usr/local/www/interfaces.php:1820 +#: usr/local/www/interfaces.php:1812 usr/local/www/interfaces.php:1812 +msgid "6RD Rapid Deployment" +msgstr "6RDã®Rapid Deployment" + +#: usr/local/www/interfaces.php:1771 usr/local/www/interfaces.php:1759 +#: usr/local/www/interfaces.php:1777 usr/local/www/interfaces.php:1823 +#: usr/local/www/interfaces.php:1815 usr/local/www/interfaces.php:1815 +msgid "6RD prefix" +msgstr "6RDプレフィックス" + +#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1763 +#: usr/local/www/interfaces.php:1781 usr/local/www/interfaces.php:1827 +#: usr/local/www/interfaces.php:1819 usr/local/www/interfaces.php:1819 +msgid "" +"The value in this field is the 6RD IPv6 prefix assigned by your ISP. e.g. " +"'2001:db8::/32'" +msgstr ""ã“ã®ãƒ•ィールドã®å€¤ã¯ã€ ISPã‹ã‚‰å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸ6RD IPv6プレフィックスã§ã‚ã‚‹ãªã©ã€‚ 「'2001 : DB8:: / 32 ã€" + +#: usr/local/www/interfaces.php:1779 usr/local/www/interfaces.php:1767 +#: usr/local/www/interfaces.php:1785 usr/local/www/interfaces.php:1831 +#: usr/local/www/interfaces.php:1823 usr/local/www/interfaces.php:1823 +msgid "6RD Border Relay" +msgstr "6RDボーダーリレー" + +#: usr/local/www/interfaces.php:1783 usr/local/www/interfaces.php:1771 +#: usr/local/www/interfaces.php:1789 usr/local/www/interfaces.php:1835 +#: usr/local/www/interfaces.php:1827 usr/local/www/interfaces.php:1827 +msgid "" +"The value in this field is 6RD IPv4 gateway address assigned by your ISP" +msgstr ""ã“ã®ãƒ•ィールドã®å€¤ã¯ã€ ISPã‹ã‚‰å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸ6RD IPv4ゲートウェイアドレスã§ã™" + +#: usr/local/www/interfaces.php:1787 usr/local/www/interfaces.php:1775 +#: usr/local/www/interfaces.php:1793 usr/local/www/interfaces.php:1839 +#: usr/local/www/interfaces.php:1831 usr/local/www/interfaces.php:1831 +msgid "6RD IPv4 Prefix length" +msgstr "6RD IPv4ã®ãƒ—レフィックス長" + +#: usr/local/www/interfaces.php:1799 usr/local/www/interfaces.php:1787 +#: usr/local/www/interfaces.php:1805 usr/local/www/interfaces.php:1851 +#: usr/local/www/interfaces.php:1843 usr/local/www/interfaces.php:1843 +msgid "" +"The value in this field is the 6RD IPv4 prefix length. Normally specified by " +"the ISP. A value of 0 means we embed the entire IPv4 address in the 6RD " +"prefix." +msgstr ""ã“ã®ãƒ•ィールドã®å€¤ã¯6RDã®IPv4プレフィックス長ã§ã‚ã‚‹ã€‚é€šå¸¸ã§æŒ‡å®šã•れãŸã€ŒISP 。 0ã®å€¤ã¯ã€æˆ‘々ãŒ6RD "接頭全体ã®IPv4アドレスを埋ã‚込むã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:1809 usr/local/www/interfaces.php:1797 +#: usr/local/www/interfaces.php:1818 usr/local/www/interfaces.php:1864 +#: usr/local/www/interfaces.php:1856 usr/local/www/interfaces.php:1856 +msgid "Track IPv6 Interface" +msgstr "トラックIPv6インタフェース" + +#: usr/local/www/interfaces.php:1812 usr/local/www/interfaces.php:1800 +#: usr/local/www/interfaces.php:1821 usr/local/www/interfaces.php:1867 +#: usr/local/www/interfaces.php:1859 usr/local/www/interfaces.php:1859 +msgid "IPv6 Interface" +msgstr "IPv6インタフェース" + +#: usr/local/www/interfaces.php:1838 usr/local/www/interfaces.php:1826 +#: usr/local/www/interfaces.php:1847 usr/local/www/interfaces.php:1893 +#: usr/local/www/interfaces.php:1885 usr/local/www/interfaces.php:1885 +msgid "This selects the dynamic IPv6 WAN interface to track for configuration" +msgstr "ã“れã¯ã€æ§‹æˆã®ãŸã‚ã«è¿½è·¡ã™ã‚‹ãŸã‚ã«ã€å‹•çš„ãªIPv6ã®WANã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ã€" + +#: usr/local/www/interfaces.php:1842 usr/local/www/interfaces.php:1830 +#: usr/local/www/interfaces.php:1851 usr/local/www/interfaces.php:1897 +#: usr/local/www/interfaces.php:1889 usr/local/www/interfaces.php:1889 +msgid "IPv6 Prefix ID" +msgstr "IPv6ã®ãƒ—レフィックス番å·" + +#: usr/local/www/interfaces.php:1853 usr/local/www/interfaces.php:1841 +#: usr/local/www/interfaces.php:1862 usr/local/www/interfaces.php:1908 +#: usr/local/www/interfaces.php:1898 usr/local/www/interfaces.php:1898 +msgid "" +"The value in this field is the (Delegated) IPv6 prefix id. This determines " +"the configurable network ID based on the dynamic IPv6 connection" +msgstr ""ã“ã®ãƒ•ィールドã®å€¤ã¯ã€ (委任) IPv6プレフィックスIDã§ã™ã€‚ã“ã‚ŒãŒæ±ºå®šã€Œå‹•çš„ãªIPv6接続ã«åŸºã¥ã„ã¦æ§‹æˆå¯èƒ½ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯IDã‚’" + +#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1843 +#: usr/local/www/interfaces.php:1864 usr/local/www/interfaces.php:1910 +#, php-format +msgid "" +"Enter a hexadecimal value between %x and %x here, or leave blank." +msgstr ""ï¼… xã¨ï¼… Xã“ã“é–“u003cBu003e進u003c / bu003eã®å€¤ã‚’入力ã™ã‚‹ã‹ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2344 +#: usr/local/www/interfaces.php:2374 usr/local/www/interfaces.php:2420 +#: usr/local/www/interfaces.php:2409 usr/local/www/interfaces.php:2409 +msgid "" +"Note: Only required in Access Point mode. If left blank in Ad-hoc or " +"Infrastructure mode, this interface will connect to any available SSID" +msgstr "「注:専用アクセスãƒã‚¤ãƒ³ãƒˆãƒ¢ãƒ¼ãƒ‰ã§å¿…è¦ã¨ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã¾ãŸã¯ã«ç©ºç™½ã®ã¾ã¾ã«ã—ãŸå ´åˆã€ã€Œã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースãŒåˆ©ç”¨å¯èƒ½ãªä»»æ„ã®SSIDã«æŽ¥ç¶šã—ã¾ã™" + +#: usr/local/www/interfaces.php:2576 usr/local/www/interfaces.php:2564 +#: usr/local/www/interfaces.php:2594 usr/local/www/interfaces.php:2640 +#: usr/local/www/interfaces.php:2629 usr/local/www/interfaces.php:2629 +msgid "Secondary 802.1X Authentication Server IP Address" +msgstr "二次802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼ã®IPアドレス" + +#: usr/local/www/interfaces.php:2583 usr/local/www/interfaces.php:2571 +#: usr/local/www/interfaces.php:2601 usr/local/www/interfaces.php:2647 +#: usr/local/www/interfaces.php:2636 usr/local/www/interfaces.php:2636 +msgid "Secondary 802.1X Authentication Server Port" +msgstr "二次802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒˆ" + +#: usr/local/www/interfaces.php:2590 usr/local/www/interfaces.php:2578 +#: usr/local/www/interfaces.php:2608 usr/local/www/interfaces.php:2654 +#: usr/local/www/interfaces.php:2643 usr/local/www/interfaces.php:2643 +msgid "Secondary 802.1X Authentication Server Shared Secret" +msgstr "二次802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼å…±æœ‰ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ" + +#: usr/local/www/vpn_openvpn_client.php:196 +#: usr/local/www/vpn_openvpn_client.php:202 +#: usr/local/www/vpn_openvpn_client.php:220 +#: usr/local/www/vpn_openvpn_client.php:220 +msgid "The bandwidth limit must be a positive numeric value." +msgstr "帯域幅ã®åˆ¶é™ã¯ã€æ­£ã®æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_pool_edit.php:89 +#: usr/local/www/load_balancer_pool_edit.php:89 +msgid "The port must be an integer between 1 and 65535, or a port alias." +msgstr "ãƒãƒ¼ãƒˆã¯1 〜65535ã®æ•´æ•°ã€ã¾ãŸã¯ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_pool_edit.php:98 +#: usr/local/www/load_balancer_pool_edit.php:98 +#, php-format +msgid "%s is not a valid IP address or IPv4 subnet (in "enabled" list)." +msgstr "%sã¯ï¼ˆ 「有効ã€ãƒªã‚¹ãƒˆä¸­ã®ï¼‰æœ‰åйãªIPアドレスã¾ãŸã¯IPv4サブãƒãƒƒãƒˆã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_pool_edit.php:101 +#: usr/local/www/load_balancer_pool_edit.php:101 +#, php-format +msgid "" +"%s is a subnet containing more than 64 IP addresses (in "enabled" list)." +msgstr ""(許å¯ã€ãƒªã‚¹ãƒˆ%sã¯ä¸­ï¼‰ 64以上ã®IPアドレスをå«ã‚€ã‚µãƒ–ãƒãƒƒãƒˆã§ã‚る〠。" + +#: usr/local/www/load_balancer_pool_edit.php:108 +#: usr/local/www/load_balancer_pool_edit.php:108 +#, php-format +msgid "%s is not a valid IP address or IPv4 subnet (in "disabled" list)." +msgstr "%sã¯ï¼ˆ 「無効ã€ãƒªã‚¹ãƒˆä¸­ã®ï¼‰æœ‰åйãªIPアドレスã¾ãŸã¯IPv4サブãƒãƒƒãƒˆã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/load_balancer_pool_edit.php:111 +#: usr/local/www/load_balancer_pool_edit.php:111 +#, php-format +msgid "" +"%s is a subnet containing more than 64 IP addresses (in "disabled" list)." +msgstr ""ï¼ˆç¦æ­¢ã€ãƒªã‚¹ãƒˆ%sã¯ä¸­ï¼‰ 64以上ã®IPアドレスをå«ã‚€ã‚µãƒ–ãƒãƒƒãƒˆã§ã‚る〠。" + +#: usr/local/www/firewall_virtual_ip_edit.php:153 +#: usr/local/www/firewall_virtual_ip_edit.php:152 +#: usr/local/www/firewall_virtual_ip_edit.php:144 +#: usr/local/www/firewall_virtual_ip_edit.php:160 +#: usr/local/www/firewall_virtual_ip_edit.php:160 +#, php-format +msgid "" +"VHID %s is already in use on interface %s. Pick a unique number on this " +"interface." +msgstr "インターフェース「 VHIDã®%sãŒã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã§ã™ã§ã«ä½¿ç”¨ä¸­ã¯ã€ã“ã®ä¸Šã§ä¸€æ„ã®ç•ªå·ã‚’é¸ã‚“ã§%s. 〠。" + +#: usr/local/www/services_snmp.php:391 usr/local/www/services_snmp.php:392 +#: usr/local/www/services_snmp.php:407 usr/local/www/services_snmp.php:407 +msgid "Interface Binding" +msgstr "インターフェイスã®ãƒã‚¤ãƒ³ãƒ‰" + +#: usr/local/www/services_snmp.php:396 usr/local/www/services_snmp.php:397 +#: usr/local/www/services_snmp.php:412 usr/local/www/services_snmp.php:412 +msgid "Bind Interface" +msgstr "ãƒã‚¤ãƒ³ãƒ‰ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス" + +#: usr/local/www/widgets/widgets/smart_status.widget.php:36 +#: usr/local/www/widgets/widgets/smart_status.widget.php:37 +#: usr/local/www/widgets/widgets/smart_status.widget.php:37 +msgid "Drive" +msgstr "ドライブ" + +#: usr/local/www/widgets/widgets/smart_status.widget.php:37 +#: usr/local/www/widgets/widgets/smart_status.widget.php:38 +#: usr/local/www/widgets/widgets/smart_status.widget.php:38 +msgid "Ident" +msgstr "IDENT" + +#: usr/local/www/system.php:418 usr/local/www/system.php:411 +#: usr/local/www/system.php:409 usr/local/www/system.php:409 +msgid "Language" +msgstr "言語" + +#: usr/local/www/system.php:431 usr/local/www/system.php:424 +#: usr/local/www/system.php:422 usr/local/www/system.php:422 +msgid "Choose a language for the webConfigurator" +msgstr "webConfiguratorã®è¨€èªžã‚’é¸æŠž" + +#: usr/local/www/firewall_virtual_ip.php:118 +#: usr/local/www/firewall_virtual_ip.php:115 +#: usr/local/www/firewall_virtual_ip.php:127 +#: usr/local/www/firewall_virtual_ip.php:150 +#: usr/local/www/firewall_virtual_ip.php:150 +msgid "" +"This entry cannot be deleted because it is still referenced by a CARP IP " +"with the description" +msgstr "説明ã«ã€Œãれã¯ã¾ã CARP IPã«ã‚ˆã£ã¦å‚ç…§ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“ã€" + +#: usr/local/www/firewall_virtual_ip.php:124 +#: usr/local/www/firewall_virtual_ip.php:121 +#: usr/local/www/firewall_virtual_ip.php:132 +#: usr/local/www/firewall_virtual_ip.php:155 +#: usr/local/www/firewall_virtual_ip.php:155 +msgid "" +"This entry cannot be deleted because it is still referenced by an IP alias " +"entry with the description" +msgstr "記述ã®ã‚¨ãƒ³ãƒˆãƒªã€Œãれã¯ã¾ã IPエイリアスã«ã‚ˆã£ã¦å‚ç…§ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“ã€" + +#: usr/local/www/services_dhcpv6.php:531 +#: usr/local/www/services_router_advertisements.php:277 +#: usr/local/www/services_router_advertisements.php:272 +#: usr/local/www/services_router_advertisements.php:272 +#, php-format +msgid "Select the Operating Mode for the Router Advertisement (RA) Daemon." +msgstr "ルーター通知(RA )デーモンã®ãŸã‚ã®å‹•ä½œãƒ¢ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6.php:532 +#: usr/local/www/services_router_advertisements.php:278 +#: usr/local/www/services_router_advertisements.php:273 +#: usr/local/www/services_router_advertisements.php:273 +#, php-format +msgid "" +"Use "Router Only" to only advertise this router, "Unmanaged" for Router " +"Advertising with Stateless Autoconfig, "Managed" for assignment through " +"(a) DHCPv6 Server, "Assisted" for DHCPv6 Server assignment combined with " +"Stateless Autoconfig" +msgstr "を通ã˜ã¦å‰²ã‚Šå½“ã¦ã«ã€Œç®¡ç†ã€ ã€ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹è‡ªå‹•設定ã¨åºƒå‘Šã€Œãƒ«ãƒ¼ã‚¿ã®ãŸã‚ã«ã€ 〠ã€å®£ä¼ã ã‘ã«ã€ã“ã®ãƒ«ãƒ¼ã‚¿ã‚’「ステートレス自動設定ã€ã¨çµ„ã¿åˆã‚ã›ãŸDHCPv6サーãƒã®å‰²ã‚Šå½“ã¦ã®ãŸã‚ã®ã€Œæ”¯æ´ã€ ( A ) DHCPv6サーãƒã‚’〠「管ç†å¯¾è±¡å¤–ã®ãƒ«ãƒ¼ã‚¿"を使用ã€" + +#: usr/local/www/services_dhcpv6.php:533 +#: usr/local/www/services_router_advertisements.php:279 +#: usr/local/www/services_router_advertisements.php:274 +#: usr/local/www/services_router_advertisements.php:274 +#, php-format +msgid "" +"It is not required to activate this DHCPv6 server when set to "Managed", " +"this can be another host on the network" +msgstr "マãƒãƒ¼ã‚¸ãƒ‰ã€ã«è¨­å®šã™ã‚‹ã¨ã€ã“ã®DHCPv6サーãƒã‚’活性化ã™ã‚‹ãŸã‚ã«å¿…è¦ã¨ã•れã¦ã„ãªã„""〠"ã“れã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã®åˆ¥ã®ãƒ›ã‚¹ãƒˆã«ãªã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/services_dhcpv6.php:537 +#: usr/local/www/services_router_advertisements.php:283 +#: usr/local/www/services_router_advertisements.php:278 +#: usr/local/www/services_router_advertisements.php:278 +msgid "Router Priority" +msgstr "ルータプライオリティ" + +#: usr/local/www/services_dhcpv6.php:544 +#: usr/local/www/services_router_advertisements.php:290 +#: usr/local/www/services_router_advertisements.php:285 +#: usr/local/www/services_router_advertisements.php:285 +#, php-format +msgid "Select the Priority for the Router Advertisement (RA) Daemon." +msgstr "ルーター通知(RA )デーモンã®ãŸã‚ã®å„ªå…ˆåº¦ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6.php:558 +#: usr/local/www/services_router_advertisements.php:304 +#: usr/local/www/services_router_advertisements.php:299 +#: usr/local/www/services_router_advertisements.php:299 +msgid "RA Interface" +msgstr "RAインタフェース" + +#: usr/local/www/services_dhcpv6.php:566 +#: usr/local/www/services_router_advertisements.php:312 +#: usr/local/www/services_router_advertisements.php:307 +#: usr/local/www/services_router_advertisements.php:307 +#, php-format +msgid "Select the Interface for the Router Advertisement (RA) Daemon." +msgstr "ルーター通知(RA )デーモンã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6.php:653 usr/local/www/services_dhcpv6.php:584 +msgid "prefix delegation size" +msgstr "接頭語委譲サイズ" + +#: usr/local/www/services_dhcpv6.php:662 usr/local/www/services_dhcpv6.php:593 +#: usr/local/www/services_dhcpv6.php:610 usr/local/www/services_dhcpv6.php:610 +msgid "" +"You can define a Prefix range here for DHCP Prefix Delegation. This allows " +"for \n" +"tttttassigning networks to subrouters. The start and end of the range " +"must end on boundaries of the prefix delegation size." +msgstr "\nã¯ã€ã€Œã‚ãªãŸã¯ã€DHCPプレフィックス委任ã®ãŸã‚ã«ã“ã“プレフィックス範囲を定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れãŒã§ãる「 〠subroutersã«tttttassigningãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€‚範囲​​ã®å§‹ã‚ã¨çµ‚ã‚りã¯ã€Œãƒ—レフィックス委任サイズã®å¢ƒç•Œã§çµ‚ã‚ã£ã¦ã„ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_dhcpv6.php:685 usr/local/www/services_dhcpv6.php:616 +#: usr/local/www/services_dhcpv6.php:633 usr/local/www/services_dhcpv6.php:633 +msgid "" +"The DHCP server can optionally provide a domain search list. Use the " +"semicolon character as seperator" +msgstr "「 DHCPサーãƒã¯ã€å¿…è¦ã«å¿œã˜ã¦ãƒ‰ãƒ¡ã‚¤ãƒ³æ¤œç´¢ãƒªã‚¹ãƒˆã‚’æä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚使用ã™ã‚‹ã€ SEPERATORã¨ã—ã¦ã‚»ãƒŸã‚³ãƒ­ãƒ³ã‚’" + +#: usr/local/www/services_dhcpv6.php:725 usr/local/www/services_dhcpv6.php:656 +#: usr/local/www/services_dhcpv6.php:673 usr/local/www/services_dhcpv6.php:673 +msgid "Change DHCPv6 display lease time from UTC to local time." +msgstr "UTCã‹ã‚‰ç¾åœ°æ™‚刻ã«DHCPv6ã®è¡¨ç¤ºãƒªãƒ¼ã‚¹æ™‚間を変更ã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:663 +#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:680 +msgid "" +"By default DHCPv6 leases are displayed in UTC time. By checking this \n" +"ttttttbox DHCPv6 lease time will be displayed in local time and set to " +"time zone selected. This will be used for all DHCPv6 interfaces lease time." +msgstr "「デフォルトã§ã®DHCPv6リースã¯UTC時間ã§è¡¨ç¤ºã•れã¾ã™ã€‚ã“ã®\nã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ã§ã€Œ ttttttboxã®DHCPv6ã®ãƒªãƒ¼ã‚¹æ™‚é–“ã¯ç¾åœ°æ™‚é–“ã§è¡¨ç¤ºã•れã€é¸æŠžã•れ㟠"タイムゾーンã«è¨­å®šã•れã¾ã™ã€‚ã“れã¯ã€ã™ã¹ã¦ã®DHCPv6インターフェイスã®ãƒªãƒ¼ã‚¹æ™‚é–“ã®ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:64 etc/inc/priv.defs.inc:64 +msgid "WebCfg - Diagnostics: Sockets page" +msgstr "WebCfg - 診断:ソケットページ" + +#: etc/inc/priv.defs.inc:65 etc/inc/priv.defs.inc:65 +msgid "Allow access to the 'Diagnostics: Sockets' page." +msgstr "ページ:'ソケットã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/config.console.inc:263 etc/inc/config.console.inc:263 +#, php-format +msgid "" +"%sEnter the Optional %s interface name or 'a' for auto-detection%s(or " +"nothing if finished):%s" +msgstr "「 (何も終ã‚ã£ã¦ã„ã‚‹å ´åˆã‚ªãƒ—ション%sインターフェイスåã¾ãŸã¯''自動detection%sã¾ãŸã¯ï¼‰ %sEnter ": %s" + +#: etc/inc/shaper.inc:2909 etc/inc/shaper.inc:2910 etc/inc/shaper.inc:2915 +#: etc/inc/shaper.inc:2983 etc/inc/shaper.inc:3041 +#, php-format +msgid "Bandwidth for schedule %s must be an integer." +msgstr "スケジュール%sã®ãŸã‚ã®å¸¯åŸŸå¹…ã¯ã€æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: etc/inc/shaper.inc:2915 etc/inc/shaper.inc:2916 etc/inc/shaper.inc:2921 +#: etc/inc/shaper.inc:2989 etc/inc/shaper.inc:3047 +msgid "You need to specify a schedule for every additional entry" +msgstr "ã‚ãªãŸã¯ã™ã¹ã¦ã®è¿½åŠ ã®ã‚¨ãƒ³ãƒˆãƒªã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: etc/inc/shaper.inc:2917 etc/inc/shaper.inc:2918 etc/inc/shaper.inc:2923 +#: etc/inc/shaper.inc:2991 etc/inc/shaper.inc:3049 +msgid "If more than one bandwidth configured all schedules need to be selected" +msgstr "複数ã®å¸¯åŸŸå¹…ãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€ã™ã¹ã¦ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒ" + +#: etc/inc/shaper.inc:2919 etc/inc/shaper.inc:2920 etc/inc/shaper.inc:2925 +#: etc/inc/shaper.inc:2993 etc/inc/shaper.inc:3051 +msgid "At least one bw specification is necessary" +msgstr "å°‘ãªãã¨ã‚‚一ã¤ã®ä½“é‡ä»•様ãŒå¿…è¦ã§ã‚ã‚‹" + +#: etc/inc/shaper.inc:3200 etc/inc/shaper.inc:3201 etc/inc/shaper.inc:3208 +#: etc/inc/shaper.inc:3276 etc/inc/shaper.inc:3332 +msgid "add another schedule" +msgstr "ä»–ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’追加" + +#: etc/inc/functions.inc:94 etc/inc/functions.inc:94 +msgid "Acknowledge All Notices" +msgstr "ã™ã¹ã¦ã®é€šçŸ¥ã‚’èªã‚ã‚‹" + +#: etc/inc/functions.inc:95 etc/inc/functions.inc:95 +msgid "Click to Acknowledge" +msgstr "確èªã™ã‚‹]をクリックã—ã¾ã™" + +#: etc/inc/functions.inc:113 etc/inc/functions.inc:113 +msgid "unread notice" +msgstr "未読ã®é€šçŸ¥" + +#: etc/inc/functions.inc:115 etc/inc/functions.inc:115 +msgid "unread notices" +msgstr "未読ã®é€šçŸ¥" + +#: etc/inc/service-utils.inc:234 etc/inc/service-utils.inc:233 +#: etc/inc/service-utils.inc:250 etc/inc/service-utils.inc:250 +msgid "Router Advertisement Daemon" +msgstr "ルータ通知デーモン" + +#: etc/inc/service-utils.inc:313 etc/inc/service-utils.inc:312 +#: etc/inc/service-utils.inc:329 etc/inc/service-utils.inc:329 +msgid "RIP Daemon" +msgstr "RIPデーモン" + +#: etc/inc/service-utils.inc:413 etc/inc/service-utils.inc:422 +#: etc/inc/service-utils.inc:412 etc/inc/service-utils.inc:421 +#: etc/inc/service-utils.inc:429 etc/inc/service-utils.inc:439 +#: etc/inc/service-utils.inc:432 etc/inc/service-utils.inc:442 +#: etc/inc/service-utils.inc:432 etc/inc/service-utils.inc:442 +#, php-format +msgid "%s Service is" +msgstr "%sサービスã§ã™" + +#: etc/inc/service-utils.inc:447 etc/inc/service-utils.inc:446 +#: etc/inc/service-utils.inc:464 etc/inc/service-utils.inc:467 +#: etc/inc/service-utils.inc:467 +#, php-format +msgid "Restart %sService" +msgstr "リスタート%sService" + +#: etc/inc/service-utils.inc:458 etc/inc/service-utils.inc:457 +#: etc/inc/service-utils.inc:475 etc/inc/service-utils.inc:478 +#: etc/inc/service-utils.inc:478 +#, php-format +msgid "Stop %sService" +msgstr "ストップ%sService" + +#: etc/inc/service-utils.inc:471 etc/inc/service-utils.inc:470 +#: etc/inc/service-utils.inc:491 etc/inc/service-utils.inc:494 +#: etc/inc/service-utils.inc:494 +#, php-format +msgid "Start %sService" +msgstr "%sServiceã‚’é–‹å§‹" + +#: etc/inc/filter.inc:2993 etc/inc/filter.inc:3079 etc/inc/filter.inc:3103 +#: etc/inc/filter.inc:3108 etc/inc/filter.inc:3103 +msgid "Removed 15 minute filter reload for Time Based Rules" +msgstr "時間ベースã®ãƒ«ãƒ¼ãƒ«ã®ãŸã‚ã«å–り外ã•15分ã®ãƒ•ィルターリロード" + +#: usr/local/www/pkg_mgr.php:193 usr/local/www/pkg_mgr.php:196 +#: usr/local/www/pkg_mgr.php:212 +msgid "Click on package name to access its website." +msgstr "åŒç¤¾ã®ã‚¦ã‚§ãƒ–サイトã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€ãƒ‘ッケージåをクリックã—ã¾ã™ã€‚" + +#: usr/local/www/diag_logs_settings.php:276 +#: usr/local/www/diag_logs_settings.php:276 +msgid "Show the applied rule description below or in the firewall log rows." +msgstr "ファイアウォールã®ãƒ­ã‚°ã®è¡Œã®ä¸‹ã¾ãŸã¯ä¸­ã®é©ç”¨ãƒ«ãƒ¼ãƒ«ã®èª¬æ˜Žã‚’表示ã—ã¾ã™ã€‚" + +#: usr/local/www/diag_logs_settings.php:278 +#: usr/local/www/diag_logs_settings.php:278 +msgid "" +"Displaying rule descriptions for all lines in the log might affect " +"performance with large rulessets." +msgstr "大rulessetsã«ã‚ˆã‚‹ãƒ‘フォーマンスã®ã€Œãƒ­ã‚°å†…ã®ã™ã¹ã¦ã®è¡Œã®ãƒ«ãƒ¼ãƒ«ã®èª¬æ˜Žã‚’表示ã™ã‚‹ã¨ã€å½±éŸ¿ã‚’与ãˆã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:144 +#: usr/local/www/fbegin.inc:144 +msgid "DHCPv6 Server/RA" +msgstr "DHCPv6サーãƒ/ RA" + +#: usr/local/www/fbegin.inc:232 usr/local/www/diag_sockets.php:44 +#: usr/local/www/fbegin.inc:224 usr/local/www/fbegin.inc:224 +#: usr/local/www/diag_sockets.php:44 +msgid "Sockets" +msgstr "ソケット" + +#: usr/local/www/fbegin.inc:419 usr/local/www/fbegin.inc:411 +#: usr/local/www/fbegin.inc:411 +msgid "Help for items on this page" +msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é …ç›®ã®ãƒ˜ãƒ«ãƒ—" + +#: usr/local/www/system_groupmanager.php:472 +#: usr/local/www/system_groupmanager.php:422 +#: usr/local/www/system_groupmanager.php:422 +msgid "" +"Additional webConfigurator groups can be added here. \n" +"tttttttttGroup permissions can be assigned which are inherited by " +"users who are members of the group.\n" +"tttttttttAn icon that appears grey indicates that it is a system " +"defined object.\n" +"tttttttttSome system object properties can be modified but they " +"cannot be deleted." +msgstr "「追加webConfiguratorグループã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ \n 〠tttttttttGroup許å¯ãŒç°è‰²ã€ãれãŒã‚·ã‚¹ãƒ†ãƒ ã€ã«å®šç¾©ã•れãŸã‚ªãƒ–ジェクトã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦è¡¨ç¤ºã•れtttttttttAnアイコン〠group.\nã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚るユーザーã€ã«ç¶™æ‰¿ã•れã¦å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ \n 「 tttttttttSomeシステムオブジェクトã®ãƒ—ロパティを変更ã§ãã¾ã™ãŒã€ãれらã¯ã€Œå‰Šé™¤ã§ãã¾ã›ã‚“。" + +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +msgid "or" +msgstr "ã¾ãŸã¯" + +#: usr/local/www/services_dhcpv6_edit.php:204 +#: usr/local/www/services_dhcpv6_edit.php:207 +#: usr/local/www/services_dhcpv6_edit.php:207 +msgid "If an IPv6 address is entered, the address must be outside of the pool." +msgstr "IPv6アドレスを入力ã™ã‚‹ã¨ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ãƒ—ールã®å¤–ã«ã‚ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚" + +#: usr/local/www/services_dhcpv6_edit.php:206 +#: usr/local/www/services_dhcpv6_edit.php:209 +#: usr/local/www/services_dhcpv6_edit.php:209 +msgid "" +"If no IPv6 address is given, one will be dynamically allocated from the pool." +msgstr "ãªã„IPv6ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã€ 〠1ã¯ã€å‹•çš„ã«ãƒ—ールã‹ã‚‰å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚" + +#: usr/local/www/services_router_advertisements.php:118 +#: usr/local/www/services_router_advertisements.php:117 +#: usr/local/www/services_router_advertisements.php:117 +msgid "" +"Subnets are specified in CIDR format. Select the CIDR mask that pertains to " +"each entry. /128 specifies a single IPv6 host; /64 specifies a normal IPv6 " +"network; etc. If no subnets are specified here, the Router Advertisement " +"(RA) Daemon will advertise to the subnet to which the router's interface is " +"assigned." +msgstr "「サブãƒãƒƒãƒˆã¯CIDRå½¢å¼ã§æŒ‡å®šã•れã¦ã„ã¾ã™ã€‚ã«é–¢é€£ã™ã‚‹CIDRマスクã®é¸æŠžã€ã®å„項目を。 / 128ã¯ã€å˜ä¸€ã®IPv6ホストを指定ã—〠/ 64ã¯ã€é€šå¸¸ã®IPv6を指定ã™ã‚‹ã€Œãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯;ãªã©ãªãサブãƒãƒƒãƒˆãŒã€ã“ã“ã§æŒ‡å®šã•れã¦ã„ãªã„å ´åˆã¯ã€ãƒ«ãƒ¼ã‚¿ãƒ¼åºƒå‘Šã€ ( RA )デーモンã¯ãƒ«ãƒ¼ã‚¿ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースãŒ"割り当ã¦ã‚‰ã‚Œã¦ã„るサブãƒãƒƒãƒˆã«ã‚¢ãƒ‰ãƒã‚¿ã‚¤ã‚ºã—ã¾ã™ã€‚" + +#: usr/local/www/services_router_advertisements.php:149 +#: usr/local/www/services_router_advertisements.php:144 +#: usr/local/www/services_router_advertisements.php:144 +#, php-format +msgid "An invalid subnet or alias was specified. [%s/%s]" +msgstr "無効ãªã‚µãƒ–ãƒãƒƒãƒˆã¾ãŸã¯åˆ¥åãŒæŒ‡å®šã•れã¾ã—ãŸã€‚ ( ( %s / %s ) )" + +#: usr/local/www/services_router_advertisements.php:194 +#: usr/local/www/services_router_advertisements.php:189 +#: usr/local/www/services_router_advertisements.php:189 +msgid "Router advertisements" +msgstr "ルータ通知" + +#: usr/local/www/services_router_advertisements.php:318 +#: usr/local/www/services_router_advertisements.php:313 +#: usr/local/www/services_router_advertisements.php:313 +msgid "RA Subnet(s)" +msgstr "RAã®ã‚µãƒ–ãƒãƒƒãƒˆï¼ˆ S )" + +#: usr/local/www/services_router_advertisements.php:384 +#: usr/local/www/services_router_advertisements.php:379 +#: usr/local/www/services_router_advertisements.php:379 +msgid "" +"The RA server can optionally provide a domain search list. Use the semicolon " +"character as seperator" +msgstr "「 RAサーãƒã¯ã€å¿…è¦ã«å¿œã˜ã¦ãƒ‰ãƒ¡ã‚¤ãƒ³æ¤œç´¢ãƒªã‚¹ãƒˆã‚’æä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚セミコロンã®ä½¿ç”¨ã€ SEPERATORãªã©ã®æ–‡å­—ã‚’" + +#: usr/local/www/services_router_advertisements.php:392 +#: usr/local/www/services_router_advertisements.php:387 +#: usr/local/www/services_router_advertisements.php:387 +msgid "Use same settings as DHCPv6 server" +msgstr "DHCPv6サーãƒã¨åŒã˜è¨­å®šã‚’使用ã™ã‚‹" + +#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94 +#: usr/local/www/vpn_ipsec_phase2.php:475 +#: usr/local/www/vpn_ipsec_phase1.php:498 usr/local/www/vpn_ipsec.php:148 +#: usr/local/www/vpn_ipsec_phase1.php:519 +#: usr/local/www/vpn_ipsec_phase2.php:497 usr/local/www/vpn_ipsec.php:148 +#: usr/local/www/vpn_ipsec_phase1.php:519 usr/local/www/vpn_ipsec_keys.php:94 +#: usr/local/www/vpn_ipsec_phase2.php:497 +msgid "Pre-Shared Keys" +msgstr "事å‰å…±æœ‰ã‚­ãƒ¼" + +#: usr/local/www/system_usermanager_settings_test.php:78 +#: usr/local/www/system_usermanager_settings_test.php:78 +#, php-format +msgid "Testing %s LDAP settings... One moment please..." +msgstr "テストã§ã¯ã€ LDAP設定を%s...ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..." + +#: usr/local/www/vpn_ipsec_mobile.php:149 +#: usr/local/www/vpn_ipsec_mobile.php:149 +msgid "A valid split DNS domain list must be specified." +msgstr "有効ãªã‚¹ãƒ—リットDNSドメインリストを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_mobile.php:505 +#: usr/local/www/vpn_ipsec_mobile.php:505 +msgid "Split DNS" +msgstr "スプリットDNS" + +#: usr/local/www/vpn_ipsec_mobile.php:514 +#: usr/local/www/vpn_ipsec_mobile.php:514 +msgid "" +"Provide a list of split DNS domain names to clients. Enter a comma separated " +"list." +msgstr "「クライアントã¸ã®ã‚¹ãƒ—リットDNSドメインåã®ãƒªã‚¹ãƒˆã‚’æä¾›ã—ã¾ã™ã€‚コンマã§åŒºåˆ‡ã£å…¥åŠ›ã€ãƒªã‚¹ãƒˆã€‚" + +#: usr/local/www/vpn_ipsec_mobile.php:515 +#: usr/local/www/vpn_ipsec_mobile.php:515 +msgid "" +"NOTE: If left blank, and a default domain is set, it will be used for this " +"value." +msgstr ""注:空白ã®ã¾ã¾ã«ã—ã€ãƒ‡ãƒ•ォルトã®ãƒ‰ãƒ¡ã‚¤ãƒ³ãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€ãれã¯ã“ã®ãŸã‚ã«ä½¿ç”¨ã•れる"値。" + +#: usr/local/www/firewall_shaper.php:131 +#: usr/local/www/firewall_shaper_vinterface.php:146 +#: usr/local/www/firewall_shaper.php:131 +#: usr/local/www/firewall_shaper_vinterface.php:146 +msgid "Unable to write config.xml (Access Denied?)" +msgstr "config.xmlã®ã‚’書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“ï¼ˆã‚¢ã‚¯ã‚»ã‚¹ãŒæ‹’å¦ã•れã¾ã—ãŸï¼Ÿï¼‰" + +#: usr/local/www/firewall_rules_edit.php:455 +#: usr/local/www/firewall_rules_edit.php:458 +#: usr/local/www/firewall_rules_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:464 +msgid "" +"Please select a gateway, normaly the interface selected gateway, so the " +"limiters work correctly" +msgstr "ã€Œã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã€æ™®é€šã¯ä»¥ä¸‹ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹é¸æŠžã•れãŸã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã—ã¦ã€ãã®ã‚ˆã†ã«ã—ã¦ãã ã•ã„ã€ãƒªãƒŸãƒƒã‚¿ãƒ¼ãŒæ­£å¸¸ã«å‹•作" + +#: usr/local/www/vpn_ipsec_keys.php:136 usr/local/www/vpn_ipsec_keys.php:136 +msgid "Do you really want to delete this Pre-Shared Key?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®äº‹å‰å…±æœ‰ã‚­ãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:83 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:83 +msgid "A valid domain must be specified after _msdcs." +msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³ã¯_msdcsã®å¾Œã«æŒ‡å®šã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:93 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:93 +msgid "An interface IP address must be specified for the DNS query source." +msgstr "インターフェイスã®IPアドレスã¯ã€ DNSクエリã®ã‚½ãƒ¼ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144 +msgid "Source IP" +msgstr "é€ä¿¡å…ƒIP" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:147 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:147 +msgid "" +"Source IP address for queries to the DNS server for the override domain." +msgstr "オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ãƒ‰ãƒ¡ã‚¤ãƒ³ã®DNSサーãƒã¸ã®ã‚¯ã‚¨ãƒªã®ãŸã‚ã®ã€Œé€ä¿¡å…ƒIPアドレス。" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148 +msgid "Leave blank unless your DNS server is accessed through a VPN tunnel." +msgstr "DNSサーãƒã¯ã€ VPNトンãƒãƒ«ã‚’介ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã•れã¦ã„ãªã„é™ã‚Šã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/system_crlmanager.php:401 +#: usr/local/www/system_crlmanager.php:401 +msgid "Edit Imported Certificate Revocation List" +msgstr "編集インãƒãƒ¼ãƒˆã—ãŸè¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆ" + +#: usr/local/www/system_advanced_firewall.php:206 +#: usr/local/www/system_advanced_firewall.php:235 +#: usr/local/www/system_advanced_firewall.php:235 +msgid "" +"expires idle connections quicker. More efficient use of CPU and memory but " +"can drop legitimate idle connections" +msgstr "ã€Œè¿…é€Ÿã‚¢ã‚¤ãƒ‰ãƒ«çŠ¶æ…‹ã®æŽ¥ç¶šã‚’æœŸé™åˆ‡ã‚Œã«ã—ã¾ã™ã€‚ CPUã¨ãƒ¡ãƒ¢ãƒªãŒã€ã‚ˆã‚ŠåŠ¹çŽ‡çš„ã«ä½¿ç”¨ã€Œåˆæ³•çš„ãªã‚¢ã‚¤ãƒ‰ãƒ«æŽ¥ç¶šã‚’ドロップã™ã‚‹ã“ã¨ãŒã§ãã¾ã™" + +#: usr/local/www/system_advanced_firewall.php:207 +#: usr/local/www/system_advanced_firewall.php:236 +#: usr/local/www/system_advanced_firewall.php:236 +msgid "" +"tries to avoid dropping any legitimate idle connections at the expense of " +"increased memory usage and CPU utilization." +msgstr "メモリ使用é‡ã®å¢—加やCPU使用率ã€ã‚’犠牲ã«ã—ã¦æ­£å½“ãªã‚¢ã‚¤ãƒ‰ãƒ«çŠ¶æ…‹ã®æŽ¥ç¶šã‚’è½ã¨ã•ãªã„よã†ã«ã—よã†ã¨ã—ã¾ã™ã€ 。" + +#: usr/local/www/vpn_pptp.php:297 usr/local/www/vpn_pptp.php:300 +#: usr/local/www/vpn_pptp.php:300 +msgid "" +"PPTP is no longer considered a secure VPN technology because it relies upon " +"MS-CHAPv2 which has been compromised. If you continue to use PPTP be aware " +"that intercepted traffic can be decrypted by a third party, so it should be " +"considered unencrypted. We advise migrating to another VPN type such as " +"OpenVPN or IPsec.

    Read More" +msgstr "侵害ã•れãŸMS - CHAPv2を「ãれãŒä¾å­˜ã—ã¦ã„ã‚‹ã®ã§ã€PPTPã¯ã‚‚ã¯ã‚„安全ãªVPN技術ã¨è¦‹ãªã•れã¦ã„ãªã„〠。ã‚ãªãŸã¯ã€PPTPã‚’æ„è­˜ã™ã‚‹ä½¿ç”¨ã—ç¶šã‘ã‚‹å ´åˆã¯ã€ã€Œãƒˆãƒ©ãƒ•ィックã¯ã€ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è§£èª­ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™å‚å—ã™ã‚‹ã“ã¨ãªã®ã§ã€ã™ã¹ãã§ã‚ã‚‹ã€ ã€æš—å·åŒ–ã•れã¦ã„ãªã„ã¨è€ƒãˆãŸã€‚ç§ãŸã¡ã¯ã€ã“ã®ã‚ˆã†ãªè©³ç´°MS-CHAPv2/13807"u003e読むãŸã‚ã®ã€Œ OpenVPNã®ã‹Days"ã®IPsec.

    ã‚‚ã—ã€ã”href="https://isc.sans.edu/diary/Endã¨ã—ã¦åˆ¥ã®VPNタイプã«ç§»è¡ŒåŠ©è¨€ã™ã‚‹u003c/ A u003e" + +#: usr/local/www/status_ntpd.php:185 usr/local/www/status_ntpd.php:191 +#: usr/local/www/status_ntpd.php:191 +msgid "Clock Latitude" +msgstr "クロック緯度" + +#: usr/local/www/status_ntpd.php:186 usr/local/www/status_ntpd.php:192 +#: usr/local/www/status_ntpd.php:192 +msgid "Clock Longitude" +msgstr "クロック経度" + +#: usr/local/www/system_advanced_misc.php:77 +#: usr/local/www/system_advanced_misc.php:80 +#: usr/local/www/system_advanced_misc.php:84 +#: usr/local/www/system_advanced_misc.php:84 +msgid "AMD Geode LX Security Block" +msgstr "AMDã®Geode LXセキュリティブロック" + +#: usr/local/www/system_advanced_misc.php:78 +#: usr/local/www/system_advanced_misc.php:81 +#: usr/local/www/system_advanced_misc.php:85 +#: usr/local/www/system_advanced_misc.php:85 +msgid "AES-NI CPU-based Acceleration" +msgstr "AES- NIã®CPUベースã®ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³" + +#: usr/local/www/system_advanced_misc.php:80 +#: usr/local/www/system_advanced_misc.php:83 +#: usr/local/www/system_advanced_misc.php:87 +#: usr/local/www/system_advanced_misc.php:87 +msgid "Intel Core* CPU on-die thermal sensor" +msgstr "インテルCore README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr CPUオンダイ熱センサ" + +#: usr/local/www/system_advanced_misc.php:81 +#: usr/local/www/system_advanced_misc.php:84 +#: usr/local/www/system_advanced_misc.php:88 +#: usr/local/www/system_advanced_misc.php:88 +msgid "AMD K8, K10 and K11 CPU on-die thermal sensor" +msgstr "AMD K8 〠K10ãŠã‚ˆã³K11 CPUãŒç†±ã‚»ãƒ³ã‚µã‚’オンダイ" + +#: usr/local/www/system_advanced_misc.php:92 +#: usr/local/www/system_advanced_misc.php:95 +#: usr/local/www/system_advanced_misc.php:99 +#: usr/local/www/system_advanced_misc.php:99 +msgid "Please select a valid Cryptographic Accelerator." +msgstr "æœ‰åŠ¹ãªæš—å·åŒ–ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚¿ã‚’é¸æŠžã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_advanced_misc.php:95 +#: usr/local/www/system_advanced_misc.php:98 +#: usr/local/www/system_advanced_misc.php:102 +#: usr/local/www/system_advanced_misc.php:102 +msgid "Please select a valid Thermal Hardware Sensor." +msgstr "有効ãªç†±ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚»ãƒ³ã‚µãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_advanced_misc.php:380 +#: usr/local/www/system_advanced_misc.php:392 +#: usr/local/www/system_advanced_misc.php:439 +#: usr/local/www/system_advanced_misc.php:439 +msgid "Cryptographic Hardware Acceleration" +msgstr "æš—å·ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³" + +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:395 +#: usr/local/www/system_advanced_misc.php:442 +#: usr/local/www/system_advanced_misc.php:442 +msgid "Cryptographic Hardware" +msgstr "æš—å·ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢" + +#: usr/local/www/system_advanced_misc.php:392 +#: usr/local/www/system_advanced_misc.php:404 +#: usr/local/www/system_advanced_misc.php:451 +#: usr/local/www/system_advanced_misc.php:451 +msgid "" +"A cryptographic accelerator module will use hardware support to speed up " +"some cryptographic functions on systems which have the chip. Do not enable " +"this option if you have a Hifn cryptographic acceleration card, as this will " +"take precedence and the Hifn card will not be used. Acceleration should be " +"automatic for IPsec when using a cipher supported by your chip, such as " +"AES-128. OpenVPN should be set for AES-128-CBC and have cryptodev enabled " +"for hardware acceleration." +msgstr "ãƒãƒƒãƒ—ã‚’æŒã£ã¦ã„るシステムã§ã¯ã€ã„ãã¤ã‹ã®æš—å·æ©Ÿèƒ½ã‚’「暗å·åŒ–アクセラレータモジュールã¯ã€é«˜é€ŸåŒ–ã™ã‚‹ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢Â·ã‚µãƒãƒ¼ãƒˆã‚’使用ã—ã¾ã™ã€ 。優先ã•れ〠hIFNãƒãƒªã‚«ãƒ¼ãƒ‰ã¯ä½¿ç”¨ã•れã¾ã›ã‚“ã€ã“れã¯ã‚ˆã†ã«ã¯ã€ Hifnã®æš—å·åŒ–アクセラレータカードを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションを"有効ã«ã—ãªã„ã§ãã ã•ã„。 AES- 128 ã€ãªã©ã€ãŠä½¿ã„ã®ãƒãƒƒãƒ—ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹æš—å·ã‚’使用ã™ã‚‹å ´åˆã¯ã€ IPsecã®ãŸã‚ã®è‡ªå‹•「加速ãŒãªã‘れã°ãªã‚‰ãªã„。 OpenVPNã®ã¯ã€AES - 128 -CBCã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚り〠cryptodevã¯ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã®ãŸã‚ã®ã€Œæœ‰åйã«ã—ã¦ã„る。" + +#: usr/local/www/system_advanced_misc.php:400 +#: usr/local/www/system_advanced_misc.php:412 +#: usr/local/www/system_advanced_misc.php:459 +#: usr/local/www/system_advanced_misc.php:459 +msgid "" +"If you do not have a crypto chip in your system, this option will have no " +"effect. To unload the selected module, set this option to 'none' and then " +"reboot." +msgstr "効果ã€ã‚’使用ã—ã¦ã„ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã§æš—å·ãƒãƒƒãƒ—ã‚’æŒã£ã¦ã„ãªã„å ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ã‚りã¾ã™ã€ ã€‚é¸æŠžã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’アンロードã™ã‚‹ã«ã¯ã€ 「å†èµ·å‹•ã—ã€' none'ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:420 +#: usr/local/www/system_advanced_misc.php:423 +#: usr/local/www/system_advanced_misc.php:467 +#: usr/local/www/system_advanced_misc.php:470 +#: usr/local/www/system_advanced_misc.php:467 +#: usr/local/www/system_advanced_misc.php:470 +msgid "Thermal Sensors" +msgstr "温度センサ" + +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:426 +#: usr/local/www/system_advanced_misc.php:473 +#: usr/local/www/system_advanced_misc.php:473 +msgid "None/ACPI" +msgstr "ãªã—/ ACPI" + +#: usr/local/www/system_advanced_misc.php:420 +#: usr/local/www/system_advanced_misc.php:432 +#: usr/local/www/system_advanced_misc.php:479 +#: usr/local/www/system_advanced_misc.php:479 +msgid "" +"If you have a supported CPU, selecting a themal sensor will load the " +"appropriate driver to read its temperature. Setting this to 'None' will " +"attempt to read the temperature from an ACPI-compliant motherboard sensor " +"instead, if one is present." +msgstr "ãã®æ¸©åº¦ã‚’読むãŸã‚ã«é©åˆ‡ãªãƒ‰ãƒ©ã‚¤ãƒã€ã¯ã€ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹CPUを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ themalã‚»ãƒ³ã‚µãƒ¼ã‚’é¸æŠžã™ã‚‹ã¨ã€ãƒ­ãƒ¼ãƒ‰ã•れã¾ã™ã€ 。 1ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€Œãªã—ã€ã«è¨­å®šã™ã‚‹ã¨ã€ä»£ã‚りã«ã€Œ ACPI準拠ã®ãƒžã‚¶ãƒ¼ãƒœãƒ¼ãƒ‰ã‚»ãƒ³ã‚µãƒ¼ã‹ã‚‰ã®æ¸©åº¦ã‚’読ã¿å–ã‚ã†ã¨ã€ã—ã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:424 +#: usr/local/www/system_advanced_misc.php:436 +#: usr/local/www/system_advanced_misc.php:483 +#: usr/local/www/system_advanced_misc.php:483 +msgid "" +"If you do not have a supported thermal sensor chip in your system, this " +"option will have no effect. To unload the selected module, set this option " +"to 'none' and then reboot." +msgstr "「ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„る温度センサーãƒãƒƒãƒ—ã‚’æŒã£ã¦ã„ãªã„å ´åˆã¯ã€ã“ã®"オプションã¯ç„¡åйã«ãªã‚Šã¾ã™ã€‚é¸æŠžã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’アンロードã™ã‚‹ã«ã¯ã€' none'ã«"ã“ã®ã‚ªãƒ—ションを設定ã—ã¦å†èµ·å‹•。" + +#: usr/local/www/services_captiveportal.php:173 +#: usr/local/www/services_captiveportal.php:175 +#: usr/local/www/services_captiveportal.php:175 +msgid "Certificate must be specified for HTTPS login." +msgstr "証明書ã¯ã€HTTPSã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:863 +#: usr/local/www/services_captiveportal.php:865 +#: usr/local/www/services_captiveportal.php:881 +#: usr/local/www/services_captiveportal.php:881 +msgid "" +"If enabled, the username and password will be transmitted over an HTTPS " +"connection to protect against eavesdroppers. A server name and certificate " +"must also be specified below." +msgstr "ç›—è´è€…ã‹ã‚‰ä¿è­·ã™ã‚‹ãŸã‚ã®æŽ¥ç¶šã€ã‚’有効ã«ã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードã¯ã€HTTPSを介ã—ã¦é€ä¿¡ã•れã¾ã™ã€ 。サーãƒãƒ¼åã¨è¨¼æ˜Žæ›¸ã€ã‚‚ã€ä»¥ä¸‹ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:886 +#: usr/local/www/services_captiveportal.php:888 +#: usr/local/www/services_captiveportal.php:904 +#: usr/local/www/services_captiveportal.php:904 +msgid "No Certificates defined." +msgstr "定義ã•れãªã„証明書ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:205 +#: usr/local/www/system_gateways_edit.php:235 +#: usr/local/www/system_gateways_edit.php:235 +msgid "The low latency threshold needs to be a numeric value." +msgstr "低レイテンシã®ã—ãã„値ã¯ã€æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:208 +#: usr/local/www/system_gateways_edit.php:238 +#: usr/local/www/system_gateways_edit.php:238 +msgid "The low latency threshold needs to be positive." +msgstr "低レイテンシã®ã—ãã„å€¤ã¯æ­£ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_gateways_edit.php:215 +#: usr/local/www/system_gateways_edit.php:245 +#: usr/local/www/system_gateways_edit.php:245 +msgid "The high latency threshold needs to be a numeric value." +msgstr "高é…å»¶ã—ãã„値ã¯ã€æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:218 +#: usr/local/www/system_gateways_edit.php:248 +#: usr/local/www/system_gateways_edit.php:248 +msgid "The high latency threshold needs to be positive." +msgstr "高é…å»¶ã—ãã„値ãŒé™½æ€§ã§ã‚ã‚‹ã“ã¨ãŒå¿…è¦ã§ã‚る。" + +#: usr/local/www/system_gateways_edit.php:225 +#: usr/local/www/system_gateways_edit.php:255 +#: usr/local/www/system_gateways_edit.php:255 +msgid "The low Packet Loss threshold needs to be a numeric value." +msgstr "低パケットæå¤±ã®ã—ãã„å€¤ã¯æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:228 +#: usr/local/www/system_gateways_edit.php:258 +#: usr/local/www/system_gateways_edit.php:258 +msgid "The low Packet Loss threshold needs to be positive." +msgstr "低パケットæå¤±ã®ã—ãã„å€¤ã¯æ­£ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_gateways_edit.php:231 +#: usr/local/www/system_gateways_edit.php:261 +#: usr/local/www/system_gateways_edit.php:261 +msgid "The low Packet Loss threshold needs to be less than 100." +msgstr "低パケットæå¤±é–¾å€¤ã¯ã€ 100未満ã§ã‚ã‚‹å¿…è¦ãŒã‚る。" + +#: usr/local/www/system_gateways_edit.php:238 +#: usr/local/www/system_gateways_edit.php:268 +#: usr/local/www/system_gateways_edit.php:268 +msgid "The high Packet Loss threshold needs to be a numeric value." +msgstr "高ã„パケットæå¤±ã—ãã„値ã¯ã€æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:241 +#: usr/local/www/system_gateways_edit.php:271 +#: usr/local/www/system_gateways_edit.php:271 +msgid "The high Packet Loss threshold needs to be positive." +msgstr "高ã„パケットæå¤±ã—ãã„å€¤ã¯æ­£ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_gateways_edit.php:244 +#: usr/local/www/system_gateways_edit.php:274 +#: usr/local/www/system_gateways_edit.php:274 +msgid "The high Packet Loss threshold needs to be 100 or less." +msgstr "高パケットæå¤±é–¾å€¤ã¯100以下ã§ã‚ã‚‹ã“ã¨ãŒå¿…è¦ã§ã‚る。" + +#: usr/local/www/system_gateways_edit.php:252 +#: usr/local/www/system_gateways_edit.php:282 +#: usr/local/www/system_gateways_edit.php:282 +msgid "" +"The high latency threshold needs to be higher than the low latency threshold" +msgstr "「高é…å»¶ã—ãã„値ã¯ã€ä½Žãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ãƒ¼é–¾å€¤ã‚ˆã‚Šã‚‚高ã„ã“ã¨ãŒå¿…è¦ã§ã‚ã‚‹" + +#: usr/local/www/system_gateways_edit.php:275 +#: usr/local/www/system_gateways_edit.php:305 +#: usr/local/www/system_gateways_edit.php:305 +msgid "" +"The high Packet Loss threshold needs to be higher than the low Packet Loss " +"threshold" +msgstr "閾値「高パケットæå¤±é–¾å€¤ãŒä½Žã„パケットæå¤±ã‚ˆã‚Šã‚‚高ãã™ã‚‹å¿…è¦ãŒã‚ã‚‹"" + +#: usr/local/www/system_gateways_edit.php:297 +#: usr/local/www/system_gateways_edit.php:327 +#: usr/local/www/system_gateways_edit.php:327 +msgid "The frequency probe interval needs to be a numeric value." +msgstr "é«˜å‘¨æ³¢ãƒ—ãƒ­ãƒ¼ãƒ–é–“éš”ã¯æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:300 +#: usr/local/www/system_gateways_edit.php:330 +#: usr/local/www/system_gateways_edit.php:330 +msgid "The frequency probe interval needs to be positive." +msgstr "é«˜å‘¨æ³¢ãƒ—ãƒ­ãƒ¼ãƒ–é–“éš”ã¯æ­£ã§ã‚ã‚‹å¿…è¦ãŒã‚る。" + +#: usr/local/www/system_gateways_edit.php:307 +#: usr/local/www/system_gateways_edit.php:337 +#: usr/local/www/system_gateways_edit.php:337 +msgid "The down time setting needs to be a numeric value." +msgstr "ダウンタイムã®è¨­å®šã¯æ•°å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_gateways_edit.php:310 +#: usr/local/www/system_gateways_edit.php:340 +#: usr/local/www/system_gateways_edit.php:340 +msgid "The down time setting needs to be positive." +msgstr "åœæ­¢æ™‚é–“ã®è¨­å®šãŒæ­£ã§ã‚ã‚‹å¿…è¦ãŒã‚る。" + +#: usr/local/www/system_gateways_edit.php:318 +#: usr/local/www/system_gateways_edit.php:348 +#: usr/local/www/system_gateways_edit.php:348 +msgid "" +"The Frequency Probe interval needs to be less than the down time setting." +msgstr "「周波数プローブ間隔ã¯ã€ãƒ€ã‚¦ãƒ³æ™‚間設定未満ã§ã‚ã‚‹å¿…è¦ãŒã‚る。" + +#: usr/local/www/system_gateways_edit.php:611 +#: usr/local/www/system_gateways_edit.php:615 +#: usr/local/www/system_gateways_edit.php:617 +#: usr/local/www/system_gateways_edit.php:647 +msgid "" +"NOTE: The Frequency Probe interval must be less than the Down time, " +"otherwise the gateway will seem to go down then come up again at the next " +"probe." +msgstr ""注:高周波プローブ間隔ã¯ãƒ€ã‚¦ãƒ³ã‚¿ã‚¤ãƒ ã‚ˆã‚Šã‚‚å°ã•ããªã‘れã°ãªã‚Šã¾ã›ã‚“〠「ãã†ã§ãªã„ゲートウェイã¯ã€æ¬¡ã®ã€Œãƒ—ローブã§å†ã³å‡ºã¦ãã‚‹ã—ã€ä¸‹ã«è¡Œãよã†ã«è¦‹ãˆã‚‹ã§ã—ょã†ã€‚" + +#: usr/local/www/shortcuts.inc:96 usr/local/www/shortcuts.inc:96 +msgid "Main page for this section" +msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¡ã‚¤ãƒ³ãƒšãƒ¼ã‚¸" + +#: usr/local/www/shortcuts.inc:120 usr/local/www/shortcuts.inc:120 +msgid "Status of items on this page" +msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é …ç›®ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹" + +#: usr/local/www/shortcuts.inc:127 usr/local/www/shortcuts.inc:127 +msgid "Log entries for items on this page" +msgstr "ã“ã®ãƒšãƒ¼ã‚¸ä¸Šã®ã‚¢ã‚¤ãƒ†ãƒ ã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã‚’" + +#: usr/local/www/vpn_openvpn_server.php:1102 +#: usr/local/www/vpn_openvpn_server.php:1129 +#: usr/local/www/vpn_openvpn_server.php:1129 +msgid "" +"This is the IPv6 virtual network used for private communications between " +"this server and client hosts expressed using CIDR (eg. fe80::/64). The first " +"network address will be assigned to the server virtual interface. The " +"remaining network addresses can optionally be assigned to connecting " +"clients. (see Address Pool)" +msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ›ã‚¹ãƒˆã€Œã“れã¯é–“ã®ãƒ—ライベート通信ã«ä½¿ç”¨ã•れるIPv6ã®ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹"(例: FE80:: / 64 ) ã€CIDRを使用ã—ã¦è¡¨ç¾ã€‚最åˆã®ã€Œãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ã‚µãƒ¼ãƒã®ä»®æƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚ 「残りã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€å¿…è¦ã«å¿œã˜ã¦ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æŽ¥ç¶šã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ (アドレスプールをå‚ç…§ã—ã¦ãã ã•ã„)" + +#: usr/local/www/vpn_openvpn_server.php:1152 +#: usr/local/www/vpn_openvpn_server.php:1179 +#: usr/local/www/vpn_openvpn_server.php:1179 +msgid "" +"The interface to which this tap instance will be bridged. This is not done " +"automatically. You must assign this interface and create the bridge " +"separately. This setting controls which existing IP address and subnet mask " +"are used by OpenVPN for the bridge. Setting this to 'none' will cause the " +"Server Bridge DHCP settings below to be ignored." +msgstr "自動的ã«ã€Œã“ã®ã‚¿ãƒƒãƒ—インスタンスをブリッジ先ã¨ãªã‚‹ã‚¤ãƒ³ã‚¿ãƒ•ェースãŒã€ã“れã¯è¡Œã‚れã¦ã„ã¾ã›ã‚“〠。ã‚ãªãŸã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを割り当ã¦ã€ 「別途既存ã®IPアドレスã¨ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€ã“ã®è¨­å®šã‚’制御ã—「ブリッジ用ã®OpenVPNã§ä½¿ç”¨ã•れã¦ã„ã‚‹ãŒã€ãƒ–リッジを作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚' none'ã«ã€ã“れを設定ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã€Œã‚µãƒ¼ãƒãƒ¼Â·ãƒ–リッジDHCP設定ãŒç„¡è¦–ã•れるよã†ã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:1165 +#: usr/local/www/vpn_openvpn_server.php:1192 +#: usr/local/www/vpn_openvpn_server.php:1192 +msgid "" +"When using tap mode as a multi-point server, you may optionally supply a " +"DHCP range to use on the interface to which this tap instance is bridged. If " +"these settings are left blank, DHCP will be passed through to the LAN, and " +"the interface setting above will be ignored." +msgstr "ã“ã®ã‚¿ãƒƒãƒ—インスタンスãŒãƒ–リッジã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã§ä½¿ç”¨ã™ã‚‹ã‚ˆã†ã«DHCP範囲「マルãƒãƒã‚¤ãƒ³ãƒˆã‚µãƒ¼ãƒãƒ¼ã¨ã—ã¦ã‚¿ãƒƒãƒ—·モードを使用ã™ã‚‹ã¨ãã¯ã€å¿…è¦ã«å¿œã˜ã¦ä¾›çµ¦ã™ã‚‹ã“ã¨ãŒã§ãる〠。場åˆã¯"ã“れらã®è¨­å®šã¯ç©ºç™½ã®ã¾ã¾ã«ã€ DHCPãŒLANã«é€šéŽã•れ〠「上記ã®è¨­å®šã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯ç„¡è¦–ã•れã¾ã™ã€‚" + +#: usr/local/www/vpn_openvpn_server.php:1225 +#: usr/local/www/vpn_openvpn_client.php:799 +msgid "IPv4 Remote Network" +msgstr "IPv4ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/vpn_openvpn_server.php:1229 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote " +"LAN here. You may leave this blank if you don't want a site-to-site VPN" +msgstr "「ã“れã¯ãƒˆãƒ³ãƒãƒ«ã‚’経由ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•れるãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹ã€ãã®çµæžœã€ã‚µã‚¤ãƒˆãƒ„ーã€ã‚µã‚¤ãƒˆVPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 「 CIDRã®ç¯„囲ã¨ã—ã¦è¡¨ã•。ã“れã¯ã€ã‚µã‚¤ãƒˆé–“VPNã®å ´åˆã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆå…¥åŠ›ã—「ã“ã“ã«LANã®ã€‚ã‚ãªãŸã¯ã‚µã‚¤ãƒˆé–“VPNを使用ã—ãªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ" + +#: usr/local/www/vpn_openvpn_server.php:1239 +#: usr/local/www/vpn_openvpn_client.php:813 +msgid "IPv6 Remote Network" +msgstr "IPv6ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/vpn_openvpn_server.php:1243 +msgid "" +"This is an IPv6 network that will be routed through the tunnel, so that a " +"site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the " +"remote LAN here. You may leave this blank if you don't want a site-to-site " +"VPN" +msgstr ""ã“れã¯ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•れã€IPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚るよã†ã«ã€ã€Œã‚µã‚¤ãƒˆé–“VPNを手動ã§ã€Œãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«ç¢ºç«‹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ IP /プレフィックスã¨ã—ã¦è¡¨ã•れã¾ã™ã€‚ã“れãŒã‚れã°ã€ã‚µã‚¤ãƒˆãƒ„ーサイト間VPNã¯ã€ã“ã“ã§ã¯ã€ã€Œãƒªãƒ¢ãƒ¼ãƒˆLANを入力ã—ã¦ãã ã•ã„。サイトツーサイト「VPNを使用ã—ãªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ" + +#: usr/local/www/services_dhcp.php:293 usr/local/www/services_dhcp.php:274 +#: usr/local/www/services_dhcp.php:294 usr/local/www/services_dhcp.php:294 +msgid "" +"If you specify a mac allow list, it must contain only valid partial MAC " +"addresses." +msgstr "アドレスã¯ã€Œã‚ãªãŸãŒMacã¯è¨±å¯ãƒªã‚¹ãƒˆã‚’指定ã™ã‚‹ã¨ã€ãれãŒå”¯ä¸€ã®æœ‰åйãªéƒ¨åˆ†çš„ãªMACãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/services_dhcp.php:295 usr/local/www/services_dhcp.php:276 +#: usr/local/www/services_dhcp.php:296 usr/local/www/services_dhcp.php:296 +msgid "" +"If you specify a mac deny list, it must contain only valid partial MAC " +"addresses." +msgstr "アドレスã¯ã€Œã‚ãªãŸã¯MacãŒæ‹’å¦ãƒªã‚¹ãƒˆã‚’指定ã™ã‚‹ã¨ã€ãれãŒå”¯ä¸€ã®æœ‰åйãªéƒ¨åˆ†çš„ãªMACãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcp.php:701 +#: usr/local/www/services_dhcp.php:721 usr/local/www/services_dhcp.php:721 +msgid "" +"Editing Pool-Specific Options. To return to the Interface, click its tab " +"above." +msgstr "プール固有ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’ç·¨é›†ã€‚ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã«æˆ»ã‚‹ã«ã¯ã€ä¸Šè¨˜ã®ã‚¿ãƒ–をクリックã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:775 usr/local/www/services_dhcp.php:785 +#: usr/local/www/services_dhcp.php:805 usr/local/www/services_dhcp.php:805 +msgid "Additional Pools" +msgstr "追加ã®ãƒ—ール" + +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:787 +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcp.php:807 +msgid "" +"If you need additional pools of addresses inside of this subnet outside the " +"above Range, they may be specified here." +msgstr "範囲を超ãˆã‚‹ã€å½¼ã‚‰ãŒã“ã“ã§æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"ã‚ãªãŸãŒå¤–ã§ã“ã®ã‚µãƒ–ãƒãƒƒãƒˆå†…ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã®è¿½åŠ ã®ãƒ—ールãŒå¿…è¦ãªå ´åˆã¯ã€Œ 。" + +#: usr/local/www/services_dhcp.php:780 usr/local/www/services_dhcp.php:790 +#: usr/local/www/services_dhcp.php:810 usr/local/www/services_dhcp.php:810 +msgid "Pool Start" +msgstr "プールスタート" + +#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcp.php:791 +#: usr/local/www/services_dhcp.php:811 usr/local/www/services_dhcp.php:811 +msgid "Pool End" +msgstr "プール終了" + +#: usr/local/www/services_dhcp.php:805 usr/local/www/services_dhcp.php:819 +#: usr/local/www/services_dhcp.php:839 usr/local/www/services_dhcp.php:839 +msgid "Do you really want to delete this pool?" +msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ—ールを削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:971 +#: usr/local/www/services_dhcp.php:991 usr/local/www/services_dhcp.php:991 +msgid "MAC Address Control" +msgstr "MACアドレス管ç†" + +#: usr/local/www/services_dhcp.php:961 usr/local/www/services_dhcp.php:974 +#: usr/local/www/services_dhcp.php:994 usr/local/www/services_dhcp.php:994 +msgid "Show MAC Address Control" +msgstr "ショーã®MACアドレス制御" + +#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcp.php:978 +#: usr/local/www/services_dhcp.php:998 usr/local/www/services_dhcp.php:998 +msgid "" +"Enter a list of partial MAC addresses to allow, comma separated, no spaces, " +"such as " +msgstr "ã®ã‚ˆã†ãªã€Œéƒ¨åˆ†çš„MACアドレスã®ãƒªã‚¹ãƒˆã‚’入力ã™ã‚‹ã¨ã€ã‚«ãƒ³ãƒžåŒºåˆ‡ã‚Šã€ã‚¹ãƒšãƒ¼ã‚¹ãªã—ã«ã€è¨±å¯ã—ãªã„よã†ã«å¯¾å‡¦ã™ã‚‹ã€" + +#: usr/local/www/services_dhcp.php:967 usr/local/www/services_dhcp.php:980 +#: usr/local/www/services_dhcp.php:1000 usr/local/www/services_dhcp.php:1000 +msgid "" +"Enter a list of partial MAC addresses to deny access, comma separated, no " +"spaces, such as " +msgstr "「部分的ãªMACアドレスã®ãƒªã‚¹ãƒˆã‚’入力ã™ã‚‹ã¨ã€ã‚¢ã‚¯ã‚»ã‚¹ã‚’æ‹’å¦ã™ã‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ã‚«ãƒ³ãƒžã§åŒºåˆ‡ã‚‰ã‚Œã€ NOã€ã®ã‚ˆã†ãªç©ºé–“ã‚’ã€" + +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +msgid "You cannot use spaces or slashes in the 'name' field." +msgstr "ã‚ãªãŸã¯ã€ 「åå‰ã€ãƒ•ィールドã«ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚„スラッシュを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/guiconfig.inc:1009 usr/local/www/guiconfig.inc:1024 +#: usr/local/www/guiconfig.inc:1021 usr/local/www/guiconfig.inc:1021 +msgid "move mouse out this alias to hide" +msgstr "éžè¡¨ç¤ºã«ã™ã‚‹ã«ã¯ã€ã“ã®åˆ¥åã‹ã‚‰ãƒžã‚¦ã‚¹ã‚’移動" + +#: usr/local/www/guiconfig.inc:1066 usr/local/www/guiconfig.inc:1081 +#: usr/local/www/guiconfig.inc:1078 usr/local/www/guiconfig.inc:1078 +msgid "edit this alias" +msgstr "ã“ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’編集" + +#: usr/local/www/guiconfig.inc:1077 usr/local/www/guiconfig.inc:1089 +#: usr/local/www/guiconfig.inc:1092 usr/local/www/guiconfig.inc:1104 +#: usr/local/www/guiconfig.inc:1101 usr/local/www/guiconfig.inc:1089 +#: usr/local/www/guiconfig.inc:1101 +msgid "loading..." +msgstr "読ã¿è¾¼ã‚“ã§ã„ã¾ã™..." + +#: usr/local/www/system_firmware_settings.php:175 +#: usr/local/www/system_firmware_settings.php:184 +#: usr/local/www/system_firmware_settings.php:186 +#: usr/local/www/system_firmware_settings.php:186 +msgid "Dashboard check" +msgstr "ダッシュボードã®ãƒã‚§ãƒƒã‚¯" + +#: usr/local/www/system_firmware_settings.php:179 +#: usr/local/www/system_firmware_settings.php:188 +#: usr/local/www/system_firmware_settings.php:190 +#: usr/local/www/system_firmware_settings.php:190 +msgid "Disable the automatic dashboard auto-update check." +msgstr "自動ダッシュボードã®è‡ªå‹•æ›´æ–°ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã—ã¾ã™ã€‚" + +#: usr/local/www/services_ntpd.php:119 usr/local/www/services_ntpd.php:119 +msgid "Interfaces without an IP address will not be shown." +msgstr "IPアドレスをæŒãŸãªã„インタフェースã¯è¡¨ç¤ºã•れã¾ã›ã‚“。" + +#: usr/local/www/services_ntpd.php:121 usr/local/www/services_ntpd.php:121 +msgid "Selecting no interfaces will listen on all interfaces with a wildcard." +msgstr "何ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ãªã„ã¨ã€ãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ã‚’æŒã¤ã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã§å¾…機ã—ã¾ã™ã€‚" + +#: usr/local/www/services_ntpd.php:122 usr/local/www/services_ntpd.php:122 +msgid "" +"Selecting all interfaces will explicitly listen on only the interfaces/IPs " +"specified." +msgstr "指定ã•れãŸã€Œã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã™ã‚‹ã¨ã€æ˜Žç¤ºçš„ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã®ã¿/ IPS上ã§å¾…機ã—ã¾ã™ã€ 。" + +#: usr/local/www/services_ntpd.php:140 usr/local/www/services_ntpd.php:140 +msgid "The GPS must provide NMEA format output!" +msgstr "GPSã¯NMEAå½¢å¼ã®å‡ºåŠ›ã‚’æä¾›ã—ãªã‘れã°ãªã‚‰ãªã„ï¼" + +#: usr/local/www/services_ntpd.php:142 usr/local/www/services_ntpd.php:142 +msgid "" +"All serial ports are listed, be sure to pick only the port with the GPS " +"attached." +msgstr "添付ã®ã€Œã™ã¹ã¦ã®ã‚·ãƒªã‚¢ãƒ«ãƒãƒ¼ãƒˆãŒã€ãƒªã‚¹ãƒˆã•れã¦ã„ã‚‹GPSを専用ãƒãƒ¼ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144 +msgid "It is best to configure at least 2 servers under" +msgstr "ãれãŒä¸‹ã«å°‘ãªãã¨ã‚‚2サーãƒã‚’設定ã™ã‚‹ã®ãŒæœ€é©ã§ã™" + +#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144 +msgid "System > General" +msgstr "システムu003e一般" + +#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144 +msgid "" +"to avoid loss of sync if the GPS data is not valid over time. Otherwise ntpd " +"may only use values from the unsynchronized local clock when providing time " +"to clients." +msgstr "「 GPSãƒ‡ãƒ¼ã‚¿ãŒæ™‚é–“ã‚’ã‹ã‘ã¦æœ‰åйã§ãªã„å ´åˆã€åŒæœŸã®æå¤±ã‚’回é¿ã—ã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã¯ntpdã¯ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸ã®æ™‚é–“ã€ã‚’æä¾›ã™ã‚‹å ´åˆã«ã®ã¿ã€éžåŒæœŸã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¯ãƒ­ãƒƒã‚¯ã®å€¤ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/firewall_aliases.php:177 +#: usr/local/www/firewall_aliases.php:175 +#: usr/local/www/firewall_aliases.php:175 +msgid "Ports" +msgstr "ãƒãƒ¼ãƒˆ" + +#: usr/local/www/firewall_aliases.php:178 +#: usr/local/www/firewall_aliases.php:176 +#: usr/local/www/firewall_aliases.php:176 +msgid "Urls" +msgstr "URLã¯" + +#: usr/local/www/firewall_aliases.php:195 +#: usr/local/www/firewall_aliases.php:272 +#: usr/local/www/firewall_aliases.php:274 +#: usr/local/www/firewall_aliases.php:275 +#: usr/local/www/firewall_aliases.php:195 +#: usr/local/www/firewall_aliases.php:275 +msgid "Add a new alias" +msgstr "æ–°ã—ã„エイリアスを追加ã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_aliases.php:255 +#: usr/local/www/firewall_aliases.php:256 +#: usr/local/www/firewall_aliases.php:257 +#: usr/local/www/firewall_aliases.php:257 +msgid "Edit alias" +msgstr "編集別å" + +#: usr/local/www/firewall_aliases.php:256 +#: usr/local/www/firewall_aliases.php:257 +#: usr/local/www/firewall_aliases.php:258 +#: usr/local/www/firewall_aliases.php:258 +msgid "Delete alias" +msgstr "エイリアスを削除" + +#: usr/local/www/services_captiveportal_zones_edit.php:64 +#: usr/local/www/services_captiveportal_zones_edit.php:64 +msgid "The zone name can only contain letters, digits, and underscores (_)." +msgstr "ゾーンåã«ã¯ã€æ–‡å­—ã€æ•°å­—ã€ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ï¼ˆ _)をå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal_zones_edit.php:105 +#: usr/local/www/services_captiveportal_zones_edit.php:101 +#: usr/local/www/services_captiveportal_zones_edit.php:101 +msgid "Zone name. Can only contain letters, digits, and underscores (_)." +msgstr "ゾーンåã€‚æ–‡å­—ã€æ•°å­—ã€ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ï¼ˆ _)をå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:81 +#: usr/local/www/diag_packet_capture.php:81 +msgid "Invalid interface." +msgstr "無効ãªã‚¤ãƒ³ã‚¿ãƒ•ェース。" + +#: usr/local/www/diag_packet_capture.php:84 +#: usr/local/www/diag_packet_capture.php:84 +msgid "Invalid address family." +msgstr "無効ãªã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ•ァミリ。" + +#: usr/local/www/diag_packet_capture.php:87 +#: usr/local/www/diag_packet_capture.php:87 +msgid "Invalid protocol." +msgstr "無効ãªãƒ—ロトコル。" + +#: usr/local/www/diag_packet_capture.php:92 +#: usr/local/www/diag_packet_capture.php:92 +#, php-format +msgid "A valid IP address or CIDR block must be specified. [%s]" +msgstr "有効ãªIPアドレスã¾ãŸã¯CIDRブロックを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ( ( %s ) )" + +#: usr/local/www/diag_packet_capture.php:97 +#: usr/local/www/diag_packet_capture.php:97 +msgid "Invalid value specified for port." +msgstr "ãƒãƒ¼ãƒˆã«æŒ‡å®šã•れãŸå€¤ãŒç„¡åйã§ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:104 +#: usr/local/www/diag_packet_capture.php:104 +msgid "Invalid value specified for packet length." +msgstr "ãƒ‘ã‚±ãƒƒãƒˆé•·ã«æŒ‡å®šã•れãŸå€¤ãŒç„¡åйã§ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:111 +#: usr/local/www/diag_packet_capture.php:111 +msgid "Invalid value specified for packet count." +msgstr "ãƒ‘ã‚±ãƒƒãƒˆæ•°ã«æŒ‡å®šã•れãŸå€¤ãŒç„¡åйã§ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:148 +#: usr/local/www/vpn_ipsec_phase2.php:152 +#: usr/local/www/vpn_ipsec_phase2.php:152 +msgid "A valid NAT local network bit count must be specified." +msgstr "有効ãªNATã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:150 +#: usr/local/www/vpn_ipsec_phase2.php:154 +#: usr/local/www/vpn_ipsec_phase2.php:154 +msgid "" +"You cannot configure a network type address for NAT while only an address " +"type is selected for local source." +msgstr "ã‚¿ã‚¤ãƒ—ãƒ­ãƒ¼ã‚«ãƒ«ã‚½ãƒ¼ã‚¹ã‚’é¸æŠžã—ãŸ"ã‚ãªãŸã ã‘ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ä¸€æ–¹NATã®ãŸã‚ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯åž‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/vpn_ipsec_phase2.php:153 +#: usr/local/www/vpn_ipsec_phase2.php:157 +#: usr/local/www/vpn_ipsec_phase2.php:157 +msgid "A valid NAT local network IP address must be specified." +msgstr "有効ãªNATã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:548 +#: usr/local/www/vpn_ipsec_phase2.php:569 +#: usr/local/www/vpn_ipsec_phase2.php:569 +msgid "" +"In case you need NAT/BINAT on this network specify the address to be " +"translated" +msgstr "翻訳"ケースã§ã¯ã€å¯¾è±¡ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã—ã€ã“ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§NAT /ã®binatãŒå¿…è¦ã§ã™ã€" + +#: usr/local/www/vpn_ipsec_keys_edit.php:114 +#: usr/local/www/vpn_ipsec_keys_edit.php:114 +msgid "VPN: IPsec: Edit Pre-Shared Key" +msgstr "VPN : IPsecã®ç·¨é›†ï¼šäº‹å‰å…±æœ‰ã‚­ãƒ¼" + +#: usr/local/www/services_dhcp_edit.php:227 +#: usr/local/www/services_dhcp_edit.php:355 +#: usr/local/www/services_dhcp_edit.php:355 +msgid "If an IPv4 address is entered, the address must be outside of the pool." +msgstr "IPv4アドレスを入力ã™ã‚‹ã¨ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ãƒ—ールã®å¤–ã«ã‚ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚" + +#: usr/local/www/services_dhcp_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:357 +#: usr/local/www/services_dhcp_edit.php:357 +msgid "" +"If no IPv4 address is given, one will be dynamically allocated from the pool." +msgstr "ãªã„IPv4ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã€ 〠1ã¯ã€å‹•çš„ã«ãƒ—ールã‹ã‚‰å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:2460 usr/local/www/interfaces.php:2490 +#: usr/local/www/interfaces.php:2536 usr/local/www/interfaces.php:2525 +#: usr/local/www/interfaces.php:2525 +msgid "WPA Pre-Shared Key" +msgstr "WPA事å‰å…±æœ‰ã‚­ãƒ¼" + +#: usr/local/www/vpn_openvpn_client.php:789 +#: usr/local/www/vpn_openvpn_client.php:808 +#: usr/local/www/vpn_openvpn_client.php:808 +msgid "" +"This is the IPv6 virtual network used for private communications between " +"this client and the server expressed using CIDR (eg. fe80::/64). The first " +"network address is assumed to be the server address and the second network " +"address will be assigned to the client virtual interface" +msgstr "ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã‚µãƒ¼ãƒãƒ¼ã®ã€Œã“れã¯é–“ã®ãƒ—ライベート通信ã«ä½¿ç”¨ã•れるIPv6ã®ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹"(例: FE80:: / 64 ) ã€CIDRを使用ã—ã¦è¡¨ç¾ã€‚最åˆã®ã€Œãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ã‚µãƒ¼ãƒã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã‚ã‚‹ã¨ã¿ãªã•れã€ç¬¬äºŒã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"アドレスã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ä»®æƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™" + +#: usr/local/www/vpn_openvpn_client.php:803 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote " +"LAN here. You may leave this blank to only communicate with other clients" +msgstr "「ã“れã¯ãƒˆãƒ³ãƒãƒ«ã‚’経由ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•れるãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹ã€ãã®çµæžœã€ã‚µã‚¤ãƒˆãƒ„ーã€ã‚µã‚¤ãƒˆVPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 「 CIDRã®ç¯„囲ã¨ã—ã¦è¡¨ã•。ã“れã¯ã€ã‚µã‚¤ãƒˆé–“VPNã®å ´åˆã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆå…¥åŠ›ã—「ã“ã“ã«LANã®ã€‚ã‚ãªãŸã ã‘ã®ä»–ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨é€šä¿¡ã™ã‚‹ãŸã‚ã«ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ" + +#: usr/local/www/vpn_openvpn_client.php:817 +msgid "" +"This is an IPv6 network that will be routed through the tunnel, so that a " +"site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the " +"remote LAN here. You may leave this blank to only communicate with other " +"clients" +msgstr ""ã“れã¯ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•れã€IPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚るよã†ã«ã€ã€Œã‚µã‚¤ãƒˆé–“VPNを手動ã§ã€Œãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«ç¢ºç«‹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ IP /プレフィックスã¨ã—ã¦è¡¨ã•れã¾ã™ã€‚ã“れãŒã‚れã°ã€ã‚µã‚¤ãƒˆãƒ„ーサイト間VPNã¯ã€ã“ã“ã§ã¯ã€ã€Œãƒªãƒ¢ãƒ¼ãƒˆLANを入力ã—ã¦ãã ã•ã„。ã‚ãªãŸã ã‘ã®ä»–ã®ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨é€šä¿¡ã™ã‚‹ãŸã‚ã«ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ" + +#: usr/local/www/vpn_l2tp.php:301 usr/local/www/vpn_l2tp.php:304 +#: usr/local/www/vpn_l2tp.php:304 +msgid "Enable L2TP server" +msgstr "L2TPサーãƒã‚’有効ã«ã™ã‚‹" + +#: usr/local/www/vpn_l2tp.php:322 usr/local/www/vpn_l2tp.php:325 +#: usr/local/www/vpn_l2tp.php:325 +msgid "Server Address" +msgstr "サーãƒãƒ¼ã®ã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_l2tp.php:337 +#: usr/local/www/vpn_l2tp.php:337 +msgid "Remote Address Range" +msgstr "リモートアドレス範囲" + +#: usr/local/www/vpn_l2tp.php:384 usr/local/www/vpn_l2tp.php:387 +#: usr/local/www/vpn_l2tp.php:387 +msgid "Authentication Type" +msgstr "èªè¨¼ã‚¿ã‚¤ãƒ—" + +#: usr/local/www/vpn_l2tp.php:429 usr/local/www/vpn_l2tp.php:432 +#: usr/local/www/vpn_l2tp.php:432 +msgid "RADIUS Shared Secret" +msgstr "RADIUS共有シークレット" + +#: usr/local/www/vpn_l2tp.php:436 usr/local/www/vpn_l2tp.php:439 +#: usr/local/www/vpn_l2tp.php:439 +msgid "RADIUS Issued IP's" +msgstr "RADIUSã¯ã€IPã®ç™ºè¡Œ" + +#: usr/local/www/firewall_virtual_ip_edit.php:126 +#: usr/local/www/firewall_virtual_ip_edit.php:128 +#: usr/local/www/firewall_virtual_ip_edit.php:128 +msgid "The /31 and /32 subnet mask are invalid for CARP IPs." +msgstr "/ 31ãŠã‚ˆã³/ 32サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€CARPã®IPアドレスã¯ç„¡åйã§ã™ã€‚" + +#: usr/local/www/firewall_virtual_ip_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:132 +#: usr/local/www/firewall_virtual_ip_edit.php:132 +msgid "The /127 and /128 subnet mask are invalid for CARP IPs." +msgstr "/ 127ãŠã‚ˆã³/ 128サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€CARPã®IPアドレスã¯ç„¡åйã§ã™ã€‚" + +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +#: usr/local/www/interfaces_gif.php:141 +msgid "" +"If you are using a GIF tunnel to connect to a Hurricane Electric (he.net) " +"Tunnel Broker on a WAN with a dynamic IP, you may want to add a" +msgstr "å‹•çš„IPã¨WAN上ã®ãƒˆãƒ³ãƒãƒ«ãƒ–ローカーã€ã§ã¯ã€ãƒãƒªã‚±ãƒ¼ãƒ³Â·ã‚¨ãƒ¬ã‚¯ãƒˆãƒªãƒƒã‚¯ï¼ˆ he.net ï¼‰ã«æŽ¥ç¶šã™ã‚‹ãŸã‚ã«ã€GIFトンãƒãƒ«ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã€ã«ã¯ã€è¿½åŠ ã—ãŸã„ã“ã¨" + +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +#: usr/local/www/interfaces_gif.php:141 +msgid "HE.net Tunnelbroker type DynDNS Entry" +msgstr "HE.net TunnelbrokerタイプダイナミックDNSエントリー" + +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +#: usr/local/www/interfaces_gif.php:141 +msgid "to keep your tunnel functional when your IP changes." +msgstr "ã‚ãªãŸã®IPã®å¤‰æ›´æ™‚ã«æ©Ÿèƒ½çš„ãªã€ã‚ãªãŸã®ãƒˆãƒ³ãƒãƒ«ã‚’ç¶­æŒã™ã‚‹ã€‚" + +#: usr/local/www/widgets/widgets/system_information.widget.php:102 +#: usr/local/www/widgets/widgets/system_information.widget.php:103 +#: usr/local/www/widgets/widgets/system_information.widget.php:101 +#: usr/local/www/widgets/widgets/system_information.widget.php:103 +msgid "Obtaining update status" +msgstr "更新ステータスã®å–å¾—" + +#: usr/local/www/vpn_ipsec_phase1.php:680 +#: usr/local/www/vpn_ipsec_phase1.php:701 +#: usr/local/www/vpn_ipsec_phase1.php:701 +msgid "Input your Pre-Shared Key string" +msgstr "入力ã‚ãªãŸã®äº‹å‰å…±æœ‰éµã®æ–‡å­—列" + +#: usr/local/www/diag_nanobsd.php:179 usr/local/www/diag_nanobsd.php:170 +#: usr/local/www/diag_nanobsd.php:170 +msgid "Media Read/Write Status" +msgstr "メディア読ã¿å–り/書ãè¾¼ã¿ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹" + +#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:183 +#: usr/local/www/diag_nanobsd.php:183 +msgid "Read/Write" +msgstr "èª­ã¿æ›¸ã" + +#: usr/local/www/diag_nanobsd.php:194 usr/local/www/diag_nanobsd.php:185 +#: usr/local/www/diag_nanobsd.php:185 +msgid "Switch to Read-Only" +msgstr "読ã¿å–り専用ã«åˆ‡ã‚Šæ›¿ãˆ" + +#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:187 +#: usr/local/www/diag_nanobsd.php:187 +msgid "Read-Only" +msgstr "リードオンリー" + +#: usr/local/www/diag_nanobsd.php:198 usr/local/www/diag_nanobsd.php:189 +#: usr/local/www/diag_nanobsd.php:189 +msgid "Switch to Read/Write" +msgstr "読ã¿å–り/書ãè¾¼ã¿ã«åˆ‡ã‚Šæ›¿ãˆ" + +#: usr/local/www/diag_nanobsd.php:201 usr/local/www/diag_nanobsd.php:192 +#: usr/local/www/diag_nanobsd.php:192 +msgid "" +"NOTE: This setting is only temporary, and can be switched dynamically in the " +"background." +msgstr ""注:ã“ã®è¨­å®šã¯ä¸€æ™‚çš„ãªã‚‚ã®ã§ã‚りã€å‹•çš„ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€èƒŒæ™¯ã€‚" + +#: usr/local/www/diag_nanobsd.php:208 usr/local/www/diag_nanobsd.php:199 +#: usr/local/www/diag_nanobsd.php:199 +msgid "Keep media mounted read/write at all times." +msgstr "ç¶­æŒåŸ¹åœ°ã¯ã€å¸¸ã«èª­ã¿å–り/書ãè¾¼ã¿å–り付ã‘られã¦ã„る。" + +#: usr/local/www/services_dhcpv6.php:821 usr/local/www/services_dhcpv6.php:838 +#: usr/local/www/services_dhcpv6.php:838 +msgid "Status: DHCPv6 leases" +msgstr "ステータス: DHCPv6ã®ãƒªãƒ¼ã‚¹" + +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:307 +#: usr/local/www/diag_logs_filter.php:307 +msgid "Rule" +msgstr "ルール" + +#: usr/local/www/system_firmware.php:55 usr/local/www/system_firmware.php:55 +msgid "Standard Kernel" +msgstr "標準カーãƒãƒ«" + +#: usr/local/www/system_firmware.php:56 usr/local/www/system_firmware.php:56 +msgid "Embedded Kernel" +msgstr "埋ã‚è¾¼ã¾ã‚ŒãŸã‚«ãƒ¼ãƒãƒ«" + +#: usr/local/www/vpn_l2tp.php:88 usr/local/www/vpn_pptp.php:96 +#: usr/local/www/vpn_l2tp.php:88 usr/local/www/vpn_pptp.php:96 +msgid "" +"'Server address' parameter should NOT be set to any IP address currently in " +"use on this firewall." +msgstr "ã“ã®ãƒ•ァイアウォールã§ä½¿ç”¨ã™ã‚‹ã€Œã€Œã‚µãƒ¼ãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ãƒ‘ラメータã¯ã€ç¾åœ¨ã®ä»»æ„ã®IPアドレスã«è¨­å®šã—ãªã„ã§ãã ã•ã„〠。" + +#: usr/local/www/system_camanager.php:220 +#: usr/local/www/system_certmanager.php:299 +#: usr/local/www/system_certmanager.php:301 +#: usr/local/www/system_camanager.php:220 +#: usr/local/www/system_certmanager.php:299 +#: usr/local/www/system_certmanager.php:301 +msgid "Please select a valid Key Length." +msgstr "有効ãªã‚­ãƒ¼ã®é•·ã•ã‚’é¸æŠžã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_camanager.php:222 +#: usr/local/www/system_certmanager.php:303 +#: usr/local/www/system_camanager.php:222 +#: usr/local/www/system_certmanager.php:303 +msgid "Please select a valid Digest Algorithm." +msgstr "有効ãªãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã‚’é¸æŠžã—ã¦ãã ã•ã„。" + +#: usr/local/www/system_camanager.php:477 +#: usr/local/www/system_certmanager.php:690 +#: usr/local/www/system_certmanager.php:863 +#: usr/local/www/system_certmanager.php:691 +#: usr/local/www/system_certmanager.php:867 +#: usr/local/www/system_camanager.php:477 +#: usr/local/www/system_certmanager.php:691 +#: usr/local/www/system_certmanager.php:867 +msgid "Digest Algorithm" +msgstr "ダイジェストアルゴリズム" + +#: usr/local/www/system_camanager.php:489 +#: usr/local/www/system_certmanager.php:702 +#: usr/local/www/system_certmanager.php:875 +#: usr/local/www/system_certmanager.php:703 +#: usr/local/www/system_certmanager.php:879 +#: usr/local/www/system_camanager.php:489 +#: usr/local/www/system_certmanager.php:703 +#: usr/local/www/system_certmanager.php:879 +msgid "" +"NOTE: It is recommended to use an algorithm stronger than SHA1 when possible." +msgstr ""注:ã“れã¯ã€å¯èƒ½ãªå ´åˆã¯SHA1より強ã„アルゴリズムを使用ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚" + +#: usr/local/www/system_camanager.php:653 +#: usr/local/www/system_certmanager.php:1127 +#: usr/local/www/system_certmanager.php:1131 +#: usr/local/www/system_camanager.php:653 +#: usr/local/www/system_certmanager.php:1131 +msgid "Valid From" +msgstr "ã‹ã‚‰æœ‰åй" + +#: usr/local/www/system_camanager.php:658 +#: usr/local/www/system_certmanager.php:1132 +#: usr/local/www/system_certmanager.php:1136 +#: usr/local/www/system_camanager.php:658 +#: usr/local/www/system_certmanager.php:1136 +msgid "Valid Until" +msgstr "ã¾ã§æœ‰åй" + +#: usr/local/www/services_captiveportal_ip_edit.php:107 +#: usr/local/www/services_captiveportal_ip_edit.php:107 +msgid "A valid subnet mask must be specified" +msgstr "有効ãªã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/vpn_openvpn_client.php:160 +#: usr/local/www/vpn_openvpn_server.php:213 +#: usr/local/www/vpn_openvpn_client.php:160 +#: usr/local/www/vpn_openvpn_server.php:213 +msgid "" +"Protocol and IP address families do not match. You cannot select an IPv6 " +"protocol and an IPv4 IP address." +msgstr "プロトコルã¨IPv4ã®IPアドレス "プロトコルã¨IPアドレスファミリーã¯IPv6ã‚’é¸æŠžã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。一致ã—ã¦ã„ã¾ã›ã‚“〠。" + +#: usr/local/www/vpn_openvpn_client.php:162 +#: usr/local/www/vpn_openvpn_server.php:215 +#: usr/local/www/vpn_openvpn_client.php:162 +#: usr/local/www/vpn_openvpn_server.php:215 +msgid "" +"Protocol and IP address families do not match. You cannot select an IPv4 " +"protocol and an IPv6 IP address." +msgstr "プロトコルã¨IPv6ã®IPアドレス "プロトコルã¨IPアドレスファミリーã¯ã€ã‚ãªãŸãŒIPv4ã‚’é¸æŠžã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。一致ã—ã¦ã„ã¾ã›ã‚“〠。" + +#: usr/local/www/vpn_openvpn_client.php:164 +#: usr/local/www/vpn_openvpn_server.php:217 +#: usr/local/www/vpn_openvpn_client.php:164 +#: usr/local/www/vpn_openvpn_server.php:217 +msgid "" +"An IPv4 protocol was selected, but the selected interface has no IPv4 " +"address." +msgstr "「 IPv4ã®ãƒ—ロトコルãŒé¸æŠžã•れるãŒã€é¸æŠžã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã«ã¯IPv4アドレスãŒã‚りã¾ã›ã‚“ã§ã—ãŸã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’。" + +#: usr/local/www/vpn_openvpn_client.php:166 +#: usr/local/www/vpn_openvpn_server.php:219 +#: usr/local/www/vpn_openvpn_client.php:166 +#: usr/local/www/vpn_openvpn_server.php:219 +msgid "" +"An IPv6 protocol was selected, but the selected interface has no IPv6 " +"address." +msgstr "「 IPv6ãƒ—ãƒ­ãƒˆã‚³ãƒ«ã‚’é¸æŠžã—ã¾ã™ãŒã€é¸æŠžã•れãŸã‚¤ãƒ³ã‚¿ãƒ•ェースã«ã¯IPv6ã‚’æŒã£ã¦ã„ã¾ã›ã‚“ã—ã€ã€Œã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’。" + +#: usr/local/www/vpn_openvpn_client.php:818 +#: usr/local/www/vpn_openvpn_server.php:1252 +#: usr/local/www/vpn_openvpn_client.php:818 +#: usr/local/www/vpn_openvpn_server.php:1252 +msgid "IPv4 Remote Network/s" +msgstr "IPv4ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯/ S" + +#: usr/local/www/vpn_openvpn_client.php:822 +#: usr/local/www/vpn_openvpn_client.php:822 +msgid "" +"These are the IPv4 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more CIDR ranges. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank to only communicate with other clients" +msgstr "サイト間VPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã€ã®ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«ç¢ºç«‹ã§ãã‚‹ã€ã‚ˆã†ã«ã€ã“れらã¯ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•れãŸIPv4ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。 1ã¤ä»¥ä¸Šã®CIDRã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªã‚¹ãƒˆã¨ã—ã¦è¡¨ç¾ã—ã¾ã™ã€‚範囲「ã“ã®ã‚ˆã†ã«å…¥åŠ›ã—ã€ã‚µã‚¤ãƒˆé–“VPNã§LANãŒ/ã“ã“ã®ãƒªãƒ¢ãƒ¼ãƒˆã€‚ã‚ãªãŸã ã‘ã®ä»–ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨é€šä¿¡ã™ã‚‹ãŸã‚ã«ã€ã“ã®ã€Œç©ºç™½ã®ã¾ã¾ã«å¯èƒ½æ€§" + +#: usr/local/www/vpn_openvpn_client.php:832 +#: usr/local/www/vpn_openvpn_server.php:1266 +#: usr/local/www/vpn_openvpn_client.php:832 +#: usr/local/www/vpn_openvpn_server.php:1266 +msgid "IPv6 Remote Network/s" +msgstr "IPv6リモートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯/ S" + +#: usr/local/www/vpn_openvpn_client.php:836 +#: usr/local/www/vpn_openvpn_client.php:836 +msgid "" +"These are the IPv6 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank to only communicate with other clients" +msgstr "サイト間VPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã€ã®ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 1ã¾ãŸã¯è¤‡æ•°ã®IP /プレフィックスをカンマã§åŒºåˆ‡ã£ãŸãƒªã‚¹ãƒˆã¨ã—ã¦ç™ºç¾ã•れãŸã€ã“れらã¯ã‚ˆã†ã«ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•れãŸIPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。ã“れã¯ã‚µã‚¤ãƒˆé–“VPNã§ã‚ã‚‹ã€å ´åˆã«ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆLANã«å…¥ã‚‹/ sã“ã¡ã‚‰ã€‚ã‚ãªãŸã ã‘ã®ä»–ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨é€šä¿¡ã™ã‚‹ãŸã‚ã«ã€ã“ã®ã€Œç©ºç™½ã®ã¾ã¾ã«å¯èƒ½æ€§" + +#: usr/local/www/vpn_openvpn_client.php:909 +#: usr/local/www/vpn_openvpn_client.php:909 +msgid "EXAMPLE:" +msgstr "例:" + +#: usr/local/www/status_openvpn.php:201 usr/local/www/status_openvpn.php:211 +#: usr/local/www/status_openvpn.php:211 +msgid "Show Routing Table" +msgstr "ショールーティングテーブル" + +#: usr/local/www/status_openvpn.php:201 usr/local/www/status_openvpn.php:211 +#: usr/local/www/status_openvpn.php:211 +msgid "Display OpenVPN's internal routing table for this server." +msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã®OpenVPNã®å†…部ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを表示ã—ã¾ã™ã€‚" + +#: usr/local/www/status_openvpn.php:207 usr/local/www/status_openvpn.php:217 +#: usr/local/www/status_openvpn.php:217 +msgid "Routing Table" +msgstr "経路指定テーブル" + +#: usr/local/www/status_openvpn.php:216 usr/local/www/status_openvpn.php:226 +#: usr/local/www/status_openvpn.php:226 +msgid "Target Network" +msgstr "ターゲットãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/status_openvpn.php:217 usr/local/www/status_openvpn.php:227 +#: usr/local/www/status_openvpn.php:227 +msgid "Last Used" +msgstr "最後ã«ä½¿ç”¨ã—ãŸ" + +#: usr/local/www/status_openvpn.php:239 usr/local/www/status_openvpn.php:249 +#: usr/local/www/status_openvpn.php:249 +msgid "" +"An IP address followed by C indicates a host currently connected through the " +"VPN." +msgstr "VPN "Cã«ç¶šãIPアドレスã¯ã€ç¾åœ¨ã‚’介ã—ã¦æŽ¥ç¶šã•れãŸãƒ›ã‚¹ãƒˆã‚’示ã™ã€Œ 。" + +#: usr/local/www/diag_testport.php:49 usr/local/www/diag_testport.php:114 +#: usr/local/www/fbegin.inc:218 usr/local/www/diag_testport.php:49 +#: usr/local/www/diag_testport.php:114 usr/local/www/fbegin.inc:218 +msgid "Test Port" +msgstr "テストãƒãƒ¼ãƒˆ" + +#: usr/local/www/diag_testport.php:64 usr/local/www/diag_testport.php:64 +msgid "Please enter a valid IP or hostname." +msgstr "有効ãªIPã¾ãŸã¯ãƒ›ã‚¹ãƒˆåを入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/diag_testport.php:68 usr/local/www/diag_testport.php:68 +msgid "Please enter a valid port number." +msgstr "有効ãªãƒãƒ¼ãƒˆç•ªå·ã‚’入力ã—ã¦ãã ã•ã„。" + +#: usr/local/www/diag_testport.php:72 usr/local/www/diag_testport.php:72 +msgid "Please enter a valid source port number, or leave the field blank." +msgstr "有効ãªé€ä¿¡å…ƒãƒãƒ¼ãƒˆç•ªå·ã‚’入力ã™ã‚‹ã‹ã€ãƒ•ィールドを空白ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„。" + +#: usr/local/www/diag_testport.php:76 usr/local/www/diag_testport.php:76 +msgid "You cannot connect to an IPv4 address using IPv6." +msgstr "ã‚ãªãŸã¯ã€ IPv6を使用ã—ã¦ã€IPv4ã‚¢ãƒ‰ãƒ¬ã‚¹ã«æŽ¥ç¶šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/diag_testport.php:79 usr/local/www/diag_testport.php:79 +msgid "You cannot connect to an IPv6 address using IPv4." +msgstr "ã‚ãªãŸã¯IPv4を使用ã—ã¦IPv6ã‚¢ãƒ‰ãƒ¬ã‚¹ã«æŽ¥ç¶šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/diag_testport.php:106 usr/local/www/diag_testport.php:106 +msgid "" +"This page allows you to perform a simple TCP connection test to determine if " +"a host is up and accepting connections on a given port. This test does not " +"function for UDP since there is no way to reliably determine if a UDP port " +"accepts connections in this manner." +msgstr "ホストãŒèµ·å‹•ã—ã¦æŒ‡å®šã•れãŸãƒãƒ¼ãƒˆã§æŽ¥ç¶šã‚’å—ã‘入れã¦ã„ã‚‹ã€ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€ã‹ã©ã†ã‹ã‚’判断ã™ã‚‹ãŸã‚ã«ã€å˜ç´”ãªTCP接続テストを実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。ã“ã®ãƒ†ã‚¹ãƒˆã§ã¯ã€ã“ã®ã‚ˆã†ã«æŽ¥ç¶šã‚’å—ã‘付ã‘る「UDPã®ãŸã‚ã®æ©Ÿèƒ½ã¯ã€UDPãƒãƒ¼ãƒˆãŒã‚れã°ã€ç¢ºå®Ÿã«åˆ¤åˆ¥ã™ã‚‹æ–¹æ³•ãŒãªã„ã®ã§ã€ 「ã‚りã¾ã›ã‚“。" + +#: usr/local/www/diag_testport.php:108 usr/local/www/diag_testport.php:108 +msgid "" +"No data is transmitted to the remote host during this test, it will only " +"attempt to open a connection and optionally display the data sent back from " +"the server." +msgstr "「データã¯ã€ã“ã®è©¦é¨“中ã«ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã«é€ä¿¡ã•れã¦ã„ãªã„ã€ãれã ã‘ã« "接続を開ãã€å¿…è¦ã«å¿œã˜ã¦ã‚µãƒ¼ãƒã€ã‹ã‚‰è¿”信データを表示ã—よã†ã€‚" + +#: usr/local/www/diag_testport.php:132 usr/local/www/diag_testport.php:132 +msgid "This should typically be left blank." +msgstr "ã“れã¯é€šå¸¸ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„。" + +#: usr/local/www/diag_testport.php:136 usr/local/www/diag_testport.php:136 +msgid "Show Remote Text" +msgstr "リモートテキストを表示" + +#: usr/local/www/diag_testport.php:139 usr/local/www/diag_testport.php:139 +msgid "" +"Shows the text given by the server when connecting to the port. Will take " +"10+ seconds to display if checked." +msgstr "ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨è¡¨ç¤ºã™ã‚‹ã‚ˆã†ã«10ç§’"ãƒãƒ¼ãƒˆã«æŽ¥ç¶šã—ãŸå ´åˆã€ã‚µãƒ¼ãƒãƒ¼ã«ã‚ˆã£ã¦æŒ‡å®šã•れãŸãƒ†ã‚­ã‚¹ãƒˆã¯é€£ã‚Œã¦è¡Œã£ã¦ãれã¾ã›ã‚“示ã—ã¦ã„ã¾ã™ã€ 。" + +#: usr/local/www/diag_testport.php:159 usr/local/www/diag_testport.php:161 +#: usr/local/www/diag_traceroute.php:104 usr/local/www/diag_ping.php:102 +#: usr/local/www/diag_testport.php:161 usr/local/www/diag_traceroute.php:104 +#: usr/local/www/diag_ping.php:102 +msgid "IP Protocol" +msgstr "IPプロトコル" + +#: usr/local/www/diag_testport.php:166 usr/local/www/diag_testport.php:168 +#: usr/local/www/diag_testport.php:168 +msgid "IPv4" +msgstr "IPv4ã®" + +#: usr/local/www/diag_testport.php:169 usr/local/www/diag_testport.php:171 +#: usr/local/www/diag_testport.php:171 +msgid "IPv6" +msgstr "IPv6ã®" + +#: usr/local/www/diag_testport.php:173 usr/local/www/diag_testport.php:175 +#: usr/local/www/diag_testport.php:175 +msgid "" +"If you force IPv4 or IPv6 and use a hostname that does not contain a result " +"using that protocol, it will result in an error. For example if you force " +"IPv4 and use a hostname that only returns an AAAA IPv6 IP address, it will " +"not work." +msgstr ""ã‚ãªãŸã¯IPv4ã¾ãŸã¯IPv6を強制ã—ã€ãã®çµæžœãŒå«ã¾ã‚Œã¦ã„ãªã„ホストåを使用ã™ã‚‹å ´åˆã€ã€Œãã®ãƒ—ロトコルを使用ã—ã¦ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚ã‚ãªãŸãŒå¼·åˆ¶çš„ã«ãŸã¨ãˆã°ã€Œ IPv4ã®ãŒå”¯ä¸€AAAA IPv6ã®IPアドレスを返ã™ãƒ›ã‚¹ãƒˆåを使用ã—ã€ãれãŒã—ã¾ã™ã€ã¯å‹•作ã—ã¾ã›ã€‚" + +#: usr/local/www/diag_testport.php:186 usr/local/www/diag_testport.php:188 +#: usr/local/www/diag_testport.php:188 +msgid "Port Test Results" +msgstr "ãƒãƒ¼ãƒˆãƒ†ã‚¹ãƒˆçµæžœ" + +#: usr/local/www/diag_testport.php:246 usr/local/www/diag_testport.php:248 +#: usr/local/www/diag_testport.php:248 +msgid "" +"No output received, or connection failed. Try with "Show Remote Text" " +"unchecked first." +msgstr "「何も出力ãŒå—ä¿¡ã•れãªã„ã€ã¾ãŸã¯æŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸã€‚ã§è©¦ã—ã¦ã¿ã¦ãã ã•ã„ã€ã®è¡¨ç¤ºãƒªãƒ¢ãƒ¼ãƒˆãƒ†ã‚­ã‚¹ãƒˆ""ãƒã‚§ãƒƒã‚¯ã—ãªã„第一。" + +#: usr/local/www/diag_testport.php:248 usr/local/www/diag_testport.php:250 +#: usr/local/www/diag_testport.php:250 +msgid "Connection failed (Refused/Timeout)" +msgstr "接続ã¯ï¼ˆæ‹’å¦/タイムアウト)ã«å¤±æ•—ã—ã¾ã—ãŸ" + +#: usr/local/www/firewall_rules_edit.php:1295 +#: usr/local/www/firewall_nat_edit.php:780 +#: usr/local/www/firewall_nat_out_edit.php:647 +#: usr/local/www/firewall_rules_edit.php:1302 +#: usr/local/www/firewall_nat_edit.php:792 +#: usr/local/www/firewall_nat_out_edit.php:659 +#: usr/local/www/firewall_rules_edit.php:1301 +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_rules_edit.php:1301 +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_nat_out_edit.php:659 +msgid "" +"Hint: This prevents the rule on Master from automatically syncing to other " +"CARP members. This does NOT prevent the rule from being overwritten on Slave." +msgstr ""ヒント:ã“れã¯ã€è‡ªå‹•çš„ã«ä»–ã®ã¨åŒæœŸã‹ã‚‰ãƒžã‚¹ã‚¿ãƒ¼ã«ãƒ«ãƒ¼ãƒ«ã‚’防ã「 CARPã®ãƒ¡ãƒ³ãƒãƒ¼ã€‚ã“れã¯ã‚¹ãƒ¬ãƒ¼ãƒ–ã§ä¸Šæ›¸ãã•れãªã„ルールを防ãã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/interfaces_qinq.php:68 usr/local/www/interfaces_qinq.php:68 +msgid "QinQ interface does not exist" +msgstr "QinQã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã¯å­˜åœ¨ã—ã¾ã›ã‚“" + +#: usr/local/www/interfaces_vlan_edit.php:84 +#: usr/local/www/interfaces_vlan_edit.php:84 +msgid "Interface supplied as parent is invalid" +msgstr "親ã¨ã—ã¦ä»˜å±žã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒç„¡åйã§ã™" + +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_firmware_settings.php:153 +#: usr/local/www/system_firmware_settings.php:153 +#, php-format +msgid "" +"Entries denoted by "Current architecture" match the architecture of your " +"current installation, such as %s. Changing architectures during an upgrade " +"is not recommended, and may require a manual reboot after the update " +"completes." +msgstr "ç¾åœ¨ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã€ã§ç¤ºã™ã‚¨ãƒ³ãƒˆãƒªã¯ã€ãªã©%s.ãªã©ã®ç¾åœ¨ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€ 「ã‚ãªãŸã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã¨ä¸€è‡´ã€ã‚¢ãƒƒãƒ—グレード中ã«ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã‚’変更ã—ã¦ã‚‚〠「推奨ã•れã¦ãŠã‚‰ãšã€æ›´æ–°å¾Œæ‰‹å‹•ã§å†èµ·å‹•ãŒå¿…è¦ãªå ´åˆãŒã‚りã€ã€Œå®Œäº†ã™ã‚‹ã€‚" + +#: usr/local/www/interfaces_lagg_edit.php:95 +#: usr/local/www/interfaces_lagg_edit.php:98 +#: usr/local/www/interfaces_lagg_edit.php:95 +#: usr/local/www/interfaces_lagg_edit.php:98 +msgid "Interface supplied as member is invalid" +msgstr "メンãƒãƒ¼ã¨ã—ã¦ä»˜å±žã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒç„¡åйã§ã™" + +#: usr/local/www/interfaces_lagg_edit.php:101 +#: usr/local/www/interfaces_lagg_edit.php:101 +msgid "Protocol supplied is invalid" +msgstr "付属議定書ã¯ç„¡åйã§ã‚ã‚‹" + +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_captiveportal_expire.php:73 +#: usr/local/www/status_captiveportal_vouchers.php:112 +#: usr/local/www/status_captiveportal.php:110 +#: usr/local/www/status_captiveportal_test.php:75 +#: usr/local/www/status_captiveportal_voucher_rolls.php:79 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_captiveportal_expire.php:73 +#: usr/local/www/status_captiveportal_vouchers.php:112 +#: usr/local/www/status_captiveportal.php:110 +#: usr/local/www/status_captiveportal_test.php:75 +#: usr/local/www/status_captiveportal_voucher_rolls.php:79 +msgid "Expire Vouchers" +msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã®æœ‰åŠ¹æœŸé™" + +#: usr/local/www/status_captiveportal_expire.php:86 +#: usr/local/www/status_captiveportal_expire.php:86 +msgid "" +"Enter multiple vouchers separated by space or newline. All valid vouchers " +"will be marked as expired" +msgstr "「空白や改行ã§åŒºåˆ‡ã‚‰ã‚ŒãŸè¤‡æ•°ã®ä¼ç¥¨ã‚’入力ã—ã¾ã™ã€‚ã™ã¹ã¦ã®æœ‰åйãªã‚¯ãƒ¼ãƒãƒ³ã€ã¯æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã¨ã—ã¦ãƒžãƒ¼ã‚¯ã•れã¾ã™" + +#: usr/local/www/firewall_nat_edit.php:835 +#: usr/local/www/firewall_nat_edit.php:847 +#: usr/local/www/firewall_nat_edit.php:848 +#: usr/local/www/firewall_nat_edit.php:848 +msgid "" +"NOTE: The "pass" selection does not work properly with Multi-WAN. It will " +"only work on an interface containing the default gateway." +msgstr ""注: ã€Œåˆæ ¼ã€ã®é¸æŠžã¯ã€è¤‡æ•°WANã§æ­£ã—ã動作ã—ãªã„ã“ã¨ãŒã—ã¾ã™ã€‚ ã€ã ã‘デフォルトゲートウェイをå«ã‚€ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス上ã§å‹•作ã™ã‚‹ã€‚" + +#: usr/local/www/interfaces_vlan.php:71 usr/local/www/interfaces_vlan.php:71 +msgid "Invalid VLAN interface." +msgstr "無効ãªVLANインターフェイス。" + +#: usr/local/www/interfaces_gif_edit.php:87 +#: usr/local/www/interfaces_gif_edit.php:87 +msgid "" +"The alias IP address family has to match the family of the remote peer " +"address." +msgstr "アドレス「エイリアスIPアドレスファミリーã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ”ã‚¢ã®å®¶æ—を一致ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/services_dhcp_edit.php:193 +#: usr/local/www/services_dhcp_edit.php:193 +msgid "" +"The IP address must not be within the range configured on a DHCP pool for " +"this interface." +msgstr "ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã®ã€ŒIPアドレスãŒç”¨DHCPプールã«è¨­å®šã•れãŸç¯„囲内ã§ã‚ã£ã¦ã¯ãªã‚‰ãªã„〠。" + +#: usr/local/www/services_dhcp_edit.php:388 +#: usr/local/www/services_dhcp_edit.php:388 +msgid "ARP Table Static Entry" +msgstr "ARPテーブルスタティックエントリ" + +#: usr/local/www/services_dhcp_edit.php:391 +#: usr/local/www/services_dhcp_edit.php:391 +msgid "Create an ARP Table Static Entry for this MAC & IP Address pair. " +msgstr "ã“ã®MAC & IPアドレスã®ãƒšã‚¢ã®ãŸã‚ã®ARPテーブルã®ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ã‚¨ãƒ³ãƒˆãƒªã‚’作æˆã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_virtual_ip_edit.php:117 +#: usr/local/www/firewall_virtual_ip_edit.php:117 +msgid "This IP address is being used by another interface or VIP." +msgstr "ã“ã®IPアドレスã¯åˆ¥ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¾ãŸã¯VIPã§ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/diag_traceroute.php:122 usr/local/www/diag_traceroute.php:141 +#: usr/local/www/diag_traceroute.php:141 +msgid "Reverse Address Lookup" +msgstr "逆アドレス検索" + +#: usr/local/www/interfaces_bridge.php:70 +#: usr/local/www/interfaces_bridge.php:70 +msgid "Invalid bridge interface." +msgstr "無効ãªãƒ–リッジ·インターフェース。" + +#: usr/local/www/diag_smart.php:339 usr/local/www/diag_smart.php:339 +msgid "Perform Self-tests" +msgstr "セルフテストを実行ã™ã‚‹" + +#: usr/local/www/diag_smart.php:384 usr/local/www/diag_smart.php:384 +msgid "Self-test" +msgstr "セルフテスト" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1485 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1428 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1365 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1226 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225 +msgid "Connections From Upstream SIP Server" +msgstr "上æµã®SIPサーãƒã‹ã‚‰ã®æŽ¥ç¶š" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1497 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1440 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1377 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1238 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1499 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1442 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1379 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1240 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1498 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1441 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1378 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1239 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1498 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1441 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1378 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1239 +msgid "Connections To Upstream SIP Server" +msgstr "上æµSIPサーãƒãƒ¼ã¸ã®æŽ¥ç¶š" + +#: usr/local/www/vpn_pppoe_edit.php:149 usr/local/www/vpn_pppoe_edit.php:149 +msgid "Wrong data submitted" +msgstr "æå‡ºã•れã€èª¤ã£ãŸãƒ‡ãƒ¼ã‚¿" + +#: usr/local/www/license.php:158 usr/local/www/license.php:158 +msgid "1992-2012 The FreeBSD Project. All rights reserved" +msgstr "1992-2012ザ· FreeBSDプロジェクト。無断複写·転載をç¦ã˜ã¾ã™" + +#: usr/local/www/license.php:161 usr/local/www/license.php:161 +msgid "1999-2010 The PHP Group. All rights reserved." +msgstr "1999-2010ザ· PHPグループ。無断複写·転載をç¦ã˜ã¾ã™ã€‚" + +#: usr/local/www/license.php:164 usr/local/www/license.php:164 +msgid "2004, Jan Knescke, incremental" +msgstr "2004 ã€ãƒ¤ãƒ³Knescke ã€ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ã‚¿ãƒ«" + +#: usr/local/www/license.php:168 usr/local/www/license.php:168 +msgid "2004-2012 Internet Software Consortium, Inc." +msgstr "2004-2012 Internet Software Consortiumã®æ ªå¼ä¼šç¤¾" + +#: usr/local/www/license.php:169 usr/local/www/license.php:169 +msgid "1995-2003 Internet Software Consortium" +msgstr "1995-2003 Internet Software Consortiumã®" + +#: usr/local/www/services_dhcp.php:352 usr/local/www/services_dhcp.php:372 +#: usr/local/www/services_dhcp.php:372 +msgid "" +"The specified range must not be within the DHCP range for this interface." +msgstr "「指定ã•れãŸç¯„囲ã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®DHCP範囲内ã«ã‚ã£ã¦ã¯ãªã‚‰ãªã„。" + +#: usr/local/www/services_dhcp.php:361 usr/local/www/services_dhcp.php:381 +#: usr/local/www/services_dhcp.php:381 +msgid "" +"The specified range must not be within the range configured on a DHCP pool " +"for this interface." +msgstr "ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã®ã€ŒæŒ‡å®šã•れãŸç¯„囲ã¯ã€ DHCPプールã«è¨­å®šã•れãŸç¯„囲内ã§ã‚ã£ã¦ã¯ãªã‚‰ãªã„〠。" + +#: usr/local/www/services_dhcp.php:713 usr/local/www/services_dhcp.php:733 +#: usr/local/www/services_dhcp.php:733 +msgid "Pool Description" +msgstr "プールã®èª¬æ˜Ž" + +#: usr/local/www/services_dhcp.php:903 usr/local/www/services_dhcp.php:923 +#: usr/local/www/services_dhcp.php:923 +msgid "" +"Leave blank to disable. Enter the interface IP address of the other " +"machine. Machines must be using CARP. Interface's advskew determines " +"whether the DHCPd process is Primary or Secondary. Ensure one machine's " +"advskew<20 (and the other is >20)." +msgstr "「無効ã«ã™ã‚‹å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãŠãã¾ã™ã€‚ä»–ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスIPアドレスを入力ã—〠"マシンを。マシンã¯ã€CARPを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚インタフェースã®advskewã¯ã€Œã®dhcpdプロセスãŒãƒ—ライマリã¾ãŸã¯ã‚»ã‚«ãƒ³ãƒ€ãƒªã§ã‚ã‚‹ã‹ã©ã†ã‹ã€‚ 1マシンã®ç¢ºèªã€ã‚’決定advskew u003c 20 (他方ã¯u003e 20) 。" + +#: usr/local/www/services_dhcp.php:946 usr/local/www/services_dhcp.php:966 +#: usr/local/www/services_dhcp.php:966 +msgid "" +"By default DHCP leases are displayed in UTC time. By checking this\n" +"ttttttbox DHCP lease time will be displayed in local time and set to " +"time zone selected. This will be used for all DHCP interfaces lease time." +msgstr "「デフォルトã®DHCPã§ãƒªãƒ¼ã‚¹ã¯UTC時間ã§è¡¨ç¤ºã•れã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ã§this\n 「 ttttttbox DHCPリース時間ã¯ç¾åœ°æ™‚é–“ã§è¡¨ç¤ºã•れã€é¸æŠžã—ãŸã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ã€ã«è¨­å®šã•れã¾ã™ã€‚ã“れã¯ã€ã™ã¹ã¦ã®DHCPインターフェイスã®ãƒªãƒ¼ã‚¹æ™‚é–“ã®ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:1146 usr/local/www/services_dhcp.php:1166 +#: usr/local/www/services_dhcp.php:1166 +msgid "DHCP Static Mappings for this interface." +msgstr "ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®DHCPé™çš„マッピング。" + +#: usr/local/www/diag_system_pftop.php:133 +#: usr/local/www/diag_system_pftop.php:133 +msgid "View type:" +msgstr "ビューã®ç¨®é¡žï¼š" + +#: usr/local/www/diag_system_pftop.php:136 +#: usr/local/www/diag_system_pftop.php:136 +msgid "Label" +msgstr "ラベル" + +#: usr/local/www/diag_system_pftop.php:141 +#: usr/local/www/diag_system_pftop.php:141 +msgid "Speed" +msgstr "スピード" + +#: usr/local/www/diag_system_pftop.php:150 +#: usr/local/www/diag_system_pftop.php:150 +msgid "Age" +msgstr "時代" + +#: usr/local/www/diag_system_pftop.php:151 +#: usr/local/www/diag_system_pftop.php:151 +msgid "Bytes" +msgstr "ãƒã‚¤ãƒˆ" + +#: usr/local/www/diag_system_pftop.php:152 +#: usr/local/www/diag_system_pftop.php:152 +msgid "Destination Address" +msgstr "宛先アドレス" + +#: usr/local/www/diag_system_pftop.php:154 +#: usr/local/www/diag_system_pftop.php:154 +msgid "Expiry" +msgstr "満了" + +#: usr/local/www/diag_system_pftop.php:156 +#: usr/local/www/diag_system_pftop.php:156 +msgid "Peak" +msgstr "ピーク" + +#: usr/local/www/diag_system_pftop.php:157 +#: usr/local/www/diag_system_pftop.php:157 +msgid "Packet" +msgstr "パケット" + +#: usr/local/www/diag_system_pftop.php:161 usr/local/www/diag_testport.php:143 +#: usr/local/www/diag_traceroute.php:113 usr/local/www/diag_ping.php:111 +#: usr/local/www/diag_testport.php:143 usr/local/www/diag_traceroute.php:113 +#: usr/local/www/diag_system_pftop.php:161 usr/local/www/diag_ping.php:111 +msgid "Source Address" +msgstr "é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹" + +#: usr/local/www/diag_system_pftop.php:166 +#: usr/local/www/diag_system_pftop.php:166 +msgid "Number of States:" +msgstr "çŠ¶æ…‹ã®æ•°ï¼š" + +#: usr/local/www/system_advanced_misc.php:357 +#: usr/local/www/system_advanced_misc.php:404 +#: usr/local/www/system_advanced_misc.php:404 +msgid "On AC Power Mode" +msgstr "ACé›»æºãƒ¢ãƒ¼ãƒ‰ã‚ªãƒ³" + +#: usr/local/www/system_advanced_misc.php:365 +#: usr/local/www/system_advanced_misc.php:412 +#: usr/local/www/system_advanced_misc.php:412 +msgid "On Battery Power Mode" +msgstr "ãƒãƒƒãƒ†ãƒªé›»æºãƒ¢ãƒ¼ãƒ‰ã‚ªãƒ³" + +#: usr/local/www/bandwidth_by_ip.php:24 usr/local/www/bandwidth_by_ip.php:24 +msgid "Wrong Interface" +msgstr "誤ã£ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス" + +#: usr/local/www/services_dhcpv6.php:601 usr/local/www/services_dhcpv6.php:601 +msgid "Prefix Delegation Size" +msgstr "接頭委任サイズ" + +#: usr/local/www/services_dhcpv6.php:846 usr/local/www/services_dhcpv6.php:846 +msgid "DHCPv6 Static Mappings for this interface." +msgstr "ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã®DHCPv6ã®é™çš„マッピング。" + +#: usr/local/www/system_authservers.php:217 +#: usr/local/www/system_authservers.php:217 +msgid "RADIUS Timeout value must be numeric and positive." +msgstr "RADIUSã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ã¯ã€æ•°å€¤ã€æ­£ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_authservers.php:731 +#: usr/local/www/system_authservers.php:731 +msgid "Authentication Timeout" +msgstr "èªè¨¼ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ" + +#: usr/local/www/system_authservers.php:734 +#: usr/local/www/system_authservers.php:734 +msgid "" +"This value controls how long, in seconds, that the RADIUS server may take to " +"respond to an authentication request." +msgstr "èªè¨¼è¦æ±‚ã«å¿œç­”ã—ã€ã€Œ RADIUSサーãƒã«ã‹ã‹ã‚‹å ´åˆãŒã‚ã‚‹ã“ã¨ç§’ã“ã®å€¤ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã®ã©ã®ãらã„〠〠〠。" + +#: usr/local/www/system_authservers.php:735 +#: usr/local/www/system_authservers.php:735 +msgid "If left blank, the default value is 5 seconds." +msgstr "空白ã®å ´åˆã€ãƒ‡ãƒ•ォルト値ã¯5ç§’ã§ã™ã€‚" + +#: usr/local/www/system_authservers.php:736 +#: usr/local/www/system_authservers.php:736 +msgid "" +"NOTE: If you are using an interactive two-factor authentication system, " +"increase this timeout to account for how long it will take the user to " +"receive and enter a token." +msgstr ""注:対話型ã®2è¦ç´ èªè¨¼ã‚·ã‚¹ãƒ†ãƒ ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ 「ãれã¯"å—ä¿¡ã—ãŸãƒˆãƒ¼ã‚¯ãƒ³ã‚’入力ã™ã‚‹ã‚ˆã†ã«ãƒ¦ãƒ¼ã‚¶ã«ã‹ã‹ã‚‹æ™‚間を考慮ã—ã¦ã€ã“ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’増やã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:80 +#: usr/local/www/system_advanced_firewall.php:80 +msgid "The Firewall Adaptive values must be set together." +msgstr "ファイアウォールé©å¿œå€¤ã‚’一緒ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:82 +#: usr/local/www/system_advanced_firewall.php:82 +msgid "The Firewall Adaptive Start value must be an integer." +msgstr "ファイアウォールé©å¿œStartå€¤ã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_advanced_firewall.php:85 +#: usr/local/www/system_advanced_firewall.php:85 +msgid "The Firewall Adaptive End value must be an integer." +msgstr "ファイアウォールé©å¿œçµ‚äº†å€¤ã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/system_advanced_firewall.php:345 +#: usr/local/www/system_advanced_firewall.php:346 +#: usr/local/www/system_advanced_firewall.php:346 +msgid "Firewall Adaptive Timeouts" +msgstr "ファイアウォールアダプティブタイムアウト" + +#: usr/local/www/system_advanced_firewall.php:347 +#: usr/local/www/system_advanced_firewall.php:348 +#: usr/local/www/system_advanced_firewall.php:348 +msgid "" +"Timeouts for states can be scaled adaptively as the number of state table " +"entries grows." +msgstr "æˆé•·ã®ã‚¨ãƒ³ãƒˆãƒª"状態ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯ã€çŠ¶æ…‹ãƒ†ãƒ¼ãƒ–ãƒ«ã®æ•°ãŒé©å¿œçš„ã«ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。" + +#: usr/local/www/system_advanced_firewall.php:350 +#: usr/local/www/system_advanced_firewall.php:351 +#: usr/local/www/system_advanced_firewall.php:351 +msgid "" +"When the number of state entries exceeds this value, adaptive scaling " +"begins. All timeout values are scaled linearly with factor (adaptive.end - " +"number of states) / (adaptive.end - adaptive.start)." +msgstr "ã€ŒçŠ¶æ…‹ã‚¨ãƒ³ãƒˆãƒªã®æ•°ãŒã“ã®å€¤ã‚’è¶…ãˆã‚‹ã¨ã€é©å¿œã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã€ã¯å§‹ã¾ã‚‹ã€‚ / ( adaptive.end - adaptive.start ) - ã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ã¯ã€å› å­ï¼ˆã€ŒçŠ¶æ…‹æ•°adaptive.end )ã¨ç›´ç·šçš„ã«ã‚¹ã‚±ãƒ¼ãƒ«ã•れã¾ã™ã€‚" + +#: usr/local/www/system_advanced_firewall.php:354 +#: usr/local/www/system_advanced_firewall.php:355 +#: usr/local/www/system_advanced_firewall.php:355 +msgid "" +"When reaching this number of state entries, all timeout values become zero, " +"effectively purging all state entries immediately. This value is used to " +"define the scale factor, it should not actually be reached (set a lower " +"state limit, see below)." +msgstr "事実上ã€ã™ãã«ã™ã¹ã¦ã®çŠ¶æ…‹ã®é …目をパージã™ã‚‹ã€çŠ¶æ…‹ã‚¨ãƒ³ãƒˆãƒªã®ã“ã®æ•°ã«é”ã™ã‚‹å ´åˆã¯ã€ã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ã¯ã€ã‚¼ãƒ­ã«ãªã‚‹ã€ 。ã“ã®å€¤ã¯ã€ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる"(下記å‚ç…§ã€çŠ¶æ…‹åˆ¶é™ã‚¹ã‚±ãƒ¼ãƒ«ãƒ•ァクタを定義ã™ã‚‹ãŒã€å®Ÿéš›ã«ã¯ã‚ˆã‚Šä½Žã„セット)ã«åˆ°é”ã™ã¹ãã§ã¯ãªã„〠。" + +#: usr/local/www/system_advanced_firewall.php:356 +#: usr/local/www/system_advanced_firewall.php:357 +#: usr/local/www/system_advanced_firewall.php:357 +msgid "Note: Leave this blank for the default(0)." +msgstr "注:デフォルトã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãŠãã¾ã™ï¼ˆ 0 ) 。" + +#: usr/local/www/system_advanced_firewall.php:447 +#: usr/local/www/system_advanced_firewall.php:448 +#: usr/local/www/system_advanced_firewall.php:448 +msgid "Bogon Networks" +msgstr "Bogonãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" + +#: usr/local/www/system_advanced_firewall.php:450 +#: usr/local/www/system_advanced_firewall.php:451 +#: usr/local/www/system_advanced_firewall.php:451 +msgid "Update Frequency" +msgstr "更新頻度" + +#: usr/local/www/system_advanced_firewall.php:453 +#: usr/local/www/system_advanced_firewall.php:454 +#: usr/local/www/system_advanced_firewall.php:454 +msgid "Monthly" +msgstr "毎月" + +#: usr/local/www/system_advanced_firewall.php:454 +#: usr/local/www/system_advanced_firewall.php:455 +#: usr/local/www/system_advanced_firewall.php:455 +msgid "Weekly" +msgstr "毎週" + +#: usr/local/www/system_advanced_firewall.php:455 +#: usr/local/www/system_advanced_firewall.php:456 +#: usr/local/www/system_advanced_firewall.php:456 +msgid "Daily" +msgstr "日々" + +#: usr/local/www/system_advanced_firewall.php:458 +#: usr/local/www/system_advanced_firewall.php:459 +#: usr/local/www/system_advanced_firewall.php:459 +msgid "" +"The frequency of updating the lists of IP addresses that are reserved (but " +"not RFC 1918) or not yet assigned by IANA." +msgstr "「 ( 1918å¹´ã®RFCã§ã¯ãªã„ã‹ã€ã¾ã IANAã«ã‚ˆã£ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„予約済ã¿ã¾ã™ãŒï¼‰ã•れã¦ã„ã‚‹IPアドレスã®ãƒªã‚¹ãƒˆã‚’æ›´æ–°ã™ã‚‹é »åº¦ã€ 。" + +#: usr/local/www/services_captiveportal.php:227 +#: usr/local/www/services_captiveportal.php:243 +#: usr/local/www/services_captiveportal.php:243 +msgid "" +"The NAS-Identifier must be 3-253 characters long and should only contain " +"ASCII characters." +msgstr "ASCII文字を「NAS-識別å­ã¯3ã‹ã‚‰253文字ã®é•·ã•ã§ãªã‘れã°ãªã‚‰ãšã€å”¯ä¸€ã®å«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ 。" + +#: usr/local/www/services_captiveportal.php:593 +#: usr/local/www/services_captiveportal.php:609 +#: usr/local/www/services_captiveportal.php:609 +msgid "Allow only users/groups with 'Captive portal login' privilege set" +msgstr "「キャプティブãƒãƒ¼ã‚¿ãƒ«ã®ãƒ­ã‚°ã‚¤ãƒ³ã€ã®æ¨©é™ãŒè¨­å®šã•れã¦ã„る唯一ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼/グループを許å¯" + +#: usr/local/www/services_captiveportal.php:760 +#: usr/local/www/services_captiveportal.php:776 +#: usr/local/www/services_captiveportal.php:776 +msgid "MAC authentication secret" +msgstr "MACèªè¨¼ã®ç§˜å¯†" + +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:839 +#: usr/local/www/services_captiveportal.php:839 +msgid "Accounting Style" +msgstr "会計スタイル" + +#: usr/local/www/services_captiveportal.php:824 +#: usr/local/www/services_captiveportal.php:840 +#: usr/local/www/services_captiveportal.php:840 +msgid "Invert Acct-Input-Octets and Acct-Output-Octets" +msgstr "å転ACCT-入力·オクテットãŠã‚ˆã³acct -出力 - オクテット" + +#: usr/local/www/services_captiveportal.php:825 +#: usr/local/www/services_captiveportal.php:841 +#: usr/local/www/services_captiveportal.php:841 +msgid "" +"When this is enabled, data counts for RADIUS accounting packets will be " +"taken from the client perspective, not the NAS. Acct-Input-Octets will " +"represent download, and Acct-Output-Octets will represent upload." +msgstr "「ã“れを有効ã«ã™ã‚‹ã¨ã€ RADIUSアカウンティングパケットã®ãƒ‡ãƒ¼ã‚¿æ•°ãŒã•れã€ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®è¦³ç‚¹ã§ã¯ãªãã€NASã‹ã‚‰æ’®å½±ã€‚ ACCT-入力·オクテットã¯ã€Œãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’表ç¾ã—〠ACCT-出力 - オクテットã¯ã€ã‚¢ãƒƒãƒ—ロードを表ã—ã¾ã™ã€‚" + +#: usr/local/www/services_captiveportal.php:829 +#: usr/local/www/services_captiveportal.php:845 +#: usr/local/www/services_captiveportal.php:845 +msgid "NAS Identifier" +msgstr "NASã®è­˜åˆ¥å­" + +#: usr/local/www/services_captiveportal.php:831 +#: usr/local/www/services_captiveportal.php:847 +#: usr/local/www/services_captiveportal.php:847 +msgid "Specify a NAS identifier to override the default value" +msgstr "デフォルト値を上書ãã™ã‚‹ãŸã‚ã«ã€NAS識別å­ã‚’指定ã™ã‚‹" + +#: usr/local/www/pkg_mgr_install.php:193 usr/local/www/pkg_mgr_install.php:189 +#: usr/local/www/pkg_mgr_install.php:189 +msgid "No packages are installed." +msgstr "何ã®ãƒ‘ッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。" + +#: usr/local/www/interfaces_bridge_edit.php:154 +#: usr/local/www/interfaces_bridge_edit.php:154 +msgid "A member interface passed does not exist in configuration" +msgstr "渡ã•れãŸãƒ¡ãƒ³ãƒãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¯ã€ã‚³ãƒ³ãƒ•ィギュレーションã«å­˜åœ¨ã—ãªã„" + +#: usr/local/www/status_queues.php:150 usr/local/www/status_queues.php:150 +msgid "PPS" +msgstr "PPS" + +#: usr/local/www/status_queues.php:152 usr/local/www/status_queues.php:152 +msgid "Borrows" +msgstr "借用" + +#: usr/local/www/status_queues.php:153 usr/local/www/status_queues.php:153 +msgid "Suspends" +msgstr "を中断" + +#: usr/local/www/status_queues.php:154 usr/local/www/status_queues.php:154 +msgid "Drops" +msgstr "ドロップス" + +#: usr/local/www/status_queues.php:155 usr/local/www/status_queues.php:155 +msgid "Length" +msgstr "é•·ã•" + +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:51 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:78 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:78 +msgid "Int." +msgstr "int型。" + +#: usr/local/www/widgets/widgets/log.widget.php:164 +#: usr/local/www/widgets/widgets/log.widget.php:168 +#: usr/local/www/widgets/widgets/log.widget.php:176 +msgid "IF" +msgstr "IF" + +#: usr/local/www/widgets/widgets/log.widget.php:167 +#: usr/local/www/widgets/widgets/log.widget.php:171 +msgid "Prot" +msgstr "PROT" + +#: usr/local/www/services_dnsmasq.php:199 +#: usr/local/www/services_dnsmasq.php:201 +#: usr/local/www/services_dnsmasq.php:222 +#: usr/local/www/services_dnsmasq.php:222 +msgid "DNS Query Forwarding" +msgstr "DNSクエリ転é€" + +#: usr/local/www/services_dnsmasq.php:202 +#: usr/local/www/services_dnsmasq.php:204 +#: usr/local/www/services_dnsmasq.php:225 +#: usr/local/www/services_dnsmasq.php:225 +msgid "Query DNS servers sequentially" +msgstr "クエリã®DNSサーãƒãƒ¼ãŒé †æ¬¡" + +#: usr/local/www/services_dnsmasq.php:203 +#: usr/local/www/services_dnsmasq.php:205 +#: usr/local/www/services_dnsmasq.php:226 +#: usr/local/www/services_dnsmasq.php:226 +#, php-format +msgid "" +"If this option is set, %s DNS Forwarder (dnsmasq) will query the DNS servers " +"sequentially in the order specified (System - General Setup - DNS " +"Servers), rather than all at once in parallel. " +msgstr "ã‚€ã—ã‚ã€ä¸€åº¦ã®ã™ã¹ã¦ã®ã‚ˆã‚Š - ( - 一般設定ã®DNS 「サーãƒãƒ¼u003c/ I u003eシステムu003cIu003e )指定ã•れãŸé †ã«ã€Œã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€DNSフォワーダ( DNSMASQ )ãŒDNSサーãƒã«å•ã„åˆã‚ã›ã‚’行ã„%s "平行ã§ã‚る。" + +#: usr/local/www/services_dnsmasq.php:212 +#: usr/local/www/services_dnsmasq.php:214 +#: usr/local/www/services_dnsmasq.php:235 +#: usr/local/www/services_dnsmasq.php:235 +msgid "Require domain" +msgstr "ドメインを必è¦ã¨ã™ã‚‹" + +#: usr/local/www/services_dnsmasq.php:213 +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_dnsmasq.php:236 +#, php-format +msgid "" +"If this option is set, %s DNS Forwarder (dnsmasq) will not forward A or AAAA " +"queries for plain names, without dots or domain parts, to upstream name " +"servers. If the name is not known from /etc/hosts or DHCP then a "not found" +"" answer is returned. " +msgstr "åå‰ã€Œã‚µãƒ¼ãƒãƒ¼ã®ä¸Šæµã€ãƒ‰ãƒƒãƒˆã¾ãŸã¯ãƒ‰ãƒ¡ã‚¤ãƒ³ã®éƒ¨åˆ†ãªã—ã§ã€ãƒ—レーンãªåå‰ã®ç…§ä¼šã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€DNSフォワーダã¯è»¢é€ã—ã¾ã›ã‚“Aã¾ãŸã¯AAAA ( DNSMASQ ) %s 〠。åå‰ã¯/ etc / hostsファイルã‹ã‚‰çŸ¥ã‚‰ã‚Œã¦ã„ãªã„å ´åˆã¾ãŸã¯DHCPã¯ãã®å¾Œã€ "見ã¤ã‹ã‚Šã¾ã›ã‚“""ç­”ãˆãŒè¿”ã•れã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase1.php:183 +#: usr/local/www/vpn_ipsec_phase1.php:183 +msgid "" +"A valid remote gateway IPv4 address must be specified or you need to change " +"protocol to IPv6" +msgstr "「有効ãªãƒªãƒ¢ãƒ¼ãƒˆã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤IPv4アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚る〠IPv6ã¸ã®ãƒ—ロトコルを" + +#: usr/local/www/vpn_ipsec_phase1.php:185 +#: usr/local/www/vpn_ipsec_phase1.php:185 +msgid "" +"A valid remote gateway IPv6 address must be specified or you need to change " +"protocol to IPv4" +msgstr "「有効ãªãƒªãƒ¢ãƒ¼ãƒˆã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã®IPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚る〠IPv4ã«ãƒ—ロトコルを" + +#: usr/local/www/vpn_ipsec_phase1.php:205 +#: usr/local/www/vpn_ipsec_phase1.php:205 +msgid "There is a Phase 2 using IPv6, you cannot use IPv4." +msgstr "IPv6を使用ã—ã¦ã€ãƒ•ェーズ2ãŒã‚りã¾ã™ãŒã€ã‚ãªãŸã¯ã€IPv4を使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/vpn_ipsec_phase1.php:209 +#: usr/local/www/vpn_ipsec_phase1.php:209 +msgid "There is a Phase 2 using IPv4, you cannot use IPv6." +msgstr "IPv4を使用ã—ã¦ã€ãƒ•ェーズ2ãŒã‚りã¾ã™ãŒã€ã‚ãªãŸã¯ã€IPv6を使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/vpn_openvpn_server.php:1226 +#: usr/local/www/vpn_openvpn_server.php:1226 +msgid "IPv4 Local Network/s" +msgstr "IPv4ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯/ S" + +#: usr/local/www/vpn_openvpn_server.php:1230 +#: usr/local/www/vpn_openvpn_server.php:1230 +msgid "" +"These are the IPv4 networks that will be accessible from the remote " +"endpoint. Expressed as a comma-separated list of one or more CIDR ranges. " +"You may leave this blank if you don't want to add a route to the local " +"network through this tunnel on the remote machine. This is generally set to " +"your LAN network" +msgstr "エンドãƒã‚¤ãƒ³ãƒˆã¯"ã“れらã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã€IPv4ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。 1ã¤ä»¥ä¸Šã®CIDR範囲をカンマã§åŒºåˆ‡ã£ãŸãƒªã‚¹ãƒˆã¨ã—ã¦è¡¨ç¾ã€‚リモートマシン上ã§ã“ã®ãƒˆãƒ³ãƒãƒ«ã‚’経由ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã¸ã®ãƒ«ãƒ¼ãƒˆã‚’追加ã—ãŸããªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ã€ 。ã“れã¯ä¸€èˆ¬ã«ã€Œ LANãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«è¨­å®šã•れã¦ã„ã‚‹" + +#: usr/local/www/vpn_openvpn_server.php:1239 +#: usr/local/www/vpn_openvpn_server.php:1239 +msgid "IPv6 Local Network/s" +msgstr "IPv6ローカルãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯/ S" + +#: usr/local/www/vpn_openvpn_server.php:1243 +#: usr/local/www/vpn_openvpn_server.php:1243 +msgid "" +"These are the IPv6 networks that will be accessible from the remote " +"endpoint. Expressed as a comma-separated list of one or more IP/PREFIX. You " +"may leave this blank if you don't want to add a route to the local network " +"through this tunnel on the remote machine. This is generally set to your LAN " +"network" +msgstr "エンドãƒã‚¤ãƒ³ãƒˆã¯"ã“れらã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã€IPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。 1ã¾ãŸã¯è¤‡æ•°ã®IP /プレフィックスをカンマã§åŒºåˆ‡ã£ãŸãƒªã‚¹ãƒˆã¨ã—ã¦è¡¨ç¾ã€‚リモートマシン上ã§ã“ã®ãƒˆãƒ³ãƒãƒ«ã‚’通éŽã—ã¦ã€ 「ローカルãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒ«ãƒ¼ãƒˆã‚’追加ã—ãªã„å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã‚り〠。ã“れã¯ã€ä¸€èˆ¬ã«LAN ã€ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«è¨­å®šã•れã¦ã„ã‚‹" + +#: usr/local/www/vpn_openvpn_server.php:1256 +#: usr/local/www/vpn_openvpn_server.php:1256 +msgid "" +"These are the IPv4 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more CIDR ranges. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank if you don't want a site-to-site VPN" +msgstr "サイト間VPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã€ã®ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«ç¢ºç«‹ã§ãã‚‹ã€ã‚ˆã†ã«ã€ã“れらã¯ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•れãŸIPv4ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。 1ã¤ä»¥ä¸Šã®CIDRã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªã‚¹ãƒˆã¨ã—ã¦è¡¨ç¾ã—ã¾ã™ã€‚範囲「ã“ã®ã‚ˆã†ã«å…¥åŠ›ã—ã€ã‚µã‚¤ãƒˆé–“VPNã§LANãŒ/ã“ã“ã®ãƒªãƒ¢ãƒ¼ãƒˆã€‚ã‚ãªãŸã¯ã‚µã‚¤ãƒˆé–“VPNを使用ã—ãªã„å ´åˆã¯ã€ã“ã®ã€Œç©ºç™½ã®ã¾ã¾ã«å¯èƒ½æ€§" + +#: usr/local/www/vpn_openvpn_server.php:1270 +#: usr/local/www/vpn_openvpn_server.php:1270 +msgid "" +"These are the IPv6 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank if you don't want a site-to-site VPN" +msgstr "サイト間VPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã€ã®ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 1ã¾ãŸã¯è¤‡æ•°ã®IP /プレフィックスをカンマã§åŒºåˆ‡ã£ãŸãƒªã‚¹ãƒˆã¨ã—ã¦ç™ºç¾ã•れãŸã€ã“れらã¯ã‚ˆã†ã«ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•れãŸIPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。ã“れã¯ã‚µã‚¤ãƒˆé–“VPNã§ã‚ã‚‹ã€å ´åˆã«ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆLANã«å…¥ã‚‹/ sã“ã¡ã‚‰ã€‚ã‚ãªãŸã¯ã‚µã‚¤ãƒˆé–“VPNを使用ã—ãªã„å ´åˆã¯ã€ã“ã®ã€Œç©ºç™½ã®ã¾ã¾ã«å¯èƒ½æ€§" + +#: usr/local/www/vpn_openvpn_server.php:1405 +#: usr/local/www/vpn_openvpn_server.php:1405 +msgid "Topology" +msgstr "トãƒãƒ­ã‚¸ãƒ¼" + +#: usr/local/www/vpn_openvpn_server.php:1415 +#: usr/local/www/vpn_openvpn_server.php:1415 +msgid "" +"Allocate only one IP per client (topology subnet), rather than an isolated " +"subnet per client (topology net30)." +msgstr "クライアントã”ã¨ã«ã‚µãƒ–ãƒãƒƒãƒˆï¼ˆãƒˆãƒãƒ­ã‚¸ãƒ¼net30 ) ã€ã®ã¿1クライアントã”ã¨ã«IP(トãƒãƒ­ã‚¸ã®ã‚µãƒ–ãƒãƒƒãƒˆï¼‰ã®ã§ã¯ãªãã€å­¤ç«‹ã‚’割り当ã¦ã‚‹ã€ 。" + +#: usr/local/www/vpn_openvpn_server.php:1422 +#: usr/local/www/vpn_openvpn_server.php:1422 +msgid "" +"Relevant when supplying a virtual adapter IP address to clients when using " +"tun mode on IPv4." +msgstr "「関連ã™ã‚‹ä½¿ç”¨æ™‚ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ä»®æƒ³ã‚¢ãƒ€ãƒ—ã‚¿ã®IPアドレスを供給ã™ã‚‹éš›ã«ã€ã€Œ IPv4ã®ä¸ŠTUNモードを。" + +#: usr/local/www/vpn_openvpn_server.php:1423 +#: usr/local/www/vpn_openvpn_server.php:1423 +msgid "" +"Some clients may require this even for IPv6, such as OpenVPN Connect (iOS/" +"Android). Others may break if it is present, such as older versions of " +"OpenVPN or clients such as Yealink phones." +msgstr "「 ( Androidã®ä¸€éƒ¨ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã§ã‚‚ã€ã“ã®ã‚ˆã†ãªOpenVPNã®æŽ¥ç¶šã®iOS / )ãªã©ã®IPv6ã®ãŸã‚ã«ã“れを必è¦ã¨ã™ã‚‹ã“ã¨ã€ 。ãれã¯ãã®ã‚ˆã†ãª "OpenVPNã®ã‹ãªYealink電話ãªã©ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æ—§ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãªã©ã€å­˜åœ¨ã™ã‚‹å ´åˆã€ä»–ã«ç ´æã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:133 +#: usr/local/www/vpn_ipsec_phase2.php:133 +msgid "" +"A valid local network IPv4 address must be specified or you need to change " +"Mode to IPv6" +msgstr "「有効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv4アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã®ã€ŒIPv6モードã«" + +#: usr/local/www/vpn_ipsec_phase2.php:135 +#: usr/local/www/vpn_ipsec_phase2.php:135 +msgid "" +"A valid local network IPv6 address must be specified or you need to change " +"Mode to IPv4" +msgstr "「有効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã€ã¯IPv4モードã«" + +#: usr/local/www/vpn_ipsec_phase2.php:159 +#: usr/local/www/vpn_ipsec_phase2.php:159 +msgid "" +"A valid NAT local network IPv4 address must be specified or you need to " +"change Mode to IPv6" +msgstr "「有効ãªNATã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv4アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã¾ãŸã¯æ¬¡ã®ã“ã¨ã‚’行ã†å¿…è¦ãŒã‚りã€ã€Œ IPv6ã¸ã®å¤‰æ›´ãƒ¢ãƒ¼ãƒ‰" + +#: usr/local/www/vpn_ipsec_phase2.php:161 +#: usr/local/www/vpn_ipsec_phase2.php:161 +msgid "" +"A valid NAT local network IPv6 address must be specified or you need to " +"change Mode to IPv4" +msgstr "「有効ãªNATã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã¾ãŸã¯æ¬¡ã®ã“ã¨ã‚’行ã†å¿…è¦ãŒã‚り〠"IPv4ã«å¤‰æ›´ãƒ¢ãƒ¼ãƒ‰" + +#: usr/local/www/vpn_ipsec_phase2.php:183 +#: usr/local/www/vpn_ipsec_phase2.php:183 +msgid "" +"A valid remote network IPv4 address must be specified or you need to change " +"Mode to IPv6" +msgstr "「有効ãªãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv4アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã®ã€ŒIPv6モードã«" + +#: usr/local/www/vpn_ipsec_phase2.php:185 +#: usr/local/www/vpn_ipsec_phase2.php:185 +msgid "" +"A valid remote network IPv6 address must be specified or you need to change " +"Mode to IPv4" +msgstr "「有効ãªãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã€ã¯IPv4モードã«" + +#: usr/local/www/vpn_ipsec_phase2.php:192 +#: usr/local/www/vpn_ipsec_phase2.php:192 +msgid "Mobile IPsec only supports Tunnel mode." +msgstr "モãƒã‚¤ãƒ«IPsecã¯ãƒˆãƒ³ãƒãƒ«ãƒ¢ãƒ¼ãƒ‰ã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/vpn_ipsec_phase2.php:287 +#: usr/local/www/vpn_ipsec_phase2.php:287 +msgid "Phase 1 is using IPv4. You cannot use Tunnel IPv6 on Phase 2." +msgstr "フェーズ1ã¯ã€IPv4を使用ã—ã¦ã„ã¾ã™ã€‚ã‚ãªãŸã¯ã€ãƒ•ェーズ2ã®ãƒˆãƒ³ãƒãƒ«ã«IPv6を使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/vpn_ipsec_phase2.php:289 +#: usr/local/www/vpn_ipsec_phase2.php:289 +msgid "Phase 1 is using IPv6. You cannot use Tunnel IPv4 on Phase 2." +msgstr "フェーズ1ã¯ã€IPv6を使用ã—ã¦ã„ã¾ã™ã€‚ã‚ãªãŸã¯ã€ãƒ•ェーズ2ã®ãƒˆãƒ³ãƒãƒ«ã¯IPv4を使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/interfaces_assign.php:210 +#: usr/local/www/interfaces_assign.php:210 +#, php-format +msgid "" +"You cannot set port %s to interface %s because this interface is a member of " +"%s." +msgstr "%s. 「ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースãŒãƒ¡ãƒ³ãƒãƒ¼ã¨ãªã£ã¦ã„ã‚‹ãŸã‚ã§ã™%sã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã«ãƒãƒ¼ãƒˆ%sを設定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã€" + +#: usr/local/www/services_snmp.php:395 usr/local/www/services_snmp.php:395 +msgid "UCD" +msgstr "UCD" + +#: usr/local/www/services_snmp.php:397 usr/local/www/services_snmp.php:397 +msgid "Regex" +msgstr "æ­£è¦è¡¨ç¾" + +#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:560 +#: usr/local/www/interfaces.php:556 usr/local/www/interfaces.php:556 +msgid "This IPv4 address is being used by another interface or VIP." +msgstr "ã“ã®IPv4アドレスã¯ã€åˆ¥ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¾ãŸã¯VIPã§ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:557 usr/local/www/interfaces.php:565 +#: usr/local/www/interfaces.php:561 usr/local/www/interfaces.php:561 +msgid "This IPv4 address conflicts with a Static Route." +msgstr "スタティックルートã§ã“ã®IPv4アドレスãŒç«¶åˆã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:568 usr/local/www/interfaces.php:577 +#: usr/local/www/interfaces.php:573 usr/local/www/interfaces.php:573 +msgid "This IPv6 address is being used by another interface or VIP." +msgstr "ã“ã®IPv6アドレスã¯ã€åˆ¥ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¾ãŸã¯VIPã§ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:572 usr/local/www/interfaces.php:582 +#: usr/local/www/interfaces.php:578 usr/local/www/interfaces.php:578 +msgid "This IPv6 address conflicts with a Static Route." +msgstr "スタティックルートã«ã“ã®IPv6アドレスã¯ç«¶åˆã—ã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:2651 usr/local/www/interfaces.php:2697 +#: usr/local/www/interfaces.php:2686 usr/local/www/interfaces.php:2686 +msgid "" +"Note: The update frequency can be changed under System->Advanced Firewall/" +"NAT settings." +msgstr ""注:更新頻度ã¯ã€System -u003e高度ãªãƒ•ァイアウォール/ã®ä¸‹ã«å¤‰æ›´ã™ã‚‹ã“ã¨ãŒã§ãã€ã€Œ NATã®è¨­å®šã‚’行ã„ã¾ã™ã€‚" + +#: etc/inc/priv/user.priv.inc:6 etc/inc/priv/user.priv.inc:6 +msgid "User - Services - Captive portal login" +msgstr "ユーザー - サービス - キャプティブãƒãƒ¼ã‚¿ãƒ«ã®ãƒ­ã‚°ã‚¤ãƒ³" + +#: etc/inc/priv/user.priv.inc:7 etc/inc/priv/user.priv.inc:7 +msgid "Indicates whether the user is able to login on the captive portal." +msgstr "利用者ãŒã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" + +#: etc/inc/pkg-utils.inc:617 etc/inc/pkg-utils.inc:618 +#: etc/inc/pkg-utils.inc:617 etc/inc/pkg-utils.inc:618 +#, php-format +msgid "Package %s is not supported on this version." +msgstr "パッケージ%sã¯ã€ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“。" + +#: etc/inc/priv.defs.inc:732 etc/inc/priv.defs.inc:732 +msgid "WebCfg - Services: Captive portal: Allowed Hostnames page" +msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šå¯ãƒ›ã‚¹ãƒˆåページ" + +#: etc/inc/priv.defs.inc:733 etc/inc/priv.defs.inc:739 +#: etc/inc/priv.defs.inc:733 etc/inc/priv.defs.inc:739 +msgid "Allow access to the 'Services: Captive portal: Allowed Hostnames' page." +msgstr "ページ':キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒ›ã‚¹ãƒˆåå¯ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/priv.defs.inc:738 etc/inc/priv.defs.inc:738 +msgid "WebCfg - Services: Captive portal: Edit Allowed Hostnames page" +msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šç·¨é›†å¯ãƒ›ã‚¹ãƒˆåページ" + +#: etc/inc/priv.defs.inc:1136 etc/inc/priv.defs.inc:1136 +msgid "WebCfg - System: User Manager: settings page" +msgstr "WebCfg - システム:ユーザーマãƒãƒ¼ã‚¸ãƒ£ï¼šè¨­å®šãƒšãƒ¼ã‚¸" + +#: etc/inc/priv.defs.inc:1137 etc/inc/priv.defs.inc:1137 +msgid "Allow access to the 'System: User Manager: settings' page." +msgstr "ページ':ユーザーマãƒãƒ¼ã‚¸ãƒ£ã®è¨­å®šã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" + +#: etc/inc/interfaces.inc:294 etc/inc/interfaces.inc:294 +#, php-format +msgid "interface_qinq_configure called with invalid if.%s" +msgstr "interface_qinq_configure無効if.%sã¨å‘¼ã°ã‚Œã‚‹" + +#: etc/inc/interfaces.inc:401 etc/inc/interfaces.inc:401 +msgid "Creating wireless clone interfaces..." +msgstr "ワイヤレスクローン·インターフェースを作æˆã—ã¦ã„ã¾ã™..." + +#: etc/inc/interfaces.inc:1139 etc/inc/interfaces.inc:1141 +#: etc/inc/interfaces.inc:1141 +msgid "Wrong parameters used during interface_bring_down" +msgstr "interface_bring_down中ã«ä½¿ç”¨ã•れã€é–“é•ã£ãŸãƒ‘ラメータ" + +#: etc/inc/services.inc:2013 etc/inc/services.inc:2053 +#: etc/inc/services.inc:2084 etc/inc/services.inc:2148 +#, php-format +msgid "Removed cron job for %s" +msgstr "%sãŸã‚ã«å–り外ã•cronジョブ" + +#: etc/inc/openvpn.inc:257 etc/inc/openvpn.inc:257 +#, php-format +msgid "The field '%s' must contain a single valid %s CIDR range." +msgstr "フィールド' %s ã€ã¯ã€å˜ä¸€ã®%s有効ãªCIDR範囲ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/openvpn.inc:269 etc/inc/openvpn.inc:269 +#, php-format +msgid "" +"The field '%s' must contain only valid %s CIDR range(s) separated by commas." +msgstr "「フィールド' %sã¯ã€Œå”¯ä¸€ã®æœ‰åйãªã‚«ãƒ³ãƒžã§åŒºåˆ‡ã£ã¦ã€CIDR範囲(複数å¯ï¼‰ã‚’%så«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/vpn.inc:1780 etc/inc/vpn.inc:1793 etc/inc/vpn.inc:1790 +#, php-format +msgid "" +"Removing SPDs from tunnel gw '%1$s'. Local Subnet '%2$s' and Remote Subnet " +"'%3$s'. Reloading policy" +msgstr "「トンãƒãƒ«GW ã€ã¯%1$s'ã‹ã‚‰ã®SPDを削除ã™ã‚‹ã€‚ローカルサブãƒãƒƒãƒˆã‚’「 %2$s ã€ã¨ãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ–ãƒãƒƒãƒˆã€ 「 %3$s 〠。ãƒãƒªã‚·ãƒ¼ã®å†ãƒ­ãƒ¼ãƒ‰" + +#: etc/inc/pfsense-utils.inc:938 etc/inc/pfsense-utils.inc:938 +msgid "Disabling auto login was not possible." +msgstr "自動ログインを無効ã«ã™ã‚‹ã¨ã€å¯èƒ½ã§ã¯ãªã‹ã£ãŸã€‚" + +#: etc/inc/pfsense-utils.inc:956 etc/inc/pfsense-utils.inc:956 +msgid "Enabled console auto login, console menu is NOT password protected." +msgstr "有効ã«ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®è‡ªå‹•ログインã¯ã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¯ã€ãƒ‘スワードã§ä¿è­·ã•れã¦ã„ã¾ã›ã‚“。" + +#: etc/inc/pfsense-utils.inc:958 etc/inc/pfsense-utils.inc:958 +msgid "Disabled console auto login, console menu is password protected." +msgstr "[無効]コンソールã®è‡ªå‹•ログインã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®ãƒ‘スワードã¯ä¿è­·ã•れã¦ã„ã¾ã™ã€‚" + +#: usr/local/www/system_gateways_edit.php:552 +#: usr/local/www/system_gateways_edit.php:582 +#: usr/local/www/system_gateways_edit.php:582 +msgid " - Show advanced option" +msgstr " - 表示ã™ã‚‹é«˜åº¦ãªã‚ªãƒ—ション" + +#: usr/local/www/services_dyndns_edit.php:302 +#: usr/local/www/services_dyndns_edit.php:302 +msgid "Verbose logging" +msgstr "詳細ログ" + +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/services_dyndns_edit.php:305 +msgid "verbose logging" +msgstr "詳細ログ" + +#: usr/local/www/status_openvpn.php:278 usr/local/www/status_openvpn.php:339 +#: usr/local/www/status_openvpn.php:278 usr/local/www/status_openvpn.php:339 +msgid "Bytes Rcvd" +msgstr "ãƒã‚¤ãƒˆå—ä¿¡æ•°" + +#: usr/local/www/status_openvpn.php:385 usr/local/www/status_openvpn.php:385 +msgid "" +"If you have custom options that override the management features of OpenVPN " +"on a client or server, they will cause that OpenVPN instance to not work " +"correctly with this status page." +msgstr "クライアントã¾ãŸã¯ã‚µãƒ¼ãƒãƒ¼ä¸Šã§ã€Œã‚ãªãŸãŒOpenVPNã®ã®ç®¡ç†æ©Ÿèƒ½ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã‚«ã‚¹ã‚¿ãƒ ã‚ªãƒ—ションを使用ã—ã¦ã„ã‚‹å ´åˆã€ ã€å½¼ã‚‰ã¯OpenVPNã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒã“ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸ã§ã¯æ­£ã—ã「動作ã—ãªã„ã“ã¨ãŒç™ºç”Ÿã—ã¾ã™ã€‚" + +#: usr/local/www/firewall_rules_edit.php:1579 +#: usr/local/www/firewall_nat_edit.php:863 +#: usr/local/www/firewall_nat_out_edit.php:678 +#: usr/local/www/firewall_rules_edit.php:1590 +#: usr/local/www/firewall_nat_edit.php:864 +#: usr/local/www/firewall_rules_edit.php:1590 +#: usr/local/www/firewall_nat_edit.php:864 +#: usr/local/www/firewall_nat_out_edit.php:678 +msgid "Rule Information" +msgstr "情報ルール" + +#: usr/local/www/firewall_rules_edit.php:1583 +#: usr/local/www/firewall_nat_edit.php:867 +#: usr/local/www/firewall_nat_out_edit.php:682 +#: usr/local/www/firewall_rules_edit.php:1594 +#: usr/local/www/firewall_nat_edit.php:868 +#: usr/local/www/firewall_rules_edit.php:1594 +#: usr/local/www/firewall_nat_edit.php:868 +#: usr/local/www/firewall_nat_out_edit.php:682 +msgid "Created" +msgstr "作æˆ" + +#: usr/local/www/firewall_rules_edit.php:1591 +#: usr/local/www/firewall_nat_edit.php:875 +#: usr/local/www/firewall_nat_out_edit.php:690 +#: usr/local/www/firewall_rules_edit.php:1602 +#: usr/local/www/firewall_nat_edit.php:876 +#: usr/local/www/firewall_rules_edit.php:1602 +#: usr/local/www/firewall_nat_edit.php:876 +#: usr/local/www/firewall_nat_out_edit.php:690 +msgid "Updated" +msgstr "æ›´æ–°ã—ãŸ" + +#: usr/local/www/diag_logs_filter.php:163 +#: usr/local/www/diag_logs_filter.php:163 +msgid "Source IP Address" +msgstr "é€ä¿¡å…ƒIPアドレス" + +#: usr/local/www/diag_logs_filter.php:175 +#: usr/local/www/diag_logs_filter.php:255 +#: usr/local/www/diag_logs_filter.php:175 +#: usr/local/www/diag_logs_filter.php:255 +msgid "Quantity" +msgstr "æ•°é‡" + +#: usr/local/www/diag_logs_filter.php:185 +#: usr/local/www/diag_logs_filter.php:185 +msgid "Destination IP Address" +msgstr "宛先IPアドレス" + +#: usr/local/www/diag_logs_filter.php:193 +#: usr/local/www/diag_logs_filter.php:193 +msgid "Protocol Flags" +msgstr "プロトコルフラグ" + +#: usr/local/www/diag_logs_filter.php:203 +#: usr/local/www/diag_logs_filter.php:266 +#: usr/local/www/diag_logs_filter.php:203 +#: usr/local/www/diag_logs_filter.php:266 +#, php-format +msgid "Matches %1$s regular expression%2$s." +msgstr "試åˆã¯ã€é€šå¸¸ã®expression%2$sã‚’ã¯%1$s 。" + +#: usr/local/www/diag_logs_filter.php:204 +#: usr/local/www/diag_logs_filter.php:204 +msgid "Precede with exclamation (!) as first character to exclude match." +msgstr "マッãƒã‚’除外ã—ãŸæœ€åˆã®æ–‡å­—ã¨ã—ã¦æ„Ÿå˜†ç¬¦ï¼ˆ ï¼ï¼‰ã«å…ˆè¡Œã™ã‚‹ã€‚" + +#: usr/local/www/diag_logs_filter.php:251 +#: usr/local/www/diag_logs_filter.php:251 +msgid "Filter expresion" +msgstr "フィルタEXPRESION" + +#: usr/local/www/diag_dump_states.php:136 +#: usr/local/www/diag_dump_states.php:136 +msgid "Current total state count" +msgstr "ç¾åœ¨ã®ç·çŠ¶æ…‹æ•°" + +#: usr/local/www/diag_dump_states.php:218 +#: usr/local/www/diag_dump_states.php:218 +msgid "States matching current filter" +msgstr "ç¾åœ¨ã®ãƒ•ィルタã«ä¸€è‡´ã™ã‚‹çŠ¶æ…‹" + +#: usr/local/www/firewall_nat_edit.php:417 +#: usr/local/www/firewall_nat_edit.php:417 +msgid "NAT Port Forward" +msgstr "NATã®ãƒãƒ¼ãƒˆãƒ•ォワード" + +#: usr/local/www/status_graph.php:242 usr/local/www/status_graph.php:242 +msgid "Host Name or IP" +msgstr "ホストåã¾ãŸã¯IP" + +#: usr/local/www/interfaces_gif_edit.php:210 +#: usr/local/www/interfaces_gif_edit.php:210 +msgid "ECN friendly behavior" +msgstr "é›»å­è¨¼åˆ¸å–引ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ã‚„ã•ã—ã„行動" + +#: usr/local/www/firewall_virtual_ip_edit.php:146 +#: usr/local/www/firewall_virtual_ip_edit.php:146 +msgid "You cannot use the network address for this VIP" +msgstr "ã“ã®VIPã®ãŸã‚ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/firewall_virtual_ip_edit.php:148 +#: usr/local/www/firewall_virtual_ip_edit.php:148 +msgid "You cannot use the broadcast address for this VIP" +msgstr "ã“ã®VIPã®ãŸã‚ã«ãƒ–ロードキャストアドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" + +#: usr/local/www/diag_packet_capture.php:204 +#: usr/local/www/diag_packet_capture.php:204 +msgid "Promiscuous" +msgstr "無差別" + +#: usr/local/www/diag_packet_capture.php:207 +#: usr/local/www/diag_packet_capture.php:207 +msgid "If checked, the" +msgstr "ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€" + +#: usr/local/www/diag_packet_capture.php:207 +#: usr/local/www/diag_packet_capture.php:207 +msgid "packet capture" +msgstr "パケットキャプãƒãƒ£" + +#: usr/local/www/diag_packet_capture.php:207 +#: usr/local/www/diag_packet_capture.php:207 +msgid "will be performed using promiscuous mode." +msgstr "プロミスキャスモードを使用ã—ã¦å®Ÿè¡Œã•れã¾ã™ã€‚" + +#: usr/local/www/diag_packet_capture.php:208 +#: usr/local/www/diag_packet_capture.php:208 +msgid "Some network adapters do not support or work well in promiscuous mode." +msgstr "一部ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ€ãƒ—タをサãƒãƒ¼ãƒˆã¾ãŸã¯ç„¡å·®åˆ¥ãƒ¢ãƒ¼ãƒ‰ã§æ­£å¸¸ã«å‹•作ã—ã¾ã›ã‚“。" + +#: usr/local/www/diag_traceroute.php:72 usr/local/www/diag_ping.php:67 +#: usr/local/www/diag_traceroute.php:72 usr/local/www/diag_ping.php:67 +msgid "When using IPv4, the target host must be an IPv4 address or hostname." +msgstr "IPv4を使用ã™ã‚‹å ´åˆã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã¯ã€IPv4アドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/diag_traceroute.php:74 usr/local/www/diag_ping.php:69 +#: usr/local/www/diag_traceroute.php:74 usr/local/www/diag_ping.php:69 +msgid "When using IPv6, the target host must be an IPv6 address or hostname." +msgstr "IPv6を使用ã™ã‚‹å ´åˆã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã¯ã€IPv6アドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" + +#: usr/local/www/diag_traceroute.php:164 usr/local/www/diag_traceroute.php:164 +msgid "" +"Using a source interface/IP address that does not match selected type (IPv4, " +"IPv6) will result in an error or empty output." +msgstr "「 ( IPv6ã®é¸æŠžã—ãŸã‚¿ã‚¤ãƒ—ã®IPv4ãªã©ï¼‰ã¨ä¸€è‡´ã—ãªã„é€ä¿¡å…ƒã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス/ IPアドレスを使用ã™ã‚‹ã¨ã€ 「エラーã¾ãŸã¯ç©ºã®å‡ºåŠ›ã«ãªã‚Šã¾ã™ã€‚" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1472 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1493 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1507 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1524 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1543 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1567 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1594 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1647 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1416 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1436 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1450 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1467 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1486 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1510 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1589 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1352 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1373 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1387 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1403 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1422 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1446 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1473 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1526 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1213 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1234 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1248 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1265 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1284 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1308 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1335 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1388 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1471 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1492 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1506 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1523 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1566 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1593 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1646 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1415 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1435 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1449 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1466 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1485 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1509 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1588 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1351 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1372 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1386 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1402 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1421 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1445 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1472 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1525 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1212 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1233 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1247 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1264 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1283 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1307 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1334 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1387 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1471 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1492 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1506 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1523 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1566 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1593 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1646 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1415 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1435 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1449 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1466 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1485 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1509 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1588 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1351 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1372 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1386 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1402 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1421 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1445 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1472 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1525 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1212 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1233 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1247 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1264 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1283 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1307 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1334 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1387 +msgid "Traffic Shaper Wizard" +msgstr "トラフィックシェーパーウィザード" + +#: usr/local/www/wizards/openvpn_wizard.inc:614 +#: usr/local/www/wizards/openvpn_wizard.inc:629 +#: usr/local/www/wizards/openvpn_wizard.inc:614 +#: usr/local/www/wizards/openvpn_wizard.inc:629 +msgid "OpenVPN Wizard" +msgstr "OpenVPNã®ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰" + +#: usr/local/www/services_dhcp.php:274 usr/local/www/services_dhcp.php:274 +#, php-format +msgid "" +"The Captive Portal zone '%s' has Hard Timeout parameter set to a value " +"bigger than Default lease time (%s)." +msgstr "デフォルトã®ãƒªãƒ¼ã‚¹æ™‚間( %s )よりも大ãã„「キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚¾ãƒ¼ãƒ³ã®%sã¯'ã®å€¤ã«è¨­å®šãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãƒ‘ラメータをæŒã¤ã€ 。" + +#: usr/local/www/system_certmanager.php:1026 +#: usr/local/www/system_certmanager.php:1026 +msgid "Signing request data" +msgstr "ç½²åè¦æ±‚データ" + +#: usr/local/www/system_certmanager.php:1034 +#: usr/local/www/system_certmanager.php:1034 +msgid "Final certificate data" +msgstr "最終的ãªè¨¼æ˜Žæ›¸ãƒ‡ãƒ¼ã‚¿" + +#: usr/local/www/system_advanced_admin.php:447 +#: usr/local/www/system_advanced_admin.php:447 +msgid "" +"When this is unchecked, access to the webConfigurator is protected against " +"HTTP_REFERER redirection attempts. Check this box to disable this protection " +"if you find that it interferes with webConfigurator access in certain corner " +"cases such as using external scripts to interact with this system. More " +"information on HTTP_REFERER is available from Wikipedia." +msgstr "HTTP_REFERERリダイレクトã—よã†ã¨ã€Œã“れをオフã«ã™ã‚‹ã¨ã€ webConfiguratorã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒã‹ã‚‰ä¿è­·ã•れã¦ã„ã¾ã™ã€ 。ã“ã®ã‚ˆã†ãªã€ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã¨å¯¾è©±ã™ã‚‹å¤–部スクリプトを使用ã™ã‚‹ãªã©ã®ã‚±ãƒ¼ã‚¹"ã‚ãªãŸã¯ãれãŒç‰¹å®šã®éš…ã«webConfiguratorアクセスを妨害ã™ã‚‹ã“ã¨ã‚’発見ã—ãŸå ´åˆã€ã€Œã“ã®ä¿è­·ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’オンã«ã—ã¾ã™ã€‚ HTTP_REFERERã®è©³ç´°ã€ã®æƒ…å ±ã¯ã€ u003ca target='_blank' "href='http://en.wikipedia.org/wiki/HTTP_referrer'u003eウィキペディアu003c/ A u003eã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:105 +#: usr/local/www/system_advanced_misc.php:105 +msgid "/tmp Size must be numeric and should not be less than 40MB." +msgstr "/ tmpã®ã‚µã‚¤ã‚ºã¯æ•°å€¤ã§ãªã‘れã°ãªã‚‰ãšã€ 40MBを下回ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“。" + +#: usr/local/www/system_advanced_misc.php:108 +#: usr/local/www/system_advanced_misc.php:108 +msgid "/var Size must be numeric and should not be less than 60MB." +msgstr "/ VARã‚µã‚¤ã‚ºã¯æ•°å€¤ã§ãªã‘れã°ãªã‚‰ãšã€ 60MBを下回ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“。" + +#: usr/local/www/system_advanced_misc.php:558 +#: usr/local/www/system_advanced_misc.php:558 +msgid "Skip rules when gateway is down" +msgstr "ゲートウェイãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„ã‚‹ã¨ãã®ãƒ«ãƒ¼ãƒ«ã‚’スキップ" + +#: usr/local/www/system_advanced_misc.php:562 +#: usr/local/www/system_advanced_misc.php:562 +msgid "" +"By default, when a rule has a specific gateway set, and this gateway is " +"down, rule is created and traffic is sent to default gateway.This option " +"overrides that behavior and the rule is not created when gateway is down" +msgstr "「ルールã¯ç‰¹å®šã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ãŒè¨­å®šã•れã¦ãŠã‚Šã€ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã§ã‚ã‚‹å ´åˆã€ãƒ‡ãƒ•ォルトã§ã€ 「ダウンã€ãƒ«ãƒ¼ãƒ«ãŒä½œæˆã•れã€ãƒˆãƒ©ãƒ•ィックãŒgateway.Thisオプションをデフォルトã«é€ä¿¡ã•れã¾ã™ã€ã¨ã„ã†è¡Œå‹•やゲートウェイãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„ã‚‹ã¨ãã€ãƒ«ãƒ¼ãƒ«ãŒä½œæˆã•れã¦ã„ãªã„よりも優先ã•れã¾ã™" + +#: usr/local/www/system_advanced_misc.php:568 +#: usr/local/www/system_advanced_misc.php:568 +msgid "RAM Disk Settings (Reboot to Apply Changes)" +msgstr "RAMディスク設定(変更をé©ç”¨ã™ã‚‹ãŸã‚ã«å†èµ·å‹•ã—ã¾ã™ï¼‰" + +#: usr/local/www/system_advanced_misc.php:572 +#: usr/local/www/system_advanced_misc.php:572 +msgid "Use RAM Disks" +msgstr "RAMディスクを使用ã—ã¦ã€" + +#: usr/local/www/system_advanced_misc.php:575 +#: usr/local/www/system_advanced_misc.php:575 +msgid "Use memory file system for /tmp and /var" +msgstr "ã®ãŸã‚ã«/ tmpã¨/ varメモリファイルシステムを使用ã—ã¦ã€" + +#: usr/local/www/system_advanced_misc.php:576 +#: usr/local/www/system_advanced_misc.php:576 +msgid "" +"Set this if you wish to use /tmp and /var as RAM disks (memory file system " +"disks) on a full install rather than use the hard disk. Setting this will " +"cause the data in /tmp and /var to be lost at reboot, including log data. " +"RRD and DHCP Leases will be retained." +msgstr "フルインストールã®ã€Œ (ディスクã§ã¯ãªããƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã‚’使用ã—ã¦RAMディスクメモリファイルシステム)ã¨ã—ã¦/ tmpディレクトリã¨/ varを使用ã—ãŸã„å ´åˆã¯ã€ã“れを設定ã™ã‚‹ã€ 。ã“れを設定ã™ã‚‹ã¨ã€ 「 / tmpã«ãƒ­ã‚°ãƒ‡ãƒ¼ã‚¿ã‚’å«ã‚ã¦ã€å†èµ·å‹•時ã«å¤±ã‚れるã“ã¨ã‚’/ var内ã®ãƒ‡ãƒ¼ã‚¿ãŒç™ºç”Ÿã—ã¾ã™ã€‚ ã€ã«ãªã‚‹RRDã¨DHCPリースã¯ä¿æŒã•れã¾ã™ã€‚" + +#: usr/local/www/system_advanced_misc.php:582 +#: usr/local/www/system_advanced_misc.php:582 +msgid "/tmp RAM Disk Size" +msgstr "/ tmpã«RAMディスクサイズ" + +#: usr/local/www/system_advanced_misc.php:586 +#: usr/local/www/system_advanced_misc.php:586 +msgid "" +"Set the size, in MB, for the /tmp RAM disk. Leave blank for 40MB. Do not set " +"lower than 40." +msgstr ""ã®/ tmp RAMディスクã¯ã€‚ 40MBã®ãŸã‚ã«ç©ºç™½ã®ã¾ã¾ã«ã™ã‚‹ãŸã‚ã«ã€ MBå˜ä½ã§ã‚µã‚¤ã‚ºã‚’設定ã—ã¾ã™ã€‚設定ã—ãªã„ã§ãã ã•ã„〠40よりも低ã„。" + +#: usr/local/www/system_advanced_misc.php:591 +#: usr/local/www/system_advanced_misc.php:591 +msgid "/var RAM Disk Size" +msgstr "ã®/ var RAMディスクã®ã‚µã‚¤ã‚º" + +#: usr/local/www/system_advanced_misc.php:595 +#: usr/local/www/system_advanced_misc.php:595 +msgid "" +"Set the size, in MB, for the /var RAM disk. Leave blank for 60MB. Do not set " +"lower than 60." +msgstr "「 / varã®å„RAMディスクã¯ã€‚ 60MBã®ãŸã‚ã«ç©ºç™½ã®ã¾ã¾ã«ã™ã‚‹ãŸã‚ã«ã€ MBå˜ä½ã§ã‚µã‚¤ã‚ºã‚’設定ã—ã¾ã™ã€‚設定ã—ãªã„ã§ãã ã•ã„〠60よりも低ã„。" + +#: usr/local/www/system_advanced_misc.php:600 +#: usr/local/www/system_advanced_misc.php:600 +msgid "Periodic RRD Backup" +msgstr "定期的ãªRRDãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—" + +#: usr/local/www/system_advanced_misc.php:616 +#: usr/local/www/system_advanced_misc.php:616 +msgid "Periodic DHCP Leases Backup" +msgstr "定期的ãªDHCPã¯ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®ãƒªãƒ¼ã‚¹" + +#: usr/local/www/system_routes_edit.php:132 +#, php-format +msgid "" +"The alias (%s) has one or more FQDNs configured and cannot be used to " +"configure a static route." +msgstr "「エイリアス( %s ï¼‰ãŒæ§‹æˆã•れãŸ1ã¤ä»¥ä¸Šã®FQDNãŒã‚りã€ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"スタティックルートを設定ã™ã‚‹ã€‚" + +#: usr/local/www/system_routes_edit.php:179 +#: usr/local/www/system_routes_edit.php:186 +#: usr/local/www/system_routes_edit.php:181 +#: usr/local/www/system_routes_edit.php:188 +#: usr/local/www/system_routes_edit.php:175 +#: usr/local/www/system_routes_edit.php:182 +#, php-format +msgid "This network conflicts with address configured on interface %s." +msgstr "アドレスãŒã“ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç«¶åˆã¯ã€ã‚¤ãƒ³ã‚¿ãƒ•ェース%s.上ã§è¨­å®š" + +#: usr/local/www/firewall_nat_out.php:117 +#: usr/local/www/firewall_nat_out.php:128 +#: usr/local/www/firewall_nat_out.php:141 +#: usr/local/www/firewall_nat_out.php:157 +#: usr/local/www/firewall_nat_out.php:178 +#: usr/local/www/firewall_nat_out.php:199 +#: usr/local/www/firewall_nat_out.php:214 +#: usr/local/www/firewall_nat_out.php:117 +#: usr/local/www/firewall_nat_out.php:128 +#: usr/local/www/firewall_nat_out.php:141 +#: usr/local/www/firewall_nat_out.php:157 +#: usr/local/www/firewall_nat_out.php:178 +#: usr/local/www/firewall_nat_out.php:199 +#: usr/local/www/firewall_nat_out.php:214 +msgid "Manual Outbound NAT Switch" +msgstr "手動アウトãƒã‚¦ãƒ³ãƒ‰ã®NATスイッãƒ" + +#: usr/local/www/firewall_rules.php:311 usr/local/www/firewall_rules.php:313 +#: usr/local/www/firewall_rules.php:311 usr/local/www/firewall_rules.php:313 +msgid "" +"The firewall rule configuration has been changed.
    You must apply the " +"changes in order for them to take effect." +msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚ã®å¤‰æ›´ã€ãƒ•ァイアウォールルールã®è¨­å®šã¯changed.
    YouãŒé©ç”¨ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã§ã—ãŸã€ 。" + +#: usr/local/www/system_gateway_groups_edit.php:100 +#: usr/local/www/system_gateway_groups_edit.php:100 +msgid "Changing name on a gateway group is not allowed." +msgstr "ゲートウェイ·グループã«å¤‰æ›´ã™ã‚‹å ´åˆã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/system_gateway_groups_edit.php:150 +msgid "Edit gateway group" +msgstr "編集ゲートウェイ·グループ" + +#: usr/local/www/system_gateway_groups_edit.php:229 +#: usr/local/www/system_gateway_groups_edit.php:229 +msgid "Edit gateway group entry" +msgstr "編集ゲートウェイグループエントリ" + +#: usr/local/www/system_gateway_groups_edit.php:317 +#: usr/local/www/system_gateway_groups_edit.php:317 +msgid "" +"The virtual IP field selects what (virtual) IP should be used when this " +"group applies to a local Dynamic DNS, IPsec or OpenVPN endpoint" +msgstr "グループã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNS 〠IPsecã‚„OpenVPNã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã«é©ç”¨ã•れã€ã€Œä»®æƒ³IPフィールドã¯ã€ã“れãŒã¨ã(仮想) IPãŒä½¿ç”¨ã™ã¹ãã‹é¸æŠž"" + +#: usr/local/www/services_captiveportal.php:198 +#: usr/local/www/services_captiveportal.php:198 +msgid "" +"Hard timeout must be less or equal Default lease time set on DHCP Server" +msgstr "「ãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯ä»¥ä¸‹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã‹ç­‰ã—ã„デフォルトã®ãƒªãƒ¼ã‚¹æ™‚é–“ã¯ã€DHCPサーãƒãƒ¼ã«è¨­å®š" + +#: usr/local/www/firewall_aliases_edit.php:245 +#: usr/local/www/firewall_aliases_edit.php:245 +#, php-format +msgid "You must provide a valid URL. Could not fetch usable data from '%s'." +msgstr "有効ãªURLを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ 「 %s ã€ã‹ã‚‰ä½¿ç”¨å¯èƒ½ãªãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/firewall_aliases_edit.php:250 +#: usr/local/www/firewall_aliases_edit.php:250 +#, php-format +msgid "URL '%s' is not valid." +msgstr "URLã¯ã€Œ %s'ã¯æœ‰åйã§ã¯ã‚りã¾ã›ã‚“。" + +#: usr/local/www/firewall_aliases_edit.php:288 +msgid "This alias is used on a static route and cannot contain FQDNs." +msgstr "ã“ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¯ã€ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã«ä½¿ç”¨ã•れ〠FQDNã‚’å«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" + +#: usr/local/www/system_firmware_restorefullbackup.php:174 +#: usr/local/www/system_firmware_restorefullbackup.php:174 +msgid "Could not locate any previous backups." +msgstr "以å‰ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: usr/local/www/system_firmware_restorefullbackup.php:182 +#: usr/local/www/system_firmware_restorefullbackup.php:182 +msgid "do not restore config.xml." +msgstr "config.xmlã«ã¯å¾©å…ƒã•れã¾ã›ã‚“。" + +#: usr/local/www/diag_dns.php:156 usr/local/www/diag_dns.php:156 +msgid "Query Time" +msgstr "クエリ時間" + +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:131 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:131 +msgid "Checking ..." +msgstr "確èªã—ã¦ã„ã¾ã™..." + +#: usr/local/www/services_dnsmasq.php:224 +#: usr/local/www/services_dnsmasq.php:245 +#: usr/local/www/services_dnsmasq.php:245 +msgid "Do not forward private reverse lookups" +msgstr "プライベートã®é€†å¼•ãを転é€ã—ãªã„ã§ãã ã•ã„" + +#: usr/local/www/services_dnsmasq.php:225 +#: usr/local/www/services_dnsmasq.php:246 +#: usr/local/www/services_dnsmasq.php:246 +#, php-format +msgid "" +"If this option is set, %s DNS Forwarder (dnsmasq) will not forward reverse " +"DNS lookups (PTR) for private addresses (RFC 1918) to upstream name " +"servers. Any entries in the Domain Overrides section forwarding private "n." +"n.n.in-addr.arpa" names to a specific server are still forwarded. If the IP " +"to name is not known from /etc/hosts, DHCP or a specific domain override " +"then a "not found" answer is immediately returned. " +msgstr "åå‰ä¸Šæµãƒ—ライベートアドレス(RFC 1918)ã®DNSルックアップ( PTR )ã€ã‚’ã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€DNSãƒ•ã‚©ãƒ¯ãƒ¼ãƒ€ã¯æ­£é€†è»¢ã—ã¾ã›ã‚“( DNSMASQ ) %s ""サーãƒã‚’プライベート転é€ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã€Œ nãŒã€‚特定ã®ã‚µãƒ¼ãƒãƒ¼ã«ã€Œ NNIN - addr.arpa ã€ã®åå‰ã¯ã€ã¾ã è»¢é€ã•れã¾ã™ã€‚ IPã€ã®åå‰ã«ã¯ã€ etc / hostsã«ã€ DHCPã¾ãŸã¯ç‰¹å®šã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã®ä¸Šæ›¸ã/ã‹ã‚‰çŸ¥ã‚‰ã‚Œã¦ã„ãªã„ã€å ´åˆã«ã¯ã€ãã®ç­”ãˆã¯ã™ãã«è¿”ã•れã¾ã™"ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“〠。" + +#: usr/local/www/system_advanced_network.php:212 +#: usr/local/www/system_advanced_network.php:212 +msgid "" +"All IPv6 traffic will be blocked by the firewall unless this box is checked." +msgstr "ã“ã®ãƒœãƒƒã‚¯ã‚¹ãŒãƒã‚§ãƒƒã‚¯ã•れã¦ã„ãªã„é™ã‚Šã€ 「ã™ã¹ã¦ã®IPv6トラフィックã¯ãƒ•ァイアウォールã«ã‚ˆã£ã¦ãƒ–ロックã•れã¾ã™ã€‚" + +#: usr/local/www/system_advanced_network.php:213 +#: usr/local/www/system_advanced_network.php:213 +msgid "" +"NOTE: This does not disable any IPv6 features on the firewall, it only " +"blocks traffic." +msgstr ""注:ã“れã¯ã€ãƒ•ァイアウォール上ã§ä»»æ„ã®IPv6機能を無効ã«ã—ãªã„ã€ãれãŒå”¯ä¸€ã®"トラフィックをブロックã—ã¾ã™ã€‚" + +#: usr/local/www/diag_nanobsd.php:234 usr/local/www/diag_nanobsd.php:234 +msgid "RRD/DHCP Backup" +msgstr "RRD / DHCPã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—" + +#: usr/local/www/diag_nanobsd.php:236 usr/local/www/diag_nanobsd.php:236 +msgid "These options have been relocated to" +msgstr "ã“れらã®ã‚ªãƒ—ションã¯ã«ç§»è»¢ã—ã¦ããŸ" + +#: usr/local/www/diag_nanobsd.php:236 usr/local/www/diag_nanobsd.php:236 +msgid "System > Advanced, Miscellaneous tab" +msgstr "[システム]> [詳細設定ã€[ãã®ä»–]タブ" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90 +msgid "" +"A valid IP address must be specified, or # for an exclusion or ! to not " +"forward at all." +msgstr "「有効ãªIPã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæŒ‡å®šã•れãŸã€ã¾ãŸã¯ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +msgid "" +"Or enter ! for lookups for this host/subdomain to NOT be forwarded anywhere." +msgstr ""ã¾ãŸã¯Enter ï¼ã“ã®ãƒ›ã‚¹ãƒˆ/ã‚µãƒ–ãƒ‰ãƒ¡ã‚¤ãƒ³ã®æ¤œç´¢ã«ä»»æ„ã®å ´æ‰€ã«è»¢é€ã•れãªã„よã†ã«ã€‚" + +#: usr/local/www/interfaces.php:517 usr/local/www/interfaces.php:513 +#: usr/local/www/interfaces.php:513 +msgid "You can only have one interface configured in 6rd with same prefix." +msgstr "ã‚ãªãŸã ã‘ã®1インタフェースã¯åŒã˜ãƒ—レフィックスをæŒã¤6RDã§è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:528 usr/local/www/interfaces.php:524 +#: usr/local/www/interfaces.php:524 +#, php-format +msgid "You can only have one interface configured as 6to4." +msgstr "ã‚ãªãŸã ã‘ã®1インタフェースã¯6to4ã®ã‚ˆã†ã«è¨­å®šã•れã¦ã„ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: usr/local/www/interfaces.php:648 usr/local/www/interfaces.php:644 +#: usr/local/www/interfaces.php:644 +msgid "MTU of a vlan should not be bigger than parent interface." +msgstr "VLANã®MTUã¯ã€è¦ªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスよりも大ããã™ã¹ãã§ã¯ãªã„。" + +#: usr/local/www/interfaces.php:663 usr/local/www/interfaces.php:659 +#: usr/local/www/interfaces.php:659 +#, php-format +msgid "Interface %s (VLAN) has MTU set to a bigger value" +msgstr "インタフェース%s ( VLAN )ã¯ã€ MTUã¯å¤§ããªå€¤ã«è¨­å®šã•れã¦ã„ã¾ã™" + +#: etc/inc/easyrule.inc:118 etc/inc/easyrule.inc:301 etc/inc/easyrule.inc:118 +#: etc/inc/easyrule.inc:301 +msgid "Easy Rule" +msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«" + +#: etc/inc/vpn.inc:1015 etc/inc/vpn.inc:1014 +#, php-format +msgid "" +"Ignoring IPsec racoon daemon reload since there are no tunnels on interface " +"%s" +msgstr "%s 「インターフェイスã«ã¯ãƒˆãƒ³ãƒãƒ«ãŒå­˜åœ¨ã—ãªã„ãŸã‚〠IPsecã®racoonデーモンã®å†ãƒ­ãƒ¼ãƒ‰ã‚’無視ã€" + +#: etc/inc/auth.inc:1127 etc/inc/auth.inc:1127 +#, php-format +msgid "ERROR! Could not login to server %1$s as user %2$s: %3$s" +msgstr "エラー ï¼ãƒ¦ãƒ¼ã‚¶ãƒ¼%2$sã¨ã—ã¦ã‚µãƒ¼ãƒã¯%1$sã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãã¾ã›ã‚“ã§ã—ãŸï¼š %3$s" + +#: usr/local/www/system_gateways_edit.php:139 +#: usr/local/www/system_gateways_edit.php:167 +#: usr/local/www/system_gateways_edit.php:139 +#: usr/local/www/system_gateways_edit.php:167 +#, php-format +msgid "" +"The gateway address %1$s does not lie within one of the chosen interface's " +"subnets." +msgstr "サブãƒãƒƒãƒˆã€Œã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯%1$sã¯ã€é¸æŠžã•れãŸã‚¤ãƒ³ã‚¿ãƒ•ェースã®1ã®å†…ã«ãªã„〠。" + +#: usr/local/www/diag_arp.php:342 usr/local/www/diag_arp.php:342 +msgid "NOTE: Local IPv6 peers use" +msgstr "注:ローカルIPv6ピアã¯ä½¿ç”¨" + +#: usr/local/www/diag_arp.php:342 usr/local/www/diag_arp.php:342 +msgid "NDP" +msgstr "NDP" + +#: usr/local/www/diag_arp.php:342 usr/local/www/diag_arp.php:342 +msgid "instead of ARP" +msgstr "代ã‚りã«ã€ARPã®" + +#: usr/local/www/firewall_virtual_ip.php:128 +#: usr/local/www/firewall_virtual_ip.php:128 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"Gateway." +msgstr "ゲートウェイã€ãれã¯ã¾ã å°‘ãªãã¨ã‚‚1ã«ã‚ˆã£ã¦å‚ç…§ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。" + +#: usr/local/www/interfaces_gif_edit.php:169 +#: usr/local/www/interfaces_gif_edit.php:169 +msgid "" +"The interface here serves as the local address to be used for the gif tunnel." +msgstr "「ã“ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã¯ã€GIFトンãƒãƒ«ã«ä½¿ç”¨ã™ã‚‹ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚" + +#: usr/local/www/services_dhcp.php:941 usr/local/www/services_dhcp.php:941 +msgid "" +"This option persists even if DHCP server is disabled. Only the machines " +"listed below will be able to communicate with the firewall on this NIC." +msgstr "下記ã®ã“ã®NICã®ãƒ•ァイアウォールã¨é€šä¿¡ã§ãるよã†ã«ãªã‚Šã¾ã™ã€ã“ã®ã‚ªãƒ—ションã¯ã€ DHCPサーãƒãƒ¼ãŒç„¡åйã«ãªã£ã¦ã„ã‚‹å ´åˆã‚‚åŒæ§˜ã§ã™ã€‚マシンã ã‘ãŒè§£æ±ºã—ãªã„〠。" + +#: usr/local/www/interfaces_bridge_edit.php:381 +#: usr/local/www/interfaces_bridge_edit.php:381 +msgid "" +"Set the transmit hold count for Spanning Tree. This is the number of " +"packets transmitted before being rate limited. The default is 6. The " +"minimum is 1 and the maximum is 10." +msgstr "レート制é™ã•れるå‰ã«é€ä¿¡ã•れãŸãƒ‘ケットã€ã‚¹ãƒ‘ニングツリーã®é€ä¿¡ãƒ›ãƒ¼ãƒ«ãƒ‰ã‚«ã‚¦ãƒ³ãƒˆã‚’設定ã—ã¾ã™ã€‚ã“ã‚Œã¯æ•°ãŒã‚る〠。デフォルトã¯6ã§ã™ã€‚ 「最å°å€¤ã¯1ã§ã€æœ€å¤§å€¤ã¯10ã§ã™ã€‚" + +#: usr/local/www/services_dnsmasq.php:254 +#: usr/local/www/services_dnsmasq.php:254 +msgid "Listen Port" +msgstr "ãƒãƒ¼ãƒˆã‚’èžã" + +#: usr/local/www/services_dnsmasq.php:258 +#: usr/local/www/services_dnsmasq.php:258 +msgid "" +"The port used for responding to DNS queries. It should normally be left " +"blank unless another service needs to bind to TCP/UDP port 53." +msgstr "ä»–ã®ã‚µãƒ¼ãƒ“スã¯ã€TCP / UDPãƒãƒ¼ãƒˆ53ã«ãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹å¿…è¦ãŒãªã„é™ã‚Šã€ç©ºç™½ã®ã€Œ DNSクエリã«å¿œç­”ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れるãƒãƒ¼ãƒˆã¯ã€ãれã¯é€šå¸¸ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„〠。" + +#: usr/local/www/services_dnsmasq.php:268 +#: usr/local/www/services_dnsmasq.php:268 +msgid "" +"Interface IPs used by the DNS Forwarder for responding to queries from " +"clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries " +"to other interface IPs not selected below are discarded. The default " +"behavior is to respond to queries on every available IPv4 and IPv6 address." +msgstr "クライアントã€ã‹ã‚‰ã®ã‚¯ã‚¨ãƒªã«å¿œç­”ã™ã‚‹ãŸã‚ã€DNSフォワーダãŒä½¿ç”¨ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®IPアドレス〠。インターフェイスã¯IPv4ã¨IPv6ã®IPアドレスã®ä¸¡æ–¹ãŒã‚ã‚‹å ´åˆã€ä¸¡æ–¹ãŒä½¿ç”¨ã•れる。クエリ動作ã¯ã€ã™ã¹ã¦ã®åˆ©ç”¨å¯èƒ½ãªIPv4アドレスã¨IPv6アドレスã§ã®è³ªå•ã«ç­”ãˆã‚‹ã“ã¨ã§ã™ã€ä¸‹ã®é¸æŠžã•れã¦ã„ãªã„ä»–ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースIPã«ã¯ã€ãƒ‡ãƒ•ォルトã§ã¯ã€‚破棄ã•れã¾ã™ã€ 。" + +#: usr/local/www/services_dnsmasq.php:288 +#: usr/local/www/services_dnsmasq.php:288 +msgid "Strict Interface Binding" +msgstr "厳格ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ãƒã‚¤ãƒ³ãƒ‰" + +#: usr/local/www/services_dnsmasq.php:290 +#: usr/local/www/services_dnsmasq.php:290 +msgid "" +"If this option is set, the DNS forwarder will only bind to the interfaces " +"containing the IP addresses selected above, rather than binding to all " +"interfaces and discarding queries to other addresses." +msgstr "ã‚€ã—ã‚ã™ã¹ã¦ã® "インターフェイスã«çµåˆã—ã€ä»–ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ã‚¯ã‚¨ãƒªãƒ¼ã‚’破棄ã™ã‚‹ã‚ˆã‚Šã‚‚ã€ä¸Šã§é¸æŠžã—ãŸIPアドレスをå«ã‚€"ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€ DNSフォワーダã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã«ãƒã‚¤ãƒ³ãƒ‰ã•れã¾ã™ã€ 。" + +#: usr/local/www/services_dnsmasq.php:292 +#: usr/local/www/services_dnsmasq.php:292 +msgid "" +"NOTE: This option does NOT work with IPv6. If set, dnsmasq will not bind to " +"IPv6 addresses." +msgstr ""注:ã“ã®ã‚ªãƒ—ションã¯ã€IPv6ã§å‹•作ã—ãªã„設定ã—ãŸå ´åˆã€ DNSMASQãŒãƒã‚¤ãƒ³ãƒ‰ã•れã¾ã›ã‚“。 ã€ã®IPv6アドレス。" + +#: usr/local/www/firewall_nat_out_edit.php:523 +#: usr/local/www/firewall_nat_out_edit.php:561 +#: usr/local/www/firewall_nat_out_edit.php:523 +#: usr/local/www/firewall_nat_out_edit.php:561 +msgid "(leave blank for any)" +msgstr "(ã„ãšã‚Œã‹ã®ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ï¼‰" + +#: usr/local/www/interfaces.php:1900 usr/local/www/interfaces.php:1900 +#, php-format +msgid "" +"Enter a hexadecimal value between %x and %x here, default value is 0." +msgstr ""ï¼… xã¨ï¼… Xã“ã“é–“u003cBu003e進u003c / bu003eã®å€¤ã‚’入力ã—ã€ãƒ‡ãƒ•ォルト値ã¯0ã§ã‚る。" + +#: etc/inc/shaper.inc:1232 etc/inc/shaper.inc:1232 +msgid "Codel Active Queue" +msgstr "CODELアクティブキュー" + +#: etc/inc/pfsense-utils.inc:2537 etc/inc/pfsense-utils.inc:2541 +#: etc/inc/pfsense-utils.inc:2598 +msgid "Turkish" +msgstr "トルコ語" + +#: usr/local/www/system_gateways_edit.php:647 +msgid "" +"The Frequency Probe interval must be less than the Down time, otherwise the " +"gateway will seem to go down then come up again at the next probe." +msgstr "ゲートウェイ次ã®ãƒ—ローブã§å†ã³å‡ºã¦ãã‚‹ã—ã€ä¸‹ã«è¡Œãよã†ã«è¦‹ãˆã¾ã™ã€é«˜å‘¨æ³¢ãƒ—ローブ間隔ãŒã€ãれ以外ã®å ´åˆã¯ã€ãƒ€ã‚¦ãƒ³ã‚¿ã‚¤ãƒ ã‚ˆã‚Šã‚‚å°ã•ããªã‘れã°ãªã‚Šã¾ã›ã‚“〠。" + +#: usr/local/www/system_gateways_edit.php:648 +msgid "" +"The total time before a gateway is down is the product of the Frequency " +"Probe and the Down fields. By default this is 1*10=10 seconds." +msgstr "「ゲートウェイå‰ã®ç·æ™‚é–“ã¯ã€ãƒ€ã‚¦ãƒ³ã—ã¦ã„る周波数ã«ã€ 「プローブã¨ä¸‹ã®ãƒ•ィールド。デフォルトã§ã¯ã€ 1 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr 10 = 10ç§’ã§ã™ã€‚" + +#: usr/local/www/pkg_mgr.php:169 +msgid "Other Categories" +msgstr "ãã®ä»–ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼" + +#: usr/local/www/pkg_mgr.php:223 +msgid " version to check its change log." +msgstr "ãã®å¤‰æ›´ãƒ­ã‚°ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚" + +#: usr/local/www/widgets/widgets/system_information.widget.php:109 +msgid "Platform" +msgstr "プラットフォーム" + +#: usr/local/www/widgets/widgets/system_information.widget.php:127 +msgid "NanoBSD Boot Slice" +msgstr "NanoBSDã®ãƒ–ートスライス" + +#: usr/local/www/widgets/widgets/system_information.widget.php:138 +msgid "CPU Type" +msgstr "CPUタイプ" + +#: usr/local/www/widgets/widgets/system_information.widget.php:151 +msgid "Hardware crypto" +msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æš—å·" + +#: usr/local/www/widgets/widgets/system_information.widget.php:156 +msgid "Uptime" +msgstr "ç¨¼åƒæ™‚é–“" + +#: usr/local/www/widgets/widgets/system_information.widget.php:166 +msgid "DNS server(s)" +msgstr "DNSサーãƒï¼ˆè¤‡æ•°å¯ï¼‰" + +#: usr/local/www/widgets/widgets/system_information.widget.php:178 +msgid "Last config change" +msgstr "最後ã®è¨­å®šå¤‰æ›´" + +#: usr/local/www/widgets/widgets/system_information.widget.php:183 +msgid "State table size" +msgstr "状態テーブルサイズ" + +#: usr/local/www/widgets/widgets/system_information.widget.php:187 +msgid "Show states" +msgstr "状態を表示ã™ã‚‹" + +#: usr/local/www/widgets/widgets/system_information.widget.php:191 +msgid "MBUF Usage" +msgstr "MBUF使用é‡" + +#: usr/local/www/widgets/widgets/system_information.widget.php:202 +msgid "Temperature" +msgstr "温度" + +#: usr/local/www/widgets/widgets/system_information.widget.php:212 +msgid "Load average" +msgstr "ロードアベレージ" + +#: usr/local/www/widgets/widgets/system_information.widget.php:218 +msgid "CPU usage" +msgstr "CPU使用率" + +#: usr/local/www/widgets/widgets/system_information.widget.php:227 +msgid "Memory usage" +msgstr "メモリ使用é‡" + +#: usr/local/www/widgets/widgets/system_information.widget.php:237 +msgid "SWAP usage" +msgstr "スワップã®ä½¿ç”¨çжæ³" + +#: usr/local/www/widgets/widgets/system_information.widget.php:247 +msgid "Disk usage" +msgstr "ディスクã®ä½¿ç”¨çжæ³" + +#: etc/inc/shaper.inc:2904 +msgid "IPV4 bit mask must be blank or numeric value between 1 and 32." +msgstr "IPV4ã®ãƒ“ットマスクã¯ã€ 1ã¨32ã®é–“ã«ç©ºç™½ã¾ãŸã¯æ•°å€¤ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/shaper.inc:2907 +msgid "IPV6 bit mask must be blank or numeric value between 1 and 128." +msgstr "IPV6ビットマスクã¯1ã¨128ã®é–“ã«ç©ºç™½ã¾ãŸã¯æ•°å€¤ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#: etc/inc/shaper.inc:3352 etc/inc/shaper.inc:3625 +msgid "" +"If 'source' or 'destination' slots is chosen, \n" +"a dynamic pipe with the bandwidth, delay, packet loss and queue size given " +"above will \n" +"be created for each source/destination IP address encountered, \n" +"respectively. This makes it possible to easily specify bandwidth \n" +"limits per host." +msgstr "「「ソースã€ã¾ãŸã¯ã€Œå®›å…ˆã€ã‚¹ãƒ­ãƒƒãƒˆãŒé¸æŠžã•れる場åˆã€ \n 「é­é‡å„é€ä¿¡å…ƒ/宛先IPアドレスã®ãŸã‚ã«ä½œæˆã™ã‚‹ã“ã¨ãŒã€Œä¸Š\nを「所与ã®å¸¯åŸŸå¹…ã€é…å»¶ã€ãƒ‘ケットæå¤±ã€ãŠã‚ˆã³ã‚­ãƒ¥ãƒ¼Â·ã‚µã‚¤ã‚ºãŒå‹•的パイプ\nホストã”ã¨ã®åˆ¶é™ã€ã§ã‚ã£ãŸã€‚ã“れã«ã‚ˆã‚Šã€å®¹æ˜“ã«å¸¯åŸŸå¹…\nを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。" + +#: etc/inc/shaper.inc:3373 +msgid "" +"If 'source' or 'destination' slots is chosen, \n" +"leaving the mask bits blank will create one pipe per host. Otherwise " +"specify \n" +"the number of 'one' bits in the subnet mask used to group multiple hosts \n" +"per pipe." +msgstr "空白ã®ãƒžã‚¹ã‚¯ãƒ“ットを残ã™ã€ 「ソースã€ã‚„「目的地ã€ã®ã‚¹ãƒ­ãƒƒãƒˆã‚’é¸æŠžã—ãŸå ´åˆã€ \nã¯ã€Œãƒ›ã‚¹ãƒˆã”ã¨ã«1ã¤ã®ãƒ‘イプを作æˆã—ã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã¯ã€ãƒ‘イプã”ã¨ã«ã€Œã‚°ãƒ«ãƒ¼ãƒ—複数ã®ãƒ›ã‚¹ãƒˆã«ä½¿ç”¨ã™ã‚‹ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã§ã€Œ 1 ã€ã®ãƒ“ット数を\n 〠\nを指定〠。" + +#: etc/inc/shaper.inc:3646 +msgid "" +"If 'source' or 'destination' slots is chosen, \n" +"leaving the mask bits blank will create one pipe per host. Otherwise " +"specify \n" +"the number of 'one' bits in the subnet mask used to group multiple hosts \n" +"per queue." +msgstr "空白ã®ãƒžã‚¹ã‚¯ãƒ“ットを残ã™ã€ 「ソースã€ã‚„「目的地ã€ã®ã‚¹ãƒ­ãƒƒãƒˆã‚’é¸æŠžã—ãŸå ´åˆã€ \nã¯ã€Œãƒ›ã‚¹ãƒˆã”ã¨ã«1ã¤ã®ãƒ‘イプを作æˆã—ã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã¯ã€ã‚­ãƒ¥ãƒ¼ã”ã¨ã«ã€Œã‚°ãƒ«ãƒ¼ãƒ—複数ã®ãƒ›ã‚¹ãƒˆã«ä½¿ç”¨ã™ã‚‹ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã§ã€Œ 1 ã€ã®ãƒ“ット数を\n 〠\nを指定〠。" + +#: etc/inc/pfsense-utils.inc:2575 +msgid "Albanian" +msgstr "アルãƒãƒ‹ã‚¢äºº" + +#: etc/inc/pfsense-utils.inc:2576 +msgid "Bulgarian" +msgstr "ブルガリア語" + +#: etc/inc/pfsense-utils.inc:2577 +msgid "Chinese (Simplified)" +msgstr "中国語(簡体字)" + +#: etc/inc/pfsense-utils.inc:2578 +msgid "Chinese (Traditional)" +msgstr "中国語(ç¹ä½“字)" + +#: etc/inc/pfsense-utils.inc:2579 +msgid "Dutch" +msgstr "オランダ語" + +#: etc/inc/pfsense-utils.inc:2580 +msgid "Danish" +msgstr "デンマーク語" + +#: etc/inc/pfsense-utils.inc:2582 +msgid "Finnish" +msgstr "フィンランド語" + +#: etc/inc/pfsense-utils.inc:2583 +msgid "French" +msgstr "フランス語" + +#: etc/inc/pfsense-utils.inc:2584 +msgid "German" +msgstr "ドイツ語" + +#: etc/inc/pfsense-utils.inc:2585 +msgid "Greek" +msgstr "ギリシャ語" + +#: etc/inc/pfsense-utils.inc:2586 +msgid "Hungarian" +msgstr "ãƒãƒ³ã‚¬ãƒªãƒ¼èªž" + +#: etc/inc/pfsense-utils.inc:2587 +msgid "Italian" +msgstr "イタリア語" + +#: etc/inc/pfsense-utils.inc:2588 +msgid "Japanese" +msgstr "日本語" + +#: etc/inc/pfsense-utils.inc:2589 +msgid "Korean" +msgstr "韓国語" + +#: etc/inc/pfsense-utils.inc:2590 +msgid "Latvian" +msgstr "ラトビア語" + +#: etc/inc/pfsense-utils.inc:2591 +msgid "Norwegian (Bokmal)" +msgstr "ノルウェー語(ブークモール)" + +#: etc/inc/pfsense-utils.inc:2592 +msgid "Polish" +msgstr "ãƒãƒ¼ãƒ©ãƒ³ãƒ‰èªž" + +#: etc/inc/pfsense-utils.inc:2594 +msgid "Portuguese (Portugal)" +msgstr "ãƒãƒ«ãƒˆã‚¬ãƒ«èªžï¼ˆãƒãƒ«ãƒˆã‚¬ãƒ«ï¼‰" + +#: etc/inc/pfsense-utils.inc:2595 +msgid "Romanian" +msgstr "ルーマニア語" + +#: etc/inc/pfsense-utils.inc:2596 +msgid "Russian" +msgstr "ロシア語" + +#: etc/inc/pfsense-utils.inc:2597 +msgid "Slovenian" +msgstr "スロベニア語" + +#: etc/inc/pfsense-utils.inc:2599 +msgid "Spanish" +msgstr "スペイン語" + +#: etc/inc/pfsense-utils.inc:2600 +msgid "Swedish" +msgstr "スウェーデン語" + +#: etc/inc/pfsense-utils.inc:2601 +msgid "Slovak" +msgstr "スロãƒã‚­ã‚¢èªž" + +#: etc/inc/pfsense-utils.inc:2602 +msgid "Czech" +msgstr "ãƒã‚§ã‚³èªž" diff --git a/usr/local/share/locale/pt_BR.ISO8859-1/LC_MESSAGES/pfSense.mo b/usr/local/share/locale/pt_BR.ISO8859-1/LC_MESSAGES/pfSense.mo new file mode 100644 index 0000000000000000000000000000000000000000..1b78823bfe87f09c49f9b3efafa869939be06f70 GIT binary patch literal 642971 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∨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 z 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�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
    q|ktX=~WCX^pdDSv(iQhPL|b& zGV9F!wA%p#GGu=A7oXy{jwIdj4^W7I{2u*}e0Mte3uz&Uk%s^X&lw${bOM}2xs@0$ zX3bG}%{`#%NLP4zV7vkIgx?Ow7Itb;C`plxN^uJ+5uarWBS;`%+*v&cC<4h02BaQW zSZ_KqI@b%kx6SLht^b?7w`q>+$kH@pUBBW=R&0S*0!ZpBt0=3f0RfOgCrKayGPAmE z%xFO%2too7Co=eS?L5dnfyWm)%Ptgz3O_*bnp3L=0s>;5k7I6l`+bHA{~nj59$7&-rF9VB0?<*-xu$1*PrF4<7_*k;U(vE+(eI{!A*XtPpbb3L-PEIg$aO@r=b1XFI$Eo6oIOj8v z$miw_*h;ww7STV0GpH&Zmx-PB53M2TI`a@+b|@OBS^%!cMlwE?33f^5C%IXt(SnWk zGfi%Y{{WZ&orha;6x+%T@uPJFKdO+fQ{UqFY=ji7C9F667L;s$jh?(yXY-9T_-flu z4fdu=xmf5BVPH9DuP>4Yx5GYG*uM!=6;IpYM$f2uvM?#g`sJS}rDHqfxb3dKiJ=DX zwqWe)s(nbQk>+!5ge6!0YS}ZcZCMVW#qy$U|K-kco*@JLs61%(jyfpvjqOrOa{FKx zD~x~ZpVh{vFxs#B;O6xAXD3|No^Tm93)aRm)1PV0vXON-qST6MMFZM`nH2F*r5N$W zD0#Y|k{bDL-TT{A0+m1i0UvDdumAeVF45UP`^!o&WF-24k!t%~`Oo=;`0eS|&->tm z=A=b?!~0qt<`{6WW((Y6wRu3vVBv@B8-NGhrb@V~pj8BEj^yb`xe*~mnf_y%oxZgh zTxfwrQ;V(SvUoZhD~DZ)@z-pzxRLBX%9agj*-{fk&9a>_K=OpClZsZ5ihneD@Lk5fK>Uh=v6|3(h zW7(LbxV9L8kfUIv5@(}M;TA7-TfZjcZ{N~!gZUam@ai}9s5`x z98+5$I6=six&oPJ8w?EZv7UTW+ihB936_4C2kRTZe!dGcKq*eVL);OzJlI;_e>Qrs zyKXzn2wT$jCQ=Kia4}N;K4zZaS}p8G|DDP!Lesca{XP?HiU_fd@!TC;o!0^Yj9eZ8 z3D*SZAJvM?D(UeO9c+!ZCu2gssLs>ZjHsso;Ur@lLQx7-(5f6A{zQ|qQjvBEk7isQTMZYYv#1jz zm((>O8huJ#rCzp#EQC~!yBnm!fw(2Hi^w$Ey4+V%=Tz2xRN_#q$0S3FMz)Ik47M&Q z+IB{HD@`@ZfogHcqP|IaLXjbURZO5h5jL|c!6Mn!0%aLGJWOrmAb3H#0r zrUF@GX-OLwHl$xOV~Iv`T?%sSl3hxTSLB+~@^b^<9~DV$eo7;*qJA)*P416W7%Tqz z-G#~~UUVuuS@2&6qXj-tA&`@H7Z_T=Pu(ly|)eKCh zEoz1ZzL_nh%LHTA!PVs$wIcn|GJ=jal=P`&9BWP8Zz+y=buy(EUMgaOcq0QmmXTI& zh|7sEltmW%5q~~VhYxg=M-R3yF|L1yVY-xIY)U9rDTj@w!rD98=Hx(uD2UTjr|R%e z78t&Uf~?(LySMh`-EQ?i9bJCieZQvv`x3J9AWBN9Bo|~C-gPuRn|~ zpXmY(R6h{YzudP7Cv@`)u7svG<3B{_!~UkPUirJrt8*|kShlC5&o9*@Z#t|iRJ^s6 z9U|wu`=c#a;gn9!q!5}VN^_F=H|?I4^&v)OW6S}_^rtW5Uz#3GE=Af*55Bp)Ja^t7 z)E^$oEI_4lWyWZyYr^LEpgQjRV$aN@Z4)5Xx*JQcs&zdDcO~(vx*yu4(AfWWE4OC1 zM-RgNDz_^TfiU^##M3!xOV+dcHFr%|EEQYxV-qS{_G&M3lo1A6P7h2@HRn_@P}WQA zWKphed=8_UP(CpXBImDWKb#%hUGj*^w`T{e^SW2EDUF_v-^kiJQW|@$3D|f!w0~!A zBayJOFA(SoAru_&f27SMA?~@IWi;6QS8T{vUw--dm*5g|qeYZW^KANlaCIa(8VT(} z7BQJ{`Z6D~rb8rV<7Lk@v+#v*cw7vPMNn0qgD5M2T?<5Ug}~(}9727xjliw<1@Qi* zDBtF@9oKXB1MM{j%D!RQrje~oI^)RWm*M^ekd>*1rRDjv4SXWX?x*~n&al-{A zQ>5wTC zj?mmC2-c0Ae1CpyLxKbfw!f4feo42ko=an3hlCuqZ3GML$nligqoVg7+2VqFYH4x~L(>M9mAW$?o>JGr}DRQ+j4o){yh&m?GKx&PTA4(wSwVTH8#wFWoTHz^n?6 z@K3Ue!Az~?ya9_jAp7g`=5m0dROP8^SlXHHyI>%8_OHmP2!9oalt0XM0a+x#|NJg5 zj#PcqPU+X!ma zm||ZbRh(Y+xV7^Zhk-Vvj%%AJl&$-WsLZEg*7H3S#UXPX z@0U|?v0VfM{jy)nbXIXR88#9kGqv%>#|x9A zp7a}(@nHezba5K?MN5Z9h0Usxo6!SRfR2B=JqaeT1U-r$Xl&)>))@kjer~MCeF81> zhN2;S%II@x?g#+^h|{*ohsXeHoj6T$SfX3F_y;jb%838zR$h&{3=8T1_UPgIZzL1= zUF93`bEBv<#hB4|AZK__=%VZH&1)_?y`_a!z9+qlBfPP>xASDQ@$eCLn{U>c1pmBv zviaqR8`Snj+(E}BanJVFb-!BP!nXck`?2n*+u~}qXM4K1P1m@sKiXUW?GE=zJ>7Wx zoSWEoxV-Msp^ipugu^HbY)K;}BIFP0nIVlYetWLPhJUQJJ!n_h;eKk3L+sqjTFYf9-ESaS5yPQ^+_lpDHqepXB)Bc2v8@vl0P_WdvqwbA;qcCLEp1Kr`1h z17lZLxo*3FO~3nrwcxg!X2w+oY@bCipS<|OKM}2_uj{nT(ai@y>z9a#L5faA-HL76 zm@JZH3W0_9gF4H`Iw647BH{c}Z|ujk-O}#OO~X1l1V;lJHn(_rN-g(+z8ypsiPzDj z3d7mY3xslGaqWUNWk%PJQ}xfb`{+IT20ya*R@oi$-zsI+$C3-8*+q|I z>1HUMQp^w@-G$jd#-S?i(=T+Im?7$WgqgIM1Em})!nqd^;b&p56b>gP>Q=@l7`}LL zl&C5$al+Z~A@bJDZrdJJLw1g3|F-=W3F$A`oE^mQrjWK?NC)5IraOdebR0$i&T-Cy zD`MRafu=@+;;CoS!qO_&_Dxx7R8-GgZA}C|OoNEbs2XSqasH?i7n{s5QT@^DDT0!H zkX4VA?hWy+{8!+Rs2pUqL}`805g$Sd%>idp!9O&T>8sJm`dtm(_Ri_s?-hRHs~I39 zbIp56B|TNFx?LX()_WsqT6&E1T_71{bfk40AOQGaUo;Y6AWs_P{LRU9`rXxeD3&E; zUJ77!>S_ErDIb85f8)2Iei*0z^FdE?2=YKo9^#!hSZ(RVou+5_WX*{Hf68^jf zSAtu}CiCr8mi|Oa7$1Po6GT?|i8ZzyruB!X=%GnEAWEj&eJI`=QbXs625ag1uvgUt zxo=3Y18kG-89Ti{Ig-qRPL2I>=hZ6(W5{q16*M|kqd~XwY#%Y0f4+_> ze`FboeSK+R4k;+Z-VdSS3Z?>XuXAvjTupAJ@jH@;6NPPW%AL|s0~6Ey`sp^eN1Dc{ zI-3lJOBTkuO4oL*e@8{$c4`ajS?dJK`DRO3AfIS}j4Ki4^>#Q^h%OGVQpFb3OE?VJXpaFGaaqd8Y)#F0iSfFY%#Lp6_Kg9|8gorvxh-=D+9_I$xx2- zg!@Y>5X9^HAdLmMn!HU43Kj@9R46kY_Mgl#K{-?OsonT@-W*>@;d|e#-FhpPZp@A^ z-<`IdqXP`X0K!@Bg&ANPu+AS;sQ^dBkfj%HuVCAjjX!%x&>ai?{s%7cI)R|}1A_eJ z-a4%rf(RB`w@-f8#$?dDLM`g(5iK4@V9B|~6egM{POKiAJ%{o$9FbXOE`y^D@R zL>NZ-!Pe;WzH>e(X!h^wS3*;>>oRW0W@$VGco4*9$_=EzWq(?bBEC`r9H<$GS+2SY zoYKDTkC>6uUj$_Usf-d~8@;{0}dE*1O8+McOTvP-?P<|5B0>(ZB5GKH&T5p{8i9+y_ zrM1Vw@+H$9ZJZo~k@+8)%04b;W04-vjfjlYTuPk5$AuuCB6Z8y=`Q@OEk=srs6h$Y zxFoEYW?7*W-Dw7>-6&(Dbg92%up;k{zeRmmd|m8zk^2Hh%7;*zv8cl_+l>WH*=s&R zVoik_GuuL_0XHoXq+&@(pG{O5=11Knrw@_npe;}(c)d=7DO}SZnhMm7|2ZYfNe0M@ zipf)eQrk;iH$KaL)DW+$?Cb7@Az}{FT;PgaAVKX`f;jc}AF@v+F`IF{ZrCbeLOmGgdu%3GmCv#s@lA;w zr{K$Wy$gN8rBh&L=peREx!D%6Wbjx4zZPg(d4>Kn=%vojeIRDKF{^WKC~969#^Cdy zgGHcL2Be?*cmR(2yjwvBoU9(aI+A!bOq5sn&mR=HGte)k*d<`aFPk9-686g*I1Qi^U>SWG{a~tOdNQs)M*aq)&M&X1_ zi2&2-3>Nz{CM<^ux2PjlQF_g{`o)xhjp;&Jg&05T`(QB`haHNSCbb*abIIp7u7};$ zz|~0B+ea>bI#QtJimV7wdg%}HpCe}T7ds)D3EI(uLfl>|cz?tXReGSphmq*as?xy) zA)vA+uyS1zKUOd)W(db9SKEk*MFg61oQQ`<(sEp)cc^ZEnf;8;JgvyY6JLw?g|s15 zQzFSi&@WowwY^WMCRV(3Qp|}-7wMO&5u^jQU0z|Je@wP`{Ix;ixFrYsynC6Zg#O$j zPG|ycfX192;{V%z8j@OAhsm!~d>+tU{of+(gX|Awi%27Z&SIO^Y&W0?vfn6=R8ore zL-M*}5RY+XBl95NzTw~T(G|7?M2IP7MW_LPz#es}-v!=PQY6(`JmJ4We;il*p{GQ? zHGd9?N?Fckf0?q9DLBoFfMyV< z%&M{ez{!?>DE^%=078x>(#6$`z~k~SXOo(T38qFe+Uc}={9kwC3-AUZO&=TF7u1Dv zct1Q?Y2}qx9W)gjlnMsL70gP&k!ymA=KgCe}Y29t26`aU6$^^VQ*LPlN|ng(p}7tv@ir@?Hav;1Z= z?80GEY~KI?+^da6vh6Teregh0_yaSCbFo!1p<=>e90LUVG70~2+C5e5X&q0b;C?$FYY$6B`fzN=3$QdO=M_? z`Nn5eJiwtnvRop>**fnIv7p8q7SxCo(zxpSS%v3?_=50F5A2<9pMzM^$iXGJw0v4E z!M&1VE1^I~4}N1$wY%eU1}~*6WL{c1CFfRGd2@azGm+DRTZR!WPJiOc-JHVSB4{iy zWBnU|rU#3HZJ4r$EL|}x&L0yI76B5F-;PlgrCA+LH7$`~ z(w7kO>5kwQ4maUJ!9WURpuTjQ7XcfNj{i!4Y1T2fyC|yw0eE?&GN-choB2s)=v zB09Y-G!o-3&9MF~YtoFPJ8TxZXx{7EnuYhJpu%vy{lHq}$!C}63m?{wMWk`PoQqyA zv|@XR(A9|pcXVFFIB4}Z8qeOW@&|7@Yv!M6NRh7Q^~(sl{{#Shd~5cxcSc`oUuYqj z?qUKlV;Z)Td@R=q>b8Oh%+YgFt`2LuLh@`zsOuw8M6Wy#{;QyE(ra<>BOl0vd`C2q zsB4`4(b70qCq~h%?r${Yec#m_U$1p?7A^lEY+1N-D zLo=^1rIDz)&H9x3rRgK)UQQ0PYM0}_o>L?fwz;@B>IA1Bnni$GXpZ(&rMocbdDefy-9ql zn2Rv)&*zH$ntRZ#Y~1cXyLENeE@&>NhK#Q4qqRfw?Sd-*44=&lepB*0m1r^u(^H8!LVi^Q3OGYoGPf%^TgYmk z+~QiMI*k$>s3^RcT^oj%k%Jf2TF$lQUqm-`&z(imEUfR5t!m6NK83etaQr%W1nfbP zDqR40xDkjw$4^H<dedD$&xsuWX7!7G$Y{B#+@h@9d>K_b(js*i`p%VU;!wa%0IsPYN_Z*ufZUpB%_%lT=4gGVy zgAJ#okHd?ALtX4Xh1q2*ZPriG&3!a|-b0;$Ul9m={G-w=`G{e09TQ2=ngrH+lK@{f zW>kLxD<{O(_Ewn_+V|)%MphLYQmR57VZc`1gzUL~_@=kz9a0dB)>30XC=}LWLm53Q zFVb;6NIA4wTX7pIsg6(rF>6-~DxX6pXeWIT7ndOE56EfxRo{#AOgL-Es`(HZQX%p3 zIeF%vI`oXqlWi$Oy(37hM$3w8914d;OP$NaV8wAEH`u$7qSfh1iPs7QFX360@=14o z4y@ixezdg3A~JMMCjT&SDPc%%6a+_?@_N^BMpSSc$n;3SWbMTzF}{4~E-g%><8ETc zpb5B)q-VucDt#Hvu|PVIl*B`x27u^suAe96AZf?7ViN1S; zWGS6kFH?WXrWZ!jK(*nLMj>vvQP{HOrxijn4^bl?M!gC)?|f_pw9Z5fGHkQ0$aQgX zSX%^fU}tLN6(g~bG`fkx4TO#Px9bw+RLAuv<(zsHRJzlb3R%)G`SuhfKc(&(0vl70 zFE)`I?l>|wTD5$`T%+_BN}!GTj4gh$mJ&AkG1^jN9y*ayZ{+Z zWm){!EFr_Hq$gW?!Qs^pE%gce(C*gW_M@GTy7kT9ZtXpDju1aKzIpci>7$QE&j@77 zsv^53M%ia&^PAD5!dt?b$rGnVgIf~89E_th=?55D(0qWz{F}WDgme0wSzpqsEL)Acot()cfF#2_lz~!Jq_%jOBAkBQ4 z^qy@m;7&*heC3h*-_r>TyZzi3dR?qXQW41nHG2^a6hlEo!$L z3FX={J$>3-!|Gp;9T_fi=Sa1T<59c4iOX`tpW#5Lb9QHC0Wg!&H{w&orq`DJ%MA|u z76ttK#5a^mj)BB?^FrYuq9jl4Y}CNN-uf>=nxYIaBv*kQ+d&&W`kT-=(;jZ)@OVlx~!WKt}0Ck+erz;QXC$)Kia6g|h}B>RCR zGiT<81)gb;+qNdy?r&|Bd=gA={%taAZ;Q$XWeB3O>}TD_6egHmuHxK>vrP^^{HOxDxnf9i+(Bk}z-vQ#G#JQHy2eiP2Z# z8GRW!`_so5J%6OmubquXiqby`5u!vrje{P%1@fSgitXuyjE1Mkk2X=|vd{@zlK1UI zT7k<(aXRW#Nf$KIKgVNb*tz0eIT#blHtwpR#pdKkiz=hXgp7(+VHaedq+I&GfJYh1 zc(kVn1Fwa=e5We*DN{*;pEqLKM~zW-+>`!xwQJ!i`zVC7Fc@$+vu zqbjDvFa9Gp_t=sl$4s_ADMaM$APVvrlgbuYcv5@bXw!MK%Q7zrRy?_%5V_yot$(TJ zef^Qe$2X(O3Y|{{UFsjnfp_^DE9~njR?ZsSo@%tG2QJE)kC|~Ces{?v92qr6oKZ12 z(erfC*>eX);;Y)PM0v%5Kp9x7gcSmg2$&sU8P_(PJ1qvEc?34Z+QhqRPY{)RpkST3 zHv|@r?Tf(FDDboGb_hNC}cL zE8-X|?VIsRTeDO~z1i^$&%FPWwieMRML=ZOmZEJGkjAi?rsIMxipm0AY7mPQD(I4{ zk8OQ_a6(z*(HG2`~(v48^18jOt9f41}*UYBU5mj%I!1nyu10Ja6Hip>Uj*5Vs=PI{#X= zYlP#}sFJjGdR}-ZRGw2Rg7UH0=f}`%72GLyJ0U&JA8(|n)Mkc!(H)cJl*20N7uhVl zUsgSTM~y96Y%6pQ$5`=I0^630%s;aQjW8W>EN0OEg#k2NW45*`re*8wQ2D=*5o}!e z22@11{GY*YDFTMQp#VrW|xnGO5+S9)H?@vsXI2A>w$rtPi{+H_T( z`Qy_6MmeoCbm(>S!5-AA9eP7mM1b<@V}7%l>Kui$1jqo`|iFiBPWkGMtdu$ViN2#>f`h|?w#+Wfc= z8mSnR%6+|p-S)5UcMqfD~Ih?i_(Jd%@0+yMc> znu9#--OjJ8=|dI@HWjBKQql3NSN^9{)M&Rmg_RNysG<~?FrCfgBj^+j2v-SdrQ~&r zN|e7HYczP!s;vTE=&S&G(CT5T9!no~`v(_SFa3%m&S7{G*W?%%eZ*6uZN8SrJ=A5% zNW>8QUWBWkCo)f~P1{`{&dkaOH~X~T*uhdvm5Rh@U&^FsTi=1zSR*fXLfQOoY=@#7 zh0!d(8AFo(w;O+R}6$k6QThYJJ zYV3`-sXTySyqd+45kr_)Dh&h{_Orw5RHmYsD}OZZFG*{g5<6bPI1EscJ-J7%91I&e z4&PyLj+&EEycrY0sa0<1q^O{SM%D8Dp0x7iAJjzb%s*e=N>*Fhljl>JYikgeg=mqv z9tuHVWEQ0lLMC#o2qh&1wdA|@ASbK8jSpPlzzDXFlMC1DJ~@>Xbt(BzVT9e=Cxocq zpk;{jCL6msZ`_6-QMFT3e!M6OzaSP$~U(u|R zPy{bHj_n1hGhhFm`e$};Oml&Dh7_4>>0onk_tu|Cw)>7#N*$O1)Nc5auMSl6X84(` z)|FYAn&$ZjCLn)RqmW}c zb)V{PCX9osa~KB?J{gXHY4`NuJ^=uwrk|pW=K7WmN=#IH6E|gu>Ya|yv$pZf9x!pm z!W%IEn2=c{1ya|7+Py%NpMm0qvL8d2hJ*LJGfK%`Y^!r}1hwX0J6t@V5o>MO%pJa!n z5Rqg)6b>|nkPQNGlKKl|8o;R804`$Bhe$#R85D@+ph>D?(k$2CXM#y^W zp!^bHGv?X?2(!IJir{AgemLiFtewm?tAO;H#r^B_`RFfA+%6`*i?^>RpcY3!3>Efa zZW%I$!DbO-I0kYKHb89_&0Vgs-^mLyNw!}<*==VZ;S0jUv90kx7OT;{g>;s48-}tx5A;1M`QP5`i6S(VPF{c zu*p<)4cc+tMZwp>C4|igGRz%rjFJv#)SllM2ZjJ(cH6|HKg1_}ISNndMu5Xbn zi++21o83yB!Tv!cmx!ESDO2r>zk|ddjh*PFEuh%Y7&kHuhbCzGictLM_L5Pg!P{V1 zEW}m3){F!)m^?m?jbFzS94-&xGS_?~@_96H17Vb&_(b&1XQi~x zK+7~1y^^nxCT8|dHqmFSK-Qy-m%|kz3|~Rod40?kD^&iPUSUVVgtT_MW4~yN35m!+ zLM%(&ZZiuM#>ll$&qNpYT?_n!?)!mE5MwuGhE!sfV=G8dtXS-lYq`rnJKtRAiH$Au#jgc6W)3gs+ zr$vBySWG_^)Q{u$eIFpZV27^A^;moRPWwXm4ww>B4*(_neIA3m+`>tyH{) zRtw$sH->&l+Z2axZb~j8me*{TgZ4+G-KuI9w(@ZE?m{$*qstx0;>sPo0 z&LKN2%z19#WSc`qUTC(Y!?ZZu+!Tl7?BGM1m1_bdW=T|t2>*pI7p9!*#zMn|NmqNv zwHq>~NQN8;NDEHYgX;kOvEwnJYAchqqhARBRQPY6WVwbL2&7Q)LEnV@vCwo5Sje}o zR&aFuYN6=@xN;^74b52!x#K`Mu=)m&x*FSG8Ke>t7ACi_in{59ew?1)FwMW#&KKTd z=48#*VJyoi=fZ>$^N1O_Zee}TP?w&|Ue~Z(!m<#RZ*GGpbQl!co(RU<4T=!|uRu~0`C$&SuPjlm!Jr2kU7Dn0Y zMrqq-1k;B!%}ken3PIa^s~5WRrNncYi-YA>ruG56%efd#-S=5tHyt{Mo!V{^_U9WI zREd+iX8iIx`U(a1x}hu37Iw7}A+P(mKO2zJ_m86*WU9Jj6Xy}eD*2~7i~xc={sq;_ z&AC*GH|zqKKeGK=tT*wo7a1tD>}nL!jPY+d#Qe0t^ z1RwJ#-)v*}p$LkJn>;qZKsuXSiM=?Iz`O&3IrrR1B-rx+2T!#`d!Rz9}Cmr>LJf7}?yvQlgY{ zi-UL$Kd7EI&5A9lAlC2x1MjF{;3>);&(ZX_d9TSfAdX0BO(q|1s`R@J_EA?g`r~S{ z|MGP8A+^@H@kw>SWiA_cdk;76eg3O|a8iLIsj8hp=Yjj(s0oP4^vai$qJP-$E;Aq8 zK7*c(N@*ojAVRScnl+Z2c16tOpOKa8bqtvA}@2Y+>CN;2mx4?d{y}MATi{pz{Cr7?CPKtG-c+5lfnYc>Uo^=}#=x zL1p9U=OcGCC>}vimg!VNhnU79zY^Wqe&Pwz6hfomywkg9cYi-7oQ1-MTxg2XT{I=n zzZ@Q(^+(;w;rRRo*TTMlYhApUUd>i?A7zcy^SP=c0%e?zXgr)6Q5+RAfr`M|ah11| z8O)#1O5dpPp2-i|Y62`dDNUJd7ZU?OW>Z>&_0CVcI&o9iwGo+0G|J_jvK<=?xL98&LyyO2IIK$u@A4D*v$|_By`p37 zp*fg;ohi+AXu{F2ZOLRB3K+Fx3gu~DlmlgbBE0is#8u1?m6yz)jOOd~myR!>Qea4t zaBj`+{2oc<;&67S88UMELLz9ceB{tb_c)2k(2qpg45db0a?hkLd2 zkM8`68aN+=KOmm3K<9Se?z1nyTr2;7_v60t`8RG7@$Zz@whoWD!GwCn$XW3p2sd7L`5=4mBy?maOHepkAX`>F`Pv!<*-)1e zA`B9^f;NLVYw>|y@VI3_(cFROvb?tv@1&pBWMAGUCYPU9pJfGVV60)R*wWVwSHPIKBop@Z_a>(6-cGRQR_Z1n+^ z>k<;8%0SNe=5NqTbH2?G4w%#Fc^n#gaX08VLI zdi&kZK7^5_)GbnqL8=h zoJ9VyBbF4j;Ra)}T_C3sq@hYrqzAz}eKmrDUxUF~F_qqoyhV8{YObk5N^q47I&pNc zRwoVc(erI2bnI9sYxQdF{*vwHFM_i;cYmk2weNqp-M5YByH^*~Ec>RK#uWe8@&BtY zO^lS@(!W%Yu&A`IlkT4`h936s=9;SZL{ODMs$J7r6_ed`E+4OHr`LZs|63MEDII

    q-ttV~T#g2^^KPX__Q=(a{23I7P&U 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 U1{SQqC>fE6=~CHuYRwM*U-eLq{{R30 literal 0 HcmV?d00001 diff --git a/usr/local/share/locale/pt_BR.ISO8859-1/LC_MESSAGES/pfSense.po b/usr/local/share/locale/pt_BR.ISO8859-1/LC_MESSAGES/pfSense.po new file mode 100644 index 000000000..00693d06f --- /dev/null +++ b/usr/local/share/locale/pt_BR.ISO8859-1/LC_MESSAGES/pfSense.po @@ -0,0 +1,41318 @@ +# Language translation for pfSense project. +# Copyright (C) 2011-2014 Electric Sheep Fencing LLC +# This file is distributed under the same license as the pfSense package. +# Vinicius Coque , 2011. +# Luiz Gustavo , 2014 Powered by: TrustUX Network (www.trustux.com) +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-07-29 09:27-0300\n" +"PO-Revision-Date: 2014-02-28 14:46-0300\n" +"Last-Translator: Luiz Gustavo \n" +"Language-Team: Powered By: TrustUX Network \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 1.6.4\n" + +#: etc/inc/PEAR.inc:161 +#, php-format +msgid "PEAR constructor called, class=%s\n" +msgstr "Construtor PEAR chamado, class=%s\n" + +#: etc/inc/PEAR.inc:198 +#, php-format +msgid "PEAR destructor called, class=%s\n" +msgstr "Destrutor PEAR chamado, classe=%s\n" + +#: etc/inc/PEAR.inc:337 etc/inc/PEAR.inc:595 etc/inc/PEAR.inc:632 +msgid "invalid error callback" +msgstr "retorno de chamada de erro inválida" + +#: etc/inc/PEAR.inc:342 etc/inc/PEAR.inc:600 etc/inc/PEAR.inc:637 +msgid "invalid error mode" +msgstr "modo de erro inválido" + +#: etc/inc/PEAR.inc:445 etc/inc/PEAR.inc:451 +msgid "The expected error you submitted does not exist" +msgstr "O erro esperado que você enviou não existe" + +#: etc/inc/PEAR.inc:455 +msgid "The expected error you submitted is empty" +msgstr "O erro esperado que você enviou está vazio" + +#: etc/inc/PEAR.inc:866 +msgid "PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions" +msgstr "PEAR_ERROR_EXCEPTION está obsoleto, use a classe PEAR_ErrorStack para exceções" + +#: etc/inc/PEAR.inc:1023 +#, php-format +msgid "[%s: message=\"%s\" code=%d mode=callback callback=%s prefix=\"%s\" info=\"%s\"]" +msgstr "[%s: message=\"%s\" code=%d mode=callback callback=%s prefix=\"%s\" info=\"%s\"]" + +#: etc/inc/PEAR.inc:1041 +#, php-format +msgid "[%s: message=\"%s\" code=%d mode=%s level=%s prefix=\"%s\" info=\"%s\"]" +msgstr "[%s: message=\"%s\" code=%d mode=%s level=%s prefix=\"%s\" info=\"%s\"]" + +#: etc/inc/array_intersect_key.inc:37 +msgid "Wrong parameter count for array_intersect_key()" +msgstr "Quantidade de parâmetros errada para array_intersect_key()" + +#: etc/inc/array_intersect_key.inc:45 +msgid "array_intersect_key() Argument #" +msgstr "array_intersect_key() Argumento #" + +#: etc/inc/array_intersect_key.inc:46 +msgid " is not an array" +msgstr "não é um array" + +# só se usa "ao invés", para coisas contrárias. "Dentro ao invés de fora." +#: etc/inc/auth.inc:100 etc/inc/auth.inc:107 +msgid "Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/DNS_rebinding
    Try accessing the router by IP address instead of by hostname." +msgstr "Potencial ataque DNS Rebind detectado, veja http://en.wikipedia.org/wiki/DNS_rebinding
    Tente acessar o roteador pelo endereço de IP em lugar do hostname." + +#: etc/inc/auth.inc:115 etc/inc/auth.inc:122 +msgid "Redirecting..." +msgstr "Redirecionando..." + +#: etc/inc/auth.inc:115 etc/inc/auth.inc:122 +msgid "Redirecting to the dashboard..." +msgstr "Redirecionando para ao dashboard..." + +#: etc/inc/auth.inc:315 etc/inc/auth.inc:335 etc/inc/auth.inc:406 +#: etc/inc/auth.inc:433 etc/inc/auth.inc:478 etc/inc/auth.inc:609 +#: etc/inc/auth.inc:621 etc/inc/auth.inc:311 etc/inc/auth.inc:331 +#: etc/inc/auth.inc:402 etc/inc/auth.inc:431 etc/inc/auth.inc:487 +#: etc/inc/auth.inc:618 etc/inc/auth.inc:630 etc/inc/auth.inc:334 +#: etc/inc/auth.inc:354 etc/inc/auth.inc:425 etc/inc/auth.inc:454 +#: etc/inc/auth.inc:510 etc/inc/auth.inc:641 etc/inc/auth.inc:653 +#, php-format +msgid "Running: %s" +msgstr "Executando: %s" + +#: etc/inc/auth.inc:656 etc/inc/auth.inc:728 etc/inc/auth.inc:796 +#: etc/inc/auth.inc:1040 etc/inc/auth.inc:665 etc/inc/auth.inc:737 +#: etc/inc/auth.inc:805 etc/inc/auth.inc:1049 etc/inc/auth.inc:1053 +#: etc/inc/auth.inc:806 etc/inc/auth.inc:1057 etc/inc/auth.inc:688 +#: etc/inc/auth.inc:760 etc/inc/auth.inc:831 etc/inc/auth.inc:1086 +#, php-format +msgid "ERROR! Could not connect to server %s." +msgstr "ERRO! Não foi possível conectar-se ao servidor %s." + +#: etc/inc/auth.inc:674 etc/inc/auth.inc:683 etc/inc/auth.inc:706 +#, php-format +msgid "LDAP: Could not lookup CA by reference for host %s." +msgstr "LDAP: Não foi possível encontrar a CA referenciada pelo host %s." + +#: etc/inc/auth.inc:783 etc/inc/auth.inc:792 etc/inc/auth.inc:793 +#: etc/inc/auth.inc:818 +msgid "ERROR! ldap_get_user_ous() backed selected with no LDAP authentication server defined." +msgstr "ERRO! ldap_get_user_ous() selecionado sem servidor de autenticação LDAP definido." + +#: etc/inc/auth.inc:807 etc/inc/auth.inc:816 etc/inc/auth.inc:818 +#: etc/inc/auth.inc:845 +#, php-format +msgid "ERROR! ldap_get_user_ous() could not bind anonymously to server %s." +msgstr "ERRO! ldap_get_user_ous() não foi possível vincular anonimamente ao servidor %s." + +#: etc/inc/auth.inc:812 etc/inc/auth.inc:821 etc/inc/auth.inc:823 +#: etc/inc/auth.inc:850 +#, php-format +msgid "ERROR! ldap_get_user_ous() could not bind to server %s." +msgstr "ERRO! ldap_get_user_ous() não pôde vincular ao servidor %s." + +#: etc/inc/auth.inc:908 etc/inc/auth.inc:917 etc/inc/auth.inc:919 +#: etc/inc/auth.inc:946 +#, php-format +msgid "ERROR! ldap_get_groups() Could not connect to server %s." +msgstr "ERRO! ldap_get_groups() Não foi possível conectar ao servidor %s." + +#: etc/inc/auth.inc:918 etc/inc/auth.inc:927 etc/inc/auth.inc:930 +#: etc/inc/auth.inc:959 +#, php-format +msgid "ERROR! ldap_get_groups() could not bind anonymously to server %s." +msgstr "ERRO! ldap_get_groups() não foi possível vincular anonimamente ao servidor %s." + +#: etc/inc/auth.inc:923 etc/inc/auth.inc:932 etc/inc/auth.inc:935 +#: etc/inc/auth.inc:964 +#, php-format +msgid "ERROR! ldap_get_groups() could not bind to server %s." +msgstr "ERRO! ldap_get_groups() não foi possível vincular ao servidor %s." + +#: etc/inc/auth.inc:1020 etc/inc/auth.inc:1029 etc/inc/auth.inc:1033 +#: etc/inc/auth.inc:1036 etc/inc/auth.inc:1065 +msgid "ERROR! ldap_backed() called with no LDAP authentication server defined. Defaulting to local user database. Visit System -> User Manager." +msgstr "ERRO! ldap_backed() nenhum chamado com servidor de autenticação LDAP foi definido. Padronizando o banco de dados do usuário local. Visite Sistema -> Gerenciador de Usuário." + +#: etc/inc/auth.inc:1023 etc/inc/auth.inc:1032 etc/inc/auth.inc:1036 +#: etc/inc/auth.inc:1039 etc/inc/auth.inc:1068 +msgid "ERROR! ldap_backed() called with no LDAP authentication server defined." +msgstr "ERRO! ldap_backed() nenhum chamado com servidor de autenticação LDAP foi definido." + +#: etc/inc/auth.inc:1054 etc/inc/auth.inc:1063 etc/inc/auth.inc:1067 +#: etc/inc/auth.inc:1071 etc/inc/auth.inc:1102 +#, php-format +msgid "ERROR! Could not bind to server %s." +msgstr "ERRO! Não foi possível vincular ao servidor %s." + +#: etc/inc/auth.inc:1071 etc/inc/auth.inc:1080 etc/inc/auth.inc:1084 +#: etc/inc/auth.inc:1085 etc/inc/auth.inc:1089 etc/inc/auth.inc:1120 +#, php-format +msgid "Now Searching for %s in directory." +msgstr "Buscando agora por %s no diretório." + +#: etc/inc/auth.inc:1075 etc/inc/auth.inc:1084 etc/inc/auth.inc:1088 +#: etc/inc/auth.inc:1090 etc/inc/auth.inc:1094 etc/inc/auth.inc:1128 +#, php-format +msgid "Now Searching in server %1$s, container %2$s with filter %3$s." +msgstr "Agora pesquisando no servidor %1$s, recipiente %2$s com filtro %3$s." + +#: etc/inc/auth.inc:1086 etc/inc/auth.inc:1095 etc/inc/auth.inc:1099 +#: etc/inc/auth.inc:1101 etc/inc/auth.inc:1105 etc/inc/auth.inc:1139 +#, php-format +msgid "Search resulted in error: %s" +msgstr "A busca resultou em erro: %s" + +#: etc/inc/auth.inc:1102 etc/inc/auth.inc:1111 etc/inc/auth.inc:1115 +#: etc/inc/auth.inc:1117 etc/inc/auth.inc:1121 etc/inc/auth.inc:1155 +msgid "ERROR! Either LDAP search failed, or multiple users were found." +msgstr "ERRO! Ou a busca LDAP falhou, ou múltiplos usuários foram encontrados." + +#: etc/inc/auth.inc:1108 etc/inc/auth.inc:1117 etc/inc/auth.inc:1121 +#: etc/inc/auth.inc:1123 +#, php-format +msgid "ERROR! Could not login to server %1$s as user %2$s." +msgstr "ERRO! Não foi possível logar no servidor %1$s como usuário %2$s." + +#: etc/inc/auth.inc:1113 etc/inc/auth.inc:1122 etc/inc/auth.inc:1126 +#: etc/inc/auth.inc:1129 etc/inc/auth.inc:1133 etc/inc/auth.inc:1169 +#, php-format +msgid "Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s." +msgstr "Autenticado com sucesso como %1$s via servidor LDAP %2$s com DN = %3$s." + +#: etc/inc/auth.inc:1144 etc/inc/auth.inc:1153 etc/inc/auth.inc:1157 +#: etc/inc/auth.inc:1163 etc/inc/auth.inc:1167 etc/inc/auth.inc:1204 +#, php-format +msgid "Radius start: %s
    \n" +msgstr "Início do Radius: %s
    \n" + +#: etc/inc/auth.inc:1155 etc/inc/auth.inc:1164 etc/inc/auth.inc:1168 +#: etc/inc/auth.inc:1174 etc/inc/auth.inc:1178 etc/inc/auth.inc:1215 +#, php-format +msgid "Radius send failed: %s
    \n" +msgstr "Envio do Radius falhou: %s
    \n" + +#: etc/inc/auth.inc:1159 etc/inc/auth.inc:1170 etc/inc/auth.inc:1174 +#: etc/inc/auth.inc:1180 etc/inc/auth.inc:1184 etc/inc/auth.inc:1221 +#, php-format +msgid "Radius Auth succeeded" +msgstr "Autenticação do Radius bem sucedida" + +#: etc/inc/auth.inc:1164 etc/inc/auth.inc:1175 etc/inc/auth.inc:1179 +#: etc/inc/auth.inc:1185 etc/inc/auth.inc:1189 etc/inc/auth.inc:1226 +#, php-format +msgid "Radius Auth rejected" +msgstr "Autenticação do Radius rejeitada" + +#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218 +#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237 etc/inc/auth.inc:1228 +#: etc/inc/auth.inc:1243 etc/inc/auth.inc:1232 etc/inc/auth.inc:1247 +#: etc/inc/auth.inc:1269 etc/inc/auth.inc:1284 +msgid "Local Database" +msgstr "Banco de Dados Local" + +#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218 +#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237 +msgid "Local Auth" +msgstr "Autenticação Local" + +#: etc/inc/auth.inc:1293 etc/inc/auth.inc:1317 etc/inc/auth.inc:1321 +#: etc/inc/auth.inc:1327 etc/inc/auth.inc:1331 etc/inc/auth.inc:1368 +#, php-format +msgid "Successful login for user '%1$s' from: %2$s" +msgstr "Login bem sucedido para o usuário '%1$s' de: %2$s" + +#: etc/inc/auth.inc:1347 etc/inc/auth.inc:1371 etc/inc/auth.inc:1375 +#: etc/inc/auth.inc:1381 etc/inc/auth.inc:1385 etc/inc/auth.inc:1422 +#, php-format +msgid "Session timed out for user '%1$s' from: %2$s" +msgstr "Sessão expirada para usuário '%1$s' de: %2$s" + +#: etc/inc/auth.inc:1349 etc/inc/auth.inc:1373 etc/inc/auth.inc:1377 +#: etc/inc/auth.inc:1383 etc/inc/auth.inc:1387 etc/inc/auth.inc:1424 +#, php-format +msgid "User logged out for user '%1$s' from: %2$s" +msgstr "Usuário desconectado para '%1$s' de: %2$s" + +#: etc/inc/captiveportal.inc:1374 etc/inc/captiveportal.inc:1383 +#: etc/inc/captiveportal.inc:1420 etc/inc/captiveportal.inc:1335 +#: etc/inc/captiveportal.inc:1338 etc/inc/captiveportal.inc:1334 +#, php-format +msgid "Error: cannot open '%s' in captiveportal_write_elements()%s" +msgstr "Erro: não pôde abrir '%s' em captiveportal_write_elements()%s" + +#: etc/inc/config.inc:100 +msgid "Upgrading m0n0wall configuration to pfSense... " +msgstr "Atualizando configuração do m0n0wall para o pfSense..." + +#: etc/inc/config.inc:103 +msgid "ERROR! Could not convert m0n0wall -> pfsense in config.xml" +msgstr "ERRO! Não pôde converter m0n0wall -> pfsense no config.xml" + +#: etc/inc/config.inc:133 +msgid "CDROM build" +msgstr "Construção de CDROM" + +#: etc/inc/config.inc:134 etc/inc/config.inc:135 +msgid "CFG:" +msgstr "CFG:" + +#: etc/inc/config.inc:136 +msgid "TYPE:" +msgstr "TIPO:" + +#: etc/inc/config.inc:151 etc/inc/config.inc:166 +#, php-format +msgid "Found configuration on %s.%s" +msgstr "Encontrada configuração em %s.%s" + +#: etc/inc/config.inc:180 etc/inc/config.inc:181 etc/inc/config.lib.inc:105 +#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:245 +#: etc/inc/config.lib.inc:266 etc/inc/config.lib.inc:267 +msgid "No config.xml found, attempting last known config restore." +msgstr "Nenhum config.xml encontrado, tentando última restauração conhecida do config." + +#: etc/inc/config.inc:184 +msgid "No config.xml or config backups found, resetting to factory defaults." +msgstr "Nenhum config.xml ou backups encontrados, reconfigurando para padrões de fábrica." + +#: etc/inc/filter.inc:197 etc/inc/filter.inc:194 etc/inc/filter.inc:193 +#: etc/inc/filter.inc:168 etc/inc/filter.inc:183 +msgid "Initializing" +msgstr "Inicializando" + +#: etc/inc/filter.inc:209 etc/inc/filter.inc:206 etc/inc/filter.inc:205 +#: etc/inc/filter.inc:180 etc/inc/filter.inc:195 +msgid "Configuring firewall" +msgstr "Configurando firewall" + +#: etc/inc/filter.inc:214 etc/inc/filter.inc:211 etc/inc/filter.inc:210 +#: etc/inc/filter.inc:185 etc/inc/filter.inc:200 +msgid "Creating aliases" +msgstr "Criando aliases" + +#: etc/inc/filter.inc:219 etc/inc/filter.inc:218 etc/inc/filter.inc:193 +#: etc/inc/filter.inc:208 +msgid "Generating NAT rules" +msgstr "Gerando regras NAT" + +#: etc/inc/filter.inc:224 etc/inc/filter.inc:223 etc/inc/filter.inc:198 +#: etc/inc/filter.inc:213 +msgid "Generating filter rules" +msgstr "Gerando regras de filtro" + +#: etc/inc/filter.inc:230 etc/inc/filter.inc:229 etc/inc/filter.inc:204 +#: etc/inc/filter.inc:219 +msgid "Generating ALTQ queues" +msgstr "Gerando filas ALTQ" + +#: etc/inc/filter.inc:232 etc/inc/filter.inc:216 etc/inc/filter.inc:215 +#: etc/inc/filter.inc:190 etc/inc/filter.inc:205 +msgid "Generating Limiter rules" +msgstr "Gerando regras Limiter" + +#: etc/inc/filter.inc:234 etc/inc/filter.inc:232 etc/inc/filter.inc:231 +#: etc/inc/filter.inc:206 etc/inc/filter.inc:221 +msgid "Generating Layer7 rules" +msgstr "Gerando regras Layer7" + +#: etc/inc/filter.inc:238 etc/inc/filter.inc:236 etc/inc/filter.inc:235 +#: etc/inc/filter.inc:210 etc/inc/filter.inc:225 +msgid "Loading filter rules" +msgstr "Carregando regras de filtro" + +#: etc/inc/filter.inc:245 etc/inc/filter.inc:243 etc/inc/filter.inc:242 +#: etc/inc/filter.inc:217 etc/inc/filter.inc:232 +msgid "Filter is disabled. Not loading rules." +msgstr "Filtro estático desabilitado. Não carregando regras." + +#: etc/inc/filter.inc:247 etc/inc/filter.inc:418 etc/inc/interfaces.inc:217 +#: etc/inc/interfaces.inc:234 etc/inc/interfaces.inc:360 +#: etc/inc/interfaces.inc:410 etc/inc/interfaces.inc:664 +#: etc/inc/interfaces.inc:924 etc/inc/interfaces.inc:964 +#: etc/inc/interfaces.inc:979 etc/inc/interfaces.inc:1780 +#: etc/inc/pkg-utils.inc:586 etc/inc/pkg-utils.inc:596 +#: etc/inc/pkg-utils.inc:619 etc/inc/pkg-utils.inc:696 +#: etc/inc/pkg-utils.inc:711 etc/inc/pkg-utils.inc:755 +#: etc/inc/pkg-utils.inc:786 etc/inc/pkg-utils.inc:805 +#: etc/inc/pkg-utils.inc:812 etc/inc/pkg-utils.inc:829 +#: etc/inc/pkg-utils.inc:845 etc/inc/pkg-utils.inc:861 +#: etc/inc/pkg-utils.inc:967 etc/inc/pkg-utils.inc:984 +#: etc/inc/pkg-utils.inc:1009 etc/inc/pkg-utils.inc:1054 +#: etc/inc/pkg-utils.inc:1063 etc/inc/pkg-utils.inc:1073 +#: etc/inc/pkg-utils.inc:1088 etc/inc/pkg-utils.inc:1095 +#: etc/inc/pkg-utils.inc:1114 etc/inc/services.inc:899 +#: etc/inc/services.inc:1234 etc/inc/services.inc:1297 +#: etc/inc/services.inc:1477 etc/inc/system.inc:651 etc/inc/system.inc:674 +#: etc/inc/system.inc:759 etc/inc/system.inc:1197 etc/inc/system.inc:1278 +#: etc/inc/system.inc:1409 etc/inc/rrd.inc:782 etc/inc/system.inc:699 +#: etc/inc/system.inc:722 etc/inc/system.inc:806 etc/inc/system.inc:1249 +#: etc/inc/system.inc:1334 etc/inc/system.inc:1466 etc/inc/pkg-utils.inc:612 +#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:645 +#: etc/inc/pkg-utils.inc:722 etc/inc/pkg-utils.inc:737 +#: etc/inc/pkg-utils.inc:781 etc/inc/pkg-utils.inc:841 +#: etc/inc/pkg-utils.inc:848 etc/inc/pkg-utils.inc:865 +#: etc/inc/pkg-utils.inc:881 etc/inc/pkg-utils.inc:897 +#: etc/inc/pkg-utils.inc:1004 etc/inc/pkg-utils.inc:1021 +#: etc/inc/pkg-utils.inc:1046 etc/inc/pkg-utils.inc:1091 +#: etc/inc/pkg-utils.inc:1100 etc/inc/pkg-utils.inc:1110 +#: etc/inc/pkg-utils.inc:1125 etc/inc/pkg-utils.inc:1132 +#: etc/inc/pkg-utils.inc:1151 etc/inc/interfaces.inc:219 +#: etc/inc/interfaces.inc:236 etc/inc/interfaces.inc:362 +#: etc/inc/interfaces.inc:412 etc/inc/interfaces.inc:671 +#: etc/inc/interfaces.inc:951 etc/inc/interfaces.inc:991 +#: etc/inc/interfaces.inc:1006 etc/inc/interfaces.inc:1845 etc/inc/rrd.inc:806 +#: etc/inc/services.inc:1028 etc/inc/services.inc:1370 +#: etc/inc/services.inc:1434 etc/inc/services.inc:1669 etc/inc/filter.inc:245 +#: etc/inc/filter.inc:420 etc/inc/system.inc:703 etc/inc/system.inc:726 +#: etc/inc/system.inc:804 etc/inc/system.inc:1229 etc/inc/system.inc:1376 +#: etc/inc/system.inc:1508 etc/inc/pkg-utils.inc:394 etc/inc/pkg-utils.inc:613 +#: etc/inc/pkg-utils.inc:623 etc/inc/pkg-utils.inc:646 +#: etc/inc/pkg-utils.inc:723 etc/inc/pkg-utils.inc:738 +#: etc/inc/pkg-utils.inc:782 etc/inc/pkg-utils.inc:813 +#: etc/inc/pkg-utils.inc:842 etc/inc/pkg-utils.inc:849 +#: etc/inc/pkg-utils.inc:866 etc/inc/pkg-utils.inc:882 +#: etc/inc/pkg-utils.inc:898 etc/inc/pkg-utils.inc:1005 +#: etc/inc/pkg-utils.inc:1022 etc/inc/pkg-utils.inc:1047 +#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1101 +#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1126 +#: etc/inc/pkg-utils.inc:1133 etc/inc/pkg-utils.inc:1152 +#: etc/inc/interfaces.inc:218 etc/inc/interfaces.inc:235 +#: etc/inc/interfaces.inc:361 etc/inc/interfaces.inc:411 +#: etc/inc/interfaces.inc:670 etc/inc/interfaces.inc:950 +#: etc/inc/interfaces.inc:990 etc/inc/interfaces.inc:1005 +#: etc/inc/interfaces.inc:1849 etc/inc/services.inc:1160 +#: etc/inc/services.inc:1509 etc/inc/services.inc:1573 +#: etc/inc/services.inc:1808 etc/inc/filter.inc:244 etc/inc/filter.inc:423 +#: etc/inc/filter.inc:219 etc/inc/filter.inc:395 etc/inc/pkg-utils.inc:411 +#: etc/inc/pkg-utils.inc:648 etc/inc/pkg-utils.inc:658 +#: etc/inc/pkg-utils.inc:681 etc/inc/pkg-utils.inc:758 +#: etc/inc/pkg-utils.inc:773 etc/inc/pkg-utils.inc:817 +#: etc/inc/pkg-utils.inc:877 etc/inc/pkg-utils.inc:884 +#: etc/inc/pkg-utils.inc:901 etc/inc/pkg-utils.inc:917 +#: etc/inc/pkg-utils.inc:933 etc/inc/pkg-utils.inc:1040 +#: etc/inc/pkg-utils.inc:1057 etc/inc/pkg-utils.inc:1082 +#: etc/inc/pkg-utils.inc:1127 etc/inc/pkg-utils.inc:1136 +#: etc/inc/pkg-utils.inc:1146 etc/inc/pkg-utils.inc:1161 +#: etc/inc/pkg-utils.inc:1168 etc/inc/pkg-utils.inc:1187 +#: etc/inc/interfaces.inc:216 etc/inc/interfaces.inc:233 +#: etc/inc/interfaces.inc:365 etc/inc/interfaces.inc:422 +#: etc/inc/interfaces.inc:697 etc/inc/interfaces.inc:1033 +#: etc/inc/interfaces.inc:1054 etc/inc/interfaces.inc:1069 +#: etc/inc/interfaces.inc:1889 etc/inc/services.inc:1154 +#: etc/inc/services.inc:1499 etc/inc/services.inc:1596 +#: etc/inc/services.inc:1797 etc/inc/system.inc:712 etc/inc/system.inc:735 +#: etc/inc/system.inc:815 etc/inc/system.inc:1178 etc/inc/system.inc:1318 +#: etc/inc/system.inc:1457 etc/inc/rrd.inc:829 etc/inc/filter.inc:399 +#: etc/inc/interfaces.inc:1894 etc/inc/services.inc:1516 +#: etc/inc/services.inc:1628 etc/inc/services.inc:1837 etc/inc/rrd.inc:831 +#: etc/inc/services.inc:1659 etc/inc/services.inc:1868 etc/inc/rrd.inc:834 +#: etc/inc/services.inc:1212 etc/inc/services.inc:1568 +#: etc/inc/services.inc:1723 etc/inc/services.inc:1932 etc/inc/filter.inc:234 +#: etc/inc/services.inc:1210 etc/inc/services.inc:1566 +#: etc/inc/services.inc:1721 etc/inc/services.inc:1930 etc/inc/system.inc:1205 +#: etc/inc/system.inc:1345 etc/inc/system.inc:1484 etc/inc/rrd.inc:873 +msgid "done." +msgstr "pronto." + +#: etc/inc/filter.inc:259 etc/inc/filter.inc:265 etc/inc/filter.inc:289 +#: etc/inc/filter.inc:269 etc/inc/filter.inc:284 +msgid "Setting up logging information" +msgstr "Configurando informação de log" + +#: etc/inc/filter.inc:290 etc/inc/filter.inc:294 etc/inc/filter.inc:274 +#: etc/inc/filter.inc:289 +msgid "Setting up SCRUB information" +msgstr "Configurando informação de SCRUB" + +#: etc/inc/filter.inc:336 etc/inc/filter.inc:338 etc/inc/filter.inc:341 +#: etc/inc/filter.inc:313 etc/inc/filter.inc:328 +#, php-format +msgid "The line in question reads [%1$d]: %2$s" +msgstr "A linha em questão lida [%1$d]: %2$s" + +#: etc/inc/filter.inc:338 etc/inc/filter.inc:340 etc/inc/filter.inc:342 +#: etc/inc/filter.inc:343 etc/inc/filter.inc:345 etc/inc/filter.inc:316 +#: etc/inc/filter.inc:317 etc/inc/filter.inc:331 etc/inc/filter.inc:332 +#, php-format +msgid "There were error(s) loading the rules: %1$s - %2$s" +msgstr "Houve erro(s) carregando as regras: %1$s - %2$s" + +#: etc/inc/filter.inc:349 etc/inc/filter.inc:351 etc/inc/filter.inc:354 +#: etc/inc/filter.inc:324 etc/inc/filter.inc:339 +msgid "PF was wedged/busy and has been reset." +msgstr "PF estava travado/ocupado e foi reiniciado." + +#: etc/inc/filter.inc:355 etc/inc/filter.inc:357 etc/inc/filter.inc:360 +#: etc/inc/filter.inc:329 etc/inc/filter.inc:333 etc/inc/filter.inc:348 +msgid "Starting up layer7 daemon" +msgstr "Iniciando daemon layer7" + +#: etc/inc/filter.inc:403 etc/inc/filter.inc:405 etc/inc/filter.inc:408 +#: etc/inc/filter.inc:380 etc/inc/filter.inc:384 +msgid "Processing down interface states" +msgstr "Processando estados de interface" + +#: etc/inc/filter.inc:407 etc/inc/filter.inc:409 etc/inc/filter.inc:412 +#: etc/inc/filter.inc:384 etc/inc/filter.inc:388 +msgid "Running plugins" +msgstr "Executando plugins" + +#: etc/inc/filter.inc:411 etc/inc/filter.inc:413 etc/inc/filter.inc:416 +#: etc/inc/filter.inc:388 etc/inc/filter.inc:392 +msgid "Running plugins (pf)" +msgstr "Executando plugins (pf)" + +#: etc/inc/filter.inc:413 etc/inc/filter.inc:415 etc/inc/filter.inc:418 +#: etc/inc/filter.inc:390 etc/inc/filter.inc:394 +msgid "Plugins completed." +msgstr "Plugins finalizados." + +#: etc/inc/filter.inc:416 usr/local/www/restart_httpd.php:52 +#: usr/local/www/restart_httpd.php:55 usr/local/www/restart_httpd.php:58 +#: usr/local/www/restart_httpd.php:61 etc/inc/filter.inc:418 +#: etc/inc/filter.inc:421 etc/inc/filter.inc:393 etc/inc/filter.inc:397 +msgid "Done" +msgstr "Pronto" + +#: etc/inc/filter.inc:636 etc/inc/filter.inc:649 etc/inc/filter.inc:652 +#: etc/inc/filter.inc:641 etc/inc/filter.inc:657 etc/inc/filter.inc:671 +msgid "Creating gateway group item..." +msgstr "Criando um item de grupo de gateway..." + +#: etc/inc/filter.inc:666 etc/inc/filter.inc:681 etc/inc/filter.inc:684 +#: etc/inc/filter.inc:673 etc/inc/filter.inc:687 etc/inc/filter.inc:692 +#: etc/inc/filter.inc:706 +#, php-format +msgid "Setting up route with %1$s on %2$s" +msgstr "Configurando rota com %1$s em %2$s" + +#: etc/inc/filter.inc:673 etc/inc/filter.inc:688 etc/inc/filter.inc:691 +#: etc/inc/filter.inc:680 etc/inc/filter.inc:694 etc/inc/filter.inc:699 +#: etc/inc/filter.inc:713 +#, php-format +msgid "An error occurred while trying to find the interface got %s . The rule has not been added." +msgstr "Um erro ocorreu na tentativa de se encontrar a interface obtida %s. A regra não foi adicionada." + +#: etc/inc/filter.inc:937 etc/inc/filter.inc:987 etc/inc/filter.inc:975 +#: etc/inc/filter.inc:1009 etc/inc/filter.inc:1027 etc/inc/filter.inc:1032 +#: etc/inc/filter.inc:1046 +#, php-format +msgid "Creating reflection NAT rule for %s..." +msgstr "Criando regra de reflexão NAT para %s..." + +#: etc/inc/filter.inc:991 etc/inc/filter.inc:1076 etc/inc/filter.inc:1064 +#: etc/inc/filter.inc:1098 etc/inc/filter.inc:1116 etc/inc/filter.inc:1121 +#: etc/inc/filter.inc:1135 +#, php-format +msgid "Creating reflection rule for %s..." +msgstr "Criando regra de reflexão para %s..." + +#: etc/inc/filter.inc:1251 etc/inc/filter.inc:1338 etc/inc/filter.inc:1326 +#: etc/inc/filter.inc:1360 etc/inc/filter.inc:1378 etc/inc/filter.inc:1383 +#: etc/inc/filter.inc:1398 +msgid "Creating 1:1 rules..." +msgstr "Criando regras 1:1..." + +#: etc/inc/filter.inc:1350 etc/inc/filter.inc:1437 etc/inc/filter.inc:1454 +#: etc/inc/filter.inc:1501 etc/inc/filter.inc:1519 etc/inc/filter.inc:1524 +#: etc/inc/filter.inc:1539 +#, php-format +msgid "Creating advanced outbound rule %s" +msgstr "Criando regra de saída avançada %s" + +#: etc/inc/filter.inc:1386 etc/inc/filter.inc:1473 etc/inc/filter.inc:1490 +#: etc/inc/filter.inc:1533 etc/inc/filter.inc:1551 etc/inc/filter.inc:1556 +#: etc/inc/filter.inc:1571 +msgid "Creating outbound NAT rules" +msgstr "Criando regras NAT de outbound" + +#: etc/inc/filter.inc:1481 etc/inc/filter.inc:1566 etc/inc/filter.inc:1583 +#: etc/inc/filter.inc:1626 etc/inc/filter.inc:1644 etc/inc/filter.inc:1649 +#: etc/inc/filter.inc:1664 +#, php-format +msgid "Creating outbound rules %1$s - (%2$s)" +msgstr "Criando regras de saída %1$s - (%2$s)" + +#: etc/inc/filter.inc:1499 etc/inc/filter.inc:1584 etc/inc/filter.inc:1601 +#: etc/inc/filter.inc:1644 etc/inc/filter.inc:1662 etc/inc/filter.inc:1667 +#: etc/inc/filter.inc:1682 +msgid "Setting up TFTP helper" +msgstr "Configurando ajuda do TFTP" + +#: etc/inc/filter.inc:1545 etc/inc/filter.inc:1630 etc/inc/filter.inc:1644 +#: etc/inc/filter.inc:1676 etc/inc/filter.inc:1694 etc/inc/filter.inc:1699 +#: etc/inc/filter.inc:1714 +#, php-format +msgid "Creating NAT rule %s" +msgstr "Criando regra NAT %s" + +#: etc/inc/filter.inc:1689 etc/inc/filter.inc:1837 etc/inc/filter.inc:1850 +#: etc/inc/filter.inc:1882 etc/inc/filter.inc:1900 etc/inc/filter.inc:1905 +#: etc/inc/filter.inc:1921 +#, php-format +msgid "Creating filter rule %s ..." +msgstr "Criando regra de filtro %s ..." + +#: etc/inc/filter.inc:1827 etc/inc/filter.inc:1975 etc/inc/filter.inc:1988 +#: etc/inc/filter.inc:2024 etc/inc/filter.inc:2054 etc/inc/filter.inc:2059 +#: etc/inc/filter.inc:2075 +#, php-format +msgid "filter_generate_address: %s is not a valid source port." +msgstr "filter_generate_address: %s não é uma porta de origem válida." + +#: etc/inc/filter.inc:1943 etc/inc/filter.inc:2094 etc/inc/filter.inc:2107 +#: etc/inc/filter.inc:2142 etc/inc/filter.inc:2172 etc/inc/filter.inc:2177 +#: etc/inc/filter.inc:2193 +#, php-format +msgid "Setting up pass/block rules %s" +msgstr "Configurando regras de liberação/bloqueio %s" + +#: etc/inc/filter.inc:1962 etc/inc/filter.inc:2113 etc/inc/filter.inc:2126 +#: etc/inc/filter.inc:2157 etc/inc/filter.inc:2187 etc/inc/filter.inc:2192 +#: etc/inc/filter.inc:2208 +#, php-format +msgid "Could not find IPv4 gateway for interface (%s)." +msgstr "Não é possível encontrar gateway IPv4 para interface (%s)." + +#: etc/inc/filter.inc:1989 etc/inc/filter.inc:2140 etc/inc/filter.inc:2153 +#: etc/inc/filter.inc:2182 etc/inc/filter.inc:2214 etc/inc/filter.inc:2219 +#: etc/inc/filter.inc:2235 +#, php-format +msgid "Creating rule %s" +msgstr "Criando regra %s" + +#: etc/inc/filter.inc:2198 etc/inc/filter.inc:2355 etc/inc/filter.inc:2378 +#: etc/inc/filter.inc:2407 etc/inc/filter.inc:2439 etc/inc/filter.inc:2444 +#: etc/inc/filter.inc:2474 +msgid "Creating default rules" +msgstr "Criando regras padrão" + +#: etc/inc/filter.inc:2649 etc/inc/filter.inc:2862 etc/inc/filter.inc:2887 +#: etc/inc/filter.inc:2976 etc/inc/filter.inc:3000 etc/inc/filter.inc:3005 +#: etc/inc/filter.inc:3028 +msgid "Creating IPsec rules..." +msgstr "Criando regras IPsec..." + +#: etc/inc/filter.inc:2702 etc/inc/filter.inc:2915 etc/inc/filter.inc:2940 +#: etc/inc/filter.inc:3026 etc/inc/filter.inc:3050 etc/inc/filter.inc:3055 +#: etc/inc/filter.inc:3078 +msgid "Please use filter_tdr_install_cron() function tdr_install_cron will be deprecated!" +msgstr "Por favor, use a função filter_tdr_install_cron(). A função tdr_install_cron se tornará obsoleta!" + +#: etc/inc/filter.inc:2747 etc/inc/filter.inc:2960 etc/inc/filter.inc:2986 +#: etc/inc/filter.inc:3072 etc/inc/filter.inc:3096 etc/inc/filter.inc:3101 +#: etc/inc/filter.inc:3124 +msgid "Installed 15 minute filter reload for Time Based Rules" +msgstr "Instalado filtro de recarregamento de 15 minutos para Tempo de Regras Baseadas" + +#: etc/inc/filter.inc:3102 etc/inc/filter.inc:3313 etc/inc/filter.inc:3293 +#: etc/inc/filter.inc:3389 etc/inc/filter.inc:3413 etc/inc/filter.inc:3418 +#: etc/inc/filter.inc:3412 etc/inc/filter.inc:3440 +#, php-format +msgid "Checking for %1$s PF hooks in package %2$s" +msgstr "Checando para %1$s saltos PF no pacote %2$s" + +#: etc/inc/filter.inc:3107 etc/inc/filter.inc:3318 etc/inc/filter.inc:3299 +#: etc/inc/filter.inc:3395 etc/inc/filter.inc:3419 etc/inc/filter.inc:3424 +#: etc/inc/filter.inc:3418 etc/inc/filter.inc:3446 +#, php-format +msgid "Processing early %1$s rules for package %2$s" +msgstr "Processando %1$s regras iniciais para o pacote %2$s" + +#: etc/inc/filter.inc:3112 etc/inc/filter.inc:3323 etc/inc/filter.inc:3304 +#: etc/inc/filter.inc:3400 etc/inc/filter.inc:3424 etc/inc/filter.inc:3429 +#: etc/inc/filter.inc:3423 etc/inc/filter.inc:3451 +#, php-format +msgid "There was an error while parsing the package filter rules for %s." +msgstr "Houve um erro ao analisar as regras de filtro do pacote para %s." + +#: etc/inc/interfaces.inc:51 etc/inc/interfaces.inc:53 +msgid "interfaces_bring_up() was called but no variable defined." +msgstr "interfaces_bring_up() foi chamada mas nenhuma variável foi definida." + +#: etc/inc/interfaces.inc:213 etc/inc/interfaces.inc:215 +#: etc/inc/interfaces.inc:214 etc/inc/interfaces.inc:212 +msgid "Configuring loopback interface..." +msgstr "Configurando interface de loopback..." + +#: etc/inc/interfaces.inc:224 etc/inc/interfaces.inc:226 +#: etc/inc/interfaces.inc:225 etc/inc/interfaces.inc:223 +msgid "Configuring VLAN interfaces..." +msgstr "Configurando interfaces VLAN..." + +#: etc/inc/interfaces.inc:241 etc/inc/interfaces.inc:243 +#: etc/inc/interfaces.inc:242 etc/inc/interfaces.inc:240 +msgid "VLAN: called with wrong options. Problems with config!" +msgstr "VLAN: chamada com as opções erradas. Problemas com configuração!" + +#: etc/inc/interfaces.inc:249 +msgid "interface_vlan_confgure called with if undefined." +msgstr "interface_vlan_confgure chamada com if indefinido." + +#: etc/inc/interfaces.inc:283 etc/inc/interfaces.inc:367 +#: etc/inc/interfaces.inc:285 etc/inc/interfaces.inc:369 +#: etc/inc/interfaces.inc:284 etc/inc/interfaces.inc:368 +#: etc/inc/interfaces.inc:282 etc/inc/interfaces.inc:372 +#, php-format +msgid "QinQ compat VLAN: called with wrong options. Problems with config!%s" +msgstr "QinQ compacta VLAN: chamada com opções erradas. Problemas com config!%s" + +#: etc/inc/interfaces.inc:290 etc/inc/interfaces.inc:375 +#, php-format +msgid "interface_qinq_confgure called with if undefined.%s" +msgstr "interface_qinq_confgure chamada com if indefinido.%s" + +#: etc/inc/interfaces.inc:352 etc/inc/interfaces.inc:354 +#: etc/inc/interfaces.inc:353 etc/inc/interfaces.inc:357 +msgid "Configuring QinQ interfaces..." +msgstr "Configurando interfaces QinQ..." + +#: etc/inc/interfaces.inc:396 etc/inc/interfaces.inc:398 +#: etc/inc/interfaces.inc:397 +msgid "Creating other wireless clone interfaces..." +msgstr "Criando outras interfaces clones sem fio..." + +#: etc/inc/interfaces.inc:439 etc/inc/interfaces.inc:438 +#: etc/inc/interfaces.inc:437 etc/inc/interfaces.inc:466 +#, php-format +msgid "No members found on %s" +msgstr "Nenhum membro encontrado em %s" + +#: etc/inc/interfaces.inc:505 etc/inc/interfaces.inc:512 +#: etc/inc/interfaces.inc:511 etc/inc/interfaces.inc:541 +msgid "realif not defined in interfaces bridge - up" +msgstr "realif não definido em interfaces bridge - up" + +#: etc/inc/interfaces.inc:618 etc/inc/interfaces.inc:625 +#: etc/inc/interfaces.inc:624 etc/inc/interfaces.inc:654 +msgid "bridgeif not defined -- could not bring interface up" +msgstr "bridgeif não definido -- não pôde iniciar a interface" + +#: etc/inc/interfaces.inc:652 etc/inc/interfaces.inc:659 +#: etc/inc/interfaces.inc:658 etc/inc/interfaces.inc:685 +msgid "Configuring LAGG interfaces..." +msgstr "Configurando interfaces LAGG..." + +#: etc/inc/interfaces.inc:790 etc/inc/interfaces.inc:801 +#: etc/inc/interfaces.inc:800 etc/inc/interfaces.inc:835 +msgid "Could not bring greif up -- variable not defined." +msgstr "Não pôde iniciar greif -- variável não definida." + +#: etc/inc/interfaces.inc:833 etc/inc/interfaces.inc:851 +#: etc/inc/interfaces.inc:850 etc/inc/interfaces.inc:899 +msgid "could not bring realif up -- variable not defined -- interface_gif_configure()" +msgstr "O realif não pôde ser iniciado -- variável não definida -- interface_gif_configure()" + +#: etc/inc/interfaces.inc:856 etc/inc/interfaces.inc:874 +#: etc/inc/interfaces.inc:873 etc/inc/interfaces.inc:922 +msgid "could not bring gifif up -- variable not defined" +msgstr "O gifif não pôde ser iniciado -- variável não definida" + +#: etc/inc/interfaces.inc:919 etc/inc/interfaces.inc:957 +#: etc/inc/interfaces.inc:972 etc/inc/interfaces.inc:945 +#: etc/inc/interfaces.inc:984 etc/inc/interfaces.inc:999 +#: etc/inc/interfaces.inc:944 etc/inc/interfaces.inc:983 +#: etc/inc/interfaces.inc:998 etc/inc/interfaces.inc:1026 +#: etc/inc/interfaces.inc:1047 etc/inc/interfaces.inc:1062 +#, php-format +msgid "Configuring %s interface..." +msgstr "Configurando interface %s..." + +#: etc/inc/interfaces.inc:921 etc/inc/interfaces.inc:959 +#: etc/inc/interfaces.inc:974 etc/inc/interfaces.inc:948 +#: etc/inc/interfaces.inc:986 etc/inc/interfaces.inc:1001 +#: etc/inc/interfaces.inc:947 etc/inc/interfaces.inc:985 +#: etc/inc/interfaces.inc:1000 etc/inc/interfaces.inc:1002 +#: etc/inc/interfaces.inc:1028 etc/inc/interfaces.inc:1049 +#: etc/inc/interfaces.inc:1064 +#, php-format +msgid "Configuring %s" +msgstr "Configurando %s" + +#: etc/inc/interfaces.inc:1299 etc/inc/interfaces.inc:1339 +#: etc/inc/interfaces.inc:1338 etc/inc/interfaces.inc:1407 +#: etc/inc/interfaces.inc:1412 +#, php-format +msgid "Can't find PPP config for %s in interface_ppps_configure()." +msgstr "O PPP config não pôde ser encontrado para %s em interface_ppps_configure()." + +#: etc/inc/interfaces.inc:1362 etc/inc/interfaces.inc:1402 +#: etc/inc/interfaces.inc:1401 etc/inc/interfaces.inc:1464 +#: etc/inc/interfaces.inc:1469 +#, php-format +msgid "Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in interfaces_ppps_configure." +msgstr "Não pôde obter um endereço de IP remoto PPTP/L2TP de %1$s para %2$s em interfaces_ppps_configure." + +#: etc/inc/interfaces.inc:1369 etc/inc/interfaces.inc:1409 +#: etc/inc/interfaces.inc:1408 etc/inc/interfaces.inc:1471 +#: etc/inc/interfaces.inc:1476 +#, php-format +msgid "Device %s does not exist. PPP link cannot start without the modem device." +msgstr "Dispositivo %s não existe. Link PPP não pode iniciar sem o dispositivo de modem." + +#: etc/inc/interfaces.inc:1374 etc/inc/interfaces.inc:1414 +#: etc/inc/interfaces.inc:1413 etc/inc/interfaces.inc:1476 +#: etc/inc/interfaces.inc:1481 +#, php-format +msgid "Unkown %s configured as ppp interface." +msgstr "%s desconhecido configurado como uma interface ppp." + +#: etc/inc/interfaces.inc:1641 etc/inc/interfaces.inc:1686 +#: etc/inc/interfaces.inc:1685 etc/inc/interfaces.inc:1748 +#: etc/inc/interfaces.inc:1753 +#, php-format +msgid "Error: cannot open mpd_%s.conf in interface_ppps_configure().%s" +msgstr "Erro: mpd_%s.conf não pôde ser aberto em interface_ppps_configure().%s" + +#: etc/inc/interfaces.inc:1702 etc/inc/interfaces.inc:1771 +#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1828 +#: etc/inc/interfaces.inc:1833 +msgid "Configuring CARP settings..." +msgstr "Configurando CARP..." + +#: etc/inc/interfaces.inc:1723 etc/inc/interfaces.inc:1788 +#: etc/inc/interfaces.inc:1787 +msgid "Enable CARP ARP-balancing" +msgstr "Habilitar CARP ARP-balancing" + +#: etc/inc/interfaces.inc:1724 etc/inc/interfaces.inc:1789 +#: etc/inc/interfaces.inc:1788 +msgid "Disallow CARP preemption" +msgstr "Desabilitar preempção do CARP" + +#: etc/inc/interfaces.inc:1726 etc/inc/interfaces.inc:1791 +#: etc/inc/interfaces.inc:1790 +msgid "Enable CARP preemption" +msgstr "Habilitar preempção do CARP" + +#: etc/inc/interfaces.inc:1728 etc/inc/interfaces.inc:1793 +#: etc/inc/interfaces.inc:1792 +msgid "Enable CARP logging" +msgstr "Habilitar log do CARP" + +#: etc/inc/interfaces.inc:1744 etc/inc/interfaces.inc:1809 +#: etc/inc/interfaces.inc:1808 +msgid "Could not create rules.boot file!" +msgstr "Não pôde criar arquivo rules.boot!" + +#: etc/inc/interfaces.inc:1750 etc/inc/interfaces.inc:1815 +#: etc/inc/interfaces.inc:1814 +msgid "Bring up pfsync0 syncpeer" +msgstr "Levantando pfsync0 syncpeer" + +#: etc/inc/interfaces.inc:1752 etc/inc/interfaces.inc:1817 +#: etc/inc/interfaces.inc:1816 +msgid "Bring up pfsync0 syncdev" +msgstr "Levantando pfsync0 syncdev" + +#: etc/inc/interfaces.inc:1754 etc/inc/interfaces.inc:1819 +#: etc/inc/interfaces.inc:1818 +msgid "Bring up pfsync0" +msgstr "Levantando pfsync0" + +#: etc/inc/interfaces.inc:1768 etc/inc/interfaces.inc:1833 +#: etc/inc/interfaces.inc:1837 +msgid "Allow CARP." +msgstr "Permitir CARP." + +#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1835 +#: etc/inc/interfaces.inc:1839 +msgid "Disallow CARP." +msgstr "Desabilitar CARP." + +#: etc/inc/interfaces.inc:1963 etc/inc/interfaces.inc:2038 +#: etc/inc/interfaces.inc:2020 etc/inc/interfaces.inc:2099 +#: etc/inc/interfaces.inc:2016 etc/inc/interfaces.inc:2056 +#: etc/inc/interfaces.inc:2061 etc/inc/interfaces.inc:2076 +#, php-format +msgid "Interface specified for the virtual IP address %s does not exist. Skipping this VIP." +msgstr "Interface especificada para o endereço de IP virtual %s não existe. Pulando esse IP virtual." + +#: etc/inc/interfaces.inc:1972 etc/inc/interfaces.inc:2029 +#: etc/inc/interfaces.inc:2025 etc/inc/interfaces.inc:2065 +#: etc/inc/interfaces.inc:2070 etc/inc/interfaces.inc:2085 +#, php-format +msgid "Sorry but we could not find a matching real interface subnet for the virtual IP address %s." +msgstr "Desculpe, mas não pudemos encontrar uma subrede em uma interface real correspondente ao endereço de IP virtual %s." + +#: etc/inc/interfaces.inc:1981 etc/inc/interfaces.inc:2038 +#: etc/inc/interfaces.inc:2034 etc/inc/interfaces.inc:2074 +#: etc/inc/interfaces.inc:2079 etc/inc/interfaces.inc:2094 +#, php-format +msgid "Sorry but we could not find a matching real interface subnet for the virtual IPv6 address %s." +msgstr "Lamento, mas não foi possível encontrar uma subrede em uma interface real correspondente ao endereço de IPv6 virtual %s." + +#: etc/inc/interfaces.inc:2084 +#, php-format +msgid "Error: cannot open dhclient_%s.conf in interfaces_carpdev_configure() for writing.%s" +msgstr "Erro: dhclient_%s.conf não pôde ser aberto em interfaces_carpdev_configure() para escrita.%s" + +#: etc/inc/interfaces.inc:2117 etc/inc/interfaces.inc:2185 +#: etc/inc/interfaces.inc:2104 etc/inc/interfaces.inc:2144 +#: etc/inc/interfaces.inc:2149 etc/inc/interfaces.inc:2164 +#, php-format +msgid "Interface %s changed to hostap mode" +msgstr "Interface %s modificada para modo hostap" + +#: etc/inc/interfaces.inc:2121 etc/inc/interfaces.inc:2189 +#: etc/inc/interfaces.inc:2108 etc/inc/interfaces.inc:2148 +#: etc/inc/interfaces.inc:2153 etc/inc/interfaces.inc:2168 +#, php-format +msgid "Interface %s changed to adhoc mode" +msgstr "Interface %s modificada para modo adhoc" + +#: etc/inc/interfaces.inc:2125 etc/inc/interfaces.inc:2193 +#: etc/inc/interfaces.inc:2112 etc/inc/interfaces.inc:2152 +#: etc/inc/interfaces.inc:2157 etc/inc/interfaces.inc:2172 +#, php-format +msgid "Interface %s changed to infrastructure mode" +msgstr "Interface %s modificada para modo de infraestrutura" + +#: etc/inc/interfaces.inc:2137 etc/inc/interfaces.inc:2205 +#: etc/inc/interfaces.inc:2124 etc/inc/interfaces.inc:2164 +#: etc/inc/interfaces.inc:2169 etc/inc/interfaces.inc:2184 +#, php-format +msgid "Cloning new wireless interface %s" +msgstr "Clonando nova interface sem fio %s" + +#: etc/inc/interfaces.inc:2142 etc/inc/interfaces.inc:2210 +#: etc/inc/interfaces.inc:2129 etc/inc/interfaces.inc:2169 +#: etc/inc/interfaces.inc:2174 etc/inc/interfaces.inc:2189 +#, php-format +msgid "Failed to clone interface %1$s with error code %2$s, output %3$s" +msgstr "Falha ao clonar interface %1$s com código de erro %2$s, saída %3$s" + +#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2790 +#: etc/inc/interfaces.inc:2709 etc/inc/interfaces.inc:2761 +#: etc/inc/interfaces.inc:2784 etc/inc/interfaces.inc:2799 +msgid "Generating new MAC address." +msgstr "Gerando novo endereço MAC." + +#: etc/inc/interfaces.inc:2721 etc/inc/interfaces.inc:2796 +#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2767 +#: etc/inc/interfaces.inc:2790 etc/inc/interfaces.inc:2805 +#, php-format +msgid "The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been automatically replaced with %2$s" +msgstr "O endereço MAC INVÁLIDO (ff:ff:ff:ff:ff:ff) na interface %1$s foi automaticamente substituído por %2$s" + +#: etc/inc/interfaces.inc:2910 +msgid "Could not bring wanif up in terface_carpdev_dhcp_configure()" +msgstr "wanif não pôde ser iniciado em terface_carpdev_dhcp_configure()" + +#: etc/inc/interfaces.inc:3016 +#, php-format +msgid "Error: cannot open dhclient_%s.conf in interfaces_wan_dhcp_configure() for writing.%s" +msgstr "Erro: dhclient_%s.conf não pôde ser aberto em interfaces_wan_dhcp_configure() para escrita.%s" + +#: etc/inc/interfaces.inc:3029 etc/inc/interfaces.inc:3513 +#: etc/inc/interfaces.inc:3373 etc/inc/interfaces.inc:3466 +#: etc/inc/interfaces.inc:3593 etc/inc/interfaces.inc:3538 +#: etc/inc/interfaces.inc:3560 +#, php-format +msgid "Invalid interface \"%s\" in interface_dhcp_configure()" +msgstr "Interface inválida \"%s\" em interface_dhcp_configure()" + +#: etc/inc/interfaces.inc:3064 etc/inc/interfaces.inc:3548 +#: etc/inc/interfaces.inc:3408 etc/inc/interfaces.inc:3501 +#: etc/inc/interfaces.inc:3628 etc/inc/interfaces.inc:3573 +#: etc/inc/interfaces.inc:3605 +#, php-format +msgid "Could not bring up %s interface in interface_dhcp_configure()" +msgstr "A interface %s não pôde ser iniciada em interface_dhcp_configure()" + +#: etc/inc/notices.inc:76 +#, php-format +msgid "Could not open %s for writing" +msgstr "%s não pôde ser aberto para escrita" + +#: etc/inc/notices.inc:327 etc/inc/notices.inc:336 +#, php-format +msgid "Message sent to %s OK" +msgstr "Mensagem enviada para %s OK" + +#: etc/inc/notices.inc:330 etc/inc/notices.inc:331 etc/inc/notices.inc:339 +#: etc/inc/notices.inc:340 +#, php-format +msgid "Could not send the message to %1$s -- Error: %2$s" +msgstr "A mensagem não pôde ser enviada para %1$s -- Erro: %2$s" + +#: etc/inc/openvpn.inc:83 etc/inc/openvpn.inc:90 etc/inc/openvpn.inc:81 +#: etc/inc/openvpn.inc:88 +msgid "Peer to Peer ( SSL/TLS )" +msgstr "Ponto a Ponto ( SSL/TLS )" + +#: etc/inc/openvpn.inc:84 etc/inc/openvpn.inc:91 etc/inc/openvpn.inc:82 +#: etc/inc/openvpn.inc:89 +msgid "Peer to Peer ( Shared Key )" +msgstr "Ponto a Ponto ( Chave compartilhada )" + +#: etc/inc/openvpn.inc:85 etc/inc/openvpn.inc:83 +msgid "Remote Access ( SSL/TLS )" +msgstr "Acesso Remoto ( SSL/TLS )" + +#: etc/inc/openvpn.inc:86 etc/inc/openvpn.inc:84 +msgid "Remote Access ( User Auth )" +msgstr "Acesso Remoto ( Autenticação de Usuário)" + +#: etc/inc/openvpn.inc:87 etc/inc/openvpn.inc:85 +msgid "Remote Access ( SSL/TLS + User Auth )" +msgstr "Acesso Remoto ( SSL/TLS + Autenticação de Usuário )" + +#: etc/inc/openvpn.inc:179 etc/inc/openvpn.inc:177 etc/inc/openvpn.inc:195 +msgid "None (No Encryption)" +msgstr "Nenhum (Sem criptografia)" + +#: etc/inc/openvpn.inc:203 etc/inc/openvpn.inc:201 etc/inc/openvpn.inc:238 +#, php-format +msgid "The field '%s' must contain a valid IP address or domain name." +msgstr "O campo '%s' deve conter um endereço de IP ou nome de domínio válido." + +#: etc/inc/openvpn.inc:210 etc/inc/openvpn.inc:208 etc/inc/openvpn.inc:245 +#, php-format +msgid "The field '%s' must contain a valid port, ranging from 0 to 65535." +msgstr "O campo '%s' deve conter uma porta válida, variando entre 0 e 65535." + +#: etc/inc/openvpn.inc:219 etc/inc/openvpn.inc:217 +#, php-format +msgid "The field '%s' must contain a valid CIDR range." +msgstr "O campo '%s' deve conter um intervalo CIDR válido." + +#: etc/inc/pfsense-utils.inc:345 etc/inc/pfsense-utils.inc:330 +msgid "MASTER" +msgstr "MASTER" + +#: etc/inc/pfsense-utils.inc:347 etc/inc/pfsense-utils.inc:332 +msgid "BACKUP" +msgstr "BACKUP" + +#: etc/inc/pfsense-utils.inc:349 etc/inc/pfsense-utils.inc:334 +msgid "INIT" +msgstr "INIT" + +#: etc/inc/pfsense-utils.inc:417 etc/inc/pfsense-utils.inc:402 +msgid "After synch increase advertising skew" +msgstr "Após sincronização, aumentar o advertising skew" + +#: etc/inc/pfsense-utils.inc:462 etc/inc/pfsense-utils.inc:447 +msgid "Error creating socket!" +msgstr "Erro criando socket!" + +#: etc/inc/pfsense-utils.inc:463 etc/inc/pfsense-utils.inc:448 +#, php-format +msgid "Error code is '%1$s' - %2$s" +msgstr "Código do erro é '%1$s' - %2$s" + +#: etc/inc/pfsense-utils.inc:468 etc/inc/pfsense-utils.inc:453 +#, php-format +msgid "setsockopt() failed, error: %s" +msgstr "setsockopt() falhou, erro: %s" + +#: etc/inc/pfsense-utils.inc:471 etc/inc/pfsense-utils.inc:456 +#, php-format +msgid "Magic Packet sent (%1$s) to {%2$s} MAC=%3$s" +msgstr "Pacote Mágico enviado (%1$s) para {%2$s} MAC=%3$s" + +#: etc/inc/pfsense-utils.inc:518 etc/inc/pfsense-utils.inc:540 +#: etc/inc/pfsense-utils.inc:533 etc/inc/pfsense-utils.inc:555 +#, php-format +msgid "Restored %s of config file (maybe from CARP partner)" +msgstr "Restaurado %s do arquivo de configuração (talvez do parceiro do CARP)" + +#: etc/inc/pfsense-utils.inc:699 etc/inc/pfsense-utils.inc:714 +#, php-format +msgid "XMLRPC communication error: %s" +msgstr "Erro de comunicação XMLRPC: %s" + +#: etc/inc/pfsense-utils.inc:702 etc/inc/pfsense-utils.inc:717 +#, php-format +msgid "XMLRPC request failed with error %1$s: %2$s" +msgstr "Requisição XMLRPC falhou com o erro %1$s: %2$s" + +#: etc/inc/pfsense-utils.inc:795 etc/inc/pfsense-utils.inc:810 +msgid "reload_interfaces_sync() is starting." +msgstr "reload_interfaces_sync() está iniciando." + +#: etc/inc/pfsense-utils.inc:803 etc/inc/pfsense-utils.inc:818 +msgid "Enabling system routing" +msgstr "Habilitando roteamento do sistema" + +#: etc/inc/pfsense-utils.inc:806 etc/inc/pfsense-utils.inc:821 +msgid "Cleaning up Interfaces" +msgstr "Limpando Interfaces" + +#: etc/inc/pfsense-utils.inc:912 etc/inc/pfsense-utils.inc:927 +#: etc/inc/pfsense-utils.inc:936 +msgid "Enabling auto login was not possible." +msgstr "Não foi possível habilitar o auto login." + +#: etc/inc/pfsense-utils.inc:1100 etc/inc/pfsense-utils.inc:1137 +#: etc/inc/pfsense-utils.inc:1191 etc/inc/pfsense-utils.inc:1196 +msgid "No history data found!" +msgstr "Nenhum dado de histórico encontrado!" + +#: etc/inc/pfsense-utils.inc:1222 etc/inc/pfsense-utils.inc:1260 +#: etc/inc/pfsense-utils.inc:1313 etc/inc/pfsense-utils.inc:1318 +msgid "device not present! Is the modem attached to the system?" +msgstr "o dispositivo não está presente! O modem está acoplado ao sistema?" + +#: etc/inc/pfsense-utils.inc:1262 etc/inc/pfsense-utils.inc:1327 +#: etc/inc/pfsense-utils.inc:1380 etc/inc/pfsense-utils.inc:1385 +msgid "running" +msgstr "executando" + +#: etc/inc/pfsense-utils.inc:1263 usr/local/www/graph.php:201 +#: etc/inc/pfsense-utils.inc:1328 etc/inc/pfsense-utils.inc:1381 +#: etc/inc/pfsense-utils.inc:1386 +msgid "up" +msgstr "para cima" + +#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371 +#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429 +msgid "blocking" +msgstr "bloqueando" + +#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371 +#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429 +msgid "check for ethernet loops" +msgstr "verificar loops ethernet" + +#: etc/inc/pfsense-utils.inc:1303 etc/inc/pfsense-utils.inc:1374 +#: etc/inc/pfsense-utils.inc:1427 etc/inc/pfsense-utils.inc:1432 +msgid "learning" +msgstr "aprendendo" + +#: etc/inc/pfsense-utils.inc:1306 etc/inc/pfsense-utils.inc:1377 +#: etc/inc/pfsense-utils.inc:1430 etc/inc/pfsense-utils.inc:1435 +msgid "forwarding" +msgstr "encaminhando" + +#: etc/inc/pfsense-utils.inc:1417 etc/inc/pfsense-utils.inc:1493 +#: etc/inc/pfsense-utils.inc:1546 etc/inc/pfsense-utils.inc:1551 +#, php-format +msgid "DNSCACHE: Found old IP %1$s and new IP %2$s" +msgstr "DNSCACHE: Encontrado IP antigo %1$s e novo IP %2$s" + +#: etc/inc/pkg-utils.inc:211 etc/inc/pkg-utils.inc:226 +#: etc/inc/pkg-utils.inc:244 +msgid "Resyncing configuration for all packages." +msgstr "Ressincronizando configurações para todos os pacotes." + +#: etc/inc/pkg-utils.inc:231 etc/inc/pkg-utils.inc:246 +#: etc/inc/pkg-utils.inc:264 +msgid "Syncing packages:" +msgstr "Sincronizando pacotes:" + +#: etc/inc/pkg-utils.inc:273 etc/inc/pkg-utils.inc:288 +#: etc/inc/pkg-utils.inc:306 +#, php-format +msgid "The %1$s package is missing required dependencies and must be reinstalled. %2$s" +msgstr "O pacote %1$s possui dependências necessárias faltando e precisa ser reinstalado. %2$s" + +#: etc/inc/pkg-utils.inc:297 etc/inc/pkg-utils.inc:437 +#: etc/inc/pkg-utils.inc:312 etc/inc/pkg-utils.inc:462 +#: etc/inc/pkg-utils.inc:464 etc/inc/pkg-utils.inc:330 +#: etc/inc/pkg-utils.inc:481 +#, php-format +msgid "The %s package is missing required dependencies and must be reinstalled." +msgstr "As dependências requeridas pelo pacote %s estão faltando e o pacote deve ser reinstalado." + +#: etc/inc/pkg-utils.inc:404 etc/inc/pkg-utils.inc:429 +#: etc/inc/pkg-utils.inc:431 etc/inc/pkg-utils.inc:448 +#, php-format +msgid "The %s package is missing its configuration file and must be reinstalled." +msgstr "O arquivo de configuração do pacote %s não foi encontrado e o pacote deve ser reinstalado." + +#: etc/inc/pkg-utils.inc:563 usr/local/www/pkg_mgr_install.php:101 +#: etc/inc/pkg-utils.inc:589 etc/inc/pkg-utils.inc:590 +#: usr/local/www/pkg_mgr_install.php:99 etc/inc/pkg-utils.inc:625 +#: usr/local/www/pkg_mgr_install.php:97 +msgid "Beginning package installation." +msgstr "Iniciando instalação de pacote." + +#: etc/inc/pkg-utils.inc:564 etc/inc/pkg-utils.inc:565 +#: etc/inc/pkg-utils.inc:590 etc/inc/pkg-utils.inc:591 +#: etc/inc/pkg-utils.inc:592 etc/inc/pkg-utils.inc:626 +#: etc/inc/pkg-utils.inc:627 +#, php-format +msgid "Beginning package installation for %s ." +msgstr "Iniciando instalação do pacote para %s ." + +#: etc/inc/pkg-utils.inc:569 etc/inc/pkg-utils.inc:595 +#: etc/inc/pkg-utils.inc:596 etc/inc/pkg-utils.inc:631 +msgid "Downloading package configuration file... " +msgstr "Download de arquivo de configuração de pacote..." + +#: etc/inc/pkg-utils.inc:571 etc/inc/pkg-utils.inc:597 +#: etc/inc/pkg-utils.inc:598 etc/inc/pkg-utils.inc:633 +msgid "Downloading package configuration file..." +msgstr "Download do arquivo de configuração de pacote..." + +#: etc/inc/pkg-utils.inc:575 etc/inc/pkg-utils.inc:601 +#: etc/inc/pkg-utils.inc:602 etc/inc/pkg-utils.inc:637 +msgid "ERROR! Unable to fetch package configuration file. Aborting installation." +msgstr "ERRO! Não foi possível buscar o arquivo de configuração de pacote. Abortando instalação." + +#: etc/inc/pkg-utils.inc:577 etc/inc/pkg-utils.inc:603 +#: etc/inc/pkg-utils.inc:604 etc/inc/pkg-utils.inc:639 +msgid "ERROR! Unable to fetch package configuration file. Aborting package installation." +msgstr "ERRO! Não foi possível buscar o arquivo de configuração de pacote. Abortando instalação de pacote." + +#: etc/inc/pkg-utils.inc:579 etc/inc/pkg-utils.inc:605 +#: etc/inc/pkg-utils.inc:606 etc/inc/pkg-utils.inc:641 +msgid "" +"failed!\n" +"\n" +"Installation aborted.\n" +msgstr "" +"falhou!\n" +"\n" +"Instalação abortada.\n" + +#: etc/inc/pkg-utils.inc:591 etc/inc/pkg-utils.inc:617 +#: etc/inc/pkg-utils.inc:618 etc/inc/pkg-utils.inc:653 +msgid "Saving updated package information..." +msgstr "Salvando informações atualizadas do pacote..." + +#: etc/inc/pkg-utils.inc:595 etc/inc/pkg-utils.inc:621 +#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:657 +#, php-format +msgid "Installed %s package." +msgstr "Pacote %s instalado." + +#: etc/inc/pkg-utils.inc:599 etc/inc/pkg-utils.inc:625 +#: etc/inc/pkg-utils.inc:626 etc/inc/pkg-utils.inc:661 +#, php-format +msgid "Overwrote previous installation of %s." +msgstr "Sobrescreveu instalação anterior de %s." + +#: etc/inc/pkg-utils.inc:600 etc/inc/pkg-utils.inc:626 +#: etc/inc/pkg-utils.inc:627 etc/inc/pkg-utils.inc:662 +msgid "overwrite!" +msgstr "sobrescreva!" + +#: etc/inc/pkg-utils.inc:612 etc/inc/pkg-utils.inc:638 +#: etc/inc/pkg-utils.inc:639 etc/inc/pkg-utils.inc:674 +msgid "Failed to install package." +msgstr "Falha ao instalar pacote." + +#: etc/inc/pkg-utils.inc:616 etc/inc/pkg-utils.inc:642 +#: etc/inc/pkg-utils.inc:643 etc/inc/pkg-utils.inc:678 +msgid "Writing configuration... " +msgstr "Escrevendo a configuração..." + +#: etc/inc/pkg-utils.inc:652 etc/inc/pkg-utils.inc:678 +#: etc/inc/pkg-utils.inc:679 etc/inc/pkg-utils.inc:714 +#, php-format +msgid "The %s package is not installed.%sInstallation aborted." +msgstr "O pacote %s não está instalado.%sInstalação abortada." + +#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693 +#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729 +msgid "Installing" +msgstr "Instalando" + +#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693 +#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729 +msgid "and its dependencies." +msgstr "e suas dependências." + +#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694 +#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730 +msgid "Downloading" +msgstr "Fazendo download" + +#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694 +#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730 +msgid "and its dependencies... " +msgstr "e suas dependências..." + +#: etc/inc/pkg-utils.inc:680 etc/inc/pkg-utils.inc:706 +#: etc/inc/pkg-utils.inc:707 etc/inc/pkg-utils.inc:742 +msgid "Package WAS NOT installed properly." +msgstr "O pacote NÃO FOI instalado apropriadamente." + +#: etc/inc/pkg-utils.inc:693 etc/inc/pkg-utils.inc:719 +#: etc/inc/pkg-utils.inc:720 etc/inc/pkg-utils.inc:755 +msgid "Loading package configuration... " +msgstr "Carregando configuração de pacote... " + +#: etc/inc/pkg-utils.inc:698 etc/inc/pkg-utils.inc:724 +#: etc/inc/pkg-utils.inc:725 etc/inc/pkg-utils.inc:760 +msgid "Configuring package components...\n" +msgstr "Configurando componentes do pacote...\n" + +#: etc/inc/pkg-utils.inc:704 etc/inc/pkg-utils.inc:1049 +#: etc/inc/pkg-utils.inc:730 etc/inc/pkg-utils.inc:1086 +#: etc/inc/pkg-utils.inc:731 etc/inc/pkg-utils.inc:1087 +#: etc/inc/pkg-utils.inc:766 etc/inc/pkg-utils.inc:1122 +msgid "System files... " +msgstr "Sistema de arquivos..." + +#: etc/inc/pkg-utils.inc:716 etc/inc/pkg-utils.inc:742 +#: etc/inc/pkg-utils.inc:743 etc/inc/pkg-utils.inc:778 +msgid "Additional files... " +msgstr "Arquivos adicionais..." + +#: etc/inc/pkg-utils.inc:742 etc/inc/pkg-utils.inc:768 +#: etc/inc/pkg-utils.inc:769 etc/inc/pkg-utils.inc:804 +msgid "Extracting tarball to -C for " +msgstr "Extraindo tarball para -C para" + +#: etc/inc/pkg-utils.inc:748 etc/inc/pkg-utils.inc:774 +#: etc/inc/pkg-utils.inc:775 etc/inc/pkg-utils.inc:810 +#, php-format +msgid "Changing file mode to %1$s for %2$s%3$s%4$s" +msgstr "Alterando modo de arquivo de %1$s para %2$s%3$s%4$s" + +#: etc/inc/pkg-utils.inc:764 etc/inc/pkg-utils.inc:1025 +#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:1062 +#: etc/inc/pkg-utils.inc:791 etc/inc/pkg-utils.inc:1063 +#: etc/inc/pkg-utils.inc:826 etc/inc/pkg-utils.inc:1098 +msgid "Loading package instructions..." +msgstr "Carregando instruções de pacote..." + +#: etc/inc/pkg-utils.inc:779 etc/inc/pkg-utils.inc:805 +#: etc/inc/pkg-utils.inc:806 etc/inc/pkg-utils.inc:841 +msgid "Custom commands..." +msgstr "Comandos personalizados..." + +#: etc/inc/pkg-utils.inc:783 etc/inc/pkg-utils.inc:809 +#: etc/inc/pkg-utils.inc:810 etc/inc/pkg-utils.inc:845 +msgid "Executing custom_php_global_functions()..." +msgstr "Executando custom_php_global_functions()..." + +#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:816 +#: etc/inc/pkg-utils.inc:817 etc/inc/pkg-utils.inc:852 +msgid "Executing custom_php_install_command()..." +msgstr "Executando custom_php_install_command()..." + +#: etc/inc/pkg-utils.inc:809 etc/inc/pkg-utils.inc:845 +#: etc/inc/pkg-utils.inc:846 etc/inc/pkg-utils.inc:881 +msgid "Executing custom_php_resync_config_command()..." +msgstr "Executando custom_php_resync_config_command()..." + +#: etc/inc/pkg-utils.inc:818 etc/inc/pkg-utils.inc:972 +#: etc/inc/pkg-utils.inc:854 etc/inc/pkg-utils.inc:1009 +#: etc/inc/pkg-utils.inc:855 etc/inc/pkg-utils.inc:1010 +#: etc/inc/pkg-utils.inc:890 etc/inc/pkg-utils.inc:1045 +msgid "Menu items... " +msgstr "Items de menu..." + +#: etc/inc/pkg-utils.inc:834 etc/inc/pkg-utils.inc:870 +#: etc/inc/pkg-utils.inc:871 etc/inc/pkg-utils.inc:906 +msgid "Integrated Tab items... " +msgstr "Itens de abas integrados..." + +#: etc/inc/pkg-utils.inc:850 etc/inc/pkg-utils.inc:989 +#: etc/inc/pkg-utils.inc:886 etc/inc/pkg-utils.inc:1026 +#: etc/inc/pkg-utils.inc:887 etc/inc/pkg-utils.inc:1027 +#: etc/inc/pkg-utils.inc:922 etc/inc/pkg-utils.inc:1062 +msgid "Services... " +msgstr "Serviços... " + +#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901 +#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937 +msgid "Loading package configuration... failed!" +msgstr "Carregando configuração de pacote... falhou!" + +#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901 +#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937 +msgid "Installation aborted." +msgstr "Instalação abortada." + +#: etc/inc/pkg-utils.inc:867 etc/inc/pkg-utils.inc:903 +#: etc/inc/pkg-utils.inc:904 etc/inc/pkg-utils.inc:939 +msgid "Unable to load package configuration. Installation aborted." +msgstr "Não foi possível carregar a configuração do pacote. Instalação abortada." + +#: etc/inc/pkg-utils.inc:911 etc/inc/pkg-utils.inc:948 +#: etc/inc/pkg-utils.inc:949 etc/inc/pkg-utils.inc:984 +#, php-format +msgid "Starting package deletion for %s..." +msgstr "Iniciando remoção do pacote para %s..." + +#: etc/inc/pkg-utils.inc:931 etc/inc/pkg-utils.inc:968 +#: etc/inc/pkg-utils.inc:969 etc/inc/pkg-utils.inc:1004 +#, php-format +msgid "The %s package is not installed.%sDeletion aborted." +msgstr "O pacote %s não está instalado.%sRemoção abortada." + +#: etc/inc/pkg-utils.inc:942 etc/inc/pkg-utils.inc:979 +#: etc/inc/pkg-utils.inc:980 etc/inc/pkg-utils.inc:1015 +#, php-format +msgid "Removing %s package... " +msgstr "Removendo pacote %s..." + +#: etc/inc/pkg-utils.inc:943 etc/inc/pkg-utils.inc:980 +#: etc/inc/pkg-utils.inc:981 etc/inc/pkg-utils.inc:1016 +#, php-format +msgid "Removing %s components..." +msgstr "Removendo componentes %s..." + +#: etc/inc/pkg-utils.inc:955 etc/inc/pkg-utils.inc:992 +#: etc/inc/pkg-utils.inc:993 etc/inc/pkg-utils.inc:1028 +msgid "Tabs items... " +msgstr "Itens de abas..." + +#: etc/inc/pkg-utils.inc:1059 etc/inc/pkg-utils.inc:1096 +#: etc/inc/pkg-utils.inc:1097 etc/inc/pkg-utils.inc:1132 +msgid "Deinstall commands... " +msgstr "Desinstalar comandos..." + +#: etc/inc/pkg-utils.inc:1069 etc/inc/pkg-utils.inc:1106 +#: etc/inc/pkg-utils.inc:1107 etc/inc/pkg-utils.inc:1142 +msgid "Removing package instructions..." +msgstr "Removendo instruções de pacote..." + +#: etc/inc/pkg-utils.inc:1071 etc/inc/pkg-utils.inc:1108 +#: etc/inc/pkg-utils.inc:1109 etc/inc/pkg-utils.inc:1144 +#, php-format +msgid "Remove '%s'" +msgstr "Remover '%s'" + +#: etc/inc/pkg-utils.inc:1078 etc/inc/pkg-utils.inc:1115 +#: etc/inc/pkg-utils.inc:1116 etc/inc/pkg-utils.inc:1151 +msgid "Auxiliary files... " +msgstr "Arquivos auxiliares..." + +#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1129 +#: etc/inc/pkg-utils.inc:1130 etc/inc/pkg-utils.inc:1165 +msgid "Package XML... " +msgstr "Empacotar XML..." + +#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1148 +#: etc/inc/pkg-utils.inc:1149 etc/inc/pkg-utils.inc:1184 +msgid "Configuration... " +msgstr "Configuração..." + +#: etc/inc/pkg-utils.inc:1205 etc/inc/pkg-utils.inc:1242 +#: etc/inc/pkg-utils.inc:1243 etc/inc/pkg-utils.inc:1274 +#: etc/inc/pkg-utils.inc:1275 +#, php-format +msgid " >>> Unable to communicate with %1$s. Please verify DNS and interface configuration, and that %2$s has functional Internet connectivity." +msgstr ">>> Incapaz de comunicar-se com %1$s. Por favor, verifique o DNS a configuração de interface, e se %2$s tem conectividade com a Internet funcional." + +#: etc/inc/radius.inc:404 etc/inc/radius.inc:406 +msgid "Error sending request:" +msgstr "Erro enviando a requisição:" + +#: etc/inc/radius.inc:410 etc/inc/radius.inc:412 +msgid "RADIUS_ACCESS_ACCEPT is unexpected for accounting" +msgstr "RADIUS_ACCESS_ACCEPT é esperado para accounting" + +#: etc/inc/radius.inc:419 etc/inc/radius.inc:421 +msgid "RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication" +msgstr "RADIUS_ACCOUNTING_RESPONSE é esperado para a autenticação" + +#: etc/inc/radius.inc:424 etc/inc/radius.inc:426 +#, php-format +msgid "Unexpected return value: %s" +msgstr "Valor de retorno inesperado: %s" + +#: etc/inc/services.inc:262 etc/inc/services.inc:333 etc/inc/services.inc:360 +#: etc/inc/services.inc:369 etc/inc/services.inc:371 etc/inc/services.inc:373 +#: etc/inc/services.inc:366 +#, php-format +msgid "DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s" +msgstr "Restauração de concessões DHCP falhou ao sair com %1$s, o erro é: %2$s%3$s" + +#: etc/inc/services.inc:275 etc/inc/services.inc:346 etc/inc/services.inc:373 +#: etc/inc/services.inc:382 etc/inc/services.inc:387 etc/inc/services.inc:389 +msgid "Starting DHCP service..." +msgstr "Iniciando serviço DHCP..." + +#: etc/inc/services.inc:282 etc/inc/services.inc:353 etc/inc/services.inc:380 +#: etc/inc/services.inc:820 etc/inc/services.inc:825 etc/inc/services.inc:877 +#: etc/inc/services.inc:874 +#, php-format +msgid "Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s" +msgstr "Erro: não foi possível abrir dhcp.conf em services_dhcpdv4_configure().%s" + +#: etc/inc/services.inc:353 etc/inc/services.inc:434 etc/inc/services.inc:461 +#: etc/inc/services.inc:463 etc/inc/services.inc:468 etc/inc/services.inc:469 +msgid "Warning! DHCP Failover setup and no CARP virtual IP's defined!" +msgstr "Atenção! Instalação de DHCP falhou e nenhum IP virtual do CARP definido!" + +#: etc/inc/services.inc:949 etc/inc/services.inc:1078 +#: etc/inc/services.inc:1210 etc/inc/services.inc:1203 +#: etc/inc/services.inc:1209 etc/inc/services.inc:1261 +#: etc/inc/services.inc:1259 +msgid "Could not write Igmpproxy configuration file!" +msgstr "O arquivo de configuração do Igmpproxy não pôde ser escrito!" + +#: etc/inc/services.inc:956 +msgid "Started Igmpproxy service sucsesfully." +msgstr "Serviço Igmpproxy iniciado com sucesso." + +#: etc/inc/services.inc:980 etc/inc/services.inc:1109 +#: etc/inc/services.inc:1241 etc/inc/services.inc:1235 +#: etc/inc/services.inc:1242 etc/inc/services.inc:1294 +#: etc/inc/services.inc:1292 +msgid "Starting DHCP relay service..." +msgstr "Iniciando serviço de retransmição DHCP..." + +#: etc/inc/services.inc:1096 etc/inc/services.inc:1223 +#: etc/inc/services.inc:1355 etc/inc/services.inc:1350 +#: etc/inc/services.inc:1365 etc/inc/services.inc:1417 +#: etc/inc/services.inc:1415 +msgid "Starting DHCPv6 relay service..." +msgstr "Iniciando serviço de retransmissão DHCPv6..." + +#: etc/inc/services.inc:1222 etc/inc/services.inc:1358 +#: etc/inc/services.inc:1493 etc/inc/services.inc:1489 +#: etc/inc/services.inc:1505 etc/inc/services.inc:1557 +#: etc/inc/services.inc:1555 +msgid "Starting DynDNS clients..." +msgstr "Iniciando clientes DynDNS..." + +#: etc/inc/services.inc:1255 etc/inc/services.inc:1392 +#: etc/inc/services.inc:1531 etc/inc/services.inc:1545 +#: etc/inc/services.inc:1562 etc/inc/services.inc:1622 +#: etc/inc/services.inc:1620 +msgid "Starting DNS forwarder..." +msgstr "Iniciando encaminhadores DNS..." + +#: etc/inc/services.inc:1324 etc/inc/services.inc:1507 +#: etc/inc/services.inc:1646 etc/inc/services.inc:1623 +#: etc/inc/services.inc:1655 etc/inc/services.inc:1686 +#: etc/inc/services.inc:1750 etc/inc/services.inc:1748 +msgid "Starting SNMP daemon... " +msgstr "Iniciando daemon SNMP... " + +#: etc/inc/services.inc:1329 etc/inc/services.inc:1512 +#: etc/inc/services.inc:1651 etc/inc/services.inc:1628 +#: etc/inc/services.inc:1660 etc/inc/services.inc:1691 +#: etc/inc/services.inc:1755 etc/inc/services.inc:1753 +#, php-format +msgid "Error: cannot open snmpd.conf in services_snmpd_configure().%s" +msgstr "Erro: snmpd.conf não pôde ser aberto em services_snmpd_configure().%s" + +#: etc/inc/services.inc:1875 etc/inc/services.inc:2067 +#: etc/inc/services.inc:1919 etc/inc/services.inc:1908 +#: etc/inc/services.inc:1948 etc/inc/services.inc:1979 +#: etc/inc/services.inc:2043 etc/inc/services.inc:2093 +msgid "pfSense specific crontab entries" +msgstr "Entradas do crontab específicas do pfSense" + +#: etc/inc/services.inc:1876 etc/inc/services.inc:2068 +#: etc/inc/services.inc:1920 etc/inc/services.inc:1909 +#: etc/inc/services.inc:1949 etc/inc/services.inc:1980 +#: etc/inc/services.inc:2044 etc/inc/services.inc:2094 +msgid "Created:" +msgstr "Criado:" + +#: etc/inc/services.inc:1890 etc/inc/services.inc:2082 +#: etc/inc/services.inc:1934 etc/inc/services.inc:1923 +#: etc/inc/services.inc:1963 etc/inc/services.inc:1994 +#: etc/inc/services.inc:2058 etc/inc/services.inc:2108 +msgid "If possible do not add items to this file manually." +msgstr "Se possível não adicione itens a esse arquivo manualmente." + +#: etc/inc/services.inc:1891 etc/inc/services.inc:2083 +#: etc/inc/services.inc:1935 etc/inc/services.inc:1924 +#: etc/inc/services.inc:1964 etc/inc/services.inc:1995 +#: etc/inc/services.inc:2059 etc/inc/services.inc:2109 +msgid "If you do so, this file must be terminated with a blank line (e.g. new line)" +msgstr "Se você o fizer, o arquivo deve ser finalizado com uma linha em branco (e.g nova linha)" + +#: etc/inc/services.inc:1934 etc/inc/services.inc:2126 +#: etc/inc/services.inc:1978 etc/inc/services.inc:1968 +#: etc/inc/services.inc:2008 etc/inc/services.inc:2039 +#: etc/inc/services.inc:2103 etc/inc/services.inc:2153 +msgid "Starting UPnP service... " +msgstr "Iniciando serviço UPnP..." + +#: etc/inc/services.inc:1969 etc/inc/services.inc:2161 +#: etc/inc/services.inc:2013 etc/inc/services.inc:2005 +#: etc/inc/services.inc:2045 etc/inc/services.inc:2076 +#: etc/inc/services.inc:2140 etc/inc/services.inc:2190 +#, php-format +msgid "Installed cron job for %s" +msgstr "Instalado serviço cron para %s" + +#: etc/inc/services.inc:1972 etc/inc/services.inc:2164 +#: etc/inc/services.inc:2016 etc/inc/services.inc:2008 +#: etc/inc/services.inc:2048 etc/inc/services.inc:2079 +#: etc/inc/services.inc:2143 etc/inc/services.inc:2193 +#, php-format +msgid "Updated cron job for %s" +msgstr "Atualizado serviço cron para %s" + +#: etc/inc/services.inc:1977 etc/inc/services.inc:2169 +#: etc/inc/services.inc:2021 +#, php-format +msgid "Remvoed cron job for %s" +msgstr "Removido serviço cron para %s" + +#: etc/inc/shaper.inc:189 etc/inc/shaper.inc:190 +#, php-format +msgid "The field '%s' contains invalid characters." +msgstr "O campo '%s' contém caracteres inválidos." + +#: etc/inc/shaper.inc:195 etc/inc/shaper.inc:196 +#, php-format +msgid "The field '%s' is required." +msgstr "O campo '%s' é requerido." + +#: etc/inc/shaper.inc:317 etc/inc/shaper.inc:651 etc/inc/shaper.inc:1544 +#: etc/inc/shaper.inc:1850 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2327 +#: etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2593 etc/inc/shaper.inc:2787 +#: etc/inc/shaper.inc:3023 usr/local/www/interfaces_ppps_edit.php:750 +#: etc/inc/shaper.inc:318 etc/inc/shaper.inc:652 etc/inc/shaper.inc:1546 +#: etc/inc/shaper.inc:1852 etc/inc/shaper.inc:2194 etc/inc/shaper.inc:2329 +#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2595 etc/inc/shaper.inc:2789 +#: etc/inc/shaper.inc:3031 etc/inc/shaper.inc:3161 +#: usr/local/www/interfaces_ppps_edit.php:751 +#: usr/local/www/interfaces_ppps_edit.php:757 +#: usr/local/www/status_queues.php:151 etc/inc/shaper.inc:1547 +#: etc/inc/shaper.inc:1853 etc/inc/shaper.inc:2195 etc/inc/shaper.inc:2330 +#: etc/inc/shaper.inc:2470 etc/inc/shaper.inc:2596 etc/inc/shaper.inc:2790 +#: etc/inc/shaper.inc:3162 etc/inc/shaper.inc:654 etc/inc/shaper.inc:1550 +#: etc/inc/shaper.inc:1858 etc/inc/shaper.inc:2200 etc/inc/shaper.inc:2335 +#: etc/inc/shaper.inc:2475 etc/inc/shaper.inc:2601 etc/inc/shaper.inc:2795 +#: etc/inc/shaper.inc:3169 usr/local/www/interfaces_ppps_edit.php:754 +#: etc/inc/shaper.inc:321 etc/inc/shaper.inc:678 etc/inc/shaper.inc:1601 +#: etc/inc/shaper.inc:1916 etc/inc/shaper.inc:2258 etc/inc/shaper.inc:2398 +#: etc/inc/shaper.inc:2538 etc/inc/shaper.inc:2669 etc/inc/shaper.inc:2863 +#: etc/inc/shaper.inc:3237 etc/inc/shaper.inc:2882 etc/inc/shaper.inc:3293 +#: usr/local/www/status_queues.php:173 etc/inc/shaper.inc:3315 +msgid "Bandwidth" +msgstr "Largura de banda" + +#: etc/inc/shaper.inc:319 etc/inc/shaper.inc:1546 etc/inc/shaper.inc:2194 +#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2789 etc/inc/shaper.inc:320 +#: etc/inc/shaper.inc:1548 etc/inc/shaper.inc:2196 etc/inc/shaper.inc:2471 +#: etc/inc/shaper.inc:2791 etc/inc/shaper.inc:1549 etc/inc/shaper.inc:2197 +#: etc/inc/shaper.inc:2472 etc/inc/shaper.inc:2792 etc/inc/shaper.inc:1552 +#: etc/inc/shaper.inc:2202 etc/inc/shaper.inc:2477 etc/inc/shaper.inc:2797 +#: etc/inc/shaper.inc:323 etc/inc/shaper.inc:1603 etc/inc/shaper.inc:2260 +#: etc/inc/shaper.inc:2540 etc/inc/shaper.inc:2865 etc/inc/shaper.inc:2884 +#: etc/inc/shaper.inc:2886 +msgid "Bandwidthtype" +msgstr "Tipo de largura de banda" + +#: etc/inc/shaper.inc:324 etc/inc/shaper.inc:1552 etc/inc/shaper.inc:2199 +#: etc/inc/shaper.inc:2474 etc/inc/shaper.inc:2900 etc/inc/shaper.inc:325 +#: etc/inc/shaper.inc:1554 etc/inc/shaper.inc:2201 etc/inc/shaper.inc:2476 +#: etc/inc/shaper.inc:2904 etc/inc/shaper.inc:1555 etc/inc/shaper.inc:2202 +#: etc/inc/shaper.inc:2477 etc/inc/shaper.inc:1558 etc/inc/shaper.inc:2207 +#: etc/inc/shaper.inc:2482 etc/inc/shaper.inc:328 etc/inc/shaper.inc:1609 +#: etc/inc/shaper.inc:2265 etc/inc/shaper.inc:2545 +msgid "Bandwidth must be an integer." +msgstr "Largura de banda deve ser um inteiro." + +#: etc/inc/shaper.inc:326 etc/inc/shaper.inc:1555 etc/inc/shaper.inc:2203 +#: etc/inc/shaper.inc:2478 etc/inc/shaper.inc:327 etc/inc/shaper.inc:1557 +#: etc/inc/shaper.inc:2205 etc/inc/shaper.inc:2480 etc/inc/shaper.inc:1558 +#: etc/inc/shaper.inc:2206 etc/inc/shaper.inc:2481 etc/inc/shaper.inc:1561 +#: etc/inc/shaper.inc:2211 etc/inc/shaper.inc:2486 etc/inc/shaper.inc:330 +#: etc/inc/shaper.inc:1612 etc/inc/shaper.inc:2269 etc/inc/shaper.inc:2549 +msgid "Bandwidth cannot be negative." +msgstr "A largura de banda não pode ser negativa." + +#: etc/inc/shaper.inc:328 etc/inc/shaper.inc:329 etc/inc/shaper.inc:332 +msgid "Qlimit must be an integer." +msgstr "Qlimit deve ser um inteiro." + +#: etc/inc/shaper.inc:330 etc/inc/shaper.inc:331 etc/inc/shaper.inc:334 +msgid "Qlimit must be an positive." +msgstr "Qlimit deve ser positivo." + +#: etc/inc/shaper.inc:332 etc/inc/shaper.inc:333 etc/inc/shaper.inc:336 +msgid "Tbrsize must be an integer." +msgstr "Tbrsize deve ser um inteiro." + +#: etc/inc/shaper.inc:334 etc/inc/shaper.inc:335 etc/inc/shaper.inc:338 +msgid "Tbrsize must be an positive." +msgstr "Tbrsize deve ser positivo." + +#: etc/inc/shaper.inc:614 etc/inc/shaper.inc:1120 etc/inc/shaper.inc:3269 +#: etc/inc/shaper.inc:3488 etc/inc/shaper.inc:615 etc/inc/shaper.inc:1121 +#: etc/inc/shaper.inc:3277 etc/inc/shaper.inc:3500 etc/inc/shaper.inc:3432 +#: etc/inc/shaper.inc:3655 etc/inc/shaper.inc:1122 etc/inc/shaper.inc:3433 +#: etc/inc/shaper.inc:3656 etc/inc/shaper.inc:617 etc/inc/shaper.inc:1126 +#: etc/inc/shaper.inc:3440 etc/inc/shaper.inc:3663 etc/inc/shaper.inc:637 +#: etc/inc/shaper.inc:1169 etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3731 +#: etc/inc/shaper.inc:3589 etc/inc/shaper.inc:3836 etc/inc/shaper.inc:3615 +#: etc/inc/shaper.inc:3862 +msgid "Enable/Disable" +msgstr "Habilitar/Desabilitar" + +#: etc/inc/shaper.inc:619 etc/inc/shaper.inc:620 etc/inc/shaper.inc:622 +#: etc/inc/shaper.inc:642 +msgid "Enable/disable discipline and its children" +msgstr "Habilitar/Desabilitar disciplina e suas filhas" + +#: etc/inc/shaper.inc:621 etc/inc/shaper.inc:965 etc/inc/shaper.inc:2791 +#: etc/inc/shaper.inc:3016 etc/inc/shaper.inc:3276 etc/inc/shaper.inc:3496 +#: etc/inc/shaper.inc:3568 usr/local/www/load_balancer_virtual_server.php:128 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/load_balancer_relay_action.php:140 +#: usr/local/www/interfaces_groups.php:94 +#: usr/local/www/firewall_aliases.php:165 +#: usr/local/www/firewall_aliases_edit.php:134 +#: usr/local/www/firewall_aliases_edit.php:576 +#: usr/local/www/firewall_schedule.php:96 +#: usr/local/www/load_balancer_pool.php:131 +#: usr/local/www/load_balancer_monitor.php:122 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:235 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:181 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:183 +#: usr/local/www/services_captiveportal_filemanager.php:162 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:411 +#: usr/local/www/load_balancer_relay_protocol.php:134 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:195 +#: usr/local/www/services_igmpproxy.php:95 +#: usr/local/www/status_gateways.php:72 usr/local/www/status_lb_pool.php:130 +#: usr/local/www/status_lb_vs.php:77 usr/local/www/status_openvpn.php:211 +#: usr/local/www/status_openvpn.php:262 usr/local/www/system_camanager.php:565 +#: usr/local/www/system_certmanager.php:854 +#: usr/local/www/system_crlmanager.php:487 +#: usr/local/www/system_gateways.php:152 +#: usr/local/www/system_gateways_edit.php:98 +#: usr/local/www/system_gateways_edit.php:370 +#: usr/local/www/system_groupmanager.php:346 +#: usr/local/www/system_usermanager.php:577 +#: usr/local/www/system_usermanager.php:630 etc/inc/shaper.inc:622 +#: etc/inc/shaper.inc:966 etc/inc/shaper.inc:2793 etc/inc/shaper.inc:3020 +#: etc/inc/shaper.inc:3284 etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3580 +#: usr/local/www/pkg_mgr.php:129 usr/local/www/system_certmanager.php:1020 +#: usr/local/www/load_balancer_relay_action_edit.php:410 +#: usr/local/www/system_usermanager.php:575 +#: usr/local/www/system_usermanager.php:628 +#: usr/local/www/firewall_aliases_edit.php:581 +#: usr/local/www/pkg_mgr_installed.php:111 +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/system_gateways_edit.php:99 +#: usr/local/www/system_gateways_edit.php:391 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/load_balancer_virtual_server_edit.php:157 +#: usr/local/www/firewall_aliases.php:168 +#: usr/local/www/system_camanager.php:566 +#: usr/local/www/load_balancer_pool_edit.php:189 +#: usr/local/www/load_balancer_pool.php:132 etc/inc/shaper.inc:3150 +#: etc/inc/shaper.inc:3439 etc/inc/shaper.inc:3663 etc/inc/shaper.inc:3735 +#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265 +#: usr/local/www/load_balancer_relay_protocol_edit.php:193 +#: usr/local/www/interfaces_groups.php:95 +#: usr/local/www/load_balancer_relay_action_edit.php:408 +#: usr/local/www/load_balancer_monitor_edit.php:233 +#: usr/local/www/system_crlmanager.php:520 +#: usr/local/www/firewall_aliases_edit.php:584 +#: usr/local/www/load_balancer_virtual_server.php:127 +#: usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:497 +#: usr/local/www/status_gateways.php:73 +#: usr/local/www/services_captiveportal_filemanager.php:159 +#: usr/local/www/load_balancer_monitor.php:121 +#: usr/local/www/load_balancer_relay_protocol.php:132 +#: usr/local/www/load_balancer_virtual_server_edit.php:155 +#: usr/local/www/firewall_aliases.php:188 +#: usr/local/www/load_balancer_relay_action.php:138 +#: usr/local/www/load_balancer_pool_edit.php:187 +#: usr/local/www/load_balancer_pool.php:130 +#: usr/local/www/system_gateways_edit.php:499 +#: usr/local/www/system_camanager.php:590 usr/local/www/status_openvpn.php:313 +#: usr/local/www/system_certmanager.php:1062 etc/inc/shaper.inc:2794 +#: etc/inc/shaper.inc:3151 etc/inc/shaper.inc:3440 etc/inc/shaper.inc:3664 +#: etc/inc/shaper.inc:3736 usr/local/www/system_gateways_edit.php:501 +#: usr/local/www/status_openvpn.php:272 usr/local/www/status_openvpn.php:333 +#: usr/local/www/pkg_mgr_installed.php:113 +#: usr/local/www/system_certmanager.php:1066 usr/local/www/pkg_mgr.php:132 +#: usr/local/www/firewall_aliases_edit.php:128 +#: usr/local/www/firewall_aliases_edit.php:615 etc/inc/shaper.inc:624 +#: etc/inc/shaper.inc:970 etc/inc/shaper.inc:2799 etc/inc/shaper.inc:3158 +#: etc/inc/shaper.inc:3447 etc/inc/shaper.inc:3671 etc/inc/shaper.inc:3743 +#: usr/local/www/system_gateways_edit.php:531 etc/inc/shaper.inc:644 +#: etc/inc/shaper.inc:1002 etc/inc/shaper.inc:2867 etc/inc/shaper.inc:3226 +#: etc/inc/shaper.inc:3515 etc/inc/shaper.inc:3739 etc/inc/shaper.inc:3811 +#: etc/inc/shaper.inc:2886 etc/inc/shaper.inc:3282 etc/inc/shaper.inc:3596 +#: etc/inc/shaper.inc:3844 etc/inc/shaper.inc:3916 +#: usr/local/www/system_groupmanager.php:349 +#: usr/local/www/firewall_aliases_edit.php:614 etc/inc/shaper.inc:2888 +#: etc/inc/shaper.inc:3304 etc/inc/shaper.inc:3622 etc/inc/shaper.inc:3870 +#: etc/inc/shaper.inc:3942 +msgid "Name" +msgstr "Nome" + +#: etc/inc/shaper.inc:625 etc/inc/shaper.inc:626 etc/inc/shaper.inc:628 +#: etc/inc/shaper.inc:648 +msgid "Scheduler Type " +msgstr "Tipo de Agendador" + +#: etc/inc/shaper.inc:647 etc/inc/shaper.inc:648 etc/inc/shaper.inc:650 +#: etc/inc/shaper.inc:674 +msgid "NOTE: Changing this changes all child queues!" +msgstr "NOTA: Alterando isso, afetará todas as filas filhas!" + +#: etc/inc/shaper.inc:648 etc/inc/shaper.inc:649 etc/inc/shaper.inc:651 +#: etc/inc/shaper.inc:675 +msgid " Beware you can lose information." +msgstr " Cuidado, você pode perder informações." + +#: etc/inc/shaper.inc:686 etc/inc/shaper.inc:687 etc/inc/shaper.inc:689 +#: etc/inc/shaper.inc:713 +msgid "Adjusts the size, in bytes, of the token bucket regulator. If not specified, heuristics based on the interface bandwidth are used to determine the size." +msgstr "Ajuste o tamanho, em bytes, do token buket regulator. Se não especificado, heurísticas baseadas no tamanho da banda da interface são usadas para determinar o tamanho." + +#: etc/inc/shaper.inc:978 etc/inc/shaper.inc:979 etc/inc/shaper.inc:983 +#: etc/inc/shaper.inc:1015 +msgid "The priority must be an integer between 1 and 15." +msgstr "A prioridade deve ser um inteiro entre 1 e 15." + +#: etc/inc/shaper.inc:981 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:982 +#: etc/inc/shaper.inc:2804 etc/inc/shaper.inc:2805 etc/inc/shaper.inc:986 +#: etc/inc/shaper.inc:2810 etc/inc/shaper.inc:1018 etc/inc/shaper.inc:2878 +#: etc/inc/shaper.inc:2897 etc/inc/shaper.inc:2899 +msgid "Queue limit must be an integer" +msgstr "Limite da fila deve ser um inteiro" + +#: etc/inc/shaper.inc:983 etc/inc/shaper.inc:984 etc/inc/shaper.inc:988 +#: etc/inc/shaper.inc:1020 +msgid "Queue limit must be positive" +msgstr "Limite da fila deve ser positivo" + +#: etc/inc/shaper.inc:985 etc/inc/shaper.inc:987 etc/inc/shaper.inc:2804 +#: etc/inc/shaper.inc:2806 etc/inc/shaper.inc:3573 etc/inc/shaper.inc:986 +#: etc/inc/shaper.inc:988 etc/inc/shaper.inc:2808 etc/inc/shaper.inc:3585 +#: etc/inc/shaper.inc:3740 etc/inc/shaper.inc:2807 etc/inc/shaper.inc:2809 +#: etc/inc/shaper.inc:3741 etc/inc/shaper.inc:990 etc/inc/shaper.inc:992 +#: etc/inc/shaper.inc:2812 etc/inc/shaper.inc:2814 etc/inc/shaper.inc:3748 +#: etc/inc/shaper.inc:1022 etc/inc/shaper.inc:1024 etc/inc/shaper.inc:2880 +#: etc/inc/shaper.inc:2882 etc/inc/shaper.inc:3816 etc/inc/shaper.inc:2899 +#: etc/inc/shaper.inc:2901 etc/inc/shaper.inc:3921 etc/inc/shaper.inc:2903 +#: etc/inc/shaper.inc:3947 +msgid "Queue names must be alphanumeric and _ or - only." +msgstr "Nomes de filas devem ser alfanuméricos, _ ou - somente." + +#: etc/inc/shaper.inc:989 etc/inc/shaper.inc:990 etc/inc/shaper.inc:991 +#: etc/inc/shaper.inc:995 etc/inc/shaper.inc:1027 +msgid "Only one default queue per interface is allowed." +msgstr "Apenas uma fila padrão é permitida por interface." + +#: etc/inc/shaper.inc:1125 etc/inc/shaper.inc:1126 etc/inc/shaper.inc:1127 +#: etc/inc/shaper.inc:1131 etc/inc/shaper.inc:1174 +msgid "Enable/Disable queue and its children" +msgstr "Habilitar/Desabilitar fila e suas filhas" + +#: etc/inc/shaper.inc:1129 etc/inc/shaper.inc:1130 etc/inc/shaper.inc:1131 +#: etc/inc/shaper.inc:1135 etc/inc/shaper.inc:1178 +msgid "Queue Name" +msgstr "Nome da Fila" + +#: etc/inc/shaper.inc:1136 etc/inc/shaper.inc:1137 etc/inc/shaper.inc:1138 +#: etc/inc/shaper.inc:1142 etc/inc/shaper.inc:1185 +msgid "Enter the name of the queue here. Do not use spaces and limit the size to 15 characters." +msgstr "Informe o nome da fila aqui. Não use espaços e limite o tamanho para 15 caracteres." + +#: etc/inc/shaper.inc:1139 usr/local/www/interfaces_bridge_edit.php:354 +#: usr/local/www/interfaces_bridge_edit.php:373 +#: usr/local/www/system_gateway_groups.php:122 etc/inc/shaper.inc:1140 +#: usr/local/www/interfaces_bridge_edit.php:363 +#: usr/local/www/interfaces_bridge_edit.php:382 +#: usr/local/www/system_gateway_groups.php:123 +#: usr/local/www/interfaces_bridge_edit.php:364 +#: usr/local/www/interfaces_bridge_edit.php:383 +#: usr/local/www/interfaces_bridge_edit.php:365 +#: usr/local/www/interfaces_bridge_edit.php:384 etc/inc/shaper.inc:1141 +#: usr/local/www/system_gateway_groups.php:132 etc/inc/shaper.inc:1145 +#: usr/local/www/interfaces_bridge_edit.php:367 +#: usr/local/www/interfaces_bridge_edit.php:386 etc/inc/shaper.inc:1188 +msgid "Priority" +msgstr "Prioridade" + +#: etc/inc/shaper.inc:1143 etc/inc/shaper.inc:1144 etc/inc/shaper.inc:1145 +#: etc/inc/shaper.inc:1149 etc/inc/shaper.inc:1192 +msgid "For hfsc, the range is 0 to 7. The default is 1. Hfsc queues with a higher priority are preferred in the case of overload." +msgstr "Para hfsc, o intervalo é de 0 a 7. O padrão é 1. Filas Hfsc com maior prioridade são preferidas no caso de sobrecarga." + +#: etc/inc/shaper.inc:1146 etc/inc/shaper.inc:1147 etc/inc/shaper.inc:1148 +#: etc/inc/shaper.inc:1152 etc/inc/shaper.inc:1195 +msgid "Queue limit" +msgstr "Limite da Fila" + +#: etc/inc/shaper.inc:1150 etc/inc/shaper.inc:1151 etc/inc/shaper.inc:1152 +#: etc/inc/shaper.inc:1156 etc/inc/shaper.inc:1199 +msgid "Queue limit in packets per second." +msgstr "Limite da Fila em pacotes por segundo." + +#: etc/inc/shaper.inc:1153 etc/inc/shaper.inc:1154 etc/inc/shaper.inc:1155 +#: etc/inc/shaper.inc:1159 etc/inc/shaper.inc:1202 +msgid "Scheduler options" +msgstr "Opções do agendador" + +#: etc/inc/shaper.inc:1158 etc/inc/shaper.inc:1161 etc/inc/shaper.inc:1159 +#: etc/inc/shaper.inc:1162 etc/inc/shaper.inc:1160 etc/inc/shaper.inc:1163 +#: etc/inc/shaper.inc:1164 etc/inc/shaper.inc:1167 etc/inc/shaper.inc:1207 +#: etc/inc/shaper.inc:1210 +msgid "Default queue" +msgstr "Fila padrão" + +#: etc/inc/shaper.inc:1168 etc/inc/shaper.inc:1169 etc/inc/shaper.inc:1170 +#: etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1217 +msgid "Random Early Detection" +msgstr "Detecção Antecipada Aleatória" + +#: etc/inc/shaper.inc:1173 etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1175 +#: etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1222 +msgid "Random Early Detection In and Out" +msgstr "Detecção Randômica Recente de Entrada e Saída" + +#: etc/inc/shaper.inc:1178 etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180 +#: etc/inc/shaper.inc:1184 etc/inc/shaper.inc:1227 +msgid "Explicit Congestion Notification" +msgstr "Notificação de Congestionamento Explícita" + +#: etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180 etc/inc/shaper.inc:1181 +#: etc/inc/shaper.inc:1185 etc/inc/shaper.inc:1233 +msgid "Select options for this queue" +msgstr "Selecione opções para essa fila" + +#: etc/inc/shaper.inc:1181 etc/inc/shaper.inc:3069 etc/inc/shaper.inc:3501 +#: usr/local/www/load_balancer_virtual_server.php:134 +#: usr/local/www/pkg_mgr_installed.php:94 +#: usr/local/www/firewall_aliases_import.php:140 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:121 +#: usr/local/www/firewall_virtual_ip_edit.php:538 +#: usr/local/www/load_balancer_relay_action.php:143 +#: usr/local/www/services_dyndns.php:103 usr/local/www/services_wol.php:163 +#: usr/local/www/services_wol_edit.php:148 +#: usr/local/www/interfaces_bridge.php:109 +#: usr/local/www/interfaces_bridge_edit.php:273 +#: usr/local/www/interfaces_gif.php:108 +#: usr/local/www/interfaces_gif_edit.php:208 +#: usr/local/www/interfaces_gre.php:109 +#: usr/local/www/interfaces_gre_edit.php:219 +#: usr/local/www/interfaces_groups.php:96 +#: usr/local/www/interfaces_groups_edit.php:259 +#: usr/local/www/firewall_aliases.php:167 +#: usr/local/www/firewall_aliases_edit.php:455 +#: usr/local/www/firewall_aliases_edit.php:591 +#: usr/local/www/firewall_aliases_edit.php:626 +#: usr/local/www/firewall_nat_1to1.php:108 +#: usr/local/www/firewall_nat_1to1_edit.php:440 +#: usr/local/www/firewall_nat_edit.php:769 +#: usr/local/www/firewall_nat_out.php:349 +#: usr/local/www/firewall_nat_out_edit.php:636 +#: usr/local/www/firewall_rules.php:374 +#: usr/local/www/firewall_rules_edit.php:1053 +#: usr/local/www/firewall_schedule.php:98 +#: usr/local/www/firewall_schedule_edit.php:793 +#: usr/local/www/firewall_schedule_edit.php:998 +#: usr/local/www/firewall_virtual_ip.php:187 usr/local/www/interfaces.php:1244 +#: usr/local/www/load_balancer_pool.php:136 +#: usr/local/www/interfaces_vlan.php:110 +#: usr/local/www/interfaces_vlan_edit.php:179 +#: usr/local/www/system_routes.php:129 +#: usr/local/www/system_routes_edit.php:267 +#: usr/local/www/interfaces_lagg.php:114 +#: usr/local/www/interfaces_lagg_edit.php:208 +#: usr/local/www/interfaces_ppps.php:110 +#: usr/local/www/interfaces_ppps_edit.php:467 +#: usr/local/www/interfaces_qinq.php:119 +#: usr/local/www/interfaces_qinq_edit.php:337 +#: usr/local/www/interfaces_wireless.php:108 +#: usr/local/www/interfaces_wireless_edit.php:185 +#: usr/local/www/load_balancer_monitor.php:124 usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:241 +#: usr/local/www/load_balancer_pool_edit.php:196 +#: usr/local/www/load_balancer_virtual_server_edit.php:189 +#: usr/local/www/pkg_mgr.php:118 usr/local/www/firewall_nat.php:203 +#: usr/local/www/diag_ipsec.php:95 +#: usr/local/www/services_captiveportal_ip.php:118 +#: usr/local/www/services_captiveportal_ip_edit.php:208 +#: usr/local/www/services_captiveportal_mac.php:168 +#: usr/local/www/services_captiveportal_mac_edit.php:182 +#: usr/local/www/services_dhcp.php:893 +#: usr/local/www/services_dhcp_edit.php:242 +#: usr/local/www/services_dnsmasq.php:246 +#: usr/local/www/services_dnsmasq.php:313 +#: usr/local/www/services_dnsmasq_edit.php:163 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:417 +#: usr/local/www/load_balancer_relay_protocol.php:137 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:218 +#: usr/local/www/services_captiveportal_hostname.php:123 +#: usr/local/www/services_captiveportal_hostname_edit.php:183 +#: usr/local/www/status_services.php:245 usr/local/www/status_upnp.php:88 +#: usr/local/www/services_dyndns_edit.php:228 +#: usr/local/www/services_igmpproxy.php:98 +#: usr/local/www/services_igmpproxy_edit.php:175 +#: usr/local/www/services_rfc2136.php:80 +#: usr/local/www/services_rfc2136_edit.php:192 +#: usr/local/www/status_gateway_groups.php:76 +#: usr/local/www/status_gateways.php:78 usr/local/www/status_lb_pool.php:134 +#: usr/local/www/status_lb_vs.php:81 +#: usr/local/www/system_advanced_sysctl.php:172 +#: usr/local/www/system_advanced_sysctl.php:243 +#: usr/local/www/system_gateway_groups.php:123 +#: usr/local/www/system_gateway_groups_edit.php:219 +#: usr/local/www/system_gateways.php:156 +#: usr/local/www/system_gateways_edit.php:484 +#: usr/local/www/system_groupmanager.php:275 +#: usr/local/www/system_groupmanager.php:347 +#: usr/local/www/system_groupmanager.php:405 +#: usr/local/www/system_groupmanager_addprivs.php:216 +#: usr/local/www/system_usermanager.php:578 +#: usr/local/www/system_usermanager_addprivs.php:197 +#: usr/local/www/vpn_ipsec_phase1.php:575 +#: usr/local/www/vpn_ipsec_phase2.php:497 +#: usr/local/www/vpn_openvpn_client.php:573 +#: usr/local/www/vpn_openvpn_client.php:863 +#: usr/local/www/vpn_openvpn_csc.php:342 usr/local/www/vpn_openvpn_csc.php:674 +#: usr/local/www/vpn_openvpn_server.php:722 +#: usr/local/www/vpn_openvpn_server.php:1451 +#: usr/local/www/vpn_pppoe_edit.php:444 usr/local/www/firewall_nat_npt.php:107 +#: usr/local/www/firewall_nat_npt_edit.php:261 +#: usr/local/www/services_dhcpv6.php:806 +#: usr/local/www/services_dhcpv6_edit.php:219 +#: usr/local/www/services_captiveportal_zones.php:55 +#: usr/local/www/services_captiveportal_zones_edit.php:106 +#: etc/inc/shaper.inc:1182 etc/inc/shaper.inc:3077 etc/inc/shaper.inc:3513 +#: usr/local/www/system_routes_edit.php:307 usr/local/www/pkg_mgr.php:132 +#: usr/local/www/services_unbound_acls.php:238 +#: usr/local/www/services_unbound_acls.php:292 +#: usr/local/www/services_unbound_acls.php:319 +#: usr/local/www/system_gateway_groups_edit.php:274 +#: usr/local/www/services_dnsmasq.php:334 +#: usr/local/www/services_dyndns_edit.php:358 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/services_dnsmasq_edit.php:218 +#: usr/local/www/services_dnsmasq_edit.php:239 +#: usr/local/www/firewall_nat_1to1_edit.php:447 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/firewall_nat_npt_edit.php:266 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/diag_ipsec.php:106 +#: usr/local/www/load_balancer_relay_action_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/services_unbound.php:282 +#: usr/local/www/services_unbound.php:349 +#: usr/local/www/system_usermanager.php:576 +#: usr/local/www/services_igmpproxy_edit.php:177 +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:596 +#: usr/local/www/firewall_aliases_edit.php:631 +#: usr/local/www/pkg_mgr_installed.php:114 +#: usr/local/www/firewall_rules.php:378 +#: usr/local/www/load_balancer_virtual_server.php:135 +#: usr/local/www/system_groupmanager_addprivs.php:214 +#: usr/local/www/system_gateways_edit.php:519 +#: usr/local/www/load_balancer_monitor.php:125 +#: usr/local/www/services_dyndns.php:112 +#: usr/local/www/vpn_openvpn_server.php:795 +#: usr/local/www/vpn_openvpn_server.php:1593 +#: usr/local/www/services_dhcp.php:931 +#: usr/local/www/load_balancer_virtual_server_edit.php:163 +#: usr/local/www/interfaces_bridge_edit.php:282 +#: usr/local/www/firewall_aliases.php:170 +#: usr/local/www/vpn_ipsec_phase2.php:523 +#: usr/local/www/firewall_nat_edit.php:776 +#: usr/local/www/services_dhcp_edit.php:251 usr/local/www/interfaces.php:1348 +#: usr/local/www/vpn_openvpn_client.php:578 +#: usr/local/www/vpn_openvpn_client.php:868 +#: usr/local/www/load_balancer_pool_edit.php:204 +#: usr/local/www/firewall_virtual_ip_edit.php:526 +#: usr/local/www/interfaces_gre_edit.php:218 +#: usr/local/www/load_balancer_pool.php:137 +#: usr/local/www/vpn_ipsec_phase1.php:588 +#: usr/local/www/services_dhcpv6.php:901 etc/inc/shaper.inc:3225 +#: etc/inc/shaper.inc:3668 usr/local/www/vpn_pppoe_edit.php:445 +#: usr/local/www/system_routes_edit.php:308 +#: usr/local/www/system_gateway_groups_edit.php:334 +#: usr/local/www/interfaces_vlan_edit.php:180 +#: usr/local/www/services_dnsmasq.php:247 +#: usr/local/www/services_dnsmasq.php:335 +#: usr/local/www/firewall_nat_out.php:360 +#: usr/local/www/system_groupmanager.php:406 +#: usr/local/www/services_dnsmasq_edit.php:219 +#: usr/local/www/services_dnsmasq_edit.php:240 +#: usr/local/www/load_balancer_relay_protocol_edit.php:216 +#: usr/local/www/firewall_nat_1to1_edit.php:445 +#: usr/local/www/services_dhcpv6_edit.php:230 +#: usr/local/www/services_captiveportal_ip.php:116 +#: usr/local/www/firewall_nat_npt_edit.php:265 usr/local/www/vpn_pppoe.php:105 +#: usr/local/www/interfaces_groups.php:97 +#: usr/local/www/services_captiveportal_hostname_edit.php:181 +#: usr/local/www/interfaces_qinq_edit.php:338 +#: usr/local/www/interfaces_gif_edit.php:209 usr/local/www/diag_ipsec.php:107 +#: usr/local/www/firewall_nat.php:208 usr/local/www/interfaces_qinq.php:120 +#: usr/local/www/load_balancer_relay_action_edit.php:414 +#: usr/local/www/interfaces_ppps.php:111 +#: usr/local/www/load_balancer_monitor_edit.php:239 +#: usr/local/www/services_captiveportal_mac.php:166 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151 +#: usr/local/www/services_captiveportal_mac_edit.php:180 +#: usr/local/www/firewall_schedule_edit.php:792 +#: usr/local/www/firewall_schedule_edit.php:997 +#: usr/local/www/interfaces_bridge.php:110 +#: usr/local/www/interfaces_ppps_edit.php:468 +#: usr/local/www/interfaces_lagg.php:115 +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/firewall_aliases_edit.php:599 +#: usr/local/www/firewall_aliases_edit.php:634 +#: usr/local/www/interfaces_lagg_edit.php:209 +#: usr/local/www/vpn_openvpn_csc.php:341 usr/local/www/vpn_openvpn_csc.php:673 +#: usr/local/www/services_captiveportal_hostname.php:121 +#: usr/local/www/firewall_rules.php:371 usr/local/www/interfaces_gre.php:110 +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/interfaces_wireless.php:109 +#: usr/local/www/system_gateway_groups.php:124 +#: usr/local/www/status_services.php:241 +#: usr/local/www/system_gateways_edit.php:619 +#: usr/local/www/status_gateways.php:79 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/services_captiveportal_ip_edit.php:206 +#: usr/local/www/load_balancer_relay_protocol.php:135 +#: usr/local/www/vpn_openvpn_server.php:823 +#: usr/local/www/vpn_openvpn_server.php:1634 usr/local/www/status_upnp.php:89 +#: usr/local/www/services_dhcp.php:1135 +#: usr/local/www/load_balancer_virtual_server_edit.php:161 +#: usr/local/www/interfaces_bridge_edit.php:283 +#: usr/local/www/firewall_aliases.php:190 +#: usr/local/www/load_balancer_relay_action.php:141 +#: usr/local/www/interfaces_groups_edit.php:260 +#: usr/local/www/services_captiveportal_zones_edit.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:625 +#: usr/local/www/interfaces_vlan.php:111 +#: usr/local/www/firewall_nat_edit.php:775 +#: usr/local/www/services_dhcp_edit.php:253 usr/local/www/interfaces.php:1336 +#: usr/local/www/services_captiveportal_zones.php:56 +#: usr/local/www/vpn_openvpn_client.php:596 +#: usr/local/www/vpn_openvpn_client.php:921 +#: usr/local/www/status_gateway_groups.php:77 +#: usr/local/www/load_balancer_pool_edit.php:202 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/interfaces_gif.php:109 +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/firewall_virtual_ip.php:191 +#: usr/local/www/vpn_ipsec_phase1.php:587 +#: usr/local/www/services_dhcpv6.php:832 usr/local/www/services_rfc2136.php:81 +#: usr/local/www/status_services.php:239 +#: usr/local/www/system_gateways_edit.php:623 +#: usr/local/www/services_captiveportal_ip_edit.php:200 +#: usr/local/www/vpn_pppoe.php:106 +#: usr/local/www/interfaces_wireless_edit.php:187 +#: usr/local/www/services_captiveportal_zones_edit.php:105 +#: usr/local/www/vpn_openvpn_client.php:615 +#: usr/local/www/vpn_openvpn_client.php:940 +#: usr/local/www/services_dhcpv6_edit.php:233 +#: usr/local/www/services_dyndns_edit.php:362 +#: usr/local/www/firewall_rules_edit.php:1103 +#: usr/local/www/interfaces_qinq.php:123 +#: usr/local/www/interfaces_vlan_edit.php:183 +#: usr/local/www/interfaces_ppps_edit.php:474 +#: usr/local/www/firewall_virtual_ip.php:205 +#: usr/local/www/interfaces_lagg_edit.php:222 +#: usr/local/www/firewall_nat_edit.php:770 +#: usr/local/www/interfaces_lagg.php:119 usr/local/www/interfaces_vlan.php:117 +#: usr/local/www/interfaces_gif_edit.php:220 +#: usr/local/www/services_dhcp_edit.php:381 +#: usr/local/www/firewall_virtual_ip_edit.php:463 +#: usr/local/www/diag_ipsec.php:109 usr/local/www/interfaces_bridge.php:116 +#: usr/local/www/interfaces_wireless.php:111 +#: usr/local/www/system_routes.php:133 usr/local/www/vpn_pppoe_edit.php:448 +#: usr/local/www/services_dhcp.php:792 usr/local/www/services_dhcp.php:1154 +#: usr/local/www/services_captiveportal_mac_edit.php:193 +#: usr/local/www/services_dhcpv6.php:853 +#: usr/local/www/interfaces_bridge_edit.php:284 +#: usr/local/www/services_dnsmasq.php:272 +#: usr/local/www/services_dnsmasq.php:360 +#: usr/local/www/services_captiveportal_mac.php:176 +#: usr/local/www/vpn_ipsec_phase1.php:608 usr/local/www/interfaces_gre.php:114 +#: usr/local/www/firewall_nat_out_edit.php:651 +#: usr/local/www/vpn_openvpn_server.php:850 +#: usr/local/www/vpn_openvpn_server.php:1686 +#: usr/local/www/vpn_ipsec_phase2.php:646 usr/local/www/services_dyndns.php:93 +#: usr/local/www/interfaces_gif.php:113 +#: usr/local/www/interfaces_qinq_edit.php:341 +#: usr/local/www/interfaces.php:1349 etc/inc/shaper.inc:1183 +#: etc/inc/shaper.inc:3226 etc/inc/shaper.inc:3669 +#: usr/local/www/status_services.php:80 +#: usr/local/www/system_gateways_edit.php:625 +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/firewall_rules_edit.php:1116 +#: usr/local/www/firewall_nat_edit.php:782 +#: usr/local/www/firewall_virtual_ip_edit.php:483 +#: usr/local/www/pkg_mgr_installed.php:116 usr/local/www/services_dhcp.php:812 +#: usr/local/www/services_dhcp.php:1174 usr/local/www/pkg_mgr.php:135 +#: usr/local/www/system_routes_edit.php:331 +#: usr/local/www/firewall_nat_out.php:367 usr/local/www/firewall_rules.php:369 +#: usr/local/www/system_gateway_groups_edit.php:336 +#: usr/local/www/firewall_aliases_edit.php:482 +#: usr/local/www/firewall_aliases_edit.php:630 +#: usr/local/www/firewall_aliases_edit.php:665 +#: usr/local/www/services_dnsmasq.php:285 +#: usr/local/www/services_dnsmasq.php:373 +#: usr/local/www/firewall_nat_out_edit.php:663 +#: usr/local/www/services_dyndns.php:89 +#: usr/local/www/system_gateway_groups.php:133 +#: usr/local/www/interfaces.php:1391 etc/inc/shaper.inc:1187 +#: etc/inc/shaper.inc:3233 etc/inc/shaper.inc:3481 etc/inc/shaper.inc:3676 +#: usr/local/www/system_gateways_edit.php:655 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_virtual_ip.php:228 +#: usr/local/www/interfaces_lagg_edit.php:221 +#: usr/local/www/firewall_nat_edit.php:783 usr/local/www/system_routes.php:149 +#: usr/local/www/firewall_nat.php:211 usr/local/www/system_routes_edit.php:340 +#: usr/local/www/firewall_nat_out.php:366 +#: usr/local/www/interfaces_bridge_edit.php:286 +#: usr/local/www/services_dnsmasq.php:349 +#: usr/local/www/services_dnsmasq.php:437 usr/local/www/interfaces.php:1386 +#: etc/inc/shaper.inc:1235 etc/inc/shaper.inc:3301 etc/inc/shaper.inc:3549 +#: etc/inc/shaper.inc:3744 usr/local/www/system_gateways_edit.php:656 +#: usr/local/www/system_routes_edit.php:342 etc/inc/shaper.inc:3378 +#: etc/inc/shaper.inc:3651 etc/inc/shaper.inc:3849 +#: usr/local/www/services_rfc2136.php:83 +#: usr/local/www/system_groupmanager.php:278 +#: usr/local/www/system_groupmanager.php:350 +#: usr/local/www/system_groupmanager.php:409 +#: usr/local/www/services_dyndns_edit.php:371 +#: usr/local/www/firewall_rules_edit.php:1163 +#: usr/local/www/firewall_virtual_ip.php:235 +#: usr/local/www/firewall_virtual_ip_edit.php:488 +#: usr/local/www/services_dhcp.php:824 usr/local/www/services_dhcp.php:1186 +#: usr/local/www/firewall_aliases_edit.php:481 +#: usr/local/www/firewall_aliases_edit.php:629 +#: usr/local/www/firewall_aliases_edit.php:664 +#: usr/local/www/services_rfc2136_edit.php:204 +#: usr/local/www/interfaces.php:1399 etc/inc/shaper.inc:3404 +#: etc/inc/shaper.inc:3677 etc/inc/shaper.inc:3875 +msgid "Description" +msgstr "Descrição" + +#: etc/inc/shaper.inc:1207 etc/inc/shaper.inc:1209 etc/inc/shaper.inc:1210 +#: etc/inc/shaper.inc:1214 etc/inc/shaper.inc:1262 +msgid "Bandwidth:" +msgstr "Largura de banda:" + +#: etc/inc/shaper.inc:1212 etc/inc/shaper.inc:1214 etc/inc/shaper.inc:1215 +#: etc/inc/shaper.inc:1218 etc/inc/shaper.inc:1266 +msgid "Priority: on" +msgstr "Prioridade: ligada" + +#: etc/inc/shaper.inc:1215 etc/inc/shaper.inc:1217 etc/inc/shaper.inc:1218 +#: etc/inc/shaper.inc:1221 etc/inc/shaper.inc:1269 +msgid "Default: on" +msgstr "Padrão: ligado" + +#: etc/inc/shaper.inc:1222 etc/inc/shaper.inc:1223 etc/inc/shaper.inc:1224 +#: etc/inc/shaper.inc:1225 etc/inc/shaper.inc:1226 etc/inc/shaper.inc:1228 +#: etc/inc/shaper.inc:1229 etc/inc/shaper.inc:1276 etc/inc/shaper.inc:1277 +msgid "Delete queue from interface" +msgstr "Apagar fila da interface" + +#: etc/inc/shaper.inc:1559 etc/inc/shaper.inc:2207 etc/inc/shaper.inc:2483 +#: etc/inc/shaper.inc:1561 etc/inc/shaper.inc:2209 etc/inc/shaper.inc:2485 +#: etc/inc/shaper.inc:1562 etc/inc/shaper.inc:2210 etc/inc/shaper.inc:2486 +#: etc/inc/shaper.inc:1565 etc/inc/shaper.inc:2215 etc/inc/shaper.inc:2491 +#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:2273 etc/inc/shaper.inc:2554 +msgid "Bandwidth in percentage should be between 1 and 100 bounds." +msgstr "Tamanho de banda em porcentagem deve ser limitado de 1 a 100." + +#: etc/inc/shaper.inc:1576 etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1579 +#: etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1633 +msgid "upperlimit service curve defined but missing (d) value" +msgstr "curva de serviço upperlimit definido mas o valor (d) está faltando" + +#: etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1581 +#: etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1635 +msgid "upperlimit service curve defined but missing initial bandwidth (m1) value" +msgstr "curva de serviço upperlimit definido mas o valor do tamanho de banda inicial (m1) está faltando" + +#: etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1583 +#: etc/inc/shaper.inc:1586 etc/inc/shaper.inc:1637 +msgid "upperlimit m1 value needs to be Kb, Mb, Gb, or %" +msgstr "o valor m1 do upperlimit precisa ser Kb, Gb, ou %" + +#: etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1585 +#: etc/inc/shaper.inc:1588 etc/inc/shaper.inc:1639 +msgid "upperlimit d value needs to be numeric" +msgstr "o valor d do upperlimit precisa ser numérico" + +#: etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1586 etc/inc/shaper.inc:1587 +#: etc/inc/shaper.inc:1590 etc/inc/shaper.inc:1641 +msgid "upperlimit m2 value needs to be Kb, Mb, Gb, or %" +msgstr "valor m2 de upperlimit precisa ser Kb, Mb, Gb, ou %" + +#: etc/inc/shaper.inc:1598 etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1601 +#: etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1655 +msgid "linkshare service curve defined but missing (d) value" +msgstr "curva de serviço linkshare definida mas o valor (d) está faltando" + +#: etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1603 +#: etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1657 +msgid "linkshare service curve defined but missing initial bandwidth (m1) value" +msgstr "curva de serviço linkshare definida mas o valor da largura de banda inicial (m1) está faltando" + +#: etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1605 +#: etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1659 +msgid "linkshare m1 value needs to be Kb, Mb, Gb, or %" +msgstr "O valor m1 de linkshare precisa ser Kb, Mb, Gb, ou %" + +#: etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1607 +#: etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1661 +msgid "linkshare d value needs to be numeric" +msgstr "o valor d de linkshare precisa ser numérico" + +#: etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1609 +#: etc/inc/shaper.inc:1612 etc/inc/shaper.inc:1663 +msgid "linkshare m2 value needs to be Kb, Mb, Gb, or %" +msgstr "o valor m2 de linkshare precisa ser Kb, Mb, Gb, ou %" + +#: etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1611 +#: etc/inc/shaper.inc:1614 etc/inc/shaper.inc:1665 +msgid "realtime service curve defined but missing (d) value" +msgstr "curva de serviço realtime definida mas o valor (d) está faltando" + +#: etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1612 etc/inc/shaper.inc:1613 +#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:1667 +msgid "realtime service curve defined but missing initial bandwidth (m1) value" +msgstr "curva de serviço realtime definida mas o valor da largura de banda inicial (m1) está faltando" + +#: etc/inc/shaper.inc:1625 etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1628 +#: etc/inc/shaper.inc:1631 etc/inc/shaper.inc:1682 +msgid "realtime m1 value needs to be Kb, Mb, Gb, or %" +msgstr "o valor m1 de realtime precisa ser Kb, Mb, Gb, ou %" + +#: etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1630 +#: etc/inc/shaper.inc:1633 etc/inc/shaper.inc:1684 +msgid "realtime d value needs to be numeric" +msgstr "o valor d de realtime precisa ser numérico" + +#: etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1631 etc/inc/shaper.inc:1632 +#: etc/inc/shaper.inc:1635 etc/inc/shaper.inc:1686 +msgid "realtime m2 value needs to be Kb, Mb, Gb, or %" +msgstr "o valor m2 de realtime precisa ser Kb, Mb, Gb, ou %" + +#: etc/inc/shaper.inc:1858 etc/inc/shaper.inc:2336 etc/inc/shaper.inc:2602 +#: etc/inc/shaper.inc:3039 etc/inc/shaper.inc:1860 etc/inc/shaper.inc:2338 +#: etc/inc/shaper.inc:2604 etc/inc/shaper.inc:3047 etc/inc/shaper.inc:1861 +#: etc/inc/shaper.inc:2339 etc/inc/shaper.inc:2605 etc/inc/shaper.inc:1866 +#: etc/inc/shaper.inc:2344 etc/inc/shaper.inc:2610 etc/inc/shaper.inc:1924 +#: etc/inc/shaper.inc:2407 etc/inc/shaper.inc:2678 +msgid "Gbit/s" +msgstr "Gbits/s" + +#: etc/inc/shaper.inc:1862 etc/inc/shaper.inc:2340 etc/inc/shaper.inc:2606 +#: etc/inc/shaper.inc:3035 etc/inc/shaper.inc:1864 etc/inc/shaper.inc:2342 +#: etc/inc/shaper.inc:2608 etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1865 +#: etc/inc/shaper.inc:2343 etc/inc/shaper.inc:2609 etc/inc/shaper.inc:1870 +#: etc/inc/shaper.inc:2348 etc/inc/shaper.inc:2614 etc/inc/shaper.inc:1928 +#: etc/inc/shaper.inc:2411 etc/inc/shaper.inc:2682 +msgid "Mbit/s" +msgstr "Mbit/s" + +#: etc/inc/shaper.inc:1866 etc/inc/shaper.inc:2344 etc/inc/shaper.inc:2610 +#: etc/inc/shaper.inc:3031 usr/local/www/services_captiveportal.php:560 +#: usr/local/www/services_captiveportal.php:564 etc/inc/shaper.inc:1868 +#: etc/inc/shaper.inc:2346 etc/inc/shaper.inc:2612 etc/inc/shaper.inc:3039 +#: usr/local/www/services_captiveportal.php:565 +#: usr/local/www/services_captiveportal.php:569 +#: usr/local/www/services_captiveportal.php:563 +#: usr/local/www/services_captiveportal.php:567 etc/inc/shaper.inc:1869 +#: etc/inc/shaper.inc:2347 etc/inc/shaper.inc:2613 +#: usr/local/www/services_captiveportal.php:581 +#: usr/local/www/services_captiveportal.php:585 etc/inc/shaper.inc:1874 +#: etc/inc/shaper.inc:2352 etc/inc/shaper.inc:2618 etc/inc/shaper.inc:1932 +#: etc/inc/shaper.inc:2415 etc/inc/shaper.inc:2686 +msgid "Kbit/s" +msgstr "Kbit/s" + +#: etc/inc/shaper.inc:1870 etc/inc/shaper.inc:2348 etc/inc/shaper.inc:2614 +#: etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1872 etc/inc/shaper.inc:2350 +#: etc/inc/shaper.inc:2616 etc/inc/shaper.inc:3051 etc/inc/shaper.inc:1873 +#: etc/inc/shaper.inc:2351 etc/inc/shaper.inc:2617 etc/inc/shaper.inc:1878 +#: etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 etc/inc/shaper.inc:1936 +#: etc/inc/shaper.inc:2419 etc/inc/shaper.inc:2690 +msgid "Bit/s" +msgstr "Bit/s" + +#: etc/inc/shaper.inc:1876 etc/inc/shaper.inc:2354 etc/inc/shaper.inc:2620 +#: etc/inc/shaper.inc:1878 etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 +#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:2357 etc/inc/shaper.inc:2623 +#: etc/inc/shaper.inc:1884 etc/inc/shaper.inc:2362 etc/inc/shaper.inc:2628 +#: etc/inc/shaper.inc:1942 etc/inc/shaper.inc:2425 etc/inc/shaper.inc:2696 +msgid "Choose the amount of bandwidth for this queue" +msgstr "Escolha a largura de banda total para essa fila" + +#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:1881 etc/inc/shaper.inc:1882 +#: etc/inc/shaper.inc:1887 etc/inc/shaper.inc:1945 +msgid "Service Curve (sc)" +msgstr "Curva de Serviço (sc)" + +#: etc/inc/shaper.inc:1886 etc/inc/shaper.inc:1888 etc/inc/shaper.inc:1889 +#: etc/inc/shaper.inc:1894 etc/inc/shaper.inc:1952 +msgid "Upperlimit:" +msgstr "Upperlimit:" + +#: etc/inc/shaper.inc:1901 etc/inc/shaper.inc:1903 etc/inc/shaper.inc:1904 +#: etc/inc/shaper.inc:1909 etc/inc/shaper.inc:1967 +msgid "The maximum allowed bandwidth for the queue." +msgstr "A de largura de banda máxima permitida para esta fila." + +#: etc/inc/shaper.inc:1905 etc/inc/shaper.inc:1907 etc/inc/shaper.inc:1908 +#: etc/inc/shaper.inc:1913 etc/inc/shaper.inc:1971 +msgid "Real time:" +msgstr "Tempo real:" + +#: etc/inc/shaper.inc:1920 etc/inc/shaper.inc:1922 etc/inc/shaper.inc:1923 +#: etc/inc/shaper.inc:1928 etc/inc/shaper.inc:1986 +msgid "The minimum required bandwidth for the queue." +msgstr "A largura de banda mínima requerida para esta fila." + +#: etc/inc/shaper.inc:1924 etc/inc/shaper.inc:1926 etc/inc/shaper.inc:1927 +#: etc/inc/shaper.inc:1932 etc/inc/shaper.inc:1990 +msgid "Link share:" +msgstr "Compartilhar Link:" + +#: etc/inc/shaper.inc:1939 etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1942 +#: etc/inc/shaper.inc:1947 etc/inc/shaper.inc:2005 +msgid "The bandwidth share of a backlogged queue - this overrides priority." +msgstr "A largura de banda compartilhada de uma fila de backlog - isso substitui a prioridade." + +#: etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1943 etc/inc/shaper.inc:1944 +#: etc/inc/shaper.inc:1949 etc/inc/shaper.inc:2007 +msgid "The format for service curve specifications is (m1, d, m2). m2 controls the bandwidth assigned to the queue. m1 and d are optional and can be used to control the initial bandwidth assignment. For the first d milliseconds the queue gets the bandwidth given as m1, afterwards the value given in m2." +msgstr "O formato para as especificações de curva de serviço é (m1, d, m2). m2 controla o tamanho da banda atribuída para a fila. m1 e d são opcionais e podem ser usados para controlar quantidade de banda inicial atribuida. Para os primeiros d milisegundos a fila obtém a largura de banda dado como m1, depois o valor dado em m2." + +#: etc/inc/shaper.inc:2190 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2193 +#: etc/inc/shaper.inc:2198 etc/inc/shaper.inc:2256 +msgid "Priority must be an integer between 1 and 7." +msgstr "A prioridade deve ser um inteiro entre 1 e 7." + +#: etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 etc/inc/shaper.inc:2358 +#: etc/inc/shaper.inc:2624 etc/inc/shaper.inc:2359 etc/inc/shaper.inc:2625 +#: etc/inc/shaper.inc:2364 etc/inc/shaper.inc:2630 etc/inc/shaper.inc:2427 +#: etc/inc/shaper.inc:2698 +msgid "Scheduler specific options" +msgstr "Opções específicas do Agendador" + +#: etc/inc/shaper.inc:2360 etc/inc/shaper.inc:2362 etc/inc/shaper.inc:2363 +#: etc/inc/shaper.inc:2368 etc/inc/shaper.inc:2431 +msgid "Borrow from other queues when available" +msgstr "Emprestar de outras filas quando disponíveis" + +#: etc/inc/shaper.inc:2465 etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2468 +#: etc/inc/shaper.inc:2473 etc/inc/shaper.inc:2536 +msgid "Priority must be an integer between 1 and 255." +msgstr "Prioridade deve ser um inteiro entre 1 e 255." + +#: etc/inc/shaper.inc:2628 etc/inc/shaper.inc:2630 etc/inc/shaper.inc:2631 +#: etc/inc/shaper.inc:2636 etc/inc/shaper.inc:2704 +msgid "Number of buckets available." +msgstr "Número de buckets disponíveis." + +#: etc/inc/shaper.inc:2633 etc/inc/shaper.inc:2635 etc/inc/shaper.inc:2636 +#: etc/inc/shaper.inc:2641 etc/inc/shaper.inc:2709 +msgid "Bandwidth limit for hosts to not saturate link." +msgstr "Limite da largura de banda para hosts não saturarem o link." + +#: etc/inc/shaper.inc:2797 etc/inc/shaper.inc:2799 etc/inc/shaper.inc:2800 +#: etc/inc/shaper.inc:2805 etc/inc/shaper.inc:2873 etc/inc/shaper.inc:2892 +msgid "Plr must be an integer between 1 and 100." +msgstr "Plr deve ser um inteiro entre 1 e 100." + +#: etc/inc/shaper.inc:2800 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:2803 +#: etc/inc/shaper.inc:2808 etc/inc/shaper.inc:2876 etc/inc/shaper.inc:2895 +#: etc/inc/shaper.inc:2897 +msgid "Buckets must be an integer between 16 and 65535." +msgstr "Buckets deve ser um inteiro entre 16 e 65535." + +#: etc/inc/shaper.inc:2902 etc/inc/shaper.inc:2906 etc/inc/shaper.inc:2921 +#: etc/inc/shaper.inc:2922 etc/inc/shaper.inc:2927 etc/inc/shaper.inc:2995 +#: etc/inc/shaper.inc:3053 etc/inc/shaper.inc:3063 +msgid "Delay must be an integer." +msgstr "Espera deve ser um inteiro." + +#: etc/inc/shaper.inc:3009 usr/local/www/services_snmp.php:276 +#: usr/local/www/services_snmp.php:336 usr/local/www/interfaces.php:1234 +#: usr/local/www/system_firmware.php:131 +#: usr/local/www/services_dnsmasq.php:154 usr/local/www/diag_routes.php:60 +#: usr/local/www/services_rfc2136_edit.php:128 +#: usr/local/www/vpn_ipsec_phase1.php:813 etc/inc/shaper.inc:3013 +#: usr/local/www/services_unbound.php:150 usr/local/www/interfaces.php:1338 +#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:334 +#: usr/local/www/vpn_ipsec_phase1.php:826 etc/inc/shaper.inc:3143 +#: usr/local/www/services_dnsmasq.php:155 usr/local/www/diag_routes.php:61 +#: usr/local/www/system_firmware.php:138 usr/local/www/interfaces.php:1326 +#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:335 +#: usr/local/www/vpn_ipsec_phase1.php:823 +#: usr/local/www/system_firmware.php:133 +#: usr/local/www/services_dnsmasq.php:159 +#: usr/local/www/vpn_ipsec_phase1.php:844 usr/local/www/services_snmp.php:285 +#: usr/local/www/services_snmp.php:345 usr/local/www/interfaces.php:1339 +#: etc/inc/shaper.inc:3144 usr/local/www/services_dnsmasq.php:161 +#: usr/local/www/interfaces.php:1381 etc/inc/shaper.inc:3151 +#: usr/local/www/services_dnsmasq.php:182 usr/local/www/interfaces.php:1376 +#: etc/inc/shaper.inc:3219 etc/inc/shaper.inc:3275 +#: usr/local/www/services_rfc2136_edit.php:133 +#: usr/local/www/interfaces.php:1389 etc/inc/shaper.inc:3297 +msgid "Enable" +msgstr "Habilitar" + +#: etc/inc/shaper.inc:3014 etc/inc/shaper.inc:3018 etc/inc/shaper.inc:3148 +#: etc/inc/shaper.inc:3149 etc/inc/shaper.inc:3156 etc/inc/shaper.inc:3224 +#: etc/inc/shaper.inc:3280 etc/inc/shaper.inc:3302 +msgid "Enable limiter and its children" +msgstr "Habilitar/Desabilitar limitador e seus dependentes" + +#: etc/inc/shaper.inc:3046 etc/inc/shaper.inc:3283 etc/inc/shaper.inc:3054 +#: etc/inc/shaper.inc:3295 etc/inc/shaper.inc:3202 etc/inc/shaper.inc:3450 +#: etc/inc/shaper.inc:3203 etc/inc/shaper.inc:3451 etc/inc/shaper.inc:3210 +#: etc/inc/shaper.inc:3458 etc/inc/shaper.inc:3278 etc/inc/shaper.inc:3526 +#: etc/inc/shaper.inc:3334 etc/inc/shaper.inc:3607 etc/inc/shaper.inc:3360 +#: etc/inc/shaper.inc:3633 +msgid "Mask" +msgstr "Máscara" + +#: etc/inc/shaper.inc:3056 etc/inc/shaper.inc:3293 etc/inc/shaper.inc:3064 +#: etc/inc/shaper.inc:3305 etc/inc/shaper.inc:3212 etc/inc/shaper.inc:3460 +#: etc/inc/shaper.inc:3213 etc/inc/shaper.inc:3461 etc/inc/shaper.inc:3220 +#: etc/inc/shaper.inc:3468 etc/inc/shaper.inc:3288 etc/inc/shaper.inc:3536 +#: etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3618 etc/inc/shaper.inc:3371 +#: etc/inc/shaper.inc:3644 +msgid "Source addresses" +msgstr "Endereços fonte" + +#: etc/inc/shaper.inc:3060 etc/inc/shaper.inc:3297 etc/inc/shaper.inc:3068 +#: etc/inc/shaper.inc:3309 etc/inc/shaper.inc:3216 etc/inc/shaper.inc:3464 +#: etc/inc/shaper.inc:3217 etc/inc/shaper.inc:3465 etc/inc/shaper.inc:3224 +#: etc/inc/shaper.inc:3472 etc/inc/shaper.inc:3292 etc/inc/shaper.inc:3540 +#: etc/inc/shaper.inc:3349 etc/inc/shaper.inc:3622 etc/inc/shaper.inc:3375 +#: etc/inc/shaper.inc:3648 +msgid "Destination addresses" +msgstr "Endereços de destino" + +#: etc/inc/shaper.inc:3063 etc/inc/shaper.inc:3300 etc/inc/shaper.inc:3071 +#: etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3219 etc/inc/shaper.inc:3467 +#: etc/inc/shaper.inc:3220 etc/inc/shaper.inc:3468 etc/inc/shaper.inc:3227 +#: etc/inc/shaper.inc:3475 etc/inc/shaper.inc:3295 etc/inc/shaper.inc:3543 +msgid "" +"If 'source' or 'destination' is chosen, \n" +"a dynamic pipe with the bandwidth, delay, packet loss and queue size given above will \n" +"be created for each source/destination IP address encountered, \n" +"respectively. This makes it possible to easily specify bandwidth \n" +"limits per host." +msgstr "" +"Se 'origem' ou 'destino' é escolhido, \n" +"um pipe dinâmico com o tamanho de banda, atraso, perda de pacote e tamanho de fila dado acima serão \n" +"criados para cada endereço IP de origem/destino encontrado, \n" +"respectivamente. Isso faz com que seja possível especificar facilmente os limites de \n" +"tamanho de banda por host." + +#: etc/inc/shaper.inc:3075 etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3507 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:124 +#: usr/local/www/firewall_virtual_ip_edit.php:541 +#: usr/local/www/services_wol_edit.php:151 +#: usr/local/www/interfaces_gif_edit.php:211 +#: usr/local/www/interfaces_gre_edit.php:222 +#: usr/local/www/interfaces_groups_edit.php:264 +#: usr/local/www/firewall_aliases_edit.php:596 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +#: usr/local/www/firewall_nat_edit.php:772 +#: usr/local/www/firewall_nat_out_edit.php:639 +#: usr/local/www/firewall_schedule_edit.php:796 +#: usr/local/www/firewall_schedule_edit.php:970 +#: usr/local/www/interfaces_vlan_edit.php:182 +#: usr/local/www/system_routes_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:342 +#: usr/local/www/interfaces_wireless_edit.php:188 +#: usr/local/www/services_dhcp_edit.php:245 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_igmpproxy_edit.php:180 +#: usr/local/www/system_gateway_groups_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:264 +#: usr/local/www/services_dhcpv6_edit.php:222 etc/inc/shaper.inc:3083 +#: etc/inc/shaper.inc:3324 etc/inc/shaper.inc:3519 +#: usr/local/www/system_routes_edit.php:310 +#: usr/local/www/system_gateway_groups_edit.php:278 +#: usr/local/www/services_dnsmasq_edit.php:221 +#: usr/local/www/firewall_nat_1to1_edit.php:450 +#: usr/local/www/services_dhcpv6_edit.php:231 +#: usr/local/www/firewall_nat_npt_edit.php:269 +#: usr/local/www/firewall_nat_out_edit.php:652 +#: usr/local/www/services_igmpproxy_edit.php:182 +#: usr/local/www/firewall_aliases_edit.php:601 +#: usr/local/www/firewall_nat_edit.php:779 +#: usr/local/www/services_dhcp_edit.php:254 +#: usr/local/www/firewall_virtual_ip_edit.php:529 +#: usr/local/www/interfaces_gre_edit.php:221 etc/inc/shaper.inc:3231 +#: etc/inc/shaper.inc:3479 etc/inc/shaper.inc:3674 +#: usr/local/www/system_routes_edit.php:311 +#: usr/local/www/system_gateway_groups_edit.php:338 +#: usr/local/www/interfaces_vlan_edit.php:183 +#: usr/local/www/services_dnsmasq_edit.php:222 +#: usr/local/www/firewall_nat_1to1_edit.php:448 +#: usr/local/www/services_dhcpv6_edit.php:233 +#: usr/local/www/firewall_nat_npt_edit.php:268 +#: usr/local/www/interfaces_qinq_edit.php:343 +#: usr/local/www/interfaces_gif_edit.php:212 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:154 +#: usr/local/www/firewall_schedule_edit.php:795 +#: usr/local/www/firewall_schedule_edit.php:969 +#: usr/local/www/firewall_aliases_edit.php:604 +#: usr/local/www/interfaces_groups_edit.php:265 +#: usr/local/www/firewall_nat_edit.php:778 +#: usr/local/www/services_dhcp_edit.php:256 +#: usr/local/www/firewall_virtual_ip_edit.php:474 +#: usr/local/www/interfaces_wireless_edit.php:190 +#: usr/local/www/services_dhcpv6_edit.php:236 +#: usr/local/www/interfaces_vlan_edit.php:186 +#: usr/local/www/firewall_nat_edit.php:773 +#: usr/local/www/interfaces_gif_edit.php:223 +#: usr/local/www/services_dhcp_edit.php:384 +#: usr/local/www/firewall_virtual_ip_edit.php:466 +#: usr/local/www/firewall_nat_out_edit.php:654 +#: usr/local/www/interfaces_qinq_edit.php:346 etc/inc/shaper.inc:3232 +#: etc/inc/shaper.inc:3480 etc/inc/shaper.inc:3675 +#: usr/local/www/firewall_nat_edit.php:785 +#: usr/local/www/firewall_virtual_ip_edit.php:486 +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/system_gateway_groups_edit.php:339 +#: usr/local/www/firewall_aliases_edit.php:635 +#: usr/local/www/firewall_nat_out_edit.php:666 etc/inc/shaper.inc:3239 +#: etc/inc/shaper.inc:3487 etc/inc/shaper.inc:3682 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/system_routes_edit.php:343 etc/inc/shaper.inc:3307 +#: etc/inc/shaper.inc:3555 etc/inc/shaper.inc:3750 +#: usr/local/www/system_routes_edit.php:345 etc/inc/shaper.inc:3384 +#: etc/inc/shaper.inc:3657 etc/inc/shaper.inc:3855 +#: usr/local/www/firewall_virtual_ip_edit.php:491 +#: usr/local/www/firewall_aliases_edit.php:634 etc/inc/shaper.inc:3410 +#: etc/inc/shaper.inc:3683 etc/inc/shaper.inc:3881 +msgid "You may enter a description here for your reference (not parsed)." +msgstr "Você pode inserir uma descrição aqui para sua referência (não analisado)." + +#: etc/inc/shaper.inc:3081 etc/inc/shaper.inc:3318 +#: usr/local/www/interfaces_bridge_edit.php:281 +#: usr/local/www/interfaces_ppps_edit.php:738 etc/inc/shaper.inc:3089 +#: etc/inc/shaper.inc:3330 usr/local/www/interfaces_bridge_edit.php:290 +#: etc/inc/shaper.inc:3237 etc/inc/shaper.inc:3485 +#: usr/local/www/interfaces_ppps_edit.php:739 +#: usr/local/www/interfaces_bridge_edit.php:291 +#: usr/local/www/interfaces_ppps_edit.php:745 +#: usr/local/www/interfaces_bridge_edit.php:292 etc/inc/shaper.inc:3238 +#: etc/inc/shaper.inc:3486 etc/inc/shaper.inc:3245 etc/inc/shaper.inc:3493 +#: usr/local/www/interfaces_ppps_edit.php:743 +#: usr/local/www/interfaces_bridge_edit.php:294 etc/inc/shaper.inc:3313 +#: etc/inc/shaper.inc:3561 etc/inc/shaper.inc:3390 etc/inc/shaper.inc:3663 +#: etc/inc/shaper.inc:3416 etc/inc/shaper.inc:3689 +msgid "Show advanced options" +msgstr "Exibir opções avançadas" + +#: etc/inc/shaper.inc:3085 etc/inc/shaper.inc:3093 +#: usr/local/www/status_ntpd.php:115 etc/inc/shaper.inc:3241 +#: usr/local/www/status_ntpd.php:131 etc/inc/shaper.inc:3242 +#: usr/local/www/status_ntpd.php:137 etc/inc/shaper.inc:3249 +#: etc/inc/shaper.inc:3317 etc/inc/shaper.inc:3394 etc/inc/shaper.inc:3420 +msgid "Delay" +msgstr "Atraso" + +#: etc/inc/shaper.inc:3089 etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3245 +#: etc/inc/shaper.inc:3246 etc/inc/shaper.inc:3253 etc/inc/shaper.inc:3321 +#: etc/inc/shaper.inc:3398 etc/inc/shaper.inc:3424 +msgid "Hint: in most cases, you should specify 0 here (or leave the field empty)" +msgstr "Dica: na maioria dos casos, você deve especificar 0 aqui (ou deixe o campo vazio)" + +#: etc/inc/shaper.inc:3093 etc/inc/shaper.inc:3329 etc/inc/shaper.inc:3101 +#: etc/inc/shaper.inc:3341 etc/inc/shaper.inc:3249 etc/inc/shaper.inc:3496 +#: etc/inc/shaper.inc:3250 etc/inc/shaper.inc:3497 etc/inc/shaper.inc:3257 +#: etc/inc/shaper.inc:3504 etc/inc/shaper.inc:3325 etc/inc/shaper.inc:3572 +#: etc/inc/shaper.inc:3402 etc/inc/shaper.inc:3674 etc/inc/shaper.inc:3428 +#: etc/inc/shaper.inc:3700 +msgid "Packet loss rate" +msgstr "Taxa de perda de pacote" + +#: etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3333 etc/inc/shaper.inc:3105 +#: etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3253 etc/inc/shaper.inc:3500 +#: etc/inc/shaper.inc:3254 etc/inc/shaper.inc:3501 etc/inc/shaper.inc:3261 +#: etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3329 etc/inc/shaper.inc:3576 +#: etc/inc/shaper.inc:3406 etc/inc/shaper.inc:3678 etc/inc/shaper.inc:3432 +#: etc/inc/shaper.inc:3704 +msgid "Hint: in most cases, you should specify 0 here (or leave the field empty). A value of 0.001 means one packet in 1000 gets dropped" +msgstr "Dica: na maioria dos casos, você deve especificar 0 aqui (ou deixe o campo vazio). Um valor de 0.001 significa um pacote em 1000 é descartado" + +#: etc/inc/shaper.inc:3102 etc/inc/shaper.inc:3338 etc/inc/shaper.inc:3110 +#: etc/inc/shaper.inc:3350 etc/inc/shaper.inc:3258 etc/inc/shaper.inc:3505 +#: etc/inc/shaper.inc:3259 etc/inc/shaper.inc:3506 etc/inc/shaper.inc:3266 +#: etc/inc/shaper.inc:3513 etc/inc/shaper.inc:3334 etc/inc/shaper.inc:3581 +#: etc/inc/shaper.inc:3411 etc/inc/shaper.inc:3683 etc/inc/shaper.inc:3437 +#: etc/inc/shaper.inc:3709 +msgid "Queue Size" +msgstr "Tamanho da Fila" + +#: etc/inc/shaper.inc:3107 etc/inc/shaper.inc:3343 etc/inc/shaper.inc:3115 +#: etc/inc/shaper.inc:3355 etc/inc/shaper.inc:3263 etc/inc/shaper.inc:3510 +#: etc/inc/shaper.inc:3264 etc/inc/shaper.inc:3511 etc/inc/shaper.inc:3271 +#: etc/inc/shaper.inc:3518 etc/inc/shaper.inc:3339 etc/inc/shaper.inc:3586 +#: etc/inc/shaper.inc:3416 etc/inc/shaper.inc:3688 etc/inc/shaper.inc:3442 +#: etc/inc/shaper.inc:3714 +msgid "Hint: in most cases, you should leave the field empty. All packets in this pipe are placed into a fixed-size queue first, then they are delayed by value specified in the Delay field, and then they are delivered to their destination." +msgstr "Dica: na maioria dos casos, você deve deixar o campo vazio. Todos os pacotes nesse pipe são colocados em uma lista de tamanho fixo primeiro, então eles são atrasados com o valor especificado no campo Atraso, e então eles são entregues aos seus destinos." + +#: etc/inc/shaper.inc:3113 etc/inc/shaper.inc:3349 etc/inc/shaper.inc:3121 +#: etc/inc/shaper.inc:3361 etc/inc/shaper.inc:3269 etc/inc/shaper.inc:3516 +#: etc/inc/shaper.inc:3270 etc/inc/shaper.inc:3517 etc/inc/shaper.inc:3277 +#: etc/inc/shaper.inc:3524 etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3592 +#: etc/inc/shaper.inc:3422 etc/inc/shaper.inc:3694 etc/inc/shaper.inc:3448 +#: etc/inc/shaper.inc:3720 +msgid "Bucket Size" +msgstr "Tamanho do bucket" + +#: etc/inc/shaper.inc:3118 etc/inc/shaper.inc:3354 etc/inc/shaper.inc:3126 +#: etc/inc/shaper.inc:3366 etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3521 +#: etc/inc/shaper.inc:3275 etc/inc/shaper.inc:3522 etc/inc/shaper.inc:3282 +#: etc/inc/shaper.inc:3529 etc/inc/shaper.inc:3350 etc/inc/shaper.inc:3597 +#: etc/inc/shaper.inc:3427 etc/inc/shaper.inc:3699 etc/inc/shaper.inc:3453 +#: etc/inc/shaper.inc:3725 +msgid "Hint: in most cases, you should leave the field empty. It increases the hash size set." +msgstr "Dica: na maioria dos casos, você deve deixar o campo vazio. Ele aumenta o conjunto de tamanhos de hash." + +#: etc/inc/shaper.inc:3176 etc/inc/shaper.inc:3184 etc/inc/shaper.inc:3339 +#: etc/inc/shaper.inc:3340 etc/inc/shaper.inc:3347 etc/inc/shaper.inc:3415 +#: etc/inc/shaper.inc:3495 etc/inc/shaper.inc:3521 +msgid "Weight must be an integer between 1 and 100." +msgstr "Peso deve ser um inteiro entre 1 e 100." + +#: etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3282 etc/inc/shaper.inc:3437 +#: etc/inc/shaper.inc:3438 etc/inc/shaper.inc:3445 etc/inc/shaper.inc:3513 +#: etc/inc/shaper.inc:3594 etc/inc/shaper.inc:3620 +msgid "Enable/Disable queue" +msgstr "Habilita/Desabilita fila" + +#: etc/inc/shaper.inc:3289 usr/local/www/firewall_rules.php:760 +#: usr/local/www/firewall_rules_edit.php:1224 +#: usr/local/www/firewall_rules_edit.php:1231 +#: usr/local/www/diag_system_pftop.php:107 +#: usr/local/www/interfaces_lagg_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:234 +#: usr/local/www/vpn_openvpn_client.php:519 etc/inc/shaper.inc:3301 +#: usr/local/www/firewall_rules_edit.php:1259 +#: usr/local/www/firewall_rules_edit.php:1266 +#: usr/local/www/firewall_rules.php:757 +#: usr/local/www/load_balancer_virtual_server_edit.php:223 +#: usr/local/www/vpn_openvpn_client.php:524 etc/inc/shaper.inc:3456 +#: usr/local/www/vpn_ipsec_mobile.php:403 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/firewall_rules.php:750 +#: usr/local/www/load_balancer_virtual_server_edit.php:221 +#: usr/local/www/vpn_openvpn_client.php:542 +#: usr/local/www/vpn_openvpn_client.php:561 +#: usr/local/www/firewall_rules_edit.php:1274 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/interfaces_lagg_edit.php:215 etc/inc/shaper.inc:3457 +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1289 +#: usr/local/www/firewall_rules.php:749 etc/inc/shaper.inc:3464 +#: usr/local/www/firewall_rules_edit.php:1282 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/interfaces_lagg_edit.php:214 etc/inc/shaper.inc:3532 +#: etc/inc/shaper.inc:3614 usr/local/www/firewall_rules_edit.php:1330 +#: usr/local/www/firewall_rules_edit.php:1336 etc/inc/shaper.inc:3640 +msgid "none" +msgstr "nenhum" + +#: etc/inc/shaper.inc:3321 usr/local/www/system_gateways_edit.php:424 +#: etc/inc/shaper.inc:3333 usr/local/www/system_gateways_edit.php:445 +#: etc/inc/shaper.inc:3488 usr/local/www/system_gateways_edit.php:551 +#: usr/local/www/system_gateways_edit.php:555 etc/inc/shaper.inc:3489 +#: usr/local/www/system_gateways_edit.php:557 etc/inc/shaper.inc:3496 +#: usr/local/www/system_gateways_edit.php:587 etc/inc/shaper.inc:3564 +#: etc/inc/shaper.inc:3666 etc/inc/shaper.inc:3692 +msgid "Weight" +msgstr "Peso" + +#: etc/inc/shaper.inc:3325 etc/inc/shaper.inc:3337 etc/inc/shaper.inc:3492 +#: etc/inc/shaper.inc:3493 etc/inc/shaper.inc:3500 etc/inc/shaper.inc:3568 +#: etc/inc/shaper.inc:3670 etc/inc/shaper.inc:3696 +msgid "Hint: For queues under the same parent this specifies the share that a queue gets(values range from 1 to 100, you can leave it blank otherwise)" +msgstr "Dica: Para filas abaixo do mesmo pai, isso especifica o compartilhamento que a fila obtém (o intervalo de valores é de 1 a 100, do contrário, você pode deixá-lo em branco)" + +#: etc/inc/shaper.inc:3353 etc/inc/shaper.inc:3365 etc/inc/shaper.inc:3520 +#: etc/inc/shaper.inc:3521 etc/inc/shaper.inc:3528 etc/inc/shaper.inc:3596 +#: etc/inc/shaper.inc:3698 etc/inc/shaper.inc:3724 +msgid "slots" +msgstr "slots" + +#: etc/inc/shaper.inc:3494 etc/inc/shaper.inc:3506 etc/inc/shaper.inc:3661 +#: etc/inc/shaper.inc:3662 etc/inc/shaper.inc:3669 etc/inc/shaper.inc:3737 +#: etc/inc/shaper.inc:3842 etc/inc/shaper.inc:3868 +msgid "Enable/Disable layer7 Container" +msgstr "Habilitar/Desabilitar Contêiner de layer7" + +#: etc/inc/shaper.inc:3744 etc/inc/shaper.inc:3756 etc/inc/shaper.inc:3911 +#: etc/inc/shaper.inc:3912 etc/inc/shaper.inc:3919 etc/inc/shaper.inc:3987 +#: etc/inc/shaper.inc:4092 etc/inc/shaper.inc:4118 +#, php-format +msgid "Sending HUP signal to %s" +msgstr "Enviando sinal HUP para %s" + +#: etc/inc/shaper.inc:4052 etc/inc/shaper.inc:4112 etc/inc/shaper.inc:4269 +#: etc/inc/shaper.inc:4270 etc/inc/shaper.inc:4277 etc/inc/shaper.inc:4345 +#: etc/inc/shaper.inc:4450 etc/inc/shaper.inc:4476 +msgid " Clone shaper/queue on this interface" +msgstr " Modelador/fila de clone nessa interface" + +#: etc/inc/shaper.inc:4060 etc/inc/shaper.inc:4067 etc/inc/shaper.inc:4120 +#: etc/inc/shaper.inc:4127 etc/inc/shaper.inc:4277 etc/inc/shaper.inc:4284 +#: etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285 etc/inc/shaper.inc:4292 +#: etc/inc/shaper.inc:4353 etc/inc/shaper.inc:4360 etc/inc/shaper.inc:4458 +#: etc/inc/shaper.inc:4465 etc/inc/shaper.inc:4484 etc/inc/shaper.inc:4491 +#, php-format +msgid "Welcome to the %s Traffic Shaper." +msgstr "Bem-vindo ao Traffic Shaper %s." + +#: etc/inc/shaper.inc:4061 etc/inc/shaper.inc:4068 etc/inc/shaper.inc:4121 +#: etc/inc/shaper.inc:4128 etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285 +#: etc/inc/shaper.inc:4279 etc/inc/shaper.inc:4286 etc/inc/shaper.inc:4293 +#: etc/inc/shaper.inc:4354 etc/inc/shaper.inc:4361 etc/inc/shaper.inc:4459 +#: etc/inc/shaper.inc:4466 etc/inc/shaper.inc:4485 etc/inc/shaper.inc:4492 +msgid "The tree on the left helps you navigate through the queues
    buttons at the bottom represent queue actions and are activated accordingly." +msgstr "A árvore do lado esquerdo ajuda-o a navegar através das filas
    botões no rodapé representam ações de filas e são ativados de acordo com as filas." + +#: etc/inc/system.inc:430 etc/inc/system.inc:449 etc/inc/system.inc:457 +#, php-format +msgid "Static Routes: Gateway IP could not be found for %s" +msgstr "Rotas estáticas: IP do Gateway não pôde ser encontrado para %s" + +#: etc/inc/system.inc:497 etc/inc/system.inc:529 etc/inc/system.inc:533 +#: etc/inc/system.inc:547 +msgid "Starting syslog..." +msgstr "Iniciando syslog..." + +#: etc/inc/system.inc:536 etc/inc/system.inc:568 etc/inc/system.inc:572 +#: etc/inc/system.inc:695 +#, php-format +msgid "Error: cannot open syslog.conf in system_syslogd_start().%s" +msgstr "Erro: Não pôde abrir syslog.conf em system_syslogd_start().%s" + +#: etc/inc/system.inc:664 etc/inc/system.inc:712 etc/inc/system.inc:716 +#: etc/inc/system.inc:725 +msgid "Initializing PCMCIA..." +msgstr "Inicializando PCMCIA..." + +#: etc/inc/system.inc:676 etc/inc/system.inc:761 etc/inc/system.inc:1412 +#: etc/inc/system.inc:1415 etc/inc/system.inc:724 etc/inc/system.inc:808 +#: etc/inc/system.inc:1469 etc/inc/system.inc:1472 etc/inc/system.inc:728 +#: etc/inc/system.inc:806 etc/inc/system.inc:1511 etc/inc/system.inc:1514 +#: etc/inc/system.inc:737 etc/inc/system.inc:817 etc/inc/system.inc:1460 +#: etc/inc/system.inc:1463 etc/inc/system.inc:1487 etc/inc/system.inc:1490 +msgid "failed!" +msgstr "falhou!" + +#: etc/inc/system.inc:687 etc/inc/system.inc:735 etc/inc/system.inc:739 +#: etc/inc/system.inc:748 +msgid "Starting webConfigurator..." +msgstr "Iniciando webConfigurator..." + +#: etc/inc/system.inc:719 etc/inc/system.inc:767 etc/inc/system.inc:771 +#: etc/inc/system.inc:775 +msgid "webConfigurator default" +msgstr "webConfigurator padrão" + +#: etc/inc/system.inc:729 etc/inc/system.inc:777 etc/inc/system.inc:781 +#: etc/inc/system.inc:785 +msgid "Importing HTTPS certificate" +msgstr "Importar certificados HTTPS" + +#: etc/inc/system.inc:1115 etc/inc/system.inc:1167 etc/inc/system.inc:1147 +#: etc/inc/system.inc:1096 etc/inc/system.inc:1103 +#, php-format +msgid "Error: cannot open cert.pem in system_webgui_start().%s" +msgstr "Erro: não pôde abrir cert.pem em system_webgui_start().%s" + +#: etc/inc/system.inc:1126 etc/inc/system.inc:1178 etc/inc/system.inc:1158 +#: etc/inc/system.inc:1107 etc/inc/system.inc:1114 +#, php-format +msgid "Error: cannot open ca.pem in system_webgui_start().%s" +msgstr "Erro: não pôde abrir ca.pem em system_webgui_start().%s" + +#: etc/inc/system.inc:1134 etc/inc/system.inc:1186 etc/inc/system.inc:1166 +#: etc/inc/system.inc:1115 etc/inc/system.inc:1122 +msgid "ssl configuration" +msgstr "configuração ssl" + +#: etc/inc/system.inc:1161 etc/inc/system.inc:1213 etc/inc/system.inc:1193 +#: etc/inc/system.inc:1142 etc/inc/system.inc:1169 +#, php-format +msgid "Error: cannot open %s in system_generate_lighty_config().%s" +msgstr "Erro: não pôde abrir %s em system_generate_lighty_config().%s" + +#: etc/inc/system.inc:1181 etc/inc/system.inc:1233 etc/inc/system.inc:1213 +#: etc/inc/system.inc:1162 etc/inc/system.inc:1189 +msgid "Setting timezone..." +msgstr "Configurando fuso horário..." + +#: etc/inc/system.inc:1270 etc/inc/system.inc:1326 etc/inc/system.inc:1368 +#: etc/inc/system.inc:1310 etc/inc/system.inc:1337 +msgid "Syncing system time before startup..." +msgstr "Sincronizando horário do sistema antes de iniciar..." + +#: etc/inc/system.inc:1376 etc/inc/system.inc:1433 etc/inc/system.inc:1475 +#: etc/inc/system.inc:1424 etc/inc/system.inc:1451 +#, php-format +msgid "Error: cannot open dmesg.boot in system_dmesg_save().%s" +msgstr "Erro: não pôde abrir dmesg.boot em system_dmesg_save().%s" + +#: etc/inc/system.inc:1397 etc/inc/system.inc:1454 etc/inc/system.inc:1496 +#: etc/inc/system.inc:1445 etc/inc/system.inc:1472 +msgid "Setting hard disk standby... " +msgstr "Configurando modo de espera do disco rígido..." + +#: etc/inc/system.inc:1514 etc/inc/system.inc:1571 etc/inc/system.inc:1613 +#: etc/inc/system.inc:1562 etc/inc/system.inc:1589 +msgid "Generic PC" +msgstr "PC Genérico" + +#: etc/inc/system.inc:1517 etc/inc/system.inc:1574 etc/inc/system.inc:1616 +#: etc/inc/system.inc:1565 etc/inc/system.inc:1592 +msgid "Generic PC (CD-ROM)" +msgstr "PC Genérico (CD-ROM)" + +# Trata-se de um modelo de RouterBoard, acho válido preservar o modelo. +#: etc/inc/system.inc:1526 etc/inc/system.inc:1583 etc/inc/system.inc:1625 +#: etc/inc/system.inc:1574 etc/inc/system.inc:1601 +msgid "PC Engines WRAP" +msgstr "PC Engines WRAP" + +# Trata-se de um modelo de RouterBoard, acho prudente preservar o modelo. +#: etc/inc/system.inc:1529 etc/inc/system.inc:1586 etc/inc/system.inc:1628 +#: etc/inc/system.inc:1577 etc/inc/system.inc:1604 +msgid "PC Engines ALIX" +msgstr "Pc Engines ALIX" + +#: etc/inc/system.inc:1541 etc/inc/system.inc:1598 etc/inc/system.inc:1640 +#: etc/inc/system.inc:1589 etc/inc/system.inc:1616 +msgid "embedded (unknown)" +msgstr "embarcado (desconhecido)" + +#: etc/inc/util.inc:99 etc/inc/util.inc:101 +#, php-format +msgid "WARNING: Could not mark subsystem: %s dirty" +msgstr "ADVERTÊNCIA: Não pôde marcar subsistema: %s sujo" + +#: etc/inc/util.inc:119 etc/inc/util.inc:121 +msgid "WARNING: You must give a name as parameter to lock() function." +msgstr "ADVERTÊNCIA: Você deve dar um nome como parâmetro para a função lock()." + +#: etc/inc/util.inc:213 etc/inc/util.inc:208 etc/inc/util.inc:238 +#: etc/inc/util.inc:240 +#, php-format +msgid "Reference %s is going negative, not doing unreference." +msgstr "Referência %s está se tornando negavita, não desreferenciando." + +#: etc/inc/util.inc:980 etc/inc/util.inc:981 etc/inc/util.inc:1026 +#: etc/inc/util.inc:1076 etc/inc/util.inc:1080 etc/inc/util.inc:1084 +#, php-format +msgid "The command '%1$s' returned exit code '%2$d', the output was '%3$s' " +msgstr "O comando '%1$s' retornou o código de saída '%2$d', a saída foi '%3$s' " + +#: etc/inc/vpn.inc:126 etc/inc/vpn.inc:134 etc/inc/vpn.inc:133 +#: etc/inc/vpn.inc:135 +msgid "Configuring IPsec VPN... " +msgstr "Configurando VPN do IPsec..." + +#: etc/inc/vpn.inc:229 etc/inc/vpn.inc:228 etc/inc/vpn.inc:238 +#: etc/inc/vpn.inc:237 etc/inc/vpn.inc:236 +#, php-format +msgid "Error: Invalid certificate info for %s" +msgstr "Erro: Info de certificado inválido para %s" + +#: etc/inc/vpn.inc:235 etc/inc/vpn.inc:234 etc/inc/vpn.inc:244 +#: etc/inc/vpn.inc:243 etc/inc/vpn.inc:242 +#, php-format +msgid "Error: Invalid certificate hash info for %s" +msgstr "Erro: Info de hash de certificado inválido para %s" + +#: etc/inc/vpn.inc:240 etc/inc/vpn.inc:239 etc/inc/vpn.inc:249 +#: etc/inc/vpn.inc:248 etc/inc/vpn.inc:247 +#, php-format +msgid "Error: Cannot write IPsec CA file for %s" +msgstr "Erro: Não pode escrever arquivo de IPsec CA para %s" + +#: etc/inc/vpn.inc:249 etc/inc/vpn.inc:248 +#, php-format +msgid "Error: cannot open psk.txt in vpn_ipsec_configure()." +msgstr "Erro: não pode abrir psk.txt em vpn_ipsec_configure()." + +#: etc/inc/vpn.inc:312 etc/inc/vpn.inc:311 +#, php-format +msgid "Error: cannot open racoon.conf in vpn_ipsec_configure()." +msgstr "Erro: não pode abrir racoon.conf em vpn_ipsec_configure()." + +#: etc/inc/vpn.inc:404 etc/inc/vpn.inc:403 +#, php-format +msgid "Error: cannot open server %s in vpn.\n" +msgstr "Erro: não foi possível abrir servidor %s na vpn.\n" + +#: etc/inc/vpn.inc:560 etc/inc/vpn.inc:559 etc/inc/vpn.inc:546 +#: etc/inc/vpn.inc:549 etc/inc/vpn.inc:548 etc/inc/vpn.inc:550 +#, php-format +msgid "Error: Invalid phase1 certificate reference for %s" +msgstr "Erro: Referência de certificado da fase1 inválida para %s" + +#: etc/inc/vpn.inc:569 etc/inc/vpn.inc:568 etc/inc/vpn.inc:555 +#: etc/inc/vpn.inc:558 etc/inc/vpn.inc:557 etc/inc/vpn.inc:559 +#, php-format +msgid "Error: Cannot write phase1 certificate file for %s" +msgstr "Erro: Não pode escrever arquivo de certificado da fase1 para %s" + +#: etc/inc/vpn.inc:580 etc/inc/vpn.inc:579 etc/inc/vpn.inc:566 +#: etc/inc/vpn.inc:569 etc/inc/vpn.inc:568 etc/inc/vpn.inc:570 +#, php-format +msgid "Error: Cannot write phase1 key file for %s" +msgstr "Erro: Não pode escrever arquivo de chave da fase1 para %s" + +#: etc/inc/vpn.inc:593 etc/inc/vpn.inc:592 etc/inc/vpn.inc:579 +#: etc/inc/vpn.inc:582 etc/inc/vpn.inc:581 etc/inc/vpn.inc:583 +#, php-format +msgid "Error: Cannot write phase1 CA certificate file for %s" +msgstr "Erro: não foi possível escrever o arquivo certificado CA phase1 para %s " + +#: etc/inc/vpn.inc:826 etc/inc/vpn.inc:829 +#, php-format +msgid "Error: cannot open spd.conf in vpn_ipsec_configure()." +msgstr "Erro: não foi possível abrir spd.conf na vpn_ipsec_configure()." + +#: etc/inc/vpn.inc:1008 etc/inc/vpn.inc:1014 etc/inc/vpn.inc:1013 +#: etc/inc/vpn.inc:1022 etc/inc/vpn.inc:1035 etc/inc/vpn.inc:1034 +#: etc/inc/vpn.inc:1036 +msgid "Forcefully reloading IPsec racoon daemon" +msgstr "Recarga forçada do processo IPsec racoon" + +#: etc/inc/vpn.inc:1052 etc/inc/vpn.inc:1058 etc/inc/vpn.inc:1056 +#: etc/inc/vpn.inc:1065 etc/inc/vpn.inc:1078 etc/inc/vpn.inc:1077 +#: etc/inc/vpn.inc:1079 +msgid "Configuring PPTP VPN service... " +msgstr "Configurando o serviço PPTP VPN..." + +#: etc/inc/vpn.inc:1062 etc/inc/vpn.inc:1068 etc/inc/vpn.inc:1066 +#: etc/inc/vpn.inc:1075 etc/inc/vpn.inc:1088 etc/inc/vpn.inc:1087 +#: etc/inc/vpn.inc:1089 +msgid "Could not kill mpd within 3 seconds. Trying again." +msgstr "Não foi possível matar mpd em 3 segundos. Tente novamente." + +#: etc/inc/vpn.inc:1085 etc/inc/vpn.inc:1091 etc/inc/vpn.inc:1089 +#: etc/inc/vpn.inc:1098 etc/inc/vpn.inc:1111 etc/inc/vpn.inc:1110 +#: etc/inc/vpn.inc:1112 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_pptpd_configure()." +msgstr "Erro: não pôde abrir mdp.conf em vpn_pptpd_configure()." + +#: etc/inc/vpn.inc:1198 etc/inc/vpn.inc:1204 etc/inc/vpn.inc:1202 +#: etc/inc/vpn.inc:1212 etc/inc/vpn.inc:1225 etc/inc/vpn.inc:1224 +#: etc/inc/vpn.inc:1226 +#, php-format +msgid "Error: cannot open mpd.links in vpn_pptpd_configure()." +msgstr "Erro: não pôde abrir mpd.links em vpn_pptpd_configure()." + +#: etc/inc/vpn.inc:1222 etc/inc/vpn.inc:1228 etc/inc/vpn.inc:1226 +#: etc/inc/vpn.inc:1237 etc/inc/vpn.inc:1250 etc/inc/vpn.inc:1249 +#: etc/inc/vpn.inc:1251 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_pptpd_configure()." +msgstr "Erro: não pôde abrir mpd.secret em vpn_pptpd_configure()." + +#: etc/inc/vpn.inc:1279 etc/inc/vpn.inc:1285 etc/inc/vpn.inc:1283 +#: etc/inc/vpn.inc:1295 etc/inc/vpn.inc:1308 etc/inc/vpn.inc:1307 +#: etc/inc/vpn.inc:1309 +msgid "Configuring PPPoE VPN service... " +msgstr "Configurando serviço PPPoE da VPN..." + +#: etc/inc/vpn.inc:1303 etc/inc/vpn.inc:1309 etc/inc/vpn.inc:1307 +#: etc/inc/vpn.inc:1319 etc/inc/vpn.inc:1332 etc/inc/vpn.inc:1331 +#: etc/inc/vpn.inc:1333 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_pppoe_configure()." +msgstr "Erro: não se pode abrir mpd.conf em vpn_pppoe_configure()." + +#: etc/inc/vpn.inc:1406 etc/inc/vpn.inc:1412 etc/inc/vpn.inc:1410 +#: etc/inc/vpn.inc:1423 etc/inc/vpn.inc:1436 etc/inc/vpn.inc:1435 +#: etc/inc/vpn.inc:1437 +#, php-format +msgid "Error: cannot open mpd.links in vpn_pppoe_configure()." +msgstr "Erro: não se pode abrir mpd.links em vpn_pppoe_configure()." + +#: etc/inc/vpn.inc:1432 etc/inc/vpn.inc:1438 etc/inc/vpn.inc:1436 +#: etc/inc/vpn.inc:1450 etc/inc/vpn.inc:1463 etc/inc/vpn.inc:1462 +#: etc/inc/vpn.inc:1464 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_pppoe_configure()." +msgstr "Erro: não se pode abrir mpd.secret em vpn_pppoe_configure()." + +#: etc/inc/vpn.inc:1460 usr/local/www/system_firmware_check.php:139 +#: etc/inc/vpn.inc:1470 etc/inc/vpn.inc:1468 +#: usr/local/www/system_firmware_check.php:141 etc/inc/vpn.inc:1483 +#: usr/local/www/system_firmware_check.php:133 etc/inc/vpn.inc:1496 +#: etc/inc/vpn.inc:1495 etc/inc/vpn.inc:1497 +msgid "done" +msgstr "feito" + +#: etc/inc/vpn.inc:1479 etc/inc/vpn.inc:1489 etc/inc/vpn.inc:1487 +#: etc/inc/vpn.inc:1502 etc/inc/vpn.inc:1515 etc/inc/vpn.inc:1514 +#: etc/inc/vpn.inc:1516 +msgid "Configuring l2tp VPN service... " +msgstr "Configurando o serviço VPN l2tp..." + +#: etc/inc/vpn.inc:1504 etc/inc/vpn.inc:1514 etc/inc/vpn.inc:1512 +#: etc/inc/vpn.inc:1527 etc/inc/vpn.inc:1540 etc/inc/vpn.inc:1539 +#: etc/inc/vpn.inc:1541 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_l2tp_configure()." +msgstr "Erro: não se pode abrir mpd.conf em vpn_l2tp_configure()." + +#: etc/inc/vpn.inc:1597 etc/inc/vpn.inc:1607 etc/inc/vpn.inc:1605 +#: etc/inc/vpn.inc:1621 etc/inc/vpn.inc:1634 etc/inc/vpn.inc:1633 +#: etc/inc/vpn.inc:1635 +#, php-format +msgid "Error: cannot open mpd.links in vpn_l2tp_configure()." +msgstr "Erro: não se pode abrir mpd.links em vpn_l2tp_configure()." + +#: etc/inc/vpn.inc:1622 etc/inc/vpn.inc:1632 etc/inc/vpn.inc:1630 +#: etc/inc/vpn.inc:1647 etc/inc/vpn.inc:1660 etc/inc/vpn.inc:1659 +#: etc/inc/vpn.inc:1661 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_l2tp_configure()." +msgstr "Erro: não se pode abrir mpd.secret em vpn_l2tp_configure()." + +#: etc/inc/vpn.inc:1769 etc/inc/vpn.inc:1779 etc/inc/vpn.inc:1764 +#: etc/inc/vpn.inc:1836 etc/inc/vpn.inc:1849 etc/inc/vpn.inc:1846 +#: etc/inc/vpn.inc:1848 +#, php-format +msgid "Could not determine VPN endpoint for '%s'" +msgstr "Não foi possível determinar o ponto final da VPN para '%s'" + +#: etc/inc/vpn.inc:1774 etc/inc/vpn.inc:1784 etc/inc/vpn.inc:1769 +#: etc/inc/vpn.inc:1841 etc/inc/vpn.inc:1854 etc/inc/vpn.inc:1851 +#: etc/inc/vpn.inc:1853 +#, php-format +msgid "IPSEC: ERROR: One of the endpoints is not a IP address. Old EP '%1$s' new EP '%2$s'" +msgstr "IPSEC: ERRO: Um dos endpoints não é um endereço IP. EP antigo '%1$s' EP novo '%2$s'" + +#: etc/inc/vpn.inc:1777 etc/inc/vpn.inc:1787 etc/inc/vpn.inc:1772 +#: etc/inc/vpn.inc:1844 etc/inc/vpn.inc:1857 etc/inc/vpn.inc:1854 +#: etc/inc/vpn.inc:1856 +#, php-format +msgid "IPSEC: ERROR: One of the remote endpoints is not a IP address. Old RG '%1$s' new RG '%2$s'" +msgstr "IPSEC: ERRO: Um dos endpoints remotos não é um endereço IP. RG antigo '%1$s' novo RG '%2$s'" + +#: etc/inc/vpn.inc:1833 etc/inc/vpn.inc:1843 etc/inc/vpn.inc:1835 +#: etc/inc/vpn.inc:1907 etc/inc/vpn.inc:1920 etc/inc/vpn.inc:1917 +#: etc/inc/vpn.inc:1919 +#, php-format +msgid "Reloading IPsec tunnel '%1$s'. Previous IP '%2$s', current IP '%3$s'. Reloading policy" +msgstr "Recarregando túnel IPsec '%1$s'. IP anterior '%2$s', IP atual '%3$s'. Recarregando política" + +#: etc/inc/xmlparse.inc:85 etc/inc/xmlparse_attr.inc:78 +#, php-format +msgid "XML error: %1$s at line %2$d cannot occur more than once" +msgstr "Erro de XML: %1$s na linha %2$d não pode aparecer mais de uma vez" + +#: etc/inc/xmlparse.inc:176 etc/inc/xmlparse_attr.inc:187 +msgid "Error: could not open XML input" +msgstr "Erro: não foi possível abrir a entrada XML" + +#: etc/inc/xmlparse.inc:182 +#, php-format +msgid "XML error: %1$s at line %2$d in %3$s" +msgstr "Erro de XML: %1$s na linha %2$d em %3$s" + +#: etc/inc/xmlparse.inc:198 etc/inc/xmlparse_attr.inc:210 +#: etc/inc/xmlparse.inc:199 +#, php-format +msgid "XML error: no %s object found!" +msgstr "Erro XML: objeto %s não encontrado!" + +#: etc/inc/xmlrpc_client.inc:152 +msgid "Unknown method" +msgstr "Método desconhecido" + +#: etc/inc/xmlrpc_client.inc:153 +msgid "Invalid return payload: enable debugging to examine incoming payload" +msgstr "Carga inválida retornada: habilite o debugging para examinar a carga de entrada" + +#: etc/inc/xmlrpc_client.inc:154 +msgid "Incorrect parameters passed to method" +msgstr "Parâmetros incorretos passados ao método" + +#: etc/inc/xmlrpc_client.inc:155 +msgid "Can't introspect: method unknown" +msgstr "Não foi possível analisar: método indefinido" + +#: etc/inc/xmlrpc_client.inc:156 +msgid "Didn't receive 200 OK from remote server." +msgstr "Não foi recebido 200 OK do servidor remoto." + +#: etc/inc/xmlrpc_client.inc:157 +msgid "The requested method didn't return an XML_RPC_Response object." +msgstr "O método solicitado não retorna um objeto XML_RPC_Response." + +#: etc/inc/xmlrpc_client.inc:158 +msgid "Invalid request payload" +msgstr "Carga solicitada inválida" + +#: etc/inc/xmlrpc_client.inc:260 +msgid "missing top level xmlrpc element" +msgstr "falta elemento de nível superior xmlrpc" + +#: etc/inc/xmlrpc_client.inc:268 +#, php-format +msgid "xmlrpc element %1$s cannot be child of %2$s" +msgstr "elemento xmlrpc %1$s não pode ser filho de %2$s" + +#: etc/inc/xmlrpc_client.inc:431 +msgid "Non-numeric value received in INT or DOUBLE" +msgstr "Recebido um valor não numérico em INT ou DOUBLE " + +#: etc/inc/xmlrpc_client.inc:860 +#, php-format +msgid "send()'s %s parameter must be an XML_RPC_Message object." +msgstr "send()'s %s parametro pode ser um objeto XML_RPC_Message." + +#: etc/inc/xmlrpc_client.inc:951 +#, php-format +msgid "" +"Connection to proxy server \n" +" %1$s:%2$s failed. %3$s" +msgstr "" +"Conexão com servidor proxy \n" +"%1$s:%2$s falhou. %3$s" + +#: etc/inc/xmlrpc_client.inc:957 +#, php-format +msgid "" +"Connection to RPC server \n" +" %1$s:%2$s failed. %3$s" +msgstr "" +"Conexão com servidor RPC \n" +"%1$s:%2$s falhou. %3$s" + +#: etc/inc/xmlrpc_client.inc:1330 +msgid "The submitted request did not contain this parameter" +msgstr "A requisição submetida não contêm esse parâmetro" + +#: etc/inc/xmlrpc_client.inc:1361 +msgid "mb_convert_encoding() is not available" +msgstr "mb_convert_enconding() não está disponível" + +#: etc/inc/xmlrpc_client.inc:1470 +#, php-format +msgid "HTTP error, got response: %s" +msgstr "Erro de HTTP, obteve resposta: %s" + +#: etc/inc/xmlrpc_client.inc:1496 +msgid "XML error at line 1, check URL" +msgstr "Erro de XML na linha 1, verificar URL" + +#: etc/inc/xmlrpc_client.inc:1591 etc/inc/xmlrpc_client.inc:1593 +msgid "Scalar can have only one value" +msgstr "Escalar pode ter apenas um valor" + +#: etc/inc/xmlrpc_client.inc:1598 etc/inc/xmlrpc_client.inc:1600 +#, php-format +msgid "Not a scalar type (%s)" +msgstr "Não é um tipo escalar (%s)" + +#: etc/inc/xmlrpc_client.inc:1634 etc/inc/xmlrpc_client.inc:1650 +#: etc/inc/xmlrpc_client.inc:1636 etc/inc/xmlrpc_client.inc:1652 +#, php-format +msgid "Already initialized as a [%s]" +msgstr "Já inicializado como um [%s]" + +#: etc/inc/xmlrpc_server.inc:48 +msgid "This method lists all the methods that the XML-RPC server knows how to dispatch" +msgstr "Esse método lista todos os métodos que o servidor XML-RPC sabe como enviar" + +#: etc/inc/xmlrpc_server.inc:66 +msgid "Returns an array of known signatures (an array of arrays) for the method name passed. If no signatures are known, returns a none-array (test for type != array to detect missing signature)" +msgstr "Retorna um matriz de assinaturas conhecidas (uma matriz de matrizes) para o nome do método apresentado. Se não houver assinaturas conhecidas, retorna uma matriz vazia (tipo de teste != matriz para detectar assinaturas perdidas) " + +#: etc/inc/xmlrpc_server.inc:86 +msgid "Returns help text if defined for the method passed, otherwise returns an empty string" +msgstr "Retorna o texto de ajuda se definido no método passado, senão retorna uma string vazia" + +#: etc/inc/authgui.inc:73 +msgid "No page assigned to this user! Click here to logout." +msgstr "Nenhuma página atribuída à este usuário! Clique aqui para fazer logout." + +#: etc/inc/authgui.inc:97 etc/inc/authgui.inc:103 +#, php-format +msgid "Error: %1$s Description: %2$s" +msgstr "Erro: %1$s Descrição: %2$s" + +#: etc/inc/authgui.inc:160 etc/inc/authgui.inc:159 etc/inc/authgui.inc:165 +msgid "unknown reason" +msgstr "razão desconhecida" + +#: etc/inc/authgui.inc:161 etc/inc/authgui.inc:160 etc/inc/authgui.inc:166 +#, php-format +msgid "Invalid login (%s)." +msgstr "Login inválido (%s)." + +#: etc/inc/authgui.inc:166 etc/inc/authgui.inc:165 etc/inc/authgui.inc:171 +#, php-format +msgid "This device is currently being maintained by: %s." +msgstr "O dispositivo atual esta sendo mantido por: %s." + +#: etc/inc/authgui.inc:214 etc/inc/authgui.inc:277 etc/inc/authgui.inc:212 +#: etc/inc/authgui.inc:275 etc/inc/authgui.inc:235 etc/inc/authgui.inc:298 +msgid "Login" +msgstr "Login" + +#: etc/inc/authgui.inc:242 etc/inc/authgui.inc:240 etc/inc/authgui.inc:263 +msgid "You are accessing this router by an IP address not configured locally, which may be forwarded by NAT or other means.

    If you did not setup this forwarding, you may be the target of a man-in-the-middle attack." +msgstr "Você está acessando este roteador através de um endereço IP não configurado localmente, que pode ser encaminhado pelo NAT ou outros meios.

    Se você não instalou este encaminhando, você pode estar sendo alvo de um ataque." + +#: etc/inc/authgui.inc:251 etc/inc/authgui.inc:249 etc/inc/authgui.inc:272 +msgid "Username:" +msgstr "Usuário:" + +#: etc/inc/authgui.inc:258 usr/local/www/diag_backup.php:597 +#: usr/local/www/system_authservers.php:627 etc/inc/authgui.inc:256 +#: usr/local/www/diag_backup.php:676 usr/local/www/system_authservers.php:632 +#: usr/local/www/system_authservers.php:639 usr/local/www/diag_backup.php:681 +#: etc/inc/authgui.inc:279 usr/local/www/system_authservers.php:651 +#: usr/local/www/diag_backup.php:682 +msgid "Password:" +msgstr "Senha:" + +#: etc/inc/authgui.inc:265 etc/inc/authgui.inc:263 etc/inc/authgui.inc:286 +msgid "Enter username and password to login." +msgstr "Digite usuário e senha para entrar." + +#: etc/inc/authgui.inc:271 etc/inc/authgui.inc:269 etc/inc/authgui.inc:292 +msgid "Your browser must support cookies to login." +msgstr "Seu browser precisa suportar cookies para logar." + +#: etc/inc/cmd_chain.inc:101 +#, php-format +msgid "CmdCHAIN is executing -> %1$s - %2$s" +msgstr "CmdCHAIN está sendo executado -> %1$s - %2$s" + +#: etc/inc/cmd_chain.inc:109 etc/inc/cmd_chain.inc:111 +#, php-format +msgid "%1$s failed with return code -> %2$s. The command was %3$s" +msgstr "%1$s falhou com código de retorno -> %2$s. O comando foi %3$s" + +#: etc/inc/config.console.inc:58 +msgid "DANGER! WARNING! ACHTUNG!" +msgstr "PERIGO! ADVERTÊNCIA! ACHTUNG!" + +#: etc/inc/config.console.inc:59 +#, php-format +msgid "%s requires *AT LEAST* %s RAM to function correctly.%s" +msgstr "%s requer *PELO MENOS* %s de RAM para funcionar corretamente.%s" + +#: etc/inc/config.console.inc:60 +#, php-format +msgid "Only (%s) MB RAM has been detected.%s" +msgstr "Somente (%s) MB de RAM foi detectado.%s" + +#: etc/inc/config.console.inc:61 +msgid "Press ENTER to continue." +msgstr "Pressione ENTER para continuar." + +#: etc/inc/config.console.inc:83 etc/inc/config.console.inc:495 +#: etc/inc/config.console.inc:497 +msgid "No interfaces found!" +msgstr "Nenhuma interface encontrada!" + +#: etc/inc/config.console.inc:181 +msgid "VLAN interfaces:" +msgstr "Interfaces VLAN:" + +#: etc/inc/config.console.inc:207 +msgid "Enter the WAN interface name or 'a' for auto-detection:" +msgstr "Informe o nome da interface WAN ou 'uma' para auto-detecção:" + +#: etc/inc/config.console.inc:215 etc/inc/config.console.inc:276 +#: etc/inc/config.console.inc:518 etc/inc/config.console.inc:520 +#: etc/inc/config.console.inc:244 +#, php-format +msgid "%sInvalid interface name '%s'%s" +msgstr "%sNome de interface inválido '%s'%s" + +#: etc/inc/config.console.inc:222 +#, php-format +msgid "%sEnter the LAN interface name or 'a' for auto-detection %sNOTE: this enables full Firewalling/NAT mode.%s(or nothing if finished):%s" +msgstr "%sInforme o nome da interface LAN ou 'uma' para auto-detecção %sNOTA: isso habilita o modo Firewalling/NAT completo.%s(ou nada, se finalizado):%s" + +#: etc/inc/config.console.inc:244 +#, php-format +msgid "%sInvalid interface name '%s'%s)" +msgstr "%snome de interface inválido '%s'%s)" + +#: etc/inc/config.console.inc:261 +#, php-format +msgid "%sOptional interface %s description found: %s" +msgstr "Descrição de %s interface opcional %s encontrada: %s" + +#: etc/inc/config.console.inc:264 +#, php-format +msgid "(or nothing if finished):%s" +msgstr "(ou nada é finalizado):%s" + +#: etc/inc/config.console.inc:270 +msgid "Optional" +msgstr "Opcional" + +#: etc/inc/config.console.inc:304 +msgid "The interfaces will be assigned as follows:" +msgstr "As interfaces serão atribuídas conforme segue:" + +#: etc/inc/config.console.inc:416 etc/inc/config.console.inc:418 +#, php-format +msgid "%sWriting configuration..." +msgstr "%sEscrevendo configuração..." + +#: etc/inc/config.console.inc:418 etc/inc/config.console.inc:420 +#, php-format +msgid "done.%s" +msgstr "pronto.%s" + +#: etc/inc/config.console.inc:425 etc/inc/config.console.inc:427 +msgid "One moment while we reload the settings..." +msgstr "Um momento enquanto recarregamos as configurações..." + +#: etc/inc/config.console.inc:429 etc/inc/config.console.inc:431 +msgid " done!" +msgstr "pronto!" + +#: etc/inc/config.console.inc:449 etc/inc/config.console.inc:451 +#, php-format +msgid "Detected link-up on interface %s.%s" +msgstr "Detectado link-up na interface %s.%s" + +#: etc/inc/config.console.inc:454 etc/inc/config.console.inc:456 +#, php-format +msgid "No link-up detected.%s" +msgstr "Nenhum link-up detectado.%s" + +#: etc/inc/config.console.inc:493 etc/inc/config.console.inc:495 +msgid "VLAN Capable interfaces:" +msgstr "Interfaces que suportam VLAN:" + +#: etc/inc/config.console.inc:508 etc/inc/config.console.inc:510 +msgid "No VLAN capable interfaces detected." +msgstr "Nenhum interface que suporta VLAN detectada." + +#: etc/inc/config.console.inc:512 etc/inc/config.console.inc:514 +msgid "Enter the parent interface name for the new VLAN (or nothing if finished):" +msgstr "Informe o nome da interface pai para a nova VLAN (ou nada se finalizado):" + +#: etc/inc/config.console.inc:525 etc/inc/config.console.inc:527 +msgid "Enter the VLAN tag (1-4094):" +msgstr "Informe a tag da VLAN (1-4094):" + +#: etc/inc/config.console.inc:529 etc/inc/config.console.inc:531 +#, php-format +msgid "%sInvalid VLAN tag '%s'%s" +msgstr "%sTag de VLAN inválida '%s'%s" + +#: etc/inc/config.lib.inc:79 +msgid "Config.xml unlocked." +msgstr "Config.xml desbloqueado." + +#: etc/inc/config.lib.inc:82 +msgid "Invalid password entered. Please try again." +msgstr "Senha inválida informada. Por favor, tente novamente." + +#: etc/inc/config.lib.inc:110 etc/inc/config.lib.inc:140 +#: etc/inc/config.lib.inc:271 +msgid "Config.xml is corrupted and is 0 bytes. Could not restore a previous backup." +msgstr "Config.xml está corrompido e possui 0 bytes. Não pôde restaurar um backup anterior." + +#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149 +#: etc/inc/config.lib.inc:552 etc/inc/config.lib.inc:560 +#: etc/inc/config.lib.inc:577 etc/inc/config.lib.inc:555 +msgid "Could not restore config.xml." +msgstr "Não pôde restaurar config.xml." + +#: etc/inc/config.lib.inc:210 etc/inc/config.lib.inc:211 +#, php-format +msgid "%1$s is restoring the configuration %2$s" +msgstr "%1$s está restaurando a configuração %2$s" + +#: etc/inc/config.lib.inc:233 +msgid "Resetting factory defaults..." +msgstr "Reconfigurando padrões de fábrica..." + +#: etc/inc/config.lib.inc:236 +msgid "" +"No XML configuration file found - using factory defaults.\n" +"Make sure that the configuration floppy disk with the conf/config.xml\n" +"file is inserted. If it isn't, your configuration changes will be lost\n" +"on reboot.\n" +msgstr "" +"Nenhuma configuração XML encontrada - usando configurações de fábrica.\n" +"Tenha certeza de que a configuração conf/config.xml do disquete está inserida. Se não, suas configurações modificadas serão perdidas\n" +"ao reiniciar.\n" + +#: etc/inc/config.lib.inc:249 +#, php-format +msgid "XML configuration file not found. %s cannot continue booting." +msgstr "Arquivo XML de configuração não encontrado. %s nãoo pode continuar iniciando." + +#: etc/inc/config.lib.inc:255 +msgid "Last known config found and restored. Please double check your configuration file for accuracy." +msgstr "Última configuração conhecida encontrada e restaurada. Por favor, cheque duas vezes seu arquivo de configuração por precaução." + +#: etc/inc/config.lib.inc:317 etc/inc/config.lib.inc:320 +msgid "Disk is dirty. Running fsck -y" +msgstr "O disco está sujo. Executando fsck -y" + +#: etc/inc/config.lib.inc:328 etc/inc/config.lib.inc:331 +msgid "File system is dirty. Launching FSCK for /" +msgstr "O sistema de arquivos está sujo. Abrindo FSCK para /" + +#: etc/inc/config.lib.inc:379 etc/inc/config.lib.inc:382 +#, php-format +msgid "Start Configuration upgrade at %s, set execution timeout to 15 minutes" +msgstr "Iniciar atualização de Configuração em %s, configure tempo de execução para 15 minutos" + +#: etc/inc/config.lib.inc:389 etc/inc/config.lib.inc:390 +#: etc/inc/config.lib.inc:392 etc/inc/config.lib.inc:393 +msgid "Updated bogon update frequency to 3am" +msgstr "Atualizada frequência de atualização bogon para 3 da manhã" + +#: etc/inc/config.lib.inc:420 etc/inc/config.lib.inc:423 +#, php-format +msgid "Ended Configuration upgrade at %s" +msgstr "Atualização de Configuração finalizada às %s" + +#: etc/inc/config.lib.inc:423 etc/inc/config.lib.inc:426 +#, php-format +msgid "Upgraded config version level from %1$s to %2$s" +msgstr "Atualizada versão config de nível %1$s para %2$s" + +#: etc/inc/config.lib.inc:512 etc/inc/config.lib.inc:520 +#: etc/inc/config.lib.inc:537 etc/inc/config.lib.inc:903 +#, php-format +msgid "%s made unknown change" +msgstr "%s fez mudança desconhecida" + +#: etc/inc/config.lib.inc:525 etc/inc/config.lib.inc:533 +#: etc/inc/config.lib.inc:550 etc/inc/config.lib.inc:528 +msgid "WARNING: Config contents could not be save. Could not open file!" +msgstr "ADVERTÊNCIA: Conteúdo de config não pôde ser salvo. Não pôde abrir arquivo!" + +#: etc/inc/config.lib.inc:527 etc/inc/config.lib.inc:535 +#: etc/inc/config.lib.inc:552 etc/inc/config.lib.inc:530 +#, php-format +msgid "Unable to open %s/config.xml for writing in write_config()%s" +msgstr "Incapaz de abrir %s/config.cml para escrita em write_config()%s" + +#: etc/inc/config.lib.inc:636 etc/inc/config.lib.inc:644 +#: etc/inc/config.lib.inc:661 etc/inc/config.lib.inc:639 +msgid "Reverted to" +msgstr "Revertido para" + +#: etc/inc/config.lib.inc:651 etc/inc/config.lib.inc:659 +#: etc/inc/config.lib.inc:676 etc/inc/config.lib.inc:654 +msgid "Installing configuration..." +msgstr "Instalando configuração..." + +#: etc/inc/config.lib.inc:653 etc/inc/config.lib.inc:661 +#: etc/inc/config.lib.inc:678 etc/inc/config.lib.inc:656 +msgid "Installing configuration ...." +msgstr "Instalando configuração ...." + +#: etc/inc/config.lib.inc:704 etc/inc/config.lib.inc:712 +#: etc/inc/config.lib.inc:729 etc/inc/config.lib.inc:707 +msgid "XML error: unable to open file" +msgstr "Erro de XML: incapaz de abrir arquivo" + +#: etc/inc/config.lib.inc:710 etc/inc/config.lib.inc:718 +#: etc/inc/config.lib.inc:735 etc/inc/config.lib.inc:713 +#, php-format +msgid "%1$s at line %2$d" +msgstr "%1$s na linha %2$d" + +#: etc/inc/config.lib.inc:756 etc/inc/config.lib.inc:758 +#: etc/inc/config.lib.inc:764 etc/inc/config.lib.inc:766 +#: etc/inc/config.lib.inc:781 etc/inc/config.lib.inc:783 +#: etc/inc/config.lib.inc:759 etc/inc/config.lib.inc:761 +#, php-format +msgid "The backup cache file %s is corrupted. Unlinking." +msgstr "O arquivo de backup de cache %s está corrompido. Desvinculando." + +#: etc/inc/easyrule.inc:116 etc/inc/easyrule.inc:117 +msgid "Easy Rule: Blocked from Firewall Log View" +msgstr "Regra Fácil: Bloqueado da Visualização de Log do Firewall" + +#: etc/inc/easyrule.inc:165 etc/inc/easyrule.inc:173 etc/inc/easyrule.inc:181 +#: etc/inc/easyrule.inc:177 etc/inc/easyrule.inc:185 etc/inc/easyrule.inc:178 +#: etc/inc/easyrule.inc:186 +msgid "Entry added" +msgstr "Entrada adicionada" + +#: etc/inc/easyrule.inc:170 etc/inc/easyrule.inc:178 etc/inc/easyrule.inc:182 +#: etc/inc/easyrule.inc:183 +msgid "Hosts blocked from Firewall Log view" +msgstr "Hosts bloqueados da Visualização de Log do Firewall" + +#: etc/inc/easyrule.inc:249 etc/inc/easyrule.inc:257 etc/inc/easyrule.inc:262 +#: etc/inc/easyrule.inc:263 +msgid "Easy Rule: Passed from Firewall Log View" +msgstr "Regra Fácil: Liberado pela Visualização de Log do Firewall" + +#: etc/inc/easyrule.inc:280 etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:309 +#: etc/inc/easyrule.inc:313 etc/inc/easyrule.inc:318 +msgid "Tried to block invalid IP:" +msgstr "Tentou bloquear IP inválido:" + +#: etc/inc/easyrule.inc:284 etc/inc/easyrule.inc:307 etc/inc/easyrule.inc:313 +#: etc/inc/easyrule.inc:317 etc/inc/easyrule.inc:322 +msgid "Invalid interface for block rule:" +msgstr "Interface inválida para regra de bloqueio:" + +#: etc/inc/easyrule.inc:287 etc/inc/easyrule.inc:310 etc/inc/easyrule.inc:316 +#: etc/inc/easyrule.inc:320 etc/inc/easyrule.inc:325 +msgid "Host added successfully" +msgstr "Host adicionado com sucesso" + +#: etc/inc/easyrule.inc:289 etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:318 +#: etc/inc/easyrule.inc:322 etc/inc/easyrule.inc:327 +msgid "Failed to create block rule, alias, or add host." +msgstr "Falhou ao criar regra de bloqueio, alias, ou ao adicionar um host." + +#: etc/inc/easyrule.inc:292 etc/inc/easyrule.inc:315 etc/inc/easyrule.inc:321 +#: etc/inc/easyrule.inc:325 etc/inc/easyrule.inc:330 +msgid "Tried to block but had no host IP or interface" +msgstr "Tentou bloquear, mas não possuía nenhum IP de host ou interface" + +#: etc/inc/easyrule.inc:294 etc/inc/easyrule.inc:317 etc/inc/easyrule.inc:323 +#: etc/inc/easyrule.inc:327 etc/inc/easyrule.inc:332 +msgid "Unknown block error." +msgstr "Erro desconhecido de bloqueio." + +#: etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:334 +#: etc/inc/easyrule.inc:338 etc/inc/easyrule.inc:343 +msgid "Invalid interface for pass rule:" +msgstr "Interface inválida para regra de liberação:" + +#: etc/inc/easyrule.inc:306 etc/inc/easyrule.inc:329 etc/inc/easyrule.inc:337 +#: etc/inc/easyrule.inc:341 etc/inc/easyrule.inc:346 +msgid "Invalid protocol for pass rule:" +msgstr "Protocolo inválido para regra de liberação:" + +#: etc/inc/easyrule.inc:309 etc/inc/easyrule.inc:332 etc/inc/easyrule.inc:340 +#: etc/inc/easyrule.inc:344 etc/inc/easyrule.inc:349 +msgid "Tried to pass invalid source IP:" +msgstr "Tentou passar um IP fonte inválido:" + +#: etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:335 etc/inc/easyrule.inc:343 +#: etc/inc/easyrule.inc:347 etc/inc/easyrule.inc:352 +msgid "Tried to pass invalid destination IP:" +msgstr "Tentou passar um IP de destino inválido:" + +#: etc/inc/easyrule.inc:316 etc/inc/easyrule.inc:339 etc/inc/easyrule.inc:347 +#: etc/inc/easyrule.inc:351 etc/inc/easyrule.inc:356 +msgid "Missing destination port:" +msgstr "Porta de destino faltando:" + +#: etc/inc/easyrule.inc:319 etc/inc/easyrule.inc:342 etc/inc/easyrule.inc:350 +#: etc/inc/easyrule.inc:354 etc/inc/easyrule.inc:359 +msgid "Tried to pass invalid destination port:" +msgstr "Tentou passar uma porta de destino inválida:" + +#: etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:349 etc/inc/easyrule.inc:357 +#: etc/inc/easyrule.inc:361 etc/inc/easyrule.inc:366 +msgid "Successfully added pass rule!" +msgstr "Adicionou regra de liberação com sucesso!" + +#: etc/inc/easyrule.inc:328 etc/inc/easyrule.inc:351 etc/inc/easyrule.inc:359 +#: etc/inc/easyrule.inc:363 etc/inc/easyrule.inc:368 +msgid "Failed to add pass rule." +msgstr "Falhou ao adicionar regra de passe." + +#: etc/inc/easyrule.inc:331 etc/inc/easyrule.inc:354 etc/inc/easyrule.inc:362 +#: etc/inc/easyrule.inc:366 etc/inc/easyrule.inc:371 +msgid "Missing parameters for pass rule." +msgstr "Parâmetros faltando para regra de liberação." + +#: etc/inc/easyrule.inc:333 etc/inc/easyrule.inc:356 etc/inc/easyrule.inc:364 +#: etc/inc/easyrule.inc:368 etc/inc/easyrule.inc:373 +msgid "Unknown pass error." +msgstr "Erro de liberação desconhecido." + +#: etc/inc/filter_log.inc:164 etc/inc/filter_log.inc:167 +#: etc/inc/filter_log.inc:191 etc/inc/filter_log.inc:201 +#, php-format +msgid "There was a error parsing rule: %s. Please report to mailing list or forum." +msgstr "Houve um erro ao fazer parse de regra: %s. Por favor reporte esse erro em lista de e-mails ou fórum." + +#: etc/inc/filter_log.inc:208 etc/inc/filter_log.inc:210 +#: etc/inc/filter_log.inc:213 etc/inc/filter_log.inc:237 +#: etc/inc/filter_log.inc:247 +#, php-format +msgid "Service %1$s/%2$s: %3$s" +msgstr "Serviço %1$s/%2$s: %3$s" + +#: etc/inc/gwlb.inc:230 etc/inc/gwlb.inc:237 etc/inc/gwlb.inc:242 +#: etc/inc/gwlb.inc:244 +#, php-format +msgid "Removing static route for monitor %1$s and adding a new route through %2$s" +msgstr "Removendo regras estáticas para monitor %1$s e adicionando nova rota através %2$s" + +#: etc/inc/gwlb.inc:501 etc/inc/gwlb.inc:727 etc/inc/gwlb.inc:750 +#, php-format +msgid "MONITOR: %s is down, removing from routing group" +msgstr "MONITOR: %s não responde, removendo do grupo de roteamento" + +#: etc/inc/gwlb.inc:505 etc/inc/gwlb.inc:731 etc/inc/gwlb.inc:754 +#, php-format +msgid "MONITOR: %s has packet loss, removing from routing group" +msgstr "MONITOR: %s tem perda de pacote, removendo de grupo de roteamento" + +#: etc/inc/gwlb.inc:509 etc/inc/gwlb.inc:735 etc/inc/gwlb.inc:758 +#, php-format +msgid "MONITOR: %s has high latency, removing from routing group" +msgstr "MONITOR: %s tem alta latência, removendo de grupo de roteamento" + +#: etc/inc/gwlb.inc:526 etc/inc/gwlb.inc:752 etc/inc/gwlb.inc:775 +msgid "Gateways status could not be determined, considering all as up/active." +msgstr "Status de gateways não pôde ser determinado, considerando todos como up/ativo." + +#: etc/inc/gwlb.inc:580 etc/inc/gwlb.inc:809 etc/inc/gwlb.inc:835 +#: etc/inc/gwlb.inc:844 etc/inc/gwlb.inc:823 etc/inc/gwlb.inc:807 +#: etc/inc/gwlb.inc:791 +#, php-format +msgid "Updating gateway group gateway for %1$s - new gateway is %2$s" +msgstr "Atualizando grupo de gateway para %1$s - novo gateway é %2$s" + +#: etc/inc/ipsec.inc:39 +msgid "My IP address" +msgstr "Meu endereço IP" + +#: etc/inc/ipsec.inc:40 etc/inc/ipsec.inc:49 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:114 +#: usr/local/www/diag_logs_vpn.php:178 +#: usr/local/www/status_captiveportal.php:160 +#: usr/local/www/services_captiveportal.php:602 +#: usr/local/www/services_captiveportal.php:623 +#: usr/local/www/services_captiveportal.php:642 +#: usr/local/www/services_captiveportal.php:661 +#: usr/local/www/services_captiveportal_ip.php:117 +#: usr/local/www/services_captiveportal_ip_edit.php:195 +#: usr/local/www/services_dhcp.php:891 +#: usr/local/www/services_dhcp_edit.php:221 +#: usr/local/www/services_dnsmasq_edit.php:80 +#: usr/local/www/services_dnsmasq_edit.php:156 +#: usr/local/www/vpn_pptp_users.php:99 +#: usr/local/www/vpn_pptp_users_edit.php:160 usr/local/www/diag_arp.php:313 +#: usr/local/www/status_dhcp_leases.php:318 +#: usr/local/www/system_advanced_network.php:226 +#: usr/local/www/vpn_ipsec_phase2.php:635 usr/local/www/vpn_l2tp_users.php:102 +#: usr/local/www/vpn_l2tp_users_edit.php:168 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:211 +#: usr/local/www/diag_logs_vpn.php:177 +#: usr/local/www/services_captiveportal.php:638 +#: usr/local/www/services_captiveportal.php:659 +#: usr/local/www/services_captiveportal.php:681 +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/status_dhcp_leases.php:339 +#: usr/local/www/services_dhcp.php:929 usr/local/www/vpn_ipsec_phase2.php:661 +#: usr/local/www/services_dhcp_edit.php:224 +#: usr/local/www/services_dnsmasq_edit.php:212 +#: usr/local/www/services_captiveportal_ip.php:115 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137 +#: usr/local/www/vpn_l2tp_users.php:103 +#: usr/local/www/services_captiveportal.php:636 +#: usr/local/www/services_captiveportal.php:657 +#: usr/local/www/services_captiveportal.php:679 +#: usr/local/www/services_captiveportal.php:698 +#: usr/local/www/status_dhcp_leases.php:341 +#: usr/local/www/services_captiveportal_ip_edit.php:193 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/vpn_ipsec_phase2.php:757 +#: usr/local/www/vpn_pptp_users_edit.php:161 +#: usr/local/www/services_dhcp_edit.php:223 +#: usr/local/www/vpn_l2tp_users_edit.php:169 +#: usr/local/www/vpn_pptp_users.php:100 +#: usr/local/www/services_captiveportal_ip_edit.php:187 +#: usr/local/www/services_dhcp_edit.php:351 +#: usr/local/www/services_dhcp.php:1152 +#: usr/local/www/status_captiveportal.php:146 +#: usr/local/www/services_captiveportal.php:637 +#: usr/local/www/services_captiveportal.php:658 +#: usr/local/www/services_captiveportal.php:680 +#: usr/local/www/services_captiveportal.php:699 +#: usr/local/www/vpn_ipsec_phase2.php:778 usr/local/www/services_dhcp.php:1172 +#: usr/local/www/services_captiveportal.php:653 +#: usr/local/www/services_captiveportal.php:674 +#: usr/local/www/services_captiveportal.php:696 +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/system_advanced_network.php:227 +#: usr/local/www/services_dhcp.php:1184 +#: usr/local/www/status_dhcp_leases.php:342 +msgid "IP address" +msgstr "Endereço IP" + +#: etc/inc/ipsec.inc:41 etc/inc/ipsec.inc:50 +#: usr/local/www/system_camanager.php:476 +#: usr/local/www/system_certmanager.php:589 +#: usr/local/www/system_certmanager.php:672 +#: usr/local/www/system_certmanager.php:705 +#: usr/local/www/system_certmanager.php:838 +#: usr/local/www/system_camanager.php:477 +#: usr/local/www/system_camanager.php:500 +#: usr/local/www/system_certmanager.php:730 +#: usr/local/www/system_certmanager.php:879 +#: usr/local/www/system_certmanager.php:731 +#: usr/local/www/system_certmanager.php:883 +msgid "Distinguished name" +msgstr "Nome distinto" + +#: etc/inc/ipsec.inc:42 etc/inc/ipsec.inc:51 +msgid "User distinguished name" +msgstr "Nome de usuário distinto" + +#: etc/inc/ipsec.inc:43 etc/inc/ipsec.inc:52 +msgid "ASN.1 distinguished Name" +msgstr "Nome de ASN.1 distinto" + +#: etc/inc/ipsec.inc:44 etc/inc/ipsec.inc:53 +msgid "KeyID tag" +msgstr "Tag KeyID" + +#: etc/inc/ipsec.inc:45 usr/local/www/services_dhcp.php:722 +#: usr/local/www/fbegin.inc:128 usr/local/www/services_dhcpv6.php:648 +#: usr/local/www/fbegin.inc:145 usr/local/www/services_dhcp.php:760 +#: usr/local/www/services_dhcpv6.php:741 usr/local/www/fbegin.inc:154 +#: usr/local/www/services_dhcp.php:942 usr/local/www/services_dhcpv6.php:672 +#: usr/local/www/services_dhcp_edit.php:451 +#: usr/local/www/services_dhcp.php:955 usr/local/www/services_dhcpv6.php:689 +#: usr/local/www/fbegin.inc:146 usr/local/www/services_dhcp.php:975 +#: usr/local/www/services_dhcp.php:987 +msgid "Dynamic DNS" +msgstr "DNS dinâmico" + +#: etc/inc/ipsec.inc:48 +msgid "Peer IP address" +msgstr "Endereço IP do Peer" + +#: etc/inc/ipsec.inc:256 usr/local/www/vpn_ipsec.php:206 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase2.php:255 usr/local/www/vpn_ipsec.php:217 +#: usr/local/www/vpn_ipsec_phase2.php:268 etc/inc/ipsec.inc:281 +#: usr/local/www/vpn_ipsec.php:216 usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec.php:222 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase2.php:316 etc/inc/ipsec.inc:289 +msgid "Mobile Client" +msgstr "Cliente Móvel" + +#: etc/inc/ipsec.inc:258 usr/local/www/interfaces_bridge_edit.php:428 +#: usr/local/www/firewall_nat_edit.php:797 +#: usr/local/www/firewall_nat_edit.php:828 usr/local/www/interfaces.php:1032 +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1385 +#: usr/local/www/interfaces.php:1491 usr/local/www/interfaces.php:1567 +#: usr/local/www/vpn_ipsec_phase2.php:435 +#: usr/local/www/interfaces_bridge_edit.php:437 +#: usr/local/www/vpn_ipsec_phase2.php:461 +#: usr/local/www/firewall_nat_edit.php:805 +#: usr/local/www/firewall_nat_edit.php:836 usr/local/www/interfaces.php:1118 +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1489 +#: usr/local/www/interfaces.php:1597 etc/inc/ipsec.inc:283 +#: usr/local/www/system_advanced_misc.php:386 +#: usr/local/www/interfaces_bridge_edit.php:438 +#: usr/local/www/vpn_ipsec_phase2.php:527 +#: usr/local/www/vpn_ipsec_phase2.php:563 +#: usr/local/www/firewall_nat_edit.php:804 +#: usr/local/www/firewall_nat_edit.php:835 usr/local/www/interfaces.php:1106 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1477 +#: usr/local/www/interfaces.php:1585 usr/local/www/firewall_nat_edit.php:799 +#: usr/local/www/firewall_nat_edit.php:830 +#: usr/local/www/diag_system_pftop.php:155 +#: usr/local/www/system_advanced_misc.php:398 +#: usr/local/www/interfaces_bridge_edit.php:439 +#: usr/local/www/vpn_ipsec_phase2.php:584 usr/local/www/interfaces.php:1120 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1490 +#: usr/local/www/interfaces.php:1595 etc/inc/ipsec.inc:292 +#: usr/local/www/firewall_nat_edit.php:811 +#: usr/local/www/firewall_nat_edit.php:842 +#: usr/local/www/system_advanced_misc.php:445 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1535 usr/local/www/interfaces.php:1641 +#: usr/local/www/firewall_nat_edit.php:812 +#: usr/local/www/firewall_nat_edit.php:843 +#: usr/local/www/interfaces_bridge_edit.php:443 +#: usr/local/www/interfaces.php:1157 usr/local/www/interfaces.php:1158 +#: usr/local/www/interfaces.php:1529 usr/local/www/interfaces.php:1634 +#: usr/local/www/system_advanced_misc.php:451 +#: usr/local/www/interfaces.php:1170 usr/local/www/interfaces.php:1171 +#: usr/local/www/interfaces.php:1542 usr/local/www/interfaces.php:1647 +msgid "None" +msgstr "Nenhum" + +#: etc/inc/meta.inc:68 +#, php-format +msgid "list_phpfiles: unable to examine path %s\n" +msgstr "list_phpfiles: impossibilitado de examinar o caminho %s\n" + +#: etc/inc/meta.inc:99 +#, php-format +msgid "unable to read %s\n" +msgstr "impossibilitado de ler %s\n" + +#: etc/inc/meta.inc:132 +#, php-format +msgid "error: tag mismatch ( %1$s != %2$s ) in '%3$s'%4$s" +msgstr "erro: tag incompatível ( %1$s != %2$s ) em '%3$s'%4$s" + +#: etc/inc/meta.inc:143 +#, php-format +msgid "warning: tag %1$s has no data in '%2$s'%3$s" +msgstr "aviso: a tag %1$s não possui dados em '%2$s'%3$s" + +#: etc/inc/meta.inc:163 +#, php-format +msgid "warning: tag %1$s has malformed data in '%2$s'%3$s" +msgstr "aviso: a tag %1$s tem dados malformados em '%2$s'%3$s" + +#: etc/inc/meta.inc:185 +#, php-format +msgid "warning: tag %1$s has invalid data in '%2$s'%3$s" +msgstr "aviso: a tag %1$s tem dados inválidos em '%2$s'%3$s" + +#: etc/inc/priv.defs.inc:10 +msgid "WebCfg - All pages" +msgstr "WebCfg - Todas as páginas" + +#: etc/inc/priv.defs.inc:11 +msgid "Allow access to all pages" +msgstr "Permitir acesso a todas as páginas" + +#: etc/inc/priv.defs.inc:16 +msgid "WebCfg - Status: CARP page" +msgstr "WebCfg - Página Status: CARP" + +#: etc/inc/priv.defs.inc:17 +msgid "Allow access to the 'Status: CARP' page." +msgstr "Permitir acesso à página 'Status: CARP'." + +#: etc/inc/priv.defs.inc:22 +msgid "WebCfg - Crash reporter" +msgstr "WebCfg - Relatório de falhas" + +#: etc/inc/priv.defs.inc:23 +msgid "Uploads crash reports to pfSense and or deletes crash reports." +msgstr "Envie os relatórios de falha para o pfSense e/ou exclua-os." + +#: etc/inc/priv.defs.inc:28 +msgid "WebCfg - Diagnostics: ARP Table page" +msgstr "WebCfg - Página Diagnóstico: Tabela ARP" + +#: etc/inc/priv.defs.inc:29 +msgid "Allow access to the 'Diagnostics: ARP Table' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Tabela ARP'." + +#: etc/inc/priv.defs.inc:34 +msgid "WebCfg - Diagnostics: Authentication page" +msgstr "WebCfg - Diagnósticos: Página de Autenticação" + +#: etc/inc/priv.defs.inc:35 +msgid "Allow access to the 'Diagnostics: Authentication' page." +msgstr "Permite acesso à 'Diagnóstico: Página de Autenticação'." + +#: etc/inc/priv.defs.inc:40 +msgid "WebCfg - Diagnostics: Backup/restore page" +msgstr "WebCfg - Página Diagnóstico: Backup/Restaurar" + +#: etc/inc/priv.defs.inc:41 +msgid "Allow access to the 'Diagnostics: Backup/restore' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Backup/Restaurar'." + +#: etc/inc/priv.defs.inc:46 +msgid "WebCfg - Diagnostics: Configuration History page" +msgstr "WebCfg - Página Diagnóstico: Histórico de Configuração" + +#: etc/inc/priv.defs.inc:47 +msgid "Allow access to the 'Diagnostics: Configuration History' page." +msgstr "Permitir acesso à página 'Diagnósticos: Histórico de Configuração'." + +#: etc/inc/priv.defs.inc:52 +msgid "WebCfg - Diagnostics: Factory defaults page" +msgstr "WebCfg - Página Diagnóstico: Padrões de fábrica" + +#: etc/inc/priv.defs.inc:53 +msgid "Allow access to the 'Diagnostics: Factory defaults' page." +msgstr "Permitir acesso á  página 'Diagnóstico: Padrões de fábrica'." + +#: etc/inc/priv.defs.inc:58 +msgid "WebCfg - Diagnostics: Show States page" +msgstr "WebCfg - Página Diagnóstico: Exibir Estados" + +#: etc/inc/priv.defs.inc:59 +msgid "Allow access to the 'Diagnostics: Show States' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Exibir Estados'." + +#: etc/inc/priv.defs.inc:64 etc/inc/priv.defs.inc:70 +msgid "WebCfg - Status: IPsec page" +msgstr "WebCfg - Página Status: IPsec" + +#: etc/inc/priv.defs.inc:65 etc/inc/priv.defs.inc:71 +msgid "Allow access to the 'Status: IPsec' page." +msgstr "Permitir acesso à  página 'Status: IPsec'." + +#: etc/inc/priv.defs.inc:70 etc/inc/priv.defs.inc:76 +msgid "WebCfg - Status: IPsec: SAD page" +msgstr "WebCfg - Página Status: Ipsec: SAD" + +#: etc/inc/priv.defs.inc:71 etc/inc/priv.defs.inc:77 +msgid "Allow access to the 'Status: IPsec: SAD' page." +msgstr "Permitir acesso à  página 'Status: Ipsec: SAD'." + +#: etc/inc/priv.defs.inc:76 etc/inc/priv.defs.inc:82 +msgid "WebCfg - Status: IPsec: SPD page" +msgstr "WebCfg - Página Status: Ipsec: SPD" + +#: etc/inc/priv.defs.inc:77 etc/inc/priv.defs.inc:83 +msgid "Allow access to the 'Status: IPsec: SPD' page." +msgstr "Permitir acesso à  página 'Status: Ipsec: SPD'." + +#: etc/inc/priv.defs.inc:82 etc/inc/priv.defs.inc:88 +msgid "WebCfg - Diag IPsec XML page" +msgstr "WebCfg - Página de Diagnóstico IPsec XML" + +#: etc/inc/priv.defs.inc:83 etc/inc/priv.defs.inc:89 +msgid "Allow access to the 'Diag IPsec XML' page." +msgstr "Permitir acesso à página 'Diag IPsec XML'." + +#: etc/inc/priv.defs.inc:88 etc/inc/priv.defs.inc:184 +#: etc/inc/priv.defs.inc:220 etc/inc/priv.defs.inc:226 +#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:238 +#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:94 +#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:250 +msgid "WebCfg - Diagnostics: System Activity" +msgstr "WebCfg - Página Diagnóstico: Atividade do Sistema" + +#: etc/inc/priv.defs.inc:89 etc/inc/priv.defs.inc:185 +#: etc/inc/priv.defs.inc:221 etc/inc/priv.defs.inc:227 +#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:239 +#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:95 +#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:251 +msgid "Allows access to the 'Diagnostics: System Activity' page" +msgstr "Permitir acesso à página 'Diagnósticos: Atividade do Sistema'" + +#: etc/inc/priv.defs.inc:94 etc/inc/priv.defs.inc:100 +msgid "WebCfg - Diagnostics: Logs: System page" +msgstr "WebCfg - Página Diagnóstico: Logs: Sistema" + +#: etc/inc/priv.defs.inc:95 etc/inc/priv.defs.inc:101 +msgid "Allow access to the 'Diagnostics: Logs: System' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Logs: Sistema'." + +#: etc/inc/priv.defs.inc:100 etc/inc/priv.defs.inc:106 +msgid "WebCfg - Status: System logs: Portal Auth page" +msgstr "WebCfg - Página Status: Logs de distema: Portal de Autenticação" + +#: etc/inc/priv.defs.inc:101 etc/inc/priv.defs.inc:107 +msgid "Allow access to the 'Status: System logs: Portal Auth' page." +msgstr "Permitir acesso à  página 'Status: Logs de distema: Portal de Autenticação'." + +#: etc/inc/priv.defs.inc:106 etc/inc/priv.defs.inc:112 +msgid "WebCfg - Diagnostics: Logs: DHCP page" +msgstr "WebCfg - Página Diagnóstico: Logs: DHCP" + +#: etc/inc/priv.defs.inc:107 etc/inc/priv.defs.inc:113 +msgid "Allow access to the 'Diagnostics: Logs: DHCP' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Logs: DHCP'." + +#: etc/inc/priv.defs.inc:112 etc/inc/priv.defs.inc:118 +msgid "WebCfg - Diagnostics: Logs: Firewall page" +msgstr "WebCfg - Página Diagnóstico: Logs: Firewall" + +#: etc/inc/priv.defs.inc:113 etc/inc/priv.defs.inc:119 +msgid "Allow access to the 'Diagnostics: Logs: Firewall' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Logs: Firewall'." + +#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:136 +#: etc/inc/priv.defs.inc:142 +msgid "WebCfg - Hidden: No longer included page" +msgstr "WebCfg - Página Omitidas: Página não mais inclusa" + +#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:137 +#: etc/inc/priv.defs.inc:143 +msgid "Allow access to the 'Hidden: No longer included' page." +msgstr "Permitir acesso à  página 'Omitidas: Página não mais inclusa'." + +#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:142 +#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:148 +#: etc/inc/priv.defs.inc:166 +msgid "WebCfg - Status: System logs: IPsec VPN page" +msgstr "WebCfg - Página Status: Logs do Sistema: IPsec" + +#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:143 +#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:149 +#: etc/inc/priv.defs.inc:167 +msgid "Allow access to the 'Status: System logs: IPsec VPN' page." +msgstr "WebCfg - Página 'Status: Logs do Sistema: IPsec'." + +#: etc/inc/priv.defs.inc:130 +msgid "WebCfg - Status: System logs: OpenNTPD page" +msgstr "WebCfg - Página Status: Logs do Sistema: OpenNTPD" + +#: etc/inc/priv.defs.inc:131 +msgid "Allow access to the 'Status: System logs: OpenNTPD' page." +msgstr "Permitir acesso à  página 'Status: Logs do Sistema: OpenNTPD'." + +#: etc/inc/priv.defs.inc:136 etc/inc/priv.defs.inc:154 +#: etc/inc/priv.defs.inc:160 +msgid "WebCfg - Status: System logs: OpenVPN page" +msgstr "WebCfg - Página Status: Logs do Sistema: OpenVPN" + +#: etc/inc/priv.defs.inc:137 etc/inc/priv.defs.inc:155 +#: etc/inc/priv.defs.inc:161 +msgid "Allow access to the 'Status: System logs: OpenVPN' page." +msgstr "Permitir acesso à  página 'Status: Logs do Sistema: OpenVPN'." + +#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:166 +#: etc/inc/priv.defs.inc:172 +msgid "WebCfg - Status: System logs: Load Balancer page" +msgstr "WebCfg - Página Status: Logs do Sistema: Balanceador de Carga" + +#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:167 +#: etc/inc/priv.defs.inc:173 +msgid "Allow access to the 'Status: System logs: Load Balancer' page." +msgstr "Permitir acesso à  página 'Status: Logs do Sistema: Balanceador de Carga'." + +#: etc/inc/priv.defs.inc:154 etc/inc/priv.defs.inc:172 +#: etc/inc/priv.defs.inc:178 +msgid "WebCfg - Diagnostics: Logs: Settings page" +msgstr "WebCfg - Página Status: Logs do Sistema: Configurações" + +#: etc/inc/priv.defs.inc:155 etc/inc/priv.defs.inc:173 +#: etc/inc/priv.defs.inc:179 +msgid "Allow access to the 'Diagnostics: Logs: Settings' page." +msgstr "Permitir acesso à  página 'Status: Logs do Sistema: Configurações'." + +#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:178 +#: etc/inc/priv.defs.inc:184 +msgid "WebCfg - Diagnostics: Logs: VPN page" +msgstr "WebCfg - Página Diagnóstico: Logs: VPN" + +#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:179 +#: etc/inc/priv.defs.inc:185 +msgid "Allow access to the 'Diagnostics: Logs: VPN' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Logs: VPN'." + +#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:184 +#: etc/inc/priv.defs.inc:190 +msgid "WebCfg - Diagnostics: NanoBSD" +msgstr "WebCfg - Página Diagnóstico: NanoBSD" + +#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:185 +#: etc/inc/priv.defs.inc:191 +msgid "Allow access to the 'Diagnostics: NanoBSD' page." +msgstr "Permitir acesso à página 'Diagnóstico: NanoBSD'." + +#: etc/inc/priv.defs.inc:172 etc/inc/priv.defs.inc:190 +#: etc/inc/priv.defs.inc:196 +msgid "WebCfg - Diagnostics: Packet Capture page" +msgstr "WebCfg - Página Diagnóstico: Captura de Pacotes" + +#: etc/inc/priv.defs.inc:173 etc/inc/priv.defs.inc:191 +#: etc/inc/priv.defs.inc:197 +msgid "Allow access to the 'Diagnostics: Packet Capture' page." +msgstr "Permitir acesso à  'Página Diagnóstico: Captura de Pacotes'." + +#: etc/inc/priv.defs.inc:178 etc/inc/priv.defs.inc:196 +#: etc/inc/priv.defs.inc:202 +msgid "WebCfg - Diagnostics: Patterns page" +msgstr "WebCfg - Página Diagnóstico: Modelos" + +#: etc/inc/priv.defs.inc:179 etc/inc/priv.defs.inc:197 +#: etc/inc/priv.defs.inc:203 +msgid "Allow access to the 'Diagnostics: Patterns' page." +msgstr "Permitir acesso à 'Página Diagnóstico: Modelos'." + +#: etc/inc/priv.defs.inc:190 etc/inc/priv.defs.inc:208 +#: etc/inc/priv.defs.inc:214 +msgid "WebCfg - Diagnostics: Ping page" +msgstr "WebCfg - Página Diagnóstico: Ping" + +#: etc/inc/priv.defs.inc:191 etc/inc/priv.defs.inc:209 +#: etc/inc/priv.defs.inc:215 +msgid "Allow access to the 'Diagnostics: Ping' page." +msgstr "Permitir acesso à 'Página Diagnóstico: Ping'." + +#: etc/inc/priv.defs.inc:196 etc/inc/priv.defs.inc:214 +#: etc/inc/priv.defs.inc:220 +msgid "WebCfg - Status: Package logs page" +msgstr "WebCfg - Página Status: Logs de Pacotes" + +#: etc/inc/priv.defs.inc:197 etc/inc/priv.defs.inc:215 +#: etc/inc/priv.defs.inc:221 +msgid "Allow access to the 'Status: Package logs' page." +msgstr "Permitir acesso à página 'Status: Logs de Pacotes'." + +#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:220 +#: etc/inc/priv.defs.inc:226 +msgid "WebCfg - Diagnostics: Reset state page" +msgstr "WebCfg - Página Diagnóstico: Estado Inicial" + +#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:221 +#: etc/inc/priv.defs.inc:227 +msgid "Allow access to the 'Diagnostics: Reset state' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Estado Inicial'." + +#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:226 +#: etc/inc/priv.defs.inc:232 +msgid "WebCfg - Diagnostics: Routing tables page" +msgstr "WebCfg - Página Diagnóstico: Tabelas de roteamento" + +#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:227 +#: etc/inc/priv.defs.inc:233 +msgid "Allow access to the 'Diagnostics: Routing tables' page." +msgstr "Permitir acesso à página 'Diagnóstico: Tabelas de roteamento'." + +#: etc/inc/priv.defs.inc:214 etc/inc/priv.defs.inc:232 +#: etc/inc/priv.defs.inc:238 +msgid "WebCfg - Diagnostics: States Summary page" +msgstr "WebCfg - Diagnósticos: Página de Resumo de Estados" + +#: etc/inc/priv.defs.inc:215 etc/inc/priv.defs.inc:233 +#: etc/inc/priv.defs.inc:239 +msgid "Allow access to the 'Diagnostics: States Summary' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Resumo de Estados'." + +#: etc/inc/priv.defs.inc:232 etc/inc/priv.defs.inc:250 +#: etc/inc/priv.defs.inc:256 +msgid "WebCfg - Diagnostics: PF Table IP addresses" +msgstr "WebCfg - Diagnósticos: Tabela PF de Endereços IP" + +#: etc/inc/priv.defs.inc:233 etc/inc/priv.defs.inc:251 +#: etc/inc/priv.defs.inc:257 +msgid "Allow access to the 'Diagnostics: Tables' page." +msgstr "Permitir acesso à  página 'Diagnósticos: Tabelas'." + +#: etc/inc/priv.defs.inc:238 etc/inc/priv.defs.inc:256 +#: etc/inc/priv.defs.inc:262 +msgid "WebCfg - Diagnostics: Traceroute page" +msgstr "WebCfg - Página Diagnóstico: Traceroute" + +#: etc/inc/priv.defs.inc:239 etc/inc/priv.defs.inc:257 +#: etc/inc/priv.defs.inc:263 +msgid "Allow access to the 'Diagnostics: Traceroute' page." +msgstr "Permitir acesso à página 'Diagnóstico: Traceroute'." + +#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:262 +#: etc/inc/priv.defs.inc:268 +msgid "WebCfg - Diagnostics: Edit FIle" +msgstr "WebCfg - Diagnósticos: Editar arquivo" + +#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:263 +#: etc/inc/priv.defs.inc:269 +msgid "Allow access to the 'Diagnostics: Edit File' page." +msgstr "Permitir acesso à página 'Diagnósticos: Editar arquivo'." + +#: etc/inc/priv.defs.inc:250 etc/inc/priv.defs.inc:268 +#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:276 +msgid "WebCfg - Diagnostics: Command page" +msgstr "WebCfg - Página Diagnóstico: Comando" + +#: etc/inc/priv.defs.inc:251 etc/inc/priv.defs.inc:269 +#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:277 +msgid "Allow access to the 'Diagnostics: Command' page." +msgstr "Permitir acesso à página 'Diagnóstico: Comando'." + +#: etc/inc/priv.defs.inc:256 etc/inc/priv.defs.inc:274 +#: etc/inc/priv.defs.inc:280 +msgid "WebCfg - Hidden: Exec Raw page" +msgstr "WebCfg - Página Escondida: Exec Raw" + +#: etc/inc/priv.defs.inc:257 etc/inc/priv.defs.inc:275 +#: etc/inc/priv.defs.inc:281 +msgid "Allow access to the 'Hidden: Exec Raw' page." +msgstr "Permitir acesso à página 'Escondida: Exec Raw'." + +#: etc/inc/priv.defs.inc:262 etc/inc/priv.defs.inc:280 +#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:282 +msgid "WebCfg - Firewall: Aliases page" +msgstr "WebCfg - Página Firewall: Aliases" + +#: etc/inc/priv.defs.inc:263 etc/inc/priv.defs.inc:281 +#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:283 +msgid "Allow access to the 'Firewall: Aliases' page." +msgstr "Permitir acesso à página 'Firewall: Aliases'." + +#: etc/inc/priv.defs.inc:268 etc/inc/priv.defs.inc:286 +#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:288 +msgid "WebCfg - Firewall: Alias: Edit page" +msgstr "WebCfg - Página Firewall: Alias: Editar" + +#: etc/inc/priv.defs.inc:269 etc/inc/priv.defs.inc:287 +#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:289 +msgid "Allow access to the 'Firewall: Alias: Edit' page." +msgstr "Permitir acesso à página 'Firewall: Alias: Editar'." + +#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:292 +#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:294 +msgid "WebCfg - Firewall: Alias: Import page" +msgstr "WebCfg - Página Firewall: Alias: Importação" + +#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:293 +#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:295 +msgid "Allow access to the 'Firewall: Alias: Import' page." +msgstr "Permitir acesso à página 'Firewall: Alias: Importação'." + +#: etc/inc/priv.defs.inc:280 etc/inc/priv.defs.inc:298 +#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:300 +msgid "WebCfg - Firewall: NAT: Port Forward page" +msgstr "WebCfg - Página Firewall: NAT: Encaminhamento de Porta" + +#: etc/inc/priv.defs.inc:281 etc/inc/priv.defs.inc:299 +#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:301 +msgid "Allow access to the 'Firewall: NAT: Port Forward' page." +msgstr "Permitir acesso à  página 'Firewall: NAT: Encaminhamento de Porta'." + +#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:304 +#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:306 +msgid "WebCfg - Firewall: NAT: 1:1 page" +msgstr "WebCfg - Página Firewall: NAT: 1:1" + +#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:305 +#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:307 +msgid "Allow access to the 'Firewall: NAT: 1:1' page." +msgstr "Permitir acesso à página 'Firewall: NAT: 1:1'." + +#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:310 +#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:312 +msgid "WebCfg - Firewall: NAT: 1:1: Edit page" +msgstr "WebCfg - Página Firewall: NAT: 1:1: Editar" + +#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:311 +#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:313 +msgid "Allow access to the 'Firewall: NAT: 1:1: Edit' page." +msgstr "Permitir acesso à página 'Firewall: NAT: 1:1: Editar'." + +#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:316 +#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:318 +msgid "WebCfg - Firewall: NAT: Port Forward: Edit page" +msgstr "WebCfg - Página Firewall: NAT: Encaminhamento de Porta" + +#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:317 +#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:319 +msgid "Allow access to the 'Firewall: NAT: Port Forward: Edit' page." +msgstr "Permitir acesso à página 'Firewall: NAT: Encaminhamento de Porta'." + +#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:322 +#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:324 +msgid "WebCfg - Firewall: NAT: Outbound page" +msgstr "WebCfg - Página Firewall: NAT: Outbound" + +#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:323 +#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:325 +msgid "Allow access to the 'Firewall: NAT: Outbound' page." +msgstr "Permitir acesso à página 'Firewall: NAT: Outbound'." + +#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:328 +#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:330 +msgid "WebCfg - Firewall: NAT: Outbound: Edit page" +msgstr "WebCfg - Página Firewall: NAT: Outbound: Editar" + +#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:329 +#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:331 +msgid "Allow access to the 'Firewall: NAT: Outbound: Edit' page." +msgstr "Permitir acesso à página 'Firewall: NAT: Outbound: Editar'." + +#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:334 +#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:336 +msgid "WebCfg - Firewall: Rules page" +msgstr "WebCfg - Página Firewall: Regras" + +#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:335 +#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:337 +msgid "Allow access to the 'Firewall: Rules' page." +msgstr "Permitir acesso à página 'Firewall: Regras'." + +#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:340 +#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:342 +msgid "WebCfg - Firewall: Rules: Edit page" +msgstr "WebCfg - Página Firewall: Regras: Editar" + +#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:341 +#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:343 +msgid "Allow access to the 'Firewall: Rules: Edit' page." +msgstr "Permitir acesso à página 'Firewall: Regras: Editar'." + +#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:346 +#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:348 +msgid "WebCfg - Firewall: Schedules page" +msgstr "WebCfg - Página Firewall: Agendas" + +#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:347 +#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:349 +msgid "Allow access to the 'Firewall: Schedules' page." +msgstr "Permitir acesso à página 'Firewall: Agendas'." + +#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:352 +#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:354 +msgid "WebCfg - Firewall: Schedules: Edit page" +msgstr "WebCfg - Página Firewall: Agendas: Editar" + +#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:353 +#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:355 +msgid "Allow access to the 'Firewall: Schedules: Edit' page." +msgstr "Permitir acesso à página 'Firewall: Agendas: Editar'." + +#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:358 +#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:360 +msgid "WebCfg - Firewall: Traffic Shaper page" +msgstr "WebCfg - Página Firewall: Traffic Shaper" + +#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:359 +#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:361 +msgid "Allow access to the 'Firewall: Traffic Shaper' page." +msgstr "Permitir acesso à página 'Firewall: Traffic Shaper'." + +#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:364 +#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:366 +msgid "WebCfg - Firewall: Traffic Shaper: Layer7 page" +msgstr "WebCfg - Página Firewall: Traffic Shaper: Layer7" + +#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:365 +#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:367 +msgid "Allow access to the 'Firewall: Traffic Shaper: Layer7' page." +msgstr "Permitir acesso à página 'Firewall: Traffic Shaper: Layer7'." + +#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:370 +#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:372 +msgid "WebCfg - Firewall: Traffic Shaper: Queues page" +msgstr "WebCfg - Página Firewall: Traffic Shaper: Filas" + +#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:371 +#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:373 +msgid "Allow access to the 'Firewall: Traffic Shaper: Queues' page." +msgstr "Permitir acesso à página 'Firewall: Traffic Shaper: Filas'." + +#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:376 +#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:378 +msgid "WebCfg - Firewall: Traffic Shaper: Limiter page" +msgstr "WebCfg - Página Firewall: Traffic Shaper: Limitador" + +#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:377 +#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:379 +msgid "Allow access to the 'Firewall: Traffic Shaper: Limiter' page." +msgstr "Permitir acesso à página 'Firewall: Traffic Shaper: Limitador'." + +#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:382 +#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:384 +msgid "WebCfg - Firewall: Traffic Shaper: Wizard page" +msgstr "WebCfg - Página Firewall: Traffic Shaper: Wizard" + +#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:383 +#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:385 +msgid "Allow access to the 'Firewall: Traffic Shaper: Wizard' page." +msgstr "Permitir acesso à página 'Firewall: Traffic Shaper: Wizard'." + +#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:388 +#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:390 +msgid "WebCfg - Firewall: Virtual IP Addresses page" +msgstr "WebCfg - Página Firewall: Endereços IP Virtuais" + +#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:389 +#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:391 +msgid "Allow access to the 'Firewall: Virtual IP Addresses' page." +msgstr "Permitir acesso à Página 'Firewall: Endereços IP Virtuais'." + +#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:394 +#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:396 +msgid "WebCfg - Firewall: Virtual IP Address: Edit page" +msgstr "WebCfg - Página Firewall: Endereços IP Virtuais: Editar" + +#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:395 +#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:397 +msgid "Allow access to the 'Firewall: Virtual IP Address: Edit' page." +msgstr "Permitir acesso à página 'Firewall: Endereços IP Virtuais: Editar'." + +#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:400 +#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:402 +msgid "WebCfg - AJAX: Get Service Providers" +msgstr "WebCfg - AJAX: Obter Provedores de Serviço" + +#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:401 +#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:403 +msgid "Allow access to the 'AJAX: Service Providers' page." +msgstr "Permitir acesso à página 'AJAX: Provedores de Serviço'." + +#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:406 +#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:408 +msgid "WebCfg - AJAX: Get Stats" +msgstr "WebCfg - Página AJAX: Obter Status" + +#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:407 +#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:409 +msgid "Allow access to the 'AJAX: Get Stats' page." +msgstr "Permitir acesso à página 'AJAX: Obter Status'." + +#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:412 +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:414 +msgid "WebCfg - Diagnostics: Interface Traffic page" +msgstr "WebCfg - Página Diagnóstico: Tráfego de Interface" + +#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:413 +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:415 +msgid "Allow access to the 'Diagnostics: Interface Traffic' page." +msgstr "Permitir acesso à página 'Diagnóstico: Tráfego de Interface'." + +#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:814 +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:832 +#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:838 +#: etc/inc/priv.defs.inc:420 etc/inc/priv.defs.inc:846 +msgid "WebCfg - Diagnostics: CPU Utilization page" +msgstr "WebCfg - Página Diagnóstico: Utilização de CPU" + +#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:815 +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:833 +#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:839 +#: etc/inc/priv.defs.inc:421 etc/inc/priv.defs.inc:847 +msgid "Allow access to the 'Diagnostics: CPU Utilization' page." +msgstr "Permitir acesso à Página 'Diagnóstico: Utilização de CPU'." + +#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:424 +#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:426 +msgid "WebCfg - Diagnostics: Halt system page" +msgstr "WebCfg - Página Diagnóstico: Desligar sistema" + +#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:425 +#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:427 +msgid "Allow access to the 'Diagnostics: Halt system' page." +msgstr "Permitir acesso à página 'Diagnóstico: Desligar sistema'." + +#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:430 +#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:432 +msgid "WebCfg - Required for javascript page" +msgstr "WebCfg - Página Requerido por javascript" + +#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:431 +#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:433 +msgid "Allow access to the 'Required for javascript' page." +msgstr "Permitir acesso à página 'Requerido por javascript'." + +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:436 +#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:438 +msgid "WebCfg - XMLRPC Interface Stats page" +msgstr "WebCfg - Página Estatísticas de Interface XMLRPC" + +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:437 +#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:439 +msgid "Allow access to the 'XMLRPC Interface Stats' page." +msgstr "Permitir acesso à página 'Estatísticas de Interface XMLRPC'." + +#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:442 +#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:444 +msgid "WebCfg - System: Login / Logout page / Dashboard" +msgstr "WebCfg - Sistema: Login / Página de Logout / Dashboard" + +#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:443 +#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:445 +msgid "Allow access to the 'System: Login / Logout' page and Dashboard." +msgstr "Permitir acesso à página 'Sistema: Login / Logout' e Dashboard." + +#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:448 +#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:450 +msgid "WebCfg - Interfaces: WAN page" +msgstr "WebCfg - Página Interfaces: WAN" + +#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:449 +#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:451 +msgid "Allow access to the 'Interfaces' page." +msgstr "Permitir acesso à página 'Interfaces'." + +#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:454 +#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:456 +msgid "WebCfg - Interfaces: Assign network ports page" +msgstr "WebCfg - Página Interfaces: Atribuir portas de rede" + +#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:455 +#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:457 +msgid "Allow access to the 'Interfaces: Assign network ports' page." +msgstr "Permitir acesso à página 'Interfaces: Atribuir portas de rede'." + +#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:460 +#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:462 +msgid "WebCfg - Interfaces: Bridge page" +msgstr "WebCfg - Página Interfaces: Ponte" + +#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:461 +#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:463 +msgid "Allow access to the 'Interfaces: Bridge' page." +msgstr "Permitir acesso à página 'Interfaces: Ponte'." + +#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:466 +#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:468 +msgid "WebCfg - Interfaces: Bridge edit page" +msgstr "WebCfg - Página Interfaces: Editar Ponte" + +#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:467 +#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:469 +msgid "Allow access to the 'Interfaces: Bridge : Edit' page." +msgstr "Permitir acesso à página 'Interfaces: Editar Ponte'." + +#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:472 +#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:474 +msgid "WebCfg - Interfaces: GIF page" +msgstr "WebCfg - Página Interfaces: GIF" + +#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:473 +#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:475 +msgid "Allow access to the 'Interfaces: GIF' page." +msgstr "Permitir acesso à página 'Interfaces: GIF'." + +#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:478 +#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:480 +msgid "WebCfg - Interfaces: GIF: Edit page" +msgstr "WebCfg - Página Interfaces: GIF: Editar" + +#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:479 +#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:481 +msgid "Allow access to the 'Interfaces: GIF: Edit' page." +msgstr "Permitir acesso à página 'Interfaces: GIF: Editar'." + +#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:484 +#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:486 +msgid "WebCfg - Interfaces: GRE page" +msgstr "WebCfg - Página Interfaces: GRE" + +#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:485 +#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:487 +msgid "Allow access to the 'Interfaces: GRE' page." +msgstr "Permitir acesso à página 'Interfaces: GRE'." + +#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:490 +#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:492 +msgid "WebCfg - Interfaces: GRE: Edit page" +msgstr "WebCfg - Página Interfaces: GRE: Editar" + +#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:491 +#: etc/inc/priv.defs.inc:497 etc/inc/priv.defs.inc:493 +msgid "Allow access to the 'Interfaces: GRE: Edit' page." +msgstr "Permitir acesso à página 'Interfaces: GRE: Editar'." + +#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:496 +#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:498 +msgid "WebCfg - Interfaces: Groups page" +msgstr "WebCfg - Página Interfaces: Grupos" + +#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:497 +#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:499 +msgid "Create interface groups" +msgstr "Criar grupos de interface" + +#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:502 +#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:504 +msgid "WebCfg - Interfaces: Groups: Edit page" +msgstr "WebCfg - Página Interfaces: Grupos: Editar" + +#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:503 +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:505 +msgid "Edit Interface groups" +msgstr "Editar grupos de Interface" + +#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:508 +#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:510 +msgid "WebCfg - Interfaces: LAGG: page" +msgstr "WebCfg - Página Interfaces: LAGG" + +#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:497 +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:515 +#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:511 +#: etc/inc/priv.defs.inc:517 +msgid "Edit Interface LAGG" +msgstr "Editar LAGG da Interface" + +#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:514 +#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:516 +msgid "WebCfg - Interfaces: LAGG: Edit page" +msgstr "WebCfg - Página Interfaces: LAGG: Editar" + +#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:520 +#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:522 +msgid "WebCfg - Interfaces: ppps page" +msgstr "WebCfg - Interfaces: Página PPPs" + +#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:521 +#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:523 +msgid "Allow access to the 'Interfaces: ppps' page." +msgstr "Permitir acesso à página 'Interfaces: PPPs'." + +#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:526 +#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:528 +msgid "WebCfg - Interfaces: PPPs: Edit page" +msgstr "WebCfg - Interfaces: PPPs: Editar página" + +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:527 +#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:529 +msgid "Allow access to the 'Interfaces: PPPs: Edit' page." +msgstr "Permitir acesso à página 'Interfaces: PPPs: Editar página'." + +#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:532 +#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:534 +msgid "WebCfg - Interfaces: QinQ page" +msgstr "WebCfg - Página Interfaces: QinQ" + +#: etc/inc/priv.defs.inc:515 etc/inc/priv.defs.inc:533 +#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:535 +msgid "Allow access to the 'Interfaces: QinQ' page." +msgstr "Permitir acesso à página 'Interfaces: QinQ'." + +#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:538 +#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:540 +msgid "WebCfg - Interfaces: QinQ: Edit page" +msgstr "WebCfg - Página Interfaces: QinQ: Editar" + +#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:539 +#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:541 +msgid "Edit Interface qinq" +msgstr "Editar Qinq da Interface" + +#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:544 +#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:546 +msgid "WebCfg - Interfaces: VLAN page" +msgstr "WebCfg - Página Interfaces: VLAN" + +#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:545 +#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:547 +msgid "Allow access to the 'Interfaces: VLAN' page." +msgstr "Permitir acesso à página 'Interfaces: VLAN'." + +#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:550 +#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:552 +msgid "WebCfg - Interfaces: VLAN: Edit page" +msgstr "WebCfg - Página Interfaces: VLAN: Editar" + +#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:551 +#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:553 +msgid "Allow access to the 'Interfaces: VLAN: Edit' page." +msgstr "Permitir acesso à página 'Interfaces: VLAN'." + +#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:556 +#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:558 +msgid "WebCfg - Interfaces: Wireless page" +msgstr "WebCfg - Página Interfaces: Sem fio" + +#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:557 +#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:559 +msgid "Allow access to the 'Interfaces: Wireless' page." +msgstr "Permitir acesso à página 'Interfaces: Sem fio'." + +#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:562 +#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:564 +msgid "WebCfg - Interfaces: Wireless edit page" +msgstr "WebCfg - Página Interfaces: Editar Sem fio" + +#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:563 +#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:565 +msgid "Allow access to the 'Interfaces: Wireless : Edit' page." +msgstr "WebCfg - Página 'Interfaces: Editar Sem fio'." + +#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:568 +#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:570 +msgid "WebCfg - System: License page" +msgstr "WebCfg - Página Sistema: Licença" + +#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:569 +#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:571 +msgid "Allow access to the 'System: License' page." +msgstr "Permitir acesso à página 'Sistema: Licença'." + +#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:574 +#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:576 +msgid "WebCfg - Services: Load Balancer: Monitors page" +msgstr "WebCfg - Página Serviços: Balanceador de Carga: Monitores" + +#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:575 +#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:577 +msgid "Allow access to the 'Services: Load Balancer: Monitors' page." +msgstr "Permitir acesso à página 'Serviços: Balanceador de Carga: Monitores'." + +#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:580 +#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:582 +msgid "WebCfg - Services: Load Balancer: Monitor: Edit page" +msgstr "WebCfg - Página Serviços: Balanceador de Carga: Monitores: Editar" + +#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:581 +#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:583 +msgid "Allow access to the 'Services: Load Balancer: Monitor: Edit' page." +msgstr "Permitir acesso à página 'Serviços: Balanceador de Carga: Monitores: Editar'." + +#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:586 +#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:588 +msgid "WebCfg - Load Balancer: Pool page" +msgstr "WebCfg - Página Balanceador de Carga: Pool" + +#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:587 +#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:589 +msgid "Allow access to the 'Load Balancer: Pool' page." +msgstr "Permitir acesso à página 'Balanceador de Carga: Pool'." + +#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:592 +#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:594 +msgid "WebCfg - Load Balancer: Pool: Edit page" +msgstr "WebCfg - Página Balanceador de Carga: Pool: Editar" + +#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:593 +#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:595 +msgid "Allow access to the 'Load Balancer: Pool: Edit' page." +msgstr "Permitir acesso à página 'Balanceador de Carga: Pool: Editar'." + +#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:598 +#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:600 +msgid "WebCfg - Services: Load Balancer: Relay Actions page" +msgstr "WebCfg - Página Serviços: Balanceador de Carga: Ações de Relay" + +#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:599 +#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:601 +msgid "Allow access to the 'Services: Load Balancer: Relay Actions' page." +msgstr "Permitir acesso à página 'Página Serviços: Balanceador de Carga: Ações de Relay'." + +#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:604 +#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:606 +msgid "WebCfg - Services: Load Balancer: Relay Action: Edit page" +msgstr "WebCfg - Serviços: Balanceador de Carga: Ações de Relay: Página Editar" + +#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:605 +#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:607 +msgid "Allow access to the 'Services: Load Balancer: Relay Action: Edit' page." +msgstr "Permitir acesso à página 'Página Serviços: Balanceador de Carga: Ações de Relay: Editar'." + +#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:610 +#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:612 +msgid "WebCfg - Services: Load Balancer: Relay Protocols page" +msgstr "WebCfg - Página Serviços: Balanceador de Carga: Protocolos Relay" + +#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:611 +#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:613 +msgid "Allow access to the 'Services: Load Balancer: Relay Protocols' page." +msgstr "Permitir acesso à página 'Serviços: Balanceador de Carga: Protocolos Relay'." + +#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:616 +#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:618 +msgid "WebCfg - Services: Load Balancer: Relay Protocol: Edit page" +msgstr "WebCfg - Página Serviços: Balanceador de Carga: Protocolo Relay: Editar" + +#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:617 +#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:619 +msgid "Allow access to the 'Services: Load Balancer: Relay Protocol: Edit' page." +msgstr "Permitir acesso à  página 'Serviços: Balanceador de Carga: Protocolo Relay: Editar'." + +#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:622 +#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:624 +msgid "WebCfg - Services: Load Balancer: Virtual Servers page" +msgstr "WebCfg - Página Serviços: Balanceador de Carga: Servidores Virtuais" + +#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:623 +#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:625 +msgid "Allow access to the 'Services: Load Balancer: Virtual Servers' page." +msgstr "Permitir acesso à página 'Serviços: Balanceador de Carga: Servidores Virtuais'." + +#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:628 +#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:630 +msgid "WebCfg - Load Balancer: Virtual Server: Edit page" +msgstr "WebCfg - Página Balanceador de Carga: Servidor Virtual: Editar" + +#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:629 +#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:631 +msgid "Allow access to the 'Load Balancer: Virtual Server: Edit' page." +msgstr "Permitir acesso à página 'Balanceador de Carga: Servidor Virtual: Editar'." + +#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:634 +#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:636 +msgid "WebCfg - Package: Settings page" +msgstr "WebCfg - Página Pacote: Configurações" + +#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:635 +#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:637 +msgid "Allow access to the 'Package: Settings' page." +msgstr "Permitir acesso à página 'Pacote: Configurações'." + +#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:640 +#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:642 +msgid "WebCfg - Package: Edit page" +msgstr "WebCfg - Página Pacote: Editar" + +#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:641 +#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:643 +msgid "Allow access to the 'Package: Edit' page." +msgstr "Permitir acesso à página 'Pacote: Editar'." + +#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:646 +#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:648 +msgid "WebCfg - System: Package Manager page" +msgstr "WebCfg - Página Sistema: Gerenciador de Pacote" + +#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:647 +#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:649 +msgid "Allow access to the 'System: Package Manager' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador de Pacote'." + +#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:652 +#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:654 +msgid "WebCfg - System: Package Manager: Install Package page" +msgstr "WebCfg - Página Sistema: Gerenciador de Pacote: Instalar Pacote" + +#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:653 +#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:655 +msgid "Allow access to the 'System: Package Manager: Install Package' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador de Pacote: Instalar Pacote'." + +#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:658 +#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:660 +msgid "WebCfg - System: Package Manager: Installed page" +msgstr "WebCfg - Página Sistema: Gerenciador de Pacote: Instalado" + +#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:659 +#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:661 +msgid "Allow access to the 'System: Package Manager: Installed' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador de Pacote: Instalado'." + +#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:664 +#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:666 +msgid "WebCfg - Packages: Settings page" +msgstr "WebCfg - Página Pacotes: Configurações" + +#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:665 +#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:667 +msgid "Allow access to the 'Packages: Settings' page." +msgstr "Permitir acesso à página 'Pacotes: Configurações'." + +#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:670 +#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:672 +msgid "WebCfg - Diagnostics: Reboot System page" +msgstr "WebCfg - Página Diagnóstico: Reiniciar Sistema" + +#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:671 +#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:673 +msgid "Allow access to the 'Diagnostics: Reboot System' page." +msgstr "Permitir acesso à página 'Diagnóstico: Reiniciar Sistema'." + +#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:676 +#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:678 +msgid "WebCfg - Diagnostics: Restart HTTPD : System page" +msgstr "WebCfg - Página Diagnóstico: Reiniciar HTTPD: Sistema" + +#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:677 +#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:679 +msgid "Allow access to the 'Diagnostics: Restart HTTPD: System' page." +msgstr "Permitir acesso à página 'Diagnóstico: Reiniciar HTTPD: Sistema'." + +#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:682 +#: etc/inc/priv.defs.inc:688 etc/inc/priv.defs.inc:684 +msgid "WebCfg - Services: Captive portal page" +msgstr "WebCfg - Página Serviços: Portal Captive" + +#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:683 +#: etc/inc/priv.defs.inc:689 etc/inc/priv.defs.inc:685 +msgid "Allow access to the 'Services: Captive portal' page." +msgstr "Permitir acesso à página 'Serviços: Portal Captive'." + +#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:688 +#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:690 +msgid "WebCfg - Services: Captive portal: File Manager page" +msgstr "WebCfg - Página Serviços: Portal Captive: Gerenciador de Arquivo" + +#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:689 +#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:691 +msgid "Allow access to the 'Services: Captive portal: File Manager' page." +msgstr "Permitir acesso à página 'Serviços: Portal Captive: Gerenciador de Arquivo'." + +#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:688 +#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:706 +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712 +#: etc/inc/priv.defs.inc:696 etc/inc/priv.defs.inc:708 +msgid "WebCfg - Services: Captive portal: Allowed IPs page" +msgstr "WebCfg - Página Sistema: Portal Captive: IPs permitidos" + +#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:689 +#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:707 +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713 +#: etc/inc/priv.defs.inc:697 etc/inc/priv.defs.inc:709 +msgid "Allow access to the 'Services: Captive portal: Allowed IPs' page." +msgstr "Permitir acesso à página 'Serviços: Portal Captive: IPs Permitidos'." + +#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:694 +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712 +#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:718 +#: etc/inc/priv.defs.inc:702 etc/inc/priv.defs.inc:714 +msgid "WebCfg - Services: Captive portal: Edit Allowed IPs page" +msgstr "WebCfg - Página Serviços: Portal Captive: Editar IPs Permitidos" + +#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:695 +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713 +#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:719 +#: etc/inc/priv.defs.inc:703 etc/inc/priv.defs.inc:715 +msgid "Allow access to the 'Services: Captive portal: Edit Allowed IPs' page." +msgstr "Permitir acesso à página 'Serviços: Portal Captive: Editar IPs Permitidos'." + +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:718 +#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:720 +msgid "WebCfg - Services: Captive portal: Mac Addresses page" +msgstr "WebCfg - Página Serviços: Portal Captive: Endereços MAC" + +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:719 +#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:721 +msgid "Allow access to the 'Services: Captive portal: Mac Addresses' page." +msgstr "Permitir acesso à página 'Serviços: Portal Captive: Endereços MAC'." + +#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:724 +#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:726 +msgid "WebCfg - Services: Captive portal: Edit MAC Addresses page" +msgstr "WebCfg - Página Serviços: Portal Captive: Editar Endereços MAC" + +#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:725 +#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:727 +msgid "Allow access to the 'Services: Captive portal: Edit MAC Addresses' page." +msgstr "Permitir acesso à página 'Serviços: Portal Captive: Endereços MAC'." + +#: etc/inc/priv.defs.inc:712 etc/inc/priv.defs.inc:730 +#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:744 +msgid "WebCfg - Services: Captive portal Vouchers page" +msgstr "WebCfg - Página Serviços: Vouchers do portal Captive" + +#: etc/inc/priv.defs.inc:713 etc/inc/priv.defs.inc:731 +#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:745 +msgid "Allow access to the 'Services: Captive portal Vouchers' page." +msgstr "Permitir acesso à página 'Serviços: Vouchers do portal Captive'." + +#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:742 +#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:756 +msgid "WebCfg - Services: DHCP server page" +msgstr "WebCfg - Página Serviços: Servidor DHCP" + +#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:743 +#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:757 +msgid "Allow access to the 'Services: DHCP server' page." +msgstr "Permitir acesso à página 'Serviços: Servidor DHCP'." + +#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:748 +#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:762 +msgid "WebCfg - Services: DHCP Server : Edit static mapping page" +msgstr "WebCfg - Página Serviços: Servidor DHCP: Editar mapeamento estático" + +#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:749 +#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:763 +msgid "Allow access to the 'Services: DHCP Server : Edit static mapping' page." +msgstr "Permitir acesso à página 'Serviços: Servidor DHCP: Editar mapeamento estático'." + +#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:754 +#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:768 +msgid "WebCfg - Services: DHCP Relay page" +msgstr "WebCfg - Página Serviços: DHCP Relay" + +#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:755 +#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:769 +msgid "Allow access to the 'Services: DHCP Relay' page." +msgstr "Permitir acesso à página 'Serviços: DHCP Relay'." + +#: etc/inc/priv.defs.inc:742 etc/inc/priv.defs.inc:760 +#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:774 +msgid "WebCfg - Services: DHCPv6 Relay page" +msgstr "WebCfg - Serviços: Página DHCPv6 Relay" + +#: etc/inc/priv.defs.inc:743 etc/inc/priv.defs.inc:761 +#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:775 +msgid "Allow access to the 'Services: DHCPv6 Relay' page." +msgstr "Permitir acesso à página 'Serviços: DHCPv6 Relay'." + +#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:766 +#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:780 +msgid "WebCfg - Services: DNS Forwarder page" +msgstr "WebCfg - Página Serviços: DNS Forwarder" + +#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:767 +#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:781 +msgid "Allow access to the 'Services: DNS Forwarder' page." +msgstr "Permitir acesso à página 'Serviços: DNS Forwarder'." + +#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:772 +#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:786 +msgid "WebCfg - Services: DNS Forwarder: Edit Domain Override page" +msgstr "WebCfg - Página Serviços: DNS Forwarder: Editar Substituição de Domínio" + +#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:773 +#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:787 +msgid "Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page." +msgstr "Permitir acesso à página 'Serviços: DNS Forwarder: Editar Substituição de Domínio'." + +#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:778 +#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:792 +msgid "WebCfg - Services: DNS Forwarder: Edit host page" +msgstr "WebCfg - Página Serviços: DNS Forwarder: Editar" + +#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:779 +#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:793 +msgid "Allow access to the 'Services: DNS Forwarder: Edit host' page." +msgstr "Permitir acesso à página 'Serviços: DNS Forwarder: Editar'." + +#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:784 +#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:798 +msgid "WebCfg - Services: Dynamic DNS clients page" +msgstr "WebCfg - Página Serviços: Clientes DNS Dinâmico" + +#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:785 +#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:799 +msgid "Allow access to the 'Services: Dynamic DNS clients' page." +msgstr "Permitir acesso à página 'Serviços: Clientes DNS Dinâmico'." + +#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:790 +#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:804 +msgid "WebCfg - Services: Dynamic DNS client page" +msgstr "WebCfg - Página Serviços: Cliente DNS Dinâmico" + +#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:791 +#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:805 +msgid "Allow access to the 'Services: Dynamic DNS client' page." +msgstr "Permitir acesso à página 'Serviços: Cliente DNS Dinâmico'." + +#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:796 +#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:810 +msgid "WebCfg - Services: Igmpproxy page" +msgstr "WebCfg - Página Serviços: Igmpproxy" + +#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:797 +#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:811 +msgid "Allow access to the 'Services: Igmpproxy' page." +msgstr "Permitir acesso à página 'Serviços: Igmpproxy'." + +#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:802 +#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:816 +msgid "WebCfg - Firewall: Igmpproxy: Edit page" +msgstr "WebCfg - Página Firewall: Igmpproxy: Editar" + +#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:803 +#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:817 +msgid "Allow access to the 'Firewall: Igmpproxy' page." +msgstr "Permitir acesso à página 'Firewall: Igmpproxy:'." + +#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:808 +#: etc/inc/priv.defs.inc:814 etc/inc/priv.defs.inc:822 +msgid "WebCfg - Services: RFC 2136 clients page" +msgstr "WebCfg - Página Serviços: Clientes de RFC 2136" + +#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:809 +#: etc/inc/priv.defs.inc:815 etc/inc/priv.defs.inc:823 +msgid "Allow access to the 'Services: RFC 2136 clients' page." +msgstr "Permitir acesso à página 'Serviços: Clientes de RFC 2136'." + +#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:814 +#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:828 +msgid "WebCfg - Services: SNMP page" +msgstr "WebCfg - Página Serviços: SNMP" + +#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:815 +#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:829 +msgid "Allow access to the 'Services: SNMP' page." +msgstr "Permitir acesso à página 'Serviços: SNMP'." + +#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:820 +#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:834 +msgid "WebCfg - Services: Wake on LAN page" +msgstr "WebCfg - Página Serviços: Wake on LAN" + +#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:821 +#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:835 +msgid "Allow access to the 'Services: Wake on LAN' page." +msgstr "Permitir acesso à página 'Serviços: Wake on LAN'." + +#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:826 +#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:840 +msgid "WebCfg - Services: Wake on LAN: Edit page" +msgstr "WebCfg - Página Serviços: Wake on LAN: Editar" + +#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:827 +#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:841 +msgid "Allow access to the 'Services: Wake on LAN: Edit' page." +msgstr "Permitir acesso à página 'Serviços: Wake on LAN: Editar'." + +#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:838 +#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:852 +msgid "WebCfg - Hidden: Detailed Status page" +msgstr "WebCfg - Página Omitida: Status Detalhado" + +#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:839 +#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:853 +msgid "Allow access to the 'Hidden: Detailed Status' page." +msgstr "Permitir acesso à página 'Omitida: Status Detalhado'." + +#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:844 +#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:858 +msgid "WebCfg - Status: Captive portal page" +msgstr "WebCfg - Página Status: Portal Captive" + +#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:845 +#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:859 +msgid "Allow access to the 'Status: Captive portal' page." +msgstr "Permitir acesso à página 'Status: Portal Captive'." + +#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:850 +#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:864 +msgid "WebCfg - Status: Captive portal test Vouchers page" +msgstr "WebCfg - Página Status: Vouchers de teste do portal Captive" + +#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:851 +#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:865 +msgid "Allow access to the 'Status: Captive portal Test Vouchers' page." +msgstr "Permitir acesso à página 'Status: Vouchers de teste do portal Captive'." + +#: etc/inc/priv.defs.inc:838 etc/inc/priv.defs.inc:856 +#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:870 +msgid "WebCfg - Status: Captive portal Voucher Rolls page" +msgstr "WebCfg - Página Status: Listas de Vouchers do portal Captive" + +#: etc/inc/priv.defs.inc:839 etc/inc/priv.defs.inc:857 +#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:871 +msgid "Allow access to the 'Status: Captive portal Voucher Rolls' page." +msgstr "Permitir acesso à página 'Status: Listas de Vouchers do portal Captive'." + +#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:862 +#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:876 +msgid "WebCfg - Status: Captive portal Vouchers page" +msgstr "WebCfg - Página Status: Vouchers do portal Captive" + +#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:863 +#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:877 +msgid "Allow access to the 'Status: Captive portal Vouchers' page." +msgstr "Permitir acesso à página 'Status: Vouchers do portal Captive'." + +#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:868 +#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:882 +msgid "WebCfg - Status: DHCP leases page" +msgstr "WebCfg - Página Status: Concessões DHCP" + +#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:869 +#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:883 +msgid "Allow access to the 'Status: DHCP leases' page." +msgstr "Permitir acesso à  página 'Status: Concessões DHCP'." + +#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:874 +#: etc/inc/priv.defs.inc:880 etc/inc/priv.defs.inc:888 +msgid "WebCfg - Status: Filter Reload Status page" +msgstr "WebCfg - Página Status: Status do Filtro" + +#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:875 +#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:889 +msgid "Allow access to the 'Status: Filter Reload Status' page." +msgstr "Permitir acesso à página 'Status: Status do Filtro'." + +#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:880 +#: etc/inc/priv.defs.inc:886 etc/inc/priv.defs.inc:894 +msgid "WebCfg - Status: Gateway Groups page" +msgstr "WebCfg - Página Status: Grupos de Gateway" + +#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:881 +#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:895 +msgid "Allow access to the 'Status: Gateway Groups' page." +msgstr "Permitir acesso à página 'Status: Grupos de Gateway'." + +#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:886 +#: etc/inc/priv.defs.inc:892 etc/inc/priv.defs.inc:900 +msgid "WebCfg - Status: Gateways page" +msgstr "WebCfg - Página Status: Gateways" + +#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:887 +#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:901 +msgid "Allow access to the 'Status: Gateways' page." +msgstr "Permitir acesso à página 'Status: Gateways'." + +#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:892 +#: etc/inc/priv.defs.inc:898 etc/inc/priv.defs.inc:906 +msgid "WebCfg - Status: Traffic Graph page" +msgstr "WebCfg - Página Status: Gráfico de Tráfego" + +#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:893 +#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:907 +msgid "Allow access to the 'Status: Traffic Graph' page." +msgstr "Permitir acesso à página 'Status: Gráfico de Tráfego'." + +#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:899 +#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:913 +msgid "WebCfg - Status: CPU load page" +msgstr "WebCfg - Página Status: Carregamento de CPU" + +#: etc/inc/priv.defs.inc:882 etc/inc/priv.defs.inc:900 +#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:914 +msgid "Allow access to the 'Status: CPU load' page." +msgstr "Permitir acesso à página 'Status: Carregamento de CPU'." + +#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:905 +#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:919 +msgid "WebCfg - Status: Interfaces page" +msgstr "WebCfg - Página Status: Interfaces" + +#: etc/inc/priv.defs.inc:888 etc/inc/priv.defs.inc:906 +#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:920 +msgid "Allow access to the 'Status: Interfaces' page." +msgstr "Permitir acesso à página 'Status: Interfaces'." + +#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:911 +#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:925 +msgid "WebCfg - Status: Load Balancer: Pool page" +msgstr "WebCfg - Página Status: Balanceador de Carga: Pool" + +#: etc/inc/priv.defs.inc:894 etc/inc/priv.defs.inc:912 +#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:926 +msgid "Allow access to the 'Status: Load Balancer: Pool' page." +msgstr "Permitir acesso à  página 'Status: Balanceador de Carga: Pool'." + +#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:917 +#: etc/inc/priv.defs.inc:923 etc/inc/priv.defs.inc:931 +msgid "WebCfg - Status: Load Balancer: Virtual Server page" +msgstr "WebCfg - Página Status: Balanceador de Carga: Servidor Virtual" + +#: etc/inc/priv.defs.inc:900 etc/inc/priv.defs.inc:918 +#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:932 +msgid "Allow access to the 'Status: Load Balancer: Virtual Server' page." +msgstr "Permitir acesso à página 'Status: Balanceador de Carga: Servidor Virtual'." + +#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:923 +#: etc/inc/priv.defs.inc:929 etc/inc/priv.defs.inc:937 +msgid "WebCfg - Status: OpenVPN page" +msgstr "WebCfg - Página Status: OpenVPN" + +#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:924 +#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:938 +msgid "Allow access to the 'Status: OpenVPN' page." +msgstr "Permitir acesso à página 'Status: OpenVPN'." + +#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:929 +#: etc/inc/priv.defs.inc:935 etc/inc/priv.defs.inc:943 +msgid "WebCfg - Status: Traffic shaper: Queues page" +msgstr "WebCfg - Página Status: Traffic Shaper: Filas" + +#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:930 +#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:944 +msgid "Allow access to the 'Status: Traffic shaper: Queues' page." +msgstr "Permitir acesso à página 'Status: Traffic Shaper: Filas'." + +#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:935 +#: etc/inc/priv.defs.inc:941 etc/inc/priv.defs.inc:949 +msgid "WebCfg - Status: RRD Graphs page" +msgstr "WebCfg - Página Status: Gráficos de RRD" + +#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:936 +#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:950 +msgid "Allow access to the 'Status: RRD Graphs' page." +msgstr "Permitir acesso à página 'Status: Gráficos de RRD'." + +#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:942 +#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:956 +msgid "WebCfg - Status: RRD Graphs settings page" +msgstr "WebCfg - Página Status: Configurações de Gráficos de RRD" + +#: etc/inc/priv.defs.inc:925 etc/inc/priv.defs.inc:943 +#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:957 +msgid "Allow access to the 'Status: RRD Graphs: settings' page." +msgstr "Permitir acesso à página 'Status: Configurações de Gráficos de RRD'." + +#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:948 +#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:962 +msgid "WebCfg - Status: Services page" +msgstr "WebCfg - Página Status: Serviços" + +#: etc/inc/priv.defs.inc:931 etc/inc/priv.defs.inc:949 +#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:963 +msgid "Allow access to the 'Status: Services' page." +msgstr "Permitir acesso à página 'Status: Serviços'." + +#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:954 +#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:968 +msgid "WebCfg - Status: UPnP Status page" +msgstr "WebCfg - Página Status: Status UPnP" + +#: etc/inc/priv.defs.inc:937 etc/inc/priv.defs.inc:955 +#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:969 +msgid "Allow access to the 'Status: UPnP Status' page." +msgstr "Permitir acesso à página 'Status: Status UPnP'." + +#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:960 +#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:974 +msgid "WebCfg - Status: Wireless page" +msgstr "WebCfg - Página Status: Conexão sem fio" + +#: etc/inc/priv.defs.inc:943 etc/inc/priv.defs.inc:961 +#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:975 +msgid "Allow access to the 'Status: Wireless' page." +msgstr "Permitir acesso à página 'Status: Conexão sem fio'." + +#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:966 +#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:980 +msgid "WebCfg - System: General Setup page" +msgstr "WebCfg - Sistema: Configuração Geral" + +#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:967 +#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:981 +msgid "Allow access to the 'System: General Setup' page." +msgstr "Permitir acesso à página 'Sistema: Configurações Gerais'." + +#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:972 +#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:986 +msgid "WebCfg - System: Advanced: Admin Access Page" +msgstr "WebCfg - Página Sistema: Avançado: Acesso de Administrador" + +#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:973 +#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:987 +msgid "Allow access to the 'System: Advanced: Admin Access' page." +msgstr "Permitir acesso à página 'Sistema: Avançado: Acesso de Administrador'." + +#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:978 +#: etc/inc/priv.defs.inc:984 etc/inc/priv.defs.inc:992 +msgid "WebCfg - System: Advanced: Firewall and NAT page" +msgstr "WebCfg - Página Sistema: Avançado: Firewall e NAT" + +#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:979 +#: etc/inc/priv.defs.inc:985 etc/inc/priv.defs.inc:993 +msgid "Allow access to the 'System: Advanced: Firewall and NAT' page." +msgstr "Permitir acesso à página 'Sistema: Avançado: Firewall e NAT'." + +#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:984 +#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:998 +msgid "WebCfg - System: Advanced: Miscellaneous page" +msgstr "WebCfg - Página Sistema: Avançado: Variados" + +#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:985 +#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:999 +msgid "Allow access to the 'System: Advanced: Miscellaneous' page." +msgstr "Permitir acesso à página 'Sistema: Avançado: Variados'." + +#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:990 +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1004 +msgid "WebCfg - System: Advanced: Network page" +msgstr "WebCfg - Página Sistema: Avançado: Rede" + +#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:991 +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1005 +msgid "Allow access to the 'System: Advanced: Networking' page." +msgstr "Permitir acesso à página 'Sistema: Avançado: Rede'." + +#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:984 +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1002 +#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1010 +#: etc/inc/priv.defs.inc:1016 +msgid "WebCfg - System: Advanced: Tunables page" +msgstr "WebCfg - Página Sistema: Avançado: Ajustes" + +#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:985 +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1003 +#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1011 +#: etc/inc/priv.defs.inc:1017 +msgid "Allow access to the 'System: Advanced: Tunables' page." +msgstr "Permitir acesso à página 'Sistema: Avançado: Ajustes'." + +#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:1008 +#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1022 +msgid "WebCfg - System: Authentication Servers" +msgstr "WebCfg - Página Sistema: Servidores de Autenticação" + +#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:1009 +#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1023 +msgid "Allow access to the 'System: Authentication Servers' page." +msgstr "Permitir acesso à página 'Sistema: Servidores de Autenticação'." + +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1014 +#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1028 +msgid "WebCfg - System: CA Manager" +msgstr "WebCfg - Sistema: Gerenciador CA" + +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1015 +#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1029 +msgid "Allow access to the 'System: CA Manager' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador CA'." + +#: etc/inc/priv.defs.inc:1002 etc/inc/priv.defs.inc:1020 +#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1034 +msgid "WebCfg - System: Certificate Manager" +msgstr "WebCfg - Sistema: Gerenciador de Certificado" + +#: etc/inc/priv.defs.inc:1003 etc/inc/priv.defs.inc:1021 +#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1035 +msgid "Allow access to the 'System: Certificate Manager' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciados de Certificado'." + +#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1026 +#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1040 +msgid "WebCfg - System: CRL Manager" +msgstr "WebCfg - Sistema: Gerenciador CRL" + +#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1027 +#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1041 +msgid "Allow access to the 'System: CRL Manager' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador CRL'." + +#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1032 +#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1046 +msgid "WebCfg - System: Firmware: Manual Update page" +msgstr "WebCfg - Página Sistema: Firmware: Atualização Manual" + +#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1033 +#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1047 +msgid "Allow access to the 'System: Firmware: Manual Update' page." +msgstr "Permitir acesso à  página 'Sistema: Firmware: Atualização Manual'." + +#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1038 +#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1052 +msgid "WebCfg - System: Firmware: Check For Update page" +msgstr "WebCfg - Página Sistema: Firmware: Verificar por Atualização" + +#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1039 +#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1053 +msgid "Allow access to the 'System: Firmware: Check For Update' page." +msgstr "Permitir acesso à página 'Sistema: Firmware: Verificar por Atualização'." + +#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1044 +#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1058 +msgid "WebCfg - System: Firmware: Auto Update page" +msgstr "WebCfg - Página Sistema: Firmware: Auto Atualização" + +#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1045 +#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1059 +msgid "Allow access to the 'System: Firmware: Auto Update' page." +msgstr "Permitir acesso à página 'Sistema: Firmware: Página de Auto Atualização'." + +#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1050 +#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1064 +msgid "WebCfg - System: Firmware: Settings page" +msgstr "WebCfg - Página Sistema: Firmware: Configurações" + +#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1051 +#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1065 +msgid "Allow access to the 'System: Firmware: Settings' page." +msgstr "Permitir acesso à página 'Sistema: Firmware: Configurações'." + +#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1056 +#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1070 +msgid "WebCfg - System: Gateway Groups page" +msgstr "WebCfg - Página Sistema: Grupos de Gateway" + +#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1057 +#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1071 +msgid "Allow access to the 'System: Gateway Groups' page." +msgstr "Permitir acesso à página 'Sistema: Grupos de Gateway'." + +#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1062 +#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1076 +msgid "WebCfg - System: Gateways: Edit Gateway Groups page" +msgstr "WebCfg - Página Sistema: Gateways: Editar Grupos de Gateways" + +#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1063 +#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1077 +msgid "Allow access to the 'System: Gateways: Edit Gateway Groups' page." +msgstr "Permitir acesso à página 'Sistema: Gateways: Editar Grupos de Gateways'." + +#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1068 +#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1082 +msgid "WebCfg - System: Gateways page" +msgstr "WebCfg - Página Sistema: Gateways" + +#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1069 +#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1083 +msgid "Allow access to the 'System: Gateways' page." +msgstr "Permitir acesso à página 'Sistema: Gateways'." + +#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1074 +#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1088 +msgid "WebCfg - System: Gateways: Edit Gateway page" +msgstr "WebCfg - Página Sistema: Gateway: Editar Gateway" + +#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1075 +#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1089 +msgid "Allow access to the 'System: Gateways: Edit Gateway' page." +msgstr "Permitir acesso à página 'Sistema: Gateway: Editar Gateway'." + +#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1080 +#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1094 +msgid "WebCfg - System: Group manager page" +msgstr "WebCfg - Página Sistema: Gerenciador de Grupo" + +#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1081 +#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1095 +msgid "Allow access to the 'System: Group manager' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador de Grupo'." + +#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1086 +#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1100 +msgid "WebCfg - System: Group Manager: Add Privileges page" +msgstr "WebCfg - Página Sistema: Gerenciador de Grupo: Adicionar Priviégios" + +#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1087 +#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1101 +msgid "Allow access to the 'System: Group Manager: Add Privileges' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador de Grupo: Adicionar Privilégios'." + +#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1092 +#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1106 +msgid "WebCfg - System: Static Routes page" +msgstr "WebCfg - Página Sistema: Rotas Estáticas" + +#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1093 +#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1107 +msgid "Allow access to the 'System: Static Routes' page." +msgstr "Permitir acesso à página 'Sistema: Rotas Estáticas'." + +#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1098 +#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1112 +msgid "WebCfg - System: Static Routes: Edit route page" +msgstr "WebCfg - Página Sistema: Rotas Estáticas: Editar rota" + +#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1099 +#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1113 +msgid "Allow access to the 'System: Static Routes: Edit route' page." +msgstr "Permitir acesso à página 'Sistema: Rotas Estáticas: Editar rota'." + +#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1104 +#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1118 +msgid "WebCfg - System: User Manager page" +msgstr "WebCfg - Página Sistema: Gerenciador de Usuários" + +#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1105 +#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1119 +msgid "Allow access to the 'System: User Manager' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador de Usuários'." + +#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1110 +#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1124 +msgid "WebCfg - System: User Manager: Add Privileges page" +msgstr "WebCfg - Página Sistema: Gerenciador de Usuários: Adicionar Privilégios" + +#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1111 +#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1125 +msgid "Allow access to the 'System: User Manager: Add Privileges' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador de Usuários: Adicionar Privilégios'." + +#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1116 +#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1130 +msgid "WebCfg - System: User Password Manager page" +msgstr "WebCfg - Sistema: Página Gerenciador de Senha de Usuários" + +#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1117 +#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1131 +msgid "Allow access to the 'System: User Password Manager' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador de Senha de Usuários'." + +#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1122 +#: etc/inc/priv.defs.inc:1128 +msgid "WebCfg - System: User manager: settings page" +msgstr "WebCfg - Sistema: Gerenciador de Usuários: Página de Configurações" + +#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1123 +#: etc/inc/priv.defs.inc:1129 +msgid "Allow access to the 'System: User manager: settings' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador de usuários: Página deConfigurações'." + +#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1128 +#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1142 +msgid "WebCfg - System: User Manager: Settings: Test LDAP page" +msgstr "WebCfg - Página Sistema: Gerenciador de Usuários: Configurações: Testar LDAP" + +#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1129 +#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1143 +msgid "Allow access to the 'System: User Manager: Settings: Test LDAP' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador de Usuário: Configurações: Testar LDAP'." + +#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1134 +#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1148 +msgid "WebCfg - System: Firmware: Manual Update page (progress bar)" +msgstr "WebCfg - Página Sistema: Firmware: Atualização Manual (barra de progresso)" + +#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1135 +#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1149 +msgid "Allow access to the 'System: Firmware: Manual Update: Progress bar' page." +msgstr "Permitir acesso à página 'Sistema: Firmware: Atualização Manual: Barra de progresso'." + +#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1140 +#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1154 +msgid "WebCfg - Hidden: Upload Configuration page" +msgstr "WebCfg - Página Omitidos: Configuração de Carregamento" + +#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1141 +#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1155 +msgid "Allow access to the 'Hidden: Upload Configuration' page." +msgstr "Permitir acesso à página 'Omitidos: Configuração de Carregamento'." + +#: etc/inc/priv.defs.inc:1128 etc/inc/priv.defs.inc:1146 +#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1160 +msgid "WebCfg - VPN: IPsec page" +msgstr "WebCfg - Página VPN: IPsec" + +#: etc/inc/priv.defs.inc:1129 etc/inc/priv.defs.inc:1147 +#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1161 +msgid "Allow access to the 'VPN: IPsec' page." +msgstr "Permitir acesso à página 'VPN: IPsec'." + +#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1152 +#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1166 +msgid "WebCfg - VPN: IPsec: Pre-Shared Keys List" +msgstr "WebCfg - VPN: IPsec: Lista de chaves pré-compartilhadas" + +#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1153 +#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1167 +msgid "Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page." +msgstr "Permitir acesso à página 'VPN: IPsec: Lista de chaves pré-compartilhadas'." + +#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1158 +#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1172 +msgid "WebCfg - VPN: IPsec: Edit Pre-Shared Keys" +msgstr "WebCfg - VPN: IPsec: Editar chaves pré-compartilhadas" + +#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1159 +#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1173 +msgid "Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page." +msgstr "Permitir acesso à página 'VPN: IPsec: Editar chaves pré-compartilhadas'." + +#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1164 +#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1178 +msgid "WebCfg - VPN: IPsec: Mobile page" +msgstr "WebCfg - Página VPN: IPsec: Móvel" + +#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1165 +#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1179 +msgid "Allow access to the 'VPN: IPsec: Mobile' page." +msgstr "Permitir acesso à página 'VPN: IPsec: Móvel'." + +#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1170 +#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1184 +msgid "WebCfg - VPN: IPsec: Edit Phase 1 page" +msgstr "WebCfg - Página VPN: IPsec: Editar Fase 1" + +#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1171 +#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1185 +msgid "Allow access to the 'VPN: IPsec: Edit Phase 1' page." +msgstr "Permitir acesso à página 'VPN: IPsec: Editar Fase 1'." + +#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1176 +#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1190 +msgid "WebCfg - VPN: IPsec: Edit Phase 2 page" +msgstr "WebCfg - Página VPN: IPsec: Editar Fase 2" + +#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1177 +#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1191 +msgid "Allow access to the 'VPN: IPsec: Edit Phase 2' page." +msgstr "Permitir acesso à página 'VPN: IPsec: Editar Fase 2'." + +#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1182 +#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1196 +msgid "WebCfg - VPN: VPN L2TP page" +msgstr "WebCfg - Página VPN: L2TP da VPN" + +#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1183 +#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1197 +msgid "Allow access to the 'VPN: VPN L2TP' page." +msgstr "Permitir acesso à página 'VPN: L2TP da VPN'." + +#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1188 +#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1202 +msgid "WebCfg - VPN: VPN L2TP : Users page" +msgstr "WebCfg - Página VPN: L2TP da VPN: Usuários" + +#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1189 +#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1203 +msgid "Allow access to the 'VPN: VPN L2TP : Users' page." +msgstr "Permitir acesso à página 'VPN: L2TP da VPN: Usuários'." + +#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1194 +#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1208 +msgid "WebCfg - VPN: VPN L2TP : Users : Edit page" +msgstr "WebCfg - Página VPN: L2TP da VPN: Usuários: Editar" + +#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1195 +#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1209 +msgid "Allow access to the 'VPN: VPN L2TP : Users : Edit' page." +msgstr "Permitir acesso à página 'VPN: L2TP da VPN: Usuários: Editar'." + +#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1200 +#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1214 +msgid "WebCfg - OpenVPN: Client page" +msgstr "WebCfg - Página OpenVPN: Cliente" + +#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1201 +#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1215 +msgid "Allow access to the 'OpenVPN: Client' page." +msgstr "Permitir acesso à página 'OpenVPN: Cliente'." + +#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1206 +#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1220 +msgid "WebCfg - OpenVPN: Client Specific Override page" +msgstr "WebCfg - Página OpenVPN: Substituição Específica de Cliente" + +#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1207 +#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1221 +msgid "Allow access to the 'OpenVPN: Client Specific Override' page." +msgstr "Permitir acesso à página 'OpenVPN: Substituição Específica de Cliente'." + +#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1212 +#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1226 +msgid "WebCfg - OpenVPN: Server page" +msgstr "WebCfg - Página OpenVPN: Servidor" + +#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1213 +#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1227 +msgid "Allow access to the 'OpenVPN: Server' page." +msgstr "Permitir acesso à página 'OpenVPN: Servidor'." + +#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1218 +#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1232 +msgid "WebCfg - Services: PPPoE Server page" +msgstr "WebCfg - Página Serviços: Servidor PPPoE" + +#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1219 +#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1233 +msgid "Allow access to the 'Services: PPPoE Server' page." +msgstr "Permitir acesso à página 'Serviços: Servidor PPPoE'." + +#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1224 +#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1238 +msgid "WebCfg - Services: PPPoE Server: Edit page" +msgstr "WebCfg - Serviços: Servidor PPPoE: Página Editar" + +#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1225 +#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1239 +msgid "Allow access to the 'Services: PPPoE Server: Edit' page." +msgstr "Permitir acesso à página 'Serviços: Servidor PPPoE: Editar'." + +#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1230 +#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1244 +msgid "WebCfg - VPN: VPN PPTP page" +msgstr "WebCfg - Página VPN: PPTP da VPN" + +#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1231 +#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1245 +msgid "Allow access to the 'VPN: VPN PPTP' page." +msgstr "Permitir acesso à página 'VPN: PPTP da VPN'." + +#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1236 +#: etc/inc/priv.defs.inc:1242 etc/inc/priv.defs.inc:1250 +msgid "WebCfg - VPN: VPN PPTP: Users page" +msgstr "WebCfg - Página VPN: PPTP da VPN: Usuários" + +#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1237 +#: etc/inc/priv.defs.inc:1243 etc/inc/priv.defs.inc:1251 +msgid "Allow access to the 'VPN: VPN PPTP: Users' page." +msgstr "Permitir acesso à página 'VPN: PPTP da VPN: Usuários'." + +#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1242 +#: etc/inc/priv.defs.inc:1248 etc/inc/priv.defs.inc:1256 +msgid "WebCfg - VPN: VPN PPTP: User: Edit page" +msgstr "WebCfg - Página VPN: PPTP da VPN: Usuários: Editar" + +#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1243 +#: etc/inc/priv.defs.inc:1249 etc/inc/priv.defs.inc:1257 +msgid "Allow access to the 'VPN: VPN PPTP: User: Edit' page." +msgstr "Permitir acesso à página 'VPN: PPTP da VPN: Usuários: Editar'." + +#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1248 +#: etc/inc/priv.defs.inc:1254 etc/inc/priv.defs.inc:1262 +msgid "WebCfg - pfSense wizard subsystem page" +msgstr "WebCfg - Página Subsistema de wizard do pfSense" + +#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1249 +#: etc/inc/priv.defs.inc:1255 etc/inc/priv.defs.inc:1263 +msgid "Allow access to the 'pfSense wizard subsystem' page." +msgstr "Permitir acesso à página 'Subsistema de wizard do pfSense'." + +#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1254 +#: etc/inc/priv.defs.inc:1260 etc/inc/priv.defs.inc:1268 +msgid "WebCfg - XMLRPC Library page" +msgstr "WebCfg - Página Biblioteca XMLRPC" + +#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1255 +#: etc/inc/priv.defs.inc:1261 etc/inc/priv.defs.inc:1269 +msgid "Allow access to the 'XMLRPC Library' page." +msgstr "Permitir acesso à página 'Biblioteca XMLRPC'." + +#: etc/inc/rrd.inc:45 +#, php-format +msgid "RRD dump failed exited with %1$s, the error is: %2$s" +msgstr "RRD dump falhou ao sair com %1$s, o erro é: %2$s" + +#: etc/inc/rrd.inc:56 etc/inc/rrd.inc:92 etc/inc/rrd.inc:96 etc/inc/rrd.inc:98 +#, php-format +msgid "RRD create failed exited with %1$s, the error is: %2$s" +msgstr "RRD create falhou ao sair com %1$s, o erro é: %2$s" + +#: etc/inc/rrd.inc:70 etc/inc/rrd.inc:106 etc/inc/rrd.inc:110 +#: etc/inc/rrd.inc:113 +#, php-format +msgid "Import RRD has %1$s DS values and %2$s RRA databases, new format RRD has %3$s DS values and %4$s RRA databases" +msgstr "Import RRD tem %1$s valores DS e %2$s base de dados RRA, novo formato RRD tem %3$s valores DS e %4$s base de dados RRA" + +#: etc/inc/rrd.inc:154 etc/inc/rrd.inc:190 etc/inc/rrd.inc:194 +#: etc/inc/rrd.inc:197 +#, php-format +msgid "The new RRD now has %1$s DS values and %2$s RRA databases" +msgstr "O novo RRD agora tem %1$s valores DS e %2$s databases RRA" + +#: etc/inc/rrd.inc:162 etc/inc/rrd.inc:198 etc/inc/rrd.inc:202 +#: etc/inc/rrd.inc:205 +msgid "Generating RRD graphs..." +msgstr "Gerando gráficos RRD..." + +#: etc/inc/rrd.inc:247 +#, php-format +msgid "RRD restore failed exited with %1$s, the error is: %2$s%3$s" +msgstr "RRD restore falhou ao sair com %1$s, o erro é: %2$s%3$s" + +#: etc/inc/rrd.inc:758 etc/inc/rrd.inc:782 etc/inc/rrd.inc:803 +#: etc/inc/rrd.inc:805 etc/inc/rrd.inc:808 etc/inc/rrd.inc:847 +msgid "Creating rrd update script" +msgstr "Criando script de atualização rrd" + +#: etc/inc/smtp.inc:92 +msgid ": data access time out" +msgstr ": tempo de expiração de acesso a dados" + +#: etc/inc/smtp.inc:95 +msgid ": the server disconnected" +msgstr ": o servidor desconectou" + +#: etc/inc/smtp.inc:107 +msgid "reached the end of data while reading from the SMTP server conection" +msgstr "atingiu o fim dos dados enquanto lendo da conexão do servidor SMTP" + +#: etc/inc/smtp.inc:113 +msgid "it was not possible to read line from the SMTP server" +msgstr "não foi possível ler linhas do servidor SMTP" + +#: etc/inc/smtp.inc:135 +msgid "it was not possible to send a line to the SMTP server" +msgstr "não foi possível enviar uma linha para o servidor SMTP" + +#: etc/inc/smtp.inc:149 +msgid "it was not possible to send data to the SMTP server" +msgstr "não foi possível enviar dados ao servidor SMTP" + +#: etc/inc/smtp.inc:221 +msgid "establishing SSL connections requires at least PHP version 4.3.0" +msgstr "estabelecer conexões SSL requere pelo menos a versão 4.3.0 do PHP" + +#: etc/inc/smtp.inc:224 +msgid "establishing SSL connections requires the OpenSSL extension enabled" +msgstr "estabelecer conexões SSL requere que a extensão OpenSSL esteja habilitada" + +#: etc/inc/smtp.inc:233 +#, php-format +msgid "could not resolve host \"%s\"" +msgstr "não pôde resolver o host \"%s\"" + +#: etc/inc/smtp.inc:237 +#, php-format +msgid "domain \"%s\" resolved to an address excluded to be valid" +msgstr "domínio \"%s\" resolvido para um endereço excluído de ser válido" + +#: etc/inc/smtp.inc:239 +#, php-format +msgid "Connecting to host address \"%1$s\" port %2$s..." +msgstr "Conectando ao endereço de host \"%1$s\" porta %2$s..." + +#: etc/inc/smtp.inc:246 +msgid "-3 socket could not be created" +msgstr "-3 socket não pôde ser criado" + +#: etc/inc/smtp.inc:248 +#, php-format +msgid "-4 dns lookup on hostname \"%s\" failed" +msgstr "-4 dns lookup em nome de host \"%s\" falhou" + +#: etc/inc/smtp.inc:250 +msgid "-5 connection refused or timed out" +msgstr "-5 conexão refugada ou expirada" + +#: etc/inc/smtp.inc:252 +msgid "-6 fdopen() call failed" +msgstr "-6 chamada de fdopen() falhou" + +#: etc/inc/smtp.inc:254 +msgid "-7 setvbuf() call failed" +msgstr "-7 chamada de setvbuf() falhou" + +#: etc/inc/smtp.inc:256 +#, php-format +msgid "could not connect to the host \"%1$s\": %2$s" +msgstr "não pôde conectar ao host \"%1$s\": %2$s" + +#: etc/inc/smtp.inc:265 +msgid "it is not possible to authenticate using the specified mechanism because the SASL library class is not loaded" +msgstr "não foi possível autenticar usando o mecanismo especificado porque a classe da biblioteca SASL não foi carregada" + +#: etc/inc/smtp.inc:289 +#, php-format +msgid "authenticated mechanism %1$s may not be used: %2$s" +msgstr "mecanismo autenticado %1$s pode não ser usado: %2$s" + +#: etc/inc/smtp.inc:294 +msgid "Could not start the SASL authentication client:" +msgstr "Não pôde iniciar o cliente de autenticação SASL:" + +#: etc/inc/smtp.inc:301 +msgid "Could not send the AUTH command" +msgstr "Não pôde enviar o comando de Autenticação" + +#: etc/inc/smtp.inc:316 etc/inc/smtp.inc:346 +msgid "Authentication error:" +msgstr "Erro de autenticação:" + +#: etc/inc/smtp.inc:331 +msgid "Could not send the authentication step message" +msgstr "Não pôde enviar a mensagem de passos de autenticação" + +#: etc/inc/smtp.inc:351 +msgid "Could not process the SASL authentication step:" +msgstr "Não pôde processar o passo de autenticação SASL:" + +#: etc/inc/smtp.inc:365 +msgid "connection is already established" +msgstr "conexão já está estabelecida" + +#: etc/inc/smtp.inc:403 +msgid "it was not specified the POP3 authentication user" +msgstr "não foi especificado o usuário de autenticação POP3" + +#: etc/inc/smtp.inc:409 +msgid "it was not specified the POP3 authentication password" +msgstr "não foi especificada a senha de autenticação POP3" + +#: etc/inc/smtp.inc:413 +#, php-format +msgid "Resolving POP3 authentication host \"%s\"..." +msgstr "Resolvendo host de autenticação POP3 \"%s\"..." + +#: etc/inc/smtp.inc:420 +msgid "POP3 authentication server greeting was not found" +msgstr "Cumprimentos do servidor de autenticação POP3 não foi encontrado" + +#: etc/inc/smtp.inc:428 +msgid "POP3 authentication user was not accepted:" +msgstr "Usuário de autenticação POP3 não foi aceito:" + +#: etc/inc/smtp.inc:436 +msgid "POP3 authentication password was not accepted:" +msgstr "Senha de autenticação POP3 não foi aceita:" + +#: etc/inc/smtp.inc:445 +msgid "could not determine the SMTP to connect" +msgstr "não pôde determinar o SMTP para conectar" + +#: etc/inc/smtp.inc:451 +#, php-format +msgid "Resolving SMTP server domain \"%s\"..." +msgstr "Resolvendo o domínio do servidor SMTP \"%s\"..." + +#: etc/inc/smtp.inc:463 +#, php-format +msgid "Connected to SMTP server \"%s\"." +msgstr "Conectado ao servidor SMTP \"%s\"." + +#: etc/inc/smtp.inc:517 etc/inc/smtp.inc:519 +msgid "server does not require authentication" +msgstr "servidor não requere autenticação" + +#: etc/inc/smtp.inc:581 etc/inc/smtp.inc:583 +msgid "it is not supported any of the authentication mechanisms required by the server" +msgstr "não é suportado por nenhum mecanismo de autenticação requerido pelo servidor" + +#: etc/inc/smtp.inc:613 etc/inc/smtp.inc:615 +msgid "direct delivery connection is already established and sender is already set" +msgstr "conexão de entrega direta já está estabelecida e quem envia já esta configurado" + +#: etc/inc/smtp.inc:621 etc/inc/smtp.inc:623 +msgid "connection is not in the initial state" +msgstr "conexão não está no seu estado inicial" + +#: etc/inc/smtp.inc:643 etc/inc/smtp.inc:645 +msgid "it was not specified a valid direct recipient" +msgstr "um destinatário direto válido não foi especificado" + +#: etc/inc/smtp.inc:662 etc/inc/smtp.inc:664 +msgid "it is not possible to deliver directly to recipients of different domains" +msgstr "não foi possível entregar diretamente para destinatários de diferentes domínios" + +#: etc/inc/smtp.inc:667 etc/inc/smtp.inc:669 +msgid "connection is already established and the recipient is already set" +msgstr "conexão já está estabelecida e o destinatário já está configurado" + +#: etc/inc/smtp.inc:679 etc/inc/smtp.inc:681 +msgid "connection is not in the recipient setting state" +msgstr "conexão não está no estado de configuração do destinatário" + +#: etc/inc/smtp.inc:708 etc/inc/smtp.inc:710 +msgid "connection is not in the start sending data state" +msgstr "conexão não está no estado inicial de envio de dados" + +#: etc/inc/smtp.inc:738 etc/inc/smtp.inc:749 etc/inc/smtp.inc:740 +#: etc/inc/smtp.inc:751 +msgid "connection is not in the sending data state" +msgstr "conexão não está no estado de envio de dados" + +#: etc/inc/smtp.inc:785 etc/inc/smtp.inc:787 +msgid "it was not previously established a SMTP connection" +msgstr "não foi previamente estabelecida uma conexão SMTP" + +#: etc/inc/upgrade_config.inc:113 +#, php-format +msgid "%sWarning: filter rule removed (interface '%s' does not exist anymore)." +msgstr "%sADVERTÊNCIA: regra de filtro removida (interface '%s' não existe mais)." + +#: etc/inc/upgrade_config.inc:125 +#, php-format +msgid "%sWarning: filter rule removed (source network '%s' does not exist anymore)." +msgstr "%sADVERTÊNCIA: regra de filtro removida (rede fonte '%s' não existe mais)." + +#: etc/inc/upgrade_config.inc:138 +#, php-format +msgid "%sWarning: filter rule removed (destination network '%s' does not exist anymore)." +msgstr "%sADVERTÊNCIA: regra de filtro removida (rede de destino '%s' não existe mais)." + +#: etc/inc/upgrade_config.inc:158 +#, php-format +msgid "%sWarning: traffic shaper rule removed (interface '%s' does not exist anymore)." +msgstr "%sADVERTÊNCIA: regra do Traffic Shaper removida (interface '%s' não existe mais)." + +#: etc/inc/upgrade_config.inc:170 +#, php-format +msgid "%sWarning: traffic shaper rule removed (source network '%s' does not exist anymore)." +msgstr "%sADVERTÊNCIA: regra do Traffic Shaper removida (rede fonte '%s' não existe mais)." + +#: etc/inc/upgrade_config.inc:183 +#, php-format +msgid "%sWarning: traffic shaper rule removed (destination network '%s' does not exist anymore)." +msgstr "%sADVERTÊNCIA: regra do Traffic Shaper removida (rede de destino '%s' não existe mais)." + +#: etc/inc/upgrade_config.inc:333 +#, php-format +msgid "CARP vhid %s" +msgstr "CARP vhid %s" + +#: etc/inc/upgrade_config.inc:510 +msgid "Permit IPsec traffic." +msgstr "Tráfego IPsec permitido." + +#: etc/inc/upgrade_config.inc:585 +msgid "System Administrators" +msgstr "Administradores do Sistema" + +#: etc/inc/upgrade_config.inc:604 +msgid "Indicates whether this user will lock access to the webConfigurator for other users." +msgstr "Indica se esse usuário irá bloquear acesso ao webConfigurator para outros usuários." + +#: etc/inc/upgrade_config.inc:607 +msgid "Indicates whether this user will lock individual HTML pages after having accessed a particular page (the lock will be freed if the user leaves or saves the page form)." +msgstr "Indica se esse usuário irá bloquear páginas HTMl individuais após acessar uma página em particular (o bloqueio será liberado se o usuário sair ou salvar o formulário da página)." + +#: etc/inc/upgrade_config.inc:610 +msgid "Indicates whether this user is able to login for example via SSH." +msgstr "Indica se esse usuário pode fazer login, por exemplo, via SSH." + +#: etc/inc/upgrade_config.inc:613 +#, php-format +msgid "Indicates whether this user is allowed to copy files onto the %s appliance via SCP/SFTP. If you are going to use this privilege, you must install scponly on the appliance (Hint: pkg_add -r scponly)." +msgstr "Indica se esse usuário tem permissão de copiar arquivos no aparelho %s via SCP/SFTP. Se você vai usar esse privilégio, você deve instalar scponly no aparelho (Dica: pkg_add -r scponly)." + +#: etc/inc/upgrade_config.inc:616 +msgid "This user is associated with the UNIX root user (you should associate this privilege only with one single user)." +msgstr "Esse usuário é associado ao usuário root do UNIX (você deve associar esse privilégio somente a um único usuário)." + +#: etc/inc/upgrade_config.inc:633 +msgid "Drop packets to closed TCP ports without returning a RST" +msgstr "Descarta pacotes para portas TCP fechadas sem retornar um RST" + +#: etc/inc/upgrade_config.inc:637 +msgid "Do not send ICMP port unreachable messages for closed UDP ports" +msgstr "Não envie à porta ICMP mensagens inalcansáveis para portas UCP fechadas" + +#: etc/inc/upgrade_config.inc:641 +msgid "Randomize the ID field in IP packets (default is 0: sequential IP IDs)" +msgstr "Randomize o campo ID em pacotes (o padrão é 0: IDs de IP sequenciais)" + +#: etc/inc/upgrade_config.inc:645 +msgid "Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)" +msgstr "Descartar pacotes SYN-FIN (falha com a RFC1379, mas, de qualquer maneira, ninguém a usa)" + +#: etc/inc/upgrade_config.inc:649 +msgid "Sending of IPv4 ICMP redirects" +msgstr "Envio de redirecionamentos ICMP de IPv4" + +#: etc/inc/upgrade_config.inc:653 +msgid "Sending of IPv6 ICMP redirects" +msgstr "Envio de redirecionamentos ICMP de IPv6" + +#: etc/inc/upgrade_config.inc:657 +msgid "Generate SYN cookies for outbound SYN-ACK packets" +msgstr "Gerar cookies SYN para pacotes SYN-ACK de outbound" + +#: etc/inc/upgrade_config.inc:661 +msgid "Maximum incoming TCP datagram size" +msgstr "Tamanho máximo de datagrama TCP de entrada" + +#: etc/inc/upgrade_config.inc:665 +msgid "Maximum outgoing TCP datagram size" +msgstr "Tamanho máximo de datagrama TCP de saída" + +#: etc/inc/upgrade_config.inc:669 +msgid "Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-January/002534.html)" +msgstr "Fastforwarding (veja http://lists.freebsd.org/pipermail/freebsd-net/2004-January/002534.html)" + +#: etc/inc/upgrade_config.inc:673 +msgid "Do not delay ACK to try and piggyback it onto a data packet" +msgstr "Não atrase o ACK para tentar e fazer pingback no pacote de dados" + +#: etc/inc/upgrade_config.inc:677 +msgid "Maximum outgoing UDP datagram size" +msgstr "Tamanho máximo de datagrama UDP de saída" + +#: etc/inc/upgrade_config.inc:681 +msgid "Handling of non-IP packets which are not passed to pfil (see if_bridge(4))" +msgstr "Tratando de pacotes não-IP que não são passados para o pfil (veja if_bridge(4))" + +#: etc/inc/upgrade_config.inc:685 +msgid "Allow unprivileged access to tap(4) device nodes" +msgstr "Permitir acesso sem privilégios a nós de dispositivo tap(4)" + +#: etc/inc/upgrade_config.inc:689 +msgid "Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())" +msgstr "Randomizar PID's (veja src/sys/kern/kern_fork.c: sysctl_kern_randompid())" + +#: etc/inc/upgrade_config.inc:693 +msgid "The system will attempt to calculate the bandwidth delay product for each connection and limit the amount of data queued to the network to just the amount required to maintain optimum throughput. " +msgstr "O sistema tentará calcular o produto do atraso da largura de banda para cada conexão e limitar a quantidade de dados enfileirados para a rede para apenas a quantidade necessária para manter o throughput." + +#: etc/inc/upgrade_config.inc:697 +msgid "Set ICMP Limits" +msgstr "Configurar Limites ICMP" + +#: etc/inc/upgrade_config.inc:701 +msgid "TCP Offload engine" +msgstr "Mecanismo TCP Offload" + +#: etc/inc/upgrade_config.inc:742 +#, php-format +msgid "Interface %s Static Gateway" +msgstr "Interface %s Gateway Estático" + +#: etc/inc/upgrade_config.inc:745 +#, php-format +msgid "Interface %s Dynamic Gateway" +msgstr "Interface %s Gateway Dinâmico" + +#: etc/inc/upgrade_config.inc:810 etc/inc/upgrade_config.inc:811 +#, php-format +msgid "Upgraded static route for %s" +msgstr "Atualizar rota estática para %s" + +#: etc/inc/upgrade_config.inc:907 etc/inc/upgrade_config.inc:908 +#, php-format +msgid "Sitedown pool for VS: %s" +msgstr "Pool de sites indisponíveis para Servidor Virtual: %s" + +#: etc/inc/upgrade_config.inc:1060 etc/inc/upgrade_config.inc:1062 +#: etc/inc/upgrade_config.inc:1063 +#, php-format +msgid "phase2 for %s" +msgstr "fase2 para %s" + +#: etc/inc/upgrade_config.inc:1287 etc/inc/upgrade_config.inc:1289 +#: etc/inc/upgrade_config.inc:1290 +#, php-format +msgid "Upgraded Dyndns %s" +msgstr "Atualizar DNS Dinâmico %s" + +#: etc/inc/upgrade_config.inc:1339 etc/inc/upgrade_config.inc:1341 +#: etc/inc/upgrade_config.inc:1342 +msgid "All Users" +msgstr "Todos Usuários" + +#: etc/inc/upgrade_config.inc:1471 etc/inc/upgrade_config.inc:1473 +#: etc/inc/upgrade_config.inc:1474 +#, php-format +msgid "Converted bridged %s" +msgstr "Converted bridged %s" + +#: etc/inc/upgrade_config.inc:1797 etc/inc/upgrade_config.inc:1845 +#: etc/inc/upgrade_config.inc:1847 etc/inc/upgrade_config.inc:1848 +msgid "Auto added OpenVPN rule from config upgrade." +msgstr "Regra de OpenVPN auto adicionada pela atualização de config." + +#: etc/inc/voucher.inc:364 etc/inc/voucher.inc:367 etc/inc/voucher.inc:382 +#, php-format +msgid "%1$s (%2$s/%3$s) active and good for %4$d Minutes" +msgstr "%1$s (%2$s/%3$s) ativo e válido por %4$d Minutos" + +#: etc/inc/voucher.inc:401 etc/inc/voucher.inc:404 etc/inc/voucher.inc:419 +msgid "Access denied!" +msgstr "Acesso negado!" + +#: etc/inc/voucher.inc:403 etc/inc/voucher.inc:406 etc/inc/voucher.inc:421 +#, php-format +msgid "Access granted for %d Minutes in total." +msgstr "Acesso garantido por %d minutos no total." + +#: etc/inc/voucher.inc:466 etc/inc/voucher.inc:469 etc/inc/voucher.inc:484 +msgid "Enabling voucher support... " +msgstr "Habilitando suporte a voucher..." + +#: etc/inc/voucher.inc:505 etc/inc/voucher.inc:508 etc/inc/voucher.inc:523 +#, php-format +msgid "Error: cannot write voucher.cfg" +msgstr "Erro: não pode escrever voicher.cfg" + +#: etc/inc/voucher.inc:556 etc/inc/voucher.inc:559 etc/inc/voucher.inc:574 +#, php-format +msgid "cant write %1$s/voucher_%s_used_%2$s.db" +msgstr "não pode gravar em %1$s/voucher_%s_used_%2$s.db" + +#: etc/inc/voucher.inc:635 etc/inc/voucher.inc:638 etc/inc/voucher.inc:653 +#, php-format +msgid "cant read %1$s/voucher_%s_used_%2$s.db" +msgstr "não pode ler %1$s/voucher_%s_used_%2$s.db" + +#: etc/inc/voucher.inc:653 etc/inc/voucher.inc:652 etc/inc/voucher.inc:655 +#: etc/inc/voucher.inc:670 +#, php-format +msgid "Voucher: %s" +msgstr "Voucher: %s" + +#: etc/inc/xmlparse_attr.inc:197 +#, php-format +msgid "XML error: %1$s at line %2$d" +msgstr "Erro de XML: %1$s na linha %2$d" + +#: etc/inc/xmlreader.inc:129 +#, php-format +msgid "Error returned while trying to parse %s" +msgstr "Erro retornado quando tentava analisar %s" + +#: etc/inc/zeromq.inc:225 etc/inc/zeromq.inc:236 +#, php-format +msgid "Merged in config (%s sections) from ZeroMQ client." +msgstr "Mesclado em config (seções %s) do cliente ZeroMQ." + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/services_dyndns.php:76 usr/local/www/services_snmp.php:159 +#: usr/local/www/services_wol.php:115 usr/local/www/services_wol_edit.php:112 +#: usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/services_captiveportal.php:63 +#: usr/local/www/services_captiveportal_filemanager.php:75 +#: usr/local/www/services_captiveportal_ip.php:64 +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_mac.php:63 +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_dhcp.php:421 +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/services_dhcp_relay.php:100 +#: usr/local/www/services_dnsmasq.php:119 +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/services_captiveportal_hostname.php:66 +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/fbegin.inc:171 usr/local/www/fbegin.inc:343 +#: usr/local/www/status_services.php:226 +#: usr/local/www/services_dyndns_edit.php:133 +#: usr/local/www/services_igmpproxy.php:80 +#: usr/local/www/services_rfc2136.php:55 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/vpn_pppoe_edit.php:234 usr/local/www/services_dhcpv6.php:359 +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_dyndns_edit.php:156 usr/local/www/fbegin.inc:189 +#: usr/local/www/fbegin.inc:361 usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/services_unbound.php:102 +#: usr/local/www/services_unbound_advanced.php:88 +#: usr/local/www/services_dyndns.php:85 usr/local/www/services_dhcp.php:433 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/services_ntpd.php:71 usr/local/www/services_dhcp_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/services_dhcpv6.php:386 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/fbegin.inc:197 usr/local/www/fbegin.inc:307 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_router_advertisements.php:194 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/status_services.php:222 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_dhcp.php:527 usr/local/www/services_ntpd.php:76 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_dhcpv6.php:367 +#: usr/local/www/system_authservers.php:187 +#: usr/local/www/status_services.php:220 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dyndns_edit.php:160 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/services_dhcp.php:526 +#: usr/local/www/services_dhcpv6.php:362 +#: usr/local/www/system_authservers.php:188 usr/local/www/fbegin.inc:188 +#: usr/local/www/fbegin.inc:299 usr/local/www/services_dnsmasq.php:123 +#: usr/local/www/services_dyndns.php:64 usr/local/www/services_snmp.php:165 +#: usr/local/www/status_services.php:63 +#: usr/local/www/services_router_advertisements.php:189 +#: usr/local/www/services_dyndns_edit.php:162 +#: usr/local/www/services_dhcp.php:546 usr/local/www/services_dnsmasq.php:125 +#: usr/local/www/services_dyndns.php:60 usr/local/www/services_dnsmasq.php:146 +#: usr/local/www/services_dhcp.php:558 +#: usr/local/www/system_authservers.php:190 +#: usr/local/www/services_rfc2136_edit.php:114 +msgid "Services" +msgstr "Serviços" + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/diag_logs.php:84 usr/local/www/diag_logs_auth.php:72 +#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_filter.php:108 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_ipsec.php:109 usr/local/www/diag_logs_ntpd.php:72 +#: usr/local/www/diag_logs_openvpn.php:76 +#: usr/local/www/diag_logs_settings.php:217 +#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/diag_logs_filter_summary.php:191 +#: usr/local/www/diag_logs_ppp.php:77 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/diag_logs_relayd.php:73 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/fbegin.inc:130 usr/local/www/fbegin.inc:165 +#: usr/local/www/status_lb_pool.php:62 usr/local/www/status_lb_vs.php:56 +#: usr/local/www/diag_logs_wireless.php:74 +#: usr/local/www/diag_logs_routing.php:72 +#: usr/local/www/diag_logs_settings.php:222 usr/local/www/fbegin.inc:147 +#: usr/local/www/fbegin.inc:182 usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/diag_logs_resolver.php:85 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/diag_logs_gateways.php:85 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_routing.php:73 +#: usr/local/www/diag_logs_settings.php:229 usr/local/www/fbegin.inc:156 +#: usr/local/www/fbegin.inc:190 usr/local/www/diag_logs_relayd.php:74 +#: usr/local/www/diag_logs_auth.php:73 usr/local/www/diag_logs_ipsec.php:110 +#: usr/local/www/diag_logs_resolver.php:86 usr/local/www/diag_logs_ntpd.php:73 +#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_wireless.php:75 +#: usr/local/www/diag_logs_filter_summary.php:192 +#: usr/local/www/diag_logs_gateways.php:86 +#: usr/local/www/diag_logs_openvpn.php:77 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_filter.php:98 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_ppp.php:75 usr/local/www/fbegin.inc:148 +#: usr/local/www/fbegin.inc:181 usr/local/www/diag_logs_filter.php:128 +#: usr/local/www/diag_logs_settings.php:248 +msgid "Load Balancer" +msgstr "Balanc. Carga" + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_virtual_server.php:116 +#: usr/local/www/load_balancer_relay_action.php:127 +#: usr/local/www/load_balancer_pool.php:119 +#: usr/local/www/load_balancer_monitor.php:110 +#: usr/local/www/load_balancer_relay_protocol.php:123 +#: usr/local/www/status_lb_pool.php:121 usr/local/www/status_lb_vs.php:68 +#: usr/local/www/load_balancer_setting.php:120 +#: usr/local/www/load_balancer_setting.php:119 +#: usr/local/www/load_balancer_virtual_server.php:114 +#: usr/local/www/load_balancer_monitor.php:108 +#: usr/local/www/load_balancer_relay_protocol.php:121 +#: usr/local/www/load_balancer_relay_action.php:125 +#: usr/local/www/load_balancer_pool.php:117 +msgid "Virtual Servers" +msgstr "Servidores Virtuais" + +#: usr/local/www/load_balancer_virtual_server.php:108 +#: usr/local/www/load_balancer_virtual_server.php:106 +msgid "The virtual server configuration has been changed" +msgstr "A configuração do servidor virtual foi modificada" + +#: usr/local/www/load_balancer_virtual_server.php:108 +#: usr/local/www/firewall_shaper_layer7.php:401 +#: usr/local/www/firewall_shaper_vinterface.php:366 +#: usr/local/www/firewall_shaper_wizards.php:96 +#: usr/local/www/firewall_aliases.php:160 +#: usr/local/www/firewall_nat_1to1.php:87 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_shaper.php:403 +#: usr/local/www/firewall_shaper_queues.php:187 +#: usr/local/www/firewall_virtual_ip.php:164 usr/local/www/interfaces.php:1222 +#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86 +#: usr/local/www/vpn_ipsec_mobile.php:303 +#: usr/local/www/load_balancer_monitor.php:102 usr/local/www/vpn_pppoe.php:96 +#: usr/local/www/firewall_nat.php:175 usr/local/www/services_dhcp.php:536 +#: usr/local/www/services_dnsmasq.php:147 +#: usr/local/www/load_balancer_relay_protocol.php:114 +#: usr/local/www/services_igmpproxy.php:90 +#: usr/local/www/system_gateways.php:134 usr/local/www/firewall_nat_npt.php:87 +#: usr/local/www/services_dhcpv6.php:461 +#: usr/local/www/services_captiveportal_zones.php:47 +#: usr/local/www/firewall_nat_out.php:304 +#: usr/local/www/load_balancer_setting.php:111 +#: usr/local/www/services_unbound.php:129 +#: usr/local/www/services_unbound_advanced.php:116 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/services_dhcp.php:549 usr/local/www/firewall_aliases.php:163 +#: usr/local/www/interfaces.php:1326 usr/local/www/services_dhcpv6.php:488 +#: usr/local/www/services_dnsmasq.php:148 +#: usr/local/www/firewall_nat_out.php:305 +#: usr/local/www/load_balancer_setting.php:110 usr/local/www/vpn_pppoe.php:97 +#: usr/local/www/vpn_ipsec.php:133 usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/firewall_nat.php:180 usr/local/www/firewall_shaper.php:404 +#: usr/local/www/vpn_ipsec_keys.php:85 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/load_balancer_virtual_server.php:106 +#: usr/local/www/load_balancer_monitor.php:100 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/services_dhcp.php:653 usr/local/www/firewall_aliases.php:167 +#: usr/local/www/interfaces.php:1314 +#: usr/local/www/services_captiveportal_zones.php:48 +#: usr/local/www/firewall_virtual_ip.php:167 +#: usr/local/www/services_dhcpv6.php:468 usr/local/www/vpn_pppoe.php:98 +#: usr/local/www/vpn_ipsec.php:139 usr/local/www/firewall_virtual_ip.php:181 +#: usr/local/www/services_dhcp.php:655 usr/local/www/services_dhcpv6.php:463 +#: usr/local/www/services_dnsmasq.php:152 usr/local/www/interfaces.php:1327 +#: usr/local/www/firewall_shaper.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/firewall_shaper_queues.php:188 +#: usr/local/www/firewall_aliases.php:166 +#: usr/local/www/firewall_shaper_wizards.php:97 +#: usr/local/www/services_dhcp.php:675 usr/local/www/firewall_nat_out.php:312 +#: usr/local/www/services_dnsmasq.php:154 usr/local/www/interfaces.php:1369 +#: usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/services_dnsmasq.php:175 usr/local/www/interfaces.php:1364 +#: usr/local/www/firewall_virtual_ip.php:211 +#: usr/local/www/services_dhcp.php:687 usr/local/www/interfaces.php:1377 +msgid "You must apply the changes in order for them to take effect." +msgstr "Você deve aplicar as mudanças para que elas tenham efeito." + +#: usr/local/www/load_balancer_virtual_server.php:115 +#: usr/local/www/load_balancer_relay_action.php:126 +#: usr/local/www/load_balancer_pool.php:118 +#: usr/local/www/load_balancer_monitor.php:109 +#: usr/local/www/load_balancer_relay_protocol.php:122 +#: usr/local/www/status_lb_pool.php:120 usr/local/www/status_lb_vs.php:67 +#: usr/local/www/load_balancer_setting.php:119 +#: usr/local/www/load_balancer_setting.php:118 +#: usr/local/www/load_balancer_virtual_server.php:113 +#: usr/local/www/load_balancer_monitor.php:107 +#: usr/local/www/load_balancer_relay_protocol.php:120 +#: usr/local/www/load_balancer_relay_action.php:124 +#: usr/local/www/load_balancer_pool.php:116 +msgid "Pools" +msgstr "Pools" + +#: usr/local/www/load_balancer_virtual_server.php:117 +#: usr/local/www/load_balancer_relay_action.php:125 +#: usr/local/www/load_balancer_pool.php:120 +#: usr/local/www/load_balancer_monitor.php:111 +#: usr/local/www/load_balancer_relay_protocol.php:121 +#: usr/local/www/load_balancer_setting.php:121 +#: usr/local/www/load_balancer_setting.php:120 +#: usr/local/www/load_balancer_virtual_server.php:115 +#: usr/local/www/load_balancer_monitor.php:109 +#: usr/local/www/load_balancer_relay_protocol.php:119 +#: usr/local/www/load_balancer_relay_action.php:123 +#: usr/local/www/load_balancer_pool.php:118 +msgid "Monitors" +msgstr "Monitores" + +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/firewall_shaper_layer7.php:466 +#: usr/local/www/interfaces_bridge_edit.php:291 +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:185 +#: usr/local/www/firewall_nat_edit.php:518 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:456 +#: usr/local/www/firewall_rules_edit.php:808 +#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/diag_ipsec_spd.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:424 +#: usr/local/www/status_upnp.php:86 +#: usr/local/www/services_rfc2136_edit.php:186 +#: usr/local/www/system_advanced_admin.php:300 +#: usr/local/www/vpn_ipsec_phase2.php:516 +#: usr/local/www/vpn_openvpn_client.php:421 +#: usr/local/www/vpn_openvpn_client.php:861 +#: usr/local/www/vpn_openvpn_server.php:656 +#: usr/local/www/firewall_nat_out_edit.php:469 +#: usr/local/www/load_balancer_relay_action_edit.php:423 +#: usr/local/www/firewall_rules_edit.php:843 +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/vpn_openvpn_server.php:729 +#: usr/local/www/interfaces_bridge_edit.php:300 +#: usr/local/www/diag_packet_capture.php:160 +#: usr/local/www/vpn_ipsec_phase2.php:542 +#: usr/local/www/firewall_nat_edit.php:525 +#: usr/local/www/vpn_openvpn_client.php:426 +#: usr/local/www/vpn_openvpn_client.php:866 +#: usr/local/www/load_balancer_relay_action_edit.php:421 +#: usr/local/www/diag_ipsec_sad.php:90 +#: usr/local/www/load_balancer_virtual_server.php:128 +#: usr/local/www/vpn_openvpn_server.php:747 usr/local/www/status_upnp.php:87 +#: usr/local/www/interfaces_bridge_edit.php:301 +#: usr/local/www/diag_packet_capture.php:207 +#: usr/local/www/vpn_ipsec_phase2.php:644 +#: usr/local/www/firewall_nat_edit.php:524 +#: usr/local/www/vpn_openvpn_client.php:434 +#: usr/local/www/vpn_openvpn_client.php:919 +#: usr/local/www/diag_ipsec_spd.php:90 +#: usr/local/www/vpn_openvpn_client.php:452 +#: usr/local/www/vpn_openvpn_client.php:938 +#: usr/local/www/firewall_rules_edit.php:846 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:519 +#: usr/local/www/interfaces_bridge_edit.php:302 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:473 +#: usr/local/www/vpn_openvpn_server.php:773 +#: usr/local/www/vpn_ipsec_phase2.php:665 +#: usr/local/www/firewall_rules_edit.php:858 +#: usr/local/www/diag_logs_filter.php:171 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/firewall_rules_edit.php:857 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/interfaces_bridge_edit.php:304 +#: usr/local/www/firewall_rules_edit.php:905 +#: usr/local/www/system_advanced_admin.php:321 +#: usr/local/www/services_rfc2136_edit.php:191 +msgid "Protocol" +msgstr "Protocolo" + +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/diag_tables.php:133 +#: usr/local/www/interfaces_ppps_edit.php:660 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:195 +#: usr/local/www/system_advanced_notifications.php:185 +#: usr/local/www/diag_tables.php:132 +#: usr/local/www/system_advanced_notifications.php:194 +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/load_balancer_virtual_server_edit.php:169 +#: usr/local/www/interfaces_ppps_edit.php:661 +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/load_balancer_virtual_server_edit.php:167 +#: usr/local/www/interfaces_ppps_edit.php:667 usr/local/www/diag_dns.php:153 +#: usr/local/www/interfaces_ppps_edit.php:665 +#: usr/local/www/system_advanced_notifications.php:216 +msgid "IP Address" +msgstr "Endereço IP" + +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/diag_packet_capture.php:165 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_rules.php:365 usr/local/www/firewall_rules.php:367 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:203 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:202 +#: usr/local/www/services_captiveportal.php:607 +#: usr/local/www/services_captiveportal.php:628 +#: usr/local/www/services_captiveportal.php:647 +#: usr/local/www/services_captiveportal.php:666 +#: usr/local/www/status_upnp.php:85 +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_rules.php:369 usr/local/www/firewall_rules.php:371 +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/services_captiveportal.php:643 +#: usr/local/www/services_captiveportal.php:664 +#: usr/local/www/services_captiveportal.php:686 +#: usr/local/www/services_captiveportal.php:705 +#: usr/local/www/load_balancer_virtual_server_edit.php:183 +#: usr/local/www/diag_packet_capture.php:185 +#: usr/local/www/load_balancer_pool_edit.php:211 +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_rules.php:362 usr/local/www/firewall_rules.php:364 +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/services_captiveportal.php:641 +#: usr/local/www/services_captiveportal.php:662 +#: usr/local/www/services_captiveportal.php:684 +#: usr/local/www/services_captiveportal.php:703 +#: usr/local/www/status_upnp.php:86 +#: usr/local/www/load_balancer_virtual_server_edit.php:181 +#: usr/local/www/diag_packet_capture.php:232 +#: usr/local/www/load_balancer_pool_edit.php:209 +#: usr/local/www/load_balancer_pool.php:133 usr/local/www/diag_testport.php:60 +#: usr/local/www/diag_testport.php:123 +#: usr/local/www/services_captiveportal.php:642 +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:685 +#: usr/local/www/services_captiveportal.php:704 +#: usr/local/www/diag_packet_capture.php:248 +#: usr/local/www/firewall_rules.php:360 +#: usr/local/www/services_captiveportal.php:658 +#: usr/local/www/services_captiveportal.php:679 +#: usr/local/www/services_captiveportal.php:701 +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/firewall_aliases_edit.php:486 +#: usr/local/www/firewall_aliases_edit.php:485 +msgid "Port" +msgstr "Porta" + +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/status_lb_pool.php:62 +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/load_balancer_virtual_server.php:131 +msgid "Pool" +msgstr "Pool" + +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/load_balancer_virtual_server_edit.php:228 +#: usr/local/www/load_balancer_virtual_server.php:134 +#: usr/local/www/load_balancer_virtual_server_edit.php:217 +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/load_balancer_virtual_server_edit.php:215 +msgid "Fall Back Pool" +msgstr "Pool de Fall Back" + +#: usr/local/www/diag_tables.php:44 usr/local/www/diag_defaults.php:58 +#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_nanobsd.php:49 +#: usr/local/www/diag_packet_capture.php:41 +#: usr/local/www/crash_reporter.php:82 +#: usr/local/www/diag_authentication.php:69 usr/local/www/diag_backup.php:499 +#: usr/local/www/diag_confbak.php:98 usr/local/www/halt.php:59 +#: usr/local/www/diag_smart.php:14 usr/local/www/diag_states_summary.php:185 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_dns.php:34 +#: usr/local/www/reboot.php:51 usr/local/www/edit.php:39 +#: usr/local/www/diag_ping.php:43 usr/local/www/diag_resetstate.php:64 +#: usr/local/www/diag_routes.php:45 usr/local/www/diag_traceroute.php:45 +#: usr/local/www/exec.php:91 usr/local/www/fbegin.inc:367 +#: usr/local/www/diag_arp.php:261 usr/local/www/diag_ndp.php:103 +#: usr/local/www/system_firmware_restorefullbackup.php:104 +#: usr/local/www/diag_dump_states_sources.php:65 usr/local/www/fbegin.inc:385 +#: usr/local/www/diag_backup.php:576 usr/local/www/reboot.php:48 +#: usr/local/www/edit.php:42 usr/local/www/diag_dump_states.php:75 +#: usr/local/www/halt.php:54 usr/local/www/diag_states_summary.php:174 +#: usr/local/www/fbegin.inc:331 usr/local/www/diag_sockets.php:44 +#: usr/local/www/exec.php:93 usr/local/www/diag_packet_capture.php:43 +#: usr/local/www/diag_states_summary.php:176 +#: usr/local/www/diag_testport.php:49 usr/local/www/diag_defaults.php:52 +#: usr/local/www/diag_backup.php:581 usr/local/www/edit.php:41 +#: usr/local/www/fbegin.inc:323 usr/local/www/diag_dump_states.php:67 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/diag_traceroute.php:46 usr/local/www/diag_ping.php:44 +#: usr/local/www/diag_backup.php:582 +msgid "Diagnostics" +msgstr "Diagnósticos" + +#: usr/local/www/diag_tables.php:44 usr/local/www/fbegin.inc:199 +#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:225 +#: usr/local/www/fbegin.inc:216 +msgid "Tables" +msgstr "Tabelas" + +#: usr/local/www/diag_tables.php:86 usr/local/www/diag_tables.php:87 +msgid "The bogons database has been updated." +msgstr "O banco de dados bogons foi atualizado." + +#: usr/local/www/diag_tables.php:118 usr/local/www/diag_tables.php:117 +msgid "Table:" +msgstr "Tabela:" + +#: usr/local/www/diag_tables.php:152 usr/local/www/diag_tables.php:151 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:155 +msgid "No entries exist in this table." +msgstr "Não existe entradas nesta tabela." + +#: usr/local/www/diag_tables.php:160 usr/local/www/diag_backup.php:163 +#: usr/local/www/exec.php:273 usr/local/www/exec.php:283 +#: usr/local/www/system_firmware_restorefullbackup.php:166 +#: usr/local/www/diag_tables.php:159 usr/local/www/diag_backup.php:250 +#: usr/local/www/exec.php:275 usr/local/www/exec.php:285 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +#: usr/local/www/diag_backup.php:251 +msgid "Download" +msgstr "Download" + +#: usr/local/www/diag_tables.php:160 usr/local/www/diag_tables.php:159 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +msgid " the latest bogon data." +msgstr " dados de bogon mais recente." + +#: usr/local/www/diag_tables.php:162 +#: usr/local/www/firewall_shaper_layer7.php:576 +#: usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/system_firmware_restorefullbackup.php:163 +#: usr/local/www/diag_tables.php:161 usr/local/www/services_dhcpv6.php:853 +#: usr/local/www/services_dhcpv6.php:784 usr/local/www/diag_tables.php:165 +#: usr/local/www/services_dhcpv6.php:801 +#: usr/local/www/firewall_shaper_layer7.php:571 +msgid "Delete" +msgstr "Excluir" + +#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161 +#: usr/local/www/diag_tables.php:165 +msgid "all" +msgstr "todos" + +#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161 +#: usr/local/www/diag_tables.php:165 +msgid "entries in this table." +msgstr "entradas nesta tabela." + +#: usr/local/www/pkg_edit.php:61 usr/local/www/pkg.php:51 +#: usr/local/www/pkg.php:55 usr/local/www/pkg_edit.php:69 +msgid "ERROR: No package defined." +msgstr "ERRO: Nenhum pacote definido." + +#: usr/local/www/pkg_edit.php:256 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/services_wol_edit.php:112 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_rules_edit.php:628 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_wireless_edit.php:145 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/vpn_pppoe_edit.php:234 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 usr/local/www/pkg_edit.php:251 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 usr/local/www/pkg_edit.php:254 +#: usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/firewall_nat_edit.php:439 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +#: usr/local/www/vpn_pppoe_edit.php:237 +#: usr/local/www/interfaces_bridge_edit.php:236 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_nat_edit.php:452 +#: usr/local/www/firewall_rules_edit.php:724 +#: usr/local/www/firewall_virtual_ip_edit.php:277 +#: usr/local/www/services_rfc2136_edit.php:114 +msgid "Edit" +msgstr "Editar" + +#: usr/local/www/pkg_edit.php:260 usr/local/www/pkg_edit.php:255 +#: usr/local/www/pkg_edit.php:258 +msgid "Package Editor" +msgstr "Editor de Pacote" + +#: usr/local/www/pkg_edit.php:405 +#: usr/local/www/firewall_aliases_import.php:154 +#: usr/local/www/firewall_shaper_layer7.php:569 +#: usr/local/www/firewall_shaper_vinterface.php:307 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:546 +#: usr/local/www/diag_logs_settings.php:321 usr/local/www/diag_nanobsd.php:219 +#: usr/local/www/services_snmp.php:400 usr/local/www/services_wol_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:583 +#: usr/local/www/interfaces_gif_edit.php:218 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/interfaces_groups_edit.php:322 +#: usr/local/www/firewall_aliases_edit.php:686 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:846 +#: usr/local/www/firewall_nat_out.php:320 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:1065 +#: usr/local/www/firewall_rules_edit.php:1480 +#: usr/local/www/firewall_schedule_edit.php:1156 +#: usr/local/www/firewall_shaper.php:349 usr/local/www/interfaces.php:2443 +#: usr/local/www/interfaces_assign.php:501 usr/local/www/diag_smart.php:219 +#: usr/local/www/system.php:447 usr/local/www/interfaces_vlan_edit.php:189 +#: usr/local/www/system_firmware_settings.php:238 +#: usr/local/www/system_routes_edit.php:275 usr/local/www/vpn_ipsec.php:168 +#: usr/local/www/vpn_ipsec_keys_edit.php:144 +#: usr/local/www/vpn_ipsec_mobile.php:608 +#: usr/local/www/interfaces_lagg_edit.php:218 +#: usr/local/www/interfaces_ppps_edit.php:783 +#: usr/local/www/interfaces_qinq_edit.php:394 +#: usr/local/www/interfaces_wireless_edit.php:195 +#: usr/local/www/load_balancer_monitor_edit.php:356 +#: usr/local/www/load_balancer_pool_edit.php:311 usr/local/www/edit.php:181 +#: usr/local/www/services_captiveportal.php:923 +#: usr/local/www/services_captiveportal_ip_edit.php:231 +#: usr/local/www/services_captiveportal_mac_edit.php:203 +#: usr/local/www/services_dhcp.php:871 +#: usr/local/www/services_dhcp_edit.php:251 +#: usr/local/www/services_dhcp_relay.php:189 +#: usr/local/www/services_dnsmasq.php:209 +#: usr/local/www/services_dnsmasq_edit.php:172 usr/local/www/vpn_pptp.php:472 +#: usr/local/www/vpn_pptp_users_edit.php:168 +#: usr/local/www/load_balancer_relay_action_edit.php:557 +#: usr/local/www/load_balancer_relay_protocol_edit.php:280 +#: usr/local/www/pkg_mgr_settings.php:120 +#: usr/local/www/services_captiveportal_hostname_edit.php:203 +#: usr/local/www/services_captiveportal_vouchers.php:597 +#: usr/local/www/services_captiveportal_vouchers_edit.php:207 +#: usr/local/www/status_rrd_graph_settings.php:225 +#: usr/local/www/services_dyndns_edit.php:236 +#: usr/local/www/services_igmpproxy.php:155 +#: usr/local/www/services_igmpproxy_edit.php:280 +#: usr/local/www/services_rfc2136_edit.php:200 +#: usr/local/www/status_lb_pool.php:217 +#: usr/local/www/system_advanced_admin.php:535 +#: usr/local/www/system_advanced_firewall.php:416 +#: usr/local/www/system_advanced_misc.php:442 +#: usr/local/www/system_advanced_network.php:304 +#: usr/local/www/system_advanced_notifications.php:93 +#: usr/local/www/system_advanced_notifications.php:254 +#: usr/local/www/system_advanced_sysctl.php:104 +#: usr/local/www/system_advanced_sysctl.php:257 +#: usr/local/www/system_authservers.php:724 +#: usr/local/www/system_camanager.php:359 +#: usr/local/www/system_camanager.php:552 +#: usr/local/www/system_certmanager.php:155 +#: usr/local/www/system_certmanager.php:469 +#: usr/local/www/system_certmanager.php:787 +#: usr/local/www/system_crlmanager.php:294 +#: usr/local/www/system_crlmanager.php:387 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateways_edit.php:492 +#: usr/local/www/system_groupmanager.php:390 +#: usr/local/www/system_groupmanager_addprivs.php:224 +#: usr/local/www/system_usermanager.php:774 +#: usr/local/www/system_usermanager_addprivs.php:205 +#: usr/local/www/system_usermanager_passwordmg.php:119 +#: usr/local/www/system_usermanager_settings.php:161 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124 +#: usr/local/www/vpn_ipsec_phase1.php:855 +#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/vpn_l2tp.php:445 +#: usr/local/www/vpn_l2tp_users_edit.php:176 +#: usr/local/www/vpn_openvpn_client.php:845 +#: usr/local/www/vpn_openvpn_csc.php:658 +#: usr/local/www/vpn_openvpn_server.php:1433 +#: usr/local/www/vpn_pppoe_edit.php:589 +#: usr/local/www/firewall_nat_npt_edit.php:270 +#: usr/local/www/services_dhcpv6.php:784 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/services_dhcpv6_relay.php:190 +#: usr/local/www/system_routes_edit.php:315 +#: usr/local/www/services_unbound_acls.php:101 +#: usr/local/www/services_unbound_acls.php:306 +#: usr/local/www/diag_logs_settings.php:328 +#: usr/local/www/system_gateway_groups_edit.php:283 +#: usr/local/www/services_captiveportal_vouchers.php:604 +#: usr/local/www/services_dyndns_edit.php:366 +#: usr/local/www/firewall_nat_out.php:330 +#: usr/local/www/services_dnsmasq_edit.php:284 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dhcpv6_edit.php:237 +#: usr/local/www/firewall_nat_npt_edit.php:275 +#: usr/local/www/load_balancer_setting.php:161 +#: usr/local/www/status_rrd_graph_settings.php:226 +#: usr/local/www/pkg_edit.php:413 usr/local/www/firewall_nat_out_edit.php:662 +#: usr/local/www/system_certmanager.php:183 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_certmanager.php:953 +#: usr/local/www/load_balancer_relay_action_edit.php:556 +#: usr/local/www/firewall_rules_edit.php:1100 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/services_unbound.php:245 +#: usr/local/www/system_usermanager.php:772 +#: usr/local/www/services_igmpproxy_edit.php:282 +#: usr/local/www/system_advanced_firewall.php:475 +#: usr/local/www/firewall_aliases_edit.php:691 +#: usr/local/www/system_advanced_notifications.php:96 +#: usr/local/www/system_advanced_notifications.php:281 +#: usr/local/www/system_advanced_misc.php:485 +#: usr/local/www/firewall_shaper_vinterface.php:317 +#: usr/local/www/system_groupmanager_addprivs.php:222 +#: usr/local/www/edit.php:184 usr/local/www/services_captiveportal.php:968 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/vpn_openvpn_server.php:1575 +#: usr/local/www/services_dhcp.php:909 usr/local/www/services_ntpd.php:121 +#: usr/local/www/interfaces_bridge_edit.php:592 +#: usr/local/www/system_camanager.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:674 +#: usr/local/www/firewall_nat_edit.php:854 +#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:2644 +#: usr/local/www/vpn_openvpn_client.php:850 +#: usr/local/www/load_balancer_pool_edit.php:328 +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/services_snmp.php:414 usr/local/www/system.php:476 +#: usr/local/www/interfaces_gre_edit.php:228 +#: usr/local/www/vpn_ipsec_phase1.php:868 usr/local/www/diag_nanobsd.php:218 +#: usr/local/www/services_dhcpv6.php:574 usr/local/www/services_dhcpv6.php:879 +#: usr/local/www/vpn_pppoe_edit.php:590 +#: usr/local/www/system_routes_edit.php:316 +#: usr/local/www/diag_logs_settings.php:348 +#: usr/local/www/system_gateway_groups_edit.php:343 +#: usr/local/www/interfaces_vlan_edit.php:190 +#: usr/local/www/services_dnsmasq.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:618 +#: usr/local/www/firewall_nat_out.php:331 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/services_captiveportal_vouchers_edit.php:205 +#: usr/local/www/firewall_nat_1to1_edit.php:464 +#: usr/local/www/services_dhcpv6_edit.php:239 +#: usr/local/www/services_router_advertisements.php:400 +#: usr/local/www/firewall_nat_npt_edit.php:274 +#: usr/local/www/load_balancer_setting.php:160 usr/local/www/vpn_ipsec.php:167 +#: usr/local/www/services_dhcp_relay.php:190 +#: usr/local/www/services_captiveportal_hostname_edit.php:201 +#: usr/local/www/vpn_ipsec_mobile.php:657 usr/local/www/pkg_edit.php:416 +#: usr/local/www/interfaces_qinq_edit.php:395 +#: usr/local/www/interfaces_gif_edit.php:219 +#: usr/local/www/firewall_shaper.php:350 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/services_captiveportal_mac_edit.php:201 +#: usr/local/www/firewall_schedule_edit.php:1155 +#: usr/local/www/interfaces_ppps_edit.php:784 +#: usr/local/www/system_crlmanager.php:295 +#: usr/local/www/system_crlmanager.php:388 +#: usr/local/www/system_crlmanager.php:420 +#: usr/local/www/firewall_aliases_edit.php:694 usr/local/www/vpn_pptp.php:474 +#: usr/local/www/interfaces_lagg_edit.php:219 +#: usr/local/www/vpn_openvpn_csc.php:657 +#: usr/local/www/system_advanced_misc.php:534 +#: usr/local/www/firewall_shaper_vinterface.php:319 +#: usr/local/www/services_captiveportal.php:964 +#: usr/local/www/system_gateways_edit.php:627 +#: usr/local/www/services_dhcpv6_relay.php:191 +#: usr/local/www/system_usermanager_passwordmg.php:120 +#: usr/local/www/interfaces_assign.php:495 +#: usr/local/www/services_captiveportal_ip_edit.php:229 +#: usr/local/www/vpn_openvpn_server.php:1616 +#: usr/local/www/services_dhcp.php:1113 +#: usr/local/www/system_firmware_settings.php:251 +#: usr/local/www/services_ntpd.php:151 +#: usr/local/www/interfaces_bridge_edit.php:593 +#: usr/local/www/interfaces_groups_edit.php:323 +#: usr/local/www/vpn_ipsec_phase2.php:770 +#: usr/local/www/firewall_nat_edit.php:853 +#: usr/local/www/vpn_pptp_users_edit.php:169 +#: usr/local/www/vpn_ipsec_keys_edit.php:143 +#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:2632 +#: usr/local/www/vpn_openvpn_client.php:903 +#: usr/local/www/load_balancer_pool_edit.php:326 +#: usr/local/www/vpn_l2tp_users_edit.php:177 usr/local/www/vpn_l2tp.php:446 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/services_snmp.php:415 usr/local/www/system.php:469 +#: usr/local/www/vpn_ipsec_phase1.php:865 usr/local/www/diag_nanobsd.php:209 +#: usr/local/www/diag_nanobsd.php:277 usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/system_authservers.php:729 usr/local/www/vpn_l2tp.php:449 +#: usr/local/www/system_gateways_edit.php:632 +#: usr/local/www/system_camanager.php:366 +#: usr/local/www/system_camanager.php:577 +#: usr/local/www/services_captiveportal_ip_edit.php:223 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/vpn_openvpn_client.php:922 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1566 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:790 usr/local/www/vpn_ipsec.php:173 +#: usr/local/www/system_firmware_settings.php:260 +#: usr/local/www/interfaces_lagg_edit.php:232 +#: usr/local/www/firewall_nat_edit.php:849 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/diag_smart.php:240 +#: usr/local/www/services_captiveportal_vouchers.php:627 +#: usr/local/www/vpn_pppoe_edit.php:593 usr/local/www/services_dhcp.php:1126 +#: usr/local/www/system_certmanager.php:186 +#: usr/local/www/system_certmanager.php:577 +#: usr/local/www/system_certmanager.php:995 +#: usr/local/www/system_advanced_misc.php:546 +#: usr/local/www/services_captiveportal_mac_edit.php:214 +#: usr/local/www/services_dhcpv6.php:827 +#: usr/local/www/system_usermanager_passwordmg.php:125 +#: usr/local/www/system_authservers.php:745 +#: usr/local/www/system_advanced_firewall.php:537 +#: usr/local/www/services_captiveportal.php:966 usr/local/www/vpn_pptp.php:477 +#: usr/local/www/pkg_edit.php:420 usr/local/www/edit.php:185 +#: usr/local/www/interfaces_bridge_edit.php:594 +#: usr/local/www/services_dnsmasq.php:235 +#: usr/local/www/vpn_ipsec_phase1.php:886 +#: usr/local/www/firewall_nat_out_edit.php:664 +#: usr/local/www/vpn_openvpn_server.php:1668 +#: usr/local/www/vpn_ipsec_phase2.php:791 usr/local/www/services_snmp.php:430 +#: usr/local/www/interfaces_qinq_edit.php:398 +#: usr/local/www/interfaces.php:2664 +#: usr/local/www/firewall_shaper_layer7.php:565 +#: usr/local/www/services_router_advertisements.php:395 +#: usr/local/www/system_gateways_edit.php:634 +#: usr/local/www/services_dyndns_edit.php:378 +#: usr/local/www/firewall_rules_edit.php:1128 +#: usr/local/www/firewall_rules_edit.php:1602 +#: usr/local/www/system_firmware_settings.php:266 usr/local/www/system.php:467 +#: usr/local/www/firewall_nat_edit.php:889 +#: usr/local/www/firewall_virtual_ip_edit.php:491 +#: usr/local/www/services_dhcp.php:1146 +#: usr/local/www/system_certmanager.php:578 +#: usr/local/www/system_certmanager.php:999 +#: usr/local/www/system_advanced_misc.php:667 +#: usr/local/www/system_routes_edit.php:339 +#: usr/local/www/firewall_nat_out.php:338 +#: usr/local/www/system_gateway_groups_edit.php:344 +#: usr/local/www/system_advanced_firewall.php:538 +#: usr/local/www/services_captiveportal.php:982 +#: usr/local/www/firewall_aliases_edit.php:725 +#: usr/local/www/pkg_mgr_settings.php:123 +#: usr/local/www/system_usermanager_settings.php:164 +#: usr/local/www/services_dnsmasq.php:248 +#: usr/local/www/system_advanced_network.php:305 +#: usr/local/www/firewall_nat_out_edit.php:704 +#: usr/local/www/diag_nanobsd.php:200 usr/local/www/interfaces.php:2710 +#: usr/local/www/system_gateways_edit.php:664 +#: usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/firewall_rules_edit.php:1613 +#: usr/local/www/interfaces_ppps_edit.php:787 +#: usr/local/www/interfaces_lagg_edit.php:231 +#: usr/local/www/firewall_nat_edit.php:890 +#: usr/local/www/system_routes_edit.php:349 +#: usr/local/www/firewall_nat_out.php:337 +#: usr/local/www/interfaces_groups_edit.php:320 usr/local/www/pkg_edit.php:422 +#: usr/local/www/interfaces_bridge_edit.php:598 +#: usr/local/www/services_dnsmasq.php:312 usr/local/www/interfaces.php:2699 +#: usr/local/www/system_gateways_edit.php:665 +#: usr/local/www/services_captiveportal_vouchers.php:632 +#: usr/local/www/system_routes_edit.php:351 +#: usr/local/www/system_groupmanager.php:393 +#: usr/local/www/diag_logs_settings.php:379 +#: usr/local/www/services_dyndns_edit.php:379 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1661 +#: usr/local/www/firewall_virtual_ip_edit.php:496 +#: usr/local/www/services_dhcp.php:1158 +#: usr/local/www/system_advanced_admin.php:572 +#: usr/local/www/system_advanced_misc.php:685 +#: usr/local/www/system_authservers.php:787 +#: usr/local/www/system_advanced_firewall.php:559 +#: usr/local/www/firewall_aliases_edit.php:724 +#: usr/local/www/system_advanced_notifications.php:98 +#: usr/local/www/system_advanced_notifications.php:328 +#: usr/local/www/services_rfc2136_edit.php:212 +#: usr/local/www/interfaces.php:2735 +msgid "Save" +msgstr "Salvar" + +#: usr/local/www/pkg_edit.php:415 usr/local/www/firewall_rules_edit.php:1077 +#: usr/local/www/pkg_edit.php:424 usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/pkg_edit.php:427 usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/pkg_edit.php:431 usr/local/www/firewall_rules_edit.php:1140 +#: usr/local/www/firewall_rules_edit.php:1139 usr/local/www/pkg_edit.php:433 +#: usr/local/www/firewall_rules_edit.php:1187 +msgid "Advanced features" +msgstr "Recursos avançados" + +#: usr/local/www/pkg_edit.php:817 usr/local/www/firewall_shaper_layer7.php:65 +#: usr/local/www/diag_packet_capture.php:203 usr/local/www/vpn_ipsec.php:422 +#: usr/local/www/interfaces_wireless.php:133 usr/local/www/vpn_pptp.php:477 +#: usr/local/www/status_graph.php:291 usr/local/www/carp_status.php:194 +#: usr/local/www/status_queues.php:172 usr/local/www/status_graph_cpu.php:53 +#: usr/local/www/vpn_pppoe_edit.php:595 usr/local/www/vpn_ipsec.php:433 +#: usr/local/www/status_graph.php:286 usr/local/www/pkg_edit.php:864 +#: usr/local/www/status_queues.php:180 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/carp_status.php:187 +#: usr/local/www/vpn_ipsec.php:432 usr/local/www/status_graph.php:297 +#: usr/local/www/pkg_edit.php:873 usr/local/www/status_queues.php:181 +#: usr/local/www/vpn_pptp.php:479 usr/local/www/interfaces_wireless.php:134 +#: usr/local/www/diag_packet_capture.php:270 usr/local/www/vpn_ipsec.php:438 +#: usr/local/www/status_graph.php:308 +#: usr/local/www/interfaces_wireless.php:136 +#: usr/local/www/vpn_pppoe_edit.php:599 usr/local/www/vpn_pptp.php:482 +#: usr/local/www/pkg_edit.php:917 usr/local/www/status_queues.php:163 +#: usr/local/www/status_graph.php:330 +#: usr/local/www/diag_packet_capture.php:208 +#: usr/local/www/diag_packet_capture.php:288 usr/local/www/pkg_edit.php:921 +#: usr/local/www/status_queues.php:185 +msgid "Note" +msgstr "Nota" + +#: usr/local/www/pkg_edit.php:823 usr/local/www/pkg_edit.php:835 +#: usr/local/www/firewall_aliases_import.php:155 +#: usr/local/www/firewall_shaper_layer7.php:573 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:546 +#: usr/local/www/services_wol_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:583 +#: usr/local/www/interfaces_gif_edit.php:218 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/interfaces_groups_edit.php:323 +#: usr/local/www/firewall_aliases_edit.php:687 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:846 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:1065 +#: usr/local/www/firewall_rules_edit.php:1480 +#: usr/local/www/firewall_schedule_edit.php:1157 +#: usr/local/www/interfaces.php:1443 usr/local/www/interfaces.php:1549 +#: usr/local/www/interfaces.php:2444 +#: usr/local/www/interfaces_vlan_edit.php:189 +#: usr/local/www/system_routes_edit.php:255 +#: usr/local/www/system_routes_edit.php:275 +#: usr/local/www/interfaces_lagg_edit.php:218 +#: usr/local/www/interfaces_ppps_edit.php:784 +#: usr/local/www/interfaces_qinq_edit.php:395 +#: usr/local/www/interfaces_wireless_edit.php:195 +#: usr/local/www/load_balancer_monitor_edit.php:356 +#: usr/local/www/load_balancer_pool_edit.php:312 +#: usr/local/www/load_balancer_virtual_server_edit.php:280 +#: usr/local/www/services_captiveportal.php:924 +#: usr/local/www/services_dhcp_edit.php:251 +#: usr/local/www/services_dnsmasq_edit.php:172 +#: usr/local/www/load_balancer_relay_action_edit.php:557 +#: usr/local/www/load_balancer_relay_protocol_edit.php:280 +#: usr/local/www/services_captiveportal_vouchers.php:598 +#: usr/local/www/services_dyndns_edit.php:237 +#: usr/local/www/services_igmpproxy_edit.php:281 +#: usr/local/www/services_rfc2136_edit.php:201 +#: usr/local/www/system_advanced_sysctl.php:258 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateways_edit.php:492 +#: usr/local/www/system_groupmanager_addprivs.php:225 +#: usr/local/www/system_usermanager_addprivs.php:206 +#: usr/local/www/vpn_l2tp_users_edit.php:177 +#: usr/local/www/vpn_pppoe_edit.php:590 +#: usr/local/www/firewall_nat_npt_edit.php:270 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/system_routes_edit.php:287 +#: usr/local/www/system_routes_edit.php:315 +#: usr/local/www/services_unbound_acls.php:306 +#: usr/local/www/system_gateway_groups_edit.php:283 +#: usr/local/www/services_captiveportal_vouchers.php:605 +#: usr/local/www/services_dyndns_edit.php:367 +#: usr/local/www/services_dnsmasq_edit.php:284 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dhcpv6_edit.php:237 +#: usr/local/www/firewall_nat_npt_edit.php:275 usr/local/www/pkg_edit.php:870 +#: usr/local/www/firewall_nat_out_edit.php:662 +#: usr/local/www/load_balancer_relay_action_edit.php:556 +#: usr/local/www/firewall_rules_edit.php:1100 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/services_igmpproxy_edit.php:283 +#: usr/local/www/firewall_aliases_edit.php:692 +#: usr/local/www/system_groupmanager_addprivs.php:223 +#: usr/local/www/services_captiveportal.php:969 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/load_balancer_virtual_server_edit.php:269 +#: usr/local/www/interfaces_bridge_edit.php:592 +#: usr/local/www/firewall_nat_edit.php:854 +#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:1655 +#: usr/local/www/interfaces.php:2645 +#: usr/local/www/load_balancer_pool_edit.php:329 +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/interfaces_gre_edit.php:228 +#: usr/local/www/vpn_pppoe_edit.php:591 +#: usr/local/www/system_routes_edit.php:288 +#: usr/local/www/system_routes_edit.php:316 +#: usr/local/www/system_gateway_groups_edit.php:343 +#: usr/local/www/interfaces_vlan_edit.php:190 +#: usr/local/www/services_captiveportal_vouchers.php:619 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/firewall_nat_1to1_edit.php:464 +#: usr/local/www/services_dhcpv6_edit.php:239 +#: usr/local/www/firewall_nat_npt_edit.php:274 usr/local/www/pkg_edit.php:879 +#: usr/local/www/interfaces_qinq_edit.php:396 +#: usr/local/www/interfaces_gif_edit.php:219 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/firewall_schedule_edit.php:1156 +#: usr/local/www/interfaces_ppps_edit.php:785 +#: usr/local/www/firewall_aliases_edit.php:695 +#: usr/local/www/interfaces_lagg_edit.php:219 +#: usr/local/www/services_captiveportal.php:965 +#: usr/local/www/system_gateways_edit.php:627 +#: usr/local/www/load_balancer_virtual_server_edit.php:267 +#: usr/local/www/interfaces_bridge_edit.php:593 +#: usr/local/www/interfaces_groups_edit.php:324 +#: usr/local/www/firewall_nat_edit.php:853 +#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:1537 +#: usr/local/www/interfaces.php:1643 usr/local/www/interfaces.php:2633 +#: usr/local/www/load_balancer_pool_edit.php:327 +#: usr/local/www/vpn_l2tp_users_edit.php:178 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/system_gateways_edit.php:632 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:371 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1566 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:791 +#: usr/local/www/interfaces_lagg_edit.php:232 +#: usr/local/www/firewall_nat_edit.php:849 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/services_captiveportal_vouchers.php:628 +#: usr/local/www/vpn_pppoe_edit.php:594 +#: usr/local/www/services_captiveportal.php:967 usr/local/www/pkg_edit.php:923 +#: usr/local/www/interfaces_bridge_edit.php:594 +#: usr/local/www/firewall_nat_out_edit.php:664 +#: usr/local/www/interfaces_qinq_edit.php:399 +#: usr/local/www/interfaces.php:1547 usr/local/www/interfaces.php:1652 +#: usr/local/www/interfaces.php:2665 +#: usr/local/www/firewall_shaper_layer7.php:568 +#: usr/local/www/system_gateways_edit.php:634 +#: usr/local/www/services_dyndns_edit.php:379 +#: usr/local/www/firewall_rules_edit.php:1128 +#: usr/local/www/firewall_rules_edit.php:1602 +#: usr/local/www/firewall_nat_edit.php:889 +#: usr/local/www/firewall_virtual_ip_edit.php:491 +#: usr/local/www/system_routes_edit.php:313 +#: usr/local/www/system_routes_edit.php:339 +#: usr/local/www/system_gateway_groups_edit.php:344 +#: usr/local/www/services_captiveportal.php:983 +#: usr/local/www/firewall_aliases_edit.php:726 +#: usr/local/www/firewall_nat_out_edit.php:704 +#: usr/local/www/interfaces.php:1592 usr/local/www/interfaces.php:1698 +#: usr/local/www/interfaces.php:2711 +#: usr/local/www/system_gateways_edit.php:664 +#: usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/firewall_rules_edit.php:1613 +#: usr/local/www/interfaces_ppps_edit.php:788 +#: usr/local/www/interfaces_lagg_edit.php:231 +#: usr/local/www/firewall_nat_edit.php:890 +#: usr/local/www/system_routes_edit.php:319 +#: usr/local/www/system_routes_edit.php:349 +#: usr/local/www/interfaces_groups_edit.php:321 usr/local/www/pkg_edit.php:927 +#: usr/local/www/interfaces_bridge_edit.php:598 +#: usr/local/www/interfaces.php:1586 usr/local/www/interfaces.php:1691 +#: usr/local/www/interfaces.php:2700 +#: usr/local/www/system_gateways_edit.php:665 +#: usr/local/www/services_captiveportal_vouchers.php:633 +#: usr/local/www/system_routes_edit.php:321 +#: usr/local/www/system_routes_edit.php:351 +#: usr/local/www/services_dyndns_edit.php:380 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1661 +#: usr/local/www/firewall_virtual_ip_edit.php:496 +#: usr/local/www/firewall_aliases_edit.php:725 +#: usr/local/www/services_rfc2136_edit.php:213 +#: usr/local/www/interfaces.php:1599 usr/local/www/interfaces.php:1704 +#: usr/local/www/interfaces.php:2736 +msgid "Cancel" +msgstr "Cancelar" + +#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:1083 +#: usr/local/www/firewall_rules_edit.php:1117 +#: usr/local/www/firewall_rules_edit.php:1133 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1217 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1291 +#: usr/local/www/firewall_rules_edit.php:1342 +#: usr/local/www/firewall_rules_edit.php:1392 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/interfaces.php:1330 usr/local/www/interfaces.php:1940 +#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcp.php:741 +#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcp.php:765 +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:799 +#: usr/local/www/services_dnsmasq.php:194 +#: usr/local/www/services_dnsmasq.php:197 +#: usr/local/www/services_dnsmasq.php:200 usr/local/www/fbegin.inc:83 +#: usr/local/www/system_gateways_edit.php:415 +#: usr/local/www/vpn_openvpn_client.php:829 +#: usr/local/www/vpn_openvpn_csc.php:642 +#: usr/local/www/vpn_openvpn_server.php:1412 +#: usr/local/www/services_dhcpv6.php:651 usr/local/www/services_dhcpv6.php:667 +#: usr/local/www/services_dhcpv6.php:679 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcpv6.php:703 usr/local/www/services_dhcpv6.php:725 +#: usr/local/www/fbegin.inc:99 usr/local/www/pkg_edit.php:1052 +#: usr/local/www/firewall_rules_edit.php:943 +#: usr/local/www/firewall_rules_edit.php:1118 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/firewall_rules_edit.php:1168 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1252 +#: usr/local/www/firewall_rules_edit.php:1276 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1331 +#: usr/local/www/firewall_rules_edit.php:1358 +#: usr/local/www/firewall_rules_edit.php:1413 +#: usr/local/www/firewall_rules_edit.php:1463 +#: usr/local/www/firewall_rules_edit.php:1517 +#: usr/local/www/services_unbound_advanced.php:88 +#: usr/local/www/system_gateways_edit.php:436 +#: usr/local/www/vpn_openvpn_server.php:1554 +#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcp.php:779 +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcp.php:803 +#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcp.php:837 +#: usr/local/www/firewall_nat_edit.php:538 usr/local/www/interfaces.php:1434 +#: usr/local/www/interfaces.php:2118 usr/local/www/vpn_openvpn_client.php:834 +#: usr/local/www/services_dhcpv6.php:744 usr/local/www/services_dhcpv6.php:760 +#: usr/local/www/services_dhcpv6.php:773 usr/local/www/services_dhcpv6.php:786 +#: usr/local/www/services_dhcpv6.php:798 usr/local/www/services_dhcpv6.php:820 +#: usr/local/www/services_dnsmasq.php:195 +#: usr/local/www/services_dnsmasq.php:198 +#: usr/local/www/services_dnsmasq.php:201 usr/local/www/fbegin.inc:108 +#: usr/local/www/pkg_edit.php:1063 usr/local/www/vpn_openvpn_csc.php:641 +#: usr/local/www/system_gateways_edit.php:542 +#: usr/local/www/vpn_openvpn_server.php:1596 +#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcp.php:961 +#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcp.php:987 +#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcp.php:1011 +#: usr/local/www/services_dhcp.php:1034 +#: usr/local/www/firewall_nat_edit.php:537 usr/local/www/interfaces.php:1422 +#: usr/local/www/interfaces.php:2106 usr/local/www/vpn_openvpn_client.php:883 +#: usr/local/www/services_dhcpv6.php:675 usr/local/www/services_dhcpv6.php:704 +#: usr/local/www/services_dhcpv6.php:717 usr/local/www/services_dhcpv6.php:729 +#: usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/system_gateways_edit.php:546 +#: usr/local/www/vpn_openvpn_client.php:902 +#: usr/local/www/firewall_rules_edit.php:952 +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1267 +#: usr/local/www/firewall_rules_edit.php:1303 +#: usr/local/www/firewall_rules_edit.php:1346 +#: usr/local/www/firewall_rules_edit.php:1373 +#: usr/local/www/firewall_rules_edit.php:1428 +#: usr/local/www/firewall_rules_edit.php:1478 +#: usr/local/www/firewall_rules_edit.php:1532 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:974 +#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcp.php:1000 +#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcp.php:1024 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:692 +#: usr/local/www/services_dhcpv6.php:708 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcpv6.php:734 usr/local/www/services_dhcpv6.php:746 +#: usr/local/www/services_dhcpv6.php:768 usr/local/www/pkg_edit.php:1107 +#: usr/local/www/fbegin.inc:100 usr/local/www/services_dnsmasq.php:220 +#: usr/local/www/services_dnsmasq.php:223 +#: usr/local/www/services_dnsmasq.php:226 +#: usr/local/www/vpn_openvpn_server.php:1648 usr/local/www/interfaces.php:1435 +#: usr/local/www/interfaces.php:2136 +#: usr/local/www/system_gateways_edit.php:548 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_rules_edit.php:1146 +#: usr/local/www/firewall_rules_edit.php:1180 +#: usr/local/www/firewall_rules_edit.php:1196 +#: usr/local/www/firewall_rules_edit.php:1236 +#: usr/local/www/firewall_rules_edit.php:1298 +#: usr/local/www/firewall_rules_edit.php:1310 +#: usr/local/www/firewall_rules_edit.php:1353 +#: usr/local/www/firewall_rules_edit.php:1380 +#: usr/local/www/firewall_rules_edit.php:1435 +#: usr/local/www/firewall_rules_edit.php:1485 +#: usr/local/www/firewall_rules_edit.php:1540 +#: usr/local/www/firewall_nat_edit.php:544 usr/local/www/services_dhcp.php:978 +#: usr/local/www/services_dhcp.php:994 usr/local/www/services_dhcp.php:1008 +#: usr/local/www/services_dhcp.php:1020 usr/local/www/services_dhcp.php:1032 +#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcp.php:1067 +#: usr/local/www/services_dnsmasq.php:233 +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_dnsmasq.php:239 usr/local/www/interfaces.php:1479 +#: usr/local/www/interfaces.php:2182 +#: usr/local/www/system_gateways_edit.php:578 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:1145 +#: usr/local/www/firewall_rules_edit.php:1179 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1235 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1297 +#: usr/local/www/firewall_rules_edit.php:1309 +#: usr/local/www/firewall_rules_edit.php:1364 +#: usr/local/www/firewall_rules_edit.php:1391 +#: usr/local/www/firewall_rules_edit.php:1496 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/firewall_nat_edit.php:545 usr/local/www/pkg_edit.php:1114 +#: usr/local/www/services_dnsmasq.php:297 +#: usr/local/www/services_dnsmasq.php:300 +#: usr/local/www/services_dnsmasq.php:303 usr/local/www/interfaces.php:1474 +#: usr/local/www/interfaces.php:2171 +#: usr/local/www/firewall_rules_edit.php:1011 +#: usr/local/www/firewall_rules_edit.php:1193 +#: usr/local/www/firewall_rules_edit.php:1227 +#: usr/local/www/firewall_rules_edit.php:1243 +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1323 +#: usr/local/www/firewall_rules_edit.php:1345 +#: usr/local/www/firewall_rules_edit.php:1357 +#: usr/local/www/firewall_rules_edit.php:1412 +#: usr/local/www/firewall_rules_edit.php:1439 +#: usr/local/www/firewall_rules_edit.php:1494 +#: usr/local/www/firewall_rules_edit.php:1544 +#: usr/local/www/firewall_rules_edit.php:1599 +#: usr/local/www/services_dhcp.php:990 usr/local/www/services_dhcp.php:1006 +#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcp.php:1079 +#: usr/local/www/interfaces.php:1487 usr/local/www/interfaces.php:2207 +msgid "Advanced" +msgstr "Avançado" + +#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_rules_edit.php:1083 +#: usr/local/www/firewall_rules_edit.php:1117 +#: usr/local/www/firewall_rules_edit.php:1133 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1217 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1291 +#: usr/local/www/firewall_rules_edit.php:1342 +#: usr/local/www/firewall_rules_edit.php:1392 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/interfaces.php:1330 usr/local/www/services_dnsmasq.php:197 +#: usr/local/www/pkg_edit.php:1052 usr/local/www/firewall_rules_edit.php:1118 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/firewall_rules_edit.php:1168 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1252 +#: usr/local/www/firewall_rules_edit.php:1276 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1331 +#: usr/local/www/firewall_rules_edit.php:1358 +#: usr/local/www/firewall_rules_edit.php:1413 +#: usr/local/www/firewall_rules_edit.php:1463 +#: usr/local/www/firewall_rules_edit.php:1517 +#: usr/local/www/interfaces.php:1434 usr/local/www/services_dnsmasq.php:198 +#: usr/local/www/pkg_edit.php:1063 usr/local/www/interfaces.php:1422 +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1267 +#: usr/local/www/firewall_rules_edit.php:1303 +#: usr/local/www/firewall_rules_edit.php:1346 +#: usr/local/www/firewall_rules_edit.php:1373 +#: usr/local/www/firewall_rules_edit.php:1428 +#: usr/local/www/firewall_rules_edit.php:1478 +#: usr/local/www/firewall_rules_edit.php:1532 usr/local/www/pkg_edit.php:1107 +#: usr/local/www/services_dnsmasq.php:223 usr/local/www/interfaces.php:1435 +#: usr/local/www/firewall_rules_edit.php:1146 +#: usr/local/www/firewall_rules_edit.php:1180 +#: usr/local/www/firewall_rules_edit.php:1196 +#: usr/local/www/firewall_rules_edit.php:1236 +#: usr/local/www/firewall_rules_edit.php:1298 +#: usr/local/www/firewall_rules_edit.php:1310 +#: usr/local/www/firewall_rules_edit.php:1353 +#: usr/local/www/firewall_rules_edit.php:1380 +#: usr/local/www/firewall_rules_edit.php:1435 +#: usr/local/www/firewall_rules_edit.php:1485 +#: usr/local/www/firewall_rules_edit.php:1540 +#: usr/local/www/services_dnsmasq.php:236 usr/local/www/interfaces.php:1479 +#: usr/local/www/firewall_rules_edit.php:1145 +#: usr/local/www/firewall_rules_edit.php:1179 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1235 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1297 +#: usr/local/www/firewall_rules_edit.php:1309 +#: usr/local/www/firewall_rules_edit.php:1364 +#: usr/local/www/firewall_rules_edit.php:1391 +#: usr/local/www/firewall_rules_edit.php:1496 +#: usr/local/www/firewall_rules_edit.php:1551 usr/local/www/pkg_edit.php:1114 +#: usr/local/www/services_dnsmasq.php:300 usr/local/www/interfaces.php:1474 +#: usr/local/www/firewall_rules_edit.php:1193 +#: usr/local/www/firewall_rules_edit.php:1227 +#: usr/local/www/firewall_rules_edit.php:1243 +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1323 +#: usr/local/www/firewall_rules_edit.php:1345 +#: usr/local/www/firewall_rules_edit.php:1357 +#: usr/local/www/firewall_rules_edit.php:1412 +#: usr/local/www/firewall_rules_edit.php:1439 +#: usr/local/www/firewall_rules_edit.php:1494 +#: usr/local/www/firewall_rules_edit.php:1544 +#: usr/local/www/firewall_rules_edit.php:1599 +#: usr/local/www/interfaces.php:1487 +msgid "Show advanced option" +msgstr "Mostrar opções avançadas" + +#: usr/local/www/pkg_mgr_installed.php:45 +#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs.php:77 usr/local/www/diag_logs_auth.php:65 +#: usr/local/www/diag_logs_dhcp.php:70 usr/local/www/diag_logs_filter.php:101 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_ipsec.php:102 usr/local/www/diag_logs_ntpd.php:65 +#: usr/local/www/diag_logs_openvpn.php:69 +#: usr/local/www/diag_logs_settings.php:210 +#: usr/local/www/diag_logs_vpn.php:126 usr/local/www/diag_backup.php:117 +#: usr/local/www/system.php:74 usr/local/www/system.php:231 +#: usr/local/www/system.php:251 usr/local/www/system_firmware.php:102 +#: usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_settings.php:74 +#: usr/local/www/system_routes.php:94 usr/local/www/system_routes_edit.php:165 +#: usr/local/www/diag_logs_filter_summary.php:184 +#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/diag_logs_relayd.php:66 +#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81 +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_settings.php:62 +#: usr/local/www/fbegin.inc:319 usr/local/www/fbegin.inc:440 +#: usr/local/www/status_rrd_graph.php:329 +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_settings.php:53 +#: usr/local/www/status_rrd_graph_settings.php:128 +#: usr/local/www/system_advanced_admin.php:242 +#: usr/local/www/system_advanced_firewall.php:178 +#: usr/local/www/system_advanced_misc.php:179 +#: usr/local/www/system_advanced_network.php:148 +#: usr/local/www/system_advanced_notifications.php:131 +#: usr/local/www/system_advanced_sysctl.php:125 +#: usr/local/www/system_authservers.php:44 +#: usr/local/www/system_camanager.php:50 +#: usr/local/www/system_certmanager.php:51 +#: usr/local/www/system_crlmanager.php:46 +#: usr/local/www/system_gateway_groups.php:88 +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways.php:120 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/system_usermanager.php:54 +#: usr/local/www/system_usermanager_passwordmg.php:43 +#: usr/local/www/system_usermanager_settings.php:51 +#: usr/local/www/diag_logs_wireless.php:67 +#: usr/local/www/diag_logs_routing.php:65 +#: usr/local/www/system_routes_edit.php:198 usr/local/www/pkg_mgr.php:55 +#: usr/local/www/pkg_mgr.php:93 usr/local/www/diag_logs_settings.php:215 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/fbegin.inc:337 usr/local/www/fbegin.inc:458 +#: usr/local/www/status_rrd_graph_settings.php:129 +#: usr/local/www/system_certmanager.php:56 usr/local/www/diag_backup.php:195 +#: usr/local/www/diag_logs_resolver.php:78 +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 +#: usr/local/www/system_advanced_notifications.php:140 +#: usr/local/www/status_rrd_graph.php:377 +#: usr/local/www/system_advanced_misc.php:199 +#: usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/system_hasync.php:96 usr/local/www/diag_logs_gateways.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:98 usr/local/www/system.php:75 +#: usr/local/www/system.php:242 usr/local/www/system.php:262 +#: usr/local/www/diag_logs_routing.php:66 +#: usr/local/www/diag_logs_settings.php:222 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/fbegin.inc:283 usr/local/www/fbegin.inc:428 +#: usr/local/www/diag_logs_relayd.php:67 usr/local/www/diag_logs_auth.php:66 +#: usr/local/www/diag_logs_ipsec.php:103 +#: usr/local/www/diag_logs_resolver.php:79 usr/local/www/diag_logs_ntpd.php:66 +#: usr/local/www/system_advanced_misc.php:218 +#: usr/local/www/diag_logs_dhcp.php:71 +#: usr/local/www/system_gateway_groups.php:89 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/diag_logs_wireless.php:68 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210 +#: usr/local/www/diag_logs_filter_summary.php:185 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_gateways.php:79 +#: usr/local/www/diag_logs_openvpn.php:70 +#: usr/local/www/diag_logs_filter_dynamic.php:99 usr/local/www/system.php:235 +#: usr/local/www/system.php:255 usr/local/www/diag_logs_filter.php:91 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_camanager.php:51 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/status_rrd_graph.php:402 +#: usr/local/www/diag_logs_filter_dynamic.php:97 +#: usr/local/www/system_routes.php:98 usr/local/www/system_hasync.php:97 +#: usr/local/www/system_certmanager.php:57 +#: usr/local/www/system_advanced_misc.php:222 +#: usr/local/www/diag_logs_ppp.php:68 +#: usr/local/www/system_advanced_firewall.php:221 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:275 +#: usr/local/www/fbegin.inc:420 usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/system_advanced_misc.php:254 usr/local/www/pkg_mgr.php:94 +#: usr/local/www/system_routes_edit.php:227 +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/system_gateway_groups.php:98 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_routes.php:113 +#: usr/local/www/system_routes_edit.php:229 +#: usr/local/www/system_routes_edit.php:231 +#: usr/local/www/diag_logs_settings.php:241 usr/local/www/system_hasync.php:98 +#: usr/local/www/system_advanced_admin.php:263 +#: usr/local/www/system_advanced_misc.php:260 +#: usr/local/www/system_advanced_firewall.php:232 +#: usr/local/www/diag_backup.php:196 +#: usr/local/www/system_advanced_notifications.php:155 +#: usr/local/www/system_advanced_network.php:147 +msgid "System" +msgstr "Sistema" + +#: usr/local/www/pkg_mgr_installed.php:45 +#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_backup.php:113 +#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81 +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/fbegin.inc:440 +#: usr/local/www/pkg_mgr.php:55 usr/local/www/pkg_mgr.php:93 +#: usr/local/www/fbegin.inc:458 usr/local/www/diag_backup.php:190 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/fbegin.inc:428 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:420 +#: usr/local/www/pkg_mgr.php:94 usr/local/www/diag_backup.php:191 +msgid "Package Manager" +msgstr "Gerenciador de Pacotes" + +#: usr/local/www/pkg_mgr_installed.php:76 usr/local/www/pkg_mgr.php:99 +#: usr/local/www/pkg_mgr.php:115 usr/local/www/pkg_mgr_installed.php:97 +#: usr/local/www/pkg_mgr_installed.php:99 usr/local/www/pkg_mgr.php:118 +msgid "Available Packages" +msgstr "Pacotes disponíveis" + +#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/pkg_mgr.php:103 +#: usr/local/www/pkg_mgr_settings.php:93 usr/local/www/pkg_mgr.php:119 +#: usr/local/www/pkg_mgr_installed.php:101 +#: usr/local/www/pkg_mgr_installed.php:103 usr/local/www/pkg_mgr.php:122 +#: usr/local/www/pkg_mgr_settings.php:92 +msgid "Installed Packages" +msgstr "Pacotes Instalados" + +#: usr/local/www/pkg_mgr_installed.php:90 usr/local/www/pkg_mgr.php:113 +msgid "Package Name" +msgstr "Nome do Pacote" + +#: usr/local/www/pkg_mgr_installed.php:91 usr/local/www/pkg_mgr.php:114 +#: usr/local/www/pkg_mgr.php:130 usr/local/www/pkg_mgr_installed.php:112 +#: usr/local/www/pkg_mgr_installed.php:114 usr/local/www/pkg_mgr.php:133 +msgid "Category" +msgstr "Categoria" + +#: usr/local/www/pkg_mgr_installed.php:92 +#: usr/local/www/pkg_mgr_installed.php:150 usr/local/www/pkg_mgr.php:117 +#: usr/local/www/pkg_mgr.php:200 +msgid "Package Info" +msgstr "Info do Pacote" + +#: usr/local/www/pkg_mgr_installed.php:93 +msgid "Package Version" +msgstr "Versão do Pacote" + +#: usr/local/www/pkg_mgr_installed.php:116 +#: usr/local/www/pkg_mgr_installed.php:122 +#: usr/local/www/pkg_mgr_installed.php:142 +#: usr/local/www/pkg_mgr_installed.php:144 +#: usr/local/www/pkg_mgr_installed.php:151 +#: usr/local/www/pkg_mgr_installed.php:153 +#: usr/local/www/pkg_mgr_installed.php:146 +#: usr/local/www/pkg_mgr_installed.php:155 +msgid "Available" +msgstr "Disponível" + +#: usr/local/www/pkg_mgr_installed.php:117 +#: usr/local/www/pkg_mgr_installed.php:123 +#: usr/local/www/pkg_mgr_installed.php:145 +#: usr/local/www/pkg_mgr_installed.php:154 +#: usr/local/www/pkg_mgr_installed.php:147 +#: usr/local/www/pkg_mgr_installed.php:156 +msgid "Installed" +msgstr "Instalado" + +#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202 +msgid "No info, check the" +msgstr "Sem info, verifique o" + +#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202 +msgid "forum" +msgstr "fórum" + +#: usr/local/www/pkg_mgr_installed.php:163 +msgid "Do you really want to remove this package?" +msgstr "Você realmente deseja remover esse pacote?" + +#: usr/local/www/pkg_mgr_installed.php:164 +msgid "Remove this package." +msgstr "Remova esse pacote." + +#: usr/local/www/pkg_mgr_installed.php:168 +msgid "Reinstall this package." +msgstr "Reinstalar esse pacote." + +#: usr/local/www/pkg_mgr_installed.php:171 +msgid "Reinstall this package's GUI components." +msgstr "Reinstalar os componentes GUI desse pacote." + +#: usr/local/www/pkg_mgr_installed.php:181 +#: usr/local/www/pkg_mgr_installed.php:222 +#: usr/local/www/pkg_mgr_installed.php:225 +#: usr/local/www/pkg_mgr_installed.php:227 +msgid "There are no packages currently installed." +msgstr "Não há pacotes instalados atualmente." + +#: usr/local/www/easyrule.php:34 +msgid "Status : EasyRule" +msgstr "Status: EasyRule" + +#: usr/local/www/easyrule.php:69 +msgid "Message" +msgstr "Mensagem" + +#: usr/local/www/easyrule.php:72 +msgid "This is the Easy Rule status page, mainly used to display errors when adding rules. If you are seeing this, there apparently was not an error, and you navigated to the page directly without telling it what to do" +msgstr "Esta é a página de status do EasyRule, principalmente usada para mostrar erros quando regras são adicionadas. Se você está vendo isto, este aparentemente não foi um erro e você navegou direto para a página sem dizer a ela o que fazer" + +#: usr/local/www/easyrule.php:75 +msgid "This page is meant to be called from the block/pass buttons on the Firewall Logs page" +msgstr "Esta página destina-se a ser chama pelos botões bloquear/liberar na página de logs do Firewall" + +#: usr/local/www/easyrule.php:75 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs_auth.php:54 usr/local/www/diag_logs_dhcp.php:59 +#: usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/status_wireless.php:41 usr/local/www/status_wireless.php:77 +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/pkg_mgr.php:116 usr/local/www/diag_ipsec.php:48 +#: usr/local/www/diag_ipsec.php:96 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_pkglogs.php:81 +#: usr/local/www/status_filter_reload.php:44 usr/local/www/status_graph.php:85 +#: usr/local/www/carp_status.php:100 usr/local/www/carp_status.php:140 +#: usr/local/www/status_interfaces.php:58 +#: usr/local/www/status_interfaces.php:85 usr/local/www/fbegin.inc:359 +#: usr/local/www/status_queues.php:98 usr/local/www/status_rrd_graph.php:224 +#: usr/local/www/status_rrd_graph_settings.php:113 +#: usr/local/www/status_services.php:226 usr/local/www/status_services.php:246 +#: usr/local/www/status_upnp.php:58 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/status_dhcp_leases.php:48 +#: usr/local/www/status_gateway_groups.php:52 +#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:77 +#: usr/local/www/status_graph_cpu.php:41 usr/local/www/status_lb_pool.php:62 +#: usr/local/www/status_lb_vs.php:56 usr/local/www/status_lb_vs.php:80 +#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:212 +#: usr/local/www/status_openvpn.php:263 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:43 +#: usr/local/www/status_dhcpv6_leases.php:49 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_routing.php:54 usr/local/www/pkg_mgr.php:131 +#: usr/local/www/diag_logs_settings.php:136 usr/local/www/fbegin.inc:377 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/status_queues.php:101 usr/local/www/diag_ipsec.php:107 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/status_rrd_graph.php:244 usr/local/www/status_ntpd.php:94 +#: usr/local/www/status_ntpd.php:107 usr/local/www/status_dhcpv6_leases.php:50 +#: usr/local/www/status_dhcp_leases.php:49 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266 +#: usr/local/www/diag_logs_settings.php:143 usr/local/www/fbegin.inc:323 +#: usr/local/www/status_interfaces.php:60 +#: usr/local/www/status_interfaces.php:88 usr/local/www/carp_status.php:92 +#: usr/local/www/carp_status.php:133 usr/local/www/status_graph.php:90 +#: usr/local/www/diag_ipsec.php:108 usr/local/www/status_wireless.php:78 +#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:123 +#: usr/local/www/status_services.php:222 usr/local/www/status_services.php:242 +#: usr/local/www/status_gateways.php:78 usr/local/www/diag_logs_filter.php:79 +#: usr/local/www/status_services.php:220 usr/local/www/status_services.php:240 +#: usr/local/www/status_openvpn.php:314 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_graph.php:101 usr/local/www/diag_ipsec.php:110 +#: usr/local/www/status_rrd_graph.php:248 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:315 +#: usr/local/www/status_services.php:63 usr/local/www/status_services.php:81 +#: usr/local/www/status_openvpn.php:273 usr/local/www/status_openvpn.php:334 +#: usr/local/www/diag_logs_filter.php:109 usr/local/www/status_graph.php:111 +#: usr/local/www/pkg_mgr.php:134 usr/local/www/status_ntpd.php:115 +#: usr/local/www/status_ntpd.php:129 usr/local/www/diag_logs_settings.php:162 +#: usr/local/www/status_queues.php:123 +msgid "Status" +msgstr "Status" + +#: usr/local/www/easyrule.php:75 +msgid "System Logs, Firewall Tab" +msgstr "Logs de Sistema, Firewall Tab" + +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/diag_logs.php:78 usr/local/www/diag_logs_auth.php:66 +#: usr/local/www/diag_logs_dhcp.php:71 usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter.php:102 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_ipsec.php:103 usr/local/www/diag_logs_ntpd.php:66 +#: usr/local/www/diag_logs_openvpn.php:70 +#: usr/local/www/diag_logs_settings.php:211 +#: usr/local/www/diag_logs_vpn.php:127 usr/local/www/firewall_aliases.php:150 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_rules.php:52 +#: usr/local/www/firewall_rules_edit.php:628 +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/firewall_shaper.php:54 +#: usr/local/www/firewall_virtual_ip.php:149 +#: usr/local/www/diag_logs_filter_summary.php:185 +#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_relayd.php:67 +#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:335 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/diag_logs_wireless.php:68 +#: usr/local/www/diag_logs_routing.php:66 +#: usr/local/www/diag_logs_settings.php:216 usr/local/www/fbegin.inc:353 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/diag_logs_resolver.php:79 +#: usr/local/www/firewall_aliases.php:153 +#: usr/local/www/diag_logs_gateways.php:79 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/diag_logs_filter_dynamic.php:99 +#: usr/local/www/diag_logs_routing.php:67 +#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:299 +#: usr/local/www/diag_logs_relayd.php:68 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:165 usr/local/www/diag_logs_auth.php:67 +#: usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/diag_logs_ipsec.php:104 +#: usr/local/www/diag_logs_resolver.php:80 usr/local/www/diag_logs_ntpd.php:67 +#: usr/local/www/firewall_rules.php:49 usr/local/www/diag_logs_dhcp.php:72 +#: usr/local/www/diag_logs_wireless.php:69 +#: usr/local/www/diag_logs_filter_summary.php:186 +#: usr/local/www/firewall_aliases.php:155 +#: usr/local/www/diag_logs_gateways.php:80 +#: usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/diag_logs_openvpn.php:71 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/firewall_virtual_ip.php:152 +#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_filter.php:92 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/firewall_virtual_ip.php:166 +#: usr/local/www/firewall_nat_edit.php:439 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +#: usr/local/www/diag_logs_filter_dynamic.php:98 +#: usr/local/www/diag_logs_ppp.php:69 usr/local/www/fbegin.inc:291 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_aliases.php:154 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/diag_logs_settings.php:242 +#: usr/local/www/firewall_rules_edit.php:724 +#: usr/local/www/firewall_virtual_ip.php:196 +#: usr/local/www/firewall_virtual_ip_edit.php:277 +msgid "Firewall" +msgstr "Firewall" + +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/firewall_aliases.php:150 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/diag_backup.php:103 usr/local/www/fbegin.inc:110 +#: usr/local/www/fbegin.inc:127 usr/local/www/services_dnsmasq_edit.php:225 +#: usr/local/www/diag_backup.php:180 usr/local/www/firewall_aliases.php:153 +#: usr/local/www/fbegin.inc:136 usr/local/www/services_dnsmasq_edit.php:226 +#: usr/local/www/firewall_aliases.php:155 usr/local/www/fbegin.inc:128 +#: usr/local/www/firewall_aliases.php:154 +msgid "Aliases" +msgstr "Aliases" + +#: usr/local/www/firewall_aliases_import.php:48 +msgid "Bulk import" +msgstr "Importação em massa" + +#: usr/local/www/firewall_aliases_import.php:64 +msgid "The alias name may only consist of the characters" +msgstr "O nome de alias deve conter somente caracteres" + +#: usr/local/www/firewall_aliases_import.php:68 +#: usr/local/www/firewall_aliases_edit.php:151 +#: usr/local/www/firewall_aliases_edit.php:145 +msgid "An alias with this name already exists." +msgstr "Já existe um alias com esse nome." + +#: usr/local/www/firewall_aliases_import.php:74 +#: usr/local/www/firewall_aliases_edit.php:160 +#: usr/local/www/firewall_aliases_edit.php:154 +#, php-format +msgid "Cannot use a reserved keyword as alias name %s" +msgstr "Não pode usar uma palavra reservada como nome de alias %s" + +#: usr/local/www/firewall_aliases_import.php:79 +#: usr/local/www/firewall_aliases_edit.php:165 +#: usr/local/www/firewall_aliases_edit.php:159 +msgid "An interface description with this name already exists." +msgstr "Já existe uma descrição de interface com esse nome." + +#: usr/local/www/firewall_aliases_import.php:94 +#, php-format +msgid "%s is not an IP address. Please correct the error to continue" +msgstr "%s não é um endereço IP. Por favor corrija o erro para continuar" + +#: usr/local/www/firewall_aliases_import.php:131 +msgid "Alias Import" +msgstr "Importação de Alias" + +#: usr/local/www/firewall_aliases_import.php:134 +msgid "Alias Name" +msgstr "Nome Alias" + +#: usr/local/www/firewall_aliases_import.php:137 +#: usr/local/www/firewall_aliases_edit.php:585 +msgid "The name of the alias may only consist of the characters \"a-z, A-Z and 0-9\"." +msgstr "O nome do alias deve consistir apenas de caracteres \"a-z, A-Z e 0-9\"." + +#: usr/local/www/firewall_aliases_import.php:142 +#: usr/local/www/interfaces_lagg_edit.php:211 +#: usr/local/www/services_captiveportal_ip_edit.php:211 +#: usr/local/www/services_captiveportal_mac_edit.php:185 +#: usr/local/www/services_captiveportal_hostname_edit.php:186 +#: usr/local/www/system_gateways_edit.php:487 +#: usr/local/www/vpn_ipsec_phase1.php:580 +#: usr/local/www/vpn_ipsec_phase2.php:502 +#: usr/local/www/vpn_openvpn_client.php:577 +#: usr/local/www/vpn_openvpn_csc.php:346 +#: usr/local/www/vpn_openvpn_server.php:726 +#: usr/local/www/services_captiveportal_zones_edit.php:109 +#: usr/local/www/system_gateways_edit.php:522 +#: usr/local/www/vpn_openvpn_server.php:799 +#: usr/local/www/vpn_ipsec_phase2.php:528 +#: usr/local/www/vpn_openvpn_client.php:582 +#: usr/local/www/vpn_ipsec_phase1.php:593 +#: usr/local/www/services_captiveportal_hostname_edit.php:184 +#: usr/local/www/services_captiveportal_mac_edit.php:183 +#: usr/local/www/interfaces_lagg_edit.php:212 +#: usr/local/www/vpn_openvpn_csc.php:345 +#: usr/local/www/system_gateways_edit.php:622 +#: usr/local/www/services_captiveportal_ip_edit.php:209 +#: usr/local/www/vpn_openvpn_server.php:827 +#: usr/local/www/services_captiveportal_zones_edit.php:111 +#: usr/local/www/vpn_ipsec_phase2.php:630 +#: usr/local/www/vpn_openvpn_client.php:600 +#: usr/local/www/vpn_ipsec_phase1.php:592 +#: usr/local/www/system_gateways_edit.php:626 +#: usr/local/www/services_captiveportal_ip_edit.php:203 +#: usr/local/www/vpn_openvpn_client.php:619 +#: usr/local/www/interfaces_lagg_edit.php:225 +#: usr/local/www/services_captiveportal_mac_edit.php:196 +#: usr/local/www/vpn_ipsec_phase1.php:613 +#: usr/local/www/vpn_openvpn_server.php:854 +#: usr/local/www/vpn_ipsec_phase2.php:651 +#: usr/local/www/system_gateways_edit.php:628 +#: usr/local/www/system_gateways_edit.php:658 +#: usr/local/www/interfaces_lagg_edit.php:224 +#: usr/local/www/system_gateways_edit.php:659 +msgid "You may enter a description here for your reference (not parsed)" +msgstr "Você pode inserir uma descrição aqui para sua referência (não analisado)" + +#: usr/local/www/firewall_aliases_import.php:146 +msgid "Aliases to import" +msgstr "Aliases para importar" + +#: usr/local/www/firewall_aliases_import.php:148 +msgid "Paste in the aliases to import separated by a carriage return. Common examples are lists of IPs, networks, blacklists, etc." +msgstr "Cole nos alias para importar separada por retorno de carro. Exemplos comuns são listas de IP, redes, listas negras, etc." + +#: usr/local/www/firewall_aliases_import.php:149 +msgid "The list may contain only IP addresses." +msgstr "Esta lista pode conter apenas endereços IP." + +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_shaper.php:54 usr/local/www/diag_backup.php:121 +#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:131 +#: usr/local/www/diag_backup.php:199 usr/local/www/fbegin.inc:140 +#: usr/local/www/fbegin.inc:132 usr/local/www/diag_backup.php:200 +msgid "Traffic Shaper" +msgstr "Traffic Shaper" + +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_layer7.php:410 +#: usr/local/www/firewall_shaper_vinterface.php:375 +#: usr/local/www/firewall_shaper_wizards.php:105 +#: usr/local/www/firewall_rules_edit.php:1443 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_queues.php:196 +#: usr/local/www/firewall_rules_edit.php:1514 +#: usr/local/www/firewall_shaper_vinterface.php:385 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_vinterface.php:392 +#: usr/local/www/firewall_rules_edit.php:1529 +#: usr/local/www/firewall_shaper.php:414 +#: usr/local/www/firewall_shaper_vinterface.php:395 +#: usr/local/www/firewall_rules_edit.php:1537 +#: usr/local/www/firewall_shaper_queues.php:197 +#: usr/local/www/firewall_shaper_wizards.php:106 +#: usr/local/www/firewall_rules_edit.php:1548 +#: usr/local/www/firewall_rules_edit.php:1596 +msgid "Layer7" +msgstr "Layer7" + +#: usr/local/www/firewall_shaper_layer7.php:66 +msgid "You can add new layer7 protocol patterns by simply uploading the file" +msgstr "Você pode adicionar um novo padrão de protocolo layer7 simplesmente carregando o arquivo" + +#: usr/local/www/firewall_shaper_layer7.php:66 +#: usr/local/www/firewall_virtual_ip.php:243 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2559 usr/local/www/carp_status.php:196 +#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/carp_status.php:189 usr/local/www/status_queues.php:183 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/firewall_virtual_ip.php:249 +#: usr/local/www/firewall_virtual_ip.php:269 +#: usr/local/www/status_queues.php:165 usr/local/www/interfaces.php:2774 +#: usr/local/www/interfaces.php:2783 usr/local/www/interfaces.php:2820 +#: usr/local/www/interfaces.php:2829 usr/local/www/firewall_virtual_ip.php:292 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +#: usr/local/www/firewall_virtual_ip.php:300 +#: usr/local/www/status_queues.php:187 usr/local/www/interfaces.php:2842 +#: usr/local/www/interfaces.php:2851 +msgid "here" +msgstr "aqui" + +#: usr/local/www/firewall_shaper_layer7.php:111 +msgid "Layer7 Rules Container not found!" +msgstr "Contâiner de Regras Layer7 não encontrado!" + +#: usr/local/www/firewall_shaper_layer7.php:161 +msgid "Found the following repeated protocol definitions" +msgstr "Encontradas as seguintes definições de protocolo repetidas" + +#: usr/local/www/firewall_shaper_layer7.php:401 +#: usr/local/www/firewall_shaper_queues.php:187 +#: usr/local/www/firewall_shaper_queues.php:188 +msgid "The traffic shaper configuration has been changed" +msgstr "A configuração do traffic shaper foi modificada" + +#: usr/local/www/firewall_shaper_layer7.php:407 +#: usr/local/www/firewall_shaper_vinterface.php:372 +#: usr/local/www/firewall_shaper_wizards.php:102 +#: usr/local/www/firewall_shaper.php:409 +#: usr/local/www/firewall_shaper_queues.php:193 +#: usr/local/www/firewall_shaper_vinterface.php:382 +#: usr/local/www/firewall_shaper.php:410 +#: usr/local/www/firewall_shaper_vinterface.php:389 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:392 +#: usr/local/www/firewall_shaper_queues.php:194 +#: usr/local/www/firewall_shaper_wizards.php:103 +msgid "By Interface" +msgstr "Por Interface" + +#: usr/local/www/firewall_shaper_layer7.php:408 +#: usr/local/www/firewall_shaper_vinterface.php:373 +#: usr/local/www/firewall_shaper_wizards.php:103 +#: usr/local/www/firewall_shaper.php:410 +#: usr/local/www/firewall_shaper_queues.php:194 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:390 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:393 +#: usr/local/www/firewall_shaper_queues.php:195 +#: usr/local/www/firewall_shaper_wizards.php:104 +msgid "By Queue" +msgstr "Por Fila" + +#: usr/local/www/firewall_shaper_layer7.php:409 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_vinterface.php:374 +#: usr/local/www/firewall_shaper_wizards.php:104 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_queues.php:195 +#: usr/local/www/firewall_shaper_vinterface.php:384 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:391 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_vinterface.php:394 +#: usr/local/www/firewall_shaper_queues.php:196 +#: usr/local/www/firewall_shaper_wizards.php:105 +msgid "Limiter" +msgstr "Limitador" + +#: usr/local/www/firewall_shaper_layer7.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_shaper_wizards.php:106 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_queues.php:197 +#: usr/local/www/vpn_openvpn_client.php:368 +#: usr/local/www/vpn_openvpn_csc.php:296 +#: usr/local/www/vpn_openvpn_server.php:586 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/vpn_openvpn_server.php:659 +#: usr/local/www/vpn_openvpn_client.php:373 +#: usr/local/www/firewall_shaper.php:414 usr/local/www/vpn_openvpn_csc.php:295 +#: usr/local/www/firewall_shaper_vinterface.php:393 +#: usr/local/www/vpn_openvpn_server.php:677 +#: usr/local/www/vpn_openvpn_client.php:381 +#: usr/local/www/vpn_openvpn_client.php:399 +#: usr/local/www/vpn_openvpn_server.php:703 +#: usr/local/www/firewall_shaper.php:415 +#: usr/local/www/firewall_shaper_vinterface.php:396 +#: usr/local/www/firewall_shaper_queues.php:198 +#: usr/local/www/firewall_shaper_wizards.php:107 +msgid "Wizards" +msgstr "Wizards" + +#: usr/local/www/firewall_shaper_layer7.php:432 +msgid "Create new l7 rules group" +msgstr "Criar um novo grupo de regras l7" + +#: usr/local/www/firewall_shaper_layer7.php:445 +msgid "Rule(s)" +msgstr "Regra(s)" + +#: usr/local/www/firewall_shaper_layer7.php:457 +msgid "Add one or more rules" +msgstr "Adicionar uma ou mais regras" + +#: usr/local/www/firewall_shaper_layer7.php:473 +msgid "Structure" +msgstr "Estrutura" + +#: usr/local/www/firewall_shaper_layer7.php:480 +msgid "Behaviour" +msgstr "Comportamento" + +#: usr/local/www/firewall_shaper_layer7.php:558 +#: usr/local/www/interfaces_groups_edit.php:315 +#: usr/local/www/firewall_aliases_edit.php:680 +#: usr/local/www/interfaces_qinq_edit.php:387 +#: usr/local/www/services_dhcp.php:855 +#: usr/local/www/services_igmpproxy_edit.php:273 +#: usr/local/www/vpn_pppoe_edit.php:573 usr/local/www/services_dhcpv6.php:768 +#: usr/local/www/services_unbound_acls.php:279 +#: usr/local/www/services_dnsmasq_edit.php:271 +#: usr/local/www/system_certmanager.php:793 +#: usr/local/www/services_igmpproxy_edit.php:275 +#: usr/local/www/firewall_aliases_edit.php:685 +#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:863 +#: usr/local/www/vpn_pppoe_edit.php:574 +#: usr/local/www/services_dnsmasq_edit.php:272 +#: usr/local/www/services_router_advertisements.php:358 +#: usr/local/www/interfaces_qinq_edit.php:388 +#: usr/local/www/firewall_aliases_edit.php:688 +#: usr/local/www/services_dhcp.php:1090 +#: usr/local/www/interfaces_groups_edit.php:316 +#: usr/local/www/services_dhcpv6.php:794 usr/local/www/vpn_pppoe_edit.php:577 +#: usr/local/www/services_dhcp.php:1103 +#: usr/local/www/system_certmanager.php:818 +#: usr/local/www/services_dhcpv6.php:811 +#: usr/local/www/interfaces_qinq_edit.php:391 +#: usr/local/www/firewall_shaper_layer7.php:555 +#: usr/local/www/services_router_advertisements.php:353 +#: usr/local/www/services_dhcp.php:1123 +#: usr/local/www/system_certmanager.php:820 +#: usr/local/www/firewall_aliases_edit.php:717 +#: usr/local/www/interfaces_groups_edit.php:313 +#: usr/local/www/services_dhcp.php:1135 +#: usr/local/www/firewall_aliases_edit.php:716 +msgid "add another entry" +msgstr "adicionar outra entrada" + +#: usr/local/www/firewall_shaper_vinterface.php:102 +msgid "" +"This pipe/queue is referenced in filter rules, please remove references from " +"there before deleteing." +msgstr "" +"O pipe/fila é referenciado em regras de firewall, por favor remova estas " +"referências antes de apagar." + +#: usr/local/www/firewall_shaper_vinterface.php:114 +#, php-format +msgid "No queue with name %s was found!" +msgstr "Nenhuma fila com o nome %s foi encontrada!" + +#: usr/local/www/firewall_shaper_vinterface.php:160 +#: usr/local/www/firewall_shaper.php:159 usr/local/www/firewall_shaper.php:160 +msgid "Could not create new queue/discipline!" +msgstr "Não pôde criar uma nova fila/disciplina!" + +#: usr/local/www/firewall_shaper_vinterface.php:172 +#: usr/local/www/firewall_shaper_vinterface.php:181 +#: usr/local/www/firewall_shaper_vinterface.php:190 +#: usr/local/www/firewall_shaper.php:175 usr/local/www/firewall_shaper.php:184 +#: usr/local/www/firewall_shaper.php:193 +#: usr/local/www/firewall_shaper_vinterface.php:182 +#: usr/local/www/firewall_shaper_vinterface.php:192 +#: usr/local/www/firewall_shaper.php:176 usr/local/www/firewall_shaper.php:185 +#: usr/local/www/firewall_shaper.php:194 +#: usr/local/www/firewall_shaper_vinterface.php:173 +#: usr/local/www/firewall_shaper_vinterface.php:183 +#: usr/local/www/firewall_shaper_vinterface.php:193 +msgid "Queue not found!" +msgstr "Fila não encontrada!" + +#: usr/local/www/firewall_shaper_vinterface.php:235 +#: usr/local/www/firewall_shaper.php:270 +#: usr/local/www/firewall_shaper_vinterface.php:245 +#: usr/local/www/firewall_shaper.php:271 +#: usr/local/www/firewall_shaper_vinterface.php:247 +msgid "Could not add new queue." +msgstr "Não pôde adicionar uma nova fila." + +#: usr/local/www/firewall_shaper_vinterface.php:304 +#: usr/local/www/firewall_shaper.php:346 +#: usr/local/www/firewall_shaper_vinterface.php:314 +#: usr/local/www/firewall_shaper.php:347 +#: usr/local/www/firewall_shaper_vinterface.php:316 +msgid "Queue Actions" +msgstr "Ações de Fila" + +#: usr/local/www/firewall_shaper_vinterface.php:315 +#: usr/local/www/firewall_shaper.php:357 +#: usr/local/www/firewall_shaper_vinterface.php:325 +#: usr/local/www/firewall_shaper.php:358 +#: usr/local/www/firewall_shaper_vinterface.php:327 +msgid "Add new queue" +msgstr "Adicionar nova fila" + +#: usr/local/www/firewall_shaper_vinterface.php:326 +#: usr/local/www/firewall_shaper.php:367 +#: usr/local/www/firewall_shaper_vinterface.php:336 +#: usr/local/www/firewall_shaper.php:368 +#: usr/local/www/firewall_shaper_vinterface.php:338 +#: usr/local/www/firewall_shaper.php:369 +msgid "Delete this queue" +msgstr "Apagar essa fila" + +#: usr/local/www/firewall_shaper_vinterface.php:328 +#: usr/local/www/firewall_shaper_vinterface.php:338 +#: usr/local/www/firewall_shaper_vinterface.php:340 +msgid "Delete virtual interface" +msgstr "Apagar interface virtual" + +#: usr/local/www/firewall_shaper_vinterface.php:366 +#: usr/local/www/firewall_shaper_wizards.php:96 +#: usr/local/www/firewall_shaper.php:403 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/firewall_shaper.php:404 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/firewall_shaper.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/firewall_shaper_wizards.php:97 +msgid "The traffic shaper configuration has been changed." +msgstr "A configuração do traffic shaper foi modificada." + +#: usr/local/www/firewall_shaper_vinterface.php:395 +#: usr/local/www/firewall_shaper_vinterface.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:415 +msgid "Create new limiter" +msgstr "Criar novo limitador" + +#: usr/local/www/firewall_shaper_wizards.php:76 +msgid "Single Lan multi Wan" +msgstr "Lan única Wan múltipla" + +#: usr/local/www/firewall_shaper_wizards.php:77 +msgid "Single Wan multi Lan" +msgstr "Wan única Lan múltipla" + +#: usr/local/www/firewall_shaper_wizards.php:78 +msgid "Multiple Lan/Wan" +msgstr "Lan/Wan Múltiplas" + +#: usr/local/www/firewall_shaper_wizards.php:79 +msgid "Dedicated Links" +msgstr "Links dedicados" + +#: usr/local/www/firewall_shaper_wizards.php:115 +#: usr/local/www/firewall_shaper_wizards.php:116 +msgid "Wizard function" +msgstr "Função do Wizard" + +#: usr/local/www/firewall_shaper_wizards.php:116 +#: usr/local/www/firewall_shaper_wizards.php:117 +msgid "Wizard Link" +msgstr "Link do Wizard" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:107 +#: usr/local/www/system.php:113 usr/local/www/system.php:265 +#: usr/local/www/services_dnsmasq.php:244 +#: usr/local/www/services_dnsmasq.php:311 +#: usr/local/www/services_dnsmasq_edit.php:80 +#: usr/local/www/services_dnsmasq_edit.php:149 +#: usr/local/www/services_dnsmasq.php:332 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:204 +#: usr/local/www/services_dnsmasq_edit.php:238 +#: usr/local/www/services_unbound.php:280 +#: usr/local/www/services_unbound.php:347 usr/local/www/system.php:114 +#: usr/local/www/system.php:276 usr/local/www/services_dnsmasq.php:245 +#: usr/local/www/services_dnsmasq.php:333 +#: usr/local/www/services_dnsmasq_edit.php:205 +#: usr/local/www/services_dnsmasq_edit.php:239 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/system.php:107 usr/local/www/system.php:269 +#: usr/local/www/services_dnsmasq.php:270 +#: usr/local/www/services_dnsmasq.php:358 +#: usr/local/www/services_dnsmasq.php:283 +#: usr/local/www/services_dnsmasq.php:371 +#: usr/local/www/services_dnsmasq.php:347 +#: usr/local/www/services_dnsmasq.php:435 +msgid "Domain" +msgstr "Domínio" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:70 +#: usr/local/www/services_dnsmasq_edit.php:88 +#: usr/local/www/services_dnsmasq_edit.php:89 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87 +msgid "A valid domain must be specified." +msgstr "Um domínio válido deve ser especificado." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:73 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90 +msgid "A valid IP address must be specified, or # for an exclusion." +msgstr "Um endereço IP válido deve ser especificado, ou # para uma exclusão." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dnsmasq.php:119 +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/services_dhcpv6.php:791 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/services_dnsmasq.php:123 usr/local/www/services_dhcp.php:1153 +#: usr/local/www/services_dnsmasq.php:125 +#: usr/local/www/services_dnsmasq.php:146 usr/local/www/services_dhcp.php:1165 +msgid "DNS forwarder" +msgstr "DNS forwarder" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +msgid "Edit Domain Override" +msgstr "Editar Sobrescrita de domínio" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:110 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:133 +msgid "Domain to override (NOTE: this does not have to be a valid TLD!)" +msgstr "Domínio para sobrescrever (NOTA: isso não precisa ser um TLD válido!)" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/firewall_nat_edit.php:745 usr/local/www/system.php:260 +#: usr/local/www/system.php:271 usr/local/www/services_dnsmasq_edit.php:146 +#: usr/local/www/services_dnsmasq_edit.php:153 +#: usr/local/www/services_dnsmasq_edit.php:160 +#: usr/local/www/services_dnsmasq_edit.php:201 +#: usr/local/www/services_dnsmasq_edit.php:208 +#: usr/local/www/services_dnsmasq_edit.php:215 +#: usr/local/www/firewall_nat_edit.php:752 usr/local/www/system.php:282 +#: usr/local/www/services_dnsmasq_edit.php:202 +#: usr/local/www/services_dnsmasq_edit.php:209 +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +#: usr/local/www/firewall_nat_edit.php:751 usr/local/www/system.php:264 +#: usr/local/www/system.php:275 usr/local/www/firewall_nat_edit.php:746 +#: usr/local/www/firewall_nat_edit.php:758 +#: usr/local/www/firewall_nat_edit.php:759 +msgid "e.g." +msgstr "ex." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +msgid "test" +msgstr "teste" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:117 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:140 +msgid "IP address of the authoritative DNS server for this domain" +msgstr "Endereço IP do servidor DNS oficial para esse domínio" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +msgid "Or enter # for an exclusion to pass through this host/subdomain to standard nameservers instead of a previous override." +msgstr "Ou entre com # para remover a passagem através de host/sub-domínio para nameservers padrões, ao invés de substituir o anterior." + +#: usr/local/www/firewall_virtual_ip_edit.php:106 +#: usr/local/www/firewall_virtual_ip_edit.php:415 +#: usr/local/www/load_balancer_relay_action.php:141 +#: usr/local/www/firewall_aliases_edit.php:601 +#: usr/local/www/firewall_virtual_ip.php:186 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:247 +#: usr/local/www/services_captiveportal.php:777 +#: usr/local/www/services_dhcp.php:813 +#: usr/local/www/load_balancer_relay_action_edit.php:463 +#: usr/local/www/load_balancer_relay_protocol.php:135 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:201 +#: usr/local/www/services_igmpproxy.php:96 +#: usr/local/www/services_igmpproxy_edit.php:185 +#: usr/local/www/system_authservers.php:161 +#: usr/local/www/system_authservers.php:184 +#: usr/local/www/system_authservers.php:449 +#: usr/local/www/system_authservers.php:738 +#: usr/local/www/vpn_ipsec_phase2.php:423 +#: usr/local/www/vpn_ipsec_phase2.php:465 +#: usr/local/www/system_certmanager.php:762 +#: usr/local/www/load_balancer_relay_action_edit.php:462 +#: usr/local/www/services_igmpproxy_edit.php:187 +#: usr/local/www/firewall_aliases_edit.php:606 +#: usr/local/www/status_ntpd.php:111 +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/load_balancer_monitor.php:124 +#: usr/local/www/services_dhcp.php:851 usr/local/www/vpn_ipsec_phase2.php:449 +#: usr/local/www/vpn_ipsec_phase2.php:491 +#: usr/local/www/firewall_virtual_ip_edit.php:403 +#: usr/local/www/load_balancer_relay_protocol_edit.php:199 +#: usr/local/www/load_balancer_relay_action_edit.php:460 +#: usr/local/www/load_balancer_monitor_edit.php:245 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/status_ntpd.php:127 +#: usr/local/www/services_captiveportal.php:817 +#: usr/local/www/load_balancer_monitor.php:122 +#: usr/local/www/load_balancer_relay_protocol.php:133 +#: usr/local/www/services_dhcp.php:1048 +#: usr/local/www/load_balancer_relay_action.php:139 +#: usr/local/www/vpn_ipsec_phase2.php:515 +#: usr/local/www/vpn_ipsec_phase2.php:551 +#: usr/local/www/vpn_ipsec_phase2.php:593 +#: usr/local/www/firewall_virtual_ip_edit.php:355 +#: usr/local/www/firewall_virtual_ip.php:190 +#: usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 +#: usr/local/www/system_authservers.php:454 +#: usr/local/www/system_authservers.php:744 +#: usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_virtual_ip_edit.php:347 +#: usr/local/www/services_dhcp.php:1061 +#: usr/local/www/system_certmanager.php:787 +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/system_authservers.php:461 +#: usr/local/www/system_authservers.php:760 +#: usr/local/www/services_captiveportal.php:805 +#: usr/local/www/vpn_ipsec_phase2.php:537 +#: usr/local/www/vpn_ipsec_phase2.php:572 +#: usr/local/www/vpn_ipsec_phase2.php:614 +#: usr/local/www/firewall_virtual_ip_edit.php:367 +#: usr/local/www/services_dhcp.php:1081 +#: usr/local/www/system_certmanager.php:788 usr/local/www/status_ntpd.php:133 +#: usr/local/www/services_captiveportal.php:821 +#: usr/local/www/firewall_aliases_edit.php:640 +#: usr/local/www/firewall_virtual_ip.php:227 +#: usr/local/www/firewall_virtual_ip.php:234 +#: usr/local/www/firewall_virtual_ip_edit.php:371 +#: usr/local/www/services_dhcp.php:1093 +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:188 +#: usr/local/www/system_authservers.php:472 +#: usr/local/www/system_authservers.php:802 +#: usr/local/www/firewall_aliases_edit.php:639 +msgid "Type" +msgstr "Tipo" + +#: usr/local/www/firewall_virtual_ip_edit.php:111 +#: usr/local/www/diag_logs_settings.php:88 +#: usr/local/www/services_dhcp_edit.php:126 +#: usr/local/www/services_dnsmasq_edit.php:91 +#: usr/local/www/services_dnsmasq_edit.php:92 +#: usr/local/www/services_dhcp_edit.php:128 +#: usr/local/www/firewall_virtual_ip_edit.php:114 +#: usr/local/www/services_dhcp_edit.php:162 +#: usr/local/www/firewall_virtual_ip_edit.php:115 +msgid "A valid IP address must be specified." +msgstr "Um endereço de IP válido de ser especificado." + +#: usr/local/www/firewall_virtual_ip_edit.php:116 +#: usr/local/www/firewall_virtual_ip_edit.php:119 +#: usr/local/www/firewall_virtual_ip_edit.php:123 +msgid "The interface chosen for the VIP has no IPv4 or IPv6 address configured so it cannot be used as a parent for the VIP." +msgstr "A interface escolhida para o VIP não possui IPv4 ou IPv6 configurado, portanto não pode ser usado como um pai para o VIP." + +#: usr/local/www/firewall_virtual_ip_edit.php:118 +#: usr/local/www/firewall_virtual_ip_edit.php:121 +#, php-format +msgid "The %s IP address may not be used in a virtual entry." +msgstr "O endereço de IP %s não deve ser usado em uma entrada virtual." + +#: usr/local/www/firewall_virtual_ip_edit.php:123 +#: usr/local/www/firewall_virtual_ip_edit.php:126 +msgid "The /32 subnet mask is invalid for CARP IPs." +msgstr "A máscara de subrede /32 é inválida para IPs CARP." + +#: usr/local/www/firewall_virtual_ip_edit.php:127 +#: usr/local/www/firewall_virtual_ip_edit.php:130 +msgid "The /128 subnet mask is invalid for CARP IPs." +msgstr "A máscara de rede /128 é inválida para IPs CARP." + +#: usr/local/www/firewall_virtual_ip_edit.php:135 +#: usr/local/www/firewall_virtual_ip_edit.php:138 +msgid "There is already a virtual IP entry for the specified IP address." +msgstr "Já existe uma entrada de IP virtual para o endereço de IP especificado." + +#: usr/local/www/firewall_virtual_ip_edit.php:150 +#, php-format +msgid "VHID %s is already in use. Pick a unique number." +msgstr "VHID %s já está em uso. Escolha um número único." + +#: usr/local/www/firewall_virtual_ip_edit.php:154 +#: usr/local/www/firewall_virtual_ip_edit.php:157 +#: usr/local/www/firewall_virtual_ip_edit.php:156 +#: usr/local/www/firewall_virtual_ip_edit.php:148 +#: usr/local/www/firewall_virtual_ip_edit.php:164 +msgid "You must specify a CARP password that is shared between the two VHID members." +msgstr "Você deve especificar uma senha CARP que é compartilhada entre os dois membros VHID." + +#: usr/local/www/firewall_virtual_ip_edit.php:161 +#: usr/local/www/firewall_virtual_ip_edit.php:170 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +#: usr/local/www/firewall_virtual_ip_edit.php:164 +#: usr/local/www/firewall_virtual_ip_edit.php:173 +#: usr/local/www/firewall_virtual_ip_edit.php:185 +#: usr/local/www/firewall_virtual_ip_edit.php:163 +#: usr/local/www/firewall_virtual_ip_edit.php:172 +#: usr/local/www/firewall_virtual_ip_edit.php:184 +#: usr/local/www/firewall_virtual_ip_edit.php:155 +#: usr/local/www/firewall_virtual_ip_edit.php:176 +#: usr/local/www/firewall_virtual_ip_edit.php:178 +#: usr/local/www/firewall_virtual_ip_edit.php:197 +#: usr/local/www/firewall_virtual_ip_edit.php:199 +#, php-format +msgid "Sorry, we could not locate an interface with a matching subnet for %s. Please add an IP alias in this subnet on this interface." +msgstr "Lamento, não podemos localizar uma interface com uma subrede correspondente a %s. Por favor, adicione um alias de IP nessa subrede nessa interface." + +#: usr/local/www/firewall_virtual_ip_edit.php:174 +#: usr/local/www/firewall_virtual_ip_edit.php:177 +#: usr/local/www/firewall_virtual_ip_edit.php:176 +#: usr/local/www/firewall_virtual_ip_edit.php:168 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +#: usr/local/www/firewall_virtual_ip_edit.php:184 +msgid "For this type of vip a carp parent is not allowed." +msgstr "Para este tipo de VIP, um carp pai não é permitido." + +#: usr/local/www/firewall_virtual_ip_edit.php:188 +#: usr/local/www/firewall_virtual_ip_edit.php:191 +#: usr/local/www/firewall_virtual_ip_edit.php:190 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +#: usr/local/www/firewall_virtual_ip_edit.php:203 +#: usr/local/www/firewall_virtual_ip_edit.php:207 +msgid "For this type of VIP, a CARP parent is not allowed." +msgstr "Para este tipo de VIP, um CARP pai não é permitido." + +#: usr/local/www/firewall_virtual_ip_edit.php:202 +msgid "This entry cannot be modified because it is still referenced by CARP" +msgstr "Essa entrada não pode ser modificada porque ela ainda é referenciada pela CARP" + +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +#: usr/local/www/firewall_virtual_ip_edit.php:273 +#: usr/local/www/firewall_virtual_ip_edit.php:277 +msgid "Virtual IP Address" +msgstr "Endereços de IP Virtuais" + +#: usr/local/www/firewall_virtual_ip_edit.php:300 +#: usr/local/www/firewall_virtual_ip_edit.php:302 +#: usr/local/www/firewall_virtual_ip_edit.php:288 +#: usr/local/www/firewall_virtual_ip_edit.php:290 +#: usr/local/www/firewall_virtual_ip_edit.php:287 +#: usr/local/www/firewall_virtual_ip_edit.php:289 +#: usr/local/www/firewall_virtual_ip_edit.php:279 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/firewall_virtual_ip_edit.php:299 +#: usr/local/www/firewall_virtual_ip_edit.php:301 +#: usr/local/www/firewall_virtual_ip_edit.php:303 +#: usr/local/www/firewall_virtual_ip_edit.php:305 +msgid "This must be the network's subnet mask. It does not specify a CIDR range." +msgstr "Essa deve ser a máscara de subrede da rede. Ela não especifica um intervalo CIDR." + +#: usr/local/www/firewall_virtual_ip_edit.php:301 +#: usr/local/www/firewall_virtual_ip_edit.php:289 +#: usr/local/www/firewall_virtual_ip_edit.php:288 +#: usr/local/www/firewall_virtual_ip_edit.php:280 +#: usr/local/www/firewall_virtual_ip_edit.php:300 +#: usr/local/www/firewall_virtual_ip_edit.php:304 +msgid "This is a CIDR block of proxy ARP addresses." +msgstr "Esse é um bloqueio CIDR de endereços Proxy ARP." + +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:400 +#: usr/local/www/firewall_virtual_ip_edit.php:352 +#: usr/local/www/firewall_virtual_ip_edit.php:344 +#: usr/local/www/firewall_virtual_ip_edit.php:364 +#: usr/local/www/firewall_virtual_ip_edit.php:368 +msgid "Edit Virtual IP" +msgstr "Editar IP Virtual" + +#: usr/local/www/firewall_virtual_ip_edit.php:418 +#: usr/local/www/firewall_virtual_ip_edit.php:406 +#: usr/local/www/firewall_virtual_ip_edit.php:362 +#: usr/local/www/firewall_virtual_ip_edit.php:354 +#: usr/local/www/firewall_virtual_ip_edit.php:374 +#: usr/local/www/firewall_virtual_ip_edit.php:378 +msgid "Proxy ARP" +msgstr "Proxy ARP" + +#: usr/local/www/firewall_virtual_ip_edit.php:420 +#: usr/local/www/carp_status.php:100 +#: usr/local/www/firewall_virtual_ip_edit.php:408 +#: usr/local/www/carp_status.php:92 +#: usr/local/www/firewall_virtual_ip_edit.php:360 +#: usr/local/www/firewall_virtual_ip_edit.php:352 +#: usr/local/www/firewall_virtual_ip_edit.php:372 +#: usr/local/www/firewall_virtual_ip_edit.php:376 +msgid "CARP" +msgstr "CARP" + +#: usr/local/www/firewall_virtual_ip_edit.php:422 +#: usr/local/www/firewall_virtual_ip_edit.php:410 +#: usr/local/www/firewall_virtual_ip_edit.php:364 +#: usr/local/www/firewall_virtual_ip_edit.php:356 +#: usr/local/www/firewall_virtual_ip_edit.php:376 +#: usr/local/www/firewall_virtual_ip_edit.php:380 +msgid "Other" +msgstr "Outro" + +#: usr/local/www/firewall_virtual_ip_edit.php:424 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:358 +#: usr/local/www/firewall_virtual_ip_edit.php:350 +#: usr/local/www/firewall_virtual_ip_edit.php:370 +#: usr/local/www/firewall_virtual_ip_edit.php:374 +msgid "IP Alias" +msgstr "Alias do IP" + +#: usr/local/www/firewall_virtual_ip_edit.php:435 +#: usr/local/www/diag_packet_capture.php:119 +#: usr/local/www/services_wol.php:130 usr/local/www/services_wol.php:161 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:126 +#: usr/local/www/interfaces_bridge.php:107 +#: usr/local/www/interfaces_gif.php:106 usr/local/www/interfaces_gre.php:107 +#: usr/local/www/interfaces_groups_edit.php:274 +#: usr/local/www/firewall_nat_1to1.php:104 +#: usr/local/www/firewall_nat_1to1_edit.php:114 +#: usr/local/www/firewall_nat_1to1_edit.php:280 +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:185 +#: usr/local/www/firewall_nat_edit.php:476 +#: usr/local/www/firewall_nat_out.php:341 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:417 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/interfaces_assign.php:420 +#: usr/local/www/interfaces_vlan.php:108 usr/local/www/system_routes.php:128 +#: usr/local/www/interfaces_lagg.php:112 usr/local/www/interfaces_ppps.php:108 +#: usr/local/www/interfaces_qinq.php:116 +#: usr/local/www/interfaces_wireless.php:106 usr/local/www/vpn_pppoe.php:101 +#: usr/local/www/services_captiveportal.php:146 usr/local/www/diag_ping.php:95 +#: usr/local/www/services_dhcp_relay.php:72 usr/local/www/status_graph.php:179 +#: usr/local/www/diag_arp.php:316 +#: usr/local/www/services_igmpproxy_edit.php:161 +#: usr/local/www/system_gateways.php:153 +#: usr/local/www/system_gateways_edit.php:98 +#: usr/local/www/system_gateways_edit.php:347 +#: usr/local/www/vpn_ipsec_phase1.php:538 usr/local/www/vpn_l2tp.php:304 +#: usr/local/www/vpn_openvpn_client.php:451 +#: usr/local/www/vpn_openvpn_server.php:691 +#: usr/local/www/vpn_pppoe_edit.php:372 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:42 +#: usr/local/www/diag_ndp.php:132 usr/local/www/firewall_nat_npt.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:166 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/firewall_nat_out.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:287 +#: usr/local/www/firewall_nat_npt_edit.php:171 +#: usr/local/www/status_graph.php:177 +#: usr/local/www/firewall_nat_out_edit.php:430 +#: usr/local/www/firewall_rules_edit.php:760 +#: usr/local/www/services_igmpproxy_edit.php:163 +#: usr/local/www/services_captiveportal.php:147 +#: usr/local/www/system_gateways_edit.php:99 +#: usr/local/www/system_gateways_edit.php:353 +#: usr/local/www/services_dyndns.php:108 +#: usr/local/www/vpn_openvpn_server.php:764 +#: usr/local/www/diag_packet_capture.php:123 +#: usr/local/www/firewall_nat_edit.php:483 +#: usr/local/www/vpn_openvpn_client.php:456 +#: usr/local/www/firewall_virtual_ip_edit.php:423 +#: usr/local/www/vpn_pppoe_edit.php:373 usr/local/www/firewall_nat_out.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:285 +#: usr/local/www/firewall_nat_npt_edit.php:170 usr/local/www/vpn_pppoe.php:102 +#: usr/local/www/status_graph.php:183 usr/local/www/interfaces_qinq.php:117 +#: usr/local/www/interfaces_ppps.php:109 +#: usr/local/www/interfaces_bridge.php:108 +#: usr/local/www/interfaces_lagg.php:113 usr/local/www/interfaces_gre.php:108 +#: usr/local/www/interfaces_wireless.php:107 +#: usr/local/www/services_captiveportal.php:153 +#: usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:459 +#: usr/local/www/interfaces_assign.php:414 +#: usr/local/www/vpn_openvpn_server.php:782 +#: usr/local/www/interfaces_groups_edit.php:275 +#: usr/local/www/diag_packet_capture.php:181 +#: usr/local/www/interfaces_vlan.php:109 +#: usr/local/www/firewall_nat_edit.php:482 +#: usr/local/www/vpn_openvpn_client.php:464 usr/local/www/vpn_l2tp.php:305 +#: usr/local/www/firewall_virtual_ip_edit.php:368 +#: usr/local/www/interfaces_gif.php:107 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/vpn_ipsec_phase1.php:537 usr/local/www/vpn_l2tp.php:308 +#: usr/local/www/vpn_pppoe.php:103 usr/local/www/vpn_openvpn_client.php:482 +#: usr/local/www/diag_testport.php:143 +#: usr/local/www/firewall_rules_edit.php:763 +#: usr/local/www/interfaces_qinq.php:120 +#: usr/local/www/firewall_virtual_ip.php:203 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:477 usr/local/www/status_graph.php:196 +#: usr/local/www/interfaces_lagg.php:117 usr/local/www/interfaces_vlan.php:115 +#: usr/local/www/firewall_virtual_ip_edit.php:360 +#: usr/local/www/interfaces_bridge.php:114 +#: usr/local/www/interfaces_wireless.php:109 +#: usr/local/www/system_routes.php:132 usr/local/www/vpn_pppoe_edit.php:376 +#: usr/local/www/services_captiveportal.php:155 +#: usr/local/www/vpn_ipsec_phase1.php:558 usr/local/www/interfaces_gre.php:112 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:434 +#: usr/local/www/vpn_openvpn_server.php:808 +#: usr/local/www/services_dyndns.php:89 usr/local/www/interfaces_gif.php:111 +#: usr/local/www/system_gateways_edit.php:461 +#: usr/local/www/firewall_rules_edit.php:775 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:215 +#: usr/local/www/firewall_nat_edit.php:192 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:489 usr/local/www/status_graph.php:206 +#: usr/local/www/firewall_virtual_ip_edit.php:380 +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:446 +#: usr/local/www/services_dyndns.php:85 +#: usr/local/www/system_gateways_edit.php:491 +#: usr/local/www/firewall_virtual_ip.php:226 +#: usr/local/www/firewall_nat_edit.php:490 usr/local/www/system_routes.php:148 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/firewall_nat_npt_edit.php:169 +#: usr/local/www/firewall_nat_1to1_edit.php:286 +#: usr/local/www/firewall_rules_edit.php:823 +#: usr/local/www/firewall_virtual_ip.php:233 +#: usr/local/www/firewall_virtual_ip_edit.php:384 +msgid "Interface" +msgstr "Interface" + +#: usr/local/www/firewall_virtual_ip_edit.php:452 +#: usr/local/www/firewall_virtual_ip_edit.php:440 +#: usr/local/www/firewall_virtual_ip_edit.php:385 +#: usr/local/www/firewall_virtual_ip_edit.php:377 +#: usr/local/www/firewall_virtual_ip_edit.php:397 +#: usr/local/www/firewall_virtual_ip_edit.php:402 +msgid "IP Address(es)" +msgstr "Endereço(s) IP" + +#: usr/local/www/firewall_virtual_ip_edit.php:456 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_out_edit.php:472 +#: usr/local/www/firewall_nat_out_edit.php:506 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules_edit.php:958 +#: usr/local/www/firewall_nat_1to1_edit.php:345 +#: usr/local/www/firewall_nat_1to1_edit.php:400 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/firewall_nat_out_edit.php:519 +#: usr/local/www/firewall_rules_edit.php:900 +#: usr/local/www/firewall_rules_edit.php:993 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_virtual_ip_edit.php:444 +#: usr/local/www/firewall_nat_1to1_edit.php:343 +#: usr/local/www/firewall_nat_1to1_edit.php:398 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_virtual_ip_edit.php:389 +#: usr/local/www/firewall_rules_edit.php:903 +#: usr/local/www/firewall_rules_edit.php:1002 +#: usr/local/www/firewall_nat_edit.php:546 +#: usr/local/www/firewall_nat_edit.php:635 +#: usr/local/www/firewall_virtual_ip_edit.php:381 +#: usr/local/www/firewall_nat_out_edit.php:489 +#: usr/local/www/firewall_nat_out_edit.php:523 +#: usr/local/www/firewall_rules_edit.php:915 +#: usr/local/www/firewall_rules_edit.php:1015 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_virtual_ip_edit.php:401 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_nat_out_edit.php:535 +#: usr/local/www/firewall_rules_edit.php:914 +#: usr/local/www/firewall_rules_edit.php:1014 +#: usr/local/www/firewall_nat_edit.php:559 +#: usr/local/www/firewall_nat_edit.php:648 +#: usr/local/www/firewall_nat_1to1_edit.php:344 +#: usr/local/www/firewall_nat_1to1_edit.php:399 +#: usr/local/www/firewall_nat_out_edit.php:536 +#: usr/local/www/firewall_rules_edit.php:962 +#: usr/local/www/firewall_rules_edit.php:1062 +#: usr/local/www/firewall_virtual_ip_edit.php:406 +msgid "Type:" +msgstr "Tipo:" + +#: usr/local/www/firewall_virtual_ip_edit.php:459 +#: usr/local/www/firewall_virtual_ip_edit.php:447 +#: usr/local/www/firewall_virtual_ip_edit.php:392 +#: usr/local/www/firewall_virtual_ip_edit.php:384 +#: usr/local/www/firewall_virtual_ip_edit.php:404 +#: usr/local/www/firewall_virtual_ip_edit.php:409 +msgid "Single address" +msgstr "Endereço único" + +#: usr/local/www/firewall_virtual_ip_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:452 +#: usr/local/www/firewall_aliases_edit.php:624 +#: usr/local/www/firewall_nat_1to1_edit.php:345 +#: usr/local/www/firewall_nat_1to1_edit.php:400 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_nat_out_edit.php:476 +#: usr/local/www/firewall_nat_out_edit.php:511 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/system_routes.php:126 usr/local/www/vpn_ipsec_mobile.php:408 +#: usr/local/www/services_igmpproxy_edit.php:223 +#: usr/local/www/vpn_ipsec_phase2.php:428 +#: usr/local/www/vpn_ipsec_phase2.php:470 +#: usr/local/www/services_unbound_acls.php:236 +#: usr/local/www/firewall_nat_1to1_edit.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:407 +#: usr/local/www/firewall_nat_out_edit.php:489 +#: usr/local/www/firewall_nat_out_edit.php:524 +#: usr/local/www/firewall_rules_edit.php:907 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/services_igmpproxy_edit.php:225 +#: usr/local/www/firewall_aliases_edit.php:455 +#: usr/local/www/firewall_aliases_edit.php:629 +#: usr/local/www/vpn_ipsec_phase2.php:454 +#: usr/local/www/vpn_ipsec_phase2.php:496 +#: usr/local/www/firewall_nat_edit.php:559 +#: usr/local/www/firewall_nat_edit.php:648 +#: usr/local/www/firewall_virtual_ip_edit.php:449 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/vpn_ipsec_mobile.php:433 +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/firewall_aliases_edit.php:632 +#: usr/local/www/vpn_ipsec_phase2.php:520 +#: usr/local/www/vpn_ipsec_phase2.php:556 +#: usr/local/www/vpn_ipsec_phase2.php:598 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_virtual_ip_edit.php:394 +#: usr/local/www/firewall_rules_edit.php:916 +#: usr/local/www/firewall_rules_edit.php:1015 +#: usr/local/www/firewall_nat_edit.php:553 +#: usr/local/www/firewall_nat_edit.php:642 +#: usr/local/www/firewall_virtual_ip_edit.php:386 +#: usr/local/www/system_routes.php:130 +#: usr/local/www/firewall_nat_out_edit.php:493 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/vpn_ipsec_phase2.php:542 +#: usr/local/www/vpn_ipsec_phase2.php:577 +#: usr/local/www/vpn_ipsec_phase2.php:619 +#: usr/local/www/firewall_rules_edit.php:928 +#: usr/local/www/firewall_rules_edit.php:1028 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_virtual_ip_edit.php:406 +#: usr/local/www/firewall_aliases_edit.php:479 +#: usr/local/www/firewall_aliases_edit.php:663 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:540 +#: usr/local/www/firewall_rules_edit.php:927 +#: usr/local/www/firewall_rules_edit.php:1027 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 usr/local/www/system_routes.php:146 +#: usr/local/www/firewall_nat_1to1_edit.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:406 +#: usr/local/www/firewall_nat_out_edit.php:541 +#: usr/local/www/firewall_rules_edit.php:975 +#: usr/local/www/firewall_rules_edit.php:1075 +#: usr/local/www/firewall_virtual_ip_edit.php:411 +#: usr/local/www/firewall_aliases_edit.php:478 +#: usr/local/www/firewall_aliases_edit.php:662 +msgid "Network" +msgstr "Rede" + +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_nat_1to1_edit.php:367 +#: usr/local/www/firewall_nat_1to1_edit.php:422 +#: usr/local/www/firewall_nat_edit.php:575 +#: usr/local/www/firewall_nat_edit.php:685 +#: usr/local/www/firewall_nat_out_edit.php:479 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:542 +#: usr/local/www/firewall_rules_edit.php:895 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/vpn_ipsec_phase2.php:440 +#: usr/local/www/firewall_nat_npt_edit.php:216 +#: usr/local/www/firewall_nat_npt_edit.php:244 +#: usr/local/www/firewall_nat_1to1_edit.php:374 +#: usr/local/www/firewall_nat_1to1_edit.php:429 +#: usr/local/www/firewall_nat_npt_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:249 +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/firewall_nat_out_edit.php:555 +#: usr/local/www/firewall_rules_edit.php:930 +#: usr/local/www/firewall_rules_edit.php:1023 +#: usr/local/www/vpn_ipsec_phase2.php:466 +#: usr/local/www/firewall_nat_edit.php:582 +#: usr/local/www/firewall_nat_edit.php:692 +#: usr/local/www/firewall_virtual_ip_edit.php:455 +#: usr/local/www/firewall_nat_1to1_edit.php:372 +#: usr/local/www/firewall_nat_1to1_edit.php:427 +#: usr/local/www/firewall_nat_npt_edit.php:220 +#: usr/local/www/firewall_nat_npt_edit.php:248 +#: usr/local/www/vpn_ipsec_phase2.php:532 +#: usr/local/www/vpn_ipsec_phase2.php:568 +#: usr/local/www/firewall_nat_edit.php:581 +#: usr/local/www/firewall_nat_edit.php:691 +#: usr/local/www/firewall_virtual_ip_edit.php:400 +#: usr/local/www/firewall_rules_edit.php:939 +#: usr/local/www/firewall_rules_edit.php:1038 +#: usr/local/www/firewall_nat_edit.php:576 +#: usr/local/www/firewall_nat_edit.php:686 +#: usr/local/www/firewall_virtual_ip_edit.php:392 +#: usr/local/www/firewall_nat_out_edit.php:496 +#: usr/local/www/firewall_nat_out_edit.php:532 +#: usr/local/www/firewall_nat_out_edit.php:559 +#: usr/local/www/vpn_ipsec_phase2.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:589 +#: usr/local/www/firewall_rules_edit.php:951 +#: usr/local/www/firewall_rules_edit.php:1051 +#: usr/local/www/firewall_nat_edit.php:588 +#: usr/local/www/firewall_nat_edit.php:698 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_nat_out_edit.php:508 +#: usr/local/www/firewall_nat_out_edit.php:544 +#: usr/local/www/firewall_nat_out_edit.php:571 +#: usr/local/www/firewall_rules_edit.php:950 +#: usr/local/www/firewall_rules_edit.php:1050 +#: usr/local/www/firewall_nat_edit.php:589 +#: usr/local/www/firewall_nat_edit.php:699 +#: usr/local/www/firewall_nat_npt_edit.php:219 +#: usr/local/www/firewall_nat_npt_edit.php:247 +#: usr/local/www/firewall_nat_1to1_edit.php:373 +#: usr/local/www/firewall_nat_1to1_edit.php:428 +#: usr/local/www/firewall_nat_out_edit.php:510 +#: usr/local/www/firewall_nat_out_edit.php:545 +#: usr/local/www/firewall_rules_edit.php:998 +#: usr/local/www/firewall_rules_edit.php:1098 +#: usr/local/www/firewall_virtual_ip_edit.php:417 +msgid "Address:" +msgstr "Endereço:" + +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:404 +#: usr/local/www/firewall_virtual_ip_edit.php:424 +#: usr/local/www/firewall_virtual_ip_edit.php:429 +msgid "Expansion:" +msgstr "Expansão:" + +#: usr/local/www/firewall_virtual_ip_edit.php:499 +#: usr/local/www/firewall_virtual_ip_edit.php:487 +#: usr/local/www/firewall_virtual_ip_edit.php:432 +#: usr/local/www/firewall_virtual_ip_edit.php:424 +#: usr/local/www/firewall_virtual_ip_edit.php:444 +#: usr/local/www/firewall_virtual_ip_edit.php:449 +msgid "Virtual IP Password" +msgstr "Senha de IP Virtual" + +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/firewall_virtual_ip_edit.php:489 +#: usr/local/www/firewall_virtual_ip_edit.php:434 +#: usr/local/www/firewall_virtual_ip_edit.php:426 +#: usr/local/www/firewall_virtual_ip_edit.php:446 +#: usr/local/www/firewall_virtual_ip_edit.php:451 +msgid "Enter the VHID group password." +msgstr "Informe a senha de grupo VHID." + +#: usr/local/www/firewall_virtual_ip_edit.php:505 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:438 +#: usr/local/www/firewall_virtual_ip_edit.php:430 +#: usr/local/www/firewall_virtual_ip_edit.php:450 +#: usr/local/www/firewall_virtual_ip_edit.php:455 +msgid "VHID Group" +msgstr "Grupo VHID" + +#: usr/local/www/firewall_virtual_ip_edit.php:513 +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/firewall_virtual_ip_edit.php:446 +#: usr/local/www/firewall_virtual_ip_edit.php:438 +#: usr/local/www/firewall_virtual_ip_edit.php:458 +#: usr/local/www/firewall_virtual_ip_edit.php:463 +msgid "Enter the VHID group that the machines will share" +msgstr "Informe o grupo VHID que a máquina irá compartilhar" + +#: usr/local/www/firewall_virtual_ip_edit.php:517 +#: usr/local/www/firewall_virtual_ip_edit.php:505 +#: usr/local/www/firewall_virtual_ip_edit.php:450 +#: usr/local/www/firewall_virtual_ip_edit.php:442 +#: usr/local/www/firewall_virtual_ip_edit.php:462 +#: usr/local/www/firewall_virtual_ip_edit.php:467 +msgid "Advertising Frequency" +msgstr "Frequência de anúncio" + +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/firewall_virtual_ip_edit.php:522 +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_virtual_ip_edit.php:459 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/firewall_virtual_ip_edit.php:484 +msgid "The frequency that this machine will advertise. 0 means usually master. Otherwise the lowest combination of both values in the cluster determines the master." +msgstr "A frequência em que essa máquina irá anunciar. 0 normalmente significa master. Caso contrário, a menor combinação dos dois valores no cluster determinará o master." + +#: usr/local/www/firewall_virtual_ip_edit.php:557 +#: usr/local/www/diag_logs_settings.php:326 +#: usr/local/www/diag_packet_capture.php:195 +#: usr/local/www/services_dyndns.php:160 usr/local/www/services_wol.php:210 +#: usr/local/www/interfaces_bridge.php:144 +#: usr/local/www/interfaces_bridge_edit.php:446 +#: usr/local/www/interfaces_bridge_edit.php:490 +#: usr/local/www/interfaces_bridge_edit.php:534 +#: usr/local/www/interfaces_gif.php:132 usr/local/www/interfaces_gre.php:133 +#: usr/local/www/interfaces_groups.php:148 +#: usr/local/www/firewall_aliases.php:229 +#: usr/local/www/firewall_nat_1to1.php:179 +#: usr/local/www/firewall_nat_out.php:459 +#: usr/local/www/firewall_schedule.php:240 usr/local/www/diag_backup.php:655 +#: usr/local/www/firewall_virtual_ip.php:241 usr/local/www/interfaces.php:1845 +#: usr/local/www/interfaces_vlan.php:134 usr/local/www/system_routes.php:188 +#: usr/local/www/interfaces_lagg.php:138 +#: usr/local/www/interfaces_ppps_edit.php:620 +#: usr/local/www/interfaces_qinq.php:151 +#: usr/local/www/load_balancer_virtual_server_edit.php:289 +#: usr/local/www/services_captiveportal.php:929 +#: usr/local/www/services_captiveportal_filemanager.php:215 +#: usr/local/www/diag_ipsec.php:163 usr/local/www/diag_ipsec_sad.php:134 +#: usr/local/www/services_captiveportal_ip.php:170 +#: usr/local/www/services_captiveportal_mac.php:190 +#: usr/local/www/diag_ipsec_spd.php:143 usr/local/www/services_dhcp.php:715 +#: usr/local/www/services_dhcp.php:876 usr/local/www/services_dnsmasq.php:214 +#: usr/local/www/services_captiveportal_hostname.php:171 +#: usr/local/www/services_captiveportal_vouchers.php:603 +#: usr/local/www/diag_routes.php:72 +#: usr/local/www/status_rrd_graph_settings.php:236 +#: usr/local/www/services_dyndns_edit.php:189 +#: usr/local/www/services_dyndns_edit.php:245 +#: usr/local/www/services_igmpproxy.php:161 +#: usr/local/www/services_rfc2136_edit.php:209 +#: usr/local/www/system_advanced_admin.php:289 +#: usr/local/www/system_gateway_groups.php:195 usr/local/www/vpn_l2tp.php:451 +#: usr/local/www/services_dhcpv6.php:789 +#: usr/local/www/diag_logs_settings.php:333 +#: usr/local/www/services_captiveportal_vouchers.php:610 +#: usr/local/www/services_dyndns_edit.php:272 +#: usr/local/www/services_dyndns_edit.php:376 +#: usr/local/www/firewall_nat_out.php:470 usr/local/www/system_routes.php:199 +#: usr/local/www/status_rrd_graph_settings.php:237 +#: usr/local/www/diag_ipsec.php:221 usr/local/www/diag_backup.php:736 +#: usr/local/www/services_unbound.php:253 +#: usr/local/www/services_captiveportal.php:974 +#: usr/local/www/services_dyndns.php:181 usr/local/www/services_dhcp.php:728 +#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:914 +#: usr/local/www/load_balancer_virtual_server_edit.php:278 +#: usr/local/www/interfaces_bridge_edit.php:455 +#: usr/local/www/interfaces_bridge_edit.php:499 +#: usr/local/www/interfaces_bridge_edit.php:543 +#: usr/local/www/firewall_aliases.php:232 +#: usr/local/www/diag_packet_capture.php:215 usr/local/www/interfaces.php:2023 +#: usr/local/www/firewall_virtual_ip_edit.php:545 +#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:884 +#: usr/local/www/diag_logs_settings.php:353 +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:624 +#: usr/local/www/firewall_nat_out.php:471 +#: usr/local/www/services_captiveportal_ip.php:168 +#: usr/local/www/interfaces_groups.php:149 usr/local/www/diag_ipsec.php:222 +#: usr/local/www/interfaces_qinq.php:152 usr/local/www/diag_ipsec_sad.php:135 +#: usr/local/www/services_captiveportal_mac.php:188 +#: usr/local/www/interfaces_bridge.php:145 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces_lagg.php:139 +#: usr/local/www/services_captiveportal_hostname.php:169 +#: usr/local/www/interfaces_gre.php:134 usr/local/www/diag_routes.php:73 +#: usr/local/www/system_gateway_groups.php:196 +#: usr/local/www/services_captiveportal.php:970 +#: usr/local/www/services_captiveportal_filemanager.php:212 +#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:932 +#: usr/local/www/services_dhcp.php:1118 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +#: usr/local/www/interfaces_bridge_edit.php:456 +#: usr/local/www/interfaces_bridge_edit.php:500 +#: usr/local/www/interfaces_bridge_edit.php:544 +#: usr/local/www/firewall_aliases.php:284 +#: usr/local/www/diag_packet_capture.php:262 +#: usr/local/www/interfaces_vlan.php:135 usr/local/www/interfaces.php:2011 +#: usr/local/www/vpn_l2tp.php:452 +#: usr/local/www/firewall_virtual_ip_edit.php:490 +#: usr/local/www/interfaces_gif.php:133 usr/local/www/diag_ipsec_spd.php:144 +#: usr/local/www/firewall_virtual_ip.php:247 +#: usr/local/www/services_dhcpv6.php:663 usr/local/www/services_dhcpv6.php:815 +#: usr/local/www/vpn_l2tp.php:455 usr/local/www/services_dyndns_edit.php:276 +#: usr/local/www/services_dyndns_edit.php:380 +#: usr/local/www/interfaces_qinq.php:155 +#: usr/local/www/interfaces_ppps_edit.php:627 +#: usr/local/www/firewall_virtual_ip.php:267 +#: usr/local/www/interfaces_lagg.php:143 usr/local/www/interfaces_vlan.php:141 +#: usr/local/www/firewall_virtual_ip_edit.php:482 +#: usr/local/www/diag_ipsec.php:223 usr/local/www/interfaces_bridge.php:151 +#: usr/local/www/services_captiveportal_vouchers.php:633 +#: usr/local/www/system_routes.php:203 usr/local/www/services_dhcp.php:921 +#: usr/local/www/services_dhcp.php:946 usr/local/www/services_dhcp.php:1131 +#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:832 +#: usr/local/www/firewall_nat_out.php:468 +#: usr/local/www/services_captiveportal.php:972 +#: usr/local/www/diag_backup.php:741 +#: usr/local/www/interfaces_bridge_edit.php:457 +#: usr/local/www/interfaces_bridge_edit.php:501 +#: usr/local/www/interfaces_bridge_edit.php:545 +#: usr/local/www/services_dnsmasq.php:240 +#: usr/local/www/services_captiveportal_mac.php:198 +#: usr/local/www/interfaces_gre.php:138 usr/local/www/interfaces_gif.php:137 +#: usr/local/www/interfaces.php:2038 +#: usr/local/www/services_dyndns_edit.php:278 +#: usr/local/www/services_dyndns_edit.php:388 +#: usr/local/www/firewall_aliases.php:287 +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/diag_packet_capture.php:279 +#: usr/local/www/services_dhcp.php:941 usr/local/www/services_dhcp.php:966 +#: usr/local/www/services_dhcp.php:1151 usr/local/www/firewall_nat_out.php:475 +#: usr/local/www/services_captiveportal.php:988 +#: usr/local/www/services_dnsmasq.php:253 +#: usr/local/www/services_dyndns.php:177 +#: usr/local/www/system_gateway_groups.php:205 +#: usr/local/www/interfaces.php:2084 +#: usr/local/www/interfaces_ppps_edit.php:625 +#: usr/local/www/firewall_virtual_ip.php:290 +#: usr/local/www/firewall_aliases.php:288 usr/local/www/system_routes.php:219 +#: usr/local/www/firewall_nat_out.php:474 +#: usr/local/www/interfaces_bridge_edit.php:461 +#: usr/local/www/interfaces_bridge_edit.php:505 +#: usr/local/www/interfaces_bridge_edit.php:549 +#: usr/local/www/services_dnsmasq.php:317 usr/local/www/interfaces.php:2073 +#: usr/local/www/services_captiveportal_vouchers.php:638 +#: usr/local/www/diag_logs_settings.php:384 +#: usr/local/www/services_dyndns_edit.php:279 +#: usr/local/www/services_dyndns_edit.php:389 +#: usr/local/www/firewall_virtual_ip.php:298 +#: usr/local/www/firewall_virtual_ip_edit.php:506 +#: usr/local/www/services_dhcp.php:953 usr/local/www/services_dhcp.php:978 +#: usr/local/www/services_dhcp.php:1163 usr/local/www/diag_backup.php:742 +#: usr/local/www/services_rfc2136_edit.php:222 +#: usr/local/www/services_dyndns.php:188 usr/local/www/interfaces.php:2109 +msgid "Note:" +msgstr "Nota:" + +#: usr/local/www/firewall_virtual_ip_edit.php:559 +#: usr/local/www/firewall_virtual_ip_edit.php:547 +#: usr/local/www/firewall_virtual_ip_edit.php:492 +#: usr/local/www/firewall_virtual_ip_edit.php:484 +#: usr/local/www/firewall_virtual_ip_edit.php:503 +#: usr/local/www/firewall_virtual_ip_edit.php:508 +msgid "Proxy ARP and Other type Virtual IPs cannot be bound to by anything running on the firewall, such as IPsec, OpenVPN, etc. Use a CARP or IP Alias type address for these cases." +msgstr "IPs virtuais do tipo Proxy ARP e Outros não podem ser vinculados a nada rodando no firewall, como IPsec, OpenVPN, etc. Utilize endereços do tipo CARP ou Alis de IP para estes casos." + +#: usr/local/www/firewall_virtual_ip_edit.php:560 +#: usr/local/www/firewall_virtual_ip_edit.php:548 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:485 +#: usr/local/www/firewall_virtual_ip_edit.php:504 +#: usr/local/www/firewall_virtual_ip_edit.php:509 +msgid "For more information on CARP and the above values, visit the OpenBSD " +msgstr "Para mais informações sobre CARP e os valores acima, visite o OpenBSD " + +#: usr/local/www/firewall_virtual_ip_edit.php:560 +#: usr/local/www/firewall_virtual_ip_edit.php:548 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:485 +#: usr/local/www/firewall_virtual_ip_edit.php:504 +#: usr/local/www/firewall_virtual_ip_edit.php:509 +msgid "CARP FAQ" +msgstr "FAQ do CARP" + +#: usr/local/www/load_balancer_relay_action.php:74 +msgid "This entry cannot be deleted because it is still referenced by at least one relay protocol." +msgstr "Essa entrada não pode ser apagada porque ela ainda é referenciada por pelo menos um protocolo relay." + +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +msgid "Relay Action" +msgstr "Ação Relay" + +#: usr/local/www/load_balancer_relay_action.php:118 +#: usr/local/www/load_balancer_relay_action.php:116 +msgid "The load balancer configuration has been changed.
    You must apply the changes in order for them to take effect." +msgstr "A configuração do balanceador de carga foi modificada.
    Você deve aplicar as mudanças para que elas tenham efeito." + +#: usr/local/www/load_balancer_relay_action.php:128 +#: usr/local/www/load_balancer_relay_action.php:126 +msgid "Relay Actions" +msgstr "Ações Relay" + +#: usr/local/www/load_balancer_relay_action.php:129 +#: usr/local/www/load_balancer_relay_action.php:127 +msgid "Relay Protocols" +msgstr "Protocolos Relay" + +#: usr/local/www/load_balancer_relay_action.php:142 +#: usr/local/www/interfaces_qinq_edit.php:318 +#: usr/local/www/load_balancer_relay_action_edit.php:515 +#: usr/local/www/load_balancer_relay_action_edit.php:535 +#: usr/local/www/load_balancer_relay_protocol.php:136 +#: usr/local/www/load_balancer_relay_action_edit.php:514 +#: usr/local/www/load_balancer_relay_action_edit.php:534 +#: usr/local/www/interfaces_qinq_edit.php:319 +#: usr/local/www/load_balancer_relay_action_edit.php:512 +#: usr/local/www/load_balancer_relay_action_edit.php:532 +#: usr/local/www/load_balancer_relay_protocol.php:134 +#: usr/local/www/load_balancer_relay_action.php:140 +#: usr/local/www/interfaces_qinq_edit.php:322 +msgid "Options" +msgstr "Opções" + +#: usr/local/www/diag_defaults.php:51 +msgid "The system has been reset to factory defaults and is now rebooting. This may take one minute." +msgstr "O sistema foi restaurado para o padrão de fabrica e está sendo reiniciado agora. Isto pode levar uns minutos." + +#: usr/local/www/diag_defaults.php:58 usr/local/www/diag_defaults.php:52 +msgid "Factory defaults" +msgstr "Padrão de fábrica" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70 +msgid "If you click" +msgstr "Se você clicar" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:81 +#: usr/local/www/crash_reporter.php:76 usr/local/www/halt.php:69 +#: usr/local/www/pkg.php:342 usr/local/www/system_firmware.php:229 +#: usr/local/www/reboot.php:61 usr/local/www/reboot.php:72 +#: usr/local/www/pkg.php:424 usr/local/www/reboot.php:53 +#: usr/local/www/reboot.php:64 usr/local/www/halt.php:60 +#: usr/local/www/system_firmware.php:236 usr/local/www/system_firmware.php:239 +#: usr/local/www/diag_defaults.php:60 usr/local/www/diag_defaults.php:70 +#: usr/local/www/diag_defaults.php:82 +msgid "Yes" +msgstr "Sim" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70 +msgid "the firewall will:" +msgstr "o firewall irá:" + +#: usr/local/www/diag_defaults.php:70 usr/local/www/diag_defaults.php:72 +msgid "Reset to factory defaults" +msgstr "Restaurar o padrão de fábrica" + +#: usr/local/www/diag_defaults.php:71 usr/local/www/diag_defaults.php:73 +msgid "LAN IP address will be reset to 192.168.1.1" +msgstr "Endereço IP da LAN será redefinido para 192.168.1.1" + +#: usr/local/www/diag_defaults.php:72 usr/local/www/diag_defaults.php:74 +msgid "System will be configured as a DHCP server on the default LAN interface" +msgstr "O sistema será configurado como um servidor DHCP na interface LAN padrão" + +#: usr/local/www/diag_defaults.php:73 usr/local/www/diag_defaults.php:75 +msgid "Reboot after changes are installed" +msgstr "Reiniciar após instalar alterações" + +#: usr/local/www/diag_defaults.php:74 usr/local/www/diag_defaults.php:76 +msgid "WAN interface will be set to obtain an address automatically from a DHCP server" +msgstr "Interface WAN será definida para obter um endereço automaticamente de um servidor DHCP" + +#: usr/local/www/diag_defaults.php:75 usr/local/www/diag_defaults.php:77 +msgid "webConfigurator admin username will be reset to 'admin'" +msgstr "Usuário admin do webConfigurator será redefinido para 'admin'" + +#: usr/local/www/diag_defaults.php:76 usr/local/www/diag_defaults.php:78 +msgid "webConfigurator admin password will be reset to" +msgstr "Senha para webConfigurator admin será redefinida para" + +#: usr/local/www/diag_defaults.php:79 usr/local/www/diag_defaults.php:80 +msgid "Are you sure you want to proceed?" +msgstr "Você tem certeza que deseja prosseguir?" + +#: usr/local/www/diag_defaults.php:82 usr/local/www/crash_reporter.php:77 +#: usr/local/www/halt.php:70 usr/local/www/pkg.php:340 +#: usr/local/www/system_firmware.php:230 usr/local/www/reboot.php:62 +#: usr/local/www/pkg.php:422 usr/local/www/reboot.php:43 +#: usr/local/www/reboot.php:65 usr/local/www/halt.php:49 +#: usr/local/www/system_firmware.php:237 usr/local/www/system_firmware.php:240 +#: usr/local/www/diag_defaults.php:47 usr/local/www/diag_defaults.php:83 +msgid "No" +msgstr "Não" + +#: usr/local/www/diag_logs.php:65 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_routing.php:54 +#: usr/local/www/diag_logs_settings.php:136 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_settings.php:162 +msgid "System logs" +msgstr "Registros do sistema" + +#: usr/local/www/diag_logs.php:79 usr/local/www/diag_logs_auth.php:67 +#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_dhcp.php:72 +#: usr/local/www/diag_logs_filter.php:103 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_ipsec.php:104 usr/local/www/diag_logs_ntpd.php:67 +#: usr/local/www/diag_logs_openvpn.php:71 +#: usr/local/www/diag_logs_settings.php:212 +#: usr/local/www/diag_logs_vpn.php:128 usr/local/www/interfaces.php:1032 +#: usr/local/www/diag_logs_filter_summary.php:186 +#: usr/local/www/diag_logs_ppp.php:72 usr/local/www/diag_logs_relayd.php:68 +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/diag_logs_wireless.php:69 +#: usr/local/www/diag_logs_routing.php:67 +#: usr/local/www/diag_logs_settings.php:217 +#: usr/local/www/diag_logs_resolver.php:80 +#: usr/local/www/diag_logs_gateways.php:80 +#: usr/local/www/services_dhcp_edit.php:193 usr/local/www/interfaces.php:1118 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_routing.php:68 +#: usr/local/www/diag_logs_settings.php:224 +#: usr/local/www/diag_logs_relayd.php:69 usr/local/www/diag_logs_auth.php:68 +#: usr/local/www/diag_logs_ipsec.php:105 +#: usr/local/www/diag_logs_resolver.php:81 usr/local/www/diag_logs_ntpd.php:68 +#: usr/local/www/diag_logs_dhcp.php:73 usr/local/www/diag_logs_wireless.php:70 +#: usr/local/www/diag_logs_filter_summary.php:187 +#: usr/local/www/diag_logs_gateways.php:81 +#: usr/local/www/diag_logs_openvpn.php:72 usr/local/www/interfaces.php:1106 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_filter.php:93 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/diag_logs_filter_dynamic.php:99 +#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/interfaces.php:1120 +#: usr/local/www/diag_logs_filter.php:123 usr/local/www/interfaces.php:1162 +#: usr/local/www/interfaces.php:1157 usr/local/www/diag_logs_settings.php:243 +#: usr/local/www/interfaces.php:1170 +msgid "DHCP" +msgstr "DHCP" + +#: usr/local/www/diag_logs.php:80 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_auth.php:68 usr/local/www/diag_logs_dhcp.php:73 +#: usr/local/www/diag_logs_filter.php:104 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_ipsec.php:105 usr/local/www/diag_logs_ntpd.php:68 +#: usr/local/www/diag_logs_openvpn.php:72 +#: usr/local/www/diag_logs_settings.php:213 +#: usr/local/www/diag_logs_vpn.php:129 +#: usr/local/www/diag_logs_filter_summary.php:187 +#: usr/local/www/diag_logs_ppp.php:73 usr/local/www/diag_logs_relayd.php:69 +#: usr/local/www/diag_logs_wireless.php:70 +#: usr/local/www/diag_logs_routing.php:68 +#: usr/local/www/diag_logs_settings.php:218 +#: usr/local/www/diag_logs_resolver.php:81 +#: usr/local/www/diag_logs_gateways.php:81 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_routing.php:69 +#: usr/local/www/diag_logs_settings.php:225 +#: usr/local/www/diag_logs_relayd.php:70 usr/local/www/diag_logs_auth.php:69 +#: usr/local/www/diag_logs_ipsec.php:106 +#: usr/local/www/diag_logs_resolver.php:82 usr/local/www/diag_logs_ntpd.php:69 +#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_wireless.php:71 +#: usr/local/www/diag_logs_filter_summary.php:188 +#: usr/local/www/diag_logs_gateways.php:82 +#: usr/local/www/diag_logs_openvpn.php:73 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_filter.php:94 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_filter.php:124 +#: usr/local/www/diag_logs_settings.php:244 +msgid "Portal Auth" +msgstr "Portal Autorização" + +#: usr/local/www/diag_logs.php:81 usr/local/www/diag_logs_auth.php:69 +#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_filter.php:105 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_ipsec.php:106 usr/local/www/diag_logs_ntpd.php:69 +#: usr/local/www/diag_logs_openvpn.php:73 +#: usr/local/www/diag_logs_settings.php:214 +#: usr/local/www/diag_logs_vpn.php:130 +#: usr/local/www/diag_logs_filter_summary.php:188 +#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:74 +#: usr/local/www/diag_logs_relayd.php:70 +#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/diag_ipsec.php:48 +#: usr/local/www/diag_ipsec_sad.php:49 usr/local/www/diag_ipsec_spd.php:49 +#: usr/local/www/fbegin.inc:147 usr/local/www/fbegin.inc:164 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 +#: usr/local/www/diag_logs_wireless.php:71 +#: usr/local/www/diag_logs_routing.php:69 +#: usr/local/www/diag_logs_settings.php:219 usr/local/www/fbegin.inc:181 +#: usr/local/www/diag_logs_resolver.php:82 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/diag_logs_gateways.php:82 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_routing.php:70 +#: usr/local/www/diag_logs_settings.php:226 usr/local/www/fbegin.inc:172 +#: usr/local/www/fbegin.inc:189 usr/local/www/diag_logs_relayd.php:71 +#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:70 +#: usr/local/www/diag_logs_ipsec.php:107 +#: usr/local/www/diag_logs_resolver.php:83 usr/local/www/diag_logs_ntpd.php:70 +#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_wireless.php:72 +#: usr/local/www/diag_logs_filter_summary.php:189 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/diag_logs_gateways.php:83 +#: usr/local/www/diag_logs_openvpn.php:74 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_filter.php:95 usr/local/www/vpn_ipsec.php:125 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_ppp.php:72 usr/local/www/fbegin.inc:163 +#: usr/local/www/fbegin.inc:180 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_filter.php:125 +#: usr/local/www/diag_logs_settings.php:245 +msgid "IPsec" +msgstr "IPsec" + +#: usr/local/www/diag_logs.php:82 usr/local/www/diag_logs_auth.php:70 +#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_filter.php:106 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_ipsec.php:107 usr/local/www/diag_logs_ntpd.php:70 +#: usr/local/www/diag_logs_openvpn.php:74 +#: usr/local/www/diag_logs_settings.php:215 +#: usr/local/www/diag_logs_vpn.php:131 usr/local/www/interfaces.php:1032 +#: usr/local/www/diag_logs_filter_summary.php:189 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_ppp.php:75 +#: usr/local/www/diag_logs_relayd.php:71 +#: usr/local/www/status_interfaces.php:154 +#: usr/local/www/diag_logs_wireless.php:72 +#: usr/local/www/diag_logs_routing.php:70 +#: usr/local/www/diag_logs_settings.php:220 +#: usr/local/www/status_interfaces.php:172 +#: usr/local/www/diag_logs_resolver.php:83 +#: usr/local/www/diag_logs_gateways.php:83 usr/local/www/interfaces.php:1118 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_routing.php:71 +#: usr/local/www/diag_logs_settings.php:227 +#: usr/local/www/diag_logs_relayd.php:72 +#: usr/local/www/status_interfaces.php:175 usr/local/www/diag_logs_auth.php:71 +#: usr/local/www/diag_logs_ipsec.php:108 +#: usr/local/www/diag_logs_resolver.php:84 usr/local/www/diag_logs_ntpd.php:71 +#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_wireless.php:73 +#: usr/local/www/diag_logs_filter_summary.php:190 +#: usr/local/www/diag_logs_gateways.php:84 +#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/interfaces.php:1106 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_filter.php:96 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_ppp.php:57 usr/local/www/diag_logs_ppp.php:73 +#: usr/local/www/interfaces.php:1120 usr/local/www/diag_logs_filter.php:126 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157 +#: usr/local/www/diag_logs_settings.php:246 usr/local/www/interfaces.php:1170 +msgid "PPP" +msgstr "PPP" + +#: usr/local/www/diag_logs.php:83 usr/local/www/diag_logs_auth.php:71 +#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_filter.php:107 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_ipsec.php:108 usr/local/www/diag_logs_ntpd.php:71 +#: usr/local/www/diag_logs_openvpn.php:75 +#: usr/local/www/diag_logs_settings.php:216 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_vpn.php:132 +#: usr/local/www/diag_logs_filter_summary.php:190 +#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:76 +#: usr/local/www/diag_logs_relayd.php:72 +#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/vpn_pppoe.php:86 +#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users_edit.php:135 usr/local/www/fbegin.inc:351 +#: usr/local/www/status_rrd_graph_settings.php:151 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/diag_logs_wireless.php:73 +#: usr/local/www/diag_logs_routing.php:71 +#: usr/local/www/diag_logs_settings.php:221 usr/local/www/fbegin.inc:369 +#: usr/local/www/status_rrd_graph_settings.php:152 +#: usr/local/www/diag_logs_resolver.php:84 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/diag_logs_gateways.php:84 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_routing.php:72 +#: usr/local/www/diag_logs_settings.php:228 usr/local/www/fbegin.inc:315 +#: usr/local/www/diag_logs_relayd.php:73 +#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:72 +#: usr/local/www/diag_logs_ipsec.php:109 +#: usr/local/www/diag_logs_resolver.php:85 usr/local/www/diag_logs_ntpd.php:72 +#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_wireless.php:74 +#: usr/local/www/diag_logs_filter_summary.php:191 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/diag_logs_gateways.php:85 +#: usr/local/www/diag_logs_openvpn.php:76 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_filter.php:97 usr/local/www/vpn_pppoe.php:87 +#: usr/local/www/vpn_ipsec.php:125 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_ppp.php:74 usr/local/www/vpn_pptp.php:196 +#: usr/local/www/fbegin.inc:307 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_filter.php:127 +#: usr/local/www/diag_logs_settings.php:247 +msgid "VPN" +msgstr "VPN" + +#: usr/local/www/diag_logs.php:85 usr/local/www/diag_logs_auth.php:73 +#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_ipsec.php:110 usr/local/www/diag_logs_ntpd.php:73 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_openvpn.php:77 +#: usr/local/www/diag_logs_settings.php:218 +#: usr/local/www/diag_logs_vpn.php:134 +#: usr/local/www/diag_packet_capture.php:130 usr/local/www/diag_backup.php:112 +#: usr/local/www/license.php:213 +#: usr/local/www/diag_logs_filter_summary.php:192 +#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/diag_logs_relayd.php:74 +#: usr/local/www/status_graph.php:66 usr/local/www/fbegin.inc:148 +#: usr/local/www/fbegin.inc:166 usr/local/www/status_services.php:343 +#: usr/local/www/status_openvpn.php:46 usr/local/www/vpn_openvpn_client.php:40 +#: usr/local/www/vpn_openvpn_csc.php:40 +#: usr/local/www/vpn_openvpn_server.php:40 +#: usr/local/www/widgets/widgets/services_status.widget.php:148 +#: usr/local/www/diag_logs_wireless.php:75 +#: usr/local/www/diag_logs_routing.php:73 +#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:165 +#: usr/local/www/fbegin.inc:184 usr/local/www/diag_backup.php:189 +#: usr/local/www/diag_logs_resolver.php:86 +#: usr/local/www/diag_packet_capture.php:134 +#: usr/local/www/diag_logs_gateways.php:86 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: etc/inc/service-utils.inc:333 usr/local/www/diag_logs_routing.php:74 +#: usr/local/www/diag_logs_settings.php:230 usr/local/www/fbegin.inc:173 +#: usr/local/www/fbegin.inc:192 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111 +#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:74 +#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_wireless.php:76 +#: usr/local/www/vpn_openvpn_server.php:423 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/diag_packet_capture.php:64 +#: usr/local/www/diag_logs_gateways.php:87 +#: usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_filter.php:99 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_ppp.php:76 usr/local/www/fbegin.inc:164 +#: usr/local/www/fbegin.inc:183 usr/local/www/vpn_openvpn_server.php:445 +#: etc/inc/service-utils.inc:332 usr/local/www/diag_logs_filter.php:129 +#: etc/inc/system.inc:1627 etc/inc/service-utils.inc:349 +#: etc/inc/system.inc:1635 usr/local/www/diag_logs_settings.php:249 +#: usr/local/www/diag_backup.php:190 etc/inc/system.inc:1662 +#: etc/inc/service-utils.inc:351 +msgid "OpenVPN" +msgstr "OpenVPN" + +#: usr/local/www/diag_logs.php:86 usr/local/www/diag_logs_auth.php:74 +#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_filter.php:110 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/diag_logs_ipsec.php:111 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_settings.php:219 +#: usr/local/www/diag_logs_vpn.php:135 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/diag_logs_ppp.php:79 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/fbegin.inc:141 usr/local/www/diag_logs_wireless.php:76 +msgid "OpenNTPD" +msgstr "OpenNTPD" + +#: usr/local/www/diag_logs.php:87 usr/local/www/diag_logs_auth.php:75 +#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_filter.php:111 +#: usr/local/www/diag_logs_filter_dynamic.php:110 +#: usr/local/www/diag_logs_ipsec.php:112 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_settings.php:220 +#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/interfaces_bridge.php:91 +#: usr/local/www/interfaces_gif.php:90 usr/local/www/interfaces_gre.php:91 +#: usr/local/www/interfaces_groups.php:77 +#: usr/local/www/interfaces_assign.php:404 +#: usr/local/www/status_wireless.php:41 usr/local/www/interfaces_vlan.php:92 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/diag_logs_ppp.php:80 usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/interfaces_lagg.php:96 usr/local/www/interfaces_ppps.php:92 +#: usr/local/www/interfaces_qinq.php:100 +#: usr/local/www/interfaces_wireless.php:76 +#: usr/local/www/interfaces_wireless.php:90 +#: usr/local/www/interfaces_wireless_edit.php:145 usr/local/www/fbegin.inc:183 +#: usr/local/www/status_rrd_graph.php:344 +#: usr/local/www/status_rrd_graph_settings.php:143 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/diag_logs_routing.php:86 usr/local/www/fbegin.inc:201 +#: usr/local/www/status_rrd_graph_settings.php:144 +#: usr/local/www/diag_logs_resolver.php:100 usr/local/www/diag_logs.php:99 +#: usr/local/www/status_rrd_graph.php:392 +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_gateways.php:100 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_routing.php:87 usr/local/www/fbegin.inc:209 +#: usr/local/www/interfaces_groups.php:78 +#: usr/local/www/interfaces_qinq.php:101 usr/local/www/interfaces_ppps.php:93 +#: usr/local/www/interfaces_bridge.php:92 +#: usr/local/www/diag_logs_resolver.php:101 +#: usr/local/www/interfaces_lagg.php:97 usr/local/www/interfaces_gre.php:92 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/diag_logs_wireless.php:89 +#: usr/local/www/interfaces_assign.php:398 +#: usr/local/www/diag_logs_gateways.php:101 +#: usr/local/www/interfaces_vlan.php:93 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/interfaces_gif.php:91 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_lagg.php:101 +#: usr/local/www/interfaces_vlan.php:99 usr/local/www/status_rrd_graph.php:417 +#: usr/local/www/interfaces_bridge.php:98 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/interfaces_wireless.php:93 usr/local/www/fbegin.inc:200 +#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_gif.php:95 +msgid "Wireless" +msgstr "Sem fio" + +#: usr/local/www/diag_logs.php:88 usr/local/www/diag_logs_auth.php:76 +#: usr/local/www/diag_logs_dhcp.php:81 usr/local/www/diag_logs_filter.php:112 +#: usr/local/www/diag_logs_filter_dynamic.php:111 +#: usr/local/www/diag_logs_ipsec.php:113 usr/local/www/diag_logs_ntpd.php:76 +#: usr/local/www/diag_logs_openvpn.php:80 +#: usr/local/www/diag_logs_settings.php:132 +#: usr/local/www/diag_logs_settings.php:221 +#: usr/local/www/diag_logs_vpn.php:137 +#: usr/local/www/system_firmware_settings.php:74 +#: usr/local/www/diag_logs_filter_summary.php:195 +#: usr/local/www/diag_logs_ppp.php:81 usr/local/www/diag_logs_relayd.php:77 +#: usr/local/www/status_rrd_graph.php:361 +#: usr/local/www/status_rrd_graph_settings.php:160 +#: usr/local/www/system_authservers.php:423 +#: usr/local/www/system_groupmanager.php:242 +#: usr/local/www/system_groupmanager_addprivs.php:170 +#: usr/local/www/system_usermanager.php:442 +#: usr/local/www/system_usermanager_addprivs.php:169 +#: usr/local/www/system_usermanager_settings.php:115 +#: usr/local/www/diag_logs_wireless.php:78 +#: usr/local/www/diag_logs_routing.php:75 +#: usr/local/www/diag_logs_settings.php:136 +#: usr/local/www/diag_logs_settings.php:225 +#: usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_setting.php:122 +#: usr/local/www/status_rrd_graph_settings.php:161 +#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112 +#: usr/local/www/system_usermanager.php:440 +#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/diag_logs_ppp.php:80 +#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/diag_logs.php:87 usr/local/www/status_rrd_graph.php:409 +#: usr/local/www/load_balancer_virtual_server.php:118 +#: usr/local/www/system_groupmanager_addprivs.php:168 +#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/load_balancer_monitor.php:112 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/diag_logs_gateways.php:88 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/load_balancer_pool.php:121 +#: usr/local/www/diag_logs_filter.php:111 +#: usr/local/www/diag_logs_routing.php:76 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_settings.php:232 +#: usr/local/www/load_balancer_setting.php:121 +#: usr/local/www/diag_logs_resolver.php:89 +#: usr/local/www/load_balancer_virtual_server.php:116 +#: usr/local/www/load_balancer_monitor.php:110 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_gateways.php:89 +#: usr/local/www/diag_logs_filter_dynamic.php:110 +#: usr/local/www/load_balancer_pool.php:119 +#: usr/local/www/system_authservers.php:428 +#: usr/local/www/diag_logs_filter.php:101 +#: usr/local/www/status_rrd_graph.php:434 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/system_authservers.php:435 +#: usr/local/www/diag_logs_filter.php:131 +#: usr/local/www/system_usermanager_settings.php:117 +#: usr/local/www/system_groupmanager.php:245 +#: usr/local/www/diag_logs_settings.php:162 +#: usr/local/www/diag_logs_settings.php:251 +#: usr/local/www/system_authservers.php:446 +msgid "Settings" +msgstr "Configurações" + +#: usr/local/www/diag_logs.php:98 usr/local/www/diag_logs_resolver.php:110 +#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_gateways.php:110 +#: usr/local/www/diag_logs_resolver.php:111 +#: usr/local/www/diag_logs_gateways.php:111 +#, php-format +msgid "Last %s system log entries" +msgstr "Últimas %s entradas de evento no sistema" + +#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_auth.php:90 +#: usr/local/www/diag_logs_dhcp.php:95 usr/local/www/diag_logs_filter.php:208 +#: usr/local/www/diag_logs_ipsec.php:150 usr/local/www/diag_logs_ntpd.php:91 +#: usr/local/www/diag_logs_openvpn.php:97 usr/local/www/diag_logs_vpn.php:188 +#: usr/local/www/diag_logs_ppp.php:114 usr/local/www/diag_logs_relayd.php:91 +#: usr/local/www/diag_logs_wireless.php:92 +#: usr/local/www/diag_logs_routing.php:101 +#: usr/local/www/diag_logs_relayd.php:90 usr/local/www/diag_logs_auth.php:89 +#: usr/local/www/diag_logs_ipsec.php:149 usr/local/www/diag_logs_vpn.php:187 +#: usr/local/www/diag_logs_ppp.php:113 +#: usr/local/www/diag_logs_resolver.php:121 +#: usr/local/www/diag_logs_ntpd.php:90 usr/local/www/diag_logs.php:120 +#: usr/local/www/diag_logs_dhcp.php:94 +#: usr/local/www/diag_logs_wireless.php:103 +#: usr/local/www/diag_logs_gateways.php:121 +#: usr/local/www/diag_logs_openvpn.php:96 +#: usr/local/www/diag_logs_filter.php:205 +#: usr/local/www/diag_logs_routing.php:102 +#: usr/local/www/diag_logs_resolver.php:122 +#: usr/local/www/diag_logs_wireless.php:104 +#: usr/local/www/diag_logs_gateways.php:122 +#: usr/local/www/diag_logs_filter.php:264 usr/local/www/diag_logs_ppp.php:95 +#: usr/local/www/diag_logs_ipsec.php:151 +#: usr/local/www/diag_logs_filter.php:398 +msgid "Clear log" +msgstr "Limpar log" + +#: usr/local/www/diag_logs.php:115 usr/local/www/diag_logs_filter.php:128 +#: usr/local/www/diag_dump_states.php:138 +#: usr/local/www/diag_dump_states_sources.php:133 +#: usr/local/www/diag_logs_resolver.php:127 usr/local/www/diag_logs.php:126 +#: usr/local/www/diag_dump_states.php:153 +#: usr/local/www/diag_logs_gateways.php:127 +#: usr/local/www/diag_logs_filter.php:127 +#: usr/local/www/diag_logs_resolver.php:128 +#: usr/local/www/diag_dump_states_sources.php:132 +#: usr/local/www/diag_dump_states.php:152 +#: usr/local/www/diag_logs_gateways.php:128 +#: usr/local/www/diag_logs_filter.php:147 +#: usr/local/www/diag_logs_filter.php:197 +#: usr/local/www/diag_logs_filter.php:260 +#: usr/local/www/diag_dump_states.php:141 +msgid "Filter" +msgstr "Filtro" + +#: usr/local/www/diag_logs_auth.php:86 usr/local/www/diag_logs_auth.php:85 +#, php-format +msgid "Last %s Portal Auth log entries" +msgstr "Último %s evento de entrada no Portal de autenticação" + +#: usr/local/www/diag_logs_dhcp.php:91 usr/local/www/diag_logs_dhcp.php:90 +#, php-format +msgid "Last %s DHCP service log entries" +msgstr "Últimos %s logs de entrada do serviço DHCP" + +#: usr/local/www/diag_logs_filter.php:56 usr/local/www/diag_logs_filter.php:63 +msgid "The rule that triggered this action is" +msgstr "A regra que desencadeou esta ação é" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:274 +msgid "Normal View" +msgstr "Visão Normal" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:274 +msgid "Dynamic View" +msgstr "Visão Dinâmica" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:274 +msgid "Summary View" +msgstr "Ver resumo" + +#: usr/local/www/diag_logs_filter.php:139 +#: usr/local/www/diag_logs_filter.php:138 +#: usr/local/www/diag_logs_filter.php:170 +#: usr/local/www/diag_logs_filter.php:296 +#, php-format +msgid "Last %s firewall log entries." +msgstr "Últimos %s logs de entrada do firewall." + +#: usr/local/www/diag_logs_filter.php:141 +#: usr/local/www/diag_logs_filter.php:140 +#: usr/local/www/diag_logs_filter.php:172 +#: usr/local/www/diag_logs_filter.php:298 +msgid "matched log entries." +msgstr "entradas de log encontradas." + +#: usr/local/www/diag_logs_filter.php:143 +#: usr/local/www/diag_logs_filter.php:142 +#: usr/local/www/diag_logs_filter.php:173 +#: usr/local/www/diag_logs_filter.php:299 +#, php-format +msgid "Max(%s)" +msgstr "Máximo(%s)" + +#: usr/local/www/diag_logs_filter.php:146 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#: usr/local/www/diag_logs_filter.php:145 +#: usr/local/www/diag_logs_filter_dynamic.php:125 +#: usr/local/www/diag_logs_filter.php:177 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/widgets/widgets/log.widget.php:163 +#: usr/local/www/diag_logs_filter.php:303 +#: usr/local/www/widgets/widgets/log.widget.php:167 +msgid "Act" +msgstr "Ação" + +#: usr/local/www/diag_logs_filter.php:147 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_vpn.php:175 +#: usr/local/www/firewall_schedule_edit.php:910 +#: usr/local/www/diag_logs_vpn.php:174 +#: usr/local/www/diag_logs_filter_dynamic.php:125 +#: usr/local/www/diag_logs_filter.php:146 +#: usr/local/www/firewall_schedule_edit.php:909 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter.php:178 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_system_pftop.php:143 +#: usr/local/www/diag_logs_filter.php:159 +#: usr/local/www/diag_logs_filter.php:304 +#: usr/local/www/widgets/widgets/log.widget.php:168 +msgid "Time" +msgstr "Tempo" + +#: usr/local/www/diag_logs_filter.php:148 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/firewall_nat.php:195 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter.php:147 usr/local/www/firewall_nat.php:200 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/diag_logs_filter.php:305 usr/local/www/firewall_nat.php:203 +#: usr/local/www/services_rfc2136.php:79 +msgid "If" +msgstr "Se" + +#: usr/local/www/diag_logs_filter.php:149 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/firewall_nat_edit.php:529 +#: usr/local/www/firewall_nat_edit.php:535 +#: usr/local/www/firewall_nat_out.php:342 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:468 +#: usr/local/www/firewall_rules.php:364 +#: usr/local/www/firewall_rules_edit.php:855 +#: usr/local/www/vpn_ipsec_mobile.php:356 +#: usr/local/www/vpn_ipsec_mobile.php:377 usr/local/www/diag_ipsec_sad.php:87 +#: usr/local/www/diag_ipsec_spd.php:86 usr/local/www/firewall_nat_out.php:352 +#: usr/local/www/firewall_nat_out_edit.php:481 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules.php:368 +#: usr/local/www/firewall_nat_edit.php:536 +#: usr/local/www/firewall_nat_edit.php:542 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_filter.php:148 +#: usr/local/www/firewall_nat_out.php:353 +#: usr/local/www/vpn_ipsec_mobile.php:383 +#: usr/local/www/vpn_ipsec_mobile.php:401 usr/local/www/diag_ipsec_sad.php:88 +#: usr/local/www/firewall_rules.php:361 +#: usr/local/www/firewall_nat_edit.php:541 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/diag_ipsec_spd.php:87 usr/local/www/diag_logs_filter.php:183 +#: usr/local/www/firewall_rules_edit.php:893 +#: usr/local/www/firewall_nat_edit.php:530 +#: usr/local/www/diag_logs_filter_dynamic.php:131 +#: usr/local/www/widgets/widgets/log.widget.php:165 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/firewall_rules_edit.php:905 +#: usr/local/www/diag_logs_filter.php:309 +#: usr/local/www/firewall_nat_edit.php:548 +#: usr/local/www/firewall_nat_out.php:360 usr/local/www/firewall_rules.php:359 +#: usr/local/www/widgets/widgets/log.widget.php:169 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:497 +#: usr/local/www/firewall_rules_edit.php:904 +#: usr/local/www/firewall_nat_edit.php:543 +#: usr/local/www/firewall_nat_edit.php:549 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/widgets/widgets/log.widget.php:170 +#: usr/local/www/firewall_rules_edit.php:952 +msgid "Source" +msgstr "Origem" + +#: usr/local/www/diag_logs_filter.php:150 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/firewall_nat_1to1_edit.php:383 +#: usr/local/www/firewall_nat_edit.php:624 +#: usr/local/www/firewall_nat_out.php:344 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:498 +#: usr/local/www/firewall_rules.php:366 +#: usr/local/www/firewall_rules_edit.php:948 +#: usr/local/www/diag_ipsec_sad.php:88 usr/local/www/diag_ipsec_spd.php:87 +#: usr/local/www/firewall_nat_out.php:354 +#: usr/local/www/firewall_nat_1to1_edit.php:390 +#: usr/local/www/firewall_nat_out_edit.php:511 +#: usr/local/www/firewall_rules_edit.php:983 +#: usr/local/www/firewall_rules.php:370 +#: usr/local/www/firewall_nat_edit.php:631 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/diag_logs_filter.php:149 +#: usr/local/www/firewall_nat_out.php:355 +#: usr/local/www/firewall_nat_1to1_edit.php:388 +#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/firewall_rules.php:363 +#: usr/local/www/firewall_nat_edit.php:630 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_ipsec_spd.php:88 usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/firewall_rules_edit.php:992 +#: usr/local/www/firewall_nat_edit.php:625 +#: usr/local/www/diag_logs_filter_dynamic.php:132 +#: usr/local/www/widgets/widgets/log.widget.php:166 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/firewall_rules_edit.php:1005 +#: usr/local/www/diag_logs_filter.php:310 +#: usr/local/www/firewall_nat_edit.php:637 +#: usr/local/www/firewall_nat_out.php:362 usr/local/www/firewall_rules.php:361 +#: usr/local/www/widgets/widgets/log.widget.php:170 +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:527 +#: usr/local/www/firewall_rules_edit.php:1004 +#: usr/local/www/firewall_nat_edit.php:638 +#: usr/local/www/firewall_nat_out.php:361 +#: usr/local/www/firewall_nat_1to1_edit.php:389 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/widgets/widgets/log.widget.php:171 +#: usr/local/www/firewall_rules_edit.php:1052 +msgid "Destination" +msgstr "Destino" + +#: usr/local/www/diag_logs_filter.php:151 +#: usr/local/www/diag_logs_filter_dynamic.php:131 +#: usr/local/www/diag_dump_states.php:150 usr/local/www/firewall_rules.php:363 +#: usr/local/www/diag_states_summary.php:152 +#: usr/local/www/firewall_nat.php:196 usr/local/www/firewall_rules.php:367 +#: usr/local/www/diag_dump_states.php:168 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_states_summary.php:141 +#: usr/local/www/diag_logs_filter.php:150 usr/local/www/firewall_nat.php:201 +#: usr/local/www/firewall_rules.php:360 usr/local/www/diag_dump_states.php:167 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/diag_states_summary.php:143 +#: usr/local/www/diag_logs_filter.php:185 +#: usr/local/www/diag_logs_filter_dynamic.php:133 +#: usr/local/www/diag_logs_filter.php:311 +#: usr/local/www/diag_dump_states.php:156 usr/local/www/firewall_rules.php:358 +#: usr/local/www/firewall_nat.php:204 +msgid "Proto" +msgstr "Proto" + +#: usr/local/www/diag_logs_filter.php:178 +#: usr/local/www/diag_logs_filter.php:183 +#: usr/local/www/diag_logs_filter_summary.php:81 +#: usr/local/www/diag_logs_filter.php:175 +#: usr/local/www/diag_logs_filter.php:180 +#: usr/local/www/diag_logs_filter_summary.php:82 +#: usr/local/www/diag_logs_filter.php:221 +#: usr/local/www/diag_logs_filter.php:228 +#: usr/local/www/diag_logs_filter.php:351 +#: usr/local/www/diag_logs_filter.php:353 +#: usr/local/www/diag_logs_filter.php:360 +#: usr/local/www/diag_logs_filter.php:362 +#: usr/local/www/widgets/widgets/log.widget.php:189 +#: usr/local/www/widgets/widgets/log.widget.php:192 +#: usr/local/www/widgets/widgets/log.widget.php:190 +#: usr/local/www/widgets/widgets/log.widget.php:193 +msgid "Reverse Resolve with DNS" +msgstr "Solução reversa com DNS" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:355 +msgid "Easy Rule: Add to Block List" +msgstr "Easy Rule: Adicione para a lista de bloqueados" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:355 +msgid "Do you really want to add this BLOCK rule?" +msgstr "Você realmente quer adicionar essa regra de BLOQUEIO?" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Easy Rule is still experimental." +msgstr "Easy Rule é experimental ainda." + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Continue at risk of your own peril." +msgstr "Continuar por sua conta e risco." + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:355 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Backups are also nice." +msgstr "Backups também são bons." + +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Easy Rule: Pass this traffic" +msgstr "Easy Rule: liberar esse tráfego" + +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:364 +msgid "Do you really want to add this PASS rule?" +msgstr "Você realmente quer adicionar essa regra de liberação?" + +#: usr/local/www/diag_logs_filter.php:196 +#: usr/local/www/diag_logs_filter.php:193 +#: usr/local/www/diag_logs_filter.php:251 +#: usr/local/www/diag_logs_filter.php:385 +#, php-format +msgid "Last %s firewall log entries" +msgstr "Últimos %s logs de entrada do firewall" + +#: usr/local/www/diag_logs_filter_dynamic.php:61 +msgid "Firewall (Dynamic View)" +msgstr "Firewall (Visão Dinâmica)" + +#: usr/local/www/diag_logs_filter_dynamic.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:120 +#: usr/local/www/diag_logs_filter_dynamic.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#, php-format +msgid "Last %s records" +msgstr "Últimos %s registros" + +#: usr/local/www/diag_logs_filter_dynamic.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:120 +#: usr/local/www/diag_logs_filter_dynamic.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +msgid "Pause:" +msgstr "Pausa:" + +#: usr/local/www/diag_logs_filter_dynamic.php:153 +#: usr/local/www/diag_logs_filter_dynamic.php:151 +#: usr/local/www/diag_logs_filter_dynamic.php:152 +#: usr/local/www/diag_logs_filter_dynamic.php:165 +msgid "TCP Flags" +msgstr "Flags de TCP" + +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/status_services.php:330 +#: usr/local/www/widgets/widgets/services_status.widget.php:135 +#: etc/inc/service-utils.inc:320 etc/inc/service-utils.inc:319 +#: etc/inc/service-utils.inc:336 etc/inc/service-utils.inc:338 +msgid "IPsec VPN" +msgstr "IPsec VPN" + +#: usr/local/www/diag_logs_ipsec.php:123 usr/local/www/diag_logs_ipsec.php:122 +#, php-format +msgid "Last %s IPsec log entries" +msgstr "Últimos %s logs de entrada do IPsec" + +#: usr/local/www/diag_logs_ipsec.php:135 usr/local/www/diag_logs_ppp.php:99 +#: usr/local/www/diag_logs_ipsec.php:134 usr/local/www/diag_logs_ppp.php:98 +#: usr/local/www/diag_logs_ipsec.php:136 +msgid "Unknown Gateway/Dynamic" +msgstr "Gateway/Dinâmico desconhecido" + +#: usr/local/www/diag_logs_ntpd.php:86 +#, php-format +msgid "Last %s OpenNTPD log entries" +msgstr "Últimas %s entradas de evento do OpenNTPD" + +#: usr/local/www/diag_logs_openvpn.php:90 +#: usr/local/www/diag_logs_openvpn.php:89 +#, php-format +msgid "Last %s OpenVPN log entries" +msgstr "Últimas %s entradas de log do OpenVPN" + +#: usr/local/www/diag_dump_states.php:51 usr/local/www/status_openvpn.php:59 +#: usr/local/www/widgets/widgets/openvpn.widget.php:16 +#: usr/local/www/diag_dump_states_sources.php:51 +#: usr/local/www/widgets/widgets/openvpn.widget.php:17 +#: usr/local/www/status_openvpn.php:61 usr/local/www/status_openvpn.php:62 +msgid "invalid input" +msgstr "entrada inválida" + +#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_dump_states.php:75 +#: usr/local/www/diag_dump_states.php:67 +msgid "Show States" +msgstr "Mostrar Estados" + +#: usr/local/www/diag_dump_states.php:95 usr/local/www/status_openvpn.php:130 +#: usr/local/www/widgets/widgets/openvpn.widget.php:84 +#: usr/local/www/diag_dump_states_sources.php:95 +#: usr/local/www/diag_dump_states.php:105 +#: usr/local/www/widgets/widgets/openvpn.widget.php:85 +#: usr/local/www/status_openvpn.php:131 +#: usr/local/www/diag_dump_states_sources.php:94 +#: usr/local/www/diag_dump_states.php:104 usr/local/www/status_openvpn.php:132 +#: usr/local/www/diag_dump_states.php:96 +msgid "An error occurred." +msgstr "Ocorreu um erro." + +#: usr/local/www/diag_dump_states.php:110 +#: usr/local/www/diag_states_summary.php:151 +#: usr/local/www/diag_states_summary.php:153 +#: usr/local/www/diag_resetstate.php:77 usr/local/www/fbegin.inc:206 +#: usr/local/www/system_advanced_misc.php:398 +#: usr/local/www/diag_dump_states_sources.php:110 usr/local/www/fbegin.inc:224 +#: usr/local/www/system_advanced_misc.php:441 +#: usr/local/www/diag_dump_states.php:120 +#: usr/local/www/diag_states_summary.php:140 +#: usr/local/www/diag_states_summary.php:142 usr/local/www/fbegin.inc:233 +#: usr/local/www/system_advanced_misc.php:490 +#: usr/local/www/diag_dump_states_sources.php:109 +#: usr/local/www/diag_dump_states.php:119 +#: usr/local/www/diag_states_summary.php:144 +#: usr/local/www/system_advanced_misc.php:502 usr/local/www/fbegin.inc:225 +#: usr/local/www/diag_dump_states.php:111 +#: usr/local/www/system_advanced_misc.php:549 +#: usr/local/www/system_advanced_misc.php:567 +msgid "States" +msgstr "Estados" + +#: usr/local/www/diag_dump_states.php:112 usr/local/www/diag_resetstate.php:79 +#: usr/local/www/diag_dump_states_sources.php:111 +#: usr/local/www/diag_dump_states.php:122 +#: usr/local/www/diag_dump_states_sources.php:110 +#: usr/local/www/diag_dump_states.php:121 +#: usr/local/www/diag_dump_states.php:113 +msgid "Source Tracking" +msgstr "Rastreamento de Origem" + +#: usr/local/www/diag_dump_states.php:113 usr/local/www/diag_resetstate.php:80 +#: usr/local/www/diag_dump_states_sources.php:112 +#: usr/local/www/diag_dump_states.php:123 +#: usr/local/www/diag_dump_states_sources.php:111 +#: usr/local/www/diag_dump_states.php:122 +#: usr/local/www/diag_dump_states.php:114 +msgid "Reset States" +msgstr "Reiniciar Estados" + +#: usr/local/www/diag_dump_states.php:134 +msgid "Current state count:" +msgstr "Contagem de estado atual:" + +#: usr/local/www/diag_dump_states.php:136 +#: usr/local/www/diag_dump_states_sources.php:131 +#: usr/local/www/diag_dump_states.php:151 +#: usr/local/www/diag_dump_states_sources.php:130 +#: usr/local/www/diag_dump_states.php:150 +#: usr/local/www/diag_dump_states.php:139 +msgid "Filter expression:" +msgstr "Expressão de filtro:" + +#: usr/local/www/diag_dump_states.php:151 +#: usr/local/www/diag_dump_states.php:169 +#: usr/local/www/diag_dump_states.php:168 +#: usr/local/www/diag_dump_states.php:157 +msgid "Source -> Router -> Destination" +msgstr "Origem -> Roteador -> Destino" + +#: usr/local/www/diag_dump_states.php:152 +#: usr/local/www/status_dhcpv6_leases.php:486 +#: usr/local/www/diag_dump_states.php:170 +#: usr/local/www/status_dhcpv6_leases.php:487 +#: usr/local/www/diag_dump_states.php:169 +#: usr/local/www/status_dhcpv6_leases.php:490 +#: usr/local/www/diag_system_pftop.php:142 +#: usr/local/www/diag_dump_states.php:158 +msgid "State" +msgstr "Estado" + +#: usr/local/www/diag_dump_states.php:185 +#: usr/local/www/diag_dump_states.php:203 +#: usr/local/www/diag_dump_states.php:202 +#: usr/local/www/diag_dump_states.php:194 +msgid "Remove all state entries from" +msgstr "Remove todas as entradas de estado de" + +#: usr/local/www/diag_dump_states.php:185 +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:735 usr/local/www/diag_confbak.php:111 +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_dhcp.php:636 +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_dhcpv6.php:572 usr/local/www/services_dhcpv6.php:579 +#: usr/local/www/diag_dump_states_sources.php:180 +#: usr/local/www/diag_dump_states.php:203 usr/local/www/services_dhcp.php:649 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/services_dhcpv6.php:645 usr/local/www/services_dhcpv6.php:652 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/diag_dump_states_sources.php:179 +#: usr/local/www/diag_dump_states.php:202 usr/local/www/services_dhcp.php:770 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:583 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:736 usr/local/www/services_dhcp.php:780 +#: usr/local/www/services_dhcpv6.php:593 usr/local/www/services_dhcpv6.php:600 +#: usr/local/www/diag_dump_states.php:194 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:748 usr/local/www/services_dhcp.php:800 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:749 usr/local/www/services_dhcp.php:812 +msgid "to" +msgstr "para" + +#: usr/local/www/diag_dump_states.php:194 +#: usr/local/www/diag_dump_states.php:212 +#: usr/local/www/diag_dump_states.php:211 +#: usr/local/www/diag_dump_states.php:205 +msgid "No states were found." +msgstr "Nenhum estado foi encontrado." + +#: usr/local/www/diag_logs_settings.php:79 +msgid "A valid IP address must be specified for remote syslog server #1." +msgstr "Um endereço de IP válido de ser especificado para o servidor syslog remoto #1." + +#: usr/local/www/diag_logs_settings.php:82 +msgid "A valid IP address must be specified for remote syslog server #2." +msgstr "Um endereço de IP válido de ser especificado para o servidor syslog remoto #2." + +#: usr/local/www/diag_logs_settings.php:85 +msgid "A valid IP address must be specified for remote syslog server #3." +msgstr "Um endereço de IP válido de ser especificado para o servidor syslog remoto #3." + +#: usr/local/www/diag_logs_settings.php:92 +#: usr/local/www/diag_logs_settings.php:96 +#: usr/local/www/diag_logs_settings.php:97 +#: usr/local/www/diag_logs_settings.php:100 +msgid "Number of log entries to show must be between 5 and 2000." +msgstr "O número de logs de entrada para mostra deve estar entre 5 e 2000." + +#: usr/local/www/diag_logs_settings.php:232 +#: usr/local/www/diag_logs_settings.php:239 +#: usr/local/www/diag_logs_settings.php:246 +#: usr/local/www/diag_logs_settings.php:265 +msgid "Show log entries in reverse order (newest entries on top)" +msgstr "Mostrar logs de entrada em ordem reversa (entradas mais recentes no topo)" + +#: usr/local/www/diag_logs_settings.php:236 +msgid "Number of log entries to show:" +msgstr "Número de logs de entrada para mostra:" + +#: usr/local/www/diag_logs_settings.php:242 +#: usr/local/www/diag_logs_settings.php:250 +#: usr/local/www/diag_logs_settings.php:257 +#: usr/local/www/diag_logs_settings.php:277 +msgid "Log packets blocked by the default rule" +msgstr "Pacotes de log bloqueados pela regra padrão" + +#: usr/local/www/diag_logs_settings.php:243 +msgid "Hint: packets that are blocked by the implicit default block rule will not be logged anymore if you uncheck this option. Per-rule logging options are not affected." +msgstr "Dica: pacotes que são bloqueados pelo regra implícita de bloqueio padrão não serão mais registrados se você desmarcar essa opção. Por regra as opções de registro não são afetadas." + +#: usr/local/www/diag_logs_settings.php:250 +#: usr/local/www/diag_logs_settings.php:258 +#: usr/local/www/diag_logs_settings.php:265 +#: usr/local/www/diag_logs_settings.php:296 +msgid "Show raw filter logs" +msgstr "Mostrar filtros de log base" + +#: usr/local/www/diag_logs_settings.php:251 +msgid "Hint: If this is checked, filter logs are shown as generated by the packet filter, without any formatting. This will reveal more detailed information." +msgstr "Dica: Se isto for marcado, logs do filtro são mostrados como gerados pelo filtro de pacotes, sem qualquer formatação. Isto irá revelar informações mais detalhadas." + +#: usr/local/www/diag_logs_settings.php:256 +#: usr/local/www/diag_logs_settings.php:267 +#: usr/local/www/diag_logs_settings.php:287 +#: usr/local/www/diag_logs_settings.php:318 +msgid "Disable writing log files to the local RAM disk" +msgstr "Desabilitar gravação de arquivos de log no RAM disk local" + +#: usr/local/www/diag_logs_settings.php:261 +msgid "Enable syslog'ing to remote syslog server" +msgstr "Habilitar envio de logs para servidor syslog remoto" + +#: usr/local/www/diag_logs_settings.php:264 +msgid "Remote syslog servers" +msgstr "Servidores syslog remotos" + +#: usr/local/www/diag_logs_settings.php:269 +#: usr/local/www/diag_logs_settings.php:277 +#: usr/local/www/diag_logs_settings.php:285 +#: usr/local/www/vpn_ipsec_mobile.php:496 +#: usr/local/www/vpn_ipsec_mobile.php:502 +#: usr/local/www/vpn_ipsec_mobile.php:508 +#: usr/local/www/vpn_ipsec_mobile.php:514 +#: usr/local/www/vpn_ipsec_mobile.php:538 +#: usr/local/www/vpn_ipsec_mobile.php:544 usr/local/www/diag_dns.php:208 +#: usr/local/www/services_rfc2136_edit.php:180 +#: usr/local/www/vpn_openvpn_client.php:365 +#: usr/local/www/vpn_openvpn_client.php:862 +#: usr/local/www/vpn_openvpn_csc.php:293 usr/local/www/vpn_openvpn_csc.php:477 +#: usr/local/www/vpn_openvpn_csc.php:485 usr/local/www/vpn_openvpn_csc.php:493 +#: usr/local/www/vpn_openvpn_csc.php:501 usr/local/www/vpn_openvpn_csc.php:529 +#: usr/local/www/vpn_openvpn_csc.php:537 usr/local/www/vpn_openvpn_csc.php:625 +#: usr/local/www/vpn_openvpn_csc.php:633 +#: usr/local/www/vpn_openvpn_server.php:40 +#: usr/local/www/vpn_openvpn_server.php:583 +#: usr/local/www/vpn_openvpn_server.php:1238 +#: usr/local/www/vpn_openvpn_server.php:1246 +#: usr/local/www/vpn_openvpn_server.php:1254 +#: usr/local/www/vpn_openvpn_server.php:1262 +#: usr/local/www/vpn_openvpn_server.php:1290 +#: usr/local/www/vpn_openvpn_server.php:1298 +#: usr/local/www/vpn_openvpn_server.php:1386 +#: usr/local/www/vpn_openvpn_server.php:1394 +#: usr/local/www/diag_logs_settings.php:286 +#: usr/local/www/diag_logs_settings.php:290 +#: usr/local/www/diag_logs_settings.php:294 usr/local/www/status_ntpd.php:108 +#: usr/local/www/diag_dns.php:207 usr/local/www/vpn_openvpn_server.php:656 +#: usr/local/www/vpn_openvpn_server.php:1380 +#: usr/local/www/vpn_openvpn_server.php:1388 +#: usr/local/www/vpn_openvpn_server.php:1396 +#: usr/local/www/vpn_openvpn_server.php:1404 +#: usr/local/www/vpn_openvpn_server.php:1432 +#: usr/local/www/vpn_openvpn_server.php:1440 +#: usr/local/www/vpn_openvpn_server.php:1528 +#: usr/local/www/vpn_openvpn_server.php:1536 +#: usr/local/www/vpn_openvpn_client.php:370 +#: usr/local/www/vpn_openvpn_client.php:867 +#: usr/local/www/diag_logs_settings.php:306 +#: usr/local/www/diag_logs_settings.php:310 +#: usr/local/www/diag_logs_settings.php:314 +#: usr/local/www/vpn_ipsec_mobile.php:545 +#: usr/local/www/vpn_ipsec_mobile.php:551 +#: usr/local/www/vpn_ipsec_mobile.php:557 +#: usr/local/www/vpn_ipsec_mobile.php:563 +#: usr/local/www/vpn_ipsec_mobile.php:587 +#: usr/local/www/vpn_ipsec_mobile.php:593 +#: usr/local/www/vpn_openvpn_csc.php:292 usr/local/www/vpn_openvpn_csc.php:476 +#: usr/local/www/vpn_openvpn_csc.php:484 usr/local/www/vpn_openvpn_csc.php:492 +#: usr/local/www/vpn_openvpn_csc.php:500 usr/local/www/vpn_openvpn_csc.php:528 +#: usr/local/www/vpn_openvpn_csc.php:536 usr/local/www/vpn_openvpn_csc.php:624 +#: usr/local/www/vpn_openvpn_csc.php:632 usr/local/www/status_ntpd.php:124 +#: usr/local/www/vpn_openvpn_server.php:423 +#: usr/local/www/vpn_openvpn_server.php:674 +#: usr/local/www/vpn_openvpn_server.php:1422 +#: usr/local/www/vpn_openvpn_server.php:1430 +#: usr/local/www/vpn_openvpn_server.php:1438 +#: usr/local/www/vpn_openvpn_server.php:1446 +#: usr/local/www/vpn_openvpn_server.php:1474 +#: usr/local/www/vpn_openvpn_server.php:1482 +#: usr/local/www/vpn_openvpn_server.php:1570 +#: usr/local/www/vpn_openvpn_server.php:1578 +#: usr/local/www/vpn_openvpn_client.php:378 +#: usr/local/www/vpn_openvpn_client.php:920 +#: usr/local/www/vpn_openvpn_client.php:396 +#: usr/local/www/vpn_openvpn_client.php:939 +#: usr/local/www/vpn_openvpn_server.php:445 +#: usr/local/www/vpn_openvpn_server.php:700 +#: usr/local/www/vpn_openvpn_server.php:1490 +#: usr/local/www/vpn_openvpn_server.php:1498 +#: usr/local/www/vpn_openvpn_server.php:1526 +#: usr/local/www/vpn_openvpn_server.php:1534 +#: usr/local/www/vpn_openvpn_server.php:1622 +#: usr/local/www/vpn_openvpn_server.php:1630 usr/local/www/status_ntpd.php:130 +#: usr/local/www/diag_dns.php:156 usr/local/www/diag_dns.php:224 +#: usr/local/www/services_rfc2136.php:80 +#: usr/local/www/diag_logs_settings.php:337 +#: usr/local/www/diag_logs_settings.php:341 +#: usr/local/www/diag_logs_settings.php:345 +#: usr/local/www/services_rfc2136_edit.php:185 +msgid "Server" +msgstr "Servidor" + +#: usr/local/www/diag_logs_settings.php:296 +msgid "IP addresses of remote syslog servers" +msgstr "Endereços IP de servidores syslog remotos" + +#: usr/local/www/diag_logs_settings.php:300 +#: usr/local/www/diag_logs_settings.php:309 +#: usr/local/www/diag_logs_settings.php:329 +#: usr/local/www/diag_logs_settings.php:360 +msgid "System events" +msgstr "Eventos do sistema" + +#: usr/local/www/diag_logs_settings.php:302 +#: usr/local/www/diag_logs_settings.php:311 +#: usr/local/www/diag_logs_settings.php:331 +#: usr/local/www/diag_logs_settings.php:362 +msgid "Firewall events" +msgstr "Eventos do firewall" + +#: usr/local/www/diag_logs_settings.php:304 +#: usr/local/www/diag_logs_settings.php:313 +#: usr/local/www/diag_logs_settings.php:333 +#: usr/local/www/diag_logs_settings.php:364 +msgid "DHCP service events" +msgstr "eventos do serviço DHCP" + +#: usr/local/www/diag_logs_settings.php:306 +#: usr/local/www/diag_logs_settings.php:315 +#: usr/local/www/diag_logs_settings.php:335 +#: usr/local/www/diag_logs_settings.php:366 +msgid "Portal Auth events" +msgstr "Eventos de autenticação do portal" + +#: usr/local/www/diag_logs_settings.php:308 +#: usr/local/www/diag_logs_settings.php:317 +#: usr/local/www/diag_logs_settings.php:337 +#: usr/local/www/diag_logs_settings.php:368 +msgid "VPN (PPTP, IPsec, OpenVPN) events" +msgstr "Eventos VPN (PPTP, IPsec, OpenVPN)" + +#: usr/local/www/diag_logs_settings.php:310 +#: usr/local/www/diag_logs_settings.php:319 +#: usr/local/www/diag_logs_settings.php:339 +#: usr/local/www/diag_logs_settings.php:370 +msgid "Gateway Monitor events" +msgstr "Eventos do Monitor de Gateway" + +#: usr/local/www/diag_logs_settings.php:312 +#: usr/local/www/diag_logs_settings.php:321 +#: usr/local/www/diag_logs_settings.php:341 +#: usr/local/www/diag_logs_settings.php:372 +msgid "Server Load Balancer events" +msgstr "Eventos do Servidor Load Balancer" + +#: usr/local/www/diag_logs_settings.php:314 +#: usr/local/www/diag_logs_settings.php:323 +#: usr/local/www/diag_logs_settings.php:343 +#: usr/local/www/diag_logs_settings.php:374 +msgid "Wireless events" +msgstr "Eventos Wireless" + +#: usr/local/www/diag_logs_settings.php:316 +#: usr/local/www/diag_logs_settings.php:307 +#: usr/local/www/diag_logs_settings.php:327 +#: usr/local/www/diag_logs_settings.php:358 +msgid "Everything" +msgstr "Tudo" + +#: usr/local/www/diag_logs_settings.php:327 +msgid "syslog sends UDP datagrams to port 514 on the specified remote syslog server. Be sure to set syslogd on the remote server to accept syslog messages from" +msgstr "syslog envia datagramas UDP para a porta 514 no servidor syslog remoto especificado. Certifique-se de definir o syslogd no servidor remoto para aceitar mensagens syslog de" + +#: usr/local/www/diag_logs_vpn.php:144 usr/local/www/diag_logs_vpn.php:143 +msgid "PPTP Logins" +msgstr "PPTP Logins" + +#: usr/local/www/diag_logs_vpn.php:147 usr/local/www/diag_logs_vpn.php:146 +msgid "PPTP Raw" +msgstr "PPTP Raw" + +#: usr/local/www/diag_logs_vpn.php:150 usr/local/www/diag_logs_vpn.php:149 +msgid "PPPoE Logins" +msgstr "PPPoE Logins" + +#: usr/local/www/diag_logs_vpn.php:153 usr/local/www/diag_logs_vpn.php:152 +msgid "PPPoE Raw" +msgstr "PPPoE Raw" + +#: usr/local/www/diag_logs_vpn.php:156 usr/local/www/diag_logs_vpn.php:155 +msgid "L2TP Logins" +msgstr "L2TP Logins" + +#: usr/local/www/diag_logs_vpn.php:159 usr/local/www/diag_logs_vpn.php:158 +msgid "L2TP Raw" +msgstr "L2TP Raw" + +#: usr/local/www/diag_logs_vpn.php:171 usr/local/www/diag_logs_vpn.php:170 +#, php-format +msgid "Last %1$s %2$s VPN log entries" +msgstr "Últimos %1$s %2$s logs de entrada VPN" + +#: usr/local/www/diag_logs_vpn.php:176 +#: usr/local/www/firewall_rules_edit.php:659 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:484 +#: usr/local/www/services_unbound_acls.php:211 +#: usr/local/www/services_unbound_acls.php:318 +#: usr/local/www/load_balancer_relay_action_edit.php:483 +#: usr/local/www/firewall_rules_edit.php:692 +#: usr/local/www/diag_logs_vpn.php:175 +#: usr/local/www/load_balancer_relay_action_edit.php:481 +#: usr/local/www/firewall_rules_edit.php:695 +#: usr/local/www/firewall_rules_edit.php:707 +#: usr/local/www/diag_logs_filter.php:151 +#: usr/local/www/firewall_rules_edit.php:755 +msgid "Action" +msgstr "Ação" + +#: usr/local/www/diag_logs_vpn.php:177 +#: usr/local/www/diag_authentication.php:59 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/system_groupmanager.php:426 +#: usr/local/www/system_usermanager.php:89 +#: usr/local/www/system_usermanager.php:808 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/system_usermanager.php:806 +#: usr/local/www/diag_logs_vpn.php:176 +#: usr/local/www/system_groupmanager.php:429 +#: usr/local/www/system_usermanager.php:809 +#: usr/local/www/system_groupmanager.php:448 +#: usr/local/www/system_usermanager.php:832 +#: usr/local/www/system_groupmanager.php:451 +msgid "User" +msgstr "Usuário" + +#: usr/local/www/diag_nanobsd.php:49 usr/local/www/fbegin.inc:212 +#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:239 +#: usr/local/www/fbegin.inc:231 +msgid "NanoBSD" +msgstr "NanoBSD" + +#: usr/local/www/diag_nanobsd.php:70 usr/local/www/diag_nanobsd.php:69 +msgid "Setting slice information, please wait..." +msgstr "Definindo informações da fatia, por favor aguarde..." + +#: usr/local/www/diag_nanobsd.php:79 usr/local/www/diag_nanobsd.php:78 +msgid "The boot slice has been set to" +msgstr "O boot slice foi definido como" + +#: usr/local/www/diag_nanobsd.php:86 usr/local/www/diag_nanobsd.php:85 +msgid "Duplicating slice. Please wait, this will take a moment..." +msgstr "Duplicando slice. Por favor aguarde, isto vai levar um momento..." + +#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94 +msgid "The slice has been duplicated." +msgstr "O slice foi duplicado." + +#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94 +msgid "If you would like to boot from this newly duplicated slice please set it using the bootup information area." +msgstr "Se você gostaria de fazer boot neste novo slice duplicado, por favor defina isto utilizando a área de informação de boot." + +#: usr/local/www/diag_nanobsd.php:97 usr/local/www/diag_nanobsd.php:96 +msgid "There was an error while duplicating the slice. Operation aborted." +msgstr "Ocorreu um erro durante a duplicação do slice. Operação abortada." + +#: usr/local/www/diag_nanobsd.php:128 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2559 +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/load_balancer_virtual_server_edit.php:212 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/load_balancer_virtual_server_edit.php:244 +#: usr/local/www/system_advanced_firewall.php:231 +#: usr/local/www/system_advanced_misc.php:221 +#: usr/local/www/system_advanced_network.php:197 +#: usr/local/www/system_advanced_sysctl.php:163 +#: usr/local/www/system_routes_edit.php:374 +#: usr/local/www/system_advanced_firewall.php:245 +#: usr/local/www/system_advanced_admin.php:289 +#: usr/local/www/system_advanced_misc.php:247 +#: usr/local/www/load_balancer_virtual_server_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:220 +#: usr/local/www/load_balancer_virtual_server_edit.php:233 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/diag_nanobsd.php:127 usr/local/www/system_routes_edit.php:375 +#: usr/local/www/system_advanced_misc.php:266 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +#: usr/local/www/system_firmware_settings.php:156 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/diag_nanobsd.php:148 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_advanced_firewall.php:274 +#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783 +#: usr/local/www/system_firmware_settings.php:167 +#: usr/local/www/system_advanced_misc.php:317 +#: usr/local/www/system_routes_edit.php:399 +#: usr/local/www/system_advanced_firewall.php:273 +#: usr/local/www/diag_nanobsd.php:139 usr/local/www/interfaces.php:2820 +#: usr/local/www/interfaces.php:2829 usr/local/www/system_routes_edit.php:409 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +#: usr/local/www/system_routes_edit.php:411 +#: usr/local/www/system_advanced_admin.php:310 +#: usr/local/www/system_advanced_misc.php:323 +#: usr/local/www/system_advanced_firewall.php:284 +#: usr/local/www/system_advanced_network.php:196 +#: usr/local/www/interfaces.php:2842 usr/local/www/interfaces.php:2851 +msgid "NOTE:" +msgstr "NOTA:" + +#: usr/local/www/diag_nanobsd.php:130 +#: usr/local/www/system_advanced_admin.php:291 +#: usr/local/www/system_advanced_firewall.php:233 +#: usr/local/www/system_advanced_misc.php:223 +#: usr/local/www/system_advanced_network.php:199 +#: usr/local/www/system_advanced_sysctl.php:165 +#: usr/local/www/system_advanced_firewall.php:247 +#: usr/local/www/system_advanced_misc.php:249 +#: usr/local/www/diag_nanobsd.php:129 +#: usr/local/www/system_advanced_misc.php:268 +#: usr/local/www/diag_nanobsd.php:150 +#: usr/local/www/system_advanced_misc.php:272 +#: usr/local/www/system_advanced_firewall.php:276 +#: usr/local/www/system_advanced_misc.php:319 +#: usr/local/www/system_advanced_firewall.php:275 +#: usr/local/www/diag_nanobsd.php:141 +#: usr/local/www/system_advanced_admin.php:312 +#: usr/local/www/system_advanced_misc.php:325 +#: usr/local/www/system_advanced_firewall.php:286 +#: usr/local/www/system_advanced_network.php:198 +msgid "The options on this page are intended for use by advanced users only." +msgstr "As opções nesta página são destinados somente para o uso de usuários avançados." + +#: usr/local/www/diag_nanobsd.php:136 usr/local/www/diag_nanobsd.php:135 +#: usr/local/www/diag_nanobsd.php:156 usr/local/www/diag_nanobsd.php:147 +msgid "Bootup information" +msgstr "Informação de boot" + +#: usr/local/www/diag_nanobsd.php:139 usr/local/www/diag_nanobsd.php:138 +#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:150 +msgid "NanoBSD Image size" +msgstr "Tamanho da imagem NanoBSD" + +#: usr/local/www/diag_nanobsd.php:145 usr/local/www/diag_nanobsd.php:144 +#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:156 +msgid "Bootup" +msgstr "Bootup" + +#: usr/local/www/diag_nanobsd.php:148 usr/local/www/diag_nanobsd.php:147 +#: usr/local/www/diag_nanobsd.php:168 usr/local/www/diag_nanobsd.php:159 +msgid "Bootup slice is currently:" +msgstr "Bootup slice atualmente é:" + +#: usr/local/www/diag_nanobsd.php:149 usr/local/www/diag_nanobsd.php:148 +#: usr/local/www/diag_nanobsd.php:169 usr/local/www/diag_nanobsd.php:160 +msgid "This will switch the bootup slice to the alternate slice." +msgstr "Isto irá trocar o boot slice para o slice substituto." + +#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:158 +#: usr/local/www/diag_nanobsd.php:217 usr/local/www/diag_nanobsd.php:208 +msgid "Duplicate bootup slice to alternate" +msgstr "Duplicar bootup slice para alternar" + +#: usr/local/www/diag_nanobsd.php:162 usr/local/www/diag_nanobsd.php:161 +#: usr/local/www/diag_nanobsd.php:220 usr/local/www/diag_nanobsd.php:211 +msgid "Duplicate bootup slice" +msgstr "Duplicar bootup slice" + +#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:164 +#: usr/local/www/diag_nanobsd.php:223 usr/local/www/diag_nanobsd.php:214 +msgid "Destination slice:" +msgstr "Fatia de destino:" + +#: usr/local/www/diag_nanobsd.php:172 usr/local/www/diag_nanobsd.php:171 +#: usr/local/www/diag_nanobsd.php:230 usr/local/www/diag_nanobsd.php:221 +msgid "This will duplicate the bootup slice to the alternate slice. Use this if you would like to duplicate the known good working boot partition to the alternate." +msgstr "Isso irá duplicar a fatia de bootup para a alternativa. Use isso se gostaria de duplicar a partição de boot em bom funcionamento conhecida para a alternativa." + +#: usr/local/www/diag_nanobsd.php:182 usr/local/www/diag_nanobsd.php:181 +#: usr/local/www/diag_nanobsd.php:240 usr/local/www/diag_nanobsd.php:231 +msgid "Periodic Data Backup" +msgstr "Cópia de dados periódica" + +#: usr/local/www/diag_nanobsd.php:185 usr/local/www/diag_nanobsd.php:184 +#: usr/local/www/diag_nanobsd.php:243 +msgid "RRD Backup" +msgstr "RRD Backup" + +#: usr/local/www/diag_nanobsd.php:188 usr/local/www/diag_nanobsd.php:205 +#: usr/local/www/diag_nanobsd.php:187 usr/local/www/diag_nanobsd.php:204 +#: usr/local/www/diag_nanobsd.php:246 usr/local/www/diag_nanobsd.php:263 +#: usr/local/www/system_advanced_misc.php:602 +#: usr/local/www/system_advanced_misc.php:618 +#: usr/local/www/system_advanced_misc.php:620 +#: usr/local/www/system_advanced_misc.php:636 +msgid "Frequency:" +msgstr "Frequência:" + +#: usr/local/www/diag_nanobsd.php:190 usr/local/www/diag_nanobsd.php:207 +#: usr/local/www/system_firmware.php:133 +#: usr/local/www/services_dyndns_edit.php:152 +#: usr/local/www/vpn_ipsec_phase1.php:812 +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/system_advanced_firewall.php:410 +#: usr/local/www/firewall_nat_edit.php:796 +#: usr/local/www/vpn_ipsec_phase1.php:825 usr/local/www/diag_nanobsd.php:189 +#: usr/local/www/diag_nanobsd.php:206 usr/local/www/system_firmware.php:140 +#: usr/local/www/firewall_nat_edit.php:795 +#: usr/local/www/vpn_ipsec_phase1.php:822 usr/local/www/diag_nanobsd.php:248 +#: usr/local/www/diag_nanobsd.php:265 usr/local/www/system_firmware.php:135 +#: usr/local/www/services_dyndns_edit.php:214 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/system_advanced_firewall.php:472 +#: usr/local/www/vpn_ipsec_phase1.php:843 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/system_advanced_misc.php:604 +#: usr/local/www/system_advanced_misc.php:620 +#: usr/local/www/system_advanced_firewall.php:473 +#: usr/local/www/firewall_nat_edit.php:803 +#: usr/local/www/services_dyndns_edit.php:217 +#: usr/local/www/system_advanced_misc.php:622 +#: usr/local/www/system_advanced_misc.php:638 +#: usr/local/www/system_advanced_firewall.php:494 +msgid "Disable" +msgstr "Desabilitar" + +#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:209 +#: usr/local/www/diag_nanobsd.php:191 usr/local/www/diag_nanobsd.php:208 +#: usr/local/www/diag_nanobsd.php:250 usr/local/www/diag_nanobsd.php:267 +#: usr/local/www/system_advanced_misc.php:606 +#: usr/local/www/system_advanced_misc.php:622 +#: usr/local/www/system_advanced_misc.php:624 +#: usr/local/www/system_advanced_misc.php:640 +msgid "hour" +msgstr "hora" + +#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:195 +#: usr/local/www/diag_nanobsd.php:254 +#: usr/local/www/system_advanced_misc.php:610 +#: usr/local/www/system_advanced_misc.php:628 +msgid "This will periodically backup the RRD data so it can be restored automatically on the next boot. Keep in mind that the more frequent the backup, the more writes will happen to your media." +msgstr "Isto irá, periodicamente, fazer backup dos dados RRD, então eles pode ser restaurados automaticamente no próximo boot. Tenha em mente que quanto mais frequente o backup, mais escritas serão feitas na midia." + +#: usr/local/www/diag_nanobsd.php:202 usr/local/www/diag_nanobsd.php:201 +#: usr/local/www/diag_nanobsd.php:260 +msgid "DHCP Leases Backup" +msgstr "Backup de Concessões DHCP" + +#: usr/local/www/diag_nanobsd.php:213 usr/local/www/diag_nanobsd.php:212 +#: usr/local/www/diag_nanobsd.php:271 +#: usr/local/www/system_advanced_misc.php:626 +#: usr/local/www/system_advanced_misc.php:644 +msgid "This will periodically backup the DHCP leases data so it can be restored automatically on the next boot. Keep in mind that the more frequent the backup, the more writes will happen to your media." +msgstr "Isto irá, periodicamente, fazer backup dos dados de concessões DHCP, então eles podem ser restaurados automaticamente no próximo boot. Tenha em mente que quanto mais frequente o backup, mais escritas irão ocorrer na midia." + +#: usr/local/www/diag_nanobsd.php:226 usr/local/www/diag_nanobsd.php:225 +#: usr/local/www/diag_nanobsd.php:284 usr/local/www/diag_nanobsd.php:244 +msgid "View upgrade log" +msgstr "Ver log de upgrade" + +#: usr/local/www/diag_nanobsd.php:229 usr/local/www/diag_nanobsd.php:228 +#: usr/local/www/diag_nanobsd.php:287 usr/local/www/diag_nanobsd.php:247 +msgid "View previous upgrade log" +msgstr "Ver log de upgrade anterior" + +#: usr/local/www/diag_packet_capture.php:38 +#: usr/local/www/diag_packet_capture.php:225 +#: usr/local/www/diag_packet_capture.php:246 +#: usr/local/www/diag_packet_capture.php:40 +#: usr/local/www/diag_packet_capture.php:293 +#: usr/local/www/diag_packet_capture.php:311 +msgid "Download Capture" +msgstr "Baixar captura" + +#: usr/local/www/diag_packet_capture.php:41 usr/local/www/fbegin.inc:210 +#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:237 +#: usr/local/www/diag_packet_capture.php:43 usr/local/www/fbegin.inc:229 +msgid "Packet Capture" +msgstr "Captura de pacotes" + +#: usr/local/www/diag_packet_capture.php:71 +#: usr/local/www/diag_packet_capture.php:220 +#: usr/local/www/diag_packet_capture.php:265 +#: usr/local/www/status_dhcp_leases.php:321 +#: usr/local/www/status_dhcpv6_leases.php:363 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/status_dhcpv6_leases.php:484 +#: usr/local/www/status_dhcp_leases.php:342 +#: usr/local/www/diag_packet_capture.php:75 +#: usr/local/www/diag_packet_capture.php:240 +#: usr/local/www/diag_packet_capture.php:294 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:485 +#: usr/local/www/status_dhcp_leases.php:344 +#: usr/local/www/diag_packet_capture.php:129 +#: usr/local/www/diag_packet_capture.php:287 +#: usr/local/www/diag_packet_capture.php:341 +#: usr/local/www/status_dhcpv6_leases.php:411 +#: usr/local/www/status_dhcpv6_leases.php:488 +#: usr/local/www/diag_packet_capture.php:137 +#: usr/local/www/diag_packet_capture.php:305 +#: usr/local/www/diag_packet_capture.php:359 +#: usr/local/www/status_dhcp_leases.php:345 +msgid "Start" +msgstr "Iniciar" + +#: usr/local/www/diag_packet_capture.php:78 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:222 +#: usr/local/www/diag_packet_capture.php:82 +#: usr/local/www/diag_packet_capture.php:239 +#: usr/local/www/diag_packet_capture.php:242 +#: usr/local/www/diag_packet_capture.php:136 +#: usr/local/www/diag_packet_capture.php:286 +#: usr/local/www/diag_packet_capture.php:289 +#: usr/local/www/diag_packet_capture.php:144 +#: usr/local/www/diag_packet_capture.php:304 +#: usr/local/www/diag_packet_capture.php:307 +msgid "Stop" +msgstr "Parar" + +#: usr/local/www/diag_packet_capture.php:116 +#: usr/local/www/diag_packet_capture.php:120 +#: usr/local/www/diag_packet_capture.php:178 +#: usr/local/www/diag_packet_capture.php:186 +msgid "Packet capture" +msgstr "Captura de pacotes" + +#: usr/local/www/diag_packet_capture.php:141 +#: usr/local/www/diag_packet_capture.php:145 +#: usr/local/www/diag_packet_capture.php:192 +#: usr/local/www/diag_packet_capture.php:200 +msgid "Select the interface on which to capture traffic." +msgstr "Selecione a interface onde capturar o tráfego." + +#: usr/local/www/diag_packet_capture.php:145 +#: usr/local/www/system_gateways_edit.php:376 +#: usr/local/www/diag_packet_capture.php:149 +#: usr/local/www/system_gateways_edit.php:482 +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/system_gateways_edit.php:484 +#: usr/local/www/diag_packet_capture.php:212 +#: usr/local/www/system_gateways_edit.php:514 +msgid "Address Family" +msgstr "Família de Endereços" + +#: usr/local/www/diag_packet_capture.php:152 +#: usr/local/www/diag_packet_capture.php:156 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:219 +msgid "Select the type of traffic to be captured, either Any, IPv4 only or IPv6 only." +msgstr "Selecione o tipo de tráfego a ser capturado, Qualquer um, IPv4 apenas ou IPv6 apenas." + +#: usr/local/www/diag_packet_capture.php:156 +#: usr/local/www/diag_packet_capture.php:176 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/diag_packet_capture.php:239 +msgid "Host Address" +msgstr "Endereço do Host" + +#: usr/local/www/diag_packet_capture.php:159 +#: usr/local/www/diag_packet_capture.php:179 +#: usr/local/www/diag_packet_capture.php:226 +#: usr/local/www/diag_packet_capture.php:242 +msgid "This value is either the Source or Destination IP address or subnet in CIDR notation. The packet capture will look for this address in either field." +msgstr "Este campo é o endereço IP tanto de Origem como Destino ou subrede na notação CIDR. A captura de pacotes irá observar os dois campos por este endereço." + +#: usr/local/www/diag_packet_capture.php:160 +#: usr/local/www/diag_packet_capture.php:180 +#: usr/local/www/diag_packet_capture.php:227 +#: usr/local/www/diag_packet_capture.php:243 +msgid "This value can be a domain name or IP address, or subnet in CIDR notation." +msgstr "Este valor pode ser um nome de domínio, um endereço IP ou uma subrede no formato CIDR." + +#: usr/local/www/diag_packet_capture.php:161 +#: usr/local/www/diag_packet_capture.php:181 +#: usr/local/www/diag_packet_capture.php:228 +#: usr/local/www/diag_packet_capture.php:244 +msgid "If you leave this field blank, all packets on the specified interface will be captured." +msgstr "Se você deixar esse campo em branco, todos os pacotes na interface especificada serão capturados." + +#: usr/local/www/diag_packet_capture.php:168 +#: usr/local/www/diag_packet_capture.php:188 +#: usr/local/www/diag_packet_capture.php:235 +#: usr/local/www/diag_packet_capture.php:251 +msgid "The port can be either the source or destination port. The packet capture will look for this port in either field." +msgstr "A porta pode ser também a porta de destino ou origem. A captura de pacotes irá procurar por essa porta em qualquer campo." + +#: usr/local/www/diag_packet_capture.php:169 +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/diag_packet_capture.php:236 +#: usr/local/www/diag_packet_capture.php:252 +msgid "Leave blank if you do not want to filter by port." +msgstr "Deixe em branco se você não desejar filtrar por porta." + +#: usr/local/www/diag_packet_capture.php:173 +#: usr/local/www/diag_packet_capture.php:193 +#: usr/local/www/diag_packet_capture.php:240 +#: usr/local/www/diag_packet_capture.php:256 +msgid "Packet Length" +msgstr "Tamanho do Pacote" + +#: usr/local/www/diag_packet_capture.php:176 +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/diag_packet_capture.php:243 +#: usr/local/www/diag_packet_capture.php:259 +msgid "The Packet length is the number of bytes of each packet that will be captured. Default value is 0, which will capture the entire frame regardless of its size." +msgstr "O tamanho do pacote é o número de bytes de cada pacote que será capturado. O valor padrão é 0, o qual irá capturar todo o quadro independentemente do seu tamanho." + +#: usr/local/www/diag_packet_capture.php:180 usr/local/www/diag_ping.php:55 +#: usr/local/www/diag_ping.php:108 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/services_captiveportal_vouchers_edit.php:189 +#: usr/local/www/diag_packet_capture.php:200 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_captiveportal_vouchers_edit.php:187 +#: usr/local/www/diag_packet_capture.php:247 +#: usr/local/www/diag_packet_capture.php:263 usr/local/www/diag_ping.php:57 +#: usr/local/www/diag_ping.php:129 +msgid "Count" +msgstr "Contagem" + +#: usr/local/www/diag_packet_capture.php:183 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:250 +#: usr/local/www/diag_packet_capture.php:266 +msgid "This is the number of packets the packet capture will grab. Default value is 100." +msgstr "Esse é o número de pacotes que a captura de pacotes irá pegar. O valor padrão é 100." + +#: usr/local/www/diag_packet_capture.php:183 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:250 +#: usr/local/www/diag_packet_capture.php:266 +msgid "Enter 0 (zero) for no count limit." +msgstr "Digite 0 (zero) para não ter limite de contagem." + +#: usr/local/www/diag_packet_capture.php:186 +#: usr/local/www/diag_packet_capture.php:206 +#: usr/local/www/diag_packet_capture.php:253 +#: usr/local/www/diag_packet_capture.php:270 +msgid "Level of Detail" +msgstr "Nível de detalhe" + +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/diag_packet_capture.php:209 +#: usr/local/www/diag_packet_capture.php:256 +#: usr/local/www/diag_packet_capture.php:273 +msgid "Normal" +msgstr "Normal" + +#: usr/local/www/diag_packet_capture.php:190 +#: usr/local/www/diag_packet_capture.php:210 +#: usr/local/www/diag_packet_capture.php:257 +#: usr/local/www/diag_packet_capture.php:274 +msgid "Medium" +msgstr "Médio" + +#: usr/local/www/diag_packet_capture.php:191 +#: usr/local/www/diag_packet_capture.php:211 +#: usr/local/www/diag_packet_capture.php:258 +#: usr/local/www/diag_packet_capture.php:275 +msgid "High" +msgstr "Alto" + +#: usr/local/www/diag_packet_capture.php:192 +#: usr/local/www/diag_packet_capture.php:212 +#: usr/local/www/diag_packet_capture.php:259 +#: usr/local/www/diag_packet_capture.php:276 +msgid "Full" +msgstr "Total" + +#: usr/local/www/diag_packet_capture.php:194 +#: usr/local/www/diag_packet_capture.php:214 +#: usr/local/www/diag_packet_capture.php:261 +#: usr/local/www/diag_packet_capture.php:278 +msgid "This is the level of detail that will be displayed after hitting 'Stop' when the packets have been captured." +msgstr "Este é o nível de detalhes que será exibido após apertar 'Stop', quando os pacotes forem capturados." + +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/diag_packet_capture.php:216 +#: usr/local/www/diag_packet_capture.php:263 +#: usr/local/www/diag_packet_capture.php:280 +msgid "This option does not affect the level of detail when downloading the packet capture." +msgstr "Essa opção não afeta o nível de detalhe quando baixar a captura de pacote." + +#: usr/local/www/diag_packet_capture.php:199 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:266 +#: usr/local/www/diag_packet_capture.php:284 +msgid "Reverse DNS Lookup" +msgstr "DNS Lookup Reverso" + +#: usr/local/www/diag_packet_capture.php:202 +#: usr/local/www/diag_packet_capture.php:222 +#: usr/local/www/diag_packet_capture.php:269 +#: usr/local/www/diag_packet_capture.php:287 +msgid "This check box will cause the packet capture to perform a reverse DNS lookup associated with all IP addresses." +msgstr "Essa caixa de seleção irá fazer com que a captura de pacote realize um consulta de DNS reversa associada com todos os endereços IP." + +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/diag_packet_capture.php:270 +#: usr/local/www/diag_packet_capture.php:288 +msgid "This option can cause delays for large packet captures." +msgstr "Esta opção pode causar atrasos na captura de grandes pacotes." + +#: usr/local/www/diag_packet_capture.php:226 +#: usr/local/www/diag_packet_capture.php:247 +#: usr/local/www/diag_packet_capture.php:294 +#: usr/local/www/diag_packet_capture.php:312 +msgid "The packet capture file was last updated:" +msgstr "A última atualização da captura de pacotes foi:" + +#: usr/local/www/diag_packet_capture.php:239 +#: usr/local/www/diag_packet_capture.php:267 +#: usr/local/www/diag_packet_capture.php:260 +#: usr/local/www/diag_packet_capture.php:296 +#: usr/local/www/diag_packet_capture.php:307 +#: usr/local/www/diag_packet_capture.php:343 +#: usr/local/www/diag_packet_capture.php:325 +#: usr/local/www/diag_packet_capture.php:361 +msgid "Packet Capture is running." +msgstr "Captura de pacotes está em execução." + +#: usr/local/www/diag_packet_capture.php:272 +#: usr/local/www/diag_packet_capture.php:301 +#: usr/local/www/diag_packet_capture.php:347 +#: usr/local/www/diag_packet_capture.php:365 +msgid "Packet Capture stopped." +msgstr "Captura de pacotes parado." + +#: usr/local/www/diag_packet_capture.php:272 +#: usr/local/www/diag_packet_capture.php:301 +#: usr/local/www/diag_packet_capture.php:347 +#: usr/local/www/diag_packet_capture.php:365 +msgid "Packets Captured:" +msgstr "Pacotes capturados:" + +#: usr/local/www/crash_reporter.php:68 +msgid "Unfortunately we have detected a programming bug." +msgstr "Infelizmente nós detectamos um erro de programação." + +#: usr/local/www/crash_reporter.php:69 +msgid "Would you like to submit the programming debug logs to the pfSense developers for inspection?" +msgstr "Você gostaria de enviar os logs de depuração de programação para os desenvolvedores do pfSense para inspeção?" + +#: usr/local/www/crash_reporter.php:71 +msgid "Please double check the contents to ensure you are comfortable sending this information before clicking Yes." +msgstr "Por favor, verifique novamente o conteúdo para garantir que você está confortável enviando estas informações antes de clicar Sim." + +#: usr/local/www/crash_reporter.php:73 +msgid "Contents of crash reports" +msgstr "Conteúdo dos relatórios de falhas" + +#: usr/local/www/crash_reporter.php:76 +msgid " - Submit this to the developers for inspection" +msgstr "- Enviar isto para os desenvolvedores inspecionarem" + +#: usr/local/www/crash_reporter.php:77 +msgid " - Just delete the crash report and take me back to the Dashboard" +msgstr "- Apenas apague o relatório de falhas e me mande de volta para o Dashboard" + +#: usr/local/www/crash_reporter.php:82 +msgid "Crash reporter" +msgstr "Relator de falhas" + +#: usr/local/www/crash_reporter.php:101 usr/local/www/crash_reporter.php:103 +msgid "Processing..." +msgstr "Processando..." + +#: usr/local/www/crash_reporter.php:108 usr/local/www/crash_reporter.php:110 +#: usr/local/www/crash_reporter.php:112 +msgid "Uploading..." +msgstr "Enviando..." + +#: usr/local/www/crash_reporter.php:116 +#: usr/local/www/services_captiveportal_zones_edit.php:115 +#: usr/local/www/crash_reporter.php:120 +#: usr/local/www/services_captiveportal_zones_edit.php:117 +#: usr/local/www/crash_reporter.php:122 +msgid "Continue" +msgstr "Continue" + +#: usr/local/www/crash_reporter.php:116 usr/local/www/crash_reporter.php:120 +#: usr/local/www/crash_reporter.php:122 +msgid " and delete crash report files from local disk." +msgstr "e apagar relatório do disco local." + +#: usr/local/www/diag_authentication.php:52 +msgid "is not a valid authentication server" +msgstr "não é um servidor de autenticação válido" + +#: usr/local/www/diag_authentication.php:55 +msgid "A username and password must be specified." +msgstr "Um nome de usuário e senha devem ser especificados." + +#: usr/local/www/diag_authentication.php:59 +msgid "authenticated successfully." +msgstr "autenticado com sucesso." + +#: usr/local/www/diag_authentication.php:61 +msgid "This user is a member of these groups" +msgstr "Este usuário é um membro destes grupos" + +#: usr/local/www/diag_authentication.php:65 +msgid "Authentication failed." +msgstr "Autenticação falhou." + +#: usr/local/www/diag_authentication.php:69 usr/local/www/interfaces.php:2325 +#: usr/local/www/services_captiveportal.php:578 +#: usr/local/www/services_captiveportal.php:893 usr/local/www/fbegin.inc:189 +#: usr/local/www/fbegin.inc:207 usr/local/www/services_captiveportal.php:583 +#: usr/local/www/services_captiveportal.php:938 +#: usr/local/www/interfaces.php:2505 usr/local/www/fbegin.inc:215 +#: usr/local/www/services_captiveportal.php:581 +#: usr/local/www/services_captiveportal.php:934 +#: usr/local/www/interfaces.php:2493 +#: usr/local/www/services_captiveportal.php:575 +#: usr/local/www/services_captiveportal.php:936 usr/local/www/fbegin.inc:206 +#: usr/local/www/interfaces.php:2523 +#: usr/local/www/services_captiveportal.php:591 +#: usr/local/www/services_captiveportal.php:952 +#: usr/local/www/interfaces.php:2569 usr/local/www/interfaces.php:2558 +#: usr/local/www/interfaces.php:2594 +msgid "Authentication" +msgstr "Autenticação" + +#: usr/local/www/diag_authentication.php:90 +#: usr/local/www/system_authservers.php:82 +#: usr/local/www/system_usermanager_settings.php:140 +#: usr/local/www/diag_authentication.php:91 +#: usr/local/www/system_authservers.php:83 +#: usr/local/www/system_usermanager_settings.php:143 +msgid "Authentication Server" +msgstr "Servidor de autenticação" + +#: usr/local/www/diag_authentication.php:106 +#: usr/local/www/status_captiveportal.php:162 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/interfaces.php:1724 usr/local/www/interfaces.php:1789 +#: usr/local/www/interfaces.php:1895 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:510 +#: usr/local/www/vpn_pptp_users.php:98 +#: usr/local/www/vpn_pptp_users_edit.php:76 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:146 +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:213 +#: usr/local/www/system_usermanager.php:177 +#: usr/local/www/system_usermanager.php:182 +#: usr/local/www/system_usermanager.php:187 +#: usr/local/www/system_usermanager.php:475 +#: usr/local/www/system_usermanager.php:787 +#: usr/local/www/vpn_l2tp_users.php:101 +#: usr/local/www/vpn_l2tp_users_edit.php:78 +#: usr/local/www/vpn_l2tp_users_edit.php:81 +#: usr/local/www/vpn_l2tp_users_edit.php:154 +#: usr/local/www/vpn_openvpn_client.php:531 +#: usr/local/www/vpn_pppoe_edit.php:536 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:95 +#: usr/local/www/services_dyndns_edit.php:99 +#: usr/local/www/services_dyndns_edit.php:296 +#: usr/local/www/system_usermanager.php:473 +#: usr/local/www/system_usermanager.php:785 +#: usr/local/www/firewall_aliases_edit.php:473 +#: usr/local/www/interfaces.php:1902 usr/local/www/interfaces.php:1967 +#: usr/local/www/interfaces.php:2073 usr/local/www/vpn_openvpn_client.php:536 +#: usr/local/www/vpn_pppoe_edit.php:537 +#: usr/local/www/system_usermanager.php:786 +#: usr/local/www/interfaces_ppps_edit.php:511 +#: usr/local/www/firewall_aliases_edit.php:475 +#: usr/local/www/vpn_l2tp_users.php:102 +#: usr/local/www/diag_authentication.php:107 +#: usr/local/www/vpn_pptp_users_edit.php:147 usr/local/www/interfaces.php:1890 +#: usr/local/www/interfaces.php:1955 usr/local/www/interfaces.php:2061 +#: usr/local/www/vpn_openvpn_client.php:554 +#: usr/local/www/vpn_l2tp_users_edit.php:79 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:155 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97 +#: usr/local/www/vpn_pptp_users.php:99 +#: usr/local/www/vpn_openvpn_client.php:573 +#: usr/local/www/services_dyndns_edit.php:300 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:517 +#: usr/local/www/vpn_pppoe_edit.php:540 +#: usr/local/www/status_captiveportal.php:148 +#: usr/local/www/interfaces.php:1914 usr/local/www/interfaces.php:1982 +#: usr/local/www/interfaces.php:2091 +#: usr/local/www/services_dyndns_edit.php:100 +#: usr/local/www/services_dyndns_edit.php:308 +#: usr/local/www/firewall_aliases_edit.php:497 +#: usr/local/www/interfaces.php:1960 usr/local/www/interfaces.php:2028 +#: usr/local/www/interfaces.php:2137 +#: usr/local/www/interfaces_ppps_edit.php:515 +#: usr/local/www/interfaces.php:1948 usr/local/www/interfaces.php:2017 +#: usr/local/www/interfaces.php:2126 +#: usr/local/www/services_dyndns_edit.php:309 +#: usr/local/www/firewall_aliases_edit.php:496 +#: usr/local/www/interfaces.php:1984 usr/local/www/interfaces.php:2053 +#: usr/local/www/interfaces.php:2162 +msgid "Username" +msgstr "Usuário" + +#: usr/local/www/diag_authentication.php:112 usr/local/www/interfaces.php:1730 +#: usr/local/www/interfaces.php:1795 usr/local/www/interfaces.php:1901 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:516 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:151 +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:220 +#: usr/local/www/system_advanced_notifications.php:192 +#: usr/local/www/system_usermanager.php:183 +#: usr/local/www/system_usermanager.php:188 +#: usr/local/www/system_usermanager.php:482 +#: usr/local/www/system_usermanager_passwordmg.php:50 +#: usr/local/www/system_usermanager_passwordmg.php:98 +#: usr/local/www/system_usermanager_passwordmg.php:101 +#: usr/local/www/vpn_l2tp_users_edit.php:81 +#: usr/local/www/vpn_l2tp_users_edit.php:159 +#: usr/local/www/vpn_openvpn_client.php:541 +#: usr/local/www/vpn_pppoe_edit.php:537 +#: usr/local/www/services_dyndns_edit.php:97 +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/system_usermanager.php:480 +#: usr/local/www/system_advanced_notifications.php:201 +#: usr/local/www/interfaces.php:1908 usr/local/www/interfaces.php:1973 +#: usr/local/www/interfaces.php:2079 usr/local/www/vpn_openvpn_client.php:546 +#: usr/local/www/vpn_pppoe_edit.php:538 +#: usr/local/www/interfaces_ppps_edit.php:517 +#: usr/local/www/system_usermanager_passwordmg.php:99 +#: usr/local/www/system_usermanager_passwordmg.php:102 +#: usr/local/www/diag_authentication.php:113 +#: usr/local/www/vpn_pptp_users_edit.php:152 usr/local/www/interfaces.php:1896 +#: usr/local/www/interfaces.php:1961 usr/local/www/interfaces.php:2067 +#: usr/local/www/vpn_openvpn_client.php:564 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:160 +#: usr/local/www/vpn_openvpn_client.php:583 +#: usr/local/www/services_dyndns_edit.php:309 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:523 +#: usr/local/www/vpn_pppoe_edit.php:541 +#: usr/local/www/system_usermanager_passwordmg.php:104 +#: usr/local/www/system_usermanager_passwordmg.php:107 +#: usr/local/www/interfaces.php:1920 usr/local/www/interfaces.php:1988 +#: usr/local/www/interfaces.php:2097 usr/local/www/services_dyndns_edit.php:98 +#: usr/local/www/services_dyndns_edit.php:317 +#: usr/local/www/interfaces.php:1966 usr/local/www/interfaces.php:2034 +#: usr/local/www/interfaces.php:2143 +#: usr/local/www/interfaces_ppps_edit.php:521 +#: usr/local/www/interfaces.php:1954 usr/local/www/interfaces.php:2023 +#: usr/local/www/interfaces.php:2132 +#: usr/local/www/services_dyndns_edit.php:318 +#: usr/local/www/system_advanced_notifications.php:223 +#: usr/local/www/interfaces.php:1990 usr/local/www/interfaces.php:2059 +#: usr/local/www/interfaces.php:2168 +msgid "Password" +msgstr "Senha" + +#: usr/local/www/diag_authentication.php:120 usr/local/www/diag_smart.php:346 +#: usr/local/www/diag_authentication.php:121 +#: usr/local/www/diag_testport.php:179 usr/local/www/diag_smart.php:367 +#: usr/local/www/diag_testport.php:181 +msgid "Test" +msgstr "Teste" + +#: usr/local/www/services_dyndns.php:76 usr/local/www/services_dyndns.php:85 +#: usr/local/www/services_dyndns.php:64 usr/local/www/services_dyndns.php:60 +msgid "Dynamic DNS clients" +msgstr "Clientes DNS dinâmicos" + +#: usr/local/www/services_dyndns.php:89 usr/local/www/services_rfc2136.php:68 +#: usr/local/www/services_dyndns.php:98 usr/local/www/services_dyndns.php:78 +#: usr/local/www/services_dyndns.php:74 +msgid "DynDns" +msgstr "DNS Dinâmico" + +#: usr/local/www/services_dyndns.php:90 usr/local/www/services_rfc2136.php:69 +#: usr/local/www/services_dyndns.php:99 usr/local/www/services_dyndns.php:79 +#: usr/local/www/services_dyndns.php:75 +msgid "RFC 2136" +msgstr "RFC 2136" + +#: usr/local/www/services_dyndns.php:100 usr/local/www/status_services.php:244 +#: usr/local/www/services_dyndns.php:109 usr/local/www/status_services.php:240 +#: usr/local/www/status_services.php:238 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:52 +#: usr/local/www/services_dyndns.php:90 usr/local/www/status_services.php:79 +#: usr/local/www/status_openvpn.php:279 usr/local/www/status_openvpn.php:340 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:79 +#: usr/local/www/services_dyndns.php:86 +msgid "Service" +msgstr "Serviço" + +#: usr/local/www/services_dyndns.php:101 usr/local/www/interfaces.php:1612 +#: usr/local/www/system.php:113 usr/local/www/system.php:254 +#: usr/local/www/services_dhcp.php:892 +#: usr/local/www/services_dhcp_edit.php:228 +#: usr/local/www/services_captiveportal_hostname.php:122 +#: usr/local/www/services_captiveportal_hostname_edit.php:176 +#: usr/local/www/services_captiveportal_hostname_edit.php:180 +#: usr/local/www/diag_arp.php:315 usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:184 +#: usr/local/www/services_rfc2136.php:79 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:146 +#: usr/local/www/status_dhcp_leases.php:320 usr/local/www/diag_ndp.php:131 +#: usr/local/www/services_dhcpv6.php:805 +#: usr/local/www/services_dhcpv6_edit.php:205 +#: usr/local/www/services_dyndns_edit.php:95 +#: usr/local/www/services_dyndns_edit.php:267 +#: usr/local/www/services_dhcpv6_edit.php:208 +#: usr/local/www/status_dhcp_leases.php:341 +#: usr/local/www/services_dyndns.php:110 usr/local/www/services_dhcp.php:930 +#: usr/local/www/services_dhcp_edit.php:231 usr/local/www/interfaces.php:1690 +#: usr/local/www/system.php:114 usr/local/www/system.php:265 +#: usr/local/www/services_dhcpv6.php:900 +#: usr/local/www/services_dhcpv6_edit.php:210 +#: usr/local/www/services_captiveportal_hostname_edit.php:174 +#: usr/local/www/services_captiveportal_hostname_edit.php:178 +#: usr/local/www/services_captiveportal_hostname.php:120 +#: usr/local/www/status_dhcp_leases.php:343 +#: usr/local/www/services_dhcp.php:1134 +#: usr/local/www/services_dhcp_edit.php:233 usr/local/www/interfaces.php:1678 +#: usr/local/www/system.php:107 usr/local/www/system.php:258 +#: usr/local/www/services_dhcpv6.php:831 usr/local/www/services_rfc2136.php:80 +#: usr/local/www/services_dhcpv6_edit.php:213 +#: usr/local/www/services_dyndns_edit.php:271 +#: usr/local/www/services_dhcp_edit.php:361 +#: usr/local/www/services_dhcp.php:1153 usr/local/www/services_dhcpv6.php:852 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:53 +#: usr/local/www/services_dyndns.php:91 +#: usr/local/www/services_dyndns_edit.php:96 +#: usr/local/www/services_dyndns_edit.php:273 +#: usr/local/www/services_dhcp.php:1173 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:80 +#: usr/local/www/services_dyndns.php:87 usr/local/www/interfaces.php:1736 +#: usr/local/www/interfaces.php:1728 usr/local/www/services_rfc2136.php:81 +#: usr/local/www/services_dyndns_edit.php:274 +#: usr/local/www/services_dhcp.php:1185 +#: usr/local/www/status_dhcp_leases.php:344 +#: usr/local/www/services_rfc2136_edit.php:72 +#: usr/local/www/services_rfc2136_edit.php:151 +#: usr/local/www/interfaces.php:1741 +msgid "Hostname" +msgstr "Hostname" + +#: usr/local/www/services_dyndns.php:102 usr/local/www/services_dyndns.php:111 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:54 +#: usr/local/www/services_dyndns.php:92 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:81 +#: usr/local/www/services_dyndns.php:88 usr/local/www/services_rfc2136.php:82 +msgid "Cached IP" +msgstr "IP em cache" + +#: usr/local/www/services_dyndns.php:151 usr/local/www/services_wol.php:188 +#: usr/local/www/firewall_virtual_ip.php:221 +#: usr/local/www/system_advanced_sysctl.php:199 +#: usr/local/www/services_captiveportal_zones.php:89 +#: usr/local/www/services_dyndns.php:172 +#: usr/local/www/services_captiveportal_zones.php:90 +#: usr/local/www/firewall_virtual_ip.php:227 +#: usr/local/www/firewall_virtual_ip.php:247 +#: usr/local/www/services_dyndns.php:171 usr/local/www/services_dyndns.php:167 +#: usr/local/www/firewall_virtual_ip.php:270 +#: usr/local/www/firewall_virtual_ip.php:278 +#: usr/local/www/services_dyndns.php:178 +msgid "Do you really want to delete this entry?" +msgstr "Você realmente quer apagar essa entrada?" + +#: usr/local/www/services_dyndns.php:162 usr/local/www/services_dyndns.php:183 +#: usr/local/www/services_dyndns.php:179 usr/local/www/services_dyndns.php:190 +msgid "IP addresses appearing in green are up to date with Dynamic DNS provider." +msgstr "Endereços IP que aparecem em verde estão atualizados com o fornecedor de DNS Dinâmico." + +#: usr/local/www/graph_cpu.php:83 +msgid "Cannot get CPU load" +msgstr "Não pôde obter carregamento de CPU" + +#: usr/local/www/graph_cpu.php:84 usr/local/www/graph.php:123 +msgid "Collecting initial data, please wait" +msgstr "Coletando dados iniciais, por favor aguarde" + +#: usr/local/www/graph_cpu.php:96 usr/local/www/graph.php:135 +msgid "No URL for getURL" +msgstr "Nenhuma URL para getURL" + +#: usr/local/www/graph_cpu.php:103 usr/local/www/graph.php:142 +msgid "No callback function for getURL" +msgstr "Nenhuma função de callback para getURL" + +#: usr/local/www/graph_cpu.php:119 usr/local/www/graph.php:158 +msgid "Both getURL and XMLHttpRequest are undefined" +msgstr "Ambas getURL e XMLHttpRequest estão indefinidas" + +#: usr/local/www/services_snmp.php:87 usr/local/www/services_snmp.php:91 +msgid "Invalid character '#' in system location" +msgstr "Caractere '#' inválido no local do sistema" + +#: usr/local/www/services_snmp.php:88 usr/local/www/services_snmp.php:92 +msgid "Invalid character '#' in system contact" +msgstr "Caractere '#' inválido no contato do sistema" + +#: usr/local/www/services_snmp.php:89 usr/local/www/services_snmp.php:93 +msgid "Invalid character '#' in read community string" +msgstr "Caractere inválido '#' em ler string da comunidade" + +#: usr/local/www/services_snmp.php:92 usr/local/www/services_snmp.php:96 +msgid "Community" +msgstr "Comunidade" + +#: usr/local/www/services_snmp.php:96 usr/local/www/services_snmp.php:100 +msgid "Polling Port" +msgstr "Porta de Polling" + +#: usr/local/www/services_snmp.php:103 usr/local/www/services_snmp.php:107 +msgid "Invalid character '#' in SNMP trap string" +msgstr "Caractere inválido '#' na string de SNMP trap" + +#: usr/local/www/services_snmp.php:106 usr/local/www/services_snmp.php:342 +#: usr/local/www/services_snmp.php:340 usr/local/www/services_snmp.php:341 +#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:351 +msgid "Trap server" +msgstr "Servidor Trap" + +#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:114 +msgid "Trap server port" +msgstr "Porta do servidor Trap" + +#: usr/local/www/services_snmp.php:114 usr/local/www/services_snmp.php:361 +#: usr/local/www/services_snmp.php:359 usr/local/www/services_snmp.php:360 +#: usr/local/www/services_snmp.php:118 usr/local/www/services_snmp.php:370 +msgid "Trap string" +msgstr "String do Trap" + +#: usr/local/www/services_snmp.php:159 usr/local/www/fbegin.inc:134 +#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:160 +#: usr/local/www/fbegin.inc:151 usr/local/www/services_snmp.php:165 +msgid "SNMP" +msgstr "SNMP" + +#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:273 +#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:284 +msgid "SNMP Daemon" +msgstr "Daemon SNMP" + +#: usr/local/www/services_snmp.php:281 usr/local/www/services_snmp.php:279 +#: usr/local/www/services_snmp.php:280 usr/local/www/services_snmp.php:290 +msgid "Polling Port " +msgstr "Porta de Polling" + +#: usr/local/www/services_snmp.php:284 usr/local/www/services_snmp.php:282 +#: usr/local/www/services_snmp.php:283 usr/local/www/services_snmp.php:293 +msgid "Enter the port to accept polling events on (default 161)" +msgstr "Informe a porta para aceitar eventos de polling (padrão 161)" + +#: usr/local/www/services_snmp.php:289 usr/local/www/services_snmp.php:287 +#: usr/local/www/services_snmp.php:288 usr/local/www/services_snmp.php:298 +msgid "System location" +msgstr "Localização do sistema" + +#: usr/local/www/services_snmp.php:296 usr/local/www/services_snmp.php:294 +#: usr/local/www/services_snmp.php:295 usr/local/www/services_snmp.php:305 +msgid "System contact" +msgstr "Contato do sistema" + +#: usr/local/www/services_snmp.php:303 usr/local/www/services_snmp.php:301 +#: usr/local/www/services_snmp.php:302 usr/local/www/services_snmp.php:312 +msgid "Read Community String" +msgstr "Ler string de comunidade" + +#: usr/local/www/services_snmp.php:306 usr/local/www/services_snmp.php:304 +#: usr/local/www/services_snmp.php:305 usr/local/www/services_snmp.php:315 +msgid "The community string is like a password, restricting access to querying SNMP to hosts knowing the community string. Use a strong value here to protect from unauthorized information disclosure." +msgstr "A string de comunidade é como uma senha, restringe acesso a SNMP em fila para hosts que conhecem a string de comunidade. Use um valor forte aqui para proteger-se contra divulgação de informações não autorizada." + +#: usr/local/www/services_snmp.php:335 usr/local/www/services_snmp.php:333 +#: usr/local/www/services_snmp.php:334 usr/local/www/services_snmp.php:344 +msgid "SNMP Traps" +msgstr "Traps SNMP" + +#: usr/local/www/services_snmp.php:345 usr/local/www/services_snmp.php:343 +#: usr/local/www/services_snmp.php:344 usr/local/www/services_snmp.php:354 +msgid "Enter trap server name" +msgstr "Informe o nome do servidor Trap" + +#: usr/local/www/services_snmp.php:350 usr/local/www/services_snmp.php:348 +#: usr/local/www/services_snmp.php:349 usr/local/www/services_snmp.php:359 +msgid "Trap server port " +msgstr "Porta de Servidor Trap" + +#: usr/local/www/services_snmp.php:353 usr/local/www/services_snmp.php:351 +#: usr/local/www/services_snmp.php:352 usr/local/www/services_snmp.php:362 +msgid "Enter the port to send the traps to (default 162)" +msgstr "Informe a porta para a qual enviar traps (padrão 162)" + +#: usr/local/www/services_snmp.php:358 usr/local/www/services_snmp.php:356 +#: usr/local/www/services_snmp.php:357 usr/local/www/services_snmp.php:367 +msgid "Enter the SNMP trap string" +msgstr "Informe a string de Trap SNMP" + +#: usr/local/www/services_snmp.php:370 usr/local/www/services_snmp.php:368 +#: usr/local/www/services_snmp.php:369 usr/local/www/services_snmp.php:379 +msgid "Modules" +msgstr "Módulos" + +#: usr/local/www/services_snmp.php:376 usr/local/www/services_snmp.php:374 +#: usr/local/www/services_snmp.php:375 usr/local/www/services_snmp.php:385 +msgid "SNMP Modules" +msgstr "Módulos SNMP" + +#: usr/local/www/services_snmp.php:378 usr/local/www/services_snmp.php:376 +#: usr/local/www/services_snmp.php:377 usr/local/www/services_snmp.php:387 +msgid "MibII" +msgstr "MibII" + +#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:378 +#: usr/local/www/services_snmp.php:379 usr/local/www/services_snmp.php:389 +msgid "Netgraph" +msgstr "Netgraph" + +#: usr/local/www/services_snmp.php:382 usr/local/www/license.php:171 +#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:381 +#: usr/local/www/services_snmp.php:391 +msgid "PF" +msgstr "PF" + +#: usr/local/www/services_snmp.php:384 usr/local/www/services_snmp.php:382 +#: usr/local/www/services_snmp.php:383 usr/local/www/services_snmp.php:393 +msgid "Host Resources (Requires MibII)" +msgstr "Recursos de Host (Requer Mibll)" + +#: usr/local/www/services_snmp.php:391 +msgid "Bind to LAN interface only" +msgstr "Vincular com interfaces LAN somente" + +#: usr/local/www/services_snmp.php:393 +msgid "This option can be useful when trying to access the SNMP agent by the LAN interface's IP address through a VPN tunnel terminated on the WAN interface." +msgstr "Essa opção pode ser útil ao tentar acesso ao agente SNMP através do endereço IP da interface da LAN através o túnel VPN limitado à interface WAN." + +#: usr/local/www/headjs.php:143 usr/local/www/firewall_rules.php:315 +#: usr/local/www/firewall_rules.php:319 usr/local/www/guiconfig.inc:302 +#: usr/local/www/firewall_rules.php:312 usr/local/www/guiconfig.inc:291 +#: usr/local/www/guiconfig.inc:290 usr/local/www/headjs.php:146 +#: usr/local/www/firewall_rules.php:311 usr/local/www/guiconfig.inc:287 +#: usr/local/www/guiconfig.inc:294 +msgid "Apply changes" +msgstr "Aplicar modificações" + +#: usr/local/www/services_wol.php:63 +#, php-format +msgid "Sent magic packet to %1$s (%2$s)%3$s" +msgstr "Enviar pacote mágico para %1$s (%2$s)%3$s" + +#: usr/local/www/services_wol.php:65 +#, php-format +msgid "Please check the %1$ssystem log%2$s, the wol command for %3$s (%4$s) did not complete successfully%5$s" +msgstr "Por favor, verifique o %1$slog de sistema%2$s, o comando wol para %3$s (%4$s) não finalizou com sucesso%5$s" + +#: usr/local/www/services_wol.php:86 usr/local/www/services_wol_edit.php:90 +#: usr/local/www/interfaces.php:541 usr/local/www/services_dhcp_edit.php:129 +#: usr/local/www/services_dhcp_edit.php:131 usr/local/www/interfaces.php:611 +#: usr/local/www/interfaces.php:608 usr/local/www/services_dhcp_edit.php:165 +#: usr/local/www/interfaces.php:623 usr/local/www/interfaces.php:634 +#: usr/local/www/interfaces.php:630 usr/local/www/interfaces.php:635 +msgid "A valid MAC address must be specified." +msgstr "Um endereço MAC válido deve ser especificado." + +#: usr/local/www/services_wol.php:88 +msgid "A valid interface must be specified." +msgstr "Uma interface válida deve ser especificada." + +#: usr/local/www/services_wol.php:94 +msgid "A valid ip could not be found!" +msgstr "Não foi possível encontrar um ip válido!" + +#: usr/local/www/services_wol.php:99 +#, php-format +msgid "Sent magic packet to %s." +msgstr "Enviar pacote mágico para %s." + +#: usr/local/www/services_wol.php:101 +#, php-format +msgid "Please check the %1$ssystem log%2$s, the wol command for %3$s did not complete successfully%4$s" +msgstr "Por favor, verifique o %1$slog de sistema%2$s, o comando wol para %3$s não finalizou com sucesso%4$s" + +#: usr/local/www/services_wol.php:115 usr/local/www/services_wol.php:127 +#: usr/local/www/services_wol_edit.php:112 usr/local/www/diag_backup.php:123 +#: usr/local/www/fbegin.inc:142 usr/local/www/fbegin.inc:159 +#: usr/local/www/diag_backup.php:201 usr/local/www/fbegin.inc:167 +#: usr/local/www/fbegin.inc:158 usr/local/www/diag_backup.php:202 +msgid "Wake on LAN" +msgstr "Wake on LAN" + +#: usr/local/www/services_wol.php:141 +msgid "Choose which interface the host to be woken up is connected to." +msgstr "Escolha em qual interface o host a ser ligado está conectado." + +#: usr/local/www/services_wol.php:144 usr/local/www/services_wol.php:162 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:140 +#: usr/local/www/status_captiveportal.php:161 +#: usr/local/www/interfaces.php:1283 +#: usr/local/www/services_captiveportal_mac.php:167 +#: usr/local/www/services_captiveportal_mac_edit.php:98 +#: usr/local/www/services_captiveportal_mac_edit.php:175 +#: usr/local/www/services_dhcp.php:890 +#: usr/local/www/services_dhcp_edit.php:106 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/status_interfaces.php:178 usr/local/www/diag_arp.php:314 +#: usr/local/www/status_dhcp_leases.php:319 usr/local/www/diag_ndp.php:130 +#: usr/local/www/status_interfaces.php:252 +#: usr/local/www/status_dhcp_leases.php:340 +#: usr/local/www/services_dhcp.php:928 +#: usr/local/www/services_dhcp_edit.php:108 +#: usr/local/www/services_dhcp_edit.php:210 usr/local/www/interfaces.php:1387 +#: usr/local/www/status_interfaces.php:255 +#: usr/local/www/services_captiveportal_mac.php:165 +#: usr/local/www/services_captiveportal_mac_edit.php:96 +#: usr/local/www/services_captiveportal_mac_edit.php:173 +#: usr/local/www/status_dhcp_leases.php:342 +#: usr/local/www/services_dhcp.php:1132 +#: usr/local/www/services_dhcp_edit.php:209 usr/local/www/interfaces.php:1375 +#: usr/local/www/services_dhcp_edit.php:142 +#: usr/local/www/services_dhcp_edit.php:337 +#: usr/local/www/services_dhcp.php:1151 +#: usr/local/www/services_captiveportal_mac_edit.php:180 +#: usr/local/www/status_captiveportal.php:147 +#: usr/local/www/services_captiveportal_mac.php:175 +#: usr/local/www/interfaces.php:1388 usr/local/www/services_dhcp.php:1171 +#: usr/local/www/interfaces.php:1430 usr/local/www/interfaces.php:1425 +#: usr/local/www/services_dhcp.php:1183 +#: usr/local/www/status_dhcp_leases.php:343 usr/local/www/interfaces.php:1438 +msgid "MAC address" +msgstr "Endereço MAC" + +#: usr/local/www/services_wol.php:148 +msgid "Enter a MAC address " +msgstr "Informe o endereço MAC" + +#: usr/local/www/services_wol.php:148 +msgid "in the following format: xx:xx:xx:xx:xx:xx" +msgstr "no seguinte formato: xx:xx:xx:xx:xx:xx" + +#: usr/local/www/services_wol.php:152 usr/local/www/diag_smart.php:244 +#: usr/local/www/diag_smart.php:265 +msgid "Send" +msgstr "Enviar" + +#: usr/local/www/services_wol.php:157 +msgid "Wake all clients at once: " +msgstr "Ligar todos os clientes ao mesmo tempo: " + +#: usr/local/www/services_wol.php:158 +msgid "Or Click the MAC address to wake up an individual device:" +msgstr "Ou clique no endereço MAC para ligar um dispositivo individual:" + +#: usr/local/www/services_wol.php:212 +msgid "This service can be used to wake up (power on) computers by sending special" +msgstr "Esse serviço pode ser usado para acordar (ligar) computadores enviando um especial" + +#: usr/local/www/services_wol.php:212 +msgid "Magic Packets" +msgstr "Pacotes Mágicos" + +#: usr/local/www/services_wol.php:212 +msgid "The NIC in the computer that is to be woken up must support Wake on LAN and has to be configured properly (WOL cable, BIOS settings). " +msgstr "O NIC no computador que seja ligado deve suportar Wake on LAN e tem que estar configurado apropriadamente (cabo WOL, configurações de BIOS). " + +#: usr/local/www/services_wol_edit.php:123 +msgid "Edit WOL entry" +msgstr "Editar entrada WOL" + +#: usr/local/www/services_wol_edit.php:137 +msgid "Choose which interface this host is connected to." +msgstr "Escolha em qual interface esse host está conectado." + +#: usr/local/www/services_wol_edit.php:144 +msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx" +msgstr "Informe um endereço MAC no seguinte formato: xx:xx:xx:xx:xx:xx" + +#: usr/local/www/status_captiveportal.php:58 +msgid "Status: Captive portal" +msgstr "Status: Portal Captive" + +#: usr/local/www/status_captiveportal.php:121 +#: usr/local/www/status_captiveportal_test.php:70 +#: usr/local/www/status_captiveportal_voucher_rolls.php:73 +#: usr/local/www/status_captiveportal_vouchers.php:103 +#: usr/local/www/status_captiveportal_vouchers.php:104 +#: usr/local/www/status_captiveportal_test.php:71 +#: usr/local/www/status_captiveportal_voucher_rolls.php:74 +#: usr/local/www/status_captiveportal_expire.php:69 +#: usr/local/www/status_captiveportal_vouchers.php:108 +#: usr/local/www/status_captiveportal.php:106 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +msgid "Active Users" +msgstr "Usuários ativos" + +#: usr/local/www/status_captiveportal.php:122 +#: usr/local/www/status_captiveportal_test.php:71 +#: usr/local/www/status_captiveportal_voucher_rolls.php:74 +#: usr/local/www/status_captiveportal_vouchers.php:104 +#: usr/local/www/status_captiveportal_vouchers.php:105 +#: usr/local/www/status_captiveportal_test.php:72 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +#: usr/local/www/status_captiveportal_expire.php:70 +#: usr/local/www/status_captiveportal_vouchers.php:109 +#: usr/local/www/status_captiveportal.php:107 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +msgid "Active Vouchers" +msgstr "Vouchers ativos" + +#: usr/local/www/status_captiveportal.php:123 +#: usr/local/www/services_captiveportal_vouchers.php:426 +#: usr/local/www/status_captiveportal_test.php:72 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +#: usr/local/www/status_captiveportal_vouchers.php:105 +#: usr/local/www/services_captiveportal_vouchers.php:433 +#: usr/local/www/status_captiveportal_vouchers.php:106 +#: usr/local/www/services_captiveportal_vouchers.php:446 +#: usr/local/www/status_captiveportal_test.php:73 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +#: usr/local/www/status_captiveportal_expire.php:71 +#: usr/local/www/services_captiveportal_vouchers.php:455 +#: usr/local/www/status_captiveportal_vouchers.php:110 +#: usr/local/www/status_captiveportal.php:108 +#: usr/local/www/status_captiveportal_voucher_rolls.php:77 +#: usr/local/www/services_captiveportal_vouchers.php:460 +msgid "Voucher Rolls" +msgstr "Listas de Voucher" + +#: usr/local/www/status_captiveportal.php:124 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_test.php:73 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +#: usr/local/www/status_captiveportal_vouchers.php:106 +#: usr/local/www/status_captiveportal_vouchers.php:107 +#: usr/local/www/status_captiveportal_test.php:74 +#: usr/local/www/status_captiveportal_voucher_rolls.php:77 +#: usr/local/www/status_captiveportal_expire.php:72 +#: usr/local/www/status_captiveportal_vouchers.php:111 +#: usr/local/www/status_captiveportal.php:109 +#: usr/local/www/status_captiveportal_voucher_rolls.php:78 +msgid "Test Vouchers" +msgstr "Vouchers de teste" + +#: usr/local/www/status_captiveportal.php:135 +#: usr/local/www/status_captiveportal.php:121 +msgid "Captive Portal Zone" +msgstr "Zona Captive Portal" + +#: usr/local/www/status_captiveportal.php:157 +#: usr/local/www/status_captiveportal.php:143 +msgid "Captiveportal status" +msgstr "Status Captive Portal" + +#: usr/local/www/status_captiveportal.php:164 +#: usr/local/www/status_captiveportal.php:167 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:99 +#: usr/local/www/status_captiveportal.php:150 +#: usr/local/www/status_captiveportal.php:153 +msgid "Session start" +msgstr "Início de sessão" + +#: usr/local/www/status_captiveportal.php:165 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:98 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:100 +#: usr/local/www/status_captiveportal.php:151 +msgid "Last activity" +msgstr "Última atividade" + +#: usr/local/www/status_captiveportal.php:181 +#: usr/local/www/status_captiveportal.php:168 +msgid "Do you really want to disconnect this client?" +msgstr "Você realmente deseja desconectar esse cliente?" + +#: usr/local/www/status_captiveportal.php:181 +#: usr/local/www/status_interfaces.php:114 +#: usr/local/www/status_interfaces.php:129 +#: usr/local/www/status_interfaces.php:144 +#: usr/local/www/status_interfaces.php:159 +#: usr/local/www/status_interfaces.php:132 +#: usr/local/www/status_interfaces.php:147 +#: usr/local/www/status_interfaces.php:162 +#: usr/local/www/status_interfaces.php:177 +#: usr/local/www/status_interfaces.php:135 +#: usr/local/www/status_interfaces.php:150 +#: usr/local/www/status_interfaces.php:165 +#: usr/local/www/status_interfaces.php:180 +#: usr/local/www/status_captiveportal.php:168 +msgid "Disconnect" +msgstr "Desconectar" + +#: usr/local/www/status_captiveportal.php:198 +#: usr/local/www/status_captiveportal.php:185 +msgid "Don't show last activity" +msgstr "Não exibir a última atividade" + +#: usr/local/www/status_captiveportal.php:201 +#: usr/local/www/status_captiveportal.php:188 +msgid "Show last activity" +msgstr "Exibir última atividade" + +#: usr/local/www/installer/installer.php:186 +msgid "Could not open /tmp/installer.sh for writing" +msgstr "Não pôde abrir /tmp/installer.sh para escrita" + +#: usr/local/www/installer/installer.php:360 +#: usr/local/www/installer/installer.php:361 +#, php-format +msgid "Beginning installation on disk %s." +msgstr "Iniciando instalação no disco %s." + +#: usr/local/www/installer/installer.php:409 +#: usr/local/www/installer/installer.php:410 +msgid "Installer" +msgstr "Instalador" + +#: usr/local/www/installer/installer.php:916 +#: usr/local/www/installer/installer.php:1104 +#: usr/local/www/installer/installer.php:917 +#: usr/local/www/installer/installer.php:1105 +msgid "ERROR: Could not find any suitable disks for installation." +msgstr "ERRO: Não pôde encontrar um disco apropriado para instalação." + +#: usr/local/www/interfaces_bridge.php:64 +#: usr/local/www/interfaces_bridge.php:68 +msgid "This bridge cannot be deleted because it is assigned as an interface." +msgstr "Essa ponte não pode ser removida porque ela está atribuída como uma interface." + +#: usr/local/www/interfaces_bridge.php:77 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_gif.php:76 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre.php:77 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/diag_backup.php:109 usr/local/www/interfaces.php:1027 +#: usr/local/www/interfaces_assign.php:43 usr/local/www/interfaces_vlan.php:78 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/diag_logs_filter_summary.php:46 +#: usr/local/www/interfaces_lagg.php:82 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq.php:86 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_wireless.php:76 +#: usr/local/www/interfaces_wireless_edit.php:145 +#: usr/local/www/services_captiveportal.php:439 +#: usr/local/www/status_interfaces.php:58 usr/local/www/fbegin.inc:163 +#: usr/local/www/fbegin.inc:327 +#: usr/local/www/services_captiveportal_zones.php:53 +#: usr/local/www/fbegin.inc:180 usr/local/www/fbegin.inc:345 +#: usr/local/www/diag_backup.php:186 +#: usr/local/www/services_captiveportal.php:443 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/interfaces.php:1113 usr/local/www/fbegin.inc:188 +#: usr/local/www/fbegin.inc:291 usr/local/www/status_interfaces.php:60 +#: usr/local/www/services_captiveportal.php:441 +#: usr/local/www/diag_logs_filter_summary.php:47 +#: usr/local/www/interfaces.php:1101 +#: usr/local/www/services_captiveportal_zones.php:54 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_qinq.php:89 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_vlan.php:84 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/interfaces_bridge_edit.php:236 usr/local/www/fbegin.inc:179 +#: usr/local/www/fbegin.inc:283 usr/local/www/interfaces_gre.php:81 +#: usr/local/www/interfaces_gif.php:80 usr/local/www/interfaces.php:1115 +#: usr/local/www/services_captiveportal.php:459 +#: usr/local/www/interfaces.php:1157 usr/local/www/services_dnsmasq.php:262 +#: usr/local/www/interfaces.php:1152 usr/local/www/diag_backup.php:187 +#: usr/local/www/interfaces.php:1165 +msgid "Interfaces" +msgstr "Interfaces" + +#: usr/local/www/interfaces_bridge.php:77 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_bridge_edit.php:236 +msgid "Bridge" +msgstr "Ponte" + +#: usr/local/www/interfaces_bridge.php:89 usr/local/www/interfaces_gif.php:88 +#: usr/local/www/interfaces_gre.php:89 usr/local/www/interfaces_groups.php:75 +#: usr/local/www/interfaces_assign.php:402 +#: usr/local/www/interfaces_vlan.php:90 usr/local/www/interfaces_lagg.php:94 +#: usr/local/www/interfaces_ppps.php:90 usr/local/www/interfaces_qinq.php:98 +#: usr/local/www/interfaces_wireless.php:88 +#: usr/local/www/interfaces_groups.php:76 usr/local/www/interfaces_qinq.php:99 +#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_bridge.php:90 +#: usr/local/www/interfaces_lagg.php:95 usr/local/www/interfaces_gre.php:90 +#: usr/local/www/interfaces_wireless.php:89 +#: usr/local/www/interfaces_assign.php:396 +#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_gif.php:89 +#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_bridge.php:96 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_gif.php:93 +msgid "Interface assignments" +msgstr "Atribuições de interface" + +#: usr/local/www/interfaces_bridge.php:90 usr/local/www/interfaces_gif.php:89 +#: usr/local/www/interfaces_gre.php:90 usr/local/www/interfaces_groups.php:76 +#: usr/local/www/interfaces_assign.php:403 +#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_lagg.php:95 +#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_qinq.php:99 +#: usr/local/www/interfaces_wireless.php:89 +#: usr/local/www/interfaces_groups.php:77 +#: usr/local/www/interfaces_qinq.php:100 usr/local/www/interfaces_ppps.php:92 +#: usr/local/www/interfaces_bridge.php:91 usr/local/www/interfaces_lagg.php:96 +#: usr/local/www/interfaces_gre.php:91 +#: usr/local/www/interfaces_wireless.php:90 +#: usr/local/www/interfaces_assign.php:397 +#: usr/local/www/interfaces_vlan.php:92 usr/local/www/interfaces_gif.php:90 +#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_lagg.php:100 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_bridge.php:97 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_gre.php:95 usr/local/www/interfaces_gif.php:94 +msgid "Interface Groups" +msgstr "Grupos de Interface" + +#: usr/local/www/interfaces_bridge.php:92 usr/local/www/interfaces_gif.php:91 +#: usr/local/www/interfaces_gre.php:92 usr/local/www/interfaces_groups.php:78 +#: usr/local/www/interfaces_assign.php:405 +#: usr/local/www/interfaces_vlan.php:93 usr/local/www/interfaces_lagg.php:97 +#: usr/local/www/interfaces_ppps.php:93 usr/local/www/interfaces_qinq.php:101 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/interfaces_groups.php:79 +#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_ppps.php:94 +#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_lagg.php:98 +#: usr/local/www/interfaces_gre.php:93 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_assign.php:399 +#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_gif.php:92 +#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_lagg.php:102 +#: usr/local/www/interfaces_vlan.php:100 +#: usr/local/www/interfaces_bridge.php:99 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_gif.php:96 +msgid "VLANs" +msgstr "VLANs" + +#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_gif.php:92 +#: usr/local/www/interfaces_gre.php:93 usr/local/www/interfaces_groups.php:79 +#: usr/local/www/interfaces_assign.php:406 +#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_lagg.php:98 +#: usr/local/www/interfaces_ppps.php:94 usr/local/www/interfaces_qinq.php:102 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_groups.php:80 +#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_ppps.php:95 +#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_gre.php:94 +#: usr/local/www/interfaces_wireless.php:93 +#: usr/local/www/interfaces_assign.php:400 +#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_lagg.php:103 +#: usr/local/www/interfaces_vlan.php:101 +#: usr/local/www/interfaces_bridge.php:100 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_gif.php:97 +msgid "QinQs" +msgstr "QinQs" + +#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_groups.php:80 +#: usr/local/www/interfaces_assign.php:407 +#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_ppps.php:95 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq.php:103 +#: usr/local/www/interfaces_wireless.php:93 +#: usr/local/www/interfaces_groups.php:81 +#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_ppps.php:96 +#: usr/local/www/interfaces_bridge.php:95 +#: usr/local/www/interfaces_lagg.php:100 usr/local/www/interfaces_gre.php:95 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_assign.php:401 +#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_qinq.php:107 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_vlan.php:102 +#: usr/local/www/interfaces_bridge.php:101 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_gre.php:99 usr/local/www/interfaces_gif.php:98 +msgid "PPPs" +msgstr "PPPs" + +#: usr/local/www/interfaces_bridge.php:95 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_gre.php:77 usr/local/www/interfaces_gre.php:95 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups.php:81 +#: usr/local/www/interfaces_assign.php:408 +#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_lagg.php:100 +#: usr/local/www/interfaces_ppps.php:96 usr/local/www/interfaces_qinq.php:104 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_groups.php:82 +#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_ppps.php:97 +#: usr/local/www/interfaces_bridge.php:96 +#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_gre.php:96 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_assign.php:402 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_gif.php:95 +#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_lagg.php:105 +#: usr/local/www/interfaces_vlan.php:103 +#: usr/local/www/interfaces_bridge.php:102 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gre.php:100 +#: usr/local/www/interfaces_gif.php:99 +msgid "GRE" +msgstr "GRE" + +#: usr/local/www/interfaces_bridge.php:96 usr/local/www/interfaces_gif.php:76 +#: usr/local/www/interfaces_gif.php:95 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_groups.php:82 +#: usr/local/www/interfaces_assign.php:409 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_lagg.php:101 +#: usr/local/www/interfaces_ppps.php:97 usr/local/www/interfaces_qinq.php:105 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_groups.php:83 +#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_ppps.php:98 +#: usr/local/www/interfaces_bridge.php:97 +#: usr/local/www/interfaces_lagg.php:102 usr/local/www/interfaces_gre.php:97 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_assign.php:403 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_qinq.php:109 usr/local/www/interfaces_lagg.php:106 +#: usr/local/www/interfaces_vlan.php:104 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:103 +#: usr/local/www/interfaces_wireless.php:98 +#: usr/local/www/interfaces_gre.php:101 usr/local/www/interfaces_gif.php:80 +#: usr/local/www/interfaces_gif.php:100 +msgid "GIF" +msgstr "GIF" + +#: usr/local/www/interfaces_bridge.php:97 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_groups.php:83 +#: usr/local/www/interfaces_assign.php:410 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_lagg.php:102 +#: usr/local/www/interfaces_ppps.php:98 usr/local/www/interfaces_qinq.php:106 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_groups.php:84 +#: usr/local/www/interfaces_qinq.php:107 usr/local/www/interfaces_ppps.php:99 +#: usr/local/www/interfaces_bridge.php:98 +#: usr/local/www/interfaces_lagg.php:103 usr/local/www/interfaces_gre.php:98 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_assign.php:404 +#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_qinq.php:110 usr/local/www/interfaces_lagg.php:107 +#: usr/local/www/interfaces_vlan.php:105 +#: usr/local/www/interfaces_bridge.php:104 +#: usr/local/www/interfaces_wireless.php:99 +#: usr/local/www/interfaces_gre.php:102 usr/local/www/interfaces_gif.php:101 +msgid "Bridges" +msgstr "Pontes" + +#: usr/local/www/interfaces_bridge.php:98 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_groups.php:84 +#: usr/local/www/interfaces_assign.php:411 +#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_lagg.php:82 +#: usr/local/www/interfaces_lagg.php:103 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps.php:99 usr/local/www/interfaces_qinq.php:107 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_groups.php:85 +#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_ppps.php:100 +#: usr/local/www/interfaces_bridge.php:99 +#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_gre.php:99 +#: usr/local/www/interfaces_wireless.php:98 +#: usr/local/www/interfaces_assign.php:405 +#: usr/local/www/interfaces_vlan.php:100 usr/local/www/interfaces_gif.php:98 +#: usr/local/www/interfaces_qinq.php:111 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_lagg.php:108 +#: usr/local/www/interfaces_vlan.php:106 +#: usr/local/www/interfaces_bridge.php:105 +#: usr/local/www/interfaces_wireless.php:100 +#: usr/local/www/interfaces_gre.php:103 usr/local/www/interfaces_gif.php:102 +msgid "LAGG" +msgstr "LAGG" + +#: usr/local/www/interfaces_bridge.php:108 +#: usr/local/www/interfaces_groups.php:95 +#: usr/local/www/interfaces_lagg.php:113 +#: usr/local/www/load_balancer_pool_edit.php:257 +#: usr/local/www/system_groupmanager.php:317 +#: usr/local/www/load_balancer_pool_edit.php:274 +#: usr/local/www/interfaces_groups.php:96 +#: usr/local/www/interfaces_bridge.php:109 +#: usr/local/www/interfaces_lagg.php:114 +#: usr/local/www/load_balancer_pool_edit.php:272 +#: usr/local/www/interfaces_lagg.php:118 +#: usr/local/www/interfaces_bridge.php:115 +#: usr/local/www/system_groupmanager.php:320 +msgid "Members" +msgstr "Membros" + +#: usr/local/www/interfaces_bridge.php:135 +#: usr/local/www/interfaces_bridge.php:136 +#: usr/local/www/interfaces_bridge.php:142 +msgid "Do you really want to delete this bridge?" +msgstr "Você realmente quer apagar essa ponte?" + +#: usr/local/www/interfaces_bridge.php:146 +#: usr/local/www/interfaces_bridge.php:147 +#: usr/local/www/interfaces_bridge.php:153 +msgid "Here you can configure bridging of interfaces." +msgstr "Aqui você pode configurar as pontes de interfaces." + +#: usr/local/www/interfaces_bridge_edit.php:111 +#: usr/local/www/interfaces_bridge_edit.php:119 +msgid "Member Interfaces" +msgstr "Interfaces Membros" + +#: usr/local/www/interfaces_bridge_edit.php:116 +#: usr/local/www/interfaces_bridge_edit.php:124 +msgid "Maxage needs to be an integer between 6 and 40." +msgstr "Idade Máx precida ser um inteiro entre 6 e 40." + +#: usr/local/www/interfaces_bridge_edit.php:118 +#: usr/local/www/interfaces_bridge_edit.php:126 +msgid "Maxaddr needs to be an integer." +msgstr "Endereços Máx. precisa ser um inteiro." + +#: usr/local/www/interfaces_bridge_edit.php:120 +#: usr/local/www/interfaces_bridge_edit.php:128 +msgid "Timeout needs to be an integer." +msgstr "Tempo de espera precisa ser um inteiro." + +#: usr/local/www/interfaces_bridge_edit.php:122 +#: usr/local/www/interfaces_bridge_edit.php:130 +msgid "Forward Delay needs to be an integer between 4 and 30." +msgstr "Tempo de reenvio precisa ser um inteiro entre 4 e 30." + +#: usr/local/www/interfaces_bridge_edit.php:124 +#: usr/local/www/interfaces_bridge_edit.php:132 +msgid "Hello time for STP needs to be an integer between 1 and 2." +msgstr "Tempo de Hello para STP precisa ser um inteiro entre 1 e 2." + +#: usr/local/www/interfaces_bridge_edit.php:126 +#: usr/local/www/interfaces_bridge_edit.php:134 +msgid "Priority for STP needs to be an integer between 0 and 61440." +msgstr "Prioridade para STP precisa ser um inteiro entre 0 e 61440." + +#: usr/local/www/interfaces_bridge_edit.php:128 +#: usr/local/www/interfaces_bridge_edit.php:136 +msgid "Transmit Hold Count for STP needs to be an integer between 1 and 10." +msgstr "Contagem de espera de transmissão para STP precisa ser um inteiro entre 1 e 10." + +#: usr/local/www/interfaces_bridge_edit.php:131 +#: usr/local/www/interfaces_bridge_edit.php:139 +msgid "interface priority for STP needs to be an integer between 0 and 240." +msgstr "prioridade de interface para STP precisa ser um inteiro entre 0 e 240." + +#: usr/local/www/interfaces_bridge_edit.php:136 +#: usr/local/www/interfaces_bridge_edit.php:144 +msgid "interface path cost for STP needs to be an integer between 1 and 200000000." +msgstr "custo de caminho de interface para STP precisa ser um inteiro entre 1 e 200000000." + +#: usr/local/www/interfaces_bridge_edit.php:141 +#: usr/local/www/interfaces_bridge_edit.php:149 +msgid "You must select at least 2 member interfaces for a bridge." +msgstr "Você deve selecionar pelo menos 2 interfaces membro para uma ponte." + +#: usr/local/www/interfaces_bridge_edit.php:147 +#: usr/local/www/interfaces_bridge_edit.php:155 +#: usr/local/www/interfaces_bridge_edit.php:157 +msgid "Bridging a wireless interface is only possible in hostap mode." +msgstr "Fazer uma ponte com uma interface sem fio somente é possível no modo hostap." + +#: usr/local/www/interfaces_bridge_edit.php:149 +#: usr/local/www/interfaces_bridge_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:159 +msgid "Span interface cannot be part of the bridge. Remove the span interface from bridge members to continue." +msgstr "Interface Span não pode ser parte de uma ponte. Remova a interface span dos membros da ponte para continuar." + +#: usr/local/www/interfaces_bridge_edit.php:206 +#: usr/local/www/interfaces_gif_edit.php:106 +#: usr/local/www/interfaces_gre_edit.php:108 +#: usr/local/www/interfaces_vlan_edit.php:121 +#: usr/local/www/interfaces_lagg_edit.php:101 +#: usr/local/www/interfaces_bridge_edit.php:215 +#: usr/local/www/interfaces_vlan_edit.php:124 +#: usr/local/www/interfaces_lagg_edit.php:114 +#: usr/local/www/interfaces_gif_edit.php:114 +#: usr/local/www/interfaces_bridge_edit.php:217 +msgid "Error occurred creating interface, please retry." +msgstr "Um erro ocorreu ao criar a interface. Por favor, tente novamente." + +#: usr/local/www/interfaces_bridge_edit.php:253 +#: usr/local/www/interfaces_bridge_edit.php:262 +#: usr/local/www/interfaces_bridge_edit.php:263 +#: usr/local/www/interfaces_bridge_edit.php:264 +#: usr/local/www/interfaces_bridge_edit.php:266 +msgid "Bridge configuration" +msgstr "Configuração de ponte" + +#: usr/local/www/interfaces_bridge_edit.php:256 +#: usr/local/www/interfaces_lagg_edit.php:86 +#: usr/local/www/interfaces_bridge_edit.php:265 +#: usr/local/www/interfaces_bridge_edit.php:266 +#: usr/local/www/interfaces_lagg_edit.php:88 +#: usr/local/www/interfaces_bridge_edit.php:267 +#: usr/local/www/interfaces_bridge_edit.php:269 +msgid "Member interfaces" +msgstr "Interfaces membro" + +#: usr/local/www/interfaces_bridge_edit.php:269 +#: usr/local/www/interfaces_bridge_edit.php:278 +#: usr/local/www/interfaces_bridge_edit.php:279 +#: usr/local/www/interfaces_bridge_edit.php:280 +#: usr/local/www/interfaces_bridge_edit.php:282 +msgid "Interfaces participating in the bridge." +msgstr "Interfaces participando da ponte." + +#: usr/local/www/interfaces_bridge_edit.php:285 +#: usr/local/www/interfaces_bridge_edit.php:294 +#: usr/local/www/interfaces_bridge_edit.php:295 +#: usr/local/www/interfaces_bridge_edit.php:296 +#: usr/local/www/interfaces_bridge_edit.php:298 +msgid "RSTP/STP" +msgstr "RSTP/STP" + +#: usr/local/www/interfaces_bridge_edit.php:288 +#: usr/local/www/interfaces_bridge_edit.php:297 +#: usr/local/www/interfaces_bridge_edit.php:298 +#: usr/local/www/interfaces_bridge_edit.php:299 +#: usr/local/www/interfaces_bridge_edit.php:301 +msgid "Enable spanning tree options for this bridge." +msgstr "Habilitar opções de árvore expansível para essa ponte." + +#: usr/local/www/interfaces_bridge_edit.php:304 +#: usr/local/www/interfaces_bridge_edit.php:313 +#: usr/local/www/interfaces_bridge_edit.php:314 +#: usr/local/www/interfaces_bridge_edit.php:315 +#: usr/local/www/interfaces_bridge_edit.php:317 +msgid "Protocol used for spanning tree." +msgstr "Protocolo usado para árvore expansível." + +#: usr/local/www/interfaces_bridge_edit.php:306 +#: usr/local/www/interfaces_bridge_edit.php:315 +#: usr/local/www/interfaces_bridge_edit.php:316 +#: usr/local/www/interfaces_bridge_edit.php:317 +#: usr/local/www/interfaces_bridge_edit.php:319 +msgid "STP interfaces" +msgstr "Interfaces STP" + +#: usr/local/www/interfaces_bridge_edit.php:320 +#: usr/local/www/interfaces_bridge_edit.php:329 +#: usr/local/www/interfaces_bridge_edit.php:330 +#: usr/local/www/interfaces_bridge_edit.php:331 +#: usr/local/www/interfaces_bridge_edit.php:333 +msgid "Enable Spanning Tree Protocol on interface. The if_bridge(4) driver has support for the IEEE 802.1D Spanning Tree Protocol (STP). STP is used to detect and remove loops in a network topology." +msgstr "Habilitar Protocolo de Árvore Expansível na interface. O driver if_bridge(4) possui suporte para o Protocolo de Árvore Expansível (STP) IEEE 802.1D. STP é usado para detectar e remover loops em uma topologia de rede." + +#: usr/local/www/interfaces_bridge_edit.php:326 +#: usr/local/www/interfaces_bridge_edit.php:335 +#: usr/local/www/interfaces_bridge_edit.php:336 +#: usr/local/www/interfaces_bridge_edit.php:337 +#: usr/local/www/interfaces_bridge_edit.php:339 +msgid "Valid time" +msgstr "Tempo válido" + +#: usr/local/www/interfaces_bridge_edit.php:328 +#: usr/local/www/interfaces_bridge_edit.php:338 +#: usr/local/www/interfaces_bridge_edit.php:347 +#: usr/local/www/interfaces_bridge_edit.php:416 +#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936 +#: usr/local/www/graph.php:120 usr/local/www/services_dhcp.php:679 +#: usr/local/www/services_dhcp.php:689 +#: usr/local/www/services_rfc2136_edit.php:156 +#: usr/local/www/vpn_ipsec_phase1.php:761 +#: usr/local/www/vpn_ipsec_phase1.php:831 +#: usr/local/www/vpn_ipsec_phase2.php:622 +#: usr/local/www/services_dhcpv6.php:624 usr/local/www/services_dhcpv6.php:634 +#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcp.php:702 +#: usr/local/www/interfaces_bridge_edit.php:337 +#: usr/local/www/interfaces_bridge_edit.php:356 +#: usr/local/www/interfaces_bridge_edit.php:425 +#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/interfaces.php:1995 +#: usr/local/www/interfaces.php:2114 usr/local/www/vpn_ipsec_phase1.php:774 +#: usr/local/www/vpn_ipsec_phase1.php:844 +#: usr/local/www/services_dhcpv6.php:692 usr/local/www/services_dhcpv6.php:702 +#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcp.php:878 +#: usr/local/www/interfaces_bridge_edit.php:348 +#: usr/local/www/interfaces_bridge_edit.php:357 +#: usr/local/www/interfaces_bridge_edit.php:426 +#: usr/local/www/vpn_ipsec_phase2.php:744 usr/local/www/interfaces.php:1983 +#: usr/local/www/interfaces.php:2102 usr/local/www/vpn_ipsec_phase1.php:771 +#: usr/local/www/vpn_ipsec_phase1.php:841 +#: usr/local/www/services_dhcpv6.php:623 usr/local/www/services_dhcpv6.php:633 +#: usr/local/www/services_dhcp_edit.php:434 +#: usr/local/www/services_dhcp_edit.php:444 +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcp.php:892 +#: usr/local/www/services_dhcpv6.php:640 usr/local/www/services_dhcpv6.php:650 +#: usr/local/www/interfaces_bridge_edit.php:339 +#: usr/local/www/interfaces_bridge_edit.php:349 +#: usr/local/www/interfaces_bridge_edit.php:358 +#: usr/local/www/interfaces_bridge_edit.php:427 +#: usr/local/www/vpn_ipsec_phase1.php:792 +#: usr/local/www/vpn_ipsec_phase1.php:862 +#: usr/local/www/vpn_ipsec_phase2.php:765 usr/local/www/interfaces.php:2010 +#: usr/local/www/interfaces.php:2132 usr/local/www/services_dhcp.php:902 +#: usr/local/www/services_dhcp.php:912 usr/local/www/interfaces.php:2056 +#: usr/local/www/interfaces.php:2178 +#: usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:351 +#: usr/local/www/interfaces_bridge_edit.php:360 +#: usr/local/www/interfaces_bridge_edit.php:431 +#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167 +#: usr/local/www/services_dhcp.php:914 usr/local/www/services_dhcp.php:924 +#: usr/local/www/services_rfc2136_edit.php:161 +#: usr/local/www/interfaces.php:2081 usr/local/www/interfaces.php:2203 +msgid "seconds" +msgstr "segundos" + +#: usr/local/www/interfaces_bridge_edit.php:331 +#: usr/local/www/interfaces_bridge_edit.php:340 +#: usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:342 +#: usr/local/www/interfaces_bridge_edit.php:344 +msgid "Set the time that a Spanning Tree Protocol configuration is valid. The default is 20 seconds. The minimum is 6 seconds and the maximum is 40 seconds." +msgstr "Configurar o tempo que uma configuração STP é válida. O padrão é 20 segundos. O mínimo é 6 segundos e o máximo e 40 segundos." + +#: usr/local/www/interfaces_bridge_edit.php:336 +#: usr/local/www/interfaces_bridge_edit.php:345 +#: usr/local/www/interfaces_bridge_edit.php:346 +#: usr/local/www/interfaces_bridge_edit.php:347 +#: usr/local/www/interfaces_bridge_edit.php:349 +msgid "Forward time" +msgstr "Tempo de reenvio" + +#: usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:350 +#: usr/local/www/interfaces_bridge_edit.php:351 +#: usr/local/www/interfaces_bridge_edit.php:352 +#: usr/local/www/interfaces_bridge_edit.php:354 +msgid "Set the time that must pass before an interface begins forwarding packets when Spanning Tree is enabled. The default is 15 seconds. The minimum is 4 seconds and the maximum is 30 seconds." +msgstr "Configure o tempo que deve passar antes que uma interface comece a reenviar pacotes quando o Spanning Tree está habilitado. O padrão é 15 segundos. O mínimo é 4 segundos e o máximo é 30 segundos." + +#: usr/local/www/interfaces_bridge_edit.php:345 +#: usr/local/www/interfaces_bridge_edit.php:354 +#: usr/local/www/interfaces_bridge_edit.php:355 +#: usr/local/www/interfaces_bridge_edit.php:356 +#: usr/local/www/interfaces_bridge_edit.php:358 +msgid "Hello time" +msgstr "Hello time" + +#: usr/local/www/interfaces_bridge_edit.php:350 +#: usr/local/www/interfaces_bridge_edit.php:359 +#: usr/local/www/interfaces_bridge_edit.php:360 +#: usr/local/www/interfaces_bridge_edit.php:361 +#: usr/local/www/interfaces_bridge_edit.php:363 +msgid "Set the time between broadcasting of Spanning Tree Protocol configuration messages. The hello time may only be changed when operating in legacy STP mode. The default is 2 seconds. The minimum is 1 second and the maximum is 2 seconds." +msgstr "Configure o tempo entre os broadcasts de mensagems de configuração de Protocolo de Árvore Expansível. O tempo de hello somente pode ser modificado quando operando no modo legado do STP. O padrão é 2 segundos. O mínimo é 1 segundo e o máximo é 2 segundos." + +#: usr/local/www/interfaces_bridge_edit.php:359 +#: usr/local/www/interfaces_bridge_edit.php:368 +#: usr/local/www/interfaces_bridge_edit.php:369 +#: usr/local/www/interfaces_bridge_edit.php:370 +#: usr/local/www/interfaces_bridge_edit.php:372 +msgid "Set the bridge priority for Spanning Tree. The default is 32768. The minimum is 0 and the maximum is 61440." +msgstr "Configure a prioridade da ponte para Árvore Expansível. O padrão é 32768. O mínimo é 0 e o máximo é 61440." + +#: usr/local/www/interfaces_bridge_edit.php:363 +#: usr/local/www/interfaces_bridge_edit.php:372 +#: usr/local/www/interfaces_bridge_edit.php:373 +#: usr/local/www/interfaces_bridge_edit.php:374 +#: usr/local/www/interfaces_bridge_edit.php:376 +msgid "Hold count" +msgstr "Contagem de espera" + +#: usr/local/www/interfaces_bridge_edit.php:368 +#: usr/local/www/interfaces_bridge_edit.php:377 +#: usr/local/www/interfaces_bridge_edit.php:378 +#: usr/local/www/interfaces_bridge_edit.php:379 +msgid "Set the transmit hold count for Spanning Tree. This is the num- ber of packets transmitted before being rate limited. The default is 6. The minimum is 1 and the maximum is 10." +msgstr "Configure a contagem de espera de transmissão para a Árvore Expansível. Esse é o número de pacotes transmitidos antes que seja limitado a uma taxa. O padrão é 6. O mínimo é 1 e o máximo é 10." + +#: usr/local/www/interfaces_bridge_edit.php:382 +msgid "Set the Spanning Tree priority of interface to value. The default is 128. The minimum is 0 and the maximum is 240." +msgstr "Configure a prioridade da Árvore Expansível de uma interface para um valor. O padrão é 128. O mínimo é 0 e o máximo é 240." + +#: usr/local/www/interfaces_bridge_edit.php:386 +#: usr/local/www/interfaces_bridge_edit.php:395 +#: usr/local/www/interfaces_bridge_edit.php:396 +#: usr/local/www/interfaces_bridge_edit.php:397 +#: usr/local/www/interfaces_bridge_edit.php:400 +msgid "Path cost" +msgstr "Custo do caminho" + +#: usr/local/www/interfaces_bridge_edit.php:395 +#: usr/local/www/interfaces_bridge_edit.php:404 +#: usr/local/www/interfaces_bridge_edit.php:405 +#: usr/local/www/interfaces_bridge_edit.php:406 +#: usr/local/www/interfaces_bridge_edit.php:410 +msgid "Set the Spanning Tree path cost of interface to value. The default is calculated from the link speed. To change a previously selected path cost back to automatic, set the cost to 0. The minimum is 1 and the maximum is 200000000." +msgstr "Configure o custo do caminho da Árvore Expansível de uma interface para um valor. O padrão é calculado com base na velocidade do link. Para modificar um custo selecionado anteriormente para automático, configure o custo como 0. O mínimo e 1 e o máximo é 200000000." + +#: usr/local/www/interfaces_bridge_edit.php:404 +#: usr/local/www/interfaces_bridge_edit.php:413 +#: usr/local/www/interfaces_bridge_edit.php:414 +#: usr/local/www/interfaces_bridge_edit.php:415 +#: usr/local/www/interfaces_bridge_edit.php:419 +msgid "Cache size" +msgstr "Tamanho do Cache" + +#: usr/local/www/interfaces_bridge_edit.php:406 +#: usr/local/www/interfaces_bridge_edit.php:415 +#: usr/local/www/interfaces_bridge_edit.php:416 +#: usr/local/www/interfaces_bridge_edit.php:417 +#: usr/local/www/interfaces_bridge_edit.php:421 +msgid "entries" +msgstr "entradas" + +#: usr/local/www/interfaces_bridge_edit.php:408 +#: usr/local/www/interfaces_bridge_edit.php:417 +#: usr/local/www/interfaces_bridge_edit.php:418 +#: usr/local/www/interfaces_bridge_edit.php:419 +#: usr/local/www/interfaces_bridge_edit.php:423 +msgid "Set the size of the bridge address cache to size.\tThe default is .100 entries." +msgstr "Configure o tamanho do endereço de cache da ponte para um tamanho.\tO padrão é 100 entradas." + +#: usr/local/www/interfaces_bridge_edit.php:414 +#: usr/local/www/interfaces_bridge_edit.php:423 +#: usr/local/www/interfaces_bridge_edit.php:424 +#: usr/local/www/interfaces_bridge_edit.php:425 +#: usr/local/www/interfaces_bridge_edit.php:429 +msgid "Cache entry expire time" +msgstr "Tempo de expiração de entrada do Cache" + +#: usr/local/www/interfaces_bridge_edit.php:418 +#: usr/local/www/interfaces_bridge_edit.php:427 +#: usr/local/www/interfaces_bridge_edit.php:428 +#: usr/local/www/interfaces_bridge_edit.php:429 +#: usr/local/www/interfaces_bridge_edit.php:433 +msgid "Set the timeout of address cache entries to this number of seconds. If seconds is zero, then address cache entries will not be expired. The default is 240 seconds." +msgstr "Configure o tempo de expiração de entradas do Cache para esse número em segundos. Se for zero, então as entradas de endereço de cache não expirarão. O padrão é 240 segundos." + +#: usr/local/www/interfaces_bridge_edit.php:425 +#: usr/local/www/interfaces_bridge_edit.php:434 +#: usr/local/www/interfaces_bridge_edit.php:435 +#: usr/local/www/interfaces_bridge_edit.php:436 +#: usr/local/www/interfaces_bridge_edit.php:440 +msgid "Span port" +msgstr "Porta Span" + +#: usr/local/www/interfaces_bridge_edit.php:439 +#: usr/local/www/interfaces_bridge_edit.php:448 +#: usr/local/www/interfaces_bridge_edit.php:449 +#: usr/local/www/interfaces_bridge_edit.php:450 +#: usr/local/www/interfaces_bridge_edit.php:454 +msgid "Add the interface named by interface as a span port on the bridge. Span ports transmit a copy of every frame received by the bridge. This is most useful for snooping a bridged network passively on another host connected to one of the span ports of the bridge." +msgstr "Adicione a interface nomeada pela interface como uma porta span na ponte. Portas Span transmitem uma cópia de cada frame recebido pela ponte. Esse é muito útil para fazer snooping em uma rede com ponte de modo passivo em outro host conectado a uma das portas span da ponte." + +#: usr/local/www/interfaces_bridge_edit.php:448 +#: usr/local/www/interfaces_bridge_edit.php:457 +#: usr/local/www/interfaces_bridge_edit.php:458 +#: usr/local/www/interfaces_bridge_edit.php:459 +#: usr/local/www/interfaces_bridge_edit.php:463 +msgid "The span interface cannot be part of the bridge member interfaces." +msgstr "A interface span não pode ser parte das interfaces membros da ponte." + +#: usr/local/www/interfaces_bridge_edit.php:453 +#: usr/local/www/interfaces_bridge_edit.php:462 +#: usr/local/www/interfaces_bridge_edit.php:463 +#: usr/local/www/interfaces_bridge_edit.php:464 +#: usr/local/www/interfaces_bridge_edit.php:468 +msgid "Edge ports" +msgstr "Portas Edge" + +#: usr/local/www/interfaces_bridge_edit.php:467 +#: usr/local/www/interfaces_bridge_edit.php:476 +#: usr/local/www/interfaces_bridge_edit.php:477 +#: usr/local/www/interfaces_bridge_edit.php:478 +#: usr/local/www/interfaces_bridge_edit.php:482 +msgid "Set interface as an edge port. An edge port connects directly to end stations and cannot create bridging loops in the network; this allows it to transition straight to forwarding." +msgstr "Configura interface como uma porta edge. Uma porta edge conecta-se diretamente com estações fim e não pode criar loops de pontes na rede; isso a permite transicionar diretamente para reenvio." + +#: usr/local/www/interfaces_bridge_edit.php:473 +#: usr/local/www/interfaces_bridge_edit.php:482 +#: usr/local/www/interfaces_bridge_edit.php:483 +#: usr/local/www/interfaces_bridge_edit.php:484 +#: usr/local/www/interfaces_bridge_edit.php:488 +msgid "Auto Edge ports" +msgstr "Portas Edge Auto" + +#: usr/local/www/interfaces_bridge_edit.php:487 +#: usr/local/www/interfaces_bridge_edit.php:496 +#: usr/local/www/interfaces_bridge_edit.php:497 +#: usr/local/www/interfaces_bridge_edit.php:498 +#: usr/local/www/interfaces_bridge_edit.php:502 +msgid "Allow interface to automatically detect edge status. This is the default for all interfaces added to a bridge." +msgstr "Permite uma interface detectar automaticamente o status de edge. Esse é o padrão para todas as interfaces adicionadas à ponte." + +#: usr/local/www/interfaces_bridge_edit.php:492 +#: usr/local/www/interfaces_bridge_edit.php:501 +#: usr/local/www/interfaces_bridge_edit.php:502 +#: usr/local/www/interfaces_bridge_edit.php:503 +#: usr/local/www/interfaces_bridge_edit.php:507 +msgid "This will disable the autoedge status of interfaces." +msgstr "Isso irá desabilitar o status edge automático das interfaces." + +#: usr/local/www/interfaces_bridge_edit.php:496 +#: usr/local/www/interfaces_bridge_edit.php:505 +#: usr/local/www/interfaces_bridge_edit.php:506 +#: usr/local/www/interfaces_bridge_edit.php:507 +#: usr/local/www/interfaces_bridge_edit.php:511 +msgid "PTP ports" +msgstr "Portas PTP" + +#: usr/local/www/interfaces_bridge_edit.php:510 +#: usr/local/www/interfaces_bridge_edit.php:519 +#: usr/local/www/interfaces_bridge_edit.php:520 +#: usr/local/www/interfaces_bridge_edit.php:521 +#: usr/local/www/interfaces_bridge_edit.php:525 +msgid "Set the interface as a point-to-point link. This is required for straight transitions to forwarding and should be enabled on a direct link to another RSTP-capable switch." +msgstr "Configura a interface como um link ponto-a-ponto. Ele é requisitado para encaminhar transições para reenvio e deve ser habilitado em um link direto para outro switch RSTP." + +#: usr/local/www/interfaces_bridge_edit.php:516 +#: usr/local/www/interfaces_bridge_edit.php:525 +#: usr/local/www/interfaces_bridge_edit.php:526 +#: usr/local/www/interfaces_bridge_edit.php:527 +#: usr/local/www/interfaces_bridge_edit.php:531 +msgid "Auto PTP ports" +msgstr "Portas PTP Auto" + +#: usr/local/www/interfaces_bridge_edit.php:530 +#: usr/local/www/interfaces_bridge_edit.php:539 +#: usr/local/www/interfaces_bridge_edit.php:540 +#: usr/local/www/interfaces_bridge_edit.php:541 +#: usr/local/www/interfaces_bridge_edit.php:545 +msgid "Automatically detect the point-to-point status on interface by checking the full duplex link status. This is the default for interfaces added to the bridge." +msgstr "Detecta automaticamente o status ponto-a-ponto na interface ao checar o status full duples do link. Esse é o padrão para interfaces adicionadas à ponte." + +#: usr/local/www/interfaces_bridge_edit.php:536 +#: usr/local/www/interfaces_bridge_edit.php:545 +#: usr/local/www/interfaces_bridge_edit.php:546 +#: usr/local/www/interfaces_bridge_edit.php:547 +#: usr/local/www/interfaces_bridge_edit.php:551 +msgid "The interfaces selected here will be removed from default autoedge status." +msgstr "As interfaces selecionadas aqui serão removidas do status edge automático padrão." + +#: usr/local/www/interfaces_bridge_edit.php:540 +#: usr/local/www/interfaces_bridge_edit.php:549 +#: usr/local/www/interfaces_bridge_edit.php:550 +#: usr/local/www/interfaces_bridge_edit.php:551 +#: usr/local/www/interfaces_bridge_edit.php:555 +msgid "Sticky ports" +msgstr "Portas Sticky" + +#: usr/local/www/interfaces_bridge_edit.php:554 +#: usr/local/www/interfaces_bridge_edit.php:563 +#: usr/local/www/interfaces_bridge_edit.php:564 +#: usr/local/www/interfaces_bridge_edit.php:565 +#: usr/local/www/interfaces_bridge_edit.php:569 +msgid "Mark an interface as a \"sticky\" interface. Dynamically learned address entries are treated as static once entered into the cache. Sticky entries are never aged out of the cache or replaced, even if the address is seen on a different interface." +msgstr "Marca uma interface como \"sticky\". Entradas de endereços assimilados dinamicamente são tratados como estáticos uma vez que entram no cache. Entradas Sticky nunca não descartadas do cache ou substituídas, mesmo que o endereço for encontrado em uma interface diferente." + +#: usr/local/www/interfaces_bridge_edit.php:561 +#: usr/local/www/interfaces_bridge_edit.php:570 +#: usr/local/www/interfaces_bridge_edit.php:571 +#: usr/local/www/interfaces_bridge_edit.php:572 +#: usr/local/www/interfaces_bridge_edit.php:576 +msgid "Private ports" +msgstr "Portas privadas" + +#: usr/local/www/interfaces_bridge_edit.php:575 +#: usr/local/www/interfaces_bridge_edit.php:584 +#: usr/local/www/interfaces_bridge_edit.php:585 +#: usr/local/www/interfaces_bridge_edit.php:586 +#: usr/local/www/interfaces_bridge_edit.php:590 +msgid "Mark an interface as a \"private\" interface. A private interface does not forward any traffic to any other port that is also a private interface." +msgstr "Marca uma interface como \"privada\". A interface privada não encaminha nenhum tráfego para nenhuma outra porta que também é uma interface privada." + +#: usr/local/www/interfaces_gif.php:64 usr/local/www/interfaces_gif.php:68 +msgid "This gif TUNNEL cannot be deleted because it is still being used as an interface." +msgstr "Esse TÚNEL gif não pode ser apagado porque ele ainda é usado como uma interface." + +#: usr/local/www/interfaces_gif.php:107 usr/local/www/interfaces_gre.php:108 +#: usr/local/www/interfaces_gre.php:109 usr/local/www/interfaces_gif.php:108 +#: usr/local/www/interfaces_gre.php:113 usr/local/www/interfaces_gif.php:112 +msgid "Tunnel to..." +msgstr "Túnel para..." + +#: usr/local/www/interfaces_gif.php:123 usr/local/www/interfaces_gif.php:124 +#: usr/local/www/interfaces_gif.php:128 +msgid "Do you really want to delete this gif tunnel?" +msgstr "Você realmente quer apagar esse túnel gif?" + +#: usr/local/www/interfaces_gif.php:134 usr/local/www/interfaces_gif.php:135 +#: usr/local/www/interfaces_gif.php:139 +msgid "GIF tunnels are configured here." +msgstr "Túneis GIF são configurados aqui." + +#: usr/local/www/interfaces_gif_edit.php:72 +#: usr/local/www/interfaces_gif_edit.php:75 +msgid "Parent interface,Local address, Remote tunnel address, Remote tunnel network, Local tunnel address" +msgstr "Interface pai, endereço local, endereço de túnel remoto, rede de túnel remoto, endereço de túnel local" + +#: usr/local/www/interfaces_gif_edit.php:78 +#: usr/local/www/interfaces_gre_edit.php:80 +#: usr/local/www/interfaces_gif_edit.php:81 +msgid "The tunnel local and tunnel remote fields must have valid IP addresses." +msgstr "Os campos túnel local e remoto devem conter endereços IP válidos." + +#: usr/local/www/interfaces_gif_edit.php:87 +#: usr/local/www/interfaces_gif_edit.php:95 +#, php-format +msgid "A gif with the network %s is already defined." +msgstr "Um gif com a rede %s já foi definido." + +#: usr/local/www/interfaces_gif_edit.php:136 +#: usr/local/www/interfaces_gif_edit.php:137 +#: usr/local/www/interfaces_gif_edit.php:138 +#: usr/local/www/interfaces_gif_edit.php:146 +msgid "GIF configuration" +msgstr "Configuração GIF" + +#: usr/local/www/interfaces_gif_edit.php:139 +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:141 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan_edit.php:153 +#: usr/local/www/interfaces_lagg_edit.php:134 +#: usr/local/www/interfaces_qinq_edit.php:288 +#: usr/local/www/interfaces_wireless_edit.php:84 +#: usr/local/www/interfaces_wireless_edit.php:159 +#: usr/local/www/interfaces_gif_edit.php:140 +#: usr/local/www/interfaces_vlan_edit.php:154 +#: usr/local/www/interfaces_qinq_edit.php:289 +#: usr/local/www/interfaces_gif_edit.php:141 +#: usr/local/www/interfaces_lagg_edit.php:135 +#: usr/local/www/interfaces_gre_edit.php:142 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:161 +#: usr/local/www/interfaces_vlan_edit.php:157 +#: usr/local/www/interfaces_lagg_edit.php:148 +#: usr/local/www/interfaces_gif_edit.php:149 +#: usr/local/www/interfaces_qinq_edit.php:292 +msgid "Parent interface" +msgstr "Interface pai" + +#: usr/local/www/interfaces_gif_edit.php:156 +#: usr/local/www/interfaces_gif_edit.php:157 +#: usr/local/www/interfaces_gif_edit.php:158 +#: usr/local/www/interfaces_gif_edit.php:169 +msgid "The interface here servers as the local address to be used for the gif tunnel." +msgstr "A interface aqui serve como endereço local para ser usada pelo túnel gif." + +#: usr/local/www/interfaces_gif_edit.php:159 +#: usr/local/www/interfaces_gif_edit.php:160 +#: usr/local/www/interfaces_gif_edit.php:161 +#: usr/local/www/interfaces_gif_edit.php:172 +msgid "gif remote address" +msgstr "endereço gif remoto" + +#: usr/local/www/interfaces_gif_edit.php:163 +#: usr/local/www/interfaces_gif_edit.php:164 +#: usr/local/www/interfaces_gif_edit.php:165 +#: usr/local/www/interfaces_gif_edit.php:176 +msgid "Peer address where encapsulated gif packets will be sent. " +msgstr "Endereços peer onde pacotes gif encapsulados serão enviados." + +#: usr/local/www/interfaces_gif_edit.php:166 +#: usr/local/www/interfaces_gif_edit.php:167 +#: usr/local/www/interfaces_gif_edit.php:168 +#: usr/local/www/interfaces_gif_edit.php:179 +msgid "gif tunnel local address" +msgstr "endereço local do túnel gif" + +#: usr/local/www/interfaces_gif_edit.php:170 +#: usr/local/www/interfaces_gif_edit.php:171 +#: usr/local/www/interfaces_gif_edit.php:172 +#: usr/local/www/interfaces_gif_edit.php:183 +msgid "Local gif tunnel endpoint" +msgstr "Ponto final de túnel gif local" + +#: usr/local/www/interfaces_gif_edit.php:173 +#: usr/local/www/interfaces_gif_edit.php:174 +#: usr/local/www/interfaces_gif_edit.php:175 +#: usr/local/www/interfaces_gif_edit.php:186 +msgid "gif tunnel remote address " +msgstr "endereço remoto de túnel gif " + +#: usr/local/www/interfaces_gif_edit.php:188 +#: usr/local/www/interfaces_gif_edit.php:189 +#: usr/local/www/interfaces_gif_edit.php:200 +msgid "Remote gif address endpoint. The subnet part is used for determining the network that is tunnelled." +msgstr "Ponto final de endereço gif remoto. A parte da subrede é usada para determinar a rede que está sendo usada no túnel." + +#: usr/local/www/interfaces_gif_edit.php:191 +#: usr/local/www/interfaces_gif_edit.php:192 +#: usr/local/www/interfaces_gif_edit.php:203 +msgid "Route caching " +msgstr "Cache de rota" + +#: usr/local/www/interfaces_gif_edit.php:195 +#: usr/local/www/interfaces_gif_edit.php:196 +#: usr/local/www/interfaces_gif_edit.php:207 +msgid "Specify if route caching can be enabled. Be careful with these settings on dynamic networks. " +msgstr "Especifique se a rota de cache pode ser habilitada. Seja cuidadoso com essas configurações em redes dinâmicas." + +#: usr/local/www/interfaces_gif_edit.php:198 +#: usr/local/www/interfaces_gif_edit.php:199 +#: usr/local/www/interfaces_gif_edit.php:210 +msgid "ECN friendly behaviour" +msgstr "Comportamento amigável ECN" + +#: usr/local/www/interfaces_gif_edit.php:203 +#: usr/local/www/interfaces_gif_edit.php:204 +#: usr/local/www/interfaces_gif_edit.php:215 +msgid "Note that the ECN friendly behavior violates RFC2893. This should be used in mutual agreement with the peer." +msgstr "Note que o comportamento amigável ECN viola a RFC2893. Isso deve ser usado em comum acordo com o peer." + +#: usr/local/www/interfaces_gre.php:65 usr/local/www/interfaces_gre.php:69 +msgid "This GRE tunnel cannot be deleted because it is still being used as an interface." +msgstr "Esse túbel GRE não pode ser apagado porque ele ainda está sendo usado como uma interface." + +#: usr/local/www/interfaces_gre.php:124 usr/local/www/interfaces_gre.php:125 +#: usr/local/www/interfaces_gre.php:129 +msgid "Do you really want to delete this GRE tunnel?" +msgstr "Você realmente quer apagar esse túnel GRE?" + +#: usr/local/www/interfaces_gre.php:133 usr/local/www/interfaces_gre.php:134 +#: usr/local/www/interfaces_gre.php:138 +msgid "Here you can configure Generic Routing Encapsulation (GRE - RFC 2784) tunnels." +msgstr "Aqui você pode configurar os túneis de Encapsulamento de Rota Genérico (GRE - RFC 2784)." + +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Local address" +msgstr "Endereço local" + +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Remote tunnel address" +msgstr "Endereço de túnel remoto" + +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Remote tunnel network" +msgstr "Rede de túnel remota" + +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Local tunnel address" +msgstr "Endereço de túnel remoto" + +#: usr/local/www/interfaces_gre_edit.php:88 +#, php-format +msgid "A GRE tunnel with the network %s is already defined." +msgstr "Uma GRE com a rede %s já foi definida." + +#: usr/local/www/interfaces_gre_edit.php:138 +#: usr/local/www/interfaces_gre_edit.php:139 +msgid "GRE configuration" +msgstr "Configuração GRE" + +#: usr/local/www/interfaces_gre_edit.php:158 +#: usr/local/www/interfaces_gre_edit.php:159 +msgid "The interface here serves as the local address to be used for the GRE tunnel." +msgstr "A interface aqui serve como o endereço local para ser usado para o túnel GRE." + +#: usr/local/www/interfaces_gre_edit.php:161 +#: usr/local/www/interfaces_gre_edit.php:162 +msgid "GRE remote address" +msgstr "Endereço remoto GRE" + +#: usr/local/www/interfaces_gre_edit.php:165 +#: usr/local/www/interfaces_gre_edit.php:166 +msgid "Peer address where encapsulated GRE packets will be sent " +msgstr "Endereço peer onde os pacotes GRE encapsulados serão enviados " + +#: usr/local/www/interfaces_gre_edit.php:168 +#: usr/local/www/interfaces_gre_edit.php:169 +msgid "GRE tunnel local address " +msgstr "Endereço local de túnel GRE" + +#: usr/local/www/interfaces_gre_edit.php:172 +#: usr/local/www/interfaces_gre_edit.php:173 +msgid "Local GRE tunnel endpoint" +msgstr "Ponta fim de túnel GRE local" + +#: usr/local/www/interfaces_gre_edit.php:175 +#: usr/local/www/interfaces_gre_edit.php:176 +msgid "GRE tunnel remote address " +msgstr "Endereço remoto de túnel GRE " + +#: usr/local/www/interfaces_gre_edit.php:190 +#: usr/local/www/interfaces_gre_edit.php:189 +msgid "Remote GRE address endpoint. The subnet part is used for the determining the network that is tunneled." +msgstr "Ponta final de endereço GRE remoto. A parte da subrede é usada para determinar a rede que está sendo usada no túnel." + +#: usr/local/www/interfaces_gre_edit.php:193 +#: usr/local/www/interfaces_gre_edit.php:192 +msgid "Mobile tunnel" +msgstr "Túnel móvel" + +#: usr/local/www/interfaces_gre_edit.php:197 +#: usr/local/www/interfaces_gre_edit.php:196 +msgid "Specify which encapsulation method the tunnel should use. " +msgstr "Especificar qual método de encapsulamento o túnel deve usar." + +#: usr/local/www/interfaces_gre_edit.php:200 +#: usr/local/www/interfaces_gre_edit.php:199 +msgid "Route search type" +msgstr "Tipo de busca de rota" + +#: usr/local/www/interfaces_gre_edit.php:205 +#: usr/local/www/interfaces_gre_edit.php:204 +msgid "For correct operation, the GRE device needs a route to the destination that is less specific than the one over the tunnel. (Basically, there needs to be a route to the decapsulating host that does not run over the tunnel, as this would be a loop." +msgstr "Para operação correta, o dispositivo GRE necessita de uma rota para o destino que é menos específica que aquela sobre o túnel. (Basicamente, é necessária uma rota para o host desencapsulado que não roda sobre o túnel, pois isso seria um loop." + +#: usr/local/www/interfaces_gre_edit.php:212 +#: usr/local/www/interfaces_gre_edit.php:211 +msgid "WCCP version" +msgstr "Versão do WCCP" + +#: usr/local/www/interfaces_gre_edit.php:216 +#: usr/local/www/interfaces_gre_edit.php:215 +msgid "Specify which WCCP encapsulation(version 1 or 2) method the tunnel should use" +msgstr "Especifique qual método de encapsulamento WCCP (versão 1 ou 2) o túnel deve usar" + +#: usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/system_routes.php:117 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/system_authservers.php:422 +#: usr/local/www/system_gateway_groups.php:110 +#: usr/local/www/system_gateways.php:143 +#: usr/local/www/system_groupmanager.php:241 +#: usr/local/www/system_groupmanager_addprivs.php:169 +#: usr/local/www/system_usermanager.php:441 +#: usr/local/www/system_usermanager.php:790 +#: usr/local/www/system_usermanager_addprivs.php:168 +#: usr/local/www/system_usermanager_settings.php:114 +#: usr/local/www/system_usermanager.php:439 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/system_groupmanager_addprivs.php:167 +#: usr/local/www/system_usermanager.php:789 +#: usr/local/www/system_gateway_groups.php:111 +#: usr/local/www/system_authservers.php:427 +#: usr/local/www/system_routes.php:121 +#: usr/local/www/system_authservers.php:434 +#: usr/local/www/system_usermanager_settings.php:116 +#: usr/local/www/system_gateway_groups.php:120 +#: usr/local/www/system_routes.php:136 +#: usr/local/www/system_groupmanager.php:244 +#: usr/local/www/system_authservers.php:445 +msgid "Groups" +msgstr "Grupos" + +#: usr/local/www/interfaces_groups.php:127 +#: usr/local/www/system_groupmanager.php:443 +#: usr/local/www/system_groupmanager.php:446 +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/system_groupmanager.php:464 +#: usr/local/www/system_groupmanager.php:467 +msgid "edit group" +msgstr "editar grupo" + +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/interfaces_groups.php:129 +msgid "Do you really want to delete this group? All elements that still use it will become invalid (e.g. filter rules)!" +msgstr "Você realmente uer apagar esse grupo? Todos os elementos que ainda o usam serão invalidados (e.g. regras de filtro)!" + +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/interfaces_groups.php:129 +msgid "delete ifgroupentry" +msgstr "apagar ifgroupentry" + +#: usr/local/www/interfaces_groups.php:140 +#: usr/local/www/interfaces_groups.php:141 +msgid "add a new group" +msgstr "adicionar novo grupo" + +#: usr/local/www/interfaces_groups.php:148 +#: usr/local/www/interfaces_groups.php:149 +msgid "Interface Groups allow you to create rules that apply to multiple interfaces without duplicating the rules. If you remove members from an interface group, the group rules no longer apply to that interface." +msgstr "Grupos de Interface permite que você crie regras que se aplicam a múltiplas interfaces sem duplicar as regras. Se você remover membros de um grupo de interface, as regras do grupo não mais serão aplicadas àquela interface." + +#: usr/local/www/interfaces_groups_edit.php:71 +#: usr/local/www/interfaces_groups_edit.php:72 +msgid "Group name already exists!" +msgstr "Nome do grupo já existe!" + +#: usr/local/www/interfaces_groups_edit.php:74 +#: usr/local/www/interfaces_groups_edit.php:75 +msgid "Only letters A-Z are allowed as the group name." +msgstr "Somente as letras de A-Z são permitidas como nome do grupo." + +#: usr/local/www/interfaces_groups_edit.php:248 +#: usr/local/www/interfaces_groups_edit.php:249 +msgid "Interface Groups Edit" +msgstr "Edição de Grupos de Interface" + +#: usr/local/www/interfaces_groups_edit.php:251 +#: usr/local/www/status_gateway_groups.php:74 +#: usr/local/www/system_gateway_groups.php:120 +#: usr/local/www/system_gateway_groups_edit.php:158 +#: usr/local/www/system_gateway_groups_edit.php:161 +#: usr/local/www/system_groupmanager.php:117 +#: usr/local/www/system_gateway_groups_edit.php:169 +#: usr/local/www/system_gateway_groups_edit.php:172 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateway_groups_edit.php:231 +#: usr/local/www/system_gateway_groups.php:121 +#: usr/local/www/interfaces_groups_edit.php:252 +#: usr/local/www/status_gateway_groups.php:75 +#: usr/local/www/system_gateway_groups_edit.php:232 +#: usr/local/www/system_gateway_groups_edit.php:235 +#: usr/local/www/system_gateway_groups.php:130 +msgid "Group Name" +msgstr "Nome do Grupo" + +#: usr/local/www/interfaces_groups_edit.php:255 +#: usr/local/www/interfaces_groups_edit.php:256 +msgid "No numbers or spaces are allowed. Only characters in a-zA-Z" +msgstr "Não são permitidos números e espaços. Somente caracteres de a-z, A-Z" + +#: usr/local/www/interfaces_groups_edit.php:269 +#: usr/local/www/interfaces_qinq_edit.php:347 +#: usr/local/www/interfaces_qinq_edit.php:348 +#: usr/local/www/interfaces_groups_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:351 +msgid "Member (s)" +msgstr "Membro(s)" + +#: usr/local/www/firewall_aliases.php:103 +#: usr/local/www/firewall_aliases.php:106 +#: usr/local/www/firewall_aliases.php:107 +#, php-format +msgid "Cannot delete alias. Currently in use by %s" +msgstr "Não é possível excluir este alias. Atualmente em uso por %s" + +#: usr/local/www/firewall_aliases.php:160 +#: usr/local/www/firewall_aliases.php:163 +#: usr/local/www/firewall_aliases.php:167 +#: usr/local/www/firewall_aliases.php:166 +msgid "The alias list has been changed." +msgstr "A lista de alias foi alterada." + +#: usr/local/www/firewall_aliases.php:166 +#: usr/local/www/services_igmpproxy.php:97 +#: usr/local/www/firewall_aliases.php:169 +#: usr/local/www/firewall_aliases.php:189 +msgid "Values" +msgstr "Valores" + +#: usr/local/www/firewall_aliases.php:172 +#: usr/local/www/firewall_aliases.php:218 +#: usr/local/www/firewall_aliases.php:175 +#: usr/local/www/firewall_aliases.php:221 +msgid "add a new alias" +msgstr "adicionar novo alias" + +#: usr/local/www/firewall_aliases.php:204 +#: usr/local/www/firewall_schedule.php:220 +#: usr/local/www/firewall_aliases.php:207 +msgid "edit alias" +msgstr "editar alias" + +#: usr/local/www/firewall_aliases.php:205 +#: usr/local/www/firewall_aliases.php:208 +#: usr/local/www/firewall_aliases.php:256 +#: usr/local/www/firewall_aliases.php:257 +#: usr/local/www/firewall_aliases.php:258 +msgid "Do you really want to delete this alias? All elements that still use it will become invalid (e.g. filter rules)!" +msgstr "Você realmente deseja excluir este alias? Todos os elementos que continuam a utiliza-lo irão se tornar inválidos. (ex. regras de filtro)!" + +#: usr/local/www/firewall_aliases.php:205 +#: usr/local/www/firewall_schedule.php:221 +#: usr/local/www/firewall_aliases.php:208 +msgid "delete alias" +msgstr "excluir alias" + +#: usr/local/www/firewall_aliases.php:221 +#: usr/local/www/firewall_aliases.php:224 +#: usr/local/www/firewall_aliases.php:275 +#: usr/local/www/firewall_aliases.php:277 +#: usr/local/www/firewall_aliases.php:278 +msgid "Bulk import aliases from list" +msgstr "Importação em massa de alias da lista" + +#: usr/local/www/firewall_aliases.php:229 +#: usr/local/www/firewall_aliases.php:232 +#: usr/local/www/firewall_aliases.php:284 +#: usr/local/www/firewall_aliases.php:287 +#: usr/local/www/firewall_aliases.php:288 +msgid "Aliases act as placeholders for real hosts, networks or ports. They can be used to minimize the number of changes that have to be made if a host, network or port changes. You can enter the name of an alias instead of the host, network or port in all fields that have a red background. The alias will be resolved according to the list above. If an alias cannot be resolved (e.g. because you deleted it), the corresponding element (e.g. filter/NAT/shaper rule) will be considered invalid and skipped." +msgstr "Aliases atuam como espaços reservados para hosts, redes e portas reais. Eles podem ser usados para minimizar o número de alterações que devem ser feitas se um host, rede ou porta mudar. Você pode inserir o nome de um alias ao invés do host rede ou porta em todos os campos que possuem fundo vermelho. O alias irá ser resolvido de acordo com a lista acima. Se um alias não pode ser resolvido (ex. porque você o excluiu), o elemento correspondente (ex. regra de filtro/NAT/shaper) será considerada inválida e ignorada." + +#: usr/local/www/firewall_aliases_edit.php:105 +#: usr/local/www/firewall_aliases_edit.php:107 +#, php-format +msgid "Sorry, an interface is already named %s." +msgstr "Desculpe, uma interface já está nomeada %s." + +#: usr/local/www/firewall_aliases_edit.php:140 +#: usr/local/www/firewall_aliases_edit.php:142 +#: usr/local/www/firewall_aliases_edit.php:134 +#: usr/local/www/firewall_aliases_edit.php:136 +msgid "Reserved word used for alias name." +msgstr "Palavra reservada usada para nome de alias." + +#: usr/local/www/firewall_aliases_edit.php:145 +#: usr/local/www/firewall_aliases_edit.php:139 +msgid "The alias name must be less than 32 characters long and may only consist of the characters" +msgstr "O nome de alias deve conter menos de 32 caracteres e deve consistir apenas de caracteres" + +#: usr/local/www/firewall_aliases_edit.php:187 +#: usr/local/www/firewall_aliases_edit.php:242 +#: usr/local/www/firewall_aliases_edit.php:188 +#: usr/local/www/firewall_aliases_edit.php:244 +#: usr/local/www/firewall_aliases_edit.php:182 +msgid "You must provide a valid URL." +msgstr "Você deve fornecer uma URL válida." + +#: usr/local/www/firewall_aliases_edit.php:190 +#: usr/local/www/firewall_aliases_edit.php:191 +#: usr/local/www/firewall_aliases_edit.php:185 +msgid "Unable to fetch usable data." +msgstr "Não foi possível obter dados úteis." + +#: usr/local/www/firewall_aliases_edit.php:235 +#: usr/local/www/firewall_aliases_edit.php:237 +msgid "You must provide a valid URL. Could not fetch usable data." +msgstr "Você deve fornecer uma URL válida. Não foi possível obter dados úteis." + +#: usr/local/www/firewall_aliases_edit.php:261 +#: usr/local/www/firewall_aliases_edit.php:264 +#: usr/local/www/firewall_aliases_edit.php:278 +#: usr/local/www/firewall_aliases_edit.php:277 +msgid "is not a valid port or alias." +msgstr "não é uma porta válida ou um alias." + +#: usr/local/www/firewall_aliases_edit.php:266 +#: usr/local/www/firewall_aliases_edit.php:269 +#: usr/local/www/firewall_aliases_edit.php:283 +#: usr/local/www/firewall_aliases_edit.php:282 +#, php-format +msgid "%1$s is not a valid %2$s alias." +msgstr "%1$s não é um válido %2$s alias." + +#: usr/local/www/firewall_aliases_edit.php:281 +#: usr/local/www/firewall_aliases_edit.php:284 +#: usr/local/www/firewall_aliases_edit.php:191 +#: usr/local/www/firewall_aliases_edit.php:221 +#: usr/local/www/firewall_aliases_edit.php:303 +#: usr/local/www/firewall_aliases_edit.php:220 +#: usr/local/www/firewall_aliases_edit.php:302 +#, php-format +msgid "Entry added %s" +msgstr "Entrada adicionada %s" + +#: usr/local/www/firewall_aliases_edit.php:285 +#: usr/local/www/firewall_aliases_edit.php:288 +#: usr/local/www/firewall_aliases_edit.php:307 +#: usr/local/www/firewall_aliases_edit.php:306 +#, php-format +msgid "The alias(es): %s cannot be nested because they are not of the same type." +msgstr "O(s) alias(es): %s não podem ser aninhados, porque não são do mesmo tipo." + +#: usr/local/www/firewall_aliases_edit.php:453 +#: usr/local/www/firewall_aliases_edit.php:605 +#: usr/local/www/firewall_aliases_edit.php:456 +#: usr/local/www/firewall_aliases_edit.php:610 +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:613 +#: usr/local/www/firewall_aliases_edit.php:480 +#: usr/local/www/firewall_aliases_edit.php:644 +#: usr/local/www/firewall_aliases_edit.php:479 +#: usr/local/www/firewall_aliases_edit.php:643 +msgid "Network(s)" +msgstr "Rede(s)" + +#: usr/local/www/firewall_aliases_edit.php:454 +#: usr/local/www/services_igmpproxy_edit.php:224 +#: usr/local/www/services_unbound_acls.php:237 +#: usr/local/www/services_igmpproxy_edit.php:226 +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_aliases_edit.php:481 +#: usr/local/www/firewall_aliases_edit.php:480 +msgid "CIDR" +msgstr "CIDR" + +#: usr/local/www/firewall_aliases_edit.php:456 +#: usr/local/www/firewall_aliases_edit.php:604 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/firewall_aliases_edit.php:619 +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:622 +#: usr/local/www/firewall_aliases_edit.php:483 +#: usr/local/www/firewall_aliases_edit.php:643 +#: usr/local/www/firewall_aliases_edit.php:653 +#: usr/local/www/firewall_aliases_edit.php:482 +#: usr/local/www/firewall_aliases_edit.php:642 +#: usr/local/www/firewall_aliases_edit.php:652 +msgid "Host(s)" +msgstr "Host(s)" + +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/diag_states_summary.php:150 +#: usr/local/www/services_dnsmasq.php:245 +#: usr/local/www/services_dnsmasq.php:312 usr/local/www/vpn_pppoe_edit.php:538 +#: usr/local/www/services_dnsmasq.php:333 +#: usr/local/www/services_unbound.php:281 +#: usr/local/www/services_unbound.php:348 +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/diag_states_summary.php:139 +#: usr/local/www/vpn_pppoe_edit.php:539 usr/local/www/services_dnsmasq.php:246 +#: usr/local/www/services_dnsmasq.php:334 +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_aliases.php:176 +#: usr/local/www/diag_states_summary.php:141 +#: usr/local/www/vpn_pppoe_edit.php:542 usr/local/www/services_dnsmasq.php:271 +#: usr/local/www/services_dnsmasq.php:359 +#: usr/local/www/firewall_aliases.php:174 +#: usr/local/www/firewall_aliases_edit.php:484 +#: usr/local/www/services_dnsmasq.php:284 +#: usr/local/www/services_dnsmasq.php:372 +#: usr/local/www/services_dnsmasq.php:348 +#: usr/local/www/services_dnsmasq.php:436 +#: usr/local/www/firewall_aliases_edit.php:483 +msgid "IP" +msgstr "IP" + +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:606 +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:611 +#: usr/local/www/firewall_aliases_edit.php:463 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:485 +#: usr/local/www/firewall_aliases_edit.php:645 +#: usr/local/www/firewall_aliases_edit.php:484 +#: usr/local/www/firewall_aliases_edit.php:644 +msgid "Port(s)" +msgstr "Porta(s)" + +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/firewall_aliases_edit.php:608 +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/firewall_aliases_edit.php:463 +#: usr/local/www/firewall_aliases_edit.php:613 +#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828 +#: usr/local/www/firewall_aliases_edit.php:465 +#: usr/local/www/firewall_aliases_edit.php:616 +#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759 +#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776 +#: usr/local/www/services_dhcp.php:1075 +#: usr/local/www/firewall_aliases_edit.php:487 +#: usr/local/www/firewall_aliases_edit.php:647 +#: usr/local/www/services_dhcp.php:1087 +#: usr/local/www/firewall_aliases_edit.php:486 +#: usr/local/www/firewall_aliases_edit.php:646 +msgid "URL" +msgstr "URL" + +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:466 +#: usr/local/www/firewall_aliases_edit.php:617 +#: usr/local/www/firewall_aliases_edit.php:488 +#: usr/local/www/firewall_aliases_edit.php:648 +#: usr/local/www/firewall_aliases_edit.php:487 +#: usr/local/www/firewall_aliases_edit.php:647 +msgid "URL Table" +msgstr "Tabela URL" + +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_aliases_edit.php:465 +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:489 +#: usr/local/www/firewall_aliases_edit.php:488 +msgid "Update Freq." +msgstr "Atualizar Freq." + +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:469 +#: usr/local/www/firewall_aliases_edit.php:491 +#: usr/local/www/firewall_aliases_edit.php:490 +msgid "Networks are specified in CIDR format. Select the CIDR mask that pertains to each entry. /32 specifies a single IPv4 host, /128 specifies a single IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 or /128 for IPv6. You may also enter an IP range such as 192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to fill the range." +msgstr "Redes são especificadas no formato CIDR. Selecione a máscara CIDR que pertence a cada entrada. /32 especifica um único host IPv4, /128 especifica um único host IPv6, /24 especifica 255.255.255.0, /64 especifica uma rede IPv6 normal, etc. Hostnames (FQDNs) também podem ser especificados, usando uma máscara /32 para IPv4 e /128 para IPv6. Você também pode inserir um intervalo de IPs como 192.168.1.1-192.168.1.254 e uma lista de redes CIDR será liberada para preencher o intervalo." + +#: usr/local/www/firewall_aliases_edit.php:465 +msgid "Enter as many hosts as you would like. Hosts must be specified by their IP address." +msgstr "Insira quantos hosts você desejar. Hosts precisam ser especificados pelo seu endereço IP." + +#: usr/local/www/firewall_aliases_edit.php:466 +#: usr/local/www/firewall_aliases_edit.php:469 +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:493 +msgid "Enter as many ports as you wish. Port ranges can be expressed by seperating with a colon." +msgstr "Insira quantas portas você desejar. Intervalos de portas podem ser especificados utilizando dois pontos." + +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/firewall_aliases_edit.php:472 +#: usr/local/www/firewall_aliases_edit.php:494 +#: usr/local/www/firewall_aliases_edit.php:493 +#, php-format +msgid "Enter as many URLs as you wish. After saving %s will download the URL and import the items into the alias. Use only with small sets of IP addresses (less than 3000)." +msgstr "Insira quantas URLs desejar. Depois de salvar %s irá fazer o download da URL e importar os itens para o alias. Use apenas com pequenos conjuntos do IPs (menos de 3000)." + +#: usr/local/www/firewall_aliases_edit.php:468 +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:473 +#: usr/local/www/firewall_aliases_edit.php:495 +#: usr/local/www/firewall_aliases_edit.php:494 +#, php-format +msgid "Enter a single URL containing a large number of IPs and/or Subnets. After saving %s will download the URL and create a table file containing these addresses. This will work with large numbers of addresses (30,000+) or small numbers." +msgstr "Insira uma única URL contendo um grande número de IPs e/ou subredes. Depois de salvar %s vai baixar a URL e criar uma tabela de arquivos contendo estes endereços. Isto irá trabalhar com grandes números de endereços (30.000+) ou pequenos números." + +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:607 +#: usr/local/www/firewall_aliases_edit.php:474 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:476 +#: usr/local/www/firewall_aliases_edit.php:615 +#: usr/local/www/firewall_aliases_edit.php:498 +#: usr/local/www/firewall_aliases_edit.php:646 +#: usr/local/www/firewall_aliases_edit.php:497 +#: usr/local/www/firewall_aliases_edit.php:645 +msgid "OpenVPN Users" +msgstr "Usuários OpenVPN" + +#: usr/local/www/firewall_aliases_edit.php:472 +#: usr/local/www/firewall_aliases_edit.php:475 +#: usr/local/www/firewall_aliases_edit.php:477 +#: usr/local/www/firewall_aliases_edit.php:499 +#: usr/local/www/firewall_aliases_edit.php:498 +msgid "Enter as many usernames as you wish." +msgstr "Insira quantos usuários você desejar." + +#: usr/local/www/firewall_aliases_edit.php:573 +#: usr/local/www/firewall_aliases_edit.php:578 +#: usr/local/www/firewall_aliases_edit.php:581 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:611 +msgid "Alias Edit" +msgstr "Editar Alias" + +#: usr/local/www/firewall_aliases_edit.php:620 +#: usr/local/www/firewall_aliases_edit.php:625 +#: usr/local/www/firewall_aliases_edit.php:628 +#: usr/local/www/firewall_aliases_edit.php:659 +#: usr/local/www/firewall_aliases_edit.php:658 +msgid "Item information" +msgstr "Informações do Item" + +#: usr/local/www/firewall_aliases_edit.php:665 +#: usr/local/www/services_dnsmasq_edit.php:260 +#: usr/local/www/system_certmanager.php:782 +#: usr/local/www/firewall_aliases_edit.php:670 +#: usr/local/www/services_dnsmasq_edit.php:261 +#: usr/local/www/services_router_advertisements.php:343 +#: usr/local/www/firewall_aliases_edit.php:673 +#: usr/local/www/system_certmanager.php:807 +#: usr/local/www/services_router_advertisements.php:338 +#: usr/local/www/system_certmanager.php:808 +#: usr/local/www/firewall_aliases_edit.php:704 +#: usr/local/www/firewall_aliases_edit.php:703 +msgid "remove this entry" +msgstr "remova essa entrada" + +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/diag_backup.php:111 usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:111 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:140 usr/local/www/fbegin.inc:128 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/diag_backup.php:188 usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/fbegin.inc:137 usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:165 usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +#: usr/local/www/firewall_nat_edit.php:439 usr/local/www/fbegin.inc:129 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_virtual_ip.php:291 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_virtual_ip.php:299 usr/local/www/diag_backup.php:189 +msgid "NAT" +msgstr "NAT" + +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1.php:93 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_out.php:300 usr/local/www/firewall_nat.php:182 +#: usr/local/www/firewall_nat_npt.php:93 +#: usr/local/www/firewall_nat_out.php:310 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat.php:187 usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat.php:190 usr/local/www/firewall_nat_out.php:317 +msgid "1:1" +msgstr "1:1" + +#: usr/local/www/firewall_nat_1to1.php:87 usr/local/www/firewall_nat.php:175 +#: usr/local/www/firewall_nat_npt.php:87 usr/local/www/firewall_nat.php:180 +#: usr/local/www/firewall_nat.php:183 +msgid "The NAT configuration has been changed" +msgstr "A configuração NAT foi modificada" + +#: usr/local/www/firewall_nat_1to1.php:92 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:299 usr/local/www/firewall_nat.php:160 +#: usr/local/www/firewall_nat.php:181 usr/local/www/firewall_nat_npt.php:92 +#: usr/local/www/firewall_nat_out.php:309 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/firewall_nat_out.php:310 usr/local/www/firewall_nat.php:165 +#: usr/local/www/firewall_nat.php:186 usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_nat_edit.php:439 +#: usr/local/www/firewall_nat_edit.php:451 +#: usr/local/www/firewall_nat_out.php:317 +#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166 +#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:316 +msgid "Port Forward" +msgstr "Encaminhamento de Portas" + +#: usr/local/www/firewall_nat_1to1.php:94 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat_npt.php:94 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_out.php:312 usr/local/www/firewall_nat.php:188 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/firewall_nat_out.php:319 +#: usr/local/www/firewall_nat_out_edit.php:329 +#: usr/local/www/firewall_nat.php:191 usr/local/www/firewall_nat_out.php:318 +msgid "Outbound" +msgstr "Saída" + +#: usr/local/www/firewall_nat_1to1.php:95 +#: usr/local/www/firewall_nat_out.php:302 usr/local/www/firewall_nat.php:184 +#: usr/local/www/firewall_nat_npt.php:78 usr/local/www/firewall_nat_npt.php:95 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/firewall_nat_out.php:312 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:320 +#: usr/local/www/firewall_nat.php:192 usr/local/www/firewall_nat_out.php:319 +msgid "NPt" +msgstr "NPt" + +#: usr/local/www/firewall_nat_1to1.php:105 +msgid "External IP" +msgstr "IP externo" + +#: usr/local/www/firewall_nat_1to1.php:106 +#: usr/local/www/firewall_nat_1to1_edit.php:328 +#: usr/local/www/status_upnp.php:87 +#: usr/local/www/firewall_nat_1to1_edit.php:335 +#: usr/local/www/firewall_nat_1to1_edit.php:333 +#: usr/local/www/status_upnp.php:88 +#: usr/local/www/firewall_nat_1to1_edit.php:334 +msgid "Internal IP" +msgstr "IP interno" + +#: usr/local/www/firewall_nat_1to1.php:107 +msgid "Destination IP" +msgstr "IP de Destino" + +#: usr/local/www/firewall_nat_1to1.php:113 +#: usr/local/www/firewall_nat_1to1.php:172 +#: usr/local/www/firewall_nat_npt.php:112 +#: usr/local/www/firewall_nat_npt.php:170 +msgid "add rule" +msgstr "adicionar regra" + +#: usr/local/www/firewall_nat_1to1.php:159 +#: usr/local/www/firewall_rules.php:436 usr/local/www/firewall_rules.php:465 +#: usr/local/www/firewall_rules.php:493 usr/local/www/firewall_rules.php:776 +#: usr/local/www/firewall_nat.php:310 usr/local/www/firewall_nat_npt.php:157 +#: usr/local/www/firewall_rules.php:430 usr/local/www/firewall_rules.php:459 +#: usr/local/www/firewall_rules.php:487 usr/local/www/firewall_rules.php:773 +#: usr/local/www/firewall_nat.php:323 usr/local/www/firewall_rules.php:423 +#: usr/local/www/firewall_rules.php:452 usr/local/www/firewall_rules.php:480 +#: usr/local/www/firewall_rules.php:766 usr/local/www/firewall_rules.php:422 +#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479 +#: usr/local/www/firewall_nat.php:326 +msgid "edit rule" +msgstr "editar regra" + +#: usr/local/www/firewall_nat_1to1.php:160 usr/local/www/services_dhcp.php:923 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/services_dhcpv6.php:836 usr/local/www/services_dhcp.php:961 +#: usr/local/www/services_dhcpv6.php:931 usr/local/www/services_dhcp.php:1165 +#: usr/local/www/services_dhcpv6.php:862 usr/local/www/services_dhcp.php:1189 +#: usr/local/www/services_dhcpv6.php:883 usr/local/www/services_dhcp.php:1209 +#: usr/local/www/services_dhcp.php:1221 +msgid "Do you really want to delete this mapping?" +msgstr "Você realmente deseja remover este mapeamento?" + +#: usr/local/www/firewall_nat_1to1.php:160 +#: usr/local/www/firewall_rules.php:779 usr/local/www/firewall_nat.php:313 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/firewall_nat_out.php:450 usr/local/www/firewall_rules.php:776 +#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326 +#: usr/local/www/firewall_rules.php:769 usr/local/www/firewall_nat_out.php:448 +#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:329 +#: usr/local/www/firewall_nat_out.php:454 +msgid "delete rule" +msgstr "excluir regra" + +#: usr/local/www/firewall_nat_1to1.php:180 +msgid "Depending on the way your WAN connection is setup, you may also need a" +msgstr "Dependendo da forma como sua conexão WAN foi configurada, você pode precisar de um" + +#: usr/local/www/firewall_nat_1to1.php:180 +msgid "Virtual IP." +msgstr "IP virtual." + +#: usr/local/www/firewall_nat_1to1.php:181 +msgid "If you add a 1:1 NAT entry for any of the interface IPs on this system, it will make this system inaccessible on that IP address. i.e. if you use your WAN IP address, any services on this system (IPsec, OpenVPN server, etc.) using the WAN IP address will no longer function." +msgstr "Se você adicionar uma entrada NAT 1:1 para qualquer uma das interfaces IP no sistema, isto irá tornar o sistema inacessível naquele endereço IP. Ex.: se você usar seu endereço IP WAN, qualquer serviço neste sistema (IPsec, servidor OpenVPN, etc) utilizando o endereço IP WAN deixará de funcionar." + +#: usr/local/www/firewall_nat_1to1_edit.php:109 +#: usr/local/www/firewall_nat_out_edit.php:125 +#: usr/local/www/firewall_nat_out_edit.php:129 +#: usr/local/www/firewall_nat_out_edit.php:135 +#, php-format +msgid "Invalid characters detected (%s). Please remove invalid characters and save again." +msgstr "Caracteres inválidos detectados (%s). Por favor, remova os caracteres inválidos e salve novamente." + +#: usr/local/www/firewall_nat_1to1_edit.php:114 +msgid "External subnet" +msgstr "Sub-rede externa" + +#: usr/local/www/firewall_nat_1to1_edit.php:117 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_edit.php:200 +msgid "Source address" +msgstr "Endereço de origem" + +#: usr/local/www/firewall_nat_1to1_edit.php:121 +#: usr/local/www/firewall_nat_edit.php:194 +#: usr/local/www/firewall_nat_edit.php:199 +#: usr/local/www/firewall_nat_edit.php:204 +msgid "Destination address" +msgstr "Endereço de destino" + +#: usr/local/www/firewall_nat_1to1_edit.php:145 +#: usr/local/www/firewall_nat_1to1_edit.php:152 +msgid "A valid external subnet must be specified." +msgstr "Uma sub-rede externa válida deve ser especificada." + +#: usr/local/www/firewall_nat_1to1_edit.php:149 +#: usr/local/www/firewall_nat_edit.php:232 +#: usr/local/www/firewall_rules_edit.php:356 +#: usr/local/www/firewall_rules_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:156 +#: usr/local/www/firewall_rules_edit.php:385 +#: usr/local/www/firewall_rules_edit.php:389 +#: usr/local/www/firewall_nat_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:384 +#: usr/local/www/firewall_rules_edit.php:388 +#: usr/local/www/firewall_rules_edit.php:387 +#: usr/local/www/firewall_rules_edit.php:391 +#: usr/local/www/firewall_nat_edit.php:244 +#: usr/local/www/firewall_rules_edit.php:393 +#: usr/local/www/firewall_rules_edit.php:397 +#: usr/local/www/firewall_nat_edit.php:249 +msgid "You must specify single host or alias for alias entries." +msgstr "Você deve especificar um único host ou alias para entradas de alias." + +#: usr/local/www/firewall_nat_1to1_edit.php:154 +#: usr/local/www/firewall_nat_1to1_edit.php:161 +#, php-format +msgid "%s is not a valid internal IP address." +msgstr "%s não é um endereço IP válido." + +#: usr/local/www/firewall_nat_1to1_edit.php:157 +#: usr/local/www/firewall_nat_1to1_edit.php:164 +msgid "A valid internal bit count must be specified." +msgstr "Uma sub-rede interna válida deve ser especificada." + +#: usr/local/www/firewall_nat_1to1_edit.php:164 +#: usr/local/www/firewall_nat_edit.php:245 +#: usr/local/www/firewall_rules_edit.php:373 +#: usr/local/www/firewall_nat_1to1_edit.php:171 +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:252 +#: usr/local/www/firewall_rules_edit.php:401 +#: usr/local/www/firewall_rules_edit.php:404 +#: usr/local/www/firewall_nat_edit.php:257 +#: usr/local/www/firewall_rules_edit.php:410 +#: usr/local/www/firewall_nat_edit.php:262 +#, php-format +msgid "%s is not a valid destination IP address or alias." +msgstr "%s não é um endereço IP de destino válido." + +#: usr/local/www/firewall_nat_1to1_edit.php:167 +#: usr/local/www/firewall_nat_edit.php:248 +#: usr/local/www/firewall_nat_out_edit.php:159 +#: usr/local/www/firewall_rules_edit.php:376 +#: usr/local/www/firewall_nat_1to1_edit.php:174 +#: usr/local/www/firewall_nat_out_edit.php:172 +#: usr/local/www/firewall_rules_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:255 +#: usr/local/www/firewall_rules_edit.php:404 +#: usr/local/www/firewall_rules_edit.php:407 +#: usr/local/www/firewall_nat_edit.php:260 +#: usr/local/www/firewall_nat_out_edit.php:176 +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:265 +#: usr/local/www/firewall_nat_out_edit.php:182 +msgid "A valid destination bit count must be specified." +msgstr "Um bit count de destino válido deve ser especificado." + +#: usr/local/www/firewall_nat_1to1_edit.php:270 +#: usr/local/www/firewall_nat_1to1_edit.php:277 +#: usr/local/www/firewall_nat_1to1_edit.php:275 +msgid "Edit NAT 1:1 entry" +msgstr "Editar entrada NAT 1:1" + +#: usr/local/www/firewall_nat_1to1_edit.php:273 +#: usr/local/www/firewall_nat_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:679 usr/local/www/interfaces.php:1828 +#: usr/local/www/interfaces_ppps_edit.php:603 +#: usr/local/www/system_usermanager.php:469 +#: usr/local/www/system_usermanager.php:789 +#: usr/local/www/vpn_ipsec_phase1.php:512 +#: usr/local/www/vpn_ipsec_phase2.php:393 +#: usr/local/www/vpn_openvpn_client.php:386 +#: usr/local/www/vpn_openvpn_client.php:860 +#: usr/local/www/vpn_openvpn_csc.php:314 usr/local/www/vpn_openvpn_csc.php:672 +#: usr/local/www/vpn_openvpn_server.php:604 +#: usr/local/www/vpn_openvpn_server.php:1448 +#: usr/local/www/firewall_nat_npt_edit.php:159 +#: usr/local/www/system_routes_edit.php:299 +#: usr/local/www/firewall_nat_1to1_edit.php:280 +#: usr/local/www/firewall_nat_npt_edit.php:164 +#: usr/local/www/firewall_rules_edit.php:712 +#: usr/local/www/system_usermanager.php:467 +#: usr/local/www/system_usermanager.php:787 +#: usr/local/www/vpn_openvpn_server.php:677 +#: usr/local/www/vpn_openvpn_server.php:1590 +#: usr/local/www/vpn_ipsec_phase2.php:419 +#: usr/local/www/firewall_nat_edit.php:467 usr/local/www/interfaces.php:2006 +#: usr/local/www/vpn_openvpn_client.php:391 +#: usr/local/www/vpn_openvpn_client.php:865 +#: usr/local/www/system_routes_edit.php:300 +#: usr/local/www/firewall_nat_1to1_edit.php:278 +#: usr/local/www/firewall_nat_npt_edit.php:163 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/interfaces_ppps_edit.php:604 +#: usr/local/www/vpn_openvpn_csc.php:313 usr/local/www/vpn_openvpn_csc.php:671 +#: usr/local/www/vpn_openvpn_server.php:695 +#: usr/local/www/vpn_openvpn_server.php:1631 +#: usr/local/www/vpn_ipsec_phase2.php:485 +#: usr/local/www/firewall_nat_edit.php:466 usr/local/www/interfaces.php:1994 +#: usr/local/www/vpn_openvpn_client.php:399 +#: usr/local/www/vpn_openvpn_client.php:918 +#: usr/local/www/vpn_ipsec_phase1.php:511 +#: usr/local/www/vpn_openvpn_client.php:417 +#: usr/local/www/vpn_openvpn_client.php:937 +#: usr/local/www/firewall_rules_edit.php:715 +#: usr/local/www/interfaces_ppps_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:461 +#: usr/local/www/vpn_ipsec_phase1.php:532 +#: usr/local/www/vpn_openvpn_server.php:721 +#: usr/local/www/vpn_openvpn_server.php:1683 +#: usr/local/www/vpn_ipsec_phase2.php:507 usr/local/www/interfaces.php:2021 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/firewall_nat_edit.php:473 +#: usr/local/www/system_routes_edit.php:323 usr/local/www/interfaces.php:2067 +#: etc/inc/service-utils.inc:437 usr/local/www/interfaces_ppps_edit.php:608 +#: usr/local/www/firewall_nat_edit.php:474 +#: usr/local/www/system_routes_edit.php:332 +#: usr/local/www/firewall_nat_npt_edit.php:161 +#: usr/local/www/interfaces.php:2056 etc/inc/service-utils.inc:440 +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/firewall_rules_edit.php:775 usr/local/www/interfaces.php:2092 +#: etc/inc/service-utils.inc:445 +msgid "Disabled" +msgstr "Desabilitado" + +#: usr/local/www/firewall_nat_1to1_edit.php:276 +#: usr/local/www/firewall_nat_edit.php:463 +#: usr/local/www/firewall_rules_edit.php:682 +#: usr/local/www/firewall_nat_npt_edit.php:162 +#: usr/local/www/firewall_nat_1to1_edit.php:283 +#: usr/local/www/firewall_nat_npt_edit.php:167 +#: usr/local/www/firewall_rules_edit.php:715 +#: usr/local/www/firewall_nat_edit.php:470 +#: usr/local/www/firewall_nat_1to1_edit.php:281 +#: usr/local/www/firewall_nat_npt_edit.php:166 +#: usr/local/www/firewall_nat_edit.php:469 +#: usr/local/www/firewall_rules_edit.php:718 +#: usr/local/www/firewall_nat_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:730 +#: usr/local/www/firewall_nat_edit.php:476 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_npt_edit.php:164 +#: usr/local/www/firewall_rules_edit.php:778 +msgid "Disable this rule" +msgstr "Desabilita essa regra" + +#: usr/local/www/firewall_nat_1to1_edit.php:277 +#: usr/local/www/firewall_nat_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:683 +#: usr/local/www/firewall_nat_npt_edit.php:163 +#: usr/local/www/firewall_nat_1to1_edit.php:284 +#: usr/local/www/firewall_nat_npt_edit.php:168 +#: usr/local/www/firewall_rules_edit.php:716 +#: usr/local/www/firewall_nat_edit.php:471 +#: usr/local/www/firewall_nat_1to1_edit.php:282 +#: usr/local/www/firewall_nat_npt_edit.php:167 +#: usr/local/www/firewall_nat_edit.php:470 +#: usr/local/www/firewall_rules_edit.php:719 +#: usr/local/www/firewall_nat_edit.php:465 +#: usr/local/www/firewall_rules_edit.php:731 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_npt_edit.php:165 +#: usr/local/www/firewall_rules_edit.php:779 +msgid "Set this option to disable this rule without removing it from the list." +msgstr "Defina esta opção para desativar esta regra sem removê-la da lista." + +#: usr/local/www/firewall_nat_1to1_edit.php:315 +#: usr/local/www/firewall_nat_npt_edit.php:202 +#: usr/local/www/firewall_nat_1to1_edit.php:322 +#: usr/local/www/firewall_nat_npt_edit.php:207 +#: usr/local/www/firewall_nat_1to1_edit.php:320 +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_npt_edit.php:205 +#: usr/local/www/firewall_nat_1to1_edit.php:321 +msgid "Choose which interface this rule applies to" +msgstr "Escolha a qual interface esta regra se aplica" + +#: usr/local/www/firewall_nat_1to1_edit.php:316 +#: usr/local/www/firewall_nat_npt_edit.php:203 +#: usr/local/www/firewall_nat_1to1_edit.php:323 +#: usr/local/www/firewall_nat_npt_edit.php:208 +#: usr/local/www/firewall_nat_1to1_edit.php:321 +#: usr/local/www/firewall_nat_npt_edit.php:207 +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_1to1_edit.php:322 +msgid "Hint: in most cases, you'll want to use WAN here" +msgstr "Sugestão: na maioria dos casos, você vai querer utilizar WAN aqui" + +#: usr/local/www/firewall_nat_1to1_edit.php:319 +#: usr/local/www/firewall_nat_1to1_edit.php:326 +#: usr/local/www/firewall_nat_1to1_edit.php:324 +#: usr/local/www/firewall_nat_1to1_edit.php:325 +msgid "External subnet IP" +msgstr "IP de subrede externa" + +#: usr/local/www/firewall_nat_1to1_edit.php:323 +#: usr/local/www/firewall_nat_1to1_edit.php:330 +#: usr/local/www/firewall_nat_1to1_edit.php:328 +#: usr/local/www/firewall_nat_1to1_edit.php:329 +msgid "Enter the external (usually on a WAN) subnet's starting address for the 1:1 mapping. The subnet mask from the internal address below will be applied to this IP address." +msgstr "Informe um endereço de início da subrede externa (normalmente em uma WAN) para o mapeamento 1:1. A máscara de subnet do endereço fonte abaixo será aplicada para esse endereço IP." + +#: usr/local/www/firewall_nat_1to1_edit.php:324 +#: usr/local/www/firewall_nat_1to1_edit.php:331 +#: usr/local/www/firewall_nat_1to1_edit.php:329 +#: usr/local/www/firewall_nat_1to1_edit.php:330 +msgid "Hint: this is generally an address owned by the router itself on the selected interface." +msgstr "Dica: isso é geralmente um endereço propriedade do roteador na interface selecionada." + +#: usr/local/www/firewall_nat_1to1_edit.php:331 +#: usr/local/www/firewall_nat_1to1_edit.php:386 +#: usr/local/www/firewall_nat_edit.php:538 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_rules_edit.php:858 +#: usr/local/www/firewall_rules_edit.php:951 +#: usr/local/www/firewall_nat_npt_edit.php:209 +#: usr/local/www/firewall_nat_npt_edit.php:237 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_npt_edit.php:214 +#: usr/local/www/firewall_nat_npt_edit.php:242 +#: usr/local/www/firewall_nat_out_edit.php:514 +#: usr/local/www/firewall_rules_edit.php:893 +#: usr/local/www/firewall_rules_edit.php:986 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_1to1_edit.php:336 +#: usr/local/www/firewall_nat_1to1_edit.php:391 +#: usr/local/www/firewall_nat_npt_edit.php:213 +#: usr/local/www/firewall_nat_npt_edit.php:241 +#: usr/local/www/firewall_nat_edit.php:544 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:896 +#: usr/local/www/firewall_rules_edit.php:995 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_nat_edit.php:628 +#: usr/local/www/firewall_nat_out_edit.php:518 +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:1008 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_nat_out_edit.php:530 +#: usr/local/www/firewall_rules_edit.php:907 +#: usr/local/www/firewall_rules_edit.php:1007 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_nat_npt_edit.php:212 +#: usr/local/www/firewall_nat_npt_edit.php:240 +#: usr/local/www/firewall_nat_1to1_edit.php:337 +#: usr/local/www/firewall_nat_1to1_edit.php:392 +#: usr/local/www/firewall_nat_out_edit.php:531 +#: usr/local/www/firewall_rules_edit.php:955 +#: usr/local/www/firewall_rules_edit.php:1055 +msgid "not" +msgstr "não" + +#: usr/local/www/firewall_nat_1to1_edit.php:333 +#: usr/local/www/firewall_nat_1to1_edit.php:388 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/firewall_nat_edit.php:629 +#: usr/local/www/firewall_nat_out_edit.php:502 +#: usr/local/www/firewall_rules_edit.php:860 +#: usr/local/www/firewall_rules_edit.php:953 +#: usr/local/www/firewall_nat_npt_edit.php:211 +#: usr/local/www/firewall_nat_npt_edit.php:239 +#: usr/local/www/firewall_nat_1to1_edit.php:340 +#: usr/local/www/firewall_nat_1to1_edit.php:395 +#: usr/local/www/firewall_nat_npt_edit.php:216 +#: usr/local/www/firewall_nat_npt_edit.php:244 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/firewall_rules_edit.php:895 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:547 +#: usr/local/www/firewall_nat_edit.php:636 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_npt_edit.php:215 +#: usr/local/www/firewall_nat_npt_edit.php:243 +#: usr/local/www/firewall_nat_edit.php:546 +#: usr/local/www/firewall_nat_edit.php:635 +#: usr/local/www/firewall_rules_edit.php:898 +#: usr/local/www/firewall_rules_edit.php:997 +#: usr/local/www/firewall_nat_edit.php:541 +#: usr/local/www/firewall_nat_edit.php:630 +#: usr/local/www/firewall_nat_out_edit.php:519 +#: usr/local/www/firewall_rules_edit.php:910 +#: usr/local/www/firewall_rules_edit.php:1010 +#: usr/local/www/firewall_nat_edit.php:553 +#: usr/local/www/firewall_nat_edit.php:642 +#: usr/local/www/firewall_nat_out_edit.php:531 +#: usr/local/www/firewall_rules_edit.php:909 +#: usr/local/www/firewall_rules_edit.php:1009 +#: usr/local/www/firewall_nat_edit.php:554 +#: usr/local/www/firewall_nat_edit.php:643 +#: usr/local/www/firewall_nat_npt_edit.php:214 +#: usr/local/www/firewall_nat_npt_edit.php:242 +#: usr/local/www/firewall_nat_1to1_edit.php:339 +#: usr/local/www/firewall_nat_1to1_edit.php:394 +#: usr/local/www/firewall_nat_out_edit.php:532 +#: usr/local/www/firewall_rules_edit.php:957 +#: usr/local/www/firewall_rules_edit.php:1057 +msgid "Use this option to invert the sense of the match." +msgstr "Use essa opção para inverter o sentido da correspondência." + +#: usr/local/www/firewall_nat_1to1_edit.php:343 +#: usr/local/www/firewall_nat_1to1_edit.php:398 +#: usr/local/www/firewall_nat_edit.php:550 +#: usr/local/www/firewall_nat_edit.php:597 +#: usr/local/www/firewall_nat_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:639 +#: usr/local/www/firewall_nat_out_edit.php:475 +#: usr/local/www/firewall_nat_out_edit.php:509 +#: usr/local/www/firewall_nat_out_edit.php:569 +#: usr/local/www/firewall_rules.php:128 +#: usr/local/www/firewall_rules_edit.php:827 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules_edit.php:921 +#: usr/local/www/firewall_rules_edit.php:934 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:1013 +#: usr/local/www/firewall_rules_edit.php:1026 +#: usr/local/www/firewall_rules_edit.php:1090 +#: usr/local/www/services_captiveportal_ip.php:175 +#: usr/local/www/services_captiveportal_ip.php:182 +#: usr/local/www/services_captiveportal_hostname.php:176 +#: usr/local/www/services_captiveportal_hostname.php:183 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/firewall_nat_out_edit.php:488 +#: usr/local/www/firewall_nat_out_edit.php:522 +#: usr/local/www/firewall_nat_out_edit.php:582 +#: usr/local/www/firewall_rules_edit.php:862 +#: usr/local/www/firewall_rules_edit.php:905 +#: usr/local/www/firewall_rules_edit.php:956 +#: usr/local/www/firewall_rules_edit.php:969 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:998 +#: usr/local/www/firewall_rules_edit.php:1048 +#: usr/local/www/firewall_rules_edit.php:1061 +#: usr/local/www/firewall_rules_edit.php:1125 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:604 +#: usr/local/www/firewall_nat_edit.php:617 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_nat_1to1_edit.php:348 +#: usr/local/www/firewall_nat_1to1_edit.php:403 +#: usr/local/www/services_captiveportal_ip.php:173 +#: usr/local/www/services_captiveportal_ip.php:180 +#: usr/local/www/services_captiveportal_hostname.php:174 +#: usr/local/www/services_captiveportal_hostname.php:181 +#: usr/local/www/firewall_rules.php:126 +#: usr/local/www/firewall_nat_edit.php:556 +#: usr/local/www/firewall_nat_edit.php:603 +#: usr/local/www/firewall_nat_edit.php:616 +#: usr/local/www/firewall_nat_edit.php:645 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/firewall_rules_edit.php:978 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1007 +#: usr/local/www/firewall_rules_edit.php:1063 +#: usr/local/www/firewall_rules_edit.php:1076 +#: usr/local/www/firewall_rules_edit.php:1140 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:598 +#: usr/local/www/firewall_nat_edit.php:611 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:526 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:920 +#: usr/local/www/firewall_rules_edit.php:991 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1020 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_rules_edit.php:1153 +#: usr/local/www/firewall_nat_edit.php:563 +#: usr/local/www/firewall_nat_edit.php:623 +#: usr/local/www/firewall_nat_edit.php:652 +#: usr/local/www/firewall_nat_out_edit.php:504 +#: usr/local/www/firewall_nat_out_edit.php:538 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules_edit.php:919 +#: usr/local/www/firewall_rules_edit.php:977 +#: usr/local/www/firewall_rules_edit.php:990 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1019 +#: usr/local/www/firewall_rules_edit.php:1075 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:624 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/firewall_nat_1to1_edit.php:349 +#: usr/local/www/firewall_nat_1to1_edit.php:404 +#: usr/local/www/firewall_nat_out_edit.php:539 +#: usr/local/www/firewall_rules_edit.php:924 +#: usr/local/www/firewall_rules_edit.php:967 +#: usr/local/www/firewall_rules_edit.php:1025 +#: usr/local/www/firewall_rules_edit.php:1038 +#: usr/local/www/firewall_rules_edit.php:1067 +#: usr/local/www/firewall_rules_edit.php:1123 +#: usr/local/www/firewall_rules_edit.php:1136 +#: usr/local/www/firewall_rules_edit.php:1200 +msgid "any" +msgstr "qualquer" + +#: usr/local/www/firewall_nat_1to1_edit.php:344 +#: usr/local/www/firewall_nat_1to1_edit.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:349 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +msgid "Single host" +msgstr "Host único" + +#: usr/local/www/firewall_nat_1to1_edit.php:347 +#: usr/local/www/firewall_nat_1to1_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:554 +#: usr/local/www/firewall_nat_edit.php:643 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules_edit.php:967 +#: usr/local/www/firewall_nat_1to1_edit.php:354 +#: usr/local/www/firewall_nat_1to1_edit.php:409 +#: usr/local/www/firewall_rules_edit.php:909 +#: usr/local/www/firewall_rules_edit.php:1002 +#: usr/local/www/firewall_nat_edit.php:561 +#: usr/local/www/firewall_nat_edit.php:650 +#: usr/local/www/firewall_nat_1to1_edit.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:407 +#: usr/local/www/firewall_nat_edit.php:560 +#: usr/local/www/firewall_nat_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:918 +#: usr/local/www/firewall_rules_edit.php:1017 +#: usr/local/www/firewall_nat_edit.php:555 +#: usr/local/www/firewall_nat_edit.php:644 +#: usr/local/www/firewall_rules_edit.php:930 +#: usr/local/www/firewall_rules_edit.php:1030 +#: usr/local/www/firewall_nat_edit.php:567 +#: usr/local/www/firewall_nat_edit.php:656 +#: usr/local/www/firewall_rules_edit.php:929 +#: usr/local/www/firewall_rules_edit.php:1029 +#: usr/local/www/firewall_nat_edit.php:568 +#: usr/local/www/firewall_nat_edit.php:657 +#: usr/local/www/firewall_nat_1to1_edit.php:353 +#: usr/local/www/firewall_nat_1to1_edit.php:408 +#: usr/local/www/firewall_rules_edit.php:977 +#: usr/local/www/firewall_rules_edit.php:1077 +msgid "PPTP clients" +msgstr "Cliente PPTP" + +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:970 +#: usr/local/www/firewall_nat_1to1_edit.php:357 +#: usr/local/www/firewall_nat_1to1_edit.php:412 +#: usr/local/www/firewall_rules_edit.php:912 +#: usr/local/www/firewall_rules_edit.php:1005 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/firewall_nat_1to1_edit.php:355 +#: usr/local/www/firewall_nat_1to1_edit.php:410 +#: usr/local/www/firewall_nat_edit.php:563 +#: usr/local/www/firewall_nat_edit.php:652 +#: usr/local/www/firewall_rules_edit.php:921 +#: usr/local/www/firewall_rules_edit.php:1020 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_rules_edit.php:933 +#: usr/local/www/firewall_rules_edit.php:1033 +#: usr/local/www/firewall_nat_edit.php:570 +#: usr/local/www/firewall_nat_edit.php:659 +#: usr/local/www/firewall_rules_edit.php:932 +#: usr/local/www/firewall_rules_edit.php:1032 +#: usr/local/www/firewall_nat_edit.php:571 +#: usr/local/www/firewall_nat_edit.php:660 +#: usr/local/www/firewall_nat_1to1_edit.php:356 +#: usr/local/www/firewall_nat_1to1_edit.php:411 +#: usr/local/www/firewall_rules_edit.php:980 +#: usr/local/www/firewall_rules_edit.php:1080 +msgid "PPPoE clients" +msgstr "Cliente PPPoE" + +#: usr/local/www/firewall_nat_1to1_edit.php:353 +#: usr/local/www/firewall_nat_1to1_edit.php:408 +#: usr/local/www/firewall_nat_edit.php:560 +#: usr/local/www/firewall_nat_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:973 +#: usr/local/www/firewall_nat_1to1_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:415 +#: usr/local/www/firewall_rules_edit.php:915 +#: usr/local/www/firewall_rules_edit.php:1008 +#: usr/local/www/firewall_nat_edit.php:567 +#: usr/local/www/firewall_nat_edit.php:656 +#: usr/local/www/firewall_nat_1to1_edit.php:358 +#: usr/local/www/firewall_nat_1to1_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 +#: usr/local/www/firewall_rules_edit.php:924 +#: usr/local/www/firewall_rules_edit.php:1023 +#: usr/local/www/firewall_nat_edit.php:561 +#: usr/local/www/firewall_nat_edit.php:650 +#: usr/local/www/firewall_rules_edit.php:936 +#: usr/local/www/firewall_rules_edit.php:1036 +#: usr/local/www/firewall_nat_edit.php:573 +#: usr/local/www/firewall_nat_edit.php:662 +#: usr/local/www/firewall_rules_edit.php:935 +#: usr/local/www/firewall_rules_edit.php:1035 +#: usr/local/www/firewall_nat_edit.php:574 +#: usr/local/www/firewall_nat_edit.php:663 +#: usr/local/www/firewall_nat_1to1_edit.php:359 +#: usr/local/www/firewall_nat_1to1_edit.php:414 +#: usr/local/www/firewall_rules_edit.php:983 +#: usr/local/www/firewall_rules_edit.php:1083 +msgid "L2TP clients" +msgstr "Cliente L2TP" + +#: usr/local/www/firewall_nat_1to1_edit.php:358 +#: usr/local/www/firewall_nat_1to1_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_rules_edit.php:978 +#: usr/local/www/firewall_nat_1to1_edit.php:365 +#: usr/local/www/firewall_nat_1to1_edit.php:420 +#: usr/local/www/firewall_rules_edit.php:1013 +#: usr/local/www/firewall_nat_edit.php:572 +#: usr/local/www/firewall_nat_edit.php:661 +#: usr/local/www/firewall_nat_1to1_edit.php:363 +#: usr/local/www/firewall_nat_1to1_edit.php:418 +#: usr/local/www/firewall_nat_edit.php:571 +#: usr/local/www/firewall_nat_edit.php:660 +#: usr/local/www/firewall_rules_edit.php:1028 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 +#: usr/local/www/firewall_rules_edit.php:1041 +#: usr/local/www/firewall_nat_edit.php:578 +#: usr/local/www/firewall_nat_edit.php:667 +#: usr/local/www/firewall_rules_edit.php:1040 +#: usr/local/www/firewall_nat_edit.php:579 +#: usr/local/www/firewall_nat_edit.php:668 +#: usr/local/www/firewall_nat_1to1_edit.php:364 +#: usr/local/www/firewall_nat_1to1_edit.php:419 +#: usr/local/www/firewall_rules_edit.php:1088 +msgid "subnet" +msgstr "sub-rede" + +#: usr/local/www/firewall_nat_1to1_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:415 +#: usr/local/www/firewall_nat_edit.php:567 +#: usr/local/www/firewall_nat_edit.php:656 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules_edit.php:980 +#: usr/local/www/firewall_nat_1to1_edit.php:367 +#: usr/local/www/firewall_nat_1to1_edit.php:422 +#: usr/local/www/firewall_rules_edit.php:922 +#: usr/local/www/firewall_rules_edit.php:1015 +#: usr/local/www/firewall_nat_edit.php:574 +#: usr/local/www/firewall_nat_edit.php:663 +#: usr/local/www/firewall_nat_1to1_edit.php:365 +#: usr/local/www/firewall_nat_1to1_edit.php:420 +#: usr/local/www/firewall_nat_edit.php:573 +#: usr/local/www/firewall_nat_edit.php:662 +#: usr/local/www/firewall_rules_edit.php:931 +#: usr/local/www/firewall_rules_edit.php:1030 +#: usr/local/www/firewall_nat_edit.php:568 +#: usr/local/www/firewall_nat_edit.php:657 +#: usr/local/www/firewall_rules_edit.php:943 +#: usr/local/www/firewall_rules_edit.php:1043 +#: usr/local/www/firewall_nat_edit.php:580 +#: usr/local/www/firewall_nat_edit.php:669 +#: usr/local/www/firewall_rules_edit.php:942 +#: usr/local/www/firewall_rules_edit.php:1042 +#: usr/local/www/firewall_nat_edit.php:581 +#: usr/local/www/firewall_nat_edit.php:670 +#: usr/local/www/firewall_nat_1to1_edit.php:366 +#: usr/local/www/firewall_nat_1to1_edit.php:421 +#: usr/local/www/firewall_rules_edit.php:990 +#: usr/local/www/firewall_rules_edit.php:1090 +msgid "address" +msgstr "endereço" + +#: usr/local/www/firewall_nat_1to1_edit.php:379 +#: usr/local/www/firewall_nat_1to1_edit.php:386 +#: usr/local/www/firewall_nat_1to1_edit.php:384 +#: usr/local/www/firewall_nat_1to1_edit.php:385 +msgid "Enter the internal (LAN) subnet for the 1:1 mapping. The subnet size specified for the internal subnet will be applied to the external subnet." +msgstr "Insira a subrede (LAN) interna para o mapeamento 1:1. O tamanho da subrede especificado para a subrede externa também se aplica para a subrede interna." + +#: usr/local/www/firewall_nat_1to1_edit.php:399 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_nat_1to1_edit.php:406 +#: usr/local/www/firewall_rules_edit.php:906 +#: usr/local/www/firewall_rules_edit.php:999 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_nat_1to1_edit.php:404 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_rules_edit.php:915 +#: usr/local/www/firewall_rules_edit.php:1014 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_rules_edit.php:927 +#: usr/local/www/firewall_rules_edit.php:1027 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/firewall_rules_edit.php:926 +#: usr/local/www/firewall_rules_edit.php:1026 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/firewall_rules_edit.php:974 +#: usr/local/www/firewall_rules_edit.php:1074 +msgid "Single host or alias" +msgstr "Host único ou alias" + +#: usr/local/www/firewall_nat_1to1_edit.php:436 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +#: usr/local/www/firewall_nat_1to1_edit.php:441 +#: usr/local/www/firewall_nat_1to1_edit.php:442 +msgid "The 1:1 mapping will only be used for connections to or from the specified destination." +msgstr "O mapeamento 1:1 será usado para conexões para ou de um destino específico." + +#: usr/local/www/firewall_nat_1to1_edit.php:437 +#: usr/local/www/firewall_nat_1to1_edit.php:444 +#: usr/local/www/firewall_nat_1to1_edit.php:442 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +msgid "Hint: this is usually 'any'." +msgstr "Dica: isso é normalmente 'qualquer'." + +#: usr/local/www/firewall_nat_1to1_edit.php:447 +#: usr/local/www/firewall_nat_edit.php:783 +#: usr/local/www/firewall_nat_1to1_edit.php:454 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/firewall_nat_1to1_edit.php:452 +#: usr/local/www/firewall_nat_edit.php:789 +#: usr/local/www/firewall_nat_edit.php:784 +#: usr/local/www/firewall_nat_edit.php:796 +#: usr/local/www/firewall_nat_edit.php:797 +msgid "NAT reflection" +msgstr "Reflexão NAT" + +#: usr/local/www/firewall_nat_1to1_edit.php:450 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/firewall_nat_1to1_edit.php:457 +#: usr/local/www/firewall_nat_1to1_edit.php:455 +msgid "use system default" +msgstr "usar padrão do sistema" + +#: usr/local/www/firewall_nat_1to1_edit.php:451 +#: usr/local/www/firewall_nat_edit.php:787 +#: usr/local/www/firewall_nat_1to1_edit.php:458 +#: usr/local/www/firewall_nat_1to1_edit.php:456 +msgid "enable" +msgstr "habilitar" + +#: usr/local/www/firewall_nat_1to1_edit.php:452 +#: usr/local/www/firewall_nat_edit.php:788 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_1to1_edit.php:457 +msgid "disable" +msgstr "desabilitar" + +#: usr/local/www/firewall_nat_edit.php:109 +#: usr/local/www/firewall_nat_edit.php:114 +#: usr/local/www/firewall_nat_edit.php:119 +#, php-format +msgid "Invalid characters detected %s. Please remove invalid characters and save again." +msgstr "Caracteres inválidos detectados %s. Por favor, remova os caracteres inválidos e salve novamente." + +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:192 +msgid "Destination port from" +msgstr "Porta de destino de" + +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:192 +msgid "Destination port to" +msgstr "Porta de destino até" + +#: usr/local/www/firewall_nat_edit.php:198 +#: usr/local/www/firewall_nat_edit.php:740 +#: usr/local/www/firewall_nat_edit.php:747 +#: usr/local/www/firewall_nat_edit.php:746 +#: usr/local/www/firewall_nat_edit.php:203 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/firewall_nat_edit.php:208 +#: usr/local/www/firewall_nat_edit.php:753 +#: usr/local/www/firewall_nat_edit.php:754 +msgid "Redirect target IP" +msgstr "Redirecionar IP de destino" + +#: usr/local/www/firewall_nat_edit.php:213 +#: usr/local/www/firewall_nat_edit.php:220 +#: usr/local/www/firewall_nat_edit.php:225 +#: usr/local/www/firewall_nat_edit.php:230 +#, php-format +msgid "\"%s\" is not a valid redirect target IP address or host alias." +msgstr "\"%s\" não é um endereço IP alvo válido ou um alias de host." + +#: usr/local/www/firewall_nat_edit.php:217 +#: usr/local/www/firewall_rules_edit.php:325 +#: usr/local/www/firewall_rules_edit.php:349 +#: usr/local/www/firewall_nat_edit.php:224 +#: usr/local/www/firewall_rules_edit.php:348 +#: usr/local/www/firewall_rules_edit.php:351 +#: usr/local/www/firewall_nat_edit.php:229 +#: usr/local/www/firewall_rules_edit.php:357 +#: usr/local/www/firewall_nat_edit.php:234 +#, php-format +msgid "%s is not a valid start source port. It must be a port alias or integer between 1 and 65535." +msgstr "%s não é um inicio de porta de origem válido. Deve ser um alias de porta ou um inteiro entre 1 e 65535." + +#: usr/local/www/firewall_nat_edit.php:219 +#: usr/local/www/firewall_nat_edit.php:226 +#: usr/local/www/firewall_nat_edit.php:231 +#: usr/local/www/firewall_nat_edit.php:236 +#, php-format +msgid "%s is not a valid end source port. It must be a port alias or integer between 1 and 65535." +msgstr "%s não é um fim de porta de origem válido. Deve ser um alias de porta ou um inteiro entre 1 e 65535." + +#: usr/local/www/firewall_nat_edit.php:221 +#: usr/local/www/firewall_rules_edit.php:329 +#: usr/local/www/firewall_rules_edit.php:353 +#: usr/local/www/firewall_nat_edit.php:228 +#: usr/local/www/firewall_rules_edit.php:352 +#: usr/local/www/firewall_rules_edit.php:355 +#: usr/local/www/firewall_nat_edit.php:233 +#: usr/local/www/firewall_rules_edit.php:361 +#: usr/local/www/firewall_nat_edit.php:238 +#, php-format +msgid "%s is not a valid start destination port. It must be a port alias or integer between 1 and 65535." +msgstr "%s não é um inicio de porta de destino válido. Deve ser um alias de porta ou um inteiro entre 1 e 65535." + +#: usr/local/www/firewall_nat_edit.php:223 +#: usr/local/www/firewall_rules_edit.php:331 +#: usr/local/www/firewall_rules_edit.php:355 +#: usr/local/www/firewall_nat_edit.php:230 +#: usr/local/www/firewall_rules_edit.php:354 +#: usr/local/www/firewall_rules_edit.php:357 +#: usr/local/www/firewall_nat_edit.php:235 +#: usr/local/www/firewall_rules_edit.php:363 +#: usr/local/www/firewall_nat_edit.php:240 +#, php-format +msgid "%s is not a valid end destination port. It must be a port alias or integer between 1 and 65535." +msgstr "%s não é um fim de porta de destino válido. Deve ser um alias de porta ou um inteiro entre 1 e 65535." + +#: usr/local/www/firewall_nat_edit.php:226 +#, php-format +msgid "%s is not a valid local port. It must be a port alias or integer between 1 and 65535." +msgstr "%s não é uma porta local válida. Deve ser um alias de porta ou um inteiro entre 1 e 65535." + +#: usr/local/www/firewall_nat_edit.php:237 +#: usr/local/www/firewall_rules_edit.php:365 +#: usr/local/www/firewall_rules_edit.php:394 +#: usr/local/www/firewall_nat_edit.php:244 +#: usr/local/www/firewall_rules_edit.php:393 +#: usr/local/www/firewall_rules_edit.php:396 +#: usr/local/www/firewall_nat_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:254 +#, php-format +msgid "%s is not a valid source IP address or alias." +msgstr "%s não é um endereço IP válido ou alias." + +#: usr/local/www/firewall_nat_edit.php:240 +#: usr/local/www/firewall_nat_out_edit.php:151 +#: usr/local/www/firewall_rules_edit.php:368 +#: usr/local/www/firewall_nat_out_edit.php:164 +#: usr/local/www/firewall_rules_edit.php:397 +#: usr/local/www/firewall_nat_edit.php:247 +#: usr/local/www/firewall_rules_edit.php:396 +#: usr/local/www/firewall_rules_edit.php:399 +#: usr/local/www/firewall_nat_edit.php:252 +#: usr/local/www/firewall_nat_out_edit.php:168 +#: usr/local/www/firewall_rules_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:257 +#: usr/local/www/firewall_nat_out_edit.php:174 +msgid "A valid source bit count must be specified." +msgstr "Um bit count de origem válido deve ser especificado." + +#: usr/local/www/firewall_nat_edit.php:267 +#: usr/local/www/firewall_nat_edit.php:274 +#: usr/local/www/firewall_nat_edit.php:279 +#: usr/local/www/firewall_nat_edit.php:284 +msgid "The target port range must be an integer between 1 and 65535." +msgstr "O intervalo de porta de destino deve ser um inteiro entre 1 e 65535." + +#: usr/local/www/firewall_nat_edit.php:288 +#: usr/local/www/firewall_nat_edit.php:295 +#: usr/local/www/firewall_nat_edit.php:300 +#: usr/local/www/firewall_nat_edit.php:305 +msgid "The destination port range overlaps with an existing entry." +msgstr "O intervalo de porta de destino sobrepõe uma entrada existente." + +#: usr/local/www/firewall_nat_edit.php:453 +#: usr/local/www/firewall_nat_edit.php:460 +#: usr/local/www/firewall_nat_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:454 +#: usr/local/www/firewall_nat_edit.php:466 +#: usr/local/www/firewall_nat_edit.php:467 +msgid "Edit Redirect entry" +msgstr "Editar entrada de redirecionamento" + +#: usr/local/www/firewall_nat_edit.php:468 +#: usr/local/www/firewall_nat_edit.php:475 +#: usr/local/www/firewall_nat_edit.php:474 +#: usr/local/www/firewall_nat_edit.php:469 +#: usr/local/www/firewall_nat_edit.php:481 +#: usr/local/www/firewall_nat_edit.php:482 +msgid "No RDR (NOT)" +msgstr "Sem RDR (NÃO)" + +#: usr/local/www/firewall_nat_edit.php:471 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_edit.php:472 +#: usr/local/www/firewall_nat_edit.php:484 +#: usr/local/www/firewall_nat_edit.php:485 +msgid "Enabling this option will disable redirection for traffic matching this rule." +msgstr "Ativando esta opção irá desativar o redirecionamento do tráfego correspondente a esta regra." + +#: usr/local/www/firewall_nat_edit.php:472 +#: usr/local/www/firewall_nat_edit.php:479 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_edit.php:473 +#: usr/local/www/firewall_nat_edit.php:485 +#: usr/local/www/firewall_nat_edit.php:486 +msgid "Hint: this option is rarely needed, don't use this unless you know what you're doing." +msgstr "Dica: essa opção raramente é necessária, não use-a a menos que você saiba o que está fazendo." + +#: usr/local/www/firewall_nat_edit.php:514 +#: usr/local/www/firewall_nat_out_edit.php:452 +#: usr/local/www/firewall_nat_out_edit.php:465 +#: usr/local/www/firewall_nat_edit.php:521 +#: usr/local/www/firewall_nat_edit.php:520 +#: usr/local/www/firewall_nat_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:469 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_nat_out_edit.php:481 +#: usr/local/www/firewall_nat_edit.php:528 +msgid "Choose which interface this rule applies to." +msgstr "Escolha qual interface esta regra se aplica." + +#: usr/local/www/firewall_nat_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:453 +#: usr/local/www/firewall_nat_out_edit.php:466 +#: usr/local/www/firewall_nat_edit.php:522 +#: usr/local/www/firewall_nat_edit.php:521 +#: usr/local/www/firewall_nat_edit.php:516 +#: usr/local/www/firewall_nat_out_edit.php:470 +#: usr/local/www/firewall_nat_edit.php:528 +#: usr/local/www/firewall_nat_out_edit.php:482 +#: usr/local/www/firewall_nat_edit.php:529 +msgid "Hint: in most cases, you'll want to use WAN here." +msgstr "Dica: na maioria dos casos, você vai querer usar WAN aqui." + +#: usr/local/www/firewall_nat_edit.php:524 +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_nat_edit.php:530 +#: usr/local/www/firewall_rules_edit.php:856 +#: usr/local/www/firewall_nat_edit.php:525 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_nat_edit.php:537 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_nat_edit.php:538 +#: usr/local/www/firewall_rules_edit.php:915 +msgid "Choose which IP protocol this rule should match." +msgstr "Escolha qual protocolo IP essa regra deve corresponder." + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_nat_edit.php:540 +msgid "Hint: in most cases, you should specify" +msgstr "Dica: na maioria dos casos, você deve especificar" + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_nat_edit.php:540 +msgid "TCP" +msgstr "TCP" + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/diag_ipsec_sad.php:135 usr/local/www/diag_ipsec_spd.php:144 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/diag_ipsec_sad.php:136 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/diag_ipsec_spd.php:145 +#: usr/local/www/firewall_rules_edit.php:856 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/firewall_rules_edit.php:915 +msgid "here." +msgstr "aqui." + +#: usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_nat_edit.php:538 +#: usr/local/www/firewall_nat_edit.php:537 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/firewall_nat_edit.php:544 +#: usr/local/www/firewall_nat_edit.php:545 +msgid "Show source address and port range" +msgstr "Mostrar endereço de origem e intervalo de portas" + +#: usr/local/www/firewall_nat_edit.php:589 +#: usr/local/www/firewall_rules_edit.php:913 +#: usr/local/www/firewall_rules_edit.php:948 +#: usr/local/www/firewall_nat_edit.php:596 +#: usr/local/www/firewall_nat_edit.php:595 +#: usr/local/www/firewall_rules_edit.php:957 +#: usr/local/www/firewall_nat_edit.php:590 +#: usr/local/www/firewall_rules_edit.php:970 +#: usr/local/www/firewall_nat_edit.php:602 +#: usr/local/www/firewall_rules_edit.php:969 +#: usr/local/www/firewall_nat_edit.php:603 +#: usr/local/www/firewall_rules_edit.php:1017 +msgid "Source port range" +msgstr "Intervalo da porta de origem" + +#: usr/local/www/firewall_nat_edit.php:593 +#: usr/local/www/firewall_nat_edit.php:705 +#: usr/local/www/firewall_rules_edit.php:917 +#: usr/local/www/firewall_rules_edit.php:1009 +#: usr/local/www/firewall_rules_edit.php:952 +#: usr/local/www/firewall_rules_edit.php:1044 +#: usr/local/www/firewall_nat_edit.php:600 +#: usr/local/www/firewall_nat_edit.php:712 +#: usr/local/www/firewall_nat_edit.php:599 +#: usr/local/www/firewall_nat_edit.php:711 +#: usr/local/www/firewall_rules_edit.php:961 +#: usr/local/www/firewall_rules_edit.php:1059 +#: usr/local/www/firewall_nat_edit.php:594 +#: usr/local/www/firewall_nat_edit.php:706 +#: usr/local/www/firewall_rules_edit.php:974 +#: usr/local/www/firewall_rules_edit.php:1072 +#: usr/local/www/firewall_nat_edit.php:606 +#: usr/local/www/firewall_nat_edit.php:718 +#: usr/local/www/firewall_rules_edit.php:973 +#: usr/local/www/firewall_rules_edit.php:1071 +#: usr/local/www/firewall_nat_edit.php:607 +#: usr/local/www/firewall_nat_edit.php:719 +#: usr/local/www/firewall_rules_edit.php:1021 +#: usr/local/www/firewall_rules_edit.php:1119 +msgid "from:" +msgstr "a partir de:" + +#: usr/local/www/firewall_nat_edit.php:596 +#: usr/local/www/firewall_nat_edit.php:609 +#: usr/local/www/firewall_nat_edit.php:708 +#: usr/local/www/firewall_nat_edit.php:721 +#: usr/local/www/firewall_nat_edit.php:751 +#: usr/local/www/firewall_rules_edit.php:920 +#: usr/local/www/firewall_rules_edit.php:933 +#: usr/local/www/firewall_rules_edit.php:1012 +#: usr/local/www/firewall_rules_edit.php:1025 +#: usr/local/www/firewall_rules_edit.php:955 +#: usr/local/www/firewall_rules_edit.php:968 +#: usr/local/www/firewall_rules_edit.php:1047 +#: usr/local/www/firewall_rules_edit.php:1060 +#: usr/local/www/firewall_nat_edit.php:603 +#: usr/local/www/firewall_nat_edit.php:616 +#: usr/local/www/firewall_nat_edit.php:715 +#: usr/local/www/firewall_nat_edit.php:728 +#: usr/local/www/firewall_nat_edit.php:758 +#: usr/local/www/firewall_nat_edit.php:602 +#: usr/local/www/firewall_nat_edit.php:615 +#: usr/local/www/firewall_nat_edit.php:714 +#: usr/local/www/firewall_nat_edit.php:727 +#: usr/local/www/firewall_nat_edit.php:757 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_rules_edit.php:977 +#: usr/local/www/firewall_rules_edit.php:1062 +#: usr/local/www/firewall_rules_edit.php:1075 +#: usr/local/www/firewall_nat_edit.php:597 +#: usr/local/www/firewall_nat_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:709 +#: usr/local/www/firewall_nat_edit.php:722 +#: usr/local/www/firewall_nat_edit.php:752 +#: usr/local/www/firewall_rules_edit.php:990 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/firewall_nat_edit.php:622 +#: usr/local/www/firewall_nat_edit.php:734 +#: usr/local/www/firewall_nat_edit.php:764 +#: usr/local/www/firewall_rules_edit.php:976 +#: usr/local/www/firewall_rules_edit.php:989 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:1087 +#: usr/local/www/firewall_nat_edit.php:623 +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_nat_edit.php:765 +#: usr/local/www/firewall_rules_edit.php:1024 +#: usr/local/www/firewall_rules_edit.php:1037 +#: usr/local/www/firewall_rules_edit.php:1122 +#: usr/local/www/firewall_rules_edit.php:1135 +msgid "other" +msgstr "outros" + +#: usr/local/www/firewall_nat_edit.php:606 +#: usr/local/www/firewall_nat_edit.php:718 +#: usr/local/www/firewall_rules_edit.php:930 +#: usr/local/www/firewall_rules_edit.php:1022 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/firewall_rules_edit.php:1057 +#: usr/local/www/firewall_nat_edit.php:613 +#: usr/local/www/firewall_nat_edit.php:725 +#: usr/local/www/firewall_nat_edit.php:612 +#: usr/local/www/firewall_nat_edit.php:724 +#: usr/local/www/firewall_rules_edit.php:974 +#: usr/local/www/firewall_rules_edit.php:1072 +#: usr/local/www/firewall_nat_edit.php:607 +#: usr/local/www/firewall_nat_edit.php:719 +#: usr/local/www/firewall_rules_edit.php:987 +#: usr/local/www/firewall_rules_edit.php:1085 +#: usr/local/www/firewall_nat_edit.php:619 +#: usr/local/www/firewall_nat_edit.php:731 +#: usr/local/www/firewall_rules_edit.php:986 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:732 +#: usr/local/www/firewall_rules_edit.php:1034 +#: usr/local/www/firewall_rules_edit.php:1132 +msgid "to:" +msgstr "para:" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "Specify the source port or port range for this rule" +msgstr "Especifique a porta de origem ou intervalo de portas para esta regra" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_rules_edit.php:1048 +msgid "This is usually" +msgstr "Isto normalmente é" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_rules_edit.php:1048 +msgid "random" +msgstr "aleatório" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:634 +msgid "and almost never equal to the destination port range (and should usually be 'any')" +msgstr "e quase nunca é igual ao intervalo de porta de destino (e geralmente deve ser 'qualquer')" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:736 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1102 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_nat_edit.php:748 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1101 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_rules_edit.php:1048 +#: usr/local/www/firewall_rules_edit.php:1149 +msgid "Hint: you can leave the" +msgstr "Dica: você pode deixar o" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_rules_edit.php:1048 +msgid "field empty if you only want to filter a single port." +msgstr "campo vazio se você apenas deseja filtrar uma única porta." + +#: usr/local/www/firewall_nat_edit.php:701 +#: usr/local/www/firewall_nat_edit.php:708 +#: usr/local/www/firewall_nat_edit.php:707 +#: usr/local/www/firewall_nat_edit.php:702 +#: usr/local/www/firewall_nat_edit.php:714 +#: usr/local/www/firewall_nat_edit.php:715 +msgid "Destination port range" +msgstr "Destino intervalo de portas" + +#: usr/local/www/firewall_nat_edit.php:733 +#: usr/local/www/firewall_nat_edit.php:740 +#: usr/local/www/firewall_nat_edit.php:739 +#: usr/local/www/firewall_nat_edit.php:734 +#: usr/local/www/firewall_nat_edit.php:746 +#: usr/local/www/firewall_nat_edit.php:747 +msgid "Specify the port or port range for the destination of the packet for this mapping." +msgstr "Especifique o intervalo de porta ou porta de destino do pacote para esse mapeamento." + +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/firewall_nat_edit.php:736 +#: usr/local/www/firewall_nat_edit.php:748 +#: usr/local/www/firewall_nat_edit.php:749 +msgid "field empty if you only want to map a single port" +msgstr "campo vazio se você apenas deseja mapear uma única porta" + +#: usr/local/www/firewall_nat_edit.php:743 +#: usr/local/www/firewall_nat_edit.php:750 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_nat_edit.php:744 +#: usr/local/www/firewall_nat_edit.php:756 +#: usr/local/www/firewall_nat_edit.php:757 +msgid "Enter the internal IP address of the server on which you want to map the ports." +msgstr "Digite o endereço IP interno do servidor no qual pretende mapear as portas." + +#: usr/local/www/firewall_nat_edit.php:748 +#: usr/local/www/firewall_nat_edit.php:755 +#: usr/local/www/firewall_nat_edit.php:754 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_nat_edit.php:761 +#: usr/local/www/firewall_nat_edit.php:762 +msgid "Redirect target port" +msgstr "Redirecionar porta de destino" + +#: usr/local/www/firewall_nat_edit.php:762 +#: usr/local/www/firewall_nat_edit.php:769 +#: usr/local/www/firewall_nat_edit.php:768 +#: usr/local/www/firewall_nat_edit.php:763 +#: usr/local/www/firewall_nat_edit.php:775 +#: usr/local/www/firewall_nat_edit.php:776 +msgid "Specify the port on the machine with the IP address entered above. In case of a port range, specify the beginning port of the range (the end port will be calculated automatically)." +msgstr "Especificar a porta da máquina com o endereço IP digitado acima. No caso de uma porta, especifique a porta início do intervalo (a porta final será calculado automaticamente)." + +#: usr/local/www/firewall_nat_edit.php:766 +#: usr/local/www/firewall_nat_edit.php:773 +#: usr/local/www/firewall_nat_edit.php:772 +#: usr/local/www/firewall_nat_edit.php:767 +#: usr/local/www/firewall_nat_edit.php:779 +#: usr/local/www/firewall_nat_edit.php:780 +msgid "Hint: this is usually identical to the 'from' port above" +msgstr "Dica: isso normalmente é identico à porta 'De' acima" + +#: usr/local/www/firewall_nat_edit.php:776 +#: usr/local/www/firewall_nat_out_edit.php:629 +#: usr/local/www/firewall_rules_edit.php:1238 +#: usr/local/www/firewall_nat_out_edit.php:642 +#: usr/local/www/firewall_rules_edit.php:1273 +#: usr/local/www/firewall_nat_edit.php:783 +#: usr/local/www/firewall_nat_edit.php:782 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_nat_edit.php:777 +#: usr/local/www/firewall_nat_out_edit.php:644 +#: usr/local/www/firewall_rules_edit.php:1295 +#: usr/local/www/firewall_nat_edit.php:789 +#: usr/local/www/firewall_nat_out_edit.php:656 +#: usr/local/www/firewall_rules_edit.php:1294 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/firewall_rules_edit.php:1342 +msgid "No XMLRPC Sync" +msgstr "Sem XMLRPC Sync" + +#: usr/local/www/firewall_nat_edit.php:779 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/firewall_nat_edit.php:785 +msgid "HINT: This prevents the rule from automatically syncing to other CARP members" +msgstr "DICA: Isso impede que a regra automaticamente a sincronização com outros membros CARP" + +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:825 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/firewall_nat_edit.php:833 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/firewall_nat_edit.php:832 +#: usr/local/www/firewall_nat_edit.php:796 +#: usr/local/www/firewall_nat_edit.php:827 +#: usr/local/www/firewall_nat_edit.php:808 +#: usr/local/www/firewall_nat_edit.php:839 +#: usr/local/www/firewall_nat_edit.php:809 +#: usr/local/www/firewall_nat_edit.php:840 +msgid "Filter rule association" +msgstr "Associação de regra de filtro" + +#: usr/local/www/firewall_nat_edit.php:798 +#: usr/local/www/firewall_nat_edit.php:831 +#: usr/local/www/firewall_nat_edit.php:806 +#: usr/local/www/firewall_nat_edit.php:839 +#: usr/local/www/firewall_nat_edit.php:805 +#: usr/local/www/firewall_nat_edit.php:838 +#: usr/local/www/firewall_nat_edit.php:800 +#: usr/local/www/firewall_nat_edit.php:833 +#: usr/local/www/firewall_nat_edit.php:812 +#: usr/local/www/firewall_nat_edit.php:845 +#: usr/local/www/firewall_nat_edit.php:813 +#: usr/local/www/firewall_nat_edit.php:846 +msgid "Pass" +msgstr "Liberar" + +#: usr/local/www/firewall_nat_edit.php:808 +#: usr/local/www/firewall_nat_edit.php:816 +#: usr/local/www/firewall_nat_edit.php:815 +#: usr/local/www/firewall_nat_edit.php:810 +#: usr/local/www/firewall_nat_edit.php:822 +#: usr/local/www/firewall_nat_edit.php:823 +msgid "View the filter rule" +msgstr "Ver regra do filtro" + +#: usr/local/www/firewall_nat_edit.php:816 +#: usr/local/www/firewall_nat_edit.php:824 +#: usr/local/www/firewall_nat_edit.php:823 +#: usr/local/www/firewall_nat_edit.php:818 +#: usr/local/www/firewall_nat_edit.php:830 +#: usr/local/www/firewall_nat_edit.php:831 +msgid "Create new associated filter rule" +msgstr "Criar nova regra de filtro associada" + +#: usr/local/www/firewall_nat_edit.php:829 +#: usr/local/www/firewall_nat_edit.php:837 +#: usr/local/www/firewall_nat_edit.php:836 +#: usr/local/www/firewall_nat_edit.php:831 +#: usr/local/www/firewall_nat_edit.php:843 +#: usr/local/www/firewall_nat_edit.php:844 +msgid "Add associated filter rule" +msgstr "Adicionar regra de filtro associada" + +#: usr/local/www/firewall_nat_edit.php:830 +#: usr/local/www/firewall_nat_edit.php:838 +#: usr/local/www/firewall_nat_edit.php:837 +#: usr/local/www/firewall_nat_edit.php:832 +#: usr/local/www/firewall_nat_edit.php:844 +#: usr/local/www/firewall_nat_edit.php:845 +msgid "Add unassociated filter rule" +msgstr "Adicionar regra de filtro não associada" + +#: usr/local/www/firewall_nat_out.php:111 +#: usr/local/www/firewall_nat_out.php:112 +#, php-format +msgid "Auto created rule for ISAKMP - %1$s to %2$s" +msgstr "Regra criada automaticamente para ISAKMP - %1$s para %2$s" + +#: usr/local/www/firewall_nat_out.php:121 +#: usr/local/www/firewall_nat_out.php:123 +#, php-format +msgid "Auto created rule for %1$s to %2$s" +msgstr "Regra criada automaticamente para %1$s para %2$s" + +#: usr/local/www/firewall_nat_out.php:131 +#: usr/local/www/firewall_nat_out.php:135 +#, php-format +msgid "Auto created rule for localhost to %1$s" +msgstr "Regra criada automaticamente para %1$s" + +#: usr/local/www/firewall_nat_out.php:147 +#: usr/local/www/firewall_nat_out.php:148 +#: usr/local/www/firewall_nat_out.php:152 +msgid "Auto created rule for PPTP server" +msgstr "Regra criada automaticamente para servidor PPTP" + +#: usr/local/www/firewall_nat_out.php:167 +#: usr/local/www/firewall_nat_out.php:168 +#: usr/local/www/firewall_nat_out.php:173 +msgid "Auto created rule for PPPoE server" +msgstr "Regra criada automaticamente para servidor PPPoE" + +#: usr/local/www/firewall_nat_out.php:187 +#: usr/local/www/firewall_nat_out.php:188 +#: usr/local/www/firewall_nat_out.php:194 +msgid "Auto created rule for L2TP server" +msgstr "Regra criada automaticamente para servidor L2TP" + +#: usr/local/www/firewall_nat_out.php:201 +#: usr/local/www/firewall_nat_out.php:202 +#: usr/local/www/firewall_nat_out.php:209 +msgid "Auto created rule for OpenVPN server" +msgstr "Regra criada automaticamente para servidor OpenVPN" + +#: usr/local/www/firewall_nat_out.php:212 +#: usr/local/www/firewall_nat_out.php:213 +#: usr/local/www/firewall_nat_out.php:220 +msgid "Default rules for each interface have been created." +msgstr "Regras padrão para cada interface foram criadas." + +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_out.php:304 +#: usr/local/www/firewall_nat_out.php:305 +#: usr/local/www/firewall_nat_out.php:312 +#: usr/local/www/firewall_nat_out.php:311 +msgid "The NAT configuration has been changed." +msgstr "Configuração de NAT foi alterado." + +#: usr/local/www/firewall_nat_out.php:310 +#: usr/local/www/firewall_nat_out.php:320 +#: usr/local/www/firewall_nat_out.php:321 +#: usr/local/www/firewall_nat_out.php:328 +#: usr/local/www/firewall_nat_out.php:327 +msgid "Mode:" +msgstr "Modo:" + +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_out.php:323 +#: usr/local/www/firewall_nat_out.php:324 +#: usr/local/www/firewall_nat_out.php:331 +#: usr/local/www/firewall_nat_out.php:330 +msgid "Automatic outbound NAT rule generation" +msgstr "Geração de regras automáticas de outbound NAT" + +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_out.php:323 +#: usr/local/www/firewall_nat_out.php:324 +#: usr/local/www/firewall_nat_out.php:331 +#: usr/local/www/firewall_nat_out.php:330 +msgid "(IPsec passthrough included)" +msgstr "(IPsex passthrough incluso)" + +#: usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat_out.php:328 +#: usr/local/www/firewall_nat_out.php:329 +#: usr/local/www/firewall_nat_out.php:336 +#: usr/local/www/firewall_nat_out.php:335 +msgid "Manual Outbound NAT rule generation" +msgstr "Geração manual de regra de Outbound NAT" + +#: usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat_out.php:328 +#: usr/local/www/firewall_nat_out.php:329 +#: usr/local/www/firewall_nat_out.php:336 +#: usr/local/www/firewall_nat_out.php:335 +msgid "(AON - Advanced Outbound NAT)" +msgstr "(AON - Outbound NAT Avançado)" + +#: usr/local/www/firewall_nat_out.php:336 +#: usr/local/www/firewall_nat_out.php:346 +#: usr/local/www/firewall_nat_out.php:347 +#: usr/local/www/firewall_nat_out.php:354 +#: usr/local/www/firewall_nat_out.php:353 +msgid "Mappings:" +msgstr "Mapeamentos:" + +#: usr/local/www/firewall_nat_out.php:343 +#: usr/local/www/firewall_nat_out.php:353 +#: usr/local/www/firewall_nat_out.php:354 usr/local/www/diag_testport.php:129 +#: usr/local/www/diag_system_pftop.php:160 +#: usr/local/www/diag_logs_filter.php:167 +#: usr/local/www/firewall_nat_out.php:361 +#: usr/local/www/firewall_nat_out.php:360 +msgid "Source Port" +msgstr "Porta de Origem" + +#: usr/local/www/firewall_nat_out.php:345 +#: usr/local/www/firewall_nat_out.php:355 +#: usr/local/www/firewall_nat_out.php:356 +#: usr/local/www/diag_system_pftop.php:153 +#: usr/local/www/diag_logs_filter.php:189 +#: usr/local/www/firewall_nat_out.php:363 +#: usr/local/www/firewall_nat_out.php:362 +msgid "Destination Port" +msgstr "Porta de destino" + +#: usr/local/www/firewall_nat_out.php:346 +#: usr/local/www/firewall_nat_out.php:356 +#: usr/local/www/firewall_nat_out.php:357 +#: usr/local/www/firewall_nat_out.php:364 +#: usr/local/www/firewall_nat_out.php:363 +msgid "NAT Address" +msgstr "Endereço NAT" + +#: usr/local/www/firewall_nat_out.php:347 +#: usr/local/www/firewall_nat_out.php:357 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/firewall_nat_out.php:365 +#: usr/local/www/firewall_nat_out.php:364 +msgid "NAT Port" +msgstr "Porta NAT" + +#: usr/local/www/firewall_nat_out.php:348 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/firewall_nat_out.php:366 +#: usr/local/www/firewall_nat_out.php:365 +msgid "Static Port" +msgstr "Porta estática" + +#: usr/local/www/firewall_nat_out.php:354 +#: usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_nat_out.php:364 +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:365 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:459 +#: usr/local/www/firewall_nat_out.php:372 +#: usr/local/www/firewall_nat_out.php:466 +#: usr/local/www/firewall_nat_out.php:371 +#: usr/local/www/firewall_nat_out.php:465 +msgid "add new mapping" +msgstr "adicionar nova mapeamento" + +#: usr/local/www/firewall_nat_out.php:425 +#: usr/local/www/firewall_nat_out.php:435 +#: usr/local/www/firewall_nat_out.php:436 +#: usr/local/www/firewall_nat_out.php:433 +#: usr/local/www/firewall_nat_out.php:440 +#: usr/local/www/firewall_nat_out.php:439 +msgid "YES" +msgstr "SIM" + +#: usr/local/www/firewall_nat_out.php:427 +#: usr/local/www/firewall_nat_out.php:437 +#: usr/local/www/firewall_nat_out.php:438 +#: usr/local/www/firewall_nat_out.php:435 +#: usr/local/www/firewall_nat_out.php:442 +#: usr/local/www/firewall_nat_out.php:441 +msgid "NO" +msgstr "Não" + +#: usr/local/www/firewall_nat_out.php:436 +#: usr/local/www/firewall_nat_out.php:447 +#: usr/local/www/firewall_nat_out.php:448 +#: usr/local/www/firewall_nat_out.php:445 +#: usr/local/www/firewall_nat_out.php:452 +#: usr/local/www/firewall_nat_out.php:451 +msgid "edit mapping" +msgstr "editar mapeamento" + +#: usr/local/www/firewall_nat_out.php:439 usr/local/www/firewall_rules.php:435 +#: usr/local/www/firewall_rules.php:464 usr/local/www/firewall_rules.php:492 +#: usr/local/www/firewall_rules.php:775 usr/local/www/firewall_nat.php:309 +#: usr/local/www/firewall_nat_out.php:446 usr/local/www/firewall_rules.php:429 +#: usr/local/www/firewall_rules.php:458 usr/local/www/firewall_rules.php:486 +#: usr/local/www/firewall_rules.php:772 usr/local/www/firewall_nat_out.php:447 +#: usr/local/www/firewall_nat.php:322 usr/local/www/firewall_rules.php:422 +#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479 +#: usr/local/www/firewall_rules.php:765 usr/local/www/firewall_nat_out.php:444 +#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_rules.php:421 +#: usr/local/www/firewall_rules.php:450 usr/local/www/firewall_rules.php:478 +#: usr/local/www/firewall_nat.php:325 usr/local/www/firewall_nat_out.php:450 +msgid "move selected rules before this rule" +msgstr "mover as regras selecionada para antes desta regra" + +#: usr/local/www/firewall_nat_out.php:440 usr/local/www/firewall_nat.php:314 +#: usr/local/www/firewall_nat_out.php:451 +#: usr/local/www/firewall_nat_out.php:452 usr/local/www/firewall_nat.php:327 +#: usr/local/www/firewall_nat_out.php:449 +#: usr/local/www/firewall_nat_out.php:456 usr/local/www/firewall_nat.php:330 +#: usr/local/www/firewall_nat_out.php:455 +msgid "add a new NAT based on this one" +msgstr "adicionar um nova regra de NAT baseada nesta" + +#: usr/local/www/firewall_nat_out.php:449 +#: usr/local/www/firewall_nat_out.php:460 +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:458 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:464 +msgid "move selected mappings to end" +msgstr "mover os mapeamentos selecionados para final" + +#: usr/local/www/firewall_nat_out.php:453 usr/local/www/firewall_rules.php:391 +#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:823 +#: usr/local/www/firewall_rules.php:824 usr/local/www/firewall_nat.php:209 +#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:332 +#: usr/local/www/firewall_nat.php:334 usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_rules.php:395 usr/local/www/firewall_rules.php:396 +#: usr/local/www/firewall_rules.php:825 usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat.php:214 usr/local/www/firewall_nat.php:216 +#: usr/local/www/firewall_nat.php:345 usr/local/www/firewall_nat.php:347 +#: usr/local/www/firewall_rules.php:388 usr/local/www/firewall_rules.php:389 +#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_rules.php:818 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:469 usr/local/www/firewall_rules.php:386 +#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:819 +#: usr/local/www/firewall_rules.php:820 usr/local/www/firewall_nat.php:217 +#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:348 +#: usr/local/www/firewall_nat.php:350 usr/local/www/firewall_nat_out.php:468 +msgid "delete selected rules" +msgstr "excluir regras selecionadas" + +#: usr/local/www/firewall_nat_out.php:453 +#: usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:469 +#: usr/local/www/firewall_nat_out.php:468 +msgid "delete selected mappings" +msgstr "excluir mapeamentos selecionados" + +#: usr/local/www/firewall_nat_out.php:453 +#: usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:469 +#: usr/local/www/firewall_nat_out.php:468 +msgid "Do you really want to delete the selected mappings?" +msgstr "Você realmente deseja excluir os mapeamentos selecionados?" + +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:472 +#: usr/local/www/firewall_nat_out.php:473 +#: usr/local/www/firewall_nat_out.php:470 +#: usr/local/www/firewall_nat_out.php:477 +#: usr/local/www/firewall_nat_out.php:476 +msgid "With automatic outbound NAT enabled, a mapping is automatically created for each interface's subnet (except WAN-type connections) and the rules on this page are ignored.

    If manual outbound NAT is enabled, outbound NAT rules will not be automatically generated and only the mappings you specify on this page will be used.

    If a target address other than a WAN-type interface's IP address is used, then depending on the way the WAN connection is setup, a " +msgstr "Com regras automáticas de saída NAT habilitadas, um mapeamento é automaticamente criado para a subrede de cada interface (exceto conexões WAN) e as regras nesta página são ignoradas.

    Se geração manual de regras de saída NAT estiver habilitado, regras de saída NAT não serão geradas automaticamente e apenas os mapeamentos nesta página serão utilizados.

    Se um endereço alvo diferente de endereços IP WAN são utilizados. dependendo de como a conexão WAN está configurada, um" + +#: usr/local/www/firewall_nat_out.php:469 +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/carp_status.php:139 +#: usr/local/www/system_gateway_groups_edit.php:252 +#: usr/local/www/firewall_nat_out.php:480 +#: usr/local/www/firewall_nat_out_edit.php:601 +#: usr/local/www/system_gateway_groups_edit.php:312 +#: usr/local/www/firewall_nat_out.php:481 usr/local/www/carp_status.php:132 +#: usr/local/www/firewall_nat_out.php:478 +#: usr/local/www/firewall_nat_out_edit.php:604 +#: usr/local/www/firewall_nat_out.php:485 +#: usr/local/www/system_gateway_groups_edit.php:316 +#: usr/local/www/firewall_nat_out_edit.php:616 +#: usr/local/www/firewall_nat_out.php:484 +msgid "Virtual IP" +msgstr "IP Virtual" + +#: usr/local/www/firewall_nat_out.php:470 +#: usr/local/www/firewall_nat_out.php:481 +#: usr/local/www/firewall_nat_out.php:482 +#: usr/local/www/firewall_nat_out.php:479 +#: usr/local/www/firewall_nat_out.php:486 +#: usr/local/www/firewall_nat_out.php:485 +msgid " may also be required." +msgstr "pode ser necessário." + +#: usr/local/www/firewall_nat_out.php:472 +#: usr/local/www/firewall_nat_out.php:483 +#: usr/local/www/firewall_nat_out.php:484 +#: usr/local/www/firewall_nat_out.php:481 +#: usr/local/www/firewall_nat_out.php:488 +#: usr/local/www/firewall_nat_out.php:487 +msgid "To completely disable outbound NAT, switch to Manual Outbound NAT then delete any NAT rules that appear in the list." +msgstr "Para desativar completamente o NAT de saída, mude para NAT de saída Manual e então exclua qualquer regra NAT que apareça na lista." + +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:140 +msgid "Source bit count" +msgstr "Contagem de bits de origem" + +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_rules_edit.php:310 +#: usr/local/www/firewall_rules_edit.php:334 +#: usr/local/www/firewall_rules_edit.php:333 +#: usr/local/www/firewall_rules_edit.php:336 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_rules_edit.php:342 +#: usr/local/www/firewall_nat_out_edit.php:140 +msgid "Destination bit count" +msgstr "Contagem de bits de destino" + +#: usr/local/www/firewall_nat_out_edit.php:137 +#: usr/local/www/firewall_nat_out_edit.php:150 +#: usr/local/www/firewall_nat_out_edit.php:154 +#: usr/local/www/firewall_nat_out_edit.php:160 +msgid "You must supply either a valid port or port alias for the source port entry." +msgstr "Você deve fornecer uma porta válida ou um alias de porta para a entrada da porta de origem." + +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:153 +#: usr/local/www/firewall_nat_out_edit.php:157 +#: usr/local/www/firewall_nat_out_edit.php:163 +msgid "You must supply either a valid port or port alias for the destination port entry." +msgstr "Você deve fornecer uma porta válida ou um alias de porta para a entrada porta de destino." + +#: usr/local/www/firewall_nat_out_edit.php:143 +#: usr/local/www/firewall_nat_out_edit.php:156 +#: usr/local/www/firewall_nat_out_edit.php:160 +#: usr/local/www/firewall_nat_out_edit.php:166 +msgid "You must supply a valid port for the NAT port entry." +msgstr "Você deve fornecer uma porta válida para a entrada porta NAT." + +#: usr/local/www/firewall_nat_out_edit.php:147 +#: usr/local/www/firewall_nat_out_edit.php:160 +#: usr/local/www/firewall_nat_out_edit.php:164 +#: usr/local/www/firewall_nat_out_edit.php:170 +msgid "A valid source must be specified." +msgstr "Uma fonte válida deve ser especificada." + +#: usr/local/www/firewall_nat_out_edit.php:155 +#: usr/local/www/firewall_nat_out_edit.php:168 +#: usr/local/www/firewall_nat_out_edit.php:172 +#: usr/local/www/firewall_nat_out_edit.php:178 +msgid "A valid destination must be specified." +msgstr "Um destino válido deve ser especificado." + +#: usr/local/www/firewall_nat_out_edit.php:163 +#: usr/local/www/firewall_nat_out_edit.php:176 +#: usr/local/www/firewall_nat_out_edit.php:180 +#: usr/local/www/firewall_nat_out_edit.php:186 +msgid "Negating destination address of \"any\" is invalid." +msgstr "Negando o endereço de destino de \"qualquer\" é inválido." + +#: usr/local/www/firewall_nat_out_edit.php:168 +#: usr/local/www/firewall_nat_out_edit.php:181 +#: usr/local/www/firewall_nat_out_edit.php:185 +#: usr/local/www/firewall_nat_out_edit.php:191 +msgid "A valid target IP address must be specified." +msgstr "Endereço de IP de destino deve ser especificado." + +#: usr/local/www/firewall_nat_out_edit.php:173 +#: usr/local/www/firewall_nat_out_edit.php:186 +#: usr/local/www/firewall_nat_out_edit.php:190 +#: usr/local/www/firewall_nat_out_edit.php:196 +msgid "A valid target IP must be specified when using the 'Other Subnet' type." +msgstr "Um endereço IP válido deve ser especificado quando usado 'Outros tipos de Sub-rede'." + +#: usr/local/www/firewall_nat_out_edit.php:176 +#: usr/local/www/firewall_nat_out_edit.php:189 +#: usr/local/www/firewall_nat_out_edit.php:193 +#: usr/local/www/firewall_nat_out_edit.php:199 +msgid "A valid target bit count must be specified when using the 'Other Subnet' type." +msgstr "Um contador de bit válido de subrede deve ser especificado quando usado 'Outros tipos de Sub-rede'." + +#: usr/local/www/firewall_nat_out_edit.php:189 +#: usr/local/www/firewall_nat_out_edit.php:202 +#: usr/local/www/firewall_nat_out_edit.php:206 +#: usr/local/www/firewall_nat_out_edit.php:212 +msgid "Only Round Robin pool options may be chosen when selecting an alias." +msgstr "Somente opções de pool Round Robin podem ser escolhidos quando selecionado um alias. " + +#: usr/local/www/firewall_nat_out_edit.php:403 +#: usr/local/www/firewall_nat_out_edit.php:416 +#: usr/local/www/firewall_nat_out_edit.php:420 +#: usr/local/www/firewall_nat_out_edit.php:432 +msgid "Edit Advanced Outbound NAT entry" +msgstr "Editar entradas avançadas de Outbound NAT" + +#: usr/local/www/firewall_nat_out_edit.php:410 +#: usr/local/www/firewall_nat_out_edit.php:423 +#: usr/local/www/firewall_nat_out_edit.php:427 +#: usr/local/www/firewall_nat_out_edit.php:439 +msgid "Do not NAT" +msgstr "Não faça NAT" + +#: usr/local/www/firewall_nat_out_edit.php:413 +#: usr/local/www/firewall_nat_out_edit.php:426 +#: usr/local/www/firewall_nat_out_edit.php:430 +#: usr/local/www/firewall_nat_out_edit.php:442 +msgid "Enabling this option will disable NAT for traffic matching this rule and stop processing Outbound NAT rules." +msgstr "Habilitando essa opção, o NAT será desabilitado para tráfego que corresponda a essa regra e irá parar o processamento de regras Outbound NAT." + +#: usr/local/www/firewall_nat_out_edit.php:414 +#: usr/local/www/firewall_nat_out_edit.php:427 +#: usr/local/www/firewall_nat_out_edit.php:431 +#: usr/local/www/firewall_nat_out_edit.php:443 +msgid "Hint: in most cases, you won't use this option." +msgstr "Dica: na maioria dos casos, você não vai usar esta opção." + +#: usr/local/www/firewall_nat_out_edit.php:463 +#: usr/local/www/firewall_nat_out_edit.php:476 +#: usr/local/www/firewall_nat_out_edit.php:480 +#: usr/local/www/firewall_nat_out_edit.php:492 +msgid "Choose which protocol this rule should match." +msgstr "Escolha qual protocolo essa regra deve corresponder." + +#: usr/local/www/firewall_nat_out_edit.php:464 +#: usr/local/www/firewall_nat_out_edit.php:477 +#: usr/local/www/firewall_nat_out_edit.php:481 +#: usr/local/www/firewall_nat_out_edit.php:493 +#, php-format +msgid "Hint: in most cases, you should specify %s any %s here." +msgstr "Dica: na maioria dos casos, você deve especificar %s qualquer um %s aqui." + +#: usr/local/www/firewall_nat_out_edit.php:488 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:517 +#: usr/local/www/firewall_nat_out_edit.php:519 +msgid "Enter the source network for the outbound NAT mapping." +msgstr "Informe a porta de origem para o mapeamento outbound NAT." + +#: usr/local/www/firewall_nat_out_edit.php:491 +#: usr/local/www/firewall_nat_out_edit.php:504 +#: usr/local/www/firewall_nat_out_edit.php:508 +#: usr/local/www/firewall_nat_out_edit.php:520 +#: usr/local/www/firewall_nat_out_edit.php:522 +msgid "Source port:" +msgstr "Porta de origem:" + +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:509 +#: usr/local/www/firewall_nat_out_edit.php:521 +msgid "" +"(leave \n" +"blank for any)" +msgstr "" +"(deixar \n" +"em branco para qualquer um)" + +#: usr/local/www/firewall_nat_out_edit.php:526 +#: usr/local/www/firewall_nat_out_edit.php:539 +#: usr/local/www/firewall_nat_out_edit.php:543 +#: usr/local/www/firewall_nat_out_edit.php:555 +#: usr/local/www/firewall_nat_out_edit.php:556 +msgid "Enter the destination network for the outbound NAT mapping." +msgstr "Digite a rede de destino para o mapeamento NAT de saída." + +#: usr/local/www/firewall_nat_out_edit.php:530 +#: usr/local/www/firewall_nat_out_edit.php:543 +#: usr/local/www/firewall_nat_out_edit.php:547 +#: usr/local/www/firewall_nat_out_edit.php:559 +#: usr/local/www/firewall_nat_out_edit.php:560 +msgid "Destination port:" +msgstr "Porta de destino:" + +#: usr/local/www/firewall_nat_out_edit.php:531 +#: usr/local/www/firewall_nat_out_edit.php:544 +#: usr/local/www/firewall_nat_out_edit.php:548 +#: usr/local/www/firewall_nat_out_edit.php:560 +msgid "" +"(leave blank for \n" +"any)" +msgstr "" +"(deixe em branco \n" +"para qualquer um)" + +#: usr/local/www/firewall_nat_out_edit.php:538 +#: usr/local/www/firewall_nat_out_edit.php:551 +#: usr/local/www/firewall_nat_out_edit.php:555 +#: usr/local/www/firewall_nat_out_edit.php:567 +msgid "Translation" +msgstr "Tradução" + +#: usr/local/www/firewall_nat_out_edit.php:544 +#: usr/local/www/firewall_nat_out_edit.php:557 +#: usr/local/www/firewall_nat_out_edit.php:561 +#: usr/local/www/firewall_nat_out_edit.php:573 +msgid "Interface address" +msgstr "Endereço da Interface" + +#: usr/local/www/firewall_nat_out_edit.php:568 +#: usr/local/www/firewall_nat_out_edit.php:581 +#: usr/local/www/firewall_nat_out_edit.php:585 +#: usr/local/www/firewall_nat_out_edit.php:597 +msgid "Other Subnet (Enter Below)" +msgstr "Outra Sub-rede (Digite abaixo)" + +#: usr/local/www/firewall_nat_out_edit.php:575 +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/firewall_nat_out_edit.php:591 +#: usr/local/www/firewall_nat_out_edit.php:603 +msgid "Other Subnet:" +msgstr "Outra Sub-rede:" + +#: usr/local/www/firewall_nat_out_edit.php:586 +#: usr/local/www/firewall_nat_out_edit.php:599 +#: usr/local/www/firewall_nat_out_edit.php:602 +#: usr/local/www/firewall_nat_out_edit.php:614 +msgid "Packets matching this rule will be mapped to the IP address given here." +msgstr "Pacotes que correspondam a essa regra serão mapeados para o endereço IP dado aqui." + +#: usr/local/www/firewall_nat_out_edit.php:587 +#: usr/local/www/firewall_nat_out_edit.php:600 +#: usr/local/www/firewall_nat_out_edit.php:603 +#: usr/local/www/firewall_nat_out_edit.php:615 +msgid "If you want this rule to apply to another IP address rather than the IP address of the interface chosen above, select it here (you will need to define " +msgstr "Se você deseja que essa regra se aplique a um outro endereço IP ao invés do endereço IP da interface escolhida acima, selecione-o aqui (é necessário definir" + +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/firewall_nat_out_edit.php:601 +#: usr/local/www/firewall_nat_out_edit.php:604 +#: usr/local/www/firewall_nat_out_edit.php:616 +msgid "addresses on the interface first)." +msgstr "endereço na interface primeiro)." + +#: usr/local/www/firewall_nat_out_edit.php:589 +#: usr/local/www/firewall_nat_out_edit.php:602 +msgid "Also note that if you are trying to redirect connections on the LAN select the \"any\" option." +msgstr "Também note que se você está tentando redirecionar as conexões da LAN selecione a opção \"nenhum\"." + +#: usr/local/www/firewall_nat_out_edit.php:605 +#: usr/local/www/firewall_nat_out_edit.php:618 +#: usr/local/www/firewall_nat_out_edit.php:620 +#: usr/local/www/firewall_nat_out_edit.php:632 +msgid "Only Round Robin types work with Host Aliases. Any type can be used with a Subnet." +msgstr "Somente tipos Roun Robin funcionam com Host Aliases. Quanquer tipo pode ser usado com a Sub-rede." + +#: usr/local/www/firewall_nat_out_edit.php:606 +#: usr/local/www/firewall_nat_out_edit.php:619 +#: usr/local/www/firewall_nat_out_edit.php:621 +#: usr/local/www/firewall_nat_out_edit.php:633 +msgid "Round Robin: Loops through the translation addresses." +msgstr "Round Robin: Loops através de tradução de endereços." + +#: usr/local/www/firewall_nat_out_edit.php:607 +#: usr/local/www/firewall_nat_out_edit.php:620 +#: usr/local/www/firewall_nat_out_edit.php:622 +#: usr/local/www/firewall_nat_out_edit.php:634 +msgid "Random: Selects an address from the translation address pool at random." +msgstr "Randômico: Seleciona um endereço para traduzir ao pool." + +#: usr/local/www/firewall_nat_out_edit.php:608 +#: usr/local/www/firewall_nat_out_edit.php:621 +#: usr/local/www/firewall_nat_out_edit.php:623 +#: usr/local/www/firewall_nat_out_edit.php:635 +msgid "Source Hash: Uses a hash of the source address to determine the translation address, ensuring that the redirection address is always the same for a given source." +msgstr "Fonte Hash: Use uma fonte hash para o endereço de origem para determinar a tradução do endereço, certificando que o redirecionamento do mesmo sempre será o mesmo para dada origem." + +#: usr/local/www/firewall_nat_out_edit.php:609 +#: usr/local/www/firewall_nat_out_edit.php:622 +#: usr/local/www/firewall_nat_out_edit.php:624 +#: usr/local/www/firewall_nat_out_edit.php:636 +msgid "Bitmask: Applies the subnet mask and keeps the last portion identical; 10.0.1.50 -> x.x.x.50." +msgstr "BItmask: Aplica a máscara de sub-rede e mantém a última parte idêntica; 10.0.1.50 -> x.x.x.50." + +#: usr/local/www/firewall_nat_out_edit.php:610 +#: usr/local/www/firewall_nat_out_edit.php:623 +#: usr/local/www/firewall_nat_out_edit.php:625 +#: usr/local/www/firewall_nat_out_edit.php:637 +msgid "Sticky Address: The Sticky Address option can be used with the Random and Round Robin pool types to ensure that a particular source address is always mapped to the same translation address." +msgstr "Endereço Stick: A opção de Endereço Stick pode ser usada com o modo Randômico ou Round Robin para garantir que um determinado endereço de origem é sempre mapeado para o endereço mesma tradução." + +#: usr/local/www/firewall_nat_out_edit.php:615 +#: usr/local/www/firewall_nat_out_edit.php:628 +#: usr/local/www/firewall_nat_out_edit.php:630 +#: usr/local/www/firewall_nat_out_edit.php:642 +msgid "Port:" +msgstr "Porta:" + +#: usr/local/www/firewall_nat_out_edit.php:619 +#: usr/local/www/firewall_nat_out_edit.php:632 +#: usr/local/www/firewall_nat_out_edit.php:634 +#: usr/local/www/firewall_nat_out_edit.php:646 +msgid "Enter the source port for the outbound NAT mapping." +msgstr "Informe a porta de origem para o mapeamento outbound NAT." + +#: usr/local/www/firewall_nat_out_edit.php:622 +#: usr/local/www/firewall_nat_out_edit.php:635 +#: usr/local/www/firewall_nat_out_edit.php:637 +#: usr/local/www/firewall_nat_out_edit.php:649 +msgid "Static-port:" +msgstr "Porta-estática:" + +#: usr/local/www/firewall_nat_out_edit.php:632 +#: usr/local/www/firewall_nat_out_edit.php:645 +msgid "HINT: This prevents the rule from automatically syncing to other CARP members." +msgstr "Dica: Isso previne a regra de sincronizar automaticamente com outros membros CARP." + +#: usr/local/www/firewall_rules.php:52 +#: usr/local/www/firewall_rules_edit.php:628 usr/local/www/fbegin.inc:112 +#: usr/local/www/fbegin.inc:129 usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/fbegin.inc:138 usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/firewall_rules.php:49 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/diag_system_pftop.php:139 usr/local/www/fbegin.inc:130 +#: usr/local/www/firewall_rules_edit.php:676 +#: usr/local/www/firewall_rules_edit.php:724 +msgid "Rules" +msgstr "Regras" + +#: usr/local/www/firewall_rules.php:129 +#: usr/local/www/firewall_rules_edit.php:828 +#: usr/local/www/firewall_rules_edit.php:863 +#: usr/local/www/firewall_rules.php:127 +#: usr/local/www/firewall_rules_edit.php:866 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:925 +msgid "Echo request" +msgstr "Requisição Echo" + +#: usr/local/www/firewall_rules.php:130 +#: usr/local/www/firewall_rules_edit.php:829 +#: usr/local/www/firewall_rules_edit.php:864 +#: usr/local/www/firewall_rules.php:128 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:926 +msgid "Echo reply" +msgstr "Resposta Echo" + +#: usr/local/www/firewall_rules.php:131 +#: usr/local/www/firewall_rules_edit.php:830 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules.php:129 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules_edit.php:927 +msgid "Destination unreachable" +msgstr "Destino inalcansável" + +#: usr/local/www/firewall_rules.php:132 +#: usr/local/www/firewall_rules_edit.php:831 +#: usr/local/www/firewall_rules_edit.php:866 +#: usr/local/www/firewall_rules.php:130 +#: usr/local/www/firewall_rules_edit.php:869 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:928 +msgid "Source quench" +msgstr "Source quench" + +#: usr/local/www/firewall_rules.php:133 +#: usr/local/www/firewall_rules_edit.php:832 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_rules.php:131 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules_edit.php:882 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules_edit.php:929 +msgid "Redirect" +msgstr "Redirecionamento" + +#: usr/local/www/firewall_rules.php:134 +#: usr/local/www/firewall_rules_edit.php:833 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_rules.php:132 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules_edit.php:883 +#: usr/local/www/firewall_rules_edit.php:882 +#: usr/local/www/firewall_rules_edit.php:930 +msgid "Alternate Host" +msgstr "Host alternativo" + +#: usr/local/www/firewall_rules.php:135 +#: usr/local/www/firewall_rules_edit.php:834 +#: usr/local/www/firewall_rules_edit.php:869 +#: usr/local/www/firewall_rules.php:133 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules_edit.php:884 +#: usr/local/www/firewall_rules_edit.php:883 +#: usr/local/www/firewall_rules_edit.php:931 +msgid "Router advertisement" +msgstr "Router advertisement" + +#: usr/local/www/firewall_rules.php:136 +#: usr/local/www/firewall_rules_edit.php:835 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules.php:134 +#: usr/local/www/firewall_rules_edit.php:873 +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules_edit.php:884 +#: usr/local/www/firewall_rules_edit.php:932 +msgid "Router solicitation" +msgstr "Solicitação do roteador" + +#: usr/local/www/firewall_rules.php:137 +#: usr/local/www/firewall_rules_edit.php:836 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules.php:135 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules_edit.php:933 +msgid "Time exceeded" +msgstr "Tempo excedido" + +#: usr/local/www/firewall_rules.php:138 +#: usr/local/www/firewall_rules_edit.php:837 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules.php:136 +#: usr/local/www/firewall_rules_edit.php:875 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules_edit.php:934 +msgid "Invalid IP header" +msgstr "Cabeçalho de IP inválido" + +#: usr/local/www/firewall_rules.php:139 +#: usr/local/www/firewall_rules_edit.php:838 +#: usr/local/www/firewall_rules_edit.php:873 +#: usr/local/www/firewall_rules.php:137 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules_edit.php:888 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules_edit.php:935 +msgid "Timestamp" +msgstr "Timestamp" + +#: usr/local/www/firewall_rules.php:140 +#: usr/local/www/firewall_rules_edit.php:839 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules.php:138 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:889 +#: usr/local/www/firewall_rules_edit.php:888 +#: usr/local/www/firewall_rules_edit.php:936 +msgid "Timestamp reply" +msgstr "Resposta de timestamp" + +#: usr/local/www/firewall_rules.php:141 +#: usr/local/www/firewall_rules_edit.php:840 +#: usr/local/www/firewall_rules_edit.php:875 +#: usr/local/www/firewall_rules.php:139 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules_edit.php:889 +#: usr/local/www/firewall_rules_edit.php:937 +msgid "Information request" +msgstr "Requisição de informação" + +#: usr/local/www/firewall_rules.php:142 +#: usr/local/www/firewall_rules_edit.php:841 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules.php:140 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules_edit.php:891 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules_edit.php:938 +msgid "Information reply" +msgstr "Resposta de informação" + +#: usr/local/www/firewall_rules.php:143 +#: usr/local/www/firewall_rules_edit.php:842 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules.php:141 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:892 +#: usr/local/www/firewall_rules_edit.php:891 +#: usr/local/www/firewall_rules_edit.php:939 +msgid "Address mask request" +msgstr "Requisição de máscara de endereço" + +#: usr/local/www/firewall_rules.php:144 +#: usr/local/www/firewall_rules_edit.php:843 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules.php:142 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules_edit.php:893 +#: usr/local/www/firewall_rules_edit.php:892 +#: usr/local/www/firewall_rules_edit.php:940 +msgid "Address mask reply" +msgstr "Resposta de máscara de endereço" + +#: usr/local/www/firewall_rules.php:201 usr/local/www/firewall_rules.php:205 +#: usr/local/www/firewall_rules.php:203 +#, php-format +msgid "The settings have been applied. The firewall rules are now reloading in the background.
    You can also %s monitor %s the reload progress" +msgstr "As configurações foram aplicadas. As regras de firewall estão recarregando em background agora.
    Você também pode %s monitorar %s o progresso." + +#: usr/local/www/firewall_rules.php:315 usr/local/www/firewall_rules.php:317 +#: usr/local/www/firewall_rules.php:319 usr/local/www/firewall_rules.php:321 +#: usr/local/www/firewall_rules.php:312 usr/local/www/firewall_rules.php:314 +msgid "The firewall rule configuration has been changed.
    You must apply the changes in order for them to take effect." +msgstr "A configuração de regra do firewall foi modificada.
    Você deve aplicar as modificações para que elas tenham efeito." + +#: usr/local/www/firewall_rules.php:338 usr/local/www/firewall_rules.php:342 +#: usr/local/www/firewall_rules.php:335 usr/local/www/firewall_rules.php:334 +msgid "Floating" +msgstr "Flutuante" + +#: usr/local/www/firewall_rules.php:359 +#: usr/local/www/load_balancer_relay_action_edit.php:510 +#: usr/local/www/load_balancer_relay_action_edit.php:509 +#: usr/local/www/firewall_rules.php:363 +#: usr/local/www/load_balancer_relay_action_edit.php:507 +#: usr/local/www/firewall_rules.php:356 usr/local/www/firewall_rules.php:354 +msgid "ID" +msgstr "ID" + +#: usr/local/www/firewall_rules.php:368 +#: usr/local/www/firewall_rules_edit.php:1288 usr/local/www/interfaces.php:420 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1382 +#: usr/local/www/system_routes.php:127 usr/local/www/system_routes_edit.php:91 +#: usr/local/www/system_routes_edit.php:199 +#: usr/local/www/services_dhcp.php:655 usr/local/www/status_gateways.php:73 +#: usr/local/www/system_gateways.php:154 +#: usr/local/www/system_gateways_edit.php:376 +#: usr/local/www/services_dhcpv6.php:599 +#: usr/local/www/system_routes_edit.php:92 +#: usr/local/www/system_routes_edit.php:231 +#: usr/local/www/firewall_rules_edit.php:1355 +#: usr/local/www/firewall_rules.php:372 +#: usr/local/www/system_gateways_edit.php:397 +#: usr/local/www/services_dhcp.php:668 usr/local/www/interfaces.php:456 +#: usr/local/www/interfaces.php:509 usr/local/www/interfaces.php:1486 +#: usr/local/www/system_routes_edit.php:232 +#: usr/local/www/firewall_rules.php:365 +#: usr/local/www/system_gateways_edit.php:503 +#: usr/local/www/status_gateways.php:74 usr/local/www/services_dhcp.php:844 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:1474 +#: usr/local/www/system_gateways_edit.php:506 +#: usr/local/www/firewall_rules_edit.php:1370 +#: usr/local/www/services_dhcp_edit.php:410 +#: usr/local/www/diag_traceroute.php:98 usr/local/www/system_routes.php:131 +#: usr/local/www/services_dhcp.php:858 usr/local/www/interfaces.php:441 +#: usr/local/www/interfaces.php:494 usr/local/www/interfaces.php:1487 +#: usr/local/www/system_gateways_edit.php:508 +#: usr/local/www/firewall_rules_edit.php:1377 +#: usr/local/www/services_dhcp.php:878 usr/local/www/system_routes_edit.php:95 +#: usr/local/www/system_routes_edit.php:259 +#: usr/local/www/firewall_rules.php:363 usr/local/www/interfaces.php:446 +#: usr/local/www/interfaces.php:499 usr/local/www/interfaces.php:1532 +#: usr/local/www/system_gateways_edit.php:538 +#: usr/local/www/firewall_rules_edit.php:1388 +#: usr/local/www/system_routes.php:147 +#: usr/local/www/system_routes_edit.php:261 usr/local/www/interfaces.php:442 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1526 +#: usr/local/www/system_routes_edit.php:97 +#: usr/local/www/system_routes_edit.php:263 +#: usr/local/www/firewall_rules_edit.php:1436 +#: usr/local/www/services_dhcp.php:890 usr/local/www/interfaces.php:445 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:1539 +msgid "Gateway" +msgstr "Gateway" + +#: usr/local/www/firewall_rules.php:369 usr/local/www/status_queues.php:135 +#: usr/local/www/status_queues.php:142 usr/local/www/firewall_rules.php:373 +#: usr/local/www/status_queues.php:143 usr/local/www/firewall_rules.php:366 +#: usr/local/www/diag_system_pftop.php:138 usr/local/www/status_queues.php:148 +#: usr/local/www/firewall_rules.php:364 usr/local/www/status_queues.php:164 +msgid "Queue" +msgstr "FILA" + +#: usr/local/www/firewall_rules.php:370 +#: usr/local/www/firewall_rules_edit.php:1261 +#: usr/local/www/firewall_rules_edit.php:1328 +#: usr/local/www/firewall_rules.php:374 usr/local/www/firewall_rules.php:367 +#: usr/local/www/firewall_rules_edit.php:1343 +#: usr/local/www/firewall_rules_edit.php:1350 +#: usr/local/www/firewall_rules.php:365 +#: usr/local/www/firewall_rules_edit.php:1361 +#: usr/local/www/firewall_rules_edit.php:1409 +msgid "Schedule" +msgstr "Agenda" + +#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:824 +#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:334 +#: usr/local/www/firewall_rules.php:396 usr/local/www/firewall_rules.php:825 +#: usr/local/www/firewall_nat.php:216 usr/local/www/firewall_nat.php:347 +#: usr/local/www/firewall_rules.php:389 usr/local/www/firewall_rules.php:818 +#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:820 +#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:350 +msgid "Do you really want to delete the selected rules?" +msgstr "Você realmente quer apagar as regras selecionadas?" + +#: usr/local/www/firewall_rules.php:394 usr/local/www/firewall_rules.php:794 +#: usr/local/www/firewall_rules.php:826 usr/local/www/firewall_rules.php:398 +#: usr/local/www/firewall_rules.php:795 usr/local/www/firewall_rules.php:827 +#: usr/local/www/firewall_rules.php:391 usr/local/www/firewall_rules.php:788 +#: usr/local/www/firewall_rules.php:820 usr/local/www/firewall_rules.php:390 +#: usr/local/www/firewall_rules.php:789 usr/local/www/firewall_rules.php:823 +msgid "add new rule" +msgstr "adicionar nova regra" + +#: usr/local/www/firewall_rules.php:431 usr/local/www/firewall_rules.php:425 +#: usr/local/www/firewall_rules.php:418 usr/local/www/firewall_rules.php:417 +msgid "Anti-Lockout Rule" +msgstr "Regra Anti-Lockout" + +#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:469 +#: usr/local/www/firewall_rules.php:497 usr/local/www/firewall_rules.php:780 +#: usr/local/www/firewall_rules.php:434 usr/local/www/firewall_rules.php:463 +#: usr/local/www/firewall_rules.php:491 usr/local/www/firewall_rules.php:777 +#: usr/local/www/firewall_rules.php:427 usr/local/www/firewall_rules.php:456 +#: usr/local/www/firewall_rules.php:484 usr/local/www/firewall_rules.php:770 +#: usr/local/www/firewall_rules.php:426 usr/local/www/firewall_rules.php:455 +#: usr/local/www/firewall_rules.php:483 +msgid "add a new rule based on this one" +msgstr "adicionar uma nova regra baseada nesta" + +#: usr/local/www/firewall_rules.php:453 usr/local/www/firewall_rules.php:447 +#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:439 +msgid "RFC 1918 networks" +msgstr "Redes RFC 1918" + +#: usr/local/www/firewall_rules.php:460 usr/local/www/interfaces.php:2414 +#: usr/local/www/firewall_rules.php:454 usr/local/www/interfaces.php:2615 +#: usr/local/www/firewall_rules.php:447 usr/local/www/interfaces.php:2603 +#: usr/local/www/interfaces.php:2633 usr/local/www/firewall_rules.php:446 +#: usr/local/www/interfaces.php:2679 usr/local/www/interfaces.php:2668 +#: usr/local/www/interfaces.php:2704 +msgid "Block private networks" +msgstr "Bloquear redes privadas" + +#: usr/local/www/firewall_rules.php:481 usr/local/www/firewall_rules.php:475 +#: usr/local/www/firewall_rules.php:468 usr/local/www/firewall_rules.php:467 +msgid "Reserved/not assigned by IANA" +msgstr "Reservado/não atribuído por IANA" + +#: usr/local/www/firewall_rules.php:488 usr/local/www/interfaces.php:2426 +#: usr/local/www/firewall_rules.php:482 usr/local/www/interfaces.php:2627 +#: usr/local/www/firewall_rules.php:475 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2645 usr/local/www/firewall_rules.php:474 +#: usr/local/www/interfaces.php:2691 usr/local/www/interfaces.php:2680 +#: usr/local/www/interfaces.php:2716 +msgid "Block bogon networks" +msgstr "Bloquear redes bogon" + +#: usr/local/www/firewall_rules.php:513 usr/local/www/firewall_rules.php:507 +#: usr/local/www/firewall_rules.php:500 usr/local/www/firewall_rules.php:499 +msgid "advanced settings set" +msgstr "conjunto de configurações avançadas" + +#: usr/local/www/firewall_rules.php:537 usr/local/www/firewall_rules.php:531 +#: usr/local/www/firewall_rules.php:524 +msgid "click to toggle enabled/disabled status" +msgstr "clique para alternar o status entre habilitado/desabilitado" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:846 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:845 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +msgid "Mon" +msgstr "Seg" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560 +#: usr/local/www/firewall_rules.php:561 +msgid "Tues" +msgstr "Ter" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:848 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:847 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +msgid "Wed" +msgstr "Qua" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560 +#: usr/local/www/firewall_rules.php:561 +msgid "Thur" +msgstr "Qui" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:850 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:849 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +msgid "Fri" +msgstr "Sex" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:851 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:850 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +msgid "Sat" +msgstr "Sab" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:852 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:851 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561 +msgid "Sun" +msgstr "Dom" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "January" +msgstr "Janeiro" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "February" +msgstr "Fevereiro" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "March" +msgstr "Março" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "April" +msgstr "Abril" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "May" +msgstr "Maio" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "June" +msgstr "Junho" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "July" +msgstr "Julho" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "August" +msgstr "Agosto" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "September" +msgstr "Setembro" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "October" +msgstr "Outubro" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "November" +msgstr "Novembro" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_rules.php:562 +msgid "December" +msgstr "Dezembro" + +#: usr/local/www/firewall_rules.php:685 usr/local/www/firewall_rules.php:679 +#: usr/local/www/firewall_rules.php:672 usr/local/www/firewall_rules.php:671 +msgid "Traffic matching this rule is currently being denied" +msgstr "Tráfego correspondente a essa regra está atualmente sendo negado" + +#: usr/local/www/firewall_rules.php:690 usr/local/www/firewall_rules.php:684 +#: usr/local/www/firewall_rules.php:677 usr/local/www/firewall_rules.php:674 +msgid "Traffic matching this rule is currently being allowed" +msgstr "Tráfego correspondente a essa regra está sendo atualmente permitido" + +#: usr/local/www/firewall_rules.php:700 usr/local/www/firewall_rules.php:694 +#: usr/local/www/firewall_rules.php:687 usr/local/www/firewall_rules.php:682 +msgid "This rule is not currently active because its period has expired" +msgstr "Essa regra não está ativa no momento porque seu período expirou" + +#: usr/local/www/firewall_rules.php:792 usr/local/www/firewall_rules.php:785 +#: usr/local/www/firewall_rules.php:786 +msgid "No rules are currently defined for this interface" +msgstr "Nenhuma regra está definida para essa interface atualmente" + +#: usr/local/www/firewall_rules.php:793 usr/local/www/firewall_rules.php:786 +#: usr/local/www/firewall_rules.php:787 +msgid "All incoming connections on this interface will be blocked until you add pass rules." +msgstr "Todas as conexões de entrada nessa interface serão bloqueadas até que você adicione regras de liberação." + +#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795 +#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:789 +msgid "Click the" +msgstr "Clique em" + +#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795 +#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:789 +msgid " button to add a new rule." +msgstr " para adicionar uma nova regra." + +#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_nat.php:327 +#: usr/local/www/firewall_rules.php:818 usr/local/www/firewall_nat.php:340 +#: usr/local/www/firewall_rules.php:811 usr/local/www/firewall_rules.php:813 +#: usr/local/www/firewall_nat.php:343 +msgid "move selected rules to end" +msgstr "mover regras selecionadas para o fim" + +#: usr/local/www/firewall_rules.php:835 usr/local/www/firewall_nat.php:345 +#: usr/local/www/firewall_rules.php:836 usr/local/www/firewall_nat.php:358 +#: usr/local/www/firewall_rules.php:829 usr/local/www/firewall_rules.php:832 +#: usr/local/www/firewall_nat.php:361 +msgid "pass" +msgstr "liberar" + +#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:839 +#: usr/local/www/firewall_rules.php:832 usr/local/www/firewall_rules.php:835 +msgid "block" +msgstr "bloquear" + +#: usr/local/www/firewall_rules.php:841 usr/local/www/license.php:125 +#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:835 +#: usr/local/www/firewall_rules.php:838 +msgid "reject" +msgstr "rejeitar" + +#: usr/local/www/firewall_rules.php:844 usr/local/www/firewall_rules.php:845 +#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:841 +msgid "log" +msgstr "log" + +#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:849 +#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:845 +msgid "pass (disabled)" +msgstr "liberação (desabilitado)" + +#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:852 +#: usr/local/www/firewall_rules.php:845 usr/local/www/firewall_rules.php:848 +msgid "block (disabled)" +msgstr "bloqueio (desabilitado)" + +#: usr/local/www/firewall_rules.php:854 usr/local/www/firewall_rules.php:855 +#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:851 +msgid "reject (disabled)" +msgstr "rejeitado (desabilitado)" + +#: usr/local/www/firewall_rules.php:857 usr/local/www/firewall_rules.php:858 +#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:854 +msgid "log (disabled)" +msgstr "log (desabilitado)" + +#: usr/local/www/firewall_rules.php:863 +#: usr/local/www/load_balancer_pool.php:148 usr/local/www/vpn_l2tp.php:354 +#: usr/local/www/vpn_l2tp.php:371 usr/local/www/firewall_rules.php:864 +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/firewall_rules.php:857 usr/local/www/vpn_l2tp.php:355 +#: usr/local/www/vpn_l2tp.php:372 usr/local/www/load_balancer_pool.php:147 +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:375 +#: usr/local/www/firewall_rules.php:860 +msgid "Hint:" +msgstr "Dica:" + +#: usr/local/www/firewall_rules.php:867 usr/local/www/firewall_rules.php:868 +#: usr/local/www/firewall_rules.php:861 usr/local/www/firewall_rules.php:864 +msgid "Rules are evaluated on a first-match basis (i.e. the action of the first rule to match a packet will be executed). This means that if you use block rules, you'll have to pay attention to the rule order. Everything that isn't explicitly passed is blocked by default. " +msgstr "Regras são avaliadas na primeira correspondência (i.e. a ação da primeira regra que corresponder a um pacote será executada). Isso significa que se você usar regras de bloquei, você terá que prestar atenção da ordem das regras. Tudo que não estiver explícitamente liberado é bloqueado por padrão." + +#: usr/local/www/firewall_rules.php:874 usr/local/www/firewall_rules.php:875 +#: usr/local/www/firewall_rules.php:868 usr/local/www/firewall_rules.php:871 +msgid "Floating rules are evaluated on a first-match basis (i.e. the action of the first rule to match a packet will be executed) only if the 'quick' option is checked on a rule. Otherwise they will only apply if no other rules match. Pay close attention to the rule order and options chosen. If no rule here matches, the per-interface or default rules are used. " +msgstr "Regras flutuantes são avaliadas com base no first-match (ex.: a ação da primeira regra que corresponder a um pacote será executada) apenas se a opção 'quick' estiver marcada em uma regra. Caso contrário elas serão aplicadas apenas se nenhuma outra regra corresponder. Preste muita atenção na ordem das regras e opções escolhidas. Se nenhuma regra corresponder, as regras por interface ou padrão serão usadas." + +#: usr/local/www/firewall_rules_edit.php:201 +#: usr/local/www/firewall_rules_edit.php:210 +msgid "Reject type rules only works when the protocol is set to TCP." +msgstr "Tipo de regras rejeitadas somente funcionam quando o protocolo é configurado para TCP." + +#: usr/local/www/firewall_rules_edit.php:204 +#: usr/local/www/firewall_rules_edit.php:213 +#: usr/local/www/firewall_rules_edit.php:210 +msgid "Queue type rules only work with queues." +msgstr "Regras do tipo fila só funcionam com filas." + +#: usr/local/www/firewall_rules_edit.php:212 +#: usr/local/www/firewall_rules_edit.php:227 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:222 +#: usr/local/www/firewall_rules_edit.php:228 +msgid "You can not assign a IPv4 gateway group on IPv6 Address Family rule" +msgstr "Você não pode associar um grupo de gateways IPv4 a um endereço da família IPv6" + +#: usr/local/www/firewall_rules_edit.php:215 +#: usr/local/www/firewall_rules_edit.php:230 +#: usr/local/www/firewall_rules_edit.php:228 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:231 +msgid "You can not assign a IPv6 gateway group on IPv4 Address Family rule" +msgstr "Você não pode associar um grupo de gateways IPv6 a um endereço da família IPv4" + +#: usr/local/www/firewall_rules_edit.php:222 +#: usr/local/www/firewall_rules_edit.php:240 +#: usr/local/www/firewall_rules_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:236 +#: usr/local/www/firewall_rules_edit.php:242 +msgid "You can not assign the IPv4 Gateway to a IPv6 Filter rule" +msgstr "Você não pode associar um gateway IPv4 a uma regra de filtro IPv6" + +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:243 +#: usr/local/www/firewall_rules_edit.php:242 +#: usr/local/www/firewall_rules_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:245 +msgid "You can not assign the IPv6 Gateway to a IPv4 Filter rule" +msgstr "Você não pode associar um gateway IPv6 a uma regra de filtro IPv4" + +#: usr/local/www/firewall_rules_edit.php:297 +#: usr/local/www/firewall_rules_edit.php:321 +#: usr/local/www/firewall_rules_edit.php:320 +#: usr/local/www/firewall_rules_edit.php:323 +#: usr/local/www/firewall_rules_edit.php:329 +#, php-format +msgid "%s is only valid with protocol tcp." +msgstr "%s é válido somente com o protocolo TCP." + +#: usr/local/www/firewall_rules_edit.php:299 +#: usr/local/www/firewall_rules_edit.php:323 +#: usr/local/www/firewall_rules_edit.php:322 +#: usr/local/www/firewall_rules_edit.php:325 +#: usr/local/www/firewall_rules_edit.php:331 +#, php-format +msgid "%s is only valid if the gateway is set to 'default'." +msgstr "%s somente é valido se o gateway estiver configurado para 'padrão'." + +#: usr/local/www/firewall_rules_edit.php:327 +#: usr/local/www/firewall_rules_edit.php:351 +#: usr/local/www/firewall_rules_edit.php:350 +#: usr/local/www/firewall_rules_edit.php:353 +#: usr/local/www/firewall_rules_edit.php:359 +#, php-format +msgid "%s is not a valid end source port. It must be a port alias or integer between 1 and 65535." +msgstr "%s não é um fim de porta de origem válido. Ele deve ser um alias de porta ou um inteiro entre 1 e 65535." + +#: usr/local/www/firewall_rules_edit.php:381 +#: usr/local/www/firewall_rules_edit.php:410 +#: usr/local/www/firewall_rules_edit.php:409 +#: usr/local/www/firewall_rules_edit.php:412 +#: usr/local/www/firewall_rules_edit.php:418 +#, php-format +msgid "The Source IP address %s Address Family differs from the destination %s." +msgstr "A família do endereço IP de origem %s defere do destino %s." + +#: usr/local/www/firewall_rules_edit.php:383 +#: usr/local/www/firewall_rules_edit.php:412 +#: usr/local/www/firewall_rules_edit.php:411 +#: usr/local/www/firewall_rules_edit.php:414 +#: usr/local/www/firewall_rules_edit.php:420 +msgid "You can not use IPv6 addresses in IPv4 rules." +msgstr "Você não pode usar endereços IPv6 em regras IPv4." + +#: usr/local/www/firewall_rules_edit.php:385 +#: usr/local/www/firewall_rules_edit.php:414 +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_rules_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:422 +msgid "You can not use IPv4 addresses in IPv6 rules." +msgstr "Você não pode utilizar endereços IPv4 em regras IPv6." + +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_rules_edit.php:434 +#: usr/local/www/firewall_rules_edit.php:433 +#: usr/local/www/firewall_rules_edit.php:436 +#: usr/local/www/firewall_rules_edit.php:442 +msgid "OS detection is only valid with protocol tcp." +msgstr "Detecção de OS somente é válida com o protocolo tcp." + +#: usr/local/www/firewall_rules_edit.php:406 +#: usr/local/www/firewall_rules_edit.php:438 +#: usr/local/www/firewall_rules_edit.php:437 +#: usr/local/www/firewall_rules_edit.php:440 +#: usr/local/www/firewall_rules_edit.php:446 +msgid "You have to select a queue when you select an acknowledge queue too." +msgstr "Você selecionou uma fila quando selecionou uma fila de reconhecimento também." + +#: usr/local/www/firewall_rules_edit.php:408 +#: usr/local/www/firewall_rules_edit.php:440 +#: usr/local/www/firewall_rules_edit.php:439 +#: usr/local/www/firewall_rules_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:448 +msgid "Acknowledge queue and Queue cannot be the same." +msgstr "Fila de reconhecimento e a Fila não podem ser a mesma." + +#: usr/local/www/firewall_rules_edit.php:411 +#: usr/local/www/firewall_rules_edit.php:443 +#: usr/local/www/firewall_rules_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:445 +#: usr/local/www/firewall_rules_edit.php:451 +msgid "You can not use limiters in Floating rules without choosing a direction." +msgstr "Você não pode usar limites em regras Flutuantes sem escolher uma direção." + +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_rules_edit.php:445 +#: usr/local/www/firewall_rules_edit.php:444 +#: usr/local/www/firewall_rules_edit.php:447 +#: usr/local/www/firewall_rules_edit.php:453 +msgid "You can not use gateways in Floating rules without choosing a direction." +msgstr "Você não pode usar gateways em regras Flutuantes sem escolher uma direção." + +#: usr/local/www/firewall_rules_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:448 +#: usr/local/www/firewall_rules_edit.php:447 +#: usr/local/www/firewall_rules_edit.php:450 +#: usr/local/www/firewall_rules_edit.php:456 +msgid "You must select a queue for the In direction before selecting one for Out too." +msgstr "Você deve selecionar uma fila para a direção de Dentro antes de selecionar para Fora também." + +#: usr/local/www/firewall_rules_edit.php:418 +#: usr/local/www/firewall_rules_edit.php:450 +#: usr/local/www/firewall_rules_edit.php:449 +#: usr/local/www/firewall_rules_edit.php:452 +#: usr/local/www/firewall_rules_edit.php:458 +msgid "In and Out Queue cannot be the same." +msgstr "Filas para Dentro e Fora não podem ser a mesma." + +#: usr/local/www/firewall_rules_edit.php:420 +#: usr/local/www/firewall_rules_edit.php:422 +#: usr/local/www/firewall_rules_edit.php:452 +#: usr/local/www/firewall_rules_edit.php:454 +#: usr/local/www/firewall_rules_edit.php:451 +#: usr/local/www/firewall_rules_edit.php:453 +#: usr/local/www/firewall_rules_edit.php:456 +#: usr/local/www/firewall_rules_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:462 +msgid "You cannot select one queue and one virtual interface for IN and Out. both must be from the same type." +msgstr "Você não pode selecionar uma fila e uma interface virtual para Entrada e Saída. As duas devem ser do mesmo tipo." + +#: usr/local/www/firewall_rules_edit.php:425 +#: usr/local/www/firewall_rules_edit.php:457 +#: usr/local/www/firewall_rules_edit.php:458 +#: usr/local/www/firewall_rules_edit.php:461 +#: usr/local/www/firewall_rules_edit.php:467 +msgid "ID must be an integer" +msgstr "ID deve ser um inteiro" + +#: usr/local/www/firewall_rules_edit.php:428 +#: usr/local/www/firewall_rules_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:461 +#: usr/local/www/firewall_rules_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:470 +msgid "You can only select a layer7 container for TCP and/or UDP protocols" +msgstr "Você somente pode selecionar um conteiner layer7 para TCP e/ou protocolos UDP" + +#: usr/local/www/firewall_rules_edit.php:430 +#: usr/local/www/firewall_rules_edit.php:462 +#: usr/local/www/firewall_rules_edit.php:463 +#: usr/local/www/firewall_rules_edit.php:466 +#: usr/local/www/firewall_rules_edit.php:472 +msgid "You can only select a layer7 container for Pass type rules." +msgstr "Você somente pode selecionar um conteiner layer7 para regras de tipo Liberação." + +#: usr/local/www/firewall_rules_edit.php:443 +#: usr/local/www/firewall_rules_edit.php:475 +#: usr/local/www/firewall_rules_edit.php:476 +#: usr/local/www/firewall_rules_edit.php:479 +#: usr/local/www/firewall_rules_edit.php:485 +#: usr/local/www/firewall_rules_edit.php:533 +msgid "If you specify TCP flags that should be set you should specify out of which flags as well." +msgstr "Se você especificar flags TCP que devem ser configurados, você deve especificar de quaisflags também." + +#: usr/local/www/firewall_rules_edit.php:652 +#: usr/local/www/firewall_rules_edit.php:685 +#: usr/local/www/firewall_rules_edit.php:688 +#: usr/local/www/firewall_rules_edit.php:700 +#: usr/local/www/firewall_rules_edit.php:748 +msgid "Edit Firewall rule" +msgstr "Editar regras de Firewall" + +#: usr/local/www/firewall_rules_edit.php:673 +#: usr/local/www/firewall_rules_edit.php:706 +#: usr/local/www/firewall_rules_edit.php:709 +#: usr/local/www/firewall_rules_edit.php:721 +#: usr/local/www/firewall_rules_edit.php:769 +msgid "Choose what to do with packets that match the criteria specified below." +msgstr "Escolha o que fazer com os pacotes que correspondem aos critérios especificados abaixo." + +#: usr/local/www/firewall_rules_edit.php:674 +#: usr/local/www/firewall_rules_edit.php:707 +#: usr/local/www/firewall_rules_edit.php:710 +#: usr/local/www/firewall_rules_edit.php:722 +#: usr/local/www/firewall_rules_edit.php:770 +msgid "Hint: the difference between block and reject is that with reject, a packet (TCP RST or ICMP port unreachable for UDP) is returned to the sender, whereas with block the packet is dropped silently. In either case, the original packet is discarded." +msgstr "Dica: a diferença entre bloqueado e rejeitado é que com rejeitado, um pacote (TCP RST ou porta ICMP inalcansável para UDP) é retornada para quem enviou, enquanto que com bloqueado, o pacote é descartado silenciosamente. Em qualquer um dos casos, o pacote original é descartado." + +#: usr/local/www/firewall_rules_edit.php:689 +#: usr/local/www/firewall_rules_edit.php:722 +#: usr/local/www/firewall_rules_edit.php:725 +#: usr/local/www/firewall_rules_edit.php:737 +#: usr/local/www/firewall_rules_edit.php:785 +msgid "Quick" +msgstr "Rápido" + +#: usr/local/www/firewall_rules_edit.php:693 +#: usr/local/www/firewall_rules_edit.php:726 +#: usr/local/www/firewall_rules_edit.php:729 +#: usr/local/www/firewall_rules_edit.php:741 +#: usr/local/www/firewall_rules_edit.php:789 +msgid "Apply the action immediately on match." +msgstr "Aplicar a ação imediatamente após correspondência." + +#: usr/local/www/firewall_rules_edit.php:694 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/firewall_rules_edit.php:730 +#: usr/local/www/firewall_rules_edit.php:742 +#: usr/local/www/firewall_rules_edit.php:790 +msgid "Set this option if you need to apply this action to traffic that matches this rule immediately." +msgstr "Configure essa opção se precisar aplicar essa ação ao tráfego que corresponder imediatamente a essa regra." + +#: usr/local/www/firewall_rules_edit.php:701 +#: usr/local/www/firewall_rules_edit.php:734 +#: usr/local/www/firewall_rules_edit.php:737 +#: usr/local/www/firewall_rules_edit.php:749 +#: usr/local/www/firewall_rules_edit.php:797 +msgid "Associated filter rule" +msgstr "Regra de filtro associada" + +#: usr/local/www/firewall_rules_edit.php:703 +#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:137 +#: usr/local/www/firewall_rules_edit.php:736 +#: usr/local/www/firewall_rules_edit.php:739 +#: usr/local/www/diag_traceroute.php:141 +#: usr/local/www/firewall_rules_edit.php:751 +#: usr/local/www/diag_traceroute.php:161 +#: usr/local/www/firewall_rules_edit.php:799 +msgid "Note: " +msgstr "Nota:" + +#: usr/local/www/firewall_rules_edit.php:703 +#: usr/local/www/firewall_rules_edit.php:736 +#: usr/local/www/firewall_rules_edit.php:739 +#: usr/local/www/firewall_rules_edit.php:751 +#: usr/local/www/firewall_rules_edit.php:799 +msgid "This is associated to a NAT rule." +msgstr "Isto está associado à regra NAT." + +#: usr/local/www/firewall_rules_edit.php:704 +#: usr/local/www/firewall_rules_edit.php:737 +#: usr/local/www/firewall_rules_edit.php:740 +#: usr/local/www/firewall_rules_edit.php:752 +#: usr/local/www/firewall_rules_edit.php:800 +msgid "You cannot edit the interface, protocol, source, or destination of associated filter rules." +msgstr "Você não pode editar a interface, protocolo, fonte ou destino de regras de filtro associadas." + +#: usr/local/www/firewall_rules_edit.php:711 +#: usr/local/www/firewall_rules_edit.php:744 +#: usr/local/www/firewall_rules_edit.php:747 +#: usr/local/www/firewall_rules_edit.php:759 +#: usr/local/www/firewall_rules_edit.php:807 +msgid "View the NAT rule" +msgstr "Veja a regra NAT" + +#: usr/local/www/firewall_rules_edit.php:768 +#: usr/local/www/firewall_rules_edit.php:803 +#: usr/local/www/firewall_rules_edit.php:806 +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/firewall_rules_edit.php:817 +#: usr/local/www/firewall_rules_edit.php:865 +msgid "Choose on which interface packets must come in to match this rule." +msgstr "Escolha quais pacotes de interface devem entrar para corresponder a essa regra." + +#: usr/local/www/firewall_rules_edit.php:774 +#: usr/local/www/services_captiveportal_ip_edit.php:178 +#: usr/local/www/diag_ipsec_spd.php:88 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:443 +#: usr/local/www/services_captiveportal_hostname_edit.php:160 +#: usr/local/www/load_balancer_relay_action_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:809 +#: usr/local/www/services_captiveportal_hostname_edit.php:158 +#: usr/local/www/load_balancer_relay_action_edit.php:440 +#: usr/local/www/services_captiveportal_ip_edit.php:176 +#: usr/local/www/diag_ipsec_spd.php:89 +#: usr/local/www/firewall_rules_edit.php:812 +#: usr/local/www/firewall_rules_edit.php:824 +#: usr/local/www/firewall_rules_edit.php:823 +#: usr/local/www/firewall_rules_edit.php:871 +msgid "Direction" +msgstr "Direção" + +#: usr/local/www/firewall_rules_edit.php:792 +#: usr/local/www/firewall_rules_edit.php:827 +#: usr/local/www/firewall_rules_edit.php:830 +#: usr/local/www/firewall_rules_edit.php:842 +#: usr/local/www/firewall_rules_edit.php:841 +#: usr/local/www/firewall_rules_edit.php:889 +msgid "TCP/IP Version" +msgstr "Versão TCP/IP" + +#: usr/local/www/firewall_rules_edit.php:804 +#: usr/local/www/firewall_rules_edit.php:839 +#: usr/local/www/firewall_rules_edit.php:842 +#: usr/local/www/firewall_rules_edit.php:854 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_rules_edit.php:901 +msgid "Select the Internet Protocol version this rule applies to" +msgstr "Selecione a versão do Internet Protocol a qual esta regra se aplica" + +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_rules_edit.php:856 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_rules_edit.php:915 +msgid "Hint: in most cases, you should specify " +msgstr "Dica: na maioria dos casos, você deve especificar " + +#: usr/local/www/firewall_rules_edit.php:822 +#: usr/local/www/firewall_rules_edit.php:857 +#: usr/local/www/firewall_rules_edit.php:860 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules_edit.php:919 +msgid "ICMP type" +msgstr "Tipo ICMP" + +#: usr/local/www/firewall_rules_edit.php:851 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules_edit.php:889 +#: usr/local/www/firewall_rules_edit.php:901 +#: usr/local/www/firewall_rules_edit.php:900 +#: usr/local/www/firewall_rules_edit.php:948 +msgid "If you selected ICMP for the protocol above, you may specify an ICMP type here." +msgstr "Se você selecionar ICMP para o protocolo acima, você deve especificar um tipo ICMP aqui." + +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules_edit.php:920 +#: usr/local/www/firewall_rules_edit.php:929 +#: usr/local/www/firewall_rules_edit.php:941 +#: usr/local/www/firewall_rules_edit.php:940 +#: usr/local/www/firewall_rules_edit.php:988 +msgid " subnet" +msgstr " subrede" + +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:943 +#: usr/local/www/firewall_rules_edit.php:952 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:1011 +msgid "Show source port range" +msgstr "Mostrar intervalo de porta de origem" + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1048 +msgid "Specify the source port or port range for this rule." +msgstr "Especificar a porta de origem ou o intervalo de porta para essa regra." + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1048 +msgid "and almost never equal to the destination port range (and should usually be" +msgstr "e quase nunca igual ao intervalo de porta de destino (e deve normalmente ser" + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_rules_edit.php:1001 +#: usr/local/www/firewall_rules_edit.php:1102 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/firewall_rules_edit.php:1101 +#: usr/local/www/firewall_rules_edit.php:1048 +#: usr/local/www/firewall_rules_edit.php:1149 +msgid "'to'" +msgstr "'para'" + +#: usr/local/www/firewall_rules_edit.php:1005 +#: usr/local/www/firewall_rules_edit.php:1040 +#: usr/local/www/firewall_rules_edit.php:1055 +#: usr/local/www/firewall_rules_edit.php:1068 +#: usr/local/www/firewall_rules_edit.php:1067 +#: usr/local/www/firewall_rules_edit.php:1115 +msgid "Destination port range " +msgstr "Intervalo de porta de destino " + +#: usr/local/www/firewall_rules_edit.php:1037 +#: usr/local/www/firewall_rules_edit.php:1072 +#: usr/local/www/firewall_rules_edit.php:1087 +#: usr/local/www/firewall_rules_edit.php:1100 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1147 +msgid "Specify the port or port range for the destination of the packet for this rule." +msgstr "Especifique a porta ou o intervalo de portas para o destino do pacote para essa regra." + +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_rules_edit.php:1102 +#: usr/local/www/firewall_rules_edit.php:1101 +#: usr/local/www/firewall_rules_edit.php:1149 +msgid "field empty if you only want to filter a single port" +msgstr "campo vazio se você somente quiser filtrar uma única porta" + +#: usr/local/www/firewall_rules_edit.php:1044 +#: usr/local/www/firewall_rules_edit.php:1079 +#: usr/local/www/firewall_rules_edit.php:1094 +#: usr/local/www/firewall_rules_edit.php:1107 +#: usr/local/www/firewall_rules_edit.php:1106 +#: usr/local/www/firewall_rules_edit.php:1154 +msgid "Log" +msgstr "Log" + +#: usr/local/www/firewall_rules_edit.php:1047 +#: usr/local/www/firewall_rules_edit.php:1082 +#: usr/local/www/firewall_rules_edit.php:1097 +#: usr/local/www/firewall_rules_edit.php:1110 +#: usr/local/www/firewall_rules_edit.php:1109 +#: usr/local/www/firewall_rules_edit.php:1157 +msgid "Log packets that are handled by this rule" +msgstr "Pacotes de log que são tratados por essa regra" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1159 +msgid "Hint: the firewall has limited local log space. Don't turn on logging for everything. If you want to do a lot of logging, consider using a remote syslog server" +msgstr "Dica: o firewall tem um espaço limitado para log. Não habilite os logs para tudo. Se você quiser fazer muito log, considere usar um servidor syslog remoto" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1159 +msgid "see the" +msgstr "veja o" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1159 +msgid "Diagnostics: System logs: Settings" +msgstr "Diagnóstico: Logs de sistema: Configurações" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/services_captiveportal.php:908 +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/services_captiveportal.php:953 +#: usr/local/www/services_captiveportal.php:949 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/services_captiveportal.php:951 +#: usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/system_advanced_firewall.php:333 +#: usr/local/www/services_captiveportal.php:967 +#: usr/local/www/firewall_rules_edit.php:1111 +#: usr/local/www/firewall_rules_edit.php:1159 +#: usr/local/www/system_advanced_firewall.php:344 +msgid "page" +msgstr "página" + +#: usr/local/www/firewall_rules_edit.php:1057 +#: usr/local/www/services_unbound_acls.php:296 +#: usr/local/www/firewall_rules_edit.php:1092 +#: usr/local/www/firewall_rules_edit.php:1107 +#: usr/local/www/firewall_rules_edit.php:1120 +#: usr/local/www/firewall_rules_edit.php:1119 +#: usr/local/www/firewall_rules_edit.php:1167 +msgid "You may enter a description here for your reference." +msgstr "Você deve informar com uma descrição para sua referência." + +#: usr/local/www/firewall_rules_edit.php:1080 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1130 +#: usr/local/www/firewall_rules_edit.php:1143 +#: usr/local/www/firewall_rules_edit.php:1142 +#: usr/local/www/firewall_rules_edit.php:1190 +msgid "Source OS" +msgstr "Fonte OS" + +#: usr/local/www/firewall_rules_edit.php:1086 +#: usr/local/www/firewall_rules_edit.php:1121 +#: usr/local/www/firewall_rules_edit.php:1136 +#: usr/local/www/firewall_rules_edit.php:1149 +#: usr/local/www/firewall_rules_edit.php:1148 +#: usr/local/www/firewall_rules_edit.php:1196 +msgid "OS Type:" +msgstr "Tipo OS:" + +#: usr/local/www/firewall_rules_edit.php:1109 +#: usr/local/www/firewall_rules_edit.php:1144 +#: usr/local/www/firewall_rules_edit.php:1159 +#: usr/local/www/firewall_rules_edit.php:1172 +#: usr/local/www/firewall_rules_edit.php:1171 +#: usr/local/www/firewall_rules_edit.php:1219 +msgid "Note: this only works for TCP rules" +msgstr "Nota: isso somente funciona para regras TCP" + +#: usr/local/www/firewall_rules_edit.php:1114 +#: usr/local/www/firewall_rules_edit.php:1149 +#: usr/local/www/firewall_rules_edit.php:1164 +#: usr/local/www/firewall_rules_edit.php:1177 +#: usr/local/www/firewall_rules_edit.php:1176 +#: usr/local/www/firewall_rules_edit.php:1224 +msgid "Diffserv Code Point" +msgstr "Diff Code Point" + +#: usr/local/www/firewall_rules_edit.php:1130 +#: usr/local/www/interfaces_ppps_edit.php:675 +#: usr/local/www/vpn_ipsec_phase1.php:806 +#: usr/local/www/vpn_ipsec_phase2.php:629 +#: usr/local/www/firewall_rules_edit.php:1165 +#: usr/local/www/vpn_ipsec_phase2.php:655 +#: usr/local/www/vpn_ipsec_phase1.php:819 +#: usr/local/www/interfaces_ppps_edit.php:676 +#: usr/local/www/vpn_ipsec_phase2.php:751 +#: usr/local/www/vpn_ipsec_phase1.php:816 +#: usr/local/www/firewall_rules_edit.php:1180 +#: usr/local/www/interfaces_ppps_edit.php:682 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase2.php:772 +#: usr/local/www/firewall_rules_edit.php:1193 +#: usr/local/www/firewall_rules_edit.php:1192 +#: usr/local/www/interfaces_ppps_edit.php:680 +#: usr/local/www/firewall_rules_edit.php:1240 +msgid "Advanced Options" +msgstr "Opções Avançadas" + +#: usr/local/www/firewall_rules_edit.php:1137 +#: usr/local/www/firewall_rules_edit.php:1172 +#: usr/local/www/firewall_rules_edit.php:1187 +#: usr/local/www/firewall_rules_edit.php:1200 +#: usr/local/www/firewall_rules_edit.php:1199 +#: usr/local/www/firewall_rules_edit.php:1247 +msgid "This allows packets with IP options to pass. Otherwise they are blocked by default. This is usually only seen with multicast traffic." +msgstr "Isso permite que pacotes com opções de IP passem. Do contrário eles são bloqueados por padrão. Isso normalmente somente é visto com tráfego multicast." + +#: usr/local/www/firewall_rules_edit.php:1140 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1190 +#: usr/local/www/firewall_rules_edit.php:1203 +#: usr/local/www/firewall_rules_edit.php:1202 +#: usr/local/www/firewall_rules_edit.php:1250 +msgid "This will disable auto generated reply-to for this rule." +msgstr "Isso irá desabilitar auto geração de respostas para essa regra." + +#: usr/local/www/firewall_rules_edit.php:1143 +#: usr/local/www/firewall_rules_edit.php:1178 +#: usr/local/www/firewall_rules_edit.php:1193 +#: usr/local/www/firewall_rules_edit.php:1206 +#: usr/local/www/firewall_rules_edit.php:1205 +#: usr/local/www/firewall_rules_edit.php:1253 +msgid "You can mark a packet matching this rule and use this mark to match on other NAT/filter rules. It is called" +msgstr "Você pode marcar um pacote que corresponda a essa regra e use essa marca para corresponder a outras regras NAT/filtros. Chama-se" + +#: usr/local/www/firewall_rules_edit.php:1143 +#: usr/local/www/firewall_rules_edit.php:1178 +#: usr/local/www/firewall_rules_edit.php:1193 +#: usr/local/www/firewall_rules_edit.php:1206 +#: usr/local/www/firewall_rules_edit.php:1205 +#: usr/local/www/firewall_rules_edit.php:1253 +msgid "Policy filtering" +msgstr "Política de filtro" + +#: usr/local/www/firewall_rules_edit.php:1146 +#: usr/local/www/firewall_rules_edit.php:1181 +#: usr/local/www/firewall_rules_edit.php:1196 +#: usr/local/www/firewall_rules_edit.php:1209 +#: usr/local/www/firewall_rules_edit.php:1208 +#: usr/local/www/firewall_rules_edit.php:1256 +msgid "You can match packet on a mark placed before on another rule." +msgstr "Você pode combinar pacotes com uma marca colocada antes em outra regra." + +#: usr/local/www/firewall_rules_edit.php:1148 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1198 +#: usr/local/www/firewall_rules_edit.php:1211 +#: usr/local/www/firewall_rules_edit.php:1210 +msgid " Maximum state entries this rule can create" +msgstr " Máximo de entradas de estado que essa regra pode criar" + +#: usr/local/www/firewall_rules_edit.php:1149 +#: usr/local/www/firewall_rules_edit.php:1184 +#: usr/local/www/firewall_rules_edit.php:1199 +#: usr/local/www/firewall_rules_edit.php:1212 +#: usr/local/www/firewall_rules_edit.php:1211 +msgid " Maximum number of unique source hosts" +msgstr " Número máximo de hosts fonte únicos" + +#: usr/local/www/firewall_rules_edit.php:1150 +#: usr/local/www/firewall_rules_edit.php:1185 +#: usr/local/www/firewall_rules_edit.php:1200 +#: usr/local/www/firewall_rules_edit.php:1213 +#: usr/local/www/firewall_rules_edit.php:1212 +msgid " Maximum number of established connections per host" +msgstr " Número máximo de conexões estabelecidas por host" + +#: usr/local/www/firewall_rules_edit.php:1151 +#: usr/local/www/firewall_rules_edit.php:1186 +#: usr/local/www/firewall_rules_edit.php:1201 +#: usr/local/www/firewall_rules_edit.php:1214 +#: usr/local/www/firewall_rules_edit.php:1213 +msgid " Maximum state entries per host" +msgstr " Máximo de entradas de estado por host" + +#: usr/local/www/firewall_rules_edit.php:1160 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1223 +#: usr/local/www/firewall_rules_edit.php:1222 +msgid "Maximum new connections / per second(s)" +msgstr "Máximo de novas conexões / por segundo(s)" + +#: usr/local/www/firewall_rules_edit.php:1164 +#: usr/local/www/firewall_rules_edit.php:1199 +#: usr/local/www/firewall_rules_edit.php:1214 +#: usr/local/www/firewall_rules_edit.php:1226 +#: usr/local/www/firewall_rules_edit.php:1225 +msgid "State Timeout in seconds" +msgstr "Tempo de espera de estado em segundos" + +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1202 +#: usr/local/www/firewall_rules_edit.php:1217 +#: usr/local/www/firewall_rules_edit.php:1228 +#: usr/local/www/firewall_rules_edit.php:1227 +#: usr/local/www/firewall_rules_edit.php:1275 +msgid "Note: Leave fields blank to disable that feature." +msgstr "Nota: Deixe os campos em branco para desabilitar essa função." + +#: usr/local/www/firewall_rules_edit.php:1172 +#: usr/local/www/firewall_rules_edit.php:1207 +#: usr/local/www/firewall_rules_edit.php:1222 +#: usr/local/www/firewall_rules_edit.php:1233 +#: usr/local/www/firewall_rules_edit.php:1232 +#: usr/local/www/firewall_rules_edit.php:1280 +msgid "TCP flags" +msgstr "TCP flags" + +#: usr/local/www/firewall_rules_edit.php:1206 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1256 +#: usr/local/www/firewall_rules_edit.php:1265 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1312 +msgid "Any flags." +msgstr "Qualquer flag." + +#: usr/local/www/firewall_rules_edit.php:1208 +#: usr/local/www/firewall_rules_edit.php:1243 +#: usr/local/www/firewall_rules_edit.php:1258 +#: usr/local/www/firewall_rules_edit.php:1267 +#: usr/local/www/firewall_rules_edit.php:1266 +#: usr/local/www/firewall_rules_edit.php:1314 +msgid "Use this to choose TCP flags that must be set or cleared for this rule to match." +msgstr "Use isto para escolher as flags TCP que precisam estar definidas ou apuradas para esta regra corresponder." + +#: usr/local/www/firewall_rules_edit.php:1214 +#: usr/local/www/firewall_rules_edit.php:1249 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1273 +#: usr/local/www/firewall_rules_edit.php:1272 +#: usr/local/www/firewall_rules_edit.php:1320 +msgid "State Type" +msgstr "Tipo de Estado" + +#: usr/local/www/firewall_rules_edit.php:1221 +#: usr/local/www/firewall_rules_edit.php:1228 +#: usr/local/www/firewall_rules_edit.php:1256 +#: usr/local/www/firewall_rules_edit.php:1263 +#: usr/local/www/firewall_rules_edit.php:1271 +#: usr/local/www/firewall_rules_edit.php:1278 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1286 +#: usr/local/www/firewall_rules_edit.php:1279 +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1327 +#: usr/local/www/firewall_rules_edit.php:1333 +msgid "keep state" +msgstr "manter estado" + +#: usr/local/www/firewall_rules_edit.php:1222 +#: usr/local/www/firewall_rules_edit.php:1229 +#: usr/local/www/firewall_rules_edit.php:1257 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1272 +#: usr/local/www/firewall_rules_edit.php:1279 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1286 +#: usr/local/www/firewall_rules_edit.php:1328 +#: usr/local/www/firewall_rules_edit.php:1334 +msgid "sloppy state" +msgstr "estado sloppy" + +#: usr/local/www/firewall_rules_edit.php:1223 +#: usr/local/www/firewall_rules_edit.php:1230 +#: usr/local/www/firewall_rules_edit.php:1258 +#: usr/local/www/firewall_rules_edit.php:1265 +#: usr/local/www/firewall_rules_edit.php:1273 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1282 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1329 +#: usr/local/www/firewall_rules_edit.php:1335 +msgid "synproxy state" +msgstr "estado synproxy" + +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1260 +#: usr/local/www/firewall_rules_edit.php:1275 +#: usr/local/www/firewall_rules_edit.php:1284 +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1331 +msgid "Hint: Select which type of state tracking mechanism you would like to use. If in doubt, use keep state." +msgstr "Dica: Selecione qual o tipo de mecanismo de rastreamento você gostaria de utilizar. Se estiver em dúvida, use keep state." + +#: usr/local/www/firewall_rules_edit.php:1228 +#: usr/local/www/firewall_rules_edit.php:1229 +#: usr/local/www/firewall_rules_edit.php:1263 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1278 +#: usr/local/www/firewall_rules_edit.php:1279 +#: usr/local/www/firewall_rules_edit.php:1286 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1333 +#: usr/local/www/firewall_rules_edit.php:1334 +msgid "Works with all IP protocols." +msgstr "Funciona com todos os protocolos IP." + +#: usr/local/www/firewall_rules_edit.php:1230 +#: usr/local/www/firewall_rules_edit.php:1265 +#: usr/local/www/firewall_rules_edit.php:1280 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1287 +#: usr/local/www/firewall_rules_edit.php:1335 +msgid "Proxies incoming TCP connections to help protect servers from spoofed TCP SYN floods. This option includes the functionality of keep state and modulate state combined." +msgstr "Faz proxy de conexões TCP de entrada para ajudar a proteger servidores de inundações de spoofed TCP SYN. Essa opção inclui a funcionalidade de manter o estado e modular estado combinado." + +#: usr/local/www/firewall_rules_edit.php:1231 +#: usr/local/www/firewall_rules_edit.php:1266 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/firewall_rules_edit.php:1289 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1336 +msgid "Do not use state mechanisms to keep track. This is only useful if you're doing advanced queueing in certain situations. Please check the documentation." +msgstr "Não use mecanismos de estado para rastrear. Isso somente é útil se você estiver fazendo filas avançadas em determinadas situações. Por favor verifique a documentação." + +#: usr/local/www/firewall_rules_edit.php:1245 +#: usr/local/www/firewall_rules_edit.php:1280 +msgid "Hint: This prevents the rule from automatically syncing to other CARP members." +msgstr "Dica: Isso previne a regra de sincronizar automaticamente com outros membros CARP." + +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1350 +#: usr/local/www/firewall_rules_edit.php:1365 +#: usr/local/www/firewall_rules_edit.php:1372 +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1431 +msgid "Leave as 'none' to leave the rule enabled all the time." +msgstr "Deixa como 'nenhum' para deixar a regra habilitada o tempo todo." + +#: usr/local/www/firewall_rules_edit.php:1295 +#: usr/local/www/services_captiveportal.php:779 +#: usr/local/www/services_captiveportal.php:799 +#: usr/local/www/firewall_rules_edit.php:1362 +#: usr/local/www/services_captiveportal.php:821 +#: usr/local/www/services_captiveportal.php:841 +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/services_captiveportal.php:839 +#: usr/local/www/firewall_rules_edit.php:1377 +#: usr/local/www/services_captiveportal.php:807 +#: usr/local/www/services_captiveportal.php:837 +#: usr/local/www/firewall_rules_edit.php:1384 +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/firewall_rules_edit.php:1395 +#: usr/local/www/firewall_rules_edit.php:1443 +msgid "default" +msgstr "padrão" + +#: usr/local/www/firewall_rules_edit.php:1334 +#: usr/local/www/firewall_rules_edit.php:1405 +#: usr/local/www/firewall_rules_edit.php:1420 +#: usr/local/www/firewall_rules_edit.php:1427 +#: usr/local/www/firewall_rules_edit.php:1438 +#: usr/local/www/firewall_rules_edit.php:1486 +msgid "Leave as 'default' to use the system routing table. Or choose a gateway to utilize policy based routing." +msgstr "Deixe como 'padrão' para usar a tabela de roteamento do sistema ou escolha um gateway para utilizar roteamento baseado em políticas." + +#: usr/local/www/firewall_rules_edit.php:1339 +#: usr/local/www/firewall_rules_edit.php:1410 +#: usr/local/www/firewall_rules_edit.php:1425 +#: usr/local/www/firewall_rules_edit.php:1432 +#: usr/local/www/firewall_rules_edit.php:1443 +#: usr/local/www/firewall_rules_edit.php:1491 +msgid "In/Out" +msgstr "Entrada/Saída" + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +#: usr/local/www/firewall_rules_edit.php:1476 +#: usr/local/www/firewall_rules_edit.php:1487 +#: usr/local/www/firewall_rules_edit.php:1535 +msgid "Choose the Out queue/Virtual interface only if you have also selected In." +msgstr "Escolha a interface de fila de saída/virtual somente se você selecionou a de Entrada também." + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +#: usr/local/www/firewall_rules_edit.php:1476 +#: usr/local/www/firewall_rules_edit.php:1487 +#: usr/local/www/firewall_rules_edit.php:1535 +msgid "The Out selection is applied to traffic leaving the interface where the rule is created, In is applied to traffic coming into the chosen interface." +msgstr "A seleção de Saída é aplicada ao tráfego que estiver saindo da interface em que a regra foi criada a Entrada é a aplicada ao tráfego chegando na interface selecionada." + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +#: usr/local/www/firewall_rules_edit.php:1476 +#: usr/local/www/firewall_rules_edit.php:1487 +#: usr/local/www/firewall_rules_edit.php:1535 +msgid "If you are creating a floating rule, if the direction is In then the same rules apply, if the direction is out the selections are reverted Out is for incoming and In is for outgoing." +msgstr "Se você estiver criando uma regra na aba Flotação, se a direção é de Entrada, então as mesmas regras se aplicam. Se a direção foi de Saída, as seleções são revertidas:Saída é para entradas e Entrada é para saídas. E se você não selecionar nenhuma direção, use somente a Entrada, já que a seleção de Saída não faz sentido, de modo a evitar confusões." + +#: usr/local/www/firewall_rules_edit.php:1389 +#: usr/local/www/firewall_rules_edit.php:1460 +#: usr/local/www/firewall_rules_edit.php:1475 +#: usr/local/www/firewall_rules_edit.php:1482 +#: usr/local/www/firewall_rules_edit.php:1493 +#: usr/local/www/firewall_rules_edit.php:1541 +msgid "Ackqueue/Queue" +msgstr "Reconhecimento/Fila" + +#: usr/local/www/firewall_rules_edit.php:1439 +#: usr/local/www/firewall_rules_edit.php:1510 +#: usr/local/www/firewall_rules_edit.php:1525 +#: usr/local/www/firewall_rules_edit.php:1532 +#: usr/local/www/firewall_rules_edit.php:1543 +#: usr/local/www/firewall_rules_edit.php:1591 +msgid "Choose the Acknowledge Queue only if you have selected Queue." +msgstr "Escolha a Fila de Acordo somente se você selecionou Fila." + +#: usr/local/www/firewall_rules_edit.php:1466 +#: usr/local/www/firewall_rules_edit.php:1537 +#: usr/local/www/firewall_rules_edit.php:1552 +#: usr/local/www/firewall_rules_edit.php:1560 +#: usr/local/www/firewall_rules_edit.php:1571 +#: usr/local/www/firewall_rules_edit.php:1619 +msgid "Choose a Layer7 container to apply application protocol inspection rules. These are valid for TCP and UDP protocols only." +msgstr "Escolha o contâiner Layer7 para aplicar regras de inspeção de protocolo de aplicação. Essas são válidas somente para protocolos TCP e UDP." + +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_schedule_edit.php:61 usr/local/www/fbegin.inc:113 +#: usr/local/www/system_advanced_misc.php:380 usr/local/www/fbegin.inc:130 +#: usr/local/www/system_advanced_misc.php:423 usr/local/www/fbegin.inc:139 +#: usr/local/www/system_advanced_misc.php:472 +#: usr/local/www/system_advanced_misc.php:484 usr/local/www/fbegin.inc:131 +#: usr/local/www/system_advanced_misc.php:531 +#: usr/local/www/system_advanced_misc.php:549 +msgid "Schedules" +msgstr "Agendas" + +#: usr/local/www/firewall_schedule.php:77 +#, php-format +msgid "Cannot delete Schedule. Currently in use by %s" +msgstr "Não pode apagar a Agenda. Ela está atualmente em uso por %s" + +#: usr/local/www/firewall_schedule.php:97 +msgid "Time Range(s)" +msgstr "Intervalo(s) de tempo" + +#: usr/local/www/firewall_schedule.php:103 +#: usr/local/www/firewall_schedule.php:233 +msgid "add a new schedule" +msgstr "adicionar uma nova agenda" + +#: usr/local/www/firewall_schedule.php:115 +msgid "Schedule is currently active" +msgstr "Agenda está atualmente ativa" + +#: usr/local/www/firewall_schedule.php:221 +msgid "Do you really want to delete this schedule?" +msgstr "Você realmente quer apagar essa agenda?" + +#: usr/local/www/firewall_schedule.php:240 +msgid "Schedules act as placeholders for time ranges to be used in Firewall Rules." +msgstr "Agendas atuam como placeholders para intervalos de tempo para serem usadas pelas Regras do Firewall." + +#: usr/local/www/firewall_schedule_edit.php:93 +msgid "Schedule may not be named LAN." +msgstr "Agenda não pode ser nomeada LAN." + +#: usr/local/www/firewall_schedule_edit.php:95 +msgid "Schedule may not be named WAN." +msgstr "Agenda não pode ser nomeada WAN." + +#: usr/local/www/firewall_schedule_edit.php:97 +msgid "Schedule name cannot be blank." +msgstr "Nome da agenda não pode ser deixado em branco." + +#: usr/local/www/firewall_schedule_edit.php:101 +msgid "Reserved word used for schedule name." +msgstr "Palavra reservada usada para nome de agenda." + +#: usr/local/www/firewall_schedule_edit.php:104 +msgid "The schedule name may only consist of the characters a-z, A-Z, 0-9" +msgstr "O nome da agenda somente deve consistir dos caracteres de a-z, A-Z, 0-9" + +#: usr/local/www/firewall_schedule_edit.php:113 +msgid "A Schedule with this name already exists." +msgstr "Uma Agenda com esse nome já existe." + +#: usr/local/www/firewall_schedule_edit.php:170 +msgid "The schedule must have at least one time range configured." +msgstr "A agenda deve ter, pelo menos, um intervalo de tempo configurado." + +#: usr/local/www/firewall_schedule_edit.php:770 +#: usr/local/www/firewall_schedule_edit.php:769 +msgid "Schedule information" +msgstr "Informação da agenda" + +#: usr/local/www/firewall_schedule_edit.php:776 +#: usr/local/www/firewall_schedule_edit.php:775 +msgid "Schedule Name" +msgstr "Nome da agenda" + +#: usr/local/www/firewall_schedule_edit.php:782 +#: usr/local/www/firewall_schedule_edit.php:781 +msgid "NOTE: This schedule is in use so the name may not be modified!" +msgstr "NOTA: Essa agenda está em uso e, portanto, o nome não pode ser modificado!" + +#: usr/local/www/firewall_schedule_edit.php:787 +#: usr/local/www/firewall_schedule_edit.php:786 +msgid "The name of the alias may only consist of the characters a-z, A-Z and 0-9" +msgstr "O nome do alias somente deve consistir nos caracteres de a-z, A-Z e 0-9" + +#: usr/local/www/firewall_schedule_edit.php:804 +#: usr/local/www/firewall_schedule_edit.php:803 +msgid "Month" +msgstr "Mês" + +#: usr/local/www/firewall_schedule_edit.php:847 +#: usr/local/www/firewall_schedule_edit.php:846 +msgid "Tue" +msgstr "Ter" + +#: usr/local/www/firewall_schedule_edit.php:849 +#: usr/local/www/firewall_schedule_edit.php:848 +msgid "Thu" +msgstr "Qui" + +#: usr/local/www/firewall_schedule_edit.php:906 +#: usr/local/www/firewall_schedule_edit.php:905 +msgid "Click individual date to select that date only. Click the appropriate weekday Header to select all occurences of that weekday." +msgstr "Clique em data individual para selecionar somente a data. Clique no cabeçalho do dia da semana apropriado para selecionar todas as ocorrências daquele dia da semana." + +#: usr/local/www/firewall_schedule_edit.php:914 +#: usr/local/www/firewall_schedule_edit.php:996 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:995 +msgid "Start Time" +msgstr "Hora de início" + +#: usr/local/www/firewall_schedule_edit.php:914 +#: usr/local/www/firewall_schedule_edit.php:997 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:996 +msgid "Stop Time" +msgstr "Hora de término" + +#: usr/local/www/firewall_schedule_edit.php:927 +#: usr/local/www/firewall_schedule_edit.php:952 +#: usr/local/www/firewall_schedule_edit.php:926 +#: usr/local/www/firewall_schedule_edit.php:951 +msgid "Hr" +msgstr "Hr" + +#: usr/local/www/firewall_schedule_edit.php:934 +#: usr/local/www/firewall_schedule_edit.php:959 +#: usr/local/www/firewall_schedule_edit.php:933 +#: usr/local/www/firewall_schedule_edit.php:958 +msgid "Min" +msgstr "Min" + +#: usr/local/www/firewall_schedule_edit.php:963 +#: usr/local/www/firewall_schedule_edit.php:962 +msgid "Select the time range for the day(s) selected on the Month(s) above. A full day is 0:00-23:59." +msgstr "Selecione o intervalo de tempo para o(s) dia(s) selecionados no(s) Mes(es) acima. Um dia completo é 0:00-23:59." + +#: usr/local/www/firewall_schedule_edit.php:967 +#: usr/local/www/firewall_schedule_edit.php:966 +msgid "Time Range Description" +msgstr "Descrição do Intervalo de Tempo" + +#: usr/local/www/firewall_schedule_edit.php:977 +#: usr/local/www/firewall_schedule_edit.php:976 +msgid "Add Time" +msgstr "Adicionar Tempo" + +#: usr/local/www/firewall_schedule_edit.php:978 +#: usr/local/www/firewall_schedule_edit.php:977 +msgid "Clear Selection" +msgstr "Limpar seleção" + +#: usr/local/www/firewall_schedule_edit.php:987 +#: usr/local/www/firewall_schedule_edit.php:986 +msgid "Schedule repeat" +msgstr "Repetição de agenda" + +#: usr/local/www/firewall_schedule_edit.php:990 +#: usr/local/www/firewall_schedule_edit.php:989 +msgid "Configured Ranges" +msgstr "Intervalos configurados" + +#: usr/local/www/firewall_schedule_edit.php:995 +#: usr/local/www/firewall_schedule_edit.php:994 +msgid "Day(s)" +msgstr "Dia(s)" + +#: usr/local/www/firewall_shaper.php:369 usr/local/www/firewall_shaper.php:370 +#: usr/local/www/firewall_shaper.php:371 +msgid "Disable shaper on interface" +msgstr "Desabilitar modelador na interface" + +#: usr/local/www/firewall_shaper.php:424 usr/local/www/firewall_shaper.php:425 +#: usr/local/www/firewall_shaper.php:426 +msgid "Remove Shaper" +msgstr "Remover Modelador" + +#: usr/local/www/diag_backup.php:84 usr/local/www/diag_backup.php:161 +msgid "Restored base_package menus after configuration restore." +msgstr "Restaurado menu base_package após restauração da configuração." + +#: usr/local/www/diag_backup.php:104 usr/local/www/fbegin.inc:120 +#: usr/local/www/fbegin.inc:156 usr/local/www/status_rrd_graph_settings.php:58 +#: usr/local/www/status_rrd_graph_settings.php:155 +#: usr/local/www/status_services.php:275 +#: usr/local/www/widgets/widgets/services_status.widget.php:80 +#: usr/local/www/fbegin.inc:137 usr/local/www/fbegin.inc:173 +#: usr/local/www/status_rrd_graph_settings.php:156 +#: usr/local/www/diag_backup.php:181 etc/inc/service-utils.inc:256 +#: usr/local/www/fbegin.inc:146 usr/local/www/fbegin.inc:181 +#: usr/local/www/fbegin.inc:138 usr/local/www/fbegin.inc:172 +#: etc/inc/service-utils.inc:255 etc/inc/service-utils.inc:272 +msgid "Captive Portal" +msgstr "Portal Captive" + +#: usr/local/www/diag_backup.php:105 usr/local/www/diag_backup.php:182 +msgid "Captive Portal Vouchers" +msgstr "Vouchers do Portal Captive" + +#: usr/local/www/diag_backup.php:106 usr/local/www/fbegin.inc:121 +#: usr/local/www/status_services.php:263 +#: usr/local/www/widgets/widgets/services_status.widget.php:68 +#: usr/local/www/fbegin.inc:138 usr/local/www/diag_backup.php:183 +#: etc/inc/service-utils.inc:241 usr/local/www/fbegin.inc:147 +#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:240 +#: etc/inc/service-utils.inc:257 +msgid "DNS Forwarder" +msgstr "DNS Forwarder" + +#: usr/local/www/diag_backup.php:107 usr/local/www/fbegin.inc:125 +#: usr/local/www/fbegin.inc:142 usr/local/www/diag_backup.php:184 +#: usr/local/www/fbegin.inc:151 usr/local/www/fbegin.inc:143 +msgid "DHCP Server" +msgstr "Servidor DHCP" + +#: usr/local/www/diag_backup.php:108 usr/local/www/diag_backup.php:185 +#: usr/local/www/diag_backup.php:186 +msgid "Firewall Rules" +msgstr "Regras de firewall" + +#: usr/local/www/diag_backup.php:110 usr/local/www/diag_backup.php:187 +#: usr/local/www/diag_backup.php:188 +msgid "IPSEC" +msgstr "IPSEC" + +#: usr/local/www/diag_backup.php:114 usr/local/www/diag_backup.php:191 +#: usr/local/www/diag_backup.php:192 +msgid "PPTP Server" +msgstr "Servidor PPTP" + +#: usr/local/www/diag_backup.php:115 usr/local/www/diag_backup.php:193 +#: usr/local/www/diag_backup.php:194 +msgid "Scheduled Tasks" +msgstr "Tarefas Agendadas" + +#: usr/local/www/diag_backup.php:116 usr/local/www/diag_backup.php:194 +#: usr/local/www/diag_backup.php:195 +msgid "Syslog" +msgstr "Syslog" + +#: usr/local/www/diag_backup.php:118 usr/local/www/diag_backup.php:196 +#: usr/local/www/diag_backup.php:197 +msgid "Static routes" +msgstr "Rotas estáticas" + +#: usr/local/www/diag_backup.php:119 usr/local/www/diag_backup.php:197 +#: usr/local/www/diag_backup.php:198 +msgid "System tunables" +msgstr "Ajustes de sistema" + +#: usr/local/www/diag_backup.php:120 usr/local/www/diag_backup.php:198 +#: usr/local/www/diag_backup.php:199 +msgid "SNMP Server" +msgstr "Servidor SNMP" + +#: usr/local/www/diag_backup.php:122 usr/local/www/diag_backup.php:200 +#: usr/local/www/diag_backup.php:201 +msgid "VLANS" +msgstr "VLANS" + +#: usr/local/www/diag_backup.php:130 usr/local/www/diag_backup.php:205 +#: usr/local/www/diag_backup.php:206 +msgid "ALL" +msgstr "TODOS" + +#: usr/local/www/diag_backup.php:157 usr/local/www/diag_backup.php:619 +#: usr/local/www/diag_backup.php:654 usr/local/www/diag_backup.php:244 +#: usr/local/www/diag_backup.php:698 usr/local/www/diag_backup.php:735 +#: usr/local/www/diag_backup.php:703 usr/local/www/diag_backup.php:740 +#: usr/local/www/diag_backup.php:245 usr/local/www/diag_backup.php:704 +#: usr/local/www/diag_backup.php:741 +msgid "Restore configuration" +msgstr "Restaurar configuração" + +#: usr/local/www/diag_backup.php:159 usr/local/www/diag_backup.php:246 +#: usr/local/www/diag_backup.php:247 +msgid "Reinstall" +msgstr "Reinstalar" + +#: usr/local/www/diag_backup.php:161 usr/local/www/diag_backup.php:673 +#: usr/local/www/diag_backup.php:248 usr/local/www/diag_backup.php:754 +#: usr/local/www/diag_backup.php:762 usr/local/www/diag_backup.php:249 +#: usr/local/www/diag_backup.php:763 +msgid "Clear Package Lock" +msgstr "Limpar trava de Pacotes" + +#: usr/local/www/diag_backup.php:165 usr/local/www/diag_backup.php:252 +#: usr/local/www/diag_backup.php:253 +msgid "Restore version" +msgstr "Restaurar versão" + +#: usr/local/www/diag_backup.php:180 usr/local/www/diag_backup.php:267 +#: usr/local/www/diag_backup.php:268 +msgid "You must supply and confirm the password for encryption." +msgstr "Você precisa fornecer e confirmar a senha para criptografia." + +#: usr/local/www/diag_backup.php:182 usr/local/www/diag_backup.php:268 +#: usr/local/www/diag_backup.php:269 usr/local/www/diag_backup.php:346 +#: usr/local/www/diag_backup.php:270 usr/local/www/diag_backup.php:347 +msgid "The supplied 'Password' and 'Confirm' field values must match." +msgstr "Os campos 'Senha' e 'Confirmar' fornecidos devem ser iguais." + +#: usr/local/www/diag_backup.php:266 usr/local/www/diag_backup.php:344 +#: usr/local/www/diag_backup.php:345 +msgid "You must supply and confirm the password for decryption." +msgstr "Você deve fornecer e confirmar a senha para descriptografia." + +#: usr/local/www/diag_backup.php:278 usr/local/www/diag_backup.php:356 +#: usr/local/www/diag_backup.php:357 +#, php-format +msgid "Warning, could not read file %s" +msgstr "Aviso, não é possível ler o arquivo %s" + +#: usr/local/www/diag_backup.php:284 usr/local/www/diag_backup.php:362 +#: usr/local/www/diag_backup.php:363 +msgid "The uploaded file does not appear to contain an encrypted pfsense configuration." +msgstr "O arquivo enviado não parece conter uma configuração pfSense criptografada." + +#: usr/local/www/diag_backup.php:291 usr/local/www/diag_backup.php:369 +#: usr/local/www/diag_backup.php:370 +msgid "Upgrading m0n0wall configuration to pfsense." +msgstr "Atualizando configuração do m0n0wall para pfSense." + +#: usr/local/www/diag_backup.php:299 usr/local/www/diag_backup.php:377 +#: usr/local/www/diag_backup.php:380 usr/local/www/diag_backup.php:378 +#: usr/local/www/diag_backup.php:381 +msgid "You have selected to restore an area but we could not locate the correct xml tag." +msgstr "Você selecionou uma área para restaurar, mas não conseguimos localizar a tag XML correta." + +#: usr/local/www/diag_backup.php:303 usr/local/www/diag_backup.php:392 +#: usr/local/www/diag_backup.php:393 +msgid "The configuration area has been restored. You may need to reboot the firewall." +msgstr "A área de configuração foi restaurada. Você pode precisar reiniciar o firewall." + +#: usr/local/www/diag_backup.php:307 usr/local/www/diag_backup.php:397 +#: usr/local/www/diag_backup.php:398 +#, php-format +msgid "You have selected to restore the full configuration but we could not locate a %s tag." +msgstr "Você selecionou restaurar a configuração completa, mas não podemos localizar uma tag %s." + +#: usr/local/www/diag_backup.php:438 usr/local/www/diag_backup.php:515 +#: usr/local/www/diag_backup.php:516 +msgid "The m0n0wall configuration has been restored and upgraded to pfSense." +msgstr "A configuração m0n0wall foi restaurada e atualizada para pfSense." + +#: usr/local/www/diag_backup.php:461 usr/local/www/diag_backup.php:485 +#: usr/local/www/diag_backup.php:538 usr/local/www/diag_backup.php:562 +#: usr/local/www/diag_backup.php:543 usr/local/www/diag_backup.php:567 +#: usr/local/www/diag_backup.php:544 usr/local/www/diag_backup.php:568 +msgid "The configuration could not be restored." +msgstr "A configuração não poderá ser restaurada." + +#: usr/local/www/diag_backup.php:466 usr/local/www/diag_backup.php:543 +#: usr/local/www/diag_backup.php:548 usr/local/www/diag_backup.php:549 +msgid "The configuration could not be restored (file upload error)." +msgstr "A configuração não pode ser restaurada (erro de carregamento de arquivo)." + +#: usr/local/www/diag_backup.php:479 usr/local/www/diag_backup.php:556 +#: usr/local/www/diag_backup.php:561 usr/local/www/diag_backup.php:562 +msgid "XXX - this feature may hose your config (do NOT backrev configs!) - billm" +msgstr "XXX - está funcionalidade pode estragar suas configurações (NÃO retorne a versão de suas configurações!) - billm" + +#: usr/local/www/diag_backup.php:488 usr/local/www/diag_backup.php:565 +#: usr/local/www/diag_backup.php:570 usr/local/www/diag_backup.php:571 +msgid "No version selected." +msgstr "Nenhuma versão selecionada." + +#: usr/local/www/diag_backup.php:499 usr/local/www/diag_backup.php:576 +#: usr/local/www/diag_backup.php:581 usr/local/www/diag_backup.php:582 +msgid "Backup/restore" +msgstr "Backup/restauração" + +#: usr/local/www/diag_backup.php:540 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624 +#: usr/local/www/diag_backup.php:625 +msgid "The firewall configuration has been changed." +msgstr "A configuração do firewall foi alterada." + +#: usr/local/www/diag_backup.php:540 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624 +#: usr/local/www/diag_backup.php:625 +msgid "The firewall is now rebooting." +msgstr "O firewall está reiniciando agora." + +#: usr/local/www/diag_backup.php:549 usr/local/www/diag_confbak.php:139 +#: usr/local/www/diag_backup.php:628 usr/local/www/diag_backup.php:633 +#: usr/local/www/diag_backup.php:634 +msgid "Config History" +msgstr "Histórico de configuração" + +#: usr/local/www/diag_backup.php:550 usr/local/www/diag_confbak.php:140 +#: usr/local/www/fbegin.inc:190 usr/local/www/fbegin.inc:208 +#: usr/local/www/diag_backup.php:629 usr/local/www/fbegin.inc:216 +#: usr/local/www/diag_backup.php:634 usr/local/www/fbegin.inc:207 +#: usr/local/www/diag_backup.php:635 +msgid "Backup/Restore" +msgstr "Backup/Restauração" + +#: usr/local/www/diag_backup.php:560 usr/local/www/diag_backup.php:639 +#: usr/local/www/diag_backup.php:644 usr/local/www/diag_backup.php:645 +msgid "Backup configuration" +msgstr "Configuração do backup" + +#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644 +#: usr/local/www/diag_backup.php:649 usr/local/www/diag_backup.php:650 +msgid "Click this button to download the system configuration in XML format." +msgstr "Clique neste botão para fazer download da configuração do sistema em formato XML." + +#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644 +#: usr/local/www/diag_backup.php:649 usr/local/www/diag_backup.php:650 +msgid "Backup area:" +msgstr "Área de backup:" + +#: usr/local/www/diag_backup.php:572 usr/local/www/diag_backup.php:651 +#: usr/local/www/diag_backup.php:656 usr/local/www/diag_backup.php:657 +msgid "Do not backup package information." +msgstr "Não fazer backup de informações de pacotes." + +#: usr/local/www/diag_backup.php:582 usr/local/www/diag_backup.php:661 +#: usr/local/www/diag_backup.php:666 usr/local/www/diag_backup.php:667 +msgid "Encrypt this configuration file." +msgstr "Criptografar este arquivo de configuração." + +#: usr/local/www/diag_backup.php:590 usr/local/www/diag_backup.php:669 +#: usr/local/www/diag_backup.php:674 usr/local/www/diag_backup.php:675 +msgid "Do not backup RRD data (NOTE: RRD Data can consume 4+ megabytes of config.xml space!)" +msgstr "Não fazer backup dos dados RRD (Nota: dados RRD podem consumir 4+ megabytes de espaço no config.xml!)" + +#: usr/local/www/diag_backup.php:605 usr/local/www/diag_backup.php:684 +#: usr/local/www/diag_backup.php:689 usr/local/www/diag_backup.php:690 +msgid "confirm:" +msgstr "confirmar:" + +#: usr/local/www/diag_backup.php:612 usr/local/www/diag_backup.php:691 +#: usr/local/www/diag_backup.php:696 usr/local/www/diag_backup.php:697 +msgid "Download configuration" +msgstr "Download da configuração" + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703 +#: usr/local/www/diag_backup.php:708 usr/local/www/diag_backup.php:709 +msgid "Open a" +msgstr "Abra um" + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703 +#: usr/local/www/diag_backup.php:708 usr/local/www/diag_backup.php:709 +msgid "configuration XML file and click the button below to restore the configuration." +msgstr "arquivo de configuração XML e clique no botão abaixo para restaurar a configuração." + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:705 +#: usr/local/www/diag_backup.php:710 usr/local/www/diag_backup.php:711 +msgid "Restore area:" +msgstr "Área de restauração:" + +#: usr/local/www/diag_backup.php:632 usr/local/www/diag_backup.php:713 +#: usr/local/www/diag_backup.php:718 usr/local/www/diag_backup.php:719 +msgid "Configuration file is encrypted." +msgstr "O arquivo de configuração está criptografado." + +#: usr/local/www/diag_backup.php:639 usr/local/www/diag_backup.php:720 +#: usr/local/www/diag_backup.php:725 usr/local/www/diag_backup.php:726 +msgid "Password :" +msgstr "Senha :" + +#: usr/local/www/diag_backup.php:647 usr/local/www/diag_backup.php:728 +#: usr/local/www/diag_backup.php:733 usr/local/www/diag_backup.php:734 +msgid "confirm :" +msgstr "confirmar:" + +#: usr/local/www/diag_backup.php:655 usr/local/www/diag_backup.php:736 +#: usr/local/www/diag_backup.php:741 usr/local/www/diag_backup.php:742 +msgid "The firewall will reboot after restoring the configuration." +msgstr "O firewall irá reiniciar após restaurar a configuração." + +#: usr/local/www/diag_backup.php:663 usr/local/www/diag_backup.php:744 +#: usr/local/www/diag_backup.php:749 usr/local/www/diag_backup.php:750 +msgid "Package Functions" +msgstr "Funções de Pacotes" + +#: usr/local/www/diag_backup.php:668 usr/local/www/diag_backup.php:749 +#: usr/local/www/diag_backup.php:755 usr/local/www/diag_backup.php:756 +msgid "Click this button to reinstall all system packages. This may take a while." +msgstr "Clique neste botão para reinstalar todos os pacotes de sistema. Isto pode demorar um pouco." + +#: usr/local/www/diag_backup.php:669 usr/local/www/diag_backup.php:750 +#: usr/local/www/diag_backup.php:756 usr/local/www/diag_backup.php:757 +msgid "Reinstall packages" +msgstr "Reinstalar pacotes" + +#: usr/local/www/diag_backup.php:672 usr/local/www/diag_backup.php:753 +#: usr/local/www/diag_backup.php:761 usr/local/www/diag_backup.php:762 +msgid "Click this button to clear the package lock if a package fails to reinstall properly after an upgrade." +msgstr "Clique neste botão para limpar a trava de pacotes se um pacote falhou em reinstalar corretamente depois de uma atualização." + +#: usr/local/www/firewall_shaper_queues.php:172 +msgid "Firewall: Shaper: By Queues View" +msgstr "Firewall: Modelador: Por Visualização de Filas" + +#: usr/local/www/diag_confbak.php:49 +#, php-format +msgid "Successfully reverted to timestamp %1$s with description \"%2$s\"." +msgstr "Sucesso ao reverter o timestamp %1$s com descrição \"%2$s\"." + +#: usr/local/www/diag_confbak.php:49 usr/local/www/diag_confbak.php:59 +#: usr/local/www/diag_confbak.php:111 usr/local/www/diag_confbak.php:161 +#: usr/local/www/diag_confbak.php:169 usr/local/www/diag_confbak.php:162 +#: usr/local/www/diag_confbak.php:171 +#: usr/local/www/firewall_rules_edit.php:1585 +#: usr/local/www/firewall_rules_edit.php:1593 +#: usr/local/www/firewall_nat_edit.php:869 +#: usr/local/www/firewall_nat_edit.php:877 +#: usr/local/www/firewall_nat_out_edit.php:684 +#: usr/local/www/firewall_nat_out_edit.php:692 +#: usr/local/www/firewall_rules_edit.php:1596 +#: usr/local/www/firewall_rules_edit.php:1604 +#: usr/local/www/firewall_nat_edit.php:870 +#: usr/local/www/firewall_nat_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:1644 +#: usr/local/www/firewall_rules_edit.php:1652 +msgid "n/j/y H:i:s" +msgstr "j/n/y H:i:s" + +#: usr/local/www/diag_confbak.php:51 +msgid "Unable to revert to the selected configuration." +msgstr "Incapaz de reverter a configuração selecionada." + +#: usr/local/www/diag_confbak.php:59 +#, php-format +msgid "Deleted backup with timestamp %1$s and description \"%2$s\"." +msgstr "Backup excluído com timestamp %1$s e descrição \"%2$s\"." + +#: usr/local/www/diag_confbak.php:98 +msgid "Configuration History" +msgstr "Histórico de Configuração" + +#: usr/local/www/diag_confbak.php:111 +msgid "Configuration diff from" +msgstr "Diferença de Configuração de" + +#: usr/local/www/diag_confbak.php:152 usr/local/www/diag_confbak.php:206 +#: usr/local/www/diag_confbak.php:208 +msgid "Diff" +msgstr "Diff" + +#: usr/local/www/diag_confbak.php:153 +#: usr/local/www/system_firmware_restorefullbackup.php:140 +msgid "Date" +msgstr "Data" + +#: usr/local/www/diag_confbak.php:154 usr/local/www/diag_confbak.php:155 +msgid "Configuration Change" +msgstr "Alteração na configuração" + +#: usr/local/www/diag_confbak.php:163 usr/local/www/diag_confbak.php:165 +msgid "Current" +msgstr "Atual" + +#: usr/local/www/diag_confbak.php:171 usr/local/www/diag_confbak.php:173 +#: usr/local/www/widgets/widgets/gateways.widget.php:105 +#: usr/local/www/widgets/widgets/gateways.widget.php:128 +#: usr/local/www/widgets/widgets/gateways.widget.php:129 +msgid "Unknown" +msgstr "Desconhecido" + +#: usr/local/www/diag_confbak.php:189 usr/local/www/diag_confbak.php:191 +msgid "Revert to this configuration?" +msgstr "Reverter para essa configuração?" + +#: usr/local/www/diag_confbak.php:190 usr/local/www/diag_confbak.php:192 +msgid "Revert to this configuration" +msgstr "Reverter para esta configuração" + +#: usr/local/www/diag_confbak.php:194 usr/local/www/diag_confbak.php:196 +msgid "Delete this configuration backup?" +msgstr "Excluir este backup de configuração?" + +#: usr/local/www/diag_confbak.php:195 usr/local/www/diag_confbak.php:197 +msgid "Remove this backup" +msgstr "Remover este backup" + +#: usr/local/www/diag_confbak.php:200 usr/local/www/diag_confbak.php:202 +msgid "Download this backup" +msgstr "Download deste backup" + +#: usr/local/www/diag_confbak.php:212 usr/local/www/diag_confbak.php:214 +msgid "No backups found." +msgstr "Nenhum backup foi encontrado." + +#: usr/local/www/firewall_virtual_ip.php:106 +#: usr/local/www/firewall_virtual_ip.php:103 +msgid "This entry cannot be deleted because it is still referenced by at least one NAT mapping." +msgstr "Essa entrada não pode ser apagada porque ela ainda é referenciada por pelo menos um mapeamento NAT." + +#: usr/local/www/firewall_virtual_ip.php:118 +msgid "This entry cannot be deleted because it is still referenced by CARP" +msgstr "Essa entrada não pode ser removida porque ela ainda é referenciada pelo CARP" + +#: usr/local/www/firewall_virtual_ip.php:124 +msgid "This entry cannot be deleted because it is still referenced by ip alias entry" +msgstr "Essa entrada não pode ser removida porque ela ainda é referenciada pelo CARP" + +#: usr/local/www/firewall_virtual_ip.php:149 +#: usr/local/www/firewall_virtual_ip.php:152 +#: usr/local/www/firewall_virtual_ip.php:166 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/firewall_virtual_ip.php:196 +msgid "Virtual IP Addresses" +msgstr "Endereços IP Virtuais" + +#: usr/local/www/firewall_virtual_ip.php:164 +#: usr/local/www/firewall_virtual_ip.php:167 +#: usr/local/www/firewall_virtual_ip.php:181 +#: usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_virtual_ip.php:211 +msgid "The VIP configuration has been changed." +msgstr "A configuração de Endereços IP Virtuais foi modificada." + +#: usr/local/www/firewall_virtual_ip.php:172 usr/local/www/fbegin.inc:115 +#: usr/local/www/fbegin.inc:132 usr/local/www/fbegin.inc:141 +#: usr/local/www/firewall_virtual_ip.php:175 +#: usr/local/www/firewall_virtual_ip.php:189 usr/local/www/fbegin.inc:133 +#: usr/local/www/firewall_virtual_ip.php:212 +#: usr/local/www/firewall_virtual_ip.php:219 +msgid "Virtual IPs" +msgstr "IPs Virtuais" + +#: usr/local/www/firewall_virtual_ip.php:173 +#: usr/local/www/firewall_virtual_ip.php:176 +#: usr/local/www/firewall_virtual_ip.php:190 +#: usr/local/www/firewall_virtual_ip.php:213 +#: usr/local/www/firewall_virtual_ip.php:220 +msgid "CARP Settings" +msgstr "Configurações do CARP" + +#: usr/local/www/firewall_virtual_ip.php:185 +#: usr/local/www/firewall_virtual_ip.php:188 +#: usr/local/www/firewall_virtual_ip.php:202 +#: usr/local/www/firewall_virtual_ip.php:225 +#: usr/local/www/firewall_virtual_ip.php:232 +msgid "Virtual IP address" +msgstr "Endereços IP Virtuais" + +#: usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +#: usr/local/www/firewall_virtual_ip.php:291 +#: usr/local/www/firewall_virtual_ip.php:299 +msgid "The virtual IP addresses defined on this page may be used in" +msgstr "Os endereços IP virtuais definidos nessa página podem ser usados em" + +#: usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +#: usr/local/www/firewall_virtual_ip.php:291 +#: usr/local/www/firewall_virtual_ip.php:299 +msgid "mappings." +msgstr "mapeamentos." + +#: usr/local/www/firewall_virtual_ip.php:243 +#: usr/local/www/firewall_virtual_ip.php:249 +#: usr/local/www/firewall_virtual_ip.php:269 +#: usr/local/www/firewall_virtual_ip.php:292 +#: usr/local/www/firewall_virtual_ip.php:300 +msgid "You can check the status of your CARP Virtual IPs and interfaces " +msgstr "Você pode verificar o status de seus IPs Virtuais CARP e interfaces " + +#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309 +#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297 +#: usr/local/www/guiconfig.inc:294 usr/local/www/guiconfig.inc:301 +msgid "apply" +msgstr "aplicar" + +#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309 +#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297 +#: usr/local/www/guiconfig.inc:294 usr/local/www/guiconfig.inc:301 +msgid "save" +msgstr "salvar" + +#: usr/local/www/guiconfig.inc:295 usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/system_certmanager.php:541 +#: usr/local/www/system_certmanager.php:640 usr/local/www/guiconfig.inc:309 +#: usr/local/www/vpn_ipsec_mobile.php:335 usr/local/www/guiconfig.inc:298 +#: usr/local/www/system_certmanager.php:649 usr/local/www/guiconfig.inc:297 +#: usr/local/www/system_certmanager.php:650 usr/local/www/guiconfig.inc:294 +#: usr/local/www/guiconfig.inc:301 +msgid "create" +msgstr "crie" + +#: usr/local/www/halt.php:52 usr/local/www/halt.php:61 +msgid "The system is halting now. This may take one minute." +msgstr "O sistema está desligando agora. Isso pode levar um minuto." + +#: usr/local/www/halt.php:59 usr/local/www/halt.php:54 +msgid "Halt system" +msgstr "Desligar sistema" + +#: usr/local/www/halt.php:67 +msgid "Are you sure you want to halt the system?" +msgstr "Você tem certeza que deseja desligar o sistema?" + +#: usr/local/www/index.php:115 usr/local/www/index.php:126 +#: usr/local/www/index.php:129 +msgid "Widget configuration has been changed." +msgstr "Configuração de componente foi modificada." + +#: usr/local/www/index.php:172 usr/local/www/index.php:183 +#: usr/local/www/index.php:186 +#, php-format +msgid "Welcome to %s!\n" +msgstr "Bem-vindo ao %s!\n" + +#: usr/local/www/index.php:173 usr/local/www/index.php:184 +#: usr/local/www/index.php:187 +msgid "One moment while we start the initial setup wizard." +msgstr "Um minuto enquanto iniciamos o wizard de instalação inicial." + +#: usr/local/www/index.php:174 usr/local/www/index.php:185 +#: usr/local/www/index.php:188 +msgid "Embedded platform users: Please be patient, the wizard takes a little longer to run than the normal GUI." +msgstr "Usuários de plataformas embutidas: Por favor, seja paciente, o wizard leva um tempo a maior para executar do que uma GUI normal." + +#: usr/local/www/index.php:175 usr/local/www/index.php:186 +#: usr/local/www/index.php:189 +#, php-format +msgid "To bypass the wizard, click on the %s logo on the initial page." +msgstr "Para evitar o wizard, clique no logo %s na página inicial." + +#: usr/local/www/index.php:454 usr/local/www/index.php:446 +#: usr/local/www/index.php:463 usr/local/www/index.php:468 +#: usr/local/www/index.php:465 +msgid "Status: Dashboard" +msgstr "Status: Dashboard" + +#: usr/local/www/index.php:486 usr/local/www/index.php:478 +#: usr/local/www/index.php:490 usr/local/www/index.php:494 +#: usr/local/www/index.php:491 +msgid "Available Widgets" +msgstr "Componentes Disponíveis" + +#: usr/local/www/index.php:524 usr/local/www/index.php:516 +#: usr/local/www/index.php:528 usr/local/www/index.php:531 +msgid "Welcome to the Dashboard page" +msgstr "Bem-vindo à página do Painel" + +#: usr/local/www/index.php:532 usr/local/www/index.php:524 +#: usr/local/www/index.php:536 usr/local/www/index.php:538 +#: usr/local/www/index.php:535 +msgid "This page allows you to customize the information you want to be displayed!" +msgstr "Essa página permite que você customize a informação que você quer exibir!" + +#: usr/local/www/index.php:533 usr/local/www/index.php:525 +#: usr/local/www/index.php:537 usr/local/www/index.php:539 +#: usr/local/www/index.php:536 +msgid "To get started click the" +msgstr "Para iniciar, clique no" + +#: usr/local/www/index.php:533 usr/local/www/index.php:525 +#: usr/local/www/index.php:537 usr/local/www/index.php:539 +#: usr/local/www/index.php:536 +msgid "icon to add widgets." +msgstr "para adicionar componentes." + +#: usr/local/www/index.php:535 usr/local/www/index.php:527 +#: usr/local/www/index.php:539 usr/local/www/index.php:541 +#: usr/local/www/index.php:538 +msgid "You can move any widget around by clicking and dragging the title." +msgstr "Você pode mover qualquer componente clicando e arrastando o seu título." + +#: usr/local/www/index.php:541 usr/local/www/index.php:534 +#: usr/local/www/index.php:546 usr/local/www/index.php:548 +#: usr/local/www/index.php:545 +msgid "Click here to add widgets" +msgstr "Clique aqui para adicionar componentes" + +#: usr/local/www/index.php:543 usr/local/www/index.php:536 +#: usr/local/www/index.php:548 usr/local/www/index.php:550 +#: usr/local/www/index.php:547 +msgid "Click here for help" +msgstr "Clique aqui para receber ajuda" + +#: usr/local/www/index.php:547 usr/local/www/index.php:540 +#: usr/local/www/index.php:552 usr/local/www/index.php:554 +#: usr/local/www/index.php:551 +msgid "Save Settings" +msgstr "Salvar Configurações" + +#: usr/local/www/index.php:699 usr/local/www/index.php:692 +#: usr/local/www/index.php:704 usr/local/www/index.php:701 +msgid "Loading selected widget" +msgstr "Carregando componente selecionado" + +#: usr/local/www/interfaces.php:186 usr/local/www/interfaces.php:184 +#: usr/local/www/interfaces.php:185 +#, php-format +msgid "Sorry, an alias with the name %s already exists." +msgstr "Lamento, um alias com o nome %s já existe." + +#: usr/local/www/interfaces.php:327 usr/local/www/interfaces.php:355 +#: usr/local/www/interfaces.php:352 usr/local/www/interfaces.php:350 +#: usr/local/www/interfaces.php:351 usr/local/www/interfaces.php:353 +msgid "You have already applied your settings!" +msgstr "Você já aplicou suas configurações!" + +#: usr/local/www/interfaces.php:407 usr/local/www/interfaces.php:443 +#: usr/local/www/interfaces.php:440 usr/local/www/interfaces.php:428 +#: usr/local/www/interfaces.php:433 usr/local/www/interfaces.php:429 +#: usr/local/www/interfaces.php:432 +msgid "An interface with the specified description already exists." +msgstr "Uma interface com a descrição especificada já existe." + +#: usr/local/www/interfaces.php:413 usr/local/www/interfaces.php:449 +#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:434 +#: usr/local/www/interfaces.php:439 usr/local/www/interfaces.php:435 +#: usr/local/www/interfaces.php:438 +msgid "The DHCP Server is active on this interface and it can be used only with a static IP configuration. Please disable the DHCP Server service on this interface first, then change the interface configuration." +msgstr "O Servidor DHCP está ativo nessa interface e pode ser usado somente com uma configuração de IP estática. Por favor, desabilite o serviço do Servidor DHCP nessa interface primeiro, então modifique a configuração de interface." + +#: usr/local/www/interfaces.php:415 usr/local/www/interfaces.php:451 +#: usr/local/www/interfaces.php:448 usr/local/www/interfaces.php:436 +#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:437 +#: usr/local/www/interfaces.php:440 +msgid "The DHCP6 Server is active on this interface and it can be used only with a static IPv6 configuration. Please disable the DHCPv6 Server service on this interface first, then change the interface configuration." +msgstr "O Servidor DHCP6 está ativo nessa interface e pode ser usado somente com uma configuração de IPv6 estática. Por favor, desabilite o serviço do Servidor DHCPv6 nessa interface primeiro, então modifique a configuração de interface." + +#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:1364 +#: usr/local/www/status_interfaces.php:192 +#: usr/local/www/status_interfaces.php:266 usr/local/www/interfaces.php:456 +#: usr/local/www/interfaces.php:1468 usr/local/www/status_interfaces.php:269 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:1456 +#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:1469 +#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:1514 +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:1508 +#: usr/local/www/interfaces.php:445 usr/local/www/interfaces.php:1521 +msgid "IPv4 address" +msgstr "Endereço IPv4" + +#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:456 usr/local/www/interfaces.php:509 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:494 +#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:499 +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:495 +#: usr/local/www/interfaces.php:445 usr/local/www/interfaces.php:498 +msgid "Subnet bit count" +msgstr "Contador de bit de subrede" + +#: usr/local/www/interfaces.php:427 usr/local/www/interfaces.php:480 +msgid "This interface is referenced by VIPs please delete those before setting the interface to 'none' configuration." +msgstr "Essa interface é referenciada por VIPs, por favor apague-os antes de configurar a interface para 'nenhuma' configuração." + +#: usr/local/www/interfaces.php:432 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:521 +#: usr/local/www/interfaces.php:531 usr/local/www/interfaces.php:541 +#: usr/local/www/interfaces.php:546 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:518 usr/local/www/interfaces.php:528 +#: usr/local/www/interfaces.php:538 usr/local/www/interfaces.php:543 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:526 +#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:511 +#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:533 +#: usr/local/www/interfaces.php:454 usr/local/www/interfaces.php:507 +#: usr/local/www/interfaces.php:519 usr/local/www/interfaces.php:529 +#: usr/local/www/interfaces.php:534 usr/local/www/interfaces.php:457 +#: usr/local/www/interfaces.php:510 usr/local/www/interfaces.php:522 +#: usr/local/www/interfaces.php:532 usr/local/www/interfaces.php:537 +#, php-format +msgid "You have to reassign the interface to be able to configure as %s." +msgstr "Você precisa reassociar a interface para ser capaz de configurar como %s." + +#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1748 +#: usr/local/www/interfaces.php:472 usr/local/www/interfaces.php:1926 +#: usr/local/www/interfaces.php:469 usr/local/www/interfaces.php:1914 +#: usr/local/www/interfaces.php:457 usr/local/www/interfaces.php:1938 +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:1984 +#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:1972 +#: usr/local/www/interfaces.php:461 usr/local/www/interfaces.php:2008 +msgid "Modem Port" +msgstr "Porta do Modem" + +#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1736 +#: usr/local/www/interfaces_ppps_edit.php:182 +#: usr/local/www/interfaces_ppps_edit.php:523 usr/local/www/interfaces.php:472 +#: usr/local/www/interfaces.php:1914 +#: usr/local/www/interfaces_ppps_edit.php:524 usr/local/www/interfaces.php:469 +#: usr/local/www/interfaces.php:1902 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:530 usr/local/www/interfaces.php:457 +#: usr/local/www/interfaces.php:1926 usr/local/www/interfaces.php:462 +#: usr/local/www/interfaces.php:1972 +#: usr/local/www/interfaces_ppps_edit.php:528 usr/local/www/interfaces.php:458 +#: usr/local/www/interfaces.php:1960 usr/local/www/interfaces.php:461 +#: usr/local/www/interfaces.php:1996 +msgid "Phone Number" +msgstr "Número de Telefone" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445 +#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:466 usr/local/www/interfaces.php:468 +#: usr/local/www/interfaces.php:471 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:470 +msgid "PPPoE username" +msgstr "Nome do Usuário PPPoE" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445 +#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:466 usr/local/www/interfaces.php:468 +#: usr/local/www/interfaces.php:471 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:470 +msgid "PPPoE password" +msgstr "Senha PPPoE" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452 +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:1807 +#: usr/local/www/interfaces.php:1926 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498 +#: usr/local/www/interfaces.php:1985 usr/local/www/interfaces.php:2104 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1973 +#: usr/local/www/interfaces.php:2092 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:2000 usr/local/www/interfaces.php:2122 +#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:2046 +#: usr/local/www/interfaces.php:2168 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:2035 usr/local/www/interfaces.php:2157 +#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:477 +#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:2071 +#: usr/local/www/interfaces.php:2193 +msgid "Dial on demand" +msgstr "Discar sob demanda" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452 +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:464 +#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:477 +#: usr/local/www/interfaces.php:487 +msgid "Idle timeout value" +msgstr "Valor de tempo ocioso" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:480 +msgid "PPTP username" +msgstr "Nome do Usuário PPTP" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:480 +msgid "PPTP password" +msgstr "Senha PPTP" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:480 +msgid "PPTP local IP address" +msgstr "Endereço IP local PPTP" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:480 +msgid "PPTP subnet" +msgstr "Subrede PPTP" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474 +#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:480 +msgid "PPTP remote IP address" +msgstr "Endereço IP remoto PPTP" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488 +#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:490 +msgid "L2TP username" +msgstr "Nome do Usuário L2TP" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488 +#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:490 +msgid "L2TP password" +msgstr "Senha L2TP" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488 +#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484 +#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:490 +msgid "L2TP remote IP address" +msgstr "Endereço IP remoto L2TP" + +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1470 +#: usr/local/www/status_interfaces.php:216 usr/local/www/diag_ndp.php:129 +#: usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcpv6_edit.php:198 +#: usr/local/www/status_dhcpv6_leases.php:359 +#: usr/local/www/services_dhcpv6_edit.php:201 +#: usr/local/www/status_interfaces.php:297 +#: usr/local/www/status_dhcpv6_leases.php:403 usr/local/www/interfaces.php:509 +#: usr/local/www/interfaces.php:1576 usr/local/www/services_dhcpv6.php:899 +#: usr/local/www/services_dhcpv6_edit.php:200 +#: usr/local/www/status_interfaces.php:300 +#: usr/local/www/status_dhcpv6_leases.php:404 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:1564 usr/local/www/services_dhcpv6.php:830 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/services_dhcpv6_edit.php:203 +#: usr/local/www/services_dhcpv6.php:851 usr/local/www/interfaces.php:494 +#: usr/local/www/interfaces.php:1574 usr/local/www/interfaces.php:499 +#: usr/local/www/interfaces.php:1620 usr/local/www/interfaces.php:495 +#: usr/local/www/interfaces.php:1613 usr/local/www/interfaces.php:498 +#: usr/local/www/interfaces.php:1626 +msgid "IPv6 address" +msgstr "Endereço IPv6" + +#: usr/local/www/interfaces.php:493 usr/local/www/interfaces.php:563 +#: usr/local/www/interfaces.php:560 usr/local/www/interfaces.php:550 +#: usr/local/www/interfaces.php:557 usr/local/www/interfaces.php:553 +#: usr/local/www/interfaces.php:556 +msgid "A valid IPv4 address must be specified." +msgstr "Um endereço de IPv4 válido de ser especificado." + +#: usr/local/www/interfaces.php:495 usr/local/www/services_dhcpv6_edit.php:123 +#: usr/local/www/services_dhcpv6_edit.php:125 usr/local/www/interfaces.php:565 +#: usr/local/www/interfaces.php:562 usr/local/www/services_dhcpv6_edit.php:128 +#: usr/local/www/interfaces.php:574 usr/local/www/interfaces.php:570 +#: usr/local/www/interfaces.php:573 +msgid "A valid IPv6 address must be specified." +msgstr "Um endereço de IPv6 válido de ser especificado." + +#: usr/local/www/interfaces.php:497 usr/local/www/interfaces.php:499 +#: usr/local/www/interfaces.php:567 usr/local/www/interfaces.php:569 +#: usr/local/www/interfaces.php:564 usr/local/www/interfaces.php:566 +#: usr/local/www/interfaces.php:579 usr/local/www/interfaces.php:581 +#: usr/local/www/interfaces.php:590 usr/local/www/interfaces.php:592 +#: usr/local/www/interfaces.php:586 usr/local/www/interfaces.php:588 +#: usr/local/www/interfaces.php:589 usr/local/www/interfaces.php:591 +msgid "A valid subnet bit count must be specified." +msgstr "Um contador de bit de subrede válido deve ser especificado." + +#: usr/local/www/interfaces.php:501 usr/local/www/interfaces.php:571 +#: usr/local/www/interfaces.php:568 usr/local/www/interfaces.php:583 +#: usr/local/www/interfaces.php:594 usr/local/www/interfaces.php:590 +#: usr/local/www/interfaces.php:593 +msgid "A valid alias IP address must be specified." +msgstr "Um alias de endereço IP válido deve ser especificado." + +#: usr/local/www/interfaces.php:503 usr/local/www/interfaces.php:573 +#: usr/local/www/interfaces.php:570 usr/local/www/interfaces.php:585 +#: usr/local/www/interfaces.php:596 usr/local/www/interfaces.php:592 +#: usr/local/www/interfaces.php:595 +msgid "A valid alias subnet bit count must be specified." +msgstr "Um alias de contador de bit de subrede válido deve ser especificado." + +#: usr/local/www/interfaces.php:517 usr/local/www/system_routes_edit.php:103 +#: usr/local/www/system_routes_edit.php:104 usr/local/www/interfaces.php:587 +#: usr/local/www/interfaces.php:584 usr/local/www/interfaces.php:599 +#: usr/local/www/system_routes_edit.php:107 usr/local/www/interfaces.php:610 +#: usr/local/www/interfaces.php:606 usr/local/www/system_routes_edit.php:109 +#: usr/local/www/interfaces.php:611 +msgid "A valid gateway must be specified." +msgstr "Um gateway válido deve ser especificado." + +#: usr/local/www/interfaces.php:521 usr/local/www/interfaces.php:591 +#: usr/local/www/interfaces.php:588 usr/local/www/interfaces.php:603 +#: usr/local/www/interfaces.php:614 usr/local/www/interfaces.php:610 +#: usr/local/www/interfaces.php:615 +msgid "The service name contains invalid characters." +msgstr "O nome do serviço contém caracteres inválidos." + +#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:539 +#: usr/local/www/interfaces_ppps_edit.php:217 usr/local/www/interfaces.php:593 +#: usr/local/www/interfaces.php:609 usr/local/www/interfaces.php:590 +#: usr/local/www/interfaces.php:606 usr/local/www/interfaces_ppps_edit.php:223 +#: usr/local/www/interfaces.php:605 usr/local/www/interfaces.php:621 +#: usr/local/www/interfaces.php:616 usr/local/www/interfaces.php:632 +#: usr/local/www/interfaces.php:612 usr/local/www/interfaces.php:628 +#: usr/local/www/interfaces.php:617 usr/local/www/interfaces.php:633 +msgid "The idle timeout value must be an integer." +msgstr "O valor do tempo ocioso deve ser um inteiro." + +#: usr/local/www/interfaces.php:526 usr/local/www/interfaces_ppps_edit.php:220 +#: usr/local/www/interfaces.php:596 usr/local/www/interfaces.php:593 +#: usr/local/www/interfaces_ppps_edit.php:226 usr/local/www/interfaces.php:608 +#: usr/local/www/interfaces.php:619 usr/local/www/interfaces.php:615 +#: usr/local/www/interfaces.php:620 +msgid "A valid PPPoE reset hour must be specified (0-23)." +msgstr "Uma hora de reinicialização do PPPoE válida deve ser especificada (0-23)." + +#: usr/local/www/interfaces.php:529 usr/local/www/interfaces_ppps_edit.php:223 +#: usr/local/www/interfaces.php:599 usr/local/www/interfaces.php:596 +#: usr/local/www/interfaces_ppps_edit.php:229 usr/local/www/interfaces.php:611 +#: usr/local/www/interfaces.php:622 usr/local/www/interfaces.php:618 +#: usr/local/www/interfaces.php:623 +msgid "A valid PPPoE reset minute must be specified (0-59)." +msgstr "Minutos de reinicialização do PPPoE válidos deve ser especificado (0-59)." + +#: usr/local/www/interfaces.php:531 usr/local/www/interfaces_ppps_edit.php:225 +#: usr/local/www/interfaces.php:601 usr/local/www/interfaces.php:598 +#: usr/local/www/interfaces_ppps_edit.php:231 usr/local/www/interfaces.php:613 +#: usr/local/www/interfaces.php:624 usr/local/www/interfaces.php:620 +#: usr/local/www/interfaces.php:625 +msgid "A valid PPPoE reset date must be specified (mm/dd/yyyy)." +msgstr "Uma data de reinicialização do PPPoE válida deve ser especificada (mm/dd/yyyy)." + +#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:603 +#: usr/local/www/interfaces.php:600 usr/local/www/interfaces.php:615 +#: usr/local/www/interfaces.php:626 usr/local/www/interfaces.php:622 +#: usr/local/www/interfaces.php:627 +msgid "A valid PPTP local IP address must be specified." +msgstr "Um endereço de IP local PPTP válido deve ser especificado." + +#: usr/local/www/interfaces.php:535 usr/local/www/interfaces.php:605 +#: usr/local/www/interfaces.php:602 usr/local/www/interfaces.php:617 +#: usr/local/www/interfaces.php:628 usr/local/www/interfaces.php:624 +#: usr/local/www/interfaces.php:629 +msgid "A valid PPTP subnet bit count must be specified." +msgstr "Um contador de bit de subrede PPTP deve ser especificado." + +#: usr/local/www/interfaces.php:537 usr/local/www/interfaces.php:607 +#: usr/local/www/interfaces.php:604 usr/local/www/interfaces.php:619 +#: usr/local/www/interfaces.php:630 usr/local/www/interfaces.php:626 +#: usr/local/www/interfaces.php:631 +msgid "A valid PPTP remote IP address must be specified." +msgstr "Um endereço IP remoto PPTP válido deve ser especificado." + +#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:613 +#: usr/local/www/interfaces.php:610 usr/local/www/interfaces.php:625 +#: usr/local/www/interfaces.php:637 usr/local/www/interfaces.php:633 +#: usr/local/www/interfaces.php:638 +msgid "The MTU must be greater than 576 bytes." +msgstr "O MTU deve ser maior que 576 bytes." + +#: usr/local/www/interfaces.php:545 usr/local/www/interfaces.php:615 +#: usr/local/www/interfaces.php:612 usr/local/www/interfaces.php:627 +#: usr/local/www/interfaces.php:668 usr/local/www/interfaces.php:664 +#: usr/local/www/interfaces.php:669 +msgid "The MSS must be greater than 576 bytes." +msgstr "O MSS deve ser maior que 576 bytes." + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2164 +#: usr/local/www/load_balancer_pool.php:132 usr/local/www/vpn_ipsec.php:283 +#: usr/local/www/vpn_ipsec.php:457 usr/local/www/interfaces_wireless.php:107 +#: usr/local/www/interfaces_wireless_edit.php:84 +#: usr/local/www/interfaces_wireless_edit.php:176 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:187 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/status_lb_pool.php:131 usr/local/www/vpn_ipsec_phase2.php:404 +#: usr/local/www/vpn_ipsec.php:294 usr/local/www/vpn_ipsec.php:468 +#: usr/local/www/system_advanced_misc.php:334 +#: usr/local/www/vpn_ipsec_phase2.php:430 usr/local/www/interfaces.php:619 +#: usr/local/www/interfaces.php:2342 +#: usr/local/www/load_balancer_pool_edit.php:195 +#: usr/local/www/load_balancer_pool.php:133 usr/local/www/vpn_ipsec.php:293 +#: usr/local/www/vpn_ipsec.php:467 usr/local/www/system_advanced_misc.php:353 +#: usr/local/www/interfaces_wireless.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:496 usr/local/www/interfaces.php:616 +#: usr/local/www/interfaces.php:2330 +#: usr/local/www/load_balancer_pool_edit.php:193 +#: usr/local/www/load_balancer_pool.php:131 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:178 +#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:473 +#: usr/local/www/interfaces_wireless.php:110 +#: usr/local/www/vpn_ipsec_phase2.php:518 usr/local/www/interfaces.php:631 +#: usr/local/www/interfaces.php:2360 usr/local/www/interfaces.php:672 +#: usr/local/www/interfaces.php:2406 usr/local/www/interfaces.php:668 +#: usr/local/www/interfaces.php:2395 usr/local/www/interfaces.php:673 +#: usr/local/www/interfaces.php:2431 +msgid "Mode" +msgstr "Modo" + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2174 +#: usr/local/www/status_interfaces.php:265 +#: usr/local/www/status_interfaces.php:362 usr/local/www/interfaces.php:622 +#: usr/local/www/interfaces.php:2352 usr/local/www/status_interfaces.php:365 +#: usr/local/www/interfaces.php:619 usr/local/www/interfaces.php:2340 +#: usr/local/www/interfaces.php:634 usr/local/www/interfaces.php:2370 +#: usr/local/www/interfaces.php:675 usr/local/www/interfaces.php:2416 +#: usr/local/www/interfaces.php:671 usr/local/www/interfaces.php:2405 +#: usr/local/www/interfaces.php:676 usr/local/www/interfaces.php:2441 +msgid "SSID" +msgstr "SSID" + +#: usr/local/www/interfaces.php:583 usr/local/www/interfaces.php:657 +#: usr/local/www/interfaces.php:654 usr/local/www/interfaces.php:669 +#: usr/local/www/interfaces.php:710 usr/local/www/interfaces.php:706 +#: usr/local/www/interfaces.php:711 +msgid "Invalid WEP key size. Sizes should be 40 (64) bit keys or 104 (128) bit." +msgstr "Tamanho de chave WEP inválido. Tamanhos devem ser de 40 (64) chaves de bit ou 104 (128) bits." + +#: usr/local/www/interfaces.php:591 usr/local/www/interfaces.php:665 +#: usr/local/www/interfaces.php:662 usr/local/www/interfaces.php:677 +#: usr/local/www/interfaces.php:718 usr/local/www/interfaces.php:714 +#: usr/local/www/interfaces.php:719 +msgid "The length of the passphrase should be between 8 and 63 characters." +msgstr "O tamanho da frase secreta deve ser entre 8 e 63 caracteres." + +#: usr/local/www/interfaces.php:659 +#, php-format +msgid "Interface %s dynamic gateway" +msgstr "Interface %s gateway dinâmico" + +#: usr/local/www/interfaces.php:1004 usr/local/www/interfaces.php:1090 +#: usr/local/www/interfaces.php:1078 usr/local/www/interfaces.php:1092 +#: usr/local/www/interfaces.php:1134 usr/local/www/interfaces.php:1129 +#: usr/local/www/interfaces.php:1142 +#, php-format +msgid "Unable to change mode to %s. You may already have the maximum number of wireless clones supported in this mode." +msgstr "Incapaz de mudar o modo para %s. Você já deve ter o número máximo de clones sem fio suportados para esse modo." + +#: usr/local/www/interfaces.php:1032 usr/local/www/interfaces.php:1118 +#: usr/local/www/interfaces.php:1106 usr/local/www/interfaces.php:1120 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157 +#: usr/local/www/interfaces.php:1170 +msgid "Static IPv4" +msgstr "IPv4 Estático" + +#: usr/local/www/interfaces.php:1032 usr/local/www/vpn_pppoe.php:86 +#: usr/local/www/status_interfaces.php:109 +#: usr/local/www/status_interfaces.php:127 usr/local/www/interfaces.php:1118 +#: usr/local/www/status_interfaces.php:130 usr/local/www/interfaces.php:1106 +#: usr/local/www/vpn_pppoe.php:87 usr/local/www/interfaces.php:1120 +#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157 +#: usr/local/www/interfaces.php:1170 +msgid "PPPoE" +msgstr "PPPoE" + +#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:124 +#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:166 +#: usr/local/www/status_interfaces.php:142 usr/local/www/interfaces.php:1118 +#: usr/local/www/fbegin.inc:174 usr/local/www/status_interfaces.php:145 +#: usr/local/www/interfaces.php:1106 usr/local/www/fbegin.inc:165 +#: usr/local/www/interfaces.php:1120 usr/local/www/interfaces.php:1162 +#: usr/local/www/interfaces.php:1157 usr/local/www/interfaces.php:1170 +msgid "PPTP" +msgstr "PPTP" + +#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:139 +#: usr/local/www/fbegin.inc:150 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:167 +#: usr/local/www/status_interfaces.php:157 usr/local/www/interfaces.php:1118 +#: usr/local/www/fbegin.inc:175 usr/local/www/status_interfaces.php:160 +#: usr/local/www/interfaces.php:1106 usr/local/www/fbegin.inc:166 +#: usr/local/www/interfaces.php:1120 usr/local/www/interfaces.php:1162 +#: usr/local/www/interfaces.php:1157 usr/local/www/interfaces.php:1170 +msgid "L2TP" +msgstr "L2TP" + +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121 +#: usr/local/www/interfaces.php:1163 usr/local/www/interfaces.php:1158 +#: usr/local/www/interfaces.php:1171 +msgid "Static IPv6" +msgstr "IPv6 Estático" + +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121 +#: usr/local/www/interfaces.php:1163 usr/local/www/interfaces.php:1158 +#: usr/local/www/interfaces.php:1171 +msgid "DHCP6" +msgstr "DHCP6" + +#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326 +#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327 +#: usr/local/www/interfaces.php:1369 usr/local/www/interfaces.php:1364 +#: usr/local/www/interfaces.php:1377 +#, php-format +msgid "The %s configuration has been changed." +msgstr "A configuração %s foi modificada." + +#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326 +#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327 +#: usr/local/www/interfaces.php:1369 usr/local/www/interfaces.php:1364 +#: usr/local/www/interfaces.php:1377 +msgid "Don't forget to adjust the DHCP Server range if needed after applying." +msgstr "Não esqueça de ajustar o intervalo do Servidor DHCP se necessário após aplicação." + +#: usr/local/www/interfaces.php:1231 usr/local/www/interfaces.php:1335 +#: usr/local/www/interfaces.php:1323 usr/local/www/interfaces.php:1336 +#: usr/local/www/interfaces.php:1378 usr/local/www/interfaces.php:1373 +#: usr/local/www/interfaces.php:1386 +msgid "General configuration" +msgstr "Configuração Geral" + +#: usr/local/www/interfaces.php:1237 usr/local/www/interfaces.php:1341 +#: usr/local/www/interfaces.php:1329 usr/local/www/interfaces.php:1342 +#: usr/local/www/interfaces.php:1384 usr/local/www/interfaces.php:1379 +#: usr/local/www/interfaces.php:1392 +msgid "Enable Interface" +msgstr "Habilitar Interface" + +#: usr/local/www/interfaces.php:1247 usr/local/www/interfaces.php:1351 +#: usr/local/www/interfaces.php:1339 usr/local/www/interfaces.php:1352 +#: usr/local/www/interfaces.php:1394 usr/local/www/interfaces.php:1389 +#: usr/local/www/interfaces.php:1402 +msgid "Enter a description (name) for the interface here." +msgstr "Informe a descrição (nome) para a interface aqui." + +#: usr/local/www/interfaces.php:1251 usr/local/www/interfaces.php:1355 +#: usr/local/www/interfaces.php:1343 usr/local/www/interfaces.php:1356 +#: usr/local/www/interfaces.php:1398 usr/local/www/interfaces.php:1393 +#: usr/local/www/interfaces.php:1406 +msgid "IPv4 Configuration Type" +msgstr "Tipo de Configuração IPv4" + +#: usr/local/www/interfaces.php:1267 usr/local/www/interfaces.php:1371 +#: usr/local/www/interfaces.php:1359 usr/local/www/interfaces.php:1372 +#: usr/local/www/interfaces.php:1414 usr/local/www/interfaces.php:1409 +#: usr/local/www/interfaces.php:1422 +msgid "IPv6 Configuration Type" +msgstr "Tipo de Configuração IPv6" + +#: usr/local/www/interfaces.php:1292 usr/local/www/interfaces.php:1396 +#: usr/local/www/interfaces.php:1384 usr/local/www/interfaces.php:1397 +#: usr/local/www/interfaces.php:1439 usr/local/www/interfaces.php:1434 +#: usr/local/www/interfaces.php:1447 +msgid "Insert my local MAC address" +msgstr "Insira meu endereço MAC local" + +#: usr/local/www/interfaces.php:1295 usr/local/www/interfaces.php:1399 +#: usr/local/www/interfaces.php:1387 usr/local/www/interfaces.php:1400 +#: usr/local/www/interfaces.php:1442 usr/local/www/interfaces.php:1437 +#: usr/local/www/interfaces.php:1450 +msgid "This field can be used to modify (\"spoof\") the MAC address of this interface" +msgstr "Esse campo pode ser usado para modificar (\"spoof\") o endereço MAC da interface WAN" + +#: usr/local/www/interfaces.php:1297 usr/local/www/interfaces.php:1401 +#: usr/local/www/interfaces.php:1389 usr/local/www/interfaces.php:1402 +#: usr/local/www/interfaces.php:1444 usr/local/www/interfaces.php:1439 +#: usr/local/www/interfaces.php:1452 +msgid "(may be required with some cable connections)" +msgstr "(pode ser requerido em algumas conexões a cabo)" + +#: usr/local/www/interfaces.php:1298 usr/local/www/interfaces.php:1402 +#: usr/local/www/interfaces.php:1390 usr/local/www/interfaces.php:1403 +#: usr/local/www/interfaces.php:1445 usr/local/www/interfaces.php:1440 +#: usr/local/www/interfaces.php:1453 +msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx or leave blank" +msgstr "Informe o endereço MAC no seguinte formato: xx:xx:xx:xx:xx:xx ou deixe em branco" + +#: usr/local/www/interfaces.php:1303 +#: usr/local/www/interfaces_ppps_edit.php:757 +#: usr/local/www/interfaces.php:1407 +#: usr/local/www/interfaces_ppps_edit.php:758 +#: usr/local/www/interfaces.php:1395 +#: usr/local/www/interfaces_ppps_edit.php:764 +#: usr/local/www/interfaces.php:1408 usr/local/www/interfaces.php:1450 +#: usr/local/www/interfaces_ppps_edit.php:761 +#: usr/local/www/interfaces.php:1445 usr/local/www/interfaces.php:1458 +msgid "MTU" +msgstr "MTU" + +#: usr/local/www/interfaces.php:1307 +msgid "If you leave this field blank, the adapter's default MTU will be used. This is typically 1500 bytes but can vary on some hardware." +msgstr "Se você deixar essa campo em branco, o MTU padrão do adaptador será usado. Isso tem normalmente 1500 bytes, mas pode variar em alguns hardwares." + +#: usr/local/www/interfaces.php:1312 usr/local/www/interfaces.php:1416 +#: usr/local/www/interfaces.php:1404 usr/local/www/interfaces.php:1417 +#: usr/local/www/interfaces.php:1461 usr/local/www/interfaces.php:1456 +#: usr/local/www/interfaces.php:1469 +msgid "MSS" +msgstr "MSS" + +#: usr/local/www/interfaces.php:1316 usr/local/www/interfaces.php:1420 +#: usr/local/www/interfaces.php:1408 usr/local/www/interfaces.php:1421 +#: usr/local/www/interfaces.php:1465 usr/local/www/interfaces.php:1460 +#: usr/local/www/interfaces.php:1473 +msgid "If you enter a value in this field, then MSS clamping for TCP connections to the value entered above minus 40 (TCP/IP header size) will be in effect." +msgstr "Se você informar um valor nesse campo, então o MSS clamping para as conexões TCP para o valor informado acima menos 40 (tamanho do cabeçalho TCP/IP) terá efeito." + +#: usr/local/www/interfaces.php:1325 usr/local/www/interfaces.php:1429 +#: usr/local/www/interfaces.php:1417 usr/local/www/interfaces.php:1430 +#: usr/local/www/interfaces.php:1474 usr/local/www/interfaces.php:1469 +#: usr/local/www/interfaces.php:1482 +msgid "Speed and duplex" +msgstr "Protocolo Speed e Duplex" + +#: usr/local/www/interfaces.php:1346 usr/local/www/interfaces.php:1450 +#: usr/local/www/interfaces.php:1438 usr/local/www/interfaces.php:1451 +#: usr/local/www/interfaces.php:1495 usr/local/www/interfaces.php:1490 +#: usr/local/www/interfaces.php:1503 +msgid "Here you can explicitly set speed and duplex mode for this interface. WARNING: You MUST leave this set to autoselect (automatically negotiate speed) unless the port this interface connects to has its speed and duplex forced." +msgstr "Aqui voce pode definir explicitamente o modo que a placa irá trabalhar, Speed ou Duplex. Aviso: Caso deixe a opção autoselect(a negociação será feita automaticamente) ao menos que a porta onde se conecta a interfece tenha o Speed e Duplex forçado." + +#: usr/local/www/interfaces.php:1361 usr/local/www/interfaces.php:1465 +#: usr/local/www/interfaces.php:1453 usr/local/www/interfaces.php:1466 +#: usr/local/www/interfaces.php:1511 usr/local/www/interfaces.php:1505 +#: usr/local/www/interfaces.php:1518 +msgid "Static IPv4 configuration" +msgstr "Configuração IPv4 estático" + +#: usr/local/www/interfaces.php:1400 usr/local/www/interfaces.php:1506 +#: usr/local/www/system_routes_edit.php:212 +#: usr/local/www/system_routes_edit.php:244 usr/local/www/interfaces.php:1504 +#: usr/local/www/interfaces.php:1612 usr/local/www/system_routes_edit.php:245 +#: usr/local/www/interfaces.php:1492 usr/local/www/interfaces.php:1600 +#: usr/local/www/interfaces.php:1505 usr/local/www/interfaces.php:1610 +#: usr/local/www/system_routes_edit.php:272 usr/local/www/interfaces.php:1550 +#: usr/local/www/interfaces.php:1656 usr/local/www/system_routes_edit.php:274 +#: usr/local/www/interfaces.php:1544 usr/local/www/interfaces.php:1649 +#: usr/local/www/system_routes_edit.php:276 usr/local/www/interfaces.php:1557 +#: usr/local/www/interfaces.php:1662 +msgid "add a new one." +msgstr "adicionar uma nova." + +#: usr/local/www/interfaces.php:1403 usr/local/www/interfaces.php:1507 +#: usr/local/www/interfaces.php:1495 usr/local/www/interfaces.php:1508 +#: usr/local/www/interfaces.php:1553 usr/local/www/interfaces.php:1547 +#: usr/local/www/interfaces.php:1560 +msgid "If this interface is an Internet connection, select an existing Gateway from the list or add one using the link above" +msgstr "Se essa interface é uma conexão com Internet, selecione um Gateway existente da lista ou adicione um link abaixo" + +#: usr/local/www/interfaces.php:1417 usr/local/www/system_routes_edit.php:224 +#: usr/local/www/system_routes_edit.php:256 usr/local/www/interfaces.php:1521 +#: usr/local/www/system_routes_edit.php:257 usr/local/www/interfaces.php:1509 +#: usr/local/www/interfaces.php:1522 usr/local/www/system_routes_edit.php:283 +#: usr/local/www/interfaces.php:1567 usr/local/www/system_routes_edit.php:287 +#: usr/local/www/interfaces.php:1561 usr/local/www/system_routes_edit.php:289 +#: usr/local/www/interfaces.php:1574 +msgid "Add new gateway:" +msgstr "Adicionar novo gateway:" + +#: usr/local/www/interfaces.php:1425 usr/local/www/interfaces.php:1529 +#: usr/local/www/interfaces.php:1517 usr/local/www/interfaces.php:1530 +#: usr/local/www/interfaces.php:1575 usr/local/www/interfaces.php:1569 +#: usr/local/www/interfaces.php:1582 +msgid "Default gateway:" +msgstr "Gateway padrão:" + +#: usr/local/www/interfaces.php:1428 usr/local/www/system_routes_edit.php:240 +#: usr/local/www/system_routes_edit.php:272 usr/local/www/interfaces.php:1532 +#: usr/local/www/system_routes_edit.php:273 usr/local/www/interfaces.php:1520 +#: usr/local/www/interfaces.php:1533 usr/local/www/system_routes_edit.php:299 +#: usr/local/www/interfaces.php:1578 usr/local/www/system_routes_edit.php:305 +#: usr/local/www/interfaces.php:1572 usr/local/www/system_routes_edit.php:307 +#: usr/local/www/interfaces.php:1585 +msgid "Gateway Name:" +msgstr "Nome do Gateway:" + +#: usr/local/www/interfaces.php:1431 usr/local/www/interfaces.php:1535 +#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1536 +#: usr/local/www/interfaces.php:1581 usr/local/www/interfaces.php:1575 +#: usr/local/www/interfaces.php:1588 +msgid "Gateway IPv4:" +msgstr "IPv4 do Gateway:" + +#: usr/local/www/interfaces.php:1434 usr/local/www/interfaces.php:1540 +#: usr/local/www/system_routes_edit.php:246 +#: usr/local/www/system_routes_edit.php:278 usr/local/www/interfaces.php:1538 +#: usr/local/www/interfaces.php:1646 usr/local/www/system_routes_edit.php:279 +#: usr/local/www/interfaces.php:1526 usr/local/www/interfaces.php:1634 +#: usr/local/www/interfaces.php:1539 usr/local/www/interfaces.php:1644 +#: usr/local/www/system_routes_edit.php:305 usr/local/www/interfaces.php:1584 +#: usr/local/www/interfaces.php:1690 usr/local/www/system_routes_edit.php:311 +#: usr/local/www/interfaces.php:1578 usr/local/www/interfaces.php:1683 +#: usr/local/www/system_routes_edit.php:313 usr/local/www/interfaces.php:1591 +#: usr/local/www/interfaces.php:1696 +msgid "Description:" +msgstr "Descrição:" + +#: usr/local/www/interfaces.php:1442 usr/local/www/interfaces.php:1548 +#: usr/local/www/system_routes_edit.php:254 +#: usr/local/www/system_routes_edit.php:286 usr/local/www/interfaces.php:1654 +#: usr/local/www/system_routes_edit.php:287 usr/local/www/interfaces.php:1536 +#: usr/local/www/interfaces.php:1642 usr/local/www/interfaces.php:1546 +#: usr/local/www/interfaces.php:1651 usr/local/www/system_routes_edit.php:312 +#: usr/local/www/interfaces.php:1591 usr/local/www/interfaces.php:1697 +#: usr/local/www/system_routes_edit.php:318 usr/local/www/interfaces.php:1585 +#: usr/local/www/interfaces.php:1690 usr/local/www/system_routes_edit.php:320 +#: usr/local/www/interfaces.php:1598 usr/local/www/interfaces.php:1703 +msgid "Save Gateway" +msgstr "Salvar Gateway" + +#: usr/local/www/interfaces.php:1467 usr/local/www/interfaces.php:1573 +#: usr/local/www/interfaces.php:1561 usr/local/www/interfaces.php:1571 +#: usr/local/www/interfaces.php:1617 usr/local/www/interfaces.php:1610 +#: usr/local/www/interfaces.php:1623 +msgid "Static IPv6 configuration" +msgstr "Configuração IPv6 estático" + +#: usr/local/www/interfaces.php:1488 usr/local/www/status_interfaces.php:231 +#: usr/local/www/status_interfaces.php:312 usr/local/www/interfaces.php:1594 +#: usr/local/www/status_interfaces.php:315 usr/local/www/interfaces.php:1582 +#: usr/local/www/interfaces.php:1592 usr/local/www/interfaces.php:1638 +#: usr/local/www/interfaces.php:1631 usr/local/www/interfaces.php:1644 +msgid "Gateway IPv6" +msgstr "IPv6 do Gateway" + +#: usr/local/www/interfaces.php:1509 usr/local/www/interfaces.php:1615 +#: usr/local/www/interfaces.php:1603 usr/local/www/interfaces.php:1613 +#: usr/local/www/interfaces.php:1659 usr/local/www/interfaces.php:1652 +#: usr/local/www/interfaces.php:1665 +msgid "If this interface is an Internet connection, select an existing Gateway from the list or add a new one using the link above" +msgstr "Se essa interface é uma conexão com Internet, selecione um Gateway existente da lista ou adicione um novo na linha abaixo" + +#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1629 +#: usr/local/www/interfaces.php:1617 usr/local/www/interfaces.php:1627 +#: usr/local/www/interfaces.php:1673 usr/local/www/interfaces.php:1666 +#: usr/local/www/interfaces.php:1679 +msgid "Add new v6 gateway:" +msgstr "Adicionar novo v6 gateway:" + +#: usr/local/www/interfaces.php:1531 usr/local/www/interfaces.php:1637 +#: usr/local/www/interfaces.php:1625 usr/local/www/interfaces.php:1635 +#: usr/local/www/interfaces.php:1681 usr/local/www/interfaces.php:1674 +#: usr/local/www/interfaces.php:1687 +msgid "Default v6 gateway:" +msgstr "Gateway v6 padrão:" + +#: usr/local/www/interfaces.php:1534 usr/local/www/interfaces.php:1640 +#: usr/local/www/interfaces.php:1628 usr/local/www/interfaces.php:1638 +#: usr/local/www/interfaces.php:1684 usr/local/www/interfaces.php:1677 +#: usr/local/www/interfaces.php:1690 +msgid "Gateway Name IPv6:" +msgstr "Nome do Gateway IPv6:" + +#: usr/local/www/interfaces.php:1537 usr/local/www/interfaces.php:1643 +#: usr/local/www/interfaces.php:1631 usr/local/www/interfaces.php:1641 +#: usr/local/www/interfaces.php:1687 usr/local/www/interfaces.php:1680 +#: usr/local/www/interfaces.php:1693 +msgid "Gateway IPv6:" +msgstr "IPv6 do Gateway:" + +#: usr/local/www/interfaces.php:1564 +msgid "DHCPv6 Prefix Delegation ID" +msgstr "ID da Delegação de Prefixo DHCPv6" + +#: usr/local/www/interfaces.php:1588 +msgid "This ID sets the delegated DHCP-PD prefix number which will be used to setup the interface." +msgstr "Este ID define o numero da delegação DHCP-PD que será usada para configurar a interface." + +#: usr/local/www/interfaces.php:1598 usr/local/www/interfaces.php:1676 +#: usr/local/www/interfaces.php:1664 usr/local/www/interfaces.php:1722 +#: usr/local/www/interfaces.php:1714 usr/local/www/interfaces.php:1727 +msgid "DHCP client configuration" +msgstr "Configuração do cliente DHCP" + +#: usr/local/www/interfaces.php:1602 usr/local/www/interfaces.php:1680 +#: usr/local/www/interfaces.php:1668 usr/local/www/interfaces.php:1726 +#: usr/local/www/interfaces.php:1718 usr/local/www/interfaces.php:1731 +msgid "Enable DHCP+" +msgstr "Habilitar DHCP+" + +#: usr/local/www/interfaces.php:1605 usr/local/www/interfaces.php:1683 +#: usr/local/www/interfaces.php:1671 usr/local/www/interfaces.php:1729 +#: usr/local/www/interfaces.php:1721 usr/local/www/interfaces.php:1734 +msgid "Enable DHCP+L2TP or DHCP+PPTP." +msgstr "Habilitar DHCP+L2TP ou DHCP+PPTP." + +#: usr/local/www/interfaces.php:1607 usr/local/www/interfaces.php:1685 +#: usr/local/www/interfaces.php:1673 usr/local/www/interfaces.php:1731 +#: usr/local/www/interfaces.php:1723 usr/local/www/interfaces.php:1736 +msgid "Status changes on this interface will trigger reconfiguration (if necessary) of the associated PPTP/L2TP link." +msgstr "Mudanças de status nesta interface irão disparar a reconfiguração (se necessário) do link PPTP/L2TP associado." + +#: usr/local/www/interfaces.php:1616 usr/local/www/interfaces.php:1694 +#: usr/local/www/interfaces.php:1682 usr/local/www/interfaces.php:1740 +#: usr/local/www/interfaces.php:1732 usr/local/www/interfaces.php:1745 +msgid "The value in this field is sent as the DHCP client identifier and hostname when requesting a DHCP lease. Some ISPs may require this (for client identification)." +msgstr "O valor desse campo é enviado como o identificador e nome de host do cliente DHCP quando requisitar uma concessão DHCP. Alguns ISPs podem requerer isso (para identificação do cliente)." + +#: usr/local/www/interfaces.php:1622 usr/local/www/interfaces.php:1700 +#: usr/local/www/interfaces.php:1688 usr/local/www/interfaces.php:1746 +#: usr/local/www/interfaces.php:1738 usr/local/www/interfaces.php:1751 +msgid "Alias IPv4 address" +msgstr "Alias de Endereço IPv4" + +#: usr/local/www/interfaces.php:1636 usr/local/www/interfaces.php:1714 +#: usr/local/www/interfaces.php:1702 usr/local/www/interfaces.php:1760 +#: usr/local/www/interfaces.php:1752 usr/local/www/interfaces.php:1765 +msgid "The value in this field is used as a fixed alias IPv4 address by the DHCP client." +msgstr "O valor desse campo é usado como um alias de endereço IPv4 fixo pelo cliente DHCP." + +#: usr/local/www/interfaces.php:1647 usr/local/www/interfaces.php:1725 +#: usr/local/www/interfaces.php:1713 usr/local/www/interfaces.php:1728 +#: usr/local/www/interfaces.php:1774 usr/local/www/interfaces.php:1766 +#: usr/local/www/interfaces.php:1788 +msgid "DHCP6 client configuration" +msgstr "Configuração do cliente DHCPv6" + +#: usr/local/www/interfaces.php:1650 usr/local/www/interfaces.php:1729 +#: usr/local/www/interfaces.php:1717 usr/local/www/interfaces.php:1732 +#: usr/local/www/interfaces.php:1778 usr/local/www/interfaces.php:1770 +#: usr/local/www/interfaces.php:1792 +msgid "DHCPv6 Unique Identifier (DUID)" +msgstr "Identificador Unico do DHCPv6 (DUID)" + +#: usr/local/www/interfaces.php:1654 usr/local/www/interfaces.php:1733 +#: usr/local/www/interfaces.php:1721 usr/local/www/interfaces.php:1736 +#: usr/local/www/interfaces.php:1782 usr/local/www/interfaces.php:1774 +#: usr/local/www/interfaces.php:1796 +msgid "The value in this field is sent as the DHCPv6 client identifier when requesting a DHCPv6 lease." +msgstr "O valor neste campo é enviado como o identificador de cliente DHCPv6 ao solicitar um DHCPv6 lease." + +#: usr/local/www/interfaces.php:1659 usr/local/www/interfaces.php:1738 +#: usr/local/www/interfaces.php:1726 usr/local/www/interfaces.php:1741 +#: usr/local/www/interfaces.php:1787 usr/local/www/interfaces.php:1779 +#: usr/local/www/interfaces.php:1801 +#, php-format +msgid "The current DUID is: '%s'" +msgstr "O DUID atual é: '%s'" + +#: usr/local/www/interfaces.php:1665 usr/local/www/interfaces.php:1745 +#: usr/local/www/interfaces.php:1733 usr/local/www/interfaces.php:1748 +#: usr/local/www/interfaces.php:1794 usr/local/www/interfaces.php:1786 +#: usr/local/www/interfaces.php:1822 +msgid "DHCPv6 Prefix Delegation size" +msgstr "Tamanho do Prefixo DHCPv6 delegado" + +#: usr/local/www/interfaces.php:1678 usr/local/www/interfaces.php:1758 +#: usr/local/www/interfaces.php:1746 usr/local/www/interfaces.php:1761 +#: usr/local/www/interfaces.php:1807 usr/local/www/interfaces.php:1799 +#: usr/local/www/interfaces.php:1835 +msgid "The value in this field is the delegated prefix length provided by the DHCPv6 server. Normally specified by the ISP." +msgstr "O valor neste campo é o comprimento do prefixo delegada fornecidos pelo servidor DHCPv6. Normalmente especificado pelo ISP." + +#: usr/local/www/interfaces.php:1689 usr/local/www/interfaces.php:1867 +#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1879 +#: usr/local/www/interfaces.php:1925 usr/local/www/interfaces.php:1913 +#: usr/local/www/interfaces.php:1949 +msgid "PPP configuration" +msgstr "Configuração PPP" + +#: usr/local/www/interfaces.php:1692 +#: usr/local/www/interfaces_ppps_edit.php:478 +#: usr/local/www/interfaces.php:1870 +#: usr/local/www/interfaces_ppps_edit.php:479 +#: usr/local/www/interfaces.php:1858 +#: usr/local/www/interfaces_ppps_edit.php:485 +#: usr/local/www/interfaces.php:1882 usr/local/www/interfaces.php:1928 +#: usr/local/www/interfaces_ppps_edit.php:483 +#: usr/local/www/interfaces.php:1916 usr/local/www/interfaces.php:1952 +msgid "Service Provider" +msgstr "Fornecedor de Serviço" + +#: usr/local/www/interfaces.php:1696 +#: usr/local/www/interfaces_ppps_edit.php:482 +#: usr/local/www/interfaces.php:1874 +#: usr/local/www/interfaces_ppps_edit.php:483 +#: usr/local/www/interfaces.php:1862 +#: usr/local/www/interfaces_ppps_edit.php:489 +#: usr/local/www/interfaces.php:1886 usr/local/www/interfaces.php:1932 +#: usr/local/www/interfaces_ppps_edit.php:487 +#: usr/local/www/interfaces.php:1920 usr/local/www/interfaces.php:1956 +msgid "Country:" +msgstr "País:" + +#: usr/local/www/interfaces.php:1704 +#: usr/local/www/interfaces_ppps_edit.php:490 +#: usr/local/www/interfaces.php:1882 +#: usr/local/www/interfaces_ppps_edit.php:491 +#: usr/local/www/interfaces.php:1870 +#: usr/local/www/interfaces_ppps_edit.php:497 +#: usr/local/www/interfaces.php:1894 usr/local/www/interfaces.php:1940 +#: usr/local/www/interfaces_ppps_edit.php:495 +#: usr/local/www/interfaces.php:1928 usr/local/www/interfaces.php:1964 +msgid "Provider:" +msgstr "Fornecedor:" + +#: usr/local/www/interfaces.php:1712 +#: usr/local/www/interfaces_ppps_edit.php:498 +#: usr/local/www/interfaces.php:1890 +#: usr/local/www/interfaces_ppps_edit.php:499 +#: usr/local/www/interfaces.php:1878 +#: usr/local/www/interfaces_ppps_edit.php:505 +#: usr/local/www/interfaces.php:1902 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces_ppps_edit.php:503 +#: usr/local/www/interfaces.php:1936 usr/local/www/interfaces.php:1972 +msgid "Plan:" +msgstr "Plano:" + +#: usr/local/www/interfaces.php:1720 +#: usr/local/www/interfaces_ppps_edit.php:506 +#: usr/local/www/interfaces.php:1898 +#: usr/local/www/interfaces_ppps_edit.php:507 +#: usr/local/www/interfaces.php:1886 +#: usr/local/www/interfaces_ppps_edit.php:513 +#: usr/local/www/interfaces.php:1910 usr/local/www/interfaces.php:1956 +#: usr/local/www/interfaces_ppps_edit.php:511 +#: usr/local/www/interfaces.php:1944 usr/local/www/interfaces.php:1980 +msgid "Select to fill in data for your service provider." +msgstr "Selecione para preencher dados para seu fornecedor de serviços." + +#: usr/local/www/interfaces.php:1742 +#: usr/local/www/interfaces_ppps_edit.php:530 +#: usr/local/www/interfaces.php:1920 +#: usr/local/www/interfaces_ppps_edit.php:531 +#: usr/local/www/interfaces.php:1908 +#: usr/local/www/interfaces_ppps_edit.php:537 +#: usr/local/www/interfaces.php:1932 usr/local/www/interfaces.php:1978 +#: usr/local/www/interfaces_ppps_edit.php:535 +#: usr/local/www/interfaces.php:1966 usr/local/www/interfaces.php:2002 +msgid "Access Point Name (APN)" +msgstr "Nome do Ponto de Acesso (APN)" + +#: usr/local/www/interfaces.php:1766 usr/local/www/interfaces.php:1944 +#: usr/local/www/interfaces.php:1932 usr/local/www/interfaces.php:1956 +#: usr/local/www/interfaces.php:2002 usr/local/www/interfaces.php:1991 +#: usr/local/www/interfaces.php:2027 +msgid "Advanced PPP" +msgstr "PPP Avançado" + +#: usr/local/www/interfaces.php:1769 usr/local/www/interfaces.php:1774 +#: usr/local/www/interfaces.php:1875 usr/local/www/interfaces.php:1880 +#: usr/local/www/interfaces.php:1943 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces.php:1947 usr/local/www/interfaces.php:1952 +#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2058 +#: usr/local/www/interfaces.php:2121 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:1935 usr/local/www/interfaces.php:1940 +#: usr/local/www/interfaces.php:2041 usr/local/www/interfaces.php:2046 +#: usr/local/www/interfaces.php:2109 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:1959 usr/local/www/interfaces.php:1964 +#: usr/local/www/interfaces.php:2068 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces.php:2139 usr/local/www/interfaces.php:2144 +#: usr/local/www/interfaces.php:2005 usr/local/www/interfaces.php:2010 +#: usr/local/www/interfaces.php:2119 usr/local/www/interfaces.php:2185 +#: usr/local/www/interfaces.php:2190 usr/local/www/interfaces.php:1994 +#: usr/local/www/interfaces.php:1999 usr/local/www/interfaces.php:2103 +#: usr/local/www/interfaces.php:2108 usr/local/www/interfaces.php:2174 +#: usr/local/www/interfaces.php:2179 usr/local/www/interfaces.php:2030 +#: usr/local/www/interfaces.php:2035 usr/local/www/interfaces.php:2210 +#: usr/local/www/interfaces.php:2215 +msgid "Click here" +msgstr "Clique aqui" + +#: usr/local/www/interfaces.php:1770 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces.php:1936 usr/local/www/interfaces.php:1960 +#: usr/local/www/interfaces.php:2006 usr/local/www/interfaces.php:1995 +#: usr/local/www/interfaces.php:2031 +msgid "to edit PPP configuration." +msgstr "para editar configurações PPP." + +#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1953 +#: usr/local/www/interfaces.php:1941 usr/local/www/interfaces.php:1965 +#: usr/local/www/interfaces.php:2011 usr/local/www/interfaces.php:2000 +#: usr/local/www/interfaces.php:2036 +msgid "to create a PPP configuration." +msgstr "para criar uma configuração PPP." + +#: usr/local/www/interfaces.php:1786 usr/local/www/interfaces.php:1964 +#: usr/local/www/interfaces.php:1952 usr/local/www/interfaces.php:1979 +#: usr/local/www/interfaces.php:2025 usr/local/www/interfaces.php:2014 +#: usr/local/www/interfaces.php:2050 +msgid "PPPoE configuration" +msgstr "Configuração PPPoE" + +#: usr/local/www/interfaces.php:1801 +#: usr/local/www/interfaces_ppps_edit.php:589 +#: usr/local/www/interfaces.php:1979 +#: usr/local/www/interfaces_ppps_edit.php:590 +#: usr/local/www/interfaces.php:1967 +#: usr/local/www/interfaces_ppps_edit.php:596 +#: usr/local/www/interfaces.php:1994 usr/local/www/interfaces.php:2040 +#: usr/local/www/interfaces_ppps_edit.php:594 +#: usr/local/www/interfaces.php:2029 usr/local/www/interfaces.php:2065 +msgid "Service name" +msgstr "Nome do serviço" + +#: usr/local/www/interfaces.php:1803 usr/local/www/interfaces.php:1981 +#: usr/local/www/interfaces.php:1969 usr/local/www/interfaces.php:1996 +#: usr/local/www/interfaces.php:2042 usr/local/www/interfaces.php:2031 +#: usr/local/www/interfaces.php:2067 +msgid "Hint: this field can usually be left empty" +msgstr "Dica: esse campo é normalmente deixado vazio" + +#: usr/local/www/interfaces.php:1810 usr/local/www/interfaces.php:1929 +#: usr/local/www/interfaces.php:1988 usr/local/www/interfaces.php:2107 +#: usr/local/www/interfaces.php:1976 usr/local/www/interfaces.php:2095 +#: usr/local/www/interfaces.php:2003 usr/local/www/interfaces.php:2125 +#: usr/local/www/interfaces.php:2049 usr/local/www/interfaces.php:2171 +#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2160 +#: usr/local/www/interfaces.php:2074 usr/local/www/interfaces.php:2196 +msgid "Enable Dial-On-Demand mode" +msgstr "Habilitar modo de Discagem Sob Demanda" + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1989 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2004 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2039 +#: usr/local/www/interfaces.php:2075 +msgid "This option causes the interface to operate in dial-on-demand mode, allowing you to have a " +msgstr "Essa opção faz com que a interface opere em modo de Discagem Sob Demanda, permitindo que você tenha uma " + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930 +#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096 +#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2172 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161 +#: usr/local/www/interfaces.php:2075 usr/local/www/interfaces.php:2197 +msgid "virtual full time" +msgstr "tempo virtual completo" + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930 +#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096 +#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2172 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161 +#: usr/local/www/interfaces.php:2075 usr/local/www/interfaces.php:2197 +msgid "connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected." +msgstr "conexão. A interface é configurada, mas a conexão atual do link é atrasada até que tráfego de saída qualificado seja detectado." + +#: usr/local/www/interfaces.php:1815 usr/local/www/interfaces.php:1934 +#: usr/local/www/services_captiveportal.php:465 +#: usr/local/www/services_captiveportal.php:470 +#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2112 +#: usr/local/www/services_captiveportal.php:468 +#: usr/local/www/interfaces.php:1981 usr/local/www/interfaces.php:2100 +#: usr/local/www/interfaces.php:2008 usr/local/www/interfaces.php:2130 +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/interfaces.php:2054 usr/local/www/interfaces.php:2176 +#: usr/local/www/interfaces.php:2043 usr/local/www/interfaces.php:2165 +#: usr/local/www/interfaces.php:2079 usr/local/www/interfaces.php:2201 +msgid "Idle timeout" +msgstr "Tempo ocioso" + +#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936 +#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:1983 usr/local/www/interfaces.php:2102 +#: usr/local/www/interfaces.php:2010 usr/local/www/interfaces.php:2132 +#: usr/local/www/interfaces.php:2056 usr/local/www/interfaces.php:2178 +#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167 +#: usr/local/www/interfaces.php:2081 usr/local/www/interfaces.php:2203 +msgid "If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature." +msgstr "Se nenhum pacote de saída qualificado for transmitido no número de segundos especificado, a conexão é cancelada. Um valor de tempo de ocioso igual a zero desabilita essa funcionalidade." + +#: usr/local/www/interfaces.php:1821 +#: usr/local/www/interfaces_ppps_edit.php:596 +#: usr/local/www/interfaces.php:1999 +#: usr/local/www/interfaces_ppps_edit.php:597 +#: usr/local/www/interfaces.php:1987 +#: usr/local/www/interfaces_ppps_edit.php:603 +#: usr/local/www/interfaces.php:2014 usr/local/www/interfaces.php:2060 +#: usr/local/www/interfaces_ppps_edit.php:601 +#: usr/local/www/interfaces.php:2049 usr/local/www/interfaces.php:2085 +msgid "Periodic reset" +msgstr "Reinicialização periódica" + +#: usr/local/www/interfaces.php:1829 +#: usr/local/www/interfaces_ppps_edit.php:604 +#: usr/local/www/status_rrd_graph.php:359 +#: usr/local/www/status_rrd_graph_settings.php:158 +#: usr/local/www/status_rrd_graph_settings.php:159 +#: usr/local/www/status_rrd_graph.php:407 usr/local/www/interfaces.php:2007 +#: usr/local/www/interfaces_ppps_edit.php:605 +#: usr/local/www/interfaces.php:1995 +#: usr/local/www/interfaces_ppps_edit.php:611 +#: usr/local/www/status_rrd_graph.php:432 usr/local/www/interfaces.php:2022 +#: usr/local/www/interfaces.php:2068 +#: usr/local/www/interfaces_ppps_edit.php:609 +#: usr/local/www/interfaces.php:2057 usr/local/www/interfaces.php:2093 +msgid "Custom" +msgstr "Personalizar" + +#: usr/local/www/interfaces.php:1830 +#: usr/local/www/interfaces_ppps_edit.php:605 +#: usr/local/www/interfaces.php:2008 +#: usr/local/www/interfaces_ppps_edit.php:606 +#: usr/local/www/interfaces.php:1996 +#: usr/local/www/interfaces_ppps_edit.php:612 +#: usr/local/www/interfaces.php:2023 usr/local/www/interfaces.php:2069 +#: usr/local/www/interfaces_ppps_edit.php:610 +#: usr/local/www/interfaces.php:2058 usr/local/www/interfaces.php:2094 +msgid "Pre-Set" +msgstr "Pre-Config" + +#: usr/local/www/interfaces.php:1831 +#: usr/local/www/interfaces_ppps_edit.php:606 +#: usr/local/www/interfaces.php:2009 +#: usr/local/www/interfaces_ppps_edit.php:607 +#: usr/local/www/interfaces.php:1997 +#: usr/local/www/interfaces_ppps_edit.php:613 +#: usr/local/www/interfaces.php:2024 usr/local/www/interfaces.php:2070 +#: usr/local/www/interfaces_ppps_edit.php:611 +#: usr/local/www/interfaces.php:2059 usr/local/www/interfaces.php:2095 +msgid "Select a reset timing type" +msgstr "Selecione o tipo de tempo de reinicialização" + +#: usr/local/www/interfaces.php:1839 +#: usr/local/www/interfaces_ppps_edit.php:614 +#: usr/local/www/interfaces.php:2017 +#: usr/local/www/interfaces_ppps_edit.php:615 +#: usr/local/www/interfaces.php:2005 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2032 usr/local/www/interfaces.php:2078 +#: usr/local/www/interfaces_ppps_edit.php:619 +#: usr/local/www/interfaces.php:2067 usr/local/www/interfaces.php:2103 +msgid "hour (0-23)" +msgstr "hora (0-23)" + +#: usr/local/www/interfaces.php:1841 +#: usr/local/www/interfaces_ppps_edit.php:616 +#: usr/local/www/interfaces.php:2019 +#: usr/local/www/interfaces_ppps_edit.php:617 +#: usr/local/www/interfaces.php:2007 +#: usr/local/www/interfaces_ppps_edit.php:623 +#: usr/local/www/interfaces.php:2034 usr/local/www/interfaces.php:2080 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2069 usr/local/www/interfaces.php:2105 +msgid "minute (0-59)" +msgstr "minutos (0-59)" + +#: usr/local/www/interfaces.php:1843 +#: usr/local/www/interfaces_ppps_edit.php:618 +#: usr/local/www/interfaces.php:2021 +#: usr/local/www/interfaces_ppps_edit.php:619 +#: usr/local/www/interfaces.php:2009 +#: usr/local/www/interfaces_ppps_edit.php:625 +#: usr/local/www/interfaces.php:2036 usr/local/www/interfaces.php:2082 +#: usr/local/www/interfaces_ppps_edit.php:623 +#: usr/local/www/interfaces.php:2071 usr/local/www/interfaces.php:2107 +msgid "reset at a specific date (mm/dd/yyyy)" +msgstr "reinicie em uma data específica (mm/dd/yyyy)" + +#: usr/local/www/interfaces.php:1846 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2024 +#: usr/local/www/interfaces_ppps_edit.php:622 +#: usr/local/www/interfaces.php:2012 +#: usr/local/www/interfaces_ppps_edit.php:628 +#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2085 +#: usr/local/www/interfaces_ppps_edit.php:626 +#: usr/local/www/interfaces.php:2074 usr/local/www/interfaces.php:2110 +msgid "If you leave the date field empty, the reset will be executed each day at the time you did specify using the minutes and hour field." +msgstr "Se você deixar o campo de data vazio, a reinicialização será executada todos os dias no horário que especificou usando os campos de minutos e hora." + +#: usr/local/www/interfaces.php:1854 +#: usr/local/www/interfaces_ppps_edit.php:629 +#: usr/local/www/interfaces.php:2032 +#: usr/local/www/interfaces_ppps_edit.php:630 +#: usr/local/www/interfaces.php:2020 +#: usr/local/www/interfaces_ppps_edit.php:636 +#: usr/local/www/interfaces.php:2047 usr/local/www/interfaces.php:2093 +#: usr/local/www/interfaces_ppps_edit.php:634 +#: usr/local/www/interfaces.php:2082 usr/local/www/interfaces.php:2118 +msgid "reset at each month ('0 0 1 * *')" +msgstr "reiniciar a cada mês ('0 0 1 * *')" + +#: usr/local/www/interfaces.php:1857 +#: usr/local/www/interfaces_ppps_edit.php:632 +#: usr/local/www/interfaces.php:2035 +#: usr/local/www/interfaces_ppps_edit.php:633 +#: usr/local/www/interfaces.php:2023 +#: usr/local/www/interfaces_ppps_edit.php:639 +#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2096 +#: usr/local/www/interfaces_ppps_edit.php:637 +#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2121 +msgid "reset at each week ('0 0 * * 0')" +msgstr "reiniciar a cada semana ('0 0 * * 0')" + +#: usr/local/www/interfaces.php:1860 +#: usr/local/www/interfaces_ppps_edit.php:635 +#: usr/local/www/interfaces.php:2038 +#: usr/local/www/interfaces_ppps_edit.php:636 +#: usr/local/www/interfaces.php:2026 +#: usr/local/www/interfaces_ppps_edit.php:642 +#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2099 +#: usr/local/www/interfaces_ppps_edit.php:640 +#: usr/local/www/interfaces.php:2088 usr/local/www/interfaces.php:2124 +msgid "reset at each day ('0 0 * * *')" +msgstr "reiniciar a cada dia ('0 0 * * *')" + +#: usr/local/www/interfaces.php:1863 +#: usr/local/www/interfaces_ppps_edit.php:638 +#: usr/local/www/interfaces.php:2041 +#: usr/local/www/interfaces_ppps_edit.php:639 +#: usr/local/www/interfaces.php:2029 +#: usr/local/www/interfaces_ppps_edit.php:645 +#: usr/local/www/interfaces.php:2056 usr/local/www/interfaces.php:2102 +#: usr/local/www/interfaces_ppps_edit.php:643 +#: usr/local/www/interfaces.php:2091 usr/local/www/interfaces.php:2127 +msgid "reset at each hour ('0 * * * *')" +msgstr "reiniciar a cada hora ('0 * * * *')" + +#: usr/local/www/interfaces.php:1872 usr/local/www/interfaces.php:2050 +#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2065 +#: usr/local/www/interfaces.php:2111 usr/local/www/interfaces.php:2100 +#: usr/local/www/interfaces.php:2136 +msgid "Advanced and MLPPP" +msgstr "Avançado e MLPPP" + +#: usr/local/www/interfaces.php:1876 usr/local/www/interfaces.php:2054 +#: usr/local/www/interfaces.php:2042 usr/local/www/interfaces.php:2069 +#: usr/local/www/interfaces.php:2115 usr/local/www/interfaces.php:2104 +#: usr/local/www/interfaces.php:2140 +msgid "for additional PPPoE configuration options. Save first if you made changes." +msgstr "para opções de configuração PPPoE adicionais. Salve primeiro se você realizou mudanças." + +#: usr/local/www/interfaces.php:1881 usr/local/www/interfaces.php:2059 +#: usr/local/www/interfaces.php:2047 usr/local/www/interfaces.php:2074 +#: usr/local/www/interfaces.php:2120 usr/local/www/interfaces.php:2109 +#: usr/local/www/interfaces.php:2145 +msgid "for advanced PPPoE configuration options and MLPPP configuration." +msgstr "para opções de configuração PPPoE avançadas e configurações MLPPP." + +#: usr/local/www/interfaces.php:1892 usr/local/www/interfaces.php:2070 +#: usr/local/www/interfaces.php:2058 usr/local/www/interfaces.php:2088 +#: usr/local/www/interfaces.php:2134 usr/local/www/interfaces.php:2123 +#: usr/local/www/interfaces.php:2159 +msgid "PPTP/L2TP configuration" +msgstr "Configuração PPTP/L2TP" + +#: usr/local/www/interfaces.php:1907 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2103 usr/local/www/interfaces.php:2149 +#: usr/local/www/interfaces.php:2138 usr/local/www/interfaces.php:2174 +msgid "Local IP address" +msgstr "Endereço IP Local" + +#: usr/local/www/interfaces.php:1920 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces.php:2098 usr/local/www/interfaces.php:2086 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2116 usr/local/www/interfaces.php:2162 +#: usr/local/www/interfaces.php:2151 usr/local/www/interfaces.php:2187 +msgid "Remote IP address" +msgstr "Endereço IP Remoto" + +#: usr/local/www/interfaces.php:1930 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:2096 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:2172 usr/local/www/interfaces.php:2161 +#: usr/local/www/interfaces.php:2197 +msgid "This option causes the interface to operate in dial-on-demand mode, allowing you to have a" +msgstr "Essa opção faz com que a interface opere no modo discagem sob demanda, permitindo que você tenha uma" + +#: usr/local/www/interfaces.php:1944 usr/local/www/interfaces.php:2122 +#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2140 +#: usr/local/www/interfaces.php:2186 usr/local/www/interfaces.php:2175 +#: usr/local/www/interfaces.php:2211 +msgid "for additional PPTP and L2TP configuration options. Save first if you made changes." +msgstr "para opções de configuração de PPTP e L2TP adicionais. Salve primeiro se você fez alterações." + +#: usr/local/www/interfaces.php:1949 usr/local/www/interfaces.php:2127 +#: usr/local/www/interfaces.php:2115 usr/local/www/interfaces.php:2145 +#: usr/local/www/interfaces.php:2191 usr/local/www/interfaces.php:2180 +#: usr/local/www/interfaces.php:2216 +msgid "for advanced PPTP and L2TP configuration options" +msgstr "para opções de configuração de PPTP e L2TP avançadas" + +#: usr/local/www/interfaces.php:1964 usr/local/www/interfaces.php:2142 +#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2160 +#: usr/local/www/interfaces.php:2206 usr/local/www/interfaces.php:2195 +#: usr/local/www/interfaces.php:2231 +msgid "Common wireless configuration - Settings apply to all wireless networks on" +msgstr "Configurações sem fio comuns - Configurações aplicam-se para todas as redes sem fio em" + +#: usr/local/www/interfaces.php:1967 usr/local/www/interfaces.php:2145 +#: usr/local/www/interfaces.php:2133 usr/local/www/interfaces.php:2163 +#: usr/local/www/interfaces.php:2209 usr/local/www/interfaces.php:2198 +#: usr/local/www/interfaces.php:2234 +msgid "Persist common settings" +msgstr "Persistir configurações comuns" + +#: usr/local/www/interfaces.php:1970 usr/local/www/interfaces.php:2148 +#: usr/local/www/interfaces.php:2136 usr/local/www/interfaces.php:2166 +#: usr/local/www/interfaces.php:2212 usr/local/www/interfaces.php:2201 +#: usr/local/www/interfaces.php:2237 +msgid "Enabling this preserves the common wireless configuration through interface deletions and reassignments." +msgstr "Habilitando isso preserva-se as configurações sem fio comuns durante remoções e atribuições de interface." + +#: usr/local/www/interfaces.php:1974 usr/local/www/interfaces.php:2152 +#: usr/local/www/interfaces.php:2140 usr/local/www/interfaces.php:2170 +#: usr/local/www/interfaces.php:2216 usr/local/www/interfaces.php:2205 +#: usr/local/www/interfaces.php:2241 +msgid "Standard" +msgstr "Padrão" + +#: usr/local/www/interfaces.php:1990 usr/local/www/interfaces.php:2168 +#: usr/local/www/interfaces.php:2156 usr/local/www/interfaces.php:2186 +#: usr/local/www/interfaces.php:2232 usr/local/www/interfaces.php:2221 +#: usr/local/www/interfaces.php:2257 +msgid "Protection Mode" +msgstr "Modo de Proteção" + +#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2171 +#: usr/local/www/interfaces.php:2159 usr/local/www/interfaces.php:2189 +#: usr/local/www/interfaces.php:2235 usr/local/www/interfaces.php:2224 +#: usr/local/www/interfaces.php:2260 +msgid "Protection mode off" +msgstr "Modo de Proteção desligado" + +#: usr/local/www/interfaces.php:1994 usr/local/www/interfaces.php:2172 +#: usr/local/www/interfaces.php:2160 usr/local/www/interfaces.php:2190 +#: usr/local/www/interfaces.php:2236 usr/local/www/interfaces.php:2225 +#: usr/local/www/interfaces.php:2261 +msgid "Protection mode CTS to self" +msgstr "Modo de Proteção CTS para si mesmo" + +#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2173 +#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2191 +#: usr/local/www/interfaces.php:2237 usr/local/www/interfaces.php:2226 +#: usr/local/www/interfaces.php:2262 +msgid "Protection mode RTS and CTS" +msgstr "Modo de Proteção RTS e CTS" + +#: usr/local/www/interfaces.php:1998 usr/local/www/interfaces.php:2176 +#: usr/local/www/interfaces.php:2164 usr/local/www/interfaces.php:2194 +#: usr/local/www/interfaces.php:2240 usr/local/www/interfaces.php:2229 +#: usr/local/www/interfaces.php:2265 +msgid "For IEEE 802.11g, use the specified technique for protecting OFDM frames in a mixed 11b/11g network." +msgstr "Para IEEE 802.11g, use a técnica especificada para proteger frames OFDM em uma rede 11b/11g." + +#: usr/local/www/interfaces.php:2006 usr/local/www/interfaces.php:2184 +#: usr/local/www/interfaces.php:2172 usr/local/www/interfaces.php:2202 +#: usr/local/www/interfaces.php:2248 usr/local/www/interfaces.php:2237 +#: usr/local/www/interfaces.php:2273 +msgid "Transmit power" +msgstr "Transmitir energia" + +#: usr/local/www/interfaces.php:2019 usr/local/www/interfaces.php:2197 +#: usr/local/www/interfaces.php:2185 usr/local/www/interfaces.php:2215 +#: usr/local/www/interfaces.php:2261 usr/local/www/interfaces.php:2250 +#: usr/local/www/interfaces.php:2286 +msgid "Note: Typically only a few discreet power settings are available and the driver will use the setting closest to the specified value. Not all adapters support changing the transmit power setting." +msgstr "Nota: Tipicamente somente poucas configurações discretas de energia estão disponíveis e o driver irá usar as configurações mais próximas ao valor especificado. Nem todos os adaptadores suportam mudanças nas configurações de transmissão de energia." + +#: usr/local/www/interfaces.php:2023 usr/local/www/status_interfaces.php:258 +#: usr/local/www/status_interfaces.php:355 usr/local/www/interfaces.php:2201 +#: usr/local/www/status_interfaces.php:358 usr/local/www/interfaces.php:2189 +#: usr/local/www/interfaces.php:2219 usr/local/www/interfaces.php:2265 +#: usr/local/www/interfaces.php:2254 usr/local/www/interfaces.php:2290 +msgid "Channel" +msgstr "Canal" + +#: usr/local/www/interfaces.php:2026 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2204 +#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2263 +#: usr/local/www/interfaces.php:2192 usr/local/www/interfaces.php:2239 +#: usr/local/www/interfaces.php:2222 usr/local/www/interfaces.php:2269 +#: usr/local/www/interfaces.php:2281 usr/local/www/interfaces.php:2268 +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2327 +#: usr/local/www/interfaces.php:2257 usr/local/www/interfaces.php:2304 +#: usr/local/www/interfaces.php:2316 usr/local/www/interfaces.php:2293 +#: usr/local/www/interfaces.php:2340 usr/local/www/interfaces.php:2352 +msgid "Auto" +msgstr "Auto" + +#: usr/local/www/interfaces.php:2046 usr/local/www/interfaces.php:2224 +#: usr/local/www/interfaces.php:2212 usr/local/www/interfaces.php:2242 +#: usr/local/www/interfaces.php:2288 usr/local/www/interfaces.php:2277 +#: usr/local/www/interfaces.php:2313 +msgid "Legend: wireless standards - channel # (frequency @ max TX power / TX power allowed in reg. domain)" +msgstr "Legenda: padrões sem fio - canal # (frequência @ max TX power / TX power permitidos no domínio registrado)" + +#: usr/local/www/interfaces.php:2048 usr/local/www/interfaces.php:2226 +#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2244 +#: usr/local/www/interfaces.php:2290 usr/local/www/interfaces.php:2279 +#: usr/local/www/interfaces.php:2315 +msgid "Note: Not all channels may be supported by your card. Auto may override the wireless standard selected above." +msgstr "Nota: Nem todos os canais podem ser suportados pelo seu cartão. Auto pode sobrescrever os padrões sem fio selecionados acima." + +#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2231 +#: usr/local/www/interfaces.php:2219 usr/local/www/interfaces.php:2249 +#: usr/local/www/interfaces.php:2295 usr/local/www/interfaces.php:2284 +#: usr/local/www/interfaces.php:2320 +msgid "Antenna settings" +msgstr "Configurações de Antena" + +#: usr/local/www/interfaces.php:2059 usr/local/www/interfaces.php:2237 +#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2255 +#: usr/local/www/interfaces.php:2301 usr/local/www/interfaces.php:2290 +#: usr/local/www/interfaces.php:2326 +msgid "Diversity" +msgstr "Diversidade" + +#: usr/local/www/interfaces.php:2061 usr/local/www/interfaces.php:2072 +#: usr/local/www/interfaces.php:2084 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2146 +#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2250 +#: usr/local/www/interfaces.php:2262 usr/local/www/interfaces.php:2292 +#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2324 +#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2238 +#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2296 +#: usr/local/www/interfaces.php:2312 usr/local/www/diag_system_pftop.php:135 +#: usr/local/www/interfaces.php:2257 usr/local/www/interfaces.php:2268 +#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2326 +#: usr/local/www/interfaces.php:2342 usr/local/www/interfaces.php:2303 +#: usr/local/www/interfaces.php:2314 usr/local/www/interfaces.php:2356 +#: usr/local/www/interfaces.php:2372 usr/local/www/interfaces.php:2388 +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2345 +#: usr/local/www/interfaces.php:2361 usr/local/www/interfaces.php:2377 +#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2339 +#: usr/local/www/interfaces.php:2351 usr/local/www/interfaces.php:2381 +#: usr/local/www/interfaces.php:2397 usr/local/www/interfaces.php:2413 +msgid "Default" +msgstr "Padrão" + +#: usr/local/www/interfaces.php:2062 usr/local/www/vpn_pptp.php:314 +#: usr/local/www/vpn_l2tp.php:294 usr/local/www/vpn_pppoe_edit.php:362 +#: usr/local/www/interfaces.php:2240 usr/local/www/vpn_pppoe_edit.php:363 +#: usr/local/www/vpn_pptp.php:316 usr/local/www/interfaces.php:2228 +#: usr/local/www/vpn_l2tp.php:295 usr/local/www/vpn_l2tp.php:298 +#: usr/local/www/vpn_pppoe_edit.php:366 usr/local/www/vpn_pptp.php:319 +#: usr/local/www/interfaces.php:2258 usr/local/www/interfaces.php:2304 +#: usr/local/www/interfaces.php:2293 usr/local/www/interfaces.php:2329 +msgid "Off" +msgstr "Desligado" + +#: usr/local/www/interfaces.php:2063 usr/local/www/interfaces.php:2241 +#: usr/local/www/interfaces.php:2229 usr/local/www/interfaces.php:2259 +#: usr/local/www/interfaces.php:2305 usr/local/www/interfaces.php:2294 +#: usr/local/www/interfaces.php:2330 +msgid "On" +msgstr "Ligado" + +#: usr/local/www/interfaces.php:2070 usr/local/www/interfaces.php:2248 +#: usr/local/www/interfaces.php:2236 usr/local/www/interfaces.php:2266 +#: usr/local/www/interfaces.php:2312 usr/local/www/interfaces.php:2301 +#: usr/local/www/interfaces.php:2337 +msgid "Transmit antenna" +msgstr "Antena de transmissão" + +#: usr/local/www/interfaces.php:2074 usr/local/www/interfaces.php:2086 +#: usr/local/www/interfaces.php:2252 usr/local/www/interfaces.php:2264 +#: usr/local/www/interfaces.php:2240 usr/local/www/interfaces.php:2270 +#: usr/local/www/interfaces.php:2282 usr/local/www/interfaces.php:2316 +#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2305 +#: usr/local/www/interfaces.php:2317 usr/local/www/interfaces.php:2341 +#: usr/local/www/interfaces.php:2353 +msgid "#1" +msgstr "#1" + +#: usr/local/www/interfaces.php:2075 usr/local/www/interfaces.php:2087 +#: usr/local/www/interfaces.php:2253 usr/local/www/interfaces.php:2265 +#: usr/local/www/interfaces.php:2241 usr/local/www/interfaces.php:2271 +#: usr/local/www/interfaces.php:2283 usr/local/www/interfaces.php:2317 +#: usr/local/www/interfaces.php:2329 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2342 +#: usr/local/www/interfaces.php:2354 +msgid "#2" +msgstr "#2" + +#: usr/local/www/interfaces.php:2082 usr/local/www/interfaces.php:2260 +#: usr/local/www/interfaces.php:2248 usr/local/www/interfaces.php:2278 +#: usr/local/www/interfaces.php:2324 usr/local/www/interfaces.php:2313 +#: usr/local/www/interfaces.php:2349 +msgid "Receive antenna" +msgstr "Antena de recepção" + +#: usr/local/www/interfaces.php:2094 usr/local/www/interfaces.php:2272 +#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2290 +#: usr/local/www/interfaces.php:2336 usr/local/www/interfaces.php:2325 +#: usr/local/www/interfaces.php:2361 +msgid "Note: The antenna numbers do not always match up with the labels on the card." +msgstr "Nota: O número de antenas nem sempre correspondem com os rótulos no cartão." + +#: usr/local/www/interfaces.php:2100 usr/local/www/interfaces.php:2278 +#: usr/local/www/interfaces.php:2266 usr/local/www/interfaces.php:2296 +#: usr/local/www/interfaces.php:2342 usr/local/www/interfaces.php:2331 +#: usr/local/www/interfaces.php:2367 +msgid "Distance setting" +msgstr "Configuração de distância" + +#: usr/local/www/interfaces.php:2104 usr/local/www/interfaces.php:2282 +#: usr/local/www/interfaces.php:2270 usr/local/www/interfaces.php:2300 +#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2335 +#: usr/local/www/interfaces.php:2371 +msgid "Note: This field can be used to tune ACK/CTS timers to fit the distance between AP and Client" +msgstr "Nota: Esse campo pode ser usado para afinar os temporizadores ACK/CTS para ajustá-los à distância entre AP e o Cliente" + +#: usr/local/www/interfaces.php:2105 usr/local/www/interfaces.php:2283 +#: usr/local/www/interfaces.php:2271 usr/local/www/interfaces.php:2301 +#: usr/local/www/interfaces.php:2347 usr/local/www/interfaces.php:2336 +#: usr/local/www/interfaces.php:2372 +msgid "(measured in Meters and works only for Atheros based cards !)" +msgstr "(medido em Metros e funciona somente com cartões baseados em Atheros!)" + +#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2288 +#: usr/local/www/interfaces.php:2276 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2352 usr/local/www/interfaces.php:2341 +#: usr/local/www/interfaces.php:2377 +msgid "Regulatory settings" +msgstr "Configurações Regulatórias" + +#: usr/local/www/interfaces.php:2112 usr/local/www/interfaces.php:2290 +#: usr/local/www/interfaces.php:2278 usr/local/www/interfaces.php:2308 +#: usr/local/www/interfaces.php:2354 usr/local/www/interfaces.php:2343 +#: usr/local/www/interfaces.php:2379 +msgid "Regulatory domain" +msgstr "Domínio regulatório" + +#: usr/local/www/interfaces.php:2126 usr/local/www/interfaces.php:2304 +#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2322 +#: usr/local/www/interfaces.php:2368 usr/local/www/interfaces.php:2357 +#: usr/local/www/interfaces.php:2393 +msgid "Note: Some cards have a default that is not recognized and require changing the regulatory domain to one in this list for the changes to other regulatory settings to work." +msgstr "Nota: Alguns cartões tem um padrão que não é reconhecido e requerem mudanças no domínio regulatório para um dessa lista de modo que funcione." + +#: usr/local/www/interfaces.php:2128 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2294 usr/local/www/interfaces.php:2324 +#: usr/local/www/interfaces.php:2370 usr/local/www/interfaces.php:2359 +#: usr/local/www/interfaces.php:2395 +msgid "Country (listed with country code and regulatory domain)" +msgstr "País (listado com código de país e domínio regulatório)" + +#: usr/local/www/interfaces.php:2142 usr/local/www/interfaces.php:2320 +#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2338 +#: usr/local/www/interfaces.php:2384 usr/local/www/interfaces.php:2373 +#: usr/local/www/interfaces.php:2409 +msgid "Note: Any country setting other than \"Default\" will override the regulatory domain setting" +msgstr "Nota: Qualquer configuração de país que não seja a \"Padrão\" irá sobrescrever a configuração de domínio regulatório" + +#: usr/local/www/interfaces.php:2144 usr/local/www/interfaces.php:2322 +#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2340 +#: usr/local/www/interfaces.php:2386 usr/local/www/interfaces.php:2375 +#: usr/local/www/interfaces.php:2411 +msgid "Location" +msgstr "Localização" + +#: usr/local/www/interfaces.php:2147 usr/local/www/interfaces.php:2325 +#: usr/local/www/interfaces.php:2313 usr/local/www/interfaces.php:2343 +#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2378 +#: usr/local/www/interfaces.php:2414 +msgid "Indoor" +msgstr "Interior" + +#: usr/local/www/interfaces.php:2148 usr/local/www/interfaces.php:2326 +#: usr/local/www/interfaces.php:2314 usr/local/www/interfaces.php:2344 +#: usr/local/www/interfaces.php:2390 usr/local/www/interfaces.php:2379 +#: usr/local/www/interfaces.php:2415 +msgid "Outdoor" +msgstr "Exterior" + +#: usr/local/www/interfaces.php:2149 usr/local/www/interfaces.php:2327 +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2345 +#: usr/local/www/interfaces.php:2391 usr/local/www/interfaces.php:2380 +#: usr/local/www/interfaces.php:2416 +msgid "Anywhere" +msgstr "Qualquer lugar" + +#: usr/local/www/interfaces.php:2152 usr/local/www/interfaces.php:2330 +#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2348 +#: usr/local/www/interfaces.php:2394 usr/local/www/interfaces.php:2383 +#: usr/local/www/interfaces.php:2419 +msgid "These settings may affect which channels are available and the maximum transmit power allowed on those channels. Using the correct settings to comply with local regulatory requirements is recommended." +msgstr "Essas configurações devem afetar os canais que estiverem disponíveis e o máximo de energia de transmissão permitido para tais canais. Usando as configurações corretas para estar de acordo com os requisitos regulatórios locais é recomendado." + +#: usr/local/www/interfaces.php:2154 usr/local/www/interfaces.php:2332 +#: usr/local/www/interfaces.php:2320 usr/local/www/interfaces.php:2350 +#: usr/local/www/interfaces.php:2396 usr/local/www/interfaces.php:2385 +#: usr/local/www/interfaces.php:2421 +msgid "Note: All wireless networks on this interface will be temporarily brought down when changing regulatory settings. Some of the regulatory domains or country codes may not be allowed by some cards. These settings may not be able to add additional channels that are not already supported." +msgstr "Nota: Todas as redes sem fio nessa interface serão temporariamente desligadas quando houver mudanças das configurações regulatórias. Alguns domínios regulatórios ou códigos de países podem não ser permitidos em alguns cartões. Essas configuraçõe podem não ser capazes de adicionar canais adicionais que ainda não são suportados." + +#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2339 +#: usr/local/www/interfaces.php:2327 usr/local/www/interfaces.php:2357 +#: usr/local/www/interfaces.php:2403 usr/local/www/interfaces.php:2392 +#: usr/local/www/interfaces.php:2428 +msgid "Network-specific wireless configuration" +msgstr "Configuração sem fio de rede específica" + +#: usr/local/www/interfaces.php:2167 +#: usr/local/www/interfaces_wireless_edit.php:179 +#: usr/local/www/interfaces.php:2345 usr/local/www/interfaces.php:2333 +#: usr/local/www/interfaces_wireless_edit.php:181 +#: usr/local/www/interfaces.php:2363 usr/local/www/interfaces.php:2409 +#: usr/local/www/interfaces.php:2398 usr/local/www/interfaces.php:2434 +msgid "Infrastructure (BSS)" +msgstr "Infraestrutura (BSS)" + +#: usr/local/www/interfaces.php:2168 +#: usr/local/www/interfaces_wireless_edit.php:180 +#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2334 +#: usr/local/www/interfaces_wireless_edit.php:182 +#: usr/local/www/interfaces.php:2364 usr/local/www/interfaces.php:2410 +#: usr/local/www/interfaces.php:2399 usr/local/www/interfaces.php:2435 +msgid "Ad-hoc (IBSS)" +msgstr "Ad-hoc (IBSS)" + +#: usr/local/www/interfaces.php:2169 +#: usr/local/www/interfaces_wireless_edit.php:181 +#: usr/local/www/interfaces.php:2347 usr/local/www/interfaces.php:2335 +#: usr/local/www/interfaces_wireless_edit.php:183 +#: usr/local/www/interfaces.php:2365 usr/local/www/interfaces.php:2411 +#: usr/local/www/interfaces.php:2400 usr/local/www/interfaces.php:2436 +msgid "Access Point" +msgstr "Ponto de Acesso" + +#: usr/local/www/interfaces.php:2181 usr/local/www/interfaces.php:2361 +#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2379 +#: usr/local/www/interfaces.php:2425 usr/local/www/interfaces.php:2414 +#: usr/local/www/interfaces.php:2450 +msgid "Minimum wireless standard" +msgstr "Padrão mínimo sem fio" + +#: usr/local/www/interfaces.php:2184 usr/local/www/interfaces.php:2364 +#: usr/local/www/interfaces.php:2352 usr/local/www/interfaces.php:2382 +#: usr/local/www/interfaces.php:2428 usr/local/www/interfaces.php:2417 +#: usr/local/www/interfaces.php:2453 +msgid "Any" +msgstr "Qualquer" + +#: usr/local/www/interfaces.php:2186 usr/local/www/interfaces.php:2366 +#: usr/local/www/interfaces.php:2354 usr/local/www/interfaces.php:2384 +#: usr/local/www/interfaces.php:2430 usr/local/www/interfaces.php:2419 +#: usr/local/www/interfaces.php:2455 +msgid "802.11g" +msgstr "802.11g" + +#: usr/local/www/interfaces.php:2188 usr/local/www/interfaces.php:2368 +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2386 +#: usr/local/www/interfaces.php:2432 usr/local/www/interfaces.php:2421 +#: usr/local/www/interfaces.php:2457 +msgid "802.11n" +msgstr "802.11n" + +#: usr/local/www/interfaces.php:2191 usr/local/www/interfaces.php:2371 +#: usr/local/www/interfaces.php:2359 usr/local/www/interfaces.php:2389 +#: usr/local/www/interfaces.php:2435 usr/local/www/interfaces.php:2424 +#: usr/local/www/interfaces.php:2460 +msgid "When operating as an access point, allow only stations capable of the selected wireless standard to associate (stations not capable are not permitted to associate)." +msgstr "Quando operando como um ponto de acesso, permitir somente que estações capazes de operar nos padrões sem fio selecionados se associem (estações não capazes não tem permissão de se associarem)." + +#: usr/local/www/interfaces.php:2196 usr/local/www/interfaces.php:2376 +#: usr/local/www/interfaces.php:2364 usr/local/www/interfaces.php:2394 +#: usr/local/www/interfaces.php:2440 usr/local/www/interfaces.php:2429 +#: usr/local/www/interfaces.php:2465 +msgid "802.11g only" +msgstr "802.11g somente" + +#: usr/local/www/interfaces.php:2199 usr/local/www/interfaces.php:2379 +#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2397 +#: usr/local/www/interfaces.php:2443 usr/local/www/interfaces.php:2432 +#: usr/local/www/interfaces.php:2468 +msgid "When operating as an access point in 802.11g mode, allow only 11g-capable stations to associate (11b-only stations are not permitted to associate)." +msgstr "Quando operando como um ponto de acesso em modo 802.11g, permitir somente que estações que suportam 11g se associem (estações somente 11b não tem permissão de se associarem)." + +#: usr/local/www/interfaces.php:2204 usr/local/www/interfaces.php:2384 +#: usr/local/www/interfaces.php:2372 usr/local/www/interfaces.php:2402 +#: usr/local/www/interfaces.php:2448 usr/local/www/interfaces.php:2437 +#: usr/local/www/interfaces.php:2473 +msgid "Allow intra-BSS communication" +msgstr "Permitir comunicação intra-BSS" + +#: usr/local/www/interfaces.php:2208 usr/local/www/interfaces.php:2388 +#: usr/local/www/interfaces.php:2376 usr/local/www/interfaces.php:2406 +#: usr/local/www/interfaces.php:2452 usr/local/www/interfaces.php:2441 +#: usr/local/www/interfaces.php:2477 +msgid "When operating as an access point, enable this if you want to pass packets between wireless clients directly." +msgstr "Quando operando como um ponto de acesso, habilitar isso se você desejar liberar pacotes entre clientes sem fio diretamente." + +#: usr/local/www/interfaces.php:2210 usr/local/www/interfaces.php:2390 +#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2408 +#: usr/local/www/interfaces.php:2454 usr/local/www/interfaces.php:2443 +#: usr/local/www/interfaces.php:2479 +msgid "Disabling the internal bridging is useful when traffic is to be processed with packet filtering." +msgstr "Desabilitar a criação de pontes internas é útil quando o tráfego é processado com filtro de pacote." + +#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2394 +#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2412 +#: usr/local/www/interfaces.php:2458 usr/local/www/interfaces.php:2447 +#: usr/local/www/interfaces.php:2483 +msgid "Enable WME" +msgstr "Habilitar WME" + +#: usr/local/www/interfaces.php:2217 usr/local/www/interfaces.php:2397 +#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2415 +#: usr/local/www/interfaces.php:2461 usr/local/www/interfaces.php:2450 +#: usr/local/www/interfaces.php:2486 +msgid "Setting this option will force the card to use WME (wireless QoS)." +msgstr "Configurar essa opção irá forçar o cartão a usar WME (QoS sem fio)." + +#: usr/local/www/interfaces.php:2221 usr/local/www/interfaces.php:2401 +#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2419 +#: usr/local/www/interfaces.php:2465 usr/local/www/interfaces.php:2454 +#: usr/local/www/interfaces.php:2490 +msgid "Enable Hide SSID" +msgstr "Habilitar Hide SSID" + +#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2405 +#: usr/local/www/interfaces.php:2393 usr/local/www/interfaces.php:2423 +#: usr/local/www/interfaces.php:2469 usr/local/www/interfaces.php:2458 +#: usr/local/www/interfaces.php:2494 +msgid "Setting this option will force the card to NOT broadcast its SSID" +msgstr "Configurar essa opção irá forçar o cartão a NÃO enviar seu SSID em broadcast" + +#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2407 +#: usr/local/www/interfaces.php:2395 usr/local/www/interfaces.php:2425 +#: usr/local/www/interfaces.php:2471 usr/local/www/interfaces.php:2460 +#: usr/local/www/interfaces.php:2496 +msgid "(this might create problems for some clients)." +msgstr "(isso deve criar problemas para alguns clientes)." + +#: usr/local/www/interfaces.php:2231 usr/local/www/interfaces.php:2411 +#: usr/local/www/interfaces.php:2399 usr/local/www/interfaces.php:2429 +#: usr/local/www/interfaces.php:2475 usr/local/www/interfaces.php:2464 +#: usr/local/www/interfaces.php:2500 +msgid "WEP" +msgstr "WEP" + +#: usr/local/www/interfaces.php:2234 usr/local/www/interfaces.php:2414 +#: usr/local/www/interfaces.php:2402 usr/local/www/interfaces.php:2432 +#: usr/local/www/interfaces.php:2478 usr/local/www/interfaces.php:2467 +#: usr/local/www/interfaces.php:2503 +msgid "Enable WEP" +msgstr "Habilitar WEP" + +#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2419 +#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2437 +#: usr/local/www/interfaces.php:2483 usr/local/www/interfaces.php:2472 +#: usr/local/www/interfaces.php:2508 +msgid "TX key" +msgstr "Chave TX" + +#: usr/local/www/interfaces.php:2242 usr/local/www/interfaces.php:2422 +#: usr/local/www/interfaces.php:2410 usr/local/www/interfaces.php:2440 +#: usr/local/www/interfaces.php:2486 usr/local/www/interfaces.php:2475 +#: usr/local/www/interfaces.php:2511 +msgid "Key 1:" +msgstr "Chave 1:" + +#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2431 +#: usr/local/www/interfaces.php:2419 usr/local/www/interfaces.php:2449 +#: usr/local/www/interfaces.php:2495 usr/local/www/interfaces.php:2484 +#: usr/local/www/interfaces.php:2520 +msgid "Key 2:" +msgstr "Chave 2:" + +#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2440 +#: usr/local/www/interfaces.php:2428 usr/local/www/interfaces.php:2458 +#: usr/local/www/interfaces.php:2504 usr/local/www/interfaces.php:2493 +#: usr/local/www/interfaces.php:2529 +msgid "Key 3:" +msgstr "Chave 3:" + +#: usr/local/www/interfaces.php:2269 usr/local/www/interfaces.php:2449 +#: usr/local/www/interfaces.php:2437 usr/local/www/interfaces.php:2467 +#: usr/local/www/interfaces.php:2513 usr/local/www/interfaces.php:2502 +#: usr/local/www/interfaces.php:2538 +msgid "Key 4:" +msgstr "Chave 4:" + +#: usr/local/www/interfaces.php:2279 usr/local/www/interfaces.php:2459 +#: usr/local/www/interfaces.php:2447 usr/local/www/interfaces.php:2477 +#: usr/local/www/interfaces.php:2523 usr/local/www/interfaces.php:2512 +#: usr/local/www/interfaces.php:2548 +msgid "40 (64) bit keys may be entered as 5 ASCII characters or 10 hex digits preceded by '0x'." +msgstr "Chaves de 40 (64) bits devem ser informadas como 5 caracteres ASCII ou 10 dígitos hex precedidos por '0x'." + +#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2460 +#: usr/local/www/interfaces.php:2448 usr/local/www/interfaces.php:2478 +#: usr/local/www/interfaces.php:2524 usr/local/www/interfaces.php:2513 +#: usr/local/www/interfaces.php:2549 +msgid "104 (128) bit keys may be entered as 13 ASCII characters or 26 hex digits preceded by '0x'." +msgstr "Chaves de 104 (128) bits devem ser informadas como 13 caracteres ASCII ou 26 dígitos hex precedidos por '0x'." + +#: usr/local/www/interfaces.php:2284 usr/local/www/interfaces.php:2308 +#: usr/local/www/interfaces.php:2464 usr/local/www/interfaces.php:2488 +#: usr/local/www/interfaces.php:2452 usr/local/www/interfaces.php:2476 +#: usr/local/www/interfaces.php:2482 usr/local/www/interfaces.php:2506 +#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2552 +#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2541 +#: usr/local/www/interfaces.php:2553 usr/local/www/interfaces.php:2577 +msgid "WPA" +msgstr "WPA" + +#: usr/local/www/interfaces.php:2287 usr/local/www/interfaces.php:2467 +#: usr/local/www/interfaces.php:2455 usr/local/www/interfaces.php:2485 +#: usr/local/www/interfaces.php:2531 usr/local/www/interfaces.php:2520 +#: usr/local/www/interfaces.php:2556 +msgid "Enable WPA" +msgstr "Habilitar WPA" + +#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2472 +msgid "WPA Pre Shared Key" +msgstr "Chave Pre-Compartilhada WPA" + +#: usr/local/www/interfaces.php:2295 usr/local/www/interfaces.php:2475 +#: usr/local/www/interfaces.php:2463 usr/local/www/interfaces.php:2493 +#: usr/local/www/interfaces.php:2539 usr/local/www/interfaces.php:2528 +#: usr/local/www/interfaces.php:2564 +msgid "PSK:" +msgstr "PSK:" + +#: usr/local/www/interfaces.php:2301 usr/local/www/interfaces.php:2481 +#: usr/local/www/interfaces.php:2469 usr/local/www/interfaces.php:2499 +#: usr/local/www/interfaces.php:2545 usr/local/www/interfaces.php:2534 +#: usr/local/www/interfaces.php:2570 +msgid "Passphrase must be from 8 to 63 characters." +msgstr "Frase secreta deve ter de 8 a 63 caracteres." + +#: usr/local/www/interfaces.php:2305 usr/local/www/interfaces.php:2485 +#: usr/local/www/interfaces.php:2473 usr/local/www/interfaces.php:2503 +#: usr/local/www/interfaces.php:2549 usr/local/www/interfaces.php:2538 +#: usr/local/www/interfaces.php:2574 +msgid "WPA Mode" +msgstr "Modo WPA" + +#: usr/local/www/interfaces.php:2309 usr/local/www/interfaces.php:2489 +#: usr/local/www/interfaces.php:2477 usr/local/www/interfaces.php:2507 +#: usr/local/www/interfaces.php:2553 usr/local/www/interfaces.php:2542 +#: usr/local/www/interfaces.php:2578 +msgid "WPA2" +msgstr "WPA2" + +#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2320 +#: usr/local/www/interfaces.php:2330 usr/local/www/interfaces.php:2339 +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/interfaces.php:2490 usr/local/www/interfaces.php:2500 +#: usr/local/www/interfaces.php:2510 usr/local/www/interfaces.php:2519 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/interfaces.php:2478 usr/local/www/interfaces.php:2488 +#: usr/local/www/interfaces.php:2498 usr/local/www/interfaces.php:2507 +#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2518 +#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2537 +#: usr/local/www/interfaces.php:2554 usr/local/www/interfaces.php:2564 +#: usr/local/www/interfaces.php:2574 usr/local/www/interfaces.php:2583 +#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2553 +#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2572 +#: usr/local/www/interfaces.php:2579 usr/local/www/interfaces.php:2589 +#: usr/local/www/interfaces.php:2599 usr/local/www/interfaces.php:2608 +msgid "Both" +msgstr "Ambos" + +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2495 +#: usr/local/www/interfaces.php:2483 usr/local/www/interfaces.php:2513 +#: usr/local/www/interfaces.php:2559 usr/local/www/interfaces.php:2548 +#: usr/local/www/interfaces.php:2584 +msgid "WPA Key Management Mode" +msgstr "Modo de Gerenciamento de Chave WPA" + +#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2498 +msgid "Pre Shared Key" +msgstr "Chave Pre-compartilhada" + +#: usr/local/www/interfaces.php:2319 usr/local/www/interfaces.php:2499 +#: usr/local/www/interfaces.php:2487 usr/local/www/interfaces.php:2517 +#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2552 +#: usr/local/www/interfaces.php:2588 +msgid "Extensible Authentication Protocol" +msgstr "Protocolo de Autenticação Extensível" + +#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2508 +#: usr/local/www/interfaces.php:2496 usr/local/www/interfaces.php:2526 +#: usr/local/www/interfaces.php:2572 usr/local/www/interfaces.php:2561 +#: usr/local/www/interfaces.php:2597 +msgid "Open System Authentication" +msgstr "Autenticação de Sistema Aberto" + +#: usr/local/www/interfaces.php:2329 usr/local/www/interfaces.php:2509 +#: usr/local/www/interfaces.php:2497 usr/local/www/interfaces.php:2527 +#: usr/local/www/interfaces.php:2573 usr/local/www/interfaces.php:2562 +#: usr/local/www/interfaces.php:2598 +msgid "Shared Key Authentication" +msgstr "Autenticação de Chave Compartilhada" + +#: usr/local/www/interfaces.php:2332 usr/local/www/interfaces.php:2512 +#: usr/local/www/interfaces.php:2500 usr/local/www/interfaces.php:2530 +#: usr/local/www/interfaces.php:2576 usr/local/www/interfaces.php:2565 +#: usr/local/www/interfaces.php:2601 +msgid "Note: Shared Key Authentication requires WEP." +msgstr "Nota: Autenticação de Chave Compartilhada requere WEP." + +#: usr/local/www/interfaces.php:2336 usr/local/www/interfaces.php:2516 +#: usr/local/www/interfaces.php:2504 usr/local/www/interfaces.php:2534 +#: usr/local/www/interfaces.php:2580 usr/local/www/interfaces.php:2569 +#: usr/local/www/interfaces.php:2605 +msgid "WPA Pairwise" +msgstr "WPA Pairwise" + +#: usr/local/www/interfaces.php:2340 usr/local/www/interfaces.php:2520 +#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2538 +#: usr/local/www/interfaces.php:2584 usr/local/www/interfaces.php:2573 +#: usr/local/www/interfaces.php:2609 +msgid "AES (recommended)" +msgstr "AES (recomendado)" + +#: usr/local/www/interfaces.php:2341 usr/local/www/interfaces.php:2521 +#: usr/local/www/interfaces.php:2509 usr/local/www/interfaces.php:2539 +#: usr/local/www/interfaces.php:2585 usr/local/www/interfaces.php:2574 +#: usr/local/www/interfaces.php:2610 +msgid "TKIP" +msgstr "TKIP" + +#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2526 +#: usr/local/www/interfaces.php:2514 usr/local/www/interfaces.php:2544 +#: usr/local/www/interfaces.php:2590 usr/local/www/interfaces.php:2579 +#: usr/local/www/interfaces.php:2615 +msgid "Key Rotation" +msgstr "Rotação de Chave" + +#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2529 +#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2547 +#: usr/local/www/interfaces.php:2593 usr/local/www/interfaces.php:2582 +#: usr/local/www/interfaces.php:2618 +msgid "Allowed values are 1-9999 but should not be longer than Master Key Regeneration time." +msgstr "Os valores permitidos são 1-9999 mas não devem ser mais longos que o tempo de Regeneração da Chave Master." + +#: usr/local/www/interfaces.php:2353 usr/local/www/interfaces.php:2533 +#: usr/local/www/interfaces.php:2521 usr/local/www/interfaces.php:2551 +#: usr/local/www/interfaces.php:2597 usr/local/www/interfaces.php:2586 +#: usr/local/www/interfaces.php:2622 +msgid "Master Key Regeneration" +msgstr "Regeneração da Chave Master" + +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2536 +#: usr/local/www/interfaces.php:2524 usr/local/www/interfaces.php:2554 +#: usr/local/www/interfaces.php:2600 usr/local/www/interfaces.php:2589 +#: usr/local/www/interfaces.php:2625 +msgid "Allowed values are 1-9999 but should not be shorter than Key Rotation time." +msgstr "Os valores permitidos são 1-9999 mas devem ser menores que o tempo de Rotação da Chave." + +#: usr/local/www/interfaces.php:2360 usr/local/www/interfaces.php:2540 +#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2558 +#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2593 +#: usr/local/www/interfaces.php:2629 +msgid "Strict Key Regeneration" +msgstr "Regeneração de Chave Estrita" + +#: usr/local/www/interfaces.php:2363 usr/local/www/interfaces.php:2543 +#: usr/local/www/interfaces.php:2531 usr/local/www/interfaces.php:2561 +#: usr/local/www/interfaces.php:2607 usr/local/www/interfaces.php:2596 +#: usr/local/www/interfaces.php:2632 +msgid "Setting this option will force the AP to rekey whenever a client disassociates." +msgstr "Configurando essa opção forçará o AP a rechavear sempre que um cliente desassociar-se." + +#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2547 +#: usr/local/www/interfaces.php:2535 usr/local/www/interfaces.php:2565 +#: usr/local/www/interfaces.php:2611 usr/local/www/interfaces.php:2600 +#: usr/local/www/interfaces.php:2636 +msgid "Enable IEEE802.1X Authentication" +msgstr "Habilita Autenticação IEEE802.1X" + +#: usr/local/www/interfaces.php:2370 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2538 usr/local/www/interfaces.php:2568 +#: usr/local/www/interfaces.php:2614 usr/local/www/interfaces.php:2603 +#: usr/local/www/interfaces.php:2639 +msgid "Setting this option will enable 802.1x authentication." +msgstr "Configurando essa opção habilitará a autenticação 802.1x." + +#: usr/local/www/interfaces.php:2371 +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/status_openvpn.php:304 usr/local/www/interfaces.php:2551 +#: usr/local/www/load_balancer_pool_edit.php:255 +#: usr/local/www/status_openvpn.php:307 usr/local/www/interfaces.php:2539 +#: usr/local/www/load_balancer_pool_edit.php:253 +#: usr/local/www/status_openvpn.php:355 usr/local/www/interfaces.php:2569 +#: usr/local/www/status_openvpn.php:385 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2640 +msgid "NOTE" +msgstr "NOTA" + +#: usr/local/www/interfaces.php:2371 usr/local/www/interfaces.php:2551 +#: usr/local/www/interfaces.php:2539 usr/local/www/interfaces.php:2569 +#: usr/local/www/interfaces.php:2615 usr/local/www/interfaces.php:2604 +#: usr/local/www/interfaces.php:2640 +msgid "this option requires checking the \"Enable WPA box\"." +msgstr "essa opção requer verificação da \"Caixa de Habilitar WPA\"." + +#: usr/local/www/interfaces.php:2375 usr/local/www/interfaces.php:2555 +#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2573 +#: usr/local/www/interfaces.php:2619 usr/local/www/interfaces.php:2608 +#: usr/local/www/interfaces.php:2644 +msgid "802.1X Authentication Server IP Address" +msgstr "Endereço IP de Servidor de Autenticação 802.1X" + +#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2558 +#: usr/local/www/interfaces.php:2579 usr/local/www/interfaces.php:2546 +#: usr/local/www/interfaces.php:2567 usr/local/www/interfaces.php:2576 +#: usr/local/www/interfaces.php:2597 usr/local/www/interfaces.php:2622 +#: usr/local/www/interfaces.php:2643 usr/local/www/interfaces.php:2611 +#: usr/local/www/interfaces.php:2632 usr/local/www/interfaces.php:2647 +#: usr/local/www/interfaces.php:2668 +msgid "Enter the IP address of the 802.1X Authentication Server. This is commonly a Radius server (FreeRadius, Internet Authentication Services, etc.)" +msgstr "Informe o endereço IP do Servidor de Autenticação 802.1X. Esse é, comumente, um servidor Radius (FreeRadius, Serviços de Autenticação de Internet, etc.)" + +#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2562 +#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2580 +#: usr/local/www/interfaces.php:2626 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2651 +msgid "802.1X Authentication Server Port" +msgstr "Porta do Servidor de Autenticação 802.1X" + +#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2565 +#: usr/local/www/interfaces.php:2586 usr/local/www/interfaces.php:2553 +#: usr/local/www/interfaces.php:2574 usr/local/www/interfaces.php:2583 +#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2629 +#: usr/local/www/interfaces.php:2650 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2639 usr/local/www/interfaces.php:2654 +#: usr/local/www/interfaces.php:2675 +msgid "Leave blank for the default 1812 port." +msgstr "Deixe em branco para usar a porta padrão 1812." + +#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2569 +#: usr/local/www/interfaces.php:2557 usr/local/www/interfaces.php:2587 +#: usr/local/www/interfaces.php:2633 usr/local/www/interfaces.php:2622 +#: usr/local/www/interfaces.php:2658 +msgid "802.1X Authentication Server Shared Secret" +msgstr "Segredo Compartilhado do Servidor de Autenticação 802.1X" + +#: usr/local/www/interfaces.php:2396 usr/local/www/interfaces.php:2597 +#: usr/local/www/interfaces.php:2585 usr/local/www/interfaces.php:2615 +#: usr/local/www/interfaces.php:2661 usr/local/www/interfaces.php:2650 +#: usr/local/www/interfaces.php:2686 +msgid "Authentication Roaming Preauth" +msgstr "Pre-Autenticação de Roaming de Autenticação" + +#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2608 +#: usr/local/www/interfaces.php:2596 usr/local/www/interfaces.php:2626 +#: usr/local/www/interfaces.php:2672 usr/local/www/interfaces.php:2661 +#: usr/local/www/interfaces.php:2697 +msgid "Private networks" +msgstr "Redes privadas" + +#: usr/local/www/interfaces.php:2415 usr/local/www/interfaces.php:2616 +#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2634 +#: usr/local/www/interfaces.php:2680 usr/local/www/interfaces.php:2669 +#: usr/local/www/interfaces.php:2705 +msgid "When set, this option blocks traffic from IP addresses that are reserved for private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as" +msgstr "Quando configurada, essa opção bloqueia o tráfego dos endereços IP que estão reservados para redes privadas como peer RFC 1918 (10/8, 172.16/12, 192.168/16) como" + +#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636 +#: usr/local/www/interfaces.php:2682 usr/local/www/interfaces.php:2671 +#: usr/local/www/interfaces.php:2707 +msgid "well as loopback addresses (127/8)." +msgstr "endereços de retorno (127/8)." + +#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636 +#: usr/local/www/interfaces.php:2682 usr/local/www/interfaces.php:2671 +#: usr/local/www/interfaces.php:2707 +msgid "You should generally leave this option turned on, unless your WAN network lies in such a private address space, too." +msgstr "Você deve deixar essa opção normalmente ligada, a menos que sua rede WAN também estiver no mesmo espaço do endereço privado." + +#: usr/local/www/interfaces.php:2427 usr/local/www/interfaces.php:2628 +#: usr/local/www/interfaces.php:2616 usr/local/www/interfaces.php:2646 +#: usr/local/www/interfaces.php:2692 usr/local/www/interfaces.php:2681 +#: usr/local/www/interfaces.php:2717 +msgid "When set, this option blocks traffic from IP addresses that are reserved (but not RFC 1918) or not yet assigned by IANA." +msgstr "Quando configurada, essa opção bloqueia o tráfego dos endereços IP que está reservados (mas não na RFC1918) ou ainda não foram atribuídas por IANA." + +#: usr/local/www/interfaces.php:2429 usr/local/www/interfaces.php:2630 +#: usr/local/www/interfaces.php:2618 usr/local/www/interfaces.php:2648 +#: usr/local/www/interfaces.php:2694 usr/local/www/interfaces.php:2683 +#: usr/local/www/interfaces.php:2719 +msgid "Bogons are prefixes that should never appear in the Internet routing table, and obviously should not appear as the source address in any packets you receive." +msgstr "Bogons são prefixos que nunca devem aparecer na tabela de roteamento da Internet, e obviamente não devem aparecer como os endereços fonte de nenhum pacote que receber." + +#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2559 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783 +#: usr/local/www/interfaces.php:2820 usr/local/www/interfaces.php:2829 +#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815 +#: usr/local/www/interfaces.php:2842 usr/local/www/interfaces.php:2851 +msgid "You can manage Gateways" +msgstr "Você pode gerenciar Gateways" + +#: usr/local/www/interfaces_assign.php:43 +msgid "Assign network ports" +msgstr "Atribuir portas de rede" + +#: usr/local/www/interfaces_assign.php:194 +#, php-format +msgid "Port %1$s was assigned to %2$s interfaces:" +msgstr "Porta %1$s foi atribuída para as interfaces %2$s:" + +#: usr/local/www/interfaces_assign.php:262 +#: usr/local/www/interfaces_assign.php:274 +msgid "The interface is part of a group. Please remove it from the group to continue" +msgstr "A interface é parte de um grupo. Por favor, remova-a do grupo para continuar" + +#: usr/local/www/interfaces_assign.php:264 +#: usr/local/www/interfaces_assign.php:276 +msgid "The interface is part of a bridge. Please remove it from the bridge to continue" +msgstr "A interface é parte de uma ponte. Por favor, remova-a da ponte para continuar" + +#: usr/local/www/interfaces_assign.php:266 +#: usr/local/www/interfaces_assign.php:278 +msgid "The interface is part of a gre tunnel. Please delete the tunnel to continue" +msgstr "A interface é parte de um túnel gre. Por favor, remova o túnel para continuar" + +#: usr/local/www/interfaces_assign.php:268 +#: usr/local/www/interfaces_assign.php:280 +msgid "The interface is part of a gif tunnel. Please delete the tunnel to continue" +msgstr "A interface é parte de um túnel gif. Por favor, remova o túnel para continuar" + +#: usr/local/www/interfaces_assign.php:318 +#: usr/local/www/interfaces_assign.php:312 +msgid "Interface has been deleted." +msgstr "A Interface foi apagada." + +#: usr/local/www/interfaces_assign.php:325 +#: usr/local/www/interfaces_assign.php:319 +msgid "lan" +msgstr "lan" + +#: usr/local/www/interfaces_assign.php:326 +#: usr/local/www/interfaces_assign.php:320 +msgid "LAN" +msgstr "LAN" + +#: usr/local/www/interfaces_assign.php:366 +#: usr/local/www/interfaces_assign.php:360 +msgid "Interface has been added." +msgstr "Uma Interface foi adicionada." + +#: usr/local/www/interfaces_assign.php:376 +#: usr/local/www/interfaces_assign.php:370 +msgid "The system is now rebooting. Please wait." +msgstr "O sistema está reiniciando agora. Por favor, aguarde." + +#: usr/local/www/interfaces_assign.php:378 +#: usr/local/www/interfaces_assign.php:372 +msgid "Reboot is needed. Please apply the settings in order to reboot." +msgstr "É necessário reiniciar. Por favor, aplique as configurações para reiniciar." + +#: usr/local/www/interfaces_assign.php:380 +#: usr/local/www/interfaces_assign.php:374 +msgid "Interface mismatch detected. Please resolve the mismatch and click Save. The firewall will reboot afterwards." +msgstr "Detectado não correspondência de Interface. Por favor, resolva o problema e clique em Salvar. O firewall irá reiniciar em seguida." + +#: usr/local/www/interfaces_assign.php:390 +#: usr/local/www/interfaces_assign.php:384 +msgid "The interface configuration has been changed.
    You must apply the changes in order for them to take effect." +msgstr "A configuração da interface foi modificada.
    Você deve aplicar as alterações para que elas tenham efeito." + +#: usr/local/www/interfaces_assign.php:421 +#: usr/local/www/interfaces_assign.php:415 +msgid "Network port" +msgstr "Porta de rede" + +#: usr/local/www/interfaces_assign.php:437 +#: usr/local/www/interfaces_assign.php:431 +#, php-format +msgid "VLAN %1$s on %2$s" +msgstr "VLAN %1$s em %2$s" + +#: usr/local/www/interfaces_assign.php:480 +#: usr/local/www/interfaces_assign.php:474 +msgid "Do you really want to delete this interface?" +msgstr "Você realmente deseja remover essa interface PPP?" + +#: usr/local/www/interfaces_assign.php:480 +#: usr/local/www/interfaces_assign.php:474 +msgid "delete interface" +msgstr "remover interface" + +#: usr/local/www/interfaces_assign.php:489 +#: usr/local/www/interfaces_assign.php:483 +msgid "add interface" +msgstr "adicionar interface" + +#: usr/local/www/interfaces_assign.php:506 +#: usr/local/www/interfaces_assign.php:500 +#: usr/local/www/interfaces_assign.php:504 +msgid "Interfaces that are configured as members of a lagg(4) interface will not be shown." +msgstr "Interfaces que são configuradas como membros de uma interface lagg(4) não serão exibidos." + +#: usr/local/www/diag_pf_info.php:46 +msgid "Diagnostics: pfInfo" +msgstr "Diagnósticos: pfInfo" + +#: usr/local/www/diag_pf_info.php:106 usr/local/www/diag_pf_info.php:103 +msgid "Gathering PF information, please wait..." +msgstr "Coletando informações do PF, por favor aguarde..." + +#: usr/local/www/diag_smart.php:14 +msgid "S.M.A.R.T. Monitor Tools" +msgstr "S.M.A.R.T. Ferramentas do monitor" + +#: usr/local/www/diag_smart.php:68 usr/local/www/diag_smart.php:73 +msgid "PASSED" +msgstr "PERMITIDO" + +#: usr/local/www/diag_smart.php:69 usr/local/www/diag_smart.php:74 +msgid "FAILED" +msgstr "FALHA" + +#: usr/local/www/diag_smart.php:70 usr/local/www/diag_smart.php:75 +msgid "Warning" +msgstr "Atenção" + +#: usr/local/www/diag_smart.php:113 usr/local/www/diag_smart.php:413 +#: usr/local/www/diag_smart.php:126 usr/local/www/diag_smart.php:434 +msgid "Abort" +msgstr "Abortar" + +#: usr/local/www/diag_smart.php:154 usr/local/www/diag_smart.php:175 +#, php-format +msgid "Email sent to %s" +msgstr "Email enviado para %s" + +#: usr/local/www/diag_smart.php:194 usr/local/www/diag_smart.php:266 +#: usr/local/www/diag_smart.php:215 usr/local/www/diag_smart.php:287 +msgid "Information/Tests" +msgstr "Informação/Teste" + +#: usr/local/www/diag_smart.php:195 usr/local/www/diag_smart.php:206 +#: usr/local/www/diag_smart.php:216 usr/local/www/diag_smart.php:227 +msgid "Config" +msgstr "Config" + +#: usr/local/www/diag_smart.php:209 usr/local/www/system_camanager.php:524 +#: usr/local/www/system_certmanager.php:617 +#: usr/local/www/system_certmanager.php:720 +#: usr/local/www/system_certmanager.php:733 +#: usr/local/www/system_certmanager.php:886 +#: usr/local/www/system_camanager.php:525 +#: usr/local/www/system_camanager.php:549 usr/local/www/diag_smart.php:230 +#: usr/local/www/system_certmanager.php:758 +#: usr/local/www/system_certmanager.php:928 +#: usr/local/www/system_certmanager.php:759 +#: usr/local/www/system_certmanager.php:932 +msgid "Email Address" +msgstr "Endereço de email" + +#: usr/local/www/diag_smart.php:231 usr/local/www/diag_smart.php:252 +msgid "Test email" +msgstr "Email teste" + +#: usr/local/www/diag_smart.php:236 usr/local/www/diag_smart.php:257 +#, php-format +msgid "Send test email to %s" +msgstr "Enviar email teste para %s" + +#: usr/local/www/diag_smart.php:278 usr/local/www/diag_smart.php:283 +#: usr/local/www/diag_smart.php:299 usr/local/www/diag_smart.php:304 +msgid "Info" +msgstr "Informação" + +#: usr/local/www/diag_smart.php:281 usr/local/www/diag_smart.php:302 +msgid "Info type" +msgstr "Tipo informação" + +#: usr/local/www/diag_smart.php:284 usr/local/www/diag_smart.php:305 +msgid "Health" +msgstr "Saúde" + +#: usr/local/www/diag_smart.php:285 usr/local/www/diag_smart.php:306 +msgid "SMART Capabilities" +msgstr "Capacidades do SMART" + +#: usr/local/www/diag_smart.php:286 usr/local/www/diag_smart.php:307 +msgid "Attributes" +msgstr "Atributos" + +#: usr/local/www/diag_smart.php:287 usr/local/www/firewall_aliases.php:179 +#: usr/local/www/diag_smart.php:308 usr/local/www/firewall_aliases.php:177 +msgid "All" +msgstr "Todos" + +#: usr/local/www/diag_smart.php:291 usr/local/www/diag_smart.php:330 +#: usr/local/www/diag_smart.php:367 usr/local/www/diag_smart.php:397 +#: usr/local/www/diag_smart.php:312 usr/local/www/diag_smart.php:351 +#: usr/local/www/diag_smart.php:388 usr/local/www/diag_smart.php:418 +msgid "Device: /dev/" +msgstr "Serviço: /dev/" + +#: usr/local/www/diag_smart.php:307 usr/local/www/diag_smart.php:383 +#: usr/local/www/diag_smart.php:328 usr/local/www/diag_smart.php:404 +msgid "View" +msgstr "Visualização" + +#: usr/local/www/diag_smart.php:318 +msgid "Perform Self Tests" +msgstr "Realizar auto-testes" + +#: usr/local/www/diag_smart.php:321 usr/local/www/diag_smart.php:342 +msgid "Test type" +msgstr "Tipo de teste" + +#: usr/local/www/diag_smart.php:323 +#: usr/local/www/status_gateway_groups.php:123 +#: usr/local/www/status_gateways.php:118 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60 +#: usr/local/www/status_gateways.php:119 +#: usr/local/www/status_gateway_groups.php:124 +#: usr/local/www/diag_smart.php:344 +msgid "Offline" +msgstr "Desconectado" + +#: usr/local/www/diag_smart.php:324 usr/local/www/diag_smart.php:345 +msgid "Short" +msgstr "Curto" + +#: usr/local/www/diag_smart.php:325 usr/local/www/diag_smart.php:346 +#: usr/local/www/diag_system_pftop.php:137 +msgid "Long" +msgstr "Longo" + +#: usr/local/www/diag_smart.php:326 usr/local/www/diag_smart.php:347 +msgid "Conveyance (ATA Disks Only)" +msgstr "Transporte (Somente Discos ATA)" + +#: usr/local/www/diag_smart.php:357 usr/local/www/diag_smart.php:378 +msgid "View Logs" +msgstr "Visualizar Logs" + +#: usr/local/www/diag_smart.php:360 usr/local/www/diag_smart.php:381 +msgid "Log type" +msgstr "Tipo de Log" + +#: usr/local/www/diag_smart.php:362 usr/local/www/diag_smart.php:383 +msgid "Error" +msgstr "Erro" + +#: usr/local/www/diag_smart.php:363 +msgid "Self Test" +msgstr "Auto-teste" + +#: usr/local/www/diag_smart.php:394 usr/local/www/diag_smart.php:415 +msgid "Abort tests" +msgstr "Abortar testes" + +#: usr/local/www/diag_smart.php:413 usr/local/www/diag_smart.php:434 +msgid "Do you really want to abort the test?" +msgstr "Você realmente deseja abortar o teste?" + +#: usr/local/www/diag_smart.php:428 usr/local/www/diag_smart.php:449 +msgid "Back" +msgstr "Voltar" + +#: usr/local/www/diag_states_summary.php:154 +#: usr/local/www/diag_states_summary.php:143 +#: usr/local/www/diag_states_summary.php:145 +msgid "Src Ports" +msgstr "Portas Src" + +#: usr/local/www/diag_states_summary.php:155 +#: usr/local/www/diag_states_summary.php:144 +#: usr/local/www/diag_states_summary.php:146 +msgid "Dst Ports" +msgstr "Portas Dst" + +#: usr/local/www/diag_states_summary.php:185 +#: usr/local/www/diag_states_summary.php:174 +#: usr/local/www/diag_states_summary.php:176 +msgid "State Table Summary" +msgstr "Resumo da Tabela de Estados" + +#: usr/local/www/diag_states_summary.php:191 +#: usr/local/www/diag_states_summary.php:180 +#: usr/local/www/diag_states_summary.php:182 +msgid "By Source IP" +msgstr "Por IP de Origem" + +#: usr/local/www/diag_states_summary.php:192 +#: usr/local/www/diag_states_summary.php:181 +#: usr/local/www/diag_states_summary.php:183 +msgid "By Destination IP" +msgstr "Por IP de Destino" + +#: usr/local/www/diag_states_summary.php:193 +#: usr/local/www/diag_states_summary.php:182 +#: usr/local/www/diag_states_summary.php:184 +msgid "Total per IP" +msgstr "Total por IP" + +#: usr/local/www/diag_states_summary.php:194 +#: usr/local/www/diag_states_summary.php:183 +#: usr/local/www/diag_states_summary.php:185 +msgid "By IP Pair" +msgstr "Por par de IP" + +#: usr/local/www/diag_system_activity.php:46 +msgid "Diagnostics: System Activity" +msgstr "Diagnósticos: Atividade do Sistema" + +#: usr/local/www/diag_system_activity.php:101 +msgid "Gathering CPU activity, please wait..." +msgstr "Coletando a atividade da CPU, por favor aguarde..." + +#: usr/local/www/diag_system_pftop.php:45 +msgid "Diagnostics: pfTop" +msgstr "Diagnósticos: pfTop" + +#: usr/local/www/diag_system_pftop.php:51 +#: usr/local/www/diag_system_pftop.php:62 +#: usr/local/www/diag_system_pftop.php:103 +msgid "bytes" +msgstr "bytes" + +#: usr/local/www/diag_system_pftop.php:99 +#: usr/local/www/diag_system_pftop.php:148 +msgid "Sort type:" +msgstr "Tipo de classificação:" + +#: usr/local/www/diag_system_pftop.php:102 +msgid "age" +msgstr "idade" + +#: usr/local/www/diag_system_pftop.php:104 +msgid "dest" +msgstr "dest" + +#: usr/local/www/diag_system_pftop.php:105 +msgid "dport" +msgstr "dport" + +#: usr/local/www/diag_system_pftop.php:106 +msgid "exp" +msgstr "exp" + +#: usr/local/www/diag_system_pftop.php:108 +msgid "peak" +msgstr "pico" + +#: usr/local/www/diag_system_pftop.php:109 +msgid "pkt" +msgstr "pct" + +#: usr/local/www/diag_system_pftop.php:110 +#: usr/local/www/status_interfaces.php:365 +#: usr/local/www/status_interfaces.php:462 +#: usr/local/www/status_interfaces.php:465 +msgid "rate" +msgstr "taxa" + +#: usr/local/www/diag_system_pftop.php:111 +msgid "size" +msgstr "tamanho" + +#: usr/local/www/diag_system_pftop.php:112 +msgid "sport" +msgstr "sport" + +#: usr/local/www/diag_system_pftop.php:113 +msgid "src" +msgstr "src" + +#: usr/local/www/diag_system_pftop.php:126 +#: usr/local/www/diag_system_pftop.php:187 +msgid "Gathering pfTOP activity, please wait..." +msgstr "Coletando atividade pfTOP, por favor aguarde..." + +#: usr/local/www/license.php:45 +msgid "License" +msgstr "Licença" + +#: usr/local/www/license.php:47 +msgid "is Copyright" +msgstr "tem Direito de Cópia" + +#: usr/local/www/license.php:47 usr/local/www/firewall_rules_edit.php:1585 +#: usr/local/www/firewall_rules_edit.php:1593 +#: usr/local/www/firewall_nat_edit.php:869 +#: usr/local/www/firewall_nat_edit.php:877 +#: usr/local/www/firewall_nat_out_edit.php:684 +#: usr/local/www/firewall_nat_out_edit.php:692 +#: usr/local/www/firewall_rules_edit.php:1596 +#: usr/local/www/firewall_rules_edit.php:1604 +#: usr/local/www/firewall_nat_edit.php:870 +#: usr/local/www/firewall_nat_edit.php:878 +#: usr/local/www/firewall_rules_edit.php:1644 +#: usr/local/www/firewall_rules_edit.php:1652 +msgid "by" +msgstr "por" + +#: usr/local/www/license.php:48 usr/local/www/license.php:52 +msgid "All rights reserved" +msgstr "Todos os direitos reservados" + +#: usr/local/www/license.php:50 +msgid "m0n0wall is Copyright " +msgstr "m0n0wall is Copyright " + +#: usr/local/www/license.php:50 +msgid "2002-2007 by Manuel Kasper" +msgstr "2002-2007 por Manuel Kasper" + +#: usr/local/www/license.php:53 +msgid "Redistribution and use in source and binary forms, with or without" +msgstr "Redistribuição e uso em forma de fonte e binários, com ou sem " + +#: usr/local/www/license.php:54 +msgid "modification, are permitted provided that the following conditions are met" +msgstr "modificação, são permitidos desde que as seguintes condições sejam encontradas" + +#: usr/local/www/license.php:57 +msgid "1. Redistributions of source code must retain the above copyright notice," +msgstr "1. Redistribuições de código fonte devem conter a notificação de direitos de cópia acima, " + +#: usr/local/www/license.php:59 +msgid "this list of conditions and the following disclaimer" +msgstr "essa lista de condições e os seguintes avisos legais" + +#: usr/local/www/license.php:61 +msgid "2. Redistributions in binary form must reproduce the above copyright" +msgstr "2. Redistribuições em formato binário devem reproduzir a notificação de direitos" + +#: usr/local/www/license.php:62 +msgid "notice, this list of conditions and the following disclaimer in the" +msgstr "de cópia acima, a lista de condições e os seguintes avisos legais na" + +#: usr/local/www/license.php:64 +msgid "documentation and/or other materials provided with the distribution." +msgstr "documentação e/ou outros materiais fornecidos com a distribuição." + +#: usr/local/www/license.php:66 +msgid "THIS SOFTWARE IS PROVIDED " +msgstr "ESSE SOFTWARE É FORNECIDO " + +#: usr/local/www/license.php:66 +msgid "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES," +msgstr "COMO APRESENTADO'' E QUALQUER GARANTIA EXPRESSA OU IMPLÍCITA," + +#: usr/local/www/license.php:68 +msgid "INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY" +msgstr "INCLUINDO, MAS NÃO LIMITADO A, GARANTIAS IMPLÍCITAS DE COMÉRCIO" + +#: usr/local/www/license.php:69 +msgid "AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE" +msgstr "E ADEQUAÇÃO PARA UM PROPÓSITO PARTICULAR SÃO REJEITADOS. EM NENHUM CASO O AUTOR" + +#: usr/local/www/license.php:71 +msgid "AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY," +msgstr "É RESPONSÁVEL POR QUALQUER DANO DIRETO, INDIRETO, INCIDENTAL, ESPECIAL, EXEMPLAR," + +#: usr/local/www/license.php:73 +msgid "OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF" +msgstr "OR POR CONSEQUÊNCIA (INCLUINDO, MAS NÃO LIMITADO A, PROCURAÇÃO PARA " + +#: usr/local/www/license.php:75 +msgid "SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS" +msgstr "SUBSTITUIÇÃO DE BENS E SERVIÇOS; PERDA DE USO, DADOS, OU LUCROS; OU INTERRUPÇÃO" + +#: usr/local/www/license.php:77 +msgid "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN" +msgstr "DO NEGÓCIO) NO ENTANTO CAUSADO E A NENHUMA TEORIA DE RESPONSABILIDADE, QUER SEJA" + +#: usr/local/www/license.php:79 +msgid "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)" +msgstr "EM CONTRATO, RESPONSABILITADE ESTRITA, OU AGRAVO (INCLUINDO NEGLIGÊNCIA OU DE OUTRA MANEIRA)" + +#: usr/local/www/license.php:80 +msgid "ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE" +msgstr "DECORRENTE DE QUALQUER USO DESSE SOFTWARE, MESMO SE ACONSELHADO" + +#: usr/local/www/license.php:82 +msgid "POSSIBILITY OF SUCH DAMAGE" +msgstr "SOBRE A POSSIBILIDADE DE TAL DANO" + +#: usr/local/www/license.php:84 +msgid "The following persons have contributed code to m0n0wall" +msgstr "As seguintes pessoas tem código contribuído no m0n0wall" + +#: usr/local/www/license.php:86 +msgid "Diagnostics: Ping function; WLAN channel auto-select; DNS forwarder" +msgstr "Diagnóstico: Função Ping; canal WLAN auto-selecionado; DNS forwarder" + +#: usr/local/www/license.php:90 +msgid "Timezone and NTP client support" +msgstr "Fuso horário e suport a cliente NTP" + +#: usr/local/www/license.php:94 +msgid "Remote syslog'ing; some code bits for DHCP server on optional interfaces" +msgstr "Geração de syslog remoto; alguns bits de código para servidor DHCP em interfaces opcionais" + +#: usr/local/www/license.php:98 +msgid "Idea/code bits for encrypted webConfigurator passwords; minimalized SNMP agent" +msgstr "Idéia/bits de código para senhas criptografadas do webConfigurator; agente SNMP minimizado" + +#: usr/local/www/license.php:102 +msgid "Advanced outbound NAT: destination selection" +msgstr "Outbound NAT avançado: seleção de destino" + +#: usr/local/www/license.php:106 +msgid "Filtering bridge patches " +msgstr "Patch de ponte de filtro" + +#: usr/local/www/license.php:110 +msgid "Filter rule patches (ordering, block/pass, disabled); better status page;" +msgstr "Patches de regras de filtro (ordenação, bloqueio/liberação, desabilitado); melhor página de status;" + +#: usr/local/www/license.php:112 +msgid "webConfigurator assign network ports page " +msgstr "webConfigurator atribui página de portas de rede " + +#: usr/local/www/license.php:115 +msgid "enhanced " +msgstr "melhorado" + +#: usr/local/www/license.php:115 +msgid "execute command" +msgstr "executar comando" + +#: usr/local/www/license.php:116 +msgid " page" +msgstr " página" + +#: usr/local/www/license.php:119 +msgid "DHCP client: send hostname patch" +msgstr "Cliente DHCP: envia patch de nome de host" + +#: usr/local/www/license.php:122 +msgid "DHCP lease list page" +msgstr "Página de lista de concessões do DHCP" + +#: usr/local/www/license.php:125 +msgid "type filter rules; dial-on-demand" +msgstr "digite regras de filtro; disque sob demanda" + +#: usr/local/www/license.php:128 +msgid "SVG-based traffic grapher" +msgstr "Grafo de tráfego baseado em SVG" + +#: usr/local/www/license.php:131 +msgid "per-user IP address assignments for PPTP VPN" +msgstr "endereços IP por usuário atribuídos para a VPN PPTP" + +#: usr/local/www/license.php:134 +msgid "NAT on optional interfaces" +msgstr "NAT em interfaces opcionais" + +#: usr/local/www/license.php:137 +msgid "captive portal: pass-through MAC/IP addresses, RADIUS authentication" +msgstr "portal captive: endereços MAC/IP pass-through, autenticação RADIUS" + +#: usr/local/www/license.php:137 +msgid "accounting;" +msgstr "contabilitade;" + +#: usr/local/www/license.php:138 +msgid "HTTP server concurrency limit" +msgstr "Limite de concorrência de servidor HTTP" + +#: usr/local/www/license.php:141 +msgid "traffic shaper TOS matching; magic shaper; DHCP deny unknown clients;" +msgstr "correspondência do Traffic Shaper TOS; magic shaper; DHCP nega clientes desconhecidos;" + +#: usr/local/www/license.php:142 +msgid "IPsec user FQDNs; DHCP relay" +msgstr "IPsec usuário FQDNs; DHCP relay" + +#: usr/local/www/license.php:145 +msgid "IDE hard disk standby" +msgstr "Espera de disco rígido IDE" + +#: usr/local/www/license.php:148 +msgid "CPU/memory usage display" +msgstr "Exibição de uso de CPU/memória" + +#: usr/local/www/license.php:151 +msgid "OpenVPN support" +msgstr "Suporte a OpenVPN" + +#: usr/local/www/license.php:153 +msgid "is based upon/includes various free software packages, listed below." +msgstr "é baseado em/inclui vários pacotes de software livres, listados abaixo." + +#: usr/local/www/license.php:155 +#, php-format +msgid "The author of %s would like to thank the authors of these software packages for their efforts" +msgstr "O autor de %s gostaria de agradecer aos autores desses pacotes de software pelo seu esforço" + +#: usr/local/www/license.php:158 usr/local/www/license.php:161 +#: usr/local/www/license.php:164 usr/local/www/license.php:168 +#: usr/local/www/license.php:174 usr/local/www/license.php:178 +#: usr/local/www/license.php:181 usr/local/www/license.php:184 +#: usr/local/www/license.php:187 usr/local/www/license.php:191 +#: usr/local/www/license.php:192 usr/local/www/license.php:194 +#: usr/local/www/license.php:200 usr/local/www/license.php:201 +#: usr/local/www/license.php:204 usr/local/www/license.php:211 +#: usr/local/www/license.php:169 +msgid "Copyright" +msgstr "Direito de cópia" + +#: usr/local/www/license.php:158 +msgid " 1994-2003 FreeBSD, Inc. All rights reserved" +msgstr " 1994-2003 FreeBSD, Inc. Todos os direitos reservados" + +#: usr/local/www/license.php:160 +msgid "This product includes PHP, freely available from" +msgstr "Esse produto inclui PHP, disponível de graça por" + +#: usr/local/www/license.php:161 +msgid "1999 - 2003 The PHP Group. All rights reserved" +msgstr "1999 - 2003 The PHP Group. Todos os direitos reservados" + +#: usr/local/www/license.php:163 +msgid "LightTPD" +msgstr "LightTPD" + +#: usr/local/www/license.php:164 +msgid " 2004 by Jan Kneschke " +msgstr " 2004 por Jan Kneschke " + +#: usr/local/www/license.php:165 usr/local/www/license.php:175 +msgid "All rights reserved." +msgstr "Todos os direitos reservados." + +#: usr/local/www/license.php:167 +msgid "ISC DHCP server " +msgstr "Servidor ISC DHCP " + +#: usr/local/www/license.php:168 +msgid "1996-2003 Internet Software Consortium. All rights reserved." +msgstr "1996-2003 Internet Software Consortium. Todos os direitos reservados." + +#: usr/local/www/license.php:173 +msgid "MPD - Multi-link PPP daemon for FreeBSD" +msgstr "MDP - daemon PPP Multi-link para FreeBSSD" + +#: usr/local/www/license.php:177 +msgid "Circular log support for FreeBSD syslogd " +msgstr "Suporte de log circular para syslodg do FreeBSD" + +#: usr/local/www/license.php:180 +msgid "Dnsmasq - a DNS forwarder for NAT firewalls" +msgstr "Dnsmasq - um DNS forwarder para firewalls NAT" + +#: usr/local/www/license.php:183 +msgid "Racoon" +msgstr "Racoon" + +#: usr/local/www/license.php:184 +msgid "1995-2002 WIDE Project. All rights reserved." +msgstr "1995-2002 WIDE Project. Todos os direitos reservados." + +#: usr/local/www/license.php:186 +msgid "msntp" +msgstr "msntp" + +#: usr/local/www/license.php:187 +msgid " 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. All rights reserved." +msgstr " 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. Todos os direitos reservados." + +#: usr/local/www/license.php:190 +msgid "UCD-SNMP" +msgstr "UCD-SNMP" + +#: usr/local/www/license.php:191 +msgid "1989, 1991, 1992 by Carnegie Mellon University." +msgstr "1989, 1991, 1992 by Carnegie Mellon University." + +#: usr/local/www/license.php:192 +msgid "1996, 1998-2000 The Regents of the University of California. All rights reserved" +msgstr "1996, 1998-2000 The Regents of the University of California. Todos os direitos reservados" + +#: usr/local/www/license.php:194 +msgid "2001-2002, Network Associates Technology, Inc. All rights reserved." +msgstr "2001-2002, Network Associates Technology, Inc. Todos os direitos reservados." + +#: usr/local/www/license.php:196 +msgid "Portions of this code are copyright" +msgstr "Porções desse código tem direitos de cópia" + +#: usr/local/www/license.php:196 +msgid "2001-2002, Cambridge Broadband Ltd. All rights reserved." +msgstr "2001-2002, Cambridge Broadband Ltd. Todos os direitos reservados." + +#: usr/local/www/license.php:199 +msgid "choparp" +msgstr "choparp" + +#: usr/local/www/license.php:203 +msgid "BPALogin" +msgstr "BPALogin" + +#: usr/local/www/license.php:203 +msgid "lightweight portable BIDS2 login client" +msgstr "cliente de login BIDS2 leve e portável" + +#: usr/local/www/license.php:204 +msgid " 2001-3 Shane Hyde, and others." +msgstr " 2001-3 Shane Hyde, e outros." + +#: usr/local/www/license.php:206 +msgid "php-radius" +msgstr "php-radius" + +#: usr/local/www/license.php:207 +msgid "Copyright 2000, 2001, 2002 by Edwin Groothuis. All rights reserved." +msgstr "Direito de cópia 2000, 2001, 2002 por Edwin Groothuis. Todos os direitos reservados." + +#: usr/local/www/license.php:208 +msgid "This product includes software developed by Edwin Groothuis." +msgstr "Esse produto inclui software desenvolvido por Edwin Groothuis." + +#: usr/local/www/license.php:210 +msgid "wol" +msgstr "wol" + +#: usr/local/www/license.php:214 +msgid "Copyright (C) 2002-2005 OpenVPN Solutions LLC " +msgstr "Direito de cópia (C) 2002-2005 OpenVPN Solutions LLC " + +#: usr/local/www/load_balancer_pool.php:72 +#: usr/local/www/load_balancer_relay_protocol.php:71 +msgid "This entry cannot be deleted because it is still referenced by at least one virtual server." +msgstr "Essa entrada não pode ser apagada porque ela ainda é referenciada por pelo menos um servidor virtual." + +#: usr/local/www/load_balancer_pool.php:111 +#: usr/local/www/status_lb_pool.php:113 +#: usr/local/www/load_balancer_pool.php:109 +#, php-format +msgid "The load balancer configuration has been changed%sYou must apply the changes in order for them to take effect." +msgstr "A configuração do balanceador de carga foi modificada%sVocê deve aplicar as mudanças para que elas tenham efeito." + +#: usr/local/www/load_balancer_pool.php:133 +#: usr/local/www/status_lb_pool.php:132 usr/local/www/status_lb_vs.php:79 +#: usr/local/www/system_authservers.php:424 +#: usr/local/www/system_groupmanager.php:243 +#: usr/local/www/system_groupmanager_addprivs.php:171 +#: usr/local/www/system_usermanager.php:443 +#: usr/local/www/system_usermanager_addprivs.php:170 +#: usr/local/www/system_usermanager_settings.php:116 +#: usr/local/www/system_usermanager.php:441 +#: usr/local/www/system_groupmanager_addprivs.php:169 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/load_balancer_pool.php:132 +#: usr/local/www/system_authservers.php:429 +#: usr/local/www/system_authservers.php:436 +#: usr/local/www/system_usermanager_settings.php:118 +#: usr/local/www/system_groupmanager.php:246 +#: usr/local/www/system_authservers.php:447 +msgid "Servers" +msgstr "Servidores" + +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:223 +#: usr/local/www/status_gateways.php:74 usr/local/www/status_lb_pool.php:133 +#: usr/local/www/load_balancer_pool_edit.php:240 +#: usr/local/www/load_balancer_pool.php:136 +#: usr/local/www/status_gateways.php:75 +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/load_balancer_pool.php:134 +msgid "Monitor" +msgstr "Monitor" + +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/load_balancer_pool.php:150 +#: usr/local/www/load_balancer_pool.php:148 +#, php-format +msgid "The Load Balancer in %s 2.0 is for server load balancing, not Multi-WAN. For load balancing or failover for multiple WANs, use " +msgstr "O Load Balancer em %s 2.0 é para balanceamento de carga do servidor, não Multi-WAN. Para balanceamento de carga ou failover para WANs múltiplas, use" + +#: usr/local/www/load_balancer_pool.php:150 +#: usr/local/www/status_gateway_groups.php:48 +#: usr/local/www/status_gateway_groups.php:52 +#: usr/local/www/status_gateways.php:63 +#: usr/local/www/system_gateway_groups.php:52 +#: usr/local/www/system_gateway_groups.php:88 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/load_balancer_pool.php:151 +#: usr/local/www/system_gateway_groups.php:89 +#: usr/local/www/status_gateways.php:64 +#: usr/local/www/status_gateway_groups.php:66 +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/system_gateway_groups.php:53 +#: usr/local/www/system_gateway_groups.php:98 +msgid "Gateway Groups" +msgstr "Grupos de Gateway" + +#: usr/local/www/pkg.php:358 usr/local/www/pkg.php:456 +msgid "Do you really want to delete this item?" +msgstr "Você realmente deseja apagar esse item?" + +#: usr/local/www/status_wireless.php:83 usr/local/www/status_wireless.php:84 +msgid "Rescan has been initiated in the background. Refresh this page in 10 seconds to see the results." +msgstr "Rescan foi iniciado em background. Atualize essa página em 10 segundos para ver os resultados." + +#: usr/local/www/status_wireless.php:97 usr/local/www/status_wireless.php:93 +#: usr/local/www/status_wireless.php:94 +msgid "Nearby access points or ad-hoc peers" +msgstr "Pontos de acesso próximos ou peers ad-hoc" + +#: usr/local/www/status_wireless.php:143 usr/local/www/status_wireless.php:140 +#: usr/local/www/status_wireless.php:141 +msgid "Associated or ad-hoc peers" +msgstr "Associados ou peers ad-hoc" + +#: usr/local/www/system.php:118 usr/local/www/system.php:119 +#: usr/local/www/system.php:112 +msgid "The hostname may only contain the characters a-z, 0-9 and '-'." +msgstr "O nome do host somente pode conter os caracteres de a-z, 0-9 e '-'." + +#: usr/local/www/system.php:121 usr/local/www/system.php:122 +#: usr/local/www/system.php:115 +msgid "The domain may only contain the characters a-z, 0-9, '-' and '.'." +msgstr "O domínio somente pode conter os caracteres de a-z, 0-9, '-' e '.'." + +#: usr/local/www/system.php:131 +msgid "'." +msgstr "'." + +#: usr/local/www/system.php:137 usr/local/www/system.php:143 +#: usr/local/www/system.php:136 +msgid "A valid TCP/IP port must be specified for the webConfigurator port." +msgstr "Uma porta TCP/IP válida deve ser especificada com a porta do webConfigurator." + +#: usr/local/www/system.php:148 usr/local/www/system.php:154 +#: usr/local/www/system.php:147 +#, php-format +msgid "You can not assign a gateway to DNS '%s' server which is on a directly connected network." +msgstr "Você não pode atribuir um gateway para o servidor DNS '%s' que está em uma rede diretamente conectada." + +#: usr/local/www/system.php:157 usr/local/www/system.php:163 +#: usr/local/www/system.php:156 +msgid "The time update interval must be either 0 (disabled) or between 6 and 1440." +msgstr "O intervalo de atualização deve ser 0 (desabilitado) ou entre 6 e 1440." + +#: usr/local/www/system.php:161 usr/local/www/system.php:167 +#: usr/local/www/system.php:160 +msgid "A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'." +msgstr "O nome do Servidor de Tempo NTP somente pode conter caracteres de a-z, 0-9, '-' e '.'." + +#: usr/local/www/system.php:231 usr/local/www/fbegin.inc:85 +#: usr/local/www/fbegin.inc:101 usr/local/www/system.php:242 +#: usr/local/www/fbegin.inc:110 usr/local/www/system.php:235 +#: usr/local/www/fbegin.inc:102 +msgid "General Setup" +msgstr "Configuração Geral" + +#: usr/local/www/system.php:258 usr/local/www/system.php:269 +#: usr/local/www/system.php:262 +msgid "Name of the firewall host, without domain part" +msgstr "Nome do host do firewall, sem a parte de domínio" + +#: usr/local/www/system.php:269 usr/local/www/system.php:280 +#: usr/local/www/system.php:273 +msgid "Do not use 'local' as a domain name. It will cause local hosts running mDNS (avahi, bonjour, etc.) to be unable to resolve local hosts not running mDNS." +msgstr "Não use 'local' como um nome de domínio. Isso fará com que host locais que executam mDNS (avahi, bonjour, etc.) fiquem impossibilitados de resolver hosts locais que não executam mDNS." + +#: usr/local/www/system.php:271 usr/local/www/system.php:282 +#: usr/local/www/system.php:275 +msgid "mycorp.com, home, office, private, etc." +msgstr "mycorp.com, casa, escritório, casa, etc." + +#: usr/local/www/system.php:276 usr/local/www/services_dhcp.php:647 +#: usr/local/www/vpn_pppoe_edit.php:451 usr/local/www/services_dhcpv6.php:590 +#: usr/local/www/services_dhcp.php:660 usr/local/www/system.php:287 +#: usr/local/www/services_dhcpv6.php:667 usr/local/www/vpn_pppoe_edit.php:452 +#: usr/local/www/services_router_advertisements.php:372 +#: usr/local/www/services_dhcp.php:836 usr/local/www/system.php:280 +#: usr/local/www/services_dhcpv6.php:598 +#: usr/local/www/services_dhcp_edit.php:402 +#: usr/local/www/vpn_pppoe_edit.php:455 usr/local/www/services_dhcp.php:850 +#: usr/local/www/services_dhcpv6.php:615 +#: usr/local/www/services_router_advertisements.php:367 +#: usr/local/www/services_dhcp.php:870 usr/local/www/services_dhcp.php:882 +msgid "DNS servers" +msgstr "Servidores DNS" + +#: usr/local/www/system.php:281 usr/local/www/system.php:292 +#: usr/local/www/system.php:285 +msgid "DNS Server" +msgstr "Servidor DNS" + +#: usr/local/www/system.php:283 usr/local/www/system.php:294 +#: usr/local/www/system.php:287 +msgid "Use gateway" +msgstr "Usar gateway" + +#: usr/local/www/system.php:331 usr/local/www/system.php:342 +#: usr/local/www/system.php:335 usr/local/www/system.php:334 +msgid "Enter IP addresses to by used by the system for DNS resolution.These are also used for the DHCP service, DNS forwarder and for PPTP VPN clients." +msgstr "Digite os endereços IP usados pelo sistema para resolução de DNS. Eles também são usados para o serviço de DHCP, DNS Forwarder e para clientes VPN PPTP." + +#: usr/local/www/system.php:336 usr/local/www/system.php:347 +#: usr/local/www/system.php:340 usr/local/www/system.php:339 +msgid "In addition, optionally select the gateway for each DNS server. When using multiple WAN connections there should be at least one unique DNS server per gateway." +msgstr "Além disso, opcionalmente selecione o gateway para cada servidor DNS. Quando usando múltiplas conexões WAN deverá haver pelo menos um único servidor DNS por gateway." + +#: usr/local/www/system.php:343 usr/local/www/system.php:354 +#: usr/local/www/system.php:347 usr/local/www/system.php:346 +msgid "Allow DNS server list to be overridden by DHCP/PPP on WAN" +msgstr "Permite que a lista de servidores DNS seja substituída pelo DHCP/PPP na WAN" + +#: usr/local/www/system.php:346 usr/local/www/system.php:357 +#: usr/local/www/system.php:350 usr/local/www/system.php:349 +#, php-format +msgid "If this option is set, %s will use DNS servers assigned by a DHCP/PPP server on WAN for its own purposes (including the DNS forwarder). However, they will not be assigned to DHCP and PPTP VPN clients." +msgstr "Se essa opção estiver configurada, %s irá usar servidores DNS atribuídos para um servidor DHCP/PPP na WAN para seus próprios propósitos (incluindo o DNS forwarder). No entanto, eles serão atribuídos a clientes DHCP e PPTP VPN." + +#: usr/local/www/system.php:355 usr/local/www/system.php:366 +#: usr/local/www/system.php:359 usr/local/www/system.php:358 +msgid "Do not use the DNS Forwarder as a DNS server for the firewall" +msgstr "Não utilize o DNS Forwarder como um servidor DNS para o firewall" + +#: usr/local/www/system.php:358 usr/local/www/system.php:369 +#: usr/local/www/system.php:362 usr/local/www/system.php:361 +msgid "By default localhost (127.0.0.1) will be used as the first DNS server where the DNS forwarder is enabled, so system can use the DNS forwarder to perform lookups. Checking this box omits localhost from the list of DNS servers." +msgstr "Por padrão localhost (127.0.0.1) será usado como o primeiro servidor DNS onde o encaminhador DNS está habilitado, então o sistema pode usar o encaminhador DNS para fazer buscas. Marcar essa opção omite o localhost da lista de servidores DNS." + +#: usr/local/www/system.php:365 usr/local/www/system.php:376 +#: usr/local/www/system.php:369 usr/local/www/system.php:367 +msgid "Time zone" +msgstr "Fuso horário" + +#: usr/local/www/system.php:377 usr/local/www/system.php:388 +#: usr/local/www/system.php:381 usr/local/www/system.php:379 +msgid "Select the location closest to you" +msgstr "Selecione a localização mais próxima de você" + +#: usr/local/www/system.php:395 usr/local/www/system.php:406 +#: usr/local/www/system.php:399 usr/local/www/system.php:397 +msgid "NTP time server" +msgstr "Servidor NTP" + +#: usr/local/www/system.php:400 usr/local/www/system.php:411 +#: usr/local/www/system.php:404 usr/local/www/system.php:402 +msgid "Use a space to separate multiple hosts (only one required). Remember to set up at least one DNS server if you enter a host name here!" +msgstr "Use um espaço para separar múltiplos hosts (somente um é necessário). Lembre-se de configurar pelo menos um servidor DNS se você informar um nome de host aqui!" + +#: usr/local/www/system.php:411 usr/local/www/system.php:440 +#: usr/local/www/system.php:433 usr/local/www/system.php:431 +msgid "Theme" +msgstr "Tema" + +#: usr/local/www/system.php:435 usr/local/www/system.php:464 +#: usr/local/www/system.php:457 usr/local/www/system.php:455 +msgid "This will change the look and feel of" +msgstr "Isso irá modificar a aparência de " + +#: usr/local/www/interfaces_vlan.php:65 usr/local/www/interfaces_vlan.php:69 +msgid "This VLAN cannot be deleted because it is still being used as an interface." +msgstr "Essa VLAN não pode ser apagada porque ela ainda está sendo usada como uma interface." + +#: usr/local/www/interfaces_vlan.php:78 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_vlan.php:84 +msgid "VLAN" +msgstr "VLAN" + +#: usr/local/www/interfaces_vlan.php:109 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan.php:110 usr/local/www/interfaces_vlan.php:116 +msgid "VLAN tag" +msgstr "Tag VLAN" + +#: usr/local/www/interfaces_vlan.php:125 usr/local/www/interfaces_vlan.php:126 +#: usr/local/www/interfaces_vlan.php:132 +msgid "Do you really want to delete this VLAN?" +msgstr "Você realmente deseja apagar essa VLAN?" + +#: usr/local/www/interfaces_vlan.php:136 usr/local/www/interfaces_vlan.php:137 +#: usr/local/www/interfaces_vlan.php:143 +#, php-format +msgid "Not all drivers/NICs support 802.1Q VLAN tagging properly. On cards that do not explicitly support it, VLAN tagging will still work, but the reduced MTU may cause problems. See the %s handbook for information on supported cards." +msgstr "Nem todos os drivers/NICs suportam tags 802.1Q apropriadamente. Em cartões que não explicitam que a suportam, tags VLAN ainda funcionarão, mas um MTU reduzido pode causar problemas. Veja o livro %s para informações sobre cartões que oferecem este tipo de suporte." + +#: usr/local/www/interfaces_vlan_edit.php:80 +msgid "The VLAN tag must be an integer between 1 and 4094." +msgstr "A tag VLAN deve ser um inteiro entre 1 e 4094." + +#: usr/local/www/interfaces_vlan_edit.php:88 +#: usr/local/www/interfaces_vlan_edit.php:91 +#, php-format +msgid "A VLAN with the tag %s is already defined on this interface." +msgstr "A VLAN com a tag %s já foi definida nessa interface." + +#: usr/local/www/interfaces_vlan_edit.php:95 +#: usr/local/www/interfaces_vlan_edit.php:98 +msgid "A QinQ VLAN exists with this tag please remove it to use this tag with." +msgstr "Uma VLAN QinQ existe com essa tag, por favor, remova-a para usar essa tag." + +#: usr/local/www/interfaces_vlan_edit.php:150 +#: usr/local/www/interfaces_vlan_edit.php:151 +#: usr/local/www/interfaces_vlan_edit.php:154 +msgid "VLAN configuration" +msgstr "Configuração VLAN" + +#: usr/local/www/interfaces_vlan_edit.php:169 +#: usr/local/www/interfaces_vlan_edit.php:170 +#: usr/local/www/interfaces_vlan_edit.php:173 +msgid "Only VLAN capable interfaces will be shown." +msgstr "Somente interfaces que suportam VLAN serão exibidas." + +#: usr/local/www/interfaces_vlan_edit.php:172 +#: usr/local/www/interfaces_vlan_edit.php:173 +#: usr/local/www/interfaces_vlan_edit.php:176 +msgid "VLAN tag " +msgstr "Tag VLAN" + +#: usr/local/www/interfaces_vlan_edit.php:176 +#: usr/local/www/interfaces_vlan_edit.php:177 +#: usr/local/www/interfaces_vlan_edit.php:180 +msgid "802.1Q VLAN tag (between 1 and 4094) " +msgstr "Tag VLAN 802.1Q (entre 1 e 4094)" + +#: usr/local/www/system_firmware.php:82 usr/local/www/system_firmware.php:89 +#: usr/local/www/system_firmware.php:88 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini" +msgstr "O arquivo carregado excede a diretiva upload_max_filesize em php.ini" + +#: usr/local/www/system_firmware.php:84 usr/local/www/system_firmware.php:91 +#: usr/local/www/system_firmware.php:90 +msgid "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" +msgstr "O arquivo carregado excede a diretiva MAX_FILE_SIZE que foi especificado no formulário HTML" + +#: usr/local/www/system_firmware.php:86 usr/local/www/system_firmware.php:93 +#: usr/local/www/system_firmware.php:92 +msgid "The uploaded file was only partially uploaded" +msgstr "O arquivo carregado foi somente carregado parcialmente" + +#: usr/local/www/system_firmware.php:88 usr/local/www/system_firmware.php:95 +#: usr/local/www/system_firmware.php:94 +msgid "No file was uploaded" +msgstr "Nenhum arquivo foi carregado" + +#: usr/local/www/system_firmware.php:90 usr/local/www/system_firmware.php:97 +#: usr/local/www/system_firmware.php:96 +msgid "Missing a temporary folder" +msgstr "Uma pasta temporária está faltando" + +#: usr/local/www/system_firmware.php:92 usr/local/www/system_firmware.php:99 +#: usr/local/www/system_firmware.php:98 +msgid "Failed to write file to disk" +msgstr "Falhou ao escrever um arquivo no disco" + +#: usr/local/www/system_firmware.php:94 usr/local/www/system_firmware.php:101 +#: usr/local/www/system_firmware.php:100 +msgid "File upload stopped by extension" +msgstr "Carregamento de arquivo interrompido pela extensão" + +#: usr/local/www/system_firmware.php:96 usr/local/www/system_firmware.php:103 +#: usr/local/www/system_firmware.php:102 +msgid "Unknown upload error" +msgstr "Erro de carregamento desconhecido" + +#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_settings.php:74 usr/local/www/fbegin.inc:84 +#: usr/local/www/fbegin.inc:100 usr/local/www/fbegin.inc:109 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/system_firmware.php:108 usr/local/www/fbegin.inc:101 +#: usr/local/www/system_firmware_auto.php:61 +msgid "Firmware" +msgstr "Firmware" + +#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:238 +#: usr/local/www/system_firmware_auto.php:79 +#: usr/local/www/system_firmware_check.php:66 +#: usr/local/www/system_firmware_settings.php:110 +#: usr/local/www/system_firmware_restorefullbackup.php:125 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:245 +#: usr/local/www/system_firmware_settings.php:115 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:248 +#: usr/local/www/system_firmware_check.php:64 +#: usr/local/www/system_firmware_settings.php:117 +#: usr/local/www/system_firmware_auto.php:80 +msgid "Manual Update" +msgstr "Atualização Manual" + +#: usr/local/www/system_firmware.php:107 usr/local/www/system_firmware.php:114 +#: usr/local/www/system_firmware.php:113 +msgid "An upgrade is currently in progress.

    The firewall will reboot when the operation is complete." +msgstr "Uma atualização está atualmente em progresso.

    O firewall irá reiniciar quando a operação for completada." + +#: usr/local/www/system_firmware.php:135 usr/local/www/system_firmware.php:142 +#: usr/local/www/system_firmware.php:137 +msgid "Upgrade" +msgstr "Atualização" + +#: usr/local/www/system_firmware.php:154 usr/local/www/system_firmware.php:161 +#: usr/local/www/system_firmware.php:156 +msgid "The uploaded image file is not for this platform." +msgstr "O arquivo de imagem carregado não é dessa plataforma." + +#: usr/local/www/system_firmware.php:157 usr/local/www/system_firmware.php:164 +#: usr/local/www/system_firmware.php:159 +msgid "Image upload failed (out of memory?)" +msgstr "Carregamento de imagem falhou (falta de memória?)" + +#: usr/local/www/system_firmware.php:168 +#: usr/local/www/system_firmware_auto.php:201 +#: usr/local/www/system_firmware.php:175 usr/local/www/system_firmware.php:170 +#: usr/local/www/system_firmware_auto.php:203 +#: usr/local/www/system_firmware_auto.php:199 +msgid "The digital signature on this image is invalid." +msgstr "A assinatura digital nessa imagem é inválida." + +#: usr/local/www/system_firmware.php:170 +#: usr/local/www/system_firmware_auto.php:204 +#: usr/local/www/system_firmware.php:177 usr/local/www/system_firmware.php:172 +#: usr/local/www/system_firmware_auto.php:206 +#: usr/local/www/system_firmware_auto.php:202 +msgid "This image is not digitally signed." +msgstr "Essa imagem não está assinada digitalmente." + +#: usr/local/www/system_firmware.php:172 +#: usr/local/www/system_firmware_auto.php:208 +#: usr/local/www/system_firmware.php:179 usr/local/www/system_firmware.php:174 +#: usr/local/www/system_firmware_auto.php:210 +#: usr/local/www/system_firmware_auto.php:206 +msgid "There has been an error verifying the signature on this image." +msgstr "Ocorreu um erro verificando a assinatura nessa imagem." + +#: usr/local/www/system_firmware.php:175 +#: usr/local/www/system_firmware_auto.php:223 +#: usr/local/www/system_firmware.php:182 usr/local/www/system_firmware.php:177 +#: usr/local/www/system_firmware_auto.php:225 +#: usr/local/www/system_firmware_auto.php:221 +msgid "The image file is corrupt." +msgstr "O arquivo de imagem está corrompido." + +#: usr/local/www/system_firmware.php:188 usr/local/www/system_firmware.php:195 +#: usr/local/www/system_firmware.php:190 +msgid "The firmware is now being updated. The firewall will reboot automatically." +msgstr "O firmware está sendo atualizado. O firewall irá reiniciar automaticamente." + +#: usr/local/www/system_firmware.php:196 usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware.php:204 +#, php-format +msgid "Firmware image missing or other error, please try again %s." +msgstr "A imagem de firmware não foi encontrada ou trata-se de outro erro; por favor, tente novamente %s." + +#: usr/local/www/system_firmware.php:220 usr/local/www/system_firmware.php:227 +#: usr/local/www/system_firmware.php:230 +msgid "This means that the image you uploaded is not an official/supported image and may lead to unexpected behavior or security compromises. Only install images that come from sources that you trust, and make sure that the image has not been tampered with." +msgstr "Isso significa que a imagem que você carregou não é uma imagem oficial/suportada e mode levar a um comportamento inesperado ou comprometimento de segurança. Somente instale imagens que vem de fontes que você confia, e tenha certeza de que a imagem não foi adulterada." + +#: usr/local/www/system_firmware.php:224 usr/local/www/system_firmware.php:231 +#: usr/local/www/system_firmware.php:234 +msgid "Do you want to install this image anyway (on your own risk)?" +msgstr "Você deseja instalar essa imagem mesmo assim (por sua conta e risco)?" + +#: usr/local/www/system_firmware.php:239 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/system_firmware_auto.php:80 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_check.php:67 +#: usr/local/www/system_firmware_settings.php:111 +#: usr/local/www/system_firmware_restorefullbackup.php:126 +#: usr/local/www/system_firmware.php:246 +#: usr/local/www/system_firmware_settings.php:116 +#: usr/local/www/system_firmware.php:249 +#: usr/local/www/system_firmware_check.php:65 +#: usr/local/www/system_firmware_settings.php:118 +#: usr/local/www/system_firmware_auto.php:61 +#: usr/local/www/system_firmware_auto.php:81 +msgid "Auto Update" +msgstr "Auto-Atualização" + +#: usr/local/www/system_firmware.php:240 +#: usr/local/www/system_firmware_auto.php:81 +#: usr/local/www/system_firmware_check.php:68 +#: usr/local/www/system_firmware_settings.php:112 +#: usr/local/www/system_firmware_restorefullbackup.php:127 +#: usr/local/www/system_firmware.php:247 +#: usr/local/www/system_firmware_settings.php:117 +#: usr/local/www/system_firmware.php:250 +#: usr/local/www/system_firmware_check.php:66 +#: usr/local/www/system_firmware_settings.php:119 +#: usr/local/www/system_firmware_auto.php:82 +msgid "Updater Settings" +msgstr "Configurações de Atualizador" + +#: usr/local/www/system_firmware.php:242 +#: usr/local/www/system_firmware_auto.php:83 +#: usr/local/www/system_firmware_check.php:70 +#: usr/local/www/system_firmware_settings.php:114 +#: usr/local/www/system_firmware_restorefullbackup.php:129 +#: usr/local/www/system_firmware.php:249 +#: usr/local/www/system_firmware_settings.php:119 +#: usr/local/www/system_firmware.php:252 +#: usr/local/www/system_firmware_check.php:68 +#: usr/local/www/system_firmware_settings.php:121 +#: usr/local/www/system_firmware_auto.php:84 +msgid "Restore Full Backup" +msgstr "Restaura o backup compelto" + +#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259 +#: usr/local/www/system_firmware.php:262 +msgid "Invoke" +msgstr "Invocar" + +#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259 +#: usr/local/www/system_firmware.php:262 +msgid "Manual Upgrade" +msgstr "Atualização Manual" + +#: usr/local/www/system_firmware.php:259 usr/local/www/system_firmware.php:266 +#: usr/local/www/system_firmware.php:269 +msgid "Enable firmware upload" +msgstr "Habilitar carregamento de firmware" + +#: usr/local/www/system_firmware.php:261 usr/local/www/system_firmware.php:268 +#: usr/local/www/system_firmware.php:271 +#, php-format +msgid "Click \"Enable firmware upload\" to begin." +msgstr "Clique em \"Habilitar atualização de firmware\" para começar." + +#: usr/local/www/system_firmware.php:264 usr/local/www/system_firmware.php:271 +#: usr/local/www/system_firmware.php:274 +msgid "Disable firmware upload" +msgstr "Desabilitar carregamento de firmware" + +#: usr/local/www/system_firmware.php:282 usr/local/www/system_firmware.php:289 +#: usr/local/www/system_firmware.php:292 +msgid "Please select kernel type" +msgstr "Por favor, selecione o tipo de kernel" + +#: usr/local/www/system_firmware.php:284 usr/local/www/system_firmware.php:55 +msgid "Multiprocessor kernel" +msgstr "Kernel Multiprocessador" + +#: usr/local/www/system_firmware.php:285 usr/local/www/system_firmware.php:56 +msgid "Uniprocessor kernel" +msgstr "Kernel Uniprocessador" + +#: usr/local/www/system_firmware.php:286 usr/local/www/system_firmware.php:57 +msgid "Embedded kernel" +msgstr "Kernel embutido" + +#: usr/local/www/system_firmware.php:287 usr/local/www/system_firmware.php:58 +msgid "Developers kernel" +msgstr "Kernel de desenvolvedores" + +#: usr/local/www/system_firmware.php:298 +#: usr/local/www/system_firmware_check.php:103 +#: usr/local/www/system_firmware.php:304 usr/local/www/system_firmware.php:303 +#: usr/local/www/system_firmware_check.php:104 +#: usr/local/www/system_firmware_check.php:98 +msgid "Perform full backup prior to upgrade" +msgstr "Realizar backup completo antes da atualização" + +#: usr/local/www/system_firmware.php:300 usr/local/www/system_firmware.php:306 +msgid "Upgrade firmware" +msgstr "Atualizar firmware" + +#: usr/local/www/system_firmware.php:301 usr/local/www/system_firmware.php:307 +msgid "Click \"Upgrade firmware\" to start the upgrade process." +msgstr "Clique em \"Atualizar firmware\" para iniciar o processo de atualização." + +#: usr/local/www/system_firmware.php:303 usr/local/www/system_firmware.php:309 +msgid "You must reboot the system before you can upgrade the firmware." +msgstr "Você deve reiniciar o sistema antes que possa atualizar o firmware." + +#: usr/local/www/system_firmware.php:316 usr/local/www/system_firmware.php:322 +#: usr/local/www/system_firmware.php:320 +msgid "Warning:" +msgstr "Advertência:" + +#: usr/local/www/system_firmware.php:319 usr/local/www/system_firmware.php:325 +#: usr/local/www/system_firmware.php:323 +msgid "DO NOT abort the firmware upgrade once it has started. The firewall will reboot automatically after storing the new firmware. The configuration will be maintained." +msgstr "NÃO aborde a atualização do firmware uma vez que a iniciou. O firewall irá reiniciar automaticamente após armazenar um novo firmware. A configuração será mantida." + +#: usr/local/www/system_firmware_auto.php:115 +#: usr/local/www/system_firmware_auto.php:113 +msgid "Beginning firmware upgrade" +msgstr "Iniciando atualização de firmware" + +#: usr/local/www/system_firmware_auto.php:133 +#: usr/local/www/system_firmware_auto.php:135 +#: usr/local/www/system_firmware_auto.php:131 +msgid "Downloading current version information" +msgstr "Fazendo download de informações da versão atual" + +#: usr/local/www/system_firmware_auto.php:148 +#: usr/local/www/system_firmware_auto.php:157 +#: usr/local/www/system_firmware_check.php:141 +#: usr/local/www/system_firmware_check.php:143 +#: usr/local/www/system_firmware_auto.php:150 +#: usr/local/www/system_firmware_auto.php:159 +#: usr/local/www/system_firmware_check.php:135 +#: usr/local/www/system_firmware_auto.php:146 +#: usr/local/www/system_firmware_auto.php:155 +msgid "Unable to check for updates." +msgstr "Desabilitar verificações por atualizações." + +#: usr/local/www/system_firmware_auto.php:162 +#: usr/local/www/system_firmware_auto.php:164 +#: usr/local/www/system_firmware_auto.php:160 +msgid "Downloading updates" +msgstr "Baixando atualizações" + +#: usr/local/www/system_firmware_auto.php:172 +#: usr/local/www/system_firmware_auto.php:174 +#: usr/local/www/system_firmware_auto.php:170 +msgid "download complete." +msgstr "download completo." + +#: usr/local/www/system_firmware_auto.php:174 +#: usr/local/www/system_firmware_check.php:159 +#: usr/local/www/system_firmware_check.php:161 +#: usr/local/www/system_firmware_auto.php:176 +#: usr/local/www/system_firmware_check.php:153 +#: usr/local/www/system_firmware_auto.php:172 +msgid "You are on the latest version." +msgstr "Você possui a última versão." + +#: usr/local/www/system_firmware_auto.php:214 +#: usr/local/www/system_firmware_auto.php:216 +#: usr/local/www/system_firmware_auto.php:212 +msgid "Update cannot continue. You can disable this check on the Updater Settings tab." +msgstr "A atualização não pode continuar. Você pode desabilitar esta verificação na aba Configurações de Atualização. " + +#: usr/local/www/system_firmware_auto.php:219 +#: usr/local/www/system_firmware_auto.php:221 +#: usr/local/www/system_firmware_auto.php:217 +msgid "Upgrade Image does not contain a signature but the system has been configured to allow unsigned images. One moment please..." +msgstr "A imagem de atualização não possui uma assinatura, porém o sistema pode ser configurado para permiti-las. Um momento por favor..." + +#: usr/local/www/system_firmware_auto.php:224 +#: usr/local/www/system_firmware_auto.php:226 +#: usr/local/www/system_firmware_auto.php:222 +msgid "Update cannot continue" +msgstr "Atualização não pode continuar" + +#: usr/local/www/system_firmware_auto.php:235 +#: usr/local/www/system_firmware_auto.php:237 +#: usr/local/www/system_firmware_auto.php:233 +msgid "Downloading complete but sha256 does not match." +msgstr "Download completo mas sha256 não corresponde." + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:234 +msgid "Auto upgrade aborted." +msgstr "Auto-atualização abortada." + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:234 +msgid "Downloaded SHA256" +msgstr "Download de SHA256 feito" + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:234 +msgid "Needed SHA256" +msgstr "SHA256 necessário" + +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:240 +#: usr/local/www/system_firmware_auto.php:236 +msgid "is now upgrading." +msgstr "está agora atualizando." + +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:240 +#: usr/local/www/system_firmware_auto.php:236 +msgid "The firewall will reboot once the operation is completed." +msgstr "O firewall irá reiniciar uma vez que a operação estiver completa." + +#: usr/local/www/system_firmware_auto.php:256 +#: usr/local/www/system_firmware_auto.php:258 +msgid "Auto Update Download Status" +msgstr "Status de Download de Auto-Atualização" + +#: usr/local/www/system_firmware_auto.php:258 +#: usr/local/www/system_firmware_auto.php:260 +msgid "Current Version" +msgstr "Versão Atual" + +#: usr/local/www/system_firmware_auto.php:259 +#: usr/local/www/system_firmware_auto.php:261 +msgid "Latest Version" +msgstr "Última Versão" + +#: usr/local/www/system_firmware_auto.php:260 +#: usr/local/www/system_firmware_auto.php:262 +msgid "File size" +msgstr "Tamanho do arquivo" + +#: usr/local/www/system_firmware_auto.php:261 +#: usr/local/www/system_firmware_auto.php:263 +msgid "Downloaded" +msgstr "Baixado" + +#: usr/local/www/system_firmware_auto.php:262 +#: usr/local/www/system_firmware_auto.php:264 +msgid "Percent" +msgstr "Por cento" + +#: usr/local/www/system_firmware_check.php:107 +#: usr/local/www/system_firmware_check.php:109 +#: usr/local/www/system_firmware_check.php:101 +msgid "Invoke Auto Upgrade" +msgstr "Invocar Auto-Atualização" + +#: usr/local/www/system_firmware_check.php:125 +#: usr/local/www/system_firmware_check.php:127 +#: usr/local/www/system_firmware_check.php:119 +msgid "Downloading new version information..." +msgstr "Fazendo download de informações de nova versão..." + +#: usr/local/www/system_firmware_check.php:143 +#: usr/local/www/system_firmware_check.php:145 +#: usr/local/www/system_firmware_check.php:137 +msgid "Could not contact custom update server." +msgstr "Não pode contactar servidor de atualização personalizado." + +#: usr/local/www/system_firmware_check.php:145 +#: usr/local/www/system_firmware_check.php:147 +#: usr/local/www/system_firmware_check.php:139 +#, php-format +msgid "Could not contact %1$s update server %2$s%3$s" +msgstr "Não pode contactar o servidor de atualização %1$s %2$s%3$s" + +#: usr/local/www/system_firmware_check.php:147 +#: usr/local/www/system_firmware_check.php:149 +#: usr/local/www/system_firmware_check.php:141 +msgid "Obtaining current version information..." +msgstr "Obtendo informações da versão atual..." + +#: usr/local/www/system_firmware_check.php:172 +#: usr/local/www/system_firmware_check.php:174 +#: usr/local/www/system_firmware_check.php:178 +msgid "A new version is now available" +msgstr "Uma nova versão está disponível agora" + +#: usr/local/www/system_firmware_check.php:173 +#: usr/local/www/system_firmware_check.php:175 +#: usr/local/www/system_firmware_check.php:179 +msgid "Current version" +msgstr "Versão atual" + +#: usr/local/www/system_firmware_check.php:175 +#: usr/local/www/system_firmware_check.php:177 +#: usr/local/www/system_firmware_check.php:181 +msgid "NanoBSD Size" +msgstr "Tamanho do NanoBSD" + +#: usr/local/www/system_firmware_check.php:177 +#: usr/local/www/system_firmware_check.php:179 +#: usr/local/www/system_firmware_check.php:183 +msgid "Built On" +msgstr "Construído em" + +#: usr/local/www/system_firmware_check.php:178 +#: usr/local/www/system_firmware_check.php:180 +#: usr/local/www/system_firmware_check.php:184 +msgid "New version" +msgstr "Nova versão" + +#: usr/local/www/system_firmware_check.php:179 +#: usr/local/www/system_firmware_check.php:181 +#: usr/local/www/system_firmware_check.php:185 +msgid "Update source" +msgstr "Fonte de atualização" + +#: usr/local/www/system_firmware_settings.php:122 +#: usr/local/www/system_firmware_settings.php:127 +#: usr/local/www/system_firmware_settings.php:129 +msgid "Firmware Branch" +msgstr "Firmware Branch" + +#: usr/local/www/system_firmware_settings.php:126 +#: usr/local/www/system_firmware_settings.php:131 +#: usr/local/www/system_firmware_settings.php:133 +msgid "Default Auto Update URLs" +msgstr "URLs de Auto Atualização Padrão" + +#: usr/local/www/system_firmware_settings.php:142 +#: usr/local/www/system_firmware_settings.php:147 +#: usr/local/www/system_firmware_settings.php:156 +#: usr/local/www/system_firmware_settings.php:158 +msgid "Firmware Auto Update URL" +msgstr "URL de Auto Atualização de Firmware" + +#: usr/local/www/system_firmware_settings.php:144 +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:158 +#: usr/local/www/system_firmware_settings.php:160 +msgid "Use a URL server for firmware upgrades other than" +msgstr "Use um servidor de URL para atualização de firmware que não " + +#: usr/local/www/system_firmware_settings.php:146 +#: usr/local/www/pkg_mgr_settings.php:109 +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_firmware_settings.php:160 +#: usr/local/www/system_firmware_settings.php:162 +#: usr/local/www/pkg_mgr_settings.php:108 +msgid "Base URL:" +msgstr "URL Base:" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +msgid "This is where" +msgstr "Isso é onde" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +msgid "will check for newer firmware versions when the" +msgstr "irá verificar versões mais novas de firmware quando o " + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +msgid "System: Firmware: Auto Update" +msgstr "Sistema: Firmware: Auto-Atualização" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/pkg_mgr_settings.php:111 +msgid "page is viewed." +msgstr "página é visualizada." + +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_firmware_settings.php:156 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_firmware_settings.php:167 +#, php-format +msgid "When a custom URL is enabled, the system will not verify the digital signature from %s." +msgstr "Quando uma URL personalizada estiver habilitada, o sistema não verificará a assinatura digital de %s." + +#: usr/local/www/system_firmware_settings.php:159 +#: usr/local/www/system_firmware_settings.php:164 +#: usr/local/www/system_firmware_settings.php:173 +#: usr/local/www/system_firmware_settings.php:175 +msgid "Updates" +msgstr "Atualizações" + +#: usr/local/www/system_firmware_settings.php:162 +#: usr/local/www/system_firmware_settings.php:167 +#: usr/local/www/system_firmware_settings.php:176 +#: usr/local/www/system_firmware_settings.php:178 +msgid "Unsigned images" +msgstr "Imagens não assinadas" + +#: usr/local/www/system_firmware_settings.php:166 +#: usr/local/www/system_firmware_settings.php:171 +#: usr/local/www/system_firmware_settings.php:180 +#: usr/local/www/system_firmware_settings.php:182 +msgid "Allow auto-update firmware images with a missing or invalid digital signature to be used." +msgstr "Permitir atualizar automaticamente imagens de firmware sem assinatura digital ou com assinatura inválida." + +#: usr/local/www/system_firmware_settings.php:174 +#: usr/local/www/system_firmware_settings.php:187 +#: usr/local/www/system_firmware_settings.php:196 +#: usr/local/www/system_firmware_settings.php:198 +msgid "Gitsync" +msgstr "Gitsync" + +#: usr/local/www/system_firmware_settings.php:177 +#: usr/local/www/system_firmware_settings.php:190 +#: usr/local/www/system_firmware_settings.php:199 +#: usr/local/www/system_firmware_settings.php:201 +msgid "Auto sync on update" +msgstr "Auto sincronização na atualização" + +#: usr/local/www/system_firmware_settings.php:181 +#: usr/local/www/system_firmware_settings.php:194 +#: usr/local/www/system_firmware_settings.php:203 +#: usr/local/www/system_firmware_settings.php:205 +msgid "After updating, sync with the following repository/branch before reboot." +msgstr "Após atualizar, sincronize com o seguinte repositório/ramo antes de reiniciar." + +#: usr/local/www/system_firmware_settings.php:193 +#: usr/local/www/system_firmware_settings.php:206 +#: usr/local/www/system_firmware_settings.php:215 +#: usr/local/www/system_firmware_settings.php:217 +msgid "Repository URL" +msgstr "URL do repositório" + +#: usr/local/www/system_firmware_settings.php:198 +#: usr/local/www/system_firmware_settings.php:211 +#: usr/local/www/system_firmware_settings.php:220 +#: usr/local/www/system_firmware_settings.php:222 +#, php-format +msgid "The most recently used repository was %s" +msgstr "O repositório mais recentemente utilizado foi %s" + +#: usr/local/www/system_firmware_settings.php:200 +#: usr/local/www/system_firmware_settings.php:213 +#: usr/local/www/system_firmware_settings.php:222 +#: usr/local/www/system_firmware_settings.php:224 +msgid "This will be used if the field is left blank." +msgstr "Isto será usado se o campo for deixado em branco." + +#: usr/local/www/system_firmware_settings.php:219 +#: usr/local/www/system_firmware_settings.php:232 +#: usr/local/www/system_firmware_settings.php:241 +#: usr/local/www/system_firmware_settings.php:243 +msgid "Branch name" +msgstr "Nome do ramo" + +#: usr/local/www/system_firmware_settings.php:224 +#: usr/local/www/system_firmware_settings.php:237 +#: usr/local/www/system_firmware_settings.php:246 +#: usr/local/www/system_firmware_settings.php:248 +#, php-format +msgid "The most recently used branch was %s" +msgstr "O branch mais recentemente utilizado foi %s" + +#: usr/local/www/system_firmware_settings.php:227 +#: usr/local/www/system_firmware_settings.php:240 +#: usr/local/www/system_firmware_settings.php:249 +#: usr/local/www/system_firmware_settings.php:251 +msgid "Usually the branch name is master" +msgstr "Normalmente o nome do branch é master" + +#: usr/local/www/system_firmware_settings.php:230 +#: usr/local/www/system_firmware_settings.php:243 +#: usr/local/www/system_firmware_settings.php:252 +#: usr/local/www/system_firmware_settings.php:254 +msgid "Note: Sync will not be performed if a branch is not specified." +msgstr "Nota: A sincronização não será realizada se um branch não for especificado." + +#: usr/local/www/system_routes.php:52 usr/local/www/system_routes.php:94 +#: usr/local/www/system_routes_edit.php:165 +#: usr/local/www/system_routes_edit.php:198 usr/local/www/system_routes.php:98 +#: usr/local/www/system_routes_edit.php:227 +#: usr/local/www/system_routes.php:113 +#: usr/local/www/system_routes_edit.php:229 +#: usr/local/www/system_routes_edit.php:231 +msgid "Static Routes" +msgstr "Rotas Estáticas" + +#: usr/local/www/system_routes.php:83 +msgid "removed route to" +msgstr "removida a rota para" + +#: usr/local/www/system_routes.php:107 usr/local/www/system_routes.php:111 +#: usr/local/www/system_routes.php:126 +#, php-format +msgid "The static route configuration has been changed.%sYou must apply the changes in order for them to take effect." +msgstr "A configuração da rota estática foi modificada.%sVocê deve aplicar as mudanças para que tenham efeito." + +#: usr/local/www/system_routes.php:115 usr/local/www/fbegin.inc:159 +#: usr/local/www/status_gateway_groups.php:64 +#: usr/local/www/status_gateway_groups.php:75 +#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:62 +#: usr/local/www/system_gateway_groups.php:108 +#: usr/local/www/system_gateway_groups.php:121 +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways.php:120 usr/local/www/system_gateways.php:141 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/diag_logs_routing.php:83 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/fbegin.inc:176 usr/local/www/diag_logs_resolver.php:97 +#: usr/local/www/diag_logs.php:96 usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/diag_logs_wireless.php:85 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_gateways.php:97 +#: usr/local/www/diag_logs_routing.php:84 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/fbegin.inc:184 usr/local/www/diag_logs_resolver.php:98 +#: usr/local/www/system_gateway_groups.php:109 +#: usr/local/www/system_gateway_groups.php:122 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/status_gateways.php:63 +#: usr/local/www/diag_logs_wireless.php:86 +#: usr/local/www/diag_logs_gateways.php:98 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/status_gateway_groups.php:76 +#: usr/local/www/system_routes.php:119 usr/local/www/fbegin.inc:175 +#: usr/local/www/system_gateway_groups_edit.php:150 +#: usr/local/www/system_gateway_groups.php:118 +#: usr/local/www/system_gateway_groups.php:131 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_routes.php:134 +msgid "Gateways" +msgstr "Gateways" + +#: usr/local/www/system_routes.php:116 usr/local/www/fbegin.inc:204 +#: usr/local/www/system_gateway_groups.php:109 +#: usr/local/www/system_gateways.php:142 usr/local/www/fbegin.inc:222 +#: usr/local/www/fbegin.inc:230 usr/local/www/system_gateway_groups.php:110 +#: usr/local/www/system_routes.php:120 +#: usr/local/www/system_gateway_groups.php:119 +#: usr/local/www/system_routes.php:135 +msgid "Routes" +msgstr "Rotas" + +#: usr/local/www/system_routes.php:161 usr/local/www/system_routes.php:172 +#: usr/local/www/system_routes.php:176 usr/local/www/system_routes.php:192 +msgid "Do you really want to delete this route?" +msgstr "Você realmente deseja apagar essa rota?" + +#: usr/local/www/system_routes.php:188 usr/local/www/system_routes.php:199 +#: usr/local/www/system_routes.php:203 usr/local/www/system_routes.php:219 +msgid "Do not enter static routes for networks assigned on any interface of this firewall. Static routes are only used for networks reachable via a different router, and not reachable via your default gateway." +msgstr "Não informe rotas estáticas para redes atribuídas a qualquer interface desse firewall. Rotas estáticas são somente usadas em redes alcançáveis através de um roteador diferente, e não alcançáveis através de seu gateway padrão." + +#: usr/local/www/system_routes_edit.php:89 +#: usr/local/www/system_routes_edit.php:179 +#: usr/local/www/system_routes_edit.php:90 +#: usr/local/www/system_routes_edit.php:216 +#: usr/local/www/system_routes_edit.php:217 +#: usr/local/www/system_routes_edit.php:93 +#: usr/local/www/system_routes_edit.php:244 +#: usr/local/www/system_routes_edit.php:246 +#: usr/local/www/system_routes_edit.php:95 +#: usr/local/www/system_routes_edit.php:248 +msgid "Destination network" +msgstr "Rede de destino" + +#: usr/local/www/system_routes_edit.php:90 +#: usr/local/www/system_routes_edit.php:91 +#: usr/local/www/system_routes_edit.php:94 +#: usr/local/www/system_routes_edit.php:96 +msgid "Destination network bit count" +msgstr "Contagem de bits de rede de destino" + +#: usr/local/www/system_routes_edit.php:96 +#: usr/local/www/system_routes_edit.php:97 +#: usr/local/www/system_routes_edit.php:100 +#: usr/local/www/system_routes_edit.php:102 +msgid "A valid IPv4 or IPv6 destination network must be specified." +msgstr "Uma rede de destino IPV4 ou IPV6 válida deve ser especificada." + +#: usr/local/www/system_routes_edit.php:99 +#: usr/local/www/system_routes_edit.php:100 +#: usr/local/www/system_routes_edit.php:103 +#: usr/local/www/system_routes_edit.php:105 +msgid "A valid destination network bit count must be specified." +msgstr "Um contador de bits de rede de destino deve ser especificado." + +#: usr/local/www/system_routes_edit.php:114 +#: usr/local/www/system_routes_edit.php:118 +#: usr/local/www/system_routes_edit.php:121 +#: usr/local/www/system_routes_edit.php:123 +msgid "A IPv4 subnet can not be over 32 bits." +msgstr "Uma subrede IPv4 não pode ser superior a 32bits." + +#: usr/local/www/system_routes_edit.php:123 +msgid "A route to this destination network already exists." +msgstr "Uma rota para essa rede de destino já existe." + +#: usr/local/www/system_routes_edit.php:165 +#: usr/local/www/system_routes_edit.php:198 +#: usr/local/www/system_routes_edit.php:227 +#: usr/local/www/system_routes_edit.php:229 +#: usr/local/www/system_routes_edit.php:231 +msgid "Edit route" +msgstr "Editar rota" + +#: usr/local/www/system_routes_edit.php:176 +#: usr/local/www/system_routes_edit.php:213 +#: usr/local/www/system_routes_edit.php:214 +#: usr/local/www/system_routes_edit.php:241 +#: usr/local/www/system_routes_edit.php:243 +#: usr/local/www/system_routes_edit.php:245 +msgid "Edit route entry" +msgstr "Editar entrada de rota" + +#: usr/local/www/system_routes_edit.php:196 +#: usr/local/www/system_routes_edit.php:228 +#: usr/local/www/system_routes_edit.php:229 +#: usr/local/www/system_routes_edit.php:256 +#: usr/local/www/system_routes_edit.php:257 +#: usr/local/www/system_routes_edit.php:259 +msgid "Destination network for this static route" +msgstr "Rede de destino para essa rota estática" + +#: usr/local/www/system_routes_edit.php:212 +#: usr/local/www/system_routes_edit.php:244 +#: usr/local/www/system_routes_edit.php:245 +#: usr/local/www/system_routes_edit.php:272 +#: usr/local/www/system_routes_edit.php:274 +#: usr/local/www/system_routes_edit.php:276 +msgid "Choose which gateway this route applies to or" +msgstr "Escolha em qual gateway essa rota se aplica ou " + +#: usr/local/www/system_routes_edit.php:228 +#: usr/local/www/system_routes_edit.php:260 +#: usr/local/www/system_routes_edit.php:261 +#: usr/local/www/system_routes_edit.php:287 +#: usr/local/www/system_routes_edit.php:291 +#: usr/local/www/system_routes_edit.php:293 +msgid "Default gateway:" +msgstr "Gateway padrão:" + +#: usr/local/www/system_routes_edit.php:231 +#: usr/local/www/system_routes_edit.php:263 +#: usr/local/www/system_routes_edit.php:264 +#: usr/local/www/system_routes_edit.php:290 +#: usr/local/www/system_routes_edit.php:294 +#: usr/local/www/system_routes_edit.php:296 +msgid "Interface:" +msgstr "Interface:" + +#: usr/local/www/system_routes_edit.php:243 +#: usr/local/www/system_routes_edit.php:275 +#: usr/local/www/system_routes_edit.php:276 +#: usr/local/www/system_routes_edit.php:302 +#: usr/local/www/system_routes_edit.php:308 +#: usr/local/www/system_routes_edit.php:310 +msgid "Gateway IP:" +msgstr "IP do Gateway:" + +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/system_routes_edit.php:374 +#: usr/local/www/system_routes_edit.php:375 +#: usr/local/www/system_routes_edit.php:399 +#: usr/local/www/system_routes_edit.php:409 +#: usr/local/www/system_routes_edit.php:411 +#, php-format +msgid "You can manage Gateways %shere%s." +msgstr "Você pode gerenciar Gateways %saqui%s." + +#: usr/local/www/system_routes_edit.php:337 +#: usr/local/www/system_routes_edit.php:377 +#: usr/local/www/system_routes_edit.php:378 +#: usr/local/www/system_routes_edit.php:402 +#: usr/local/www/system_routes_edit.php:412 +#: usr/local/www/system_routes_edit.php:414 +msgid "Sorry, we could not create your gateway at this time." +msgstr "Lamento, não pudemos criar seu gateway dessa vez." + +#: usr/local/www/diag_logs_filter_summary.php:34 +msgid "Firewall Log Summary" +msgstr "Resumo de Log do Firewall" + +#: usr/local/www/diag_logs_filter_summary.php:45 +#: usr/local/www/load_balancer_relay_protocol_edit.php:230 +#: usr/local/www/load_balancer_relay_protocol_edit.php:228 +#: usr/local/www/diag_logs_filter_summary.php:46 +msgid "Actions" +msgstr "Ações" + +#: usr/local/www/diag_logs_filter_summary.php:47 +#: usr/local/www/diag_logs_filter_summary.php:48 +msgid "Protocols" +msgstr "Protocolos" + +#: usr/local/www/diag_logs_filter_summary.php:48 +#: usr/local/www/diag_logs_filter_summary.php:49 +msgid "Source IPs" +msgstr "IPs de Origem" + +#: usr/local/www/diag_logs_filter_summary.php:49 +#: usr/local/www/diag_logs_filter_summary.php:50 +msgid "Destination IPs" +msgstr "IPs de Destino" + +#: usr/local/www/diag_logs_filter_summary.php:50 +#: usr/local/www/diag_logs_filter_summary.php:51 +msgid "Source Ports" +msgstr "Portas de Origem" + +#: usr/local/www/diag_logs_filter_summary.php:51 +#: usr/local/www/diag_logs_filter_summary.php:52 +msgid "Destination Ports" +msgstr "Portas de Destino" + +#: usr/local/www/diag_logs_filter_summary.php:71 +#: usr/local/www/diag_logs_filter_summary.php:72 +msgid "data" +msgstr "dados" + +#: usr/local/www/diag_logs_filter_summary.php:208 +#: usr/local/www/diag_logs_filter_summary.php:207 +#, php-format +msgid "This is a firewall log summary, of the last %1$s lines of the firewall log (Max %2$s)." +msgstr "Esse é um sumário do log do firewall, das últimas %1$s linhas do log do firewall (Max %2$s)." + +#: usr/local/www/diag_logs_filter_summary.php:209 +#: usr/local/www/diag_logs_filter_summary.php:208 +msgid "NOTE: IE8 users must enable compatibility view." +msgstr "Nota: Usuários do IE8 precisam habilitar o modo de compatibilidade." + +#: usr/local/www/uploadconfig.php:48 +msgid "ERR Could not save configuration." +msgstr "ERRO Não pôde salvar configuração." + +#: usr/local/www/uploadconfig.php:54 +msgid "OK" +msgstr "OK" + +#: usr/local/www/uploadconfig.php:57 +msgid "ERR Could not install configuration." +msgstr "ERRO: Não pôde instalar configuração." + +#: usr/local/www/uploadconfig.php:60 +msgid "ERR Invalid configuration received." +msgstr "ERRO Configuração inválida recebida." + +#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86 +#: usr/local/www/vpn_ipsec_mobile.php:303 usr/local/www/vpn_ipsec.php:133 +#: usr/local/www/vpn_ipsec_mobile.php:330 usr/local/www/vpn_ipsec_keys.php:85 +#: usr/local/www/vpn_ipsec.php:139 +msgid "The IPsec tunnel configuration has been changed" +msgstr "A configuração de túnvel IPsec foi modificada" + +#: usr/local/www/vpn_ipsec.php:141 usr/local/www/vpn_ipsec_keys.php:93 +#: usr/local/www/vpn_ipsec_mobile.php:318 +#: usr/local/www/vpn_ipsec_phase1.php:497 +#: usr/local/www/vpn_ipsec_phase2.php:381 +#: usr/local/www/vpn_ipsec_phase2.php:407 usr/local/www/vpn_ipsec.php:140 +#: usr/local/www/vpn_ipsec_mobile.php:345 usr/local/www/vpn_ipsec_keys.php:92 +#: usr/local/www/vpn_ipsec_phase2.php:473 +#: usr/local/www/vpn_ipsec_phase1.php:496 usr/local/www/vpn_ipsec.php:146 +#: usr/local/www/vpn_ipsec_phase1.php:517 +#: usr/local/www/vpn_ipsec_phase2.php:495 +msgid "Tunnels" +msgstr "Túneis" + +#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94 +#: usr/local/www/vpn_ipsec_mobile.php:319 +#: usr/local/www/vpn_ipsec_phase1.php:498 +#: usr/local/www/vpn_ipsec_phase2.php:382 +#: usr/local/www/vpn_ipsec_phase2.php:408 usr/local/www/vpn_ipsec.php:141 +#: usr/local/www/vpn_ipsec_mobile.php:346 usr/local/www/vpn_ipsec_keys.php:93 +#: usr/local/www/vpn_ipsec_phase2.php:474 +#: usr/local/www/vpn_ipsec_phase1.php:497 usr/local/www/vpn_ipsec.php:147 +#: usr/local/www/vpn_ipsec_phase1.php:518 +#: usr/local/www/vpn_ipsec_phase2.php:496 +msgid "Mobile clients" +msgstr "Clientes móveis" + +#: usr/local/www/vpn_ipsec.php:143 usr/local/www/vpn_ipsec_keys.php:95 +#: usr/local/www/vpn_ipsec_mobile.php:320 +#: usr/local/www/vpn_ipsec_phase1.php:499 +#: usr/local/www/vpn_ipsec_phase2.php:383 +#: usr/local/www/vpn_ipsec_phase2.php:409 +msgid "Pre-shared keys" +msgstr "Chaves pre-compartilhadas" + +#: usr/local/www/vpn_ipsec.php:160 usr/local/www/vpn_ipsec.php:159 +#: usr/local/www/vpn_ipsec.php:165 +msgid "Enable IPsec" +msgstr "Habilitar IPsec" + +#: usr/local/www/vpn_ipsec.php:221 usr/local/www/vpn_ipsec.php:351 +#: usr/local/www/vpn_ipsec_phase2.php:552 usr/local/www/vpn_ipsec.php:232 +#: usr/local/www/vpn_ipsec.php:362 usr/local/www/vpn_ipsec_phase2.php:578 +#: usr/local/www/vpn_ipsec.php:231 usr/local/www/vpn_ipsec.php:361 +#: usr/local/www/vpn_ipsec_phase2.php:680 usr/local/www/vpn_ipsec.php:237 +#: usr/local/www/vpn_ipsec.php:367 usr/local/www/vpn_ipsec_phase2.php:701 +msgid "auto" +msgstr "auto" + +#: usr/local/www/vpn_ipsec.php:223 usr/local/www/vpn_ipsec.php:353 +#: usr/local/www/system_camanager.php:465 +#: usr/local/www/system_certmanager.php:578 +#: usr/local/www/vpn_ipsec_phase2.php:563 +#: usr/local/www/vpn_openvpn_server.php:864 usr/local/www/vpn_ipsec.php:234 +#: usr/local/www/vpn_ipsec.php:364 usr/local/www/system_certmanager.php:677 +#: usr/local/www/vpn_openvpn_server.php:937 +#: usr/local/www/system_camanager.php:466 +#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/vpn_ipsec.php:233 +#: usr/local/www/vpn_ipsec.php:363 usr/local/www/vpn_openvpn_server.php:965 +#: usr/local/www/vpn_ipsec_phase2.php:691 +#: usr/local/www/system_camanager.php:473 usr/local/www/vpn_ipsec.php:239 +#: usr/local/www/vpn_ipsec.php:369 usr/local/www/system_certmanager.php:686 +#: usr/local/www/vpn_openvpn_server.php:992 +#: usr/local/www/vpn_ipsec_phase2.php:712 +#: usr/local/www/system_certmanager.php:687 +msgid "bits" +msgstr "bits" + +#: usr/local/www/vpn_ipsec.php:243 usr/local/www/vpn_ipsec.php:254 +#: usr/local/www/vpn_ipsec.php:253 usr/local/www/vpn_ipsec.php:259 +msgid "edit phase1 entry" +msgstr "editar entrada de fase 1" + +#: usr/local/www/vpn_ipsec.php:247 usr/local/www/vpn_ipsec.php:258 +#: usr/local/www/vpn_ipsec.php:257 usr/local/www/vpn_ipsec.php:263 +msgid "Do you really want to delete this phase1 and all associated phase2 entries?" +msgstr "Você realmente deseja apagar essa fase 1 e todas as entradas de fase 2 associadas?" + +#: usr/local/www/vpn_ipsec.php:248 usr/local/www/vpn_ipsec.php:259 +#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:264 +msgid "delete phase1 entry" +msgstr "apagar entrada de fase 1" + +#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:269 +#: usr/local/www/vpn_ipsec.php:268 usr/local/www/vpn_ipsec.php:274 +msgid "copy phase1 entry" +msgstr "copiar entrada de fase 1" + +#: usr/local/www/vpn_ipsec.php:279 usr/local/www/vpn_ipsec.php:290 +#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:295 +#, php-format +msgid "Show %s Phase-2 entries" +msgstr "Exibir entradas de fase 2 %s" + +#: usr/local/www/vpn_ipsec.php:285 usr/local/www/vpn_ipsec.php:296 +#: usr/local/www/vpn_ipsec.php:295 usr/local/www/vpn_ipsec.php:301 +msgid "Local Subnet" +msgstr "Subrede Local" + +#: usr/local/www/vpn_ipsec.php:286 usr/local/www/vpn_ipsec.php:297 +#: usr/local/www/vpn_ipsec.php:296 usr/local/www/vpn_ipsec.php:302 +msgid "Remote Subnet" +msgstr "Subrede Remota" + +#: usr/local/www/vpn_ipsec.php:288 usr/local/www/vpn_ipsec.php:299 +#: usr/local/www/vpn_ipsec.php:298 usr/local/www/vpn_ipsec.php:304 +msgid "P2 Protocol" +msgstr "Protocolo da F2" + +#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:300 +#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:305 +msgid "P2 Transforms" +msgstr "Transformações da F2" + +#: usr/local/www/vpn_ipsec.php:290 usr/local/www/vpn_ipsec.php:301 +#: usr/local/www/vpn_ipsec.php:300 usr/local/www/vpn_ipsec.php:306 +msgid "P2 Auth Methods" +msgstr "Métodos de Autenticação da F2" + +#: usr/local/www/vpn_ipsec.php:293 usr/local/www/vpn_ipsec.php:304 +#: usr/local/www/vpn_ipsec.php:303 usr/local/www/vpn_ipsec.php:309 +msgid "add phase2 entry" +msgstr "adicionar entrada de fase 2" + +#: usr/local/www/vpn_ipsec.php:373 usr/local/www/vpn_ipsec.php:384 +#: usr/local/www/vpn_ipsec.php:383 usr/local/www/vpn_ipsec.php:389 +msgid "edit phase2 entry" +msgstr "editar entradas de fase 2" + +#: usr/local/www/vpn_ipsec.php:375 usr/local/www/vpn_ipsec.php:386 +#: usr/local/www/vpn_ipsec.php:385 usr/local/www/vpn_ipsec.php:391 +msgid "Do you really want to delete this phase2 entry?" +msgstr "Você realmente deseja apagar essa entrada de fase 2?" + +#: usr/local/www/vpn_ipsec.php:376 usr/local/www/vpn_ipsec.php:387 +#: usr/local/www/vpn_ipsec.php:386 usr/local/www/vpn_ipsec.php:392 +msgid "delete phase2 entry" +msgstr "apagar entrada de fase 2" + +#: usr/local/www/vpn_ipsec.php:379 usr/local/www/vpn_ipsec.php:390 +#: usr/local/www/vpn_ipsec.php:389 usr/local/www/vpn_ipsec.php:395 +msgid "add a new Phase 2 based on this one" +msgstr "adicionar um nova Fase 2 baseada na atual" + +#: usr/local/www/vpn_ipsec.php:410 usr/local/www/vpn_ipsec.php:421 +#: usr/local/www/vpn_ipsec.php:420 usr/local/www/vpn_ipsec.php:426 +msgid "add phase1 entry" +msgstr "adicionar entrada de fase 1" + +#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435 +#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440 +msgid "You can check your IPsec status at" +msgstr "Você pode verificar seu status do IPsec em" + +#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435 +#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440 +msgid "Status:IPsec" +msgstr "Status:IPsec" + +#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:436 +#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441 +msgid "IPsec Debug Mode can be enabled at" +msgstr "Modo de Debug do IPsec pode ser habilitado em" + +#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:426 +#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:437 +#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441 +#: usr/local/www/vpn_ipsec.php:442 +msgid "System:Advanced:Miscellaneous" +msgstr "Sistema:Avançado: Diversos" + +#: usr/local/www/vpn_ipsec.php:426 usr/local/www/vpn_ipsec.php:437 +#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:442 +msgid "IPsec can be set to prefer older SAs at" +msgstr "IPsec pode ser configurado utilizar os antigos SAs" + +#: usr/local/www/vpn_ipsec.php:456 usr/local/www/vpn_ipsec.php:467 +#: usr/local/www/vpn_ipsec.php:466 usr/local/www/vpn_ipsec.php:472 +msgid "Remote Gateway" +msgstr "Gateway remoto" + +#: usr/local/www/vpn_ipsec.php:458 usr/local/www/vpn_ipsec.php:469 +#: usr/local/www/vpn_ipsec.php:468 usr/local/www/vpn_ipsec.php:474 +msgid "P1 Protocol" +msgstr "Protocolo P1" + +#: usr/local/www/vpn_ipsec.php:459 usr/local/www/vpn_ipsec.php:470 +#: usr/local/www/vpn_ipsec.php:469 usr/local/www/vpn_ipsec.php:475 +msgid "P1 Transforms" +msgstr "Transformações P1" + +#: usr/local/www/vpn_ipsec.php:460 usr/local/www/vpn_ipsec.php:471 +#: usr/local/www/vpn_ipsec.php:470 usr/local/www/vpn_ipsec.php:476 +msgid "P1 Description" +msgstr "Descrição P1" + +#: usr/local/www/diag_logs_ppp.php:91 usr/local/www/diag_logs_ppp.php:90 +#: usr/local/www/diag_logs_ppp.php:88 +#, php-format +msgid "Last %s PPP log entries" +msgstr "Últimas %s entradas de log PPP" + +#: usr/local/www/diag_logs_relayd.php:87 usr/local/www/diag_logs_relayd.php:86 +#, php-format +msgid "Last %s Load Balancer log entries" +msgstr "Últimas %s entradas de log no Balanceador de Carga" + +#: usr/local/www/graph.php:112 +msgid "In" +msgstr "Entrada" + +#: usr/local/www/graph.php:113 +msgid "Out" +msgstr "Saída" + +#: usr/local/www/graph.php:117 +msgid "Switch to bytes/s" +msgstr "Alterar para bytes/s" + +#: usr/local/www/graph.php:118 +msgid "AutoScale" +msgstr "Auto Dimensionamento" + +#: usr/local/www/graph.php:120 +msgid "Graph shows last" +msgstr "Gráfico mostra últimos" + +#: usr/local/www/graph.php:195 +msgid "Switch to" +msgstr "Alternar para" + +#: usr/local/www/graph.php:201 +msgid "follow" +msgstr "seguir" + +#: usr/local/www/graph.php:361 +msgid "Kbps" +msgstr "Kbps" + +#: usr/local/www/graph.php:363 +msgid "Mbps" +msgstr "Mbps" + +#: usr/local/www/graph.php:365 +msgid "Gbps" +msgstr "Gbps" + +#: usr/local/www/graph.php:371 +msgid "KB/s" +msgstr "KB/s" + +#: usr/local/www/graph.php:373 +msgid "MB/s" +msgstr "MB/s" + +#: usr/local/www/graph.php:375 +msgid "GB/s" +msgstr "BG/s" + +#: usr/local/www/diag_patterns.php:43 +#: usr/local/www/services_captiveportal_filemanager.php:195 +#: usr/local/www/exec.php:290 usr/local/www/exec.php:300 +#: usr/local/www/exec.php:292 usr/local/www/exec.php:302 +#: usr/local/www/services_captiveportal_filemanager.php:192 +msgid "Upload" +msgstr "Carregar" + +#: usr/local/www/diag_patterns.php:46 +msgid "Uploaded file to" +msgstr "Arquivo carregado em" + +#: usr/local/www/diag_patterns.php:49 +msgid "Warning: You must upload a file with .pat extension." +msgstr "Atenção: Você deve fazer o carregamento de um arquivo com extensão .pat." + +#: usr/local/www/diag_patterns.php:58 +msgid "Add layer7 pattern" +msgstr "Adicionar amostra de camada 7" + +#: usr/local/www/diag_patterns.php:69 +msgid "Upload layer7 pattern file" +msgstr "Upload de arquivo padrão Layer7" + +#: usr/local/www/diag_patterns.php:72 +msgid "File to upload:" +msgstr "Arquivo para carregar:" + +#: usr/local/www/diag_patterns.php:80 usr/local/www/diag_patterns.php:43 +msgid "Upload Pattern file" +msgstr "Enviar arquivo de padrões" + +#: usr/local/www/vpn_ipsec_keys.php:64 +msgid "Deleted IPsec Pre-Shared Key" +msgstr "Chave pré-compartilhada IPsec apagada" + +#: usr/local/www/vpn_ipsec_keys.php:71 +msgid "VPN: IPsec: Keys" +msgstr "VPN: IPsec: Chaves" + +#: usr/local/www/vpn_ipsec_keys.php:104 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:128 +#: usr/local/www/vpn_ipsec_keys.php:103 +#: usr/local/www/vpn_ipsec_keys_edit.php:127 +msgid "Identifier" +msgstr "Identificador" + +#: usr/local/www/vpn_ipsec_keys.php:105 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:136 +msgid "Pre-shared key" +msgstr "Chave pre-compartilhada" + +#: usr/local/www/vpn_ipsec_keys.php:110 usr/local/www/vpn_ipsec_keys.php:146 +#: usr/local/www/vpn_ipsec_keys.php:109 usr/local/www/vpn_ipsec_keys.php:145 +msgid "add key" +msgstr "adicionar chave" + +#: usr/local/www/vpn_ipsec_keys.php:123 usr/local/www/vpn_ipsec_keys.php:136 +#: usr/local/www/vpn_ipsec_keys.php:122 usr/local/www/vpn_ipsec_keys.php:135 +msgid "edit key" +msgstr "editar chave" + +#: usr/local/www/vpn_ipsec_keys.php:137 +msgid "Do you really want to delete this pre-shared key?" +msgstr "Você realmente deseja apagar essa chave pre-compartilhada?" + +#: usr/local/www/vpn_ipsec_keys.php:137 usr/local/www/vpn_ipsec_keys.php:136 +msgid "delete key" +msgstr "apagar chave" + +#: usr/local/www/vpn_ipsec_keys_edit.php:74 +msgid "The identifier contains invalid characters." +msgstr "O identificados contém caracteres inválidos." + +#: usr/local/www/vpn_ipsec_keys_edit.php:77 +msgid "A user with this name already exists. Add the key to the user instead." +msgstr "Um usuário com esse nome já existe. Ao invés disso, adicione a chave ao usuário." + +#: usr/local/www/vpn_ipsec_keys_edit.php:83 +msgid "Another entry with the same identifier already exists." +msgstr "Outra entrada com o mesmo identificador já existe." + +#: usr/local/www/vpn_ipsec_keys_edit.php:100 +msgid "Edited" +msgstr "Editado" + +#: usr/local/www/vpn_ipsec_keys_edit.php:103 +msgid "Added" +msgstr "Adicionado" + +#: usr/local/www/vpn_ipsec_keys_edit.php:114 +msgid "VPN: IPsec: Edit pre-shared key" +msgstr "VPN: IPsec: Editar chave pré-compartilhada" + +#: usr/local/www/vpn_ipsec_keys_edit.php:132 +#: usr/local/www/vpn_ipsec_keys_edit.php:131 +msgid "This can be either an IP address, fully qualified domain name or an e-mail address" +msgstr "Isso pode ser tanto um endereço IP, um nome de domínio completamente qualificado quanto um endereço de e-mail" + +#: usr/local/www/vpn_ipsec_mobile.php:128 +#: usr/local/www/vpn_ipsec_mobile.php:132 +msgid "User Authentication Source" +msgstr "Fonte de Autenticação de Usuário" + +#: usr/local/www/vpn_ipsec_mobile.php:128 +#: usr/local/www/vpn_ipsec_mobile.php:132 +msgid "Group Authentication Source" +msgstr "Fonte de Autenticação de Grupo" + +#: usr/local/www/vpn_ipsec_mobile.php:134 +#: usr/local/www/vpn_ipsec_mobile.php:138 +msgid "A valid IP address for 'Virtual Address Pool Network' must be specified." +msgstr "Um endereço IP válido para 'Rede de Pool de Endereços Virtuais' deve ser especificado." + +#: usr/local/www/vpn_ipsec_mobile.php:138 +#: usr/local/www/vpn_ipsec_mobile.php:142 +msgid "A valid value for 'DNS Default Domain' must be specified." +msgstr "Um valor válido para 'Domínio Padrão de DNS' deve ser especificado." + +#: usr/local/www/vpn_ipsec_mobile.php:143 +#: usr/local/www/vpn_ipsec_mobile.php:159 +msgid "At least one DNS server must be specified to enable the DNS Server option." +msgstr "Pelo menos um servidor DNS deve ser especificado para habilitar a opção de Servidor DNS." + +#: usr/local/www/vpn_ipsec_mobile.php:145 +#: usr/local/www/vpn_ipsec_mobile.php:161 +msgid "A valid IP address for 'DNS Server #1' must be specified." +msgstr "Um endereço IP válido para 'Servidor DNS #1' deve ser especificado." + +#: usr/local/www/vpn_ipsec_mobile.php:147 +#: usr/local/www/vpn_ipsec_mobile.php:163 +msgid "A valid IP address for 'DNS Server #2' must be specified." +msgstr "Um endereço IP válido para 'Servidor DNS #2' deve ser especificado." + +#: usr/local/www/vpn_ipsec_mobile.php:149 +#: usr/local/www/vpn_ipsec_mobile.php:165 +msgid "A valid IP address for 'DNS Server #3' must be specified." +msgstr "Um endereço IP válido para 'Servidor DNS #3' deve ser especificado." + +#: usr/local/www/vpn_ipsec_mobile.php:151 +#: usr/local/www/vpn_ipsec_mobile.php:167 +msgid "A valid IP address for 'DNS Server #4' must be specified." +msgstr "Um endereço IP válido para 'Servidor DNS #4' deve ser especificado." + +#: usr/local/www/vpn_ipsec_mobile.php:156 +#: usr/local/www/vpn_ipsec_mobile.php:172 +msgid "At least one WINS server must be specified to enable the DNS Server option." +msgstr "Pelo menos um servidor WInS deve ser especificado para habilitar a opção de Servidor DNS." + +#: usr/local/www/vpn_ipsec_mobile.php:158 +#: usr/local/www/vpn_ipsec_mobile.php:174 +msgid "A valid IP address for 'WINS Server #1' must be specified." +msgstr "Um endereço IP válido para 'Servidor WINS #1' deve ser especificado." + +#: usr/local/www/vpn_ipsec_mobile.php:160 +#: usr/local/www/vpn_ipsec_mobile.php:176 +msgid "A valid IP address for 'WINS Server #2' must be specified." +msgstr "Um endereço IP válido para 'Servidor WINS #2' deve ser especificado." + +#: usr/local/www/vpn_ipsec_mobile.php:165 +#: usr/local/www/vpn_ipsec_mobile.php:181 +msgid "A valid value for 'Login Banner' must be specified." +msgstr "Um valor válido para 'Banner de Login' deve ser especificado." + +#: usr/local/www/vpn_ipsec_mobile.php:220 +#: usr/local/www/vpn_ipsec_mobile.php:240 +msgid "Mobile" +msgstr "Móvel" + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "Support for IPsec Mobile clients is enabled but a Phase1 definition was not found" +msgstr "Suporte a clientes Móveis IPsec está habilitado mas a definição da Fase 1 não foi encontrada" + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "Please click Create to define one." +msgstr "Por favor, clique em Criar para definir uma." + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "Create Phase1" +msgstr "Criar Fase 1" + +#: usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/vpn_ipsec_mobile.php:357 +msgid "IKE Extensions" +msgstr "Extensões IKE" + +#: usr/local/www/vpn_ipsec_mobile.php:339 +#: usr/local/www/vpn_ipsec_mobile.php:366 +msgid "Enable IPsec Mobile Client Support" +msgstr "Habilitar Suporte de Clientes Móveis IPsec" + +#: usr/local/www/vpn_ipsec_mobile.php:350 +#: usr/local/www/vpn_ipsec_mobile.php:377 +msgid "Extended Authentication (Xauth)" +msgstr "Autenticação Extendida (Xauth)" + +#: usr/local/www/vpn_ipsec_mobile.php:354 +#: usr/local/www/vpn_ipsec_mobile.php:381 +msgid "User Authentication" +msgstr "Autenticação de Usuário" + +#: usr/local/www/vpn_ipsec_mobile.php:358 +#: usr/local/www/vpn_ipsec_mobile.php:379 +#: usr/local/www/vpn_ipsec_mobile.php:404 +msgid "system" +msgstr "sistema" + +#: usr/local/www/vpn_ipsec_mobile.php:375 +#: usr/local/www/vpn_ipsec_mobile.php:399 +msgid "Group Authentication" +msgstr "Autenticação de Grupo" + +#: usr/local/www/vpn_ipsec_mobile.php:388 +#: usr/local/www/vpn_ipsec_mobile.php:413 +msgid "Client Configuration (mode-cfg)" +msgstr "Configuração de Cliente (mode-cfg)" + +#: usr/local/www/vpn_ipsec_mobile.php:392 +#: usr/local/www/vpn_ipsec_mobile.php:417 +msgid "Virtual Address Pool" +msgstr "Pool de Endereços Virtuais" + +#: usr/local/www/vpn_ipsec_mobile.php:401 +#: usr/local/www/vpn_ipsec_mobile.php:426 +msgid "Provide a virtual IP address to clients" +msgstr "Fornece um endereço IP virtual para clientes" + +#: usr/local/www/vpn_ipsec_mobile.php:424 +#: usr/local/www/vpn_ipsec_mobile.php:449 +msgid "Network List" +msgstr "Lista de Redes" + +#: usr/local/www/vpn_ipsec_mobile.php:433 +#: usr/local/www/vpn_ipsec_mobile.php:458 +msgid "Provide a list of accessible networks to clients" +msgstr "Fornece uma lista de redes acessíveis para clientes" + +#: usr/local/www/vpn_ipsec_mobile.php:440 +#: usr/local/www/vpn_ipsec_mobile.php:465 +msgid "Save Xauth Password" +msgstr "Salvar Senha Xauth" + +#: usr/local/www/vpn_ipsec_mobile.php:449 +#: usr/local/www/vpn_ipsec_mobile.php:474 +msgid "Allow clients to save Xauth passwords (Cisco VPN client only)." +msgstr "Permite clientes para salvar senhas Xauth (somente cliente VPN da Cisco)." + +#: usr/local/www/vpn_ipsec_mobile.php:450 +#: usr/local/www/vpn_ipsec_mobile.php:475 +msgid "NOTE: With iPhone clients, this does not work when deployed via the iPhone configuration utility, only by manual entry." +msgstr "NOTA: Com clientes de iPhone, isso não funciona quando instalado via a ferramentas de configuração do iPhone, somente por entrada manual." + +#: usr/local/www/vpn_ipsec_mobile.php:457 +#: usr/local/www/vpn_openvpn_csc.php:433 +#: usr/local/www/vpn_openvpn_server.php:1194 +#: usr/local/www/vpn_openvpn_server.php:1336 +#: usr/local/www/vpn_ipsec_mobile.php:482 +#: usr/local/www/vpn_openvpn_csc.php:432 +#: usr/local/www/vpn_openvpn_server.php:1378 +#: usr/local/www/vpn_openvpn_server.php:1430 +msgid "DNS Default Domain" +msgstr "Domínio Padrão do DNS" + +#: usr/local/www/vpn_ipsec_mobile.php:466 +#: usr/local/www/vpn_openvpn_csc.php:443 +#: usr/local/www/vpn_openvpn_server.php:1204 +#: usr/local/www/vpn_openvpn_server.php:1346 +#: usr/local/www/vpn_ipsec_mobile.php:491 +#: usr/local/www/vpn_openvpn_csc.php:442 +#: usr/local/www/vpn_openvpn_server.php:1388 +#: usr/local/www/vpn_openvpn_server.php:1440 +msgid "Provide a default domain name to clients" +msgstr "Fornece um nome de domínio padrão para clientes" + +#: usr/local/www/vpn_ipsec_mobile.php:480 +#: usr/local/www/vpn_openvpn_csc.php:458 +#: usr/local/www/vpn_openvpn_server.php:1219 +#: usr/local/www/vpn_openvpn_server.php:1361 +#: usr/local/www/vpn_ipsec_mobile.php:529 +#: usr/local/www/vpn_openvpn_csc.php:457 +#: usr/local/www/vpn_openvpn_server.php:1403 +#: usr/local/www/vpn_openvpn_server.php:1455 +msgid "DNS Servers" +msgstr "Servidores DNS" + +#: usr/local/www/vpn_ipsec_mobile.php:489 +#: usr/local/www/vpn_openvpn_csc.php:468 +#: usr/local/www/vpn_openvpn_server.php:1229 +#: usr/local/www/vpn_openvpn_server.php:1371 +#: usr/local/www/vpn_ipsec_mobile.php:538 +#: usr/local/www/vpn_openvpn_csc.php:467 +#: usr/local/www/vpn_openvpn_server.php:1413 +#: usr/local/www/vpn_openvpn_server.php:1465 +msgid "Provide a DNS server list to clients" +msgstr "Fornece uma lista de servidores DNS para clientes" + +#: usr/local/www/vpn_ipsec_mobile.php:522 +#: usr/local/www/vpn_openvpn_csc.php:606 +#: usr/local/www/vpn_openvpn_server.php:1367 +#: usr/local/www/vpn_openvpn_server.php:1509 +#: usr/local/www/vpn_ipsec_mobile.php:571 +#: usr/local/www/vpn_openvpn_csc.php:605 +#: usr/local/www/vpn_openvpn_server.php:1551 +#: usr/local/www/vpn_openvpn_server.php:1603 +msgid "WINS Servers" +msgstr "Servidores WINS" + +#: usr/local/www/vpn_ipsec_mobile.php:531 +#: usr/local/www/vpn_openvpn_csc.php:616 +#: usr/local/www/vpn_openvpn_server.php:1377 +#: usr/local/www/vpn_openvpn_server.php:1519 +#: usr/local/www/vpn_ipsec_mobile.php:580 +#: usr/local/www/vpn_openvpn_csc.php:615 +#: usr/local/www/vpn_openvpn_server.php:1561 +#: usr/local/www/vpn_openvpn_server.php:1613 +msgid "Provide a WINS server list to clients" +msgstr "Fornece uma lista de servidores WINS para clientes" + +#: usr/local/www/vpn_ipsec_mobile.php:552 +#: usr/local/www/vpn_ipsec_mobile.php:601 +msgid "Phase2 PFS Group" +msgstr "Grupo Phase2 PFS" + +#: usr/local/www/vpn_ipsec_mobile.php:561 +#: usr/local/www/vpn_ipsec_mobile.php:610 +msgid "Provide the Phase2 PFS group to clients ( overrides all mobile phase2 settings )" +msgstr "Fornece o grupo PFS da Fase 2 para clientes (substitui todas as configurações de dispositivos móveis da fase 2)" + +#: usr/local/www/vpn_ipsec_mobile.php:568 +#: usr/local/www/system_groupmanager.php:71 +#: usr/local/www/vpn_ipsec_mobile.php:617 +msgid "Group" +msgstr "Grupo" + +#: usr/local/www/vpn_ipsec_mobile.php:582 +#: usr/local/www/vpn_ipsec_mobile.php:631 +msgid "Login Banner" +msgstr "Banner de Login" + +#: usr/local/www/vpn_ipsec_mobile.php:591 +#: usr/local/www/vpn_ipsec_mobile.php:640 +msgid "Provide a login banner to clients" +msgstr "Fornece um banner de login para clientes" + +#: usr/local/www/interfaces_lagg.php:70 usr/local/www/interfaces_lagg.php:74 +msgid "This LAGG interface cannot be deleted because it is still being used." +msgstr "Essa interface LAGG não pode ser apagada porque ainda está sendo usada." + +#: usr/local/www/interfaces_lagg.php:140 usr/local/www/interfaces_lagg.php:141 +#: usr/local/www/interfaces_lagg.php:145 +msgid "LAGG allows for link aggregation, bonding and fault tolerance. Only unassigned interfaces can be added to LAGG." +msgstr "LAGG permite a agregação de link, tolerância de laços e falhas. Somente interfaces não atribuídas podem ser adicionadas a LAGG." + +#: usr/local/www/interfaces_lagg_edit.php:86 +#: usr/local/www/interfaces_lagg_edit.php:88 +msgid "Lagg protocol" +msgstr "Protocolo Lagg" + +#: usr/local/www/interfaces_lagg_edit.php:131 +#: usr/local/www/interfaces_lagg_edit.php:132 +#: usr/local/www/interfaces_lagg_edit.php:145 +msgid "LAGG configuration" +msgstr "Configuração LAGG" + +#: usr/local/www/interfaces_lagg_edit.php:149 +#: usr/local/www/interfaces_lagg_edit.php:150 +#: usr/local/www/interfaces_lagg_edit.php:163 +msgid "Choose the members that will be used for the link aggregation" +msgstr "Escolha os membros que serão usados para a agregação de link" + +#: usr/local/www/interfaces_lagg_edit.php:152 +#: usr/local/www/interfaces_lagg_edit.php:153 +#: usr/local/www/interfaces_lagg_edit.php:166 +msgid "Lag proto" +msgstr "Lag proto" + +#: usr/local/www/interfaces_lagg_edit.php:168 +#: usr/local/www/interfaces_lagg_edit.php:169 +#: usr/local/www/interfaces_lagg_edit.php:182 +#: usr/local/www/interfaces_lagg_edit.php:181 +msgid "failover" +msgstr "failover" + +#: usr/local/www/interfaces_lagg_edit.php:169 +#: usr/local/www/interfaces_lagg_edit.php:170 +#: usr/local/www/interfaces_lagg_edit.php:183 +#: usr/local/www/interfaces_lagg_edit.php:182 +msgid "Sends and receives traffic only through the master port. If the master port becomes unavailable, the next active port is used. The first interface added is the master port; any interfaces added after that are used as failover devices." +msgstr "Envia e recebe tráfego somente através da porta master. Se a porta master de tornar indisponível, a próxima porta ativa é usada. A primeira interface adicionada é a porta master; qualquer interface adicionada depois disso serão usadas como dispositivos failover." + +#: usr/local/www/interfaces_lagg_edit.php:174 +#: usr/local/www/interfaces_lagg_edit.php:175 +#: usr/local/www/interfaces_lagg_edit.php:188 +#: usr/local/www/interfaces_lagg_edit.php:187 +msgid "fec" +msgstr "fec" + +#: usr/local/www/interfaces_lagg_edit.php:174 +#: usr/local/www/interfaces_lagg_edit.php:175 +#: usr/local/www/interfaces_lagg_edit.php:188 +#: usr/local/www/interfaces_lagg_edit.php:187 +msgid "Supports Cisco EtherChannel. This is a static setup and does not negotiate aggregation with the peer or exchange frames to monitor the link." +msgstr "Suporta Cisco EtherChannel. Esta é uma instalação estática e não negocia agregações com o peer ou troca frames para monitorar o link." + +#: usr/local/www/interfaces_lagg_edit.php:178 +#: usr/local/www/interfaces_lagg_edit.php:179 +#: usr/local/www/interfaces_lagg_edit.php:192 +#: usr/local/www/interfaces_lagg_edit.php:191 +msgid "lacp" +msgstr "lacp" + +#: usr/local/www/interfaces_lagg_edit.php:178 +#: usr/local/www/interfaces_lagg_edit.php:179 +#: usr/local/www/interfaces_lagg_edit.php:192 +#: usr/local/www/interfaces_lagg_edit.php:191 +msgid "Supports the IEEE 802.3ad Link Aggregation Control Protocol (LACP) and the Marker Protocol. LACP will negotiate a set of aggregable links with the peer in to one or more Link Aggregated Groups. Each LAG is composed of ports of the same speed, set to full-duplex operation. The traffic will be balanced across the ports in the LAG with the greatest total speed, in most cases there will only be one LAG which contains all ports. In the event of changes in physical connectivity, Link Aggregation will quickly converge to a new configuration." +msgstr "Suporta o Protocolo de Controle de Agregação de Link (LACP) da IEEE 802.3ad e o Protocolo Marker. LACP negociará um conjunto de links agregáveis com o peer em um ou mais Grupos de Links Agregados. Cada LAG é composto de portas da mesma velocidade, configurado para uma operação full-duplex. O tráfego será balanceado através das portas no LAG com a velocidade total maior, na maioria dos casos haverá somente um LAG que contém todas as portas. No momento em que houver mudanças na conexão física, a Agregação do Link será rapidamente convergida para uma nova configuração." + +#: usr/local/www/interfaces_lagg_edit.php:189 +#: usr/local/www/interfaces_lagg_edit.php:190 +#: usr/local/www/interfaces_lagg_edit.php:203 +#: usr/local/www/interfaces_lagg_edit.php:202 +msgid "loadbalance" +msgstr "loadbalance" + +#: usr/local/www/interfaces_lagg_edit.php:189 +#: usr/local/www/interfaces_lagg_edit.php:190 +#: usr/local/www/interfaces_lagg_edit.php:203 +#: usr/local/www/interfaces_lagg_edit.php:202 +msgid "Balances outgoing traffic across the active ports based on hashed protocol header information and accepts incoming traffic from any active port. This is a static setup and does not negotiate aggregation with the peer or exchange frames to monitor the link. The hash includes the Ethernet source and destination address, and, if available, the VLAN tag, and the IP source and destination address" +msgstr "Balanceia o tráfego de saída através das portas ativas baseado em informações do cabeçalho de protocolo em hash e aceita tráfego de entrada de qualquer porta ativa. Essa é uma instalação estática e não negocia agregação com o peer ou troca frames para monitorar o link. A hash inclui a fonte Ethernet e endereço de destino e, se disponível, a tag VLAN, e a fonte IP e endereço de destino" + +#: usr/local/www/interfaces_lagg_edit.php:197 +#: usr/local/www/interfaces_lagg_edit.php:198 +#: usr/local/www/interfaces_lagg_edit.php:211 +#: usr/local/www/interfaces_lagg_edit.php:210 +msgid "roundrobin" +msgstr "roundrobin" + +#: usr/local/www/interfaces_lagg_edit.php:197 +#: usr/local/www/interfaces_lagg_edit.php:198 +#: usr/local/www/interfaces_lagg_edit.php:211 +#: usr/local/www/interfaces_lagg_edit.php:210 +msgid "Distributes outgoing traffic using a round-robin scheduler through all active ports and accepts incoming traffic from any active port" +msgstr "Distribui tráfego de saída usando um agendamento round-robin através de todas as portas ativas e aceita tráfego de entrada de qualquer porta ativa" + +#: usr/local/www/interfaces_lagg_edit.php:201 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/interfaces_lagg_edit.php:215 +#: usr/local/www/interfaces_lagg_edit.php:214 +msgid "This protocol is intended to do nothing: it disables any traffic without disabling the lagg interface itself" +msgstr "Esse protocolo não tem intenção de fazer nada: ele desabilita qualquer tráfego sem desabilitar a interface lagg" + +#: usr/local/www/interfaces_ppps.php:62 +msgid "This point-to-point link cannot be deleted because it is still being used as an interface." +msgstr "Esse link ponto-a-ponto não pode ser apagado porque ele ainda está sendo usado como uma interface." + +#: usr/local/www/interfaces_ppps.php:78 +msgid "Interfaces: PPPs" +msgstr "Interfaces: PPPs" + +#: usr/local/www/interfaces_ppps.php:109 usr/local/www/interfaces_ppps.php:110 +msgid "Interface(s)/Port(s)" +msgstr "Interface(s)/Porta(s)" + +#: usr/local/www/interfaces_ppps.php:132 usr/local/www/interfaces_ppps.php:133 +msgid "Do you really want to delete this PPP interface?" +msgstr "Você realmente deseja apagar essa interface PPP?" + +#: usr/local/www/interfaces_ppps_edit.php:182 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +msgid "Link Interface(s)" +msgstr "Interface(s) de Link" + +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/services_dhcp.php:587 usr/local/www/services_dhcpv6.php:522 +#: usr/local/www/services_dhcp.php:600 usr/local/www/services_dhcpv6.php:596 +#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcpv6.php:527 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/services_dhcp.php:720 usr/local/www/services_dhcpv6.php:542 +#: usr/local/www/services_dhcp.php:740 usr/local/www/services_dhcp.php:752 +msgid "Subnet" +msgstr "Subrede" + +#: usr/local/www/interfaces_ppps_edit.php:207 +#: usr/local/www/interfaces_ppps_edit.php:213 +msgid "Please choose a Link Type." +msgstr "Por favor escolha o Tipo de Link." + +#: usr/local/www/interfaces_ppps_edit.php:211 +#: usr/local/www/interfaces_ppps_edit.php:217 +msgid "Multilink connections (MLPPP) using the PPP link type is not currently supported. Please select only one Link Interface." +msgstr "Conexões multilink (MLPPP) usando o tipo de link PPP não é suportado atualmente. Por favor, selecione somente uma Interface de Link." + +#: usr/local/www/interfaces_ppps_edit.php:213 +#: usr/local/www/interfaces_ppps_edit.php:219 +msgid "The Service name contains invalid characters." +msgstr "O nome do Serviço contém caracteres inválidos." + +#: usr/local/www/interfaces_ppps_edit.php:215 +#: usr/local/www/interfaces_ppps_edit.php:221 +msgid "Do not specify both a Service name and a NULL Service name." +msgstr "Não especifique um nome de Serviço e um nome de Serviço Nulo." + +#: usr/local/www/interfaces_ppps_edit.php:229 +#: usr/local/www/interfaces_ppps_edit.php:235 +msgid "A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE Periodic reset fields." +msgstr "Um mês de reinício PPPoE válido deve ser especificado (1-12) nos campos de reinício periódico do PPPoE personalizados." + +#: usr/local/www/interfaces_ppps_edit.php:231 +#: usr/local/www/interfaces_ppps_edit.php:237 +msgid "A valid PPPoE reset day of month must be specified (1-31) in the Custom PPPoE Periodic reset fields. No checks are done on valid # of days per month" +msgstr "Um dia do mês de reinício do PPPoE válido deve ser especificado (1-31) nos campos de reinício periódico do PPPoE personalizados. Nenhuma verificação é feita em um # de dias válido por mês" + +#: usr/local/www/interfaces_ppps_edit.php:233 +#: usr/local/www/interfaces_ppps_edit.php:239 +msgid "A valid PPPoE reset year must be specified. Don't select a year in the past!" +msgstr "Um ano de reinício do PPPoE válido deve ser especificado. Não selecione um ano do passado!" + +#: usr/local/www/interfaces_ppps_edit.php:238 +#: usr/local/www/interfaces_ppps_edit.php:244 +#, php-format +msgid "A valid local IP address must be specified for %s." +msgstr "Um endereço IP local válido deve ser especificado para %s." + +#: usr/local/www/interfaces_ppps_edit.php:240 +#: usr/local/www/interfaces_ppps_edit.php:246 +#, php-format +msgid "A valid gateway IP address OR hostname must be specified for %s." +msgstr "Um endereço IP de gateway ou nome de host válido deve ser especificado para %s." + +#: usr/local/www/interfaces_ppps_edit.php:242 +#: usr/local/www/interfaces_ppps_edit.php:248 +#, php-format +msgid "The bandwidth value for %s must be an integer." +msgstr "O valor de tamanho de banda para %s deve ser um inteiro." + +#: usr/local/www/interfaces_ppps_edit.php:244 +#: usr/local/www/interfaces_ppps_edit.php:250 +#, php-format +msgid "The MTU for %s must be greater than 576 bytes." +msgstr "O MTU para %s deve ser maior que 576 bytes." + +#: usr/local/www/interfaces_ppps_edit.php:246 +#: usr/local/www/interfaces_ppps_edit.php:252 +#, php-format +msgid "The MRU for %s must be greater than 576 bytes." +msgstr "O MRU para %s deve ser maior que 576 bytes." + +#: usr/local/www/interfaces_ppps_edit.php:381 +#: usr/local/www/system_authservers.php:577 +#: usr/local/www/interfaces_ppps_edit.php:382 +#: usr/local/www/system_authservers.php:582 +#: usr/local/www/interfaces_ppps_edit.php:388 +#: usr/local/www/system_authservers.php:589 +#: usr/local/www/system_authservers.php:601 +msgid "Select" +msgstr "Selecione" + +#: usr/local/www/interfaces_ppps_edit.php:398 +#: usr/local/www/interfaces_ppps_edit.php:399 +#: usr/local/www/interfaces_ppps_edit.php:405 +msgid "PPPs configuration" +msgstr "Configuração PPPs" + +#: usr/local/www/interfaces_ppps_edit.php:401 +#: usr/local/www/interfaces_ppps_edit.php:402 +#: usr/local/www/interfaces_ppps_edit.php:408 +msgid "Link Type" +msgstr "Tipo de Link" + +#: usr/local/www/interfaces_ppps_edit.php:416 +#: usr/local/www/interfaces_ppps_edit.php:417 +#: usr/local/www/interfaces_ppps_edit.php:423 +msgid "Link interface(s)" +msgstr "Interface(s) de Link" + +#: usr/local/www/interfaces_ppps_edit.php:422 +#: usr/local/www/interfaces_ppps_edit.php:423 +#: usr/local/www/interfaces_ppps_edit.php:429 +msgid "Select at least two interfaces for Multilink (MLPPP) connections." +msgstr "Selecione pelo menos duas interfaces para conexões Multilink (MLPPP)." + +#: usr/local/www/interfaces_ppps_edit.php:470 +#: usr/local/www/interfaces_ppps_edit.php:471 +#: usr/local/www/interfaces_ppps_edit.php:477 +msgid "You may enter a description here for your reference. Description will appear in the \"Interfaces Assign\" select lists." +msgstr "Você deve informar a descrição aqui para sua referência. A descrição irá aparecer na lista de seleção \"Atribuição de Interfaces\"." + +#: usr/local/www/interfaces_ppps_edit.php:526 +#: usr/local/www/interfaces_ppps_edit.php:527 +#: usr/local/www/interfaces_ppps_edit.php:533 +#: usr/local/www/interfaces_ppps_edit.php:531 +msgid "Note: Typically *99# for GSM networks and #777 for CDMA networks" +msgstr "Nota: Tipicamente *99# para redes GSM e #777 para redes CDMA" + +#: usr/local/www/interfaces_ppps_edit.php:540 +#: usr/local/www/interfaces_ppps_edit.php:541 +#: usr/local/www/interfaces_ppps_edit.php:547 +#: usr/local/www/interfaces_ppps_edit.php:545 +msgid "APN number (optional)" +msgstr "Número APN (opcional)" + +#: usr/local/www/interfaces_ppps_edit.php:543 +#: usr/local/www/interfaces_ppps_edit.php:544 +#: usr/local/www/interfaces_ppps_edit.php:550 +#: usr/local/www/interfaces_ppps_edit.php:548 +msgid "Note: Defaults to 1 if you set APN above. Ignored if you set no APN above." +msgstr "Nota: o valor padrão é 1 caso você configurar o APN acima. Ignora-se caso você não configurar o APN acima." + +#: usr/local/www/interfaces_ppps_edit.php:547 +#: usr/local/www/interfaces_ppps_edit.php:548 +#: usr/local/www/interfaces_ppps_edit.php:554 +#: usr/local/www/interfaces_ppps_edit.php:552 +msgid "SIM PIN" +msgstr "SIM PIN" + +#: usr/local/www/interfaces_ppps_edit.php:554 +#: usr/local/www/interfaces_ppps_edit.php:555 +#: usr/local/www/interfaces_ppps_edit.php:561 +#: usr/local/www/interfaces_ppps_edit.php:559 +msgid "SIM PIN wait" +msgstr "SIM PIN espera" + +#: usr/local/www/interfaces_ppps_edit.php:557 +#: usr/local/www/interfaces_ppps_edit.php:558 +#: usr/local/www/interfaces_ppps_edit.php:564 +#: usr/local/www/interfaces_ppps_edit.php:562 +msgid "Note: Time to wait for SIM to discover network after PIN is sent to SIM (seconds)." +msgstr "Nota: Tempo para esperar que o SIM descubra a rede depois que o PIN é enviado ao SIM (segundos)." + +#: usr/local/www/interfaces_ppps_edit.php:561 +#: usr/local/www/interfaces_ppps_edit.php:562 +#: usr/local/www/interfaces_ppps_edit.php:568 +#: usr/local/www/interfaces_ppps_edit.php:566 +msgid "Init String" +msgstr "String de inicialização" + +#: usr/local/www/interfaces_ppps_edit.php:564 +#: usr/local/www/interfaces_ppps_edit.php:565 +#: usr/local/www/interfaces_ppps_edit.php:571 +#: usr/local/www/interfaces_ppps_edit.php:569 +msgid "Note: Enter the modem initialization string here. Do NOT include the \"AT\" string at the beginning of the command. Many modern USB 3G modems don't need an initialization string." +msgstr "Nota: Informe a string de inicialização do modem aqui. NÃO inclua a string \"AT\" no início do comando. Muitos modems USB 3G modernos não precisam de uma string de inicialização." + +#: usr/local/www/interfaces_ppps_edit.php:569 +#: usr/local/www/interfaces_ppps_edit.php:570 +#: usr/local/www/interfaces_ppps_edit.php:576 +#: usr/local/www/interfaces_ppps_edit.php:574 +msgid "Connection Timeout" +msgstr "Conexão expirou" + +#: usr/local/www/interfaces_ppps_edit.php:572 +#: usr/local/www/interfaces_ppps_edit.php:573 +#: usr/local/www/interfaces_ppps_edit.php:579 +#: usr/local/www/interfaces_ppps_edit.php:577 +msgid "Note: Enter timeout in seconds for connection to be established (sec.) Default is 45 sec." +msgstr "Nota: Informe o tempo de expiração em segundos para que a conexão seja estabelecida (segundos). O padrão é 45 segundos." + +#: usr/local/www/interfaces_ppps_edit.php:576 +#: usr/local/www/interfaces_ppps_edit.php:577 +#: usr/local/www/interfaces_ppps_edit.php:583 +#: usr/local/www/interfaces_ppps_edit.php:581 +msgid "Uptime Logging" +msgstr "Geração de log de tempo de execução" + +#: usr/local/www/interfaces_ppps_edit.php:578 +#: usr/local/www/interfaces_ppps_edit.php:579 +#: usr/local/www/interfaces_ppps_edit.php:585 +#: usr/local/www/interfaces_ppps_edit.php:583 +msgid "Enable persistent logging of connection uptime." +msgstr "Habilitar log de persistência da conexão em tempo de execução." + +#: usr/local/www/interfaces_ppps_edit.php:579 +#: usr/local/www/interfaces_ppps_edit.php:580 +#: usr/local/www/interfaces_ppps_edit.php:586 +#: usr/local/www/interfaces_ppps_edit.php:584 +msgid "This option causes cumulative uptime to be recorded and displayed on the Status Interfaces page." +msgstr "Essa opção faz com que o acúmulo de tempo de execução seja gravado e exibido na página de Interfaces de Status." + +#: usr/local/www/interfaces_ppps_edit.php:591 +#: usr/local/www/interfaces_ppps_edit.php:592 +#: usr/local/www/interfaces_ppps_edit.php:598 +#: usr/local/www/interfaces_ppps_edit.php:596 +msgid "Configure a NULL Service name" +msgstr "Configure um Nome do Serviço Nulo" + +#: usr/local/www/interfaces_ppps_edit.php:592 +#: usr/local/www/interfaces_ppps_edit.php:593 +#: usr/local/www/interfaces_ppps_edit.php:599 +#: usr/local/www/interfaces_ppps_edit.php:597 +msgid "Hint: this field can usually be left empty. Service name will not be configured if this field is empty. Check the \"Configure NULL\" box to configure a blank Service name." +msgstr "Dica: esse campo pode ser deixado em branco. O nome de Serviço não será configurado se esse campo estiver vazio. Verifique a caixa \"Configure Nulo\" para configurar um nome de serviço em branco." + +#: usr/local/www/interfaces_ppps_edit.php:652 usr/local/www/vpn_pppoe.php:102 +#: usr/local/www/diag_ipsec.php:91 usr/local/www/diag_ipsec.php:102 +#: usr/local/www/vpn_pppoe.php:103 usr/local/www/diag_ipsec.php:103 +#: usr/local/www/interfaces_ppps_edit.php:653 usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/interfaces_ppps_edit.php:659 usr/local/www/diag_ipsec.php:105 +#: usr/local/www/interfaces_ppps_edit.php:657 +msgid "Local IP" +msgstr "IP local" + +#: usr/local/www/interfaces_ppps_edit.php:667 +#: usr/local/www/interfaces_ppps_edit.php:668 +#: usr/local/www/interfaces_ppps_edit.php:674 +#: usr/local/www/interfaces_ppps_edit.php:672 +msgid "IP Address OR Hostname" +msgstr "Endereço IP OU Nome de Host" + +#: usr/local/www/interfaces_ppps_edit.php:678 +#: usr/local/www/interfaces_ppps_edit.php:679 +#: usr/local/www/interfaces_ppps_edit.php:685 +#: usr/local/www/interfaces_ppps_edit.php:683 +msgid "Dial On Demand" +msgstr "Discagem sob Demanda" + +#: usr/local/www/interfaces_ppps_edit.php:680 +#: usr/local/www/interfaces_ppps_edit.php:681 +#: usr/local/www/interfaces_ppps_edit.php:687 +#: usr/local/www/interfaces_ppps_edit.php:685 +msgid "Enable Dial-on-Demand mode" +msgstr "Habilitar modo de Discagem sob Demanda" + +#: usr/local/www/interfaces_ppps_edit.php:681 +#: usr/local/www/interfaces_ppps_edit.php:682 +#: usr/local/www/interfaces_ppps_edit.php:688 +#: usr/local/www/interfaces_ppps_edit.php:686 +msgid "This option causes the interface to operate in dial-on-demand mode. Do NOT enable if you want your link to be always up. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected." +msgstr "Essa opção faz com que a inteface opere no modo de discagem sob demanda. NÃO habilite se você deseja que seu link esteja sempre funcionando. A interface é configurada, mas a conexão real é adiada até qualificar o tráfego de saída." + +#: usr/local/www/interfaces_ppps_edit.php:686 +#: usr/local/www/interfaces_ppps_edit.php:687 +#: usr/local/www/interfaces_ppps_edit.php:693 +#: usr/local/www/interfaces_ppps_edit.php:691 +msgid "Idle Timeout" +msgstr "Tempo ocioso" + +#: usr/local/www/interfaces_ppps_edit.php:688 +#: usr/local/www/interfaces_ppps_edit.php:689 +#: usr/local/www/interfaces_ppps_edit.php:695 +#: usr/local/www/interfaces_ppps_edit.php:693 +msgid "(seconds) Default is 0, which disables the timeout feature." +msgstr "(segundos). O padrão é 0, o que desabilita a funcionalidade de tempo de expiração." + +#: usr/local/www/interfaces_ppps_edit.php:689 +#: usr/local/www/interfaces_ppps_edit.php:690 +#: usr/local/www/interfaces_ppps_edit.php:696 +#: usr/local/www/interfaces_ppps_edit.php:694 +msgid "If no incoming or outgoing packets are transmitted for the entered number of seconds the connection is brought down." +msgstr "Se nenhum pacote de entrada ou de saída forem transmitidos para o número de segundos informados, a conexão é desfeita." + +#: usr/local/www/interfaces_ppps_edit.php:690 +#: usr/local/www/interfaces_ppps_edit.php:691 +#: usr/local/www/interfaces_ppps_edit.php:697 +#: usr/local/www/interfaces_ppps_edit.php:695 +msgid "When the idle timeout occurs, if the dial-on-demand option is enabled, mpd goes back into dial-on-demand mode. Otherwise, the interface is brought down and all associated routes removed." +msgstr "Quando o tempo ocioso, se a opção de discagem sob demanda estiver habilitada, mpd retorna ao modo discagem sob demanda. Do contrário, a interface é desconectada e todas as rotas associadas a ela removidas." + +#: usr/local/www/interfaces_ppps_edit.php:694 +#: usr/local/www/vpn_openvpn_client.php:787 +#: usr/local/www/vpn_openvpn_server.php:1077 +#: usr/local/www/vpn_openvpn_server.php:1219 +#: usr/local/www/vpn_openvpn_client.php:792 +#: usr/local/www/interfaces_ppps_edit.php:695 +#: usr/local/www/vpn_openvpn_server.php:1261 +#: usr/local/www/vpn_openvpn_client.php:838 +#: usr/local/www/vpn_openvpn_client.php:857 +#: usr/local/www/interfaces_ppps_edit.php:701 +#: usr/local/www/vpn_openvpn_server.php:1288 +#: usr/local/www/interfaces_ppps_edit.php:699 +msgid "Compression" +msgstr "Compressão" + +#: usr/local/www/interfaces_ppps_edit.php:696 +#: usr/local/www/interfaces_ppps_edit.php:697 +#: usr/local/www/interfaces_ppps_edit.php:703 +#: usr/local/www/interfaces_ppps_edit.php:701 +msgid "Disable vjcomp(compression) (auto-negotiated by default)." +msgstr "Desabilitar vjcomp (compressão) (auto-negociada por padrão)." + +#: usr/local/www/interfaces_ppps_edit.php:697 +#: usr/local/www/interfaces_ppps_edit.php:698 +#: usr/local/www/interfaces_ppps_edit.php:704 +#: usr/local/www/interfaces_ppps_edit.php:702 +msgid "This option enables Van Jacobson TCP header compression, which saves several bytes per TCP data packet. You almost always want this option. This compression ineffective for TCP connections with enabled modern extensions like time stamping or SACK, which modify TCP options between sequential packets." +msgstr "Essa opção habilita a compressão de cabeçalho TCP de Van Jacobson, que salva muitos bytes por pacote TCP. Você deve sempre querer configurar essa opção. Essa compressão não tem efeito para conexões TCP com extensões modernas habilitadas como time stamping ou SACK, que modifica as opções TCP entre pacotes sequenciais." + +#: usr/local/www/interfaces_ppps_edit.php:703 +#: usr/local/www/interfaces_ppps_edit.php:704 +#: usr/local/www/interfaces_ppps_edit.php:710 +#: usr/local/www/interfaces_ppps_edit.php:708 +msgid "TCPmssFix" +msgstr "TCPmssFix" + +#: usr/local/www/interfaces_ppps_edit.php:705 +#: usr/local/www/interfaces_ppps_edit.php:706 +#: usr/local/www/interfaces_ppps_edit.php:712 +#: usr/local/www/interfaces_ppps_edit.php:710 +msgid "Disable tcpmssfix (enabled by default)." +msgstr "Desabilita tcpmssfix (habilita por padrão)." + +#: usr/local/www/interfaces_ppps_edit.php:706 +#: usr/local/www/interfaces_ppps_edit.php:707 +#: usr/local/www/interfaces_ppps_edit.php:713 +#: usr/local/www/interfaces_ppps_edit.php:711 +msgid "This option causes mpd to adjust incoming and outgoing TCP SYN segments so that the requested maximum segment size is not greater than the amount allowed by the interface MTU. This is necessary in many setups to avoid problems caused by routers that drop ICMP Datagram Too Big messages. Without these messages, the originating machine sends data, it passes the rogue router then hits a machine that has an MTU that is not big enough for the data. Because the IP Don't Fragment option is set, this machine sends an ICMP Datagram Too Big message back to the originator and drops the packet. The rogue router drops the ICMP message and the originator never gets to discover that it must reduce the fragment size or drop the IP Don't Fragment option from its outgoing data." +msgstr "Essa opção faz com que o mpd ajuste segmentos TCP SYN de entrada e saída de modo que o tamanho máximo de segmento requerido não é maior que o total permitido pelo MTU da interface. Isso é necessário em muitas configurações para evitar problemas causados por roteadores que descartam mensagens ICMP Datagram Too Big. Sem essas mensagens, a máquina de origem envia dados, passa pelo roteador trapaceiro e então alcança a máquina que em um MTU que não é grande o bastante para o dado. Em função da opção Não Fragmentar IP estar configurada, a máquina envia uma mensagem de retorno ICMP Datagram Too Big para quem a originou e descarta o pacote. O roteador trapaceiro descarta a mensagem ICMP e quem a originou nunca descobre que deve reduzir o tamanho do fragmento ou descartar a opção de Não Fragmentar para seus dados de saída." + +#: usr/local/www/interfaces_ppps_edit.php:714 +#: usr/local/www/interfaces_ppps_edit.php:715 +#: usr/local/www/interfaces_ppps_edit.php:721 +#: usr/local/www/interfaces_ppps_edit.php:719 +msgid "ShortSeq" +msgstr "ShortSeq" + +#: usr/local/www/interfaces_ppps_edit.php:716 +#: usr/local/www/interfaces_ppps_edit.php:717 +#: usr/local/www/interfaces_ppps_edit.php:723 +#: usr/local/www/interfaces_ppps_edit.php:721 +msgid "Disable shortseq (auto-negotiated by default)." +msgstr "Desabilitar shortseq (auto-negociada por padrão)." + +#: usr/local/www/interfaces_ppps_edit.php:717 +#: usr/local/www/interfaces_ppps_edit.php:718 +#: usr/local/www/interfaces_ppps_edit.php:724 +#: usr/local/www/interfaces_ppps_edit.php:722 +msgid "This option is only meaningful if multi-link PPP is negotiated. It proscribes shorter multi-link fragment headers, saving two bytes on every frame. It is not necessary to disable this for connections that are not multi-link." +msgstr "Essa opção somente faz sentido se o multi-link PPP é negociado. Ele proscreve cabeçalhos de fragmentos de multi-link mais curtos, salvando 2 bytes a cada frame. Não é necessário desabilitar isso para conexões que não são multi-link." + +#: usr/local/www/interfaces_ppps_edit.php:722 +#: usr/local/www/interfaces_ppps_edit.php:723 +#: usr/local/www/interfaces_ppps_edit.php:729 +#: usr/local/www/interfaces_ppps_edit.php:727 +msgid "ACFComp" +msgstr "ACFComp" + +#: usr/local/www/interfaces_ppps_edit.php:724 +#: usr/local/www/interfaces_ppps_edit.php:725 +#: usr/local/www/interfaces_ppps_edit.php:731 +#: usr/local/www/interfaces_ppps_edit.php:729 +msgid "Disable acfcomp (compression) (auto-negotiated by default)." +msgstr "Desabilitar acfcomp (compressão) (auto-negociada por padrão)." + +#: usr/local/www/interfaces_ppps_edit.php:725 +#: usr/local/www/interfaces_ppps_edit.php:726 +#: usr/local/www/interfaces_ppps_edit.php:732 +#: usr/local/www/interfaces_ppps_edit.php:730 +msgid "Address and control field compression. This option only applies to asynchronous link types. It saves two bytes per frame." +msgstr "Endereça e controla compressão de campo. Essa opção somente se aplica a tipos de link assíncronos. Ela salva 2 bytes por frame." + +#: usr/local/www/interfaces_ppps_edit.php:729 +#: usr/local/www/interfaces_ppps_edit.php:730 +#: usr/local/www/interfaces_ppps_edit.php:736 +#: usr/local/www/interfaces_ppps_edit.php:734 +msgid "ProtoComp" +msgstr "ProtoComp" + +#: usr/local/www/interfaces_ppps_edit.php:731 +#: usr/local/www/interfaces_ppps_edit.php:732 +#: usr/local/www/interfaces_ppps_edit.php:738 +#: usr/local/www/interfaces_ppps_edit.php:736 +msgid "Disable protocomp (compression) (auto-negotiated by default)." +msgstr "Desabilitar protocomp (compressão) (auto-negociada por padrão)." + +#: usr/local/www/interfaces_ppps_edit.php:732 +#: usr/local/www/interfaces_ppps_edit.php:733 +#: usr/local/www/interfaces_ppps_edit.php:739 +#: usr/local/www/interfaces_ppps_edit.php:737 +msgid "Protocol field compression. This option saves one byte per frame for most frames." +msgstr "Compressão de campo de protocolo. Essa opção salva 1 byte por frame para a maioria deles." + +#: usr/local/www/interfaces_ppps_edit.php:746 +#: usr/local/www/interfaces_ppps_edit.php:747 +#: usr/local/www/interfaces_ppps_edit.php:753 +#: usr/local/www/interfaces_ppps_edit.php:750 +msgid "Link Parameters" +msgstr "Parâmetros de link" + +#: usr/local/www/interfaces_ppps_edit.php:753 +#: usr/local/www/interfaces_ppps_edit.php:754 +#: usr/local/www/interfaces_ppps_edit.php:760 +#: usr/local/www/interfaces_ppps_edit.php:757 +msgid "Set ONLY for MLPPP connections and ONLY when links have different bandwidths." +msgstr "Configure SOMENTE para conexões MLPPP e SOMENTE quando links tiverem diferentes tamanhos de banda." + +#: usr/local/www/interfaces_ppps_edit.php:760 +#: usr/local/www/interfaces_ppps_edit.php:761 +#: usr/local/www/interfaces_ppps_edit.php:767 +#: usr/local/www/interfaces_ppps_edit.php:764 +msgid "MTU will default to 1492." +msgstr "MTU será 1492 como padrão." + +#: usr/local/www/interfaces_ppps_edit.php:764 +#: usr/local/www/interfaces_ppps_edit.php:765 +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:768 +msgid "MRU" +msgstr "MRU" + +#: usr/local/www/interfaces_ppps_edit.php:767 +#: usr/local/www/interfaces_ppps_edit.php:774 +#: usr/local/www/interfaces_ppps_edit.php:768 +#: usr/local/www/interfaces_ppps_edit.php:775 +#: usr/local/www/interfaces_ppps_edit.php:781 +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:778 +msgid "will be auto-negotiated by default." +msgstr "será auto-negociado por padrão." + +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:772 +#: usr/local/www/interfaces_ppps_edit.php:778 +#: usr/local/www/interfaces_ppps_edit.php:775 +msgid "MRRU" +msgstr "MRRU" + +#: usr/local/www/interfaces_ppps_edit.php:774 +#: usr/local/www/interfaces_ppps_edit.php:775 +#: usr/local/www/interfaces_ppps_edit.php:781 +#: usr/local/www/interfaces_ppps_edit.php:778 +msgid "Set ONLY for MLPPP connections." +msgstr "Configure SOMENTE conexões MLPP." + +#: usr/local/www/interfaces_qinq.php:64 usr/local/www/interfaces_qinq.php:66 +msgid "This QinQ cannot be deleted because it is still being used as an interface." +msgstr "Esse QinQ não pode ser apagado porque ele ainda está sendo usado como uma interface." + +#: usr/local/www/interfaces_qinq.php:86 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_qinq.php:89 +msgid "QinQ" +msgstr "QinQ" + +#: usr/local/www/interfaces_qinq.php:117 +#: usr/local/www/interfaces_qinq_edit.php:356 +#: usr/local/www/interfaces_qinq_edit.php:357 +#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:121 +#: usr/local/www/interfaces_qinq_edit.php:360 +msgid "Tag" +msgstr "Tag" + +#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:119 +#: usr/local/www/interfaces_qinq.php:122 +msgid "QinQ members" +msgstr "Membros QinQ" + +#: usr/local/www/interfaces_qinq.php:142 usr/local/www/interfaces_qinq.php:143 +#: usr/local/www/interfaces_qinq.php:146 +msgid "Do you really want to delete this QinQ?" +msgstr "Você realmente quer apagar esse QinQ?" + +#: usr/local/www/interfaces_qinq.php:153 usr/local/www/interfaces_qinq.php:154 +#: usr/local/www/interfaces_qinq.php:157 +#, php-format +msgid "Not all drivers/NICs support 802.1Q QinQ tagging properly. On cards that do not explicitly support it, QinQ tagging will still work, but the reduced MTU may cause problems. See the %s handbook for information on supported cards." +msgstr "Nem todos os drivers/NICs suportam tags QinQ 802.1Q apropriadamente. Em cartões que não explicitam que a suportam, tags QinQ ainda funcionarão, mas um MTU reduzido pode causar problemas. Veja o livro %s para informações sobre cartões que suportam." + +#: usr/local/www/interfaces_qinq_edit.php:84 +#: usr/local/www/interfaces_qinq_edit.php:85 +msgid "First level tag cannot be empty." +msgstr "Tag de primeiro nível não pode ser vazia." + +#: usr/local/www/interfaces_qinq_edit.php:86 +#: usr/local/www/interfaces_qinq_edit.php:87 +msgid "You are editing an existing entry and modifying the first level tag is not allowed." +msgstr "Você está editando uma entrada existente e modificar a tag de primeiro nível não é permitido." + +#: usr/local/www/interfaces_qinq_edit.php:88 +#: usr/local/www/interfaces_qinq_edit.php:89 +msgid "You are editing an existing entry and modifying the interface is not allowed." +msgstr "Você está editando uma entrada existente e modificar a interface não é permitido." + +#: usr/local/www/interfaces_qinq_edit.php:92 +#: usr/local/www/interfaces_qinq_edit.php:93 +msgid "QinQ level already exists for this interface, edit it!" +msgstr "Um nível QinQ já existe para essa interface, edite-o!" + +#: usr/local/www/interfaces_qinq_edit.php:96 +#: usr/local/www/interfaces_qinq_edit.php:97 +msgid "A normal VLAN exists with this tag please remove it to use this tag for QinQ first level." +msgstr "Uma VLAN normal existe com essa tag, por favor, apague-a para usar essa tag para o primeiro nível de QinQ." + +#: usr/local/www/interfaces_qinq_edit.php:123 +#: usr/local/www/interfaces_qinq_edit.php:133 +#: usr/local/www/interfaces_qinq_edit.php:124 +#: usr/local/www/interfaces_qinq_edit.php:134 +msgid "Tags can contain only numbers or a range in format #-#." +msgstr "Tags podem conter somente números ou um intervalo no formato #-#." + +#: usr/local/www/interfaces_qinq_edit.php:193 +#: usr/local/www/interfaces_qinq_edit.php:194 +#: usr/local/www/interfaces_qinq_edit.php:197 +msgid "QinQ VLANs group" +msgstr "Grupo VLAN de QinQ" + +#: usr/local/www/interfaces_qinq_edit.php:269 +#: usr/local/www/interfaces_qinq_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:273 +#: usr/local/www/interfaces_qinq_edit.php:272 +msgid "members" +msgstr "membros" + +#: usr/local/www/interfaces_qinq_edit.php:273 +#: usr/local/www/interfaces_qinq_edit.php:274 +#: usr/local/www/interfaces_qinq_edit.php:277 +#: usr/local/www/interfaces_qinq_edit.php:276 +msgid "detail" +msgstr "detalhe" + +#: usr/local/www/interfaces_qinq_edit.php:285 +#: usr/local/www/interfaces_qinq_edit.php:286 +#: usr/local/www/interfaces_qinq_edit.php:289 +msgid "Interface QinQ Edit" +msgstr "Editar Interface QinQ" + +#: usr/local/www/interfaces_qinq_edit.php:305 +#: usr/local/www/interfaces_qinq_edit.php:306 +#: usr/local/www/interfaces_qinq_edit.php:309 +msgid "Only QinQ capable interfaces will be shown." +msgstr "Somente interfaces que suportam QinQ serão exibidas." + +#: usr/local/www/interfaces_qinq_edit.php:308 +#: usr/local/www/interfaces_qinq_edit.php:309 +#: usr/local/www/interfaces_qinq_edit.php:312 +msgid "First level tag" +msgstr "Tag de primeiro nível" + +#: usr/local/www/interfaces_qinq_edit.php:313 +#: usr/local/www/interfaces_qinq_edit.php:314 +#: usr/local/www/interfaces_qinq_edit.php:317 +msgid "This is the first level VLAN tag. On top of this are stacked the member VLANs defined below." +msgstr "Essa é a tag VLAN de primeiro nível. No topo dela estão empilhados os membros VLAN definidos abaixo." + +#: usr/local/www/interfaces_qinq_edit.php:333 +#: usr/local/www/interfaces_qinq_edit.php:334 +#: usr/local/www/interfaces_qinq_edit.php:337 +msgid "Adds interface to QinQ interface groups so you can write filter rules easily." +msgstr "Adiciona interface ao grupo de interfaces QinQ para que você possa escrever regras de filtro facilmente." + +#: usr/local/www/interfaces_qinq_edit.php:350 +#: usr/local/www/interfaces_qinq_edit.php:351 +#: usr/local/www/interfaces_qinq_edit.php:354 +msgid "You can specify ranges in the input below. The format is pretty simple i.e 9-100 or 10.20..." +msgstr "Você pode especificar intervalos no campo abaixo. O formato é muito simples, i.e. 9-100 ou 10.20..." + +#: usr/local/www/interfaces_wireless.php:63 +#: usr/local/www/interfaces_wireless.php:65 +msgid "This wireless clone cannot be deleted because it is assigned as an interface." +msgstr "O clone sem fio não pode ser apagado porque ele está atribuído como uma interface." + +#: usr/local/www/interfaces_wireless.php:124 +#: usr/local/www/interfaces_wireless.php:125 +#: usr/local/www/interfaces_wireless.php:127 +msgid "Do you really want to delete this wireless clone?" +msgstr "Você realmente deseja apagar esse clone sem fio?" + +#: usr/local/www/interfaces_wireless.php:135 +#: usr/local/www/interfaces_wireless.php:136 +#: usr/local/www/interfaces_wireless.php:138 +msgid "Here you can configure clones of wireless interfaces, which can be assigned as separate independent interfaces. Only available on wireless chipsets that support this, with limitations on the number that can be created in each mode." +msgstr "Aqui você pode configurar clones para interfaces sem fio, os quais podem ser atribuídos como interfaces separadas independentes. Somente disponível em conjunto de chips sem fio que os suportam, com limitação do número que podem ser criadas em cada modo." + +#: usr/local/www/interfaces_wireless_edit.php:116 +#: usr/local/www/interfaces_wireless_edit.php:118 +msgid "This wireless clone cannot be modified because it is still assigned as an interface." +msgstr "Esse clone sem fio não pode ser modificado porque ainda está atribuído a uma interface." + +#: usr/local/www/interfaces_wireless_edit.php:118 +#: usr/local/www/interfaces_wireless_edit.php:120 +msgid "Use the configuration page for the assigned interface to change the mode." +msgstr "Use a página de configuração para a interface atribuída modificar o modo." + +#: usr/local/www/interfaces_wireless_edit.php:123 +#: usr/local/www/interfaces_wireless_edit.php:125 +#, php-format +msgid "Error creating interface with mode %1$s. The %2$s interface may not support creating more clones with the selected mode." +msgstr "Erro ao criar interface com o modo %1$s. A interface %2$s pode não suportar a criação de mais clones com o modo selecionado." + +#: usr/local/www/interfaces_wireless_edit.php:128 +#: usr/local/www/interfaces_wireless_edit.php:130 +#, php-format +msgid "Created with id %s" +msgstr "Criado com o código %s" + +#: usr/local/www/interfaces_wireless_edit.php:131 +#: usr/local/www/interfaces_wireless_edit.php:133 +msgid "Created without id" +msgstr "Criado sem código" + +#: usr/local/www/interfaces_wireless_edit.php:156 +#: usr/local/www/interfaces_wireless_edit.php:158 +msgid "Wireless clone configuration" +msgstr "Configuração clone sem fio" + +#: usr/local/www/load_balancer_monitor.php:72 +msgid "This entry cannot be deleted because it is still referenced by at least one pool." +msgstr "Essa entrada não pode ser apagada porque ainda está sendo referenciada por pelo menos um pool." + +#: usr/local/www/load_balancer_monitor.php:102 +#: usr/local/www/load_balancer_relay_protocol.php:114 +#: usr/local/www/load_balancer_setting.php:111 +#: usr/local/www/load_balancer_setting.php:110 +#: usr/local/www/load_balancer_monitor.php:100 +#: usr/local/www/load_balancer_relay_protocol.php:112 +msgid "The load balancer configuration has been changed" +msgstr "A configuração do balanceador de carga foi modificada" + +#: usr/local/www/vpn_pppoe.php:96 usr/local/www/vpn_pppoe.php:97 +#: usr/local/www/vpn_pppoe.php:98 +msgid "The PPPoE entry list has been changed" +msgstr "A lista de entrada PPPoE foi modificada" + +#: usr/local/www/vpn_pppoe.php:103 +#: usr/local/www/services_captiveportal_zones.php:54 +#: usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/services_captiveportal_zones.php:55 +#: usr/local/www/vpn_pppoe.php:105 +msgid "Number of users" +msgstr "Número de usuários" + +#: usr/local/www/vpn_pppoe.php:109 usr/local/www/vpn_pppoe.php:144 +#: usr/local/www/vpn_pppoe.php:110 usr/local/www/vpn_pppoe.php:145 +#: usr/local/www/vpn_pppoe.php:111 usr/local/www/vpn_pppoe.php:146 +msgid "add a new pppoe instance" +msgstr "adicione uma nova instância pppoe" + +#: usr/local/www/vpn_pppoe.php:131 usr/local/www/vpn_pppoe.php:132 +#: usr/local/www/vpn_pppoe.php:133 +msgid "edit pppoe instance" +msgstr "editar instância pppoe" + +#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133 +#: usr/local/www/vpn_pppoe.php:134 +msgid "Do you really want to delete this entry? All elements that still use it will become invalid (e.g. filter rules)!" +msgstr "Você realmente deseja apagar essa entrada? Todos os elementos que ainda a usam serão invalidados (e.g. regras de filtro)!" + +#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133 +#: usr/local/www/vpn_pppoe.php:134 +msgid "delete pppoe instance" +msgstr "apagar instância pppoe" + +#: usr/local/www/load_balancer_monitor_edit.php:66 +msgid "Load Balancer: Monitor:" +msgstr "Balanceados de Carga: Monitor:" + +#: usr/local/www/load_balancer_monitor_edit.php:95 +msgid "This monitor name has already been used. Monitor names must be unique." +msgstr "Esse nome de monitor já foi usado. Nomes de monitores devem ser únicos." + +#: usr/local/www/load_balancer_monitor_edit.php:98 +#: usr/local/www/load_balancer_pool_edit.php:86 +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:127 +#: usr/local/www/load_balancer_relay_protocol_edit.php:89 +msgid "You cannot use spaces in the 'name' field." +msgstr "Você não pode usar espaços no campo 'nome'." + +#: usr/local/www/load_balancer_monitor_edit.php:112 +#: usr/local/www/services_dhcp_edit.php:118 +#: usr/local/www/services_dnsmasq_edit.php:85 +#: usr/local/www/services_dhcpv6_edit.php:115 +#: usr/local/www/services_dnsmasq_edit.php:86 +#: usr/local/www/services_dhcpv6_edit.php:117 +#: usr/local/www/services_dhcp_edit.php:120 +#: usr/local/www/services_dhcpv6_edit.php:120 +#: usr/local/www/services_dhcp_edit.php:154 +msgid "The hostname can only contain the characters A-Z, 0-9 and '-'." +msgstr "O nome do host somente pode conter os caracteres de A-Z, 0-9 e '-'." + +#: usr/local/www/load_balancer_monitor_edit.php:118 +msgid "HTTP(s) codes must be from RFC2616." +msgstr "Código(s) HTTP devem ser da RFC2616." + +#: usr/local/www/load_balancer_monitor_edit.php:122 +msgid "The path to monitor must be set." +msgstr "O caminho para o monitor deve ser configurado." + +#: usr/local/www/load_balancer_monitor_edit.php:145 +#, php-format +msgid "modified '%s' monitor:" +msgstr "monitor '%s' modificado:" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:197 +msgid "ICMP" +msgstr "ICMP" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:268 +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/system_advanced_admin.php:311 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:266 +#: usr/local/www/system_advanced_admin.php:332 +msgid "HTTP" +msgstr "HTTP" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:301 +#: usr/local/www/system_advanced_admin.php:314 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:299 +#: usr/local/www/system_advanced_admin.php:335 +msgid "HTTPS" +msgstr "HTTPS" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:335 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:333 +msgid "Send/Expect" +msgstr "Enviar/Esperar" + +#: usr/local/www/load_balancer_monitor_edit.php:232 +#: usr/local/www/load_balancer_monitor_edit.php:230 +msgid "Edit Load Balancer - Monitor entry" +msgstr "Editar Balanceador de Carga - entrada de Monitor" + +#: usr/local/www/load_balancer_monitor_edit.php:272 +#: usr/local/www/load_balancer_monitor_edit.php:305 +#: usr/local/www/load_balancer_monitor_edit.php:270 +#: usr/local/www/load_balancer_monitor_edit.php:303 +msgid "Path" +msgstr "Caminho" + +#: usr/local/www/load_balancer_monitor_edit.php:278 +#: usr/local/www/load_balancer_monitor_edit.php:311 +#: usr/local/www/diag_ping.php:55 usr/local/www/diag_ping.php:90 +#: usr/local/www/services_dnsmasq.php:243 +#: usr/local/www/services_dnsmasq_edit.php:141 +#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:89 +#: usr/local/www/services_rfc2136_edit.php:169 +#: usr/local/www/services_dnsmasq_edit.php:196 +#: usr/local/www/services_dnsmasq_edit.php:237 +#: usr/local/www/services_unbound.php:279 +#: usr/local/www/services_dnsmasq.php:244 +#: usr/local/www/services_dnsmasq_edit.php:197 +#: usr/local/www/services_dnsmasq_edit.php:238 +#: usr/local/www/load_balancer_monitor_edit.php:276 +#: usr/local/www/load_balancer_monitor_edit.php:309 +#: usr/local/www/diag_testport.php:60 usr/local/www/diag_testport.php:117 +#: usr/local/www/diag_traceroute.php:93 usr/local/www/services_dnsmasq.php:269 +#: usr/local/www/diag_traceroute.php:63 usr/local/www/diag_traceroute.php:99 +#: usr/local/www/diag_ping.php:57 usr/local/www/diag_ping.php:97 +#: usr/local/www/services_dnsmasq.php:282 +#: usr/local/www/services_dnsmasq.php:346 +#: usr/local/www/services_rfc2136_edit.php:174 +msgid "Host" +msgstr "Host" + +#: usr/local/www/load_balancer_monitor_edit.php:280 +#: usr/local/www/load_balancer_monitor_edit.php:313 +#: usr/local/www/load_balancer_monitor_edit.php:278 +#: usr/local/www/load_balancer_monitor_edit.php:311 +msgid "Hostname for Host: header if needed." +msgstr "Nome de host para Host: adicionar cabeçalho se necessário." + +#: usr/local/www/load_balancer_monitor_edit.php:284 +#: usr/local/www/load_balancer_monitor_edit.php:317 +#: usr/local/www/load_balancer_monitor_edit.php:282 +#: usr/local/www/load_balancer_monitor_edit.php:315 +msgid "HTTP Code" +msgstr "Código HTTP" + +#: usr/local/www/load_balancer_monitor_edit.php:339 +#: usr/local/www/load_balancer_monitor_edit.php:337 +msgid "Send string" +msgstr "Enviar string" + +#: usr/local/www/load_balancer_monitor_edit.php:345 +#: usr/local/www/load_balancer_monitor_edit.php:343 +msgid "Expect string" +msgstr "Esperar por string" + +#: usr/local/www/load_balancer_pool_edit.php:65 +msgid "Load Balancer: Pool:" +msgstr "Balanceador de Carga: Pool:" + +#: usr/local/www/load_balancer_pool_edit.php:76 +msgid "Server List" +msgstr "Lista de Servidor" + +#: usr/local/www/load_balancer_pool_edit.php:83 +msgid "This pool name has already been used. Pool names must be unique." +msgstr "Esse nome de pool já foi usado. Nomes de pool devem ser únicos." + +#: usr/local/www/load_balancer_pool_edit.php:89 +#: usr/local/www/load_balancer_virtual_server_edit.php:92 +msgid "The port must be an integer between 1 and 65535." +msgstr "A porta deve ser um inteiro entre 1 e 65535." + +#: usr/local/www/load_balancer_pool_edit.php:93 +msgid "The retry value must be an integer between 1 and 65535." +msgstr "O valor de retorno deve ser um inteiro entre 1 e 65535." + +#: usr/local/www/load_balancer_pool_edit.php:98 +#, php-format +msgid "%s is not a valid IP address (in \"enabled\" list)." +msgstr "%s não é um endereço IP válido (na lista de \"habilitados\")." + +#: usr/local/www/load_balancer_pool_edit.php:105 +#, php-format +msgid "%s is not a valid IP address (in \"disabled\" list)." +msgstr "%s não é um endereço IP válido (na lista de \"desabilitados\")." + +#: usr/local/www/load_balancer_pool_edit.php:114 +#: usr/local/www/load_balancer_pool_edit.php:120 +msgid "Invalid monitor chosen." +msgstr "Monitor escolhido inválido." + +#: usr/local/www/load_balancer_pool_edit.php:121 +#: usr/local/www/load_balancer_pool_edit.php:127 +#, php-format +msgid " modified '%s' pool:" +msgstr " pool '%s' modificado:" + +#: usr/local/www/load_balancer_pool_edit.php:178 +#: usr/local/www/load_balancer_pool_edit.php:186 +#: usr/local/www/load_balancer_pool_edit.php:184 +msgid "Add/edit Load Balancer - Pool entry" +msgstr "Adicionar/editar Balanceador de Carga - entrada do Pool" + +#: usr/local/www/load_balancer_pool_edit.php:190 +#: usr/local/www/load_balancer_pool_edit.php:198 +#: usr/local/www/load_balancer_pool_edit.php:196 +msgid "Load Balance" +msgstr "Balancear Carga" + +#: usr/local/www/load_balancer_pool_edit.php:191 +#: usr/local/www/load_balancer_pool_edit.php:199 +#: usr/local/www/load_balancer_pool_edit.php:197 +msgid "Manual Failover" +msgstr "Failover manual" + +#: usr/local/www/load_balancer_pool_edit.php:206 +#: usr/local/www/load_balancer_pool_edit.php:215 +#: usr/local/www/load_balancer_pool_edit.php:213 +msgid "This is the port your servers are listening on." +msgstr "Essa é a porta em que seus servidores estão lendo." + +#: usr/local/www/load_balancer_pool_edit.php:210 +#: usr/local/www/load_balancer_pool_edit.php:227 +#: usr/local/www/load_balancer_pool_edit.php:225 +msgid "Retry" +msgstr "Retorno" + +#: usr/local/www/load_balancer_pool_edit.php:213 +#: usr/local/www/load_balancer_pool_edit.php:230 +#: usr/local/www/load_balancer_pool_edit.php:228 +msgid "Optionally specify how many times to retry checking a server before declaring it down." +msgstr "Opcionalmente, especifique quantas vezes verificar o servidor antes de declará-lo inoperante." + +#: usr/local/www/load_balancer_pool_edit.php:220 +#: usr/local/www/load_balancer_pool_edit.php:237 +#: usr/local/www/load_balancer_pool_edit.php:235 +msgid "Add item to pool" +msgstr "Adicione item no pool" + +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/load_balancer_pool_edit.php:255 +#: usr/local/www/load_balancer_pool_edit.php:253 +msgid "Please add a monitor IP address on the monitors tab if you wish to use this feature." +msgstr "Por favor, adicione um endereço IP monitor na aba de monitores se desejar usar essa funcionalidade." + +#: usr/local/www/load_balancer_pool_edit.php:244 +#: usr/local/www/load_balancer_pool_edit.php:261 +#: usr/local/www/load_balancer_pool_edit.php:259 +msgid "Server IP Address" +msgstr "Endereço IP do Servidor" + +#: usr/local/www/load_balancer_pool_edit.php:247 +#: usr/local/www/load_balancer_pool_edit.php:264 +#: usr/local/www/load_balancer_pool_edit.php:262 +msgid "Add to pool" +msgstr "Adicionar ao pool" + +#: usr/local/www/load_balancer_pool_edit.php:254 +#: usr/local/www/load_balancer_pool_edit.php:271 +#: usr/local/www/load_balancer_pool_edit.php:269 +msgid "Current Pool Members" +msgstr "Membros atuais do Pool" + +#: usr/local/www/load_balancer_pool_edit.php:264 +#: usr/local/www/load_balancer_pool_edit.php:281 +#: usr/local/www/load_balancer_pool_edit.php:279 +msgid "Pool Disabled" +msgstr "Pool Desabilitada" + +#: usr/local/www/load_balancer_pool_edit.php:277 +#: usr/local/www/load_balancer_pool_edit.php:300 +#: usr/local/www/load_balancer_relay_protocol_edit.php:253 +#: usr/local/www/load_balancer_pool_edit.php:294 +#: usr/local/www/load_balancer_pool_edit.php:317 +#: usr/local/www/load_balancer_relay_protocol_edit.php:251 +#: usr/local/www/load_balancer_pool_edit.php:292 +#: usr/local/www/load_balancer_pool_edit.php:315 +msgid "Remove" +msgstr "Remover" + +#: usr/local/www/load_balancer_pool_edit.php:287 +#: usr/local/www/load_balancer_pool_edit.php:304 +#: usr/local/www/load_balancer_pool_edit.php:302 +msgid "Enabled (default)" +msgstr "Habilitar (padrão)" + +#: usr/local/www/load_balancer_virtual_server_edit.php:61 +msgid "Load Balancer: Virtual Server:" +msgstr "Balanceador de Carga: Servidor Virtual:" + +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:261 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/load_balancer_virtual_server_edit.php:250 +#: usr/local/www/load_balancer_virtual_server_edit.php:248 +msgid "Relay Protocol" +msgstr "Protocolo Relay" + +#: usr/local/www/load_balancer_virtual_server_edit.php:86 +msgid "This virtual server name has already been used. Virtual server names must be unique." +msgstr "O nome do servidor virtual já está sendo usado. Nomes de servidores virtuais devem ser únicos." + +#: usr/local/www/load_balancer_virtual_server_edit.php:95 +#, php-format +msgid "%s is not a valid IP address." +msgstr "%s não é um endereço IP válido." + +#: usr/local/www/load_balancer_virtual_server_edit.php:102 +#: usr/local/www/load_balancer_virtual_server_edit.php:104 +#, php-format +msgid "modified '%s' vs:" +msgstr "servidor virtual '%s' modificado:" + +#: usr/local/www/load_balancer_virtual_server_edit.php:104 +#: usr/local/www/load_balancer_virtual_server_edit.php:106 +#, php-format +msgid "created '%s' vs:" +msgstr "servidor virtual '%s' criado:" + +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/status_lb_vs.php:56 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +msgid "Virtual Server" +msgstr "Servidor Virtual" + +#: usr/local/www/load_balancer_virtual_server_edit.php:180 +#: usr/local/www/load_balancer_virtual_server_edit.php:154 +#: usr/local/www/load_balancer_virtual_server_edit.php:152 +msgid "Edit Load Balancer - Virtual Server entry" +msgstr "Editar Balanceador de Carga - entrada de Servidor Virtual" + +#: usr/local/www/load_balancer_virtual_server_edit.php:198 +#: usr/local/www/load_balancer_virtual_server_edit.php:172 +#: usr/local/www/load_balancer_virtual_server_edit.php:170 +msgid "This is normally the WAN IP address that you would like the server to listen on. All connections to this IP and port will be forwarded to the pool cluster." +msgstr "Isso é, normalmente, o endereço IP WAN em que você gostaria que o servidor lesse. Toas as conexões para esse IP e porta serão encaminhadas para o cluster de pool." + +#: usr/local/www/load_balancer_virtual_server_edit.php:205 +#: usr/local/www/load_balancer_virtual_server_edit.php:186 +#: usr/local/www/load_balancer_virtual_server_edit.php:184 +msgid "This is the port that the clients will connect to. All connections to this port will be forwarded to the pool cluster." +msgstr "Essa é a porta na qual os clientes irão conectar. Todas as conexões nessa porta serão encaminhadas para o cluster de pool." + +#: usr/local/www/load_balancer_virtual_server_edit.php:209 +#: usr/local/www/load_balancer_virtual_server_edit.php:198 +#: usr/local/www/load_balancer_virtual_server_edit.php:196 +msgid "Virtual Server Pool" +msgstr "Pool de Servidor Virtual" + +#: usr/local/www/load_balancer_virtual_server_edit.php:212 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/load_balancer_virtual_server_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:220 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +msgid "Please add a pool on the Pools tab to use this feature." +msgstr "Por favor, adicione um pool na aba de Pools para usar essa funcionalidade." + +#: usr/local/www/load_balancer_virtual_server_edit.php:244 +#: usr/local/www/load_balancer_virtual_server_edit.php:233 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +msgid "This is the server that clients will be redirected to if *ALL* servers in the pool are offline." +msgstr "Esse é o servidor para o qual os clientes serão redirecionados de *TODOS* os servidores no pool estiverem desligados." + +#: usr/local/www/load_balancer_virtual_server_edit.php:279 +#: usr/local/www/status_captiveportal_test.php:92 +#: usr/local/www/load_balancer_virtual_server_edit.php:268 +#: usr/local/www/status_captiveportal_test.php:93 +#: usr/local/www/load_balancer_virtual_server_edit.php:266 +#: usr/local/www/status_captiveportal_expire.php:92 +#: usr/local/www/status_captiveportal_test.php:94 +msgid "Submit" +msgstr "Submeter" + +#: usr/local/www/load_balancer_virtual_server_edit.php:289 +#: usr/local/www/load_balancer_virtual_server_edit.php:278 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +msgid "Don't forget to add a firewall rule for the virtual server/pool after you're finished setting it up." +msgstr "Não esqueça de adicionar uma regra de firewall para o servidor/pool virtual depois que finalizar as configurações." + +#: usr/local/www/pkg_mgr.php:70 usr/local/www/pkg_mgr.php:82 +#, php-format +msgid "Unable to retrieve package info from %s. Cached data will be used." +msgstr "Incapaz de obter info de pacote de %s. Dados em cache serão usados." + +#: usr/local/www/pkg_mgr.php:73 usr/local/www/pkg_mgr.php:85 +#, php-format +msgid "Unable to communicate with %1$s. Please verify DNS and interface configuration, and that %2$s has functional Internet connectivity." +msgstr "Incapaz de comunicar-se com %1$s. Por favor, verifique a configuração de DNS e interface, e que %2$s tem conectividade com Internet em funcionamento." + +#: usr/local/www/pkg_mgr.php:122 usr/local/www/pkg_mgr.php:216 +#: usr/local/www/pkg_mgr.php:137 usr/local/www/pkg_mgr.php:243 +#: usr/local/www/pkg_mgr.php:246 usr/local/www/pkg_mgr.php:140 +#: usr/local/www/pkg_mgr.php:249 +msgid "There are currently no packages available for installation." +msgstr "Atualmente não há pacotes disponíveis para instalação." + +#: usr/local/www/pkg_mgr.php:192 usr/local/www/pkg_mgr.php:228 +#: usr/local/www/pkg_mgr.php:231 +msgid "platform" +msgstr "plataforma" + +#: usr/local/www/pkg_mgr.php:210 +msgid "Do you really want to install this package?" +msgstr "Você realmente deseja instalar esse pacote?" + +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_install.php:55 +msgid "Install Package" +msgstr "Instalar Pacote" + +#: usr/local/www/pkg_mgr_install.php:72 usr/local/www/pkg_mgr_install.php:70 +msgid "Available packages" +msgstr "Pacotes disponíveis" + +#: usr/local/www/pkg_mgr_install.php:75 usr/local/www/pkg_mgr_install.php:73 +msgid "Installed packages" +msgstr "Pacotes instalados" + +#: usr/local/www/pkg_mgr_install.php:76 usr/local/www/pkg_mgr_install.php:74 +msgid "Package Installer" +msgstr "Instalador de Pacote" + +#: usr/local/www/pkg_mgr_install.php:124 usr/local/www/pkg_mgr_install.php:134 +#: usr/local/www/pkg_mgr_install.php:132 usr/local/www/pkg_mgr_install.php:128 +msgid "Creating restore point before package installation." +msgstr "Criando ponto de restauração antes da instalação do pacote." + +#: usr/local/www/pkg_mgr_install.php:132 usr/local/www/pkg_mgr_install.php:133 +#: usr/local/www/pkg_mgr_install.php:141 usr/local/www/pkg_mgr_install.php:142 +#: usr/local/www/pkg_mgr_install.php:139 usr/local/www/pkg_mgr_install.php:140 +#: usr/local/www/pkg_mgr_install.php:135 usr/local/www/pkg_mgr_install.php:136 +msgid "Package deleted." +msgstr "Pacote apagado." + +#: usr/local/www/pkg_mgr_install.php:147 usr/local/www/pkg_mgr_install.php:148 +#: usr/local/www/pkg_mgr_install.php:156 usr/local/www/pkg_mgr_install.php:157 +#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155 +#: usr/local/www/pkg_mgr_install.php:150 usr/local/www/pkg_mgr_install.php:151 +msgid "Package reinstallation failed." +msgstr "Reinstalação do pacote falhou." + +#: usr/local/www/pkg_mgr_install.php:151 usr/local/www/pkg_mgr_install.php:152 +#: usr/local/www/pkg_mgr_install.php:160 usr/local/www/pkg_mgr_install.php:161 +#: usr/local/www/pkg_mgr_install.php:158 usr/local/www/pkg_mgr_install.php:159 +#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155 +msgid "Package reinstalled." +msgstr "Pacote reinstalado." + +#: usr/local/www/pkg_mgr_install.php:163 usr/local/www/pkg_mgr_install.php:172 +#: usr/local/www/pkg_mgr_install.php:170 usr/local/www/pkg_mgr_install.php:166 +msgid "installation completed." +msgstr "instalação completa." + +#: usr/local/www/pkg_mgr_install.php:166 usr/local/www/pkg_mgr_install.php:175 +#: usr/local/www/pkg_mgr_install.php:173 usr/local/www/pkg_mgr_install.php:169 +#, php-format +msgid "Could not find %s." +msgstr "Não pôde encontrar %s." + +#: usr/local/www/pkg_mgr_install.php:182 usr/local/www/pkg_mgr_install.php:183 +#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:192 +#: usr/local/www/pkg_mgr_install.php:188 usr/local/www/pkg_mgr_install.php:189 +#: usr/local/www/pkg_mgr_install.php:184 usr/local/www/pkg_mgr_install.php:185 +msgid "All packages reinstalled." +msgstr "Todos os pacotes reinstalados." + +#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:194 +#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:204 +#: usr/local/www/pkg_mgr_install.php:199 usr/local/www/pkg_mgr_install.php:203 +#: usr/local/www/pkg_mgr_install.php:195 +msgid "Installation of" +msgstr "Instalação de" + +#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:200 +#: usr/local/www/pkg_mgr_install.php:199 usr/local/www/pkg_mgr_install.php:195 +msgid "FAILED!" +msgstr "FALHOU!" + +#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:201 +#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:196 +msgid "Installation halted." +msgstr "Instalação interrompida." + +#: usr/local/www/pkg_mgr_install.php:194 usr/local/www/pkg_mgr_install.php:204 +#: usr/local/www/pkg_mgr_install.php:203 usr/local/www/pkg_mgr_install.php:199 +msgid "completed." +msgstr "completa." + +#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208 +#: usr/local/www/pkg_mgr_install.php:207 usr/local/www/pkg_mgr_install.php:203 +msgid "Installation completed." +msgstr "Instalação completa." + +#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208 +#: usr/local/www/pkg_mgr_install.php:207 usr/local/www/pkg_mgr_install.php:203 +msgid "setup instructions" +msgstr "instruções de instalação" + +#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:210 +#: usr/local/www/pkg_mgr_install.php:209 usr/local/www/pkg_mgr_install.php:205 +msgid "Installation completed. Please check to make sure that the package is configured from the respective menu then start the package." +msgstr "Instalação completa. Por favor, verifique para ter certeza de que o pacote está configurado no respectivo menu e então inicie o pacote." + +#: usr/local/www/preload.php:6 +msgid "You are not allowed to access this page." +msgstr "Você não tem permissão de acessar essa página." + +#: usr/local/www/progress.php:25 usr/local/www/progress.php:22 +msgid "Invalid Meter ID" +msgstr "ID de Medida inválido" + +#: usr/local/www/progress.php:46 usr/local/www/progress.php:43 +msgid "UPLOAD completed" +msgstr "UPLOAD completo" + +#: usr/local/www/progress.php:58 usr/local/www/progress.php:55 +msgid "Uploading Files... Please wait..." +msgstr "Carregando arquivos... por favor aguarde..." + +#: usr/local/www/progress.php:68 usr/local/www/progress.php:65 +msgid "Uploading files..." +msgstr "Carregando arquivos..." + +#: usr/local/www/progress.php:87 usr/local/www/progress.php:84 +msgid "Time Remaining:" +msgstr "Tempo restante:" + +#: usr/local/www/progress.php:88 usr/local/www/progress.php:85 +msgid "Speed:" +msgstr "Velocidade:" + +#: usr/local/www/progress.php:88 usr/local/www/progress.php:85 +msgid "KB/sec" +msgstr "KB/sec" + +#: usr/local/www/progress.php:92 usr/local/www/progress.php:89 +msgid "Uploaded:" +msgstr "Carregado:" + +#: usr/local/www/progress.php:93 usr/local/www/progress.php:90 +msgid "File Size:" +msgstr "Tamanho do Arquivo:" + +#: usr/local/www/progress.php:97 usr/local/www/progress.php:94 +msgid "Completed:" +msgstr "Completo:" + +#: usr/local/www/diag_dns.php:34 usr/local/www/diag_dns.php:250 +#: usr/local/www/fbegin.inc:192 usr/local/www/fbegin.inc:210 +#: usr/local/www/diag_dns.php:249 usr/local/www/fbegin.inc:218 +#: usr/local/www/fbegin.inc:209 usr/local/www/diag_dns.php:266 +msgid "DNS Lookup" +msgstr "DNS Lookup" + +#: usr/local/www/diag_dns.php:100 +msgid "Host must be a valid hostname or IP address." +msgstr "Host deve ser um hostname ou endereço IP válido." + +#: usr/local/www/diag_dns.php:110 usr/local/www/diag_dns.php:109 +msgid "No response" +msgstr "Sem resposta" + +#: usr/local/www/diag_dns.php:143 usr/local/www/diag_dns.php:142 +msgid "No record found" +msgstr "Nenhum registro encontrado" + +#: usr/local/www/diag_dns.php:158 usr/local/www/diag_dns.php:157 +#: usr/local/www/diag_dns.php:174 +msgid "Resolve DNS hostname or IP" +msgstr "Resolva nome de host de DNS ou IP" + +#: usr/local/www/diag_dns.php:161 usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 usr/local/www/diag_dns.php:160 +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:187 usr/local/www/diag_dns.php:177 +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:189 +msgid "Hostname or IP" +msgstr "Hostname ou IP" + +#: usr/local/www/diag_dns.php:203 usr/local/www/diag_dns.php:202 +#: usr/local/www/diag_dns.php:219 +msgid "Resolution time per server" +msgstr "Tempo de resolução por servidor" + +#: usr/local/www/diag_dns.php:211 usr/local/www/diag_dns.php:210 +#: usr/local/www/diag_dns.php:227 +msgid "Query time" +msgstr "Tempo de consulta" + +#: usr/local/www/diag_dns.php:235 usr/local/www/diag_dns.php:234 +#: usr/local/www/diag_dns.php:251 +msgid "More Information:" +msgstr "Mais informação:" + +#: usr/local/www/diag_dns.php:237 usr/local/www/diag_ping.php:43 +#: usr/local/www/diag_ping.php:87 usr/local/www/diag_ping.php:119 +#: usr/local/www/fbegin.inc:200 usr/local/www/fbegin.inc:218 +#: usr/local/www/diag_dns.php:236 usr/local/www/fbegin.inc:226 +#: usr/local/www/fbegin.inc:217 usr/local/www/diag_ping.php:44 +#: usr/local/www/diag_ping.php:94 usr/local/www/diag_ping.php:141 +#: usr/local/www/diag_dns.php:253 +msgid "Ping" +msgstr "Ping" + +#: usr/local/www/diag_dns.php:238 usr/local/www/diag_traceroute.php:45 +#: usr/local/www/diag_traceroute.php:86 usr/local/www/diag_traceroute.php:112 +#: usr/local/www/fbegin.inc:209 usr/local/www/fbegin.inc:227 +#: usr/local/www/diag_dns.php:237 usr/local/www/fbegin.inc:236 +#: usr/local/www/diag_traceroute.php:90 usr/local/www/diag_traceroute.php:136 +#: usr/local/www/fbegin.inc:228 usr/local/www/diag_traceroute.php:46 +#: usr/local/www/diag_traceroute.php:96 usr/local/www/diag_traceroute.php:155 +#: usr/local/www/diag_dns.php:254 +msgid "Traceroute" +msgstr "Traceroute" + +#: usr/local/www/diag_dns.php:240 usr/local/www/diag_dns.php:239 +#: usr/local/www/diag_dns.php:256 +msgid "NOTE: The following links are to external services, so their reliability cannot be guaranteed." +msgstr "NOTA: Os seguintes links são para serviços externos, assim a sua confiabilidade não pode ser garantida." + +#: usr/local/www/diag_dns.php:241 usr/local/www/diag_dns.php:240 +#: usr/local/www/diag_dns.php:257 +msgid "IP WHOIS @ DNS Stuff" +msgstr "IP WHOIS @ DNS Stuff" + +#: usr/local/www/diag_dns.php:242 usr/local/www/diag_dns.php:241 +#: usr/local/www/diag_dns.php:258 +msgid "IP Info @ DNS Stuff" +msgstr "IP Info @ DNS Stuff" + +#: usr/local/www/reboot.php:44 +msgid " Yes " +msgstr " Sim" + +#: usr/local/www/reboot.php:45 usr/local/www/reboot.php:76 +#: usr/local/www/reboot.php:56 +msgid "The system is rebooting now. This may take one minute." +msgstr "O sistema está reiniciando agora. Isso pode levar alguns minutos." + +#: usr/local/www/reboot.php:51 usr/local/www/reboot.php:48 +msgid "Reboot System" +msgstr "Reiniciar Sistema" + +#: usr/local/www/reboot.php:59 usr/local/www/reboot.php:62 +msgid "Are you sure you want to reboot the system?" +msgstr "Você tem certeza que deseja reiniciar o sistema?" + +#: usr/local/www/restart_httpd.php:42 +msgid "Restarting httpd" +msgstr "Reiniciando httpd" + +#: usr/local/www/restart_httpd.php:50 +msgid "Mounting file systems read/write" +msgstr "Montando sistema de arquivos leitura/escrita" + +#: usr/local/www/restart_httpd.php:53 +msgid "Forcing all PHP file permissions to 0755" +msgstr "Forçando todas as permissões de arquivos PHP para 0755" + +#: usr/local/www/restart_httpd.php:56 +msgid "Mounting file systems read only" +msgstr "Montando sistema de arquivo de somente leitura" + +#: usr/local/www/restart_httpd.php:59 +msgid "Restarting mini_httpd" +msgstr "Reiniciando mimi-httpd" + +#: usr/local/www/edit.php:39 usr/local/www/edit.php:42 +#: usr/local/www/edit.php:41 +msgid "Edit file" +msgstr "Editar arquivo" + +#: usr/local/www/edit.php:46 usr/local/www/edit.php:62 +#: usr/local/www/edit.php:49 usr/local/www/edit.php:65 +#: usr/local/www/edit.php:48 +msgid "No file name specified" +msgstr "Nenhum nome de arquivo foi especificado" + +#: usr/local/www/edit.php:48 usr/local/www/edit.php:51 +#: usr/local/www/edit.php:50 +msgid "Loading a directory is not supported" +msgstr "Carregar um diretório não é suportado" + +#: usr/local/www/edit.php:50 usr/local/www/edit.php:53 +#: usr/local/www/edit.php:52 +msgid "File does not exist or is not a regular file" +msgstr "O arquivo não existe ou não é um arquivo regular" + +#: usr/local/www/edit.php:54 usr/local/www/edit.php:57 +#: usr/local/www/edit.php:56 +msgid "Failed to read file" +msgstr "Falha ao ler o arquivo" + +#: usr/local/www/edit.php:74 usr/local/www/edit.php:77 +msgid "Failed to write file" +msgstr "Falha ao escrever o arquivo" + +#: usr/local/www/edit.php:76 usr/local/www/edit.php:79 +msgid "Error while writing file" +msgstr "Erro durante a gravação do arquivo" + +#: usr/local/www/edit.php:78 usr/local/www/edit.php:81 +msgid "File successfully saved" +msgstr "Arquivo salvo com sucesso" + +#: usr/local/www/edit.php:98 usr/local/www/edit.php:101 +msgid "Loading file" +msgstr "Carregando arquivo" + +#: usr/local/www/edit.php:117 usr/local/www/edit.php:120 +#: usr/local/www/edit.php:121 +msgid "File successfully loaded" +msgstr "Arquivo carregado com sucesso" + +#: usr/local/www/edit.php:140 usr/local/www/edit.php:143 +#: usr/local/www/edit.php:144 +msgid "Saving file" +msgstr "Salvando arquivo" + +#: usr/local/www/edit.php:177 usr/local/www/edit.php:180 +#: usr/local/www/edit.php:181 +msgid "Save / Load from path" +msgstr "Salvar / Carregar do caminho" + +#: usr/local/www/edit.php:179 usr/local/www/edit.php:182 +#: usr/local/www/edit.php:183 +msgid "Load" +msgstr "Carregar" + +#: usr/local/www/edit.php:180 usr/local/www/edit.php:183 +#: usr/local/www/edit.php:184 +msgid "Browse" +msgstr "Navegar" + +#: usr/local/www/services_captiveportal.php:63 +#: usr/local/www/services_captiveportal_filemanager.php:75 +#: usr/local/www/services_captiveportal_filemanager.php:150 +#: usr/local/www/services_captiveportal_ip.php:64 +#: usr/local/www/services_captiveportal_ip.php:104 +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_mac.php:63 +#: usr/local/www/services_captiveportal_mac.php:154 +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_captiveportal_hostname.php:66 +#: usr/local/www/services_captiveportal_hostname.php:109 +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers.php:403 +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_captiveportal_vouchers.php:410 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/services_captiveportal_vouchers.php:423 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_ip.php:102 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/services_captiveportal_mac.php:152 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/services_captiveportal_hostname.php:107 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/services_captiveportal_filemanager.php:147 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:432 +#: usr/local/www/services_captiveportal_mac.php:162 +#: usr/local/www/services_captiveportal_vouchers.php:437 +msgid "Captive portal" +msgstr "Portal Captive" + +#: usr/local/www/services_captiveportal.php:146 +#: usr/local/www/services_captiveportal_zones_edit.php:61 +#: usr/local/www/services_captiveportal_zones_edit.php:99 +#: usr/local/www/services_captiveportal.php:147 +#: usr/local/www/services_captiveportal.php:153 +#: usr/local/www/services_captiveportal_zones_edit.php:59 +#: usr/local/www/services_captiveportal_zones_edit.php:101 +#: usr/local/www/services_captiveportal_zones_edit.php:97 +#: usr/local/www/services_captiveportal.php:155 +msgid "Zone name" +msgstr "Nome da Zona" + +#: usr/local/www/services_captiveportal.php:154 +#: usr/local/www/services_captiveportal.php:155 +#: usr/local/www/services_captiveportal.php:161 +#: usr/local/www/services_captiveportal.php:163 +#, php-format +msgid "The captive portal cannot be used on interface %s since it is part of a bridge." +msgstr "O portal captive não pode ser usado na interface %s já que ela faz parte de uma ponte." + +#: usr/local/www/services_captiveportal.php:158 +#: usr/local/www/services_captiveportal.php:159 +#: usr/local/www/services_captiveportal.php:165 +#: usr/local/www/services_captiveportal.php:167 +#, php-format +msgid "The captive portal cannot be used on interface %s since it is used already on %s instance." +msgstr "O Captive Portal não pode ser usado na interface %s já que ele está sendo usado na instância %s." + +#: usr/local/www/services_captiveportal.php:166 +#: usr/local/www/services_captiveportal.php:167 +msgid "Certificate and key must be specified for HTTPS login." +msgstr "Certificado e chave devem ser especificados para o login HTTPS." + +#: usr/local/www/services_captiveportal.php:169 +#: usr/local/www/system_camanager.php:168 +#: usr/local/www/system_certmanager.php:168 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/services_captiveportal.php:170 +#: usr/local/www/system_camanager.php:170 +#: usr/local/www/system_certmanager.php:199 +msgid "This certificate does not appear to be valid." +msgstr "Esse certificado não parece ser válido." + +#: usr/local/www/services_captiveportal.php:171 +#: usr/local/www/services_captiveportal.php:172 +msgid "This intermmediate certificate does not appear to be valid." +msgstr "Esse certificado intermediário não parece ser válido." + +#: usr/local/www/services_captiveportal.php:173 +#: usr/local/www/services_captiveportal.php:174 +msgid "This key does not appear to be valid." +msgstr "Essa chave não parece ser válida." + +#: usr/local/www/services_captiveportal.php:177 +#: usr/local/www/services_captiveportal.php:178 +#: usr/local/www/services_captiveportal.php:176 +msgid "The HTTPS server name must be specified for HTTPS login." +msgstr "O nome do servidor HTTPS deve ser especificado pelo login HTTPS." + +#: usr/local/www/services_captiveportal.php:183 +#: usr/local/www/services_captiveportal.php:184 +#: usr/local/www/services_captiveportal.php:182 +#: usr/local/www/services_captiveportal.php:185 +msgid "The timeout must be at least 1 minute." +msgstr "O tempo de expiração deve ser pelo menos de 1 minuto." + +#: usr/local/www/services_captiveportal.php:186 +#: usr/local/www/services_captiveportal.php:187 +#: usr/local/www/services_captiveportal.php:185 +#: usr/local/www/services_captiveportal.php:203 +msgid "The idle timeout must be at least 1 minute." +msgstr "O tempo ocioso deve ser no mínimo de 1 minuto." + +#: usr/local/www/services_captiveportal.php:189 +#: usr/local/www/services_captiveportal.php:190 +#: usr/local/www/services_captiveportal.php:188 +#: usr/local/www/services_captiveportal.php:206 +msgid "The pass-through credit count must be a number or left blank." +msgstr "A contagem de crédito de passagem deve ser um número ou deixado em branco." + +#: usr/local/www/services_captiveportal.php:192 +#: usr/local/www/services_captiveportal.php:193 +#: usr/local/www/services_captiveportal.php:191 +#: usr/local/www/services_captiveportal.php:209 +msgid "The waiting period to restore pass-through credits must be above 0 hours." +msgstr "O período de espera para restaurar os créditos de passagem deve ser acima de 0 horas." + +#: usr/local/www/services_captiveportal.php:196 +#: usr/local/www/services_captiveportal.php:199 +#: usr/local/www/services_captiveportal.php:202 +#: usr/local/www/services_captiveportal.php:205 +#: usr/local/www/services_captiveportal_ip_edit.php:107 +#: usr/local/www/services_captiveportal.php:197 +#: usr/local/www/services_captiveportal.php:200 +#: usr/local/www/services_captiveportal.php:203 +#: usr/local/www/services_captiveportal.php:206 +#: usr/local/www/services_captiveportal.php:195 +#: usr/local/www/services_captiveportal.php:198 +#: usr/local/www/services_captiveportal.php:201 +#: usr/local/www/services_captiveportal.php:204 +#: usr/local/www/services_captiveportal_ip_edit.php:105 +#: usr/local/www/services_captiveportal_ip_edit.php:104 +#: usr/local/www/services_captiveportal.php:213 +#: usr/local/www/services_captiveportal.php:216 +#: usr/local/www/services_captiveportal.php:219 +#: usr/local/www/services_captiveportal.php:222 +#, php-format +msgid "A valid IP address must be specified. [%s]" +msgstr "Um endereço IP válido deve ser especificado. [%s]" + +#: usr/local/www/services_captiveportal.php:208 +#: usr/local/www/services_captiveportal.php:211 +#: usr/local/www/services_captiveportal.php:214 +#: usr/local/www/services_captiveportal.php:217 +#: usr/local/www/services_captiveportal.php:220 +#: usr/local/www/services_captiveportal.php:209 +#: usr/local/www/services_captiveportal.php:212 +#: usr/local/www/services_captiveportal.php:215 +#: usr/local/www/services_captiveportal.php:218 +#: usr/local/www/services_captiveportal.php:221 +#: usr/local/www/services_captiveportal.php:207 +#: usr/local/www/services_captiveportal.php:210 +#: usr/local/www/services_captiveportal.php:213 +#: usr/local/www/services_captiveportal.php:216 +#: usr/local/www/services_captiveportal.php:219 +#: usr/local/www/services_captiveportal.php:225 +#: usr/local/www/services_captiveportal.php:228 +#: usr/local/www/services_captiveportal.php:231 +#: usr/local/www/services_captiveportal.php:234 +#: usr/local/www/services_captiveportal.php:237 +#, php-format +msgid "A valid port number must be specified. [%s]" +msgstr "Um número de porta válido deve ser especificado. [%s]" + +#: usr/local/www/services_captiveportal.php:223 +#: usr/local/www/services_captiveportal.php:224 +#: usr/local/www/services_captiveportal.php:222 +#: usr/local/www/services_captiveportal.php:240 +msgid "The maximum number of concurrent connections per client IP address may not be larger than the global maximum." +msgstr "O número máximo de conexões concorrentes por endereço IP de cliente não pode ser maior que o máximo global." + +#: usr/local/www/services_captiveportal.php:421 +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal.php:423 +#: usr/local/www/services_captiveportal.php:441 +msgid "Captive portal(s)" +msgstr "Captive portal(s)" + +#: usr/local/www/services_captiveportal.php:422 +#: usr/local/www/services_captiveportal_filemanager.php:151 +#: usr/local/www/services_captiveportal_ip.php:105 +#: usr/local/www/services_captiveportal_mac.php:155 +#: usr/local/www/services_captiveportal_hostname.php:110 +#: usr/local/www/services_captiveportal_vouchers.php:404 +#: usr/local/www/services_captiveportal_vouchers.php:411 +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_vouchers.php:424 +#: usr/local/www/services_captiveportal_ip.php:103 +#: usr/local/www/services_captiveportal_mac.php:153 +#: usr/local/www/services_captiveportal_hostname.php:108 +#: usr/local/www/services_captiveportal.php:424 +#: usr/local/www/services_captiveportal_filemanager.php:148 +#: usr/local/www/services_captiveportal_vouchers.php:433 +#: usr/local/www/services_captiveportal_mac.php:163 +#: usr/local/www/services_captiveportal.php:442 +#: usr/local/www/services_captiveportal_vouchers.php:438 +msgid "Pass-through MAC" +msgstr "Pass-through MAC" + +#: usr/local/www/services_captiveportal.php:423 +#: usr/local/www/services_captiveportal_filemanager.php:152 +#: usr/local/www/services_captiveportal_ip.php:106 +#: usr/local/www/services_captiveportal_mac.php:156 +#: usr/local/www/services_captiveportal_vouchers.php:405 +#: usr/local/www/services_captiveportal_vouchers.php:412 +#: usr/local/www/services_captiveportal.php:427 +#: usr/local/www/services_captiveportal_vouchers.php:425 +#: usr/local/www/services_captiveportal_ip.php:104 +#: usr/local/www/services_captiveportal_mac.php:154 +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal_filemanager.php:149 +#: usr/local/www/services_captiveportal_vouchers.php:434 +#: usr/local/www/services_captiveportal_mac.php:164 +#: usr/local/www/services_captiveportal.php:443 +#: usr/local/www/services_captiveportal_vouchers.php:439 +msgid "Allowed IP addresses" +msgstr "Endereços IP permitidos" + +#: usr/local/www/services_captiveportal.php:424 +#: usr/local/www/services_captiveportal_filemanager.php:153 +#: usr/local/www/services_captiveportal_ip.php:107 +#: usr/local/www/services_captiveportal_mac.php:157 +#: usr/local/www/services_captiveportal_hostname.php:112 +#: usr/local/www/services_captiveportal_vouchers.php:406 +#: usr/local/www/services_captiveportal_vouchers.php:413 +#: usr/local/www/services_captiveportal.php:428 +#: usr/local/www/services_captiveportal_vouchers.php:426 +#: usr/local/www/services_captiveportal_ip.php:105 +#: usr/local/www/services_captiveportal_mac.php:155 +#: usr/local/www/services_captiveportal_hostname.php:110 +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_filemanager.php:150 +#: usr/local/www/services_captiveportal_vouchers.php:435 +#: usr/local/www/services_captiveportal_mac.php:165 +#: usr/local/www/services_captiveportal.php:444 +#: usr/local/www/services_captiveportal_vouchers.php:440 +msgid "Allowed Hostnames" +msgstr "Hostnames permitidos" + +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal.php:587 +#: usr/local/www/services_captiveportal_filemanager.php:154 +#: usr/local/www/services_captiveportal_ip.php:108 +#: usr/local/www/services_captiveportal_mac.php:158 +#: usr/local/www/services_captiveportal_hostname.php:113 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers.php:407 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_vouchers.php:414 +#: usr/local/www/services_captiveportal.php:429 +#: usr/local/www/services_captiveportal.php:592 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/services_captiveportal_vouchers.php:427 +#: usr/local/www/services_captiveportal_ip.php:106 +#: usr/local/www/services_captiveportal_mac.php:156 +#: usr/local/www/services_captiveportal_hostname.php:111 +#: usr/local/www/services_captiveportal.php:427 +#: usr/local/www/services_captiveportal.php:590 +#: usr/local/www/services_captiveportal_filemanager.php:151 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:436 +#: usr/local/www/services_captiveportal.php:584 +#: usr/local/www/services_captiveportal_mac.php:166 +#: usr/local/www/services_captiveportal.php:445 +#: usr/local/www/services_captiveportal.php:600 +#: usr/local/www/services_captiveportal_vouchers.php:441 +msgid "Vouchers" +msgstr "Vouchers" + +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_filemanager.php:155 +#: usr/local/www/services_captiveportal_ip.php:109 +#: usr/local/www/services_captiveportal_mac.php:159 +#: usr/local/www/services_captiveportal_hostname.php:114 +#: usr/local/www/services_captiveportal_vouchers.php:408 +#: usr/local/www/services_captiveportal_vouchers.php:415 +#: usr/local/www/services_captiveportal.php:430 +#: usr/local/www/services_captiveportal_vouchers.php:428 +#: usr/local/www/services_captiveportal_ip.php:107 +#: usr/local/www/services_captiveportal_mac.php:157 +#: usr/local/www/services_captiveportal_hostname.php:112 +#: usr/local/www/services_captiveportal.php:428 +#: usr/local/www/services_captiveportal_filemanager.php:152 +#: usr/local/www/services_captiveportal_vouchers.php:437 +#: usr/local/www/services_captiveportal_mac.php:167 +#: usr/local/www/services_captiveportal.php:446 +#: usr/local/www/services_captiveportal_vouchers.php:442 +msgid "File Manager" +msgstr "Gerenciados de arquivo" + +#: usr/local/www/services_captiveportal.php:436 +#: usr/local/www/services_captiveportal.php:440 +#: usr/local/www/services_captiveportal.php:438 +#: usr/local/www/services_captiveportal.php:456 +msgid "Enable captive portal" +msgstr "Habilitar portal captive" + +#: usr/local/www/services_captiveportal.php:450 +#: usr/local/www/services_captiveportal.php:455 +#: usr/local/www/services_captiveportal.php:453 +#: usr/local/www/services_captiveportal.php:471 +msgid "Select the interface(s) to enable for captive portal." +msgstr "Selecione a(s) interface(s) a habilitar para o captive portal." + +#: usr/local/www/services_captiveportal.php:453 +#: usr/local/www/services_captiveportal.php:458 +#: usr/local/www/services_captiveportal.php:456 +#: usr/local/www/services_captiveportal.php:474 +msgid "Maximum concurrent connections" +msgstr "Máximo de conexões concorrentes" + +#: usr/local/www/services_captiveportal.php:457 +#: usr/local/www/services_captiveportal.php:462 +#: usr/local/www/services_captiveportal.php:460 +#: usr/local/www/services_captiveportal.php:478 +msgid "per client IP address (0 = no limit)" +msgstr "por endereço IP de cliente (0 = sem limite)" + +#: usr/local/www/services_captiveportal.php:460 +msgid "This setting limits the number of concurrent connections to the captive portal HTTP(S) server. This does not set how many users can be logged in to the captive portal, but rather how many users can load the portal page or authenticate at the same time! Default is 4 connections per client IP address, with a total maximum of 16 connections." +msgstr "Essa configuração limita o número de conexões concorrentes para o servidor HTTP(S) do portal captive. Ela não configura quantos usuários podem estar logados no portal captive, mas sim quantos usuários podem carregar a página do portal ou autenticar ao mesmo tempo! O padrão é 4 conexões por endereço IP de cliente, com o total máximo de 16 conexões." + +#: usr/local/www/services_captiveportal.php:468 +#: usr/local/www/services_captiveportal.php:475 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/system_advanced_misc.php:426 +#: usr/local/www/system_advanced_misc.php:469 +#: usr/local/www/services_captiveportal.php:473 +#: usr/local/www/services_captiveportal.php:480 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/system_advanced_misc.php:518 +#: usr/local/www/services_captiveportal.php:471 +#: usr/local/www/services_captiveportal.php:478 +#: usr/local/www/system_advanced_misc.php:530 +#: usr/local/www/system_advanced_misc.php:651 +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:496 +#: usr/local/www/system_advanced_misc.php:669 +msgid "minutes" +msgstr "minutos" + +#: usr/local/www/services_captiveportal.php:469 +#: usr/local/www/services_captiveportal.php:474 +#: usr/local/www/services_captiveportal.php:472 +#: usr/local/www/services_captiveportal.php:490 +msgid "Clients will be disconnected after this amount of inactivity. They may log in again immediately, though. Leave this field blank for no idle timeout." +msgstr "Clientes serão desconectados depois desse total de inatividade. Eles podem fazer login novamente imediatamente, no entando. Deixe esse campo em branco para nenhum tempo ocioso." + +#: usr/local/www/services_captiveportal.php:472 +#: usr/local/www/services_captiveportal.php:477 +#: usr/local/www/services_captiveportal.php:475 +#: usr/local/www/services_captiveportal.php:493 +msgid "Hard timeout" +msgstr "Hard timeout" + +#: usr/local/www/services_captiveportal.php:476 +#: usr/local/www/services_captiveportal.php:481 +#: usr/local/www/services_captiveportal.php:479 +#: usr/local/www/services_captiveportal.php:497 +msgid "Clients will be disconnected after this amount of time, regardless of activity. They may log in again immediately, though. Leave this field blank for no hard timeout (not recommended unless an idle timeout is set)." +msgstr "Clientes serão desconectados depois desse tempo, independentemente de ter atividade ou não. Eles podem realizar login novamente imediatamente, no entanto. Deixe esse campo em branco para não ter tempo de expiração rígido (não recomendado a menos que um tempo ocioso estiver configurado)." + +#: usr/local/www/services_captiveportal.php:479 +#: usr/local/www/services_captiveportal.php:484 +#: usr/local/www/services_captiveportal.php:482 +#: usr/local/www/services_captiveportal.php:500 +msgid "Pass-through credits allowed per MAC address" +msgstr "Créditos de passagem permitidos por endereço MAC" + +#: usr/local/www/services_captiveportal.php:482 +#: usr/local/www/services_captiveportal.php:487 +#: usr/local/www/services_captiveportal.php:485 +#: usr/local/www/services_captiveportal.php:503 +msgid "per client MAC address (0 or blank = none)" +msgstr "por endereço MAC de cliente (0 ou branco = nenhum)" + +#: usr/local/www/services_captiveportal.php:483 +#: usr/local/www/services_captiveportal.php:488 +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/services_captiveportal.php:504 +msgid "This setting allows passing through the captive portal without authentication a limited number of times per MAC address. Once used up, the client can only log in with valid credentials until the waiting period specified below has expired. Recommended to set a hard timeout and/or idle timeout when using this for it to be effective." +msgstr "Essa configuração permite passagem pelo portal captive sem autenticação para um número limitado de vezes por endereço MAC. Uma vez utilizado, o cliente somente pode realizar login com credenciais válidas até que o período de espera especificado abaixo tenha expirado. Recomenda-se configurar um tempo de expiração e/ou tempo de espera ao utilizar essa função para que ela seja mais efetiva." + +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/services_captiveportal.php:491 +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:507 +msgid "Waiting period to restore pass-through credits" +msgstr "Período de espera para restaurar créditos de passagem" + +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:494 +#: usr/local/www/services_captiveportal.php:492 +#: usr/local/www/services_captiveportal.php:510 +msgid "hours" +msgstr "horas" + +#: usr/local/www/services_captiveportal.php:490 +#: usr/local/www/services_captiveportal.php:495 +#: usr/local/www/services_captiveportal.php:493 +#: usr/local/www/services_captiveportal.php:511 +msgid "Clients will have their available pass-through credits restored to the original count after this amount of time since using the first one. This must be above 0 hours if pass-through credits are enabled." +msgstr "Clientes terão seus créditos de passagem restaurados para a contagem original após esse total de tempo desde que usando o primeiro. Esse deve ser acima de 0 horas se os créditos de passagem estão habilitados." + +#: usr/local/www/services_captiveportal.php:493 +#: usr/local/www/services_captiveportal.php:498 +#: usr/local/www/services_captiveportal.php:496 +#: usr/local/www/services_captiveportal.php:514 +msgid "Reset waiting period on attempted access" +msgstr "Período de espera para reinício na tentativa de acesso" + +#: usr/local/www/services_captiveportal.php:496 +#: usr/local/www/services_captiveportal.php:501 +#: usr/local/www/services_captiveportal.php:499 +#: usr/local/www/services_captiveportal.php:517 +msgid "Enable waiting period reset on attempted access" +msgstr "Habilitar período de espera de reinício na tentativa de acesso" + +#: usr/local/www/services_captiveportal.php:497 +#: usr/local/www/services_captiveportal.php:502 +#: usr/local/www/services_captiveportal.php:500 +#: usr/local/www/services_captiveportal.php:518 +msgid "If enabled, the waiting period is reset to the original duration if access is attempted when all pass-through credits have already been exhausted." +msgstr "Se habilitado, o período de espera é reiniciado para a duração original se houver tentaviva de acesso quando todos os créditos de passagem tiverem exaurido." + +#: usr/local/www/services_captiveportal.php:500 +#: usr/local/www/services_captiveportal.php:505 +#: usr/local/www/services_captiveportal.php:503 +#: usr/local/www/services_captiveportal.php:521 +msgid "Logout popup window" +msgstr "Janela popup de logout" + +#: usr/local/www/services_captiveportal.php:503 +#: usr/local/www/services_captiveportal.php:508 +#: usr/local/www/services_captiveportal.php:506 +#: usr/local/www/services_captiveportal.php:524 +msgid "Enable logout popup window" +msgstr "Habilitar janela popup de logout" + +#: usr/local/www/services_captiveportal.php:504 +#: usr/local/www/services_captiveportal.php:509 +#: usr/local/www/services_captiveportal.php:507 +#: usr/local/www/services_captiveportal.php:525 +msgid "If enabled, a popup window will appear when clients are allowed through the captive portal. This allows clients to explicitly disconnect themselves before the idle or hard timeout occurs." +msgstr "Se habilitada, uma janela popup irá aparecer quando os clientes tiverem acesso através do portal captive. Isso permite que clientes desconectem-se explicitamente antes que o tempo ocioso ou tempo de expiração rídigo ocorra." + +#: usr/local/www/services_captiveportal.php:507 +#: usr/local/www/services_captiveportal.php:512 +#: usr/local/www/services_captiveportal.php:510 +#: usr/local/www/services_captiveportal.php:528 +msgid "Pre-authentication redirect URL" +msgstr "URL de redirecionamento de preautenticação" + +#: usr/local/www/services_captiveportal.php:510 +#: usr/local/www/services_captiveportal.php:515 +#: usr/local/www/services_captiveportal.php:513 +#: usr/local/www/services_captiveportal.php:531 +#, php-format +msgid "Use this field to set $PORTAL_REDIRURL$ variable which can be accessed using your custom captive portal index.php page or error pages." +msgstr "Use este campo para definir a variável $PORTAL_REDIRURL$, que pode ser acessada usando sua página personalizada do captive portal index.php ou páginas de erro." + +#: usr/local/www/services_captiveportal.php:514 +#: usr/local/www/services_captiveportal.php:519 +#: usr/local/www/services_captiveportal.php:517 +#: usr/local/www/services_captiveportal.php:535 +msgid "After authentication Redirection URL" +msgstr "URL de redirecionamento após autenticação" + +#: usr/local/www/services_captiveportal.php:518 +#: usr/local/www/services_captiveportal.php:523 +#: usr/local/www/services_captiveportal.php:521 +#: usr/local/www/services_captiveportal.php:539 +msgid "If you provide a URL here, clients will be redirected to that URL instead of the one they initially tried to access after they've authenticated." +msgstr "Se você fornecer uma URL aqui, clientes serão redirecionados para essa URL ao invés daquela que inicialmente eles tentaram acessar após terem se autenticado." + +#: usr/local/www/services_captiveportal.php:522 +#: usr/local/www/services_captiveportal.php:527 +#: usr/local/www/services_captiveportal.php:525 +#: usr/local/www/services_captiveportal.php:543 +msgid "Concurrent user logins" +msgstr "Logins de usuário concorrentes" + +#: usr/local/www/services_captiveportal.php:525 +#: usr/local/www/services_captiveportal.php:530 +#: usr/local/www/services_captiveportal.php:528 +#: usr/local/www/services_captiveportal.php:546 +msgid "Disable concurrent logins" +msgstr "Desabilitar logins concorrentes" + +#: usr/local/www/services_captiveportal.php:526 +#: usr/local/www/services_captiveportal.php:531 +#: usr/local/www/services_captiveportal.php:529 +#: usr/local/www/services_captiveportal.php:547 +msgid "If this option is set, only the most recent login per username will be active. Subsequent logins will cause machines previously logged in with the same username to be disconnected." +msgstr "Se essa opção for configurada, somente o login por nome de usuário mais recente será ativado. Logins subsequentes provocarão a desconexão de máquinas anteriormente logadas com o mesmo nome de usuário." + +#: usr/local/www/services_captiveportal.php:529 +#: usr/local/www/services_captiveportal.php:534 +#: usr/local/www/services_captiveportal.php:532 +#: usr/local/www/services_captiveportal.php:550 +msgid "MAC filtering" +msgstr "Filtragem de MAC" + +#: usr/local/www/services_captiveportal.php:532 +#: usr/local/www/services_captiveportal.php:537 +#: usr/local/www/services_captiveportal.php:535 +#: usr/local/www/services_captiveportal.php:553 +msgid "Disable MAC filtering" +msgstr "Desabilitar filtragem de MAC" + +#: usr/local/www/services_captiveportal.php:533 +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:536 +#: usr/local/www/services_captiveportal.php:554 +msgid "If this option is set, no attempts will be made to ensure that the MAC address of clients stays the same while they're logged in.This is required when the MAC address of the client cannot be determined (usually because there are routers between" +msgstr "Se essa opção for configurada, nenhuma tentativa será feita para garantir que o endereço MAC de clientes se mantenha o mesmo enquanto eles estão logados. Esse é um requisito quando o endereço MAC do cliente não pode ser determinado (normalmente porque não há rotas entre" + +#: usr/local/www/services_captiveportal.php:534 +#: usr/local/www/services_captiveportal.php:539 +#: usr/local/www/services_captiveportal.php:537 +#: usr/local/www/services_captiveportal.php:555 +msgid "and the clients)." +msgstr "e os clientes)." + +#: usr/local/www/services_captiveportal.php:535 +#: usr/local/www/services_captiveportal.php:540 +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:556 +msgid "If this is enabled, RADIUS MAC authentication cannot be used." +msgstr "Se isto estiver habilitado, autenticação de MAC RADIUS não pode ser usada." + +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:541 +#: usr/local/www/services_captiveportal.php:559 +msgid "Pass-through MAC Auto Entry" +msgstr "Entrada Auto de MAC Pass-through" + +#: usr/local/www/services_captiveportal.php:541 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:544 +#: usr/local/www/services_captiveportal.php:562 +msgid "Enable Pass-through MAC automatic additions" +msgstr "Habilitar adições automáticas de MAC Pass-through" + +#: usr/local/www/services_captiveportal.php:542 +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:545 +#: usr/local/www/services_captiveportal.php:563 +msgid "If this option is set, a MAC passthrough entry is automatically added after the user has successfully authenticated. Users of that MAC address will never have to authenticate again." +msgstr "Se essa opção estiver configurada, a entrada MAC passthrough é automaticamente adicionada após o usuário ter autenticado com sucesso. Usuários de tal endereço MAC nunca terão que autenticar novamente." + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +msgid "To remove the passthrough MAC entry you either have to log in and remove it manually from the" +msgstr "Para remover a entrada MAC pass-through você deve realizar login e removê-la" + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +msgid "Pass-through MAC tab" +msgstr "Aba de MAC Pass-through" + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:570 +msgid "or send a POST from another system to remove it." +msgstr "ou envie um POST de outro sistema para removê-la." + +#: usr/local/www/services_captiveportal.php:544 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:565 +msgid "If this is enabled, RADIUS MAC authentication cannot be used. Also, the logout window will not be shown." +msgstr "Se isto estiver habilitado, a autenticação MAC RADIUS não pode ser usada. Além disso, a janela de logout não será exibida." + +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:550 +#: usr/local/www/services_captiveportal.php:568 +msgid "Enable Pass-through MAC automatic addition with username" +msgstr "Habilitar adição automática de MAC Pass-through com nome de usuário" + +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:553 +#: usr/local/www/services_captiveportal.php:551 +#: usr/local/www/services_captiveportal.php:569 +msgid "If this option is set, with the automatically MAC passthrough entry created the username, used during authentication, will be saved." +msgstr "Se essa opção estiver configurada, com a entrada automática de MAC passthrough criada, o nome de usuário, usado durante a autenticação, será salvo." + +#: usr/local/www/services_captiveportal.php:553 +#: usr/local/www/services_captiveportal.php:558 +#: usr/local/www/services_captiveportal.php:556 +#: usr/local/www/services_captiveportal.php:574 +msgid "Per-user bandwidth restriction" +msgstr "Restrição de banda por usuário" + +#: usr/local/www/services_captiveportal.php:556 +#: usr/local/www/services_captiveportal.php:561 +#: usr/local/www/services_captiveportal.php:559 +#: usr/local/www/services_captiveportal.php:577 +msgid "Enable per-user bandwidth restriction" +msgstr "Habilitar restrição de banda por usuário" + +#: usr/local/www/services_captiveportal.php:559 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:562 +#: usr/local/www/services_captiveportal.php:580 +msgid "Default download" +msgstr "Download padrão" + +#: usr/local/www/services_captiveportal.php:563 +#: usr/local/www/services_captiveportal.php:568 +#: usr/local/www/services_captiveportal.php:566 +#: usr/local/www/services_captiveportal.php:584 +msgid "Default upload" +msgstr "Carregamento padrão" + +#: usr/local/www/services_captiveportal.php:567 +#: usr/local/www/services_captiveportal.php:572 +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:588 +msgid "If this option is set, the captive portal will restrict each user who logs in to the specified default bandwidth. RADIUS can override the default settings. Leave empty or set to 0 for no limit." +msgstr "Se essa opção estiver configurada, o portal captive restringirá cada usuário que realizar login na largura de banda especificada. RADIUS pode sobrescrever a configuração padrão. Deixe vazio ou configure 0 para não impor limite." + +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:575 +#: usr/local/www/services_captiveportal.php:573 +msgid "PMS authentication" +msgstr "Autenticação PMS" + +#: usr/local/www/services_captiveportal.php:573 +#: usr/local/www/services_captiveportal.php:578 +#: usr/local/www/services_captiveportal.php:576 +msgid "Enable PMS authentication" +msgstr "Habilitar autenticação PSM" + +#: usr/local/www/services_captiveportal.php:574 +#: usr/local/www/services_captiveportal.php:579 +#: usr/local/www/services_captiveportal.php:577 +msgid "If this option is set, users will be authenticated through the PMS backend if they fill the necessary information in the login page." +msgstr "Se habilitada, usuários poderão se autenticar através do painel PMS, se eles preencherem os campos necessários na pagina de login." + +#: usr/local/www/services_captiveportal.php:583 +#: usr/local/www/services_captiveportal.php:588 +#: usr/local/www/services_captiveportal.php:586 +#: usr/local/www/services_captiveportal.php:580 +#: usr/local/www/services_captiveportal.php:596 +msgid "No Authentication" +msgstr "Sem Autenticação" + +#: usr/local/www/services_captiveportal.php:587 +#: usr/local/www/diag_ipsec.php:194 +#: usr/local/www/services_captiveportal.php:592 +#: usr/local/www/diag_ipsec.php:195 +#: usr/local/www/services_captiveportal.php:590 +#: usr/local/www/diag_ipsec.php:196 +#: usr/local/www/services_captiveportal.php:584 +#: usr/local/www/services_captiveportal.php:600 +msgid "Local" +msgstr "Local" + +#: usr/local/www/services_captiveportal.php:587 usr/local/www/fbegin.inc:93 +#: usr/local/www/fbegin.inc:95 usr/local/www/system_usermanager.php:54 +#: usr/local/www/fbegin.inc:110 usr/local/www/fbegin.inc:112 +#: usr/local/www/services_captiveportal.php:592 usr/local/www/fbegin.inc:119 +#: usr/local/www/fbegin.inc:121 usr/local/www/services_captiveportal.php:590 +#: usr/local/www/services_captiveportal.php:584 usr/local/www/fbegin.inc:111 +#: usr/local/www/fbegin.inc:113 usr/local/www/services_captiveportal.php:600 +msgid "User Manager" +msgstr "Ger. de usuário" + +#: usr/local/www/services_captiveportal.php:591 +#: usr/local/www/services_captiveportal.php:596 +#: usr/local/www/services_captiveportal.php:594 +#: usr/local/www/services_captiveportal.php:612 +msgid "RADIUS Authentication" +msgstr "Autenticação RADIUS" + +#: usr/local/www/services_captiveportal.php:599 +#: usr/local/www/services_captiveportal.php:635 +#: usr/local/www/services_captiveportal.php:678 +#: usr/local/www/services_captiveportal.php:633 +#: usr/local/www/services_captiveportal.php:676 +#: usr/local/www/services_captiveportal.php:634 +#: usr/local/www/services_captiveportal.php:677 +#: usr/local/www/services_captiveportal.php:650 +#: usr/local/www/services_captiveportal.php:693 +msgid "Primary RADIUS server" +msgstr "Servidor RADIUS primário" + +#: usr/local/www/services_captiveportal.php:604 +#: usr/local/www/services_captiveportal.php:640 +#: usr/local/www/services_captiveportal.php:638 +#: usr/local/www/services_captiveportal.php:639 +#: usr/local/www/services_captiveportal.php:655 +msgid "Enter the IP address of the RADIUS server which users of the captive portal have to authenticate against." +msgstr "Informe o endereço IP do servidor RADIUS no qual usuários do portal captive tem que autenticar." + +#: usr/local/www/services_captiveportal.php:609 +#: usr/local/www/services_captiveportal.php:645 +#: usr/local/www/services_captiveportal.php:643 +#: usr/local/www/services_captiveportal.php:644 +#: usr/local/www/services_captiveportal.php:660 +msgid "Leave this field blank to use the default port (1812)." +msgstr "Deixe esse campo em branco para usar a porta padrão (1812)." + +#: usr/local/www/services_captiveportal.php:612 +#: usr/local/www/services_captiveportal.php:632 +#: usr/local/www/services_captiveportal.php:651 +#: usr/local/www/services_captiveportal.php:670 +#: usr/local/www/services_captiveportal.php:725 +#: usr/local/www/services_captiveportal.php:648 +#: usr/local/www/services_captiveportal.php:668 +#: usr/local/www/services_captiveportal.php:690 +#: usr/local/www/services_captiveportal.php:709 +#: usr/local/www/services_captiveportal.php:767 +#: usr/local/www/services_captiveportal.php:646 +#: usr/local/www/services_captiveportal.php:666 +#: usr/local/www/services_captiveportal.php:688 +#: usr/local/www/services_captiveportal.php:707 +#: usr/local/www/services_captiveportal.php:765 +#: usr/local/www/services_captiveportal.php:647 +#: usr/local/www/services_captiveportal.php:667 +#: usr/local/www/services_captiveportal.php:689 +#: usr/local/www/services_captiveportal.php:708 +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:705 +#: usr/local/www/services_captiveportal.php:724 +msgid "Shared secret" +msgstr "Segredo compartilhado" + +#: usr/local/www/services_captiveportal.php:614 +#: usr/local/www/services_captiveportal.php:650 +#: usr/local/www/services_captiveportal.php:648 +#: usr/local/www/services_captiveportal.php:649 +#: usr/local/www/services_captiveportal.php:665 +msgid "Leave this field blank to not use a RADIUS shared secret (not recommended)." +msgstr "Deixe o campo em brando para não usar o segredo compartilhado do RADIUS (não recomendado)." + +#: usr/local/www/services_captiveportal.php:620 usr/local/www/vpn_pptp.php:440 +#: usr/local/www/services_captiveportal.php:656 +#: usr/local/www/services_captiveportal.php:697 usr/local/www/vpn_pptp.php:442 +#: usr/local/www/services_captiveportal.php:654 +#: usr/local/www/services_captiveportal.php:695 +#: usr/local/www/services_captiveportal.php:655 +#: usr/local/www/services_captiveportal.php:696 usr/local/www/vpn_pptp.php:445 +#: usr/local/www/services_captiveportal.php:671 +#: usr/local/www/services_captiveportal.php:712 +msgid "Secondary RADIUS server" +msgstr "Servidor RADIUS secundário" + +#: usr/local/www/services_captiveportal.php:625 +#: usr/local/www/services_captiveportal.php:661 +#: usr/local/www/services_captiveportal.php:659 +#: usr/local/www/services_captiveportal.php:660 +#: usr/local/www/services_captiveportal.php:676 +msgid "If you have a second RADIUS server, you can activate it by entering its IP address here." +msgstr "Se você possui um servidor RADIUS secundário, você pode ativa-lo informando seu endereço IP aqui." + +#: usr/local/www/services_captiveportal.php:639 +msgid "Tertiary RADIUS server" +msgstr "Servidor RADIUS terciário" + +#: usr/local/www/services_captiveportal.php:644 +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:681 +#: usr/local/www/services_captiveportal.php:682 +#: usr/local/www/services_captiveportal.php:698 +msgid "If you have a third RADIUS server, you can activate it by entering its IP address here." +msgstr "Se você possui um terceiro servidor RADIUS, você pode ativa-lo informando seu endereço IP aqui." + +#: usr/local/www/services_captiveportal.php:658 +msgid "Quaternary RADIUS server" +msgstr "Servidor RADIUS quartenário" + +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:702 +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/services_captiveportal.php:701 +#: usr/local/www/services_captiveportal.php:717 +msgid "If you have a fourth RADIUS server, you can activate it by entering its IP address here." +msgstr "Se você possui um quarto servidor RADIUS, você pode ativa-lo informando seu endereço IP aqui." + +#: usr/local/www/services_captiveportal.php:677 +#: usr/local/www/services_captiveportal.php:719 +#: usr/local/www/services_captiveportal.php:717 +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/services_captiveportal.php:731 +msgid "Accounting" +msgstr "Contabilidade" + +#: usr/local/www/services_captiveportal.php:682 +#: usr/local/www/services_captiveportal.php:724 +#: usr/local/www/services_captiveportal.php:722 +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/services_captiveportal.php:736 +msgid "send RADIUS accounting packets" +msgstr "enviar pacotes de accounting RADIUS" + +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:725 +#: usr/local/www/services_captiveportal.php:723 +#: usr/local/www/services_captiveportal.php:721 +#: usr/local/www/services_captiveportal.php:737 +msgid "If this is enabled, RADIUS accounting packets will be sent to the primary RADIUS server." +msgstr "Se isso estiver habilitado, pacotes de accounting RADIUS serão enviados para o servidor RADIUS primário." + +#: usr/local/www/services_captiveportal.php:686 +#: usr/local/www/services_captiveportal.php:728 +#: usr/local/www/services_captiveportal.php:726 +#: usr/local/www/services_captiveportal.php:724 +#: usr/local/www/services_captiveportal.php:740 +msgid "Accounting port" +msgstr "Porta de Accounting" + +#: usr/local/www/services_captiveportal.php:688 +#: usr/local/www/services_captiveportal.php:730 +#: usr/local/www/services_captiveportal.php:728 +#: usr/local/www/services_captiveportal.php:726 +#: usr/local/www/services_captiveportal.php:742 +msgid "Leave blank to use the default port (1813)." +msgstr "Deixe em branco para usar a porta padrão (1813)." + +#: usr/local/www/services_captiveportal.php:694 +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:734 +#: usr/local/www/services_captiveportal.php:746 +#: usr/local/www/services_captiveportal.php:762 +msgid "Reauthentication" +msgstr "Reautenticação" + +#: usr/local/www/services_captiveportal.php:699 +#: usr/local/www/services_captiveportal.php:741 +#: usr/local/www/services_captiveportal.php:739 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:764 +msgid "Reauthenticate connected users every minute" +msgstr "Reautentique usuários conectados a cada minuto" + +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/services_captiveportal.php:742 +#: usr/local/www/services_captiveportal.php:740 +#: usr/local/www/services_captiveportal.php:749 +#: usr/local/www/services_captiveportal.php:765 +msgid "If reauthentication is enabled, Access-Requests will be sent to the RADIUS server for each user that is logged in every minute. If an Access-Reject is received for a user, that user is disconnected from the captive portal immediately." +msgstr "Se a reautenticação estiver habilitada, Access-Requests serão enviados para o servidor RADIUS para cada usuário logado a cada minuto. Se um Access-Reject é recebido por um usuário, aquele usuário é desconectado do portal captive imediatamente." + +#: usr/local/www/services_captiveportal.php:704 +#: usr/local/www/services_captiveportal.php:746 +#: usr/local/www/services_captiveportal.php:744 +#: usr/local/www/services_captiveportal.php:732 +#: usr/local/www/services_captiveportal.php:748 +msgid "Accounting updates" +msgstr "Atualizações de accounting" + +#: usr/local/www/services_captiveportal.php:706 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:746 +#: usr/local/www/services_captiveportal.php:734 +#: usr/local/www/services_captiveportal.php:750 +msgid "no accounting updates" +msgstr "nenhuma atualização de accounting" + +#: usr/local/www/services_captiveportal.php:707 +#: usr/local/www/services_captiveportal.php:749 +#: usr/local/www/services_captiveportal.php:747 +#: usr/local/www/services_captiveportal.php:735 +#: usr/local/www/services_captiveportal.php:751 +msgid "stop/start accounting" +msgstr "parar/iniciar accounting" + +#: usr/local/www/services_captiveportal.php:708 +#: usr/local/www/services_captiveportal.php:750 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:752 +msgid "interim update" +msgstr "atualização de interim" + +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/services_captiveportal.php:757 +#: usr/local/www/services_captiveportal.php:755 +#: usr/local/www/services_captiveportal.php:753 +#: usr/local/www/services_captiveportal.php:769 +msgid "RADIUS MAC authentication" +msgstr "Autenticação de MAC do RADIUS" + +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/services_captiveportal.php:762 +#: usr/local/www/services_captiveportal.php:760 +#: usr/local/www/services_captiveportal.php:755 +#: usr/local/www/services_captiveportal.php:771 +msgid "Enable RADIUS MAC authentication" +msgstr "Habilitar autenticação de MAC do RADIUS" + +#: usr/local/www/services_captiveportal.php:721 +#: usr/local/www/services_captiveportal.php:763 +#: usr/local/www/services_captiveportal.php:761 +#: usr/local/www/services_captiveportal.php:756 +#: usr/local/www/services_captiveportal.php:772 +msgid "If this option is enabled, the captive portal will try to authenticate users by sending their MAC address as the username and the password entered below to the RADIUS server." +msgstr "Se essa opção estiver habilitada, o portal captive tentará autenticar usuários enviando seus endereços MAC como o nome de usuário e senha informados abaixo para o servidor RADIUS." + +#: usr/local/www/services_captiveportal.php:732 +#: usr/local/www/services_captiveportal.php:774 +#: usr/local/www/services_captiveportal.php:772 +#: usr/local/www/services_captiveportal.php:743 +#: usr/local/www/services_captiveportal.php:759 +msgid "RADIUS options" +msgstr "Opções RADIUS" + +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:778 +#: usr/local/www/services_captiveportal.php:776 +#: usr/local/www/services_captiveportal.php:764 +#: usr/local/www/services_captiveportal.php:780 +msgid "RADIUS NAS IP attribute" +msgstr "Atributo RADIUS NAS IP" + +#: usr/local/www/services_captiveportal.php:766 +#: usr/local/www/services_captiveportal.php:808 +#: usr/local/www/services_captiveportal.php:806 +#: usr/local/www/services_captiveportal.php:794 +#: usr/local/www/services_captiveportal.php:810 +msgid "Choose the IP to use for calling station attribute." +msgstr "Escolha o IP para usar para chamar atributo estação." + +#: usr/local/www/services_captiveportal.php:771 +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:811 +#: usr/local/www/services_captiveportal.php:799 +#: usr/local/www/services_captiveportal.php:815 +msgid "Session-Timeout" +msgstr "Session-Timeout" + +#: usr/local/www/services_captiveportal.php:772 +#: usr/local/www/services_captiveportal.php:814 +#: usr/local/www/services_captiveportal.php:812 +#: usr/local/www/services_captiveportal.php:800 +#: usr/local/www/services_captiveportal.php:816 +msgid "Use RADIUS Session-Timeout attributes" +msgstr "Use atributos de Session-Timeout do RADIUS" + +#: usr/local/www/services_captiveportal.php:773 +#: usr/local/www/services_captiveportal.php:815 +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:817 +msgid "When this is enabled, clients will be disconnected after the amount of time retrieved from the RADIUS Session-Timeout attribute." +msgstr "Quando isso estiver habilitado, clientes serão desconectados após o total de tempo obtido do atributo Session-Timeout do RADIUS." + +#: usr/local/www/services_captiveportal.php:789 +#: usr/local/www/services_captiveportal.php:831 +#: usr/local/www/services_captiveportal.php:829 +#: usr/local/www/services_captiveportal.php:817 +#: usr/local/www/services_captiveportal.php:833 +#, php-format +msgid "If RADIUS type is set to Cisco, in Access-Requests the value of Calling-Station-Id will be set to the client's IP address and the Called-Station-Id to the client's MAC address. Default behavior is Calling-Station-Id = client's MAC address and Called-Station-Id = %s's WAN IP address." +msgstr "Se o tipo RADIUS estiver configurado para Cisco, em Access-Requests o valor do Calling-Station-Id será configurado com o endereço IP do cliente e o Called-Station-Id para o endereço MAC do cliente. O comportamento padrão é Calling-Station-Id = endereço MAC de cliente e Called-Station-Id = endereço IP da WAN %s." + +#: usr/local/www/services_captiveportal.php:796 +#: usr/local/www/services_captiveportal.php:838 +#: usr/local/www/services_captiveportal.php:836 +#: usr/local/www/services_captiveportal.php:834 +#: usr/local/www/services_captiveportal.php:850 +msgid "MAC address format" +msgstr "Formato do endereço MAC" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "singledash" +msgstr "singledash" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "ietf" +msgstr "ietf" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "cisco" +msgstr "cisco" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "unformatted" +msgstr "não formatado" + +#: usr/local/www/services_captiveportal.php:810 +#: usr/local/www/services_captiveportal.php:852 +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/services_captiveportal.php:849 +#: usr/local/www/services_captiveportal.php:865 +msgid "This option changes the MAC address format used in the whole RADIUS system. Change this if you also" +msgstr "Essa opção modifica o formato do endereço MAC usado em todo o sistema RADIUS. Modifique isso se você também" + +#: usr/local/www/services_captiveportal.php:811 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:851 +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/services_captiveportal.php:866 +msgid "need to change the username format for RADIUS MAC authentication." +msgstr "precisa modificar o formato do nome de usuário para a autenticação MAC do RADIUS." + +#: usr/local/www/services_captiveportal.php:812 +#: usr/local/www/services_captiveportal.php:854 +#: usr/local/www/services_captiveportal.php:852 +#: usr/local/www/services_captiveportal.php:851 +#: usr/local/www/services_captiveportal.php:867 +msgid "default:" +msgstr "padrão:" + +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:855 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:852 +#: usr/local/www/services_captiveportal.php:868 +msgid "singledash:" +msgstr "singledash:" + +#: usr/local/www/services_captiveportal.php:814 +#: usr/local/www/services_captiveportal.php:856 +#: usr/local/www/services_captiveportal.php:854 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:869 +msgid "ietf:" +msgstr "ietf:" + +#: usr/local/www/services_captiveportal.php:815 +#: usr/local/www/services_captiveportal.php:857 +#: usr/local/www/services_captiveportal.php:855 +#: usr/local/www/services_captiveportal.php:854 +#: usr/local/www/services_captiveportal.php:870 +msgid "cisco:" +msgstr "cisco:" + +#: usr/local/www/services_captiveportal.php:816 +#: usr/local/www/services_captiveportal.php:858 +#: usr/local/www/services_captiveportal.php:856 +#: usr/local/www/services_captiveportal.php:855 +#: usr/local/www/services_captiveportal.php:871 +msgid "unformatted:" +msgstr "não formatado:" + +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/services_captiveportal.php:861 +#: usr/local/www/services_captiveportal.php:859 +#: usr/local/www/services_captiveportal.php:877 +msgid "HTTPS login" +msgstr "Login HTTPS" + +#: usr/local/www/services_captiveportal.php:822 +#: usr/local/www/services_captiveportal.php:864 +#: usr/local/www/services_captiveportal.php:862 +#: usr/local/www/services_captiveportal.php:880 +msgid "Enable HTTPS login" +msgstr "Habilitar login HTTPS" + +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:865 +msgid "If enabled, the username and password will be transmitted over an HTTPS connection to protect against eavesdroppers. A server name, certificate and matching private key must also be specified below." +msgstr "Se habilitado, o nome de usuário e senha será transmitido sobre uma conexão HTTPS para protegê-los de eavesdroppers. Um nome de servidor, certificado e chave privada correspondente também devem ser especificados abaixo." + +#: usr/local/www/services_captiveportal.php:826 +#: usr/local/www/services_captiveportal.php:868 +#: usr/local/www/services_captiveportal.php:866 +#: usr/local/www/services_captiveportal.php:884 +msgid "HTTPS server name" +msgstr "Nome do servidor HTTPS" + +#: usr/local/www/services_captiveportal.php:829 +#: usr/local/www/services_captiveportal.php:871 +#: usr/local/www/services_captiveportal.php:869 +#: usr/local/www/services_captiveportal.php:887 +#, php-format +msgid "This name will be used in the form action for the HTTPS POST and should match the Common Name (CN) in your certificate (otherwise, the client browser will most likely display a security warning). Make sure captive portal clients can resolve this name in DNS and verify on the client that the IP resolves to the correct interface IP on %s." +msgstr "Esse nome será usado na ação do formulário para o POST HTTPS e deve corresponder ao Common Name (CN) no seu certificado (do contrário, o browser do cliente irá provavelmente mostrar um aviso de segurança). Tenha certeza que os clientes do portal captive podem resolver esse nome em DNS e verificar no cliente que o IP resulta no IP de interface correto em %s." + +#: usr/local/www/services_captiveportal.php:832 +#: usr/local/www/services_captiveportal.php:874 +msgid "HTTPS certificate" +msgstr "Certificado HTTPS" + +#: usr/local/www/services_captiveportal.php:836 +#: usr/local/www/services_captiveportal.php:878 +msgid "Paste a signed certificate in X.509 PEM format here." +msgstr "Cole um certificado assinado no formato X.509 PEM aqui." + +#: usr/local/www/services_captiveportal.php:839 +#: usr/local/www/services_captiveportal.php:881 +msgid "HTTPS private key" +msgstr "Chave privada HTTPS" + +#: usr/local/www/services_captiveportal.php:843 +#: usr/local/www/services_captiveportal.php:885 +msgid "Paste an RSA private key in PEM format here." +msgstr "Cole uma chave privada RSA no formato PEM aqui." + +#: usr/local/www/services_captiveportal.php:846 +#: usr/local/www/services_captiveportal.php:888 +msgid "HTTPS intermediate certificate" +msgstr "Certificado intermediário HTTPS" + +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/system_camanager.php:406 +#: usr/local/www/system_certmanager.php:515 +#: usr/local/www/system_certmanager.php:614 +#: usr/local/www/services_captiveportal.php:892 +#: usr/local/www/system_camanager.php:413 +#: usr/local/www/system_certmanager.php:623 +#: usr/local/www/system_certmanager.php:624 +msgid "Paste a certificate in X.509 PEM format here." +msgstr "Cole um certificado em formato X.509 PEM aqui." + +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:895 +#: usr/local/www/services_captiveportal.php:891 +#: usr/local/www/services_captiveportal.php:893 +#: usr/local/www/services_captiveportal.php:909 +msgid "Portal page contents" +msgstr "Conteúdo da página do portal" + +#: usr/local/www/services_captiveportal.php:865 +#: usr/local/www/services_captiveportal.php:899 +#: usr/local/www/services_captiveportal.php:913 +#: usr/local/www/services_captiveportal.php:910 +#: usr/local/www/services_captiveportal.php:944 +#: usr/local/www/services_captiveportal.php:958 +#: usr/local/www/services_captiveportal.php:906 +#: usr/local/www/services_captiveportal.php:940 +#: usr/local/www/services_captiveportal.php:954 +#: usr/local/www/services_captiveportal.php:908 +#: usr/local/www/services_captiveportal.php:942 +#: usr/local/www/services_captiveportal.php:956 +#: usr/local/www/services_captiveportal.php:924 +#: usr/local/www/services_captiveportal.php:972 +msgid "View current page" +msgstr "Veja página atual" + +#: usr/local/www/services_captiveportal.php:871 +#: usr/local/www/services_captiveportal.php:916 +#: usr/local/www/services_captiveportal.php:912 +#: usr/local/www/services_captiveportal.php:914 +#: usr/local/www/services_captiveportal.php:930 +#, php-format +msgid "Upload an HTML/PHP file for the portal page here (leave blank to keep the current one). Make sure to include a form (POST to %1$s) with a submit button (%2$s) and a hidden field with %3$s and %4$s. Include the %5$s and %6$s and/or %7$s input fields if authentication is enabled, otherwise it will always fail." +msgstr "Carregar um arquivo HTML/PHP para a página do portal aqui (deixe em branco para manter o atual). Tenha certeza que incluiu um formulário (com POST para %1$s) com um botão de submissão (%2$s) e campo escondido com %3$s e %4$s. Inclua os campos %5$s e %6$s e/ou %7$s se a autenticação estiver habilitada, do contrário ele sempre irá falhar." + +#: usr/local/www/services_captiveportal.php:882 +#: usr/local/www/services_captiveportal.php:927 +#: usr/local/www/services_captiveportal.php:923 +#: usr/local/www/services_captiveportal.php:925 +#: usr/local/www/services_captiveportal.php:941 +msgid "Example code for the form:" +msgstr "Exemplo de código para o formulário:" + +#: usr/local/www/services_captiveportal.php:894 +#: usr/local/www/services_captiveportal.php:939 +#: usr/local/www/services_captiveportal.php:935 +#: usr/local/www/services_captiveportal.php:937 +#: usr/local/www/services_captiveportal.php:953 +msgid "error page" +msgstr "página de erro" + +#: usr/local/www/services_captiveportal.php:895 +#: usr/local/www/services_captiveportal.php:909 +#: usr/local/www/services_captiveportal.php:940 +#: usr/local/www/services_captiveportal.php:954 +#: usr/local/www/services_captiveportal.php:936 +#: usr/local/www/services_captiveportal.php:950 +#: usr/local/www/services_captiveportal.php:938 +#: usr/local/www/services_captiveportal.php:952 +#: usr/local/www/services_captiveportal.php:968 +msgid "contents" +msgstr "conteúdo" + +#: usr/local/www/services_captiveportal.php:903 +#: usr/local/www/services_captiveportal.php:948 +#: usr/local/www/services_captiveportal.php:944 +#: usr/local/www/services_captiveportal.php:946 +#: usr/local/www/services_captiveportal.php:962 +msgid "The contents of the HTML/PHP file that you upload here are displayed when an authentication error occurs. You may include" +msgstr "O conteúdo do arquivo HTML/PHP que você carregar aqui é exibido quando um erro de autenticação ocorrer. Você deve incluir" + +#: usr/local/www/services_captiveportal.php:904 +#: usr/local/www/services_captiveportal.php:949 +#: usr/local/www/services_captiveportal.php:945 +#: usr/local/www/services_captiveportal.php:947 +#: usr/local/www/services_captiveportal.php:963 +msgid "which will be replaced by the error or reply messages from the RADIUS server, if any." +msgstr "que será substituído pela mensagem de erro ou de resposta do servidor RADIUS, se houver." + +#: usr/local/www/services_captiveportal.php:907 usr/local/www/fbegin.inc:86 +#: usr/local/www/fbegin.inc:103 usr/local/www/services_captiveportal.php:952 +#: usr/local/www/fbegin.inc:112 usr/local/www/services_captiveportal.php:948 +#: usr/local/www/services_captiveportal.php:950 usr/local/www/fbegin.inc:104 +#: usr/local/www/services_captiveportal.php:966 +msgid "Logout" +msgstr "Logout" + +#: usr/local/www/services_captiveportal.php:917 +#: usr/local/www/services_captiveportal.php:962 +#: usr/local/www/services_captiveportal.php:958 +#: usr/local/www/services_captiveportal.php:960 +#: usr/local/www/services_captiveportal.php:976 +msgid "The contents of the HTML/PHP file that you upload here are displayed on authentication success when the logout popup is enabled." +msgstr "O conteúdo do arquivo HTML/PHP que você carregou aqui são exibidos no sucesso de autenticação quando a popup de logout estiver habilitada." + +#: usr/local/www/services_captiveportal.php:930 +#: usr/local/www/services_captiveportal.php:975 +#: usr/local/www/services_captiveportal.php:971 +#: usr/local/www/services_captiveportal.php:973 +#: usr/local/www/services_captiveportal.php:989 +msgid "Changing any settings on this page will disconnect all clients! Don't forget to enable the DHCP server on your captive portal interface! Make sure that the default/maximum DHCP lease time is higher than the timeout entered on this page. Also, the DNS forwarder needs to be enabled for DNS lookups by unauthenticated clients to work." +msgstr "Mudando qualquer configuração nessa página irá desconectar todos os clientes! Não esqueça de habilitar o servidor DHCP na interface de seu portal captive! Tenha certeza de que o tempo de concessão padrão/máximo é maior que o tempo de expiração informado nessa página. Além disso, o DNS forwarder precisa estar habilitado para receber DNS lookups de clientes não autenticados para funcionar." + +#: usr/local/www/services_captiveportal_filemanager.php:101 +#: usr/local/www/services_captiveportal_filemanager.php:98 +#, php-format +msgid "A file with the name '%s' already exists." +msgstr "Um arquivo com o nome '%s' já existe." + +#: usr/local/www/services_captiveportal_filemanager.php:108 +#: usr/local/www/services_captiveportal_filemanager.php:105 +msgid "The total size of all files uploaded may not exceed " +msgstr "O tamanho total de todos os arquivos carregados não pode exceder " + +#: usr/local/www/services_captiveportal_filemanager.php:163 +#: usr/local/www/system_firmware_restorefullbackup.php:141 +#: usr/local/www/services_captiveportal_filemanager.php:160 +#: usr/local/www/diag_system_pftop.php:140 +#: usr/local/www/diag_system_pftop.php:159 +msgid "Size" +msgstr "Tamanho" + +#: usr/local/www/services_captiveportal_filemanager.php:168 +#: usr/local/www/services_captiveportal_filemanager.php:207 +#: usr/local/www/services_captiveportal_filemanager.php:165 +#: usr/local/www/services_captiveportal_filemanager.php:204 +msgid "add file" +msgstr "adicionar arquivo" + +#: usr/local/www/services_captiveportal_filemanager.php:179 +#: usr/local/www/services_captiveportal_filemanager.php:176 +msgid "Do you really want to delete this file?" +msgstr "Você realmente deseja apagar esse arquivo?" + +#: usr/local/www/services_captiveportal_filemanager.php:179 +#: usr/local/www/services_captiveportal_filemanager.php:176 +msgid "delete file" +msgstr "apagar arquivo" + +#: usr/local/www/services_captiveportal_filemanager.php:186 +#: usr/local/www/services_captiveportal_filemanager.php:183 +msgid "TOTAL" +msgstr "TOTAL" + +#: usr/local/www/services_captiveportal_filemanager.php:197 +#: usr/local/www/services_captiveportal_filemanager.php:194 +msgid "cancel" +msgstr "cancelar" + +#: usr/local/www/services_captiveportal_filemanager.php:217 +#: usr/local/www/services_captiveportal_filemanager.php:214 +msgid "Any files that you upload here with the filename prefix of captiveportal- will be made available in the root directory of the captive portal HTTP(S) server. You may reference them directly from your portal page HTML code using relative paths. Example: you've uploaded an image with the name 'captiveportal-test.jpg' using the file manager. Then you can include it in your portal page like this:" +msgstr "Qualquer arquivo que você carregar aqui com o prefixo de seu nome como captiveportal- será colocado a disposição no diretório root do servidor HTTP(S) do portal captive. Você deve referencia-los diretamente de seu código HTML da página do seu portal usando caminhos relativos. Exemplo: você carregou uma imagem com o nome 'captiveportal-test.jpg' usando o gerenciador de arquivo. Então você pode inclui-lo na sua página de portal assim:" + +#: usr/local/www/services_captiveportal_filemanager.php:224 +#: usr/local/www/services_captiveportal_filemanager.php:221 +msgid "In addition, you can also upload .php files for execution. You can pass the filename to your custom page from the initial page by using text similar to:" +msgstr "Adicionalmente você também pode carregar os arquivos .php para execução. Você pode passar o nome do arquivo para sua página personalizada pela página inicial usando um texto similar a:" + +#: usr/local/www/services_captiveportal_filemanager.php:227 +#: usr/local/www/services_captiveportal_filemanager.php:224 +msgid "Acceptable usage policy" +msgstr "Política de uso aceitável" + +#: usr/local/www/services_captiveportal_filemanager.php:229 +#: usr/local/www/services_captiveportal_filemanager.php:226 +#, php-format +msgid "The total size limit for all files is %s." +msgstr "O limite total de tamanho para todos os arquivos é %s." + +#: usr/local/www/diag_limiter_info.php:46 +msgid "Diagnostics: Limiter Info" +msgstr "Diagnósticos: Limiter Info" + +#: usr/local/www/diag_limiter_info.php:108 +#: usr/local/www/diag_limiter_info.php:109 +msgid "Gathering Limiter information, please wait..." +msgstr "Definindo informações da fatia, por favor aguarde..." + +#: usr/local/www/firewall_nat.php:197 usr/local/www/firewall_nat.php:202 +#: usr/local/www/firewall_nat.php:205 +msgid "Src. addr" +msgstr "End. fonte" + +#: usr/local/www/firewall_nat.php:198 usr/local/www/firewall_nat.php:203 +#: usr/local/www/firewall_nat.php:206 +msgid "Src. ports" +msgstr "Portas fonte" + +#: usr/local/www/firewall_nat.php:199 usr/local/www/firewall_nat.php:204 +#: usr/local/www/firewall_nat.php:207 +msgid "Dest. addr" +msgstr "End. destino" + +#: usr/local/www/firewall_nat.php:200 usr/local/www/firewall_nat.php:205 +#: usr/local/www/firewall_nat.php:208 +msgid "Dest. ports" +msgstr "Portas destino" + +#: usr/local/www/firewall_nat.php:201 usr/local/www/firewall_nat.php:206 +#: usr/local/www/firewall_nat.php:209 +msgid "NAT IP" +msgstr "IP NAT" + +#: usr/local/www/firewall_nat.php:202 usr/local/www/firewall_nat.php:207 +#: usr/local/www/firewall_nat.php:210 +msgid "NAT Ports" +msgstr "Portas NAT" + +#: usr/local/www/firewall_nat.php:252 usr/local/www/firewall_nat.php:265 +#: usr/local/www/firewall_nat.php:268 +msgid "All traffic matching this NAT entry is passed" +msgstr "Todo o tráfego correspondente a essa entrada NAT é liberado" + +#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267 +#: usr/local/www/firewall_nat.php:270 +msgid "Firewall rule ID" +msgstr "ID da regra de firewall" + +#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267 +#: usr/local/www/firewall_nat.php:270 +msgid "is managed with this rule" +msgstr "é gerenciado por essa regra" + +#: usr/local/www/firewall_nat.php:313 usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326 +#: usr/local/www/firewall_nat_out.php:448 +#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:329 +#: usr/local/www/firewall_nat_out.php:454 +msgid "Do you really want to delete this rule?" +msgstr "Você realmente quer apagar esta regra?" + +#: usr/local/www/firewall_nat.php:349 usr/local/www/firewall_nat.php:362 +#: usr/local/www/firewall_nat.php:365 +msgid "linked rule" +msgstr "regra associada" + +#: usr/local/www/diag_ipsec.php:78 usr/local/www/diag_ipsec_sad.php:73 +#: usr/local/www/diag_ipsec_spd.php:72 usr/local/www/diag_ipsec.php:88 +#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec_sad.php:74 +#: usr/local/www/diag_ipsec_spd.php:73 usr/local/www/diag_ipsec.php:91 +msgid "Overview" +msgstr "Visão geral" + +#: usr/local/www/diag_ipsec.php:79 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/diag_ipsec_sad.php:74 usr/local/www/diag_ipsec_spd.php:73 +#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec.php:90 +#: usr/local/www/diag_ipsec_sad.php:75 usr/local/www/diag_ipsec_spd.php:74 +#: usr/local/www/diag_ipsec.php:92 +msgid "SAD" +msgstr "SAD" + +#: usr/local/www/diag_ipsec.php:80 usr/local/www/diag_ipsec_sad.php:75 +#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_ipsec_spd.php:74 +#: usr/local/www/diag_ipsec.php:90 usr/local/www/diag_ipsec.php:91 +#: usr/local/www/diag_ipsec_sad.php:76 usr/local/www/diag_ipsec_spd.php:75 +#: usr/local/www/diag_ipsec.php:93 +msgid "SPD" +msgstr "SPD" + +#: usr/local/www/diag_ipsec.php:81 usr/local/www/diag_ipsec_sad.php:76 +#: usr/local/www/diag_ipsec_spd.php:75 usr/local/www/diag_ipsec.php:91 +#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec_sad.php:77 +#: usr/local/www/diag_ipsec_spd.php:76 usr/local/www/diag_ipsec.php:94 +msgid "Logs" +msgstr "Logs" + +#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec.php:103 +#: usr/local/www/diag_ipsec.php:104 usr/local/www/diag_ipsec.php:106 +msgid "Remote IP" +msgstr "IP remoto" + +#: usr/local/www/diag_ipsec.php:93 usr/local/www/vpn_ipsec_phase2.php:419 +#: usr/local/www/diag_ipsec.php:104 usr/local/www/vpn_ipsec_phase2.php:445 +#: usr/local/www/diag_ipsec.php:105 usr/local/www/vpn_ipsec_phase2.php:511 +#: usr/local/www/diag_ipsec.php:107 usr/local/www/vpn_ipsec_phase2.php:533 +msgid "Local Network" +msgstr "Rede Local" + +#: usr/local/www/diag_ipsec.php:94 usr/local/www/vpn_ipsec_phase2.php:461 +#: usr/local/www/vpn_openvpn_client.php:762 +#: usr/local/www/vpn_openvpn_server.php:1055 usr/local/www/diag_ipsec.php:105 +#: usr/local/www/vpn_openvpn_server.php:1197 +#: usr/local/www/vpn_ipsec_phase2.php:487 +#: usr/local/www/vpn_openvpn_client.php:767 usr/local/www/diag_ipsec.php:106 +#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/diag_ipsec.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:610 +msgid "Remote Network" +msgstr "Rede Remota" + +#: usr/local/www/diag_ipsec.php:165 usr/local/www/diag_ipsec_sad.php:135 +#: usr/local/www/diag_ipsec_spd.php:144 usr/local/www/diag_ipsec_sad.php:136 +#: usr/local/www/diag_ipsec_spd.php:145 +msgid "You can configure your IPsec" +msgstr "Você pode configurar seu IPsec" + +#: usr/local/www/diag_ipsec_sad.php:90 usr/local/www/diag_ipsec_sad.php:91 +msgid "SPI" +msgstr "SPI" + +#: usr/local/www/diag_ipsec_sad.php:91 usr/local/www/diag_ipsec_sad.php:92 +msgid "Enc. alg." +msgstr "Enc. alg." + +#: usr/local/www/diag_ipsec_sad.php:92 usr/local/www/diag_ipsec_sad.php:93 +msgid "Auth. alg." +msgstr "Log de Autenticação." + +#: usr/local/www/diag_ipsec_sad.php:93 usr/local/www/diag_ipsec_sad.php:94 +msgid "Data" +msgstr "Data" + +#: usr/local/www/diag_ipsec_sad.php:112 usr/local/www/diag_ipsec_sad.php:113 +msgid "Do you really want to delete this security association?" +msgstr "Você realmente deseja apagar esta associação de segurança?" + +#: usr/local/www/diag_ipsec_sad.php:121 usr/local/www/diag_ipsec_sad.php:122 +msgid "No IPsec security associations." +msgstr "Nenhuma associação de segurança IPsec." + +#: usr/local/www/services_captiveportal_ip.php:123 +#: usr/local/www/services_captiveportal_ip.php:163 +#: usr/local/www/services_captiveportal_hostname.php:128 +#: usr/local/www/services_captiveportal_hostname.php:164 +#: usr/local/www/services_captiveportal_ip.php:121 +#: usr/local/www/services_captiveportal_ip.php:161 +#: usr/local/www/services_captiveportal_hostname.php:126 +#: usr/local/www/services_captiveportal_hostname.php:162 +msgid "add address" +msgstr "adicionar endereço" + +#: usr/local/www/services_captiveportal_ip.php:153 +#: usr/local/www/services_captiveportal_hostname.php:154 +#: usr/local/www/services_captiveportal_ip.php:151 +#: usr/local/www/services_captiveportal_hostname.php:152 +msgid "edit address" +msgstr "editar endereço" + +#: usr/local/www/services_captiveportal_ip.php:154 +#: usr/local/www/services_captiveportal_hostname.php:155 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +msgid "Do you really want to delete this address?" +msgstr "Você realmente deseja apagar esse endereço?" + +#: usr/local/www/services_captiveportal_ip.php:154 +#: usr/local/www/services_captiveportal_hostname.php:155 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +msgid "delete address" +msgstr "apagar endereço" + +#: usr/local/www/services_captiveportal_ip.php:172 +#: usr/local/www/services_captiveportal_ip.php:170 +msgid "Adding allowed IP addresses will allow IP access to/from these addresses through the captive portal without being taken to the portal page. This can be used for a web server serving images for the portal page or a DNS server on another network, for example. By specifying from addresses, it may be used to always allow pass-through access from a client behind the captive portal." +msgstr "Adicionando endereços IP permitidos irá permitir acesso dos IPs de destino/origem esses endereços através do portal captive sem que sejam direcionados à página do portal. Isso pode ser usado para um servidor web que serve imagens para a página do portal ou um servidor DNS em outra rede, por exemplo. Especificando endereços de origem, isso pode ser usado para sempre permitir acesso pass-through de um cliente por trás do portal captive." + +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "All connections" +msgstr "Todas as conexões" + +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +msgid "the IP address are allowed" +msgstr "o endereço IP permitido" + +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "from" +msgstr "de" + +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +msgid "Edit allowed IP address" +msgstr "Editar endereços IP permitidos" + +#: usr/local/www/services_captiveportal_ip_edit.php:102 +#: usr/local/www/services_captiveportal_ip_edit.php:100 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +msgid "Allowed IP address" +msgstr "Endereços IP permitidos" + +#: usr/local/www/services_captiveportal_ip_edit.php:110 +#: usr/local/www/services_captiveportal_mac_edit.php:108 +#: usr/local/www/services_captiveportal_hostname_edit.php:110 +#: usr/local/www/services_captiveportal_hostname_edit.php:108 +#: usr/local/www/services_captiveportal_mac_edit.php:106 +#: usr/local/www/services_captiveportal_ip_edit.php:108 +msgid "Upload speed needs to be an integer" +msgstr "Velocidade de carregamento necessário deve ser um inteiro" + +#: usr/local/www/services_captiveportal_ip_edit.php:113 +#: usr/local/www/services_captiveportal_mac_edit.php:110 +#: usr/local/www/services_captiveportal_hostname_edit.php:112 +#: usr/local/www/services_captiveportal_hostname_edit.php:110 +#: usr/local/www/services_captiveportal_mac_edit.php:108 +#: usr/local/www/services_captiveportal_ip_edit.php:111 +msgid "Download speed needs to be an integer" +msgstr "Velocidade de download necessária deve ser um inteiro" + +#: usr/local/www/services_captiveportal_ip_edit.php:120 +#: usr/local/www/services_captiveportal_mac_edit.php:117 +#: usr/local/www/services_captiveportal_hostname_edit.php:119 +#: usr/local/www/services_captiveportal_hostname_edit.php:117 +#: usr/local/www/services_captiveportal_mac_edit.php:115 +#: usr/local/www/services_captiveportal_ip_edit.php:118 +msgid "already allowed" +msgstr "já permitido" + +#: usr/local/www/services_captiveportal_ip_edit.php:175 +#: usr/local/www/services_captiveportal_ip_edit.php:173 +#: usr/local/www/services_captiveportal_ip_edit.php:184 +msgid "Edit allowed ip rule" +msgstr "Edita regras de IP permitidas" + +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/system_gateways_edit.php:442 +#: usr/local/www/system_gateways_edit.php:454 +#: usr/local/www/system_gateways_edit.php:463 +#: usr/local/www/system_gateways_edit.php:475 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +#: usr/local/www/system_gateways_edit.php:569 +#: usr/local/www/system_gateways_edit.php:581 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +#: usr/local/www/system_gateways_edit.php:573 +#: usr/local/www/system_gateways_edit.php:585 +#: usr/local/www/system_gateways_edit.php:575 +#: usr/local/www/system_gateways_edit.php:587 +#: usr/local/www/system_gateways_edit.php:605 +#: usr/local/www/system_gateways_edit.php:617 +msgid "From" +msgstr "De" + +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/system_gateways_edit.php:445 +#: usr/local/www/system_gateways_edit.php:457 +#: usr/local/www/system_gateways_edit.php:466 +#: usr/local/www/system_gateways_edit.php:478 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +#: usr/local/www/system_gateways_edit.php:572 +#: usr/local/www/system_gateways_edit.php:584 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +#: usr/local/www/system_gateways_edit.php:576 +#: usr/local/www/system_gateways_edit.php:588 +#: usr/local/www/system_gateways_edit.php:578 +#: usr/local/www/system_gateways_edit.php:590 +#: usr/local/www/system_gateways_edit.php:608 +#: usr/local/www/system_gateways_edit.php:620 +msgid "To" +msgstr "Para" + +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +msgid "Use" +msgstr "Use" + +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +msgid "to always allow an IP address through the captive portal (without authentication)" +msgstr "para sempre permitir um endereço de IP através do portal captive (sem autenticação)" + +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +msgid "to allow access from all clients (even non-authenticated ones) behind the portal to this IP address" +msgstr "para permitir acesso de todos os clientes (mesmo aqueles não autenticados) atrás do portal para esse endereço de IP" + +#: usr/local/www/services_captiveportal_ip_edit.php:204 +#: usr/local/www/services_captiveportal_ip_edit.php:202 +#: usr/local/www/services_captiveportal_ip_edit.php:196 +msgid "IP address and subnet mask. Use /32 for a single IP" +msgstr "Endereço IP e máscara de subrede. Use /32 para um IP sozinho" + +#: usr/local/www/services_captiveportal_ip_edit.php:215 +#: usr/local/www/services_captiveportal_mac_edit.php:189 +#: usr/local/www/services_captiveportal_hostname_edit.php:189 +#: usr/local/www/services_captiveportal_hostname_edit.php:187 +#: usr/local/www/services_captiveportal_mac_edit.php:187 +#: usr/local/www/services_captiveportal_ip_edit.php:213 +#: usr/local/www/services_captiveportal_ip_edit.php:207 +#: usr/local/www/services_captiveportal_mac_edit.php:200 +msgid "Bandwidth up" +msgstr "Tamanho de banda de carregamento" + +#: usr/local/www/services_captiveportal_ip_edit.php:218 +#: usr/local/www/services_captiveportal_ip_edit.php:216 +#: usr/local/www/services_captiveportal_ip_edit.php:210 +msgid "Enter a upload limit to be enforced on this IP address in Kbit/s" +msgstr "Informe um limite de carregamento para ser utilizado nesse endereço IP em Kbit/s" + +#: usr/local/www/services_captiveportal_ip_edit.php:222 +#: usr/local/www/services_captiveportal_mac_edit.php:195 +#: usr/local/www/services_captiveportal_hostname_edit.php:195 +#: usr/local/www/services_captiveportal_hostname_edit.php:193 +#: usr/local/www/services_captiveportal_mac_edit.php:193 +#: usr/local/www/services_captiveportal_ip_edit.php:220 +#: usr/local/www/services_captiveportal_ip_edit.php:214 +#: usr/local/www/services_captiveportal_mac_edit.php:206 +msgid "Bandwidth down" +msgstr "Tamanho de banda de download" + +#: usr/local/www/services_captiveportal_ip_edit.php:225 +#: usr/local/www/services_captiveportal_ip_edit.php:223 +#: usr/local/www/services_captiveportal_ip_edit.php:217 +msgid "Enter a download limit to be enforced on this IP address in Kbit/s" +msgstr "Informe o limite de download para ser utilizado nesse endereço IP em Kbit/s" + +#: usr/local/www/services_captiveportal_mac.php:80 +#: usr/local/www/services_captiveportal_mac.php:78 +msgid "No entry exists yet!" +msgstr "Nenhuma entrada existente ainda!" + +#: usr/local/www/services_captiveportal_mac.php:84 +#: usr/local/www/services_captiveportal_mac.php:82 +msgid "Please set the zone on which the operation should be allowed" +msgstr "Por favor, defina a zona na qual a operação deve ser permitida" + +#: usr/local/www/services_captiveportal_mac.php:96 +#: usr/local/www/services_captiveportal_mac.php:94 +msgid "No entry exists for this username:" +msgstr "Nenhuma entrada existente para esse nome de usuário:" + +#: usr/local/www/services_captiveportal_mac.php:115 +#: usr/local/www/services_captiveportal_mac.php:113 +#: usr/local/www/services_captiveportal_mac.php:118 +msgid "The entry was sucessfully deleted" +msgstr "A entrada foi apagada com sucesso" + +#: usr/local/www/services_captiveportal_mac.php:117 +#: usr/local/www/services_captiveportal_mac.php:115 +#: usr/local/www/services_captiveportal_mac.php:120 +msgid "No entry exists for this mac address:" +msgstr "Nenhuma entrada existente para esse endereço mac:" + +#: usr/local/www/services_captiveportal_mac.php:148 +#: usr/local/www/services_captiveportal_mac.php:146 +#: usr/local/www/services_captiveportal_mac.php:156 +msgid "The captive portal MAC address configuration has been changed.
    You must apply the changes in order for them to take effect." +msgstr "A configuração de endereço MAC do portal captive foi modificada.
    Você deve aplicar as modificações para que elas tenham efeito." + +#: usr/local/www/services_captiveportal_mac.php:180 +#: usr/local/www/services_captiveportal_mac.php:178 +#: usr/local/www/services_captiveportal_mac.php:188 +msgid "edit host" +msgstr "editar host" + +#: usr/local/www/services_captiveportal_mac.php:181 +#: usr/local/www/services_dnsmasq.php:276 +#: usr/local/www/services_unbound.php:312 +#: usr/local/www/services_dnsmasq.php:277 +#: usr/local/www/services_captiveportal_mac.php:179 +#: usr/local/www/services_dnsmasq.php:302 +#: usr/local/www/services_captiveportal_mac.php:189 +#: usr/local/www/services_dnsmasq.php:315 +#: usr/local/www/services_dnsmasq.php:379 +msgid "Do you really want to delete this host?" +msgstr "Você realmente deseja apagar esse host?" + +#: usr/local/www/services_captiveportal_mac.php:181 +#: usr/local/www/services_captiveportal_mac.php:179 +#: usr/local/www/services_captiveportal_mac.php:189 +msgid "delete host" +msgstr "remover host" + +#: usr/local/www/services_captiveportal_mac.php:186 +#: usr/local/www/services_captiveportal_mac.php:184 +#: usr/local/www/services_captiveportal_mac.php:194 +msgid "add host" +msgstr "adicionar host" + +#: usr/local/www/services_captiveportal_mac.php:192 +#: usr/local/www/services_captiveportal_mac.php:190 +#: usr/local/www/services_captiveportal_mac.php:200 +msgid "Adding MAC addresses as pass-through MACs allows them access through the captive portal automatically without being taken to the portal page." +msgstr "Adicionar endereços MAC como MACs pass-throughs permite que eles tenham acesso através do portal captive automaticamente sem que sejam direcionados à página do portal." + +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +msgid "Edit pass-through MAC address" +msgstr "Editar endereço MAC pass-through" + +#: usr/local/www/services_captiveportal_mac_edit.php:105 +#: usr/local/www/services_captiveportal_mac_edit.php:103 +msgid "A valid MAC address must be specified" +msgstr "Um endereço MAC válido deve ser especificado" + +#: usr/local/www/services_captiveportal_mac_edit.php:172 +#: usr/local/www/services_captiveportal_mac_edit.php:170 +#: usr/local/www/services_captiveportal_mac_edit.php:177 +msgid "Edit Pass-through MAC address" +msgstr "Editar liberação de tráfego (Pass-through) do endereço MAC" + +#: usr/local/www/services_captiveportal_mac_edit.php:179 +#: usr/local/www/services_captiveportal_mac_edit.php:177 +#: usr/local/www/services_captiveportal_mac_edit.php:190 +msgid "MAC address (6 hex octets separated by colons)" +msgstr "Endereço MAC (6 octetos hexadecimais separados por vírgulas)" + +#: usr/local/www/services_captiveportal_mac_edit.php:192 +#: usr/local/www/services_captiveportal_mac_edit.php:190 +#: usr/local/www/services_captiveportal_mac_edit.php:203 +msgid "Enter a upload limit to be enforced on this MAC address in Kbit/s" +msgstr "Informe um limite de carregamento para ser utilizado nesse endereço MAC em Kbit/s" + +#: usr/local/www/services_captiveportal_mac_edit.php:198 +#: usr/local/www/services_captiveportal_mac_edit.php:196 +#: usr/local/www/services_captiveportal_mac_edit.php:209 +msgid "Enter a download limit to be enforced on this MAC address in Kbit/s" +msgstr "Informe um limite de download para ser utilizado nesse endereço MAC em Kbit/s" + +#: usr/local/www/diag_ipsec_spd.php:90 usr/local/www/diag_ipsec_spd.php:91 +msgid "Tunnel endpoints" +msgstr "Extremidades do túnel" + +#: usr/local/www/diag_ipsec_spd.php:108 usr/local/www/diag_ipsec_spd.php:109 +msgid "Do you really want to delete this security policy?" +msgstr "Você realmente deseja excluir essa politica de segurança?" + +#: usr/local/www/diag_ipsec_spd.php:119 usr/local/www/diag_ipsec_spd.php:120 +msgid "incoming (as seen by firewall)" +msgstr "entrada (como visto pelo firewall)" + +#: usr/local/www/diag_ipsec_spd.php:126 usr/local/www/diag_ipsec_spd.php:127 +msgid "outgoing (as seen by firewall)" +msgstr "saída (como visto pelo firewall)" + +#: usr/local/www/diag_ipsec_spd.php:131 usr/local/www/diag_ipsec_spd.php:132 +msgid "No IPsec security policies." +msgstr "Nenhuma politica de segurança IPsec." + +#: usr/local/www/diag_ping.php:59 usr/local/www/diag_ping.php:61 +#, php-format +msgid "Count must be between 1 and %s" +msgstr "Contagem deve estar entre 1 e %s" + +#: usr/local/www/diag_ping.php:126 usr/local/www/diag_ping.php:148 +msgid "Ping output" +msgstr "Ping output" + +#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcp.php:112 +msgid "The DHCP Server can only be enabled on interfaces configured with static IP addresses" +msgstr "O servidor DHCP pode somente ser habilitado em interfaces configuradas com endereços IP estáticos" + +#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcpv6.php:74 +#: usr/local/www/services_router_advertisements.php:75 +#: usr/local/www/services_dhcpv6.php:75 usr/local/www/services_dhcp.php:112 +msgid "Only interfaces configured with a static IP will be shown" +msgstr "Somente interfaces configuradas com um IP estático serão exibidas" + +#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177 +#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189 +#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +#: usr/local/www/services_dhcp.php:236 +msgid "Range begin" +msgstr "Início do intervalo" + +#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177 +#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189 +#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +#: usr/local/www/services_dhcp.php:236 +msgid "Range end" +msgstr "Fim do intervalo" + +#: usr/local/www/services_dhcp.php:212 usr/local/www/services_dhcp.php:214 +#: usr/local/www/services_dhcpv6.php:182 usr/local/www/services_dhcpv6.php:186 +#: usr/local/www/services_dhcpv6.php:188 usr/local/www/services_dhcp.php:213 +#: usr/local/www/services_dhcp.php:215 usr/local/www/services_dhcpv6.php:194 +#: usr/local/www/services_dhcpv6.php:198 usr/local/www/services_dhcpv6.php:200 +#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcp.php:261 +#: usr/local/www/services_dhcpv6.php:179 usr/local/www/services_dhcpv6.php:183 +#: usr/local/www/services_dhcpv6.php:185 usr/local/www/services_dhcp.php:240 +#: usr/local/www/services_dhcp.php:242 usr/local/www/services_dhcpv6.php:173 +#: usr/local/www/services_dhcpv6.php:177 usr/local/www/services_dhcp.php:241 +#: usr/local/www/services_dhcp.php:243 +msgid "A valid range must be specified." +msgstr "Um intervalo válido deve ser especificado." + +#: usr/local/www/services_dhcp.php:216 usr/local/www/services_dhcp.php:217 +#: usr/local/www/services_dhcp.php:263 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/services_dhcp.php:244 usr/local/www/services_dhcp.php:245 +msgid "A valid IP address must be specified for the gateway." +msgstr "Um endereço IP válido deve ser especificado para o gateway." + +#: usr/local/www/services_dhcp.php:218 usr/local/www/services_dhcp.php:219 +#: usr/local/www/services_dhcp.php:265 +#: usr/local/www/services_dhcp_edit.php:209 +#: usr/local/www/services_dhcp.php:246 usr/local/www/services_dhcp.php:247 +msgid "A valid IP address must be specified for the primary/secondary WINS servers." +msgstr "Um endereço IP válido deve ser especificado para os servidores WINS primário/secundário." + +#: usr/local/www/services_dhcp.php:223 usr/local/www/services_dhcp.php:224 +#: usr/local/www/services_dhcp.php:270 +#: usr/local/www/services_dhcp_edit.php:215 +#: usr/local/www/services_dhcp.php:251 usr/local/www/services_dhcp.php:252 +#, php-format +msgid "The gateway address %s does not lie within the chosen interface's subnet." +msgstr "O endereço gateway %s não está dentro da subrede da interface escolhida." + +#: usr/local/www/services_dhcp.php:226 usr/local/www/services_dhcp.php:227 +#: usr/local/www/services_dhcp.php:273 +#: usr/local/www/services_dhcp_edit.php:218 +#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcp.php:255 +msgid "A valid IP address must be specified for the primary/secondary DNS servers." +msgstr "Um endereço IP válido deve ser especificado para os servidores DNS primário/secundário." + +#: usr/local/www/services_dhcp.php:229 usr/local/www/services_dhcpv6.php:195 +#: usr/local/www/services_dhcp.php:230 usr/local/www/services_dhcpv6.php:207 +#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcpv6.php:192 +#: usr/local/www/services_dhcp_edit.php:221 +#: usr/local/www/services_dhcp.php:257 usr/local/www/services_dhcpv6.php:186 +#: usr/local/www/services_dhcp.php:258 +msgid "The default lease time must be at least 60 seconds." +msgstr "O tempo de concessão padrão deve ser de no mínimo 60 segundos." + +#: usr/local/www/services_dhcp.php:231 usr/local/www/services_dhcpv6.php:197 +#: usr/local/www/services_dhcp.php:232 usr/local/www/services_dhcpv6.php:209 +#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcpv6.php:194 +#: usr/local/www/services_dhcp_edit.php:223 +#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcpv6.php:188 +#: usr/local/www/services_dhcp.php:279 usr/local/www/services_dhcp.php:280 +msgid "The maximum lease time must be at least 60 seconds and higher than the default lease time." +msgstr "O tempo de concessão máximo deve ser no mínimo de 60 segundos e maior que o tempo de concessão padrão." + +#: usr/local/www/services_dhcp.php:233 usr/local/www/services_dhcpv6.php:199 +#: usr/local/www/services_dhcp.php:234 usr/local/www/services_dhcpv6.php:211 +#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcpv6.php:196 +#: usr/local/www/services_dhcp_edit.php:225 +#: usr/local/www/services_dhcp.php:261 usr/local/www/services_dhcpv6.php:190 +#: usr/local/www/services_dhcp.php:281 usr/local/www/services_dhcp.php:282 +msgid "A valid domain name must be specified for the dynamic DNS registration." +msgstr "Um nome de domínio válido deve ser especificado para o registro de DNS dinâmico." + +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcp.php:246 +#: usr/local/www/services_dhcp.php:298 +#: usr/local/www/services_dhcp_edit.php:237 +#: usr/local/www/services_dhcp.php:279 usr/local/www/services_dhcp.php:299 +#: usr/local/www/services_dhcp.php:300 +msgid "A valid IP address must be specified for the primary/secondary NTP servers." +msgstr "Um endereço IP válido deve ser especificado pelos servidores NTP primário/secundário." + +#: usr/local/www/services_dhcp.php:237 usr/local/www/services_dhcpv6.php:203 +#: usr/local/www/services_dhcp.php:248 usr/local/www/services_dhcpv6.php:225 +#: usr/local/www/services_dhcp.php:300 usr/local/www/services_dhcpv6.php:210 +#: usr/local/www/services_dhcp.php:281 usr/local/www/services_dhcpv6.php:204 +#: usr/local/www/services_dhcp.php:301 usr/local/www/services_dhcp.php:302 +msgid "A valid domain name must be specified for the DNS domain." +msgstr "Um nome de domínio válido deve ser especificado para o domínio DNS." + +#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcp.php:250 +#: usr/local/www/services_dhcp.php:302 +#: usr/local/www/services_dhcp_edit.php:239 +#: usr/local/www/services_dhcp.php:283 usr/local/www/services_dhcp.php:303 +#: usr/local/www/services_dhcp.php:304 +msgid "A valid IP address or hostname must be specified for the TFTP server." +msgstr "Um endereço IP válido ou nome de host deve ser especificado para o servidor TFTP." + +#: usr/local/www/services_dhcp.php:241 usr/local/www/services_dhcp.php:252 +#: usr/local/www/services_dhcp.php:304 +#: usr/local/www/services_dhcp_edit.php:241 +#: usr/local/www/services_dhcp.php:285 usr/local/www/services_dhcp.php:305 +#: usr/local/www/services_dhcp.php:306 +msgid "A valid IP address must be specified for the network boot server." +msgstr "Um endereço IP válido deve ser especificado para o servidor de boot da rede." + +#: usr/local/www/services_dhcp.php:244 usr/local/www/services_dhcp.php:255 +#: usr/local/www/services_dhcp.php:307 usr/local/www/services_dhcp.php:288 +#: usr/local/www/services_dhcp.php:308 usr/local/www/services_dhcp.php:309 +msgid "You cannot use the network address in the starting subnet range." +msgstr "Você não pode usar o endereço da rede no início do intervalo da subrede." + +#: usr/local/www/services_dhcp.php:246 usr/local/www/services_dhcp.php:257 +#: usr/local/www/services_dhcp.php:309 usr/local/www/services_dhcp.php:290 +#: usr/local/www/services_dhcp.php:310 usr/local/www/services_dhcp.php:311 +msgid "You cannot use the broadcast address in the ending subnet range." +msgstr "Você não pode usar o endereço de broadcast no final do intervalo de subrede." + +#: usr/local/www/services_dhcp.php:253 usr/local/www/services_dhcp.php:264 +#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcp.php:297 +#: usr/local/www/services_dhcp.php:317 usr/local/www/services_dhcp.php:318 +#, php-format +msgid "The subnet range cannot overlap with virtual IP address %s." +msgstr "O intervalo de subrede não pode sobrepor o endereço IP virtual %s." + +#: usr/local/www/services_dhcp.php:268 usr/local/www/services_dhcp.php:279 +#: usr/local/www/services_dhcp.php:331 usr/local/www/services_dhcp.php:312 +#: usr/local/www/services_dhcp.php:332 usr/local/www/services_dhcp.php:333 +msgid "Text type cannot include quotation marks." +msgstr "Tipo texto não pode ter aspas." + +#: usr/local/www/services_dhcp.php:270 usr/local/www/services_dhcp.php:281 +#: usr/local/www/services_dhcp.php:333 usr/local/www/services_dhcp.php:314 +#: usr/local/www/services_dhcp.php:334 usr/local/www/services_dhcp.php:335 +msgid "String type must be enclosed in quotes like \"this\" or must be a series of octets specified in hexadecimal, separated by colons, like 01:23:45:67:89:ab:cd:ef" +msgstr "Tipo String deve estar entre aspas \"assim\" ou deve ter uma série de octetos especificados em hexadecimal, separados por dois pontos, como 01:23:45:67:89:ab:cd:ef" + +#: usr/local/www/services_dhcp.php:272 usr/local/www/services_dhcp.php:283 +#: usr/local/www/services_dhcp.php:335 usr/local/www/services_dhcp.php:316 +#: usr/local/www/services_dhcp.php:336 usr/local/www/services_dhcp.php:337 +msgid "Boolean type must be true, false, on, or off." +msgstr "Tipo booleano deve ser true, false, on ou off." + +#: usr/local/www/services_dhcp.php:274 usr/local/www/services_dhcp.php:285 +#: usr/local/www/services_dhcp.php:337 usr/local/www/services_dhcp.php:318 +#: usr/local/www/services_dhcp.php:338 usr/local/www/services_dhcp.php:339 +msgid "Unsigned 8-bit integer type must be a number in the range 0 to 255." +msgstr "Inteiro de 8-bits sem sinal deve ser um número no intervalo de 0 a 255." + +#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcp.php:287 +#: usr/local/www/services_dhcp.php:339 usr/local/www/services_dhcp.php:320 +#: usr/local/www/services_dhcp.php:340 usr/local/www/services_dhcp.php:341 +msgid "Unsigned 16-bit integer type must be a number in the range 0 to 65535." +msgstr "Inteiro de 16-bits sem sinal deve ser um número no intervalo de 0 a 65535." + +#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcp.php:289 +#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcp.php:322 +#: usr/local/www/services_dhcp.php:342 usr/local/www/services_dhcp.php:343 +msgid "Unsigned 32-bit integer type must be a number in the range 0 to 4294967295." +msgstr "Inteiro de 32-bits sem sinal deve ser um número no intervalo de 0 a 4294967295." + +#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcp.php:291 +#: usr/local/www/services_dhcp.php:343 usr/local/www/services_dhcp.php:324 +#: usr/local/www/services_dhcp.php:344 usr/local/www/services_dhcp.php:345 +msgid "Signed 8-bit integer type must be a number in the range -128 to 127." +msgstr "Inteiro de 8-bits com sinal deve ser um número no intervalo de -128 a 127." + +#: usr/local/www/services_dhcp.php:282 usr/local/www/services_dhcp.php:293 +#: usr/local/www/services_dhcp.php:345 usr/local/www/services_dhcp.php:326 +#: usr/local/www/services_dhcp.php:346 usr/local/www/services_dhcp.php:347 +msgid "Signed 16-bit integer type must be a number in the range -32768 to 32767." +msgstr "Inteiro de 16-bits com sinal deve ser um número no intervalo de -32768 a 32767." + +#: usr/local/www/services_dhcp.php:284 usr/local/www/services_dhcp.php:295 +#: usr/local/www/services_dhcp.php:347 usr/local/www/services_dhcp.php:328 +#: usr/local/www/services_dhcp.php:348 usr/local/www/services_dhcp.php:349 +msgid "Signed 32-bit integer type must be a number in the range -2147483648 to 2147483647." +msgstr "Inteiro de 32-bits com sinal deve ser um número no intervalo de -2147483648 a 2147483647." + +#: usr/local/www/services_dhcp.php:286 usr/local/www/services_dhcp.php:297 +#: usr/local/www/services_dhcp.php:349 usr/local/www/services_dhcp.php:330 +#: usr/local/www/services_dhcp.php:350 usr/local/www/services_dhcp.php:351 +msgid "IP address or host type must be an IP address or host name." +msgstr "Endereço IP ou tipo de host deve ser um endereço IP ou nome de host." + +#: usr/local/www/services_dhcp.php:297 usr/local/www/services_dhcpv6.php:230 +#: usr/local/www/services_dhcp.php:308 usr/local/www/services_dhcpv6.php:252 +#: usr/local/www/services_dhcp.php:360 usr/local/www/services_dhcpv6.php:237 +#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcpv6.php:232 +#: usr/local/www/services_dhcp.php:361 usr/local/www/services_dhcp.php:362 +msgid "The specified range lies outside of the current subnet." +msgstr "O intervalo especificado está fora da subrede atual." + +#: usr/local/www/services_dhcp.php:301 usr/local/www/services_dhcp.php:312 +#: usr/local/www/services_dhcpv6.php:257 usr/local/www/services_dhcp.php:364 +#: usr/local/www/services_dhcpv6.php:242 usr/local/www/services_dhcp.php:345 +#: usr/local/www/services_dhcpv6.php:237 usr/local/www/services_dhcp.php:365 +#: usr/local/www/services_dhcp.php:366 +msgid "The range is invalid (first element higher than second element)." +msgstr "O intervalo é inválido (primeiro elemento maior que o segunto elemento)." + +#: usr/local/www/services_dhcp.php:305 usr/local/www/services_dhcpv6.php:240 +#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcpv6.php:261 +#: usr/local/www/services_dhcp.php:372 usr/local/www/services_dhcpv6.php:246 +#: usr/local/www/services_dhcp.php:368 usr/local/www/services_dhcpv6.php:241 +#: usr/local/www/services_dhcp.php:388 usr/local/www/services_dhcp.php:389 +#, php-format +msgid "You must disable the DHCP relay on the %s interface before enabling the DHCP server." +msgstr "Você deve desabilitar o DHCP relay na interface %s antes de habilitar o servidor DHCP." + +#: usr/local/www/services_dhcp.php:315 usr/local/www/services_dhcp.php:326 +#: usr/local/www/services_dhcpv6.php:276 usr/local/www/services_dhcp.php:382 +#: usr/local/www/services_dhcpv6.php:261 usr/local/www/services_dhcp.php:378 +#: usr/local/www/services_dhcpv6.php:256 usr/local/www/services_dhcp.php:398 +#: usr/local/www/services_dhcp.php:399 +#, php-format +msgid "The DHCP range cannot overlap any static DHCP mappings." +msgstr "O intervalo DHCP não pode sobrepor nenhum mapeamento DHCP estático." + +#: usr/local/www/services_dhcp.php:421 usr/local/www/services_dhcp.php:433 +#: usr/local/www/services_dhcp.php:527 usr/local/www/services_dhcp.php:526 +#: usr/local/www/services_dhcp.php:546 usr/local/www/services_dhcp.php:558 +msgid "DHCP server" +msgstr "Servidor DHCP" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:571 +msgid "Text" +msgstr "Texto" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:571 +msgid "String" +msgstr "String" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:571 +msgid "Boolean" +msgstr "Booleano" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:572 +msgid "Unsigned 8-bit integer" +msgstr "Inteiro de 8-bits sem sinal" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:572 +msgid "Unsigned 16-bit integer" +msgstr "Inteiro de 16-bits sem sinal" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:572 +msgid "Unsigned 32-bit integer" +msgstr "Inteiro de 32-bits sem sinal" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:573 +msgid "Signed 8-bit integer" +msgstr "Inteiro de 8-bits com sinal" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:573 +msgid "Signed 16-bit integer" +msgstr "Inteiro de 16-bits com sinal" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:573 +msgid "Signed 32-bit integer" +msgstr "Inteiro de 32-bits com sinal" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:573 +msgid "IP address or host" +msgstr "Endereço IP ou host" + +#: usr/local/www/services_dhcp.php:528 usr/local/www/services_dhcpv6.php:453 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcpv6.php:480 +#: usr/local/www/services_dhcp.php:645 usr/local/www/services_dhcpv6.php:460 +#: usr/local/www/services_dhcp.php:647 usr/local/www/services_dhcpv6.php:455 +#: usr/local/www/services_dhcp.php:667 usr/local/www/services_dhcp.php:679 +msgid "DHCP Relay is currently enabled. Cannot enable the DHCP Server service while the DHCP Relay is enabled on any interface." +msgstr "DHCP Relay está atualmente habilitado. Não é possível habilitar do serviço do Servidor DHCP enquanto o DHCP Relay estiver habilitado em qualquer interface." + +#: usr/local/www/services_dhcp.php:536 usr/local/www/services_dhcpv6.php:461 +#: usr/local/www/services_dhcp.php:549 usr/local/www/services_dhcpv6.php:488 +#: usr/local/www/services_dhcp.php:653 usr/local/www/services_dhcpv6.php:468 +#: usr/local/www/services_dhcp.php:655 usr/local/www/services_dhcpv6.php:463 +#: usr/local/www/services_dhcp.php:675 usr/local/www/services_dhcp.php:687 +msgid "The static mapping configuration has been changed" +msgstr "A configuração de mapeamento estático foi modificada" + +#: usr/local/www/services_dhcp.php:575 usr/local/www/services_dhcp.php:588 +#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcp.php:695 +#: usr/local/www/services_dhcp.php:715 usr/local/www/services_dhcp.php:727 +#, php-format +msgid "Enable DHCP server on %s interface" +msgstr "Habilitar servidor DHCP na interface %s" + +#: usr/local/www/services_dhcp.php:583 usr/local/www/services_dhcpv6.php:518 +#: usr/local/www/services_dhcp.php:596 usr/local/www/services_dhcpv6.php:592 +#: usr/local/www/services_dhcp.php:706 usr/local/www/services_dhcpv6.php:523 +#: usr/local/www/services_dhcp.php:708 usr/local/www/services_dhcpv6.php:534 +#: usr/local/www/services_dhcp.php:728 usr/local/www/services_dhcp.php:740 +msgid "Deny unknown clients" +msgstr "Negar clientes desconhecidos" + +#: usr/local/www/services_dhcp.php:584 usr/local/www/services_dhcpv6.php:519 +#: usr/local/www/services_dhcp.php:597 usr/local/www/services_dhcpv6.php:593 +#: usr/local/www/services_dhcp.php:707 usr/local/www/services_dhcpv6.php:524 +#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:535 +#: usr/local/www/services_dhcp.php:729 usr/local/www/services_dhcp.php:741 +msgid "If this is checked, only the clients defined below will get DHCP leases from this server. " +msgstr "Se isso estiver marcado, somente os clientes abaixo obterão concessões DHCP desse servidor." + +#: usr/local/www/services_dhcp.php:593 usr/local/www/services_dhcpv6.php:528 +#: usr/local/www/services_dhcp.php:606 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_dhcp.php:716 usr/local/www/services_dhcpv6.php:533 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +#: usr/local/www/services_dhcp.php:726 usr/local/www/services_dhcpv6.php:548 +#: usr/local/www/services_dhcp.php:746 usr/local/www/services_dhcp.php:758 +msgid "Subnet mask" +msgstr "Máscara de subrede" + +#: usr/local/www/services_dhcp.php:599 usr/local/www/services_dhcpv6.php:534 +#: usr/local/www/services_dhcp.php:612 usr/local/www/services_dhcpv6.php:608 +#: usr/local/www/services_dhcp.php:722 usr/local/www/services_dhcpv6.php:539 +#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:554 +#: usr/local/www/services_dhcp.php:752 usr/local/www/services_dhcp.php:764 +msgid "Available range" +msgstr "Intervalo disponível" + +#: usr/local/www/services_dhcp.php:616 usr/local/www/services_dhcpv6.php:552 +#: usr/local/www/services_dhcp.php:629 usr/local/www/services_dhcpv6.php:625 +#: usr/local/www/services_dhcp.php:750 usr/local/www/vpn_l2tp.php:342 +#: usr/local/www/services_dhcpv6.php:556 usr/local/www/vpn_l2tp.php:345 +#: usr/local/www/services_dhcp.php:760 usr/local/www/services_dhcpv6.php:573 +#: usr/local/www/services_dhcp.php:780 usr/local/www/services_dhcp.php:792 +msgid "Subnet Mask" +msgstr "Máscara de subrede" + +#: usr/local/www/services_dhcp.php:633 usr/local/www/services_dhcpv6.php:569 +#: usr/local/www/services_dhcp.php:646 usr/local/www/services_dhcpv6.php:642 +#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:573 +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:590 +#: usr/local/www/services_dhcp.php:797 usr/local/www/services_dhcp.php:809 +msgid "Range" +msgstr "Intervalo" + +#: usr/local/www/services_dhcp.php:640 usr/local/www/services_dhcp.php:653 +#: usr/local/www/services_dhcp.php:829 +#: usr/local/www/services_dhcp_edit.php:395 +#: usr/local/www/services_dhcp.php:843 usr/local/www/services_dhcp.php:863 +#: usr/local/www/services_dhcp.php:875 +msgid "WINS servers" +msgstr "Servidores WINS" + +#: usr/local/www/services_dhcp.php:651 usr/local/www/services_dhcpv6.php:594 +#: usr/local/www/services_dhcp.php:664 usr/local/www/services_dhcpv6.php:671 +#: usr/local/www/services_router_advertisements.php:376 +#: usr/local/www/services_dhcp.php:840 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_dhcp_edit.php:406 +#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:619 +#: usr/local/www/services_router_advertisements.php:371 +#: usr/local/www/services_dhcp.php:874 usr/local/www/services_dhcp.php:886 +msgid "NOTE: leave blank to use the system default DNS servers - this interface's IP if DNS forwarder is enabled, otherwise the servers configured on the General page." +msgstr "NOTA: deixe em branco para usar os servidores DNS padrão do sistema - esse IP de interface se o DNS forwarder estiver habilitado, do contrário os servidores configurados na página Principal." + +#: usr/local/www/services_dhcp.php:658 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_dhcp.php:671 usr/local/www/services_dhcp.php:847 +#: usr/local/www/services_dhcp_edit.php:413 +#: usr/local/www/services_dhcp.php:861 usr/local/www/services_dhcp.php:881 +#: usr/local/www/services_dhcp.php:893 +msgid "The default is to use the IP on this interface of the firewall as the gateway. Specify an alternate gateway here if this is not the correct gateway for your network." +msgstr "O padrão é usar o IP nessa interface do firewall como o gateway. Especifique um gateway alternativo aqui se esse não for o gateway correto para sua rede." + +#: usr/local/www/services_dhcp.php:662 usr/local/www/services_dhcpv6.php:607 +#: usr/local/www/services_dhcp.php:675 usr/local/www/services_dhcpv6.php:675 +#: usr/local/www/services_dhcp.php:851 usr/local/www/services_dhcpv6.php:606 +#: usr/local/www/services_dhcp_edit.php:417 +#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:623 +#: usr/local/www/services_dhcp.php:885 usr/local/www/services_dhcp.php:897 +msgid "Domain name" +msgstr "Nome de domínio" + +#: usr/local/www/services_dhcp.php:665 usr/local/www/services_dhcpv6.php:610 +#: usr/local/www/services_dhcp.php:678 usr/local/www/services_dhcpv6.php:678 +#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:609 +#: usr/local/www/services_dhcp_edit.php:420 +#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcpv6.php:626 +#: usr/local/www/services_dhcp.php:888 usr/local/www/services_dhcp.php:900 +msgid "The default is to use the domain name of this system as the default domain name provided by DHCP. You may specify an alternate domain name here." +msgstr "O padrão é usar o nome de domínio desse sistema como o nome de domínio padrão fornecido pelo DHCP. Você pode especificar um nome de domínio alternativo aqui." + +#: usr/local/www/services_dhcp.php:669 usr/local/www/services_dhcpv6.php:614 +#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:682 +#: usr/local/www/services_router_advertisements.php:381 +#: usr/local/www/services_dhcp.php:858 usr/local/www/services_dhcpv6.php:613 +#: usr/local/www/services_dhcp_edit.php:424 +#: usr/local/www/services_dhcp.php:872 usr/local/www/services_dhcpv6.php:630 +#: usr/local/www/services_router_advertisements.php:376 +#: usr/local/www/services_dhcp.php:892 usr/local/www/services_dhcp.php:904 +msgid "Domain search list" +msgstr "Lista de busca de domínio" + +#: usr/local/www/services_dhcp.php:672 usr/local/www/services_dhcpv6.php:617 +msgid "The DHCP server can optionally provide a domain search list." +msgstr "O servidor DHCP pode, opcionalmente, fornecer uma lista de busca de domínio." + +#: usr/local/www/services_dhcp.php:676 usr/local/www/services_dhcpv6.php:621 +#: usr/local/www/services_dhcp.php:689 usr/local/www/services_dhcpv6.php:689 +#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:620 +#: usr/local/www/services_dhcp_edit.php:431 +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:637 +#: usr/local/www/services_dhcp.php:899 usr/local/www/services_dhcp.php:911 +msgid "Default lease time" +msgstr "Tempo de concessão padrão" + +#: usr/local/www/services_dhcp.php:680 usr/local/www/services_dhcpv6.php:625 +#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcpv6.php:693 +#: usr/local/www/services_dhcp.php:869 usr/local/www/services_dhcpv6.php:624 +#: usr/local/www/services_dhcp_edit.php:435 +#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:641 +#: usr/local/www/services_dhcp.php:903 usr/local/www/services_dhcp.php:915 +msgid "This is used for clients that do not ask for a specific expiration time." +msgstr "Isso é usado para clientes que não requisitam um tempo de expiração específico." + +#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:627 +#: usr/local/www/services_dhcp.php:695 usr/local/www/services_dhcpv6.php:695 +#: usr/local/www/services_dhcp.php:871 usr/local/www/services_dhcpv6.php:626 +#: usr/local/www/services_dhcp_edit.php:437 +#: usr/local/www/services_dhcp.php:885 usr/local/www/services_dhcpv6.php:643 +#: usr/local/www/services_dhcp.php:905 usr/local/www/services_dhcp.php:917 +msgid "The default is 7200 seconds." +msgstr "O padrão é 7200 segundos." + +#: usr/local/www/services_dhcp.php:686 usr/local/www/services_dhcpv6.php:631 +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:699 +#: usr/local/www/services_dhcp.php:875 usr/local/www/services_dhcpv6.php:630 +#: usr/local/www/services_dhcp_edit.php:441 +#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:647 +#: usr/local/www/services_dhcp.php:909 usr/local/www/services_dhcp.php:921 +msgid "Maximum lease time" +msgstr "Tempo máximo de concessão" + +#: usr/local/www/services_dhcp.php:690 usr/local/www/services_dhcpv6.php:635 +#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcpv6.php:703 +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:634 +#: usr/local/www/services_dhcp_edit.php:445 +#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:651 +#: usr/local/www/services_dhcp.php:913 usr/local/www/services_dhcp.php:925 +msgid "This is the maximum lease time for clients that ask for a specific expiration time." +msgstr "Esse é o máximo tempo de concessão para clientes que requisitama por um tempo de expiração específico." + +#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcpv6.php:637 +#: usr/local/www/services_dhcp.php:705 usr/local/www/services_dhcpv6.php:705 +#: usr/local/www/services_dhcp.php:881 usr/local/www/services_dhcpv6.php:636 +#: usr/local/www/services_dhcp_edit.php:447 +#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcpv6.php:653 +#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcp.php:927 +msgid "The default is 86400 seconds." +msgstr "O padrão é 86400 segundos." + +#: usr/local/www/services_dhcp.php:696 usr/local/www/services_dhcpv6.php:641 +#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:886 usr/local/www/services_dhcpv6.php:640 +#: usr/local/www/services_dhcp.php:900 usr/local/www/services_dhcpv6.php:657 +#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcp.php:932 +msgid "Failover peer IP:" +msgstr "Failover peer IP:" + +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:644 +#: usr/local/www/services_dhcp.php:712 usr/local/www/services_dhcpv6.php:712 +#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:643 +#: usr/local/www/services_dhcpv6.php:660 +msgid "Leave blank to disable. Enter the interface IP address of the other machine. Machines must be using CARP." +msgstr "Deixe em branco para desabilitar. Informar o endereço IP da interface da outra máquina. Máquinas devem ser CARP." + +#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcp.php:716 +#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcp.php:909 +#: usr/local/www/services_dhcp.php:1150 usr/local/www/services_dhcp.php:929 +#: usr/local/www/services_dhcp.php:1170 usr/local/www/services_dhcp.php:941 +#: usr/local/www/services_dhcp.php:1182 +msgid "Static ARP" +msgstr "ARP Estático" + +#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcp.php:723 +#: usr/local/www/services_dhcp.php:902 usr/local/www/services_dhcp.php:916 +#: usr/local/www/services_dhcp.php:936 usr/local/www/services_dhcp.php:948 +msgid "Enable Static ARP entries" +msgstr "Habilitar entradas ARP estáticas" + +#: usr/local/www/services_dhcp.php:715 usr/local/www/services_dhcp.php:728 +#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:921 +#: usr/local/www/services_dhcp.php:941 +msgid "Only the machines listed below will be able to communicate with the firewall on this NIC." +msgstr "Somente as máquinas listadas abaixo serão capazes de comunicar-se com o firewall nesse NIC." + +#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcpv6.php:651 +#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcpv6.php:744 +#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcpv6.php:675 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcpv6.php:692 +#: usr/local/www/services_dhcp.php:978 usr/local/www/services_dhcp.php:990 +msgid "Show Dynamic DNS" +msgstr "Mostrar DNS Dinâmico" + +#: usr/local/www/services_dhcp.php:729 usr/local/www/services_dhcpv6.php:655 +#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:748 +#: usr/local/www/services_dhcp.php:949 usr/local/www/services_dhcpv6.php:679 +#: usr/local/www/services_dhcp_edit.php:458 +#: usr/local/www/services_dhcp.php:962 usr/local/www/services_dhcpv6.php:696 +#: usr/local/www/services_dhcp.php:982 usr/local/www/services_dhcp.php:994 +msgid "Enable registration of DHCP client names in DNS." +msgstr "Habilitar registro de nomes de clientes DHCP no DNS." + +#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:658 +#: usr/local/www/services_dhcp.php:770 usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/services_dhcp.php:952 usr/local/www/services_dhcpv6.php:682 +#: usr/local/www/services_dhcp_edit.php:461 +#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcpv6.php:699 +#: usr/local/www/services_dhcp.php:985 usr/local/www/services_dhcp.php:997 +msgid "Note: Leave blank to disable dynamic DNS registration." +msgstr "Nota: Deixe em branco para desabilitar registro de DNS dinâmico." + +#: usr/local/www/services_dhcp.php:733 usr/local/www/services_dhcpv6.php:659 +#: usr/local/www/services_dhcp.php:771 usr/local/www/services_dhcpv6.php:752 +#: usr/local/www/services_dhcp.php:953 usr/local/www/services_dhcpv6.php:683 +#: usr/local/www/services_dhcp_edit.php:462 +#: usr/local/www/services_dhcp.php:966 usr/local/www/services_dhcpv6.php:700 +#: usr/local/www/services_dhcp.php:986 usr/local/www/services_dhcp.php:998 +msgid "Enter the dynamic DNS domain which will be used to register client names in the DNS server." +msgstr "Informe o domínio DNS dinâmico que será usado para registrar nomes de clientes no servidor DNS." + +#: usr/local/www/services_dhcp.php:738 usr/local/www/services_dhcpv6.php:664 +#: usr/local/www/services_dhcp.php:776 usr/local/www/services_dhcpv6.php:757 +#: usr/local/www/services_dhcp.php:972 usr/local/www/services_dhcpv6.php:688 +#: usr/local/www/services_dhcp_edit.php:467 +#: usr/local/www/services_dhcp.php:985 usr/local/www/services_dhcpv6.php:705 +#: usr/local/www/services_dhcp.php:1005 usr/local/www/services_dhcp.php:1017 +msgid "NTP servers" +msgstr "Servidores NTP" + +#: usr/local/www/services_dhcp.php:741 usr/local/www/services_dhcpv6.php:667 +#: usr/local/www/services_dhcp.php:779 usr/local/www/services_dhcpv6.php:760 +#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcpv6.php:708 +#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcp.php:1020 +msgid "Show NTP configuration" +msgstr "Exibir configuração NTP" + +#: usr/local/www/services_dhcp.php:750 usr/local/www/services_dhcpv6.php:676 +#: usr/local/www/services_dhcp.php:788 usr/local/www/services_dhcpv6.php:770 +#: usr/local/www/services_dhcp.php:984 usr/local/www/services_dhcpv6.php:701 +#: usr/local/www/services_dhcp_edit.php:479 +#: usr/local/www/services_dhcp.php:997 usr/local/www/services_dhcpv6.php:718 +#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcp.php:1029 +msgid "TFTP server" +msgstr "Servidor TFTP" + +#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcpv6.php:679 +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:773 +#: usr/local/www/services_dhcp.php:987 usr/local/www/services_dhcpv6.php:704 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:1000 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcp.php:1020 usr/local/www/services_dhcp.php:1032 +msgid "Show TFTP configuration" +msgstr "Exibir configuração TFTP" + +#: usr/local/www/services_dhcp.php:757 usr/local/www/services_dhcpv6.php:683 +#: usr/local/www/services_dhcp.php:795 usr/local/www/services_dhcpv6.php:777 +#: usr/local/www/services_dhcp.php:991 usr/local/www/services_dhcpv6.php:708 +#: usr/local/www/services_dhcp_edit.php:486 +#: usr/local/www/services_dhcp.php:1004 usr/local/www/services_dhcpv6.php:725 +#: usr/local/www/services_dhcp.php:1024 usr/local/www/services_dhcp.php:1036 +msgid "Leave blank to disable. Enter a full hostname or IP for the TFTP server." +msgstr "Deixe em branco para desabilitar. Informe um nome de host completo ou IP para o servidor TFTP." + +#: usr/local/www/services_dhcp.php:762 usr/local/www/services_dhcpv6.php:688 +#: usr/local/www/services_dhcp.php:800 usr/local/www/services_dhcpv6.php:783 +#: usr/local/www/services_dhcp.php:996 usr/local/www/services_dhcpv6.php:714 +#: usr/local/www/services_dhcp.php:1009 usr/local/www/services_dhcpv6.php:731 +#: usr/local/www/services_dhcp.php:1029 usr/local/www/services_dhcp.php:1041 +msgid "LDAP URI" +msgstr "URI LDAP" + +#: usr/local/www/services_dhcp.php:765 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcp.php:803 usr/local/www/services_dhcpv6.php:786 +#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcpv6.php:717 +#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcpv6.php:734 +#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcp.php:1044 +msgid "Show LDAP configuration" +msgstr "Exibir configuração LDAP" + +#: usr/local/www/services_dhcp.php:769 usr/local/www/services_dhcpv6.php:695 +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:1003 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcp.php:1016 usr/local/www/services_dhcpv6.php:738 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcp.php:1048 +msgid "Leave blank to disable. Enter a full URI for the LDAP server in the form ldap://ldap.example.com/dc=example,dc=com" +msgstr "Deixa em branco para desabilitar. Informe um URI complleto para o servidor LDAP na forma ldap://ldap.example.com/dc=example,dc=com" + +#: usr/local/www/services_dhcp.php:774 usr/local/www/services_dhcpv6.php:700 +#: usr/local/www/services_dhcp.php:812 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcpv6.php:726 +#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:743 +#: usr/local/www/services_dhcp.php:1041 usr/local/www/services_dhcp.php:1053 +msgid "Enable network booting" +msgstr "Habilitar boot da rede" + +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:703 +#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcpv6.php:798 +#: usr/local/www/services_dhcp.php:1011 usr/local/www/services_dhcpv6.php:729 +#: usr/local/www/services_dhcp.php:1024 usr/local/www/services_dhcpv6.php:746 +#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcp.php:1056 +msgid "Show Network booting" +msgstr "Exibir boot da Rede" + +#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcpv6.php:707 +#: usr/local/www/services_dhcp.php:819 usr/local/www/services_dhcpv6.php:802 +#: usr/local/www/services_dhcp.php:1015 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/services_dhcp.php:1028 usr/local/www/services_dhcpv6.php:750 +#: usr/local/www/services_dhcp.php:1048 usr/local/www/services_dhcp.php:1060 +msgid "Enables network booting." +msgstr "Habilita boot da rede." + +#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735 +#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752 +#: usr/local/www/services_dhcp.php:1050 usr/local/www/services_dhcp.php:1062 +msgid "Enter the IP of the" +msgstr "Informe o IP do" + +#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735 +#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752 +#: usr/local/www/services_dhcp.php:1050 usr/local/www/services_dhcp.php:1062 +msgid "next-server" +msgstr "next-server" + +#: usr/local/www/services_dhcp.php:785 usr/local/www/services_dhcpv6.php:711 +#: usr/local/www/services_dhcp.php:823 usr/local/www/services_dhcpv6.php:806 +#: usr/local/www/services_dhcp.php:1019 usr/local/www/services_dhcpv6.php:737 +#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcpv6.php:754 +#: usr/local/www/services_dhcp.php:1052 usr/local/www/services_dhcp.php:1064 +msgid "and the filename" +msgstr "e o nome do arquivo" + +#: usr/local/www/services_dhcp.php:787 usr/local/www/services_dhcpv6.php:713 +#: usr/local/www/services_dhcp.php:825 usr/local/www/services_dhcpv6.php:808 +#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:739 +#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:756 +#: usr/local/www/services_dhcp.php:1054 usr/local/www/services_dhcp.php:1066 +msgid "Note: You need both a filename and a boot server configured for this to work!" +msgstr "Nota: Você precisa um nome de arquivo e um servidor de boot configurado para isso funcionar!" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcp.php:1068 +msgid "Enter the" +msgstr "Informe o" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcp.php:1068 +msgid "root-path" +msgstr "root-path" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcp.php:1068 +msgid "string" +msgstr "string" + +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:717 +#: usr/local/www/services_dhcp.php:829 usr/local/www/services_dhcpv6.php:812 +#: usr/local/www/services_dhcp.php:1025 usr/local/www/services_dhcpv6.php:743 +#: usr/local/www/services_dhcp.php:1038 usr/local/www/services_dhcpv6.php:760 +#: usr/local/www/services_dhcp.php:1058 usr/local/www/services_dhcp.php:1070 +msgid "Note: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname" +msgstr "Nota: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname" + +#: usr/local/www/services_dhcp.php:796 usr/local/www/services_dhcpv6.php:722 +#: usr/local/www/services_dhcp.php:834 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1031 usr/local/www/services_dhcpv6.php:748 +#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcpv6.php:765 +#: usr/local/www/services_dhcp.php:1064 usr/local/www/services_dhcp.php:1076 +msgid "Additional BOOTP/DHCP Options" +msgstr "Opções BOOTP/DHCP Adicionais" + +#: usr/local/www/services_dhcp.php:799 usr/local/www/services_dhcpv6.php:725 +#: usr/local/www/services_dhcp.php:837 usr/local/www/services_dhcpv6.php:820 +#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:768 +#: usr/local/www/services_dhcp.php:1067 usr/local/www/services_dhcp.php:1079 +msgid "Show Additional BOOTP/DHCP Options" +msgstr "Exibir Opções BOOTP/DHCP Adicionais" + +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828 +#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759 +#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776 +#: usr/local/www/services_dhcp.php:1075 usr/local/www/services_dhcp.php:1087 +msgid "Enter the DHCP option number and the value for each item you would like to include in the DHCP lease information. For a list of available options please visit this" +msgstr "Informe o número de opção DHCP e o valor de cada item que você gostaria de incluir nas informações de concessão DHCP. Para uma lista de opções disponíveis, por favor, visite " + +#: usr/local/www/services_dhcp.php:812 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/services_dhcpv6.php:738 usr/local/www/services_dhcp.php:850 +#: usr/local/www/services_dhcpv6.php:833 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:764 +#: usr/local/www/services_dhcp.php:1060 usr/local/www/services_dhcpv6.php:781 +#: usr/local/www/services_dhcp.php:1080 usr/local/www/services_dhcp.php:1092 +msgid "Number" +msgstr "Número" + +#: usr/local/www/services_dhcp.php:814 +#: usr/local/www/load_balancer_relay_action_edit.php:506 +#: usr/local/www/system_advanced_sysctl.php:173 +#: usr/local/www/system_advanced_sysctl.php:249 +#: usr/local/www/services_dhcpv6.php:739 +#: usr/local/www/system_certmanager.php:763 +#: usr/local/www/load_balancer_relay_action_edit.php:505 +#: usr/local/www/services_dhcp.php:852 usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/load_balancer_relay_action_edit.php:503 +#: usr/local/www/services_dhcp.php:1049 usr/local/www/services_dhcpv6.php:765 +#: usr/local/www/services_dhcp.php:1062 +#: usr/local/www/system_certmanager.php:788 +#: usr/local/www/services_dhcpv6.php:782 usr/local/www/services_dhcp.php:1082 +#: usr/local/www/system_certmanager.php:789 +#: usr/local/www/services_dhcp.php:1094 +msgid "Value" +msgstr "Valor" + +#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885 +#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816 +#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833 +#: usr/local/www/services_dhcp.php:1152 usr/local/www/services_dhcp.php:1164 +msgid "The DNS servers entered in" +msgstr "Os servidores DNS informados em" + +#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885 +#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816 +#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833 +#: usr/local/www/services_dhcp.php:1152 usr/local/www/services_dhcp.php:1164 +msgid "System: General setup" +msgstr "Sistema: Configurações Gerais" + +#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dhcpv6.php:791 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886 +#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/services_dhcp.php:1153 usr/local/www/services_dhcp.php:1165 +msgid "(or the" +msgstr "(ou o" + +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792 +#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887 +#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818 +#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835 +#: usr/local/www/services_dhcp.php:1154 usr/local/www/services_dhcp.php:1166 +msgid "if enabled)" +msgstr "se habilitado)" + +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792 +#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887 +#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818 +#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835 +#: usr/local/www/services_dhcp.php:1154 usr/local/www/services_dhcp.php:1166 +msgid "will be assigned to clients by the DHCP server." +msgstr "será atribuído a clientes pelo servidor DHCP." + +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890 +#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcpv6.php:821 +#: usr/local/www/services_dhcp.php:1137 usr/local/www/services_dhcpv6.php:838 +#: usr/local/www/services_dhcp.php:1157 usr/local/www/services_dhcp.php:1169 +msgid "The DHCP lease table can be viewed on the" +msgstr "A tabela de concessão DHCP pode ser visualizada no" + +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890 +#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcp.php:1137 +#: usr/local/www/services_dhcp.php:1157 usr/local/www/services_dhcp.php:1169 +msgid "Status: DHCP leases" +msgstr "Status: concessões DHCP" + +#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:796 +#: usr/local/www/services_dhcp.php:921 usr/local/www/services_dhcpv6.php:891 +#: usr/local/www/services_dhcp.php:1125 usr/local/www/services_dhcpv6.php:822 +#: usr/local/www/services_dhcp.php:1138 usr/local/www/services_dhcpv6.php:839 +#: usr/local/www/services_dhcp.php:1158 usr/local/www/services_dhcp.php:1170 +msgid "page." +msgstr "página." + +#: usr/local/www/services_dhcp_edit.php:116 +#: usr/local/www/services_dhcpv6_edit.php:113 +#: usr/local/www/services_dhcpv6_edit.php:115 +#: usr/local/www/services_dhcp_edit.php:118 +#: usr/local/www/services_dhcpv6_edit.php:118 +#: usr/local/www/services_dhcp_edit.php:152 +msgid "The hostname cannot end with a hyphen according to RFC952" +msgstr "O nome de host não pode terminar com um hífen de acordo com a RFC952" + +#: usr/local/www/services_dhcp_edit.php:121 +#: usr/local/www/services_dhcpv6_edit.php:118 +#: usr/local/www/services_dhcpv6_edit.php:120 +#: usr/local/www/services_dhcp_edit.php:123 +#: usr/local/www/services_dhcpv6_edit.php:123 +#: usr/local/www/services_dhcp_edit.php:157 +msgid "A valid hostname is specified, but the domain name part should be omitted" +msgstr "Um nome de host válido é especificado, mas a parte do nome de domínio deve ser omitida" + +#: usr/local/www/services_dhcp_edit.php:132 +#: usr/local/www/services_dhcp_edit.php:134 +#: usr/local/www/services_dhcp_edit.php:168 +msgid "Static ARP is enabled. You must specify an IP address." +msgstr "ARP estático está habilitado. Você deve especificar um endereço IP." + +#: usr/local/www/services_dhcp_edit.php:141 +#: usr/local/www/services_dhcp_edit.php:143 +#: usr/local/www/services_dhcp_edit.php:177 +msgid "This Hostname, IP or MAC address already exists." +msgstr "Esse nome de host, endereço IP ou MAC já existe." + +#: usr/local/www/services_dhcp_edit.php:152 +#: usr/local/www/services_dhcp_edit.php:154 +#: usr/local/www/services_dhcp_edit.php:188 +#, php-format +msgid "The IP address must not be within the DHCP range for this interface." +msgstr "O endereço IP não deve estar dentro do intervalo DHCP para essa interface." + +#: usr/local/www/services_dhcp_edit.php:159 +#: usr/local/www/services_dhcp_edit.php:161 +#: usr/local/www/services_dhcp_edit.php:202 +#, php-format +msgid "The IP address must lie in the %s subnet." +msgstr "O endereço IP deve estar na subrede %s." + +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/services_dhcp_edit.php:193 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dhcp_edit.php:301 +msgid "Edit static mapping" +msgstr "Editar mapeamento estático" + +#: usr/local/www/services_dhcp_edit.php:204 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/services_dhcp_edit.php:206 +#: usr/local/www/services_dhcp_edit.php:334 +msgid "Static DHCP Mapping" +msgstr "Mapeamento DHCP estático" + +#: usr/local/www/services_dhcp_edit.php:215 +#: usr/local/www/services_dhcp_edit.php:218 +#: usr/local/www/services_dhcp_edit.php:217 +#: usr/local/www/services_dhcp_edit.php:345 +#: usr/local/www/services_captiveportal_mac_edit.php:188 +msgid "Copy my MAC address" +msgstr "Copie meu endereço MAC" + +#: usr/local/www/services_dhcp_edit.php:217 +#: usr/local/www/services_dhcp_edit.php:220 +#: usr/local/www/services_dhcp_edit.php:219 +#: usr/local/www/services_dhcp_edit.php:347 +msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx" +msgstr "Informe um endereço MAC no seguinte formato: xx:xx:xx:xx:xx:xx" + +#: usr/local/www/services_dhcp_edit.php:225 +#: usr/local/www/services_dhcp_edit.php:228 +msgid "If no IP address is given, one will be dynamically allocated from the pool." +msgstr "Se nenhum endereço IP for dado, um será dinamicamente alocado do pool." + +#: usr/local/www/services_dhcp_edit.php:231 +#: usr/local/www/services_dhcpv6_edit.php:208 +#: usr/local/www/services_dhcpv6_edit.php:211 +#: usr/local/www/services_dhcp_edit.php:234 +#: usr/local/www/services_dhcpv6_edit.php:213 +#: usr/local/www/services_dhcp_edit.php:236 +#: usr/local/www/services_dhcpv6_edit.php:216 +#: usr/local/www/services_dhcp_edit.php:364 +msgid "Name of the host, without domain part." +msgstr "Nome do host, sem a parte do domínio." + +#: usr/local/www/services_dhcp_relay.php:72 +#: usr/local/www/services_dhcpv6_relay.php:73 +msgid "Destination Server" +msgstr "Servidor de Destino" + +#: usr/local/www/services_dhcp_relay.php:80 +msgid "A valid Destination Server IP address must be specified." +msgstr "Um endereço IP do Servidor de Destino válido deve ser especificado." + +#: usr/local/www/services_dhcp_relay.php:100 usr/local/www/fbegin.inc:122 +#: usr/local/www/status_services.php:295 +#: usr/local/www/widgets/widgets/services_status.widget.php:100 +#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:278 +#: usr/local/www/fbegin.inc:148 usr/local/www/fbegin.inc:140 +#: etc/inc/service-utils.inc:277 etc/inc/service-utils.inc:294 +#: etc/inc/service-utils.inc:289 +msgid "DHCP Relay" +msgstr "DHCP Relay" + +#: usr/local/www/services_dhcp_relay.php:144 +#: usr/local/www/services_dhcp_relay.php:145 +msgid "DHCP Relay configuration" +msgstr "Configuração do DHCP Relay" + +#: usr/local/www/services_dhcp_relay.php:150 +#: usr/local/www/services_dhcp_relay.php:151 +#, php-format +msgid "Enable DHCP relay on interface" +msgstr "Habilitar DHCP Relay na interface" + +#: usr/local/www/services_dhcp_relay.php:175 +#: usr/local/www/services_dhcpv6_relay.php:176 +#: usr/local/www/services_dhcp_relay.php:176 +#: usr/local/www/services_dhcpv6_relay.php:177 +msgid "Append circuit ID and agent ID to requests" +msgstr "Anexe o circuit ID e o agent ID às requisições" + +#: usr/local/www/services_dhcp_relay.php:176 +#: usr/local/www/services_dhcp_relay.php:177 +#, php-format +msgid "If this is checked, the DHCP relay will append the circuit ID (%s interface number) and the agent ID to the DHCP request." +msgstr "Se isso estiver marcado, o DHCP relay anexará o circuit ID (número de interface %s) e o agent ID à requisição DHCP." + +#: usr/local/www/services_dhcp_relay.php:179 +#: usr/local/www/services_dhcpv6_relay.php:180 +#: usr/local/www/services_dhcp_relay.php:180 +#: usr/local/www/services_dhcpv6_relay.php:181 +msgid "Destination server" +msgstr "Servidor de Destino" + +#: usr/local/www/services_dhcp_relay.php:183 +#: usr/local/www/services_dhcp_relay.php:184 +msgid "This is the IP address of the server to which DHCP requests are relayed. You can enter multiple server IP addresses, separated by commas. Select \"Proxy requests to DHCP server on WAN subnet\" to relay DHCP packets to the server that was used on the WAN interface." +msgstr "Esse é o endereço IP do servidor para o qual as requisições DHCP são retransmitidas. Você pode inserir múltiplos servidores de endereços de IP, separados por vírgulas. Selecione \"Requisições de Proxy para o servidor DHCP na subrede WAN\" para retransmitir pacotes DHCP para o servidor que foi usado na interface WAN." + +#: usr/local/www/services_dnsmasq.php:80 usr/local/www/services_dnsmasq.php:84 +#: usr/local/www/services_dnsmasq.php:86 +#: usr/local/www/services_dnsmasq.php:107 +msgid "Invalid custom options" +msgstr "Opções personalizadas inválidas" + +#: usr/local/www/services_dnsmasq.php:147 +#: usr/local/www/services_dnsmasq.php:148 +#: usr/local/www/services_dnsmasq.php:152 +#: usr/local/www/services_dnsmasq.php:154 +#: usr/local/www/services_dnsmasq.php:175 +msgid "The DNS forwarder configuration has been changed" +msgstr "A configuração do DNS forwarder foi modificada" + +#: usr/local/www/services_dnsmasq.php:151 +#: usr/local/www/services_dnsmasq.php:152 +#: usr/local/www/services_dnsmasq.php:156 +#: usr/local/www/services_dnsmasq.php:158 +#: usr/local/www/services_dnsmasq.php:179 +msgid "General DNS Forwarder Options" +msgstr "Opções gerais do DNS Forwarder" + +#: usr/local/www/services_dnsmasq.php:157 +#: usr/local/www/services_dnsmasq.php:158 +#: usr/local/www/services_dnsmasq.php:162 +#: usr/local/www/services_dnsmasq.php:164 +#: usr/local/www/services_dnsmasq.php:185 +msgid "Enable DNS forwarder" +msgstr "Habilitar DNS forwarder" + +#: usr/local/www/services_dnsmasq.php:161 +#: usr/local/www/services_unbound.php:211 +#: usr/local/www/services_dnsmasq.php:162 +#: usr/local/www/services_dnsmasq.php:166 +#: usr/local/www/services_dnsmasq.php:168 +#: usr/local/www/services_dnsmasq.php:189 +msgid "DHCP Registration" +msgstr "Registro DHCP" + +#: usr/local/www/services_dnsmasq.php:164 +#: usr/local/www/services_dnsmasq.php:165 +#: usr/local/www/services_dnsmasq.php:169 +#: usr/local/www/services_dnsmasq.php:171 +#: usr/local/www/services_dnsmasq.php:192 +msgid "Register DHCP leases in DNS forwarder" +msgstr "Registrar concessões DHCP no DNS forwarder" + +#: usr/local/www/services_dnsmasq.php:165 +#: usr/local/www/services_dnsmasq.php:166 +#: usr/local/www/services_dnsmasq.php:170 +#: usr/local/www/services_dnsmasq.php:172 +#: usr/local/www/services_dnsmasq.php:193 +#, php-format +msgid "If this option is set, then machines that specify their hostname when requesting a DHCP lease will be registered in the DNS forwarder, so that their name can be resolved. You should also set the domain in %sSystem: General setup%s to the proper value." +msgstr "Se essa opção estiver configurada, então máquinas que especificam seus nomes de host quando requisitam uma concessão DHCP serão registrados no DNS forwarder, de modo que seus nomes possam ser resolvidos. Você deve também configurar em %sSistema: Configurações Gerais %s para o valor apropriado." + +#: usr/local/www/services_dnsmasq.php:173 +#: usr/local/www/services_unbound.php:223 +#: usr/local/www/services_dnsmasq.php:174 +#: usr/local/www/services_dnsmasq.php:178 +#: usr/local/www/services_dnsmasq.php:180 +#: usr/local/www/services_dnsmasq.php:201 +msgid "Static DHCP" +msgstr "DHCP estático" + +#: usr/local/www/services_dnsmasq.php:176 +#: usr/local/www/services_dnsmasq.php:177 +#: usr/local/www/services_dnsmasq.php:181 +#: usr/local/www/services_dnsmasq.php:183 +#: usr/local/www/services_dnsmasq.php:204 +msgid "Register DHCP static mappings in DNS forwarder" +msgstr "Registrar mapeamentos estáticos DHCP no DNS forwarder" + +#: usr/local/www/services_dnsmasq.php:177 +#: usr/local/www/services_dnsmasq.php:178 +#: usr/local/www/services_dnsmasq.php:182 +#: usr/local/www/services_dnsmasq.php:184 +#: usr/local/www/services_dnsmasq.php:205 +#, php-format +msgid "If this option is set, then DHCP static mappings will be registered in the DNS forwarder, so that their name can be resolved. You should also set the domain in %sSystem: General setup%s to the proper value." +msgstr "Se essa opção estiver configurada, então os mapeamentos estáticos DHCP serão registrados no DNS forwarder, de modo que seus nomes possam ser resolvidos. Você deve também configurar o domínio em %sSistema: Configurações Gerais%s para um valor apropriado." + +#: usr/local/www/services_dnsmasq.php:184 +#: usr/local/www/services_unbound.php:234 +#: usr/local/www/services_dnsmasq.php:185 +#: usr/local/www/services_dnsmasq.php:189 +#: usr/local/www/services_dnsmasq.php:191 +#: usr/local/www/services_dnsmasq.php:212 +msgid "Prefer DHCP" +msgstr "DHCP preferido" + +#: usr/local/www/services_dnsmasq.php:187 +#: usr/local/www/services_unbound.php:237 +#: usr/local/www/services_dnsmasq.php:188 +#: usr/local/www/services_dnsmasq.php:192 +#: usr/local/www/services_dnsmasq.php:194 +#: usr/local/www/services_dnsmasq.php:215 +msgid "Resolve DHCP mappings first" +msgstr "Resolver mapeamentos de DHCP primeiro" + +#: usr/local/www/services_dnsmasq.php:188 +#: usr/local/www/services_unbound.php:238 +#: usr/local/www/services_dnsmasq.php:189 +#: usr/local/www/services_dnsmasq.php:193 +#: usr/local/www/services_dnsmasq.php:195 +#: usr/local/www/services_dnsmasq.php:216 +#, php-format +msgid "If this option is set, then DHCP mappings will be resolved before the manual list of names below. This only affects the name given for a reverse lookup (PTR)." +msgstr "Se esta opção estiver definida, os mapeamentos DHCP serão resolvidos antes da lista manual de nomes abaixo. Isso afeta apenas o nome dado para uma consulta reversa (PTR)." + +#: usr/local/www/services_dnsmasq.php:202 +#: usr/local/www/services_dnsmasq.php:203 +#: usr/local/www/services_dnsmasq.php:228 +#: usr/local/www/services_dnsmasq.php:241 +#: usr/local/www/services_dnsmasq.php:305 +msgid "Enter any additional options you would like to add to the dnsmasq configuration here, separated by a space or newline" +msgstr "Informe quaisquer opções adicionais que desejar às configurações do servidor OpenVPN aqui, separados por ponto-e-vírgula ou uma nova linha" + +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_dnsmasq.php:216 +#: usr/local/www/services_dnsmasq.php:241 +#: usr/local/www/services_dnsmasq.php:254 +#: usr/local/www/services_dnsmasq.php:318 +#, php-format +msgid "If the DNS forwarder is enabled, the DHCP service (if enabled) will automatically serve the LAN IP address as a DNS server to DHCP clients so they will use the forwarder. The DNS forwarder will use the DNS servers entered in %sSystem: General setup%s or those obtained via DHCP or PPP on WAN if the "Allow DNS server list to be overridden by DHCP/PPP on WAN" is checked. If you don't use that option (or if you use a static IP address on WAN), you must manually specify at least one DNS server on the %sSystem:General setup%s page." +msgstr "Se o DNS forwarder estiver habilitado, o serviço DHCP (se habilitado) servirá automaticamente o endereço IP da LAN como um servidor DNS para clientes DHCP de modo a usar o forwarder. O DNS forwarder usará os servidores DNS informados em %sSistema: Instalação Geral%s ou aqueles obtidos via DHCP ou PPP na WAN se a opção "Permitir que a lista de servidores DNS seja sobrescrita pelo DHCP/PPP na WAN" estiver marcada. Se você não usar essa opção (ou se você usar o endereço IP estático na WAN), você deve especificar manualmente pelo menos um servidor DNS na página %sSistema: Configurações Gerais%s." + +#: usr/local/www/services_dnsmasq.php:231 +#: usr/local/www/services_unbound.php:267 +#: usr/local/www/services_dnsmasq.php:232 +#: usr/local/www/services_dnsmasq.php:257 +#: usr/local/www/services_dnsmasq.php:270 +#: usr/local/www/services_dnsmasq.php:334 +msgid "Host Overrides" +msgstr "Sobreescrever Host" + +#: usr/local/www/services_dnsmasq.php:235 +#: usr/local/www/services_unbound.php:271 +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_dnsmasq.php:261 +#: usr/local/www/services_dnsmasq.php:274 +#: usr/local/www/services_dnsmasq.php:338 +msgid "Entries in this section override individual results from the forwarders." +msgstr "Entradas nesta seção substituir os resultados individuais dos forwarders." + +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_unbound.php:272 +#: usr/local/www/services_dnsmasq.php:237 +#: usr/local/www/services_dnsmasq.php:262 +#: usr/local/www/services_dnsmasq.php:275 +#: usr/local/www/services_dnsmasq.php:339 +msgid "Use these for changing DNS results or for adding custom DNS records." +msgstr "Use estas opções para alterar resultados de DNS ou adicionar registros de DNS personalizados." + +#: usr/local/www/services_dnsmasq.php:299 +#: usr/local/www/services_dnsmasq.php:320 +#: usr/local/www/services_unbound.php:335 +#: usr/local/www/services_dnsmasq.php:321 +#: usr/local/www/services_dnsmasq.php:346 +#: usr/local/www/services_dnsmasq.php:359 +#: usr/local/www/services_dnsmasq.php:423 +msgid "Domain Overrides" +msgstr "Sobreescrever domínio" + +#: usr/local/www/services_dnsmasq.php:303 +#: usr/local/www/services_dnsmasq.php:324 +#: usr/local/www/services_unbound.php:339 +#: usr/local/www/services_dnsmasq.php:325 +#: usr/local/www/services_dnsmasq.php:350 +#: usr/local/www/services_dnsmasq.php:363 +#: usr/local/www/services_dnsmasq.php:427 +msgid "Entries in this area override an entire domain by specifying an authoritative DNS server to be queried for that domain." +msgstr "Entradas nesta área sobreescrevem um domínio inteiro especificando um servidor DNS autoritativo para ser consultado para tal domínio." + +#: usr/local/www/services_dnsmasq.php:337 +#: usr/local/www/services_dnsmasq.php:358 +#: usr/local/www/services_unbound.php:373 +#: usr/local/www/services_dnsmasq.php:359 +#: usr/local/www/services_dnsmasq.php:384 +#: usr/local/www/services_dnsmasq.php:397 +#: usr/local/www/services_dnsmasq.php:461 +msgid "Do you really want to delete this domain override?" +msgstr "Você realmente deseja apagar essa sobrescrita de domínio?" + +#: usr/local/www/services_dnsmasq_edit.php:100 +#: usr/local/www/services_dnsmasq_edit.php:138 +msgid "This host/domain already exists." +msgstr "Esse host/domínio já existe." + +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/services_dnsmasq_edit.php:166 +msgid "Edit host" +msgstr "Editar host" + +#: usr/local/www/services_dnsmasq_edit.php:138 +#: usr/local/www/services_dnsmasq_edit.php:193 +#: usr/local/www/services_dnsmasq_edit.php:194 +msgid "Edit DNS Forwarder entry" +msgstr "Editar entrada de DNS Forwarder" + +#: usr/local/www/services_dnsmasq_edit.php:144 +#: usr/local/www/services_dnsmasq_edit.php:199 +#: usr/local/www/services_dnsmasq_edit.php:200 +msgid "Name of the host, without domain part" +msgstr "Nome do host, sem a parte de domínio" + +#: usr/local/www/services_dnsmasq_edit.php:146 +#: usr/local/www/services_dnsmasq_edit.php:201 +#: usr/local/www/services_dnsmasq_edit.php:202 +msgid "myhost" +msgstr "myhost" + +#: usr/local/www/services_dnsmasq_edit.php:152 +#: usr/local/www/services_dnsmasq_edit.php:207 +#: usr/local/www/services_dnsmasq_edit.php:208 +msgid "Domain of the host" +msgstr "Domínio de host" + +#: usr/local/www/services_dnsmasq_edit.php:153 +#: usr/local/www/services_dnsmasq_edit.php:208 +#: usr/local/www/services_dnsmasq_edit.php:209 +msgid "example.com" +msgstr "examplo.com" + +#: usr/local/www/services_dnsmasq_edit.php:159 +#: usr/local/www/services_dnsmasq_edit.php:214 +#: usr/local/www/services_dnsmasq_edit.php:215 +msgid "IP address of the host" +msgstr "Endereço IP do host" + +#: usr/local/www/diag_pkglogs.php:81 +msgid "Package logs" +msgstr "Logs de pacotes" + +#: usr/local/www/diag_pkglogs.php:92 +msgid "No packages with logging facilities are currently installed." +msgstr "Não há pacotes com instalações de log atualmente." + +#: usr/local/www/diag_pkglogs.php:103 usr/local/www/diag_pkglogs.php:105 +#, php-format +msgid "%s" +msgstr "%s" + +#: usr/local/www/diag_pkglogs.php:118 +#, php-format +msgid "Last %1$s %2$s log entries" +msgstr "Últimos %1$s %2$s logs de entrada" + +#: usr/local/www/status.php:110 usr/local/www/status.php:111 +msgid "This status page includes the following information" +msgstr "Essa página de status inclui as seguintes informações" + +#: usr/local/www/status.php:225 usr/local/www/status.php:226 +#: usr/local/www/status.php:230 +msgid "Note: make sure to remove any sensitive information (passwords, maybe also IP addresses) before posting information from this page in public places (like mailing lists)" +msgstr "Nota: tenha certeza que removeu todas as informações sensíveis (senhas, talvés endereços IP também) antes de publicar informações dessa página para espaços públicos (como listas de e-mail)" + +#: usr/local/www/status.php:228 usr/local/www/status.php:229 +#: usr/local/www/status.php:233 +msgid "Passwords in config.xml have been automatically removed" +msgstr "Senhas no config.xml foram automaticamente removidas" + +#: usr/local/www/bandwidth_by_ip.php:54 usr/local/www/bandwidth_by_ip.php:67 +#: usr/local/www/bandwidth_by_ip.php:61 usr/local/www/bandwidth_by_ip.php:103 +msgid "no info" +msgstr "sem informações" + +#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_pptp.php:353 +#: usr/local/www/vpn_l2tp.php:73 usr/local/www/vpn_l2tp.php:321 +#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_pppoe_edit.php:424 +#: usr/local/www/vpn_pppoe_edit.php:425 usr/local/www/vpn_pptp.php:355 +#: usr/local/www/vpn_l2tp.php:74 usr/local/www/vpn_pppoe_edit.php:428 +#: usr/local/www/vpn_pptp.php:358 +msgid "Server address" +msgstr "Endereço do servidor" + +#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_l2tp.php:73 +#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_l2tp.php:74 +msgid "Remote start address" +msgstr "Endereço inicial remoto" + +#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_l2tp.php:78 +#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_l2tp.php:79 +msgid "RADIUS server address" +msgstr "Endereço do servidor RADIUS" + +#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_pptp.php:432 +#: usr/local/www/vpn_l2tp.php:78 usr/local/www/vpn_l2tp.php:428 +#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_pptp.php:434 +#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pptp.php:437 +msgid "RADIUS shared secret" +msgstr "Segredo Compartilhado RADIUS" + +#: usr/local/www/vpn_pptp.php:93 usr/local/www/vpn_l2tp.php:84 +#: usr/local/www/vpn_pppoe_edit.php:123 usr/local/www/vpn_l2tp.php:85 +msgid "A valid server address must be specified." +msgstr "Um endereço de servidor válido deve ser especificado." + +#: usr/local/www/vpn_pptp.php:96 usr/local/www/vpn_l2tp.php:87 +#: usr/local/www/vpn_pppoe_edit.php:125 usr/local/www/vpn_l2tp.php:88 +#: usr/local/www/vpn_l2tp.php:91 usr/local/www/vpn_pptp.php:99 +msgid "A valid remote start address must be specified." +msgstr "Um endereço inicial remoto válido deve ser especificado." + +#: usr/local/www/vpn_pptp.php:99 usr/local/www/vpn_l2tp.php:90 +#: usr/local/www/vpn_pppoe_edit.php:127 usr/local/www/vpn_l2tp.php:91 +#: usr/local/www/vpn_l2tp.php:94 usr/local/www/vpn_pptp.php:102 +msgid "A valid RADIUS server address must be specified." +msgstr "Um endereço de servidor RADIUS válido deve ser especificado." + +#: usr/local/www/vpn_pptp.php:108 usr/local/www/vpn_l2tp.php:106 +#: usr/local/www/vpn_pppoe_edit.php:134 usr/local/www/vpn_l2tp.php:107 +#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_pptp.php:111 +msgid "The specified server address lies in the remote subnet." +msgstr "O endereço do servidor especificado está na subrede remota." + +#: usr/local/www/vpn_pptp.php:112 usr/local/www/vpn_l2tp.php:109 +#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_l2tp.php:113 +#: usr/local/www/vpn_pptp.php:115 +msgid "The specified server address is equal to the LAN interface address." +msgstr "O endereço do servidor especificado é igual ao endereço da interface LAN." + +#: usr/local/www/vpn_pptp.php:117 usr/local/www/vpn_pptp.php:120 +msgid "PPTP redirection target address" +msgstr "Endereço alvo de redirecionamento PPTP" + +#: usr/local/www/vpn_pptp.php:122 usr/local/www/vpn_pptp.php:125 +msgid "A valid target address must be specified." +msgstr "Um endereço de alvo válido deve ser especificado." + +#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users_edit.php:135 usr/local/www/vpn_pptp.php:196 +msgid "VPN PPTP" +msgstr "PPPTP da VPN" + +#: usr/local/www/vpn_pptp.php:300 usr/local/www/vpn_pptp_users.php:89 +#: usr/local/www/vpn_l2tp.php:280 usr/local/www/vpn_l2tp_users.php:92 +#: usr/local/www/vpn_pptp.php:302 usr/local/www/vpn_l2tp_users.php:93 +#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_pptp_users.php:90 +#: usr/local/www/vpn_l2tp.php:284 usr/local/www/vpn_pptp.php:305 +msgid "Configuration" +msgstr "Configuração" + +#: usr/local/www/vpn_pptp.php:301 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users.php:90 +#: usr/local/www/system_authservers.php:421 +#: usr/local/www/system_groupmanager.php:240 +#: usr/local/www/system_groupmanager_addprivs.php:168 +#: usr/local/www/system_usermanager.php:440 +#: usr/local/www/system_usermanager_addprivs.php:167 +#: usr/local/www/system_usermanager_settings.php:113 +#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users.php:93 +#: usr/local/www/system_usermanager.php:438 +#: usr/local/www/system_groupmanager_addprivs.php:166 +#: usr/local/www/vpn_pptp.php:303 usr/local/www/vpn_l2tp_users.php:94 +#: usr/local/www/vpn_l2tp.php:282 usr/local/www/vpn_pptp_users.php:91 +#: usr/local/www/system_authservers.php:426 usr/local/www/vpn_l2tp.php:285 +#: usr/local/www/system_authservers.php:433 usr/local/www/vpn_pptp.php:306 +#: usr/local/www/system_usermanager_settings.php:115 +#: usr/local/www/system_groupmanager.php:243 +#: usr/local/www/system_authservers.php:444 +msgid "Users" +msgstr "Usuários" + +#: usr/local/www/vpn_pptp.php:320 usr/local/www/vpn_pptp.php:322 +#: usr/local/www/vpn_pptp.php:325 +msgid "Redirect incoming PPTP connections to" +msgstr "Redirecionar conexões PPTP de entrada para" + +#: usr/local/www/vpn_pptp.php:322 usr/local/www/vpn_pptp.php:324 +#: usr/local/www/vpn_pptp.php:327 +msgid "PPTP redirection" +msgstr "Redirecionamento PPTP" + +#: usr/local/www/vpn_pptp.php:326 usr/local/www/vpn_pptp.php:328 +#: usr/local/www/vpn_pptp.php:331 +msgid "Enter the IP address of a host which will accept incoming PPTP connections" +msgstr "Informe o endereço IP do host que aceitará conexões PPTP de entrada" + +#: usr/local/www/vpn_pptp.php:332 usr/local/www/vpn_pptp.php:334 +#: usr/local/www/vpn_pptp.php:337 +msgid "Enable PPTP server" +msgstr "Habilitar servidor PPTP" + +#: usr/local/www/vpn_pptp.php:335 usr/local/www/vpn_pptp.php:337 +#: usr/local/www/vpn_pptp.php:340 +msgid "No. PPTP users" +msgstr "No. usuários PPTP" + +#: usr/local/www/vpn_pptp.php:349 usr/local/www/vpn_pptp.php:351 +#: usr/local/www/vpn_pptp.php:354 +msgid "Hint: 10 is ten PPTP clients" +msgstr "Dica: 10 são dez clientes PPTP" + +#: usr/local/www/vpn_pptp.php:357 usr/local/www/vpn_pptp.php:359 +#: usr/local/www/vpn_pptp.php:362 +msgid "Enter the IP address the PPTP server should give to clients for use as their \"gateway\"" +msgstr "Informe o endereço IP do servidor PPTP que deverá ser utilizado pelos clientes em seu \"gateway\"" + +#: usr/local/www/vpn_pptp.php:359 usr/local/www/vpn_l2tp.php:327 +#: usr/local/www/vpn_pppoe_edit.php:430 usr/local/www/vpn_pppoe_edit.php:431 +#: usr/local/www/vpn_pptp.php:361 usr/local/www/vpn_l2tp.php:328 +#: usr/local/www/vpn_l2tp.php:331 usr/local/www/vpn_pppoe_edit.php:434 +#: usr/local/www/vpn_pptp.php:364 +msgid "Typically this is set to an unused IP just outside of the client range" +msgstr "Normalmente, isto é definido como um IP não utilizado fora do range do cliente" + +#: usr/local/www/vpn_pptp.php:362 usr/local/www/vpn_l2tp.php:330 +#: usr/local/www/vpn_pppoe_edit.php:433 usr/local/www/vpn_pppoe_edit.php:434 +#: usr/local/www/vpn_pptp.php:364 usr/local/www/vpn_l2tp.php:331 +#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_pppoe_edit.php:437 +#: usr/local/www/vpn_pptp.php:367 +msgid "NOTE: This should NOT be set to any IP address currently in use on this firewall" +msgstr "NOTA: Este não deve ser definido para nenhum endereço IP atualmente em uso neste firewall " + +#: usr/local/www/vpn_pptp.php:365 usr/local/www/vpn_l2tp.php:333 +#: usr/local/www/vpn_pppoe_edit.php:436 usr/local/www/vpn_pppoe_edit.php:437 +#: usr/local/www/vpn_pptp.php:367 usr/local/www/vpn_pppoe_edit.php:440 +#: usr/local/www/vpn_pptp.php:370 +msgid "Remote address range" +msgstr "Intervalo de endereço remoto" + +#: usr/local/www/vpn_pptp.php:370 usr/local/www/vpn_pptp.php:372 +#: usr/local/www/vpn_pptp.php:375 +msgid "Specify the starting address for the client IP subnet" +msgstr "Especifique o endereço de início para a subrede do IP do cliente" + +#: usr/local/www/vpn_pptp.php:373 usr/local/www/vpn_pptp.php:375 +#: usr/local/www/vpn_pptp.php:378 +msgid "PPTP DNS Servers" +msgstr "Servidores DNS PPTP" + +#: usr/local/www/vpn_pptp.php:379 usr/local/www/vpn_pptp.php:381 +#: usr/local/www/vpn_pptp.php:384 +msgid "primary and secondary DNS servers assigned to PPTP clients" +msgstr "servidores DNS primário e secundário atribuídos a clientes PPTP" + +#: usr/local/www/vpn_pptp.php:382 usr/local/www/vpn_l2tp.php:404 +#: usr/local/www/vpn_pptp.php:384 usr/local/www/vpn_l2tp.php:405 +#: usr/local/www/vpn_l2tp.php:408 usr/local/www/vpn_pptp.php:387 +msgid "WINS Server" +msgstr "Servidor WINS" + +#: usr/local/www/vpn_pptp.php:388 usr/local/www/vpn_l2tp.php:410 +#: usr/local/www/vpn_pppoe_edit.php:461 usr/local/www/vpn_pppoe_edit.php:462 +#: usr/local/www/vpn_pptp.php:390 usr/local/www/vpn_l2tp.php:411 +#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pptp.php:393 +msgid "RADIUS" +msgstr "RADIUS" + +#: usr/local/www/vpn_pptp.php:391 usr/local/www/vpn_l2tp.php:413 +#: usr/local/www/vpn_pppoe_edit.php:464 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pptp.php:393 usr/local/www/vpn_l2tp.php:414 +#: usr/local/www/vpn_l2tp.php:417 usr/local/www/vpn_pppoe_edit.php:468 +#: usr/local/www/vpn_pptp.php:396 +msgid "Use a RADIUS server for authentication" +msgstr "Usar um servidor RADIUS para autenticação" + +#: usr/local/www/vpn_pptp.php:392 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pppoe_edit.php:466 usr/local/www/vpn_pptp.php:394 +#: usr/local/www/vpn_pppoe_edit.php:469 usr/local/www/vpn_pptp.php:397 +msgid "When set, all users will be authenticated using the RADIUS server specified below. The local user database will not be used" +msgstr "Quando configurado, todos os usuários serão autenticados usando o servidor RADIUS especificado abaixo. A base de dados de usuários local não será usada" + +#: usr/local/www/vpn_pptp.php:397 usr/local/www/vpn_l2tp.php:417 +#: usr/local/www/vpn_pppoe_edit.php:470 usr/local/www/vpn_pppoe_edit.php:471 +#: usr/local/www/vpn_pptp.php:399 usr/local/www/vpn_l2tp.php:418 +#: usr/local/www/vpn_l2tp.php:421 usr/local/www/vpn_pppoe_edit.php:474 +#: usr/local/www/vpn_pptp.php:402 +msgid "Enable RADIUS accounting" +msgstr "Habilitar RADIUS accounting" + +#: usr/local/www/vpn_pptp.php:398 usr/local/www/vpn_pppoe_edit.php:472 +#: usr/local/www/vpn_pppoe_edit.php:473 usr/local/www/vpn_pptp.php:400 +#: usr/local/www/vpn_pppoe_edit.php:476 usr/local/www/vpn_pptp.php:403 +msgid "Sends accounting packets to the RADIUS server" +msgstr "Envia pacotes de accounting para o servidor RADIUS" + +#: usr/local/www/vpn_pptp.php:401 usr/local/www/vpn_pptp.php:403 +#: usr/local/www/vpn_pptp.php:406 +msgid "Secondary RADIUS server for failover authentication" +msgstr "Servidor RADIUS secundário para autenticação failover" + +#: usr/local/www/vpn_pptp.php:402 usr/local/www/vpn_pptp.php:404 +#: usr/local/www/vpn_pptp.php:407 +msgid "When set, all requests will go to the secondary server when primary fails" +msgstr "Quando configurado, todas as requisições irão para o servidor secundário quando o primário falhar" + +#: usr/local/www/vpn_pptp.php:405 usr/local/www/vpn_pppoe_edit.php:492 +#: usr/local/www/vpn_pppoe_edit.php:493 usr/local/www/vpn_pptp.php:407 +#: usr/local/www/vpn_pppoe_edit.php:496 usr/local/www/vpn_pptp.php:410 +msgid "RADIUS issued IPs" +msgstr "IPs emitidos pelo RADIUS" + +#: usr/local/www/vpn_pptp.php:406 usr/local/www/vpn_pptp.php:408 +#: usr/local/www/vpn_pptp.php:411 +msgid "Issue IP addresses via RADIUS server" +msgstr "Emite endereços IP via servidor RADIUS" + +#: usr/local/www/vpn_pptp.php:411 usr/local/www/vpn_pptp.php:413 +#: usr/local/www/vpn_pptp.php:416 +msgid "RADIUS NAS IP" +msgstr "IP NAS do RADIUS" + +#: usr/local/www/vpn_pptp.php:417 usr/local/www/vpn_pppoe_edit.php:485 +#: usr/local/www/vpn_pppoe_edit.php:486 usr/local/www/vpn_pptp.php:419 +#: usr/local/www/vpn_pppoe_edit.php:489 usr/local/www/vpn_pptp.php:422 +msgid "RADIUS Accounting Update" +msgstr "Atualização de accounting do RADIUS" + +#: usr/local/www/vpn_pptp.php:423 usr/local/www/vpn_pptp.php:425 +#: usr/local/www/vpn_l2tp.php:422 usr/local/www/vpn_l2tp.php:425 +#: usr/local/www/vpn_pptp.php:428 +msgid "RADIUS Server" +msgstr "Servidor RADIUS" + +#: usr/local/www/vpn_pptp.php:429 usr/local/www/vpn_pptp.php:446 +#: usr/local/www/vpn_pptp.php:431 usr/local/www/vpn_pptp.php:448 +#: usr/local/www/vpn_pptp.php:434 usr/local/www/vpn_pptp.php:451 +msgid "Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS server" +msgstr "Informe o endereço IP, porta do RADIUS, e porta de accounting do servidor RADIUS" + +#: usr/local/www/vpn_pptp.php:436 usr/local/www/vpn_pppoe_edit.php:510 +#: usr/local/www/vpn_pppoe_edit.php:527 usr/local/www/vpn_pppoe_edit.php:511 +#: usr/local/www/vpn_pppoe_edit.php:528 usr/local/www/vpn_pptp.php:438 +#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:531 +#: usr/local/www/vpn_pptp.php:441 +msgid "Enter the shared secret that will be used to authenticate to the RADIUS server" +msgstr "Informe o segredo compartilhado que será usado para autenticar no servidor RADIUS" + +#: usr/local/www/vpn_pptp.php:449 usr/local/www/vpn_pptp.php:451 +#: usr/local/www/vpn_pptp.php:454 +msgid "Secondary RADIUS shared secret" +msgstr "Segredo compartilhado secundário do RADIUS" + +#: usr/local/www/vpn_pptp.php:453 usr/local/www/vpn_pptp.php:455 +#: usr/local/www/vpn_pptp.php:458 +msgid "Enter the shared secret that will be used to authenticate to the secondary RADIUS server" +msgstr "Informe o segredo compartilhado que será usado para autenticar no servidor RADIUS secundário" + +#: usr/local/www/vpn_pptp.php:463 usr/local/www/vpn_pptp.php:465 +#: usr/local/www/vpn_pptp.php:468 +msgid "Require 128-bit encryption" +msgstr "Requere criptografia 128-bits" + +#: usr/local/www/vpn_pptp.php:464 usr/local/www/vpn_pptp.php:466 +#: usr/local/www/vpn_pptp.php:469 +msgid "When set, only 128-bit encryption will be accepted. Otherwise 40-bit and 56-bit encryption will be accepted as well. Note that encryption will always be forced on PPTP connections (i.e. unencrypted connections will not be accepted)" +msgstr "Quando configurado, somente criptografias de 128-bits serão aceitas. Do contrário criptografias de 40 e 56 bits serão aceitas também. Note que a criptografia será sempre forçada nas conexões PPTP (i.e. conexões não criptografadas não serão aceitas)" + +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 +msgid "don't forget to " +msgstr "não esqueça de " + +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 +msgid "add a firewall rule" +msgstr "adicionar uma regra de firewall" + +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 +msgid "to permit traffic from PPTP clients" +msgstr "para permitir tráfego de clientes PPTP" + +#: usr/local/www/vpn_pptp_users.php:81 usr/local/www/vpn_l2tp_users.php:84 +#: usr/local/www/vpn_l2tp_users.php:85 usr/local/www/vpn_pptp_users.php:82 +msgid "Warning: RADIUS is enabled. The local user database will not be used." +msgstr "Advertência: RADIUS está habilitado. A base de dados de usuários local não será usada." + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84 +msgid "The PPTP user list has been modified" +msgstr "A lista de usuários PPTP foi modificada;" + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_l2tp_users.php:86 +#: usr/local/www/vpn_l2tp_users.php:87 usr/local/www/vpn_pptp_users.php:84 +msgid "You must apply the changes in order for them to take effect" +msgstr "Você deve aplicar as mudanças para que elas tenham efeito" + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84 +msgid "Warning: this will terminate all current PPTP sessions" +msgstr "Advertência: isso irá finaliar todas as sessões PPTP atuais" + +#: usr/local/www/vpn_pptp_users.php:104 usr/local/www/vpn_pptp_users.php:127 +#: usr/local/www/system_usermanager.php:842 +#: usr/local/www/vpn_l2tp_users.php:120 +#: usr/local/www/system_usermanager.php:840 +#: usr/local/www/system_usermanager.php:845 +#: usr/local/www/vpn_l2tp_users.php:121 usr/local/www/vpn_pptp_users.php:105 +#: usr/local/www/vpn_pptp_users.php:128 +#: usr/local/www/system_usermanager.php:798 +msgid "add user" +msgstr "adicionar usuário" + +#: usr/local/www/vpn_pptp_users.php:117 +#: usr/local/www/system_usermanager.php:824 +#: usr/local/www/system_usermanager.php:822 +#: usr/local/www/system_usermanager.php:825 +#: usr/local/www/vpn_pptp_users.php:118 +#: usr/local/www/system_usermanager.php:848 +msgid "edit user" +msgstr "editar usuário" + +#: usr/local/www/vpn_pptp_users.php:118 usr/local/www/vpn_l2tp_users.php:115 +#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119 +msgid "Do you really want to delete this user?" +msgstr "Você realmente deseja apagar esse usuário?" + +#: usr/local/www/vpn_pptp_users.php:118 +#: usr/local/www/system_usermanager.php:829 +#: usr/local/www/vpn_l2tp_users.php:115 +#: usr/local/www/system_usermanager.php:827 +#: usr/local/www/system_usermanager.php:830 +#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119 +#: usr/local/www/system_usermanager.php:853 +msgid "delete user" +msgstr "apagar usuário" + +#: usr/local/www/vpn_pptp_users_edit.php:85 +#: usr/local/www/services_dyndns_edit.php:94 +#: usr/local/www/system_usermanager.php:199 +#: usr/local/www/vpn_l2tp_users_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:110 +#: usr/local/www/vpn_l2tp_users_edit.php:88 +#: usr/local/www/services_dyndns_edit.php:111 +msgid "The username contains invalid characters." +msgstr "O nome de usuário contém caracteres inválidos." + +#: usr/local/www/vpn_pptp_users_edit.php:88 +msgid "The password cannot start with '!'." +msgstr "A senha não pode iniciar com '!'." + +#: usr/local/www/vpn_pptp_users_edit.php:91 +#: usr/local/www/vpn_l2tp_users_edit.php:90 +#: usr/local/www/vpn_l2tp_users_edit.php:91 +msgid "The password contains invalid characters." +msgstr "A senha contém caracteres inválidos." + +#: usr/local/www/vpn_pptp_users_edit.php:94 +#: usr/local/www/system_usermanager.php:205 +#: usr/local/www/system_usermanager_passwordmg.php:54 +#: usr/local/www/vpn_l2tp_users_edit.php:93 +#: usr/local/www/vpn_l2tp_users_edit.php:94 +msgid "The passwords do not match." +msgstr "As senhas não correspondem." + +#: usr/local/www/vpn_pptp_users_edit.php:97 +#: usr/local/www/vpn_l2tp_users_edit.php:96 +#: usr/local/www/vpn_l2tp_users_edit.php:97 +msgid "The IP address entered is not valid." +msgstr "O endereço IP informado não é válido." + +#: usr/local/www/vpn_pptp_users_edit.php:104 +#: usr/local/www/system_usermanager.php:215 +#: usr/local/www/vpn_l2tp_users_edit.php:103 +#: usr/local/www/vpn_l2tp_users_edit.php:104 +msgid "Another entry with the same username already exists." +msgstr "Outra entrada com o mesmo nome de usuário já existe." + +#: usr/local/www/vpn_pptp_users_edit.php:155 +#: usr/local/www/vpn_l2tp_users_edit.php:163 +#: usr/local/www/vpn_pptp_users_edit.php:156 +#: usr/local/www/vpn_l2tp_users_edit.php:164 +msgid "confirmation" +msgstr "confirmação" + +#: usr/local/www/vpn_pptp_users_edit.php:156 +#: usr/local/www/vpn_pptp_users_edit.php:157 +msgid "If you want to change the users' password, enter it here twice." +msgstr "Se você desejar mudar a senha do usuário, informe-a duas vezes aqui." + +#: usr/local/www/vpn_pptp_users_edit.php:163 +#: usr/local/www/vpn_l2tp_users_edit.php:171 +#: usr/local/www/vpn_pptp_users_edit.php:164 +#: usr/local/www/vpn_l2tp_users_edit.php:172 +msgid "If you want the user to be assigned a specific IP address, enter it here." +msgstr "Se você desejar que o usuário seja designado a um endereço IP específico, informe-o aqui." + +#: usr/local/www/wizard.php:65 usr/local/www/wizard.php:71 +#, php-format +msgid "ERROR: Could not open %s." +msgstr "ERRO: Não pôde abrir %s." + +#: usr/local/www/wizard.php:77 +#, php-format +msgid "ERROR: Could not parse %s/wizards/%s file." +msgstr "ERRO: Não pôde fazer parse do arquivo %s/wizards/%s." + +#: usr/local/www/load_balancer_relay_action_edit.php:65 +msgid "Load Balancer: Relay Action:" +msgstr "Balanceador de Carga: Ação de Relay:" + +#: usr/local/www/load_balancer_relay_action_edit.php:124 +msgid "This action name has already been used. Action names must be unique." +msgstr "Esse nome de ação já está sendo usado. Nomes de ação devem ser únicos." + +#: usr/local/www/load_balancer_relay_action_edit.php:134 +#, php-format +msgid "modified '%s' action:" +msgstr "ação '%s' modificada:" + +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +msgid "DNS" +msgstr "DNS" + +#: usr/local/www/load_balancer_relay_action_edit.php:408 +#: usr/local/www/load_balancer_relay_action_edit.php:407 +#: usr/local/www/load_balancer_relay_action_edit.php:405 +msgid "Edit Load Balancer - Relay Action entry" +msgstr "Editar Balanceador de Carga - Entrada de Ação Relay" + +#: usr/local/www/load_balancer_relay_action_edit.php:508 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:173 +#: usr/local/www/load_balancer_relay_action_edit.php:507 +#: usr/local/www/load_balancer_relay_action_edit.php:505 +#: usr/local/www/services_rfc2136_edit.php:72 +#: usr/local/www/services_rfc2136_edit.php:178 +msgid "Key" +msgstr "Chave" + +#: usr/local/www/load_balancer_relay_action_edit.php:517 +#: usr/local/www/load_balancer_relay_action_edit.php:537 +#: usr/local/www/load_balancer_relay_action_edit.php:516 +#: usr/local/www/load_balancer_relay_action_edit.php:536 +#: usr/local/www/load_balancer_relay_action_edit.php:514 +#: usr/local/www/load_balancer_relay_action_edit.php:534 +msgid "TODO" +msgstr "TODO" + +#: usr/local/www/xmlrpc.php:58 usr/local/www/xmlrpc.php:54 +msgid "Disallowing CARP sync loop." +msgstr "Desabilitando loop de sincronização CARP." + +#: usr/local/www/xmlrpc.php:67 usr/local/www/xmlrpc.php:63 +msgid "Authentication failed" +msgstr "Autenticação falhou" + +#: usr/local/www/xmlrpc.php:78 usr/local/www/xmlrpc.php:74 +msgid "XMLRPC wrapper for eval(). This method must be called with two parameters: a string containing the local system\\'s password followed by the PHP code to evaluate." +msgstr "Wrapper de XMLRPC para eval(). Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local seguida pelo código PHP para avaliar." + +#: usr/local/www/xmlrpc.php:109 usr/local/www/xmlrpc.php:105 +msgid "XMLRPC wrapper for mwexec(). This method must be called with two parameters: a string containing the local system\\'s password followed by an shell command to execute." +msgstr "Wrapper de XMLRPC para mexec(). Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local seguida por um comando shell para ser executado." + +#: usr/local/www/xmlrpc.php:133 usr/local/www/xmlrpc.php:129 +msgid "XMLRPC wrapper for backup_config_section. This method must be called with two parameters: a string containing the local system\\'s password followed by an array containing the keys to be backed up." +msgstr "Wrapper de XMLRPC para backup_config_section. Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local seguida por uma lista com as chaves para serem armazenadas." + +#: usr/local/www/xmlrpc.php:156 usr/local/www/xmlrpc.php:152 +#: usr/local/www/xmlrpc.php:159 usr/local/www/xmlrpc.php:161 +msgid "XMLRPC wrapper for restore_config_section. This method must be called with two parameters: a string containing the local system\\'s password and an array to merge into the system\\'s config. This function returns true upon completion." +msgstr "Wrapper de XMLRPC para restore_config_section. Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local e uma lista para mesclar com a configuração do sistema. Essa função retorna verdadeiro ao finalizar." + +#: usr/local/www/xmlrpc.php:203 usr/local/www/xmlrpc.php:282 +#: usr/local/www/xmlrpc.php:307 usr/local/www/xmlrpc.php:212 +#: usr/local/www/xmlrpc.php:291 usr/local/www/xmlrpc.php:316 +#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:313 +#: usr/local/www/xmlrpc.php:224 usr/local/www/xmlrpc.php:308 +#: usr/local/www/xmlrpc.php:337 usr/local/www/xmlrpc.php:228 +#: usr/local/www/xmlrpc.php:314 usr/local/www/xmlrpc.php:345 +#, php-format +msgid "Merged in config (%s sections) from XMLRPC client." +msgstr "Mescaldo em config (seções %s) do cliente XMLRPC." + +#: usr/local/www/xmlrpc.php:263 usr/local/www/xmlrpc.php:272 +#: usr/local/www/xmlrpc.php:269 usr/local/www/xmlrpc.php:286 +#: usr/local/www/xmlrpc.php:290 +msgid "XMLRPC wrapper for merging package sections. This method must be called with two parameters: a string containing the local system\\'s password and an array to merge into the system\\'s config. This function returns true upon completion." +msgstr "Wrapper de XMLRPC para mesclar seções de pacotes. Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local seguida por uma lista para mesclar com a configuração do sistema. Essa função retorna verdadeiro ao finalizar." + +#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:297 +#: usr/local/www/xmlrpc.php:294 usr/local/www/xmlrpc.php:314 +#: usr/local/www/xmlrpc.php:320 +msgid "XMLRPC wrapper for merge_config_section. This method must be called with two parameters: a string containing the local system\\'s password and an array to merge into the system\\'s config. This function returns true upon completion." +msgstr "Wrapper de XMLRPC para merge_config_section. Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local seguida por uma lista para mesclar com a configuração do sistema. Essa função retorna verdadeiro ao finalizar." + +#: usr/local/www/xmlrpc.php:312 usr/local/www/xmlrpc.php:321 +#: usr/local/www/xmlrpc.php:318 usr/local/www/xmlrpc.php:342 +#: usr/local/www/xmlrpc.php:350 +msgid "Basic XMLRPC wrapper for filter_configure. This method must be called with one paramater: a string containing the local system\\'s password. This function returns true upon completion." +msgstr "Wrapper de XMLRPC para filter_configure. Esse método deve ser chamado com 1 parâmetro: uma string contendo a senha do sistema local. Essa função retorna verdadeiro ao finalizar." + +#: usr/local/www/xmlrpc.php:342 usr/local/www/xmlrpc.php:351 +#: usr/local/www/xmlrpc.php:348 usr/local/www/xmlrpc.php:372 +#: usr/local/www/xmlrpc.php:380 +msgid "Basic XMLRPC wrapper for configuring CARP interfaces." +msgstr "Wrapper básico de XMLRPC para configurar interfaces CARP." + +#: usr/local/www/xmlrpc.php:364 usr/local/www/xmlrpc.php:385 +#: usr/local/www/xmlrpc.php:373 usr/local/www/xmlrpc.php:394 +#: usr/local/www/xmlrpc.php:370 usr/local/www/xmlrpc.php:391 +#: usr/local/www/xmlrpc.php:397 usr/local/www/xmlrpc.php:418 +#: usr/local/www/xmlrpc.php:407 usr/local/www/xmlrpc.php:428 +msgid "Basic XMLRPC wrapper for check_firmware_version. This function will return the output of check_firmware_version upon completion." +msgstr "Wrapper básico de XMLRPC para check_firmware_version. Essa função retornará o resultado de check_firmware_version após finalizar." + +#: usr/local/www/xmlrpc.php:406 usr/local/www/xmlrpc.php:415 +#: usr/local/www/xmlrpc.php:412 usr/local/www/xmlrpc.php:439 +#: usr/local/www/xmlrpc.php:449 +msgid "Basic XMLRPC wrapper for rc.reboot." +msgstr "Wrapper básico de XMLRPC para rc.reboot." + +#: usr/local/www/load_balancer_relay_protocol_edit.php:65 +msgid "Load Balancer: Relay Protocol:" +msgstr "Balanceador de Carga: Protocolo Relay:" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:86 +msgid "This protocol name has already been used. Protocol names must be unique." +msgstr "Esse nome de protocolo já existe. Nomes de protocolos devem ser únicos." + +#: usr/local/www/load_balancer_relay_protocol_edit.php:105 +#, php-format +msgid "modified '%s' load balancing protocol:" +msgstr "protocolo de balanceamento de carga '%s' modificado:" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:107 +msgid "name" +msgstr "nome" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:108 +#: usr/local/www/load_balancer_relay_protocol_edit.php:110 +msgid "type" +msgstr "tipo" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:109 +msgid "description" +msgstr "descrição" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:111 +msgid "action" +msgstr "ação" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:192 +#: usr/local/www/load_balancer_relay_protocol_edit.php:190 +msgid "Edit Load Balancer - Relay Protocol entry" +msgstr "Editar Balanceador de Carga - Entrada de Protocolo Relay" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:227 +#: usr/local/www/load_balancer_relay_protocol_edit.php:225 +msgid "Add / remove available actions" +msgstr "Adicionar / Remover ações disponíveis" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:237 +#: usr/local/www/load_balancer_relay_protocol_edit.php:235 +msgid "Available Actions" +msgstr "Ações Disponíveis" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:252 +#: usr/local/www/system_crlmanager.php:474 +#: usr/local/www/load_balancer_relay_protocol_edit.php:250 +#: usr/local/www/system_crlmanager.php:507 +msgid "Add" +msgstr "Adicionar" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:259 +#: usr/local/www/load_balancer_relay_protocol_edit.php:257 +msgid "Enabled Actions" +msgstr "Habilitar Ações" + +#: usr/local/www/pkg_mgr_settings.php:62 usr/local/www/pkg_mgr_settings.php:94 +#: usr/local/www/pkg_mgr_settings.php:93 +msgid "Package Settings" +msgstr "Configurações de Pacote" + +#: usr/local/www/pkg_mgr_settings.php:92 usr/local/www/pkg_mgr_settings.php:91 +#, php-format +msgid "%s packages" +msgstr "%s pacotes" + +#: usr/local/www/pkg_mgr_settings.php:102 +#: usr/local/www/pkg_mgr_settings.php:105 +#: usr/local/www/pkg_mgr_settings.php:101 +#: usr/local/www/pkg_mgr_settings.php:104 +msgid "Package Repository URL" +msgstr "URL de Repositório de Pacotes" + +#: usr/local/www/pkg_mgr_settings.php:107 +#: usr/local/www/pkg_mgr_settings.php:106 +msgid "Use a different URL server for packages other than" +msgstr "Use um servidor URL diferente para pacotes ao invés de" + +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/pkg_mgr_settings.php:111 +#, php-format +msgid "This is where %s will check for packages when the" +msgstr "Isso é onde %s verificará por pacotes quando o" + +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/pkg_mgr_settings.php:111 +msgid "System: Packages" +msgstr "Sistema: Pacotes" + +#: usr/local/www/services_captiveportal_hostname.php:111 +#: usr/local/www/services_captiveportal_hostname.php:109 +msgid "Allowed IP Addresses" +msgstr "Endereços IP permitidos" + +#: usr/local/www/services_captiveportal_hostname.php:173 +#: usr/local/www/services_captiveportal_hostname.php:171 +msgid "Adding allowed Hostnames will allow a DNS hostname access to/from access through the captive portal without being taken to the portal page. This can be used for a web server serving images for the portal page or a DNS server on another network, for example. By specifying from addresses, it may be used to always allow pass-through access from a client behind the captive portal." +msgstr "Adicionando hostnames permitidos irá permitir acesso de/para através do captive portal sem levá-los a página do portal. Isto pode ser usado para um servidor web servindo imagens para a página do captive portal ou um servidor DNS em outra rede, por exemplo. Especificando endereços de origem, pode ser usado para sempre permitir acesso de um cliente atrás do captive portal." + +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "the Hostname are allowed" +msgstr "o hostname está permitido" + +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +msgid "Edit allowed Hostname" +msgstr "Editar hostname permitido" + +#: usr/local/www/services_captiveportal_hostname_edit.php:102 +#: usr/local/www/services_captiveportal_hostname_edit.php:100 +msgid "Allowed Hostname" +msgstr "Hostname permitido" + +#: usr/local/www/services_captiveportal_hostname_edit.php:107 +#: usr/local/www/services_captiveportal_hostname_edit.php:105 +#, php-format +msgid "A valid Hostname must be specified. [%s]" +msgstr "Um hostname válido deve ser especificado. [%s]" + +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +msgid "to always allow an Hostname through the captive portal (without authentication)" +msgstr "para sempre permitir um hostname através do portal captive (sem autenticação)" + +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +msgid "to allow access from all clients (even non-authenticated ones) behind the portal to this Hostname" +msgstr "para permitir acesso de todos os clientes (mesmo aqueles não autenticados) atrás do portal para esse Hostname" + +#: usr/local/www/services_captiveportal_hostname_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:190 +msgid "Enter a upload limit to be enforced on this Hostname in Kbit/s" +msgstr "Informe um limite de upload para ser utilizado nesse Hostname em Kbit/s" + +#: usr/local/www/services_captiveportal_hostname_edit.php:198 +#: usr/local/www/services_captiveportal_hostname_edit.php:196 +msgid "Enter a download limit to be enforced on this Hostname in Kbit/s" +msgstr "Informe o limite de download para ser utilizado nesse Hostname em Kbit/s" + +#: usr/local/www/services_captiveportal_vouchers.php:67 +#: usr/local/www/services_captiveportal_vouchers.php:64 +msgid "You will need to recreate any existing Voucher Rolls due to the public and private key changes. Click cancel if you do not wish to recreate the vouchers." +msgstr "Você precisará recriar qualquer Lista de Voucher existente devido a mudanças em chaves públicas e privadas. Clique em cancelar se não desejar recriar os vouchers." + +#: usr/local/www/services_captiveportal_vouchers.php:114 +#: usr/local/www/services_captiveportal_vouchers.php:123 +#: usr/local/www/services_captiveportal_vouchers.php:130 +msgid "Voucher invalid" +msgstr "Voucher inválido" + +#: usr/local/www/services_captiveportal_vouchers.php:116 +#: usr/local/www/services_captiveportal_vouchers.php:125 +#: usr/local/www/services_captiveportal_vouchers.php:132 +msgid "Voucher expired" +msgstr "Voucher expirado" + +#: usr/local/www/services_captiveportal_vouchers.php:139 +#: usr/local/www/services_captiveportal_vouchers.php:148 +#: usr/local/www/services_captiveportal_vouchers.php:155 +msgid "Cannot write private key file" +msgstr "Não pode escrever no arquivo de chave privada" + +#: usr/local/www/services_captiveportal_vouchers.php:157 +#: usr/local/www/services_captiveportal_vouchers.php:166 +#: usr/local/www/services_captiveportal_vouchers.php:175 +msgid "Need private RSA key to print vouchers" +msgstr "É necessária uma chave RSA privada para imprimir vouchers" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "charset" +msgstr "charset" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "rollbits" +msgstr "rollbits" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "ticketbits" +msgstr "ticketbits" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "checksumbits" +msgstr "checksumbits" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "publickey" +msgstr "publickey" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "magic" +msgstr "magic" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:565 +#: usr/local/www/services_captiveportal_vouchers.php:572 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:585 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:594 +#: usr/local/www/services_captiveportal_vouchers.php:599 +msgid "Synchronize Voucher Database IP" +msgstr "Sincronizar IP de base de dados de Vouchers" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync port" +msgstr "Porta de sincronização" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync password" +msgstr "Senha de sincronização" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync username" +msgstr "Sincronização de usuário" + +#: usr/local/www/services_captiveportal_vouchers.php:203 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:222 +msgid "Need at least 2 characters to create vouchers." +msgstr "São necessários pelo menos 2 caracteres para criar vouchers." + +#: usr/local/www/services_captiveportal_vouchers.php:205 +#: usr/local/www/services_captiveportal_vouchers.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:224 +msgid "Double quotes aren't allowed." +msgstr "Aspas não são permitidas." + +#: usr/local/www/services_captiveportal_vouchers.php:207 +#: usr/local/www/services_captiveportal_vouchers.php:217 +#: usr/local/www/services_captiveportal_vouchers.php:226 +msgid "aren't allowed." +msgstr "não são permitidas." + +#: usr/local/www/services_captiveportal_vouchers.php:209 +#: usr/local/www/services_captiveportal_vouchers.php:219 +#: usr/local/www/services_captiveportal_vouchers.php:228 +msgid "# of Bits to store Roll Id needs to be between 1..31." +msgstr "# de Bits para armazenar Id da Lista precisa estar entre 1..31." + +#: usr/local/www/services_captiveportal_vouchers.php:211 +#: usr/local/www/services_captiveportal_vouchers.php:221 +#: usr/local/www/services_captiveportal_vouchers.php:230 +msgid "# of Bits to store Ticket Id needs to be between 1..16." +msgstr "# de Bits para armazenar Ticket Id precisa estar entre 1..16." + +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:223 +#: usr/local/www/services_captiveportal_vouchers.php:232 +msgid "# of Bits to store checksum needs to be between 1..31." +msgstr "# de Bits para armazenar checksum precisa estar entre 1..31." + +#: usr/local/www/services_captiveportal_vouchers.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:225 +#: usr/local/www/services_captiveportal_vouchers.php:234 +msgid "This doesn't look like an RSA Public key." +msgstr "Isso não parece uma chave RSA pública." + +#: usr/local/www/services_captiveportal_vouchers.php:217 +#: usr/local/www/services_captiveportal_vouchers.php:227 +#: usr/local/www/services_captiveportal_vouchers.php:236 +msgid "This doesn't look like an RSA Private key." +msgstr "Isso não parece uma chave RSA privada." + +#: usr/local/www/services_captiveportal_vouchers.php:219 +#: usr/local/www/services_captiveportal_vouchers.php:229 +#: usr/local/www/services_captiveportal_vouchers.php:238 +msgid "You cannot sync the voucher database to this host (itself)." +msgstr "Você não pode sincronizar o banco de dados do vouche para este host (em si)." + +#: usr/local/www/services_captiveportal_vouchers.php:421 +#: usr/local/www/services_captiveportal_vouchers.php:428 +#: usr/local/www/services_captiveportal_vouchers.php:441 +#: usr/local/www/services_captiveportal_vouchers.php:450 +#: usr/local/www/services_captiveportal_vouchers.php:455 +msgid "Enable Vouchers" +msgstr "Habilitar Vouchers" + +#: usr/local/www/services_captiveportal_vouchers.php:435 +#: usr/local/www/services_captiveportal_vouchers_edit.php:173 +#: usr/local/www/status_captiveportal_vouchers.php:116 +#: usr/local/www/services_captiveportal_vouchers.php:442 +#: usr/local/www/status_captiveportal_vouchers.php:117 +#: usr/local/www/services_captiveportal_vouchers.php:455 +#: usr/local/www/services_captiveportal_vouchers_edit.php:171 +#: usr/local/www/services_captiveportal_vouchers.php:464 +#: usr/local/www/status_captiveportal_vouchers.php:122 +#: usr/local/www/services_captiveportal_vouchers.php:469 +msgid "Roll" +msgstr "Lista" + +#: usr/local/www/services_captiveportal_vouchers.php:436 +#: usr/local/www/status_captiveportal_voucher_rolls.php:86 +#: usr/local/www/services_captiveportal_vouchers.php:443 +#: usr/local/www/services_captiveportal_vouchers.php:456 +#: usr/local/www/status_captiveportal_voucher_rolls.php:87 +#: usr/local/www/services_captiveportal_vouchers.php:465 +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:470 +msgid "Minutes/Ticket" +msgstr "Minutos/Ticket" + +#: usr/local/www/services_captiveportal_vouchers.php:437 +#: usr/local/www/services_captiveportal_vouchers.php:444 +#: usr/local/www/services_captiveportal_vouchers.php:457 +#: usr/local/www/services_captiveportal_vouchers.php:466 +#: usr/local/www/services_captiveportal_vouchers.php:471 +msgid "of Tickets" +msgstr "de Tickets" + +#: usr/local/www/services_captiveportal_vouchers.php:438 +#: usr/local/www/services_captiveportal_vouchers_edit.php:197 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +#: usr/local/www/services_captiveportal_vouchers.php:445 +#: usr/local/www/services_captiveportal_vouchers.php:458 +#: usr/local/www/services_captiveportal_vouchers_edit.php:195 +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:467 +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +#: usr/local/www/services_captiveportal_vouchers.php:472 +msgid "Comment" +msgstr "Comentar" + +#: usr/local/www/services_captiveportal_vouchers.php:458 +#: usr/local/www/services_captiveportal_vouchers.php:465 +#: usr/local/www/services_captiveportal_vouchers.php:478 +#: usr/local/www/services_captiveportal_vouchers.php:487 +#: usr/local/www/services_captiveportal_vouchers.php:492 +msgid "edit voucher" +msgstr "editar voucher" + +#: usr/local/www/services_captiveportal_vouchers.php:459 +#: usr/local/www/services_captiveportal_vouchers.php:466 +#: usr/local/www/services_captiveportal_vouchers.php:479 +#: usr/local/www/services_captiveportal_vouchers.php:488 +#: usr/local/www/services_captiveportal_vouchers.php:493 +msgid "Do you really want to delete this voucher? This makes all vouchers from this roll invalid" +msgstr "Você realmente deseja apagar esse voucher? Isso torna todos os vouchers dessa lista inválidos" + +#: usr/local/www/services_captiveportal_vouchers.php:459 +#: usr/local/www/services_captiveportal_vouchers.php:466 +#: usr/local/www/services_captiveportal_vouchers.php:479 +#: usr/local/www/services_captiveportal_vouchers.php:488 +#: usr/local/www/services_captiveportal_vouchers.php:493 +msgid "delete vouchers" +msgstr "remover vouchers" + +#: usr/local/www/services_captiveportal_vouchers.php:460 +#: usr/local/www/services_captiveportal_vouchers.php:467 +#: usr/local/www/services_captiveportal_vouchers.php:480 +#: usr/local/www/services_captiveportal_vouchers.php:489 +#: usr/local/www/services_captiveportal_vouchers.php:494 +msgid "generate vouchers for this roll to CSV file" +msgstr "gerar vouchers para essa lista em arquivo CSV" + +#: usr/local/www/services_captiveportal_vouchers.php:470 +#: usr/local/www/services_captiveportal_vouchers.php:477 +#: usr/local/www/services_captiveportal_vouchers.php:490 +#: usr/local/www/services_captiveportal_vouchers.php:499 +#: usr/local/www/services_captiveportal_vouchers.php:504 +msgid "add voucher" +msgstr "adicionar voucher" + +#: usr/local/www/services_captiveportal_vouchers.php:475 +#: usr/local/www/services_captiveportal_vouchers.php:482 +#: usr/local/www/services_captiveportal_vouchers.php:495 +#: usr/local/www/services_captiveportal_vouchers.php:504 +#: usr/local/www/services_captiveportal_vouchers.php:509 +msgid "Create, generate and activate Rolls with Vouchers that allow access through the captive portal for the configured time. Once a voucher is activated, its clock is started and runs uninterrupted until it expires. During that time, the voucher can be re-used from the same or a different computer. If the voucher is used again from another computer, the previous session is stopped." +msgstr "Crie, gere e ative Listas com Vouchers que dão permissão de acesso através do portal captive para o tempo configurado. Uma vez que um voucher for ativado, seu relório é iniciado e executa ininterruptamente até que expire. Durante esse tempo, o voucher pode ser reusado do mesmo computador ou de um diferente. Se o voucher é usado novamente por outro computador, a sessão anterior é interrompida." + +#: usr/local/www/services_captiveportal_vouchers.php:481 +#: usr/local/www/services_captiveportal_vouchers.php:488 +#: usr/local/www/services_captiveportal_vouchers.php:501 +#: usr/local/www/services_captiveportal_vouchers.php:510 +#: usr/local/www/services_captiveportal_vouchers.php:515 +msgid "Enable Voucher support first using the checkbox above and hit Save at the bottom." +msgstr "Habilite suporte a Voucher usando a checkbox acima primeiro e pressione Salvar no rodapé." + +#: usr/local/www/services_captiveportal_vouchers.php:486 +#: usr/local/www/services_captiveportal_vouchers.php:493 +#: usr/local/www/services_captiveportal_vouchers.php:506 +#: usr/local/www/services_captiveportal_vouchers.php:515 +#: usr/local/www/services_captiveportal_vouchers.php:520 +msgid "Voucher public key" +msgstr "Chave pública de Voucher" + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:520 +#: usr/local/www/services_captiveportal_vouchers.php:525 +msgid "Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is used to decrypt vouchers." +msgstr "Cole uma chave RSA pública (64 Bit ou menor) em formato PEM aqui. Essa é a chave usada para descriptografar vouchers." + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:520 +#: usr/local/www/services_captiveportal_vouchers.php:527 +#: usr/local/www/services_captiveportal_vouchers.php:525 +#: usr/local/www/services_captiveportal_vouchers.php:532 +msgid "Generate" +msgstr "Gerar" + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:520 +#: usr/local/www/services_captiveportal_vouchers.php:527 +#: usr/local/www/services_captiveportal_vouchers.php:525 +#: usr/local/www/services_captiveportal_vouchers.php:532 +msgid "new key" +msgstr "nova chave" + +#: usr/local/www/services_captiveportal_vouchers.php:494 +#: usr/local/www/services_captiveportal_vouchers.php:501 +#: usr/local/www/services_captiveportal_vouchers.php:514 +#: usr/local/www/services_captiveportal_vouchers.php:523 +#: usr/local/www/services_captiveportal_vouchers.php:528 +msgid "Voucher private key" +msgstr "Chave privada de Voucher" + +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:527 +#: usr/local/www/services_captiveportal_vouchers.php:532 +msgid "Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is only used to generate encrypted vouchers and doesn't need to be available if the vouchers have been generated offline." +msgstr "Cole uma chave RSA privada (64 Bit ou menor) no formato PEM aqui. Essa chave somente é usada para gerar vouchers criptografados e não precisa estar disponível se os vouchers foram gerados fora do ar." + +#: usr/local/www/services_captiveportal_vouchers.php:502 +#: usr/local/www/services_captiveportal_vouchers.php:509 +#: usr/local/www/services_captiveportal_vouchers.php:522 +#: usr/local/www/services_captiveportal_vouchers.php:531 +#: usr/local/www/services_captiveportal_vouchers.php:536 +msgid "Character set" +msgstr "Conjunto de caracteres" + +#: usr/local/www/services_captiveportal_vouchers.php:506 +#: usr/local/www/services_captiveportal_vouchers.php:513 +#: usr/local/www/services_captiveportal_vouchers.php:526 +#: usr/local/www/services_captiveportal_vouchers.php:535 +#: usr/local/www/services_captiveportal_vouchers.php:540 +msgid "Tickets are generated with the specified character set. It should contain printable characters (numbers, lower case and upper case letters) that are hard to confuse with others. Avoid e.g. 0/O and l/1." +msgstr "Tickets são gerados com um específico conjunto de caracteres. Ele deve conter caracteres passíveis de impressão (números, letras maiúsculas e minúsculas) que são difíceis de serem confundidas com outras. Evite e.g. 0/O e l/1." + +#: usr/local/www/services_captiveportal_vouchers.php:510 +#: usr/local/www/services_captiveportal_vouchers.php:517 +#: usr/local/www/services_captiveportal_vouchers.php:530 +#: usr/local/www/services_captiveportal_vouchers.php:539 +#: usr/local/www/services_captiveportal_vouchers.php:544 +msgid "of Roll Bits" +msgstr "de Bits de Lista" + +#: usr/local/www/services_captiveportal_vouchers.php:514 +#: usr/local/www/services_captiveportal_vouchers.php:521 +#: usr/local/www/services_captiveportal_vouchers.php:534 +#: usr/local/www/services_captiveportal_vouchers.php:543 +#: usr/local/www/services_captiveportal_vouchers.php:548 +msgid "Reserves a range in each voucher to store the Roll # it belongs to. Allowed range: 1..31. Sum of Roll+Ticket+Checksum bits must be one Bit less than the RSA key size." +msgstr "Reserva um intervalo em cada voucher para armazenar o # da Lista que ele pertence. O intervalo permitido: 1..31. Soma dos bits de Lista+Ticket+Checksum deve ser um Bit menor que o tamanho da chave RSA." + +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:525 +#: usr/local/www/services_captiveportal_vouchers.php:538 +#: usr/local/www/services_captiveportal_vouchers.php:547 +#: usr/local/www/services_captiveportal_vouchers.php:552 +msgid "of Ticket Bits" +msgstr "de Ticket Bits" + +#: usr/local/www/services_captiveportal_vouchers.php:522 +#: usr/local/www/services_captiveportal_vouchers.php:529 +#: usr/local/www/services_captiveportal_vouchers.php:542 +#: usr/local/www/services_captiveportal_vouchers.php:551 +#: usr/local/www/services_captiveportal_vouchers.php:556 +msgid "Reserves a range in each voucher to store the Ticket# it belongs to. Allowed range: 1..16. Using 16 bits allows a roll to have up to 65535 vouchers. A bit array, stored in RAM and in the config, is used to mark if a voucher has been used. A bit array for 65535 vouchers requires 8 KB of storage." +msgstr "Reserva um intervalo em cada voucher para armazenar o # de Ticket ao qual pertence. O intervalo permitido: 1..16. Usando 16 bits permite que uma lista tenha até 65535 vouchers. uma cadeia de bits, armazenada na RAM e na configuração, é usado para marcar se um voucher foi usado. A cadeia de bits para 65535 vouchers requer 8 KB de espaço de armazenamento." + +#: usr/local/www/services_captiveportal_vouchers.php:526 +#: usr/local/www/services_captiveportal_vouchers.php:533 +#: usr/local/www/services_captiveportal_vouchers.php:546 +#: usr/local/www/services_captiveportal_vouchers.php:555 +#: usr/local/www/services_captiveportal_vouchers.php:560 +msgid "of Checksum Bits" +msgstr "de Checksum Bits" + +#: usr/local/www/services_captiveportal_vouchers.php:530 +#: usr/local/www/services_captiveportal_vouchers.php:537 +#: usr/local/www/services_captiveportal_vouchers.php:550 +#: usr/local/www/services_captiveportal_vouchers.php:559 +#: usr/local/www/services_captiveportal_vouchers.php:564 +msgid "Reserves a range in each voucher to store a simple checksum over Roll # and Ticket#. Allowed range is 0..31." +msgstr "Reserva um intervalo em cada voucher para armazenar um checksum simples sobre o # da Lista e # de Ticket. O intervalo válido é 0..31." + +#: usr/local/www/services_captiveportal_vouchers.php:534 +#: usr/local/www/services_captiveportal_vouchers.php:541 +#: usr/local/www/services_captiveportal_vouchers.php:554 +#: usr/local/www/services_captiveportal_vouchers.php:563 +#: usr/local/www/services_captiveportal_vouchers.php:568 +msgid "Magic Number" +msgstr "Número mágico" + +#: usr/local/www/services_captiveportal_vouchers.php:538 +#: usr/local/www/services_captiveportal_vouchers.php:545 +#: usr/local/www/services_captiveportal_vouchers.php:558 +#: usr/local/www/services_captiveportal_vouchers.php:567 +#: usr/local/www/services_captiveportal_vouchers.php:572 +msgid "Magic number stored in every voucher. Verified during voucher check. Size depends on how many bits are left by Roll+Ticket+Checksum bits. If all bits are used, no magic number will be used and checked." +msgstr "Número mágico armazenado em cada voucher. Verificado durante a verificação do voucher. O tamanho depende de quantos bits são deixados pelos bits Lista+Ticket+Checksum. Se todos os bits são usados, nenhum número mágico será usado e verificado." + +#: usr/local/www/services_captiveportal_vouchers.php:542 +#: usr/local/www/services_captiveportal_vouchers.php:549 +#: usr/local/www/services_captiveportal_vouchers.php:562 +#: usr/local/www/services_captiveportal_vouchers.php:571 +#: usr/local/www/services_captiveportal_vouchers.php:576 +msgid "Invalid Voucher Message" +msgstr "Mensagem de Voucher Inválido" + +#: usr/local/www/services_captiveportal_vouchers.php:545 +#: usr/local/www/services_captiveportal_vouchers.php:552 +#: usr/local/www/services_captiveportal_vouchers.php:565 +#: usr/local/www/services_captiveportal_vouchers.php:574 +#: usr/local/www/services_captiveportal_vouchers.php:579 +msgid "Error message displayed for invalid vouchers on captive portal error page" +msgstr "Mensagem de erro exibida para vouchers inválidos na página de erro do portal captive" + +#: usr/local/www/services_captiveportal_vouchers.php:549 +#: usr/local/www/services_captiveportal_vouchers.php:556 +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:578 +#: usr/local/www/services_captiveportal_vouchers.php:583 +msgid "Expired Voucher Message" +msgstr "Mensagem de Voucher Expirado" + +#: usr/local/www/services_captiveportal_vouchers.php:552 +#: usr/local/www/services_captiveportal_vouchers.php:559 +#: usr/local/www/services_captiveportal_vouchers.php:572 +#: usr/local/www/services_captiveportal_vouchers.php:581 +#: usr/local/www/services_captiveportal_vouchers.php:586 +msgid "Error message displayed for expired vouchers on captive portal error page" +msgstr "Mensagem de erro exibida para vouchers expirados na página de erro do portal captive" + +#: usr/local/www/services_captiveportal_vouchers.php:562 +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:582 +#: usr/local/www/services_captiveportal_vouchers.php:591 +#: usr/local/www/services_captiveportal_vouchers.php:596 +msgid "Voucher database synchronization" +msgstr "Sincronização de base de dados de Vouchers" + +#: usr/local/www/services_captiveportal_vouchers.php:568 +#: usr/local/www/services_captiveportal_vouchers.php:575 +#: usr/local/www/services_captiveportal_vouchers.php:588 +#: usr/local/www/services_captiveportal_vouchers.php:597 +#: usr/local/www/services_captiveportal_vouchers.php:602 +msgid "IP address of master nodes webConfigurator to synchronize voucher database and used vouchers from." +msgstr "Endereço IP do master nodes webConfigurator para sincronizar base de dados de voucher e vouchers usados." + +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:576 +#: usr/local/www/services_captiveportal_vouchers.php:589 +#: usr/local/www/services_captiveportal_vouchers.php:598 +#: usr/local/www/services_captiveportal_vouchers.php:603 +msgid "NOTE: this should be setup on the slave nodes and not the primary node!" +msgstr "NOTA: Isso deve ser configurado nos nodes secundarios e não nos primarios!" + +#: usr/local/www/services_captiveportal_vouchers.php:573 +#: usr/local/www/services_captiveportal_vouchers.php:580 +#: usr/local/www/services_captiveportal_vouchers.php:593 +#: usr/local/www/services_captiveportal_vouchers.php:602 +#: usr/local/www/services_captiveportal_vouchers.php:607 +msgid "Voucher sync port" +msgstr "Porta de sincronização do Voucher" + +#: usr/local/www/services_captiveportal_vouchers.php:576 +#: usr/local/www/services_captiveportal_vouchers.php:583 +#: usr/local/www/services_captiveportal_vouchers.php:596 +#: usr/local/www/services_captiveportal_vouchers.php:605 +#: usr/local/www/services_captiveportal_vouchers.php:610 +msgid "This is the port of the master voucher nodes webConfigurator. Example: 443" +msgstr "Essa é a porta do master voucher nodes webConfigurator. Exemplo: 443" + +#: usr/local/www/services_captiveportal_vouchers.php:580 +#: usr/local/www/services_captiveportal_vouchers.php:587 +#: usr/local/www/services_captiveportal_vouchers.php:600 +#: usr/local/www/services_captiveportal_vouchers.php:609 +#: usr/local/www/services_captiveportal_vouchers.php:614 +msgid "Voucher sync username" +msgstr "Nome de usuário de sincronização do Voucher" + +#: usr/local/www/services_captiveportal_vouchers.php:583 +#: usr/local/www/services_captiveportal_vouchers.php:590 +#: usr/local/www/services_captiveportal_vouchers.php:603 +#: usr/local/www/services_captiveportal_vouchers.php:612 +#: usr/local/www/services_captiveportal_vouchers.php:617 +msgid "This is the username of the master voucher nodes webConfigurator." +msgstr "Esse é o nome de usuário do master voucher nodes webConfigurator." + +#: usr/local/www/services_captiveportal_vouchers.php:587 +#: usr/local/www/services_captiveportal_vouchers.php:594 +#: usr/local/www/services_captiveportal_vouchers.php:607 +#: usr/local/www/services_captiveportal_vouchers.php:616 +#: usr/local/www/services_captiveportal_vouchers.php:621 +msgid "Voucher sync password" +msgstr "Senha de sincronização do Voucher" + +#: usr/local/www/services_captiveportal_vouchers.php:590 +#: usr/local/www/services_captiveportal_vouchers.php:597 +#: usr/local/www/services_captiveportal_vouchers.php:610 +#: usr/local/www/services_captiveportal_vouchers.php:619 +#: usr/local/www/services_captiveportal_vouchers.php:624 +msgid "This is the password of the master voucher nodes webConfigurator." +msgstr "Esse é a senha do master voucher nodes webConfigurator." + +#: usr/local/www/services_captiveportal_vouchers.php:604 +#: usr/local/www/services_captiveportal_vouchers.php:611 +#: usr/local/www/services_captiveportal_vouchers.php:625 +#: usr/local/www/services_captiveportal_vouchers.php:634 +#: usr/local/www/services_captiveportal_vouchers.php:639 +msgid "Changing any Voucher parameter (apart from managing the list of Rolls) on this page will render existing vouchers useless if they were generated with different settings." +msgstr "Ao mudar qualquer parâmetro de Voucher (além de gerenciar a lista de Listas) nessa página irá tornar inúteis os vouchers existentes se eles foram gerados com configurações diferentes." + +#: usr/local/www/services_captiveportal_vouchers.php:606 +#: usr/local/www/services_captiveportal_vouchers.php:613 +#: usr/local/www/services_captiveportal_vouchers.php:627 +#: usr/local/www/services_captiveportal_vouchers.php:636 +#: usr/local/www/services_captiveportal_vouchers.php:641 +msgid "Specifying the Voucher Database Synchronization options will not record any other value from the other options. They will be retrieved/synced from the master." +msgstr "Especificando a opção Voucher Database Synchronization não grava qualquer outro valor das demais opções. Eles serão recuperados / sincronizados a partir do master." + +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +msgid "Edit Voucher Rolls" +msgstr "Editar Listad de Voucher" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:101 +#: usr/local/www/services_captiveportal_vouchers_edit.php:99 +#, php-format +msgid "Roll number %s already exists." +msgstr "Número de lista %s já existe." + +#: usr/local/www/services_captiveportal_vouchers_edit.php:107 +#: usr/local/www/services_captiveportal_vouchers_edit.php:105 +#, php-format +msgid "Roll number must be numeric and less than %s" +msgstr "Número de lista deve ser numérico e menor que %s" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:110 +#: usr/local/www/services_captiveportal_vouchers_edit.php:108 +#, php-format +msgid "A roll has at least one voucher and less than %s." +msgstr "Uma lista tem no mínimo um voucher e menos que %s." + +#: usr/local/www/services_captiveportal_vouchers_edit.php:113 +#: usr/local/www/services_captiveportal_vouchers_edit.php:111 +msgid "Each voucher must be good for at least 1 minute." +msgstr "Cada voucher deve ser bom por pelo menos 1 minuto." + +#: usr/local/www/services_captiveportal_vouchers_edit.php:134 +#: usr/local/www/services_captiveportal_vouchers_edit.php:132 +#, php-format +msgid "All %1$s vouchers from Roll %2$s marked unused" +msgstr "Todos %1$s vouchers da Lista %2$s são marcados como não usados" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:177 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +msgid "Enter the Roll" +msgstr "Informe a Lista" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:177 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +msgid "found on top of the generated/printed vouchers" +msgstr "encontrado no topo dos vouchers gerados/impressos" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:181 +#: usr/local/www/services_captiveportal_vouchers_edit.php:179 +msgid "Minutes per Ticket" +msgstr "Minutos por Ticket" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:185 +#: usr/local/www/services_captiveportal_vouchers_edit.php:183 +msgid "Defines the time in minutes that a user is allowed access. The clock starts ticking the first time a voucher is used for authentication" +msgstr "Define o tempo em minutos que um usuário tem permissão de acesso. O relógio inicia a contagem a primeira vez que um voucher é usado para autenticação" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:193 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +msgid "Enter the number of vouchers" +msgstr "Informe o número de vouchers" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:193 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +msgid "found on top of the generated/printed vouchers. WARNING: Changing this number for an existing Roll will mark all vouchers as unused again" +msgstr "encontrado no topo de vouchers gerados/impressos. AVISO: Mudando esse número para uma Lista existente irá marcar todos os vouchers como não usados novamente" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:201 +#: usr/local/www/services_captiveportal_vouchers_edit.php:199 +msgid "Can be used to further identify this roll. Ignored by the system" +msgstr "Pode ser usado para identificação adicional dessa lista. Ignorado pelo sistema" + +#: usr/local/www/diag_resetstate.php:54 +msgid "The state table has been flushed successfully." +msgstr "A tabela de estado foi limpa com sucesso." + +#: usr/local/www/diag_resetstate.php:60 +msgid "The source tracking table has been flushed successfully." +msgstr "A tabela de rastreamento de origem foi limpa com sucesso." + +#: usr/local/www/diag_resetstate.php:64 +msgid "Reset state" +msgstr "Reiniviar estado" + +#: usr/local/www/diag_resetstate.php:91 +msgid "Firewall state table" +msgstr "Tabela de conexões do firewall" + +#: usr/local/www/diag_resetstate.php:93 +msgid "Resetting the state tables will remove all entries from the corresponding tables. This means that all open connections will be broken and will have to be re-established. This may be necessary after making substantial changes to the firewall and/or NAT rules, especially if there are IP protocol mappings (e.g. for PPTP or IPv6) with open connections." +msgstr "Reiniciando as conexões da tabela irá remover todas as entradas correspondentes das tabelas. Isto significa que todas as conexões em aberto serão fechadas e serão reestabelecidas. Isto pode ser necessário após mudanças consideráveis ao firewall e/ou regras de NAT, especialmente se há mapeamentos do protocolo IP (e.g. PPTP ou IPv6) com conexões abertas." + +#: usr/local/www/diag_resetstate.php:100 +msgid "The firewall will normally leave the state tables intact when changing rules." +msgstr "O firewall normalmente deixará a tabela de conexões intacta quando as regras mudarem." + +#: usr/local/www/diag_resetstate.php:103 +msgid "NOTE: If you reset the firewall state table, the browser session may appear to be hung after clicking "Reset". Simply refresh the page to continue." +msgstr "NOTA: Se você reiniciar a tabela de estado do firewall, a sessão do browser pode parecer expirada após clicar em "Reiniciar". Simplemente atualize a página para continuar." + +#: usr/local/www/diag_resetstate.php:113 +msgid "Firewall Source Tracking" +msgstr "Rastreamento de origem do Firewall" + +#: usr/local/www/diag_resetstate.php:115 +msgid "Resetting the source tracking table will remove all source/destination associations. This means that the \"sticky\" source/destination association will be cleared for all clients." +msgstr "Reiniciar a tabela de rastreamento de origem irá remover todas as associações de origem/destino. Isto significa que as associações persistentes serão limpas para todos os clientes." + +#: usr/local/www/diag_resetstate.php:119 +msgid "This does not clear active connection states, only source tracking." +msgstr "Isto não limpa estados de conexões ativas, apenas o rastreamento de origem." + +#: usr/local/www/diag_resetstate.php:127 usr/local/www/status_lb_pool.php:218 +msgid "Reset" +msgstr "Reiniciar" + +#: usr/local/www/status_filter_reload.php:44 +msgid "Filter Reload Status" +msgstr "Status do Filtro" + +#: usr/local/www/status_filter_reload.php:88 +#: usr/local/www/status_filter_reload.php:89 +msgid "This page will automatically refresh every 3 seconds until the filter is done reloading" +msgstr "Essa página irá atualizar-se automaticamente a cada 3 segundos até que o filtro tenha recarregado" + +#: usr/local/www/diag_routes.php:45 +msgid "Routing tables" +msgstr "Tabela de roteamento" + +#: usr/local/www/diag_routes.php:58 usr/local/www/diag_routes.php:59 +msgid "Name resolution" +msgstr "Resolução de nomes" + +#: usr/local/www/diag_routes.php:62 usr/local/www/diag_routes.php:63 +msgid "Enable this to attempt to resolve names when displaying the tables." +msgstr "Habilitar isto para tentar resolver nomes quando visualizar a tabela de estados." + +#: usr/local/www/diag_routes.php:69 usr/local/www/diag_routes.php:70 +msgid "Show" +msgstr "Mostrar" + +#: usr/local/www/diag_routes.php:72 +msgid "By enabling name resolution, the query should take a bit longer. You can stop it at any time by clicking the Stop button in your browser" +msgstr "Ao permitir a resolução de nomes, a consulta deve demorar um pouco. Você pode parar a qualquer momento, clicando no botão Pare no seu navegador" + +#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:63 +msgid "ttl" +msgstr "ttl" + +#: usr/local/www/diag_traceroute.php:66 usr/local/www/diag_traceroute.php:67 +#, php-format +msgid "Maximum number of hops must be between 1 and %s" +msgstr "Número máximo de saltos deve estar entre 1 e %s" + +#: usr/local/www/diag_traceroute.php:94 usr/local/www/diag_traceroute.php:112 +#: usr/local/www/diag_traceroute.php:131 +msgid "Maximum number of hops" +msgstr "Número máximo de saltos" + +#: usr/local/www/diag_traceroute.php:104 usr/local/www/diag_traceroute.php:128 +#: usr/local/www/diag_traceroute.php:147 +msgid "Use ICMP" +msgstr "Usar ICMP" + +#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:141 +#: usr/local/www/diag_traceroute.php:162 +msgid "Traceroute may take a while to complete. You may hit the Stop button on your browser at any time to see the progress of failed traceroutes." +msgstr "Traceroute pode demorar um pouco para ser concluído. Você pode pressionar o botão de parada em seu navegador a qualquer hora para ver o andamento das falhas dos traceroutes." + +#: usr/local/www/diag_traceroute.php:120 usr/local/www/diag_traceroute.php:144 +#: usr/local/www/diag_traceroute.php:173 +msgid "Traceroute output:" +msgstr "Saída de traceroute:" + +#: usr/local/www/diag_traceroute.php:137 +msgid "Multi-wan is not supported from this utility currently." +msgstr "Este utilitário não suporta Multi-wan atualmente." + +#: usr/local/www/status_graph.php:85 usr/local/www/fbegin.inc:173 +#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:199 +#: usr/local/www/status_graph.php:90 usr/local/www/status_graph.php:101 +#: usr/local/www/fbegin.inc:190 usr/local/www/status_graph.php:111 +msgid "Traffic Graph" +msgstr "Gráfico de tráfego" + +#: usr/local/www/status_graph.php:197 +msgid "Your browser does not support the type SVG! You need to either use Firefox or download the Adobe SVG plugin" +msgstr "Seu browser não suporta o tipo SVG! Você precisa usar o Firefox ou fazer download do plugin do Adobe SVG" + +#: usr/local/www/status_graph.php:203 usr/local/www/status_graph.php:198 +#: usr/local/www/status_graph.php:209 usr/local/www/status_graph.php:220 +#: usr/local/www/status_graph.php:242 +msgid "Host IP" +msgstr "IP do Host" + +#: usr/local/www/status_graph.php:204 usr/local/www/status_graph.php:199 +#: usr/local/www/status_graph.php:210 usr/local/www/status_graph.php:221 +#: usr/local/www/status_graph.php:243 +msgid "Bandwidth In" +msgstr "Tamanho de banda de entrada" + +#: usr/local/www/status_graph.php:205 usr/local/www/status_graph.php:200 +#: usr/local/www/status_graph.php:211 usr/local/www/status_graph.php:222 +#: usr/local/www/status_graph.php:244 +msgid "Bandwidth Out" +msgstr "Tamanho de banda de saída" + +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +#: usr/local/www/status_graph.php:330 +msgid "the" +msgstr "o" + +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +#: usr/local/www/status_graph.php:330 +msgid "Adobe SVG Viewer" +msgstr "Visualizador Adobe SVG" + +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +#: usr/local/www/status_graph.php:330 +msgid "Firefox 1.5 or later or other browser supporting SVG is required to view the graph" +msgstr "Firefox 1.5 ou versão mais recente ou outro browser que suporte SVG é requerido para visualizar o gráfico" + +#: usr/local/www/carp_status.php:71 usr/local/www/carp_status.php:67 +#, php-format +msgid "%s IPs have been disabled. Please note that disabling does not survive a reboot." +msgstr "%s IPs foram desabilitados. Por favor, estas alterações não estarão disponíveis no próximo boot." + +#: usr/local/www/carp_status.php:73 usr/local/www/carp_status.php:69 +msgid "CARP has been enabled." +msgstr "CARP foi habilitado." + +#: usr/local/www/carp_status.php:127 usr/local/www/carp_status.php:120 +msgid "Enable Carp" +msgstr "Habilitar CARP" + +#: usr/local/www/carp_status.php:130 usr/local/www/carp_status.php:123 +msgid "Disable Carp" +msgstr "Desabilitar CARP" + +#: usr/local/www/carp_status.php:138 usr/local/www/carp_status.php:131 +msgid "CARP Interface" +msgstr "Interface CARP" + +#: usr/local/www/carp_status.php:144 usr/local/www/carp_status.php:137 +msgid "Could not locate any defined CARP interfaces." +msgstr "Não foi possível localizar interfaces CARP definidas." + +#: usr/local/www/carp_status.php:196 +msgid "You can configure CARP settings" +msgstr "Você pode definir as configurações CARP" + +#: usr/local/www/carp_status.php:202 usr/local/www/carp_status.php:195 +msgid "pfSync nodes" +msgstr "Nós pfSync" + +#: usr/local/www/status_interfaces.php:81 +#: usr/local/www/status_interfaces.php:84 +msgid "interface" +msgstr "interface" + +#: usr/local/www/status_interfaces.php:99 +#: usr/local/www/status_interfaces.php:117 +#: usr/local/www/status_interfaces.php:102 +#: usr/local/www/status_interfaces.php:120 +msgid "Release" +msgstr "Lançamento" + +#: usr/local/www/status_interfaces.php:102 +#: usr/local/www/status_interfaces.php:120 +#: usr/local/www/status_interfaces.php:105 +#: usr/local/www/status_interfaces.php:123 +msgid "Renew" +msgstr "Renovar" + +#: usr/local/www/status_interfaces.php:117 +#: usr/local/www/status_interfaces.php:132 +#: usr/local/www/status_interfaces.php:147 +#: usr/local/www/status_interfaces.php:163 +#: usr/local/www/status_interfaces.php:135 +#: usr/local/www/status_interfaces.php:150 +#: usr/local/www/status_interfaces.php:165 +#: usr/local/www/status_interfaces.php:181 +#: usr/local/www/status_interfaces.php:138 +#: usr/local/www/status_interfaces.php:153 +#: usr/local/www/status_interfaces.php:168 +#: usr/local/www/status_interfaces.php:184 +msgid "Connect" +msgstr "Conectar" + +#: usr/local/www/status_interfaces.php:171 +#: usr/local/www/status_interfaces.php:189 +#: usr/local/www/status_interfaces.php:192 +msgid "Uptime " +msgstr "Uptime" + +#: usr/local/www/status_interfaces.php:200 +#: usr/local/www/status_interfaces.php:274 +#: usr/local/www/status_interfaces.php:277 +msgid "Subnet mask IPv4" +msgstr "Máscara de Subrede IPv4" + +#: usr/local/www/status_interfaces.php:207 +#: usr/local/www/status_interfaces.php:281 +#: usr/local/www/status_interfaces.php:284 +msgid "Gateway IPv4" +msgstr "Gateway IPv4" + +#: usr/local/www/status_interfaces.php:224 +#: usr/local/www/status_interfaces.php:305 +#: usr/local/www/status_interfaces.php:308 +msgid "Subnet mask IPv6" +msgstr "Máscara de Subrede IPv6" + +#: usr/local/www/status_interfaces.php:239 +#: usr/local/www/status_interfaces.php:320 +#: usr/local/www/status_interfaces.php:323 +msgid "ISP DNS servers" +msgstr "Servidores DNS ISP" + +#: usr/local/www/status_interfaces.php:251 +#: usr/local/www/status_interfaces.php:332 +#: usr/local/www/status_interfaces.php:335 +msgid "Media" +msgstr "Media" + +#: usr/local/www/status_interfaces.php:272 +#: usr/local/www/status_interfaces.php:369 +#: usr/local/www/status_interfaces.php:372 +msgid "BSSID" +msgstr "BSSID" + +#: usr/local/www/status_interfaces.php:279 +#: usr/local/www/diag_dump_states_sources.php:148 +#: usr/local/www/status_interfaces.php:376 +#: usr/local/www/status_interfaces.php:379 +#: usr/local/www/diag_dump_states_sources.php:147 +#: usr/local/www/diag_system_pftop.php:158 +msgid "Rate" +msgstr "Taxa" + +#: usr/local/www/status_interfaces.php:286 +#: usr/local/www/status_interfaces.php:383 +#: usr/local/www/status_interfaces.php:386 +msgid "RSSI" +msgstr "RSSI" + +#: usr/local/www/status_interfaces.php:293 +#: usr/local/www/status_interfaces.php:390 +#: usr/local/www/status_interfaces.php:393 +msgid "In/out packets" +msgstr "Pacotes de entrada/saída" + +#: usr/local/www/status_interfaces.php:302 +#: usr/local/www/status_interfaces.php:399 +#: usr/local/www/status_interfaces.php:402 +msgid "In/out packets (pass)" +msgstr "Pacotes de entrada/saída (liberados)" + +#: usr/local/www/status_interfaces.php:311 +#: usr/local/www/status_interfaces.php:408 +#: usr/local/www/status_interfaces.php:411 +msgid "In/out packets (block)" +msgstr "Pacotes de entrada/saída (bloqueados)" + +#: usr/local/www/status_interfaces.php:321 +#: usr/local/www/status_interfaces.php:418 +#: usr/local/www/status_interfaces.php:421 +msgid "In/out errors" +msgstr "Erros de entrada/saída " + +#: usr/local/www/status_interfaces.php:329 +#: usr/local/www/status_interfaces.php:426 +#: usr/local/www/status_interfaces.php:429 +msgid "Collisions" +msgstr "Colisões" + +#: usr/local/www/status_interfaces.php:338 +#: usr/local/www/status_interfaces.php:435 +#: usr/local/www/status_interfaces.php:438 +#, php-format +msgid "Bridge (%s)" +msgstr "Ponte (%s)" + +#: usr/local/www/status_interfaces.php:360 +#: usr/local/www/status_interfaces.php:457 +#: usr/local/www/status_interfaces.php:460 +msgid "Interrupts/Second" +msgstr "Interrupções/Segundo" + +#: usr/local/www/status_interfaces.php:363 +#: usr/local/www/status_interfaces.php:460 +#: usr/local/www/status_interfaces.php:463 +msgid "total" +msgstr "total" + +#: usr/local/www/status_interfaces.php:376 +#: usr/local/www/status_interfaces.php:473 +#: usr/local/www/status_interfaces.php:476 +#, php-format +msgid "Using dial-on-demand will bring the connection up again if any packet triggers it. To substantiate this point: disconnecting manually will %snot%s prevent dial-on-demand from making connections to the outside! Don't use dial-on-demand if you want to make sure that the line is kept disconnected." +msgstr "Usar a discagem sob demanda irá levantar a conexão novamente se algum pacote a engatilhar. Para fundamentar esse ponto: desconectar manualmente %snão%s irá prevenir discagem sob demanda de fazer conexões externas! Não use discagem sob demanda se quiser ter certeza de que a linha se manterá desconectada." + +#: usr/local/www/exec.php:91 usr/local/www/exec.php:93 +msgid "Execute command" +msgstr "Executar comando" + +#: usr/local/www/exec.php:153 usr/local/www/exec.php:155 +msgid "Nothing to recall" +msgstr "Nada para lembrar" + +#: usr/local/www/exec.php:222 usr/local/www/exec.php:224 +msgid "Note: this function is unsupported. Use it on your own risk" +msgstr "Nota: Esta função não é suportada. Use-a sob seu próprio risco" + +#: usr/local/www/exec.php:253 usr/local/www/exec.php:255 +msgid "Execute Shell command" +msgstr "Executar comando Shell" + +#: usr/local/www/exec.php:256 usr/local/www/exec.php:309 +#: usr/local/www/exec.php:258 usr/local/www/exec.php:311 +msgid "Command" +msgstr "Comando" + +#: usr/local/www/exec.php:264 usr/local/www/exec.php:315 +#: usr/local/www/exec.php:266 usr/local/www/exec.php:317 +msgid "Execute" +msgstr "Executar" + +#: usr/local/www/exec.php:266 usr/local/www/status_upnp.php:77 +#: usr/local/www/exec.php:268 usr/local/www/status_upnp.php:78 +msgid "Clear" +msgstr "Limpar" + +#: usr/local/www/exec.php:276 usr/local/www/exec.php:278 +msgid "File to download" +msgstr "Arquivo para download" + +#: usr/local/www/exec.php:293 usr/local/www/exec.php:295 +msgid "File to upload" +msgstr "Arquivo para carregar" + +#: usr/local/www/exec.php:306 usr/local/www/exec.php:308 +msgid "PHP Execute" +msgstr "Executar PHP" + +#: usr/local/www/exec.php:317 usr/local/www/exec.php:319 +msgid "Example" +msgstr "Exemplo" + +#: usr/local/www/exec_raw.php:47 +msgid "Nothing specified. Cannot continue." +msgstr "Nada especificado. Não pode continuar." + +#: usr/local/www/fbegin.inc:88 usr/local/www/fbegin.inc:105 +#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:106 +msgid "Packages" +msgstr "Pacotes" + +#: usr/local/www/fbegin.inc:89 usr/local/www/fbegin.inc:106 +#: usr/local/www/fbegin.inc:115 usr/local/www/fbegin.inc:107 +msgid "Setup Wizard" +msgstr "Wizard Config" + +#: usr/local/www/fbegin.inc:90 usr/local/www/diag_logs_routing.php:54 +#: usr/local/www/diag_logs_routing.php:84 usr/local/www/fbegin.inc:107 +#: usr/local/www/diag_logs_resolver.php:98 usr/local/www/diag_logs.php:97 +#: usr/local/www/diag_logs_wireless.php:86 +#: usr/local/www/diag_logs_gateways.php:98 +#: usr/local/www/diag_logs_routing.php:85 usr/local/www/fbegin.inc:116 +#: usr/local/www/diag_logs_resolver.php:99 +#: usr/local/www/diag_logs_wireless.php:87 +#: usr/local/www/diag_logs_gateways.php:99 usr/local/www/fbegin.inc:108 +msgid "Routing" +msgstr "Roteamento" + +#: usr/local/www/fbegin.inc:91 usr/local/www/fbegin.inc:108 +#: usr/local/www/fbegin.inc:117 usr/local/www/fbegin.inc:109 +msgid "Cert Manager" +msgstr "Ger. de certificados" + +#: usr/local/www/fbegin.inc:123 usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/fbegin.inc:140 usr/local/www/fbegin.inc:149 +#: usr/local/www/fbegin.inc:141 etc/inc/service-utils.inc:296 +msgid "DHCPv6 Relay" +msgstr "DHCPv6 Relay" + +#: usr/local/www/fbegin.inc:126 usr/local/www/fbegin.inc:143 +#: usr/local/www/services_dhcpv6.php:581 +#: usr/local/www/services_router_advertisements.php:260 +#: usr/local/www/services_dhcpv6.php:502 usr/local/www/services_dhcpv6.php:512 +#: usr/local/www/services_dhcpv6.php:513 usr/local/www/services_dhcpv6.php:523 +#: usr/local/www/services_router_advertisements.php:255 +#: usr/local/www/diag_backup.php:185 +msgid "DHCPv6 Server" +msgstr "Servidor DHCPv6" + +#: usr/local/www/fbegin.inc:129 usr/local/www/status_services.php:316 +#: usr/local/www/widgets/widgets/services_status.widget.php:121 +#: usr/local/www/fbegin.inc:146 etc/inc/service-utils.inc:299 +#: usr/local/www/fbegin.inc:155 usr/local/www/fbegin.inc:147 +#: etc/inc/service-utils.inc:298 etc/inc/service-utils.inc:315 +#: etc/inc/service-utils.inc:317 +msgid "IGMP proxy" +msgstr "Proxy IGMP" + +#: usr/local/www/fbegin.inc:131 usr/local/www/fbegin.inc:149 +msgid "OLSR" +msgstr "OLSR" + +#: usr/local/www/fbegin.inc:132 usr/local/www/vpn_pppoe_edit.php:234 +#: usr/local/www/fbegin.inc:150 usr/local/www/fbegin.inc:158 +#: usr/local/www/vpn_pppoe_edit.php:237 +msgid "PPPoE Server" +msgstr "Servidor PPPoE" + +#: usr/local/www/fbegin.inc:133 usr/local/www/fbegin.inc:151 +#: usr/local/www/fbegin.inc:159 +msgid "RIP" +msgstr "RIP" + +#: usr/local/www/fbegin.inc:139 usr/local/www/fbegin.inc:175 +#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:193 +#: usr/local/www/fbegin.inc:165 usr/local/www/fbegin.inc:201 +#: usr/local/www/fbegin.inc:156 usr/local/www/fbegin.inc:192 +msgid "UPnP & NAT-PMP" +msgstr "UPnP & NAT-PMP" + +#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:174 +#: usr/local/www/fbegin.inc:182 usr/local/www/fbegin.inc:173 +msgid "CARP (failover)" +msgstr "CARP (failover)" + +#: usr/local/www/fbegin.inc:158 usr/local/www/fbegin.inc:175 +#: usr/local/www/fbegin.inc:183 usr/local/www/fbegin.inc:174 +msgid "Dashboard" +msgstr "Dashboard" + +#: usr/local/www/fbegin.inc:160 usr/local/www/fbegin.inc:177 +#: usr/local/www/fbegin.inc:185 usr/local/www/fbegin.inc:176 +msgid "DHCP Leases" +msgstr "Concessões DHCP" + +#: usr/local/www/fbegin.inc:161 usr/local/www/fbegin.inc:178 +#: usr/local/www/fbegin.inc:186 usr/local/www/fbegin.inc:177 +msgid "DHCPv6 Leases" +msgstr "Concessões DHCPv6" + +#: usr/local/www/fbegin.inc:162 usr/local/www/fbegin.inc:179 +#: usr/local/www/fbegin.inc:187 usr/local/www/fbegin.inc:178 +msgid "Filter Reload" +msgstr "Recarregar Filtro" + +#: usr/local/www/fbegin.inc:168 usr/local/www/fbegin.inc:186 +#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:185 +msgid "Package Logs" +msgstr "Logs de pacotes" + +#: usr/local/www/fbegin.inc:169 usr/local/www/status_queues.php:98 +#: usr/local/www/status_rrd_graph.php:338 +#: usr/local/www/status_rrd_graph_settings.php:57 +#: usr/local/www/status_rrd_graph_settings.php:137 +#: usr/local/www/fbegin.inc:187 +#: usr/local/www/status_rrd_graph_settings.php:138 +#: usr/local/www/status_queues.php:101 usr/local/www/status_rrd_graph.php:386 +#: usr/local/www/fbegin.inc:195 usr/local/www/status_rrd_graph.php:411 +#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:186 +#: usr/local/www/status_queues.php:123 +msgid "Queues" +msgstr "Filas" + +#: usr/local/www/fbegin.inc:170 usr/local/www/status_rrd_graph.php:224 +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_settings.php:113 +#: usr/local/www/status_rrd_graph_settings.php:171 +#: usr/local/www/fbegin.inc:188 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/status_rrd_graph_settings.php:172 +#: usr/local/www/status_rrd_graph.php:244 usr/local/www/fbegin.inc:196 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/status_rrd_graph.php:248 usr/local/www/fbegin.inc:187 +msgid "RRD Graphs" +msgstr "Gráficos RRD" + +#: usr/local/www/fbegin.inc:172 usr/local/www/fbegin.inc:190 +#: usr/local/www/fbegin.inc:198 usr/local/www/fbegin.inc:189 +msgid "System Logs" +msgstr "Logs do sistema" + +#: usr/local/www/fbegin.inc:188 +msgid "ARP Tables" +msgstr "Tabela ARP" + +#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:209 +#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:208 +msgid "Command Prompt" +msgstr "Prompt de Comando" + +#: usr/local/www/fbegin.inc:193 usr/local/www/fbegin.inc:211 +#: usr/local/www/fbegin.inc:219 usr/local/www/fbegin.inc:210 +msgid "Edit File" +msgstr "Editar arquivo" + +#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:212 +#: usr/local/www/fbegin.inc:220 usr/local/www/fbegin.inc:211 +msgid "Factory Defaults" +msgstr "Padrão de fábrica" + +#: usr/local/www/fbegin.inc:195 usr/local/www/fbegin.inc:213 +#: usr/local/www/fbegin.inc:221 usr/local/www/fbegin.inc:212 +msgid "Halt System" +msgstr "Desligar sistema" + +#: usr/local/www/fbegin.inc:196 usr/local/www/fbegin.inc:214 +#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:213 +msgid "Limiter Info" +msgstr "Limitador" + +#: usr/local/www/fbegin.inc:197 usr/local/www/diag_ndp.php:103 +#: usr/local/www/fbegin.inc:215 usr/local/www/fbegin.inc:223 +#: usr/local/www/fbegin.inc:214 +msgid "NDP Table" +msgstr "Tabela NDP" + +#: usr/local/www/fbegin.inc:201 usr/local/www/fbegin.inc:219 +#: usr/local/www/fbegin.inc:227 +msgid "pfInfo" +msgstr "pfInfo" + +#: usr/local/www/fbegin.inc:202 usr/local/www/fbegin.inc:220 +#: usr/local/www/fbegin.inc:228 +msgid "pfTop" +msgstr "pfTop" + +#: usr/local/www/fbegin.inc:203 usr/local/www/fbegin.inc:221 +#: usr/local/www/fbegin.inc:229 +msgid "Reboot" +msgstr "Reiniciar" + +#: usr/local/www/fbegin.inc:205 usr/local/www/fbegin.inc:223 +#: usr/local/www/widgets/widgets/smart_status.widget.php:38 +#: usr/local/www/fbegin.inc:231 +#: usr/local/www/widgets/widgets/smart_status.widget.php:39 +msgid "SMART Status" +msgstr "Status SMART" + +#: usr/local/www/fbegin.inc:207 usr/local/www/fbegin.inc:225 +#: usr/local/www/fbegin.inc:234 usr/local/www/fbegin.inc:226 +msgid "States Summary" +msgstr "Resumo da Tabela de Estados" + +#: usr/local/www/fbegin.inc:208 usr/local/www/fbegin.inc:226 +#: usr/local/www/fbegin.inc:235 usr/local/www/fbegin.inc:227 +msgid "System Activity" +msgstr "Atividades do Sistema" + +#: usr/local/www/fbegin.inc:216 usr/local/www/fbegin.inc:233 +#: usr/local/www/fbegin.inc:242 usr/local/www/fbegin.inc:234 +msgid "Restart HTTPD" +msgstr "Reiniciar HTTPD" + +#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:240 +#: usr/local/www/fbegin.inc:249 usr/local/www/fbegin.inc:241 +msgid "About this Page" +msgstr "Sobre esta página" + +#: usr/local/www/fbegin.inc:224 usr/local/www/fbegin.inc:242 +#: usr/local/www/fbegin.inc:251 usr/local/www/fbegin.inc:243 +msgid "Bug Database" +msgstr "Banco de Dados de Bugs" + +#: usr/local/www/fbegin.inc:225 usr/local/www/fbegin.inc:243 +#: usr/local/www/fbegin.inc:252 usr/local/www/fbegin.inc:244 +msgid "User Forum" +msgstr "Fórum Usuário" + +#: usr/local/www/fbegin.inc:226 usr/local/www/fbegin.inc:244 +#: usr/local/www/fbegin.inc:253 usr/local/www/fbegin.inc:245 +msgid "Documentation" +msgstr "Documentação" + +#: usr/local/www/fbegin.inc:227 usr/local/www/fbegin.inc:245 +#: usr/local/www/fbegin.inc:254 usr/local/www/fbegin.inc:246 +msgid "Developers Wiki" +msgstr "Wiki de desenvolvedores" + +#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:246 +#: usr/local/www/fbegin.inc:255 usr/local/www/fbegin.inc:247 +msgid "Paid Support" +msgstr "Suporte à pagamentos" + +#: usr/local/www/fbegin.inc:229 usr/local/www/fbegin.inc:247 +#: usr/local/www/fbegin.inc:256 usr/local/www/fbegin.inc:248 +msgid "pfSense Book" +msgstr "Livro pfSense" + +#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:248 +#: usr/local/www/fbegin.inc:257 usr/local/www/fbegin.inc:249 +msgid "Search portal" +msgstr "Portal fonte" + +#: usr/local/www/fbegin.inc:231 usr/local/www/fbegin.inc:249 +#: usr/local/www/fbegin.inc:258 usr/local/www/fbegin.inc:250 +msgid "FreeBSD Handbook" +msgstr "FreeBSD Handbook" + +#: usr/local/www/fbegin.inc:376 usr/local/www/fbegin.inc:394 +#: usr/local/www/fbegin.inc:340 usr/local/www/fbegin.inc:332 +msgid "Help" +msgstr "Ajuda" + +#: usr/local/www/fbegin.inc:425 usr/local/www/fbegin.inc:443 +msgid "Status of items on this page." +msgstr "Status dos itens nesta página." + +#: usr/local/www/fbegin.inc:428 usr/local/www/fbegin.inc:446 +msgid "Log entries for items on this page." +msgstr "Entradas de log para itens nesta página." + +#: usr/local/www/fbegin.inc:431 usr/local/www/fbegin.inc:449 +msgid "Help for items on this page." +msgstr "Ajuda para os itens nesta página." + +#: usr/local/www/fbegin.inc:441 usr/local/www/fbegin.inc:459 +#: usr/local/www/fbegin.inc:429 usr/local/www/fbegin.inc:421 +msgid "Packages are currently being reinstalled in the background.

    Do not make changes in the GUI until this is complete." +msgstr "Pacotes estão sendo reinstalados em background atualmente.

    Não faça alterações na interface Web até que isto esteja completo." + +#: usr/local/www/status_queues.php:98 usr/local/www/status_queues.php:101 +#: usr/local/www/status_queues.php:109 usr/local/www/status_queues.php:123 +msgid "Traffic shaper" +msgstr "Traffic shaper" + +#: usr/local/www/status_queues.php:107 usr/local/www/status_queues.php:110 +#: usr/local/www/status_queues.php:111 usr/local/www/status_queues.php:117 +#: usr/local/www/status_queues.php:131 +msgid "Traffic shaping is not configured." +msgstr "Modelagem de tráfego não está configurado." + +#: usr/local/www/status_queues.php:136 usr/local/www/status_queues.php:143 +#: usr/local/www/status_queues.php:144 usr/local/www/status_queues.php:149 +#: usr/local/www/status_queues.php:166 +msgid "Statistics" +msgstr "Estatísticas" + +#: usr/local/www/status_queues.php:158 usr/local/www/status_queues.php:165 +#: usr/local/www/status_queues.php:166 usr/local/www/status_queues.php:223 +#: usr/local/www/status_queues.php:224 usr/local/www/status_queues.php:246 +msgid "Loading" +msgstr "Carregando" + +#: usr/local/www/status_queues.php:173 usr/local/www/status_queues.php:181 +#: usr/local/www/status_queues.php:182 usr/local/www/status_queues.php:164 +#: usr/local/www/status_queues.php:186 +msgid "Queue graphs take 5 seconds to sample data" +msgstr "Gráficos de filas levam 5 segundos para gerar dados de amostra" + +#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182 +#: usr/local/www/status_queues.php:183 usr/local/www/status_queues.php:165 +#: usr/local/www/status_queues.php:187 +msgid "You can configure the Traffic Shaper" +msgstr "Você pode configurar o Traffic Shaper" + +#: usr/local/www/status_rrd_graph.php:211 +#: usr/local/www/status_rrd_graph_settings.php:59 +#: usr/local/www/status_rrd_graph.php:174 +#: usr/local/www/status_rrd_graph.php:179 +msgid "Inverse" +msgstr "Inverso" + +#: usr/local/www/status_rrd_graph.php:212 +#: usr/local/www/status_rrd_graph_settings.php:60 +#: usr/local/www/status_rrd_graph.php:175 +#: usr/local/www/status_rrd_graph.php:180 +msgid "Absolute" +msgstr "Absoluto" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:61 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +msgid "Absolute Timespans" +msgstr "Timespans absolutos" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:62 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +msgid "Current Period" +msgstr "Período atual" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:63 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +msgid "Previous Period" +msgstr "Período anterior" + +#: usr/local/www/status_rrd_graph.php:331 +#: usr/local/www/status_rrd_graph_settings.php:54 +#: usr/local/www/status_rrd_graph_settings.php:130 +#: usr/local/www/status_rrd_graph_settings.php:131 +#: usr/local/www/status_rrd_graph.php:379 +#: usr/local/www/status_rrd_graph.php:404 +msgid "Traffic" +msgstr "Tráfego" + +#: usr/local/www/status_rrd_graph.php:333 +#: usr/local/www/status_rrd_graph_settings.php:55 +#: usr/local/www/status_rrd_graph_settings.php:132 +#: usr/local/www/status_rrd_graph_settings.php:133 +#: usr/local/www/status_rrd_graph.php:381 +#: usr/local/www/status_rrd_graph.php:406 +msgid "Packets" +msgstr "Pacotes" + +#: usr/local/www/status_rrd_graph.php:335 +#: usr/local/www/status_rrd_graph_settings.php:56 +#: usr/local/www/status_rrd_graph_settings.php:134 +#: usr/local/www/status_rrd_graph_settings.php:135 +#: usr/local/www/status_rrd_graph.php:383 +#: usr/local/www/status_rrd_graph.php:408 +msgid "Quality" +msgstr "Qualidade" + +#: usr/local/www/status_rrd_graph.php:340 +#: usr/local/www/status_rrd_graph_settings.php:139 +#: usr/local/www/status_rrd_graph_settings.php:140 +#: usr/local/www/status_rrd_graph.php:388 +#: usr/local/www/status_rrd_graph.php:413 +msgid "QueueDrops" +msgstr "Quedas de fila" + +#: usr/local/www/status_rrd_graph.php:348 +#: usr/local/www/status_rrd_graph_settings.php:147 +#: usr/local/www/status_rrd_graph_settings.php:148 +#: usr/local/www/status_rrd_graph.php:396 +#: usr/local/www/status_rrd_graph.php:421 +msgid "Cellular" +msgstr "Celular" + +#: usr/local/www/status_rrd_graph.php:371 +#: usr/local/www/status_rrd_graph.php:419 +#: usr/local/www/status_rrd_graph.php:451 +msgid "Note: Change of color and/or style may not take effect until the next refresh" +msgstr "Nota: Mudança de cor e/ou estilo podem não ter efeito até a próxima atualização" + +#: usr/local/www/status_rrd_graph.php:375 +#: usr/local/www/status_rrd_graph.php:423 +#: usr/local/www/status_rrd_graph.php:455 +msgid "Graphs:" +msgstr "Gráficos:" + +#: usr/local/www/status_rrd_graph.php:432 +#: usr/local/www/status_rrd_graph.php:480 +#: usr/local/www/status_rrd_graph.php:515 +msgid "Style:" +msgstr "Estilo:" + +#: usr/local/www/status_rrd_graph.php:446 +#: usr/local/www/status_rrd_graph.php:494 +#: usr/local/www/status_rrd_graph.php:529 +msgid "Period:" +msgstr "Período:" + +#: usr/local/www/status_rrd_graph.php:461 +#: usr/local/www/status_rrd_graph.php:513 +#: usr/local/www/status_rrd_graph.php:548 +msgid "Start:" +msgstr "Início:" + +#: usr/local/www/status_rrd_graph.php:463 +#: usr/local/www/status_rrd_graph.php:515 +#: usr/local/www/status_rrd_graph.php:550 +msgid "End:" +msgstr "Fim:" + +#: usr/local/www/status_rrd_graph.php:465 +#: usr/local/www/status_rrd_graph.php:517 +#: usr/local/www/status_rrd_graph.php:552 +msgid "Go" +msgstr "Ir" + +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_img.php:43 +msgid "Image viewer" +msgstr "Visualizador de imagem" + +#: usr/local/www/status_rrd_graph_img.php:216 +#: usr/local/www/status_rrd_graph_img.php:221 +#: usr/local/www/status_rrd_graph_img.php:266 +#, php-format +msgid "rrdcolors.inc.php for theme %s does not exist, using defaults!" +msgstr "rrdcolors.inc.php para tema %s não existe, usando padrões!" + +#: usr/local/www/status_rrd_graph_img.php:1095 +#: usr/local/www/status_rrd_graph_img.php:1088 +#: usr/local/www/status_rrd_graph_img.php:1093 +#: usr/local/www/status_rrd_graph_img.php:1182 +#, php-format +msgid "Sorry we do not have data to graph for %s" +msgstr "Lamento, não temos dados para gerar gráfico para %s" + +#: usr/local/www/status_rrd_graph_img.php:1115 +#: usr/local/www/status_rrd_graph_img.php:1108 +#: usr/local/www/status_rrd_graph_img.php:1113 +#: usr/local/www/status_rrd_graph_img.php:1202 +#, php-format +msgid "Failed to create graph with error code %1$s, the error is: %2$s" +msgstr "Falhou ao criar gráfico com o código de erro %1$s, o erro é: %2$s" + +#: usr/local/www/status_rrd_graph_img.php:1117 +#: usr/local/www/status_rrd_graph_img.php:1124 +#: usr/local/www/status_rrd_graph_img.php:1110 +#: usr/local/www/status_rrd_graph_img.php:1115 +#: usr/local/www/status_rrd_graph_img.php:1122 +#: usr/local/www/status_rrd_graph_img.php:1204 +#: usr/local/www/status_rrd_graph_img.php:1211 +#, php-format +msgid "failed to create graph from %s%s, removing database" +msgstr "falhou ao criar gráfico de %s%s, removendo da base de dados" + +#: usr/local/www/status_rrd_graph_settings.php:174 +#: usr/local/www/status_rrd_graph_settings.php:175 +msgid "Enables the RRD graphing backend." +msgstr "Habilitar o backend de geração de gráfico RRD." + +#: usr/local/www/status_rrd_graph_settings.php:178 +#: usr/local/www/status_rrd_graph_settings.php:179 +msgid "Default category" +msgstr "Categoria padrão" + +#: usr/local/www/status_rrd_graph_settings.php:189 +#: usr/local/www/status_rrd_graph_settings.php:190 +msgid "This selects default category." +msgstr "Isso seleciona a categoria padrão." + +#: usr/local/www/status_rrd_graph_settings.php:193 +#: usr/local/www/status_rrd_graph_settings.php:194 +msgid "Default style" +msgstr "Estilo padrão" + +#: usr/local/www/status_rrd_graph_settings.php:204 +#: usr/local/www/status_rrd_graph_settings.php:205 +msgid "This selects the default style." +msgstr "Isso selecona o estilo padrão." + +#: usr/local/www/status_rrd_graph_settings.php:208 +#: usr/local/www/status_rrd_graph_settings.php:209 +msgid "Default period" +msgstr "Período padrão" + +#: usr/local/www/status_rrd_graph_settings.php:219 +#: usr/local/www/status_rrd_graph_settings.php:220 +msgid "This selects the default period." +msgstr "Isso selecona o período padrão." + +#: usr/local/www/status_rrd_graph_settings.php:231 +#: usr/local/www/status_rrd_graph_settings.php:232 +msgid "Reset RRD Data" +msgstr "Reiniciar dados RRD" + +#: usr/local/www/status_rrd_graph_settings.php:231 +#: usr/local/www/status_rrd_graph_settings.php:232 +msgid "Do you really want to reset the RRD graphs? This will erase all graph data." +msgstr "Você realmente deseja reiniciar os gráficos RRD? Isto irá apagar todos os dados do gráfico." + +#: usr/local/www/status_rrd_graph_settings.php:237 +#: usr/local/www/status_rrd_graph_settings.php:238 +msgid "Graphs will not be allowed to be recreated within a 1 minute interval, please take this into account after changing the style." +msgstr "Gráficos não terão permissão de serem criados dentro de um intervalo de 1 minuto, por favor, leve isso em conta após modificar o estilo." + +#: usr/local/www/status_services.php:60 +#: usr/local/www/widgets/widgets/services_status.widget.php:54 +#: etc/inc/service-utils.inc:387 etc/inc/service-utils.inc:386 +#: etc/inc/service-utils.inc:403 etc/inc/service-utils.inc:405 +msgid "Not available." +msgstr "Não disponível." + +#: usr/local/www/status_services.php:112 usr/local/www/status_services.php:100 +#: usr/local/www/status_services.php:98 etc/inc/service-utils.inc:657 +#: etc/inc/service-utils.inc:660 etc/inc/service-utils.inc:680 +#, php-format +msgid "%s has been restarted." +msgstr "%s foi reiniciado." + +#: usr/local/www/status_services.php:159 usr/local/www/status_services.php:151 +#: usr/local/www/status_services.php:149 etc/inc/service-utils.inc:544 +#: etc/inc/service-utils.inc:547 etc/inc/service-utils.inc:558 +#, php-format +msgid "%s has been started." +msgstr "%s foi iniciado." + +#: usr/local/www/status_services.php:218 usr/local/www/status_services.php:214 +#: usr/local/www/status_services.php:212 etc/inc/service-utils.inc:605 +#: etc/inc/service-utils.inc:608 etc/inc/service-utils.inc:622 +#, php-format +msgid "%s has been stopped." +msgstr "%s foi interrompido." + +#: usr/local/www/status_services.php:269 +#: usr/local/www/widgets/widgets/services_status.widget.php:74 +#: etc/inc/service-utils.inc:247 etc/inc/service-utils.inc:246 +#: etc/inc/service-utils.inc:263 +msgid "NTP clock sync" +msgstr "Sincronização de relógio NTP" + +#: usr/local/www/status_services.php:302 +#: usr/local/www/widgets/widgets/services_status.widget.php:107 +#: etc/inc/service-utils.inc:285 etc/inc/service-utils.inc:284 +#: etc/inc/service-utils.inc:301 etc/inc/service-utils.inc:303 +msgid "DHCP Service" +msgstr "Serviço DHCP" + +#: usr/local/www/status_services.php:309 +#: usr/local/www/widgets/widgets/services_status.widget.php:114 +#: etc/inc/service-utils.inc:292 etc/inc/service-utils.inc:291 +#: etc/inc/service-utils.inc:308 etc/inc/service-utils.inc:310 +msgid "SNMP Service" +msgstr "Serviço SNMP" + +#: usr/local/www/status_services.php:323 +#: usr/local/www/widgets/widgets/services_status.widget.php:128 +#: etc/inc/service-utils.inc:306 etc/inc/service-utils.inc:305 +#: etc/inc/service-utils.inc:322 etc/inc/service-utils.inc:324 +msgid "UPnP Service" +msgstr "Serviço UPnP" + +#: usr/local/www/status_services.php:353 +#: usr/local/www/widgets/widgets/services_status.widget.php:158 +#: etc/inc/service-utils.inc:343 etc/inc/service-utils.inc:342 +#: etc/inc/service-utils.inc:359 etc/inc/service-utils.inc:361 +msgid "Server load balancing daemon" +msgstr "Daemon do balanceamento de carga do servidor" + +#: usr/local/www/status_services.php:380 +#: usr/local/www/widgets/widgets/services_status.widget.php:210 +#: etc/inc/service-utils.inc:411 etc/inc/service-utils.inc:410 +#: etc/inc/service-utils.inc:427 etc/inc/service-utils.inc:430 +#: etc/inc/service-utils.inc:435 +msgid "Running" +msgstr "Executando" + +#: usr/local/www/status_services.php:383 +#: usr/local/www/widgets/widgets/services_status.widget.php:213 +#: etc/inc/service-utils.inc:420 etc/inc/service-utils.inc:419 +#: etc/inc/service-utils.inc:437 etc/inc/service-utils.inc:440 +#: etc/inc/service-utils.inc:445 +msgid "Stopped" +msgstr "Interrompido" + +#: usr/local/www/status_services.php:392 +#: usr/local/www/widgets/widgets/services_status.widget.php:222 +msgid "Restart Service" +msgstr "Reiniciar Serviço" + +#: usr/local/www/status_services.php:398 +#: usr/local/www/widgets/widgets/services_status.widget.php:228 +msgid "Stop Service" +msgstr "Interromper Serviço" + +#: usr/local/www/status_services.php:407 +#: usr/local/www/widgets/widgets/services_status.widget.php:237 +msgid "Start Service" +msgstr "Iniciar Serviço" + +#: usr/local/www/status_services.php:412 +#: usr/local/www/widgets/widgets/services_status.widget.php:242 +#: usr/local/www/status_services.php:271 +#: usr/local/www/widgets/widgets/services_status.widget.php:83 +#: usr/local/www/status_services.php:269 usr/local/www/status_services.php:110 +#: usr/local/www/widgets/widgets/services_status.widget.php:84 +msgid "No services found" +msgstr "Nenhum serviço encontrado" + +#: usr/local/www/status_upnp.php:48 +msgid "Rules have been cleared and the daemon restarted" +msgstr "Regras foram limpas e o daemon reiniciado" + +#: usr/local/www/status_upnp.php:58 +msgid "UPnP & NAT-PMP Status" +msgstr "UPnP & Status NAT-PMP" + +#: usr/local/www/status_upnp.php:67 usr/local/www/status_upnp.php:68 +msgid "UPnP is currently disabled." +msgstr "UPnP está atualmente desabilitado." + +#: usr/local/www/status_upnp.php:77 usr/local/www/status_upnp.php:78 +msgid "all currently connected sessions" +msgstr "todas as sessões atualmente conectadas" + +#: usr/local/www/diag_arp.php:261 usr/local/www/fbegin.inc:206 +#: usr/local/www/fbegin.inc:214 usr/local/www/fbegin.inc:205 +msgid "ARP Table" +msgstr "Tabela ARP" + +#: /usr/local/www/firewall_rules.php:320 +#: usr/local/www/diag_arp.php:271 usr/local/www/diag_ndp.php:113 +msgid "Loading, please wait..." +msgstr "Carregando, por favor aguarde..." + +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:158 +#: usr/local/www/services_dyndns_edit.php:92 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/services_dyndns_edit.php:220 +#: usr/local/www/services_dyndns_edit.php:93 +#: usr/local/www/services_dyndns_edit.php:222 +#: usr/local/www/services_dyndns_edit.php:223 +msgid "Service type" +msgstr "Tipo de Serviço" + +#: usr/local/www/services_dyndns_edit.php:92 +#: usr/local/www/services_dyndns_edit.php:108 +#: usr/local/www/services_dyndns_edit.php:109 +msgid "The MX contains invalid characters." +msgstr "O MX contém caracteres inválidos." + +#: usr/local/www/services_dyndns_edit.php:133 +#: usr/local/www/services_dyndns_edit.php:147 +#: usr/local/www/services_dyndns_edit.php:156 +#: usr/local/www/services_dyndns_edit.php:205 +#: usr/local/www/services_dyndns_edit.php:160 +#: usr/local/www/services_dyndns_edit.php:209 +#: usr/local/www/services_dyndns_edit.php:162 +#: usr/local/www/services_dyndns_edit.php:211 +#: usr/local/www/services_dyndns_edit.php:212 +msgid "Dynamic DNS client" +msgstr "Cliente DNS dinâmico" + +#: usr/local/www/services_dyndns_edit.php:154 +#: usr/local/www/services_rfc2136_edit.php:188 +#: usr/local/www/services_dyndns_edit.php:212 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/services_dyndns_edit.php:218 +#: usr/local/www/services_dyndns_edit.php:219 +#: usr/local/www/services_rfc2136_edit.php:193 +#: usr/local/www/services_rfc2136_edit.php:199 +msgid "yes" +msgstr "sim" + +#: usr/local/www/services_dyndns_edit.php:172 +#: usr/local/www/services_rfc2136_edit.php:134 +#: usr/local/www/services_dyndns_edit.php:230 +#: usr/local/www/services_dyndns_edit.php:234 +#: usr/local/www/services_dyndns_edit.php:236 +#: usr/local/www/services_dyndns_edit.php:237 +#: usr/local/www/services_rfc2136_edit.php:139 +msgid "Interface to monitor" +msgstr "Interface para monitorar" + +#: usr/local/www/services_dyndns_edit.php:191 +#: usr/local/www/services_dyndns_edit.php:274 +#: usr/local/www/services_dyndns_edit.php:278 +#: usr/local/www/services_dyndns_edit.php:280 +#: usr/local/www/services_dyndns_edit.php:281 +msgid "Enter the complete host/domain name. example: myhost.dyndns.org" +msgstr "Informe um nome de host/domínio completo. Exemplo: myhost.dyndns.org" + +#: usr/local/www/services_dyndns_edit.php:192 +#: usr/local/www/services_dyndns_edit.php:275 +#: usr/local/www/services_dyndns_edit.php:279 +#: usr/local/www/services_dyndns_edit.php:281 +#: usr/local/www/services_dyndns_edit.php:282 +msgid "For he.net tunnelbroker, enter your tunnel ID" +msgstr "Para tunnelbroker he.net, digite o ID do túnel" + +#: usr/local/www/services_dyndns_edit.php:197 +#: usr/local/www/services_dyndns_edit.php:280 +#: usr/local/www/services_dyndns_edit.php:284 +#: usr/local/www/services_dyndns_edit.php:286 +#: usr/local/www/services_dyndns_edit.php:287 +msgid "MX" +msgstr "MX" + +#: usr/local/www/services_dyndns_edit.php:201 +#: usr/local/www/services_dyndns_edit.php:284 +#: usr/local/www/services_dyndns_edit.php:288 +#: usr/local/www/services_dyndns_edit.php:290 +#: usr/local/www/services_dyndns_edit.php:291 +msgid "Note: With DynDNS service you can only use a hostname, not an IP address." +msgstr "Nota: Com o serviço DNS Dinâmico você pode somente usar um nome de host, não um endereço IP." + +#: usr/local/www/services_dyndns_edit.php:203 +#: usr/local/www/services_dyndns_edit.php:286 +#: usr/local/www/services_dyndns_edit.php:290 +#: usr/local/www/services_dyndns_edit.php:292 +#: usr/local/www/services_dyndns_edit.php:293 +msgid "Set this option only if you need a special MX record. Not all services support this." +msgstr "Configure essa opção somente se você precisar de um registro MX especial. Nem todos os serviços suportam isso." + +#: usr/local/www/services_dyndns_edit.php:207 +#: usr/local/www/services_dyndns_edit.php:290 +#: usr/local/www/services_dyndns_edit.php:294 +#: usr/local/www/services_dyndns_edit.php:296 +#: usr/local/www/services_dyndns_edit.php:297 +msgid "Wildcards" +msgstr "Wildcards" + +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/services_dyndns_edit.php:293 +#: usr/local/www/services_dyndns_edit.php:297 +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/services_dyndns_edit.php:300 +#: usr/local/www/services_dyndns_edit.php:306 +msgid "Enable " +msgstr "Habilitar" + +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/services_dyndns_edit.php:293 +#: usr/local/www/services_dyndns_edit.php:297 +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:300 +msgid "Wildcard" +msgstr "Wildcard" + +#: usr/local/www/services_dyndns_edit.php:216 +msgid "Username is required for all types except Namecheap and FreeDNS." +msgstr "Nome de usuário é necessário para todos os tipos exceto Namecheap e FreeDNS." + +#: usr/local/www/services_dyndns_edit.php:224 +#: usr/local/www/services_dyndns_edit.php:309 +#: usr/local/www/services_dyndns_edit.php:313 +#: usr/local/www/services_dyndns_edit.php:321 +#: usr/local/www/services_dyndns_edit.php:322 +msgid "FreeDNS (freedns.afraid.org): Enter your \"Authentication Token\" provided by FreeDNS." +msgstr "FreeDNS (freedns.afraid.org): Informe seu \"Authentication Token\" fornecido pelo FreeDNS." + +#: usr/local/www/services_dyndns_edit.php:246 +#: usr/local/www/services_dyndns_edit.php:377 +#: usr/local/www/services_dyndns_edit.php:381 +#: usr/local/www/services_dyndns_edit.php:389 +#: usr/local/www/services_dyndns_edit.php:390 +#, php-format +msgid "" +"You must configure a DNS server in %sSystem:\n" +" General setup%s or allow the DNS server list to be overridden\n" +" by DHCP/PPP on WAN for dynamic DNS updates to work." +msgstr "" +"Você deve configurar um servidor DNS em %sSistema:\n" +" Configurações Gerais%s ou permitir que a lista de servidor DNS seja sobrescrita\n" +" pelo DHCP/PPP na WAN para atualizações DNS dinâmicas funcionarem." + +#: usr/local/www/services_igmpproxy.php:80 +#: usr/local/www/services_igmpproxy_edit.php:46 +msgid "IGMP Proxy" +msgstr "Proxy IGMP" + +#: usr/local/www/services_igmpproxy.php:90 +msgid "The IGMP entry list has been changed" +msgstr "A lista de entrada IGMP foi modificada" + +#: usr/local/www/services_igmpproxy.php:103 +#: usr/local/www/services_igmpproxy.php:146 +msgid "add a new igmpentry" +msgstr "adicionar um nova entrada igmp" + +#: usr/local/www/services_igmpproxy.php:133 +msgid "edit igmpentry" +msgstr "editar entrada igmp" + +#: usr/local/www/services_igmpproxy.php:134 +msgid "Do you really want to delete this igmpentry? All elements that still use it will become invalid (e.g. filter rules)!" +msgstr "Você realmente deseja apagar essa entrada igmp? Todos os elementos que ainda a usam serão invalidados (e.g. regras de filtro)!" + +#: usr/local/www/services_igmpproxy.php:134 +msgid "delete igmpentry" +msgstr "apagar entrada igmp" + +#: usr/local/www/services_igmpproxy.php:161 +msgid "Please add the interface for upstream, the allowed subnets, and the downstream interfaces you would like the proxy to allow. Only one 'upstream' interface can be configured." +msgstr "Por favor adicionar a interface para upstream, as subredes permitidas, e as interfaces downstream que você gostaria que o proxy desse permissão. Somente uma interface 'upstream' pode ser configurada." + +#: usr/local/www/services_igmpproxy_edit.php:79 +msgid "Only one 'upstream' interface can be configured." +msgstr "Somente uma interface 'upstream' pode ser configurada." + +#: usr/local/www/services_igmpproxy_edit.php:158 +#: usr/local/www/services_igmpproxy_edit.php:160 +msgid "IGMP Proxy Edit" +msgstr "Editar Proxy IGMP" + +#: usr/local/www/services_igmpproxy_edit.php:188 +#: usr/local/www/services_igmpproxy_edit.php:190 +msgid "Upstream Interface" +msgstr "Interface Upstream" + +#: usr/local/www/services_igmpproxy_edit.php:189 +#: usr/local/www/services_igmpproxy_edit.php:191 +msgid "Downstream Interface" +msgstr "Interface Downstream" + +#: usr/local/www/services_igmpproxy_edit.php:193 +#: usr/local/www/services_igmpproxy_edit.php:195 +msgid "The upstream network interface is the outgoing interface which is responsible for communicating to available multicast data sources. There can only be one upstream interface." +msgstr "A interface de rede upstream é uma interface de saída que é responsável por comunicar-se com fontes de dado multicast disponíveis. Somente pode existir uma interface upstream." + +#: usr/local/www/services_igmpproxy_edit.php:199 +#: usr/local/www/services_igmpproxy_edit.php:201 +msgid "Downstream" +msgstr "Downstream" + +#: usr/local/www/services_igmpproxy_edit.php:199 +#: usr/local/www/services_igmpproxy_edit.php:201 +msgid "network interfaces are the distribution interfaces to the destination networks, where multicast clients can join groups and receive multicast data. One or more downstream interfaces must be configured." +msgstr "(interfaces de rede) são interfaces de distribuição para redes de destino onde clientes multicast podem unir-se a grupos e receber dados de multicast. Uma ou mais interfaces downstream deve ser configurados." + +#: usr/local/www/services_igmpproxy_edit.php:206 +#: usr/local/www/services_igmpproxy_edit.php:208 +msgid "Threshold" +msgstr "Threshold" + +#: usr/local/www/services_igmpproxy_edit.php:211 +#: usr/local/www/services_igmpproxy_edit.php:213 +msgid "Defines the TTL threshold for the network interface. Packets with a lower TTL than the threshold value will be ignored. This setting is optional, and by default the threshold is 1." +msgstr "Define o threshold TTL para a interface de rede. Pacotes com um TTL mais baixo que os valores de thresholds serão ignorados. Essa configuração é opcional e, por padrão, o threshold é 1." + +#: usr/local/www/services_igmpproxy_edit.php:218 +#: usr/local/www/services_igmpproxy_edit.php:220 +msgid "Network (s)" +msgstr "Rede(s)" + +#: usr/local/www/services_rfc2136.php:55 +msgid "RFC 2136 clients" +msgstr "Clientes RFC 2136" + +#: usr/local/www/services_rfc2136.php:99 +#: usr/local/www/vpn_openvpn_client.php:894 +#: usr/local/www/vpn_openvpn_client.php:899 +#: usr/local/www/vpn_openvpn_client.php:952 +#: usr/local/www/services_rfc2136.php:118 +#: usr/local/www/vpn_openvpn_client.php:971 +#: usr/local/www/services_rfc2136.php:165 +msgid "Do you really want to delete this client?" +msgstr "Você realmente deseja apagar esse cliente?" + +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:153 +#: usr/local/www/services_dyndns_edit.php:348 +#: usr/local/www/services_dyndns_edit.php:352 +#: usr/local/www/services_dyndns_edit.php:360 +#: usr/local/www/services_dyndns_edit.php:361 +#: usr/local/www/services_rfc2136_edit.php:72 +#: usr/local/www/services_rfc2136_edit.php:158 +msgid "TTL" +msgstr "TTL" + +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:159 +#: usr/local/www/services_rfc2136_edit.php:72 +#: usr/local/www/services_rfc2136_edit.php:164 +msgid "Key name" +msgstr "Nome da chave" + +#: usr/local/www/services_rfc2136_edit.php:76 +#: usr/local/www/services_rfc2136_edit.php:77 +msgid "The DNS update host name contains invalid characters." +msgstr "O nome de host da atualização do DNS contém caracteres inválidos." + +#: usr/local/www/services_rfc2136_edit.php:78 +#: usr/local/www/services_rfc2136_edit.php:79 +msgid "The DNS update TTL must be an integer." +msgstr "O TTL da atualização do DNS deve ser um inteiro." + +#: usr/local/www/services_rfc2136_edit.php:80 +#: usr/local/www/services_rfc2136_edit.php:81 +msgid "The DNS update key name contains invalid characters." +msgstr "O nome da chave da atualização do DNS contém caracteres inválidos." + +#: usr/local/www/services_rfc2136_edit.php:100 +#: usr/local/www/services_rfc2136_edit.php:102 +msgid "New/Edited RFC2136 dnsupdate entry was posted." +msgstr "Nova/Editada entrada de atualização do DNS pela RFC 2136 foi publicado." + +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/services_rfc2136_edit.php:123 +#: usr/local/www/services_rfc2136_edit.php:114 +#: usr/local/www/services_rfc2136_edit.php:128 +msgid "RFC 2136 client" +msgstr "Cliente RFC 2136" + +#: usr/local/www/services_rfc2136_edit.php:163 +#: usr/local/www/services_rfc2136_edit.php:168 +msgid "This must match the setting on the DNS server." +msgstr "Isso deve corresponder à configuração no servidor DNS." + +#: usr/local/www/services_rfc2136_edit.php:166 +#: usr/local/www/services_rfc2136_edit.php:171 +msgid "Key type" +msgstr "Tipo de chave" + +#: usr/local/www/services_rfc2136_edit.php:168 +#: usr/local/www/services_captiveportal_zones.php:52 +#: usr/local/www/services_captiveportal_zones.php:53 +#: usr/local/www/services_rfc2136_edit.php:173 +msgid "Zone" +msgstr "Zona" + +#: usr/local/www/services_rfc2136_edit.php:170 +#: usr/local/www/services_rfc2136_edit.php:175 +msgid " User" +msgstr " Usuário" + +#: usr/local/www/services_rfc2136_edit.php:177 +#: usr/local/www/services_rfc2136_edit.php:182 +msgid "Paste an HMAC-MD5 key here." +msgstr "Cole uma chave HMAC-MD5 aqui." + +#: usr/local/www/services_rfc2136_edit.php:189 +#: usr/local/www/services_rfc2136_edit.php:194 +msgid "Use TCP instead of UDP" +msgstr "Use TCP ao invés de UDP" + +#: usr/local/www/services_rfc2136_edit.php:210 +#: usr/local/www/services_rfc2136_edit.php:223 +#, php-format +msgid "You must configure a DNS server in %sSystem: General setup %sor allow the DNS server list to be overridden by DHCP/PPP on WAN for dynamic DNS updates to work." +msgstr "Você deve configurar um servidor DNS em %sSistema: Configurações Gerais%s ou pemitir que a lista de servidores DNS seja sobrescrita pelo DHCP/PPP na WAN para atualizações DNS dinâmicas funcionarem." + +#: usr/local/www/status_captiveportal_test.php:82 +#: usr/local/www/status_captiveportal_test.php:83 +#: usr/local/www/status_captiveportal_expire.php:82 +#: usr/local/www/status_captiveportal_test.php:84 +msgid "Voucher(s)" +msgstr "Voucher(s)" + +#: usr/local/www/status_captiveportal_test.php:86 +#: usr/local/www/status_captiveportal_test.php:87 +#: usr/local/www/status_captiveportal_test.php:88 +msgid "Enter multiple vouchers separated by space or newline. The remaining time, if valid, will be shown for each voucher" +msgstr "Informe múltiplos vouchers separados por espaço ou uma nova linha. O tempo remanescente, se válido, será exibido para cada voucher" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:85 +#: usr/local/www/status_captiveportal_voucher_rolls.php:86 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +msgid "Roll#" +msgstr "Lista#" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:87 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +msgid "# of Tickets" +msgstr "# de Tickets" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +#: usr/local/www/status_captiveportal_voucher_rolls.php:92 +msgid "used" +msgstr "usado" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +#: usr/local/www/status_captiveportal_voucher_rolls.php:93 +msgid "active" +msgstr "ativo" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +#: usr/local/www/status_captiveportal_voucher_rolls.php:92 +#: usr/local/www/status_captiveportal_voucher_rolls.php:94 +msgid "ready" +msgstr "pronto" + +#: usr/local/www/status_captiveportal_vouchers.php:115 +#: usr/local/www/status_captiveportal_vouchers.php:116 +#: usr/local/www/status_captiveportal_vouchers.php:121 +msgid "Voucher" +msgstr "Voucher" + +#: usr/local/www/status_captiveportal_vouchers.php:117 +#: usr/local/www/status_captiveportal_vouchers.php:118 +#: usr/local/www/status_captiveportal_vouchers.php:123 +msgid "Activated at" +msgstr "Ativado em" + +#: usr/local/www/status_captiveportal_vouchers.php:118 +#: usr/local/www/status_captiveportal_vouchers.php:119 +#: usr/local/www/status_captiveportal_vouchers.php:124 +msgid "Expires in" +msgstr "Expira em" + +#: usr/local/www/status_captiveportal_vouchers.php:119 +#: usr/local/www/status_captiveportal_vouchers.php:120 +#: usr/local/www/status_captiveportal_vouchers.php:125 +msgid "Expires at" +msgstr "Expira em" + +#: usr/local/www/status_captiveportal_vouchers.php:127 +#: usr/local/www/status_captiveportal_vouchers.php:128 +#: usr/local/www/status_captiveportal_vouchers.php:133 +msgid "min" +msgstr "min" + +#: usr/local/www/status_dhcp_leases.php:48 +#: usr/local/www/status_dhcp_leases.php:49 +msgid "DHCP leases" +msgstr "Concessões DHCP" + +#: usr/local/www/status_dhcp_leases.php:287 +#: usr/local/www/status_dhcpv6_leases.php:328 +#: usr/local/www/status_dhcpv6_leases.php:372 +#: usr/local/www/status_dhcp_leases.php:308 +#: usr/local/www/status_dhcpv6_leases.php:373 +#: usr/local/www/status_dhcp_leases.php:310 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:311 +msgid "Failover Group" +msgstr "Grupo de Failover" + +#: usr/local/www/status_dhcp_leases.php:288 +#: usr/local/www/status_dhcpv6_leases.php:329 +#: usr/local/www/status_dhcpv6_leases.php:373 +#: usr/local/www/status_dhcp_leases.php:309 +#: usr/local/www/status_dhcpv6_leases.php:374 +#: usr/local/www/status_dhcp_leases.php:311 +#: usr/local/www/status_dhcpv6_leases.php:377 +#: usr/local/www/status_dhcp_leases.php:312 +msgid "My State" +msgstr "Meu estado" + +#: usr/local/www/status_dhcp_leases.php:289 +#: usr/local/www/status_dhcp_leases.php:291 +#: usr/local/www/status_dhcpv6_leases.php:330 +#: usr/local/www/status_dhcpv6_leases.php:332 +#: usr/local/www/status_dhcpv6_leases.php:374 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:310 +#: usr/local/www/status_dhcp_leases.php:312 +#: usr/local/www/status_dhcpv6_leases.php:375 +#: usr/local/www/status_dhcpv6_leases.php:377 +#: usr/local/www/status_dhcp_leases.php:314 +#: usr/local/www/status_dhcpv6_leases.php:378 +#: usr/local/www/status_dhcpv6_leases.php:380 +#: usr/local/www/status_dhcp_leases.php:313 +#: usr/local/www/status_dhcp_leases.php:315 +msgid "Since" +msgstr "Desde" + +#: usr/local/www/status_dhcp_leases.php:290 +#: usr/local/www/status_dhcpv6_leases.php:331 +#: usr/local/www/status_dhcpv6_leases.php:375 +#: usr/local/www/status_dhcp_leases.php:311 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:313 +#: usr/local/www/status_dhcpv6_leases.php:379 +#: usr/local/www/status_dhcp_leases.php:314 +msgid "Peer State" +msgstr "Estado do peer" + +#: usr/local/www/status_dhcp_leases.php:322 +#: usr/local/www/status_dhcpv6_leases.php:364 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:485 +#: usr/local/www/status_dhcp_leases.php:343 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcpv6_leases.php:486 +#: usr/local/www/status_dhcp_leases.php:345 +#: usr/local/www/status_dhcpv6_leases.php:412 +#: usr/local/www/status_dhcpv6_leases.php:489 +#: usr/local/www/status_dhcp_leases.php:346 +msgid "End" +msgstr "Fim" + +#: usr/local/www/status_dhcp_leases.php:323 +#: usr/local/www/status_gateway_groups.php:132 +#: usr/local/www/status_gateways.php:127 usr/local/www/status_gateways.php:131 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:57 +#: usr/local/www/status_dhcpv6_leases.php:365 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcp_leases.php:344 +#: usr/local/www/status_dhcpv6_leases.php:410 +#: usr/local/www/status_gateways.php:128 usr/local/www/status_gateways.php:132 +#: usr/local/www/status_dhcp_leases.php:346 +#: usr/local/www/status_gateway_groups.php:133 +#: usr/local/www/status_dhcpv6_leases.php:413 +#: usr/local/www/status_dhcp_leases.php:347 +msgid "Online" +msgstr "No ar" + +#: usr/local/www/status_dhcp_leases.php:324 +#: usr/local/www/status_dhcpv6_leases.php:366 +#: usr/local/www/status_dhcpv6_leases.php:410 +#: usr/local/www/status_dhcp_leases.php:345 +#: usr/local/www/status_dhcpv6_leases.php:411 +#: usr/local/www/status_dhcp_leases.php:347 +#: usr/local/www/status_dhcpv6_leases.php:414 +#: usr/local/www/status_dhcp_leases.php:348 +msgid "Lease Type" +msgstr "Tipo de concessão" + +#: usr/local/www/status_dhcp_leases.php:368 +#: usr/local/www/status_dhcp_leases.php:389 +#: usr/local/www/status_dhcp_leases.php:393 +#: usr/local/www/status_dhcp_leases.php:394 +msgid "send Wake on LAN packet to this MAC address" +msgstr "enviar pacote Wake on LAN para esse endereço MAC" + +#: usr/local/www/status_dhcp_leases.php:390 +#: usr/local/www/status_dhcpv6_leases.php:417 +#: usr/local/www/status_dhcpv6_leases.php:461 +#: usr/local/www/status_dhcp_leases.php:411 +#: usr/local/www/status_dhcpv6_leases.php:462 +#: usr/local/www/status_dhcp_leases.php:415 +#: usr/local/www/status_dhcpv6_leases.php:465 +#: usr/local/www/status_dhcp_leases.php:416 +msgid "add a static mapping for this MAC address" +msgstr "adicionar um mapeamento estático para esse endereço MAC" + +#: usr/local/www/status_dhcp_leases.php:397 +#: usr/local/www/status_dhcp_leases.php:418 +#: usr/local/www/status_dhcp_leases.php:422 +#: usr/local/www/status_dhcp_leases.php:423 +msgid "add a Wake on LAN mapping for this MAC address" +msgstr "adicionar um mapeamento Wake on LAN para esse endereço MAC" + +#: usr/local/www/status_dhcp_leases.php:402 +#: usr/local/www/status_dhcpv6_leases.php:426 +#: usr/local/www/status_dhcpv6_leases.php:470 +#: usr/local/www/status_dhcp_leases.php:423 +#: usr/local/www/status_dhcpv6_leases.php:471 +#: usr/local/www/status_dhcp_leases.php:427 +#: usr/local/www/status_dhcpv6_leases.php:474 +#: usr/local/www/status_dhcp_leases.php:428 +msgid "delete this DHCP lease" +msgstr "apague essa concessão DHCP" + +#: usr/local/www/status_dhcp_leases.php:415 +#: usr/local/www/status_dhcpv6_leases.php:439 +#: usr/local/www/status_dhcpv6_leases.php:540 +#: usr/local/www/status_dhcp_leases.php:436 +#: usr/local/www/status_dhcpv6_leases.php:541 +#: usr/local/www/status_dhcp_leases.php:440 +#: usr/local/www/status_dhcpv6_leases.php:544 +#: usr/local/www/status_dhcp_leases.php:441 +msgid "Show active and static leases only" +msgstr "Exibir concessões ativas e estáticas somente" + +#: usr/local/www/status_dhcp_leases.php:418 +#: usr/local/www/status_dhcpv6_leases.php:442 +#: usr/local/www/status_dhcpv6_leases.php:543 +#: usr/local/www/status_dhcp_leases.php:439 +#: usr/local/www/status_dhcpv6_leases.php:544 +#: usr/local/www/status_dhcp_leases.php:443 +#: usr/local/www/status_dhcpv6_leases.php:547 +#: usr/local/www/status_dhcp_leases.php:444 +msgid "Show all configured leases" +msgstr "Exibir todas as concessões configuradas" + +#: usr/local/www/status_dhcp_leases.php:422 +#: usr/local/www/status_dhcpv6_leases.php:446 +#: usr/local/www/status_dhcpv6_leases.php:547 +#: usr/local/www/status_dhcp_leases.php:443 +#: usr/local/www/status_dhcpv6_leases.php:548 +#: usr/local/www/status_dhcp_leases.php:447 +#: usr/local/www/status_dhcpv6_leases.php:551 +#: usr/local/www/status_dhcp_leases.php:448 +msgid "No leases file found. Is the DHCP server active" +msgstr "Nenhum arquivo de concessões encontrado. O servidor DHCP está ativo?" + +#: usr/local/www/status_gateway_groups.php:100 +#: usr/local/www/status_gateway_groups.php:101 +#, php-format +msgid "Tier %s" +msgstr "Camada %s" + +#: usr/local/www/status_gateway_groups.php:126 +#: usr/local/www/status_gateways.php:121 usr/local/www/status_gateways.php:122 +#: usr/local/www/status_gateway_groups.php:127 +msgid "Warning, Packetloss" +msgstr "Aviso, perda de pacote" + +#: usr/local/www/status_gateway_groups.php:129 +#: usr/local/www/status_gateways.php:124 usr/local/www/status_gateways.php:125 +#: usr/local/www/status_gateway_groups.php:130 +msgid "Warning, Latency" +msgstr "Advertência, latência" + +#: usr/local/www/status_gateway_groups.php:135 +#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108 +#: usr/local/www/status_gateways.php:134 +#: usr/local/www/widgets/widgets/gateways.widget.php:69 +#: usr/local/www/widgets/widgets/gateways.widget.php:77 +#: usr/local/www/widgets/widgets/gateways.widget.php:98 +#: usr/local/www/status_gateway_groups.php:136 +msgid "Gathering data" +msgstr "Coletando dados" + +#: usr/local/www/status_gateways.php:75 usr/local/www/status_gateways.php:76 +msgid "RTT" +msgstr "RTT" + +#: usr/local/www/status_gateways.php:76 usr/local/www/status_gateways.php:77 +msgid "Loss" +msgstr "Perda" + +#: usr/local/www/status_gateways.php:144 +#, php-format +msgid "Last check %s" +msgstr "Última verificação %s" + +#: usr/local/www/status_graph_cpu.php:41 +msgid "CPU load" +msgstr "Carregamento de CPU" + +#: usr/local/www/status_graph_cpu.php:46 +msgid "Status: CPU Graph" +msgstr "Status: Gráfico de CPU" + +#: usr/local/www/status_graph_cpu.php:53 +msgid "if you can't see the graph, you may have to install the" +msgstr "se você não pode ver o gráfico, você deve ter que instalar o" + +#: usr/local/www/status_graph_cpu.php:53 +msgid "Adobe SVG viewer" +msgstr "Visualizador Adobe SVG" + +#: usr/local/www/status_lb_vs.php:78 usr/local/www/vpn_ipsec_phase2.php:427 +#: usr/local/www/vpn_ipsec_phase2.php:469 +#: usr/local/www/vpn_ipsec_phase2.php:475 +#: usr/local/www/vpn_ipsec_phase2.php:453 +#: usr/local/www/vpn_ipsec_phase2.php:495 +#: usr/local/www/vpn_ipsec_phase2.php:501 +#: usr/local/www/vpn_ipsec_phase2.php:519 +#: usr/local/www/vpn_ipsec_phase2.php:555 +#: usr/local/www/vpn_ipsec_phase2.php:597 +#: usr/local/www/vpn_ipsec_phase2.php:603 +#: usr/local/www/vpn_ipsec_phase2.php:541 +#: usr/local/www/vpn_ipsec_phase2.php:576 +#: usr/local/www/vpn_ipsec_phase2.php:618 +#: usr/local/www/vpn_ipsec_phase2.php:624 +msgid "Address" +msgstr "Endereço" + +#: usr/local/www/status_openvpn.php:145 usr/local/www/status_openvpn.php:146 +#: usr/local/www/status_openvpn.php:147 +msgid "Client connections" +msgstr "Conexões de clientes" + +#: usr/local/www/status_openvpn.php:152 usr/local/www/system_camanager.php:534 +#: usr/local/www/system_certmanager.php:627 +#: usr/local/www/system_certmanager.php:730 +#: usr/local/www/vpn_openvpn_csc.php:673 +#: usr/local/www/system_certmanager.php:743 +#: usr/local/www/system_certmanager.php:896 +#: usr/local/www/system_camanager.php:535 usr/local/www/status_openvpn.php:153 +#: usr/local/www/vpn_openvpn_csc.php:672 +#: usr/local/www/system_camanager.php:559 usr/local/www/status_openvpn.php:214 +#: usr/local/www/system_certmanager.php:768 +#: usr/local/www/system_certmanager.php:938 +#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:224 +#: usr/local/www/system_certmanager.php:769 +#: usr/local/www/system_certmanager.php:942 +msgid "Common Name" +msgstr "Nome Comum" + +#: usr/local/www/status_openvpn.php:153 usr/local/www/status_openvpn.php:154 +#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:155 +#: usr/local/www/status_openvpn.php:225 +msgid "Real Address" +msgstr "Endereço Real" + +#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:155 +#: usr/local/www/status_openvpn.php:156 +msgid "Virtual Address" +msgstr "Endereço Virtual" + +#: usr/local/www/status_openvpn.php:155 usr/local/www/status_openvpn.php:213 +#: usr/local/www/status_openvpn.php:264 usr/local/www/status_openvpn.php:156 +#: usr/local/www/status_openvpn.php:216 usr/local/www/status_openvpn.php:267 +#: usr/local/www/status_openvpn.php:315 usr/local/www/status_openvpn.php:157 +#: usr/local/www/status_openvpn.php:274 usr/local/www/status_openvpn.php:335 +msgid "Connected Since" +msgstr "Conectado desde" + +#: usr/local/www/status_openvpn.php:156 usr/local/www/status_openvpn.php:216 +#: usr/local/www/status_openvpn.php:267 usr/local/www/status_openvpn.php:157 +#: usr/local/www/status_openvpn.php:219 usr/local/www/status_openvpn.php:270 +#: usr/local/www/status_openvpn.php:318 usr/local/www/status_openvpn.php:158 +#: usr/local/www/status_openvpn.php:277 usr/local/www/status_openvpn.php:338 +msgid "Bytes Sent" +msgstr "Bytes Enviados" + +#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:217 +#: usr/local/www/status_openvpn.php:268 usr/local/www/status_openvpn.php:158 +#: usr/local/www/status_openvpn.php:220 usr/local/www/status_openvpn.php:271 +#: usr/local/www/status_openvpn.php:319 usr/local/www/status_openvpn.php:159 +msgid "Bytes Received" +msgstr "Bytes Recebidos" + +#: usr/local/www/status_openvpn.php:184 usr/local/www/status_openvpn.php:185 +#: usr/local/www/status_openvpn.php:186 +msgid "Kill client connection from" +msgstr "Matar conexão de cliente de" + +#: usr/local/www/status_openvpn.php:205 usr/local/www/status_openvpn.php:208 +#: usr/local/www/status_openvpn.php:256 usr/local/www/status_openvpn.php:266 +msgid "Peer to Peer Server Instance Statistics" +msgstr "Estatísticas da instância do servidor Peer to Peer" + +#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265 +#: usr/local/www/status_openvpn.php:217 usr/local/www/status_openvpn.php:268 +#: usr/local/www/status_openvpn.php:316 usr/local/www/status_openvpn.php:275 +#: usr/local/www/status_openvpn.php:336 +msgid "Virtual Addr" +msgstr "Endereço Virtual" + +#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266 +#: usr/local/www/status_openvpn.php:218 usr/local/www/status_openvpn.php:269 +#: usr/local/www/status_openvpn.php:317 usr/local/www/status_openvpn.php:276 +#: usr/local/www/status_openvpn.php:337 +msgid "Remote Host" +msgstr "Host Remoto" + +#: usr/local/www/status_openvpn.php:256 usr/local/www/status_openvpn.php:259 +#: usr/local/www/status_openvpn.php:307 usr/local/www/status_openvpn.php:327 +msgid "Client Instance Statistics" +msgstr "Estatísticas de instâncias de clientes" + +#: usr/local/www/status_openvpn.php:304 usr/local/www/status_openvpn.php:307 +#: usr/local/www/status_openvpn.php:355 +msgid "You need to bind each OpenVPN client to enable its management daemon: use 'Local port' setting in the OpenVPN client screen" +msgstr "Você precisa vincular cada cliente OpenVPN para habilitar seu daemon de gerenciamento: use configuração de 'Porta Local' na tela do cliente OpenVPN" + +#: usr/local/www/status_openvpn.php:308 usr/local/www/status_openvpn.php:311 +#: usr/local/www/status_openvpn.php:359 usr/local/www/status_openvpn.php:389 +msgid "No OpenVPN instance defined" +msgstr "Nenhuma instância do OpenVPN definida" + +#: usr/local/www/system_advanced_admin.php:87 +#: usr/local/www/system_advanced_admin.php:88 +msgid "You must specify a valid webConfigurator port number" +msgstr "Você deve especificar um número de porta do webConfigurator válido" + +#: usr/local/www/system_advanced_admin.php:91 +#: usr/local/www/system_advanced_admin.php:92 +msgid "Max Processes must be a number 1 or greater" +msgstr "Número máximo de processos deve ser maior que 1" + +#: usr/local/www/system_advanced_admin.php:97 +#: usr/local/www/system_advanced_admin.php:98 +#, php-format +msgid "Alternate hostname %s is not a valid hostname." +msgstr "Hostnane alternativo %s não é um hostname valido." + +#: usr/local/www/system_advanced_admin.php:102 +#: usr/local/www/services_dnsmasq.php:92 +#: usr/local/www/system_advanced_admin.php:103 +msgid "You must specify a valid port number" +msgstr "Você deve especificar um número de porta válido" + +#: usr/local/www/system_advanced_admin.php:232 +#: usr/local/www/system_advanced_admin.php:238 +#, php-format +msgid "One moment...redirecting to %s in 20 seconds." +msgstr "Um momento... redirecionando para %s em 20 segundos." + +#: usr/local/www/system_advanced_admin.php:242 +#: usr/local/www/system_advanced_admin.php:263 +msgid "Advanced: Admin Access" +msgstr "Avançado: Acesso de Administrador" + +#: usr/local/www/system_advanced_admin.php:274 +#: usr/local/www/system_advanced_firewall.php:215 +#: usr/local/www/system_advanced_misc.php:206 +#: usr/local/www/system_advanced_network.php:182 +#: usr/local/www/system_advanced_notifications.php:151 +#: usr/local/www/system_advanced_sysctl.php:147 +#: usr/local/www/system_advanced_firewall.php:229 +#: usr/local/www/system_advanced_notifications.php:160 +#: usr/local/www/system_advanced_misc.php:232 +#: usr/local/www/system_advanced_misc.php:251 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_firewall.php:258 +#: usr/local/www/system_advanced_misc.php:302 +#: usr/local/www/system_advanced_admin.php:295 +#: usr/local/www/system_advanced_misc.php:308 +#: usr/local/www/system_advanced_firewall.php:269 +#: usr/local/www/system_advanced_notifications.php:175 +#: usr/local/www/system_advanced_network.php:181 +msgid "Admin Access" +msgstr "Acesso de Administrador" + +#: usr/local/www/system_advanced_admin.php:275 +#: usr/local/www/system_advanced_firewall.php:216 +#: usr/local/www/system_advanced_misc.php:207 +#: usr/local/www/system_advanced_network.php:183 +#: usr/local/www/system_advanced_notifications.php:152 +#: usr/local/www/system_advanced_sysctl.php:148 +#: usr/local/www/system_advanced_firewall.php:230 +#: usr/local/www/system_advanced_notifications.php:161 +#: usr/local/www/system_advanced_misc.php:233 +#: usr/local/www/system_advanced_misc.php:252 +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_firewall.php:259 +#: usr/local/www/system_advanced_misc.php:303 +#: usr/local/www/system_advanced_admin.php:296 +#: usr/local/www/system_advanced_misc.php:309 +#: usr/local/www/system_advanced_firewall.php:270 +#: usr/local/www/system_advanced_notifications.php:176 +#: usr/local/www/system_advanced_network.php:182 +msgid "Firewall / NAT" +msgstr "Firewall / NAT" + +#: usr/local/www/system_advanced_admin.php:276 +#: usr/local/www/system_advanced_firewall.php:217 +#: usr/local/www/system_advanced_misc.php:208 +#: usr/local/www/system_advanced_network.php:184 +#: usr/local/www/system_advanced_notifications.php:153 +#: usr/local/www/system_advanced_sysctl.php:149 +#: usr/local/www/system_advanced_firewall.php:231 +#: usr/local/www/system_advanced_notifications.php:162 +#: usr/local/www/system_advanced_misc.php:234 +#: usr/local/www/system_advanced_misc.php:253 +#: usr/local/www/system_advanced_misc.php:257 +#: usr/local/www/system_advanced_firewall.php:260 +#: usr/local/www/system_advanced_misc.php:304 +#: usr/local/www/system_advanced_admin.php:297 +#: usr/local/www/system_advanced_misc.php:310 +#: usr/local/www/system_advanced_firewall.php:271 +#: usr/local/www/system_advanced_notifications.php:177 +#: usr/local/www/system_advanced_network.php:183 +msgid "Networking" +msgstr "Rede" + +#: usr/local/www/system_advanced_admin.php:277 +#: usr/local/www/system_advanced_firewall.php:218 +#: usr/local/www/system_advanced_misc.php:209 +#: usr/local/www/system_advanced_network.php:185 +#: usr/local/www/system_advanced_notifications.php:154 +#: usr/local/www/system_advanced_sysctl.php:150 +#: usr/local/www/system_advanced_firewall.php:232 +#: usr/local/www/system_advanced_notifications.php:163 +#: usr/local/www/system_advanced_misc.php:235 +#: usr/local/www/system_advanced_misc.php:254 +#: usr/local/www/system_advanced_misc.php:258 +#: usr/local/www/system_advanced_firewall.php:261 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_admin.php:298 +#: usr/local/www/system_advanced_misc.php:311 +#: usr/local/www/system_advanced_firewall.php:272 +#: usr/local/www/system_advanced_notifications.php:178 +#: usr/local/www/system_advanced_network.php:184 +msgid "Miscellaneous" +msgstr "Diversos" + +#: usr/local/www/system_advanced_admin.php:278 +#: usr/local/www/system_advanced_firewall.php:219 +#: usr/local/www/system_advanced_misc.php:210 +#: usr/local/www/system_advanced_network.php:186 +#: usr/local/www/system_advanced_notifications.php:155 +#: usr/local/www/system_advanced_sysctl.php:151 +#: usr/local/www/system_advanced_firewall.php:233 +#: usr/local/www/system_advanced_notifications.php:164 +#: usr/local/www/system_advanced_misc.php:236 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_misc.php:259 +#: usr/local/www/system_advanced_firewall.php:262 +#: usr/local/www/system_advanced_misc.php:306 +#: usr/local/www/system_advanced_admin.php:299 +#: usr/local/www/system_advanced_misc.php:312 +#: usr/local/www/system_advanced_firewall.php:273 +#: usr/local/www/system_advanced_notifications.php:179 +#: usr/local/www/system_advanced_network.php:185 +msgid "System Tunables" +msgstr "Ajustes do sistema" + +#: usr/local/www/system_advanced_admin.php:279 +#: usr/local/www/system_advanced_firewall.php:220 +#: usr/local/www/system_advanced_misc.php:211 +#: usr/local/www/system_advanced_network.php:187 +#: usr/local/www/system_advanced_notifications.php:156 +#: usr/local/www/system_advanced_sysctl.php:152 +#: usr/local/www/system_advanced_firewall.php:234 +#: usr/local/www/system_advanced_notifications.php:165 +#: usr/local/www/system_advanced_misc.php:237 +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_misc.php:260 +#: usr/local/www/system_advanced_firewall.php:263 +#: usr/local/www/system_advanced_misc.php:307 +#: usr/local/www/system_advanced_admin.php:300 +#: usr/local/www/system_advanced_misc.php:313 +#: usr/local/www/system_advanced_firewall.php:274 +#: usr/local/www/system_advanced_notifications.php:180 +#: usr/local/www/system_advanced_network.php:186 +msgid "Notifications" +msgstr "Notificações" + +#: usr/local/www/system_advanced_admin.php:297 +#: usr/local/www/system_advanced_admin.php:318 +msgid "webConfigurator" +msgstr "webConfigurator" + +#: usr/local/www/system_advanced_admin.php:317 +#: usr/local/www/system_advanced_admin.php:338 +msgid "No Certificates have been defined. You must" +msgstr "Nenhum Certificado foi definido. Você deve" + +#: usr/local/www/system_advanced_admin.php:318 +#: usr/local/www/system_advanced_admin.php:339 +msgid "Create or Import" +msgstr "Criar ou Importar" + +#: usr/local/www/system_advanced_admin.php:319 +#: usr/local/www/system_advanced_admin.php:340 +msgid "a Certificate before SSL can be enabled." +msgstr "um Certificado antes de habilitar o SSL." + +#: usr/local/www/system_advanced_admin.php:324 +#: usr/local/www/services_captiveportal.php:872 +#: usr/local/www/services_captiveportal.php:874 +#: usr/local/www/services_captiveportal.php:890 +#: usr/local/www/system_advanced_admin.php:345 +msgid "SSL Certificate" +msgstr "Certificado SSL" + +#: usr/local/www/system_advanced_admin.php:339 +#: usr/local/www/system_advanced_admin.php:360 +msgid "TCP port" +msgstr "Porta TCP" + +#: usr/local/www/system_advanced_admin.php:344 +#: usr/local/www/system_advanced_admin.php:365 +msgid "Enter a custom port number for the webConfigurator above if you want to override the default (80 for HTTP, 443 for HTTPS). Changes will take effect immediately after save." +msgstr "Informe um número de porta personalizado para o webConfigurator acima se desejar sobrescrever o padrão (80 para HTTP, 433 para HTTPS). Mudança terão efeito imediatamente após salvar." + +#: usr/local/www/system_advanced_admin.php:351 +#: usr/local/www/system_advanced_admin.php:372 +msgid "Max Processes" +msgstr "Número máximo de processos" + +#: usr/local/www/system_advanced_admin.php:356 +#: usr/local/www/system_advanced_admin.php:377 +msgid "Enter the number of webConfigurator processes you want to run. This defaults to 2. Increasing this will allow more users/browsers to access the GUI concurrently." +msgstr "Número máximo de processos para o WebConfigurator. O padrão é 2. Aumentando o número, você aumentara o número de usuários simultâneos que poderão logar no WebConfigurator." + +#: usr/local/www/system_advanced_admin.php:363 +#: usr/local/www/system_advanced_admin.php:384 +msgid "WebGUI redirect" +msgstr "Redirecionamento WebGUI" + +#: usr/local/www/system_advanced_admin.php:366 +#: usr/local/www/system_advanced_admin.php:387 +msgid "Disable webConfigurator redirect rule" +msgstr "Desabiliar regra de redirecionamento do webConfigurator" + +#: usr/local/www/system_advanced_admin.php:368 +#: usr/local/www/system_advanced_admin.php:389 +msgid "When this is unchecked, access to the webConfigurator is always permitted even on port 80, regardless of the listening port configured. Check this box to disable this automatically added redirect rule. " +msgstr "Quando isso estiver desmarcado, o acesso ao webConfigurator será sempre permitido mesmo na porta 80, independentemente de qual porta de leitura que estiver configurada. Marque essa caixa para desabilitar essa regra de redirecionamento automaticamente adicionada." + +#: usr/local/www/system_advanced_admin.php:375 +#: usr/local/www/system_advanced_admin.php:396 +msgid "WebGUI Login Autocomplete" +msgstr "Autocompletar Login do WebGUI" + +#: usr/local/www/system_advanced_admin.php:378 +#: usr/local/www/system_advanced_admin.php:399 +msgid "Disable webConfigurator login autocomplete" +msgstr "Desabilitar autocompletar do Login do webConfigurator" + +#: usr/local/www/system_advanced_admin.php:380 +#: usr/local/www/system_advanced_admin.php:401 +msgid "When this is unchecked, login credentials for the webConfigurator may be saved by the browser. While convenient, some security standards require this to be disabled. Check this box to disable autocomplete on the login form so that browsers will not prompt to save credentials (NOTE: Some browsers do not respect this option). " +msgstr "Quando esta estiver desmarcada, credenciais de login para o webConfigurator podem ser salvas pelo navegador. Enquanto conveniente, algumas normas de segurança exigem que este seja desativado. Marque esta caixa para desativar autocomplete no formulário de login para que os navegadores não solicitará para salvar as credenciais (NOTA: Alguns navegadores não respeitam essa opção)" + +#: usr/local/www/system_advanced_admin.php:387 +#: usr/local/www/system_advanced_admin.php:408 +msgid "WebGUI login messages" +msgstr "WebGUI mensagens de login" + +#: usr/local/www/system_advanced_admin.php:390 +#: usr/local/www/system_advanced_admin.php:411 +msgid "Disable logging of webConfigurator successful logins" +msgstr "Desabiliar log de logins efetuados com sucesso no webConfigurator" + +#: usr/local/www/system_advanced_admin.php:392 +#: usr/local/www/system_advanced_admin.php:413 +msgid "When this is checked, successful logins to the webConfigurator will not be logged." +msgstr "Quando esta opção estiver marcada, não haverá log de login com sucesso na interface Web." + +#: usr/local/www/system_advanced_admin.php:398 +#: usr/local/www/system_advanced_admin.php:419 +msgid "Anti-lockout" +msgstr "Anti-lockout" + +#: usr/local/www/system_advanced_admin.php:407 +#: usr/local/www/system_advanced_admin.php:428 +msgid "Disable webConfigurator anti-lockout rule" +msgstr "Desabilitar regra anti-lockout do webConfigurator" + +#: usr/local/www/system_advanced_admin.php:409 +#: usr/local/www/system_advanced_admin.php:430 +#, php-format +msgid "When this is unchecked, access to the webConfigurator on the %s interface is always permitted, regardless of the user-defined firewall rule set. Check this box to disable this automatically added rule, so access to the webConfigurator is controlled by the user-defined firewall rules (ensure you have a firewall rule in place that allows you in, or you will lock yourself out!)" +msgstr "Quando isso estiver desmarcado, acesso ao webConfigurator na interface %s é sempre permitido, independentemente do conjunto de regras de firewall definido pelo usuário. Maque essa opção para desabilitar essa regra automaticamente adicionada, para que o acesso ao webConfigurator seja controlado pelas regras de firewall definidas pelo usuário (tenha certeza de que possui uma regra de firewall que lhe dá permissão de acesso, ou você não conseguirá mais o acesso!)" + +#: usr/local/www/system_advanced_admin.php:415 +#: usr/local/www/system_advanced_admin.php:436 +msgid "Hint: the "Set interface(s) IP address" option in the console menu resets this setting as well." +msgstr "Dica: a opção "Configure o endereço IP de interface(s)" no menu do console reinicia essa configuração da mesma forma." + +#: usr/local/www/system_advanced_admin.php:419 +#: usr/local/www/system_advanced_admin.php:440 +msgid "DNS Rebind Check" +msgstr "Verificação de DNS Rebind" + +#: usr/local/www/system_advanced_admin.php:422 +#: usr/local/www/system_advanced_admin.php:443 +msgid "Disable DNS Rebinding Checks" +msgstr "Desabilitar Verificação DNS Rebinding" + +#: usr/local/www/system_advanced_admin.php:424 +#: usr/local/www/system_advanced_admin.php:445 +msgid "When this is unchecked, your system is protected against DNS Rebinding attacks. This blocks private IP responses from your configured DNS servers. Check this box to disable this protection if it interferes with webConfigurator access or name resolution in your environment. " +msgstr "Quando isso estiver desmarcado, acesso ao webConfigurator é protegido contra Ataques de DNS Rebinding. Isto bloqueia respostas de IPs privados de seu servidor DNS. Marque essa opção para desabilitar essa proteção se você achar que ela interfere no acesso do webConfigurator em alguns casos." + +#: usr/local/www/system_advanced_admin.php:431 +#: usr/local/www/system_advanced_admin.php:452 +msgid "Alternate Hostnames" +msgstr "Nomes de host alternativo" + +#: usr/local/www/system_advanced_admin.php:435 +#: usr/local/www/system_advanced_admin.php:456 +msgid "Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks" +msgstr "Alternar Nomes de host por DNS Rebinding e checagem de HTTP_REFERER" + +#: usr/local/www/system_advanced_admin.php:437 +#: usr/local/www/system_advanced_admin.php:458 +msgid "Here you can specify alternate hostnames by which the router may be queried, to bypass the DNS Rebinding Attack checks. Separate hostnames with spaces." +msgstr "Aqui você especifica nomes de hosts alternativos pelos quais o roteador pode ser colocado em fila, para evitar verificações de ataques de DNS Bindings. Separe os nomes dos hosts com espaços." + +#: usr/local/www/system_advanced_admin.php:442 +#: usr/local/www/system_advanced_admin.php:463 +msgid "Browser HTTP_REFERER enforcement" +msgstr "Execução de HTTP_REFERER de navegação" + +#: usr/local/www/system_advanced_admin.php:445 +#: usr/local/www/system_advanced_admin.php:466 +msgid "Disable HTTP_REFERER enforcement check" +msgstr "Desabilitar verificação de execução de HTTP_REFERER" + +#: usr/local/www/system_advanced_admin.php:447 +msgid "When this is unchecked, access to the webConfigurator is protected against HTTP_REFERER redirection attempts. Check this box to disable this protection if you find that it interferes with webConfigurator access in certain corner cases such as using external scripts to interact with this system. More information on HTTP_REFERER is available from Wikipedia." +msgstr "Quando isso não estiver marcado, acesso ao webConfigurator está protegido contra tentativas de redirecionamento HTTP_REFERER. Marque essa caixa para desabilitar essa proteção se achar que isso interfere com o acesso ao webConfigurator em alguns casos específicos tais como quando usando scripts de terceiros para interagir com o pfSense. Mais informações sobre HTTP_REFERER estão disponíveis em Wikipedia." + +#: usr/local/www/system_advanced_admin.php:457 +#: usr/local/www/system_advanced_admin.php:494 +msgid "Secure Shell" +msgstr "Secure Shell" + +#: usr/local/www/system_advanced_admin.php:460 +#: usr/local/www/system_advanced_admin.php:497 +msgid "Secure Shell Server" +msgstr "Servidor de Secure Shell" + +#: usr/local/www/system_advanced_admin.php:463 +#: usr/local/www/system_advanced_admin.php:500 +msgid "Enable Secure Shell" +msgstr "Habilitar Secure Shell" + +#: usr/local/www/system_advanced_admin.php:467 +#: usr/local/www/system_advanced_admin.php:504 +msgid "Authentication Method" +msgstr "Método de Autenticação" + +#: usr/local/www/system_advanced_admin.php:470 +msgid "Disable password login for Secure Shell (RSA key only)" +msgstr "Desabilitar login com senha para Secure Shell (somente chave RSA)" + +#: usr/local/www/system_advanced_admin.php:472 +#: usr/local/www/system_advanced_admin.php:509 +msgid "When enabled, authorized keys need to be configured for each" +msgstr "Quando desabilitado, chaves autorizadas precisam ser configuradas para cada" + +#: usr/local/www/system_advanced_admin.php:473 +#: usr/local/www/system_advanced_admin.php:510 +msgid "user" +msgstr "usuário" + +#: usr/local/www/system_advanced_admin.php:474 +#: usr/local/www/system_advanced_admin.php:511 +msgid "that has been granted secure shell access." +msgstr "foi concedido acesso ao secure shell." + +#: usr/local/www/system_advanced_admin.php:478 +#: usr/local/www/system_advanced_admin.php:515 +msgid "SSH port" +msgstr "Porta SSH" + +#: usr/local/www/system_advanced_admin.php:482 +#: usr/local/www/system_advanced_admin.php:519 +msgid "Note: Leave this blank for the default of 22." +msgstr "Nota: Deixe isso em branco para usar o padrão de 22." + +#: usr/local/www/system_advanced_admin.php:489 +#: usr/local/www/system_advanced_admin.php:526 +msgid "Serial Communcations" +msgstr "Comunicações Seriais" + +#: usr/local/www/system_advanced_admin.php:493 +#: usr/local/www/system_advanced_admin.php:530 +msgid "Serial Terminal" +msgstr "Terminal Serial" + +#: usr/local/www/system_advanced_admin.php:496 +#: usr/local/www/system_advanced_admin.php:533 +msgid "Enables the first serial port with 9600/8/N/1 by default, or another speed selectable below." +msgstr "Habilita a primeira porta serial para 9600/8/N/1 por padrão, o outra velocidade selecionável abaixo." + +#: usr/local/www/system_advanced_admin.php:497 +#: usr/local/www/system_advanced_admin.php:534 +msgid "Note: This will redirect the console output and messages to the serial port. You can still access the console menu from the internal video card/keyboard. A null modem serial cable or adapter is required to use the serial console." +msgstr "Nota: Isto irá redirecionar a saída do console e mensagens para a porta serial. VOcê pode permanecer acessando o menu console de um monitor cartão/teclado. Um cabo serial null modem ou adaptador são requeridos para uso do console serial." + +#: usr/local/www/system_advanced_admin.php:502 +#: usr/local/www/system_advanced_admin.php:539 +msgid "Serial Speed" +msgstr "Velocidade da porta serial" + +#: usr/local/www/system_advanced_admin.php:512 +#: usr/local/www/system_advanced_admin.php:549 +msgid "Allows selection of different speeds for the serial console port." +msgstr "Possibilita selecionar diferentes velocidades para a porta serial do console." + +#: usr/local/www/system_advanced_admin.php:519 +#: usr/local/www/system_advanced_admin.php:556 +msgid "Console Options" +msgstr "Opções de Console" + +#: usr/local/www/system_advanced_admin.php:522 +#: usr/local/www/system_advanced_admin.php:559 +msgid "Console menu" +msgstr "Menu do Console" + +#: usr/local/www/system_advanced_admin.php:525 +#: usr/local/www/system_advanced_admin.php:562 +msgid "Password protect the console menu" +msgstr "Proteger menu do console com senha" + +#: usr/local/www/system_advanced_admin.php:527 +#: usr/local/www/system_advanced_admin.php:564 +msgid "Changes to this option will take effect after a reboot." +msgstr "Alterações nesta opção terão efeito após reboot." + +#: usr/local/www/system_advanced_admin.php:564 +#: usr/local/www/system_advanced_admin.php:601 +msgid "secure shell configuration has changed. Stopping sshd." +msgstr "configuração de secure shell foi modificada. Interrompendo sshd." + +#: usr/local/www/system_advanced_admin.php:567 +#: usr/local/www/system_advanced_admin.php:604 +msgid "secure shell configuration has changed. Restarting sshd." +msgstr "configuração de secure shell foi modificada. Reiniciando sshd." + +#: usr/local/www/system_advanced_admin.php:574 +#: usr/local/www/diag_logs_settings.php:153 +#: usr/local/www/system_advanced_admin.php:611 +msgid "webConfigurator configuration has changed. Restarting webConfigurator." +msgstr "configuração do webConfigurator foi modificada. Reiniciando webConfigurator." + +#: usr/local/www/system_advanced_firewall.php:78 +#: usr/local/www/system_advanced_firewall.php:77 +#: usr/local/www/system_advanced_firewall.php:88 +#: usr/local/www/system_advanced_firewall.php:90 +msgid "The Firewall Maximum States value must be an integer." +msgstr "O valor de estado máximo do Firewall deve ser um inteiro." + +#: usr/local/www/system_advanced_firewall.php:81 +#: usr/local/www/system_advanced_firewall.php:83 +#: usr/local/www/system_advanced_firewall.php:94 +#: usr/local/www/system_advanced_firewall.php:99 +msgid "The Firewall Maximum Table Entries value must be an integer." +msgstr "O valor máximo das entradas da tabela do Firewall deve ser um inteiro." + +#: usr/local/www/system_advanced_firewall.php:84 +#: usr/local/www/system_advanced_firewall.php:86 +#: usr/local/www/system_advanced_firewall.php:97 +#: usr/local/www/system_advanced_firewall.php:102 +msgid "The TCP idle timeout must be an integer." +msgstr "O tempo ocioso TCP deve ser um inteiro." + +#: usr/local/www/system_advanced_firewall.php:87 +#: usr/local/www/system_advanced_firewall.php:89 +#: usr/local/www/system_advanced_firewall.php:100 +#: usr/local/www/system_advanced_firewall.php:105 +msgid "The Reflection timeout must be an integer." +msgstr "O tempo de expiração de Reflection deve ser um inteiro." + +#: usr/local/www/system_advanced_firewall.php:178 +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/system_advanced_firewall.php:221 +#: usr/local/www/system_advanced_firewall.php:232 +msgid "Advanced: Firewall and NAT" +msgstr "Avançado: Firewall e NAT" + +#: usr/local/www/system_advanced_firewall.php:190 +#: usr/local/www/system_advanced_firewall.php:204 +#: usr/local/www/system_advanced_firewall.php:233 +#: usr/local/www/system_advanced_firewall.php:244 +msgid "as the name says, it's the normal optimization algorithm" +msgstr "como o nome diz, é o algoritmo de otimização normal" + +#: usr/local/www/system_advanced_firewall.php:191 +#: usr/local/www/system_advanced_firewall.php:205 +#: usr/local/www/system_advanced_firewall.php:234 +#: usr/local/www/system_advanced_firewall.php:245 +msgid "used for high latency links, such as satellite links. Expires idle connections later than default" +msgstr "usado para links de latência alta, como os links satélites. Expira conexões ociosas mais tarde que o padrão" + +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/system_advanced_firewall.php:206 +msgid "expires idle connections quicker. More efficient use of CPU and memory but can drop legitimate connections" +msgstr "expira conexões ociosas mais rápido. Faz uso mais eficiente da CPU e da memória mas pode derrubar conexões legítimas" + +#: usr/local/www/system_advanced_firewall.php:193 +#: usr/local/www/system_advanced_firewall.php:207 +msgid "tries to avoid dropping any legitimate connections at the expense of increased memory usage and CPU utilization." +msgstr "tenta evitar queda de qualquer conexão legítima às custas do uso de memória e utilização de CPU." + +#: usr/local/www/system_advanced_firewall.php:239 +#: usr/local/www/system_advanced_firewall.php:253 +#: usr/local/www/system_advanced_firewall.php:282 +#: usr/local/www/system_advanced_firewall.php:281 +#: usr/local/www/system_advanced_firewall.php:292 +msgid "Firewall Advanced" +msgstr "Firewall Avançado" + +#: usr/local/www/system_advanced_firewall.php:242 +#: usr/local/www/system_advanced_firewall.php:256 +#: usr/local/www/system_advanced_firewall.php:285 +#: usr/local/www/system_advanced_firewall.php:284 +#: usr/local/www/system_advanced_firewall.php:295 +msgid "IP Do-Not-Fragment compatibility" +msgstr "Compatibilidade com IP Do-Not-Fragment" + +#: usr/local/www/system_advanced_firewall.php:245 +#: usr/local/www/system_advanced_firewall.php:259 +#: usr/local/www/system_advanced_firewall.php:288 +#: usr/local/www/system_advanced_firewall.php:287 +#: usr/local/www/system_advanced_firewall.php:298 +msgid "Clear invalid DF bits instead of dropping the packets" +msgstr "Limpar bits DF inválidos ao invés de descartar os pacotes" + +#: usr/local/www/system_advanced_firewall.php:246 +#: usr/local/www/system_advanced_firewall.php:260 +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/system_advanced_firewall.php:288 +#: usr/local/www/system_advanced_firewall.php:299 +msgid "This allows for communications with hosts that generate fragmented packets with the don't fragment (DF) bit set. Linux NFS is known to do this. This will cause the filter to not drop such packets but instead clear the don't fragment bit." +msgstr "Isso dá permissão para comunicações com hosts que geram pacotes fragmentados com o conjunto de bits don't fragment (DF). Linux NFS é conhecido por isso. Isso irá fazer com que o filtro não descarte tais pacotes mas, ao invés disso, limpará o bit don't fragment." + +#: usr/local/www/system_advanced_firewall.php:253 +#: usr/local/www/system_advanced_firewall.php:267 +#: usr/local/www/system_advanced_firewall.php:296 +#: usr/local/www/system_advanced_firewall.php:295 +#: usr/local/www/system_advanced_firewall.php:306 +msgid "IP Random id generation" +msgstr "Geração de id Randômico de IP" + +#: usr/local/www/system_advanced_firewall.php:256 +#: usr/local/www/system_advanced_firewall.php:270 +#: usr/local/www/system_advanced_firewall.php:299 +#: usr/local/www/system_advanced_firewall.php:298 +#: usr/local/www/system_advanced_firewall.php:309 +msgid "Insert a stronger id into IP header of packets passing through the filter." +msgstr "Inserir o id mais forte no cabeçalho IP dos pacotes que passam no filtro." + +#: usr/local/www/system_advanced_firewall.php:257 +#: usr/local/www/system_advanced_firewall.php:271 +#: usr/local/www/system_advanced_firewall.php:300 +#: usr/local/www/system_advanced_firewall.php:299 +#: usr/local/www/system_advanced_firewall.php:310 +msgid "Replaces the IP identification field of packets with random values to compensate for operating systems that use predictable values. This option only applies to packets that are not fragmented after the optional packet reassembly." +msgstr "Substitui o campo de identificação do IP de pacotes com valores randômicos para compensar por sistemas operacionais que usam valores previsíveis. Essa opção somente se aplica a pacotes que não estão fragmentados após a remontagem opcional de pacote." + +#: usr/local/www/system_advanced_firewall.php:264 +#: usr/local/www/system_advanced_firewall.php:278 +#: usr/local/www/system_advanced_firewall.php:307 +#: usr/local/www/system_advanced_firewall.php:306 +#: usr/local/www/system_advanced_firewall.php:317 +msgid "Firewall Optimization Options" +msgstr "Opções de Otimização do Firewall" + +#: usr/local/www/system_advanced_firewall.php:267 +#: usr/local/www/system_advanced_firewall.php:281 +#: usr/local/www/system_advanced_firewall.php:310 +#: usr/local/www/system_advanced_firewall.php:309 +#: usr/local/www/system_advanced_firewall.php:320 +msgid "normal" +msgstr "normal" + +#: usr/local/www/system_advanced_firewall.php:268 +#: usr/local/www/system_advanced_firewall.php:282 +#: usr/local/www/system_advanced_firewall.php:311 +#: usr/local/www/system_advanced_firewall.php:310 +#: usr/local/www/system_advanced_firewall.php:321 +msgid "high-latency" +msgstr "alta-latência" + +#: usr/local/www/system_advanced_firewall.php:269 +#: usr/local/www/system_advanced_firewall.php:283 +#: usr/local/www/system_advanced_firewall.php:312 +#: usr/local/www/system_advanced_firewall.php:311 +#: usr/local/www/system_advanced_firewall.php:322 +msgid "aggressive" +msgstr "agressivo" + +#: usr/local/www/system_advanced_firewall.php:270 +#: usr/local/www/system_advanced_firewall.php:284 +#: usr/local/www/system_advanced_firewall.php:313 +#: usr/local/www/system_advanced_firewall.php:312 +#: usr/local/www/system_advanced_firewall.php:323 +msgid "conservative" +msgstr "conservador" + +#: usr/local/www/system_advanced_firewall.php:278 +#: usr/local/www/system_advanced_firewall.php:292 +#: usr/local/www/system_advanced_firewall.php:321 +#: usr/local/www/system_advanced_firewall.php:322 +#: usr/local/www/system_advanced_firewall.php:333 +msgid "Select the type of state table optimization to use" +msgstr "Selecione o tipo de otimização de tabela de estado a ser usado" + +#: usr/local/www/system_advanced_firewall.php:282 +#: usr/local/www/system_advanced_firewall.php:296 +#: usr/local/www/system_advanced_firewall.php:325 +#: usr/local/www/system_advanced_firewall.php:326 +#: usr/local/www/system_advanced_firewall.php:337 +msgid "Disable Firewall" +msgstr "Desabilitar Firewall" + +#: usr/local/www/system_advanced_firewall.php:285 +#: usr/local/www/system_advanced_firewall.php:299 +#: usr/local/www/system_advanced_firewall.php:328 +#: usr/local/www/system_advanced_firewall.php:329 +#: usr/local/www/system_advanced_firewall.php:340 +msgid "Disable all packet filtering." +msgstr "Desabilitar todos os filtros de pacotes." + +#: usr/local/www/system_advanced_firewall.php:287 +#: usr/local/www/system_advanced_firewall.php:301 +#: usr/local/www/system_advanced_firewall.php:330 +#: usr/local/www/system_advanced_firewall.php:331 +#: usr/local/www/system_advanced_firewall.php:342 +#, php-format +msgid "Note: This converts %s into a routing only platform!" +msgstr "Nota: Isso converte %s em uma plataforma de roteamento somente!" + +#: usr/local/www/system_advanced_firewall.php:288 +#: usr/local/www/system_advanced_firewall.php:302 +#: usr/local/www/system_advanced_firewall.php:331 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:343 +msgid "Note: This will also turn off NAT!" +msgstr "Nota: Isso também irá desligar o NAT!" + +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:333 +#: usr/local/www/system_advanced_firewall.php:344 +msgid "If you only want to disable NAT, and not firewall rules, visit the" +msgstr "Se você quer desabilitar o NAT, e não regras de firewall, visite o" + +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:333 +#: usr/local/www/system_advanced_firewall.php:344 +msgid "Outbound NAT" +msgstr "NAT de saída" + +#: usr/local/www/system_advanced_firewall.php:294 +#: usr/local/www/system_advanced_firewall.php:308 +#: usr/local/www/system_advanced_firewall.php:337 +#: usr/local/www/system_advanced_firewall.php:338 +#: usr/local/www/system_advanced_firewall.php:349 +msgid "Disable Firewall Scrub" +msgstr "Desabilitar Firewall Scrub" + +#: usr/local/www/system_advanced_firewall.php:297 +#: usr/local/www/system_advanced_firewall.php:311 +#: usr/local/www/system_advanced_firewall.php:340 +#: usr/local/www/system_advanced_firewall.php:341 +#: usr/local/www/system_advanced_firewall.php:352 +msgid "Disables the PF scrubbing option which can sometimes interfere with NFS and PPTP traffic." +msgstr "Desabilita a opção de PF scrubbing que pode, às vezes, interferir com o NFS e tráfego PPTP." + +#: usr/local/www/system_advanced_firewall.php:302 +#: usr/local/www/system_advanced_firewall.php:316 +#: usr/local/www/system_advanced_firewall.php:360 +#: usr/local/www/system_advanced_firewall.php:361 +#: usr/local/www/system_advanced_firewall.php:372 +msgid "Firewall Maximum States" +msgstr "Estados Máximos do Firewall" + +#: usr/local/www/system_advanced_firewall.php:306 +#: usr/local/www/system_advanced_firewall.php:320 +#: usr/local/www/system_advanced_firewall.php:364 +#: usr/local/www/system_advanced_firewall.php:365 +#: usr/local/www/system_advanced_firewall.php:376 +msgid "Maximum number of connections to hold in the firewall state table." +msgstr "Número máximo de conexões para manter na table de estado do firewall." + +#: usr/local/www/system_advanced_firewall.php:308 +#: usr/local/www/system_advanced_firewall.php:322 +#: usr/local/www/system_advanced_firewall.php:366 +#: usr/local/www/system_advanced_firewall.php:367 +#: usr/local/www/system_advanced_firewall.php:378 +msgid "Note: Leave this blank for the default. On your system the default size is:" +msgstr "Nota: Deixe em branco para o padrão. No seu sistema o tamanho padrão é:" + +#: usr/local/www/system_advanced_firewall.php:312 +#: usr/local/www/system_advanced_firewall.php:342 +#: usr/local/www/system_advanced_firewall.php:386 +#: usr/local/www/system_advanced_firewall.php:387 +#: usr/local/www/system_advanced_firewall.php:398 +msgid "Firewall Maximum Table Entries" +msgstr "Máximo de Entradas da Tabela do Firewall" + +#: usr/local/www/system_advanced_firewall.php:316 +#: usr/local/www/system_advanced_firewall.php:346 +#: usr/local/www/system_advanced_firewall.php:390 +#: usr/local/www/system_advanced_firewall.php:391 +#: usr/local/www/system_advanced_firewall.php:402 +msgid "Maximum number of table entries for systems such as aliases, sshlockout, snort, etc, combined." +msgstr "Número máximo de entradas da tabela para sistema tais como aliases, sshlockout, snort, etc, combinados." + +#: usr/local/www/system_advanced_firewall.php:319 +#: usr/local/www/system_advanced_firewall.php:334 +#: usr/local/www/system_advanced_firewall.php:349 +#: usr/local/www/system_advanced_firewall.php:378 +#: usr/local/www/system_advanced_firewall.php:393 +#: usr/local/www/system_advanced_firewall.php:379 +#: usr/local/www/system_advanced_firewall.php:394 +#: usr/local/www/system_advanced_firewall.php:390 +#: usr/local/www/system_advanced_firewall.php:405 +msgid "Note: Leave this blank for the default." +msgstr "Nota: Deixe isso em branco para o padrão." + +#: usr/local/www/system_advanced_firewall.php:321 +#: usr/local/www/system_advanced_firewall.php:336 +#: usr/local/www/system_advanced_firewall.php:351 +#: usr/local/www/system_advanced_firewall.php:380 +#: usr/local/www/system_advanced_firewall.php:395 +#: usr/local/www/system_advanced_firewall.php:381 +#: usr/local/www/system_advanced_firewall.php:396 +#: usr/local/www/system_advanced_firewall.php:392 +#: usr/local/www/system_advanced_firewall.php:407 +msgid "On your system the default size is:" +msgstr "Em seu sistema o tamanho padrão é:" + +#: usr/local/www/system_advanced_firewall.php:327 +#: usr/local/www/system_advanced_firewall.php:357 +#: usr/local/www/system_advanced_firewall.php:401 +#: usr/local/www/system_advanced_firewall.php:402 +#: usr/local/www/system_advanced_firewall.php:413 +msgid "Static route filtering" +msgstr "Filtragem de rota estática" + +#: usr/local/www/system_advanced_firewall.php:330 +#: usr/local/www/system_advanced_firewall.php:360 +#: usr/local/www/system_advanced_firewall.php:404 +#: usr/local/www/system_advanced_firewall.php:405 +#: usr/local/www/system_advanced_firewall.php:416 +msgid "Bypass firewall rules for traffic on the same interface" +msgstr "Evitar regras de firewall para tráfego na mesma interface" + +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:362 +#: usr/local/www/system_advanced_firewall.php:406 +#: usr/local/www/system_advanced_firewall.php:407 +#: usr/local/www/system_advanced_firewall.php:418 +msgid "This option only applies if you have defined one or more static routes. If it is enabled, traffic that enters and leaves through the same interface will not be checked by the firewall. This may be desirable in some situations where multiple subnets are connected to the same interface." +msgstr "Essa opção somente se aplica se você definiu uma ou mais rotas estáticas. Se estiver habilitada, o tráfego que entra e sai da mesma interface não será verificado pelo firewall. Isso pode ser desejável em algumas situações onde múltiplas redes estão conectadas na mesma interface." + +#: usr/local/www/system_advanced_firewall.php:342 +#: usr/local/www/system_advanced_firewall.php:372 +#: usr/local/www/system_advanced_firewall.php:416 +#: usr/local/www/system_advanced_firewall.php:417 +#: usr/local/www/system_advanced_firewall.php:428 +msgid "Disable all auto-added VPN rules." +msgstr "Desabilita as regras VPN auto-adicionadas." + +#: usr/local/www/system_advanced_firewall.php:344 +#: usr/local/www/system_advanced_firewall.php:374 +#: usr/local/www/system_advanced_firewall.php:418 +#: usr/local/www/system_advanced_firewall.php:419 +#: usr/local/www/system_advanced_firewall.php:430 +msgid "Note: This disables automatically added rules for IPsec, PPTP." +msgstr "Nota: Isso desativa automaticamente as regras adicionadas de IPsec, PPTP." + +#: usr/local/www/system_advanced_firewall.php:352 +#: usr/local/www/system_advanced_firewall.php:382 +#: usr/local/www/system_advanced_firewall.php:426 +#: usr/local/www/system_advanced_firewall.php:427 +#: usr/local/www/system_advanced_firewall.php:438 +msgid "Disable reply-to on WAN rules" +msgstr "Desabilitar reply-to nas regras WAN" + +#: usr/local/www/system_advanced_firewall.php:354 +#: usr/local/www/system_advanced_firewall.php:384 +#: usr/local/www/system_advanced_firewall.php:428 +#: usr/local/www/system_advanced_firewall.php:429 +#: usr/local/www/system_advanced_firewall.php:440 +msgid "With Multi-WAN you generally want to ensure traffic leaves the same interface it arrives on, hence reply-to is added automatically by default. When using bridging, you must disable this behavior if the WAN gateway IP is different from the gateway IP of the hosts behind the bridged interface." +msgstr "Com Multi-WAN você geralmente quer garantir que o tráfego saia pela mesmas interface pode onde ele chegou, portanto, reply-to é automaticamente adicionado por padrão. Quando utilizando bridge, você precisa desabilitar este comportamento se o IP do gateway da WAN é diferente do IP do gateway dos hosts atrás da inteface bridge." + +#: usr/local/www/system_advanced_firewall.php:364 +#: usr/local/www/system_advanced_firewall.php:404 +#: usr/local/www/system_advanced_firewall.php:466 +#: usr/local/www/system_advanced_firewall.php:467 +#: usr/local/www/system_advanced_firewall.php:488 +msgid "Network Address Translation" +msgstr "Tradução de Endereço de Rede" + +#: usr/local/www/system_advanced_firewall.php:367 +msgid "Disable NAT Reflection for port forwards" +msgstr "Desabilitar NAT Reflection para encaminhamentos de portas" + +#: usr/local/www/system_advanced_firewall.php:370 +msgid "Disables the automatic creation of additional NAT redirect rules for access to port forwards on your external IP addresses from within your internal networks. Note: Reflection for port forward entries is skipped for ranges larger than 500 ports." +msgstr "Desabilita a criação automática de regras de redirecionamento NAT adicionais para acesso a encaminhamento de portas para seu endereço IP externo de dentro de suas redes internas. Nota: Reflection para entradas de encaminhamento de porta não é feito para intervalos maiores que 500 portas." + +#: usr/local/www/system_advanced_firewall.php:374 +#: usr/local/www/system_advanced_firewall.php:425 +#: usr/local/www/system_advanced_firewall.php:487 +#: usr/local/www/system_advanced_firewall.php:488 +#: usr/local/www/system_advanced_firewall.php:509 +msgid "Reflection Timeout" +msgstr "Tempo de expiração de Reflection" + +#: usr/local/www/system_advanced_firewall.php:377 +msgid "Enter value for Reflection timeout in seconds. Note: Only applies to Reflection on port forwards." +msgstr "Informe o valor para tempo de expiração de Reflection em segundos. Nota: Somente se aplica a Reflection em encaminhamentos de porta." + +#: usr/local/www/system_advanced_firewall.php:381 +msgid "Disable NAT Reflection for 1:1 NAT" +msgstr "Desabilitar NAT Reflection para 1:1 NAT" + +#: usr/local/www/system_advanced_firewall.php:384 +msgid "Disables the automatic creation of additional NAT 1:1 mappings for access to 1:1 mappings of your external IP addresses from within your internal networks. Note: Reflection for 1:1 NAT might not fully work in certain complex routing scenarios." +msgstr "Desabilita a criação automática de mapeamentos NAT 1:1 adicionais para acessar os mapeamentos 1:1 de seus endereços IP externos de dentro de sua rede interna. Nota: Reflection para 1:1 NAT pode não funcionar totalmente em certos cenários de roteamento complexos." + +#: usr/local/www/system_advanced_firewall.php:391 +#: usr/local/www/system_advanced_firewall.php:448 +#: usr/local/www/system_advanced_firewall.php:510 +#: usr/local/www/system_advanced_firewall.php:511 +#: usr/local/www/system_advanced_firewall.php:532 +msgid "Automatically create outbound NAT rules which assist inbound NAT rules that direct traffic back out to the same subnet it originated from." +msgstr "Regra de saída NAT criada automaticamente que assistem regras de entrada para direcionar o trágefo de volta à mesma sub-rede que a originou." + +#: usr/local/www/system_advanced_firewall.php:393 +msgid "Currently only applies to 1:1 NAT rules. Required for full functionality of NAT Reflection for 1:1 NAT." +msgstr "Atualmente só aplicado a regras NAT 1:1. Requerido para funcionalidade total da Reflexão de NAT para NAT 1:1." + +#: usr/local/www/system_advanced_firewall.php:397 +#: usr/local/www/system_advanced_firewall.php:456 +#: usr/local/www/system_advanced_firewall.php:518 +#: usr/local/www/system_advanced_firewall.php:519 +#: usr/local/www/system_advanced_firewall.php:540 +msgid "TFTP Proxy" +msgstr "TFTP Proxy" + +#: usr/local/www/system_advanced_firewall.php:407 +#: usr/local/www/system_advanced_firewall.php:466 +#: usr/local/www/system_advanced_firewall.php:528 +#: usr/local/www/system_advanced_firewall.php:529 +#: usr/local/www/system_advanced_firewall.php:550 +msgid "Choose the interfaces where you want TFTP proxy helper to be enabled." +msgstr "Escolha as interfaces onde deseja habilitar o TFTP proxy helper." + +#: usr/local/www/system_advanced_misc.php:179 +#: usr/local/www/system_advanced_misc.php:199 +#: usr/local/www/system_advanced_misc.php:218 +#: usr/local/www/system_advanced_misc.php:222 +#: usr/local/www/system_advanced_misc.php:254 +#: usr/local/www/system_advanced_misc.php:260 +msgid "Advanced: Miscellaneous" +msgstr "Avançado: Diversos" + +#: usr/local/www/system_advanced_misc.php:229 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_misc.php:274 +#: usr/local/www/system_advanced_misc.php:278 +#: usr/local/www/system_advanced_misc.php:325 +#: usr/local/www/system_advanced_misc.php:331 +msgid "Proxy support" +msgstr "Suporte a Proxy" + +#: usr/local/www/system_advanced_misc.php:232 +#: usr/local/www/system_advanced_misc.php:258 +#: usr/local/www/system_advanced_misc.php:277 +#: usr/local/www/system_advanced_misc.php:281 +#: usr/local/www/system_advanced_misc.php:328 +#: usr/local/www/system_advanced_misc.php:334 +msgid "Proxy URL" +msgstr "URL do Proxy" + +#: usr/local/www/system_advanced_misc.php:236 +#: usr/local/www/system_advanced_misc.php:262 +#: usr/local/www/system_advanced_misc.php:281 +#: usr/local/www/system_advanced_misc.php:285 +#: usr/local/www/system_advanced_misc.php:332 +#: usr/local/www/system_advanced_misc.php:338 +#, php-format +msgid "Proxy url for allowing %s to use this proxy to connect outside." +msgstr "Url de proxy para permitir %s para usar este proxy para se conectar de fora." + +#: usr/local/www/system_advanced_misc.php:240 +#: usr/local/www/system_advanced_misc.php:266 +#: usr/local/www/system_advanced_misc.php:285 +#: usr/local/www/system_advanced_misc.php:289 +#: usr/local/www/system_advanced_misc.php:336 +#: usr/local/www/system_advanced_misc.php:342 +msgid "Proxy Port" +msgstr "Porta do Proxy" + +#: usr/local/www/system_advanced_misc.php:244 +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_advanced_misc.php:289 +#: usr/local/www/system_advanced_misc.php:293 +#: usr/local/www/system_advanced_misc.php:340 +#: usr/local/www/system_advanced_misc.php:346 +#, php-format +msgid "Proxy port to use when %s connects to the proxy URL configured above. Default is 8080 for http protocol or 443 for ssl." +msgstr "Porta de proxy para usar quando %s se conecta à URL do proxy configurado acima. Padrão é 8080 para o protocolo HTTP ou 443 para SSL." + +#: usr/local/www/system_advanced_misc.php:248 +#: usr/local/www/system_advanced_misc.php:274 +#: usr/local/www/system_advanced_misc.php:293 +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:344 +#: usr/local/www/system_advanced_misc.php:350 +msgid "Proxy Username" +msgstr "Usuário Proxy" + +#: usr/local/www/system_advanced_misc.php:252 +#: usr/local/www/system_advanced_misc.php:278 +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:301 +#: usr/local/www/system_advanced_misc.php:348 +#: usr/local/www/system_advanced_misc.php:354 +#, php-format +msgid "Proxy username for allowing %s to use this proxy to connect outside" +msgstr "Nome de usuário de Proxy para permitir %s para usar este proxy para se conectar fora" + +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_misc.php:282 +#: usr/local/www/system_advanced_misc.php:301 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_misc.php:352 +#: usr/local/www/system_advanced_misc.php:358 +msgid "Proxy Pass" +msgstr "Proxy Pass" + +#: usr/local/www/system_advanced_misc.php:260 +#: usr/local/www/system_advanced_misc.php:286 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_misc.php:309 +#: usr/local/www/system_advanced_misc.php:356 +#: usr/local/www/system_advanced_misc.php:362 +#, php-format +msgid "Proxy password for allowing %s to use this proxy to connect outside" +msgstr "Senha do proxy para permitir %s para usar esse proxy para se conectar fora" + +#: usr/local/www/system_advanced_misc.php:264 +#: usr/local/www/system_advanced_misc.php:267 +#: usr/local/www/system_advanced_misc.php:282 +#: usr/local/www/system_advanced_misc.php:290 +#: usr/local/www/system_advanced_misc.php:293 +#: usr/local/www/system_advanced_misc.php:314 +#: usr/local/www/system_advanced_misc.php:309 +#: usr/local/www/system_advanced_misc.php:312 +#: usr/local/www/system_advanced_misc.php:333 +#: usr/local/www/system_advanced_misc.php:313 +#: usr/local/www/system_advanced_misc.php:316 +#: usr/local/www/system_advanced_misc.php:337 +#: usr/local/www/system_advanced_misc.php:360 +#: usr/local/www/system_advanced_misc.php:363 +#: usr/local/www/system_advanced_misc.php:384 +#: usr/local/www/system_advanced_misc.php:366 +#: usr/local/www/system_advanced_misc.php:369 +#: usr/local/www/system_advanced_misc.php:390 +msgid "Load Balancing" +msgstr "Balanceando de Carga" + +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_advanced_misc.php:296 +#: usr/local/www/system_advanced_misc.php:315 +#: usr/local/www/system_advanced_misc.php:319 +#: usr/local/www/system_advanced_misc.php:366 +#: usr/local/www/system_advanced_misc.php:372 +msgid "Use sticky connections" +msgstr "Use conexões sticky" + +#: usr/local/www/system_advanced_misc.php:271 +msgid "Successive connections will be redirected to the servers in a round-robin manner with connections from the same source being sent to the same web server. This 'sticky connection' will exist as long as there are states that refer to this connection. Once the states expire, so will the sticky connection. Further connections from that host will be redirected to the next web server in the round robin." +msgstr "Conexões sucessivas serão redirecionadas para servidores usando round-robin com as conexões da mesma fonte sendo enviada para o mesmo servidor web. Essa 'conexão sticky' existirá contanto que existam estados que se referenciam a ela. Uma vez que os estados expirarem, o mesmo ocorrerá com a conexão sticky. Mais conexões desse host serão redirecionadas para o próximo servidor web do round robin." + +#: usr/local/www/system_advanced_misc.php:285 +#: usr/local/www/system_advanced_misc.php:317 +#: usr/local/www/system_advanced_misc.php:336 +#: usr/local/www/system_advanced_misc.php:340 +#: usr/local/www/system_advanced_misc.php:387 +#: usr/local/www/system_advanced_misc.php:393 +msgid "Allow default gateway switching" +msgstr "Permitir a alteração de rota padrão" + +#: usr/local/www/system_advanced_misc.php:286 +#: usr/local/www/system_advanced_misc.php:318 +#: usr/local/www/system_advanced_misc.php:337 +#: usr/local/www/system_advanced_misc.php:341 +#: usr/local/www/system_advanced_misc.php:388 +#: usr/local/www/system_advanced_misc.php:394 +msgid "If the link where the default gateway resides fails switch the default gateway to another available one." +msgstr "Se o link onde o gateway padrão reside falhar, troca o default gateway para outro disponível." + +#: usr/local/www/system_advanced_misc.php:294 +#: usr/local/www/system_advanced_misc.php:326 +#: usr/local/www/system_advanced_misc.php:345 +#: usr/local/www/system_advanced_misc.php:349 +#: usr/local/www/system_advanced_misc.php:396 +#: usr/local/www/system_advanced_misc.php:402 +msgid "Power savings" +msgstr "Economia de energia" + +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:329 +#: usr/local/www/system_advanced_misc.php:348 +#: usr/local/www/system_advanced_misc.php:352 +#: usr/local/www/system_advanced_misc.php:399 +#: usr/local/www/system_advanced_misc.php:405 +msgid "PowerD" +msgstr "PowerD" + +#: usr/local/www/system_advanced_misc.php:300 +#: usr/local/www/system_advanced_misc.php:332 +#: usr/local/www/system_advanced_misc.php:351 +#: usr/local/www/system_advanced_misc.php:355 +#: usr/local/www/system_advanced_misc.php:402 +#: usr/local/www/system_advanced_misc.php:408 +msgid "Use PowerD" +msgstr "Use PowerD" + +#: usr/local/www/system_advanced_misc.php:302 +msgid "The powerd utility monitors the system state and sets various power control options accordingly. It offers three modes (maximum, minimum, and adaptive) that can be individually selected while on AC power or batteries. The modes maximum, minimum, and adaptive may be abbreviated max, min, adp. Maximum mode chooses the highest performance values. Minimum mode selects the lowest performance values to get the most power savings. Adaptive mode attempts to strike a balance by degrading performance when the system appears idle and increasing it when the system is busy. It offers a good balance between a small performance loss for greatly " +msgstr "O utilitário powerd monitora o estado do sistema e configura várias opções de controle de energia de acordo. Ele oferece 3 modos (máximo, mínimo e adaptável) que podem ser selecionados individualmente quando estiver usando energia AC ou baterias. Os modos máximo, mínimo e adaptável podem vir abreviados como max, min, adp. O modo Máximo escolhe os valores de performance mais altos. O modo Mínimo seleciona os valores de performance mais baixos para obter o máximo de economia de energia. O modo Adaptável tenta balancear por meio de degradação da performance quando o sistema parece estar ocioso e aumenta a performance quando o sistema está ocupado. Ele oferece um bom balanço entre perdas de performance pequenas para grandes aumentos em economia de energia." + +#: usr/local/www/system_advanced_misc.php:318 +#: usr/local/www/system_advanced_misc.php:361 +msgid "glxsb Crypto Acceleration" +msgstr "Aceleração de Criptografia glxsb" + +#: usr/local/www/system_advanced_misc.php:321 +#: usr/local/www/system_advanced_misc.php:364 +msgid "glxsb" +msgstr "glxsb" + +#: usr/local/www/system_advanced_misc.php:324 +#: usr/local/www/system_advanced_misc.php:367 +msgid "Use glxsb" +msgstr "Use glxsb" + +#: usr/local/www/system_advanced_misc.php:326 +#: usr/local/www/system_advanced_misc.php:369 +msgid "The AMD Geode LX Security Block will accelerate some cryptographic functions on systems which have the chip. Do not enable this option if you have a Hifn cryptographic acceleration card, as this will take precedence and the Hifn card will not be used. Acceleration should be automatic for IPsec when using Rijndael (AES). OpenVPN should be set for AES-128-CBC." +msgstr "O AMD Geode LX Security Block irá acelerar algumas funções de criptografia em sistemas que possuem o chip. Não habilite essa opção se você tem um cartão de aceleração de criptografia Hifn, já que ele terá prioridade e o cartão Hifn não será usado. Aceleração pode ser automática para IPsec quando estiver usando Rijndael (AES). OpenVPN deve ser configurado para AES-128-CBC." + +#: usr/local/www/system_advanced_misc.php:332 +#: usr/local/www/system_advanced_misc.php:375 +msgid "If you do not have a glxsb chip in your system, this option will have no effect. To unload the module, uncheck this option and then reboot." +msgstr "Se você não tiver um chip glxsb no seu sistema, essa opção não terá efeito. Para descarregar o módulo, desmarque essa opção e então reinicie o sistema." + +#: usr/local/www/system_advanced_misc.php:340 +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:432 +#: usr/local/www/system_advanced_misc.php:444 +#: usr/local/www/system_advanced_misc.php:491 +#: usr/local/www/system_advanced_misc.php:497 +msgid "IP Security" +msgstr "Segurança IP" + +#: usr/local/www/system_advanced_misc.php:343 +#: usr/local/www/system_advanced_misc.php:386 +#: usr/local/www/system_advanced_misc.php:435 +#: usr/local/www/system_advanced_misc.php:447 +#: usr/local/www/system_advanced_misc.php:494 +#: usr/local/www/system_advanced_misc.php:500 +msgid "Security Associations" +msgstr "Associações de Segurança" + +#: usr/local/www/system_advanced_misc.php:346 +#: usr/local/www/system_advanced_misc.php:389 +#: usr/local/www/system_advanced_misc.php:438 +#: usr/local/www/system_advanced_misc.php:450 +#: usr/local/www/system_advanced_misc.php:497 +#: usr/local/www/system_advanced_misc.php:503 +msgid "Prefer older IPsec SAs" +msgstr "Prefira IPsec SAs mais velhos" + +#: usr/local/www/system_advanced_misc.php:348 +#: usr/local/www/system_advanced_misc.php:391 +#: usr/local/www/system_advanced_misc.php:440 +#: usr/local/www/system_advanced_misc.php:452 +#: usr/local/www/system_advanced_misc.php:499 +#: usr/local/www/system_advanced_misc.php:505 +msgid "By default, if several SAs match, the newest one is preferred if it's at least 30 seconds old. Select this option to always prefer old SAs over new ones." +msgstr "Por padrão, se várias SAs correspondem, o mais nova é preferida se ela for pelo menos 30 segundos velha. Selecione essa opção para sempre preferir SAs velhas ao invés das novas." + +#: usr/local/www/system_advanced_misc.php:354 +#: usr/local/www/system_advanced_misc.php:397 +#: usr/local/www/system_advanced_misc.php:446 +#: usr/local/www/system_advanced_misc.php:458 +#: usr/local/www/system_advanced_misc.php:505 +#: usr/local/www/system_advanced_misc.php:511 +msgid "IPsec Debug" +msgstr "Depuração de IPsec" + +#: usr/local/www/system_advanced_misc.php:357 +#: usr/local/www/system_advanced_misc.php:400 +#: usr/local/www/system_advanced_misc.php:449 +#: usr/local/www/system_advanced_misc.php:461 +#: usr/local/www/system_advanced_misc.php:508 +#: usr/local/www/system_advanced_misc.php:514 +msgid "Start racoon in debug mode" +msgstr "Iniciar racoon no modo de depuração" + +#: usr/local/www/system_advanced_misc.php:359 +#: usr/local/www/system_advanced_misc.php:402 +#: usr/local/www/system_advanced_misc.php:451 +#: usr/local/www/system_advanced_misc.php:463 +#: usr/local/www/system_advanced_misc.php:510 +#: usr/local/www/system_advanced_misc.php:516 +msgid "Launches racoon in debug mode so that more verbose logs will be generated to aid in troubleshooting." +msgstr "Lançamentos de racoon no modo de depuração para geração de logs mais detalhado para auxiliar na solução de problemas." + +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:404 +#: usr/local/www/system_advanced_misc.php:453 +#: usr/local/www/system_advanced_misc.php:465 +#: usr/local/www/system_advanced_misc.php:512 +#: usr/local/www/system_advanced_misc.php:518 +msgid "NOTE: Changing this setting will restart racoon." +msgstr "NOTA: Alterar essa configuração irá reiniciar racoon." + +#: usr/local/www/system_advanced_misc.php:365 +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:457 +#: usr/local/www/system_advanced_misc.php:469 +#: usr/local/www/system_advanced_misc.php:516 +#: usr/local/www/system_advanced_misc.php:534 +msgid "Maximum MSS" +msgstr "Máximo MSS" + +#: usr/local/www/system_advanced_misc.php:368 +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:460 +#: usr/local/www/system_advanced_misc.php:472 +#: usr/local/www/system_advanced_misc.php:519 +#: usr/local/www/system_advanced_misc.php:537 +msgid "Enable MSS clamping on VPN traffic" +msgstr "Habilitar MSS clamping no tráfego da VPN" + +#: usr/local/www/system_advanced_misc.php:372 +#: usr/local/www/system_advanced_misc.php:415 +#: usr/local/www/system_advanced_misc.php:464 +#: usr/local/www/system_advanced_misc.php:476 +#: usr/local/www/system_advanced_misc.php:523 +#: usr/local/www/system_advanced_misc.php:541 +msgid "Enable MSS clamping on TCP flows over VPN. This helps overcome problems with PMTUD on IPsec VPN links. If left blank, the default value is 1400 bytes. " +msgstr "Habilitar MSS clamping em fluxos TCP sobre a VPN. Isso ajuda a superar problemas com PMTUD em links IPsec da VPN. Se deixado em branco o valor padrão é 1400 bytes." + +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:426 +#: usr/local/www/system_advanced_misc.php:475 +#: usr/local/www/system_advanced_misc.php:487 +#: usr/local/www/system_advanced_misc.php:534 +#: usr/local/www/system_advanced_misc.php:552 +msgid "Schedule States" +msgstr "Estados de agendamento" + +#: usr/local/www/system_advanced_misc.php:387 +#: usr/local/www/system_advanced_misc.php:430 +#: usr/local/www/system_advanced_misc.php:479 +#: usr/local/www/system_advanced_misc.php:491 +#: usr/local/www/system_advanced_misc.php:538 +#: usr/local/www/system_advanced_misc.php:556 +msgid "By default schedules clear the states of existing connections when the expiration time has come. This option overrides that behavior by not clearing states for existing connections." +msgstr "Por padrão, agendadores limpam os estados de conexões quando atingirem o tempo de expiração. Esta opção sobrescreve o comportamento anterior, não limpando as tabelas." + +#: usr/local/www/system_advanced_misc.php:395 +#: usr/local/www/system_advanced_misc.php:438 +#: usr/local/www/system_advanced_misc.php:487 +#: usr/local/www/system_advanced_misc.php:499 +#: usr/local/www/system_advanced_misc.php:546 +#: usr/local/www/system_advanced_misc.php:564 +msgid "Gateway Monitoring" +msgstr "Monitoramento do Gateway" + +#: usr/local/www/system_advanced_misc.php:402 +#: usr/local/www/system_advanced_misc.php:445 +#: usr/local/www/system_advanced_misc.php:494 +#: usr/local/www/system_advanced_misc.php:506 +#: usr/local/www/system_advanced_misc.php:553 +#: usr/local/www/system_advanced_misc.php:571 +msgid "By default the monitoring process will flush states for a gateway that goes down. This option overrides that behavior by not clearing states for existing connections." +msgstr "Por padrão o monitoramento de processos irá limpar a tabela de estados quando um gateway cair. Esta opções sobrescreve o comportamento anterior para conexões existentes." + +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:454 +#: usr/local/www/system_advanced_misc.php:503 +#: usr/local/www/system_advanced_misc.php:515 +#: usr/local/www/system_advanced_misc.php:636 +#: usr/local/www/system_advanced_misc.php:654 +msgid "Hardware Settings" +msgstr "Configurações de Hardware" + +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:457 +#: usr/local/www/system_advanced_misc.php:506 +#: usr/local/www/system_advanced_misc.php:518 +#: usr/local/www/system_advanced_misc.php:639 +#: usr/local/www/system_advanced_misc.php:657 +msgid "Hard disk standby time " +msgstr "Tempo de espera do disco rígido" + +#: usr/local/www/system_advanced_misc.php:421 +#: usr/local/www/system_advanced_misc.php:464 +#: usr/local/www/system_advanced_misc.php:513 +#: usr/local/www/system_advanced_misc.php:525 +#: usr/local/www/system_advanced_misc.php:646 +#: usr/local/www/system_advanced_misc.php:664 +msgid "Always on" +msgstr "Sempre ligado" + +#: usr/local/www/system_advanced_misc.php:430 +#: usr/local/www/system_advanced_misc.php:473 +#: usr/local/www/system_advanced_misc.php:522 +#: usr/local/www/system_advanced_misc.php:534 +#: usr/local/www/system_advanced_misc.php:655 +#: usr/local/www/system_advanced_misc.php:673 +msgid "Puts the hard disk into standby mode when the selected amount of time after the last access has elapsed." +msgstr "Coloque o disco rígido em modo de espera quando o total de tempo selecionado após o último acesso ter decorrido." + +#: usr/local/www/system_advanced_misc.php:431 +#: usr/local/www/system_advanced_misc.php:474 +#: usr/local/www/system_advanced_misc.php:523 +#: usr/local/www/system_advanced_misc.php:535 +#: usr/local/www/system_advanced_misc.php:656 +#: usr/local/www/system_advanced_misc.php:674 +msgid "Do not set this for CF cards." +msgstr "Não configure isso para cartões CF." + +#: usr/local/www/system_advanced_network.php:68 +#: usr/local/www/system_advanced_network.php:67 +msgid "You must specify an IP address to NAT IPv6 packets." +msgstr "Você deve especificar um endereço IP para os pacotes IPv6 do NAT." + +#: usr/local/www/system_advanced_network.php:148 +#: usr/local/www/system_advanced_network.php:147 +msgid "Advanced: Networking" +msgstr "Avançado: Rede" + +#: usr/local/www/system_advanced_network.php:205 +#: usr/local/www/system_advanced_network.php:204 +msgid "IPv6 Options" +msgstr "Opções IPv6" + +#: usr/local/www/system_advanced_network.php:208 +#: usr/local/www/system_advanced_network.php:211 +#: usr/local/www/system_advanced_network.php:207 +#: usr/local/www/system_advanced_network.php:210 +msgid "Allow IPv6" +msgstr "Permitir IPv6" + +#: usr/local/www/system_advanced_network.php:212 +msgid "All IPv6 will be blocked unless this box is checked." +msgstr "Todos os IPv6 serão bloqueados a menos que essa opção esteja marcada." + +#: usr/local/www/system_advanced_network.php:217 +#: usr/local/www/system_advanced_network.php:218 +msgid "IPv6 over IPv4 Tunneling" +msgstr "IPv6 sobre tunelamento IPv4" + +#: usr/local/www/system_advanced_network.php:220 +#: usr/local/www/system_advanced_network.php:221 +msgid "Enable IPv4 NAT encapsulation of IPv6 packets" +msgstr "Habilitar encapsulamento NAT de IPv4 para pacotes IPv6" + +#: usr/local/www/system_advanced_network.php:221 +#: usr/local/www/system_advanced_network.php:222 +msgid "This provides an RFC 2893 compatibility mechanism that can be used to tunneling IPv6 packets over IPv4 routing infrastructures. If enabled, don't forget to add a firewall rule to permit IPv6 packets." +msgstr "Isso provê um mecanismo de compatibilidade com RFC 2893 que pode ser usado para tunelamento de pacotes IPv6 sobre infraestrutura de roteamento IPv4. Se habilitada, não esqueça de adicionar uma regra de firewall para permitir pacotes IPv6." + +#: usr/local/www/system_advanced_network.php:234 +#: usr/local/www/system_advanced_network.php:235 +msgid "Network Interfaces" +msgstr "Interfaces de Rede" + +#: usr/local/www/system_advanced_network.php:237 +#: usr/local/www/system_advanced_network.php:238 +msgid "Device polling" +msgstr "Polling de dispositivo" + +#: usr/local/www/system_advanced_network.php:240 +#: usr/local/www/system_advanced_network.php:241 +msgid "Enable device polling" +msgstr "Habilitar polling de dispositivo" + +#: usr/local/www/system_advanced_network.php:241 +#: usr/local/www/system_advanced_network.php:242 +#, php-format +msgid "Device polling is a technique that lets the system periodically poll network devices for new data instead of relying on interrupts. This prevents your webConfigurator, SSH, etc. from being inaccessible due to interrupt floods when under extreme load. Generally this is not recommended. Not all NICs support polling; see the %s homepage for a list of supported cards." +msgstr "Polling de dispositivo é uma técnica que permite que o sistema periodicamente eleja dispositivos de rede para novos dados ao invés de confiar em interrupções. Isso previne que seu webConfigurator, SSH, etc, de serem inacessíveis devido a transbordo de interrupções quando extremamente carregados. Geralmente isso não é recomendado. Nem todas as NICs suportam polling; veja a página %s para uma lista de cartões com suporte." + +#: usr/local/www/system_advanced_network.php:245 +#: usr/local/www/system_advanced_network.php:246 +msgid "Hardware Checksum Offloading" +msgstr "Hardware Checksum Offloading" + +#: usr/local/www/system_advanced_network.php:248 +#: usr/local/www/system_advanced_network.php:249 +msgid "Disable hardware checksum offload" +msgstr "Desabilitar Hardware Checksum Offload" + +#: usr/local/www/system_advanced_network.php:249 +#: usr/local/www/system_advanced_network.php:250 +msgid "Checking this option will disable hardware checksum offloading. Checksum offloading is broken in some hardware, particularly some Realtek cards. Rarely, drivers may have problems with checksum offloading and some specific NICs." +msgstr "Marcando essa opção o hardware checksum offloading será desabilitado. Checksum offloading está quebrado em algum hardware, particularmente alguns cartões Realtek. Raramente, drivers podem ter problemas com checksum offloading e alguns NICs específicos." + +#: usr/local/www/system_advanced_network.php:253 +#: usr/local/www/system_advanced_network.php:254 +msgid "Hardware TCP Segmentation Offloading" +msgstr "Hardware TCP Segmentation Offloading" + +#: usr/local/www/system_advanced_network.php:256 +#: usr/local/www/system_advanced_network.php:257 +msgid "Disable hardware TCP segmentation offload" +msgstr "Desabilitar Hardware TCP Segmentation Offloading" + +#: usr/local/www/system_advanced_network.php:257 +#: usr/local/www/system_advanced_network.php:258 +msgid "Checking this option will disable hardware TCP segmentation offloading (TSO, TSO4, TSO6). This offloading is broken in some hardware drivers, and may impact performance with some specific NICs." +msgstr "Marcando essa opção, o Hardware TCP Segmentation Offloading será desabilitado (TSO, TSO4, TS06). Esse offloading está quebrado em alguns drivers de hardware, e pode impactar a performance com alguns NICs específicos." + +#: usr/local/www/system_advanced_network.php:261 +#: usr/local/www/system_advanced_network.php:262 +msgid "Hardware Large Receive Offloading" +msgstr "Hardware Large Receive Offloading" + +#: usr/local/www/system_advanced_network.php:264 +#: usr/local/www/system_advanced_network.php:265 +msgid "Disable hardware large receive offload" +msgstr "Desabilitar Hardware Large Receive Offloading" + +#: usr/local/www/system_advanced_network.php:265 +#: usr/local/www/system_advanced_network.php:266 +msgid "Checking this option will disable hardware large receive offloading (LRO). This offloading is broken in some hardware drivers, and may impact performance with some specific NICs." +msgstr "Marcar esta opção irá desabilitar o Hardware Large Receive Offloading (LRO). Esse offloading está quebrado em alguns drivers de hardware, e pode impactar a performance com alguns NICs específicos." + +#: usr/local/www/system_advanced_network.php:269 +#: usr/local/www/system_advanced_network.php:270 +msgid "ARP Handling" +msgstr "Manuseio de ARP" + +#: usr/local/www/system_advanced_network.php:272 +#: usr/local/www/system_advanced_network.php:273 +msgid "Suppress ARP messages" +msgstr "Suprimir mensagens ARP" + +#: usr/local/www/system_advanced_network.php:273 +#: usr/local/www/system_advanced_network.php:274 +msgid "This option will suppress ARP log messages when multiple interfaces reside on the same broadcast domain" +msgstr "Essa opção irá suprimir mensagens de log ARP quando múltiplas interfaces residirem no mesmo domínio de broadcast" + +#: usr/local/www/system_advanced_notifications.php:118 +#: usr/local/www/system_advanced_notifications.php:124 +#: usr/local/www/system_advanced_notifications.php:127 +#: usr/local/www/system_advanced_notifications.php:133 +#: usr/local/www/system_advanced_notifications.php:144 +#: usr/local/www/system_advanced_notifications.php:151 +#, php-format +msgid "This is a test message from %s. It is safe to ignore this message." +msgstr "Essa é uma mensagem de teste de %s. É seguro ignorar essa mensagem." + +#: usr/local/www/system_advanced_notifications.php:131 +#: usr/local/www/system_advanced_notifications.php:140 +#: usr/local/www/system_advanced_notifications.php:155 +msgid "Advanced: Notifications" +msgstr "Avançado: Notificações" + +#: usr/local/www/system_advanced_notifications.php:168 +#: usr/local/www/system_advanced_notifications.php:177 +#: usr/local/www/system_advanced_notifications.php:192 +msgid "Growl" +msgstr "Growl" + +#: usr/local/www/system_advanced_notifications.php:171 +#: usr/local/www/system_advanced_notifications.php:180 +#: usr/local/www/system_advanced_notifications.php:202 +msgid "Registration Name" +msgstr "Nome de Registro" + +#: usr/local/www/system_advanced_notifications.php:174 +#: usr/local/www/system_advanced_notifications.php:183 +#: usr/local/www/system_advanced_notifications.php:205 +msgid "Enter the name to register with the Growl server (default: PHP-Growl)." +msgstr "Informe o nome para registrar o servidor Growl (padrão PHP-Growl)." + +#: usr/local/www/system_advanced_notifications.php:178 +#: usr/local/www/system_advanced_notifications.php:187 +#: usr/local/www/system_advanced_notifications.php:209 +msgid "Notification Name" +msgstr "Nome da Notificação" + +#: usr/local/www/system_advanced_notifications.php:181 +#: usr/local/www/system_advanced_notifications.php:190 +#: usr/local/www/system_advanced_notifications.php:212 +#, php-format +msgid "Enter a name for the Growl notifications (default: %s growl alert)." +msgstr "Informe um nome para as notificações do Growl (padrão: %s growl alert)." + +#: usr/local/www/system_advanced_notifications.php:188 +#: usr/local/www/system_advanced_notifications.php:197 +#: usr/local/www/system_advanced_notifications.php:219 +msgid "This is the IP address that you would like to send growl notifications to." +msgstr "Esse é o endereço IP para o qual você gostaria de enviar notificações growl." + +#: usr/local/www/system_advanced_notifications.php:195 +#: usr/local/www/system_advanced_notifications.php:204 +#: usr/local/www/system_advanced_notifications.php:226 +msgid "Enter the password of the remote growl notification device." +msgstr "Informe a senha do dispositivo de notificação growl remoto." + +#: usr/local/www/system_advanced_notifications.php:203 +#: usr/local/www/system_advanced_notifications.php:212 +#: usr/local/www/system_advanced_notifications.php:243 +msgid "SMTP E-Mail" +msgstr "E-Mail SMTP" + +#: usr/local/www/system_advanced_notifications.php:206 +#: usr/local/www/system_advanced_notifications.php:215 +#: usr/local/www/system_advanced_notifications.php:253 +msgid "E-Mail server" +msgstr "Servidor de E-Mail" + +#: usr/local/www/system_advanced_notifications.php:209 +#: usr/local/www/system_advanced_notifications.php:218 +#: usr/local/www/system_advanced_notifications.php:256 +msgid "This is the FQDN or IP address of the SMTP E-Mail server to which notifications will be sent." +msgstr "Esse é o endereço FQDN ou IP do servidor de E-Mail SMTP para o qual as notificações serão enviadas." + +#: usr/local/www/system_advanced_notifications.php:213 +#: usr/local/www/system_advanced_notifications.php:222 +#: usr/local/www/system_advanced_notifications.php:260 +msgid "SMTP Port of E-Mail server" +msgstr "Porta SMTP do Servidor de E-Mail" + +#: usr/local/www/system_advanced_notifications.php:217 +#: usr/local/www/system_advanced_notifications.php:226 +#: usr/local/www/system_advanced_notifications.php:264 +msgid "This is the port of the SMTP E-Mail server, typically 25, 587 (submission) or 465 (smtps, tick ssl/tls checkbox)" +msgstr "Essa é a porta do servidor de E-Mail SMTP, normalmente 25 ou 587 (submissão) ou 465 (smtps, tick ssl/tls checkbox)" + +#: usr/local/www/system_advanced_notifications.php:221 +#: usr/local/www/system_advanced_notifications.php:230 +#: usr/local/www/system_advanced_notifications.php:268 +msgid "From e-mail address" +msgstr "Endereço de e-mail de origem" + +#: usr/local/www/system_advanced_notifications.php:224 +#: usr/local/www/system_advanced_notifications.php:233 +#: usr/local/www/system_advanced_notifications.php:271 +msgid "This is the e-mail address that will appear in the from field." +msgstr "Esse é o endereço de e-mail que irá aparecer no campo De." + +#: usr/local/www/system_advanced_notifications.php:228 +#: usr/local/www/system_advanced_notifications.php:237 +#: usr/local/www/system_advanced_notifications.php:275 +msgid "Notification E-Mail address" +msgstr "Endereço de E-mail de Notificação" + +#: usr/local/www/system_advanced_notifications.php:231 +#: usr/local/www/system_advanced_notifications.php:240 +#: usr/local/www/system_advanced_notifications.php:278 +msgid "Enter the e-mail address that you would like email notifications sent to." +msgstr "Informe o endereço de e-mail para o qual você gostaria que notificações por e-mail sejam enviadas." + +#: usr/local/www/system_advanced_notifications.php:235 +#: usr/local/www/system_advanced_notifications.php:244 +#: usr/local/www/system_advanced_notifications.php:282 +msgid "Notification E-Mail auth username (optional)" +msgstr "Nome de usuário de autenticação de E-Mail de Notificação (opcional)" + +#: usr/local/www/system_advanced_notifications.php:238 +#: usr/local/www/system_advanced_notifications.php:247 +#: usr/local/www/system_advanced_notifications.php:285 +msgid "Enter the e-mail address username for SMTP authentication." +msgstr "Informe o nome de usuário do endereço de e-mail para autenticação SMTP." + +#: usr/local/www/system_advanced_notifications.php:242 +#: usr/local/www/system_advanced_notifications.php:251 +#: usr/local/www/system_advanced_notifications.php:289 +msgid "Notification E-Mail auth password" +msgstr "Senha de autorização de E-Mail de Notificação" + +#: usr/local/www/system_advanced_notifications.php:245 +#: usr/local/www/system_advanced_notifications.php:254 +#: usr/local/www/system_advanced_notifications.php:292 +msgid "Enter the e-mail address password for SMTP authentication." +msgstr "Informe a senha do endereço de e-mail para autenticação SMTP." + +#: usr/local/www/system_advanced_sysctl.php:125 +msgid "Advanced: System Tunables" +msgstr "Avançado: Ajustes do sistema" + +#: usr/local/www/system_advanced_sysctl.php:139 +msgid "The firewall tunables have changed. You must apply the configuration to take affect." +msgstr "Os ajustes do firewall mudaram. Você deve aplicar as configurações para que elas tenham efeito." + +#: usr/local/www/system_advanced_sysctl.php:171 +msgid "Tunable Name" +msgstr "Nome do Ajuste" + +#: usr/local/www/system_advanced_sysctl.php:234 +msgid "Edit system tunable" +msgstr "Editar ajuste do sistema" + +#: usr/local/www/system_advanced_sysctl.php:237 +msgid "Tunable" +msgstr "Juste" + +#: usr/local/www/system_authservers.php:44 +msgid "Authentication Servers" +msgstr "Servidores de Autenticação" + +#: usr/local/www/system_authservers.php:83 +#: usr/local/www/system_authservers.php:84 +msgid "deleted" +msgstr "apagado" + +#: usr/local/www/system_authservers.php:160 +#: usr/local/www/system_authservers.php:183 +#: usr/local/www/system_authservers.php:438 +#: usr/local/www/system_camanager.php:165 +#: usr/local/www/system_camanager.php:177 +#: usr/local/www/system_camanager.php:192 +#: usr/local/www/system_camanager.php:369 +#: usr/local/www/system_certmanager.php:164 +#: usr/local/www/system_certmanager.php:176 +#: usr/local/www/system_certmanager.php:193 +#: usr/local/www/system_certmanager.php:307 +#: usr/local/www/system_certmanager.php:495 +#: usr/local/www/system_certmanager.php:801 +#: usr/local/www/system_crlmanager.php:193 +#: usr/local/www/system_crlmanager.php:200 +#: usr/local/www/system_crlmanager.php:318 +#: usr/local/www/system_usermanager.php:189 +#: usr/local/www/system_usermanager.php:705 +#: usr/local/www/system_certmanager.php:192 +#: usr/local/www/system_certmanager.php:204 +#: usr/local/www/system_certmanager.php:222 +#: usr/local/www/system_certmanager.php:394 +#: usr/local/www/system_certmanager.php:594 +#: usr/local/www/system_certmanager.php:967 +#: usr/local/www/system_usermanager.php:703 +#: usr/local/www/system_crlmanager.php:192 +#: usr/local/www/system_crlmanager.php:199 +#: usr/local/www/system_crlmanager.php:319 +#: usr/local/www/system_crlmanager.php:404 +#: usr/local/www/system_authservers.php:161 +#: usr/local/www/system_authservers.php:184 +#: usr/local/www/system_authservers.php:443 +#: usr/local/www/system_camanager.php:167 +#: usr/local/www/system_camanager.php:179 +#: usr/local/www/system_camanager.php:194 +#: usr/local/www/system_camanager.php:376 +#: usr/local/www/system_certmanager.php:195 +#: usr/local/www/system_certmanager.php:207 +#: usr/local/www/system_certmanager.php:225 +#: usr/local/www/system_certmanager.php:403 +#: usr/local/www/system_certmanager.php:603 +#: usr/local/www/system_certmanager.php:1009 +#: usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 +#: usr/local/www/system_authservers.php:450 +#: usr/local/www/system_certmanager.php:604 +#: usr/local/www/system_certmanager.php:1013 +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:187 +#: usr/local/www/system_authservers.php:461 +msgid "Descriptive name" +msgstr "Nome descritivo" + +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:484 +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:489 +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:496 +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:508 +msgid "Port value" +msgstr "Valor da porta" + +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:490 +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:495 +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:502 +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:514 +msgid "Transport" +msgstr "Transporte" + +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:526 +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:531 +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:538 +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:550 +msgid "Protocol version" +msgstr "Versão do protocolo" + +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:170 +msgid "Search level" +msgstr "Nível de busca" + +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:171 +msgid "User naming Attribute" +msgstr "Atributo de nomeação de usuário" + +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:170 +#: usr/local/www/system_authservers.php:172 +msgid "Group naming Attribute" +msgstr "Atributo de nomeação de grupo" + +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:665 +#: usr/local/www/system_authservers.php:170 +#: usr/local/www/system_authservers.php:670 +#: usr/local/www/system_authservers.php:171 +#: usr/local/www/system_authservers.php:677 +#: usr/local/www/system_authservers.php:173 +#: usr/local/www/system_authservers.php:689 +msgid "Group member attribute" +msgstr "Atributo de membro de grupo" + +#: usr/local/www/system_authservers.php:170 +#: usr/local/www/system_authservers.php:171 +#: usr/local/www/system_authservers.php:172 +#: usr/local/www/system_authservers.php:174 +msgid "Authentication container" +msgstr "Contêiner de autenticação" + +#: usr/local/www/system_authservers.php:175 +#: usr/local/www/system_authservers.php:176 +#: usr/local/www/system_authservers.php:177 +#: usr/local/www/system_authservers.php:179 +msgid "Bind user DN" +msgstr "DN de usuário de Bind" + +#: usr/local/www/system_authservers.php:176 +#: usr/local/www/system_authservers.php:177 +#: usr/local/www/system_authservers.php:178 +#: usr/local/www/system_authservers.php:180 +msgid "Bind Password" +msgstr "Senha de bind" + +#: usr/local/www/system_authservers.php:191 +#: usr/local/www/system_authservers.php:707 +#: usr/local/www/system_authservers.php:192 +#: usr/local/www/system_authservers.php:712 +#: usr/local/www/system_authservers.php:193 +#: usr/local/www/system_authservers.php:719 +#: usr/local/www/system_authservers.php:195 +#: usr/local/www/system_authservers.php:761 +msgid "Authentication port value" +msgstr "Valor da porta de autenticação" + +#: usr/local/www/system_authservers.php:197 +#: usr/local/www/system_authservers.php:713 +#: usr/local/www/system_authservers.php:198 +#: usr/local/www/system_authservers.php:718 +#: usr/local/www/system_authservers.php:199 +#: usr/local/www/system_authservers.php:725 +#: usr/local/www/system_authservers.php:201 +#: usr/local/www/system_authservers.php:767 +msgid "Accounting port value" +msgstr "Valor da porta de Accounting" + +#: usr/local/www/system_authservers.php:202 +#: usr/local/www/system_authservers.php:686 +#: usr/local/www/system_authservers.php:203 +#: usr/local/www/system_authservers.php:691 +#: usr/local/www/system_authservers.php:204 +#: usr/local/www/system_authservers.php:698 +#: usr/local/www/system_authservers.php:206 +#: usr/local/www/system_authservers.php:740 +msgid "Shared Secret" +msgstr "Segredo compartilhado" + +#: usr/local/www/system_authservers.php:209 +#: usr/local/www/system_authservers.php:210 +#: usr/local/www/system_authservers.php:211 +#: usr/local/www/system_authservers.php:213 +msgid "The host name contains invalid characters." +msgstr "O nome do host contém caracteres inválidos." + +#: usr/local/www/system_authservers.php:212 +#: usr/local/www/system_authservers.php:213 +#: usr/local/www/system_authservers.php:214 +#: usr/local/www/system_authservers.php:216 +msgid "An authentication server with the same name already exists." +msgstr "Um servidor de autenticação com o mesmo nome já existe." + +#: usr/local/www/system_authservers.php:382 +#: usr/local/www/system_authservers.php:383 +#: usr/local/www/system_authservers.php:390 +#: usr/local/www/system_authservers.php:401 +msgid "Please fill the required values." +msgstr "Por favor, preencha os valores requeridos." + +#: usr/local/www/system_authservers.php:388 +#: usr/local/www/system_authservers.php:389 +#: usr/local/www/system_authservers.php:396 +#: usr/local/www/system_authservers.php:407 +msgid "Please fill the bind username/password." +msgstr "Por favor, preencha o usuário/senha de bind." + +#: usr/local/www/system_authservers.php:406 +#: usr/local/www/system_usermanager_settings.php:103 +#: usr/local/www/system_authservers.php:411 +#: usr/local/www/system_authservers.php:418 +#: usr/local/www/system_usermanager_settings.php:104 +#: usr/local/www/system_authservers.php:429 +msgid "Popup blocker detected. Action aborted." +msgstr "Detectado bloqueio de popup. Ação abortada." + +#: usr/local/www/system_authservers.php:475 +#: usr/local/www/system_authservers.php:480 +#: usr/local/www/system_authservers.php:487 +#: usr/local/www/system_authservers.php:498 +msgid "LDAP Server Settings" +msgstr "Configurações do Servidor LDAP" + +#: usr/local/www/system_authservers.php:478 +#: usr/local/www/system_authservers.php:680 +#: usr/local/www/system_authservers.php:483 +#: usr/local/www/system_authservers.php:685 +#: usr/local/www/system_authservers.php:490 +#: usr/local/www/system_authservers.php:692 +#: usr/local/www/system_authservers.php:501 +#: usr/local/www/system_authservers.php:734 +msgid "Hostname or IP address" +msgstr "Nome de host ou endereço IP" + +#: usr/local/www/system_authservers.php:505 +#: usr/local/www/vpn_openvpn_client.php:629 +#: usr/local/www/vpn_openvpn_server.php:778 +#: usr/local/www/vpn_openvpn_server.php:851 +#: usr/local/www/vpn_openvpn_client.php:634 +#: usr/local/www/vpn_openvpn_server.php:879 +#: usr/local/www/vpn_openvpn_client.php:652 +#: usr/local/www/system_authservers.php:510 +#: usr/local/www/vpn_openvpn_client.php:671 +#: usr/local/www/system_authservers.php:517 +#: usr/local/www/vpn_openvpn_server.php:906 +#: usr/local/www/system_authservers.php:529 +msgid "Peer Certificate Authority" +msgstr "Peer com Fonte Certificadora" + +#: usr/local/www/system_authservers.php:518 +#: usr/local/www/system_authservers.php:523 +#: usr/local/www/system_authservers.php:530 +#: usr/local/www/system_authservers.php:542 +msgid "This option is used if 'SSL Encrypted' option is choosen." +msgstr "Esta opções é utilizada se a opções 'Criptografado por SSL' estiver selecionada." + +#: usr/local/www/system_authservers.php:519 +#: usr/local/www/system_authservers.php:524 +#: usr/local/www/system_authservers.php:531 +#: usr/local/www/system_authservers.php:543 +msgid "It must match with the CA in the AD otherwise problems will arise." +msgstr "Ele deve corresponder com o CA na AD caso contrário irá haver problemas." + +#: usr/local/www/system_authservers.php:541 +#: usr/local/www/system_authservers.php:546 +#: usr/local/www/system_authservers.php:553 +#: usr/local/www/system_authservers.php:565 +msgid "Search scope" +msgstr "Escopo de busca" + +#: usr/local/www/system_authservers.php:545 +#: usr/local/www/system_authservers.php:550 +#: usr/local/www/system_authservers.php:557 +#: usr/local/www/system_authservers.php:569 +msgid "Level:" +msgstr "Nível:" + +#: usr/local/www/system_authservers.php:560 +#: usr/local/www/system_authservers.php:565 +#: usr/local/www/system_authservers.php:572 +#: usr/local/www/system_authservers.php:584 +msgid "Base DN:" +msgstr "DN Base:" + +#: usr/local/www/system_authservers.php:570 +#: usr/local/www/system_authservers.php:575 +#: usr/local/www/system_authservers.php:582 +#: usr/local/www/system_authservers.php:594 +msgid "Authentication containers" +msgstr "Contêineres de autenticação" + +#: usr/local/www/system_authservers.php:574 +#: usr/local/www/system_authservers.php:579 +#: usr/local/www/system_authservers.php:586 +#: usr/local/www/system_authservers.php:598 +msgid "Containers:" +msgstr "Contêineres:" + +#: usr/local/www/system_authservers.php:578 +#: usr/local/www/system_authservers.php:583 +#: usr/local/www/system_authservers.php:590 +#: usr/local/www/system_authservers.php:602 +msgid "Note: Semi-Colon separated. This will be prepended to the search base dn above or you can specify full container path." +msgstr "NOTA: Separado por ponto e vírgula. Isso será anexado à base de busca dn acima ou você pode especificar o caminho completo do contêiner." + +#: usr/local/www/system_authservers.php:579 +#: usr/local/www/system_authservers.php:584 +#: usr/local/www/system_authservers.php:591 +#: usr/local/www/system_authservers.php:603 +msgid "Example: CN=Users;DC=example" +msgstr "EXEMPLO: CN=Users;DC=example" + +#: usr/local/www/system_authservers.php:580 +#: usr/local/www/system_authservers.php:585 +#: usr/local/www/system_authservers.php:592 +#: usr/local/www/system_authservers.php:604 +msgid "Example: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com " +msgstr "EXEMPLO: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com " + +#: usr/local/www/system_authservers.php:587 +#: usr/local/www/system_authservers.php:592 +#: usr/local/www/system_authservers.php:599 +#: usr/local/www/system_authservers.php:611 +msgid "Extended Query" +msgstr "Consulta estendida" + +#: usr/local/www/system_authservers.php:597 +#: usr/local/www/system_authservers.php:602 +#: usr/local/www/system_authservers.php:609 +#: usr/local/www/system_authservers.php:621 +msgid "Example: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com " +msgstr "EXEMPLO: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com" + +#: usr/local/www/system_authservers.php:604 +#: usr/local/www/system_authservers.php:609 +#: usr/local/www/system_authservers.php:616 +#: usr/local/www/system_authservers.php:628 +msgid "Bind credentials" +msgstr "Credenciais de Vínculo" + +#: usr/local/www/system_authservers.php:612 +#: usr/local/www/system_authservers.php:617 +#: usr/local/www/system_authservers.php:624 +#: usr/local/www/system_authservers.php:636 +msgid "Use anonymous binds to resolve distinguished names" +msgstr "Use vínculos anônimos para resolver nomes distintos" + +#: usr/local/www/system_authservers.php:621 +#: usr/local/www/system_authservers.php:626 +#: usr/local/www/system_authservers.php:633 +#: usr/local/www/system_authservers.php:645 +msgid "User DN:" +msgstr "DN do usuário:" + +#: usr/local/www/system_authservers.php:637 +#: usr/local/www/system_authservers.php:642 +#: usr/local/www/system_authservers.php:649 +#: usr/local/www/system_authservers.php:661 +msgid "Initial Template" +msgstr "Modelo inicial" + +#: usr/local/www/system_authservers.php:653 +#: usr/local/www/system_authservers.php:658 +#: usr/local/www/system_authservers.php:665 +#: usr/local/www/system_authservers.php:677 +msgid "User naming attribute" +msgstr "Atributo de nomeação de usuário" + +#: usr/local/www/system_authservers.php:659 +#: usr/local/www/system_authservers.php:664 +#: usr/local/www/system_authservers.php:671 +#: usr/local/www/system_authservers.php:683 +msgid "Group naming attribute" +msgstr "Atributo de nomeação de grupo" + +#: usr/local/www/system_authservers.php:677 +#: usr/local/www/system_authservers.php:682 +#: usr/local/www/system_authservers.php:689 +#: usr/local/www/system_authservers.php:731 +msgid "Radius Server Settings" +msgstr "Configurações do Servidor Radius" + +#: usr/local/www/system_authservers.php:692 +#: usr/local/www/system_authservers.php:697 +#: usr/local/www/system_authservers.php:704 +#: usr/local/www/system_authservers.php:746 +msgid "Services offered" +msgstr "Serviços oferecidos" + +#: usr/local/www/system_authservers.php:737 +#: usr/local/www/system_authservers.php:743 +#: usr/local/www/system_authservers.php:759 +#: usr/local/www/system_authservers.php:801 +msgid "Server Name" +msgstr "Nome do Servidor" + +#: usr/local/www/system_authservers.php:739 +#: usr/local/www/system_authservers.php:745 +#: usr/local/www/system_authservers.php:761 usr/local/www/diag_dns.php:154 +#: usr/local/www/system_authservers.php:803 +msgid "Host Name" +msgstr "Nome do Host" + +#: usr/local/www/system_authservers.php:756 +#: usr/local/www/vpn_openvpn_server.php:1479 +#: usr/local/www/vpn_openvpn_server.php:1621 +#: usr/local/www/vpn_openvpn_server.php:1662 +#: usr/local/www/system_authservers.php:764 +#: usr/local/www/system_authservers.php:780 +#: usr/local/www/vpn_openvpn_server.php:1714 +#: usr/local/www/system_authservers.php:797 +#: usr/local/www/system_authservers.php:839 +msgid "edit server" +msgstr "editar servidor" + +#: usr/local/www/system_authservers.php:759 +#: usr/local/www/system_authservers.php:767 +#: usr/local/www/system_authservers.php:783 +#: usr/local/www/system_authservers.php:800 +#: usr/local/www/system_authservers.php:842 +msgid "Do you really want to delete this Server?" +msgstr "Você realmente deseja apagar esse Servidor?" + +#: usr/local/www/system_authservers.php:760 +#: usr/local/www/vpn_openvpn_server.php:1483 +#: usr/local/www/vpn_openvpn_server.php:1625 +#: usr/local/www/vpn_openvpn_server.php:1666 +#: usr/local/www/system_authservers.php:768 +#: usr/local/www/system_authservers.php:784 +#: usr/local/www/vpn_openvpn_server.php:1718 +#: usr/local/www/system_authservers.php:801 +#: usr/local/www/system_authservers.php:843 +msgid "delete server" +msgstr "apagar servidor" + +#: usr/local/www/system_authservers.php:772 +#: usr/local/www/vpn_openvpn_server.php:1496 +#: usr/local/www/vpn_openvpn_server.php:1638 +#: usr/local/www/vpn_openvpn_server.php:1679 +#: usr/local/www/system_authservers.php:782 +#: usr/local/www/system_authservers.php:798 +#: usr/local/www/vpn_openvpn_server.php:1731 +#: usr/local/www/system_authservers.php:770 +#: usr/local/www/system_authservers.php:812 +msgid "add server" +msgstr "adicionar servidor" + +#: usr/local/www/system_authservers.php:779 +#: usr/local/www/system_authservers.php:789 +#: usr/local/www/system_authservers.php:805 +#: usr/local/www/system_authservers.php:777 +#: usr/local/www/system_authservers.php:819 +msgid "Additional authentication servers can be added here." +msgstr "Servidores de autenticação adicionais podem ser adicionados aqui." + +#: usr/local/www/system_camanager.php:44 +msgid "Import an existing Certificate Authority" +msgstr "Importar uma Autoridade Certificadora existente" + +#: usr/local/www/system_camanager.php:45 +msgid "Create an internal Certificate Authority" +msgstr "Criar uma Autoridade de Certificadora interna" + +#: usr/local/www/system_camanager.php:46 +msgid "Create an intermediate Certificate Authority" +msgstr "Cria uma Autoridade Certificadora intermediária" + +#: usr/local/www/system_camanager.php:50 usr/local/www/system_camanager.php:51 +msgid "Certificate Authority Manager" +msgstr "Gerenciador de Autoridade de Certificadora" + +#: usr/local/www/system_camanager.php:95 usr/local/www/system_camanager.php:96 +#, php-format +msgid "Certificate Authority %s and its CRLs (if any) successfully deleted" +msgstr "Autorizadora de Certificado %s e suas CRLs (se existir) excluídas com sucesso" + +#: usr/local/www/system_camanager.php:166 +#: usr/local/www/system_camanager.php:402 +#: usr/local/www/system_certmanager.php:165 +#: usr/local/www/system_certmanager.php:511 +#: usr/local/www/system_certmanager.php:193 +#: usr/local/www/system_certmanager.php:610 +#: usr/local/www/system_camanager.php:168 +#: usr/local/www/system_camanager.php:409 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/system_certmanager.php:619 +#: usr/local/www/system_certmanager.php:620 +msgid "Certificate data" +msgstr "Dados do Certificado" + +#: usr/local/www/system_camanager.php:170 +#: usr/local/www/system_camanager.php:172 +msgid "Encrypted private keys are not yet supported." +msgstr "Chaves privadas criptografadas não são suportadas ainda." + +#: usr/local/www/system_camanager.php:178 +#: usr/local/www/system_camanager.php:194 +#: usr/local/www/system_camanager.php:453 +#: usr/local/www/system_certmanager.php:178 +#: usr/local/www/system_certmanager.php:194 +#: usr/local/www/system_certmanager.php:566 +#: usr/local/www/system_certmanager.php:656 +#: usr/local/www/system_usermanager.php:191 +#: usr/local/www/system_usermanager.php:725 +#: usr/local/www/system_certmanager.php:206 +#: usr/local/www/system_certmanager.php:223 +#: usr/local/www/system_certmanager.php:665 +#: usr/local/www/system_certmanager.php:820 +#: usr/local/www/system_usermanager.php:723 +#: usr/local/www/system_camanager.php:454 +#: usr/local/www/system_camanager.php:180 +#: usr/local/www/system_camanager.php:196 +#: usr/local/www/system_camanager.php:461 +#: usr/local/www/system_certmanager.php:209 +#: usr/local/www/system_certmanager.php:226 +#: usr/local/www/system_certmanager.php:674 +#: usr/local/www/system_certmanager.php:845 +#: usr/local/www/system_certmanager.php:675 +#: usr/local/www/system_certmanager.php:849 +msgid "Key length" +msgstr "Tamanho da chave" + +#: usr/local/www/system_camanager.php:179 +#: usr/local/www/system_camanager.php:195 +#: usr/local/www/system_camanager.php:469 +#: usr/local/www/system_certmanager.php:179 +#: usr/local/www/system_certmanager.php:582 +#: usr/local/www/system_crlmanager.php:366 +#: usr/local/www/system_usermanager.php:192 +#: usr/local/www/system_usermanager.php:739 +#: usr/local/www/vpn_ipsec_phase1.php:758 +#: usr/local/www/vpn_ipsec_phase2.php:619 +#: usr/local/www/system_certmanager.php:208 +#: usr/local/www/system_certmanager.php:698 +#: usr/local/www/system_usermanager.php:737 +#: usr/local/www/system_camanager.php:470 +#: usr/local/www/vpn_ipsec_phase2.php:645 +#: usr/local/www/vpn_ipsec_phase1.php:771 +#: usr/local/www/system_crlmanager.php:367 +#: usr/local/www/vpn_ipsec_phase2.php:741 +#: usr/local/www/vpn_ipsec_phase1.php:768 +#: usr/local/www/system_camanager.php:181 +#: usr/local/www/system_camanager.php:197 +#: usr/local/www/system_camanager.php:493 +#: usr/local/www/system_certmanager.php:211 +#: usr/local/www/system_certmanager.php:723 +#: usr/local/www/vpn_ipsec_phase1.php:789 +#: usr/local/www/vpn_ipsec_phase2.php:762 +#: usr/local/www/system_certmanager.php:724 +msgid "Lifetime" +msgstr "Tempo de vida" + +#: usr/local/www/system_camanager.php:180 +#: usr/local/www/system_camanager.php:196 +#: usr/local/www/system_certmanager.php:180 +#: usr/local/www/system_certmanager.php:195 +#: usr/local/www/system_certmanager.php:209 +#: usr/local/www/system_certmanager.php:224 +#: usr/local/www/system_camanager.php:182 +#: usr/local/www/system_camanager.php:198 +#: usr/local/www/system_certmanager.php:212 +#: usr/local/www/system_certmanager.php:227 +msgid "Distinguished name Country Code" +msgstr "Código de País de nome distinto" + +#: usr/local/www/system_camanager.php:181 +#: usr/local/www/system_camanager.php:197 +#: usr/local/www/system_certmanager.php:181 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/system_certmanager.php:210 +#: usr/local/www/system_certmanager.php:225 +#: usr/local/www/system_camanager.php:183 +#: usr/local/www/system_camanager.php:199 +#: usr/local/www/system_certmanager.php:213 +#: usr/local/www/system_certmanager.php:228 +msgid "Distinguished name State or Province" +msgstr "Estado ou Província de nome distinto" + +#: usr/local/www/system_camanager.php:182 +#: usr/local/www/system_camanager.php:198 +#: usr/local/www/system_certmanager.php:182 +#: usr/local/www/system_certmanager.php:197 +#: usr/local/www/system_certmanager.php:211 +#: usr/local/www/system_certmanager.php:226 +#: usr/local/www/system_camanager.php:184 +#: usr/local/www/system_camanager.php:200 +#: usr/local/www/system_certmanager.php:214 +#: usr/local/www/system_certmanager.php:229 +msgid "Distinguished name City" +msgstr "Cidade de nome distinto" + +#: usr/local/www/system_camanager.php:183 +#: usr/local/www/system_camanager.php:199 +#: usr/local/www/system_certmanager.php:183 +#: usr/local/www/system_certmanager.php:198 +#: usr/local/www/system_certmanager.php:212 +#: usr/local/www/system_certmanager.php:227 +#: usr/local/www/system_camanager.php:185 +#: usr/local/www/system_camanager.php:201 +#: usr/local/www/system_certmanager.php:215 +#: usr/local/www/system_certmanager.php:230 +msgid "Distinguished name Organization" +msgstr "Organização de nome distinto" + +#: usr/local/www/system_camanager.php:184 +#: usr/local/www/system_camanager.php:200 +#: usr/local/www/system_certmanager.php:184 +#: usr/local/www/system_certmanager.php:199 +#: usr/local/www/system_certmanager.php:213 +#: usr/local/www/system_certmanager.php:228 +#: usr/local/www/system_camanager.php:186 +#: usr/local/www/system_camanager.php:202 +#: usr/local/www/system_certmanager.php:216 +#: usr/local/www/system_certmanager.php:231 +msgid "Distinguished name Email Address" +msgstr "Endereço de E-mail de nome distinto" + +#: usr/local/www/system_camanager.php:185 +#: usr/local/www/system_camanager.php:201 +#: usr/local/www/system_certmanager.php:185 +#: usr/local/www/system_certmanager.php:200 +#: usr/local/www/system_certmanager.php:214 +#: usr/local/www/system_certmanager.php:229 +#: usr/local/www/system_camanager.php:187 +#: usr/local/www/system_camanager.php:203 +#: usr/local/www/system_certmanager.php:217 +#: usr/local/www/system_certmanager.php:232 +msgid "Distinguished name Common Name" +msgstr "Nome Comum de nome distinto" + +#: usr/local/www/system_camanager.php:193 +#: usr/local/www/system_camanager.php:436 +#: usr/local/www/system_camanager.php:437 +#: usr/local/www/system_camanager.php:195 +#: usr/local/www/system_camanager.php:444 +msgid "Signing Certificate Authority" +msgstr "Assinatura da Autoridade Certificadora" + +#: usr/local/www/system_camanager.php:348 +#: usr/local/www/system_certmanager.php:458 +#: usr/local/www/system_crlmanager.php:283 +#: usr/local/www/system_certmanager.php:557 +#: usr/local/www/system_crlmanager.php:284 +#: usr/local/www/system_camanager.php:355 +#: usr/local/www/system_certmanager.php:566 +#: usr/local/www/system_certmanager.php:567 +msgid "CAs" +msgstr "CAs" + +#: usr/local/www/system_camanager.php:349 +#: usr/local/www/system_camanager.php:568 +#: usr/local/www/system_certmanager.php:459 +#: usr/local/www/system_crlmanager.php:284 +#: usr/local/www/system_crlmanager.php:489 +#: usr/local/www/system_certmanager.php:558 +#: usr/local/www/system_camanager.php:569 +#: usr/local/www/system_crlmanager.php:285 +#: usr/local/www/system_crlmanager.php:522 +#: usr/local/www/system_camanager.php:356 +#: usr/local/www/system_camanager.php:593 +#: usr/local/www/system_certmanager.php:567 +#: usr/local/www/system_certmanager.php:568 +msgid "Certificates" +msgstr "Certificados" + +#: usr/local/www/system_camanager.php:350 +#: usr/local/www/system_certmanager.php:460 +#: usr/local/www/system_crlmanager.php:285 +#: usr/local/www/system_certmanager.php:559 +#: usr/local/www/system_crlmanager.php:286 +#: usr/local/www/system_camanager.php:357 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_certmanager.php:569 +msgid "Certificate Revocation" +msgstr "Revogação de Certificado" + +#: usr/local/www/system_camanager.php:376 +#: usr/local/www/system_certmanager.php:475 +#: usr/local/www/system_crlmanager.php:300 +#: usr/local/www/system_certmanager.php:574 +#: usr/local/www/system_crlmanager.php:301 +#: usr/local/www/system_camanager.php:383 +#: usr/local/www/system_certmanager.php:583 +#: usr/local/www/system_certmanager.php:584 +msgid "Method" +msgstr "Método" + +#: usr/local/www/system_camanager.php:398 +#: usr/local/www/system_camanager.php:405 +msgid "Existing Certificate Authority" +msgstr "Fonte Autorizadora Existente" + +#: usr/local/www/system_camanager.php:410 +#: usr/local/www/system_camanager.php:417 +msgid "Certificate Private Key" +msgstr "Chave Privada do Certificado" + +#: usr/local/www/system_camanager.php:410 +#: usr/local/www/system_camanager.php:417 +msgid "(optional)" +msgstr "(opcional)" + +#: usr/local/www/system_camanager.php:414 +#: usr/local/www/system_camanager.php:421 +msgid "Paste the private key for the above certificate here. This is optional in most cases, but required if you need to generate a Certificate Revocation List (CRL)." +msgstr "Cole a chave privada para o certificado acima aqui. Isso é opcional na maioria dos casos, mas requerido se você precisa gerar uma Lista de Revogação de Certificado (CRL)." + +#: usr/local/www/system_camanager.php:420 +#: usr/local/www/system_crlmanager.php:374 +#: usr/local/www/system_crlmanager.php:375 +msgid "Serial" +msgstr "Serial" + +#: usr/local/www/system_camanager.php:433 +#: usr/local/www/system_camanager.php:434 +#: usr/local/www/system_camanager.php:441 +msgid "Internal Certificate Authority" +msgstr "Fonte Autorizadora de Certificado Interno" + +#: usr/local/www/system_camanager.php:472 +#: usr/local/www/system_certmanager.php:585 +#: usr/local/www/system_crlmanager.php:369 +#: usr/local/www/system_certmanager.php:701 +#: usr/local/www/system_camanager.php:473 +#: usr/local/www/system_crlmanager.php:370 +#: usr/local/www/system_camanager.php:496 +#: usr/local/www/system_certmanager.php:726 +#: usr/local/www/system_certmanager.php:727 +msgid "days" +msgstr "dias" + +#: usr/local/www/system_camanager.php:480 +#: usr/local/www/system_certmanager.php:593 +#: usr/local/www/system_certmanager.php:676 +#: usr/local/www/system_certmanager.php:709 +#: usr/local/www/system_certmanager.php:842 +#: usr/local/www/system_camanager.php:481 +#: usr/local/www/system_camanager.php:504 +#: usr/local/www/system_certmanager.php:734 +#: usr/local/www/system_certmanager.php:883 +#: usr/local/www/system_certmanager.php:735 +#: usr/local/www/system_certmanager.php:887 +msgid "Country Code" +msgstr "Código do país" + +#: usr/local/www/system_camanager.php:494 +#: usr/local/www/system_certmanager.php:599 +#: usr/local/www/system_certmanager.php:690 +#: usr/local/www/system_certmanager.php:715 +#: usr/local/www/system_certmanager.php:856 +#: usr/local/www/system_camanager.php:495 +#: usr/local/www/system_camanager.php:519 +#: usr/local/www/system_certmanager.php:740 +#: usr/local/www/system_certmanager.php:898 +#: usr/local/www/system_certmanager.php:741 +#: usr/local/www/system_certmanager.php:902 +msgid "State or Province" +msgstr "Estado ou Província" + +#: usr/local/www/system_camanager.php:498 +#: usr/local/www/system_camanager.php:508 +#: usr/local/www/system_camanager.php:518 +#: usr/local/www/system_camanager.php:528 +#: usr/local/www/system_camanager.php:538 +#: usr/local/www/system_camanager.php:499 +#: usr/local/www/system_camanager.php:509 +#: usr/local/www/system_camanager.php:519 +#: usr/local/www/system_camanager.php:529 +#: usr/local/www/system_camanager.php:539 +#: usr/local/www/system_camanager.php:523 +#: usr/local/www/system_camanager.php:533 +#: usr/local/www/system_camanager.php:543 +#: usr/local/www/system_camanager.php:553 +#: usr/local/www/system_camanager.php:563 +msgid "ex:" +msgstr "ex:" + +#: usr/local/www/system_camanager.php:500 +#: usr/local/www/system_certmanager.php:696 +#: usr/local/www/system_certmanager.php:862 +#: usr/local/www/system_camanager.php:501 +#: usr/local/www/system_camanager.php:525 +#: usr/local/www/system_certmanager.php:904 +#: usr/local/www/system_certmanager.php:908 +msgid "Texas" +msgstr "Texas" + +#: usr/local/www/system_camanager.php:504 +#: usr/local/www/system_certmanager.php:605 +#: usr/local/www/system_certmanager.php:700 +#: usr/local/www/system_certmanager.php:721 +#: usr/local/www/system_certmanager.php:866 +#: usr/local/www/system_camanager.php:505 +#: usr/local/www/system_camanager.php:529 +#: usr/local/www/system_certmanager.php:746 +#: usr/local/www/system_certmanager.php:908 +#: usr/local/www/system_certmanager.php:747 +#: usr/local/www/system_certmanager.php:912 +msgid "City" +msgstr "Cidade" + +#: usr/local/www/system_camanager.php:510 +#: usr/local/www/system_certmanager.php:706 +#: usr/local/www/system_certmanager.php:872 +#: usr/local/www/system_camanager.php:511 +#: usr/local/www/system_camanager.php:535 +#: usr/local/www/system_certmanager.php:914 +#: usr/local/www/system_certmanager.php:918 +msgid "Austin" +msgstr "Austin" + +#: usr/local/www/system_camanager.php:514 +#: usr/local/www/system_certmanager.php:611 +#: usr/local/www/system_certmanager.php:710 +#: usr/local/www/system_certmanager.php:727 +#: usr/local/www/system_certmanager.php:876 +#: usr/local/www/system_camanager.php:515 +#: usr/local/www/system_camanager.php:539 +#: usr/local/www/system_certmanager.php:752 +#: usr/local/www/system_certmanager.php:918 +#: usr/local/www/system_certmanager.php:753 +#: usr/local/www/system_certmanager.php:922 +msgid "Organization" +msgstr "Organização" + +#: usr/local/www/system_camanager.php:520 +#: usr/local/www/system_certmanager.php:716 +#: usr/local/www/system_certmanager.php:882 +#: usr/local/www/system_camanager.php:521 +#: usr/local/www/system_camanager.php:545 +#: usr/local/www/system_certmanager.php:924 +#: usr/local/www/system_certmanager.php:928 +msgid "My Company Inc." +msgstr "Minha Companhia Ltda." + +#: usr/local/www/system_camanager.php:530 +#: usr/local/www/system_camanager.php:531 +#: usr/local/www/system_camanager.php:555 +msgid "admin@mycompany.com" +msgstr "admin@empresa.com" + +#: usr/local/www/system_camanager.php:540 +#: usr/local/www/system_camanager.php:541 +#: usr/local/www/system_camanager.php:565 +msgid "internal-ca" +msgstr "CA interno" + +#: usr/local/www/system_camanager.php:566 +#: usr/local/www/system_crlmanager.php:488 +#: usr/local/www/system_camanager.php:567 +#: usr/local/www/system_crlmanager.php:521 +#: usr/local/www/system_camanager.php:591 +msgid "Internal" +msgstr "Interno" + +#: usr/local/www/system_camanager.php:567 +#: usr/local/www/system_certmanager.php:855 +#: usr/local/www/system_certmanager.php:1021 +#: usr/local/www/system_camanager.php:568 +#: usr/local/www/system_camanager.php:592 +#: usr/local/www/system_certmanager.php:1063 +#: usr/local/www/system_certmanager.php:1067 +msgid "Issuer" +msgstr "Emissor" + +#: usr/local/www/system_camanager.php:569 +#: usr/local/www/system_certmanager.php:856 +#: usr/local/www/system_certmanager.php:1022 +#: usr/local/www/system_camanager.php:570 +#: usr/local/www/system_camanager.php:594 +#: usr/local/www/system_certmanager.php:1064 +#: usr/local/www/system_certmanager.php:1068 +msgid "Distinguished Name" +msgstr "Nome distinto" + +#: usr/local/www/system_camanager.php:579 +#: usr/local/www/system_certmanager.php:869 +#: usr/local/www/system_certmanager.php:1036 +#: usr/local/www/system_camanager.php:580 +#: usr/local/www/system_camanager.php:605 +#: usr/local/www/system_certmanager.php:1079 +#: usr/local/www/system_certmanager.php:1083 +msgid "self-signed" +msgstr "auto-assinada" + +#: usr/local/www/system_camanager.php:581 +#: usr/local/www/system_certmanager.php:871 +#: usr/local/www/system_certmanager.php:1038 +#: usr/local/www/system_camanager.php:582 +#: usr/local/www/system_camanager.php:607 +#: usr/local/www/system_certmanager.php:1081 +#: usr/local/www/system_certmanager.php:1085 +msgid "external" +msgstr "externa" + +#: usr/local/www/system_camanager.php:626 +#: usr/local/www/system_camanager.php:627 +#: usr/local/www/system_camanager.php:665 +msgid "edit CA" +msgstr "Editar CA" + +#: usr/local/www/system_camanager.php:629 +#: usr/local/www/system_camanager.php:630 +#: usr/local/www/system_camanager.php:668 +msgid "export CA cert" +msgstr "exportar certificado CA" + +#: usr/local/www/system_camanager.php:633 +#: usr/local/www/system_camanager.php:634 +#: usr/local/www/system_camanager.php:672 +msgid "export CA private key" +msgstr "exportar chave privada da CA" + +#: usr/local/www/system_camanager.php:636 +#: usr/local/www/system_camanager.php:637 +#: usr/local/www/system_camanager.php:675 +msgid "Do you really want to delete this Certificate Authority and its CRLs, and unreference any associated certificates?" +msgstr "Você realmente deseja apagar essa Autoridade Certificadora (CA), todos os seus CRLs e remover a referência de qualquer certificado associado?" + +#: usr/local/www/system_camanager.php:637 +#: usr/local/www/system_camanager.php:638 +#: usr/local/www/system_camanager.php:676 +msgid "delete ca" +msgstr "apagar CA" + +#: usr/local/www/system_camanager.php:649 +#: usr/local/www/system_certmanager.php:952 +#: usr/local/www/system_certmanager.php:1132 +#: usr/local/www/system_camanager.php:650 +#: usr/local/www/system_certmanager.php:1135 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1191 +#: usr/local/www/system_certmanager.php:1195 +msgid "add or import ca" +msgstr "adicionar ou importar CA" + +#: usr/local/www/system_camanager.php:649 +#: usr/local/www/system_certmanager.php:952 +#: usr/local/www/system_certmanager.php:1132 +#: usr/local/www/system_camanager.php:650 +#: usr/local/www/system_certmanager.php:1135 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1191 +#: usr/local/www/system_certmanager.php:1195 +msgid "add ca" +msgstr "adicionar CA" + +#: usr/local/www/system_camanager.php:656 +#: usr/local/www/system_camanager.php:657 +#: usr/local/www/system_camanager.php:695 +msgid "Additional trusted Certificate Authorities can be added here." +msgstr "Fontes Certificadoras confiáveis adicionais podem ser adicionadas aqui." + +#: usr/local/www/system_certmanager.php:44 +msgid "Import an existing Certificate" +msgstr "Importar um Certificado existente" + +#: usr/local/www/system_certmanager.php:45 +msgid "Create an internal Certificate" +msgstr "Criar um certificado interno" + +#: usr/local/www/system_certmanager.php:46 +msgid "Create a Certificate Signing Request" +msgstr "Criar uma Requisição de Assinatura de Certificado" + +#: usr/local/www/system_certmanager.php:51 +#: usr/local/www/system_certmanager.php:56 +#: usr/local/www/system_certmanager.php:57 +msgid "Certificate Manager" +msgstr "Gerenciador de Certificado" + +#: usr/local/www/system_certmanager.php:57 +#: usr/local/www/system_certmanager.php:62 +#: usr/local/www/system_certmanager.php:63 +msgid "Choose an existing certificate" +msgstr "Escolha um certificado existente" + +#: usr/local/www/system_certmanager.php:96 +#: usr/local/www/system_certmanager.php:101 +#: usr/local/www/system_certmanager.php:102 +#, php-format +msgid "Certificate %s successfully deleted" +msgstr "Certificado %s foi apagado com sucesso" + +#: usr/local/www/system_certmanager.php:166 +#: usr/local/www/system_certmanager.php:194 +#: usr/local/www/system_certmanager.php:197 +msgid "Key data" +msgstr "Dado chave" + +#: usr/local/www/system_certmanager.php:177 +#: usr/local/www/system_certmanager.php:549 +#: usr/local/www/system_usermanager.php:190 +#: usr/local/www/system_usermanager.php:711 +#: usr/local/www/system_certmanager.php:205 +#: usr/local/www/system_certmanager.php:648 +#: usr/local/www/system_usermanager.php:709 +#: usr/local/www/system_certmanager.php:208 +#: usr/local/www/system_certmanager.php:657 +#: usr/local/www/system_certmanager.php:658 +msgid "Certificate authority" +msgstr "Fonte Autorizadora" + +#: usr/local/www/system_certmanager.php:205 +#: usr/local/www/system_certmanager.php:234 +#: usr/local/www/system_certmanager.php:237 +msgid "Existing Certificate Choice" +msgstr "Escolha de Certificado Existente" + +#: usr/local/www/system_certmanager.php:300 +#: usr/local/www/system_certmanager.php:796 +#: usr/local/www/system_certmanager.php:840 +#: usr/local/www/system_certmanager.php:387 +#: usr/local/www/system_certmanager.php:962 +#: usr/local/www/system_certmanager.php:1006 +#: usr/local/www/system_certmanager.php:396 +#: usr/local/www/system_certmanager.php:1004 +#: usr/local/www/system_certmanager.php:1048 +#: usr/local/www/system_certmanager.php:1008 +#: usr/local/www/system_certmanager.php:1052 +msgid "Update" +msgstr "Atualizar" + +#: usr/local/www/system_certmanager.php:308 +#: usr/local/www/system_certmanager.php:822 +#: usr/local/www/system_certmanager.php:395 +#: usr/local/www/system_certmanager.php:988 +#: usr/local/www/system_certmanager.php:404 +#: usr/local/www/system_certmanager.php:1030 +msgid "Final Certificate data" +msgstr "Dado de Certificado Final" + +#: usr/local/www/system_certmanager.php:328 +#: usr/local/www/system_certmanager.php:415 +#: usr/local/www/system_certmanager.php:424 +#, php-format +msgid "The certificate modulus does not match the signing request modulus." +msgstr "O módulo de certificado não coincide com o módulo de solicitação de assinatura." + +#: usr/local/www/system_certmanager.php:507 +#: usr/local/www/system_certmanager.php:606 +#: usr/local/www/system_certmanager.php:615 +#: usr/local/www/system_certmanager.php:616 +msgid "Import Certificate" +msgstr "Importar Certificado" + +#: usr/local/www/system_certmanager.php:519 +#: usr/local/www/system_certmanager.php:618 +#: usr/local/www/system_certmanager.php:627 +#: usr/local/www/system_certmanager.php:628 +msgid "Private key data" +msgstr "Dado de chave privada" + +#: usr/local/www/system_certmanager.php:523 +#: usr/local/www/system_certmanager.php:622 +#: usr/local/www/system_certmanager.php:631 +#: usr/local/www/system_certmanager.php:632 +msgid "Paste a private key in X.509 PEM format here." +msgstr "Cole uma chave privada no formato X.509 PEM aqui." + +#: usr/local/www/system_certmanager.php:533 +#: usr/local/www/system_certmanager.php:632 +#: usr/local/www/system_certmanager.php:641 +#: usr/local/www/system_certmanager.php:642 +msgid "Internal Certificate" +msgstr "Certificação Interna" + +#: usr/local/www/system_certmanager.php:540 +#: usr/local/www/system_certmanager.php:639 +#: usr/local/www/system_certmanager.php:648 +#: usr/local/www/system_certmanager.php:649 +msgid "No internal Certificate Authorities have been defined. You must" +msgstr "Nenhuma Fonte Autorizadora de Certificado (CA) interna foi definida. Você deve" + +#: usr/local/www/system_certmanager.php:542 +#: usr/local/www/system_certmanager.php:641 +#: usr/local/www/system_certmanager.php:650 +#: usr/local/www/system_certmanager.php:651 +msgid "an internal CA before creating an internal certificate." +msgstr "um CA interno antes de criar um certificado interno." + +#: usr/local/www/system_certmanager.php:623 +#: usr/local/www/system_certmanager.php:726 +#: usr/local/www/system_certmanager.php:739 +#: usr/local/www/system_certmanager.php:892 +#: usr/local/www/system_certmanager.php:764 +#: usr/local/www/system_certmanager.php:934 +#: usr/local/www/system_certmanager.php:765 +#: usr/local/www/system_certmanager.php:938 +msgid "webadmin@mycompany.com" +msgstr "webadmin@empresa.com" + +#: usr/local/www/system_certmanager.php:637 +#: usr/local/www/system_certmanager.php:736 +#: usr/local/www/system_certmanager.php:753 +#: usr/local/www/system_certmanager.php:902 +#: usr/local/www/system_certmanager.php:778 +#: usr/local/www/system_certmanager.php:944 +#: usr/local/www/system_certmanager.php:779 +#: usr/local/www/system_certmanager.php:948 +msgid "www.example.com" +msgstr "www.examplo.com" + +#: usr/local/www/system_certmanager.php:653 +#: usr/local/www/system_certmanager.php:817 +#: usr/local/www/system_certmanager.php:842 +#: usr/local/www/system_certmanager.php:846 +msgid "External Signing Request" +msgstr "Requisição de Assinatura Externa" + +#: usr/local/www/system_certmanager.php:749 +#: usr/local/www/system_certmanager.php:915 +#: usr/local/www/system_certmanager.php:957 +#: usr/local/www/system_certmanager.php:961 +msgid "Choose an Existing Certificate" +msgstr "Escolher um Certificado Existente" + +#: usr/local/www/system_certmanager.php:752 +#: usr/local/www/system_certmanager.php:918 +#: usr/local/www/system_certmanager.php:960 +#: usr/local/www/system_certmanager.php:964 +msgid "Existing Certificates" +msgstr "Certificados Existentes" + +#: usr/local/www/system_certmanager.php:810 +#: usr/local/www/system_certmanager.php:976 +#: usr/local/www/system_certmanager.php:1018 +#: usr/local/www/system_certmanager.php:1022 +msgid "Complete Signing Request" +msgstr "Requisição de assinatura completa" + +#: usr/local/www/system_certmanager.php:814 +#: usr/local/www/system_certmanager.php:980 +#: usr/local/www/system_certmanager.php:1022 +msgid "Signing Request data" +msgstr "Assinando dado Requisitado" + +#: usr/local/www/system_certmanager.php:818 +#: usr/local/www/system_certmanager.php:984 +#: usr/local/www/system_certmanager.php:1026 +#: usr/local/www/system_certmanager.php:1030 +msgid "Copy the certificate signing data from here and forward it to your certificate authority for signing." +msgstr "Copie o dado da assinatura do certificado daqui e encaminhe-o para sua fonte autorizadora de certificado para ser assinado." + +#: usr/local/www/system_certmanager.php:826 +#: usr/local/www/system_certmanager.php:992 +#: usr/local/www/system_certmanager.php:1034 +#: usr/local/www/system_certmanager.php:1038 +msgid "Paste the certificate received from your certificate authority here." +msgstr "Cole o certificado recebido de sua autoridade certificadora aqui." + +#: usr/local/www/system_certmanager.php:857 +#: usr/local/www/system_crlmanager.php:490 +#: usr/local/www/system_certmanager.php:1023 +#: usr/local/www/system_crlmanager.php:523 +#: usr/local/www/system_certmanager.php:1065 +#: usr/local/www/system_certmanager.php:1069 +msgid "In Use" +msgstr "Em Uso" + +#: usr/local/www/system_certmanager.php:877 +#: usr/local/www/system_certmanager.php:1044 +#: usr/local/www/system_certmanager.php:1087 +#: usr/local/www/system_certmanager.php:1091 +msgid "external - signature pending" +msgstr "externa - assinatura pendente" + +#: usr/local/www/system_certmanager.php:926 +#: usr/local/www/system_usermanager.php:658 +#: usr/local/www/system_certmanager.php:1103 +#: usr/local/www/system_usermanager.php:656 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1162 +#: usr/local/www/system_certmanager.php:1166 +msgid "export cert" +msgstr "exportar cert" + +#: usr/local/www/system_certmanager.php:926 +#: usr/local/www/system_certmanager.php:929 +#: usr/local/www/system_certmanager.php:1103 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1162 +#: usr/local/www/system_certmanager.php:1165 +#: usr/local/www/system_certmanager.php:1166 +#: usr/local/www/system_certmanager.php:1169 +msgid "export ca" +msgstr "exportar CA" + +#: usr/local/www/system_certmanager.php:929 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1165 +#: usr/local/www/system_certmanager.php:1169 +msgid "export key" +msgstr "exportar chave" + +#: usr/local/www/system_certmanager.php:932 +#: usr/local/www/system_certmanager.php:1112 +#: usr/local/www/system_certmanager.php:1115 +#: usr/local/www/system_certmanager.php:1171 +#: usr/local/www/system_certmanager.php:1175 +msgid "Do you really want to delete this Certificate?" +msgstr "Você realmente deseja apagar esse Certificado?" + +#: usr/local/www/system_certmanager.php:933 +#: usr/local/www/system_usermanager.php:661 +#: usr/local/www/system_certmanager.php:1113 +#: usr/local/www/system_usermanager.php:659 +#: usr/local/www/system_certmanager.php:1116 +#: usr/local/www/system_certmanager.php:1172 +#: usr/local/www/system_certmanager.php:1176 +msgid "delete cert" +msgstr "apagar cert" + +#: usr/local/www/system_certmanager.php:939 +#: usr/local/www/system_certmanager.php:1119 +#: usr/local/www/system_certmanager.php:1122 +#: usr/local/www/system_certmanager.php:1178 +#: usr/local/www/system_certmanager.php:1182 +msgid "update csr" +msgstr "atualizar csr" + +#: usr/local/www/system_certmanager.php:958 +#: usr/local/www/system_certmanager.php:1138 +#: usr/local/www/system_certmanager.php:1141 +#: usr/local/www/system_certmanager.php:1197 +#: usr/local/www/system_certmanager.php:1201 +msgid "Note: You can only delete a certificate if it is not currently in use." +msgstr "NOTA: Você só pode excluir um certificado se o mesmo não estiver em uso." + +#: usr/local/www/system_crlmanager.php:46 +msgid "Certificate Revocation List Manager" +msgstr "Gerenciador de Lista de Revogação de Certificado" + +#: usr/local/www/system_crlmanager.php:49 +msgid "Create an internal Certificate Revocation List" +msgstr "Crie uma Lista de Revogação de Certificado interna" + +#: usr/local/www/system_crlmanager.php:50 +msgid "Import an existing Certificate Revocation List" +msgstr "Importe uma Lista de Revogação de Certificado existente" + +#: usr/local/www/system_crlmanager.php:86 +msgid "Invalid CRL reference." +msgstr "Referência a Lista de Revogação de Certificado inválida." + +#: usr/local/www/system_crlmanager.php:92 +#, php-format +msgid "Certificate Revocation List %s is in use and cannot be deleted" +msgstr "Lista de Revogação de Certificado %s esta sendo usada e não pode ser apagada" + +#: usr/local/www/system_crlmanager.php:98 +#, php-format +msgid "Certificate Revocation List %s successfully deleted" +msgstr "Lista de Revogação de Certificado %s apagada com sucesso" + +#: usr/local/www/system_crlmanager.php:136 +msgid "Both the Certificate and CRL must be specified." +msgstr "O Certificado e Lista de Revogação de Certificado devem ser especificados." + +#: usr/local/www/system_crlmanager.php:140 +msgid "CA mismatch between the Certificate and CRL. Unable to Revoke." +msgstr "Fonte Certificadora incompatível entre o Certificado e Lista de Revogação de Certificado. Impossível revogar." + +#: usr/local/www/system_crlmanager.php:143 +msgid "Cannot revoke certificates for an imported/external CRL." +msgstr "Não é possível revogar certificados para uma Lista de Revogação de Certificado importada/externa." + +#: usr/local/www/system_crlmanager.php:175 +#: usr/local/www/system_crlmanager.php:177 +#, php-format +msgid "Deleted Certificate %s from CRL %s" +msgstr "Remover Certificado %s da Lista de Revogação de Certificado %s" + +#: usr/local/www/system_crlmanager.php:179 +#, php-format +msgid "Failed to delete Certificate %s from CRL %s" +msgstr "Falhou ao apagar o Cerficiado %s da Lista de Revogação de Certificado %s" + +#: usr/local/www/system_crlmanager.php:194 +#: usr/local/www/system_crlmanager.php:193 +msgid "Certificate Revocation List data" +msgstr "Dados de Lista de Revogação de Certificado" + +#: usr/local/www/system_crlmanager.php:201 +#: usr/local/www/system_crlmanager.php:324 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/vpn_openvpn_server.php:287 +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/system_crlmanager.php:200 +#: usr/local/www/system_crlmanager.php:325 +#: usr/local/www/vpn_openvpn_server.php:288 +#: usr/local/www/vpn_openvpn_client.php:220 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/vpn_openvpn_server.php:309 +msgid "Certificate Authority" +msgstr "Fonte Certificadora" + +#: usr/local/www/system_crlmanager.php:345 +#: usr/local/www/system_crlmanager.php:346 +msgid "Existing Certificate Revocation List" +msgstr "Lista de Revogação de Certificado existente" + +#: usr/local/www/system_crlmanager.php:349 +#: usr/local/www/system_crlmanager.php:350 +#: usr/local/www/system_crlmanager.php:410 +msgid "CRL data" +msgstr "Dado de Lista de Revogação de Certificado" + +#: usr/local/www/system_crlmanager.php:353 +#: usr/local/www/system_crlmanager.php:354 +#: usr/local/www/system_crlmanager.php:414 +msgid "Paste a Certificate Revocation List in X.509 CRL format here." +msgstr "Copie uma Lista de Revogação de Certificado no formato X.509 CRL aqui." + +#: usr/local/www/system_crlmanager.php:363 +#: usr/local/www/system_crlmanager.php:364 +msgid "Internal Certificate Revocation List" +msgstr "Lista de Revogação de Certificado Interna" + +#: usr/local/www/system_crlmanager.php:370 +#: usr/local/www/system_crlmanager.php:371 +msgid "Default: 9999" +msgstr "Padrão: 9999" + +#: usr/local/www/system_crlmanager.php:378 +#: usr/local/www/system_crlmanager.php:379 +msgid "Default: 0" +msgstr "Padrão: 0" + +#: usr/local/www/system_crlmanager.php:401 +#: usr/local/www/system_crlmanager.php:434 +msgid "Currently Revoked Certificates for CRL" +msgstr "Certificados Revogados atualmente para Lista de Revogação de Certificado" + +#: usr/local/www/system_crlmanager.php:405 +#: usr/local/www/system_crlmanager.php:438 +msgid "Certificate Name" +msgstr "Nome do Certificado" + +#: usr/local/www/system_crlmanager.php:406 +#: usr/local/www/system_crlmanager.php:439 +msgid "Revocation Reason" +msgstr "Razão de Revogação" + +#: usr/local/www/system_crlmanager.php:407 +#: usr/local/www/system_crlmanager.php:440 +msgid "Revoked At" +msgstr "Revogado Em" + +#: usr/local/www/system_crlmanager.php:416 +#: usr/local/www/system_crlmanager.php:449 +msgid "No Certificates Found for this CRL." +msgstr "Nenhum Certificado Encontrado para essa Lista de Revogação de Certificado." + +#: usr/local/www/system_crlmanager.php:435 +#: usr/local/www/system_crlmanager.php:468 +msgid "Do you really want to delete this Certificate from the CRL?" +msgstr "Você realmente deseja apagar esse Certificado da CRL?" + +#: usr/local/www/system_crlmanager.php:436 +#: usr/local/www/system_crlmanager.php:469 +msgid "Delete this certificate from the CRL " +msgstr "Remover esse certificado para a Lista de Revogação de Certificado " + +#: usr/local/www/system_crlmanager.php:453 +#: usr/local/www/system_crlmanager.php:486 +msgid "No Certificates Found for this CA." +msgstr "Nenhum Certificado Encontrado para essa Fonte Certificadora." + +#: usr/local/www/system_crlmanager.php:460 +#: usr/local/www/system_crlmanager.php:493 +msgid "Choose a Certificate to Revoke" +msgstr "Escolha um Certificado para Revogar" + +#: usr/local/www/system_crlmanager.php:465 +#: usr/local/www/system_crlmanager.php:498 +msgid "Reason" +msgstr "Razão" + +#: usr/local/www/system_crlmanager.php:527 +#: usr/local/www/system_crlmanager.php:560 +#: usr/local/www/system_crlmanager.php:568 +#, php-format +msgid "Add or Import CRL for %s" +msgstr "Adicionar ou importar Lista de Revogação de Certificado para %s" + +#: usr/local/www/system_crlmanager.php:527 +#: usr/local/www/system_crlmanager.php:531 +#: usr/local/www/system_crlmanager.php:560 +#: usr/local/www/system_crlmanager.php:564 +#: usr/local/www/system_crlmanager.php:568 +#: usr/local/www/system_crlmanager.php:572 +msgid "add crl" +msgstr "adicionar lista de revogação de certificado" + +#: usr/local/www/system_crlmanager.php:531 +#: usr/local/www/system_crlmanager.php:564 +#: usr/local/www/system_crlmanager.php:572 +#, php-format +msgid "Import CRL for %s" +msgstr "Importar CRL para %s" + +#: usr/local/www/system_crlmanager.php:552 +#: usr/local/www/system_crlmanager.php:585 +#: usr/local/www/system_crlmanager.php:593 +msgid "Export CRL" +msgstr "Exportar Lista de Revogação de Certificado" + +#: usr/local/www/system_crlmanager.php:557 +#: usr/local/www/system_crlmanager.php:590 +#: usr/local/www/system_crlmanager.php:594 +#: usr/local/www/system_crlmanager.php:598 +#: usr/local/www/system_crlmanager.php:602 +msgid "Edit CRL" +msgstr "Editar Lista de Revogação de Certificado" + +#: usr/local/www/system_crlmanager.php:561 +#: usr/local/www/system_crlmanager.php:598 +#: usr/local/www/system_crlmanager.php:606 +msgid "Do you really want to delete this Certificate Revocation List?" +msgstr "Você realmente deseja apagar esta Lista de Revogação de Certificado?" + +#: usr/local/www/system_crlmanager.php:562 +#: usr/local/www/system_crlmanager.php:599 +#: usr/local/www/system_crlmanager.php:607 +msgid "Delete CRL" +msgstr "Remover Lista de Revogação de Certificado" + +#: usr/local/www/system_crlmanager.php:582 +#: usr/local/www/system_crlmanager.php:619 +#: usr/local/www/system_crlmanager.php:531 +msgid "Additional Certificate Revocation Lists can be added here." +msgstr "Listas de Certificado de Revogação adicionais podem ser adicionadas aqui." + +#: usr/local/www/system_gateway_groups.php:75 +#: usr/local/www/system_gateway_groups.php:76 +#: usr/local/www/system_gateway_groups.php:85 +msgid "removed gateway group" +msgstr "grupo de gateway removido" + +#: usr/local/www/system_gateway_groups.php:101 +#: usr/local/www/system_gateway_groups.php:102 +#: usr/local/www/system_gateway_groups.php:111 +#, php-format +msgid "The gateway configuration has been changed.%sYou must apply the changes in order for them to take effect." +msgstr "A configuração de gateway foi modificada.%sVocê deve aplicar as mudanças para que elas tenham efeito." + +#: usr/local/www/system_gateway_groups.php:165 +#: usr/local/www/system_gateway_groups.php:166 +#: usr/local/www/system_gateway_groups.php:187 +msgid "Do you really want to delete this gateway group?" +msgstr "Você realmente deseja apagar esse grupo de gateway?" + +#: usr/local/www/system_gateway_groups.php:195 +#: usr/local/www/system_gateway_groups.php:196 +#: usr/local/www/system_gateway_groups.php:205 +msgid "Remember to use these Gateway Groups in firewall rules in order to enable load balancing, failover, or policy-based routing. Without rules directing traffic into the Gateway Groups, they will not be used." +msgstr "Lembre-se de usar esses Grupos de Gateway em regras de firewall para habilitar balanceameno de carga, failover, ou roteamento baseado em políticas. Sem regras direcionando o tráfego para os Grupos de Gateway, eles não serão usados." + +#: usr/local/www/system_gateway_groups_edit.php:50 +#: usr/local/www/system_gateway_groups_edit.php:53 +msgid "Member Down" +msgstr "Membro fora do ar" + +#: usr/local/www/system_gateway_groups_edit.php:51 +#: usr/local/www/system_gateway_groups_edit.php:54 +msgid "Packet Loss" +msgstr "Perda de Pacote" + +#: usr/local/www/system_gateway_groups_edit.php:52 +#: usr/local/www/system_gateway_groups_edit.php:55 +msgid "High Latency" +msgstr "Latência Alta" + +#: usr/local/www/system_gateway_groups_edit.php:53 +#: usr/local/www/system_gateway_groups_edit.php:56 +msgid "Packet Loss or High Latency" +msgstr "Perda de Pacote ou Latência Alta" + +#: usr/local/www/system_gateway_groups_edit.php:85 +#: usr/local/www/system_gateway_groups_edit.php:88 +msgid "A valid gateway group name must be specified." +msgstr "Um grupo de gateway válido deve ser especificado." + +#: usr/local/www/system_gateway_groups_edit.php:88 +#: usr/local/www/system_gateways_edit.php:106 +#: usr/local/www/system_gateway_groups_edit.php:91 +#: usr/local/www/system_gateways_edit.php:107 +#: usr/local/www/system_gateways_edit.php:108 +msgid "The gateway name must not contain invalid characters." +msgstr "O nome do gateway não deve conter caracteres inválidos." + +#: usr/local/www/system_gateway_groups_edit.php:99 +#: usr/local/www/system_gateway_groups_edit.php:102 +#: usr/local/www/system_gateway_groups_edit.php:105 +#, php-format +msgid "A gateway group with this name \"%s\" already exists." +msgstr "Um grupo de gateway com esse nome \"%s\" já existe." + +#: usr/local/www/system_gateway_groups_edit.php:115 +#: usr/local/www/system_gateway_groups_edit.php:119 +#: usr/local/www/system_gateway_groups_edit.php:122 +#, php-format +msgid "A gateway group cannot have the same name with a gateway \"%s\" please choose another name." +msgstr "Um grupo de gateway não pode ter o mesmo nome que um gateway \"%s\". Por favor, escolha outro nome." + +#: usr/local/www/system_gateway_groups_edit.php:119 +#: usr/local/www/system_gateway_groups_edit.php:123 +#: usr/local/www/system_gateway_groups_edit.php:126 +msgid "No gateway(s) have been selected to be used in this group" +msgstr "Nenhum gateway foi selecionado para ser usado nesse grupo" + +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/system_gateways_edit.php:344 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/system_gateways_edit.php:350 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/system_gateways_edit.php:456 +#: usr/local/www/system_gateways_edit.php:458 +#: usr/local/www/system_gateways_edit.php:455 +#: usr/local/www/system_gateways_edit.php:488 +msgid "Edit gateway" +msgstr "Editar gateway" + +#: usr/local/www/system_gateway_groups_edit.php:155 +#: usr/local/www/system_gateway_groups_edit.php:166 +#: usr/local/www/system_gateway_groups_edit.php:225 +msgid "Edit gateway entry" +msgstr "Editar entrada do gateway" + +#: usr/local/www/system_gateway_groups_edit.php:164 +#: usr/local/www/system_gateway_groups_edit.php:175 +#: usr/local/www/system_gateway_groups_edit.php:234 +#: usr/local/www/system_gateway_groups_edit.php:238 +msgid "Gateway Priority" +msgstr "Prioridade do Gateway" + +#: usr/local/www/system_gateway_groups_edit.php:185 +#: usr/local/www/system_gateway_groups_edit.php:208 +#: usr/local/www/system_gateway_groups_edit.php:268 +#: usr/local/www/system_gateway_groups_edit.php:272 +msgid "Never" +msgstr "Nunca" + +#: usr/local/www/system_gateway_groups_edit.php:186 +#: usr/local/www/system_gateway_groups_edit.php:209 +#: usr/local/www/system_gateway_groups_edit.php:269 +#: usr/local/www/system_gateway_groups_edit.php:273 +msgid "Tier 1" +msgstr "Camada 1" + +#: usr/local/www/system_gateway_groups_edit.php:187 +#: usr/local/www/system_gateway_groups_edit.php:210 +#: usr/local/www/system_gateway_groups_edit.php:270 +#: usr/local/www/system_gateway_groups_edit.php:274 +msgid "Tier 2" +msgstr "Camada 2" + +#: usr/local/www/system_gateway_groups_edit.php:188 +#: usr/local/www/system_gateway_groups_edit.php:211 +#: usr/local/www/system_gateway_groups_edit.php:271 +#: usr/local/www/system_gateway_groups_edit.php:275 +msgid "Tier 3" +msgstr "Camada 3" + +#: usr/local/www/system_gateway_groups_edit.php:189 +#: usr/local/www/system_gateway_groups_edit.php:212 +#: usr/local/www/system_gateway_groups_edit.php:272 +#: usr/local/www/system_gateway_groups_edit.php:276 +msgid "Tier 4" +msgstr "Camada 4" + +#: usr/local/www/system_gateway_groups_edit.php:190 +#: usr/local/www/system_gateway_groups_edit.php:213 +#: usr/local/www/system_gateway_groups_edit.php:273 +#: usr/local/www/system_gateway_groups_edit.php:277 +msgid "Tier 5" +msgstr "Camada 5" + +#: usr/local/www/system_gateway_groups_edit.php:195 +#: usr/local/www/system_gateway_groups_edit.php:247 +#: usr/local/www/system_gateway_groups_edit.php:307 +#: usr/local/www/system_gateway_groups_edit.php:311 +msgid "Link Priority" +msgstr "Prioridade do Link" + +#: usr/local/www/system_gateway_groups_edit.php:196 +#: usr/local/www/system_gateway_groups_edit.php:248 +#: usr/local/www/system_gateway_groups_edit.php:308 +#: usr/local/www/system_gateway_groups_edit.php:312 +msgid "The priority selected here defines in what order failover and balancing of links will be done. Multiple links of the same priority will balance connections until all links in the priority will be exhausted. If all links in a priority level are exhausted we will use the next available link(s) in the next priority level." +msgstr "A prioridade selecionada aqui define em qual ordem o failover e balanceamento de links serão feitos. Múltiplos links de mesma prioridade irão balancear conexões até que todos os links da prioridade tiverem exaurido. Se todos os links em um nível de prioridade estiverem exaurido, usaremos o(s) próximo(s) link(s) disponíveis no próximo nível de prioridade." + +#: usr/local/www/system_gateway_groups_edit.php:205 +#: usr/local/www/system_gateway_groups_edit.php:260 +#: usr/local/www/system_gateway_groups_edit.php:320 +#: usr/local/www/system_gateway_groups_edit.php:322 +msgid "Trigger Level" +msgstr "Nível de Gatilho" + +#: usr/local/www/system_gateway_groups_edit.php:216 +#: usr/local/www/system_gateway_groups_edit.php:271 +#: usr/local/www/system_gateway_groups_edit.php:331 +#: usr/local/www/system_gateway_groups_edit.php:333 +msgid "When to trigger exclusion of a member" +msgstr "Quando engatilhar exclusão de um membro" + +#: usr/local/www/system_gateways.php:134 +msgid "The gateway configuration has been changed." +msgstr "A configuração do gateway foi modificada." + +#: usr/local/www/system_gateways.php:155 +#: usr/local/www/system_gateways_edit.php:398 +#: usr/local/www/system_gateways_edit.php:419 +#: usr/local/www/system_gateways_edit.php:525 +#: usr/local/www/system_gateways_edit.php:529 +#: usr/local/www/system_gateways_edit.php:531 +#: usr/local/www/system_gateways_edit.php:561 +msgid "Monitor IP" +msgstr "IP Monitor" + +#: usr/local/www/system_gateways.php:205 +msgid "Do you really want to delete this gateway?" +msgstr "Você realmente deseja apagar esse gateway?" + +#: usr/local/www/system_gateways_edit.php:110 +#: usr/local/www/system_gateways_edit.php:111 +#: usr/local/www/system_gateways_edit.php:112 +msgid "A valid gateway IP address must be specified." +msgstr "Um endereço IP de gateway válido deve ser especificado." + +#: usr/local/www/system_gateways_edit.php:118 +#: usr/local/www/system_gateways_edit.php:119 +#: usr/local/www/system_gateways_edit.php:120 +#: usr/local/www/system_gateways_edit.php:133 +#: usr/local/www/system_gateways_edit.php:148 +msgid "You can not use a IPv6 Gateway Address on a IPv4 only interface." +msgstr "Você não pode usar um endereço IPv6 de gateway somente IPv4 em uma interface." + +#: usr/local/www/system_gateways_edit.php:122 +#: usr/local/www/system_gateways_edit.php:133 +#: usr/local/www/system_gateways_edit.php:123 +#: usr/local/www/system_gateways_edit.php:136 +#: usr/local/www/system_gateways_edit.php:124 +#: usr/local/www/system_gateways_edit.php:137 +#, php-format +msgid "The gateway address %1$s does not lie within the chosen interface's subnet '%2$s'." +msgstr "O gateway endereço %1$ s não se encontram dentro da subrede da interface escolhida '%2$ s'." + +#: usr/local/www/system_gateways_edit.php:129 +#: usr/local/www/system_gateways_edit.php:132 +#: usr/local/www/system_gateways_edit.php:133 +#: usr/local/www/system_gateways_edit.php:120 +msgid "You can not use a IPv4 Gateway Address on a IPv6 only interface." +msgstr "Você não pode usar um endereço IPv4 de gateway somente IPv6 em uma interface." + +#: usr/local/www/system_gateways_edit.php:139 +#: usr/local/www/system_gateways_edit.php:143 +#: usr/local/www/system_gateways_edit.php:144 +#: usr/local/www/system_gateways_edit.php:174 +msgid "Dynamic gateway values cannot be specified for interfaces with a static IPv4 configuration." +msgstr "Valores de gateway dinâmico não pode ser especificado para as interfaces com uma configuração IPv4 estático." + +#: usr/local/www/system_gateways_edit.php:143 +#: usr/local/www/system_gateways_edit.php:147 +#: usr/local/www/system_gateways_edit.php:148 +#: usr/local/www/system_gateways_edit.php:178 +msgid "Dynamic gateway values cannot be specified for interfaces with a static IPv6 configuration." +msgstr "Valores de gateway dinâmico não pode ser especificado para as interfaces com uma configuração IPv6 estático." + +#: usr/local/www/system_gateways_edit.php:147 +#: usr/local/www/system_gateways_edit.php:151 +#: usr/local/www/system_gateways_edit.php:152 +#: usr/local/www/system_gateways_edit.php:182 +msgid "A valid monitor IP address must be specified." +msgstr "Um endereço IP monitor válido deve ser especificado." + +#: usr/local/www/system_gateways_edit.php:160 +#: usr/local/www/system_gateways_edit.php:168 +#: usr/local/www/system_gateways_edit.php:178 +#: usr/local/www/system_gateways_edit.php:208 +msgid "Changing name on a gateway is not allowed." +msgstr "Mudança de nome de gateway não é permitido." + +#: usr/local/www/system_gateways_edit.php:165 +#: usr/local/www/system_gateways_edit.php:173 +#: usr/local/www/system_gateways_edit.php:183 +#: usr/local/www/system_gateways_edit.php:213 +#, php-format +msgid "The gateway name \"%s\" already exists." +msgstr "O nome do gateway \"%s\" já existe." + +#: usr/local/www/system_gateways_edit.php:171 +#: usr/local/www/system_gateways_edit.php:179 +#: usr/local/www/system_gateways_edit.php:189 +#: usr/local/www/system_gateways_edit.php:219 +#, php-format +msgid "The gateway IP address \"%s\" already exists." +msgstr "O endereço IP do gateway \"%s\" já existe." + +#: usr/local/www/system_gateways_edit.php:177 +#: usr/local/www/system_gateways_edit.php:185 +#: usr/local/www/system_gateways_edit.php:195 +#: usr/local/www/system_gateways_edit.php:225 +#, php-format +msgid "The monitor IP address \"%s\" is already in use. You must choose a different monitor IP." +msgstr "O endereço IP monitor \"%s\" já está em uso. Você deve escolher um IP monitor diferente." + +#: usr/local/www/system_gateways_edit.php:187 +#: usr/local/www/system_gateways_edit.php:220 +#: usr/local/www/system_gateways_edit.php:195 +#: usr/local/www/system_gateways_edit.php:228 +msgid "The low latency watermark needs to be a numeric value." +msgstr "A marca d'água de latência inferior precisa ser um valor numérico." + +#: usr/local/www/system_gateways_edit.php:193 +#: usr/local/www/system_gateways_edit.php:201 +msgid "The high latency watermark needs to be a numeric value." +msgstr "A marca d'água de latência superior precisa ser um valor numérico." + +#: usr/local/www/system_gateways_edit.php:198 +#: usr/local/www/system_gateways_edit.php:206 +msgid "The low loss watermark needs to be a numeric value." +msgstr "A marca d'água de perda inferior precisa ser um valor numérico." + +#: usr/local/www/system_gateways_edit.php:203 +#: usr/local/www/system_gateways_edit.php:211 +msgid "The high loss watermark needs to be a numeric value." +msgstr "A marca d'água de perda superior precisa ser um valor numérico." + +#: usr/local/www/system_gateways_edit.php:209 +#: usr/local/www/system_gateways_edit.php:217 +msgid "The High latency watermark needs to be higher then the low latency watermark" +msgstr "A marca d'água superior de latência precisa ser mais acima que a marca d'água inferior" + +#: usr/local/www/system_gateways_edit.php:215 +#: usr/local/www/system_gateways_edit.php:223 +msgid "The High packet loss watermark needs to be higher then the low packet loss watermark" +msgstr "A marca d'água superior de perda de pacote precisa ser mais acima que a marca d'água inferior" + +#: usr/local/www/system_gateways_edit.php:363 +#: usr/local/www/system_gateways_edit.php:369 +#: usr/local/www/system_gateways_edit.php:475 +#: usr/local/www/system_gateways_edit.php:474 +#: usr/local/www/system_gateways_edit.php:476 +#: usr/local/www/system_gateways_edit.php:506 +msgid "Use BGPD" +msgstr "Use BGPD" + +#: usr/local/www/system_gateways_edit.php:367 +#: usr/local/www/system_gateways_edit.php:373 +#: usr/local/www/system_gateways_edit.php:479 +#: usr/local/www/system_gateways_edit.php:478 +#: usr/local/www/system_gateways_edit.php:480 +#: usr/local/www/system_gateways_edit.php:510 +msgid "Choose which interface this gateway applies to." +msgstr "Escolha em qual interface esse gateway se aplica." + +#: usr/local/www/system_gateways_edit.php:373 +#: usr/local/www/system_gateways_edit.php:394 +#: usr/local/www/system_gateways_edit.php:500 +#: usr/local/www/system_gateways_edit.php:502 +#: usr/local/www/system_gateways_edit.php:504 +#: usr/local/www/system_gateways_edit.php:534 +msgid "Gateway name" +msgstr "Nome do Gateway" + +#: usr/local/www/system_gateways_edit.php:379 +#: usr/local/www/system_gateways_edit.php:400 +#: usr/local/www/system_gateways_edit.php:506 +#: usr/local/www/system_gateways_edit.php:509 +#: usr/local/www/system_gateways_edit.php:511 +#: usr/local/www/system_gateways_edit.php:541 +msgid "Gateway IP address" +msgstr "Endereço IP do Gateway" + +#: usr/local/www/system_gateways_edit.php:382 +#: usr/local/www/system_gateways_edit.php:385 +#: usr/local/www/system_gateways_edit.php:403 +#: usr/local/www/system_gateways_edit.php:406 +#: usr/local/www/system_gateways_edit.php:509 +#: usr/local/www/system_gateways_edit.php:512 +#: usr/local/www/system_gateways_edit.php:513 +#: usr/local/www/system_gateways_edit.php:516 +#: usr/local/www/system_gateways_edit.php:515 +#: usr/local/www/system_gateways_edit.php:518 +#: usr/local/www/system_gateways_edit.php:545 +#: usr/local/www/system_gateways_edit.php:548 +msgid "Default Gateway" +msgstr "Gateway Padrão" + +#: usr/local/www/system_gateways_edit.php:386 +#: usr/local/www/system_gateways_edit.php:407 +#: usr/local/www/system_gateways_edit.php:513 +#: usr/local/www/system_gateways_edit.php:517 +#: usr/local/www/system_gateways_edit.php:519 +#: usr/local/www/system_gateways_edit.php:549 +msgid "This will select the above gateway as the default gateway" +msgstr "Isso irá selecionar o gateway acima como o gateway padrão" + +#: usr/local/www/system_gateways_edit.php:390 +#: usr/local/www/system_gateways_edit.php:393 +#: usr/local/www/system_gateways_edit.php:411 +#: usr/local/www/system_gateways_edit.php:414 +#: usr/local/www/system_gateways_edit.php:517 +#: usr/local/www/system_gateways_edit.php:520 +#: usr/local/www/system_gateways_edit.php:521 +#: usr/local/www/system_gateways_edit.php:524 +#: usr/local/www/system_gateways_edit.php:523 +#: usr/local/www/system_gateways_edit.php:526 +#: usr/local/www/system_gateways_edit.php:553 +#: usr/local/www/system_gateways_edit.php:556 +msgid "Disable Gateway Monitoring" +msgstr "Desativar Monitoramento do Gateway" + +#: usr/local/www/system_gateways_edit.php:394 +#: usr/local/www/system_gateways_edit.php:415 +#: usr/local/www/system_gateways_edit.php:521 +#: usr/local/www/system_gateways_edit.php:525 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/system_gateways_edit.php:557 +msgid "This will consider this gateway as always being up" +msgstr "Isto irá considerar este gateway como sendo sempre up" + +#: usr/local/www/system_gateways_edit.php:407 +#: usr/local/www/system_gateways_edit.php:428 +#: usr/local/www/system_gateways_edit.php:534 +#: usr/local/www/system_gateways_edit.php:538 +#: usr/local/www/system_gateways_edit.php:540 +#: usr/local/www/system_gateways_edit.php:570 +msgid "Alternative monitor IP" +msgstr "IP monitor alternativo" + +#: usr/local/www/system_gateways_edit.php:408 +#: usr/local/www/system_gateways_edit.php:429 +#: usr/local/www/system_gateways_edit.php:535 +#: usr/local/www/system_gateways_edit.php:539 +#: usr/local/www/system_gateways_edit.php:541 +#: usr/local/www/system_gateways_edit.php:571 +msgid "Enter an alternative address here to be used to monitor the link. This is used for the quality RRD graphs as well as the load balancer entries. Use this if the gateway does not respond to ICMP echo requests (pings)" +msgstr "Informe um endereço alternativo aqui para ser usado para monitorar o link. Esse é usado para os gráficos RRD de qualidade assim como as entradas do balanceador de carga. Use isso se o gateway não responder à requisições echo ICMP (pings)" + +#: usr/local/www/system_gateways_edit.php:436 +#: usr/local/www/system_gateways_edit.php:457 +#: usr/local/www/system_gateways_edit.php:563 +#: usr/local/www/system_gateways_edit.php:567 +#: usr/local/www/system_gateways_edit.php:569 +#: usr/local/www/system_gateways_edit.php:599 +msgid "Weight for this gateway when used in a Gateway Group." +msgstr "Peso para esse gateway quando usado em um Grupo de Gateway." + +#: usr/local/www/system_gateways_edit.php:440 +#: usr/local/www/system_gateways_edit.php:461 +#: usr/local/www/system_gateways_edit.php:567 +#: usr/local/www/system_gateways_edit.php:571 +#: usr/local/www/system_gateways_edit.php:573 +#: usr/local/www/system_gateways_edit.php:603 +msgid "Latency thresholds" +msgstr "Thresholds de latência" + +#: usr/local/www/system_gateways_edit.php:448 +#: usr/local/www/system_gateways_edit.php:469 +msgid "These define the low and high water marks for latency in milliseconds. Default is 100/200." +msgstr "Definem os limites inferiores e superiores para a latência em milisegundos. O padrão é 100/200." + +#: usr/local/www/system_gateways_edit.php:452 +#: usr/local/www/system_gateways_edit.php:473 +#: usr/local/www/system_gateways_edit.php:579 +#: usr/local/www/system_gateways_edit.php:583 +#: usr/local/www/system_gateways_edit.php:585 +#: usr/local/www/system_gateways_edit.php:615 +msgid "Packet Loss thresholds" +msgstr "Thresholds de perda de pacote" + +#: usr/local/www/system_gateways_edit.php:460 +#: usr/local/www/system_gateways_edit.php:481 +msgid "These define the low and high water marks for packet loss in %. Default is 10/20." +msgstr "Definem os limites inferiores e superiores para a perda de pacote em %. Padrão é 10/20." + +#: usr/local/www/system_gateways_edit.php:464 +#: usr/local/www/system_gateways_edit.php:496 +#: usr/local/www/system_gateways_edit.php:602 +#: usr/local/www/system_gateways_edit.php:606 +#: usr/local/www/system_gateways_edit.php:608 +#: usr/local/www/system_gateways_edit.php:638 +msgid "Down" +msgstr "Contagem regressiva" + +#: usr/local/www/system_gateways_edit.php:468 +msgid "This defines the down time for the alarm to fire in seconds. Default is 10." +msgstr "Isto define o tempo da contagem regressiva para o alarme disparar, em segundos. Padrão é 10." + +#: usr/local/www/system_gateways_edit.php:472 +#: usr/local/www/system_gateways_edit.php:485 +#: usr/local/www/system_gateways_edit.php:591 +#: usr/local/www/system_gateways_edit.php:595 +#: usr/local/www/system_gateways_edit.php:597 +#: usr/local/www/system_gateways_edit.php:627 +msgid "Frequency Probe" +msgstr "Frequência da sonda" + +#: usr/local/www/system_gateways_edit.php:476 +msgid "This defines the frequency that an icmp probe will be sent in seconds. Default is 1." +msgstr "Isto define a freqüência com que uma sonda de icmp serão enviadas em segundos. Padrão é 1." + +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/system_groupmanager_addprivs.php:56 +msgid "Group manager" +msgstr "Gerenciador de grupo" + +#: usr/local/www/system_groupmanager.php:72 +#: usr/local/www/system_groupmanager.php:96 +#: usr/local/www/system_usermanager.php:90 +#: usr/local/www/system_usermanager.php:105 +msgid "successfully deleted" +msgstr "apagado com sucesso" + +#: usr/local/www/system_groupmanager.php:95 +#: usr/local/www/system_usermanager.php:104 +msgid "Privilege" +msgstr "Privilégio" + +#: usr/local/www/system_groupmanager.php:122 +msgid "The group name contains invalid characters." +msgstr "O nome do grupo contém caracteres inválidos." + +#: usr/local/www/system_groupmanager.php:128 +#: usr/local/www/system_groupmanager.php:131 +msgid "Another entry with the same group name already exists." +msgstr "Outra entrada com o mesmo nome de grupo já existe." + +#: usr/local/www/system_groupmanager.php:262 +#: usr/local/www/system_usermanager.php:462 +#: usr/local/www/system_usermanager.php:460 +#: usr/local/www/system_groupmanager.php:265 +msgid "Defined by" +msgstr "Definido por" + +#: usr/local/www/system_groupmanager.php:269 +#: usr/local/www/system_groupmanager.php:404 +#: usr/local/www/system_groupmanager.php:405 +#: usr/local/www/system_groupmanager.php:272 +#: usr/local/www/system_groupmanager.php:408 +msgid "Group name" +msgstr "Nome do grupo" + +#: usr/local/www/system_groupmanager.php:279 +#: usr/local/www/system_groupmanager.php:282 +msgid "Group description, for your own information only" +msgstr "Descrição do Grupo, para sua própria referência somente" + +#: usr/local/www/system_groupmanager.php:286 +#: usr/local/www/system_usermanager.php:511 +#: usr/local/www/system_usermanager.php:509 +#: usr/local/www/system_groupmanager.php:289 +msgid "Group Memberships" +msgstr "Adesões de Grupos" + +#: usr/local/www/system_groupmanager.php:291 +#: usr/local/www/system_groupmanager.php:294 +msgid "Not Members" +msgstr "Não membros" + +#: usr/local/www/system_groupmanager.php:309 +#: usr/local/www/system_groupmanager.php:312 +msgid "Add Members" +msgstr "Adicionar Membros" + +#: usr/local/www/system_groupmanager.php:313 +#: usr/local/www/system_groupmanager.php:316 +msgid "Remove Members" +msgstr "Remover membros" + +#: usr/local/www/system_groupmanager.php:334 +#: usr/local/www/system_groupmanager_addprivs.php:196 +#: usr/local/www/system_usermanager.php:565 +#: usr/local/www/system_usermanager_addprivs.php:193 +#: usr/local/www/system_usermanager.php:563 +#: usr/local/www/system_groupmanager_addprivs.php:194 +#: usr/local/www/system_groupmanager.php:337 +msgid "Hold down CTRL (pc)/COMMAND (mac) key to select multiple items" +msgstr "Segure a tecla CTRL (pc)/ COMMAND (mac) para selecionar múltiplos items" + +#: usr/local/www/system_groupmanager.php:342 +#: usr/local/www/system_groupmanager.php:345 +msgid "Assigned Privileges" +msgstr "Privilégios atribuídos" + +#: usr/local/www/system_groupmanager.php:363 +#: usr/local/www/system_usermanager.php:601 +#: usr/local/www/system_usermanager.php:599 +#: usr/local/www/system_groupmanager.php:366 +msgid "Do you really want to delete this privilege?" +msgstr "Você realmente deseja apagar esse privilégio?" + +#: usr/local/www/system_groupmanager.php:406 +#: usr/local/www/system_groupmanager.php:407 +#: usr/local/www/system_groupmanager.php:410 +msgid "Member Count" +msgstr "Contagem de membros" + +#: usr/local/www/system_groupmanager.php:447 +#: usr/local/www/system_groupmanager.php:450 +#: usr/local/www/system_groupmanager.php:468 +#: usr/local/www/system_groupmanager.php:471 +msgid "Do you really want to delete this group?" +msgstr "Você realmente deseja apagar esse grupo?" + +#: usr/local/www/system_groupmanager.php:448 +#: usr/local/www/system_groupmanager.php:451 +#: usr/local/www/system_groupmanager.php:469 +#: usr/local/www/system_groupmanager.php:472 +msgid "delete group" +msgstr "remover grupo" + +#: usr/local/www/system_groupmanager.php:460 +#: usr/local/www/system_groupmanager.php:465 +#: usr/local/www/system_groupmanager.php:415 +#: usr/local/www/system_groupmanager.php:418 +msgid "add group" +msgstr "adicionar grupo" + +#: usr/local/www/system_groupmanager.php:467 +msgid "" +"Additional webConfigurator groups can be added here. \n" +"\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by users who are members of the group.\n" +"\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system defined object.\n" +"\t\t\t\t\t\t\t\tSome system object properties can be modified but they cannot be deleted." +msgstr "" +"Grupos webConfigurator adicionais podem ser adicionados aqui. \n" +"\t\t\t\t\t\t\t\tPermissões de grupo podem ser designadas, as quais são herdadas de usuários que são membros do grupo.\n" +"\t\t\t\t\t\t\t\tUm ícone que aparece cinza indica que é um objetos definido pelo sistema.\n" +"\t\t\t\t\t\t\t\tAlgumas propriedades de objetos de sistema podem ser modificadas, mas não podem ser apagadas." + +#: usr/local/www/system_groupmanager_addprivs.php:56 +msgid "Add privileges" +msgstr "Adicionar privilégios" + +#: usr/local/www/system_groupmanager_addprivs.php:79 +#: usr/local/www/system_usermanager_addprivs.php:84 +msgid "Selected priveleges" +msgstr "Privilégios selecionados" + +#: usr/local/www/system_groupmanager_addprivs.php:182 +#: usr/local/www/system_usermanager_addprivs.php:181 +#: usr/local/www/system_groupmanager_addprivs.php:180 +msgid "System Privileges" +msgstr "Privilégios de Sistema" + +#: usr/local/www/system_groupmanager_addprivs.php:218 +#: usr/local/www/system_usermanager_addprivs.php:199 +#: usr/local/www/system_groupmanager_addprivs.php:216 +msgid "Select a privilege from the list above for a description" +msgstr "Selecione um privilégio da lista acima para uma descrição" + +#: usr/local/www/system_usermanager.php:157 +#: usr/local/www/system_usermanager.php:692 +#: usr/local/www/system_usermanager.php:701 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/system_usermanager.php:690 +#: usr/local/www/system_usermanager.php:699 +#: usr/local/www/vpn_openvpn_server.php:287 +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/vpn_openvpn_server.php:288 +#: usr/local/www/vpn_openvpn_client.php:220 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/vpn_openvpn_server.php:309 +msgid "Certificate" +msgstr "Certificado" + +#: usr/local/www/system_usermanager.php:158 +msgid "association removed." +msgstr "associação removida." + +#: usr/local/www/system_usermanager.php:202 +msgid "The username is longer than 16 characters." +msgstr "O nome de usuário contém mais de 16 caractéres." + +#: usr/local/www/system_usermanager.php:226 +msgid "That username is reserved by the system." +msgstr "Esse nome de usuário está reservado pelo sistema." + +#: usr/local/www/system_usermanager.php:250 +#: usr/local/www/system_usermanager.php:246 +msgid "Invalid expiration date format; use MM/DD/YYYY instead." +msgstr "Formato de data de expiração inválido; use MM/DD/AAAA." + +#: usr/local/www/system_usermanager.php:257 +#: usr/local/www/system_usermanager.php:253 +msgid "Invalid internal Certificate Authority" +msgstr "Fonte Certificadora interna inválida" + +#: usr/local/www/system_usermanager.php:489 +#: usr/local/www/system_usermanager_passwordmg.php:109 +#: usr/local/www/system_usermanager.php:487 +#: usr/local/www/system_usermanager_passwordmg.php:110 +#: usr/local/www/system_usermanager_passwordmg.php:115 +msgid "(confirmation)" +msgstr "(confirmação)" + +#: usr/local/www/system_usermanager.php:493 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/system_usermanager.php:491 +#: usr/local/www/system_usermanager.php:786 +#: usr/local/www/system_usermanager.php:787 +msgid "Full name" +msgstr "Nome completo" + +#: usr/local/www/system_usermanager.php:497 +#: usr/local/www/system_usermanager.php:495 +msgid "User's full name, for your own information only" +msgstr "Nome completo do usuário, para sua própria referência somente" + +#: usr/local/www/system_usermanager.php:501 +#: usr/local/www/system_usermanager.php:499 +msgid "Expiration date" +msgstr "Data de expiração" + +#: usr/local/www/system_usermanager.php:505 +#: usr/local/www/system_usermanager.php:503 +msgid "Pick a date" +msgstr "Selecione uma data" + +#: usr/local/www/system_usermanager.php:508 +#: usr/local/www/system_usermanager.php:506 +msgid "Leave blank if the account shouldn't expire, otherwise enter the expiration date in the following format: mm/dd/yyyy" +msgstr "Deixe em branco se a conta não deve expirar, do contrário, informe a data de expiração no seguinte formato: mm/dd/aaaa" + +#: usr/local/www/system_usermanager.php:516 +#: usr/local/www/system_usermanager.php:514 +msgid "Not Member Of" +msgstr "Não é Membro De" + +#: usr/local/www/system_usermanager.php:536 +#: usr/local/www/system_usermanager.php:534 +msgid "Add Groups" +msgstr "Adicionar Grupos" + +#: usr/local/www/system_usermanager.php:540 +#: usr/local/www/system_usermanager.php:538 +msgid "Remove Groups" +msgstr "Remover Grupos" + +#: usr/local/www/system_usermanager.php:544 +#: usr/local/www/system_usermanager.php:542 +msgid "Member Of" +msgstr "Membro De" + +#: usr/local/www/system_usermanager.php:572 +#: usr/local/www/system_usermanager.php:570 +msgid "Effective Privileges" +msgstr "Privilégios efetivos" + +#: usr/local/www/system_usermanager.php:576 +#: usr/local/www/system_usermanager.php:574 +msgid "Inherited From" +msgstr "Herdado de" + +#: usr/local/www/system_usermanager.php:626 +#: usr/local/www/system_usermanager.php:624 +msgid "User Certificates" +msgstr "Certificados de usuário" + +#: usr/local/www/system_usermanager.php:631 +#: usr/local/www/system_usermanager.php:629 +msgid "CA" +msgstr "CA" + +#: usr/local/www/system_usermanager.php:655 +#: usr/local/www/system_usermanager.php:653 +msgid "export private key" +msgstr "exportar chave privada" + +#: usr/local/www/system_usermanager.php:660 +#: usr/local/www/system_usermanager.php:658 +msgid "Do you really want to remove this certificate association?" +msgstr "Você realmente deseja apagar esta associação de certificado?" + +#: usr/local/www/system_usermanager.php:660 +#: usr/local/www/system_usermanager.php:658 +msgid "(Certificate will not be deleted)" +msgstr "(Certificado não será apagado)" + +#: usr/local/www/system_usermanager.php:694 +#: usr/local/www/system_usermanager.php:692 +msgid "Click to create a user certificate." +msgstr "Clique para criar um certificado de usuário." + +#: usr/local/www/system_usermanager.php:752 +#: usr/local/www/system_usermanager.php:758 +#: usr/local/www/system_usermanager.php:750 +#: usr/local/www/system_usermanager.php:756 +msgid "Authorized keys" +msgstr "Chaves autorizadas" + +#: usr/local/www/system_usermanager.php:754 +#: usr/local/www/system_usermanager.php:752 +msgid "Click to paste an authorized key." +msgstr "Clique para colar uma chave autorizada." + +#: usr/local/www/system_usermanager.php:762 +#: usr/local/www/system_usermanager.php:760 +msgid "Paste an authorized keys file here." +msgstr "Cole um arquivo de chaves autorizadas aqui." + +#: usr/local/www/system_usermanager.php:766 +#: usr/local/www/system_usermanager.php:764 +msgid "IPsec Pre-Shared Key" +msgstr "Chave Pre-Compartilhada IPsec" + +#: usr/local/www/system_usermanager.php:828 +#: usr/local/www/system_usermanager.php:826 +#: usr/local/www/system_usermanager.php:829 +#: usr/local/www/system_usermanager.php:852 +msgid "Do you really want to delete this User?" +msgstr "Você realmente deseja apagar esse Usuário?" + +#: usr/local/www/system_usermanager.php:849 +#: usr/local/www/system_usermanager.php:847 +#: usr/local/www/system_usermanager.php:852 +#: usr/local/www/system_usermanager.php:805 +msgid "Additional users can be added here. User permissions for accessing the webConfigurator can be assigned directly or inherited from group memberships. An icon that appears grey indicates that it is a system defined object. Some system object properties can be modified but they cannot be deleted." +msgstr "Usuários adicionais podem ser adicionados aqui. Permissões de usuário para acessar o webConfigurator podem ser atribuídos diretamente ou herdados de membros do grupo. Um ícone que aparece cinza indica que é um sistema de objeto definido. Algumas propriedades objeto do sistema pode ser modificado, mas eles não podem ser excluídas." + +#: usr/local/www/system_usermanager.php:854 +#: usr/local/www/system_usermanager.php:852 +#: usr/local/www/system_usermanager.php:857 +#: usr/local/www/system_usermanager.php:810 +msgid "Accounts created here are also used for other parts of the system such as OpenVPN, IPsec, and Captive Portal." +msgstr "Contas criadas aqui são usadas também para outras partes do sistema, tais como OpenVPN, IPsec e Captive Portal." + +#: usr/local/www/system_usermanager_passwordmg.php:43 +msgid "User Password" +msgstr "Senha de Usuário" + +#: usr/local/www/system_usermanager_passwordmg.php:63 +msgid "Password successfully changed" +msgstr "Senha modificada com sucesso" + +#: usr/local/www/system_usermanager_passwordmg.php:86 +#: usr/local/www/system_usermanager_passwordmg.php:87 +#: usr/local/www/system_usermanager_passwordmg.php:92 +msgid "Sorry, you cannot change the password for a non-local user." +msgstr "Lamento, você não pode mudar a senha para um usuário que não seja local." + +#: usr/local/www/system_usermanager_passwordmg.php:112 +#: usr/local/www/system_usermanager_passwordmg.php:113 +#: usr/local/www/system_usermanager_passwordmg.php:118 +msgid "Select a new password" +msgstr "Selecione uma nova senha" + +#: usr/local/www/system_usermanager_settings.php:51 +msgid "User manager settings" +msgstr "Configurações de gerenciamento de usuário" + +#: usr/local/www/system_usermanager_settings.php:61 +msgid "Session timeout must be an integer value." +msgstr "Expiração de Sessão deve ser um valor inteiro." + +#: usr/local/www/system_usermanager_settings.php:71 +msgid "The test was not performed because it is supported only for ldap based backends." +msgstr "O teste não foi realizado porque ele somente é suportado por backends baseados em ldap." + +#: usr/local/www/system_usermanager_settings.php:131 +#: usr/local/www/system_usermanager_settings.php:134 +msgid "Session Timeout" +msgstr "Expiração de Sessão" + +#: usr/local/www/system_usermanager_settings.php:135 +#: usr/local/www/system_usermanager_settings.php:138 +msgid "Time in minutes to expire idle management sessions. The default is 4 hours (240 minutes)." +msgstr "Tempo em minutos para expirar sessões de gerenciamento ociosas. O padrão é 4 horas (240 minutos)." + +#: usr/local/www/system_usermanager_settings.php:136 +#: usr/local/www/system_usermanager_settings.php:139 +msgid "Enter 0 to never expire sessions. NOTE: This is a security risk!" +msgstr "Informe 0 para nunca expirar sessões. NOTA: Isso é um risco de segurança!" + +#: usr/local/www/system_usermanager_settings.php:162 +#: usr/local/www/system_usermanager_settings.php:165 +msgid "Save and Test" +msgstr "Salvar e Testar" + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97 +msgid "Could not connect to the LDAP server. Please check your LDAP configuration." +msgstr "Não pôde conectar ao servidor LDAP. Por favor, verifique sua configuração do LDAP." + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98 +#: usr/local/www/system_usermanager_settings_test.php:119 +msgid "Close" +msgstr "Fechar" + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100 +msgid "Please select which containers to Authenticate against:" +msgstr "Por favor selecione quais contêiners pelos quais Autenticar:" + +#: usr/local/www/system_usermanager_settings_test.php:76 +#, php-format +msgid "Could not find settings for %s%s" +msgstr "Não pôde encontrar configurações para %s%s" + +#: usr/local/www/system_usermanager_settings_test.php:78 +msgid "Testing pfSense LDAP settings... One moment please..." +msgstr "Testanto configurações LDAP do pfSense... Um momento por favor..." + +#: usr/local/www/system_usermanager_settings_test.php:82 +msgid "Attempting connection to" +msgstr "Tentando conectar em" + +#: usr/local/www/system_usermanager_settings_test.php:86 +msgid "Attempting bind to" +msgstr "Tentando vincular a" + +#: usr/local/www/system_usermanager_settings_test.php:90 +msgid "Attempting to fetch Organizational Units from" +msgstr "Tentando obter Unidades Organizacionais de" + +#: usr/local/www/system_usermanager_settings_test.php:96 +msgid "Organization units found" +msgstr "Encontradas unidades organizacionais" + +#: usr/local/www/system_usermanager_settings_test.php:103 +#: usr/local/www/system_usermanager_settings_test.php:108 +#: usr/local/www/system_usermanager_settings_test.php:112 +msgid "failed" +msgstr "falhou" + +#: usr/local/www/upload_progress.php:44 +msgid "Sorry, we could not find an uploadid code." +msgstr "Lamento, não pudemos encontrar um código de carregamento." + +#: usr/local/www/upload_progress.php:86 +msgid "Uploading Files" +msgstr "Carregando Arquivos" + +#: usr/local/www/upload_progress.php:86 +msgid "Please wait" +msgstr "Por favor, aguarde" + +#: usr/local/www/upload_progress.php:95 +msgid "Uploading file" +msgstr "Carregando arquivo" + +#: usr/local/www/upload_progress.php:123 +msgid "Uploaded" +msgstr "Carregado" + +#: usr/local/www/upload_progress.php:133 +msgid "File Size" +msgstr "Tamanho do Arquivo" + +#: usr/local/www/upload_progress.php:145 +msgid "Completed" +msgstr "Completo" + +#: usr/local/www/upload_progress.php:155 +msgid "Estimated" +msgstr "Estimado" + +#: usr/local/www/vpn_ipsec_phase1.php:160 +#: usr/local/www/vpn_ipsec_phase1.php:662 +#: usr/local/www/vpn_ipsec_phase1.php:675 +#: usr/local/www/vpn_ipsec_mobile.php:347 usr/local/www/vpn_ipsec_keys.php:104 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:135 usr/local/www/interfaces.php:2486 +#: usr/local/www/vpn_ipsec_phase1.php:674 +#: usr/local/www/vpn_ipsec_phase1.php:695 usr/local/www/interfaces.php:2516 +#: usr/local/www/interfaces.php:2562 usr/local/www/interfaces.php:2551 +#: usr/local/www/interfaces.php:2587 +msgid "Pre-Shared Key" +msgstr "Chave Pré-Compartilhada" + +#: usr/local/www/vpn_ipsec_phase1.php:171 +#: usr/local/www/vpn_ipsec_phase1.php:564 +#: usr/local/www/vpn_ipsec_phase1.php:577 +#: usr/local/www/vpn_ipsec_phase1.php:576 +#: usr/local/www/vpn_ipsec_phase1.php:597 +msgid "Remote gateway" +msgstr "Gateway remota" + +#: usr/local/www/vpn_ipsec_phase1.php:177 +msgid "The P1 lifetime must be an integer." +msgstr "O tempo de vida da F1 deve ser um inteiro." + +#: usr/local/www/vpn_ipsec_phase1.php:180 +#: usr/local/www/vpn_ipsec_phase1.php:181 +msgid "A valid remote gateway address or host name must be specified." +msgstr "Um endereço de gateway remoto válido ou nome de host deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase1.php:188 +#: usr/local/www/vpn_ipsec_phase1.php:194 +#, php-format +msgid "The remote gateway \"%1$s\" is already used by phase1 \"%2$s\"." +msgstr "O gateway remoto \"%1$s\" já está sendo usado pela fase 1 \"%2$s\"." + +#: usr/local/www/vpn_ipsec_phase1.php:201 +#: usr/local/www/vpn_ipsec_phase1.php:222 +msgid "Please enter an address for 'My Identifier'" +msgstr "Por favor informe um endereço para 'Meu identificador'" + +#: usr/local/www/vpn_ipsec_phase1.php:204 +#: usr/local/www/vpn_ipsec_phase1.php:225 +msgid "Please enter a keyid tag for 'My Identifier'" +msgstr "Por favor, informe uma tag keyid para 'Meu Identificador'" + +#: usr/local/www/vpn_ipsec_phase1.php:207 +#: usr/local/www/vpn_ipsec_phase1.php:228 +msgid "Please enter a fully qualified domain name for 'My Identifier'" +msgstr "Por favor, informe um nome de domínio completamente qualificado para 'Meu Identificador'" + +#: usr/local/www/vpn_ipsec_phase1.php:210 +#: usr/local/www/vpn_ipsec_phase1.php:231 +msgid "Please enter a user and fully qualified domain name for 'My Identifier'" +msgstr "Por favor, informe um usuário e um nome de domínio completamente qualificado para 'Meu Identificador'" + +#: usr/local/www/vpn_ipsec_phase1.php:213 +#: usr/local/www/vpn_ipsec_phase1.php:234 +msgid "Please enter a dynamic domain name for 'My Identifier'" +msgstr "Por favor, informe um nome de domínio dinâmico para 'Meu Identificado'" + +#: usr/local/www/vpn_ipsec_phase1.php:216 +#: usr/local/www/vpn_ipsec_phase1.php:237 +msgid "A valid IP address for 'My identifier' must be specified." +msgstr "Um endereço IP válido para 'Meu Identificador' deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase1.php:219 +#: usr/local/www/vpn_ipsec_phase1.php:240 +msgid "A valid domain name for 'My identifier' must be specified." +msgstr "Um nome de domínio válidos para 'Meu Identificador' deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase1.php:223 +#: usr/local/www/vpn_ipsec_phase1.php:244 +msgid "A valid FQDN for 'My identifier' must be specified." +msgstr "Um FQDN válido para 'Meu identificador' deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase1.php:228 +#: usr/local/www/vpn_ipsec_phase1.php:249 +msgid "A valid User FQDN in the form of user@my.domain.com for 'My identifier' must be specified." +msgstr "Um usuário FQDN válido na forma usuario@meu.dominio.com para 'Meu Identificador' deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase1.php:233 +#: usr/local/www/vpn_ipsec_phase1.php:254 +msgid "A valid Dynamic DNS address for 'My identifier' must be specified." +msgstr "Um endereço de DNS Dinâmico válido para 'Meu Identificador' deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase1.php:243 +#: usr/local/www/vpn_ipsec_phase1.php:264 +msgid "Please enter an address for 'Peer Identifier'" +msgstr "Por favor, informe um endereço para 'Identificador do Peer'" + +#: usr/local/www/vpn_ipsec_phase1.php:246 +#: usr/local/www/vpn_ipsec_phase1.php:267 +msgid "Please enter a keyid tag for 'Peer Identifier'" +msgstr "Por favor, informe uma tag keyid para 'Identificador do Peer'" + +#: usr/local/www/vpn_ipsec_phase1.php:249 +#: usr/local/www/vpn_ipsec_phase1.php:270 +msgid "Please enter a fully qualified domain name for 'Peer Identifier'" +msgstr "Por favor, informe um nome de domínio completamente qualificado para 'Identificador do Peer'" + +#: usr/local/www/vpn_ipsec_phase1.php:252 +#: usr/local/www/vpn_ipsec_phase1.php:273 +msgid "Please enter a user and fully qualified domain name for 'Peer Identifier'" +msgstr "Por favor, informe um usuário e um nome de domínio completamente qualificado para 'Identificador do Peer'" + +#: usr/local/www/vpn_ipsec_phase1.php:255 +#: usr/local/www/vpn_ipsec_phase1.php:276 +msgid "A valid IP address for 'Peer identifier' must be specified." +msgstr "Um endereço de IP válido para 'Identificador do Peer' deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase1.php:258 +#: usr/local/www/vpn_ipsec_phase1.php:279 +msgid "A valid domain name for 'Peer identifier' must be specified." +msgstr "Um nomde de domínio válido para 'Identificador do Peer' deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase1.php:262 +#: usr/local/www/vpn_ipsec_phase1.php:283 +msgid "A valid FQDN for 'Peer identifier' must be specified." +msgstr "Um FQDN válido para 'Identificador de peer' deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase1.php:267 +#: usr/local/www/vpn_ipsec_phase1.php:288 +msgid "A valid User FQDN in the form of user@my.domain.com for 'Peer identifier' must be specified." +msgstr "Um usuário FQDN válido na forma de usuario@meu.dominio.com para 'Identificador de peer' deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase1.php:273 +#: usr/local/www/vpn_ipsec_phase1.php:294 +msgid "A numeric value must be specified for DPD delay." +msgstr "Um valor numérico deve ser especificado para atraso de DPD." + +#: usr/local/www/vpn_ipsec_phase1.php:276 +#: usr/local/www/vpn_ipsec_phase1.php:297 +msgid "A numeric value must be specified for DPD retries." +msgstr "Um valor numérico deve ser especificado para tentativas de DPD." + +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +msgid "Edit Phase 1" +msgstr "Editar Fase 1" + +#: usr/local/www/vpn_ipsec_phase1.php:509 +#: usr/local/www/vpn_openvpn_client.php:383 +#: usr/local/www/vpn_openvpn_csc.php:311 +#: usr/local/www/vpn_openvpn_server.php:601 +#: usr/local/www/vpn_openvpn_server.php:674 +#: usr/local/www/vpn_openvpn_client.php:388 +#: usr/local/www/vpn_openvpn_csc.php:310 +#: usr/local/www/vpn_openvpn_server.php:692 +#: usr/local/www/vpn_openvpn_client.php:396 +#: usr/local/www/vpn_ipsec_phase1.php:508 +#: usr/local/www/vpn_openvpn_client.php:414 +#: usr/local/www/vpn_ipsec_phase1.php:529 +#: usr/local/www/vpn_openvpn_server.php:718 +msgid "General information" +msgstr "Informação geral" + +#: usr/local/www/vpn_ipsec_phase1.php:515 +#: usr/local/www/vpn_ipsec_phase1.php:514 +#: usr/local/www/vpn_ipsec_phase1.php:535 +msgid "Disable this phase1 entry" +msgstr "Desabilitar essa entrada de fase 1" + +#: usr/local/www/vpn_ipsec_phase1.php:517 +#: usr/local/www/vpn_ipsec_phase1.php:516 +#: usr/local/www/vpn_ipsec_phase1.php:537 +msgid "Set this option to disable this phase1 without removing it from the list" +msgstr "Configure essa opção para desabilitar essa fase1 sem removê-la da lista" + +#: usr/local/www/vpn_ipsec_phase1.php:523 +#: usr/local/www/vpn_ipsec_phase1.php:522 +#: usr/local/www/vpn_ipsec_phase1.php:543 +msgid "Internet Protocol" +msgstr "Protocolo de internet" + +#: usr/local/www/vpn_ipsec_phase1.php:534 +#: usr/local/www/vpn_ipsec_phase1.php:533 +#: usr/local/www/vpn_ipsec_phase1.php:554 +msgid "Select the Internet Protocol family from this dropdown" +msgstr "Selecione a família Protocolo de Internet a partir desta lista" + +#: usr/local/www/vpn_ipsec_phase1.php:557 +#: usr/local/www/vpn_ipsec_phase1.php:570 +#: usr/local/www/vpn_ipsec_phase1.php:569 +#: usr/local/www/vpn_ipsec_phase1.php:590 +msgid "Select the interface for the local endpoint of this phase1 entry" +msgstr "Selecione a interface para o endpoint local dessa entrada da fase 1" + +#: usr/local/www/vpn_ipsec_phase1.php:568 +#: usr/local/www/vpn_ipsec_phase1.php:581 +#: usr/local/www/vpn_ipsec_phase1.php:580 +#: usr/local/www/vpn_ipsec_phase1.php:601 +msgid "Enter the public IP address or host name of the remote gateway" +msgstr "Informe o endereço IP público ou nome de host do gateway remoto" + +#: usr/local/www/vpn_ipsec_phase1.php:590 +#: usr/local/www/vpn_ipsec_phase1.php:603 +#: usr/local/www/vpn_ipsec_phase1.php:602 +#: usr/local/www/vpn_ipsec_phase1.php:623 +msgid "Phase 1 proposal (Authentication)" +msgstr "Proposta da Fase 1 (Autenticação)" + +#: usr/local/www/vpn_ipsec_phase1.php:594 +#: usr/local/www/vpn_openvpn_client.php:514 +#: usr/local/www/vpn_openvpn_client.php:519 +#: usr/local/www/vpn_ipsec_phase1.php:607 +#: usr/local/www/vpn_openvpn_client.php:537 +#: usr/local/www/vpn_ipsec_phase1.php:606 +#: usr/local/www/vpn_openvpn_client.php:556 +#: usr/local/www/vpn_ipsec_phase1.php:627 +msgid "Authentication method" +msgstr "Método de Autenticação" + +#: usr/local/www/vpn_ipsec_phase1.php:609 +#: usr/local/www/vpn_ipsec_phase1.php:735 +#: usr/local/www/vpn_ipsec_phase1.php:753 +#: usr/local/www/vpn_ipsec_phase1.php:622 +#: usr/local/www/vpn_ipsec_phase1.php:748 +#: usr/local/www/vpn_ipsec_phase1.php:766 +#: usr/local/www/vpn_ipsec_phase1.php:621 +#: usr/local/www/vpn_ipsec_phase1.php:747 +#: usr/local/www/vpn_ipsec_phase1.php:763 +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:768 +#: usr/local/www/vpn_ipsec_phase1.php:784 +msgid "Must match the setting chosen on the remote side" +msgstr "Deve corresponder à configuração escolhida no lado remoto" + +#: usr/local/www/vpn_ipsec_phase1.php:614 +#: usr/local/www/vpn_ipsec_phase1.php:627 +#: usr/local/www/vpn_ipsec_phase1.php:626 +#: usr/local/www/vpn_ipsec_phase1.php:647 +msgid "Negotiation mode" +msgstr "Modo de Negociação" + +#: usr/local/www/vpn_ipsec_phase1.php:625 +#: usr/local/www/vpn_ipsec_phase1.php:638 +#: usr/local/www/vpn_ipsec_phase1.php:637 +#: usr/local/www/vpn_ipsec_phase1.php:658 +msgid "Aggressive is more flexible, but less secure" +msgstr "Agressivo é mais flexível, mas não menos seguro" + +#: usr/local/www/vpn_ipsec_phase1.php:629 +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:641 +#: usr/local/www/vpn_ipsec_phase1.php:662 +msgid "My identifier" +msgstr "Meu Identificador" + +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:655 +#: usr/local/www/vpn_ipsec_phase1.php:654 +#: usr/local/www/vpn_ipsec_phase1.php:675 +msgid "Peer identifier" +msgstr "Identificador do peer" + +#: usr/local/www/vpn_ipsec_phase1.php:657 +#: usr/local/www/vpn_ipsec_phase1.php:670 +#: usr/local/www/vpn_ipsec_phase1.php:669 +#: usr/local/www/vpn_ipsec_phase1.php:690 +msgid "NOTE: This is known as the \"group\" setting on some VPN client implementations" +msgstr "NOTA: Isso é conhecido como a configuração de \"grupo\" em algumas implementações de cliente VPN" + +#: usr/local/www/vpn_ipsec_phase1.php:668 +#: usr/local/www/vpn_ipsec_phase1.php:681 +msgid "Input your pre-shared key string" +msgstr "Insira sua string de chave pré-configurada" + +#: usr/local/www/vpn_ipsec_phase1.php:673 +#: usr/local/www/vpn_ipsec_phase1.php:686 +#: usr/local/www/vpn_ipsec_phase1.php:685 +#: usr/local/www/vpn_ipsec_phase1.php:706 +msgid "Policy Generation" +msgstr "Geração de política" + +#: usr/local/www/vpn_ipsec_phase1.php:684 +#: usr/local/www/vpn_ipsec_phase1.php:697 +#: usr/local/www/vpn_ipsec_phase1.php:696 +#: usr/local/www/vpn_ipsec_phase1.php:717 +msgid "When working as a responder (as with mobile clients), this controls how policies are generated based on SA proposals." +msgstr "Ao trabalhar com um responder (como em clientes móveis), isto controla como as políticas são geradas com base nas propostas SA." + +#: usr/local/www/vpn_ipsec_phase1.php:689 +#: usr/local/www/vpn_ipsec_phase1.php:702 +#: usr/local/www/vpn_ipsec_phase1.php:701 +#: usr/local/www/vpn_ipsec_phase1.php:722 +msgid "Proposal Checking" +msgstr "Verificação de Proposta" + +#: usr/local/www/vpn_ipsec_phase1.php:700 +#: usr/local/www/vpn_ipsec_phase1.php:713 +#: usr/local/www/vpn_ipsec_phase1.php:712 +#: usr/local/www/vpn_ipsec_phase1.php:733 +msgid "Specifies the action of lifetime length, key length, and PFS of the phase 2 selection on the responder side, and the action of lifetime check in phase 1." +msgstr "Especifica a ação de tamanho da tempo de vida, tamanho da chave, e PFS da seleção da fase 2 no lado que responde, e a ação de verificação de tempo de vida na fase 1." + +#: usr/local/www/vpn_ipsec_phase1.php:705 +#: usr/local/www/vpn_openvpn_client.php:706 +#: usr/local/www/vpn_openvpn_server.php:898 +#: usr/local/www/vpn_openvpn_server.php:971 +#: usr/local/www/vpn_openvpn_client.php:711 +#: usr/local/www/vpn_ipsec_phase1.php:718 +#: usr/local/www/vpn_openvpn_server.php:999 +#: usr/local/www/vpn_openvpn_client.php:729 +#: usr/local/www/vpn_ipsec_phase1.php:717 +#: usr/local/www/vpn_openvpn_client.php:748 +#: usr/local/www/vpn_ipsec_phase1.php:738 +#: usr/local/www/vpn_openvpn_server.php:1026 +msgid "Encryption algorithm" +msgstr "Algoritmo de Criptografia" + +#: usr/local/www/vpn_ipsec_phase1.php:724 +#: usr/local/www/vpn_ipsec_phase1.php:737 +#: usr/local/www/vpn_ipsec_phase1.php:736 +#: usr/local/www/vpn_ipsec_phase1.php:757 +msgid "Hash algorithm" +msgstr "Algorítmo de Hash" + +#: usr/local/www/vpn_ipsec_phase1.php:740 +#: usr/local/www/vpn_ipsec_phase1.php:753 +#: usr/local/www/vpn_ipsec_phase1.php:752 +#: usr/local/www/vpn_ipsec_phase1.php:773 +msgid "DH key group" +msgstr "Grupo de chave DH" + +#: usr/local/www/vpn_ipsec_phase1.php:751 +#: usr/local/www/vpn_ipsec_phase2.php:603 +#: usr/local/www/vpn_ipsec_phase2.php:629 +#: usr/local/www/vpn_ipsec_phase1.php:764 +msgid "1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit" +msgstr "1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit" + +#: usr/local/www/vpn_ipsec_phase1.php:765 +#: usr/local/www/vpn_ipsec_phase1.php:778 +#: usr/local/www/vpn_ipsec_phase1.php:775 +#: usr/local/www/vpn_ipsec_phase1.php:796 +msgid "My Certificate" +msgstr "Meu Certificado" + +#: usr/local/www/vpn_ipsec_phase1.php:779 +#: usr/local/www/vpn_ipsec_phase1.php:792 +#: usr/local/www/vpn_ipsec_phase1.php:789 +#: usr/local/www/vpn_ipsec_phase1.php:810 +msgid "Select a certificate previously configured in the Certificate Manager" +msgstr "Selecione um certificado previamente configurado no Gerenciador de Certificado" + +#: usr/local/www/vpn_ipsec_phase1.php:784 +#: usr/local/www/vpn_ipsec_phase1.php:797 +#: usr/local/www/vpn_ipsec_phase1.php:794 +#: usr/local/www/vpn_ipsec_phase1.php:815 +msgid "My Certificate Authority" +msgstr "Minha Fonte Certificadora" + +#: usr/local/www/vpn_ipsec_phase1.php:798 +#: usr/local/www/vpn_ipsec_phase1.php:811 +#: usr/local/www/vpn_ipsec_phase1.php:808 +#: usr/local/www/vpn_ipsec_phase1.php:829 +msgid "Select a certificate authority previously configured in the Certificate Manager" +msgstr "Selecione uma fonte certificadora previamente configurada no Gerenciador de Certificados" + +#: usr/local/www/vpn_ipsec_phase1.php:809 +#: usr/local/www/vpn_ipsec_phase1.php:822 +#: usr/local/www/vpn_ipsec_phase1.php:819 +#: usr/local/www/vpn_ipsec_phase1.php:840 +msgid "NAT Traversal" +msgstr "NAT Traversal" + +#: usr/local/www/vpn_ipsec_phase1.php:814 +#: usr/local/www/vpn_ipsec_phase1.php:827 +#: usr/local/www/vpn_ipsec_phase1.php:824 +#: usr/local/www/vpn_ipsec_phase1.php:845 +msgid "Force" +msgstr "Forçar" + +#: usr/local/www/vpn_ipsec_phase1.php:818 +#: usr/local/www/vpn_ipsec_phase1.php:831 +#: usr/local/www/vpn_ipsec_phase1.php:828 +#: usr/local/www/vpn_ipsec_phase1.php:849 +msgid "Set this option to enable the use of NAT-T (i.e. the encapsulation of ESP in UDP packets) if needed, which can help with clients that are behind restrictive firewalls" +msgstr "Configure essa opção para habilitar o uso de NAT-T (i.e. o encapsulamento de ESP em pacotes UDP) se necessário, o que pode ajudar com clientes que estão atrás de firewalls restritivos" + +#: usr/local/www/vpn_ipsec_phase1.php:824 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:834 +#: usr/local/www/vpn_ipsec_phase1.php:855 +msgid "Dead Peer Detection" +msgstr "Detecção de Dead Peer" + +#: usr/local/www/vpn_ipsec_phase1.php:827 +#: usr/local/www/vpn_ipsec_phase1.php:840 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:858 +msgid "Enable DPD" +msgstr "Habilitar DPD" + +#: usr/local/www/vpn_ipsec_phase1.php:833 +#: usr/local/www/vpn_ipsec_phase1.php:846 +#: usr/local/www/vpn_ipsec_phase1.php:843 +#: usr/local/www/vpn_ipsec_phase1.php:864 +msgid "Delay between requesting peer acknowledgement" +msgstr "Atraso entre requisições de reconhecimento de peer" + +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:850 +#: usr/local/www/vpn_ipsec_phase1.php:847 +#: usr/local/www/vpn_ipsec_phase1.php:868 +msgid "retries" +msgstr "tentativas" + +#: usr/local/www/vpn_ipsec_phase1.php:839 +#: usr/local/www/vpn_ipsec_phase1.php:852 +#: usr/local/www/vpn_ipsec_phase1.php:849 +#: usr/local/www/vpn_ipsec_phase1.php:870 +msgid "Number of consecutive failures allowed before disconnect" +msgstr "Número de falhas consecutivas permitidas antes de desconectar" + +#: usr/local/www/vpn_ipsec_phase2.php:109 +#: usr/local/www/vpn_ipsec_phase2.php:111 +msgid "A valid ikeid must be specified." +msgstr "Um ikeid válido deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase2.php:113 +#: usr/local/www/vpn_ipsec_phase2.php:115 +msgid "Local network type" +msgstr "Tipo de rede local" + +#: usr/local/www/vpn_ipsec_phase2.php:113 +#: usr/local/www/vpn_ipsec_phase2.php:115 +msgid "P2 Hash Algorithms" +msgstr "Algorpítimos de Hash da F2" + +#: usr/local/www/vpn_ipsec_phase2.php:116 +#: usr/local/www/vpn_ipsec_phase2.php:118 +msgid "Remote network type" +msgstr "Tipo de rede remota" + +#: usr/local/www/vpn_ipsec_phase2.php:126 +#: usr/local/www/vpn_ipsec_phase2.php:128 +msgid "A valid local network bit count must be specified." +msgstr "Um contador de bits de rede local válido deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase2.php:129 +#: usr/local/www/vpn_ipsec_phase2.php:131 +msgid "A valid local network IP address must be specified." +msgstr "Um endereço IP válido da rede local deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase2.php:136 +#: usr/local/www/vpn_ipsec_phase2.php:146 +#: usr/local/www/vpn_ipsec_phase2.php:170 +#: usr/local/www/vpn_ipsec_phase2.php:178 +msgid "A valid remote network bit count must be specified." +msgstr "Um contador de bits de rede remota válido deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase2.php:139 +#: usr/local/www/vpn_ipsec_phase2.php:149 +#: usr/local/www/vpn_ipsec_phase2.php:173 +#: usr/local/www/vpn_ipsec_phase2.php:181 +msgid "A valid remote network IP address must be specified." +msgstr "Um endereço IP válido da rede remota deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase2.php:158 +#: usr/local/www/vpn_ipsec_phase2.php:162 +#: usr/local/www/vpn_ipsec_phase2.php:168 +#: usr/local/www/vpn_ipsec_phase2.php:172 +#: usr/local/www/vpn_ipsec_phase2.php:192 +#: usr/local/www/vpn_ipsec_phase2.php:196 +#: usr/local/www/vpn_ipsec_phase2.php:206 +#: usr/local/www/vpn_ipsec_phase2.php:210 +msgid "Phase2 with this Local Network is already defined for mobile clients." +msgstr "Phase2 com esta rede local já está definido para clientes móveis." + +#: usr/local/www/vpn_ipsec_phase2.php:189 +#: usr/local/www/vpn_ipsec_phase2.php:193 +#: usr/local/www/vpn_ipsec_phase2.php:199 +#: usr/local/www/vpn_ipsec_phase2.php:203 +#: usr/local/www/vpn_ipsec_phase2.php:223 +#: usr/local/www/vpn_ipsec_phase2.php:227 +#: usr/local/www/vpn_ipsec_phase2.php:237 +#: usr/local/www/vpn_ipsec_phase2.php:241 +msgid "Phase2 with this Local/Remote networks combination is already defined for this Phase1." +msgstr "Phase2 com esta combinação de redes local/remota já está definido para esta Phase1." + +#: usr/local/www/vpn_ipsec_phase2.php:204 +#: usr/local/www/vpn_ipsec_phase2.php:216 +#: usr/local/www/vpn_ipsec_phase2.php:240 +#: usr/local/www/vpn_ipsec_phase2.php:254 +msgid "At least one encryption algorithm must be selected." +msgstr "Pelo menos um algorítimo de criptografica deve ser selecionado." + +#: usr/local/www/vpn_ipsec_phase2.php:207 +#: usr/local/www/vpn_ipsec_phase2.php:220 +#: usr/local/www/vpn_ipsec_phase2.php:244 +#: usr/local/www/vpn_ipsec_phase2.php:258 +msgid "The P2 lifetime must be an integer." +msgstr "O tempo de vida da F2 deve ser um inteiro." + +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +msgid "Edit Phase 2" +msgstr "Editar Fase 2" + +#: usr/local/www/vpn_ipsec_phase2.php:396 +#: usr/local/www/vpn_ipsec_phase2.php:422 +#: usr/local/www/vpn_ipsec_phase2.php:488 +#: usr/local/www/vpn_ipsec_phase2.php:510 +msgid "Disable this phase2 entry" +msgstr "Desabilitar essa entrada da fase 2" + +#: usr/local/www/vpn_ipsec_phase2.php:398 +#: usr/local/www/vpn_ipsec_phase2.php:424 +#: usr/local/www/vpn_ipsec_phase2.php:490 +#: usr/local/www/vpn_ipsec_phase2.php:512 +msgid "Set this option to disable this phase2 entry without removing it from the list" +msgstr "Configurar essa opção para desabilitar essa entrada da fase 2 sem removê-la da lista" + +#: usr/local/www/vpn_ipsec_phase2.php:433 +#: usr/local/www/vpn_ipsec_phase2.php:459 +#: usr/local/www/vpn_ipsec_phase2.php:525 +#: usr/local/www/vpn_ipsec_phase2.php:561 +#: usr/local/www/vpn_ipsec_phase2.php:547 +#: usr/local/www/vpn_ipsec_phase2.php:582 +#, php-format +msgid "%s subnet" +msgstr " subrede %s" + +#: usr/local/www/vpn_ipsec_phase2.php:512 +#: usr/local/www/vpn_ipsec_phase2.php:538 +#: usr/local/www/vpn_ipsec_phase2.php:640 +#: usr/local/www/vpn_ipsec_phase2.php:661 +msgid "Phase 2 proposal (SA/Key Exchange)" +msgstr "Proposta da Fase 2 (Troca de Chave/SA)" + +#: usr/local/www/vpn_ipsec_phase2.php:527 +#: usr/local/www/vpn_ipsec_phase2.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:655 +#: usr/local/www/vpn_ipsec_phase2.php:676 +msgid "ESP is encryption, AH is authentication only" +msgstr "ESP é criptografia, AH é somente autenticação" + +#: usr/local/www/vpn_ipsec_phase2.php:532 +#: usr/local/www/vpn_ipsec_phase2.php:558 +#: usr/local/www/vpn_ipsec_phase2.php:660 +#: usr/local/www/vpn_ipsec_phase2.php:681 +msgid "Encryption algorithms" +msgstr "Algorítmos de criptografia" + +#: usr/local/www/vpn_ipsec_phase2.php:574 +#: usr/local/www/vpn_ipsec_phase2.php:600 +#: usr/local/www/vpn_ipsec_phase2.php:702 +#: usr/local/www/vpn_ipsec_phase2.php:723 +msgid "Hint: use 3DES for best compatibility or if you have a hardware crypto accelerator card. Blowfish is usually the fastest in software encryption" +msgstr "Dica: use 3DES para melhor compatibilidade ou se você tem um cartão de aceleração de criptografia de hardware. Blowfish é normalmente o mais rápido em criptografia de software" + +#: usr/local/www/vpn_ipsec_phase2.php:580 +#: usr/local/www/vpn_ipsec_phase2.php:606 +#: usr/local/www/vpn_ipsec_phase2.php:708 +#: usr/local/www/vpn_ipsec_phase2.php:729 +msgid "Hash algorithms" +msgstr "Algorítmos de hash" + +#: usr/local/www/vpn_ipsec_phase2.php:590 +#: usr/local/www/vpn_ipsec_phase2.php:616 +#: usr/local/www/vpn_ipsec_phase2.php:718 +#: usr/local/www/vpn_ipsec_phase2.php:739 +msgid "PFS key group" +msgstr "Grupo de chave PFS" + +#: usr/local/www/vpn_ipsec_phase2.php:614 +#: usr/local/www/vpn_ipsec_phase2.php:640 +#: usr/local/www/vpn_ipsec_phase2.php:736 +#: usr/local/www/vpn_ipsec_phase2.php:757 +msgid "Set globally in mobile client options" +msgstr "Configure globalmente em opções de clientes móveis" + +#: usr/local/www/vpn_ipsec_phase2.php:632 +#: usr/local/www/vpn_ipsec_phase2.php:658 +#: usr/local/www/vpn_ipsec_phase2.php:754 +#: usr/local/www/vpn_ipsec_phase2.php:775 +msgid "Automatically ping host" +msgstr "Fazer ping em host automaticamente" + +#: usr/local/www/vpn_l2tp.php:300 +msgid "Enable l2tp server" +msgstr "Habilitar servidor l2tp" + +#: usr/local/www/vpn_l2tp.php:325 usr/local/www/vpn_l2tp.php:326 +#: usr/local/www/vpn_l2tp.php:329 +msgid "Enter the IP address the L2TP server should give to clients for use as their \"gateway\"" +msgstr "Digite o endereço IP que o servidor L2TP deve dar aos clientes para utilizar como seus \"gateway\"" + +#: usr/local/www/vpn_l2tp.php:337 usr/local/www/vpn_l2tp.php:338 +#: usr/local/www/vpn_l2tp.php:341 +msgid "Specify the starting address for the client IP address subnet." +msgstr "Especifique o endereço de início para a subrede de endereços IP do cliente." + +#: usr/local/www/vpn_l2tp.php:341 usr/local/www/vpn_pppoe_edit.php:390 +#: usr/local/www/vpn_pppoe_edit.php:391 usr/local/www/vpn_pppoe_edit.php:394 +msgid "Subnet netmask" +msgstr "Máscara de subrede" + +#: usr/local/www/vpn_l2tp.php:354 usr/local/www/vpn_pppoe_edit.php:403 +#: usr/local/www/vpn_pppoe_edit.php:404 usr/local/www/vpn_l2tp.php:355 +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_pppoe_edit.php:407 +msgid "is" +msgstr "é" + +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:359 +#: usr/local/www/vpn_l2tp.php:362 +msgid "Number of L2TP users" +msgstr "Número de usuários L2TP" + +#: usr/local/www/vpn_l2tp.php:371 usr/local/www/vpn_l2tp.php:372 +#: usr/local/www/vpn_l2tp.php:375 +msgid "is ten L2TP clients" +msgstr "tem dez clientes L2TP" + +#: usr/local/www/vpn_l2tp.php:375 usr/local/www/vpn_l2tp.php:376 +#: usr/local/www/vpn_l2tp.php:379 +msgid "Secret" +msgstr "Segredo" + +#: usr/local/www/vpn_l2tp.php:379 usr/local/www/vpn_l2tp.php:380 +#: usr/local/www/vpn_l2tp.php:383 +msgid "Specify optional secret shared between peers. Required on some devices/setups." +msgstr "Especificar segredos opcionais compartilhados entre peers. Requerido em alguns dispositivos/instalações." + +#: usr/local/www/vpn_l2tp.php:383 +msgid "Encryption type" +msgstr "Tipo de criptografia" + +#: usr/local/www/vpn_l2tp.php:386 usr/local/www/vpn_l2tp.php:387 +#: usr/local/www/vpn_l2tp.php:390 +msgid "CHAP" +msgstr "CHAP" + +#: usr/local/www/vpn_l2tp.php:387 usr/local/www/services_captiveportal.php:607 +#: usr/local/www/services_captiveportal.php:605 usr/local/www/vpn_l2tp.php:388 +#: usr/local/www/vpn_l2tp.php:391 usr/local/www/services_captiveportal.php:606 +#: usr/local/www/services_captiveportal.php:622 +msgid "PAP" +msgstr "PAP" + +#: usr/local/www/vpn_l2tp.php:390 usr/local/www/vpn_l2tp.php:391 +#: usr/local/www/vpn_l2tp.php:394 +msgid "Specifies which protocol to use for authentication." +msgstr "Especifica qual protocolo usar para autenticação." + +#: usr/local/www/vpn_l2tp.php:394 usr/local/www/vpn_l2tp.php:395 +#: usr/local/www/vpn_l2tp.php:398 +msgid "L2TP DNS Servers" +msgstr "Servidores DNS L2TP" + +#: usr/local/www/vpn_l2tp.php:400 usr/local/www/vpn_l2tp.php:401 +#: usr/local/www/vpn_l2tp.php:404 +msgid "primary and secondary DNS servers assigned to L2TP clients" +msgstr "servidores DNS primário e secundário atribuídos a clientes L2TP" + +#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_l2tp.php:415 +#: usr/local/www/vpn_l2tp.php:418 +msgid "When set, all users will be authenticated using the RADIUS server specified below. The local user database will not be used." +msgstr "Quando configurado, todos os usuários serão autenticados usando o servidor RADIUS especificado abaixo. A base de dados de usuários local não será usada." + +#: usr/local/www/vpn_l2tp.php:418 usr/local/www/vpn_l2tp.php:419 +#: usr/local/www/vpn_l2tp.php:422 +msgid "Sends accounting packets to the RADIUS server." +msgstr "Envia pacotes de accounting para o servidor RADIUS." + +#: usr/local/www/vpn_l2tp.php:421 +msgid "RADIUS server" +msgstr "Servidor RADIUS" + +#: usr/local/www/vpn_l2tp.php:425 usr/local/www/vpn_l2tp.php:426 +#: usr/local/www/vpn_l2tp.php:429 +msgid "Enter the IP address of the RADIUS server." +msgstr "Informe o endereço IP do servidor RADIUS." + +#: usr/local/www/vpn_l2tp.php:432 usr/local/www/vpn_l2tp.php:433 +#: usr/local/www/vpn_l2tp.php:436 +msgid "Enter the shared secret that will be used to authenticate to the RADIUS server." +msgstr "Informe o segredo compartilhado que será usado para autenticar no servidor RADIUS." + +#: usr/local/www/vpn_l2tp.php:435 +msgid "RADIUS issued IP's" +msgstr "IP emitidos pelo RADIUS" + +#: usr/local/www/vpn_l2tp.php:439 usr/local/www/vpn_l2tp.php:440 +#: usr/local/www/vpn_l2tp.php:443 +msgid "Issue IP Addresses via RADIUS server." +msgstr "Endereços IP emitidos via servidor RADIUS." + +#: usr/local/www/vpn_l2tp.php:452 usr/local/www/vpn_l2tp.php:453 +#: usr/local/www/vpn_l2tp.php:456 +msgid "Don't forget to add a firewall rule to permit traffic from L2TP clients!" +msgstr "Não se esqueça de adicionar uma regra de firewall para permitir tráfego de clientes L2TP!" + +#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87 +msgid "The l2tp user list has been modified" +msgstr "A lista de usuários l2tp foi modificada" + +#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87 +msgid "Warning: this will terminate all current l2tp sessions!" +msgstr "Advertência: isso finalizará todas as sessões l2tp atuais!" + +#: usr/local/www/vpn_l2tp_users_edit.php:164 +#: usr/local/www/vpn_l2tp_users_edit.php:165 +msgid "If you want to change the users password, enter it here twice." +msgstr "Se você desejar mudar a senha do usuário, informe-a aqui duas vezes." + +#: usr/local/www/vpn_openvpn_client.php:40 +#: usr/local/www/vpn_openvpn_client.php:366 +#: usr/local/www/vpn_openvpn_csc.php:294 +#: usr/local/www/vpn_openvpn_server.php:584 +#: usr/local/www/vpn_openvpn_server.php:657 +#: usr/local/www/vpn_openvpn_client.php:371 +#: usr/local/www/vpn_openvpn_csc.php:293 +#: usr/local/www/vpn_openvpn_server.php:675 +#: usr/local/www/vpn_openvpn_client.php:379 +#: usr/local/www/vpn_openvpn_client.php:397 +#: usr/local/www/vpn_openvpn_server.php:701 +msgid "Client" +msgstr "Cliente" + +#: usr/local/www/vpn_openvpn_client.php:82 +#: usr/local/www/vpn_openvpn_client.php:86 +msgid "Client successfully deleted" +msgstr "Cliente apagado com sucesso" + +#: usr/local/www/vpn_openvpn_client.php:164 +#: usr/local/www/vpn_openvpn_server.php:227 +#: usr/local/www/vpn_openvpn_server.php:232 +#: usr/local/www/vpn_openvpn_client.php:165 +#: usr/local/www/vpn_openvpn_server.php:233 +#: usr/local/www/vpn_openvpn_client.php:171 +#: usr/local/www/vpn_openvpn_client.php:182 +#: usr/local/www/vpn_openvpn_server.php:254 +msgid "The specified 'Local port' is in use. Please select another value" +msgstr "A 'porta local' especificada está em uso. Por favor, selecione outro valor" + +#: usr/local/www/vpn_openvpn_client.php:183 +#: usr/local/www/vpn_openvpn_client.php:184 +#: usr/local/www/vpn_openvpn_client.php:190 +#: usr/local/www/vpn_openvpn_client.php:201 +msgid "User name and password are required for proxy with authentication." +msgstr "Nome de usuário e senha são requeridos para o proxy com autenticação." + +#: usr/local/www/vpn_openvpn_client.php:200 +#: usr/local/www/vpn_openvpn_server.php:235 +#: usr/local/www/vpn_openvpn_server.php:240 +#: usr/local/www/vpn_openvpn_client.php:204 +#: usr/local/www/vpn_openvpn_server.php:241 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_client.php:228 +#: usr/local/www/vpn_openvpn_server.php:262 +msgid "The field 'Shared Key' does not appear to be valid" +msgstr "O campo 'Chave compartilhada' não parece ser válido" + +#: usr/local/www/vpn_openvpn_client.php:205 +#: usr/local/www/vpn_openvpn_server.php:240 +#: usr/local/www/vpn_openvpn_server.php:245 +#: usr/local/www/vpn_openvpn_client.php:209 +#: usr/local/www/vpn_openvpn_server.php:246 +#: usr/local/www/vpn_openvpn_client.php:215 +#: usr/local/www/vpn_openvpn_client.php:233 +#: usr/local/www/vpn_openvpn_server.php:267 +msgid "The field 'TLS Authentication Key' does not appear to be valid" +msgstr "O campo 'Chave de Autenticação TLS' não parece ser válido" + +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/vpn_openvpn_server.php:286 +#: usr/local/www/vpn_openvpn_server.php:291 +#: usr/local/www/vpn_openvpn_client.php:218 +#: usr/local/www/vpn_openvpn_server.php:292 +#: usr/local/www/vpn_openvpn_client.php:224 +#: usr/local/www/vpn_openvpn_client.php:242 +#: usr/local/www/vpn_openvpn_server.php:313 +msgid "Shared key" +msgstr "Chave compartilhada" + +#: usr/local/www/vpn_openvpn_client.php:367 +#: usr/local/www/vpn_openvpn_csc.php:295 +#: usr/local/www/vpn_openvpn_server.php:585 +#: usr/local/www/vpn_openvpn_server.php:658 +#: usr/local/www/vpn_openvpn_client.php:372 +#: usr/local/www/vpn_openvpn_csc.php:294 +#: usr/local/www/vpn_openvpn_server.php:676 +#: usr/local/www/vpn_openvpn_client.php:380 +#: usr/local/www/vpn_openvpn_client.php:398 +#: usr/local/www/vpn_openvpn_server.php:702 +msgid "Client Specific Overrides" +msgstr "Substituição Específica de Cliente" + +#: usr/local/www/vpn_openvpn_client.php:397 +#: usr/local/www/vpn_openvpn_client.php:402 +#: usr/local/www/vpn_openvpn_client.php:410 +#: usr/local/www/vpn_openvpn_client.php:428 +msgid "Disable this client" +msgstr "Desabilitar esse cliente" + +#: usr/local/www/vpn_openvpn_client.php:402 +#: usr/local/www/vpn_openvpn_client.php:407 +#: usr/local/www/vpn_openvpn_client.php:415 +#: usr/local/www/vpn_openvpn_client.php:433 +msgid "Set this option to disable this client without removing it from the list" +msgstr "Configure essa opção para desabilitar esse cliente sem removê-lo da lista" + +#: usr/local/www/vpn_openvpn_client.php:406 +#: usr/local/www/vpn_openvpn_server.php:624 +#: usr/local/www/vpn_openvpn_server.php:697 +#: usr/local/www/vpn_openvpn_client.php:411 +#: usr/local/www/vpn_openvpn_server.php:715 +#: usr/local/www/vpn_openvpn_client.php:419 +#: usr/local/www/vpn_openvpn_client.php:437 +#: usr/local/www/vpn_openvpn_server.php:741 +msgid "Server Mode" +msgstr "Modo do Servidor" + +#: usr/local/www/vpn_openvpn_client.php:436 +#: usr/local/www/vpn_openvpn_client.php:441 +#: usr/local/www/vpn_openvpn_client.php:449 +#: usr/local/www/vpn_openvpn_client.php:467 +msgid "Device mode" +msgstr "Modo do Dispositivo" + +#: usr/local/www/vpn_openvpn_client.php:476 +#: usr/local/www/vpn_openvpn_server.php:716 +#: usr/local/www/vpn_openvpn_server.php:789 +#: usr/local/www/vpn_openvpn_client.php:481 +#: usr/local/www/vpn_openvpn_server.php:817 +#: usr/local/www/vpn_openvpn_client.php:499 +#: usr/local/www/vpn_openvpn_client.php:518 +#: usr/local/www/vpn_openvpn_server.php:844 +msgid "Local port" +msgstr "Porta local" + +#: usr/local/www/vpn_openvpn_client.php:480 +#: usr/local/www/vpn_openvpn_client.php:485 +#: usr/local/www/vpn_openvpn_client.php:503 +#: usr/local/www/vpn_openvpn_client.php:522 +msgid "Set this option if you would like to bind to a specific port. Leave this blank or enter 0 for a random dynamic port." +msgstr "Configure esta opção se você desejar especificar uma porta específica para bind. Deixe em branco ou 0 para obter um valor randômico de porta." + +#: usr/local/www/vpn_openvpn_client.php:484 +#: usr/local/www/vpn_openvpn_client.php:489 +#: usr/local/www/vpn_openvpn_client.php:507 +#: usr/local/www/vpn_openvpn_client.php:526 +msgid "Server host or address" +msgstr "Host de servidor ou endereço" + +#: usr/local/www/vpn_openvpn_client.php:490 +#: usr/local/www/vpn_openvpn_client.php:495 +#: usr/local/www/vpn_openvpn_client.php:513 +#: usr/local/www/vpn_openvpn_client.php:532 +msgid "Server port" +msgstr "Porta de servidor" + +#: usr/local/www/vpn_openvpn_client.php:496 +#: usr/local/www/vpn_openvpn_client.php:501 +#: usr/local/www/vpn_openvpn_client.php:519 +#: usr/local/www/vpn_openvpn_client.php:538 +msgid "Proxy host or address" +msgstr "Host de Proxy ou endereço" + +#: usr/local/www/vpn_openvpn_client.php:502 +#: usr/local/www/vpn_openvpn_client.php:507 +#: usr/local/www/vpn_openvpn_client.php:525 +#: usr/local/www/vpn_openvpn_client.php:544 +msgid "Proxy port" +msgstr "Porta do Proxy" + +#: usr/local/www/vpn_openvpn_client.php:508 +#: usr/local/www/vpn_openvpn_client.php:513 +#: usr/local/www/vpn_openvpn_client.php:531 +#: usr/local/www/vpn_openvpn_client.php:550 +msgid "Proxy authentication extra options" +msgstr "Opções extras de autenticação de proxy" + +#: usr/local/www/vpn_openvpn_client.php:520 +#: usr/local/www/vpn_openvpn_client.php:525 +#: usr/local/www/vpn_openvpn_client.php:543 +#: usr/local/www/vpn_openvpn_client.php:562 +msgid "basic" +msgstr "básico" + +#: usr/local/www/vpn_openvpn_client.php:521 +#: usr/local/www/vpn_openvpn_client.php:526 +#: usr/local/www/vpn_openvpn_client.php:544 +#: usr/local/www/vpn_openvpn_client.php:563 +msgid "ntlm" +msgstr "ntlm" + +#: usr/local/www/vpn_openvpn_client.php:552 +#: usr/local/www/vpn_openvpn_client.php:557 +#: usr/local/www/vpn_openvpn_client.php:575 +#: usr/local/www/vpn_openvpn_client.php:594 +msgid "Server host name resolution" +msgstr "Resolução de nome de host de servidor" + +#: usr/local/www/vpn_openvpn_client.php:562 +#: usr/local/www/vpn_openvpn_client.php:567 +#: usr/local/www/vpn_openvpn_client.php:585 +#: usr/local/www/vpn_openvpn_client.php:604 +msgid "Infinitely resolve server" +msgstr "Resolver servidor infinitamente" + +#: usr/local/www/vpn_openvpn_client.php:567 +#: usr/local/www/vpn_openvpn_client.php:572 +#: usr/local/www/vpn_openvpn_client.php:590 +#: usr/local/www/vpn_openvpn_client.php:609 +msgid "Continuously attempt to resolve the server host name. Useful when communicating with a server that is not permanently connected to the Internet" +msgstr "Continuamente tenta resolver o nome de host do servidor. Útil quando estiver comunicando-se com um servidor que não está permanentemente conectado à Internet" + +#: usr/local/www/vpn_openvpn_client.php:584 +#: usr/local/www/vpn_openvpn_server.php:733 +#: usr/local/www/vpn_openvpn_server.php:806 +#: usr/local/www/vpn_openvpn_client.php:589 +#: usr/local/www/vpn_openvpn_server.php:834 +#: usr/local/www/vpn_openvpn_client.php:607 +#: usr/local/www/vpn_openvpn_client.php:626 +#: usr/local/www/vpn_openvpn_server.php:861 +msgid "Cryptographic Settings" +msgstr "Configurações de Criptografia" + +#: usr/local/www/vpn_openvpn_client.php:587 +#: usr/local/www/vpn_openvpn_server.php:736 +#: usr/local/www/vpn_openvpn_server.php:809 +#: usr/local/www/vpn_openvpn_client.php:592 +#: usr/local/www/vpn_openvpn_server.php:837 +#: usr/local/www/vpn_openvpn_client.php:610 +#: usr/local/www/vpn_openvpn_client.php:629 +#: usr/local/www/vpn_openvpn_server.php:864 +msgid "TLS Authentication" +msgstr "Autenticação de TLS" + +#: usr/local/www/vpn_openvpn_client.php:597 +#: usr/local/www/vpn_openvpn_server.php:746 +#: usr/local/www/vpn_openvpn_server.php:819 +#: usr/local/www/vpn_openvpn_client.php:602 +#: usr/local/www/vpn_openvpn_server.php:847 +#: usr/local/www/vpn_openvpn_client.php:620 +#: usr/local/www/vpn_openvpn_client.php:639 +#: usr/local/www/vpn_openvpn_server.php:874 +msgid "Enable authentication of TLS packets" +msgstr "Habilitar autenticação de pacotes TLS" + +#: usr/local/www/vpn_openvpn_client.php:611 +#: usr/local/www/vpn_openvpn_server.php:760 +#: usr/local/www/vpn_openvpn_server.php:833 +#: usr/local/www/vpn_openvpn_client.php:616 +#: usr/local/www/vpn_openvpn_server.php:861 +#: usr/local/www/vpn_openvpn_client.php:634 +#: usr/local/www/vpn_openvpn_client.php:653 +#: usr/local/www/vpn_openvpn_server.php:888 +msgid "Automatically generate a shared TLS authentication key" +msgstr "Gerar automaticamente uma chave de autenticação TLS compartilhada" + +#: usr/local/www/vpn_openvpn_client.php:622 +#: usr/local/www/vpn_openvpn_client.php:699 +#: usr/local/www/vpn_openvpn_server.php:771 +#: usr/local/www/vpn_openvpn_server.php:891 +#: usr/local/www/vpn_openvpn_server.php:844 +#: usr/local/www/vpn_openvpn_server.php:964 +#: usr/local/www/vpn_openvpn_client.php:627 +#: usr/local/www/vpn_openvpn_client.php:704 +#: usr/local/www/vpn_openvpn_server.php:872 +#: usr/local/www/vpn_openvpn_server.php:992 +#: usr/local/www/vpn_openvpn_client.php:645 +#: usr/local/www/vpn_openvpn_client.php:722 +#: usr/local/www/vpn_openvpn_client.php:664 +#: usr/local/www/vpn_openvpn_client.php:741 +#: usr/local/www/vpn_openvpn_server.php:899 +#: usr/local/www/vpn_openvpn_server.php:1019 +msgid "Paste your shared key here" +msgstr "Cole sua chave compartilhada aqui" + +#: usr/local/www/vpn_openvpn_client.php:648 +#: usr/local/www/vpn_openvpn_client.php:653 +#: usr/local/www/vpn_openvpn_client.php:671 +#: usr/local/www/vpn_openvpn_client.php:690 +msgid "Client Certificate" +msgstr "Certificado de Cliente" + +#: usr/local/www/vpn_openvpn_client.php:677 +#: usr/local/www/vpn_openvpn_server.php:869 +#: usr/local/www/vpn_openvpn_server.php:942 +#: usr/local/www/vpn_openvpn_client.php:682 +#: usr/local/www/vpn_openvpn_server.php:970 +#: usr/local/www/vpn_openvpn_client.php:700 +#: usr/local/www/vpn_openvpn_client.php:719 +#: usr/local/www/vpn_openvpn_server.php:997 +msgid "Shared Key" +msgstr "Chave Compartilhada" + +#: usr/local/www/vpn_openvpn_client.php:688 +#: usr/local/www/vpn_openvpn_server.php:880 +#: usr/local/www/vpn_openvpn_server.php:953 +#: usr/local/www/vpn_openvpn_client.php:693 +#: usr/local/www/vpn_openvpn_server.php:981 +#: usr/local/www/vpn_openvpn_client.php:711 +#: usr/local/www/vpn_openvpn_client.php:730 +#: usr/local/www/vpn_openvpn_server.php:1008 +msgid "Automatically generate a shared key" +msgstr "Gerar automaticamente uma chave compartilhada" + +#: usr/local/www/vpn_openvpn_client.php:724 +#: usr/local/www/vpn_openvpn_server.php:916 +#: usr/local/www/vpn_openvpn_server.php:989 +#: usr/local/www/vpn_openvpn_client.php:729 +#: usr/local/www/vpn_openvpn_server.php:1017 +#: usr/local/www/vpn_openvpn_client.php:747 +#: usr/local/www/vpn_openvpn_client.php:766 +#: usr/local/www/vpn_openvpn_server.php:1044 +msgid "Hardware Crypto" +msgstr "Hardware Crypto" + +#: usr/local/www/vpn_openvpn_client.php:745 +#: usr/local/www/vpn_openvpn_csc.php:374 +#: usr/local/www/vpn_openvpn_server.php:980 +#: usr/local/www/vpn_openvpn_server.php:1053 +#: usr/local/www/vpn_openvpn_client.php:750 +#: usr/local/www/vpn_openvpn_csc.php:373 +#: usr/local/www/vpn_openvpn_server.php:1081 +#: usr/local/www/vpn_openvpn_client.php:768 +#: usr/local/www/vpn_openvpn_client.php:787 +#: usr/local/www/vpn_openvpn_server.php:1108 +msgid "Tunnel Settings" +msgstr "Configurações de túnel" + +#: usr/local/www/vpn_openvpn_client.php:748 +#: usr/local/www/vpn_openvpn_csc.php:377 +#: usr/local/www/vpn_openvpn_server.php:1450 +#: usr/local/www/vpn_openvpn_server.php:1592 +#: usr/local/www/vpn_openvpn_client.php:753 +#: usr/local/www/vpn_openvpn_csc.php:376 +#: usr/local/www/vpn_openvpn_server.php:1633 +#: usr/local/www/vpn_openvpn_server.php:1685 +msgid "Tunnel Network" +msgstr "Rede de túneis" + +#: usr/local/www/vpn_openvpn_client.php:752 +#: usr/local/www/vpn_openvpn_csc.php:381 +#: usr/local/www/vpn_openvpn_client.php:757 +#: usr/local/www/vpn_openvpn_csc.php:380 +#: usr/local/www/vpn_openvpn_client.php:775 +#: usr/local/www/vpn_openvpn_client.php:794 +msgid "This is the virtual network used for private communications between this client and the server expressed using CIDR (eg. 10.0.8.0/24). The first network address is assumed to be the server address and the second network address will be assigned to the client virtual interface" +msgstr "Essa é uma rede virtual usada para comunicações privadas entre esse cliente e o servidor expresso usando CIDR (e.g. 10.0.8.0/24). O primeiro endereço é assumido como o do endereço do servidor e, o segundo, o endereço de rede que será atribuído à interface virtual do cliente" + +#: usr/local/www/vpn_openvpn_client.php:766 +#: usr/local/www/vpn_openvpn_client.php:771 +msgid "This is a network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter here the remote LAN here. You may leave this blank to only communicate with other clients" +msgstr "Essa é uma rede que será roteada através do túnel para que uma VPN site-to-site possa ser estabelecida sem modificar manualmente as tabelas de roteamento. Expressa como um intervalor CIDR. Se essa é uma VPN site-to-site, informe que a LAN remote. Você deve deixar isso em branco para somente comunicar-se com outros clientes" + +#: usr/local/www/vpn_openvpn_client.php:776 +#: usr/local/www/vpn_openvpn_client.php:781 +#: usr/local/www/vpn_openvpn_client.php:827 +#: usr/local/www/vpn_openvpn_client.php:846 +msgid "Limit outgoing bandwidth" +msgstr "Limitar tamanho de banda de saída" + +#: usr/local/www/vpn_openvpn_client.php:780 +#: usr/local/www/vpn_openvpn_client.php:785 +#: usr/local/www/vpn_openvpn_client.php:831 +#: usr/local/www/vpn_openvpn_client.php:850 +msgid "Maximum outgoing bandwidth for this tunnel. Leave empty for no limit. The input value has to be something between 100 bytes/sec and 100 Mbytes/sec (entered as bytes per second)" +msgstr "Tamanho de banda de saída máximo para esse túnel. Deixe vazio para não ter limite. O valor inserido tem que ser algo entre 100 bytes/seg e 100 Mbytes/seg (informado como bytes por segundo)" + +#: usr/local/www/vpn_openvpn_client.php:797 +#: usr/local/www/vpn_openvpn_server.php:1087 +#: usr/local/www/vpn_openvpn_server.php:1229 +#: usr/local/www/vpn_openvpn_client.php:802 +#: usr/local/www/vpn_openvpn_server.php:1271 +#: usr/local/www/vpn_openvpn_client.php:848 +#: usr/local/www/vpn_openvpn_client.php:867 +#: usr/local/www/vpn_openvpn_server.php:1298 +msgid "Compress tunnel packets using the LZO algorithm" +msgstr "Comprimir pacotes do túnel usando o algorítmo LZO" + +#: usr/local/www/vpn_openvpn_client.php:805 +#: usr/local/www/vpn_openvpn_server.php:1095 +#: usr/local/www/vpn_openvpn_server.php:1237 +#: usr/local/www/vpn_openvpn_client.php:810 +#: usr/local/www/vpn_openvpn_server.php:1279 +#: usr/local/www/vpn_openvpn_client.php:856 +#: usr/local/www/vpn_openvpn_client.php:875 +#: usr/local/www/vpn_openvpn_server.php:1306 +msgid "Type-of-Service" +msgstr "Tipo de Serviço" + +#: usr/local/www/vpn_openvpn_client.php:815 +#: usr/local/www/vpn_openvpn_server.php:1105 +#: usr/local/www/vpn_openvpn_server.php:1247 +#: usr/local/www/vpn_openvpn_client.php:820 +#: usr/local/www/vpn_openvpn_server.php:1289 +#: usr/local/www/vpn_openvpn_client.php:866 +#: usr/local/www/vpn_openvpn_client.php:885 +#: usr/local/www/vpn_openvpn_server.php:1316 +msgid "Set the TOS IP header value of tunnel packets to match the encapsulated packet value" +msgstr "Configurar o valor do cabeçalho IP TOS para que os pacotes do túnel correspondam ao valor do pacote encapsulado" + +#: usr/local/www/vpn_openvpn_client.php:826 +#: usr/local/www/vpn_openvpn_server.php:1409 +#: usr/local/www/vpn_openvpn_server.php:1551 +#: usr/local/www/vpn_openvpn_client.php:831 +#: usr/local/www/vpn_openvpn_server.php:1593 +#: usr/local/www/vpn_openvpn_client.php:880 +#: usr/local/www/vpn_openvpn_client.php:899 +#: usr/local/www/vpn_openvpn_server.php:1645 +msgid "Advanced configuration" +msgstr "Configuração Avançada" + +#: usr/local/www/vpn_openvpn_client.php:835 +#: usr/local/www/vpn_openvpn_client.php:840 +#: usr/local/www/vpn_openvpn_client.php:889 +#: usr/local/www/vpn_openvpn_client.php:908 +msgid "Enter any additional options you would like to add to the OpenVPN client configuration here, separated by a semicolon" +msgstr "Informe quaisquer opções adicionais que você deseja adicionar à configuração do cliente OpenVPN aqui, separado por ponto-e-vírgula" + +#: usr/local/www/vpn_openvpn_client.php:836 +#: usr/local/www/vpn_openvpn_client.php:841 +#: usr/local/www/vpn_openvpn_client.php:890 +msgid "EXAMPLE: route 10.0.0.0 255.255.255.0;" +msgstr "EXEMPLO: route 10.0.0.0 255.255.255.0;" + +#: usr/local/www/vpn_openvpn_client.php:891 +#: usr/local/www/vpn_openvpn_client.php:896 +#: usr/local/www/vpn_openvpn_client.php:949 +#: usr/local/www/vpn_openvpn_client.php:968 +msgid "edit client" +msgstr "editar cliente" + +#: usr/local/www/vpn_openvpn_client.php:895 +#: usr/local/www/vpn_openvpn_client.php:900 +#: usr/local/www/vpn_openvpn_client.php:953 +#: usr/local/www/vpn_openvpn_client.php:972 +msgid "delete client" +msgstr "apagar cliente" + +#: usr/local/www/vpn_openvpn_client.php:908 +#: usr/local/www/vpn_openvpn_client.php:913 +#: usr/local/www/vpn_openvpn_client.php:966 +#: usr/local/www/vpn_openvpn_client.php:985 +msgid "add client" +msgstr "adicionar cliente" + +#: usr/local/www/vpn_openvpn_client.php:915 +#: usr/local/www/vpn_openvpn_client.php:920 +#: usr/local/www/vpn_openvpn_client.php:973 +#: usr/local/www/vpn_openvpn_client.php:992 +msgid "Additional OpenVPN clients can be added here." +msgstr "Clientes OpenVPN adicionais podem ser adicionados aqui." + +#: usr/local/www/vpn_openvpn_csc.php:40 +msgid "Client Specific Override" +msgstr "Substituição Específica de Cliente" + +#: usr/local/www/vpn_openvpn_csc.php:67 usr/local/www/vpn_openvpn_csc.php:66 +msgid "Client Specific Override successfully deleted" +msgstr "Substituição Específica de Cliente apagada com sucesso" + +#: usr/local/www/vpn_openvpn_csc.php:131 +#: usr/local/www/vpn_openvpn_server.php:244 +#: usr/local/www/vpn_openvpn_server.php:249 +#: usr/local/www/vpn_openvpn_csc.php:130 +#: usr/local/www/vpn_openvpn_server.php:250 +#: usr/local/www/vpn_openvpn_server.php:271 +msgid "The field 'DNS Server #1' must contain a valid IP address" +msgstr "O campo 'Servidor DNS #1' deve conter um endereço IP válido" + +#: usr/local/www/vpn_openvpn_csc.php:133 +#: usr/local/www/vpn_openvpn_server.php:246 +#: usr/local/www/vpn_openvpn_server.php:251 +#: usr/local/www/vpn_openvpn_csc.php:132 +#: usr/local/www/vpn_openvpn_server.php:252 +#: usr/local/www/vpn_openvpn_server.php:273 +msgid "The field 'DNS Server #2' must contain a valid IP address" +msgstr "O campo 'Servidor DNS #2' deve conter um endereço IP válido" + +#: usr/local/www/vpn_openvpn_csc.php:135 +#: usr/local/www/vpn_openvpn_server.php:248 +#: usr/local/www/vpn_openvpn_server.php:253 +#: usr/local/www/vpn_openvpn_csc.php:134 +#: usr/local/www/vpn_openvpn_server.php:254 +#: usr/local/www/vpn_openvpn_server.php:275 +msgid "The field 'DNS Server #3' must contain a valid IP address" +msgstr "O campo 'Servidor DNS #3' deve conter um endereço IP válido" + +#: usr/local/www/vpn_openvpn_csc.php:137 +#: usr/local/www/vpn_openvpn_server.php:250 +#: usr/local/www/vpn_openvpn_server.php:255 +#: usr/local/www/vpn_openvpn_csc.php:136 +#: usr/local/www/vpn_openvpn_server.php:256 +#: usr/local/www/vpn_openvpn_server.php:277 +msgid "The field 'DNS Server #4' must contain a valid IP address" +msgstr "O campo 'Servidor DNS #4' deve conter um endereço IP válido" + +#: usr/local/www/vpn_openvpn_csc.php:142 +#: usr/local/www/vpn_openvpn_server.php:255 +#: usr/local/www/vpn_openvpn_server.php:260 +#: usr/local/www/vpn_openvpn_csc.php:141 +#: usr/local/www/vpn_openvpn_server.php:261 +#: usr/local/www/vpn_openvpn_server.php:282 +msgid "The field 'NTP Server #1' must contain a valid IP address" +msgstr "O campo 'Servidor NTP #1' deve conter um endereço IP válido" + +#: usr/local/www/vpn_openvpn_csc.php:144 +#: usr/local/www/vpn_openvpn_server.php:257 +#: usr/local/www/vpn_openvpn_server.php:262 +#: usr/local/www/vpn_openvpn_csc.php:143 +#: usr/local/www/vpn_openvpn_server.php:263 +#: usr/local/www/vpn_openvpn_server.php:284 +msgid "The field 'NTP Server #2' must contain a valid IP address" +msgstr "O campo 'Servidor NTP #2' deve conter um endereço IP válido" + +#: usr/local/www/vpn_openvpn_csc.php:146 +#: usr/local/www/vpn_openvpn_server.php:259 +#: usr/local/www/vpn_openvpn_server.php:264 +#: usr/local/www/vpn_openvpn_csc.php:145 +#: usr/local/www/vpn_openvpn_server.php:265 +#: usr/local/www/vpn_openvpn_server.php:286 +msgid "The field 'NTP Server #3' must contain a valid IP address" +msgstr "O campo 'Servidor NTP #3' deve conter um endereço IP válido" + +#: usr/local/www/vpn_openvpn_csc.php:148 +#: usr/local/www/vpn_openvpn_server.php:261 +#: usr/local/www/vpn_openvpn_server.php:266 +#: usr/local/www/vpn_openvpn_csc.php:147 +#: usr/local/www/vpn_openvpn_server.php:267 +#: usr/local/www/vpn_openvpn_server.php:288 +msgid "The field 'NTP Server #4' must contain a valid IP address" +msgstr "O campo 'Servidor NTP #4' deve conter um endereço IP válido" + +#: usr/local/www/vpn_openvpn_csc.php:154 +#: usr/local/www/vpn_openvpn_server.php:267 +#: usr/local/www/vpn_openvpn_server.php:272 +#: usr/local/www/vpn_openvpn_csc.php:153 +#: usr/local/www/vpn_openvpn_server.php:273 +#: usr/local/www/vpn_openvpn_server.php:294 +msgid "The field 'WINS Server #1' must contain a valid IP address" +msgstr "O campo 'Servidor WINS #1' deve conter um endereço IP válido" + +#: usr/local/www/vpn_openvpn_csc.php:156 +#: usr/local/www/vpn_openvpn_server.php:269 +#: usr/local/www/vpn_openvpn_server.php:274 +#: usr/local/www/vpn_openvpn_csc.php:155 +#: usr/local/www/vpn_openvpn_server.php:275 +#: usr/local/www/vpn_openvpn_server.php:296 +msgid "The field 'WINS Server #2' must contain a valid IP address" +msgstr "O campo 'Servidor WINS #2' deve conter um endereço IP válido" + +#: usr/local/www/vpn_openvpn_csc.php:160 +#: usr/local/www/vpn_openvpn_server.php:273 +#: usr/local/www/vpn_openvpn_server.php:278 +#: usr/local/www/vpn_openvpn_csc.php:159 +#: usr/local/www/vpn_openvpn_server.php:279 +#: usr/local/www/vpn_openvpn_server.php:300 +msgid "The field 'NetBIOS Data Distribution Server #1' must contain a valid IP address" +msgstr "O campo 'Servidor de Distribuição de Dados do NetBIOS WINS #1' deve conter um endereço IP válido" + +#: usr/local/www/vpn_openvpn_csc.php:325 usr/local/www/vpn_openvpn_csc.php:324 +msgid "Disable this override" +msgstr "Desabilitar essa substituição" + +#: usr/local/www/vpn_openvpn_csc.php:330 usr/local/www/vpn_openvpn_csc.php:329 +msgid "Set this option to disable this client-specific override without removing it from the list" +msgstr "Configure essa opção para desabilitar uma substituição específica de cliente sem removê-la da lista" + +#: usr/local/www/vpn_openvpn_csc.php:334 usr/local/www/vpn_openvpn_csc.php:333 +msgid "Common name" +msgstr "Nome Comum" + +#: usr/local/www/vpn_openvpn_csc.php:338 usr/local/www/vpn_openvpn_csc.php:337 +msgid "Enter the client's X.509 common name here" +msgstr "Informe o nome comum dos X.509 do cliente aqui" + +#: usr/local/www/vpn_openvpn_csc.php:350 usr/local/www/vpn_openvpn_csc.php:349 +msgid "Connection blocking" +msgstr "Bloquei de conexão" + +#: usr/local/www/vpn_openvpn_csc.php:360 usr/local/www/vpn_openvpn_csc.php:359 +msgid "Block this client connection based on its common name" +msgstr "Bloqueie a conexão desse cliente baseado nesse nome comum" + +#: usr/local/www/vpn_openvpn_csc.php:365 usr/local/www/vpn_openvpn_csc.php:364 +msgid "Don't use this option to permanently disable a client due to a compromised key or password. Use a CRL (certificate revocation list) instead" +msgstr "Não use essa opção para desabilitar permanentemente um cliente devido a uma chave ou senha comprometida. An invés disso, use uma CRL (lista de revogação de certificado )" + +#: usr/local/www/vpn_openvpn_csc.php:391 +#: usr/local/www/vpn_openvpn_server.php:1011 +#: usr/local/www/vpn_openvpn_server.php:1153 +#: usr/local/www/vpn_openvpn_csc.php:390 +#: usr/local/www/vpn_openvpn_server.php:1181 +#: usr/local/www/vpn_openvpn_server.php:1208 +msgid "Redirect Gateway" +msgstr "Gateway de redirecionamento" + +#: usr/local/www/vpn_openvpn_csc.php:401 +#: usr/local/www/vpn_openvpn_server.php:1021 +#: usr/local/www/vpn_openvpn_server.php:1163 +#: usr/local/www/vpn_openvpn_csc.php:400 +#: usr/local/www/vpn_openvpn_server.php:1191 +#: usr/local/www/vpn_openvpn_server.php:1218 +msgid "Force all client generated traffic through the tunnel" +msgstr "Force todo o tráfego gerado por clientes através desse túnel" + +#: usr/local/www/vpn_openvpn_csc.php:412 +#: usr/local/www/vpn_openvpn_server.php:1155 +#: usr/local/www/vpn_openvpn_server.php:1297 +#: usr/local/www/vpn_openvpn_csc.php:411 +#: usr/local/www/vpn_openvpn_server.php:1339 +#: usr/local/www/vpn_openvpn_server.php:1366 +msgid "Client Settings" +msgstr "Configurações de Cliente" + +#: usr/local/www/vpn_openvpn_csc.php:415 usr/local/www/vpn_openvpn_csc.php:414 +msgid "Server Definitions" +msgstr "Definições de Servidor" + +#: usr/local/www/vpn_openvpn_csc.php:425 usr/local/www/vpn_openvpn_csc.php:424 +msgid "Prevent this client from receiving any server-defined client settings" +msgstr "Previna que esse cliente receba quaisquer configurações de cliente definidas no servidor" + +#: usr/local/www/vpn_openvpn_csc.php:510 +#: usr/local/www/vpn_openvpn_server.php:1271 +#: usr/local/www/vpn_openvpn_server.php:1413 +#: usr/local/www/vpn_openvpn_csc.php:509 +#: usr/local/www/vpn_openvpn_server.php:1455 +#: usr/local/www/vpn_openvpn_server.php:1507 +msgid "NTP Servers" +msgstr "Servidores NTP" + +#: usr/local/www/vpn_openvpn_csc.php:520 +#: usr/local/www/vpn_openvpn_server.php:1281 +#: usr/local/www/vpn_openvpn_server.php:1423 +#: usr/local/www/vpn_openvpn_csc.php:519 +#: usr/local/www/vpn_openvpn_server.php:1465 +#: usr/local/www/vpn_openvpn_server.php:1517 +msgid "Provide a NTP server list to clients" +msgstr "Fornece uma lista de servidores NTP para clientes" + +#: usr/local/www/vpn_openvpn_csc.php:546 +#: usr/local/www/vpn_openvpn_server.php:1307 +#: usr/local/www/vpn_openvpn_server.php:1449 +#: usr/local/www/vpn_openvpn_csc.php:545 +#: usr/local/www/vpn_openvpn_server.php:1491 +#: usr/local/www/vpn_openvpn_server.php:1543 +msgid "NetBIOS Options" +msgstr "Opções de NetBIOS" + +#: usr/local/www/vpn_openvpn_csc.php:556 +#: usr/local/www/vpn_openvpn_server.php:1317 +#: usr/local/www/vpn_openvpn_server.php:1459 +#: usr/local/www/vpn_openvpn_csc.php:555 +#: usr/local/www/vpn_openvpn_server.php:1501 +#: usr/local/www/vpn_openvpn_server.php:1553 +msgid "Enable NetBIOS over TCP/IP" +msgstr "Habilitar NetBIOS sobre TCP/IP" + +#: usr/local/www/vpn_openvpn_csc.php:561 +msgid "If this option is not set, all NetBIOS-over-TCP/IP options (includeing WINS) will be disabled" +msgstr "Se essa opção não estiver configurada, todas as opções de NetBIOS sobre TCP/IP (incluindo WINS) serão desabilitadas" + +#: usr/local/www/vpn_openvpn_csc.php:568 +#: usr/local/www/vpn_openvpn_server.php:1329 +#: usr/local/www/vpn_openvpn_server.php:1471 +#: usr/local/www/vpn_openvpn_csc.php:567 +#: usr/local/www/vpn_openvpn_server.php:1513 +#: usr/local/www/vpn_openvpn_server.php:1565 +msgid "Node Type" +msgstr "Tipo de Nó" + +#: usr/local/www/vpn_openvpn_csc.php:581 +#: usr/local/www/vpn_openvpn_server.php:1342 +#: usr/local/www/vpn_openvpn_server.php:1484 +#: usr/local/www/vpn_openvpn_csc.php:580 +#: usr/local/www/vpn_openvpn_server.php:1526 +#: usr/local/www/vpn_openvpn_server.php:1578 +msgid "Possible options: b-node (broadcasts), p-node (point-to-point name queries to a WINS server), m-node (broadcast then query name server), and h-node (query name server, then broadcast)" +msgstr "Opções possíveis: b-node (faz broadcasts), p-node (consulta nomes ponto-a-ponto para um servidor WINS), m-node (faz broadcast e então consulta servidor de nome), e h-node (consulta servidor de nome, então faz broadcast)" + +#: usr/local/www/vpn_openvpn_csc.php:595 +#: usr/local/www/vpn_openvpn_server.php:1356 +#: usr/local/www/vpn_openvpn_server.php:1498 +#: usr/local/www/vpn_openvpn_csc.php:594 +#: usr/local/www/vpn_openvpn_server.php:1540 +#: usr/local/www/vpn_openvpn_server.php:1592 +msgid "A NetBIOS Scope\tID provides an extended naming service for\tNetBIOS over TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to only those nodes with the same NetBIOS scope ID" +msgstr "Um \tID do escopo do NetBIOS fornece um serviço de nome extendido para \tNetBIOS sobre TCP/IP. O ID do escopo do NetBIOS isola o tráfego de NetBIOS em uma única rede para somente aqueles nós com o mesmo ID do escopo do NetBIOS" + +#: usr/local/www/vpn_openvpn_csc.php:648 usr/local/www/vpn_openvpn_csc.php:647 +msgid "Enter any additional options you would like to add for this client specific override, separated by a semicolon" +msgstr "Informe qualquer opção adicional que desejar para essa substituição específica de cliente, separado (csc) por um ponto-e-vírgula" + +#: usr/local/www/vpn_openvpn_csc.php:649 +#: usr/local/www/vpn_openvpn_server.php:1419 +#: usr/local/www/vpn_openvpn_server.php:1561 +#: usr/local/www/vpn_openvpn_csc.php:648 +#: usr/local/www/vpn_openvpn_server.php:1603 +#: usr/local/www/vpn_openvpn_server.php:1655 +msgid "EXAMPLE: push \"route 10.0.0.0 255.255.255.0\"" +msgstr "EXEMPLO: push \"route 10.0.0.0 255.255.255.0\"" + +#: usr/local/www/vpn_openvpn_csc.php:696 usr/local/www/vpn_openvpn_csc.php:695 +msgid "edit csc" +msgstr "editar csc" + +#: usr/local/www/vpn_openvpn_csc.php:699 usr/local/www/vpn_openvpn_csc.php:698 +msgid "Do you really want to delete this csc?" +msgstr "Você realmente deseja apagar essa csc?" + +#: usr/local/www/vpn_openvpn_csc.php:700 usr/local/www/vpn_openvpn_csc.php:699 +msgid "delete csc" +msgstr "apagar csc" + +#: usr/local/www/vpn_openvpn_csc.php:711 usr/local/www/vpn_openvpn_csc.php:710 +msgid "add csc" +msgstr "adicionar csc" + +#: usr/local/www/vpn_openvpn_csc.php:718 usr/local/www/vpn_openvpn_csc.php:717 +msgid "Additional OpenVPN client specific overrides can be added here." +msgstr "Substituições específicas de cliente OpenVPN adicionais podem ser adicionadas aqui." + +#: usr/local/www/vpn_openvpn_server.php:86 +#: usr/local/www/vpn_openvpn_server.php:87 +msgid "Server successfully deleted" +msgstr "Servidor apagado com sucesso" + +#: usr/local/www/vpn_openvpn_server.php:210 +#: usr/local/www/vpn_openvpn_server.php:215 +#: usr/local/www/vpn_openvpn_server.php:216 +#: usr/local/www/vpn_openvpn_server.php:228 +msgid "You must select a Backend for Authentication if the server mode requires User Auth." +msgstr "Você deve selecionar um Backend para Autenticação se o modo do servidor requerer Autenticação de Usuário." + +#: usr/local/www/vpn_openvpn_server.php:277 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/vpn_openvpn_server.php:283 +#: usr/local/www/vpn_openvpn_server.php:304 +msgid "The field 'Concurrent connections' must be numeric." +msgstr "O campo 'Conexões concorrentes' deve ser numérico." + +#: usr/local/www/vpn_openvpn_server.php:290 +#: usr/local/www/vpn_openvpn_server.php:296 +#: usr/local/www/vpn_openvpn_server.php:297 +#: usr/local/www/vpn_openvpn_server.php:318 +msgid "Tunnel network" +msgstr "Rede de túneis" + +#: usr/local/www/vpn_openvpn_server.php:615 +#: usr/local/www/vpn_openvpn_server.php:688 +#: usr/local/www/vpn_openvpn_server.php:706 +#: usr/local/www/vpn_openvpn_server.php:732 +msgid "Disable this server" +msgstr "Desabilitar esse servidor" + +#: usr/local/www/vpn_openvpn_server.php:620 +#: usr/local/www/vpn_openvpn_server.php:693 +#: usr/local/www/vpn_openvpn_server.php:711 +#: usr/local/www/vpn_openvpn_server.php:737 +msgid "Set this option to disable this server without removing it from the list" +msgstr "Configure essa opção to desabilitar o servidor sem removê-lo dessa lista" + +#: usr/local/www/vpn_openvpn_server.php:639 +#: usr/local/www/vpn_openvpn_server.php:712 +#: usr/local/www/vpn_openvpn_server.php:730 +#: usr/local/www/vpn_openvpn_server.php:756 +msgid "Backend for authentication" +msgstr "Backend para autenticação" + +#: usr/local/www/vpn_openvpn_server.php:671 +#: usr/local/www/vpn_openvpn_server.php:744 +#: usr/local/www/vpn_openvpn_server.php:762 +#: usr/local/www/vpn_openvpn_server.php:788 +msgid "Device Mode" +msgstr "Modo do Dispositivo" + +#: usr/local/www/vpn_openvpn_server.php:797 +#: usr/local/www/vpn_openvpn_server.php:870 +#: usr/local/www/vpn_openvpn_server.php:898 +#: usr/local/www/vpn_openvpn_server.php:925 +msgid "Peer Certificate Revocation List" +msgstr "Lista de Certificados de Revogação de Peer" + +#: usr/local/www/vpn_openvpn_server.php:822 +#: usr/local/www/vpn_openvpn_server.php:895 +#: usr/local/www/vpn_openvpn_server.php:923 +#: usr/local/www/vpn_openvpn_server.php:950 +msgid "Server Certificate" +msgstr "Certificado de Servidor" + +#: usr/local/www/vpn_openvpn_server.php:851 +#: usr/local/www/vpn_openvpn_server.php:924 +#: usr/local/www/vpn_openvpn_server.php:952 +#: usr/local/www/vpn_openvpn_server.php:979 +msgid "DH Parameters Length" +msgstr "Tamanho de Parâmetros de DH" + +#: usr/local/www/vpn_openvpn_server.php:934 +#: usr/local/www/vpn_openvpn_server.php:1007 +#: usr/local/www/vpn_openvpn_server.php:1035 +#: usr/local/www/vpn_openvpn_server.php:1062 +msgid "Certificate Depth" +msgstr "Profundidade do Certificado" + +#: usr/local/www/vpn_openvpn_server.php:952 +#: usr/local/www/vpn_openvpn_server.php:1025 +#: usr/local/www/vpn_openvpn_server.php:1053 +#: usr/local/www/vpn_openvpn_server.php:1080 +msgid "When a certificate-based client logs in, do not accept certificates below this depth. Useful for denying certificates made with intermediate CAs generated from the same CA as the server." +msgstr "Quando um cliente faz login com base em certificados, não aceitar certificados com profundidade abaixo desta. Útil para negar certificados emitidos por CAs intermadiários gerados a partir do mesmo CA que o servidor." + +#: usr/local/www/vpn_openvpn_server.php:959 +#: usr/local/www/vpn_openvpn_server.php:1032 +#: usr/local/www/vpn_openvpn_server.php:1060 +#: usr/local/www/vpn_openvpn_server.php:1087 +msgid "Strict User/CN Matching" +msgstr "Correspondência de Usuário estrito/CN" + +#: usr/local/www/vpn_openvpn_server.php:969 +#: usr/local/www/vpn_openvpn_server.php:1042 +#: usr/local/www/vpn_openvpn_server.php:1070 +#: usr/local/www/vpn_openvpn_server.php:1097 +msgid "When authenticating users, enforce a match between the common name of the client certificate and the username given at login." +msgstr "Durante a autenticação de usuários, reforce uma correspondência entre um nome comum do certificado do cliente e um dado nome de usuário no login." + +#: usr/local/www/vpn_openvpn_server.php:983 +#: usr/local/www/vpn_openvpn_server.php:1056 +#: usr/local/www/vpn_openvpn_server.php:1084 +#: usr/local/www/vpn_openvpn_client.php:771 +#: usr/local/www/vpn_openvpn_client.php:790 +#: usr/local/www/vpn_openvpn_server.php:1111 +msgid "IPv4 Tunnel Network" +msgstr "Tunel da Rede IPv4" + +#: usr/local/www/vpn_openvpn_server.php:987 +#: usr/local/www/vpn_openvpn_server.php:1060 +#: usr/local/www/vpn_openvpn_server.php:1088 +#: usr/local/www/vpn_openvpn_server.php:1115 +msgid "This is the IPv4 virtual network used for private communications between this server and client hosts expressed using CIDR (eg. 10.0.8.0/24). The first network address will be assigned to the\tserver virtual interface. The remaining network addresses can optionally be assigned to connecting clients. (see Address Pool)" +msgstr "Essa é a rede virtual IPv4 usada para comunicações privadas entre esse servidor e os hosts clientes expressados usando CIDR (e.g. 10.0.8.0/24). O primeiro endereço de rede será atribuído à \t interface virtual do servidor. Os endereços de rede remanescentes podem opcionalmente ser atribuídos a clientes em conexão. (veja Pool de Endereço)" + +#: usr/local/www/vpn_openvpn_server.php:997 +#: usr/local/www/vpn_openvpn_server.php:1070 +#: usr/local/www/vpn_openvpn_server.php:1098 +#: usr/local/www/vpn_openvpn_client.php:785 +#: usr/local/www/vpn_openvpn_client.php:804 +#: usr/local/www/vpn_openvpn_server.php:1125 +msgid "IPv6 Tunnel Network" +msgstr "Tunel da Rede IPv6" + +#: usr/local/www/vpn_openvpn_server.php:1001 +#: usr/local/www/vpn_openvpn_server.php:1074 +msgid "This is the IPv6 virtual network used for private communications between this server and client hosts expressed using CIDR (eg. fe80::/64). The first network address will be assigned to the\tserver virtual interface. The remaining network addresses can optionally be assigned to connecting clients. (see Address Pool)" +msgstr "Essa é a rede virtual IPv6 usada para comunicações privadas entre esse servidor e os hosts clientes expressados usando CIDR (e.g. fe80::/64). O primeiro endereço de rede será atribuído à \tinterface virtual do servidor. Os endereços de rede remanescentes podem opcionalmente ser atribuídos a clientes em conexão. (veja Pool de Endereço)" + +#: usr/local/www/vpn_openvpn_server.php:1029 +#: usr/local/www/vpn_openvpn_server.php:1171 +#: usr/local/www/vpn_openvpn_server.php:1199 +msgid "IPv4 Local Network" +msgstr "Rede Local IPv4" + +#: usr/local/www/vpn_openvpn_server.php:1033 +#: usr/local/www/vpn_openvpn_server.php:1175 +#: usr/local/www/vpn_openvpn_server.php:1203 +msgid "This is the network that will be accessible from the remote endpoint. Expressed as a CIDR range. You may leave this blank if you don't want to add a route to the local network through this tunnel on the remote machine. This is generally set to your LAN network" +msgstr "Essa é a rede que será acessível do endpoint remoto. Expressado como um intervalo CIDR. Você deve deixar isso em branco se não desejar adicionar uma rota à rede local através desse túnel na máquina remota. Isso é geralmente configurado na sua rede LAN" + +#: usr/local/www/vpn_openvpn_server.php:1042 +#: usr/local/www/vpn_openvpn_server.php:1184 +#: usr/local/www/vpn_openvpn_server.php:1212 +msgid "IPv6 Local Network" +msgstr "Rede local IPv6" + +#: usr/local/www/vpn_openvpn_server.php:1046 +#: usr/local/www/vpn_openvpn_server.php:1188 +#: usr/local/www/vpn_openvpn_server.php:1216 +msgid "This is the IPv6 network that will be accessible from the remote endpoint. Expressed as a CIDR range. You may leave this blank if you don't want to add a route to the local network through this tunnel on the remote machine. This is generally set to your LAN network" +msgstr "Essa é a rede IPv6 que será acessível do endpoint remoto. Expressado como um intervalo CIDR. Você deve deixar isso em branco se não desejar adicionar uma rota à rede local através desse túnel na máquina remota. Isso é geralmente configurado na sua rede LAN" + +#: usr/local/www/vpn_openvpn_server.php:1059 +#: usr/local/www/vpn_openvpn_server.php:1201 +msgid "This is a network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter here the remote LAN here. You may leave this blank if you don't want a site-to-site VPN" +msgstr "Essa é uma rede que será roteada através do túnel, de forma que uma VPN site-to-site possa ser estabelecida sem modificar manualmente as tabelas de roteamento. Expressado como um intervalo CIDR. Se essa é uma VPN site-to-site, informe aqui a LAN remota. Você pode deixar isso em branco se não desejar uma VPN site-to-site" + +#: usr/local/www/vpn_openvpn_server.php:1069 +#: usr/local/www/vpn_openvpn_server.php:1211 +#: usr/local/www/vpn_openvpn_server.php:1253 +#: usr/local/www/vpn_openvpn_server.php:1280 +msgid "Concurrent connections" +msgstr "Conexões concorrentes" + +#: usr/local/www/vpn_openvpn_server.php:1073 +#: usr/local/www/vpn_openvpn_server.php:1215 +#: usr/local/www/vpn_openvpn_server.php:1257 +#: usr/local/www/vpn_openvpn_server.php:1284 +msgid "Specify the maximum number of clients allowed to concurrently connect to this server" +msgstr "Especifique o número máximo de clientes que tem permissão de conectar-se ao mesmo tempo nesse servidor" + +#: usr/local/www/vpn_openvpn_server.php:1113 +#: usr/local/www/vpn_openvpn_server.php:1255 +#: usr/local/www/vpn_openvpn_server.php:1297 +#: usr/local/www/vpn_openvpn_server.php:1324 +msgid "Inter-client communication" +msgstr "Comunicação inter-clientes" + +#: usr/local/www/vpn_openvpn_server.php:1123 +#: usr/local/www/vpn_openvpn_server.php:1265 +#: usr/local/www/vpn_openvpn_server.php:1307 +#: usr/local/www/vpn_openvpn_server.php:1334 +msgid "Allow communication between clients connected to this server" +msgstr "Permite comunicação entre clientes conectaados a esse servidor" + +#: usr/local/www/vpn_openvpn_server.php:1131 +#: usr/local/www/vpn_openvpn_server.php:1273 +#: usr/local/www/vpn_openvpn_server.php:1315 +#: usr/local/www/vpn_openvpn_server.php:1342 +msgid "Duplicate Connections" +msgstr "Conexões duplicadas" + +#: usr/local/www/vpn_openvpn_server.php:1141 +#: usr/local/www/vpn_openvpn_server.php:1283 +#: usr/local/www/vpn_openvpn_server.php:1325 +#: usr/local/www/vpn_openvpn_server.php:1352 +msgid "Allow multiple concurrent connections from clients using the same Common Name.
    NOTE: This is not generally recommended, but may be needed for some scenarios." +msgstr "Habilite múltiplas conexões concorrentes para clientes usando um Nome Comum.
    NOTA: Isto geralmente não é recomendado, mas pode ser necessário em alguns cenários." + +#: usr/local/www/vpn_openvpn_server.php:1158 +#: usr/local/www/vpn_openvpn_server.php:1300 +#: usr/local/www/vpn_openvpn_server.php:1342 +#: usr/local/www/vpn_openvpn_server.php:1369 +msgid "Dynamic IP" +msgstr "IP Dinâmico" + +#: usr/local/www/vpn_openvpn_server.php:1168 +#: usr/local/www/vpn_openvpn_server.php:1310 +#: usr/local/www/vpn_openvpn_server.php:1352 +#: usr/local/www/vpn_openvpn_server.php:1379 +msgid "Allow connected clients to retain their connections if their IP address changes" +msgstr "Permite clientes conectados a reter suas conexões se seus endereços IP mudarem" + +#: usr/local/www/vpn_openvpn_server.php:1176 +#: usr/local/www/vpn_openvpn_server.php:1318 +#: usr/local/www/vpn_openvpn_server.php:1360 +#: usr/local/www/vpn_openvpn_server.php:1387 +msgid "Address Pool" +msgstr "Pool de endereços" + +#: usr/local/www/vpn_openvpn_server.php:1186 +#: usr/local/www/vpn_openvpn_server.php:1328 +#: usr/local/www/vpn_openvpn_server.php:1370 +#: usr/local/www/vpn_openvpn_server.php:1397 +msgid "Provide a virtual adapter IP address to clients (see Tunnel Network)" +msgstr "Fornece um endereço IP adaptador virtual para clientes (veja Rede de Túneis)" + +#: usr/local/www/vpn_openvpn_server.php:1322 +#: usr/local/www/vpn_openvpn_server.php:1464 +#: usr/local/www/vpn_openvpn_csc.php:560 +#: usr/local/www/vpn_openvpn_server.php:1506 +#: usr/local/www/vpn_openvpn_server.php:1558 +msgid "If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled" +msgstr "Se essa opção não estiver configurada, todas as opções de NetBIOS sobre TCP/IP (incluindo WINS) serão desabilitadas" + +#: usr/local/www/vpn_openvpn_server.php:1352 +#: usr/local/www/vpn_openvpn_server.php:1494 +#: usr/local/www/vpn_openvpn_server.php:1536 +#: usr/local/www/vpn_openvpn_server.php:1588 +msgid "Scope ID" +msgstr "ID de Escopo" + +#: usr/local/www/vpn_openvpn_server.php:1418 +#: usr/local/www/vpn_openvpn_server.php:1560 +#: usr/local/www/vpn_openvpn_server.php:1602 +#: usr/local/www/vpn_openvpn_server.php:1654 +msgid "Enter any additional options you would like to add to the OpenVPN server configuration here, separated by a semicolon" +msgstr "Informe quaisquer opções adicionais que desejar às configurações do servidor OpenVPN aqui, separados por ponto-e-vírgula" + +#: usr/local/www/vpn_openvpn_server.php:1449 +#: usr/local/www/vpn_openvpn_server.php:1591 +#: usr/local/www/vpn_openvpn_server.php:1632 +#: usr/local/www/vpn_openvpn_server.php:1684 +msgid "Protocol / Port" +msgstr "Protocolo / Porta" + +#: usr/local/www/vpn_openvpn_server.php:1482 +#: usr/local/www/vpn_openvpn_server.php:1624 +#: usr/local/www/vpn_openvpn_server.php:1665 +#: usr/local/www/vpn_openvpn_server.php:1717 +msgid "Do you really want to delete this server?" +msgstr "Você realmente deseja apagar esse servidor?" + +#: usr/local/www/vpn_openvpn_server.php:1503 +#: usr/local/www/vpn_openvpn_server.php:1645 +#: usr/local/www/vpn_openvpn_server.php:1686 +#: usr/local/www/vpn_openvpn_server.php:1738 +msgid "Additional OpenVPN servers can be added here." +msgstr "Servidores OpenVPN adicionais podem ser adicionados aqui." + +#: usr/local/www/vpn_pppoe_edit.php:136 +msgid "The specified server address is equal to an interface ip address." +msgstr "O endereço do servidor especificado é igual a um endereço ip de interface." + +#: usr/local/www/vpn_pppoe_edit.php:141 +#, php-format +msgid "No password specified for username %s" +msgstr "Nenhuma senha especificada para o usuário %s" + +#: usr/local/www/vpn_pppoe_edit.php:143 +#, php-format +msgid "Incorrect ip address specified for username %s" +msgstr "Endereço IP especificado incorreto para o usuário %s" + +#: usr/local/www/vpn_pppoe_edit.php:355 usr/local/www/vpn_pppoe_edit.php:356 +#: usr/local/www/vpn_pppoe_edit.php:359 +msgid "PPPoE server configuration" +msgstr "Configuração do servidor PPPoE" + +#: usr/local/www/vpn_pppoe_edit.php:368 usr/local/www/vpn_pppoe_edit.php:369 +#: usr/local/www/vpn_pppoe_edit.php:372 +msgid "Enable PPPoE server" +msgstr "Habilitar servidor PPPoE" + +#: usr/local/www/vpn_pppoe_edit.php:403 usr/local/www/vpn_pppoe_edit.php:404 +#: usr/local/www/vpn_pppoe_edit.php:407 +msgid "Hint" +msgstr "Dica" + +#: usr/local/www/vpn_pppoe_edit.php:407 usr/local/www/vpn_pppoe_edit.php:408 +#: usr/local/www/vpn_pppoe_edit.php:411 +msgid "No. PPPoE users" +msgstr "No. usuários PPPoE" + +#: usr/local/www/vpn_pppoe_edit.php:420 usr/local/www/vpn_pppoe_edit.php:421 +#: usr/local/www/vpn_pppoe_edit.php:424 +msgid "Hint: 10 is ten PPPoE clients" +msgstr "Dica: 10 são dez clientes PPPoE" + +#: usr/local/www/vpn_pppoe_edit.php:428 usr/local/www/vpn_pppoe_edit.php:429 +#: usr/local/www/vpn_pppoe_edit.php:432 +msgid "Enter the IP address the PPPoE server should give to clients for use as their \"gateway\"" +msgstr "Digite o endereço IP do servidor PPPoE deve dar aos clientes para usarem como \"gateway\"" + +#: usr/local/www/vpn_pppoe_edit.php:440 usr/local/www/vpn_pppoe_edit.php:441 +#: usr/local/www/vpn_pppoe_edit.php:444 +msgid "Specify the starting address for the client IP address subnet" +msgstr "Especifique os endereços de início para a subrede do endereço IP do cliente" + +#: usr/local/www/vpn_pppoe_edit.php:457 usr/local/www/vpn_pppoe_edit.php:458 +#: usr/local/www/vpn_pppoe_edit.php:461 +msgid "If entered they will be given to all PPPoE clients, else LAN DNS and one WAN DNS will go to all clients" +msgstr "Se informados, eles serão dados a todos os clientes PPPoE, senão, DNS de LAN e um DNS de WAN irão para todos os clientes" + +#: usr/local/www/vpn_pppoe_edit.php:474 usr/local/www/vpn_pppoe_edit.php:475 +#: usr/local/www/vpn_pppoe_edit.php:478 +msgid "Use Backup RADIUS Server" +msgstr "Usar servidor RADIUS de Backup" + +#: usr/local/www/vpn_pppoe_edit.php:475 usr/local/www/vpn_pppoe_edit.php:476 +#: usr/local/www/vpn_pppoe_edit.php:479 +msgid "When set, if primary server fails all requests will be sent via backup server" +msgstr "Quando configurado, se o servidor primário falhar, todas as requisições serão enviadas através do servidor de backup" + +#: usr/local/www/vpn_pppoe_edit.php:478 usr/local/www/vpn_pppoe_edit.php:479 +#: usr/local/www/vpn_pppoe_edit.php:482 +msgid "NAS IP Address" +msgstr "Endereço IP do NAS" + +#: usr/local/www/vpn_pppoe_edit.php:481 usr/local/www/vpn_pppoe_edit.php:482 +#: usr/local/www/vpn_pppoe_edit.php:485 +msgid "RADIUS server NAS IP Address" +msgstr "Endereço IP NAS do servidor RADIUS" + +#: usr/local/www/vpn_pppoe_edit.php:488 usr/local/www/vpn_pppoe_edit.php:489 +#: usr/local/www/vpn_pppoe_edit.php:492 +msgid "RADIUS accounting update period in seconds" +msgstr "Período de atualização de accounting do RADIUS em segundos" + +#: usr/local/www/vpn_pppoe_edit.php:495 usr/local/www/vpn_pppoe_edit.php:496 +#: usr/local/www/vpn_pppoe_edit.php:499 +msgid "Issue IP Addresses via RADIUS server" +msgstr "Emitir Endereços IP através do servidor RADIUS" + +#: usr/local/www/vpn_pppoe_edit.php:498 usr/local/www/vpn_pppoe_edit.php:499 +#: usr/local/www/vpn_pppoe_edit.php:502 +msgid "RADIUS server Primary" +msgstr "Servidor RADIUS Primário" + +#: usr/local/www/vpn_pppoe_edit.php:503 usr/local/www/vpn_pppoe_edit.php:504 +#: usr/local/www/vpn_pppoe_edit.php:507 +msgid "Enter the IP address, authentication port and accounting port (optional) of the RADIUS server." +msgstr "Informe o endereço IP, porta de autenticação e porta de accounting (opcional) do servidor RADIUS." + +#: usr/local/www/vpn_pppoe_edit.php:504 usr/local/www/vpn_pppoe_edit.php:520 +#: usr/local/www/vpn_pppoe_edit.php:505 usr/local/www/vpn_pppoe_edit.php:521 +#: usr/local/www/vpn_pppoe_edit.php:508 usr/local/www/vpn_pppoe_edit.php:524 +msgid "standard port 1812 and 1813 accounting" +msgstr "portas padrão 1812 e 1813 de accounting" + +#: usr/local/www/vpn_pppoe_edit.php:507 usr/local/www/vpn_pppoe_edit.php:508 +#: usr/local/www/vpn_pppoe_edit.php:511 +msgid "RADIUS primary shared secret" +msgstr "Shared secred primário do RADIUS" + +#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:515 +#: usr/local/www/vpn_pppoe_edit.php:518 +msgid "RADIUS server Secondary" +msgstr "Servidor RADIUS Secundário" + +#: usr/local/www/vpn_pppoe_edit.php:519 usr/local/www/vpn_pppoe_edit.php:520 +#: usr/local/www/vpn_pppoe_edit.php:523 +msgid "Enter the IP address, authentication port and accounting port (optional) of the backup RADIUS server." +msgstr "Informe o endereço IP, porta de autenticação e porta de accounting (opcional) do servidor RADIUS de backup." + +#: usr/local/www/vpn_pppoe_edit.php:523 usr/local/www/vpn_pppoe_edit.php:524 +#: usr/local/www/vpn_pppoe_edit.php:527 +msgid "RADIUS secondary shared secret" +msgstr "Segreado compartilhado secundário do RADIUS" + +#: usr/local/www/vpn_pppoe_edit.php:531 usr/local/www/vpn_pppoe_edit.php:532 +#: usr/local/www/vpn_pppoe_edit.php:535 +msgid "User (s)" +msgstr "Usuário (s)" + +#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/vpn_pppoe_edit.php:597 +#: usr/local/www/vpn_pppoe_edit.php:600 +msgid "don't forget to add a firewall rule to permit traffic from PPPoE clients" +msgstr "não esqueça de adicionar uma regra de firewall para permitir tráfego de clientes PPPoE" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:37 +msgid "You need to specify the number of connections." +msgstr "Você precisa especificar o número de conexões." + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:42 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:42 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:43 +msgid "The number of connections should be greater than 1." +msgstr "O número de conexões deve ser maior que 1." + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:65 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:63 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:64 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:71 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:63 +msgid "You have less interfaces than number of connections!" +msgstr "Você não tem interfaces suficientes para o número de conexões desejado!" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:445 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:518 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:459 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:551 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:489 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:586 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:293 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:372 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:588 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:443 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:516 +msgid "Address must be a valid IP address or Firewall Alias. Please correct this value to continue." +msgstr "Endereço deve ser um IP válido ou alias do Firewall. Por favor defina o valor correto para continuar." + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:505 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:536 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:539 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:568 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:574 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:601 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:358 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:392 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:576 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:603 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:503 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:534 +msgid "Only percentage bandwidth specification is allowed." +msgstr "Somente a especificação percentual de largura de banda é permitido." + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:695 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1044 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:722 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1106 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:756 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1154 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:930 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:758 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1156 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:693 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1042 +msgid "Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue." +msgstr "Largura da banda customizáveis são maiores que 30%. Favor reduzi-la para continuar com o assistente." + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1346 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1408 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1462 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1205 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1464 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1344 +msgid "Penalty Box" +msgstr "Penalty Box" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1366 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1482 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364 +msgid "VOIP Adapter" +msgstr "Adaptador VOIP" + +#: usr/local/www/wizards/openvpn_wizard.inc:602 +#: usr/local/www/wizards/openvpn_wizard.inc:618 +#: usr/local/www/wizards/openvpn_wizard.inc:619 +#, php-format +msgid "OpenVPN %s wizard" +msgstr "OpenVPN %s Assistente" + +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:268 +msgid "You cannot specify bandwidth smaller than 1!" +msgstr "Você não pode especificar uma largura de banda menor que 1!" + +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:278 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:288 +msgid "You cannot select the same interface for local and outside." +msgstr "Você não pode selecionar a mesma interface para local e remoto." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:276 +msgid "You cannot specify 0 bandwidth!" +msgstr "Você não pode especificar largura de banda 0!" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:297 +msgid "You cannot select the same interface twice on local interfaces." +msgstr "Você não pode selecionar a mesma interface duas vezes em interfaces locais." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:37 +msgid "You need to specify the number of local interfaces connected." +msgstr "Você precisa especificar um número de interfaces locais conectadas." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:41 +msgid "The number of local connection needs to be greater than 1." +msgstr "O número de conexões locais deve ser maior que 1." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:240 +msgid "Upload bandwidth of connection is not valid." +msgstr "A largura de banda da conexão para upload não é válida." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:245 +msgid "Download bandwidth of connection is not valid." +msgstr "A largura de banda da conexão para download não é válida." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:252 +msgid "You cannot specify bandwidth less than 1!" +msgstr "Você não pode especificar largura de banda menor que 1!" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:257 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:262 +msgid "We do not support Bandwidths smaller than 128Kbit/s for CBQ scheduler." +msgstr "Não são recomendadas larguras de banda menores que 128Kbit/s para o organizador CBQ." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:300 +msgid "Upload or download bandwidth is not valid." +msgstr "A largura de banda para download ou upload não é válida." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:317 +#, php-format +msgid "You cannot set the VoIP upload bandwidth on WAN connection higher than 80% of the connection." +msgstr "Você não pode definir a largura de banda para upload VoIP numa conexão WAN maior que 80% da conexão." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:324 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:334 +#, php-format +msgid "You cannot set the VoIP download bandwidth on connection higher than 80% of the connection." +msgstr "Você não pode definir a largura de banda do download VoIP numa conexão maior que 80% da conexão" + +#: usr/local/www/widgets/widgets/system_information.widget.php:162 +#: usr/local/www/widgets/widgets/system_information.widget.php:153 +#: usr/local/www/widgets/widgets/system_information.widget.php:159 +#: usr/local/www/widgets/widgets/system_information.widget.php:160 +#: usr/local/www/widgets/widgets/system_information.widget.php:158 +#: usr/local/www/widgets/widgets/system_information.widget.php:164 +msgid "Current date/time" +msgstr "Data/hora atuais" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:41 +msgid "Computer / Device" +msgstr "Computador / Dispositivo" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:67 +msgid "Wake Up" +msgstr "Acordar" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:72 +msgid "No saved WoL addresses" +msgstr "Endereços WoL não salvos" + +#: usr/local/www/firewall_nat_npt.php:105 +msgid "External Prefix" +msgstr "Prefixo Externo" + +#: usr/local/www/firewall_nat_npt.php:106 +msgid "Internal prefix" +msgstr "Prefixo interno" + +#: usr/local/www/firewall_nat_npt_edit.php:106 +msgid "Source prefix" +msgstr "Prefixo de origem" + +#: usr/local/www/firewall_nat_npt_edit.php:108 +msgid "Destination prefix" +msgstr "Prefixo de destino" + +#: usr/local/www/firewall_nat_npt_edit.php:156 +#: usr/local/www/firewall_nat_npt_edit.php:161 +#: usr/local/www/firewall_nat_npt_edit.php:160 +#: usr/local/www/firewall_nat_npt_edit.php:158 +msgid "Edit NAT NPt entry" +msgstr "Editar entrada NAT NPt" + +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_npt_edit.php:211 +#: usr/local/www/firewall_nat_npt_edit.php:210 +#: usr/local/www/firewall_nat_npt_edit.php:209 +msgid "Internal IPv6 Prefix" +msgstr "Prefixo IPv6 interno" + +#: usr/local/www/firewall_nat_npt_edit.php:228 +#: usr/local/www/firewall_nat_npt_edit.php:233 +#: usr/local/www/firewall_nat_npt_edit.php:232 +#: usr/local/www/firewall_nat_npt_edit.php:231 +msgid "" +"Enter the internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. The prefix size specified for the internal IPv6 prefix will be applied to the \n" +"external prefix." +msgstr "Digite o prefixo interno (LAN) ULA IPv6 para a tradução prefixo de rede. O tamanho do prefixo especificado para o prefixo IPv6 interno será aplicado ao prefixo externo." + +#: usr/local/www/firewall_nat_npt_edit.php:234 +#: usr/local/www/firewall_nat_npt_edit.php:239 +#: usr/local/www/firewall_nat_npt_edit.php:238 +#: usr/local/www/firewall_nat_npt_edit.php:237 +msgid "Destination IPv6 Prefix" +msgstr "Prefixo IPv6 de destino" + +#: usr/local/www/firewall_nat_npt_edit.php:258 +#: usr/local/www/firewall_nat_npt_edit.php:263 +#: usr/local/www/firewall_nat_npt_edit.php:262 +#: usr/local/www/firewall_nat_npt_edit.php:261 +msgid "Enter the Global Unicast routable IPv6 prefix here" +msgstr "Digite o prefixo roteável IPv6 Global Unicast aqui" + +#: usr/local/www/services_dhcpv6.php:74 +#: usr/local/www/services_router_advertisements.php:74 +msgid "The DHCPv6 Server can only be enabled on interfaces configured with static IP addresses" +msgstr "O servidor DHCPv6 pode somente ser habilitado em interfaces configuradas com endereços IP estáticos" + +#: usr/local/www/services_dhcpv6.php:184 usr/local/www/services_dhcpv6.php:196 +#: usr/local/www/services_dhcpv6.php:181 usr/local/www/services_dhcpv6.php:175 +msgid "A valid prefix range must be specified." +msgstr "Um intervalo válido deve ser especificado." + +#: usr/local/www/services_dhcpv6.php:190 usr/local/www/services_dhcpv6.php:202 +#: usr/local/www/services_dhcpv6.php:187 usr/local/www/services_dhcpv6.php:181 +msgid "A valid IPv6 address must be specified for the gateway." +msgstr "Um endereço IPv6 válido deve ser especificado para o gateway." + +#: usr/local/www/services_dhcpv6.php:192 usr/local/www/services_dhcpv6.php:204 +#: usr/local/www/services_router_advertisements.php:154 +#: usr/local/www/services_dhcpv6.php:189 usr/local/www/services_dhcpv6.php:183 +#: usr/local/www/services_router_advertisements.php:149 +msgid "A valid IPv6 address must be specified for the primary/secondary DNS servers." +msgstr "Um endereço IPv6 válido deve ser especificado para os servidores DNS primário/secundário." + +#: usr/local/www/services_dhcpv6.php:201 usr/local/www/services_dhcpv6.php:223 +#: usr/local/www/services_dhcpv6.php:208 usr/local/www/services_dhcpv6.php:202 +msgid "A valid IPv6 address must be specified for the primary/secondary NTP servers." +msgstr "Um endereço IPv6 válido deve ser especificado pelos servidores NTP primário/secundário." + +#: usr/local/www/services_dhcpv6.php:205 usr/local/www/services_dhcpv6.php:227 +#: usr/local/www/services_dhcpv6.php:212 usr/local/www/services_dhcpv6.php:206 +msgid "A valid IPv6 address or hostname must be specified for the TFTP server." +msgstr "Um endereço IPv6 válido ou nome de host deve ser especificado para o servidor TFTP." + +#: usr/local/www/services_dhcpv6.php:207 usr/local/www/services_dhcpv6.php:229 +#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:208 +msgid "A valid IPv6 address must be specified for the network boot server." +msgstr "Um endereço IPv6 válido deve ser especificado para o servidor de boot da rede." + +#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:236 +#: usr/local/www/services_dhcpv6.php:221 usr/local/www/services_dhcpv6.php:215 +#, php-format +msgid "The subnet range cannot overlap with virtual IPv6 address %s." +msgstr "O intervalo de subrede não pode sobrepor o endereço IPv6 virtual %s." + +#: usr/local/www/services_dhcpv6.php:359 usr/local/www/services_dhcpv6.php:386 +#: usr/local/www/services_dhcpv6.php:367 usr/local/www/services_dhcpv6.php:362 +msgid "DHCPv6 server" +msgstr "Servidor DHCPv6" + +#: usr/local/www/services_dhcpv6.php:497 usr/local/www/services_dhcpv6.php:524 +#: usr/local/www/services_router_advertisements.php:261 +#: usr/local/www/services_router_advertisements.php:270 +#: usr/local/www/services_dhcpv6.php:503 usr/local/www/services_dhcpv6.php:514 +#: usr/local/www/services_router_advertisements.php:256 +#: usr/local/www/services_router_advertisements.php:265 +msgid "Router Advertisements" +msgstr "Router advertisements" + +#: usr/local/www/services_dhcpv6.php:504 +#, php-format +msgid "Select the Operating Mode for the router advertisement Daemon. Use \"Router Only\" to only advertise the router, \"Unmanaged\" for Router Advertising with Stateless Autoconfig, \"Managed\" for DHCPv6 only with router advertisements, \"Assisted\" for DHCPv6 Combined with Stateless Autoconfig" +msgstr "Selecione o modo de operação para o Daemon anúncio de roteador. Use \"Somente Roteador\" apenas para anunciar o router, \"não gerenciados\" para Advertising Router com Autoconfig Stateless, \"Managed\" para DHCPv6 somente com anúncios de roteador, \"Assistida\" para DHCPv6 Stateless Combinado com Autoconfig" + +#: usr/local/www/services_dhcpv6.php:510 usr/local/www/services_dhcpv6.php:584 +#: usr/local/www/services_dhcpv6.php:515 usr/local/www/services_dhcpv6.php:526 +#, php-format +msgid "Enable DHCPv6 server on %s interface" +msgstr "Habilitar servidor DHCPv6 na interface %s" + +#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:649 +#: usr/local/www/services_dhcpv6.php:580 usr/local/www/services_dhcpv6.php:597 +msgid "Prefix Delegation Range" +msgstr "Faixa de Delegação de Prefixo" + +#: usr/local/www/services_dhcpv6.php:580 +msgid "prefix length" +msgstr "comprimento do prefixo" + +#: usr/local/www/services_dhcpv6.php:585 +msgid "" +"You can define a Prefix range here for DHCP Prefix Delegation. This allows for \n" +"\t\t\t\t\tassigning networks to subrouters" +msgstr "" +"Você pode definir aqui uma faixa prefixo para a Delegação de Prefixo DHCP. Isto permite que \n" +" \t \t \t \t \t atribua redes para subroteadores" + +#: usr/local/www/services_dhcpv6.php:803 +#: usr/local/www/status_dhcpv6_leases.php:361 +#: usr/local/www/status_dhcpv6_leases.php:405 +#: usr/local/www/status_dhcpv6_leases.php:483 +#: usr/local/www/services_dhcpv6.php:898 +#: usr/local/www/status_dhcpv6_leases.php:406 +#: usr/local/www/status_dhcpv6_leases.php:484 +#: usr/local/www/services_dhcpv6.php:829 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcpv6_leases.php:487 +#: usr/local/www/services_dhcpv6.php:850 +msgid "DUID" +msgstr "DUID" + +#: usr/local/www/services_dhcpv6_edit.php:106 +#: usr/local/www/services_dhcpv6_edit.php:189 +#: usr/local/www/services_dhcpv6_edit.php:108 +#: usr/local/www/services_dhcpv6_edit.php:192 +#: usr/local/www/services_dhcpv6_edit.php:191 +#: usr/local/www/services_dhcpv6_edit.php:111 +#: usr/local/www/services_dhcpv6_edit.php:194 +msgid "DUID Identifier" +msgstr "Identificador DUID" + +#: usr/local/www/services_dhcpv6_edit.php:126 +#: usr/local/www/services_dhcpv6_edit.php:128 +#: usr/local/www/services_dhcpv6_edit.php:131 +msgid "A valid DUID Identifier must be specified." +msgstr "Um identificador DUID válido deve ser especificado." + +#: usr/local/www/services_dhcpv6_edit.php:135 +#: usr/local/www/services_dhcpv6_edit.php:137 +#: usr/local/www/services_dhcpv6_edit.php:140 +msgid "This Hostname, IP or DUID Identifier already exists." +msgstr "Esse Hostname, endereço de IP ou DUID já existe." + +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/services_dhcpv6_edit.php:178 +msgid "DHCPv6" +msgstr "DHCPv6" + +#: usr/local/www/services_dhcpv6_edit.php:186 +#: usr/local/www/services_dhcpv6_edit.php:189 +#: usr/local/www/services_dhcpv6_edit.php:188 +#: usr/local/www/services_dhcpv6_edit.php:191 +msgid "Static DHCPv6 Mapping" +msgstr "Mapeamento DHCPv6 estático" + +#: usr/local/www/services_dhcpv6_edit.php:193 +#: usr/local/www/services_dhcpv6_edit.php:196 +#: usr/local/www/services_dhcpv6_edit.php:195 +#: usr/local/www/services_dhcpv6_edit.php:198 +msgid "Enter a DUID Identifier in the following format: " +msgstr "Digite um Identificador DUID no seguinte formato:" + +#: usr/local/www/services_dhcpv6_edit.php:202 +#: usr/local/www/services_dhcpv6_edit.php:205 +msgid "If no IPv6 address is given, one will be dynamically allocated from the pool." +msgstr "Se nenhum endereço IPv6 for fornecido, um será dinamicamente alocado da fila." + +#: usr/local/www/services_dhcpv6_relay.php:81 +msgid "A valid Destination Server IPv6 address must be specified." +msgstr "Um endereço de IPv6 válido do Servidor de Destino deve ser especificado." + +#: usr/local/www/services_dhcpv6_relay.php:145 +#: usr/local/www/services_dhcpv6_relay.php:146 +msgid "DHCPv6 Relay configuration" +msgstr "Configuração do DHCPv6 Relay" + +#: usr/local/www/services_dhcpv6_relay.php:151 +#: usr/local/www/services_dhcpv6_relay.php:152 +#, php-format +msgid "Enable DHCPv6 relay on interface" +msgstr "Habilitar DHCPv6 relay na interface" + +#: usr/local/www/services_dhcpv6_relay.php:169 +#: usr/local/www/services_dhcpv6_relay.php:170 +msgid "Interfaces without an IPv6 address will not be shown." +msgstr "Interfaces sem um endereço de IPv6 não serão exibidas." + +#: usr/local/www/services_dhcpv6_relay.php:177 +#: usr/local/www/services_dhcpv6_relay.php:178 +#, php-format +msgid "If this is checked, the DHCPv6 relay will append the circuit ID (%s interface number) and the agent ID to the DHCPv6 request." +msgstr "Se esta opção estiver marcada, o DHCPv6 relay anexará o circuit ID (número de interface %s) e o agent ID à requisição DHCPv6." + +#: usr/local/www/services_dhcpv6_relay.php:184 +#: usr/local/www/services_dhcpv6_relay.php:185 +msgid "This is the IPv6 address of the server to which DHCPv6 requests are relayed. You can enter multiple server IPv6 addresses, separated by commas. Select \"Proxy requests to DHCPv6 server on WAN subnet\" to relay DHCPv6 packets to the server that was used on the WAN interface." +msgstr "Esse é o endereço IPv6 do servidor para o qual as requisições DHCPv6 são retransmitidas. Você pode informar múltiplos endereços de servidores IPv6 separados por vírgulas. Selecione \"Requisições de Proxy para servidor DHCPv6 na subrede WAN\" para retransmitir pacotes DHCPv6 para o servidor que foi usado na interface WAN." + +#: usr/local/www/status_dhcpv6_leases.php:49 +#: usr/local/www/status_dhcpv6_leases.php:50 +msgid "DHCPv6 leases" +msgstr "Concessões DHCPv6" + +#: usr/local/www/status_dhcpv6_leases.php:360 +#: usr/local/www/status_dhcpv6_leases.php:404 +#: usr/local/www/status_dhcpv6_leases.php:482 +#: usr/local/www/status_dhcpv6_leases.php:405 +#: usr/local/www/status_dhcpv6_leases.php:483 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:486 +msgid "IAID" +msgstr "IAID" + +#: usr/local/www/status_dhcpv6_leases.php:362 +#: usr/local/www/status_dhcpv6_leases.php:406 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/status_dhcpv6_leases.php:410 +msgid "Hostname/MAC" +msgstr "Hostname/MAC" + +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_wireless.php:99 +#: usr/local/www/diag_logs_wireless.php:100 +#, php-format +msgid "Wireless (hostapd) log entries" +msgstr "Wireless (hostapd) registro de logs" + +#: usr/local/www/services_captiveportal_zones.php:37 +msgid "Captiveportal" +msgstr "Captiveportal" + +#: usr/local/www/services_captiveportal_zones.php:37 +msgid "Zones" +msgstr "Zonas" + +#: usr/local/www/services_captiveportal_zones.php:47 +#: usr/local/www/services_captiveportal_zones.php:48 +msgid "The CaptivePortal entry list has been changed" +msgstr "A lista de entrada do CaptivePortal foi modificada" + +#: usr/local/www/services_captiveportal_zones.php:60 +#: usr/local/www/services_captiveportal_zones.php:101 +#: usr/local/www/services_captiveportal_zones.php:61 +#: usr/local/www/services_captiveportal_zones.php:102 +msgid "add a new captiveportal instance" +msgstr "adicionar uma nova instância do Captiveportal" + +#: usr/local/www/services_captiveportal_zones.php:88 +#: usr/local/www/services_captiveportal_zones.php:89 +msgid "edit captiveportal instance" +msgstr "editar instância do captiveportal" + +#: usr/local/www/services_captiveportal_zones.php:89 +#: usr/local/www/services_captiveportal_zones.php:90 +msgid "delete captiveportal instance" +msgstr "apagar a instância do captiveportal" + +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +msgid "Edit Zones" +msgstr "Editar Zonas" + +#: usr/local/www/services_captiveportal_zones_edit.php:67 +#: usr/local/www/services_captiveportal_zones_edit.php:69 +msgid "already exists" +msgstr "Já existe" + +#: usr/local/www/services_captiveportal_zones_edit.php:96 +#: usr/local/www/services_captiveportal_zones_edit.php:98 +#: usr/local/www/services_captiveportal_zones_edit.php:94 +msgid "Edit Captiveportal Zones" +msgstr "Editar Zonas do Captiveportal" + +#: usr/local/www/services_captiveportal_zones_edit.php:103 +msgid "Zone name. Cannot contain spaces." +msgstr "Nome da Zona. Não pode conter espaços." + +#: usr/local/www/system_firmware_restorefullbackup.php:104 +msgid "Restore full backup" +msgstr "Restaurar backup completo" + +#: usr/local/www/system_firmware_restorefullbackup.php:139 +msgid "Filename" +msgstr "Nome do arquivo" + +#: usr/local/www/system_firmware_restorefullbackup.php:162 +msgid "Do you really want to delete this backup?" +msgstr "Você realmente deseja apagar esse backup?" + +#: usr/local/www/system_firmware_restorefullbackup.php:174 +msgid "

    Could not locate any previous backups.
    " +msgstr "
    Não foi possível localizar nenhum dos backups anteriores.
    " + +#: usr/local/www/system_firmware_restorefullbackup.php:184 +msgid "Restore" +msgstr "Restaurar" + +#: usr/local/www/diag_dump_states_sources.php:65 +msgid "Show Source Tracking" +msgstr "Mostrar Rastreamento de Origem" + +#: usr/local/www/diag_dump_states_sources.php:145 +#: usr/local/www/diag_dump_states_sources.php:144 +msgid "Source -> Destination" +msgstr "Origem -> Destino" + +#: usr/local/www/diag_dump_states_sources.php:146 +#: usr/local/www/diag_dump_states_sources.php:145 +msgid "# States" +msgstr "# Estados" + +#: usr/local/www/diag_dump_states_sources.php:147 +#: usr/local/www/diag_dump_states_sources.php:146 +msgid "# Connections" +msgstr "# Conexões" + +#: usr/local/www/diag_dump_states_sources.php:180 +#: usr/local/www/diag_dump_states_sources.php:179 +msgid "Remove all source tracking entries from" +msgstr "Remover todos as entradas de rastreamentos de origem de" + +#: usr/local/www/diag_dump_states_sources.php:190 +#: usr/local/www/diag_dump_states_sources.php:189 +msgid "No source tracking entries were found." +msgstr "Nenhuma entrada de rastreamento por origem encontrada." + +#: etc/inc/system.inc:418 etc/inc/system.inc:425 +#, php-format +msgid "Not adding default route because OLSR dynamic gateway is enabled." +msgstr "Rota padrão não adicionada porque o gateway dinâmico OLSR está habilitado." + +# 87% +#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:124 +msgid "WebCfg - Diagnostics: Logs: Gateways page" +msgstr "WebCfg - Página Diagnóstico: Logs: Gateways" + +# 84% +#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:125 +msgid "Allow access to the 'Diagnostics: Logs: System: Gateways' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Logs: Gateway'." + +# 85% +#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:130 +msgid "WebCfg - Diagnostics: Logs: Resolver page" +msgstr "WebCfg - Página Diagnóstico: Logs: Resolver" + +# 84% +#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:131 +msgid "Allow access to the 'Diagnostics: Logs: System: Resolver' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Logs: Sistema: Resolver'." + +# 87% +#: etc/inc/priv.defs.inc:130 etc/inc/priv.defs.inc:136 +msgid "WebCfg - Diagnostics: Logs: Wireless page" +msgstr "WebCfg - Página Diagnóstico: Logs: Wireless" + +# 84% +#: etc/inc/priv.defs.inc:131 etc/inc/priv.defs.inc:137 +msgid "Allow access to the 'Diagnostics: Logs: System: Wireless' page." +msgstr "Permitir acesso à  página 'Diagnóstico: Logs: Sistema: Wireless'." + +# 88% +#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:154 +msgid "WebCfg - Status: System logs: NTP page" +msgstr "WebCfg - Página Status: Logs do Sistema: NTP" + +# 91% +#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:155 +msgid "Allow access to the 'Status: System logs: NTP' page." +msgstr "Permitir acesso à  página 'Status: Logs do Sistema: NTP'." + +#: etc/inc/pfsense-utils.inc:2377 etc/inc/pfsense-utils.inc:2468 +#: etc/inc/pfsense-utils.inc:2521 etc/inc/pfsense-utils.inc:2528 +#: etc/inc/pfsense-utils.inc:2535 etc/inc/pfsense-utils.inc:2532 +msgid "English" +msgstr "Inglês" + +#: etc/inc/pfsense-utils.inc:2378 etc/inc/pfsense-utils.inc:2469 +#: etc/inc/pfsense-utils.inc:2522 etc/inc/pfsense-utils.inc:2529 +#: etc/inc/pfsense-utils.inc:2536 etc/inc/pfsense-utils.inc:2533 +msgid "Portuguese (Brazil)" +msgstr "Português (Brasil)" + +# 98% +#: etc/inc/interfaces.inc:251 etc/inc/interfaces.inc:250 +#: etc/inc/interfaces.inc:248 +msgid "interface_vlan_configure called with if undefined." +msgstr "interface_vlan_configure called with if undefined." + +# 98% +#: etc/inc/interfaces.inc:292 etc/inc/interfaces.inc:291 +#: etc/inc/interfaces.inc:289 +#, php-format +msgid "interface_qinq_configure called with if undefined.%s" +msgstr "interface_qinq_configure called with if undefined.%s" + +# 96% +#: etc/inc/interfaces.inc:377 etc/inc/interfaces.inc:376 +#: etc/inc/interfaces.inc:380 +#, php-format +msgid "interface_qinq2_configure called with if undefined.%s" +msgstr "interface_qinq2_configure called with if undefined.%s" + +# 75% +#: etc/inc/interfaces.inc:2152 +#, php-format +msgid "Error: cannot open dhclient_%s.conf in interface_carpdev_configure() for writing.%s" +msgstr "Error: cannot open dhclient_%s.conf in interface_carpdev_configure() for writing.%s" + +# 96% +#: etc/inc/interfaces.inc:2995 +msgid "Could not bring wanif up in interface_carpdev_dhcp_configure()" +msgstr "Could not bring wanif up in interface_carpdev_dhcp_configure()" + +# 75% +#: etc/inc/interfaces.inc:3500 etc/inc/interfaces.inc:3360 +#: etc/inc/interfaces.inc:3453 etc/inc/interfaces.inc:3580 +#: etc/inc/interfaces.inc:3525 etc/inc/interfaces.inc:3547 +#, php-format +msgid "Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for writing.%s" +msgstr "Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for writing.%s" + +#: etc/inc/services.inc:1085 etc/inc/services.inc:1217 +#: etc/inc/services.inc:1211 etc/inc/services.inc:1218 +#: etc/inc/services.inc:1270 etc/inc/services.inc:1268 +msgid "Started IGMP proxy service." +msgstr "Serviço IGMP proxy iniciado." + +#: usr/local/www/diag_logs_routing.php:74 +#: usr/local/www/diag_logs_settings.php:224 usr/local/www/fbegin.inc:148 +#: usr/local/www/fbegin.inc:183 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111 +#: usr/local/www/diag_logs_vpn.php:135 usr/local/www/diag_logs_ppp.php:79 +#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs.php:86 +#: usr/local/www/status_ntpd.php:94 usr/local/www/diag_logs_dhcp.php:79 +#: usr/local/www/diag_logs_wireless.php:76 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/services_ntpd.php:71 usr/local/www/diag_logs_gateways.php:87 +#: usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_filter.php:110 +#: usr/local/www/diag_logs_routing.php:75 +#: usr/local/www/diag_logs_settings.php:231 usr/local/www/fbegin.inc:157 +#: usr/local/www/fbegin.inc:191 usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112 +#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/status_ntpd.php:109 usr/local/www/diag_logs_dhcp.php:80 +#: usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/services_ntpd.php:76 usr/local/www/diag_logs_gateways.php:88 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_filter.php:100 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_ppp.php:77 usr/local/www/fbegin.inc:149 +#: usr/local/www/fbegin.inc:182 usr/local/www/diag_logs_filter.php:130 +#: usr/local/www/status_ntpd.php:115 usr/local/www/diag_logs_settings.php:250 +msgid "NTP" +msgstr "NTP" + +# 75% +#: usr/local/www/diag_logs_routing.php:82 +#: usr/local/www/diag_logs_resolver.php:96 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs.php:95 usr/local/www/diag_logs_wireless.php:84 +#: usr/local/www/diag_logs_gateways.php:96 +#: usr/local/www/diag_logs_routing.php:83 +#: usr/local/www/diag_logs_resolver.php:97 +#: usr/local/www/diag_logs_wireless.php:85 +#: usr/local/www/diag_logs_gateways.php:97 +msgid "General" +msgstr "Geral" + +#: usr/local/www/diag_logs_routing.php:85 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_resolver.php:99 usr/local/www/diag_logs.php:98 +#: usr/local/www/diag_logs_wireless.php:87 +#: usr/local/www/diag_logs_gateways.php:99 +#: usr/local/www/diag_logs_routing.php:86 +#: usr/local/www/diag_logs_resolver.php:100 +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_gateways.php:100 +msgid "Resolver" +msgstr "Resolver" + +#: usr/local/www/diag_logs_routing.php:97 +#: usr/local/www/diag_logs_routing.php:98 +#, php-format +msgid "Routing daemon log entries" +msgstr "Logs do daemon de roteamento" + +# 92% +#: usr/local/www/system_routes_edit.php:158 +#: usr/local/www/system_routes_edit.php:169 +#: usr/local/www/system_routes_edit.php:171 +#: usr/local/www/system_routes_edit.php:173 +msgid "A route to these destination networks already exists" +msgstr "Já existe uma rota para estas redes de destino" + +#: usr/local/www/system_routes_edit.php:302 +#: usr/local/www/system_routes_edit.php:303 +#: usr/local/www/system_routes_edit.php:326 +#: usr/local/www/system_routes_edit.php:335 +#: usr/local/www/system_routes_edit.php:337 +msgid "Disable this static route" +msgstr "Desabilitar esta rota estática" + +#: usr/local/www/system_routes_edit.php:303 +#: usr/local/www/system_routes_edit.php:304 +#: usr/local/www/system_routes_edit.php:327 +#: usr/local/www/system_routes_edit.php:336 +#: usr/local/www/system_routes_edit.php:338 +msgid "Set this option to disable this static route without removing it from the list." +msgstr "Marque esta opção para desabilitar esta rota estática sem removê-la da lista." + +# 91% +#: usr/local/www/pkg_mgr.php:185 usr/local/www/pkg_mgr_installed.php:178 +#: usr/local/www/pkg_mgr_installed.php:180 usr/local/www/pkg_mgr.php:188 +msgid "Package info" +msgstr "Info do pacote" + +#: usr/local/www/pkg_mgr.php:189 usr/local/www/pkg_mgr_installed.php:182 +#: usr/local/www/pkg_mgr_installed.php:184 usr/local/www/pkg_mgr.php:192 +msgid "No package info, check the forum" +msgstr "Sem informações do pacote, verifique o fórum" + +#: usr/local/www/pkg_mgr.php:193 +msgid "Click on package name to access it's website." +msgstr "Clique no nome do pacote para acessar seu website." + +#: usr/local/www/pkg_mgr.php:217 usr/local/www/pkg_mgr.php:220 +msgid "Click " +msgstr "Clique" + +#: usr/local/www/pkg_mgr.php:232 usr/local/www/pkg_mgr_installed.php:199 +#: usr/local/www/pkg_mgr_installed.php:201 usr/local/www/pkg_mgr.php:235 +msgid "Click package info for more details about " +msgstr "Clique nas informações do pacote para mais detalhes sobre" + +#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240 +#: usr/local/www/pkg_mgr.php:243 +msgid "Do you really want to install " +msgstr "Você realmente deseja instalar" + +# 77% +#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240 +#: usr/local/www/pkg_mgr.php:243 +msgid "Install " +msgstr "Instalado" + +#: usr/local/www/services_unbound_acls.php:57 +msgid "Access List successfully deleted" +msgstr "Lista de acesso excluída com sucesso" + +#: usr/local/www/services_unbound_acls.php:173 +msgid "The settings for the DNS Resolver have changed. You must apply the configuration to take affect." +msgstr "As configurações do DNS Resolver foram alteradas. Você precisa aplicar as configurações para que elas tenham efeito." + +#: usr/local/www/services_unbound_acls.php:181 +msgid "General Settings" +msgstr "ConfiguraçÃo Geral" + +# 76% +#: usr/local/www/services_unbound_acls.php:182 +#: usr/local/www/services_unbound.php:137 +#: usr/local/www/services_unbound_advanced.php:124 +msgid "Advanced settings" +msgstr "Configurações avançadas" + +#: usr/local/www/services_unbound_acls.php:183 +#: usr/local/www/services_unbound.php:138 +#: usr/local/www/services_unbound_advanced.php:125 +msgid "Access Lists" +msgstr "Listas de acesso" + +#: usr/local/www/services_unbound_acls.php:200 +#, php-format +msgid "%s Access List" +msgstr "Lista de acesso %s" + +#: usr/local/www/services_unbound_acls.php:203 +msgid "Access List name" +msgstr "Nome da lista de acesso" + +#: usr/local/www/services_unbound_acls.php:207 +msgid "Provide an Access List name." +msgstr "Forneça um nome para a Lista de Acesso." + +#: usr/local/www/services_unbound_acls.php:222 +msgid "Choose what to do with DNS requests that match the criteria specified below." +msgstr "Escolha o que fazer com requisições DNS que correspondem aos critérios especificados abaixo." + +#: usr/local/www/services_unbound_acls.php:223 +msgid "Deny: This action stops queries from hosts within the netblock defined below." +msgstr "Negar: Esta ação interrompe consultas de hosts dentro da rede definida abaixo." + +#: usr/local/www/services_unbound_acls.php:224 +msgid "Refuse: This action also stops queries from hosts within the netblock defined below, but sends a DNS rcode REFUSED error message back to the client." +msgstr "Recusar: Esta ação também interrompe consultas de hosts dentro da rede definida abaixo, mas envia uma mensagem de erro DNS rcode REFUSED para o cliente." + +#: usr/local/www/services_unbound_acls.php:225 +msgid "Allow: This action allows queries from hosts within the netblock defined below." +msgstr "Permitir: Esta ação permite consultas de hosts dentro da rede definida abaixo." + +#: usr/local/www/services_unbound_acls.php:226 +msgid "Allow Snoop: This action allows recursive and nonrecursive access from hosts within the netblock defined below. Used for cache snooping and ideally should only be configured for your administrative host." +msgstr "Permitir Snoop: Esta ação permite acesso recursivo e não recursivo de hosts dentro da rede definida abaixo. Usado para cache snooping e o ideal é que seja configurado apenas para seu host administrativo." + +# 87% +#: usr/local/www/services_unbound_acls.php:231 +msgid "Networks" +msgstr "Redes" + +#: usr/local/www/services_unbound_acls.php:317 +msgid "Access List Name" +msgstr "Nome da Lista de Acesso" + +#: usr/local/www/services_unbound_acls.php:340 +msgid "edit access list" +msgstr "editar lista de acesso" + +# 82% +#: usr/local/www/services_unbound_acls.php:343 +msgid "Do you really want to delete this access list?" +msgstr "Você deseja realmente apagar esta lista de acesso?" + +#: usr/local/www/services_unbound_acls.php:344 +msgid "delete access list" +msgstr "excluir lista de acesso" + +#: usr/local/www/services_unbound_acls.php:357 +msgid "Add new Access List" +msgstr "Adicionar nova Lista de Acesso" + +#: usr/local/www/services_unbound_acls.php:364 +msgid "Access Lists to control access to the DNS Resolver can be defined here." +msgstr "Listas de Acesso para controlar o acesso ao DNS Resolver podem ser definidas aqui." + +#: usr/local/www/diag_logs_settings.php:86 +#: usr/local/www/diag_logs_settings.php:87 +#: usr/local/www/diag_logs_settings.php:90 +msgid "A valid IP address/hosname or IP/hostname:port must be specified for remote syslog server #1." +msgstr "Um IP/hostname ou IP/hostname:porta deve ser expecificado para o servidor syslog remoto #1." + +#: usr/local/www/diag_logs_settings.php:89 +#: usr/local/www/diag_logs_settings.php:90 +#: usr/local/www/diag_logs_settings.php:93 +msgid "A valid IP address/hosname or IP/hostname:port must be specified for remote syslog server #2." +msgstr "Um IP/hostname ou IP/hostname:porta deve ser expecificado para o servidor syslog remoto #2." + +#: usr/local/www/diag_logs_settings.php:92 +#: usr/local/www/diag_logs_settings.php:93 +#: usr/local/www/diag_logs_settings.php:96 +msgid "A valid IP address/hosname or IP/hostname:port must be specified for remote syslog server #3." +msgstr "Um IP/hostname ou IP/hostname:porta deve ser expecificado para o servidor syslog remoto #3." + +#: usr/local/www/diag_logs_settings.php:234 +#: usr/local/www/diag_logs_settings.php:241 +#: usr/local/www/diag_logs_settings.php:260 +msgid "General Logging Options" +msgstr "Opções Gerais de Log" + +#: usr/local/www/diag_logs_settings.php:245 +#: usr/local/www/diag_logs_settings.php:252 +#: usr/local/www/diag_logs_settings.php:271 +msgid "Hint: This is only the number of log entries displayed in the GUI. It does not affect how many entries are contained in the actual log files." +msgstr "Dica: Este é apenas o número de entradas do log exibidas na interface. Isto não afeta a quantidade de entradas existente nos arquivos de log reais." + +#: usr/local/www/diag_logs_settings.php:251 +#: usr/local/www/diag_logs_settings.php:258 +#: usr/local/www/diag_logs_settings.php:278 +msgid "Hint: packets that are blocked by the implicit default block rule will not be logged if you uncheck this option. Per-rule logging options are still respected." +msgstr "Dica: pacotes que são bloqueados pela regra de bloqueio padrão não são \"logadas\" se você desmarcar esta opção. Opções de log por regras ainda são respeitadas." + +#: usr/local/www/diag_logs_settings.php:259 +#: usr/local/www/diag_logs_settings.php:266 +#: usr/local/www/diag_logs_settings.php:297 +msgid "Hint: If this is checked, filter logs are shown as generated by the packet filter, without any formatting. This will reveal more detailed information, but it is more difficult to read." +msgstr "Dica: Se isto estiver ativado, regras de filtros são exibidas da forma como são geradas pelo filtro de pacotes, sem formatação alguma. Isto irá revelar mais informações detalhadas, mas é mais difícil de ler." + +# 91% +#: usr/local/www/diag_logs_settings.php:265 +#: usr/local/www/diag_logs_settings.php:285 +#: usr/local/www/diag_logs_settings.php:316 +msgid "Disable writing log files to the local disk" +msgstr "Desabilitar gravação de arquivos de log no disco local" + +#: usr/local/www/diag_logs_settings.php:274 +#: usr/local/www/diag_logs_settings.php:294 +#: usr/local/www/diag_logs_settings.php:325 +msgid "Remote Logging Options" +msgstr "Opções de Log Remoto" + +#: usr/local/www/diag_logs_settings.php:277 +#: usr/local/www/diag_logs_settings.php:297 +#: usr/local/www/diag_logs_settings.php:328 +msgid "Enable Remote Logging" +msgstr "Habilitar Log Remoto" + +#: usr/local/www/diag_logs_settings.php:279 +#: usr/local/www/diag_logs_settings.php:299 +#: usr/local/www/diag_logs_settings.php:330 +msgid "Send log messages to remote syslog server" +msgstr "Enviar mensagens de log para o servidor syslog remoto" + +# 90% +#: usr/local/www/diag_logs_settings.php:282 +#: usr/local/www/diag_logs_settings.php:302 +#: usr/local/www/diag_logs_settings.php:333 +msgid "Remote Syslog Servers" +msgstr "Servidores Syslog Remotos" + +#: usr/local/www/diag_logs_settings.php:299 +#: usr/local/www/diag_logs_settings.php:319 +#: usr/local/www/diag_logs_settings.php:350 +msgid "IP addresses of remote syslog servers, or an IP:port." +msgstr "Endereços IP dos servidores syslog remotos, ou IP:porta." + +#: usr/local/www/diag_logs_settings.php:304 +#: usr/local/www/diag_logs_settings.php:324 +#: usr/local/www/diag_logs_settings.php:355 +msgid "Remote Syslog Contents" +msgstr "Conteúdo Syslog Remoto" + +#: usr/local/www/diag_logs_settings.php:334 +#: usr/local/www/diag_logs_settings.php:354 +#: usr/local/www/diag_logs_settings.php:385 +msgid "syslog sends UDP datagrams to port 514 on the specified remote syslog server, unless another port is specified. Be sure to set syslogd on the remote server to accept syslog messages from" +msgstr "syslog envia um datagrama UDP para a porta 514 do servidor remoto especificado, a não ser que outra porta seja especificada. Esteja certo de configurar o syslogd no servidor remoto para aceitar mensagens de" + +# 94% +#: usr/local/www/system_gateway_groups_edit.php:229 +#: usr/local/www/system_gateway_groups_edit.php:289 +#: usr/local/www/system_gateway_groups_edit.php:293 +msgid "Interface Address" +msgstr "Endereço da Interface" + +#: usr/local/www/system_gateway_groups_edit.php:253 +#: usr/local/www/system_gateway_groups_edit.php:313 +msgid "The virtual IP field selects what (virtual) IP should be used when this group applies to a local Dyndns, IPsec or openvpn endpoint" +msgstr "O campo IP virtual seleciona qual IP (virtual) deve ser usado quando este grupo se aplica a um Dyndns, IPsec ou OpenVPN local" + +#: usr/local/www/services_dyndns_edit.php:102 +#: usr/local/www/services_dyndns_edit.php:322 +#: usr/local/www/services_dyndns_edit.php:326 +#: usr/local/www/services_dyndns_edit.php:103 +#: usr/local/www/services_dyndns_edit.php:334 +#: usr/local/www/services_dyndns_edit.php:335 +msgid "Update URL" +msgstr "Atualizar URL" + +#: usr/local/www/services_dyndns_edit.php:254 +#: usr/local/www/services_dyndns_edit.php:258 +#: usr/local/www/services_dyndns_edit.php:260 +#: usr/local/www/services_dyndns_edit.php:261 +msgid "Interface to send update from" +msgstr "Interface de onde enviar atualizações" + +#: usr/local/www/services_dyndns_edit.php:262 +#: usr/local/www/services_dyndns_edit.php:266 +#: usr/local/www/services_dyndns_edit.php:268 +#: usr/local/www/services_dyndns_edit.php:269 +msgid "Note: This is almost always the same as the Interface to Monitor." +msgstr "Nota: Esta é quase sempre a mesma interface de Interface a Monitorar." + +# 80% +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:303 +#: usr/local/www/services_dyndns_edit.php:311 +#: usr/local/www/services_dyndns_edit.php:312 +msgid "Username is required for all types except Namecheap, FreeDNS and Custom Entries." +msgstr "Nome de usuário é necessário para todos os tipos exceto Namecheap e FreeDNS e entradas customizadas." + +#: usr/local/www/services_dyndns_edit.php:300 +#: usr/local/www/services_dyndns_edit.php:304 +#: usr/local/www/services_dyndns_edit.php:312 +#: usr/local/www/services_dyndns_edit.php:313 +msgid "Route 53: Enter your Access Key ID." +msgstr "Route 53: Entre com seu Access Key ID." + +#: usr/local/www/services_dyndns_edit.php:301 +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/services_dyndns_edit.php:313 +#: usr/local/www/services_dyndns_edit.php:314 +msgid "For Custom Entries, Username and Password represent HTTP Authentication username and passwords." +msgstr "Para entradas customizadas, nome de usuário e senha, apresente usuário e senha autenticação HTTP." + +#: usr/local/www/services_dyndns_edit.php:310 +#: usr/local/www/services_dyndns_edit.php:314 +#: usr/local/www/services_dyndns_edit.php:322 +#: usr/local/www/services_dyndns_edit.php:323 +msgid "Route 53: Enter your Secret Access Key." +msgstr "Route 53: Entre com seu Secret Access Key." + +#: usr/local/www/services_dyndns_edit.php:315 +#: usr/local/www/services_dyndns_edit.php:319 +#: usr/local/www/services_dyndns_edit.php:327 +#: usr/local/www/services_dyndns_edit.php:328 +msgid "Zone ID" +msgstr "Zone ID" + +#: usr/local/www/services_dyndns_edit.php:318 +#: usr/local/www/services_dyndns_edit.php:322 +#: usr/local/www/services_dyndns_edit.php:330 +#: usr/local/www/services_dyndns_edit.php:331 +msgid "Enter Zone ID that you received when you created your domain in Route 53." +msgstr "Informe o Zone ID que você recebeu quando criou seu domínio no Route 53." + +#: usr/local/www/services_dyndns_edit.php:325 +#: usr/local/www/services_dyndns_edit.php:329 +#: usr/local/www/services_dyndns_edit.php:337 +#: usr/local/www/services_dyndns_edit.php:338 +msgid "This is the only field required by for Custom Dynamic DNS, and is only used by Custom Entries." +msgstr "Este é o único campo exigido pelo Custom Dynamic DNS e usado apenas pelas entradas customizadas." + +#: usr/local/www/services_dyndns_edit.php:327 +#: usr/local/www/services_dyndns_edit.php:338 +#: usr/local/www/services_dyndns_edit.php:331 +#: usr/local/www/services_dyndns_edit.php:342 +#: usr/local/www/services_dyndns_edit.php:339 +#: usr/local/www/services_dyndns_edit.php:350 +#: usr/local/www/services_dyndns_edit.php:340 +#: usr/local/www/services_dyndns_edit.php:351 +msgid "If you need the new IP to be included in the request, put %IP% in its place." +msgstr "Se precisa que o novo IP seja incluído na requisição, coloque %IP% em seu lugar." + +#: usr/local/www/services_dyndns_edit.php:331 +#: usr/local/www/services_dyndns_edit.php:335 +#: usr/local/www/services_dyndns_edit.php:343 +#: usr/local/www/services_dyndns_edit.php:344 +msgid "Result Match" +msgstr "Result Match" + +#: usr/local/www/services_dyndns_edit.php:334 +#: usr/local/www/services_dyndns_edit.php:338 +#: usr/local/www/services_dyndns_edit.php:346 +#: usr/local/www/services_dyndns_edit.php:347 +msgid "This field is only used by Custom Dynamic DNS Entries." +msgstr "Este campo é usado apenas pelo Custom Dynamic DNS Entries." + +#: usr/local/www/services_dyndns_edit.php:336 +#: usr/local/www/services_dyndns_edit.php:340 +#: usr/local/www/services_dyndns_edit.php:348 +#: usr/local/www/services_dyndns_edit.php:349 +msgid "This field should be identical to what your DDNS Provider will return if the update succeeds, leave it blank to disable checking of returned results." +msgstr "Este campo deve ser identico ao o que seu provedor DDNS irá retornar se a atualização for bem sucedida, deixe em branco para desabilitar a verificação de resultados retornados." + +#: usr/local/www/services_dyndns_edit.php:340 +#: usr/local/www/services_dyndns_edit.php:344 +#: usr/local/www/services_dyndns_edit.php:352 +#: usr/local/www/services_dyndns_edit.php:353 +msgid "If you need to include multiple possible values, sperate them with a |. If your provider includes a |, escape it with \\|" +msgstr "Se você precisar incluir multiplos valores possíveis, separe-os com um |. Se o seu provedor incluir um |, escape-o com \\|" + +#: usr/local/www/services_dyndns_edit.php:342 +#: usr/local/www/services_dyndns_edit.php:346 +#: usr/local/www/services_dyndns_edit.php:354 +#: usr/local/www/services_dyndns_edit.php:355 +msgid "" +"Tabs (\\t), newlines (\\n" +") and carriage returns (\\r) at the beginning or end of the returned results are removed before comparison." +msgstr "" +"Tabs (\\t), quebra de linha (\\n" +") e retornos de carro (\\r) no inicio ou no fim dos resultados retornados são removidos antes da comparação." + +#: usr/local/www/services_dyndns_edit.php:351 +#: usr/local/www/services_dyndns_edit.php:355 +#: usr/local/www/services_dyndns_edit.php:363 +#: usr/local/www/services_dyndns_edit.php:364 +msgid "Choose TTL for your dns record." +msgstr "Escolha o TTL para seus registros DNS." + +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/services_dyndns_edit.php:374 +#: usr/local/www/services_dyndns_edit.php:382 +#: usr/local/www/services_dyndns_edit.php:383 +#: usr/local/www/services_rfc2136_edit.php:104 +#: usr/local/www/services_rfc2136_edit.php:214 +msgid "Save & Force Update" +msgstr "Salvar e Forçar Atualização" + +#: usr/local/www/fbegin.inc:102 usr/local/www/fbegin.inc:111 +#: usr/local/www/fbegin.inc:103 +msgid "High Avail. Sync" +msgstr "Sincronização Alta Disp." + +#: usr/local/www/services_dnsmasq_edit.php:119 +msgid "Alias Domain" +msgstr "Alias de Dominio" + +#: usr/local/www/services_dnsmasq_edit.php:124 +msgid "Hostnames in alias list can only contain the characters A-Z, 0-9 and '-'." +msgstr "Hostnames na lista de alias podem conter apenas caracteres A-Z, 0-9 e '-'." + +#: usr/local/www/services_dnsmasq_edit.php:127 +msgid "A valid domain must be specified in alias list." +msgstr "Um dominio válido deve ser especificado na lista de alias." + +#: usr/local/www/services_dnsmasq_edit.php:232 +#: usr/local/www/services_dnsmasq_edit.php:233 +msgid "Enter additional names for this host." +msgstr "Informe nomes adicionais para este host." + +#: usr/local/www/pkg.php:238 usr/local/www/pkg.php:186 +msgid "Saving changes..." +msgstr "Salvando alterações..." + +#: usr/local/www/pkg.php:239 usr/local/www/pkg.php:187 +msgid "Do you really want to save changes?" +msgstr "Você deseja realmente salvar as alterações?" + +#: usr/local/www/status_interfaces.php:196 +#: usr/local/www/status_interfaces.php:199 +msgid "Cell Signal (RSSI)" +msgstr "Cell Signal (RSSI)" + +#: usr/local/www/status_interfaces.php:203 +#: usr/local/www/status_interfaces.php:206 +msgid "Cell Mode" +msgstr "Cell Mode" + +#: usr/local/www/status_interfaces.php:210 +#: usr/local/www/status_interfaces.php:213 +msgid "Cell SIM State" +msgstr "Cell SIM State" + +#: usr/local/www/status_interfaces.php:217 +#: usr/local/www/status_interfaces.php:220 +msgid "Cell Service" +msgstr "Cell Service" + +#: usr/local/www/status_interfaces.php:224 +#: usr/local/www/status_interfaces.php:227 +msgid "Cell Upstream" +msgstr "Cell Upstream" + +#: usr/local/www/status_interfaces.php:231 +#: usr/local/www/status_interfaces.php:234 +msgid "Cell Downstream" +msgstr "Cell Downstream" + +#: usr/local/www/status_interfaces.php:238 +#: usr/local/www/status_interfaces.php:241 +msgid "Cell Current Up" +msgstr "Cell Current Up" + +#: usr/local/www/status_interfaces.php:245 +#: usr/local/www/status_interfaces.php:248 +msgid "Cell Current Down" +msgstr "Cell Current Down" + +#: usr/local/www/status_interfaces.php:289 +#: usr/local/www/status_interfaces.php:292 +msgid "IPv6 Link Local" +msgstr "IPv6 Link Local" + +#: usr/local/www/status_interfaces.php:339 +#: usr/local/www/status_interfaces.php:342 +msgid "LAGG Protocol" +msgstr "Protocolo LAGG" + +#: usr/local/www/status_interfaces.php:346 +#: usr/local/www/status_interfaces.php:349 +msgid "LAGG Ports" +msgstr "Portas LAGG" + +#: usr/local/www/diag_defaults.php:51 usr/local/www/diag_defaults.php:61 +msgid "The system has been reset to factory defaults and is now rebooting. This may take a few minutes, depending on your hardware." +msgstr "O systema foi restaurado para o padrão de fábrica e está reiniciando. Isto pode levar alguns minutos, dependendo do seu hardware." + +#: usr/local/www/carp_status.php:196 usr/local/www/carp_status.php:189 +msgid "You can configure high availability sync settings" +msgstr "Você pode definir as configurações de sincronização de alta disponibilidade " + +#: usr/local/www/load_balancer_setting.php:69 +msgid "Timeout must be a numeric value" +msgstr "Timeout deve ser um valor numérico" + +#: usr/local/www/load_balancer_setting.php:73 +msgid "Interval must be a numeric value" +msgstr "Intervalo deve ser um valor numérico" + +#: usr/local/www/load_balancer_setting.php:78 +msgid "Prefork must be a numeric value" +msgstr "Prefork deve ser um valor numérico" + +#: usr/local/www/load_balancer_setting.php:81 +msgid "Prefork value must be between 1 and 32" +msgstr "O valor de prefork deve estar entre 1 e 32" + +#: usr/local/www/load_balancer_setting.php:132 +#: usr/local/www/load_balancer_setting.php:131 +msgid "Relayd global settings" +msgstr "Configurações gerais do Relayd" + +#: usr/local/www/load_balancer_setting.php:135 +#: usr/local/www/load_balancer_setting.php:134 +msgid "timeout" +msgstr "timeout" + +#: usr/local/www/load_balancer_setting.php:139 +#: usr/local/www/load_balancer_setting.php:138 +msgid "Set the global timeout in milliseconds for checks. Leave blank to use the default value of 1000 ms " +msgstr "Define o timeout global em milisegundos para verificações. Deixe em branco para usar o valor padrão de 1000 ms" + +# 75% +#: usr/local/www/load_balancer_setting.php:143 +#: usr/local/www/load_balancer_setting.php:142 +msgid "interval" +msgstr "intervalo" + +#: usr/local/www/load_balancer_setting.php:147 +#: usr/local/www/load_balancer_setting.php:146 +msgid "Set the interval in seconds at which the member of a pool will be checked. Leave blank to use the default interval of 10 seconds" +msgstr "Define o intervalo em segundos no qual o membro de um pool será verificado. Deixe em branco para usar o valor padão de 10 segundos" + +#: usr/local/www/load_balancer_setting.php:151 +#: usr/local/www/load_balancer_setting.php:150 +msgid "prefork" +msgstr "prefork" + +#: usr/local/www/load_balancer_setting.php:155 +#: usr/local/www/load_balancer_setting.php:154 +msgid "Number of processes used by relayd. Leave blank to use the default value of 5 processes" +msgstr "Número de processos usados pelo relayd. Deixe em branco para usar o valor padrão de 5 processos" + +# 98% +#: usr/local/www/services_dhcp_relay.php:80 +msgid "A valid Destination Server IP address must be specified." +msgstr "Um endereço IP do Servidor de Destino válido deve ser especificado." + +#: usr/local/www/diag_ipsec.php:65 usr/local/www/diag_ipsec.php:66 +#: usr/local/www/diag_ipsec.php:68 +msgid "Disconnected user" +msgstr "Usuário desconectado" + +#: usr/local/www/diag_ipsec.php:192 usr/local/www/diag_ipsec.php:193 +#: usr/local/www/diag_ipsec.php:194 +msgid "Mobile User" +msgstr "Usuário Móvel" + +#: usr/local/www/diag_ipsec.php:193 usr/local/www/diag_ipsec.php:194 +#: usr/local/www/diag_ipsec.php:195 +msgid "Login Time" +msgstr "Hora do Login" + +# 83% +#: usr/local/www/diag_ipsec.php:195 usr/local/www/diag_ipsec.php:196 +#: usr/local/www/diag_ipsec.php:197 +msgid "Remote" +msgstr "Remoto" + +# 82% +#: usr/local/www/diag_ipsec.php:223 usr/local/www/diag_ipsec.php:224 +#: usr/local/www/diag_ipsec.php:225 +msgid "You can configure IPsec" +msgstr "Você pode configurar seu IPsec" + +# 81% +#: usr/local/www/system_certmanager.php:207 +#: usr/local/www/system_certmanager.php:681 +#: usr/local/www/system_certmanager.php:210 +#: usr/local/www/system_certmanager.php:706 +#: usr/local/www/system_certmanager.php:707 +msgid "Certificate Type" +msgstr "Tipo do Certificado" + +#: usr/local/www/system_certmanager.php:694 +#: usr/local/www/system_certmanager.php:719 +#: usr/local/www/system_certmanager.php:720 +msgid "Type of certificate to generate. Used for placing restrictions on the usage of the generated certificate." +msgstr "Tipo do certificado a gerar. Usado para colocar restrições sobre o uso do certificado gerado." + +#: usr/local/www/system_certmanager.php:757 +#: usr/local/www/system_certmanager.php:782 +#: usr/local/www/system_certmanager.php:783 +msgid "Alternative Names" +msgstr "Nomes Alternativos" + +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1112 +#: usr/local/www/system_certmanager.php:1168 +#: usr/local/www/system_certmanager.php:1172 +msgid "export cert+key in .p12" +msgstr "export cert+key in .p12" + +#: usr/local/www/diag_backup.php:192 usr/local/www/diag_backup.php:193 +msgid "RRD Data" +msgstr "Dados RRD" + +#: usr/local/www/firewall_rules_edit.php:224 +#: usr/local/www/firewall_rules_edit.php:237 +#: usr/local/www/firewall_rules_edit.php:222 +#: usr/local/www/firewall_rules_edit.php:236 +#: usr/local/www/firewall_rules_edit.php:219 +#: usr/local/www/firewall_rules_edit.php:233 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:239 +msgid "You can not assign a gateway to a rule that applies to IPv4 and IPv6" +msgstr "Você pode atribuir um gateway a regra que aplicar para IPv4 e IPv6" + +#: usr/local/www/firewall_rules_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:248 +#: usr/local/www/firewall_rules_edit.php:245 +#: usr/local/www/firewall_rules_edit.php:251 +msgid "You can not assign a protocol other then ICMP, TCP, UDP or TCP/UDP to a rule that applies to IPv4 and IPv6" +msgstr "Você não pode atribuir um protocolo diferente de ICMP, TCP, UDP ou TCP/UDP para uma regra que se aplica a IPv4 e IPv6" + +#: usr/local/www/firewall_rules_edit.php:253 +#: usr/local/www/firewall_rules_edit.php:252 +#: usr/local/www/firewall_rules_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:255 +msgid "You can not assign a ICMP type to a rule that applies to IPv4 and IPv6" +msgstr "Você não pode atribuir um tipo ICMP para uma regra que se aplica a IPv4 e IPV6" + +#: usr/local/www/firewall_rules_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:415 +#: usr/local/www/firewall_rules_edit.php:418 +#: usr/local/www/firewall_rules_edit.php:424 +msgid "You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules." +msgstr "Você não pode usar um endereço IPv4 ou IPv6 in regras combinando IPv4 + IPv6." + +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1300 +#: usr/local/www/firewall_rules_edit.php:1307 +#: usr/local/www/firewall_rules_edit.php:1306 +#: usr/local/www/firewall_rules_edit.php:1354 +msgid "802.1p" +msgstr "802.1p" + +#: usr/local/www/firewall_rules_edit.php:1308 +#: usr/local/www/firewall_rules_edit.php:1323 +#: usr/local/www/firewall_rules_edit.php:1330 +#: usr/local/www/firewall_rules_edit.php:1341 +#: usr/local/www/firewall_rules_edit.php:1389 +msgid "Choose 802.1p priority to match on" +msgstr "Escolha a prioridade 802.1p para correspoder " + +#: usr/local/www/firewall_rules_edit.php:1312 +#: usr/local/www/firewall_rules_edit.php:1327 +#: usr/local/www/firewall_rules_edit.php:1334 +#: usr/local/www/firewall_rules_edit.php:1345 +#: usr/local/www/firewall_rules_edit.php:1393 +msgid "Choose 802.1p priority to apply" +msgstr "Escolha a prioridade 802.1p para aplicar" + +#: usr/local/www/services_unbound.php:102 +#: usr/local/www/services_unbound_advanced.php:88 +msgid "DNS Resolver" +msgstr "DNS Resolver" + +#: usr/local/www/services_unbound.php:129 +msgid "The configuration for the DNS Resolver, has been changed" +msgstr "A configuração do DNS Rescolver foi modificada" + +#: usr/local/www/services_unbound.php:136 +#: usr/local/www/services_unbound_advanced.php:123 +msgid "General settings" +msgstr "Configurações Gerais" + +# 75% +#: usr/local/www/services_unbound.php:147 +msgid "General DNS Resolver Options" +msgstr "Opções gerais do DNS Resolver" + +#: usr/local/www/services_unbound.php:153 +msgid "Enable DNS Resolver" +msgstr "Habilitsar DNS Resolver" + +# 94% +#: usr/local/www/services_unbound.php:157 +msgid "Network interfaces" +msgstr "Interfaces de rede" + +#: usr/local/www/services_unbound.php:172 +msgid "The DNS Resolver Server will listen on the selected interfaces. To add an interface click inside the interface box and select the interface from the drop down." +msgstr "O servidor DNS Resolver irá ouvir as interfaces selecionadas. Para adicionar uma interface, clique dentro da caixa de interface e selecione uma das opções." + +#: usr/local/www/services_unbound.php:177 +msgid "Outgoing interfaces" +msgstr "Interfaces de saída" + +#: usr/local/www/services_unbound.php:192 +msgid "Utilize different network interface(s) that the DNS Resolver will use to send queries to authoritative servers and receive their replies. By default all interfaces are used." +msgstr "Utilize interfaces de rede diferentes das que o DNS Resolver irá usar para enviar consultas a servidores autoritativos e receber respostas. Por padrão todas as interfaces são usadas." + +#: usr/local/www/services_unbound.php:197 +msgid "DNSSEC" +msgstr "DNSSEC" + +#: usr/local/www/services_unbound.php:200 +msgid "Enable DNSSEC Support" +msgstr "Habilitar suporte a DNSSEC" + +# 90% +#: usr/local/www/services_unbound.php:204 +msgid "Forwarding" +msgstr "Forwarding" + +#: usr/local/www/services_unbound.php:207 +msgid "Enable Forwarding Mode" +msgstr "Habilitr modo Forwarding" + +#: usr/local/www/services_unbound.php:214 +msgid "Register DHCP leases in the DNS Resolver" +msgstr "Registar DHCP leases no DNS Resolver" + +#: usr/local/www/services_unbound.php:215 +#, php-format +msgid "If this option is set, then machines that specify their hostname when requesting a DHCP lease will be registered in the DNS Resolver, so that their name can be resolved. You should also set the domain in %sSystem: General setup%s to the proper value." +msgstr "Se esta opções estiver definida, então máquinas que especificarem seu hostname quando requisitando um DHCP lease serão registradas no DNS Resolver, assim seus nomes podem ser resolvidos. Você deve também definir o domínio em %sSistema: Configurações Gerais%s para o valor adequado." + +# 77% +#: usr/local/www/services_unbound.php:226 +msgid "Register DHCP static mappings in the DNS Resolver" +msgstr "Registrar mapeamentos estáticos DHCP no DNS Resolver" + +#: usr/local/www/services_unbound.php:227 +#, php-format +msgid "If this option is set, then DHCP static mappings will be registered in the DNS Resolver, so that their name can be resolved. You should also set the domain in %sSystem: General setup%s to the proper value." +msgstr "Se esta opção estiver definida, então mapeamentos estáticos DHCP serão registrados no DNS Resolver, assim seus nomes pode ser resolvidos. Você deve também definir o domínio em %sSistema: Configurações Gerais%s para o valor próprio." + +#: usr/local/www/services_unbound.php:254 +#, php-format +msgid "If the DNS Resolver is enabled, the DHCP service (if enabled) will automatically serve the LAN IP address as a DNS server to DHCP clients so they will use the DNS Resolver. If Forwarding, is enabled, the DNS Resolver will use the DNS servers entered in %sSystem: General setup%s or those obtained via DHCP or PPP on WAN if the "Allow DNS server list to be overridden by DHCP/PPP on WAN" is checked." +msgstr "Se o DNS Resolver estiver habilitado, o serviço DHCP (se habilitado) irá automaticamente forneceser o endereço IP da LAN como um servidor DNS para clientes DHCP, assim eles irão usar o DNS Resolver. Se o Forwarding estiver habilitado, o DNS Resolver irá usar o servidor DNS informado em %sSistema: Configurações Gerais%s ou aqueles obtidos bia DHCP ou PPP on WAN se a opção "Permitir lista de servidores DNS ser sobrescrita pelo DHCP/PPP na WAN" estiver habilitada." + +#: usr/local/www/services_unbound_advanced.php:116 +msgid "The configuration of the DNS Resolver, has been changed" +msgstr "A configuração do DNS Resolver foi alterada" + +#: usr/local/www/services_unbound_advanced.php:134 +msgid "Advanced Resolver Options" +msgstr "Opções Avançadas do Resolver" + +#: usr/local/www/services_unbound_advanced.php:137 +msgid "Hide Identity" +msgstr "Esconder Identidade" + +#: usr/local/www/services_unbound_advanced.php:140 +msgid "If enabled, id.server and hostname.bind queries are refused." +msgstr "Se habilitado, consultas id.server e hostname.bind são recusadas." + +#: usr/local/www/services_unbound_advanced.php:144 +msgid "Hide Version" +msgstr "Esconder Versão" + +#: usr/local/www/services_unbound_advanced.php:147 +msgid "If enabled, version.server and version.bind queries are refused." +msgstr "Se habilitada, consultas version.server e version.bind são recusadas." + +#: usr/local/www/services_unbound_advanced.php:151 +msgid "Prefetch Support" +msgstr "Prefetch Support" + +#: usr/local/www/services_unbound_advanced.php:154 +msgid "Message cache elements are prefetched before they expire to help keep the cache up to date. When enabled, this option can cause an increase of around 10% more DNS traffic and load on the server, but frequently requested items will not expire from the cache." +msgstr "Elementos de cache de mensagem são pré-carregados antes de expirarem para ajudar a manter o cache atualizado. Quando habilitada, esta opção pode causar um aumento em torno de 10% no tráfego DNS e carga do servidor, itens requisitados frequentemente não irão expirar a partir do cache." + +#: usr/local/www/services_unbound_advanced.php:158 +msgid "Prefetch DNS Key Support" +msgstr "Suporte a Prefetch DNS Key" + +#: usr/local/www/services_unbound_advanced.php:161 +#, php-format +msgid "DNSKEY's are fetched earlier in the validation process when a %sDelegation signer%s is encountered. This helps lower the latency of requests but does utilize a little more CPU." +msgstr "DNS KEYs são obtidas anteriormente no processo de validação quando uma %sDelegation signer%s é encontrada. Isto ajuda a reduzir a latência das requisições, mas utiliza um pouco mais de CPU." + +#: usr/local/www/services_unbound_advanced.php:165 +msgid "Harden Glue" +msgstr "Harden Glue" + +#: usr/local/www/services_unbound_advanced.php:168 +msgid "Only trust glue if it is within the servers authority." +msgstr "Somente confiar \"glue\" se estiver dentro dos servidores autoritarios" + +#: usr/local/www/services_unbound_advanced.php:172 +msgid "Harden DNSSEC data" +msgstr "Endurecer dados DNSSEC" + +#: usr/local/www/services_unbound_advanced.php:175 +msgid "DNSSEC data is required for trust-anchored zones. If such data is absent, the zone becomes bogus. If this is disabled and no DNSSEC data is received, then the zone is made insecure." +msgstr "Dados de DNSSEC são requeridos para zonas \"trust-anchored\", Se algum dado estiver ausente, a zona se tornará falsa. Se isto estiver desabilitados ou nenhum dado DNSSEC é recebido, a zona ficará insegura." + +#: usr/local/www/services_unbound_advanced.php:179 +msgid "Message Cache Size" +msgstr "Tamanho do Cache de Mensagem" + +#: usr/local/www/services_unbound_advanced.php:190 +msgid "Size of the message cache. The message cache stores DNS rcodes and validation statuses. The RRSet cache will automatically be set to twice this amount. The RRSet cache contains the actual RR data. The default is 4 megabytes." +msgstr "Tamanho do cache de mensagem. O cache de mensagem armazena DNS rcodes e status de validação. O cache RRSet será automaticamente definido para duas vezes este montante. O cahce RRSet contém os dados RR reais. O padrão é 4 megabytes." + +#: usr/local/www/services_unbound_advanced.php:194 +msgid "Outgoing TCP Buffers" +msgstr "Buffers TCP de Saída" + +#: usr/local/www/services_unbound_advanced.php:204 +msgid "The number of outgoing TCP buffers to allocate per thread. The default value is 10. If 0 is selected then no TCP queries, to authoritative servers, are done." +msgstr "O número de buffers TCP de saída a alocar por thread. O valor padrão é 10. Se 0 é selecionado, então nenhuma consulta TCP, para servidores autoritativos, é feita." + +#: usr/local/www/services_unbound_advanced.php:208 +msgid "Incoming TCP Buffers" +msgstr "Buffers TCP de Entrada" + +#: usr/local/www/services_unbound_advanced.php:218 +msgid "The number of incoming TCP buffers to allocate per thread. The default value is 10. If 0 is selected then no TCP queries, from clients, are accepted." +msgstr "O número de buffers TCP de entrada a ser alocados por thread. O valor padrão é 10. Se 0 é selecionado, então nenhuma consulta TCP de clientes é aceita." + +#: usr/local/www/services_unbound_advanced.php:222 +msgid "EDNS Buffer Size" +msgstr "Tamanho do Buffer EDNS" + +#: usr/local/www/services_unbound_advanced.php:229 +msgid "Number of bytes size to advertise as the EDNS reassembly buffer size. This is the value that is used in UDP datagrams sent to peers. RFC recommendation is 4096 (which is the default). If you have fragmentation reassemble problems, usually seen as timeouts, then a value of 1480 should help. The 512 value bypasses most MTU path problems, but it can generate an excessive amount of TCP fallback." +msgstr "Número de bytes de tamanho para anunciar como o tamanho do buffer de remontagem do EDNS. Este é o valor usado em datagramas UDP enviados a outros pares. A recomendação da RFC é 4096 (que é o padrão), o qual é o valor padrão. Se você tem problemas com remontagem de fragmentos, normalmente visto como timeouts, então um valor de 1480 deve ajudar. O valor 512 contorna a maioria dos problemas de caminho com MTU, mas pode gerar um montante excessivo de TCP fallback." + +#: usr/local/www/services_unbound_advanced.php:233 +msgid "Number of queries per thread" +msgstr "Número de consultas por thread" + +#: usr/local/www/services_unbound_advanced.php:240 +msgid "The number of queries that every thread will service simultaneously. If more queries arrive that need to be serviced, and no queries can be jostled, then these queries are dropped." +msgstr "O número de consultas que toda thread irá fornecer simultaneamente. Se mais consultas chegarem, e mais nenhuma puder ser atendida, então elas serão excluídas." + +#: usr/local/www/services_unbound_advanced.php:244 +msgid "Jostle Timeout" +msgstr "Jostle Timeout" + +#: usr/local/www/services_unbound_advanced.php:252 +msgid "This timeout is used for when the server is very busy. This protects against denial of service by slow queries or high query rates. The default value is 200 milliseconds." +msgstr "Este timeout é usado quando o servidor está sobrecarregado. Isto protege contra negação de serviço por consultas lentas ou altas taxas de consultas. O padrão é 200 milisegundos." + +#: usr/local/www/services_unbound_advanced.php:256 +msgid "Maximum TTL for RRsets and messages" +msgstr "TTL Máximo para RRsets e mensagens" + +#: usr/local/www/services_unbound_advanced.php:259 +msgid "Configure a maximum Time to live for RRsets and messages in the cache. The default is 86400 seconds (1 day). When the internal TTL expires the cache item is expired. This can be configured to force the resolver to query for data more often and not trust (very large) TTL values." +msgstr "Configura um Time To Live máximo para RRsets e mensagens em cache. O padrão é 86400 segundos (1 dia). Quando o TTL interno expira, o item de cache é expirado. Isto pode ser configurado para forçar o resolver a consultar dados mais frequentemente e não confiar em valores TTL (muito grandes)." + +#: usr/local/www/services_unbound_advanced.php:263 +msgid "Minimum TTL for RRsets and messages" +msgstr "TTL Mínimo para RRsets e mensagens" + +#: usr/local/www/services_unbound_advanced.php:266 +msgid "Configure a minimum Time to live for RRsets and messages in the cache. The default is 0 seconds. If the minimum value kicks in, the data is cached for longer than the domain owner intended, and thus less queries are made to look up the data. The 0 value ensures the data in the cache is as the domain owner intended. High values can lead to trouble as the data in the cache might not match up with the actual data anymore." +msgstr "Configura um TTL mínimo para RRsets e mensagens no cache. O padrão é 0 segundos. Se o valor mínimo entra em ação, os dados são cacheados por mais tempo que o dono do domínio pretendia e, assim, menos consultas são feitas para buscar dados. O valor 0 garante que os dados em cache está como o dono do domínio pretendia. Valores altos podem levar a problemas já que os dados no cache podem nao mais corresponder com os dados reais." + +#: usr/local/www/services_unbound_advanced.php:270 +msgid "TTL for Host cache entries" +msgstr "TTL para entradas de Hosts no cache" + +#: usr/local/www/services_unbound_advanced.php:279 +msgid "Time to live for entries in the host cache. The host cache contains roundtrip timing and EDNS support information. The default is 15 minutes." +msgstr "Tempo de vida para entradas no cache de host. O cache de host contém o tempo de viagem e informação de suporte EDNS. O padrão é 15 minutos." + +#: usr/local/www/services_unbound_advanced.php:283 +msgid "TTL for lame delegation" +msgstr "TTL para lame delegation" + +#: usr/local/www/services_unbound_advanced.php:292 +msgid "Time to live for when a delegation is considered to be lame. The default is 15 minutes." +msgstr "Tempo de vida para quando a delegação for considerada imperfeita. O padrão é 15 minutos." + +#: usr/local/www/services_unbound_advanced.php:296 +msgid "Number of Hosts to cache" +msgstr "Número de hosts no cache" + +#: usr/local/www/services_unbound_advanced.php:305 +msgid "Number of hosts for which information is cached. The default is 10,000." +msgstr "Número de hosts para os quais as informacões são cacheadas. O padrão é 10.000." + +#: usr/local/www/services_unbound_advanced.php:309 +msgid "Unwanted Reply Threshold" +msgstr "Limite de respostas indesejadas" + +#: usr/local/www/services_unbound_advanced.php:319 +msgid "If enabled, a total number of unwanted replies is kept track of in every thread. When it reaches the threshold, a defensive action is taken and a warning is printed to the log file. This defensive action is to clear the RRSet and message caches, hopefully flushing away any poison. The default is disabled, but if enabled a a value of 10 million is suggested." +msgstr "Se habilitado, um número total de respostas indesejadas são rastreadas em toda thread. Quando o limite é alcançado, uma ação defensiva é tomada en um aviso é impresso no arquivo de log. Esta ação defensiva é para limpar os caches de mensagem e RRset, esperando limpar qualquer envenenamento." + +#: usr/local/www/services_unbound_advanced.php:323 +msgid "Log level verbosity" +msgstr "Log level verbosity" + +#: usr/local/www/services_unbound_advanced.php:333 +msgid "Select the log verbosity." +msgstr "Select the log verbosity." + +# 92% +#: usr/local/www/system_advanced_firewall.php:80 +#: usr/local/www/system_advanced_firewall.php:91 +#: usr/local/www/system_advanced_firewall.php:96 +msgid "The Firewall Maximum Tables value must be an integer." +msgstr "O valor de Máximo de Tabelas de Firewall deve ser um inteiro." + +# 82% +#: usr/local/www/system_advanced_firewall.php:326 +#: usr/local/www/system_advanced_firewall.php:370 +#: usr/local/www/system_advanced_firewall.php:371 +#: usr/local/www/system_advanced_firewall.php:382 +msgid "Firewall Maximum Tables" +msgstr "Máximo de Tabelas de Firewall" + +#: usr/local/www/system_advanced_firewall.php:330 +#: usr/local/www/system_advanced_firewall.php:374 +#: usr/local/www/system_advanced_firewall.php:375 +#: usr/local/www/system_advanced_firewall.php:386 +msgid "Maximum number of tables for systems such as aliases, sshlockout, snort, etc, combined." +msgstr "Número máximo de tables para sistemas como aliases, sshlockout, snort, etc, combinados." + +#: usr/local/www/system_advanced_firewall.php:331 +#: usr/local/www/system_advanced_firewall.php:375 +#: usr/local/www/system_advanced_firewall.php:376 +#: usr/local/www/system_advanced_firewall.php:387 +msgid "This is the actual number of tables, not the number of entries inside the tables (see below)" +msgstr "Este é o número real de tabelas, não o número de entradas dentro das tabelas (veja abaixo)" + +#: usr/local/www/system_advanced_firewall.php:393 +#: usr/local/www/system_advanced_firewall.php:437 +#: usr/local/www/system_advanced_firewall.php:438 +#: usr/local/www/system_advanced_firewall.php:449 +msgid "Disable Negate rule on policy routing rules" +msgstr "Desabilitar regra de negação nas regras de política de roteamento" + +#: usr/local/www/system_advanced_firewall.php:395 +#: usr/local/www/system_advanced_firewall.php:439 +#: usr/local/www/system_advanced_firewall.php:440 +#: usr/local/www/system_advanced_firewall.php:451 +msgid "With Multi-WAN you generally want to ensure traffic reaches directly connected networks and VPN networks when using policy routing. You can disable this for special purposes but it requires manually creating rules for these networks" +msgstr "Com Multi-WAN você geralmente quer garantir que o tráfego chegue as redes conectadas e redes VPN quando usando política de roteamento. Você pode desabilitar isto para propósitos especiais, mas isto requeter criar regras manualmente para estas redes" + +#: usr/local/www/system_advanced_firewall.php:407 +#: usr/local/www/system_advanced_firewall.php:469 +#: usr/local/www/system_advanced_firewall.php:470 +#: usr/local/www/system_advanced_firewall.php:491 +msgid "NAT Reflection mode for port forwards" +msgstr "Modo NAT Reflection para redirecionamento de portas" + +#: usr/local/www/system_advanced_firewall.php:411 +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_nat_edit.php:788 +#: usr/local/www/system_advanced_firewall.php:473 +#: usr/local/www/firewall_nat_edit.php:800 +#: usr/local/www/system_advanced_firewall.php:474 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/system_advanced_firewall.php:495 +msgid "Enable (NAT + Proxy)" +msgstr "Habilitar (NAT + Proxy)" + +#: usr/local/www/system_advanced_firewall.php:412 +#: usr/local/www/firewall_nat_edit.php:795 +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:789 +#: usr/local/www/system_advanced_firewall.php:474 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/system_advanced_firewall.php:475 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/system_advanced_firewall.php:496 +msgid "Enable (Pure NAT)" +msgstr "Habilitar (NAT Puro)" + +#: usr/local/www/system_advanced_firewall.php:415 +#: usr/local/www/system_advanced_firewall.php:477 +#: usr/local/www/system_advanced_firewall.php:478 +#: usr/local/www/system_advanced_firewall.php:499 +msgid "When enabled, this automatically creates additional NAT redirect rules for access to port forwards on your external IP addresses from within your internal networks." +msgstr "Quando habilitado, isto automaticamente cria regras NAT de redirecionamento adicionais para acessar redirecionamento de portas no seu endereço IP externo de dentro de sua rede interna." + +#: usr/local/www/system_advanced_firewall.php:417 +#: usr/local/www/system_advanced_firewall.php:479 +#: usr/local/www/system_advanced_firewall.php:480 +#: usr/local/www/system_advanced_firewall.php:501 +msgid "The NAT + proxy mode uses a helper program to send packets to the target of the port forward. It is useful in setups where the interface and/or gateway IP used for communication with the target cannot be accurately determined at the time the rules are loaded. Reflection rules are not created for ranges larger than 500 ports and will not be used for more than 1000 ports total between all port forwards. Only TCP and UDP protocols are supported." +msgstr "O modo NAT + Proxy usa um programa auxiliar para enviar pacotes para o alvo do redirecionamento de porta. Isto é útil em setups onde a interface e/ou IP do gateway usados para comunicação com o alvo não podem ser precisamente determinados no momento que as regras são carregadas. Regras de Reflexão não são criadas para ranges maiores que 500 portas e não serão usados por mais que o total de 1000 portas entre todos os redirecionamentos de portas. Apenas protocolos TCP e UDP são suportados." + +#: usr/local/www/system_advanced_firewall.php:419 +#: usr/local/www/system_advanced_firewall.php:481 +#: usr/local/www/system_advanced_firewall.php:482 +#: usr/local/www/system_advanced_firewall.php:503 +msgid "The pure NAT mode uses a set of NAT rules to direct packets to the target of the port forward. It has better scalability, but it must be possible to accurately determine the interface and gateway IP used for communication with the target at the time the rules are loaded. There are no inherent limits to the number of ports other than the limits of the protocols. All protocols available for port forwards are supported." +msgstr "O modo NAT puro usa um conjunto de regras NAT para direcionar pacotes para o alvo do redirecionamento de porta. Ele tem melhor escalabilidade, masdeve ser possível determinar com precisão a interface e IP do gateway usado para comunicação com o alvo quando as regras são carregadas. Não há limites inerente ao número de portas que não sejam os limites dos protocolos. Todos os disponíveis para redirecionamento de portas são suportados." + +#: usr/local/www/system_advanced_firewall.php:421 +#: usr/local/www/system_advanced_firewall.php:441 +#: usr/local/www/system_advanced_firewall.php:483 +#: usr/local/www/system_advanced_firewall.php:503 +#: usr/local/www/system_advanced_firewall.php:484 +#: usr/local/www/system_advanced_firewall.php:504 +#: usr/local/www/system_advanced_firewall.php:505 +#: usr/local/www/system_advanced_firewall.php:525 +msgid "Individual rules may be configured to override this system setting on a per-rule basis." +msgstr "Regras individuais devem ser configuradas para " + +#: usr/local/www/system_advanced_firewall.php:428 +#: usr/local/www/system_advanced_firewall.php:490 +#: usr/local/www/system_advanced_firewall.php:491 +#: usr/local/www/system_advanced_firewall.php:512 +msgid "Enter value for Reflection timeout in seconds." +msgstr "Entre com um valor de tempo de vida de Reflexão em segundos" + +#: usr/local/www/system_advanced_firewall.php:430 +#: usr/local/www/system_advanced_firewall.php:492 +#: usr/local/www/system_advanced_firewall.php:493 +#: usr/local/www/system_advanced_firewall.php:514 +msgid "Note: Only applies to Reflection on port forwards in NAT + proxy mode." +msgstr "Nota: Somente é aplicado a Reflexão em portas redirecionadas em NAT + modo proxy." + +# 91% +#: usr/local/www/system_advanced_firewall.php:434 +#: usr/local/www/system_advanced_firewall.php:496 +#: usr/local/www/system_advanced_firewall.php:497 +#: usr/local/www/system_advanced_firewall.php:518 +msgid "Enable NAT Reflection for 1:1 NAT" +msgstr "Habilitar NAT Reflection para 1:1 NAT" + +#: usr/local/www/system_advanced_firewall.php:437 +#: usr/local/www/system_advanced_firewall.php:499 +#: usr/local/www/system_advanced_firewall.php:500 +#: usr/local/www/system_advanced_firewall.php:521 +msgid "Enables the automatic creation of additional NAT redirect rules for access to 1:1 mappings of your external IP addresses from within your internal networks." +msgstr "Habilita a criação automatica de regras adcionais de redirecionamento do NAT para acesso a mapeamento 1:1 do seu endereço de IP externo de dentro de suas redes internas." + +#: usr/local/www/system_advanced_firewall.php:439 +#: usr/local/www/system_advanced_firewall.php:501 +#: usr/local/www/system_advanced_firewall.php:502 +#: usr/local/www/system_advanced_firewall.php:523 +msgid "Note: Reflection on 1:1 mappings is only for the inbound component of the 1:1 mappings. This functions the same as the pure NAT mode for port forwards. For more details, refer to the pure NAT mode description above." +msgstr "Nota: Reflexão em mapeamento 1:1 é somente para componentes de entrada de mapeamentos 1:1. Estas funções são as mesmas de um modo puro NAT de redirecionamento de porta. Para mais detalhes, veja a descrição acima sobre modo puro NAT." + +#: usr/local/www/system_advanced_firewall.php:445 +#: usr/local/www/system_advanced_firewall.php:507 +#: usr/local/www/system_advanced_firewall.php:508 +#: usr/local/www/system_advanced_firewall.php:529 +msgid "Enable automatic outbound NAT for Reflection" +msgstr "Habilita a saída de NAT automatica para Reflexão" + +#: usr/local/www/system_advanced_firewall.php:450 +#: usr/local/www/system_advanced_firewall.php:512 +#: usr/local/www/system_advanced_firewall.php:513 +#: usr/local/www/system_advanced_firewall.php:534 +msgid "Required for full functionality of the pure NAT mode of NAT Reflection for port forwards or NAT Reflection for 1:1 NAT." +msgstr "Requerido para funcionalidade completa do modo puro NAT de uma Reflexão de NAT para portas redirecionadas ou Reflexão de NAT para NAT 1:1." + +#: usr/local/www/system_advanced_firewall.php:452 +#: usr/local/www/system_advanced_firewall.php:514 +#: usr/local/www/system_advanced_firewall.php:515 +#: usr/local/www/system_advanced_firewall.php:536 +msgid "Note: This only works for assigned interfaces. Other interfaces require manually creating the outbound NAT rules that direct the reply packets back through the router." +msgstr "Nota: Isto somente trabalha para interfaces atribuidas. Outras interfaces requerem a criação manual de regras de NAT de saída para regras que direcionam a respostas de pacotes através do roteador." + +# 91% +#: usr/local/www/diag_logs_ntpd.php:85 usr/local/www/diag_logs_ntpd.php:86 +#, php-format +msgid "Last %s NTP log entries" +msgstr "Últimas %s entradas de log NTP" + +#: usr/local/www/firewall_aliases_edit.php:468 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/firewall_aliases_edit.php:492 +#: usr/local/www/firewall_aliases_edit.php:491 +msgid "Enter as many hosts as you would like. Hosts must be specified by their IP address or fully qualified domain name (FQDN). FQDN hostnames are periodically re-resolved and updated. If multiple IPs are returned by a DNS query, all are used." +msgstr "Entre com tantos hosts como você gostaria. Hosts deve ser especificado pelo seu endereço IP ou nome de domínio totalmente qualificado FQDN. Nomes de host FQDN são periodicamente re-resolvido e atualizado. Se vários IPs são retornados por uma consulta DNS, todos são usados." + +# 77% +#: usr/local/www/firewall_aliases_edit.php:590 +#: usr/local/www/firewall_aliases_edit.php:593 +#: usr/local/www/firewall_aliases_edit.php:624 +#: usr/local/www/firewall_aliases_edit.php:623 +msgid "The name of the alias may only consist of the characters \"a-z, A-Z, 0-9 and _\"." +msgstr "O nome do alias somente deve consistir dos caracteres de \"a-z, A-Z, 0-9 e _\"" + +# 93% +#: usr/local/www/system_advanced_admin.php:470 +#: usr/local/www/system_advanced_admin.php:507 +msgid "Disable password login for Secure Shell (RSA/DSA key only)" +msgstr "Desabilitar login com senha para Secure Shell (somente chave RSA/DSA)" + +#: usr/local/www/pkg_mgr_installed.php:113 usr/local/www/diag_confbak.php:154 +#: usr/local/www/pkg_mgr_installed.php:115 +msgid "Version" +msgstr "Versão" + +#: usr/local/www/pkg_mgr_installed.php:197 +#: usr/local/www/pkg_mgr_installed.php:199 +msgid "Click on " +msgstr "Clique em" + +# 85% +#: usr/local/www/pkg_mgr_installed.php:205 +#: usr/local/www/pkg_mgr_installed.php:208 +#: usr/local/www/pkg_mgr_installed.php:210 +msgid "Remove " +msgstr "Remove" + +# 90% +#: usr/local/www/pkg_mgr_installed.php:209 +#: usr/local/www/pkg_mgr_installed.php:212 +#: usr/local/www/pkg_mgr_installed.php:215 +#: usr/local/www/pkg_mgr_installed.php:214 +#: usr/local/www/pkg_mgr_installed.php:217 +msgid "Reinstall " +msgstr "Reinstalar" + +#: usr/local/www/system_advanced_notifications.php:262 +#: usr/local/www/system_advanced_notifications.php:309 +msgid "System Sounds" +msgstr "Sons do Sistema" + +#: usr/local/www/system_advanced_notifications.php:265 +#: usr/local/www/system_advanced_notifications.php:312 +msgid "Startup/Shutdown Sound" +msgstr "Som de Inicio/Desligamento" + +#: usr/local/www/system_advanced_notifications.php:268 +#: usr/local/www/system_advanced_notifications.php:315 +msgid "Disable the startup/shutdown beep" +msgstr "Desabilita o beep de inicialização/desligamento" + +#: usr/local/www/system_advanced_notifications.php:270 +#: usr/local/www/system_advanced_notifications.php:317 +msgid "When this is checked, startup and shutdown sounds will no longer play." +msgstr "Quando isto esta marcado, os sons de inicialização e desligamento não vão mais tocar." + +#: usr/local/www/status_rrd_graph.php:146 +#: usr/local/www/status_rrd_graph.php:151 +msgid "Invalid start date/time:" +msgstr "Data/hora inicial inválida:" + +#: usr/local/www/status_rrd_graph.php:159 +#: usr/local/www/status_rrd_graph.php:164 +msgid "Invalid end date/time:" +msgstr "Data/hora final inválida:" + +#: usr/local/www/status_rrd_graph.php:509 +#: usr/local/www/status_rrd_graph.php:544 +msgid "Enter date and/or time. Current timezone:" +msgstr "Entre com data e/ou hora. Fuso horario atual:" + +#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:125 +#: usr/local/www/status_ntpd.php:131 +msgid "Ref ID" +msgstr "ID de Ref." + +#: usr/local/www/status_ntpd.php:110 usr/local/www/status_ntpd.php:126 +#: usr/local/www/status_ntpd.php:132 +msgid "Stratum" +msgstr "Stratum" + +#: usr/local/www/status_ntpd.php:112 usr/local/www/status_ntpd.php:128 +#: usr/local/www/status_ntpd.php:134 +msgid "When" +msgstr "Quando" + +# 75% +#: usr/local/www/status_ntpd.php:113 usr/local/www/status_ntpd.php:129 +#: usr/local/www/status_ntpd.php:135 +msgid "Poll" +msgstr "Votação" + +#: usr/local/www/status_ntpd.php:114 usr/local/www/status_ntpd.php:130 +#: usr/local/www/status_ntpd.php:136 +msgid "Reach" +msgstr "Alcance" + +#: usr/local/www/status_ntpd.php:116 usr/local/www/status_ntpd.php:132 +#: usr/local/www/status_ntpd.php:138 +msgid "Offset" +msgstr "Compensação" + +#: usr/local/www/status_ntpd.php:117 usr/local/www/status_ntpd.php:133 +#: usr/local/www/status_ntpd.php:139 +msgid "Jitter" +msgstr "Jitter" + +#: usr/local/www/firewall_rules.php:790 usr/local/www/firewall_rules.php:783 +#: usr/local/www/firewall_rules.php:784 +msgid "No floating rules are currently defined." +msgstr "Nenhuma regra flutuante foi definida." + +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:316 +#: usr/local/www/system_advanced_misc.php:320 +#: usr/local/www/system_advanced_misc.php:367 +#: usr/local/www/system_advanced_misc.php:373 +msgid "Successive connections will be redirected to the servers in a round-robin manner with connections from the same source being sent to the same web server. This 'sticky connection' will exist as long as there are states that refer to this connection. Once the states expire, so will the sticky connection. Further connections from that host will be redirected to the next web server in the round robin. Changing this option will restart the Load Balancing service." +msgstr "Conexões sucessivas serão redirecionadas para os servidores de um modo round-robin com conexões a partir da mesma fonte que está sendo enviado para o mesmo servidor web. Esta \"sticky connection\" vai existir enquanto há estados que se referem a esta conexão. Uma vez que os estados expirar, assim que a conexão pegajosa. Outras conexões do que o anfitrião será redirecionado para o próximo servidor web no round robin. Mudando esta opção irá reiniciar o serviço de balanceamento de carga." + +#: usr/local/www/system_advanced_misc.php:308 +#: usr/local/www/system_advanced_misc.php:327 +#: usr/local/www/system_advanced_misc.php:331 +#: usr/local/www/system_advanced_misc.php:378 +#: usr/local/www/system_advanced_misc.php:384 +msgid "Set the source tracking timeout for sticky connections. By default this is 0, so source tracking is removed as soon as the state expires. Setting this timeout higher will cause the source/destination relationship to persist for longer periods of time." +msgstr "Defina o tempo limite de rastreamento de origem para conexões pegajosos. Por padrão é 0, portanto, rastreamento de origem é removida assim que o estado expira. Definir o tempo limite superior fará com que o relacionamento origem/destino de persistir por longos períodos de tempo." + +#: usr/local/www/system_advanced_misc.php:336 +#: usr/local/www/system_advanced_misc.php:355 +#: usr/local/www/system_advanced_misc.php:359 +#: usr/local/www/system_advanced_misc.php:367 +#: usr/local/www/system_advanced_misc.php:406 +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:412 +#: usr/local/www/system_advanced_misc.php:420 +msgid "Hiadaptive" +msgstr "Hiadaptive" + +#: usr/local/www/system_advanced_misc.php:337 +#: usr/local/www/system_advanced_misc.php:356 +#: usr/local/www/system_advanced_misc.php:360 +#: usr/local/www/system_advanced_misc.php:368 +#: usr/local/www/system_advanced_misc.php:407 +#: usr/local/www/system_advanced_misc.php:415 +#: usr/local/www/system_advanced_misc.php:413 +#: usr/local/www/system_advanced_misc.php:421 +msgid "Adaptive" +msgstr "Adaptável" + +#: usr/local/www/system_advanced_misc.php:338 +#: usr/local/www/system_advanced_misc.php:357 +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:369 +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:416 +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:422 +msgid "Minimum" +msgstr "Mínimo" + +#: usr/local/www/system_advanced_misc.php:339 +#: usr/local/www/system_advanced_misc.php:358 +#: usr/local/www/system_advanced_misc.php:362 +#: usr/local/www/system_advanced_misc.php:370 +#: usr/local/www/system_advanced_misc.php:409 +#: usr/local/www/system_advanced_misc.php:417 +#: usr/local/www/system_advanced_misc.php:415 +#: usr/local/www/system_advanced_misc.php:423 +msgid "Maximum" +msgstr "Máximo" + +#: usr/local/www/system_advanced_misc.php:342 +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:373 +#: usr/local/www/system_advanced_misc.php:420 +msgid "The powerd utility monitors the system state and sets various power control options accordingly. It offers four modes (maximum, minimum, adaptive and hiadaptive) that can be individually selected while on AC power or batteries. The modes maximum, minimum, adaptive and hiadaptive may be abbreviated max, min, adp, hadp. Maximum mode chooses the highest performance values. Minimum mode selects the lowest performance values to get the most power savings. Adaptive mode attempts to strike a balance by degrading performance when the system appears idle and increasing it when the system is busy. It offers a good balance between a small performance loss for greatly increased power savings. Hiadaptive mode is alike adaptive mode, but tuned for systems where performance and interactivity are more importantthan power consumption. It rises frequency faster, drops slower andkeeps twice lower CPU load." +msgstr "O utilitário powerd monitora o estado do sistema e define várias opções de controle de energia em conformidade. Ele oferece quatro modos (máximo, mínimo, adaptativas e hiadaptive) que podem ser selecionados individualmente durante a alimentação por AC ou baterias. Os modos de máximo, mínimo, adaptativos e hiadaptive pode ser abreviado max, min, adp, hadp. Modo máxima escolhe os mais altos valores de desempenho. Modo mínima seleciona os valores mais baixos de desempenho para obter o máximo de poupança de energia. O modo adaptativo tenta encontrar um equilíbrio, degradando o desempenho quando o sistema parece ocioso e aumentando-a quando o sistema está ocupado. Ele oferece um bom equilíbrio entre uma pequena perda de desempenho para um grande aumento de economia de energia. Hiadaptive modo é o modo adaptativo iguais, mas atento para sistemas onde o desempenho ea interatividade são o consumo de energia mais importantthan. Levanta-se freqüência mais rápido, cai andkeeps mais lentas de carga duas vezes menor CPU." + +#: usr/local/www/firewall_shaper_vinterface.php:204 +#: usr/local/www/firewall_shaper_vinterface.php:228 +#: usr/local/www/firewall_shaper_vinterface.php:205 +#: usr/local/www/firewall_shaper_vinterface.php:230 +msgid "You cannot name a child queue with the same name as a parent limiter" +msgstr "Você não pode nomear uma fila filho com o mesmo nome do limitador parente." + +#: usr/local/www/diag_routes.php:72 usr/local/www/diag_routes.php:73 +msgid "By enabling name resolution, the query should take a bit longer. You can stop it at any time by clicking the Stop button in your browser." +msgstr "Habilitando a resolução de nome, a requisição deve demorar um pouco mais. Você pode parar isso a qualquer momento clicando no botão \"Parar\" no seu navegador." + +#: usr/local/www/status_dhcpv6_leases.php:481 +#: usr/local/www/status_dhcpv6_leases.php:482 +#: usr/local/www/status_dhcpv6_leases.php:485 +msgid "IPv6 Prefix" +msgstr "Prefixo IPv6" + +#: usr/local/www/services_captiveportal.php:465 +#: usr/local/www/services_captiveportal.php:463 +#: usr/local/www/services_captiveportal.php:481 +msgid "This setting limits the number of concurrent connections to the captive portal HTTP(S) server. This does not set how many users can be logged in to the captive portal, but rather how many users can load the portal page or authenticate at the same time! Possible setting allowed is: minimum 4 connections per client IP address, with a total maximum of 100 connections." +msgstr "Esta configuração limita o número de conexões simultâneas ao HTTP portal cativo (S) do servidor. Isso não define quantos usuários podem ser registradas no portal cativo, mas sim quantos usuários podem carregar a página do portal ou autenticar ao mesmo tempo! Regulação possível permitido é: 4 conexões mínimos por endereço IP do cliente, com um total máximo de 100 conexões." + +#: usr/local/www/services_captiveportal.php:602 +#: usr/local/www/services_captiveportal.php:600 +#: usr/local/www/services_captiveportal.php:601 +#: usr/local/www/services_captiveportal.php:617 +msgid "Radius Protocol" +msgstr "Protocolo Radius" + +#: usr/local/www/services_captiveportal.php:611 +#: usr/local/www/services_captiveportal.php:609 +#: usr/local/www/services_captiveportal.php:610 +#: usr/local/www/services_captiveportal.php:626 +msgid "CHAP_MD5" +msgstr "CHAP_MD5" + +#: usr/local/www/services_captiveportal.php:615 +#: usr/local/www/services_captiveportal.php:613 +#: usr/local/www/services_captiveportal.php:614 +#: usr/local/www/services_captiveportal.php:630 +msgid "MSCHAPv1" +msgstr "MSCHAPv1" + +#: usr/local/www/services_captiveportal.php:619 +#: usr/local/www/services_captiveportal.php:617 +#: usr/local/www/services_captiveportal.php:618 +#: usr/local/www/services_captiveportal.php:634 +msgid "MSCHAPv2" +msgstr "MSCHAPv2" + +#: usr/local/www/system_gateways_edit.php:389 +#: usr/local/www/system_gateways_edit.php:495 +#: usr/local/www/system_gateways_edit.php:497 +#: usr/local/www/system_gateways_edit.php:527 +msgid "Choose the Internet Protocol this gateway uses." +msgstr "Escolha o protocolo de Internet que o gateway usa." + +#: usr/local/www/system_gateways_edit.php:490 +msgid "This defines how often that an icmp probe will be sent in seconds. Default is 1." +msgstr "Isto define quantas vezes a consulta icmp vai ser enviada em segundos. O padrão é 1." + +#: usr/local/www/system_gateways_edit.php:491 +#: usr/local/www/system_gateways_edit.php:597 +#: usr/local/www/system_gateways_edit.php:601 +#: usr/local/www/system_gateways_edit.php:603 +#: usr/local/www/system_gateways_edit.php:633 +msgid "NOTE: The quality graph is averaged over seconds, not intervals, so as the frequency probe is increased the accuracy of the quality graph is decreased." +msgstr "NOTA: A gráfico de qualidade é uma média sobre segundos, não intervalos. assim como a consulta de frequencia é aumentada o gráfico de qualidade é diminuida." + +#: usr/local/www/system_gateways_edit.php:500 +msgid "This defines the number of bad probes before the alarm will fire. Default is 10." +msgstr "Isto define o número de consultas ruins para o alarme ser acionado. O padrão é 10." + +#: usr/local/www/system_gateways_edit.php:505 +msgid "NOTE: The total time before a gateway is down is the product of the Frequency Probe and the Down fields. By default this is 1*10=10 seconds." +msgstr "NOTA: O total de tempo antes de um gateway cair é o produto da frequencia de consultas e de quedas. Por padrão isso é 1*10=10 segundos." + +#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108 +#: usr/local/www/status_gateways.php:134 +#: usr/local/www/widgets/widgets/gateways.widget.php:73 +#: usr/local/www/widgets/widgets/gateways.widget.php:81 +#: usr/local/www/status_gateways.php:101 usr/local/www/status_gateways.php:109 +#: usr/local/www/status_gateways.php:135 +#: usr/local/www/widgets/widgets/gateways.widget.php:94 +#: usr/local/www/widgets/widgets/gateways.widget.php:103 +#: usr/local/www/widgets/widgets/gateways.widget.php:95 +#: usr/local/www/widgets/widgets/gateways.widget.php:104 +msgid "Pending" +msgstr "Pendente" + +# 76% +#: usr/local/www/status_gateways.php:140 usr/local/www/status_gateways.php:141 +msgid "Last check:" +msgstr "Última checagem:" + +# 95% +#: usr/local/www/diag_dump_states.php:145 +#: usr/local/www/diag_dump_states.php:144 +msgid "Current state count" +msgstr "Contagem de estado atual:" + +#: usr/local/www/diag_dump_states.php:147 +#: usr/local/www/diag_dump_states.php:146 +msgid "Matching filter" +msgstr "Correspondência de filtro" + +#: usr/local/www/diag_dump_states.php:155 +#: usr/local/www/diag_dump_states.php:154 +#: usr/local/www/diag_dump_states.php:143 +msgid "Kill" +msgstr "Matar" + +#: usr/local/www/services_dyndns.php:184 usr/local/www/services_dyndns.php:180 +#: usr/local/www/services_dyndns.php:191 +msgid "You can force an update for an IP address on the edit page for that service." +msgstr "Você pode forçar uma atualização do endereço de IP editando na página para este serviço." + +#: usr/local/www/vpn_openvpn_server.php:299 +#: usr/local/www/vpn_openvpn_server.php:300 +#: usr/local/www/vpn_openvpn_server.php:321 +msgid "Using a tunnel network and server bridge settings together is not allowed." +msgstr "Usando uma rede de túnel e as configurações do servidor bridge juntos não é permitido." + +#: usr/local/www/vpn_openvpn_server.php:302 +#: usr/local/www/vpn_openvpn_server.php:303 +#: usr/local/www/vpn_openvpn_server.php:324 +msgid "Server Bridge DHCP Start and End must both be empty, or defined." +msgstr "Inicio e fim do servidor DHCP bridge devem estar vazios ou definidos." + +#: usr/local/www/vpn_openvpn_server.php:304 +#: usr/local/www/vpn_openvpn_server.php:305 +#: usr/local/www/vpn_openvpn_server.php:326 +msgid "Server Bridge DHCP Start must be an IPv4 address." +msgstr "Inicio do servidor bridge DHCP deve ser um endereço IPv4." + +#: usr/local/www/vpn_openvpn_server.php:306 +#: usr/local/www/vpn_openvpn_server.php:307 +#: usr/local/www/vpn_openvpn_server.php:328 +msgid "Server Bridge DHCP End must be an IPv4 address." +msgstr "Final do servidor bridge DHCP deve ser um endereço IPv4." + +#: usr/local/www/vpn_openvpn_server.php:308 +#: usr/local/www/vpn_openvpn_server.php:309 +#: usr/local/www/vpn_openvpn_server.php:330 +msgid "The Server Bridge DHCP range is invalid (start higher than end)." +msgstr "A faixa do Servidor Bridge DHCP é inválida (inicio é maior que o final)" + +#: usr/local/www/vpn_openvpn_server.php:1084 +#: usr/local/www/vpn_openvpn_server.php:1112 +#: usr/local/www/vpn_openvpn_server.php:1139 +msgid "Bridge DHCP" +msgstr "Bridge DHCP" + +#: usr/local/www/vpn_openvpn_server.php:1094 +#: usr/local/www/vpn_openvpn_server.php:1122 +#: usr/local/www/vpn_openvpn_server.php:1149 +msgid "Allow clients on the bridge to obtain DHCP." +msgstr "Permite ao clientes da bridge obterem DHCP." + +#: usr/local/www/vpn_openvpn_server.php:1102 +#: usr/local/www/vpn_openvpn_server.php:1130 +#: usr/local/www/vpn_openvpn_server.php:1157 +msgid "Bridge Interface" +msgstr "Interface Bridge" + +#: usr/local/www/vpn_openvpn_server.php:1124 +msgid "The interface to which this tap instance will be, bridged. This is not done automatically. You must assign this interface and create the bridge separately. This setting controls which existing IP address and subnet mask are used by OpenVPN for the bridge. Setting this to 'none' will cause the Server Bridge DHCP settings below to be ignored." +msgstr "A interface para que esta instância torneira será, em ponte. Isto não é feito automaticamente. Você deve atribuir essa interface e criar a ponte separadamente. Esta definição controla qual o endereço IP existente e máscara de subrede são usados ¿¿por OpenVPN para a ponte. A definição como 'none' fará com que as configurações do servidor DHCP Ponte abaixo para ser ignorado." + +#: usr/local/www/vpn_openvpn_server.php:1133 +#: usr/local/www/vpn_openvpn_server.php:1161 +#: usr/local/www/vpn_openvpn_server.php:1188 +msgid "Server Bridge DHCP Start" +msgstr "Servidor Bridge DHCP Inicial" + +#: usr/local/www/vpn_openvpn_server.php:1137 +msgid "When using tap mode as multi-point server, you may optionally supply a DHCP range to use on the interface to which this tap instance is bridged. If these settings are left blank, DHCP will be passed through to the LAN, and the interface setting above will be ignored." +msgstr "Ao usar o modo tap como servidor multi-ponto, você pode, opcionalmente, fornecer uma gama DHCP para usar na interface para que esta instância torneira está superado. Se essas configurações são deixadas em branco, DHCP será repassado para a LAN, ea interface de configuração acima serão ignorados." + +#: usr/local/www/vpn_openvpn_server.php:1146 +#: usr/local/www/vpn_openvpn_server.php:1174 +#: usr/local/www/vpn_openvpn_server.php:1201 +msgid "Server Bridge DHCP End" +msgstr "Servidor Bridge DHCP Final" + +#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcpv6.php:216 +#: usr/local/www/services_router_advertisements.php:159 +#: usr/local/www/services_dhcp.php:285 usr/local/www/services_dhcpv6.php:201 +#: usr/local/www/services_dhcp_edit.php:230 +#: usr/local/www/services_dhcp.php:266 usr/local/www/services_dhcpv6.php:195 +#: usr/local/www/services_router_advertisements.php:154 +#: usr/local/www/services_dhcp.php:286 usr/local/www/services_dhcp.php:287 +msgid "A valid domain search list must be specified." +msgstr "Uma lista de pesquisa de domínio válido deve ser especificado." + +#: usr/local/www/services_dhcp.php:685 usr/local/www/services_dhcp.php:861 +#: usr/local/www/services_dhcp_edit.php:427 +#: usr/local/www/services_dhcp.php:875 usr/local/www/services_dhcp.php:895 +msgid "The DHCP server can optionally provide a domain search list. Use the semicolon character as seperator " +msgstr "O servidor DHCP pode, opcionalmente, fornecer uma lista de pesquisa de domínios. Use o caractere ponto e vírgula como separador" + +#: usr/local/www/services_dhcp.php:735 usr/local/www/services_dhcpv6.php:716 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:647 +#: usr/local/www/services_dhcp.php:930 usr/local/www/services_dhcpv6.php:664 +#: usr/local/www/services_dhcp.php:950 usr/local/www/services_dhcp.php:962 +msgid "Time format change" +msgstr "Alteração de formato de hora" + +#: usr/local/www/services_dhcp.php:744 usr/local/www/services_dhcp.php:925 +#: usr/local/www/services_dhcp.php:939 usr/local/www/services_dhcp.php:959 +#: usr/local/www/services_dhcp.php:971 +msgid "Change DHCP display lease time from UTC to local time." +msgstr "Alterar tempo de concessão DHCP exibição de UTC para a hora local." + +#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:932 +msgid "" +"By default DHCP leases are displayed in UTC time. By checking this \n" +"\t\t\t\t\t\tbox DHCP lease time will be displayed in local time and set to time zone selected. This will be used for all DHCP interfaces lease time." +msgstr "" +"Por DHCP padrão arrendamentos são exibidas em tempo UTC. Ao marcar esta \n" +"\t\t\t\t\t\tcaixa tempo de concessão DHCP será exibida no horário local e definir a zona de tempo selecionado. Isso será usado para todos os tempos interfaces de DHCP locação." + +#: usr/local/www/load_balancer_virtual_server_edit.php:92 +msgid "The port must be an integer between 1 and 65535, a port alias, or left blank." +msgstr "A porta deve ser um inteiro entre 1 e 65535, um alias de porta ou deve estar em branco." + +#: usr/local/www/load_balancer_virtual_server_edit.php:95 +#, php-format +msgid "%s is not a valid IP address, IPv4 subnet, or alias." +msgstr "%s não é um endereço de IP válido, subrede IPv4 ou alias." + +#: usr/local/www/load_balancer_virtual_server_edit.php:97 +#, php-format +msgid "%s is a subnet containing more than 64 IP addresses." +msgstr "%s é uma subrede contendo mais de 64 endereços IP" + +#: usr/local/www/load_balancer_virtual_server_edit.php:173 +#: usr/local/www/load_balancer_virtual_server_edit.php:171 +msgid "You may also specify a host alias listed in Firewall -> Aliases here." +msgstr "Você deve também especificar um alias de host listado no Firewall -> Aliases aqui." + +#: usr/local/www/load_balancer_virtual_server_edit.php:187 +#: usr/local/www/load_balancer_virtual_server_edit.php:185 +msgid "If left blank, listening ports from the pool will be used." +msgstr "Se deixar em branco, as portas escutadas do pool serão usadas." + +#: usr/local/www/load_balancer_virtual_server_edit.php:188 +#: usr/local/www/load_balancer_pool_edit.php:216 +#: usr/local/www/load_balancer_virtual_server_edit.php:186 +#: usr/local/www/load_balancer_pool_edit.php:214 +msgid "You may also specify a port alias listed in Firewall -> Aliases here." +msgstr "Você deve especificar um alias de porta listada no Firewall -> Aliases aqui." + +#: usr/local/www/system_hasync.php:96 usr/local/www/system_hasync.php:97 +#: usr/local/www/system_hasync.php:98 +msgid "High Availability Sync" +msgstr "Sincronização de Alta Disponibilidade" + +# 76% +#: usr/local/www/services_ntpd.php:86 usr/local/www/services_ntpd.php:92 +msgid "NTP Server Configuration" +msgstr "Configuração do servidor NTP" + +#: usr/local/www/interfaces_bridge_edit.php:391 +#: usr/local/www/interfaces_bridge_edit.php:392 +#: usr/local/www/interfaces_bridge_edit.php:393 +#: usr/local/www/interfaces_bridge_edit.php:396 +msgid "Set the Spanning Tree priority of interface to value. The default is 128. The minimum is 0 and the maximum is 240. Increments of 16." +msgstr "Defina a prioridade Spanning Tree de interface para valor. O padrão é 128. O mínimo é 0 e o máximo é 240. Incrementos de 16." + +#: usr/local/www/diag_packet_capture.php:172 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:235 +msgid "Select the protocol to capture, or Any." +msgstr "Selecione o protocolo para capturar, ou Qualquer." + +#: usr/local/www/diag_packet_capture.php:245 +#: usr/local/www/diag_packet_capture.php:292 +#: usr/local/www/diag_packet_capture.php:310 +msgid "View Capture" +msgstr "Visualizar Captura" + +#: usr/local/www/system_camanager.php:420 +#: usr/local/www/system_camanager.php:427 +msgid "Serial for next certificate" +msgstr "Serial para o próximo certificado" + +#: usr/local/www/system_camanager.php:423 +#: usr/local/www/system_camanager.php:430 +msgid "Enter a decimal number to be used as the serial number for the next certificate to be created using this CA." +msgstr "Digite um número decimal a ser usado como o número de série para o próximo certificado a ser criado usando essa CA." + +#: usr/local/www/vpn_ipsec_phase2.php:140 +#: usr/local/www/vpn_ipsec_phase2.php:141 +#: usr/local/www/vpn_ipsec_phase2.php:163 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +msgid "Invalid Local Network." +msgstr "Rede Local Inválida" + +#: usr/local/www/vpn_ipsec_phase2.php:140 +#: usr/local/www/vpn_ipsec_phase2.php:141 +#: usr/local/www/vpn_ipsec_phase2.php:163 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +msgid "has no subnet." +msgstr "não tem nenhuma sub-rede." + +#: usr/local/www/firewall_nat_edit.php:233 +#: usr/local/www/firewall_nat_edit.php:238 +#: usr/local/www/firewall_nat_edit.php:243 +#, php-format +msgid "A valid local port must be specified. It must be a port alias or integer between 1 and 65535." +msgstr "A porta local válido deve ser especificado. Ele deve ser um alias de porto ou inteiro entre 1 e 65535." + +# 94% +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_nat_edit.php:792 +#: usr/local/www/firewall_nat_edit.php:787 +#: usr/local/www/firewall_nat_edit.php:799 +#: usr/local/www/firewall_nat_edit.php:800 +msgid "Use system default" +msgstr "Use padrão do sistema" + +#: usr/local/www/interfaces.php:463 usr/local/www/interfaces.php:460 +#: usr/local/www/interfaces.php:448 usr/local/www/interfaces.php:453 +#: usr/local/www/interfaces.php:449 usr/local/www/interfaces.php:452 +msgid "This interface is referenced by IPv4 VIPs. Please delete those before setting the interface to 'none' configuration." +msgstr "Essa interface é referenciada por VIPs IPv4. Por favor, apague aqueles antes de definir a interface para configuração de nenhum." + +#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:513 +#: usr/local/www/interfaces.php:501 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:502 usr/local/www/interfaces.php:505 +msgid "This interface is referenced by IPv6 VIPs. Please delete those before setting the interface to 'none' configuration." +msgstr "Essa interface é referenciada por VIPs IPv6. Por favor, apague aqueles antes de definir a interface para configuração de nenhum." + +#: usr/local/www/interfaces.php:526 usr/local/www/interfaces.php:523 +#: usr/local/www/interfaces.php:511 +#, php-format +msgid "You can only have one interface configured as %s or 6to4." +msgstr "Você somente pode ter uma interface configurada como %s ou 6to4." + +#: usr/local/www/interfaces.php:536 usr/local/www/interfaces.php:533 +#: usr/local/www/interfaces.php:521 +#, php-format +msgid "You can only have one interface configured as %s or 6rd." +msgstr "Você somente pode ter uma interface configurada como %s ou 6rd." + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:546 +#: usr/local/www/interfaces.php:534 usr/local/www/interfaces.php:541 +#: usr/local/www/interfaces.php:537 usr/local/www/interfaces.php:540 +msgid "You must enter a valid hexadecimal number for the IPv6 prefix ID." +msgstr "Você deve digitar um número hexadecimal válidor para o prefixo IP do IPv6." + +#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:550 +#: usr/local/www/interfaces.php:538 usr/local/www/interfaces.php:545 +#: usr/local/www/interfaces.php:541 usr/local/www/interfaces.php:544 +msgid "You specified an IPv6 prefix ID that is out of range." +msgstr "Você especificou um prefixo ID IPv6 fora da faixa." + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1171 +msgid "SLAAC" +msgstr "SLAAC" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1171 +msgid "6rd Tunnel" +msgstr "Túnel 6rd" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1171 +msgid "6to4 Tunnel" +msgstr "Túnel 6to4" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163 +#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1171 +msgid "Track Interface" +msgstr "Caminho da Interface" + +#: usr/local/www/interfaces.php:1411 usr/local/www/interfaces.php:1399 +#: usr/local/www/interfaces.php:1412 usr/local/www/interfaces.php:1455 +#: usr/local/www/interfaces.php:1450 usr/local/www/interfaces.php:1463 +msgid "If you leave this field blank, the adapter's default MTU will be used. This is typically 1500 bytes but can vary in some circumstances." +msgstr "Se você deixar este campo em branco, o adaptadores de MTU padrão será usado. Este é tipicamente 1500 bytes, mas pode variar em algumas circunstâncias." + +#: usr/local/www/interfaces.php:1768 usr/local/www/interfaces.php:1756 +#: usr/local/www/interfaces.php:1774 usr/local/www/interfaces.php:1820 +#: usr/local/www/interfaces.php:1812 usr/local/www/interfaces.php:1848 +msgid "6RD Rapid Deployment" +msgstr "Desenvolvimento rápido 6RD" + +#: usr/local/www/interfaces.php:1771 usr/local/www/interfaces.php:1759 +#: usr/local/www/interfaces.php:1777 usr/local/www/interfaces.php:1823 +#: usr/local/www/interfaces.php:1815 usr/local/www/interfaces.php:1851 +msgid "6RD prefix" +msgstr "Prefixo 6RD" + +#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1763 +#: usr/local/www/interfaces.php:1781 usr/local/www/interfaces.php:1827 +#: usr/local/www/interfaces.php:1819 usr/local/www/interfaces.php:1855 +msgid "The value in this field is the 6RD IPv6 prefix assigned by your ISP. e.g. '2001:db8::/32'" +msgstr "O valor neste campo é o prefixo 6RD IPv6 atribuído pelo seu Provedor. por exemplo: '2001:db8::/32'" + +#: usr/local/www/interfaces.php:1779 usr/local/www/interfaces.php:1767 +#: usr/local/www/interfaces.php:1785 usr/local/www/interfaces.php:1831 +#: usr/local/www/interfaces.php:1823 usr/local/www/interfaces.php:1859 +msgid "6RD Border Relay" +msgstr "Borda de Relay 6RD" + +#: usr/local/www/interfaces.php:1783 usr/local/www/interfaces.php:1771 +#: usr/local/www/interfaces.php:1789 usr/local/www/interfaces.php:1835 +#: usr/local/www/interfaces.php:1827 usr/local/www/interfaces.php:1863 +msgid "The value in this field is 6RD IPv4 gateway address assigned by your ISP" +msgstr "O valor neste campo é um endereço de gateway 6RD IPv4 atribuido por seu Provedor." + +#: usr/local/www/interfaces.php:1787 usr/local/www/interfaces.php:1775 +#: usr/local/www/interfaces.php:1793 usr/local/www/interfaces.php:1839 +#: usr/local/www/interfaces.php:1831 usr/local/www/interfaces.php:1867 +msgid "6RD IPv4 Prefix length" +msgstr "Tamanho do Prefixo IPv4 6RD" + +#: usr/local/www/interfaces.php:1799 usr/local/www/interfaces.php:1787 +#: usr/local/www/interfaces.php:1805 usr/local/www/interfaces.php:1851 +#: usr/local/www/interfaces.php:1843 usr/local/www/interfaces.php:1879 +msgid "The value in this field is the 6RD IPv4 prefix length. Normally specified by the ISP. A value of 0 means we embed the entire IPv4 address in the 6RD prefix." +msgstr "" + +#: usr/local/www/interfaces.php:1809 usr/local/www/interfaces.php:1797 +#: usr/local/www/interfaces.php:1818 usr/local/www/interfaces.php:1864 +#: usr/local/www/interfaces.php:1856 usr/local/www/interfaces.php:1892 +msgid "Track IPv6 Interface" +msgstr "Caminho da Interface IPv6" + +#: usr/local/www/interfaces.php:1812 usr/local/www/interfaces.php:1800 +#: usr/local/www/interfaces.php:1821 usr/local/www/interfaces.php:1867 +#: usr/local/www/interfaces.php:1859 usr/local/www/interfaces.php:1895 +msgid "IPv6 Interface" +msgstr "Interface IPv6" + +#: usr/local/www/interfaces.php:1838 usr/local/www/interfaces.php:1826 +#: usr/local/www/interfaces.php:1847 usr/local/www/interfaces.php:1893 +#: usr/local/www/interfaces.php:1885 usr/local/www/interfaces.php:1921 +msgid "This selects the dynamic IPv6 WAN interface to track for configuration" +msgstr "" + +#: usr/local/www/interfaces.php:1842 usr/local/www/interfaces.php:1830 +#: usr/local/www/interfaces.php:1851 usr/local/www/interfaces.php:1897 +#: usr/local/www/interfaces.php:1889 usr/local/www/interfaces.php:1925 +msgid "IPv6 Prefix ID" +msgstr "Prefixo ID IPv6" + +#: usr/local/www/interfaces.php:1853 usr/local/www/interfaces.php:1841 +#: usr/local/www/interfaces.php:1862 usr/local/www/interfaces.php:1908 +#: usr/local/www/interfaces.php:1898 usr/local/www/interfaces.php:1934 +msgid "The value in this field is the (Delegated) IPv6 prefix id. This determines the configurable network ID based on the dynamic IPv6 connection" +msgstr "" + +#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1843 +#: usr/local/www/interfaces.php:1864 usr/local/www/interfaces.php:1910 +#, php-format +msgid "Enter a hexadecimal value between %x and %x here, or leave blank." +msgstr "" + +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2344 +#: usr/local/www/interfaces.php:2374 usr/local/www/interfaces.php:2420 +#: usr/local/www/interfaces.php:2409 usr/local/www/interfaces.php:2445 +msgid "Note: Only required in Access Point mode. If left blank in Ad-hoc or Infrastructure mode, this interface will connect to any available SSID" +msgstr "Nota: Somente é requerido o modo Ponto de Acesso. Se deixar em branco no modo Ad-hoc ou modo Infraestrutura, esta interface irá conectar se houver um SSID." + +# 79% +#: usr/local/www/interfaces.php:2576 usr/local/www/interfaces.php:2564 +#: usr/local/www/interfaces.php:2594 usr/local/www/interfaces.php:2640 +#: usr/local/www/interfaces.php:2629 usr/local/www/interfaces.php:2665 +msgid "Secondary 802.1X Authentication Server IP Address" +msgstr "Endereço IP secundario de Servidor de Autenticação 802.1X" + +# 76% +#: usr/local/www/interfaces.php:2583 usr/local/www/interfaces.php:2571 +#: usr/local/www/interfaces.php:2601 usr/local/www/interfaces.php:2647 +#: usr/local/www/interfaces.php:2636 usr/local/www/interfaces.php:2672 +msgid "Secondary 802.1X Authentication Server Port" +msgstr "Porta secundaria do Servidor de Autenticação 802.1X" + +# 80% +#: usr/local/www/interfaces.php:2590 usr/local/www/interfaces.php:2578 +#: usr/local/www/interfaces.php:2608 usr/local/www/interfaces.php:2654 +#: usr/local/www/interfaces.php:2643 usr/local/www/interfaces.php:2679 +msgid "Secondary 802.1X Authentication Server Shared Secret" +msgstr "Segredo Compartilhado secundario do Servidor de Autenticação 802.1X" + +#: usr/local/www/vpn_openvpn_client.php:196 +#: usr/local/www/vpn_openvpn_client.php:202 +#: usr/local/www/vpn_openvpn_client.php:220 +msgid "The bandwidth limit must be a positive numeric value." +msgstr "O limite de banda deve ser um valor número positivo." + +#: usr/local/www/load_balancer_pool_edit.php:89 +msgid "The port must be an integer between 1 and 65535, or a port alias." +msgstr "O número da porta deve ser um número inteiro entre 1 e 65535, ou um apelido para a porta." + +# 76% +#: usr/local/www/load_balancer_pool_edit.php:98 +#, php-format +msgid "%s is not a valid IP address or IPv4 subnet (in \"enabled\" list)." +msgstr "%s não é um endereço IPv4 válido (na lista de \"habilitados\")." + +#: usr/local/www/load_balancer_pool_edit.php:101 +#, php-format +msgid "%s is a subnet containing more than 64 IP addresses (in \"enabled\" list)." +msgstr "%s é uma subrede contendo mais de 64 endereços IP (em lista \"habilitada\")" + +# 76% +#: usr/local/www/load_balancer_pool_edit.php:108 +#, php-format +msgid "%s is not a valid IP address or IPv4 subnet (in \"disabled\" list)." +msgstr "%s não é um endereço IP válido ou subrede IPv4 (na lista de \"desabilitados\")." + +#: usr/local/www/load_balancer_pool_edit.php:111 +#, php-format +msgid "%s is a subnet containing more than 64 IP addresses (in \"disabled\" list)." +msgstr "%s é uma subrede contendo mais de 64 endereços IP (em lista \"desabilitada\")" + +#: usr/local/www/firewall_virtual_ip_edit.php:153 +#: usr/local/www/firewall_virtual_ip_edit.php:152 +#: usr/local/www/firewall_virtual_ip_edit.php:144 +#: usr/local/www/firewall_virtual_ip_edit.php:160 +#, php-format +msgid "VHID %s is already in use on interface %s. Pick a unique number on this interface." +msgstr "" + +#: usr/local/www/services_snmp.php:391 usr/local/www/services_snmp.php:392 +#: usr/local/www/services_snmp.php:407 +msgid "Interface Binding" +msgstr "Interface Associada" + +# 78% +#: usr/local/www/services_snmp.php:396 usr/local/www/services_snmp.php:397 +#: usr/local/www/services_snmp.php:412 +msgid "Bind Interface" +msgstr "Interface de escuta" + +#: usr/local/www/widgets/widgets/smart_status.widget.php:36 +#: usr/local/www/widgets/widgets/smart_status.widget.php:37 +msgid "Drive" +msgstr "Drive" + +#: usr/local/www/widgets/widgets/smart_status.widget.php:37 +#: usr/local/www/widgets/widgets/smart_status.widget.php:38 +msgid "Ident" +msgstr "Ident" + +#: usr/local/www/system.php:418 usr/local/www/system.php:411 +#: usr/local/www/system.php:409 +msgid "Language" +msgstr "Línguagem" + +#: usr/local/www/system.php:431 usr/local/www/system.php:424 +#: usr/local/www/system.php:422 +msgid "Choose a language for the webConfigurator" +msgstr "Escolha o idioma para o configurador web (webConfigurator)" + +#: usr/local/www/firewall_virtual_ip.php:118 +#: usr/local/www/firewall_virtual_ip.php:115 +#: usr/local/www/firewall_virtual_ip.php:127 +#: usr/local/www/firewall_virtual_ip.php:150 +#: usr/local/www/firewall_virtual_ip.php:157 +msgid "This entry cannot be deleted because it is still referenced by a CARP IP with the description" +msgstr "Esta entrada não pode ser removida porque ela esta referenciada por um IP de CARP com a descrição" + +#: usr/local/www/firewall_virtual_ip.php:124 +#: usr/local/www/firewall_virtual_ip.php:121 +#: usr/local/www/firewall_virtual_ip.php:132 +#: usr/local/www/firewall_virtual_ip.php:155 +#: usr/local/www/firewall_virtual_ip.php:162 +msgid "This entry cannot be deleted because it is still referenced by an IP alias entry with the description" +msgstr "Esta entrada não pode ser removida porque ela esta referenciada por um IP Alias com a descrição" + +#: usr/local/www/services_dhcpv6.php:531 +#: usr/local/www/services_router_advertisements.php:277 +#: usr/local/www/services_router_advertisements.php:272 +#, php-format +msgid "Select the Operating Mode for the Router Advertisement (RA) Daemon." +msgstr "Selecione o modo de Operação do Serviço Anuncio de Roteamento (Router Advertisement - RA)" + +#: usr/local/www/services_dhcpv6.php:532 +#: usr/local/www/services_router_advertisements.php:278 +#: usr/local/www/services_router_advertisements.php:273 +#, php-format +msgid "Use \"Router Only\" to only advertise this router, \"Unmanaged\" for Router Advertising with Stateless Autoconfig, \"Managed\" for assignment through (a) DHCPv6 Server, \"Assisted\" for DHCPv6 Server assignment combined with Stateless Autoconfig" +msgstr "Use \"Router Only\" para somente anunciar este roteador, \"Unmanaged\" para Router Advertising com Stateless Autoconfig, \"Managed\" para atribuir sobre um Servidor DHCPv6, \"Assisted\" para Servidor DHCPv6 atribuido combinando com Stateless Autoconfig" + +#: usr/local/www/services_dhcpv6.php:533 +#: usr/local/www/services_router_advertisements.php:279 +#: usr/local/www/services_router_advertisements.php:274 +#, php-format +msgid "It is not required to activate this DHCPv6 server when set to \"Managed\", this can be another host on the network" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:537 +#: usr/local/www/services_router_advertisements.php:283 +#: usr/local/www/services_router_advertisements.php:278 +msgid "Router Priority" +msgstr "Prioridade de Roteador" + +#: usr/local/www/services_dhcpv6.php:544 +#: usr/local/www/services_router_advertisements.php:290 +#: usr/local/www/services_router_advertisements.php:285 +#, php-format +msgid "Select the Priority for the Router Advertisement (RA) Daemon." +msgstr "Selecione a prioridade para o serviço Router Advertisement (RA) " + +# 83% +#: usr/local/www/services_dhcpv6.php:558 +#: usr/local/www/services_router_advertisements.php:304 +#: usr/local/www/services_router_advertisements.php:299 +msgid "RA Interface" +msgstr "Interface RA" + +#: usr/local/www/services_dhcpv6.php:566 +#: usr/local/www/services_router_advertisements.php:312 +#: usr/local/www/services_router_advertisements.php:307 +#, php-format +msgid "Select the Interface for the Router Advertisement (RA) Daemon." +msgstr "Selecione a interface para o serviço Router Advertisement (RA) " + +#: usr/local/www/services_dhcpv6.php:653 usr/local/www/services_dhcpv6.php:584 +msgid "prefix delegation size" +msgstr "tamanho da delegação de prefixo" + +#: usr/local/www/services_dhcpv6.php:662 usr/local/www/services_dhcpv6.php:593 +#: usr/local/www/services_dhcpv6.php:610 +msgid "" +"You can define a Prefix range here for DHCP Prefix Delegation. This allows for \n" +"\t\t\t\t\tassigning networks to subrouters. The start and end of the range must end on boundaries of the prefix delegation size." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:685 usr/local/www/services_dhcpv6.php:616 +#: usr/local/www/services_dhcpv6.php:633 +msgid "The DHCP server can optionally provide a domain search list. Use the semicolon character as seperator" +msgstr "O Servidor DHCP pode opcionalmente prover uma lista de pesquisa de dominio. Use o caracter ponto-e-virgula como separador." + +#: usr/local/www/services_dhcpv6.php:725 usr/local/www/services_dhcpv6.php:656 +#: usr/local/www/services_dhcpv6.php:673 +#, fuzzy +msgid "Change DHCPv6 display lease time from UTC to local time." +msgstr "Alterar tempo de concessão DHCP exibição de UTC para a hora local." + +#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:663 +#: usr/local/www/services_dhcpv6.php:680 +msgid "" +"By default DHCPv6 leases are displayed in UTC time. By checking this \n" +"\t\t\t\t\t\tbox DHCPv6 lease time will be displayed in local time and set to time zone selected. This will be used for all DHCPv6 interfaces lease time." +msgstr "" + +#: etc/inc/priv.defs.inc:64 +msgid "WebCfg - Diagnostics: Sockets page" +msgstr "WebCfg - Diagnosticos: Página de Sockets" + +#: etc/inc/priv.defs.inc:65 +msgid "Allow access to the 'Diagnostics: Sockets' page." +msgstr "Permite acesso a página 'Diagnosticos: Sockets'" + +#: etc/inc/config.console.inc:263 +#, php-format +msgid "%sEnter the Optional %s interface name or 'a' for auto-detection%s(or nothing if finished):%s" +msgstr "%sEntre com nome opcional para interface %s ou 'a' para auto-detecção %s(ou nada se quiser finalizar):%s" + +#: etc/inc/shaper.inc:2909 etc/inc/shaper.inc:2910 etc/inc/shaper.inc:2915 +#: etc/inc/shaper.inc:2983 etc/inc/shaper.inc:3041 etc/inc/shaper.inc:3049 +#, fuzzy, php-format +msgid "Bandwidth for schedule %s must be an integer." +msgstr "O valor de tamanho de banda para %s deve ser um inteiro." + +#: etc/inc/shaper.inc:2915 etc/inc/shaper.inc:2916 etc/inc/shaper.inc:2921 +#: etc/inc/shaper.inc:2989 etc/inc/shaper.inc:3047 etc/inc/shaper.inc:3057 +msgid "You need to specify a schedule for every additional entry" +msgstr "" + +#: etc/inc/shaper.inc:2917 etc/inc/shaper.inc:2918 etc/inc/shaper.inc:2923 +#: etc/inc/shaper.inc:2991 etc/inc/shaper.inc:3049 etc/inc/shaper.inc:3059 +msgid "If more than one bandwidth configured all schedules need to be selected" +msgstr "If mais de um controle de banda é configurado, todos os agendamentos precisam ser selecionados." + +#: etc/inc/shaper.inc:2919 etc/inc/shaper.inc:2920 etc/inc/shaper.inc:2925 +#: etc/inc/shaper.inc:2993 etc/inc/shaper.inc:3051 etc/inc/shaper.inc:3061 +msgid "At least one bw specification is necessary" +msgstr "" + +#: etc/inc/shaper.inc:3200 etc/inc/shaper.inc:3201 etc/inc/shaper.inc:3208 +#: etc/inc/shaper.inc:3276 etc/inc/shaper.inc:3332 etc/inc/shaper.inc:3357 +msgid "add another schedule" +msgstr "adicionar outro agendamento" + +#: etc/inc/functions.inc:94 +msgid "Acknowledge All Notices" +msgstr "Reconhecer todos os avisos" + +#: etc/inc/functions.inc:95 +msgid "Click to Acknowledge" +msgstr "Clique para Reconhecer" + +#: etc/inc/functions.inc:113 +msgid "unread notice" +msgstr "aviso não lido" + +#: etc/inc/functions.inc:115 +msgid "unread notices" +msgstr "avisos não lido" + +#: etc/inc/service-utils.inc:234 etc/inc/service-utils.inc:233 +#: etc/inc/service-utils.inc:250 +msgid "Router Advertisement Daemon" +msgstr "Serviço de Anúncio de Roteador" + +#: etc/inc/service-utils.inc:313 etc/inc/service-utils.inc:312 +#: etc/inc/service-utils.inc:329 etc/inc/service-utils.inc:331 +msgid "RIP Daemon" +msgstr "Serviço RIP" + +#: etc/inc/service-utils.inc:413 etc/inc/service-utils.inc:422 +#: etc/inc/service-utils.inc:412 etc/inc/service-utils.inc:421 +#: etc/inc/service-utils.inc:429 etc/inc/service-utils.inc:439 +#: etc/inc/service-utils.inc:432 etc/inc/service-utils.inc:442 +#: etc/inc/service-utils.inc:437 etc/inc/service-utils.inc:447 +#, php-format +msgid "%s Service is" +msgstr "%s Serviço é" + +#: etc/inc/service-utils.inc:447 etc/inc/service-utils.inc:446 +#: etc/inc/service-utils.inc:464 etc/inc/service-utils.inc:467 +#: etc/inc/service-utils.inc:472 +#, php-format +msgid "Restart %sService" +msgstr "Reiniciar Serviço %s" + +#: etc/inc/service-utils.inc:458 etc/inc/service-utils.inc:457 +#: etc/inc/service-utils.inc:475 etc/inc/service-utils.inc:478 +#: etc/inc/service-utils.inc:483 +#, php-format +msgid "Stop %sService" +msgstr "Parar Serviço %s" + +#: etc/inc/service-utils.inc:471 etc/inc/service-utils.inc:470 +#: etc/inc/service-utils.inc:491 etc/inc/service-utils.inc:494 +#: etc/inc/service-utils.inc:499 +#, php-format +msgid "Start %sService" +msgstr "Iniciar Serviço %s" + +#: etc/inc/filter.inc:2993 etc/inc/filter.inc:3079 etc/inc/filter.inc:3103 +#: etc/inc/filter.inc:3108 etc/inc/filter.inc:3131 +msgid "Removed 15 minute filter reload for Time Based Rules" +msgstr "Removido 15 minutos de releitura de filtros para regras baseada em Tempo." + +#: usr/local/www/pkg_mgr.php:193 usr/local/www/pkg_mgr.php:196 +msgid "Click on package name to access its website." +msgstr "Clique no nome do pacote para ter acesso ao website." + +#: usr/local/www/diag_logs_settings.php:276 +#: usr/local/www/diag_logs_settings.php:307 +msgid "Show the applied rule description below or in the firewall log rows." +msgstr "Mostra as descrições de regras aplicadas abaixo ou nas linhas do firewall." + +#: usr/local/www/diag_logs_settings.php:278 +#: usr/local/www/diag_logs_settings.php:309 +msgid "Displaying rule descriptions for all lines in the log might affect performance with large rulessets." +msgstr "" + +#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:144 +msgid "DHCPv6 Server/RA" +msgstr "Servidor/RA DHCPv6" + +#: usr/local/www/fbegin.inc:232 usr/local/www/diag_sockets.php:44 +#: usr/local/www/fbegin.inc:224 +msgid "Sockets" +msgstr "Sockets" + +#: usr/local/www/fbegin.inc:419 usr/local/www/fbegin.inc:411 +msgid "Help for items on this page" +msgstr "Ajuda para os itens nessa página" + +#: usr/local/www/system_groupmanager.php:472 +#: usr/local/www/system_groupmanager.php:422 +#: usr/local/www/system_groupmanager.php:425 +msgid "" +"Additional webConfigurator groups can be added here. \n" +"\t\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by users who are members of the group.\n" +"\t\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system defined object.\n" +"\t\t\t\t\t\t\t\t\tSome system object properties can be modified but they cannot be deleted." +msgstr "" +"Additional webConfigurator groups can be added here. \n" +"\t\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by users who are members of the group.\n" +"\t\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system defined object.\n" +"\t\t\t\t\t\t\t\t\tSome system object properties can be modified but they cannot be deleted." + +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +msgid "or" +msgstr "ou" + +#: usr/local/www/services_dhcpv6_edit.php:204 +#: usr/local/www/services_dhcpv6_edit.php:207 +msgid "If an IPv6 address is entered, the address must be outside of the pool." +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:206 +#: usr/local/www/services_dhcpv6_edit.php:209 +#, fuzzy +msgid "If no IPv6 address is given, one will be dynamically allocated from the pool." +msgstr "Se nenhum endereço IPv6 for fornecido, um será dinamicamente alocado da fila." + +#: usr/local/www/services_router_advertisements.php:118 +#: usr/local/www/services_router_advertisements.php:117 +msgid "Subnets are specified in CIDR format. Select the CIDR mask that pertains to each entry. /128 specifies a single IPv6 host; /64 specifies a normal IPv6 network; etc. If no subnets are specified here, the Router Advertisement (RA) Daemon will advertise to the subnet to which the router's interface is assigned." +msgstr "" + +#: usr/local/www/services_router_advertisements.php:149 +#: usr/local/www/services_router_advertisements.php:144 +#, fuzzy, php-format +msgid "An invalid subnet or alias was specified. [%s/%s]" +msgstr "%s não é um endereço de IP válido, subrede IPv4 ou alias." + +#: usr/local/www/services_router_advertisements.php:194 +#: usr/local/www/services_router_advertisements.php:189 +msgid "Router advertisements" +msgstr "Anúncios de Roteador" + +#: usr/local/www/services_router_advertisements.php:318 +#: usr/local/www/services_router_advertisements.php:313 +msgid "RA Subnet(s)" +msgstr "Subrede(s) RA" + +#: usr/local/www/services_router_advertisements.php:384 +#: usr/local/www/services_router_advertisements.php:379 +#, fuzzy +msgid "The RA server can optionally provide a domain search list. Use the semicolon character as seperator" +msgstr "O Servidor DHCP pode opcionalmente prover uma lista de pesquisa de dominio. Use o caracter ponto-e-virgula como separador." + +#: usr/local/www/services_router_advertisements.php:392 +#: usr/local/www/services_router_advertisements.php:387 +msgid "Use same settings as DHCPv6 server" +msgstr "Usa as mesmas configurações do servidor DHCPv6" + +#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94 +#: usr/local/www/vpn_ipsec_phase2.php:475 +#: usr/local/www/vpn_ipsec_phase1.php:498 usr/local/www/vpn_ipsec.php:148 +#: usr/local/www/vpn_ipsec_phase1.php:519 +#: usr/local/www/vpn_ipsec_phase2.php:497 +msgid "Pre-Shared Keys" +msgstr "Chaves pré-compartilhada" + +#: usr/local/www/system_usermanager_settings_test.php:78 +#, php-format +msgid "Testing %s LDAP settings... One moment please..." +msgstr "Testando configurações LDAP %s... Um momento por favor..." + +#: usr/local/www/vpn_ipsec_mobile.php:149 +#, fuzzy +msgid "A valid split DNS domain list must be specified." +msgstr "Um nome de domínio válido deve ser especificado para o domínio DNS." + +#: usr/local/www/vpn_ipsec_mobile.php:505 +msgid "Split DNS" +msgstr "Divisão do DNS" + +#: usr/local/www/vpn_ipsec_mobile.php:514 +msgid "Provide a list of split DNS domain names to clients. Enter a comma separated list." +msgstr "Forneça uma lista de nomes de dominio DNS para os clientes. Entre com os valores separados por virgula na lista." + +#: usr/local/www/vpn_ipsec_mobile.php:515 +msgid "NOTE: If left blank, and a default domain is set, it will be used for this value." +msgstr "NOTA: Se deixar em branco e um dominio padrão é definido, ele irá ser usado para esse valor." + +#: usr/local/www/firewall_shaper.php:131 +#: usr/local/www/firewall_shaper_vinterface.php:146 +msgid "Unable to write config.xml (Access Denied?)" +msgstr "Incapaz de escrever config.xml (Acesso Negado?)" + +#: usr/local/www/firewall_rules_edit.php:455 +#: usr/local/www/firewall_rules_edit.php:458 +#: usr/local/www/firewall_rules_edit.php:464 +msgid "Please select a gateway, normaly the interface selected gateway, so the limiters work correctly" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys.php:136 +#, fuzzy +msgid "Do you really want to delete this Pre-Shared Key?" +msgstr "Você realmente deseja apagar essa chave pre-compartilhada?" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:83 +msgid "A valid domain must be specified after _msdcs." +msgstr "Um dominio válido devve ser especificado após _msdcs." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:93 +msgid "An interface IP address must be specified for the DNS query source." +msgstr "Um endereço de IP da interface deve ser especificado para consultas de DNS de origem." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144 +msgid "Source IP" +msgstr "IP de Origem" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:147 +msgid "Source IP address for queries to the DNS server for the override domain." +msgstr "Endereço de IP de origem para consultas ao servidor DNS para sobrepor o dominio." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148 +msgid "Leave blank unless your DNS server is accessed through a VPN tunnel." +msgstr "" + +#: usr/local/www/system_crlmanager.php:401 +msgid "Edit Imported Certificate Revocation List" +msgstr "Edita a lista de Revogação de Certificado importado." + +#: usr/local/www/system_advanced_firewall.php:206 +#: usr/local/www/system_advanced_firewall.php:235 +#: usr/local/www/system_advanced_firewall.php:246 +#, fuzzy +msgid "expires idle connections quicker. More efficient use of CPU and memory but can drop legitimate idle connections" +msgstr "expira conexões ociosas mais rápido. Faz uso mais eficiente da CPU e da memória mas pode derrubar conexões legítimas" + +#: usr/local/www/system_advanced_firewall.php:207 +#: usr/local/www/system_advanced_firewall.php:236 +#: usr/local/www/system_advanced_firewall.php:247 +#, fuzzy +msgid "tries to avoid dropping any legitimate idle connections at the expense of increased memory usage and CPU utilization." +msgstr "tenta evitar queda de qualquer conexão legítima às custas do uso de memória e utilização de CPU." + +#: usr/local/www/vpn_pptp.php:297 usr/local/www/vpn_pptp.php:300 +msgid "PPTP is no longer considered a secure VPN technology because it relies upon MS-CHAPv2 which has been compromised. If you continue to use PPTP be aware that intercepted traffic can be decrypted by a third party, so it should be considered unencrypted. We advise migrating to another VPN type such as OpenVPN or IPsec.

    Read More" +msgstr "" + +#: usr/local/www/status_ntpd.php:185 usr/local/www/status_ntpd.php:191 +msgid "Clock Latitude" +msgstr "Latitude" + +#: usr/local/www/status_ntpd.php:186 usr/local/www/status_ntpd.php:192 +msgid "Clock Longitude" +msgstr "Longitude" + +#: usr/local/www/system_advanced_misc.php:77 +#: usr/local/www/system_advanced_misc.php:80 +#: usr/local/www/system_advanced_misc.php:84 +#: usr/local/www/system_advanced_misc.php:85 +#, fuzzy +msgid "AMD Geode LX Security Block" +msgstr "O AMD Geode LX Security Block irá acelerar algumas funções de criptografia em sistemas que possuem o chip. Não habilite essa opção se você tem um cartão de aceleração de criptografia Hifn, já que ele terá prioridade e o cartão Hifn não será usado. Aceleração pode ser automática para IPsec quando estiver usando Rijndael (AES). OpenVPN deve ser configurado para AES-128-CBC." + +#: usr/local/www/system_advanced_misc.php:78 +#: usr/local/www/system_advanced_misc.php:81 +#: usr/local/www/system_advanced_misc.php:85 +#: usr/local/www/system_advanced_misc.php:86 +msgid "AES-NI CPU-based Acceleration" +msgstr "Aceleração baseada em CPU AES-NI" + +#: usr/local/www/system_advanced_misc.php:80 +#: usr/local/www/system_advanced_misc.php:83 +#: usr/local/www/system_advanced_misc.php:87 +#: usr/local/www/system_advanced_misc.php:88 +#, fuzzy +msgid "Intel Core* CPU on-die thermal sensor" +msgstr "Sensor termal on-die CPU AMD K8, K10 e K11" + +#: usr/local/www/system_advanced_misc.php:81 +#: usr/local/www/system_advanced_misc.php:84 +#: usr/local/www/system_advanced_misc.php:88 +#: usr/local/www/system_advanced_misc.php:89 +msgid "AMD K8, K10 and K11 CPU on-die thermal sensor" +msgstr "Sensor termal on-die CPU AMD K8, K10 e K11" + +#: usr/local/www/system_advanced_misc.php:92 +#: usr/local/www/system_advanced_misc.php:95 +#: usr/local/www/system_advanced_misc.php:99 +#: usr/local/www/system_advanced_misc.php:100 +msgid "Please select a valid Cryptographic Accelerator." +msgstr "Por favor, selecione um acelerador de Criptografia válido." + +#: usr/local/www/system_advanced_misc.php:95 +#: usr/local/www/system_advanced_misc.php:98 +#: usr/local/www/system_advanced_misc.php:102 +#: usr/local/www/system_advanced_misc.php:103 +msgid "Please select a valid Thermal Hardware Sensor." +msgstr "Por favor, selecione um hardware de sensor termal válido" + +#: usr/local/www/system_advanced_misc.php:380 +#: usr/local/www/system_advanced_misc.php:392 +#: usr/local/www/system_advanced_misc.php:439 +#: usr/local/www/system_advanced_misc.php:445 +#, fuzzy +msgid "Cryptographic Hardware Acceleration" +msgstr "Hardware de Criptografia" + +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:395 +#: usr/local/www/system_advanced_misc.php:442 +#: usr/local/www/system_advanced_misc.php:448 +msgid "Cryptographic Hardware" +msgstr "Hardware de Criptografia" + +#: usr/local/www/system_advanced_misc.php:392 +#: usr/local/www/system_advanced_misc.php:404 +#: usr/local/www/system_advanced_misc.php:451 +#: usr/local/www/system_advanced_misc.php:457 +msgid "A cryptographic accelerator module will use hardware support to speed up some cryptographic functions on systems which have the chip. Do not enable this option if you have a Hifn cryptographic acceleration card, as this will take precedence and the Hifn card will not be used. Acceleration should be automatic for IPsec when using a cipher supported by your chip, such as AES-128. OpenVPN should be set for AES-128-CBC and have cryptodev enabled for hardware acceleration." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:400 +#: usr/local/www/system_advanced_misc.php:412 +#: usr/local/www/system_advanced_misc.php:459 +#: usr/local/www/system_advanced_misc.php:465 +msgid "If you do not have a crypto chip in your system, this option will have no effect. To unload the selected module, set this option to 'none' and then reboot." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:420 +#: usr/local/www/system_advanced_misc.php:423 +#: usr/local/www/system_advanced_misc.php:467 +#: usr/local/www/system_advanced_misc.php:470 +#: usr/local/www/system_advanced_misc.php:473 +#: usr/local/www/system_advanced_misc.php:476 +msgid "Thermal Sensors" +msgstr "Sensores Termais" + +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:426 +#: usr/local/www/system_advanced_misc.php:473 +#: usr/local/www/system_advanced_misc.php:479 +msgid "None/ACPI" +msgstr "Nenhum/ACPI" + +#: usr/local/www/system_advanced_misc.php:420 +#: usr/local/www/system_advanced_misc.php:432 +#: usr/local/www/system_advanced_misc.php:479 +#: usr/local/www/system_advanced_misc.php:485 +msgid "If you have a supported CPU, selecting a themal sensor will load the appropriate driver to read its temperature. Setting this to 'None' will attempt to read the temperature from an ACPI-compliant motherboard sensor instead, if one is present." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:424 +#: usr/local/www/system_advanced_misc.php:436 +#: usr/local/www/system_advanced_misc.php:483 +#: usr/local/www/system_advanced_misc.php:489 +msgid "If you do not have a supported thermal sensor chip in your system, this option will have no effect. To unload the selected module, set this option to 'none' and then reboot." +msgstr "" + +#: usr/local/www/services_captiveportal.php:173 +#: usr/local/www/services_captiveportal.php:175 +msgid "Certificate must be specified for HTTPS login." +msgstr "Certificado deve ser especificado para login de HTTPS." + +#: usr/local/www/services_captiveportal.php:863 +#: usr/local/www/services_captiveportal.php:865 +#: usr/local/www/services_captiveportal.php:881 +msgid "If enabled, the username and password will be transmitted over an HTTPS connection to protect against eavesdroppers. A server name and certificate must also be specified below." +msgstr "" + +#: usr/local/www/services_captiveportal.php:886 +#: usr/local/www/services_captiveportal.php:888 +#: usr/local/www/services_captiveportal.php:904 +msgid "No Certificates defined." +msgstr "Nenhum certificado definido." + +#: usr/local/www/system_gateways_edit.php:205 +#: usr/local/www/system_gateways_edit.php:235 +msgid "The low latency threshold needs to be a numeric value." +msgstr "O limiar de latencia baixa deve ser um valor númerico." + +#: usr/local/www/system_gateways_edit.php:208 +#: usr/local/www/system_gateways_edit.php:238 +msgid "The low latency threshold needs to be positive." +msgstr "O limiar de latencia baixa deve ser um valor positivo." + +#: usr/local/www/system_gateways_edit.php:215 +#: usr/local/www/system_gateways_edit.php:245 +msgid "The high latency threshold needs to be a numeric value." +msgstr "O limiar de latencia alta deve ser um valor númerico." + +#: usr/local/www/system_gateways_edit.php:218 +#: usr/local/www/system_gateways_edit.php:248 +msgid "The high latency threshold needs to be positive." +msgstr "O limiar de latencia alta deve ser um valor positivo." + +#: usr/local/www/system_gateways_edit.php:225 +#: usr/local/www/system_gateways_edit.php:255 +msgid "The low Packet Loss threshold needs to be a numeric value." +msgstr "O limiar de perda de pacote baixo deve ser um valor númerico." + +#: usr/local/www/system_gateways_edit.php:228 +#: usr/local/www/system_gateways_edit.php:258 +msgid "The low Packet Loss threshold needs to be positive." +msgstr "O limiar de perda de pacotes baixo deve ser um valor positivo." + +#: usr/local/www/system_gateways_edit.php:231 +#: usr/local/www/system_gateways_edit.php:261 +msgid "The low Packet Loss threshold needs to be less than 100." +msgstr "O limiar de perda de pacotes deve ser um valor menor que 100." + +#: usr/local/www/system_gateways_edit.php:238 +#: usr/local/www/system_gateways_edit.php:268 +msgid "The high Packet Loss threshold needs to be a numeric value." +msgstr "O limiar de perda de pacotes alto deve ser um valor númerico." + +#: usr/local/www/system_gateways_edit.php:241 +#: usr/local/www/system_gateways_edit.php:271 +msgid "The high Packet Loss threshold needs to be positive." +msgstr "O limiar de perda de pacotes alto deve ser um valor positivo." + +#: usr/local/www/system_gateways_edit.php:244 +#: usr/local/www/system_gateways_edit.php:274 +msgid "The high Packet Loss threshold needs to be 100 or less." +msgstr "O limiar de perda de pacotes alto deve ser um valor menor que 100." + +#: usr/local/www/system_gateways_edit.php:252 +#: usr/local/www/system_gateways_edit.php:282 +msgid "The high latency threshold needs to be higher than the low latency threshold" +msgstr "O limiar de latencia alta precisa ser maior que o valor limiar de latencia baixa." + +#: usr/local/www/system_gateways_edit.php:275 +#: usr/local/www/system_gateways_edit.php:305 +msgid "The high Packet Loss threshold needs to be higher than the low Packet Loss threshold" +msgstr "O limiar de perda de pacotes alto deve ser maior que o valor limiar de perda de pacotes baixo." + +#: usr/local/www/system_gateways_edit.php:297 +#: usr/local/www/system_gateways_edit.php:327 +msgid "The frequency probe interval needs to be a numeric value." +msgstr "O intervalo de frequencia de consulta deve ser um valor númerico." + +#: usr/local/www/system_gateways_edit.php:300 +#: usr/local/www/system_gateways_edit.php:330 +msgid "The frequency probe interval needs to be positive." +msgstr "O intervalo de frequencia de consulta deve ser um valor positivo." + +#: usr/local/www/system_gateways_edit.php:307 +#: usr/local/www/system_gateways_edit.php:337 +msgid "The down time setting needs to be a numeric value." +msgstr "A configuração de tempo de queda deve ser um valor númerico." + +#: usr/local/www/system_gateways_edit.php:310 +#: usr/local/www/system_gateways_edit.php:340 +msgid "The down time setting needs to be positive." +msgstr "A configuração de tempo de queda deve ser um valor positivo." + +#: usr/local/www/system_gateways_edit.php:318 +#: usr/local/www/system_gateways_edit.php:348 +msgid "The Frequency Probe interval needs to be less than the down time setting." +msgstr "O intervalo de frequencia de consulta deve ser menor que a configuraçõa de tempo de queda." + +#: usr/local/www/system_gateways_edit.php:611 +#: usr/local/www/system_gateways_edit.php:615 +#: usr/local/www/system_gateways_edit.php:617 +#: usr/local/www/system_gateways_edit.php:647 +msgid "NOTE: The Frequency Probe interval must be less than the Down time, otherwise the gateway will seem to go down then come up again at the next probe." +msgstr "NOTA: O intervalo de frequencia de consulta deve ser menor que o tempo de queda, caso contrário vai parecer que o gateway caiu antes da próxima consulta." + +#: usr/local/www/shortcuts.inc:96 +msgid "Main page for this section" +msgstr "Página principal para esta sessão" + +#: usr/local/www/shortcuts.inc:120 +msgid "Status of items on this page" +msgstr "Status dos itens nesta página" + +#: usr/local/www/shortcuts.inc:127 +msgid "Log entries for items on this page" +msgstr "Entrada de log para os itens nesta página" + +#: usr/local/www/vpn_openvpn_server.php:1102 +#: usr/local/www/vpn_openvpn_server.php:1129 +#, fuzzy +msgid "This is the IPv6 virtual network used for private communications between this server and client hosts expressed using CIDR (eg. fe80::/64). The first network address will be assigned to the server virtual interface. The remaining network addresses can optionally be assigned to connecting clients. (see Address Pool)" +msgstr "Essa é a rede virtual IPv6 usada para comunicações privadas entre esse servidor e os hosts clientes expressados usando CIDR (e.g. fe80::/64). O primeiro endereço de rede será atribuído à \tinterface virtual do servidor. Os endereços de rede remanescentes podem opcionalmente ser atribuídos a clientes em conexão. (veja Pool de Endereço)" + +#: usr/local/www/vpn_openvpn_server.php:1152 +#: usr/local/www/vpn_openvpn_server.php:1179 +#, fuzzy +msgid "The interface to which this tap instance will be bridged. This is not done automatically. You must assign this interface and create the bridge separately. This setting controls which existing IP address and subnet mask are used by OpenVPN for the bridge. Setting this to 'none' will cause the Server Bridge DHCP settings below to be ignored." +msgstr "A interface para que esta instância torneira será, em ponte. Isto não é feito automaticamente. Você deve atribuir essa interface e criar a ponte separadamente. Esta definição controla qual o endereço IP existente e máscara de subrede são usados ¿¿por OpenVPN para a ponte. A definição como 'none' fará com que as configurações do servidor DHCP Ponte abaixo para ser ignorado." + +#: usr/local/www/vpn_openvpn_server.php:1165 +#: usr/local/www/vpn_openvpn_server.php:1192 +#, fuzzy +msgid "When using tap mode as a multi-point server, you may optionally supply a DHCP range to use on the interface to which this tap instance is bridged. If these settings are left blank, DHCP will be passed through to the LAN, and the interface setting above will be ignored." +msgstr "Ao usar o modo tap como servidor multi-ponto, você pode, opcionalmente, fornecer uma gama DHCP para usar na interface para que esta instância torneira está superado. Se essas configurações são deixadas em branco, DHCP será repassado para a LAN, ea interface de configuração acima serão ignorados." + +#: usr/local/www/vpn_openvpn_server.php:1225 +#: usr/local/www/vpn_openvpn_client.php:799 +msgid "IPv4 Remote Network" +msgstr "Rede remota IPv4" + +#: usr/local/www/vpn_openvpn_server.php:1229 +#, fuzzy +msgid "This is a network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote LAN here. You may leave this blank if you don't want a site-to-site VPN" +msgstr "Essa é uma rede que será roteada através do túnel, de forma que uma VPN site-to-site possa ser estabelecida sem modificar manualmente as tabelas de roteamento. Expressado como um intervalo CIDR. Se essa é uma VPN site-to-site, informe aqui a LAN remota. Você pode deixar isso em branco se não desejar uma VPN site-to-site" + +#: usr/local/www/vpn_openvpn_server.php:1239 +#: usr/local/www/vpn_openvpn_client.php:813 +msgid "IPv6 Remote Network" +msgstr "Rede remota IPv6" + +#: usr/local/www/vpn_openvpn_server.php:1243 +msgid "This is an IPv6 network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the remote LAN here. You may leave this blank if you don't want a site-to-site VPN" +msgstr "Esta é uma rede IPv6 que será encaminhado através do túnel, de modo que uma VPN site-to-site pode ser estabelecida sem alterar manualmente as tabelas de roteamento. Expresso como um prefixo IP. Se esta é uma VPN site-to-site, digite a LAN remota aqui. Você pode deixar este campo em branco se você não quiser uma VPN site-to-site" + +#: usr/local/www/services_dhcp.php:293 usr/local/www/services_dhcp.php:274 +#: usr/local/www/services_dhcp.php:294 usr/local/www/services_dhcp.php:295 +msgid "If you specify a mac allow list, it must contain only valid partial MAC addresses." +msgstr "Se você especificar uma lista de mac permitido. isto deve conter somente endereços parciais de MAC." + +#: usr/local/www/services_dhcp.php:295 usr/local/www/services_dhcp.php:276 +#: usr/local/www/services_dhcp.php:296 usr/local/www/services_dhcp.php:297 +msgid "If you specify a mac deny list, it must contain only valid partial MAC addresses." +msgstr "Se você especificar uma lista de mac bloqueados. isto deve conter somente endereços parciais de MAC." + +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcp.php:701 +#: usr/local/www/services_dhcp.php:721 usr/local/www/services_dhcp.php:733 +msgid "Editing Pool-Specific Options. To return to the Interface, click its tab above." +msgstr "Editar Opções de pool específico. Para retornar para a interface, clique na guia acima." + +#: usr/local/www/services_dhcp.php:775 usr/local/www/services_dhcp.php:785 +#: usr/local/www/services_dhcp.php:805 usr/local/www/services_dhcp.php:817 +msgid "Additional Pools" +msgstr "Pools adicionais" + +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:787 +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcp.php:819 +msgid "If you need additional pools of addresses inside of this subnet outside the above Range, they may be specified here." +msgstr "Se você precisar de pools de endereços adicionais dentro desta subrede externa na faixa acima, então você deve especificar aqui." + +#: usr/local/www/services_dhcp.php:780 usr/local/www/services_dhcp.php:790 +#: usr/local/www/services_dhcp.php:810 usr/local/www/services_dhcp.php:822 +msgid "Pool Start" +msgstr "Pool Inicial" + +#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcp.php:791 +#: usr/local/www/services_dhcp.php:811 usr/local/www/services_dhcp.php:823 +msgid "Pool End" +msgstr "Pool Final" + +#: usr/local/www/services_dhcp.php:805 usr/local/www/services_dhcp.php:819 +#: usr/local/www/services_dhcp.php:839 usr/local/www/services_dhcp.php:851 +msgid "Do you really want to delete this pool?" +msgstr "Você realmente quer remover este pool?" + +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:971 +#: usr/local/www/services_dhcp.php:991 usr/local/www/services_dhcp.php:1003 +msgid "MAC Address Control" +msgstr "Controle de endereço MAC" + +#: usr/local/www/services_dhcp.php:961 usr/local/www/services_dhcp.php:974 +#: usr/local/www/services_dhcp.php:994 usr/local/www/services_dhcp.php:1006 +msgid "Show MAC Address Control" +msgstr "Visualizar Controle de endereço MAC" + +#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcp.php:978 +#: usr/local/www/services_dhcp.php:998 usr/local/www/services_dhcp.php:1010 +msgid "Enter a list of partial MAC addresses to allow, comma separated, no spaces, such as " +msgstr "Entre com uma lista parcial de endereços MAC permitidos, separados por virgula, sem espaço, como " + +#: usr/local/www/services_dhcp.php:967 usr/local/www/services_dhcp.php:980 +#: usr/local/www/services_dhcp.php:1000 usr/local/www/services_dhcp.php:1012 +msgid "Enter a list of partial MAC addresses to deny access, comma separated, no spaces, such as " +msgstr "Entre com uma lista parcial de endereços MAC bloqueados, separados por virgula, sem espaço, como " + +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +msgid "You cannot use spaces or slashes in the 'name' field." +msgstr "Você não pode usar espaços ou barras no campo 'nome'." + +#: usr/local/www/guiconfig.inc:1009 usr/local/www/guiconfig.inc:1024 +#: usr/local/www/guiconfig.inc:1021 usr/local/www/guiconfig.inc:1028 +msgid "move mouse out this alias to hide" +msgstr "mova o mouse para fora para esconder este alias" + +#: usr/local/www/guiconfig.inc:1066 usr/local/www/guiconfig.inc:1081 +#: usr/local/www/guiconfig.inc:1078 usr/local/www/guiconfig.inc:1085 +msgid "edit this alias" +msgstr "edita o alias" + +#: usr/local/www/guiconfig.inc:1077 usr/local/www/guiconfig.inc:1089 +#: usr/local/www/guiconfig.inc:1092 usr/local/www/guiconfig.inc:1104 +#: usr/local/www/guiconfig.inc:1101 usr/local/www/guiconfig.inc:1096 +#: usr/local/www/guiconfig.inc:1108 +msgid "loading..." +msgstr "carregando..." + +#: usr/local/www/system_firmware_settings.php:175 +#: usr/local/www/system_firmware_settings.php:184 +#: usr/local/www/system_firmware_settings.php:186 +msgid "Dashboard check" +msgstr "Checagem do Dashboard" + +#: usr/local/www/system_firmware_settings.php:179 +#: usr/local/www/system_firmware_settings.php:188 +#: usr/local/www/system_firmware_settings.php:190 +msgid "Disable the automatic dashboard auto-update check." +msgstr "Desabilita a checagem de auto atualização do dashboard." + +#: usr/local/www/services_ntpd.php:119 +msgid "Interfaces without an IP address will not be shown." +msgstr "Interfaces sem um endereço de IP não serão visualizados." + +#: usr/local/www/services_ntpd.php:121 +msgid "Selecting no interfaces will listen on all interfaces with a wildcard." +msgstr "Senão selecionar uma interface, todas elas serão atribuidas a escutar em um curiga (*)." + +#: usr/local/www/services_ntpd.php:122 +msgid "Selecting all interfaces will explicitly listen on only the interfaces/IPs specified." +msgstr "Selecionando todas as interfaces, será explicito que somente o endereço IP especifico da interface será usado." + +#: usr/local/www/services_ntpd.php:140 +msgid "The GPS must provide NMEA format output!" +msgstr "O GPS deve prover uma saida no formato NMEA!" + +#: usr/local/www/services_ntpd.php:142 +msgid "All serial ports are listed, be sure to pick only the port with the GPS attached." +msgstr "Todas as portas seriais são listadas, mas somente uma porta pode ser selecionada para atribuir ao GPS." + +#: usr/local/www/services_ntpd.php:144 +msgid "It is best to configure at least 2 servers under" +msgstr "É melhor configurar pelo menos 2 servidores sob" + +#: usr/local/www/services_ntpd.php:144 +msgid "System > General" +msgstr "Sistema > Geral" + +#: usr/local/www/services_ntpd.php:144 +msgid "to avoid loss of sync if the GPS data is not valid over time. Otherwise ntpd may only use values from the unsynchronized local clock when providing time to clients." +msgstr "para evitar a perda de sincronia, se os dados de GPS não é válida ao longo do tempo. Caso contrário ntpd só podem utilizar os valores do relógio local não sincronizado ao fornecer tempo para os clientes." + +#: usr/local/www/firewall_aliases.php:177 +#: usr/local/www/firewall_aliases.php:175 +msgid "Ports" +msgstr "Portas" + +#: usr/local/www/firewall_aliases.php:178 +#: usr/local/www/firewall_aliases.php:176 +msgid "Urls" +msgstr "Urls" + +#: usr/local/www/firewall_aliases.php:195 +#: usr/local/www/firewall_aliases.php:272 +#: usr/local/www/firewall_aliases.php:274 +#: usr/local/www/firewall_aliases.php:275 +msgid "Add a new alias" +msgstr "Adiciona um novo alias" + +#: usr/local/www/firewall_aliases.php:255 +#: usr/local/www/firewall_aliases.php:256 +#: usr/local/www/firewall_aliases.php:257 +msgid "Edit alias" +msgstr "Edita alias" + +#: usr/local/www/firewall_aliases.php:256 +#: usr/local/www/firewall_aliases.php:257 +#: usr/local/www/firewall_aliases.php:258 +msgid "Delete alias" +msgstr "Remove alias" + +#: usr/local/www/services_captiveportal_zones_edit.php:64 +msgid "The zone name can only contain letters, digits, and underscores (_)." +msgstr "O nome da zone somente pode conter letras, números e sobre-linha (_)." + +#: usr/local/www/services_captiveportal_zones_edit.php:105 +#: usr/local/www/services_captiveportal_zones_edit.php:101 +msgid "Zone name. Can only contain letters, digits, and underscores (_)." +msgstr "Nome da Zona. Somente pode conter letras, números e sobrelinhas (_)." + +#: usr/local/www/diag_packet_capture.php:81 +msgid "Invalid interface." +msgstr "Interface inválida" + +#: usr/local/www/diag_packet_capture.php:84 +msgid "Invalid address family." +msgstr "Família de Endereço inválido." + +#: usr/local/www/diag_packet_capture.php:87 +msgid "Invalid protocol." +msgstr "procolo inválido." + +#: usr/local/www/diag_packet_capture.php:92 +#, fuzzy, php-format +msgid "A valid IP address or CIDR block must be specified. [%s]" +msgstr "Um endereço IP local válido deve ser especificado para %s." + +#: usr/local/www/diag_packet_capture.php:97 +msgid "Invalid value specified for port." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:104 +msgid "Invalid value specified for packet length." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:111 +msgid "Invalid value specified for packet count." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:148 +#: usr/local/www/vpn_ipsec_phase2.php:152 +#, fuzzy +msgid "A valid NAT local network bit count must be specified." +msgstr "Um contador de bits de rede local válido deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase2.php:150 +#: usr/local/www/vpn_ipsec_phase2.php:154 +msgid "You cannot configure a network type address for NAT while only an address type is selected for local source." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:153 +#: usr/local/www/vpn_ipsec_phase2.php:157 +#, fuzzy +msgid "A valid NAT local network IP address must be specified." +msgstr "Um endereço IP válido da rede local deve ser especificado." + +#: usr/local/www/vpn_ipsec_phase2.php:548 +#: usr/local/www/vpn_ipsec_phase2.php:569 +msgid "In case you need NAT/BINAT on this network specify the address to be translated" +msgstr "" + +#: usr/local/www/vpn_ipsec_keys_edit.php:114 +msgid "VPN: IPsec: Edit Pre-Shared Key" +msgstr "VPN: IPsec: Edite Chave Pré-Compartilhada" + +#: usr/local/www/services_dhcp_edit.php:227 +#: usr/local/www/services_dhcp_edit.php:355 +msgid "If an IPv4 address is entered, the address must be outside of the pool." +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:357 +#, fuzzy +msgid "If no IPv4 address is given, one will be dynamically allocated from the pool." +msgstr "Se nenhum endereço IP for dado, um será dinamicamente alocado do pool." + +#: usr/local/www/interfaces.php:2460 usr/local/www/interfaces.php:2490 +#: usr/local/www/interfaces.php:2536 usr/local/www/interfaces.php:2525 +#: usr/local/www/interfaces.php:2561 +msgid "WPA Pre-Shared Key" +msgstr "Chave Pré-Compartilhada WPA" + +#: usr/local/www/vpn_openvpn_client.php:789 +#: usr/local/www/vpn_openvpn_client.php:808 +msgid "This is the IPv6 virtual network used for private communications between this client and the server expressed using CIDR (eg. fe80::/64). The first network address is assumed to be the server address and the second network address will be assigned to the client virtual interface" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:803 +#, fuzzy +msgid "This is a network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote LAN here. You may leave this blank to only communicate with other clients" +msgstr "Essa é uma rede que será roteada através do túnel para que uma VPN site-to-site possa ser estabelecida sem modificar manualmente as tabelas de roteamento. Expressa como um intervalor CIDR. Se essa é uma VPN site-to-site, informe que a LAN remote. Você deve deixar isso em branco para somente comunicar-se com outros clientes" + +#: usr/local/www/vpn_openvpn_client.php:817 +msgid "This is an IPv6 network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the remote LAN here. You may leave this blank to only communicate with other clients" +msgstr "" + +#: usr/local/www/vpn_l2tp.php:301 usr/local/www/vpn_l2tp.php:304 +msgid "Enable L2TP server" +msgstr "Habilita servidor L2TP" + +#: usr/local/www/vpn_l2tp.php:322 usr/local/www/vpn_l2tp.php:325 +msgid "Server Address" +msgstr "Endereço do Servidor" + +#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_l2tp.php:337 +msgid "Remote Address Range" +msgstr "Faixa de endereço remoto" + +#: usr/local/www/vpn_l2tp.php:384 usr/local/www/vpn_l2tp.php:387 +msgid "Authentication Type" +msgstr "Tipo de Autenticação" + +#: usr/local/www/vpn_l2tp.php:429 usr/local/www/vpn_l2tp.php:432 +msgid "RADIUS Shared Secret" +msgstr "Chave compartilhada do RADIUS" + +#: usr/local/www/vpn_l2tp.php:436 usr/local/www/vpn_l2tp.php:439 +msgid "RADIUS Issued IP's" +msgstr "IP's emitidos do RADIUS" + +#: usr/local/www/firewall_virtual_ip_edit.php:126 +#: usr/local/www/firewall_virtual_ip_edit.php:128 +#, fuzzy +msgid "The /31 and /32 subnet mask are invalid for CARP IPs." +msgstr "A máscara de subrede /32 é inválida para IPs CARP." + +#: usr/local/www/firewall_virtual_ip_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:132 +#, fuzzy +msgid "The /127 and /128 subnet mask are invalid for CARP IPs." +msgstr "A máscara de rede /128 é inválida para IPs CARP." + +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +msgid "If you are using a GIF tunnel to connect to a Hurricane Electric (he.net) Tunnel Broker on a WAN with a dynamic IP, you may want to add a" +msgstr "" + +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +msgid "HE.net Tunnelbroker type DynDNS Entry" +msgstr "" + +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +msgid "to keep your tunnel functional when your IP changes." +msgstr "" + +#: usr/local/www/widgets/widgets/system_information.widget.php:102 +#: usr/local/www/widgets/widgets/system_information.widget.php:103 +#: usr/local/www/widgets/widgets/system_information.widget.php:101 +#: usr/local/www/widgets/widgets/system_information.widget.php:107 +#, fuzzy +msgid "Obtaining update status" +msgstr "Status de Download de Auto-Atualização" + +#: usr/local/www/vpn_ipsec_phase1.php:680 +#: usr/local/www/vpn_ipsec_phase1.php:701 +#, fuzzy +msgid "Input your Pre-Shared Key string" +msgstr "Insira sua string de chave pré-configurada" + +#: usr/local/www/diag_nanobsd.php:179 usr/local/www/diag_nanobsd.php:170 +msgid "Media Read/Write Status" +msgstr "Status da Media de Leitura/Escrita" + +#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:183 +msgid "Read/Write" +msgstr "Leitura/Escrita" + +#: usr/local/www/diag_nanobsd.php:194 usr/local/www/diag_nanobsd.php:185 +msgid "Switch to Read-Only" +msgstr "Alterar para somente-leitura" + +#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:187 +msgid "Read-Only" +msgstr "Somente-Leitura" + +#: usr/local/www/diag_nanobsd.php:198 usr/local/www/diag_nanobsd.php:189 +msgid "Switch to Read/Write" +msgstr "Alterar para Leitura/Escrita" + +#: usr/local/www/diag_nanobsd.php:201 usr/local/www/diag_nanobsd.php:192 +msgid "NOTE: This setting is only temporary, and can be switched dynamically in the background." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:208 usr/local/www/diag_nanobsd.php:199 +msgid "Keep media mounted read/write at all times." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:821 usr/local/www/services_dhcpv6.php:838 +#, fuzzy +msgid "Status: DHCPv6 leases" +msgstr "Concessões DHCPv6" + +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:307 +msgid "Rule" +msgstr "Regra" + +#: usr/local/www/system_firmware.php:55 +msgid "Standard Kernel" +msgstr "Kernel Padrão" + +#: usr/local/www/system_firmware.php:56 +msgid "Embedded Kernel" +msgstr "Kernel Embarcado" + +#: usr/local/www/vpn_l2tp.php:88 usr/local/www/vpn_pptp.php:96 +#, fuzzy +msgid "'Server address' parameter should NOT be set to any IP address currently in use on this firewall." +msgstr "NOTA: Este não deve ser definido para nenhum endereço IP atualmente em uso neste firewall " + +#: usr/local/www/system_camanager.php:220 +#: usr/local/www/system_certmanager.php:299 +#: usr/local/www/system_certmanager.php:301 +#, fuzzy +msgid "Please select a valid Key Length." +msgstr "Por favor, selecione um acelerador de Criptografia válido." + +#: usr/local/www/system_camanager.php:222 +#: usr/local/www/system_certmanager.php:303 +#, fuzzy +msgid "Please select a valid Digest Algorithm." +msgstr "Por favor, selecione um acelerador de Criptografia válido." + +#: usr/local/www/system_camanager.php:477 +#: usr/local/www/system_certmanager.php:690 +#: usr/local/www/system_certmanager.php:863 +#: usr/local/www/system_certmanager.php:691 +#: usr/local/www/system_certmanager.php:867 +msgid "Digest Algorithm" +msgstr "Algoritmo Digest" + +#: usr/local/www/system_camanager.php:489 +#: usr/local/www/system_certmanager.php:702 +#: usr/local/www/system_certmanager.php:875 +#: usr/local/www/system_certmanager.php:703 +#: usr/local/www/system_certmanager.php:879 +msgid "NOTE: It is recommended to use an algorithm stronger than SHA1 when possible." +msgstr "" + +#: usr/local/www/system_camanager.php:653 +#: usr/local/www/system_certmanager.php:1127 +#: usr/local/www/system_certmanager.php:1131 +msgid "Valid From" +msgstr "Válido de" + +#: usr/local/www/system_camanager.php:658 +#: usr/local/www/system_certmanager.php:1132 +#: usr/local/www/system_certmanager.php:1136 +msgid "Valid Until" +msgstr "Válido até" + +#: usr/local/www/services_captiveportal_ip_edit.php:107 +#, fuzzy +msgid "A valid subnet mask must be specified" +msgstr "Uma sub-rede externa válida deve ser especificada." + +#: usr/local/www/vpn_openvpn_client.php:160 +#: usr/local/www/vpn_openvpn_server.php:213 +msgid "Protocol and IP address families do not match. You cannot select an IPv6 protocol and an IPv4 IP address." +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:162 +#: usr/local/www/vpn_openvpn_server.php:215 +msgid "Protocol and IP address families do not match. You cannot select an IPv4 protocol and an IPv6 IP address." +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:164 +#: usr/local/www/vpn_openvpn_server.php:217 +msgid "An IPv4 protocol was selected, but the selected interface has no IPv4 address." +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:166 +#: usr/local/www/vpn_openvpn_server.php:219 +msgid "An IPv6 protocol was selected, but the selected interface has no IPv6 address." +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:818 +#: usr/local/www/vpn_openvpn_server.php:1252 +#, fuzzy +msgid "IPv4 Remote Network/s" +msgstr "Rede remota IPv4" + +#: usr/local/www/vpn_openvpn_client.php:822 +msgid "These are the IPv4 networks that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a comma-separated list of one or more CIDR ranges. If this is a site-to-site VPN, enter the remote LAN/s here. You may leave this blank to only communicate with other clients" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:832 +#: usr/local/www/vpn_openvpn_server.php:1266 +#, fuzzy +msgid "IPv6 Remote Network/s" +msgstr "Rede remota IPv6" + +#: usr/local/www/vpn_openvpn_client.php:836 +msgid "These are the IPv6 networks that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a comma-separated list of one or more IP/PREFIX. If this is a site-to-site VPN, enter the remote LAN/s here. You may leave this blank to only communicate with other clients" +msgstr "" + +#: usr/local/www/vpn_openvpn_client.php:909 +msgid "EXAMPLE:" +msgstr "EXEMPLO:" + +#: usr/local/www/status_openvpn.php:201 usr/local/www/status_openvpn.php:211 +msgid "Show Routing Table" +msgstr "Mostra tabela de roteamento" + +#: usr/local/www/status_openvpn.php:201 usr/local/www/status_openvpn.php:211 +msgid "Display OpenVPN's internal routing table for this server." +msgstr "" + +#: usr/local/www/status_openvpn.php:207 usr/local/www/status_openvpn.php:217 +msgid "Routing Table" +msgstr "Tabela de roteamento" + +#: usr/local/www/status_openvpn.php:216 usr/local/www/status_openvpn.php:226 +msgid "Target Network" +msgstr "Rede Alvo" + +#: usr/local/www/status_openvpn.php:217 usr/local/www/status_openvpn.php:227 +msgid "Last Used" +msgstr "Último Usado" + +#: usr/local/www/status_openvpn.php:239 usr/local/www/status_openvpn.php:249 +msgid "An IP address followed by C indicates a host currently connected through the VPN." +msgstr "" + +#: usr/local/www/diag_testport.php:49 usr/local/www/diag_testport.php:114 +#: usr/local/www/fbegin.inc:218 +msgid "Test Port" +msgstr "Teste de Porta" + +#: usr/local/www/diag_testport.php:64 +#, fuzzy +msgid "Please enter a valid IP or hostname." +msgstr "Host deve ser um hostname ou endereço IP válido." + +#: usr/local/www/diag_testport.php:68 +#, fuzzy +msgid "Please enter a valid port number." +msgstr "Um número de porta válido deve ser especificado. [%s]" + +#: usr/local/www/diag_testport.php:72 +msgid "Please enter a valid source port number, or leave the field blank." +msgstr "" + +#: usr/local/www/diag_testport.php:76 +msgid "You cannot connect to an IPv4 address using IPv6." +msgstr "" + +#: usr/local/www/diag_testport.php:79 +msgid "You cannot connect to an IPv6 address using IPv4." +msgstr "" + +#: usr/local/www/diag_testport.php:106 +msgid "This page allows you to perform a simple TCP connection test to determine if a host is up and accepting connections on a given port. This test does not function for UDP since there is no way to reliably determine if a UDP port accepts connections in this manner." +msgstr "" + +#: usr/local/www/diag_testport.php:108 +msgid "No data is transmitted to the remote host during this test, it will only attempt to open a connection and optionally display the data sent back from the server." +msgstr "" + +#: usr/local/www/diag_testport.php:132 +#, fuzzy +msgid "This should typically be left blank." +msgstr "Isto será usado se o campo for deixado em branco." + +#: usr/local/www/diag_testport.php:136 +msgid "Show Remote Text" +msgstr "Mostra texto remoto" + +#: usr/local/www/diag_testport.php:139 +msgid "Shows the text given by the server when connecting to the port. Will take 10+ seconds to display if checked." +msgstr "" + +#: usr/local/www/diag_testport.php:159 usr/local/www/diag_testport.php:161 +#: usr/local/www/diag_traceroute.php:104 usr/local/www/diag_ping.php:102 +msgid "IP Protocol" +msgstr "Protocolo IP" + +#: usr/local/www/diag_testport.php:166 usr/local/www/diag_testport.php:168 +msgid "IPv4" +msgstr "IPv4" + +#: usr/local/www/diag_testport.php:169 usr/local/www/diag_testport.php:171 +msgid "IPv6" +msgstr "IPv6" + +#: usr/local/www/diag_testport.php:173 usr/local/www/diag_testport.php:175 +msgid "If you force IPv4 or IPv6 and use a hostname that does not contain a result using that protocol, it will result in an error. For example if you force IPv4 and use a hostname that only returns an AAAA IPv6 IP address, it will not work." +msgstr "" + +#: usr/local/www/diag_testport.php:186 usr/local/www/diag_testport.php:188 +msgid "Port Test Results" +msgstr "Resultados do teste de Porta" + +#: usr/local/www/diag_testport.php:246 usr/local/www/diag_testport.php:248 +msgid "No output received, or connection failed. Try with \"Show Remote Text\" unchecked first." +msgstr "" + +#: usr/local/www/diag_testport.php:248 usr/local/www/diag_testport.php:250 +msgid "Connection failed (Refused/Timeout)" +msgstr "Conexão falhou (Recusada/Timeout)" + +#: usr/local/www/firewall_rules_edit.php:1295 +#: usr/local/www/firewall_nat_edit.php:780 +#: usr/local/www/firewall_nat_out_edit.php:647 +#: usr/local/www/firewall_rules_edit.php:1302 +#: usr/local/www/firewall_nat_edit.php:792 +#: usr/local/www/firewall_nat_out_edit.php:659 +#: usr/local/www/firewall_rules_edit.php:1301 +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_rules_edit.php:1349 +msgid "Hint: This prevents the rule on Master from automatically syncing to other CARP members. This does NOT prevent the rule from being overwritten on Slave." +msgstr "" + +#: usr/local/www/interfaces_qinq.php:68 +msgid "QinQ interface does not exist" +msgstr "" + +#: usr/local/www/interfaces_vlan_edit.php:84 +#, fuzzy +msgid "Interface supplied as parent is invalid" +msgstr "Protocolo fornecido inválido" + +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_firmware_settings.php:153 +#, php-format +msgid "Entries denoted by \"Current architecture\" match the architecture of your current installation, such as %s. Changing architectures during an upgrade is not recommended, and may require a manual reboot after the update completes." +msgstr "" + +#: usr/local/www/interfaces_lagg_edit.php:95 +#: usr/local/www/interfaces_lagg_edit.php:98 +#, fuzzy +msgid "Interface supplied as member is invalid" +msgstr "Protocolo fornecido inválido" + +#: usr/local/www/interfaces_lagg_edit.php:101 +msgid "Protocol supplied is invalid" +msgstr "Protocolo fornecido inválido" + +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_captiveportal_expire.php:73 +#: usr/local/www/status_captiveportal_vouchers.php:112 +#: usr/local/www/status_captiveportal.php:110 +#: usr/local/www/status_captiveportal_test.php:75 +#: usr/local/www/status_captiveportal_voucher_rolls.php:79 +msgid "Expire Vouchers" +msgstr "Vouchers expirados" + +#: usr/local/www/status_captiveportal_expire.php:86 +msgid "Enter multiple vouchers separated by space or newline. All valid vouchers will be marked as expired" +msgstr "" + +#: usr/local/www/firewall_nat_edit.php:835 +#: usr/local/www/firewall_nat_edit.php:847 +#: usr/local/www/firewall_nat_edit.php:848 +msgid "NOTE: The \"pass\" selection does not work properly with Multi-WAN. It will only work on an interface containing the default gateway." +msgstr "" + +#: usr/local/www/interfaces_vlan.php:71 +msgid "Invalid VLAN interface." +msgstr "Interface VLAN inválida" + +#: usr/local/www/interfaces_gif_edit.php:87 +msgid "The alias IP address family has to match the family of the remote peer address." +msgstr "" + +#: usr/local/www/services_dhcp_edit.php:193 +msgid "The IP address must not be within the range configured on a DHCP pool for this interface." +msgstr "O endereço IP não deve estar dentro do intervalo DHCP para essa interface." + +#: usr/local/www/services_dhcp_edit.php:388 +msgid "ARP Table Static Entry" +msgstr "Tabela de entradas estaticas ARP" + +#: usr/local/www/services_dhcp_edit.php:391 +msgid "Create an ARP Table Static Entry for this MAC & IP Address pair. " +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:117 +msgid "This IP address is being used by another interface or VIP." +msgstr "" + +#: usr/local/www/diag_traceroute.php:122 usr/local/www/diag_traceroute.php:141 +msgid "Reverse Address Lookup" +msgstr "DNS Lookup Reverso" + +#: usr/local/www/interfaces_bridge.php:70 +#, fuzzy +msgid "Invalid bridge interface." +msgstr "Interface Bridge" + +#: usr/local/www/diag_smart.php:339 +msgid "Perform Self-tests" +msgstr "Performance dos auto-testes" + +#: usr/local/www/diag_smart.php:384 +msgid "Self-test" +msgstr "Auto-teste" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1485 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1428 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1365 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1226 +msgid "Connections From Upstream SIP Server" +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1497 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1440 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1377 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1238 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1499 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1442 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1379 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1240 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1498 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1441 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1378 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1239 +msgid "Connections To Upstream SIP Server" +msgstr "" + +#: usr/local/www/vpn_pppoe_edit.php:149 +msgid "Wrong data submitted" +msgstr "Dados errados submetidos" + +#: usr/local/www/license.php:158 +msgid "1992-2012 The FreeBSD Project. All rights reserved" +msgstr "1992-2013 Projeto FreeBSD. Todos os direitos reservados" + +#: usr/local/www/license.php:161 +msgid "1999-2010 The PHP Group. All rights reserved." +msgstr "1999-2010 Grupo PHP. Todos os direitos reservados." + +#: usr/local/www/license.php:164 +msgid "2004, Jan Knescke, incremental" +msgstr "2004, Jan Knescke. incremental" + +#: usr/local/www/license.php:168 +msgid "2004-2012 Internet Software Consortium, Inc." +msgstr "2004-2012 Internet Software Consortium, Inc." + +#: usr/local/www/license.php:169 +msgid "1995-2003 Internet Software Consortium" +msgstr "1995-2003 Internet Software Consortium" + +#: usr/local/www/services_dhcp.php:352 usr/local/www/services_dhcp.php:372 +#: usr/local/www/services_dhcp.php:373 +msgid "The specified range must not be within the DHCP range for this interface." +msgstr "Especifique uma faixa que não deve estar na faixa de DHCP nesta interface." + +#: usr/local/www/services_dhcp.php:361 usr/local/www/services_dhcp.php:381 +#: usr/local/www/services_dhcp.php:382 +#, fuzzy +msgid "The specified range must not be within the range configured on a DHCP pool for this interface." +msgstr "Especifique uma faixa que não deve estar na faixa de DHCP nesta interface." + +#: usr/local/www/services_dhcp.php:713 usr/local/www/services_dhcp.php:733 +#: usr/local/www/services_dhcp.php:745 +msgid "Pool Description" +msgstr "Descrição do Pool" + +#: usr/local/www/services_dhcp.php:903 usr/local/www/services_dhcp.php:923 +#: usr/local/www/services_dhcp.php:935 +msgid "Leave blank to disable. Enter the interface IP address of the other machine. Machines must be using CARP. Interface's advskew determines whether the DHCPd process is Primary or Secondary. Ensure one machine's advskew<20 (and the other is >20)." +msgstr "" + +#: usr/local/www/services_dhcp.php:946 usr/local/www/services_dhcp.php:966 +#: usr/local/www/services_dhcp.php:978 +#, fuzzy +msgid "" +"By default DHCP leases are displayed in UTC time. By checking this\n" +"\t\t\t\t\t\tbox DHCP lease time will be displayed in local time and set to time zone selected. This will be used for all DHCP interfaces lease time." +msgstr "" +"Por DHCP padrão arrendamentos são exibidas em tempo UTC. Ao marcar esta \n" +"\t\t\t\t\t\tcaixa tempo de concessão DHCP será exibida no horário local e definir a zona de tempo selecionado. Isso será usado para todos os tempos interfaces de DHCP locação." + +#: usr/local/www/services_dhcp.php:1146 usr/local/www/services_dhcp.php:1166 +#: usr/local/www/services_dhcp.php:1178 +#, fuzzy +msgid "DHCP Static Mappings for this interface." +msgstr "Registrar mapeamentos estáticos DHCP no DNS forwarder" + +#: usr/local/www/diag_system_pftop.php:133 +msgid "View type:" +msgstr "Tipo de Visualização:" + +#: usr/local/www/diag_system_pftop.php:136 +msgid "Label" +msgstr "Etiqueta" + +#: usr/local/www/diag_system_pftop.php:141 +msgid "Speed" +msgstr "Velocidade" + +#: usr/local/www/diag_system_pftop.php:150 +msgid "Age" +msgstr "Idade" + +#: usr/local/www/diag_system_pftop.php:151 +msgid "Bytes" +msgstr "Bytes" + +#: usr/local/www/diag_system_pftop.php:152 +msgid "Destination Address" +msgstr "Endereço de Destino" + +#: usr/local/www/diag_system_pftop.php:154 +msgid "Expiry" +msgstr "Expirado" + +#: usr/local/www/diag_system_pftop.php:156 +msgid "Peak" +msgstr "Pico" + +#: usr/local/www/diag_system_pftop.php:157 +msgid "Packet" +msgstr "Pacote" + +#: usr/local/www/diag_system_pftop.php:161 usr/local/www/diag_testport.php:143 +#: usr/local/www/diag_traceroute.php:113 usr/local/www/diag_ping.php:111 +msgid "Source Address" +msgstr "Endereço de Origem" + +#: usr/local/www/diag_system_pftop.php:166 +msgid "Number of States:" +msgstr "Número de Estados:" + +#: usr/local/www/system_advanced_misc.php:357 +#: usr/local/www/system_advanced_misc.php:404 +#: usr/local/www/system_advanced_misc.php:410 +msgid "On AC Power Mode" +msgstr "Em modo Ligado" + +#: usr/local/www/system_advanced_misc.php:365 +#: usr/local/www/system_advanced_misc.php:412 +#: usr/local/www/system_advanced_misc.php:418 +msgid "On Battery Power Mode" +msgstr "Em modo bateria" + +#: usr/local/www/bandwidth_by_ip.php:24 +msgid "Wrong Interface" +msgstr "Interface errada" + +#: usr/local/www/services_dhcpv6.php:601 +msgid "Prefix Delegation Size" +msgstr "Tamanho do prefixo de Delegação" + +#: usr/local/www/services_dhcpv6.php:846 +#, fuzzy +msgid "DHCPv6 Static Mappings for this interface." +msgstr "Mapeamento DHCPv6 estático" + +#: usr/local/www/system_authservers.php:217 +#: usr/local/www/system_authservers.php:219 +#, fuzzy +msgid "RADIUS Timeout value must be numeric and positive." +msgstr "Timeout deve ser um valor numérico" + +#: usr/local/www/system_authservers.php:731 +#: usr/local/www/system_authservers.php:773 +msgid "Authentication Timeout" +msgstr "Limite de tempo de Autenticação" + +#: usr/local/www/system_authservers.php:734 +#: usr/local/www/system_authservers.php:776 +msgid "This value controls how long, in seconds, that the RADIUS server may take to respond to an authentication request." +msgstr "" + +#: usr/local/www/system_authservers.php:735 +#: usr/local/www/system_authservers.php:777 +#, fuzzy +msgid "If left blank, the default value is 5 seconds." +msgstr "NOTA: Se deixar em branco e um dominio padrão é definido, ele irá ser usado para esse valor." + +#: usr/local/www/system_authservers.php:736 +#: usr/local/www/system_authservers.php:778 +msgid "NOTE: If you are using an interactive two-factor authentication system, increase this timeout to account for how long it will take the user to receive and enter a token." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:80 +#: usr/local/www/system_advanced_firewall.php:82 +msgid "The Firewall Adaptive values must be set together." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:82 +#: usr/local/www/system_advanced_firewall.php:84 +#, fuzzy +msgid "The Firewall Adaptive Start value must be an integer." +msgstr "O valor de estado máximo do Firewall deve ser um inteiro." + +#: usr/local/www/system_advanced_firewall.php:85 +#: usr/local/www/system_advanced_firewall.php:87 +#, fuzzy +msgid "The Firewall Adaptive End value must be an integer." +msgstr "O valor de Máximo de Tabelas de Firewall deve ser um inteiro." + +#: usr/local/www/system_advanced_firewall.php:345 +#: usr/local/www/system_advanced_firewall.php:346 +#: usr/local/www/system_advanced_firewall.php:357 +#, fuzzy +msgid "Firewall Adaptive Timeouts" +msgstr "Adaptável" + +#: usr/local/www/system_advanced_firewall.php:347 +#: usr/local/www/system_advanced_firewall.php:348 +#: usr/local/www/system_advanced_firewall.php:359 +msgid "Timeouts for states can be scaled adaptively as the number of state table entries grows." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:350 +#: usr/local/www/system_advanced_firewall.php:351 +#: usr/local/www/system_advanced_firewall.php:362 +msgid "When the number of state entries exceeds this value, adaptive scaling begins. All timeout values are scaled linearly with factor (adaptive.end - number of states) / (adaptive.end - adaptive.start)." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:354 +#: usr/local/www/system_advanced_firewall.php:355 +#: usr/local/www/system_advanced_firewall.php:366 +msgid "When reaching this number of state entries, all timeout values become zero, effectively purging all state entries immediately. This value is used to define the scale factor, it should not actually be reached (set a lower state limit, see below)." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:356 +#: usr/local/www/system_advanced_firewall.php:357 +#: usr/local/www/system_advanced_firewall.php:368 +#, fuzzy +msgid "Note: Leave this blank for the default(0)." +msgstr "Nota: Deixe isso em branco para o padrão." + +#: usr/local/www/system_advanced_firewall.php:447 +#: usr/local/www/system_advanced_firewall.php:448 +#: usr/local/www/system_advanced_firewall.php:469 +#, fuzzy +msgid "Bogon Networks" +msgstr "Bloquear redes bogon" + +#: usr/local/www/system_advanced_firewall.php:450 +#: usr/local/www/system_advanced_firewall.php:451 +#: usr/local/www/system_advanced_firewall.php:472 +msgid "Update Frequency" +msgstr "Frequencia de atualização" + +#: usr/local/www/system_advanced_firewall.php:453 +#: usr/local/www/system_advanced_firewall.php:454 +#: usr/local/www/system_advanced_firewall.php:475 +msgid "Monthly" +msgstr "Mensalmente" + +#: usr/local/www/system_advanced_firewall.php:454 +#: usr/local/www/system_advanced_firewall.php:455 +#: usr/local/www/system_advanced_firewall.php:476 +msgid "Weekly" +msgstr "Semanalmente" + +#: usr/local/www/system_advanced_firewall.php:455 +#: usr/local/www/system_advanced_firewall.php:456 +#: usr/local/www/system_advanced_firewall.php:477 +msgid "Daily" +msgstr "Diariamente" + +#: usr/local/www/system_advanced_firewall.php:458 +#: usr/local/www/system_advanced_firewall.php:459 +#: usr/local/www/system_advanced_firewall.php:480 +msgid "The frequency of updating the lists of IP addresses that are reserved (but not RFC 1918) or not yet assigned by IANA." +msgstr "" + +#: usr/local/www/services_captiveportal.php:227 +#: usr/local/www/services_captiveportal.php:243 +msgid "The NAS-Identifier must be 3-253 characters long and should only contain ASCII characters." +msgstr "" + +#: usr/local/www/services_captiveportal.php:593 +#: usr/local/www/services_captiveportal.php:609 +msgid "Allow only users/groups with 'Captive portal login' privilege set" +msgstr "Permite somente usuários/grupos com previlegios de \"Login de Captive Portal\"" + +#: usr/local/www/services_captiveportal.php:760 +#: usr/local/www/services_captiveportal.php:776 +#, fuzzy +msgid "MAC authentication secret" +msgstr "Segredo Compartilhado do Servidor de Autenticação 802.1X" + +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:839 +msgid "Accounting Style" +msgstr "Estilo de contabilidade" + +#: usr/local/www/services_captiveportal.php:824 +#: usr/local/www/services_captiveportal.php:840 +msgid "Invert Acct-Input-Octets and Acct-Output-Octets" +msgstr "" + +#: usr/local/www/services_captiveportal.php:825 +#: usr/local/www/services_captiveportal.php:841 +msgid "When this is enabled, data counts for RADIUS accounting packets will be taken from the client perspective, not the NAS. Acct-Input-Octets will represent download, and Acct-Output-Octets will represent upload." +msgstr "" + +#: usr/local/www/services_captiveportal.php:829 +#: usr/local/www/services_captiveportal.php:845 +msgid "NAS Identifier" +msgstr "Identificador NAS" + +#: usr/local/www/services_captiveportal.php:831 +#: usr/local/www/services_captiveportal.php:847 +msgid "Specify a NAS identifier to override the default value" +msgstr "" + +#: usr/local/www/pkg_mgr_install.php:193 usr/local/www/pkg_mgr_install.php:189 +msgid "No packages are installed." +msgstr "Nenhum pacote instalado." + +#: usr/local/www/interfaces_bridge_edit.php:154 +msgid "A member interface passed does not exist in configuration" +msgstr "" + +#: usr/local/www/status_queues.php:150 usr/local/www/status_queues.php:172 +msgid "PPS" +msgstr "PPS" + +#: usr/local/www/status_queues.php:152 usr/local/www/status_queues.php:174 +msgid "Borrows" +msgstr "Emprestimos" + +#: usr/local/www/status_queues.php:153 usr/local/www/status_queues.php:175 +msgid "Suspends" +msgstr "Suspensos" + +#: usr/local/www/status_queues.php:154 usr/local/www/status_queues.php:176 +msgid "Drops" +msgstr "Descartados" + +#: usr/local/www/status_queues.php:155 usr/local/www/status_queues.php:177 +msgid "Length" +msgstr "Tamanho" + +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:51 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:78 +msgid "Int." +msgstr "int." + +#: usr/local/www/widgets/widgets/log.widget.php:164 +#: usr/local/www/widgets/widgets/log.widget.php:168 +#: usr/local/www/widgets/widgets/log.widget.php:169 +msgid "IF" +msgstr "SE" + +#: usr/local/www/widgets/widgets/log.widget.php:167 +#: usr/local/www/widgets/widgets/log.widget.php:171 +msgid "Prot" +msgstr "Prot." + +#: usr/local/www/services_dnsmasq.php:199 +#: usr/local/www/services_dnsmasq.php:201 +#: usr/local/www/services_dnsmasq.php:222 +#, fuzzy +msgid "DNS Query Forwarding" +msgstr "encaminhando" + +#: usr/local/www/services_dnsmasq.php:202 +#: usr/local/www/services_dnsmasq.php:204 +#: usr/local/www/services_dnsmasq.php:225 +#, fuzzy +msgid "Query DNS servers sequentially" +msgstr "Servidores DNS" + +#: usr/local/www/services_dnsmasq.php:203 +#: usr/local/www/services_dnsmasq.php:205 +#: usr/local/www/services_dnsmasq.php:226 +#, php-format +msgid "If this option is set, %s DNS Forwarder (dnsmasq) will query the DNS servers sequentially in the order specified (System - General Setup - DNS Servers), rather than all at once in parallel. " +msgstr "" + +#: usr/local/www/services_dnsmasq.php:212 +#: usr/local/www/services_dnsmasq.php:214 +#: usr/local/www/services_dnsmasq.php:235 +msgid "Require domain" +msgstr "Requer dominio" + +#: usr/local/www/services_dnsmasq.php:213 +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_dnsmasq.php:236 +#, php-format +msgid "If this option is set, %s DNS Forwarder (dnsmasq) will not forward A or AAAA queries for plain names, without dots or domain parts, to upstream name servers. If the name is not known from /etc/hosts or DHCP then a \"not found\" answer is returned. " +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:183 +msgid "A valid remote gateway IPv4 address must be specified or you need to change protocol to IPv6" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:185 +msgid "A valid remote gateway IPv6 address must be specified or you need to change protocol to IPv4" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:205 +msgid "There is a Phase 2 using IPv6, you cannot use IPv4." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase1.php:209 +msgid "There is a Phase 2 using IPv4, you cannot use IPv6." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1226 +msgid "IPv4 Local Network/s" +msgstr "Rede(s) local(is) IPv4" + +#: usr/local/www/vpn_openvpn_server.php:1230 +msgid "These are the IPv4 networks that will be accessible from the remote endpoint. Expressed as a comma-separated list of one or more CIDR ranges. You may leave this blank if you don't want to add a route to the local network through this tunnel on the remote machine. This is generally set to your LAN network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1239 +msgid "IPv6 Local Network/s" +msgstr "Rede(s) local(is) IPv6" + +#: usr/local/www/vpn_openvpn_server.php:1243 +msgid "These are the IPv6 networks that will be accessible from the remote endpoint. Expressed as a comma-separated list of one or more IP/PREFIX. You may leave this blank if you don't want to add a route to the local network through this tunnel on the remote machine. This is generally set to your LAN network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1256 +msgid "These are the IPv4 networks that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a comma-separated list of one or more CIDR ranges. If this is a site-to-site VPN, enter the remote LAN/s here. You may leave this blank if you don't want a site-to-site VPN" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1270 +msgid "These are the IPv6 networks that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a comma-separated list of one or more IP/PREFIX. If this is a site-to-site VPN, enter the remote LAN/s here. You may leave this blank if you don't want a site-to-site VPN" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1405 +msgid "Topology" +msgstr "Topologia" + +#: usr/local/www/vpn_openvpn_server.php:1415 +msgid "Allocate only one IP per client (topology subnet), rather than an isolated subnet per client (topology net30)." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1422 +msgid "Relevant when supplying a virtual adapter IP address to clients when using tun mode on IPv4." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1423 +msgid "Some clients may require this even for IPv6, such as OpenVPN Connect (iOS/Android). Others may break if it is present, such as older versions of OpenVPN or clients such as Yealink phones." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:133 +msgid "A valid local network IPv4 address must be specified or you need to change Mode to IPv6" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:135 +msgid "A valid local network IPv6 address must be specified or you need to change Mode to IPv4" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:159 +msgid "A valid NAT local network IPv4 address must be specified or you need to change Mode to IPv6" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:161 +msgid "A valid NAT local network IPv6 address must be specified or you need to change Mode to IPv4" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:183 +msgid "A valid remote network IPv4 address must be specified or you need to change Mode to IPv6" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:185 +msgid "A valid remote network IPv6 address must be specified or you need to change Mode to IPv4" +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:192 +msgid "Mobile IPsec only supports Tunnel mode." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:287 +msgid "Phase 1 is using IPv4. You cannot use Tunnel IPv6 on Phase 2." +msgstr "" + +#: usr/local/www/vpn_ipsec_phase2.php:289 +msgid "Phase 1 is using IPv6. You cannot use Tunnel IPv4 on Phase 2." +msgstr "" + +#: usr/local/www/interfaces_assign.php:210 +#, php-format +msgid "You cannot set port %s to interface %s because this interface is a member of %s." +msgstr "" + +#: usr/local/www/services_snmp.php:395 +msgid "UCD" +msgstr "UCD" + +#: usr/local/www/services_snmp.php:397 +msgid "Regex" +msgstr "Regex" + +#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:560 +#: usr/local/www/interfaces.php:556 usr/local/www/interfaces.php:559 +msgid "This IPv4 address is being used by another interface or VIP." +msgstr "" + +#: usr/local/www/interfaces.php:557 usr/local/www/interfaces.php:565 +#: usr/local/www/interfaces.php:561 usr/local/www/interfaces.php:564 +msgid "This IPv4 address conflicts with a Static Route." +msgstr "" + +#: usr/local/www/interfaces.php:568 usr/local/www/interfaces.php:577 +#: usr/local/www/interfaces.php:573 usr/local/www/interfaces.php:576 +msgid "This IPv6 address is being used by another interface or VIP." +msgstr "" + +#: usr/local/www/interfaces.php:572 usr/local/www/interfaces.php:582 +#: usr/local/www/interfaces.php:578 usr/local/www/interfaces.php:581 +msgid "This IPv6 address conflicts with a Static Route." +msgstr "" + +#: usr/local/www/interfaces.php:2651 usr/local/www/interfaces.php:2697 +#: usr/local/www/interfaces.php:2686 usr/local/www/interfaces.php:2722 +msgid "Note: The update frequency can be changed under System->Advanced Firewall/NAT settings." +msgstr "" + +#: etc/inc/priv/user.priv.inc:6 +msgid "User - Services - Captive portal login" +msgstr "Usuários - Serviços - Login Captive Portal" + +#: etc/inc/priv/user.priv.inc:7 +#, fuzzy +msgid "Indicates whether the user is able to login on the captive portal." +msgstr "Indica se esse usuário pode fazer login, por exemplo, via SSH." + +#: etc/inc/pkg-utils.inc:617 etc/inc/pkg-utils.inc:618 +#, fuzzy, php-format +msgid "Package %s is not supported on this version." +msgstr "Versão do Pacote" + +#: etc/inc/priv.defs.inc:732 +msgid "WebCfg - Services: Captive portal: Allowed Hostnames page" +msgstr "WebCfg - Serviços: Captive portal: Hostnames Permitidos" + +#: etc/inc/priv.defs.inc:733 etc/inc/priv.defs.inc:739 +msgid "Allow access to the 'Services: Captive portal: Allowed Hostnames' page." +msgstr "Permite acesso a página 'Serviços: Captive porta: Hostnames Permitidos'" + +#: etc/inc/priv.defs.inc:738 +msgid "WebCfg - Services: Captive portal: Edit Allowed Hostnames page" +msgstr "WebCfg - Serviços: Captive portal: Edita Hostnames permitidos" + +#: etc/inc/priv.defs.inc:1136 +#, fuzzy +msgid "WebCfg - System: User Manager: settings page" +msgstr "WebCfg - Sistema: Gerenciador de Usuários: Página de Configurações" + +#: etc/inc/priv.defs.inc:1137 +#, fuzzy +msgid "Allow access to the 'System: User Manager: settings' page." +msgstr "Permitir acesso à página 'Sistema: Gerenciador de usuários: Página deConfigurações'." + +#: etc/inc/interfaces.inc:294 +#, fuzzy, php-format +msgid "interface_qinq_configure called with invalid if.%s" +msgstr "interface_qinq_configure called with if undefined.%s" + +#: etc/inc/interfaces.inc:401 +#, fuzzy +msgid "Creating wireless clone interfaces..." +msgstr "Criando outras interfaces clones sem fio..." + +#: etc/inc/interfaces.inc:1139 etc/inc/interfaces.inc:1141 +msgid "Wrong parameters used during interface_bring_down" +msgstr "" + +#: etc/inc/services.inc:2013 etc/inc/services.inc:2053 +#: etc/inc/services.inc:2084 etc/inc/services.inc:2148 +#: etc/inc/services.inc:2198 +#, php-format +msgid "Removed cron job for %s" +msgstr "Removido entrada cron para %s" + +#: etc/inc/openvpn.inc:257 +#, fuzzy, php-format +msgid "The field '%s' must contain a single valid %s CIDR range." +msgstr "O campo '%s' deve conter um intervalo CIDR válido." + +#: etc/inc/openvpn.inc:269 +#, php-format +msgid "The field '%s' must contain only valid %s CIDR range(s) separated by commas." +msgstr "" + +#: etc/inc/vpn.inc:1780 etc/inc/vpn.inc:1793 etc/inc/vpn.inc:1790 +#: etc/inc/vpn.inc:1792 +#, php-format +msgid "Removing SPDs from tunnel gw '%1$s'. Local Subnet '%2$s' and Remote Subnet '%3$s'. Reloading policy" +msgstr "Removendo SPDs do túnel gw '%1$s'. Subrede local '%2$s' e Subrede remota '%3$s'. Recarregando politica" + +#: etc/inc/pfsense-utils.inc:938 +msgid "Disabling auto login was not possible." +msgstr "Desabilitar auto-login não é possivel." + +#: etc/inc/pfsense-utils.inc:956 +msgid "Enabled console auto login, console menu is NOT password protected." +msgstr "Habilita auto login do console, menu de console NÃO é protegido por senha." + +#: etc/inc/pfsense-utils.inc:958 +msgid "Disabled console auto login, console menu is password protected." +msgstr "Desabilita auto login do console, o menu de console é protegido por senha." + +#: usr/local/www/system_gateways_edit.php:552 +#: usr/local/www/system_gateways_edit.php:582 +msgid " - Show advanced option" +msgstr " - Mostra opções avançada" + +#: usr/local/www/services_dyndns_edit.php:302 +#: usr/local/www/services_dyndns_edit.php:303 +msgid "Verbose logging" +msgstr "Log verboso" + +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/services_dyndns_edit.php:306 +msgid "verbose logging" +msgstr "log verboso" + +#: usr/local/www/status_openvpn.php:278 usr/local/www/status_openvpn.php:339 +msgid "Bytes Rcvd" +msgstr "Bytes Receb." + +#: usr/local/www/status_openvpn.php:385 +msgid "If you have custom options that override the management features of OpenVPN on a client or server, they will cause that OpenVPN instance to not work correctly with this status page." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1579 +#: usr/local/www/firewall_nat_edit.php:863 +#: usr/local/www/firewall_nat_out_edit.php:678 +#: usr/local/www/firewall_rules_edit.php:1590 +#: usr/local/www/firewall_nat_edit.php:864 +#: usr/local/www/firewall_rules_edit.php:1638 +msgid "Rule Information" +msgstr "Informação de Regra" + +#: usr/local/www/firewall_rules_edit.php:1583 +#: usr/local/www/firewall_nat_edit.php:867 +#: usr/local/www/firewall_nat_out_edit.php:682 +#: usr/local/www/firewall_rules_edit.php:1594 +#: usr/local/www/firewall_nat_edit.php:868 +#: usr/local/www/firewall_rules_edit.php:1642 +msgid "Created" +msgstr "Criado" + +#: usr/local/www/firewall_rules_edit.php:1591 +#: usr/local/www/firewall_nat_edit.php:875 +#: usr/local/www/firewall_nat_out_edit.php:690 +#: usr/local/www/firewall_rules_edit.php:1602 +#: usr/local/www/firewall_nat_edit.php:876 +#: usr/local/www/firewall_rules_edit.php:1650 +msgid "Updated" +msgstr "Atualizado" + +#: usr/local/www/diag_logs_filter.php:163 +msgid "Source IP Address" +msgstr "Endereço IP de origem" + +#: usr/local/www/diag_logs_filter.php:175 +#: usr/local/www/diag_logs_filter.php:255 +msgid "Quantity" +msgstr "Quantidade" + +#: usr/local/www/diag_logs_filter.php:185 +msgid "Destination IP Address" +msgstr "Endereço IP de Destino" + +#: usr/local/www/diag_logs_filter.php:193 +msgid "Protocol Flags" +msgstr "Protocolos Marcados" + +#: usr/local/www/diag_logs_filter.php:203 +#: usr/local/www/diag_logs_filter.php:266 +#, php-format +msgid "Matches %1$s regular expression%2$s." +msgstr "" + +#: usr/local/www/diag_logs_filter.php:204 +msgid "Precede with exclamation (!) as first character to exclude match." +msgstr "" + +#: usr/local/www/diag_logs_filter.php:251 +msgid "Filter expresion" +msgstr "Expressão de Filtro" + +#: usr/local/www/diag_dump_states.php:136 +msgid "Current total state count" +msgstr "Contagem atual total do estado" + +#: usr/local/www/diag_dump_states.php:218 +msgid "States matching current filter" +msgstr "Atual estados correspondentes ao filtro" + +#: usr/local/www/firewall_nat_edit.php:417 +msgid "NAT Port Forward" +msgstr "Redirecionamento de Porta NAT" + +#: usr/local/www/status_graph.php:242 +msgid "Host Name or IP" +msgstr "Nome de host ou IP" + +#: usr/local/www/interfaces_gif_edit.php:210 +msgid "ECN friendly behavior" +msgstr "comportamento amigável ECN" + +#: usr/local/www/firewall_virtual_ip_edit.php:146 +#, fuzzy +msgid "You cannot use the network address for this VIP" +msgstr "Você não pode usar o endereço da rede no início do intervalo da subrede." + +#: usr/local/www/firewall_virtual_ip_edit.php:148 +#, fuzzy +msgid "You cannot use the broadcast address for this VIP" +msgstr "Você não pode usar o endereço de broadcast no final do intervalo de subrede." + +#: usr/local/www/diag_packet_capture.php:204 +msgid "Promiscuous" +msgstr "Promiscuo" + +#: usr/local/www/diag_packet_capture.php:207 +msgid "If checked, the" +msgstr "se checado, o" + +#: usr/local/www/diag_packet_capture.php:207 +msgid "packet capture" +msgstr "captura de pacote" + +#: usr/local/www/diag_packet_capture.php:207 +msgid "will be performed using promiscuous mode." +msgstr "serão realizadas usando modo promiscuo." + +#: usr/local/www/diag_packet_capture.php:208 +msgid "Some network adapters do not support or work well in promiscuous mode." +msgstr "" + +#: usr/local/www/diag_traceroute.php:72 usr/local/www/diag_ping.php:67 +msgid "When using IPv4, the target host must be an IPv4 address or hostname." +msgstr "" + +#: usr/local/www/diag_traceroute.php:74 usr/local/www/diag_ping.php:69 +msgid "When using IPv6, the target host must be an IPv6 address or hostname." +msgstr "" + +#: usr/local/www/diag_traceroute.php:164 +msgid "Using a source interface/IP address that does not match selected type (IPv4, IPv6) will result in an error or empty output." +msgstr "" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1472 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1493 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1507 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1524 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1543 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1567 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1594 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1647 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1416 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1436 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1450 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1467 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1486 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1510 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1589 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1352 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1373 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1387 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1403 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1422 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1446 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1473 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1526 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1213 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1234 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1248 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1265 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1284 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1308 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1335 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1388 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1471 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1492 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1506 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1523 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1566 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1593 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1646 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1415 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1435 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1449 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1466 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1485 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1509 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1588 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1351 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1372 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1386 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1402 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1421 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1445 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1472 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1525 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1212 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1233 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1247 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1264 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1283 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1307 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1334 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1387 +msgid "Traffic Shaper Wizard" +msgstr "Traffic Shaper Wizard" + +#: usr/local/www/wizards/openvpn_wizard.inc:614 +#: usr/local/www/wizards/openvpn_wizard.inc:629 +msgid "OpenVPN Wizard" +msgstr "OpenVPN Wizard" + +#: usr/local/www/services_dhcp.php:274 usr/local/www/services_dhcp.php:275 +#, php-format +msgid "The Captive Portal zone '%s' has Hard Timeout parameter set to a value bigger than Default lease time (%s)." +msgstr "" + +#: usr/local/www/system_certmanager.php:1026 +msgid "Signing request data" +msgstr "Assinatura de dados pedido" + +#: usr/local/www/system_certmanager.php:1034 +msgid "Final certificate data" +msgstr "Dados do certificado final" + +#: usr/local/www/system_advanced_admin.php:447 +#: usr/local/www/system_advanced_admin.php:468 +#, fuzzy +msgid "When this is unchecked, access to the webConfigurator is protected against HTTP_REFERER redirection attempts. Check this box to disable this protection if you find that it interferes with webConfigurator access in certain corner cases such as using external scripts to interact with this system. More information on HTTP_REFERER is available from Wikipedia." +msgstr "Quando isso não estiver marcado, acesso ao webConfigurator está protegido contra tentativas de redirecionamento HTTP_REFERER. Marque essa caixa para desabilitar essa proteção se achar que isso interfere com o acesso ao webConfigurator em alguns casos específicos tais como quando usando scripts de terceiros para interagir com o pfSense. Mais informações sobre HTTP_REFERER estão disponíveis em Wikipedia." + +#: usr/local/www/system_advanced_misc.php:105 +#: usr/local/www/system_advanced_misc.php:106 +msgid "/tmp Size must be numeric and should not be less than 40MB." +msgstr "Tamanho do /tmp deve ser número e não deve ser menor que 40Mb" + +#: usr/local/www/system_advanced_misc.php:108 +#: usr/local/www/system_advanced_misc.php:109 +msgid "/var Size must be numeric and should not be less than 60MB." +msgstr "Tamanho do /var deve ser número e não deve ser menor que 60Mb" + +#: usr/local/www/system_advanced_misc.php:558 +#: usr/local/www/system_advanced_misc.php:576 +msgid "Skip rules when gateway is down" +msgstr "Pule regras quando o gateway estiver caído" + +#: usr/local/www/system_advanced_misc.php:562 +#: usr/local/www/system_advanced_misc.php:580 +msgid "By default, when a rule has a specific gateway set, and this gateway is down, rule is created and traffic is sent to default gateway.This option overrides that behavior and the rule is not created when gateway is down" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:568 +#: usr/local/www/system_advanced_misc.php:586 +msgid "RAM Disk Settings (Reboot to Apply Changes)" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:572 +#: usr/local/www/system_advanced_misc.php:590 +msgid "Use RAM Disks" +msgstr "Use discos RAM" + +#: usr/local/www/system_advanced_misc.php:575 +#: usr/local/www/system_advanced_misc.php:593 +msgid "Use memory file system for /tmp and /var" +msgstr "" + +#: usr/local/www/system_advanced_misc.php:576 +#: usr/local/www/system_advanced_misc.php:594 +msgid "Set this if you wish to use /tmp and /var as RAM disks (memory file system disks) on a full install rather than use the hard disk. Setting this will cause the data in /tmp and /var to be lost at reboot, including log data. RRD and DHCP Leases will be retained." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:582 +#: usr/local/www/system_advanced_misc.php:600 +msgid "/tmp RAM Disk Size" +msgstr "Tamanho do disco RAM /tmp" + +#: usr/local/www/system_advanced_misc.php:586 +#: usr/local/www/system_advanced_misc.php:604 +msgid "Set the size, in MB, for the /tmp RAM disk. Leave blank for 40MB. Do not set lower than 40." +msgstr "Configure o tamanho, em MB, para o disco RAM /tmp. Deixe em branco para 40Mb. Não configure valor melhor que 40." + +#: usr/local/www/system_advanced_misc.php:591 +#: usr/local/www/system_advanced_misc.php:609 +msgid "/var RAM Disk Size" +msgstr "Tamanho do disco RAM /var" + +#: usr/local/www/system_advanced_misc.php:595 +#: usr/local/www/system_advanced_misc.php:613 +msgid "Set the size, in MB, for the /var RAM disk. Leave blank for 60MB. Do not set lower than 60." +msgstr "Configure o tamanho, em MB, para o disco RAM /var. Deixe em branco para 60Mb. Não configure valor melhor que 60." + +#: usr/local/www/system_advanced_misc.php:600 +#: usr/local/www/system_advanced_misc.php:618 +msgid "Periodic RRD Backup" +msgstr "Backup periodico do RRD" + +#: usr/local/www/system_advanced_misc.php:616 +#: usr/local/www/system_advanced_misc.php:634 +msgid "Periodic DHCP Leases Backup" +msgstr "Backup periodico das listas DHCP" + +#: usr/local/www/system_routes_edit.php:132 +#: usr/local/www/system_routes_edit.php:134 +#, php-format +msgid "The alias (%s) has one or more FQDNs configured and cannot be used to configure a static route." +msgstr "" + +#: usr/local/www/system_routes_edit.php:179 +#: usr/local/www/system_routes_edit.php:186 +#: usr/local/www/system_routes_edit.php:181 +#: usr/local/www/system_routes_edit.php:188 +#: usr/local/www/system_routes_edit.php:183 +#: usr/local/www/system_routes_edit.php:190 +#, php-format +msgid "This network conflicts with address configured on interface %s." +msgstr "Esta rede conflita com o endereço configurado na interface %s." + +#: usr/local/www/firewall_nat_out.php:117 +#: usr/local/www/firewall_nat_out.php:128 +#: usr/local/www/firewall_nat_out.php:141 +#: usr/local/www/firewall_nat_out.php:157 +#: usr/local/www/firewall_nat_out.php:178 +#: usr/local/www/firewall_nat_out.php:199 +#: usr/local/www/firewall_nat_out.php:214 +msgid "Manual Outbound NAT Switch" +msgstr "Alteração Manual de Saída de NAT" + +#: usr/local/www/system_gateway_groups_edit.php:100 +#, fuzzy +msgid "Changing name on a gateway group is not allowed." +msgstr "Mudança de nome de gateway não é permitido." + +#: usr/local/www/system_gateway_groups_edit.php:150 +msgid "Edit gateway group" +msgstr "Edita grupo de gateway" + +#: usr/local/www/system_gateway_groups_edit.php:229 +#, fuzzy +msgid "Edit gateway group entry" +msgstr "Edita grupo de gateway" + +#: usr/local/www/system_gateway_groups_edit.php:317 +#, fuzzy +msgid "The virtual IP field selects what (virtual) IP should be used when this group applies to a local Dynamic DNS, IPsec or OpenVPN endpoint" +msgstr "O campo IP virtual seleciona qual IP (virtual) deve ser usado quando este grupo se aplica a um Dyndns, IPsec ou OpenVPN local" + +#: usr/local/www/services_captiveportal.php:198 +msgid "Hard timeout must be less or equal Default lease time set on DHCP Server" +msgstr "" + +#: usr/local/www/firewall_aliases_edit.php:245 +#: usr/local/www/firewall_aliases_edit.php:244 +#, fuzzy, php-format +msgid "You must provide a valid URL. Could not fetch usable data from '%s'." +msgstr "Você deve fornecer uma URL válida. Não foi possível obter dados úteis." + +#: usr/local/www/firewall_aliases_edit.php:250 +#: usr/local/www/firewall_aliases_edit.php:249 +#, php-format +msgid "URL '%s' is not valid." +msgstr "URL '%s' não é válida." + +#: usr/local/www/firewall_aliases_edit.php:288 +#: usr/local/www/firewall_aliases_edit.php:287 +msgid "This alias is used on a static route and cannot contain FQDNs." +msgstr "" + +#: usr/local/www/system_firmware_restorefullbackup.php:174 +#, fuzzy +msgid "Could not locate any previous backups." +msgstr "Não foi possível localizar nenhum dos backups anteriores." + +#: usr/local/www/system_firmware_restorefullbackup.php:182 +msgid "do not restore config.xml." +msgstr "não restaure config.xml." + +#: usr/local/www/diag_dns.php:156 +msgid "Query Time" +msgstr "Tempo de Consulta" + +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:131 +msgid "Checking ..." +msgstr "Checando ..." + +#: usr/local/www/services_dnsmasq.php:224 +#: usr/local/www/services_dnsmasq.php:245 +msgid "Do not forward private reverse lookups" +msgstr "" + +#: usr/local/www/services_dnsmasq.php:225 +#: usr/local/www/services_dnsmasq.php:246 +#, php-format +msgid "If this option is set, %s DNS Forwarder (dnsmasq) will not forward reverse DNS lookups (PTR) for private addresses (RFC 1918) to upstream name servers. Any entries in the Domain Overrides section forwarding private \"n.n.n.in-addr.arpa\" names to a specific server are still forwarded. If the IP to name is not known from /etc/hosts, DHCP or a specific domain override then a \"not found\" answer is immediately returned. " +msgstr "" + +#: usr/local/www/system_advanced_network.php:212 +#: usr/local/www/system_advanced_network.php:211 +#, fuzzy +msgid "All IPv6 traffic will be blocked by the firewall unless this box is checked." +msgstr "Todos os IPv6 serão bloqueados a menos que essa opção esteja marcada." + +#: usr/local/www/system_advanced_network.php:213 +#: usr/local/www/system_advanced_network.php:212 +msgid "NOTE: This does not disable any IPv6 features on the firewall, it only blocks traffic." +msgstr "" + +#: usr/local/www/diag_nanobsd.php:234 +msgid "RRD/DHCP Backup" +msgstr "Backup RRD/DHCP" + +#: usr/local/www/diag_nanobsd.php:236 +msgid "These options have been relocated to" +msgstr "" + +#: usr/local/www/diag_nanobsd.php:236 +msgid "System > Advanced, Miscellaneous tab" +msgstr "Sistema > Avançado, Aba Diversos" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90 +#, fuzzy +msgid "A valid IP address must be specified, or # for an exclusion or ! to not forward at all." +msgstr "Um endereço IP válido deve ser especificado, ou # para uma exclusão." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +msgid "Or enter ! for lookups for this host/subdomain to NOT be forwarded anywhere." +msgstr "" + +#: usr/local/www/interfaces.php:517 usr/local/www/interfaces.php:513 +#: usr/local/www/interfaces.php:516 +#, fuzzy +msgid "You can only have one interface configured in 6rd with same prefix." +msgstr "Você somente pode ter uma interface configurada como %s ou 6rd." + +#: usr/local/www/interfaces.php:528 usr/local/www/interfaces.php:524 +#: usr/local/www/interfaces.php:527 +#, fuzzy, php-format +msgid "You can only have one interface configured as 6to4." +msgstr "Você somente pode ter uma interface configurada como %s ou 6to4." + +#: usr/local/www/interfaces.php:648 usr/local/www/interfaces.php:644 +#: usr/local/www/interfaces.php:649 +msgid "MTU of a vlan should not be bigger than parent interface." +msgstr "" + +#: usr/local/www/interfaces.php:663 usr/local/www/interfaces.php:659 +#: usr/local/www/interfaces.php:664 +#, php-format +msgid "Interface %s (VLAN) has MTU set to a bigger value" +msgstr "" + +#: etc/inc/easyrule.inc:118 etc/inc/easyrule.inc:301 +msgid "Easy Rule" +msgstr "Regra Fácil" + +#: etc/inc/vpn.inc:1015 etc/inc/vpn.inc:1014 etc/inc/vpn.inc:1016 +#, php-format +msgid "Ignoring IPsec racoon daemon reload since there are no tunnels on interface %s" +msgstr "" + +#: etc/inc/auth.inc:1127 etc/inc/auth.inc:1162 +#, fuzzy, php-format +msgid "ERROR! Could not login to server %1$s as user %2$s: %3$s" +msgstr "ERRO! Não foi possível logar no servidor %1$s como usuário %2$s." + +#: usr/local/www/system_gateways_edit.php:139 +#: usr/local/www/system_gateways_edit.php:167 +#, fuzzy, php-format +msgid "The gateway address %1$s does not lie within one of the chosen interface's subnets." +msgstr "O gateway endereço %1$ s não se encontram dentro da subrede da interface escolhida '%2$ s'." + +#: usr/local/www/diag_arp.php:342 +msgid "NOTE: Local IPv6 peers use" +msgstr "" + +#: usr/local/www/diag_arp.php:342 +msgid "NDP" +msgstr "NDP" + +#: usr/local/www/diag_arp.php:342 +msgid "instead of ARP" +msgstr "em vez de ARP" + +#: usr/local/www/firewall_virtual_ip.php:128 +#: usr/local/www/firewall_virtual_ip.php:135 +#, fuzzy +msgid "This entry cannot be deleted because it is still referenced by at least one Gateway." +msgstr "Essa entrada não pode ser apagada porque ela ainda é referenciada por pelo menos um protocolo relay." + +#: usr/local/www/interfaces_gif_edit.php:169 +#, fuzzy +msgid "The interface here serves as the local address to be used for the gif tunnel." +msgstr "A interface aqui serve como o endereço local para ser usado para o túnel GRE." + +#: usr/local/www/services_dhcp.php:941 usr/local/www/services_dhcp.php:953 +msgid "This option persists even if DHCP server is disabled. Only the machines listed below will be able to communicate with the firewall on this NIC." +msgstr "" + +#: usr/local/www/interfaces_bridge_edit.php:381 +#, fuzzy +msgid "Set the transmit hold count for Spanning Tree. This is the number of packets transmitted before being rate limited. The default is 6. The minimum is 1 and the maximum is 10." +msgstr "Configure a contagem de espera de transmissão para a Árvore Expansível. Esse é o número de pacotes transmitidos antes que seja limitado a uma taxa. O padrão é 6. O mínimo é 1 e o máximo é 10." + +#: usr/local/www/services_dnsmasq.php:254 +msgid "Listen Port" +msgstr "Porta de escuta" + +#: usr/local/www/services_dnsmasq.php:258 +msgid "The port used for responding to DNS queries. It should normally be left blank unless another service needs to bind to TCP/UDP port 53." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:268 +msgid "Interface IPs used by the DNS Forwarder for responding to queries from clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries to other interface IPs not selected below are discarded. The default behavior is to respond to queries on every available IPv4 and IPv6 address." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:288 +msgid "Strict Interface Binding" +msgstr "Interface Associada" + +#: usr/local/www/services_dnsmasq.php:290 +msgid "If this option is set, the DNS forwarder will only bind to the interfaces containing the IP addresses selected above, rather than binding to all interfaces and discarding queries to other addresses." +msgstr "" + +#: usr/local/www/services_dnsmasq.php:292 +msgid "NOTE: This option does NOT work with IPv6. If set, dnsmasq will not bind to IPv6 addresses." +msgstr "" + +#: usr/local/www/firewall_nat_out_edit.php:523 +#: usr/local/www/firewall_nat_out_edit.php:561 +msgid "(leave blank for any)" +msgstr "(deixe em branco para qualquer valor)" + +#: usr/local/www/interfaces.php:1900 usr/local/www/interfaces.php:1936 +#, php-format +msgid "Enter a hexadecimal value between %x and %x here, default value is 0." +msgstr "" + +#: etc/inc/shaper.inc:1232 +msgid "Codel Active Queue" +msgstr "Fila ativa de Codel" + +#: etc/inc/pfsense-utils.inc:2537 +msgid "Turkish" +msgstr "Turco" + +#: usr/local/www/system_gateways_edit.php:647 +msgid "The Frequency Probe interval must be less than the Down time, otherwise the gateway will seem to go down then come up again at the next probe." +msgstr "NOTA: O intervalo de frequencia de consulta deve ser menor que o tempo de queda, caso contrário vai parecer que o gateway caiu antes da próxima consulta." + +#: usr/local/www/system_gateways_edit.php:648 +msgid "The total time before a gateway is down is the product of the Frequency Probe and the Down fields. By default this is 1*10=10 seconds." +msgstr "NOTA: O total de tempo antes de um gateway cair é o produto da frequencia de consultas e de quedas. Por padrão isso é 1*10=10 segundos." + +#: etc/inc/shaper.inc:2904 etc/inc/shaper.inc:2906 +msgid "IPV4 bit mask must be blank or numeric value between 1 and 32." +msgstr "" + +#: etc/inc/shaper.inc:2907 etc/inc/shaper.inc:2909 +msgid "IPV6 bit mask must be blank or numeric value between 1 and 128." +msgstr "" + +#: etc/inc/shaper.inc:3352 etc/inc/shaper.inc:3625 etc/inc/shaper.inc:3378 +#: etc/inc/shaper.inc:3651 +msgid "" +"If 'source' or 'destination' slots is chosen, \n" +"a dynamic pipe with the bandwidth, delay, packet loss and queue size given above will \n" +"be created for each source/destination IP address encountered, \n" +"respectively. This makes it possible to easily specify bandwidth \n" +"limits per host." +msgstr "" +"Se 'origem' ou 'destino' é escolhido, \n" +"um pipe dinâmico com o tamanho de banda, atraso, perda de pacote e tamanho de fila dado acima serão \n" +"criados para cada endereço IP de origem/destino encontrado, \n" +"respectivamente. Isso faz com que seja possível especificar facilmente os limites de \n" +"tamanho de banda por host." + +#: etc/inc/shaper.inc:3373 etc/inc/shaper.inc:3399 +msgid "" +"If 'source' or 'destination' slots is chosen, \n" +"leaving the mask bits blank will create one pipe per host. Otherwise specify \n" +"the number of 'one' bits in the subnet mask used to group multiple hosts \n" +"per pipe." +msgstr "" + +#: etc/inc/shaper.inc:3646 etc/inc/shaper.inc:3672 +msgid "" +"If 'source' or 'destination' slots is chosen, \n" +"leaving the mask bits blank will create one pipe per host. Otherwise specify \n" +"the number of 'one' bits in the subnet mask used to group multiple hosts \n" +"per queue." +msgstr "" + +#: usr/local/www/services_router_advertisements.php:379 +#, fuzzy +msgid "The RA server can optionally provide a domain search list. Use the semicolon character as separator" +msgstr "O servidor DHCP pode, opcionalmente, fornecer uma lista de pesquisa de domínios. Use o caractere ponto e vírgula como separador" + +#: usr/local/www/system_gateways_edit.php:327 +#, fuzzy +msgid "The probe interval needs to be a numeric value." +msgstr "O intervalo de frequencia de consulta deve ser um valor númerico." + +#: usr/local/www/system_gateways_edit.php:330 +#, fuzzy +msgid "The probe interval needs to be positive." +msgstr "O intervalo de frequencia de consulta deve ser um valor positivo." + +#: usr/local/www/system_gateways_edit.php:348 +#, fuzzy +msgid "The probe interval needs to be less than the down time setting." +msgstr "O intervalo de frequencia de consulta deve ser menor que a configuraçõa de tempo de queda." + +#: usr/local/www/system_gateways_edit.php:627 +msgid "Probe Interval" +msgstr "Intervalo de sonda" + +#: usr/local/www/system_gateways_edit.php:633 +#, fuzzy +msgid "NOTE: The quality graph is averaged over seconds, not intervals, so as the probe interval is increased the accuracy of the quality graph is decreased." +msgstr "NOTA: A gráfico de qualidade é uma média sobre segundos, não intervalos. assim como a consulta de frequencia é aumentada o gráfico de qualidade é diminuida." + +#: usr/local/www/system_gateways_edit.php:647 +#, fuzzy +msgid "The probe interval must be less than the down time, otherwise the gateway will seem to go down then come up again at the next probe." +msgstr "NOTA: O intervalo de frequencia de consulta deve ser menor que o tempo de queda, caso contrário vai parecer que o gateway caiu antes da próxima consulta." + +#: usr/local/www/system_gateways_edit.php:648 +msgid "The down time defines the length of time before the gateway is marked as down, but the accuracy is controlled by the probe interval. For example, if your down time is 40 seconds but on a 30 second probe interval, only one probe would have to fail before the gateway is marked down at the 40 second mark. By default, the gateway is considered down after 10 seconds, and the probe interval is 1 second, so 10 probes would have to fail before the gateway is marked down." +msgstr "" + +#: usr/local/www/system_groupmanager.php:125 +#, fuzzy +msgid "The group name is longer than 16 characters." +msgstr "O nome de usuário contém mais de 16 caractéres." + +#: usr/local/www/diag_logs_settings.php:155 +#, fuzzy +msgid "WebGUI process is restarting." +msgstr "Reiniciando httpd" + +#: usr/local/www/diag_logs_settings.php:281 +msgid "Log packets blocked by 'Block Bogon Networks' rules" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:284 +msgid "Log packets blocked by 'Block Private Networks' rules" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:290 +msgid "Log errors from the web server process." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:291 +msgid "Hint: If this is checked, errors from the lighttpd web server process for the GUI or Captive Portal will appear in the main system log." +msgstr "" + +#: usr/local/www/interfaces_gre_edit.php:216 +msgid "Check this box for WCCP encapsulation version 2, or leave unchecked for version 1." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:477 +msgid "You can only specify the maximum number of established connections per host (advanced option) for TCP protocol." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:479 +msgid "You can only specify the maximum new connections / per second(s) (advanced option) for TCP protocol." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:481 +msgid "You can only specify the state timeout (advanced option) for TCP protocol." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:486 +msgid "You can only specify the maximum state entries (advanced option) for ICMP/TCP/UDP protocols." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:488 +msgid "You can only specify the maximum number of unique source hosts (advanced option) for ICMP/TCP/UDP protocols." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:490 +msgid "You can only specify the maximum state entries per host (advanced option) for ICMP/TCP/UDP protocols." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:495 +msgid "You can only specify the maximum state entries (advanced option) for Pass type rules." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:497 +msgid "You can only specify the maximum number of unique source hosts (advanced option) for Pass type rules." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:499 +msgid "You can only specify the maximum number of established connections per host (advanced option) for Pass type rules." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:501 +msgid "You can only specify the maximum state entries per host (advanced option) for Pass type rules." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:503 +msgid "You can only specify the maximum new connections / per second(s) (advanced option) for Pass type rules." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:505 +msgid "You can only specify the state timeout (advanced option) for Pass type rules." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:510 +msgid "You cannot specify the maximum state entries (advanced option) if statetype is none and no L7 container is selected." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:512 +msgid "You cannot specify the maximum number of unique source hosts (advanced option) if statetype is none and no L7 container is selected." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:514 +msgid "You cannot specify the maximum number of established connections per host (advanced option) if statetype is none and no L7 container is selected." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:516 +msgid "You cannot specify the maximum state entries per host (advanced option) if statetype is none and no L7 container is selected." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:518 +msgid "You cannot specify the maximum new connections / per second(s) (advanced option) if statetype is none and no L7 container is selected." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:520 +msgid "You cannot specify the state timeout (advanced option) if statetype is none and no L7 container is selected." +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1258 +msgid " Maximum state entries this rule can create (TCP/UDP/ICMP)" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1259 +msgid " Maximum number of unique source hosts (TCP/UDP/ICMP)" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1260 +#, fuzzy +msgid " Maximum number of established connections per host (TCP only)" +msgstr " Número máximo de conexões estabelecidas por host" + +#: usr/local/www/firewall_rules_edit.php:1261 +msgid " Maximum state entries per host (TCP/UDP/ICMP)" +msgstr "" + +#: usr/local/www/firewall_rules_edit.php:1270 +#, fuzzy +msgid "Maximum new connections / per second(s) (TCP only)" +msgstr "Máximo de novas conexões / por segundo(s)" + +#: usr/local/www/firewall_rules_edit.php:1273 +#, fuzzy +msgid "State Timeout in seconds (TCP only)" +msgstr "Tempo de espera de estado em segundos" + +#: usr/local/www/firewall_aliases.php:176 +msgid "URLs" +msgstr "URLs" + +#: usr/local/www/services_dhcp_edit.php:427 +#: usr/local/www/services_dhcp.php:907 +#, fuzzy +msgid "The DHCP server can optionally provide a domain search list. Use the semicolon character as separator " +msgstr "O servidor DHCP pode, opcionalmente, fornecer uma lista de pesquisa de domínios. Use o caractere ponto e vírgula como separador" + +#: usr/local/www/firewall_virtual_ip_edit.php:182 +#: usr/local/www/firewall_virtual_ip_edit.php:205 +#, fuzzy +msgid "For this type of vip localhost is not allowed." +msgstr "Para este tipo de VIP, um carp pai não é permitido." + +#: usr/local/www/system_certmanager.php:1195 +msgid "add or import certificate" +msgstr "adicionar ou importar certificado" + +#: usr/local/www/system_certmanager.php:1195 +msgid "add certificate" +msgstr "adicionar certificado" + +#: usr/local/www/system_advanced_admin.php:475 +msgid "BEAST Attack Protection" +msgstr "Proteção de ataque BEAST" + +#: usr/local/www/system_advanced_admin.php:478 +msgid "Mitigate the BEAST SSL Attack" +msgstr "Mitigando o ataque BEAST SSL" + +#: usr/local/www/system_advanced_admin.php:480 +msgid "When this is checked, the webConfigurator can mitigate BEAST SSL attacks. " +msgstr "Quando isto está checado, o Webconfigurator pode mitigar ataques BEAST SSL." + +#: usr/local/www/system_advanced_admin.php:483 +#, php-format +msgid "This option has been automatically disabled because a conflicting cryptographic accelerator card has been detected (%s)." +msgstr "" + +#: usr/local/www/system_advanced_admin.php:485 +msgid "This option is off by default because Hifn accelerators do NOT work with this option, and the GUI will not function. It is possible that other accelerators have a similar problem that is not yet known/documented. More information on BEAST is available from Wikipedia." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:426 +msgid "The powerd utility monitors the system state and sets various power control options accordingly. It offers four modes (maximum, minimum, adaptive and hiadaptive) that can be individually selected while on AC power or batteries. The modes maximum, minimum, adaptive and hiadaptive may be abbreviated max, min, adp, hadp. Maximum mode chooses the highest performance values. Minimum mode selects the lowest performance values to get the most power savings. Adaptive mode attempts to strike a balance by degrading performance when the system appears idle and increasing it when the system is busy. It offers a good balance between a small performance loss for greatly increased power savings. Hiadaptive mode is alike adaptive mode, but tuned for systems where performance and interactivity are more important than power consumption. It raises frequency faster, drops slower and keeps twice lower CPU load." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:522 +msgid "IPsec Reload on Failover" +msgstr "Recarregue IPsec em Failover" + +#: usr/local/www/system_advanced_misc.php:525 +msgid "Force IPsec Reload on Failover" +msgstr "Força releitura do IPsec em Failover" + +#: usr/local/www/system_advanced_misc.php:527 +msgid "In some circumstances using a gateway group as the interface for an IPsec tunnel does not function properly, and IPsec must be forcefully reloaded when a failover occurs. Because this will disrupt all IPsec tunnels, this behavior is disabled by default. Check this box to force IPsec to fully reload on failover." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:633 +#, fuzzy +msgid "The DHCP server can optionally provide a domain search list. Use the semicolon character as separator" +msgstr "O servidor DHCP pode, opcionalmente, fornecer uma lista de pesquisa de domínios. Use o caractere ponto e vírgula como separador" + +#: usr/local/www/system_authservers.php:504 +msgid "NOTE: When using SSL, this hostname MUST match the Common Name (CN) of the LDAP server's SSL Certificate." +msgstr "" + +#: usr/local/www/system_authservers.php:695 +msgid "UTF8 Encode" +msgstr "UTF8 Codificado" + +#: usr/local/www/system_authservers.php:703 +msgid "UTF8 encode LDAP parameters before sending them to the server. Required to support international characters, but may not be supported by every LDAP server." +msgstr "" + +#: usr/local/www/system_authservers.php:710 +msgid "Username Alterations" +msgstr "Alteração de Nome de Usuário" + +#: usr/local/www/system_authservers.php:718 +msgid "Do not strip away parts of the username after the @ symbol, e.g. user@host becomes user when unchecked." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:93 +msgid "The Aliases Hostname Resolve Interval value must be an integer." +msgstr "O valor do intervalo de resolução de hostname de Alias deve ser inteiro" + +#: usr/local/www/system_advanced_firewall.php:456 +msgid "Aliases Hostnames Resolve Interval" +msgstr "Intervalo de resolução de Hostname de Aliases" + +#: usr/local/www/system_advanced_firewall.php:460 +msgid "Interval, in seconds, that will be used to resolve hostnames configured on aliases." +msgstr "Intervalo, em segundos, deve ser usado para resolver hostnames configurados nos aliases" + +#: usr/local/www/system_advanced_firewall.php:462 +#, fuzzy +msgid "Note: Leave this blank for the default (300s)." +msgstr "Nota: Deixe isso em branco para o padrão." + +#: usr/local/www/firewall_aliases_edit.php:492 +#, fuzzy +msgid "Enter as many ports as you wish. Port ranges can be expressed by separating with a colon." +msgstr "Insira quantas portas você desejar. Intervalos de portas podem ser especificados utilizando dois pontos." + +#: usr/local/www/system_advanced_notifications.php:137 +#: usr/local/www/system_advanced_notifications.php:234 +msgid "Test Growl" +msgstr "Teste Growl" + +#: usr/local/www/system_advanced_notifications.php:147 +#: usr/local/www/system_advanced_notifications.php:300 +msgid "Test SMTP" +msgstr "Teste SMTP" + +#: usr/local/www/system_advanced_notifications.php:195 +msgid "Disable Growl Notifications" +msgstr "Desabilita notificações Growl" + +#: usr/local/www/system_advanced_notifications.php:198 +msgid "Check this option to disable growl notifications but preserve the settings below." +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:235 +#, fuzzy +msgid "NOTE: A test notification will be sent even if the service is marked as disabled." +msgstr "NOTA: Uma mensagem de teste será enviada se o serviço estiver marcado como desabilitado." + +#: usr/local/www/system_advanced_notifications.php:246 +msgid "Disable SMTP Notifications" +msgstr "Desabilitar notificações SMTP" + +#: usr/local/www/system_advanced_notifications.php:249 +msgid "Check this option to disable SMTP notifications but preserve the settings below. Some other mechanisms, such as packages, may need these settings in place to function." +msgstr "" + +#: usr/local/www/system_advanced_notifications.php:301 +msgid "NOTE: A test message will be sent even if the service is marked as disabled." +msgstr "NOTA: Uma mensagem de teste será enviada se o serviço estiver marcado como desabilitado." + +#: usr/local/www/services_rfc2136_edit.php:197 +msgid "Use Public IP" +msgstr "Usa IP Público" + +#: usr/local/www/services_rfc2136_edit.php:200 +msgid "If the interface IP is private, attempt to fetch and use the public IP instead." +msgstr "" + +#: usr/local/www/interfaces.php:597 +msgid "A valid alias IP address must be specified to reject DHCP Leases from." +msgstr "" + +#: usr/local/www/interfaces.php:1770 +msgid "Reject Leases From" +msgstr "Rejeita listas de" + +#: usr/local/www/interfaces.php:1774 +msgid "If there is a certain upstream DHCP server that should be ignored, place the IP address or subnet of the DHCP server to be ignored here." +msgstr "" + +#: usr/local/www/interfaces.php:1775 +msgid "this is useful for rejecting leases from cable modems that offer private IPs when they lose upstream sync." +msgstr "" + +#: usr/local/www/interfaces.php:1808 +msgid "Use IPv4 connectivity as parent interface" +msgstr "" + +#: usr/local/www/interfaces.php:1811 +msgid "Request a IPv6 prefix/information through the IPv4 connectivity link" +msgstr "" + +#: usr/local/www/interfaces.php:1815 +msgid "Request only a IPv6 prefix" +msgstr "Requesita somente um prefixo IPv6" + +#: usr/local/www/interfaces.php:1818 +msgid "Only request a IPv6 prefix, do not request a IPv6 address" +msgstr "" + +#: etc/inc/pkg-utils.inc:1267 +msgid "One moment please, reinstalling packages...\n" +msgstr "" + +#: etc/inc/pkg-utils.inc:1268 +msgid " >>> Trying to fetch package info..." +msgstr ">>> Tentando buscar informações sobre o pacote..." + +#: etc/inc/pkg-utils.inc:1269 +msgid "Attempting to reinstall all packages" +msgstr "Preparando para reinstalar todos os pacotes" + +#: etc/inc/pkg-utils.inc:1277 +msgid "Cannot reinstall packages: " +msgstr "Não pode reinstalar pacotes:" + +#: etc/inc/pkg-utils.inc:1286 +msgid "List of packages to reinstall: " +msgstr "Lista de pacotes para reinstalar:" + +#: etc/inc/pkg-utils.inc:1293 +msgid "Uninstalling package" +msgstr "Desinstalando pacote" + +#: etc/inc/pkg-utils.inc:1295 +msgid "Finished uninstalling package" +msgstr "Terminada desistalação de pacote" + +#: etc/inc/pkg-utils.inc:1296 +msgid "Reinstalling package" +msgstr "Reinstalando pacote" + +#: etc/inc/pkg-utils.inc:1298 +msgid "Finished installing package" +msgstr "Terminada a instalação do pacote" + +#: etc/inc/pkg-utils.inc:1301 +msgid "Finished reinstalling all packages." +msgstr "Terminada a reinstalação de todos os pacotes." + +#: etc/inc/shaper.inc:2884 +msgid "Burst" +msgstr "Explosão" + +#: etc/inc/shaper.inc:2894 +#, fuzzy +msgid "Plr must be a value between 0 and 1." +msgstr "Plr deve ser um inteiro entre 1 e 100." + +#: etc/inc/shaper.inc:3051 +#, fuzzy, php-format +msgid "Burst for schedule %s must be an integer." +msgstr "O valor de tamanho de banda para %s deve ser um inteiro." + +#: etc/inc/shaper.inc:3358 +msgid "Bandwidth is a rate (e.g. Mbit/s), burst is a total amount of data that will be transferred at full speed after an idle period." +msgstr "Controle de banda é uma média (ex: Mbit/s), burst é o total de dados que será transferido na velocidade total apos um periodo de espera." + +#: /usr/local/www/system.php:334 +msgid "" +"Enter IP addresses to be used by the system for DNS resolution. These are " +"also used for the DHCP service, DNS forwarder and for PPTP VPN clients." +msgstr "" +"Digite o endereço de IP que deve ser usado para resolução de DNS do sistema." +"Ele também será usado para o serviço de DHCP, Encaminhamento de DNS e para os clientes da VPN PPTP." + +#: /usr/local/www/guiconfig.inc:257 +msgid "The field %s contains invalid characters." +msgstr "O campo %s contém caracteres inválidos." + +#: /usr/local/www/guiconfig.inc:263 +msgid "The field %s is required." +msgstr "O campo %s é requerido." + +#: /usr/local/www/guiconfig.inc:881 +msgid "The provided variable is not an array." +msgstr "A variável fornecida não é um array." + +#: /usr/local/www/guiconfig.inc:1061 +msgid "listing only first 10k items" +msgstr "listando somente os primeiros 10k items" + +#: /usr/local/www/guiconfig.inc:435 +msgid "The changes have been applied successfully." +msgstr "As alterações foram aplicadas com sucesso" + +#: /usr/local/www/fbegin.inc:119 +msgid "(assign)" +msgstr "(associar)" diff --git a/usr/local/share/locale/tr/LC_MESSAGES/pfSense.mo b/usr/local/share/locale/tr/LC_MESSAGES/pfSense.mo new file mode 100644 index 0000000000000000000000000000000000000000..fe81cbec9b1a8326ae2135653b9d7e994202d6cd GIT binary patch literal 622886 zcmXWkWqeh~7RKR|oCJ4wf(8{YI_D+D_J4pg&dHCPJWFAjCe7oG^shQT}IaAqBhdr@&_<71=Y|Mkz zFc%KQ8n^~C;s;EDDR=sL#$s;Fgu5^sUdICX9kXMBU3On%3?&|bfw;=K0rkACmbcKR`T2^VB8Mzb zGg0kc#4H%|u=P6>;}Vxc<*5e7#!)y5r(iQo{=1(iHTFd1WfBJAM$~i9VQu`1m9fSV zKTma>jg9aD*2Gd#ex7>@^)cD(DCLD#TGVac89LJ^fJiGZQtx3otic!weYnxYcuZ%uHMzRcBo>6^=p8{}NRFenrh= zu0L$uv_RFxL@bH7QSGNWVf~6gFL7TiiUYAcZb#+eBmRI%Pue=@gc{#qOolU2<5}z6 zj+(basJcFlT94N-82>}%E&C}yPY6~)wbv6hkKo9Az+{h;A_8}|e(M!W}==V(+tB>B_NlNURo^0*MS z4*x{m?|;G1Qwa;B`ac-e&Kgwy?qfMjd(p0Mj#~HAQS0>t>iU13p?_K2*16bu9aRrW zFWEY+iN%TMI{(75#0f5&wVcyY&%5N}I9L2U)rhM*=c4NWAu3<_uG;)`L5*i7Y8;2K zB7Q{8TWON2{vHL2b=Cv=Xp4OoHaUQiE zV%@d%Qv_9??NRw2hsx7Y)V%rKvvHL`t?Ln}ylug7yycFk|DT<&hFZ7%QTy%!48q5l z6=UAF>vEy$urVqh{ZaL{0UP2yXVC|Cekv+YQK)`odT8@f6SW_VaXvuppJg6dKKh{M zXBh_JDOA2*IIBGN^OPoDiCTXT@dr%(#O#6U*J;##^BuMR@;tTn8=>+y3YG8G?)WuS z9RxhHeJKQ09}Q9WFUA^p5|!sv&+R#NQ18FdsC{=XYQNfvX>l)V{8unJ2E4F+Ck@6X z4o2-S`7jPv!Bkim1F;iozv_VraR};tJsFeW9Mpch4z-^haq)RfK>P%i&-bYIGyHA) zWKL9j#ZmpLifXSVcE+BlcK?UU<0n*mIbYiNiee1nk{A=qqn=;Q`2(u`wiq9KqxwAp zm7j^IdYX#r*KeqC?nPa99CiPB)INU~6X9o6KjXf#I0LHvJeU+qp~h1imB;p|eh&U-}iA6KE;t--{&9m%fB|i!=i27Ey6NfcOAnp^;@$ts-L}4 z^*I`o;XW*de`0ppP4JHUvCwyx$D8nwRqq4ISF zBk?ZkzOc{MkK)d1sOy@#xGn0sKA0LupxR%Es>jW!y8Z)m;dK|s_+sZ%q2?tIs!pn+ z#`&X*`=Z*Nf|`%DsQu&+YMnjADj4Uh)k9s>a~h)RVI-fF6*3KW8oA@*;|DRFoEYEkVr(#%-I0DtbMX0*jjq3jytd0Le&1(U^vbta^RNefE z#qbuYpDFzOeeGnzP~sA({ii*K;C#%F$FT^0a^~~*_wDZ;QTxy`)V}r?>iQ&Jdrn2v zIEJG3`|YUqU!&T~5@0sLLc}vr_n$x;RAwi_4+%-V0U7tDTqJaleE%&Vs0Xc0ygZ z5H-G2sQLSh+E?->vT=1oJ$IAy2I_qjBeCTgsb(7rk*bOzWYf
    x8&1{qw+Qnm9J~4>yl)!`m2T--&j=r?nU+Y9jcvd8SQu-R6CPU z<2!?DCsvTiOGHN$!^c9 zh05Cm7av2dUr(^reXz4BYCTUwjsKjBzoGI}Jcm8ECu&`-be>18$4{t!G3iy#b{LCX65qteLq~q#KccA z8Ggnjm@v%Z%vhhe2v);MsPSA!wUZ>bwOC^4We;A5~}bP}f~R&2#+x{=VPKltI{rO&_k9x&H9yHQK8B;}q6X^wt~Y9) z2Vy2%iJG@RPVhvQj=b@hS2vyICirBa-U@GE|M^rH5ir8^{BjWMLp*js(<%T*T*Vv z`A&qnh?Ar8P!3gBJy7ioaq%eUG*tf=qUL22s=X-Gd*QS@AE$!VeOgpK7euvJ1B0+W z>N$N-`}HrVJZwYd`LH{G5;ZTEQS}s!nwP+ec6}n$_32%l9seROfR`|4C4bNV@D}dC zgO&X~tFTuUf6qKj8{zN!eg6*BzE`@c%|jnlo(G|xHvu)i*{C|bjH=%osOLXNT_25_ zXa8z8Z;4R*UodLCp{V52*eI z*0j1zjT%P?YTcAW&08ZZfOAppp1~me2UX9BYuUb*8TGtIsN-Ex`5K1m-)~qL_oMO| zjjEemwf#M7u?<%D<9oD@<-bW?d+&@vt&^>&aqo4o~h(IgU@oQur5Y+=+j%x~PZ|#Jw>L523!(UZSoq(8#{` zyQ9|S9@KTuQ9tLTYHaQNfcc2WqUvlf=EBFQ>ytLI{*^`5`_HKP=!V+o#-R46NvOJ6 zg4*9Uqw3}{=D>eY`A*%`)54;e9O}MU&8#0uP;nV-hY_f8ZpLc(9#zNX zn!7r~OvD3G`_w{I|5l*(^IhoMuTlMdgIcftEo{7LQT>TP-PaoRUhac4aXMbX;FkWL zQ}`chU7T!X?Oj7X|0yazaelP-b|PmX)IQJ{RYz@6_jh*jAk?}U>70sHi5H;q@C4Q0 ze_b4>wY8TFwO?dJ-Cq;6u9~3ctFv;|wR-}Ux2u>AqfvQH)Yj@e1eK=<48ot?@rlm$sQ#RC=kKDf_q4Nh zlo^%3il}*vM6Ii4m>UP7=5IZ!&JLpXi;GwT-(xMT*xu%6HtPMq57pis)IRYFmCrAz z{>SWK`&=eedm%UlYoNw^2lc$q*cKCXw0Y}=<%x%&=I;n<-Q7g3*Z4oVpFdG`Jr=e8 zE@3eG|7_oJA*ejm#+=v_HO_^o`QMB|cn|gShhHcAu5XTNZw6|?k1|8xLvHii=pyf2DOhiN9An}>V2>RRSz3cb+sR};wdbPuTlNT z*VWo-j@mB;nhlJg1+&NMEdr2JVM;*B1C%fDETd01#M%D30RC@_} zSbb$j&3g${JIzt+r7LPaN2A8K3`6mEcl;%0BaYqE<|PlRod&3Vx<6{4*@$ZQ1nTL*1ni;JV`xi%_ajZpR90Tbe2)OwqQs;|ZF{5E&~1ZL;>HSB=jQR}=zZ~J+* zE2>V8p~iI$)&5)5e8ui#`+Evhy{AQ8AB=i#an!z59aX;#u^)CrUH=T#&O6ln`S-PX z3dJDeim2zcLtQ@*wI0T}_%v!4MOF6 zJci(WR6QSe=O3fS_148P``fsZqxu(wy1x*r{Yvh9T~xoDqn`7Vi~C_H@km^bn^FC* zH^A0?W7Pb$LA^hFIs2pLX9#NCqfm7^4|V-AR6T4(<$o_K?`PckN2q?jbH*5GaZ1$q za-iy{1ggJPQFZx)izmACzoMSM7B#;I-1!rz@m_Jq@8cfgmpBGj53;(=GuXyk3Bx#E z9ko6OpvE^7)$V*$K3AdYZyRbooJXzecc^iu9Ae|liCRzPQ16enSR8*r&C>y_gcni$ zOg+@v&xXoNe$;czqt4fGHb#xN9V$NqQ28E*+85@b?%#sy&k-E zjW8=@h%p|WMk~TTMgCDI8?IZbQw_S=4oRu^2|9`V}_L_N9iX`u_#<;2I3YYp8u7V7$L49OGjn ztbuQF4Zg>P6Kq^FC;EF@67NIp59ub^d=)~Crvhpnv_$pmXViW;7}c+Z*aokn=B4Ch zoA*d(OH^KaqTYiOQ1`FHAUx&b7pV7o+$sLPzlW6J+F0X4soQ~f=s zu^X1blGAKH2BGHrSDcGia2|G@Zu1su+ZeUTp%5f{U_SQV3C17}AJCmw{V+XGkyGcU3C!Oy65 zuoWlZY1BT|aH-W*Q&c5IzSWK{ibMLqu& zDnFl5?Z;nX?Po&myScCl7IV%*<@;Y$yWdgkHpNQY-%6mK(+oA9;i%`W#fJFEoiDY@ z)>$jmx}Aj)co}PB#?|ik4>*o^4;IDpYwWv!5Eddnh~@Dus@{sOwf8|cRQ*gqt4#N8oyk^PuX!I>y1?sC*4`@g!88%*7yF zh^m)^sQUWDc@H&@pHTCbV1vy^D%A5rQS(wCHJ=?_JQTJ6%|PXOC+hk;&R83*o&3&< zsQ1(lsDAcwjzG0P74?0v0#y&&QSa?PP~*Ge{2!_xf1~zw|4r8aG^qaPLA75D)lMaM zyb9J= z8lR$`>ebGM-Oze}j={I}YDNpTKwcGPtTQ9rNz4>hi@sD7o`X4i+H z)=4Q0#XcB>%TRR}g}VM0{*M2k+S$6@*4-IYUNh{lapiUvb5=mD_nN5j_i~O$jduxZ zyt`2E`BSL=K6mE>ciO&~4)bul9OlIysPQjH)$s+?y8eQ?uFNj0$F8V$hoI(R5o({^ zh9P(zwZ8`JwsE9DwUZq+{+}=tj=-k45_P}-9;@dZ*oinCBXJ|DuD+o5fi`=s&WB?V z@dQ-AH=z1+1C^K8s5}Plv)}tCN9_lxQP0nSs?TuLyjH<*{28a>2CRam_FKE7QTyb4 zER8o&{Y!Je-?JV&p!%KcpuKO0V>t14EQjwZ24Q333#j9{4*PqaVmDO# zjefWL=VDpn>!>`XJz~GVEQ?);Q$_iEdgB=9H)qeI{+^W_e}=Dc$}xNHkmL5;zfg6Q z`wyG%y4ad{F!sd%q4tydC;UAtum$GFfRpz7%p#~f{em4a=_#B4!PtO!4eEXK-Ng-0 z`+MpTZ^Gv2cgB9d))KWIj-&Rw8>o7HhT0bb&f51$7S#OLN4;lypz3rTDnFM{@3|D` z?0s1WixY3c2z=(^0_W||2fE+}j;H$5-!mDHVNI-e!M=-DU?t-JP|vM+(f+={k64vB z;4gb#P1JgyfclO)ikiRoSOW`PvUW$}55$+SFos>W_ir22x}A%f-{0^@yo?X9=oNoY zUrcw^>TxD&-@J{=*E0;nkC+z!!~U4&nzcIQSaj)F$g=liyZtIT&^SWDLjEsQ1lN)cmA= zWOdXCmCsSA{a^`dKi`hZ=SfsQAEVwc?_3=7vAsu9U@VUJM7`Gsq2_HIDjzd27cO$g zPow&E8I`wJsCtg^#QL8f^}O<^Jk-G;{1Nq>5vXxbM9s$xRDYME^0O0z@g%DKe^Ki& z_EUS`*F~+n&ZvEHB&yx3sO#^cp8pY*mzd9N+?i3&DTul*0#!GyTs#alFLP1%??jFB z7-}4MQ1kN&)y{Ve!er0w`Gru|mquOR5VfA$yLdSU5pP5F_Y$`8V?V+c#O40BpX-+4 z2jZA7?fv{62NH+9vOoV@iv@^ZV}8u?+V-&qsP)(sbKrF6KGeE@h??KD|Jc0dK-EV9 z)c#uwHNIc49?n3G<0+~RKB5=B|JwIJOjNzab8!%=ZnC*J59<1YsJbhPL0Hut|Jfby zikkP~sPDO%sCnCjS{El#^Kk)n-96Mgi$;y-JF1T2y|FkADh@`~Ng>pI)txQe`5vh8 z4nwsw4K*)|uoAAu?Dz`9FnP4)wLGdnom@N+RnIF>^|Ky*>kieA$EbbiEh=Ae-r93B zpq`fpmH(os{{Doj&*7+gnun^ltuFq?gDC)qn|KO-t{1<)T$pvGAmhhR;2 z{v7K4cLmk{EmV8|qUJ09duul%<|Ph6ji(8!pB>%#VW|0<;Eu0y9zf;g66(Ei6C=^@ zgT3EtVgT_XRNX8`kEbvTK1KC2-bd?K64biQimHS1?s!dSD|fu7b0{jG6HxQK z9QB;dsQNyOneaAh+}}~}kHnvBo(rR{tB4v;eN?`iVsUJb8pkqJ{#K*fkHQ*w4|8Ll z&;Fh#*c|6zr7zab9aLVQq5Ag$)n33?%X4hh@gUUkFjPMBqw-V~^}Gf+8+&30jPuQ& z-xKE&AHk>CY%Sy{cqu?yzGe^7N0w9142=My;UP)d2f#cuM*WW;|@4KQW*5~*JoPz!_yuSIGj>_{o zER8!*d3cMe7r&TZ-#UzodLO4j&2w?gg>_KtU?^&xjX}-pRMh(2fvV%9sPW!(=d;D~ z`qoWVRK6oo&#U8(H$|=I7S7)8_ykmcC!^|Ro{QI_p0^#f9;4jxbwwYd}UqS2(@n8qMkbd^7 zn$LLg?fTTHJmo{>FC5k1TBzr=MqS?zb=@dbyE9Sku5s}})O8n8`{!NM{`V2pZtMhJ z-?~hV8fOPo{<@&<>+c+mdj1U5ysc8~$L|9%E$&a~_5HhoYl+OD#9q%nuIqrCF>4a9 z=Qv)*>9`=N*V7*JB(r&$gSm+>VrBG8?)Clq&Ir^#IotUVdlBbP;r0Dox*9dlktw~N z=QteG)4@)uyuNimK8@G+y%3GPIo~y{&EF%`&o|-eyuQD8u@^fKe?+azR_VQ-O}H1E zVaE(!-|rdzzz@V(GkQJ8FkO(>a{}+<4qTtf>-+PWR++t??ZgeTczwU0iJR5ySwwsm z&ta!*Ue6aSk=^SViA93V{iwW_&EfUz-t z?3c^ynT5wt`DhYmHfG z0^E(-hyFmVqdTbe_7?MC?BcdR6hq~s1=ho5sP;afzT5so?U$)a*nXKFHLhUPIxXhn zNL2eRP|xp$+E+%P*69>fUY4NxwGo5xsPhq4C5}iXtb7<-}ezaBN7gD$>?y8Z=fpLmCQ?|Mqx^E06Knc}E@v@Ys+cD#jU8k4hy&IXQIxpLiK+? z>UmeNE51R^+mB^!zux7%i^@;Ta%MWzIP*D6qW1U7SQopZ_Ma#$gdb4-3oCE$uhOXY zDx>PRDeApD5H-(B-1!ZtdHWqT-V4qL7)1OIHUB9p*!eJ2Tn6>L2B>*%?;MJ%i#aa7 zkIKVm%!$b=+WIMt8c%1;fwQm{9z=~VVI_M`Yv%wg!trTX5Km$z{11aLsIt{fSd0XQT>~Oxo|b=JLM8;yl>t47*)K!-+yF4)lq9ye+OX*u0lQU0>;E>)VlnFT7RJt z_PqS4JXb>1;mZ#x=mj<56`!4VBktoQ`gUc3f&e`-`-b7Kyyg__U)sOQXcZb8-4NmN~)N40+gwQoH`jo;hQ z>OLN-zv)rW3w3c()b*86^V|~EUQg6`hM?M+fm*K%Q1725m<6Ly`_&WFzW4=mVwNB5 zzDO)j+yK?zUs2Crf_lzI)c&v=)y^SQp8s-QbKZ96@1y49J?2LLM%M3qsBu(4jk7tb z-A<_XdSWr`hedHKYCn5{>UX-vc3lP3I3t{q&f2K<>!bSL6+>|l>UnGMB<@75-(gLx zuI8iiv>tWcdDJ}JM%CHhsJy(#Y4{bj4kkCX{)}v9^F9t$r%O@oY(YK$5UQSDpz0(V z^I+2EcDy_)U)9j}J&2mWKB)PghZ_F|)V_WRwg07TVeRC`=ETiW_Z@KF!_CCrmX@#W z=$l8>cn+cJ^_V+;8#Uh#QTcm~>epA)I*irI@{tA=XGM*xFe+cAF+WDSAB*~K znU8w@7S#OhM$OlL)OA--?L0%}?;~oSV*F^=WkRjH5~y~Xp{{F#%1;kee}6@_v&x;{ zfvT@4)VNQe#(56a|Lds!{LjUY-1(QNb@dT-pI>XcJ|=4X2~qQz34^dKYG3^k`{A#s z_ixfRHvX)rdM=LY-_NLhZvd)pW}wEi9QE8SF5Zi}{)F=?s=tp><9&|G$9vR$-%xcM zqph`<2$jbSsCJ5>&R0Qytb@u=ebhJ`V;HtX^>;F=UJqeye2r_dY&);--}k-1NaAtr z?R)$x&LnQq!RqoK)cKkn?dPS1_yh4Rtc8Vs^7{T9Z!|6;{tqkT;-4))Pf+9Zbh7@( zL&a%Pc?(AMzX;~Wl9&yD#_Tu^b=_`Mot;3{_f5=-Pf_>9?`+qXM9o8M%!l1k^SB(< z&URGY97Xlx4C?)U4b}czRQoZzSey(M2czn)AgW%=xVSy;^`m}K`48)6?G`}ws|;$M zx}fT=J8GSeKLweZxNvL)f zV{tr$74b7J!SJ4T{(q=^`}MMZ1*6_eRZ;s?3m5mn9K;h)`}}ry{uL^3fxYd%R9J>M z3{`iXQSB^rZpRYDr?COX>|^!a97_`S$AY*M)vp&Ago*pw{N+c@TRGJH)}S{KMx8H@dQK#&o*KEhJ?eQq@ga_PcI|KN z*BfB%wZ_hz?|^}L1+~s^p>Lj1`Aj&_)>lz1L_8W*7yI!g-ouR4*SSIVdyQ9v?fQrz z?&m4o%ysv%5zZKD-*GQd`N=xW_Jao4g?J=Rz-a7)Lx_qbly|6=R>PmCl^IKqAp z(+o=!??Csf>2uqx&sV|6eXHQqg_ zdcKXCNB^-_|H&{DabC=Ybx`MrVtky2+BX-Y*3}wRKTo6b9cP@auf(W&2tnOn2K60T z8;fEW)V{SERo|~s@AI7FZTwYGb+iPvo;RbOyA8u|KWaXoqu$F&C)hp{ieBOZE-r%V zR~b}0l~DUr1gdTuqw>)WLvSYQ=bJ;Q=R~9K&ot52M-Egy)xZik05va%-0>unY&@k= z>#-l^#Wl|BsP^Mbw)!cJdf&`NJ!cy#UwcvcK7-1`4b=FbqtW7L{xmxuggT!KHO}Iw`YDU5w>GFc9gUi&3#jK@Lf!WT^_YvN z!-lB&8;2U#c2pjBqsDa#wa;92@&8cmzCw-fD{4H6W>}swqT=EhfDx$i)NpYtR2{WL z^{X!`KO^r*THMLoYfs{d6m7uG@b zZzyV7S8@jXE87w=I0 zDK*EgtBOAoH$mm;pgSIgYX1_dzyF}}7C6_|Z+=w&n`0bokE+8SsNXNlMCE%c7Qy{k z3g2QF=AUP_#Dc_=QO}FQD7=e$-tu3)zJLGuCn~>%=X*VaurX@?xQdH0-2%(ke$+Uw zqMm;XmDk7a_)An?-(V2NUug4}8#Rv7sQokoi{l7){vhhR=Nzh^PcRt0i)=nZQTZ-{ zn&&buZjP$^cFz8om3X2%zXg@wJ*fFRhpPA6sCkb@h=A*@Eh2Ixa=~^(^AxP_G2f!i-ocJa(i!$ zz;NOtsQL1)uze*js@_^)1g=Jn`(IT5Q>?U~FNEj@34s@ktg+umq(IF}IBI>=Mdh(As($)lJRFEx zcVpf0*{JL0yW<;B>tHXcexgwCi*uL*FQLZw4b@)Gwf4NisOzhs>ZUHLe@#&RYLBXm z0jRp4f@*ggYQNosyYMW|!BOknzPH}$C=}IhaTk|E?PIl3`(`V5e7HM474`fjsQqLE zs@|hedNJ?{vro-d;E^b|EO|DxtC_eQImW~ls( zM?G(ja}6s0dr<574-CQ!sCs+j&S%_Yc@0B7w+w2X)^z@i%G(%J9_OR_vlMmxI_!vh zomqdgpFby~zPs*W5Pn1TFT-Z*PaafV7jrhpY{Vl_^S>7J;zd*)dbe2JHbB*JKdgXD zuogZ-jkEApuV*!eqvEId8@@r+&9ZIgM%4M;sQu#zYQ0`S<^3&|$2i;V`Wo1mxDhI^ z7qAT8MO~M1hy6KjYt%T;p!#n+o*N<0`sG1kM*+v>b~Zv{iHi;K1QJW zIUUvS-%#zGbH{I?p8E;)oP>KV4n{qv6l#2Rump}owSO2@zZX&UdlNPO7pOdbb;jIh z*Cjz6Pm9{WvtvPQhH7^@s=afl=Uzqi>u*&1{`+lTNP?Q*oT&2^-SH-<{kR8K#+j&m z-$KpbeN>&kLhY{~-T7~*cDx7dd}>rbv!LcFw~I@l=CKlnVkBz3{oV2LsJu=?)yZO1 zT^~VT{|~x6pzceHTBo^C^Hv8n?zX7?aR6%me#LUQ7WMqUQTdBT-4}Am##sv0UU}5I z?}*yprlaQXchtN^I|C2fev}fGmr&HW3!&N#N3~NIRTqO$-vKjGdAW!h?_E?sU!unO z6}5lI``y-G7Hmo!iVbiqp254Q@oYF^b-oSN|Ffw1jYj1oVU&FrWJNt^0%|^gMfH0X zYFwM$`6H-)T|o8YE^2uZ_T`zV^J`GoAHXX3my6RKv*Y@W|LS58?!u~g&7IHk zhs}Ele8lmxsOJWsuzj#FDz1$!u_dZ5e@Er{A*x?-PTF@>4qQb%3xoZ5pPsVz+nly` zenQQAf7EzKqxPris5;qzYVR^`!DwtwJ1fsve*(_gykb9T!qTx zZd5%TN3EADsCjvU%KJCeyak@O>rUa&*INPA=u^%cgLs9t~gUa(PR2^(a_3sesx}&Im zoxwQF(?!fneETmupWu=`HwEgs*-_&zfyzr|^kPd?du>ql(Fs-O{ari}b>BQxe^#RU zao8O{hPv;9i|@GjIV!IoP|xwdY{tM?#BosVBt_*f6>6M0P<2@Zbzg1Nb@fqsYm9nc zH&mVmqw+Yx#fwq%uo2boL#Xv~8a1!~qMo1VimN-+^Mg@&DuSw)>Zt2GI>$O!qpm;h zyyAR}dhUBvo?>0K{VfYtBMw8~`a|`5H0n7s-SI7$kN6;l;y{jS@0b#2u7IjHrt5!K(vSXS5Fuys-%OB1)k!ng#B z;Z-b;iErBbq&|id&p`G65*ET3w`{*EiJH$AsP)nxo8wZir5TZ?ByR?%L0bVVIlaP4I6Vk6E$r zJ-crK>OHjsmG48SIysKY`%P3mJVmYhkErXC{m<$-Eoxs1!8}+N)t~Mdj^k0|K8;#; z-<*l=TRmk#jjIr<{jx4@=In@CH@)5Yk*Mb_LDknT)cu#-`Fp7K{?!@q!0Ia=>iJnw z`*ji2_^LSTqt?xj?)=a0_#o8y$D!(a9_GT;sCl{M&j063@X&rgo&oip)CsjdC*pS8 zijT4VBm2EpjmP%;hA8aB@l;Rjy*dil6F`jLZ1cAiwO?#Njc*%jU7SSq>lrS^ zkEng<*DqFgD^TZuE=eg-XAc2dT)a-eVoGATGdCcmegk zN$3~g%UcbMBp!*y@ggq5`2GRDdftE<&sJ3aqEP)j<-Fv)gUZuW)cT1=<>f1CUBvTR zoCGToXGZ0rBkI1ssJi_H^_+#69ao^%>1ot@d5%Ho4G8e9$E>LPN~6vsjM7UGGh zb+FkTk3#M5w^8-~3Dv(ufdRgKA_c0Q5LCa)qvo#$s$VTp^W5H@?}J5%hokCZ4{EeY47)xXDi8Tk^Hm1bub%GscvRiYMfGPTsvnzC{n~|H@FZ$~D;hJv zw;t=G&i6#MHwx9S1*rPp?9LxYwSNr{;3F3=j}<_ra2;yAJ5bjhMa};O)Ox+?e1O`Q zUO2t6t)FRe0mn0=?mOg;pLG7|yo$=-9aOzNckve&$BbjgQ=$5k6N~aaUKB%#yT`S0 zFT`--eK?i#U-2AHif{dInlQkl@7<1A8$079JcL31{QQx~^3x@W)$vGFzbB#cHwU$^ ztw-heFlzoTqOQB=;^(OSwy}7KNk;m@hIm+)VOA#`mqePzE-*8 zcTns1C92+Ir?C3Yj_PkIRGuoM`d8l_Z;5${f5JjIAJv}=sQzBXoOla!V2qRjzI`+g z>iVIW9d}@au0ws7WKU)5wkxWi%bhndj5uj(yT2^vBJPU~aRu(cuh@b5+?vL&Pn#~l z_dOngXE?tY)vr$Jt^L_plK339#kd&)e19I)9WM}HL$$vyqm9=;$mXR0s{b`mS zF80f6}I;VjI9uW=}5%ogDLd0{aI6Q6VOdlzTRZu@&AHs*YH)cDSzu8+pi zm^L`TGXs~Q-Uo$qn2j+T@eou$SD@Z|C$Tkl$Qj`Ko;ZWy#2--eSv17vy&bAfenUO) z8Y+*TP^+7Q7(_S{^WjQVKd++lmp@m4?|nW9^Aq1d@>i0L)yk*a4b=3lg5zoQ?m@2>RKhsg` zYy)cFIEgFq2~NdH1#H|I3I_PTx9XtgaWa<0gQ)R&3fVqg05cJ`KwUQ+Ro`3O`J1Tq z9kXzN@4Gb%>bhoF8Yf{nJcFvYghlN6O|cm9ROcyYKv6qh+S$*!)%mwGdojyXOH_Y1 zqn`Hwi(}^EW;4_}o{O4~W7r)ZVts5-!oH_ApuRspqxx02WPtDYlHE}I#6ApV-A7|@ z;*6#3x>=~_pT|Y$U&ivb6zdS5Mb%GGxE=oqI}*=E)rqI9)lqiTd$B3%d1F!iIgDDL zUs3D7b~!sg8kNt3sC_bSc{^SbbzLtE!L_KoTtba2X$6ZTQO}#`+>N^aA?m%5uwsDk z@2!Pk4dS^NiBC}VS*TKg@Ao&OoEK2%(^s~<{fugVCu+UkN7Z}GDz^TrIeVh|KOei` z8Pxogh_LzFh^qUisP&quYJl(ix<0DTCc1b(>U=a-#NcW+@10TW_*d+V?@;?f>*@i% z-`h_^_3tTaoyCu|ycR}{a|CMs{zBz1eGPj~LsXqjKt1m`YF)&uY2WRIQTtaf)bY8f zb#erQ@DBFC@2I@>sAcQ#Fe)GZwF5lkz5IPK{DtqFgY|4*D%+6#jXLZpxo-OpRwwUJ z^PI1d)j>DZ{<;R$&-18t7^ks~KN80i4@9kt7)>nC*-+Ot$FjH-RgVu)c}Uwd!1sHq zwy5(*QS%z3nO#>EwGaM++DEsb=Jf%pF6%V6{*FQYd=rK0w_l3@-`_t8$7aL_P}iqz zX?0l(^>fug)O}mA7XE|Puxu+E?<7>dx1;XAgX%}pA8nmh#7V^curkJIZSB;+M#PJ; z5`IF}Nq8H(zYD6}C8%|B3iUnl4wqo*wgJAsPjMF~5SM9Z-_fU0?RID%;QRYXN3b?= zkq)-MkHcSxkE8k-(b4ie5GxQL!$6GlljSWD>iN}CdFzX+`<>3`sCmiov(;5g)ckBh z9e;z`uL^du@6Ps^&yRMn5w7hV;Aw*1uBU7tZ(obUQE_+FI@*Mq&$rI-es+8!zU25t9EFGb+wn>R zY@eNonyeq@s=r)=?R#xJ{y_W>YThD- z*tq69KVT%s>khT~T8i42AET}>FwEBbDAazi3VY!xXPM#F-|eXVKFcq*Z?(V%#1k=$ z{69d=N8*v}Q&@Hs{l}k1+jwS;Vcij5$GjM8oV~Y;jkh{%f`8H8N7VSvOyIko>p~{l zew}X;^+Y@fW8=Qb{CtSVrZ7Kvd#agcy479783DdO|D27TXfGP;V#}F)pL6|o)cE(z zvbu{qJHYqfhmAzd??LQ~apu@Q{tLDs-il>0$y|PJqn&!Fb=Gm7)$3M_PkaP5pMPRD z^#3)$^BHrX_U$b5ZGHE|2;zOHeJOAO^+LM^aW?Uog|=^HSQOxCN!$SaynMf5W8yta zZN8H&3-JAWp>EikY8&@URNjlN zvG0%Ywf6l#8{2T*E7WuAuCqLBLam#BQ0pYqddqin)VNOLADDcDy$^1q_VWxIt?o*p zey(kf+Si7l@_!8V{~wch6XU?aQTuV+9Ra?7ZxW7C#CLEXF578&Yre~zi&|F~QR_EoxBa}> z8<`%@Pz=BksQqUw#>6^%?B~_S&Q{J2&aTcrsQU+_e&6y7s;=f?LR{_QU6_RU7-}EC zhOsgKUdwAqXH(QZF$i`3GOC@s?)+=?Cr-F8!1wnjlA!j1I+zOoK&{Jr7z<19x8HwM zM!iq!q55$TlVLQf{a6QV+^JCg55feP8};)^DOBEjy5nmwGx08ri#Jg3na7w2Ll4^h zB~jz3hPtjk>U=9qj6K}(k*IYw71Q7$RK485VDucaI?RFUUj%CY8lv*w1T}9hF&=h6 z^}jc2d?QiMo#~FRL|wNXb>Hu(c21(MKZk*M2UYJ6QTYr#Z0!`p)Wj80?X*CBmvut* zYbxIbZGjqpFVuA--0?Z6@3{@A>;FQH?}dx=AGLK|6;;o(u{>@><>gU-=z7neM4-*FXC*Zq#F+l#2Y zJaQ)g!`^chQT^(H8gG9r#6C31osT+Ub@dPGeI56t`@H~aUK^vH(;78zy-?#Ff|+nK zDxaHC{Wyf0_lv0Sr@N^7&Tz`khoHt)3UyyaRDIP$)kh=LbDN>oZ95kaMdfiUDqk~D z`P_q=w?9$y{{i!3&eQfC(-aloNA)B585>6?)H)4CwNnGt|F#%`{ZQ-n2#&^>XRZCo zsQEjL>UZLE*54GUeq==Dxe{uCoG2v z&s$u_*#R}*Ls0E*!f@P$>fcAyd`0|e>$NUcC2oZJdpavn^LOTgec!!8<*)2T>t9dQ z_=ceRKLRx$vru{3guePiJ^v!=c{i~zK0@si>Hab^qsE&9HP3}m&o730e>QOrM728~ zm8T7;dE4dUC{(-WP<4F?RZllj{e6IX&Qnx>-l6*c9knkdzGQJIYCkB2dQKhGbDN>= z?}DoHfvD>ypsrhj8vlBC{2*$+|8mElp!)mS8RN3mc@orhnNaN(LiM{MYW^cJ2%EU` zgPapl_bos@cQdLkqEO?y?&24y{`p<8=f^|MODe31nJ^r?V<>J#t*hh)xXisd8ql=fVpuCYP|PQ>*6WuIo@k_JRz1LPKla_ zhNy9OK-I?})bkc#MO=w`@4i6QThMj;&TNR4h^Jsyyn?FRFR1<{yJ7tgM!jdspss6* zIdQmiJ%$ipM(q=xoA#ZU1=XK=s66&Ut@|aI3;#gvPj6A}rMYERz+mDosOQbb^tcbz z&UMuFfwyh{&4YSQUCe)*NK8Shv>E1`~eMD=5aa}Q=AzUyM|U28ul zs$UTpgxyiknU1=D52}B6QSHXPXZubeRR7ze+8u#f&#O`GokX?sFKYf%{m<^JjEeg@ zS7Bb_%c%UtxNpxbfcnmEgc^T8)O;*O-G2tvzb_bsnI2ew%Axwx(#0cPybN{Saa6ya zpynaLL(4+}R9qMJ+eesD5X8V&Csou>kQ%)H>dcMezd`$GlH%ef*62PF;fP z=M^l5pHO)!@XW^D5cRx4sPC?2sCl`A%6r1+RtLpV<7B=TUi%@wc@bikjaBsP#A$)vpDpdOM8TFP@|F8~D=R=UFj~xFM>&QSSIURR3)?N=_P?X* zC+|C(?*^#jlTh~`MAgZCR34MOw|OjtMTk3~#=Qj9@3SucgxbHef3W&5<7|h@|0E2; zT`scZZ9`0mozaVfF$NBI zjzz7rDX4KALtXy{HNXC!EnitNfVdns#L74r7h_3G|Hb}%t}(74eubTJ#@7Jfe^=D+ zn|+^t#DN?y_n-Yda1bMjOMDOT{r6SJVL#&Tor|^-=Eve zK;ilNsdFLxsUB*um z===Gg7^)6NILF|1-H&y#ZPGyBeC$E3vzW=O-MmYTV0#qxLtn_{AL zfxh2wc1F$94QIUcfxh2wm&SG+{}pw=Uxq;6cVa25MLZar;5k%1gk-cljz#ScYf$U) zBI^F{sQsZtP@r$Uw!?7Z13{UJl9K;QeV64oXji1qO-YTmMBw!F1PjeDIl8pDZ8 zX0huAqu!H;us6O%_2Z|kfxh*=3Xc;%z(u$&TcGdvaS_?={zaIcyI^v&!Wz!%VBlb5LGuTQO`ex+P}Y}=A}SRJKhNuFLmBPjW=nC)md8{NW2wQ7r8?N zeebajs5+a2z3?(>|EroS(D(QChT+e|X~JyXjK%=st*CXp3$-sCLgn)$`sz4$peK+x z40XH!R>j_^b#xfx;xmka@0?#z?^kc0K;O>|`BCqkN~rziCk(;?E}oA`iPxjn-62eX zcQF;d!XS*9H_-QULk?6ul|VheEhfh9sQqRHsy}lv4lYKGbDeW5#v20e2xI3n(>Oy>?Uh75ucC`0FKR^3ERz$rwrlHzNL4J*O~gUW=pJ4aXp? zg{r^qs64L2{CEh{;u}=mBq(V2Cq>1nU7P`xpRA~S6hhT|Y4pdQsOR=U&Cejrjw3J_ z*I@;`h{{*WLN<yBdFY3#tD#s8ccZQk zC}DLR57o~KSOx2&?q7tem*uGI*P?!Ju*Drein{KUJAWRPhpVV@K19vOYgB*Zmb84Q zM4b;pV9t-dtO3R|I(o9FbwrwQyA6Xx>x`kqxw4;wLi~BUB45xz7Js`e2ZE~A>lT!O;PR4 z#A-Mn>*5nEizUk1dK!!x|0c|hdvF{+Ma^%Ia#ja@F_d^Ps^4o-b-Ew*bLnMFjsKwL zGfsKCKQ*e3GN9%qt2>?#m5;*id^yySN=Rr?l;sp9--zd zWrX!RGX@ifqQ+AfvtbL&gQJ`~Q0+WIt@E^1?LFQGb>C!EyT799eI+VSYf*XGjhe^v zsJvfB&DUMbj&D(QnzowVp9Ph_VASzK7=)#;DmKUDxE6K)A=Gmoqw@C+_5Mg$-SV0b zvl7=t)mtyrxTm1%d>5)-52ETj3NK<{q&@!{YMl2_&;8pS_pf31#X*fbA!1vohZusfYufjE zLDcwKq59JSgRr-YXQT4G9F@N#A;x5JAi#rsz;%>!1zUMt_e%;sFGJ9stn%O&n z($c8B)ps^Ut*17qdK=)5k3-eNR8)QLMeVx>QS0Cas(+tQ`$s^8^|L4{FX5uWthzhd(NB@lflnptBunUgx0p)eETSq=>ZV=fLK~ zd0jjMH4k%9?X1H*cn3BA@fzAXEr!}RtDxRL15x?kiskSg>iv_kk*&89sQg4=9qfm? z|GYcy)7au*)ILxf^}Lp-`J9XsqwtWqQ;e_x&55j2({iuqVlyCmH&sR`g@BS-)GeOD_sk#n=sV(TX~F&Em7YmJyG{f zMb+1A)P0LF4ELkP>C@8A$HgjyNwF%n#%j0~)o!#_Hs6Vz$uKj=Q=;ax9G1lTmZj^`@}QUe5Y$`{cM1hiC1A5 z{)ejP0`2Vg7WJ_e@pSBn-%h2BGTd zDAvNnU88yb{$G1kdj~Np-p7{sFKV7EbhCZB2C5FaqxP{$sCrn2%FkNoS=6}RqMnz$ zyUj-j)O7<<^|cV2<8IVEr2fsmtLmcGNjKEI%tzJn73X&xK%BORy{{Ia@_hJZX6q%= zIUmC~e%Bc^+~Q`a-^(q*ig*hvV8#(f*lYX#K)JPy_0 z>!|sQGRf9ONmM@vppNfEt<$fl_fDS4mfxnRd0XwggUUzzDVD#YsONXb5S)SfKHZC| z|1YTVC7NpEt&Dn~4#L`a8P)I1(=1PoQS0~wDnDPaK4$qNn)mNV4oCI#HtKxh=~l<( zQR}b|HpKh7=>lbRD$v)fi^Bd}YG#^XiD^#9y&awTa3#KL>jQ+R)Q{ghyIy{VN@IQ=+iRaq; zBR%RnE+=X~s)&iPKB}FrsQs(AbCf$i6LtLp)O@W&?Hd;`1^$N#F#bIIZU{kLUjy~t zYKjT5BkKC0sQ%B#R=5W>-|6OCK1!hCPUwqcF&a+90Q>{Bug*ucyB_tt!>Ic%qTWw$ z&<{VOuKR(37;k}@0;3aWK;54UwN6T4JnV@2-WY_+(-idX=cu3accR8|3AI1IN41x5 zA^C{H-*-ceKkp)|hZ4@tsQ%5zHnbxe1u+(JThzSvLftMddpNRbTrySRQU-Y2pW%3qv;Axay+X>45cc5NaIPP~Q#zp~f3$ldba*)O_~B zLHH*sU+Fg6{kc*78;e@!bFnDy#2WY?YF{hA#rC10sCWlf#CI5hMgOwrOhfhi0Om)( zt#*A8)O)H27RQaK>)xRD!@S#UU!R8B&u*ihAGF=_*&V})m!O{i9JL>&-(mGx4fWm` zh1x%lqQ;SIr|okQn3s4Ks@_kdzBBxGS)32G4|YV2Yc1+IpRpw7+HLElJF4GnQTys! ztd05iSpUYM`h5utVTQeSeG^pw{zQ%AzBBVao2PE5b`D}qOuXOPX@}acccb1kEJNHIm4`j3{C`E&Z|EVLpEj6-cmZm>XHeJqAGUT%q243i zQR7*J8pjP(K9e4?_9~<1dk`v*Td^U2LXEfPQS0vi(?_g=;eXrr;&jyf-ADB^+X*}09?KE$K=tnzhGB`5_I@9N6^LJ; zj)$JIy!JxnYb#d8C#dhR{HJZc2BYTtGS#)?PkX3zG(AV7xNI0 zLe1AM)N|gU@{|3Nt>Yf3^NUgK{DXR4{L6N{4k{jxk$4W3hpbm@d;`&2uKeAV(> z8MW?apvHd;m5*=keDQ16pV6rO^$4n8Us3ZD_K(G5QT@7rn$H;5?fI3kF7bR9f5Jw@ z;Ww=D zGe59>u@z<^o`R~MJ*a+o9@=v%q2^(Xi+5sE;?Jmd>iui``X8wM=LIT{MIPCGvvDBt z2~3CKkE8j_!S<-@qCK(qXA4YB+#eI-RE&o!T)Y$86Q9M_Sm>#(lSQa?a2NIdP5F$! z2ZhBk4(`At_%~`@-b2k(&gb@?Y>g?1`=Q=%Gf?Ys1*&fSUYOyi{*Ohin{}u>KSlL3 z|4YkPc~rheVs6}q+BctKb4>Ee;(n<5S%s?mhp7H0du`*-jM0gUV=SzIOQP_5P1JSY z-q>@azqR&KqQ+SX_1qR14X2~(aV}=Wzft3Vi^_Axch+7})cMMo0efHs&Oz1tJ4}xi z-rGLX34@3iU^3i~sqi}Ld+;;rJK6VxeRsq})ctc&dESXh@fK=c zKcSwV>^0epS>y+z{37 zEYx+YQ1@>{t&ijG{1eo?d_m23bYFX3a@6t6cnXW)7xeh~`#eRTX#U>+ztS^YL^#La z-)9FF@%VfHf7~CjGVz}Q{@yx#iyHSQRKKDI+V~Qn>NFA)U{h3`^+1h#igOXF{~J)_ zIp&U^LEV4Lc^{R($Efx3&cz9%`+Msu4eI%2P|vG_6|f!F!Y!z}^~A8}U?fgUJ9e?t^#`N5;gyAQR}J~YMl&m@eEWx7NN#{81{Jrb6394VMQ1|!3bGQlh?*t4@=hJx&s)6N+r(p!%LcJIACbQ$MQSk;B zKS0$<*5uazrl@f*a9%_0H*r(=d-tU<%t726wJ$D5y;m-v>i;LIKKxSJzLE;n-wdew zD~f8rGAjQgupG|D8h8)2ALU8q@7?zcqn;Ci6L2W1zT%{|{-i*ytC~0(8(~d+jP0;c z8rv8DM9up?%!^-8b(<~7>M9gfhm|l0JEQ7%5^6k4FdOc6@l$7%w6-rK$19vKfKi#> zSn2$||2|gS^w!^{sCBRrHJ*K_{rnkfUB5x~D@m}`cO}&M2B^Ak>f&Cgeh+Ytz?Q@l zUHk#Hj(?!?6fc9B3N_D}QR}BMD*v5O?~S3T^)k<$KZqLld904lP}da>vHRx-^;0a;WdH zPN?(aPUi|- zE2we5LDjQwR$J!@P# z3$<}ZqSj>}48oD9ajrmJcM`R3o}%`#RQauc`B3Yn9xBfRu?Vho@xQ3~ic`S$&u~;- z_D0pkpQw7fg{s521#N%Hf_hF})V|Oem6sW)dR~c|&yA?-4xrZaHPn9f*d70h%2(V% zc0LoTy#m-3o1pfW^Vk8eqMlQ#u&wjjsP?;{o;MOTpEFR;o9oW6M(r~PU3>Q4()zx$!yi$gFjE<)AK zCU^V_s+~_5gnq?ro-?4X&x_h;%Ao3~vpYW>wIBS6%Eu1W^G~Akdll91XD$vXZuOi3 zRYxJH`|`QC9IAe5<2D?F+8@G7m=#d@t%=HSbJY0SU?6rv^|v=_{zs$cbuy}7D^d0H z7it}zb>}~$#t|pX_N!pj{#4Le1GUcEyYr(kKk;1D^Dd&+&qLJu`HISCqLMbgVAMXC zAJvbFxC|q3IQ~HOb7(2+_iR-E7Nd7vp)c`Mcm5?RFCS5L@Dp=k($Y3R6;OHVihAx4 z%#MGc>gf;`#^{=;ykAFMcNf*47cTyYnpdB) z)?R$ne5XR)pA~gqL1!6My;MidV+&OMc0$$LaMb;4Pa57hHVV_IB*s^+54s})+FwOIq(#!KE63KRkr&gFek?cU>;oSyo=?D<5#hLJQ8aY z&qS@?m#F8Zt!m#7L@?zz1tbJ&#ges+Z}9&2^-nZKZCFu@g7wEV>Wi*6{zdGVo6+%T6a%T^_HlKwOa;t zyuWiLP9(m9s+X2ct-YzJIy{WJ{sXGrpk{VmbL>kz8P$ID=JxYTAVK|z21L`>iTUxtqF*orHtcQQ2@}IVq^`jw{CLV+8?-^A6e|K@N)|QvXSccGU0plo(si)9Y=^3wF{phgYe!p`xl!-gs_2gqs5)$f zn*Tni=d4HVL&s3-;3euk^V7uvoot;ZL*+39wLjE$_Cd}2Ja_&C>N%fL`)2&k_P$Mm z8g~e){amPZQv~(gaMXTM4^<~UQFXKwb=_l3gzr)P4(MX-1YvyQtk?*PJLh3+;%}G` z1H0P3kQ&whFx39g61A^Qz@oSVYvLzNi{-oddw<{B9#tpnQ1ksBD`Nic_WP8fc#QZq z7Qv;znfFk2m$HYg%NnSd&vYLET>&^?qxPdM^xd z@f=iL?!abv1l4ZH05cTT-!iCvwRHBu3B==3c}_mio|_R>m!TMh^-<65hwA4nRK2c4 z)$3JM-A5T@`Avw*TM^XHeH}0eC!)r^0o9MQm=Pa1qYt+0@}Tlm3-#XXidxs>QP1D$ z;0yLV9g!#6C6iGH{BUKjPek*Mppp!$0q zpW-W2ey$Gl_i2USP|t5V-15-dITqF5`KbEZjGBjs7=*qf>^Z@xe$+tat0U^UlTdls zidyd%QR_L$NL#nHFfZ{~)cW6t%17WR+n2*pbukgOp5~y&eFU|R?xFV4Xrpa>c~R%X zu@1JtAl!-S{|#)7F~->O?x_4u!@0Nzt6{yd{@%a$xe_%F&p6vBv!mv_ENZ{#hbpdkr_J>H^X^&2Gzgz6Kp&eumJHR%!jEa+V^)& z+(x_r2Vk8^mbZ(}xRdQWzbcmE{4CUSZekY|pV zER98$`}>69U{pU2U~Npi!s@sKYCI=V>);z|on&2U;|NF1!$ACipRfl$TV>;EyxR8R z^{9PvFZ$tmOoCT%9KOP|*msRTf96QOusQmzwYqA9dT(t;?Z=N$`So3A{Ru+t$3;N1*EW9;!~tZL~a2!@|Uu zoUu3AK2^av0@dC@=l`5VHru-E`iQDm&otpS( z{v^i$;%cbl^-%4%LVZUJK<%qzQTNY7?W4y~&$-~v-*&!1)k~C}mjAq1gSZE3UXG#G zf$uI`@A**Qef6B(Q17|1sQj%)^=B`}#mlJu^bu-aYV5ZD)kF2aJ*wZmF&mC>$2X($ zy&qHJP0Wg4P|pe8W9<|`#T8KX-4He2@u=s`MD=$8D*xM2`Mru7_j3%wlzVNTEQVTd zb5ZZ}o$mNqR9>^~vwf^MCL(TyYNtP{pX*TT`XmP7OLsoje%pUbpx(o+P}fgGWu zyysE%_0k>pKVbWM2&zAgQP2Ag^&PPctKk9E{u1|~y+1Rd_Ur06GzxzXhMkCS9WpB( zrag}Dz(O29bHv~K@7{Qh`g{Lg)N;(nao=OMuN1^+#2qmVyQ9|W7SweQQ2T3=K&^7 zqn)(-Q=;M=sCLSt`VoPxu@&aU(-?|Ar>s8mqpoj>I^Gkt&#l2=+=A)wAJqE!j;fEq z(>9*esN-2s`6`HNrzEQ0dSejI#0D8h^o_xSOjOe`9#PnmvCkE+l@5(W0>b{$u%{dfoEz1haGgf2jQ?+YS4kXpOyymt!tWb<_5V zs;K>ZC?3X5sOR;(W#8d1@Eq~E+qNGrykq^kfYmv^;I8HW4OSvfcF*7Y|I28F+lVit z@;vUo<>e2oK>R0aUSFZ=@;hoCqCK$pUlP>*Tm)6Gbx_w&L0!KP^W!SiJl{iI{{b~m zu^zhbbBs#76;+=*Q2WqcRQ^w(=J`CTo<6zbG5@u7mH@ThQ@c1XYCRQ4wOb9=JO1yea~a7_rzF= zI18#SJE7Xygaz;hYQ4pOV&7*;u^w?p)VPkKuD^lWuY8}{I!%xIPO6FO|3K6}F$>lI z^{DsD9#oxQLFM%k>iT!6e#U%e_oYC^xm_HFn(qiyKiZ<&9f)do9ID-=sCNHCy+;n9 z^8XL&{%6<{zoX`}>2rHd8`OI5g__r?sOPLg&C5Ql%KABu`7rTI`);lD%6`tDjBmK^ z8g9hnul;?_VxKqs`8bgoqazKL)G6w48!#At=?N=P2%;a{73mp15VM)CN>;QCv*ocL)}kN4ln zoaF2A{(rn1_<4NBb38nn$NSxL8B=h5DSwam?-@1rczpike7*pWcV7R&CB*M=1O5@{ z@&3KXGSNNW_sCD2!SR|gJl=oT^BFcKz7W&n{dp-@ERWA;;&G_=&#>4Y@9*30V+3)R zI3Dl+hw2zkB(4$HwPLkN;egDrwt*d>Q5udr^@sfDF?}-Aa zdM|-1u@bJskEr*yBzAh8;M%a{oMIEn1gr=YP~p(s;c4bxG$yRQ`9O z`f(k-`xWYa^&K@&v4dCs$el zg{V5*g39M9R9#)cba)@@pkI2c-v+4n%VgC3C(#%0pyvGnCdGHC{6r77JZ3`e$GK4L zmqg7&6;z!xNA<4@s{Ur8+Bt^0?yieJqUs}72J3f5tWR9R#j{cKvz_XYc zV`sMO3!>J4Wz@dX0+pv-sQ&$fc`$kw%SSQP_ed+ui|tYQT7a6LHJBdHqSncKR6kQ> zwd=w$KXGkTy^lk!$1|vQZ=&9Z_fYlz1ht;uI6t}L-?0eCeY4qhB~U+Kgga|G8#&ve z>hU*Je@D1@s*9JR>SdEVegM_pMN~d+qx$z9HUB=@t$q@r)>nv&bE4V_L(NAu)PB+e zb$?%Xeh_Nh6R;o7Ma@Iv99F;CQTuIf)cp;yGkR79rhtET)^sP3w9-bgPOml1+CxhP<7V_mFFSu_$X9; z&p_=LJ5lp{6t%vtqsI3EHD56cS-qu0ozI85zACES=BPZiL*=s%>i#j#C8+%F#t^)X z+L!$b+kL^Pe&j{XYY9|+w?y673w7TtEQI?}^Y|4tj^H9@IBI>hN9{LVQSFRIjbjcf zKO0eXwiC54pFqv`B~(A|p{{?48c)=swtfq7Ut+9HoEFv3 zUZ{057BxSsQ1|aZ^?xr`!oye=+Lim)pwu_6EwEot^3>Q58YypO;7>bkqAd3=ZJf7A;0yf~UtIcD`}Pqg1jy#YELpLezW&qv|0K zDu3ls?Nmnft1hZvjZxRPMdhIvDvzU3`C5P)|2ouoccR+ckIK(s48y;%8U|LjIk!legU%gQI?uY8vaMXSCQTbi(;$5igPNCNO70iHl zQ0@3dczllWUJXD!=UiQ@zuQ=p_&I8RGuE^D&w=W18Ps@tqMpAJYvVx-!Nm1#KPiUV zciW)yFcLM6*{FW3$4__}b=}DZcHJ`!CjNnCFm0sGe{0-CydRb4ZVk=ZsQN$X;{QZ#X|-P2!l1JwD~I3F^JN9QD0;0weGVcE;jOtiS6} z^LYR@k8e?V3TtZP>W1piWYm1D#Jso}wJsl{z60VlGjpTruLi20ol)y}3~Jr|iTX}n zkDAx#?)(RgLmaEQt?yK*dCiGBUJRAzD)<3Aq7U=mw1w4WvzAsDT~R;R^+2u5kEr$f z6*cd_P~*$f%6@Kd;oOdzml&-*KDRM1>fZ;7*T&ux`P`P+GXhT=6; z{_D55b+{Hw6TiSon6rb&=K$`<0XU?i)#*=ET@>zQ@3)uEJe}=(vJcka{1u#!8M}DA zzlS=Cn&-@2JwAJ|E9&{#yV>)HU{&J%xE5n~xBX~0mL>N4&GJzZHJ<}f^}h)<-~YJt zZ?Q6Q`W`kPT~X_F5c=a-48kcGj+;^W{)Va#pPn}VSyB6GS=9ThAy&seSO-sF1x(Y+ zejaFt?TM$N*4+_?oD}_N= z+u75dpMlEv64d-`#~ipHv*BxOf++^u`>8(`Bp!rncRR+#6R7;$K;`=_hGNhVGXnLV z7>~McGV1>2sPXPVeXksH$Iqea{yr)XUs3x_;83gEOsM>oK($v6HBSvu<7tNKS1;7Q zHVT!;$?o_9)O8zBc|U^c&n47z9-+Pm{eHJRCPh6b7`0vsqn;OmYBv%yVLMcRr=mBn z?)-Mt_>N+Hyoh?tTM)f!9FuOm2Gd-r~cwW?V>Z1DF3e`>zRGp4O^=}<&yoa$1 zo<`MO(cyMqDO8=*KwaMj)!z}Q{!K^K;}X>S;wb8Q_fYwGgKFP*gsuCSsP!0vYNrEg z9R0CAjz`V!V^lr9MZJ%HpxR3|(&{ohY8+Kj^V$RToc^f(49B#%0#&CcumE1b${0Ax z_SpzjeNIR1e`hf(CLV3SUoVB)2MUj|-|r7Zt^4R>EiQ?APn^X~7=N6#cLY_xKT+d| zGTz1&3pIa9Q1zM)z4d{buLyU(B^D#@g4!3>q2})y>b@VC5fe_Z@0Fsc=QKm*uM_6O z-l+VnMdf=7>V1D0Gvh;4-eOI(eIhXi5$8nBXLZ!`I$(7i=Ddumvka509~Dsj>xSCb zhhtqlf~wn;ldUdtpys<6MqpK}fy;0ye#T}vZ;JhS$Ny0IX*AV-@6Z>=5pO}&QHg2x z-98+P6CcI$==X>HKClYbBA$eL&O=n)gig2jTO?}UM`CU~i`mg=zRQ=3H?IUYY^LhZ)j}w>;W6rVpD1?cLE1}kLb5z}QK|QZ8dcXTn zQRjMmw&HEn{nO@IJ^hL5_a0PxXHe_;2`X=X^X+&J)baAD z_0bB0uq*1iDX4vDH>w}kQFZYJz3X6sy@!gT`r83je-lvsd4#INPpG_j7FxZ;MXj@H zsC7I6)!z%KJU&3>=QAq5ev90942BRV#hh3IweNL7-9HGm9w(vZb1o|1TTt_M64j48 z&L^n*-(n>Gaz-w;@51e<^%#ALCj;f)a(;U^G&X@(Kqw;b9HSbR`6chbvzu&Bc zI=&W__v@(o{SWJ4)}=Pyp}2{75~@B*F7tT*9hXX|yd+s}&kshO&xIOiVbt?$xVSI2 zA)but?-!hfek-hw=3@ckEvR+&0$XB(l{U`(SdRE2s=vur**=pWH7~u;gTqmEG9Fb2 zt5N&kX;l4P!eD%bx-b4}o6jKByoI3pR{(XsG^##oxOft(o%yKu%y!iCZlLzPFR1w~ zxW>NAE2HXe2r55QQT?2Ug>b3!4ywON*V?)%jLKsz)Og#Y>Sz?IUklywbr?o`5>*%bU=VR*RDTA$cp7T_f1%pBj#@`gQ2q2>Z_iDHs{d@L=a)q7dyTOOPC;FN235y* zQT6x~b>DYX9^-DX=cGhkmjzYlc~SW)h1#EfNALcPy3TK-)pIOV9pyu<O1!+s;=*#`Wa)BAE0uAZ-<)4o|ps2 zqULue7RJ-4=XthSe-fkmnF)1YQB+;kK&`({sQ&lB_IMJ%VCZ(6ha5X>9`j;Rj#oj| z+gMay_F^@>gj%QRciMW&hgwg?QT-{0s-HTjaWqEdr#)(3hN0SRHo`-w`U=`* z*XKfAR{^VI6V&)OqVj(j_1r6{I=YRT*9Xow&L61y4BTz|cY0Jmi#w}eZQ_QQ6*r;w zmD{Lw=d;KDoGBIRJ7fl`zk5)1o_w$6HyriHX5)@T<-ZTAJ}07{vkaA=!>IXvjJobU>bijAmgh96 z`7Vq)UlYq; zJw&4BuPIi*fvCDXjydo==EYx_AM>8H`f87=uYsuiOhWa44XTb0qVj(OHNH14_MEc* zq;zIO?>a>7pEXd|_eJerQ&4p>6V9XUgIagHPusX&qn`f*_5Bh5j6EkiDj&sA zKj%cE)zX{k4=b)Y! z^MaWImCr0Lu7IkmdYB8xV=3H=S|2_aZU0V!+D~et=B*DZPeV|3F&x$IBvgLaV}0C$ z+J|FZvhg-T)pvJPfA?TXyoaj0beHYtv5KfVpN3(066;}%D|Wsm79(DV`VM%3YB$SO z>qigNx}SzQaT_+p$EfSWui3gDi3N!-qUJTmKlb~mlvtj404ncCo&TW5{{q#&52*E= z<+}C1AS!N(%138ZUMD#BVLswF7>dC+?Dx+NFgJ0*o3`(@N7dgXR6b{*>Uu7!-q)a> zvmHb5DC+u`?)V4P^P}9d{W1uHiR+=}V<0MjXHaz%}wN56v zo6tcGu2VLG6nzuni7It;;8<@yEYszh|$GH;G?kYdm@1uFw6z z-h;ET569y^^!OaYF*pP(|7*V|ID@|IhiM*py#M`Y`p5S3?E&1tb-kW=d{$t{Q~Udo zXK^ZV%4hcXZ#JN}exKXVb3IV&@I1D_1TU=qdt+lA$7`7LrM(9|udI$ku@T2RV-q}$ zT8G(QTRo3N<>MS`US6Q)%m0lX4?(TVQmFOV8ddKTQR`p^D(|Z>JMMS!E2r;UJD&{o z-pGl%KNR)cVwf50qt@pzRQ)bT)$1A5KJyZ_ZsNbQ{jN0Xe58x}q53lwb^S8bdOC%w z$0+Y@Txn44lt8@?yQ1Vc3AU3zoo>sC5+mtF6P7sC^|p>V1|MwQj4R>b3!@pV7Zr zohL+{Z;i_5Z>au{N9`B0P~%;Jx^AoU5Ne&DL*?b6JN^xIz3032D-kO18BzDo#@}%{ zhGXU*_UBpMa4_+99E1ga+VAbQ;R535|Fd~sh1%a=Vqwhi%YI&HiusA>V@bS>g)lK$ zuY=W5`C5(x@iA&2ZW$%OTmS7)^E4Q>UyeZKVFv1bxCGVzb*OpVg_{4vsP%9awQt=) z&F2TyJd}xQ?bXJN#H~>InSi-*E~;+NU>f{@x-NllfVU2cpw@45)cKLl<*0Rc4E5Z% zsPz=h&#ntbt7}ejrsQebfVOSaUzB`Y~!zWbz zCGuGNnNj;#80xz#0+s*HsBsR$tvC*q|B?YV?rNxZB2dq7@9c}}$7oc3CZgJ%j#`iF zQ0<(;<#-)+{g6O&B9sh{gc>nlDx4O+0Bf$Gz-W6+e z|DQOT^Iz~L4vl4X)+kPZ_dBjLR^z(vxEK#%->B4k+yL);;!b?)|5wyH@FWQE?iVpp z^A&;`XED_N5{VjbC)7UCA5~v}psw49T5o4j;|@q@X|_$IRBiLo_tHq3?7-0>r*_HUr~{fNHA{)w$VqNDns z+{Fb^*Oy1tcYRddw?y6F6_u}XsQyew?WfC8x9zBUIO2|&lDVr*Qn0~ zDXC}T7pVfg@4cj{1H6Clp$%$11gEjOE{K(hC*TOYfg`bLP=NQ(8J?iNe-5R!ex*!j z^H39WbG$98Uvsb+Ucs`MAbo)M=l=Sr_Lrf?`QDj3IKcb+|E{R^|H7OYJA;k4I5sEl zjUDj@rp54(0PlBMJJfugz^wQZwH}gYwDUDl^}ZSJ<2_XShca1S-lO6)nJun{YHt9x zz=f#&&o_(h-_u~fC z{n2t*{_>#m*9q0{HK=@D$10dKr|tW#QFS#8mDkOv_r)))iA8f+eNVzL;&T{*adX>z zwZSaJvr+5*2x>exu{t)-WAnBJmCs+O{jX5o0PlbAG!dH-r_5*P2cgEj1GOG*q4Jt2 zG{F1aQ5M?~|Bc#@^5nODEFAS7Yk_~`5L|*43Rs=JMAcQgg7)5RgjI=0q1Mq=RDMzw zvVEc<1`+p0t@l}|{H{hl_Zk+!mzWoW3tRow!%D>SuogbWd|0%Iji;M)wez7fWl=j{ z$2rk?-04%y`dbL~ywRxn-Gj>OH)p=$cD^%eUY1}VJcC`aTnU@k?WlQ(9%l2~1e*{q zMCIWZ21Vh!pk#pezlUp5%GTi-)bkRQw)b%r)VlR8W8)1))z27I-5tZ;_z^Q>$Ff$p zGf@3IgC+3`mchd10=z#@4MxrX9n}7sB;5L27d8I1sQv67sy^bCw{=nymG^e2`Pz%& z_#Aazo(gtfb5z|=Lw%1N!e00Qt6}|$Hjk^Y2Jt5shgY)W(@^=li&`i7D%*HQq1NkW z)cU-E>Sw$vcDxkkA#RTYalSJ}Rm<;eR6g#a@|?Dst-DB69nC}K`vR(6-|BW>KGgI2 zVHezl<1uXw8|Qi~Pkb9wV@OTg|H`83s0}LL%di>VLDhFyExW%Ds^2S6`|%CbdnKs0 z#?hJO)(w;U^_?lo{;$^7*{6vkbS!;XFMAUt|P|tgVn$M6n_TFfMsw>~N0p9;k zrYx%eOHjw}qvkDrJFBnC&Oxa6)<#sFU%|JSslB}il6461{`WauaW%(19Rs|7?z8PhwI0jF5x9{+X9=tz@@Al;975veQ_YDr|W9|C( z3-JEFsx6+To%2``=l8dKJ;i#&$p_ec{f2t4>_qK9J_9W-kBTRu=Ia`2{ly$)byyKg z6OY7GcoHAujKMaa1Bcjk+b}K1-=pdw;ZVzWA8bVY6183{{%+43h??J{&ey2APcqEr zu@=@PUX6NxMICPIvntjmo{J^%Erwy95!UbDQ0sXUYW`A;w0ddk9D!PQtDS{M**<#` z)t{21?dRn7sOL|?+T{HiR>tCEsSg}Cj_(${Ki=}2b0YaB?&&-`$=)v+rv&&cqMaIe z9p9to<@8kc7tAot>LUFg{G7o3k*Ip^INfYCgYR>WSDk4#nq_(HINQA+aR}G{!blu4 zC&1@9-a_T!_*|Q(-1F@Fw>|3lZ&CYSh51(Zn^ARt4@+VG1pz*#*<^(3i$Ebgg=NGE|go|yz>V&GN?Wp?tggv<~%M$y3TJ)!Vm!)57`%Vwc<;y;W zs^>&2tsa`yrcUCZ|$$Iqhnvq$S}9Cg;SA8~vM z4&?at4c1QGjRD^O?tcTSzS3>7_0b#k{@jP<@iBJ9oSW@A^Y9MwJ=FO2Z?S#iBkH~c zf7#E$MNs=d9n||_I*y|sH&OpiLYr;m3+HXO`g^>?<|Wond*2m7t<(0{1~=nWOuoy$ z!`7kRzdum>eD>WokM*$`@jTQ#{0}!{(LDh^_wWr~!Sj2qewOdEen#DI>#7uL{)b^S zU58AM&sFCQ^rPQ*Fp%R957_UoUO7KGe>$TbwDYl0?Il9(t0^!c7RH!Z4P#(K)IQl3 zz4h(R-$H#aJ;Pv3ddR*Di(zcyHK_Y`q0V1KJ?}GW9)F_hzuaN_xpxDWB;Jn!80Col z+#VgL6Q@A6w+Z9p35b>v|6QS=>`;JS7A;g6+F*ZfbPjB?#pI8pppxS%y z^f_kzh>aRg5>$RdFaZ`pZ=NuMxFKf3EvP!Uh1zdp9k=&E7^>ghQS&##IR>K>Prx`h z%f%}(F7Xz3{D?b#*&V-&n(w#hhu={B|AoqPtiP=;6QJ_h9M%60m<)%Y`acIXo)xHm z?MBV}e$=`>h3T-!i2(1Pn>0qn-%;ONsZZMeRu9V%Pr+<>)gAXeW#4;6QF&>E+OH;} z#=Qbnf15ECUO?sP4W_`Tr_I!;dMk{&z8z}69PQ#e*ns#as-1dg?E9n_s%}o8@^v5e z{1>SG)9;b{bs*l?dHQ$tmlfT>nB{aejY@{cTn{l|B{WT5USs$QTc3)n&)rmj;fCysQe9a@qASMtwQB# zJ1T$AQ1$Q&Yh$)677xYc#OqPtr**E{ypP9>#0xPC9!HJuJ!;-#U9K| zANAb%sCDtk8F16SKeD3MaUHCNt+6p~L)CerTQ(n=uqtr@EK8zCqS`-w+rH0VV^QKt zcWk~!qt^X2R6Wl^&DSQ>K6eV${sYwWKcU9uf7kY1{JHR}GT4{RTe zkBXC`<|7lTzZKo_rY`R49Eqyad8oSDjT!JNYMuQ+<;C;R`Wp{x5GTh{*b$ZI4H$~| zPo`X`=RQ0G^+lWq3Y)_Y9IL9#ZeyFIQ>z1 z$%LBEP%MWNZOT!-4vuAuVb`_%ef2sJO=F(3Zn;uEOrU!dwL*)xkvqps_QC2=_xz^ABv zDCoKEvvpDPHxAX$<*0TpU?%*IK^XkPz9-5$yJ2~b&qvMUV^n{WytMUH1+x-&N3E*` zsPUaa?eCwkIA(rj`%GI@9;c(ma}L$tpYC|*Yx@rFf<-vK1lUcp~cjW*6UcvEL_aHxFvObx{2sh3fAH z)c$=1mG7wk**No~;sL0-+lZ>G%g+BWh&btIJ6{M@7mZMLGaA+IeyofyQF$)(#okvv zu{7~%RNck>YTx-aQP)jH)x}xV{C`8$S)p$>&gQ6knT+*uKNiDe-z{HtF%R)*)OdHJ zp7#({KN)}6d#V}gzE!AxK0$rA<@;&R?Tf1O9jJUfK;<#<|12NnQRmyE&i{cL_uuaL zC)9Y-{IdHZQRA3^s*7!?{=If_Vs=A~t19aFK-7M+3^fl&oKI2jqnJ?wz4ehB)n0Q9 z!a1n<*o|uEF{+MYM-BAWSqaoUHAjtqHfmj7L+uB#d;`7pUJBLDXw-hS1@+w5sCr1? z7wFwDLs9e888!ZOsJz@j<;5?WjjJGPUfZC?H4Rngn^F7yb<{db>2K{d$C|{8QRDlF z%1<^=pf`_^Sdn-*>N)37U-rhs{es8t^I<|?x^e6qP~-F zIe(zqPZ`V3*Fx3bFw{J3MXmcA&Vbl~-gTWHRWA+E4~JkNj=<AQG8P$)TaRYs3;tJe`CE^8oe-H2FJjZ=f!_b0K;9IAK7Vk1l9Yiyb8&5|K%d4~J`LC7iXfYZ;B&KsPkJ;`MZww@B!-mRwRdwr!n>we`Nhc^x}(JYoJo@6XG>qxPeZsC^+*0UK8fY(u;b2V=N#cX(-MJ)Fl@0X%d)dQK z`%{u~md^^9hqxQI!=o`UQ z+gG!q?hAExL%ny_VI2Giqv2EMYt*{_h+40~6>a`XqxPYWsP)p{#S1Vo@jCQ=2e|kt zs{LP>8RJy4{ihHru7cX{d!xqjJ8Hj~jvm~AF>yO;y&iF%LEU#11M$A|1;!%&gu2hS zvh9~~QT<4VYCjJq!phF(sP_7x@;D5&|4nko7oqaA2G#FPsQ%tWwe#AY_p4&>SIl8haGSas(+cPnx#05M1Nd{nvb=p`PhxBw>zkL z%Tmqissif#08}0qqQj}2?tbJ}8Z;-0ASOh)bdr%>xRxVH7PCaQjWU=Yqi&GSxFe@;6upxVERn%4)Y z`FVq?$8V_l@vCF=5CfHuEU5d6pvD=Fy1yFgzJ{ngv_{oI7u55|pyqv^b2Vzc?Qot$ z-TxTX{#(>M{&43LMp*x{qVCI&s=q3zb{nDk(*ZS(-%#^A$T=Ky5syXH>uz^Ec3sOsm)hDKq%x3O=gUV}Z)HeN;gUZ`4)cmAuZu@p5sxG^s#?=qY;t34J zI4x{nDU14E>W8IpJ?iI?cc^hiYia8z0qQv^Q0EJx##tHFpN6QsH%5IQc0kR?am<0Q zQ29yO%JNbcHP4N(EB3|;_!RZMn5VUUpN+=M#D8H%yo2h$e;fDn5-JaEQS&_qmA8w| zJE-wJM?EifTgziX)O@ycuE27{kFXVHYiHj@Q&ID^-+2}_Pq$I~{~Odgir3!iDHEz* za-fcvK&|r#)IQV?qvG$V{Ek4?!8BBRbFe<{!Bm*IgY`EbDsF{Z$HP$j{Vde?&?Qu! zKcL=^={o+Oz4wlfqWa?g7f=x_fJzY%hTa3A6A%drCDf3FF2W|+Bn!!I*xe9<(gXz? zh+QloqNqp_!2*J!pn`P4E?BS^?7ckibLUL5gb+6P{rz6gAJ2I)+;+<6oO@^H&Ye3O zJB=k3{S!!KTxF6DBh4n=M7o7k`fXZ{eICstmHX*pQaPVDlgc=Hg;cJe`$%QHzDp`{ zKaq+b<$Sh(RY+w#)Fd55dNHZk&miqannNo5D@f)1+dwLD+C(bj>j0_PJ4PyYej^pW zYJR&vYLd!)FJ8;DNF}bTNM$^3AeHg5UCYNvrN90qmFs1-T)ThTkanfqQ`3A>!L^oD z{Miu_hE)1%C#j6TgQOEkKOq&r z`i5-&6jHffjwKyP>Lcw%x>4KzBo%$-^X&8OBGOirdyvZYAxrC5lFGP#omBMwN-A-y zJjFi$s*_5;H6WF7(u`F4siW5SAQk+*NoAgyKq}*RJgG&xfK=kYhE(|0lgf2x6RGs` zUadbu8cq3AQWL60-$GN2KNf(jI_}NA( zaj81fE_WxDaXgPy;rBk4NQMAFYlrN6q)vabgdN#(h6IjQJBN-BPQPb%?fFx&3e z+649d@>D>FP`r=9wu-tWI`L1+`#BEL_9f2560nPCnrf5jZ%53+NJpe=$HbAv(fP`ogjbj(kq<}O{Oz;(RM4x@6>02VK8mKN~3h7 z(o57e0mmfTd!yrA#V5`E>G&+_XP|2e_%@(tlMGg+0SweLWY9wE?8J3B_R_%L0BrXo zHxB)ku~!{ghdQJ4c6gqn?lt)3{@D~=46}eYwzn_cm6WBhe@d?2D0PR0x z_hR&ag1k@<>RJ+)=ivW>{3`so0vke?lK!Cb9`YB7topeYd$Y0Ki@Ip^{eaDu$oQ~7 z5IsWUz}1)7v{hfF?g;w2a6GR(QdbWw^N<_H@do(~YX3>}I`kRw+lMZPu2cN?!ON}N z^%$}l)Wsq5EBbFB9W1)AlLw9$wePP-&m-_ZkH0r@+(rABiiKOXi`N^jcfflWdN=4; z>WQv>_+3eDHm3eL^d+F{X~s}{${UdtdRXIC8Q#O#6`D=mbmDU_I)-wb zbWnNk#>dyd@DaQti0=%I-Q9}uU+THF@Vy()64Y(f_88>vLzjX< zdYAGxwVPd&s2_^{-lP*a9t1-SI2VCq7P?+Rz5%{;r|tp9`B~^5NPj*>z7ZI{hNl*7 zBuC3@~q-aqI=`3+m4z3Ac7SVNof=QjNM0J(qA^$qx1pmz{?`CA3&l8@#P z+6tdT3(0Io$3Sq8Kt||qd|rocs$4awdqCxa)^+ zsrwZj529;1hfr(ez6R$_q8PfF^a}L-fsQONeMbMhrSj#G7rK}jZ=jDaA^j1aF7Tg6 z{$=XC*zAhFs$3)QpspHiJ<(Z}y0_6)o}+@=7F})N{|DUpYGVX=TM@4q_@}{_1>PLm zcVXu}^a-6wY$~GXBHCk#;~2*M5$x6@0g1ryuFv)V~a-v(%o*uEd93$TgzvFO|Pd$JgcXrE|1ZJi^bk&CrYB zdIX)jDK8){-H~k$-`U8fgX?DWIVAgwD-rkA#FK3)u71S!UvRX7_bAv3Nb7?2F?fWU zqH`(7xA47-{rMc7(O-$dUg#>?reJF%c)rJ%2f*+R zZAZ~jj&tW<`mLhIs~h^)(e@c_bEy|g!=pXE#hfg0;$4_{;hLDES*XTQdk9qL5L&qj`%w?rWLRBeuL*`ymp&0z+=UrUafa6BH%KU#OGS6uLI@No@o(Nxgj#}EE z=c=Am^+R}HKqp&|3>{P*|4^C(whu@3Us=Sbua;OBerN5dOJ zrWyM8Q8!8BQV}_aeBk*GT*Eb%*T6rN_`C&{5cTQkxSxD)(mSwI8NNhp4nl{Q{L4C~ z#;DHP;CMuRUZicW(zZh5wTbrr=>Hs?EwsHmxP|V)uWgK{I@nnP)(zCZ3ct`f${W&h zL->T`8yKM!Y&?&RYv`{RDPK$d>#DZ}<#AwLK_52O*!89#zfm1;QCCG{6Oa7g_}84Y zCh{wYM-aX9D6b_SkFE=ltBt)+6bn^_lnCEB_$M@pIIs=P^$2{+k-d+)w&-r9c0bT_ z?Q`^Bs4@>?v$o>qk=M{>EpMlMF@CM%sEJ;OuEn=2(a936>lk)~)+)9*%8S6%o+ChA zM|fAlyU}KI9mbC~=sFMoFT{>l$N9Ay@A6=K79H=dr7~pS6+hlYI zT|m1~oZ8(&{yW-!rF=IrcW4RtJBMLwhTnshGrRY-M$5Hn_ zGH(%+JHUILj`vHD|B&Nia5VvIEBdq<>666#YxE@}|5TXmAUfjJr%K>&8|Gg^SpRMW z;}G-;y#b zb4RYG=&Ax9S%(vvNL++&)>!w&FNd}&hPSDBL2bRLasC_KJ}^B?TNQMC3;q{WFcTY} zVdGqIRM&q0hWu67n1akx^i3QwXosy!G=?f_l2OQq)9=!E8mqqOTLcz2vQH`BC!}|A zOh)I;it{$`2|a-9o7i}Q_>9&%sjq;10+<~t(6$BW-=el;4fufa)S^C<{Pnb5jlO@d z^RL=EPh<8iJo~WojN)3Q{oY)Bh9`%9t%Lk9jr9`v9ePq@{S@g++B1;3MB8g(cQ*3; zIbPRXbR@uYF?k{W1g`6dVw@#0AkK%t)eHG`#CaUYI_+ay0vxJ$FBNOm?iI?zPieUt zp`#PJZo=l9;C&LC*P!n?^zO!|gX-^<@LWha0iFu*Tnm=P#IdjXJrJ2=*ze9EaId0m zJ-&?r?=fT?s)gPVG2MxdWOQFgdNp{G;kgzayk2s7C^yI6I~)#eqrM<4hEDxZ>UY3* z0A0<{CG?oeWx-#Gx<-_*#ZMtWHiX85yC*mTfW1)1!*}2<;OMG)`fI%Aa~{Yyp;7qq z9Wv3R)v4P8@15vdpfMUq{Vd@_?g;)oC$WG>Xb^H9j>~l%-6BDPR-xy6u%&}%0C-!2 zbvoA-q3e*Xq`E&wwy&O#&mnsYwuCmRzVcwMrG9^fU57G|6M9>5cvWr?_@*ibn}cf` z<@b^OoA?LOwO8ZvC;2ZG(^ArLlpjav1NffT7+peoA^5&fyi?!_;?rB;>qdPqbRAM& z$KG3D=FdR8qQK@S2Iau?3-VVG2l&Szm5C^WWJ>j&PV@k z$i0Jqk76fJc+t_9_P)rEptzFb4e*?W50#NUAGtF)lJVmO_4Q5CXOa0DUDuGFiyw=@ zA@4}qWA_X6z5~DfhVF8W>DwC9>nV3dcUSB`i{91vUyt-7>fVOGqWb?5{7Wfc&T$Dg za=4a#iB6$>>h`F<=A<`*r#kI*Bo^c!B$ltj7el%OAB1iNS0=U}BEKHKI@o-QxVuq6GkBN4_dar;bF3j=cf!|NeQi&AIsDhr=FnRF z>#gmNV0RuqICK;r_DWwsHL%s4wpZwnPtox-zTXJev%n$?Rd-ecL`Whb|K=+U6h{MhRWQ4|(-T}Wu_mEFR=Xr|#9mVq_GHxK@u_}2*Dd#FDf zeXZfKsOzVCu0*$6`@c5W-k`h_P%H7T6FQO^e>+L#JNs->>6!)T84b>P>dR*I2}L1O z5gwtR&~qks$5ZFfSRE%<7K`QC@E#^c%iwKC{u%@xfp;1H34Kicd-&f7dtGQh0}v0| zO)ig)mGi(eLir!SZbQa#K01!7pOZDch&Z%S`}eA>sN&NUR}*a1C;g7{Sp2vYdpk&{ zz}FJ_CukFTg?tN*St7A$LHiD3upYf`;&nCcH>>U&$>(si0{7SW*aG_-Nmrx$evMTV z%1zNXOykIFP}ip_zfkRbi7!W}>x+#`@%3@A^r!7-bX-jNF^%(nJssc60oQ zY<1xyoe$6L=(#4WZ}!7`8U71R!2Vx?mGW@x?x#+Ehb0I34e&jK{BrQm472qHe5>K> zuYIr|*#Ynits}n%|34%B1wGHg8&KJ+z}Atn&>iG2RllYDJoV3OUwr_kyD9sz?~o6j zBh3+MG*8HDKKTOB|CB#0Q9zw^x)IFou!w12Up*W}F(*p206aveol=r~9Ncp>B z^Kxu1!k$nsVmN_vB6=@U-=&^UU|ge=XFK+;0QY8im*USE=*UHHThbe_nL=9*I4t#T zF?gO7C6EWcAE@7kto#=I$BdDV=)ITn0*)&iM>V>v~U8uSG_YLyN#N}Md zKg0V2dXCZlFFN|r?<=t_bTe4)0`D<+gf0X3=hV%I?;DOw>8}LE@F_f3Y5p(xQqAu<8(Q7`_Q$9^5@uklQHwK@_nphIe<@pV(UZNyN8VtQTjW0Qq`7} z_p08}_!mzc=PLgJFdP%i=om|S73H4f?^J9eJ3x7x66fD&+eCSTVv+U@#B&`w9jb-w zZ`hs(-wy0fRNh9UkHh;tZKJ@KMR^c0X#=M22=}EfTXA;A$B@Q*jrLPH_|8x)yU;Tl zEEVV%s$IES?_l^H8*AW+qP`|+Q~Ka$>_vYTTPRUFDw%sY{5OFz^FlaCms!v6~L*Kl-{ z{w3}&&F+gf7niFC=oqBs!pkh0_#Za zmz`jF6#fs8|3mGZjqeWqi`;1N4Z=n>Fn*}IrF|GW{sr?D=zCQAqYv#jDn{Yi3x>~- z+ei%V#Q$)5OXGJo{GVfcF73ZyYkV!UqubakxDERh}pO4-*z!IxG z@4^?No}Wv1X;@wN!@Cn~H_&!5{5!RwGI3pkjh^61M2ACO&EG|Rae9D?+tDYq5g*24 zHy*6-k-uJJF@W-Zc*bhH-dB6INSC5>2E4meM;yL(BmX$Ed0_sR@;~4Tr>3;sM4WD< zUFd4<&wK5n`QL+IO*rbIzaIE^V5fx6cj0yPm z4(*%K-xr-ZU^$|(JV^aB;LPBdj?7J9Du;htDL=2ibfx}DY<)Q?8)LHJi``$OOt`UClUwC)h?_hRQN>eAqU8og(dI`k)TXsmMb zJ!Nf<#?U5yyN zO>Bkwg~?U}PX+D646qB$(!M?$pC41dE=A_0Fgcsk{(lL!XP`fUVjudjD}FV{mt5j< zAIE-l+{R|YZ{j;;d@YHe4p~1qyBA!XA^O$iN39*Ld~&XmHL({FLgh1{7w55#zQaiy}Ooo$o8xGYDHhkCk==v+ z=hfc}u>BQ2wbwX^{0ekEpyk^YdnNVzWy<^2=T=}ii~1+k?o?u*LEU}Cx;dBzs%&*I zT&Fy7s%JPhUJ-nh3+R^sc&^g8%|h0pI%M3m-A>(h^3SPG*&mvUj#}!+&6M-WPbPgw zdD>ueI5yf+cZ>3obtQslB57Of&89tvK3GP%4f*SleTV#9cgMa;UvJ74h)R>#i;Pb@tAtcI%zvZ-2s zE%y8zv+(H=JKyt4 zzq=v(xpbCNJMhI*{|~+%BNo?iET`@UFuaMbH?S{MpR^f14T0}Nc&dW?A9TMBp0~(f zO04g}?@J_()UBp&ruJI`ZBJl#1Q><3BR@v{K7dSr^vpwMJo&r9b{YJ)f&Ufk30(l5 zB--QXgC(?2J##%c}1#um}Y?lF5%#EYD(JXsO~n zpEMC12Q=0p+H=6(lz4r>aX!Azq3sFew<*sI;?oHG6TmBUo8pSsv<^D^fW1Asnxo?; zWZSCU)tU}bd>trXg3nRt6na>7wA1z|Y^=4LTrb0u1D@y9N2$JzatC609@suod{RFZ zAI_rwR$}z9j_X&z^a47DP(K&BSHYEuo$25WsV~dnsiouje6ak2t#>)@LH9g-PC;J* zJVM`*uS?rP^h{PvTf+KewffWu`{&|kLzQc(V`eJ)eo$<`pl=K1wdz9w_?Bt@DR89H z_BcAak&Ypz4vk<8SA#bh`*)!?7a0ql3CIj~m`JB!`x|U+ApZ&cLgnFG3HGbe=Oy2c z^jYLK!?%&+OZ3H{Zz{6CBGZd}0qyDdScN)1H*lpAzcIwKfnrKS?k`?0f&x+duT5ysDFuaOY|+K?HlxbOL;z6KZa)#`SWR; zO??t|x8S!>Mf&s_>SDolJ#u%Tr#bq{Gu~dqesz4hl=3R%r;|1yHbQse!xs2|N6%LE z`!DRgiOfs1^GSy5HIB2f^$L7x)PI3b&9T=QTMl)=_6p?B#$Gs$#-7k-(k{prr?0W^ zPzE-ZBA?B37teGAFT}1ghbi4)s4*ab} z+q>wW1?F_^Gtu!CvRA?z!l!4b-=yb;w6)Ou0(1-s8xyb4wo@@&OzS z<-gRgb+ikOg8wYB3yu`>dsKI8us)4!KF4N_XItbCP+yz!0{U^A(ZKZ{-PO@?9{vbz z!=G00ji7%kx#p4|#W6wbk!}aa2K>ASKfgwQEOq_Bcs}xHt1o%*zKQuK+Vtv&ep3iADFZwk)F`1~;WTd*||zMlj$?GqHIm%4VeU4+~WYzzHLTMGL6!8=W3 zFZG?V*IWCbF}8#zlJ=v1Dlxwh{>yZ%*{#fS+5g ze0QiTdiLXIF8V)Ff1I`(6wljg$Ela}Z*;|J`|sdAM7+A<<5loBz|WD`&!*0U{m04w zL;iN`t{}db;X@uW4jl&nQ;Ml0ScJYp*Aehc)>y7Y??m+E*v+na@O_1jpV2iOo#Q3` zlz)WhW_-DjdWVwm@l*6Kq3wNmJYlwn>v=W?d@74K+WM{5Etngzpf?KiF)7 z?&;t_v5V>2mPd}n=H&~9U?xU3dMrQ{0 zx?%Sg}abT>7Ttm|3$h8B*V(Kp!VaQKB8W5|A)IW)y5A{WFBPX7f388tA#Bx!zap}mY5Nd6&rx?69OZN@?MHt)aT$ybhh746 zb&jXNxCOnhAvaND^Z{~n(RC~BFR8unX?qhKJ5)h8?9HbALgZfn$69bM!Dd~x`8(zJ zv0In+iPXP={3n#(CrzXLO;{gzsCyr5KY$~R_*_jKo6|lLzGXU2lkllMSYCl|T9_Z( z;1RkQED6~Bh4Sm9;dBg4ZxW-gz<&{kh5R0HJqzD!^n@>tI9)}427KFT8>(X{2kb)4@H;Wg?r-3m zg+DcrTMz$zwC^B)uJ*|-=)9EjOSCmX{x9^LrM^d_ry2RJ_#PV;FR`-_nU9eD6TgSS zGl06W+Ha5GWFOjv9w+^RzDc5AJ^{x8`oN*Hz%T^6z44_9Z3UEXL-q{vLQm3G1H8G^ z%_kiOo_^>OdJ{Ys!dC(Rr_p`|W2q;pLmu@($`-O+kiA!B9iCgU+ga^@8s$dQ8s1ulW zknf1x3UI~|gPG{tx(yBq(fg4dxZRM$}Cgzkao3h+FseYBgpdSLHE zD!)Y_G=&%hIWAB=8WPvD*dI>eK4jx*^MNA^T_1t}A?$PoM^o~j=r|Q!FJZ4Lw%?WU zqG4Mf!ezs{pTV#opLJ;crVraD%f9Bd?Nb= zF--#BQRVxGxU|Pc6grdPy8^vJKcnv{^7-VSC4NsM*NO5Xe0KA}hH zzlG?Fg=a6i`hn|hWah)$mU4l{v9b2Wx5)J(rca@NCh@3EdX2W#q@TW~t-s3H7KkT& z?_+bX;+Ogw@U@`+Zg{T+Lmc@#vAbG%4pa9xJ`N%#pMj${GF>TWg1-lR1C{S4@LUOR zE$|9;M_)Sp6&Xiq8qXbIj3s{u?Kk7!T5NrX{d>?O)KU2)KLp-y(f5q{)DC{3dBj%e zLypI_58r`L=yha-YJw#n{(La}LEVek5c&h$6~Mg{ovqOG8gh4me;qMt3SW2P_BwK% zXd4KhP)ph`P&-${zl;1TczdfY;ki%kOa44`G(*QL__T)lEh_sfHamf9HfKv$wcWD1~B25L$)9}2FzwKyGMaH4e(2+>F6ZS^vI69NO&~9v=L%y%-zD4CGQ{OU7 z$1pGrvqfBY(3Xu4SE~-G9!map>~9ChY7Th;bS<`q!J9yz+@k$<32p0ijELOx;Jsh{ z7)L&t*!~QE6&;IBmG=PU@09O3{25RE6{0{XK>YKy5AMe1PTEIn+a;8Rx|3#7KMnnj zu_g2(e&3~ff7bq8Mfq{;dGSBRW^)aN?{Vx7!bgXG!>1UPtx11n(RM%MJ`VkRGKkuh)E_|1&UyqWX z2~Qo`M}s4V@}I;%NWc9`{Z_T}6ZH;_r2Sm_@e6RZ2=iksepOK0pEB0p(fnF;e2D)~ zse;OsM-jtw;AxDFr?IsfKRsZ2oN`^2dyMjL;2J~wHvG;9-;*3;DgS}KPGEQuT`j=Y z9os^WYkZzZkI*D+EK+@+*j28@*zQEkKBB%O{NJJPa_V-|PamnD2f!18e*$%u%1Lq$ zzK@3A3$AO)x7W75YWGSo1;KrQ^2PA=hOZhr^UyaIU4H6&Vf$S0cICK};|275j?6@S zt3iGzGIvq`2=YRGiE}5~9D0qmHTYMF)Tej{Vpr%4Y&@cUwh*3n$W6e{8Q2|8{n?Z| zqOTwMCB&v2xUQf)UFwm42yCb*q;pi4R7}FwpI{T}M*MFD-*?ChjUj$n91i`7KkKl0 z9Tf-R?GM%#)CnE66W1k9zc7Yw*8X}7dsWeUF?e2te>Gq>)4mh=b;M>1qb&3= z{JĂ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 z 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�`N= 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 V!ew)1C3JdVGBPKH{#a#f|39bG{N4Zn literal 0 HcmV?d00001 diff --git a/usr/local/share/locale/tr/LC_MESSAGES/pfSense.po b/usr/local/share/locale/tr/LC_MESSAGES/pfSense.po new file mode 100644 index 000000000..50d488429 --- /dev/null +++ b/usr/local/share/locale/tr/LC_MESSAGES/pfSense.po @@ -0,0 +1,43061 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-28 15:35-0300\n" +"PO-Revision-Date: 2013-05-08 09:35+0200\n" +"Last-Translator: technical \n" +"Language-Team: LANGUAGE \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.1.6\n" + +#: etc/inc/PEAR.inc:161 +#, php-format +msgid "PEAR constructor called, class=%s\n" +msgstr "PEAR kurucu çağırıldığında; sınıf=%s\n" + +#: etc/inc/PEAR.inc:198 +#, php-format +msgid "PEAR destructor called, class=%s\n" +msgstr "PEAR silici çaÄŸrıldığında, sınıf=%s\n" + +#: etc/inc/PEAR.inc:337 etc/inc/PEAR.inc:595 etc/inc/PEAR.inc:632 +msgid "invalid error callback" +msgstr "geri çaÄŸrı geçersiz hata" + +#: etc/inc/PEAR.inc:342 etc/inc/PEAR.inc:600 etc/inc/PEAR.inc:637 +msgid "invalid error mode" +msgstr "geçersiz hata kipi" + +#: etc/inc/PEAR.inc:445 etc/inc/PEAR.inc:451 +msgid "The expected error you submitted does not exist" +msgstr "Gönderiniz artık mevcut deÄŸil" + +#: etc/inc/PEAR.inc:455 +msgid "The expected error you submitted is empty" +msgstr "BoÅŸ gönderdiniz" + +#: etc/inc/PEAR.inc:866 +msgid "" +"PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions" +msgstr "" +"PEAR_ERROR_EXCEPTION artık kullanılmıyor, PEAR_ErrorStack için özel sınıf " +"kullanılıyor" + +#: etc/inc/PEAR.inc:1023 +#, php-format +msgid "" +"[%s: message=\"%s\" code=%d mode=callback callback=%s prefix=\"%s\" info=\"%s" +"\"]" +msgstr "[%s: mesaj=\"%s\" kod=%d mod=geri geri=%s ek=\"%s\" bilgi=\"%s\"]" + +#: etc/inc/PEAR.inc:1041 +#, php-format +msgid "[%s: message=\"%s\" code=%d mode=%s level=%s prefix=\"%s\" info=\"%s\"]" +msgstr "[%s: mesaj=\"%s\" kod=%d mod=%s seviye=%s ek=\"%s\" bilgi=\"%s\"]" + +#: etc/inc/array_intersect_key.inc:37 etc/inc/array_intersect_key.inc:37 +msgid "Wrong parameter count for array_intersect_key()" +msgstr "array_intersect_key() için yanlış parametre sayısı" + +#: etc/inc/array_intersect_key.inc:45 etc/inc/array_intersect_key.inc:45 +msgid "array_intersect_key() Argument #" +msgstr "array_intersect_key() DeÄŸiÅŸken #" + +#: etc/inc/array_intersect_key.inc:46 etc/inc/array_intersect_key.inc:46 +msgid " is not an array" +msgstr "geçerli bir aralık deÄŸil" + +#: etc/inc/auth.inc:100 etc/inc/auth.inc:100 +msgid "" +"Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/" +"DNS_rebinding
    Try accessing the router by IP address instead of by " +"hostname." +msgstr "" +"Muhtemel DNS tekrar bağlama saldırısı tesbit edildi, açıklama: " +"http://en.wikipedia.org/wiki/DNS_rebinding
    Router e host adı yerine IP " +"adresi ile giriş yapmayı deneyin." + +#: etc/inc/auth.inc:115 etc/inc/auth.inc:115 +msgid "Redirecting..." +msgstr "Yönlendiriliyor..." + +#: etc/inc/auth.inc:115 etc/inc/auth.inc:115 +msgid "Redirecting to the dashboard..." +msgstr "Anasayfa'ya yönlendiriliyor..." + +#: etc/inc/auth.inc:315 etc/inc/auth.inc:335 etc/inc/auth.inc:406 +#: etc/inc/auth.inc:433 etc/inc/auth.inc:478 etc/inc/auth.inc:609 +#: etc/inc/auth.inc:621 etc/inc/auth.inc:311 etc/inc/auth.inc:331 +#: etc/inc/auth.inc:402 etc/inc/auth.inc:431 etc/inc/auth.inc:487 +#: etc/inc/auth.inc:618 etc/inc/auth.inc:630 etc/inc/auth.inc:311 +#: etc/inc/auth.inc:331 etc/inc/auth.inc:402 etc/inc/auth.inc:431 +#: etc/inc/auth.inc:487 etc/inc/auth.inc:618 etc/inc/auth.inc:630 +#, php-format +msgid "Running: %s" +msgstr "Çalışan: %s " + +#: etc/inc/auth.inc:656 etc/inc/auth.inc:728 etc/inc/auth.inc:796 +#: etc/inc/auth.inc:1040 etc/inc/auth.inc:665 etc/inc/auth.inc:737 +#: etc/inc/auth.inc:805 etc/inc/auth.inc:1049 etc/inc/auth.inc:1053 +#: etc/inc/auth.inc:665 etc/inc/auth.inc:737 etc/inc/auth.inc:805 +#: etc/inc/auth.inc:1053 +#, php-format +msgid "ERROR! Could not connect to server %s." +msgstr "HATA! Sunucuya bağlantı kurulamadı %s." + +#: etc/inc/auth.inc:674 etc/inc/auth.inc:683 etc/inc/auth.inc:683 +#, php-format +msgid "LDAP: Could not lookup CA by reference for host %s." +msgstr "LDAP: %s hostu için sertifika otoritelerine referansla bakılamaz." + +#: etc/inc/auth.inc:783 etc/inc/auth.inc:792 etc/inc/auth.inc:792 +msgid "" +"ERROR! ldap_get_user_ous() backed selected with no LDAP authentication " +"server defined." +msgstr "" +"HATA! ldap_get_user_ous() desteklenen LDAP kimlik doğrulama sunucusu " +"seçilmedi." + +#: etc/inc/auth.inc:807 etc/inc/auth.inc:816 etc/inc/auth.inc:816 +#, php-format +msgid "ERROR! ldap_get_user_ous() could not bind anonymously to server %s." +msgstr "HATA! ldap_get_user_ous() %s sunucusuna anonim bağlanamadı." + +#: etc/inc/auth.inc:812 etc/inc/auth.inc:821 etc/inc/auth.inc:821 +#, php-format +msgid "ERROR! ldap_get_user_ous() could not bind to server %s." +msgstr "HATA! ldap_get_user_ous() %s sunucusuna bağlanamadı." + +#: etc/inc/auth.inc:908 etc/inc/auth.inc:917 etc/inc/auth.inc:917 +#, php-format +msgid "ERROR! ldap_get_groups() Could not connect to server %s." +msgstr "HATA! ldap_get_groups() %s sunucusuna bağlantı kuramadı." + +#: etc/inc/auth.inc:918 etc/inc/auth.inc:927 etc/inc/auth.inc:927 +#, php-format +msgid "ERROR! ldap_get_groups() could not bind anonymously to server %s." +msgstr "HATA! ldap_get_groups() %s sunucusuna anonim bağlanamadı." + +#: etc/inc/auth.inc:923 etc/inc/auth.inc:932 etc/inc/auth.inc:932 +#, php-format +msgid "ERROR! ldap_get_groups() could not bind to server %s." +msgstr "HATA! ldap_get_groups() %s sunucusuna bağlanamadı." + +#: etc/inc/auth.inc:1020 etc/inc/auth.inc:1029 etc/inc/auth.inc:1033 +#: etc/inc/auth.inc:1033 +msgid "" +"ERROR! ldap_backed() called with no LDAP authentication server defined. " +"Defaulting to local user database. Visit System -> User Manager." +msgstr "" +"HATA! ldap_backed() tanımlanmış bir LDAP kimlik doprulama sunucusu ile " +"çağrılamadı. Yerel kullanıcı veritabanı varsayılan olarak alınacak. " +"Sistem-> Kullanıcı Yönetmi'ni ziyaret edin." + +#: etc/inc/auth.inc:1023 etc/inc/auth.inc:1032 etc/inc/auth.inc:1036 +#: etc/inc/auth.inc:1036 +msgid "ERROR! ldap_backed() called with no LDAP authentication server defined." +msgstr "" +"HATA! ldap_backed() tanımlanan hiçbir LDAP kimlik doğrulama sunucusuyla " +"çağrılamadı." + +#: etc/inc/auth.inc:1054 etc/inc/auth.inc:1063 etc/inc/auth.inc:1067 +#: etc/inc/auth.inc:1067 +#, php-format +msgid "ERROR! Could not bind to server %s." +msgstr "HATA! %s Sunucuya bağlanamıyor." + +#: etc/inc/auth.inc:1071 etc/inc/auth.inc:1080 etc/inc/auth.inc:1084 +#: etc/inc/auth.inc:1085 +#, php-format +msgid "Now Searching for %s in directory." +msgstr "%s Dizini içerisinde aranıyor." + +#: etc/inc/auth.inc:1075 etc/inc/auth.inc:1084 etc/inc/auth.inc:1088 +#: etc/inc/auth.inc:1090 +#, php-format +msgid "Now Searching in server %1$s, container %2$s with filter %3$s." +msgstr "%1$s Sunucusunda, %3$s. filitresi ile %2$s barındırıcıda aranıyor." + +#: etc/inc/auth.inc:1086 etc/inc/auth.inc:1095 etc/inc/auth.inc:1099 +#: etc/inc/auth.inc:1101 +#, php-format +msgid "Search resulted in error: %s" +msgstr "Arama hatalı sonuçlandı: %s" + +#: etc/inc/auth.inc:1102 etc/inc/auth.inc:1111 etc/inc/auth.inc:1115 +#: etc/inc/auth.inc:1117 +msgid "ERROR! Either LDAP search failed, or multiple users were found." +msgstr "HATA! LDAP arama başarısız yada birden fazla kullanıcı bulundu." + +#: etc/inc/auth.inc:1108 etc/inc/auth.inc:1117 etc/inc/auth.inc:1121 +#: etc/inc/auth.inc:1123 +#, php-format +msgid "ERROR! Could not login to server %1$s as user %2$s." +msgstr "HATA ! Sunucu'ya %1$s kullanıcı olarak %2$s giriş yapılamadı." + +#: etc/inc/auth.inc:1113 etc/inc/auth.inc:1122 etc/inc/auth.inc:1126 +#: etc/inc/auth.inc:1129 +#, php-format +msgid "Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s." +msgstr "" +"DN = %3$s ile LDAP %2$s sunucusu üzerinden başarıyla giriş yapıldı %1$s." + +#: etc/inc/auth.inc:1144 etc/inc/auth.inc:1153 etc/inc/auth.inc:1157 +#: etc/inc/auth.inc:1163 +#, php-format +msgid "Radius start: %s
    \n" +msgstr "Radius başladı: %s
    \n" + +#: etc/inc/auth.inc:1155 etc/inc/auth.inc:1164 etc/inc/auth.inc:1168 +#: etc/inc/auth.inc:1174 +#, php-format +msgid "Radius send failed: %s
    \n" +msgstr "Radius başarısız gönderme: %s
    \n" + +#: etc/inc/auth.inc:1159 etc/inc/auth.inc:1170 etc/inc/auth.inc:1174 +#: etc/inc/auth.inc:1180 +#, php-format +msgid "Radius Auth succeeded" +msgstr "Radius kimlik doğrulaması başarılı" + +#: etc/inc/auth.inc:1164 etc/inc/auth.inc:1175 etc/inc/auth.inc:1179 +#: etc/inc/auth.inc:1185 +#, php-format +msgid "Radius Auth rejected" +msgstr "Raidus Kimlik Doğrulaması reddedildi" + +#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218 +#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237 etc/inc/auth.inc:1228 +#: etc/inc/auth.inc:1243 +msgid "Local Database" +msgstr "Yerel Veritabanı" + +#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218 +#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237 +msgid "Local Auth" +msgstr "Yerel kimlik doğrulama" + +#: etc/inc/auth.inc:1293 etc/inc/auth.inc:1317 etc/inc/auth.inc:1321 +#: etc/inc/auth.inc:1327 +#, php-format +msgid "Successful login for user '%1$s' from: %2$s" +msgstr "'%1$s' dan: %2$s Kullanıcısının oturum açması başarılı" + +#: etc/inc/auth.inc:1347 etc/inc/auth.inc:1371 etc/inc/auth.inc:1375 +#: etc/inc/auth.inc:1381 +#, php-format +msgid "Session timed out for user '%1$s' from: %2$s" +msgstr "'%1$s' dan: %2$s kullanıcısı için oturum zamanı aşıldı" + +#: etc/inc/auth.inc:1349 etc/inc/auth.inc:1373 etc/inc/auth.inc:1377 +#: etc/inc/auth.inc:1383 +#, php-format +msgid "User logged out for user '%1$s' from: %2$s" +msgstr "Kullanıcı '%1$s' dan: %2$s oturum kapattı" + +#: etc/inc/captiveportal.inc:1374 etc/inc/captiveportal.inc:1383 +#: etc/inc/captiveportal.inc:1420 etc/inc/captiveportal.inc:1335 +#, php-format +msgid "Error: cannot open '%s' in captiveportal_write_elements()%s" +msgstr "Hata: captiveportal_write_elements()%s içindeki '%s' açılamadı" + +#: etc/inc/config.inc:100 etc/inc/config.inc:100 +msgid "Upgrading m0n0wall configuration to pfSense... " +msgstr "m0n0wall yapılandırması, pfsense yapılandırmasına yükseltiliyor..." + +#: etc/inc/config.inc:103 etc/inc/config.inc:103 +msgid "ERROR! Could not convert m0n0wall -> pfsense in config.xml" +msgstr "HATA! m0n0wall -> pfsense config.xml çevirisi yapılamadı" + +#: etc/inc/config.inc:133 etc/inc/config.inc:133 +msgid "CDROM build" +msgstr "CDROM oluştur" + +#: etc/inc/config.inc:134 etc/inc/config.inc:135 etc/inc/config.inc:134 +#: etc/inc/config.inc:135 +msgid "CFG:" +msgstr "CFG:" + +#: etc/inc/config.inc:136 etc/inc/config.inc:136 +msgid "TYPE:" +msgstr "TÜR:" + +#: etc/inc/config.inc:151 etc/inc/config.inc:166 etc/inc/config.inc:151 +#: etc/inc/config.inc:166 +#, php-format +msgid "Found configuration on %s.%s" +msgstr "%s.%s üzerinde yapılandırma bulundu" + +#: etc/inc/config.inc:180 etc/inc/config.inc:181 etc/inc/config.lib.inc:105 +#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:245 +#: etc/inc/config.lib.inc:266 etc/inc/config.lib.inc:267 +#: etc/inc/config.inc:180 etc/inc/config.inc:181 etc/inc/config.lib.inc:105 +#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:245 +#: etc/inc/config.lib.inc:266 etc/inc/config.lib.inc:267 +msgid "No config.xml found, attempting last known config restore." +msgstr "config.xml bulunamadı, bilinen son yapılandırma geri yükleniyor." + +#: etc/inc/config.inc:184 etc/inc/config.inc:184 +msgid "No config.xml or config backups found, resetting to factory defaults." +msgstr "" +"config.xml veya yapılandırma yedeği bulunamadı, fabrika ayarlarına " +"sıfırlanıyor." + +#: etc/inc/filter.inc:197 etc/inc/filter.inc:194 etc/inc/filter.inc:193 +#: etc/inc/filter.inc:168 +msgid "Initializing" +msgstr "Başlatılıyor" + +#: etc/inc/filter.inc:209 etc/inc/filter.inc:206 etc/inc/filter.inc:205 +#: etc/inc/filter.inc:180 +msgid "Configuring firewall" +msgstr "Firewall yapılandırılıyor" + +#: etc/inc/filter.inc:214 etc/inc/filter.inc:211 etc/inc/filter.inc:210 +#: etc/inc/filter.inc:185 +msgid "Creating aliases" +msgstr "Gruplar oluşturuluyor" + +#: etc/inc/filter.inc:219 etc/inc/filter.inc:218 etc/inc/filter.inc:193 +msgid "Generating NAT rules" +msgstr "NAT kuralları oluşturuluyor" + +#: etc/inc/filter.inc:224 etc/inc/filter.inc:223 etc/inc/filter.inc:198 +msgid "Generating filter rules" +msgstr "Fiitre kuralları oluşturuluyor" + +#: etc/inc/filter.inc:230 etc/inc/filter.inc:229 etc/inc/filter.inc:204 +msgid "Generating ALTQ queues" +msgstr "ALTQ kuyrukları oluşturuluyor" + +#: etc/inc/filter.inc:232 etc/inc/filter.inc:216 etc/inc/filter.inc:215 +#: etc/inc/filter.inc:190 +msgid "Generating Limiter rules" +msgstr "Limitleyici kuralları oluşturuluyor" + +#: etc/inc/filter.inc:234 etc/inc/filter.inc:232 etc/inc/filter.inc:231 +#: etc/inc/filter.inc:206 +msgid "Generating Layer7 rules" +msgstr "Layer7 kuralları oluşturuluyor" + +#: etc/inc/filter.inc:238 etc/inc/filter.inc:236 etc/inc/filter.inc:235 +#: etc/inc/filter.inc:210 +msgid "Loading filter rules" +msgstr "Filtreleme kuralları yükleniyor" + +#: etc/inc/filter.inc:245 etc/inc/filter.inc:243 etc/inc/filter.inc:242 +#: etc/inc/filter.inc:217 +msgid "Filter is disabled. Not loading rules." +msgstr "Filtreleme devre dışı. Kurallar yüklenmiyor." + +#: etc/inc/filter.inc:247 etc/inc/filter.inc:418 etc/inc/interfaces.inc:217 +#: etc/inc/interfaces.inc:234 etc/inc/interfaces.inc:360 +#: etc/inc/interfaces.inc:410 etc/inc/interfaces.inc:664 +#: etc/inc/interfaces.inc:924 etc/inc/interfaces.inc:964 +#: etc/inc/interfaces.inc:979 etc/inc/interfaces.inc:1780 +#: etc/inc/pkg-utils.inc:586 etc/inc/pkg-utils.inc:596 +#: etc/inc/pkg-utils.inc:619 etc/inc/pkg-utils.inc:696 +#: etc/inc/pkg-utils.inc:711 etc/inc/pkg-utils.inc:755 +#: etc/inc/pkg-utils.inc:786 etc/inc/pkg-utils.inc:805 +#: etc/inc/pkg-utils.inc:812 etc/inc/pkg-utils.inc:829 +#: etc/inc/pkg-utils.inc:845 etc/inc/pkg-utils.inc:861 +#: etc/inc/pkg-utils.inc:967 etc/inc/pkg-utils.inc:984 +#: etc/inc/pkg-utils.inc:1009 etc/inc/pkg-utils.inc:1054 +#: etc/inc/pkg-utils.inc:1063 etc/inc/pkg-utils.inc:1073 +#: etc/inc/pkg-utils.inc:1088 etc/inc/pkg-utils.inc:1095 +#: etc/inc/pkg-utils.inc:1114 etc/inc/services.inc:899 +#: etc/inc/services.inc:1234 etc/inc/services.inc:1297 +#: etc/inc/services.inc:1477 etc/inc/system.inc:651 etc/inc/system.inc:674 +#: etc/inc/system.inc:759 etc/inc/system.inc:1197 etc/inc/system.inc:1278 +#: etc/inc/system.inc:1409 etc/inc/rrd.inc:782 etc/inc/system.inc:699 +#: etc/inc/system.inc:722 etc/inc/system.inc:806 etc/inc/system.inc:1249 +#: etc/inc/system.inc:1334 etc/inc/system.inc:1466 etc/inc/pkg-utils.inc:612 +#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:645 +#: etc/inc/pkg-utils.inc:722 etc/inc/pkg-utils.inc:737 +#: etc/inc/pkg-utils.inc:781 etc/inc/pkg-utils.inc:841 +#: etc/inc/pkg-utils.inc:848 etc/inc/pkg-utils.inc:865 +#: etc/inc/pkg-utils.inc:881 etc/inc/pkg-utils.inc:897 +#: etc/inc/pkg-utils.inc:1004 etc/inc/pkg-utils.inc:1021 +#: etc/inc/pkg-utils.inc:1046 etc/inc/pkg-utils.inc:1091 +#: etc/inc/pkg-utils.inc:1100 etc/inc/pkg-utils.inc:1110 +#: etc/inc/pkg-utils.inc:1125 etc/inc/pkg-utils.inc:1132 +#: etc/inc/pkg-utils.inc:1151 etc/inc/interfaces.inc:219 +#: etc/inc/interfaces.inc:236 etc/inc/interfaces.inc:362 +#: etc/inc/interfaces.inc:412 etc/inc/interfaces.inc:671 +#: etc/inc/interfaces.inc:951 etc/inc/interfaces.inc:991 +#: etc/inc/interfaces.inc:1006 etc/inc/interfaces.inc:1845 etc/inc/rrd.inc:806 +#: etc/inc/services.inc:1028 etc/inc/services.inc:1370 +#: etc/inc/services.inc:1434 etc/inc/services.inc:1669 etc/inc/filter.inc:245 +#: etc/inc/filter.inc:420 etc/inc/system.inc:703 etc/inc/system.inc:726 +#: etc/inc/system.inc:804 etc/inc/system.inc:1229 etc/inc/system.inc:1376 +#: etc/inc/system.inc:1508 etc/inc/pkg-utils.inc:394 etc/inc/pkg-utils.inc:613 +#: etc/inc/pkg-utils.inc:623 etc/inc/pkg-utils.inc:646 +#: etc/inc/pkg-utils.inc:723 etc/inc/pkg-utils.inc:738 +#: etc/inc/pkg-utils.inc:782 etc/inc/pkg-utils.inc:813 +#: etc/inc/pkg-utils.inc:842 etc/inc/pkg-utils.inc:849 +#: etc/inc/pkg-utils.inc:866 etc/inc/pkg-utils.inc:882 +#: etc/inc/pkg-utils.inc:898 etc/inc/pkg-utils.inc:1005 +#: etc/inc/pkg-utils.inc:1022 etc/inc/pkg-utils.inc:1047 +#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1101 +#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1126 +#: etc/inc/pkg-utils.inc:1133 etc/inc/pkg-utils.inc:1152 +#: etc/inc/interfaces.inc:218 etc/inc/interfaces.inc:235 +#: etc/inc/interfaces.inc:361 etc/inc/interfaces.inc:411 +#: etc/inc/interfaces.inc:670 etc/inc/interfaces.inc:950 +#: etc/inc/interfaces.inc:990 etc/inc/interfaces.inc:1005 +#: etc/inc/interfaces.inc:1849 etc/inc/services.inc:1160 +#: etc/inc/services.inc:1509 etc/inc/services.inc:1573 +#: etc/inc/services.inc:1808 etc/inc/filter.inc:244 etc/inc/filter.inc:423 +#: etc/inc/filter.inc:219 etc/inc/filter.inc:395 etc/inc/pkg-utils.inc:411 +#: etc/inc/pkg-utils.inc:648 etc/inc/pkg-utils.inc:658 +#: etc/inc/pkg-utils.inc:681 etc/inc/pkg-utils.inc:758 +#: etc/inc/pkg-utils.inc:773 etc/inc/pkg-utils.inc:817 +#: etc/inc/pkg-utils.inc:848 etc/inc/pkg-utils.inc:877 +#: etc/inc/pkg-utils.inc:884 etc/inc/pkg-utils.inc:901 +#: etc/inc/pkg-utils.inc:917 etc/inc/pkg-utils.inc:933 +#: etc/inc/pkg-utils.inc:1040 etc/inc/pkg-utils.inc:1057 +#: etc/inc/pkg-utils.inc:1082 etc/inc/pkg-utils.inc:1127 +#: etc/inc/pkg-utils.inc:1136 etc/inc/pkg-utils.inc:1146 +#: etc/inc/pkg-utils.inc:1161 etc/inc/pkg-utils.inc:1168 +#: etc/inc/pkg-utils.inc:1187 etc/inc/interfaces.inc:216 +#: etc/inc/interfaces.inc:233 etc/inc/interfaces.inc:365 +#: etc/inc/interfaces.inc:422 etc/inc/interfaces.inc:697 +#: etc/inc/interfaces.inc:1005 etc/inc/interfaces.inc:1033 +#: etc/inc/interfaces.inc:1054 etc/inc/interfaces.inc:1069 +#: etc/inc/interfaces.inc:1889 etc/inc/services.inc:1154 +#: etc/inc/services.inc:1499 etc/inc/services.inc:1596 +#: etc/inc/services.inc:1797 etc/inc/system.inc:712 etc/inc/system.inc:735 +#: etc/inc/system.inc:815 etc/inc/system.inc:1178 etc/inc/system.inc:1318 +#: etc/inc/system.inc:1457 etc/inc/rrd.inc:829 +msgid "done." +msgstr "tamamlandı." + +#: etc/inc/filter.inc:259 etc/inc/filter.inc:265 etc/inc/filter.inc:289 +#: etc/inc/filter.inc:269 +msgid "Setting up logging information" +msgstr "Kayıt bilgilerini ayarlama" + +#: etc/inc/filter.inc:290 etc/inc/filter.inc:294 etc/inc/filter.inc:274 +msgid "Setting up SCRUB information" +msgstr "SCRUB bilgilerini ayarlama" + +#: etc/inc/filter.inc:336 etc/inc/filter.inc:338 etc/inc/filter.inc:341 +#: etc/inc/filter.inc:313 +#, php-format +msgid "The line in question reads [%1$d]: %2$s" +msgstr "Söz konusu olan sıranın okuduğu [%1$d]: %2$s" + +#: etc/inc/filter.inc:338 etc/inc/filter.inc:340 etc/inc/filter.inc:342 +#: etc/inc/filter.inc:343 etc/inc/filter.inc:345 etc/inc/filter.inc:316 +#: etc/inc/filter.inc:317 +#, php-format +msgid "There were error(s) loading the rules: %1$s - %2$s" +msgstr "Kurallar yüklenirken hata(lar) vardı: %1$s - %2$s" + +#: etc/inc/filter.inc:349 etc/inc/filter.inc:351 etc/inc/filter.inc:354 +#: etc/inc/filter.inc:324 +msgid "PF was wedged/busy and has been reset." +msgstr "PF sıkışmış/meşgul oldu ve tekrar başlatılıyor." + +#: etc/inc/filter.inc:355 etc/inc/filter.inc:357 etc/inc/filter.inc:360 +#: etc/inc/filter.inc:329 +msgid "Starting up layer7 daemon" +msgstr "layer7 servisi başlatılıyor" + +#: etc/inc/filter.inc:403 etc/inc/filter.inc:405 etc/inc/filter.inc:408 +#: etc/inc/filter.inc:380 +msgid "Processing down interface states" +msgstr "Kapalı arabirim durumları işleniyor" + +#: etc/inc/filter.inc:407 etc/inc/filter.inc:409 etc/inc/filter.inc:412 +#: etc/inc/filter.inc:384 +msgid "Running plugins" +msgstr "Çalışan eklentiler" + +#: etc/inc/filter.inc:411 etc/inc/filter.inc:413 etc/inc/filter.inc:416 +#: etc/inc/filter.inc:388 +msgid "Running plugins (pf)" +msgstr "Çalışan eklentiler (pf)" + +#: etc/inc/filter.inc:413 etc/inc/filter.inc:415 etc/inc/filter.inc:418 +#: etc/inc/filter.inc:390 +msgid "Plugins completed." +msgstr "Eklentiler tamamlandı." + +#: etc/inc/filter.inc:416 usr/local/www/restart_httpd.php:52 +#: usr/local/www/restart_httpd.php:55 usr/local/www/restart_httpd.php:58 +#: usr/local/www/restart_httpd.php:61 etc/inc/filter.inc:418 +#: etc/inc/filter.inc:421 usr/local/www/restart_httpd.php:52 +#: usr/local/www/restart_httpd.php:55 usr/local/www/restart_httpd.php:58 +#: usr/local/www/restart_httpd.php:61 etc/inc/filter.inc:393 +msgid "Done" +msgstr "Tamam" + +#: etc/inc/filter.inc:636 etc/inc/filter.inc:649 etc/inc/filter.inc:652 +#: etc/inc/filter.inc:641 +msgid "Creating gateway group item..." +msgstr "Ağ geçidi grup maddesi oluşturuluyor..." + +#: etc/inc/filter.inc:666 etc/inc/filter.inc:681 etc/inc/filter.inc:684 +#: etc/inc/filter.inc:673 +#, php-format +msgid "Setting up route with %1$s on %2$s" +msgstr "Yönlendirme ayarlanıyor %1$s ile %2$s" + +#: etc/inc/filter.inc:673 etc/inc/filter.inc:688 etc/inc/filter.inc:691 +#: etc/inc/filter.inc:680 +#, php-format +msgid "" +"An error occurred while trying to find the interface got %s . The rule has " +"not been added." +msgstr "%s arabirim bulma sırasında sorun ile karşılaşıldı. Kural eklenemedi." + +#: etc/inc/filter.inc:937 etc/inc/filter.inc:987 etc/inc/filter.inc:975 +#: etc/inc/filter.inc:1009 +#, php-format +msgid "Creating reflection NAT rule for %s..." +msgstr "%s NAT kuralı için yansıma oluşturuluyor..." + +#: etc/inc/filter.inc:991 etc/inc/filter.inc:1076 etc/inc/filter.inc:1064 +#: etc/inc/filter.inc:1098 +#, php-format +msgid "Creating reflection rule for %s..." +msgstr "%s için yansıma kuralı oluşturuluyor..." + +#: etc/inc/filter.inc:1251 etc/inc/filter.inc:1338 etc/inc/filter.inc:1326 +#: etc/inc/filter.inc:1360 +msgid "Creating 1:1 rules..." +msgstr "1:1 kuralları oluşturuluyor..." + +#: etc/inc/filter.inc:1350 etc/inc/filter.inc:1437 etc/inc/filter.inc:1454 +#: etc/inc/filter.inc:1501 +#, php-format +msgid "Creating advanced outbound rule %s" +msgstr "%s Gelişmiş dışarı giden kuralı oluşturuluyor" + +#: etc/inc/filter.inc:1386 etc/inc/filter.inc:1473 etc/inc/filter.inc:1490 +#: etc/inc/filter.inc:1533 +msgid "Creating outbound NAT rules" +msgstr "Dışarı giden NAT kuralı oluşturuluyor" + +#: etc/inc/filter.inc:1481 etc/inc/filter.inc:1566 etc/inc/filter.inc:1583 +#: etc/inc/filter.inc:1626 +#, php-format +msgid "Creating outbound rules %1$s - (%2$s)" +msgstr "%1$s - (%2$s) dışarı giden kuralları oluşturuluyor" + +#: etc/inc/filter.inc:1499 etc/inc/filter.inc:1584 etc/inc/filter.inc:1601 +#: etc/inc/filter.inc:1644 +msgid "Setting up TFTP helper" +msgstr "TFTP yardımcısı ayarlanıyor" + +#: etc/inc/filter.inc:1545 etc/inc/filter.inc:1630 etc/inc/filter.inc:1644 +#: etc/inc/filter.inc:1676 +#, php-format +msgid "Creating NAT rule %s" +msgstr "NAT kuralı %s oluşturuluyor" + +#: etc/inc/filter.inc:1689 etc/inc/filter.inc:1837 etc/inc/filter.inc:1850 +#: etc/inc/filter.inc:1882 +#, php-format +msgid "Creating filter rule %s ..." +msgstr "Filtre kuralı %s oluşturuluyor ..." + +#: etc/inc/filter.inc:1827 etc/inc/filter.inc:1975 etc/inc/filter.inc:1988 +#: etc/inc/filter.inc:2024 +#, php-format +msgid "filter_generate_address: %s is not a valid source port." +msgstr "filter_generate_address: %s geçerli bir port değildir." + +#: etc/inc/filter.inc:1943 etc/inc/filter.inc:2094 etc/inc/filter.inc:2107 +#: etc/inc/filter.inc:2142 +#, php-format +msgid "Setting up pass/block rules %s" +msgstr "%s İzin/Engel kuralı ayarlanıyor" + +#: etc/inc/filter.inc:1962 etc/inc/filter.inc:2113 etc/inc/filter.inc:2126 +#: etc/inc/filter.inc:2157 +#, php-format +msgid "Could not find IPv4 gateway for interface (%s)." +msgstr "Arabirim(%s) için Ipv4 ağ geçidi bulunamadı." + +#: etc/inc/filter.inc:1989 etc/inc/filter.inc:2140 etc/inc/filter.inc:2153 +#: etc/inc/filter.inc:2182 +#, php-format +msgid "Creating rule %s" +msgstr "%s kuralı oluşturuluyor" + +#: etc/inc/filter.inc:2198 etc/inc/filter.inc:2355 etc/inc/filter.inc:2378 +#: etc/inc/filter.inc:2407 +msgid "Creating default rules" +msgstr "Varsayılan kurallar oluşturuluyor" + +#: etc/inc/filter.inc:2649 etc/inc/filter.inc:2862 etc/inc/filter.inc:2887 +#: etc/inc/filter.inc:2976 +msgid "Creating IPsec rules..." +msgstr "IPsec kuralları oluşturuluyor..." + +#: etc/inc/filter.inc:2702 etc/inc/filter.inc:2915 etc/inc/filter.inc:2940 +#: etc/inc/filter.inc:3026 +msgid "" +"Please use filter_tdr_install_cron() function tdr_install_cron will be " +"deprecated!" +msgstr "" +"tdr_install_cron fonksiyonu önerilmiyor!, Lütfen filter_tdr_install_cron() " +"fonksiyonunu kullanın. " + +#: etc/inc/filter.inc:2747 etc/inc/filter.inc:2960 etc/inc/filter.inc:2986 +#: etc/inc/filter.inc:3072 +msgid "Installed 15 minute filter reload for Time Based Rules" +msgstr "Zaman tabanlı kuralların tekrar yüklenmesi 15 dakikaya kuruldu" + +#: etc/inc/filter.inc:3102 etc/inc/filter.inc:3313 etc/inc/filter.inc:3293 +#: etc/inc/filter.inc:3389 +#, php-format +msgid "Checking for %1$s PF hooks in package %2$s" +msgstr "%2$s Paketinin içinde PF kancaları %1$s kontrol ediliyor" + +#: etc/inc/filter.inc:3107 etc/inc/filter.inc:3318 etc/inc/filter.inc:3299 +#: etc/inc/filter.inc:3395 +#, php-format +msgid "Processing early %1$s rules for package %2$s" +msgstr "%2$s paketi için %1$s kuralı erken işleniyor" + +#: etc/inc/filter.inc:3112 etc/inc/filter.inc:3323 etc/inc/filter.inc:3304 +#: etc/inc/filter.inc:3400 +#, php-format +msgid "There was an error while parsing the package filter rules for %s." +msgstr "%s paket kuralı ayrıştırılırken bir hata oluştu." + +#: etc/inc/interfaces.inc:51 etc/inc/interfaces.inc:53 +#: etc/inc/interfaces.inc:51 +msgid "interfaces_bring_up() was called but no variable defined." +msgstr "interfaces_bring_up() denilen hiçbir değişken tanımlı değil." + +#: etc/inc/interfaces.inc:213 etc/inc/interfaces.inc:215 +#: etc/inc/interfaces.inc:214 etc/inc/interfaces.inc:212 +msgid "Configuring loopback interface..." +msgstr "Loopback arabirimi yapılandırılıyor..." + +#: etc/inc/interfaces.inc:224 etc/inc/interfaces.inc:226 +#: etc/inc/interfaces.inc:225 etc/inc/interfaces.inc:223 +msgid "Configuring VLAN interfaces..." +msgstr "VLAN arabirimi yapılandırılıyor..." + +#: etc/inc/interfaces.inc:241 etc/inc/interfaces.inc:243 +#: etc/inc/interfaces.inc:242 etc/inc/interfaces.inc:240 +msgid "VLAN: called with wrong options. Problems with config!" +msgstr "VLAN: Hatalı seçenekler. Yapılandırma hatalı!" + +#: etc/inc/interfaces.inc:249 +msgid "interface_vlan_confgure called with if undefined." +msgstr "interface_vlan_confgure denilen eğer tanımsızsa." + +#: etc/inc/interfaces.inc:283 etc/inc/interfaces.inc:367 +#: etc/inc/interfaces.inc:285 etc/inc/interfaces.inc:369 +#: etc/inc/interfaces.inc:284 etc/inc/interfaces.inc:368 +#: etc/inc/interfaces.inc:282 etc/inc/interfaces.inc:372 +#, php-format +msgid "QinQ compat VLAN: called with wrong options. Problems with config!%s" +msgstr "QinQ compat VLAN: denilen yanlış ayarlar. Sorunlar yapılandırma!%s" + +#: etc/inc/interfaces.inc:290 etc/inc/interfaces.inc:375 +#, php-format +msgid "interface_qinq_confgure called with if undefined.%s" +msgstr "interface_qinq_confgure denilen eğer tanımsızsa.%s" + +#: etc/inc/interfaces.inc:352 etc/inc/interfaces.inc:354 +#: etc/inc/interfaces.inc:353 etc/inc/interfaces.inc:357 +msgid "Configuring QinQ interfaces..." +msgstr "QinQ arabirimi yapılandırılıyor..." + +#: etc/inc/interfaces.inc:396 etc/inc/interfaces.inc:398 +#: etc/inc/interfaces.inc:397 +msgid "Creating other wireless clone interfaces..." +msgstr "Çoğaltılan diğer kablosuz arabirimler oluşturuluyor..." + +#: etc/inc/interfaces.inc:439 etc/inc/interfaces.inc:438 +#: etc/inc/interfaces.inc:437 etc/inc/interfaces.inc:466 +#, php-format +msgid "No members found on %s" +msgstr "%s da kullanıcı bulunamadı" + +#: etc/inc/interfaces.inc:505 etc/inc/interfaces.inc:512 +#: etc/inc/interfaces.inc:511 etc/inc/interfaces.inc:541 +msgid "realif not defined in interfaces bridge - up" +msgstr "açık - arabirimler köprüsü içinde realif tanımlı değil" + +#: etc/inc/interfaces.inc:618 etc/inc/interfaces.inc:625 +#: etc/inc/interfaces.inc:624 etc/inc/interfaces.inc:654 +msgid "bridgeif not defined -- could not bring interface up" +msgstr "köprü tanımlı değilse -- arabirim açık hale gelemez" + +#: etc/inc/interfaces.inc:652 etc/inc/interfaces.inc:659 +#: etc/inc/interfaces.inc:658 etc/inc/interfaces.inc:685 +msgid "Configuring LAGG interfaces..." +msgstr "LAGG arabirimleri yapılandırılıyor..." + +#: etc/inc/interfaces.inc:790 etc/inc/interfaces.inc:801 +#: etc/inc/interfaces.inc:800 etc/inc/interfaces.inc:835 +msgid "Could not bring greif up -- variable not defined." +msgstr "Değişken tanımlı değilse -- greif açık hale gelemez." + +#: etc/inc/interfaces.inc:833 etc/inc/interfaces.inc:851 +#: etc/inc/interfaces.inc:850 etc/inc/interfaces.inc:899 +msgid "" +"could not bring realif up -- variable not defined -- interface_gif_configure" +"()" +msgstr "" +"interface_gif_configure() -- değişken tanımlı değilse -- realif açık hale " +"gelemez" + +#: etc/inc/interfaces.inc:856 etc/inc/interfaces.inc:874 +#: etc/inc/interfaces.inc:873 etc/inc/interfaces.inc:922 +msgid "could not bring gifif up -- variable not defined" +msgstr "değişken tanımlı değilse -- gifif açık hale gelemez" + +#: etc/inc/interfaces.inc:919 etc/inc/interfaces.inc:957 +#: etc/inc/interfaces.inc:972 etc/inc/interfaces.inc:945 +#: etc/inc/interfaces.inc:984 etc/inc/interfaces.inc:999 +#: etc/inc/interfaces.inc:944 etc/inc/interfaces.inc:983 +#: etc/inc/interfaces.inc:998 etc/inc/interfaces.inc:999 +#: etc/inc/interfaces.inc:1026 etc/inc/interfaces.inc:1047 +#: etc/inc/interfaces.inc:1062 +#, php-format +msgid "Configuring %s interface..." +msgstr "%s arabirimleri yapılandırılıyor..." + +#: etc/inc/interfaces.inc:921 etc/inc/interfaces.inc:959 +#: etc/inc/interfaces.inc:974 etc/inc/interfaces.inc:948 +#: etc/inc/interfaces.inc:986 etc/inc/interfaces.inc:1001 +#: etc/inc/interfaces.inc:947 etc/inc/interfaces.inc:985 +#: etc/inc/interfaces.inc:1000 etc/inc/interfaces.inc:1002 +#: etc/inc/interfaces.inc:1028 etc/inc/interfaces.inc:1049 +#: etc/inc/interfaces.inc:1064 +#, php-format +msgid "Configuring %s" +msgstr "%s yapılandırılıyor" + +#: etc/inc/interfaces.inc:1299 etc/inc/interfaces.inc:1339 +#: etc/inc/interfaces.inc:1338 etc/inc/interfaces.inc:1407 +#, php-format +msgid "Can't find PPP config for %s in interface_ppps_configure()." +msgstr "" +"interface_ppps_configure() içerisinde %s için PPP yapılandırması " +"bulunamıyor." + +#: etc/inc/interfaces.inc:1362 etc/inc/interfaces.inc:1402 +#: etc/inc/interfaces.inc:1401 etc/inc/interfaces.inc:1464 +#, php-format +msgid "" +"Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in " +"interfaces_ppps_configure." +msgstr "" +"%2$s interfaces_ppps_configure içinde Uzak PPTP/L2TP IP adresi %1$s dan %2$s " +"alınamadı." + +#: etc/inc/interfaces.inc:1369 etc/inc/interfaces.inc:1409 +#: etc/inc/interfaces.inc:1408 etc/inc/interfaces.inc:1471 +#, php-format +msgid "" +"Device %s does not exist. PPP link cannot start without the modem device." +msgstr "%s Aygıtı yok. PPP bağlantısı, modem cihazı olmadan başlatılamaz." + +#: etc/inc/interfaces.inc:1374 etc/inc/interfaces.inc:1414 +#: etc/inc/interfaces.inc:1413 etc/inc/interfaces.inc:1476 +#, php-format +msgid "Unkown %s configured as ppp interface." +msgstr "%s Bilinmeyen ppp arabirimi yapılandırması." + +#: etc/inc/interfaces.inc:1641 etc/inc/interfaces.inc:1686 +#: etc/inc/interfaces.inc:1685 etc/inc/interfaces.inc:1748 +#, php-format +msgid "Error: cannot open mpd_%s.conf in interface_ppps_configure().%s" +msgstr "Hata: %s interface_ppps_configure() içinde mpd_%s.conf açılamadı" + +#: etc/inc/interfaces.inc:1702 etc/inc/interfaces.inc:1771 +#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1828 +msgid "Configuring CARP settings..." +msgstr "CARP ayarları yapılandırılıyor..." + +#: etc/inc/interfaces.inc:1723 etc/inc/interfaces.inc:1788 +#: etc/inc/interfaces.inc:1787 +msgid "Enable CARP ARP-balancing" +msgstr "CARP ARP-Dengelemesini Etkinleştir" + +#: etc/inc/interfaces.inc:1724 etc/inc/interfaces.inc:1789 +#: etc/inc/interfaces.inc:1788 +msgid "Disallow CARP preemption" +msgstr "CARP önalıma izin verme" + +#: etc/inc/interfaces.inc:1726 etc/inc/interfaces.inc:1791 +#: etc/inc/interfaces.inc:1790 +msgid "Enable CARP preemption" +msgstr "CARP önalımı etkinleştır" + +#: etc/inc/interfaces.inc:1728 etc/inc/interfaces.inc:1793 +#: etc/inc/interfaces.inc:1792 +msgid "Enable CARP logging" +msgstr "CARP günlüğünü etkinleştir" + +#: etc/inc/interfaces.inc:1744 etc/inc/interfaces.inc:1809 +#: etc/inc/interfaces.inc:1808 +msgid "Could not create rules.boot file!" +msgstr "rules.boot dosyası oluşturulamadı!" + +#: etc/inc/interfaces.inc:1750 etc/inc/interfaces.inc:1815 +#: etc/inc/interfaces.inc:1814 +msgid "Bring up pfsync0 syncpeer" +msgstr "syncpeer pfsync0 açık" + +#: etc/inc/interfaces.inc:1752 etc/inc/interfaces.inc:1817 +#: etc/inc/interfaces.inc:1816 +msgid "Bring up pfsync0 syncdev" +msgstr "syncdev pfsync0 açık" + +#: etc/inc/interfaces.inc:1754 etc/inc/interfaces.inc:1819 +#: etc/inc/interfaces.inc:1818 +msgid "Bring up pfsync0" +msgstr "pfsync0 açık" + +#: etc/inc/interfaces.inc:1768 etc/inc/interfaces.inc:1833 +#: etc/inc/interfaces.inc:1837 +msgid "Allow CARP." +msgstr "CARP izin ver." + +#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1835 +#: etc/inc/interfaces.inc:1839 +msgid "Disallow CARP." +msgstr "CARP izin verme." + +#: etc/inc/interfaces.inc:1963 etc/inc/interfaces.inc:2038 +#: etc/inc/interfaces.inc:2020 etc/inc/interfaces.inc:2099 +#: etc/inc/interfaces.inc:2016 etc/inc/interfaces.inc:2056 +#, php-format +msgid "" +"Interface specified for the virtual IP address %s does not exist. Skipping " +"this VIP." +msgstr "" +"Belirtilen arabirim için sanal IP adresi %s bulunmadı. Bu Vip atlanıyor." + +#: etc/inc/interfaces.inc:1972 etc/inc/interfaces.inc:2029 +#: etc/inc/interfaces.inc:2025 etc/inc/interfaces.inc:2065 +#, php-format +msgid "" +"Sorry but we could not find a matching real interface subnet for the virtual " +"IP address %s." +msgstr "Üzgünüm %s Sanal IP adresi ile uyuşan gerçek arabirim altağ bulunamadı." + +#: etc/inc/interfaces.inc:1981 etc/inc/interfaces.inc:2038 +#: etc/inc/interfaces.inc:2034 etc/inc/interfaces.inc:2074 +#, php-format +msgid "" +"Sorry but we could not find a matching real interface subnet for the virtual " +"IPv6 address %s." +msgstr "" +"Üzgünüm %s Sanal IPv6 adresi ile uyuşan gerçek arabirim altağ bulunamadı." + +#: etc/inc/interfaces.inc:2084 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interfaces_carpdev_configure() for " +"writing.%s" +msgstr "" +"Hata: Yazmak için %s dhclient_%s.conf içinde interfaces_carpdev_configure() " +"açılamadı" + +#: etc/inc/interfaces.inc:2117 etc/inc/interfaces.inc:2185 +#: etc/inc/interfaces.inc:2104 etc/inc/interfaces.inc:2144 +#, php-format +msgid "Interface %s changed to hostap mode" +msgstr "Arabirim %s erişim noktası (hostap) kipine değiştirildi" + +#: etc/inc/interfaces.inc:2121 etc/inc/interfaces.inc:2189 +#: etc/inc/interfaces.inc:2108 etc/inc/interfaces.inc:2148 +#, php-format +msgid "Interface %s changed to adhoc mode" +msgstr "Arabirim %s eşler arası (ad-hoc) kipine değiştirildi" + +#: etc/inc/interfaces.inc:2125 etc/inc/interfaces.inc:2193 +#: etc/inc/interfaces.inc:2112 etc/inc/interfaces.inc:2152 +#, php-format +msgid "Interface %s changed to infrastructure mode" +msgstr "Arabirim %s altyapı (infrastructure) kipine değiştirildi" + +#: etc/inc/interfaces.inc:2137 etc/inc/interfaces.inc:2205 +#: etc/inc/interfaces.inc:2124 etc/inc/interfaces.inc:2164 +#, php-format +msgid "Cloning new wireless interface %s" +msgstr "Yeni kablosuz arabirim %s çoğaltılıyor" + +#: etc/inc/interfaces.inc:2142 etc/inc/interfaces.inc:2210 +#: etc/inc/interfaces.inc:2129 etc/inc/interfaces.inc:2169 +#, php-format +msgid "Failed to clone interface %1$s with error code %2$s, output %3$s" +msgstr "%1$s Klon arabirim başarısız %2$s hata kodu, %3$s çıkışı" + +#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2790 +#: etc/inc/interfaces.inc:2709 etc/inc/interfaces.inc:2761 +msgid "Generating new MAC address." +msgstr "Yeni MAC adresi oluşturuluyor." + +#: etc/inc/interfaces.inc:2721 etc/inc/interfaces.inc:2796 +#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2767 +#, php-format +msgid "" +"The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been " +"automatically replaced with %2$s" +msgstr "" +"Arabirimdeki GEÇERSİZ MAC adresi (ff:ff:ff:ff:ff:ff) %1$s otomatik olarak " +"yerine %2$s koyuldu" + +#: etc/inc/interfaces.inc:2910 +msgid "Could not bring wanif up in terface_carpdev_dhcp_configure()" +msgstr "in terface_carpdev_dhcp_configure() wanif açık değil" + +#: etc/inc/interfaces.inc:3016 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interfaces_wan_dhcp_configure() for " +"writing.%s" +msgstr "" +"Hata: %s yazmak için interfaces_wan_dhcp_configure() yapılandırma içinde " +"dhclient_%s açılamadı" + +#: etc/inc/interfaces.inc:3029 etc/inc/interfaces.inc:3513 +#: etc/inc/interfaces.inc:3373 etc/inc/interfaces.inc:3466 +#, php-format +msgid "Invalid interface \"%s\" in interface_dhcp_configure()" +msgstr "Geçersiz arabirim \"%s\" içinde interface_dhcp_configure()" + +#: etc/inc/interfaces.inc:3064 etc/inc/interfaces.inc:3548 +#: etc/inc/interfaces.inc:3408 etc/inc/interfaces.inc:3501 +#, php-format +msgid "Could not bring up %s interface in interface_dhcp_configure()" +msgstr "interface_dhcp_configure() içindeki %s arabirim açılamıyor" + +#: etc/inc/notices.inc:76 etc/inc/notices.inc:76 +#, php-format +msgid "Could not open %s for writing" +msgstr "Yazmak için %s açılamadı" + +#: etc/inc/notices.inc:327 etc/inc/notices.inc:327 +#, php-format +msgid "Message sent to %s OK" +msgstr "Mesaj %s 'a düzgün olarak gönderildi" + +#: etc/inc/notices.inc:330 etc/inc/notices.inc:331 etc/inc/notices.inc:330 +#: etc/inc/notices.inc:331 +#, php-format +msgid "Could not send the message to %1$s -- Error: %2$s" +msgstr "Mesaj %1$s gönderilemedi. -- Hata: %2$s" + +#: etc/inc/openvpn.inc:83 etc/inc/openvpn.inc:90 etc/inc/openvpn.inc:81 +#: etc/inc/openvpn.inc:88 etc/inc/openvpn.inc:81 etc/inc/openvpn.inc:88 +msgid "Peer to Peer ( SSL/TLS )" +msgstr "Eşler arası (SSL/TLS)" + +#: etc/inc/openvpn.inc:84 etc/inc/openvpn.inc:91 etc/inc/openvpn.inc:82 +#: etc/inc/openvpn.inc:89 etc/inc/openvpn.inc:82 etc/inc/openvpn.inc:89 +msgid "Peer to Peer ( Shared Key )" +msgstr "Eşler arası (Paylaşılmış Anahtar)" + +#: etc/inc/openvpn.inc:85 etc/inc/openvpn.inc:83 etc/inc/openvpn.inc:83 +msgid "Remote Access ( SSL/TLS )" +msgstr "Uzaktan Erişim (SSL/TLS)" + +#: etc/inc/openvpn.inc:86 etc/inc/openvpn.inc:84 etc/inc/openvpn.inc:84 +msgid "Remote Access ( User Auth )" +msgstr "Uzaktan Erişim (Kullanıcı Kimlik Doğrulaması)" + +#: etc/inc/openvpn.inc:87 etc/inc/openvpn.inc:85 etc/inc/openvpn.inc:85 +msgid "Remote Access ( SSL/TLS + User Auth )" +msgstr "Uzaktan Erişim (SSL/TLS + Kullanıcı Kimlik Doğrulaması)" + +#: etc/inc/openvpn.inc:179 etc/inc/openvpn.inc:177 etc/inc/openvpn.inc:195 +msgid "None (No Encryption)" +msgstr "Hiçbiri (Şifreleme Yok)" + +#: etc/inc/openvpn.inc:203 etc/inc/openvpn.inc:201 etc/inc/openvpn.inc:238 +#, php-format +msgid "The field '%s' must contain a valid IP address or domain name." +msgstr "'%s' Alanı geçerli bir IP adresi ya da etkialanı adı içermeli." + +#: etc/inc/openvpn.inc:210 etc/inc/openvpn.inc:208 etc/inc/openvpn.inc:245 +#, php-format +msgid "The field '%s' must contain a valid port, ranging from 0 to 65535." +msgstr "'%s' Alanı geçerli bir port ya da 0-65535 arasında bir değer içermeli." + +#: etc/inc/openvpn.inc:219 etc/inc/openvpn.inc:217 +#, php-format +msgid "The field '%s' must contain a valid CIDR range." +msgstr "'%s' Alanı geçerli bir CIDR aralığı içermeli." + +#: etc/inc/pfsense-utils.inc:345 etc/inc/pfsense-utils.inc:330 +msgid "MASTER" +msgstr "ASIL" + +#: etc/inc/pfsense-utils.inc:347 etc/inc/pfsense-utils.inc:332 +msgid "BACKUP" +msgstr "YEDEK" + +#: etc/inc/pfsense-utils.inc:349 etc/inc/pfsense-utils.inc:334 +#, fuzzy +msgid "INIT" +msgstr "INIT" + +# yapılan çeviriden emin değilim (technical) öneri varsa gönderiniz. +#: etc/inc/pfsense-utils.inc:417 etc/inc/pfsense-utils.inc:402 +msgid "After synch increase advertising skew" +msgstr "Senkronize sonrası reklam çarpıklığını artır" + +#: etc/inc/pfsense-utils.inc:462 etc/inc/pfsense-utils.inc:447 +msgid "Error creating socket!" +msgstr "Socket oluşturuken hata oluştu!" + +#: etc/inc/pfsense-utils.inc:463 etc/inc/pfsense-utils.inc:448 +#, php-format +msgid "Error code is '%1$s' - %2$s" +msgstr "Hata kodu '%1$s' - %2$s" + +#: etc/inc/pfsense-utils.inc:468 etc/inc/pfsense-utils.inc:453 +#, php-format +msgid "setsockopt() failed, error: %s" +msgstr "setsockopt() başarısız, hata: %s" + +#: etc/inc/pfsense-utils.inc:471 etc/inc/pfsense-utils.inc:456 +#, php-format +msgid "Magic Packet sent (%1$s) to {%2$s} MAC=%3$s" +msgstr "Özel paket gönder (%1$s) den {%2$s} MAC=%3$s" + +#: etc/inc/pfsense-utils.inc:518 etc/inc/pfsense-utils.inc:540 +#: etc/inc/pfsense-utils.inc:533 etc/inc/pfsense-utils.inc:555 +#: etc/inc/pfsense-utils.inc:518 etc/inc/pfsense-utils.inc:540 +#, php-format +msgid "Restored %s of config file (maybe from CARP partner)" +msgstr "Yapılandırma dosyası %s geri yüklendi (belki CARP ile ilişkili)" + +#: etc/inc/pfsense-utils.inc:699 etc/inc/pfsense-utils.inc:714 +#: etc/inc/pfsense-utils.inc:699 +#, php-format +msgid "XMLRPC communication error: %s" +msgstr "XMLRPC haberleşme hatası: %s" + +#: etc/inc/pfsense-utils.inc:702 etc/inc/pfsense-utils.inc:717 +#: etc/inc/pfsense-utils.inc:702 +#, php-format +msgid "XMLRPC request failed with error %1$s: %2$s" +msgstr "XMLRPC isteği %1$s: %2$s hatası ile başarısız oldu" + +#: etc/inc/pfsense-utils.inc:795 etc/inc/pfsense-utils.inc:810 +#: etc/inc/pfsense-utils.inc:795 +msgid "reload_interfaces_sync() is starting." +msgstr "reload_interfaces_sync() başlatılıyor." + +#: etc/inc/pfsense-utils.inc:803 etc/inc/pfsense-utils.inc:818 +#: etc/inc/pfsense-utils.inc:803 +msgid "Enabling system routing" +msgstr "Sistem yönlendirmesi etkinleştiriliyor" + +#: etc/inc/pfsense-utils.inc:806 etc/inc/pfsense-utils.inc:821 +#: etc/inc/pfsense-utils.inc:806 +msgid "Cleaning up Interfaces" +msgstr "Arabirimler temizleniyor" + +#: etc/inc/pfsense-utils.inc:912 etc/inc/pfsense-utils.inc:927 +#: etc/inc/pfsense-utils.inc:936 +msgid "Enabling auto login was not possible." +msgstr "Otomatik giriş mümkün değil." + +#: etc/inc/pfsense-utils.inc:1100 etc/inc/pfsense-utils.inc:1137 +#: etc/inc/pfsense-utils.inc:1191 etc/inc/pfsense-utils.inc:1196 +msgid "No history data found!" +msgstr "Geçmiş veri bulunamadı!" + +#: etc/inc/pfsense-utils.inc:1222 etc/inc/pfsense-utils.inc:1260 +#: etc/inc/pfsense-utils.inc:1313 etc/inc/pfsense-utils.inc:1318 +msgid "device not present! Is the modem attached to the system?" +msgstr "Aygıt tanınmadı! Modem sisteme takıldı mı?" + +#: etc/inc/pfsense-utils.inc:1262 etc/inc/pfsense-utils.inc:1327 +#: etc/inc/pfsense-utils.inc:1380 etc/inc/pfsense-utils.inc:1385 +msgid "running" +msgstr "çalışıyor" + +#: etc/inc/pfsense-utils.inc:1263 usr/local/www/graph.php:201 +#: etc/inc/pfsense-utils.inc:1328 etc/inc/pfsense-utils.inc:1381 +#: usr/local/www/graph.php:201 etc/inc/pfsense-utils.inc:1386 +msgid "up" +msgstr "yukarı" + +#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371 +#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429 +msgid "blocking" +msgstr "bloke ediliyor" + +#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371 +#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429 +msgid "check for ethernet loops" +msgstr "ethernet döngülerini kontrol et" + +#: etc/inc/pfsense-utils.inc:1303 etc/inc/pfsense-utils.inc:1374 +#: etc/inc/pfsense-utils.inc:1427 etc/inc/pfsense-utils.inc:1432 +msgid "learning" +msgstr "öğreniyor" + +#: etc/inc/pfsense-utils.inc:1306 etc/inc/pfsense-utils.inc:1377 +#: etc/inc/pfsense-utils.inc:1430 etc/inc/pfsense-utils.inc:1435 +msgid "forwarding" +msgstr "yönlendiriliyor" + +#: etc/inc/pfsense-utils.inc:1417 etc/inc/pfsense-utils.inc:1493 +#: etc/inc/pfsense-utils.inc:1546 etc/inc/pfsense-utils.inc:1551 +#, php-format +msgid "DNSCACHE: Found old IP %1$s and new IP %2$s" +msgstr "DNS ARABELLEĞİ: Eski IP %1$s ve yeni IP %2$s buldu" + +#: etc/inc/pkg-utils.inc:211 etc/inc/pkg-utils.inc:226 +#: etc/inc/pkg-utils.inc:244 +msgid "Resyncing configuration for all packages." +msgstr "Tüm paketlerin yapılandırmaları yeniden senkronize ediliyor." + +#: etc/inc/pkg-utils.inc:231 etc/inc/pkg-utils.inc:246 +#: etc/inc/pkg-utils.inc:264 +msgid "Syncing packages:" +msgstr "Paketler senkronize ediliyor:" + +#: etc/inc/pkg-utils.inc:273 etc/inc/pkg-utils.inc:288 +#: etc/inc/pkg-utils.inc:306 +#, php-format +msgid "" +"The %1$s package is missing required dependencies and must be reinstalled. " +"%2$s" +msgstr "%1$s Paketi kayıp, gereken bağımlılıklar %2$s yeniden yüklenmeli" + +#: etc/inc/pkg-utils.inc:297 etc/inc/pkg-utils.inc:437 +#: etc/inc/pkg-utils.inc:312 etc/inc/pkg-utils.inc:462 +#: etc/inc/pkg-utils.inc:464 etc/inc/pkg-utils.inc:330 +#: etc/inc/pkg-utils.inc:481 +#, php-format +msgid "" +"The %s package is missing required dependencies and must be reinstalled." +msgstr "%s Paketi kayıp, gereken bağımlılıklar yeniden yüklenmeli." + +#: etc/inc/pkg-utils.inc:404 etc/inc/pkg-utils.inc:429 +#: etc/inc/pkg-utils.inc:431 etc/inc/pkg-utils.inc:448 +#, php-format +msgid "" +"The %s package is missing its configuration file and must be reinstalled." +msgstr "%s Paketi kayıp, yapılandırma dosyası yeniden yüklenmeli." + +#: etc/inc/pkg-utils.inc:563 usr/local/www/pkg_mgr_install.php:101 +#: etc/inc/pkg-utils.inc:589 etc/inc/pkg-utils.inc:590 +#: usr/local/www/pkg_mgr_install.php:99 etc/inc/pkg-utils.inc:625 +msgid "Beginning package installation." +msgstr "Paket yüklenmesine başlanıyor." + +#: etc/inc/pkg-utils.inc:564 etc/inc/pkg-utils.inc:565 +#: etc/inc/pkg-utils.inc:590 etc/inc/pkg-utils.inc:591 +#: etc/inc/pkg-utils.inc:592 etc/inc/pkg-utils.inc:626 +#: etc/inc/pkg-utils.inc:627 +#, php-format +msgid "Beginning package installation for %s ." +msgstr "%s paketinin yüklenmesine başlanıyor ." + +#: etc/inc/pkg-utils.inc:569 etc/inc/pkg-utils.inc:595 +#: etc/inc/pkg-utils.inc:596 etc/inc/pkg-utils.inc:631 +msgid "Downloading package configuration file... " +msgstr "Paket yapılandırma dosyası indiriliyor... " + +#: etc/inc/pkg-utils.inc:571 etc/inc/pkg-utils.inc:597 +#: etc/inc/pkg-utils.inc:598 etc/inc/pkg-utils.inc:633 +msgid "Downloading package configuration file..." +msgstr "Paket yapılandırma dosyası indiriliyor..." + +#: etc/inc/pkg-utils.inc:575 etc/inc/pkg-utils.inc:601 +#: etc/inc/pkg-utils.inc:602 etc/inc/pkg-utils.inc:637 +msgid "" +"ERROR! Unable to fetch package configuration file. Aborting installation." +msgstr "Hata! Yapılandırma dosyası alınamıyor. Kurulum iptal ediliyor." + +#: etc/inc/pkg-utils.inc:577 etc/inc/pkg-utils.inc:603 +#: etc/inc/pkg-utils.inc:604 etc/inc/pkg-utils.inc:639 +msgid "" +"ERROR! Unable to fetch package configuration file. Aborting package " +"installation." +msgstr "Hata! Yapılandırma dosyası alınamıyor. Paket kurulumu iptal ediliyor." + +#: etc/inc/pkg-utils.inc:579 etc/inc/pkg-utils.inc:605 +#: etc/inc/pkg-utils.inc:606 etc/inc/pkg-utils.inc:641 +msgid "" +"failed!\n" +"\n" +"Installation aborted.\n" +msgstr "" +"başarısız!\n" +"\n" +"Kurulum iptal edildi.\n" + +#: etc/inc/pkg-utils.inc:591 etc/inc/pkg-utils.inc:617 +#: etc/inc/pkg-utils.inc:618 etc/inc/pkg-utils.inc:653 +msgid "Saving updated package information..." +msgstr "Güncellenen paket bilgisi kaydediliyor..." + +#: etc/inc/pkg-utils.inc:595 etc/inc/pkg-utils.inc:621 +#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:657 +#, php-format +msgid "Installed %s package." +msgstr "%s paketi yüklendi." + +#: etc/inc/pkg-utils.inc:599 etc/inc/pkg-utils.inc:625 +#: etc/inc/pkg-utils.inc:626 etc/inc/pkg-utils.inc:661 +#, php-format +msgid "Overwrote previous installation of %s." +msgstr "Yazılan önceki kurulumu %s." + +#: etc/inc/pkg-utils.inc:600 etc/inc/pkg-utils.inc:626 +#: etc/inc/pkg-utils.inc:627 etc/inc/pkg-utils.inc:662 +msgid "overwrite!" +msgstr "üzerine yaz!" + +#: etc/inc/pkg-utils.inc:612 etc/inc/pkg-utils.inc:638 +#: etc/inc/pkg-utils.inc:639 etc/inc/pkg-utils.inc:674 +msgid "Failed to install package." +msgstr "Paket yüklemesi başarısız oldu." + +#: etc/inc/pkg-utils.inc:616 etc/inc/pkg-utils.inc:642 +#: etc/inc/pkg-utils.inc:643 etc/inc/pkg-utils.inc:678 +msgid "Writing configuration... " +msgstr "Yapılandırma kaydediliyor... " + +#: etc/inc/pkg-utils.inc:652 etc/inc/pkg-utils.inc:678 +#: etc/inc/pkg-utils.inc:679 etc/inc/pkg-utils.inc:714 +#, php-format +msgid "The %s package is not installed.%sInstallation aborted." +msgstr "%s Paketi kurulu değil.%sKurulumu iptal edildi." + +#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693 +#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729 +msgid "Installing" +msgstr "Yükleniyor" + +#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693 +#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729 +msgid "and its dependencies." +msgstr "ve ona bağımlılarıda." + +#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694 +#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730 +msgid "Downloading" +msgstr "İndiriliyor" + +#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694 +#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730 +msgid "and its dependencies... " +msgstr "ve ona bağımlılarıda." + +#: etc/inc/pkg-utils.inc:680 etc/inc/pkg-utils.inc:706 +#: etc/inc/pkg-utils.inc:707 etc/inc/pkg-utils.inc:742 +msgid "Package WAS NOT installed properly." +msgstr "Paket düzgün olarak YÜKLENMEDİ." + +#: etc/inc/pkg-utils.inc:693 etc/inc/pkg-utils.inc:719 +#: etc/inc/pkg-utils.inc:720 etc/inc/pkg-utils.inc:755 +msgid "Loading package configuration... " +msgstr "Paket yapılandırması yükleniyor..." + +#: etc/inc/pkg-utils.inc:698 etc/inc/pkg-utils.inc:724 +#: etc/inc/pkg-utils.inc:725 etc/inc/pkg-utils.inc:760 +msgid "Configuring package components...\n" +msgstr "Paket bileşenleri yapılandırılıyor...\n" + +#: etc/inc/pkg-utils.inc:704 etc/inc/pkg-utils.inc:1049 +#: etc/inc/pkg-utils.inc:730 etc/inc/pkg-utils.inc:1086 +#: etc/inc/pkg-utils.inc:731 etc/inc/pkg-utils.inc:1087 +#: etc/inc/pkg-utils.inc:766 etc/inc/pkg-utils.inc:1122 +msgid "System files... " +msgstr "Sistem dosyaları... " + +#: etc/inc/pkg-utils.inc:716 etc/inc/pkg-utils.inc:742 +#: etc/inc/pkg-utils.inc:743 etc/inc/pkg-utils.inc:778 +msgid "Additional files... " +msgstr "Ek dosyalar... " + +#: etc/inc/pkg-utils.inc:742 etc/inc/pkg-utils.inc:768 +#: etc/inc/pkg-utils.inc:769 etc/inc/pkg-utils.inc:804 +msgid "Extracting tarball to -C for " +msgstr "tar.gz *tarball* -C ile çıkartılıyor " + +#: etc/inc/pkg-utils.inc:748 etc/inc/pkg-utils.inc:774 +#: etc/inc/pkg-utils.inc:775 etc/inc/pkg-utils.inc:810 +#, php-format +msgid "Changing file mode to %1$s for %2$s%3$s%4$s" +msgstr "Dosya modu %1$s olan %2$s%3$s%4$s a değiştiriliyor" + +#: etc/inc/pkg-utils.inc:764 etc/inc/pkg-utils.inc:1025 +#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:1062 +#: etc/inc/pkg-utils.inc:791 etc/inc/pkg-utils.inc:1063 +#: etc/inc/pkg-utils.inc:826 etc/inc/pkg-utils.inc:1098 +msgid "Loading package instructions..." +msgstr "Paket kullanma talimatları yükleniyor..." + +#: etc/inc/pkg-utils.inc:779 etc/inc/pkg-utils.inc:805 +#: etc/inc/pkg-utils.inc:806 etc/inc/pkg-utils.inc:841 +msgid "Custom commands..." +msgstr "Özel komutlar..." + +#: etc/inc/pkg-utils.inc:783 etc/inc/pkg-utils.inc:809 +#: etc/inc/pkg-utils.inc:810 etc/inc/pkg-utils.inc:845 +msgid "Executing custom_php_global_functions()..." +msgstr "custom_php_global_functions() çalıştırılıyor..." + +#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:816 +#: etc/inc/pkg-utils.inc:817 etc/inc/pkg-utils.inc:852 +msgid "Executing custom_php_install_command()..." +msgstr "custom_php_install_command() çalıştırılıyor..." + +#: etc/inc/pkg-utils.inc:809 etc/inc/pkg-utils.inc:845 +#: etc/inc/pkg-utils.inc:846 etc/inc/pkg-utils.inc:881 +msgid "Executing custom_php_resync_config_command()..." +msgstr "custom_php_resync_config_command() çalıştırılıyor..." + +#: etc/inc/pkg-utils.inc:818 etc/inc/pkg-utils.inc:972 +#: etc/inc/pkg-utils.inc:854 etc/inc/pkg-utils.inc:1009 +#: etc/inc/pkg-utils.inc:855 etc/inc/pkg-utils.inc:1010 +#: etc/inc/pkg-utils.inc:890 etc/inc/pkg-utils.inc:1045 +msgid "Menu items... " +msgstr "Menü öğeleri... " + +#: etc/inc/pkg-utils.inc:834 etc/inc/pkg-utils.inc:870 +#: etc/inc/pkg-utils.inc:871 etc/inc/pkg-utils.inc:906 +msgid "Integrated Tab items... " +msgstr "Birleşmiş Tab öğeleri... " + +#: etc/inc/pkg-utils.inc:850 etc/inc/pkg-utils.inc:989 +#: etc/inc/pkg-utils.inc:886 etc/inc/pkg-utils.inc:1026 +#: etc/inc/pkg-utils.inc:887 etc/inc/pkg-utils.inc:1027 +#: etc/inc/pkg-utils.inc:922 etc/inc/pkg-utils.inc:1062 +msgid "Services... " +msgstr "Servisler... " + +#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901 +#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937 +msgid "Loading package configuration... failed!" +msgstr "Paket yapılandırması yükleniyor... Başarısız oldu!" + +#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901 +#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937 +msgid "Installation aborted." +msgstr "Kurulum durduruldu." + +#: etc/inc/pkg-utils.inc:867 etc/inc/pkg-utils.inc:903 +#: etc/inc/pkg-utils.inc:904 etc/inc/pkg-utils.inc:939 +msgid "Unable to load package configuration. Installation aborted." +msgstr "Paket yapılandırması yüklenemedi. Kurulum durduruldu." + +#: etc/inc/pkg-utils.inc:911 etc/inc/pkg-utils.inc:948 +#: etc/inc/pkg-utils.inc:949 etc/inc/pkg-utils.inc:984 +#, php-format +msgid "Starting package deletion for %s..." +msgstr "%s Paketinin silinmesi başlatılıyor..." + +#: etc/inc/pkg-utils.inc:931 etc/inc/pkg-utils.inc:968 +#: etc/inc/pkg-utils.inc:969 etc/inc/pkg-utils.inc:1004 +#, php-format +msgid "The %s package is not installed.%sDeletion aborted." +msgstr "%s paketi kurulu değil.%s Silme işlemi duruduruldu." + +#: etc/inc/pkg-utils.inc:942 etc/inc/pkg-utils.inc:979 +#: etc/inc/pkg-utils.inc:980 etc/inc/pkg-utils.inc:1015 +#, php-format +msgid "Removing %s package... " +msgstr "%s paketi kaldırılıyor..." + +#: etc/inc/pkg-utils.inc:943 etc/inc/pkg-utils.inc:980 +#: etc/inc/pkg-utils.inc:981 etc/inc/pkg-utils.inc:1016 +#, php-format +msgid "Removing %s components..." +msgstr "%s bileşenleri kaldırılıyor..." + +#: etc/inc/pkg-utils.inc:955 etc/inc/pkg-utils.inc:992 +#: etc/inc/pkg-utils.inc:993 etc/inc/pkg-utils.inc:1028 +msgid "Tabs items... " +msgstr "Sekmeler öğeler" + +#: etc/inc/pkg-utils.inc:1059 etc/inc/pkg-utils.inc:1096 +#: etc/inc/pkg-utils.inc:1097 etc/inc/pkg-utils.inc:1132 +msgid "Deinstall commands... " +msgstr "Kaldırma komutları..." + +#: etc/inc/pkg-utils.inc:1069 etc/inc/pkg-utils.inc:1106 +#: etc/inc/pkg-utils.inc:1107 etc/inc/pkg-utils.inc:1142 +msgid "Removing package instructions..." +msgstr "Paket yönergeleri kaldırılıyor..." + +#: etc/inc/pkg-utils.inc:1071 etc/inc/pkg-utils.inc:1108 +#: etc/inc/pkg-utils.inc:1109 etc/inc/pkg-utils.inc:1144 +#, php-format +msgid "Remove '%s'" +msgstr "'%s' Kaldır" + +#: etc/inc/pkg-utils.inc:1078 etc/inc/pkg-utils.inc:1115 +#: etc/inc/pkg-utils.inc:1116 etc/inc/pkg-utils.inc:1151 +msgid "Auxiliary files... " +msgstr "Yardımcı dosyalar..." + +#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1129 +#: etc/inc/pkg-utils.inc:1130 etc/inc/pkg-utils.inc:1165 +msgid "Package XML... " +msgstr "XML Paketleri" + +#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1148 +#: etc/inc/pkg-utils.inc:1149 etc/inc/pkg-utils.inc:1184 +msgid "Configuration... " +msgstr "Yapılandırma..." + +#: etc/inc/pkg-utils.inc:1205 etc/inc/pkg-utils.inc:1242 +#: etc/inc/pkg-utils.inc:1243 etc/inc/pkg-utils.inc:1274 +#, php-format +msgid "" +" >>> Unable to communicate with %1$s. Please verify DNS and interface " +"configuration, and that %2$s has functional Internet connectivity." +msgstr "" +" >>> %1$s ile iletişim kurulamıyor. Lütfen DNS ve arabirim yapılandırmanızı, " +"ayrıca %2$s in işlevsel internet bağlantısı olduğunu doğrulayın." + +#: etc/inc/radius.inc:404 etc/inc/radius.inc:406 +msgid "Error sending request:" +msgstr "İstek gönderilmesinde hata:" + +#: etc/inc/radius.inc:410 etc/inc/radius.inc:412 +msgid "RADIUS_ACCESS_ACCEPT is unexpected for accounting" +msgstr "RADIUS_ACCESS_ACCEPT hesap için beklenmeyen durum" + +#: etc/inc/radius.inc:419 etc/inc/radius.inc:421 +msgid "RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication" +msgstr "RADIUS_ACCOUNTING_RESPONSE beklenmeyen kimlik doğrulaması" + +#: etc/inc/radius.inc:424 etc/inc/radius.inc:426 +#, php-format +msgid "Unexpected return value: %s" +msgstr "Beklenmeyen değer dögüsü: %s" + +#: etc/inc/services.inc:262 etc/inc/services.inc:333 etc/inc/services.inc:360 +#: etc/inc/services.inc:369 +#, php-format +msgid "DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s" +msgstr "DHCP kiraları geri yükleme başarısız %1$s, hata : %2$s%3$s" + +#: etc/inc/services.inc:275 etc/inc/services.inc:346 etc/inc/services.inc:373 +#: etc/inc/services.inc:382 +msgid "Starting DHCP service..." +msgstr "DHCP servisi başlatılıyor..." + +#: etc/inc/services.inc:282 etc/inc/services.inc:353 etc/inc/services.inc:380 +#: etc/inc/services.inc:820 +#, php-format +msgid "Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s" +msgstr "" +"Hata: services_dhcpdv4_configure().%s içerisindeki dhcpd.conf açılamıyor" + +#: etc/inc/services.inc:353 etc/inc/services.inc:434 etc/inc/services.inc:461 +#: etc/inc/services.inc:463 +msgid "Warning! DHCP Failover setup and no CARP virtual IP's defined!" +msgstr "Uyarı! DHCP Failover kurulum ve CARP sanal IP'leri tanımlı değil!" + +#: etc/inc/services.inc:949 etc/inc/services.inc:1078 +#: etc/inc/services.inc:1210 etc/inc/services.inc:1203 +msgid "Could not write Igmpproxy configuration file!" +msgstr "Igmpproxy yapılandırma dosyasına yazılamıyor!" + +#: etc/inc/services.inc:956 +msgid "Started Igmpproxy service successfully." +msgstr "Igmpproxy servisi başarıyla çalıştırıldı." + +#: etc/inc/services.inc:980 etc/inc/services.inc:1109 +#: etc/inc/services.inc:1241 etc/inc/services.inc:1235 +msgid "Starting DHCP relay service..." +msgstr "DHCP relay servisi başlatılıyor..." + +#: etc/inc/services.inc:1096 etc/inc/services.inc:1223 +#: etc/inc/services.inc:1355 etc/inc/services.inc:1350 +msgid "Starting DHCPv6 relay service..." +msgstr "DHCPv6 relay servisi başlatılıyor..." + +#: etc/inc/services.inc:1222 etc/inc/services.inc:1358 +#: etc/inc/services.inc:1493 etc/inc/services.inc:1489 +msgid "Starting DynDNS clients..." +msgstr "DynDNS istemcisi başlatılıyor..." + +#: etc/inc/services.inc:1255 etc/inc/services.inc:1392 +#: etc/inc/services.inc:1531 etc/inc/services.inc:1545 +msgid "Starting DNS forwarder..." +msgstr "DNS yönlendiricisi başlatılıyor..." + +#: etc/inc/services.inc:1324 etc/inc/services.inc:1507 +#: etc/inc/services.inc:1646 etc/inc/services.inc:1623 +msgid "Starting SNMP daemon... " +msgstr "SNMP servisi başlatılıyor..." + +#: etc/inc/services.inc:1329 etc/inc/services.inc:1512 +#: etc/inc/services.inc:1651 etc/inc/services.inc:1628 +#, php-format +msgid "Error: cannot open snmpd.conf in services_snmpd_configure().%s" +msgstr "Hata: %s services_snmpd_configure() içinde snmpd.conf açılamıyor" + +#: etc/inc/services.inc:1875 etc/inc/services.inc:2067 +#: etc/inc/services.inc:1919 etc/inc/services.inc:1908 +msgid "pfSense specific crontab entries" +msgstr "pfSense kendine özgü crontab girişleri" + +#: etc/inc/services.inc:1876 etc/inc/services.inc:2068 +#: etc/inc/services.inc:1920 etc/inc/services.inc:1909 +msgid "Created:" +msgstr "Oluşturuldu:" + +# eğer mümkünse gibi bişey ekelemek yanlış zaten burda dosyaya müdahele edilmesi istenmiyor ! çeviriyi direk kelime bazlı işlemeyelim !!!!!!!!! +#: etc/inc/services.inc:1890 etc/inc/services.inc:2082 +#: etc/inc/services.inc:1934 etc/inc/services.inc:1923 +msgid "If possible do not add items to this file manually." +msgstr "Elle bu dosyaya öğe eklemeyin." + +#: etc/inc/services.inc:1891 etc/inc/services.inc:2083 +#: etc/inc/services.inc:1935 etc/inc/services.inc:1924 +msgid "" +"If you do so, this file must be terminated with a blank line (e.g. new line)" +msgstr "" +"Bunu yaparsanız, bu dosya boş bir satır ile sonlandırılacak. (Ör: yeni " +"satır)" + +#: etc/inc/services.inc:1934 etc/inc/services.inc:2126 +#: etc/inc/services.inc:1978 etc/inc/services.inc:1968 +msgid "Starting UPnP service... " +msgstr "UPnP servisi başlatılıyor..." + +#: etc/inc/services.inc:1969 etc/inc/services.inc:2161 +#: etc/inc/services.inc:2013 etc/inc/services.inc:2005 +#, php-format +msgid "Installed cron job for %s" +msgstr "%s için zamanlandırılmış görev kuruldu" + +#: etc/inc/services.inc:1972 etc/inc/services.inc:2164 +#: etc/inc/services.inc:2016 etc/inc/services.inc:2008 +#, php-format +msgid "Updated cron job for %s" +msgstr "%s için zamanlandırılmış görev güncellendi" + +#: etc/inc/services.inc:1977 etc/inc/services.inc:2169 +#: etc/inc/services.inc:2021 +#, php-format +msgid "Remvoed cron job for %s" +msgstr "%s için zamanlandırılmış görev silindi" + +#: etc/inc/shaper.inc:189 etc/inc/shaper.inc:190 etc/inc/shaper.inc:190 +#, php-format +msgid "The field '%s' contains invalid characters." +msgstr "'%s' alanı geçersiz karakterler içeriyor." + +#: etc/inc/shaper.inc:195 etc/inc/shaper.inc:196 etc/inc/shaper.inc:196 +#, php-format +msgid "The field '%s' is required." +msgstr "'%s' alanı gerekli." + +#: etc/inc/shaper.inc:317 etc/inc/shaper.inc:651 etc/inc/shaper.inc:1544 +#: etc/inc/shaper.inc:1850 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2327 +#: etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2593 etc/inc/shaper.inc:2787 +#: etc/inc/shaper.inc:3023 usr/local/www/interfaces_ppps_edit.php:750 +#: etc/inc/shaper.inc:318 etc/inc/shaper.inc:652 etc/inc/shaper.inc:1546 +#: etc/inc/shaper.inc:1852 etc/inc/shaper.inc:2194 etc/inc/shaper.inc:2329 +#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2595 etc/inc/shaper.inc:2789 +#: etc/inc/shaper.inc:3031 etc/inc/shaper.inc:3161 +#: usr/local/www/interfaces_ppps_edit.php:751 +#: usr/local/www/interfaces_ppps_edit.php:757 +#: usr/local/www/status_queues.php:151 etc/inc/shaper.inc:318 +#: etc/inc/shaper.inc:652 etc/inc/shaper.inc:1547 etc/inc/shaper.inc:1853 +#: etc/inc/shaper.inc:2195 etc/inc/shaper.inc:2330 etc/inc/shaper.inc:2470 +#: etc/inc/shaper.inc:2596 etc/inc/shaper.inc:2790 etc/inc/shaper.inc:3162 +msgid "Bandwidth" +msgstr "Bantgenişliği" + +#: etc/inc/shaper.inc:319 etc/inc/shaper.inc:1546 etc/inc/shaper.inc:2194 +#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2789 etc/inc/shaper.inc:320 +#: etc/inc/shaper.inc:1548 etc/inc/shaper.inc:2196 etc/inc/shaper.inc:2471 +#: etc/inc/shaper.inc:2791 etc/inc/shaper.inc:320 etc/inc/shaper.inc:1549 +#: etc/inc/shaper.inc:2197 etc/inc/shaper.inc:2472 etc/inc/shaper.inc:2792 +msgid "Bandwidthtype" +msgstr "Bant genişliği türü" + +#: etc/inc/shaper.inc:324 etc/inc/shaper.inc:1552 etc/inc/shaper.inc:2199 +#: etc/inc/shaper.inc:2474 etc/inc/shaper.inc:2900 etc/inc/shaper.inc:325 +#: etc/inc/shaper.inc:1554 etc/inc/shaper.inc:2201 etc/inc/shaper.inc:2476 +#: etc/inc/shaper.inc:2904 etc/inc/shaper.inc:325 etc/inc/shaper.inc:1555 +#: etc/inc/shaper.inc:2202 etc/inc/shaper.inc:2477 +msgid "Bandwidth must be an integer." +msgstr "Bant genişliği tam sayı olmalıdır." + +#: etc/inc/shaper.inc:326 etc/inc/shaper.inc:1555 etc/inc/shaper.inc:2203 +#: etc/inc/shaper.inc:2478 etc/inc/shaper.inc:327 etc/inc/shaper.inc:1557 +#: etc/inc/shaper.inc:2205 etc/inc/shaper.inc:2480 etc/inc/shaper.inc:327 +#: etc/inc/shaper.inc:1558 etc/inc/shaper.inc:2206 etc/inc/shaper.inc:2481 +msgid "Bandwidth cannot be negative." +msgstr "Bant genişliği negatif olamaz." + +#: etc/inc/shaper.inc:328 etc/inc/shaper.inc:329 etc/inc/shaper.inc:329 +msgid "Qlimit must be an integer." +msgstr "Qlimit tam sayı olmalıdır." + +#: etc/inc/shaper.inc:330 etc/inc/shaper.inc:331 etc/inc/shaper.inc:331 +msgid "Qlimit must be an positive." +msgstr "Qlimit pozitif sayı olmalıdır." + +#: etc/inc/shaper.inc:332 etc/inc/shaper.inc:333 etc/inc/shaper.inc:333 +msgid "Tbrsize must be an integer." +msgstr "Tbrsize tam sayı olmalıdır." + +#: etc/inc/shaper.inc:334 etc/inc/shaper.inc:335 etc/inc/shaper.inc:335 +msgid "Tbrsize must be an positive." +msgstr "Tbrsize pozitif sayı olmalıdır." + +#: etc/inc/shaper.inc:614 etc/inc/shaper.inc:1120 etc/inc/shaper.inc:3269 +#: etc/inc/shaper.inc:3488 etc/inc/shaper.inc:615 etc/inc/shaper.inc:1121 +#: etc/inc/shaper.inc:3277 etc/inc/shaper.inc:3500 etc/inc/shaper.inc:3432 +#: etc/inc/shaper.inc:3655 etc/inc/shaper.inc:615 etc/inc/shaper.inc:1122 +#: etc/inc/shaper.inc:3433 etc/inc/shaper.inc:3656 +msgid "Enable/Disable" +msgstr "Aktif/Pasif" + +#: etc/inc/shaper.inc:619 etc/inc/shaper.inc:620 etc/inc/shaper.inc:620 +msgid "Enable/disable discipline and its children" +msgstr "Kuyruk Disiplini ve alt öğeleri Aktif/Pasif" + +#: etc/inc/shaper.inc:621 etc/inc/shaper.inc:965 etc/inc/shaper.inc:2791 +#: etc/inc/shaper.inc:3016 etc/inc/shaper.inc:3276 etc/inc/shaper.inc:3496 +#: etc/inc/shaper.inc:3568 usr/local/www/load_balancer_virtual_server.php:128 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/load_balancer_relay_action.php:140 +#: usr/local/www/interfaces_groups.php:94 +#: usr/local/www/firewall_aliases.php:165 +#: usr/local/www/firewall_aliases_edit.php:134 +#: usr/local/www/firewall_aliases_edit.php:576 +#: usr/local/www/firewall_schedule.php:96 +#: usr/local/www/load_balancer_pool.php:131 +#: usr/local/www/load_balancer_monitor.php:122 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:235 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:181 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:183 +#: usr/local/www/services_captiveportal_filemanager.php:162 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:411 +#: usr/local/www/load_balancer_relay_protocol.php:134 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:195 +#: usr/local/www/services_igmpproxy.php:95 +#: usr/local/www/status_gateways.php:72 usr/local/www/status_lb_pool.php:130 +#: usr/local/www/status_lb_vs.php:77 usr/local/www/status_openvpn.php:211 +#: usr/local/www/status_openvpn.php:262 usr/local/www/system_camanager.php:565 +#: usr/local/www/system_certmanager.php:854 +#: usr/local/www/system_crlmanager.php:487 +#: usr/local/www/system_gateways.php:152 +#: usr/local/www/system_gateways_edit.php:98 +#: usr/local/www/system_gateways_edit.php:370 +#: usr/local/www/system_groupmanager.php:346 +#: usr/local/www/system_usermanager.php:577 +#: usr/local/www/system_usermanager.php:630 etc/inc/shaper.inc:622 +#: etc/inc/shaper.inc:966 etc/inc/shaper.inc:2793 etc/inc/shaper.inc:3020 +#: etc/inc/shaper.inc:3284 etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3580 +#: usr/local/www/pkg_mgr.php:129 usr/local/www/system_certmanager.php:1020 +#: usr/local/www/load_balancer_relay_action_edit.php:410 +#: usr/local/www/system_usermanager.php:575 +#: usr/local/www/system_usermanager.php:628 +#: usr/local/www/firewall_aliases_edit.php:581 +#: usr/local/www/pkg_mgr_installed.php:111 +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/system_gateways_edit.php:99 +#: usr/local/www/system_gateways_edit.php:391 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/load_balancer_virtual_server_edit.php:157 +#: usr/local/www/firewall_aliases.php:168 +#: usr/local/www/system_camanager.php:566 +#: usr/local/www/load_balancer_pool_edit.php:189 +#: usr/local/www/load_balancer_pool.php:132 etc/inc/shaper.inc:3150 +#: etc/inc/shaper.inc:3439 etc/inc/shaper.inc:3663 etc/inc/shaper.inc:3735 +#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265 +#: usr/local/www/load_balancer_relay_protocol_edit.php:193 +#: usr/local/www/interfaces_groups.php:95 +#: usr/local/www/load_balancer_relay_action_edit.php:408 +#: usr/local/www/load_balancer_monitor_edit.php:233 +#: usr/local/www/system_crlmanager.php:520 +#: usr/local/www/firewall_aliases_edit.php:584 +#: usr/local/www/load_balancer_virtual_server.php:127 +#: usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:497 +#: usr/local/www/status_gateways.php:73 +#: usr/local/www/services_captiveportal_filemanager.php:159 +#: usr/local/www/load_balancer_monitor.php:121 +#: usr/local/www/load_balancer_relay_protocol.php:132 +#: usr/local/www/load_balancer_virtual_server_edit.php:155 +#: usr/local/www/firewall_aliases.php:188 +#: usr/local/www/load_balancer_relay_action.php:138 +#: usr/local/www/load_balancer_pool_edit.php:187 +#: usr/local/www/load_balancer_pool.php:130 +#: usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:499 +#: usr/local/www/system_camanager.php:590 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:193 +#: usr/local/www/system_groupmanager.php:346 +#: usr/local/www/firewall_schedule.php:96 usr/local/www/status_openvpn.php:262 +#: usr/local/www/status_openvpn.php:313 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:155 +#: usr/local/www/firewall_aliases.php:188 +#: usr/local/www/load_balancer_relay_protocol.php:132 +#: usr/local/www/pkg_mgr_installed.php:111 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/load_balancer_relay_action.php:138 +#: usr/local/www/system_certmanager.php:1062 +#: usr/local/www/status_lb_pool.php:130 usr/local/www/interfaces_groups.php:95 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:408 +#: usr/local/www/pkg_mgr.php:129 usr/local/www/system_crlmanager.php:520 +#: usr/local/www/load_balancer_pool.php:130 +#: usr/local/www/services_captiveportal_filemanager.php:159 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:233 +#: usr/local/www/firewall_aliases_edit.php:134 +#: usr/local/www/firewall_aliases_edit.php:584 +#: usr/local/www/services_igmpproxy.php:95 +#: usr/local/www/load_balancer_monitor.php:121 +#: usr/local/www/system_usermanager.php:575 +#: usr/local/www/system_usermanager.php:628 +#: usr/local/www/system_gateways.php:152 +#: usr/local/www/load_balancer_virtual_server.php:127 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:187 +#: usr/local/www/status_lb_vs.php:77 usr/local/www/status_gateways.php:73 +#: etc/inc/shaper.inc:622 etc/inc/shaper.inc:966 etc/inc/shaper.inc:2794 +#: etc/inc/shaper.inc:3151 etc/inc/shaper.inc:3440 etc/inc/shaper.inc:3664 +#: etc/inc/shaper.inc:3736 +msgid "Name" +msgstr "Ad" + +#: etc/inc/shaper.inc:625 etc/inc/shaper.inc:626 etc/inc/shaper.inc:626 +msgid "Scheduler Type " +msgstr "Zamanlandırma Tipi" + +#: etc/inc/shaper.inc:647 etc/inc/shaper.inc:648 etc/inc/shaper.inc:648 +msgid "NOTE: Changing this changes all child queues!" +msgstr "Uyarı: Bunu değiştirmen bütün alt kuyrukları değiştirir!" + +#: etc/inc/shaper.inc:648 etc/inc/shaper.inc:649 etc/inc/shaper.inc:649 +msgid " Beware you can lose information." +msgstr "Dikkatli olun, bütün bilgiler kaybolabilir." + +#: etc/inc/shaper.inc:686 etc/inc/shaper.inc:687 etc/inc/shaper.inc:687 +msgid "" +"Adjusts the size, in bytes, of the token bucket regulator. If not specified, " +"heuristics based on the interface bandwidth are used to determine the size." +msgstr "" + +#: etc/inc/shaper.inc:978 etc/inc/shaper.inc:979 etc/inc/shaper.inc:979 +msgid "The priority must be an integer between 1 and 15." +msgstr "Öncelik 1-15 arasında tam bir değer olmalı." + +#: etc/inc/shaper.inc:981 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:982 +#: etc/inc/shaper.inc:2804 etc/inc/shaper.inc:982 etc/inc/shaper.inc:2805 +msgid "Queue limit must be an integer" +msgstr "Kuyruk limiti tamsayı olmalıdır" + +#: etc/inc/shaper.inc:983 etc/inc/shaper.inc:984 etc/inc/shaper.inc:984 +msgid "Queue limit must be positive" +msgstr "Kuyruk limiti pozitif olmalı" + +#: etc/inc/shaper.inc:985 etc/inc/shaper.inc:987 etc/inc/shaper.inc:2804 +#: etc/inc/shaper.inc:2806 etc/inc/shaper.inc:3573 etc/inc/shaper.inc:986 +#: etc/inc/shaper.inc:988 etc/inc/shaper.inc:2808 etc/inc/shaper.inc:3585 +#: etc/inc/shaper.inc:3740 etc/inc/shaper.inc:986 etc/inc/shaper.inc:988 +#: etc/inc/shaper.inc:2807 etc/inc/shaper.inc:2809 etc/inc/shaper.inc:3741 +msgid "Queue names must be alphanumeric and _ or - only." +msgstr "Kuyruk adı harf,rakam, _ ve - karakterlerinden oluşmalıdır." + +#: etc/inc/shaper.inc:989 etc/inc/shaper.inc:990 etc/inc/shaper.inc:991 +msgid "Only one default queue per interface is allowed." +msgstr "Arabirim başına varsayılan olarak sadece bir kuyruğa izin verilir." + +#: etc/inc/shaper.inc:1125 etc/inc/shaper.inc:1126 etc/inc/shaper.inc:1127 +msgid "Enable/Disable queue and its children" +msgstr "Kuyruk ve altkuyrukları Aktif/Pasif" + +#: etc/inc/shaper.inc:1129 etc/inc/shaper.inc:1130 etc/inc/shaper.inc:1131 +msgid "Queue Name" +msgstr "Kuyruk adı" + +#: etc/inc/shaper.inc:1136 etc/inc/shaper.inc:1137 etc/inc/shaper.inc:1138 +msgid "" +"Enter the name of the queue here. Do not use spaces and limit the size to " +"15 characters." +msgstr "" +"Kuyruk adını buraya girin. Alan adı 15 karakter ile sınırlıdır ve alan " +"adında boşluk kullanmayın." + +#: etc/inc/shaper.inc:1139 usr/local/www/interfaces_bridge_edit.php:354 +#: usr/local/www/interfaces_bridge_edit.php:373 +#: usr/local/www/system_gateway_groups.php:122 etc/inc/shaper.inc:1140 +#: usr/local/www/interfaces_bridge_edit.php:363 +#: usr/local/www/interfaces_bridge_edit.php:382 +#: usr/local/www/system_gateway_groups.php:123 +#: usr/local/www/interfaces_bridge_edit.php:364 +#: usr/local/www/interfaces_bridge_edit.php:383 +#: usr/local/www/interfaces_bridge_edit.php:365 +#: usr/local/www/interfaces_bridge_edit.php:384 +#: usr/local/www/system_gateway_groups.php:123 etc/inc/shaper.inc:1141 +msgid "Priority" +msgstr "Öncelik" + +#: etc/inc/shaper.inc:1143 etc/inc/shaper.inc:1144 etc/inc/shaper.inc:1145 +msgid "" +"For hfsc, the range is 0 to 7. The default is 1. Hfsc queues with a higher " +"priority are preferred in the case of overload." +msgstr "" +"hfsc için değer 0 ile 7 arasındadır. Varsayılan değer 1'dir. Hfsc " +"kuyruğunda daha yüksek bir öncelik istenmesi durumunda bu değer " +"yükseltilebilir." + +#: etc/inc/shaper.inc:1146 etc/inc/shaper.inc:1147 etc/inc/shaper.inc:1148 +msgid "Queue limit" +msgstr "Kuyruk limiti" + +#: etc/inc/shaper.inc:1150 etc/inc/shaper.inc:1151 etc/inc/shaper.inc:1152 +msgid "Queue limit in packets per second." +msgstr "Kuyruk Limiti Paket / Sn." + +#: etc/inc/shaper.inc:1153 etc/inc/shaper.inc:1154 etc/inc/shaper.inc:1155 +msgid "Scheduler options" +msgstr "Zamanlayıcı seçenekleri" + +#: etc/inc/shaper.inc:1158 etc/inc/shaper.inc:1161 etc/inc/shaper.inc:1159 +#: etc/inc/shaper.inc:1162 etc/inc/shaper.inc:1160 etc/inc/shaper.inc:1163 +msgid "Default queue" +msgstr "Öntanımlı kuyruk" + +#: etc/inc/shaper.inc:1168 etc/inc/shaper.inc:1169 etc/inc/shaper.inc:1170 +msgid "Random Early Detection" +msgstr "Rasgele Erken Algılanan" + +#: etc/inc/shaper.inc:1173 etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1175 +msgid "Random Early Detection In and Out" +msgstr "Rasgele Erken Algılanan Giriş ve Çıkış" + +#: etc/inc/shaper.inc:1178 etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180 +msgid "Explicit Congestion Notification" +msgstr "Dönüş tıkanıklığının bildirilmesi" + +#: etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180 etc/inc/shaper.inc:1181 +msgid "Select options for this queue" +msgstr "Bu kuyruk için seçeneği işaretleyin" + +#: etc/inc/shaper.inc:1181 etc/inc/shaper.inc:3069 etc/inc/shaper.inc:3501 +#: usr/local/www/load_balancer_virtual_server.php:134 +#: usr/local/www/pkg_mgr_installed.php:94 +#: usr/local/www/firewall_aliases_import.php:140 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:121 +#: usr/local/www/firewall_virtual_ip_edit.php:538 +#: usr/local/www/load_balancer_relay_action.php:143 +#: usr/local/www/services_dyndns.php:103 usr/local/www/services_wol.php:163 +#: usr/local/www/services_wol_edit.php:148 +#: usr/local/www/interfaces_bridge.php:109 +#: usr/local/www/interfaces_bridge_edit.php:273 +#: usr/local/www/interfaces_gif.php:108 +#: usr/local/www/interfaces_gif_edit.php:208 +#: usr/local/www/interfaces_gre.php:109 +#: usr/local/www/interfaces_gre_edit.php:219 +#: usr/local/www/interfaces_groups.php:96 +#: usr/local/www/interfaces_groups_edit.php:259 +#: usr/local/www/firewall_aliases.php:167 +#: usr/local/www/firewall_aliases_edit.php:455 +#: usr/local/www/firewall_aliases_edit.php:591 +#: usr/local/www/firewall_aliases_edit.php:626 +#: usr/local/www/firewall_nat_1to1.php:108 +#: usr/local/www/firewall_nat_1to1_edit.php:440 +#: usr/local/www/firewall_nat_edit.php:769 +#: usr/local/www/firewall_nat_out.php:349 +#: usr/local/www/firewall_nat_out_edit.php:636 +#: usr/local/www/firewall_rules.php:374 +#: usr/local/www/firewall_rules_edit.php:1053 +#: usr/local/www/firewall_schedule.php:98 +#: usr/local/www/firewall_schedule_edit.php:793 +#: usr/local/www/firewall_schedule_edit.php:998 +#: usr/local/www/firewall_virtual_ip.php:187 usr/local/www/interfaces.php:1244 +#: usr/local/www/load_balancer_pool.php:136 +#: usr/local/www/interfaces_vlan.php:110 +#: usr/local/www/interfaces_vlan_edit.php:179 +#: usr/local/www/system_routes.php:129 +#: usr/local/www/system_routes_edit.php:267 +#: usr/local/www/interfaces_lagg.php:114 +#: usr/local/www/interfaces_lagg_edit.php:208 +#: usr/local/www/interfaces_ppps.php:110 +#: usr/local/www/interfaces_ppps_edit.php:467 +#: usr/local/www/interfaces_qinq.php:119 +#: usr/local/www/interfaces_qinq_edit.php:337 +#: usr/local/www/interfaces_wireless.php:108 +#: usr/local/www/interfaces_wireless_edit.php:185 +#: usr/local/www/load_balancer_monitor.php:124 usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:241 +#: usr/local/www/load_balancer_pool_edit.php:196 +#: usr/local/www/load_balancer_virtual_server_edit.php:189 +#: usr/local/www/pkg_mgr.php:118 usr/local/www/firewall_nat.php:203 +#: usr/local/www/diag_ipsec.php:95 +#: usr/local/www/services_captiveportal_ip.php:118 +#: usr/local/www/services_captiveportal_ip_edit.php:208 +#: usr/local/www/services_captiveportal_mac.php:168 +#: usr/local/www/services_captiveportal_mac_edit.php:182 +#: usr/local/www/services_dhcp.php:893 +#: usr/local/www/services_dhcp_edit.php:242 +#: usr/local/www/services_dnsmasq.php:246 +#: usr/local/www/services_dnsmasq.php:313 +#: usr/local/www/services_dnsmasq_edit.php:163 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:417 +#: usr/local/www/load_balancer_relay_protocol.php:137 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:218 +#: usr/local/www/services_captiveportal_hostname.php:123 +#: usr/local/www/services_captiveportal_hostname_edit.php:183 +#: usr/local/www/status_services.php:245 usr/local/www/status_upnp.php:88 +#: usr/local/www/services_dyndns_edit.php:228 +#: usr/local/www/services_igmpproxy.php:98 +#: usr/local/www/services_igmpproxy_edit.php:175 +#: usr/local/www/services_rfc2136.php:80 +#: usr/local/www/services_rfc2136_edit.php:192 +#: usr/local/www/status_gateway_groups.php:76 +#: usr/local/www/status_gateways.php:78 usr/local/www/status_lb_pool.php:134 +#: usr/local/www/status_lb_vs.php:81 +#: usr/local/www/system_advanced_sysctl.php:172 +#: usr/local/www/system_advanced_sysctl.php:243 +#: usr/local/www/system_gateway_groups.php:123 +#: usr/local/www/system_gateway_groups_edit.php:219 +#: usr/local/www/system_gateways.php:156 +#: usr/local/www/system_gateways_edit.php:484 +#: usr/local/www/system_groupmanager.php:275 +#: usr/local/www/system_groupmanager.php:347 +#: usr/local/www/system_groupmanager.php:405 +#: usr/local/www/system_groupmanager_addprivs.php:216 +#: usr/local/www/system_usermanager.php:578 +#: usr/local/www/system_usermanager_addprivs.php:197 +#: usr/local/www/vpn_ipsec_phase1.php:575 +#: usr/local/www/vpn_ipsec_phase2.php:497 +#: usr/local/www/vpn_openvpn_client.php:573 +#: usr/local/www/vpn_openvpn_client.php:863 +#: usr/local/www/vpn_openvpn_csc.php:342 usr/local/www/vpn_openvpn_csc.php:674 +#: usr/local/www/vpn_openvpn_server.php:722 +#: usr/local/www/vpn_openvpn_server.php:1451 +#: usr/local/www/vpn_pppoe_edit.php:444 usr/local/www/firewall_nat_npt.php:107 +#: usr/local/www/firewall_nat_npt_edit.php:261 +#: usr/local/www/services_dhcpv6.php:806 +#: usr/local/www/services_dhcpv6_edit.php:219 +#: usr/local/www/services_captiveportal_zones.php:55 +#: usr/local/www/services_captiveportal_zones_edit.php:106 +#: etc/inc/shaper.inc:1182 etc/inc/shaper.inc:3077 etc/inc/shaper.inc:3513 +#: usr/local/www/system_routes_edit.php:307 usr/local/www/pkg_mgr.php:132 +#: usr/local/www/services_unbound_acls.php:238 +#: usr/local/www/services_unbound_acls.php:292 +#: usr/local/www/services_unbound_acls.php:319 +#: usr/local/www/system_gateway_groups_edit.php:274 +#: usr/local/www/services_dnsmasq.php:334 +#: usr/local/www/services_dyndns_edit.php:358 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/services_dnsmasq_edit.php:218 +#: usr/local/www/services_dnsmasq_edit.php:239 +#: usr/local/www/firewall_nat_1to1_edit.php:447 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/firewall_nat_npt_edit.php:266 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/diag_ipsec.php:106 +#: usr/local/www/load_balancer_relay_action_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:1088 +#: usr/local/www/services_unbound.php:282 +#: usr/local/www/services_unbound.php:349 +#: usr/local/www/system_usermanager.php:576 +#: usr/local/www/services_igmpproxy_edit.php:177 +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:596 +#: usr/local/www/firewall_aliases_edit.php:631 +#: usr/local/www/pkg_mgr_installed.php:114 +#: usr/local/www/firewall_rules.php:378 +#: usr/local/www/load_balancer_virtual_server.php:135 +#: usr/local/www/system_groupmanager_addprivs.php:214 +#: usr/local/www/system_gateways_edit.php:519 +#: usr/local/www/load_balancer_monitor.php:125 +#: usr/local/www/services_dyndns.php:112 +#: usr/local/www/vpn_openvpn_server.php:795 +#: usr/local/www/vpn_openvpn_server.php:1593 +#: usr/local/www/services_dhcp.php:931 +#: usr/local/www/load_balancer_virtual_server_edit.php:163 +#: usr/local/www/interfaces_bridge_edit.php:282 +#: usr/local/www/firewall_aliases.php:170 +#: usr/local/www/vpn_ipsec_phase2.php:523 +#: usr/local/www/firewall_nat_edit.php:776 +#: usr/local/www/services_dhcp_edit.php:251 usr/local/www/interfaces.php:1348 +#: usr/local/www/vpn_openvpn_client.php:578 +#: usr/local/www/vpn_openvpn_client.php:868 +#: usr/local/www/load_balancer_pool_edit.php:204 +#: usr/local/www/firewall_virtual_ip_edit.php:526 +#: usr/local/www/interfaces_gre_edit.php:218 +#: usr/local/www/load_balancer_pool.php:137 +#: usr/local/www/vpn_ipsec_phase1.php:588 +#: usr/local/www/services_dhcpv6.php:901 etc/inc/shaper.inc:3225 +#: etc/inc/shaper.inc:3668 usr/local/www/vpn_pppoe_edit.php:445 +#: usr/local/www/system_routes_edit.php:308 +#: usr/local/www/system_gateway_groups_edit.php:334 +#: usr/local/www/interfaces_vlan_edit.php:180 +#: usr/local/www/services_dnsmasq.php:247 +#: usr/local/www/services_dnsmasq.php:335 +#: usr/local/www/firewall_nat_out.php:360 +#: usr/local/www/system_groupmanager.php:406 +#: usr/local/www/services_dnsmasq_edit.php:219 +#: usr/local/www/services_dnsmasq_edit.php:240 +#: usr/local/www/load_balancer_relay_protocol_edit.php:216 +#: usr/local/www/firewall_nat_1to1_edit.php:445 +#: usr/local/www/services_dhcpv6_edit.php:230 +#: usr/local/www/services_captiveportal_ip.php:116 +#: usr/local/www/firewall_nat_npt_edit.php:265 usr/local/www/vpn_pppoe.php:105 +#: usr/local/www/interfaces_groups.php:97 +#: usr/local/www/services_captiveportal_hostname_edit.php:181 +#: usr/local/www/interfaces_qinq_edit.php:338 +#: usr/local/www/interfaces_gif_edit.php:209 usr/local/www/diag_ipsec.php:107 +#: usr/local/www/firewall_nat.php:208 usr/local/www/interfaces_qinq.php:120 +#: usr/local/www/load_balancer_relay_action_edit.php:414 +#: usr/local/www/interfaces_ppps.php:111 +#: usr/local/www/load_balancer_monitor_edit.php:239 +#: usr/local/www/services_captiveportal_mac.php:166 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151 +#: usr/local/www/services_captiveportal_mac_edit.php:180 +#: usr/local/www/firewall_schedule_edit.php:792 +#: usr/local/www/firewall_schedule_edit.php:997 +#: usr/local/www/interfaces_bridge.php:110 +#: usr/local/www/interfaces_ppps_edit.php:468 +#: usr/local/www/interfaces_lagg.php:115 +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/firewall_aliases_edit.php:599 +#: usr/local/www/firewall_aliases_edit.php:634 +#: usr/local/www/interfaces_lagg_edit.php:209 +#: usr/local/www/vpn_openvpn_csc.php:341 usr/local/www/vpn_openvpn_csc.php:673 +#: usr/local/www/services_captiveportal_hostname.php:121 +#: usr/local/www/firewall_rules.php:371 usr/local/www/interfaces_gre.php:110 +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/interfaces_wireless.php:109 +#: usr/local/www/system_gateway_groups.php:124 +#: usr/local/www/status_services.php:241 +#: usr/local/www/system_gateways_edit.php:619 +#: usr/local/www/status_gateways.php:79 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/services_captiveportal_ip_edit.php:206 +#: usr/local/www/load_balancer_relay_protocol.php:135 +#: usr/local/www/vpn_openvpn_server.php:823 +#: usr/local/www/vpn_openvpn_server.php:1634 usr/local/www/status_upnp.php:89 +#: usr/local/www/services_dhcp.php:1135 +#: usr/local/www/load_balancer_virtual_server_edit.php:161 +#: usr/local/www/interfaces_bridge_edit.php:283 +#: usr/local/www/firewall_aliases.php:190 +#: usr/local/www/load_balancer_relay_action.php:141 +#: usr/local/www/interfaces_groups_edit.php:260 +#: usr/local/www/services_captiveportal_zones_edit.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:625 +#: usr/local/www/interfaces_vlan.php:111 +#: usr/local/www/firewall_nat_edit.php:775 +#: usr/local/www/services_dhcp_edit.php:253 usr/local/www/interfaces.php:1336 +#: usr/local/www/services_captiveportal_zones.php:56 +#: usr/local/www/vpn_openvpn_client.php:596 +#: usr/local/www/vpn_openvpn_client.php:921 +#: usr/local/www/status_gateway_groups.php:77 +#: usr/local/www/load_balancer_pool_edit.php:202 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/interfaces_gif.php:109 +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/firewall_virtual_ip.php:191 +#: usr/local/www/vpn_ipsec_phase1.php:587 +#: usr/local/www/services_dhcpv6.php:832 usr/local/www/services_rfc2136.php:81 +#: usr/local/www/status_services.php:239 +#: usr/local/www/system_gateways_edit.php:623 +#: usr/local/www/services_captiveportal_ip_edit.php:200 +#: usr/local/www/vpn_pppoe.php:106 +#: usr/local/www/interfaces_wireless_edit.php:187 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:216 +#: usr/local/www/system_groupmanager.php:275 +#: usr/local/www/system_groupmanager.php:347 +#: usr/local/www/system_groupmanager.php:406 +#: usr/local/www/services_captiveportal_zones_edit.php:105 +#: usr/local/www/interfaces_gre_edit.php:219 +#: usr/local/www/vpn_openvpn_client.php:615 +#: usr/local/www/vpn_openvpn_client.php:940 +#: usr/local/www/firewall_schedule.php:98 +#: usr/local/www/system_usermanager_addprivs.php:197 +#: usr/local/www/services_dhcpv6_edit.php:233 +#: usr/local/www/services_dyndns_edit.php:362 +#: usr/local/www/services_wol.php:163 +#: usr/local/www/firewall_rules_edit.php:1103 +#: usr/local/www/load_balancer_virtual_server_edit.php:161 +#: usr/local/www/services_captiveportal_ip.php:116 +#: usr/local/www/interfaces_qinq.php:123 +#: usr/local/www/interfaces_vlan_edit.php:183 +#: usr/local/www/interfaces_ppps_edit.php:474 +#: usr/local/www/firewall_virtual_ip.php:205 +#: usr/local/www/vpn_openvpn_csc.php:341 usr/local/www/vpn_openvpn_csc.php:673 +#: usr/local/www/interfaces_lagg_edit.php:222 +#: usr/local/www/firewall_schedule_edit.php:792 +#: usr/local/www/firewall_schedule_edit.php:997 +#: usr/local/www/firewall_nat_edit.php:770 +#: usr/local/www/interfaces_lagg.php:119 usr/local/www/interfaces_vlan.php:117 +#: usr/local/www/services_captiveportal_hostname_edit.php:183 +#: usr/local/www/interfaces_gif_edit.php:220 +#: usr/local/www/firewall_aliases.php:190 +#: usr/local/www/services_dhcp_edit.php:381 +#: usr/local/www/services_wol_edit.php:148 +#: usr/local/www/firewall_virtual_ip_edit.php:463 +#: usr/local/www/load_balancer_relay_protocol.php:135 +#: usr/local/www/diag_ipsec.php:109 usr/local/www/pkg_mgr_installed.php:114 +#: usr/local/www/interfaces_bridge.php:116 +#: usr/local/www/firewall_aliases_import.php:140 +#: usr/local/www/interfaces_wireless.php:111 +#: usr/local/www/system_routes.php:133 +#: usr/local/www/load_balancer_relay_action.php:141 +#: usr/local/www/vpn_pppoe_edit.php:448 usr/local/www/services_dhcp.php:792 +#: usr/local/www/services_dhcp.php:1154 usr/local/www/firewall_nat.php:208 +#: usr/local/www/status_lb_pool.php:134 usr/local/www/interfaces_groups.php:97 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:414 +#: usr/local/www/pkg_mgr.php:132 usr/local/www/system_routes_edit.php:308 +#: usr/local/www/services_captiveportal_mac_edit.php:193 +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/services_captiveportal_hostname.php:121 +#: usr/local/www/services_dhcpv6.php:853 +#: usr/local/www/firewall_nat_out.php:360 +#: usr/local/www/interfaces_ppps.php:111 usr/local/www/firewall_rules.php:371 +#: usr/local/www/firewall_nat_npt.php:107 +#: usr/local/www/firewall_nat_1to1.php:108 +#: usr/local/www/firewall_nat_npt_edit.php:265 +#: usr/local/www/interfaces_groups_edit.php:260 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:239 +#: usr/local/www/system_gateway_groups_edit.php:334 +#: usr/local/www/services_captiveportal_zones.php:56 +#: usr/local/www/system_groupmanager_addprivs.php:214 +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/firewall_aliases_edit.php:599 +#: usr/local/www/firewall_aliases_edit.php:634 +#: usr/local/www/interfaces_bridge_edit.php:284 +#: usr/local/www/services_igmpproxy_edit.php:177 +#: usr/local/www/services_igmpproxy.php:98 +#: usr/local/www/firewall_nat_1to1_edit.php:445 +#: usr/local/www/status_gateway_groups.php:77 +#: usr/local/www/services_dnsmasq_edit.php:219 +#: usr/local/www/services_dnsmasq_edit.php:240 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/services_rfc2136_edit.php:192 +#: usr/local/www/services_dnsmasq.php:272 +#: usr/local/www/services_dnsmasq.php:360 +#: usr/local/www/services_captiveportal_mac.php:176 +#: usr/local/www/vpn_ipsec_phase1.php:608 usr/local/www/interfaces_gre.php:114 +#: usr/local/www/system_usermanager.php:576 +#: usr/local/www/system_gateways.php:156 +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/load_balancer_pool_edit.php:202 +#: usr/local/www/status_lb_vs.php:81 +#: usr/local/www/firewall_nat_out_edit.php:651 +#: usr/local/www/vpn_openvpn_server.php:850 +#: usr/local/www/vpn_openvpn_server.php:1686 +#: usr/local/www/vpn_ipsec_phase2.php:646 usr/local/www/status_gateways.php:79 +#: usr/local/www/services_dyndns.php:93 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151 +#: usr/local/www/interfaces_gif.php:113 +#: usr/local/www/interfaces_qinq_edit.php:341 +#: usr/local/www/system_gateway_groups.php:124 +#: usr/local/www/status_upnp.php:89 +#: usr/local/www/system_advanced_sysctl.php:172 +#: usr/local/www/system_advanced_sysctl.php:243 +#: usr/local/www/interfaces.php:1349 etc/inc/shaper.inc:1183 +#: etc/inc/shaper.inc:3226 etc/inc/shaper.inc:3669 +msgid "Description" +msgstr "Açıklama" + +#: etc/inc/shaper.inc:1207 etc/inc/shaper.inc:1209 etc/inc/shaper.inc:1210 +msgid "Bandwidth:" +msgstr "Bant Genişliği:" + +#: etc/inc/shaper.inc:1212 etc/inc/shaper.inc:1214 etc/inc/shaper.inc:1215 +msgid "Priority: on" +msgstr "Öncelik: Açık" + +#: etc/inc/shaper.inc:1215 etc/inc/shaper.inc:1217 etc/inc/shaper.inc:1218 +msgid "Default: on" +msgstr "Varsayılan: Açık" + +#: etc/inc/shaper.inc:1222 etc/inc/shaper.inc:1223 etc/inc/shaper.inc:1224 +#: etc/inc/shaper.inc:1225 etc/inc/shaper.inc:1225 etc/inc/shaper.inc:1226 +msgid "Delete queue from interface" +msgstr "Arabirimden kuyruğu silin" + +#: etc/inc/shaper.inc:1559 etc/inc/shaper.inc:2207 etc/inc/shaper.inc:2483 +#: etc/inc/shaper.inc:1561 etc/inc/shaper.inc:2209 etc/inc/shaper.inc:2485 +#: etc/inc/shaper.inc:1562 etc/inc/shaper.inc:2210 etc/inc/shaper.inc:2486 +msgid "Bandwidth in percentage should be between 1 and 100 bounds." +msgstr "Bantgenişliği yüzdesi 1 ile 100 arasında olmalıdır." + +#: etc/inc/shaper.inc:1576 etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1579 +msgid "upperlimit service curve defined but missing (d) value" +msgstr "Üstlimit servis eğrisi tanımlı ama (d) değeri eksik" + +#: etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1581 +msgid "" +"upperlimit service curve defined but missing initial bandwidth (m1) value" +msgstr "" +"Üstlimit servis eğrisi tanımlı ama başlangıç bant genişliği (m1) değeri " +"eksik" + +#: etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1583 +msgid "upperlimit m1 value needs to be Kb, Mb, Gb, or %" +msgstr "Üstlimit m1 değeri Kb, Mb, Gb, veya % olmalı" + +#: etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1585 +msgid "upperlimit d value needs to be numeric" +msgstr "Üstlimit d değeri rakam olmalı" + +#: etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1586 etc/inc/shaper.inc:1587 +msgid "upperlimit m2 value needs to be Kb, Mb, Gb, or %" +msgstr "Üstlimit m2 değeri Kb, Mb, Gb, veya % olmalı" + +#: etc/inc/shaper.inc:1598 etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1601 +msgid "linkshare service curve defined but missing (d) value" +msgstr "Bağlantı paylaşımı servis eğrisi tanımlı ama (d) değeri eksik" + +#: etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1603 +msgid "" +"linkshare service curve defined but missing initial bandwidth (m1) value" +msgstr "" +"Bağlantı paylaşımı servis eğrisi tanımlı ama başlangıç bant genişliği (m1) " +"değeri eksik" + +#: etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1605 +msgid "linkshare m1 value needs to be Kb, Mb, Gb, or %" +msgstr "Bağlantı paylaşımı m1 değeri Kb, Mb, Gb, veya % olmalı" + +#: etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1607 +msgid "linkshare d value needs to be numeric" +msgstr "Bağlantı paylaşımı d değeri numara olmalı" + +#: etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1609 +msgid "linkshare m2 value needs to be Kb, Mb, Gb, or %" +msgstr "Bağlantı paylaşımı m2 değeri Kb, Mb, Gb, veya % olmalı" + +#: etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1611 +msgid "realtime service curve defined but missing (d) value" +msgstr "Gerçek zamanlı servis eğrisi tanımlı ama (d) değeri eksik" + +#: etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1612 etc/inc/shaper.inc:1613 +msgid "realtime service curve defined but missing initial bandwidth (m1) value" +msgstr "" +"Gerçek zamanlı servis eğrisi tanımlı ama başlangıç bant genişliği (m1) " +"değeri eksik" + +#: etc/inc/shaper.inc:1625 etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1628 +msgid "realtime m1 value needs to be Kb, Mb, Gb, or %" +msgstr "Gerçek zaman m1 değeri Kb, Mb, Gb, veya % olmalı" + +#: etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1630 +msgid "realtime d value needs to be numeric" +msgstr "Gerçek zaman d değeri rakam olmalı" + +#: etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1631 etc/inc/shaper.inc:1632 +msgid "realtime m2 value needs to be Kb, Mb, Gb, or %" +msgstr "Gerçek zaman m2 değeri Kb, Mb, Gb, veya % olmalı" + +#: etc/inc/shaper.inc:1858 etc/inc/shaper.inc:2336 etc/inc/shaper.inc:2602 +#: etc/inc/shaper.inc:3039 etc/inc/shaper.inc:1860 etc/inc/shaper.inc:2338 +#: etc/inc/shaper.inc:2604 etc/inc/shaper.inc:3047 etc/inc/shaper.inc:1861 +#: etc/inc/shaper.inc:2339 etc/inc/shaper.inc:2605 +msgid "Gbit/s" +msgstr "Gbit/sn" + +#: etc/inc/shaper.inc:1862 etc/inc/shaper.inc:2340 etc/inc/shaper.inc:2606 +#: etc/inc/shaper.inc:3035 etc/inc/shaper.inc:1864 etc/inc/shaper.inc:2342 +#: etc/inc/shaper.inc:2608 etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1865 +#: etc/inc/shaper.inc:2343 etc/inc/shaper.inc:2609 +msgid "Mbit/s" +msgstr "Mbit/sn" + +#: etc/inc/shaper.inc:1866 etc/inc/shaper.inc:2344 etc/inc/shaper.inc:2610 +#: etc/inc/shaper.inc:3031 usr/local/www/services_captiveportal.php:560 +#: usr/local/www/services_captiveportal.php:564 etc/inc/shaper.inc:1868 +#: etc/inc/shaper.inc:2346 etc/inc/shaper.inc:2612 etc/inc/shaper.inc:3039 +#: usr/local/www/services_captiveportal.php:565 +#: usr/local/www/services_captiveportal.php:569 +#: usr/local/www/services_captiveportal.php:563 +#: usr/local/www/services_captiveportal.php:567 +#: usr/local/www/services_captiveportal.php:565 +#: usr/local/www/services_captiveportal.php:569 etc/inc/shaper.inc:1869 +#: etc/inc/shaper.inc:2347 etc/inc/shaper.inc:2613 +msgid "Kbit/s" +msgstr "Kbit/sn" + +#: etc/inc/shaper.inc:1870 etc/inc/shaper.inc:2348 etc/inc/shaper.inc:2614 +#: etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1872 etc/inc/shaper.inc:2350 +#: etc/inc/shaper.inc:2616 etc/inc/shaper.inc:3051 etc/inc/shaper.inc:1873 +#: etc/inc/shaper.inc:2351 etc/inc/shaper.inc:2617 +msgid "Bit/s" +msgstr "Bit/sn" + +#: etc/inc/shaper.inc:1876 etc/inc/shaper.inc:2354 etc/inc/shaper.inc:2620 +#: etc/inc/shaper.inc:1878 etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 +#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:2357 etc/inc/shaper.inc:2623 +msgid "Choose the amount of bandwidth for this queue" +msgstr "Bu kuyruğa bant genişliği için miktar seçiniz" + +#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:1881 etc/inc/shaper.inc:1882 +msgid "Service Curve (sc)" +msgstr "Hizmet eğrisi (he)" + +#: etc/inc/shaper.inc:1886 etc/inc/shaper.inc:1888 etc/inc/shaper.inc:1889 +msgid "Upperlimit:" +msgstr "Üstlimit:" + +#: etc/inc/shaper.inc:1901 etc/inc/shaper.inc:1903 etc/inc/shaper.inc:1904 +msgid "The maximum allowed bandwidth for the queue." +msgstr "Kuyruk için en fazla bant genişliğine izin verildi." + +#: etc/inc/shaper.inc:1905 etc/inc/shaper.inc:1907 etc/inc/shaper.inc:1908 +msgid "Real time:" +msgstr "Gerçek zaman:" + +#: etc/inc/shaper.inc:1920 etc/inc/shaper.inc:1922 etc/inc/shaper.inc:1923 +msgid "The minimum required bandwidth for the queue." +msgstr "Kuyruk için en az bant genişliği gerekiyor." + +#: etc/inc/shaper.inc:1924 etc/inc/shaper.inc:1926 etc/inc/shaper.inc:1927 +msgid "Link share:" +msgstr "Bağlantı paylaş:" + +#: etc/inc/shaper.inc:1939 etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1942 +msgid "The bandwidth share of a backlogged queue - this overrides priority." +msgstr "" +"Arka giriş kuyruğundaki bantgenişliği paylaşımı - önceliği geçersiz kılar." + +#: etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1943 etc/inc/shaper.inc:1944 +msgid "" +"The format for service curve specifications is (m1, d, m2). m2 controls the " +"bandwidth assigned to the queue. m1 and d are optional and can be used to " +"control the initial bandwidth assignment. For the first d milliseconds the " +"queue gets the bandwidth given as m1, afterwards the value given in m2." +msgstr "" +"Servis eğrisi özelliklerinin formatı (m1, d, m2) m2 kuyruğa atanan (sıraya " +"atanan) bant genişliğini kontrol eder. m1 ve d isteğe bağlı ve bant " +"genişliği atanmasının kontrolünde kullanılır. d ilk milisaniye de " +"kuyruktaki bant genişliğine m1, sonra ki değere m2 verir." + +#: etc/inc/shaper.inc:2190 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2193 +msgid "Priority must be an integer between 1 and 7." +msgstr "Öncelik değeri 1 ile 7 arasında tamsayı bir değer olmalıdır." + +#: etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 etc/inc/shaper.inc:2358 +#: etc/inc/shaper.inc:2624 etc/inc/shaper.inc:2359 etc/inc/shaper.inc:2625 +msgid "Scheduler specific options" +msgstr "Belirli seçenek(ler) zamanlayıcı" + +#: etc/inc/shaper.inc:2360 etc/inc/shaper.inc:2362 etc/inc/shaper.inc:2363 +msgid "Borrow from other queues when available" +msgstr "Kullanılabilir olduğunda diğer kuyruklardan yararlan/ödünç al" + +#: etc/inc/shaper.inc:2465 etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2468 +msgid "Priority must be an integer between 1 and 255." +msgstr "Öncelik değer 1 ile 255 arasında bir tamsayı olmalıdır." + +#: etc/inc/shaper.inc:2628 etc/inc/shaper.inc:2630 etc/inc/shaper.inc:2631 +msgid "Number of buckets available." +msgstr "Kalan bucket(ler) sayısı." + +#: etc/inc/shaper.inc:2633 etc/inc/shaper.inc:2635 etc/inc/shaper.inc:2636 +msgid "Bandwidth limit for hosts to not saturate link." +msgstr "Bant genişliği sınırı, ana bağlantının limitini etkilemez." + +#: etc/inc/shaper.inc:2797 etc/inc/shaper.inc:2799 etc/inc/shaper.inc:2800 +msgid "Plr must be an integer between 1 and 100." +msgstr "Plr 1 ile 100 tamsayısı arasında olmalıdır." + +#: etc/inc/shaper.inc:2800 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:2803 +msgid "Buckets must be an integer between 16 and 65535." +msgstr "Bucket(ler) 16 ile 65535 tamsayısı arasında olmalıdır." + +#: etc/inc/shaper.inc:2902 etc/inc/shaper.inc:2906 etc/inc/shaper.inc:2921 +#: etc/inc/shaper.inc:2922 +msgid "Delay must be an integer." +msgstr "Gecikme tamsayı olmalıdır." + +#: etc/inc/shaper.inc:3009 usr/local/www/services_snmp.php:276 +#: usr/local/www/services_snmp.php:336 usr/local/www/interfaces.php:1234 +#: usr/local/www/system_firmware.php:131 +#: usr/local/www/services_dnsmasq.php:154 usr/local/www/diag_routes.php:60 +#: usr/local/www/services_rfc2136_edit.php:128 +#: usr/local/www/vpn_ipsec_phase1.php:813 etc/inc/shaper.inc:3013 +#: usr/local/www/services_unbound.php:150 usr/local/www/interfaces.php:1338 +#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:334 +#: usr/local/www/vpn_ipsec_phase1.php:826 etc/inc/shaper.inc:3143 +#: usr/local/www/services_dnsmasq.php:155 usr/local/www/diag_routes.php:61 +#: usr/local/www/system_firmware.php:138 usr/local/www/interfaces.php:1326 +#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:335 +#: usr/local/www/vpn_ipsec_phase1.php:823 +#: usr/local/www/system_firmware.php:133 usr/local/www/diag_routes.php:61 +#: usr/local/www/services_rfc2136_edit.php:128 +#: usr/local/www/services_dnsmasq.php:159 +#: usr/local/www/vpn_ipsec_phase1.php:844 usr/local/www/services_snmp.php:285 +#: usr/local/www/services_snmp.php:345 usr/local/www/interfaces.php:1339 +#: etc/inc/shaper.inc:3144 +msgid "Enable" +msgstr "Etkinleştir" + +#: etc/inc/shaper.inc:3014 etc/inc/shaper.inc:3018 etc/inc/shaper.inc:3148 +#: etc/inc/shaper.inc:3149 +msgid "Enable limiter and its children" +msgstr "Limitleyici ve Alt Öğeleri Aktif" + +#: etc/inc/shaper.inc:3046 etc/inc/shaper.inc:3283 etc/inc/shaper.inc:3054 +#: etc/inc/shaper.inc:3295 etc/inc/shaper.inc:3202 etc/inc/shaper.inc:3450 +#: etc/inc/shaper.inc:3203 etc/inc/shaper.inc:3451 +msgid "Mask" +msgstr "Maske" + +#: etc/inc/shaper.inc:3056 etc/inc/shaper.inc:3293 etc/inc/shaper.inc:3064 +#: etc/inc/shaper.inc:3305 etc/inc/shaper.inc:3212 etc/inc/shaper.inc:3460 +#: etc/inc/shaper.inc:3213 etc/inc/shaper.inc:3461 +msgid "Source addresses" +msgstr "Kaynak adres" + +#: etc/inc/shaper.inc:3060 etc/inc/shaper.inc:3297 etc/inc/shaper.inc:3068 +#: etc/inc/shaper.inc:3309 etc/inc/shaper.inc:3216 etc/inc/shaper.inc:3464 +#: etc/inc/shaper.inc:3217 etc/inc/shaper.inc:3465 +msgid "Destination addresses" +msgstr "Hedef adres" + +#: etc/inc/shaper.inc:3063 etc/inc/shaper.inc:3300 etc/inc/shaper.inc:3071 +#: etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3219 etc/inc/shaper.inc:3467 +#: etc/inc/shaper.inc:3220 etc/inc/shaper.inc:3468 +msgid "" +"If 'source' or 'destination' is chosen, \n" +"a dynamic pipe with the bandwidth, delay, packet loss and queue size given " +"above will \n" +"be created for each source/destination IP address encountered, \n" +"respectively. This makes it possible to easily specify bandwidth \n" +"limits per host." +msgstr "" +"'kaynak' veya 'hedef' seçilmişse, \n" +"sırası ile karşılaşılan her kaynak / varış yeri ip adresi için yukarıda " +"belirtilen \n" +"bant genişliği, gecikme, paket kaybı ve kuyruk hacmine sahip dinamik bir " +"boru oluşturulacaktır. \n" +"Bu, her ana sistem için bant genişliği sınırının kolayca belirtilmesini " +"mümkün kılacaktır." + +#: etc/inc/shaper.inc:3075 etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3507 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:124 +#: usr/local/www/firewall_virtual_ip_edit.php:541 +#: usr/local/www/services_wol_edit.php:151 +#: usr/local/www/interfaces_gif_edit.php:211 +#: usr/local/www/interfaces_gre_edit.php:222 +#: usr/local/www/interfaces_groups_edit.php:264 +#: usr/local/www/firewall_aliases_edit.php:596 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +#: usr/local/www/firewall_nat_edit.php:772 +#: usr/local/www/firewall_nat_out_edit.php:639 +#: usr/local/www/firewall_schedule_edit.php:796 +#: usr/local/www/firewall_schedule_edit.php:970 +#: usr/local/www/interfaces_vlan_edit.php:182 +#: usr/local/www/system_routes_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:342 +#: usr/local/www/interfaces_wireless_edit.php:188 +#: usr/local/www/services_dhcp_edit.php:245 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_igmpproxy_edit.php:180 +#: usr/local/www/system_gateway_groups_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:264 +#: usr/local/www/services_dhcpv6_edit.php:222 etc/inc/shaper.inc:3083 +#: etc/inc/shaper.inc:3324 etc/inc/shaper.inc:3519 +#: usr/local/www/system_routes_edit.php:310 +#: usr/local/www/system_gateway_groups_edit.php:278 +#: usr/local/www/services_dnsmasq_edit.php:221 +#: usr/local/www/firewall_nat_1to1_edit.php:450 +#: usr/local/www/services_dhcpv6_edit.php:231 +#: usr/local/www/firewall_nat_npt_edit.php:269 +#: usr/local/www/firewall_nat_out_edit.php:652 +#: usr/local/www/services_igmpproxy_edit.php:182 +#: usr/local/www/firewall_aliases_edit.php:601 +#: usr/local/www/firewall_nat_edit.php:779 +#: usr/local/www/services_dhcp_edit.php:254 +#: usr/local/www/firewall_virtual_ip_edit.php:529 +#: usr/local/www/interfaces_gre_edit.php:221 etc/inc/shaper.inc:3231 +#: etc/inc/shaper.inc:3479 etc/inc/shaper.inc:3674 +#: usr/local/www/system_routes_edit.php:311 +#: usr/local/www/system_gateway_groups_edit.php:338 +#: usr/local/www/interfaces_vlan_edit.php:183 +#: usr/local/www/services_dnsmasq_edit.php:222 +#: usr/local/www/firewall_nat_1to1_edit.php:448 +#: usr/local/www/services_dhcpv6_edit.php:233 +#: usr/local/www/firewall_nat_npt_edit.php:268 +#: usr/local/www/interfaces_qinq_edit.php:343 +#: usr/local/www/interfaces_gif_edit.php:212 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:154 +#: usr/local/www/firewall_schedule_edit.php:795 +#: usr/local/www/firewall_schedule_edit.php:969 +#: usr/local/www/firewall_aliases_edit.php:604 +#: usr/local/www/interfaces_groups_edit.php:265 +#: usr/local/www/firewall_nat_edit.php:778 +#: usr/local/www/services_dhcp_edit.php:256 +#: usr/local/www/firewall_virtual_ip_edit.php:474 +#: usr/local/www/interfaces_wireless_edit.php:190 +#: usr/local/www/interfaces_gre_edit.php:222 +#: usr/local/www/services_dhcpv6_edit.php:236 +#: usr/local/www/interfaces_vlan_edit.php:186 +#: usr/local/www/firewall_schedule_edit.php:795 +#: usr/local/www/firewall_schedule_edit.php:969 +#: usr/local/www/firewall_nat_edit.php:773 +#: usr/local/www/interfaces_gif_edit.php:223 +#: usr/local/www/services_dhcp_edit.php:384 +#: usr/local/www/services_wol_edit.php:151 +#: usr/local/www/firewall_virtual_ip_edit.php:466 +#: usr/local/www/system_routes_edit.php:311 +#: usr/local/www/firewall_nat_npt_edit.php:268 +#: usr/local/www/interfaces_groups_edit.php:265 +#: usr/local/www/system_gateway_groups_edit.php:338 +#: usr/local/www/firewall_aliases_edit.php:604 +#: usr/local/www/services_igmpproxy_edit.php:182 +#: usr/local/www/firewall_nat_1to1_edit.php:448 +#: usr/local/www/services_dnsmasq_edit.php:222 +#: usr/local/www/firewall_nat_out_edit.php:654 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:154 +#: usr/local/www/interfaces_qinq_edit.php:346 etc/inc/shaper.inc:3232 +#: etc/inc/shaper.inc:3480 etc/inc/shaper.inc:3675 +msgid "You may enter a description here for your reference (not parsed)." +msgstr "" +"Bu alana kendiniz için herhangi bir açıklama girebilirsiniz, (sistem dikkate " +"almayacaktır)." + +#: etc/inc/shaper.inc:3081 etc/inc/shaper.inc:3318 +#: usr/local/www/interfaces_bridge_edit.php:281 +#: usr/local/www/interfaces_ppps_edit.php:738 etc/inc/shaper.inc:3089 +#: etc/inc/shaper.inc:3330 usr/local/www/interfaces_bridge_edit.php:290 +#: etc/inc/shaper.inc:3237 etc/inc/shaper.inc:3485 +#: usr/local/www/interfaces_ppps_edit.php:739 +#: usr/local/www/interfaces_bridge_edit.php:291 +#: usr/local/www/interfaces_ppps_edit.php:745 +#: usr/local/www/interfaces_bridge_edit.php:292 etc/inc/shaper.inc:3238 +#: etc/inc/shaper.inc:3486 +msgid "Show advanced options" +msgstr "Gelişmiş seçenekleri göster" + +#: etc/inc/shaper.inc:3085 etc/inc/shaper.inc:3093 +#: usr/local/www/status_ntpd.php:115 etc/inc/shaper.inc:3241 +#: usr/local/www/status_ntpd.php:131 usr/local/www/status_ntpd.php:131 +#: etc/inc/shaper.inc:3242 +msgid "Delay" +msgstr "Gecikme" + +#: etc/inc/shaper.inc:3089 etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3245 +#: etc/inc/shaper.inc:3246 +msgid "" +"Hint: in most cases, you should specify 0 here (or leave the field empty)" +msgstr "İpucu: birçok durumda buraya 0 atayın (ya da boş bırakın)" + +#: etc/inc/shaper.inc:3093 etc/inc/shaper.inc:3329 etc/inc/shaper.inc:3101 +#: etc/inc/shaper.inc:3341 etc/inc/shaper.inc:3249 etc/inc/shaper.inc:3496 +#: etc/inc/shaper.inc:3250 etc/inc/shaper.inc:3497 +msgid "Packet loss rate" +msgstr "Paket kayıp oranı" + +#: etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3333 etc/inc/shaper.inc:3105 +#: etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3253 etc/inc/shaper.inc:3500 +#: etc/inc/shaper.inc:3254 etc/inc/shaper.inc:3501 +msgid "" +"Hint: in most cases, you should specify 0 here (or leave the field empty). A " +"value of 0.001 means one packet in 1000 gets dropped" +msgstr "" +"İpucu: birçok durumda buraya 0 atayın (ya da boş bırakın). 0.0001 gibi bir " +"değerin anlamı 1000 düşürülecek" + +#: etc/inc/shaper.inc:3102 etc/inc/shaper.inc:3338 etc/inc/shaper.inc:3110 +#: etc/inc/shaper.inc:3350 etc/inc/shaper.inc:3258 etc/inc/shaper.inc:3505 +#: etc/inc/shaper.inc:3259 etc/inc/shaper.inc:3506 +msgid "Queue Size" +msgstr "Kuyruk boyutu" + +#: etc/inc/shaper.inc:3107 etc/inc/shaper.inc:3343 etc/inc/shaper.inc:3115 +#: etc/inc/shaper.inc:3355 etc/inc/shaper.inc:3263 etc/inc/shaper.inc:3510 +#: etc/inc/shaper.inc:3264 etc/inc/shaper.inc:3511 +msgid "" +"Hint: in most cases, you should leave the field empty. All packets in this " +"pipe are placed into a fixed-size queue first, then they are delayed by " +"value specified in the Delay field, and then they are delivered to their " +"destination." +msgstr "" +"İpucu: Çoğu zaman bu alanı boş bırakmanız gerekir. Bu geçiş hattındaki tüm " +"paketler ilk olarak sabit boyutlu olarak sıraya yerleştirilir, geriye kalan " +"paketler ise gecikme alanında belirtilen değere göre bekletilir ve hedef " +"adrese teslim edilir." + +#: etc/inc/shaper.inc:3113 etc/inc/shaper.inc:3349 etc/inc/shaper.inc:3121 +#: etc/inc/shaper.inc:3361 etc/inc/shaper.inc:3269 etc/inc/shaper.inc:3516 +#: etc/inc/shaper.inc:3270 etc/inc/shaper.inc:3517 +msgid "Bucket Size" +msgstr "Bucket Boyutu" + +#: etc/inc/shaper.inc:3118 etc/inc/shaper.inc:3354 etc/inc/shaper.inc:3126 +#: etc/inc/shaper.inc:3366 etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3521 +#: etc/inc/shaper.inc:3275 etc/inc/shaper.inc:3522 +msgid "" +"Hint: in most cases, you should leave the field empty. It increases the hash " +"size set." +msgstr "" +"İpucu: çoğu durumda bu alan boş bırakılabilinir. Hash ayar boyutunu artırır." + +#: etc/inc/shaper.inc:3176 etc/inc/shaper.inc:3184 etc/inc/shaper.inc:3339 +#: etc/inc/shaper.inc:3340 +msgid "Weight must be an integer between 1 and 100." +msgstr "Ağırlık 1 ile 100 tamsayı aralığında olmalıdır." + +#: etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3282 etc/inc/shaper.inc:3437 +#: etc/inc/shaper.inc:3438 +msgid "Enable/Disable queue" +msgstr "Kuyruğu Etkinleştir/Kapat" + +#: etc/inc/shaper.inc:3289 usr/local/www/firewall_rules.php:760 +#: usr/local/www/firewall_rules_edit.php:1224 +#: usr/local/www/firewall_rules_edit.php:1231 +#: usr/local/www/diag_system_pftop.php:107 +#: usr/local/www/interfaces_lagg_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:234 +#: usr/local/www/vpn_openvpn_client.php:519 etc/inc/shaper.inc:3301 +#: usr/local/www/firewall_rules_edit.php:1259 +#: usr/local/www/firewall_rules_edit.php:1266 +#: usr/local/www/firewall_rules.php:757 +#: usr/local/www/load_balancer_virtual_server_edit.php:223 +#: usr/local/www/vpn_openvpn_client.php:524 etc/inc/shaper.inc:3456 +#: usr/local/www/vpn_ipsec_mobile.php:403 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/firewall_rules.php:750 +#: usr/local/www/load_balancer_virtual_server_edit.php:221 +#: usr/local/www/vpn_openvpn_client.php:542 +#: usr/local/www/vpn_openvpn_client.php:561 +#: usr/local/www/firewall_rules_edit.php:1274 +#: usr/local/www/firewall_rules_edit.php:1281 +#: usr/local/www/load_balancer_virtual_server_edit.php:221 +#: usr/local/www/interfaces_lagg_edit.php:215 +#: usr/local/www/firewall_rules.php:750 usr/local/www/vpn_ipsec_mobile.php:403 +#: etc/inc/shaper.inc:3457 +msgid "none" +msgstr "Hiçbiri" + +#: etc/inc/shaper.inc:3321 usr/local/www/system_gateways_edit.php:424 +#: etc/inc/shaper.inc:3333 usr/local/www/system_gateways_edit.php:445 +#: etc/inc/shaper.inc:3488 usr/local/www/system_gateways_edit.php:551 +#: usr/local/www/system_gateways_edit.php:555 etc/inc/shaper.inc:3489 +msgid "Weight" +msgstr "Ağırlık" + +#: etc/inc/shaper.inc:3325 etc/inc/shaper.inc:3337 etc/inc/shaper.inc:3492 +#: etc/inc/shaper.inc:3493 +msgid "" +"Hint: For queues under the same parent this specifies the share that a queue " +"gets(values range from 1 to 100, you can leave it blank otherwise)" +msgstr "" + +#: etc/inc/shaper.inc:3353 etc/inc/shaper.inc:3365 etc/inc/shaper.inc:3520 +#: etc/inc/shaper.inc:3521 +msgid "slots" +msgstr "yuvalar" + +#: etc/inc/shaper.inc:3494 etc/inc/shaper.inc:3506 etc/inc/shaper.inc:3661 +#: etc/inc/shaper.inc:3662 +msgid "Enable/Disable layer7 Container" +msgstr "Layer7 Barındırıcı Etkinleştir/Kapat" + +#: etc/inc/shaper.inc:3744 etc/inc/shaper.inc:3756 etc/inc/shaper.inc:3911 +#: etc/inc/shaper.inc:3912 +#, php-format +msgid "Sending HUP signal to %s" +msgstr "HUP sinyali %s e gönderiliyor" + +#: etc/inc/shaper.inc:4052 etc/inc/shaper.inc:4112 etc/inc/shaper.inc:4269 +#: etc/inc/shaper.inc:4270 +msgid " Clone shaper/queue on this interface" +msgstr " Bu arabirimdeki klon şekillendirici / kuyruğu" + +#: etc/inc/shaper.inc:4060 etc/inc/shaper.inc:4067 etc/inc/shaper.inc:4120 +#: etc/inc/shaper.inc:4127 etc/inc/shaper.inc:4277 etc/inc/shaper.inc:4284 +#: etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285 +#, php-format +msgid "Welcome to the %s Traffic Shaper." +msgstr "%s Trafik Şekillendiricisine hoşgeldiniz." + +#: etc/inc/shaper.inc:4061 etc/inc/shaper.inc:4068 etc/inc/shaper.inc:4121 +#: etc/inc/shaper.inc:4128 etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285 +#: etc/inc/shaper.inc:4279 etc/inc/shaper.inc:4286 +msgid "" +"The tree on the left helps you navigate through the queues
    buttons at " +"the bottom represent queue actions and are activated accordingly." +msgstr "" +"Sol tarafta bulunan ağaç kuyrukta gezinmenize yardımcı olur
    altındaki " +"düğmeler kuyruk eylemlerini gösterir ve buna uygun olarak aktif hale " +"getirilir." + +#: etc/inc/system.inc:430 etc/inc/system.inc:449 etc/inc/system.inc:457 +#, php-format +msgid "Static Routes: Gateway IP could not be found for %s" +msgstr "Statik yönlendirici: Ağ geçidi IP si %s bulunamadı" + +#: etc/inc/system.inc:497 etc/inc/system.inc:529 etc/inc/system.inc:533 +#: etc/inc/system.inc:547 +msgid "Starting syslog..." +msgstr "Syslog başlıyor..." + +#: etc/inc/system.inc:536 etc/inc/system.inc:568 etc/inc/system.inc:572 +#: etc/inc/system.inc:695 +#, php-format +msgid "Error: cannot open syslog.conf in system_syslogd_start().%s" +msgstr "Hata: system_syslogd_start().%s içindeki syslog.conf açılamadı" + +#: etc/inc/system.inc:664 etc/inc/system.inc:712 etc/inc/system.inc:716 +#: etc/inc/system.inc:725 +msgid "Initializing PCMCIA..." +msgstr "PCMCIA başlatılıyor..." + +#: etc/inc/system.inc:676 etc/inc/system.inc:761 etc/inc/system.inc:1412 +#: etc/inc/system.inc:1415 etc/inc/system.inc:724 etc/inc/system.inc:808 +#: etc/inc/system.inc:1469 etc/inc/system.inc:1472 etc/inc/system.inc:728 +#: etc/inc/system.inc:806 etc/inc/system.inc:1511 etc/inc/system.inc:1514 +#: etc/inc/system.inc:737 etc/inc/system.inc:817 etc/inc/system.inc:1460 +#: etc/inc/system.inc:1463 +msgid "failed!" +msgstr "başarısız oldu!" + +#: etc/inc/system.inc:687 etc/inc/system.inc:735 etc/inc/system.inc:739 +#: etc/inc/system.inc:748 +msgid "Starting webConfigurator..." +msgstr "webArayüzü başlatılıyor..." + +#: etc/inc/system.inc:719 etc/inc/system.inc:767 etc/inc/system.inc:771 +#: etc/inc/system.inc:775 +msgid "webConfigurator default" +msgstr "webArayüzü varsayılan" + +#: etc/inc/system.inc:729 etc/inc/system.inc:777 etc/inc/system.inc:781 +#: etc/inc/system.inc:785 +msgid "Importing HTTPS certificate" +msgstr "HTTPS sertifikası içe aktarılıyor" + +#: etc/inc/system.inc:1115 etc/inc/system.inc:1167 etc/inc/system.inc:1147 +#: etc/inc/system.inc:1096 +#, php-format +msgid "Error: cannot open cert.pem in system_webgui_start().%s" +msgstr "Hata: system_webgui_start().%s içindeki cert.pem açılamadı" + +#: etc/inc/system.inc:1126 etc/inc/system.inc:1178 etc/inc/system.inc:1158 +#: etc/inc/system.inc:1107 +#, php-format +msgid "Error: cannot open ca.pem in system_webgui_start().%s" +msgstr "Hata: system_webgui_start().%s içindeki ca.pem açılamadı" + +#: etc/inc/system.inc:1134 etc/inc/system.inc:1186 etc/inc/system.inc:1166 +#: etc/inc/system.inc:1115 +msgid "ssl configuration" +msgstr "ssl yapılandırması" + +#: etc/inc/system.inc:1161 etc/inc/system.inc:1213 etc/inc/system.inc:1193 +#: etc/inc/system.inc:1142 +#, php-format +msgid "Error: cannot open %s in system_generate_lighty_config().%s" +msgstr "Hata: system_generate_lighty_config().%s içindeki %s açılamadı" + +#: etc/inc/system.inc:1181 etc/inc/system.inc:1233 etc/inc/system.inc:1213 +#: etc/inc/system.inc:1162 +msgid "Setting timezone..." +msgstr "Saat dilimi ayarlanıyor..." + +#: etc/inc/system.inc:1270 etc/inc/system.inc:1326 etc/inc/system.inc:1368 +#: etc/inc/system.inc:1310 +msgid "Syncing system time before startup..." +msgstr "Başlangıçtan önce sistem saati senkronize ediliyor..." + +#: etc/inc/system.inc:1376 etc/inc/system.inc:1433 etc/inc/system.inc:1475 +#: etc/inc/system.inc:1424 +#, php-format +msgid "Error: cannot open dmesg.boot in system_dmesg_save().%s" +msgstr "Hata: system_dmesg_save().%s içindeki dmesg.boot açılamıyor" + +#: etc/inc/system.inc:1397 etc/inc/system.inc:1454 etc/inc/system.inc:1496 +#: etc/inc/system.inc:1445 +msgid "Setting hard disk standby... " +msgstr "Sabit disk hazırda beklemeye ayarlanıyor..." + +#: etc/inc/system.inc:1514 etc/inc/system.inc:1571 etc/inc/system.inc:1613 +#: etc/inc/system.inc:1562 +msgid "Generic PC" +msgstr "Genel PC" + +#: etc/inc/system.inc:1517 etc/inc/system.inc:1574 etc/inc/system.inc:1616 +#: etc/inc/system.inc:1565 +msgid "Generic PC (CD-ROM)" +msgstr "Genel PC (CD-ROM)" + +#: etc/inc/system.inc:1526 etc/inc/system.inc:1583 etc/inc/system.inc:1625 +#: etc/inc/system.inc:1574 +#, fuzzy +msgid "PC Engines WRAP" +msgstr "PC Engines WRAP" + +#: etc/inc/system.inc:1529 etc/inc/system.inc:1586 etc/inc/system.inc:1628 +#: etc/inc/system.inc:1577 +#, fuzzy +msgid "PC Engines ALIX" +msgstr "PC Engines ALIX" + +#: etc/inc/system.inc:1541 etc/inc/system.inc:1598 etc/inc/system.inc:1640 +#: etc/inc/system.inc:1589 +msgid "embedded (unknown)" +msgstr "gömülü (bilinmeyen)" + +#: etc/inc/util.inc:99 etc/inc/util.inc:101 +#, php-format +msgid "WARNING: Could not mark subsystem: %s dirty" +msgstr "UYARI: Alt sistem işareti alınamadı %s kirli " + +#: etc/inc/util.inc:119 etc/inc/util.inc:121 +msgid "WARNING: You must give a name as parameter to lock() function." +msgstr "UYARI: Parametreye isim vermelisiniz işlev() kilidi." + +#: etc/inc/util.inc:213 etc/inc/util.inc:208 etc/inc/util.inc:238 +#: etc/inc/util.inc:240 +#, php-format +msgid "Reference %s is going negative, not doing unreference." +msgstr "Kaynak %s eksiye gidiyor, kaynak yapmıyor." + +#: etc/inc/util.inc:980 etc/inc/util.inc:981 etc/inc/util.inc:1026 +#: etc/inc/util.inc:1076 +#, php-format +msgid "The command '%1$s' returned exit code '%2$d', the output was '%3$s' " +msgstr "" +"'%1$s' Komutu '%2$d', çıkış kodu ile geri döndü, '%3$s' olarak çıkış oldu." + +#: etc/inc/vpn.inc:126 etc/inc/vpn.inc:134 etc/inc/vpn.inc:134 +msgid "Configuring IPsec VPN... " +msgstr "IPsec VPN Yapılandırılıyor..." + +#: etc/inc/vpn.inc:229 etc/inc/vpn.inc:228 etc/inc/vpn.inc:238 +#: etc/inc/vpn.inc:237 +#, php-format +msgid "Error: Invalid certificate info for %s" +msgstr "Hata: %s Geçersiz sertifika bilgisi" + +#: etc/inc/vpn.inc:235 etc/inc/vpn.inc:234 etc/inc/vpn.inc:244 +#: etc/inc/vpn.inc:243 +#, php-format +msgid "Error: Invalid certificate hash info for %s" +msgstr "Hata: %s Geçersiz sertifika hash bilgisi" + +#: etc/inc/vpn.inc:240 etc/inc/vpn.inc:239 etc/inc/vpn.inc:249 +#: etc/inc/vpn.inc:248 +#, php-format +msgid "Error: Cannot write IPsec CA file for %s" +msgstr "Hata: IPsec CA dosyası %s e yazılamıyor" + +#: etc/inc/vpn.inc:249 etc/inc/vpn.inc:248 +#, php-format +msgid "Error: cannot open psk.txt in vpn_ipsec_configure()." +msgstr "Hata: vpn_ipsec_configure(). içindeki psk.txt açılamadı." + +#: etc/inc/vpn.inc:312 etc/inc/vpn.inc:311 +#, php-format +msgid "Error: cannot open racoon.conf in vpn_ipsec_configure()." +msgstr "Hata: vpn_ipsec_configure(). içindeki racoon.conf açılamadı." + +#: etc/inc/vpn.inc:404 etc/inc/vpn.inc:403 +#, php-format +msgid "Error: cannot open server %s in vpn.\n" +msgstr "Hata: vpn içindeki %s sunucusu açılamadı.\n" + +#: etc/inc/vpn.inc:560 etc/inc/vpn.inc:559 etc/inc/vpn.inc:546 +#: etc/inc/vpn.inc:549 +#, php-format +msgid "Error: Invalid phase1 certificate reference for %s" +msgstr "Hata: %s geçersiz aşama 1 sertifika kaynağı" + +#: etc/inc/vpn.inc:569 etc/inc/vpn.inc:568 etc/inc/vpn.inc:555 +#: etc/inc/vpn.inc:558 +#, php-format +msgid "Error: Cannot write phase1 certificate file for %s" +msgstr "Hata: %s Sertifika aşama 1 dosyasına yazılamadı" + +#: etc/inc/vpn.inc:580 etc/inc/vpn.inc:579 etc/inc/vpn.inc:566 +#: etc/inc/vpn.inc:569 +#, php-format +msgid "Error: Cannot write phase1 key file for %s" +msgstr "Hata: %s Anahtar aşama 1 dosyasına yazılamadı" + +#: etc/inc/vpn.inc:593 etc/inc/vpn.inc:592 etc/inc/vpn.inc:579 +#: etc/inc/vpn.inc:582 +#, php-format +msgid "Error: Cannot write phase1 CA certificate file for %s" +msgstr "Hata: %s CA sertifika aşama 1 dosyasına yazılamadı" + +#: etc/inc/vpn.inc:826 etc/inc/vpn.inc:829 +#, php-format +msgid "Error: cannot open spd.conf in vpn_ipsec_configure()." +msgstr "Hata: vpn_ipsec_configure(). içindeki spd.conf açılamadı." + +#: etc/inc/vpn.inc:1008 etc/inc/vpn.inc:1014 etc/inc/vpn.inc:1013 +#: etc/inc/vpn.inc:1022 +msgid "Forcefully reloading IPsec racoon daemon" +msgstr "IPsec racoon servisi zorla yeniden yükleniyor" + +#: etc/inc/vpn.inc:1052 etc/inc/vpn.inc:1058 etc/inc/vpn.inc:1056 +#: etc/inc/vpn.inc:1065 +msgid "Configuring PPTP VPN service... " +msgstr "PPTP VPN servisi yapılandırılıyor..." + +#: etc/inc/vpn.inc:1062 etc/inc/vpn.inc:1068 etc/inc/vpn.inc:1066 +#: etc/inc/vpn.inc:1075 +msgid "Could not kill mpd within 3 seconds. Trying again." +msgstr "3 Saniye içinde mpd durdurulamadı. Tekrar deneniyor." + +#: etc/inc/vpn.inc:1085 etc/inc/vpn.inc:1091 etc/inc/vpn.inc:1089 +#: etc/inc/vpn.inc:1098 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_pptpd_configure()." +msgstr "Hata: vpn_pptpd_configure(). içinde mpd.conf açılamadı." + +#: etc/inc/vpn.inc:1198 etc/inc/vpn.inc:1204 etc/inc/vpn.inc:1202 +#: etc/inc/vpn.inc:1212 +#, php-format +msgid "Error: cannot open mpd.links in vpn_pptpd_configure()." +msgstr "Hata: vpn_pptpd_configure(). içinde mpd.links açılamadı." + +#: etc/inc/vpn.inc:1222 etc/inc/vpn.inc:1228 etc/inc/vpn.inc:1226 +#: etc/inc/vpn.inc:1237 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_pptpd_configure()." +msgstr "Hata: vpn_pptpd_configure(). içinde mpd.secret açılamadı." + +#: etc/inc/vpn.inc:1279 etc/inc/vpn.inc:1285 etc/inc/vpn.inc:1283 +#: etc/inc/vpn.inc:1295 +msgid "Configuring PPPoE VPN service... " +msgstr "PPPoE VPN servisi yapılandırılıyor..." + +#: etc/inc/vpn.inc:1303 etc/inc/vpn.inc:1309 etc/inc/vpn.inc:1307 +#: etc/inc/vpn.inc:1319 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_pppoe_configure()." +msgstr "Hata: vpn_pppoe_configure(). içinde mpd.conf açılmadı." + +#: etc/inc/vpn.inc:1406 etc/inc/vpn.inc:1412 etc/inc/vpn.inc:1410 +#: etc/inc/vpn.inc:1423 +#, php-format +msgid "Error: cannot open mpd.links in vpn_pppoe_configure()." +msgstr "Hata: vpn_pppoe_configure(). içinde mpd.links açılamadı." + +#: etc/inc/vpn.inc:1432 etc/inc/vpn.inc:1438 etc/inc/vpn.inc:1436 +#: etc/inc/vpn.inc:1450 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_pppoe_configure()." +msgstr "Hata: vpn_pppoe_configure(). içinde mpd.secret açılamadı." + +#: etc/inc/vpn.inc:1460 usr/local/www/system_firmware_check.php:139 +#: etc/inc/vpn.inc:1470 etc/inc/vpn.inc:1468 +#: usr/local/www/system_firmware_check.php:141 etc/inc/vpn.inc:1483 +msgid "done" +msgstr "tamamlandı" + +#: etc/inc/vpn.inc:1479 etc/inc/vpn.inc:1489 etc/inc/vpn.inc:1487 +#: etc/inc/vpn.inc:1502 +msgid "Configuring l2tp VPN service... " +msgstr "l2tp VPN servisi yapılandırılıyor..." + +#: etc/inc/vpn.inc:1504 etc/inc/vpn.inc:1514 etc/inc/vpn.inc:1512 +#: etc/inc/vpn.inc:1527 +#, php-format +msgid "Error: cannot open mpd.conf in vpn_l2tp_configure()." +msgstr "Hata: vpn_l2tp_configure(). içinde mpd.conf açılamadı." + +#: etc/inc/vpn.inc:1597 etc/inc/vpn.inc:1607 etc/inc/vpn.inc:1605 +#: etc/inc/vpn.inc:1621 +#, php-format +msgid "Error: cannot open mpd.links in vpn_l2tp_configure()." +msgstr "Hata: vpn_l2tp_configure(). içinde mpd.links açılamadı." + +#: etc/inc/vpn.inc:1622 etc/inc/vpn.inc:1632 etc/inc/vpn.inc:1630 +#: etc/inc/vpn.inc:1647 +#, php-format +msgid "Error: cannot open mpd.secret in vpn_l2tp_configure()." +msgstr "Hata: vpn_l2tp_configure(). içinde mpd.secret açılamadı." + +#: etc/inc/vpn.inc:1769 etc/inc/vpn.inc:1779 etc/inc/vpn.inc:1764 +#: etc/inc/vpn.inc:1836 +#, php-format +msgid "Could not determine VPN endpoint for '%s'" +msgstr "'%s' VPN son noktası sonlandırılamıyor" + +#: etc/inc/vpn.inc:1774 etc/inc/vpn.inc:1784 etc/inc/vpn.inc:1769 +#: etc/inc/vpn.inc:1841 +#, php-format +msgid "" +"IPSEC: ERROR: One of the endpoints is not a IP address. Old EP '%1$s' new EP " +"'%2$s'" +msgstr "" +"IPSEC: HATA: Son noktalardan birisi IP adresi değil. Eski EP '%1$s' yeni EP " +"'%2$s'" + +#: etc/inc/vpn.inc:1777 etc/inc/vpn.inc:1787 etc/inc/vpn.inc:1772 +#: etc/inc/vpn.inc:1844 +#, php-format +msgid "" +"IPSEC: ERROR: One of the remote endpoints is not a IP address. Old RG '%1$s' " +"new RG '%2$s'" +msgstr "" +"IPSEC: HATA: Uzak son noktalardan birisi IP adresi değil. Eski RG '%1$s' " +"yeni RG '%2$s'" + +#: etc/inc/vpn.inc:1833 etc/inc/vpn.inc:1843 etc/inc/vpn.inc:1835 +#: etc/inc/vpn.inc:1907 +#, php-format +msgid "" +"Reloading IPsec tunnel '%1$s'. Previous IP '%2$s', current IP '%3$s'. " +"Reloading policy" +msgstr "" +"'%1$s'. IPsec tüneli yeniden yükleniyor. Önceki IP '%2$s', şimdiki IP '%" +"3$s'. ilke yeniden yükleniyor" + +#: etc/inc/xmlparse.inc:85 etc/inc/xmlparse_attr.inc:78 +#: etc/inc/xmlparse_attr.inc:78 etc/inc/xmlparse.inc:85 +#, php-format +msgid "XML error: %1$s at line %2$d cannot occur more than once" +msgstr "XML hatası: %1$s satırında %2$d bir kereden fazla olamaz" + +#: etc/inc/xmlparse.inc:176 etc/inc/xmlparse_attr.inc:187 +#: etc/inc/xmlparse_attr.inc:187 etc/inc/xmlparse.inc:176 +msgid "Error: could not open XML input" +msgstr "Hata: XML girdisi açılamadı" + +#: etc/inc/xmlparse.inc:182 etc/inc/xmlparse.inc:182 +#, php-format +msgid "XML error: %1$s at line %2$d in %3$s" +msgstr "XML hata: %3$s içinde %2$d satır %1$s" + +#: etc/inc/xmlparse.inc:198 etc/inc/xmlparse_attr.inc:210 +#: etc/inc/xmlparse.inc:199 etc/inc/xmlparse_attr.inc:210 +#: etc/inc/xmlparse.inc:199 +#, php-format +msgid "XML error: no %s object found!" +msgstr "XML hata : %s nesnesi bulunamadı!" + +#: etc/inc/xmlrpc_client.inc:152 etc/inc/xmlrpc_client.inc:152 +msgid "Unknown method" +msgstr "Bilinmeyen yöntem" + +#: etc/inc/xmlrpc_client.inc:153 etc/inc/xmlrpc_client.inc:153 +msgid "Invalid return payload: enable debugging to examine incoming payload" +msgstr "" +"Geçersiz yük dönüşü: gelen yükü incelemek için hata ayıklamayı etkinleştir" + +#: etc/inc/xmlrpc_client.inc:154 etc/inc/xmlrpc_client.inc:154 +msgid "Incorrect parameters passed to method" +msgstr "Hatalı parametreler yönteme geçirildi" + +#: etc/inc/xmlrpc_client.inc:155 etc/inc/xmlrpc_client.inc:155 +msgid "Can't introspect: method unknown" +msgstr "İçgözlem olamaz: Biliynmeyen Yöntem" + +#: etc/inc/xmlrpc_client.inc:156 etc/inc/xmlrpc_client.inc:156 +msgid "Didn't receive 200 OK from remote server." +msgstr "Uzak sunucudan 200 OK alınmadı." + +#: etc/inc/xmlrpc_client.inc:157 etc/inc/xmlrpc_client.inc:157 +msgid "The requested method didn't return an XML_RPC_Response object." +msgstr "İstenilen yöntem XML_RPC_Response nesnesi döndürmedi." + +#: etc/inc/xmlrpc_client.inc:158 etc/inc/xmlrpc_client.inc:158 +msgid "Invalid request payload" +msgstr "Geçersiz yük isteği" + +#: etc/inc/xmlrpc_client.inc:260 etc/inc/xmlrpc_client.inc:260 +msgid "missing top level xmlrpc element" +msgstr "üst düzey xmlrpc öğesi kayıp" + +#: etc/inc/xmlrpc_client.inc:268 etc/inc/xmlrpc_client.inc:268 +#, php-format +msgid "xmlrpc element %1$s cannot be child of %2$s" +msgstr "xmlrpc öğesi %1$s %2$s nin alt öğesi değil" + +#: etc/inc/xmlrpc_client.inc:431 etc/inc/xmlrpc_client.inc:431 +msgid "Non-numeric value received in INT or DOUBLE" +msgstr "INT veya İKİZ alınan değerleri numaratik olmayan değer" + +#: etc/inc/xmlrpc_client.inc:860 etc/inc/xmlrpc_client.inc:860 +#, php-format +msgid "send()'s %s parameter must be an XML_RPC_Message object." +msgstr "send()'s %s parametresi XML_RPC_Message nesnesine ait olmalıdır." + +#: etc/inc/xmlrpc_client.inc:951 etc/inc/xmlrpc_client.inc:951 +#, php-format +msgid "" +"Connection to proxy server \n" +" %1$s:%2$s failed. %3$s" +msgstr "" +"Proxy sunucu bağlantısı sırasında \n" +"%1$s:%2$s başarısız oldu. %3$s" + +#: etc/inc/xmlrpc_client.inc:957 etc/inc/xmlrpc_client.inc:957 +#, php-format +msgid "" +"Connection to RPC server \n" +" %1$s:%2$s failed. %3$s" +msgstr "" +"RPC sunucu bağlantısı sırasında \n" +"%1$s:%2$s başarısız oldu. %3$s" + +#: etc/inc/xmlrpc_client.inc:1330 etc/inc/xmlrpc_client.inc:1330 +msgid "The submitted request did not contain this parameter" +msgstr "Gönderilen istek bu parametreyi içermiyor" + +#: etc/inc/xmlrpc_client.inc:1361 etc/inc/xmlrpc_client.inc:1361 +msgid "mb_convert_encoding() is not available" +msgstr "mb_convert_encoding() kullanılamaz" + +#: etc/inc/xmlrpc_client.inc:1470 etc/inc/xmlrpc_client.inc:1470 +#, php-format +msgid "HTTP error, got response: %s" +msgstr "HTTP hatası, gelen yanıt: %s" + +#: etc/inc/xmlrpc_client.inc:1496 +msgid "XML error at line 1, check URL" +msgstr "1. satırda XML hatası, URL'yi kontrol ediniz." + +#: etc/inc/xmlrpc_client.inc:1591 etc/inc/xmlrpc_client.inc:1593 +msgid "Scalar can have only one value" +msgstr "Sayı sadece bir değer olmalı." + +#: etc/inc/xmlrpc_client.inc:1598 etc/inc/xmlrpc_client.inc:1600 +#, php-format +msgid "Not a scalar type (%s)" +msgstr "(%s) sayısal bir tür değil." + +#: etc/inc/xmlrpc_client.inc:1634 etc/inc/xmlrpc_client.inc:1650 +#: etc/inc/xmlrpc_client.inc:1636 etc/inc/xmlrpc_client.inc:1652 +#, php-format +msgid "Already initialized as a [%s]" +msgstr "[%s] olarak henüz başlatıldı." + +#: etc/inc/xmlrpc_server.inc:48 etc/inc/xmlrpc_server.inc:48 +msgid "" +"This method lists all the methods that the XML-RPC server knows how to " +"dispatch" +msgstr "" +"Bu yöntem tüm yöntemleri listeler XML-RPC sunucusu nasıl dağıtacağını " +"belirler." + +#: etc/inc/xmlrpc_server.inc:66 etc/inc/xmlrpc_server.inc:66 +msgid "" +"Returns an array of known signatures (an array of arrays) for the method " +"name passed. If no signatures are known, returns a none-array (test for " +"type != array to detect missing signature)" +msgstr "" + +#: etc/inc/xmlrpc_server.inc:86 etc/inc/xmlrpc_server.inc:86 +msgid "" +"Returns help text if defined for the method passed, otherwise returns an " +"empty string" +msgstr "" +"Yardım dosyası tanımlıysa yöntem geçiş yaparak döner, aksi halde boş dizilim " +"olarak döner" + +#: etc/inc/authgui.inc:73 etc/inc/authgui.inc:73 +msgid "No page assigned to this user! Click here to logout." +msgstr "" +"Bu kullanıcıya sayfa atanamadı! Oturumu kapatmak için buraya tıklayınız." + +#: etc/inc/authgui.inc:97 etc/inc/authgui.inc:103 +#, php-format +msgid "Error: %1$s Description: %2$s" +msgstr "Hata: %1$s Açıklama: %2$s" + +#: etc/inc/authgui.inc:160 etc/inc/authgui.inc:159 etc/inc/authgui.inc:165 +msgid "unknown reason" +msgstr "bilinmeyen sebep" + +#: etc/inc/authgui.inc:161 etc/inc/authgui.inc:160 etc/inc/authgui.inc:166 +#, php-format +msgid "Invalid login (%s)." +msgstr "(%s) geçersiz oturum açma." + +#: etc/inc/authgui.inc:166 etc/inc/authgui.inc:165 etc/inc/authgui.inc:171 +#, php-format +msgid "This device is currently being maintained by: %s." +msgstr "Bu cihaz şu anda %s tarafından bakıma alındı." + +#: etc/inc/authgui.inc:214 etc/inc/authgui.inc:277 etc/inc/authgui.inc:212 +#: etc/inc/authgui.inc:275 etc/inc/authgui.inc:235 etc/inc/authgui.inc:298 +msgid "Login" +msgstr "Giriş" + +#: etc/inc/authgui.inc:242 etc/inc/authgui.inc:240 etc/inc/authgui.inc:263 +msgid "" +"You are accessing this router by an IP address not configured locally, which " +"may be forwarded by NAT or other means.

    If you did not setup this " +"forwarding, you may be the target of a man-in-the-middle attack." +msgstr "" +"Bu yönlendiriciye yerelde ayarlanmamış, NAT veya başka bir yöntemle " +"yönlendirilmiş olabilecek bir IP adresinden erişiyorsunuz.

    Eğer " +"böyle bir yönlendirme ayarlamadıysanız, bir MitM (man-in-the-middle / araya " +"girilmesi) saldırısı altında olabilirsiniz." + +#: etc/inc/authgui.inc:251 etc/inc/authgui.inc:249 etc/inc/authgui.inc:272 +msgid "Username:" +msgstr "Kullanıcı adı :" + +#: etc/inc/authgui.inc:258 usr/local/www/diag_backup.php:597 +#: usr/local/www/system_authservers.php:627 etc/inc/authgui.inc:256 +#: usr/local/www/diag_backup.php:676 usr/local/www/system_authservers.php:632 +#: usr/local/www/system_authservers.php:639 usr/local/www/diag_backup.php:681 +#: etc/inc/authgui.inc:279 +msgid "Password:" +msgstr "Parola:" + +#: etc/inc/authgui.inc:265 etc/inc/authgui.inc:263 etc/inc/authgui.inc:286 +msgid "Enter username and password to login." +msgstr "Giriş yapmak için kullanıcı adı ve parola girin." + +#: etc/inc/authgui.inc:271 etc/inc/authgui.inc:269 etc/inc/authgui.inc:292 +msgid "Your browser must support cookies to login." +msgstr "Tarayıcınız oturum açmak için çerezleri kabul etmeli." + +#: etc/inc/cmd_chain.inc:101 +#, php-format +msgid "CmdCHAIN is executing -> %1$s - %2$s" +msgstr "CmdCHAIN yürütülüyor -> %1$s - %2$s" + +#: etc/inc/cmd_chain.inc:109 etc/inc/cmd_chain.inc:111 +#, php-format +msgid "%1$s failed with return code -> %2$s. The command was %3$s" +msgstr "%1$s başarısız oldu dönen hata kodu: -> %2$s. %3$s komutuydu." + +#: etc/inc/config.console.inc:58 etc/inc/config.console.inc:58 +msgid "DANGER! WARNING! ACHTUNG!" +msgstr "TEHLIKE! UYARI! DİKKAT!" + +#: etc/inc/config.console.inc:59 etc/inc/config.console.inc:59 +#, php-format +msgid "%s requires *AT LEAST* %s RAM to function correctly.%s" +msgstr "%s ihtiyaç duyar *EN AZ* %s RAM %s 'in düzgün işlev görmesi için" + +#: etc/inc/config.console.inc:60 etc/inc/config.console.inc:60 +#, php-format +msgid "Only (%s) MB RAM has been detected.%s" +msgstr "Sadece (%s) MB RAM algılandı. %s" + +#: etc/inc/config.console.inc:61 etc/inc/config.console.inc:61 +msgid "Press ENTER to continue." +msgstr "Devam etmek için ENTER'a basın." + +#: etc/inc/config.console.inc:83 etc/inc/config.console.inc:495 +#: etc/inc/config.console.inc:497 etc/inc/config.console.inc:83 +#: etc/inc/config.console.inc:497 +msgid "No interfaces found!" +msgstr "Arabirimler bulunamadı!" + +#: etc/inc/config.console.inc:181 etc/inc/config.console.inc:181 +msgid "VLAN interfaces:" +msgstr "VLAN Arabirimleri:" + +#: etc/inc/config.console.inc:207 etc/inc/config.console.inc:207 +msgid "Enter the WAN interface name or 'a' for auto-detection:" +msgstr "" +"WAN arabiriminin adını giriniz ya da otomatik algılaması için 'a' harfine " +"basınız." + +#: etc/inc/config.console.inc:215 etc/inc/config.console.inc:276 +#: etc/inc/config.console.inc:518 etc/inc/config.console.inc:520 +#: etc/inc/config.console.inc:215 etc/inc/config.console.inc:244 +#: etc/inc/config.console.inc:276 etc/inc/config.console.inc:520 +#, php-format +msgid "%sInvalid interface name '%s'%s" +msgstr "%s Geçersiz arabirim adı '%s'%s" + +#: etc/inc/config.console.inc:222 etc/inc/config.console.inc:222 +#, php-format +msgid "" +"%sEnter the LAN interface name or 'a' for auto-detection %sNOTE: this " +"enables full Firewalling/NAT mode.%s(or nothing if finished):%s" +msgstr "" +"%sLAN arabiriminin adını giriniz ya da otomatik algılanması için 'a' harfine " +"basınız %sNOT: Bu %sGüvenlik Duvarı/NAT kipini etkinleştirir(yada hiçbir " +"şey bitmemiş ise):%s" + +#: etc/inc/config.console.inc:244 +#, php-format +msgid "%sInvalid interface name '%s'%s)" +msgstr "%s Geçersiz arabirim adı '%s'%s)" + +#: etc/inc/config.console.inc:261 etc/inc/config.console.inc:261 +#, php-format +msgid "%sOptional interface %s description found: %s" +msgstr "%sOpsiyonel arabirim %s Açıklaması bulundu: %s" + +#: etc/inc/config.console.inc:264 +#, php-format +msgid "(or nothing if finished):%s" +msgstr "(veya eğer bittiyse herşey): %s" + +#: etc/inc/config.console.inc:270 etc/inc/config.console.inc:270 +msgid "Optional" +msgstr "Seçimsel" + +#: etc/inc/config.console.inc:304 etc/inc/config.console.inc:304 +msgid "The interfaces will be assigned as follows:" +msgstr "Arabirimler aşağıdaki gibi atanacaklar:" + +#: etc/inc/config.console.inc:416 etc/inc/config.console.inc:418 +#: etc/inc/config.console.inc:418 +#, php-format +msgid "%sWriting configuration..." +msgstr "%s Yapılandırma uygulanıyor." + +#: etc/inc/config.console.inc:418 etc/inc/config.console.inc:420 +#: etc/inc/config.console.inc:420 +#, php-format +msgid "done.%s" +msgstr "tamam.%s" + +#: etc/inc/config.console.inc:425 etc/inc/config.console.inc:427 +#: etc/inc/config.console.inc:427 +msgid "One moment while we reload the settings..." +msgstr "Ayarlar yüklenirken biraz bekleyiniz." + +#: etc/inc/config.console.inc:429 etc/inc/config.console.inc:431 +#: etc/inc/config.console.inc:431 +msgid " done!" +msgstr " tamam!" + +#: etc/inc/config.console.inc:449 etc/inc/config.console.inc:451 +#: etc/inc/config.console.inc:451 +#, php-format +msgid "Detected link-up on interface %s.%s" +msgstr "%s.%s arabirimindeki bağlantı algılandı." + +#: etc/inc/config.console.inc:454 etc/inc/config.console.inc:456 +#: etc/inc/config.console.inc:456 +#, php-format +msgid "No link-up detected.%s" +msgstr "%s için bağlantı algılanmadı." + +#: etc/inc/config.console.inc:493 etc/inc/config.console.inc:495 +#: etc/inc/config.console.inc:495 +msgid "VLAN Capable interfaces:" +msgstr "VLAN beceri arabirimleri:" + +#: etc/inc/config.console.inc:508 etc/inc/config.console.inc:510 +#: etc/inc/config.console.inc:510 +msgid "No VLAN capable interfaces detected." +msgstr "VLAN destekli arabirim algılanmadı." + +#: etc/inc/config.console.inc:512 etc/inc/config.console.inc:514 +#: etc/inc/config.console.inc:514 +msgid "" +"Enter the parent interface name for the new VLAN (or nothing if finished):" +msgstr "" +"Yeni VLAN için Üst arabirim adını giriniz (veya bittiyse herhangi birşey " +"yapmayınız)" + +#: etc/inc/config.console.inc:525 etc/inc/config.console.inc:527 +#: etc/inc/config.console.inc:527 +msgid "Enter the VLAN tag (1-4094):" +msgstr "VLAN etiketi giriniz(1-4094)" + +#: etc/inc/config.console.inc:529 etc/inc/config.console.inc:531 +#: etc/inc/config.console.inc:531 +#, php-format +msgid "%sInvalid VLAN tag '%s'%s" +msgstr "%sGeçersiz VLAN etiketi '%s'%s" + +#: etc/inc/config.lib.inc:79 etc/inc/config.lib.inc:79 +msgid "Config.xml unlocked." +msgstr "Config.xml kilitli değil." + +#: etc/inc/config.lib.inc:82 etc/inc/config.lib.inc:82 +msgid "Invalid password entered. Please try again." +msgstr "Geçersiz parola girişi yaptınız. Lütfen tekrar deneyiniz." + +#: etc/inc/config.lib.inc:110 etc/inc/config.lib.inc:140 +#: etc/inc/config.lib.inc:271 etc/inc/config.lib.inc:110 +#: etc/inc/config.lib.inc:140 etc/inc/config.lib.inc:271 +msgid "" +"Config.xml is corrupted and is 0 bytes. Could not restore a previous backup." +msgstr "" +"Config.xml bozulmuş ve boyutu 0 bayt. Bir önceki yedekleme geri " +"yüklenemedi." + +#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149 +#: etc/inc/config.lib.inc:552 etc/inc/config.lib.inc:560 +#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149 +#: etc/inc/config.lib.inc:577 +msgid "Could not restore config.xml." +msgstr "config.xml dosyası onarılamadı." + +#: etc/inc/config.lib.inc:210 etc/inc/config.lib.inc:211 +#: etc/inc/config.lib.inc:210 etc/inc/config.lib.inc:211 +#, php-format +msgid "%1$s is restoring the configuration %2$s" +msgstr "%2$s yapılandırmasına %1$s geri yükleniyor" + +#: etc/inc/config.lib.inc:233 etc/inc/config.lib.inc:233 +msgid "Resetting factory defaults..." +msgstr "Fabrika ayarlarına sıfırlanıyor." + +#: etc/inc/config.lib.inc:236 etc/inc/config.lib.inc:236 +msgid "" +"No XML configuration file found - using factory defaults.\n" +"Make sure that the configuration floppy disk with the conf/config.xml\n" +"file is inserted. If it isn't, your configuration changes will be lost\n" +"on reboot.\n" +msgstr "" +"XML yapılandırma dosyası bulunamadı - fabrika ayarları kullanılıyor.\n" +"floppy disketin içinde conf/config.xml bulunduğundan emin olun.\n" +"Aksi taktirde yaptğınız yapılandırma değişiklikleri sistem yeniden\n" +"başladığında kaybolacak.\n" + +#: etc/inc/config.lib.inc:249 etc/inc/config.lib.inc:249 +#, php-format +msgid "XML configuration file not found. %s cannot continue booting." +msgstr "XML yapılandırma dosyası bulunmadı. %s ön yüklemeye devam edilemiyor." + +#: etc/inc/config.lib.inc:255 etc/inc/config.lib.inc:255 +msgid "" +"Last known config found and restored. Please double check your " +"configuration file for accuracy." +msgstr "" +"Son bilinen yapılandırma dosyası bulundu ve geri yüklendi. Çift tıklayarak " +"yapılandırmanın doğruluğunu kontrol ediniz." + +# elektrik gitmelerinde karşımıza gelen konsol yazısı. bildiğiniz checkdisk ile aynı mantıkta bir komut çalıştırıyor dirty yerine başka birşey kullanılabilinir. +#: etc/inc/config.lib.inc:317 etc/inc/config.lib.inc:320 +#: etc/inc/config.lib.inc:320 +msgid "Disk is dirty. Running fsck -y" +msgstr "Disk kirli. fsck -y Çalıştırılıyor" + +#: etc/inc/config.lib.inc:328 etc/inc/config.lib.inc:331 +#: etc/inc/config.lib.inc:331 +msgid "File system is dirty. Launching FSCK for /" +msgstr "Dosya sistemi kirli. FSCK başlatılıyor /" + +#: etc/inc/config.lib.inc:379 etc/inc/config.lib.inc:382 +#: etc/inc/config.lib.inc:382 +#, php-format +msgid "Start Configuration upgrade at %s, set execution timeout to 15 minutes" +msgstr "" +"Yapılandırma yükseltmesine %s başla, 15 dakika zaman aşımı süresi ayarla" + +#: etc/inc/config.lib.inc:389 etc/inc/config.lib.inc:390 +#: etc/inc/config.lib.inc:392 etc/inc/config.lib.inc:393 +#: etc/inc/config.lib.inc:392 etc/inc/config.lib.inc:393 +msgid "Updated bogon update frequency to 3am" +msgstr "Sahte IP/Ağ güncellenecek, güncelleme sıklığı saati 03:00" + +#: etc/inc/config.lib.inc:420 etc/inc/config.lib.inc:423 +#: etc/inc/config.lib.inc:423 +#, php-format +msgid "Ended Configuration upgrade at %s" +msgstr "Yapılandırma yükseltmesi %s de bitti" + +#: etc/inc/config.lib.inc:423 etc/inc/config.lib.inc:426 +#: etc/inc/config.lib.inc:426 +#, php-format +msgid "Upgraded config version level from %1$s to %2$s" +msgstr "Yapılandırma sürümü %1$s dan %2$s yükseltildi" + +# bu çeviride türkçe karakter kullanmayınız (yaptı) kelimesi hariç herhangi bir yere türkçe karakter girince tüm pfSense nin sorun vermesine sebep oluyor (TechnicaL) +#: etc/inc/config.lib.inc:512 etc/inc/config.lib.inc:520 +#: etc/inc/config.lib.inc:537 +#, php-format +msgid "%s made unknown change" +msgstr "%s bilinmeyen degisiklik yaptı" + +#: etc/inc/config.lib.inc:525 etc/inc/config.lib.inc:533 +#: etc/inc/config.lib.inc:550 +msgid "WARNING: Config contents could not be save. Could not open file!" +msgstr "UYARI: Yapılandırma içeriği kaydedilemedi. Dosya açılamadı!" + +#: etc/inc/config.lib.inc:527 etc/inc/config.lib.inc:535 +#: etc/inc/config.lib.inc:552 +#, php-format +msgid "Unable to open %s/config.xml for writing in write_config()%s" +msgstr "write_config()%s yazmak için %s/config.xml açılamadı" + +#: etc/inc/config.lib.inc:636 etc/inc/config.lib.inc:644 +#: etc/inc/config.lib.inc:661 +msgid "Reverted to" +msgstr "Ters çevirilen" + +#: etc/inc/config.lib.inc:651 etc/inc/config.lib.inc:659 +#: etc/inc/config.lib.inc:676 +msgid "Installing configuration..." +msgstr "Yapılandırma kuruluyor..." + +#: etc/inc/config.lib.inc:653 etc/inc/config.lib.inc:661 +#: etc/inc/config.lib.inc:678 +msgid "Installing configuration ...." +msgstr "Yapılandırma kuruluyor ..." + +#: etc/inc/config.lib.inc:704 etc/inc/config.lib.inc:712 +#: etc/inc/config.lib.inc:729 +msgid "XML error: unable to open file" +msgstr "XML hata: dosya açılamadı" + +#: etc/inc/config.lib.inc:710 etc/inc/config.lib.inc:718 +#: etc/inc/config.lib.inc:735 +#, php-format +msgid "%1$s at line %2$d" +msgstr "%1$s satırı %2$d" + +#: etc/inc/config.lib.inc:756 etc/inc/config.lib.inc:758 +#: etc/inc/config.lib.inc:764 etc/inc/config.lib.inc:766 +#: etc/inc/config.lib.inc:781 etc/inc/config.lib.inc:783 +#, php-format +msgid "The backup cache file %s is corrupted. Unlinking." +msgstr "Yedek ön bellek dosyası %s bozuk. bağlantı bırıkılıyor." + +#: etc/inc/easyrule.inc:116 etc/inc/easyrule.inc:117 etc/inc/easyrule.inc:117 +msgid "Easy Rule: Blocked from Firewall Log View" +msgstr "Kolay Kural: Engellenen Firewall Günlüklerini Görüntüle" + +#: etc/inc/easyrule.inc:165 etc/inc/easyrule.inc:173 etc/inc/easyrule.inc:181 +#: etc/inc/easyrule.inc:177 etc/inc/easyrule.inc:185 etc/inc/easyrule.inc:177 +#: etc/inc/easyrule.inc:185 +msgid "Entry added" +msgstr "Giriş eklendi" + +#: etc/inc/easyrule.inc:170 etc/inc/easyrule.inc:178 etc/inc/easyrule.inc:182 +#: etc/inc/easyrule.inc:182 +msgid "Hosts blocked from Firewall Log view" +msgstr "Firewall günlük görüntüleyicideki bloke edilen ana bağlantılar" + +#: etc/inc/easyrule.inc:249 etc/inc/easyrule.inc:257 etc/inc/easyrule.inc:262 +#: etc/inc/easyrule.inc:262 +msgid "Easy Rule: Passed from Firewall Log View" +msgstr "Kolay Kural: Geçiş yapan Güvenlik Duvarı Günlüklerini Görüntüle" + +#: etc/inc/easyrule.inc:280 etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:309 +#: etc/inc/easyrule.inc:313 +msgid "Tried to block invalid IP:" +msgstr "Engellenmeye çalışılan IP geçersiz:" + +#: etc/inc/easyrule.inc:284 etc/inc/easyrule.inc:307 etc/inc/easyrule.inc:313 +#: etc/inc/easyrule.inc:317 +msgid "Invalid interface for block rule:" +msgstr "Engeleme kuralı için gerçersiz arabirim:" + +#: etc/inc/easyrule.inc:287 etc/inc/easyrule.inc:310 etc/inc/easyrule.inc:316 +#: etc/inc/easyrule.inc:320 +msgid "Host added successfully" +msgstr "Host başarıyla eklendi." + +#: etc/inc/easyrule.inc:289 etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:318 +#: etc/inc/easyrule.inc:322 +msgid "Failed to create block rule, alias, or add host." +msgstr "" +"Grup ya da Ana bilgisayar engelleme kuralı oluşturma işlemi başarısız oldu." + +#: etc/inc/easyrule.inc:292 etc/inc/easyrule.inc:315 etc/inc/easyrule.inc:321 +#: etc/inc/easyrule.inc:325 +msgid "Tried to block but had no host IP or interface" +msgstr "" +"Engellenmeye çalışıldı fakat Ana bilgisayar ip adresi ya da arabirim " +"bulunamadı." + +#: etc/inc/easyrule.inc:294 etc/inc/easyrule.inc:317 etc/inc/easyrule.inc:323 +#: etc/inc/easyrule.inc:327 +msgid "Unknown block error." +msgstr "Bilinmeyen engelleme hatası." + +#: etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:334 +#: etc/inc/easyrule.inc:338 +msgid "Invalid interface for pass rule:" +msgstr "Geçiş kuralı için geçersiz arabirim:" + +#: etc/inc/easyrule.inc:306 etc/inc/easyrule.inc:329 etc/inc/easyrule.inc:337 +#: etc/inc/easyrule.inc:341 +msgid "Invalid protocol for pass rule:" +msgstr "Geçiş kuralı için geçersiz protokol:" + +#: etc/inc/easyrule.inc:309 etc/inc/easyrule.inc:332 etc/inc/easyrule.inc:340 +#: etc/inc/easyrule.inc:344 +msgid "Tried to pass invalid source IP:" +msgstr "Geçiş için geçersiz kaynak IP adresi denendi:" + +#: etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:335 etc/inc/easyrule.inc:343 +#: etc/inc/easyrule.inc:347 +msgid "Tried to pass invalid destination IP:" +msgstr "Geçiş için geçersiz hedef IP adresi denendi:" + +#: etc/inc/easyrule.inc:316 etc/inc/easyrule.inc:339 etc/inc/easyrule.inc:347 +#: etc/inc/easyrule.inc:351 +msgid "Missing destination port:" +msgstr "Hedef port eksik:" + +#: etc/inc/easyrule.inc:319 etc/inc/easyrule.inc:342 etc/inc/easyrule.inc:350 +#: etc/inc/easyrule.inc:354 +msgid "Tried to pass invalid destination port:" +msgstr "Geçiş için geçersiz hedef port adresi denendi:" + +#: etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:349 etc/inc/easyrule.inc:357 +#: etc/inc/easyrule.inc:361 +msgid "Successfully added pass rule!" +msgstr "Geçiş kuralı başarılı bir şekilde eklendi !" + +#: etc/inc/easyrule.inc:328 etc/inc/easyrule.inc:351 etc/inc/easyrule.inc:359 +#: etc/inc/easyrule.inc:363 +msgid "Failed to add pass rule." +msgstr "Geçiş kuralı ekleme işlemi başarısız oldu." + +#: etc/inc/easyrule.inc:331 etc/inc/easyrule.inc:354 etc/inc/easyrule.inc:362 +#: etc/inc/easyrule.inc:366 +msgid "Missing parameters for pass rule." +msgstr "Geçiş kuralı için parametre(ler) eksik." + +#: etc/inc/easyrule.inc:333 etc/inc/easyrule.inc:356 etc/inc/easyrule.inc:364 +#: etc/inc/easyrule.inc:368 +msgid "Unknown pass error." +msgstr "Bilinmeyen geçiş hatası." + +#: etc/inc/filter_log.inc:164 etc/inc/filter_log.inc:167 +#: etc/inc/filter_log.inc:191 +#, php-format +msgid "" +"There was a error parsing rule: %s. Please report to mailing list or forum." +msgstr "" +"Kural ayrıştırılırken bir hata oluştu:%s Lütfen eposta listesine ya da " +"foruma rapor ediniz." + +#: etc/inc/filter_log.inc:208 etc/inc/filter_log.inc:210 +#: etc/inc/filter_log.inc:213 etc/inc/filter_log.inc:237 +#, php-format +msgid "Service %1$s/%2$s: %3$s" +msgstr "Hizmet %1$s/%2$s: %3$s" + +#: etc/inc/gwlb.inc:230 etc/inc/gwlb.inc:237 etc/inc/gwlb.inc:242 +#: etc/inc/gwlb.inc:242 +#, php-format +msgid "" +"Removing static route for monitor %1$s and adding a new route through %2$s" +msgstr "" +"İzlenmesi için %1$s sabit yönlendirmesi siliniyor ve yerine %2$s " +"yönlendirmesi ekleniyor." + +#: etc/inc/gwlb.inc:501 etc/inc/gwlb.inc:727 etc/inc/gwlb.inc:750 +#, php-format +msgid "MONITOR: %s is down, removing from routing group" +msgstr "İZLEME: %s kapalı, yönlendirme grubundan kaldırılıyor." + +#: etc/inc/gwlb.inc:505 etc/inc/gwlb.inc:731 etc/inc/gwlb.inc:754 +#, php-format +msgid "MONITOR: %s has packet loss, removing from routing group" +msgstr "İZLEME: %s paket kaybı var, yönlendirme grubundan kaldırılıyor." + +#: etc/inc/gwlb.inc:509 etc/inc/gwlb.inc:735 etc/inc/gwlb.inc:758 +#, php-format +msgid "MONITOR: %s has high latency, removing from routing group" +msgstr "İZLEME: %s gecikme oranı yüksek, yönlendirme grubundan kaldırılıyor." + +#: etc/inc/gwlb.inc:526 etc/inc/gwlb.inc:752 etc/inc/gwlb.inc:775 +msgid "Gateways status could not be determined, considering all as up/active." +msgstr "" +"Ağ Geçitlerinin durumu belirlenemedi, hepsinin etkin/çalışır durumda " +"olduğunu gözden geçirin." + +#: etc/inc/gwlb.inc:580 etc/inc/gwlb.inc:809 etc/inc/gwlb.inc:835 +#: etc/inc/gwlb.inc:844 +#, php-format +msgid "Updating gateway group gateway for %1$s - new gateway is %2$s" +msgstr "" +"%1$s için Grup geçidi geçit adresi güncelleniyor, yeni geçit adresi %2$s" + +#: etc/inc/ipsec.inc:39 etc/inc/ipsec.inc:39 +msgid "My IP address" +msgstr "IP adresim" + +#: etc/inc/ipsec.inc:40 etc/inc/ipsec.inc:49 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:114 +#: usr/local/www/diag_logs_vpn.php:178 +#: usr/local/www/status_captiveportal.php:160 +#: usr/local/www/services_captiveportal.php:602 +#: usr/local/www/services_captiveportal.php:623 +#: usr/local/www/services_captiveportal.php:642 +#: usr/local/www/services_captiveportal.php:661 +#: usr/local/www/services_captiveportal_ip.php:117 +#: usr/local/www/services_captiveportal_ip_edit.php:195 +#: usr/local/www/services_dhcp.php:891 +#: usr/local/www/services_dhcp_edit.php:221 +#: usr/local/www/services_dnsmasq_edit.php:80 +#: usr/local/www/services_dnsmasq_edit.php:156 +#: usr/local/www/vpn_pptp_users.php:99 +#: usr/local/www/vpn_pptp_users_edit.php:160 usr/local/www/diag_arp.php:313 +#: usr/local/www/status_dhcp_leases.php:318 +#: usr/local/www/system_advanced_network.php:226 +#: usr/local/www/vpn_ipsec_phase2.php:635 usr/local/www/vpn_l2tp_users.php:102 +#: usr/local/www/vpn_l2tp_users_edit.php:168 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:211 +#: usr/local/www/diag_logs_vpn.php:177 +#: usr/local/www/services_captiveportal.php:638 +#: usr/local/www/services_captiveportal.php:659 +#: usr/local/www/services_captiveportal.php:681 +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/status_dhcp_leases.php:339 +#: usr/local/www/services_dhcp.php:929 usr/local/www/vpn_ipsec_phase2.php:661 +#: usr/local/www/services_dhcp_edit.php:224 +#: usr/local/www/services_dnsmasq_edit.php:212 +#: usr/local/www/services_captiveportal_ip.php:115 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137 +#: usr/local/www/vpn_l2tp_users.php:103 +#: usr/local/www/services_captiveportal.php:636 +#: usr/local/www/services_captiveportal.php:657 +#: usr/local/www/services_captiveportal.php:679 +#: usr/local/www/services_captiveportal.php:698 +#: usr/local/www/status_dhcp_leases.php:341 +#: usr/local/www/services_captiveportal_ip_edit.php:193 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/vpn_ipsec_phase2.php:757 +#: usr/local/www/vpn_pptp_users_edit.php:161 +#: usr/local/www/services_dhcp_edit.php:223 +#: usr/local/www/vpn_l2tp_users_edit.php:169 +#: usr/local/www/vpn_pptp_users.php:100 +#: usr/local/www/services_captiveportal_ip_edit.php:187 +#: usr/local/www/diag_arp.php:313 usr/local/www/vpn_pptp_users.php:100 +#: usr/local/www/services_captiveportal_ip.php:115 +#: usr/local/www/services_dhcp_edit.php:351 +#: usr/local/www/services_dhcp.php:1152 usr/local/www/vpn_l2tp_users.php:103 +#: usr/local/www/status_captiveportal.php:146 +#: usr/local/www/services_captiveportal.php:637 +#: usr/local/www/services_captiveportal.php:658 +#: usr/local/www/services_captiveportal.php:680 +#: usr/local/www/services_captiveportal.php:699 +#: usr/local/www/status_dhcp_leases.php:341 +#: usr/local/www/vpn_l2tp_users_edit.php:169 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:212 +#: usr/local/www/diag_logs_vpn.php:177 +#: usr/local/www/vpn_pptp_users_edit.php:161 +#: usr/local/www/system_advanced_network.php:226 +#: usr/local/www/vpn_ipsec_phase2.php:778 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137 +#: etc/inc/ipsec.inc:40 etc/inc/ipsec.inc:49 +msgid "IP address" +msgstr "IP adresi" + +#: etc/inc/ipsec.inc:41 etc/inc/ipsec.inc:50 +#: usr/local/www/system_camanager.php:476 +#: usr/local/www/system_certmanager.php:589 +#: usr/local/www/system_certmanager.php:672 +#: usr/local/www/system_certmanager.php:705 +#: usr/local/www/system_certmanager.php:838 +#: usr/local/www/system_camanager.php:477 +#: usr/local/www/system_camanager.php:500 +#: usr/local/www/system_certmanager.php:730 +#: usr/local/www/system_certmanager.php:879 etc/inc/ipsec.inc:41 +#: etc/inc/ipsec.inc:50 +msgid "Distinguished name" +msgstr "Ayrılmış isim" + +#: etc/inc/ipsec.inc:42 etc/inc/ipsec.inc:51 etc/inc/ipsec.inc:42 +#: etc/inc/ipsec.inc:51 +msgid "User distinguished name" +msgstr "Kullanıcı ayrılmış isim" + +#: etc/inc/ipsec.inc:43 etc/inc/ipsec.inc:52 etc/inc/ipsec.inc:43 +#: etc/inc/ipsec.inc:52 +msgid "ASN.1 distinguished Name" +msgstr "ASN.1 ayrılmış isim" + +#: etc/inc/ipsec.inc:44 etc/inc/ipsec.inc:53 etc/inc/ipsec.inc:44 +#: etc/inc/ipsec.inc:53 +msgid "KeyID tag" +msgstr "AnahtarID etiketi" + +#: etc/inc/ipsec.inc:45 usr/local/www/services_dhcp.php:722 +#: usr/local/www/fbegin.inc:128 usr/local/www/services_dhcpv6.php:648 +#: usr/local/www/fbegin.inc:145 usr/local/www/services_dhcp.php:760 +#: usr/local/www/services_dhcpv6.php:741 usr/local/www/fbegin.inc:154 +#: usr/local/www/services_dhcp.php:942 usr/local/www/services_dhcpv6.php:672 +#: usr/local/www/services_dhcp_edit.php:451 +#: usr/local/www/services_dhcp.php:955 usr/local/www/services_dhcpv6.php:689 +#: usr/local/www/fbegin.inc:146 etc/inc/ipsec.inc:45 +msgid "Dynamic DNS" +msgstr "Dinamik DNS" + +#: etc/inc/ipsec.inc:48 etc/inc/ipsec.inc:48 +msgid "Peer IP address" +msgstr "Eş Ip adresi" + +#: etc/inc/ipsec.inc:256 usr/local/www/vpn_ipsec.php:206 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase2.php:255 usr/local/www/vpn_ipsec.php:217 +#: usr/local/www/vpn_ipsec_phase2.php:268 etc/inc/ipsec.inc:281 +#: usr/local/www/vpn_ipsec.php:216 usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec.php:222 usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase2.php:316 etc/inc/ipsec.inc:289 +msgid "Mobile Client" +msgstr "Mobil İstemci" + +#: etc/inc/ipsec.inc:258 usr/local/www/interfaces_bridge_edit.php:428 +#: usr/local/www/firewall_nat_edit.php:797 +#: usr/local/www/firewall_nat_edit.php:828 usr/local/www/interfaces.php:1032 +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1385 +#: usr/local/www/interfaces.php:1491 usr/local/www/interfaces.php:1567 +#: usr/local/www/vpn_ipsec_phase2.php:435 +#: usr/local/www/interfaces_bridge_edit.php:437 +#: usr/local/www/vpn_ipsec_phase2.php:461 +#: usr/local/www/firewall_nat_edit.php:805 +#: usr/local/www/firewall_nat_edit.php:836 usr/local/www/interfaces.php:1118 +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1489 +#: usr/local/www/interfaces.php:1597 etc/inc/ipsec.inc:283 +#: usr/local/www/system_advanced_misc.php:386 +#: usr/local/www/interfaces_bridge_edit.php:438 +#: usr/local/www/vpn_ipsec_phase2.php:527 +#: usr/local/www/vpn_ipsec_phase2.php:563 +#: usr/local/www/firewall_nat_edit.php:804 +#: usr/local/www/firewall_nat_edit.php:835 usr/local/www/interfaces.php:1106 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1477 +#: usr/local/www/interfaces.php:1585 usr/local/www/firewall_nat_edit.php:799 +#: usr/local/www/firewall_nat_edit.php:830 +#: usr/local/www/diag_system_pftop.php:155 +#: usr/local/www/system_advanced_misc.php:398 +#: usr/local/www/interfaces_bridge_edit.php:439 +#: usr/local/www/vpn_ipsec_phase2.php:584 usr/local/www/interfaces.php:1120 +#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1490 +#: usr/local/www/interfaces.php:1595 etc/inc/ipsec.inc:292 +msgid "None" +msgstr "Hiçbiri" + +#: etc/inc/meta.inc:68 etc/inc/meta.inc:68 +#, php-format +msgid "list_phpfiles: unable to examine path %s\n" +msgstr "liste_phpdosyaları: %s yolu denetlenemedi.\n" + +#: etc/inc/meta.inc:99 etc/inc/meta.inc:99 +#, php-format +msgid "unable to read %s\n" +msgstr "%s okumak mümkün değil.\n" + +#: etc/inc/meta.inc:132 etc/inc/meta.inc:132 +#, php-format +msgid "error: tag mismatch ( %1$s != %2$s ) in '%3$s'%4$s" +msgstr "Hata: Etiket uyumsuzluğu ( %1$s != %2$s ) içinde '%3$s'%4$s" + +#: etc/inc/meta.inc:143 etc/inc/meta.inc:143 +#, php-format +msgid "warning: tag %1$s has no data in '%2$s'%3$s" +msgstr "Uyarı: '%2$s'%3$s içerisinde etiket %1$s bilgisi yok." + +#: etc/inc/meta.inc:163 etc/inc/meta.inc:163 +#, php-format +msgid "warning: tag %1$s has malformed data in '%2$s'%3$s" +msgstr "Uyarı: '%2$s'%3$s içerisinde %1$s etiketi kusur içeriyor." + +#: etc/inc/meta.inc:185 etc/inc/meta.inc:185 +#, php-format +msgid "warning: tag %1$s has invalid data in '%2$s'%3$s" +msgstr "Uyarı: '%2$s'%3$s içerisinde %1$s etiketi geçersiz veri içeriyor." + +#: etc/inc/priv.defs.inc:10 etc/inc/priv.defs.inc:10 +msgid "WebCfg - All pages" +msgstr "WebCfg - Tüm Sayfalar" + +#: etc/inc/priv.defs.inc:11 etc/inc/priv.defs.inc:11 +msgid "Allow access to all pages" +msgstr "Tüm sayfalara erişimi açar" + +#: etc/inc/priv.defs.inc:16 etc/inc/priv.defs.inc:16 +msgid "WebCfg - Status: CARP page" +msgstr "WebCfg - Durum: CARP (yük aktarma) sayfası" + +#: etc/inc/priv.defs.inc:17 etc/inc/priv.defs.inc:17 +msgid "Allow access to the 'Status: CARP' page." +msgstr "'Durum: CARP (Yük aktarma)' sayfasına erişime izin verir." + +#: etc/inc/priv.defs.inc:22 etc/inc/priv.defs.inc:22 +msgid "WebCfg - Crash reporter" +msgstr "Hata raporlayıcısı" + +#: etc/inc/priv.defs.inc:23 etc/inc/priv.defs.inc:23 +msgid "Uploads crash reports to pfSense and or deletes crash reports." +msgstr "Çakılma raporlarını PfSense' ye raporlar veya siler." + +#: etc/inc/priv.defs.inc:28 etc/inc/priv.defs.inc:28 +msgid "WebCfg - Diagnostics: ARP Table page" +msgstr "WebCfg - Araçlar: ARP Tablosu sayfası" + +#: etc/inc/priv.defs.inc:29 etc/inc/priv.defs.inc:29 +msgid "Allow access to the 'Diagnostics: ARP Table' page." +msgstr "'Araçlar: ARP Tablosu' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:34 etc/inc/priv.defs.inc:34 +msgid "WebCfg - Diagnostics: Authentication page" +msgstr "Webcfg - Araçlar: Kimlik Doğrulama sayfası" + +#: etc/inc/priv.defs.inc:35 etc/inc/priv.defs.inc:35 +msgid "Allow access to the 'Diagnostics: Authentication' page." +msgstr "'Araçlar: Kimlik Doğrulama' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:40 etc/inc/priv.defs.inc:40 +msgid "WebCfg - Diagnostics: Backup/restore page" +msgstr "Webcfg - Araçlar: Sistem Yedekle/ Geri Dön sayfası" + +#: etc/inc/priv.defs.inc:41 etc/inc/priv.defs.inc:41 +msgid "Allow access to the 'Diagnostics: Backup/restore' page." +msgstr "'Araçlar: Sistem Yedekle/ Geri Dön' sayfasına erişimi mümkün kılar." + +#: etc/inc/priv.defs.inc:46 etc/inc/priv.defs.inc:46 +msgid "WebCfg - Diagnostics: Configuration History page" +msgstr "Webcfg - Araçlar: Yapılandırma Geçmişi sayfası" + +#: etc/inc/priv.defs.inc:47 etc/inc/priv.defs.inc:47 +msgid "Allow access to the 'Diagnostics: Configuration History' page." +msgstr "'Araçlar: Yapılandırma Geçmişi' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:52 etc/inc/priv.defs.inc:52 +msgid "WebCfg - Diagnostics: Factory defaults page" +msgstr "Webcfg - Araçlar: Fabrika ayarları sayfası" + +#: etc/inc/priv.defs.inc:53 etc/inc/priv.defs.inc:53 +msgid "Allow access to the 'Diagnostics: Factory defaults' page." +msgstr "'Araçlar: Fabrika ayarları' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:58 etc/inc/priv.defs.inc:58 +msgid "WebCfg - Diagnostics: Show States page" +msgstr "webcfg - Araçlar: Durumları görüntüleme sayfası" + +#: etc/inc/priv.defs.inc:59 etc/inc/priv.defs.inc:59 +msgid "Allow access to the 'Diagnostics: Show States' page." +msgstr "'Araçlar: Durumları görüntüleme' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:64 etc/inc/priv.defs.inc:70 etc/inc/priv.defs.inc:70 +msgid "WebCfg - Status: IPsec page" +msgstr "Webcfg - Durum: IPsec sayfası" + +#: etc/inc/priv.defs.inc:65 etc/inc/priv.defs.inc:71 etc/inc/priv.defs.inc:71 +msgid "Allow access to the 'Status: IPsec' page." +msgstr "'Durum: IPsec' sayfasına erişmeye izin ver." + +#: etc/inc/priv.defs.inc:70 etc/inc/priv.defs.inc:76 etc/inc/priv.defs.inc:76 +msgid "WebCfg - Status: IPsec: SAD page" +msgstr "WebCfg - Durum: IPsec: SAD sayfası" + +#: etc/inc/priv.defs.inc:71 etc/inc/priv.defs.inc:77 etc/inc/priv.defs.inc:77 +msgid "Allow access to the 'Status: IPsec: SAD' page." +msgstr "'Durum: IPsec: SAD' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:76 etc/inc/priv.defs.inc:82 etc/inc/priv.defs.inc:82 +msgid "WebCfg - Status: IPsec: SPD page" +msgstr "WebCfg - Durum: IPsec: SPD sayfası" + +#: etc/inc/priv.defs.inc:77 etc/inc/priv.defs.inc:83 etc/inc/priv.defs.inc:83 +msgid "Allow access to the 'Status: IPsec: SPD' page." +msgstr "'Durum: IPsec: SPD' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:82 etc/inc/priv.defs.inc:88 etc/inc/priv.defs.inc:88 +msgid "WebCfg - Diag IPsec XML page" +msgstr "Webcfg - IPsec: XML incele sayfası" + +#: etc/inc/priv.defs.inc:83 etc/inc/priv.defs.inc:89 etc/inc/priv.defs.inc:89 +msgid "Allow access to the 'Diag IPsec XML' page." +msgstr "'IPsec: XML incele' sayfasına erişimi mümkün kılar." + +#: etc/inc/priv.defs.inc:88 etc/inc/priv.defs.inc:184 +#: etc/inc/priv.defs.inc:220 etc/inc/priv.defs.inc:226 +#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:238 +#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:94 +#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:250 +#: etc/inc/priv.defs.inc:94 etc/inc/priv.defs.inc:208 +#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:250 +msgid "WebCfg - Diagnostics: System Activity" +msgstr "Webcfg - Araçlar: Sistem Kayıtları sayfası" + +#: etc/inc/priv.defs.inc:89 etc/inc/priv.defs.inc:185 +#: etc/inc/priv.defs.inc:221 etc/inc/priv.defs.inc:227 +#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:239 +#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:95 +#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:251 +#: etc/inc/priv.defs.inc:95 etc/inc/priv.defs.inc:209 +#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:251 +msgid "Allows access to the 'Diagnostics: System Activity' page" +msgstr "'''Araçlar: Sistem Kayıtları' sayfasına erişim izni verir" + +#: etc/inc/priv.defs.inc:94 etc/inc/priv.defs.inc:100 +#: etc/inc/priv.defs.inc:100 +msgid "WebCfg - Diagnostics: Logs: System page" +msgstr "Webcfg - Araçlar: Sistem Kayıtları: Sistem sayfası" + +#: etc/inc/priv.defs.inc:95 etc/inc/priv.defs.inc:101 +#: etc/inc/priv.defs.inc:101 +msgid "Allow access to the 'Diagnostics: Logs: System' page." +msgstr "'Araçlar: Sistem Kayıtları: Sistem' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:100 etc/inc/priv.defs.inc:106 +#: etc/inc/priv.defs.inc:106 +msgid "WebCfg - Status: System logs: Portal Auth page" +msgstr "Webcfg - Durum: Sistem kayıtları: Portal Kimlik Doğrulama sayfası" + +#: etc/inc/priv.defs.inc:101 etc/inc/priv.defs.inc:107 +#: etc/inc/priv.defs.inc:107 +msgid "Allow access to the 'Status: System logs: Portal Auth' page." +msgstr "" +"'Durum: Sistem kayıtları: Portal Kimlik Doğrulama' sayfasına erişim izni " +"verir." + +#: etc/inc/priv.defs.inc:106 etc/inc/priv.defs.inc:112 +#: etc/inc/priv.defs.inc:112 +msgid "WebCfg - Diagnostics: Logs: DHCP page" +msgstr "Webcfg - Araçlar: Sistem Kayıtları: DHCP sayfası" + +#: etc/inc/priv.defs.inc:107 etc/inc/priv.defs.inc:113 +#: etc/inc/priv.defs.inc:113 +msgid "Allow access to the 'Diagnostics: Logs: DHCP' page." +msgstr "'Araçlar: Sistem Kayıtları: DHCP' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:112 etc/inc/priv.defs.inc:118 +#: etc/inc/priv.defs.inc:118 +msgid "WebCfg - Diagnostics: Logs: Firewall page" +msgstr "WebCfg - Araçlar: Sistem Kayıtları: Güvenlik duvarı sayfası" + +#: etc/inc/priv.defs.inc:113 etc/inc/priv.defs.inc:119 +#: etc/inc/priv.defs.inc:119 +msgid "Allow access to the 'Diagnostics: Logs: Firewall' page." +msgstr "" +"'Araçlar: Sistem Kayıtları: Güvenlik duvarı' sayfasını kullanıcının " +"erişimine açar." + +#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:136 +#: etc/inc/priv.defs.inc:142 etc/inc/priv.defs.inc:142 +msgid "WebCfg - Hidden: No longer included page" +msgstr "WebCfg - Gizli: Artık dahil edilmiyor sayfası" + +#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:137 +#: etc/inc/priv.defs.inc:143 etc/inc/priv.defs.inc:143 +msgid "Allow access to the 'Hidden: No longer included' page." +msgstr "'Gizli: Artık dahil edilmiyor' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:142 +#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:148 +#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:148 +#: etc/inc/priv.defs.inc:166 +msgid "WebCfg - Status: System logs: IPsec VPN page" +msgstr "WebCfg - Durum: Sistem Kayıtları: IPsec VPN sayfası" + +#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:143 +#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:149 +#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:149 +#: etc/inc/priv.defs.inc:167 +msgid "Allow access to the 'Status: System logs: IPsec VPN' page." +msgstr "'Durum: Sistem Kayıtları: Ipsec VPN' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:130 +msgid "WebCfg - Status: System logs: OpenNTPD page" +msgstr "WebCfg - Durum: Sistem Kayıtları: OpenNTPD sayfası" + +#: etc/inc/priv.defs.inc:131 +msgid "Allow access to the 'Status: System logs: OpenNTPD' page." +msgstr "" +"'Durum: Sistem Kayıtları: OpenNTPD' sayfasını kullanıcının erişime açar." + +#: etc/inc/priv.defs.inc:136 etc/inc/priv.defs.inc:154 +#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:160 +msgid "WebCfg - Status: System logs: OpenVPN page" +msgstr "WebCfg - Durum: Sistem Kayıtları: OpenVPN sayfası" + +#: etc/inc/priv.defs.inc:137 etc/inc/priv.defs.inc:155 +#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:161 +msgid "Allow access to the 'Status: System logs: OpenVPN' page." +msgstr "'Durum: Sistem Kayıtları: OpenVPN' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:166 +#: etc/inc/priv.defs.inc:172 etc/inc/priv.defs.inc:172 +msgid "WebCfg - Status: System logs: Load Balancer page" +msgstr "WebCfg - Durum: Sistem Kayıtları: Yük Dengeleyici sayfası" + +#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:167 +#: etc/inc/priv.defs.inc:173 etc/inc/priv.defs.inc:173 +msgid "Allow access to the 'Status: System logs: Load Balancer' page." +msgstr "" +"'Durum: Sistem Kayıtları: Yük Dengeleyici' sayfasını kullanıcının erişimine " +"açar." + +#: etc/inc/priv.defs.inc:154 etc/inc/priv.defs.inc:172 +#: etc/inc/priv.defs.inc:178 etc/inc/priv.defs.inc:178 +msgid "WebCfg - Diagnostics: Logs: Settings page" +msgstr "WebCfg - Araçlar: Sistem Kayıtları: Ayarlar sayfası" + +#: etc/inc/priv.defs.inc:155 etc/inc/priv.defs.inc:173 +#: etc/inc/priv.defs.inc:179 etc/inc/priv.defs.inc:179 +msgid "Allow access to the 'Diagnostics: Logs: Settings' page." +msgstr "'Araçlar: Sistem Kayıtları: Ayarlar' sayfasını erişilebilir kılar." + +#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:178 +#: etc/inc/priv.defs.inc:184 etc/inc/priv.defs.inc:184 +msgid "WebCfg - Diagnostics: Logs: VPN page" +msgstr "WebCfg - Araçlar: Sistem Kayıtları: VPN sayfası" + +#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:179 +#: etc/inc/priv.defs.inc:185 etc/inc/priv.defs.inc:185 +msgid "Allow access to the 'Diagnostics: Logs: VPN' page." +msgstr "'Araçlar: Sistem Kayıtları: VPN' sayfasını kullanıcının erişimine açar." + +#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:184 +#: etc/inc/priv.defs.inc:190 etc/inc/priv.defs.inc:190 +msgid "WebCfg - Diagnostics: NanoBSD" +msgstr "WebCfg - Araçlar: NanoBSD" + +#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:185 +#: etc/inc/priv.defs.inc:191 etc/inc/priv.defs.inc:191 +msgid "Allow access to the 'Diagnostics: NanoBSD' page." +msgstr "'Araçlar: NanoBSD' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:172 etc/inc/priv.defs.inc:190 +#: etc/inc/priv.defs.inc:196 etc/inc/priv.defs.inc:196 +msgid "WebCfg - Diagnostics: Packet Capture page" +msgstr "WebCfg - Araçlar Paket Yakalama sayfası" + +#: etc/inc/priv.defs.inc:173 etc/inc/priv.defs.inc:191 +#: etc/inc/priv.defs.inc:197 etc/inc/priv.defs.inc:197 +msgid "Allow access to the 'Diagnostics: Packet Capture' page." +msgstr "'Araçlar Paket Yakalama' sayfasını kullanıcının erişimine açar." + +#: etc/inc/priv.defs.inc:178 etc/inc/priv.defs.inc:196 +#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:202 +msgid "WebCfg - Diagnostics: Patterns page" +msgstr "WebCfg - Araçlar: Örüntüler sayfası" + +#: etc/inc/priv.defs.inc:179 etc/inc/priv.defs.inc:197 +#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:203 +msgid "Allow access to the 'Diagnostics: Patterns' page." +msgstr "'Araçlar: Örüntüler' sayfasına erişime izin verir." + +#: etc/inc/priv.defs.inc:190 etc/inc/priv.defs.inc:208 +#: etc/inc/priv.defs.inc:214 etc/inc/priv.defs.inc:214 +msgid "WebCfg - Diagnostics: Ping page" +msgstr "WebCfg - Araçlar: Ping sayfası" + +#: etc/inc/priv.defs.inc:191 etc/inc/priv.defs.inc:209 +#: etc/inc/priv.defs.inc:215 etc/inc/priv.defs.inc:215 +msgid "Allow access to the 'Diagnostics: Ping' page." +msgstr "'Araçlar: Ping' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:196 etc/inc/priv.defs.inc:214 +#: etc/inc/priv.defs.inc:220 etc/inc/priv.defs.inc:220 +msgid "WebCfg - Status: Package logs page" +msgstr "WebCfg - Durum: Paket Kayıtları sayfası" + +#: etc/inc/priv.defs.inc:197 etc/inc/priv.defs.inc:215 +#: etc/inc/priv.defs.inc:221 etc/inc/priv.defs.inc:221 +msgid "Allow access to the 'Status: Package logs' page." +msgstr "'Durum: Paket Kayıtları' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:220 +#: etc/inc/priv.defs.inc:226 etc/inc/priv.defs.inc:226 +msgid "WebCfg - Diagnostics: Reset state page" +msgstr "WebCfg - Araçlar: Durum sıfırla sayfası" + +#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:221 +#: etc/inc/priv.defs.inc:227 etc/inc/priv.defs.inc:227 +msgid "Allow access to the 'Diagnostics: Reset state' page." +msgstr "'Araçlar: Durum sıfırla' sayfasının erişimine izin ver." + +#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:226 +#: etc/inc/priv.defs.inc:232 etc/inc/priv.defs.inc:232 +msgid "WebCfg - Diagnostics: Routing tables page" +msgstr "WebCfg - Araçlar: Yönlendirme tablosu sayfası" + +#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:227 +#: etc/inc/priv.defs.inc:233 etc/inc/priv.defs.inc:233 +msgid "Allow access to the 'Diagnostics: Routing tables' page." +msgstr "'Araçlar: Yönlendirme tablosu' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:214 etc/inc/priv.defs.inc:232 +#: etc/inc/priv.defs.inc:238 etc/inc/priv.defs.inc:238 +msgid "WebCfg - Diagnostics: States Summary page" +msgstr "WebCfg - Araçlar: Durum Özetleri sayfası" + +#: etc/inc/priv.defs.inc:215 etc/inc/priv.defs.inc:233 +#: etc/inc/priv.defs.inc:239 etc/inc/priv.defs.inc:239 +msgid "Allow access to the 'Diagnostics: States Summary' page." +msgstr "'Araçlar: Durum Özetleri' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:232 etc/inc/priv.defs.inc:250 +#: etc/inc/priv.defs.inc:256 etc/inc/priv.defs.inc:256 +msgid "WebCfg - Diagnostics: PF Table IP addresses" +msgstr "WebCfg - Araçlar: PF Tablosu IP adresleri" + +#: etc/inc/priv.defs.inc:233 etc/inc/priv.defs.inc:251 +#: etc/inc/priv.defs.inc:257 etc/inc/priv.defs.inc:257 +msgid "Allow access to the 'Diagnostics: Tables' page." +msgstr "'Araçlar: Tablolar' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:238 etc/inc/priv.defs.inc:256 +#: etc/inc/priv.defs.inc:262 etc/inc/priv.defs.inc:262 +msgid "WebCfg - Diagnostics: Traceroute page" +msgstr "WebCfg - Araçlar: Tracerouter sayfası" + +#: etc/inc/priv.defs.inc:239 etc/inc/priv.defs.inc:257 +#: etc/inc/priv.defs.inc:263 etc/inc/priv.defs.inc:263 +msgid "Allow access to the 'Diagnostics: Traceroute' page." +msgstr "'Araçlar: Traceroute' sayfasını erişilebilir yapar." + +#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:262 +#: etc/inc/priv.defs.inc:268 etc/inc/priv.defs.inc:268 +msgid "WebCfg - Diagnostics: Edit FIle" +msgstr "WebCfg - Araçlar: Dosya Düzenle" + +#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:263 +#: etc/inc/priv.defs.inc:269 etc/inc/priv.defs.inc:269 +msgid "Allow access to the 'Diagnostics: Edit File' page." +msgstr "'Araçlar: Dosya Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:250 etc/inc/priv.defs.inc:268 +#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:276 +msgid "WebCfg - Diagnostics: Command page" +msgstr "WebCfg - Araçlar: Komut sayfası" + +#: etc/inc/priv.defs.inc:251 etc/inc/priv.defs.inc:269 +#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:277 +msgid "Allow access to the 'Diagnostics: Command' page." +msgstr "'Araçlar: Komut' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:256 etc/inc/priv.defs.inc:274 +#: etc/inc/priv.defs.inc:280 +msgid "WebCfg - Hidden: Exec Raw page" +msgstr "WebCfg - Gizli: Çalıştır sayfası" + +#: etc/inc/priv.defs.inc:257 etc/inc/priv.defs.inc:275 +#: etc/inc/priv.defs.inc:281 +msgid "Allow access to the 'Hidden: Exec Raw' page." +msgstr "'Gizli: Çalıştır' sayfasını erişilebilir kılar." + +#: etc/inc/priv.defs.inc:262 etc/inc/priv.defs.inc:280 +#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:282 +msgid "WebCfg - Firewall: Aliases page" +msgstr "WebCfg - Güvenlik duvarı: Gruplar sayfası" + +#: etc/inc/priv.defs.inc:263 etc/inc/priv.defs.inc:281 +#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:283 +msgid "Allow access to the 'Firewall: Aliases' page." +msgstr "'Güvenlik duvarı: Gruplar' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:268 etc/inc/priv.defs.inc:286 +#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:288 +msgid "WebCfg - Firewall: Alias: Edit page" +msgstr "WebCfg - Güvenlik duvarı: Grup: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:269 etc/inc/priv.defs.inc:287 +#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:289 +msgid "Allow access to the 'Firewall: Alias: Edit' page." +msgstr "'Güvenlik duvarı: Grup: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:292 +#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:294 +msgid "WebCfg - Firewall: Alias: Import page" +msgstr "WebCfg - Güvenlik duvarı: Grup: Toplu içe aktarım sayfası" + +#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:293 +#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:295 +msgid "Allow access to the 'Firewall: Alias: Import' page." +msgstr "'Güvenlik duvarı: Grup: Toplu içe aktarım' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:280 etc/inc/priv.defs.inc:298 +#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:300 +msgid "WebCfg - Firewall: NAT: Port Forward page" +msgstr "WebCfg - Güvenlik duvarı: NAT: Port Yönlendirme sayfası" + +#: etc/inc/priv.defs.inc:281 etc/inc/priv.defs.inc:299 +#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:301 +msgid "Allow access to the 'Firewall: NAT: Port Forward' page." +msgstr "'Güvenlik duvarı: NAT: Port Yönlendirme' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:304 +#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:306 +msgid "WebCfg - Firewall: NAT: 1:1 page" +msgstr "WebCfg - Güvenlik duvarı: NAT: 1:1 sayfası" + +#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:305 +#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:307 +msgid "Allow access to the 'Firewall: NAT: 1:1' page." +msgstr "'Güvenlik duvarı: NAT: 1:1' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:310 +#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:312 +msgid "WebCfg - Firewall: NAT: 1:1: Edit page" +msgstr "WebCfg - Güvenlik duvarı: NAT: 1:1: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:311 +#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:313 +msgid "Allow access to the 'Firewall: NAT: 1:1: Edit' page." +msgstr "'Güvenlik duvarı: NAT: 1:1: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:316 +#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:318 +msgid "WebCfg - Firewall: NAT: Port Forward: Edit page" +msgstr "WebCfg - Güvenlik duvarı: NAT: Port Yönlendirme: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:317 +#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:319 +msgid "Allow access to the 'Firewall: NAT: Port Forward: Edit' page." +msgstr "" +"'Güvenlik duvarı: NAT: Port Yönlendirme: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:322 +#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:324 +msgid "WebCfg - Firewall: NAT: Outbound page" +msgstr "WebCfg - Güvenlik duvarı: NAT: Dışarı giden sayfası" + +#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:323 +#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:325 +msgid "Allow access to the 'Firewall: NAT: Outbound' page." +msgstr "'Güvenlik duvarı: NAT: Dışarı giden' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:328 +#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:330 +msgid "WebCfg - Firewall: NAT: Outbound: Edit page" +msgstr "WebCfg - Güvenlik duvarı: NAT: Dışarı giden: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:329 +#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:331 +msgid "Allow access to the 'Firewall: NAT: Outbound: Edit' page." +msgstr "" +"'Güvenlik duvarı: NAT: Dışarı giden: Düzenle' sayfasını erişilebilir yapar." + +#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:334 +#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:336 +msgid "WebCfg - Firewall: Rules page" +msgstr "WebCfg - Güvenlik Duvarı: Kurallar sayfası" + +#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:335 +#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:337 +msgid "Allow access to the 'Firewall: Rules' page." +msgstr "'Güvenlik Duvarı: Kurallar' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:340 +#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:342 +msgid "WebCfg - Firewall: Rules: Edit page" +msgstr "WebCfg - Güvenlik Duvarı: Kurallar: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:341 +#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:343 +msgid "Allow access to the 'Firewall: Rules: Edit' page." +msgstr "'Güvenlik Duvarı: Kurallar: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:346 +#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:348 +msgid "WebCfg - Firewall: Schedules page" +msgstr "WebCfg - Güvenlik Duvarı: Zamanlamalar sayfası" + +#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:347 +#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:349 +msgid "Allow access to the 'Firewall: Schedules' page." +msgstr "'Güvenlik Duvarı: Zamanlamalar' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:352 +#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:354 +msgid "WebCfg - Firewall: Schedules: Edit page" +msgstr "WebCfg - Güvenlik Duvarı: Zamanlamalar: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:353 +#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:355 +msgid "Allow access to the 'Firewall: Schedules: Edit' page." +msgstr "'Güvenlik Duvarı: Zamanlamalar: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:358 +#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:360 +msgid "WebCfg - Firewall: Traffic Shaper page" +msgstr "WebCfg - Güvenlik Duvarı: Trafik Şekillendirici sayfası" + +#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:359 +#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:361 +msgid "Allow access to the 'Firewall: Traffic Shaper' page." +msgstr "'Güvenlik Duvarı: Trafik Şekillendirici' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:364 +#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:366 +msgid "WebCfg - Firewall: Traffic Shaper: Layer7 page" +msgstr "WebCfg - Güvenlik Duvarı: Trafik Şekillendirici: Layer7 sayfası" + +#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:365 +#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:367 +msgid "Allow access to the 'Firewall: Traffic Shaper: Layer7' page." +msgstr "" +"'Güvenlik Duvarı: Trafik Şekillendirici: Layer7' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:370 +#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:372 +msgid "WebCfg - Firewall: Traffic Shaper: Queues page" +msgstr "WebCfg - Güvenlik Duvarı: Trafik Şekillendirici: Kuyruklar sayfası" + +#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:371 +#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:373 +msgid "Allow access to the 'Firewall: Traffic Shaper: Queues' page." +msgstr "" +"'Güvenlik Duvarı: Trafik Şekillendirici: Kuyruklar' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:376 +#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:378 +msgid "WebCfg - Firewall: Traffic Shaper: Limiter page" +msgstr "WebCfg - Güvenlik Duvarı: Trafik Şekillendirici: Limitleyici sayfası" + +#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:377 +#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:379 +msgid "Allow access to the 'Firewall: Traffic Shaper: Limiter' page." +msgstr "" +"'Güvenlik Duvarı: Trafik Şekillendirici: Limitleyici' sayfasını erişime " +"açar." + +#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:382 +#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:384 +msgid "WebCfg - Firewall: Traffic Shaper: Wizard page" +msgstr "WebCfg - Güvenlik Duvarı: Trafik Şekillendirici: Sihirbaz sayfası" + +#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:383 +#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:385 +msgid "Allow access to the 'Firewall: Traffic Shaper: Wizard' page." +msgstr "" +"'Güvenlik duvarı: Trafik Şekillendirici: Sihirbaz' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:388 +#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:390 +msgid "WebCfg - Firewall: Virtual IP Addresses page" +msgstr "WebCfg - Güvenlik Duvarı: Sanal IP Adresleri sayfası" + +#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:389 +#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:391 +msgid "Allow access to the 'Firewall: Virtual IP Addresses' page." +msgstr "" +"'Güvenlik Duvarı: Sanal IP Adresleri' sayfasını kullanıcının erişimine açar." + +#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:394 +#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:396 +msgid "WebCfg - Firewall: Virtual IP Address: Edit page" +msgstr "WebCfg - Güvenlik Duvarı: Sanal IP Adresi: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:395 +#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:397 +msgid "Allow access to the 'Firewall: Virtual IP Address: Edit' page." +msgstr "" +"Güvenlik Duvarı: Sanal IP Adresi: Düzenle' sayfasını erişilebilir kılar." + +#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:400 +#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:402 +msgid "WebCfg - AJAX: Get Service Providers" +msgstr "WebCfg - AJAX: Servis Sağlayıcıları Al" + +#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:401 +#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:403 +msgid "Allow access to the 'AJAX: Service Providers' page." +msgstr "'AJAX: Servis Sağlayıcıları Al' sayfasını kullanıcının erişimine açar." + +#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:406 +#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:408 +msgid "WebCfg - AJAX: Get Stats" +msgstr "WebCfg - AJAX: İstatistikler" + +#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:407 +#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:409 +msgid "Allow access to the 'AJAX: Get Stats' page." +msgstr "'AJAX: İstatistikleri Al' sayfasının erişimine izin ver." + +#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:412 +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:414 +msgid "WebCfg - Diagnostics: Interface Traffic page" +msgstr "WebCfg - Araçlar: Arabirim Trafiği sayfası" + +#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:413 +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:415 +msgid "Allow access to the 'Diagnostics: Interface Traffic' page." +msgstr "'Araçlar: Arabirim Trafiği' sayfasını erişilebilir yapar." + +#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:814 +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:832 +#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:838 +#: etc/inc/priv.defs.inc:420 etc/inc/priv.defs.inc:846 +msgid "WebCfg - Diagnostics: CPU Utilization page" +msgstr "WebCfg - Araçlar: İşlemci Kaynak Kullanımı sayfası" + +#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:815 +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:833 +#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:839 +#: etc/inc/priv.defs.inc:421 etc/inc/priv.defs.inc:847 +msgid "Allow access to the 'Diagnostics: CPU Utilization' page." +msgstr "" +"'Araçlar: İşlemci Kaynak Kullanımı' sayfasını kullanıcının erişimine açar." + +#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:424 +#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:426 +msgid "WebCfg - Diagnostics: Halt system page" +msgstr "WebCfg - Araçlar: Sistemi kapat sayfası" + +#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:425 +#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:427 +msgid "Allow access to the 'Diagnostics: Halt system' page." +msgstr "'Araçlar: Sistemi Kapat' sayfasını erişilebilir kılar." + +#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:430 +#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:432 +msgid "WebCfg - Required for javascript page" +msgstr "WebCfg - Javascript sayfası için gerekli" + +#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:431 +#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:433 +msgid "Allow access to the 'Required for javascript' page." +msgstr "'Javascript için gerekli' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:436 +#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:438 +msgid "WebCfg - XMLRPC Interface Stats page" +msgstr "WebCfg - XMLRPC Arabirim İstatistikleri sayfası" + +#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:437 +#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:439 +msgid "Allow access to the 'XMLRPC Interface Stats' page." +msgstr "'XMLRPC Arabirim İstatistikleri' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:442 +#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:444 +msgid "WebCfg - System: Login / Logout page / Dashboard" +msgstr "WebCfg - Sistem: Anasayfa / Oturum açma / Oturum kapatma" + +#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:443 +#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:445 +msgid "Allow access to the 'System: Login / Logout' page and Dashboard." +msgstr "" +"'Sistem: Oturum açma / Oturum kapatma' sayfalarına ve anasayfaya erişimi " +"açar." + +#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:448 +#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:450 +msgid "WebCfg - Interfaces: WAN page" +msgstr "WebCfg - Arabirimler: WAN sayfası" + +#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:449 +#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:451 +msgid "Allow access to the 'Interfaces' page." +msgstr "'Arabirimler' sayfasını erişilebilir kılar." + +#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:454 +#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:456 +msgid "WebCfg - Interfaces: Assign network ports page" +msgstr "WebCfg - Arabirimler: Network portlarını ata sayfası" + +#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:455 +#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:457 +msgid "Allow access to the 'Interfaces: Assign network ports' page." +msgstr "'Arabirimler: Network portlarını ata' sayfasına erişme izni ver." + +#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:460 +#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:462 +msgid "WebCfg - Interfaces: Bridge page" +msgstr "WebCfg - Arabirimler: Köprü sayfası" + +#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:461 +#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:463 +msgid "Allow access to the 'Interfaces: Bridge' page." +msgstr "'Arabirimler: Köprü' sayfasına erişimi mümkün kılar." + +#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:466 +#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:468 +msgid "WebCfg - Interfaces: Bridge edit page" +msgstr "WebCfg - Arabirimler: Köprü: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:467 +#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:469 +msgid "Allow access to the 'Interfaces: Bridge : Edit' page." +msgstr "'Arabirimler: Köprü: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:472 +#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:474 +msgid "WebCfg - Interfaces: GIF page" +msgstr "WebCfg - Arabirimler: GIF sayfası" + +#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:473 +#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:475 +msgid "Allow access to the 'Interfaces: GIF' page." +msgstr "'Arabirimler: GIF' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:478 +#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:480 +msgid "WebCfg - Interfaces: GIF: Edit page" +msgstr "WebCfg - Arabirimler: GIF: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:479 +#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:481 +msgid "Allow access to the 'Interfaces: GIF: Edit' page." +msgstr "'Arabirimler: GIF: Düzenle' sayfasına erişim verir." + +#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:484 +#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:486 +msgid "WebCfg - Interfaces: GRE page" +msgstr "WebCfg - Arabirimler: GRE sayfası" + +#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:485 +#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:487 +msgid "Allow access to the 'Interfaces: GRE' page." +msgstr "'Arabirimler: GRE' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:490 +#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:492 +msgid "WebCfg - Interfaces: GRE: Edit page" +msgstr "WebCfg - Arabirimler: GRE: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:491 +#: etc/inc/priv.defs.inc:497 etc/inc/priv.defs.inc:493 +msgid "Allow access to the 'Interfaces: GRE: Edit' page." +msgstr "'Arabirimler: GRE: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:496 +#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:498 +msgid "WebCfg - Interfaces: Groups page" +msgstr "WebCfg - Arabirimler: Gruplar sayfası" + +#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:497 +#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:499 +msgid "Create interface groups" +msgstr "Arabirim grupları oluştur" + +#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:502 +#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:504 +msgid "WebCfg - Interfaces: Groups: Edit page" +msgstr "WebCfg - Arabirimler: Gruplar: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:503 +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:505 +msgid "Edit Interface groups" +msgstr "Arabirim gruplarını düzenle" + +#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:508 +#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:510 +msgid "WebCfg - Interfaces: LAGG: page" +msgstr "WebCfg - Arabirimler: LAGG sayfası" + +#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:497 +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:515 +#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:511 +#: etc/inc/priv.defs.inc:517 +msgid "Edit Interface LAGG" +msgstr "Arabirim LAGG düzenle" + +#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:514 +#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:516 +msgid "WebCfg - Interfaces: LAGG: Edit page" +msgstr "WebCfg - Arabirimler: LAGG: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:520 +#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:522 +msgid "WebCfg - Interfaces: ppps page" +msgstr "WebCfg - Arabirimler: PPPler sayfası" + +#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:521 +#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:523 +msgid "Allow access to the 'Interfaces: ppps' page." +msgstr "'Arabirimler: PPPler' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:526 +#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:528 +msgid "WebCfg - Interfaces: PPPs: Edit page" +msgstr "WebCfg - Arabirimler: PPPler: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:527 +#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:529 +msgid "Allow access to the 'Interfaces: PPPs: Edit' page." +msgstr "'Arabirimler: PPPler: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:532 +#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:534 +msgid "WebCfg - Interfaces: QinQ page" +msgstr "WebCfg - Arabirimler: QinQ sayfası" + +#: etc/inc/priv.defs.inc:515 etc/inc/priv.defs.inc:533 +#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:535 +msgid "Allow access to the 'Interfaces: QinQ' page." +msgstr "'Arabirimler: QinQ' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:538 +#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:540 +msgid "WebCfg - Interfaces: QinQ: Edit page" +msgstr "WebCfg - Arabirimler: QinQ: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:539 +#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:541 +msgid "Edit Interface qinq" +msgstr "Arabirim qinq düzenle" + +#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:544 +#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:546 +msgid "WebCfg - Interfaces: VLAN page" +msgstr "WebCfg - Arabirimler: VLAN sayfası" + +#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:545 +#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:547 +msgid "Allow access to the 'Interfaces: VLAN' page." +msgstr "'Arabirimler: VLAN' sayfasına erişim açar." + +#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:550 +#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:552 +msgid "WebCfg - Interfaces: VLAN: Edit page" +msgstr "WebCfg - Arabirimler: VLAN: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:551 +#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:553 +msgid "Allow access to the 'Interfaces: VLAN: Edit' page." +msgstr "'Arabirimler: VLAN: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:556 +#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:558 +msgid "WebCfg - Interfaces: Wireless page" +msgstr "WebCfg - Arabirimler: Kablosuz sayfası" + +#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:557 +#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:559 +msgid "Allow access to the 'Interfaces: Wireless' page." +msgstr "'Arabirimler: Kablosuz' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:562 +#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:564 +msgid "WebCfg - Interfaces: Wireless edit page" +msgstr "WebCfg - Arabirimler: Kablosuz: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:563 +#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:565 +msgid "Allow access to the 'Interfaces: Wireless : Edit' page." +msgstr "'Arabirimler: Kablosuz: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:568 +#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:570 +msgid "WebCfg - System: License page" +msgstr "WebCfg - Sistem: Lisans sayfası" + +#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:569 +#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:571 +msgid "Allow access to the 'System: License' page." +msgstr "'Sistem: Lisans' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:574 +#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:576 +msgid "WebCfg - Services: Load Balancer: Monitors page" +msgstr "WebCfg - Servisler: Yük Dengeleyici: İzlemeler sayfası" + +#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:575 +#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:577 +msgid "Allow access to the 'Services: Load Balancer: Monitors' page." +msgstr "'Servisler: Yük Dengeleyici: İzlemeler' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:580 +#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:582 +msgid "WebCfg - Services: Load Balancer: Monitor: Edit page" +msgstr "WebCfg - Servisler: Yük Dengeleyici: İzlemeler: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:581 +#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:583 +msgid "Allow access to the 'Services: Load Balancer: Monitor: Edit' page." +msgstr "" +"'Servisler: Yük Dengeleyici: İzlemeler: Düzenle' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:586 +#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:588 +msgid "WebCfg - Load Balancer: Pool page" +msgstr "WebCfg - Yük Dengeleyici: Havuzlar sayfası" + +#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:587 +#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:589 +msgid "Allow access to the 'Load Balancer: Pool' page." +msgstr "'Yük Dengeleyici: Havuzlar' sayfasına erişim açar." + +#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:592 +#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:594 +msgid "WebCfg - Load Balancer: Pool: Edit page" +msgstr "WebCfg - Yük Dengeleyici: Havuz: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:593 +#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:595 +msgid "Allow access to the 'Load Balancer: Pool: Edit' page." +msgstr "'Yük Dengeleyici: Havuz: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:598 +#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:600 +msgid "WebCfg - Services: Load Balancer: Relay Actions page" +msgstr "WebCfg - Servisler: Yük Dengeleyici: Aktarma Eylemi sayfası" + +#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:599 +#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:601 +msgid "Allow access to the 'Services: Load Balancer: Relay Actions' page." +msgstr "" +"'Servisler: Yük Dengeleyici: Aktarma Eylemleri' sayfasına erişmeye izin " +"verir." + +#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:604 +#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:606 +msgid "WebCfg - Services: Load Balancer: Relay Action: Edit page" +msgstr "WebCfg - Servisler: Yük Dengeleyici: Aktarma Eylemi: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:605 +#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:607 +msgid "Allow access to the 'Services: Load Balancer: Relay Action: Edit' page." +msgstr "" +"'Servisler: Yük Dengeleyici: Aktarım Eylemi: Düzenle' sayfasını erişime " +"açar." + +#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:610 +#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:612 +msgid "WebCfg - Services: Load Balancer: Relay Protocols page" +msgstr "WebCfg - Servisler: Yük Dengeleyici: Aktarım Protokolleri sayfası" + +#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:611 +#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:613 +msgid "Allow access to the 'Services: Load Balancer: Relay Protocols' page." +msgstr "" +"'Servisler: Yük Dengeleyici: Aktarım Protokolleri' sayfasına erişme izni " +"verir." + +#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:616 +#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:618 +msgid "WebCfg - Services: Load Balancer: Relay Protocol: Edit page" +msgstr "WebCfg - Servisler: Yük Dengeleyici: Aktarım Protokolü: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:617 +#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:619 +msgid "" +"Allow access to the 'Services: Load Balancer: Relay Protocol: Edit' page." +msgstr "" +"'Servisler: Yük Dengeleyici: Aktarım Protokolü: Düzenle' sayfasını erişime " +"açar." + +#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:622 +#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:624 +msgid "WebCfg - Services: Load Balancer: Virtual Servers page" +msgstr "WebCfg - Servisler: Yük Dengeleyici: Sanal Sunucular sayfası" + +#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:623 +#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:625 +msgid "Allow access to the 'Services: Load Balancer: Virtual Servers' page." +msgstr "" +"'Servisler: Yük Dengeleyici: Sanal Sunucular' sayfasını kullanıcının " +"erişimine açar." + +#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:628 +#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:630 +msgid "WebCfg - Load Balancer: Virtual Server: Edit page" +msgstr "WebCfg - Servisler: Yük Dengeleyici: Sanal Sunucu: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:629 +#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:631 +msgid "Allow access to the 'Load Balancer: Virtual Server: Edit' page." +msgstr "" +"'Servisler: Yük Dengeleyici: Sanal Sunucular: Düzenleme' sayfasının " +"erişimine izin ver." + +#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:634 +#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:636 +msgid "WebCfg - Package: Settings page" +msgstr "WebCfg - Paket: Ayarlar sayfası" + +#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:635 +#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:637 +msgid "Allow access to the 'Package: Settings' page." +msgstr "'Paket: Ayarlar' sayfasını erişilebilir hale getirir." + +#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:640 +#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:642 +msgid "WebCfg - Package: Edit page" +msgstr "WebCfg - Paket: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:641 +#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:643 +msgid "Allow access to the 'Package: Edit' page." +msgstr "'Paket: Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:646 +#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:648 +msgid "WebCfg - System: Package Manager page" +msgstr "WebCfg - Sistem: Paket Yöneticisi sayfası" + +#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:647 +#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:649 +msgid "Allow access to the 'System: Package Manager' page." +msgstr "'Sistem: Paket Yöneticisi' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:652 +#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:654 +msgid "WebCfg - System: Package Manager: Install Package page" +msgstr "WebCfg - Sistem: Paket Yönetici: Paket Kur sayfası" + +#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:653 +#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:655 +msgid "Allow access to the 'System: Package Manager: Install Package' page." +msgstr "'Sistem: Paket Yöneticisi: Paket Kur' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:658 +#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:660 +msgid "WebCfg - System: Package Manager: Installed page" +msgstr "WebCfg - Sistem: Paket Yöneticisi: Kurulu Paketler sayfası" + +#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:659 +#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:661 +msgid "Allow access to the 'System: Package Manager: Installed' page." +msgstr "'Sistem: Paket Yöneticisi: Kurulu Paketler sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:664 +#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:666 +msgid "WebCfg - Packages: Settings page" +msgstr "WebCfg - Paketler: Ayarlar sayfası" + +#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:665 +#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:667 +msgid "Allow access to the 'Packages: Settings' page." +msgstr "'Paketler: Ayarlar' sayfasına erişim açar." + +#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:670 +#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:672 +msgid "WebCfg - Diagnostics: Reboot System page" +msgstr "WebCfg - Araçlar: Yeniden Başlat sayfası" + +#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:671 +#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:673 +msgid "Allow access to the 'Diagnostics: Reboot System' page." +msgstr "'Araçlar: Yeniden Başlat' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:676 +#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:678 +msgid "WebCfg - Diagnostics: Restart HTTPD : System page" +msgstr "WebCfg - Araçlar: (HTTPD) Web sunucuyu yeniden başlat: Sistem sayfası" + +#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:677 +#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:679 +msgid "Allow access to the 'Diagnostics: Restart HTTPD: System' page." +msgstr "" +"'Araçlar: (HTTPD) Web sunucuyu yeniden başlat: Sistem' sayfasına erişimi " +"açar." + +#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:682 +#: etc/inc/priv.defs.inc:688 etc/inc/priv.defs.inc:684 +msgid "WebCfg - Services: Captive portal page" +msgstr "WebCfg - Servisler: Hizmet Portalı sayfası" + +#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:683 +#: etc/inc/priv.defs.inc:689 etc/inc/priv.defs.inc:685 +msgid "Allow access to the 'Services: Captive portal' page." +msgstr "'Servisler: Hizmet portalı' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:688 +#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:690 +msgid "WebCfg - Services: Captive portal: File Manager page" +msgstr "WebCfg - Servisler: Hizmet portalı: Dosya Yöneticisi sayfası" + +#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:689 +#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:691 +msgid "Allow access to the 'Services: Captive portal: File Manager' page." +msgstr "'Servisler: Hizmet portalı: Dosya yöneticisi' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:688 +#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:706 +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712 +#: etc/inc/priv.defs.inc:696 etc/inc/priv.defs.inc:708 +msgid "WebCfg - Services: Captive portal: Allowed IPs page" +msgstr "WebCfg - Servisler: Hizmet portalı: İzinli IPler sayfası" + +#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:689 +#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:707 +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713 +#: etc/inc/priv.defs.inc:697 etc/inc/priv.defs.inc:709 +msgid "Allow access to the 'Services: Captive portal: Allowed IPs' page." +msgstr "'Servisler: Hizmet portalı: İzinli IPler' sayfasına erişim verir." + +#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:694 +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712 +#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:718 +#: etc/inc/priv.defs.inc:702 etc/inc/priv.defs.inc:714 +msgid "WebCfg - Services: Captive portal: Edit Allowed IPs page" +msgstr "WebCfg - Servisler: Hizmet portalı: İznli IPler düzenle sayfası" + +#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:695 +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713 +#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:719 +#: etc/inc/priv.defs.inc:703 etc/inc/priv.defs.inc:715 +msgid "Allow access to the 'Services: Captive portal: Edit Allowed IPs' page." +msgstr "" +"'Servisler: Hizmet portalı: İznli IPler düzenle' sayfasına erişim izni " +"verir." + +#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:718 +#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:720 +msgid "WebCfg - Services: Captive portal: Mac Addresses page" +msgstr "WebCfg - Servisler: Hizmet portalı: MAC Adresleri sayfası" + +#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:719 +#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:721 +msgid "Allow access to the 'Services: Captive portal: Mac Addresses' page." +msgstr "'Servisler: Hizmet portalı: MAC Adresleri' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:724 +#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:726 +msgid "WebCfg - Services: Captive portal: Edit MAC Addresses page" +msgstr "WebCfg - Servisler: Hizmet portalı: MAC Adresi Düzenle sayfası" + +#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:725 +#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:727 +msgid "" +"Allow access to the 'Services: Captive portal: Edit MAC Addresses' page." +msgstr "'Servisler: Hizmet portalı: MAC Adresi Düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:712 etc/inc/priv.defs.inc:730 +#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:744 +msgid "WebCfg - Services: Captive portal Vouchers page" +msgstr "WebCfg - Servisler: Hizmet Portalı: Biletler sayfası" + +#: etc/inc/priv.defs.inc:713 etc/inc/priv.defs.inc:731 +#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:745 +msgid "Allow access to the 'Services: Captive portal Vouchers' page." +msgstr "'Servisler: Hizmet portalı: Biletler' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:742 +#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:756 +msgid "WebCfg - Services: DHCP server page" +msgstr "WebCfg - Servisler: DHCP sunucu sayfası" + +#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:743 +#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:757 +msgid "Allow access to the 'Services: DHCP server' page." +msgstr "'Servisler: DHCP Sunucu' sayfasını kullanıcının erişimine açar." + +#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:748 +#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:762 +msgid "WebCfg - Services: DHCP Server : Edit static mapping page" +msgstr "WebCfg - Servisler: DHCP Sunucu: Rezervasyon düzenle sayfası" + +#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:749 +#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:763 +msgid "Allow access to the 'Services: DHCP Server : Edit static mapping' page." +msgstr "" +"'Servisler: DHCP Sunucu: Rezervasyon düzenle' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:754 +#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:768 +msgid "WebCfg - Services: DHCP Relay page" +msgstr "WevCfg - Servisler: DHCP Aracısı sayfası" + +#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:755 +#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:769 +msgid "Allow access to the 'Services: DHCP Relay' page." +msgstr "'Servisler: DHCP Aracısı' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:742 etc/inc/priv.defs.inc:760 +#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:774 +msgid "WebCfg - Services: DHCPv6 Relay page" +msgstr "WebCfg - Servisler: DHCPv6 Aracısı sayfası" + +#: etc/inc/priv.defs.inc:743 etc/inc/priv.defs.inc:761 +#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:775 +msgid "Allow access to the 'Services: DHCPv6 Relay' page." +msgstr "'Servisler: DHCPv6 Aracısı' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:766 +#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:780 +msgid "WebCfg - Services: DNS Forwarder page" +msgstr "WebCfg - Servisler: DNS Yönlendirici sayfası" + +#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:767 +#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:781 +msgid "Allow access to the 'Services: DNS Forwarder' page." +msgstr "'Servisler: DNS Yönlendirici' sayfasına erişime olanak verir." + +#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:772 +#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:786 +msgid "WebCfg - Services: DNS Forwarder: Edit Domain Override page" +msgstr "" +"WebCfg - Servisler: DNS Yönlendirici: Etki alanı Üzerine yazmayı Düzenleme " +"sayfası " + +#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:773 +#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:787 +msgid "" +"Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page." +msgstr "" +"'Servisler: DNS Yönlendirici: Etki alanı Üzerine yazmayı Düzenleme' " +"sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:778 +#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:792 +msgid "WebCfg - Services: DNS Forwarder: Edit host page" +msgstr "WebCfg - Servisler: DNS Yönlendirici: Host düzenle sayfası" + +#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:779 +#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:793 +msgid "Allow access to the 'Services: DNS Forwarder: Edit host' page." +msgstr "'Servisler: DNS Yönlendirici: Host düzenle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:784 +#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:798 +msgid "WebCfg - Services: Dynamic DNS clients page" +msgstr "WebCfg - Servisler: Dinamik DNS istemcisi sayfası" + +#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:785 +#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:799 +msgid "Allow access to the 'Services: Dynamic DNS clients' page." +msgstr "'Servisler: Dinamik DNS istemcileri' sayfasına erişim verir." + +#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:790 +#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:804 +msgid "WebCfg - Services: Dynamic DNS client page" +msgstr "WebCfg - Servisler: Dinamik DNS istemci sayfası" + +#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:791 +#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:805 +msgid "Allow access to the 'Services: Dynamic DNS client' page." +msgstr "'Servisler: Dinamik DNS istemcileri' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:796 +#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:810 +msgid "WebCfg - Services: Igmpproxy page" +msgstr "WebCfg - Servisler: IGMP Vekil sayfası" + +#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:797 +#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:811 +msgid "Allow access to the 'Services: Igmpproxy' page." +msgstr "'Servisler: IGMP Vekil' sayfasına erişim açar." + +#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:802 +#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:816 +msgid "WebCfg - Firewall: Igmpproxy: Edit page" +msgstr "WebCfg - Güvenlik duvarı: IGMP Vekil: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:803 +#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:817 +msgid "Allow access to the 'Firewall: Igmpproxy' page." +msgstr "'Güvenlik duvarı: IGMP Vekil' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:808 +#: etc/inc/priv.defs.inc:814 etc/inc/priv.defs.inc:822 +msgid "WebCfg - Services: RFC 2136 clients page" +msgstr "WebCfg - Servisler: RFC 2136 istemcileri sayfası" + +#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:809 +#: etc/inc/priv.defs.inc:815 etc/inc/priv.defs.inc:823 +msgid "Allow access to the 'Services: RFC 2136 clients' page." +msgstr "'Servisler: RFC 2136 istemcileri' sayfasını erişilebilir kılar." + +#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:814 +#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:828 +msgid "WebCfg - Services: SNMP page" +msgstr "WebCfg - Servisler: SNMP sayfası" + +#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:815 +#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:829 +msgid "Allow access to the 'Services: SNMP' page." +msgstr "'Servisler: SNMP' sayfasını erişilebilir kılar." + +#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:820 +#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:834 +msgid "WebCfg - Services: Wake on LAN page" +msgstr "WebCfg - Servisler: LAN ile Uyan sayfası" + +#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:821 +#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:835 +msgid "Allow access to the 'Services: Wake on LAN' page." +msgstr "'Servisler: LAN ile Uyan' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:826 +#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:840 +msgid "WebCfg - Services: Wake on LAN: Edit page" +msgstr "WebCfg - Servisler: LAN ile Uyan: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:827 +#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:841 +msgid "Allow access to the 'Services: Wake on LAN: Edit' page." +msgstr "'Servisler: LAN ile Uyan: Düzenle' sayfasını erişilebilir yapar." + +#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:838 +#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:852 +msgid "WebCfg - Hidden: Detailed Status page" +msgstr "WebCfg - Gizli: Detaylı Durum sayfası" + +#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:839 +#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:853 +msgid "Allow access to the 'Hidden: Detailed Status' page." +msgstr "'Gizli: Detaylı Durum' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:844 +#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:858 +msgid "WebCfg - Status: Captive portal page" +msgstr "WebCfg - Durum: Hizmet Portalı sayfası" + +#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:845 +#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:859 +msgid "Allow access to the 'Status: Captive portal' page." +msgstr "'Durum: Hizmet Portalı sayfası' sayfasına erişim izni sağlar." + +#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:850 +#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:864 +msgid "WebCfg - Status: Captive portal test Vouchers page" +msgstr "WebCfg - Durum: Hizmet Portalı Test Biletleri sayfası" + +#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:851 +#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:865 +msgid "Allow access to the 'Status: Captive portal Test Vouchers' page." +msgstr "'Durum: Hizmet portalı: Test Biletleri' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:838 etc/inc/priv.defs.inc:856 +#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:870 +msgid "WebCfg - Status: Captive portal Voucher Rolls page" +msgstr "WebCfg - Durum: Hizmet Portalı Bilet Dağıtımı sayfası" + +#: etc/inc/priv.defs.inc:839 etc/inc/priv.defs.inc:857 +#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:871 +msgid "Allow access to the 'Status: Captive portal Voucher Rolls' page." +msgstr "'Durum: Hizmet portalı Bilet Dağıtımı' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:862 +#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:876 +msgid "WebCfg - Status: Captive portal Vouchers page" +msgstr "WebCfg - Durum: Hizmet Portalı Biletler sayfası" + +#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:863 +#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:877 +msgid "Allow access to the 'Status: Captive portal Vouchers' page." +msgstr "'Durum: Hizmet Portalı: Biletler' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:868 +#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:882 +msgid "WebCfg - Status: DHCP leases page" +msgstr "WebCfg - Durum: DHCP kiraları sayfası" + +#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:869 +#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:883 +msgid "Allow access to the 'Status: DHCP leases' page." +msgstr "'Durum DHCP Kiraları' sayfasına erişim verir." + +#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:874 +#: etc/inc/priv.defs.inc:880 etc/inc/priv.defs.inc:888 +msgid "WebCfg - Status: Filter Reload Status page" +msgstr "WebCfg - Durum: Filtre Yeniden Yükleme Durumu sayfası" + +#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:875 +#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:889 +msgid "Allow access to the 'Status: Filter Reload Status' page." +msgstr "'Durum: Filtre Yeniden Yükleme Durumu' sayfasına erişim yetkisini açar." + +#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:880 +#: etc/inc/priv.defs.inc:886 etc/inc/priv.defs.inc:894 +msgid "WebCfg - Status: Gateway Groups page" +msgstr "WebCfg - Durum: Ağ Geçidi Grupları sayfası" + +#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:881 +#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:895 +msgid "Allow access to the 'Status: Gateway Groups' page." +msgstr "'Durum: Ağ Geçidi Grupları' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:886 +#: etc/inc/priv.defs.inc:892 etc/inc/priv.defs.inc:900 +msgid "WebCfg - Status: Gateways page" +msgstr "WebCfg - Durum: Ağ Geçitleri sayfası" + +#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:887 +#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:901 +msgid "Allow access to the 'Status: Gateways' page." +msgstr "'Durum: Ağ Geçitleri' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:892 +#: etc/inc/priv.defs.inc:898 etc/inc/priv.defs.inc:906 +msgid "WebCfg - Status: Traffic Graph page" +msgstr "WebCfg - Durum: Trafik Grafikleri sayfası" + +#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:893 +#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:907 +msgid "Allow access to the 'Status: Traffic Graph' page." +msgstr "'Durum: Trafik Grafikleri' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:899 +#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:913 +msgid "WebCfg - Status: CPU load page" +msgstr "WebCfg - Durum: İşlemci Yükü sayfası" + +#: etc/inc/priv.defs.inc:882 etc/inc/priv.defs.inc:900 +#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:914 +msgid "Allow access to the 'Status: CPU load' page." +msgstr "'Durum: İşlemci Yükü' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:905 +#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:919 +msgid "WebCfg - Status: Interfaces page" +msgstr "WebCfg - Durum: Arabirimler sayfası" + +#: etc/inc/priv.defs.inc:888 etc/inc/priv.defs.inc:906 +#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:920 +msgid "Allow access to the 'Status: Interfaces' page." +msgstr "'Durum: Arabirimler' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:911 +#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:925 +msgid "WebCfg - Status: Load Balancer: Pool page" +msgstr "WebCfg - Durum: Yük Dengeleyici: Havuz sayfası" + +#: etc/inc/priv.defs.inc:894 etc/inc/priv.defs.inc:912 +#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:926 +msgid "Allow access to the 'Status: Load Balancer: Pool' page." +msgstr "'Durum: Yük Dengeleyici: Havuz' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:917 +#: etc/inc/priv.defs.inc:923 etc/inc/priv.defs.inc:931 +msgid "WebCfg - Status: Load Balancer: Virtual Server page" +msgstr "WebCfg - Durum: Yük Dengeleyici: Sanal Sunucu sayfası" + +#: etc/inc/priv.defs.inc:900 etc/inc/priv.defs.inc:918 +#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:932 +msgid "Allow access to the 'Status: Load Balancer: Virtual Server' page." +msgstr "'Durum: Yük Dengeleyici: Sanal Sunucu' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:923 +#: etc/inc/priv.defs.inc:929 etc/inc/priv.defs.inc:937 +msgid "WebCfg - Status: OpenVPN page" +msgstr "WebCfg - Durum: OpenVPN sayfası" + +#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:924 +#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:938 +msgid "Allow access to the 'Status: OpenVPN' page." +msgstr "'Durum: OpenVPN' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:929 +#: etc/inc/priv.defs.inc:935 etc/inc/priv.defs.inc:943 +msgid "WebCfg - Status: Traffic shaper: Queues page" +msgstr "WebCfg - Durum: Trafik Şekillendirici: Kuyruklar sayfası" + +#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:930 +#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:944 +msgid "Allow access to the 'Status: Traffic shaper: Queues' page." +msgstr "'Durum: Trafik Şekillendirici: Kuyruklar' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:935 +#: etc/inc/priv.defs.inc:941 etc/inc/priv.defs.inc:949 +msgid "WebCfg - Status: RRD Graphs page" +msgstr "WebCfg - Durum: RRD Grafikleri sayfası" + +#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:936 +#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:950 +msgid "Allow access to the 'Status: RRD Graphs' page." +msgstr "'Durum: RRD Grafikleri' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:942 +#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:956 +msgid "WebCfg - Status: RRD Graphs settings page" +msgstr "WebCfg - Durum: RRD Grafikleri: Ayarlar sayfası" + +#: etc/inc/priv.defs.inc:925 etc/inc/priv.defs.inc:943 +#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:957 +msgid "Allow access to the 'Status: RRD Graphs: settings' page." +msgstr "'Durum: RRD Grafikleri: Ayarlar' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:948 +#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:962 +msgid "WebCfg - Status: Services page" +msgstr "WebCfg - Durum: Servisler sayfası" + +#: etc/inc/priv.defs.inc:931 etc/inc/priv.defs.inc:949 +#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:963 +msgid "Allow access to the 'Status: Services' page." +msgstr "'Durum: Servisler' sayfasına erişim yetkisini açar." + +#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:954 +#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:968 +msgid "WebCfg - Status: UPnP Status page" +msgstr "WebCfg - Durum: UPnP Durumu sayfası" + +#: etc/inc/priv.defs.inc:937 etc/inc/priv.defs.inc:955 +#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:969 +msgid "Allow access to the 'Status: UPnP Status' page." +msgstr "'Durum: UPnP Durumu' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:960 +#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:974 +msgid "WebCfg - Status: Wireless page" +msgstr "WebCfg - Durum: Kablosuz sayfası" + +#: etc/inc/priv.defs.inc:943 etc/inc/priv.defs.inc:961 +#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:975 +msgid "Allow access to the 'Status: Wireless' page." +msgstr "'Durum: Kablosuz' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:966 +#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:980 +msgid "WebCfg - System: General Setup page" +msgstr "WebCfg - Sistem: Genel Ayarlar sayfası" + +#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:967 +#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:981 +msgid "Allow access to the 'System: General Setup' page." +msgstr "'Sistem: Genel Ayarlar' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:972 +#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:986 +msgid "WebCfg - System: Advanced: Admin Access Page" +msgstr "WebCfg - Sistem: Gelişmiş: Yönetici Erişimi sayfası" + +#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:973 +#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:987 +msgid "Allow access to the 'System: Advanced: Admin Access' page." +msgstr "'Sistem: Gelişmiş: Yönetici Erişimi' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:978 +#: etc/inc/priv.defs.inc:984 etc/inc/priv.defs.inc:992 +msgid "WebCfg - System: Advanced: Firewall and NAT page" +msgstr "WebCfg - Sistem: Gelişmiş: Güvenlik Duvarı ve NAT sayfası" + +#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:979 +#: etc/inc/priv.defs.inc:985 etc/inc/priv.defs.inc:993 +msgid "Allow access to the 'System: Advanced: Firewall and NAT' page." +msgstr "'Sistem: Gelişmiş: Güvenlik Duvarı ve NAT' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:984 +#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:998 +msgid "WebCfg - System: Advanced: Miscellaneous page" +msgstr "WebCfg - Sistem: Gelişmiş: Diğer sayfası" + +#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:985 +#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:999 +msgid "Allow access to the 'System: Advanced: Miscellaneous' page." +msgstr "'Sistem: Gelişmiş: Diğer' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:990 +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1004 +msgid "WebCfg - System: Advanced: Network page" +msgstr "WebCfg - Sistem: Gelişmiş: Ağ sayfası" + +#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:991 +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1005 +msgid "Allow access to the 'System: Advanced: Networking' page." +msgstr "'Sistem: Gelişmiş: Ağ' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:984 +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1002 +#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1010 +#: etc/inc/priv.defs.inc:1016 +msgid "WebCfg - System: Advanced: Tunables page" +msgstr "WebCfg - Sistem: Gelişmiş: Değişkenler sayfası" + +#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:985 +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1003 +#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1011 +#: etc/inc/priv.defs.inc:1017 +msgid "Allow access to the 'System: Advanced: Tunables' page." +msgstr "'Sistem: Gelişmiş: Değişkenlerr' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:1008 +#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1022 +msgid "WebCfg - System: Authentication Servers" +msgstr "WebCfg - Sistem: Kimlik Doğrulama Sunucuları" + +#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:1009 +#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1023 +msgid "Allow access to the 'System: Authentication Servers' page." +msgstr "'Sistem: Kimlik Doğrulama Sunucuları' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1014 +#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1028 +msgid "WebCfg - System: CA Manager" +msgstr "WebCfg - Sistem: (CA) Sertifika Yöneticisi" + +#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1015 +#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1029 +msgid "Allow access to the 'System: CA Manager' page." +msgstr "'Sistem: (CA) Sertifika Yöneticisi' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:1002 etc/inc/priv.defs.inc:1020 +#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1034 +msgid "WebCfg - System: Certificate Manager" +msgstr "WebCfg - Sistem: Sertifika Yöneticisi" + +#: etc/inc/priv.defs.inc:1003 etc/inc/priv.defs.inc:1021 +#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1035 +msgid "Allow access to the 'System: Certificate Manager' page." +msgstr "'Sistem: Sertifika Yöneticisi' sayfasına erişime izin verir." + +#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1026 +#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1040 +msgid "WebCfg - System: CRL Manager" +msgstr "WebCfg - Sistem: CRL Yönetici" + +#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1027 +#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1041 +msgid "Allow access to the 'System: CRL Manager' page." +msgstr "'Sistem: CRL Yönetici' sayfasının erişimine izin ver." + +#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1032 +#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1046 +msgid "WebCfg - System: Firmware: Manual Update page" +msgstr "WebCfg - Sistem: Üretici yazılımı: Elle Güncelle sayfası" + +#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1033 +#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1047 +msgid "Allow access to the 'System: Firmware: Manual Update' page." +msgstr "" +"'Sistem: Üretici yazılımı: Elle Güncelleme' sayfasına erişim yetkisi verir" + +#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1038 +#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1052 +msgid "WebCfg - System: Firmware: Check For Update page" +msgstr "WebCfg - Sistem: Üretici yazılımı: Güncelleme Kontrolü sayfası" + +#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1039 +#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1053 +msgid "Allow access to the 'System: Firmware: Check For Update' page." +msgstr "" +"'Sistem: Üretici yazılımı: Güncelleme Kontrolü' sayfasına erişim yetkisi " +"verir." + +#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1044 +#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1058 +msgid "WebCfg - System: Firmware: Auto Update page" +msgstr "WebCfg - Sistem: Üretici yazılımı: Otomatik Güncelle sayfası" + +#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1045 +#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1059 +msgid "Allow access to the 'System: Firmware: Auto Update' page." +msgstr "" +"'Sistem: Üretici yazılımı: Otomatik Güncelle' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1050 +#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1064 +msgid "WebCfg - System: Firmware: Settings page" +msgstr "WebCfg - Sistem: Üretici yazılımı: Ayarlar sayfası" + +#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1051 +#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1065 +msgid "Allow access to the 'System: Firmware: Settings' page." +msgstr "'Sistem: Üretici yazılımı: Ayarlar' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1056 +#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1070 +msgid "WebCfg - System: Gateway Groups page" +msgstr "WebCfg - Sistem: Ağ Geçit Grupları sayfası" + +#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1057 +#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1071 +msgid "Allow access to the 'System: Gateway Groups' page." +msgstr "'Sistem: Ağ Geçidi Grupları' sayfasına erişim yetkisini açar." + +#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1062 +#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1076 +msgid "WebCfg - System: Gateways: Edit Gateway Groups page" +msgstr "WebCfg - Sistem: Ağ Geçitleri: Ağ Geçidi Grupları Düzenleme sayfası" + +#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1063 +#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1077 +msgid "Allow access to the 'System: Gateways: Edit Gateway Groups' page." +msgstr "" +"'Sistem: Ağ Geçitleri: Ağ Geçidi Grupları Düzenleme' sayfasına erişim " +"yetkisi verir." + +#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1068 +#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1082 +msgid "WebCfg - System: Gateways page" +msgstr "WebCfg - Sistem: Ağ Geçitleri sayfası" + +#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1069 +#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1083 +msgid "Allow access to the 'System: Gateways' page." +msgstr "'Sistem: Ağ Geçitleri' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1074 +#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1088 +msgid "WebCfg - System: Gateways: Edit Gateway page" +msgstr "WebCfg - Sistem: Ağ Geçitlerini Düzenle sayfası" + +#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1075 +#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1089 +msgid "Allow access to the 'System: Gateways: Edit Gateway' page." +msgstr "" +"'Sistem: Ağ Geçitleri: Ağ Geçitlerini Düzenle' sayfasına erişim yetkisini " +"açar." + +#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1080 +#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1094 +msgid "WebCfg - System: Group manager page" +msgstr "WebCfg - Sistem: Grup Yöneticisi sayfası" + +#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1081 +#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1095 +msgid "Allow access to the 'System: Group manager' page." +msgstr "'Sistem: Grup Yöneticisi' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1086 +#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1100 +msgid "WebCfg - System: Group Manager: Add Privileges page" +msgstr "WebCfg - Sistem: Grup Yöneticisi: Yetki Ekle sayfası" + +#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1087 +#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1101 +msgid "Allow access to the 'System: Group Manager: Add Privileges' page." +msgstr "'Sistem: Grup Yöneticisi: Yeki Ekle' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1092 +#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1106 +msgid "WebCfg - System: Static Routes page" +msgstr "WebCfg - Sistem: Sabit Yönlendirmeler sayfası" + +#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1093 +#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1107 +msgid "Allow access to the 'System: Static Routes' page." +msgstr "'Sistem: Sabit Yönlendirmeler sayfası' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1098 +#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1112 +msgid "WebCfg - System: Static Routes: Edit route page" +msgstr "WebCfg - Sistem: Sabit Yönlendirmeler: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1099 +#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1113 +msgid "Allow access to the 'System: Static Routes: Edit route' page." +msgstr "'Sistem: Sabit Yönlendirmeler: Düzenle' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1104 +#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1118 +msgid "WebCfg - System: User Manager page" +msgstr "WebCfg - Sistem: Kullanıcı Yönetici sayfası" + +#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1105 +#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1119 +msgid "Allow access to the 'System: User Manager' page." +msgstr "'Sistem: Kullanıcı Yönetici' sayfasına erişim olanağı verir." + +#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1110 +#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1124 +msgid "WebCfg - System: User Manager: Add Privileges page" +msgstr "WebCfg - Sistem: Kullanıcı Yöneticisi: Yetki Ekle sayfası" + +#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1111 +#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1125 +msgid "Allow access to the 'System: User Manager: Add Privileges' page." +msgstr "'Sistem: Kullanıcı Yöneticisi: Yetki Ekle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1116 +#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1130 +msgid "WebCfg - System: User Password Manager page" +msgstr "WebCfg - Sistem: Kullanıcı Parola Yönetici sayfası" + +#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1117 +#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1131 +msgid "Allow access to the 'System: User Password Manager' page." +msgstr "'Sistem: Kullanıcı Parola Yönetici' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1122 +#: etc/inc/priv.defs.inc:1128 +msgid "WebCfg - System: User manager: settings page" +msgstr "WebCfg - Sistem: Kullanıcı Yöneticisi: Ayarlar sayfası" + +#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1123 +#: etc/inc/priv.defs.inc:1129 +msgid "Allow access to the 'System: User manager: settings' page." +msgstr "'Sistem: Kullanıcı Yöneticisi: Ayarlar' sayfasını açar." + +#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1128 +#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1142 +msgid "WebCfg - System: User Manager: Settings: Test LDAP page" +msgstr "WebCfg - Sistem: Kullanıcı Yöneticisi: Ayarlar: LDAP Test sayfası" + +#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1129 +#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1143 +msgid "Allow access to the 'System: User Manager: Settings: Test LDAP' page." +msgstr "" +"'Sistem: Kullanıcı Yöneticisi: Ayarlar: LDAP Test' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1134 +#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1148 +msgid "WebCfg - System: Firmware: Manual Update page (progress bar)" +msgstr "" +"WebCfg - Sistem: Üretici yazılımı: Elle Güncelleme sayfası (ilerleme durumu)" + +#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1135 +#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1149 +msgid "" +"Allow access to the 'System: Firmware: Manual Update: Progress bar' page." +msgstr "" +"'Sistem: Üretici yazılımı: Elle Güncelleme sayfası (ilerleme durumu)'nu " +"erişime açar." + +#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1140 +#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1154 +msgid "WebCfg - Hidden: Upload Configuration page" +msgstr "WebCfg - Gizli: Yapılandırma Yükle sayfası." + +#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1141 +#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1155 +msgid "Allow access to the 'Hidden: Upload Configuration' page." +msgstr "'Gizli: Yapılandırma Yükle' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:1128 etc/inc/priv.defs.inc:1146 +#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1160 +msgid "WebCfg - VPN: IPsec page" +msgstr "WebCfg - VPN: IPsec sayfası" + +#: etc/inc/priv.defs.inc:1129 etc/inc/priv.defs.inc:1147 +#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1161 +msgid "Allow access to the 'VPN: IPsec' page." +msgstr "'VPN: IPsec' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1152 +#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1166 +msgid "WebCfg - VPN: IPsec: Pre-Shared Keys List" +msgstr "WebCfg - VPN: IPsec: Ön Paylaşımlı Anahtarlar Listesi" + +#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1153 +#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1167 +msgid "Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page." +msgstr "" +"'VPN: IPsec: Ön Paylaşımlı Anahtarlar Listesi' sayfasına erişim yetkisi " +"verir." + +#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1158 +#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1172 +msgid "WebCfg - VPN: IPsec: Edit Pre-Shared Keys" +msgstr "WebCfg - VPN: IPsec: Ön paylaşımlı Anahtarları Düzenle" + +#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1159 +#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1173 +msgid "Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page." +msgstr "'VPN: IPsec: Ön Paylaşımlı Anahtarı Düzenle' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1164 +#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1178 +msgid "WebCfg - VPN: IPsec: Mobile page" +msgstr "WebCfg - VPN: IPsec: Mobil istemciler sayfası" + +#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1165 +#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1179 +msgid "Allow access to the 'VPN: IPsec: Mobile' page." +msgstr "'VPN: IPsec: Mobil istemciler' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1170 +#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1184 +msgid "WebCfg - VPN: IPsec: Edit Phase 1 page" +msgstr "WebCfg - VPN: IPsec: Aşama 1 düzenle sayfası" + +#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1171 +#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1185 +msgid "Allow access to the 'VPN: IPsec: Edit Phase 1' page." +msgstr "'VPN: IPsec: Aşama 1 Düzenle' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1176 +#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1190 +msgid "WebCfg - VPN: IPsec: Edit Phase 2 page" +msgstr "WebCfg - VPN: IPsec: Aşama 2 düzenle sayfası" + +#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1177 +#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1191 +msgid "Allow access to the 'VPN: IPsec: Edit Phase 2' page." +msgstr "'VPN: IPsec: Aşama 2 Düzenle' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1182 +#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1196 +msgid "WebCfg - VPN: VPN L2TP page" +msgstr "WebCfg - VPN: VPN L2TP sayfası" + +#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1183 +#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1197 +msgid "Allow access to the 'VPN: VPN L2TP' page." +msgstr "'VPN: VPN L2TP' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1188 +#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1202 +msgid "WebCfg - VPN: VPN L2TP : Users page" +msgstr "WebCfg - VPN: VPN L2TP: Kullanıcılar sayfası" + +#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1189 +#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1203 +msgid "Allow access to the 'VPN: VPN L2TP : Users' page." +msgstr "'VPN: VPN L2TP: Kullanıcılar' sayfasını erişime açar." + +#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1194 +#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1208 +msgid "WebCfg - VPN: VPN L2TP : Users : Edit page" +msgstr "WebCfg - VPN: VPN L2TP: Kullanıcılar: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1195 +#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1209 +msgid "Allow access to the 'VPN: VPN L2TP : Users : Edit' page." +msgstr "'VPN: VPN L2TP: Kullanıcılar: Düzenle' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1200 +#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1214 +msgid "WebCfg - OpenVPN: Client page" +msgstr "WebCfg - OpenVPN: İstemci sayfası" + +#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1201 +#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1215 +msgid "Allow access to the 'OpenVPN: Client' page." +msgstr "'OpenVPN: İstemci' sayfasına erişim olanağı verir." + +#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1206 +#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1220 +msgid "WebCfg - OpenVPN: Client Specific Override page" +msgstr "WebCfg - OpenVPN: İstemciye Özel Ayarlar sayfası" + +#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1207 +#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1221 +msgid "Allow access to the 'OpenVPN: Client Specific Override' page." +msgstr "'OpenVPN: İstemciye Özel Ayarlar' sayfasına erişim yetkisini açar." + +#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1212 +#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1226 +msgid "WebCfg - OpenVPN: Server page" +msgstr "WebCfg - OpenVPN: Sunucu sayfası" + +#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1213 +#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1227 +msgid "Allow access to the 'OpenVPN: Server' page." +msgstr "'OpenVPN: Sunucu' sayfasına erişim izni verir." + +#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1218 +#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1232 +msgid "WebCfg - Services: PPPoE Server page" +msgstr "WebCfg - Servisler: PPPoE Sunucu sayfası" + +#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1219 +#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1233 +msgid "Allow access to the 'Services: PPPoE Server' page." +msgstr "'Servisler: PPPoE Sunucu' sayfasına erişim yetkisi verir." + +#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1224 +#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1238 +msgid "WebCfg - Services: PPPoE Server: Edit page" +msgstr "WebCfg - Servisler: PPPoE Sunucu: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1225 +#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1239 +msgid "Allow access to the 'Services: PPPoE Server: Edit' page." +msgstr "'Servisler: PPPoE Sunucu: Düzenle' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1230 +#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1244 +msgid "WebCfg - VPN: VPN PPTP page" +msgstr "WebCfg - VPN: VPN PPTP sayfası" + +#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1231 +#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1245 +msgid "Allow access to the 'VPN: VPN PPTP' page." +msgstr "'VPN: VPN PPTP' sayfasına erişimi açar." + +#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1236 +#: etc/inc/priv.defs.inc:1242 etc/inc/priv.defs.inc:1250 +msgid "WebCfg - VPN: VPN PPTP: Users page" +msgstr "WebCfg - VPN: VPN PPTP: Kullanıcılar sayfası" + +#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1237 +#: etc/inc/priv.defs.inc:1243 etc/inc/priv.defs.inc:1251 +msgid "Allow access to the 'VPN: VPN PPTP: Users' page." +msgstr "'VPN: VPN PPTP: Kullanıcılar' sayfasına erişme olanağı verir." + +#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1242 +#: etc/inc/priv.defs.inc:1248 etc/inc/priv.defs.inc:1256 +msgid "WebCfg - VPN: VPN PPTP: User: Edit page" +msgstr "WebCfg - VPN: VPN PPTP: Kullanıcı: Düzenle sayfası" + +#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1243 +#: etc/inc/priv.defs.inc:1249 etc/inc/priv.defs.inc:1257 +msgid "Allow access to the 'VPN: VPN PPTP: User: Edit' page." +msgstr "'VPN: VPN PPTP: Kullanıcı: Düzenle' sayfasına erişme olanağı verir." + +#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1248 +#: etc/inc/priv.defs.inc:1254 etc/inc/priv.defs.inc:1262 +msgid "WebCfg - pfSense wizard subsystem page" +msgstr "WebCfg - pfSense sihirbaz altsistemi sayfası" + +#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1249 +#: etc/inc/priv.defs.inc:1255 etc/inc/priv.defs.inc:1263 +msgid "Allow access to the 'pfSense wizard subsystem' page." +msgstr "'pfSense sihirbaz altsistemi' sayfasına erişime izin verir." + +#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1254 +#: etc/inc/priv.defs.inc:1260 etc/inc/priv.defs.inc:1268 +msgid "WebCfg - XMLRPC Library page" +msgstr "WebCfg - XMLRPC Kütüphane sayfası" + +#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1255 +#: etc/inc/priv.defs.inc:1261 etc/inc/priv.defs.inc:1269 +msgid "Allow access to the 'XMLRPC Library' page." +msgstr "'XMLRPC Kütüphane' sayfasına erişimi açar." + +#: etc/inc/rrd.inc:45 etc/inc/rrd.inc:45 +#, php-format +msgid "RRD dump failed exited with %1$s, the error is: %2$s" +msgstr "Hata: %2$s . RRD dökümü %1$s ile çıkıldı başarısız oldu." + +#: etc/inc/rrd.inc:56 etc/inc/rrd.inc:92 etc/inc/rrd.inc:92 +#, php-format +msgid "RRD create failed exited with %1$s, the error is: %2$s" +msgstr "RRD oluşturma %1$s ile sonlandı başarısız oldu, hata: %2$s" + +#: etc/inc/rrd.inc:70 etc/inc/rrd.inc:106 etc/inc/rrd.inc:106 +#, php-format +msgid "" +"Import RRD has %1$s DS values and %2$s RRA databases, new format RRD has " +"%3$s DS values and %4$s RRA databases" +msgstr "" +"RRD yi içeri aktar %1$s DS değerleri ve %2$s RRA veritabanı, RRD nin yeni " +"formatı %3$s DS değerleri ve %4$s RRA veritabanı" + +#: etc/inc/rrd.inc:154 etc/inc/rrd.inc:190 etc/inc/rrd.inc:190 +#, php-format +msgid "The new RRD now has %1$s DS values and %2$s RRA databases" +msgstr "Yeni RRD şimdi %1$s DS değeri ve %2$s RRA veritabanı" + +#: etc/inc/rrd.inc:162 etc/inc/rrd.inc:198 etc/inc/rrd.inc:198 +msgid "Generating RRD graphs..." +msgstr "RRD grafikleri oluşturuluyor..." + +#: etc/inc/rrd.inc:247 +#, php-format +msgid "RRD restore failed exited with %1$s, the error is: %2$s%3$s" +msgstr "RRD grafikleri geri yükleme başarısız %1$s, hata: %2$s%3$s" + +#: etc/inc/rrd.inc:758 etc/inc/rrd.inc:782 etc/inc/rrd.inc:803 +msgid "Creating rrd update script" +msgstr "Rrd güncelleştirme komut dosyası oluşturuluyor." + +#: etc/inc/smtp.inc:92 etc/inc/smtp.inc:92 +msgid ": data access time out" +msgstr "veri erişim zaman aşımı" + +#: etc/inc/smtp.inc:95 etc/inc/smtp.inc:95 +msgid ": the server disconnected" +msgstr "sunucu bağlantısı kesildi" + +#: etc/inc/smtp.inc:107 etc/inc/smtp.inc:107 +msgid "reached the end of data while reading from the SMTP server conection" +msgstr "SMTP sunucusu bağlantısı okurken veri sonuna erişildi." + +#: etc/inc/smtp.inc:113 etc/inc/smtp.inc:113 +msgid "it was not possible to read line from the SMTP server" +msgstr "bu SMTP sunucusundaki satırlar okunamıyor" + +#: etc/inc/smtp.inc:135 etc/inc/smtp.inc:135 +msgid "it was not possible to send a line to the SMTP server" +msgstr "Bu SMTP sunucusuna satır gönderilemiyor" + +#: etc/inc/smtp.inc:149 etc/inc/smtp.inc:149 +msgid "it was not possible to send data to the SMTP server" +msgstr "bu SMTP sunucusuna veri gönderilemiyor" + +#: etc/inc/smtp.inc:221 etc/inc/smtp.inc:221 +msgid "establishing SSL connections requires at least PHP version 4.3.0" +msgstr "" +"SSL bağlantısının sağlanabilmesi için PHP versiyonunun 4.3.0 ve üstü olması " +"gerekmektedir" + +#: etc/inc/smtp.inc:224 etc/inc/smtp.inc:224 +msgid "establishing SSL connections requires the OpenSSL extension enabled" +msgstr "SSL bağlantıları için OpenSSL eklentisi aktif olmalıdır" + +#: etc/inc/smtp.inc:233 etc/inc/smtp.inc:233 +#, php-format +msgid "could not resolve host \"%s\"" +msgstr "\"%s\" ana bilgisayarı çözülemedi" + +#: etc/inc/smtp.inc:237 etc/inc/smtp.inc:237 +#, php-format +msgid "domain \"%s\" resolved to an address excluded to be valid" +msgstr "etki alanı \"%s\" geçerli olması dışında bir adres çözümlenir" + +#: etc/inc/smtp.inc:239 etc/inc/smtp.inc:239 +#, php-format +msgid "Connecting to host address \"%1$s\" port %2$s..." +msgstr "" +"Ana bilgisayara \"%1$s\" adresinden %2$s bağlantı noktasndan bağlanıyor..." + +#: etc/inc/smtp.inc:246 etc/inc/smtp.inc:246 +msgid "-3 socket could not be created" +msgstr "-3 yuva oluşturulamadı." + +#: etc/inc/smtp.inc:248 etc/inc/smtp.inc:248 +#, php-format +msgid "-4 dns lookup on hostname \"%s\" failed" +msgstr "-4 \"%s\" host adı dns araması yapılamadı" + +#: etc/inc/smtp.inc:250 etc/inc/smtp.inc:250 +msgid "-5 connection refused or timed out" +msgstr "-5 bağlantı reddedildi veya zaman aşımına uğradı" + +#: etc/inc/smtp.inc:252 etc/inc/smtp.inc:252 +msgid "-6 fdopen() call failed" +msgstr "-6 fdopen() çağrısı başarısız " + +#: etc/inc/smtp.inc:254 etc/inc/smtp.inc:254 +msgid "-7 setvbuf() call failed" +msgstr "-7 setvbuf() çağrısı başarısız" + +#: etc/inc/smtp.inc:256 etc/inc/smtp.inc:256 +#, php-format +msgid "could not connect to the host \"%1$s\": %2$s" +msgstr "Ana bilgisayara bağlanılamadı \"%1$s\": %2$s" + +#: etc/inc/smtp.inc:265 etc/inc/smtp.inc:265 +msgid "" +"it is not possible to authenticate using the specified mechanism because the " +"SASL library class is not loaded" +msgstr "" +"Belirtilen mekaznizma kullanılarak doğrulama mümkün değil çünkü SASL " +"kitaplık sınıfı yüklü değil." + +#: etc/inc/smtp.inc:289 etc/inc/smtp.inc:289 +#, php-format +msgid "authenticated mechanism %1$s may not be used: %2$s" +msgstr "Doğrulama mekanizması %1$s kullanılamadı: %2$s" + +#: etc/inc/smtp.inc:294 etc/inc/smtp.inc:294 +msgid "Could not start the SASL authentication client:" +msgstr "SASL kimlik doğrulama istemcisi başlatılamadı." + +#: etc/inc/smtp.inc:301 etc/inc/smtp.inc:301 +msgid "Could not send the AUTH command" +msgstr "AUTH komutu gönderilemedi." + +#: etc/inc/smtp.inc:316 etc/inc/smtp.inc:346 etc/inc/smtp.inc:316 +#: etc/inc/smtp.inc:346 +msgid "Authentication error:" +msgstr "Kimlik doğrulama hata:" + +#: etc/inc/smtp.inc:331 etc/inc/smtp.inc:331 +msgid "Could not send the authentication step message" +msgstr "Kimlik doğrulama adımı mesajı gönderilemedi." + +#: etc/inc/smtp.inc:351 etc/inc/smtp.inc:351 +msgid "Could not process the SASL authentication step:" +msgstr "SASL kimlik doğrulama işlemi adımı gönderilemedi:" + +#: etc/inc/smtp.inc:365 etc/inc/smtp.inc:365 +msgid "connection is already established" +msgstr "Bağlantı zaten kuruldu" + +#: etc/inc/smtp.inc:403 etc/inc/smtp.inc:403 +msgid "it was not specified the POP3 authentication user" +msgstr "belirtilen POP3 kimlik doğrulama kullanıcısı değil" + +#: etc/inc/smtp.inc:409 etc/inc/smtp.inc:409 +msgid "it was not specified the POP3 authentication password" +msgstr "belirtilen POP3 kimlik doğrulama şifresi değil" + +#: etc/inc/smtp.inc:413 etc/inc/smtp.inc:413 +#, php-format +msgid "Resolving POP3 authentication host \"%s\"..." +msgstr "POP3 kimlik doğrulama sunucusu \"%s\" çözümleniyor..." + +#: etc/inc/smtp.inc:420 etc/inc/smtp.inc:420 +msgid "POP3 authentication server greeting was not found" +msgstr "POP3 kimlik doğrulama sunucusu karşılama bulamadı" + +#: etc/inc/smtp.inc:428 etc/inc/smtp.inc:428 +msgid "POP3 authentication user was not accepted:" +msgstr "POP3 kimlik doğrulama kullanıcısı kabul edilmedi:" + +#: etc/inc/smtp.inc:436 etc/inc/smtp.inc:436 +msgid "POP3 authentication password was not accepted:" +msgstr "POP3 kimlik doğrulama şifresi kabul edilmedi:" + +#: etc/inc/smtp.inc:445 etc/inc/smtp.inc:445 +msgid "could not determine the SMTP to connect" +msgstr "bağlanılacak SMTP belirlenemedi" + +#: etc/inc/smtp.inc:451 etc/inc/smtp.inc:451 +#, php-format +msgid "Resolving SMTP server domain \"%s\"..." +msgstr "SMTP sunucu alan adı \"%s\" çözümleniyor..." + +#: etc/inc/smtp.inc:463 etc/inc/smtp.inc:463 +#, php-format +msgid "Connected to SMTP server \"%s\"." +msgstr "\"%s\" sunucusuna bağlantı kuruldu." + +#: etc/inc/smtp.inc:517 etc/inc/smtp.inc:519 etc/inc/smtp.inc:519 +msgid "server does not require authentication" +msgstr "sunucu kimlik doğrulaması gerektirmez" + +#: etc/inc/smtp.inc:581 etc/inc/smtp.inc:583 etc/inc/smtp.inc:583 +msgid "" +"it is not supported any of the authentication mechanisms required by the " +"server" +msgstr "" +"sunucu tarafından istenen herhangi bir kimlik doğrulama mekanizması " +"desteklenmiyor" + +#: etc/inc/smtp.inc:613 etc/inc/smtp.inc:615 etc/inc/smtp.inc:615 +msgid "" +"direct delivery connection is already established and sender is already set" +msgstr "doğrudan dağıtım bağlantısı zaten kurulmuş ve gönderen zaten ayarlanmış" + +#: etc/inc/smtp.inc:621 etc/inc/smtp.inc:623 etc/inc/smtp.inc:623 +msgid "connection is not in the initial state" +msgstr "bağlantı başlangıç durumunda değil" + +#: etc/inc/smtp.inc:643 etc/inc/smtp.inc:645 etc/inc/smtp.inc:645 +msgid "it was not specified a valid direct recipient" +msgstr "geçerli bir doğrudan alıcı belirtilmedi" + +#: etc/inc/smtp.inc:662 etc/inc/smtp.inc:664 etc/inc/smtp.inc:664 +msgid "" +"it is not possible to deliver directly to recipients of different domains" +msgstr "farklı etki alanlarının alıcılara doğrudan erişimi mümkün değil" + +#: etc/inc/smtp.inc:667 etc/inc/smtp.inc:669 etc/inc/smtp.inc:669 +msgid "connection is already established and the recipient is already set" +msgstr "bağlantı zaten kurulmuş ve alıcı zaten ayarlanmış" + +#: etc/inc/smtp.inc:679 etc/inc/smtp.inc:681 etc/inc/smtp.inc:681 +msgid "connection is not in the recipient setting state" +msgstr "bağlantı alıcı ayar durumunda değil" + +#: etc/inc/smtp.inc:708 etc/inc/smtp.inc:710 etc/inc/smtp.inc:710 +msgid "connection is not in the start sending data state" +msgstr "veri durumunu göndermeyi başlatacak bağlantı yok" + +#: etc/inc/smtp.inc:738 etc/inc/smtp.inc:749 etc/inc/smtp.inc:740 +#: etc/inc/smtp.inc:751 etc/inc/smtp.inc:740 etc/inc/smtp.inc:751 +msgid "connection is not in the sending data state" +msgstr "veri durumunu gönderecek bağlantı yok" + +#: etc/inc/smtp.inc:785 etc/inc/smtp.inc:787 etc/inc/smtp.inc:787 +msgid "it was not previously established a SMTP connection" +msgstr "daha önce sağlanmış bir SMTP bağlantısı değil" + +#: etc/inc/upgrade_config.inc:113 etc/inc/upgrade_config.inc:113 +#, php-format +msgid "%sWarning: filter rule removed (interface '%s' does not exist anymore)." +msgstr "%sUyarı: filtre kuralı kaldırıldı ('%s' arabirimi artık yok)." + +#: etc/inc/upgrade_config.inc:125 etc/inc/upgrade_config.inc:125 +#, php-format +msgid "" +"%sWarning: filter rule removed (source network '%s' does not exist anymore)." +msgstr "%sUyarı: filtre kuralı kaldırıldı ('%s' kaynak ağı artık yok)." + +#: etc/inc/upgrade_config.inc:138 etc/inc/upgrade_config.inc:138 +#, php-format +msgid "" +"%sWarning: filter rule removed (destination network '%s' does not exist " +"anymore)." +msgstr "%sUyarı: filtre kuralı kaldırıldı ('%s' hedef ağı artık yok)." + +#: etc/inc/upgrade_config.inc:158 etc/inc/upgrade_config.inc:158 +#, php-format +msgid "" +"%sWarning: traffic shaper rule removed (interface '%s' does not exist " +"anymore)." +msgstr "" +"%sUyarı: trafik şekillendirici kuralı kaldırıldı ('%s' arabirimi artık yok)." + +#: etc/inc/upgrade_config.inc:170 etc/inc/upgrade_config.inc:170 +#, php-format +msgid "" +"%sWarning: traffic shaper rule removed (source network '%s' does not exist " +"anymore)." +msgstr "" +"%sUyarı: trafik şekillendirici kuralı kaldırıldı ('%s' kaynak ağı artık " +"yok)." + +#: etc/inc/upgrade_config.inc:183 etc/inc/upgrade_config.inc:183 +#, php-format +msgid "" +"%sWarning: traffic shaper rule removed (destination network '%s' does not " +"exist anymore)." +msgstr "" +"%sUyarı: trafik Kameralari kuralı kaldırıldı ('%s' hedef ağı artık yok)." + +#: etc/inc/upgrade_config.inc:333 etc/inc/upgrade_config.inc:333 +#, fuzzy, php-format +msgid "CARP vhid %s" +msgstr "CARP vhid %s" + +#: etc/inc/upgrade_config.inc:510 etc/inc/upgrade_config.inc:510 +msgid "Permit IPsec traffic." +msgstr "IPsec trafiğine izin ver." + +#: etc/inc/upgrade_config.inc:585 etc/inc/upgrade_config.inc:585 +msgid "System Administrators" +msgstr "Sistem Yöneticileri" + +#: etc/inc/upgrade_config.inc:604 etc/inc/upgrade_config.inc:604 +msgid "" +"Indicates whether this user will lock access to the webConfigurator for " +"other users." +msgstr "" +"Bu kullanıcı için diğer kullanıcıların webArayüzü erişimlerini kilitleyip " +"kilitleyemediğini gösterir." + +#: etc/inc/upgrade_config.inc:607 etc/inc/upgrade_config.inc:607 +msgid "" +"Indicates whether this user will lock individual HTML pages after having " +"accessed a particular page (the lock will be freed if the user leaves or " +"saves the page form)." +msgstr "" + +#: etc/inc/upgrade_config.inc:610 etc/inc/upgrade_config.inc:610 +msgid "Indicates whether this user is able to login for example via SSH." +msgstr "" + +#: etc/inc/upgrade_config.inc:613 etc/inc/upgrade_config.inc:613 +#, php-format +msgid "" +"Indicates whether this user is allowed to copy files onto the %s appliance " +"via SCP/SFTP. If you are going to use this privilege, you must install " +"scponly on the appliance (Hint: pkg_add -r scponly)." +msgstr "" + +#: etc/inc/upgrade_config.inc:616 etc/inc/upgrade_config.inc:616 +msgid "" +"This user is associated with the UNIX root user (you should associate this " +"privilege only with one single user)." +msgstr "" + +#: etc/inc/upgrade_config.inc:633 etc/inc/upgrade_config.inc:633 +msgid "Drop packets to closed TCP ports without returning a RST" +msgstr "" + +#: etc/inc/upgrade_config.inc:637 etc/inc/upgrade_config.inc:637 +msgid "Do not send ICMP port unreachable messages for closed UDP ports" +msgstr "" +"Kapalı UDP bağlantı noktaları için ICMP port ulaşılamaz mesajları gönderme" + +#: etc/inc/upgrade_config.inc:641 etc/inc/upgrade_config.inc:641 +msgid "Randomize the ID field in IP packets (default is 0: sequential IP IDs)" +msgstr "" + +#: etc/inc/upgrade_config.inc:645 etc/inc/upgrade_config.inc:645 +msgid "Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)" +msgstr "" + +#: etc/inc/upgrade_config.inc:649 etc/inc/upgrade_config.inc:649 +msgid "Sending of IPv4 ICMP redirects" +msgstr "IPv4 ICMP yeniden yönlendirmeleri gönderiliyor" + +#: etc/inc/upgrade_config.inc:653 etc/inc/upgrade_config.inc:653 +msgid "Sending of IPv6 ICMP redirects" +msgstr "IPv6 ICMP yeniden yönlendirmeleri gönderiliyor" + +#: etc/inc/upgrade_config.inc:657 etc/inc/upgrade_config.inc:657 +msgid "Generate SYN cookies for outbound SYN-ACK packets" +msgstr "Giden SYN-ACK paketleri için SYN çerezleri oluştur" + +#: etc/inc/upgrade_config.inc:661 etc/inc/upgrade_config.inc:661 +msgid "Maximum incoming TCP datagram size" +msgstr "Maksimum gelen TCP veri birimi boyutu" + +#: etc/inc/upgrade_config.inc:665 etc/inc/upgrade_config.inc:665 +msgid "Maximum outgoing TCP datagram size" +msgstr "Maksimum giden TCP veri birimi boyutu" + +#: etc/inc/upgrade_config.inc:669 etc/inc/upgrade_config.inc:669 +msgid "" +"Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-" +"January/002534.html)" +msgstr "" +"Hızlıyönlendiriliyor (bakınız http://lists.freebsd.org/pipermail/freebsd-" +"net/2004-January/002534.html)" + +#: etc/inc/upgrade_config.inc:673 etc/inc/upgrade_config.inc:673 +msgid "Do not delay ACK to try and piggyback it onto a data packet" +msgstr "" + +#: etc/inc/upgrade_config.inc:677 etc/inc/upgrade_config.inc:677 +msgid "Maximum outgoing UDP datagram size" +msgstr "Maksimum giden UDP veri birimi boyutu" + +#: etc/inc/upgrade_config.inc:681 etc/inc/upgrade_config.inc:681 +msgid "" +"Handling of non-IP packets which are not passed to pfil (see if_bridge(4))" +msgstr "" + +#: etc/inc/upgrade_config.inc:685 etc/inc/upgrade_config.inc:685 +msgid "Allow unprivileged access to tap(4) device nodes" +msgstr "" + +#: etc/inc/upgrade_config.inc:689 etc/inc/upgrade_config.inc:689 +msgid "Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())" +msgstr "" + +#: etc/inc/upgrade_config.inc:693 etc/inc/upgrade_config.inc:693 +msgid "" +"The system will attempt to calculate the bandwidth delay product for each " +"connection and limit the amount of data queued to the network to just the " +"amount required to maintain optimum throughput. " +msgstr "" + +#: etc/inc/upgrade_config.inc:697 etc/inc/upgrade_config.inc:697 +msgid "Set ICMP Limits" +msgstr "ICMP Sınırlarını Ayarla" + +#: etc/inc/upgrade_config.inc:701 etc/inc/upgrade_config.inc:701 +msgid "TCP Offload engine" +msgstr "TCP bırakma (Offload) moturu" + +#: etc/inc/upgrade_config.inc:742 etc/inc/upgrade_config.inc:742 +#, php-format +msgid "Interface %s Static Gateway" +msgstr "%s Arabiriminin Sabit Ağ Geçidi" + +#: etc/inc/upgrade_config.inc:745 etc/inc/upgrade_config.inc:745 +#, php-format +msgid "Interface %s Dynamic Gateway" +msgstr "%s Arabiriminin Değişken Ağ Geçidi" + +#: etc/inc/upgrade_config.inc:810 etc/inc/upgrade_config.inc:811 +#, php-format +msgid "Upgraded static route for %s" +msgstr "" + +#: etc/inc/upgrade_config.inc:907 etc/inc/upgrade_config.inc:908 +#, php-format +msgid "Sitedown pool for VS: %s" +msgstr "" + +#: etc/inc/upgrade_config.inc:1060 etc/inc/upgrade_config.inc:1062 +#: etc/inc/upgrade_config.inc:1063 +#, php-format +msgid "phase2 for %s" +msgstr "aşama 2 için %s" + +#: etc/inc/upgrade_config.inc:1287 etc/inc/upgrade_config.inc:1289 +#: etc/inc/upgrade_config.inc:1290 +#, php-format +msgid "Upgraded Dyndns %s" +msgstr "Güncellenmiş Dyndns %s" + +#: etc/inc/upgrade_config.inc:1339 etc/inc/upgrade_config.inc:1341 +#: etc/inc/upgrade_config.inc:1342 +msgid "All Users" +msgstr "Tüm Kullanıcılar" + +#: etc/inc/upgrade_config.inc:1471 etc/inc/upgrade_config.inc:1473 +#: etc/inc/upgrade_config.inc:1474 +#, php-format +msgid "Converted bridged %s" +msgstr "" + +#: etc/inc/upgrade_config.inc:1797 etc/inc/upgrade_config.inc:1845 +#: etc/inc/upgrade_config.inc:1847 etc/inc/upgrade_config.inc:1848 +msgid "Auto added OpenVPN rule from config upgrade." +msgstr "" + +#: etc/inc/voucher.inc:364 etc/inc/voucher.inc:367 +#, php-format +msgid "%1$s (%2$s/%3$s) active and good for %4$d Minutes" +msgstr "%1$s (%2$s/%3$s) aktif ve iyi %4$d Dakika" + +#: etc/inc/voucher.inc:401 etc/inc/voucher.inc:404 +msgid "Access denied!" +msgstr "Erişim Engellendi!" + +#: etc/inc/voucher.inc:403 etc/inc/voucher.inc:406 +#, php-format +msgid "Access granted for %d Minutes in total." +msgstr "Toplam %d dakikalığına erişim verildi." + +#: etc/inc/voucher.inc:466 etc/inc/voucher.inc:469 +msgid "Enabling voucher support... " +msgstr "Bilet desteği aktifleştiriliyor... " + +#: etc/inc/voucher.inc:505 etc/inc/voucher.inc:508 +#, php-format +msgid "Error: cannot write voucher.cfg" +msgstr "Hata: voucher.cfg yazılamıyor." + +#: etc/inc/voucher.inc:556 etc/inc/voucher.inc:559 +#, php-format +msgid "cant write %1$s/voucher_%s_used_%2$s.db" +msgstr "%1$s/voucher_%s_used_%2$s.db yazılamıyor" + +#: etc/inc/voucher.inc:635 etc/inc/voucher.inc:638 +#, php-format +msgid "cant read %1$s/voucher_%s_used_%2$s.db" +msgstr "%1$s/voucher_%s_used_%2$s.db okunamıyor" + +#: etc/inc/voucher.inc:653 etc/inc/voucher.inc:652 etc/inc/voucher.inc:655 +#, php-format +msgid "Voucher: %s" +msgstr "Bilet: %s" + +#: etc/inc/xmlparse_attr.inc:197 etc/inc/xmlparse_attr.inc:197 +#, php-format +msgid "XML error: %1$s at line %2$d" +msgstr "XML hatası: %1$s satır %2$d" + +#: etc/inc/xmlreader.inc:129 etc/inc/xmlreader.inc:129 +#, php-format +msgid "Error returned while trying to parse %s" +msgstr "Ayrıştırmaya çalışırken hata ile döndü %s" + +#: etc/inc/zeromq.inc:225 etc/inc/zeromq.inc:236 etc/inc/zeromq.inc:225 +#: etc/inc/zeromq.inc:236 +#, php-format +msgid "Merged in config (%s sections) from ZeroMQ client." +msgstr "ZeroMQ istemcisinden (%s bölümleri) yapılandırmaya dahil edildi." + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/services_dyndns.php:76 usr/local/www/services_snmp.php:159 +#: usr/local/www/services_wol.php:115 usr/local/www/services_wol_edit.php:112 +#: usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/services_captiveportal.php:63 +#: usr/local/www/services_captiveportal_filemanager.php:75 +#: usr/local/www/services_captiveportal_ip.php:64 +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_mac.php:63 +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_dhcp.php:421 +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/services_dhcp_relay.php:100 +#: usr/local/www/services_dnsmasq.php:119 +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/services_captiveportal_hostname.php:66 +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/fbegin.inc:171 usr/local/www/fbegin.inc:343 +#: usr/local/www/status_services.php:226 +#: usr/local/www/services_dyndns_edit.php:133 +#: usr/local/www/services_igmpproxy.php:80 +#: usr/local/www/services_rfc2136.php:55 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/vpn_pppoe_edit.php:234 usr/local/www/services_dhcpv6.php:359 +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_dyndns_edit.php:156 usr/local/www/fbegin.inc:189 +#: usr/local/www/fbegin.inc:361 usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/services_unbound.php:102 +#: usr/local/www/services_unbound_advanced.php:88 +#: usr/local/www/services_dyndns.php:85 usr/local/www/services_dhcp.php:433 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/services_ntpd.php:71 usr/local/www/services_dhcp_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/services_dhcpv6.php:386 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/fbegin.inc:197 usr/local/www/fbegin.inc:307 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_router_advertisements.php:194 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/status_services.php:222 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_dhcp.php:527 usr/local/www/services_ntpd.php:76 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_dhcpv6.php:367 +#: usr/local/www/system_authservers.php:187 +#: usr/local/www/services_rfc2136.php:55 usr/local/www/status_services.php:220 +#: usr/local/www/services_router_advertisements.php:194 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dyndns_edit.php:160 +#: usr/local/www/services_wol.php:115 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/services_wol_edit.php:112 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/services_ntpd.php:76 +#: usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/services_dhcp.php:526 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/services_dhcpv6.php:362 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/system_authservers.php:188 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_igmpproxy.php:80 +#: usr/local/www/services_dnsmasq_edit.php:166 usr/local/www/fbegin.inc:188 +#: usr/local/www/fbegin.inc:299 usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/services_dnsmasq.php:123 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/services_dyndns.php:64 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dhcp_relay.php:100 +#: usr/local/www/services_snmp.php:165 +msgid "Services" +msgstr "Servisler" + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/diag_logs.php:84 usr/local/www/diag_logs_auth.php:72 +#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_filter.php:108 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_ipsec.php:109 usr/local/www/diag_logs_ntpd.php:72 +#: usr/local/www/diag_logs_openvpn.php:76 +#: usr/local/www/diag_logs_settings.php:217 +#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/diag_logs_filter_summary.php:191 +#: usr/local/www/diag_logs_ppp.php:77 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/diag_logs_relayd.php:73 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/fbegin.inc:130 usr/local/www/fbegin.inc:165 +#: usr/local/www/status_lb_pool.php:62 usr/local/www/status_lb_vs.php:56 +#: usr/local/www/diag_logs_wireless.php:74 +#: usr/local/www/diag_logs_routing.php:72 +#: usr/local/www/diag_logs_settings.php:222 usr/local/www/fbegin.inc:147 +#: usr/local/www/fbegin.inc:182 usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/diag_logs_resolver.php:85 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/diag_logs_gateways.php:85 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_routing.php:73 +#: usr/local/www/diag_logs_settings.php:229 usr/local/www/fbegin.inc:156 +#: usr/local/www/fbegin.inc:190 usr/local/www/diag_logs_relayd.php:74 +#: usr/local/www/diag_logs_auth.php:73 usr/local/www/diag_logs_ipsec.php:110 +#: usr/local/www/diag_logs_resolver.php:86 usr/local/www/diag_logs_ntpd.php:73 +#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_wireless.php:75 +#: usr/local/www/diag_logs_filter_summary.php:192 +#: usr/local/www/diag_logs_gateways.php:86 +#: usr/local/www/diag_logs_openvpn.php:77 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_filter.php:98 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/diag_logs_auth.php:73 +#: usr/local/www/diag_logs_settings.php:229 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/diag_logs_filter.php:98 +#: usr/local/www/diag_logs_routing.php:73 usr/local/www/diag_logs_dhcp.php:78 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/diag_logs.php:84 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_ntpd.php:73 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/diag_logs_openvpn.php:77 usr/local/www/status_lb_pool.php:62 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/diag_logs_ppp.php:75 usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/diag_logs_gateways.php:86 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/fbegin.inc:148 usr/local/www/fbegin.inc:181 +#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_relayd.php:74 +#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/diag_logs_ipsec.php:110 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/status_lb_vs.php:56 usr/local/www/diag_logs_wireless.php:75 +#: usr/local/www/diag_logs_resolver.php:86 +#: usr/local/www/diag_logs_filter_summary.php:192 +msgid "Load Balancer" +msgstr "Yük Dengeleyici" + +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_virtual_server.php:116 +#: usr/local/www/load_balancer_relay_action.php:127 +#: usr/local/www/load_balancer_pool.php:119 +#: usr/local/www/load_balancer_monitor.php:110 +#: usr/local/www/load_balancer_relay_protocol.php:123 +#: usr/local/www/status_lb_pool.php:121 usr/local/www/status_lb_vs.php:68 +#: usr/local/www/load_balancer_setting.php:120 +#: usr/local/www/load_balancer_setting.php:119 +#: usr/local/www/load_balancer_virtual_server.php:114 +#: usr/local/www/load_balancer_monitor.php:108 +#: usr/local/www/load_balancer_relay_protocol.php:121 +#: usr/local/www/load_balancer_relay_action.php:125 +#: usr/local/www/load_balancer_pool.php:117 +#: usr/local/www/load_balancer_relay_protocol.php:121 +#: usr/local/www/load_balancer_relay_action.php:125 +#: usr/local/www/status_lb_pool.php:121 +#: usr/local/www/load_balancer_setting.php:119 +#: usr/local/www/load_balancer_pool.php:117 +#: usr/local/www/load_balancer_monitor.php:108 +#: usr/local/www/load_balancer_virtual_server.php:94 +#: usr/local/www/load_balancer_virtual_server.php:114 +#: usr/local/www/status_lb_vs.php:68 +msgid "Virtual Servers" +msgstr "Sanal Sunucular" + +#: usr/local/www/load_balancer_virtual_server.php:108 +#: usr/local/www/load_balancer_virtual_server.php:106 +#: usr/local/www/load_balancer_virtual_server.php:106 +msgid "The virtual server configuration has been changed" +msgstr "Sanal sunucu yapılandırması değiştirildi" + +#: usr/local/www/load_balancer_virtual_server.php:108 +#: usr/local/www/firewall_shaper_layer7.php:401 +#: usr/local/www/firewall_shaper_vinterface.php:366 +#: usr/local/www/firewall_shaper_wizards.php:96 +#: usr/local/www/firewall_aliases.php:160 +#: usr/local/www/firewall_nat_1to1.php:87 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_shaper.php:403 +#: usr/local/www/firewall_shaper_queues.php:187 +#: usr/local/www/firewall_virtual_ip.php:164 usr/local/www/interfaces.php:1222 +#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86 +#: usr/local/www/vpn_ipsec_mobile.php:303 +#: usr/local/www/load_balancer_monitor.php:102 usr/local/www/vpn_pppoe.php:96 +#: usr/local/www/firewall_nat.php:175 usr/local/www/services_dhcp.php:536 +#: usr/local/www/services_dnsmasq.php:147 +#: usr/local/www/load_balancer_relay_protocol.php:114 +#: usr/local/www/services_igmpproxy.php:90 +#: usr/local/www/system_gateways.php:134 usr/local/www/firewall_nat_npt.php:87 +#: usr/local/www/services_dhcpv6.php:461 +#: usr/local/www/services_captiveportal_zones.php:47 +#: usr/local/www/firewall_nat_out.php:304 +#: usr/local/www/load_balancer_setting.php:111 +#: usr/local/www/services_unbound.php:129 +#: usr/local/www/services_unbound_advanced.php:116 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/services_dhcp.php:549 usr/local/www/firewall_aliases.php:163 +#: usr/local/www/interfaces.php:1326 usr/local/www/services_dhcpv6.php:488 +#: usr/local/www/services_dnsmasq.php:148 +#: usr/local/www/firewall_nat_out.php:305 +#: usr/local/www/load_balancer_setting.php:110 usr/local/www/vpn_pppoe.php:97 +#: usr/local/www/vpn_ipsec.php:133 usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/firewall_nat.php:180 usr/local/www/firewall_shaper.php:404 +#: usr/local/www/vpn_ipsec_keys.php:85 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/load_balancer_virtual_server.php:106 +#: usr/local/www/load_balancer_monitor.php:100 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/services_dhcp.php:653 usr/local/www/firewall_aliases.php:167 +#: usr/local/www/interfaces.php:1314 +#: usr/local/www/services_captiveportal_zones.php:48 +#: usr/local/www/firewall_virtual_ip.php:167 +#: usr/local/www/services_dhcpv6.php:468 +#: usr/local/www/firewall_shaper_layer7.php:401 usr/local/www/vpn_pppoe.php:98 +#: usr/local/www/firewall_shaper.php:404 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/vpn_ipsec.php:139 usr/local/www/firewall_virtual_ip.php:181 +#: usr/local/www/firewall_shaper_queues.php:187 +#: usr/local/www/firewall_aliases.php:167 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/firewall_shaper_wizards.php:96 +#: usr/local/www/services_dhcp.php:655 usr/local/www/firewall_nat.php:180 +#: usr/local/www/load_balancer_setting.php:110 +#: usr/local/www/services_dhcpv6.php:463 +#: usr/local/www/firewall_nat_out.php:305 +#: usr/local/www/firewall_nat_npt.php:87 +#: usr/local/www/firewall_nat_1to1.php:87 +#: usr/local/www/services_captiveportal_zones.php:48 +#: usr/local/www/services_igmpproxy.php:90 +#: usr/local/www/load_balancer_monitor.php:100 +#: usr/local/www/services_dnsmasq.php:152 +#: usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/system_gateways.php:134 +#: usr/local/www/load_balancer_virtual_server.php:106 +#: usr/local/www/vpn_ipsec_keys.php:85 usr/local/www/interfaces.php:1327 +msgid "You must apply the changes in order for them to take effect." +msgstr "Değişiklikleri uygulayarak etkin hale gelmelerini sağlayabilirsiniz." + +#: usr/local/www/load_balancer_virtual_server.php:115 +#: usr/local/www/load_balancer_relay_action.php:126 +#: usr/local/www/load_balancer_pool.php:118 +#: usr/local/www/load_balancer_monitor.php:109 +#: usr/local/www/load_balancer_relay_protocol.php:122 +#: usr/local/www/status_lb_pool.php:120 usr/local/www/status_lb_vs.php:67 +#: usr/local/www/load_balancer_setting.php:119 +#: usr/local/www/load_balancer_setting.php:118 +#: usr/local/www/load_balancer_virtual_server.php:113 +#: usr/local/www/load_balancer_monitor.php:107 +#: usr/local/www/load_balancer_relay_protocol.php:120 +#: usr/local/www/load_balancer_relay_action.php:124 +#: usr/local/www/load_balancer_pool.php:116 +#: usr/local/www/load_balancer_relay_protocol.php:120 +#: usr/local/www/load_balancer_relay_action.php:124 +#: usr/local/www/status_lb_pool.php:120 +#: usr/local/www/load_balancer_setting.php:118 +#: usr/local/www/load_balancer_pool.php:116 +#: usr/local/www/load_balancer_monitor.php:107 +#: usr/local/www/load_balancer_virtual_server.php:113 +#: usr/local/www/status_lb_vs.php:67 +msgid "Pools" +msgstr "Havuzlar" + +#: usr/local/www/load_balancer_virtual_server.php:117 +#: usr/local/www/load_balancer_relay_action.php:125 +#: usr/local/www/load_balancer_pool.php:120 +#: usr/local/www/load_balancer_monitor.php:111 +#: usr/local/www/load_balancer_relay_protocol.php:121 +#: usr/local/www/load_balancer_setting.php:121 +#: usr/local/www/load_balancer_setting.php:120 +#: usr/local/www/load_balancer_virtual_server.php:115 +#: usr/local/www/load_balancer_monitor.php:109 +#: usr/local/www/load_balancer_relay_protocol.php:119 +#: usr/local/www/load_balancer_relay_action.php:123 +#: usr/local/www/load_balancer_pool.php:118 +#: usr/local/www/load_balancer_relay_protocol.php:119 +#: usr/local/www/load_balancer_relay_action.php:123 +#: usr/local/www/load_balancer_setting.php:120 +#: usr/local/www/load_balancer_pool.php:118 +#: usr/local/www/load_balancer_monitor.php:109 +#: usr/local/www/load_balancer_virtual_server.php:115 +msgid "Monitors" +msgstr "İzlemeler" + +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/firewall_shaper_layer7.php:466 +#: usr/local/www/interfaces_bridge_edit.php:291 +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:185 +#: usr/local/www/firewall_nat_edit.php:518 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:456 +#: usr/local/www/firewall_rules_edit.php:808 +#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/diag_ipsec_spd.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:424 +#: usr/local/www/status_upnp.php:86 +#: usr/local/www/services_rfc2136_edit.php:186 +#: usr/local/www/system_advanced_admin.php:300 +#: usr/local/www/vpn_ipsec_phase2.php:516 +#: usr/local/www/vpn_openvpn_client.php:421 +#: usr/local/www/vpn_openvpn_client.php:861 +#: usr/local/www/vpn_openvpn_server.php:656 +#: usr/local/www/firewall_nat_out_edit.php:469 +#: usr/local/www/load_balancer_relay_action_edit.php:423 +#: usr/local/www/firewall_rules_edit.php:843 +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/vpn_openvpn_server.php:729 +#: usr/local/www/interfaces_bridge_edit.php:300 +#: usr/local/www/diag_packet_capture.php:160 +#: usr/local/www/vpn_ipsec_phase2.php:542 +#: usr/local/www/firewall_nat_edit.php:525 +#: usr/local/www/vpn_openvpn_client.php:426 +#: usr/local/www/vpn_openvpn_client.php:866 +#: usr/local/www/load_balancer_relay_action_edit.php:421 +#: usr/local/www/diag_ipsec_sad.php:90 +#: usr/local/www/load_balancer_virtual_server.php:128 +#: usr/local/www/vpn_openvpn_server.php:747 usr/local/www/status_upnp.php:87 +#: usr/local/www/interfaces_bridge_edit.php:301 +#: usr/local/www/diag_packet_capture.php:207 +#: usr/local/www/vpn_ipsec_phase2.php:644 +#: usr/local/www/firewall_nat_edit.php:524 +#: usr/local/www/vpn_openvpn_client.php:434 +#: usr/local/www/vpn_openvpn_client.php:919 +#: usr/local/www/diag_ipsec_spd.php:90 +#: usr/local/www/firewall_shaper_layer7.php:466 +#: usr/local/www/vpn_openvpn_client.php:452 +#: usr/local/www/vpn_openvpn_client.php:938 +#: usr/local/www/firewall_rules_edit.php:846 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:519 +#: usr/local/www/diag_packet_capture.php:207 +#: usr/local/www/diag_ipsec_spd.php:90 +#: usr/local/www/system_advanced_admin.php:300 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:421 +#: usr/local/www/interfaces_bridge_edit.php:302 +#: usr/local/www/services_rfc2136_edit.php:186 +#: usr/local/www/load_balancer_virtual_server.php:128 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:473 +#: usr/local/www/diag_ipsec_sad.php:90 +#: usr/local/www/vpn_openvpn_server.php:773 +#: usr/local/www/vpn_ipsec_phase2.php:665 usr/local/www/status_upnp.php:87 +msgid "Protocol" +msgstr "Protokol" + +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/diag_tables.php:133 +#: usr/local/www/interfaces_ppps_edit.php:660 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:195 +#: usr/local/www/system_advanced_notifications.php:185 +#: usr/local/www/diag_tables.php:132 +#: usr/local/www/system_advanced_notifications.php:194 +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/load_balancer_virtual_server_edit.php:169 +#: usr/local/www/interfaces_ppps_edit.php:661 +#: usr/local/www/load_balancer_virtual_server.php:129 +#: usr/local/www/load_balancer_virtual_server_edit.php:167 +#: usr/local/www/diag_tables.php:133 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:167 +#: usr/local/www/interfaces_ppps_edit.php:667 +#: usr/local/www/system_advanced_notifications.php:194 +#: usr/local/www/load_balancer_virtual_server.php:129 +msgid "IP Address" +msgstr "IP Adresi" + +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/diag_packet_capture.php:165 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_rules.php:365 usr/local/www/firewall_rules.php:367 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:203 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:202 +#: usr/local/www/services_captiveportal.php:607 +#: usr/local/www/services_captiveportal.php:628 +#: usr/local/www/services_captiveportal.php:647 +#: usr/local/www/services_captiveportal.php:666 +#: usr/local/www/status_upnp.php:85 +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_rules.php:369 usr/local/www/firewall_rules.php:371 +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/services_captiveportal.php:643 +#: usr/local/www/services_captiveportal.php:664 +#: usr/local/www/services_captiveportal.php:686 +#: usr/local/www/services_captiveportal.php:705 +#: usr/local/www/load_balancer_virtual_server_edit.php:183 +#: usr/local/www/diag_packet_capture.php:185 +#: usr/local/www/load_balancer_pool_edit.php:211 +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_rules.php:362 usr/local/www/firewall_rules.php:364 +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/services_captiveportal.php:641 +#: usr/local/www/services_captiveportal.php:662 +#: usr/local/www/services_captiveportal.php:684 +#: usr/local/www/services_captiveportal.php:703 +#: usr/local/www/status_upnp.php:86 +#: usr/local/www/load_balancer_virtual_server_edit.php:181 +#: usr/local/www/diag_packet_capture.php:232 +#: usr/local/www/load_balancer_pool_edit.php:209 +#: usr/local/www/load_balancer_pool.php:133 usr/local/www/diag_testport.php:60 +#: usr/local/www/diag_testport.php:123 +#: usr/local/www/load_balancer_virtual_server_edit.php:181 +#: usr/local/www/diag_packet_capture.php:232 +#: usr/local/www/load_balancer_pool.php:133 +#: usr/local/www/firewall_rules.php:362 usr/local/www/firewall_rules.php:364 +#: usr/local/www/services_captiveportal.php:642 +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:685 +#: usr/local/www/services_captiveportal.php:704 +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/load_balancer_virtual_server.php:130 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:209 +#: usr/local/www/status_upnp.php:86 +#, fuzzy +msgid "Port" +msgstr "Port" + +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/status_lb_pool.php:62 +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/status_lb_pool.php:62 usr/local/www/load_balancer_pool.php:97 +#: usr/local/www/load_balancer_virtual_server.php:131 +#: usr/local/www/load_balancer_pool_edit.php:159 +msgid "Pool" +msgstr "Havuz" + +#: usr/local/www/load_balancer_virtual_server.php:133 +#: usr/local/www/load_balancer_virtual_server_edit.php:228 +#: usr/local/www/load_balancer_virtual_server.php:134 +#: usr/local/www/load_balancer_virtual_server_edit.php:217 +#: usr/local/www/load_balancer_virtual_server.php:132 +#: usr/local/www/load_balancer_virtual_server_edit.php:215 +#: usr/local/www/load_balancer_virtual_server_edit.php:215 +#: usr/local/www/load_balancer_virtual_server.php:132 +msgid "Fall Back Pool" +msgstr "Alternatif Havuz" + +#: usr/local/www/diag_tables.php:44 usr/local/www/diag_defaults.php:58 +#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_nanobsd.php:49 +#: usr/local/www/diag_packet_capture.php:41 +#: usr/local/www/crash_reporter.php:82 +#: usr/local/www/diag_authentication.php:69 usr/local/www/diag_backup.php:499 +#: usr/local/www/diag_confbak.php:98 usr/local/www/halt.php:59 +#: usr/local/www/diag_smart.php:14 usr/local/www/diag_states_summary.php:185 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_dns.php:34 +#: usr/local/www/reboot.php:51 usr/local/www/edit.php:39 +#: usr/local/www/diag_ping.php:43 usr/local/www/diag_resetstate.php:64 +#: usr/local/www/diag_routes.php:45 usr/local/www/diag_traceroute.php:45 +#: usr/local/www/exec.php:91 usr/local/www/fbegin.inc:367 +#: usr/local/www/diag_arp.php:261 usr/local/www/diag_ndp.php:103 +#: usr/local/www/system_firmware_restorefullbackup.php:104 +#: usr/local/www/diag_dump_states_sources.php:65 usr/local/www/fbegin.inc:385 +#: usr/local/www/diag_backup.php:576 usr/local/www/reboot.php:48 +#: usr/local/www/edit.php:42 usr/local/www/diag_dump_states.php:75 +#: usr/local/www/halt.php:54 usr/local/www/diag_states_summary.php:174 +#: usr/local/www/fbegin.inc:331 usr/local/www/diag_sockets.php:44 +#: usr/local/www/exec.php:93 usr/local/www/diag_packet_capture.php:43 +#: usr/local/www/diag_states_summary.php:176 usr/local/www/diag_ndp.php:103 +#: usr/local/www/reboot.php:48 usr/local/www/diag_arp.php:261 +#: usr/local/www/diag_authentication.php:69 usr/local/www/diag_tables.php:44 +#: usr/local/www/diag_testport.php:49 usr/local/www/diag_dump_states.php:75 +#: usr/local/www/diag_states_summary.php:176 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/diag_defaults.php:52 +#: usr/local/www/diag_dump_states_sources.php:65 +#: usr/local/www/diag_packet_capture.php:43 usr/local/www/diag_routes.php:45 +#: usr/local/www/diag_traceroute.php:45 usr/local/www/diag_smart.php:14 +#: usr/local/www/exec.php:93 usr/local/www/halt.php:54 +#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_backup.php:581 +#: usr/local/www/diag_ping.php:43 usr/local/www/diag_resetstate.php:64 +#: usr/local/www/system_firmware_restorefullbackup.php:104 +#: usr/local/www/diag_dns.php:34 usr/local/www/edit.php:41 +#: usr/local/www/fbegin.inc:323 usr/local/www/diag_confbak.php:98 +#: usr/local/www/diag_sockets.php:44 usr/local/www/diag_nanobsd.php:49 +#: usr/local/www/crash_reporter.php:82 +msgid "Diagnostics" +msgstr "Araçlar" + +#: usr/local/www/diag_tables.php:44 usr/local/www/fbegin.inc:199 +#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:225 +#: usr/local/www/diag_tables.php:44 usr/local/www/fbegin.inc:216 +msgid "Tables" +msgstr "Tablolar" + +#: usr/local/www/diag_tables.php:86 usr/local/www/diag_tables.php:87 +#: usr/local/www/diag_tables.php:87 +msgid "The bogons database has been updated." +msgstr "Sahte IP (bogon) veritabanı güncellendi." + +#: usr/local/www/diag_tables.php:118 usr/local/www/diag_tables.php:117 +#: usr/local/www/diag_tables.php:118 +msgid "Table:" +msgstr "Tablo:" + +#: usr/local/www/diag_tables.php:152 usr/local/www/diag_tables.php:151 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:155 +msgid "No entries exist in this table." +msgstr "Tabloda herhangi bir girdi bulunamadı." + +#: usr/local/www/diag_tables.php:160 usr/local/www/diag_backup.php:163 +#: usr/local/www/exec.php:273 usr/local/www/exec.php:283 +#: usr/local/www/system_firmware_restorefullbackup.php:166 +#: usr/local/www/diag_tables.php:159 usr/local/www/diag_backup.php:250 +#: usr/local/www/exec.php:275 usr/local/www/exec.php:285 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +#: usr/local/www/exec.php:275 usr/local/www/exec.php:285 +#: usr/local/www/diag_backup.php:250 +#: usr/local/www/system_firmware_restorefullbackup.php:166 +msgid "Download" +msgstr "İndir" + +#: usr/local/www/diag_tables.php:160 usr/local/www/diag_tables.php:159 +#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162 +msgid " the latest bogon data." +msgstr " son sahte IP (bogon) verisi." + +#: usr/local/www/diag_tables.php:162 +#: usr/local/www/firewall_shaper_layer7.php:576 +#: usr/local/www/services_dhcpv6.php:758 +#: usr/local/www/system_firmware_restorefullbackup.php:163 +#: usr/local/www/diag_tables.php:161 usr/local/www/services_dhcpv6.php:853 +#: usr/local/www/services_dhcpv6.php:784 +#: usr/local/www/firewall_shaper_layer7.php:576 +#: usr/local/www/diag_tables.php:165 usr/local/www/services_dhcpv6.php:801 +#: usr/local/www/system_firmware_restorefullbackup.php:163 +msgid "Delete" +msgstr "Sil" + +#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161 +#: usr/local/www/diag_tables.php:165 +msgid "all" +msgstr "tüm" + +#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161 +#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:165 +msgid "entries in this table." +msgstr "girdileri sil." + +#: usr/local/www/pkg_edit.php:61 usr/local/www/pkg.php:51 +#: usr/local/www/pkg.php:55 usr/local/www/pkg_edit.php:69 +#: usr/local/www/pkg.php:55 usr/local/www/pkg_edit.php:69 +msgid "ERROR: No package defined." +msgstr "HATA: Paket tanımlanmadı." + +#: usr/local/www/pkg_edit.php:256 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/services_wol_edit.php:112 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_rules_edit.php:628 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_wireless_edit.php:145 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:153 +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/vpn_pppoe_edit.php:234 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 usr/local/www/pkg_edit.php:251 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 usr/local/www/pkg_edit.php:254 +#: usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/firewall_nat_edit.php:439 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/services_wol_edit.php:112 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +#: usr/local/www/vpn_pppoe_edit.php:237 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/firewall_aliases_edit.php:56 usr/local/www/pkg_edit.php:254 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/interfaces_bridge_edit.php:236 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/load_balancer_pool_edit.php:159 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/interfaces_qinq_edit.php:39 +msgid "Edit" +msgstr "Düzenle" + +#: usr/local/www/pkg_edit.php:260 usr/local/www/pkg_edit.php:255 +#: usr/local/www/pkg_edit.php:258 usr/local/www/pkg_edit.php:258 +msgid "Package Editor" +msgstr "Paket Editörü" + +#: usr/local/www/pkg_edit.php:405 +#: usr/local/www/firewall_aliases_import.php:154 +#: usr/local/www/firewall_shaper_layer7.php:569 +#: usr/local/www/firewall_shaper_vinterface.php:307 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:546 +#: usr/local/www/diag_logs_settings.php:321 usr/local/www/diag_nanobsd.php:219 +#: usr/local/www/services_snmp.php:400 usr/local/www/services_wol_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:583 +#: usr/local/www/interfaces_gif_edit.php:218 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/interfaces_groups_edit.php:322 +#: usr/local/www/firewall_aliases_edit.php:686 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:846 +#: usr/local/www/firewall_nat_out.php:320 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:1065 +#: usr/local/www/firewall_rules_edit.php:1480 +#: usr/local/www/firewall_schedule_edit.php:1156 +#: usr/local/www/firewall_shaper.php:349 usr/local/www/interfaces.php:2443 +#: usr/local/www/interfaces_assign.php:501 usr/local/www/diag_smart.php:219 +#: usr/local/www/system.php:447 usr/local/www/interfaces_vlan_edit.php:189 +#: usr/local/www/system_firmware_settings.php:238 +#: usr/local/www/system_routes_edit.php:275 usr/local/www/vpn_ipsec.php:168 +#: usr/local/www/vpn_ipsec_keys_edit.php:144 +#: usr/local/www/vpn_ipsec_mobile.php:608 +#: usr/local/www/interfaces_lagg_edit.php:218 +#: usr/local/www/interfaces_ppps_edit.php:783 +#: usr/local/www/interfaces_qinq_edit.php:394 +#: usr/local/www/interfaces_wireless_edit.php:195 +#: usr/local/www/load_balancer_monitor_edit.php:356 +#: usr/local/www/load_balancer_pool_edit.php:311 usr/local/www/edit.php:181 +#: usr/local/www/services_captiveportal.php:923 +#: usr/local/www/services_captiveportal_ip_edit.php:231 +#: usr/local/www/services_captiveportal_mac_edit.php:203 +#: usr/local/www/services_dhcp.php:871 +#: usr/local/www/services_dhcp_edit.php:251 +#: usr/local/www/services_dhcp_relay.php:189 +#: usr/local/www/services_dnsmasq.php:209 +#: usr/local/www/services_dnsmasq_edit.php:172 usr/local/www/vpn_pptp.php:472 +#: usr/local/www/vpn_pptp_users_edit.php:168 +#: usr/local/www/load_balancer_relay_action_edit.php:557 +#: usr/local/www/load_balancer_relay_protocol_edit.php:280 +#: usr/local/www/pkg_mgr_settings.php:120 +#: usr/local/www/services_captiveportal_hostname_edit.php:203 +#: usr/local/www/services_captiveportal_vouchers.php:597 +#: usr/local/www/services_captiveportal_vouchers_edit.php:207 +#: usr/local/www/status_rrd_graph_settings.php:225 +#: usr/local/www/services_dyndns_edit.php:236 +#: usr/local/www/services_igmpproxy.php:155 +#: usr/local/www/services_igmpproxy_edit.php:280 +#: usr/local/www/services_rfc2136_edit.php:200 +#: usr/local/www/status_lb_pool.php:217 +#: usr/local/www/system_advanced_admin.php:535 +#: usr/local/www/system_advanced_firewall.php:416 +#: usr/local/www/system_advanced_misc.php:442 +#: usr/local/www/system_advanced_network.php:304 +#: usr/local/www/system_advanced_notifications.php:93 +#: usr/local/www/system_advanced_notifications.php:254 +#: usr/local/www/system_advanced_sysctl.php:104 +#: usr/local/www/system_advanced_sysctl.php:257 +#: usr/local/www/system_authservers.php:724 +#: usr/local/www/system_camanager.php:359 +#: usr/local/www/system_camanager.php:552 +#: usr/local/www/system_certmanager.php:155 +#: usr/local/www/system_certmanager.php:469 +#: usr/local/www/system_certmanager.php:787 +#: usr/local/www/system_crlmanager.php:294 +#: usr/local/www/system_crlmanager.php:387 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateways_edit.php:492 +#: usr/local/www/system_groupmanager.php:390 +#: usr/local/www/system_groupmanager_addprivs.php:224 +#: usr/local/www/system_usermanager.php:774 +#: usr/local/www/system_usermanager_addprivs.php:205 +#: usr/local/www/system_usermanager_passwordmg.php:119 +#: usr/local/www/system_usermanager_settings.php:161 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124 +#: usr/local/www/vpn_ipsec_phase1.php:855 +#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/vpn_l2tp.php:445 +#: usr/local/www/vpn_l2tp_users_edit.php:176 +#: usr/local/www/vpn_openvpn_client.php:845 +#: usr/local/www/vpn_openvpn_csc.php:658 +#: usr/local/www/vpn_openvpn_server.php:1433 +#: usr/local/www/vpn_pppoe_edit.php:589 +#: usr/local/www/firewall_nat_npt_edit.php:270 +#: usr/local/www/services_dhcpv6.php:784 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/services_dhcpv6_relay.php:190 +#: usr/local/www/system_routes_edit.php:315 +#: usr/local/www/services_unbound_acls.php:101 +#: usr/local/www/services_unbound_acls.php:306 +#: usr/local/www/diag_logs_settings.php:328 +#: usr/local/www/system_gateway_groups_edit.php:283 +#: usr/local/www/services_captiveportal_vouchers.php:604 +#: usr/local/www/services_dyndns_edit.php:366 +#: usr/local/www/firewall_nat_out.php:330 +#: usr/local/www/services_dnsmasq_edit.php:284 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dhcpv6_edit.php:237 +#: usr/local/www/firewall_nat_npt_edit.php:275 +#: usr/local/www/load_balancer_setting.php:161 +#: usr/local/www/status_rrd_graph_settings.php:226 +#: usr/local/www/pkg_edit.php:413 usr/local/www/firewall_nat_out_edit.php:662 +#: usr/local/www/system_certmanager.php:183 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_certmanager.php:953 +#: usr/local/www/load_balancer_relay_action_edit.php:556 +#: usr/local/www/firewall_rules_edit.php:1100 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/services_unbound.php:245 +#: usr/local/www/system_usermanager.php:772 +#: usr/local/www/services_igmpproxy_edit.php:282 +#: usr/local/www/system_advanced_firewall.php:475 +#: usr/local/www/firewall_aliases_edit.php:691 +#: usr/local/www/system_advanced_notifications.php:96 +#: usr/local/www/system_advanced_notifications.php:281 +#: usr/local/www/system_advanced_misc.php:485 +#: usr/local/www/firewall_shaper_vinterface.php:317 +#: usr/local/www/system_groupmanager_addprivs.php:222 +#: usr/local/www/edit.php:184 usr/local/www/services_captiveportal.php:968 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/vpn_openvpn_server.php:1575 +#: usr/local/www/services_dhcp.php:909 usr/local/www/services_ntpd.php:121 +#: usr/local/www/interfaces_bridge_edit.php:592 +#: usr/local/www/system_camanager.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:674 +#: usr/local/www/firewall_nat_edit.php:854 +#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:2644 +#: usr/local/www/vpn_openvpn_client.php:850 +#: usr/local/www/load_balancer_pool_edit.php:328 +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/services_snmp.php:414 usr/local/www/system.php:476 +#: usr/local/www/interfaces_gre_edit.php:228 +#: usr/local/www/vpn_ipsec_phase1.php:868 usr/local/www/diag_nanobsd.php:218 +#: usr/local/www/services_dhcpv6.php:574 usr/local/www/services_dhcpv6.php:879 +#: usr/local/www/vpn_pppoe_edit.php:590 +#: usr/local/www/system_routes_edit.php:316 +#: usr/local/www/diag_logs_settings.php:348 +#: usr/local/www/system_gateway_groups_edit.php:343 +#: usr/local/www/interfaces_vlan_edit.php:190 +#: usr/local/www/services_dnsmasq.php:210 +#: usr/local/www/services_captiveportal_vouchers.php:618 +#: usr/local/www/firewall_nat_out.php:331 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/services_captiveportal_vouchers_edit.php:205 +#: usr/local/www/firewall_nat_1to1_edit.php:464 +#: usr/local/www/services_dhcpv6_edit.php:239 +#: usr/local/www/services_router_advertisements.php:400 +#: usr/local/www/firewall_nat_npt_edit.php:274 +#: usr/local/www/load_balancer_setting.php:160 usr/local/www/vpn_ipsec.php:167 +#: usr/local/www/services_dhcp_relay.php:190 +#: usr/local/www/services_captiveportal_hostname_edit.php:201 +#: usr/local/www/vpn_ipsec_mobile.php:657 usr/local/www/pkg_edit.php:416 +#: usr/local/www/interfaces_qinq_edit.php:395 +#: usr/local/www/interfaces_gif_edit.php:219 +#: usr/local/www/firewall_shaper.php:350 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/services_captiveportal_mac_edit.php:201 +#: usr/local/www/firewall_schedule_edit.php:1155 +#: usr/local/www/interfaces_ppps_edit.php:784 +#: usr/local/www/system_crlmanager.php:295 +#: usr/local/www/system_crlmanager.php:388 +#: usr/local/www/system_crlmanager.php:420 +#: usr/local/www/firewall_aliases_edit.php:694 usr/local/www/vpn_pptp.php:474 +#: usr/local/www/interfaces_lagg_edit.php:219 +#: usr/local/www/vpn_openvpn_csc.php:657 +#: usr/local/www/system_advanced_misc.php:534 +#: usr/local/www/firewall_shaper_vinterface.php:319 +#: usr/local/www/services_captiveportal.php:964 +#: usr/local/www/system_gateways_edit.php:627 +#: usr/local/www/services_dhcpv6_relay.php:191 +#: usr/local/www/system_usermanager_passwordmg.php:120 +#: usr/local/www/interfaces_assign.php:495 +#: usr/local/www/services_captiveportal_ip_edit.php:229 +#: usr/local/www/vpn_openvpn_server.php:1616 +#: usr/local/www/services_dhcp.php:1113 +#: usr/local/www/system_firmware_settings.php:251 +#: usr/local/www/services_ntpd.php:151 +#: usr/local/www/interfaces_bridge_edit.php:593 +#: usr/local/www/interfaces_groups_edit.php:323 +#: usr/local/www/vpn_ipsec_phase2.php:770 +#: usr/local/www/firewall_nat_edit.php:853 +#: usr/local/www/vpn_pptp_users_edit.php:169 +#: usr/local/www/vpn_ipsec_keys_edit.php:143 +#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:2632 +#: usr/local/www/vpn_openvpn_client.php:903 +#: usr/local/www/load_balancer_pool_edit.php:326 +#: usr/local/www/vpn_l2tp_users_edit.php:177 usr/local/www/vpn_l2tp.php:446 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/services_snmp.php:415 usr/local/www/system.php:469 +#: usr/local/www/vpn_ipsec_phase1.php:865 usr/local/www/diag_nanobsd.php:209 +#: usr/local/www/diag_nanobsd.php:277 usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/system_authservers.php:729 +#: usr/local/www/firewall_shaper_layer7.php:569 usr/local/www/vpn_l2tp.php:449 +#: usr/local/www/services_router_advertisements.php:400 +#: usr/local/www/system_gateways_edit.php:632 +#: usr/local/www/system_camanager.php:366 +#: usr/local/www/system_camanager.php:577 +#: usr/local/www/services_captiveportal_ip_edit.php:223 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/firewall_shaper.php:350 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/system_groupmanager.php:390 +#: usr/local/www/diag_logs_settings.php:348 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/firewall_shaper_vinterface.php:319 +#: usr/local/www/vpn_openvpn_client.php:922 +#: usr/local/www/system_usermanager_addprivs.php:205 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1566 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:790 usr/local/www/vpn_ipsec.php:173 +#: usr/local/www/system_firmware_settings.php:260 +#: usr/local/www/vpn_openvpn_csc.php:657 +#: usr/local/www/interfaces_lagg_edit.php:232 usr/local/www/system.php:469 +#: usr/local/www/firewall_schedule_edit.php:1155 +#: usr/local/www/firewall_nat_edit.php:849 +#: usr/local/www/services_captiveportal_hostname_edit.php:203 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/vpn_ipsec_keys_edit.php:143 +#: usr/local/www/services_wol_edit.php:157 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/services_ntpd.php:151 +#: usr/local/www/status_rrd_graph_settings.php:226 +#: usr/local/www/services_dhcpv6_relay.php:191 +#: usr/local/www/firewall_aliases_import.php:154 +#: usr/local/www/diag_smart.php:240 +#: usr/local/www/services_captiveportal_vouchers.php:627 +#: usr/local/www/vpn_pppoe_edit.php:593 usr/local/www/services_dhcp.php:1126 +#: usr/local/www/services_captiveportal_vouchers_edit.php:205 +#: usr/local/www/system_certmanager.php:186 +#: usr/local/www/system_certmanager.php:577 +#: usr/local/www/system_certmanager.php:995 +#: usr/local/www/status_lb_pool.php:217 +#: usr/local/www/load_balancer_setting.php:160 +#: usr/local/www/system_advanced_admin.php:535 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/system_advanced_misc.php:546 +#: usr/local/www/system_routes_edit.php:316 +#: usr/local/www/services_captiveportal_mac_edit.php:214 +#: usr/local/www/system_crlmanager.php:295 +#: usr/local/www/system_crlmanager.php:388 +#: usr/local/www/system_crlmanager.php:420 +#: usr/local/www/services_dhcpv6.php:827 +#: usr/local/www/firewall_nat_out.php:331 +#: usr/local/www/system_usermanager_passwordmg.php:125 +#: usr/local/www/firewall_nat_npt_edit.php:274 +#: usr/local/www/interfaces_groups_edit.php:323 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/system_gateway_groups_edit.php:343 +#: usr/local/www/system_authservers.php:745 +#: usr/local/www/system_advanced_firewall.php:537 +#: usr/local/www/services_captiveportal.php:966 +#: usr/local/www/system_groupmanager_addprivs.php:222 +#: usr/local/www/firewall_aliases_edit.php:694 usr/local/www/vpn_pptp.php:477 +#: usr/local/www/pkg_mgr_settings.php:120 +#: usr/local/www/system_usermanager_settings.php:161 +#: usr/local/www/pkg_edit.php:420 usr/local/www/edit.php:185 +#: usr/local/www/vpn_l2tp_users_edit.php:177 +#: usr/local/www/interfaces_bridge_edit.php:594 +#: usr/local/www/services_igmpproxy_edit.php:282 +#: usr/local/www/services_igmpproxy.php:155 +#: usr/local/www/firewall_nat_1to1_edit.php:464 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124 +#: usr/local/www/system_advanced_notifications.php:96 +#: usr/local/www/system_advanced_notifications.php:281 +#: usr/local/www/vpn_pptp_users_edit.php:169 +#: usr/local/www/services_rfc2136_edit.php:200 +#: usr/local/www/services_dnsmasq.php:235 +#: usr/local/www/vpn_ipsec_phase1.php:886 +#: usr/local/www/system_usermanager.php:772 +#: usr/local/www/vpn_ipsec_mobile.php:657 +#: usr/local/www/load_balancer_pool_edit.php:326 +#: usr/local/www/system_advanced_network.php:304 +#: usr/local/www/firewall_nat_out_edit.php:664 +#: usr/local/www/vpn_openvpn_server.php:1668 +#: usr/local/www/vpn_ipsec_phase2.php:791 usr/local/www/diag_nanobsd.php:209 +#: usr/local/www/diag_nanobsd.php:277 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/services_dhcp_relay.php:190 +#: usr/local/www/interfaces_assign.php:501 usr/local/www/services_snmp.php:430 +#: usr/local/www/interfaces_qinq_edit.php:398 +#: usr/local/www/system_advanced_sysctl.php:104 +#: usr/local/www/system_advanced_sysctl.php:257 +#: usr/local/www/interfaces.php:2664 +msgid "Save" +msgstr "Kaydet" + +#: usr/local/www/pkg_edit.php:415 usr/local/www/firewall_rules_edit.php:1077 +#: usr/local/www/pkg_edit.php:424 usr/local/www/firewall_rules_edit.php:1112 +#: usr/local/www/pkg_edit.php:427 usr/local/www/firewall_rules_edit.php:1127 +#: usr/local/www/pkg_edit.php:431 +msgid "Advanced features" +msgstr "Gelişmiş özellikler" + +#: usr/local/www/pkg_edit.php:817 usr/local/www/firewall_shaper_layer7.php:65 +#: usr/local/www/diag_packet_capture.php:203 usr/local/www/vpn_ipsec.php:422 +#: usr/local/www/interfaces_wireless.php:133 usr/local/www/vpn_pptp.php:477 +#: usr/local/www/status_graph.php:291 usr/local/www/carp_status.php:194 +#: usr/local/www/status_queues.php:172 usr/local/www/status_graph_cpu.php:53 +#: usr/local/www/vpn_pppoe_edit.php:595 usr/local/www/vpn_ipsec.php:433 +#: usr/local/www/status_graph.php:286 usr/local/www/pkg_edit.php:864 +#: usr/local/www/status_queues.php:180 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/carp_status.php:187 +#: usr/local/www/vpn_ipsec.php:432 usr/local/www/status_graph.php:297 +#: usr/local/www/pkg_edit.php:873 usr/local/www/status_queues.php:181 +#: usr/local/www/vpn_pptp.php:479 usr/local/www/interfaces_wireless.php:134 +#: usr/local/www/diag_packet_capture.php:270 +#: usr/local/www/firewall_shaper_layer7.php:65 usr/local/www/vpn_ipsec.php:438 +#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph.php:308 +#: usr/local/www/diag_packet_capture.php:270 +#: usr/local/www/interfaces_wireless.php:136 +#: usr/local/www/vpn_pppoe_edit.php:599 usr/local/www/vpn_pptp.php:482 +#: usr/local/www/pkg_edit.php:917 usr/local/www/status_queues.php:163 +#: usr/local/www/carp_status.php:187 +msgid "Note" +msgstr "Not" + +#: usr/local/www/pkg_edit.php:823 usr/local/www/pkg_edit.php:835 +#: usr/local/www/firewall_aliases_import.php:155 +#: usr/local/www/firewall_shaper_layer7.php:573 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:546 +#: usr/local/www/services_wol_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:583 +#: usr/local/www/interfaces_gif_edit.php:218 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/interfaces_groups_edit.php:323 +#: usr/local/www/firewall_aliases_edit.php:687 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:846 +#: usr/local/www/firewall_nat_out_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:1065 +#: usr/local/www/firewall_rules_edit.php:1480 +#: usr/local/www/firewall_schedule_edit.php:1157 +#: usr/local/www/interfaces.php:1443 usr/local/www/interfaces.php:1549 +#: usr/local/www/interfaces.php:2444 +#: usr/local/www/interfaces_vlan_edit.php:189 +#: usr/local/www/system_routes_edit.php:255 +#: usr/local/www/system_routes_edit.php:275 +#: usr/local/www/interfaces_lagg_edit.php:218 +#: usr/local/www/interfaces_ppps_edit.php:784 +#: usr/local/www/interfaces_qinq_edit.php:395 +#: usr/local/www/interfaces_wireless_edit.php:195 +#: usr/local/www/load_balancer_monitor_edit.php:356 +#: usr/local/www/load_balancer_pool_edit.php:312 +#: usr/local/www/load_balancer_virtual_server_edit.php:280 +#: usr/local/www/services_captiveportal.php:924 +#: usr/local/www/services_dhcp_edit.php:251 +#: usr/local/www/services_dnsmasq_edit.php:172 +#: usr/local/www/load_balancer_relay_action_edit.php:557 +#: usr/local/www/load_balancer_relay_protocol_edit.php:280 +#: usr/local/www/services_captiveportal_vouchers.php:598 +#: usr/local/www/services_dyndns_edit.php:237 +#: usr/local/www/services_igmpproxy_edit.php:281 +#: usr/local/www/services_rfc2136_edit.php:201 +#: usr/local/www/system_advanced_sysctl.php:258 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateways_edit.php:492 +#: usr/local/www/system_groupmanager_addprivs.php:225 +#: usr/local/www/system_usermanager_addprivs.php:206 +#: usr/local/www/vpn_l2tp_users_edit.php:177 +#: usr/local/www/vpn_pppoe_edit.php:590 +#: usr/local/www/firewall_nat_npt_edit.php:270 +#: usr/local/www/services_dhcpv6_edit.php:228 +#: usr/local/www/system_routes_edit.php:287 +#: usr/local/www/system_routes_edit.php:315 +#: usr/local/www/services_unbound_acls.php:306 +#: usr/local/www/system_gateway_groups_edit.php:283 +#: usr/local/www/services_captiveportal_vouchers.php:605 +#: usr/local/www/services_dyndns_edit.php:367 +#: usr/local/www/services_dnsmasq_edit.php:284 +#: usr/local/www/firewall_nat_1to1_edit.php:466 +#: usr/local/www/services_dhcpv6_edit.php:237 +#: usr/local/www/firewall_nat_npt_edit.php:275 usr/local/www/pkg_edit.php:870 +#: usr/local/www/firewall_nat_out_edit.php:662 +#: usr/local/www/load_balancer_relay_action_edit.php:556 +#: usr/local/www/firewall_rules_edit.php:1100 +#: usr/local/www/firewall_rules_edit.php:1551 +#: usr/local/www/services_igmpproxy_edit.php:283 +#: usr/local/www/firewall_aliases_edit.php:692 +#: usr/local/www/system_groupmanager_addprivs.php:223 +#: usr/local/www/services_captiveportal.php:969 +#: usr/local/www/system_gateways_edit.php:527 +#: usr/local/www/load_balancer_virtual_server_edit.php:269 +#: usr/local/www/interfaces_bridge_edit.php:592 +#: usr/local/www/firewall_nat_edit.php:854 +#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:1655 +#: usr/local/www/interfaces.php:2645 +#: usr/local/www/load_balancer_pool_edit.php:329 +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/interfaces_gre_edit.php:228 +#: usr/local/www/vpn_pppoe_edit.php:591 +#: usr/local/www/system_routes_edit.php:288 +#: usr/local/www/system_routes_edit.php:316 +#: usr/local/www/system_gateway_groups_edit.php:343 +#: usr/local/www/interfaces_vlan_edit.php:190 +#: usr/local/www/services_captiveportal_vouchers.php:619 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/firewall_nat_1to1_edit.php:464 +#: usr/local/www/services_dhcpv6_edit.php:239 +#: usr/local/www/firewall_nat_npt_edit.php:274 usr/local/www/pkg_edit.php:879 +#: usr/local/www/interfaces_qinq_edit.php:396 +#: usr/local/www/interfaces_gif_edit.php:219 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/firewall_schedule_edit.php:1156 +#: usr/local/www/interfaces_ppps_edit.php:785 +#: usr/local/www/firewall_aliases_edit.php:695 +#: usr/local/www/interfaces_lagg_edit.php:219 +#: usr/local/www/services_captiveportal.php:965 +#: usr/local/www/system_gateways_edit.php:627 +#: usr/local/www/load_balancer_virtual_server_edit.php:267 +#: usr/local/www/interfaces_bridge_edit.php:593 +#: usr/local/www/interfaces_groups_edit.php:324 +#: usr/local/www/firewall_nat_edit.php:853 +#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:1537 +#: usr/local/www/interfaces.php:1643 usr/local/www/interfaces.php:2633 +#: usr/local/www/load_balancer_pool_edit.php:327 +#: usr/local/www/vpn_l2tp_users_edit.php:178 +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/firewall_shaper_layer7.php:573 +#: usr/local/www/system_gateways_edit.php:632 +#: usr/local/www/interfaces_wireless_edit.php:197 +#: usr/local/www/load_balancer_relay_protocol_edit.php:278 +#: usr/local/www/interfaces_gre_edit.php:229 +#: usr/local/www/system_usermanager_addprivs.php:206 +#: usr/local/www/services_dhcpv6_edit.php:242 +#: usr/local/www/services_dyndns_edit.php:371 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1566 +#: usr/local/www/load_balancer_virtual_server_edit.php:267 +#: usr/local/www/interfaces_vlan_edit.php:193 +#: usr/local/www/interfaces_ppps_edit.php:791 +#: usr/local/www/interfaces_lagg_edit.php:232 +#: usr/local/www/firewall_schedule_edit.php:1156 +#: usr/local/www/firewall_nat_edit.php:849 +#: usr/local/www/interfaces_gif_edit.php:230 +#: usr/local/www/services_dhcp_edit.php:494 +#: usr/local/www/services_wol_edit.php:157 +#: usr/local/www/firewall_virtual_ip_edit.php:471 +#: usr/local/www/firewall_aliases_import.php:155 +#: usr/local/www/services_captiveportal_vouchers.php:628 +#: usr/local/www/vpn_pppoe_edit.php:594 +#: usr/local/www/load_balancer_relay_action_edit.php:554 +#: usr/local/www/system_routes_edit.php:288 +#: usr/local/www/system_routes_edit.php:316 +#: usr/local/www/firewall_nat_npt_edit.php:274 +#: usr/local/www/interfaces_groups_edit.php:324 +#: usr/local/www/load_balancer_monitor_edit.php:354 +#: usr/local/www/system_gateway_groups_edit.php:343 +#: usr/local/www/services_captiveportal.php:967 +#: usr/local/www/system_groupmanager_addprivs.php:223 +#: usr/local/www/firewall_aliases_edit.php:695 usr/local/www/pkg_edit.php:923 +#: usr/local/www/vpn_l2tp_users_edit.php:178 +#: usr/local/www/interfaces_bridge_edit.php:594 +#: usr/local/www/services_igmpproxy_edit.php:283 +#: usr/local/www/firewall_nat_1to1_edit.php:464 +#: usr/local/www/services_dnsmasq_edit.php:285 +#: usr/local/www/services_rfc2136_edit.php:201 +#: usr/local/www/load_balancer_pool_edit.php:327 +#: usr/local/www/firewall_nat_out_edit.php:664 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160 +#: usr/local/www/interfaces_qinq_edit.php:399 +#: usr/local/www/system_advanced_sysctl.php:258 +#: usr/local/www/interfaces.php:1547 usr/local/www/interfaces.php:1652 +#: usr/local/www/interfaces.php:2665 +msgid "Cancel" +msgstr "İptal" + +#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:1083 +#: usr/local/www/firewall_rules_edit.php:1117 +#: usr/local/www/firewall_rules_edit.php:1133 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1217 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1291 +#: usr/local/www/firewall_rules_edit.php:1342 +#: usr/local/www/firewall_rules_edit.php:1392 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/interfaces.php:1330 usr/local/www/interfaces.php:1940 +#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcp.php:741 +#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcp.php:765 +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:799 +#: usr/local/www/services_dnsmasq.php:194 +#: usr/local/www/services_dnsmasq.php:197 +#: usr/local/www/services_dnsmasq.php:200 usr/local/www/fbegin.inc:83 +#: usr/local/www/system_gateways_edit.php:415 +#: usr/local/www/vpn_openvpn_client.php:829 +#: usr/local/www/vpn_openvpn_csc.php:642 +#: usr/local/www/vpn_openvpn_server.php:1412 +#: usr/local/www/services_dhcpv6.php:651 usr/local/www/services_dhcpv6.php:667 +#: usr/local/www/services_dhcpv6.php:679 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcpv6.php:703 usr/local/www/services_dhcpv6.php:725 +#: usr/local/www/fbegin.inc:99 usr/local/www/pkg_edit.php:1052 +#: usr/local/www/firewall_rules_edit.php:943 +#: usr/local/www/firewall_rules_edit.php:1118 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/firewall_rules_edit.php:1168 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1252 +#: usr/local/www/firewall_rules_edit.php:1276 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1331 +#: usr/local/www/firewall_rules_edit.php:1358 +#: usr/local/www/firewall_rules_edit.php:1413 +#: usr/local/www/firewall_rules_edit.php:1463 +#: usr/local/www/firewall_rules_edit.php:1517 +#: usr/local/www/services_unbound_advanced.php:88 +#: usr/local/www/system_gateways_edit.php:436 +#: usr/local/www/vpn_openvpn_server.php:1554 +#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcp.php:779 +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcp.php:803 +#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcp.php:837 +#: usr/local/www/firewall_nat_edit.php:538 usr/local/www/interfaces.php:1434 +#: usr/local/www/interfaces.php:2118 usr/local/www/vpn_openvpn_client.php:834 +#: usr/local/www/services_dhcpv6.php:744 usr/local/www/services_dhcpv6.php:760 +#: usr/local/www/services_dhcpv6.php:773 usr/local/www/services_dhcpv6.php:786 +#: usr/local/www/services_dhcpv6.php:798 usr/local/www/services_dhcpv6.php:820 +#: usr/local/www/services_dnsmasq.php:195 +#: usr/local/www/services_dnsmasq.php:198 +#: usr/local/www/services_dnsmasq.php:201 usr/local/www/fbegin.inc:108 +#: usr/local/www/pkg_edit.php:1063 usr/local/www/vpn_openvpn_csc.php:641 +#: usr/local/www/system_gateways_edit.php:542 +#: usr/local/www/vpn_openvpn_server.php:1596 +#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcp.php:961 +#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcp.php:987 +#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcp.php:1011 +#: usr/local/www/services_dhcp.php:1034 +#: usr/local/www/firewall_nat_edit.php:537 usr/local/www/interfaces.php:1422 +#: usr/local/www/interfaces.php:2106 usr/local/www/vpn_openvpn_client.php:883 +#: usr/local/www/services_dhcpv6.php:675 usr/local/www/services_dhcpv6.php:704 +#: usr/local/www/services_dhcpv6.php:717 usr/local/www/services_dhcpv6.php:729 +#: usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/system_gateways_edit.php:546 +#: usr/local/www/vpn_openvpn_client.php:902 +#: usr/local/www/firewall_rules_edit.php:952 +#: usr/local/www/firewall_rules_edit.php:1133 +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1267 +#: usr/local/www/firewall_rules_edit.php:1291 +#: usr/local/www/firewall_rules_edit.php:1303 +#: usr/local/www/firewall_rules_edit.php:1346 +#: usr/local/www/firewall_rules_edit.php:1373 +#: usr/local/www/firewall_rules_edit.php:1428 +#: usr/local/www/firewall_rules_edit.php:1478 +#: usr/local/www/firewall_rules_edit.php:1532 +#: usr/local/www/vpn_openvpn_csc.php:641 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:974 +#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcp.php:1000 +#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcp.php:1024 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:692 +#: usr/local/www/services_dhcpv6.php:708 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcpv6.php:734 usr/local/www/services_dhcpv6.php:746 +#: usr/local/www/services_dhcpv6.php:768 usr/local/www/pkg_edit.php:1107 +#: usr/local/www/fbegin.inc:100 usr/local/www/services_dnsmasq.php:220 +#: usr/local/www/services_dnsmasq.php:223 +#: usr/local/www/services_dnsmasq.php:226 +#: usr/local/www/vpn_openvpn_server.php:1648 usr/local/www/interfaces.php:1435 +#: usr/local/www/interfaces.php:2136 +msgid "Advanced" +msgstr "Gelişmiş" + +#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_rules_edit.php:1083 +#: usr/local/www/firewall_rules_edit.php:1117 +#: usr/local/www/firewall_rules_edit.php:1133 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1217 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1291 +#: usr/local/www/firewall_rules_edit.php:1342 +#: usr/local/www/firewall_rules_edit.php:1392 +#: usr/local/www/firewall_rules_edit.php:1446 +#: usr/local/www/interfaces.php:1330 usr/local/www/services_dnsmasq.php:197 +#: usr/local/www/pkg_edit.php:1052 usr/local/www/firewall_rules_edit.php:1118 +#: usr/local/www/firewall_rules_edit.php:1152 +#: usr/local/www/firewall_rules_edit.php:1168 +#: usr/local/www/firewall_rules_edit.php:1210 +#: usr/local/www/firewall_rules_edit.php:1252 +#: usr/local/www/firewall_rules_edit.php:1276 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_rules_edit.php:1331 +#: usr/local/www/firewall_rules_edit.php:1358 +#: usr/local/www/firewall_rules_edit.php:1413 +#: usr/local/www/firewall_rules_edit.php:1463 +#: usr/local/www/firewall_rules_edit.php:1517 +#: usr/local/www/interfaces.php:1434 usr/local/www/services_dnsmasq.php:198 +#: usr/local/www/pkg_edit.php:1063 usr/local/www/interfaces.php:1422 +#: usr/local/www/firewall_rules_edit.php:1133 +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1267 +#: usr/local/www/firewall_rules_edit.php:1291 +#: usr/local/www/firewall_rules_edit.php:1303 +#: usr/local/www/firewall_rules_edit.php:1346 +#: usr/local/www/firewall_rules_edit.php:1373 +#: usr/local/www/firewall_rules_edit.php:1428 +#: usr/local/www/firewall_rules_edit.php:1478 +#: usr/local/www/firewall_rules_edit.php:1532 usr/local/www/pkg_edit.php:1107 +#: usr/local/www/services_dnsmasq.php:223 usr/local/www/interfaces.php:1435 +msgid "Show advanced option" +msgstr "Gelişmiş seçeneği göster" + +#: usr/local/www/pkg_mgr_installed.php:45 +#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs.php:77 usr/local/www/diag_logs_auth.php:65 +#: usr/local/www/diag_logs_dhcp.php:70 usr/local/www/diag_logs_filter.php:101 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_ipsec.php:102 usr/local/www/diag_logs_ntpd.php:65 +#: usr/local/www/diag_logs_openvpn.php:69 +#: usr/local/www/diag_logs_settings.php:210 +#: usr/local/www/diag_logs_vpn.php:126 usr/local/www/diag_backup.php:117 +#: usr/local/www/system.php:74 usr/local/www/system.php:231 +#: usr/local/www/system.php:251 usr/local/www/system_firmware.php:102 +#: usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_settings.php:74 +#: usr/local/www/system_routes.php:94 usr/local/www/system_routes_edit.php:165 +#: usr/local/www/diag_logs_filter_summary.php:184 +#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/diag_logs_relayd.php:66 +#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81 +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_settings.php:62 +#: usr/local/www/fbegin.inc:319 usr/local/www/fbegin.inc:440 +#: usr/local/www/status_rrd_graph.php:329 +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_settings.php:53 +#: usr/local/www/status_rrd_graph_settings.php:128 +#: usr/local/www/system_advanced_admin.php:242 +#: usr/local/www/system_advanced_firewall.php:178 +#: usr/local/www/system_advanced_misc.php:179 +#: usr/local/www/system_advanced_network.php:148 +#: usr/local/www/system_advanced_notifications.php:131 +#: usr/local/www/system_advanced_sysctl.php:125 +#: usr/local/www/system_authservers.php:44 +#: usr/local/www/system_camanager.php:50 +#: usr/local/www/system_certmanager.php:51 +#: usr/local/www/system_crlmanager.php:46 +#: usr/local/www/system_gateway_groups.php:88 +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways.php:120 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/system_usermanager.php:54 +#: usr/local/www/system_usermanager_passwordmg.php:43 +#: usr/local/www/system_usermanager_settings.php:51 +#: usr/local/www/diag_logs_wireless.php:67 +#: usr/local/www/diag_logs_routing.php:65 +#: usr/local/www/system_routes_edit.php:198 usr/local/www/pkg_mgr.php:55 +#: usr/local/www/pkg_mgr.php:93 usr/local/www/diag_logs_settings.php:215 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/fbegin.inc:337 usr/local/www/fbegin.inc:458 +#: usr/local/www/status_rrd_graph_settings.php:129 +#: usr/local/www/system_certmanager.php:56 usr/local/www/diag_backup.php:195 +#: usr/local/www/diag_logs_resolver.php:78 +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 +#: usr/local/www/system_advanced_notifications.php:140 +#: usr/local/www/status_rrd_graph.php:377 +#: usr/local/www/system_advanced_misc.php:199 +#: usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/system_hasync.php:96 usr/local/www/diag_logs_gateways.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:98 usr/local/www/system.php:75 +#: usr/local/www/system.php:242 usr/local/www/system.php:262 +#: usr/local/www/diag_logs_routing.php:66 +#: usr/local/www/diag_logs_settings.php:222 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/fbegin.inc:283 usr/local/www/fbegin.inc:428 +#: usr/local/www/diag_logs_relayd.php:67 usr/local/www/diag_logs_auth.php:66 +#: usr/local/www/diag_logs_ipsec.php:103 +#: usr/local/www/diag_logs_resolver.php:79 usr/local/www/diag_logs_ntpd.php:66 +#: usr/local/www/system_advanced_misc.php:218 +#: usr/local/www/diag_logs_dhcp.php:71 +#: usr/local/www/system_gateway_groups.php:89 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/diag_logs_wireless.php:68 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210 +#: usr/local/www/diag_logs_filter_summary.php:185 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_gateways.php:79 +#: usr/local/www/diag_logs_openvpn.php:70 +#: usr/local/www/diag_logs_filter_dynamic.php:99 usr/local/www/system.php:235 +#: usr/local/www/system.php:255 usr/local/www/diag_logs_filter.php:91 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:210 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/system_camanager.php:51 usr/local/www/diag_logs_auth.php:66 +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/diag_logs_settings.php:222 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/diag_logs_filter.php:91 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_routing.php:66 usr/local/www/system.php:75 +#: usr/local/www/system.php:235 usr/local/www/system.php:255 +#: usr/local/www/diag_logs_dhcp.php:71 usr/local/www/status_rrd_graph.php:402 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 +#: usr/local/www/status_rrd_graph_settings.php:53 +#: usr/local/www/status_rrd_graph_settings.php:129 +#: usr/local/www/diag_logs.php:77 +#: usr/local/www/diag_logs_filter_dynamic.php:97 +#: usr/local/www/system_routes.php:98 usr/local/www/diag_logs_ntpd.php:66 +#: usr/local/www/system_hasync.php:97 usr/local/www/system_certmanager.php:57 +#: usr/local/www/diag_logs_openvpn.php:70 +#: usr/local/www/system_advanced_admin.php:242 +#: usr/local/www/system_advanced_misc.php:222 usr/local/www/pkg_mgr.php:55 +#: usr/local/www/pkg_mgr.php:93 usr/local/www/diag_logs_ppp.php:68 +#: usr/local/www/system_routes_edit.php:198 +#: usr/local/www/system_crlmanager.php:46 +#: usr/local/www/system_usermanager_passwordmg.php:43 +#: usr/local/www/diag_logs_gateways.php:79 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/system_authservers.php:44 +#: usr/local/www/system_advanced_firewall.php:221 +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/diag_backup.php:195 usr/local/www/pkg_mgr_settings.php:62 +#: usr/local/www/system_usermanager_settings.php:51 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:275 +#: usr/local/www/fbegin.inc:420 usr/local/www/diag_logs_relayd.php:67 +#: usr/local/www/diag_logs_vpn.php:126 +#: usr/local/www/system_advanced_notifications.php:140 +#: usr/local/www/diag_logs_ipsec.php:103 +#: usr/local/www/system_usermanager.php:54 +#: usr/local/www/system_gateways.php:120 +#: usr/local/www/system_advanced_network.php:148 +#: usr/local/www/diag_logs_wireless.php:68 +#: usr/local/www/system_gateway_groups.php:89 +#: usr/local/www/diag_logs_resolver.php:79 +#: usr/local/www/system_advanced_sysctl.php:125 +#: usr/local/www/diag_logs_filter_summary.php:185 +msgid "System" +msgstr "Sistem" + +#: usr/local/www/pkg_mgr_installed.php:45 +#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_backup.php:113 +#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81 +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/fbegin.inc:440 +#: usr/local/www/pkg_mgr.php:55 usr/local/www/pkg_mgr.php:93 +#: usr/local/www/fbegin.inc:458 usr/local/www/diag_backup.php:190 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/fbegin.inc:428 +#: usr/local/www/pkg_mgr_installed.php:51 +#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/pkg_mgr.php:55 +#: usr/local/www/pkg_mgr.php:93 usr/local/www/diag_backup.php:190 +#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:420 +msgid "Package Manager" +msgstr "Paket Yöneticisi" + +#: usr/local/www/pkg_mgr_installed.php:76 usr/local/www/pkg_mgr.php:99 +#: usr/local/www/pkg_mgr.php:115 usr/local/www/pkg_mgr_installed.php:97 +#: usr/local/www/pkg_mgr_installed.php:97 usr/local/www/pkg_mgr.php:115 +msgid "Available Packages" +msgstr "Kurulabilir Paketler" + +#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/pkg_mgr.php:103 +#: usr/local/www/pkg_mgr_settings.php:93 usr/local/www/pkg_mgr.php:119 +#: usr/local/www/pkg_mgr_installed.php:101 +#: usr/local/www/pkg_mgr_installed.php:101 usr/local/www/pkg_mgr.php:119 +#: usr/local/www/pkg_mgr_settings.php:93 +msgid "Installed Packages" +msgstr "Kurulu Paketler" + +#: usr/local/www/pkg_mgr_installed.php:90 usr/local/www/pkg_mgr.php:113 +msgid "Package Name" +msgstr "Paket Adı" + +#: usr/local/www/pkg_mgr_installed.php:91 usr/local/www/pkg_mgr.php:114 +#: usr/local/www/pkg_mgr.php:130 usr/local/www/pkg_mgr_installed.php:112 +#: usr/local/www/pkg_mgr_installed.php:112 usr/local/www/pkg_mgr.php:130 +msgid "Category" +msgstr "Kategori" + +#: usr/local/www/pkg_mgr_installed.php:92 +#: usr/local/www/pkg_mgr_installed.php:150 usr/local/www/pkg_mgr.php:117 +#: usr/local/www/pkg_mgr.php:200 +msgid "Package Info" +msgstr "Paket bilgisi" + +#: usr/local/www/pkg_mgr_installed.php:93 +msgid "Package Version" +msgstr "Paket Sürümü" + +#: usr/local/www/pkg_mgr_installed.php:116 +#: usr/local/www/pkg_mgr_installed.php:122 +#: usr/local/www/pkg_mgr_installed.php:142 +#: usr/local/www/pkg_mgr_installed.php:144 +#: usr/local/www/pkg_mgr_installed.php:151 +#: usr/local/www/pkg_mgr_installed.php:153 +#: usr/local/www/pkg_mgr_installed.php:142 +#: usr/local/www/pkg_mgr_installed.php:144 +#: usr/local/www/pkg_mgr_installed.php:151 +#: usr/local/www/pkg_mgr_installed.php:153 +msgid "Available" +msgstr "Uygun" + +#: usr/local/www/pkg_mgr_installed.php:117 +#: usr/local/www/pkg_mgr_installed.php:123 +#: usr/local/www/pkg_mgr_installed.php:145 +#: usr/local/www/pkg_mgr_installed.php:154 +#: usr/local/www/pkg_mgr_installed.php:145 +#: usr/local/www/pkg_mgr_installed.php:154 +msgid "Installed" +msgstr "Yüklü" + +#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202 +msgid "No info, check the" +msgstr "Bilgi yok, kontrol edin:" + +#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202 +#, fuzzy +msgid "forum" +msgstr "forum" + +#: usr/local/www/pkg_mgr_installed.php:163 +msgid "Do you really want to remove this package?" +msgstr "Bu paketi kaldırmak istediğinize emin misiniz?" + +#: usr/local/www/pkg_mgr_installed.php:164 +msgid "Remove this package." +msgstr "Bu paketi sil." + +#: usr/local/www/pkg_mgr_installed.php:168 +msgid "Reinstall this package." +msgstr "Paketi tekrar kur." + +#: usr/local/www/pkg_mgr_installed.php:171 +msgid "Reinstall this package's GUI components." +msgstr "Bu paketin arabirim bileşenlerini tekrar kur." + +#: usr/local/www/pkg_mgr_installed.php:181 +#: usr/local/www/pkg_mgr_installed.php:222 +#: usr/local/www/pkg_mgr_installed.php:225 +#: usr/local/www/pkg_mgr_installed.php:225 +msgid "There are no packages currently installed." +msgstr "Kurulu paket yok." + +#: usr/local/www/easyrule.php:34 usr/local/www/easyrule.php:34 +msgid "Status : EasyRule" +msgstr "Durum: Kolay Kural" + +#: usr/local/www/easyrule.php:69 usr/local/www/easyrule.php:69 +msgid "Message" +msgstr "Mesaj" + +#: usr/local/www/easyrule.php:72 usr/local/www/easyrule.php:72 +msgid "" +"This is the Easy Rule status page, mainly used to display errors when adding " +"rules. If you are seeing this, there apparently was not an error, and you " +"navigated to the page directly without telling it what to do" +msgstr "" +"Kolay Kural durum sayfası, kural eklerken oluşan hataların görüntülendiği " +"sayfadır. Bu sayfayı görüyorsanız kural eklenirken herhangi bir hata " +"oluşmadı ve sistem sizi otomatik olarak buraya yönlendirdi." + +#: usr/local/www/easyrule.php:75 usr/local/www/easyrule.php:75 +msgid "" +"This page is meant to be called from the block/pass buttons on the Firewall " +"Logs page" +msgstr "" +"Bu sayfa Güvenlik Duvarı Günlüğü sayfasındaki engelle/izin ver düğmelerinden " +"çağırılmak üzere tasarlanmıştır" + +#: usr/local/www/easyrule.php:75 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs_auth.php:54 usr/local/www/diag_logs_dhcp.php:59 +#: usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/status_wireless.php:41 usr/local/www/status_wireless.php:77 +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/pkg_mgr.php:116 usr/local/www/diag_ipsec.php:48 +#: usr/local/www/diag_ipsec.php:96 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_pkglogs.php:81 +#: usr/local/www/status_filter_reload.php:44 usr/local/www/status_graph.php:85 +#: usr/local/www/carp_status.php:100 usr/local/www/carp_status.php:140 +#: usr/local/www/status_interfaces.php:58 +#: usr/local/www/status_interfaces.php:85 usr/local/www/fbegin.inc:359 +#: usr/local/www/status_queues.php:98 usr/local/www/status_rrd_graph.php:224 +#: usr/local/www/status_rrd_graph_settings.php:113 +#: usr/local/www/status_services.php:226 usr/local/www/status_services.php:246 +#: usr/local/www/status_upnp.php:58 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/status_dhcp_leases.php:48 +#: usr/local/www/status_gateway_groups.php:52 +#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:77 +#: usr/local/www/status_graph_cpu.php:41 usr/local/www/status_lb_pool.php:62 +#: usr/local/www/status_lb_vs.php:56 usr/local/www/status_lb_vs.php:80 +#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:212 +#: usr/local/www/status_openvpn.php:263 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:43 +#: usr/local/www/status_dhcpv6_leases.php:49 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_routing.php:54 usr/local/www/pkg_mgr.php:131 +#: usr/local/www/diag_logs_settings.php:136 usr/local/www/fbegin.inc:377 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/status_queues.php:101 usr/local/www/diag_ipsec.php:107 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/status_rrd_graph.php:244 usr/local/www/status_ntpd.php:94 +#: usr/local/www/status_ntpd.php:107 usr/local/www/status_dhcpv6_leases.php:50 +#: usr/local/www/status_dhcp_leases.php:49 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266 +#: usr/local/www/diag_logs_settings.php:143 usr/local/www/fbegin.inc:323 +#: usr/local/www/status_interfaces.php:60 +#: usr/local/www/status_interfaces.php:88 usr/local/www/carp_status.php:92 +#: usr/local/www/carp_status.php:133 usr/local/www/status_graph.php:90 +#: usr/local/www/diag_ipsec.php:108 usr/local/www/status_wireless.php:78 +#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:123 +#: usr/local/www/status_services.php:222 usr/local/www/status_services.php:242 +#: usr/local/www/status_gateways.php:78 usr/local/www/diag_logs_filter.php:79 +#: usr/local/www/status_services.php:220 usr/local/www/status_services.php:240 +#: usr/local/www/status_dhcpv6_leases.php:50 +#: usr/local/www/status_wireless.php:41 usr/local/www/status_wireless.php:78 +#: usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:263 +#: usr/local/www/status_openvpn.php:314 usr/local/www/diag_logs_filter.php:79 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_graph_cpu.php:41 +#: usr/local/www/diag_logs_routing.php:54 usr/local/www/status_graph.php:101 +#: usr/local/www/diag_logs_dhcp.php:59 +#: usr/local/www/status_filter_reload.php:44 usr/local/www/diag_ipsec.php:48 +#: usr/local/www/diag_ipsec.php:110 usr/local/www/status_rrd_graph.php:248 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/status_interfaces.php:60 +#: usr/local/www/status_interfaces.php:88 usr/local/www/diag_ipsec_spd.php:49 +#: usr/local/www/diag_logs_openvpn.php:45 usr/local/www/status_lb_pool.php:62 +#: usr/local/www/pkg_mgr.php:131 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/diag_pkglogs.php:81 usr/local/www/status_ntpd.php:109 +#: usr/local/www/status_ntpd.php:123 usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_dhcp_leases.php:49 usr/local/www/status_queues.php:109 +#: usr/local/www/status_gateway_groups.php:52 usr/local/www/fbegin.inc:315 +#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_ipsec.php:91 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:43 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_lb_vs.php:56 usr/local/www/status_lb_vs.php:80 +#: usr/local/www/diag_ipsec_sad.php:49 usr/local/www/status_gateways.php:51 +#: usr/local/www/status_gateways.php:78 +#: usr/local/www/diag_logs_wireless.php:56 usr/local/www/status_upnp.php:58 +#: usr/local/www/easyrule.php:75 usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/carp_status.php:92 usr/local/www/carp_status.php:133 +msgid "Status" +msgstr "Durum" + +#: usr/local/www/easyrule.php:75 usr/local/www/easyrule.php:75 +msgid "System Logs, Firewall Tab" +msgstr "Sistem Kayıtları, Güvenlik Duvarı Sekmesi" + +# Kısaltma kullanılmıştır çünki sayfa içindeki menülere sığmıyordu (technical) +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/diag_logs.php:78 usr/local/www/diag_logs_auth.php:66 +#: usr/local/www/diag_logs_dhcp.php:71 usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter.php:102 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_ipsec.php:103 usr/local/www/diag_logs_ntpd.php:66 +#: usr/local/www/diag_logs_openvpn.php:70 +#: usr/local/www/diag_logs_settings.php:211 +#: usr/local/www/diag_logs_vpn.php:127 usr/local/www/firewall_aliases.php:150 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_rules.php:52 +#: usr/local/www/firewall_rules_edit.php:628 +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/firewall_shaper.php:54 +#: usr/local/www/firewall_virtual_ip.php:149 +#: usr/local/www/diag_logs_filter_summary.php:185 +#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_relayd.php:67 +#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:335 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/diag_logs_wireless.php:68 +#: usr/local/www/diag_logs_routing.php:66 +#: usr/local/www/diag_logs_settings.php:216 usr/local/www/fbegin.inc:353 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/diag_logs_resolver.php:79 +#: usr/local/www/firewall_aliases.php:153 +#: usr/local/www/diag_logs_gateways.php:79 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/diag_logs_filter_dynamic.php:99 +#: usr/local/www/diag_logs_routing.php:67 +#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:299 +#: usr/local/www/diag_logs_relayd.php:68 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:165 usr/local/www/diag_logs_auth.php:67 +#: usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/diag_logs_ipsec.php:104 +#: usr/local/www/diag_logs_resolver.php:80 usr/local/www/diag_logs_ntpd.php:67 +#: usr/local/www/firewall_rules.php:49 usr/local/www/diag_logs_dhcp.php:72 +#: usr/local/www/diag_logs_wireless.php:69 +#: usr/local/www/diag_logs_filter_summary.php:186 +#: usr/local/www/firewall_aliases.php:155 +#: usr/local/www/diag_logs_gateways.php:80 +#: usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/diag_logs_openvpn.php:71 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/firewall_virtual_ip.php:152 +#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_filter.php:92 +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper.php:54 usr/local/www/diag_logs_auth.php:67 +#: usr/local/www/diag_logs_settings.php:223 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_filter.php:92 +#: usr/local/www/firewall_virtual_ip.php:166 +#: usr/local/www/diag_logs_routing.php:67 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/firewall_nat_edit.php:439 +#: usr/local/www/firewall_aliases.php:155 usr/local/www/diag_logs_dhcp.php:72 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +#: usr/local/www/firewall_shaper_wizards.php:73 usr/local/www/diag_logs.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:98 +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/diag_logs_ntpd.php:67 usr/local/www/firewall_nat.php:165 +#: usr/local/www/diag_logs_openvpn.php:71 usr/local/www/diag_logs_ppp.php:69 +#: usr/local/www/firewall_nat_out.php:294 usr/local/www/firewall_rules.php:49 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/diag_logs_gateways.php:80 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/firewall_nat_1to1_edit.php:221 usr/local/www/fbegin.inc:291 +#: usr/local/www/diag_logs_relayd.php:68 usr/local/www/diag_logs_vpn.php:127 +#: usr/local/www/diag_logs_ipsec.php:104 +#: usr/local/www/firewall_nat_out_edit.php:317 +#: usr/local/www/diag_logs_wireless.php:69 +#: usr/local/www/diag_logs_resolver.php:80 +#: usr/local/www/diag_logs_filter_summary.php:186 +msgid "Firewall" +msgstr "Güvenlik Duvarı" + +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/firewall_aliases.php:150 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/diag_backup.php:103 usr/local/www/fbegin.inc:110 +#: usr/local/www/fbegin.inc:127 usr/local/www/services_dnsmasq_edit.php:225 +#: usr/local/www/diag_backup.php:180 usr/local/www/firewall_aliases.php:153 +#: usr/local/www/fbegin.inc:136 usr/local/www/services_dnsmasq_edit.php:226 +#: usr/local/www/firewall_aliases.php:155 +#: usr/local/www/firewall_aliases.php:155 +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_aliases_import.php:59 +#: usr/local/www/firewall_aliases_edit.php:56 +#: usr/local/www/diag_backup.php:180 +#: usr/local/www/services_dnsmasq_edit.php:226 usr/local/www/fbegin.inc:128 +msgid "Aliases" +msgstr "Gruplar" + +#: usr/local/www/firewall_aliases_import.php:48 +#: usr/local/www/firewall_aliases_import.php:48 +msgid "Bulk import" +msgstr "Toplu İçeri Aktarım" + +#: usr/local/www/firewall_aliases_import.php:64 +#: usr/local/www/firewall_aliases_import.php:64 +msgid "The alias name may only consist of the characters" +msgstr "Grup adı sadece karakterlerden oluşmalıdır" + +#: usr/local/www/firewall_aliases_import.php:68 +#: usr/local/www/firewall_aliases_edit.php:151 +#: usr/local/www/firewall_aliases_import.php:68 +#: usr/local/www/firewall_aliases_edit.php:151 +msgid "An alias with this name already exists." +msgstr "Bu isimde bir grup adı zaten var." + +#: usr/local/www/firewall_aliases_import.php:74 +#: usr/local/www/firewall_aliases_edit.php:160 +#: usr/local/www/firewall_aliases_import.php:74 +#: usr/local/www/firewall_aliases_edit.php:160 +#, php-format +msgid "Cannot use a reserved keyword as alias name %s" +msgstr "Ayrılmış kelime %s grup adı olarak kullanılamaz" + +#: usr/local/www/firewall_aliases_import.php:79 +#: usr/local/www/firewall_aliases_edit.php:165 +#: usr/local/www/firewall_aliases_import.php:79 +#: usr/local/www/firewall_aliases_edit.php:165 +msgid "An interface description with this name already exists." +msgstr "Bu isimde bir arabirim açıklaması zaten var." + +#: usr/local/www/firewall_aliases_import.php:94 +#: usr/local/www/firewall_aliases_import.php:94 +#, php-format +msgid "%s is not an IP address. Please correct the error to continue" +msgstr "%s bir IP adresi değildir. Devam etmek için hatayı düzeltiniz" + +#: usr/local/www/firewall_aliases_import.php:131 +#: usr/local/www/firewall_aliases_import.php:131 +msgid "Alias Import" +msgstr "Grup İçeri Aktar" + +#: usr/local/www/firewall_aliases_import.php:134 +#: usr/local/www/firewall_aliases_import.php:134 +msgid "Alias Name" +msgstr "Grup Adı" + +#: usr/local/www/firewall_aliases_import.php:137 +#: usr/local/www/firewall_aliases_edit.php:585 +#: usr/local/www/firewall_aliases_import.php:137 +msgid "" +"The name of the alias may only consist of the characters \"a-z, A-Z and " +"0-9\"." +msgstr "Grup adı sadece \"a-z, A-Z and 0-9\" karakterleri içerebilir." + +#: usr/local/www/firewall_aliases_import.php:142 +#: usr/local/www/interfaces_lagg_edit.php:211 +#: usr/local/www/services_captiveportal_ip_edit.php:211 +#: usr/local/www/services_captiveportal_mac_edit.php:185 +#: usr/local/www/services_captiveportal_hostname_edit.php:186 +#: usr/local/www/system_gateways_edit.php:487 +#: usr/local/www/vpn_ipsec_phase1.php:580 +#: usr/local/www/vpn_ipsec_phase2.php:502 +#: usr/local/www/vpn_openvpn_client.php:577 +#: usr/local/www/vpn_openvpn_csc.php:346 +#: usr/local/www/vpn_openvpn_server.php:726 +#: usr/local/www/services_captiveportal_zones_edit.php:109 +#: usr/local/www/system_gateways_edit.php:522 +#: usr/local/www/vpn_openvpn_server.php:799 +#: usr/local/www/vpn_ipsec_phase2.php:528 +#: usr/local/www/vpn_openvpn_client.php:582 +#: usr/local/www/vpn_ipsec_phase1.php:593 +#: usr/local/www/services_captiveportal_hostname_edit.php:184 +#: usr/local/www/services_captiveportal_mac_edit.php:183 +#: usr/local/www/interfaces_lagg_edit.php:212 +#: usr/local/www/vpn_openvpn_csc.php:345 +#: usr/local/www/system_gateways_edit.php:622 +#: usr/local/www/services_captiveportal_ip_edit.php:209 +#: usr/local/www/vpn_openvpn_server.php:827 +#: usr/local/www/services_captiveportal_zones_edit.php:111 +#: usr/local/www/vpn_ipsec_phase2.php:630 +#: usr/local/www/vpn_openvpn_client.php:600 +#: usr/local/www/vpn_ipsec_phase1.php:592 +#: usr/local/www/system_gateways_edit.php:626 +#: usr/local/www/services_captiveportal_ip_edit.php:203 +#: usr/local/www/services_captiveportal_zones_edit.php:109 +#: usr/local/www/vpn_openvpn_client.php:619 +#: usr/local/www/vpn_openvpn_csc.php:345 +#: usr/local/www/interfaces_lagg_edit.php:225 +#: usr/local/www/services_captiveportal_hostname_edit.php:186 +#: usr/local/www/firewall_aliases_import.php:142 +#: usr/local/www/services_captiveportal_mac_edit.php:196 +#: usr/local/www/vpn_ipsec_phase1.php:613 +#: usr/local/www/vpn_openvpn_server.php:854 +#: usr/local/www/vpn_ipsec_phase2.php:651 +msgid "You may enter a description here for your reference (not parsed)" +msgstr "" +"Bu alana kendiniz için herhangi bir açıklama girebilirsiniz, (sistem dikkate " +"almayacaktır)" + +#: usr/local/www/firewall_aliases_import.php:146 +#: usr/local/www/firewall_aliases_import.php:146 +msgid "Aliases to import" +msgstr "İçeri aktarılacak gruplar" + +#: usr/local/www/firewall_aliases_import.php:148 +#: usr/local/www/firewall_aliases_import.php:148 +msgid "" +"Paste in the aliases to import separated by a carriage return. Common " +"examples are lists of IPs, networks, blacklists, etc." +msgstr "" +"Grupları her satıra ayrı bir tane gelecek şekilde bu alana yapıştırın. Genel " +"örnekler IPler, ağlar, karalisteler ve benzerleridir." + +#: usr/local/www/firewall_aliases_import.php:149 +#: usr/local/www/firewall_aliases_import.php:149 +msgid "The list may contain only IP addresses." +msgstr "Liste sadece IP adresleri içermelidir." + +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_shaper.php:54 usr/local/www/diag_backup.php:121 +#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:131 +#: usr/local/www/diag_backup.php:199 usr/local/www/fbegin.inc:140 +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper.php:54 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/diag_backup.php:199 usr/local/www/fbegin.inc:132 +msgid "Traffic Shaper" +msgstr "Trafik Şekillendirme" + +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_layer7.php:410 +#: usr/local/www/firewall_shaper_vinterface.php:375 +#: usr/local/www/firewall_shaper_wizards.php:105 +#: usr/local/www/firewall_rules_edit.php:1443 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_queues.php:196 +#: usr/local/www/firewall_rules_edit.php:1514 +#: usr/local/www/firewall_shaper_vinterface.php:385 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_vinterface.php:392 +#: usr/local/www/firewall_shaper_layer7.php:59 +#: usr/local/www/firewall_shaper_layer7.php:410 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_vinterface.php:392 +#: usr/local/www/firewall_rules_edit.php:1529 +#: usr/local/www/firewall_shaper_queues.php:196 +#: usr/local/www/firewall_shaper_wizards.php:105 +#, fuzzy +msgid "Layer7" +msgstr "Layer7" + +#: usr/local/www/firewall_shaper_layer7.php:66 +#: usr/local/www/firewall_shaper_layer7.php:66 +msgid "You can add new layer7 protocol patterns by simply uploading the file" +msgstr "Dosyayı yükleyerek yeni layer7 protokol örüntüleri ekleyebilirsiniz" + +#: usr/local/www/firewall_shaper_layer7.php:66 +#: usr/local/www/firewall_virtual_ip.php:243 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2559 usr/local/www/carp_status.php:196 +#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/carp_status.php:189 usr/local/www/status_queues.php:183 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/firewall_virtual_ip.php:249 +#: usr/local/www/firewall_shaper_layer7.php:66 +#: usr/local/www/firewall_virtual_ip.php:269 +#: usr/local/www/status_queues.php:165 usr/local/www/interfaces.php:2774 +#: usr/local/www/interfaces.php:2783 usr/local/www/carp_status.php:189 +msgid "here" +msgstr "burada" + +#: usr/local/www/firewall_shaper_layer7.php:111 +#: usr/local/www/firewall_shaper_layer7.php:111 +msgid "Layer7 Rules Container not found!" +msgstr "Layer7 Kural Barındırıcısı bulunamadı!" + +#: usr/local/www/firewall_shaper_layer7.php:161 +#: usr/local/www/firewall_shaper_layer7.php:161 +msgid "Found the following repeated protocol definitions" +msgstr "Şu tekrarlanan protokol tanımları tespit edildi" + +#: usr/local/www/firewall_shaper_layer7.php:401 +#: usr/local/www/firewall_shaper_queues.php:187 +#: usr/local/www/firewall_shaper_layer7.php:401 +#: usr/local/www/firewall_shaper_queues.php:187 +msgid "The traffic shaper configuration has been changed" +msgstr "Trafik şekillendirme yapılandırması değiştirildi" + +#: usr/local/www/firewall_shaper_layer7.php:407 +#: usr/local/www/firewall_shaper_vinterface.php:372 +#: usr/local/www/firewall_shaper_wizards.php:102 +#: usr/local/www/firewall_shaper.php:409 +#: usr/local/www/firewall_shaper_queues.php:193 +#: usr/local/www/firewall_shaper_vinterface.php:382 +#: usr/local/www/firewall_shaper.php:410 +#: usr/local/www/firewall_shaper_vinterface.php:389 +#: usr/local/www/firewall_shaper_layer7.php:407 +#: usr/local/www/firewall_shaper.php:410 +#: usr/local/www/firewall_shaper_vinterface.php:389 +#: usr/local/www/firewall_shaper_queues.php:193 +#: usr/local/www/firewall_shaper_wizards.php:102 +msgid "By Interface" +msgstr "Arabirime Göre" + +#: usr/local/www/firewall_shaper_layer7.php:408 +#: usr/local/www/firewall_shaper_vinterface.php:373 +#: usr/local/www/firewall_shaper_wizards.php:103 +#: usr/local/www/firewall_shaper.php:410 +#: usr/local/www/firewall_shaper_queues.php:194 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:390 +#: usr/local/www/firewall_shaper_layer7.php:408 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:390 +#: usr/local/www/firewall_shaper_queues.php:194 +#: usr/local/www/firewall_shaper_wizards.php:103 +msgid "By Queue" +msgstr "Kuyruğa Göre" + +#: usr/local/www/firewall_shaper_layer7.php:409 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_vinterface.php:374 +#: usr/local/www/firewall_shaper_wizards.php:104 +#: usr/local/www/firewall_shaper.php:411 +#: usr/local/www/firewall_shaper_queues.php:195 +#: usr/local/www/firewall_shaper_vinterface.php:384 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:391 +#: usr/local/www/firewall_shaper_layer7.php:409 +#: usr/local/www/firewall_shaper.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:54 +#: usr/local/www/firewall_shaper_vinterface.php:391 +#: usr/local/www/firewall_shaper_queues.php:195 +#: usr/local/www/firewall_shaper_wizards.php:104 +msgid "Limiter" +msgstr "Limitleyici" + +#: usr/local/www/firewall_shaper_layer7.php:411 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_shaper_wizards.php:106 +#: usr/local/www/firewall_shaper.php:413 +#: usr/local/www/firewall_shaper_queues.php:197 +#: usr/local/www/vpn_openvpn_client.php:368 +#: usr/local/www/vpn_openvpn_csc.php:296 +#: usr/local/www/vpn_openvpn_server.php:586 +#: usr/local/www/firewall_shaper_vinterface.php:386 +#: usr/local/www/vpn_openvpn_server.php:659 +#: usr/local/www/vpn_openvpn_client.php:373 +#: usr/local/www/firewall_shaper.php:414 usr/local/www/vpn_openvpn_csc.php:295 +#: usr/local/www/firewall_shaper_vinterface.php:393 +#: usr/local/www/vpn_openvpn_server.php:677 +#: usr/local/www/vpn_openvpn_client.php:381 +#: usr/local/www/firewall_shaper_layer7.php:411 +#: usr/local/www/firewall_shaper.php:414 +#: usr/local/www/firewall_shaper_vinterface.php:393 +#: usr/local/www/vpn_openvpn_client.php:399 +#: usr/local/www/vpn_openvpn_csc.php:295 +#: usr/local/www/firewall_shaper_queues.php:197 +#: usr/local/www/firewall_shaper_wizards.php:73 +#: usr/local/www/firewall_shaper_wizards.php:106 +#: usr/local/www/vpn_openvpn_server.php:703 +msgid "Wizards" +msgstr "Sihirbazlar" + +#: usr/local/www/firewall_shaper_layer7.php:432 +#: usr/local/www/firewall_shaper_layer7.php:432 +msgid "Create new l7 rules group" +msgstr "Yeni Layer7 kural grubu oluştur" + +#: usr/local/www/firewall_shaper_layer7.php:445 +#: usr/local/www/firewall_shaper_layer7.php:445 +msgid "Rule(s)" +msgstr "Kural(lar)" + +#: usr/local/www/firewall_shaper_layer7.php:457 +#: usr/local/www/firewall_shaper_layer7.php:457 +msgid "Add one or more rules" +msgstr "Bir yada daha fazla kural ekle" + +#: usr/local/www/firewall_shaper_layer7.php:473 +#: usr/local/www/firewall_shaper_layer7.php:473 +msgid "Structure" +msgstr "Yapı" + +#: usr/local/www/firewall_shaper_layer7.php:480 +#: usr/local/www/firewall_shaper_layer7.php:480 +msgid "Behaviour" +msgstr "Davranış" + +#: usr/local/www/firewall_shaper_layer7.php:558 +#: usr/local/www/interfaces_groups_edit.php:315 +#: usr/local/www/firewall_aliases_edit.php:680 +#: usr/local/www/interfaces_qinq_edit.php:387 +#: usr/local/www/services_dhcp.php:855 +#: usr/local/www/services_igmpproxy_edit.php:273 +#: usr/local/www/vpn_pppoe_edit.php:573 usr/local/www/services_dhcpv6.php:768 +#: usr/local/www/services_unbound_acls.php:279 +#: usr/local/www/services_dnsmasq_edit.php:271 +#: usr/local/www/system_certmanager.php:793 +#: usr/local/www/services_igmpproxy_edit.php:275 +#: usr/local/www/firewall_aliases_edit.php:685 +#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:863 +#: usr/local/www/vpn_pppoe_edit.php:574 +#: usr/local/www/services_dnsmasq_edit.php:272 +#: usr/local/www/services_router_advertisements.php:358 +#: usr/local/www/interfaces_qinq_edit.php:388 +#: usr/local/www/firewall_aliases_edit.php:688 +#: usr/local/www/services_dhcp.php:1090 +#: usr/local/www/interfaces_groups_edit.php:316 +#: usr/local/www/services_dhcpv6.php:794 +#: usr/local/www/firewall_shaper_layer7.php:558 +#: usr/local/www/services_router_advertisements.php:358 +#: usr/local/www/vpn_pppoe_edit.php:577 usr/local/www/services_dhcp.php:1103 +#: usr/local/www/system_certmanager.php:818 +#: usr/local/www/services_dhcpv6.php:811 +#: usr/local/www/interfaces_groups_edit.php:316 +#: usr/local/www/firewall_aliases_edit.php:688 +#: usr/local/www/services_igmpproxy_edit.php:275 +#: usr/local/www/services_dnsmasq_edit.php:272 +#: usr/local/www/interfaces_qinq_edit.php:391 +msgid "add another entry" +msgstr "başka giriş ekle" + +# Sayfada kullanımda olan limitter i silmek istediğinde verilen uyarı. +#: usr/local/www/firewall_shaper_vinterface.php:102 +#: usr/local/www/firewall_shaper_vinterface.php:102 +msgid "" +"This pipe/queue is referenced in filter rules, please remove references from " +"there before deleting." +msgstr "" +"Bu kuyruk / boru filitre kurallarında kullanımda, lütfen silmeden önce " +"kullanımda olan kuralı kaldırınız." + +#: usr/local/www/firewall_shaper_vinterface.php:114 +#: usr/local/www/firewall_shaper_vinterface.php:114 +#, php-format +msgid "No queue with name %s was found!" +msgstr "%s adında kuyruk bulunamadı!" + +#: usr/local/www/firewall_shaper_vinterface.php:160 +#: usr/local/www/firewall_shaper.php:159 usr/local/www/firewall_shaper.php:160 +#: usr/local/www/firewall_shaper.php:160 +#: usr/local/www/firewall_shaper_vinterface.php:160 +msgid "Could not create new queue/discipline!" +msgstr "Yeni kuyruk/disiplin oluşturulamadı!" + +#: usr/local/www/firewall_shaper_vinterface.php:172 +#: usr/local/www/firewall_shaper_vinterface.php:181 +#: usr/local/www/firewall_shaper_vinterface.php:190 +#: usr/local/www/firewall_shaper.php:175 usr/local/www/firewall_shaper.php:184 +#: usr/local/www/firewall_shaper.php:193 +#: usr/local/www/firewall_shaper_vinterface.php:182 +#: usr/local/www/firewall_shaper_vinterface.php:192 +#: usr/local/www/firewall_shaper.php:176 usr/local/www/firewall_shaper.php:185 +#: usr/local/www/firewall_shaper.php:194 +#: usr/local/www/firewall_shaper_vinterface.php:173 +#: usr/local/www/firewall_shaper_vinterface.php:183 +#: usr/local/www/firewall_shaper_vinterface.php:193 +#: usr/local/www/firewall_shaper.php:176 usr/local/www/firewall_shaper.php:185 +#: usr/local/www/firewall_shaper.php:194 +#: usr/local/www/firewall_shaper_vinterface.php:173 +#: usr/local/www/firewall_shaper_vinterface.php:183 +#: usr/local/www/firewall_shaper_vinterface.php:193 +msgid "Queue not found!" +msgstr "Kuyruk bulunamadı!" + +#: usr/local/www/firewall_shaper_vinterface.php:235 +#: usr/local/www/firewall_shaper.php:270 +#: usr/local/www/firewall_shaper_vinterface.php:245 +#: usr/local/www/firewall_shaper.php:271 +#: usr/local/www/firewall_shaper_vinterface.php:247 +#: usr/local/www/firewall_shaper.php:271 +#: usr/local/www/firewall_shaper_vinterface.php:247 +msgid "Could not add new queue." +msgstr "Yeni kuyruk eklenemedi." + +#: usr/local/www/firewall_shaper_vinterface.php:304 +#: usr/local/www/firewall_shaper.php:346 +#: usr/local/www/firewall_shaper_vinterface.php:314 +#: usr/local/www/firewall_shaper.php:347 +#: usr/local/www/firewall_shaper_vinterface.php:316 +#: usr/local/www/firewall_shaper.php:347 +#: usr/local/www/firewall_shaper_vinterface.php:316 +msgid "Queue Actions" +msgstr "Kuyruk Eylemleri" + +#: usr/local/www/firewall_shaper_vinterface.php:315 +#: usr/local/www/firewall_shaper.php:357 +#: usr/local/www/firewall_shaper_vinterface.php:325 +#: usr/local/www/firewall_shaper.php:358 +#: usr/local/www/firewall_shaper_vinterface.php:327 +#: usr/local/www/firewall_shaper.php:358 +#: usr/local/www/firewall_shaper_vinterface.php:327 +msgid "Add new queue" +msgstr "Yeni kuyruk ekle" + +#: usr/local/www/firewall_shaper_vinterface.php:326 +#: usr/local/www/firewall_shaper.php:367 +#: usr/local/www/firewall_shaper_vinterface.php:336 +#: usr/local/www/firewall_shaper.php:368 +#: usr/local/www/firewall_shaper_vinterface.php:338 +#: usr/local/www/firewall_shaper.php:368 +#: usr/local/www/firewall_shaper_vinterface.php:338 +msgid "Delete this queue" +msgstr "Bu kuyruğu sil" + +#: usr/local/www/firewall_shaper_vinterface.php:328 +#: usr/local/www/firewall_shaper_vinterface.php:338 +#: usr/local/www/firewall_shaper_vinterface.php:340 +#: usr/local/www/firewall_shaper_vinterface.php:340 +msgid "Delete virtual interface" +msgstr "Sanal arabirimi sil" + +#: usr/local/www/firewall_shaper_vinterface.php:366 +#: usr/local/www/firewall_shaper_wizards.php:96 +#: usr/local/www/firewall_shaper.php:403 +#: usr/local/www/firewall_shaper_vinterface.php:376 +#: usr/local/www/firewall_shaper.php:404 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/firewall_shaper.php:404 +#: usr/local/www/firewall_shaper_vinterface.php:383 +#: usr/local/www/firewall_shaper_wizards.php:96 +msgid "The traffic shaper configuration has been changed." +msgstr "Trafik şekillendirici yapılandırması değiştirildi." + +#: usr/local/www/firewall_shaper_vinterface.php:395 +#: usr/local/www/firewall_shaper_vinterface.php:405 +#: usr/local/www/firewall_shaper_vinterface.php:412 +#: usr/local/www/firewall_shaper_vinterface.php:412 +msgid "Create new limiter" +msgstr "Yeni limitleyici ekle" + +#: usr/local/www/firewall_shaper_wizards.php:76 +#: usr/local/www/firewall_shaper_wizards.php:76 +msgid "Single Lan multi Wan" +msgstr "Tek LAN çoklu WAN" + +#: usr/local/www/firewall_shaper_wizards.php:77 +#: usr/local/www/firewall_shaper_wizards.php:77 +msgid "Single Wan multi Lan" +msgstr "Tek WAN çoklu LAN" + +#: usr/local/www/firewall_shaper_wizards.php:78 +#: usr/local/www/firewall_shaper_wizards.php:78 +msgid "Multiple Lan/Wan" +msgstr "Çoklu LAN/WAN" + +#: usr/local/www/firewall_shaper_wizards.php:79 +#: usr/local/www/firewall_shaper_wizards.php:79 +msgid "Dedicated Links" +msgstr "Adanmış Bağlantılar" + +#: usr/local/www/firewall_shaper_wizards.php:115 +#: usr/local/www/firewall_shaper_wizards.php:115 +msgid "Wizard function" +msgstr "Sihirbaz fonksiyonu" + +#: usr/local/www/firewall_shaper_wizards.php:116 +#: usr/local/www/firewall_shaper_wizards.php:116 +msgid "Wizard Link" +msgstr "Sihirbaz Bağlantısı" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:107 +#: usr/local/www/system.php:113 usr/local/www/system.php:265 +#: usr/local/www/services_dnsmasq.php:244 +#: usr/local/www/services_dnsmasq.php:311 +#: usr/local/www/services_dnsmasq_edit.php:80 +#: usr/local/www/services_dnsmasq_edit.php:149 +#: usr/local/www/services_dnsmasq.php:332 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:204 +#: usr/local/www/services_dnsmasq_edit.php:238 +#: usr/local/www/services_unbound.php:280 +#: usr/local/www/services_unbound.php:347 usr/local/www/system.php:114 +#: usr/local/www/system.php:276 usr/local/www/services_dnsmasq.php:245 +#: usr/local/www/services_dnsmasq.php:333 +#: usr/local/www/services_dnsmasq_edit.php:205 +#: usr/local/www/services_dnsmasq_edit.php:239 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +#: usr/local/www/system.php:107 usr/local/www/system.php:269 +#: usr/local/www/system.php:107 usr/local/www/system.php:269 +#: usr/local/www/services_dnsmasq_edit.php:81 +#: usr/local/www/services_dnsmasq_edit.php:205 +#: usr/local/www/services_dnsmasq_edit.php:239 +#: usr/local/www/services_dnsmasq.php:270 +#: usr/local/www/services_dnsmasq.php:358 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130 +msgid "Domain" +msgstr "Alan adı" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:70 +#: usr/local/www/services_dnsmasq_edit.php:88 +#: usr/local/www/services_dnsmasq_edit.php:89 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87 +#: usr/local/www/services_dnsmasq_edit.php:89 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87 +msgid "A valid domain must be specified." +msgstr "Geçerli bir alan adı belirtilmelidir." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:73 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90 +msgid "A valid IP address must be specified, or # for an exclusion." +msgstr "Ya geçerli bir IP adresi ya da dışta bırakma için # girilmelidir." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dnsmasq.php:119 +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/services_dhcpv6.php:791 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dnsmasq.php:123 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +msgid "DNS forwarder" +msgstr "DNS yönlendirici" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +msgid "Edit Domain Override" +msgstr "Alan Adı Üzerine yaz'ı Değiştir" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:110 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:133 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:133 +msgid "Domain to override (NOTE: this does not have to be a valid TLD!)" +msgstr "Üzerine yazılacak alan adı (Not: Geçerli bir TLD olması gerekmez.)" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/firewall_nat_edit.php:745 usr/local/www/system.php:260 +#: usr/local/www/system.php:271 usr/local/www/services_dnsmasq_edit.php:146 +#: usr/local/www/services_dnsmasq_edit.php:153 +#: usr/local/www/services_dnsmasq_edit.php:160 +#: usr/local/www/services_dnsmasq_edit.php:201 +#: usr/local/www/services_dnsmasq_edit.php:208 +#: usr/local/www/services_dnsmasq_edit.php:215 +#: usr/local/www/firewall_nat_edit.php:752 usr/local/www/system.php:282 +#: usr/local/www/services_dnsmasq_edit.php:202 +#: usr/local/www/services_dnsmasq_edit.php:209 +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +#: usr/local/www/firewall_nat_edit.php:751 usr/local/www/system.php:264 +#: usr/local/www/system.php:275 usr/local/www/system.php:264 +#: usr/local/www/system.php:275 usr/local/www/firewall_nat_edit.php:746 +#: usr/local/www/services_dnsmasq_edit.php:202 +#: usr/local/www/services_dnsmasq_edit.php:209 +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +msgid "e.g." +msgstr "örn." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134 +#, fuzzy +msgid "test" +msgstr "test" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:117 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:140 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:140 +msgid "IP address of the authoritative DNS server for this domain" +msgstr "Bu alan adı için otorite olacak DNS sunucunun IP adresi" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141 +msgid "" +"Or enter # for an exclusion to pass through this host/subdomain to standard " +"nameservers instead of a previous override." +msgstr "" +"Ya da daha önce tanımlanmış bir üzerine yazma işlemini iptal etmek için # " +"girin." + +#: usr/local/www/firewall_virtual_ip_edit.php:106 +#: usr/local/www/firewall_virtual_ip_edit.php:415 +#: usr/local/www/load_balancer_relay_action.php:141 +#: usr/local/www/firewall_aliases_edit.php:601 +#: usr/local/www/firewall_virtual_ip.php:186 +#: usr/local/www/load_balancer_monitor.php:123 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:247 +#: usr/local/www/services_captiveportal.php:777 +#: usr/local/www/services_dhcp.php:813 +#: usr/local/www/load_balancer_relay_action_edit.php:463 +#: usr/local/www/load_balancer_relay_protocol.php:135 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:201 +#: usr/local/www/services_igmpproxy.php:96 +#: usr/local/www/services_igmpproxy_edit.php:185 +#: usr/local/www/system_authservers.php:161 +#: usr/local/www/system_authservers.php:184 +#: usr/local/www/system_authservers.php:449 +#: usr/local/www/system_authservers.php:738 +#: usr/local/www/vpn_ipsec_phase2.php:423 +#: usr/local/www/vpn_ipsec_phase2.php:465 +#: usr/local/www/system_certmanager.php:762 +#: usr/local/www/load_balancer_relay_action_edit.php:462 +#: usr/local/www/services_igmpproxy_edit.php:187 +#: usr/local/www/firewall_aliases_edit.php:606 +#: usr/local/www/status_ntpd.php:111 +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/load_balancer_monitor.php:124 +#: usr/local/www/services_dhcp.php:851 usr/local/www/vpn_ipsec_phase2.php:449 +#: usr/local/www/vpn_ipsec_phase2.php:491 +#: usr/local/www/firewall_virtual_ip_edit.php:403 +#: usr/local/www/load_balancer_relay_protocol_edit.php:199 +#: usr/local/www/load_balancer_relay_action_edit.php:460 +#: usr/local/www/load_balancer_monitor_edit.php:245 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/status_ntpd.php:127 +#: usr/local/www/services_captiveportal.php:817 +#: usr/local/www/load_balancer_monitor.php:122 +#: usr/local/www/load_balancer_relay_protocol.php:133 +#: usr/local/www/services_dhcp.php:1048 +#: usr/local/www/load_balancer_relay_action.php:139 +#: usr/local/www/vpn_ipsec_phase2.php:515 +#: usr/local/www/vpn_ipsec_phase2.php:551 +#: usr/local/www/vpn_ipsec_phase2.php:593 +#: usr/local/www/firewall_virtual_ip_edit.php:355 +#: usr/local/www/firewall_virtual_ip.php:190 +#: usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 +#: usr/local/www/system_authservers.php:454 +#: usr/local/www/system_authservers.php:744 +#: usr/local/www/load_balancer_relay_protocol_edit.php:79 +#: usr/local/www/load_balancer_relay_protocol_edit.php:199 +#: usr/local/www/firewall_virtual_ip.php:204 +#: usr/local/www/firewall_virtual_ip_edit.php:106 +#: usr/local/www/firewall_virtual_ip_edit.php:347 +#: usr/local/www/load_balancer_relay_protocol.php:133 +#: usr/local/www/load_balancer_relay_action.php:139 +#: usr/local/www/services_dhcp.php:1061 +#: usr/local/www/system_certmanager.php:787 +#: usr/local/www/load_balancer_relay_action_edit.php:460 +#: usr/local/www/status_ntpd.php:127 +#: usr/local/www/load_balancer_monitor_edit.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:245 +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/system_authservers.php:461 +#: usr/local/www/system_authservers.php:760 +#: usr/local/www/services_captiveportal.php:805 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/services_igmpproxy_edit.php:187 +#: usr/local/www/services_igmpproxy.php:96 +#: usr/local/www/load_balancer_monitor.php:122 +#: usr/local/www/vpn_ipsec_phase2.php:537 +#: usr/local/www/vpn_ipsec_phase2.php:572 +#: usr/local/www/vpn_ipsec_phase2.php:614 +msgid "Type" +msgstr "Tür" + +#: usr/local/www/firewall_virtual_ip_edit.php:111 +#: usr/local/www/diag_logs_settings.php:88 +#: usr/local/www/services_dhcp_edit.php:126 +#: usr/local/www/services_dnsmasq_edit.php:91 +#: usr/local/www/services_dnsmasq_edit.php:92 +#: usr/local/www/services_dhcp_edit.php:128 +#: usr/local/www/firewall_virtual_ip_edit.php:114 +#: usr/local/www/services_dhcp_edit.php:162 +#: usr/local/www/firewall_virtual_ip_edit.php:115 +#: usr/local/www/services_dnsmasq_edit.php:92 +msgid "A valid IP address must be specified." +msgstr "Geçerli bir IP adresi belirtilmelidir." + +#: usr/local/www/firewall_virtual_ip_edit.php:116 +#: usr/local/www/firewall_virtual_ip_edit.php:119 +#: usr/local/www/firewall_virtual_ip_edit.php:123 +msgid "" +"The interface chosen for the VIP has no IPv4 or IPv6 address configured so " +"it cannot be used as a parent for the VIP." +msgstr "" + +#: usr/local/www/firewall_virtual_ip_edit.php:118 +#: usr/local/www/firewall_virtual_ip_edit.php:121 +#, php-format +msgid "The %s IP address may not be used in a virtual entry." +msgstr "%s IP adresi sanal girdi olarak kullanılamaz." + +#: usr/local/www/firewall_virtual_ip_edit.php:123 +#: usr/local/www/firewall_virtual_ip_edit.php:126 +msgid "The /32 subnet mask is invalid for CARP IPs." +msgstr "/32 altağ maskesi CARP IPleri için geçerli değildir." + +#: usr/local/www/firewall_virtual_ip_edit.php:127 +#: usr/local/www/firewall_virtual_ip_edit.php:130 +msgid "The /128 subnet mask is invalid for CARP IPs." +msgstr "/128 altağ maskesi CARP IPlerii için geçerli değildir." + +#: usr/local/www/firewall_virtual_ip_edit.php:135 +#: usr/local/www/firewall_virtual_ip_edit.php:138 +msgid "There is already a virtual IP entry for the specified IP address." +msgstr "Belirtilen IP adresi için zaten sanal IP tanımlaması var." + +#: usr/local/www/firewall_virtual_ip_edit.php:150 +#, php-format +msgid "VHID %s is already in use. Pick a unique number." +msgstr "VHID %s zaten kullanılıyor. Benzersiz bir numara seçiniz." + +#: usr/local/www/firewall_virtual_ip_edit.php:154 +#: usr/local/www/firewall_virtual_ip_edit.php:157 +#: usr/local/www/firewall_virtual_ip_edit.php:156 +#: usr/local/www/firewall_virtual_ip_edit.php:148 +msgid "" +"You must specify a CARP password that is shared between the two VHID members." +msgstr "" +"İki VHID üyesi arasında paylaşılacak bir CARP parolası belirlemelisiniz." + +#: usr/local/www/firewall_virtual_ip_edit.php:161 +#: usr/local/www/firewall_virtual_ip_edit.php:170 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +#: usr/local/www/firewall_virtual_ip_edit.php:164 +#: usr/local/www/firewall_virtual_ip_edit.php:173 +#: usr/local/www/firewall_virtual_ip_edit.php:185 +#: usr/local/www/firewall_virtual_ip_edit.php:163 +#: usr/local/www/firewall_virtual_ip_edit.php:172 +#: usr/local/www/firewall_virtual_ip_edit.php:184 +#: usr/local/www/firewall_virtual_ip_edit.php:155 +#: usr/local/www/firewall_virtual_ip_edit.php:164 +#: usr/local/www/firewall_virtual_ip_edit.php:176 +#, php-format +msgid "" +"Sorry, we could not locate an interface with a matching subnet for %s. " +"Please add an IP alias in this subnet on this interface." +msgstr "" +"%s altağına uyan arabirim yok. Lütfen bu arabirime bu altağda bir IP rumuzu " +"ekleyiniz." + +#: usr/local/www/firewall_virtual_ip_edit.php:174 +#: usr/local/www/firewall_virtual_ip_edit.php:177 +#: usr/local/www/firewall_virtual_ip_edit.php:176 +#: usr/local/www/firewall_virtual_ip_edit.php:168 +msgid "For this type of vip a carp parent is not allowed." +msgstr "Bu tür sanal IP için CARP ebeveyne izin verilmez." + +#: usr/local/www/firewall_virtual_ip_edit.php:188 +#: usr/local/www/firewall_virtual_ip_edit.php:191 +#: usr/local/www/firewall_virtual_ip_edit.php:190 +#: usr/local/www/firewall_virtual_ip_edit.php:182 +msgid "For this type of VIP, a CARP parent is not allowed." +msgstr "Bu tür sanal IP, için CARP ebeveyne izin verilmez." + +#: usr/local/www/firewall_virtual_ip_edit.php:202 +msgid "This entry cannot be modified because it is still referenced by CARP" +msgstr "Bu girdi CARP tarafından kullanıldığından düzenlenemez." + +#: usr/local/www/firewall_virtual_ip_edit.php:281 +#: usr/local/www/firewall_virtual_ip_edit.php:268 +#: usr/local/www/firewall_virtual_ip_edit.php:261 +#: usr/local/www/firewall_virtual_ip_edit.php:253 +msgid "Virtual IP Address" +msgstr "Sanal IP Adresi" + +#: usr/local/www/firewall_virtual_ip_edit.php:300 +#: usr/local/www/firewall_virtual_ip_edit.php:302 +#: usr/local/www/firewall_virtual_ip_edit.php:288 +#: usr/local/www/firewall_virtual_ip_edit.php:290 +#: usr/local/www/firewall_virtual_ip_edit.php:287 +#: usr/local/www/firewall_virtual_ip_edit.php:289 +#: usr/local/www/firewall_virtual_ip_edit.php:279 +#: usr/local/www/firewall_virtual_ip_edit.php:281 +msgid "" +"This must be the network's subnet mask. It does not specify a CIDR range." +msgstr "Ağın altağ maskesi olmalıdır. CIDR aralığı belirtmez." + +#: usr/local/www/firewall_virtual_ip_edit.php:301 +#: usr/local/www/firewall_virtual_ip_edit.php:289 +#: usr/local/www/firewall_virtual_ip_edit.php:288 +#: usr/local/www/firewall_virtual_ip_edit.php:280 +msgid "This is a CIDR block of proxy ARP addresses." +msgstr "Vekil ARP adreslerinin CIDR bloğudur." + +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:400 +#: usr/local/www/firewall_virtual_ip_edit.php:352 +#: usr/local/www/firewall_virtual_ip_edit.php:344 +msgid "Edit Virtual IP" +msgstr "Sanal IP yi düzenle" + +#: usr/local/www/firewall_virtual_ip_edit.php:418 +#: usr/local/www/firewall_virtual_ip_edit.php:406 +#: usr/local/www/firewall_virtual_ip_edit.php:362 +#: usr/local/www/firewall_virtual_ip_edit.php:354 +msgid "Proxy ARP" +msgstr "Vekil ARP" + +#: usr/local/www/firewall_virtual_ip_edit.php:420 +#: usr/local/www/carp_status.php:100 +#: usr/local/www/firewall_virtual_ip_edit.php:408 +#: usr/local/www/carp_status.php:92 +#: usr/local/www/firewall_virtual_ip_edit.php:360 +#: usr/local/www/firewall_virtual_ip_edit.php:352 +#: usr/local/www/carp_status.php:92 +msgid "CARP" +msgstr "CARP" + +#: usr/local/www/firewall_virtual_ip_edit.php:422 +#: usr/local/www/firewall_virtual_ip_edit.php:410 +#: usr/local/www/firewall_virtual_ip_edit.php:364 +#: usr/local/www/firewall_virtual_ip_edit.php:356 +msgid "Other" +msgstr "Diğer" + +#: usr/local/www/firewall_virtual_ip_edit.php:424 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:358 +#: usr/local/www/firewall_virtual_ip_edit.php:350 +msgid "IP Alias" +msgstr "IP Grubu" + +#: usr/local/www/firewall_virtual_ip_edit.php:435 +#: usr/local/www/diag_packet_capture.php:119 +#: usr/local/www/services_wol.php:130 usr/local/www/services_wol.php:161 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:126 +#: usr/local/www/interfaces_bridge.php:107 +#: usr/local/www/interfaces_gif.php:106 usr/local/www/interfaces_gre.php:107 +#: usr/local/www/interfaces_groups_edit.php:274 +#: usr/local/www/firewall_nat_1to1.php:104 +#: usr/local/www/firewall_nat_1to1_edit.php:114 +#: usr/local/www/firewall_nat_1to1_edit.php:280 +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:185 +#: usr/local/www/firewall_nat_edit.php:476 +#: usr/local/www/firewall_nat_out.php:341 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:417 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/interfaces_assign.php:420 +#: usr/local/www/interfaces_vlan.php:108 usr/local/www/system_routes.php:128 +#: usr/local/www/interfaces_lagg.php:112 usr/local/www/interfaces_ppps.php:108 +#: usr/local/www/interfaces_qinq.php:116 +#: usr/local/www/interfaces_wireless.php:106 usr/local/www/vpn_pppoe.php:101 +#: usr/local/www/services_captiveportal.php:146 usr/local/www/diag_ping.php:95 +#: usr/local/www/services_dhcp_relay.php:72 usr/local/www/status_graph.php:179 +#: usr/local/www/diag_arp.php:316 +#: usr/local/www/services_igmpproxy_edit.php:161 +#: usr/local/www/system_gateways.php:153 +#: usr/local/www/system_gateways_edit.php:98 +#: usr/local/www/system_gateways_edit.php:347 +#: usr/local/www/vpn_ipsec_phase1.php:538 usr/local/www/vpn_l2tp.php:304 +#: usr/local/www/vpn_openvpn_client.php:451 +#: usr/local/www/vpn_openvpn_server.php:691 +#: usr/local/www/vpn_pppoe_edit.php:372 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:42 +#: usr/local/www/diag_ndp.php:132 usr/local/www/firewall_nat_npt.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:166 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/firewall_nat_out.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:287 +#: usr/local/www/firewall_nat_npt_edit.php:171 +#: usr/local/www/status_graph.php:177 +#: usr/local/www/firewall_nat_out_edit.php:430 +#: usr/local/www/firewall_rules_edit.php:760 +#: usr/local/www/services_igmpproxy_edit.php:163 +#: usr/local/www/services_captiveportal.php:147 +#: usr/local/www/system_gateways_edit.php:99 +#: usr/local/www/system_gateways_edit.php:353 +#: usr/local/www/services_dyndns.php:108 +#: usr/local/www/vpn_openvpn_server.php:764 +#: usr/local/www/diag_packet_capture.php:123 +#: usr/local/www/firewall_nat_edit.php:483 +#: usr/local/www/vpn_openvpn_client.php:456 +#: usr/local/www/firewall_virtual_ip_edit.php:423 +#: usr/local/www/vpn_pppoe_edit.php:373 usr/local/www/firewall_nat_out.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:285 +#: usr/local/www/firewall_nat_npt_edit.php:170 usr/local/www/vpn_pppoe.php:102 +#: usr/local/www/status_graph.php:183 usr/local/www/interfaces_qinq.php:117 +#: usr/local/www/interfaces_ppps.php:109 +#: usr/local/www/interfaces_bridge.php:108 +#: usr/local/www/interfaces_lagg.php:113 usr/local/www/interfaces_gre.php:108 +#: usr/local/www/interfaces_wireless.php:107 +#: usr/local/www/services_captiveportal.php:153 +#: usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:459 +#: usr/local/www/interfaces_assign.php:414 +#: usr/local/www/vpn_openvpn_server.php:782 +#: usr/local/www/interfaces_groups_edit.php:275 +#: usr/local/www/diag_packet_capture.php:181 +#: usr/local/www/interfaces_vlan.php:109 +#: usr/local/www/firewall_nat_edit.php:482 +#: usr/local/www/vpn_openvpn_client.php:464 usr/local/www/vpn_l2tp.php:305 +#: usr/local/www/firewall_virtual_ip_edit.php:368 +#: usr/local/www/interfaces_gif.php:107 +#: usr/local/www/firewall_virtual_ip.php:189 +#: usr/local/www/vpn_ipsec_phase1.php:537 usr/local/www/diag_ndp.php:132 +#: usr/local/www/vpn_l2tp.php:308 usr/local/www/system_gateways_edit.php:100 +#: usr/local/www/system_gateways_edit.php:459 usr/local/www/vpn_pppoe.php:103 +#: usr/local/www/diag_arp.php:316 usr/local/www/vpn_openvpn_client.php:482 +#: usr/local/www/services_wol.php:130 usr/local/www/services_wol.php:161 +#: usr/local/www/diag_testport.php:143 +#: usr/local/www/firewall_rules_edit.php:763 +#: usr/local/www/interfaces_qinq.php:120 +#: usr/local/www/firewall_virtual_ip.php:203 +#: usr/local/www/firewall_nat_edit.php:187 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:477 usr/local/www/status_graph.php:196 +#: usr/local/www/interfaces_lagg.php:117 usr/local/www/interfaces_vlan.php:115 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:126 +#: usr/local/www/firewall_virtual_ip_edit.php:360 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/diag_packet_capture.php:181 +#: usr/local/www/interfaces_bridge.php:114 +#: usr/local/www/interfaces_wireless.php:109 +#: usr/local/www/system_routes.php:132 usr/local/www/vpn_pppoe_edit.php:376 +#: usr/local/www/firewall_nat_out.php:352 +#: usr/local/www/interfaces_ppps.php:109 +#: usr/local/www/firewall_nat_npt.php:104 +#: usr/local/www/firewall_nat_1to1.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:104 +#: usr/local/www/firewall_nat_npt_edit.php:170 +#: usr/local/www/interfaces_groups_edit.php:275 +#: usr/local/www/services_captiveportal.php:155 usr/local/www/diag_ping.php:95 +#: usr/local/www/services_igmpproxy_edit.php:163 +#: usr/local/www/firewall_nat_1to1_edit.php:114 +#: usr/local/www/firewall_nat_1to1_edit.php:285 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:42 +#: usr/local/www/vpn_ipsec_phase1.php:558 usr/local/www/interfaces_gre.php:112 +#: usr/local/www/system_gateways.php:153 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:434 +#: usr/local/www/vpn_openvpn_server.php:808 +#: usr/local/www/services_dyndns.php:89 +#: usr/local/www/services_dhcp_relay.php:72 +#: usr/local/www/interfaces_gif.php:111 +#: usr/local/www/interfaces_assign.php:420 +msgid "Interface" +msgstr "Arabirim" + +#: usr/local/www/firewall_virtual_ip_edit.php:452 +#: usr/local/www/firewall_virtual_ip_edit.php:440 +#: usr/local/www/firewall_virtual_ip_edit.php:385 +#: usr/local/www/firewall_virtual_ip_edit.php:377 +msgid "IP Address(es)" +msgstr "IP Adres(ler)i" + +#: usr/local/www/firewall_virtual_ip_edit.php:456 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_out_edit.php:472 +#: usr/local/www/firewall_nat_out_edit.php:506 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules_edit.php:958 +#: usr/local/www/firewall_nat_1to1_edit.php:345 +#: usr/local/www/firewall_nat_1to1_edit.php:400 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/firewall_nat_out_edit.php:519 +#: usr/local/www/firewall_rules_edit.php:900 +#: usr/local/www/firewall_rules_edit.php:993 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_virtual_ip_edit.php:444 +#: usr/local/www/firewall_nat_1to1_edit.php:343 +#: usr/local/www/firewall_nat_1to1_edit.php:398 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_virtual_ip_edit.php:389 +#: usr/local/www/firewall_rules_edit.php:903 +#: usr/local/www/firewall_rules_edit.php:1002 +#: usr/local/www/firewall_nat_edit.php:546 +#: usr/local/www/firewall_nat_edit.php:635 +#: usr/local/www/firewall_virtual_ip_edit.php:381 +#: usr/local/www/firewall_nat_1to1_edit.php:343 +#: usr/local/www/firewall_nat_1to1_edit.php:398 +#: usr/local/www/firewall_nat_out_edit.php:489 +#: usr/local/www/firewall_nat_out_edit.php:523 +msgid "Type:" +msgstr "Tür:" + +#: usr/local/www/firewall_virtual_ip_edit.php:459 +#: usr/local/www/firewall_virtual_ip_edit.php:447 +#: usr/local/www/firewall_virtual_ip_edit.php:392 +#: usr/local/www/firewall_virtual_ip_edit.php:384 +msgid "Single address" +msgstr "Tek adres" + +#: usr/local/www/firewall_virtual_ip_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:452 +#: usr/local/www/firewall_aliases_edit.php:624 +#: usr/local/www/firewall_nat_1to1_edit.php:345 +#: usr/local/www/firewall_nat_1to1_edit.php:400 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_nat_out_edit.php:476 +#: usr/local/www/firewall_nat_out_edit.php:511 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/system_routes.php:126 usr/local/www/vpn_ipsec_mobile.php:408 +#: usr/local/www/services_igmpproxy_edit.php:223 +#: usr/local/www/vpn_ipsec_phase2.php:428 +#: usr/local/www/vpn_ipsec_phase2.php:470 +#: usr/local/www/services_unbound_acls.php:236 +#: usr/local/www/firewall_nat_1to1_edit.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:407 +#: usr/local/www/firewall_nat_out_edit.php:489 +#: usr/local/www/firewall_nat_out_edit.php:524 +#: usr/local/www/firewall_rules_edit.php:907 +#: usr/local/www/firewall_rules_edit.php:1000 +#: usr/local/www/services_igmpproxy_edit.php:225 +#: usr/local/www/firewall_aliases_edit.php:455 +#: usr/local/www/firewall_aliases_edit.php:629 +#: usr/local/www/vpn_ipsec_phase2.php:454 +#: usr/local/www/vpn_ipsec_phase2.php:496 +#: usr/local/www/firewall_nat_edit.php:559 +#: usr/local/www/firewall_nat_edit.php:648 +#: usr/local/www/firewall_virtual_ip_edit.php:449 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/vpn_ipsec_mobile.php:433 +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/firewall_aliases_edit.php:632 +#: usr/local/www/vpn_ipsec_phase2.php:520 +#: usr/local/www/vpn_ipsec_phase2.php:556 +#: usr/local/www/vpn_ipsec_phase2.php:598 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_virtual_ip_edit.php:394 +#: usr/local/www/firewall_rules_edit.php:916 +#: usr/local/www/firewall_rules_edit.php:1015 +#: usr/local/www/firewall_nat_edit.php:553 +#: usr/local/www/firewall_nat_edit.php:642 +#: usr/local/www/firewall_virtual_ip_edit.php:386 +#: usr/local/www/system_routes.php:130 +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/firewall_aliases_edit.php:632 +#: usr/local/www/services_igmpproxy_edit.php:225 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/vpn_ipsec_mobile.php:433 +#: usr/local/www/firewall_nat_out_edit.php:493 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/vpn_ipsec_phase2.php:542 +#: usr/local/www/vpn_ipsec_phase2.php:577 +#: usr/local/www/vpn_ipsec_phase2.php:619 +msgid "Network" +msgstr "Ağ" + +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_nat_1to1_edit.php:367 +#: usr/local/www/firewall_nat_1to1_edit.php:422 +#: usr/local/www/firewall_nat_edit.php:575 +#: usr/local/www/firewall_nat_edit.php:685 +#: usr/local/www/firewall_nat_out_edit.php:479 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:542 +#: usr/local/www/firewall_rules_edit.php:895 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/vpn_ipsec_phase2.php:440 +#: usr/local/www/firewall_nat_npt_edit.php:216 +#: usr/local/www/firewall_nat_npt_edit.php:244 +#: usr/local/www/firewall_nat_1to1_edit.php:374 +#: usr/local/www/firewall_nat_1to1_edit.php:429 +#: usr/local/www/firewall_nat_npt_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:249 +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:528 +#: usr/local/www/firewall_nat_out_edit.php:555 +#: usr/local/www/firewall_rules_edit.php:930 +#: usr/local/www/firewall_rules_edit.php:1023 +#: usr/local/www/vpn_ipsec_phase2.php:466 +#: usr/local/www/firewall_nat_edit.php:582 +#: usr/local/www/firewall_nat_edit.php:692 +#: usr/local/www/firewall_virtual_ip_edit.php:455 +#: usr/local/www/firewall_nat_1to1_edit.php:372 +#: usr/local/www/firewall_nat_1to1_edit.php:427 +#: usr/local/www/firewall_nat_npt_edit.php:220 +#: usr/local/www/firewall_nat_npt_edit.php:248 +#: usr/local/www/vpn_ipsec_phase2.php:532 +#: usr/local/www/vpn_ipsec_phase2.php:568 +#: usr/local/www/firewall_nat_edit.php:581 +#: usr/local/www/firewall_nat_edit.php:691 +#: usr/local/www/firewall_virtual_ip_edit.php:400 +#: usr/local/www/firewall_rules_edit.php:939 +#: usr/local/www/firewall_rules_edit.php:1038 +#: usr/local/www/firewall_nat_edit.php:576 +#: usr/local/www/firewall_nat_edit.php:686 +#: usr/local/www/firewall_virtual_ip_edit.php:392 +#: usr/local/www/firewall_nat_npt_edit.php:220 +#: usr/local/www/firewall_nat_npt_edit.php:248 +#: usr/local/www/firewall_nat_1to1_edit.php:372 +#: usr/local/www/firewall_nat_1to1_edit.php:427 +#: usr/local/www/firewall_nat_out_edit.php:496 +#: usr/local/www/firewall_nat_out_edit.php:532 +#: usr/local/www/firewall_nat_out_edit.php:559 +#: usr/local/www/vpn_ipsec_phase2.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:589 +msgid "Address:" +msgstr "Adres:" + +#: usr/local/www/firewall_virtual_ip_edit.php:479 +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_virtual_ip_edit.php:412 +#: usr/local/www/firewall_virtual_ip_edit.php:404 +msgid "Expansion:" +msgstr "Genişleme:" + +#: usr/local/www/firewall_virtual_ip_edit.php:499 +#: usr/local/www/firewall_virtual_ip_edit.php:487 +#: usr/local/www/firewall_virtual_ip_edit.php:432 +#: usr/local/www/firewall_virtual_ip_edit.php:424 +msgid "Virtual IP Password" +msgstr "Sanal IP Parolası" + +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/firewall_virtual_ip_edit.php:489 +#: usr/local/www/firewall_virtual_ip_edit.php:434 +#: usr/local/www/firewall_virtual_ip_edit.php:426 +msgid "Enter the VHID group password." +msgstr "VHID grubunun parolasını giriniz." + +#: usr/local/www/firewall_virtual_ip_edit.php:505 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:438 +#: usr/local/www/firewall_virtual_ip_edit.php:430 +msgid "VHID Group" +msgstr "VHID Grubu" + +#: usr/local/www/firewall_virtual_ip_edit.php:513 +#: usr/local/www/firewall_virtual_ip_edit.php:501 +#: usr/local/www/firewall_virtual_ip_edit.php:446 +#: usr/local/www/firewall_virtual_ip_edit.php:438 +msgid "Enter the VHID group that the machines will share" +msgstr "Sistemlerin paylaşacağı VHID grubunu giriniz" + +#: usr/local/www/firewall_virtual_ip_edit.php:517 +#: usr/local/www/firewall_virtual_ip_edit.php:505 +#: usr/local/www/firewall_virtual_ip_edit.php:450 +#: usr/local/www/firewall_virtual_ip_edit.php:442 +msgid "Advertising Frequency" +msgstr "Duyuru Sıklığı" + +#: usr/local/www/firewall_virtual_ip_edit.php:534 +#: usr/local/www/firewall_virtual_ip_edit.php:522 +#: usr/local/www/firewall_virtual_ip_edit.php:467 +#: usr/local/www/firewall_virtual_ip_edit.php:459 +msgid "" +"The frequency that this machine will advertise. 0 means usually master. " +"Otherwise the lowest combination of both values in the cluster determines " +"the master." +msgstr "" +"Bu makinanın duyuru yapma sıklığı. 0 genellikle ana eleman demektir. Diğer " +"durumlarda kümedeki iki değerin en düşük kombinasyonu ana elemanın hangisi " +"olduğunu belirler." + +#: usr/local/www/firewall_virtual_ip_edit.php:557 +#: usr/local/www/diag_logs_settings.php:326 +#: usr/local/www/diag_packet_capture.php:195 +#: usr/local/www/services_dyndns.php:160 usr/local/www/services_wol.php:210 +#: usr/local/www/interfaces_bridge.php:144 +#: usr/local/www/interfaces_bridge_edit.php:446 +#: usr/local/www/interfaces_bridge_edit.php:490 +#: usr/local/www/interfaces_bridge_edit.php:534 +#: usr/local/www/interfaces_gif.php:132 usr/local/www/interfaces_gre.php:133 +#: usr/local/www/interfaces_groups.php:148 +#: usr/local/www/firewall_aliases.php:229 +#: usr/local/www/firewall_nat_1to1.php:179 +#: usr/local/www/firewall_nat_out.php:459 +#: usr/local/www/firewall_schedule.php:240 usr/local/www/diag_backup.php:655 +#: usr/local/www/firewall_virtual_ip.php:241 usr/local/www/interfaces.php:1845 +#: usr/local/www/interfaces_vlan.php:134 usr/local/www/system_routes.php:188 +#: usr/local/www/interfaces_lagg.php:138 +#: usr/local/www/interfaces_ppps_edit.php:620 +#: usr/local/www/interfaces_qinq.php:151 +#: usr/local/www/load_balancer_virtual_server_edit.php:289 +#: usr/local/www/services_captiveportal.php:929 +#: usr/local/www/services_captiveportal_filemanager.php:215 +#: usr/local/www/diag_ipsec.php:163 usr/local/www/diag_ipsec_sad.php:134 +#: usr/local/www/services_captiveportal_ip.php:170 +#: usr/local/www/services_captiveportal_mac.php:190 +#: usr/local/www/diag_ipsec_spd.php:143 usr/local/www/services_dhcp.php:715 +#: usr/local/www/services_dhcp.php:876 usr/local/www/services_dnsmasq.php:214 +#: usr/local/www/services_captiveportal_hostname.php:171 +#: usr/local/www/services_captiveportal_vouchers.php:603 +#: usr/local/www/diag_routes.php:72 +#: usr/local/www/status_rrd_graph_settings.php:236 +#: usr/local/www/services_dyndns_edit.php:189 +#: usr/local/www/services_dyndns_edit.php:245 +#: usr/local/www/services_igmpproxy.php:161 +#: usr/local/www/services_rfc2136_edit.php:209 +#: usr/local/www/system_advanced_admin.php:289 +#: usr/local/www/system_gateway_groups.php:195 usr/local/www/vpn_l2tp.php:451 +#: usr/local/www/services_dhcpv6.php:789 +#: usr/local/www/diag_logs_settings.php:333 +#: usr/local/www/services_captiveportal_vouchers.php:610 +#: usr/local/www/services_dyndns_edit.php:272 +#: usr/local/www/services_dyndns_edit.php:376 +#: usr/local/www/firewall_nat_out.php:470 usr/local/www/system_routes.php:199 +#: usr/local/www/status_rrd_graph_settings.php:237 +#: usr/local/www/diag_ipsec.php:221 usr/local/www/diag_backup.php:736 +#: usr/local/www/services_unbound.php:253 +#: usr/local/www/services_captiveportal.php:974 +#: usr/local/www/services_dyndns.php:181 usr/local/www/services_dhcp.php:728 +#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:914 +#: usr/local/www/load_balancer_virtual_server_edit.php:278 +#: usr/local/www/interfaces_bridge_edit.php:455 +#: usr/local/www/interfaces_bridge_edit.php:499 +#: usr/local/www/interfaces_bridge_edit.php:543 +#: usr/local/www/firewall_aliases.php:232 +#: usr/local/www/diag_packet_capture.php:215 usr/local/www/interfaces.php:2023 +#: usr/local/www/firewall_virtual_ip_edit.php:545 +#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:884 +#: usr/local/www/diag_logs_settings.php:353 +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:624 +#: usr/local/www/firewall_nat_out.php:471 +#: usr/local/www/services_captiveportal_ip.php:168 +#: usr/local/www/interfaces_groups.php:149 usr/local/www/diag_ipsec.php:222 +#: usr/local/www/interfaces_qinq.php:152 usr/local/www/diag_ipsec_sad.php:135 +#: usr/local/www/services_captiveportal_mac.php:188 +#: usr/local/www/interfaces_bridge.php:145 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces_lagg.php:139 +#: usr/local/www/services_captiveportal_hostname.php:169 +#: usr/local/www/interfaces_gre.php:134 usr/local/www/diag_routes.php:73 +#: usr/local/www/system_gateway_groups.php:196 +#: usr/local/www/services_captiveportal.php:970 +#: usr/local/www/services_captiveportal_filemanager.php:212 +#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:932 +#: usr/local/www/services_dhcp.php:1118 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +#: usr/local/www/interfaces_bridge_edit.php:456 +#: usr/local/www/interfaces_bridge_edit.php:500 +#: usr/local/www/interfaces_bridge_edit.php:544 +#: usr/local/www/firewall_aliases.php:284 +#: usr/local/www/diag_packet_capture.php:262 +#: usr/local/www/interfaces_vlan.php:135 usr/local/www/interfaces.php:2011 +#: usr/local/www/vpn_l2tp.php:452 +#: usr/local/www/firewall_virtual_ip_edit.php:490 +#: usr/local/www/interfaces_gif.php:133 usr/local/www/diag_ipsec_spd.php:144 +#: usr/local/www/firewall_virtual_ip.php:247 +#: usr/local/www/services_dhcpv6.php:663 usr/local/www/services_dhcpv6.php:815 +#: usr/local/www/vpn_l2tp.php:455 usr/local/www/diag_logs_settings.php:353 +#: usr/local/www/firewall_schedule.php:240 +#: usr/local/www/services_dyndns_edit.php:276 +#: usr/local/www/services_dyndns_edit.php:380 +#: usr/local/www/services_wol.php:210 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +#: usr/local/www/services_captiveportal_ip.php:168 +#: usr/local/www/interfaces_qinq.php:155 +#: usr/local/www/interfaces_ppps_edit.php:627 +#: usr/local/www/firewall_virtual_ip.php:267 +#: usr/local/www/interfaces_lagg.php:143 usr/local/www/interfaces_vlan.php:141 +#: usr/local/www/firewall_aliases.php:284 +#: usr/local/www/firewall_virtual_ip_edit.php:482 +#: usr/local/www/diag_ipsec.php:223 +#: usr/local/www/status_rrd_graph_settings.php:237 +#: usr/local/www/diag_packet_capture.php:262 usr/local/www/diag_routes.php:73 +#: usr/local/www/interfaces_bridge.php:151 +#: usr/local/www/services_captiveportal_vouchers.php:633 +#: usr/local/www/system_routes.php:203 usr/local/www/services_dhcp.php:921 +#: usr/local/www/services_dhcp.php:946 usr/local/www/services_dhcp.php:1131 +#: usr/local/www/diag_ipsec_spd.php:144 +#: usr/local/www/interfaces_groups.php:149 +#: usr/local/www/services_captiveportal_hostname.php:169 +#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:832 +#: usr/local/www/firewall_nat_out.php:468 +#: usr/local/www/services_captiveportal_filemanager.php:212 +#: usr/local/www/firewall_nat_1to1.php:179 +#: usr/local/www/services_captiveportal.php:972 +#: usr/local/www/diag_backup.php:741 +#: usr/local/www/interfaces_bridge_edit.php:457 +#: usr/local/www/interfaces_bridge_edit.php:501 +#: usr/local/www/interfaces_bridge_edit.php:545 +#: usr/local/www/services_igmpproxy.php:161 +#: usr/local/www/services_rfc2136_edit.php:209 +#: usr/local/www/services_dnsmasq.php:240 +#: usr/local/www/services_captiveportal_mac.php:198 +#: usr/local/www/interfaces_gre.php:138 usr/local/www/diag_ipsec_sad.php:135 +#: usr/local/www/services_dyndns.php:181 usr/local/www/interfaces_gif.php:137 +#: usr/local/www/system_gateway_groups.php:196 +#: usr/local/www/interfaces.php:2038 +msgid "Note:" +msgstr "Not:" + +#: usr/local/www/firewall_virtual_ip_edit.php:559 +#: usr/local/www/firewall_virtual_ip_edit.php:547 +#: usr/local/www/firewall_virtual_ip_edit.php:492 +#: usr/local/www/firewall_virtual_ip_edit.php:484 +msgid "" +"Proxy ARP and Other type Virtual IPs cannot be bound to by anything running " +"on the firewall, such as IPsec, OpenVPN, etc. Use a CARP or IP Alias type " +"address for these cases." +msgstr "" +"Vekil ARP ve Diğer IP(ler) türündeki adresler OpenVPN, IPsec ve Güvenlik " +"Duvarı gibi çalışan servisler ile bağlı olamaz. Bu gibi durumlar için bir " +"CARP veya IP Grubu türünde adres kullanın." + +#: usr/local/www/firewall_virtual_ip_edit.php:560 +#: usr/local/www/firewall_virtual_ip_edit.php:548 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:485 +msgid "For more information on CARP and the above values, visit the OpenBSD " +msgstr "" +"CARP ve yukarıdaki değerler hakkında daha fazla bilgi için OpenBSD ziyaret " +"edebilirsiniz" + +#: usr/local/www/firewall_virtual_ip_edit.php:560 +#: usr/local/www/firewall_virtual_ip_edit.php:548 +#: usr/local/www/firewall_virtual_ip_edit.php:493 +#: usr/local/www/firewall_virtual_ip_edit.php:485 +msgid "CARP FAQ" +msgstr "CARP Sıkça Sorulan Sorular" + +#: usr/local/www/load_balancer_relay_action.php:74 +#: usr/local/www/load_balancer_relay_action.php:74 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"relay protocol." +msgstr "" +"Bu girdi en az bir aktarım protokolü tarafından kullanıldığı için silinemez." + +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +#: usr/local/www/load_balancer_relay_action.php:104 +#: usr/local/www/load_balancer_relay_action_edit.php:180 +msgid "Relay Action" +msgstr "Aktarma Eylemi" + +#: usr/local/www/load_balancer_relay_action.php:118 +#: usr/local/www/load_balancer_relay_action.php:116 +#: usr/local/www/load_balancer_relay_action.php:116 +msgid "" +"The load balancer configuration has been changed.
    You must apply the " +"changes in order for them to take effect." +msgstr "" +"Yük dengeleyici yapılandırması değiştirildi.
    Değişiklikleri uygulayarak " +"etkin hale gelmelerini sağlayabilirsiniz." + +#: usr/local/www/load_balancer_relay_action.php:128 +#: usr/local/www/load_balancer_relay_action.php:126 +#: usr/local/www/load_balancer_relay_action.php:126 +msgid "Relay Actions" +msgstr "Aktarma Eylemleri" + +#: usr/local/www/load_balancer_relay_action.php:129 +#: usr/local/www/load_balancer_relay_action.php:127 +#: usr/local/www/load_balancer_relay_action.php:127 +msgid "Relay Protocols" +msgstr "Aktarma Protokolleri" + +#: usr/local/www/load_balancer_relay_action.php:142 +#: usr/local/www/interfaces_qinq_edit.php:318 +#: usr/local/www/load_balancer_relay_action_edit.php:515 +#: usr/local/www/load_balancer_relay_action_edit.php:535 +#: usr/local/www/load_balancer_relay_protocol.php:136 +#: usr/local/www/load_balancer_relay_action_edit.php:514 +#: usr/local/www/load_balancer_relay_action_edit.php:534 +#: usr/local/www/interfaces_qinq_edit.php:319 +#: usr/local/www/load_balancer_relay_action_edit.php:512 +#: usr/local/www/load_balancer_relay_action_edit.php:532 +#: usr/local/www/load_balancer_relay_protocol.php:134 +#: usr/local/www/load_balancer_relay_action.php:140 +#: usr/local/www/load_balancer_relay_protocol.php:134 +#: usr/local/www/load_balancer_relay_action.php:140 +#: usr/local/www/load_balancer_relay_action_edit.php:512 +#: usr/local/www/load_balancer_relay_action_edit.php:532 +#: usr/local/www/interfaces_qinq_edit.php:322 +msgid "Options" +msgstr "Seçenekler" + +#: usr/local/www/diag_defaults.php:51 +msgid "" +"The system has been reset to factory defaults and is now rebooting. This may " +"take one minute." +msgstr "" +"Sistem fabrika ayarlarına geri döndürüldü ve yeniden başlatılıyor. Bu işlem " +"birkaç dakika sürebilir." + +#: usr/local/www/diag_defaults.php:58 usr/local/www/diag_defaults.php:52 +msgid "Factory defaults" +msgstr "Fabrika ayarları" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70 +msgid "If you click" +msgstr "Eğer buna tıklarsanız" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:81 +#: usr/local/www/crash_reporter.php:76 usr/local/www/halt.php:69 +#: usr/local/www/pkg.php:342 usr/local/www/system_firmware.php:229 +#: usr/local/www/reboot.php:61 usr/local/www/reboot.php:72 +#: usr/local/www/pkg.php:424 usr/local/www/reboot.php:53 +#: usr/local/www/reboot.php:64 usr/local/www/halt.php:60 +#: usr/local/www/system_firmware.php:236 usr/local/www/system_firmware.php:239 +#: usr/local/www/reboot.php:53 usr/local/www/reboot.php:64 +#: usr/local/www/pkg.php:424 usr/local/www/diag_defaults.php:60 +#: usr/local/www/diag_defaults.php:70 usr/local/www/diag_defaults.php:82 +#: usr/local/www/halt.php:60 usr/local/www/halt.php:69 +#: usr/local/www/crash_reporter.php:76 +msgid "Yes" +msgstr "Evet" + +#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70 +msgid "the firewall will:" +msgstr "güvenlik duvarı şunu yapacak:" + +#: usr/local/www/diag_defaults.php:70 usr/local/www/diag_defaults.php:72 +msgid "Reset to factory defaults" +msgstr "Fabrika ayarlarına geri dön" + +#: usr/local/www/diag_defaults.php:71 usr/local/www/diag_defaults.php:73 +msgid "LAN IP address will be reset to 192.168.1.1" +msgstr "LAN IP adresi 192.168.1.1 e sıfırlanacak" + +#: usr/local/www/diag_defaults.php:72 usr/local/www/diag_defaults.php:74 +msgid "System will be configured as a DHCP server on the default LAN interface" +msgstr "" +"Sistem öntanımlı LAN arabiriminde DHCP sunucu olarak çalışacak şekilde " +"yapılandırılacaktır." + +#: usr/local/www/diag_defaults.php:73 usr/local/www/diag_defaults.php:75 +msgid "Reboot after changes are installed" +msgstr "Değişiklikler kurulduktan sonra tekrar başlat" + +#: usr/local/www/diag_defaults.php:74 usr/local/www/diag_defaults.php:76 +msgid "" +"WAN interface will be set to obtain an address automatically from a DHCP " +"server" +msgstr "" +"WAN arabirimi bir DHCP sunucudan otomatik IP almak üzere yapılandırılacaktır" + +#: usr/local/www/diag_defaults.php:75 usr/local/www/diag_defaults.php:77 +msgid "webConfigurator admin username will be reset to 'admin'" +msgstr "webArayüzü yönetici kullanıcı adı 'admin' olarak değiştirilecektir." + +#: usr/local/www/diag_defaults.php:76 usr/local/www/diag_defaults.php:78 +msgid "webConfigurator admin password will be reset to" +msgstr "Yeni webArayüzü yönetici kullanıcı parolası:" + +#: usr/local/www/diag_defaults.php:79 usr/local/www/diag_defaults.php:80 +msgid "Are you sure you want to proceed?" +msgstr "Devam etmek istediğinize emin misiniz?" + +#: usr/local/www/diag_defaults.php:82 usr/local/www/crash_reporter.php:77 +#: usr/local/www/halt.php:70 usr/local/www/pkg.php:340 +#: usr/local/www/system_firmware.php:230 usr/local/www/reboot.php:62 +#: usr/local/www/pkg.php:422 usr/local/www/reboot.php:43 +#: usr/local/www/reboot.php:65 usr/local/www/halt.php:49 +#: usr/local/www/system_firmware.php:237 usr/local/www/system_firmware.php:240 +#: usr/local/www/reboot.php:43 usr/local/www/reboot.php:65 +#: usr/local/www/pkg.php:422 usr/local/www/diag_defaults.php:47 +#: usr/local/www/diag_defaults.php:83 usr/local/www/halt.php:49 +#: usr/local/www/halt.php:70 usr/local/www/crash_reporter.php:77 +msgid "No" +msgstr "Hayır" + +#: usr/local/www/diag_logs.php:65 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_filter.php:90 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_routing.php:54 +#: usr/local/www/diag_logs_settings.php:136 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_filter.php:79 +#: usr/local/www/diag_logs_routing.php:54 usr/local/www/diag_logs_dhcp.php:59 +#: usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_ppp.php:57 usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_ipsec.php:91 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_filter_summary.php:34 +msgid "System logs" +msgstr "Sistem kayıtları" + +#: usr/local/www/diag_logs.php:79 usr/local/www/diag_logs_auth.php:67 +#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_dhcp.php:72 +#: usr/local/www/diag_logs_filter.php:103 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_ipsec.php:104 usr/local/www/diag_logs_ntpd.php:67 +#: usr/local/www/diag_logs_openvpn.php:71 +#: usr/local/www/diag_logs_settings.php:212 +#: usr/local/www/diag_logs_vpn.php:128 usr/local/www/interfaces.php:1032 +#: usr/local/www/diag_logs_filter_summary.php:186 +#: usr/local/www/diag_logs_ppp.php:72 usr/local/www/diag_logs_relayd.php:68 +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/diag_logs_wireless.php:69 +#: usr/local/www/diag_logs_routing.php:67 +#: usr/local/www/diag_logs_settings.php:217 +#: usr/local/www/diag_logs_resolver.php:80 +#: usr/local/www/diag_logs_gateways.php:80 +#: usr/local/www/services_dhcp_edit.php:193 usr/local/www/interfaces.php:1118 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_routing.php:68 +#: usr/local/www/diag_logs_settings.php:224 +#: usr/local/www/diag_logs_relayd.php:69 usr/local/www/diag_logs_auth.php:68 +#: usr/local/www/diag_logs_ipsec.php:105 +#: usr/local/www/diag_logs_resolver.php:81 usr/local/www/diag_logs_ntpd.php:68 +#: usr/local/www/diag_logs_dhcp.php:73 usr/local/www/diag_logs_wireless.php:70 +#: usr/local/www/diag_logs_filter_summary.php:187 +#: usr/local/www/diag_logs_gateways.php:81 +#: usr/local/www/diag_logs_openvpn.php:72 usr/local/www/interfaces.php:1106 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_filter.php:93 usr/local/www/diag_logs_auth.php:68 +#: usr/local/www/diag_logs_settings.php:224 +#: usr/local/www/diag_logs_filter.php:93 +#: usr/local/www/diag_logs_routing.php:68 +#: usr/local/www/services_dhcp_edit.php:301 +#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_dhcp.php:73 +#: usr/local/www/diag_logs.php:79 +#: usr/local/www/diag_logs_filter_dynamic.php:99 +#: usr/local/www/diag_logs_ntpd.php:68 usr/local/www/diag_logs_openvpn.php:72 +#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/diag_logs_gateways.php:81 +#: usr/local/www/diag_logs_relayd.php:69 usr/local/www/diag_logs_vpn.php:128 +#: usr/local/www/diag_logs_ipsec.php:105 +#: usr/local/www/diag_logs_wireless.php:70 +#: usr/local/www/diag_logs_resolver.php:81 +#: usr/local/www/diag_logs_filter_summary.php:187 +#: usr/local/www/interfaces.php:1120 +msgid "DHCP" +msgstr "DHCP" + +#: usr/local/www/diag_logs.php:80 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_auth.php:68 usr/local/www/diag_logs_dhcp.php:73 +#: usr/local/www/diag_logs_filter.php:104 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_ipsec.php:105 usr/local/www/diag_logs_ntpd.php:68 +#: usr/local/www/diag_logs_openvpn.php:72 +#: usr/local/www/diag_logs_settings.php:213 +#: usr/local/www/diag_logs_vpn.php:129 +#: usr/local/www/diag_logs_filter_summary.php:187 +#: usr/local/www/diag_logs_ppp.php:73 usr/local/www/diag_logs_relayd.php:69 +#: usr/local/www/diag_logs_wireless.php:70 +#: usr/local/www/diag_logs_routing.php:68 +#: usr/local/www/diag_logs_settings.php:218 +#: usr/local/www/diag_logs_resolver.php:81 +#: usr/local/www/diag_logs_gateways.php:81 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_routing.php:69 +#: usr/local/www/diag_logs_settings.php:225 +#: usr/local/www/diag_logs_relayd.php:70 usr/local/www/diag_logs_auth.php:69 +#: usr/local/www/diag_logs_ipsec.php:106 +#: usr/local/www/diag_logs_resolver.php:82 usr/local/www/diag_logs_ntpd.php:69 +#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_wireless.php:71 +#: usr/local/www/diag_logs_filter_summary.php:188 +#: usr/local/www/diag_logs_gateways.php:82 +#: usr/local/www/diag_logs_openvpn.php:73 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_filter.php:94 usr/local/www/diag_logs_auth.php:54 +#: usr/local/www/diag_logs_auth.php:69 +#: usr/local/www/diag_logs_settings.php:225 +#: usr/local/www/diag_logs_filter.php:94 +#: usr/local/www/diag_logs_routing.php:69 usr/local/www/diag_logs_dhcp.php:74 +#: usr/local/www/diag_logs.php:80 +#: usr/local/www/diag_logs_filter_dynamic.php:100 +#: usr/local/www/diag_logs_ntpd.php:69 usr/local/www/diag_logs_openvpn.php:73 +#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_gateways.php:82 +#: usr/local/www/diag_logs_relayd.php:70 usr/local/www/diag_logs_vpn.php:129 +#: usr/local/www/diag_logs_ipsec.php:106 +#: usr/local/www/diag_logs_wireless.php:71 +#: usr/local/www/diag_logs_resolver.php:82 +#: usr/local/www/diag_logs_filter_summary.php:188 +msgid "Portal Auth" +msgstr "Hizmet Portalı" + +#: usr/local/www/diag_logs.php:81 usr/local/www/diag_logs_auth.php:69 +#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_filter.php:105 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_ipsec.php:106 usr/local/www/diag_logs_ntpd.php:69 +#: usr/local/www/diag_logs_openvpn.php:73 +#: usr/local/www/diag_logs_settings.php:214 +#: usr/local/www/diag_logs_vpn.php:130 +#: usr/local/www/diag_logs_filter_summary.php:188 +#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:74 +#: usr/local/www/diag_logs_relayd.php:70 +#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/diag_ipsec.php:48 +#: usr/local/www/diag_ipsec_sad.php:49 usr/local/www/diag_ipsec_spd.php:49 +#: usr/local/www/fbegin.inc:147 usr/local/www/fbegin.inc:164 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 +#: usr/local/www/diag_logs_wireless.php:71 +#: usr/local/www/diag_logs_routing.php:69 +#: usr/local/www/diag_logs_settings.php:219 usr/local/www/fbegin.inc:181 +#: usr/local/www/diag_logs_resolver.php:82 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/diag_logs_gateways.php:82 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_routing.php:70 +#: usr/local/www/diag_logs_settings.php:226 usr/local/www/fbegin.inc:172 +#: usr/local/www/fbegin.inc:189 usr/local/www/diag_logs_relayd.php:71 +#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:70 +#: usr/local/www/diag_logs_ipsec.php:107 +#: usr/local/www/diag_logs_resolver.php:83 usr/local/www/diag_logs_ntpd.php:70 +#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_wireless.php:72 +#: usr/local/www/diag_logs_filter_summary.php:189 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/diag_logs_gateways.php:83 +#: usr/local/www/diag_logs_openvpn.php:74 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_filter.php:95 usr/local/www/diag_logs_auth.php:70 +#: usr/local/www/diag_logs_settings.php:226 +#: usr/local/www/diag_logs_filter.php:95 usr/local/www/vpn_ipsec.php:125 +#: usr/local/www/diag_logs_routing.php:70 usr/local/www/diag_logs_dhcp.php:75 +#: usr/local/www/diag_ipsec.php:48 usr/local/www/diag_logs.php:81 +#: usr/local/www/diag_logs_filter_dynamic.php:101 +#: usr/local/www/diag_logs_ntpd.php:70 usr/local/www/diag_ipsec_spd.php:49 +#: usr/local/www/diag_logs_openvpn.php:74 usr/local/www/diag_logs_ppp.php:72 +#: usr/local/www/diag_logs_gateways.php:83 usr/local/www/fbegin.inc:163 +#: usr/local/www/fbegin.inc:180 usr/local/www/diag_logs_relayd.php:71 +#: usr/local/www/diag_logs_vpn.php:130 usr/local/www/diag_logs_ipsec.php:107 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_wireless.php:72 +#: usr/local/www/diag_logs_resolver.php:83 +#: usr/local/www/diag_logs_filter_summary.php:189 +#, fuzzy +msgid "IPsec" +msgstr "IPsec" + +#: usr/local/www/diag_logs.php:82 usr/local/www/diag_logs_auth.php:70 +#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_filter.php:106 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_ipsec.php:107 usr/local/www/diag_logs_ntpd.php:70 +#: usr/local/www/diag_logs_openvpn.php:74 +#: usr/local/www/diag_logs_settings.php:215 +#: usr/local/www/diag_logs_vpn.php:131 usr/local/www/interfaces.php:1032 +#: usr/local/www/diag_logs_filter_summary.php:189 +#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_ppp.php:75 +#: usr/local/www/diag_logs_relayd.php:71 +#: usr/local/www/status_interfaces.php:154 +#: usr/local/www/diag_logs_wireless.php:72 +#: usr/local/www/diag_logs_routing.php:70 +#: usr/local/www/diag_logs_settings.php:220 +#: usr/local/www/status_interfaces.php:172 +#: usr/local/www/diag_logs_resolver.php:83 +#: usr/local/www/diag_logs_gateways.php:83 usr/local/www/interfaces.php:1118 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_routing.php:71 +#: usr/local/www/diag_logs_settings.php:227 +#: usr/local/www/diag_logs_relayd.php:72 +#: usr/local/www/status_interfaces.php:175 usr/local/www/diag_logs_auth.php:71 +#: usr/local/www/diag_logs_ipsec.php:108 +#: usr/local/www/diag_logs_resolver.php:84 usr/local/www/diag_logs_ntpd.php:71 +#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_wireless.php:73 +#: usr/local/www/diag_logs_filter_summary.php:190 +#: usr/local/www/diag_logs_gateways.php:84 +#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/interfaces.php:1106 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_filter.php:96 usr/local/www/diag_logs_auth.php:71 +#: usr/local/www/diag_logs_settings.php:227 +#: usr/local/www/diag_logs_filter.php:96 +#: usr/local/www/diag_logs_routing.php:71 usr/local/www/diag_logs_dhcp.php:76 +#: usr/local/www/diag_logs.php:82 +#: usr/local/www/diag_logs_filter_dynamic.php:102 +#: usr/local/www/diag_logs_ntpd.php:71 usr/local/www/status_interfaces.php:175 +#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/diag_logs_ppp.php:57 +#: usr/local/www/diag_logs_ppp.php:73 usr/local/www/diag_logs_gateways.php:84 +#: usr/local/www/diag_logs_relayd.php:72 usr/local/www/diag_logs_vpn.php:131 +#: usr/local/www/diag_logs_ipsec.php:108 +#: usr/local/www/diag_logs_wireless.php:73 +#: usr/local/www/diag_logs_resolver.php:84 +#: usr/local/www/diag_logs_filter_summary.php:190 +#: usr/local/www/interfaces.php:1120 +msgid "PPP" +msgstr "PPP" + +#: usr/local/www/diag_logs.php:83 usr/local/www/diag_logs_auth.php:71 +#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_filter.php:107 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_ipsec.php:108 usr/local/www/diag_logs_ntpd.php:71 +#: usr/local/www/diag_logs_openvpn.php:75 +#: usr/local/www/diag_logs_settings.php:216 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_vpn.php:132 +#: usr/local/www/diag_logs_filter_summary.php:190 +#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:76 +#: usr/local/www/diag_logs_relayd.php:72 +#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/vpn_pppoe.php:86 +#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users_edit.php:135 usr/local/www/fbegin.inc:351 +#: usr/local/www/status_rrd_graph_settings.php:151 +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/diag_logs_wireless.php:73 +#: usr/local/www/diag_logs_routing.php:71 +#: usr/local/www/diag_logs_settings.php:221 usr/local/www/fbegin.inc:369 +#: usr/local/www/status_rrd_graph_settings.php:152 +#: usr/local/www/diag_logs_resolver.php:84 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/diag_logs_gateways.php:84 +#: usr/local/www/diag_logs_filter_dynamic.php:104 +#: usr/local/www/diag_logs_routing.php:72 +#: usr/local/www/diag_logs_settings.php:228 usr/local/www/fbegin.inc:315 +#: usr/local/www/diag_logs_relayd.php:73 +#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:72 +#: usr/local/www/diag_logs_ipsec.php:109 +#: usr/local/www/diag_logs_resolver.php:85 usr/local/www/diag_logs_ntpd.php:72 +#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_wireless.php:74 +#: usr/local/www/diag_logs_filter_summary.php:191 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/diag_logs_gateways.php:85 +#: usr/local/www/diag_logs_openvpn.php:76 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_filter.php:97 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/vpn_pppoe.php:87 usr/local/www/diag_logs_auth.php:72 +#: usr/local/www/diag_logs_settings.php:228 +#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/diag_logs_filter.php:97 +#: usr/local/www/vpn_ipsec.php:125 usr/local/www/diag_logs_routing.php:72 +#: usr/local/www/diag_logs_dhcp.php:77 +#: usr/local/www/status_rrd_graph_settings.php:152 +#: usr/local/www/diag_logs.php:83 +#: usr/local/www/diag_logs_filter_dynamic.php:103 +#: usr/local/www/diag_logs_ntpd.php:72 usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/diag_logs_openvpn.php:76 usr/local/www/diag_logs_ppp.php:74 +#: usr/local/www/diag_logs_gateways.php:85 usr/local/www/vpn_pptp.php:196 +#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:307 +#: usr/local/www/diag_logs_relayd.php:73 usr/local/www/diag_logs_vpn.php:44 +#: usr/local/www/diag_logs_vpn.php:132 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/diag_logs_ipsec.php:109 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +#: usr/local/www/vpn_ipsec_mobile.php:240 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +#: usr/local/www/diag_logs_wireless.php:74 +#: usr/local/www/diag_logs_resolver.php:85 +#: usr/local/www/diag_logs_filter_summary.php:191 +msgid "VPN" +msgstr "VPN" + +#: usr/local/www/diag_logs.php:85 usr/local/www/diag_logs_auth.php:73 +#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_filter.php:109 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_ipsec.php:110 usr/local/www/diag_logs_ntpd.php:73 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_openvpn.php:77 +#: usr/local/www/diag_logs_settings.php:218 +#: usr/local/www/diag_logs_vpn.php:134 +#: usr/local/www/diag_packet_capture.php:130 usr/local/www/diag_backup.php:112 +#: usr/local/www/license.php:213 +#: usr/local/www/diag_logs_filter_summary.php:192 +#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/diag_logs_relayd.php:74 +#: usr/local/www/status_graph.php:66 usr/local/www/fbegin.inc:148 +#: usr/local/www/fbegin.inc:166 usr/local/www/status_services.php:343 +#: usr/local/www/status_openvpn.php:46 usr/local/www/vpn_openvpn_client.php:40 +#: usr/local/www/vpn_openvpn_csc.php:40 +#: usr/local/www/vpn_openvpn_server.php:40 +#: usr/local/www/widgets/widgets/services_status.widget.php:148 +#: usr/local/www/diag_logs_wireless.php:75 +#: usr/local/www/diag_logs_routing.php:73 +#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:165 +#: usr/local/www/fbegin.inc:184 usr/local/www/diag_backup.php:189 +#: usr/local/www/diag_logs_resolver.php:86 +#: usr/local/www/diag_packet_capture.php:134 +#: usr/local/www/diag_logs_gateways.php:86 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: etc/inc/service-utils.inc:333 usr/local/www/diag_logs_routing.php:74 +#: usr/local/www/diag_logs_settings.php:230 usr/local/www/fbegin.inc:173 +#: usr/local/www/fbegin.inc:192 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111 +#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:74 +#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_wireless.php:76 +#: usr/local/www/vpn_openvpn_server.php:423 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/diag_packet_capture.php:64 +#: usr/local/www/diag_logs_gateways.php:87 +#: usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_filter.php:99 usr/local/www/diag_logs_auth.php:74 +#: usr/local/www/diag_logs_settings.php:230 +#: usr/local/www/vpn_openvpn_client.php:40 usr/local/www/status_openvpn.php:46 +#: usr/local/www/diag_logs_filter.php:99 usr/local/www/vpn_openvpn_csc.php:40 +#: usr/local/www/diag_logs_routing.php:74 usr/local/www/status_graph.php:66 +#: usr/local/www/diag_logs_dhcp.php:79 +#: usr/local/www/diag_packet_capture.php:64 usr/local/www/diag_logs.php:85 +#: usr/local/www/diag_logs_filter_dynamic.php:105 +#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/license.php:213 +#: usr/local/www/diag_logs_openvpn.php:45 +#: usr/local/www/diag_logs_openvpn.php:78 usr/local/www/diag_logs_ppp.php:76 +#: usr/local/www/diag_logs_gateways.php:87 usr/local/www/diag_backup.php:189 +#: usr/local/www/fbegin.inc:164 usr/local/www/fbegin.inc:183 +#: usr/local/www/diag_logs_relayd.php:75 usr/local/www/diag_logs_vpn.php:134 +#: usr/local/www/diag_logs_ipsec.php:111 +#: usr/local/www/vpn_openvpn_server.php:445 +#: usr/local/www/diag_logs_wireless.php:76 +#: usr/local/www/diag_logs_resolver.php:87 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: etc/inc/service-utils.inc:332 +#, fuzzy +msgid "OpenVPN" +msgstr "OpenVPN" + +#: usr/local/www/diag_logs.php:86 usr/local/www/diag_logs_auth.php:74 +#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_filter.php:110 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/diag_logs_ipsec.php:111 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_settings.php:219 +#: usr/local/www/diag_logs_vpn.php:135 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/diag_logs_ppp.php:79 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/fbegin.inc:141 usr/local/www/diag_logs_wireless.php:76 +#, fuzzy +msgid "OpenNTPD" +msgstr "OpenNTPD" + +#: usr/local/www/diag_logs.php:87 usr/local/www/diag_logs_auth.php:75 +#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_filter.php:111 +#: usr/local/www/diag_logs_filter_dynamic.php:110 +#: usr/local/www/diag_logs_ipsec.php:112 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_settings.php:220 +#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/interfaces_bridge.php:91 +#: usr/local/www/interfaces_gif.php:90 usr/local/www/interfaces_gre.php:91 +#: usr/local/www/interfaces_groups.php:77 +#: usr/local/www/interfaces_assign.php:404 +#: usr/local/www/status_wireless.php:41 usr/local/www/interfaces_vlan.php:92 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/diag_logs_ppp.php:80 usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/interfaces_lagg.php:96 usr/local/www/interfaces_ppps.php:92 +#: usr/local/www/interfaces_qinq.php:100 +#: usr/local/www/interfaces_wireless.php:76 +#: usr/local/www/interfaces_wireless.php:90 +#: usr/local/www/interfaces_wireless_edit.php:145 usr/local/www/fbegin.inc:183 +#: usr/local/www/status_rrd_graph.php:344 +#: usr/local/www/status_rrd_graph_settings.php:143 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/diag_logs_routing.php:86 usr/local/www/fbegin.inc:201 +#: usr/local/www/status_rrd_graph_settings.php:144 +#: usr/local/www/diag_logs_resolver.php:100 usr/local/www/diag_logs.php:99 +#: usr/local/www/status_rrd_graph.php:392 +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_gateways.php:100 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_routing.php:87 usr/local/www/fbegin.inc:209 +#: usr/local/www/interfaces_groups.php:78 +#: usr/local/www/interfaces_qinq.php:101 usr/local/www/interfaces_ppps.php:93 +#: usr/local/www/interfaces_bridge.php:92 +#: usr/local/www/diag_logs_resolver.php:101 +#: usr/local/www/interfaces_lagg.php:97 usr/local/www/interfaces_gre.php:92 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/diag_logs_wireless.php:89 +#: usr/local/www/interfaces_assign.php:398 +#: usr/local/www/diag_logs_gateways.php:101 +#: usr/local/www/interfaces_vlan.php:93 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/interfaces_gif.php:91 usr/local/www/status_wireless.php:41 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_qinq.php:104 +#: usr/local/www/diag_logs_routing.php:87 +#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_vlan.php:99 +#: usr/local/www/status_rrd_graph.php:417 +#: usr/local/www/status_rrd_graph_settings.php:144 +#: usr/local/www/diag_logs.php:99 usr/local/www/interfaces_bridge.php:98 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/interfaces_wireless.php:93 +#: usr/local/www/interfaces_groups.php:78 usr/local/www/interfaces_ppps.php:93 +#: usr/local/www/diag_logs_gateways.php:101 usr/local/www/fbegin.inc:200 +#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_gif.php:95 +#: usr/local/www/interfaces_assign.php:404 +#: usr/local/www/diag_logs_wireless.php:56 +#: usr/local/www/diag_logs_wireless.php:89 +#: usr/local/www/diag_logs_resolver.php:101 +msgid "Wireless" +msgstr "Kablosuz" + +#: usr/local/www/diag_logs.php:88 usr/local/www/diag_logs_auth.php:76 +#: usr/local/www/diag_logs_dhcp.php:81 usr/local/www/diag_logs_filter.php:112 +#: usr/local/www/diag_logs_filter_dynamic.php:111 +#: usr/local/www/diag_logs_ipsec.php:113 usr/local/www/diag_logs_ntpd.php:76 +#: usr/local/www/diag_logs_openvpn.php:80 +#: usr/local/www/diag_logs_settings.php:132 +#: usr/local/www/diag_logs_settings.php:221 +#: usr/local/www/diag_logs_vpn.php:137 +#: usr/local/www/system_firmware_settings.php:74 +#: usr/local/www/diag_logs_filter_summary.php:195 +#: usr/local/www/diag_logs_ppp.php:81 usr/local/www/diag_logs_relayd.php:77 +#: usr/local/www/status_rrd_graph.php:361 +#: usr/local/www/status_rrd_graph_settings.php:160 +#: usr/local/www/system_authservers.php:423 +#: usr/local/www/system_groupmanager.php:242 +#: usr/local/www/system_groupmanager_addprivs.php:170 +#: usr/local/www/system_usermanager.php:442 +#: usr/local/www/system_usermanager_addprivs.php:169 +#: usr/local/www/system_usermanager_settings.php:115 +#: usr/local/www/diag_logs_wireless.php:78 +#: usr/local/www/diag_logs_routing.php:75 +#: usr/local/www/diag_logs_settings.php:136 +#: usr/local/www/diag_logs_settings.php:225 +#: usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_setting.php:122 +#: usr/local/www/status_rrd_graph_settings.php:161 +#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112 +#: usr/local/www/system_usermanager.php:440 +#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/diag_logs_ppp.php:80 +#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/diag_logs.php:87 usr/local/www/status_rrd_graph.php:409 +#: usr/local/www/load_balancer_virtual_server.php:118 +#: usr/local/www/system_groupmanager_addprivs.php:168 +#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/load_balancer_monitor.php:112 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/diag_logs_gateways.php:88 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_filter_dynamic.php:109 +#: usr/local/www/load_balancer_pool.php:121 +#: usr/local/www/diag_logs_filter.php:111 +#: usr/local/www/diag_logs_routing.php:76 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_settings.php:232 +#: usr/local/www/load_balancer_setting.php:121 +#: usr/local/www/diag_logs_resolver.php:89 +#: usr/local/www/load_balancer_virtual_server.php:116 +#: usr/local/www/load_balancer_monitor.php:110 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_gateways.php:89 +#: usr/local/www/diag_logs_filter_dynamic.php:110 +#: usr/local/www/load_balancer_pool.php:119 +#: usr/local/www/system_authservers.php:428 +#: usr/local/www/diag_logs_filter.php:101 usr/local/www/diag_logs_auth.php:76 +#: usr/local/www/system_groupmanager.php:242 +#: usr/local/www/diag_logs_settings.php:143 +#: usr/local/www/diag_logs_settings.php:232 +#: usr/local/www/system_usermanager_addprivs.php:169 +#: usr/local/www/diag_logs_filter.php:101 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/diag_logs_routing.php:76 usr/local/www/diag_logs_dhcp.php:81 +#: usr/local/www/status_rrd_graph.php:434 +#: usr/local/www/status_rrd_graph_settings.php:161 +#: usr/local/www/diag_logs.php:87 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_ntpd.php:76 usr/local/www/diag_logs_openvpn.php:80 +#: usr/local/www/load_balancer_setting.php:98 +#: usr/local/www/load_balancer_setting.php:121 +#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/load_balancer_pool.php:119 +#: usr/local/www/diag_logs_gateways.php:89 +#: usr/local/www/system_authservers.php:435 +#: usr/local/www/system_groupmanager_addprivs.php:168 +#: usr/local/www/system_usermanager_settings.php:115 +#: usr/local/www/diag_logs_relayd.php:77 usr/local/www/diag_logs_vpn.php:136 +#: usr/local/www/diag_logs_ipsec.php:113 +#: usr/local/www/load_balancer_monitor.php:110 +#: usr/local/www/system_usermanager.php:440 +#: usr/local/www/load_balancer_virtual_server.php:116 +#: usr/local/www/diag_logs_wireless.php:78 +#: usr/local/www/diag_logs_resolver.php:89 +#: usr/local/www/diag_logs_filter_summary.php:195 +msgid "Settings" +msgstr "Ayarlar" + +#: usr/local/www/diag_logs.php:98 usr/local/www/diag_logs_resolver.php:110 +#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_gateways.php:110 +#: usr/local/www/diag_logs_resolver.php:111 +#: usr/local/www/diag_logs_gateways.php:111 usr/local/www/diag_logs.php:109 +#: usr/local/www/diag_logs_gateways.php:111 +#: usr/local/www/diag_logs_resolver.php:111 +#, php-format +msgid "Last %s system log entries" +msgstr "Sistem günlüğü son %s girdisi" + +#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_auth.php:90 +#: usr/local/www/diag_logs_dhcp.php:95 usr/local/www/diag_logs_filter.php:208 +#: usr/local/www/diag_logs_ipsec.php:150 usr/local/www/diag_logs_ntpd.php:91 +#: usr/local/www/diag_logs_openvpn.php:97 usr/local/www/diag_logs_vpn.php:188 +#: usr/local/www/diag_logs_ppp.php:114 usr/local/www/diag_logs_relayd.php:91 +#: usr/local/www/diag_logs_wireless.php:92 +#: usr/local/www/diag_logs_routing.php:101 +#: usr/local/www/diag_logs_relayd.php:90 usr/local/www/diag_logs_auth.php:89 +#: usr/local/www/diag_logs_ipsec.php:149 usr/local/www/diag_logs_vpn.php:187 +#: usr/local/www/diag_logs_ppp.php:113 +#: usr/local/www/diag_logs_resolver.php:121 +#: usr/local/www/diag_logs_ntpd.php:90 usr/local/www/diag_logs.php:120 +#: usr/local/www/diag_logs_dhcp.php:94 +#: usr/local/www/diag_logs_wireless.php:103 +#: usr/local/www/diag_logs_gateways.php:121 +#: usr/local/www/diag_logs_openvpn.php:96 +#: usr/local/www/diag_logs_filter.php:205 +#: usr/local/www/diag_logs_routing.php:102 +#: usr/local/www/diag_logs_resolver.php:122 +#: usr/local/www/diag_logs_wireless.php:104 +#: usr/local/www/diag_logs_gateways.php:122 +#: usr/local/www/diag_logs_filter.php:264 usr/local/www/diag_logs_auth.php:90 +#: usr/local/www/diag_logs_filter.php:264 +#: usr/local/www/diag_logs_routing.php:102 usr/local/www/diag_logs_dhcp.php:95 +#: usr/local/www/diag_logs.php:120 usr/local/www/diag_logs_ntpd.php:91 +#: usr/local/www/diag_logs_openvpn.php:97 usr/local/www/diag_logs_ppp.php:95 +#: usr/local/www/diag_logs_gateways.php:122 +#: usr/local/www/diag_logs_relayd.php:91 usr/local/www/diag_logs_vpn.php:187 +#: usr/local/www/diag_logs_ipsec.php:151 +#: usr/local/www/diag_logs_wireless.php:104 +#: usr/local/www/diag_logs_resolver.php:122 +msgid "Clear log" +msgstr "Günlüğü temizle" + +#: usr/local/www/diag_logs.php:115 usr/local/www/diag_logs_filter.php:128 +#: usr/local/www/diag_dump_states.php:138 +#: usr/local/www/diag_dump_states_sources.php:133 +#: usr/local/www/diag_logs_resolver.php:127 usr/local/www/diag_logs.php:126 +#: usr/local/www/diag_dump_states.php:153 +#: usr/local/www/diag_logs_gateways.php:127 +#: usr/local/www/diag_logs_filter.php:127 +#: usr/local/www/diag_logs_resolver.php:128 +#: usr/local/www/diag_dump_states_sources.php:132 +#: usr/local/www/diag_dump_states.php:152 +#: usr/local/www/diag_logs_gateways.php:128 +#: usr/local/www/diag_logs_filter.php:147 +#: usr/local/www/diag_logs_filter.php:147 +#: usr/local/www/diag_dump_states.php:152 +#: usr/local/www/diag_dump_states_sources.php:132 +#: usr/local/www/diag_logs.php:126 usr/local/www/diag_logs_gateways.php:128 +#: usr/local/www/diag_logs_resolver.php:128 +msgid "Filter" +msgstr "Filtre" + +#: usr/local/www/diag_logs_auth.php:86 usr/local/www/diag_logs_auth.php:85 +#: usr/local/www/diag_logs_auth.php:86 +#, php-format +msgid "Last %s Portal Auth log entries" +msgstr "Hizmet Portalı son %s kimlik doğrulama girdisi" + +#: usr/local/www/diag_logs_dhcp.php:91 usr/local/www/diag_logs_dhcp.php:90 +#: usr/local/www/diag_logs_dhcp.php:91 +#, php-format +msgid "Last %s DHCP service log entries" +msgstr "DHCP servisi son %s günlük girdisi" + +#: usr/local/www/diag_logs_filter.php:56 usr/local/www/diag_logs_filter.php:63 +#: usr/local/www/diag_logs_filter.php:63 +msgid "The rule that triggered this action is" +msgstr "Bu eylemi tetikleyen kural" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter_summary.php:204 +msgid "Normal View" +msgstr "Normal görünüm" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter_summary.php:204 +msgid "Dynamic View" +msgstr "Dinamik Görünüm" + +#: usr/local/www/diag_logs_filter.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:119 +#: usr/local/www/diag_logs_filter_summary.php:204 +#: usr/local/www/diag_logs_filter_summary.php:203 +#: usr/local/www/diag_logs_filter_dynamic.php:117 +#: usr/local/www/diag_logs_filter.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter.php:152 +#: usr/local/www/diag_logs_filter_dynamic.php:118 +#: usr/local/www/diag_logs_filter_summary.php:204 +msgid "Summary View" +msgstr "Özet Görünüm" + +#: usr/local/www/diag_logs_filter.php:139 +#: usr/local/www/diag_logs_filter.php:138 +#: usr/local/www/diag_logs_filter.php:170 +#: usr/local/www/diag_logs_filter.php:170 +#, php-format +msgid "Last %s firewall log entries." +msgstr "Güvenlik Duvarı son %s günlük girdisi." + +#: usr/local/www/diag_logs_filter.php:141 +#: usr/local/www/diag_logs_filter.php:140 +#: usr/local/www/diag_logs_filter.php:172 +#: usr/local/www/diag_logs_filter.php:172 +msgid "matched log entries." +msgstr "uyan günlük girdisi." + +#: usr/local/www/diag_logs_filter.php:143 +#: usr/local/www/diag_logs_filter.php:142 +#: usr/local/www/diag_logs_filter.php:173 +#: usr/local/www/diag_logs_filter.php:173 +#, php-format +msgid "Max(%s)" +msgstr "En fazla (%s)" + +#: usr/local/www/diag_logs_filter.php:146 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#: usr/local/www/diag_logs_filter.php:145 +#: usr/local/www/diag_logs_filter_dynamic.php:125 +#: usr/local/www/diag_logs_filter.php:177 +#: usr/local/www/diag_logs_filter.php:177 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/widgets/widgets/log.widget.php:163 +msgid "Act" +msgstr "Eyl" + +#: usr/local/www/diag_logs_filter.php:147 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_vpn.php:175 +#: usr/local/www/firewall_schedule_edit.php:910 +#: usr/local/www/diag_logs_vpn.php:174 +#: usr/local/www/diag_logs_filter_dynamic.php:125 +#: usr/local/www/diag_logs_filter.php:146 +#: usr/local/www/firewall_schedule_edit.php:909 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter.php:178 +#: usr/local/www/diag_logs_filter.php:178 +#: usr/local/www/firewall_schedule_edit.php:909 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_system_pftop.php:143 usr/local/www/diag_logs_vpn.php:174 +msgid "Time" +msgstr "Zaman" + +#: usr/local/www/diag_logs_filter.php:148 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/firewall_nat.php:195 +#: usr/local/www/diag_logs_filter_dynamic.php:126 +#: usr/local/www/diag_logs_filter.php:147 usr/local/www/firewall_nat.php:200 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/firewall_nat.php:200 +msgid "If" +msgstr "Arabirim" + +#: usr/local/www/diag_logs_filter.php:149 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/firewall_nat_edit.php:529 +#: usr/local/www/firewall_nat_edit.php:535 +#: usr/local/www/firewall_nat_out.php:342 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:468 +#: usr/local/www/firewall_rules.php:364 +#: usr/local/www/firewall_rules_edit.php:855 +#: usr/local/www/vpn_ipsec_mobile.php:356 +#: usr/local/www/vpn_ipsec_mobile.php:377 usr/local/www/diag_ipsec_sad.php:87 +#: usr/local/www/diag_ipsec_spd.php:86 usr/local/www/firewall_nat_out.php:352 +#: usr/local/www/firewall_nat_out_edit.php:481 +#: usr/local/www/firewall_rules_edit.php:890 +#: usr/local/www/firewall_rules.php:368 +#: usr/local/www/firewall_nat_edit.php:536 +#: usr/local/www/firewall_nat_edit.php:542 +#: usr/local/www/diag_logs_filter_dynamic.php:127 +#: usr/local/www/diag_logs_filter.php:148 +#: usr/local/www/firewall_nat_out.php:353 +#: usr/local/www/vpn_ipsec_mobile.php:383 +#: usr/local/www/vpn_ipsec_mobile.php:401 usr/local/www/diag_ipsec_sad.php:88 +#: usr/local/www/firewall_rules.php:361 +#: usr/local/www/firewall_nat_edit.php:541 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/diag_ipsec_spd.php:87 usr/local/www/diag_logs_filter.php:183 +#: usr/local/www/firewall_rules_edit.php:893 +#: usr/local/www/diag_logs_filter.php:183 +#: usr/local/www/firewall_nat_edit.php:530 +#: usr/local/www/firewall_nat_edit.php:536 +#: usr/local/www/diag_logs_filter_dynamic.php:131 +#: usr/local/www/diag_ipsec_spd.php:87 usr/local/www/firewall_nat_out.php:353 +#: usr/local/www/firewall_rules.php:361 +#: usr/local/www/widgets/widgets/log.widget.php:165 +#: usr/local/www/vpn_ipsec_mobile.php:383 +#: usr/local/www/vpn_ipsec_mobile.php:401 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:485 +#: usr/local/www/diag_ipsec_sad.php:88 +msgid "Source" +msgstr "Kaynak" + +#: usr/local/www/diag_logs_filter.php:150 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/firewall_nat_1to1_edit.php:383 +#: usr/local/www/firewall_nat_edit.php:624 +#: usr/local/www/firewall_nat_out.php:344 +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:498 +#: usr/local/www/firewall_rules.php:366 +#: usr/local/www/firewall_rules_edit.php:948 +#: usr/local/www/diag_ipsec_sad.php:88 usr/local/www/diag_ipsec_spd.php:87 +#: usr/local/www/firewall_nat_out.php:354 +#: usr/local/www/firewall_nat_1to1_edit.php:390 +#: usr/local/www/firewall_nat_out_edit.php:511 +#: usr/local/www/firewall_rules_edit.php:983 +#: usr/local/www/firewall_rules.php:370 +#: usr/local/www/firewall_nat_edit.php:631 +#: usr/local/www/diag_logs_filter_dynamic.php:128 +#: usr/local/www/diag_logs_filter.php:149 +#: usr/local/www/firewall_nat_out.php:355 +#: usr/local/www/firewall_nat_1to1_edit.php:388 +#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/firewall_rules.php:363 +#: usr/local/www/firewall_nat_edit.php:630 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_ipsec_spd.php:88 usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/firewall_rules_edit.php:992 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/firewall_nat_edit.php:625 +#: usr/local/www/diag_logs_filter_dynamic.php:132 +#: usr/local/www/diag_ipsec_spd.php:88 usr/local/www/firewall_nat_out.php:355 +#: usr/local/www/firewall_rules.php:363 +#: usr/local/www/firewall_nat_1to1_edit.php:388 +#: usr/local/www/widgets/widgets/log.widget.php:166 +#: usr/local/www/firewall_nat_out_edit.php:134 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/diag_ipsec_sad.php:89 +msgid "Destination" +msgstr "Hedef" + +#: usr/local/www/diag_logs_filter.php:151 +#: usr/local/www/diag_logs_filter_dynamic.php:131 +#: usr/local/www/diag_dump_states.php:150 usr/local/www/firewall_rules.php:363 +#: usr/local/www/diag_states_summary.php:152 +#: usr/local/www/firewall_nat.php:196 usr/local/www/firewall_rules.php:367 +#: usr/local/www/diag_dump_states.php:168 +#: usr/local/www/diag_logs_filter_dynamic.php:129 +#: usr/local/www/diag_states_summary.php:141 +#: usr/local/www/diag_logs_filter.php:150 usr/local/www/firewall_nat.php:201 +#: usr/local/www/firewall_rules.php:360 usr/local/www/diag_dump_states.php:167 +#: usr/local/www/diag_logs_filter_dynamic.php:130 +#: usr/local/www/diag_states_summary.php:143 +#: usr/local/www/diag_logs_filter.php:185 +#: usr/local/www/diag_logs_filter.php:185 +#: usr/local/www/diag_dump_states.php:167 +#: usr/local/www/diag_states_summary.php:143 +#: usr/local/www/diag_logs_filter_dynamic.php:133 +#: usr/local/www/firewall_nat.php:201 usr/local/www/firewall_rules.php:360 +msgid "Proto" +msgstr "Protokol" + +#: usr/local/www/diag_logs_filter.php:178 +#: usr/local/www/diag_logs_filter.php:183 +#: usr/local/www/diag_logs_filter_summary.php:81 +#: usr/local/www/diag_logs_filter.php:175 +#: usr/local/www/diag_logs_filter.php:180 +#: usr/local/www/diag_logs_filter_summary.php:82 +#: usr/local/www/diag_logs_filter.php:221 +#: usr/local/www/diag_logs_filter.php:228 +#: usr/local/www/diag_logs_filter.php:221 +#: usr/local/www/diag_logs_filter.php:228 +#: usr/local/www/diag_logs_filter_summary.php:82 +msgid "Reverse Resolve with DNS" +msgstr "DNS ters çözümleme yap" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:223 +msgid "Easy Rule: Add to Block List" +msgstr "Kolay Kural: Engelleme listesine ekle" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:223 +msgid "Do you really want to add this BLOCK rule?" +msgstr "Bu ENGEL kuralını eklemek istediğinize emin misiniz?" + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +msgid "Easy Rule is still experimental." +msgstr "Kolay Kural deneyseldir." + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +msgid "Continue at risk of your own peril." +msgstr "Sistem kararlılığının bozulabileceğini unutmayın." + +#: usr/local/www/diag_logs_filter.php:179 +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:176 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:223 +#: usr/local/www/diag_logs_filter.php:230 +msgid "Backups are also nice." +msgstr "Yedekler güzeldir candır." + +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:230 +msgid "Easy Rule: Pass this traffic" +msgstr "Kolay Kural: Bu trafiğe izin ver" + +#: usr/local/www/diag_logs_filter.php:184 +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:230 +#: usr/local/www/diag_logs_filter.php:230 +msgid "Do you really want to add this PASS rule?" +msgstr "Bu İZİN Kuralını eklemek istediğinize emin misiniz?" + +#: usr/local/www/diag_logs_filter.php:196 +#: usr/local/www/diag_logs_filter.php:193 +#: usr/local/www/diag_logs_filter.php:251 +#: usr/local/www/diag_logs_filter.php:251 +#, php-format +msgid "Last %s firewall log entries" +msgstr "Güvenlik Duvarı son %s günlük girdisi " + +#: usr/local/www/diag_logs_filter_dynamic.php:61 +#: usr/local/www/diag_logs_filter_dynamic.php:61 +msgid "Firewall (Dynamic View)" +msgstr "Güvenlik Duvarı (Dinamik Görünüm)" + +#: usr/local/www/diag_logs_filter_dynamic.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:120 +#: usr/local/www/diag_logs_filter_dynamic.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +#, php-format +msgid "Last %s records" +msgstr "Son %s kayıtlar" + +#: usr/local/www/diag_logs_filter_dynamic.php:122 +#: usr/local/www/diag_logs_filter_dynamic.php:120 +#: usr/local/www/diag_logs_filter_dynamic.php:121 +#: usr/local/www/diag_logs_filter_dynamic.php:124 +msgid "Pause:" +msgstr "Duraklat:" + +#: usr/local/www/diag_logs_filter_dynamic.php:153 +#: usr/local/www/diag_logs_filter_dynamic.php:151 +#: usr/local/www/diag_logs_filter_dynamic.php:152 +#: usr/local/www/diag_logs_filter_dynamic.php:165 +msgid "TCP Flags" +msgstr "TCP Bayrakları" + +#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/status_services.php:330 +#: usr/local/www/widgets/widgets/services_status.widget.php:135 +#: etc/inc/service-utils.inc:320 usr/local/www/diag_logs_ipsec.php:91 +#: etc/inc/service-utils.inc:319 +#, fuzzy +msgid "IPsec VPN" +msgstr "IPsec VPN" + +#: usr/local/www/diag_logs_ipsec.php:123 usr/local/www/diag_logs_ipsec.php:122 +#: usr/local/www/diag_logs_ipsec.php:123 +#, php-format +msgid "Last %s IPsec log entries" +msgstr "IPsec son %s günlük girdisi" + +#: usr/local/www/diag_logs_ipsec.php:135 usr/local/www/diag_logs_ppp.php:99 +#: usr/local/www/diag_logs_ipsec.php:134 usr/local/www/diag_logs_ppp.php:98 +#: usr/local/www/diag_logs_ipsec.php:136 +msgid "Unknown Gateway/Dynamic" +msgstr "Bilinmeyen Ağ Geçidi/Dinamik" + +#: usr/local/www/diag_logs_ntpd.php:86 +#, php-format +msgid "Last %s OpenNTPD log entries" +msgstr "OpenNTPD son %s olay girdisi" + +#: usr/local/www/diag_logs_openvpn.php:90 +#: usr/local/www/diag_logs_openvpn.php:89 +#: usr/local/www/diag_logs_openvpn.php:90 +#, php-format +msgid "Last %s OpenVPN log entries" +msgstr "OpenVPN son %s olay girdisi" + +#: usr/local/www/diag_dump_states.php:51 usr/local/www/status_openvpn.php:59 +#: usr/local/www/widgets/widgets/openvpn.widget.php:16 +#: usr/local/www/diag_dump_states_sources.php:51 +#: usr/local/www/widgets/widgets/openvpn.widget.php:17 +#: usr/local/www/status_openvpn.php:61 usr/local/www/status_openvpn.php:61 +#: usr/local/www/diag_dump_states.php:51 +#: usr/local/www/diag_dump_states_sources.php:51 +#: usr/local/www/widgets/widgets/openvpn.widget.php:17 +msgid "invalid input" +msgstr "geçersiz girdi" + +#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_dump_states.php:75 +#: usr/local/www/diag_dump_states.php:75 +msgid "Show States" +msgstr "Durumları Göster" + +#: usr/local/www/diag_dump_states.php:95 usr/local/www/status_openvpn.php:130 +#: usr/local/www/widgets/widgets/openvpn.widget.php:84 +#: usr/local/www/diag_dump_states_sources.php:95 +#: usr/local/www/diag_dump_states.php:105 +#: usr/local/www/widgets/widgets/openvpn.widget.php:85 +#: usr/local/www/status_openvpn.php:131 +#: usr/local/www/diag_dump_states_sources.php:94 +#: usr/local/www/diag_dump_states.php:104 usr/local/www/status_openvpn.php:131 +#: usr/local/www/diag_dump_states.php:104 +#: usr/local/www/diag_dump_states_sources.php:94 +#: usr/local/www/widgets/widgets/openvpn.widget.php:84 +msgid "An error occurred." +msgstr "Bir hata oluştu." + +#: usr/local/www/diag_dump_states.php:110 +#: usr/local/www/diag_states_summary.php:151 +#: usr/local/www/diag_states_summary.php:153 +#: usr/local/www/diag_resetstate.php:77 usr/local/www/fbegin.inc:206 +#: usr/local/www/system_advanced_misc.php:398 +#: usr/local/www/diag_dump_states_sources.php:110 usr/local/www/fbegin.inc:224 +#: usr/local/www/system_advanced_misc.php:441 +#: usr/local/www/diag_dump_states.php:120 +#: usr/local/www/diag_states_summary.php:140 +#: usr/local/www/diag_states_summary.php:142 usr/local/www/fbegin.inc:233 +#: usr/local/www/system_advanced_misc.php:490 +#: usr/local/www/diag_dump_states_sources.php:109 +#: usr/local/www/diag_dump_states.php:119 +#: usr/local/www/diag_states_summary.php:144 +#: usr/local/www/diag_dump_states.php:119 +#: usr/local/www/diag_states_summary.php:142 +#: usr/local/www/diag_states_summary.php:144 +#: usr/local/www/diag_dump_states_sources.php:109 +#: usr/local/www/system_advanced_misc.php:502 +#: usr/local/www/diag_resetstate.php:77 usr/local/www/fbegin.inc:225 +msgid "States" +msgstr "Durumlar" + +#: usr/local/www/diag_dump_states.php:112 usr/local/www/diag_resetstate.php:79 +#: usr/local/www/diag_dump_states_sources.php:111 +#: usr/local/www/diag_dump_states.php:122 +#: usr/local/www/diag_dump_states_sources.php:110 +#: usr/local/www/diag_dump_states.php:121 +#: usr/local/www/diag_dump_states.php:121 +#: usr/local/www/diag_dump_states_sources.php:110 +#: usr/local/www/diag_resetstate.php:79 +msgid "Source Tracking" +msgstr "Kaynak Takibi" + +#: usr/local/www/diag_dump_states.php:113 usr/local/www/diag_resetstate.php:80 +#: usr/local/www/diag_dump_states_sources.php:112 +#: usr/local/www/diag_dump_states.php:123 +#: usr/local/www/diag_dump_states_sources.php:111 +#: usr/local/www/diag_dump_states.php:122 +#: usr/local/www/diag_dump_states.php:122 +#: usr/local/www/diag_dump_states_sources.php:111 +#: usr/local/www/diag_resetstate.php:80 +msgid "Reset States" +msgstr "Durumları Sıfırla" + +#: usr/local/www/diag_dump_states.php:134 +msgid "Current state count:" +msgstr "Güncel durum sayımı:" + +#: usr/local/www/diag_dump_states.php:136 +#: usr/local/www/diag_dump_states_sources.php:131 +#: usr/local/www/diag_dump_states.php:151 +#: usr/local/www/diag_dump_states_sources.php:130 +#: usr/local/www/diag_dump_states.php:150 +#: usr/local/www/diag_dump_states.php:150 +#: usr/local/www/diag_dump_states_sources.php:130 +msgid "Filter expression:" +msgstr "Filtreleme ifadesi:" + +#: usr/local/www/diag_dump_states.php:151 +#: usr/local/www/diag_dump_states.php:169 +#: usr/local/www/diag_dump_states.php:168 +#: usr/local/www/diag_dump_states.php:168 +msgid "Source -> Router -> Destination" +msgstr "Kaynak -> Router -> Hedef" + +#: usr/local/www/diag_dump_states.php:152 +#: usr/local/www/status_dhcpv6_leases.php:486 +#: usr/local/www/diag_dump_states.php:170 +#: usr/local/www/status_dhcpv6_leases.php:487 +#: usr/local/www/diag_dump_states.php:169 +#: usr/local/www/status_dhcpv6_leases.php:490 +#: usr/local/www/diag_dump_states.php:169 +#: usr/local/www/diag_system_pftop.php:142 +msgid "State" +msgstr "Durum" + +#: usr/local/www/diag_dump_states.php:185 +#: usr/local/www/diag_dump_states.php:203 +#: usr/local/www/diag_dump_states.php:202 +#: usr/local/www/diag_dump_states.php:202 +msgid "Remove all state entries from" +msgstr "Tüm durum girdilerini sil" + +#: usr/local/www/diag_dump_states.php:185 +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:735 usr/local/www/diag_confbak.php:111 +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_dhcp.php:636 +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_dhcpv6.php:572 usr/local/www/services_dhcpv6.php:579 +#: usr/local/www/diag_dump_states_sources.php:180 +#: usr/local/www/diag_dump_states.php:203 usr/local/www/services_dhcp.php:649 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/services_dhcpv6.php:645 usr/local/www/services_dhcpv6.php:652 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/diag_dump_states_sources.php:179 +#: usr/local/www/diag_dump_states.php:202 usr/local/www/services_dhcp.php:770 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:583 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/diag_dump_states.php:202 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:736 +#: usr/local/www/diag_dump_states_sources.php:179 +#: usr/local/www/services_dhcp.php:780 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_dhcpv6.php:593 usr/local/www/services_dhcpv6.php:600 +#: usr/local/www/diag_confbak.php:111 +msgid "to" +msgstr "ile" + +#: usr/local/www/diag_dump_states.php:194 +#: usr/local/www/diag_dump_states.php:212 +#: usr/local/www/diag_dump_states.php:211 +#: usr/local/www/diag_dump_states.php:211 +msgid "No states were found." +msgstr "Herhangi bir durum bulunamadı." + +#: usr/local/www/diag_logs_settings.php:79 +msgid "A valid IP address must be specified for remote syslog server #1." +msgstr "Uzak syslog sunucu #1 için geçerli bir IP adresi belirtilmeli." + +#: usr/local/www/diag_logs_settings.php:82 +msgid "A valid IP address must be specified for remote syslog server #2." +msgstr "Uzak syslog sunucu #2 için geçerli bir IP adresi belirtilmeli." + +#: usr/local/www/diag_logs_settings.php:85 +msgid "A valid IP address must be specified for remote syslog server #3." +msgstr "Uzak syslog sunucu #3 için geçerli bir IP adresi belirtilmeli." + +#: usr/local/www/diag_logs_settings.php:92 +#: usr/local/www/diag_logs_settings.php:96 +#: usr/local/www/diag_logs_settings.php:97 +#: usr/local/www/diag_logs_settings.php:97 +msgid "Number of log entries to show must be between 5 and 2000." +msgstr "Gösterilecek günlük girdisi sayısı 5 ile 2000 arasında olmalıdır." + +#: usr/local/www/diag_logs_settings.php:232 +#: usr/local/www/diag_logs_settings.php:239 +#: usr/local/www/diag_logs_settings.php:246 +#: usr/local/www/diag_logs_settings.php:246 +msgid "Show log entries in reverse order (newest entries on top)" +msgstr "Günlük girdilerini tersten (en yeni kayıtlar en üstte) göster" + +#: usr/local/www/diag_logs_settings.php:236 +msgid "Number of log entries to show:" +msgstr "Gösterilecek günlük girdisi sayısı:" + +#: usr/local/www/diag_logs_settings.php:242 +#: usr/local/www/diag_logs_settings.php:250 +#: usr/local/www/diag_logs_settings.php:257 +#: usr/local/www/diag_logs_settings.php:257 +msgid "Log packets blocked by the default rule" +msgstr "Varsayılan kural tarafından engellenen paketleri günlüğe kaydet" + +#: usr/local/www/diag_logs_settings.php:243 +msgid "" +"Hint: packets that are blocked by the implicit default block rule will not " +"be logged anymore if you uncheck this option. Per-rule logging options are " +"not affected." +msgstr "" +"İpucu: Eğer bu seçeneğin işaretini kaldırırsanız varsayılan kural tarafından " +"engellenen paketler kayıt altına alınmayacaktır. Kuralların kendi " +"günlükleme seçenekleri etkilenmez." + +#: usr/local/www/diag_logs_settings.php:250 +#: usr/local/www/diag_logs_settings.php:258 +#: usr/local/www/diag_logs_settings.php:265 +#: usr/local/www/diag_logs_settings.php:265 +msgid "Show raw filter logs" +msgstr "Ham filtreleme günlüklerini göster" + +#: usr/local/www/diag_logs_settings.php:251 +msgid "" +"Hint: If this is checked, filter logs are shown as generated by the packet " +"filter, without any formatting. This will reveal more detailed information." +msgstr "" +"İpucu: Eğer bu seçeneği işaretlerseniz, filtre günlükleri paket filtresinin " +"oluşturduğu haliyle, herhangi bir biçimlendirme uygulanmadan gösterilir. Bu " +"durumda daha fazla detay görüntülenir." + +#: usr/local/www/diag_logs_settings.php:256 +#: usr/local/www/diag_logs_settings.php:267 +#: usr/local/www/diag_logs_settings.php:287 +#: usr/local/www/diag_logs_settings.php:287 +msgid "Disable writing log files to the local RAM disk" +msgstr "Günlük dosyalarının yerel RAM diske yazılması özelliğini kapat" + +#: usr/local/www/diag_logs_settings.php:261 +msgid "Enable syslog'ing to remote syslog server" +msgstr "Syslog kayıtlarının uzak syslog sunucuya gösterilmesi özelliğini aç" + +#: usr/local/www/diag_logs_settings.php:264 +msgid "Remote syslog servers" +msgstr "Uzak syslog sunucular" + +#: usr/local/www/diag_logs_settings.php:269 +#: usr/local/www/diag_logs_settings.php:277 +#: usr/local/www/diag_logs_settings.php:285 +#: usr/local/www/vpn_ipsec_mobile.php:496 +#: usr/local/www/vpn_ipsec_mobile.php:502 +#: usr/local/www/vpn_ipsec_mobile.php:508 +#: usr/local/www/vpn_ipsec_mobile.php:514 +#: usr/local/www/vpn_ipsec_mobile.php:538 +#: usr/local/www/vpn_ipsec_mobile.php:544 usr/local/www/diag_dns.php:208 +#: usr/local/www/services_rfc2136_edit.php:180 +#: usr/local/www/vpn_openvpn_client.php:365 +#: usr/local/www/vpn_openvpn_client.php:862 +#: usr/local/www/vpn_openvpn_csc.php:293 usr/local/www/vpn_openvpn_csc.php:477 +#: usr/local/www/vpn_openvpn_csc.php:485 usr/local/www/vpn_openvpn_csc.php:493 +#: usr/local/www/vpn_openvpn_csc.php:501 usr/local/www/vpn_openvpn_csc.php:529 +#: usr/local/www/vpn_openvpn_csc.php:537 usr/local/www/vpn_openvpn_csc.php:625 +#: usr/local/www/vpn_openvpn_csc.php:633 +#: usr/local/www/vpn_openvpn_server.php:40 +#: usr/local/www/vpn_openvpn_server.php:583 +#: usr/local/www/vpn_openvpn_server.php:1238 +#: usr/local/www/vpn_openvpn_server.php:1246 +#: usr/local/www/vpn_openvpn_server.php:1254 +#: usr/local/www/vpn_openvpn_server.php:1262 +#: usr/local/www/vpn_openvpn_server.php:1290 +#: usr/local/www/vpn_openvpn_server.php:1298 +#: usr/local/www/vpn_openvpn_server.php:1386 +#: usr/local/www/vpn_openvpn_server.php:1394 +#: usr/local/www/diag_logs_settings.php:286 +#: usr/local/www/diag_logs_settings.php:290 +#: usr/local/www/diag_logs_settings.php:294 usr/local/www/status_ntpd.php:108 +#: usr/local/www/diag_dns.php:207 usr/local/www/vpn_openvpn_server.php:656 +#: usr/local/www/vpn_openvpn_server.php:1380 +#: usr/local/www/vpn_openvpn_server.php:1388 +#: usr/local/www/vpn_openvpn_server.php:1396 +#: usr/local/www/vpn_openvpn_server.php:1404 +#: usr/local/www/vpn_openvpn_server.php:1432 +#: usr/local/www/vpn_openvpn_server.php:1440 +#: usr/local/www/vpn_openvpn_server.php:1528 +#: usr/local/www/vpn_openvpn_server.php:1536 +#: usr/local/www/vpn_openvpn_client.php:370 +#: usr/local/www/vpn_openvpn_client.php:867 +#: usr/local/www/diag_logs_settings.php:306 +#: usr/local/www/diag_logs_settings.php:310 +#: usr/local/www/diag_logs_settings.php:314 +#: usr/local/www/vpn_ipsec_mobile.php:545 +#: usr/local/www/vpn_ipsec_mobile.php:551 +#: usr/local/www/vpn_ipsec_mobile.php:557 +#: usr/local/www/vpn_ipsec_mobile.php:563 +#: usr/local/www/vpn_ipsec_mobile.php:587 +#: usr/local/www/vpn_ipsec_mobile.php:593 +#: usr/local/www/vpn_openvpn_csc.php:292 usr/local/www/vpn_openvpn_csc.php:476 +#: usr/local/www/vpn_openvpn_csc.php:484 usr/local/www/vpn_openvpn_csc.php:492 +#: usr/local/www/vpn_openvpn_csc.php:500 usr/local/www/vpn_openvpn_csc.php:528 +#: usr/local/www/vpn_openvpn_csc.php:536 usr/local/www/vpn_openvpn_csc.php:624 +#: usr/local/www/vpn_openvpn_csc.php:632 usr/local/www/status_ntpd.php:124 +#: usr/local/www/vpn_openvpn_server.php:423 +#: usr/local/www/vpn_openvpn_server.php:674 +#: usr/local/www/vpn_openvpn_server.php:1422 +#: usr/local/www/vpn_openvpn_server.php:1430 +#: usr/local/www/vpn_openvpn_server.php:1438 +#: usr/local/www/vpn_openvpn_server.php:1446 +#: usr/local/www/vpn_openvpn_server.php:1474 +#: usr/local/www/vpn_openvpn_server.php:1482 +#: usr/local/www/vpn_openvpn_server.php:1570 +#: usr/local/www/vpn_openvpn_server.php:1578 +#: usr/local/www/vpn_openvpn_client.php:378 +#: usr/local/www/vpn_openvpn_client.php:920 +#: usr/local/www/diag_logs_settings.php:306 +#: usr/local/www/diag_logs_settings.php:310 +#: usr/local/www/diag_logs_settings.php:314 +#: usr/local/www/vpn_openvpn_client.php:396 +#: usr/local/www/vpn_openvpn_client.php:939 +#: usr/local/www/vpn_openvpn_csc.php:292 usr/local/www/vpn_openvpn_csc.php:476 +#: usr/local/www/vpn_openvpn_csc.php:484 usr/local/www/vpn_openvpn_csc.php:492 +#: usr/local/www/vpn_openvpn_csc.php:500 usr/local/www/vpn_openvpn_csc.php:528 +#: usr/local/www/vpn_openvpn_csc.php:536 usr/local/www/vpn_openvpn_csc.php:624 +#: usr/local/www/vpn_openvpn_csc.php:632 usr/local/www/status_ntpd.php:124 +#: usr/local/www/diag_dns.php:207 usr/local/www/services_rfc2136_edit.php:180 +#: usr/local/www/vpn_ipsec_mobile.php:545 +#: usr/local/www/vpn_ipsec_mobile.php:551 +#: usr/local/www/vpn_ipsec_mobile.php:557 +#: usr/local/www/vpn_ipsec_mobile.php:563 +#: usr/local/www/vpn_ipsec_mobile.php:587 +#: usr/local/www/vpn_ipsec_mobile.php:593 +#: usr/local/www/vpn_openvpn_server.php:445 +#: usr/local/www/vpn_openvpn_server.php:700 +#: usr/local/www/vpn_openvpn_server.php:1474 +#: usr/local/www/vpn_openvpn_server.php:1482 +#: usr/local/www/vpn_openvpn_server.php:1490 +#: usr/local/www/vpn_openvpn_server.php:1498 +#: usr/local/www/vpn_openvpn_server.php:1526 +#: usr/local/www/vpn_openvpn_server.php:1534 +#: usr/local/www/vpn_openvpn_server.php:1622 +#: usr/local/www/vpn_openvpn_server.php:1630 +msgid "Server" +msgstr "Sunucu" + +#: usr/local/www/diag_logs_settings.php:296 +msgid "IP addresses of remote syslog servers" +msgstr "Uzak syslog sunucularının IP adresleri" + +#: usr/local/www/diag_logs_settings.php:300 +#: usr/local/www/diag_logs_settings.php:309 +#: usr/local/www/diag_logs_settings.php:329 +#: usr/local/www/diag_logs_settings.php:329 +msgid "System events" +msgstr "Sistem olayları" + +#: usr/local/www/diag_logs_settings.php:302 +#: usr/local/www/diag_logs_settings.php:311 +#: usr/local/www/diag_logs_settings.php:331 +#: usr/local/www/diag_logs_settings.php:331 +msgid "Firewall events" +msgstr "Güvenlik Duvarı olayları" + +#: usr/local/www/diag_logs_settings.php:304 +#: usr/local/www/diag_logs_settings.php:313 +#: usr/local/www/diag_logs_settings.php:333 +#: usr/local/www/diag_logs_settings.php:333 +msgid "DHCP service events" +msgstr "DHCP servisi olayları" + +#: usr/local/www/diag_logs_settings.php:306 +#: usr/local/www/diag_logs_settings.php:315 +#: usr/local/www/diag_logs_settings.php:335 +#: usr/local/www/diag_logs_settings.php:335 +msgid "Portal Auth events" +msgstr "Hizmet Portalı olayları" + +#: usr/local/www/diag_logs_settings.php:308 +#: usr/local/www/diag_logs_settings.php:317 +#: usr/local/www/diag_logs_settings.php:337 +#: usr/local/www/diag_logs_settings.php:337 +msgid "VPN (PPTP, IPsec, OpenVPN) events" +msgstr "VPN (PPTP, IPsec, OpenVPN) olayları" + +#: usr/local/www/diag_logs_settings.php:310 +#: usr/local/www/diag_logs_settings.php:319 +#: usr/local/www/diag_logs_settings.php:339 +#: usr/local/www/diag_logs_settings.php:339 +msgid "Gateway Monitor events" +msgstr "Ağ geçidi izleme olayları" + +#: usr/local/www/diag_logs_settings.php:312 +#: usr/local/www/diag_logs_settings.php:321 +#: usr/local/www/diag_logs_settings.php:341 +#: usr/local/www/diag_logs_settings.php:341 +msgid "Server Load Balancer events" +msgstr "Sunucu Yük Dengeleyici olayları" + +#: usr/local/www/diag_logs_settings.php:314 +#: usr/local/www/diag_logs_settings.php:323 +#: usr/local/www/diag_logs_settings.php:343 +#: usr/local/www/diag_logs_settings.php:343 +msgid "Wireless events" +msgstr "Kablosuz olayları" + +#: usr/local/www/diag_logs_settings.php:316 +#: usr/local/www/diag_logs_settings.php:307 +#: usr/local/www/diag_logs_settings.php:327 +#: usr/local/www/diag_logs_settings.php:327 +msgid "Everything" +msgstr "Herşey" + +#: usr/local/www/diag_logs_settings.php:327 +msgid "" +"syslog sends UDP datagrams to port 514 on the specified remote syslog " +"server. Be sure to set syslogd on the remote server to accept syslog " +"messages from" +msgstr "" + +#: usr/local/www/diag_logs_vpn.php:144 usr/local/www/diag_logs_vpn.php:143 +#: usr/local/www/diag_logs_vpn.php:143 +msgid "PPTP Logins" +msgstr "PPTP Oturumları" + +#: usr/local/www/diag_logs_vpn.php:147 usr/local/www/diag_logs_vpn.php:146 +#: usr/local/www/diag_logs_vpn.php:146 +msgid "PPTP Raw" +msgstr "Ham PPTP" + +#: usr/local/www/diag_logs_vpn.php:150 usr/local/www/diag_logs_vpn.php:149 +#: usr/local/www/diag_logs_vpn.php:149 +msgid "PPPoE Logins" +msgstr "PPPoE Oturumları" + +#: usr/local/www/diag_logs_vpn.php:153 usr/local/www/diag_logs_vpn.php:152 +#: usr/local/www/diag_logs_vpn.php:152 +msgid "PPPoE Raw" +msgstr "Ham PPPoE" + +#: usr/local/www/diag_logs_vpn.php:156 usr/local/www/diag_logs_vpn.php:155 +#: usr/local/www/diag_logs_vpn.php:155 +msgid "L2TP Logins" +msgstr "L2TP Oturumları" + +#: usr/local/www/diag_logs_vpn.php:159 usr/local/www/diag_logs_vpn.php:158 +#: usr/local/www/diag_logs_vpn.php:158 +msgid "L2TP Raw" +msgstr "Ham L2TP" + +#: usr/local/www/diag_logs_vpn.php:171 usr/local/www/diag_logs_vpn.php:170 +#: usr/local/www/diag_logs_vpn.php:170 +#, php-format +msgid "Last %1$s %2$s VPN log entries" +msgstr "VPN %1$s %2$s günlük girdileri" + +#: usr/local/www/diag_logs_vpn.php:176 +#: usr/local/www/firewall_rules_edit.php:659 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:484 +#: usr/local/www/services_unbound_acls.php:211 +#: usr/local/www/services_unbound_acls.php:318 +#: usr/local/www/load_balancer_relay_action_edit.php:483 +#: usr/local/www/firewall_rules_edit.php:692 +#: usr/local/www/diag_logs_vpn.php:175 +#: usr/local/www/load_balancer_relay_action_edit.php:481 +#: usr/local/www/firewall_rules_edit.php:695 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:481 +#: usr/local/www/diag_logs_vpn.php:175 +msgid "Action" +msgstr "Eylem" + +#: usr/local/www/diag_logs_vpn.php:177 +#: usr/local/www/diag_authentication.php:59 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/system_groupmanager.php:426 +#: usr/local/www/system_usermanager.php:89 +#: usr/local/www/system_usermanager.php:808 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/system_usermanager.php:806 +#: usr/local/www/diag_logs_vpn.php:176 +#: usr/local/www/system_groupmanager.php:429 +#: usr/local/www/system_usermanager.php:809 +#: usr/local/www/diag_authentication.php:59 +#: usr/local/www/system_groupmanager.php:429 +#: usr/local/www/vpn_l2tp_users_edit.php:38 +#: usr/local/www/diag_logs_vpn.php:176 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/system_usermanager.php:89 +#: usr/local/www/system_usermanager.php:809 +msgid "User" +msgstr "Kullanıcı" + +#: usr/local/www/diag_nanobsd.php:49 usr/local/www/fbegin.inc:212 +#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:239 +#: usr/local/www/fbegin.inc:231 usr/local/www/diag_nanobsd.php:49 +#, fuzzy +msgid "NanoBSD" +msgstr "NanoBSD" + +#: usr/local/www/diag_nanobsd.php:70 usr/local/www/diag_nanobsd.php:69 +#: usr/local/www/diag_nanobsd.php:69 +msgid "Setting slice information, please wait..." +msgstr "Dilim bilgisi yapılandıılıyor, lütfen bekleyiniz..." + +#: usr/local/www/diag_nanobsd.php:79 usr/local/www/diag_nanobsd.php:78 +#: usr/local/www/diag_nanobsd.php:78 +msgid "The boot slice has been set to" +msgstr "Yeni açılış dilimi" + +#: usr/local/www/diag_nanobsd.php:86 usr/local/www/diag_nanobsd.php:85 +#: usr/local/www/diag_nanobsd.php:85 +msgid "Duplicating slice. Please wait, this will take a moment..." +msgstr "Dilim çoğaltılıyor. Lütfen bekleyin, biraz zaman alabilir..." + +#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94 +#: usr/local/www/diag_nanobsd.php:94 +msgid "The slice has been duplicated." +msgstr "Dilim çoğaltıldı." + +#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94 +#: usr/local/www/diag_nanobsd.php:94 +msgid "" +"If you would like to boot from this newly duplicated slice please set it " +"using the bootup information area." +msgstr "" +"Eğer sistemi bu yeni dilimden açmak isterseniz açılış bilgisi bölümünden " +"ayarlayabilirsiniz." + +#: usr/local/www/diag_nanobsd.php:97 usr/local/www/diag_nanobsd.php:96 +#: usr/local/www/diag_nanobsd.php:96 +msgid "There was an error while duplicating the slice. Operation aborted." +msgstr "Dilim çoğaltılırken bir hata oluştu. İşlem iptal edildi." + +#: usr/local/www/diag_nanobsd.php:128 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2559 +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/load_balancer_virtual_server_edit.php:212 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/load_balancer_virtual_server_edit.php:244 +#: usr/local/www/system_advanced_firewall.php:231 +#: usr/local/www/system_advanced_misc.php:221 +#: usr/local/www/system_advanced_network.php:197 +#: usr/local/www/system_advanced_sysctl.php:163 +#: usr/local/www/system_routes_edit.php:374 +#: usr/local/www/system_advanced_firewall.php:245 +#: usr/local/www/system_advanced_admin.php:289 +#: usr/local/www/system_advanced_misc.php:247 +#: usr/local/www/load_balancer_virtual_server_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:220 +#: usr/local/www/load_balancer_virtual_server_edit.php:233 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/diag_nanobsd.php:127 usr/local/www/system_routes_edit.php:375 +#: usr/local/www/system_advanced_misc.php:266 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +#: usr/local/www/system_firmware_settings.php:156 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/diag_nanobsd.php:148 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/system_firmware_settings.php:165 +#: usr/local/www/system_advanced_admin.php:289 +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_routes_edit.php:375 +#: usr/local/www/system_advanced_firewall.php:274 +#: usr/local/www/system_advanced_network.php:197 +#: usr/local/www/diag_nanobsd.php:148 +#: usr/local/www/system_advanced_sysctl.php:163 +#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783 +msgid "NOTE:" +msgstr "NOT:" + +#: usr/local/www/diag_nanobsd.php:130 +#: usr/local/www/system_advanced_admin.php:291 +#: usr/local/www/system_advanced_firewall.php:233 +#: usr/local/www/system_advanced_misc.php:223 +#: usr/local/www/system_advanced_network.php:199 +#: usr/local/www/system_advanced_sysctl.php:165 +#: usr/local/www/system_advanced_firewall.php:247 +#: usr/local/www/system_advanced_misc.php:249 +#: usr/local/www/diag_nanobsd.php:129 +#: usr/local/www/system_advanced_misc.php:268 +#: usr/local/www/diag_nanobsd.php:150 +#: usr/local/www/system_advanced_admin.php:291 +#: usr/local/www/system_advanced_misc.php:272 +#: usr/local/www/system_advanced_firewall.php:276 +#: usr/local/www/system_advanced_network.php:199 +#: usr/local/www/diag_nanobsd.php:150 +#: usr/local/www/system_advanced_sysctl.php:165 +msgid "The options on this page are intended for use by advanced users only." +msgstr "Bu sayfadaki seçenekler sadece ileri düzey kullanıcılar içindir." + +#: usr/local/www/diag_nanobsd.php:136 usr/local/www/diag_nanobsd.php:135 +#: usr/local/www/diag_nanobsd.php:156 usr/local/www/diag_nanobsd.php:156 +msgid "Bootup information" +msgstr "Açılış bilgisi" + +#: usr/local/www/diag_nanobsd.php:139 usr/local/www/diag_nanobsd.php:138 +#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:159 +msgid "NanoBSD Image size" +msgstr "NanoBSD imaj boyutu" + +#: usr/local/www/diag_nanobsd.php:145 usr/local/www/diag_nanobsd.php:144 +#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:165 +msgid "Bootup" +msgstr "Açılış" + +#: usr/local/www/diag_nanobsd.php:148 usr/local/www/diag_nanobsd.php:147 +#: usr/local/www/diag_nanobsd.php:168 usr/local/www/diag_nanobsd.php:168 +msgid "Bootup slice is currently:" +msgstr "Güncel açılış dilimi:" + +#: usr/local/www/diag_nanobsd.php:149 usr/local/www/diag_nanobsd.php:148 +#: usr/local/www/diag_nanobsd.php:169 usr/local/www/diag_nanobsd.php:169 +msgid "This will switch the bootup slice to the alternate slice." +msgstr "Bu işlem açılış dilimini diğer dilim olarak değiştirir." + +#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:158 +#: usr/local/www/diag_nanobsd.php:217 usr/local/www/diag_nanobsd.php:217 +msgid "Duplicate bootup slice to alternate" +msgstr "Açılış dilimini alternatif dilime çoğalt" + +#: usr/local/www/diag_nanobsd.php:162 usr/local/www/diag_nanobsd.php:161 +#: usr/local/www/diag_nanobsd.php:220 usr/local/www/diag_nanobsd.php:220 +msgid "Duplicate bootup slice" +msgstr "Açılış dilimini çoğalt" + +#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:164 +#: usr/local/www/diag_nanobsd.php:223 usr/local/www/diag_nanobsd.php:223 +msgid "Destination slice:" +msgstr "Hedef dilim:" + +#: usr/local/www/diag_nanobsd.php:172 usr/local/www/diag_nanobsd.php:171 +#: usr/local/www/diag_nanobsd.php:230 usr/local/www/diag_nanobsd.php:230 +msgid "" +"This will duplicate the bootup slice to the alternate slice. Use this if " +"you would like to duplicate the known good working boot partition to the " +"alternate." +msgstr "" +"Bu işlem açılış dilimini alternatif dilime çoğaltır. Bu seçeneği çalıştığını " +"bildiğiniz açılış bölümünü alternatif bölüme çoğaltmak için kullanın." + +#: usr/local/www/diag_nanobsd.php:182 usr/local/www/diag_nanobsd.php:181 +#: usr/local/www/diag_nanobsd.php:240 usr/local/www/diag_nanobsd.php:240 +msgid "Periodic Data Backup" +msgstr "Periyodik Veri Yedekleme" + +#: usr/local/www/diag_nanobsd.php:185 usr/local/www/diag_nanobsd.php:184 +#: usr/local/www/diag_nanobsd.php:243 usr/local/www/diag_nanobsd.php:243 +msgid "RRD Backup" +msgstr "RRD Yedekleme" + +#: usr/local/www/diag_nanobsd.php:188 usr/local/www/diag_nanobsd.php:205 +#: usr/local/www/diag_nanobsd.php:187 usr/local/www/diag_nanobsd.php:204 +#: usr/local/www/diag_nanobsd.php:246 usr/local/www/diag_nanobsd.php:263 +#: usr/local/www/diag_nanobsd.php:246 usr/local/www/diag_nanobsd.php:263 +msgid "Frequency:" +msgstr "Sıklık:" + +#: usr/local/www/diag_nanobsd.php:190 usr/local/www/diag_nanobsd.php:207 +#: usr/local/www/system_firmware.php:133 +#: usr/local/www/services_dyndns_edit.php:152 +#: usr/local/www/vpn_ipsec_phase1.php:812 +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/system_advanced_firewall.php:410 +#: usr/local/www/firewall_nat_edit.php:796 +#: usr/local/www/vpn_ipsec_phase1.php:825 usr/local/www/diag_nanobsd.php:189 +#: usr/local/www/diag_nanobsd.php:206 usr/local/www/system_firmware.php:140 +#: usr/local/www/firewall_nat_edit.php:795 +#: usr/local/www/vpn_ipsec_phase1.php:822 usr/local/www/diag_nanobsd.php:248 +#: usr/local/www/diag_nanobsd.php:265 usr/local/www/system_firmware.php:135 +#: usr/local/www/services_dyndns_edit.php:214 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/system_advanced_firewall.php:472 +#: usr/local/www/vpn_ipsec_phase1.php:843 usr/local/www/diag_nanobsd.php:248 +#: usr/local/www/diag_nanobsd.php:265 +msgid "Disable" +msgstr "Kapat" + +#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:209 +#: usr/local/www/diag_nanobsd.php:191 usr/local/www/diag_nanobsd.php:208 +#: usr/local/www/diag_nanobsd.php:250 usr/local/www/diag_nanobsd.php:267 +#: usr/local/www/diag_nanobsd.php:250 usr/local/www/diag_nanobsd.php:267 +msgid "hour" +msgstr "saat" + +#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:195 +#: usr/local/www/diag_nanobsd.php:254 usr/local/www/diag_nanobsd.php:254 +msgid "" +"This will periodically backup the RRD data so it can be restored " +"automatically on the next boot. Keep in mind that the more frequent the " +"backup, the more writes will happen to your media." +msgstr "" +"Bu işlem RRD verisini belirli aralıklarla yedekler, böylece bir sonraki " +"sistem açılışında yeniden yüklenebilir. Unutulmamalıdır ki yedekleme ne " +"kadar sık olursa diske yazım o kadar sık gerçekleşir." + +#: usr/local/www/diag_nanobsd.php:202 usr/local/www/diag_nanobsd.php:201 +#: usr/local/www/diag_nanobsd.php:260 usr/local/www/diag_nanobsd.php:260 +msgid "DHCP Leases Backup" +msgstr "DHCP Kiraları Yedeği" + +#: usr/local/www/diag_nanobsd.php:213 usr/local/www/diag_nanobsd.php:212 +#: usr/local/www/diag_nanobsd.php:271 usr/local/www/diag_nanobsd.php:271 +msgid "" +"This will periodically backup the DHCP leases data so it can be restored " +"automatically on the next boot. Keep in mind that the more frequent the " +"backup, the more writes will happen to your media." +msgstr "" +"Bu işlem DHCP kiraları verisini belirli aralıklarla yedekler, böylece bir " +"sonraki sistem açılışında yeniden yüklenebilir. Unutulmamalıdır ki yedekleme " +"ne kadar sık olursa diske yazım o kadar sık gerçekleşir." + +#: usr/local/www/diag_nanobsd.php:226 usr/local/www/diag_nanobsd.php:225 +#: usr/local/www/diag_nanobsd.php:284 usr/local/www/diag_nanobsd.php:284 +msgid "View upgrade log" +msgstr "Yükseltme günlüğünü görüntüle" + +#: usr/local/www/diag_nanobsd.php:229 usr/local/www/diag_nanobsd.php:228 +#: usr/local/www/diag_nanobsd.php:287 usr/local/www/diag_nanobsd.php:287 +msgid "View previous upgrade log" +msgstr "Önceki yükseltme günlüğünü göster" + +#: usr/local/www/diag_packet_capture.php:38 +#: usr/local/www/diag_packet_capture.php:225 +#: usr/local/www/diag_packet_capture.php:246 +#: usr/local/www/diag_packet_capture.php:40 +#: usr/local/www/diag_packet_capture.php:293 +#: usr/local/www/diag_packet_capture.php:40 +#: usr/local/www/diag_packet_capture.php:293 +msgid "Download Capture" +msgstr "Yakalanan Paketleri İndir" + +#: usr/local/www/diag_packet_capture.php:41 usr/local/www/fbegin.inc:210 +#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:237 +#: usr/local/www/diag_packet_capture.php:43 +#: usr/local/www/diag_packet_capture.php:43 usr/local/www/fbegin.inc:229 +msgid "Packet Capture" +msgstr "Paket Yakalama" + +#: usr/local/www/diag_packet_capture.php:71 +#: usr/local/www/diag_packet_capture.php:220 +#: usr/local/www/diag_packet_capture.php:265 +#: usr/local/www/status_dhcp_leases.php:321 +#: usr/local/www/status_dhcpv6_leases.php:363 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/status_dhcpv6_leases.php:484 +#: usr/local/www/status_dhcp_leases.php:342 +#: usr/local/www/diag_packet_capture.php:75 +#: usr/local/www/diag_packet_capture.php:240 +#: usr/local/www/diag_packet_capture.php:294 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:485 +#: usr/local/www/status_dhcp_leases.php:344 +#: usr/local/www/diag_packet_capture.php:129 +#: usr/local/www/diag_packet_capture.php:287 +#: usr/local/www/diag_packet_capture.php:341 +#: usr/local/www/status_dhcpv6_leases.php:411 +#: usr/local/www/status_dhcpv6_leases.php:488 +#: usr/local/www/diag_packet_capture.php:129 +#: usr/local/www/diag_packet_capture.php:287 +#: usr/local/www/diag_packet_capture.php:341 +#: usr/local/www/status_dhcp_leases.php:344 +msgid "Start" +msgstr "Başlat" + +#: usr/local/www/diag_packet_capture.php:78 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:222 +#: usr/local/www/diag_packet_capture.php:82 +#: usr/local/www/diag_packet_capture.php:239 +#: usr/local/www/diag_packet_capture.php:242 +#: usr/local/www/diag_packet_capture.php:136 +#: usr/local/www/diag_packet_capture.php:286 +#: usr/local/www/diag_packet_capture.php:289 +#: usr/local/www/diag_packet_capture.php:136 +#: usr/local/www/diag_packet_capture.php:286 +#: usr/local/www/diag_packet_capture.php:289 +msgid "Stop" +msgstr "Durdur" + +#: usr/local/www/diag_packet_capture.php:116 +#: usr/local/www/diag_packet_capture.php:120 +#: usr/local/www/diag_packet_capture.php:178 +#: usr/local/www/diag_packet_capture.php:178 +msgid "Packet capture" +msgstr "Paket yakalama" + +#: usr/local/www/diag_packet_capture.php:141 +#: usr/local/www/diag_packet_capture.php:145 +#: usr/local/www/diag_packet_capture.php:192 +#: usr/local/www/diag_packet_capture.php:192 +msgid "Select the interface on which to capture traffic." +msgstr "Üzerinden geçen trafiğin kaydedileceği arabirimi seçiniz." + +#: usr/local/www/diag_packet_capture.php:145 +#: usr/local/www/system_gateways_edit.php:376 +#: usr/local/www/diag_packet_capture.php:149 +#: usr/local/www/system_gateways_edit.php:482 +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/system_gateways_edit.php:482 +#: usr/local/www/diag_packet_capture.php:196 +msgid "Address Family" +msgstr "Adres Ailesi" + +#: usr/local/www/diag_packet_capture.php:152 +#: usr/local/www/diag_packet_capture.php:156 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:203 +msgid "" +"Select the type of traffic to be captured, either Any, IPv4 only or IPv6 " +"only." +msgstr "Yakalanacak trafik türünü (Tümü, sadece IPv4 veya sadece IPv6) seçin." + +#: usr/local/www/diag_packet_capture.php:156 +#: usr/local/www/diag_packet_capture.php:176 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/diag_packet_capture.php:223 +msgid "Host Address" +msgstr "Sunucu Adresi" + +#: usr/local/www/diag_packet_capture.php:159 +#: usr/local/www/diag_packet_capture.php:179 +#: usr/local/www/diag_packet_capture.php:226 +#: usr/local/www/diag_packet_capture.php:226 +msgid "" +"This value is either the Source or Destination IP address or subnet in CIDR " +"notation. The packet capture will look for this address in either field." +msgstr "" +"Bu değer kaynak veya hedef IP adresi veya CIDR biçiminde alt ağ olabilir. " +"Paket yakalama işlemi iki alanda da girdiğiniz adresi arayacaktır." + +#: usr/local/www/diag_packet_capture.php:160 +#: usr/local/www/diag_packet_capture.php:180 +#: usr/local/www/diag_packet_capture.php:227 +#: usr/local/www/diag_packet_capture.php:227 +msgid "" +"This value can be a domain name or IP address, or subnet in CIDR notation." +msgstr "Bu değer sunucu adı, IP adresi veya CIDR biçiminde alt ağ olabilir." + +#: usr/local/www/diag_packet_capture.php:161 +#: usr/local/www/diag_packet_capture.php:181 +#: usr/local/www/diag_packet_capture.php:228 +#: usr/local/www/diag_packet_capture.php:228 +msgid "" +"If you leave this field blank, all packets on the specified interface will " +"be captured." +msgstr "" +"Bu alanı boş bırakırsanız belirtilen arabirimden geçen tüm paketler " +"kaydedilir." + +#: usr/local/www/diag_packet_capture.php:168 +#: usr/local/www/diag_packet_capture.php:188 +#: usr/local/www/diag_packet_capture.php:235 +#: usr/local/www/diag_packet_capture.php:235 +msgid "" +"The port can be either the source or destination port. The packet capture " +"will look for this port in either field." +msgstr "" +"Bu değer kaynak veya hedef port olabilir. Kaynak veya hedef portu bu değerde " +"olan paketler kaydedilir." + +#: usr/local/www/diag_packet_capture.php:169 +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/diag_packet_capture.php:236 +#: usr/local/www/diag_packet_capture.php:236 +msgid "Leave blank if you do not want to filter by port." +msgstr "Port numarasına göre filtrelemek istemiyorsanız bu alanı boş bırakınız." + +#: usr/local/www/diag_packet_capture.php:173 +#: usr/local/www/diag_packet_capture.php:193 +#: usr/local/www/diag_packet_capture.php:240 +#: usr/local/www/diag_packet_capture.php:240 +msgid "Packet Length" +msgstr "Paket Uzunluğu" + +#: usr/local/www/diag_packet_capture.php:176 +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/diag_packet_capture.php:243 +#: usr/local/www/diag_packet_capture.php:243 +msgid "" +"The Packet length is the number of bytes of each packet that will be " +"captured. Default value is 0, which will capture the entire frame regardless " +"of its size." +msgstr "" +"Bu alana her paketin ilk kaç baytının kaydedileceğini girebilirsiniz. " +"Öntanımlı değer olan 0 girilirse boyutuna bakılmaksızın tüm çerçeve " +"kaydedilir." + +#: usr/local/www/diag_packet_capture.php:180 usr/local/www/diag_ping.php:55 +#: usr/local/www/diag_ping.php:108 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/services_captiveportal_vouchers_edit.php:189 +#: usr/local/www/diag_packet_capture.php:200 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_captiveportal_vouchers_edit.php:187 +#: usr/local/www/diag_packet_capture.php:247 +#: usr/local/www/diag_packet_capture.php:247 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_captiveportal_vouchers_edit.php:187 +#: usr/local/www/diag_ping.php:55 usr/local/www/diag_ping.php:108 +msgid "Count" +msgstr "Adet" + +#: usr/local/www/diag_packet_capture.php:183 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:250 +#: usr/local/www/diag_packet_capture.php:250 +msgid "" +"This is the number of packets the packet capture will grab. Default value is " +"100." +msgstr "" +"Paket yakalamada kaç paketin kaydedileceğini bu bölüme girebilirsiniz. " +"Öntanımlı değeri 100'dür." + +#: usr/local/www/diag_packet_capture.php:183 +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:250 +#: usr/local/www/diag_packet_capture.php:250 +msgid "Enter 0 (zero) for no count limit." +msgstr "Adet sınırını kaldırmak için 0 (sıfır) giriniz." + +#: usr/local/www/diag_packet_capture.php:186 +#: usr/local/www/diag_packet_capture.php:206 +#: usr/local/www/diag_packet_capture.php:253 +#: usr/local/www/diag_packet_capture.php:253 +msgid "Level of Detail" +msgstr "Detay Seviyesi" + +#: usr/local/www/diag_packet_capture.php:189 +#: usr/local/www/diag_packet_capture.php:209 +#: usr/local/www/diag_packet_capture.php:256 +#: usr/local/www/diag_packet_capture.php:256 +#, fuzzy +msgid "Normal" +msgstr "Normal" + +#: usr/local/www/diag_packet_capture.php:190 +#: usr/local/www/diag_packet_capture.php:210 +#: usr/local/www/diag_packet_capture.php:257 +#: usr/local/www/diag_packet_capture.php:257 +msgid "Medium" +msgstr "Orta" + +#: usr/local/www/diag_packet_capture.php:191 +#: usr/local/www/diag_packet_capture.php:211 +#: usr/local/www/diag_packet_capture.php:258 +#: usr/local/www/diag_packet_capture.php:258 +msgid "High" +msgstr "Yüksek" + +#: usr/local/www/diag_packet_capture.php:192 +#: usr/local/www/diag_packet_capture.php:212 +#: usr/local/www/diag_packet_capture.php:259 +#: usr/local/www/diag_packet_capture.php:259 +msgid "Full" +msgstr "Tam" + +#: usr/local/www/diag_packet_capture.php:194 +#: usr/local/www/diag_packet_capture.php:214 +#: usr/local/www/diag_packet_capture.php:261 +#: usr/local/www/diag_packet_capture.php:261 +msgid "" +"This is the level of detail that will be displayed after hitting 'Stop' when " +"the packets have been captured." +msgstr "" +"Paket yakalama bittiğinde veya [Dur]a tıklandığında yakalanan paketlerin ne " +"derece detaylı görüntüleneceğini belirler." + +#: usr/local/www/diag_packet_capture.php:196 +#: usr/local/www/diag_packet_capture.php:216 +#: usr/local/www/diag_packet_capture.php:263 +#: usr/local/www/diag_packet_capture.php:263 +msgid "" +"This option does not affect the level of detail when downloading the packet " +"capture." +msgstr "" +"Bu seçenek paket kayıtlarının indirilmesi sırasındaki detay deviyesini " +"etkilemez." + +#: usr/local/www/diag_packet_capture.php:199 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:266 +#: usr/local/www/diag_packet_capture.php:266 +msgid "Reverse DNS Lookup" +msgstr "Ters DNS Sorgusu" + +#: usr/local/www/diag_packet_capture.php:202 +#: usr/local/www/diag_packet_capture.php:222 +#: usr/local/www/diag_packet_capture.php:269 +#: usr/local/www/diag_packet_capture.php:269 +msgid "" +"This check box will cause the packet capture to perform a reverse DNS lookup " +"associated with all IP addresses." +msgstr "" +"Bu seçenek paket yakalama işleminin tüm IP adreslerine ters DNS sorgusu " +"uygulanmasını sağlar." + +#: usr/local/www/diag_packet_capture.php:203 +#: usr/local/www/diag_packet_capture.php:223 +#: usr/local/www/diag_packet_capture.php:270 +#: usr/local/www/diag_packet_capture.php:270 +msgid "This option can cause delays for large packet captures." +msgstr "" +"Bu seçenek paket yakalama boyutu büyük olduğunda gecikmelere sebep olabilir." + +#: usr/local/www/diag_packet_capture.php:226 +#: usr/local/www/diag_packet_capture.php:247 +#: usr/local/www/diag_packet_capture.php:294 +#: usr/local/www/diag_packet_capture.php:294 +msgid "The packet capture file was last updated:" +msgstr "Paket yakalama dosyasının son güncellenme zamanı:" + +#: usr/local/www/diag_packet_capture.php:239 +#: usr/local/www/diag_packet_capture.php:267 +#: usr/local/www/diag_packet_capture.php:260 +#: usr/local/www/diag_packet_capture.php:296 +#: usr/local/www/diag_packet_capture.php:307 +#: usr/local/www/diag_packet_capture.php:343 +#: usr/local/www/diag_packet_capture.php:307 +#: usr/local/www/diag_packet_capture.php:343 +msgid "Packet Capture is running." +msgstr "Paket Yakalama çalışıyor." + +#: usr/local/www/diag_packet_capture.php:272 +#: usr/local/www/diag_packet_capture.php:301 +#: usr/local/www/diag_packet_capture.php:347 +#: usr/local/www/diag_packet_capture.php:347 +msgid "Packet Capture stopped." +msgstr "Paket Yakalama durdu." + +#: usr/local/www/diag_packet_capture.php:272 +#: usr/local/www/diag_packet_capture.php:301 +#: usr/local/www/diag_packet_capture.php:347 +#: usr/local/www/diag_packet_capture.php:347 +msgid "Packets Captured:" +msgstr "Yakalanan Paket Sayısı:" + +#: usr/local/www/crash_reporter.php:68 usr/local/www/crash_reporter.php:68 +msgid "Unfortunately we have detected a programming bug." +msgstr "Ne yazıkki bir programlama hatası algılandı." + +#: usr/local/www/crash_reporter.php:69 usr/local/www/crash_reporter.php:69 +msgid "" +"Would you like to submit the programming debug logs to the pfSense " +"developers for inspection?" +msgstr "" +"İnceleme için pfSense geliştiricilerine programlama hata ayıklama kodlarını " +"göndermek istermisiniz?" + +#: usr/local/www/crash_reporter.php:71 usr/local/www/crash_reporter.php:71 +msgid "" +"Please double check the contents to ensure you are comfortable sending this " +"information before clicking Yes." +msgstr "" +"Bu bilgilerin gönderilmesinde herhangi bir sakınca olmadığından emin olmak " +"için içeriği inceleyip ondan sonra Evet'e tıklayınız." + +#: usr/local/www/crash_reporter.php:73 usr/local/www/crash_reporter.php:73 +msgid "Contents of crash reports" +msgstr "Problem raporu içeriği" + +#: usr/local/www/crash_reporter.php:76 usr/local/www/crash_reporter.php:76 +msgid " - Submit this to the developers for inspection" +msgstr " - İncelenmek üzere geliştiricilere gönder" + +#: usr/local/www/crash_reporter.php:77 usr/local/www/crash_reporter.php:77 +msgid " - Just delete the crash report and take me back to the Dashboard" +msgstr "- Hata raporunu temizle ve anasayfaya geri dön" + +#: usr/local/www/crash_reporter.php:82 usr/local/www/crash_reporter.php:82 +msgid "Crash reporter" +msgstr "Hata raporlayıcısı" + +#: usr/local/www/crash_reporter.php:101 usr/local/www/crash_reporter.php:103 +#: usr/local/www/crash_reporter.php:103 +msgid "Processing..." +msgstr "İşleniyor..." + +#: usr/local/www/crash_reporter.php:108 usr/local/www/crash_reporter.php:110 +#: usr/local/www/crash_reporter.php:112 +msgid "Uploading..." +msgstr "Yükleniyor..." + +#: usr/local/www/crash_reporter.php:116 +#: usr/local/www/services_captiveportal_zones_edit.php:115 +#: usr/local/www/crash_reporter.php:120 +#: usr/local/www/services_captiveportal_zones_edit.php:117 +#: usr/local/www/services_captiveportal_zones_edit.php:115 +#: usr/local/www/crash_reporter.php:122 +msgid "Continue" +msgstr "Devam et" + +#: usr/local/www/crash_reporter.php:116 usr/local/www/crash_reporter.php:120 +#: usr/local/www/crash_reporter.php:122 +msgid " and delete crash report files from local disk." +msgstr " ve hata raporu dosyalarını diskten sil." + +#: usr/local/www/diag_authentication.php:52 +#: usr/local/www/diag_authentication.php:52 +msgid "is not a valid authentication server" +msgstr "geçerli bir kimlik doğrulama sunucusu değil" + +#: usr/local/www/diag_authentication.php:55 +#: usr/local/www/diag_authentication.php:55 +msgid "A username and password must be specified." +msgstr "Bir kullanıcı adı ve parola tanımlanmalıdır." + +#: usr/local/www/diag_authentication.php:59 +#: usr/local/www/diag_authentication.php:59 +msgid "authenticated successfully." +msgstr "kimliği başarıyla doğrulandı." + +#: usr/local/www/diag_authentication.php:61 +#: usr/local/www/diag_authentication.php:61 +msgid "This user is a member of these groups" +msgstr "Bu kullanıcı belirtilen belirtilen üyesidir" + +#: usr/local/www/diag_authentication.php:65 +#: usr/local/www/diag_authentication.php:65 +msgid "Authentication failed." +msgstr "Kimlik doğrulama başarısız." + +#: usr/local/www/diag_authentication.php:69 usr/local/www/interfaces.php:2325 +#: usr/local/www/services_captiveportal.php:578 +#: usr/local/www/services_captiveportal.php:893 usr/local/www/fbegin.inc:189 +#: usr/local/www/fbegin.inc:207 usr/local/www/services_captiveportal.php:583 +#: usr/local/www/services_captiveportal.php:938 +#: usr/local/www/interfaces.php:2505 usr/local/www/fbegin.inc:215 +#: usr/local/www/services_captiveportal.php:581 +#: usr/local/www/services_captiveportal.php:934 +#: usr/local/www/interfaces.php:2493 usr/local/www/diag_authentication.php:69 +#: usr/local/www/services_captiveportal.php:575 +#: usr/local/www/services_captiveportal.php:936 usr/local/www/fbegin.inc:206 +#: usr/local/www/interfaces.php:2523 +msgid "Authentication" +msgstr "Kimlik doğrulama" + +#: usr/local/www/diag_authentication.php:90 +#: usr/local/www/system_authservers.php:82 +#: usr/local/www/system_usermanager_settings.php:140 +#: usr/local/www/diag_authentication.php:91 +#: usr/local/www/system_authservers.php:83 +#: usr/local/www/diag_authentication.php:91 +#: usr/local/www/system_authservers.php:83 +#: usr/local/www/system_usermanager_settings.php:140 +msgid "Authentication Server" +msgstr "Kimlik Doğrulama Sunucusu" + +#: usr/local/www/diag_authentication.php:106 +#: usr/local/www/status_captiveportal.php:162 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/interfaces.php:1724 usr/local/www/interfaces.php:1789 +#: usr/local/www/interfaces.php:1895 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:510 +#: usr/local/www/vpn_pptp_users.php:98 +#: usr/local/www/vpn_pptp_users_edit.php:76 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:146 +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:213 +#: usr/local/www/system_usermanager.php:177 +#: usr/local/www/system_usermanager.php:182 +#: usr/local/www/system_usermanager.php:187 +#: usr/local/www/system_usermanager.php:475 +#: usr/local/www/system_usermanager.php:787 +#: usr/local/www/vpn_l2tp_users.php:101 +#: usr/local/www/vpn_l2tp_users_edit.php:78 +#: usr/local/www/vpn_l2tp_users_edit.php:81 +#: usr/local/www/vpn_l2tp_users_edit.php:154 +#: usr/local/www/vpn_openvpn_client.php:531 +#: usr/local/www/vpn_pppoe_edit.php:536 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:95 +#: usr/local/www/services_dyndns_edit.php:99 +#: usr/local/www/services_dyndns_edit.php:296 +#: usr/local/www/system_usermanager.php:473 +#: usr/local/www/system_usermanager.php:785 +#: usr/local/www/firewall_aliases_edit.php:473 +#: usr/local/www/interfaces.php:1902 usr/local/www/interfaces.php:1967 +#: usr/local/www/interfaces.php:2073 usr/local/www/vpn_openvpn_client.php:536 +#: usr/local/www/vpn_pppoe_edit.php:537 +#: usr/local/www/system_usermanager.php:786 +#: usr/local/www/interfaces_ppps_edit.php:511 +#: usr/local/www/firewall_aliases_edit.php:475 +#: usr/local/www/vpn_l2tp_users.php:102 +#: usr/local/www/diag_authentication.php:107 +#: usr/local/www/vpn_pptp_users_edit.php:147 usr/local/www/interfaces.php:1890 +#: usr/local/www/interfaces.php:1955 usr/local/www/interfaces.php:2061 +#: usr/local/www/vpn_openvpn_client.php:554 +#: usr/local/www/vpn_l2tp_users_edit.php:79 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:155 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97 +#: usr/local/www/vpn_pptp_users.php:99 +#: usr/local/www/diag_authentication.php:107 +#: usr/local/www/vpn_pptp_users.php:99 +#: usr/local/www/vpn_openvpn_client.php:573 +#: usr/local/www/services_dyndns_edit.php:99 +#: usr/local/www/services_dyndns_edit.php:300 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:517 +#: usr/local/www/vpn_pppoe_edit.php:540 usr/local/www/vpn_l2tp_users.php:102 +#: usr/local/www/status_captiveportal.php:148 +#: usr/local/www/firewall_aliases_edit.php:475 +#: usr/local/www/vpn_l2tp_users_edit.php:79 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:155 +#: usr/local/www/vpn_pptp_users_edit.php:76 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:147 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:95 +#: usr/local/www/system_usermanager.php:177 +#: usr/local/www/system_usermanager.php:182 +#: usr/local/www/system_usermanager.php:187 +#: usr/local/www/system_usermanager.php:473 +#: usr/local/www/system_usermanager.php:786 usr/local/www/interfaces.php:1914 +#: usr/local/www/interfaces.php:1982 usr/local/www/interfaces.php:2091 +msgid "Username" +msgstr "Kullanıcı adı" + +#: usr/local/www/diag_authentication.php:112 usr/local/www/interfaces.php:1730 +#: usr/local/www/interfaces.php:1795 usr/local/www/interfaces.php:1901 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:516 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:151 +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:220 +#: usr/local/www/system_advanced_notifications.php:192 +#: usr/local/www/system_usermanager.php:183 +#: usr/local/www/system_usermanager.php:188 +#: usr/local/www/system_usermanager.php:482 +#: usr/local/www/system_usermanager_passwordmg.php:50 +#: usr/local/www/system_usermanager_passwordmg.php:98 +#: usr/local/www/system_usermanager_passwordmg.php:101 +#: usr/local/www/vpn_l2tp_users_edit.php:81 +#: usr/local/www/vpn_l2tp_users_edit.php:159 +#: usr/local/www/vpn_openvpn_client.php:541 +#: usr/local/www/vpn_pppoe_edit.php:537 +#: usr/local/www/services_dyndns_edit.php:97 +#: usr/local/www/services_dyndns_edit.php:305 +#: usr/local/www/system_usermanager.php:480 +#: usr/local/www/system_advanced_notifications.php:201 +#: usr/local/www/interfaces.php:1908 usr/local/www/interfaces.php:1973 +#: usr/local/www/interfaces.php:2079 usr/local/www/vpn_openvpn_client.php:546 +#: usr/local/www/vpn_pppoe_edit.php:538 +#: usr/local/www/interfaces_ppps_edit.php:517 +#: usr/local/www/system_usermanager_passwordmg.php:99 +#: usr/local/www/system_usermanager_passwordmg.php:102 +#: usr/local/www/diag_authentication.php:113 +#: usr/local/www/vpn_pptp_users_edit.php:152 usr/local/www/interfaces.php:1896 +#: usr/local/www/interfaces.php:1961 usr/local/www/interfaces.php:2067 +#: usr/local/www/vpn_openvpn_client.php:564 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:160 +#: usr/local/www/diag_authentication.php:113 +#: usr/local/www/vpn_openvpn_client.php:583 +#: usr/local/www/services_dyndns_edit.php:97 +#: usr/local/www/services_dyndns_edit.php:309 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces_ppps_edit.php:523 +#: usr/local/www/vpn_pppoe_edit.php:541 +#: usr/local/www/system_usermanager_passwordmg.php:50 +#: usr/local/www/system_usermanager_passwordmg.php:104 +#: usr/local/www/system_usermanager_passwordmg.php:107 +#: usr/local/www/vpn_l2tp_users_edit.php:82 +#: usr/local/www/vpn_l2tp_users_edit.php:160 +#: usr/local/www/system_advanced_notifications.php:201 +#: usr/local/www/vpn_pptp_users_edit.php:79 +#: usr/local/www/vpn_pptp_users_edit.php:152 +#: usr/local/www/system_usermanager.php:183 +#: usr/local/www/system_usermanager.php:188 +#: usr/local/www/system_usermanager.php:480 usr/local/www/interfaces.php:1920 +#: usr/local/www/interfaces.php:1988 usr/local/www/interfaces.php:2097 +msgid "Password" +msgstr "Parola" + +#: usr/local/www/diag_authentication.php:120 usr/local/www/diag_smart.php:346 +#: usr/local/www/diag_authentication.php:121 +#: usr/local/www/diag_authentication.php:121 +#: usr/local/www/diag_testport.php:179 usr/local/www/diag_smart.php:367 +#, fuzzy +msgid "Test" +msgstr "Test" + +#: usr/local/www/services_dyndns.php:76 usr/local/www/services_dyndns.php:85 +#: usr/local/www/services_dyndns.php:64 +msgid "Dynamic DNS clients" +msgstr "Dinamik DNS istemcileri" + +#: usr/local/www/services_dyndns.php:89 usr/local/www/services_rfc2136.php:68 +#: usr/local/www/services_dyndns.php:98 usr/local/www/services_rfc2136.php:68 +#: usr/local/www/services_dyndns.php:78 +#, fuzzy +msgid "DynDns" +msgstr "DynDns" + +#: usr/local/www/services_dyndns.php:90 usr/local/www/services_rfc2136.php:69 +#: usr/local/www/services_dyndns.php:99 usr/local/www/services_rfc2136.php:69 +#: usr/local/www/services_dyndns.php:79 +msgid "RFC 2136" +msgstr "RFC 2136" + +#: usr/local/www/services_dyndns.php:100 usr/local/www/status_services.php:244 +#: usr/local/www/services_dyndns.php:109 usr/local/www/status_services.php:240 +#: usr/local/www/status_services.php:238 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:52 +#: usr/local/www/services_dyndns.php:90 +msgid "Service" +msgstr "Servis" + +#: usr/local/www/services_dyndns.php:101 usr/local/www/interfaces.php:1612 +#: usr/local/www/system.php:113 usr/local/www/system.php:254 +#: usr/local/www/services_dhcp.php:892 +#: usr/local/www/services_dhcp_edit.php:228 +#: usr/local/www/services_captiveportal_hostname.php:122 +#: usr/local/www/services_captiveportal_hostname_edit.php:176 +#: usr/local/www/services_captiveportal_hostname_edit.php:180 +#: usr/local/www/diag_arp.php:315 usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:184 +#: usr/local/www/services_rfc2136.php:79 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:146 +#: usr/local/www/status_dhcp_leases.php:320 usr/local/www/diag_ndp.php:131 +#: usr/local/www/services_dhcpv6.php:805 +#: usr/local/www/services_dhcpv6_edit.php:205 +#: usr/local/www/services_dyndns_edit.php:95 +#: usr/local/www/services_dyndns_edit.php:267 +#: usr/local/www/services_dhcpv6_edit.php:208 +#: usr/local/www/status_dhcp_leases.php:341 +#: usr/local/www/services_dyndns.php:110 usr/local/www/services_dhcp.php:930 +#: usr/local/www/services_dhcp_edit.php:231 usr/local/www/interfaces.php:1690 +#: usr/local/www/system.php:114 usr/local/www/system.php:265 +#: usr/local/www/services_dhcpv6.php:900 +#: usr/local/www/services_dhcpv6_edit.php:210 +#: usr/local/www/services_captiveportal_hostname_edit.php:174 +#: usr/local/www/services_captiveportal_hostname_edit.php:178 +#: usr/local/www/services_captiveportal_hostname.php:120 +#: usr/local/www/status_dhcp_leases.php:343 +#: usr/local/www/services_dhcp.php:1134 +#: usr/local/www/services_dhcp_edit.php:233 usr/local/www/interfaces.php:1678 +#: usr/local/www/system.php:107 usr/local/www/system.php:258 +#: usr/local/www/services_dhcpv6.php:831 usr/local/www/services_rfc2136.php:80 +#: usr/local/www/diag_ndp.php:131 usr/local/www/diag_arp.php:315 +#: usr/local/www/services_dhcpv6_edit.php:213 +#: usr/local/www/services_dyndns_edit.php:95 +#: usr/local/www/services_dyndns_edit.php:271 usr/local/www/system.php:107 +#: usr/local/www/system.php:258 +#: usr/local/www/services_captiveportal_hostname_edit.php:176 +#: usr/local/www/services_captiveportal_hostname_edit.php:180 +#: usr/local/www/services_dhcp_edit.php:361 +#: usr/local/www/services_dhcp.php:1153 +#: usr/local/www/services_captiveportal_hostname.php:120 +#: usr/local/www/services_dhcpv6.php:852 +#: usr/local/www/status_dhcp_leases.php:343 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:53 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:146 +#: usr/local/www/services_dyndns.php:91 usr/local/www/interfaces.php:1690 +msgid "Hostname" +msgstr "Host adı" + +#: usr/local/www/services_dyndns.php:102 usr/local/www/services_dyndns.php:111 +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:54 +#: usr/local/www/services_dyndns.php:92 +msgid "Cached IP" +msgstr "Önbelleklenmiş IP" + +#: usr/local/www/services_dyndns.php:151 usr/local/www/services_wol.php:188 +#: usr/local/www/firewall_virtual_ip.php:221 +#: usr/local/www/system_advanced_sysctl.php:199 +#: usr/local/www/services_captiveportal_zones.php:89 +#: usr/local/www/services_dyndns.php:172 +#: usr/local/www/services_captiveportal_zones.php:90 +#: usr/local/www/firewall_virtual_ip.php:227 +#: usr/local/www/services_wol.php:188 +#: usr/local/www/firewall_virtual_ip.php:247 +#: usr/local/www/services_captiveportal_zones.php:90 +#: usr/local/www/services_dyndns.php:171 +#: usr/local/www/system_advanced_sysctl.php:199 +msgid "Do you really want to delete this entry?" +msgstr "Bu girdiyi silmek istediğinize emin misiniz?" + +#: usr/local/www/services_dyndns.php:162 usr/local/www/services_dyndns.php:183 +#: usr/local/www/services_dyndns.php:183 +msgid "" +"IP addresses appearing in green are up to date with Dynamic DNS provider." +msgstr "Yeşil IP adresleri dinamik DNS sağlayıcıda güncel durumdadır." + +#: usr/local/www/graph_cpu.php:83 usr/local/www/graph_cpu.php:83 +msgid "Cannot get CPU load" +msgstr "CPU yükü alınamadı" + +#: usr/local/www/graph_cpu.php:84 usr/local/www/graph.php:123 +#: usr/local/www/graph.php:123 usr/local/www/graph_cpu.php:84 +msgid "Collecting initial data, please wait" +msgstr "Başlangıç verisi toplanıyor, lütfen bekleyiniz" + +#: usr/local/www/graph_cpu.php:96 usr/local/www/graph.php:135 +#: usr/local/www/graph.php:135 usr/local/www/graph_cpu.php:96 +msgid "No URL for getURL" +msgstr "getURL için URL yok" + +#: usr/local/www/graph_cpu.php:103 usr/local/www/graph.php:142 +#: usr/local/www/graph.php:142 usr/local/www/graph_cpu.php:103 +msgid "No callback function for getURL" +msgstr "getURL için çağrı fonksiyonu yok" + +#: usr/local/www/graph_cpu.php:119 usr/local/www/graph.php:158 +#: usr/local/www/graph.php:158 usr/local/www/graph_cpu.php:119 +msgid "Both getURL and XMLHttpRequest are undefined" +msgstr "Ne getURL ne de XMLHttpRequest tanımlanmış" + +#: usr/local/www/services_snmp.php:87 usr/local/www/services_snmp.php:91 +msgid "Invalid character '#' in system location" +msgstr "Sistem konum alanında karakter '#' geçersiz" + +#: usr/local/www/services_snmp.php:88 usr/local/www/services_snmp.php:92 +msgid "Invalid character '#' in system contact" +msgstr "Sistem iletişim alanında karakter '#' geçersiz" + +#: usr/local/www/services_snmp.php:89 usr/local/www/services_snmp.php:93 +msgid "Invalid character '#' in read community string" +msgstr "Okuma topluluk dizesinde karakter '#' geçersiz" + +#: usr/local/www/services_snmp.php:92 usr/local/www/services_snmp.php:96 +msgid "Community" +msgstr "Topluluk" + +#: usr/local/www/services_snmp.php:96 usr/local/www/services_snmp.php:100 +msgid "Polling Port" +msgstr "Sorgulama Portu" + +#: usr/local/www/services_snmp.php:103 usr/local/www/services_snmp.php:107 +msgid "Invalid character '#' in SNMP trap string" +msgstr "SNMP tuzak dizesinde karakter '#' geçersiz" + +#: usr/local/www/services_snmp.php:106 usr/local/www/services_snmp.php:342 +#: usr/local/www/services_snmp.php:340 usr/local/www/services_snmp.php:341 +#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:351 +msgid "Trap server" +msgstr "Tuzak sunucusu" + +#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:114 +msgid "Trap server port" +msgstr "Tuzak sunucusu portu" + +#: usr/local/www/services_snmp.php:114 usr/local/www/services_snmp.php:361 +#: usr/local/www/services_snmp.php:359 usr/local/www/services_snmp.php:360 +#: usr/local/www/services_snmp.php:118 usr/local/www/services_snmp.php:370 +msgid "Trap string" +msgstr "Tuzak dizesi" + +#: usr/local/www/services_snmp.php:159 usr/local/www/fbegin.inc:134 +#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:160 +#: usr/local/www/fbegin.inc:151 usr/local/www/services_snmp.php:165 +msgid "SNMP" +msgstr "SNMP" + +#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:273 +#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:284 +msgid "SNMP Daemon" +msgstr "SNMP servisi" + +#: usr/local/www/services_snmp.php:281 usr/local/www/services_snmp.php:279 +#: usr/local/www/services_snmp.php:280 usr/local/www/services_snmp.php:290 +msgid "Polling Port " +msgstr "Sorgulama Portu " + +#: usr/local/www/services_snmp.php:284 usr/local/www/services_snmp.php:282 +#: usr/local/www/services_snmp.php:283 usr/local/www/services_snmp.php:293 +msgid "Enter the port to accept polling events on (default 161)" +msgstr "Sorgulama olaylarına erişilecek portu girin (varsayılan 161)" + +#: usr/local/www/services_snmp.php:289 usr/local/www/services_snmp.php:287 +#: usr/local/www/services_snmp.php:288 usr/local/www/services_snmp.php:298 +msgid "System location" +msgstr "Sistem konumu" + +#: usr/local/www/services_snmp.php:296 usr/local/www/services_snmp.php:294 +#: usr/local/www/services_snmp.php:295 usr/local/www/services_snmp.php:305 +msgid "System contact" +msgstr "Sistem iletişim" + +#: usr/local/www/services_snmp.php:303 usr/local/www/services_snmp.php:301 +#: usr/local/www/services_snmp.php:302 usr/local/www/services_snmp.php:312 +msgid "Read Community String" +msgstr "Topluluk dizesini oku" + +#: usr/local/www/services_snmp.php:306 usr/local/www/services_snmp.php:304 +#: usr/local/www/services_snmp.php:305 usr/local/www/services_snmp.php:315 +msgid "" +"The community string is like a password, restricting access to querying SNMP " +"to hosts knowing the community string. Use a strong value here to protect " +"from unauthorized information disclosure." +msgstr "" +"Topluluk dizesi parola gibidir, SNMP sorgusunu dizeyi bilenlerle sınırlar. " +"Yetkisiz erişimi engellemek için güçlü bir dize belirleyin." + +#: usr/local/www/services_snmp.php:335 usr/local/www/services_snmp.php:333 +#: usr/local/www/services_snmp.php:334 usr/local/www/services_snmp.php:344 +msgid "SNMP Traps" +msgstr "SNMP Tuzakları" + +#: usr/local/www/services_snmp.php:345 usr/local/www/services_snmp.php:343 +#: usr/local/www/services_snmp.php:344 usr/local/www/services_snmp.php:354 +msgid "Enter trap server name" +msgstr "Tuzak sunucusu adı giriniz" + +#: usr/local/www/services_snmp.php:350 usr/local/www/services_snmp.php:348 +#: usr/local/www/services_snmp.php:349 usr/local/www/services_snmp.php:359 +msgid "Trap server port " +msgstr "Tuzak sunucu portu " + +#: usr/local/www/services_snmp.php:353 usr/local/www/services_snmp.php:351 +#: usr/local/www/services_snmp.php:352 usr/local/www/services_snmp.php:362 +msgid "Enter the port to send the traps to (default 162)" +msgstr "Tuzakların gönderileceği port adresini giriniz (varsayılan 162)" + +#: usr/local/www/services_snmp.php:358 usr/local/www/services_snmp.php:356 +#: usr/local/www/services_snmp.php:357 usr/local/www/services_snmp.php:367 +msgid "Enter the SNMP trap string" +msgstr "SNMP tuzak dizesini girin" + +#: usr/local/www/services_snmp.php:370 usr/local/www/services_snmp.php:368 +#: usr/local/www/services_snmp.php:369 usr/local/www/services_snmp.php:379 +msgid "Modules" +msgstr "Bileşenler" + +#: usr/local/www/services_snmp.php:376 usr/local/www/services_snmp.php:374 +#: usr/local/www/services_snmp.php:375 usr/local/www/services_snmp.php:385 +msgid "SNMP Modules" +msgstr "SMNP Bileşenleri" + +#: usr/local/www/services_snmp.php:378 usr/local/www/services_snmp.php:376 +#: usr/local/www/services_snmp.php:377 usr/local/www/services_snmp.php:387 +#, fuzzy +msgid "MibII" +msgstr "MibII" + +#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:378 +#: usr/local/www/services_snmp.php:379 usr/local/www/services_snmp.php:389 +#, fuzzy +msgid "Netgraph" +msgstr "Netgraph" + +#: usr/local/www/services_snmp.php:382 usr/local/www/license.php:171 +#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:381 +#: usr/local/www/license.php:171 usr/local/www/services_snmp.php:391 +msgid "PF" +msgstr "PF" + +#: usr/local/www/services_snmp.php:384 usr/local/www/services_snmp.php:382 +#: usr/local/www/services_snmp.php:383 usr/local/www/services_snmp.php:393 +msgid "Host Resources (Requires MibII)" +msgstr "Host Kaynakları (MibII gerektirir)" + +#: usr/local/www/services_snmp.php:391 +msgid "Bind to LAN interface only" +msgstr "Sadece LAN arabirimine bağlan" + +#: usr/local/www/services_snmp.php:393 +msgid "" +"This option can be useful when trying to access the SNMP agent by the LAN " +"interface's IP address through a VPN tunnel terminated on the WAN interface." +msgstr "" +"Bu seçenek SNMP ajanına WAN arabiriminde biten bir VPN tüneli içinden LAN " +"arabiriminin IP adresine erişmekte kullanılabilir." + +#: usr/local/www/headjs.php:143 usr/local/www/firewall_rules.php:315 +#: usr/local/www/firewall_rules.php:319 usr/local/www/guiconfig.inc:302 +#: usr/local/www/firewall_rules.php:312 usr/local/www/guiconfig.inc:291 +#: usr/local/www/firewall_rules.php:312 usr/local/www/guiconfig.inc:290 +#: usr/local/www/headjs.php:146 +msgid "Apply changes" +msgstr "Değişiklikleri uygula" + +#: usr/local/www/services_wol.php:63 usr/local/www/services_wol.php:63 +#, php-format +msgid "Sent magic packet to %1$s (%2$s)%3$s" +msgstr "Özel paketi %1$s (%2$s)%3$s adresine gönderildi" + +#: usr/local/www/services_wol.php:65 usr/local/www/services_wol.php:65 +#, php-format +msgid "" +"Please check the %1$ssystem log%2$s, the wol command for %3$s (%4$s) did not " +"complete successfully%5$s" +msgstr "" +"Lütfen %1$ssistem günlüğü%2$snü kontrol edin, %3$s (%4$s) wol komutu " +"başarısız oldu %5$s" + +#: usr/local/www/services_wol.php:86 usr/local/www/services_wol_edit.php:90 +#: usr/local/www/interfaces.php:541 usr/local/www/services_dhcp_edit.php:129 +#: usr/local/www/services_dhcp_edit.php:131 usr/local/www/interfaces.php:611 +#: usr/local/www/interfaces.php:608 usr/local/www/services_wol.php:86 +#: usr/local/www/services_dhcp_edit.php:165 +#: usr/local/www/services_wol_edit.php:90 usr/local/www/interfaces.php:623 +msgid "A valid MAC address must be specified." +msgstr "Geçerli bir MAC adresi belirtilmelidir." + +#: usr/local/www/services_wol.php:88 usr/local/www/services_wol.php:88 +msgid "A valid interface must be specified." +msgstr "Geçerli bir arabirim belirtilmelidir." + +#: usr/local/www/services_wol.php:94 usr/local/www/services_wol.php:94 +msgid "A valid ip could not be found!" +msgstr "Geçerli bir IP bulunamadı!" + +#: usr/local/www/services_wol.php:99 usr/local/www/services_wol.php:99 +#, php-format +msgid "Sent magic packet to %s." +msgstr "%s adresine özel paket gönderildi." + +#: usr/local/www/services_wol.php:101 usr/local/www/services_wol.php:101 +#, php-format +msgid "" +"Please check the %1$ssystem log%2$s, the wol command for %3$s did not " +"complete successfully%4$s" +msgstr "" +"Lütfen %1$s sistem günlüğü %2$s kontrol edin, %3$s wol(LiU) komutu başarısız " +"oldu %4$s" + +#: usr/local/www/services_wol.php:115 usr/local/www/services_wol.php:127 +#: usr/local/www/services_wol_edit.php:112 usr/local/www/diag_backup.php:123 +#: usr/local/www/fbegin.inc:142 usr/local/www/fbegin.inc:159 +#: usr/local/www/diag_backup.php:201 usr/local/www/fbegin.inc:167 +#: usr/local/www/services_wol.php:115 usr/local/www/services_wol.php:127 +#: usr/local/www/services_wol_edit.php:112 usr/local/www/diag_backup.php:201 +#: usr/local/www/fbegin.inc:158 +msgid "Wake on LAN" +msgstr "Lan ile Uyan" + +#: usr/local/www/services_wol.php:141 usr/local/www/services_wol.php:141 +msgid "Choose which interface the host to be woken up is connected to." +msgstr "Uyanacak istemcinin bağlantı olduğu arabirimi seçin." + +#: usr/local/www/services_wol.php:144 usr/local/www/services_wol.php:162 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:140 +#: usr/local/www/status_captiveportal.php:161 +#: usr/local/www/interfaces.php:1283 +#: usr/local/www/services_captiveportal_mac.php:167 +#: usr/local/www/services_captiveportal_mac_edit.php:98 +#: usr/local/www/services_captiveportal_mac_edit.php:175 +#: usr/local/www/services_dhcp.php:890 +#: usr/local/www/services_dhcp_edit.php:106 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/status_interfaces.php:178 usr/local/www/diag_arp.php:314 +#: usr/local/www/status_dhcp_leases.php:319 usr/local/www/diag_ndp.php:130 +#: usr/local/www/status_interfaces.php:252 +#: usr/local/www/status_dhcp_leases.php:340 +#: usr/local/www/services_dhcp.php:928 +#: usr/local/www/services_dhcp_edit.php:108 +#: usr/local/www/services_dhcp_edit.php:210 usr/local/www/interfaces.php:1387 +#: usr/local/www/status_interfaces.php:255 +#: usr/local/www/services_captiveportal_mac.php:165 +#: usr/local/www/services_captiveportal_mac_edit.php:96 +#: usr/local/www/services_captiveportal_mac_edit.php:173 +#: usr/local/www/status_dhcp_leases.php:342 +#: usr/local/www/services_dhcp.php:1132 +#: usr/local/www/services_dhcp_edit.php:209 usr/local/www/interfaces.php:1375 +#: usr/local/www/diag_ndp.php:130 usr/local/www/diag_arp.php:314 +#: usr/local/www/services_wol.php:144 usr/local/www/services_wol.php:162 +#: usr/local/www/services_dhcp_edit.php:142 +#: usr/local/www/services_dhcp_edit.php:337 +#: usr/local/www/services_wol_edit.php:82 +#: usr/local/www/services_wol_edit.php:140 +#: usr/local/www/status_interfaces.php:255 +#: usr/local/www/services_dhcp.php:1151 +#: usr/local/www/services_captiveportal_mac_edit.php:96 +#: usr/local/www/services_captiveportal_mac_edit.php:180 +#: usr/local/www/status_captiveportal.php:147 +#: usr/local/www/status_dhcp_leases.php:342 +#: usr/local/www/services_captiveportal_mac.php:175 +#: usr/local/www/interfaces.php:1388 +msgid "MAC address" +msgstr "MAC adresi" + +#: usr/local/www/services_wol.php:148 usr/local/www/services_wol.php:148 +msgid "Enter a MAC address " +msgstr "MAC adresi giriniz " + +#: usr/local/www/services_wol.php:148 usr/local/www/services_wol.php:148 +msgid "in the following format: xx:xx:xx:xx:xx:xx" +msgstr "xx:xx:xx:xx:xx:xx biçiminde" + +#: usr/local/www/services_wol.php:152 usr/local/www/diag_smart.php:244 +#: usr/local/www/services_wol.php:152 usr/local/www/diag_smart.php:265 +msgid "Send" +msgstr "Gönder" + +#: usr/local/www/services_wol.php:157 usr/local/www/services_wol.php:157 +msgid "Wake all clients at once: " +msgstr "Tüm istemcileri aynı anda aç: " + +#: usr/local/www/services_wol.php:158 usr/local/www/services_wol.php:158 +msgid "Or Click the MAC address to wake up an individual device:" +msgstr "Veya tek bir cihazı uyandırmak için MAC adresine tıkla:" + +#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212 +msgid "" +"This service can be used to wake up (power on) computers by sending special" +msgstr "Bu servis bilgisayarları uyandırmak (açmak) için kullanılabilir." + +#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212 +msgid "Magic Packets" +msgstr "Özel Paketler göndererek" + +#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212 +msgid "" +"The NIC in the computer that is to be woken up must support Wake on LAN and " +"has to be configured properly (WOL cable, BIOS settings). " +msgstr "" +"Uyandırılacak bilgisayardaki NIC Wake ON LAN (Lan ile Uyan) özelliğini " +"desteklemelidir ve düzgün şekilde ayarlanmış olmalıdır (WOL kablosu, BIOS " +"ayarları)." + +#: usr/local/www/services_wol_edit.php:123 +#: usr/local/www/services_wol_edit.php:123 +msgid "Edit WOL entry" +msgstr "WOL (Lan ile Uyan) girdisini düzenle" + +#: usr/local/www/services_wol_edit.php:137 +#: usr/local/www/services_wol_edit.php:137 +msgid "Choose which interface this host is connected to." +msgstr "İstemcinin bağlı olduğu arabirimi seçiniz." + +#: usr/local/www/services_wol_edit.php:144 +#: usr/local/www/services_wol_edit.php:144 +msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx" +msgstr "MAC adresini örnekteki gibi giriniz: xx:xx:xx:xx:xx:xx" + +#: usr/local/www/status_captiveportal.php:58 +#: usr/local/www/status_captiveportal.php:58 +msgid "Status: Captive portal" +msgstr "Durum: Hizmet portalı" + +#: usr/local/www/status_captiveportal.php:121 +#: usr/local/www/status_captiveportal_test.php:70 +#: usr/local/www/status_captiveportal_voucher_rolls.php:73 +#: usr/local/www/status_captiveportal_vouchers.php:103 +#: usr/local/www/status_captiveportal_vouchers.php:104 +#: usr/local/www/status_captiveportal_test.php:71 +#: usr/local/www/status_captiveportal_voucher_rolls.php:74 +#: usr/local/www/status_captiveportal_expire.php:69 +#: usr/local/www/status_captiveportal_vouchers.php:108 +#: usr/local/www/status_captiveportal.php:106 +#: usr/local/www/status_captiveportal_test.php:71 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +msgid "Active Users" +msgstr "Etkin Kullanıcılar" + +#: usr/local/www/status_captiveportal.php:122 +#: usr/local/www/status_captiveportal_test.php:71 +#: usr/local/www/status_captiveportal_voucher_rolls.php:74 +#: usr/local/www/status_captiveportal_vouchers.php:104 +#: usr/local/www/status_captiveportal_vouchers.php:105 +#: usr/local/www/status_captiveportal_test.php:72 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +#: usr/local/www/status_captiveportal_expire.php:70 +#: usr/local/www/status_captiveportal_vouchers.php:109 +#: usr/local/www/status_captiveportal.php:107 +#: usr/local/www/status_captiveportal_test.php:72 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +msgid "Active Vouchers" +msgstr "Etkin Biletler" + +#: usr/local/www/status_captiveportal.php:123 +#: usr/local/www/services_captiveportal_vouchers.php:426 +#: usr/local/www/status_captiveportal_test.php:72 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_voucher_rolls.php:75 +#: usr/local/www/status_captiveportal_vouchers.php:105 +#: usr/local/www/services_captiveportal_vouchers.php:433 +#: usr/local/www/status_captiveportal_vouchers.php:106 +#: usr/local/www/services_captiveportal_vouchers.php:446 +#: usr/local/www/status_captiveportal_test.php:73 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +#: usr/local/www/status_captiveportal_expire.php:71 +#: usr/local/www/services_captiveportal_vouchers.php:455 +#: usr/local/www/status_captiveportal_vouchers.php:110 +#: usr/local/www/status_captiveportal.php:108 +#: usr/local/www/status_captiveportal_test.php:73 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_voucher_rolls.php:77 +msgid "Voucher Rolls" +msgstr "Bilet Grupları" + +#: usr/local/www/status_captiveportal.php:124 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_test.php:73 +#: usr/local/www/status_captiveportal_voucher_rolls.php:76 +#: usr/local/www/status_captiveportal_vouchers.php:106 +#: usr/local/www/status_captiveportal_vouchers.php:107 +#: usr/local/www/status_captiveportal_test.php:74 +#: usr/local/www/status_captiveportal_voucher_rolls.php:77 +#: usr/local/www/status_captiveportal_expire.php:72 +#: usr/local/www/status_captiveportal_vouchers.php:111 +#: usr/local/www/status_captiveportal.php:109 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_test.php:74 +#: usr/local/www/status_captiveportal_voucher_rolls.php:78 +msgid "Test Vouchers" +msgstr "Test Biletleri" + +#: usr/local/www/status_captiveportal.php:135 +#: usr/local/www/status_captiveportal.php:121 +msgid "Captive Portal Zone" +msgstr "Hizmet Portalı Alanı" + +#: usr/local/www/status_captiveportal.php:157 +#: usr/local/www/status_captiveportal.php:143 +msgid "Captiveportal status" +msgstr "Hizmet Portalı durumu" + +#: usr/local/www/status_captiveportal.php:164 +#: usr/local/www/status_captiveportal.php:167 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:99 +#: usr/local/www/status_captiveportal.php:150 +#: usr/local/www/status_captiveportal.php:153 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97 +msgid "Session start" +msgstr "Oturum başlangıcı" + +#: usr/local/www/status_captiveportal.php:165 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:98 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:100 +#: usr/local/www/status_captiveportal.php:151 +#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:98 +msgid "Last activity" +msgstr "Son etkinlik" + +#: usr/local/www/status_captiveportal.php:181 +#: usr/local/www/status_captiveportal.php:168 +msgid "Do you really want to disconnect this client?" +msgstr "Bu istemcinin oturumu kapatmak istediğinize emin misiniz?" + +#: usr/local/www/status_captiveportal.php:181 +#: usr/local/www/status_interfaces.php:114 +#: usr/local/www/status_interfaces.php:129 +#: usr/local/www/status_interfaces.php:144 +#: usr/local/www/status_interfaces.php:159 +#: usr/local/www/status_interfaces.php:132 +#: usr/local/www/status_interfaces.php:147 +#: usr/local/www/status_interfaces.php:162 +#: usr/local/www/status_interfaces.php:177 +#: usr/local/www/status_interfaces.php:135 +#: usr/local/www/status_interfaces.php:150 +#: usr/local/www/status_interfaces.php:165 +#: usr/local/www/status_interfaces.php:180 +#: usr/local/www/status_interfaces.php:135 +#: usr/local/www/status_interfaces.php:150 +#: usr/local/www/status_interfaces.php:165 +#: usr/local/www/status_interfaces.php:180 +#: usr/local/www/status_captiveportal.php:168 +msgid "Disconnect" +msgstr "Bağlantıyı Kes" + +#: usr/local/www/status_captiveportal.php:198 +#: usr/local/www/status_captiveportal.php:185 +msgid "Don't show last activity" +msgstr "Son etkinlikleri görüntüleme" + +#: usr/local/www/status_captiveportal.php:201 +#: usr/local/www/status_captiveportal.php:188 +msgid "Show last activity" +msgstr "Son etkinlikleri göster" + +#: usr/local/www/installer/installer.php:186 +#: usr/local/www/installer/installer.php:186 +msgid "Could not open /tmp/installer.sh for writing" +msgstr "Yazmak için /tmp/installer.sh açılamadı" + +#: usr/local/www/installer/installer.php:360 +#: usr/local/www/installer/installer.php:361 +#: usr/local/www/installer/installer.php:361 +#, php-format +msgid "Beginning installation on disk %s." +msgstr "Disk %s üzerine kurulum başlıyor." + +#: usr/local/www/installer/installer.php:409 +#: usr/local/www/installer/installer.php:410 +#: usr/local/www/installer/installer.php:410 +msgid "Installer" +msgstr "Kurulum" + +#: usr/local/www/installer/installer.php:916 +#: usr/local/www/installer/installer.php:1104 +#: usr/local/www/installer/installer.php:917 +#: usr/local/www/installer/installer.php:1105 +#: usr/local/www/installer/installer.php:917 +#: usr/local/www/installer/installer.php:1105 +msgid "ERROR: Could not find any suitable disks for installation." +msgstr "HATA: Kurulum için uygun disk bulunamadı." + +#: usr/local/www/interfaces_bridge.php:64 +#: usr/local/www/interfaces_bridge.php:68 +msgid "This bridge cannot be deleted because it is assigned as an interface." +msgstr "Köprü bir arabirim olarak atandığı için silinemez." + +#: usr/local/www/interfaces_bridge.php:77 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_gif.php:76 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre.php:77 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/diag_backup.php:109 usr/local/www/interfaces.php:1027 +#: usr/local/www/interfaces_assign.php:43 usr/local/www/interfaces_vlan.php:78 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/diag_logs_filter_summary.php:46 +#: usr/local/www/interfaces_lagg.php:82 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq.php:86 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_wireless.php:76 +#: usr/local/www/interfaces_wireless_edit.php:145 +#: usr/local/www/services_captiveportal.php:439 +#: usr/local/www/status_interfaces.php:58 usr/local/www/fbegin.inc:163 +#: usr/local/www/fbegin.inc:327 +#: usr/local/www/services_captiveportal_zones.php:53 +#: usr/local/www/fbegin.inc:180 usr/local/www/fbegin.inc:345 +#: usr/local/www/diag_backup.php:186 +#: usr/local/www/services_captiveportal.php:443 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/interfaces.php:1113 usr/local/www/fbegin.inc:188 +#: usr/local/www/fbegin.inc:291 usr/local/www/status_interfaces.php:60 +#: usr/local/www/services_captiveportal.php:441 +#: usr/local/www/diag_logs_filter_summary.php:47 +#: usr/local/www/interfaces.php:1101 +#: usr/local/www/services_captiveportal_zones.php:54 +#: usr/local/www/interfaces_wireless_edit.php:147 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_qinq.php:89 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_vlan.php:84 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_wireless.php:78 +#: usr/local/www/status_interfaces.php:60 +#: usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/services_captiveportal_zones.php:54 +#: usr/local/www/services_captiveportal.php:443 +#: usr/local/www/diag_backup.php:186 +#: usr/local/www/interfaces_bridge_edit.php:236 usr/local/www/fbegin.inc:179 +#: usr/local/www/fbegin.inc:283 usr/local/www/interfaces_gre.php:81 +#: usr/local/www/interfaces_gif.php:80 usr/local/www/interfaces_assign.php:43 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/diag_logs_filter_summary.php:47 +#: usr/local/www/interfaces.php:1115 +msgid "Interfaces" +msgstr "Arabirimler" + +#: usr/local/www/interfaces_bridge.php:77 +#: usr/local/www/interfaces_bridge_edit.php:226 +#: usr/local/www/interfaces_bridge_edit.php:235 +#: usr/local/www/interfaces_bridge.php:83 +#: usr/local/www/interfaces_bridge_edit.php:236 +msgid "Bridge" +msgstr "Köprü" + +#: usr/local/www/interfaces_bridge.php:89 usr/local/www/interfaces_gif.php:88 +#: usr/local/www/interfaces_gre.php:89 usr/local/www/interfaces_groups.php:75 +#: usr/local/www/interfaces_assign.php:402 +#: usr/local/www/interfaces_vlan.php:90 usr/local/www/interfaces_lagg.php:94 +#: usr/local/www/interfaces_ppps.php:90 usr/local/www/interfaces_qinq.php:98 +#: usr/local/www/interfaces_wireless.php:88 +#: usr/local/www/interfaces_groups.php:76 usr/local/www/interfaces_qinq.php:99 +#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_bridge.php:90 +#: usr/local/www/interfaces_lagg.php:95 usr/local/www/interfaces_gre.php:90 +#: usr/local/www/interfaces_wireless.php:89 +#: usr/local/www/interfaces_assign.php:396 +#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_gif.php:89 +#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_bridge.php:96 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/interfaces_groups.php:76 usr/local/www/interfaces_ppps.php:91 +#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_assign.php:402 +msgid "Interface assignments" +msgstr "Arabirim atamaları" + +#: usr/local/www/interfaces_bridge.php:90 usr/local/www/interfaces_gif.php:89 +#: usr/local/www/interfaces_gre.php:90 usr/local/www/interfaces_groups.php:76 +#: usr/local/www/interfaces_assign.php:403 +#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_lagg.php:95 +#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_qinq.php:99 +#: usr/local/www/interfaces_wireless.php:89 +#: usr/local/www/interfaces_groups.php:77 +#: usr/local/www/interfaces_qinq.php:100 usr/local/www/interfaces_ppps.php:92 +#: usr/local/www/interfaces_bridge.php:91 usr/local/www/interfaces_lagg.php:96 +#: usr/local/www/interfaces_gre.php:91 +#: usr/local/www/interfaces_wireless.php:90 +#: usr/local/www/interfaces_assign.php:397 +#: usr/local/www/interfaces_vlan.php:92 usr/local/www/interfaces_gif.php:90 +#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_lagg.php:100 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_bridge.php:97 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_groups.php:77 usr/local/www/interfaces_ppps.php:92 +#: usr/local/www/interfaces_gre.php:95 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_assign.php:403 +msgid "Interface Groups" +msgstr "Arabirim Grupları" + +#: usr/local/www/interfaces_bridge.php:92 usr/local/www/interfaces_gif.php:91 +#: usr/local/www/interfaces_gre.php:92 usr/local/www/interfaces_groups.php:78 +#: usr/local/www/interfaces_assign.php:405 +#: usr/local/www/interfaces_vlan.php:93 usr/local/www/interfaces_lagg.php:97 +#: usr/local/www/interfaces_ppps.php:93 usr/local/www/interfaces_qinq.php:101 +#: usr/local/www/interfaces_wireless.php:91 +#: usr/local/www/interfaces_groups.php:79 +#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_ppps.php:94 +#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_lagg.php:98 +#: usr/local/www/interfaces_gre.php:93 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_assign.php:399 +#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_gif.php:92 +#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_lagg.php:102 +#: usr/local/www/interfaces_vlan.php:100 +#: usr/local/www/interfaces_bridge.php:99 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_groups.php:79 usr/local/www/interfaces_ppps.php:94 +#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_assign.php:405 +msgid "VLANs" +msgstr "VLANlar" + +#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_gif.php:92 +#: usr/local/www/interfaces_gre.php:93 usr/local/www/interfaces_groups.php:79 +#: usr/local/www/interfaces_assign.php:406 +#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_lagg.php:98 +#: usr/local/www/interfaces_ppps.php:94 usr/local/www/interfaces_qinq.php:102 +#: usr/local/www/interfaces_wireless.php:92 +#: usr/local/www/interfaces_groups.php:80 +#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_ppps.php:95 +#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_gre.php:94 +#: usr/local/www/interfaces_wireless.php:93 +#: usr/local/www/interfaces_assign.php:400 +#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_lagg.php:103 +#: usr/local/www/interfaces_vlan.php:101 +#: usr/local/www/interfaces_bridge.php:100 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_groups.php:80 usr/local/www/interfaces_ppps.php:95 +#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_assign.php:406 +msgid "QinQs" +msgstr "QinQler" + +#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_gif.php:93 +#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_groups.php:80 +#: usr/local/www/interfaces_assign.php:407 +#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_lagg.php:99 +#: usr/local/www/interfaces_ppps.php:95 +#: usr/local/www/interfaces_ppps_edit.php:378 +#: usr/local/www/interfaces_qinq.php:103 +#: usr/local/www/interfaces_wireless.php:93 +#: usr/local/www/interfaces_groups.php:81 +#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_ppps.php:96 +#: usr/local/www/interfaces_bridge.php:95 +#: usr/local/www/interfaces_lagg.php:100 usr/local/www/interfaces_gre.php:95 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_assign.php:401 +#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_qinq.php:107 +#: usr/local/www/interfaces_ppps_edit.php:384 +#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_vlan.php:102 +#: usr/local/www/interfaces_bridge.php:101 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_groups.php:81 usr/local/www/interfaces_ppps.php:96 +#: usr/local/www/interfaces_gre.php:99 usr/local/www/interfaces_gif.php:98 +#: usr/local/www/interfaces_assign.php:407 +msgid "PPPs" +msgstr "PPPler" + +#: usr/local/www/interfaces_bridge.php:95 usr/local/www/interfaces_gif.php:94 +#: usr/local/www/interfaces_gre.php:77 usr/local/www/interfaces_gre.php:95 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_groups.php:81 +#: usr/local/www/interfaces_assign.php:408 +#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_lagg.php:100 +#: usr/local/www/interfaces_ppps.php:96 usr/local/www/interfaces_qinq.php:104 +#: usr/local/www/interfaces_wireless.php:94 +#: usr/local/www/interfaces_groups.php:82 +#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_ppps.php:97 +#: usr/local/www/interfaces_bridge.php:96 +#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_gre.php:96 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_assign.php:402 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_gif.php:95 +#: usr/local/www/interfaces_gre_edit.php:127 +#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_lagg.php:105 +#: usr/local/www/interfaces_vlan.php:103 +#: usr/local/www/interfaces_bridge.php:102 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_groups.php:82 usr/local/www/interfaces_ppps.php:97 +#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gre.php:100 +#: usr/local/www/interfaces_gif.php:99 usr/local/www/interfaces_assign.php:408 +msgid "GRE" +msgstr "GRE" + +#: usr/local/www/interfaces_bridge.php:96 usr/local/www/interfaces_gif.php:76 +#: usr/local/www/interfaces_gif.php:95 +#: usr/local/www/interfaces_gif_edit.php:125 +#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_groups.php:82 +#: usr/local/www/interfaces_assign.php:409 +#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_lagg.php:101 +#: usr/local/www/interfaces_ppps.php:97 usr/local/www/interfaces_qinq.php:105 +#: usr/local/www/interfaces_wireless.php:95 +#: usr/local/www/interfaces_groups.php:83 +#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_ppps.php:98 +#: usr/local/www/interfaces_bridge.php:97 +#: usr/local/www/interfaces_lagg.php:102 usr/local/www/interfaces_gre.php:97 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_assign.php:403 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_qinq.php:109 usr/local/www/interfaces_lagg.php:106 +#: usr/local/www/interfaces_vlan.php:104 +#: usr/local/www/interfaces_gif_edit.php:133 +#: usr/local/www/interfaces_bridge.php:103 +#: usr/local/www/interfaces_wireless.php:98 +#: usr/local/www/interfaces_groups.php:83 usr/local/www/interfaces_ppps.php:98 +#: usr/local/www/interfaces_gre.php:101 usr/local/www/interfaces_gif.php:80 +#: usr/local/www/interfaces_gif.php:100 +#: usr/local/www/interfaces_assign.php:409 +msgid "GIF" +msgstr "GIF" + +#: usr/local/www/interfaces_bridge.php:97 usr/local/www/interfaces_gif.php:96 +#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_groups.php:83 +#: usr/local/www/interfaces_assign.php:410 +#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_lagg.php:102 +#: usr/local/www/interfaces_ppps.php:98 usr/local/www/interfaces_qinq.php:106 +#: usr/local/www/interfaces_wireless.php:96 +#: usr/local/www/interfaces_groups.php:84 +#: usr/local/www/interfaces_qinq.php:107 usr/local/www/interfaces_ppps.php:99 +#: usr/local/www/interfaces_bridge.php:98 +#: usr/local/www/interfaces_lagg.php:103 usr/local/www/interfaces_gre.php:98 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_assign.php:404 +#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_qinq.php:110 usr/local/www/interfaces_lagg.php:107 +#: usr/local/www/interfaces_vlan.php:105 +#: usr/local/www/interfaces_bridge.php:104 +#: usr/local/www/interfaces_wireless.php:99 +#: usr/local/www/interfaces_groups.php:84 usr/local/www/interfaces_ppps.php:99 +#: usr/local/www/interfaces_gre.php:102 usr/local/www/interfaces_gif.php:101 +#: usr/local/www/interfaces_assign.php:410 +msgid "Bridges" +msgstr "Köprüler" + +#: usr/local/www/interfaces_bridge.php:98 usr/local/www/interfaces_gif.php:97 +#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_groups.php:84 +#: usr/local/www/interfaces_assign.php:411 +#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_lagg.php:82 +#: usr/local/www/interfaces_lagg.php:103 +#: usr/local/www/interfaces_lagg_edit.php:120 +#: usr/local/www/interfaces_ppps.php:99 usr/local/www/interfaces_qinq.php:107 +#: usr/local/www/interfaces_wireless.php:97 +#: usr/local/www/interfaces_groups.php:85 +#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_ppps.php:100 +#: usr/local/www/interfaces_bridge.php:99 +#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_gre.php:99 +#: usr/local/www/interfaces_wireless.php:98 +#: usr/local/www/interfaces_assign.php:405 +#: usr/local/www/interfaces_vlan.php:100 usr/local/www/interfaces_gif.php:98 +#: usr/local/www/interfaces_qinq.php:111 +#: usr/local/www/interfaces_lagg_edit.php:133 +#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_lagg.php:108 +#: usr/local/www/interfaces_vlan.php:106 +#: usr/local/www/interfaces_bridge.php:105 +#: usr/local/www/interfaces_wireless.php:100 +#: usr/local/www/interfaces_groups.php:85 +#: usr/local/www/interfaces_ppps.php:100 usr/local/www/interfaces_gre.php:103 +#: usr/local/www/interfaces_gif.php:102 +#: usr/local/www/interfaces_assign.php:411 +msgid "LAGG" +msgstr "LAGG" + +#: usr/local/www/interfaces_bridge.php:108 +#: usr/local/www/interfaces_groups.php:95 +#: usr/local/www/interfaces_lagg.php:113 +#: usr/local/www/load_balancer_pool_edit.php:257 +#: usr/local/www/system_groupmanager.php:317 +#: usr/local/www/load_balancer_pool_edit.php:274 +#: usr/local/www/interfaces_groups.php:96 +#: usr/local/www/interfaces_bridge.php:109 +#: usr/local/www/interfaces_lagg.php:114 +#: usr/local/www/load_balancer_pool_edit.php:272 +#: usr/local/www/system_groupmanager.php:317 +#: usr/local/www/interfaces_lagg.php:118 +#: usr/local/www/interfaces_bridge.php:115 +#: usr/local/www/interfaces_groups.php:96 +#: usr/local/www/load_balancer_pool_edit.php:272 +msgid "Members" +msgstr "Üyeler" + +#: usr/local/www/interfaces_bridge.php:135 +#: usr/local/www/interfaces_bridge.php:136 +#: usr/local/www/interfaces_bridge.php:142 +msgid "Do you really want to delete this bridge?" +msgstr "Bu köprüyü silmek istediğinize emin misiniz?" + +#: usr/local/www/interfaces_bridge.php:146 +#: usr/local/www/interfaces_bridge.php:147 +#: usr/local/www/interfaces_bridge.php:153 +msgid "Here you can configure bridging of interfaces." +msgstr "Burada arabirimler arasında köprülemeyi yapılandırabilirsiniz." + +#: usr/local/www/interfaces_bridge_edit.php:111 +#: usr/local/www/interfaces_bridge_edit.php:119 +#: usr/local/www/interfaces_bridge_edit.php:119 +msgid "Member Interfaces" +msgstr "Üye Arabirimler" + +#: usr/local/www/interfaces_bridge_edit.php:116 +#: usr/local/www/interfaces_bridge_edit.php:124 +#: usr/local/www/interfaces_bridge_edit.php:124 +msgid "Maxage needs to be an integer between 6 and 40." +msgstr "En yüksek süre değeri 6 ile 40 arasında bir tamsayı olmalıdır." + +#: usr/local/www/interfaces_bridge_edit.php:118 +#: usr/local/www/interfaces_bridge_edit.php:126 +#: usr/local/www/interfaces_bridge_edit.php:126 +msgid "Maxaddr needs to be an integer." +msgstr "En yüksek adres tamsayı olmalıdır." + +#: usr/local/www/interfaces_bridge_edit.php:120 +#: usr/local/www/interfaces_bridge_edit.php:128 +#: usr/local/www/interfaces_bridge_edit.php:128 +msgid "Timeout needs to be an integer." +msgstr "Zaman aşımı tamsayı olmalıdır." + +#: usr/local/www/interfaces_bridge_edit.php:122 +#: usr/local/www/interfaces_bridge_edit.php:130 +#: usr/local/www/interfaces_bridge_edit.php:130 +msgid "Forward Delay needs to be an integer between 4 and 30." +msgstr "Yönlendirme Gecikmesi 4 ile 30 arasında bir tamsayı olmalıdır." + +#: usr/local/www/interfaces_bridge_edit.php:124 +#: usr/local/www/interfaces_bridge_edit.php:132 +#: usr/local/www/interfaces_bridge_edit.php:132 +msgid "Hello time for STP needs to be an integer between 1 and 2." +msgstr "STP selamlama zamanı 1 ya da 2 olmalıdır." + +#: usr/local/www/interfaces_bridge_edit.php:126 +#: usr/local/www/interfaces_bridge_edit.php:134 +#: usr/local/www/interfaces_bridge_edit.php:134 +msgid "Priority for STP needs to be an integer between 0 and 61440." +msgstr "STP önceliği 0 ile 61440 arasında bir tamsayı olmalıdır." + +#: usr/local/www/interfaces_bridge_edit.php:128 +#: usr/local/www/interfaces_bridge_edit.php:136 +#: usr/local/www/interfaces_bridge_edit.php:136 +msgid "Transmit Hold Count for STP needs to be an integer between 1 and 10." +msgstr "STP Yayın Tutma Sayısı 1 ile 10 arasında bir tamsayı olmalıdır." + +#: usr/local/www/interfaces_bridge_edit.php:131 +#: usr/local/www/interfaces_bridge_edit.php:139 +#: usr/local/www/interfaces_bridge_edit.php:139 +msgid "interface priority for STP needs to be an integer between 0 and 240." +msgstr "STP arabirim önceliği 0 ile 240 arasında bir tamsayı olmalıdır." + +#: usr/local/www/interfaces_bridge_edit.php:136 +#: usr/local/www/interfaces_bridge_edit.php:144 +#: usr/local/www/interfaces_bridge_edit.php:144 +msgid "" +"interface path cost for STP needs to be an integer between 1 and 200000000." +msgstr "" +"STP arabirim yol tutarı 1 ile 200.000.000 arasında bir tamsayı olmalıdır." + +#: usr/local/www/interfaces_bridge_edit.php:141 +#: usr/local/www/interfaces_bridge_edit.php:149 +#: usr/local/www/interfaces_bridge_edit.php:149 +msgid "You must select at least 2 member interfaces for a bridge." +msgstr "Köprü için en az iki üye arabirim seçmelisiniz." + +#: usr/local/www/interfaces_bridge_edit.php:147 +#: usr/local/www/interfaces_bridge_edit.php:155 +#: usr/local/www/interfaces_bridge_edit.php:157 +msgid "Bridging a wireless interface is only possible in hostap mode." +msgstr "Kablosuz bir arabirimi köprülemek sadece hostap kipinde mümkündür." + +#: usr/local/www/interfaces_bridge_edit.php:149 +#: usr/local/www/interfaces_bridge_edit.php:157 +#: usr/local/www/interfaces_bridge_edit.php:159 +msgid "" +"Span interface cannot be part of the bridge. Remove the span interface from " +"bridge members to continue." +msgstr "" +"Yayım arabirimi bir köprünün parçası olamaz. Devam etmek için yayım " +"arabirimini köprüden çıkarınız." + +#: usr/local/www/interfaces_bridge_edit.php:206 +#: usr/local/www/interfaces_gif_edit.php:106 +#: usr/local/www/interfaces_gre_edit.php:108 +#: usr/local/www/interfaces_vlan_edit.php:121 +#: usr/local/www/interfaces_lagg_edit.php:101 +#: usr/local/www/interfaces_bridge_edit.php:215 +#: usr/local/www/interfaces_gre_edit.php:108 +#: usr/local/www/interfaces_vlan_edit.php:124 +#: usr/local/www/interfaces_lagg_edit.php:114 +#: usr/local/www/interfaces_gif_edit.php:114 +#: usr/local/www/interfaces_bridge_edit.php:217 +msgid "Error occurred creating interface, please retry." +msgstr "" +"Arabirim oluşturulurken bir hata meydana geldi, lütfen tekrar deneyiniz." + +#: usr/local/www/interfaces_bridge_edit.php:253 +#: usr/local/www/interfaces_bridge_edit.php:262 +#: usr/local/www/interfaces_bridge_edit.php:263 +#: usr/local/www/interfaces_bridge_edit.php:264 +msgid "Bridge configuration" +msgstr "Köprü yapılandırması" + +#: usr/local/www/interfaces_bridge_edit.php:256 +#: usr/local/www/interfaces_lagg_edit.php:86 +#: usr/local/www/interfaces_bridge_edit.php:265 +#: usr/local/www/interfaces_bridge_edit.php:266 +#: usr/local/www/interfaces_lagg_edit.php:88 +#: usr/local/www/interfaces_bridge_edit.php:267 +msgid "Member interfaces" +msgstr "Üye arabirimler" + +#: usr/local/www/interfaces_bridge_edit.php:269 +#: usr/local/www/interfaces_bridge_edit.php:278 +#: usr/local/www/interfaces_bridge_edit.php:279 +#: usr/local/www/interfaces_bridge_edit.php:280 +msgid "Interfaces participating in the bridge." +msgstr "Bu arabirimde yer alan köprüler." + +#: usr/local/www/interfaces_bridge_edit.php:285 +#: usr/local/www/interfaces_bridge_edit.php:294 +#: usr/local/www/interfaces_bridge_edit.php:295 +#: usr/local/www/interfaces_bridge_edit.php:296 +msgid "RSTP/STP" +msgstr "RSTP/STP" + +#: usr/local/www/interfaces_bridge_edit.php:288 +#: usr/local/www/interfaces_bridge_edit.php:297 +#: usr/local/www/interfaces_bridge_edit.php:298 +#: usr/local/www/interfaces_bridge_edit.php:299 +msgid "Enable spanning tree options for this bridge." +msgstr "Bu köprü için yayım ağacı seçeneklerini aç." + +#: usr/local/www/interfaces_bridge_edit.php:304 +#: usr/local/www/interfaces_bridge_edit.php:313 +#: usr/local/www/interfaces_bridge_edit.php:314 +#: usr/local/www/interfaces_bridge_edit.php:315 +msgid "Protocol used for spanning tree." +msgstr "Yayım ağacında kullanılacak protokol." + +#: usr/local/www/interfaces_bridge_edit.php:306 +#: usr/local/www/interfaces_bridge_edit.php:315 +#: usr/local/www/interfaces_bridge_edit.php:316 +#: usr/local/www/interfaces_bridge_edit.php:317 +msgid "STP interfaces" +msgstr "STP Arabirimleri" + +#: usr/local/www/interfaces_bridge_edit.php:320 +#: usr/local/www/interfaces_bridge_edit.php:329 +#: usr/local/www/interfaces_bridge_edit.php:330 +#: usr/local/www/interfaces_bridge_edit.php:331 +msgid "" +"Enable Spanning Tree Protocol on interface. The if_bridge(4) driver has " +"support for the IEEE 802.1D Spanning Tree Protocol (STP). STP is used to " +"detect and remove loops in a network topology." +msgstr "" +"Arabirimde Yayım Ağacı Protokolünü (STP) aç. if_bridge(4) sürücüsü IEEE " +"802.1d Yayım Ağacı Protokolünü (STP - Spanning Tree Protocol) destekler. STP " +"ağ topolojisinde döngüleri tespit edip silmek için kullanılır." + +#: usr/local/www/interfaces_bridge_edit.php:326 +#: usr/local/www/interfaces_bridge_edit.php:335 +#: usr/local/www/interfaces_bridge_edit.php:336 +#: usr/local/www/interfaces_bridge_edit.php:337 +msgid "Valid time" +msgstr "Geçerli Zaman" + +#: usr/local/www/interfaces_bridge_edit.php:328 +#: usr/local/www/interfaces_bridge_edit.php:338 +#: usr/local/www/interfaces_bridge_edit.php:347 +#: usr/local/www/interfaces_bridge_edit.php:416 +#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936 +#: usr/local/www/graph.php:120 usr/local/www/services_dhcp.php:679 +#: usr/local/www/services_dhcp.php:689 +#: usr/local/www/services_rfc2136_edit.php:156 +#: usr/local/www/vpn_ipsec_phase1.php:761 +#: usr/local/www/vpn_ipsec_phase1.php:831 +#: usr/local/www/vpn_ipsec_phase2.php:622 +#: usr/local/www/services_dhcpv6.php:624 usr/local/www/services_dhcpv6.php:634 +#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcp.php:702 +#: usr/local/www/interfaces_bridge_edit.php:337 +#: usr/local/www/interfaces_bridge_edit.php:356 +#: usr/local/www/interfaces_bridge_edit.php:425 +#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/interfaces.php:1995 +#: usr/local/www/interfaces.php:2114 usr/local/www/vpn_ipsec_phase1.php:774 +#: usr/local/www/vpn_ipsec_phase1.php:844 +#: usr/local/www/services_dhcpv6.php:692 usr/local/www/services_dhcpv6.php:702 +#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcp.php:878 +#: usr/local/www/interfaces_bridge_edit.php:348 +#: usr/local/www/interfaces_bridge_edit.php:357 +#: usr/local/www/interfaces_bridge_edit.php:426 +#: usr/local/www/vpn_ipsec_phase2.php:744 usr/local/www/interfaces.php:1983 +#: usr/local/www/interfaces.php:2102 usr/local/www/vpn_ipsec_phase1.php:771 +#: usr/local/www/vpn_ipsec_phase1.php:841 +#: usr/local/www/services_dhcpv6.php:623 usr/local/www/services_dhcpv6.php:633 +#: usr/local/www/services_dhcp_edit.php:434 +#: usr/local/www/services_dhcp_edit.php:444 +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcp.php:892 +#: usr/local/www/services_dhcpv6.php:640 usr/local/www/services_dhcpv6.php:650 +#: usr/local/www/graph.php:120 usr/local/www/interfaces_bridge_edit.php:339 +#: usr/local/www/interfaces_bridge_edit.php:349 +#: usr/local/www/interfaces_bridge_edit.php:358 +#: usr/local/www/interfaces_bridge_edit.php:427 +#: usr/local/www/services_rfc2136_edit.php:156 +#: usr/local/www/vpn_ipsec_phase1.php:792 +#: usr/local/www/vpn_ipsec_phase1.php:862 +#: usr/local/www/vpn_ipsec_phase2.php:765 usr/local/www/interfaces.php:2010 +#: usr/local/www/interfaces.php:2132 +msgid "seconds" +msgstr "saniyeyi gösterir" + +#: usr/local/www/interfaces_bridge_edit.php:331 +#: usr/local/www/interfaces_bridge_edit.php:340 +#: usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:342 +msgid "" +"Set the time that a Spanning Tree Protocol configuration is valid. The " +"default is 20 seconds. The minimum is 6 seconds and the maximum is 40 " +"seconds." +msgstr "" +"Yayım Ağacı Protokolü yapılandırmasının geçerli olacağı süreyi belirleyin. " +"Varsayılan değer 20 saniyedir. En az 6, en çok 40 saniye olabilir." + +#: usr/local/www/interfaces_bridge_edit.php:336 +#: usr/local/www/interfaces_bridge_edit.php:345 +#: usr/local/www/interfaces_bridge_edit.php:346 +#: usr/local/www/interfaces_bridge_edit.php:347 +msgid "Forward time" +msgstr "Yönlendirme Zamanı" + +#: usr/local/www/interfaces_bridge_edit.php:341 +#: usr/local/www/interfaces_bridge_edit.php:350 +#: usr/local/www/interfaces_bridge_edit.php:351 +#: usr/local/www/interfaces_bridge_edit.php:352 +msgid "" +"Set the time that must pass before an interface begins forwarding packets " +"when Spanning Tree is enabled. The default is 15 seconds. The minimum is 4 " +"seconds and the maximum is 30 seconds." +msgstr "" +"Yayım Ağacı açıldığında arabirimler paketleri yönlendirmeye başlamadan önce " +"geçmesi gereken süreyi belirleyin. Varsayılan değeri 15, en az 4, en fazla " +"30 saniyedir." + +#: usr/local/www/interfaces_bridge_edit.php:345 +#: usr/local/www/interfaces_bridge_edit.php:354 +#: usr/local/www/interfaces_bridge_edit.php:355 +#: usr/local/www/interfaces_bridge_edit.php:356 +msgid "Hello time" +msgstr "Selamlama süresi" + +#: usr/local/www/interfaces_bridge_edit.php:350 +#: usr/local/www/interfaces_bridge_edit.php:359 +#: usr/local/www/interfaces_bridge_edit.php:360 +#: usr/local/www/interfaces_bridge_edit.php:361 +msgid "" +"Set the time between broadcasting of Spanning Tree Protocol configuration " +"messages. The hello time may only be changed when operating in legacy STP " +"mode. The default is 2 seconds. The minimum is 1 second and the maximum is " +"2 seconds." +msgstr "" +"Yayım Ağacı Protokolü yapılandırma mesajlarının yayınlanışı arasında geçmesi " +"gereken süreyi belirleyin. Selamlama süresi sadece eski STP kipinde " +"çalışırken değiştirilebilir. Varsayılan değeri 2 saniyedir ve 1 ya da 2 " +"saniye olabilir." + +#: usr/local/www/interfaces_bridge_edit.php:359 +#: usr/local/www/interfaces_bridge_edit.php:368 +#: usr/local/www/interfaces_bridge_edit.php:369 +#: usr/local/www/interfaces_bridge_edit.php:370 +msgid "" +"Set the bridge priority for Spanning Tree. The default is 32768. The " +"minimum is 0 and the maximum is 61440." +msgstr "" +"Yayım Ağacı köprü önceliğini belirleyin. Varsayılan değeri 32768 saniyedir. " +"En az 0, en fazla 61440 olabilir." + +#: usr/local/www/interfaces_bridge_edit.php:363 +#: usr/local/www/interfaces_bridge_edit.php:372 +#: usr/local/www/interfaces_bridge_edit.php:373 +#: usr/local/www/interfaces_bridge_edit.php:374 +msgid "Hold count" +msgstr "Tutma sayısı" + +#: usr/local/www/interfaces_bridge_edit.php:368 +#: usr/local/www/interfaces_bridge_edit.php:377 +#: usr/local/www/interfaces_bridge_edit.php:378 +#: usr/local/www/interfaces_bridge_edit.php:379 +msgid "" +"Set the transmit hold count for Spanning Tree. This is the num- ber of " +"packets transmitted before being rate limited. The default is 6. The " +"minimum is 1 and the maximum is 10." +msgstr "" +"Yayım Ağacı tutma sayısını belirleyin. Hız sınırlamasından önce gönderilen " +"paket sayısıdır. Varsayılan değeri 6'dır. En az 1, en fazla 10 olabilir." + +#: usr/local/www/interfaces_bridge_edit.php:382 +msgid "" +"Set the Spanning Tree priority of interface to value. The default is 128. " +"The minimum is 0 and the maximum is 240." +msgstr "" +"Arabirimin Yayım Ağacı önceliğini ayarlayın. Varsayılan olarak 128, en az 0, " +"en fazla 240'tır." + +#: usr/local/www/interfaces_bridge_edit.php:386 +#: usr/local/www/interfaces_bridge_edit.php:395 +#: usr/local/www/interfaces_bridge_edit.php:396 +#: usr/local/www/interfaces_bridge_edit.php:397 +msgid "Path cost" +msgstr "Yol tutarı" + +#: usr/local/www/interfaces_bridge_edit.php:395 +#: usr/local/www/interfaces_bridge_edit.php:404 +#: usr/local/www/interfaces_bridge_edit.php:405 +#: usr/local/www/interfaces_bridge_edit.php:406 +msgid "" +"Set the Spanning Tree path cost of interface to value. The default is " +"calculated from the link speed. To change a previously selected path cost " +"back to automatic, set the cost to 0. The minimum is 1 and the maximum is " +"200000000." +msgstr "" +"Arabirimin Yayım Ağacı yol tutarını belirleyin. Varsayılan değer bağlantı " +"hızından hesaplanır. Önceden seçilmiş yol tutarını otomatiğe çevirmek için 0 " +"atayın. En az 1, en fazla 200.000.000 olabilir." + +#: usr/local/www/interfaces_bridge_edit.php:404 +#: usr/local/www/interfaces_bridge_edit.php:413 +#: usr/local/www/interfaces_bridge_edit.php:414 +#: usr/local/www/interfaces_bridge_edit.php:415 +msgid "Cache size" +msgstr "Önbellek boyutu" + +#: usr/local/www/interfaces_bridge_edit.php:406 +#: usr/local/www/interfaces_bridge_edit.php:415 +#: usr/local/www/interfaces_bridge_edit.php:416 +#: usr/local/www/interfaces_bridge_edit.php:417 +msgid "entries" +msgstr "girdileri" + +#: usr/local/www/interfaces_bridge_edit.php:408 +#: usr/local/www/interfaces_bridge_edit.php:417 +#: usr/local/www/interfaces_bridge_edit.php:418 +#: usr/local/www/interfaces_bridge_edit.php:419 +msgid "" +"Set the size of the bridge address cache to size.\tThe default is .100 " +"entries." +msgstr "" +"Köprü adresi önbelleğini bu boyuta ayarla.\tVarsayılan değeri .100 girdidir." + +#: usr/local/www/interfaces_bridge_edit.php:414 +#: usr/local/www/interfaces_bridge_edit.php:423 +#: usr/local/www/interfaces_bridge_edit.php:424 +#: usr/local/www/interfaces_bridge_edit.php:425 +msgid "Cache entry expire time" +msgstr "Önbellek girdi zaman dolumu süresi" + +#: usr/local/www/interfaces_bridge_edit.php:418 +#: usr/local/www/interfaces_bridge_edit.php:427 +#: usr/local/www/interfaces_bridge_edit.php:428 +#: usr/local/www/interfaces_bridge_edit.php:429 +msgid "" +"Set the timeout of address cache entries to this number of seconds. If " +"seconds is zero, then address cache entries will not be expired. The default " +"is 240 seconds." +msgstr "" +"Adres önbellek girdilerinin zaman aşımını bu kadar saniye olarak ayarla. " +"Eğer 0 atanırsa adres önbellek girdilerinin süresi dolmaz. Varsayılan değeri " +"240 saniyedir." + +#: usr/local/www/interfaces_bridge_edit.php:425 +#: usr/local/www/interfaces_bridge_edit.php:434 +#: usr/local/www/interfaces_bridge_edit.php:435 +#: usr/local/www/interfaces_bridge_edit.php:436 +msgid "Span port" +msgstr "Yayım portu" + +#: usr/local/www/interfaces_bridge_edit.php:439 +#: usr/local/www/interfaces_bridge_edit.php:448 +#: usr/local/www/interfaces_bridge_edit.php:449 +#: usr/local/www/interfaces_bridge_edit.php:450 +msgid "" +"Add the interface named by interface as a span port on the bridge. Span " +"ports transmit a copy of every frame received by the bridge. This is most " +"useful for snooping a bridged network passively on another host connected to " +"one of the span ports of the bridge." +msgstr "" +"Adı verilen arabirimi köprüde yayım portu olarak ekle. Yayım portları " +"köprüye gelen her çerçevenin bir kopyasını yayınlar. Bu yöntem en çok " +"köprünün yayım portlarından birine bağlı başka bir sunucu üzerindeki " +"köprülenmiş ağı izlemekte işe yarar." + +#: usr/local/www/interfaces_bridge_edit.php:448 +#: usr/local/www/interfaces_bridge_edit.php:457 +#: usr/local/www/interfaces_bridge_edit.php:458 +#: usr/local/www/interfaces_bridge_edit.php:459 +msgid "The span interface cannot be part of the bridge member interfaces." +msgstr "Yayım arabirimi köprü üye arabirimlerinden biri olamaz." + +#: usr/local/www/interfaces_bridge_edit.php:453 +#: usr/local/www/interfaces_bridge_edit.php:462 +#: usr/local/www/interfaces_bridge_edit.php:463 +#: usr/local/www/interfaces_bridge_edit.php:464 +msgid "Edge ports" +msgstr "Sınır portlar" + +#: usr/local/www/interfaces_bridge_edit.php:467 +#: usr/local/www/interfaces_bridge_edit.php:476 +#: usr/local/www/interfaces_bridge_edit.php:477 +#: usr/local/www/interfaces_bridge_edit.php:478 +msgid "" +"Set interface as an edge port. An edge port connects directly to end " +"stations and cannot create bridging loops in the network; this allows it to " +"transition straight to forwarding." +msgstr "" +"Arabirimi sınır port olarak ata. Sınır port uç bilgisayarlara doğrudan " +"bağlanır; böylece doğrudan yönlendirme yapmasına olanak sağlanmış olur." + +#: usr/local/www/interfaces_bridge_edit.php:473 +#: usr/local/www/interfaces_bridge_edit.php:482 +#: usr/local/www/interfaces_bridge_edit.php:483 +#: usr/local/www/interfaces_bridge_edit.php:484 +msgid "Auto Edge ports" +msgstr "Otomatik Sınır portlar" + +#: usr/local/www/interfaces_bridge_edit.php:487 +#: usr/local/www/interfaces_bridge_edit.php:496 +#: usr/local/www/interfaces_bridge_edit.php:497 +#: usr/local/www/interfaces_bridge_edit.php:498 +msgid "" +"Allow interface to automatically detect edge status. This is the default " +"for all interfaces added to a bridge." +msgstr "" +"Arabirimin sınır durumunu doğrudan tespit etmesine olanak ver. Köprüye " +"eklenen tüm arabirimlerin öntanımlısı budur." + +#: usr/local/www/interfaces_bridge_edit.php:492 +#: usr/local/www/interfaces_bridge_edit.php:501 +#: usr/local/www/interfaces_bridge_edit.php:502 +#: usr/local/www/interfaces_bridge_edit.php:503 +msgid "This will disable the autoedge status of interfaces." +msgstr "Bu seçenek arabirimlerin otomatik sınır durumunu kapatır." + +#: usr/local/www/interfaces_bridge_edit.php:496 +#: usr/local/www/interfaces_bridge_edit.php:505 +#: usr/local/www/interfaces_bridge_edit.php:506 +#: usr/local/www/interfaces_bridge_edit.php:507 +msgid "PTP ports" +msgstr "PTP portları" + +#: usr/local/www/interfaces_bridge_edit.php:510 +#: usr/local/www/interfaces_bridge_edit.php:519 +#: usr/local/www/interfaces_bridge_edit.php:520 +#: usr/local/www/interfaces_bridge_edit.php:521 +msgid "" +"Set the interface as a point-to-point link. This is required for straight " +"transitions to forwarding and should be enabled on a direct link to another " +"RSTP-capable switch." +msgstr "" +"Arabirimi uçtan uca bağlantısı olarak ayarla. Bu yönlendirmeye doğrudan " +"geçiş için gereklidir ve RSTP becerisi olan başka bir switch'e doğrudan " +"bağlantı varsa etkinleştirilmelidir." + +#: usr/local/www/interfaces_bridge_edit.php:516 +#: usr/local/www/interfaces_bridge_edit.php:525 +#: usr/local/www/interfaces_bridge_edit.php:526 +#: usr/local/www/interfaces_bridge_edit.php:527 +msgid "Auto PTP ports" +msgstr "Otomatik PTP portları" + +#: usr/local/www/interfaces_bridge_edit.php:530 +#: usr/local/www/interfaces_bridge_edit.php:539 +#: usr/local/www/interfaces_bridge_edit.php:540 +#: usr/local/www/interfaces_bridge_edit.php:541 +msgid "" +"Automatically detect the point-to-point status on interface by checking the " +"full duplex link status. This is the default for interfaces added to the " +"bridge." +msgstr "" +"Full duplex bağlantı durumunu kontrol ederek uçtan uca durumunu otomatik " +"olarak bul. Köprüye eklenen arabirimler için öntanımlı ayar budur." + +#: usr/local/www/interfaces_bridge_edit.php:536 +#: usr/local/www/interfaces_bridge_edit.php:545 +#: usr/local/www/interfaces_bridge_edit.php:546 +#: usr/local/www/interfaces_bridge_edit.php:547 +msgid "" +"The interfaces selected here will be removed from default autoedge status." +msgstr "" +"Burada seçilen arabirimler varsayılan otomatik sınır durumundan çıkarılır." + +#: usr/local/www/interfaces_bridge_edit.php:540 +#: usr/local/www/interfaces_bridge_edit.php:549 +#: usr/local/www/interfaces_bridge_edit.php:550 +#: usr/local/www/interfaces_bridge_edit.php:551 +msgid "Sticky ports" +msgstr "Sabit portlar" + +#: usr/local/www/interfaces_bridge_edit.php:554 +#: usr/local/www/interfaces_bridge_edit.php:563 +#: usr/local/www/interfaces_bridge_edit.php:564 +#: usr/local/www/interfaces_bridge_edit.php:565 +msgid "" +"Mark an interface as a \"sticky\" interface. Dynamically learned address " +"entries are treated as static once entered into the cache. Sticky entries " +"are never aged out of the cache or replaced, even if the address is seen on " +"a different interface." +msgstr "" +"Arabirimi \"sabit\" diye işaretle. Dinamik olarak öğrenilen adres girdileri " +"önbelleğe girdikten sonra statik kabul edilir. Sabit girdiler adreslerle " +"farklı bir arabirim üzerimde karşılaşılsa da önbellekten çıkarılmaz." + +#: usr/local/www/interfaces_bridge_edit.php:561 +#: usr/local/www/interfaces_bridge_edit.php:570 +#: usr/local/www/interfaces_bridge_edit.php:571 +#: usr/local/www/interfaces_bridge_edit.php:572 +msgid "Private ports" +msgstr "Özel portlar" + +#: usr/local/www/interfaces_bridge_edit.php:575 +#: usr/local/www/interfaces_bridge_edit.php:584 +#: usr/local/www/interfaces_bridge_edit.php:585 +#: usr/local/www/interfaces_bridge_edit.php:586 +msgid "" +"Mark an interface as a \"private\" interface. A private interface does not " +"forward any traffic to any other port that is also a private interface." +msgstr "" +"Arabirimi \"özel\" bir arabirim olarak ata. Özel arabirimler diğer özel " +"arabirimlere trafik yönlendirmez." + +#: usr/local/www/interfaces_gif.php:64 usr/local/www/interfaces_gif.php:68 +msgid "" +"This gif TUNNEL cannot be deleted because it is still being used as an " +"interface." +msgstr "Bu GIF tüneli bir arabirim olarak kullanıldığı için silinemez." + +#: usr/local/www/interfaces_gif.php:107 usr/local/www/interfaces_gre.php:108 +#: usr/local/www/interfaces_gre.php:109 usr/local/www/interfaces_gif.php:108 +#: usr/local/www/interfaces_gre.php:113 usr/local/www/interfaces_gif.php:112 +msgid "Tunnel to..." +msgstr "Tünellenecek..." + +#: usr/local/www/interfaces_gif.php:123 usr/local/www/interfaces_gif.php:124 +#: usr/local/www/interfaces_gif.php:128 +msgid "Do you really want to delete this gif tunnel?" +msgstr "Bu GIF tünelini silmek istediğinize emin misiniz?" + +#: usr/local/www/interfaces_gif.php:134 usr/local/www/interfaces_gif.php:135 +#: usr/local/www/interfaces_gif.php:139 +msgid "GIF tunnels are configured here." +msgstr "GIF tünelleri burada yapılandırılır." + +#: usr/local/www/interfaces_gif_edit.php:72 +#: usr/local/www/interfaces_gif_edit.php:75 +msgid "" +"Parent interface,Local address, Remote tunnel address, Remote tunnel " +"network, Local tunnel address" +msgstr "" +"Ebeveyn arabirim, Yerel adres, Uzak tünel adresi, Uzak tünel ağı, Yerel " +"tünel adresi" + +#: usr/local/www/interfaces_gif_edit.php:78 +#: usr/local/www/interfaces_gre_edit.php:80 +#: usr/local/www/interfaces_gre_edit.php:80 +#: usr/local/www/interfaces_gif_edit.php:81 +msgid "The tunnel local and tunnel remote fields must have valid IP addresses." +msgstr "Yerel ve uzak tünel alanlarına geçerli IP adresleri girilmeli." + +#: usr/local/www/interfaces_gif_edit.php:87 +#: usr/local/www/interfaces_gif_edit.php:95 +#, php-format +msgid "A gif with the network %s is already defined." +msgstr "%s ağıyla bir GIF zaten tanımlı." + +#: usr/local/www/interfaces_gif_edit.php:136 +#: usr/local/www/interfaces_gif_edit.php:137 +#: usr/local/www/interfaces_gif_edit.php:138 +#: usr/local/www/interfaces_gif_edit.php:146 +msgid "GIF configuration" +msgstr "GIF yapılandırması" + +#: usr/local/www/interfaces_gif_edit.php:139 +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:141 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan_edit.php:153 +#: usr/local/www/interfaces_lagg_edit.php:134 +#: usr/local/www/interfaces_qinq_edit.php:288 +#: usr/local/www/interfaces_wireless_edit.php:84 +#: usr/local/www/interfaces_wireless_edit.php:159 +#: usr/local/www/interfaces_gif_edit.php:140 +#: usr/local/www/interfaces_vlan_edit.php:154 +#: usr/local/www/interfaces_qinq_edit.php:289 +#: usr/local/www/interfaces_gif_edit.php:141 +#: usr/local/www/interfaces_lagg_edit.php:135 +#: usr/local/www/interfaces_gre_edit.php:142 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:161 +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:142 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan_edit.php:157 +#: usr/local/www/interfaces_lagg_edit.php:148 +#: usr/local/www/interfaces_gif_edit.php:149 +#: usr/local/www/interfaces_qinq_edit.php:292 +msgid "Parent interface" +msgstr "Ebeveyn arabirim" + +#: usr/local/www/interfaces_gif_edit.php:156 +#: usr/local/www/interfaces_gif_edit.php:157 +#: usr/local/www/interfaces_gif_edit.php:158 +#: usr/local/www/interfaces_gif_edit.php:169 +msgid "" +"The interface here servers as the local address to be used for the gif " +"tunnel." +msgstr "" +"Buradaki arabirim GIF tüneli olarak kullanılacak yerel uca karşılık gelir." + +#: usr/local/www/interfaces_gif_edit.php:159 +#: usr/local/www/interfaces_gif_edit.php:160 +#: usr/local/www/interfaces_gif_edit.php:161 +#: usr/local/www/interfaces_gif_edit.php:172 +msgid "gif remote address" +msgstr "GIF uzak adresi" + +#: usr/local/www/interfaces_gif_edit.php:163 +#: usr/local/www/interfaces_gif_edit.php:164 +#: usr/local/www/interfaces_gif_edit.php:165 +#: usr/local/www/interfaces_gif_edit.php:176 +msgid "Peer address where encapsulated gif packets will be sent. " +msgstr "Kapsüllenmiş GIF paketlerinin gönderileceği eş adresi." + +#: usr/local/www/interfaces_gif_edit.php:166 +#: usr/local/www/interfaces_gif_edit.php:167 +#: usr/local/www/interfaces_gif_edit.php:168 +#: usr/local/www/interfaces_gif_edit.php:179 +msgid "gif tunnel local address" +msgstr "GIF tünel yerel adresi" + +#: usr/local/www/interfaces_gif_edit.php:170 +#: usr/local/www/interfaces_gif_edit.php:171 +#: usr/local/www/interfaces_gif_edit.php:172 +#: usr/local/www/interfaces_gif_edit.php:183 +msgid "Local gif tunnel endpoint" +msgstr "GIF tüneli yerel ucu" + +#: usr/local/www/interfaces_gif_edit.php:173 +#: usr/local/www/interfaces_gif_edit.php:174 +#: usr/local/www/interfaces_gif_edit.php:175 +#: usr/local/www/interfaces_gif_edit.php:186 +msgid "gif tunnel remote address " +msgstr "GIF tüneli uzak adresi" + +#: usr/local/www/interfaces_gif_edit.php:188 +#: usr/local/www/interfaces_gif_edit.php:189 +#: usr/local/www/interfaces_gif_edit.php:200 +msgid "" +"Remote gif address endpoint. The subnet part is used for determining the " +"network that is tunnelled." +msgstr "" +"Uzak GIF adresi bitiş noktası. Bu alt ağ tünel ağın sonlandırılmasında " +"kullanıldı." + +#: usr/local/www/interfaces_gif_edit.php:191 +#: usr/local/www/interfaces_gif_edit.php:192 +#: usr/local/www/interfaces_gif_edit.php:203 +msgid "Route caching " +msgstr "Rota önbellekleme" + +#: usr/local/www/interfaces_gif_edit.php:195 +#: usr/local/www/interfaces_gif_edit.php:196 +#: usr/local/www/interfaces_gif_edit.php:207 +msgid "" +"Specify if route caching can be enabled. Be careful with these settings on " +"dynamic networks. " +msgstr "" +"Rota önbelleklemenin etkinleştirilip etkinleştirilmeyeceğini seçiniz. " +"Dinamik ağlarda bu ayarları dikkatli kullanınız." + +#: usr/local/www/interfaces_gif_edit.php:198 +#: usr/local/www/interfaces_gif_edit.php:199 +#: usr/local/www/interfaces_gif_edit.php:210 +msgid "ECN friendly behaviour" +msgstr "ECN dostu davranış" + +#: usr/local/www/interfaces_gif_edit.php:203 +#: usr/local/www/interfaces_gif_edit.php:204 +#: usr/local/www/interfaces_gif_edit.php:215 +msgid "" +"Note that the ECN friendly behavior violates RFC2893. This should be used " +"in mutual agreement with the peer." +msgstr "" +"ECN dostu davranışın RFC2893'ü ihlal ettiğini unutmayınız. Bu ayar sadece " +"diğer uçla anlaşılarak kullanılmalıdır." + +#: usr/local/www/interfaces_gre.php:65 usr/local/www/interfaces_gre.php:69 +msgid "" +"This GRE tunnel cannot be deleted because it is still being used as an " +"interface." +msgstr "Bu GRE tüneli halen bir arabirim olarak kullanıldığından silinemiyor." + +#: usr/local/www/interfaces_gre.php:124 usr/local/www/interfaces_gre.php:125 +#: usr/local/www/interfaces_gre.php:129 +msgid "Do you really want to delete this GRE tunnel?" +msgstr "GRE tünelini silmek istediğinize emin misiniz?" + +#: usr/local/www/interfaces_gre.php:133 usr/local/www/interfaces_gre.php:134 +#: usr/local/www/interfaces_gre.php:138 +msgid "" +"Here you can configure Generic Routing Encapsulation (GRE - RFC 2784) " +"tunnels." +msgstr "" +"Bu kısımda GRE (Genel Rota Sarmalama - RFC2784) yapılandırmasını " +"gerçekleştirebilirsiniz." + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Local address" +msgstr "Yerel adres" + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Remote tunnel address" +msgstr "Uzak tünel adresi" + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Remote tunnel network" +msgstr "Uzak tünel ağı" + +#: usr/local/www/interfaces_gre_edit.php:74 +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Local tunnel address" +msgstr "Yerel tünel adresi" + +#: usr/local/www/interfaces_gre_edit.php:88 +#: usr/local/www/interfaces_gre_edit.php:88 +#, php-format +msgid "A GRE tunnel with the network %s is already defined." +msgstr "Sistemde zaten %s ağında bir GRE tüneli tanımlı durumda." + +#: usr/local/www/interfaces_gre_edit.php:138 +#: usr/local/www/interfaces_gre_edit.php:139 +#: usr/local/www/interfaces_gre_edit.php:139 +msgid "GRE configuration" +msgstr "GRE yapılandırması" + +#: usr/local/www/interfaces_gre_edit.php:158 +#: usr/local/www/interfaces_gre_edit.php:159 +#: usr/local/www/interfaces_gre_edit.php:159 +msgid "" +"The interface here serves as the local address to be used for the GRE tunnel." +msgstr "Bu arabirim GRE Tüneli için kullanılacak yerel adres olarak çalışır." + +#: usr/local/www/interfaces_gre_edit.php:161 +#: usr/local/www/interfaces_gre_edit.php:162 +#: usr/local/www/interfaces_gre_edit.php:162 +msgid "GRE remote address" +msgstr "GRE uzak adres" + +#: usr/local/www/interfaces_gre_edit.php:165 +#: usr/local/www/interfaces_gre_edit.php:166 +#: usr/local/www/interfaces_gre_edit.php:166 +msgid "Peer address where encapsulated GRE packets will be sent " +msgstr "Sarmalanmış GRE paketlerinin gönderileceği eş uç adresi" + +#: usr/local/www/interfaces_gre_edit.php:168 +#: usr/local/www/interfaces_gre_edit.php:169 +#: usr/local/www/interfaces_gre_edit.php:169 +msgid "GRE tunnel local address " +msgstr "GRE tüneli yerel adresi" + +#: usr/local/www/interfaces_gre_edit.php:172 +#: usr/local/www/interfaces_gre_edit.php:173 +#: usr/local/www/interfaces_gre_edit.php:173 +msgid "Local GRE tunnel endpoint" +msgstr "Yerel GRE tüneli ucu" + +#: usr/local/www/interfaces_gre_edit.php:175 +#: usr/local/www/interfaces_gre_edit.php:176 +#: usr/local/www/interfaces_gre_edit.php:176 +msgid "GRE tunnel remote address " +msgstr "GRE tünel uzak adresi " + +#: usr/local/www/interfaces_gre_edit.php:190 +#: usr/local/www/interfaces_gre_edit.php:189 +#: usr/local/www/interfaces_gre_edit.php:190 +msgid "" +"Remote GRE address endpoint. The subnet part is used for the determining the " +"network that is tunneled." +msgstr "Uzak GRE adres ucu. Altağ kısmı tünellenen ağı belirlemekte kullanılır." + +#: usr/local/www/interfaces_gre_edit.php:193 +#: usr/local/www/interfaces_gre_edit.php:192 +#: usr/local/www/interfaces_gre_edit.php:193 +msgid "Mobile tunnel" +msgstr "Mobil tünel" + +#: usr/local/www/interfaces_gre_edit.php:197 +#: usr/local/www/interfaces_gre_edit.php:196 +#: usr/local/www/interfaces_gre_edit.php:197 +msgid "Specify which encapsulation method the tunnel should use. " +msgstr "Tünelin hangi sarmalama yöntemini kullanacağını seçiniz. " + +#: usr/local/www/interfaces_gre_edit.php:200 +#: usr/local/www/interfaces_gre_edit.php:199 +#: usr/local/www/interfaces_gre_edit.php:200 +msgid "Route search type" +msgstr "Rota arama türü" + +#: usr/local/www/interfaces_gre_edit.php:205 +#: usr/local/www/interfaces_gre_edit.php:204 +#: usr/local/www/interfaces_gre_edit.php:205 +msgid "" +"For correct operation, the GRE device needs a route to the destination that " +"is less specific than the one over the tunnel. (Basically, there needs to " +"be a route to the decapsulating host that does not run over the tunnel, as " +"this would be a loop." +msgstr "" +"Doğru bir şekilde çalışması için, GRE cihazının hedefe tünel üzerinden " +"gidenden daha az özelleşmiş olması gerekir. (Özetle, çözümleme işlemini " +"yapan istemciye tünel üzerinden gitmeyen bir rota olması gerekir, çünkü aksi " +"taktirde bir döngü oluşur.)" + +#: usr/local/www/interfaces_gre_edit.php:212 +#: usr/local/www/interfaces_gre_edit.php:211 +#: usr/local/www/interfaces_gre_edit.php:212 +msgid "WCCP version" +msgstr "WCCP sürümü" + +#: usr/local/www/interfaces_gre_edit.php:216 +#: usr/local/www/interfaces_gre_edit.php:215 +#: usr/local/www/interfaces_gre_edit.php:216 +msgid "" +"Specify which WCCP encapsulation(version 1 or 2) method the tunnel should use" +msgstr "" +"Tünelin hangi WCCP sarmalama yöntemini (sürüm 1 veya 2) kullanacağını " +"belirtin" + +#: usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/system_routes.php:117 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/system_authservers.php:422 +#: usr/local/www/system_gateway_groups.php:110 +#: usr/local/www/system_gateways.php:143 +#: usr/local/www/system_groupmanager.php:241 +#: usr/local/www/system_groupmanager_addprivs.php:169 +#: usr/local/www/system_usermanager.php:441 +#: usr/local/www/system_usermanager.php:790 +#: usr/local/www/system_usermanager_addprivs.php:168 +#: usr/local/www/system_usermanager_settings.php:114 +#: usr/local/www/system_usermanager.php:439 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/system_groupmanager_addprivs.php:167 +#: usr/local/www/system_usermanager.php:789 +#: usr/local/www/system_gateway_groups.php:111 +#: usr/local/www/system_authservers.php:427 +#: usr/local/www/system_groupmanager.php:241 +#: usr/local/www/system_usermanager_addprivs.php:168 +#: usr/local/www/system_routes.php:121 usr/local/www/interfaces_groups.php:63 +#: usr/local/www/interfaces_groups_edit.php:44 +#: usr/local/www/system_authservers.php:434 +#: usr/local/www/system_groupmanager_addprivs.php:167 +#: usr/local/www/system_usermanager_settings.php:114 +#: usr/local/www/system_usermanager.php:439 +#: usr/local/www/system_usermanager.php:789 +#: usr/local/www/system_gateways.php:143 +#: usr/local/www/system_gateway_groups.php:111 +msgid "Groups" +msgstr "Gruplar" + +#: usr/local/www/interfaces_groups.php:127 +#: usr/local/www/system_groupmanager.php:443 +#: usr/local/www/system_groupmanager.php:446 +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/system_groupmanager.php:446 +#: usr/local/www/interfaces_groups.php:128 +msgid "edit group" +msgstr "grup düzenle" + +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/interfaces_groups.php:129 +#: usr/local/www/interfaces_groups.php:129 +msgid "" +"Do you really want to delete this group? All elements that still use it will " +"become invalid (e.g. filter rules)!" +msgstr "" +"Bu grubu silmek istediğinize emin misiniz? Bu grubu kullanan öğeler (örn. " +"filtre kuralları) devre dışı kalacaktır." + +#: usr/local/www/interfaces_groups.php:128 +#: usr/local/www/interfaces_groups.php:129 +#: usr/local/www/interfaces_groups.php:129 +msgid "delete ifgroupentry" +msgstr "eğer grubu girdisini sil" + +#: usr/local/www/interfaces_groups.php:140 +#: usr/local/www/interfaces_groups.php:141 +#: usr/local/www/interfaces_groups.php:141 +msgid "add a new group" +msgstr "yeni grup ekle" + +#: usr/local/www/interfaces_groups.php:148 +#: usr/local/www/interfaces_groups.php:149 +#: usr/local/www/interfaces_groups.php:149 +msgid "" +"Interface Groups allow you to create rules that apply to multiple interfaces " +"without duplicating the rules. If you remove members from an interface " +"group, the group rules no longer apply to that interface." +msgstr "" +"Arabirim Grupları kuralların birden fazla kopyasını çıkarmadan birden fazla " +"arabirime uygulanacak kurallar oluşturmanıza olanak verir. Bir arabirim " +"grubunun bir üyesi silindiğinde grup kuralları artık o arabirime uygulanmaz." + +#: usr/local/www/interfaces_groups_edit.php:71 +#: usr/local/www/interfaces_groups_edit.php:72 +#: usr/local/www/interfaces_groups_edit.php:72 +msgid "Group name already exists!" +msgstr "Grup adı sistemde mevcut!" + +#: usr/local/www/interfaces_groups_edit.php:74 +#: usr/local/www/interfaces_groups_edit.php:75 +#: usr/local/www/interfaces_groups_edit.php:75 +msgid "Only letters A-Z are allowed as the group name." +msgstr "Grup adında sadece İngilizce A-Z harfleri kullanılabilir." + +#: usr/local/www/interfaces_groups_edit.php:248 +#: usr/local/www/interfaces_groups_edit.php:249 +#: usr/local/www/interfaces_groups_edit.php:249 +msgid "Interface Groups Edit" +msgstr "Arabirim Gruplarını Düzenle" + +#: usr/local/www/interfaces_groups_edit.php:251 +#: usr/local/www/status_gateway_groups.php:74 +#: usr/local/www/system_gateway_groups.php:120 +#: usr/local/www/system_gateway_groups_edit.php:158 +#: usr/local/www/system_gateway_groups_edit.php:161 +#: usr/local/www/system_groupmanager.php:117 +#: usr/local/www/system_gateway_groups_edit.php:169 +#: usr/local/www/system_gateway_groups_edit.php:172 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateway_groups_edit.php:231 +#: usr/local/www/system_gateway_groups.php:121 +#: usr/local/www/interfaces_groups_edit.php:252 +#: usr/local/www/status_gateway_groups.php:75 +#: usr/local/www/system_groupmanager.php:117 +#: usr/local/www/interfaces_groups_edit.php:252 +#: usr/local/www/system_gateway_groups_edit.php:228 +#: usr/local/www/system_gateway_groups_edit.php:231 +#: usr/local/www/status_gateway_groups.php:75 +#: usr/local/www/system_gateway_groups.php:121 +msgid "Group Name" +msgstr "Grup Adı" + +#: usr/local/www/interfaces_groups_edit.php:255 +#: usr/local/www/interfaces_groups_edit.php:256 +#: usr/local/www/interfaces_groups_edit.php:256 +msgid "No numbers or spaces are allowed. Only characters in a-zA-Z" +msgstr "" +"Sayı ve boşluk kullanılamaz. Sadece İngilizce a-z ve A-Z harfleri " +"kullanılabilir." + +#: usr/local/www/interfaces_groups_edit.php:269 +#: usr/local/www/interfaces_qinq_edit.php:347 +#: usr/local/www/interfaces_qinq_edit.php:348 +#: usr/local/www/interfaces_groups_edit.php:270 +#: usr/local/www/interfaces_groups_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:351 +msgid "Member (s)" +msgstr "Üye (ler)" + +#: usr/local/www/firewall_aliases.php:103 +#: usr/local/www/firewall_aliases.php:106 +#: usr/local/www/firewall_aliases.php:107 +#: usr/local/www/firewall_aliases.php:107 +#, php-format +msgid "Cannot delete alias. Currently in use by %s" +msgstr "%s tarafından kullanıldığı için grup silinemiyor." + +#: usr/local/www/firewall_aliases.php:160 +#: usr/local/www/firewall_aliases.php:163 +#: usr/local/www/firewall_aliases.php:167 +#: usr/local/www/firewall_aliases.php:167 +msgid "The alias list has been changed." +msgstr "Grup listesi değiştirildi." + +#: usr/local/www/firewall_aliases.php:166 +#: usr/local/www/services_igmpproxy.php:97 +#: usr/local/www/firewall_aliases.php:169 +#: usr/local/www/firewall_aliases.php:189 +#: usr/local/www/firewall_aliases.php:189 +#: usr/local/www/services_igmpproxy.php:97 +msgid "Values" +msgstr "Değerler" + +#: usr/local/www/firewall_aliases.php:172 +#: usr/local/www/firewall_aliases.php:218 +#: usr/local/www/firewall_aliases.php:175 +#: usr/local/www/firewall_aliases.php:221 +msgid "add a new alias" +msgstr "yeni grup ekle" + +#: usr/local/www/firewall_aliases.php:204 +#: usr/local/www/firewall_schedule.php:220 +#: usr/local/www/firewall_aliases.php:207 +#: usr/local/www/firewall_schedule.php:220 +msgid "edit alias" +msgstr "grubu düzenle" + +#: usr/local/www/firewall_aliases.php:205 +#: usr/local/www/firewall_aliases.php:208 +#: usr/local/www/firewall_aliases.php:256 +#: usr/local/www/firewall_aliases.php:256 +msgid "" +"Do you really want to delete this alias? All elements that still use it will " +"become invalid (e.g. filter rules)!" +msgstr "" +"Bu grup tanımını silmek istediğinize emin misiniz? Bu tanımı kullanan tüm " +"nesneler (örn. filtre kuralları) devre dışı kalacaktır!" + +#: usr/local/www/firewall_aliases.php:205 +#: usr/local/www/firewall_schedule.php:221 +#: usr/local/www/firewall_aliases.php:208 +#: usr/local/www/firewall_schedule.php:221 +msgid "delete alias" +msgstr "grubu sil" + +#: usr/local/www/firewall_aliases.php:221 +#: usr/local/www/firewall_aliases.php:224 +#: usr/local/www/firewall_aliases.php:275 +#: usr/local/www/firewall_aliases.php:275 +msgid "Bulk import aliases from list" +msgstr "Grupları listeden içeri aktar" + +#: usr/local/www/firewall_aliases.php:229 +#: usr/local/www/firewall_aliases.php:232 +#: usr/local/www/firewall_aliases.php:284 +#: usr/local/www/firewall_aliases.php:284 +msgid "" +"Aliases act as placeholders for real hosts, networks or ports. They can be " +"used to minimize the number of changes that have to be made if a host, " +"network or port changes. You can enter the name of an alias instead of the " +"host, network or port in all fields that have a red background. The alias " +"will be resolved according to the list above. If an alias cannot be resolved " +"(e.g. because you deleted it), the corresponding element (e.g. filter/NAT/" +"shaper rule) will be considered invalid and skipped." +msgstr "" +"Gruplar gerçek bilgisayarlar, ağlar ya da portlar için taşıyıcı gibidir. " +"Bilgisayarlar, ağlar ya da portlar değiştiğinde yapılması gereken değişiklik " +"sayısını azaltmak için kullanılabilirler. Arkaplan rengi kırmızı tüm " +"alanlarda IP, ağ veya port girmek yerine grup adı girebilirsiniz. Girdiğiniz " +"grup yukarıdaki listeye göre çözümlenir. Eğer bir grup çözümlenemezse (örn. " +"sildiğiniz için), grup adının girildiği öğe (örn. güvenlik duvarı kuralı) " +"geçersiz kabul edilir ve atlanır." + +#: usr/local/www/firewall_aliases_edit.php:105 +#: usr/local/www/firewall_aliases_edit.php:105 +#, php-format +msgid "Sorry, an interface is already named %s." +msgstr "Üzgünüm,%s adında bir arabirim zaten var." + +#: usr/local/www/firewall_aliases_edit.php:140 +#: usr/local/www/firewall_aliases_edit.php:142 +#: usr/local/www/firewall_aliases_edit.php:140 +#: usr/local/www/firewall_aliases_edit.php:142 +msgid "Reserved word used for alias name." +msgstr "Grup için bu isim kullanılamaz." + +#: usr/local/www/firewall_aliases_edit.php:145 +#: usr/local/www/firewall_aliases_edit.php:145 +msgid "" +"The alias name must be less than 32 characters long and may only consist of " +"the characters" +msgstr "Grup adı sadece karakterlerden oluşmalıdır ve 32 karakteri geçmemelidir" + +#: usr/local/www/firewall_aliases_edit.php:187 +#: usr/local/www/firewall_aliases_edit.php:242 +#: usr/local/www/firewall_aliases_edit.php:188 +#: usr/local/www/firewall_aliases_edit.php:244 +#: usr/local/www/firewall_aliases_edit.php:188 +#: usr/local/www/firewall_aliases_edit.php:244 +msgid "You must provide a valid URL." +msgstr "Geçerli bir URL girmelisiniz." + +#: usr/local/www/firewall_aliases_edit.php:190 +#: usr/local/www/firewall_aliases_edit.php:191 +#: usr/local/www/firewall_aliases_edit.php:191 +msgid "Unable to fetch usable data." +msgstr "Kullanılabilir veri toplanamadı." + +#: usr/local/www/firewall_aliases_edit.php:235 +#: usr/local/www/firewall_aliases_edit.php:237 +#: usr/local/www/firewall_aliases_edit.php:237 +msgid "You must provide a valid URL. Could not fetch usable data." +msgstr "Geçerli bir URL girmelisiniz. Kullanılabilir veri toplanamadı." + +#: usr/local/www/firewall_aliases_edit.php:261 +#: usr/local/www/firewall_aliases_edit.php:264 +#: usr/local/www/firewall_aliases_edit.php:264 +msgid "is not a valid port or alias." +msgstr "geçerli bir port veya grup adı değil." + +#: usr/local/www/firewall_aliases_edit.php:266 +#: usr/local/www/firewall_aliases_edit.php:269 +#: usr/local/www/firewall_aliases_edit.php:269 +#, php-format +msgid "%1$s is not a valid %2$s alias." +msgstr "%1$s geçerli bir %2$s grup adı değil." + +#: usr/local/www/firewall_aliases_edit.php:281 +#: usr/local/www/firewall_aliases_edit.php:284 +#: usr/local/www/firewall_aliases_edit.php:284 +#, php-format +msgid "Entry added %s" +msgstr "%s girdisi eklendi" + +#: usr/local/www/firewall_aliases_edit.php:285 +#: usr/local/www/firewall_aliases_edit.php:288 +#: usr/local/www/firewall_aliases_edit.php:288 +#, php-format +msgid "" +"The alias(es): %s cannot be nested because they are not of the same type." +msgstr "Grup ad(lar)ı: %s aynı türde olmadığından gruplanamaz." + +#: usr/local/www/firewall_aliases_edit.php:453 +#: usr/local/www/firewall_aliases_edit.php:605 +#: usr/local/www/firewall_aliases_edit.php:456 +#: usr/local/www/firewall_aliases_edit.php:610 +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:613 +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:613 +msgid "Network(s)" +msgstr "Ağ(lar)" + +#: usr/local/www/firewall_aliases_edit.php:454 +#: usr/local/www/services_igmpproxy_edit.php:224 +#: usr/local/www/services_unbound_acls.php:237 +#: usr/local/www/services_igmpproxy_edit.php:226 +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/services_igmpproxy_edit.php:226 +msgid "CIDR" +msgstr "CIDR" + +#: usr/local/www/firewall_aliases_edit.php:456 +#: usr/local/www/firewall_aliases_edit.php:604 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:459 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/firewall_aliases_edit.php:619 +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:622 +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:622 +msgid "Host(s)" +msgstr "İstemci(ler)" + +#: usr/local/www/firewall_aliases_edit.php:457 +#: usr/local/www/diag_states_summary.php:150 +#: usr/local/www/services_dnsmasq.php:245 +#: usr/local/www/services_dnsmasq.php:312 usr/local/www/vpn_pppoe_edit.php:538 +#: usr/local/www/services_dnsmasq.php:333 +#: usr/local/www/services_unbound.php:281 +#: usr/local/www/services_unbound.php:348 +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/diag_states_summary.php:139 +#: usr/local/www/vpn_pppoe_edit.php:539 usr/local/www/services_dnsmasq.php:246 +#: usr/local/www/services_dnsmasq.php:334 +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_aliases.php:176 +#: usr/local/www/diag_states_summary.php:141 +#: usr/local/www/diag_states_summary.php:141 +#: usr/local/www/firewall_aliases.php:176 usr/local/www/vpn_pppoe_edit.php:542 +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/services_dnsmasq.php:271 +#: usr/local/www/services_dnsmasq.php:359 +msgid "IP" +msgstr "IP" + +#: usr/local/www/firewall_aliases_edit.php:458 +#: usr/local/www/firewall_aliases_edit.php:606 +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:611 +#: usr/local/www/firewall_aliases_edit.php:463 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:463 +#: usr/local/www/firewall_aliases_edit.php:614 +msgid "Port(s)" +msgstr "Port(lar)" + +#: usr/local/www/firewall_aliases_edit.php:460 +#: usr/local/www/firewall_aliases_edit.php:608 +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/firewall_aliases_edit.php:463 +#: usr/local/www/firewall_aliases_edit.php:613 +#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828 +#: usr/local/www/firewall_aliases_edit.php:465 +#: usr/local/www/firewall_aliases_edit.php:616 +#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759 +#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776 +#: usr/local/www/firewall_aliases_edit.php:465 +#: usr/local/www/firewall_aliases_edit.php:616 +msgid "URL" +msgstr "URL" + +#: usr/local/www/firewall_aliases_edit.php:461 +#: usr/local/www/firewall_aliases_edit.php:609 +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_aliases_edit.php:614 +#: usr/local/www/firewall_aliases_edit.php:466 +#: usr/local/www/firewall_aliases_edit.php:617 +#: usr/local/www/firewall_aliases_edit.php:466 +#: usr/local/www/firewall_aliases_edit.php:617 +msgid "URL Table" +msgstr "URL Tablosu" + +#: usr/local/www/firewall_aliases_edit.php:462 +#: usr/local/www/firewall_aliases_edit.php:465 +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:467 +msgid "Update Freq." +msgstr "Güncelleme Sıklığı." + +#: usr/local/www/firewall_aliases_edit.php:464 +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:469 +#: usr/local/www/firewall_aliases_edit.php:469 +msgid "" +"Networks are specified in CIDR format. Select the CIDR mask that pertains " +"to each entry. /32 specifies a single IPv4 host, /128 specifies a single " +"IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, " +"etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 " +"or /128 for IPv6. You may also enter an IP range such as " +"192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to " +"fill the range." +msgstr "" +"Ağlar bit sayısıyla CIDR biçiminde belirtilir. Her girdi için bir CIDR " +"maskesi seçmelisiniz. /32 tek bir istemciyi belirtir, /128 tek IPv6 sunucusu " +"belirtir, /24 255.255.255.0 belirtir, /64 normal IPv6 ağ belirtir, vb. /32 " +"maskesiyle IPv4 yada IPv6 için /128 maskesi ile sunucu isimleri (FQDNler) de " +"belirtebilirsiniz. 192.168.1.1-192.168.1.254 gibi IP aralıkları da " +"belirtebilirsiniz, bu durumda aralığı belirtecek CIDR otomatik belirlenir." + +#: usr/local/www/firewall_aliases_edit.php:465 +msgid "" +"Enter as many hosts as you would like. Hosts must be specified by their IP " +"address." +msgstr "" +"İstediğiniz sayıda istemci adresi girebilirsiniz. İstemcileri IP " +"adresleriyle girebilirsiniz." + +#: usr/local/www/firewall_aliases_edit.php:466 +#: usr/local/www/firewall_aliases_edit.php:469 +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:471 +msgid "" +"Enter as many ports as you wish. Port ranges can be expressed by seperating " +"with a colon." +msgstr "" +"İstediğiniz sayıda port girebilirsiniz. Port aralığı belirtmek için iki sayı " +"arasına girmelisiniz." + +#: usr/local/www/firewall_aliases_edit.php:467 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/firewall_aliases_edit.php:472 +#: usr/local/www/firewall_aliases_edit.php:472 +#, php-format +msgid "" +"Enter as many URLs as you wish. After saving %s will download the URL and " +"import the items into the alias. Use only with small sets of IP addresses " +"(less than 3000)." +msgstr "" +"İstediğiniz sayıda URL girebilirsiniz. Kaydettikten sonra %s URL'yi indirip " +"öğeleri gruba aktarır. Sadece küçük IP adresi gruplarında (3000'den az) " +"kullanın." + +#: usr/local/www/firewall_aliases_edit.php:468 +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:473 +#: usr/local/www/firewall_aliases_edit.php:473 +#, php-format +msgid "" +"Enter a single URL containing a large number of IPs and/or Subnets. After " +"saving %s will download the URL and create a table file containing these " +"addresses. This will work with large numbers of addresses (30,000+) or small " +"numbers." +msgstr "" +"Çok sayıda IP veya altağ içeren tek bir URL girin. Kaydettikten sonra %s " +"URL'yi indirip bu adresleri içeren bir tablo dosyası oluşturur. Hem küçük " +"sayılarla hem de çok sayıda adresle (300 binden fazla) çalışır." + +#: usr/local/www/firewall_aliases_edit.php:471 +#: usr/local/www/firewall_aliases_edit.php:607 +#: usr/local/www/firewall_aliases_edit.php:474 +#: usr/local/www/firewall_aliases_edit.php:612 +#: usr/local/www/firewall_aliases_edit.php:476 +#: usr/local/www/firewall_aliases_edit.php:615 +#: usr/local/www/firewall_aliases_edit.php:476 +#: usr/local/www/firewall_aliases_edit.php:615 +msgid "OpenVPN Users" +msgstr "OpenVPN Kullanıcıları" + +#: usr/local/www/firewall_aliases_edit.php:472 +#: usr/local/www/firewall_aliases_edit.php:475 +#: usr/local/www/firewall_aliases_edit.php:477 +#: usr/local/www/firewall_aliases_edit.php:477 +msgid "Enter as many usernames as you wish." +msgstr "İstediğiniz sayıda kullanıcı adı girebilirsiniz." + +#: usr/local/www/firewall_aliases_edit.php:573 +#: usr/local/www/firewall_aliases_edit.php:578 +#: usr/local/www/firewall_aliases_edit.php:581 +#: usr/local/www/firewall_aliases_edit.php:581 +msgid "Alias Edit" +msgstr "Grup Düzenle" + +#: usr/local/www/firewall_aliases_edit.php:620 +#: usr/local/www/firewall_aliases_edit.php:625 +#: usr/local/www/firewall_aliases_edit.php:628 +#: usr/local/www/firewall_aliases_edit.php:628 +msgid "Item information" +msgstr "Öğe Bilgisi" + +#: usr/local/www/firewall_aliases_edit.php:665 +#: usr/local/www/services_dnsmasq_edit.php:260 +#: usr/local/www/system_certmanager.php:782 +#: usr/local/www/firewall_aliases_edit.php:670 +#: usr/local/www/services_dnsmasq_edit.php:261 +#: usr/local/www/services_router_advertisements.php:343 +#: usr/local/www/firewall_aliases_edit.php:673 +#: usr/local/www/services_router_advertisements.php:343 +#: usr/local/www/system_certmanager.php:807 +#: usr/local/www/firewall_aliases_edit.php:673 +#: usr/local/www/services_dnsmasq_edit.php:261 +msgid "remove this entry" +msgstr "bu girdiyi sil" + +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/diag_backup.php:111 usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:111 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:140 usr/local/www/fbegin.inc:128 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/diag_backup.php:188 usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/fbegin.inc:137 usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:165 usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +#: usr/local/www/firewall_nat_edit.php:439 usr/local/www/firewall_nat.php:165 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_npt.php:78 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/diag_backup.php:188 +#: usr/local/www/firewall_nat_1to1_edit.php:221 usr/local/www/fbegin.inc:129 +#: usr/local/www/firewall_nat_out_edit.php:317 +msgid "NAT" +msgstr "NAT" + +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1.php:93 +#: usr/local/www/firewall_nat_1to1_edit.php:216 +#: usr/local/www/firewall_nat_out.php:300 usr/local/www/firewall_nat.php:182 +#: usr/local/www/firewall_nat_npt.php:93 +#: usr/local/www/firewall_nat_out.php:310 +#: usr/local/www/firewall_nat_1to1_edit.php:223 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +#: usr/local/www/firewall_nat.php:187 usr/local/www/firewall_nat.php:187 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_npt.php:93 +#: usr/local/www/firewall_nat_1to1.php:78 +#: usr/local/www/firewall_nat_1to1.php:93 +#: usr/local/www/firewall_nat_1to1_edit.php:221 +msgid "1:1" +msgstr "1:1" + +#: usr/local/www/firewall_nat_1to1.php:87 usr/local/www/firewall_nat.php:175 +#: usr/local/www/firewall_nat_npt.php:87 usr/local/www/firewall_nat.php:180 +#: usr/local/www/firewall_nat.php:180 usr/local/www/firewall_nat_npt.php:87 +#: usr/local/www/firewall_nat_1to1.php:87 +msgid "The NAT configuration has been changed" +msgstr "NAT yapılandırması değiştirildi" + +#: usr/local/www/firewall_nat_1to1.php:92 +#: usr/local/www/firewall_nat_edit.php:438 +#: usr/local/www/firewall_nat_out.php:299 usr/local/www/firewall_nat.php:160 +#: usr/local/www/firewall_nat.php:181 usr/local/www/firewall_nat_npt.php:92 +#: usr/local/www/firewall_nat_out.php:309 +#: usr/local/www/firewall_nat_edit.php:445 +#: usr/local/www/firewall_nat_out.php:310 usr/local/www/firewall_nat.php:165 +#: usr/local/www/firewall_nat.php:186 usr/local/www/firewall_nat_edit.php:444 +#: usr/local/www/firewall_nat_edit.php:439 usr/local/www/firewall_nat.php:165 +#: usr/local/www/firewall_nat.php:186 usr/local/www/firewall_nat_out.php:310 +#: usr/local/www/firewall_nat_npt.php:92 +#: usr/local/www/firewall_nat_1to1.php:92 +msgid "Port Forward" +msgstr "Port Yönlendirme" + +#: usr/local/www/firewall_nat_1to1.php:94 +#: usr/local/www/firewall_nat_out.php:283 +#: usr/local/www/firewall_nat_out.php:301 +#: usr/local/www/firewall_nat_out_edit.php:300 +#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat_npt.php:94 +#: usr/local/www/firewall_nat_out.php:293 +#: usr/local/www/firewall_nat_out.php:311 +#: usr/local/www/firewall_nat_out_edit.php:313 +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_out.php:312 usr/local/www/firewall_nat.php:188 +#: usr/local/www/firewall_nat.php:188 usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_out.php:312 +#: usr/local/www/firewall_nat_npt.php:94 +#: usr/local/www/firewall_nat_1to1.php:94 +#: usr/local/www/firewall_nat_out_edit.php:317 +msgid "Outbound" +msgstr "Dışarı giden" + +#: usr/local/www/firewall_nat_1to1.php:95 +#: usr/local/www/firewall_nat_out.php:302 usr/local/www/firewall_nat.php:184 +#: usr/local/www/firewall_nat_npt.php:78 usr/local/www/firewall_nat_npt.php:95 +#: usr/local/www/firewall_nat_npt_edit.php:140 +#: usr/local/www/firewall_nat_out.php:312 +#: usr/local/www/firewall_nat_npt_edit.php:145 +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat.php:189 +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_npt.php:78 usr/local/www/firewall_nat_npt.php:95 +#: usr/local/www/firewall_nat_1to1.php:95 +#: usr/local/www/firewall_nat_npt_edit.php:144 +#, fuzzy +msgid "NPt" +msgstr "NPt" + +#: usr/local/www/firewall_nat_1to1.php:105 +#: usr/local/www/firewall_nat_1to1.php:105 +msgid "External IP" +msgstr "Dış IP" + +#: usr/local/www/firewall_nat_1to1.php:106 +#: usr/local/www/firewall_nat_1to1_edit.php:328 +#: usr/local/www/status_upnp.php:87 +#: usr/local/www/firewall_nat_1to1_edit.php:335 +#: usr/local/www/firewall_nat_1to1_edit.php:333 +#: usr/local/www/status_upnp.php:88 usr/local/www/firewall_nat_1to1.php:106 +#: usr/local/www/firewall_nat_1to1_edit.php:333 +#: usr/local/www/status_upnp.php:88 +msgid "Internal IP" +msgstr "İç IP" + +#: usr/local/www/firewall_nat_1to1.php:107 +#: usr/local/www/firewall_nat_1to1.php:107 +msgid "Destination IP" +msgstr "Hedef IP" + +#: usr/local/www/firewall_nat_1to1.php:113 +#: usr/local/www/firewall_nat_1to1.php:172 +#: usr/local/www/firewall_nat_npt.php:112 +#: usr/local/www/firewall_nat_npt.php:170 +#: usr/local/www/firewall_nat_npt.php:112 +#: usr/local/www/firewall_nat_npt.php:170 +#: usr/local/www/firewall_nat_1to1.php:113 +#: usr/local/www/firewall_nat_1to1.php:172 +msgid "add rule" +msgstr "kural ekle" + +#: usr/local/www/firewall_nat_1to1.php:159 +#: usr/local/www/firewall_rules.php:436 usr/local/www/firewall_rules.php:465 +#: usr/local/www/firewall_rules.php:493 usr/local/www/firewall_rules.php:776 +#: usr/local/www/firewall_nat.php:310 usr/local/www/firewall_nat_npt.php:157 +#: usr/local/www/firewall_rules.php:430 usr/local/www/firewall_rules.php:459 +#: usr/local/www/firewall_rules.php:487 usr/local/www/firewall_rules.php:773 +#: usr/local/www/firewall_nat.php:323 usr/local/www/firewall_rules.php:423 +#: usr/local/www/firewall_rules.php:452 usr/local/www/firewall_rules.php:480 +#: usr/local/www/firewall_rules.php:766 usr/local/www/firewall_nat.php:323 +#: usr/local/www/firewall_rules.php:423 usr/local/www/firewall_rules.php:452 +#: usr/local/www/firewall_rules.php:480 usr/local/www/firewall_rules.php:766 +#: usr/local/www/firewall_nat_npt.php:157 +#: usr/local/www/firewall_nat_1to1.php:159 +msgid "edit rule" +msgstr "kuralı düzenle" + +#: usr/local/www/firewall_nat_1to1.php:160 usr/local/www/services_dhcp.php:923 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/services_dhcpv6.php:836 usr/local/www/services_dhcp.php:961 +#: usr/local/www/services_dhcpv6.php:931 usr/local/www/services_dhcp.php:1165 +#: usr/local/www/services_dhcpv6.php:862 usr/local/www/services_dhcp.php:1189 +#: usr/local/www/services_dhcpv6.php:883 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/firewall_nat_1to1.php:160 +msgid "Do you really want to delete this mapping?" +msgstr "Bu adreslemeyi silmek istediğinize emin misiniz?" + +#: usr/local/www/firewall_nat_1to1.php:160 +#: usr/local/www/firewall_rules.php:779 usr/local/www/firewall_nat.php:313 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/firewall_nat_out.php:450 usr/local/www/firewall_rules.php:776 +#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326 +#: usr/local/www/firewall_rules.php:769 usr/local/www/firewall_nat.php:326 +#: usr/local/www/firewall_nat_out.php:448 usr/local/www/firewall_rules.php:769 +#: usr/local/www/firewall_nat_npt.php:158 +#: usr/local/www/firewall_nat_1to1.php:160 +msgid "delete rule" +msgstr "kuralı sil" + +#: usr/local/www/firewall_nat_1to1.php:180 +#: usr/local/www/firewall_nat_1to1.php:180 +msgid "Depending on the way your WAN connection is setup, you may also need a" +msgstr "" +"WAN bağlantı yapılandırmanıza bağlı olarak ayrıca ihtiyaç duyabilirsiniz" + +#: usr/local/www/firewall_nat_1to1.php:180 +#: usr/local/www/firewall_nat_1to1.php:180 +msgid "Virtual IP." +msgstr "bir Sanal IP." + +#: usr/local/www/firewall_nat_1to1.php:181 +#: usr/local/www/firewall_nat_1to1.php:181 +msgid "" +"If you add a 1:1 NAT entry for any of the interface IPs on this system, it " +"will make this system inaccessible on that IP address. i.e. if you use your " +"WAN IP address, any services on this system (IPsec, OpenVPN server, etc.) " +"using the WAN IP address will no longer function." +msgstr "" +"Eğer 1:1 NAT girdisi olarak bu sistem üzerindeki herhangi bir arabirimin IP " +"adresini tanımlarsanız, belirtilen IP adresinden sisteme erişemezsiniz. " +"Örneğin WAN IP adresinizi kullanırsanız o sistem üzerindeki servisler " +"(örneğin IPsec, OpenVPN, vb.) çalışmaz hale gelir." + +#: usr/local/www/firewall_nat_1to1_edit.php:109 +#: usr/local/www/firewall_nat_out_edit.php:125 +#: usr/local/www/firewall_nat_1to1_edit.php:109 +#: usr/local/www/firewall_nat_out_edit.php:129 +#, php-format +msgid "" +"Invalid characters detected (%s). Please remove invalid characters and save " +"again." +msgstr "" +"Geçersiz karakterler tespit edildi (%s). Lütfen geçersiz karakterleri " +"temizleyip tekrar kaydediniz." + +#: usr/local/www/firewall_nat_1to1_edit.php:114 +#: usr/local/www/firewall_nat_1to1_edit.php:114 +msgid "External subnet" +msgstr "Dış alt ağ" + +#: usr/local/www/firewall_nat_1to1_edit.php:117 +#: usr/local/www/firewall_nat_edit.php:190 +#: usr/local/www/firewall_nat_edit.php:195 +#: usr/local/www/firewall_nat_1to1_edit.php:117 +msgid "Source address" +msgstr "Kaynak adres" + +#: usr/local/www/firewall_nat_1to1_edit.php:121 +#: usr/local/www/firewall_nat_edit.php:194 +#: usr/local/www/firewall_nat_edit.php:199 +#: usr/local/www/firewall_nat_1to1_edit.php:121 +msgid "Destination address" +msgstr "Hedef adres" + +#: usr/local/www/firewall_nat_1to1_edit.php:145 +#: usr/local/www/firewall_nat_1to1_edit.php:152 +#: usr/local/www/firewall_nat_1to1_edit.php:152 +msgid "A valid external subnet must be specified." +msgstr "Geçerli bir dış altağ tanımlanmalıdır." + +#: usr/local/www/firewall_nat_1to1_edit.php:149 +#: usr/local/www/firewall_nat_edit.php:232 +#: usr/local/www/firewall_rules_edit.php:356 +#: usr/local/www/firewall_rules_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:156 +#: usr/local/www/firewall_rules_edit.php:385 +#: usr/local/www/firewall_rules_edit.php:389 +#: usr/local/www/firewall_nat_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:384 +#: usr/local/www/firewall_rules_edit.php:388 +#: usr/local/www/firewall_rules_edit.php:387 +#: usr/local/www/firewall_rules_edit.php:391 +#: usr/local/www/firewall_nat_edit.php:244 +#: usr/local/www/firewall_nat_1to1_edit.php:156 +msgid "You must specify single host or alias for alias entries." +msgstr "Tek bir grup adı ya da istemci girmelisiniz." + +#: usr/local/www/firewall_nat_1to1_edit.php:154 +#: usr/local/www/firewall_nat_1to1_edit.php:161 +#: usr/local/www/firewall_nat_1to1_edit.php:161 +#, php-format +msgid "%s is not a valid internal IP address." +msgstr "%s geçerli bir iç IP adresi değildir." + +#: usr/local/www/firewall_nat_1to1_edit.php:157 +#: usr/local/www/firewall_nat_1to1_edit.php:164 +#: usr/local/www/firewall_nat_1to1_edit.php:164 +msgid "A valid internal bit count must be specified." +msgstr "Gerçerli bir iç ağ maskesi bit değeri belirtilmelidir." + +#: usr/local/www/firewall_nat_1to1_edit.php:164 +#: usr/local/www/firewall_nat_edit.php:245 +#: usr/local/www/firewall_rules_edit.php:373 +#: usr/local/www/firewall_nat_1to1_edit.php:171 +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:252 +#: usr/local/www/firewall_rules_edit.php:401 +#: usr/local/www/firewall_rules_edit.php:404 +#: usr/local/www/firewall_nat_edit.php:257 +#: usr/local/www/firewall_nat_1to1_edit.php:171 +#, php-format +msgid "%s is not a valid destination IP address or alias." +msgstr "%s geçerli bir hedef IP değeri ya da grup adı değildir." + +#: usr/local/www/firewall_nat_1to1_edit.php:167 +#: usr/local/www/firewall_nat_edit.php:248 +#: usr/local/www/firewall_nat_out_edit.php:159 +#: usr/local/www/firewall_rules_edit.php:376 +#: usr/local/www/firewall_nat_1to1_edit.php:174 +#: usr/local/www/firewall_nat_out_edit.php:172 +#: usr/local/www/firewall_rules_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:255 +#: usr/local/www/firewall_rules_edit.php:404 +#: usr/local/www/firewall_rules_edit.php:407 +#: usr/local/www/firewall_nat_edit.php:260 +#: usr/local/www/firewall_nat_1to1_edit.php:174 +#: usr/local/www/firewall_nat_out_edit.php:176 +msgid "A valid destination bit count must be specified." +msgstr "Geçerli bi hedef ağ maskesi bit değeri tanımlanmalıdır." + +#: usr/local/www/firewall_nat_1to1_edit.php:270 +#: usr/local/www/firewall_nat_1to1_edit.php:277 +#: usr/local/www/firewall_nat_1to1_edit.php:275 +#: usr/local/www/firewall_nat_1to1_edit.php:275 +msgid "Edit NAT 1:1 entry" +msgstr "1:1 NAT girdisini düzenle" + +#: usr/local/www/firewall_nat_1to1_edit.php:273 +#: usr/local/www/firewall_nat_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:679 usr/local/www/interfaces.php:1828 +#: usr/local/www/interfaces_ppps_edit.php:603 +#: usr/local/www/system_usermanager.php:469 +#: usr/local/www/system_usermanager.php:789 +#: usr/local/www/vpn_ipsec_phase1.php:512 +#: usr/local/www/vpn_ipsec_phase2.php:393 +#: usr/local/www/vpn_openvpn_client.php:386 +#: usr/local/www/vpn_openvpn_client.php:860 +#: usr/local/www/vpn_openvpn_csc.php:314 usr/local/www/vpn_openvpn_csc.php:672 +#: usr/local/www/vpn_openvpn_server.php:604 +#: usr/local/www/vpn_openvpn_server.php:1448 +#: usr/local/www/firewall_nat_npt_edit.php:159 +#: usr/local/www/system_routes_edit.php:299 +#: usr/local/www/firewall_nat_1to1_edit.php:280 +#: usr/local/www/firewall_nat_npt_edit.php:164 +#: usr/local/www/firewall_rules_edit.php:712 +#: usr/local/www/system_usermanager.php:467 +#: usr/local/www/system_usermanager.php:787 +#: usr/local/www/vpn_openvpn_server.php:677 +#: usr/local/www/vpn_openvpn_server.php:1590 +#: usr/local/www/vpn_ipsec_phase2.php:419 +#: usr/local/www/firewall_nat_edit.php:467 usr/local/www/interfaces.php:2006 +#: usr/local/www/vpn_openvpn_client.php:391 +#: usr/local/www/vpn_openvpn_client.php:865 +#: usr/local/www/system_routes_edit.php:300 +#: usr/local/www/firewall_nat_1to1_edit.php:278 +#: usr/local/www/firewall_nat_npt_edit.php:163 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/interfaces_ppps_edit.php:604 +#: usr/local/www/vpn_openvpn_csc.php:313 usr/local/www/vpn_openvpn_csc.php:671 +#: usr/local/www/vpn_openvpn_server.php:695 +#: usr/local/www/vpn_openvpn_server.php:1631 +#: usr/local/www/vpn_ipsec_phase2.php:485 +#: usr/local/www/firewall_nat_edit.php:466 usr/local/www/interfaces.php:1994 +#: usr/local/www/vpn_openvpn_client.php:399 +#: usr/local/www/vpn_openvpn_client.php:918 +#: usr/local/www/vpn_ipsec_phase1.php:511 +#: usr/local/www/vpn_openvpn_client.php:417 +#: usr/local/www/vpn_openvpn_client.php:937 +#: usr/local/www/firewall_rules_edit.php:715 +#: usr/local/www/interfaces_ppps_edit.php:610 +#: usr/local/www/vpn_openvpn_csc.php:313 usr/local/www/vpn_openvpn_csc.php:671 +#: usr/local/www/firewall_nat_edit.php:461 +#: usr/local/www/system_routes_edit.php:300 +#: usr/local/www/firewall_nat_npt_edit.php:163 +#: usr/local/www/firewall_nat_1to1_edit.php:278 +#: usr/local/www/vpn_ipsec_phase1.php:532 +#: usr/local/www/system_usermanager.php:467 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/vpn_openvpn_server.php:721 +#: usr/local/www/vpn_openvpn_server.php:1683 +#: usr/local/www/vpn_ipsec_phase2.php:507 usr/local/www/interfaces.php:2021 +msgid "Disabled" +msgstr "Devredışı" + +#: usr/local/www/firewall_nat_1to1_edit.php:276 +#: usr/local/www/firewall_nat_edit.php:463 +#: usr/local/www/firewall_rules_edit.php:682 +#: usr/local/www/firewall_nat_npt_edit.php:162 +#: usr/local/www/firewall_nat_1to1_edit.php:283 +#: usr/local/www/firewall_nat_npt_edit.php:167 +#: usr/local/www/firewall_rules_edit.php:715 +#: usr/local/www/firewall_nat_edit.php:470 +#: usr/local/www/firewall_nat_1to1_edit.php:281 +#: usr/local/www/firewall_nat_npt_edit.php:166 +#: usr/local/www/firewall_nat_edit.php:469 +#: usr/local/www/firewall_rules_edit.php:718 +#: usr/local/www/firewall_nat_edit.php:464 +#: usr/local/www/firewall_nat_npt_edit.php:166 +#: usr/local/www/firewall_nat_1to1_edit.php:281 +msgid "Disable this rule" +msgstr "Kuralı devre dışı bırak" + +#: usr/local/www/firewall_nat_1to1_edit.php:277 +#: usr/local/www/firewall_nat_edit.php:464 +#: usr/local/www/firewall_rules_edit.php:683 +#: usr/local/www/firewall_nat_npt_edit.php:163 +#: usr/local/www/firewall_nat_1to1_edit.php:284 +#: usr/local/www/firewall_nat_npt_edit.php:168 +#: usr/local/www/firewall_rules_edit.php:716 +#: usr/local/www/firewall_nat_edit.php:471 +#: usr/local/www/firewall_nat_1to1_edit.php:282 +#: usr/local/www/firewall_nat_npt_edit.php:167 +#: usr/local/www/firewall_nat_edit.php:470 +#: usr/local/www/firewall_rules_edit.php:719 +#: usr/local/www/firewall_nat_edit.php:465 +#: usr/local/www/firewall_nat_npt_edit.php:167 +#: usr/local/www/firewall_nat_1to1_edit.php:282 +msgid "Set this option to disable this rule without removing it from the list." +msgstr "" +"Herhangi bir kuralı silmeden devredışı bırakmak için bu seçeneği " +"işaretleyiniz." + +#: usr/local/www/firewall_nat_1to1_edit.php:315 +#: usr/local/www/firewall_nat_npt_edit.php:202 +#: usr/local/www/firewall_nat_1to1_edit.php:322 +#: usr/local/www/firewall_nat_npt_edit.php:207 +#: usr/local/www/firewall_nat_1to1_edit.php:320 +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_1to1_edit.php:320 +msgid "Choose which interface this rule applies to" +msgstr "Bu kuralın hangi arabirime uygulanacağını seçiniz" + +#: usr/local/www/firewall_nat_1to1_edit.php:316 +#: usr/local/www/firewall_nat_npt_edit.php:203 +#: usr/local/www/firewall_nat_1to1_edit.php:323 +#: usr/local/www/firewall_nat_npt_edit.php:208 +#: usr/local/www/firewall_nat_1to1_edit.php:321 +#: usr/local/www/firewall_nat_npt_edit.php:207 +#: usr/local/www/firewall_nat_npt_edit.php:207 +#: usr/local/www/firewall_nat_1to1_edit.php:321 +msgid "Hint: in most cases, you'll want to use WAN here" +msgstr "İpucu: Çoğu durumda bu alanda WAN seçilmelidir" + +#: usr/local/www/firewall_nat_1to1_edit.php:319 +#: usr/local/www/firewall_nat_1to1_edit.php:326 +#: usr/local/www/firewall_nat_1to1_edit.php:324 +#: usr/local/www/firewall_nat_1to1_edit.php:324 +msgid "External subnet IP" +msgstr "Dış altağ IPsi" + +#: usr/local/www/firewall_nat_1to1_edit.php:323 +#: usr/local/www/firewall_nat_1to1_edit.php:330 +#: usr/local/www/firewall_nat_1to1_edit.php:328 +#: usr/local/www/firewall_nat_1to1_edit.php:328 +msgid "" +"Enter the external (usually on a WAN) subnet's starting address for the 1:1 " +"mapping. The subnet mask from the internal address below will be applied to " +"this IP address." +msgstr "" +"1:1 haritalama için dış altağın (genellikle WAN arabiriminde olur) başlangıç " +"adresini girin. Aşağıdaki iç adres altağ maskesi bu IP adresine uygulanır." + +#: usr/local/www/firewall_nat_1to1_edit.php:324 +#: usr/local/www/firewall_nat_1to1_edit.php:331 +#: usr/local/www/firewall_nat_1to1_edit.php:329 +#: usr/local/www/firewall_nat_1to1_edit.php:329 +msgid "" +"Hint: this is generally an address owned by the router itself on the " +"selected interface." +msgstr "" +"İpucu: Genellikle seçili arabirimde yönlendiriciye (router) ait bir " +"adrestir." + +#: usr/local/www/firewall_nat_1to1_edit.php:331 +#: usr/local/www/firewall_nat_1to1_edit.php:386 +#: usr/local/www/firewall_nat_edit.php:538 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_rules_edit.php:858 +#: usr/local/www/firewall_rules_edit.php:951 +#: usr/local/www/firewall_nat_npt_edit.php:209 +#: usr/local/www/firewall_nat_npt_edit.php:237 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_npt_edit.php:214 +#: usr/local/www/firewall_nat_npt_edit.php:242 +#: usr/local/www/firewall_nat_out_edit.php:514 +#: usr/local/www/firewall_rules_edit.php:893 +#: usr/local/www/firewall_rules_edit.php:986 +#: usr/local/www/firewall_nat_edit.php:545 +#: usr/local/www/firewall_nat_edit.php:634 +#: usr/local/www/firewall_nat_1to1_edit.php:336 +#: usr/local/www/firewall_nat_1to1_edit.php:391 +#: usr/local/www/firewall_nat_npt_edit.php:213 +#: usr/local/www/firewall_nat_npt_edit.php:241 +#: usr/local/www/firewall_nat_edit.php:544 +#: usr/local/www/firewall_nat_edit.php:633 +#: usr/local/www/firewall_rules_edit.php:896 +#: usr/local/www/firewall_rules_edit.php:995 +#: usr/local/www/firewall_nat_edit.php:539 +#: usr/local/www/firewall_nat_edit.php:628 +#: usr/local/www/firewall_nat_npt_edit.php:213 +#: usr/local/www/firewall_nat_npt_edit.php:241 +#: usr/local/www/firewall_nat_1to1_edit.php:336 +#: usr/local/www/firewall_nat_1to1_edit.php:391 +#: usr/local/www/firewall_nat_out_edit.php:518 +msgid "not" +msgstr "dışında" + +#: usr/local/www/firewall_nat_1to1_edit.php:333 +#: usr/local/www/firewall_nat_1to1_edit.php:388 +#: usr/local/www/firewall_nat_edit.php:540 +#: usr/local/www/firewall_nat_edit.php:629 +#: usr/local/www/firewall_nat_out_edit.php:502 +#: usr/local/www/firewall_rules_edit.php:860 +#: usr/local/www/firewall_rules_edit.php:953 +#: usr/local/www/firewall_nat_npt_edit.php:211 +#: usr/local/www/firewall_nat_npt_edit.php:239 +#: usr/local/www/firewall_nat_1to1_edit.php:340 +#: usr/local/www/firewall_nat_1to1_edit.php:395 +#: usr/local/www/firewall_nat_npt_edit.php:216 +#: usr/local/www/firewall_nat_npt_edit.php:244 +#: usr/local/www/firewall_nat_out_edit.php:515 +#: usr/local/www/firewall_rules_edit.php:895 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:547 +#: usr/local/www/firewall_nat_edit.php:636 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_npt_edit.php:215 +#: usr/local/www/firewall_nat_npt_edit.php:243 +#: usr/local/www/firewall_nat_edit.php:546 +#: usr/local/www/firewall_nat_edit.php:635 +#: usr/local/www/firewall_rules_edit.php:898 +#: usr/local/www/firewall_rules_edit.php:997 +#: usr/local/www/firewall_nat_edit.php:541 +#: usr/local/www/firewall_nat_edit.php:630 +#: usr/local/www/firewall_nat_npt_edit.php:215 +#: usr/local/www/firewall_nat_npt_edit.php:243 +#: usr/local/www/firewall_nat_1to1_edit.php:338 +#: usr/local/www/firewall_nat_1to1_edit.php:393 +#: usr/local/www/firewall_nat_out_edit.php:519 +msgid "Use this option to invert the sense of the match." +msgstr "Eşleştirmeyi tersine çevirmek için bu seçeneği kullanabilirsiniz." + +#: usr/local/www/firewall_nat_1to1_edit.php:343 +#: usr/local/www/firewall_nat_1to1_edit.php:398 +#: usr/local/www/firewall_nat_edit.php:550 +#: usr/local/www/firewall_nat_edit.php:597 +#: usr/local/www/firewall_nat_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:639 +#: usr/local/www/firewall_nat_out_edit.php:475 +#: usr/local/www/firewall_nat_out_edit.php:509 +#: usr/local/www/firewall_nat_out_edit.php:569 +#: usr/local/www/firewall_rules.php:128 +#: usr/local/www/firewall_rules_edit.php:827 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules_edit.php:921 +#: usr/local/www/firewall_rules_edit.php:934 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:963 +#: usr/local/www/firewall_rules_edit.php:1013 +#: usr/local/www/firewall_rules_edit.php:1026 +#: usr/local/www/firewall_rules_edit.php:1090 +#: usr/local/www/services_captiveportal_ip.php:175 +#: usr/local/www/services_captiveportal_ip.php:182 +#: usr/local/www/services_captiveportal_hostname.php:176 +#: usr/local/www/services_captiveportal_hostname.php:183 +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/firewall_nat_out_edit.php:488 +#: usr/local/www/firewall_nat_out_edit.php:522 +#: usr/local/www/firewall_nat_out_edit.php:582 +#: usr/local/www/firewall_rules_edit.php:862 +#: usr/local/www/firewall_rules_edit.php:905 +#: usr/local/www/firewall_rules_edit.php:956 +#: usr/local/www/firewall_rules_edit.php:969 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:998 +#: usr/local/www/firewall_rules_edit.php:1048 +#: usr/local/www/firewall_rules_edit.php:1061 +#: usr/local/www/firewall_rules_edit.php:1125 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:604 +#: usr/local/www/firewall_nat_edit.php:617 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_nat_1to1_edit.php:348 +#: usr/local/www/firewall_nat_1to1_edit.php:403 +#: usr/local/www/services_captiveportal_ip.php:173 +#: usr/local/www/services_captiveportal_ip.php:180 +#: usr/local/www/services_captiveportal_hostname.php:174 +#: usr/local/www/services_captiveportal_hostname.php:181 +#: usr/local/www/firewall_rules.php:126 +#: usr/local/www/firewall_nat_edit.php:556 +#: usr/local/www/firewall_nat_edit.php:603 +#: usr/local/www/firewall_nat_edit.php:616 +#: usr/local/www/firewall_nat_edit.php:645 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/firewall_rules_edit.php:978 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1007 +#: usr/local/www/firewall_rules_edit.php:1063 +#: usr/local/www/firewall_rules_edit.php:1076 +#: usr/local/www/firewall_rules_edit.php:1140 +#: usr/local/www/services_captiveportal_ip.php:173 +#: usr/local/www/services_captiveportal_ip.php:180 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:598 +#: usr/local/www/firewall_nat_edit.php:611 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/services_captiveportal_hostname.php:174 +#: usr/local/www/services_captiveportal_hostname.php:181 +#: usr/local/www/firewall_rules.php:126 +#: usr/local/www/firewall_nat_1to1_edit.php:348 +#: usr/local/www/firewall_nat_1to1_edit.php:403 +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:526 +msgid "any" +msgstr "herhangi biri" + +#: usr/local/www/firewall_nat_1to1_edit.php:344 +#: usr/local/www/firewall_nat_1to1_edit.php:351 +#: usr/local/www/firewall_nat_1to1_edit.php:349 +#: usr/local/www/firewall_nat_1to1_edit.php:349 +msgid "Single host" +msgstr "Tek istemci" + +#: usr/local/www/firewall_nat_1to1_edit.php:347 +#: usr/local/www/firewall_nat_1to1_edit.php:402 +#: usr/local/www/firewall_nat_edit.php:554 +#: usr/local/www/firewall_nat_edit.php:643 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules_edit.php:967 +#: usr/local/www/firewall_nat_1to1_edit.php:354 +#: usr/local/www/firewall_nat_1to1_edit.php:409 +#: usr/local/www/firewall_rules_edit.php:909 +#: usr/local/www/firewall_rules_edit.php:1002 +#: usr/local/www/firewall_nat_edit.php:561 +#: usr/local/www/firewall_nat_edit.php:650 +#: usr/local/www/firewall_nat_1to1_edit.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:407 +#: usr/local/www/firewall_nat_edit.php:560 +#: usr/local/www/firewall_nat_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:918 +#: usr/local/www/firewall_rules_edit.php:1017 +#: usr/local/www/firewall_nat_edit.php:555 +#: usr/local/www/firewall_nat_edit.php:644 +#: usr/local/www/firewall_nat_1to1_edit.php:352 +#: usr/local/www/firewall_nat_1to1_edit.php:407 +msgid "PPTP clients" +msgstr "PPTP istemcileri" + +#: usr/local/www/firewall_nat_1to1_edit.php:350 +#: usr/local/www/firewall_nat_1to1_edit.php:405 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules_edit.php:970 +#: usr/local/www/firewall_nat_1to1_edit.php:357 +#: usr/local/www/firewall_nat_1to1_edit.php:412 +#: usr/local/www/firewall_rules_edit.php:912 +#: usr/local/www/firewall_rules_edit.php:1005 +#: usr/local/www/firewall_nat_edit.php:564 +#: usr/local/www/firewall_nat_edit.php:653 +#: usr/local/www/firewall_nat_1to1_edit.php:355 +#: usr/local/www/firewall_nat_1to1_edit.php:410 +#: usr/local/www/firewall_nat_edit.php:563 +#: usr/local/www/firewall_nat_edit.php:652 +#: usr/local/www/firewall_rules_edit.php:921 +#: usr/local/www/firewall_rules_edit.php:1020 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_nat_1to1_edit.php:355 +#: usr/local/www/firewall_nat_1to1_edit.php:410 +msgid "PPPoE clients" +msgstr "PPPoE istemcileri" + +#: usr/local/www/firewall_nat_1to1_edit.php:353 +#: usr/local/www/firewall_nat_1to1_edit.php:408 +#: usr/local/www/firewall_nat_edit.php:560 +#: usr/local/www/firewall_nat_edit.php:649 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules_edit.php:973 +#: usr/local/www/firewall_nat_1to1_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:415 +#: usr/local/www/firewall_rules_edit.php:915 +#: usr/local/www/firewall_rules_edit.php:1008 +#: usr/local/www/firewall_nat_edit.php:567 +#: usr/local/www/firewall_nat_edit.php:656 +#: usr/local/www/firewall_nat_1to1_edit.php:358 +#: usr/local/www/firewall_nat_1to1_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 +#: usr/local/www/firewall_rules_edit.php:924 +#: usr/local/www/firewall_rules_edit.php:1023 +#: usr/local/www/firewall_nat_edit.php:561 +#: usr/local/www/firewall_nat_edit.php:650 +#: usr/local/www/firewall_nat_1to1_edit.php:358 +#: usr/local/www/firewall_nat_1to1_edit.php:413 +msgid "L2TP clients" +msgstr "L2TP istemcileri" + +#: usr/local/www/firewall_nat_1to1_edit.php:358 +#: usr/local/www/firewall_nat_1to1_edit.php:413 +#: usr/local/www/firewall_nat_edit.php:565 +#: usr/local/www/firewall_nat_edit.php:654 +#: usr/local/www/firewall_rules_edit.php:978 +#: usr/local/www/firewall_nat_1to1_edit.php:365 +#: usr/local/www/firewall_nat_1to1_edit.php:420 +#: usr/local/www/firewall_rules_edit.php:1013 +#: usr/local/www/firewall_nat_edit.php:572 +#: usr/local/www/firewall_nat_edit.php:661 +#: usr/local/www/firewall_nat_1to1_edit.php:363 +#: usr/local/www/firewall_nat_1to1_edit.php:418 +#: usr/local/www/firewall_nat_edit.php:571 +#: usr/local/www/firewall_nat_edit.php:660 +#: usr/local/www/firewall_rules_edit.php:1028 +#: usr/local/www/firewall_nat_edit.php:566 +#: usr/local/www/firewall_nat_edit.php:655 +#: usr/local/www/firewall_nat_1to1_edit.php:363 +#: usr/local/www/firewall_nat_1to1_edit.php:418 +msgid "subnet" +msgstr "altağ" + +#: usr/local/www/firewall_nat_1to1_edit.php:360 +#: usr/local/www/firewall_nat_1to1_edit.php:415 +#: usr/local/www/firewall_nat_edit.php:567 +#: usr/local/www/firewall_nat_edit.php:656 +#: usr/local/www/firewall_rules_edit.php:887 +#: usr/local/www/firewall_rules_edit.php:980 +#: usr/local/www/firewall_nat_1to1_edit.php:367 +#: usr/local/www/firewall_nat_1to1_edit.php:422 +#: usr/local/www/firewall_rules_edit.php:922 +#: usr/local/www/firewall_rules_edit.php:1015 +#: usr/local/www/firewall_nat_edit.php:574 +#: usr/local/www/firewall_nat_edit.php:663 +#: usr/local/www/firewall_nat_1to1_edit.php:365 +#: usr/local/www/firewall_nat_1to1_edit.php:420 +#: usr/local/www/firewall_nat_edit.php:573 +#: usr/local/www/firewall_nat_edit.php:662 +#: usr/local/www/firewall_rules_edit.php:931 +#: usr/local/www/firewall_rules_edit.php:1030 +#: usr/local/www/firewall_nat_edit.php:568 +#: usr/local/www/firewall_nat_edit.php:657 +#: usr/local/www/firewall_nat_1to1_edit.php:365 +#: usr/local/www/firewall_nat_1to1_edit.php:420 +msgid "address" +msgstr "adres" + +#: usr/local/www/firewall_nat_1to1_edit.php:379 +#: usr/local/www/firewall_nat_1to1_edit.php:386 +#: usr/local/www/firewall_nat_1to1_edit.php:384 +#: usr/local/www/firewall_nat_1to1_edit.php:384 +msgid "" +"Enter the internal (LAN) subnet for the 1:1 mapping. The subnet size " +"specified for the internal subnet will be applied to the external subnet." +msgstr "" +"1:1 haritalama için iç (LAN) altağını girin. İç altağ için belirtilen altağ " +"boyutu dış altağa uygulanır." + +#: usr/local/www/firewall_nat_1to1_edit.php:399 +#: usr/local/www/firewall_nat_edit.php:551 +#: usr/local/www/firewall_nat_edit.php:640 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_nat_1to1_edit.php:406 +#: usr/local/www/firewall_rules_edit.php:906 +#: usr/local/www/firewall_rules_edit.php:999 +#: usr/local/www/firewall_nat_edit.php:558 +#: usr/local/www/firewall_nat_edit.php:647 +#: usr/local/www/firewall_nat_1to1_edit.php:404 +#: usr/local/www/firewall_nat_edit.php:557 +#: usr/local/www/firewall_nat_edit.php:646 +#: usr/local/www/firewall_rules_edit.php:915 +#: usr/local/www/firewall_rules_edit.php:1014 +#: usr/local/www/firewall_nat_edit.php:552 +#: usr/local/www/firewall_nat_edit.php:641 +#: usr/local/www/firewall_nat_1to1_edit.php:404 +msgid "Single host or alias" +msgstr "Tek istemci ya da grup" + +#: usr/local/www/firewall_nat_1to1_edit.php:436 +#: usr/local/www/firewall_nat_1to1_edit.php:443 +#: usr/local/www/firewall_nat_1to1_edit.php:441 +#: usr/local/www/firewall_nat_1to1_edit.php:441 +msgid "" +"The 1:1 mapping will only be used for connections to or from the specified " +"destination." +msgstr "" +"1:1 haritalama belirtilen hedefe giden ya da hedeften gelen bağlantılar için " +"kullanılır." + +#: usr/local/www/firewall_nat_1to1_edit.php:437 +#: usr/local/www/firewall_nat_1to1_edit.php:444 +#: usr/local/www/firewall_nat_1to1_edit.php:442 +#: usr/local/www/firewall_nat_1to1_edit.php:442 +msgid "Hint: this is usually 'any'." +msgstr "İpucu: Genelde 'herhangi biri' seçilir." + +#: usr/local/www/firewall_nat_1to1_edit.php:447 +#: usr/local/www/firewall_nat_edit.php:783 +#: usr/local/www/firewall_nat_1to1_edit.php:454 +#: usr/local/www/firewall_nat_edit.php:790 +#: usr/local/www/firewall_nat_1to1_edit.php:452 +#: usr/local/www/firewall_nat_edit.php:789 +#: usr/local/www/firewall_nat_edit.php:784 +#: usr/local/www/firewall_nat_1to1_edit.php:452 +msgid "NAT reflection" +msgstr "NAT yansılama" + +#: usr/local/www/firewall_nat_1to1_edit.php:450 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/firewall_nat_1to1_edit.php:457 +#: usr/local/www/firewall_nat_1to1_edit.php:455 +#: usr/local/www/firewall_nat_1to1_edit.php:455 +msgid "use system default" +msgstr "sistem varsayılanını kullan" + +#: usr/local/www/firewall_nat_1to1_edit.php:451 +#: usr/local/www/firewall_nat_edit.php:787 +#: usr/local/www/firewall_nat_1to1_edit.php:458 +#: usr/local/www/firewall_nat_1to1_edit.php:456 +#: usr/local/www/firewall_nat_1to1_edit.php:456 +msgid "enable" +msgstr "etkinleştir" + +#: usr/local/www/firewall_nat_1to1_edit.php:452 +#: usr/local/www/firewall_nat_edit.php:788 +#: usr/local/www/firewall_nat_1to1_edit.php:459 +#: usr/local/www/firewall_nat_1to1_edit.php:457 +#: usr/local/www/firewall_nat_1to1_edit.php:457 +msgid "disable" +msgstr "kapat" + +#: usr/local/www/firewall_nat_edit.php:109 +#: usr/local/www/firewall_nat_edit.php:114 +#, php-format +msgid "" +"Invalid characters detected %s. Please remove invalid characters and save " +"again." +msgstr "" +"Geçersiz karakter tespit edilmiştir %s. Lütfen geçersiz karakterleri " +"temizleyip tekrar kaydediniz." + +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:187 +msgid "Destination port from" +msgstr "Hedef porttan" + +#: usr/local/www/firewall_nat_edit.php:182 +#: usr/local/www/firewall_nat_edit.php:187 +msgid "Destination port to" +msgstr "Hedef porta" + +#: usr/local/www/firewall_nat_edit.php:198 +#: usr/local/www/firewall_nat_edit.php:740 +#: usr/local/www/firewall_nat_edit.php:747 +#: usr/local/www/firewall_nat_edit.php:746 +#: usr/local/www/firewall_nat_edit.php:203 +#: usr/local/www/firewall_nat_edit.php:741 +msgid "Redirect target IP" +msgstr "Hedef IPyi yönlendir" + +#: usr/local/www/firewall_nat_edit.php:213 +#: usr/local/www/firewall_nat_edit.php:220 +#: usr/local/www/firewall_nat_edit.php:225 +#, php-format +msgid "\"%s\" is not a valid redirect target IP address or host alias." +msgstr "\"%s\" geçerli bir yönlendirme hedef IP adresi veya grup değil." + +#: usr/local/www/firewall_nat_edit.php:217 +#: usr/local/www/firewall_rules_edit.php:325 +#: usr/local/www/firewall_rules_edit.php:349 +#: usr/local/www/firewall_nat_edit.php:224 +#: usr/local/www/firewall_rules_edit.php:348 +#: usr/local/www/firewall_rules_edit.php:351 +#: usr/local/www/firewall_nat_edit.php:229 +#, php-format +msgid "" +"%s is not a valid start source port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" +"%s geçerli bir başlangıç kaynak portu değil. Bir port grubu ya da 1 ile " +"65535 arası bir tamsayı olmalıdır." + +#: usr/local/www/firewall_nat_edit.php:219 +#: usr/local/www/firewall_nat_edit.php:226 +#: usr/local/www/firewall_nat_edit.php:231 +#, php-format +msgid "" +"%s is not a valid end source port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" +"%s geçerli bir bitiş kaynak portu değil. Bir port grubu yada 1 ile 65535 " +"arası bir tamsayı olmalıdır." + +#: usr/local/www/firewall_nat_edit.php:221 +#: usr/local/www/firewall_rules_edit.php:329 +#: usr/local/www/firewall_rules_edit.php:353 +#: usr/local/www/firewall_nat_edit.php:228 +#: usr/local/www/firewall_rules_edit.php:352 +#: usr/local/www/firewall_rules_edit.php:355 +#: usr/local/www/firewall_nat_edit.php:233 +#, php-format +msgid "" +"%s is not a valid start destination port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" +"%s geçerli bir başlangıç hedef portu değil. Bir port grubu yada 1 ile 65535 " +"arası sayı olmalıdır." + +#: usr/local/www/firewall_nat_edit.php:223 +#: usr/local/www/firewall_rules_edit.php:331 +#: usr/local/www/firewall_rules_edit.php:355 +#: usr/local/www/firewall_nat_edit.php:230 +#: usr/local/www/firewall_rules_edit.php:354 +#: usr/local/www/firewall_rules_edit.php:357 +#: usr/local/www/firewall_nat_edit.php:235 +#, php-format +msgid "" +"%s is not a valid end destination port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" +"%s geçerli bir bitiş hedef portu değil. Bir port grubu yada 1 ile 65535 " +"arası sayı olmalıdır.\"" + +#: usr/local/www/firewall_nat_edit.php:226 +#, php-format +msgid "" +"%s is not a valid local port. It must be a port alias or integer between 1 " +"and 65535." +msgstr "" +"%s geçerli bir yerel port değil. Bir port grubu yada 1 ile 65535 arası sayı " +"olmalıdır." + +#: usr/local/www/firewall_nat_edit.php:237 +#: usr/local/www/firewall_rules_edit.php:365 +#: usr/local/www/firewall_rules_edit.php:394 +#: usr/local/www/firewall_nat_edit.php:244 +#: usr/local/www/firewall_rules_edit.php:393 +#: usr/local/www/firewall_rules_edit.php:396 +#: usr/local/www/firewall_nat_edit.php:249 +#, php-format +msgid "%s is not a valid source IP address or alias." +msgstr "%s geçerli bir kaynak IP adresi ya da grup değil." + +#: usr/local/www/firewall_nat_edit.php:240 +#: usr/local/www/firewall_nat_out_edit.php:151 +#: usr/local/www/firewall_rules_edit.php:368 +#: usr/local/www/firewall_nat_out_edit.php:164 +#: usr/local/www/firewall_rules_edit.php:397 +#: usr/local/www/firewall_nat_edit.php:247 +#: usr/local/www/firewall_rules_edit.php:396 +#: usr/local/www/firewall_rules_edit.php:399 +#: usr/local/www/firewall_nat_edit.php:252 +#: usr/local/www/firewall_nat_out_edit.php:168 +msgid "A valid source bit count must be specified." +msgstr "Geçerli bir kaynak bit adedi belirtilmelidir." + +#: usr/local/www/firewall_nat_edit.php:267 +#: usr/local/www/firewall_nat_edit.php:274 +#: usr/local/www/firewall_nat_edit.php:279 +msgid "The target port range must be an integer between 1 and 65535." +msgstr "Hedef port aralığı 1 ile 65535 arasında bir tamsayı olmalıdır." + +#: usr/local/www/firewall_nat_edit.php:288 +#: usr/local/www/firewall_nat_edit.php:295 +#: usr/local/www/firewall_nat_edit.php:300 +msgid "The destination port range overlaps with an existing entry." +msgstr "Hedef port aralığı varolan bir girdi ile çakışıyor." + +#: usr/local/www/firewall_nat_edit.php:453 +#: usr/local/www/firewall_nat_edit.php:460 +#: usr/local/www/firewall_nat_edit.php:459 +#: usr/local/www/firewall_nat_edit.php:454 +msgid "Edit Redirect entry" +msgstr "Yönlendirme girdisini düzenle" + +#: usr/local/www/firewall_nat_edit.php:468 +#: usr/local/www/firewall_nat_edit.php:475 +#: usr/local/www/firewall_nat_edit.php:474 +#: usr/local/www/firewall_nat_edit.php:469 +msgid "No RDR (NOT)" +msgstr "Yönlendirme (YOK)" + +#: usr/local/www/firewall_nat_edit.php:471 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_edit.php:477 +#: usr/local/www/firewall_nat_edit.php:472 +msgid "" +"Enabling this option will disable redirection for traffic matching this rule." +msgstr "" +"Bu seçeneğin etkinleştirilmesi kurala uyan trafikte yönlendirmeyi kapatır." + +#: usr/local/www/firewall_nat_edit.php:472 +#: usr/local/www/firewall_nat_edit.php:479 +#: usr/local/www/firewall_nat_edit.php:478 +#: usr/local/www/firewall_nat_edit.php:473 +msgid "" +"Hint: this option is rarely needed, don't use this unless you know what " +"you're doing." +msgstr "" +"İpucu: Bu seçeneğe nadiren ihtiyaç olur, ne yaptığınızdan emin değilseniz bu " +"seçeneği kullanmayın." + +#: usr/local/www/firewall_nat_edit.php:514 +#: usr/local/www/firewall_nat_out_edit.php:452 +#: usr/local/www/firewall_nat_out_edit.php:465 +#: usr/local/www/firewall_nat_edit.php:521 +#: usr/local/www/firewall_nat_edit.php:520 +#: usr/local/www/firewall_nat_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:469 +msgid "Choose which interface this rule applies to." +msgstr "Bu kuralın uygulanacağı arabirimi seçiniz." + +#: usr/local/www/firewall_nat_edit.php:515 +#: usr/local/www/firewall_nat_out_edit.php:453 +#: usr/local/www/firewall_nat_out_edit.php:466 +#: usr/local/www/firewall_nat_edit.php:522 +#: usr/local/www/firewall_nat_edit.php:521 +#: usr/local/www/firewall_nat_edit.php:516 +#: usr/local/www/firewall_nat_out_edit.php:470 +msgid "Hint: in most cases, you'll want to use WAN here." +msgstr "İpucu: Çoğu durumda burada WAN kullanılır." + +#: usr/local/www/firewall_nat_edit.php:524 +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_nat_edit.php:530 +#: usr/local/www/firewall_rules_edit.php:856 +#: usr/local/www/firewall_nat_edit.php:525 +msgid "Choose which IP protocol this rule should match." +msgstr "Bu kuralın eşleşeceği IP protokolünü seçiniz." + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/firewall_nat_edit.php:527 +msgid "Hint: in most cases, you should specify" +msgstr "İpucu: Çoğu durumda" + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +msgid "TCP" +msgstr "TCP" + +#: usr/local/www/firewall_nat_edit.php:526 +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/diag_ipsec_sad.php:135 usr/local/www/diag_ipsec_spd.php:144 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_nat_edit.php:533 +#: usr/local/www/diag_ipsec_sad.php:136 +#: usr/local/www/firewall_nat_edit.php:532 +#: usr/local/www/diag_ipsec_spd.php:145 +#: usr/local/www/firewall_rules_edit.php:856 +#: usr/local/www/firewall_nat_edit.php:527 +#: usr/local/www/diag_ipsec_spd.php:145 usr/local/www/diag_ipsec_sad.php:136 +msgid "here." +msgstr "yapılandırabilirsiniz." + +#: usr/local/www/firewall_nat_edit.php:531 +#: usr/local/www/firewall_nat_edit.php:538 +#: usr/local/www/firewall_nat_edit.php:537 +#: usr/local/www/firewall_nat_edit.php:532 +msgid "Show source address and port range" +msgstr "Kaynak adres ve port aralığını görüntüle" + +#: usr/local/www/firewall_nat_edit.php:589 +#: usr/local/www/firewall_rules_edit.php:913 +#: usr/local/www/firewall_rules_edit.php:948 +#: usr/local/www/firewall_nat_edit.php:596 +#: usr/local/www/firewall_nat_edit.php:595 +#: usr/local/www/firewall_rules_edit.php:957 +#: usr/local/www/firewall_nat_edit.php:590 +msgid "Source port range" +msgstr "Kaynak port aralığı" + +#: usr/local/www/firewall_nat_edit.php:593 +#: usr/local/www/firewall_nat_edit.php:705 +#: usr/local/www/firewall_rules_edit.php:917 +#: usr/local/www/firewall_rules_edit.php:1009 +#: usr/local/www/firewall_rules_edit.php:952 +#: usr/local/www/firewall_rules_edit.php:1044 +#: usr/local/www/firewall_nat_edit.php:600 +#: usr/local/www/firewall_nat_edit.php:712 +#: usr/local/www/firewall_nat_edit.php:599 +#: usr/local/www/firewall_nat_edit.php:711 +#: usr/local/www/firewall_rules_edit.php:961 +#: usr/local/www/firewall_rules_edit.php:1059 +#: usr/local/www/firewall_nat_edit.php:594 +#: usr/local/www/firewall_nat_edit.php:706 +msgid "from:" +msgstr "başlangıç:" + +#: usr/local/www/firewall_nat_edit.php:596 +#: usr/local/www/firewall_nat_edit.php:609 +#: usr/local/www/firewall_nat_edit.php:708 +#: usr/local/www/firewall_nat_edit.php:721 +#: usr/local/www/firewall_nat_edit.php:751 +#: usr/local/www/firewall_rules_edit.php:920 +#: usr/local/www/firewall_rules_edit.php:933 +#: usr/local/www/firewall_rules_edit.php:1012 +#: usr/local/www/firewall_rules_edit.php:1025 +#: usr/local/www/firewall_rules_edit.php:955 +#: usr/local/www/firewall_rules_edit.php:968 +#: usr/local/www/firewall_rules_edit.php:1047 +#: usr/local/www/firewall_rules_edit.php:1060 +#: usr/local/www/firewall_nat_edit.php:603 +#: usr/local/www/firewall_nat_edit.php:616 +#: usr/local/www/firewall_nat_edit.php:715 +#: usr/local/www/firewall_nat_edit.php:728 +#: usr/local/www/firewall_nat_edit.php:758 +#: usr/local/www/firewall_nat_edit.php:602 +#: usr/local/www/firewall_nat_edit.php:615 +#: usr/local/www/firewall_nat_edit.php:714 +#: usr/local/www/firewall_nat_edit.php:727 +#: usr/local/www/firewall_nat_edit.php:757 +#: usr/local/www/firewall_rules_edit.php:964 +#: usr/local/www/firewall_rules_edit.php:977 +#: usr/local/www/firewall_rules_edit.php:1062 +#: usr/local/www/firewall_rules_edit.php:1075 +#: usr/local/www/firewall_nat_edit.php:597 +#: usr/local/www/firewall_nat_edit.php:610 +#: usr/local/www/firewall_nat_edit.php:709 +#: usr/local/www/firewall_nat_edit.php:722 +#: usr/local/www/firewall_nat_edit.php:752 +msgid "other" +msgstr "diğer" + +#: usr/local/www/firewall_nat_edit.php:606 +#: usr/local/www/firewall_nat_edit.php:718 +#: usr/local/www/firewall_rules_edit.php:930 +#: usr/local/www/firewall_rules_edit.php:1022 +#: usr/local/www/firewall_rules_edit.php:965 +#: usr/local/www/firewall_rules_edit.php:1057 +#: usr/local/www/firewall_nat_edit.php:613 +#: usr/local/www/firewall_nat_edit.php:725 +#: usr/local/www/firewall_nat_edit.php:612 +#: usr/local/www/firewall_nat_edit.php:724 +#: usr/local/www/firewall_rules_edit.php:974 +#: usr/local/www/firewall_rules_edit.php:1072 +#: usr/local/www/firewall_nat_edit.php:607 +#: usr/local/www/firewall_nat_edit.php:719 +msgid "to:" +msgstr "bitiş:" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:621 +msgid "Specify the source port or port range for this rule" +msgstr "Bu kural için kaynak port yada port aralığı belirtiniz" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +msgid "This is usually" +msgstr "Bu genellikle" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +msgid "random" +msgstr "rasgeledir" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:621 +msgid "" +"and almost never equal to the destination port range (and should usually be " +"'any')" +msgstr "" +"ve neredeyse hiçbir zaman hedef port aralığıyla aynı olmaz (ve genellikle " +"'herhangi biri' olmalıdır)" + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1089 +#: usr/local/www/firewall_nat_edit.php:621 +#: usr/local/www/firewall_nat_edit.php:736 +msgid "Hint: you can leave the" +msgstr "İpucu: " + +#: usr/local/www/firewall_nat_edit.php:620 +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_nat_edit.php:627 +#: usr/local/www/firewall_nat_edit.php:626 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_nat_edit.php:621 +msgid "field empty if you only want to filter a single port." +msgstr "Sadece tek port engellemek için bu alanı boş bırakınız." + +#: usr/local/www/firewall_nat_edit.php:701 +#: usr/local/www/firewall_nat_edit.php:708 +#: usr/local/www/firewall_nat_edit.php:707 +#: usr/local/www/firewall_nat_edit.php:702 +msgid "Destination port range" +msgstr "Hedef port aralığı" + +#: usr/local/www/firewall_nat_edit.php:733 +#: usr/local/www/firewall_nat_edit.php:740 +#: usr/local/www/firewall_nat_edit.php:739 +#: usr/local/www/firewall_nat_edit.php:734 +msgid "" +"Specify the port or port range for the destination of the packet for this " +"mapping." +msgstr "Bu eşleştirme için hedef port ya da port aralığı belirtiniz." + +#: usr/local/www/firewall_nat_edit.php:735 +#: usr/local/www/firewall_nat_edit.php:742 +#: usr/local/www/firewall_nat_edit.php:741 +#: usr/local/www/firewall_nat_edit.php:736 +msgid "field empty if you only want to map a single port" +msgstr "Tek port belirtmek istiyorsanız bu alanı boş bırakınız" + +#: usr/local/www/firewall_nat_edit.php:743 +#: usr/local/www/firewall_nat_edit.php:750 +#: usr/local/www/firewall_nat_edit.php:749 +#: usr/local/www/firewall_nat_edit.php:744 +msgid "" +"Enter the internal IP address of the server on which you want to map the " +"ports." +msgstr "Portları haritalamak istediğiniz sunucunun iç IP adresini giriniz." + +#: usr/local/www/firewall_nat_edit.php:748 +#: usr/local/www/firewall_nat_edit.php:755 +#: usr/local/www/firewall_nat_edit.php:754 +#: usr/local/www/firewall_nat_edit.php:749 +msgid "Redirect target port" +msgstr "Hedef portu yönlendir" + +#: usr/local/www/firewall_nat_edit.php:762 +#: usr/local/www/firewall_nat_edit.php:769 +#: usr/local/www/firewall_nat_edit.php:768 +#: usr/local/www/firewall_nat_edit.php:763 +msgid "" +"Specify the port on the machine with the IP address entered above. In case " +"of a port range, specify the beginning port of the range (the end port will " +"be calculated automatically)." +msgstr "" +"Yukarıda girdiğiniz IPye sahip makinanın portunu belirtiniz. Port aralığı " +"olacaksa başlangıç portunu giriniz (bitiş portu otomatik hesaplanacaktır)" + +#: usr/local/www/firewall_nat_edit.php:766 +#: usr/local/www/firewall_nat_edit.php:773 +#: usr/local/www/firewall_nat_edit.php:772 +#: usr/local/www/firewall_nat_edit.php:767 +msgid "Hint: this is usually identical to the 'from' port above" +msgstr "İpucu: bu değer genellikle yukarıdaki 'başlangıç' portu ile aynıdır" + +#: usr/local/www/firewall_nat_edit.php:776 +#: usr/local/www/firewall_nat_out_edit.php:629 +#: usr/local/www/firewall_rules_edit.php:1238 +#: usr/local/www/firewall_nat_out_edit.php:642 +#: usr/local/www/firewall_rules_edit.php:1273 +#: usr/local/www/firewall_nat_edit.php:783 +#: usr/local/www/firewall_nat_edit.php:782 +#: usr/local/www/firewall_rules_edit.php:1288 +#: usr/local/www/firewall_nat_edit.php:777 +#: usr/local/www/firewall_nat_out_edit.php:644 +msgid "No XMLRPC Sync" +msgstr "XMLRPC senkronizasyonunu kapat" + +#: usr/local/www/firewall_nat_edit.php:779 +#: usr/local/www/firewall_nat_edit.php:786 +#: usr/local/www/firewall_nat_edit.php:785 +msgid "" +"HINT: This prevents the rule from automatically syncing to other CARP members" +msgstr "" +"İpucu: Bu seçenek kuralın otomatik olarak diğer CARP üyelerine " +"gönderilmesini engeller." + +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:825 +#: usr/local/www/firewall_nat_edit.php:802 +#: usr/local/www/firewall_nat_edit.php:833 +#: usr/local/www/firewall_nat_edit.php:801 +#: usr/local/www/firewall_nat_edit.php:832 +#: usr/local/www/firewall_nat_edit.php:796 +#: usr/local/www/firewall_nat_edit.php:827 +msgid "Filter rule association" +msgstr "Filtre kuralı ilişkilendirmesi" + +#: usr/local/www/firewall_nat_edit.php:798 +#: usr/local/www/firewall_nat_edit.php:831 +#: usr/local/www/firewall_nat_edit.php:806 +#: usr/local/www/firewall_nat_edit.php:839 +#: usr/local/www/firewall_nat_edit.php:805 +#: usr/local/www/firewall_nat_edit.php:838 +#: usr/local/www/firewall_nat_edit.php:800 +#: usr/local/www/firewall_nat_edit.php:833 +msgid "Pass" +msgstr "İzin ver" + +#: usr/local/www/firewall_nat_edit.php:808 +#: usr/local/www/firewall_nat_edit.php:816 +#: usr/local/www/firewall_nat_edit.php:815 +#: usr/local/www/firewall_nat_edit.php:810 +msgid "View the filter rule" +msgstr "Filtreleme kurallını görüntüle" + +#: usr/local/www/firewall_nat_edit.php:816 +#: usr/local/www/firewall_nat_edit.php:824 +#: usr/local/www/firewall_nat_edit.php:823 +#: usr/local/www/firewall_nat_edit.php:818 +msgid "Create new associated filter rule" +msgstr "İlişkilendirilmiş filtreleme kuralı oluştur" + +#: usr/local/www/firewall_nat_edit.php:829 +#: usr/local/www/firewall_nat_edit.php:837 +#: usr/local/www/firewall_nat_edit.php:836 +#: usr/local/www/firewall_nat_edit.php:831 +msgid "Add associated filter rule" +msgstr "İlişkilendirilmiş filtreleme kuralı ekle" + +#: usr/local/www/firewall_nat_edit.php:830 +#: usr/local/www/firewall_nat_edit.php:838 +#: usr/local/www/firewall_nat_edit.php:837 +#: usr/local/www/firewall_nat_edit.php:832 +msgid "Add unassociated filter rule" +msgstr "İlişkilendirilmemiş filtreleme kuralı ekle" + +#: usr/local/www/firewall_nat_out.php:111 +#: usr/local/www/firewall_nat_out.php:111 +#, php-format +msgid "Auto created rule for ISAKMP - %1$s to %2$s" +msgstr "ISAKMP için oluşturulan otomatik kural %1$s - %2$s" + +#: usr/local/www/firewall_nat_out.php:121 +#: usr/local/www/firewall_nat_out.php:121 +#, php-format +msgid "Auto created rule for %1$s to %2$s" +msgstr "%1$s - %2$s için otomatik oluşturulan kural" + +#: usr/local/www/firewall_nat_out.php:131 +#: usr/local/www/firewall_nat_out.php:131 +#, php-format +msgid "Auto created rule for localhost to %1$s" +msgstr "localhost ile %1$s arasında otomatik oluşturulan kural" + +#: usr/local/www/firewall_nat_out.php:147 +#: usr/local/www/firewall_nat_out.php:148 +#: usr/local/www/firewall_nat_out.php:148 +msgid "Auto created rule for PPTP server" +msgstr "PPTP sunucu için otomatik oluşturulmuş kural" + +#: usr/local/www/firewall_nat_out.php:167 +#: usr/local/www/firewall_nat_out.php:168 +#: usr/local/www/firewall_nat_out.php:168 +msgid "Auto created rule for PPPoE server" +msgstr "PPPoE sunucu için otomatik oluşturulmuş kural" + +#: usr/local/www/firewall_nat_out.php:187 +#: usr/local/www/firewall_nat_out.php:188 +#: usr/local/www/firewall_nat_out.php:188 +msgid "Auto created rule for L2TP server" +msgstr "L2TP sunucu için otomatik oluşturulmuş kural" + +#: usr/local/www/firewall_nat_out.php:201 +#: usr/local/www/firewall_nat_out.php:202 +#: usr/local/www/firewall_nat_out.php:202 +msgid "Auto created rule for OpenVPN server" +msgstr "OpenVPN sunucu için otomatik oluşturulmuş kural" + +#: usr/local/www/firewall_nat_out.php:212 +#: usr/local/www/firewall_nat_out.php:213 +#: usr/local/www/firewall_nat_out.php:213 +msgid "Default rules for each interface have been created." +msgstr "Her arabirim için öntanımlı kurallar oluşturuldu." + +#: usr/local/www/firewall_nat_out.php:294 +#: usr/local/www/firewall_nat_out.php:304 +#: usr/local/www/firewall_nat_out.php:305 +#: usr/local/www/firewall_nat_out.php:305 +msgid "The NAT configuration has been changed." +msgstr "NAT yapılandırması değiştirildi." + +#: usr/local/www/firewall_nat_out.php:310 +#: usr/local/www/firewall_nat_out.php:320 +#: usr/local/www/firewall_nat_out.php:321 +#: usr/local/www/firewall_nat_out.php:321 +msgid "Mode:" +msgstr "Kip:" + +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_out.php:323 +#: usr/local/www/firewall_nat_out.php:324 +#: usr/local/www/firewall_nat_out.php:324 +msgid "Automatic outbound NAT rule generation" +msgstr "Otomatik dışarı NAT kuralı oluşturma" + +#: usr/local/www/firewall_nat_out.php:313 +#: usr/local/www/firewall_nat_out.php:323 +#: usr/local/www/firewall_nat_out.php:324 +#: usr/local/www/firewall_nat_out.php:324 +msgid "(IPsec passthrough included)" +msgstr "(IPsec geçiş dahil)" + +#: usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat_out.php:328 +#: usr/local/www/firewall_nat_out.php:329 +#: usr/local/www/firewall_nat_out.php:329 +msgid "Manual Outbound NAT rule generation" +msgstr "Elle dışarı NAT kuralı oluşturma" + +#: usr/local/www/firewall_nat_out.php:318 +#: usr/local/www/firewall_nat_out.php:328 +#: usr/local/www/firewall_nat_out.php:329 +#: usr/local/www/firewall_nat_out.php:329 +msgid "(AON - Advanced Outbound NAT)" +msgstr "(AON - Gelişmiş Dışarı NAT)" + +#: usr/local/www/firewall_nat_out.php:336 +#: usr/local/www/firewall_nat_out.php:346 +#: usr/local/www/firewall_nat_out.php:347 +#: usr/local/www/firewall_nat_out.php:347 +msgid "Mappings:" +msgstr "Eşlemeler:" + +#: usr/local/www/firewall_nat_out.php:343 +#: usr/local/www/firewall_nat_out.php:353 +#: usr/local/www/firewall_nat_out.php:354 usr/local/www/diag_testport.php:129 +#: usr/local/www/diag_system_pftop.php:160 +#: usr/local/www/firewall_nat_out.php:354 +msgid "Source Port" +msgstr "Kaynak port" + +#: usr/local/www/firewall_nat_out.php:345 +#: usr/local/www/firewall_nat_out.php:355 +#: usr/local/www/firewall_nat_out.php:356 +#: usr/local/www/diag_system_pftop.php:153 +#: usr/local/www/firewall_nat_out.php:356 +msgid "Destination Port" +msgstr "Hedef Port" + +#: usr/local/www/firewall_nat_out.php:346 +#: usr/local/www/firewall_nat_out.php:356 +#: usr/local/www/firewall_nat_out.php:357 +#: usr/local/www/firewall_nat_out.php:357 +msgid "NAT Address" +msgstr "NAT Adresi" + +#: usr/local/www/firewall_nat_out.php:347 +#: usr/local/www/firewall_nat_out.php:357 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/firewall_nat_out.php:358 +msgid "NAT Port" +msgstr "NAT Portu" + +#: usr/local/www/firewall_nat_out.php:348 +#: usr/local/www/firewall_nat_out.php:358 +#: usr/local/www/firewall_nat_out.php:359 +#: usr/local/www/firewall_nat_out.php:359 +msgid "Static Port" +msgstr "Sabit Port" + +#: usr/local/www/firewall_nat_out.php:354 +#: usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_nat_out.php:364 +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:365 +#: usr/local/www/firewall_nat_out.php:462 +#: usr/local/www/firewall_nat_out.php:365 +#: usr/local/www/firewall_nat_out.php:459 +msgid "add new mapping" +msgstr "yeni eşleme ekle" + +#: usr/local/www/firewall_nat_out.php:425 +#: usr/local/www/firewall_nat_out.php:435 +#: usr/local/www/firewall_nat_out.php:436 +#: usr/local/www/firewall_nat_out.php:433 +msgid "YES" +msgstr "EVET" + +#: usr/local/www/firewall_nat_out.php:427 +#: usr/local/www/firewall_nat_out.php:437 +#: usr/local/www/firewall_nat_out.php:438 +#: usr/local/www/firewall_nat_out.php:435 +msgid "NO" +msgstr "HAYIR" + +#: usr/local/www/firewall_nat_out.php:436 +#: usr/local/www/firewall_nat_out.php:447 +#: usr/local/www/firewall_nat_out.php:448 +#: usr/local/www/firewall_nat_out.php:445 +msgid "edit mapping" +msgstr "eşlemeyi düzenle" + +#: usr/local/www/firewall_nat_out.php:439 usr/local/www/firewall_rules.php:435 +#: usr/local/www/firewall_rules.php:464 usr/local/www/firewall_rules.php:492 +#: usr/local/www/firewall_rules.php:775 usr/local/www/firewall_nat.php:309 +#: usr/local/www/firewall_nat_out.php:446 usr/local/www/firewall_rules.php:429 +#: usr/local/www/firewall_rules.php:458 usr/local/www/firewall_rules.php:486 +#: usr/local/www/firewall_rules.php:772 usr/local/www/firewall_nat_out.php:447 +#: usr/local/www/firewall_nat.php:322 usr/local/www/firewall_rules.php:422 +#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479 +#: usr/local/www/firewall_rules.php:765 usr/local/www/firewall_nat.php:322 +#: usr/local/www/firewall_nat_out.php:444 usr/local/www/firewall_rules.php:422 +#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479 +#: usr/local/www/firewall_rules.php:765 +msgid "move selected rules before this rule" +msgstr "seçili kuralları bu kuralın üstüne taşı" + +#: usr/local/www/firewall_nat_out.php:440 usr/local/www/firewall_nat.php:314 +#: usr/local/www/firewall_nat_out.php:451 +#: usr/local/www/firewall_nat_out.php:452 usr/local/www/firewall_nat.php:327 +#: usr/local/www/firewall_nat.php:327 usr/local/www/firewall_nat_out.php:449 +msgid "add a new NAT based on this one" +msgstr "Bu kuralı temel alan yeni NAT ekle" + +#: usr/local/www/firewall_nat_out.php:449 +#: usr/local/www/firewall_nat_out.php:460 +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:458 +msgid "move selected mappings to end" +msgstr "seçili eşlemeleri sona taşı" + +#: usr/local/www/firewall_nat_out.php:453 usr/local/www/firewall_rules.php:391 +#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:823 +#: usr/local/www/firewall_rules.php:824 usr/local/www/firewall_nat.php:209 +#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:332 +#: usr/local/www/firewall_nat.php:334 usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_rules.php:395 usr/local/www/firewall_rules.php:396 +#: usr/local/www/firewall_rules.php:825 usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat.php:214 usr/local/www/firewall_nat.php:216 +#: usr/local/www/firewall_nat.php:345 usr/local/www/firewall_nat.php:347 +#: usr/local/www/firewall_rules.php:388 usr/local/www/firewall_rules.php:389 +#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_rules.php:818 +#: usr/local/www/firewall_nat.php:214 usr/local/www/firewall_nat.php:216 +#: usr/local/www/firewall_nat.php:345 usr/local/www/firewall_nat.php:347 +#: usr/local/www/firewall_nat_out.php:462 usr/local/www/firewall_rules.php:388 +#: usr/local/www/firewall_rules.php:389 usr/local/www/firewall_rules.php:817 +#: usr/local/www/firewall_rules.php:818 +msgid "delete selected rules" +msgstr "seçili kuralları sil" + +#: usr/local/www/firewall_nat_out.php:453 +#: usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:462 +msgid "delete selected mappings" +msgstr "seçili eşlemeleri sil" + +#: usr/local/www/firewall_nat_out.php:453 +#: usr/local/www/firewall_nat_out.php:464 +#: usr/local/www/firewall_nat_out.php:465 +#: usr/local/www/firewall_nat_out.php:462 +msgid "Do you really want to delete the selected mappings?" +msgstr "Seçili eşlemeleri silmek istediğinize emin misiniz?" + +#: usr/local/www/firewall_nat_out.php:461 +#: usr/local/www/firewall_nat_out.php:472 +#: usr/local/www/firewall_nat_out.php:473 +#: usr/local/www/firewall_nat_out.php:470 +msgid "" +"With automatic outbound NAT enabled, a mapping is automatically created for " +"each interface's subnet (except WAN-type connections) and the rules on this " +"page are ignored.

    If manual outbound NAT is enabled, outbound NAT " +"rules will not be automatically generated and only the mappings you specify " +"on this page will be used.

    If a target address other than a WAN-" +"type interface's IP address is used, then depending on the way the WAN " +"connection is setup, a " +msgstr "" +"Dışa otomatik NAT etkinleştirildiğinde, WAN türü bağlantılar hariç her " +"arabirimin alt ağı için otomatik olarak bir eşleme oluşturulur ve bu " +"sayfadaki kurallar gözardı edilir.

    Eğer elle NAT " +"etkinleştirilmişse, otomatik NAT kuralları oluşturulmaz ve sadece bu sayfada " +"belirttiğiniz eşlemeler kullanılır.

    WAN türü dışındaki bir " +"arabirimin IP adresi hedef adres olarak kullanılırsa, WAN bağlantı " +"yapılandırmasına bağlı olarak bir " + +#: usr/local/www/firewall_nat_out.php:469 +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/carp_status.php:139 +#: usr/local/www/system_gateway_groups_edit.php:252 +#: usr/local/www/firewall_nat_out.php:480 +#: usr/local/www/firewall_nat_out_edit.php:601 +#: usr/local/www/system_gateway_groups_edit.php:312 +#: usr/local/www/firewall_nat_out.php:481 usr/local/www/carp_status.php:132 +#: usr/local/www/firewall_nat_out.php:478 +#: usr/local/www/system_gateway_groups_edit.php:312 +#: usr/local/www/firewall_nat_out_edit.php:604 +#: usr/local/www/carp_status.php:132 +msgid "Virtual IP" +msgstr "Sanal IP" + +#: usr/local/www/firewall_nat_out.php:470 +#: usr/local/www/firewall_nat_out.php:481 +#: usr/local/www/firewall_nat_out.php:482 +#: usr/local/www/firewall_nat_out.php:479 +msgid " may also be required." +msgstr " de gerekebilir." + +#: usr/local/www/firewall_nat_out.php:472 +#: usr/local/www/firewall_nat_out.php:483 +#: usr/local/www/firewall_nat_out.php:484 +#: usr/local/www/firewall_nat_out.php:481 +msgid "" +"To completely disable outbound NAT, switch to Manual Outbound NAT then " +"delete any NAT rules that appear in the list." +msgstr "" +"Dışa NAT'ı tamamen kapatmak için Elle Dışa NAT'a geçin ve listedeki tüm NAT " +"kurallarını silin." + +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_nat_out_edit.php:134 +msgid "Source bit count" +msgstr "Kaynak bit sayısı" + +#: usr/local/www/firewall_nat_out_edit.php:130 +#: usr/local/www/firewall_rules_edit.php:310 +#: usr/local/www/firewall_rules_edit.php:334 +#: usr/local/www/firewall_rules_edit.php:333 +#: usr/local/www/firewall_rules_edit.php:336 +#: usr/local/www/firewall_nat_out_edit.php:134 +msgid "Destination bit count" +msgstr "Hedef bit sayısı" + +#: usr/local/www/firewall_nat_out_edit.php:137 +#: usr/local/www/firewall_nat_out_edit.php:150 +#: usr/local/www/firewall_nat_out_edit.php:154 +msgid "" +"You must supply either a valid port or port alias for the source port entry." +msgstr "" +"Kaynak port girişi için geçerli bir port veya port grubu adı girmelisiniz." + +#: usr/local/www/firewall_nat_out_edit.php:140 +#: usr/local/www/firewall_nat_out_edit.php:153 +#: usr/local/www/firewall_nat_out_edit.php:157 +msgid "" +"You must supply either a valid port or port alias for the destination port " +"entry." +msgstr "Hedef Port girişi için geçerli bir port yada port grubu adı belirtiniz." + +#: usr/local/www/firewall_nat_out_edit.php:143 +#: usr/local/www/firewall_nat_out_edit.php:156 +#: usr/local/www/firewall_nat_out_edit.php:160 +msgid "You must supply a valid port for the NAT port entry." +msgstr "NAT port girişi için geçerli bir port belirtmelisiniz." + +#: usr/local/www/firewall_nat_out_edit.php:147 +#: usr/local/www/firewall_nat_out_edit.php:160 +#: usr/local/www/firewall_nat_out_edit.php:164 +msgid "A valid source must be specified." +msgstr "Geçerli bir kaynak belirtilmelidir." + +#: usr/local/www/firewall_nat_out_edit.php:155 +#: usr/local/www/firewall_nat_out_edit.php:168 +#: usr/local/www/firewall_nat_out_edit.php:172 +msgid "A valid destination must be specified." +msgstr "Geçerli bir hedef belirtilmelidir." + +#: usr/local/www/firewall_nat_out_edit.php:163 +#: usr/local/www/firewall_nat_out_edit.php:176 +#: usr/local/www/firewall_nat_out_edit.php:180 +msgid "Negating destination address of \"any\" is invalid." +msgstr "Hedef adres \\\"Herhangi bir\\\"in tersi alınamaz." + +#: usr/local/www/firewall_nat_out_edit.php:168 +#: usr/local/www/firewall_nat_out_edit.php:181 +#: usr/local/www/firewall_nat_out_edit.php:185 +msgid "A valid target IP address must be specified." +msgstr "Geçerli bir hedef IP adresi belirtilmelidir." + +#: usr/local/www/firewall_nat_out_edit.php:173 +#: usr/local/www/firewall_nat_out_edit.php:186 +#: usr/local/www/firewall_nat_out_edit.php:190 +msgid "A valid target IP must be specified when using the 'Other Subnet' type." +msgstr "'Diğer Altağ' seçildiğinde geçerli bir hedef IP belirtilmelidir." + +#: usr/local/www/firewall_nat_out_edit.php:176 +#: usr/local/www/firewall_nat_out_edit.php:189 +#: usr/local/www/firewall_nat_out_edit.php:193 +msgid "" +"A valid target bit count must be specified when using the 'Other Subnet' " +"type." +msgstr "" +"'Diğer Altağ' seçildiğinde geçerli bir hedef bit sayısı belirtilmelidir." + +#: usr/local/www/firewall_nat_out_edit.php:189 +#: usr/local/www/firewall_nat_out_edit.php:202 +#: usr/local/www/firewall_nat_out_edit.php:206 +msgid "Only Round Robin pool options may be chosen when selecting an alias." +msgstr "" +"Bir grup seçilirken sadece Dairesel Denetim havuz seçenekleri " +"kullanılabilir." + +#: usr/local/www/firewall_nat_out_edit.php:403 +#: usr/local/www/firewall_nat_out_edit.php:416 +#: usr/local/www/firewall_nat_out_edit.php:420 +msgid "Edit Advanced Outbound NAT entry" +msgstr "Detaylı Dışarı NAT girdisini düzenle" + +#: usr/local/www/firewall_nat_out_edit.php:410 +#: usr/local/www/firewall_nat_out_edit.php:423 +#: usr/local/www/firewall_nat_out_edit.php:427 +msgid "Do not NAT" +msgstr "NAT yapma" + +#: usr/local/www/firewall_nat_out_edit.php:413 +#: usr/local/www/firewall_nat_out_edit.php:426 +#: usr/local/www/firewall_nat_out_edit.php:430 +msgid "" +"Enabling this option will disable NAT for traffic matching this rule and " +"stop processing Outbound NAT rules." +msgstr "" +"Bu seçeneği etkinleştirerek bu kurala uyan trafikte NATı devre dışı " +"bırakabilir ve Dışarı NAT kurallarının çalışmasını durdurabilirsiniz." + +#: usr/local/www/firewall_nat_out_edit.php:414 +#: usr/local/www/firewall_nat_out_edit.php:427 +#: usr/local/www/firewall_nat_out_edit.php:431 +msgid "Hint: in most cases, you won't use this option." +msgstr "İpucu: Çoğu durumda bu seçenek kullanılmaz." + +#: usr/local/www/firewall_nat_out_edit.php:463 +#: usr/local/www/firewall_nat_out_edit.php:476 +#: usr/local/www/firewall_nat_out_edit.php:480 +msgid "Choose which protocol this rule should match." +msgstr "Bu kuralın uyacağı protokolü seçiniz." + +#: usr/local/www/firewall_nat_out_edit.php:464 +#: usr/local/www/firewall_nat_out_edit.php:477 +#: usr/local/www/firewall_nat_out_edit.php:481 +#, php-format +msgid "Hint: in most cases, you should specify %s any %s here." +msgstr "İpucu: Çoğu durumda burada %s tümü %s seçmelisiniz." + +#: usr/local/www/firewall_nat_out_edit.php:488 +#: usr/local/www/firewall_nat_out_edit.php:501 +#: usr/local/www/firewall_nat_out_edit.php:505 +msgid "Enter the source network for the outbound NAT mapping." +msgstr "Dışarı NAT eşleme için kaynak ağı girin." + +#: usr/local/www/firewall_nat_out_edit.php:491 +#: usr/local/www/firewall_nat_out_edit.php:504 +#: usr/local/www/firewall_nat_out_edit.php:508 +msgid "Source port:" +msgstr "Kaynak port:" + +#: usr/local/www/firewall_nat_out_edit.php:492 +#: usr/local/www/firewall_nat_out_edit.php:505 +#: usr/local/www/firewall_nat_out_edit.php:509 +msgid "" +"(leave \n" +"blank for any)" +msgstr "" +"(Tümü \n" +"için boş bırakınız)" + +#: usr/local/www/firewall_nat_out_edit.php:526 +#: usr/local/www/firewall_nat_out_edit.php:539 +#: usr/local/www/firewall_nat_out_edit.php:543 +msgid "Enter the destination network for the outbound NAT mapping." +msgstr "Dışarı NAT için hedef ağ giriniz." + +#: usr/local/www/firewall_nat_out_edit.php:530 +#: usr/local/www/firewall_nat_out_edit.php:543 +#: usr/local/www/firewall_nat_out_edit.php:547 +msgid "Destination port:" +msgstr "Hedef port:" + +#: usr/local/www/firewall_nat_out_edit.php:531 +#: usr/local/www/firewall_nat_out_edit.php:544 +#: usr/local/www/firewall_nat_out_edit.php:548 +msgid "" +"(leave blank for \n" +"any)" +msgstr "" +"(Tümü \n" +"için boş bırakınız)" + +#: usr/local/www/firewall_nat_out_edit.php:538 +#: usr/local/www/firewall_nat_out_edit.php:551 +#: usr/local/www/firewall_nat_out_edit.php:555 +msgid "Translation" +msgstr "Çeviri" + +#: usr/local/www/firewall_nat_out_edit.php:544 +#: usr/local/www/firewall_nat_out_edit.php:557 +#: usr/local/www/firewall_nat_out_edit.php:561 +msgid "Interface address" +msgstr "Arabirim adresi" + +#: usr/local/www/firewall_nat_out_edit.php:568 +#: usr/local/www/firewall_nat_out_edit.php:581 +#: usr/local/www/firewall_nat_out_edit.php:585 +msgid "Other Subnet (Enter Below)" +msgstr "Diğer Altağ (Aşağıya Giriniz)" + +#: usr/local/www/firewall_nat_out_edit.php:575 +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/firewall_nat_out_edit.php:591 +msgid "Other Subnet:" +msgstr "Diğer Altağ:" + +#: usr/local/www/firewall_nat_out_edit.php:586 +#: usr/local/www/firewall_nat_out_edit.php:599 +#: usr/local/www/firewall_nat_out_edit.php:602 +msgid "Packets matching this rule will be mapped to the IP address given here." +msgstr "Bu kurala uyan paketler burada belirtilen IP adresine eşlenecektir." + +#: usr/local/www/firewall_nat_out_edit.php:587 +#: usr/local/www/firewall_nat_out_edit.php:600 +#: usr/local/www/firewall_nat_out_edit.php:603 +msgid "" +"If you want this rule to apply to another IP address rather than the IP " +"address of the interface chosen above, select it here (you will need to " +"define " +msgstr "" +"Eğer bu kuralın yukarıda seçilen arabirim dışında bir IP adresine " +"uygulanmasını istiyorsanız, burada seçiniz (önce " + +#: usr/local/www/firewall_nat_out_edit.php:588 +#: usr/local/www/firewall_nat_out_edit.php:601 +#: usr/local/www/firewall_nat_out_edit.php:604 +msgid "addresses on the interface first)." +msgstr "arabirime adresler tanımlamalısınız)." + +#: usr/local/www/firewall_nat_out_edit.php:589 +#: usr/local/www/firewall_nat_out_edit.php:602 +msgid "" +"Also note that if you are trying to redirect connections on the LAN select " +"the \"any\" option." +msgstr "" +"Ayrıca LAN üzerinde bağlantıları yeniden yönlendirmek istiyorsanız \"herhangi " +"biri\" seçeneğini seçmeniz gerekir." + +#: usr/local/www/firewall_nat_out_edit.php:605 +#: usr/local/www/firewall_nat_out_edit.php:618 +#: usr/local/www/firewall_nat_out_edit.php:620 +msgid "" +"Only Round Robin types work with Host Aliases. Any type can be used with a " +"Subnet." +msgstr "" +"Altağlarda herhangi bir tür kullanılabilir. İstemci gruplarında ise sadece " +"Dairesel Denetim türleri çalışır." + +#: usr/local/www/firewall_nat_out_edit.php:606 +#: usr/local/www/firewall_nat_out_edit.php:619 +#: usr/local/www/firewall_nat_out_edit.php:621 +msgid "Round Robin: Loops through the translation addresses." +msgstr "Dairesel Denetim: Çeviri adreslerinde döner." + +#: usr/local/www/firewall_nat_out_edit.php:607 +#: usr/local/www/firewall_nat_out_edit.php:620 +#: usr/local/www/firewall_nat_out_edit.php:622 +msgid "Random: Selects an address from the translation address pool at random." +msgstr "Rasgele: Çeviri adres havuzundan rasgele bir adres seçer." + +#: usr/local/www/firewall_nat_out_edit.php:608 +#: usr/local/www/firewall_nat_out_edit.php:621 +#: usr/local/www/firewall_nat_out_edit.php:623 +msgid "" +"Source Hash: Uses a hash of the source address to determine the translation " +"address, ensuring that the redirection address is always the same for a " +"given source." +msgstr "" +"Kaynak Değeri: Çeviri adresini belirlemek için kaynak adresten hesaplanan " +"bir değer kullanılır. Böylece her bir kaynak için yönlendirileceği adres " +"sabitlenmiş olur." + +#: usr/local/www/firewall_nat_out_edit.php:609 +#: usr/local/www/firewall_nat_out_edit.php:622 +#: usr/local/www/firewall_nat_out_edit.php:624 +msgid "" +"Bitmask: Applies the subnet mask and keeps the last portion identical; " +"10.0.1.50 -> x.x.x.50." +msgstr "" +"Bit maskesi: Son bölümü aynen bırakarak altağ maskesini uygular; 10.0.1.50 " +"-> x.x.x.50." + +#: usr/local/www/firewall_nat_out_edit.php:610 +#: usr/local/www/firewall_nat_out_edit.php:623 +#: usr/local/www/firewall_nat_out_edit.php:625 +msgid "" +"Sticky Address: The Sticky Address option can be used with the Random and " +"Round Robin pool types to ensure that a particular source address is always " +"mapped to the same translation address." +msgstr "" +"Kalıcı Adres: Kalıcı Adres seçeneği Rasgele ve Dairesel Denetim havuz " +"türleriyle belirli bir kaynak adresin her zaman aynı çeviri adresine " +"eşlenmesi için kullanılabilir." + +#: usr/local/www/firewall_nat_out_edit.php:615 +#: usr/local/www/firewall_nat_out_edit.php:628 +#: usr/local/www/firewall_nat_out_edit.php:630 +#, fuzzy +msgid "Port:" +msgstr "Port:" + +#: usr/local/www/firewall_nat_out_edit.php:619 +#: usr/local/www/firewall_nat_out_edit.php:632 +#: usr/local/www/firewall_nat_out_edit.php:634 +msgid "Enter the source port for the outbound NAT mapping." +msgstr "Dışarı NAT eşleme için kaynak port giriniz." + +#: usr/local/www/firewall_nat_out_edit.php:622 +#: usr/local/www/firewall_nat_out_edit.php:635 +#: usr/local/www/firewall_nat_out_edit.php:637 +msgid "Static-port:" +msgstr "Statik-port:" + +#: usr/local/www/firewall_nat_out_edit.php:632 +#: usr/local/www/firewall_nat_out_edit.php:645 +msgid "" +"HINT: This prevents the rule from automatically syncing to other CARP " +"members." +msgstr "" +"İpucu: Diğer CARP üyelerine otomatik olarak bu kuralın gönderilmesini " +"engeller." + +#: usr/local/www/firewall_rules.php:52 +#: usr/local/www/firewall_rules_edit.php:628 usr/local/www/fbegin.inc:112 +#: usr/local/www/fbegin.inc:129 usr/local/www/firewall_rules_edit.php:660 +#: usr/local/www/fbegin.inc:138 usr/local/www/firewall_rules_edit.php:661 +#: usr/local/www/firewall_rules.php:49 +#: usr/local/www/firewall_rules_edit.php:664 +#: usr/local/www/diag_system_pftop.php:139 usr/local/www/firewall_rules.php:49 +#: usr/local/www/fbegin.inc:130 +msgid "Rules" +msgstr "Kurallar" + +#: usr/local/www/firewall_rules.php:129 +#: usr/local/www/firewall_rules_edit.php:828 +#: usr/local/www/firewall_rules_edit.php:863 +#: usr/local/www/firewall_rules.php:127 +#: usr/local/www/firewall_rules_edit.php:866 +#: usr/local/www/firewall_rules.php:127 +msgid "Echo request" +msgstr "Yankı isteği" + +#: usr/local/www/firewall_rules.php:130 +#: usr/local/www/firewall_rules_edit.php:829 +#: usr/local/www/firewall_rules_edit.php:864 +#: usr/local/www/firewall_rules.php:128 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_rules.php:128 +msgid "Echo reply" +msgstr "Yankı yanıtı" + +#: usr/local/www/firewall_rules.php:131 +#: usr/local/www/firewall_rules_edit.php:830 +#: usr/local/www/firewall_rules_edit.php:865 +#: usr/local/www/firewall_rules.php:129 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_rules.php:129 +msgid "Destination unreachable" +msgstr "Hedef ulaşılabilir değil" + +#: usr/local/www/firewall_rules.php:132 +#: usr/local/www/firewall_rules_edit.php:831 +#: usr/local/www/firewall_rules_edit.php:866 +#: usr/local/www/firewall_rules.php:130 +#: usr/local/www/firewall_rules_edit.php:869 +#: usr/local/www/firewall_rules.php:130 +msgid "Source quench" +msgstr "Kaynak söndürme" + +#: usr/local/www/firewall_rules.php:133 +#: usr/local/www/firewall_rules_edit.php:832 +#: usr/local/www/firewall_rules_edit.php:867 +#: usr/local/www/firewall_rules.php:131 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules.php:131 +msgid "Redirect" +msgstr "Yönlendirme" + +#: usr/local/www/firewall_rules.php:134 +#: usr/local/www/firewall_rules_edit.php:833 +#: usr/local/www/firewall_rules_edit.php:868 +#: usr/local/www/firewall_rules.php:132 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules.php:132 +msgid "Alternate Host" +msgstr "Alternatif Host" + +#: usr/local/www/firewall_rules.php:135 +#: usr/local/www/firewall_rules_edit.php:834 +#: usr/local/www/firewall_rules_edit.php:869 +#: usr/local/www/firewall_rules.php:133 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules.php:133 +msgid "Router advertisement" +msgstr "Yönlendirici ilanı" + +#: usr/local/www/firewall_rules.php:136 +#: usr/local/www/firewall_rules_edit.php:835 +#: usr/local/www/firewall_rules_edit.php:870 +#: usr/local/www/firewall_rules.php:134 +#: usr/local/www/firewall_rules_edit.php:873 +#: usr/local/www/firewall_rules.php:134 +msgid "Router solicitation" +msgstr "Yönlendirici talebi" + +#: usr/local/www/firewall_rules.php:137 +#: usr/local/www/firewall_rules_edit.php:836 +#: usr/local/www/firewall_rules_edit.php:871 +#: usr/local/www/firewall_rules.php:135 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules.php:135 +msgid "Time exceeded" +msgstr "Zaman doldu" + +#: usr/local/www/firewall_rules.php:138 +#: usr/local/www/firewall_rules_edit.php:837 +#: usr/local/www/firewall_rules_edit.php:872 +#: usr/local/www/firewall_rules.php:136 +#: usr/local/www/firewall_rules_edit.php:875 +#: usr/local/www/firewall_rules.php:136 +msgid "Invalid IP header" +msgstr "Geçersiz IP başlığı" + +#: usr/local/www/firewall_rules.php:139 +#: usr/local/www/firewall_rules_edit.php:838 +#: usr/local/www/firewall_rules_edit.php:873 +#: usr/local/www/firewall_rules.php:137 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules.php:137 +msgid "Timestamp" +msgstr "Zaman damgası" + +#: usr/local/www/firewall_rules.php:140 +#: usr/local/www/firewall_rules_edit.php:839 +#: usr/local/www/firewall_rules_edit.php:874 +#: usr/local/www/firewall_rules.php:138 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules.php:138 +msgid "Timestamp reply" +msgstr "Zaman damgası yanıtı" + +#: usr/local/www/firewall_rules.php:141 +#: usr/local/www/firewall_rules_edit.php:840 +#: usr/local/www/firewall_rules_edit.php:875 +#: usr/local/www/firewall_rules.php:139 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules.php:139 +msgid "Information request" +msgstr "Bilgi talebi" + +#: usr/local/www/firewall_rules.php:142 +#: usr/local/www/firewall_rules_edit.php:841 +#: usr/local/www/firewall_rules_edit.php:876 +#: usr/local/www/firewall_rules.php:140 +#: usr/local/www/firewall_rules_edit.php:879 +#: usr/local/www/firewall_rules.php:140 +msgid "Information reply" +msgstr "Bilgi yanıtı" + +#: usr/local/www/firewall_rules.php:143 +#: usr/local/www/firewall_rules_edit.php:842 +#: usr/local/www/firewall_rules_edit.php:877 +#: usr/local/www/firewall_rules.php:141 +#: usr/local/www/firewall_rules_edit.php:880 +#: usr/local/www/firewall_rules.php:141 +msgid "Address mask request" +msgstr "Adres maskesi talebi" + +#: usr/local/www/firewall_rules.php:144 +#: usr/local/www/firewall_rules_edit.php:843 +#: usr/local/www/firewall_rules_edit.php:878 +#: usr/local/www/firewall_rules.php:142 +#: usr/local/www/firewall_rules_edit.php:881 +#: usr/local/www/firewall_rules.php:142 +msgid "Address mask reply" +msgstr "Adres maskesi yanıtı" + +#: usr/local/www/firewall_rules.php:201 usr/local/www/firewall_rules.php:205 +#: usr/local/www/firewall_rules.php:203 usr/local/www/firewall_rules.php:203 +#, php-format +msgid "" +"The settings have been applied. The firewall rules are now reloading in the " +"background.
    You can also %s monitor %s the reload progress" +msgstr "" +"Yapılandırma uygulandı. Güvenlik duvarı kuralları arka planda " +"yükleniyor.
    Aynı zamanda %2$s yükleme durumunu %1$s izleyebilirsiniz" + +#: usr/local/www/firewall_rules.php:315 usr/local/www/firewall_rules.php:317 +#: usr/local/www/firewall_rules.php:319 usr/local/www/firewall_rules.php:321 +#: usr/local/www/firewall_rules.php:312 usr/local/www/firewall_rules.php:314 +#: usr/local/www/firewall_rules.php:312 usr/local/www/firewall_rules.php:314 +msgid "" +"The firewall rule configuration has been changed.
    You must apply the " +"changes in order for them to take effect." +msgstr "" +"Güvenlik duvarı kuralları değiştirildi.
    Değişiklikleri uygulayarak etkin " +"hale gelmelerini sağlayabilirsiniz." + +#: usr/local/www/firewall_rules.php:338 usr/local/www/firewall_rules.php:342 +#: usr/local/www/firewall_rules.php:335 usr/local/www/firewall_rules.php:335 +msgid "Floating" +msgstr "Değişen" + +#: usr/local/www/firewall_rules.php:359 +#: usr/local/www/load_balancer_relay_action_edit.php:510 +#: usr/local/www/load_balancer_relay_action_edit.php:509 +#: usr/local/www/firewall_rules.php:363 +#: usr/local/www/load_balancer_relay_action_edit.php:507 +#: usr/local/www/firewall_rules.php:356 +#: usr/local/www/load_balancer_relay_action_edit.php:507 +#: usr/local/www/firewall_rules.php:356 +msgid "ID" +msgstr "Kimlik" + +#: usr/local/www/firewall_rules.php:368 +#: usr/local/www/firewall_rules_edit.php:1288 usr/local/www/interfaces.php:420 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1382 +#: usr/local/www/system_routes.php:127 usr/local/www/system_routes_edit.php:91 +#: usr/local/www/system_routes_edit.php:199 +#: usr/local/www/services_dhcp.php:655 usr/local/www/status_gateways.php:73 +#: usr/local/www/system_gateways.php:154 +#: usr/local/www/system_gateways_edit.php:376 +#: usr/local/www/services_dhcpv6.php:599 +#: usr/local/www/system_routes_edit.php:92 +#: usr/local/www/system_routes_edit.php:231 +#: usr/local/www/firewall_rules_edit.php:1355 +#: usr/local/www/firewall_rules.php:372 +#: usr/local/www/system_gateways_edit.php:397 +#: usr/local/www/services_dhcp.php:668 usr/local/www/interfaces.php:456 +#: usr/local/www/interfaces.php:509 usr/local/www/interfaces.php:1486 +#: usr/local/www/system_routes_edit.php:232 +#: usr/local/www/firewall_rules.php:365 +#: usr/local/www/system_gateways_edit.php:503 +#: usr/local/www/status_gateways.php:74 usr/local/www/services_dhcp.php:844 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:1474 +#: usr/local/www/system_gateways_edit.php:506 +#: usr/local/www/firewall_rules_edit.php:1370 +#: usr/local/www/services_dhcp_edit.php:410 +#: usr/local/www/diag_traceroute.php:98 usr/local/www/system_routes.php:131 +#: usr/local/www/services_dhcp.php:858 usr/local/www/system_routes_edit.php:92 +#: usr/local/www/system_routes_edit.php:232 +#: usr/local/www/firewall_rules.php:365 usr/local/www/system_gateways.php:154 +#: usr/local/www/status_gateways.php:74 usr/local/www/interfaces.php:441 +#: usr/local/www/interfaces.php:494 usr/local/www/interfaces.php:1487 +msgid "Gateway" +msgstr "Ağ geçidi" + +#: usr/local/www/firewall_rules.php:369 usr/local/www/status_queues.php:135 +#: usr/local/www/status_queues.php:142 usr/local/www/firewall_rules.php:373 +#: usr/local/www/status_queues.php:143 usr/local/www/firewall_rules.php:366 +#: usr/local/www/diag_system_pftop.php:138 +#: usr/local/www/firewall_rules.php:366 usr/local/www/status_queues.php:148 +msgid "Queue" +msgstr "Sıra" + +#: usr/local/www/firewall_rules.php:370 +#: usr/local/www/firewall_rules_edit.php:1261 +#: usr/local/www/firewall_rules_edit.php:1328 +#: usr/local/www/firewall_rules.php:374 usr/local/www/firewall_rules.php:367 +#: usr/local/www/firewall_rules_edit.php:1343 +#: usr/local/www/firewall_rules.php:367 +msgid "Schedule" +msgstr "Zamanlama" + +#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:824 +#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:334 +#: usr/local/www/firewall_rules.php:396 usr/local/www/firewall_rules.php:825 +#: usr/local/www/firewall_nat.php:216 usr/local/www/firewall_nat.php:347 +#: usr/local/www/firewall_rules.php:389 usr/local/www/firewall_rules.php:818 +#: usr/local/www/firewall_nat.php:216 usr/local/www/firewall_nat.php:347 +#: usr/local/www/firewall_rules.php:389 usr/local/www/firewall_rules.php:818 +msgid "Do you really want to delete the selected rules?" +msgstr "Seçili kuralları silmek istediğinize emin misiniz?" + +#: usr/local/www/firewall_rules.php:394 usr/local/www/firewall_rules.php:794 +#: usr/local/www/firewall_rules.php:826 usr/local/www/firewall_rules.php:398 +#: usr/local/www/firewall_rules.php:795 usr/local/www/firewall_rules.php:827 +#: usr/local/www/firewall_rules.php:391 usr/local/www/firewall_rules.php:788 +#: usr/local/www/firewall_rules.php:820 usr/local/www/firewall_rules.php:391 +#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:820 +msgid "add new rule" +msgstr "yeni kural ekle" + +#: usr/local/www/firewall_rules.php:431 usr/local/www/firewall_rules.php:425 +#: usr/local/www/firewall_rules.php:418 usr/local/www/firewall_rules.php:418 +msgid "Anti-Lockout Rule" +msgstr "Kilitlenmeme Kuralı" + +#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:469 +#: usr/local/www/firewall_rules.php:497 usr/local/www/firewall_rules.php:780 +#: usr/local/www/firewall_rules.php:434 usr/local/www/firewall_rules.php:463 +#: usr/local/www/firewall_rules.php:491 usr/local/www/firewall_rules.php:777 +#: usr/local/www/firewall_rules.php:427 usr/local/www/firewall_rules.php:456 +#: usr/local/www/firewall_rules.php:484 usr/local/www/firewall_rules.php:770 +#: usr/local/www/firewall_rules.php:427 usr/local/www/firewall_rules.php:456 +#: usr/local/www/firewall_rules.php:484 usr/local/www/firewall_rules.php:770 +msgid "add a new rule based on this one" +msgstr "bu kuralı temel alan yeni bir kural ekle" + +#: usr/local/www/firewall_rules.php:453 usr/local/www/firewall_rules.php:447 +#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:440 +msgid "RFC 1918 networks" +msgstr "RFC 1918 ağları" + +#: usr/local/www/firewall_rules.php:460 usr/local/www/interfaces.php:2414 +#: usr/local/www/firewall_rules.php:454 usr/local/www/interfaces.php:2615 +#: usr/local/www/firewall_rules.php:447 usr/local/www/interfaces.php:2603 +#: usr/local/www/firewall_rules.php:447 usr/local/www/interfaces.php:2633 +msgid "Block private networks" +msgstr "Özel networkleri engelle" + +#: usr/local/www/firewall_rules.php:481 usr/local/www/firewall_rules.php:475 +#: usr/local/www/firewall_rules.php:468 usr/local/www/firewall_rules.php:468 +msgid "Reserved/not assigned by IANA" +msgstr "Ayrılmış/IANA tarafından atanmamış" + +#: usr/local/www/firewall_rules.php:488 usr/local/www/interfaces.php:2426 +#: usr/local/www/firewall_rules.php:482 usr/local/www/interfaces.php:2627 +#: usr/local/www/firewall_rules.php:475 usr/local/www/interfaces.php:2615 +#: usr/local/www/firewall_rules.php:475 usr/local/www/interfaces.php:2645 +msgid "Block bogon networks" +msgstr "Sahte ağları engelle" + +#: usr/local/www/firewall_rules.php:513 usr/local/www/firewall_rules.php:507 +#: usr/local/www/firewall_rules.php:500 usr/local/www/firewall_rules.php:500 +msgid "advanced settings set" +msgstr "detaylı ayar kümesi" + +#: usr/local/www/firewall_rules.php:537 usr/local/www/firewall_rules.php:531 +#: usr/local/www/firewall_rules.php:524 usr/local/www/firewall_rules.php:524 +msgid "click to toggle enabled/disabled status" +msgstr "açık/kapalı durumunu değiştirmek için tıklayın" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:846 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:845 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:845 +#: usr/local/www/firewall_rules.php:560 +msgid "Mon" +msgstr "Pts" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:560 +msgid "Tues" +msgstr "Sal" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:848 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:847 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:847 +#: usr/local/www/firewall_rules.php:560 +msgid "Wed" +msgstr "Çar" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560 +#: usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_rules.php:560 +msgid "Thur" +msgstr "Per" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:850 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:849 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:849 +#: usr/local/www/firewall_rules.php:560 +msgid "Fri" +msgstr "Cum" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:851 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:850 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:850 +#: usr/local/www/firewall_rules.php:560 +msgid "Sat" +msgstr "Cts" + +#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:852 +#: usr/local/www/firewall_rules.php:567 +#: usr/local/www/firewall_schedule_edit.php:851 +#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_schedule.php:43 +#: usr/local/www/firewall_schedule_edit.php:69 +#: usr/local/www/firewall_schedule_edit.php:851 +#: usr/local/www/firewall_rules.php:560 +msgid "Sun" +msgstr "Paz" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "January" +msgstr "Ocak" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "February" +msgstr "Şubat" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "March" +msgstr "Mart" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "April" +msgstr "Nisan" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "May" +msgstr "Mayıs" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "June" +msgstr "Haziran" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "July" +msgstr "Temmuz" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "August" +msgstr "Ağustos" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "September" +msgstr "Eylül" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "October" +msgstr "Ekim" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "November" +msgstr "Kasım" + +#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561 +#: usr/local/www/firewall_schedule.php:44 +#: usr/local/www/firewall_schedule_edit.php:70 +#: usr/local/www/firewall_rules.php:561 +msgid "December" +msgstr "Aralık" + +#: usr/local/www/firewall_rules.php:685 usr/local/www/firewall_rules.php:679 +#: usr/local/www/firewall_rules.php:672 usr/local/www/firewall_rules.php:672 +msgid "Traffic matching this rule is currently being denied" +msgstr "Bu kurala uyan trafik engellenmektedir" + +#: usr/local/www/firewall_rules.php:690 usr/local/www/firewall_rules.php:684 +#: usr/local/www/firewall_rules.php:677 usr/local/www/firewall_rules.php:677 +msgid "Traffic matching this rule is currently being allowed" +msgstr "Bu kurala uyan trafik izinlidir" + +#: usr/local/www/firewall_rules.php:700 usr/local/www/firewall_rules.php:694 +#: usr/local/www/firewall_rules.php:687 usr/local/www/firewall_rules.php:687 +msgid "This rule is not currently active because its period has expired" +msgstr "Süresi geçtiği için bu kural artık etkin değil" + +#: usr/local/www/firewall_rules.php:792 usr/local/www/firewall_rules.php:785 +#: usr/local/www/firewall_rules.php:785 +msgid "No rules are currently defined for this interface" +msgstr "Bu arabirim için herhangi bir kural tanımlanmadı" + +#: usr/local/www/firewall_rules.php:793 usr/local/www/firewall_rules.php:786 +#: usr/local/www/firewall_rules.php:786 +msgid "" +"All incoming connections on this interface will be blocked until you add " +"pass rules." +msgstr "" +"Bu arabirimden gelen tüm bağlantılar siz izin kuralı ekleyene kadar " +"engellenecektir." + +#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795 +#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:788 +msgid "Click the" +msgstr "Yeni kural" + +#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795 +#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:788 +msgid " button to add a new rule." +msgstr " eklemek için tıklayınız." + +#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_nat.php:327 +#: usr/local/www/firewall_rules.php:818 usr/local/www/firewall_nat.php:340 +#: usr/local/www/firewall_rules.php:811 usr/local/www/firewall_nat.php:340 +#: usr/local/www/firewall_rules.php:811 +msgid "move selected rules to end" +msgstr "seçili kuralları sona taşı" + +#: usr/local/www/firewall_rules.php:835 usr/local/www/firewall_nat.php:345 +#: usr/local/www/firewall_rules.php:836 usr/local/www/firewall_nat.php:358 +#: usr/local/www/firewall_rules.php:829 usr/local/www/firewall_nat.php:358 +#: usr/local/www/firewall_rules.php:829 +msgid "pass" +msgstr "izin ver" + +#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:839 +#: usr/local/www/firewall_rules.php:832 usr/local/www/firewall_rules.php:832 +msgid "block" +msgstr "engelle" + +#: usr/local/www/firewall_rules.php:841 usr/local/www/license.php:125 +#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:835 +#: usr/local/www/license.php:125 usr/local/www/firewall_rules.php:835 +msgid "reject" +msgstr "reddet" + +#: usr/local/www/firewall_rules.php:844 usr/local/www/firewall_rules.php:845 +#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:838 +msgid "log" +msgstr "günlüğe kaydet" + +#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:849 +#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:842 +msgid "pass (disabled)" +msgstr "izin ver (devre dışı)" + +#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:852 +#: usr/local/www/firewall_rules.php:845 usr/local/www/firewall_rules.php:845 +msgid "block (disabled)" +msgstr "engelle (devre dışı)" + +#: usr/local/www/firewall_rules.php:854 usr/local/www/firewall_rules.php:855 +#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:848 +msgid "reject (disabled)" +msgstr "reddet (devre dışı)" + +#: usr/local/www/firewall_rules.php:857 usr/local/www/firewall_rules.php:858 +#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:851 +msgid "log (disabled)" +msgstr "günlüğe kaydet (devre dışı)" + +#: usr/local/www/firewall_rules.php:863 +#: usr/local/www/load_balancer_pool.php:148 usr/local/www/vpn_l2tp.php:354 +#: usr/local/www/vpn_l2tp.php:371 usr/local/www/firewall_rules.php:864 +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/firewall_rules.php:857 usr/local/www/vpn_l2tp.php:355 +#: usr/local/www/vpn_l2tp.php:372 usr/local/www/load_balancer_pool.php:147 +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:375 +#: usr/local/www/load_balancer_pool.php:147 +#: usr/local/www/firewall_rules.php:857 +msgid "Hint:" +msgstr "İpucu:" + +#: usr/local/www/firewall_rules.php:867 usr/local/www/firewall_rules.php:868 +#: usr/local/www/firewall_rules.php:861 usr/local/www/firewall_rules.php:861 +msgid "" +"Rules are evaluated on a first-match basis (i.e. the action of the first " +"rule to match a packet will be executed). This means that if you use block " +"rules, you'll have to pay attention to the rule order. Everything that isn't " +"explicitly passed is blocked by default. " +msgstr "" +"Kurallar ilk uyan sırasına göre işlemektedir (pakete ilk uyan kuralın eylemi " +"gerçekleştirilir). Yani eğer 'engelle' kuralları kullanıyorsanız kural " +"sıralamasına dikkat etmelisiniz. Özellikle 'izin ver'mediğiniz kurallar " +"öntanımlı olarak engellenecektir." + +#: usr/local/www/firewall_rules.php:874 usr/local/www/firewall_rules.php:875 +#: usr/local/www/firewall_rules.php:868 usr/local/www/firewall_rules.php:868 +msgid "" +"Floating rules are evaluated on a first-match basis (i.e. the action of the " +"first rule to match a packet will be executed) only if the 'quick' option is " +"checked on a rule. Otherwise they will only apply if no other rules match. " +"Pay close attention to the rule order and options chosen. If no rule here " +"matches, the per-interface or default rules are used. " +msgstr "" +"Eğer bir kuralda 'hızlı' seçeneği etkinleştirilmişse, değişen kurallar \\\"ilk " +"uyan\\\" mantığıyla değerlendirilir (yani pakete uyan ilk kuralın eylemi " +"işletilir). Aksi taktirde diğer kurallar uymazsa işletilirler. Seçimlerinize " +"ve kural sırasına dikkat etmelisiniz. Eğer buradaki kuralların hiçbiri " +"eşleşmezse, arabirim başına veya öntanımlı kurallar işler." + +#: usr/local/www/firewall_rules_edit.php:201 +#: usr/local/www/firewall_rules_edit.php:210 +msgid "Reject type rules only works when the protocol is set to TCP." +msgstr "Reddet kuralları sadece protokol TCP ise kullanılabilir." + +#: usr/local/www/firewall_rules_edit.php:204 +#: usr/local/www/firewall_rules_edit.php:213 +#: usr/local/www/firewall_rules_edit.php:210 +msgid "Queue type rules only work with queues." +msgstr "Sıra türü kurallar sadece sıralarda işe yarar." + +#: usr/local/www/firewall_rules_edit.php:212 +#: usr/local/www/firewall_rules_edit.php:227 +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:222 +msgid "You can not assign a IPv4 gateway group on IPv6 Address Family rule" +msgstr "IPv4 ağ geçidi grubunu IPv6 Adres Ailesi kuralına atayamazsınız" + +#: usr/local/www/firewall_rules_edit.php:215 +#: usr/local/www/firewall_rules_edit.php:230 +#: usr/local/www/firewall_rules_edit.php:228 +#: usr/local/www/firewall_rules_edit.php:225 +msgid "You can not assign a IPv6 gateway group on IPv4 Address Family rule" +msgstr "IPv6 ağ geçidi grubunu IPv4 Adres Ailesi kuralına atayamazsınız" + +#: usr/local/www/firewall_rules_edit.php:222 +#: usr/local/www/firewall_rules_edit.php:240 +#: usr/local/www/firewall_rules_edit.php:239 +#: usr/local/www/firewall_rules_edit.php:236 +msgid "You can not assign the IPv4 Gateway to a IPv6 Filter rule" +msgstr "IPv4 Ağ geçidini IPv6 Filtre kuralına atayamazsınız" + +#: usr/local/www/firewall_rules_edit.php:225 +#: usr/local/www/firewall_rules_edit.php:243 +#: usr/local/www/firewall_rules_edit.php:242 +#: usr/local/www/firewall_rules_edit.php:239 +msgid "You can not assign the IPv6 Gateway to a IPv4 Filter rule" +msgstr "IPv6 Ağ geçidini IPv4 Filtre kuralına atayamazsınız" + +#: usr/local/www/firewall_rules_edit.php:297 +#: usr/local/www/firewall_rules_edit.php:321 +#: usr/local/www/firewall_rules_edit.php:320 +#: usr/local/www/firewall_rules_edit.php:323 +#, php-format +msgid "%s is only valid with protocol tcp." +msgstr "%s sadece TCP protokolü ile çalışır." + +#: usr/local/www/firewall_rules_edit.php:299 +#: usr/local/www/firewall_rules_edit.php:323 +#: usr/local/www/firewall_rules_edit.php:322 +#: usr/local/www/firewall_rules_edit.php:325 +#, php-format +msgid "%s is only valid if the gateway is set to 'default'." +msgstr "%s sadece varsayılan ağ geçidi ile çalışır." + +#: usr/local/www/firewall_rules_edit.php:327 +#: usr/local/www/firewall_rules_edit.php:351 +#: usr/local/www/firewall_rules_edit.php:350 +#: usr/local/www/firewall_rules_edit.php:353 +#, php-format +msgid "" +"%s is not a valid end source port. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" +"%s geçerli bir bitiş kaynak portu değil. Port grubu ya da 1 ile 65535 arası " +"bir tamsayı olmalıdır." + +#: usr/local/www/firewall_rules_edit.php:381 +#: usr/local/www/firewall_rules_edit.php:410 +#: usr/local/www/firewall_rules_edit.php:409 +#: usr/local/www/firewall_rules_edit.php:412 +#, php-format +msgid "" +"The Source IP address %s Address Family differs from the destination %s." +msgstr "Kaynak IP adresi %s Hedef Adres Ailesi %s den farklıdır." + +#: usr/local/www/firewall_rules_edit.php:383 +#: usr/local/www/firewall_rules_edit.php:412 +#: usr/local/www/firewall_rules_edit.php:411 +#: usr/local/www/firewall_rules_edit.php:414 +msgid "You can not use IPv6 addresses in IPv4 rules." +msgstr "IPv6 adreslerini IPv4 kuralları ile kullanamazsınız." + +#: usr/local/www/firewall_rules_edit.php:385 +#: usr/local/www/firewall_rules_edit.php:414 +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_rules_edit.php:416 +msgid "You can not use IPv4 addresses in IPv6 rules." +msgstr "IPv4 adreslerini IPv6 kuralları ile kullanamazsınız." + +#: usr/local/www/firewall_rules_edit.php:402 +#: usr/local/www/firewall_rules_edit.php:434 +#: usr/local/www/firewall_rules_edit.php:433 +#: usr/local/www/firewall_rules_edit.php:436 +msgid "OS detection is only valid with protocol tcp." +msgstr "İşletim sistemi tespiti sadece TCP protokolünde çalışır." + +#: usr/local/www/firewall_rules_edit.php:406 +#: usr/local/www/firewall_rules_edit.php:438 +#: usr/local/www/firewall_rules_edit.php:437 +#: usr/local/www/firewall_rules_edit.php:440 +msgid "You have to select a queue when you select an acknowledge queue too." +msgstr "Alındılama kuyruğu seçtiğinizde bir kuyruk da seçmeniz gerekir." + +#: usr/local/www/firewall_rules_edit.php:408 +#: usr/local/www/firewall_rules_edit.php:440 +#: usr/local/www/firewall_rules_edit.php:439 +#: usr/local/www/firewall_rules_edit.php:442 +msgid "Acknowledge queue and Queue cannot be the same." +msgstr "Alındılama kuyruğu ve kuyruk aynı olamaz." + +#: usr/local/www/firewall_rules_edit.php:411 +#: usr/local/www/firewall_rules_edit.php:443 +#: usr/local/www/firewall_rules_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:445 +msgid "" +"You can not use limiters in Floating rules without choosing a direction." +msgstr "Değişen kurallarda yön seçmeksizin limitleyici kulllanamazsınız." + +#: usr/local/www/firewall_rules_edit.php:413 +#: usr/local/www/firewall_rules_edit.php:445 +#: usr/local/www/firewall_rules_edit.php:444 +#: usr/local/www/firewall_rules_edit.php:447 +msgid "" +"You can not use gateways in Floating rules without choosing a direction." +msgstr "Değişen kurallarda yön seçmeksizin ağ geçidi kullanamazsınız." + +#: usr/local/www/firewall_rules_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:448 +#: usr/local/www/firewall_rules_edit.php:447 +#: usr/local/www/firewall_rules_edit.php:450 +msgid "" +"You must select a queue for the In direction before selecting one for Out " +"too." +msgstr "" +"Dış yönü için bir kuyruk seçmeden önce İç yönü için bir kuyruk seçmelisiniz." + +#: usr/local/www/firewall_rules_edit.php:418 +#: usr/local/www/firewall_rules_edit.php:450 +#: usr/local/www/firewall_rules_edit.php:449 +#: usr/local/www/firewall_rules_edit.php:452 +msgid "In and Out Queue cannot be the same." +msgstr "Giriş ve Çıkış kuyrukları aynı olmaz." + +#: usr/local/www/firewall_rules_edit.php:420 +#: usr/local/www/firewall_rules_edit.php:422 +#: usr/local/www/firewall_rules_edit.php:452 +#: usr/local/www/firewall_rules_edit.php:454 +#: usr/local/www/firewall_rules_edit.php:451 +#: usr/local/www/firewall_rules_edit.php:453 +#: usr/local/www/firewall_rules_edit.php:454 +#: usr/local/www/firewall_rules_edit.php:456 +msgid "" +"You cannot select one queue and one virtual interface for IN and Out. both " +"must be from the same type." +msgstr "" +"Giriş ve Çıkış için bir kuyruk ve bir de sanal arabirim seçemezsiniz. İkisi " +"de aynı türden olmalıdır." + +#: usr/local/www/firewall_rules_edit.php:425 +#: usr/local/www/firewall_rules_edit.php:457 +#: usr/local/www/firewall_rules_edit.php:458 +#: usr/local/www/firewall_rules_edit.php:461 +msgid "ID must be an integer" +msgstr "Kimlik değeri tamsayı olmalıdır." + +#: usr/local/www/firewall_rules_edit.php:428 +#: usr/local/www/firewall_rules_edit.php:460 +#: usr/local/www/firewall_rules_edit.php:461 +#: usr/local/www/firewall_rules_edit.php:464 +msgid "You can only select a layer7 container for TCP and/or UDP protocols" +msgstr "Sadece TCP ve UDP protokolleri için layer7 barındırıcı seçilebilir" + +#: usr/local/www/firewall_rules_edit.php:430 +#: usr/local/www/firewall_rules_edit.php:462 +#: usr/local/www/firewall_rules_edit.php:463 +#: usr/local/www/firewall_rules_edit.php:466 +msgid "You can only select a layer7 container for Pass type rules." +msgstr "Sadece İzin türü kurallar için layer7 barındırıcı seçilebilir." + +#: usr/local/www/firewall_rules_edit.php:443 +#: usr/local/www/firewall_rules_edit.php:475 +#: usr/local/www/firewall_rules_edit.php:476 +#: usr/local/www/firewall_rules_edit.php:479 +msgid "" +"If you specify TCP flags that should be set you should specify out of which " +"flags as well." +msgstr "" +"İşaretlenecek TCP bayrakları belirtirseniz hangilerinden olduğunu da " +"belirtmelisiniz." + +#: usr/local/www/firewall_rules_edit.php:652 +#: usr/local/www/firewall_rules_edit.php:685 +#: usr/local/www/firewall_rules_edit.php:688 +msgid "Edit Firewall rule" +msgstr "Güvenlik duvarı kuralını düzenle" + +#: usr/local/www/firewall_rules_edit.php:673 +#: usr/local/www/firewall_rules_edit.php:706 +#: usr/local/www/firewall_rules_edit.php:709 +msgid "Choose what to do with packets that match the criteria specified below." +msgstr "Aşağıda belirtilen kritere uyan paketlere ne yapılacağını seçin." + +#: usr/local/www/firewall_rules_edit.php:674 +#: usr/local/www/firewall_rules_edit.php:707 +#: usr/local/www/firewall_rules_edit.php:710 +msgid "" +"Hint: the difference between block and reject is that with reject, a packet " +"(TCP RST or ICMP port unreachable for UDP) is returned to the sender, " +"whereas with block the packet is dropped silently. In either case, the " +"original packet is discarded." +msgstr "" +"İpucu: Engelle ile reddet arasındaki fark şudur; reddedilen paket (TCP " +"sıfırlama veya UDP ICM port erişilemez) sahibine geri gönderilir, engellenen " +"paket ise sessizce silinir. İki durumda da asıl paket 'çöpe gider'." + +#: usr/local/www/firewall_rules_edit.php:689 +#: usr/local/www/firewall_rules_edit.php:722 +#: usr/local/www/firewall_rules_edit.php:725 +msgid "Quick" +msgstr "Hızlı" + +#: usr/local/www/firewall_rules_edit.php:693 +#: usr/local/www/firewall_rules_edit.php:726 +#: usr/local/www/firewall_rules_edit.php:729 +msgid "Apply the action immediately on match." +msgstr "Eşleşen olduğunda eylemi hemen gerçekleştir." + +#: usr/local/www/firewall_rules_edit.php:694 +#: usr/local/www/firewall_rules_edit.php:727 +#: usr/local/www/firewall_rules_edit.php:730 +msgid "" +"Set this option if you need to apply this action to traffic that matches " +"this rule immediately." +msgstr "Bu kurala uyan trafiğin hemen uygulanması için bu seçeneği işaretleyin." + +#: usr/local/www/firewall_rules_edit.php:701 +#: usr/local/www/firewall_rules_edit.php:734 +#: usr/local/www/firewall_rules_edit.php:737 +msgid "Associated filter rule" +msgstr "İlişkilendirilmiş filtreleme kuralı" + +#: usr/local/www/firewall_rules_edit.php:703 +#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:137 +#: usr/local/www/firewall_rules_edit.php:736 +#: usr/local/www/firewall_rules_edit.php:739 +#: usr/local/www/diag_traceroute.php:141 +msgid "Note: " +msgstr "Not: " + +#: usr/local/www/firewall_rules_edit.php:703 +#: usr/local/www/firewall_rules_edit.php:736 +#: usr/local/www/firewall_rules_edit.php:739 +msgid "This is associated to a NAT rule." +msgstr "Bu bir NAT kuralına ilişkilendirilmiş." + +#: usr/local/www/firewall_rules_edit.php:704 +#: usr/local/www/firewall_rules_edit.php:737 +#: usr/local/www/firewall_rules_edit.php:740 +msgid "" +"You cannot edit the interface, protocol, source, or destination of " +"associated filter rules." +msgstr "" +"İlişkilendirilmiş filtreleme kurallarının arabirim, protokol, kaynak ya da " +"hedefini değiştiremezsiniz." + +#: usr/local/www/firewall_rules_edit.php:711 +#: usr/local/www/firewall_rules_edit.php:744 +#: usr/local/www/firewall_rules_edit.php:747 +msgid "View the NAT rule" +msgstr "NAT kuralını görüntüle" + +#: usr/local/www/firewall_rules_edit.php:768 +#: usr/local/www/firewall_rules_edit.php:803 +#: usr/local/www/firewall_rules_edit.php:806 +msgid "Choose on which interface packets must come in to match this rule." +msgstr "Bu kurala uyacak paketlerin hangi arabirimden geleceğinini seçiniz." + +#: usr/local/www/firewall_rules_edit.php:774 +#: usr/local/www/services_captiveportal_ip_edit.php:178 +#: usr/local/www/diag_ipsec_spd.php:88 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:443 +#: usr/local/www/services_captiveportal_hostname_edit.php:160 +#: usr/local/www/load_balancer_relay_action_edit.php:442 +#: usr/local/www/firewall_rules_edit.php:809 +#: usr/local/www/services_captiveportal_hostname_edit.php:158 +#: usr/local/www/load_balancer_relay_action_edit.php:440 +#: usr/local/www/services_captiveportal_ip_edit.php:176 +#: usr/local/www/diag_ipsec_spd.php:89 +#: usr/local/www/firewall_rules_edit.php:812 +#: usr/local/www/services_captiveportal_hostname_edit.php:160 +#: usr/local/www/diag_ipsec_spd.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:117 +#: usr/local/www/load_balancer_relay_action_edit.php:440 +msgid "Direction" +msgstr "Yön" + +#: usr/local/www/firewall_rules_edit.php:792 +#: usr/local/www/firewall_rules_edit.php:827 +#: usr/local/www/firewall_rules_edit.php:830 +msgid "TCP/IP Version" +msgstr "TCP/IP Versiyonu" + +#: usr/local/www/firewall_rules_edit.php:804 +#: usr/local/www/firewall_rules_edit.php:839 +#: usr/local/www/firewall_rules_edit.php:842 +msgid "Select the Internet Protocol version this rule applies to" +msgstr "Kuralların uygulanacağı İnternet Protokol versiyonunu seçin" + +#: usr/local/www/firewall_rules_edit.php:818 +#: usr/local/www/firewall_rules_edit.php:853 +#: usr/local/www/firewall_rules_edit.php:856 +msgid "Hint: in most cases, you should specify " +msgstr "İpucu: Çoğu durumda şunu belirtmelisiniz " + +#: usr/local/www/firewall_rules_edit.php:822 +#: usr/local/www/firewall_rules_edit.php:857 +#: usr/local/www/firewall_rules_edit.php:860 +msgid "ICMP type" +msgstr "ICMP türü" + +#: usr/local/www/firewall_rules_edit.php:851 +#: usr/local/www/firewall_rules_edit.php:886 +#: usr/local/www/firewall_rules_edit.php:889 +msgid "" +"If you selected ICMP for the protocol above, you may specify an ICMP type " +"here." +msgstr "" +"Eğer yukarıdan ICMP protokolünü seçtiyseniz burada ICMP türü " +"belirtebilirsiniz." + +#: usr/local/www/firewall_rules_edit.php:885 +#: usr/local/www/firewall_rules_edit.php:920 +#: usr/local/www/firewall_rules_edit.php:929 +msgid " subnet" +msgstr " altağ" + +#: usr/local/www/firewall_rules_edit.php:908 +#: usr/local/www/firewall_rules_edit.php:943 +#: usr/local/www/firewall_rules_edit.php:952 +msgid "Show source port range" +msgstr "Kaynak port aralığını göster" + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:988 +msgid "Specify the source port or port range for this rule." +msgstr "Bu kural için kaynak port ya da port aralığı belirtiniz." + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:988 +msgid "" +"and almost never equal to the destination port range (and should usually be" +msgstr "" +"ve neredeyse hiçbir zaman hedef port aralığıyla aynı değildir (ve genellikle" + +#: usr/local/www/firewall_rules_edit.php:944 +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:979 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:988 +#: usr/local/www/firewall_rules_edit.php:1089 +msgid "'to'" +msgstr "'hedef'" + +#: usr/local/www/firewall_rules_edit.php:1005 +#: usr/local/www/firewall_rules_edit.php:1040 +#: usr/local/www/firewall_rules_edit.php:1055 +msgid "Destination port range " +msgstr "Hedef port aralığı " + +#: usr/local/www/firewall_rules_edit.php:1037 +#: usr/local/www/firewall_rules_edit.php:1072 +#: usr/local/www/firewall_rules_edit.php:1087 +msgid "" +"Specify the port or port range for the destination of the packet for this " +"rule." +msgstr "Bu kural için hedef port yada port aralığı belirtin." + +#: usr/local/www/firewall_rules_edit.php:1039 +#: usr/local/www/firewall_rules_edit.php:1074 +#: usr/local/www/firewall_rules_edit.php:1089 +msgid "field empty if you only want to filter a single port" +msgstr "tek portun filtrelenmesi için alanı boş bırakınız" + +#: usr/local/www/firewall_rules_edit.php:1044 +#: usr/local/www/firewall_rules_edit.php:1079 +#: usr/local/www/firewall_rules_edit.php:1094 +msgid "Log" +msgstr "Günlük" + +#: usr/local/www/firewall_rules_edit.php:1047 +#: usr/local/www/firewall_rules_edit.php:1082 +#: usr/local/www/firewall_rules_edit.php:1097 +msgid "Log packets that are handled by this rule" +msgstr "Bu kural tarafından işlenen paketleri günlükle" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +msgid "" +"Hint: the firewall has limited local log space. Don't turn on logging for " +"everything. If you want to do a lot of logging, consider using a remote " +"syslog server" +msgstr "" +"İpucu: Güvenlik duvarının yerel günlük alanı kısıtlıdır. Herşeyi günlüğe " +"kaydetmeyin. Eğer çok sayıda günlükleme faaliyeti olacaksa bir uzak syslog " +"sunucu kullanmayı düşünebilirsiniz." + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +msgid "see the" +msgstr "bakın" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/firewall_rules_edit.php:1099 +msgid "Diagnostics: System logs: Settings" +msgstr "Araçlar: Sistem kayıtları: Ayarlar" + +#: usr/local/www/firewall_rules_edit.php:1049 +#: usr/local/www/services_captiveportal.php:908 +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/firewall_rules_edit.php:1084 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/services_captiveportal.php:953 +#: usr/local/www/services_captiveportal.php:949 +#: usr/local/www/firewall_rules_edit.php:1099 +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/services_captiveportal.php:951 +msgid "page" +msgstr "sayfa" + +#: usr/local/www/firewall_rules_edit.php:1057 +#: usr/local/www/services_unbound_acls.php:296 +#: usr/local/www/firewall_rules_edit.php:1092 +#: usr/local/www/firewall_rules_edit.php:1107 +msgid "You may enter a description here for your reference." +msgstr "Bu alana kendiniz için herhangi bir açıklama girebilirsiniz." + +#: usr/local/www/firewall_rules_edit.php:1080 +#: usr/local/www/firewall_rules_edit.php:1115 +#: usr/local/www/firewall_rules_edit.php:1130 +msgid "Source OS" +msgstr "Kaynak İşletim Sistemi" + +#: usr/local/www/firewall_rules_edit.php:1086 +#: usr/local/www/firewall_rules_edit.php:1121 +#: usr/local/www/firewall_rules_edit.php:1136 +msgid "OS Type:" +msgstr "İşletim Sistemi Türü:" + +#: usr/local/www/firewall_rules_edit.php:1109 +#: usr/local/www/firewall_rules_edit.php:1144 +#: usr/local/www/firewall_rules_edit.php:1159 +msgid "Note: this only works for TCP rules" +msgstr "Not: Bu ayar sadece TCP kurallarında çalışır." + +#: usr/local/www/firewall_rules_edit.php:1114 +#: usr/local/www/firewall_rules_edit.php:1149 +#: usr/local/www/firewall_rules_edit.php:1164 +msgid "Diffserv Code Point" +msgstr "Fark sunucusu kod noktası" + +#: usr/local/www/firewall_rules_edit.php:1130 +#: usr/local/www/interfaces_ppps_edit.php:675 +#: usr/local/www/vpn_ipsec_phase1.php:806 +#: usr/local/www/vpn_ipsec_phase2.php:629 +#: usr/local/www/firewall_rules_edit.php:1165 +#: usr/local/www/vpn_ipsec_phase2.php:655 +#: usr/local/www/vpn_ipsec_phase1.php:819 +#: usr/local/www/interfaces_ppps_edit.php:676 +#: usr/local/www/vpn_ipsec_phase2.php:751 +#: usr/local/www/vpn_ipsec_phase1.php:816 +#: usr/local/www/firewall_rules_edit.php:1180 +#: usr/local/www/interfaces_ppps_edit.php:682 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase2.php:772 +msgid "Advanced Options" +msgstr "Gelişmiş Seçenekler" + +#: usr/local/www/firewall_rules_edit.php:1137 +#: usr/local/www/firewall_rules_edit.php:1172 +#: usr/local/www/firewall_rules_edit.php:1187 +msgid "" +"This allows packets with IP options to pass. Otherwise they are blocked by " +"default. This is usually only seen with multicast traffic." +msgstr "" +"Bu ayar IP özellikli paketlerin geçmesine izin verir. Aksi taktirde " +"öntanımlı olarak engellenirler. seçenek izin verilecek IP seçeneklerini " +"belirler. Bu durum genellikle sadece çok noktaya yayın yapan trafikte " +"görülür." + +#: usr/local/www/firewall_rules_edit.php:1140 +#: usr/local/www/firewall_rules_edit.php:1175 +#: usr/local/www/firewall_rules_edit.php:1190 +msgid "This will disable auto generated reply-to for this rule." +msgstr "" +"Bu seçenek bu kural için otomatik oluşturulacak olan cevap kuralını devre " +"dışı bırakır." + +#: usr/local/www/firewall_rules_edit.php:1143 +#: usr/local/www/firewall_rules_edit.php:1178 +#: usr/local/www/firewall_rules_edit.php:1193 +msgid "" +"You can mark a packet matching this rule and use this mark to match on other " +"NAT/filter rules. It is called" +msgstr "" +"Bu kurala uyan paketleri işaretleyebilirsiniz. O işareti de diğer NAT/filtre " +"kurallarında kullanabilirsiniz. Buna" + +#: usr/local/www/firewall_rules_edit.php:1143 +#: usr/local/www/firewall_rules_edit.php:1178 +#: usr/local/www/firewall_rules_edit.php:1193 +msgid "Policy filtering" +msgstr "İlke filtreleme denir." + +#: usr/local/www/firewall_rules_edit.php:1146 +#: usr/local/www/firewall_rules_edit.php:1181 +#: usr/local/www/firewall_rules_edit.php:1196 +msgid "You can match packet on a mark placed before on another rule." +msgstr "Daha önce başka bir kuralda işaretlenen paketle eşleştirebilirsiniz." + +#: usr/local/www/firewall_rules_edit.php:1148 +#: usr/local/www/firewall_rules_edit.php:1183 +#: usr/local/www/firewall_rules_edit.php:1198 +msgid " Maximum state entries this rule can create" +msgstr " Bu kuralın oluşturabileceği maksimum durum girdisi" + +#: usr/local/www/firewall_rules_edit.php:1149 +#: usr/local/www/firewall_rules_edit.php:1184 +#: usr/local/www/firewall_rules_edit.php:1199 +msgid " Maximum number of unique source hosts" +msgstr " Maksimum benzersiz kaynak host sayısı" + +#: usr/local/www/firewall_rules_edit.php:1150 +#: usr/local/www/firewall_rules_edit.php:1185 +#: usr/local/www/firewall_rules_edit.php:1200 +msgid " Maximum number of established connections per host" +msgstr " Host başına maksimum kurulu bağlantı sayısı" + +#: usr/local/www/firewall_rules_edit.php:1151 +#: usr/local/www/firewall_rules_edit.php:1186 +#: usr/local/www/firewall_rules_edit.php:1201 +msgid " Maximum state entries per host" +msgstr " Host başına maksimum durum girdisi" + +#: usr/local/www/firewall_rules_edit.php:1160 +#: usr/local/www/firewall_rules_edit.php:1195 +#: usr/local/www/firewall_rules_edit.php:1210 +msgid "Maximum new connections / per second(s)" +msgstr "Saniyede kurulabilecek en fazla yeni bağlantı(lar)" + +#: usr/local/www/firewall_rules_edit.php:1164 +#: usr/local/www/firewall_rules_edit.php:1199 +#: usr/local/www/firewall_rules_edit.php:1214 +msgid "State Timeout in seconds" +msgstr "Saniye cinsinden durum zaman aşımı" + +#: usr/local/www/firewall_rules_edit.php:1167 +#: usr/local/www/firewall_rules_edit.php:1202 +#: usr/local/www/firewall_rules_edit.php:1217 +msgid "Note: Leave fields blank to disable that feature." +msgstr "Not: Bu özelliği kapatmak için alanları boş bırakınız." + +#: usr/local/www/firewall_rules_edit.php:1172 +#: usr/local/www/firewall_rules_edit.php:1207 +#: usr/local/www/firewall_rules_edit.php:1222 +msgid "TCP flags" +msgstr "TCP bayrakları" + +#: usr/local/www/firewall_rules_edit.php:1206 +#: usr/local/www/firewall_rules_edit.php:1241 +#: usr/local/www/firewall_rules_edit.php:1256 +msgid "Any flags." +msgstr "Tüm bayraklar." + +#: usr/local/www/firewall_rules_edit.php:1208 +#: usr/local/www/firewall_rules_edit.php:1243 +#: usr/local/www/firewall_rules_edit.php:1258 +msgid "" +"Use this to choose TCP flags that must be set or cleared for this rule to " +"match." +msgstr "" +"Bu kuralın eşleşmesi için 1 ya da 0 yapılacak TCP bayraklarını belirlemek " +"için kullanabilirsiniz." + +#: usr/local/www/firewall_rules_edit.php:1214 +#: usr/local/www/firewall_rules_edit.php:1249 +#: usr/local/www/firewall_rules_edit.php:1264 +msgid "State Type" +msgstr "Durum Türü" + +#: usr/local/www/firewall_rules_edit.php:1221 +#: usr/local/www/firewall_rules_edit.php:1228 +#: usr/local/www/firewall_rules_edit.php:1256 +#: usr/local/www/firewall_rules_edit.php:1263 +#: usr/local/www/firewall_rules_edit.php:1271 +#: usr/local/www/firewall_rules_edit.php:1278 +msgid "keep state" +msgstr "durumu koru" + +#: usr/local/www/firewall_rules_edit.php:1222 +#: usr/local/www/firewall_rules_edit.php:1229 +#: usr/local/www/firewall_rules_edit.php:1257 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1272 +#: usr/local/www/firewall_rules_edit.php:1279 +msgid "sloppy state" +msgstr "yarım durum" + +#: usr/local/www/firewall_rules_edit.php:1223 +#: usr/local/www/firewall_rules_edit.php:1230 +#: usr/local/www/firewall_rules_edit.php:1258 +#: usr/local/www/firewall_rules_edit.php:1265 +#: usr/local/www/firewall_rules_edit.php:1273 +#: usr/local/www/firewall_rules_edit.php:1280 +msgid "synproxy state" +msgstr "synproxy durumu" + +#: usr/local/www/firewall_rules_edit.php:1225 +#: usr/local/www/firewall_rules_edit.php:1260 +#: usr/local/www/firewall_rules_edit.php:1275 +msgid "" +"Hint: Select which type of state tracking mechanism you would like to use. " +"If in doubt, use keep state." +msgstr "" +"İpucu: Ne tür durum takip mekanizması kullanmak istediğinizi seçin. Emin " +"değilseniz 'durumu koru'yu kullanın." + +#: usr/local/www/firewall_rules_edit.php:1228 +#: usr/local/www/firewall_rules_edit.php:1229 +#: usr/local/www/firewall_rules_edit.php:1263 +#: usr/local/www/firewall_rules_edit.php:1264 +#: usr/local/www/firewall_rules_edit.php:1278 +#: usr/local/www/firewall_rules_edit.php:1279 +msgid "Works with all IP protocols." +msgstr "Tüm IP protokolleri ile çalışır." + +#: usr/local/www/firewall_rules_edit.php:1230 +#: usr/local/www/firewall_rules_edit.php:1265 +#: usr/local/www/firewall_rules_edit.php:1280 +msgid "" +"Proxies incoming TCP connections to help protect servers from spoofed TCP " +"SYN floods. This option includes the functionality of keep state and " +"modulate state combined." +msgstr "" +"Gelen TCP bağlantılarına vekillik yaparak sunucuları TCP SYN yükleme " +"saldırılarından korur. Bu seçenek durumu koru ve durumu ayarla " +"fonksiyonelliğini birlikte sağlar." + +#: usr/local/www/firewall_rules_edit.php:1231 +#: usr/local/www/firewall_rules_edit.php:1266 +#: usr/local/www/firewall_rules_edit.php:1281 +msgid "" +"Do not use state mechanisms to keep track. This is only useful if you're " +"doing advanced queueing in certain situations. Please check the " +"documentation." +msgstr "" +"İzleme amaçlı olarak durum mekanizmalarını kullanma. Bu sadece belirli " +"durumlarda, gelişmiş kuyruklama yapıyorsanız kullanışlıdır. Lütfen " +"belgeleri kontrol edin." + +#: usr/local/www/firewall_rules_edit.php:1245 +#: usr/local/www/firewall_rules_edit.php:1280 +msgid "" +"Hint: This prevents the rule from automatically syncing to other CARP " +"members." +msgstr "" +"İpucu: Bu seçenek, diğer CARP üyelerine otomatik olarak bu kuralın " +"gönderilmesini engeller." + +#: usr/local/www/firewall_rules_edit.php:1283 +#: usr/local/www/firewall_rules_edit.php:1350 +#: usr/local/www/firewall_rules_edit.php:1365 +msgid "Leave as 'none' to leave the rule enabled all the time." +msgstr "Kuralın her zaman etkin olması için 'hiçbiri' olarak bırakın." + +#: usr/local/www/firewall_rules_edit.php:1295 +#: usr/local/www/services_captiveportal.php:779 +#: usr/local/www/services_captiveportal.php:799 +#: usr/local/www/firewall_rules_edit.php:1362 +#: usr/local/www/services_captiveportal.php:821 +#: usr/local/www/services_captiveportal.php:841 +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/services_captiveportal.php:839 +#: usr/local/www/firewall_rules_edit.php:1377 +#: usr/local/www/services_captiveportal.php:807 +#: usr/local/www/services_captiveportal.php:837 +msgid "default" +msgstr "varsayılan" + +#: usr/local/www/firewall_rules_edit.php:1334 +#: usr/local/www/firewall_rules_edit.php:1405 +#: usr/local/www/firewall_rules_edit.php:1420 +msgid "" +"Leave as 'default' to use the system routing table. Or choose a gateway to " +"utilize policy based routing." +msgstr "" +"Sistem yönlendirme tablolarını kullanmak için 'varsayılan'da bırakınız. Ya " +"da ilke tabanlı yönlendirme yapmak için bir ağ geçidi seçin." + +#: usr/local/www/firewall_rules_edit.php:1339 +#: usr/local/www/firewall_rules_edit.php:1410 +#: usr/local/www/firewall_rules_edit.php:1425 +msgid "In/Out" +msgstr "İçeri/Dışarı" + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +msgid "" +"Choose the Out queue/Virtual interface only if you have also selected In." +msgstr "" +"Sadece 'İçeri'yi de seçtiyseniz 'Dışarı' kuyruğunu veya sanal arabirimi " +"seçin." + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +msgid "" +"The Out selection is applied to traffic leaving the interface where the rule " +"is created, In is applied to traffic coming into the chosen interface." +msgstr "" +"'Dışarı' seçimi kuralın oluşturulduğu arabirimden ayrılan trafiğe, 'İçeri' " +"seçimi ise arabirime gelen trafiğe uygulanır." + +#: usr/local/www/firewall_rules_edit.php:1383 +#: usr/local/www/firewall_rules_edit.php:1454 +#: usr/local/www/firewall_rules_edit.php:1469 +msgid "" +"If you are creating a floating rule, if the direction is In then the same " +"rules apply, if the direction is out the selections are reverted Out is for " +"incoming and In is for outgoing." +msgstr "" +"Değişen türde bir kural oluşturuyorsanız, yön 'İçeri' ise kural aynen " +"geçerlidir ama yön 'Dışarı' ise yaptığınız seçimler tersine çevrilir " +"'Dışarı' gelen, 'İçeri' giden paketler için olur." + +#: usr/local/www/firewall_rules_edit.php:1389 +#: usr/local/www/firewall_rules_edit.php:1460 +#: usr/local/www/firewall_rules_edit.php:1475 +msgid "Ackqueue/Queue" +msgstr "Alındılama kuyruğu/Kuyruk" + +#: usr/local/www/firewall_rules_edit.php:1439 +#: usr/local/www/firewall_rules_edit.php:1510 +#: usr/local/www/firewall_rules_edit.php:1525 +msgid "Choose the Acknowledge Queue only if you have selected Queue." +msgstr "Sadece Kuyruk seçtiyseniz Alındılama Kuyruğu'nu seçin." + +#: usr/local/www/firewall_rules_edit.php:1466 +#: usr/local/www/firewall_rules_edit.php:1537 +#: usr/local/www/firewall_rules_edit.php:1552 +msgid "" +"Choose a Layer7 container to apply application protocol inspection rules. " +"These are valid for TCP and UDP protocols only." +msgstr "" +"Uygulama protokolü inceleme kurallarını uygulamak için Layer7 barındırıcı " +"seçiniz. Bu seçenekler sadece TCP ve UDP protokolleri için geçerlidir." + +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_schedule_edit.php:61 usr/local/www/fbegin.inc:113 +#: usr/local/www/system_advanced_misc.php:380 usr/local/www/fbegin.inc:130 +#: usr/local/www/system_advanced_misc.php:423 usr/local/www/fbegin.inc:139 +#: usr/local/www/system_advanced_misc.php:472 +#: usr/local/www/firewall_schedule.php:50 +#: usr/local/www/firewall_schedule_edit.php:61 +#: usr/local/www/system_advanced_misc.php:484 usr/local/www/fbegin.inc:131 +msgid "Schedules" +msgstr "Zamanlamalar" + +#: usr/local/www/firewall_schedule.php:77 +#: usr/local/www/firewall_schedule.php:77 +#, php-format +msgid "Cannot delete Schedule. Currently in use by %s" +msgstr "Zamanlama %s tarafından kullanıldığından silinemez." + +#: usr/local/www/firewall_schedule.php:97 +#: usr/local/www/firewall_schedule.php:97 +msgid "Time Range(s)" +msgstr "Zaman Aralık(lar)ı" + +#: usr/local/www/firewall_schedule.php:103 +#: usr/local/www/firewall_schedule.php:233 +#: usr/local/www/firewall_schedule.php:103 +#: usr/local/www/firewall_schedule.php:233 +msgid "add a new schedule" +msgstr "yeni zamanlama ekle" + +#: usr/local/www/firewall_schedule.php:115 +#: usr/local/www/firewall_schedule.php:115 +msgid "Schedule is currently active" +msgstr "Zamanlama etkin durumda" + +#: usr/local/www/firewall_schedule.php:221 +#: usr/local/www/firewall_schedule.php:221 +msgid "Do you really want to delete this schedule?" +msgstr "Bu zamanlamayı silmek istediğinize emin misiniz?" + +#: usr/local/www/firewall_schedule.php:240 +#: usr/local/www/firewall_schedule.php:240 +msgid "" +"Schedules act as placeholders for time ranges to be used in Firewall Rules." +msgstr "" +"Zamanlamalar güvenlik duvarı kurallarında bir veya daha fazla zaman " +"aralığına taşıyıcı görevi görür." + +#: usr/local/www/firewall_schedule_edit.php:93 +#: usr/local/www/firewall_schedule_edit.php:93 +msgid "Schedule may not be named LAN." +msgstr "Zamanlama ismi LAN olamaz." + +#: usr/local/www/firewall_schedule_edit.php:95 +#: usr/local/www/firewall_schedule_edit.php:95 +msgid "Schedule may not be named WAN." +msgstr "Zamanlama ismi WAN olamaz." + +#: usr/local/www/firewall_schedule_edit.php:97 +#: usr/local/www/firewall_schedule_edit.php:97 +msgid "Schedule name cannot be blank." +msgstr "Zamanlama adı alanı boş bırakılamaz." + +#: usr/local/www/firewall_schedule_edit.php:101 +#: usr/local/www/firewall_schedule_edit.php:101 +msgid "Reserved word used for schedule name." +msgstr "Zamanlama adı olarak ayrılmış bir isim kullanılamaz." + +#: usr/local/www/firewall_schedule_edit.php:104 +#: usr/local/www/firewall_schedule_edit.php:104 +msgid "The schedule name may only consist of the characters a-z, A-Z, 0-9" +msgstr "" +"Zamanlama adı sadece a-z, A-Z, 0-9 karakterlerinden oluşmalıdır ve Türkçe " +"karakter kullanılmamalıdır." + +#: usr/local/www/firewall_schedule_edit.php:113 +#: usr/local/www/firewall_schedule_edit.php:113 +msgid "A Schedule with this name already exists." +msgstr "Bu isimde bir zamanlama zaten var." + +#: usr/local/www/firewall_schedule_edit.php:170 +#: usr/local/www/firewall_schedule_edit.php:170 +msgid "The schedule must have at least one time range configured." +msgstr "Zamanlamada en az bir zaman aralığı tanımlanmış olmalıdır." + +#: usr/local/www/firewall_schedule_edit.php:770 +#: usr/local/www/firewall_schedule_edit.php:769 +#: usr/local/www/firewall_schedule_edit.php:769 +msgid "Schedule information" +msgstr "Zamanlama bilgisi" + +#: usr/local/www/firewall_schedule_edit.php:776 +#: usr/local/www/firewall_schedule_edit.php:775 +#: usr/local/www/firewall_schedule_edit.php:775 +msgid "Schedule Name" +msgstr "Zamanlama Adı" + +#: usr/local/www/firewall_schedule_edit.php:782 +#: usr/local/www/firewall_schedule_edit.php:781 +#: usr/local/www/firewall_schedule_edit.php:781 +msgid "NOTE: This schedule is in use so the name may not be modified!" +msgstr "" +"NOT: Bu zamanlama bir güvenlik duvarı tarafından kullanılıyor, o yüzden adı " +"değiştirilemez!" + +#: usr/local/www/firewall_schedule_edit.php:787 +#: usr/local/www/firewall_schedule_edit.php:786 +#: usr/local/www/firewall_schedule_edit.php:786 +msgid "" +"The name of the alias may only consist of the characters a-z, A-Z and 0-9" +msgstr "" +"Grup adı a-z,A-Z, ve 0-9 arası karakterler içerebilir, Türkçe karakter " +"kullanılmamalıdır." + +#: usr/local/www/firewall_schedule_edit.php:804 +#: usr/local/www/firewall_schedule_edit.php:803 +#: usr/local/www/firewall_schedule_edit.php:803 +msgid "Month" +msgstr "Ay" + +#: usr/local/www/firewall_schedule_edit.php:847 +#: usr/local/www/firewall_schedule_edit.php:846 +#: usr/local/www/firewall_schedule_edit.php:846 +msgid "Tue" +msgstr "Sal" + +#: usr/local/www/firewall_schedule_edit.php:849 +#: usr/local/www/firewall_schedule_edit.php:848 +#: usr/local/www/firewall_schedule_edit.php:848 +msgid "Thu" +msgstr "Per" + +#: usr/local/www/firewall_schedule_edit.php:906 +#: usr/local/www/firewall_schedule_edit.php:905 +#: usr/local/www/firewall_schedule_edit.php:905 +msgid "" +"Click individual date to select that date only. Click the appropriate " +"weekday Header to select all occurences of that weekday." +msgstr "" +"Belirli bir tarihi seçme için o tarihe tıklayın. Haftanın belirli bir gününü " +"seçmek için haftanın günü başlığına tıklayın." + +#: usr/local/www/firewall_schedule_edit.php:914 +#: usr/local/www/firewall_schedule_edit.php:996 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:995 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:995 +msgid "Start Time" +msgstr "Başlama Zamanı" + +#: usr/local/www/firewall_schedule_edit.php:914 +#: usr/local/www/firewall_schedule_edit.php:997 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:996 +#: usr/local/www/firewall_schedule_edit.php:913 +#: usr/local/www/firewall_schedule_edit.php:996 +msgid "Stop Time" +msgstr "Bitiş Zamanı" + +#: usr/local/www/firewall_schedule_edit.php:927 +#: usr/local/www/firewall_schedule_edit.php:952 +#: usr/local/www/firewall_schedule_edit.php:926 +#: usr/local/www/firewall_schedule_edit.php:951 +#: usr/local/www/firewall_schedule_edit.php:926 +#: usr/local/www/firewall_schedule_edit.php:951 +msgid "Hr" +msgstr "Sa" + +#: usr/local/www/firewall_schedule_edit.php:934 +#: usr/local/www/firewall_schedule_edit.php:959 +#: usr/local/www/firewall_schedule_edit.php:933 +#: usr/local/www/firewall_schedule_edit.php:958 +#: usr/local/www/firewall_schedule_edit.php:933 +#: usr/local/www/firewall_schedule_edit.php:958 +msgid "Min" +msgstr "Dak" + +#: usr/local/www/firewall_schedule_edit.php:963 +#: usr/local/www/firewall_schedule_edit.php:962 +#: usr/local/www/firewall_schedule_edit.php:962 +msgid "" +"Select the time range for the day(s) selected on the Month(s) above. A full " +"day is 0:00-23:59." +msgstr "" +"Seçili tarihler için saat-dakika aralığını seçin. Tam bir gün 0:00 ile 23:59 " +"arasıdır." + +#: usr/local/www/firewall_schedule_edit.php:967 +#: usr/local/www/firewall_schedule_edit.php:966 +#: usr/local/www/firewall_schedule_edit.php:966 +msgid "Time Range Description" +msgstr "Zaman Aralığı Açıklaması" + +#: usr/local/www/firewall_schedule_edit.php:977 +#: usr/local/www/firewall_schedule_edit.php:976 +#: usr/local/www/firewall_schedule_edit.php:976 +msgid "Add Time" +msgstr "Zaman Ekle" + +#: usr/local/www/firewall_schedule_edit.php:978 +#: usr/local/www/firewall_schedule_edit.php:977 +#: usr/local/www/firewall_schedule_edit.php:977 +msgid "Clear Selection" +msgstr "Seçimi Temizle" + +#: usr/local/www/firewall_schedule_edit.php:987 +#: usr/local/www/firewall_schedule_edit.php:986 +#: usr/local/www/firewall_schedule_edit.php:986 +msgid "Schedule repeat" +msgstr "Zamanlama tekrarı" + +#: usr/local/www/firewall_schedule_edit.php:990 +#: usr/local/www/firewall_schedule_edit.php:989 +#: usr/local/www/firewall_schedule_edit.php:989 +msgid "Configured Ranges" +msgstr "Yapılandırılan Aralıklar" + +#: usr/local/www/firewall_schedule_edit.php:995 +#: usr/local/www/firewall_schedule_edit.php:994 +#: usr/local/www/firewall_schedule_edit.php:994 +msgid "Day(s)" +msgstr "Gün(ler)" + +#: usr/local/www/firewall_shaper.php:369 usr/local/www/firewall_shaper.php:370 +#: usr/local/www/firewall_shaper.php:370 +msgid "Disable shaper on interface" +msgstr "Arabirimdeki şekillendiriciyi kapat" + +#: usr/local/www/firewall_shaper.php:424 usr/local/www/firewall_shaper.php:425 +#: usr/local/www/firewall_shaper.php:425 +msgid "Remove Shaper" +msgstr "Şekillendiriciyi Kaldır" + +#: usr/local/www/diag_backup.php:84 usr/local/www/diag_backup.php:161 +#: usr/local/www/diag_backup.php:161 +msgid "Restored base_package menus after configuration restore." +msgstr "Yapılandırmaya geri dönüldükten sonra temel_paket menüleri yüklendi." + +#: usr/local/www/diag_backup.php:104 usr/local/www/fbegin.inc:120 +#: usr/local/www/fbegin.inc:156 usr/local/www/status_rrd_graph_settings.php:58 +#: usr/local/www/status_rrd_graph_settings.php:155 +#: usr/local/www/status_services.php:275 +#: usr/local/www/widgets/widgets/services_status.widget.php:80 +#: usr/local/www/fbegin.inc:137 usr/local/www/fbegin.inc:173 +#: usr/local/www/status_rrd_graph_settings.php:156 +#: usr/local/www/diag_backup.php:181 etc/inc/service-utils.inc:256 +#: usr/local/www/fbegin.inc:146 usr/local/www/fbegin.inc:181 +#: usr/local/www/status_rrd_graph_settings.php:58 +#: usr/local/www/status_rrd_graph_settings.php:156 +#: usr/local/www/diag_backup.php:181 usr/local/www/fbegin.inc:138 +#: usr/local/www/fbegin.inc:172 etc/inc/service-utils.inc:255 +msgid "Captive Portal" +msgstr "Hizmet Portalı" + +#: usr/local/www/diag_backup.php:105 usr/local/www/diag_backup.php:182 +#: usr/local/www/diag_backup.php:182 +msgid "Captive Portal Vouchers" +msgstr "Hizmet Portalı Biletleri" + +#: usr/local/www/diag_backup.php:106 usr/local/www/fbegin.inc:121 +#: usr/local/www/status_services.php:263 +#: usr/local/www/widgets/widgets/services_status.widget.php:68 +#: usr/local/www/fbegin.inc:138 usr/local/www/diag_backup.php:183 +#: etc/inc/service-utils.inc:241 usr/local/www/fbegin.inc:147 +#: usr/local/www/diag_backup.php:183 usr/local/www/fbegin.inc:139 +#: etc/inc/service-utils.inc:240 +msgid "DNS Forwarder" +msgstr "DNS Yönlendirici" + +#: usr/local/www/diag_backup.php:107 usr/local/www/fbegin.inc:125 +#: usr/local/www/fbegin.inc:142 usr/local/www/diag_backup.php:184 +#: usr/local/www/fbegin.inc:151 usr/local/www/diag_backup.php:184 +#: usr/local/www/fbegin.inc:143 +msgid "DHCP Server" +msgstr "DHCP Sunucu" + +#: usr/local/www/diag_backup.php:108 usr/local/www/diag_backup.php:185 +#: usr/local/www/diag_backup.php:185 +msgid "Firewall Rules" +msgstr "Güvenlik Duvarı Kuralları" + +#: usr/local/www/diag_backup.php:110 usr/local/www/diag_backup.php:187 +#: usr/local/www/diag_backup.php:187 +msgid "IPSEC" +msgstr "IPSEC" + +#: usr/local/www/diag_backup.php:114 usr/local/www/diag_backup.php:191 +#: usr/local/www/diag_backup.php:191 +msgid "PPTP Server" +msgstr "PPTP Sunucusu" + +#: usr/local/www/diag_backup.php:115 usr/local/www/diag_backup.php:193 +#: usr/local/www/diag_backup.php:193 +msgid "Scheduled Tasks" +msgstr "Zamanlanmış Görevler" + +#: usr/local/www/diag_backup.php:116 usr/local/www/diag_backup.php:194 +#: usr/local/www/diag_backup.php:194 +#, fuzzy +msgid "Syslog" +msgstr "Syslog" + +#: usr/local/www/diag_backup.php:118 usr/local/www/diag_backup.php:196 +#: usr/local/www/diag_backup.php:196 +msgid "Static routes" +msgstr "Statik yönlendirmeler" + +#: usr/local/www/diag_backup.php:119 usr/local/www/diag_backup.php:197 +#: usr/local/www/diag_backup.php:197 +msgid "System tunables" +msgstr "Sistem değişkenleri" + +#: usr/local/www/diag_backup.php:120 usr/local/www/diag_backup.php:198 +#: usr/local/www/diag_backup.php:198 +msgid "SNMP Server" +msgstr "SNMP Sunucu" + +#: usr/local/www/diag_backup.php:122 usr/local/www/diag_backup.php:200 +#: usr/local/www/diag_backup.php:200 +msgid "VLANS" +msgstr "VLANlar" + +#: usr/local/www/diag_backup.php:130 usr/local/www/diag_backup.php:205 +#: usr/local/www/diag_backup.php:205 +msgid "ALL" +msgstr "TÜMÜ" + +#: usr/local/www/diag_backup.php:157 usr/local/www/diag_backup.php:619 +#: usr/local/www/diag_backup.php:654 usr/local/www/diag_backup.php:244 +#: usr/local/www/diag_backup.php:698 usr/local/www/diag_backup.php:735 +#: usr/local/www/diag_backup.php:244 usr/local/www/diag_backup.php:703 +#: usr/local/www/diag_backup.php:740 +msgid "Restore configuration" +msgstr "Yapılandırmaya geri dön" + +#: usr/local/www/diag_backup.php:159 usr/local/www/diag_backup.php:246 +#: usr/local/www/diag_backup.php:246 +msgid "Reinstall" +msgstr "Tekrar kur" + +#: usr/local/www/diag_backup.php:161 usr/local/www/diag_backup.php:673 +#: usr/local/www/diag_backup.php:248 usr/local/www/diag_backup.php:754 +#: usr/local/www/diag_backup.php:248 usr/local/www/diag_backup.php:762 +msgid "Clear Package Lock" +msgstr "Paket Kilidini Temizle" + +#: usr/local/www/diag_backup.php:165 usr/local/www/diag_backup.php:252 +#: usr/local/www/diag_backup.php:252 +msgid "Restore version" +msgstr "Sürümü geri yükle" + +#: usr/local/www/diag_backup.php:180 usr/local/www/diag_backup.php:267 +#: usr/local/www/diag_backup.php:267 +msgid "You must supply and confirm the password for encryption." +msgstr "Şifreleme için parola belirleyip onaylamalısınız." + +#: usr/local/www/diag_backup.php:182 usr/local/www/diag_backup.php:268 +#: usr/local/www/diag_backup.php:269 usr/local/www/diag_backup.php:346 +#: usr/local/www/diag_backup.php:269 usr/local/www/diag_backup.php:346 +msgid "The supplied 'Password' and 'Confirm' field values must match." +msgstr "Belirtilen 'Parola' ve 'Onay' alanları aynı olmalıdır." + +#: usr/local/www/diag_backup.php:266 usr/local/www/diag_backup.php:344 +#: usr/local/www/diag_backup.php:344 +msgid "You must supply and confirm the password for decryption." +msgstr "Şifre çözümleme için parola belirleyip onaylamalısınız." + +#: usr/local/www/diag_backup.php:278 usr/local/www/diag_backup.php:356 +#: usr/local/www/diag_backup.php:356 +#, php-format +msgid "Warning, could not read file %s" +msgstr "Uyarı, %s dosyası okunamadı" + +#: usr/local/www/diag_backup.php:284 usr/local/www/diag_backup.php:362 +#: usr/local/www/diag_backup.php:362 +msgid "" +"The uploaded file does not appear to contain an encrypted pfsense " +"configuration." +msgstr "" +"Görünüşe göre yüklenen dosya şifrelenmiş bir pfSense yapılandırma dosyası " +"değil." + +#: usr/local/www/diag_backup.php:291 usr/local/www/diag_backup.php:369 +#: usr/local/www/diag_backup.php:369 +msgid "Upgrading m0n0wall configuration to pfsense." +msgstr "M0n0wall yapılandırması pfSense'ye yükseltiliyor." + +#: usr/local/www/diag_backup.php:299 usr/local/www/diag_backup.php:377 +#: usr/local/www/diag_backup.php:380 usr/local/www/diag_backup.php:377 +#: usr/local/www/diag_backup.php:380 +msgid "" +"You have selected to restore an area but we could not locate the correct xml " +"tag." +msgstr "" +"Yapılandırmanın sadece belirli bir kısmını geri yüklemeyi seçtiniz ancak " +"yüklenen yapılandırma dosyasında gerekli bölüm bulunamadı." + +#: usr/local/www/diag_backup.php:303 usr/local/www/diag_backup.php:392 +#: usr/local/www/diag_backup.php:392 +msgid "" +"The configuration area has been restored. You may need to reboot the " +"firewall." +msgstr "" +"apılandırmanın seçilen kısmına geri dönüldü. Sistemi yeniden başlatmanız " +"gerekebilir." + +#: usr/local/www/diag_backup.php:307 usr/local/www/diag_backup.php:397 +#: usr/local/www/diag_backup.php:397 +#, php-format +msgid "" +"You have selected to restore the full configuration but we could not locate " +"a %s tag." +msgstr "Tüm yapılandırmayı geri yüklemeyi seçtiniz fakat %s takısı bulunamadı." + +#: usr/local/www/diag_backup.php:438 usr/local/www/diag_backup.php:515 +#: usr/local/www/diag_backup.php:515 +msgid "The m0n0wall configuration has been restored and upgraded to pfSense." +msgstr "m0n0wall yapılandırması pfSense'ye geri yüklendi ve güncellendi." + +#: usr/local/www/diag_backup.php:461 usr/local/www/diag_backup.php:485 +#: usr/local/www/diag_backup.php:538 usr/local/www/diag_backup.php:562 +#: usr/local/www/diag_backup.php:543 usr/local/www/diag_backup.php:567 +msgid "The configuration could not be restored." +msgstr "Yapılandırmaya geri dönülemedi." + +#: usr/local/www/diag_backup.php:466 usr/local/www/diag_backup.php:543 +#: usr/local/www/diag_backup.php:548 +msgid "The configuration could not be restored (file upload error)." +msgstr "Yapılandırma geri alınamadı (dosya yükleme hatası)." + +#: usr/local/www/diag_backup.php:479 usr/local/www/diag_backup.php:556 +#: usr/local/www/diag_backup.php:561 +msgid "" +"XXX - this feature may hose your config (do NOT backrev configs!) - billm" +msgstr "" +"XXX - bu özellik yapılandımanızı bozabilir. (eski versiyon yapılandırması " +"OLMASIN!) - billm" + +#: usr/local/www/diag_backup.php:488 usr/local/www/diag_backup.php:565 +#: usr/local/www/diag_backup.php:570 +msgid "No version selected." +msgstr "Sürüm seçimi yapılmadı." + +#: usr/local/www/diag_backup.php:499 usr/local/www/diag_backup.php:576 +#: usr/local/www/diag_backup.php:581 +msgid "Backup/restore" +msgstr "Yedekle/geri dön" + +#: usr/local/www/diag_backup.php:540 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +msgid "The firewall configuration has been changed." +msgstr "Güvenlik Duvarı yapılandırması değiştirildi." + +#: usr/local/www/diag_backup.php:540 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624 +#: usr/local/www/system_firmware_restorefullbackup.php:116 +msgid "The firewall is now rebooting." +msgstr "Güvenlik Duvarı yeniden başlatılıyor." + +#: usr/local/www/diag_backup.php:549 usr/local/www/diag_confbak.php:139 +#: usr/local/www/diag_backup.php:628 usr/local/www/diag_backup.php:633 +#: usr/local/www/diag_confbak.php:139 +msgid "Config History" +msgstr "Yapılandırma Geçmişi" + +#: usr/local/www/diag_backup.php:550 usr/local/www/diag_confbak.php:140 +#: usr/local/www/fbegin.inc:190 usr/local/www/fbegin.inc:208 +#: usr/local/www/diag_backup.php:629 usr/local/www/fbegin.inc:216 +#: usr/local/www/diag_backup.php:634 usr/local/www/fbegin.inc:207 +#: usr/local/www/diag_confbak.php:140 +msgid "Backup/Restore" +msgstr "Yedekle/Geri Dön" + +#: usr/local/www/diag_backup.php:560 usr/local/www/diag_backup.php:639 +#: usr/local/www/diag_backup.php:644 +msgid "Backup configuration" +msgstr "Yapılandırmayı yedekle\"" + +#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644 +#: usr/local/www/diag_backup.php:649 +msgid "Click this button to download the system configuration in XML format." +msgstr "" +"Sistem yapılandırmasını XML biçiminde indirmek için bu düğmeye tıklayın." + +#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644 +#: usr/local/www/diag_backup.php:649 +msgid "Backup area:" +msgstr "Yedekleme alanı:" + +#: usr/local/www/diag_backup.php:572 usr/local/www/diag_backup.php:651 +#: usr/local/www/diag_backup.php:656 +msgid "Do not backup package information." +msgstr "Paket bilgisini yedekleme." + +#: usr/local/www/diag_backup.php:582 usr/local/www/diag_backup.php:661 +#: usr/local/www/diag_backup.php:666 +msgid "Encrypt this configuration file." +msgstr "Bu yapılandırma dosyasını şifrele." + +#: usr/local/www/diag_backup.php:590 usr/local/www/diag_backup.php:669 +#: usr/local/www/diag_backup.php:674 +msgid "" +"Do not backup RRD data (NOTE: RRD Data can consume 4+ megabytes of config." +"xml space!)" +msgstr "RRD verisini yedekleme. (RRD verisi 4MB'dan fazla alana ihtiyaç duyar!)" + +#: usr/local/www/diag_backup.php:605 usr/local/www/diag_backup.php:684 +#: usr/local/www/diag_backup.php:689 +msgid "confirm:" +msgstr "onayla:" + +#: usr/local/www/diag_backup.php:612 usr/local/www/diag_backup.php:691 +#: usr/local/www/diag_backup.php:696 +msgid "Download configuration" +msgstr "Yapılandırmayı indir" + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703 +#: usr/local/www/diag_backup.php:708 +msgid "Open a" +msgstr "Bir " + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703 +#: usr/local/www/diag_backup.php:708 +msgid "" +"configuration XML file and click the button below to restore the " +"configuration." +msgstr "" +"yapılandırma yedeğini aşağıda seçip yükleyerek o yapılandırmaya " +"dönebilirsiniz." + +#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:705 +#: usr/local/www/diag_backup.php:710 +msgid "Restore area:" +msgstr "Geri yüklenecek alan:" + +#: usr/local/www/diag_backup.php:632 usr/local/www/diag_backup.php:713 +#: usr/local/www/diag_backup.php:718 +msgid "Configuration file is encrypted." +msgstr "Yapılandırma dosyası şifreli." + +#: usr/local/www/diag_backup.php:639 usr/local/www/diag_backup.php:720 +#: usr/local/www/diag_backup.php:725 +msgid "Password :" +msgstr "Parola :" + +#: usr/local/www/diag_backup.php:647 usr/local/www/diag_backup.php:728 +#: usr/local/www/diag_backup.php:733 +msgid "confirm :" +msgstr "onayla :" + +#: usr/local/www/diag_backup.php:655 usr/local/www/diag_backup.php:736 +#: usr/local/www/diag_backup.php:741 +msgid "The firewall will reboot after restoring the configuration." +msgstr "" +"Güvenlik duvarı yapılandırmayı sistem yükledikten sonra tekrar başlatılacak." + +#: usr/local/www/diag_backup.php:663 usr/local/www/diag_backup.php:744 +#: usr/local/www/diag_backup.php:749 +msgid "Package Functions" +msgstr "Paket Fonksiyonları" + +#: usr/local/www/diag_backup.php:668 usr/local/www/diag_backup.php:749 +#: usr/local/www/diag_backup.php:755 +msgid "" +"Click this button to reinstall all system packages. This may take a while." +msgstr "" +"Tüm sistem paketlerini yeniden kurmak için bu düğmeye tıklayınız. Bu işlem " +"biraz zaman alabilir." + +#: usr/local/www/diag_backup.php:669 usr/local/www/diag_backup.php:750 +#: usr/local/www/diag_backup.php:756 +msgid "Reinstall packages" +msgstr "Paketleri tekrar kur" + +#: usr/local/www/diag_backup.php:672 usr/local/www/diag_backup.php:753 +#: usr/local/www/diag_backup.php:761 +msgid "" +"Click this button to clear the package lock if a package fails to reinstall " +"properly after an upgrade." +msgstr "" +"Eğer yükseltme işleminden sonra paketin yeniden kurulumu başarılı olmazsa " +"paket kilidini temizlemek için bu düğmeye tıklayın." + +#: usr/local/www/firewall_shaper_queues.php:172 +#: usr/local/www/firewall_shaper_queues.php:172 +msgid "Firewall: Shaper: By Queues View" +msgstr "Güvenlik Duvarı: Şekillendirici: Kuyruk Görünümü" + +#: usr/local/www/diag_confbak.php:49 usr/local/www/diag_confbak.php:49 +#, php-format +msgid "Successfully reverted to timestamp %1$s with description \"%2$s\"." +msgstr "" +"\"%2$s\" tanımlamasını taşıyan %1$s zaman damgasına başarıyla geri dönüldü." + +#: usr/local/www/diag_confbak.php:49 usr/local/www/diag_confbak.php:59 +#: usr/local/www/diag_confbak.php:111 usr/local/www/diag_confbak.php:161 +#: usr/local/www/diag_confbak.php:169 usr/local/www/diag_confbak.php:162 +#: usr/local/www/diag_confbak.php:171 usr/local/www/diag_confbak.php:49 +#: usr/local/www/diag_confbak.php:59 usr/local/www/diag_confbak.php:111 +#: usr/local/www/diag_confbak.php:162 usr/local/www/diag_confbak.php:171 +#, fuzzy +msgid "n/j/y H:i:s" +msgstr "n/j/y H:i:s" + +#: usr/local/www/diag_confbak.php:51 usr/local/www/diag_confbak.php:51 +msgid "Unable to revert to the selected configuration." +msgstr "Seçilen yapılandırmaya geri dönülemedi." + +#: usr/local/www/diag_confbak.php:59 usr/local/www/diag_confbak.php:59 +#, php-format +msgid "Deleted backup with timestamp %1$s and description \"%2$s\"." +msgstr "\"%2$s\" tanımlamalı ve %1$s zaman damgalı yedek silindi." + +#: usr/local/www/diag_confbak.php:98 usr/local/www/diag_confbak.php:98 +msgid "Configuration History" +msgstr "Yapılandırma Geçmişi" + +#: usr/local/www/diag_confbak.php:111 usr/local/www/diag_confbak.php:111 +msgid "Configuration diff from" +msgstr "Yapılandırma farkı" + +#: usr/local/www/diag_confbak.php:152 usr/local/www/diag_confbak.php:206 +#: usr/local/www/diag_confbak.php:208 usr/local/www/diag_confbak.php:152 +#: usr/local/www/diag_confbak.php:208 +msgid "Diff" +msgstr "Fark" + +#: usr/local/www/diag_confbak.php:153 +#: usr/local/www/system_firmware_restorefullbackup.php:140 +#: usr/local/www/system_firmware_restorefullbackup.php:140 +#: usr/local/www/diag_confbak.php:153 +msgid "Date" +msgstr "Tarih" + +#: usr/local/www/diag_confbak.php:154 usr/local/www/diag_confbak.php:155 +#: usr/local/www/diag_confbak.php:155 +msgid "Configuration Change" +msgstr "Ayar Değişikliği" + +#: usr/local/www/diag_confbak.php:163 usr/local/www/diag_confbak.php:165 +#: usr/local/www/diag_confbak.php:165 +msgid "Current" +msgstr "Güncel" + +#: usr/local/www/diag_confbak.php:171 usr/local/www/diag_confbak.php:173 +#: usr/local/www/widgets/widgets/gateways.widget.php:105 +#: usr/local/www/widgets/widgets/gateways.widget.php:128 +#: usr/local/www/diag_confbak.php:173 +msgid "Unknown" +msgstr "Bilinmeyen" + +#: usr/local/www/diag_confbak.php:189 usr/local/www/diag_confbak.php:191 +#: usr/local/www/diag_confbak.php:191 +msgid "Revert to this configuration?" +msgstr "Bu yapılandırmaya geri dönülsün mü?" + +#: usr/local/www/diag_confbak.php:190 usr/local/www/diag_confbak.php:192 +#: usr/local/www/diag_confbak.php:192 +msgid "Revert to this configuration" +msgstr "Bu yapılandırmaya geri dön" + +#: usr/local/www/diag_confbak.php:194 usr/local/www/diag_confbak.php:196 +#: usr/local/www/diag_confbak.php:196 +msgid "Delete this configuration backup?" +msgstr "Bu yapılandırma yedeği silinsin mi?" + +#: usr/local/www/diag_confbak.php:195 usr/local/www/diag_confbak.php:197 +#: usr/local/www/diag_confbak.php:197 +msgid "Remove this backup" +msgstr "Bu yedeği sil" + +#: usr/local/www/diag_confbak.php:200 usr/local/www/diag_confbak.php:202 +#: usr/local/www/diag_confbak.php:202 +msgid "Download this backup" +msgstr "Bu yedeği indir" + +#: usr/local/www/diag_confbak.php:212 usr/local/www/diag_confbak.php:214 +#: usr/local/www/diag_confbak.php:214 +msgid "No backups found." +msgstr "Yedek bulunamadı." + +#: usr/local/www/firewall_virtual_ip.php:106 +#: usr/local/www/firewall_virtual_ip.php:103 +#: usr/local/www/firewall_virtual_ip.php:103 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"NAT mapping." +msgstr "Bu girdi en az bir NAT eşleme kuralında kullanıldığı için silinemez." + +#: usr/local/www/firewall_virtual_ip.php:118 +msgid "This entry cannot be deleted because it is still referenced by CARP" +msgstr "Bu girdi CARP tarafından kullanıldığı için silinemez." + +#: usr/local/www/firewall_virtual_ip.php:124 +msgid "" +"This entry cannot be deleted because it is still referenced by ip alias entry" +msgstr "Bu girdi bir IP grup girdisinde kullanıldığı için silinemez" + +#: usr/local/www/firewall_virtual_ip.php:149 +#: usr/local/www/firewall_virtual_ip.php:152 +#: usr/local/www/firewall_virtual_ip.php:166 +msgid "Virtual IP Addresses" +msgstr "Sanal IP Adresleri" + +#: usr/local/www/firewall_virtual_ip.php:164 +#: usr/local/www/firewall_virtual_ip.php:167 +#: usr/local/www/firewall_virtual_ip.php:181 +msgid "The VIP configuration has been changed." +msgstr "Sanal IP yapılandırılması değiştirildi." + +#: usr/local/www/firewall_virtual_ip.php:172 usr/local/www/fbegin.inc:115 +#: usr/local/www/fbegin.inc:132 usr/local/www/fbegin.inc:141 +#: usr/local/www/firewall_virtual_ip.php:175 +#: usr/local/www/firewall_virtual_ip.php:189 usr/local/www/fbegin.inc:133 +msgid "Virtual IPs" +msgstr "Sanal IPler" + +#: usr/local/www/firewall_virtual_ip.php:173 +#: usr/local/www/firewall_virtual_ip.php:176 +#: usr/local/www/firewall_virtual_ip.php:190 +msgid "CARP Settings" +msgstr "CARP Ayarları" + +#: usr/local/www/firewall_virtual_ip.php:185 +#: usr/local/www/firewall_virtual_ip.php:188 +#: usr/local/www/firewall_virtual_ip.php:202 +msgid "Virtual IP address" +msgstr "Sanal IP adresi" + +#: usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +msgid "The virtual IP addresses defined on this page may be used in" +msgstr "Bu sayfada tanımlanan sanal IP adresleri haritalamada " + +#: usr/local/www/firewall_virtual_ip.php:242 +#: usr/local/www/firewall_virtual_ip.php:248 +#: usr/local/www/firewall_virtual_ip.php:268 +msgid "mappings." +msgstr "kullanılabilir." + +#: usr/local/www/firewall_virtual_ip.php:243 +#: usr/local/www/firewall_virtual_ip.php:249 +#: usr/local/www/firewall_virtual_ip.php:269 +msgid "You can check the status of your CARP Virtual IPs and interfaces " +msgstr "CARP sanal IP ve arabirimlerinizin durumunu takip edebilirsiniz " + +#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309 +#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297 +msgid "apply" +msgstr "uygula" + +#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309 +#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297 +msgid "save" +msgstr "kaydet" + +#: usr/local/www/guiconfig.inc:295 usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/system_certmanager.php:541 +#: usr/local/www/system_certmanager.php:640 usr/local/www/guiconfig.inc:309 +#: usr/local/www/vpn_ipsec_mobile.php:335 usr/local/www/guiconfig.inc:298 +#: usr/local/www/system_certmanager.php:649 +#: usr/local/www/vpn_ipsec_mobile.php:335 usr/local/www/guiconfig.inc:297 +msgid "create" +msgstr "iç sertifika otoritesi oluştur" + +#: usr/local/www/halt.php:52 usr/local/www/halt.php:61 +#: usr/local/www/halt.php:61 +msgid "The system is halting now. This may take one minute." +msgstr "Sistem kapatılıyor. Bu işlem bir dakika sürebilir." + +#: usr/local/www/halt.php:59 usr/local/www/halt.php:54 +#: usr/local/www/halt.php:54 +msgid "Halt system" +msgstr "Sistemi kapat" + +#: usr/local/www/halt.php:67 usr/local/www/halt.php:67 +msgid "Are you sure you want to halt the system?" +msgstr "Sistemi kapatmak istediğinize emin misiniz?" + +#: usr/local/www/index.php:115 usr/local/www/index.php:126 +#: usr/local/www/index.php:129 +msgid "Widget configuration has been changed." +msgstr "Kullanılabilir pencere yapılandırması değiştirildi." + +#: usr/local/www/index.php:172 usr/local/www/index.php:183 +#: usr/local/www/index.php:186 +#, php-format +msgid "Welcome to %s!\n" +msgstr "%s - Hoşgeldiniz!\n" + +#: usr/local/www/index.php:173 usr/local/www/index.php:184 +#: usr/local/www/index.php:187 +msgid "One moment while we start the initial setup wizard." +msgstr "Kurulum sihirbazı hazırlanırken lütfen bekleyiniz." + +#: usr/local/www/index.php:174 usr/local/www/index.php:185 +#: usr/local/www/index.php:188 +msgid "" +"Embedded platform users: Please be patient, the wizard takes a little longer " +"to run than the normal GUI." +msgstr "" +"Gömülü platform kullanıcıları: Sihirbazın tamamlanması normal grafik arayüze " +"göre biraz daha uzun sürer, lütfen sabırlı olunuz." + +#: usr/local/www/index.php:175 usr/local/www/index.php:186 +#: usr/local/www/index.php:189 +#, php-format +msgid "To bypass the wizard, click on the %s logo on the initial page." +msgstr "Sihirbazı geçmek için giriş sayfasındaki %s logosuna tıklayınız." + +#: usr/local/www/index.php:454 usr/local/www/index.php:446 +#: usr/local/www/index.php:463 usr/local/www/index.php:468 +msgid "Status: Dashboard" +msgstr "Durum: Anasayfa" + +#: usr/local/www/index.php:486 usr/local/www/index.php:478 +#: usr/local/www/index.php:490 usr/local/www/index.php:494 +msgid "Available Widgets" +msgstr "Kullanılabilir Pencere Araçları" + +#: usr/local/www/index.php:524 usr/local/www/index.php:516 +#: usr/local/www/index.php:528 usr/local/www/index.php:531 +msgid "Welcome to the Dashboard page" +msgstr "Anasayfa'ya hoş geldiniz" + +#: usr/local/www/index.php:532 usr/local/www/index.php:524 +#: usr/local/www/index.php:536 usr/local/www/index.php:538 +msgid "" +"This page allows you to customize the information you want to be displayed!" +msgstr "Bu sayfa görüntülemek istediğiniz bilginin özelleştirilmesini sağlar." + +#: usr/local/www/index.php:533 usr/local/www/index.php:525 +#: usr/local/www/index.php:537 usr/local/www/index.php:539 +msgid "To get started click the" +msgstr "Başlamak için" + +#: usr/local/www/index.php:533 usr/local/www/index.php:525 +#: usr/local/www/index.php:537 usr/local/www/index.php:539 +msgid "icon to add widgets." +msgstr "pencere araçları ekle simgesine tıklayınız." + +#: usr/local/www/index.php:535 usr/local/www/index.php:527 +#: usr/local/www/index.php:539 usr/local/www/index.php:541 +msgid "You can move any widget around by clicking and dragging the title." +msgstr "Pencere araçlarını başlıklarına tıklayıp sürükleyerek taşıyabilirsiniz." + +#: usr/local/www/index.php:541 usr/local/www/index.php:534 +#: usr/local/www/index.php:546 usr/local/www/index.php:548 +msgid "Click here to add widgets" +msgstr "Pencere aracı eklemek için tıklayınız" + +#: usr/local/www/index.php:543 usr/local/www/index.php:536 +#: usr/local/www/index.php:548 usr/local/www/index.php:550 +msgid "Click here for help" +msgstr "Yardım için tıklayınız" + +#: usr/local/www/index.php:547 usr/local/www/index.php:540 +#: usr/local/www/index.php:552 usr/local/www/index.php:554 +msgid "Save Settings" +msgstr "Ayarları Kaydet" + +#: usr/local/www/index.php:699 usr/local/www/index.php:692 +#: usr/local/www/index.php:704 usr/local/www/index.php:704 +msgid "Loading selected widget" +msgstr "Seçili pencere aracı yükleniyor" + +#: usr/local/www/interfaces.php:186 usr/local/www/interfaces.php:184 +#, php-format +msgid "Sorry, an alias with the name %s already exists." +msgstr "%s isimli bir grup sistemde zaten var." + +#: usr/local/www/interfaces.php:327 usr/local/www/interfaces.php:355 +#: usr/local/www/interfaces.php:352 usr/local/www/interfaces.php:350 +msgid "You have already applied your settings!" +msgstr "Ayarlar zaten uygulandı!" + +#: usr/local/www/interfaces.php:407 usr/local/www/interfaces.php:443 +#: usr/local/www/interfaces.php:440 usr/local/www/interfaces.php:428 +msgid "An interface with the specified description already exists." +msgstr "Belirtilen açıklamaya sahip arabirim zaten var." + +#: usr/local/www/interfaces.php:413 usr/local/www/interfaces.php:449 +#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:434 +msgid "" +"The DHCP Server is active on this interface and it can be used only with a " +"static IP configuration. Please disable the DHCP Server service on this " +"interface first, then change the interface configuration." +msgstr "" +"Bu arabirimde DHCP sunucu aktif durumda ve sadece statik IP yapılandırması " +"kullanılabilir. Arabirim yapılandırmasını değiştirmeden önce DHCP sunucu " +"servisini durdurmalısınız." + +#: usr/local/www/interfaces.php:415 usr/local/www/interfaces.php:451 +#: usr/local/www/interfaces.php:448 usr/local/www/interfaces.php:436 +msgid "" +"The DHCP6 Server is active on this interface and it can be used only with a " +"static IPv6 configuration. Please disable the DHCPv6 Server service on this " +"interface first, then change the interface configuration." +msgstr "" +"DHCP6 Sunucusu bu arabirimde aktif ve sadece statik IPv6 yapılandırması " +"tarafından kullanılır. Bu arabirimde lütfen DHCPv6 Sunucu servisini önce " +"durdurun, daha sonra arabirim yapılandırmasını değiştirin. " + +#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:1364 +#: usr/local/www/status_interfaces.php:192 +#: usr/local/www/status_interfaces.php:266 usr/local/www/interfaces.php:456 +#: usr/local/www/interfaces.php:1468 usr/local/www/status_interfaces.php:269 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:1456 +#: usr/local/www/status_interfaces.php:269 usr/local/www/interfaces.php:441 +#: usr/local/www/interfaces.php:1469 +msgid "IPv4 address" +msgstr "IPv4 adresi" + +#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:456 usr/local/www/interfaces.php:509 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:494 +msgid "Subnet bit count" +msgstr "Altağ bit sayısı" + +#: usr/local/www/interfaces.php:427 usr/local/www/interfaces.php:480 +msgid "" +"This interface is referenced by VIPs please delete those before setting the " +"interface to 'none' configuration." +msgstr "" +"Bu arabirime bağlı sanal IPler olduğu için arabirimi 'hiçbiri' olarak " +"değiştirmeden önce onları silmelisiniz." + +#: usr/local/www/interfaces.php:432 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:521 +#: usr/local/www/interfaces.php:531 usr/local/www/interfaces.php:541 +#: usr/local/www/interfaces.php:546 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:518 usr/local/www/interfaces.php:528 +#: usr/local/www/interfaces.php:538 usr/local/www/interfaces.php:543 +#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:526 +#: usr/local/www/interfaces.php:531 +#, php-format +msgid "You have to reassign the interface to be able to configure as %s." +msgstr "%s yapılandırabilmek için arabirimi tekrar atamanız gerekli." + +#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1748 +#: usr/local/www/interfaces.php:472 usr/local/www/interfaces.php:1926 +#: usr/local/www/interfaces.php:469 usr/local/www/interfaces.php:1914 +#: usr/local/www/interfaces.php:457 usr/local/www/interfaces.php:1938 +msgid "Modem Port" +msgstr "Modem Portu" + +#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1736 +#: usr/local/www/interfaces_ppps_edit.php:182 +#: usr/local/www/interfaces_ppps_edit.php:523 usr/local/www/interfaces.php:472 +#: usr/local/www/interfaces.php:1914 +#: usr/local/www/interfaces_ppps_edit.php:524 usr/local/www/interfaces.php:469 +#: usr/local/www/interfaces.php:1902 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:530 usr/local/www/interfaces.php:457 +#: usr/local/www/interfaces.php:1926 +msgid "Phone Number" +msgstr "Telefon Numarası" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445 +#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:466 +msgid "PPPoE username" +msgstr "PPPoE kullanıcı adı" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445 +#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:466 +msgid "PPPoE password" +msgstr "PPPoE parolası" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452 +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:1807 +#: usr/local/www/interfaces.php:1926 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498 +#: usr/local/www/interfaces.php:1985 usr/local/www/interfaces.php:2104 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1973 +#: usr/local/www/interfaces.php:2092 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:2000 usr/local/www/interfaces.php:2122 +msgid "Dial on demand" +msgstr "Gerektiğinde bağlan" + +#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452 +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498 +#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463 +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483 +msgid "Idle timeout value" +msgstr "Boşta kalma süresi" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 +msgid "PPTP username" +msgstr "PPTP kullanıcı adı" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 +msgid "PPTP password" +msgstr "PPTP parolası" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 +msgid "PPTP local IP address" +msgstr "PPTP yerel IP adresi" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 +msgid "PPTP subnet" +msgstr "PPTP altağ" + +#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455 +#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491 +#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473 +#: usr/local/www/interfaces.php:476 +msgid "PPTP remote IP address" +msgstr "PPTP uzak IP adresi" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 +msgid "L2TP username" +msgstr "L2TP kullanıcı adı" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 +msgid "L2TP password" +msgstr "L2TP parolası" + +#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465 +#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501 +#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483 +#: usr/local/www/interfaces.php:486 +msgid "L2TP remote IP address" +msgstr "PPTP uzak IP adresi" + +#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1470 +#: usr/local/www/status_interfaces.php:216 usr/local/www/diag_ndp.php:129 +#: usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcpv6_edit.php:198 +#: usr/local/www/status_dhcpv6_leases.php:359 +#: usr/local/www/services_dhcpv6_edit.php:201 +#: usr/local/www/status_interfaces.php:297 +#: usr/local/www/status_dhcpv6_leases.php:403 usr/local/www/interfaces.php:509 +#: usr/local/www/interfaces.php:1576 usr/local/www/services_dhcpv6.php:899 +#: usr/local/www/services_dhcpv6_edit.php:200 +#: usr/local/www/status_interfaces.php:300 +#: usr/local/www/status_dhcpv6_leases.php:404 usr/local/www/interfaces.php:506 +#: usr/local/www/interfaces.php:1564 usr/local/www/services_dhcpv6.php:830 +#: usr/local/www/diag_ndp.php:129 usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/services_dhcpv6_edit.php:203 +#: usr/local/www/status_interfaces.php:300 +#: usr/local/www/services_dhcpv6.php:851 usr/local/www/interfaces.php:494 +#: usr/local/www/interfaces.php:1574 +msgid "IPv6 address" +msgstr "IPv6 adresi" + +#: usr/local/www/interfaces.php:493 usr/local/www/interfaces.php:563 +#: usr/local/www/interfaces.php:560 usr/local/www/interfaces.php:550 +msgid "A valid IPv4 address must be specified." +msgstr "Geçerli bir IPv4 adresi belirtilmelidir." + +#: usr/local/www/interfaces.php:495 usr/local/www/services_dhcpv6_edit.php:123 +#: usr/local/www/services_dhcpv6_edit.php:125 usr/local/www/interfaces.php:565 +#: usr/local/www/interfaces.php:562 usr/local/www/services_dhcpv6_edit.php:128 +#: usr/local/www/interfaces.php:565 +msgid "A valid IPv6 address must be specified." +msgstr "Geçerli bir IPv6 adresi belirtilmelidir." + +#: usr/local/www/interfaces.php:497 usr/local/www/interfaces.php:499 +#: usr/local/www/interfaces.php:567 usr/local/www/interfaces.php:569 +#: usr/local/www/interfaces.php:564 usr/local/www/interfaces.php:566 +#: usr/local/www/interfaces.php:579 usr/local/www/interfaces.php:581 +msgid "A valid subnet bit count must be specified." +msgstr "Geçerli bir altağ bit sayısı belirtilmelidir." + +#: usr/local/www/interfaces.php:501 usr/local/www/interfaces.php:571 +#: usr/local/www/interfaces.php:568 usr/local/www/interfaces.php:583 +msgid "A valid alias IP address must be specified." +msgstr "Geçerli bir Grup IP adresi belirtilmelidir." + +#: usr/local/www/interfaces.php:503 usr/local/www/interfaces.php:573 +#: usr/local/www/interfaces.php:570 usr/local/www/interfaces.php:585 +msgid "A valid alias subnet bit count must be specified." +msgstr "Geçerli bir Grup altağ bit sayısı belirtilmelidir." + +#: usr/local/www/interfaces.php:517 usr/local/www/system_routes_edit.php:103 +#: usr/local/www/system_routes_edit.php:104 usr/local/www/interfaces.php:587 +#: usr/local/www/interfaces.php:584 usr/local/www/system_routes_edit.php:104 +#: usr/local/www/interfaces.php:599 +msgid "A valid gateway must be specified." +msgstr "Geçerli bir ağ geçidi belirtilmelidir." + +#: usr/local/www/interfaces.php:521 usr/local/www/interfaces.php:591 +#: usr/local/www/interfaces.php:588 usr/local/www/interfaces.php:603 +msgid "The service name contains invalid characters." +msgstr "Servis adı geçersiz karakterler içeriyor." + +#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:539 +#: usr/local/www/interfaces_ppps_edit.php:217 usr/local/www/interfaces.php:593 +#: usr/local/www/interfaces.php:609 usr/local/www/interfaces.php:590 +#: usr/local/www/interfaces.php:606 usr/local/www/interfaces_ppps_edit.php:223 +#: usr/local/www/interfaces.php:605 usr/local/www/interfaces.php:621 +msgid "The idle timeout value must be an integer." +msgstr "Boşta kalma süresi bir tamsayı olmalıdır." + +#: usr/local/www/interfaces.php:526 usr/local/www/interfaces_ppps_edit.php:220 +#: usr/local/www/interfaces.php:596 usr/local/www/interfaces.php:593 +#: usr/local/www/interfaces_ppps_edit.php:226 usr/local/www/interfaces.php:608 +msgid "A valid PPPoE reset hour must be specified (0-23)." +msgstr "Geçerli bir PPPoE sıfırlama saati belirtilmelidir (0-23)." + +#: usr/local/www/interfaces.php:529 usr/local/www/interfaces_ppps_edit.php:223 +#: usr/local/www/interfaces.php:599 usr/local/www/interfaces.php:596 +#: usr/local/www/interfaces_ppps_edit.php:229 usr/local/www/interfaces.php:611 +msgid "A valid PPPoE reset minute must be specified (0-59)." +msgstr "Geçerli bir PPPoE sıfırlama dakikası belirtilmelidir (0-59)." + +#: usr/local/www/interfaces.php:531 usr/local/www/interfaces_ppps_edit.php:225 +#: usr/local/www/interfaces.php:601 usr/local/www/interfaces.php:598 +#: usr/local/www/interfaces_ppps_edit.php:231 usr/local/www/interfaces.php:613 +msgid "A valid PPPoE reset date must be specified (mm/dd/yyyy)." +msgstr "Geçerli bir PPPoE sıfırlama tarihi girilmelidir.(aa/gg/yyyy)." + +#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:603 +#: usr/local/www/interfaces.php:600 usr/local/www/interfaces.php:615 +msgid "A valid PPTP local IP address must be specified." +msgstr "Geçerli bir PPTP yerel IP adresi belirtilmelidir." + +#: usr/local/www/interfaces.php:535 usr/local/www/interfaces.php:605 +#: usr/local/www/interfaces.php:602 usr/local/www/interfaces.php:617 +msgid "A valid PPTP subnet bit count must be specified." +msgstr "Geçerli bir PPTP altağ bit sayısı belirtilmelidir." + +#: usr/local/www/interfaces.php:537 usr/local/www/interfaces.php:607 +#: usr/local/www/interfaces.php:604 usr/local/www/interfaces.php:619 +msgid "A valid PPTP remote IP address must be specified." +msgstr "Geçerli bir PPTP uzak IP adresi belirtilmelidir." + +#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:613 +#: usr/local/www/interfaces.php:610 usr/local/www/interfaces.php:625 +msgid "The MTU must be greater than 576 bytes." +msgstr "MTU değeri 576 bayttan yüksek olmalıdır." + +#: usr/local/www/interfaces.php:545 usr/local/www/interfaces.php:615 +#: usr/local/www/interfaces.php:612 usr/local/www/interfaces.php:627 +msgid "The MSS must be greater than 576 bytes." +msgstr "MSS Değeri 576 bayttan yüksek olmalıdır." + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2164 +#: usr/local/www/load_balancer_pool.php:132 usr/local/www/vpn_ipsec.php:283 +#: usr/local/www/vpn_ipsec.php:457 usr/local/www/interfaces_wireless.php:107 +#: usr/local/www/interfaces_wireless_edit.php:84 +#: usr/local/www/interfaces_wireless_edit.php:176 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:187 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/status_lb_pool.php:131 usr/local/www/vpn_ipsec_phase2.php:404 +#: usr/local/www/vpn_ipsec.php:294 usr/local/www/vpn_ipsec.php:468 +#: usr/local/www/system_advanced_misc.php:334 +#: usr/local/www/vpn_ipsec_phase2.php:430 usr/local/www/interfaces.php:619 +#: usr/local/www/interfaces.php:2342 +#: usr/local/www/load_balancer_pool_edit.php:195 +#: usr/local/www/load_balancer_pool.php:133 usr/local/www/vpn_ipsec.php:293 +#: usr/local/www/vpn_ipsec.php:467 usr/local/www/system_advanced_misc.php:353 +#: usr/local/www/interfaces_wireless.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:496 usr/local/www/interfaces.php:616 +#: usr/local/www/interfaces.php:2330 +#: usr/local/www/load_balancer_pool_edit.php:193 +#: usr/local/www/load_balancer_pool.php:131 +#: usr/local/www/interfaces_wireless_edit.php:86 +#: usr/local/www/interfaces_wireless_edit.php:178 +#: usr/local/www/load_balancer_virtual_server_edit.php:72 +#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:473 +#: usr/local/www/interfaces_wireless.php:110 +#: usr/local/www/status_lb_pool.php:131 +#: usr/local/www/load_balancer_pool.php:131 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:193 +#: usr/local/www/vpn_ipsec_phase2.php:518 usr/local/www/interfaces.php:631 +#: usr/local/www/interfaces.php:2360 +msgid "Mode" +msgstr "Kip" + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2174 +#: usr/local/www/status_interfaces.php:265 +#: usr/local/www/status_interfaces.php:362 usr/local/www/interfaces.php:622 +#: usr/local/www/interfaces.php:2352 usr/local/www/status_interfaces.php:365 +#: usr/local/www/interfaces.php:619 usr/local/www/interfaces.php:2340 +#: usr/local/www/status_interfaces.php:365 usr/local/www/interfaces.php:634 +#: usr/local/www/interfaces.php:2370 +msgid "SSID" +msgstr "SSID" + +#: usr/local/www/interfaces.php:583 usr/local/www/interfaces.php:657 +#: usr/local/www/interfaces.php:654 usr/local/www/interfaces.php:669 +msgid "" +"Invalid WEP key size. Sizes should be 40 (64) bit keys or 104 (128) bit." +msgstr "" +"WEP anahtar boyutu geçersiz. Anahtar boyutu 40 (64) bit ya da 104 (128) bit " +"olmalıdır." + +#: usr/local/www/interfaces.php:591 usr/local/www/interfaces.php:665 +#: usr/local/www/interfaces.php:662 usr/local/www/interfaces.php:677 +msgid "The length of the passphrase should be between 8 and 63 characters." +msgstr "Şifre uzunluğu 8 ila 63 karakter arası olmalıdır." + +#: usr/local/www/interfaces.php:659 +#, php-format +msgid "Interface %s dynamic gateway" +msgstr "Arabirim %s dinamik ağ geçidi" + +#: usr/local/www/interfaces.php:1004 usr/local/www/interfaces.php:1090 +#: usr/local/www/interfaces.php:1078 usr/local/www/interfaces.php:1092 +#, php-format +msgid "" +"Unable to change mode to %s. You may already have the maximum number of " +"wireless clones supported in this mode." +msgstr "" +"Kip %s olarak değiştirilemedi. Bu kipte desteklenen maksimum kablosuz " +"kopyasını kullanıyor olabilirsiniz." + +#: usr/local/www/interfaces.php:1032 usr/local/www/interfaces.php:1118 +#: usr/local/www/interfaces.php:1106 usr/local/www/interfaces.php:1120 +msgid "Static IPv4" +msgstr "Sabit IPv4" + +#: usr/local/www/interfaces.php:1032 usr/local/www/vpn_pppoe.php:86 +#: usr/local/www/status_interfaces.php:109 +#: usr/local/www/status_interfaces.php:127 usr/local/www/interfaces.php:1118 +#: usr/local/www/status_interfaces.php:130 usr/local/www/interfaces.php:1106 +#: usr/local/www/vpn_pppoe.php:87 usr/local/www/status_interfaces.php:130 +#: usr/local/www/interfaces.php:1120 +#, fuzzy +msgid "PPPoE" +msgstr "PPPoE" + +#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:124 +#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:166 +#: usr/local/www/status_interfaces.php:142 usr/local/www/interfaces.php:1118 +#: usr/local/www/fbegin.inc:174 usr/local/www/status_interfaces.php:145 +#: usr/local/www/interfaces.php:1106 usr/local/www/status_interfaces.php:145 +#: usr/local/www/fbegin.inc:165 usr/local/www/interfaces.php:1120 +msgid "PPTP" +msgstr "PPTP" + +#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:139 +#: usr/local/www/fbegin.inc:150 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:167 +#: usr/local/www/status_interfaces.php:157 usr/local/www/interfaces.php:1118 +#: usr/local/www/fbegin.inc:175 usr/local/www/status_interfaces.php:160 +#: usr/local/www/interfaces.php:1106 usr/local/www/vpn_l2tp.php:38 +#: usr/local/www/status_interfaces.php:160 usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:166 +#: usr/local/www/interfaces.php:1120 +msgid "L2TP" +msgstr "L2TP" + +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121 +msgid "Static IPv6" +msgstr "Sabit IPv6" + +#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119 +#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121 +msgid "DHCP6" +msgstr "DHCP6" + +#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326 +#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327 +#, php-format +msgid "The %s configuration has been changed." +msgstr "%s yapılandırması değiştirildi." + +#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326 +#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327 +msgid "Don't forget to adjust the DHCP Server range if needed after applying." +msgstr "Gerekiyorsa DHCP sunucu aralığını yapılandırmayı unutmayınız." + +#: usr/local/www/interfaces.php:1231 usr/local/www/interfaces.php:1335 +#: usr/local/www/interfaces.php:1323 usr/local/www/interfaces.php:1336 +msgid "General configuration" +msgstr "Genel yapılandırma" + +#: usr/local/www/interfaces.php:1237 usr/local/www/interfaces.php:1341 +#: usr/local/www/interfaces.php:1329 usr/local/www/interfaces.php:1342 +msgid "Enable Interface" +msgstr "Arabirimi Etkinleştir" + +#: usr/local/www/interfaces.php:1247 usr/local/www/interfaces.php:1351 +#: usr/local/www/interfaces.php:1339 usr/local/www/interfaces.php:1352 +msgid "Enter a description (name) for the interface here." +msgstr "Bu alana arabirim için bir açıklama (isim) girebilirsiniz." + +#: usr/local/www/interfaces.php:1251 usr/local/www/interfaces.php:1355 +#: usr/local/www/interfaces.php:1343 usr/local/www/interfaces.php:1356 +msgid "IPv4 Configuration Type" +msgstr "IPv4 Yapılandırma Türü" + +#: usr/local/www/interfaces.php:1267 usr/local/www/interfaces.php:1371 +#: usr/local/www/interfaces.php:1359 usr/local/www/interfaces.php:1372 +msgid "IPv6 Configuration Type" +msgstr "IPv6 Yapılandırma Türü" + +#: usr/local/www/interfaces.php:1292 usr/local/www/interfaces.php:1396 +#: usr/local/www/interfaces.php:1384 usr/local/www/interfaces.php:1397 +msgid "Insert my local MAC address" +msgstr "Yerel MAC adresimi al" + +#: usr/local/www/interfaces.php:1295 usr/local/www/interfaces.php:1399 +#: usr/local/www/interfaces.php:1387 usr/local/www/interfaces.php:1400 +msgid "" +"This field can be used to modify (\"spoof\") the MAC address of this " +"interface" +msgstr "" +"Bu alan arabiriminin MAC adresini olduğundan farklı (\"aldatmak\") göstermek " +"için yapılandırılabilir" + +#: usr/local/www/interfaces.php:1297 usr/local/www/interfaces.php:1401 +#: usr/local/www/interfaces.php:1389 usr/local/www/interfaces.php:1402 +msgid "(may be required with some cable connections)" +msgstr "(bazı kablo bağlantılarda gerekebilir)" + +#: usr/local/www/interfaces.php:1298 usr/local/www/interfaces.php:1402 +#: usr/local/www/interfaces.php:1390 usr/local/www/interfaces.php:1403 +msgid "" +"Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx or leave blank" +msgstr "xx:xx:xx:xx:xx:xx biçiminde bir MAC adresi giriniz yada boş bırakınız." + +#: usr/local/www/interfaces.php:1303 +#: usr/local/www/interfaces_ppps_edit.php:757 +#: usr/local/www/interfaces.php:1407 +#: usr/local/www/interfaces_ppps_edit.php:758 +#: usr/local/www/interfaces.php:1395 +#: usr/local/www/interfaces_ppps_edit.php:764 +#: usr/local/www/interfaces.php:1408 +msgid "MTU" +msgstr "MTU" + +#: usr/local/www/interfaces.php:1307 +msgid "" +"If you leave this field blank, the adapter's default MTU will be used. This " +"is typically 1500 bytes but can vary on some hardware." +msgstr "" +"Bu alanı boş bırakırsanız, ağ kartının varsayılan MTU değeri kullanılır. " +"Varsayılan değer bir çok donanım için 1500 bayttır." + +#: usr/local/www/interfaces.php:1312 usr/local/www/interfaces.php:1416 +#: usr/local/www/interfaces.php:1404 usr/local/www/interfaces.php:1417 +msgid "MSS" +msgstr "MSS" + +#: usr/local/www/interfaces.php:1316 usr/local/www/interfaces.php:1420 +#: usr/local/www/interfaces.php:1408 usr/local/www/interfaces.php:1421 +msgid "" +"If you enter a value in this field, then MSS clamping for TCP connections to " +"the value entered above minus 40 (TCP/IP header size) will be in effect." +msgstr "" +"Bu alana bir değer girerseniz, TCP bağlantılarının MSS sıkma değeri " +"girdiğiniz değerin 40 eksiği (TCP/IP başlık boyutu) olarak ayarlanır." + +#: usr/local/www/interfaces.php:1325 usr/local/www/interfaces.php:1429 +#: usr/local/www/interfaces.php:1417 usr/local/www/interfaces.php:1430 +msgid "Speed and duplex" +msgstr "Hız ve çift yönlü" + +#: usr/local/www/interfaces.php:1346 usr/local/www/interfaces.php:1450 +#: usr/local/www/interfaces.php:1438 usr/local/www/interfaces.php:1451 +msgid "" +"Here you can explicitly set speed and duplex mode for this interface. " +"WARNING: You MUST leave this set to autoselect (automatically negotiate " +"speed) unless the port this interface connects to has its speed and duplex " +"forced." +msgstr "" + +#: usr/local/www/interfaces.php:1361 usr/local/www/interfaces.php:1465 +#: usr/local/www/interfaces.php:1453 usr/local/www/interfaces.php:1466 +msgid "Static IPv4 configuration" +msgstr "Sabit IPv4 yapılandırması" + +#: usr/local/www/interfaces.php:1400 usr/local/www/interfaces.php:1506 +#: usr/local/www/system_routes_edit.php:212 +#: usr/local/www/system_routes_edit.php:244 usr/local/www/interfaces.php:1504 +#: usr/local/www/interfaces.php:1612 usr/local/www/system_routes_edit.php:245 +#: usr/local/www/interfaces.php:1492 usr/local/www/interfaces.php:1600 +#: usr/local/www/system_routes_edit.php:245 usr/local/www/interfaces.php:1505 +#: usr/local/www/interfaces.php:1610 +msgid "add a new one." +msgstr "yeni bir tane ekleyin." + +#: usr/local/www/interfaces.php:1403 usr/local/www/interfaces.php:1507 +#: usr/local/www/interfaces.php:1495 usr/local/www/interfaces.php:1508 +msgid "" +"If this interface is an Internet connection, select an existing Gateway from " +"the list or add one using the link above" +msgstr "" +"Eğer bu arabirim bir internet bağlantısı ise listedeki ağ geçitlerinden " +"birini seçin veya yukarıdaki bağlantıyı kullanarak yeni bir tane ekleyin" + +#: usr/local/www/interfaces.php:1417 usr/local/www/system_routes_edit.php:224 +#: usr/local/www/system_routes_edit.php:256 usr/local/www/interfaces.php:1521 +#: usr/local/www/system_routes_edit.php:257 usr/local/www/interfaces.php:1509 +#: usr/local/www/system_routes_edit.php:257 usr/local/www/interfaces.php:1522 +msgid "Add new gateway:" +msgstr "Yeni ağ geçidi ekle:" + +#: usr/local/www/interfaces.php:1425 usr/local/www/interfaces.php:1529 +#: usr/local/www/interfaces.php:1517 usr/local/www/interfaces.php:1530 +msgid "Default gateway:" +msgstr "Varsayılan ağ geçidi:" + +#: usr/local/www/interfaces.php:1428 usr/local/www/system_routes_edit.php:240 +#: usr/local/www/system_routes_edit.php:272 usr/local/www/interfaces.php:1532 +#: usr/local/www/system_routes_edit.php:273 usr/local/www/interfaces.php:1520 +#: usr/local/www/system_routes_edit.php:273 usr/local/www/interfaces.php:1533 +msgid "Gateway Name:" +msgstr "Ağ Geçidi Adı:" + +#: usr/local/www/interfaces.php:1431 usr/local/www/interfaces.php:1535 +#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1536 +msgid "Gateway IPv4:" +msgstr "Ağ Geçidi IPv4:" + +#: usr/local/www/interfaces.php:1434 usr/local/www/interfaces.php:1540 +#: usr/local/www/system_routes_edit.php:246 +#: usr/local/www/system_routes_edit.php:278 usr/local/www/interfaces.php:1538 +#: usr/local/www/interfaces.php:1646 usr/local/www/system_routes_edit.php:279 +#: usr/local/www/interfaces.php:1526 usr/local/www/interfaces.php:1634 +#: usr/local/www/system_routes_edit.php:279 usr/local/www/interfaces.php:1539 +#: usr/local/www/interfaces.php:1644 +msgid "Description:" +msgstr "Açıklama:" + +#: usr/local/www/interfaces.php:1442 usr/local/www/interfaces.php:1548 +#: usr/local/www/system_routes_edit.php:254 +#: usr/local/www/system_routes_edit.php:286 usr/local/www/interfaces.php:1654 +#: usr/local/www/system_routes_edit.php:287 usr/local/www/interfaces.php:1536 +#: usr/local/www/interfaces.php:1642 usr/local/www/system_routes_edit.php:287 +#: usr/local/www/interfaces.php:1546 usr/local/www/interfaces.php:1651 +msgid "Save Gateway" +msgstr "Ağ Geçidini Kaydet" + +#: usr/local/www/interfaces.php:1467 usr/local/www/interfaces.php:1573 +#: usr/local/www/interfaces.php:1561 usr/local/www/interfaces.php:1571 +msgid "Static IPv6 configuration" +msgstr "Sabit IPv6 yapılandırması" + +#: usr/local/www/interfaces.php:1488 usr/local/www/status_interfaces.php:231 +#: usr/local/www/status_interfaces.php:312 usr/local/www/interfaces.php:1594 +#: usr/local/www/status_interfaces.php:315 usr/local/www/interfaces.php:1582 +#: usr/local/www/status_interfaces.php:315 usr/local/www/interfaces.php:1592 +msgid "Gateway IPv6" +msgstr "Ağ Geçidi IPv6" + +#: usr/local/www/interfaces.php:1509 usr/local/www/interfaces.php:1615 +#: usr/local/www/interfaces.php:1603 usr/local/www/interfaces.php:1613 +msgid "" +"If this interface is an Internet connection, select an existing Gateway from " +"the list or add a new one using the link above" +msgstr "" +"Bu arabirim internet bağlantısı ise, mevcut ağ geçidini listeden seçiniz " +"yada aşağıdaki linki kullanarak bir tane ekleyiniz" + +#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1629 +#: usr/local/www/interfaces.php:1617 usr/local/www/interfaces.php:1627 +msgid "Add new v6 gateway:" +msgstr "Yeni v6 ağ geçidi ekle:" + +#: usr/local/www/interfaces.php:1531 usr/local/www/interfaces.php:1637 +#: usr/local/www/interfaces.php:1625 usr/local/www/interfaces.php:1635 +msgid "Default v6 gateway:" +msgstr "Varsayılan v6 ağ geçidi:" + +#: usr/local/www/interfaces.php:1534 usr/local/www/interfaces.php:1640 +#: usr/local/www/interfaces.php:1628 usr/local/www/interfaces.php:1638 +msgid "Gateway Name IPv6:" +msgstr "Ağ geçidi ismi IPv6:" + +#: usr/local/www/interfaces.php:1537 usr/local/www/interfaces.php:1643 +#: usr/local/www/interfaces.php:1631 usr/local/www/interfaces.php:1641 +msgid "Gateway IPv6:" +msgstr "Ağ geçidi IPv6:" + +#: usr/local/www/interfaces.php:1564 +msgid "DHCPv6 Prefix Delegation ID" +msgstr "DHCPv6 Önek Yetkilendirme Kimliği" + +#: usr/local/www/interfaces.php:1588 +msgid "" +"This ID sets the delegated DHCP-PD prefix number which will be used to setup " +"the interface." +msgstr "" +"Bu Kimlik arabirim kurulumu için yetkilendirilecek DHCP-PD önek numarasını " +"belirler." + +#: usr/local/www/interfaces.php:1598 usr/local/www/interfaces.php:1676 +#: usr/local/www/interfaces.php:1664 usr/local/www/interfaces.php:1676 +msgid "DHCP client configuration" +msgstr "DHCP istemci yapılandırması" + +#: usr/local/www/interfaces.php:1602 usr/local/www/interfaces.php:1680 +#: usr/local/www/interfaces.php:1668 usr/local/www/interfaces.php:1680 +msgid "Enable DHCP+" +msgstr "Etkinleştir DHCP+" + +#: usr/local/www/interfaces.php:1605 usr/local/www/interfaces.php:1683 +#: usr/local/www/interfaces.php:1671 usr/local/www/interfaces.php:1683 +msgid "Enable DHCP+L2TP or DHCP+PPTP." +msgstr "DHCP+L2TP veya DHCP+PPTP etkinleştir." + +#: usr/local/www/interfaces.php:1607 usr/local/www/interfaces.php:1685 +#: usr/local/www/interfaces.php:1673 usr/local/www/interfaces.php:1685 +msgid "" +"Status changes on this interface will trigger reconfiguration (if necessary) " +"of the associated PPTP/L2TP link." +msgstr "" +"Bu arabirimde durum değişiklikleri ilişkili PPTP/L2TP bağlantısının " +"(gerekiyorsa) yeniden yapılandırılmasına neden olur." + +#: usr/local/www/interfaces.php:1616 usr/local/www/interfaces.php:1694 +#: usr/local/www/interfaces.php:1682 usr/local/www/interfaces.php:1694 +msgid "" +"The value in this field is sent as the DHCP client identifier and hostname " +"when requesting a DHCP lease. Some ISPs may require this (for client " +"identification)." +msgstr "" +"Bu alandaki değer DHCP istemci tanımlayıcısı ve DHCP kirası istendiğinde " +"makine adı olarak gönderilir. Bazı ISSler (Internet Servis Sağlayıcı) " +"istemci tanıma amaçlı olarak bu alanın bir değer taşımasını gerektirebilir." + +#: usr/local/www/interfaces.php:1622 usr/local/www/interfaces.php:1700 +#: usr/local/www/interfaces.php:1688 usr/local/www/interfaces.php:1700 +msgid "Alias IPv4 address" +msgstr "Grup IPv4 adresi" + +#: usr/local/www/interfaces.php:1636 usr/local/www/interfaces.php:1714 +#: usr/local/www/interfaces.php:1702 usr/local/www/interfaces.php:1714 +msgid "" +"The value in this field is used as a fixed alias IPv4 address by the DHCP " +"client." +msgstr "" +"Bu alandaki kısaltılmış Grup değeri, DHCP istemcinin IPv4 adresi olarak " +"kullanılacak." + +#: usr/local/www/interfaces.php:1647 usr/local/www/interfaces.php:1725 +#: usr/local/www/interfaces.php:1713 usr/local/www/interfaces.php:1728 +msgid "DHCP6 client configuration" +msgstr "DHCP6 istemci yapılandırması" + +#: usr/local/www/interfaces.php:1650 usr/local/www/interfaces.php:1729 +#: usr/local/www/interfaces.php:1717 usr/local/www/interfaces.php:1732 +msgid "DHCPv6 Unique Identifier (DUID)" +msgstr "DHCPv6 benzersiz tanımlayıcı (DUID)" + +#: usr/local/www/interfaces.php:1654 usr/local/www/interfaces.php:1733 +#: usr/local/www/interfaces.php:1721 usr/local/www/interfaces.php:1736 +msgid "" +"The value in this field is sent as the DHCPv6 client identifier when " +"requesting a DHCPv6 lease." +msgstr "" +"Bu alandaki değer DHCPv6 kira talebi olunca DHCPv6 istemcisi tarafından " +"gönderilir." + +#: usr/local/www/interfaces.php:1659 usr/local/www/interfaces.php:1738 +#: usr/local/www/interfaces.php:1726 usr/local/www/interfaces.php:1741 +#, php-format +msgid "The current DUID is: '%s'" +msgstr "Şimdiki DUID: '%s' " + +#: usr/local/www/interfaces.php:1665 usr/local/www/interfaces.php:1745 +#: usr/local/www/interfaces.php:1733 usr/local/www/interfaces.php:1748 +msgid "DHCPv6 Prefix Delegation size" +msgstr "DHCP Önek Yetkilendirme boyutu" + +#: usr/local/www/interfaces.php:1678 usr/local/www/interfaces.php:1758 +#: usr/local/www/interfaces.php:1746 usr/local/www/interfaces.php:1761 +msgid "" +"The value in this field is the delegated prefix length provided by the " +"DHCPv6 server. Normally specified by the ISP." +msgstr "" +"Bu alandaki önek uzunluğu yetkilendirmesi değerini DHCPv6 sunucusu sağlar. " +"Normalde ISP tarafından belirtilir." + +#: usr/local/www/interfaces.php:1689 usr/local/www/interfaces.php:1867 +#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1879 +msgid "PPP configuration" +msgstr "PPP yapılandırması" + +#: usr/local/www/interfaces.php:1692 +#: usr/local/www/interfaces_ppps_edit.php:478 +#: usr/local/www/interfaces.php:1870 +#: usr/local/www/interfaces_ppps_edit.php:479 +#: usr/local/www/interfaces.php:1858 +#: usr/local/www/interfaces_ppps_edit.php:485 +#: usr/local/www/interfaces.php:1882 +msgid "Service Provider" +msgstr "Servis Sağlayıcı" + +#: usr/local/www/interfaces.php:1696 +#: usr/local/www/interfaces_ppps_edit.php:482 +#: usr/local/www/interfaces.php:1874 +#: usr/local/www/interfaces_ppps_edit.php:483 +#: usr/local/www/interfaces.php:1862 +#: usr/local/www/interfaces_ppps_edit.php:489 +#: usr/local/www/interfaces.php:1886 +msgid "Country:" +msgstr "Ülke:" + +#: usr/local/www/interfaces.php:1704 +#: usr/local/www/interfaces_ppps_edit.php:490 +#: usr/local/www/interfaces.php:1882 +#: usr/local/www/interfaces_ppps_edit.php:491 +#: usr/local/www/interfaces.php:1870 +#: usr/local/www/interfaces_ppps_edit.php:497 +#: usr/local/www/interfaces.php:1894 +msgid "Provider:" +msgstr "Sağlayıcı:" + +#: usr/local/www/interfaces.php:1712 +#: usr/local/www/interfaces_ppps_edit.php:498 +#: usr/local/www/interfaces.php:1890 +#: usr/local/www/interfaces_ppps_edit.php:499 +#: usr/local/www/interfaces.php:1878 +#: usr/local/www/interfaces_ppps_edit.php:505 +#: usr/local/www/interfaces.php:1902 +#, fuzzy +msgid "Plan:" +msgstr "Plan:" + +#: usr/local/www/interfaces.php:1720 +#: usr/local/www/interfaces_ppps_edit.php:506 +#: usr/local/www/interfaces.php:1898 +#: usr/local/www/interfaces_ppps_edit.php:507 +#: usr/local/www/interfaces.php:1886 +#: usr/local/www/interfaces_ppps_edit.php:513 +#: usr/local/www/interfaces.php:1910 +msgid "Select to fill in data for your service provider." +msgstr "Servis sağlayıcı bilgilerinizi girmek için seçiniz." + +#: usr/local/www/interfaces.php:1742 +#: usr/local/www/interfaces_ppps_edit.php:530 +#: usr/local/www/interfaces.php:1920 +#: usr/local/www/interfaces_ppps_edit.php:531 +#: usr/local/www/interfaces.php:1908 +#: usr/local/www/interfaces_ppps_edit.php:537 +#: usr/local/www/interfaces.php:1932 +msgid "Access Point Name (APN)" +msgstr "Erişim Noktası Adı (APN)" + +#: usr/local/www/interfaces.php:1766 usr/local/www/interfaces.php:1944 +#: usr/local/www/interfaces.php:1932 usr/local/www/interfaces.php:1956 +msgid "Advanced PPP" +msgstr "Gelişmiş PPP" + +#: usr/local/www/interfaces.php:1769 usr/local/www/interfaces.php:1774 +#: usr/local/www/interfaces.php:1875 usr/local/www/interfaces.php:1880 +#: usr/local/www/interfaces.php:1943 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces.php:1947 usr/local/www/interfaces.php:1952 +#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2058 +#: usr/local/www/interfaces.php:2121 usr/local/www/interfaces.php:2126 +#: usr/local/www/interfaces.php:1935 usr/local/www/interfaces.php:1940 +#: usr/local/www/interfaces.php:2041 usr/local/www/interfaces.php:2046 +#: usr/local/www/interfaces.php:2109 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:1959 usr/local/www/interfaces.php:1964 +#: usr/local/www/interfaces.php:2068 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces.php:2139 usr/local/www/interfaces.php:2144 +msgid "Click here" +msgstr "Buraya " + +#: usr/local/www/interfaces.php:1770 usr/local/www/interfaces.php:1948 +#: usr/local/www/interfaces.php:1936 usr/local/www/interfaces.php:1960 +msgid "to edit PPP configuration." +msgstr "tıklayarak PPP yapılandırmanızı değiştirebilirsiniz." + +#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1953 +#: usr/local/www/interfaces.php:1941 usr/local/www/interfaces.php:1965 +msgid "to create a PPP configuration." +msgstr "PPP yapılandırması oluşturabilirsiniz." + +#: usr/local/www/interfaces.php:1786 usr/local/www/interfaces.php:1964 +#: usr/local/www/interfaces.php:1952 usr/local/www/interfaces.php:1979 +msgid "PPPoE configuration" +msgstr "PPPoE yapılandırması" + +#: usr/local/www/interfaces.php:1801 +#: usr/local/www/interfaces_ppps_edit.php:589 +#: usr/local/www/interfaces.php:1979 +#: usr/local/www/interfaces_ppps_edit.php:590 +#: usr/local/www/interfaces.php:1967 +#: usr/local/www/interfaces_ppps_edit.php:596 +#: usr/local/www/interfaces.php:1994 +msgid "Service name" +msgstr "Servis adı" + +#: usr/local/www/interfaces.php:1803 usr/local/www/interfaces.php:1981 +#: usr/local/www/interfaces.php:1969 usr/local/www/interfaces.php:1996 +msgid "Hint: this field can usually be left empty" +msgstr "İpucu: Bu alan çoğunlukla boş bırakılabilir" + +#: usr/local/www/interfaces.php:1810 usr/local/www/interfaces.php:1929 +#: usr/local/www/interfaces.php:1988 usr/local/www/interfaces.php:2107 +#: usr/local/www/interfaces.php:1976 usr/local/www/interfaces.php:2095 +#: usr/local/www/interfaces.php:2003 usr/local/www/interfaces.php:2125 +msgid "Enable Dial-On-Demand mode" +msgstr "Gerektiğinde arama kipini etkinleştir" + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1989 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2004 +msgid "" +"This option causes the interface to operate in dial-on-demand mode, allowing " +"you to have a " +msgstr "" +"Bu seçenek arabirimin 'gerektiğinde ara' kipinde çalışmasını sağlar, böylece " +"" + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930 +#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096 +#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126 +msgid "virtual full time" +msgstr "görünüşte tam zamanlı" + +#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930 +#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096 +#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126 +msgid "" +"connection. The interface is configured, but the actual connection of the " +"link is delayed until qualifying outgoing traffic is detected." +msgstr "" +"bir bağlantı elde edilir. Arabirim yapılandırılır ama bağlantının gerçekten " +"sağlanması için dışarıya doğru trafik oluşması beklenir." + +#: usr/local/www/interfaces.php:1815 usr/local/www/interfaces.php:1934 +#: usr/local/www/services_captiveportal.php:465 +#: usr/local/www/services_captiveportal.php:470 +#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2112 +#: usr/local/www/services_captiveportal.php:468 +#: usr/local/www/interfaces.php:1981 usr/local/www/interfaces.php:2100 +#: usr/local/www/services_captiveportal.php:470 +#: usr/local/www/interfaces.php:2008 usr/local/www/interfaces.php:2130 +msgid "Idle timeout" +msgstr "Boşta bekleme zamanı" + +#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936 +#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:1983 usr/local/www/interfaces.php:2102 +#: usr/local/www/interfaces.php:2010 usr/local/www/interfaces.php:2132 +msgid "" +"If no qualifying outgoing packets are transmitted for the specified number " +"of seconds, the connection is brought down. An idle timeout of zero disables " +"this feature." +msgstr "" +"Belirtilen saniye sayısı boyunca dışarıya paket gönderilmezse bağlantı " +"durdurulur. Bu değeri 0 girerseniz bu özellik kapatılır." + +#: usr/local/www/interfaces.php:1821 +#: usr/local/www/interfaces_ppps_edit.php:596 +#: usr/local/www/interfaces.php:1999 +#: usr/local/www/interfaces_ppps_edit.php:597 +#: usr/local/www/interfaces.php:1987 +#: usr/local/www/interfaces_ppps_edit.php:603 +#: usr/local/www/interfaces.php:2014 +msgid "Periodic reset" +msgstr "Belirli aralıklarla sıfırlama" + +#: usr/local/www/interfaces.php:1829 +#: usr/local/www/interfaces_ppps_edit.php:604 +#: usr/local/www/status_rrd_graph.php:359 +#: usr/local/www/status_rrd_graph_settings.php:158 +#: usr/local/www/status_rrd_graph_settings.php:159 +#: usr/local/www/status_rrd_graph.php:407 usr/local/www/interfaces.php:2007 +#: usr/local/www/interfaces_ppps_edit.php:605 +#: usr/local/www/interfaces.php:1995 +#: usr/local/www/interfaces_ppps_edit.php:611 +#: usr/local/www/status_rrd_graph.php:432 +#: usr/local/www/status_rrd_graph_settings.php:159 +#: usr/local/www/interfaces.php:2022 +msgid "Custom" +msgstr "Özel" + +#: usr/local/www/interfaces.php:1830 +#: usr/local/www/interfaces_ppps_edit.php:605 +#: usr/local/www/interfaces.php:2008 +#: usr/local/www/interfaces_ppps_edit.php:606 +#: usr/local/www/interfaces.php:1996 +#: usr/local/www/interfaces_ppps_edit.php:612 +#: usr/local/www/interfaces.php:2023 +msgid "Pre-Set" +msgstr "Önceden ayarlı" + +#: usr/local/www/interfaces.php:1831 +#: usr/local/www/interfaces_ppps_edit.php:606 +#: usr/local/www/interfaces.php:2009 +#: usr/local/www/interfaces_ppps_edit.php:607 +#: usr/local/www/interfaces.php:1997 +#: usr/local/www/interfaces_ppps_edit.php:613 +#: usr/local/www/interfaces.php:2024 +msgid "Select a reset timing type" +msgstr "Sıfırlama zamanlama türü seçin" + +#: usr/local/www/interfaces.php:1839 +#: usr/local/www/interfaces_ppps_edit.php:614 +#: usr/local/www/interfaces.php:2017 +#: usr/local/www/interfaces_ppps_edit.php:615 +#: usr/local/www/interfaces.php:2005 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2032 +msgid "hour (0-23)" +msgstr "saat (0-23)" + +#: usr/local/www/interfaces.php:1841 +#: usr/local/www/interfaces_ppps_edit.php:616 +#: usr/local/www/interfaces.php:2019 +#: usr/local/www/interfaces_ppps_edit.php:617 +#: usr/local/www/interfaces.php:2007 +#: usr/local/www/interfaces_ppps_edit.php:623 +#: usr/local/www/interfaces.php:2034 +msgid "minute (0-59)" +msgstr "dakika (0-59)" + +#: usr/local/www/interfaces.php:1843 +#: usr/local/www/interfaces_ppps_edit.php:618 +#: usr/local/www/interfaces.php:2021 +#: usr/local/www/interfaces_ppps_edit.php:619 +#: usr/local/www/interfaces.php:2009 +#: usr/local/www/interfaces_ppps_edit.php:625 +#: usr/local/www/interfaces.php:2036 +msgid "reset at a specific date (mm/dd/yyyy)" +msgstr "belirli tarihte sıfırla (aa/gg/yyyy)" + +#: usr/local/www/interfaces.php:1846 +#: usr/local/www/interfaces_ppps_edit.php:621 +#: usr/local/www/interfaces.php:2024 +#: usr/local/www/interfaces_ppps_edit.php:622 +#: usr/local/www/interfaces.php:2012 +#: usr/local/www/interfaces_ppps_edit.php:628 +#: usr/local/www/interfaces.php:2039 +msgid "" +"If you leave the date field empty, the reset will be executed each day at " +"the time you did specify using the minutes and hour field." +msgstr "" +"Tarih alanı boş bırakılır ise sıfırlama işlemi dakika ve saat alanında " +"belirtilen değerlere göre her gün gerçekleştirilecektir." + +#: usr/local/www/interfaces.php:1854 +#: usr/local/www/interfaces_ppps_edit.php:629 +#: usr/local/www/interfaces.php:2032 +#: usr/local/www/interfaces_ppps_edit.php:630 +#: usr/local/www/interfaces.php:2020 +#: usr/local/www/interfaces_ppps_edit.php:636 +#: usr/local/www/interfaces.php:2047 +msgid "reset at each month ('0 0 1 * *')" +msgstr "her ay sıfırla ('0 0 1 * *')" + +#: usr/local/www/interfaces.php:1857 +#: usr/local/www/interfaces_ppps_edit.php:632 +#: usr/local/www/interfaces.php:2035 +#: usr/local/www/interfaces_ppps_edit.php:633 +#: usr/local/www/interfaces.php:2023 +#: usr/local/www/interfaces_ppps_edit.php:639 +#: usr/local/www/interfaces.php:2050 +msgid "reset at each week ('0 0 * * 0')" +msgstr "her hafta sıfırla ('0 0 * * 0')" + +#: usr/local/www/interfaces.php:1860 +#: usr/local/www/interfaces_ppps_edit.php:635 +#: usr/local/www/interfaces.php:2038 +#: usr/local/www/interfaces_ppps_edit.php:636 +#: usr/local/www/interfaces.php:2026 +#: usr/local/www/interfaces_ppps_edit.php:642 +#: usr/local/www/interfaces.php:2053 +msgid "reset at each day ('0 0 * * *')" +msgstr "her gün sıfırla ('0 0 * * *')" + +#: usr/local/www/interfaces.php:1863 +#: usr/local/www/interfaces_ppps_edit.php:638 +#: usr/local/www/interfaces.php:2041 +#: usr/local/www/interfaces_ppps_edit.php:639 +#: usr/local/www/interfaces.php:2029 +#: usr/local/www/interfaces_ppps_edit.php:645 +#: usr/local/www/interfaces.php:2056 +msgid "reset at each hour ('0 * * * *')" +msgstr "her saat sıfırla ('0 * * * *')" + +#: usr/local/www/interfaces.php:1872 usr/local/www/interfaces.php:2050 +#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2065 +msgid "Advanced and MLPPP" +msgstr "Gelişmiş ve MLPPP" + +#: usr/local/www/interfaces.php:1876 usr/local/www/interfaces.php:2054 +#: usr/local/www/interfaces.php:2042 usr/local/www/interfaces.php:2069 +msgid "" +"for additional PPPoE configuration options. Save first if you made changes." +msgstr "ek PPPoE yapılandırma seçenekleri için önce değişiklikleri kaydediniz." + +#: usr/local/www/interfaces.php:1881 usr/local/www/interfaces.php:2059 +#: usr/local/www/interfaces.php:2047 usr/local/www/interfaces.php:2074 +msgid "for advanced PPPoE configuration options and MLPPP configuration." +msgstr "gelişmiş PPPoE yapılandırma seçenekleri ve MLPPP yapılandırması için." + +#: usr/local/www/interfaces.php:1892 usr/local/www/interfaces.php:2070 +#: usr/local/www/interfaces.php:2058 usr/local/www/interfaces.php:2088 +msgid "PPTP/L2TP configuration" +msgstr "PPTP/L2TP yapılandırması" + +#: usr/local/www/interfaces.php:1907 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2103 +msgid "Local IP address" +msgstr "Yerel IP adresi" + +#: usr/local/www/interfaces.php:1920 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces.php:2098 usr/local/www/interfaces.php:2086 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/interfaces.php:2116 +msgid "Remote IP address" +msgstr "Uzak IP adresi" + +#: usr/local/www/interfaces.php:1930 usr/local/www/interfaces.php:2108 +#: usr/local/www/interfaces.php:2096 usr/local/www/interfaces.php:2126 +msgid "" +"This option causes the interface to operate in dial-on-demand mode, allowing " +"you to have a" +msgstr "Bu seçenek arabirimin gerektiğinde bağlanarak çalışmasını sağlar." + +#: usr/local/www/interfaces.php:1944 usr/local/www/interfaces.php:2122 +#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2140 +msgid "" +"for additional PPTP and L2TP configuration options. Save first if you made " +"changes." +msgstr "" +"Ek PPTP ve L2TP yapılandırma seçenekleri için değişiklikleri kaydediniz." + +#: usr/local/www/interfaces.php:1949 usr/local/www/interfaces.php:2127 +#: usr/local/www/interfaces.php:2115 usr/local/www/interfaces.php:2145 +msgid "for advanced PPTP and L2TP configuration options" +msgstr "gelişmiş PPTP ve L2TP yapılandırma seçeneklerini değiştirebilirsiniz" + +#: usr/local/www/interfaces.php:1964 usr/local/www/interfaces.php:2142 +#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2160 +msgid "" +"Common wireless configuration - Settings apply to all wireless networks on" +msgstr "" +"Genel kablosuz yapılandırması - Ayarlar şu arabirim üzerindeki kablosuz " +"ağlara uygulanacaktır" + +#: usr/local/www/interfaces.php:1967 usr/local/www/interfaces.php:2145 +#: usr/local/www/interfaces.php:2133 usr/local/www/interfaces.php:2163 +msgid "Persist common settings" +msgstr "Ortak ayarları sabitle" + +#: usr/local/www/interfaces.php:1970 usr/local/www/interfaces.php:2148 +#: usr/local/www/interfaces.php:2136 usr/local/www/interfaces.php:2166 +msgid "" +"Enabling this preserves the common wireless configuration through interface " +"deletions and reassignments." +msgstr "" +"Bu seçeneği açmak arabirim silinme ve yeniden atanma gibi durumlarda ortak " +"ayarları korur." + +#: usr/local/www/interfaces.php:1974 usr/local/www/interfaces.php:2152 +#: usr/local/www/interfaces.php:2140 usr/local/www/interfaces.php:2170 +msgid "Standard" +msgstr "Standart" + +#: usr/local/www/interfaces.php:1990 usr/local/www/interfaces.php:2168 +#: usr/local/www/interfaces.php:2156 usr/local/www/interfaces.php:2186 +msgid "Protection Mode" +msgstr "Koruma Kipi" + +#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2171 +#: usr/local/www/interfaces.php:2159 usr/local/www/interfaces.php:2189 +msgid "Protection mode off" +msgstr "Koruma kipi kapalı" + +#: usr/local/www/interfaces.php:1994 usr/local/www/interfaces.php:2172 +#: usr/local/www/interfaces.php:2160 usr/local/www/interfaces.php:2190 +msgid "Protection mode CTS to self" +msgstr "Koruma kipi CTS kendine" + +#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2173 +#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2191 +msgid "Protection mode RTS and CTS" +msgstr "Koruma kipi RTS ve CTS" + +#: usr/local/www/interfaces.php:1998 usr/local/www/interfaces.php:2176 +#: usr/local/www/interfaces.php:2164 usr/local/www/interfaces.php:2194 +msgid "" +"For IEEE 802.11g, use the specified technique for protecting OFDM frames in " +"a mixed 11b/11g network." +msgstr "" +"IEEE 802.11g için OFDM çerçevelerini 11b/11g karışık ağlarda korumak için " +"belirtilen tekniği kullan." + +#: usr/local/www/interfaces.php:2006 usr/local/www/interfaces.php:2184 +#: usr/local/www/interfaces.php:2172 usr/local/www/interfaces.php:2202 +msgid "Transmit power" +msgstr "Yayın gücü" + +#: usr/local/www/interfaces.php:2019 usr/local/www/interfaces.php:2197 +#: usr/local/www/interfaces.php:2185 usr/local/www/interfaces.php:2215 +msgid "" +"Note: Typically only a few discreet power settings are available and the " +"driver will use the setting closest to the specified value. Not all " +"adapters support changing the transmit power setting." +msgstr "" +"Not: Genellikle sadece birkaç güç ayarı kullanılabilir durumdadır ve sürücü " +"belirtilen değere en yakın ayarı kullanır. Tüm ağ kartları yayın gücü " +"ayarını desteklemez." + +#: usr/local/www/interfaces.php:2023 usr/local/www/status_interfaces.php:258 +#: usr/local/www/status_interfaces.php:355 usr/local/www/interfaces.php:2201 +#: usr/local/www/status_interfaces.php:358 usr/local/www/interfaces.php:2189 +#: usr/local/www/status_interfaces.php:358 usr/local/www/interfaces.php:2219 +msgid "Channel" +msgstr "Kanal" + +#: usr/local/www/interfaces.php:2026 usr/local/www/interfaces.php:2073 +#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2204 +#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2263 +#: usr/local/www/interfaces.php:2192 usr/local/www/interfaces.php:2239 +#: usr/local/www/interfaces.php:2222 usr/local/www/interfaces.php:2269 +#: usr/local/www/interfaces.php:2281 +msgid "Auto" +msgstr "Otomatik" + +#: usr/local/www/interfaces.php:2046 usr/local/www/interfaces.php:2224 +#: usr/local/www/interfaces.php:2212 usr/local/www/interfaces.php:2242 +msgid "" +"Legend: wireless standards - channel # (frequency @ max TX power / TX power " +"allowed in reg. domain)" +msgstr "" +"Efsane: kablosuz standartları - kanal # (frekans @ en yüksek TX gücü / " +"normal alanda izin verilen TX gücü)" + +#: usr/local/www/interfaces.php:2048 usr/local/www/interfaces.php:2226 +#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2244 +msgid "" +"Note: Not all channels may be supported by your card. Auto may override the " +"wireless standard selected above." +msgstr "" +"Not: Kartınız tüm kanalları desteklemiyor olabilir. Otomatik seçeneği " +"yukarıda seçili olan kablosuz standardının üzerine yazabilir." + +#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2231 +#: usr/local/www/interfaces.php:2219 usr/local/www/interfaces.php:2249 +msgid "Antenna settings" +msgstr "Anten ayarları" + +#: usr/local/www/interfaces.php:2059 usr/local/www/interfaces.php:2237 +#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2255 +msgid "Diversity" +msgstr "Farklılık" + +#: usr/local/www/interfaces.php:2061 usr/local/www/interfaces.php:2072 +#: usr/local/www/interfaces.php:2084 usr/local/www/interfaces.php:2114 +#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2146 +#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2250 +#: usr/local/www/interfaces.php:2262 usr/local/www/interfaces.php:2292 +#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2324 +#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2238 +#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2296 +#: usr/local/www/interfaces.php:2312 usr/local/www/diag_system_pftop.php:135 +#: usr/local/www/interfaces.php:2257 usr/local/www/interfaces.php:2268 +#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2310 +#: usr/local/www/interfaces.php:2326 usr/local/www/interfaces.php:2342 +msgid "Default" +msgstr "Varsayılan" + +#: usr/local/www/interfaces.php:2062 usr/local/www/vpn_pptp.php:314 +#: usr/local/www/vpn_l2tp.php:294 usr/local/www/vpn_pppoe_edit.php:362 +#: usr/local/www/interfaces.php:2240 usr/local/www/vpn_pppoe_edit.php:363 +#: usr/local/www/vpn_pptp.php:316 usr/local/www/interfaces.php:2228 +#: usr/local/www/vpn_l2tp.php:295 usr/local/www/vpn_l2tp.php:298 +#: usr/local/www/vpn_pppoe_edit.php:366 usr/local/www/vpn_pptp.php:319 +#: usr/local/www/interfaces.php:2258 +msgid "Off" +msgstr "Kapalı" + +#: usr/local/www/interfaces.php:2063 usr/local/www/interfaces.php:2241 +#: usr/local/www/interfaces.php:2229 usr/local/www/interfaces.php:2259 +msgid "On" +msgstr "Açık" + +#: usr/local/www/interfaces.php:2070 usr/local/www/interfaces.php:2248 +#: usr/local/www/interfaces.php:2236 usr/local/www/interfaces.php:2266 +msgid "Transmit antenna" +msgstr "Yayın anteni" + +#: usr/local/www/interfaces.php:2074 usr/local/www/interfaces.php:2086 +#: usr/local/www/interfaces.php:2252 usr/local/www/interfaces.php:2264 +#: usr/local/www/interfaces.php:2240 usr/local/www/interfaces.php:2270 +#: usr/local/www/interfaces.php:2282 +msgid "#1" +msgstr "#1" + +#: usr/local/www/interfaces.php:2075 usr/local/www/interfaces.php:2087 +#: usr/local/www/interfaces.php:2253 usr/local/www/interfaces.php:2265 +#: usr/local/www/interfaces.php:2241 usr/local/www/interfaces.php:2271 +#: usr/local/www/interfaces.php:2283 +msgid "#2" +msgstr "#2" + +#: usr/local/www/interfaces.php:2082 usr/local/www/interfaces.php:2260 +#: usr/local/www/interfaces.php:2248 usr/local/www/interfaces.php:2278 +msgid "Receive antenna" +msgstr "Alıcı anten" + +#: usr/local/www/interfaces.php:2094 usr/local/www/interfaces.php:2272 +#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2290 +msgid "" +"Note: The antenna numbers do not always match up with the labels on the card." +msgstr "Not: Anten numaraları kart üzerindeki etiketlerle eşleşmeyebilir." + +#: usr/local/www/interfaces.php:2100 usr/local/www/interfaces.php:2278 +#: usr/local/www/interfaces.php:2266 usr/local/www/interfaces.php:2296 +msgid "Distance setting" +msgstr "Mesafe ayarı" + +#: usr/local/www/interfaces.php:2104 usr/local/www/interfaces.php:2282 +#: usr/local/www/interfaces.php:2270 usr/local/www/interfaces.php:2300 +msgid "" +"Note: This field can be used to tune ACK/CTS timers to fit the distance " +"between AP and Client" +msgstr "" +"Not: Bu alan erişim noktası (AP - Access Point) ile istemci arasındaki " +"mesafeyi belielemek için ACK/CTS zamanlayıcılarını ayarlamada " +"kullanılabilir." + +#: usr/local/www/interfaces.php:2105 usr/local/www/interfaces.php:2283 +#: usr/local/www/interfaces.php:2271 usr/local/www/interfaces.php:2301 +msgid "(measured in Meters and works only for Atheros based cards !)" +msgstr "(metre cinsinden ölçülür ve sadece Atheros tabanlı kartlarda çalışır !)" + +#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2288 +#: usr/local/www/interfaces.php:2276 usr/local/www/interfaces.php:2306 +msgid "Regulatory settings" +msgstr "Düzenleyici ayarları" + +#: usr/local/www/interfaces.php:2112 usr/local/www/interfaces.php:2290 +#: usr/local/www/interfaces.php:2278 usr/local/www/interfaces.php:2308 +msgid "Regulatory domain" +msgstr "Düzenleyici bölgesi" + +#: usr/local/www/interfaces.php:2126 usr/local/www/interfaces.php:2304 +#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2322 +msgid "" +"Note: Some cards have a default that is not recognized and require changing " +"the regulatory domain to one in this list for the changes to other " +"regulatory settings to work." +msgstr "" +"Not: Bazı kartların öntanımlı değeri tanınmaz ve diğer düzenleyici " +"ayarlarının çalışabilmesi için bu düzenleyici bölgesinin bu değere " +"değiştirilmesi gerekir." + +#: usr/local/www/interfaces.php:2128 usr/local/www/interfaces.php:2306 +#: usr/local/www/interfaces.php:2294 usr/local/www/interfaces.php:2324 +msgid "Country (listed with country code and regulatory domain)" +msgstr "Ülke (ülke kodu ve düzenleyici bölgesi şeklinde listelenmiştir)" + +#: usr/local/www/interfaces.php:2142 usr/local/www/interfaces.php:2320 +#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2338 +msgid "" +"Note: Any country setting other than \"Default\" will override the " +"regulatory domain setting" +msgstr "" +"Not: \"Öntanımlı\" dışındaki değerler düzenleyici bölgesi değerini değiştirir" + +#: usr/local/www/interfaces.php:2144 usr/local/www/interfaces.php:2322 +#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2340 +msgid "Location" +msgstr "Konum" + +#: usr/local/www/interfaces.php:2147 usr/local/www/interfaces.php:2325 +#: usr/local/www/interfaces.php:2313 usr/local/www/interfaces.php:2343 +msgid "Indoor" +msgstr "Kapalı alan" + +#: usr/local/www/interfaces.php:2148 usr/local/www/interfaces.php:2326 +#: usr/local/www/interfaces.php:2314 usr/local/www/interfaces.php:2344 +msgid "Outdoor" +msgstr "Açık alan" + +#: usr/local/www/interfaces.php:2149 usr/local/www/interfaces.php:2327 +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2345 +msgid "Anywhere" +msgstr "Herhangi biryerde" + +#: usr/local/www/interfaces.php:2152 usr/local/www/interfaces.php:2330 +#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2348 +msgid "" +"These settings may affect which channels are available and the maximum " +"transmit power allowed on those channels. Using the correct settings to " +"comply with local regulatory requirements is recommended." +msgstr "" +"Bu ayarlar hangi kanalların kullanılabileceğini ve o kanallarda izin verilen " +"en yüksek yayın gücünü etkileyebilir. Yerel düzenleyici gerekliliklerine " +"uygun ve doğru ayarları kullanmak gerekir." + +#: usr/local/www/interfaces.php:2154 usr/local/www/interfaces.php:2332 +#: usr/local/www/interfaces.php:2320 usr/local/www/interfaces.php:2350 +msgid "" +"Note: All wireless networks on this interface will be temporarily brought " +"down when changing regulatory settings. Some of the regulatory domains or " +"country codes may not be allowed by some cards. These settings may not be " +"able to add additional channels that are not already supported." +msgstr "" +"Not: Düzenleyici ayarları değiştirilirken bu arabirim üzerindeki tüm " +"kablosuz ağlar geçici olarak kapatılacaktır. Bazı kartlar bazı düzenleyici " +"bölgelerini ve ülke kodlarını kabul etmeyebilir. Bu ayarlar halihazırda " +"desteklenenlerin dışında ek kanallar ekleyemeyebilir." + +#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2339 +#: usr/local/www/interfaces.php:2327 usr/local/www/interfaces.php:2357 +msgid "Network-specific wireless configuration" +msgstr "Ağa-özel kablosuz yapılandırması" + +#: usr/local/www/interfaces.php:2167 +#: usr/local/www/interfaces_wireless_edit.php:179 +#: usr/local/www/interfaces.php:2345 usr/local/www/interfaces.php:2333 +#: usr/local/www/interfaces_wireless_edit.php:181 +#: usr/local/www/interfaces.php:2363 +msgid "Infrastructure (BSS)" +msgstr "Altyapı (BSS)" + +#: usr/local/www/interfaces.php:2168 +#: usr/local/www/interfaces_wireless_edit.php:180 +#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2334 +#: usr/local/www/interfaces_wireless_edit.php:182 +#: usr/local/www/interfaces.php:2364 +msgid "Ad-hoc (IBSS)" +msgstr "Eşlerarası (Ad-hoc - IBSS)" + +#: usr/local/www/interfaces.php:2169 +#: usr/local/www/interfaces_wireless_edit.php:181 +#: usr/local/www/interfaces.php:2347 usr/local/www/interfaces.php:2335 +#: usr/local/www/interfaces_wireless_edit.php:183 +#: usr/local/www/interfaces.php:2365 +msgid "Access Point" +msgstr "Erişim Noktası (Access Point - AP)" + +#: usr/local/www/interfaces.php:2181 usr/local/www/interfaces.php:2361 +#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2379 +msgid "Minimum wireless standard" +msgstr "Minimum kablosuz standardı" + +#: usr/local/www/interfaces.php:2184 usr/local/www/interfaces.php:2364 +#: usr/local/www/interfaces.php:2352 usr/local/www/interfaces.php:2382 +msgid "Any" +msgstr "Herhangi biri" + +#: usr/local/www/interfaces.php:2186 usr/local/www/interfaces.php:2366 +#: usr/local/www/interfaces.php:2354 usr/local/www/interfaces.php:2384 +#, fuzzy +msgid "802.11g" +msgstr "802.11g" + +#: usr/local/www/interfaces.php:2188 usr/local/www/interfaces.php:2368 +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2386 +#, fuzzy +msgid "802.11n" +msgstr "802.11n" + +#: usr/local/www/interfaces.php:2191 usr/local/www/interfaces.php:2371 +#: usr/local/www/interfaces.php:2359 usr/local/www/interfaces.php:2389 +msgid "" +"When operating as an access point, allow only stations capable of the " +"selected wireless standard to associate (stations not capable are not " +"permitted to associate)." +msgstr "" +"Erişim noktası olarak çalışırken sadece seçilen kablosuz standardında " +"çalışabilen istemcilerin bağlanmasına izin ver, (diğerlerinin ilişkilendirme " +"isteklerini reddet)." + +#: usr/local/www/interfaces.php:2196 usr/local/www/interfaces.php:2376 +#: usr/local/www/interfaces.php:2364 usr/local/www/interfaces.php:2394 +msgid "802.11g only" +msgstr "Sadece 802.11g" + +#: usr/local/www/interfaces.php:2199 usr/local/www/interfaces.php:2379 +#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2397 +msgid "" +"When operating as an access point in 802.11g mode, allow only 11g-capable " +"stations to associate (11b-only stations are not permitted to associate)." +msgstr "" +"802.11g kipinde erişim noktası olarak çalışırken sadece 11g çalışabilen " +"istemcilerin erişimine izin ver (sadece 11b olan istemcileri reddet)." + +#: usr/local/www/interfaces.php:2204 usr/local/www/interfaces.php:2384 +#: usr/local/www/interfaces.php:2372 usr/local/www/interfaces.php:2402 +msgid "Allow intra-BSS communication" +msgstr "BSS'ler arası iletişime izin ver" + +#: usr/local/www/interfaces.php:2208 usr/local/www/interfaces.php:2388 +#: usr/local/www/interfaces.php:2376 usr/local/www/interfaces.php:2406 +msgid "" +"When operating as an access point, enable this if you want to pass packets " +"between wireless clients directly." +msgstr "" +"Erişim noktası olarak çalışırken kablosuz istemciler arasında paketlerin " +"doğrudan geçirilmesine izin vermek istiyorsanız etkinleştirin." + +#: usr/local/www/interfaces.php:2210 usr/local/www/interfaces.php:2390 +#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2408 +msgid "" +"Disabling the internal bridging is useful when traffic is to be processed " +"with packet filtering." +msgstr "" +"Trafik paket filtreleme tarafından işlenecekse iç köprülemeyi kapatmak " +"gerekir." + +#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2394 +#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2412 +msgid "Enable WME" +msgstr "WMEyi etkinleştir" + +#: usr/local/www/interfaces.php:2217 usr/local/www/interfaces.php:2397 +#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2415 +msgid "Setting this option will force the card to use WME (wireless QoS)." +msgstr "Bu seçeneği açmak ağ kartını WME (kablosuz QoS) kullanmaya zorlar." + +#: usr/local/www/interfaces.php:2221 usr/local/www/interfaces.php:2401 +#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2419 +msgid "Enable Hide SSID" +msgstr "SSID Gizlemeyi Etkinleştir" + +#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2405 +#: usr/local/www/interfaces.php:2393 usr/local/www/interfaces.php:2423 +msgid "Setting this option will force the card to NOT broadcast its SSID" +msgstr "" +"Bu seçeneğin etkinleştirilmesi ağ kartını ağ adını (SSID) yayınlanmamaya " +"zorlar" + +#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2407 +#: usr/local/www/interfaces.php:2395 usr/local/www/interfaces.php:2425 +msgid "(this might create problems for some clients)." +msgstr "(bazı işlemcilerin zorun yaşamasına neden olabilir)." + +#: usr/local/www/interfaces.php:2231 usr/local/www/interfaces.php:2411 +#: usr/local/www/interfaces.php:2399 usr/local/www/interfaces.php:2429 +msgid "WEP" +msgstr "WEP" + +#: usr/local/www/interfaces.php:2234 usr/local/www/interfaces.php:2414 +#: usr/local/www/interfaces.php:2402 usr/local/www/interfaces.php:2432 +msgid "Enable WEP" +msgstr "WEP'i Etkinleştir" + +#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2419 +#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2437 +msgid "TX key" +msgstr "TX anahtarı" + +#: usr/local/www/interfaces.php:2242 usr/local/www/interfaces.php:2422 +#: usr/local/www/interfaces.php:2410 usr/local/www/interfaces.php:2440 +msgid "Key 1:" +msgstr "Anahtar 1:" + +#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2431 +#: usr/local/www/interfaces.php:2419 usr/local/www/interfaces.php:2449 +msgid "Key 2:" +msgstr "Anahtar 2:" + +#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2440 +#: usr/local/www/interfaces.php:2428 usr/local/www/interfaces.php:2458 +msgid "Key 3:" +msgstr "Anahtar 3:" + +#: usr/local/www/interfaces.php:2269 usr/local/www/interfaces.php:2449 +#: usr/local/www/interfaces.php:2437 usr/local/www/interfaces.php:2467 +msgid "Key 4:" +msgstr "Anahtar 4:" + +#: usr/local/www/interfaces.php:2279 usr/local/www/interfaces.php:2459 +#: usr/local/www/interfaces.php:2447 usr/local/www/interfaces.php:2477 +msgid "" +"40 (64) bit keys may be entered as 5 ASCII characters or 10 hex digits " +"preceded by '0x'." +msgstr "" +"40 (64) bit anahtarlar 5 ASCII karakter veya önüne '0x' koymak şartıyla 10 " +"adet onaltılı basamak olarak girilebilir." + +#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2460 +#: usr/local/www/interfaces.php:2448 usr/local/www/interfaces.php:2478 +msgid "" +"104 (128) bit keys may be entered as 13 ASCII characters or 26 hex digits " +"preceded by '0x'." +msgstr "" +"40 (128) bit anahtarlar 13 ASCII karakter veya önüne '0x' koymak şartıyla 26 " +"adet onaltılı basamak olarak girilebilir." + +#: usr/local/www/interfaces.php:2284 usr/local/www/interfaces.php:2308 +#: usr/local/www/interfaces.php:2464 usr/local/www/interfaces.php:2488 +#: usr/local/www/interfaces.php:2452 usr/local/www/interfaces.php:2476 +#: usr/local/www/interfaces.php:2482 usr/local/www/interfaces.php:2506 +msgid "WPA" +msgstr "WPA" + +#: usr/local/www/interfaces.php:2287 usr/local/www/interfaces.php:2467 +#: usr/local/www/interfaces.php:2455 usr/local/www/interfaces.php:2485 +msgid "Enable WPA" +msgstr "WPA'yı Etkinleştir" + +#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2472 +msgid "WPA Pre Shared Key" +msgstr "WPA Önpaylaşımlı Anahtar" + +#: usr/local/www/interfaces.php:2295 usr/local/www/interfaces.php:2475 +#: usr/local/www/interfaces.php:2463 usr/local/www/interfaces.php:2493 +msgid "PSK:" +msgstr "PSK:" + +#: usr/local/www/interfaces.php:2301 usr/local/www/interfaces.php:2481 +#: usr/local/www/interfaces.php:2469 usr/local/www/interfaces.php:2499 +msgid "Passphrase must be from 8 to 63 characters." +msgstr "Şifre 8 ila 63 karakter olmalıdır." + +#: usr/local/www/interfaces.php:2305 usr/local/www/interfaces.php:2485 +#: usr/local/www/interfaces.php:2473 usr/local/www/interfaces.php:2503 +msgid "WPA Mode" +msgstr "WPA Kipi" + +#: usr/local/www/interfaces.php:2309 usr/local/www/interfaces.php:2489 +#: usr/local/www/interfaces.php:2477 usr/local/www/interfaces.php:2507 +msgid "WPA2" +msgstr "WPA2" + +#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2320 +#: usr/local/www/interfaces.php:2330 usr/local/www/interfaces.php:2339 +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/interfaces.php:2490 usr/local/www/interfaces.php:2500 +#: usr/local/www/interfaces.php:2510 usr/local/www/interfaces.php:2519 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/interfaces.php:2478 usr/local/www/interfaces.php:2488 +#: usr/local/www/interfaces.php:2498 usr/local/www/interfaces.php:2507 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2518 +#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2537 +msgid "Both" +msgstr "İkisi birden" + +#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2495 +#: usr/local/www/interfaces.php:2483 usr/local/www/interfaces.php:2513 +msgid "WPA Key Management Mode" +msgstr "WPA Anahtar Yönetim Kipi" + +#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2498 +msgid "Pre Shared Key" +msgstr "Önpaylaşımlı Anahtar" + +#: usr/local/www/interfaces.php:2319 usr/local/www/interfaces.php:2499 +#: usr/local/www/interfaces.php:2487 usr/local/www/interfaces.php:2517 +msgid "Extensible Authentication Protocol" +msgstr "Genişletilebilir Kimlik Doğrulama Protokolü (EAP)" + +#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2508 +#: usr/local/www/interfaces.php:2496 usr/local/www/interfaces.php:2526 +msgid "Open System Authentication" +msgstr "Açık Sistem Kimlik Doğrulama (OSA)" + +#: usr/local/www/interfaces.php:2329 usr/local/www/interfaces.php:2509 +#: usr/local/www/interfaces.php:2497 usr/local/www/interfaces.php:2527 +msgid "Shared Key Authentication" +msgstr "Paylaşımlı Anahtar Kimlik Doğrulama (SKA)" + +#: usr/local/www/interfaces.php:2332 usr/local/www/interfaces.php:2512 +#: usr/local/www/interfaces.php:2500 usr/local/www/interfaces.php:2530 +msgid "Note: Shared Key Authentication requires WEP." +msgstr "Not: Paylaşımlı Anahtar Kimlik Doğrulama WEP gerektirir." + +#: usr/local/www/interfaces.php:2336 usr/local/www/interfaces.php:2516 +#: usr/local/www/interfaces.php:2504 usr/local/www/interfaces.php:2534 +msgid "WPA Pairwise" +msgstr "WPA Çiftleme" + +#: usr/local/www/interfaces.php:2340 usr/local/www/interfaces.php:2520 +#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2538 +msgid "AES (recommended)" +msgstr "AES (önerilen)" + +#: usr/local/www/interfaces.php:2341 usr/local/www/interfaces.php:2521 +#: usr/local/www/interfaces.php:2509 usr/local/www/interfaces.php:2539 +msgid "TKIP" +msgstr "TKIP" + +#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2526 +#: usr/local/www/interfaces.php:2514 usr/local/www/interfaces.php:2544 +msgid "Key Rotation" +msgstr "Anahtar Rotasyonu" + +#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2529 +#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2547 +msgid "" +"Allowed values are 1-9999 but should not be longer than Master Key " +"Regeneration time." +msgstr "" +"İzin verilen değerler 1 ile 9999 arasındadır ama Ana Anahtar Yenileme " +"zamanından fazla olmamalıdır." + +#: usr/local/www/interfaces.php:2353 usr/local/www/interfaces.php:2533 +#: usr/local/www/interfaces.php:2521 usr/local/www/interfaces.php:2551 +msgid "Master Key Regeneration" +msgstr "Ana Anahtar Yenileme" + +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2536 +#: usr/local/www/interfaces.php:2524 usr/local/www/interfaces.php:2554 +msgid "" +"Allowed values are 1-9999 but should not be shorter than Key Rotation time." +msgstr "" +"İzin verilen değerler 1 ile 9999 arasındadır ama Anahtar Rotasyon zamanından " +"fazla olmamalıdır." + +#: usr/local/www/interfaces.php:2360 usr/local/www/interfaces.php:2540 +#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2558 +msgid "Strict Key Regeneration" +msgstr "Sıkı Anahtar Yenileme" + +#: usr/local/www/interfaces.php:2363 usr/local/www/interfaces.php:2543 +#: usr/local/www/interfaces.php:2531 usr/local/www/interfaces.php:2561 +msgid "" +"Setting this option will force the AP to rekey whenever a client " +"disassociates." +msgstr "" +"Bu seçeneği açmak erişim noktasını her istemci ayrılışında anahtar " +"yenilemeye zorlar." + +#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2547 +#: usr/local/www/interfaces.php:2535 usr/local/www/interfaces.php:2565 +msgid "Enable IEEE802.1X Authentication" +msgstr "IEEE802.1x Kimlik Doğrulamayı Etkinleştir" + +#: usr/local/www/interfaces.php:2370 usr/local/www/interfaces.php:2550 +#: usr/local/www/interfaces.php:2538 usr/local/www/interfaces.php:2568 +msgid "Setting this option will enable 802.1x authentication." +msgstr "" +"Bu seçeneği etkinleştirmek 802.1x kimlik doğrulamanın devreye girmesini " +"sağlayacaktır." + +#: usr/local/www/interfaces.php:2371 +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/status_openvpn.php:304 usr/local/www/interfaces.php:2551 +#: usr/local/www/load_balancer_pool_edit.php:255 +#: usr/local/www/status_openvpn.php:307 usr/local/www/interfaces.php:2539 +#: usr/local/www/load_balancer_pool_edit.php:253 +#: usr/local/www/status_openvpn.php:355 +#: usr/local/www/load_balancer_pool_edit.php:253 +#: usr/local/www/interfaces.php:2569 +msgid "NOTE" +msgstr "NOT" + +#: usr/local/www/interfaces.php:2371 usr/local/www/interfaces.php:2551 +#: usr/local/www/interfaces.php:2539 usr/local/www/interfaces.php:2569 +msgid "this option requires checking the \"Enable WPA box\"." +msgstr "bu seçenek \"WPA kutusunu etkinleştir\"i işaretlemeyi gerektirir." + +#: usr/local/www/interfaces.php:2375 usr/local/www/interfaces.php:2555 +#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2573 +msgid "802.1X Authentication Server IP Address" +msgstr "802.1x Kimlik Doğrulama Sunucu IP Adresi" + +#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2558 +#: usr/local/www/interfaces.php:2579 usr/local/www/interfaces.php:2546 +#: usr/local/www/interfaces.php:2567 usr/local/www/interfaces.php:2576 +#: usr/local/www/interfaces.php:2597 +msgid "" +"Enter the IP address of the 802.1X Authentication Server. This is commonly " +"a Radius server (FreeRadius, Internet Authentication Services, etc.)" +msgstr "" +"802.1x kimlik doğrulama sunucusunun IP adesini giriniz. Genellikle Radius " +"sunucudur (FreeRadius, Internet Kimlik Doğrulama Servisleri (IAS) vb.)" + +#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2562 +#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2580 +msgid "802.1X Authentication Server Port" +msgstr "802.1x Kimlik doğrulama Sunucu Portu" + +#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2565 +#: usr/local/www/interfaces.php:2586 usr/local/www/interfaces.php:2553 +#: usr/local/www/interfaces.php:2574 usr/local/www/interfaces.php:2583 +#: usr/local/www/interfaces.php:2604 +msgid "Leave blank for the default 1812 port." +msgstr "Varsayılan port olan 1812'yi kullanmak için boş bırakın." + +#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2569 +#: usr/local/www/interfaces.php:2557 usr/local/www/interfaces.php:2587 +msgid "802.1X Authentication Server Shared Secret" +msgstr "802.1x Kimlik Doğrulama Sunucusu Paylaşımlı Anahtar" + +#: usr/local/www/interfaces.php:2396 usr/local/www/interfaces.php:2597 +#: usr/local/www/interfaces.php:2585 usr/local/www/interfaces.php:2615 +msgid "Authentication Roaming Preauth" +msgstr "Kimlik Doğrulama Dolaşım Önyayını" + +#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2608 +#: usr/local/www/interfaces.php:2596 usr/local/www/interfaces.php:2626 +msgid "Private networks" +msgstr "Özel ağlar" + +#: usr/local/www/interfaces.php:2415 usr/local/www/interfaces.php:2616 +#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2634 +msgid "" +"When set, this option blocks traffic from IP addresses that are reserved for " +"private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as" +msgstr "" +"Ayarlandığında, bu seçenek RFC 1918'e göre özel ağ olarak ayrılmış IP " +"adreslerinden (10/8, 172.16/12, 192.168/16) ve " + +#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636 +msgid "well as loopback addresses (127/8)." +msgstr "loopback adresinden gelen trafiği (127/8) engeller." + +#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618 +#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636 +msgid "" +"You should generally leave this option turned on, unless your WAN network " +"lies in such a private address space, too." +msgstr "" +"Eğer WAN ağınız da bu tür bir özel ağın içinde değilse bu seçeneği açık " +"bırakmalısınız." + +#: usr/local/www/interfaces.php:2427 usr/local/www/interfaces.php:2628 +#: usr/local/www/interfaces.php:2616 usr/local/www/interfaces.php:2646 +msgid "" +"When set, this option blocks traffic from IP addresses that are reserved " +"(but not RFC 1918) or not yet assigned by IANA." +msgstr "" +"Bu seçenek RFC 1918 dışında ayrılmış veya IANA tarafından atanmamış IP " +"adreslerini engeller." + +#: usr/local/www/interfaces.php:2429 usr/local/www/interfaces.php:2630 +#: usr/local/www/interfaces.php:2618 usr/local/www/interfaces.php:2648 +msgid "" +"Bogons are prefixes that should never appear in the Internet routing table, " +"and obviously should not appear as the source address in any packets you " +"receive." +msgstr "" +"Sahte IPler Internet yönlendirme tablosunda veya aldığınız paketlerin kaynak " +"adres bölümünde hiç görünmemesi gereken IPlerdir." + +#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2559 +#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761 +#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749 +#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783 +msgid "You can manage Gateways" +msgstr "Ağ geçitlerini yönetebilirsiniz" + +#: usr/local/www/interfaces_assign.php:43 +#: usr/local/www/interfaces_assign.php:43 +msgid "Assign network ports" +msgstr "Ağ portlarını ata" + +#: usr/local/www/interfaces_assign.php:194 +#: usr/local/www/interfaces_assign.php:194 +#, php-format +msgid "Port %1$s was assigned to %2$s interfaces:" +msgstr "Port %1$s %2$s arabirimlerine atanmıştı:" + +#: usr/local/www/interfaces_assign.php:262 +#: usr/local/www/interfaces_assign.php:274 +msgid "" +"The interface is part of a group. Please remove it from the group to continue" +msgstr "" +"Arabirim bir grubun üyesi. Devam etmek için önce grup üyeliğinden çıkarınız" + +#: usr/local/www/interfaces_assign.php:264 +#: usr/local/www/interfaces_assign.php:276 +msgid "" +"The interface is part of a bridge. Please remove it from the bridge to " +"continue" +msgstr "Arabirim bir köprünün üyesi. Devam etmek için önce köprüden çıkarınız" + +#: usr/local/www/interfaces_assign.php:266 +#: usr/local/www/interfaces_assign.php:278 +msgid "" +"The interface is part of a gre tunnel. Please delete the tunnel to continue" +msgstr "Arabirim bir GRE tünelinin üyesi. Devam etmek için önce tüneli siliniz" + +#: usr/local/www/interfaces_assign.php:268 +#: usr/local/www/interfaces_assign.php:280 +msgid "" +"The interface is part of a gif tunnel. Please delete the tunnel to continue" +msgstr "Arabirim bir GIF tünelinin üyesi. Devam etmek için önce tüneli siliniz" + +#: usr/local/www/interfaces_assign.php:318 +#: usr/local/www/interfaces_assign.php:312 +#: usr/local/www/interfaces_assign.php:318 +msgid "Interface has been deleted." +msgstr "Arabirim silindi." + +#: usr/local/www/interfaces_assign.php:325 +#: usr/local/www/interfaces_assign.php:319 +#: usr/local/www/interfaces_assign.php:325 +#, fuzzy +msgid "lan" +msgstr "lan" + +#: usr/local/www/interfaces_assign.php:326 +#: usr/local/www/interfaces_assign.php:320 +#: usr/local/www/interfaces_assign.php:326 +msgid "LAN" +msgstr "LAN" + +#: usr/local/www/interfaces_assign.php:366 +#: usr/local/www/interfaces_assign.php:360 +#: usr/local/www/interfaces_assign.php:366 +msgid "Interface has been added." +msgstr "Arabirim eklendi." + +#: usr/local/www/interfaces_assign.php:376 +#: usr/local/www/interfaces_assign.php:370 +#: usr/local/www/interfaces_assign.php:376 +msgid "The system is now rebooting. Please wait." +msgstr "Sistem yeniden başlatılıyor. Lütfen bekleyiniz." + +#: usr/local/www/interfaces_assign.php:378 +#: usr/local/www/interfaces_assign.php:372 +#: usr/local/www/interfaces_assign.php:378 +msgid "Reboot is needed. Please apply the settings in order to reboot." +msgstr "" +"Sistemi yeniden başlatmak gerekiyor. Lütfen tekrar başlatma için " +"yapılandırmayı uygulayınız." + +#: usr/local/www/interfaces_assign.php:380 +#: usr/local/www/interfaces_assign.php:374 +#: usr/local/www/interfaces_assign.php:380 +msgid "" +"Interface mismatch detected. Please resolve the mismatch and click Save. " +"The firewall will reboot afterwards." +msgstr "" +"Arabirim uyumsuzluğu tespit edildi. Uyumsuzluğu düzelterek kaydediniz. " +"Ardından Güvenlik Duvarı yeniden başlatılacak." + +#: usr/local/www/interfaces_assign.php:390 +#: usr/local/www/interfaces_assign.php:384 +#: usr/local/www/interfaces_assign.php:390 +msgid "" +"The interface configuration has been changed.
    You must apply the changes " +"in order for them to take effect." +msgstr "" +"Arabirim yapılandırması değiştirildi.
    Değişiklikleri uygulayarak etkin " +"hale gelmelerini sağlayabilirsiniz." + +#: usr/local/www/interfaces_assign.php:421 +#: usr/local/www/interfaces_assign.php:415 +#: usr/local/www/interfaces_assign.php:421 +msgid "Network port" +msgstr "Ağ portu" + +#: usr/local/www/interfaces_assign.php:437 +#: usr/local/www/interfaces_assign.php:431 +#: usr/local/www/interfaces_assign.php:437 +#, php-format +msgid "VLAN %1$s on %2$s" +msgstr "VLAN %2$s üzerinde %1$s" + +#: usr/local/www/interfaces_assign.php:480 +#: usr/local/www/interfaces_assign.php:474 +#: usr/local/www/interfaces_assign.php:480 +msgid "Do you really want to delete this interface?" +msgstr "Bu arabirimi silmek istediğinize emin misiniz?" + +#: usr/local/www/interfaces_assign.php:480 +#: usr/local/www/interfaces_assign.php:474 +#: usr/local/www/interfaces_assign.php:480 +msgid "delete interface" +msgstr "arabirimi sil" + +#: usr/local/www/interfaces_assign.php:489 +#: usr/local/www/interfaces_assign.php:483 +#: usr/local/www/interfaces_assign.php:489 +msgid "add interface" +msgstr "arabirim ekle" + +#: usr/local/www/interfaces_assign.php:506 +#: usr/local/www/interfaces_assign.php:500 +#: usr/local/www/interfaces_assign.php:506 +msgid "" +"Interfaces that are configured as members of a lagg(4) interface will not be " +"shown." +msgstr "" +"Lagg(4) arabiriminin üyesi olarak yapılandırılmış arabirimler " +"gösterilmeyecek." + +#: usr/local/www/diag_pf_info.php:46 usr/local/www/diag_pf_info.php:46 +msgid "Diagnostics: pfInfo" +msgstr "Araçlar: pfBilgi" + +#: usr/local/www/diag_pf_info.php:106 usr/local/www/diag_pf_info.php:106 +msgid "Gathering PF information, please wait..." +msgstr "PF bilgisi toplanıyor, lütfen bekleyiniz..." + +#: usr/local/www/diag_smart.php:14 usr/local/www/diag_smart.php:14 +msgid "S.M.A.R.T. Monitor Tools" +msgstr "S.M.A.R.T. İzleme Araçları" + +#: usr/local/www/diag_smart.php:68 usr/local/www/diag_smart.php:73 +msgid "PASSED" +msgstr "GEÇTİ" + +#: usr/local/www/diag_smart.php:69 usr/local/www/diag_smart.php:74 +msgid "FAILED" +msgstr "BAŞARISIZ" + +#: usr/local/www/diag_smart.php:70 usr/local/www/diag_smart.php:75 +msgid "Warning" +msgstr "Uyarı" + +#: usr/local/www/diag_smart.php:113 usr/local/www/diag_smart.php:413 +#: usr/local/www/diag_smart.php:126 usr/local/www/diag_smart.php:434 +msgid "Abort" +msgstr "İptal" + +#: usr/local/www/diag_smart.php:154 usr/local/www/diag_smart.php:175 +#, php-format +msgid "Email sent to %s" +msgstr "%s adresine E-posta gönderildi" + +#: usr/local/www/diag_smart.php:194 usr/local/www/diag_smart.php:266 +#: usr/local/www/diag_smart.php:215 usr/local/www/diag_smart.php:287 +msgid "Information/Tests" +msgstr "Bilgi/Testler" + +#: usr/local/www/diag_smart.php:195 usr/local/www/diag_smart.php:206 +#: usr/local/www/diag_smart.php:216 usr/local/www/diag_smart.php:227 +msgid "Config" +msgstr "Yapılandırma" + +#: usr/local/www/diag_smart.php:209 usr/local/www/system_camanager.php:524 +#: usr/local/www/system_certmanager.php:617 +#: usr/local/www/system_certmanager.php:720 +#: usr/local/www/system_certmanager.php:733 +#: usr/local/www/system_certmanager.php:886 +#: usr/local/www/system_camanager.php:525 +#: usr/local/www/system_camanager.php:549 usr/local/www/diag_smart.php:230 +#: usr/local/www/system_certmanager.php:758 +#: usr/local/www/system_certmanager.php:928 +msgid "Email Address" +msgstr "E-Posta Adresi" + +#: usr/local/www/diag_smart.php:231 usr/local/www/diag_smart.php:252 +msgid "Test email" +msgstr "Test e-postası" + +#: usr/local/www/diag_smart.php:236 usr/local/www/diag_smart.php:257 +#, php-format +msgid "Send test email to %s" +msgstr "Test e-postası %s adresine gönderildi" + +#: usr/local/www/diag_smart.php:278 usr/local/www/diag_smart.php:283 +#: usr/local/www/diag_smart.php:299 usr/local/www/diag_smart.php:304 +msgid "Info" +msgstr "Bilgi" + +#: usr/local/www/diag_smart.php:281 usr/local/www/diag_smart.php:302 +msgid "Info type" +msgstr "Bilgi tipi" + +#: usr/local/www/diag_smart.php:284 usr/local/www/diag_smart.php:305 +msgid "Health" +msgstr "Sağlık" + +#: usr/local/www/diag_smart.php:285 usr/local/www/diag_smart.php:306 +msgid "SMART Capabilities" +msgstr "SMART Yetenekleri" + +#: usr/local/www/diag_smart.php:286 usr/local/www/diag_smart.php:307 +msgid "Attributes" +msgstr "Özellikler" + +#: usr/local/www/diag_smart.php:287 usr/local/www/firewall_aliases.php:179 +#: usr/local/www/firewall_aliases.php:179 usr/local/www/diag_smart.php:308 +msgid "All" +msgstr "Tümü" + +#: usr/local/www/diag_smart.php:291 usr/local/www/diag_smart.php:330 +#: usr/local/www/diag_smart.php:367 usr/local/www/diag_smart.php:397 +#: usr/local/www/diag_smart.php:312 usr/local/www/diag_smart.php:351 +#: usr/local/www/diag_smart.php:388 usr/local/www/diag_smart.php:418 +msgid "Device: /dev/" +msgstr "Aygıt: /dev/" + +#: usr/local/www/diag_smart.php:307 usr/local/www/diag_smart.php:383 +#: usr/local/www/diag_smart.php:328 usr/local/www/diag_smart.php:404 +msgid "View" +msgstr "Görüntüle" + +#: usr/local/www/diag_smart.php:318 +msgid "Perform Self Tests" +msgstr "Testleri Uygula" + +#: usr/local/www/diag_smart.php:321 usr/local/www/diag_smart.php:342 +msgid "Test type" +msgstr "Test türü" + +#: usr/local/www/diag_smart.php:323 +#: usr/local/www/status_gateway_groups.php:123 +#: usr/local/www/status_gateways.php:118 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60 +#: usr/local/www/status_gateways.php:119 +#: usr/local/www/status_gateway_groups.php:124 +#: usr/local/www/diag_smart.php:344 +#: usr/local/www/status_gateway_groups.php:124 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60 +#: usr/local/www/status_gateways.php:119 +msgid "Offline" +msgstr "Çevrim Dışı" + +#: usr/local/www/diag_smart.php:324 usr/local/www/diag_smart.php:345 +msgid "Short" +msgstr "Kısa" + +#: usr/local/www/diag_smart.php:325 usr/local/www/diag_smart.php:346 +#: usr/local/www/diag_system_pftop.php:137 +msgid "Long" +msgstr "Uzun" + +#: usr/local/www/diag_smart.php:326 usr/local/www/diag_smart.php:347 +msgid "Conveyance (ATA Disks Only)" +msgstr "Taşıma (Sadece ATA diskler)" + +#: usr/local/www/diag_smart.php:357 usr/local/www/diag_smart.php:378 +msgid "View Logs" +msgstr "Günlükleri Görüntüle" + +#: usr/local/www/diag_smart.php:360 usr/local/www/diag_smart.php:381 +msgid "Log type" +msgstr "Günlük türü" + +#: usr/local/www/diag_smart.php:362 usr/local/www/diag_smart.php:383 +msgid "Error" +msgstr "Hata" + +#: usr/local/www/diag_smart.php:363 +msgid "Self Test" +msgstr "Kendi kendini Test" + +#: usr/local/www/diag_smart.php:394 usr/local/www/diag_smart.php:415 +msgid "Abort tests" +msgstr "Testleri durdur" + +#: usr/local/www/diag_smart.php:413 usr/local/www/diag_smart.php:434 +msgid "Do you really want to abort the test?" +msgstr "Testleri durdurmayı gerçekten istiyor musunuz?" + +#: usr/local/www/diag_smart.php:428 usr/local/www/diag_smart.php:449 +msgid "Back" +msgstr "Geri" + +#: usr/local/www/diag_states_summary.php:154 +#: usr/local/www/diag_states_summary.php:143 +#: usr/local/www/diag_states_summary.php:145 +#: usr/local/www/diag_states_summary.php:145 +msgid "Src Ports" +msgstr "Kyn Portlar" + +#: usr/local/www/diag_states_summary.php:155 +#: usr/local/www/diag_states_summary.php:144 +#: usr/local/www/diag_states_summary.php:146 +#: usr/local/www/diag_states_summary.php:146 +msgid "Dst Ports" +msgstr "Hdf Portlar" + +#: usr/local/www/diag_states_summary.php:185 +#: usr/local/www/diag_states_summary.php:174 +#: usr/local/www/diag_states_summary.php:176 +#: usr/local/www/diag_states_summary.php:176 +msgid "State Table Summary" +msgstr "Durum Tablosu Özeti" + +#: usr/local/www/diag_states_summary.php:191 +#: usr/local/www/diag_states_summary.php:180 +#: usr/local/www/diag_states_summary.php:182 +#: usr/local/www/diag_states_summary.php:182 +msgid "By Source IP" +msgstr "Kaynak IPye göre" + +#: usr/local/www/diag_states_summary.php:192 +#: usr/local/www/diag_states_summary.php:181 +#: usr/local/www/diag_states_summary.php:183 +#: usr/local/www/diag_states_summary.php:183 +msgid "By Destination IP" +msgstr "Hedef IPye göre" + +#: usr/local/www/diag_states_summary.php:193 +#: usr/local/www/diag_states_summary.php:182 +#: usr/local/www/diag_states_summary.php:184 +#: usr/local/www/diag_states_summary.php:184 +msgid "Total per IP" +msgstr "IP başı toplam" + +#: usr/local/www/diag_states_summary.php:194 +#: usr/local/www/diag_states_summary.php:183 +#: usr/local/www/diag_states_summary.php:185 +#: usr/local/www/diag_states_summary.php:185 +msgid "By IP Pair" +msgstr "IP çiftine göre" + +#: usr/local/www/diag_system_activity.php:46 +#: usr/local/www/diag_system_activity.php:46 +msgid "Diagnostics: System Activity" +msgstr "Araçlar: İşlemci Kullanımı" + +#: usr/local/www/diag_system_activity.php:101 +#: usr/local/www/diag_system_activity.php:101 +msgid "Gathering CPU activity, please wait..." +msgstr "CPU etkinlikleri toplanıyor, lütfen bekleyiniz..." + +#: usr/local/www/diag_system_pftop.php:45 +#: usr/local/www/diag_system_pftop.php:45 +msgid "Diagnostics: pfTop" +msgstr "Araçlar: pfTop" + +#: usr/local/www/diag_system_pftop.php:51 +#: usr/local/www/diag_system_pftop.php:62 +#: usr/local/www/diag_system_pftop.php:103 +msgid "bytes" +msgstr "bayt" + +#: usr/local/www/diag_system_pftop.php:99 +#: usr/local/www/diag_system_pftop.php:148 +msgid "Sort type:" +msgstr "Sıralama türü:" + +#: usr/local/www/diag_system_pftop.php:102 +msgid "age" +msgstr "süre" + +#: usr/local/www/diag_system_pftop.php:104 +msgid "dest" +msgstr "hedef" + +#: usr/local/www/diag_system_pftop.php:105 +msgid "dport" +msgstr "hport" + +#: usr/local/www/diag_system_pftop.php:106 +msgid "exp" +msgstr "dolum" + +#: usr/local/www/diag_system_pftop.php:108 +msgid "peak" +msgstr "zirve" + +#: usr/local/www/diag_system_pftop.php:109 +#, fuzzy +msgid "pkt" +msgstr "pkt" + +#: usr/local/www/diag_system_pftop.php:110 +#: usr/local/www/status_interfaces.php:365 +#: usr/local/www/status_interfaces.php:462 +#: usr/local/www/status_interfaces.php:465 +#: usr/local/www/status_interfaces.php:465 +msgid "rate" +msgstr "hız" + +#: usr/local/www/diag_system_pftop.php:111 +msgid "size" +msgstr "boyut" + +#: usr/local/www/diag_system_pftop.php:112 +msgid "sport" +msgstr "kport" + +#: usr/local/www/diag_system_pftop.php:113 +msgid "src" +msgstr "kaynak" + +#: usr/local/www/diag_system_pftop.php:126 +#: usr/local/www/diag_system_pftop.php:187 +msgid "Gathering pfTOP activity, please wait..." +msgstr "pfTop etkinlikleri toplanıyor, lütfen bekleyiniz..." + +#: usr/local/www/license.php:45 usr/local/www/license.php:45 +msgid "License" +msgstr "Lisans" + +#: usr/local/www/license.php:47 usr/local/www/license.php:47 +msgid "is Copyright" +msgstr "Telif hakkı" + +#: usr/local/www/license.php:47 usr/local/www/license.php:47 +msgid "by" +msgstr "(c)" + +#: usr/local/www/license.php:48 usr/local/www/license.php:52 +#: usr/local/www/license.php:48 usr/local/www/license.php:52 +msgid "All rights reserved" +msgstr "Tüm hakları saklıdır" + +#: usr/local/www/license.php:50 usr/local/www/license.php:50 +msgid "m0n0wall is Copyright " +msgstr "m0n0wall telif hakkı " + +#: usr/local/www/license.php:50 usr/local/www/license.php:50 +msgid "2002-2007 by Manuel Kasper" +msgstr "2002-2007 Manuel Kasper" + +#: usr/local/www/license.php:53 usr/local/www/license.php:53 +msgid "Redistribution and use in source and binary forms, with or without" +msgstr "" +"Kaynak ve ikili dosya forumlarını değişiklik, yeniden dağıtımı, kullanımı, " + +#: usr/local/www/license.php:54 usr/local/www/license.php:54 +msgid "" +"modification, are permitted provided that the following conditions are met" +msgstr "" +"düzenlemesi sadece aşağıdaki koşulların yerine getirilmesi şartı ile izin " +"verilir" + +#: usr/local/www/license.php:57 usr/local/www/license.php:57 +#, fuzzy +msgid "" +"1. Redistributions of source code must retain the above copyright notice," +msgstr "" +"1. Redistributions of source code must retain the above copyright notice," + +#: usr/local/www/license.php:59 usr/local/www/license.php:59 +#, fuzzy +msgid "this list of conditions and the following disclaimer" +msgstr "this list of conditions and the following disclaimer" + +#: usr/local/www/license.php:61 usr/local/www/license.php:61 +#, fuzzy +msgid "2. Redistributions in binary form must reproduce the above copyright" +msgstr "2. Redistributions in binary form must reproduce the above copyright" + +#: usr/local/www/license.php:62 usr/local/www/license.php:62 +#, fuzzy +msgid "notice, this list of conditions and the following disclaimer in the" +msgstr "notice, this list of conditions and the following disclaimer in the" + +#: usr/local/www/license.php:64 usr/local/www/license.php:64 +#, fuzzy +msgid "documentation and/or other materials provided with the distribution." +msgstr "documentation and/or other materials provided with the distribution." + +#: usr/local/www/license.php:66 usr/local/www/license.php:66 +msgid "THIS SOFTWARE IS PROVIDED " +msgstr "THIS SOFTWARE IS PROVIDED " + +#: usr/local/www/license.php:66 usr/local/www/license.php:66 +#, fuzzy +msgid "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES," +msgstr "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES," + +#: usr/local/www/license.php:68 usr/local/www/license.php:68 +#, fuzzy +msgid "" +"INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY" +msgstr "" +"INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY" + +#: usr/local/www/license.php:69 usr/local/www/license.php:69 +#, fuzzy +msgid "" +"AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE" +msgstr "" +"AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE" + +#: usr/local/www/license.php:71 usr/local/www/license.php:71 +#, fuzzy +msgid "" +"AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY," +msgstr "" +"AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY," + +#: usr/local/www/license.php:73 usr/local/www/license.php:73 +#, fuzzy +msgid "OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF" +msgstr "OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF" + +#: usr/local/www/license.php:75 usr/local/www/license.php:75 +#, fuzzy +msgid "" +"SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS" +msgstr "" +"SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS" + +#: usr/local/www/license.php:77 usr/local/www/license.php:77 +#, fuzzy +msgid "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN" +msgstr "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN" + +#: usr/local/www/license.php:79 usr/local/www/license.php:79 +#, fuzzy +msgid "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)" +msgstr "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)" + +#: usr/local/www/license.php:80 usr/local/www/license.php:80 +#, fuzzy +msgid "" +"ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE" +msgstr "" +"ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE" + +#: usr/local/www/license.php:82 usr/local/www/license.php:82 +#, fuzzy +msgid "POSSIBILITY OF SUCH DAMAGE" +msgstr "POSSIBILITY OF SUCH DAMAGE" + +#: usr/local/www/license.php:84 usr/local/www/license.php:84 +msgid "The following persons have contributed code to m0n0wall" +msgstr "Aşağıdaki kişiler m0n0wall'a kod katkısında bulunmuştur" + +#: usr/local/www/license.php:86 usr/local/www/license.php:86 +msgid "Diagnostics: Ping function; WLAN channel auto-select; DNS forwarder" +msgstr "Araçlar: Ping fonksiyonu; WLAN kanalı otomatik seçimi; DNS yönlendirici" + +#: usr/local/www/license.php:90 usr/local/www/license.php:90 +msgid "Timezone and NTP client support" +msgstr "Zaman dilimi ve NTP istemci desteği" + +#: usr/local/www/license.php:94 usr/local/www/license.php:94 +msgid "" +"Remote syslog'ing; some code bits for DHCP server on optional interfaces" +msgstr "" +"Uzak syslog'lama; isteğe bağlı arabirimlerde DHCP sunucu için bir miktar kod" + +#: usr/local/www/license.php:98 usr/local/www/license.php:98 +msgid "" +"Idea/code bits for encrypted webConfigurator passwords; minimalized SNMP " +"agent" +msgstr "" +"Şifrelenmiş webArayüzü parolaları için fikir ve kod parçaları; küçültülmüş " +"SNMP ajanı" + +#: usr/local/www/license.php:102 usr/local/www/license.php:102 +msgid "Advanced outbound NAT: destination selection" +msgstr "Gelişmiş dış NAT: hedef seçimi" + +#: usr/local/www/license.php:106 usr/local/www/license.php:106 +msgid "Filtering bridge patches " +msgstr "Filtreleme köprü yamaları " + +#: usr/local/www/license.php:110 usr/local/www/license.php:110 +msgid "" +"Filter rule patches (ordering, block/pass, disabled); better status page;" +msgstr "" +"Filtre kural yamaları (sıralama, engelle/izin ver, devre dışı); daha iyi " +"durum sayfası;" + +#: usr/local/www/license.php:112 usr/local/www/license.php:112 +msgid "webConfigurator assign network ports page " +msgstr "webArayüzü ağ portları atama sayfası " + +#: usr/local/www/license.php:115 usr/local/www/license.php:115 +msgid "enhanced " +msgstr "geliştirilmiş " + +#: usr/local/www/license.php:115 usr/local/www/license.php:115 +msgid "execute command" +msgstr "komut çalıştır" + +#: usr/local/www/license.php:116 usr/local/www/license.php:116 +msgid " page" +msgstr " sayfa" + +#: usr/local/www/license.php:119 usr/local/www/license.php:119 +msgid "DHCP client: send hostname patch" +msgstr "DHCP istemci: host adı yaması gönder" + +#: usr/local/www/license.php:122 usr/local/www/license.php:122 +msgid "DHCP lease list page" +msgstr "DHCP Kira Listesi sayfası" + +#: usr/local/www/license.php:125 usr/local/www/license.php:125 +msgid "type filter rules; dial-on-demand" +msgstr "tür filtre kuralları; gerektiğinde bağlan" + +#: usr/local/www/license.php:128 usr/local/www/license.php:128 +msgid "SVG-based traffic grapher" +msgstr "SVG tabanlı trafik grafiği" + +#: usr/local/www/license.php:131 usr/local/www/license.php:131 +msgid "per-user IP address assignments for PPTP VPN" +msgstr "PPTP-VPN için kulanıcı bazlı IP ataması" + +#: usr/local/www/license.php:134 usr/local/www/license.php:134 +msgid "NAT on optional interfaces" +msgstr "Opsiyonel Arabirim NAT" + +#: usr/local/www/license.php:137 usr/local/www/license.php:137 +msgid "captive portal: pass-through MAC/IP addresses, RADIUS authentication" +msgstr "Hizmet Portalı: İzinli Mac / IP adresler, RADIUS kimlik doğrulama." + +#: usr/local/www/license.php:137 usr/local/www/license.php:137 +msgid "accounting;" +msgstr "hesaplandırma;" + +#: usr/local/www/license.php:138 usr/local/www/license.php:138 +msgid "HTTP server concurrency limit" +msgstr "HTTP sunucu eş zamanlı kullanım limiti" + +#: usr/local/www/license.php:141 usr/local/www/license.php:141 +msgid "traffic shaper TOS matching; magic shaper; DHCP deny unknown clients;" +msgstr "" +"trafik şekillendirici TOS eşleme; sihirli şekillendirici; DHCP bilinmeyen " +"istemcileri reddet;" + +#: usr/local/www/license.php:142 usr/local/www/license.php:142 +msgid "IPsec user FQDNs; DHCP relay" +msgstr "IPsec kullanıcı FQDN'leri; DHCP aktarım" + +#: usr/local/www/license.php:145 usr/local/www/license.php:145 +msgid "IDE hard disk standby" +msgstr "IDE sabit disk bekleme" + +#: usr/local/www/license.php:148 usr/local/www/license.php:148 +msgid "CPU/memory usage display" +msgstr "CPU/Hafıza kullanım görünümü" + +#: usr/local/www/license.php:151 usr/local/www/license.php:151 +msgid "OpenVPN support" +msgstr "OpenVPN Desteği" + +#: usr/local/www/license.php:153 usr/local/www/license.php:153 +msgid "is based upon/includes various free software packages, listed below." +msgstr "" +"temel içerik/üzerine çeşitli ücretsiz yazılım paketleri, aşağıda " +"listelenmiştir." + +#: usr/local/www/license.php:155 usr/local/www/license.php:155 +#, php-format +msgid "" +"The author of %s would like to thank the authors of these software packages " +"for their efforts" +msgstr "" +"%s yazarları şu yazılım paketlerinin yazarlarına teşekkürü bir borç bilir" + +#: usr/local/www/license.php:158 usr/local/www/license.php:161 +#: usr/local/www/license.php:164 usr/local/www/license.php:168 +#: usr/local/www/license.php:174 usr/local/www/license.php:178 +#: usr/local/www/license.php:181 usr/local/www/license.php:184 +#: usr/local/www/license.php:187 usr/local/www/license.php:191 +#: usr/local/www/license.php:192 usr/local/www/license.php:194 +#: usr/local/www/license.php:200 usr/local/www/license.php:201 +#: usr/local/www/license.php:204 usr/local/www/license.php:211 +#: usr/local/www/license.php:158 usr/local/www/license.php:161 +#: usr/local/www/license.php:164 usr/local/www/license.php:168 +#: usr/local/www/license.php:169 usr/local/www/license.php:174 +#: usr/local/www/license.php:178 usr/local/www/license.php:181 +#: usr/local/www/license.php:184 usr/local/www/license.php:187 +#: usr/local/www/license.php:191 usr/local/www/license.php:192 +#: usr/local/www/license.php:194 usr/local/www/license.php:200 +#: usr/local/www/license.php:201 usr/local/www/license.php:204 +#: usr/local/www/license.php:211 +msgid "Copyright" +msgstr "Telif hakkı" + +#: usr/local/www/license.php:158 +msgid " 1994-2003 FreeBSD, Inc. All rights reserved" +msgstr " 1994-2003 FreeBSD, Inc. Her hakkı saklıdır" + +#: usr/local/www/license.php:160 usr/local/www/license.php:160 +msgid "This product includes PHP, freely available from" +msgstr "Bu ürün PHP içerir, ücretsiz olarak" + +#: usr/local/www/license.php:161 +msgid "1999 - 2003 The PHP Group. All rights reserved" +msgstr "1999 - 2003 The PHP Group. Her hakkı saklıdır" + +#: usr/local/www/license.php:163 usr/local/www/license.php:163 +#, fuzzy +msgid "LightTPD" +msgstr "LightTPD" + +#: usr/local/www/license.php:164 +msgid " 2004 by Jan Kneschke " +msgstr " 2004 Jan Kneschke " + +#: usr/local/www/license.php:165 usr/local/www/license.php:175 +#: usr/local/www/license.php:165 usr/local/www/license.php:175 +msgid "All rights reserved." +msgstr "Her hakkı saklıdır." + +#: usr/local/www/license.php:167 usr/local/www/license.php:167 +msgid "ISC DHCP server " +msgstr "ISC DHCP sunucu " + +#: usr/local/www/license.php:168 +msgid "1996-2003 Internet Software Consortium. All rights reserved." +msgstr "1996-2003 Internet Software Consortium. Her hakkı saklıdır." + +#: usr/local/www/license.php:173 usr/local/www/license.php:173 +msgid "MPD - Multi-link PPP daemon for FreeBSD" +msgstr "MPD - FreeBSD çoklu bağlantı PPP servisi" + +#: usr/local/www/license.php:177 usr/local/www/license.php:177 +msgid "Circular log support for FreeBSD syslogd " +msgstr "FreeBSD syslogd dairesel günlük desteği " + +#: usr/local/www/license.php:180 usr/local/www/license.php:180 +msgid "Dnsmasq - a DNS forwarder for NAT firewalls" +msgstr "Dnsmasq - NAT güvenlik duvarları için DNS yönlendirici" + +#: usr/local/www/license.php:183 usr/local/www/license.php:183 +#, fuzzy +msgid "Racoon" +msgstr "Racoon" + +#: usr/local/www/license.php:184 usr/local/www/license.php:184 +msgid "1995-2002 WIDE Project. All rights reserved." +msgstr "1995-2002 WIDE Project. Her hakkı saklıdır." + +#: usr/local/www/license.php:186 usr/local/www/license.php:186 +#, fuzzy +msgid "msntp" +msgstr "msntp" + +#: usr/local/www/license.php:187 usr/local/www/license.php:187 +msgid "" +" 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. All rights " +"reserved." +msgstr "" +" 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. Her hakkı " +"saklıdır." + +#: usr/local/www/license.php:190 usr/local/www/license.php:190 +msgid "UCD-SNMP" +msgstr "UCD-SNMP" + +#: usr/local/www/license.php:191 usr/local/www/license.php:191 +msgid "1989, 1991, 1992 by Carnegie Mellon University." +msgstr "1989, 1991, 1992 Carnegie Mellon University." + +#: usr/local/www/license.php:192 usr/local/www/license.php:192 +msgid "" +"1996, 1998-2000 The Regents of the University of California. All rights " +"reserved" +msgstr "" +"1996, 1998-2000 University of California İdare Meclisi. Her hakkı saklıdır" + +#: usr/local/www/license.php:194 usr/local/www/license.php:194 +msgid "2001-2002, Network Associates Technology, Inc. All rights reserved." +msgstr "2001-2002, Network Associates Technology, Inc. Her hakkı saklıdır." + +#: usr/local/www/license.php:196 usr/local/www/license.php:196 +msgid "Portions of this code are copyright" +msgstr "Kodun bir kısmının hakları" + +#: usr/local/www/license.php:196 usr/local/www/license.php:196 +msgid "2001-2002, Cambridge Broadband Ltd. All rights reserved." +msgstr "2001-2002, Cambridge Broadband Ltd. Her hakkı saklıdır." + +#: usr/local/www/license.php:199 usr/local/www/license.php:199 +#, fuzzy +msgid "choparp" +msgstr "choparp" + +#: usr/local/www/license.php:203 usr/local/www/license.php:203 +#, fuzzy +msgid "BPALogin" +msgstr "BPALogin" + +#: usr/local/www/license.php:203 usr/local/www/license.php:203 +msgid "lightweight portable BIDS2 login client" +msgstr "hafif ve taşınabilir BIDS2 oturum açma istemcisi" + +#: usr/local/www/license.php:204 usr/local/www/license.php:204 +msgid " 2001-3 Shane Hyde, and others." +msgstr " 2001-3 Shane Hyde, vd." + +#: usr/local/www/license.php:206 usr/local/www/license.php:206 +#, fuzzy +msgid "php-radius" +msgstr "php-radius" + +#: usr/local/www/license.php:207 usr/local/www/license.php:207 +msgid "Copyright 2000, 2001, 2002 by Edwin Groothuis. All rights reserved." +msgstr "Telif hakkı 2000, 2001, 2002 Edwin Groothuis. Her hakkı saklıdır." + +#: usr/local/www/license.php:208 usr/local/www/license.php:208 +msgid "This product includes software developed by Edwin Groothuis." +msgstr "Bu ürün Edwin Groothuis tarafından geliştirilmiş yazılım içerir." + +#: usr/local/www/license.php:210 usr/local/www/license.php:210 +#, fuzzy +msgid "wol" +msgstr "wol" + +#: usr/local/www/license.php:214 usr/local/www/license.php:214 +#, fuzzy +msgid "Copyright (C) 2002-2005 OpenVPN Solutions LLC " +msgstr "Copyright (C) 2002-2005 OpenVPN Solutions LLC " + +#: usr/local/www/load_balancer_pool.php:72 +#: usr/local/www/load_balancer_relay_protocol.php:71 +#: usr/local/www/load_balancer_relay_protocol.php:71 +#: usr/local/www/load_balancer_pool.php:72 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"virtual server." +msgstr "En az bir sanal sunucuda kullanıldığından bu girdi silinemez." + +#: usr/local/www/load_balancer_pool.php:111 +#: usr/local/www/status_lb_pool.php:113 +#: usr/local/www/load_balancer_pool.php:109 +#: usr/local/www/status_lb_pool.php:113 +#: usr/local/www/load_balancer_pool.php:109 +#, php-format +msgid "" +"The load balancer configuration has been changed%sYou must apply the changes " +"in order for them to take effect." +msgstr "" +"Yük Dengeleme yapılandırması değiştirilmiştir%sDeğişiklikleri uygulayarak " +"etkin hale gelmelerini sağlayabilirsiniz." + +#: usr/local/www/load_balancer_pool.php:133 +#: usr/local/www/status_lb_pool.php:132 usr/local/www/status_lb_vs.php:79 +#: usr/local/www/system_authservers.php:424 +#: usr/local/www/system_groupmanager.php:243 +#: usr/local/www/system_groupmanager_addprivs.php:171 +#: usr/local/www/system_usermanager.php:443 +#: usr/local/www/system_usermanager_addprivs.php:170 +#: usr/local/www/system_usermanager_settings.php:116 +#: usr/local/www/system_usermanager.php:441 +#: usr/local/www/system_groupmanager_addprivs.php:169 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/load_balancer_pool.php:132 +#: usr/local/www/system_authservers.php:429 +#: usr/local/www/system_groupmanager.php:243 +#: usr/local/www/system_usermanager_addprivs.php:170 +#: usr/local/www/status_lb_pool.php:132 +#: usr/local/www/load_balancer_pool.php:132 +#: usr/local/www/system_authservers.php:436 +#: usr/local/www/system_groupmanager_addprivs.php:169 +#: usr/local/www/system_usermanager_settings.php:116 +#: usr/local/www/system_usermanager.php:441 usr/local/www/status_lb_vs.php:79 +msgid "Servers" +msgstr "Sunucular" + +#: usr/local/www/load_balancer_pool.php:135 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:223 +#: usr/local/www/status_gateways.php:74 usr/local/www/status_lb_pool.php:133 +#: usr/local/www/load_balancer_pool_edit.php:240 +#: usr/local/www/load_balancer_pool.php:136 +#: usr/local/www/status_gateways.php:75 +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/status_lb_pool.php:133 +#: usr/local/www/load_balancer_pool.php:134 +#: usr/local/www/load_balancer_monitor_edit.php:193 +#: usr/local/www/load_balancer_monitor.php:88 +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/status_gateways.php:75 +msgid "Monitor" +msgstr "İzle" + +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/load_balancer_pool.php:150 +#: usr/local/www/load_balancer_pool.php:148 +#: usr/local/www/load_balancer_pool.php:148 +#, php-format +msgid "" +"The Load Balancer in %s 2.0 is for server load balancing, not Multi-WAN. For " +"load balancing or failover for multiple WANs, use " +msgstr "" +"Bu Yük Dengeleyici %s 2.0 sunucu yük dengeleyicisi için, birden fazla WAN " +"için değil. Eğer yükaktarma için birden fazla WAN kullanımında Yük " +"Dengeleyici olarak kullanmak istiyorsanız sağdaki link'e tıklayınız " + +#: usr/local/www/load_balancer_pool.php:150 +#: usr/local/www/status_gateway_groups.php:48 +#: usr/local/www/status_gateway_groups.php:52 +#: usr/local/www/status_gateways.php:63 +#: usr/local/www/system_gateway_groups.php:52 +#: usr/local/www/system_gateway_groups.php:88 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/load_balancer_pool.php:151 +#: usr/local/www/system_gateway_groups.php:89 +#: usr/local/www/status_gateways.php:64 +#: usr/local/www/status_gateway_groups.php:66 +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/load_balancer_pool.php:149 +#: usr/local/www/status_gateway_groups.php:48 +#: usr/local/www/status_gateway_groups.php:52 +#: usr/local/www/status_gateway_groups.php:66 +#: usr/local/www/status_gateways.php:64 +#: usr/local/www/system_gateway_groups.php:52 +#: usr/local/www/system_gateway_groups.php:89 +msgid "Gateway Groups" +msgstr "Ağ Geçidi Grupları" + +#: usr/local/www/pkg.php:358 usr/local/www/pkg.php:456 +#: usr/local/www/pkg.php:456 +msgid "Do you really want to delete this item?" +msgstr "Bu öğeyi silmek istediğinize emin misiniz?" + +#: usr/local/www/status_wireless.php:83 usr/local/www/status_wireless.php:84 +#: usr/local/www/status_wireless.php:84 +msgid "" +"Rescan has been initiated in the background. Refresh this page in 10 seconds " +"to see the results." +msgstr "" +"Tekrar tarama işlemi arkaplanda başlatılmıştır. Sonuçları görmek için bu " +"sayfayı 10 sn içinde yenileyiniz." + +#: usr/local/www/status_wireless.php:97 usr/local/www/status_wireless.php:93 +#: usr/local/www/status_wireless.php:94 usr/local/www/status_wireless.php:94 +msgid "Nearby access points or ad-hoc peers" +msgstr "Yakın erişim noktaları ve uçtan uca eşleri" + +#: usr/local/www/status_wireless.php:143 usr/local/www/status_wireless.php:140 +#: usr/local/www/status_wireless.php:141 usr/local/www/status_wireless.php:141 +msgid "Associated or ad-hoc peers" +msgstr "İlişkilendirilmiş (ad-hoc) eşleri" + +#: usr/local/www/system.php:118 usr/local/www/system.php:119 +#: usr/local/www/system.php:112 usr/local/www/system.php:112 +msgid "The hostname may only contain the characters a-z, 0-9 and '-'." +msgstr "Host adı sadece İngilizce a-z, 0-9 ve '-' karakterlerini içerebilir." + +#: usr/local/www/system.php:121 usr/local/www/system.php:122 +#: usr/local/www/system.php:115 usr/local/www/system.php:115 +msgid "The domain may only contain the characters a-z, 0-9, '-' and '.'." +msgstr "" +"Alan adı sadece İngilizcede a-z, 0-9, '-' ve '.' karakterlerini içerebilir." + +#: usr/local/www/system.php:131 +msgid "'." +msgstr "'." + +#: usr/local/www/system.php:137 usr/local/www/system.php:143 +#: usr/local/www/system.php:136 usr/local/www/system.php:136 +msgid "A valid TCP/IP port must be specified for the webConfigurator port." +msgstr "webArayüzü için geçerli br TCP/IP portu belirtilmelidir." + +#: usr/local/www/system.php:148 usr/local/www/system.php:154 +#: usr/local/www/system.php:147 usr/local/www/system.php:147 +#, php-format +msgid "" +"You can not assign a gateway to DNS '%s' server which is on a directly " +"connected network." +msgstr "Doğrudan bağlı bir ağ da %s DNS sunucusu için ağ geçidi atayamazsınız." + +#: usr/local/www/system.php:157 usr/local/www/system.php:163 +#: usr/local/www/system.php:156 usr/local/www/system.php:156 +msgid "" +"The time update interval must be either 0 (disabled) or between 6 and 1440." +msgstr "" +"Zaman güncelleme aralığı 0 (devre dışı) ya da 6 ile 1140 arasında bir " +"tamsayı olmalıdır." + +#: usr/local/www/system.php:161 usr/local/www/system.php:167 +#: usr/local/www/system.php:160 usr/local/www/system.php:160 +msgid "" +"A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'." +msgstr "" +"NTP Zaman sunucusu İngilizce a-z,0-9, '-' ve '.' karakterleri içerebilir." + +#: usr/local/www/system.php:231 usr/local/www/fbegin.inc:85 +#: usr/local/www/fbegin.inc:101 usr/local/www/system.php:242 +#: usr/local/www/fbegin.inc:110 usr/local/www/system.php:235 +#: usr/local/www/system.php:235 usr/local/www/fbegin.inc:102 +msgid "General Setup" +msgstr "Genel Ayarlar" + +#: usr/local/www/system.php:258 usr/local/www/system.php:269 +#: usr/local/www/system.php:262 usr/local/www/system.php:262 +msgid "Name of the firewall host, without domain part" +msgstr "Güvenlik duvarı sistemin adı, alan adı olmadan" + +#: usr/local/www/system.php:269 usr/local/www/system.php:280 +#: usr/local/www/system.php:273 usr/local/www/system.php:273 +msgid "" +"Do not use 'local' as a domain name. It will cause local hosts running mDNS " +"(avahi, bonjour, etc.) to be unable to resolve local hosts not running mDNS." +msgstr "" +"Alan adı olarak 'local' kullanmayın. mDNS çalıştıran yerel sunucuların " +"(avahi, bonjour vb.) mDNS çalıştırmayan yerel sunucuları bulmasını engeller." + +#: usr/local/www/system.php:271 usr/local/www/system.php:282 +#: usr/local/www/system.php:275 usr/local/www/system.php:275 +msgid "mycorp.com, home, office, private, etc." +msgstr "firmam.com, ev, ofis, ozel vb." + +#: usr/local/www/system.php:276 usr/local/www/services_dhcp.php:647 +#: usr/local/www/vpn_pppoe_edit.php:451 usr/local/www/services_dhcpv6.php:590 +#: usr/local/www/services_dhcp.php:660 usr/local/www/system.php:287 +#: usr/local/www/services_dhcpv6.php:667 usr/local/www/vpn_pppoe_edit.php:452 +#: usr/local/www/services_router_advertisements.php:372 +#: usr/local/www/services_dhcp.php:836 usr/local/www/system.php:280 +#: usr/local/www/services_dhcpv6.php:598 +#: usr/local/www/services_router_advertisements.php:372 +#: usr/local/www/system.php:280 usr/local/www/services_dhcp_edit.php:402 +#: usr/local/www/vpn_pppoe_edit.php:455 usr/local/www/services_dhcp.php:850 +#: usr/local/www/services_dhcpv6.php:615 +msgid "DNS servers" +msgstr "DNS sunucular" + +#: usr/local/www/system.php:281 usr/local/www/system.php:292 +#: usr/local/www/system.php:285 usr/local/www/system.php:285 +msgid "DNS Server" +msgstr "DNS Sunucu" + +#: usr/local/www/system.php:283 usr/local/www/system.php:294 +#: usr/local/www/system.php:287 usr/local/www/system.php:287 +msgid "Use gateway" +msgstr "Ağ geçidi kullan" + +#: usr/local/www/system.php:331 usr/local/www/system.php:342 +#: usr/local/www/system.php:335 usr/local/www/system.php:335 +msgid "" +"Enter IP addresses to by used by the system for DNS resolution.These are " +"also used for the DHCP service, DNS forwarder and for PPTP VPN clients." +msgstr "" +"DNS çözümleme için sistemin kullanacağı IP adreslerini girin. Bu IPler DHCP " +"servisi, DNS yönlendirme ve PPTP VPN istemciler için de kullanılırlar." + +#: usr/local/www/system.php:336 usr/local/www/system.php:347 +#: usr/local/www/system.php:340 usr/local/www/system.php:340 +msgid "" +"In addition, optionally select the gateway for each DNS server. When using " +"multiple WAN connections there should be at least one unique DNS server per " +"gateway." +msgstr "" +"Ek olarak her DNS sunucunun ağ geçidini seçin. Birden fazla WAN bağlantısı " +"kullanırken her ağ geçidi için en az bir benzersiz DNS sunucu " +"tanımlamalısınız." + +#: usr/local/www/system.php:343 usr/local/www/system.php:354 +#: usr/local/www/system.php:347 usr/local/www/system.php:347 +msgid "Allow DNS server list to be overridden by DHCP/PPP on WAN" +msgstr "" +"WAN üzerinde DHCP/PPP tarafından DNS sunucu listesinin üzerine yazılmasına " +"izin ver" + +#: usr/local/www/system.php:346 usr/local/www/system.php:357 +#: usr/local/www/system.php:350 usr/local/www/system.php:350 +#, php-format +msgid "" +"If this option is set, %s will use DNS servers assigned by a DHCP/PPP server " +"on WAN for its own purposes (including the DNS forwarder). However, they " +"will not be assigned to DHCP and PPTP VPN clients." +msgstr "" +"Bu seçenek açıldığında %s kendi işleri için WAN üzerinde DHCP/PPP sunucu " +"tarafından atanan DNS sunucularını kullanır. Ancak, DHCP ve PPTP VPN " +"istemcilerine atanmazlar." + +#: usr/local/www/system.php:355 usr/local/www/system.php:366 +#: usr/local/www/system.php:359 usr/local/www/system.php:359 +msgid "Do not use the DNS Forwarder as a DNS server for the firewall" +msgstr "DNS yönlendiriciyi güvenlik duvarı için DNS sunucu olarak kullanma" + +#: usr/local/www/system.php:358 usr/local/www/system.php:369 +#: usr/local/www/system.php:362 usr/local/www/system.php:362 +msgid "" +"By default localhost (127.0.0.1) will be used as the first DNS server where " +"the DNS forwarder is enabled, so system can use the DNS forwarder to perform " +"lookups. Checking this box omits localhost from the list of DNS servers." +msgstr "" +"Öntanımlı olarak, DNS yönlendirici etkinleştirildiyse, DNS yönlendiricinin " +"isim çözümleyebilmesi için, localhost (127.0.0.1) ilk DNS sunucu olarak " +"kullanılır. Bu kutuyu işaretlerseniz localhost DNS sunuculara yazılmaz." + +#: usr/local/www/system.php:365 usr/local/www/system.php:376 +#: usr/local/www/system.php:369 usr/local/www/system.php:369 +msgid "Time zone" +msgstr "Zaman dilimi" + +#: usr/local/www/system.php:377 usr/local/www/system.php:388 +#: usr/local/www/system.php:381 usr/local/www/system.php:381 +msgid "Select the location closest to you" +msgstr "Size en yakın konumu seçiniz" + +#: usr/local/www/system.php:395 usr/local/www/system.php:406 +#: usr/local/www/system.php:399 usr/local/www/system.php:399 +msgid "NTP time server" +msgstr "NTP zaman sunucusu" + +#: usr/local/www/system.php:400 usr/local/www/system.php:411 +#: usr/local/www/system.php:404 usr/local/www/system.php:404 +msgid "" +"Use a space to separate multiple hosts (only one required). Remember to set " +"up at least one DNS server if you enter a host name here!" +msgstr "" +"Bir tane yeterlidir ama birden fazla girecekseniz aralarına bir boşluk " +"bırakın. Eğer burada bir adres girerseniz en az bir DNS sunucu girmeyi " +"unutmamalısınız!" + +#: usr/local/www/system.php:411 usr/local/www/system.php:440 +#: usr/local/www/system.php:433 usr/local/www/system.php:433 +msgid "Theme" +msgstr "Tema" + +#: usr/local/www/system.php:435 usr/local/www/system.php:464 +#: usr/local/www/system.php:457 usr/local/www/system.php:457 +msgid "This will change the look and feel of" +msgstr "Görünümü değiştirerek hissedeceksiniz" + +#: usr/local/www/interfaces_vlan.php:65 usr/local/www/interfaces_vlan.php:69 +msgid "" +"This VLAN cannot be deleted because it is still being used as an interface." +msgstr "Bu VLAN bir arabirim olarak kullanıldığından silinemez." + +#: usr/local/www/interfaces_vlan.php:78 +#: usr/local/www/interfaces_vlan_edit.php:139 +#: usr/local/www/interfaces_vlan_edit.php:142 +#: usr/local/www/interfaces_vlan.php:84 +msgid "VLAN" +msgstr "VLAN" + +#: usr/local/www/interfaces_vlan.php:109 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan.php:110 +#: usr/local/www/interfaces_vlan_edit.php:75 +#: usr/local/www/interfaces_vlan.php:116 +msgid "VLAN tag" +msgstr "VLAN başlığı" + +#: usr/local/www/interfaces_vlan.php:125 usr/local/www/interfaces_vlan.php:126 +#: usr/local/www/interfaces_vlan.php:132 +msgid "Do you really want to delete this VLAN?" +msgstr "Bu VLANı silmek istediğinize emin misiniz?" + +#: usr/local/www/interfaces_vlan.php:136 usr/local/www/interfaces_vlan.php:137 +#: usr/local/www/interfaces_vlan.php:143 +#, php-format +msgid "" +"Not all drivers/NICs support 802.1Q VLAN tagging properly. On cards that do " +"not explicitly support it, VLAN tagging will still work, but the reduced MTU " +"may cause problems. See the %s handbook for information on supported cards." +msgstr "" +"Tüm sürücüler ve NICler 802.1q VLAN başlıklarını desteklemez. Özel olarak " +"desteklediği belirtilmeyen kartlarda VLAN başlıklama yine de çalışır, ama " +"düşen MTU değeri problem çıkarabilir. Desteklenen kartlar için %s El " +"Kitabına bakın." + +#: usr/local/www/interfaces_vlan_edit.php:80 +#: usr/local/www/interfaces_vlan_edit.php:80 +msgid "The VLAN tag must be an integer between 1 and 4094." +msgstr "VLAN başlığı ile 4094 arasında bir tamsayı olmalıdır." + +#: usr/local/www/interfaces_vlan_edit.php:88 +#: usr/local/www/interfaces_vlan_edit.php:91 +#, php-format +msgid "A VLAN with the tag %s is already defined on this interface." +msgstr "%s başlığa sahip VLAN bu arabirimde tanımlanmış durumda." + +#: usr/local/www/interfaces_vlan_edit.php:95 +#: usr/local/www/interfaces_vlan_edit.php:98 +msgid "A QinQ VLAN exists with this tag please remove it to use this tag with." +msgstr "" +"Bu başlığa sahip bir QinQ VLAN zaten var, lütfen bu takıyı kullanmak için " +"önce onu silin." + +#: usr/local/www/interfaces_vlan_edit.php:150 +#: usr/local/www/interfaces_vlan_edit.php:151 +#: usr/local/www/interfaces_vlan_edit.php:154 +msgid "VLAN configuration" +msgstr "VLAN yapılandırması" + +#: usr/local/www/interfaces_vlan_edit.php:169 +#: usr/local/www/interfaces_vlan_edit.php:170 +#: usr/local/www/interfaces_vlan_edit.php:173 +msgid "Only VLAN capable interfaces will be shown." +msgstr "Sadece VLAN uyumlu arabirimler görüntülenir." + +#: usr/local/www/interfaces_vlan_edit.php:172 +#: usr/local/www/interfaces_vlan_edit.php:173 +#: usr/local/www/interfaces_vlan_edit.php:176 +msgid "VLAN tag " +msgstr "VLAN başlığı " + +#: usr/local/www/interfaces_vlan_edit.php:176 +#: usr/local/www/interfaces_vlan_edit.php:177 +#: usr/local/www/interfaces_vlan_edit.php:180 +msgid "802.1Q VLAN tag (between 1 and 4094) " +msgstr "802.1q VLAN başlığı (1 ile 4094 arasında) " + +#: usr/local/www/system_firmware.php:82 usr/local/www/system_firmware.php:89 +#: usr/local/www/system_firmware.php:88 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini" +msgstr "Yüklenen dosya php.ini upload_max_filesize yönergesini aşıyor" + +#: usr/local/www/system_firmware.php:84 usr/local/www/system_firmware.php:91 +#: usr/local/www/system_firmware.php:90 +msgid "" +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " +"the HTML form" +msgstr "Yüklenen dosya HTML de belirtilen MAX_FILE_SIZE ' yi aşıyor" + +#: usr/local/www/system_firmware.php:86 usr/local/www/system_firmware.php:93 +#: usr/local/www/system_firmware.php:92 +msgid "The uploaded file was only partially uploaded" +msgstr "Yüklenen dosya sadece kısmen yüklendi" + +#: usr/local/www/system_firmware.php:88 usr/local/www/system_firmware.php:95 +#: usr/local/www/system_firmware.php:94 +msgid "No file was uploaded" +msgstr "Yüklenen dosya yok" + +#: usr/local/www/system_firmware.php:90 usr/local/www/system_firmware.php:97 +#: usr/local/www/system_firmware.php:96 +msgid "Missing a temporary folder" +msgstr "Kayıp geçici klasör" + +#: usr/local/www/system_firmware.php:92 usr/local/www/system_firmware.php:99 +#: usr/local/www/system_firmware.php:98 +msgid "Failed to write file to disk" +msgstr "Disk e dosya yazma başarısız" + +#: usr/local/www/system_firmware.php:94 usr/local/www/system_firmware.php:101 +#: usr/local/www/system_firmware.php:100 +msgid "File upload stopped by extension" +msgstr "Dosya yüklemesi uzantı tarafından durduruldu" + +#: usr/local/www/system_firmware.php:96 usr/local/www/system_firmware.php:103 +#: usr/local/www/system_firmware.php:102 +msgid "Unknown upload error" +msgstr "Bilinmeyen yükleme hatası" + +#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_settings.php:74 usr/local/www/fbegin.inc:84 +#: usr/local/www/fbegin.inc:100 usr/local/www/fbegin.inc:109 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:210 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_settings.php:79 +#: usr/local/www/system_firmware_auto.php:60 usr/local/www/fbegin.inc:101 +msgid "Firmware" +msgstr "Üretici yazılımı" + +#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:238 +#: usr/local/www/system_firmware_auto.php:79 +#: usr/local/www/system_firmware_check.php:66 +#: usr/local/www/system_firmware_settings.php:110 +#: usr/local/www/system_firmware_restorefullbackup.php:125 +#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:245 +#: usr/local/www/system_firmware_settings.php:115 +#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:248 +#: usr/local/www/system_firmware_check.php:66 +#: usr/local/www/system_firmware_settings.php:115 +#: usr/local/www/system_firmware_auto.php:79 +#: usr/local/www/system_firmware_restorefullbackup.php:125 +msgid "Manual Update" +msgstr "Elle Güncelleme" + +#: usr/local/www/system_firmware.php:107 usr/local/www/system_firmware.php:114 +#: usr/local/www/system_firmware.php:113 +msgid "" +"An upgrade is currently in progress.

    The firewall will reboot when the " +"operation is complete." +msgstr "" +"Güncelleme işlemi devam etmekte.

    Güvenlik Duvarı işlem bittikten sonra " +"yeniden başlayacak." + +#: usr/local/www/system_firmware.php:135 usr/local/www/system_firmware.php:142 +#: usr/local/www/system_firmware.php:137 +msgid "Upgrade" +msgstr "Yükselt" + +#: usr/local/www/system_firmware.php:154 usr/local/www/system_firmware.php:161 +#: usr/local/www/system_firmware.php:156 +msgid "The uploaded image file is not for this platform." +msgstr "Yüklenen imaj dosyası bu platform için değil." + +#: usr/local/www/system_firmware.php:157 usr/local/www/system_firmware.php:164 +#: usr/local/www/system_firmware.php:159 +msgid "Image upload failed (out of memory?)" +msgstr "İmaj yüklemesi başarısız (bellek yetersizliği?)" + +#: usr/local/www/system_firmware.php:168 +#: usr/local/www/system_firmware_auto.php:201 +#: usr/local/www/system_firmware.php:175 usr/local/www/system_firmware.php:170 +#: usr/local/www/system_firmware_auto.php:203 +msgid "The digital signature on this image is invalid." +msgstr "İmajın dijital imzası geçerli değil." + +#: usr/local/www/system_firmware.php:170 +#: usr/local/www/system_firmware_auto.php:204 +#: usr/local/www/system_firmware.php:177 usr/local/www/system_firmware.php:172 +#: usr/local/www/system_firmware_auto.php:206 +msgid "This image is not digitally signed." +msgstr "İmaj dijital olarak imzalanmamış." + +#: usr/local/www/system_firmware.php:172 +#: usr/local/www/system_firmware_auto.php:208 +#: usr/local/www/system_firmware.php:179 usr/local/www/system_firmware.php:174 +#: usr/local/www/system_firmware_auto.php:210 +msgid "There has been an error verifying the signature on this image." +msgstr "İmaj imzasının doğrulanması sırasında hata oluştu." + +#: usr/local/www/system_firmware.php:175 +#: usr/local/www/system_firmware_auto.php:223 +#: usr/local/www/system_firmware.php:182 usr/local/www/system_firmware.php:177 +#: usr/local/www/system_firmware_auto.php:225 +msgid "The image file is corrupt." +msgstr "Belirtilen imaj dosyası bozuk." + +#: usr/local/www/system_firmware.php:188 usr/local/www/system_firmware.php:195 +#: usr/local/www/system_firmware.php:190 +msgid "" +"The firmware is now being updated. The firewall will reboot automatically." +msgstr "" +"Üretici yazılımı şimdi yükleniyor. Güvenlik Duvarı otomatik olarak yeniden " +"başlayacak." + +#: usr/local/www/system_firmware.php:196 usr/local/www/system_firmware.php:203 +#: usr/local/www/system_firmware.php:204 +#, php-format +msgid "Firmware image missing or other error, please try again %s." +msgstr "Üretici yazılımı imajı kayıp yada diğer hata, lütfen tekrar deneyin %s." + +#: usr/local/www/system_firmware.php:220 usr/local/www/system_firmware.php:227 +#: usr/local/www/system_firmware.php:230 +msgid "" +"This means that the image you uploaded is not an official/supported image " +"and may lead to unexpected behavior or security compromises. Only install " +"images that come from sources that you trust, and make sure that the image " +"has not been tampered with." +msgstr "" +"Yüklediğiniz imaj orjinal ya da desteklenen bir imaj değil bunun uygulanması " +"sistemde hata ve güvenlik sorunlarına yol açabilir. Kaynak dosyası " +"değiştirilmiş tahrib edilmiş imajları yüklemekten kaçının sadece güvenilir " +"kaynaklardan gelen imajları yükleyin." + +#: usr/local/www/system_firmware.php:224 usr/local/www/system_firmware.php:231 +#: usr/local/www/system_firmware.php:234 +msgid "Do you want to install this image anyway (on your own risk)?" +msgstr "Yine de bu imajı kurmak istermisiniz (risk size ait)?" + +#: usr/local/www/system_firmware.php:239 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/system_firmware_auto.php:80 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_check.php:67 +#: usr/local/www/system_firmware_settings.php:111 +#: usr/local/www/system_firmware_restorefullbackup.php:126 +#: usr/local/www/system_firmware.php:246 +#: usr/local/www/system_firmware_settings.php:116 +#: usr/local/www/system_firmware.php:249 +#: usr/local/www/system_firmware_check.php:49 +#: usr/local/www/system_firmware_check.php:67 +#: usr/local/www/system_firmware_settings.php:116 +#: usr/local/www/system_firmware_auto.php:60 +#: usr/local/www/system_firmware_auto.php:80 +#: usr/local/www/system_firmware_restorefullbackup.php:126 +msgid "Auto Update" +msgstr "Otomatik Güncelle" + +#: usr/local/www/system_firmware.php:240 +#: usr/local/www/system_firmware_auto.php:81 +#: usr/local/www/system_firmware_check.php:68 +#: usr/local/www/system_firmware_settings.php:112 +#: usr/local/www/system_firmware_restorefullbackup.php:127 +#: usr/local/www/system_firmware.php:247 +#: usr/local/www/system_firmware_settings.php:117 +#: usr/local/www/system_firmware.php:250 +#: usr/local/www/system_firmware_check.php:68 +#: usr/local/www/system_firmware_settings.php:117 +#: usr/local/www/system_firmware_auto.php:81 +#: usr/local/www/system_firmware_restorefullbackup.php:127 +msgid "Updater Settings" +msgstr "Güncelleme Ayarları" + +#: usr/local/www/system_firmware.php:242 +#: usr/local/www/system_firmware_auto.php:83 +#: usr/local/www/system_firmware_check.php:70 +#: usr/local/www/system_firmware_settings.php:114 +#: usr/local/www/system_firmware_restorefullbackup.php:129 +#: usr/local/www/system_firmware.php:249 +#: usr/local/www/system_firmware_settings.php:119 +#: usr/local/www/system_firmware.php:252 +#: usr/local/www/system_firmware_check.php:70 +#: usr/local/www/system_firmware_settings.php:119 +#: usr/local/www/system_firmware_auto.php:83 +#: usr/local/www/system_firmware_restorefullbackup.php:129 +msgid "Restore Full Backup" +msgstr "Tam Yedeğe Geri Dön" + +#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259 +#: usr/local/www/system_firmware.php:262 +msgid "Invoke" +msgstr "Çalıştır" + +#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259 +#: usr/local/www/system_firmware.php:262 +msgid "Manual Upgrade" +msgstr "Elle Yükseltme" + +#: usr/local/www/system_firmware.php:259 usr/local/www/system_firmware.php:266 +#: usr/local/www/system_firmware.php:269 +msgid "Enable firmware upload" +msgstr "Üretici yazılımı yüklemeyi etkinleştir" + +#: usr/local/www/system_firmware.php:261 usr/local/www/system_firmware.php:268 +#: usr/local/www/system_firmware.php:271 +#, php-format +msgid "Click \"Enable firmware upload\" to begin." +msgstr "\"Üretici yazılımı yüklemeyi etkinleştir\" tıklayarak başlayın." + +#: usr/local/www/system_firmware.php:264 usr/local/www/system_firmware.php:271 +#: usr/local/www/system_firmware.php:274 +msgid "Disable firmware upload" +msgstr "Üretici yazılımı yüklemeyi kapat" + +#: usr/local/www/system_firmware.php:282 usr/local/www/system_firmware.php:289 +#: usr/local/www/system_firmware.php:292 +msgid "Please select kernel type" +msgstr "Lütfen çekirdek tipini seçiniz" + +#: usr/local/www/system_firmware.php:284 usr/local/www/system_firmware.php:55 +msgid "Multiprocessor kernel" +msgstr "Çok işlemcili çekirdek" + +#: usr/local/www/system_firmware.php:285 usr/local/www/system_firmware.php:56 +msgid "Uniprocessor kernel" +msgstr "Tek işlemcili çekirdek" + +#: usr/local/www/system_firmware.php:286 usr/local/www/system_firmware.php:57 +msgid "Embedded kernel" +msgstr "Gömülü çekirdek" + +#: usr/local/www/system_firmware.php:287 usr/local/www/system_firmware.php:58 +msgid "Developers kernel" +msgstr "Geliştirici çekirdeği" + +#: usr/local/www/system_firmware.php:298 +#: usr/local/www/system_firmware_check.php:103 +#: usr/local/www/system_firmware.php:304 usr/local/www/system_firmware.php:303 +#: usr/local/www/system_firmware_check.php:104 +msgid "Perform full backup prior to upgrade" +msgstr "Yükseltme yapmadan önce tam yedek alın" + +#: usr/local/www/system_firmware.php:300 usr/local/www/system_firmware.php:306 +#: usr/local/www/system_firmware.php:306 +msgid "Upgrade firmware" +msgstr "Üretici yazılımı yükseltme" + +#: usr/local/www/system_firmware.php:301 usr/local/www/system_firmware.php:307 +#: usr/local/www/system_firmware.php:307 +msgid "Click \"Upgrade firmware\" to start the upgrade process." +msgstr "\"Üretici yazılımı yükseltme\" yi tıklayarak yükseltme işlemini başlatın." + +#: usr/local/www/system_firmware.php:303 usr/local/www/system_firmware.php:309 +#: usr/local/www/system_firmware.php:309 +msgid "You must reboot the system before you can upgrade the firmware." +msgstr "Üretici yazılımı yüklemeden önce sistemi yeniden başlatmalısınız." + +#: usr/local/www/system_firmware.php:316 usr/local/www/system_firmware.php:322 +#: usr/local/www/system_firmware.php:322 +msgid "Warning:" +msgstr "Uyarı:" + +#: usr/local/www/system_firmware.php:319 usr/local/www/system_firmware.php:325 +#: usr/local/www/system_firmware.php:325 +msgid "" +"DO NOT abort the firmware upgrade once it has started. The firewall will " +"reboot automatically after storing the new firmware. The configuration will " +"be maintained." +msgstr "" +"Başladıktan sonra ürün yükseltmesini DURDURMAYIN. Güvenlik duvarı yeni " +"Üretici yazılımı yüklendikten sonra otomatik olarak tekrar başlayacaktır. " +"Yapılandırma korunur." + +#: usr/local/www/system_firmware_auto.php:115 +#: usr/local/www/system_firmware_auto.php:115 +msgid "Beginning firmware upgrade" +msgstr "Üretici yazılımı yükseltme başlıyor" + +#: usr/local/www/system_firmware_auto.php:133 +#: usr/local/www/system_firmware_auto.php:135 +msgid "Downloading current version information" +msgstr "Güncel sürüm bilgisi indiriliyor" + +#: usr/local/www/system_firmware_auto.php:148 +#: usr/local/www/system_firmware_auto.php:157 +#: usr/local/www/system_firmware_check.php:141 +#: usr/local/www/system_firmware_check.php:143 +#: usr/local/www/system_firmware_auto.php:150 +#: usr/local/www/system_firmware_auto.php:159 +msgid "Unable to check for updates." +msgstr "Güncellemeler kontrol edilemiyor." + +#: usr/local/www/system_firmware_auto.php:162 +#: usr/local/www/system_firmware_auto.php:164 +msgid "Downloading updates" +msgstr "Güncellemeler indiriliyor" + +#: usr/local/www/system_firmware_auto.php:172 +#: usr/local/www/system_firmware_auto.php:174 +msgid "download complete." +msgstr "indirme tamamlandı." + +#: usr/local/www/system_firmware_auto.php:174 +#: usr/local/www/system_firmware_check.php:159 +#: usr/local/www/system_firmware_check.php:161 +#: usr/local/www/system_firmware_auto.php:176 +msgid "You are on the latest version." +msgstr "En son sürümü kullanıyorsunuz." + +#: usr/local/www/system_firmware_auto.php:214 +#: usr/local/www/system_firmware_auto.php:216 +msgid "" +"Update cannot continue. You can disable this check on the Updater Settings " +"tab." +msgstr "" +"Güncelleme devam edemiyor. Bu seçeneği Güncelleme Ayarları başlığından " +"devre dışı bırakabilirsiniz." + +#: usr/local/www/system_firmware_auto.php:219 +#: usr/local/www/system_firmware_auto.php:221 +msgid "" +"Upgrade Image does not contain a signature but the system has been " +"configured to allow unsigned images. One moment please..." +msgstr "" +"Yükseltme imajı bir imza içermiyor ama sistem imzasız imajlara izin verecek " +"şekilde ayarlanmış durumda. Bir saniye..." + +#: usr/local/www/system_firmware_auto.php:224 +#: usr/local/www/system_firmware_auto.php:226 +msgid "Update cannot continue" +msgstr "Güncelleme devam edemiyor" + +#: usr/local/www/system_firmware_auto.php:235 +#: usr/local/www/system_firmware_auto.php:237 +msgid "Downloading complete but sha256 does not match." +msgstr "İndirme tamamlandı ama sha256 eşleşmiyor." + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +msgid "Auto upgrade aborted." +msgstr "Otomatik yükseltme iptal edildi." + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +msgid "Downloaded SHA256" +msgstr "SHA256 indirildi" + +#: usr/local/www/system_firmware_auto.php:236 +#: usr/local/www/system_firmware_auto.php:238 +msgid "Needed SHA256" +msgstr "SHA256 gerekiyor" + +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:240 +msgid "is now upgrading." +msgstr "yükseltme yapılıyor." + +#: usr/local/www/system_firmware_auto.php:238 +#: usr/local/www/system_firmware_auto.php:240 +msgid "The firewall will reboot once the operation is completed." +msgstr "İşlem tamamlanınca güvenlik duvarı yeniden başlatılacak." + +#: usr/local/www/system_firmware_auto.php:256 +#: usr/local/www/system_firmware_auto.php:258 +msgid "Auto Update Download Status" +msgstr "Otomatik Güncelleme İndirme Durumu" + +#: usr/local/www/system_firmware_auto.php:258 +#: usr/local/www/system_firmware_auto.php:260 +msgid "Current Version" +msgstr "Mevcut Sürüm" + +#: usr/local/www/system_firmware_auto.php:259 +#: usr/local/www/system_firmware_auto.php:261 +msgid "Latest Version" +msgstr "Son Sürüm" + +#: usr/local/www/system_firmware_auto.php:260 +#: usr/local/www/system_firmware_auto.php:262 +msgid "File size" +msgstr "Dosya boyutu" + +#: usr/local/www/system_firmware_auto.php:261 +#: usr/local/www/system_firmware_auto.php:263 +msgid "Downloaded" +msgstr "İndirilen" + +#: usr/local/www/system_firmware_auto.php:262 +#: usr/local/www/system_firmware_auto.php:264 +msgid "Percent" +msgstr "Yüzde" + +#: usr/local/www/system_firmware_check.php:107 +#: usr/local/www/system_firmware_check.php:109 +msgid "Invoke Auto Upgrade" +msgstr "Otomatik Yükseltmeyi Çalıştır" + +#: usr/local/www/system_firmware_check.php:125 +#: usr/local/www/system_firmware_check.php:127 +msgid "Downloading new version information..." +msgstr "Yeni sürüm bilgisi indiriliyor..." + +#: usr/local/www/system_firmware_check.php:143 +#: usr/local/www/system_firmware_check.php:145 +msgid "Could not contact custom update server." +msgstr "Özel güncelleme sunucusuna bağlanılamadı." + +#: usr/local/www/system_firmware_check.php:145 +#: usr/local/www/system_firmware_check.php:147 +#, php-format +msgid "Could not contact %1$s update server %2$s%3$s" +msgstr "%1$s özel güncelleme sunucusuna %2$s%3$s bağlanılamadı." + +#: usr/local/www/system_firmware_check.php:147 +#: usr/local/www/system_firmware_check.php:149 +msgid "Obtaining current version information..." +msgstr "Güncel sürüm bilgisi alınıyor..." + +#: usr/local/www/system_firmware_check.php:172 +#: usr/local/www/system_firmware_check.php:174 +msgid "A new version is now available" +msgstr "Yeni bir sürüm var" + +#: usr/local/www/system_firmware_check.php:173 +#: usr/local/www/system_firmware_check.php:175 +msgid "Current version" +msgstr "Mevcut sürüm" + +#: usr/local/www/system_firmware_check.php:175 +#: usr/local/www/system_firmware_check.php:177 +msgid "NanoBSD Size" +msgstr "NanoBSD Boyutu" + +#: usr/local/www/system_firmware_check.php:177 +#: usr/local/www/system_firmware_check.php:179 +msgid "Built On" +msgstr "İnşa" + +#: usr/local/www/system_firmware_check.php:178 +#: usr/local/www/system_firmware_check.php:180 +msgid "New version" +msgstr "Yeni sürüm" + +#: usr/local/www/system_firmware_check.php:179 +#: usr/local/www/system_firmware_check.php:181 +msgid "Update source" +msgstr "Güncelleme kaynağı" + +#: usr/local/www/system_firmware_settings.php:122 +#: usr/local/www/system_firmware_settings.php:127 +#: usr/local/www/system_firmware_settings.php:127 +msgid "Firmware Branch" +msgstr "Üretici yazılımı Dalı" + +#: usr/local/www/system_firmware_settings.php:126 +#: usr/local/www/system_firmware_settings.php:131 +#: usr/local/www/system_firmware_settings.php:131 +msgid "Default Auto Update URLs" +msgstr "Varsayılan Otomatik Güncelleme URLleri" + +#: usr/local/www/system_firmware_settings.php:142 +#: usr/local/www/system_firmware_settings.php:147 +#: usr/local/www/system_firmware_settings.php:156 +msgid "Firmware Auto Update URL" +msgstr "Üretici yazılımı Otomatik Güncelleme URLleri" + +#: usr/local/www/system_firmware_settings.php:144 +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:158 +msgid "Use a URL server for firmware upgrades other than" +msgstr "" +"Şunun dışındaki Üretici yazılımı güncellemeleri için bir URL sunucu kullan" + +#: usr/local/www/system_firmware_settings.php:146 +#: usr/local/www/pkg_mgr_settings.php:109 +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_firmware_settings.php:160 +#: usr/local/www/pkg_mgr_settings.php:109 +msgid "Base URL:" +msgstr "Taban URL:" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +msgid "This is where" +msgstr "Burada" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +msgid "will check for newer firmware versions when the" +msgstr "yeni Üretici yazılımı sürümü kontrolü gerçekleştirir." + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +msgid "System: Firmware: Auto Update" +msgstr "Sistem: Üretici yazılımı: Otomatik Güncelle" + +#: usr/local/www/system_firmware_settings.php:149 +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/system_firmware_settings.php:154 +#: usr/local/www/system_firmware_settings.php:163 +#: usr/local/www/pkg_mgr_settings.php:112 +msgid "page is viewed." +msgstr "sayfa görüntülendi." + +#: usr/local/www/system_firmware_settings.php:151 +#: usr/local/www/system_firmware_settings.php:156 +#: usr/local/www/system_firmware_settings.php:165 +#, php-format +msgid "" +"When a custom URL is enabled, the system will not verify the digital " +"signature from %s." +msgstr "Özel bir URL girildiğinde, sistem %s dijital imzasını kontrol etmez." + +#: usr/local/www/system_firmware_settings.php:159 +#: usr/local/www/system_firmware_settings.php:164 +#: usr/local/www/system_firmware_settings.php:173 +msgid "Updates" +msgstr "Güncellemeler" + +#: usr/local/www/system_firmware_settings.php:162 +#: usr/local/www/system_firmware_settings.php:167 +#: usr/local/www/system_firmware_settings.php:176 +msgid "Unsigned images" +msgstr "İmzalanmamış imajlar" + +#: usr/local/www/system_firmware_settings.php:166 +#: usr/local/www/system_firmware_settings.php:171 +#: usr/local/www/system_firmware_settings.php:180 +msgid "" +"Allow auto-update firmware images with a missing or invalid digital " +"signature to be used." +msgstr "" +"Dijital olması olmayan veya bozuk olan ürün imajlarının otomatik " +"güncellenmesine izin ver." + +#: usr/local/www/system_firmware_settings.php:174 +#: usr/local/www/system_firmware_settings.php:187 +#: usr/local/www/system_firmware_settings.php:196 +msgid "Gitsync" +msgstr "Git senkronizasyonu" + +#: usr/local/www/system_firmware_settings.php:177 +#: usr/local/www/system_firmware_settings.php:190 +#: usr/local/www/system_firmware_settings.php:199 +msgid "Auto sync on update" +msgstr "Güncellemede otomatik olarak senkronize et" + +#: usr/local/www/system_firmware_settings.php:181 +#: usr/local/www/system_firmware_settings.php:194 +#: usr/local/www/system_firmware_settings.php:203 +msgid "" +"After updating, sync with the following repository/branch before reboot." +msgstr "" +"Güncellemeden sonra, yeniden başlatmadan önce aşağıdaki depo/dal ile " +"senkronize et." + +#: usr/local/www/system_firmware_settings.php:193 +#: usr/local/www/system_firmware_settings.php:206 +#: usr/local/www/system_firmware_settings.php:215 +msgid "Repository URL" +msgstr "Depo URLsi" + +#: usr/local/www/system_firmware_settings.php:198 +#: usr/local/www/system_firmware_settings.php:211 +#: usr/local/www/system_firmware_settings.php:220 +#, php-format +msgid "The most recently used repository was %s" +msgstr "En son kullanılan depo URLsi %s." + +#: usr/local/www/system_firmware_settings.php:200 +#: usr/local/www/system_firmware_settings.php:213 +#: usr/local/www/system_firmware_settings.php:222 +msgid "This will be used if the field is left blank." +msgstr "Alan boş bırakılır ise bu kullanılacaktır." + +#: usr/local/www/system_firmware_settings.php:219 +#: usr/local/www/system_firmware_settings.php:232 +#: usr/local/www/system_firmware_settings.php:241 +msgid "Branch name" +msgstr "Dal adı" + +#: usr/local/www/system_firmware_settings.php:224 +#: usr/local/www/system_firmware_settings.php:237 +#: usr/local/www/system_firmware_settings.php:246 +#, php-format +msgid "The most recently used branch was %s" +msgstr "En son kullanılan dal %s idi." + +#: usr/local/www/system_firmware_settings.php:227 +#: usr/local/www/system_firmware_settings.php:240 +#: usr/local/www/system_firmware_settings.php:249 +msgid "Usually the branch name is master" +msgstr "Genellikle dal adı 'master'dır." + +#: usr/local/www/system_firmware_settings.php:230 +#: usr/local/www/system_firmware_settings.php:243 +#: usr/local/www/system_firmware_settings.php:252 +msgid "Note: Sync will not be performed if a branch is not specified." +msgstr "Not: Eğer bir dal belirtmezseniz senkronizasyon gerçekleştirilmez." + +#: usr/local/www/system_routes.php:52 usr/local/www/system_routes.php:94 +#: usr/local/www/system_routes_edit.php:165 +#: usr/local/www/system_routes_edit.php:198 usr/local/www/system_routes.php:52 +#: usr/local/www/system_routes.php:98 usr/local/www/system_routes_edit.php:198 +msgid "Static Routes" +msgstr "Statik Yönlendirmeler" + +#: usr/local/www/system_routes.php:83 usr/local/www/system_routes.php:83 +msgid "removed route to" +msgstr "şu yönlendirme silindi" + +#: usr/local/www/system_routes.php:107 usr/local/www/system_routes.php:111 +#, php-format +msgid "" +"The static route configuration has been changed.%sYou must apply the changes " +"in order for them to take effect." +msgstr "" +"Statik yönlendirme yapılandırması değiştirildi.%sDeğişiklikleri uygulayarak " +"etkin hale gelmelerini sağlayabilirsiniz." + +#: usr/local/www/system_routes.php:115 usr/local/www/fbegin.inc:159 +#: usr/local/www/status_gateway_groups.php:64 +#: usr/local/www/status_gateway_groups.php:75 +#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:62 +#: usr/local/www/system_gateway_groups.php:108 +#: usr/local/www/system_gateway_groups.php:121 +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways.php:120 usr/local/www/system_gateways.php:141 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/diag_logs_routing.php:83 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/fbegin.inc:176 usr/local/www/diag_logs_resolver.php:97 +#: usr/local/www/diag_logs.php:96 usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/diag_logs_wireless.php:85 +#: usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_gateways.php:97 +#: usr/local/www/diag_logs_routing.php:84 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/fbegin.inc:184 usr/local/www/diag_logs_resolver.php:98 +#: usr/local/www/system_gateway_groups.php:109 +#: usr/local/www/system_gateway_groups.php:122 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/status_gateways.php:63 +#: usr/local/www/diag_logs_wireless.php:86 +#: usr/local/www/diag_logs_gateways.php:98 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/status_gateway_groups.php:76 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/diag_logs_routing.php:84 usr/local/www/diag_logs.php:96 +#: usr/local/www/system_routes.php:119 usr/local/www/diag_logs_gateways.php:66 +#: usr/local/www/diag_logs_gateways.php:98 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/status_gateway_groups.php:65 +#: usr/local/www/status_gateway_groups.php:76 usr/local/www/fbegin.inc:175 +#: usr/local/www/system_gateways.php:120 usr/local/www/system_gateways.php:141 +#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:63 +#: usr/local/www/diag_logs_wireless.php:86 +#: usr/local/www/system_gateway_groups.php:109 +#: usr/local/www/system_gateway_groups.php:122 +#: usr/local/www/diag_logs_resolver.php:98 +msgid "Gateways" +msgstr "Ağ Geçitleri" + +#: usr/local/www/system_routes.php:116 usr/local/www/fbegin.inc:204 +#: usr/local/www/system_gateway_groups.php:109 +#: usr/local/www/system_gateways.php:142 usr/local/www/fbegin.inc:222 +#: usr/local/www/fbegin.inc:230 usr/local/www/system_gateway_groups.php:110 +#: usr/local/www/system_routes.php:120 usr/local/www/fbegin.inc:222 +#: usr/local/www/system_gateways.php:142 +#: usr/local/www/system_gateway_groups.php:110 +msgid "Routes" +msgstr "Yönlendirmeler" + +#: usr/local/www/system_routes.php:161 usr/local/www/system_routes.php:172 +#: usr/local/www/system_routes.php:176 +msgid "Do you really want to delete this route?" +msgstr "Bu yönlendirmeyi silmek istediğinize emin misiniz?" + +#: usr/local/www/system_routes.php:188 usr/local/www/system_routes.php:199 +#: usr/local/www/system_routes.php:203 +msgid "" +"Do not enter static routes for networks assigned on any interface of this " +"firewall. Static routes are only used for networks reachable via a " +"different router, and not reachable via your default gateway." +msgstr "" +"Bu güvenlik duvarının herhangi bir arabirimine atanmış ağlar için statik " +"yönlendirme girmeyin. Statik yönlendirmeler sadece varsayılan ağ geçidiniz " +"üzerinden erişemediğiniz, onun yerine farklı bir yönlendirici üzerinden " +"eriştiğiniz ağlar için kullanılır." + +#: usr/local/www/system_routes_edit.php:89 +#: usr/local/www/system_routes_edit.php:179 +#: usr/local/www/system_routes_edit.php:90 +#: usr/local/www/system_routes_edit.php:216 +#: usr/local/www/system_routes_edit.php:217 +#: usr/local/www/system_routes_edit.php:90 +#: usr/local/www/system_routes_edit.php:217 +msgid "Destination network" +msgstr "Hedef ağ" + +#: usr/local/www/system_routes_edit.php:90 +#: usr/local/www/system_routes_edit.php:91 +#: usr/local/www/system_routes_edit.php:91 +msgid "Destination network bit count" +msgstr "Hedef ağ bit sayısı" + +#: usr/local/www/system_routes_edit.php:96 +#: usr/local/www/system_routes_edit.php:97 +#: usr/local/www/system_routes_edit.php:97 +msgid "A valid IPv4 or IPv6 destination network must be specified." +msgstr "Geçerli bir IPv4 yada IPv6 hedef ağı belirtilmeli." + +#: usr/local/www/system_routes_edit.php:99 +#: usr/local/www/system_routes_edit.php:100 +#: usr/local/www/system_routes_edit.php:100 +msgid "A valid destination network bit count must be specified." +msgstr "Geçerli bir hedef ağ bit sayısı belirtilmelidir." + +#: usr/local/www/system_routes_edit.php:114 +#: usr/local/www/system_routes_edit.php:118 +#: usr/local/www/system_routes_edit.php:118 +msgid "A IPv4 subnet can not be over 32 bits." +msgstr "IPv4 altağ 32 bit üzerinde olamaz." + +#: usr/local/www/system_routes_edit.php:123 +msgid "A route to this destination network already exists." +msgstr "Bu hedef ağa bir yönlendirme sistemde mevcut." + +#: usr/local/www/system_routes_edit.php:165 +#: usr/local/www/system_routes_edit.php:198 +#: usr/local/www/system_routes_edit.php:198 +msgid "Edit route" +msgstr "Yönlendirme düzenle" + +#: usr/local/www/system_routes_edit.php:176 +#: usr/local/www/system_routes_edit.php:213 +#: usr/local/www/system_routes_edit.php:214 +#: usr/local/www/system_routes_edit.php:214 +msgid "Edit route entry" +msgstr "Yönlendirme girdisi düzenle" + +#: usr/local/www/system_routes_edit.php:196 +#: usr/local/www/system_routes_edit.php:228 +#: usr/local/www/system_routes_edit.php:229 +#: usr/local/www/system_routes_edit.php:229 +msgid "Destination network for this static route" +msgstr "Bu statik yönlendirme için hedef ağ" + +#: usr/local/www/system_routes_edit.php:212 +#: usr/local/www/system_routes_edit.php:244 +#: usr/local/www/system_routes_edit.php:245 +#: usr/local/www/system_routes_edit.php:245 +msgid "Choose which gateway this route applies to or" +msgstr "Bu yönlendirmenin uygulanacağı ağ geçidini seçiniz veya" + +#: usr/local/www/system_routes_edit.php:228 +#: usr/local/www/system_routes_edit.php:260 +#: usr/local/www/system_routes_edit.php:261 +#: usr/local/www/system_routes_edit.php:261 +msgid "Default gateway:" +msgstr "Varsayılan ağ geçidi:" + +#: usr/local/www/system_routes_edit.php:231 +#: usr/local/www/system_routes_edit.php:263 +#: usr/local/www/system_routes_edit.php:264 +#: usr/local/www/system_routes_edit.php:264 +msgid "Interface:" +msgstr "Arabirim:" + +#: usr/local/www/system_routes_edit.php:243 +#: usr/local/www/system_routes_edit.php:275 +#: usr/local/www/system_routes_edit.php:276 +#: usr/local/www/system_routes_edit.php:276 +msgid "Gateway IP:" +msgstr "Ağ Geçidi IPsi:" + +#: usr/local/www/system_routes_edit.php:334 +#: usr/local/www/system_routes_edit.php:374 +#: usr/local/www/system_routes_edit.php:375 +#: usr/local/www/system_routes_edit.php:375 +#, php-format +msgid "You can manage Gateways %shere%s." +msgstr "Ağ geçitlerini %sburadan%s yönetebilirsiniz." + +#: usr/local/www/system_routes_edit.php:337 +#: usr/local/www/system_routes_edit.php:377 +#: usr/local/www/system_routes_edit.php:378 +#: usr/local/www/system_routes_edit.php:378 +msgid "Sorry, we could not create your gateway at this time." +msgstr "Ağ geçidi oluşturulamadı." + +#: usr/local/www/diag_logs_filter_summary.php:34 +#: usr/local/www/diag_logs_filter_summary.php:34 +msgid "Firewall Log Summary" +msgstr "Güvenlik duvarı günlük özeti" + +#: usr/local/www/diag_logs_filter_summary.php:45 +#: usr/local/www/load_balancer_relay_protocol_edit.php:230 +#: usr/local/www/load_balancer_relay_protocol_edit.php:228 +#: usr/local/www/diag_logs_filter_summary.php:46 +#: usr/local/www/load_balancer_relay_protocol_edit.php:228 +#: usr/local/www/diag_logs_filter_summary.php:46 +msgid "Actions" +msgstr "Eylemler" + +#: usr/local/www/diag_logs_filter_summary.php:47 +#: usr/local/www/diag_logs_filter_summary.php:48 +#: usr/local/www/diag_logs_filter_summary.php:48 +msgid "Protocols" +msgstr "Protokoller" + +#: usr/local/www/diag_logs_filter_summary.php:48 +#: usr/local/www/diag_logs_filter_summary.php:49 +#: usr/local/www/diag_logs_filter_summary.php:49 +msgid "Source IPs" +msgstr "Kaynak IPler" + +#: usr/local/www/diag_logs_filter_summary.php:49 +#: usr/local/www/diag_logs_filter_summary.php:50 +#: usr/local/www/diag_logs_filter_summary.php:50 +msgid "Destination IPs" +msgstr "Hedef IPler" + +#: usr/local/www/diag_logs_filter_summary.php:50 +#: usr/local/www/diag_logs_filter_summary.php:51 +#: usr/local/www/diag_logs_filter_summary.php:51 +msgid "Source Ports" +msgstr "Kaynak Portlar" + +#: usr/local/www/diag_logs_filter_summary.php:51 +#: usr/local/www/diag_logs_filter_summary.php:52 +#: usr/local/www/diag_logs_filter_summary.php:52 +msgid "Destination Ports" +msgstr "Hedef Portlar" + +#: usr/local/www/diag_logs_filter_summary.php:71 +#: usr/local/www/diag_logs_filter_summary.php:72 +#: usr/local/www/diag_logs_filter_summary.php:72 +msgid "data" +msgstr "veri" + +#: usr/local/www/diag_logs_filter_summary.php:208 +#: usr/local/www/diag_logs_filter_summary.php:207 +#: usr/local/www/diag_logs_filter_summary.php:208 +#, php-format +msgid "" +"This is a firewall log summary, of the last %1$s lines of the firewall log " +"(Max %2$s)." +msgstr "" +"Güvenlik Duvarı olay günlüğünün son %1$s satırının özetidir (en fazla %2$s)." + +#: usr/local/www/diag_logs_filter_summary.php:209 +#: usr/local/www/diag_logs_filter_summary.php:208 +#: usr/local/www/diag_logs_filter_summary.php:209 +msgid "NOTE: IE8 users must enable compatibility view." +msgstr "NOT: IE8 kullanıcıları uyumluluk görünümünü etkinleştirmelidir." + +#: usr/local/www/uploadconfig.php:48 usr/local/www/uploadconfig.php:48 +msgid "ERR Could not save configuration." +msgstr "HATA: Yapılandırma kaydedilemedi." + +#: usr/local/www/uploadconfig.php:54 usr/local/www/uploadconfig.php:54 +msgid "OK" +msgstr "TAMAM" + +#: usr/local/www/uploadconfig.php:57 usr/local/www/uploadconfig.php:57 +msgid "ERR Could not install configuration." +msgstr "HATA: Yapılandırma kurulamadı." + +#: usr/local/www/uploadconfig.php:60 usr/local/www/uploadconfig.php:60 +msgid "ERR Invalid configuration received." +msgstr "HATA: Geçersiz yapılandırma alındı." + +#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86 +#: usr/local/www/vpn_ipsec_mobile.php:303 usr/local/www/vpn_ipsec.php:133 +#: usr/local/www/vpn_ipsec_mobile.php:330 usr/local/www/vpn_ipsec_keys.php:85 +#: usr/local/www/vpn_ipsec.php:139 usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/vpn_ipsec_keys.php:85 +msgid "The IPsec tunnel configuration has been changed" +msgstr "IPsec tünel yapılandırması değiştirildi" + +#: usr/local/www/vpn_ipsec.php:141 usr/local/www/vpn_ipsec_keys.php:93 +#: usr/local/www/vpn_ipsec_mobile.php:318 +#: usr/local/www/vpn_ipsec_phase1.php:497 +#: usr/local/www/vpn_ipsec_phase2.php:381 +#: usr/local/www/vpn_ipsec_phase2.php:407 usr/local/www/vpn_ipsec.php:140 +#: usr/local/www/vpn_ipsec_mobile.php:345 usr/local/www/vpn_ipsec_keys.php:92 +#: usr/local/www/vpn_ipsec_phase2.php:473 +#: usr/local/www/vpn_ipsec_phase1.php:496 usr/local/www/vpn_ipsec.php:146 +#: usr/local/www/vpn_ipsec_phase1.php:517 +#: usr/local/www/vpn_ipsec_mobile.php:345 usr/local/www/vpn_ipsec_keys.php:92 +#: usr/local/www/vpn_ipsec_phase2.php:495 +msgid "Tunnels" +msgstr "Tüneller" + +#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94 +#: usr/local/www/vpn_ipsec_mobile.php:319 +#: usr/local/www/vpn_ipsec_phase1.php:498 +#: usr/local/www/vpn_ipsec_phase2.php:382 +#: usr/local/www/vpn_ipsec_phase2.php:408 usr/local/www/vpn_ipsec.php:141 +#: usr/local/www/vpn_ipsec_mobile.php:346 usr/local/www/vpn_ipsec_keys.php:93 +#: usr/local/www/vpn_ipsec_phase2.php:474 +#: usr/local/www/vpn_ipsec_phase1.php:497 usr/local/www/vpn_ipsec.php:147 +#: usr/local/www/vpn_ipsec_phase1.php:518 +#: usr/local/www/vpn_ipsec_mobile.php:346 usr/local/www/vpn_ipsec_keys.php:93 +#: usr/local/www/vpn_ipsec_phase2.php:496 +msgid "Mobile clients" +msgstr "Mobil istemciler" + +#: usr/local/www/vpn_ipsec.php:143 usr/local/www/vpn_ipsec_keys.php:95 +#: usr/local/www/vpn_ipsec_mobile.php:320 +#: usr/local/www/vpn_ipsec_phase1.php:499 +#: usr/local/www/vpn_ipsec_phase2.php:383 +#: usr/local/www/vpn_ipsec_phase2.php:409 +msgid "Pre-shared keys" +msgstr "Ön paylaşımlı anahtarlar" + +#: usr/local/www/vpn_ipsec.php:160 usr/local/www/vpn_ipsec.php:159 +#: usr/local/www/vpn_ipsec.php:165 +msgid "Enable IPsec" +msgstr "IPsec'i Etkinleştir" + +#: usr/local/www/vpn_ipsec.php:221 usr/local/www/vpn_ipsec.php:351 +#: usr/local/www/vpn_ipsec_phase2.php:552 usr/local/www/vpn_ipsec.php:232 +#: usr/local/www/vpn_ipsec.php:362 usr/local/www/vpn_ipsec_phase2.php:578 +#: usr/local/www/vpn_ipsec.php:231 usr/local/www/vpn_ipsec.php:361 +#: usr/local/www/vpn_ipsec_phase2.php:680 usr/local/www/vpn_ipsec.php:237 +#: usr/local/www/vpn_ipsec.php:367 usr/local/www/vpn_ipsec_phase2.php:701 +msgid "auto" +msgstr "otomatik" + +#: usr/local/www/vpn_ipsec.php:223 usr/local/www/vpn_ipsec.php:353 +#: usr/local/www/system_camanager.php:465 +#: usr/local/www/system_certmanager.php:578 +#: usr/local/www/vpn_ipsec_phase2.php:563 +#: usr/local/www/vpn_openvpn_server.php:864 usr/local/www/vpn_ipsec.php:234 +#: usr/local/www/vpn_ipsec.php:364 usr/local/www/system_certmanager.php:677 +#: usr/local/www/vpn_openvpn_server.php:937 +#: usr/local/www/system_camanager.php:466 +#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/vpn_ipsec.php:233 +#: usr/local/www/vpn_ipsec.php:363 usr/local/www/vpn_openvpn_server.php:965 +#: usr/local/www/vpn_ipsec_phase2.php:691 +#: usr/local/www/system_camanager.php:473 usr/local/www/vpn_ipsec.php:239 +#: usr/local/www/vpn_ipsec.php:369 usr/local/www/system_certmanager.php:686 +#: usr/local/www/vpn_openvpn_server.php:992 +#: usr/local/www/vpn_ipsec_phase2.php:712 +msgid "bits" +msgstr "bit" + +#: usr/local/www/vpn_ipsec.php:243 usr/local/www/vpn_ipsec.php:254 +#: usr/local/www/vpn_ipsec.php:253 usr/local/www/vpn_ipsec.php:259 +msgid "edit phase1 entry" +msgstr "Aşama 1 girdisini düzenle" + +#: usr/local/www/vpn_ipsec.php:247 usr/local/www/vpn_ipsec.php:258 +#: usr/local/www/vpn_ipsec.php:257 usr/local/www/vpn_ipsec.php:263 +msgid "" +"Do you really want to delete this phase1 and all associated phase2 entries?" +msgstr "" +"Aşama 1 ve ilişkilendirilmiş Aşama 2 girdilerini silmek istediğinize emin " +"misiniz? " + +#: usr/local/www/vpn_ipsec.php:248 usr/local/www/vpn_ipsec.php:259 +#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:264 +msgid "delete phase1 entry" +msgstr "aşama 1 girdisini sil" + +#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:269 +#: usr/local/www/vpn_ipsec.php:268 usr/local/www/vpn_ipsec.php:274 +msgid "copy phase1 entry" +msgstr "aşama 1 girdisini kopyala" + +#: usr/local/www/vpn_ipsec.php:279 usr/local/www/vpn_ipsec.php:290 +#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:295 +#, php-format +msgid "Show %s Phase-2 entries" +msgstr "%s aşama 2 girdisi göster" + +#: usr/local/www/vpn_ipsec.php:285 usr/local/www/vpn_ipsec.php:296 +#: usr/local/www/vpn_ipsec.php:295 usr/local/www/vpn_ipsec.php:301 +msgid "Local Subnet" +msgstr "Yerel Altağ" + +#: usr/local/www/vpn_ipsec.php:286 usr/local/www/vpn_ipsec.php:297 +#: usr/local/www/vpn_ipsec.php:296 usr/local/www/vpn_ipsec.php:302 +msgid "Remote Subnet" +msgstr "Uzak Altağ" + +#: usr/local/www/vpn_ipsec.php:288 usr/local/www/vpn_ipsec.php:299 +#: usr/local/www/vpn_ipsec.php:298 usr/local/www/vpn_ipsec.php:304 +msgid "P2 Protocol" +msgstr "P2 Protokol" + +#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:300 +#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:305 +msgid "P2 Transforms" +msgstr "P2 Dönüştürmeler" + +#: usr/local/www/vpn_ipsec.php:290 usr/local/www/vpn_ipsec.php:301 +#: usr/local/www/vpn_ipsec.php:300 usr/local/www/vpn_ipsec.php:306 +msgid "P2 Auth Methods" +msgstr "P2 Kimlik Doğrulama Yöntemleri" + +#: usr/local/www/vpn_ipsec.php:293 usr/local/www/vpn_ipsec.php:304 +#: usr/local/www/vpn_ipsec.php:303 usr/local/www/vpn_ipsec.php:309 +msgid "add phase2 entry" +msgstr "aşama 2 girdisi ekle" + +#: usr/local/www/vpn_ipsec.php:373 usr/local/www/vpn_ipsec.php:384 +#: usr/local/www/vpn_ipsec.php:383 usr/local/www/vpn_ipsec.php:389 +msgid "edit phase2 entry" +msgstr "aşama 2 girdisi düzenle" + +#: usr/local/www/vpn_ipsec.php:375 usr/local/www/vpn_ipsec.php:386 +#: usr/local/www/vpn_ipsec.php:385 usr/local/www/vpn_ipsec.php:391 +msgid "Do you really want to delete this phase2 entry?" +msgstr "Bu aşama 2 girdisini silmek istediğinizden emin misiniz?" + +#: usr/local/www/vpn_ipsec.php:376 usr/local/www/vpn_ipsec.php:387 +#: usr/local/www/vpn_ipsec.php:386 usr/local/www/vpn_ipsec.php:392 +msgid "delete phase2 entry" +msgstr "aşama 2 girdisini sil" + +#: usr/local/www/vpn_ipsec.php:379 usr/local/www/vpn_ipsec.php:390 +#: usr/local/www/vpn_ipsec.php:389 usr/local/www/vpn_ipsec.php:395 +msgid "add a new Phase 2 based on this one" +msgstr "bunu temel alarak yeni bir Aşama 2 ekle" + +#: usr/local/www/vpn_ipsec.php:410 usr/local/www/vpn_ipsec.php:421 +#: usr/local/www/vpn_ipsec.php:420 usr/local/www/vpn_ipsec.php:426 +msgid "add phase1 entry" +msgstr "aşama 1 girdisi ekle" + +#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435 +#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440 +msgid "You can check your IPsec status at" +msgstr "IPsec durumunu kontrol edebilirsiniz:" + +#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435 +#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440 +msgid "Status:IPsec" +msgstr "Durum: IPsec" + +#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:436 +#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441 +msgid "IPsec Debug Mode can be enabled at" +msgstr "IPsec Hata Ayıklama Kipini açmak için" + +#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:426 +#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:437 +#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441 +#: usr/local/www/vpn_ipsec.php:442 +msgid "System:Advanced:Miscellaneous" +msgstr "Sistem: Gelişmiş: Diğer" + +#: usr/local/www/vpn_ipsec.php:426 usr/local/www/vpn_ipsec.php:437 +#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:442 +msgid "IPsec can be set to prefer older SAs at" +msgstr "IPsec'in daha eski SAları tercih etmesi için" + +#: usr/local/www/vpn_ipsec.php:456 usr/local/www/vpn_ipsec.php:467 +#: usr/local/www/vpn_ipsec.php:466 usr/local/www/vpn_ipsec.php:472 +msgid "Remote Gateway" +msgstr "Uzak ağ geçidi" + +#: usr/local/www/vpn_ipsec.php:458 usr/local/www/vpn_ipsec.php:469 +#: usr/local/www/vpn_ipsec.php:468 usr/local/www/vpn_ipsec.php:474 +msgid "P1 Protocol" +msgstr "P1 Protokol" + +#: usr/local/www/vpn_ipsec.php:459 usr/local/www/vpn_ipsec.php:470 +#: usr/local/www/vpn_ipsec.php:469 usr/local/www/vpn_ipsec.php:475 +msgid "P1 Transforms" +msgstr "P1 Dönüştürme" + +#: usr/local/www/vpn_ipsec.php:460 usr/local/www/vpn_ipsec.php:471 +#: usr/local/www/vpn_ipsec.php:470 usr/local/www/vpn_ipsec.php:476 +msgid "P1 Description" +msgstr "P1 Açıklama" + +#: usr/local/www/diag_logs_ppp.php:91 usr/local/www/diag_logs_ppp.php:90 +#: usr/local/www/diag_logs_ppp.php:88 +#, php-format +msgid "Last %s PPP log entries" +msgstr "Son %s PPP günlük girdisi" + +#: usr/local/www/diag_logs_relayd.php:87 usr/local/www/diag_logs_relayd.php:86 +#: usr/local/www/diag_logs_relayd.php:87 +#, php-format +msgid "Last %s Load Balancer log entries" +msgstr "Yük Dengeleyici son %s günlük girdisi" + +#: usr/local/www/graph.php:112 usr/local/www/graph.php:112 +msgid "In" +msgstr "İçeri" + +#: usr/local/www/graph.php:113 usr/local/www/graph.php:113 +msgid "Out" +msgstr "Dışarı" + +#: usr/local/www/graph.php:117 usr/local/www/graph.php:117 +msgid "Switch to bytes/s" +msgstr "bayt/saniye gösterimine geç" + +#: usr/local/www/graph.php:118 usr/local/www/graph.php:118 +msgid "AutoScale" +msgstr "otomatik Ölçekleme" + +#: usr/local/www/graph.php:120 usr/local/www/graph.php:120 +msgid "Graph shows last" +msgstr "Grafik son" + +#: usr/local/www/graph.php:195 usr/local/www/graph.php:195 +msgid "Switch to" +msgstr "Geç" + +#: usr/local/www/graph.php:201 usr/local/www/graph.php:201 +msgid "follow" +msgstr "takip" + +#: usr/local/www/graph.php:361 usr/local/www/graph.php:361 +#, fuzzy +msgid "Kbps" +msgstr "Kbps" + +#: usr/local/www/graph.php:363 usr/local/www/graph.php:363 +#, fuzzy +msgid "Mbps" +msgstr "Mbps" + +#: usr/local/www/graph.php:365 usr/local/www/graph.php:365 +#, fuzzy +msgid "Gbps" +msgstr "Gbps" + +#: usr/local/www/graph.php:371 usr/local/www/graph.php:371 +msgid "KB/s" +msgstr "KB/sn" + +#: usr/local/www/graph.php:373 usr/local/www/graph.php:373 +msgid "MB/s" +msgstr "MB/sn" + +#: usr/local/www/graph.php:375 usr/local/www/graph.php:375 +msgid "GB/s" +msgstr "GB/sn" + +#: usr/local/www/diag_patterns.php:43 +#: usr/local/www/services_captiveportal_filemanager.php:195 +#: usr/local/www/exec.php:290 usr/local/www/exec.php:300 +#: usr/local/www/exec.php:292 usr/local/www/exec.php:302 +#: usr/local/www/services_captiveportal_filemanager.php:192 +#: usr/local/www/exec.php:292 usr/local/www/exec.php:302 +#: usr/local/www/services_captiveportal_filemanager.php:192 +msgid "Upload" +msgstr "Yükle" + +#: usr/local/www/diag_patterns.php:46 usr/local/www/diag_patterns.php:46 +msgid "Uploaded file to" +msgstr "Yüklenen dosyanın konumu" + +#: usr/local/www/diag_patterns.php:49 usr/local/www/diag_patterns.php:49 +msgid "Warning: You must upload a file with .pat extension." +msgstr "Uyarı: Yüklenecek dosya .pat uzantısında olmalıdır." + +#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_patterns.php:58 +msgid "Add layer7 pattern" +msgstr "Layer7 deseni ekle" + +#: usr/local/www/diag_patterns.php:69 usr/local/www/diag_patterns.php:69 +msgid "Upload layer7 pattern file" +msgstr "Layer7 desen dosyası yükle" + +#: usr/local/www/diag_patterns.php:72 usr/local/www/diag_patterns.php:72 +msgid "File to upload:" +msgstr "Yüklenecek dosya:" + +#: usr/local/www/diag_patterns.php:80 usr/local/www/diag_patterns.php:43 +#: usr/local/www/diag_patterns.php:43 usr/local/www/diag_patterns.php:80 +msgid "Upload Pattern file" +msgstr "Desen dosyası yükle" + +#: usr/local/www/vpn_ipsec_keys.php:64 usr/local/www/vpn_ipsec_keys.php:64 +msgid "Deleted IPsec Pre-Shared Key" +msgstr "Silinen IPsec Ön Paylaşımlı Anahtar" + +#: usr/local/www/vpn_ipsec_keys.php:71 usr/local/www/vpn_ipsec_keys.php:71 +msgid "VPN: IPsec: Keys" +msgstr "VPN: IPsec: Anahtarlar" + +#: usr/local/www/vpn_ipsec_keys.php:104 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:128 +#: usr/local/www/vpn_ipsec_keys.php:103 +#: usr/local/www/vpn_ipsec_keys_edit.php:127 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:127 +#: usr/local/www/vpn_ipsec_keys.php:103 +msgid "Identifier" +msgstr "Tanımlayıcı" + +#: usr/local/www/vpn_ipsec_keys.php:105 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:136 +msgid "Pre-shared key" +msgstr "Ön paylaşımlı anahtar" + +#: usr/local/www/vpn_ipsec_keys.php:110 usr/local/www/vpn_ipsec_keys.php:146 +#: usr/local/www/vpn_ipsec_keys.php:109 usr/local/www/vpn_ipsec_keys.php:145 +#: usr/local/www/vpn_ipsec_keys.php:109 usr/local/www/vpn_ipsec_keys.php:145 +msgid "add key" +msgstr "anahtar ekle" + +#: usr/local/www/vpn_ipsec_keys.php:123 usr/local/www/vpn_ipsec_keys.php:136 +#: usr/local/www/vpn_ipsec_keys.php:122 usr/local/www/vpn_ipsec_keys.php:135 +#: usr/local/www/vpn_ipsec_keys.php:122 usr/local/www/vpn_ipsec_keys.php:135 +msgid "edit key" +msgstr "anahtarı düzenle" + +#: usr/local/www/vpn_ipsec_keys.php:137 +msgid "Do you really want to delete this pre-shared key?" +msgstr "Bu Ön paylaşımlı anahtarı silmek istediğinizden emin misiniz?" + +#: usr/local/www/vpn_ipsec_keys.php:137 usr/local/www/vpn_ipsec_keys.php:136 +#: usr/local/www/vpn_ipsec_keys.php:136 +msgid "delete key" +msgstr "anahtarı sil" + +#: usr/local/www/vpn_ipsec_keys_edit.php:74 +#: usr/local/www/vpn_ipsec_keys_edit.php:74 +msgid "The identifier contains invalid characters." +msgstr "Tanımlayıcı geçersiz karakterler içeriyor." + +#: usr/local/www/vpn_ipsec_keys_edit.php:77 +#: usr/local/www/vpn_ipsec_keys_edit.php:77 +msgid "A user with this name already exists. Add the key to the user instead." +msgstr "Bu isimde bir kullanıcı sistemde mevcut. Anahtarı kullanıcıya ekleyin." + +#: usr/local/www/vpn_ipsec_keys_edit.php:83 +#: usr/local/www/vpn_ipsec_keys_edit.php:83 +msgid "Another entry with the same identifier already exists." +msgstr "Aynı tanımlayıcıyla başka bir girdi sistemde mevcut." + +#: usr/local/www/vpn_ipsec_keys_edit.php:100 +#: usr/local/www/vpn_ipsec_keys_edit.php:100 +msgid "Edited" +msgstr "Düzenlendi" + +#: usr/local/www/vpn_ipsec_keys_edit.php:103 +#: usr/local/www/vpn_ipsec_keys_edit.php:103 +msgid "Added" +msgstr "Eklendi" + +#: usr/local/www/vpn_ipsec_keys_edit.php:114 +msgid "VPN: IPsec: Edit pre-shared key" +msgstr "VPN: IPsec: Ön paylaşımlı anahtarı düzenle" + +#: usr/local/www/vpn_ipsec_keys_edit.php:132 +#: usr/local/www/vpn_ipsec_keys_edit.php:131 +#: usr/local/www/vpn_ipsec_keys_edit.php:131 +msgid "" +"This can be either an IP address, fully qualified domain name or an e-mail " +"address" +msgstr "IP adresi, (tam) domain adı ya da e-posta adresi olabilir." + +#: usr/local/www/vpn_ipsec_mobile.php:128 +#: usr/local/www/vpn_ipsec_mobile.php:132 +#: usr/local/www/vpn_ipsec_mobile.php:132 +msgid "User Authentication Source" +msgstr "Kullanıcı Kimlik Doğrulama Kaynağı" + +#: usr/local/www/vpn_ipsec_mobile.php:128 +#: usr/local/www/vpn_ipsec_mobile.php:132 +#: usr/local/www/vpn_ipsec_mobile.php:132 +msgid "Group Authentication Source" +msgstr "Grup Kimlik Doğrulama Kaynağı" + +#: usr/local/www/vpn_ipsec_mobile.php:134 +#: usr/local/www/vpn_ipsec_mobile.php:138 +#: usr/local/www/vpn_ipsec_mobile.php:138 +msgid "" +"A valid IP address for 'Virtual Address Pool Network' must be specified." +msgstr "'Sanal IP Adres Havuzu' için geçerli bir IP adresi tanımlanmalıdır." + +#: usr/local/www/vpn_ipsec_mobile.php:138 +#: usr/local/www/vpn_ipsec_mobile.php:142 +#: usr/local/www/vpn_ipsec_mobile.php:142 +msgid "A valid value for 'DNS Default Domain' must be specified." +msgstr "'DNS Varsayılan Alan' için geçerli bir değer belirtilmelidir." + +#: usr/local/www/vpn_ipsec_mobile.php:143 +#: usr/local/www/vpn_ipsec_mobile.php:159 +#: usr/local/www/vpn_ipsec_mobile.php:159 +msgid "" +"At least one DNS server must be specified to enable the DNS Server option." +msgstr "" +"DNS Sunucu seçeneğini etkinleştirmek için en az bir DNS sunucu " +"tanımlanmalıdır." + +#: usr/local/www/vpn_ipsec_mobile.php:145 +#: usr/local/www/vpn_ipsec_mobile.php:161 +#: usr/local/www/vpn_ipsec_mobile.php:161 +msgid "A valid IP address for 'DNS Server #1' must be specified." +msgstr "'DNS Sunucu #1' için geçerli bir IP adresi tanımlanmalıdır." + +#: usr/local/www/vpn_ipsec_mobile.php:147 +#: usr/local/www/vpn_ipsec_mobile.php:163 +#: usr/local/www/vpn_ipsec_mobile.php:163 +msgid "A valid IP address for 'DNS Server #2' must be specified." +msgstr "'DNS Sunucu #2' için geçerli bir IP adresi tanımlanmalıdır." + +#: usr/local/www/vpn_ipsec_mobile.php:149 +#: usr/local/www/vpn_ipsec_mobile.php:165 +#: usr/local/www/vpn_ipsec_mobile.php:165 +msgid "A valid IP address for 'DNS Server #3' must be specified." +msgstr "'DNS Sunucu #3' için geçerli bir IP adresi tanımlanmalıdır." + +#: usr/local/www/vpn_ipsec_mobile.php:151 +#: usr/local/www/vpn_ipsec_mobile.php:167 +#: usr/local/www/vpn_ipsec_mobile.php:167 +msgid "A valid IP address for 'DNS Server #4' must be specified." +msgstr "'DNS Sunucu #4' için geçerli bir IP adresi tanımlanmalıdır." + +#: usr/local/www/vpn_ipsec_mobile.php:156 +#: usr/local/www/vpn_ipsec_mobile.php:172 +#: usr/local/www/vpn_ipsec_mobile.php:172 +msgid "" +"At least one WINS server must be specified to enable the DNS Server option." +msgstr "" +"DNS Sunucu seçeneğini etkinleştirmek için en az bir WINS Sunucu " +"tanımlanmalıdır." + +#: usr/local/www/vpn_ipsec_mobile.php:158 +#: usr/local/www/vpn_ipsec_mobile.php:174 +#: usr/local/www/vpn_ipsec_mobile.php:174 +msgid "A valid IP address for 'WINS Server #1' must be specified." +msgstr "'WINS Sunucu #1' için geçerli bir IP adresi tanımlanmalıdır." + +#: usr/local/www/vpn_ipsec_mobile.php:160 +#: usr/local/www/vpn_ipsec_mobile.php:176 +#: usr/local/www/vpn_ipsec_mobile.php:176 +msgid "A valid IP address for 'WINS Server #2' must be specified." +msgstr "'WINS Sunucu #2' için geçerli bir IP adresi tanımlanmalıdır." + +#: usr/local/www/vpn_ipsec_mobile.php:165 +#: usr/local/www/vpn_ipsec_mobile.php:181 +#: usr/local/www/vpn_ipsec_mobile.php:181 +msgid "A valid value for 'Login Banner' must be specified." +msgstr "'Oturum Başlığı' için geçerli bir değer belirtilmelidir." + +#: usr/local/www/vpn_ipsec_mobile.php:220 +#: usr/local/www/vpn_ipsec_mobile.php:240 +#: usr/local/www/vpn_ipsec_mobile.php:240 +msgid "Mobile" +msgstr "Mobil" + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "" +"Support for IPsec Mobile clients is enabled but a Phase1 definition was not " +"found" +msgstr "" +"Ipsec Mobil istemci desteği aktif durumda fakat Aşama 1 tanımı bulunamadı." + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "Please click Create to define one." +msgstr "Yeni bir tane tanımlamak için Oluştur'a tıklayınız." + +#: usr/local/www/vpn_ipsec_mobile.php:308 +#: usr/local/www/vpn_ipsec_mobile.php:335 +#: usr/local/www/vpn_ipsec_mobile.php:335 +msgid "Create Phase1" +msgstr "Aşama 1 Oluştur" + +#: usr/local/www/vpn_ipsec_mobile.php:330 +#: usr/local/www/vpn_ipsec_mobile.php:357 +#: usr/local/www/vpn_ipsec_mobile.php:357 +msgid "IKE Extensions" +msgstr "IKE Uzantıları" + +#: usr/local/www/vpn_ipsec_mobile.php:339 +#: usr/local/www/vpn_ipsec_mobile.php:366 +#: usr/local/www/vpn_ipsec_mobile.php:366 +msgid "Enable IPsec Mobile Client Support" +msgstr "IPsec Mobil İstemci Desteğini Etkinleştir" + +#: usr/local/www/vpn_ipsec_mobile.php:350 +#: usr/local/www/vpn_ipsec_mobile.php:377 +#: usr/local/www/vpn_ipsec_mobile.php:377 +msgid "Extended Authentication (Xauth)" +msgstr "Genişletilmiş Kimlik Doğrulama (XAuth)" + +#: usr/local/www/vpn_ipsec_mobile.php:354 +#: usr/local/www/vpn_ipsec_mobile.php:381 +#: usr/local/www/vpn_ipsec_mobile.php:381 +msgid "User Authentication" +msgstr "Kullanıcı Kimlik Doğrulama" + +#: usr/local/www/vpn_ipsec_mobile.php:358 +#: usr/local/www/vpn_ipsec_mobile.php:379 +#: usr/local/www/vpn_ipsec_mobile.php:404 +#: usr/local/www/vpn_ipsec_mobile.php:404 +msgid "system" +msgstr "sistem" + +#: usr/local/www/vpn_ipsec_mobile.php:375 +#: usr/local/www/vpn_ipsec_mobile.php:399 +#: usr/local/www/vpn_ipsec_mobile.php:399 +msgid "Group Authentication" +msgstr "Grup Kimlik Doğrulama" + +#: usr/local/www/vpn_ipsec_mobile.php:388 +#: usr/local/www/vpn_ipsec_mobile.php:413 +#: usr/local/www/vpn_ipsec_mobile.php:413 +msgid "Client Configuration (mode-cfg)" +msgstr "İstemci Yapılandırma (mode-cfg)" + +#: usr/local/www/vpn_ipsec_mobile.php:392 +#: usr/local/www/vpn_ipsec_mobile.php:417 +#: usr/local/www/vpn_ipsec_mobile.php:417 +msgid "Virtual Address Pool" +msgstr "Sanal Adres Havuzu" + +#: usr/local/www/vpn_ipsec_mobile.php:401 +#: usr/local/www/vpn_ipsec_mobile.php:426 +#: usr/local/www/vpn_ipsec_mobile.php:426 +msgid "Provide a virtual IP address to clients" +msgstr "İstemcilere sanal IP sağla" + +#: usr/local/www/vpn_ipsec_mobile.php:424 +#: usr/local/www/vpn_ipsec_mobile.php:449 +#: usr/local/www/vpn_ipsec_mobile.php:449 +msgid "Network List" +msgstr "Ağ Listesi" + +#: usr/local/www/vpn_ipsec_mobile.php:433 +#: usr/local/www/vpn_ipsec_mobile.php:458 +#: usr/local/www/vpn_ipsec_mobile.php:458 +msgid "Provide a list of accessible networks to clients" +msgstr "İstemcilere erişilebilir ağların listesini sağla" + +#: usr/local/www/vpn_ipsec_mobile.php:440 +#: usr/local/www/vpn_ipsec_mobile.php:465 +#: usr/local/www/vpn_ipsec_mobile.php:465 +msgid "Save Xauth Password" +msgstr "Xauth Parolasını Kaydet" + +#: usr/local/www/vpn_ipsec_mobile.php:449 +#: usr/local/www/vpn_ipsec_mobile.php:474 +#: usr/local/www/vpn_ipsec_mobile.php:474 +msgid "Allow clients to save Xauth passwords (Cisco VPN client only)." +msgstr "" +"İstemcilerin Xauth parolalarını kaydetmelerine izin ver (sadece Cisco VPN " +"istemci)." + +#: usr/local/www/vpn_ipsec_mobile.php:450 +#: usr/local/www/vpn_ipsec_mobile.php:475 +#: usr/local/www/vpn_ipsec_mobile.php:475 +msgid "" +"NOTE: With iPhone clients, this does not work when deployed via the iPhone " +"configuration utility, only by manual entry." +msgstr "" +"NOT: iPhone istemciler için dağıtılabilir bir yapılandırma aracı yoktur, " +"sadece manuel giriş yapılmalıdır." + +#: usr/local/www/vpn_ipsec_mobile.php:457 +#: usr/local/www/vpn_openvpn_csc.php:433 +#: usr/local/www/vpn_openvpn_server.php:1194 +#: usr/local/www/vpn_openvpn_server.php:1336 +#: usr/local/www/vpn_ipsec_mobile.php:482 +#: usr/local/www/vpn_openvpn_csc.php:432 +#: usr/local/www/vpn_openvpn_server.php:1378 +#: usr/local/www/vpn_openvpn_csc.php:432 +#: usr/local/www/vpn_ipsec_mobile.php:482 +#: usr/local/www/vpn_openvpn_server.php:1430 +msgid "DNS Default Domain" +msgstr "DNS Varsayılan Alan" + +#: usr/local/www/vpn_ipsec_mobile.php:466 +#: usr/local/www/vpn_openvpn_csc.php:443 +#: usr/local/www/vpn_openvpn_server.php:1204 +#: usr/local/www/vpn_openvpn_server.php:1346 +#: usr/local/www/vpn_ipsec_mobile.php:491 +#: usr/local/www/vpn_openvpn_csc.php:442 +#: usr/local/www/vpn_openvpn_server.php:1388 +#: usr/local/www/vpn_openvpn_csc.php:442 +#: usr/local/www/vpn_ipsec_mobile.php:491 +#: usr/local/www/vpn_openvpn_server.php:1440 +msgid "Provide a default domain name to clients" +msgstr "İstemcilere varsayılan alan adını sağla" + +#: usr/local/www/vpn_ipsec_mobile.php:480 +#: usr/local/www/vpn_openvpn_csc.php:458 +#: usr/local/www/vpn_openvpn_server.php:1219 +#: usr/local/www/vpn_openvpn_server.php:1361 +#: usr/local/www/vpn_ipsec_mobile.php:529 +#: usr/local/www/vpn_openvpn_csc.php:457 +#: usr/local/www/vpn_openvpn_server.php:1403 +#: usr/local/www/vpn_openvpn_csc.php:457 +#: usr/local/www/vpn_ipsec_mobile.php:529 +#: usr/local/www/vpn_openvpn_server.php:1455 +msgid "DNS Servers" +msgstr "DNS Sunucular" + +#: usr/local/www/vpn_ipsec_mobile.php:489 +#: usr/local/www/vpn_openvpn_csc.php:468 +#: usr/local/www/vpn_openvpn_server.php:1229 +#: usr/local/www/vpn_openvpn_server.php:1371 +#: usr/local/www/vpn_ipsec_mobile.php:538 +#: usr/local/www/vpn_openvpn_csc.php:467 +#: usr/local/www/vpn_openvpn_server.php:1413 +#: usr/local/www/vpn_openvpn_csc.php:467 +#: usr/local/www/vpn_ipsec_mobile.php:538 +#: usr/local/www/vpn_openvpn_server.php:1465 +msgid "Provide a DNS server list to clients" +msgstr "İstemcilere DNS sunucu listesi sağla" + +#: usr/local/www/vpn_ipsec_mobile.php:522 +#: usr/local/www/vpn_openvpn_csc.php:606 +#: usr/local/www/vpn_openvpn_server.php:1367 +#: usr/local/www/vpn_openvpn_server.php:1509 +#: usr/local/www/vpn_ipsec_mobile.php:571 +#: usr/local/www/vpn_openvpn_csc.php:605 +#: usr/local/www/vpn_openvpn_server.php:1551 +#: usr/local/www/vpn_openvpn_csc.php:605 +#: usr/local/www/vpn_ipsec_mobile.php:571 +#: usr/local/www/vpn_openvpn_server.php:1603 +msgid "WINS Servers" +msgstr "WINS Sunucular" + +#: usr/local/www/vpn_ipsec_mobile.php:531 +#: usr/local/www/vpn_openvpn_csc.php:616 +#: usr/local/www/vpn_openvpn_server.php:1377 +#: usr/local/www/vpn_openvpn_server.php:1519 +#: usr/local/www/vpn_ipsec_mobile.php:580 +#: usr/local/www/vpn_openvpn_csc.php:615 +#: usr/local/www/vpn_openvpn_server.php:1561 +#: usr/local/www/vpn_openvpn_csc.php:615 +#: usr/local/www/vpn_ipsec_mobile.php:580 +#: usr/local/www/vpn_openvpn_server.php:1613 +msgid "Provide a WINS server list to clients" +msgstr "İstemcilere WINS sunucu listesi sağla" + +#: usr/local/www/vpn_ipsec_mobile.php:552 +#: usr/local/www/vpn_ipsec_mobile.php:601 +#: usr/local/www/vpn_ipsec_mobile.php:601 +msgid "Phase2 PFS Group" +msgstr "Aşama 2 PFS Grubu" + +#: usr/local/www/vpn_ipsec_mobile.php:561 +#: usr/local/www/vpn_ipsec_mobile.php:610 +#: usr/local/www/vpn_ipsec_mobile.php:610 +msgid "" +"Provide the Phase2 PFS group to clients ( overrides all mobile phase2 " +"settings )" +msgstr "" +"İstemcilere Aşama 2 grubu sağla (tüm mobil aşama 2 ayarlarının üstüne yazar)" + +#: usr/local/www/vpn_ipsec_mobile.php:568 +#: usr/local/www/system_groupmanager.php:71 +#: usr/local/www/vpn_ipsec_mobile.php:617 +#: usr/local/www/system_groupmanager.php:71 +#: usr/local/www/vpn_ipsec_mobile.php:617 +msgid "Group" +msgstr "Grup" + +#: usr/local/www/vpn_ipsec_mobile.php:582 +#: usr/local/www/vpn_ipsec_mobile.php:631 +#: usr/local/www/vpn_ipsec_mobile.php:631 +msgid "Login Banner" +msgstr "Oturum Açma Başlığı" + +#: usr/local/www/vpn_ipsec_mobile.php:591 +#: usr/local/www/vpn_ipsec_mobile.php:640 +#: usr/local/www/vpn_ipsec_mobile.php:640 +msgid "Provide a login banner to clients" +msgstr "İstemcilere oturum açma başlığı sağla" + +#: usr/local/www/interfaces_lagg.php:70 usr/local/www/interfaces_lagg.php:74 +msgid "This LAGG interface cannot be deleted because it is still being used." +msgstr "Bu LAGG arabirimi kullanımda olduğundan silinemez." + +#: usr/local/www/interfaces_lagg.php:140 usr/local/www/interfaces_lagg.php:141 +#: usr/local/www/interfaces_lagg.php:145 +msgid "" +"LAGG allows for link aggregation, bonding and fault tolerance. Only " +"unassigned interfaces can be added to LAGG." +msgstr "" +"LAGG bağlantı toplamaya, bağlanmaya ve hata toleransına izin verir. Sadece " +"atanmamış arabirimler LAGG'a eklenebilir." + +#: usr/local/www/interfaces_lagg_edit.php:86 +#: usr/local/www/interfaces_lagg_edit.php:88 +msgid "Lagg protocol" +msgstr "LAGG protokolü" + +#: usr/local/www/interfaces_lagg_edit.php:131 +#: usr/local/www/interfaces_lagg_edit.php:132 +#: usr/local/www/interfaces_lagg_edit.php:145 +msgid "LAGG configuration" +msgstr "LAGG yapılandırması" + +#: usr/local/www/interfaces_lagg_edit.php:149 +#: usr/local/www/interfaces_lagg_edit.php:150 +#: usr/local/www/interfaces_lagg_edit.php:163 +msgid "Choose the members that will be used for the link aggregation" +msgstr "Bağlantı toplamada kullanılacak üyeleri seçin" + +#: usr/local/www/interfaces_lagg_edit.php:152 +#: usr/local/www/interfaces_lagg_edit.php:153 +#: usr/local/www/interfaces_lagg_edit.php:166 +msgid "Lag proto" +msgstr "Lag protokolü" + +#: usr/local/www/interfaces_lagg_edit.php:168 +#: usr/local/www/interfaces_lagg_edit.php:169 +#: usr/local/www/interfaces_lagg_edit.php:182 +msgid "failover" +msgstr "yük aktarma" + +#: usr/local/www/interfaces_lagg_edit.php:169 +#: usr/local/www/interfaces_lagg_edit.php:170 +#: usr/local/www/interfaces_lagg_edit.php:183 +msgid "" +"Sends and receives traffic only through the master port. If the master port " +"becomes unavailable, the next active port is used. The first interface " +"added is the master port; any interfaces added after that are used as " +"failover devices." +msgstr "" +"Sadece ana portu kullanarak trafik gönderir ve alır. Eğer ana port devre " +"dışı kalırsa bir sonraki aktif port kullanılır. İlk eklenen arabirim ana " +"porttur, daha sonra eklenenler yük aktarma için kullanılır." + +#: usr/local/www/interfaces_lagg_edit.php:174 +#: usr/local/www/interfaces_lagg_edit.php:175 +#: usr/local/www/interfaces_lagg_edit.php:188 +#, fuzzy +msgid "fec" +msgstr "fec" + +#: usr/local/www/interfaces_lagg_edit.php:174 +#: usr/local/www/interfaces_lagg_edit.php:175 +#: usr/local/www/interfaces_lagg_edit.php:188 +msgid "" +"Supports Cisco EtherChannel. This is a static setup and does not negotiate " +"aggregation with the peer or exchange frames to monitor the link." +msgstr "" +"Cisco EtherChannel destekler. Bu statik bir yapılandırmadır; eş ile toplama " +"anlaşması veya bağlantıyı takip etmek için çerçeve alışverişi yapmaz." + +#: usr/local/www/interfaces_lagg_edit.php:178 +#: usr/local/www/interfaces_lagg_edit.php:179 +#: usr/local/www/interfaces_lagg_edit.php:192 +#, fuzzy +msgid "lacp" +msgstr "lacp" + +#: usr/local/www/interfaces_lagg_edit.php:178 +#: usr/local/www/interfaces_lagg_edit.php:179 +#: usr/local/www/interfaces_lagg_edit.php:192 +msgid "" +"Supports the IEEE 802.3ad Link Aggregation Control Protocol (LACP) and the " +"Marker Protocol. LACP will negotiate a set of aggregable links with the " +"peer in to one or more Link Aggregated Groups. Each LAG is composed of " +"ports of the same speed, set to full-duplex operation. The traffic will be " +"balanced across the ports in the LAG with the greatest total speed, in most " +"cases there will only be one LAG which contains all ports. In the event of " +"changes in physical connectivity, Link Aggregation will quickly converge to " +"a new configuration." +msgstr "" +"IEEE 802.3ad Bağlantı Toplama Kontrol Protokolünü (LACP - Link Aggregation " +"Control Protocol) ve İşaretleme Protokolünü (Marker Protocol) destekler. " +"LACP eş ile bir veya daha fazla Bağlantı Toplama Grubuna (LAG - Link " +"Aggregated Group) bir dizi anlaşılmış bağlantı görüşecektir. Her LAG full-" +"duplex çalışmaya ayarlanmış aynı hızda portlardan oluşur. Trafik LAG'daki " +"portlar arasında dengelenir ve böylece en yüksek toplam hız elde edilir; " +"çoğu durumda tüm portları içeren tek bir LAG olur. Fiziksel " +"bağlanılabilirlik değişikliklerinde Bağlantı Toplama hemen yeni " +"yapılandırmaya geçer." + +#: usr/local/www/interfaces_lagg_edit.php:189 +#: usr/local/www/interfaces_lagg_edit.php:190 +#: usr/local/www/interfaces_lagg_edit.php:203 +msgid "loadbalance" +msgstr "yük dengeleme" + +#: usr/local/www/interfaces_lagg_edit.php:189 +#: usr/local/www/interfaces_lagg_edit.php:190 +#: usr/local/www/interfaces_lagg_edit.php:203 +msgid "" +"Balances outgoing traffic across the active ports based on hashed protocol " +"header information and accepts incoming traffic from any active port. This " +"is a static setup and does not negotiate aggregation with the peer or " +"exchange frames to monitor the link. The hash includes the Ethernet source " +"and destination address, and, if available, the VLAN tag, and the IP source " +"and destination address" +msgstr "" +"Dışarıya giden trafiği protokol başlık bilgisine göre etkin portlar arasında " +"dengeler ve tüm etkin portlardan gelen trafiği kabul eder. Bu statik bir " +"yapılandırmadır; eş ile toplama görüşmesi yapmaz ve bağlantıyı izlemek için " +"çerçeve alışverişinde bulunmaz. Protokol başlık bilgisinde kullanılan " +"değerleme Ethernet kaynak ve hedef adresini, varsa VLAN takısını ve IP " +"kaynak ve hedef adresini içerir." + +#: usr/local/www/interfaces_lagg_edit.php:197 +#: usr/local/www/interfaces_lagg_edit.php:198 +#: usr/local/www/interfaces_lagg_edit.php:211 +msgid "roundrobin" +msgstr "dairesel denetim" + +#: usr/local/www/interfaces_lagg_edit.php:197 +#: usr/local/www/interfaces_lagg_edit.php:198 +#: usr/local/www/interfaces_lagg_edit.php:211 +msgid "" +"Distributes outgoing traffic using a round-robin scheduler through all " +"active ports and accepts incoming traffic from any active port" +msgstr "" +"Dışarı giden trafiği bir dairesel denetim tarifeleyici kullanarak tüm etkin " +"portlar arasında dağıtır ve tüm etkin portlardan gelen trafiği kabul eder." + +#: usr/local/www/interfaces_lagg_edit.php:201 +#: usr/local/www/interfaces_lagg_edit.php:202 +#: usr/local/www/interfaces_lagg_edit.php:215 +msgid "" +"This protocol is intended to do nothing: it disables any traffic without " +"disabling the lagg interface itself" +msgstr "" +"Bu protokol hiçbirşey yapmamak için tasarlanmıştır: LAGG arabirimini " +"kapatmadan tüm trafiği kapatır" + +#: usr/local/www/interfaces_ppps.php:62 usr/local/www/interfaces_ppps.php:62 +msgid "" +"This point-to-point link cannot be deleted because it is still being used as " +"an interface." +msgstr "" +"Bu noktadan noktaya bağlantı bir arabirim olarak kullanıldığından " +"silinemiyor." + +#: usr/local/www/interfaces_ppps.php:78 usr/local/www/interfaces_ppps.php:78 +msgid "Interfaces: PPPs" +msgstr "Arabirimler: PPPler" + +#: usr/local/www/interfaces_ppps.php:109 usr/local/www/interfaces_ppps.php:110 +#: usr/local/www/interfaces_ppps.php:110 +msgid "Interface(s)/Port(s)" +msgstr "Arabirim(ler)/Port(lar)" + +#: usr/local/www/interfaces_ppps.php:132 usr/local/www/interfaces_ppps.php:133 +#: usr/local/www/interfaces_ppps.php:133 +msgid "Do you really want to delete this PPP interface?" +msgstr "Bu PPP arabirimini silmek istediğinize emin misiniz?" + +#: usr/local/www/interfaces_ppps_edit.php:182 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:191 +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/interfaces_ppps_edit.php:188 +#: usr/local/www/interfaces_ppps_edit.php:194 +#: usr/local/www/interfaces_ppps_edit.php:197 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +msgid "Link Interface(s)" +msgstr "Bağlantı Arabirim(ler)i" + +#: usr/local/www/interfaces_ppps_edit.php:199 +#: usr/local/www/interfaces_ppps_edit.php:202 +#: usr/local/www/services_dhcp.php:587 usr/local/www/services_dhcpv6.php:522 +#: usr/local/www/services_dhcp.php:600 usr/local/www/services_dhcpv6.php:596 +#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcpv6.php:527 +#: usr/local/www/interfaces_ppps_edit.php:205 +#: usr/local/www/interfaces_ppps_edit.php:208 +#: usr/local/www/services_dhcp.php:720 usr/local/www/services_dhcpv6.php:542 +msgid "Subnet" +msgstr "Altağ" + +#: usr/local/www/interfaces_ppps_edit.php:207 +#: usr/local/www/interfaces_ppps_edit.php:213 +msgid "Please choose a Link Type." +msgstr "Bağlantı türü seçiniz." + +#: usr/local/www/interfaces_ppps_edit.php:211 +#: usr/local/www/interfaces_ppps_edit.php:217 +msgid "" +"Multilink connections (MLPPP) using the PPP link type is not currently " +"supported. Please select only one Link Interface." +msgstr "" +"PPP bağlantı türüyle çoklu bağlantı (MLPPP) henüz desteklenmiyor. Lütfen " +"sadece bir bağlantı arabirimi seçin." + +#: usr/local/www/interfaces_ppps_edit.php:213 +#: usr/local/www/interfaces_ppps_edit.php:219 +msgid "The Service name contains invalid characters." +msgstr "Servis adı geçersiz karakterler içeriyor." + +#: usr/local/www/interfaces_ppps_edit.php:215 +#: usr/local/www/interfaces_ppps_edit.php:221 +msgid "Do not specify both a Service name and a NULL Service name." +msgstr "Hem bir servis adı hem de Boş servis adı belirtmeyin." + +#: usr/local/www/interfaces_ppps_edit.php:229 +#: usr/local/www/interfaces_ppps_edit.php:235 +msgid "" +"A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE " +"Periodic reset fields." +msgstr "" +"Özel PPPoE düzenli sıfırlama alanlarında çeçerli bir PPPoE sıfırlama ayı " +"(1-12) belirtmelisiniz." + +#: usr/local/www/interfaces_ppps_edit.php:231 +#: usr/local/www/interfaces_ppps_edit.php:237 +msgid "" +"A valid PPPoE reset day of month must be specified (1-31) in the Custom " +"PPPoE Periodic reset fields. No checks are done on valid # of days per month" +msgstr "" +"Özel PPPoE düzenli sıfırlama alanlarında çeçerli bir PPPoE sıfırlama günü " +"(1-31) belirtmelisiniz. Her ayın farklı sayıda günden oluştuğunu da " +"unutmayın" + +#: usr/local/www/interfaces_ppps_edit.php:233 +#: usr/local/www/interfaces_ppps_edit.php:239 +msgid "" +"A valid PPPoE reset year must be specified. Don't select a year in the past!" +msgstr "" +"Geçerli bir PPPoE sıfırlama yılı giriniz. Geçmişteki bir yıl " +"belirtilmemelidir!" + +#: usr/local/www/interfaces_ppps_edit.php:238 +#: usr/local/www/interfaces_ppps_edit.php:244 +#, php-format +msgid "A valid local IP address must be specified for %s." +msgstr "%s için geçerli bir yerel IP adresi belirtilmelidir." + +#: usr/local/www/interfaces_ppps_edit.php:240 +#: usr/local/www/interfaces_ppps_edit.php:246 +#, php-format +msgid "A valid gateway IP address OR hostname must be specified for %s." +msgstr "%s geçerli bir ağ geçidi IP adresi ya da host adı tanımlanmalıdır." + +#: usr/local/www/interfaces_ppps_edit.php:242 +#: usr/local/www/interfaces_ppps_edit.php:248 +#, php-format +msgid "The bandwidth value for %s must be an integer." +msgstr "%s bant genişliği tamsayı olarak girilmelidir." + +#: usr/local/www/interfaces_ppps_edit.php:244 +#: usr/local/www/interfaces_ppps_edit.php:250 +#, php-format +msgid "The MTU for %s must be greater than 576 bytes." +msgstr "%s MTU değeri 576 bayttan büyük olmalıdır." + +#: usr/local/www/interfaces_ppps_edit.php:246 +#: usr/local/www/interfaces_ppps_edit.php:252 +#, php-format +msgid "The MRU for %s must be greater than 576 bytes." +msgstr "%s MRU değeri 576 bayttan büyük olmalıdır." + +#: usr/local/www/interfaces_ppps_edit.php:381 +#: usr/local/www/system_authservers.php:577 +#: usr/local/www/interfaces_ppps_edit.php:382 +#: usr/local/www/system_authservers.php:582 +#: usr/local/www/interfaces_ppps_edit.php:388 +#: usr/local/www/system_authservers.php:589 +msgid "Select" +msgstr "Seç" + +#: usr/local/www/interfaces_ppps_edit.php:398 +#: usr/local/www/interfaces_ppps_edit.php:399 +#: usr/local/www/interfaces_ppps_edit.php:405 +msgid "PPPs configuration" +msgstr "PPP yapılandırması" + +#: usr/local/www/interfaces_ppps_edit.php:401 +#: usr/local/www/interfaces_ppps_edit.php:402 +#: usr/local/www/interfaces_ppps_edit.php:408 +msgid "Link Type" +msgstr "Bağlantı Türü" + +#: usr/local/www/interfaces_ppps_edit.php:416 +#: usr/local/www/interfaces_ppps_edit.php:417 +#: usr/local/www/interfaces_ppps_edit.php:423 +msgid "Link interface(s)" +msgstr "Bağlantı arabirim(ler)i" + +#: usr/local/www/interfaces_ppps_edit.php:422 +#: usr/local/www/interfaces_ppps_edit.php:423 +#: usr/local/www/interfaces_ppps_edit.php:429 +msgid "Select at least two interfaces for Multilink (MLPPP) connections." +msgstr "Çoklu bağlantı (MLPPP) için en az iki arabirim seçmelisiniz." + +#: usr/local/www/interfaces_ppps_edit.php:470 +#: usr/local/www/interfaces_ppps_edit.php:471 +#: usr/local/www/interfaces_ppps_edit.php:477 +msgid "" +"You may enter a description here for your reference. Description will appear " +"in the \"Interfaces Assign\" select lists." +msgstr "" +"Buraya kendiniz için bir açıklama girebilirsiniz. Açıklama \"Arabirim " +"Ataması\" seçim listelerinde çıkar." + +#: usr/local/www/interfaces_ppps_edit.php:526 +#: usr/local/www/interfaces_ppps_edit.php:527 +#: usr/local/www/interfaces_ppps_edit.php:533 +msgid "Note: Typically *99# for GSM networks and #777 for CDMA networks" +msgstr "Not: Genelde, GSM ağları için *99# ve CDMA ağları için #777'dir." + +#: usr/local/www/interfaces_ppps_edit.php:540 +#: usr/local/www/interfaces_ppps_edit.php:541 +#: usr/local/www/interfaces_ppps_edit.php:547 +msgid "APN number (optional)" +msgstr "APN numarası (isteğe bağlı)" + +#: usr/local/www/interfaces_ppps_edit.php:543 +#: usr/local/www/interfaces_ppps_edit.php:544 +#: usr/local/www/interfaces_ppps_edit.php:550 +msgid "" +"Note: Defaults to 1 if you set APN above. Ignored if you set no APN above." +msgstr "" +"Not: APN belirttiyseniz varsayılan olarak 1'dir. APN belirtmediyseniz " +"gözardı edilir." + +#: usr/local/www/interfaces_ppps_edit.php:547 +#: usr/local/www/interfaces_ppps_edit.php:548 +#: usr/local/www/interfaces_ppps_edit.php:554 +msgid "SIM PIN" +msgstr "SIM PIN" + +#: usr/local/www/interfaces_ppps_edit.php:554 +#: usr/local/www/interfaces_ppps_edit.php:555 +#: usr/local/www/interfaces_ppps_edit.php:561 +msgid "SIM PIN wait" +msgstr "SIM PIN beklemesi" + +#: usr/local/www/interfaces_ppps_edit.php:557 +#: usr/local/www/interfaces_ppps_edit.php:558 +#: usr/local/www/interfaces_ppps_edit.php:564 +msgid "" +"Note: Time to wait for SIM to discover network after PIN is sent to SIM " +"(seconds)." +msgstr "" +"Not: SIM kartının PIN girildikten sonra ağı bulması için beklenecek süre " +"(saniye cinsinden)." + +#: usr/local/www/interfaces_ppps_edit.php:561 +#: usr/local/www/interfaces_ppps_edit.php:562 +#: usr/local/www/interfaces_ppps_edit.php:568 +msgid "Init String" +msgstr "Açılış Dizesi" + +#: usr/local/www/interfaces_ppps_edit.php:564 +#: usr/local/www/interfaces_ppps_edit.php:565 +#: usr/local/www/interfaces_ppps_edit.php:571 +msgid "" +"Note: Enter the modem initialization string here. Do NOT include the \"AT\" " +"string at the beginning of the command. Many modern USB 3G modems don't need " +"an initialization string." +msgstr "" +"Not: Buraya modem açılış dizesini girin. Komutun başındaki \"AT\" dizesini " +"yazmayın. Çoğu modern USB 3G modemin bir açılış dizesine ihtiyacı yoktur." + +#: usr/local/www/interfaces_ppps_edit.php:569 +#: usr/local/www/interfaces_ppps_edit.php:570 +#: usr/local/www/interfaces_ppps_edit.php:576 +msgid "Connection Timeout" +msgstr "Bağlantı Zaman Aşımı" + +#: usr/local/www/interfaces_ppps_edit.php:572 +#: usr/local/www/interfaces_ppps_edit.php:573 +#: usr/local/www/interfaces_ppps_edit.php:579 +msgid "" +"Note: Enter timeout in seconds for connection to be established (sec.) " +"Default is 45 sec." +msgstr "" +"Not: Bağlantının kurulması için en fazla beklenmesi gereken süreyi saniye " +"cinsinden girin. Varsayılan olarak 45 saniyedir." + +#: usr/local/www/interfaces_ppps_edit.php:576 +#: usr/local/www/interfaces_ppps_edit.php:577 +#: usr/local/www/interfaces_ppps_edit.php:583 +msgid "Uptime Logging" +msgstr "Geçen Süre Günlükleme" + +#: usr/local/www/interfaces_ppps_edit.php:578 +#: usr/local/www/interfaces_ppps_edit.php:579 +#: usr/local/www/interfaces_ppps_edit.php:585 +msgid "Enable persistent logging of connection uptime." +msgstr "Bağlantı süresinin kalıcı olarak günlüklenmesini aç" + +#: usr/local/www/interfaces_ppps_edit.php:579 +#: usr/local/www/interfaces_ppps_edit.php:580 +#: usr/local/www/interfaces_ppps_edit.php:586 +msgid "" +"This option causes cumulative uptime to be recorded and displayed on the " +"Status Interfaces page." +msgstr "" +"Bu seçenek toplam etkinlik süresinin kaydedilmesini ve Arabirim Durumları " +"sayfasında gösterilmesini açar." + +#: usr/local/www/interfaces_ppps_edit.php:591 +#: usr/local/www/interfaces_ppps_edit.php:592 +#: usr/local/www/interfaces_ppps_edit.php:598 +msgid "Configure a NULL Service name" +msgstr "Boş servis adını yapılandır" + +#: usr/local/www/interfaces_ppps_edit.php:592 +#: usr/local/www/interfaces_ppps_edit.php:593 +#: usr/local/www/interfaces_ppps_edit.php:599 +msgid "" +"Hint: this field can usually be left empty. Service name will not be " +"configured if this field is empty. Check the \"Configure NULL\" box to " +"configure a blank Service name." +msgstr "" +"İpucu: Bu alan genellikle boş bırakılabilir ve boş bırakıldığında servis adı " +"yapılandırılmaz. Boş bir servis adını yapılandırmak için \"Boş servisi " +"yapılandır\" kutusunu işaretleyin." + +#: usr/local/www/interfaces_ppps_edit.php:652 usr/local/www/vpn_pppoe.php:102 +#: usr/local/www/diag_ipsec.php:91 usr/local/www/diag_ipsec.php:102 +#: usr/local/www/vpn_pppoe.php:103 usr/local/www/diag_ipsec.php:103 +#: usr/local/www/interfaces_ppps_edit.php:653 usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/interfaces_ppps_edit.php:659 usr/local/www/diag_ipsec.php:105 +msgid "Local IP" +msgstr "Yerel IP" + +#: usr/local/www/interfaces_ppps_edit.php:667 +#: usr/local/www/interfaces_ppps_edit.php:668 +#: usr/local/www/interfaces_ppps_edit.php:674 +msgid "IP Address OR Hostname" +msgstr "IP Adresi ya da Host Adı" + +#: usr/local/www/interfaces_ppps_edit.php:678 +#: usr/local/www/interfaces_ppps_edit.php:679 +#: usr/local/www/interfaces_ppps_edit.php:685 +msgid "Dial On Demand" +msgstr "Gerektiğinde Arama" + +#: usr/local/www/interfaces_ppps_edit.php:680 +#: usr/local/www/interfaces_ppps_edit.php:681 +#: usr/local/www/interfaces_ppps_edit.php:687 +msgid "Enable Dial-on-Demand mode" +msgstr "Gerektiğinde Arama kipini etkinleştir" + +#: usr/local/www/interfaces_ppps_edit.php:681 +#: usr/local/www/interfaces_ppps_edit.php:682 +#: usr/local/www/interfaces_ppps_edit.php:688 +msgid "" +"This option causes the interface to operate in dial-on-demand mode. Do NOT " +"enable if you want your link to be always up. The interface is configured, " +"but the actual connection of the link is delayed until qualifying outgoing " +"traffic is detected." +msgstr "" +"Bu seçenek arabiriminde gerektiğinde arama kipinde çalışmasını sağlar. Eğer " +"bağlantının sürekli açık olmasını istiyorsanız bu seçeneği AÇMAYIN. Arabirim " +"yapılandırılır ama dışarı trafik çıkana kadar bağlantı sağlanmaz." + +#: usr/local/www/interfaces_ppps_edit.php:686 +#: usr/local/www/interfaces_ppps_edit.php:687 +#: usr/local/www/interfaces_ppps_edit.php:693 +msgid "Idle Timeout" +msgstr "Boşta Kalma Zaman Aşımı" + +#: usr/local/www/interfaces_ppps_edit.php:688 +#: usr/local/www/interfaces_ppps_edit.php:689 +#: usr/local/www/interfaces_ppps_edit.php:695 +msgid "(seconds) Default is 0, which disables the timeout feature." +msgstr "" +"(Saniye) cinsindendir. Varsayılan değer olan 0 zaman aşımı süresini devre " +"dışı bırakır." + +#: usr/local/www/interfaces_ppps_edit.php:689 +#: usr/local/www/interfaces_ppps_edit.php:690 +#: usr/local/www/interfaces_ppps_edit.php:696 +msgid "" +"If no incoming or outgoing packets are transmitted for the entered number of " +"seconds the connection is brought down." +msgstr "" +"Girilen süre boyunca gelen yada giden paket trafiği oluşmazsa bağlantı " +"kapatılır." + +#: usr/local/www/interfaces_ppps_edit.php:690 +#: usr/local/www/interfaces_ppps_edit.php:691 +#: usr/local/www/interfaces_ppps_edit.php:697 +msgid "" +"When the idle timeout occurs, if the dial-on-demand option is enabled, mpd " +"goes back into dial-on-demand mode. Otherwise, the interface is brought down " +"and all associated routes removed." +msgstr "" +"Boşta kalma zamanı dolduğunda, eğer gerektiğinde arama özelliği açıksa mpd " +"gerektiğinde arama kipine döner. Aksi taktirde bağlantı kapatılır ve " +"ilişkili tüm rotalar kaldırılır." + +#: usr/local/www/interfaces_ppps_edit.php:694 +#: usr/local/www/vpn_openvpn_client.php:787 +#: usr/local/www/vpn_openvpn_server.php:1077 +#: usr/local/www/vpn_openvpn_server.php:1219 +#: usr/local/www/vpn_openvpn_client.php:792 +#: usr/local/www/interfaces_ppps_edit.php:695 +#: usr/local/www/vpn_openvpn_server.php:1261 +#: usr/local/www/vpn_openvpn_client.php:838 +#: usr/local/www/vpn_openvpn_client.php:857 +#: usr/local/www/interfaces_ppps_edit.php:701 +#: usr/local/www/vpn_openvpn_server.php:1288 +msgid "Compression" +msgstr "Sıkıştırma" + +#: usr/local/www/interfaces_ppps_edit.php:696 +#: usr/local/www/interfaces_ppps_edit.php:697 +#: usr/local/www/interfaces_ppps_edit.php:703 +msgid "Disable vjcomp(compression) (auto-negotiated by default)." +msgstr "" +"vjcomp'u (sıkıştırma) devre dışı bırak. Varsayılan olarak karşı taraftan " +"gelen değere göre davranılır." + +#: usr/local/www/interfaces_ppps_edit.php:697 +#: usr/local/www/interfaces_ppps_edit.php:698 +#: usr/local/www/interfaces_ppps_edit.php:704 +msgid "" +"This option enables Van Jacobson TCP header compression, which saves several " +"bytes per TCP data packet. You almost always want this option. This " +"compression ineffective for TCP connections with enabled modern extensions " +"like time stamping or SACK, which modify TCP options between sequential " +"packets." +msgstr "" +"Bu seçenek Van Jacobson TCP başlık sıkıştırmasını açar, bu da her TCP veri " +"paketinde birkaç bayt kazandırır. Bu seçenek neredeyse her zaman açık " +"olmalıdır. Ardışık paketlerde TCP seçeneklerini değiştiren zaman damgası ve " +"SACK gibi modern eklentileri açık TCP bağlantılarında etkisizdir." + +#: usr/local/www/interfaces_ppps_edit.php:703 +#: usr/local/www/interfaces_ppps_edit.php:704 +#: usr/local/www/interfaces_ppps_edit.php:710 +#, fuzzy +msgid "TCPmssFix" +msgstr "TCPmssFix" + +#: usr/local/www/interfaces_ppps_edit.php:705 +#: usr/local/www/interfaces_ppps_edit.php:706 +#: usr/local/www/interfaces_ppps_edit.php:712 +msgid "Disable tcpmssfix (enabled by default)." +msgstr "tcpmssfix'i kapat (varsayılan olarak etkin)." + +#: usr/local/www/interfaces_ppps_edit.php:706 +#: usr/local/www/interfaces_ppps_edit.php:707 +#: usr/local/www/interfaces_ppps_edit.php:713 +msgid "" +"This option causes mpd to adjust incoming and outgoing TCP SYN segments so " +"that the requested maximum segment size is not greater than the amount " +"allowed by the interface MTU. This is necessary in many setups to avoid " +"problems caused by routers that drop ICMP Datagram Too Big messages. Without " +"these messages, the originating machine sends data, it passes the rogue " +"router then hits a machine that has an MTU that is not big enough for the " +"data. Because the IP Don't Fragment option is set, this machine sends an " +"ICMP Datagram Too Big message back to the originator and drops the packet. " +"The rogue router drops the ICMP message and the originator never gets to " +"discover that it must reduce the fragment size or drop the IP Don't Fragment " +"option from its outgoing data." +msgstr "" +"Bu seçenek mpd'nin gelen ve giden TCP SYN paketlerini istenen en yüksek " +"paket boyutunun arabirim MTU'sunun izin verdiğinden büyük olmamasını " +"sağlayacak şekilde değiştirmesini sağlar. Bu ayar, \"ICMP Datagram Çok Büyük\" " +"mesajlarını silen yönlendiricilerin (router) neden olduğu problemleri " +"engellemek için gereklidir. Bu mesajlar olmadığında, paketin çıktığı makine " +"veriyi gönderir, paket yönlendiriciden gelen ve MTU'su veri için yeterince " +"yüksek olmayan makineye ulaşır, IP Bölmeme (IP Don't Fragment) seçeneği açık " +"olduğu için de makine geriye ICMP Datagram Çok Büyük yanıtıyla paketi " +"siler. Yönlendirici ise bu ICMP mesajını sildiğinden ilk paketi gönderen " +"makine parça boyutunu küçültmesi ya da IP Bölmeme seçeneğini kaldırması " +"gerektiğini öğrenemez." + +#: usr/local/www/interfaces_ppps_edit.php:714 +#: usr/local/www/interfaces_ppps_edit.php:715 +#: usr/local/www/interfaces_ppps_edit.php:721 +#, fuzzy +msgid "ShortSeq" +msgstr "ShortSeq" + +#: usr/local/www/interfaces_ppps_edit.php:716 +#: usr/local/www/interfaces_ppps_edit.php:717 +#: usr/local/www/interfaces_ppps_edit.php:723 +msgid "Disable shortseq (auto-negotiated by default)." +msgstr "" +"shortseq'i kapat (varsayılan olarak karşı tarafla anlaşarak belirlenir)." + +#: usr/local/www/interfaces_ppps_edit.php:717 +#: usr/local/www/interfaces_ppps_edit.php:718 +#: usr/local/www/interfaces_ppps_edit.php:724 +msgid "" +"This option is only meaningful if multi-link PPP is negotiated. It " +"proscribes shorter multi-link fragment headers, saving two bytes on every " +"frame. It is not necessary to disable this for connections that are not " +"multi-link." +msgstr "" +"Bu seçenek sadece çoklu PPP bağlantısı açıksa anlamlıdır. Daha kısa çoklu " +"bağlantı parça başlıkları oluşturarak her çerçevede 2 bayt kazanır. Bağlantı " +"çoklu türde değilse kapatmaya gerek yoktur." + +#: usr/local/www/interfaces_ppps_edit.php:722 +#: usr/local/www/interfaces_ppps_edit.php:723 +#: usr/local/www/interfaces_ppps_edit.php:729 +#, fuzzy +msgid "ACFComp" +msgstr "ACFComp" + +#: usr/local/www/interfaces_ppps_edit.php:724 +#: usr/local/www/interfaces_ppps_edit.php:725 +#: usr/local/www/interfaces_ppps_edit.php:731 +msgid "Disable acfcomp (compression) (auto-negotiated by default)." +msgstr "" +"ACFComp'u (sıkıştırma) kapat (varsayılan olarak eşle anlaşılarak atanır)." + +#: usr/local/www/interfaces_ppps_edit.php:725 +#: usr/local/www/interfaces_ppps_edit.php:726 +#: usr/local/www/interfaces_ppps_edit.php:732 +msgid "" +"Address and control field compression. This option only applies to " +"asynchronous link types. It saves two bytes per frame." +msgstr "" +"Adres ve kontrol alanı sıkıştırması. Bu seçenek sadece asenkron bağlantı " +"türlerinde geçerlidir. Çerçeve başına 2 bayt kazanır." + +#: usr/local/www/interfaces_ppps_edit.php:729 +#: usr/local/www/interfaces_ppps_edit.php:730 +#: usr/local/www/interfaces_ppps_edit.php:736 +#, fuzzy +msgid "ProtoComp" +msgstr "ProtoComp" + +#: usr/local/www/interfaces_ppps_edit.php:731 +#: usr/local/www/interfaces_ppps_edit.php:732 +#: usr/local/www/interfaces_ppps_edit.php:738 +msgid "Disable protocomp (compression) (auto-negotiated by default)." +msgstr "" +"ProtoComp'u (sıkıştırma) kapat (varsayılan olarak eşle anlaşılarak atanır)." + +#: usr/local/www/interfaces_ppps_edit.php:732 +#: usr/local/www/interfaces_ppps_edit.php:733 +#: usr/local/www/interfaces_ppps_edit.php:739 +msgid "" +"Protocol field compression. This option saves one byte per frame for most " +"frames." +msgstr "Protokol alanı sıkıştırması. Bu seçenek çoğu çerçevede 1 bayt kazanır." + +#: usr/local/www/interfaces_ppps_edit.php:746 +#: usr/local/www/interfaces_ppps_edit.php:747 +#: usr/local/www/interfaces_ppps_edit.php:753 +msgid "Link Parameters" +msgstr "Bağlantı Paremetreleri" + +#: usr/local/www/interfaces_ppps_edit.php:753 +#: usr/local/www/interfaces_ppps_edit.php:754 +#: usr/local/www/interfaces_ppps_edit.php:760 +msgid "" +"Set ONLY for MLPPP connections and ONLY when links have different bandwidths." +msgstr "" +"Sadece MLPPP bağlantılarında ve sadece farklı bant genişliğine sahip hatlar " +"var ise kullanınız." + +#: usr/local/www/interfaces_ppps_edit.php:760 +#: usr/local/www/interfaces_ppps_edit.php:761 +#: usr/local/www/interfaces_ppps_edit.php:767 +msgid "MTU will default to 1492." +msgstr "MTU varsayılan değeri 1492 olarak atanacak." + +#: usr/local/www/interfaces_ppps_edit.php:764 +#: usr/local/www/interfaces_ppps_edit.php:765 +#: usr/local/www/interfaces_ppps_edit.php:771 +msgid "MRU" +msgstr "MRU" + +#: usr/local/www/interfaces_ppps_edit.php:767 +#: usr/local/www/interfaces_ppps_edit.php:774 +#: usr/local/www/interfaces_ppps_edit.php:768 +#: usr/local/www/interfaces_ppps_edit.php:775 +#: usr/local/www/interfaces_ppps_edit.php:774 +#: usr/local/www/interfaces_ppps_edit.php:781 +msgid "will be auto-negotiated by default." +msgstr "varsayılan olarak karşı tarafla anlaşılarak atanır." + +#: usr/local/www/interfaces_ppps_edit.php:771 +#: usr/local/www/interfaces_ppps_edit.php:772 +#: usr/local/www/interfaces_ppps_edit.php:778 +msgid "MRRU" +msgstr "MRRU" + +#: usr/local/www/interfaces_ppps_edit.php:774 +#: usr/local/www/interfaces_ppps_edit.php:775 +#: usr/local/www/interfaces_ppps_edit.php:781 +msgid "Set ONLY for MLPPP connections." +msgstr "Sadece MLPPP bağlantıları için açın." + +#: usr/local/www/interfaces_qinq.php:64 usr/local/www/interfaces_qinq.php:66 +msgid "" +"This QinQ cannot be deleted because it is still being used as an interface." +msgstr "Bir arabirim olarak kullanıldığından bu QinQ silinemiyor." + +#: usr/local/www/interfaces_qinq.php:86 +#: usr/local/www/interfaces_qinq_edit.php:39 +#: usr/local/www/interfaces_qinq.php:89 +#: usr/local/www/interfaces_qinq_edit.php:39 +#, fuzzy +msgid "QinQ" +msgstr "QinQ" + +#: usr/local/www/interfaces_qinq.php:117 +#: usr/local/www/interfaces_qinq_edit.php:356 +#: usr/local/www/interfaces_qinq_edit.php:357 +#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:121 +#: usr/local/www/interfaces_qinq_edit.php:360 +msgid "Tag" +msgstr "Başlık" + +#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:119 +#: usr/local/www/interfaces_qinq.php:122 +msgid "QinQ members" +msgstr "QinQ üyeleri" + +#: usr/local/www/interfaces_qinq.php:142 usr/local/www/interfaces_qinq.php:143 +#: usr/local/www/interfaces_qinq.php:146 +msgid "Do you really want to delete this QinQ?" +msgstr "Bu QinQ'i silmek istediğinize emin misiniz?" + +#: usr/local/www/interfaces_qinq.php:153 usr/local/www/interfaces_qinq.php:154 +#: usr/local/www/interfaces_qinq.php:157 +#, php-format +msgid "" +"Not all drivers/NICs support 802.1Q QinQ tagging properly. On cards that do " +"not explicitly support it, QinQ tagging will still work, but the reduced MTU " +"may cause problems. See the %s handbook for information on supported cards." +msgstr "" +"Tüm sürücüler ve NICler 802.1q QinQ başlıklarını desteklemez. Özel olarak " +"desteklediği belirtilmeyen kartlarda QinQ yine de çalışır, ama düşen MTU " +"değeri problem çıkarabilir. Desteklenen kartlar için %s El Kitabına bakın." + +#: usr/local/www/interfaces_qinq_edit.php:84 +#: usr/local/www/interfaces_qinq_edit.php:85 +#: usr/local/www/interfaces_qinq_edit.php:85 +msgid "First level tag cannot be empty." +msgstr "Birinci seviye başlığı boş olamaz." + +#: usr/local/www/interfaces_qinq_edit.php:86 +#: usr/local/www/interfaces_qinq_edit.php:87 +#: usr/local/www/interfaces_qinq_edit.php:87 +msgid "" +"You are editing an existing entry and modifying the first level tag is not " +"allowed." +msgstr "" +"Varolan bir girdiyi düzenliyorsunuz ve ilk seviye başlığın düzenlenmesine " +"izin verilmemektedir." + +#: usr/local/www/interfaces_qinq_edit.php:88 +#: usr/local/www/interfaces_qinq_edit.php:89 +#: usr/local/www/interfaces_qinq_edit.php:89 +msgid "" +"You are editing an existing entry and modifying the interface is not allowed." +msgstr "" +"Varolan bir girdiyi düzenliyorsunuz ve arabirimi değiştirmeye izin verilmez." + +#: usr/local/www/interfaces_qinq_edit.php:92 +#: usr/local/www/interfaces_qinq_edit.php:93 +#: usr/local/www/interfaces_qinq_edit.php:93 +msgid "QinQ level already exists for this interface, edit it!" +msgstr "QinQ seviyesi bu arabirim için zaten tanımlı, düzenleyiniz!" + +#: usr/local/www/interfaces_qinq_edit.php:96 +#: usr/local/www/interfaces_qinq_edit.php:97 +#: usr/local/www/interfaces_qinq_edit.php:97 +msgid "" +"A normal VLAN exists with this tag please remove it to use this tag for QinQ " +"first level." +msgstr "" +"Bu başlığı taşıyan normal bir VLAN zaten var, bu başlığı QinQ ilk seviye " +"olarak kullanmak için onu silmelisiniz." + +#: usr/local/www/interfaces_qinq_edit.php:123 +#: usr/local/www/interfaces_qinq_edit.php:133 +#: usr/local/www/interfaces_qinq_edit.php:124 +#: usr/local/www/interfaces_qinq_edit.php:134 +#: usr/local/www/interfaces_qinq_edit.php:124 +#: usr/local/www/interfaces_qinq_edit.php:134 +msgid "Tags can contain only numbers or a range in format #-#." +msgstr "Başlıklar sadece sayı ve #-# biçiminde aralık içerebilir." + +#: usr/local/www/interfaces_qinq_edit.php:193 +#: usr/local/www/interfaces_qinq_edit.php:194 +#: usr/local/www/interfaces_qinq_edit.php:197 +msgid "QinQ VLANs group" +msgstr "QinQ VLANlar grubu" + +#: usr/local/www/interfaces_qinq_edit.php:269 +#: usr/local/www/interfaces_qinq_edit.php:270 +#: usr/local/www/interfaces_qinq_edit.php:273 +msgid "members" +msgstr "üyeler" + +#: usr/local/www/interfaces_qinq_edit.php:273 +#: usr/local/www/interfaces_qinq_edit.php:274 +#: usr/local/www/interfaces_qinq_edit.php:277 +msgid "detail" +msgstr "detay" + +#: usr/local/www/interfaces_qinq_edit.php:285 +#: usr/local/www/interfaces_qinq_edit.php:286 +#: usr/local/www/interfaces_qinq_edit.php:289 +msgid "Interface QinQ Edit" +msgstr "Arabirim QinQ'ini düzenle" + +#: usr/local/www/interfaces_qinq_edit.php:305 +#: usr/local/www/interfaces_qinq_edit.php:306 +#: usr/local/www/interfaces_qinq_edit.php:309 +msgid "Only QinQ capable interfaces will be shown." +msgstr "Sadece QinQ uyumlu arabirimler görüntüleniyor." + +#: usr/local/www/interfaces_qinq_edit.php:308 +#: usr/local/www/interfaces_qinq_edit.php:309 +#: usr/local/www/interfaces_qinq_edit.php:312 +msgid "First level tag" +msgstr "İlk seviye başlığı" + +#: usr/local/www/interfaces_qinq_edit.php:313 +#: usr/local/www/interfaces_qinq_edit.php:314 +#: usr/local/www/interfaces_qinq_edit.php:317 +msgid "" +"This is the first level VLAN tag. On top of this are stacked the member " +"VLANs defined below." +msgstr "" +"İlk seviye VLAN başlığıdır. Bunun üzerine aşağıda tanımlanan üye VLAN " +"iliştirilir." + +#: usr/local/www/interfaces_qinq_edit.php:333 +#: usr/local/www/interfaces_qinq_edit.php:334 +#: usr/local/www/interfaces_qinq_edit.php:337 +msgid "" +"Adds interface to QinQ interface groups so you can write filter rules easily." +msgstr "" +"Arabirimi QinQ arabirim grubuna ekleyerek filtreleme kuralı yazmayı " +"kolaylaştırır." + +#: usr/local/www/interfaces_qinq_edit.php:350 +#: usr/local/www/interfaces_qinq_edit.php:351 +#: usr/local/www/interfaces_qinq_edit.php:354 +msgid "" +"You can specify ranges in the input below. The format is pretty simple i.e " +"9-100 or 10.20..." +msgstr "" +"Aşağıdaki giriş alanında aralık belirtebilirsiniz. Yapısı basittir, 9-100 " +"veya 10.20... biçiminde yazabilirsiniz." + +#: usr/local/www/interfaces_wireless.php:63 +#: usr/local/www/interfaces_wireless.php:65 +msgid "" +"This wireless clone cannot be deleted because it is assigned as an interface." +msgstr "Bu kablosuz klonu bir arabirim olarak atandığından silinemez." + +#: usr/local/www/interfaces_wireless.php:124 +#: usr/local/www/interfaces_wireless.php:125 +#: usr/local/www/interfaces_wireless.php:127 +msgid "Do you really want to delete this wireless clone?" +msgstr "Bu kablosuz klonunu silmek istediğinize emin misiniz?" + +#: usr/local/www/interfaces_wireless.php:135 +#: usr/local/www/interfaces_wireless.php:136 +#: usr/local/www/interfaces_wireless.php:138 +msgid "" +"Here you can configure clones of wireless interfaces, which can be assigned " +"as separate independent interfaces. Only available on wireless chipsets that " +"support this, with limitations on the number that can be created in each " +"mode." +msgstr "" +"Bu alandan kablosuz arabirimlerin bağımsız arabirim olarak atanacak " +"klonlarını yapılandırabilirsiniz. Sadece bu özelliği destekleyen " +"arabirimlerde, her kipte oluşturulabilecek klon sayısı sınırlı olmak " +"kaydıyla, çalışır." + +#: usr/local/www/interfaces_wireless_edit.php:116 +#: usr/local/www/interfaces_wireless_edit.php:118 +msgid "" +"This wireless clone cannot be modified because it is still assigned as an " +"interface." +msgstr "Bir arabirim olarak kullanıldığından bu kablosuz klonu değiştirilemez." + +#: usr/local/www/interfaces_wireless_edit.php:118 +#: usr/local/www/interfaces_wireless_edit.php:120 +msgid "" +"Use the configuration page for the assigned interface to change the mode." +msgstr "" +"Kipi değiştirmek için atanmış arabirimin yapılandırma sayfasını kullanınız." + +#: usr/local/www/interfaces_wireless_edit.php:123 +#: usr/local/www/interfaces_wireless_edit.php:125 +#, php-format +msgid "" +"Error creating interface with mode %1$s. The %2$s interface may not support " +"creating more clones with the selected mode." +msgstr "" +"%1$s kipinde arabirim oluşturulurken hata oluştu. %2$s arabirimi seçili " +"kipte daha fazla klon oluşturulmasını desteklemiyor olabilir." + +#: usr/local/www/interfaces_wireless_edit.php:128 +#: usr/local/www/interfaces_wireless_edit.php:130 +#, php-format +msgid "Created with id %s" +msgstr "%s kimliği ile oluşturuldu." + +#: usr/local/www/interfaces_wireless_edit.php:131 +#: usr/local/www/interfaces_wireless_edit.php:133 +msgid "Created without id" +msgstr "Kimlik olmadan oluşturuldu." + +#: usr/local/www/interfaces_wireless_edit.php:156 +#: usr/local/www/interfaces_wireless_edit.php:158 +msgid "Wireless clone configuration" +msgstr "Kablosuz klonu yapılandırması" + +#: usr/local/www/load_balancer_monitor.php:72 +#: usr/local/www/load_balancer_monitor.php:72 +msgid "" +"This entry cannot be deleted because it is still referenced by at least one " +"pool." +msgstr "Bu girdi halen en az bir havuz tarafından kullanıldığı için silinemez." + +#: usr/local/www/load_balancer_monitor.php:102 +#: usr/local/www/load_balancer_relay_protocol.php:114 +#: usr/local/www/load_balancer_setting.php:111 +#: usr/local/www/load_balancer_setting.php:110 +#: usr/local/www/load_balancer_monitor.php:100 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/load_balancer_relay_protocol.php:112 +#: usr/local/www/load_balancer_setting.php:110 +#: usr/local/www/load_balancer_monitor.php:100 +msgid "The load balancer configuration has been changed" +msgstr "Yük Dengeleyici yapılandırması değiştirildi." + +#: usr/local/www/vpn_pppoe.php:96 usr/local/www/vpn_pppoe.php:97 +#: usr/local/www/vpn_pppoe.php:98 +msgid "The PPPoE entry list has been changed" +msgstr "PPPoE girdi listesi değiştirildi." + +#: usr/local/www/vpn_pppoe.php:103 +#: usr/local/www/services_captiveportal_zones.php:54 +#: usr/local/www/vpn_pppoe.php:104 +#: usr/local/www/services_captiveportal_zones.php:55 +#: usr/local/www/vpn_pppoe.php:105 +#: usr/local/www/services_captiveportal_zones.php:55 +msgid "Number of users" +msgstr "Kullanıcı sayısı" + +#: usr/local/www/vpn_pppoe.php:109 usr/local/www/vpn_pppoe.php:144 +#: usr/local/www/vpn_pppoe.php:110 usr/local/www/vpn_pppoe.php:145 +#: usr/local/www/vpn_pppoe.php:111 usr/local/www/vpn_pppoe.php:146 +msgid "add a new pppoe instance" +msgstr "yeni PPPoE ekle" + +#: usr/local/www/vpn_pppoe.php:131 usr/local/www/vpn_pppoe.php:132 +#: usr/local/www/vpn_pppoe.php:133 +msgid "edit pppoe instance" +msgstr "PPPoE düzenle" + +#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133 +#: usr/local/www/vpn_pppoe.php:134 +msgid "" +"Do you really want to delete this entry? All elements that still use it will " +"become invalid (e.g. filter rules)!" +msgstr "" +"Bu girdiyi silmek istediğinize emin misiniz? Bunu kullanan öğeler (örn. " +"filtre kuralları) geçersiz hale gelecektir!" + +#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133 +#: usr/local/www/vpn_pppoe.php:134 +msgid "delete pppoe instance" +msgstr "PPPoE sil" + +#: usr/local/www/load_balancer_monitor_edit.php:66 +#: usr/local/www/load_balancer_monitor_edit.php:66 +msgid "Load Balancer: Monitor:" +msgstr "Yük Dengeleyici: İzle:" + +#: usr/local/www/load_balancer_monitor_edit.php:95 +#: usr/local/www/load_balancer_monitor_edit.php:95 +msgid "This monitor name has already been used. Monitor names must be unique." +msgstr "Bu izleme adı zaten kullanımda. İzleme adları benzersiz olmalıdır." + +#: usr/local/www/load_balancer_monitor_edit.php:98 +#: usr/local/www/load_balancer_pool_edit.php:86 +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:127 +#: usr/local/www/load_balancer_relay_protocol_edit.php:89 +#: usr/local/www/load_balancer_relay_protocol_edit.php:89 +#: usr/local/www/load_balancer_relay_action_edit.php:127 +#: usr/local/www/load_balancer_monitor_edit.php:98 +#: usr/local/www/load_balancer_pool_edit.php:86 +msgid "You cannot use spaces in the 'name' field." +msgstr "'İsim' alanında boşluk kullanamazsınız." + +#: usr/local/www/load_balancer_monitor_edit.php:112 +#: usr/local/www/services_dhcp_edit.php:118 +#: usr/local/www/services_dnsmasq_edit.php:85 +#: usr/local/www/services_dhcpv6_edit.php:115 +#: usr/local/www/services_dnsmasq_edit.php:86 +#: usr/local/www/services_dhcpv6_edit.php:117 +#: usr/local/www/services_dhcp_edit.php:120 +#: usr/local/www/services_dhcpv6_edit.php:120 +#: usr/local/www/services_dhcp_edit.php:154 +#: usr/local/www/load_balancer_monitor_edit.php:112 +#: usr/local/www/services_dnsmasq_edit.php:86 +msgid "The hostname can only contain the characters A-Z, 0-9 and '-'." +msgstr "" +"Host adı İngilizce A-Z,0-9 ve '-' karakterleri dışında bir karakter " +"içeremez." + +#: usr/local/www/load_balancer_monitor_edit.php:118 +#: usr/local/www/load_balancer_monitor_edit.php:118 +msgid "HTTP(s) codes must be from RFC2616." +msgstr "HTTP(s) kodları RFC2616'ya uygun olmalıdır." + +#: usr/local/www/load_balancer_monitor_edit.php:122 +#: usr/local/www/load_balancer_monitor_edit.php:122 +msgid "The path to monitor must be set." +msgstr "İzleme yolu tanımlanmalıdır." + +#: usr/local/www/load_balancer_monitor_edit.php:145 +#: usr/local/www/load_balancer_monitor_edit.php:145 +#, php-format +msgid "modified '%s' monitor:" +msgstr "'%s' izlemesi değiştirildi:" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:197 +msgid "ICMP" +msgstr "ICMP" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:268 +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/system_advanced_admin.php:311 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:266 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/system_advanced_admin.php:311 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:266 +msgid "HTTP" +msgstr "HTTP" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:301 +#: usr/local/www/system_advanced_admin.php:314 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:299 +#: usr/local/www/system_advanced_admin.php:314 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:299 +msgid "HTTPS" +msgstr "HTTPS" + +#: usr/local/www/load_balancer_monitor_edit.php:199 +#: usr/local/www/load_balancer_monitor_edit.php:335 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:333 +#: usr/local/www/load_balancer_monitor_edit.php:197 +#: usr/local/www/load_balancer_monitor_edit.php:333 +msgid "Send/Expect" +msgstr "Gönder/Bekle" + +#: usr/local/www/load_balancer_monitor_edit.php:232 +#: usr/local/www/load_balancer_monitor_edit.php:230 +#: usr/local/www/load_balancer_monitor_edit.php:230 +msgid "Edit Load Balancer - Monitor entry" +msgstr "Yük Dengeleme Düzenle - Girdiyi izle" + +#: usr/local/www/load_balancer_monitor_edit.php:272 +#: usr/local/www/load_balancer_monitor_edit.php:305 +#: usr/local/www/load_balancer_monitor_edit.php:270 +#: usr/local/www/load_balancer_monitor_edit.php:303 +#: usr/local/www/load_balancer_monitor_edit.php:270 +#: usr/local/www/load_balancer_monitor_edit.php:303 +msgid "Path" +msgstr "Yol" + +#: usr/local/www/load_balancer_monitor_edit.php:278 +#: usr/local/www/load_balancer_monitor_edit.php:311 +#: usr/local/www/diag_ping.php:55 usr/local/www/diag_ping.php:90 +#: usr/local/www/services_dnsmasq.php:243 +#: usr/local/www/services_dnsmasq_edit.php:141 +#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:89 +#: usr/local/www/services_rfc2136_edit.php:169 +#: usr/local/www/services_dnsmasq_edit.php:196 +#: usr/local/www/services_dnsmasq_edit.php:237 +#: usr/local/www/services_unbound.php:279 +#: usr/local/www/services_dnsmasq.php:244 +#: usr/local/www/services_dnsmasq_edit.php:197 +#: usr/local/www/services_dnsmasq_edit.php:238 +#: usr/local/www/load_balancer_monitor_edit.php:276 +#: usr/local/www/load_balancer_monitor_edit.php:309 +#: usr/local/www/diag_testport.php:60 usr/local/www/diag_testport.php:117 +#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:93 +#: usr/local/www/load_balancer_monitor_edit.php:276 +#: usr/local/www/load_balancer_monitor_edit.php:309 +#: usr/local/www/diag_ping.php:55 usr/local/www/diag_ping.php:90 +#: usr/local/www/services_dnsmasq_edit.php:197 +#: usr/local/www/services_dnsmasq_edit.php:238 +#: usr/local/www/services_rfc2136_edit.php:169 +#: usr/local/www/services_dnsmasq.php:269 +#, fuzzy +msgid "Host" +msgstr "Host" + +#: usr/local/www/load_balancer_monitor_edit.php:280 +#: usr/local/www/load_balancer_monitor_edit.php:313 +#: usr/local/www/load_balancer_monitor_edit.php:278 +#: usr/local/www/load_balancer_monitor_edit.php:311 +#: usr/local/www/load_balancer_monitor_edit.php:278 +#: usr/local/www/load_balancer_monitor_edit.php:311 +msgid "Hostname for Host: header if needed." +msgstr "Gerekiyorsa "Host:" başlığı sunucu adı." + +#: usr/local/www/load_balancer_monitor_edit.php:284 +#: usr/local/www/load_balancer_monitor_edit.php:317 +#: usr/local/www/load_balancer_monitor_edit.php:282 +#: usr/local/www/load_balancer_monitor_edit.php:315 +#: usr/local/www/load_balancer_monitor_edit.php:282 +#: usr/local/www/load_balancer_monitor_edit.php:315 +msgid "HTTP Code" +msgstr "HTTP Kodu" + +#: usr/local/www/load_balancer_monitor_edit.php:339 +#: usr/local/www/load_balancer_monitor_edit.php:337 +#: usr/local/www/load_balancer_monitor_edit.php:337 +msgid "Send string" +msgstr "Dize gönder " + +#: usr/local/www/load_balancer_monitor_edit.php:345 +#: usr/local/www/load_balancer_monitor_edit.php:343 +#: usr/local/www/load_balancer_monitor_edit.php:343 +msgid "Expect string" +msgstr "Beklenecek dize" + +#: usr/local/www/load_balancer_pool_edit.php:65 +#: usr/local/www/load_balancer_pool_edit.php:65 +msgid "Load Balancer: Pool:" +msgstr "Yük Dengeleyici: Havuz:" + +#: usr/local/www/load_balancer_pool_edit.php:76 +#: usr/local/www/load_balancer_pool_edit.php:76 +msgid "Server List" +msgstr "Sunucu Listesi" + +#: usr/local/www/load_balancer_pool_edit.php:83 +#: usr/local/www/load_balancer_pool_edit.php:83 +msgid "This pool name has already been used. Pool names must be unique." +msgstr "Havuz adı zaten kullanılıyor. Havuz adları benzersiz olmalıdır." + +#: usr/local/www/load_balancer_pool_edit.php:89 +#: usr/local/www/load_balancer_virtual_server_edit.php:92 +msgid "The port must be an integer between 1 and 65535." +msgstr "Port 1 ile 65535 arasında bir tamsayı olmalıdır." + +#: usr/local/www/load_balancer_pool_edit.php:93 +#: usr/local/www/load_balancer_pool_edit.php:93 +msgid "The retry value must be an integer between 1 and 65535." +msgstr "Tekrar deneme değeri 1 ile 65535 arasında bir tamsayı olmalıdır." + +#: usr/local/www/load_balancer_pool_edit.php:98 +#, php-format +msgid "%s is not a valid IP address (in \"enabled\" list)." +msgstr "%s geçerli bir IP adresi değil (\"açık\" listesinde)." + +#: usr/local/www/load_balancer_pool_edit.php:105 +#, php-format +msgid "%s is not a valid IP address (in \"disabled\" list)." +msgstr "%s geçerli bir IP adresi değil (\"kapalı\" listesinde)." + +#: usr/local/www/load_balancer_pool_edit.php:114 +#: usr/local/www/load_balancer_pool_edit.php:120 +#: usr/local/www/load_balancer_pool_edit.php:120 +msgid "Invalid monitor chosen." +msgstr "Geçersiz izleme seçimi." + +#: usr/local/www/load_balancer_pool_edit.php:121 +#: usr/local/www/load_balancer_pool_edit.php:127 +#: usr/local/www/load_balancer_pool_edit.php:127 +#, php-format +msgid " modified '%s' pool:" +msgstr " '%s' havuzu değiştirildi:" + +#: usr/local/www/load_balancer_pool_edit.php:178 +#: usr/local/www/load_balancer_pool_edit.php:186 +#: usr/local/www/load_balancer_pool_edit.php:184 +#: usr/local/www/load_balancer_pool_edit.php:184 +msgid "Add/edit Load Balancer - Pool entry" +msgstr "Yük Dengeleyici ekle/düzenle - Havuz girdisi" + +#: usr/local/www/load_balancer_pool_edit.php:190 +#: usr/local/www/load_balancer_pool_edit.php:198 +#: usr/local/www/load_balancer_pool_edit.php:196 +#: usr/local/www/load_balancer_pool_edit.php:196 +msgid "Load Balance" +msgstr "Yük Dengeleme" + +#: usr/local/www/load_balancer_pool_edit.php:191 +#: usr/local/www/load_balancer_pool_edit.php:199 +#: usr/local/www/load_balancer_pool_edit.php:197 +#: usr/local/www/load_balancer_pool_edit.php:197 +msgid "Manual Failover" +msgstr "Elle Yük Aktarma" + +#: usr/local/www/load_balancer_pool_edit.php:206 +#: usr/local/www/load_balancer_pool_edit.php:215 +#: usr/local/www/load_balancer_pool_edit.php:213 +#: usr/local/www/load_balancer_pool_edit.php:213 +msgid "This is the port your servers are listening on." +msgstr "Sunucularınızın dinlediği port numarası." + +#: usr/local/www/load_balancer_pool_edit.php:210 +#: usr/local/www/load_balancer_pool_edit.php:227 +#: usr/local/www/load_balancer_pool_edit.php:225 +#: usr/local/www/load_balancer_pool_edit.php:225 +msgid "Retry" +msgstr "Tekrar Dene" + +#: usr/local/www/load_balancer_pool_edit.php:213 +#: usr/local/www/load_balancer_pool_edit.php:230 +#: usr/local/www/load_balancer_pool_edit.php:228 +#: usr/local/www/load_balancer_pool_edit.php:228 +msgid "" +"Optionally specify how many times to retry checking a server before " +"declaring it down." +msgstr "" +"İsterseniz bir sunucuyu erişilemez kabul etmek için kaç deneme yapılması " +"gerektiğini belirtebilirsiniz." + +#: usr/local/www/load_balancer_pool_edit.php:220 +#: usr/local/www/load_balancer_pool_edit.php:237 +#: usr/local/www/load_balancer_pool_edit.php:235 +#: usr/local/www/load_balancer_pool_edit.php:235 +msgid "Add item to pool" +msgstr "Havuza öğe ekle" + +#: usr/local/www/load_balancer_pool_edit.php:238 +#: usr/local/www/load_balancer_pool_edit.php:255 +#: usr/local/www/load_balancer_pool_edit.php:253 +#: usr/local/www/load_balancer_pool_edit.php:253 +msgid "" +"Please add a monitor IP address on the monitors tab if you wish to use this " +"feature." +msgstr "" +"Bu özelliği kullanmak istiyorsanız izlemeler sekmesinden bir izleme IPsi " +"ekleyiniz." + +#: usr/local/www/load_balancer_pool_edit.php:244 +#: usr/local/www/load_balancer_pool_edit.php:261 +#: usr/local/www/load_balancer_pool_edit.php:259 +#: usr/local/www/load_balancer_pool_edit.php:259 +msgid "Server IP Address" +msgstr "Sunucu IP Adresi" + +#: usr/local/www/load_balancer_pool_edit.php:247 +#: usr/local/www/load_balancer_pool_edit.php:264 +#: usr/local/www/load_balancer_pool_edit.php:262 +#: usr/local/www/load_balancer_pool_edit.php:262 +msgid "Add to pool" +msgstr "Havuza ekle" + +#: usr/local/www/load_balancer_pool_edit.php:254 +#: usr/local/www/load_balancer_pool_edit.php:271 +#: usr/local/www/load_balancer_pool_edit.php:269 +#: usr/local/www/load_balancer_pool_edit.php:269 +msgid "Current Pool Members" +msgstr "Güncel Havuz Üyeleri" + +#: usr/local/www/load_balancer_pool_edit.php:264 +#: usr/local/www/load_balancer_pool_edit.php:281 +#: usr/local/www/load_balancer_pool_edit.php:279 +#: usr/local/www/load_balancer_pool_edit.php:279 +msgid "Pool Disabled" +msgstr "Havuz Devre Dışı" + +#: usr/local/www/load_balancer_pool_edit.php:277 +#: usr/local/www/load_balancer_pool_edit.php:300 +#: usr/local/www/load_balancer_relay_protocol_edit.php:253 +#: usr/local/www/load_balancer_pool_edit.php:294 +#: usr/local/www/load_balancer_pool_edit.php:317 +#: usr/local/www/load_balancer_relay_protocol_edit.php:251 +#: usr/local/www/load_balancer_pool_edit.php:292 +#: usr/local/www/load_balancer_pool_edit.php:315 +#: usr/local/www/load_balancer_relay_protocol_edit.php:251 +#: usr/local/www/load_balancer_pool_edit.php:292 +#: usr/local/www/load_balancer_pool_edit.php:315 +msgid "Remove" +msgstr "Kaldır" + +#: usr/local/www/load_balancer_pool_edit.php:287 +#: usr/local/www/load_balancer_pool_edit.php:304 +#: usr/local/www/load_balancer_pool_edit.php:302 +#: usr/local/www/load_balancer_pool_edit.php:302 +msgid "Enabled (default)" +msgstr "Etkin (varsayılan)" + +#: usr/local/www/load_balancer_virtual_server_edit.php:61 +#: usr/local/www/load_balancer_virtual_server_edit.php:61 +msgid "Load Balancer: Virtual Server:" +msgstr "Yük Dengeleyici: Sanal Sunucu:" + +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:261 +#: usr/local/www/load_balancer_relay_protocol.php:100 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/load_balancer_virtual_server_edit.php:250 +#: usr/local/www/load_balancer_virtual_server_edit.php:248 +#: usr/local/www/load_balancer_relay_protocol_edit.php:137 +#: usr/local/www/load_balancer_virtual_server_edit.php:77 +#: usr/local/www/load_balancer_virtual_server_edit.php:248 +#: usr/local/www/load_balancer_relay_protocol.php:100 +msgid "Relay Protocol" +msgstr "Aktarım Protokolü" + +#: usr/local/www/load_balancer_virtual_server_edit.php:86 +#: usr/local/www/load_balancer_virtual_server_edit.php:86 +msgid "" +"This virtual server name has already been used. Virtual server names must " +"be unique." +msgstr "" +"Bu sanal sunucu adı kullanımda. Sanal sunucu adları benzersiz olmalıdır." + +#: usr/local/www/load_balancer_virtual_server_edit.php:95 +#, php-format +msgid "%s is not a valid IP address." +msgstr "%s geçerli bir IP adresi değil." + +#: usr/local/www/load_balancer_virtual_server_edit.php:102 +#: usr/local/www/load_balancer_virtual_server_edit.php:104 +#: usr/local/www/load_balancer_virtual_server_edit.php:104 +#, php-format +msgid "modified '%s' vs:" +msgstr "'%s' değiştirildi:" + +#: usr/local/www/load_balancer_virtual_server_edit.php:104 +#: usr/local/www/load_balancer_virtual_server_edit.php:106 +#: usr/local/www/load_balancer_virtual_server_edit.php:106 +#, php-format +msgid "created '%s' vs:" +msgstr "'%s' oluşturuldu:" + +#: usr/local/www/load_balancer_virtual_server_edit.php:134 +#: usr/local/www/status_lb_vs.php:56 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/load_balancer_virtual_server_edit.php:136 +#: usr/local/www/status_lb_vs.php:56 +msgid "Virtual Server" +msgstr "Sanal Sunucu" + +#: usr/local/www/load_balancer_virtual_server_edit.php:180 +#: usr/local/www/load_balancer_virtual_server_edit.php:154 +#: usr/local/www/load_balancer_virtual_server_edit.php:152 +#: usr/local/www/load_balancer_virtual_server_edit.php:152 +msgid "Edit Load Balancer - Virtual Server entry" +msgstr "Yük Dengeleyici Düzenle - Sanal Sunucu girişi" + +#: usr/local/www/load_balancer_virtual_server_edit.php:198 +#: usr/local/www/load_balancer_virtual_server_edit.php:172 +#: usr/local/www/load_balancer_virtual_server_edit.php:170 +#: usr/local/www/load_balancer_virtual_server_edit.php:170 +msgid "" +"This is normally the WAN IP address that you would like the server to listen " +"on. All connections to this IP and port will be forwarded to the pool " +"cluster." +msgstr "" +"Bu değer normalde sunucunuzun dinlemesini istediğiniz WAN IP adresi " +"olmalıdır. Bu IP porta yapılan tüm bağlantılar havuz kümesine " +"yönlendirilecektir." + +#: usr/local/www/load_balancer_virtual_server_edit.php:205 +#: usr/local/www/load_balancer_virtual_server_edit.php:186 +#: usr/local/www/load_balancer_virtual_server_edit.php:184 +#: usr/local/www/load_balancer_virtual_server_edit.php:184 +msgid "" +"This is the port that the clients will connect to. All connections to this " +"port will be forwarded to the pool cluster." +msgstr "" +"İstemcilerin bağlanacağı port. Bu porta yapılan bağlantılar havuz kümesine " +"yönlendirilecektir." + +#: usr/local/www/load_balancer_virtual_server_edit.php:209 +#: usr/local/www/load_balancer_virtual_server_edit.php:198 +#: usr/local/www/load_balancer_virtual_server_edit.php:196 +#: usr/local/www/load_balancer_virtual_server_edit.php:196 +msgid "Virtual Server Pool" +msgstr "Sanal Sunucu Havuzu" + +#: usr/local/www/load_balancer_virtual_server_edit.php:212 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/load_balancer_virtual_server_edit.php:201 +#: usr/local/www/load_balancer_virtual_server_edit.php:220 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +#: usr/local/www/load_balancer_virtual_server_edit.php:199 +#: usr/local/www/load_balancer_virtual_server_edit.php:218 +msgid "Please add a pool on the Pools tab to use this feature." +msgstr "" +"Bu özelliği kullanabilmek için lütfen Havuzlar sekmesinden bir havuz " +"ekleyin." + +#: usr/local/www/load_balancer_virtual_server_edit.php:244 +#: usr/local/www/load_balancer_virtual_server_edit.php:233 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +#: usr/local/www/load_balancer_virtual_server_edit.php:231 +msgid "" +"This is the server that clients will be redirected to if *ALL* servers in " +"the pool are offline." +msgstr "" +"Havuzdaki *HİÇBİR* sunucu erişilemez ise istemcilerin yönlendirilecek " +"sunucudur." + +#: usr/local/www/load_balancer_virtual_server_edit.php:279 +#: usr/local/www/status_captiveportal_test.php:92 +#: usr/local/www/load_balancer_virtual_server_edit.php:268 +#: usr/local/www/status_captiveportal_test.php:93 +#: usr/local/www/load_balancer_virtual_server_edit.php:266 +#: usr/local/www/load_balancer_virtual_server_edit.php:266 +#: usr/local/www/status_captiveportal_expire.php:92 +#: usr/local/www/status_captiveportal_test.php:94 +msgid "Submit" +msgstr "Kaydet" + +#: usr/local/www/load_balancer_virtual_server_edit.php:289 +#: usr/local/www/load_balancer_virtual_server_edit.php:278 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +#: usr/local/www/load_balancer_virtual_server_edit.php:276 +msgid "" +"Don't forget to add a firewall rule for the virtual server/pool after you're " +"finished setting it up." +msgstr "" +"Yapılandırmayı tamamladıktan sonra sanal sunucu / havuz için güvenlik duvarı " +"kuralı eklemeyi unutmayın." + +#: usr/local/www/pkg_mgr.php:70 usr/local/www/pkg_mgr.php:82 +#: usr/local/www/pkg_mgr.php:82 +#, php-format +msgid "Unable to retrieve package info from %s. Cached data will be used." +msgstr "Paket bilgisi %s den alınamıyor. Önbellekteki veri kullanılacak." + +#: usr/local/www/pkg_mgr.php:73 usr/local/www/pkg_mgr.php:85 +#: usr/local/www/pkg_mgr.php:85 +#, php-format +msgid "" +"Unable to communicate with %1$s. Please verify DNS and interface " +"configuration, and that %2$s has functional Internet connectivity." +msgstr "" +"%1$s ile iletişim kurulamıyor. Lütfen DNS'i ve arabirimi doğrulayın ve %" +"2$s'nin çalışan bir Internet bağlantısı olup olmadığını kontrol edin." + +#: usr/local/www/pkg_mgr.php:122 usr/local/www/pkg_mgr.php:216 +#: usr/local/www/pkg_mgr.php:137 usr/local/www/pkg_mgr.php:243 +#: usr/local/www/pkg_mgr.php:246 usr/local/www/pkg_mgr.php:137 +#: usr/local/www/pkg_mgr.php:246 +msgid "There are currently no packages available for installation." +msgstr "Kurulabilir paket bulunamadı." + +#: usr/local/www/pkg_mgr.php:192 usr/local/www/pkg_mgr.php:228 +#: usr/local/www/pkg_mgr.php:228 +#, fuzzy +msgid "platform" +msgstr "platform" + +#: usr/local/www/pkg_mgr.php:210 +msgid "Do you really want to install this package?" +msgstr "Bu paketi kurmak istediğinize emin misiniz?" + +#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_install.php:55 +msgid "Install Package" +msgstr "Paket Kur" + +#: usr/local/www/pkg_mgr_install.php:72 usr/local/www/pkg_mgr_install.php:70 +msgid "Available packages" +msgstr "Kullanılabilir paketler" + +#: usr/local/www/pkg_mgr_install.php:75 usr/local/www/pkg_mgr_install.php:73 +msgid "Installed packages" +msgstr "Kurulu paketler" + +#: usr/local/www/pkg_mgr_install.php:76 usr/local/www/pkg_mgr_install.php:74 +msgid "Package Installer" +msgstr "Paket Kurucu" + +#: usr/local/www/pkg_mgr_install.php:124 usr/local/www/pkg_mgr_install.php:134 +#: usr/local/www/pkg_mgr_install.php:132 +msgid "Creating restore point before package installation." +msgstr "Paket kurulumu öncesi kurtarma noktası oluşturuluyor." + +#: usr/local/www/pkg_mgr_install.php:132 usr/local/www/pkg_mgr_install.php:133 +#: usr/local/www/pkg_mgr_install.php:141 usr/local/www/pkg_mgr_install.php:142 +#: usr/local/www/pkg_mgr_install.php:139 usr/local/www/pkg_mgr_install.php:140 +msgid "Package deleted." +msgstr "Paket silindi." + +#: usr/local/www/pkg_mgr_install.php:147 usr/local/www/pkg_mgr_install.php:148 +#: usr/local/www/pkg_mgr_install.php:156 usr/local/www/pkg_mgr_install.php:157 +#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155 +msgid "Package reinstallation failed." +msgstr "Paketin tekrar kurulumu başarısız." + +#: usr/local/www/pkg_mgr_install.php:151 usr/local/www/pkg_mgr_install.php:152 +#: usr/local/www/pkg_mgr_install.php:160 usr/local/www/pkg_mgr_install.php:161 +#: usr/local/www/pkg_mgr_install.php:158 usr/local/www/pkg_mgr_install.php:159 +msgid "Package reinstalled." +msgstr "Paket tekrar kuruldu." + +#: usr/local/www/pkg_mgr_install.php:163 usr/local/www/pkg_mgr_install.php:172 +#: usr/local/www/pkg_mgr_install.php:170 +msgid "installation completed." +msgstr "kurulumu tamamlandı." + +#: usr/local/www/pkg_mgr_install.php:166 usr/local/www/pkg_mgr_install.php:175 +#: usr/local/www/pkg_mgr_install.php:173 +#, php-format +msgid "Could not find %s." +msgstr "%s bulunamadı." + +#: usr/local/www/pkg_mgr_install.php:182 usr/local/www/pkg_mgr_install.php:183 +#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:192 +#: usr/local/www/pkg_mgr_install.php:188 usr/local/www/pkg_mgr_install.php:189 +msgid "All packages reinstalled." +msgstr "Tüm paketler yeniden kuruldu." + +#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:194 +#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:204 +#: usr/local/www/pkg_mgr_install.php:199 usr/local/www/pkg_mgr_install.php:203 +msgid "Installation of" +msgstr "Kurulum" + +#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:200 +#: usr/local/www/pkg_mgr_install.php:199 +msgid "FAILED!" +msgstr "BAŞARISIZ!" + +#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:201 +#: usr/local/www/pkg_mgr_install.php:200 +msgid "Installation halted." +msgstr "Kurulum durduruldu." + +#: usr/local/www/pkg_mgr_install.php:194 usr/local/www/pkg_mgr_install.php:204 +#: usr/local/www/pkg_mgr_install.php:203 +msgid "completed." +msgstr "tamamlandı." + +#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208 +#: usr/local/www/pkg_mgr_install.php:207 +msgid "Installation completed." +msgstr "Kurulum tamamlandı." + +#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208 +#: usr/local/www/pkg_mgr_install.php:207 +msgid "setup instructions" +msgstr "kurulum adımları" + +#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:210 +#: usr/local/www/pkg_mgr_install.php:209 +msgid "" +"Installation completed. Please check to make sure that the package is " +"configured from the respective menu then start the package." +msgstr "" +"Kurulum tamamlandı. Paketin kurulu olduğundan emin olmak için ilgili " +"menüden pakedin arayüzünü açıp yapılandırdıktan sonra paketi başlatınız." + +#: usr/local/www/preload.php:6 +msgid "You are not allowed to access this page." +msgstr "Bu sayfaya erişim yetkiniz yoktur." + +#: usr/local/www/progress.php:25 usr/local/www/progress.php:22 +msgid "Invalid Meter ID" +msgstr "Geçersiz Metre Kimliği" + +#: usr/local/www/progress.php:46 usr/local/www/progress.php:43 +msgid "UPLOAD completed" +msgstr "YÜKLEME tamamlandı" + +#: usr/local/www/progress.php:58 usr/local/www/progress.php:55 +msgid "Uploading Files... Please wait..." +msgstr "Dosyalar yükleniyor... Lütfen bekleyiniz..." + +#: usr/local/www/progress.php:68 usr/local/www/progress.php:65 +msgid "Uploading files..." +msgstr "Dosyalar yükleniyor..." + +#: usr/local/www/progress.php:87 usr/local/www/progress.php:84 +msgid "Time Remaining:" +msgstr "Kalan Zaman:" + +#: usr/local/www/progress.php:88 usr/local/www/progress.php:85 +msgid "Speed:" +msgstr "Hız:" + +#: usr/local/www/progress.php:88 usr/local/www/progress.php:85 +msgid "KB/sec" +msgstr "KB/sn" + +#: usr/local/www/progress.php:92 usr/local/www/progress.php:89 +msgid "Uploaded:" +msgstr "Yüklenen:" + +#: usr/local/www/progress.php:93 usr/local/www/progress.php:90 +msgid "File Size:" +msgstr "Dosya Boyutu:" + +#: usr/local/www/progress.php:97 usr/local/www/progress.php:94 +msgid "Completed:" +msgstr "Tamamlanan:" + +#: usr/local/www/diag_dns.php:34 usr/local/www/diag_dns.php:250 +#: usr/local/www/fbegin.inc:192 usr/local/www/fbegin.inc:210 +#: usr/local/www/diag_dns.php:249 usr/local/www/fbegin.inc:218 +#: usr/local/www/diag_dns.php:34 usr/local/www/diag_dns.php:249 +#: usr/local/www/fbegin.inc:209 +msgid "DNS Lookup" +msgstr "DNS Sorgusu" + +#: usr/local/www/diag_dns.php:100 usr/local/www/diag_dns.php:100 +msgid "Host must be a valid hostname or IP address." +msgstr "Sunucu geçerli bir ad ya da IP adresine sahip olmalıdır." + +#: usr/local/www/diag_dns.php:110 usr/local/www/diag_dns.php:109 +#: usr/local/www/diag_dns.php:109 +msgid "No response" +msgstr "Cevap yok" + +#: usr/local/www/diag_dns.php:143 usr/local/www/diag_dns.php:142 +#: usr/local/www/diag_dns.php:142 +msgid "No record found" +msgstr "Hiç kayıt bulunamadı" + +#: usr/local/www/diag_dns.php:158 usr/local/www/diag_dns.php:157 +#: usr/local/www/diag_dns.php:157 +msgid "Resolve DNS hostname or IP" +msgstr "DNS adı yada IP çözümle" + +#: usr/local/www/diag_dns.php:161 usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 usr/local/www/diag_dns.php:160 +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:186 +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:187 usr/local/www/diag_dns.php:160 +msgid "Hostname or IP" +msgstr "Host adı ya da IP" + +#: usr/local/www/diag_dns.php:203 usr/local/www/diag_dns.php:202 +#: usr/local/www/diag_dns.php:202 +msgid "Resolution time per server" +msgstr "Sunucu başına çözümleme süresi" + +#: usr/local/www/diag_dns.php:211 usr/local/www/diag_dns.php:210 +#: usr/local/www/diag_dns.php:210 +msgid "Query time" +msgstr "Sorgu zamanı" + +#: usr/local/www/diag_dns.php:235 usr/local/www/diag_dns.php:234 +#: usr/local/www/diag_dns.php:234 +msgid "More Information:" +msgstr "Ek Bilgi:" + +#: usr/local/www/diag_dns.php:237 usr/local/www/diag_ping.php:43 +#: usr/local/www/diag_ping.php:87 usr/local/www/diag_ping.php:119 +#: usr/local/www/fbegin.inc:200 usr/local/www/fbegin.inc:218 +#: usr/local/www/diag_dns.php:236 usr/local/www/fbegin.inc:226 +#: usr/local/www/diag_ping.php:43 usr/local/www/diag_ping.php:87 +#: usr/local/www/diag_ping.php:119 usr/local/www/diag_dns.php:236 +#: usr/local/www/fbegin.inc:217 +#, fuzzy +msgid "Ping" +msgstr "Ping" + +#: usr/local/www/diag_dns.php:238 usr/local/www/diag_traceroute.php:45 +#: usr/local/www/diag_traceroute.php:86 usr/local/www/diag_traceroute.php:112 +#: usr/local/www/fbegin.inc:209 usr/local/www/fbegin.inc:227 +#: usr/local/www/diag_dns.php:237 usr/local/www/fbegin.inc:236 +#: usr/local/www/diag_traceroute.php:45 usr/local/www/diag_traceroute.php:90 +#: usr/local/www/diag_traceroute.php:136 usr/local/www/diag_dns.php:237 +#: usr/local/www/fbegin.inc:228 +#, fuzzy +msgid "Traceroute" +msgstr "Traceroute" + +#: usr/local/www/diag_dns.php:240 usr/local/www/diag_dns.php:239 +#: usr/local/www/diag_dns.php:239 +msgid "" +"NOTE: The following links are to external services, so their reliability " +"cannot be guaranteed." +msgstr "" +"NOT: Belirtilen linkler dış servislere aittir, dolayısıyla tutarlılıkları " +"garanti edilememektedir." + +#: usr/local/www/diag_dns.php:241 usr/local/www/diag_dns.php:240 +#: usr/local/www/diag_dns.php:240 +msgid "IP WHOIS @ DNS Stuff" +msgstr "DNS Stuff sunucusundaki IP WHOIS bilgisi" + +#: usr/local/www/diag_dns.php:242 usr/local/www/diag_dns.php:241 +#: usr/local/www/diag_dns.php:241 +msgid "IP Info @ DNS Stuff" +msgstr "DNS Stuff sunucusundaki IP bilgisi" + +#: usr/local/www/reboot.php:44 +msgid " Yes " +msgstr " Evet " + +#: usr/local/www/reboot.php:45 usr/local/www/reboot.php:76 +#: usr/local/www/reboot.php:56 usr/local/www/reboot.php:56 +msgid "The system is rebooting now. This may take one minute." +msgstr "Sistem yeniden başlatılıyor. Birkaç dakika sürebilir." + +#: usr/local/www/reboot.php:51 usr/local/www/reboot.php:48 +#: usr/local/www/reboot.php:48 +msgid "Reboot System" +msgstr "Sistemi Yeniden Başlat" + +#: usr/local/www/reboot.php:59 usr/local/www/reboot.php:62 +#: usr/local/www/reboot.php:62 +msgid "Are you sure you want to reboot the system?" +msgstr "Sistemi yeniden başlatmak istediğinize emin misiniz?" + +#: usr/local/www/restart_httpd.php:42 usr/local/www/restart_httpd.php:42 +msgid "Restarting httpd" +msgstr "Httpd yeniden başlatılıyor" + +#: usr/local/www/restart_httpd.php:50 usr/local/www/restart_httpd.php:50 +msgid "Mounting file systems read/write" +msgstr "Dosya sistemleri okuma-yazma yetkileri ile bağlanıyor" + +#: usr/local/www/restart_httpd.php:53 usr/local/www/restart_httpd.php:53 +msgid "Forcing all PHP file permissions to 0755" +msgstr "Tüm PHP dosya izinleri 0755 olarak değiştiriliyor" + +#: usr/local/www/restart_httpd.php:56 usr/local/www/restart_httpd.php:56 +msgid "Mounting file systems read only" +msgstr "Dosya sistemleri salt okunur olarak bağlanıyor" + +#: usr/local/www/restart_httpd.php:59 usr/local/www/restart_httpd.php:59 +msgid "Restarting mini_httpd" +msgstr "mini_httpd yeniden başlatılıyor" + +#: usr/local/www/edit.php:39 usr/local/www/edit.php:42 +#: usr/local/www/edit.php:41 +msgid "Edit file" +msgstr "Dosya düzenle" + +#: usr/local/www/edit.php:46 usr/local/www/edit.php:62 +#: usr/local/www/edit.php:49 usr/local/www/edit.php:65 +#: usr/local/www/edit.php:48 usr/local/www/edit.php:65 +msgid "No file name specified" +msgstr "Dosya adı belirtilmeli" + +#: usr/local/www/edit.php:48 usr/local/www/edit.php:51 +#: usr/local/www/edit.php:50 +msgid "Loading a directory is not supported" +msgstr "Klasör yükleme desteklenmemektedir" + +#: usr/local/www/edit.php:50 usr/local/www/edit.php:53 +#: usr/local/www/edit.php:52 +msgid "File does not exist or is not a regular file" +msgstr "Dosya bulunamadı ya da tür desteklenmiyor." + +#: usr/local/www/edit.php:54 usr/local/www/edit.php:57 +#: usr/local/www/edit.php:56 +msgid "Failed to read file" +msgstr "Dosya okuma başarısız" + +#: usr/local/www/edit.php:74 usr/local/www/edit.php:77 +#: usr/local/www/edit.php:77 +msgid "Failed to write file" +msgstr "Dosya yazma başarısız" + +#: usr/local/www/edit.php:76 usr/local/www/edit.php:79 +#: usr/local/www/edit.php:79 +msgid "Error while writing file" +msgstr "Dosya yazma sırasında hata" + +#: usr/local/www/edit.php:78 usr/local/www/edit.php:81 +#: usr/local/www/edit.php:81 +msgid "File successfully saved" +msgstr "Dosya başarıyla kaydedildi" + +#: usr/local/www/edit.php:98 usr/local/www/edit.php:101 +#: usr/local/www/edit.php:101 +msgid "Loading file" +msgstr "Dosya yükleniyor" + +#: usr/local/www/edit.php:117 usr/local/www/edit.php:120 +#: usr/local/www/edit.php:121 +msgid "File successfully loaded" +msgstr "Dosya başarıyla yüklendi" + +#: usr/local/www/edit.php:140 usr/local/www/edit.php:143 +#: usr/local/www/edit.php:144 +msgid "Saving file" +msgstr "Dosya kaydediliyor" + +#: usr/local/www/edit.php:177 usr/local/www/edit.php:180 +#: usr/local/www/edit.php:181 +msgid "Save / Load from path" +msgstr "Dosya kaydet/yükle" + +#: usr/local/www/edit.php:179 usr/local/www/edit.php:182 +#: usr/local/www/edit.php:183 +msgid "Load" +msgstr "Yükle" + +#: usr/local/www/edit.php:180 usr/local/www/edit.php:183 +#: usr/local/www/edit.php:184 +msgid "Browse" +msgstr "Gözat" + +#: usr/local/www/services_captiveportal.php:63 +#: usr/local/www/services_captiveportal_filemanager.php:75 +#: usr/local/www/services_captiveportal_filemanager.php:150 +#: usr/local/www/services_captiveportal_ip.php:64 +#: usr/local/www/services_captiveportal_ip.php:104 +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_mac.php:63 +#: usr/local/www/services_captiveportal_mac.php:154 +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_captiveportal_hostname.php:66 +#: usr/local/www/services_captiveportal_hostname.php:109 +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers.php:403 +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_captiveportal_vouchers.php:410 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/services_captiveportal_vouchers.php:423 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_ip.php:102 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/services_captiveportal_mac.php:152 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/services_captiveportal_hostname.php:107 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/services_captiveportal_filemanager.php:147 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_captiveportal_ip.php:61 +#: usr/local/www/services_captiveportal_ip.php:102 +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:432 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_hostname.php:63 +#: usr/local/www/services_captiveportal_hostname.php:107 +#: usr/local/www/services_captiveportal_filemanager.php:71 +#: usr/local/www/services_captiveportal_filemanager.php:147 +#: usr/local/www/status_captiveportal_test.php:58 +#: usr/local/www/services_captiveportal.php:60 +#: usr/local/www/services_captiveportal_mac.php:60 +#: usr/local/www/services_captiveportal_mac.php:162 +#: usr/local/www/status_captiveportal_voucher_rolls.php:57 +msgid "Captive portal" +msgstr "Hizmet Portalı" + +#: usr/local/www/services_captiveportal.php:146 +#: usr/local/www/services_captiveportal_zones_edit.php:61 +#: usr/local/www/services_captiveportal_zones_edit.php:99 +#: usr/local/www/services_captiveportal.php:147 +#: usr/local/www/services_captiveportal.php:153 +#: usr/local/www/services_captiveportal_zones_edit.php:59 +#: usr/local/www/services_captiveportal_zones_edit.php:101 +#: usr/local/www/services_captiveportal_zones_edit.php:59 +#: usr/local/www/services_captiveportal_zones_edit.php:97 +#: usr/local/www/services_captiveportal.php:155 +msgid "Zone name" +msgstr "Bölge adı" + +#: usr/local/www/services_captiveportal.php:154 +#: usr/local/www/services_captiveportal.php:155 +#: usr/local/www/services_captiveportal.php:161 +#: usr/local/www/services_captiveportal.php:163 +#, php-format +msgid "" +"The captive portal cannot be used on interface %s since it is part of a " +"bridge." +msgstr "" +"%s arabirimi bir köprü üyesi olduğundan Hizmet Portalı için kullanılamaz." + +#: usr/local/www/services_captiveportal.php:158 +#: usr/local/www/services_captiveportal.php:159 +#: usr/local/www/services_captiveportal.php:165 +#: usr/local/www/services_captiveportal.php:167 +#, php-format +msgid "" +"The captive portal cannot be used on interface %s since it is used already " +"on %s instance." +msgstr "Hizmet Portalı %s arabirimini kullanamaz %s örneğinde zaten kullanımda." + +#: usr/local/www/services_captiveportal.php:166 +#: usr/local/www/services_captiveportal.php:167 +msgid "Certificate and key must be specified for HTTPS login." +msgstr "HTTPS oturumu için sertifika ve anahtar belirtilmelidir." + +#: usr/local/www/services_captiveportal.php:169 +#: usr/local/www/system_camanager.php:168 +#: usr/local/www/system_certmanager.php:168 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/services_captiveportal.php:170 +#: usr/local/www/system_camanager.php:170 +#: usr/local/www/system_certmanager.php:199 +msgid "This certificate does not appear to be valid." +msgstr "Sertifika geçerli görünmüyor." + +#: usr/local/www/services_captiveportal.php:171 +#: usr/local/www/services_captiveportal.php:172 +msgid "This intermmediate certificate does not appear to be valid." +msgstr "Bu ara sertifika geçerli görünmüyor." + +#: usr/local/www/services_captiveportal.php:173 +#: usr/local/www/services_captiveportal.php:174 +msgid "This key does not appear to be valid." +msgstr "Anahtar geçerli değil." + +#: usr/local/www/services_captiveportal.php:177 +#: usr/local/www/services_captiveportal.php:178 +#: usr/local/www/services_captiveportal.php:176 +#: usr/local/www/services_captiveportal.php:178 +msgid "The HTTPS server name must be specified for HTTPS login." +msgstr "HTTPS oturumu için HTTP sunucu adı tanımlanmalıdır." + +#: usr/local/www/services_captiveportal.php:183 +#: usr/local/www/services_captiveportal.php:184 +#: usr/local/www/services_captiveportal.php:182 +#: usr/local/www/services_captiveportal.php:184 +msgid "The timeout must be at least 1 minute." +msgstr "Zaman aşımı en az bir dakika olmalıdır." + +#: usr/local/www/services_captiveportal.php:186 +#: usr/local/www/services_captiveportal.php:187 +#: usr/local/www/services_captiveportal.php:185 +#: usr/local/www/services_captiveportal.php:187 +msgid "The idle timeout must be at least 1 minute." +msgstr "Boşta kalma süresi en az 1 dakika olmalıdır." + +#: usr/local/www/services_captiveportal.php:189 +#: usr/local/www/services_captiveportal.php:190 +#: usr/local/www/services_captiveportal.php:188 +#: usr/local/www/services_captiveportal.php:190 +msgid "The pass-through credit count must be a number or left blank." +msgstr "İzin kredi sayısı ya bir tamsayı olmalıdır ya da boş bırakılmalıdır." + +#: usr/local/www/services_captiveportal.php:192 +#: usr/local/www/services_captiveportal.php:193 +#: usr/local/www/services_captiveportal.php:191 +#: usr/local/www/services_captiveportal.php:193 +msgid "" +"The waiting period to restore pass-through credits must be above 0 hours." +msgstr "" +"İzin kredilerini yenilemek için geçmesi gereken süre 0 saatten fazla " +"olmalıdır." + +#: usr/local/www/services_captiveportal.php:196 +#: usr/local/www/services_captiveportal.php:199 +#: usr/local/www/services_captiveportal.php:202 +#: usr/local/www/services_captiveportal.php:205 +#: usr/local/www/services_captiveportal_ip_edit.php:107 +#: usr/local/www/services_captiveportal.php:197 +#: usr/local/www/services_captiveportal.php:200 +#: usr/local/www/services_captiveportal.php:203 +#: usr/local/www/services_captiveportal.php:206 +#: usr/local/www/services_captiveportal.php:195 +#: usr/local/www/services_captiveportal.php:198 +#: usr/local/www/services_captiveportal.php:201 +#: usr/local/www/services_captiveportal.php:204 +#: usr/local/www/services_captiveportal_ip_edit.php:105 +#: usr/local/www/services_captiveportal_ip_edit.php:104 +#: usr/local/www/services_captiveportal.php:197 +#: usr/local/www/services_captiveportal.php:200 +#: usr/local/www/services_captiveportal.php:203 +#: usr/local/www/services_captiveportal.php:206 +#, php-format +msgid "A valid IP address must be specified. [%s]" +msgstr "Geçerli bir IP adresi belirtilmelidir. [%s]" + +#: usr/local/www/services_captiveportal.php:208 +#: usr/local/www/services_captiveportal.php:211 +#: usr/local/www/services_captiveportal.php:214 +#: usr/local/www/services_captiveportal.php:217 +#: usr/local/www/services_captiveportal.php:220 +#: usr/local/www/services_captiveportal.php:209 +#: usr/local/www/services_captiveportal.php:212 +#: usr/local/www/services_captiveportal.php:215 +#: usr/local/www/services_captiveportal.php:218 +#: usr/local/www/services_captiveportal.php:221 +#: usr/local/www/services_captiveportal.php:207 +#: usr/local/www/services_captiveportal.php:210 +#: usr/local/www/services_captiveportal.php:213 +#: usr/local/www/services_captiveportal.php:216 +#: usr/local/www/services_captiveportal.php:219 +#: usr/local/www/services_captiveportal.php:209 +#: usr/local/www/services_captiveportal.php:212 +#: usr/local/www/services_captiveportal.php:215 +#: usr/local/www/services_captiveportal.php:218 +#: usr/local/www/services_captiveportal.php:221 +#, php-format +msgid "A valid port number must be specified. [%s]" +msgstr "Geçerli bir port numarası belirtilmelidir. [%s]" + +#: usr/local/www/services_captiveportal.php:223 +#: usr/local/www/services_captiveportal.php:224 +#: usr/local/www/services_captiveportal.php:222 +#: usr/local/www/services_captiveportal.php:224 +msgid "" +"The maximum number of concurrent connections per client IP address may not " +"be larger than the global maximum." +msgstr "" +"İstemci IP adresi başına maksimum eş zamanlı anlık bağlantı sayısı değeri " +"verilen genel en yüksek değerden fazla olmamalıdır." + +#: usr/local/www/services_captiveportal.php:421 +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal.php:423 +#: usr/local/www/services_captiveportal.php:425 +msgid "Captive portal(s)" +msgstr "Hizmet Portal(ları)" + +#: usr/local/www/services_captiveportal.php:422 +#: usr/local/www/services_captiveportal_filemanager.php:151 +#: usr/local/www/services_captiveportal_ip.php:105 +#: usr/local/www/services_captiveportal_mac.php:155 +#: usr/local/www/services_captiveportal_hostname.php:110 +#: usr/local/www/services_captiveportal_vouchers.php:404 +#: usr/local/www/services_captiveportal_vouchers.php:411 +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_vouchers.php:424 +#: usr/local/www/services_captiveportal_ip.php:103 +#: usr/local/www/services_captiveportal_mac.php:153 +#: usr/local/www/services_captiveportal_hostname.php:108 +#: usr/local/www/services_captiveportal.php:424 +#: usr/local/www/services_captiveportal_filemanager.php:148 +#: usr/local/www/services_captiveportal_ip.php:103 +#: usr/local/www/services_captiveportal_vouchers.php:433 +#: usr/local/www/services_captiveportal_hostname.php:108 +#: usr/local/www/services_captiveportal_filemanager.php:148 +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_mac.php:163 +msgid "Pass-through MAC" +msgstr "İzinli MAC" + +#: usr/local/www/services_captiveportal.php:423 +#: usr/local/www/services_captiveportal_filemanager.php:152 +#: usr/local/www/services_captiveportal_ip.php:106 +#: usr/local/www/services_captiveportal_mac.php:156 +#: usr/local/www/services_captiveportal_vouchers.php:405 +#: usr/local/www/services_captiveportal_vouchers.php:412 +#: usr/local/www/services_captiveportal.php:427 +#: usr/local/www/services_captiveportal_vouchers.php:425 +#: usr/local/www/services_captiveportal_ip.php:104 +#: usr/local/www/services_captiveportal_mac.php:154 +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal_filemanager.php:149 +#: usr/local/www/services_captiveportal_ip.php:104 +#: usr/local/www/services_captiveportal_vouchers.php:434 +#: usr/local/www/services_captiveportal_filemanager.php:149 +#: usr/local/www/services_captiveportal.php:427 +#: usr/local/www/services_captiveportal_mac.php:164 +msgid "Allowed IP addresses" +msgstr "İzinli IP adresleri" + +#: usr/local/www/services_captiveportal.php:424 +#: usr/local/www/services_captiveportal_filemanager.php:153 +#: usr/local/www/services_captiveportal_ip.php:107 +#: usr/local/www/services_captiveportal_mac.php:157 +#: usr/local/www/services_captiveportal_hostname.php:112 +#: usr/local/www/services_captiveportal_vouchers.php:406 +#: usr/local/www/services_captiveportal_vouchers.php:413 +#: usr/local/www/services_captiveportal.php:428 +#: usr/local/www/services_captiveportal_vouchers.php:426 +#: usr/local/www/services_captiveportal_ip.php:105 +#: usr/local/www/services_captiveportal_mac.php:155 +#: usr/local/www/services_captiveportal_hostname.php:110 +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_filemanager.php:150 +#: usr/local/www/services_captiveportal_ip.php:105 +#: usr/local/www/services_captiveportal_vouchers.php:435 +#: usr/local/www/services_captiveportal_hostname.php:110 +#: usr/local/www/services_captiveportal_filemanager.php:150 +#: usr/local/www/services_captiveportal.php:428 +#: usr/local/www/services_captiveportal_mac.php:165 +msgid "Allowed Hostnames" +msgstr "İzinli sistem adları" + +#: usr/local/www/services_captiveportal.php:425 +#: usr/local/www/services_captiveportal.php:587 +#: usr/local/www/services_captiveportal_filemanager.php:154 +#: usr/local/www/services_captiveportal_ip.php:108 +#: usr/local/www/services_captiveportal_mac.php:158 +#: usr/local/www/services_captiveportal_hostname.php:113 +#: usr/local/www/services_captiveportal_vouchers.php:85 +#: usr/local/www/services_captiveportal_vouchers.php:407 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_vouchers.php:414 +#: usr/local/www/services_captiveportal.php:429 +#: usr/local/www/services_captiveportal.php:592 +#: usr/local/www/services_captiveportal_vouchers.php:82 +#: usr/local/www/services_captiveportal_vouchers.php:427 +#: usr/local/www/services_captiveportal_ip.php:106 +#: usr/local/www/services_captiveportal_mac.php:156 +#: usr/local/www/services_captiveportal_hostname.php:111 +#: usr/local/www/services_captiveportal.php:427 +#: usr/local/www/services_captiveportal.php:590 +#: usr/local/www/services_captiveportal_filemanager.php:151 +#: usr/local/www/services_captiveportal_ip.php:106 +#: usr/local/www/services_captiveportal_vouchers.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:436 +#: usr/local/www/status_captiveportal_vouchers.php:57 +#: usr/local/www/services_captiveportal_hostname.php:111 +#: usr/local/www/services_captiveportal_filemanager.php:151 +#: usr/local/www/services_captiveportal.php:429 +#: usr/local/www/services_captiveportal.php:584 +#: usr/local/www/services_captiveportal_mac.php:166 +msgid "Vouchers" +msgstr "Biletler" + +#: usr/local/www/services_captiveportal.php:426 +#: usr/local/www/services_captiveportal_filemanager.php:155 +#: usr/local/www/services_captiveportal_ip.php:109 +#: usr/local/www/services_captiveportal_mac.php:159 +#: usr/local/www/services_captiveportal_hostname.php:114 +#: usr/local/www/services_captiveportal_vouchers.php:408 +#: usr/local/www/services_captiveportal_vouchers.php:415 +#: usr/local/www/services_captiveportal.php:430 +#: usr/local/www/services_captiveportal_vouchers.php:428 +#: usr/local/www/services_captiveportal_ip.php:107 +#: usr/local/www/services_captiveportal_mac.php:157 +#: usr/local/www/services_captiveportal_hostname.php:112 +#: usr/local/www/services_captiveportal.php:428 +#: usr/local/www/services_captiveportal_filemanager.php:152 +#: usr/local/www/services_captiveportal_ip.php:107 +#: usr/local/www/services_captiveportal_vouchers.php:437 +#: usr/local/www/services_captiveportal_hostname.php:112 +#: usr/local/www/services_captiveportal_filemanager.php:152 +#: usr/local/www/services_captiveportal.php:430 +#: usr/local/www/services_captiveportal_mac.php:167 +msgid "File Manager" +msgstr "Dosya Yöneticisi" + +#: usr/local/www/services_captiveportal.php:436 +#: usr/local/www/services_captiveportal.php:440 +#: usr/local/www/services_captiveportal.php:438 +#: usr/local/www/services_captiveportal.php:440 +msgid "Enable captive portal" +msgstr "Hizmet Portalını etkinleştir" + +#: usr/local/www/services_captiveportal.php:450 +#: usr/local/www/services_captiveportal.php:455 +#: usr/local/www/services_captiveportal.php:453 +#: usr/local/www/services_captiveportal.php:455 +msgid "Select the interface(s) to enable for captive portal." +msgstr "Hizmet Portalını etkinleştirmek istediğiniz arabirim(ler)'i seçiniz." + +#: usr/local/www/services_captiveportal.php:453 +#: usr/local/www/services_captiveportal.php:458 +#: usr/local/www/services_captiveportal.php:456 +#: usr/local/www/services_captiveportal.php:458 +msgid "Maximum concurrent connections" +msgstr "Maksimum eş zamanlı bağlantı sayısı" + +#: usr/local/www/services_captiveportal.php:457 +#: usr/local/www/services_captiveportal.php:462 +#: usr/local/www/services_captiveportal.php:460 +#: usr/local/www/services_captiveportal.php:462 +msgid "per client IP address (0 = no limit)" +msgstr "istemci başına IP adresi (0 = sınırsız)" + +#: usr/local/www/services_captiveportal.php:460 +msgid "" +"This setting limits the number of concurrent connections to the captive " +"portal HTTP(S) server. This does not set how many users can be logged in to " +"the captive portal, but rather how many users can load the portal page or " +"authenticate at the same time! Default is 4 connections per client IP " +"address, with a total maximum of 16 connections." +msgstr "" +"Bu ayar Hizmet Portalı HTTP(S) sunucusuna aynı anda yapılabilecek bağlantı " +"sayısını sınırlar. Hizmet Portalına oturum açabilecek kullanıcı sayısı " +"değil, aynı anda oturum ekranını görebilecek kullanıcı sayısıdır. Varsayılan " +"değeri istemci IP adresi başına 4'tür, toplam 16'dır." + +#: usr/local/www/services_captiveportal.php:468 +#: usr/local/www/services_captiveportal.php:475 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/system_advanced_misc.php:426 +#: usr/local/www/system_advanced_misc.php:469 +#: usr/local/www/services_captiveportal.php:473 +#: usr/local/www/services_captiveportal.php:480 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/system_advanced_misc.php:518 +#: usr/local/www/services_captiveportal.php:471 +#: usr/local/www/services_captiveportal.php:478 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/system_advanced_misc.php:530 +#: usr/local/www/services_captiveportal.php:473 +#: usr/local/www/services_captiveportal.php:480 +msgid "minutes" +msgstr "dakika" + +#: usr/local/www/services_captiveportal.php:469 +#: usr/local/www/services_captiveportal.php:474 +#: usr/local/www/services_captiveportal.php:472 +#: usr/local/www/services_captiveportal.php:474 +msgid "" +"Clients will be disconnected after this amount of inactivity. They may log " +"in again immediately, though. Leave this field blank for no idle timeout." +msgstr "" +"İstemciler bu süre boyunca herhangi bir eylem gerçekleştirmezlerse " +"bağlantıları kesilir. Hemen arkasında oturum açabilirler. Boşta kalma " +"durumunda bağlantının kesilmesi için bu alanı boş bırakın." + +#: usr/local/www/services_captiveportal.php:472 +#: usr/local/www/services_captiveportal.php:477 +#: usr/local/www/services_captiveportal.php:475 +#: usr/local/www/services_captiveportal.php:477 +msgid "Hard timeout" +msgstr "Mecburi zaman aşımı" + +#: usr/local/www/services_captiveportal.php:476 +#: usr/local/www/services_captiveportal.php:481 +#: usr/local/www/services_captiveportal.php:479 +#: usr/local/www/services_captiveportal.php:481 +msgid "" +"Clients will be disconnected after this amount of time, regardless of " +"activity. They may log in again immediately, though. Leave this field blank " +"for no hard timeout (not recommended unless an idle timeout is set)." +msgstr "" +"İstemcilerin bağlantıları, etkinlik durumuna bakılmazsızın, bu sürenin " +"sonunda koparılır. Hemen tekrar oturum açabilirler. Mecburi zaman aşımını " +"kaldırmak için bu alanı boş bırakın (boşta zaman aşımı ayarlanmadıysa " +"tavsiye edilmez)." + +#: usr/local/www/services_captiveportal.php:479 +#: usr/local/www/services_captiveportal.php:484 +#: usr/local/www/services_captiveportal.php:482 +#: usr/local/www/services_captiveportal.php:484 +msgid "Pass-through credits allowed per MAC address" +msgstr "MAC adresi başına izinli kredi" + +#: usr/local/www/services_captiveportal.php:482 +#: usr/local/www/services_captiveportal.php:487 +#: usr/local/www/services_captiveportal.php:485 +#: usr/local/www/services_captiveportal.php:487 +msgid "per client MAC address (0 or blank = none)" +msgstr "istemci MAC adresi başına (0 veya boş bırakabilirsiniz)" + +#: usr/local/www/services_captiveportal.php:483 +#: usr/local/www/services_captiveportal.php:488 +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/services_captiveportal.php:488 +msgid "" +"This setting allows passing through the captive portal without " +"authentication a limited number of times per MAC address. Once used up, the " +"client can only log in with valid credentials until the waiting period " +"specified below has expired. Recommended to set a hard timeout and/or idle " +"timeout when using this for it to be effective." +msgstr "" +"Bu ayar her MAC adresi başına Hizmet Portalından kimlik doğrulama olmaksızın " +"sınırlı sayıda geçişe izin verir. Bu sayıda kimlik doğrulamasız geçişten " +"sonra istemci aşağıda belirtilen bekleme süresi dolmadan sadece kimlik " +"doğruladıktan sonra çıkabilir. Bu ayarı kullanacaksanız boşta zaman aşımı " +"ve/veya mecburi zaman aşımının da yapılandırılması önerilir." + +#: usr/local/www/services_captiveportal.php:486 +#: usr/local/www/services_captiveportal.php:491 +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:491 +msgid "Waiting period to restore pass-through credits" +msgstr "İzinli kedileri yenilemek için gereken bekleme süresi" + +#: usr/local/www/services_captiveportal.php:489 +#: usr/local/www/services_captiveportal.php:494 +#: usr/local/www/services_captiveportal.php:492 +#: usr/local/www/services_captiveportal.php:494 +msgid "hours" +msgstr "saat" + +#: usr/local/www/services_captiveportal.php:490 +#: usr/local/www/services_captiveportal.php:495 +#: usr/local/www/services_captiveportal.php:493 +#: usr/local/www/services_captiveportal.php:495 +msgid "" +"Clients will have their available pass-through credits restored to the " +"original count after this amount of time since using the first one. This " +"must be above 0 hours if pass-through credits are enabled." +msgstr "" +"Belirtilen süre geçtiğinde istemcilerin izin kredileri orjinal değerlerine " +"sıfırlanır. İzin kredileri açıksa 0 saatten fazla olmalıdır." + +#: usr/local/www/services_captiveportal.php:493 +#: usr/local/www/services_captiveportal.php:498 +#: usr/local/www/services_captiveportal.php:496 +#: usr/local/www/services_captiveportal.php:498 +msgid "Reset waiting period on attempted access" +msgstr "Erişim denemesinde bekleme süresini sıfırla" + +#: usr/local/www/services_captiveportal.php:496 +#: usr/local/www/services_captiveportal.php:501 +#: usr/local/www/services_captiveportal.php:499 +#: usr/local/www/services_captiveportal.php:501 +msgid "Enable waiting period reset on attempted access" +msgstr "Erişim denemesinde bekleme süresinin sıfırlanmasını etkinleştir" + +#: usr/local/www/services_captiveportal.php:497 +#: usr/local/www/services_captiveportal.php:502 +#: usr/local/www/services_captiveportal.php:500 +#: usr/local/www/services_captiveportal.php:502 +msgid "" +"If enabled, the waiting period is reset to the original duration if access " +"is attempted when all pass-through credits have already been exhausted." +msgstr "" +"Etkinleştirildiğinde, izin kredileri tükendikten sonra erişmeye " +"çalışıldığında bekleme süresi sıfırlanır." + +#: usr/local/www/services_captiveportal.php:500 +#: usr/local/www/services_captiveportal.php:505 +#: usr/local/www/services_captiveportal.php:503 +#: usr/local/www/services_captiveportal.php:505 +msgid "Logout popup window" +msgstr "Oturum kapat penceresi" + +#: usr/local/www/services_captiveportal.php:503 +#: usr/local/www/services_captiveportal.php:508 +#: usr/local/www/services_captiveportal.php:506 +#: usr/local/www/services_captiveportal.php:508 +msgid "Enable logout popup window" +msgstr "Oturum kapat penceresini etkinleştir" + +#: usr/local/www/services_captiveportal.php:504 +#: usr/local/www/services_captiveportal.php:509 +#: usr/local/www/services_captiveportal.php:507 +#: usr/local/www/services_captiveportal.php:509 +msgid "" +"If enabled, a popup window will appear when clients are allowed through the " +"captive portal. This allows clients to explicitly disconnect themselves " +"before the idle or hard timeout occurs." +msgstr "" +"Etkinleştirildiğinde, Hizmet Portalından istemci geçişine izin verildiyse ek " +"bir pencere açılır. Bu pencereden kullanıcılar boşta veya mecburi zaman " +"aşımını beklemeden oturumlarını kapatıp bağlantılarını kesebilirler." + +#: usr/local/www/services_captiveportal.php:507 +#: usr/local/www/services_captiveportal.php:512 +#: usr/local/www/services_captiveportal.php:510 +#: usr/local/www/services_captiveportal.php:512 +msgid "Pre-authentication redirect URL" +msgstr "Ön kimlik doğrulama yönlendirme adresi" + +#: usr/local/www/services_captiveportal.php:510 +#: usr/local/www/services_captiveportal.php:515 +#: usr/local/www/services_captiveportal.php:513 +#: usr/local/www/services_captiveportal.php:515 +#, php-format +msgid "" +"Use this field to set $PORTAL_REDIRURL$ variable which can be accessed using " +"your custom captive portal index.php page or error pages." +msgstr "" +"Bu alanı Hizmet Portalı index.php veya hata sayfalarından erişilebilen bir " +"değişken olan $PORTAL_REDIRURL$ değişkenine değer atamak için " +"kullanabilirsiniz." + +#: usr/local/www/services_captiveportal.php:514 +#: usr/local/www/services_captiveportal.php:519 +#: usr/local/www/services_captiveportal.php:517 +#: usr/local/www/services_captiveportal.php:519 +msgid "After authentication Redirection URL" +msgstr "Kimlik doğrulama sonrası yönlendirilecek adres" + +#: usr/local/www/services_captiveportal.php:518 +#: usr/local/www/services_captiveportal.php:523 +#: usr/local/www/services_captiveportal.php:521 +#: usr/local/www/services_captiveportal.php:523 +msgid "" +"If you provide a URL here, clients will be redirected to that URL instead of " +"the one they initially tried to access after they've authenticated." +msgstr "" +"Eğer buraya bir adres (URL) girerseniz, kullanıcılar kimlik doğrulama " +"ardından erişmeye çalıştıkları adres yerine bu adrese yönlendirilirler." + +#: usr/local/www/services_captiveportal.php:522 +#: usr/local/www/services_captiveportal.php:527 +#: usr/local/www/services_captiveportal.php:525 +#: usr/local/www/services_captiveportal.php:527 +msgid "Concurrent user logins" +msgstr "Eş zamanlı kullanıcı oturumları" + +#: usr/local/www/services_captiveportal.php:525 +#: usr/local/www/services_captiveportal.php:530 +#: usr/local/www/services_captiveportal.php:528 +#: usr/local/www/services_captiveportal.php:530 +msgid "Disable concurrent logins" +msgstr "Eş zamanlı oturumları devre dışı bırak" + +#: usr/local/www/services_captiveportal.php:526 +#: usr/local/www/services_captiveportal.php:531 +#: usr/local/www/services_captiveportal.php:529 +#: usr/local/www/services_captiveportal.php:531 +msgid "" +"If this option is set, only the most recent login per username will be " +"active. Subsequent logins will cause machines previously logged in with the " +"same username to be disconnected." +msgstr "" +"Bu seçenek açıldığında, her kullanıcı adına ait son oturum geçerli " +"olacaktır. Aynı kullanıcı adıyla oturum açıldığında o kullanıcı adıyla " +"açılan diğer oturumlar kapatılır." + +#: usr/local/www/services_captiveportal.php:529 +#: usr/local/www/services_captiveportal.php:534 +#: usr/local/www/services_captiveportal.php:532 +#: usr/local/www/services_captiveportal.php:534 +msgid "MAC filtering" +msgstr "MAC filtreleme" + +#: usr/local/www/services_captiveportal.php:532 +#: usr/local/www/services_captiveportal.php:537 +#: usr/local/www/services_captiveportal.php:535 +#: usr/local/www/services_captiveportal.php:537 +msgid "Disable MAC filtering" +msgstr "MAC filtrelemeyi devre dışı bırak" + +#: usr/local/www/services_captiveportal.php:533 +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:536 +#: usr/local/www/services_captiveportal.php:538 +msgid "" +"If this option is set, no attempts will be made to ensure that the MAC " +"address of clients stays the same while they're logged in.This is required " +"when the MAC address of the client cannot be determined (usually because " +"there are routers between" +msgstr "" +"Bu seçenek açıldığında istemcilerin oturum açtıktan sonra MAC adreslerinin " +"aynı kaldığına dair herhangi bir kontrol yapılmaz. Kullanıcın MAC adresi " +"belirlenemiyorsa bu seçeneğin açılması gerekir (genellikle istemcilerle" + +#: usr/local/www/services_captiveportal.php:534 +#: usr/local/www/services_captiveportal.php:539 +#: usr/local/www/services_captiveportal.php:537 +#: usr/local/www/services_captiveportal.php:539 +msgid "and the clients)." +msgstr "arasında yönlendirici(ler) varsa gereklidir)." + +#: usr/local/www/services_captiveportal.php:535 +#: usr/local/www/services_captiveportal.php:540 +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:540 +msgid "If this is enabled, RADIUS MAC authentication cannot be used." +msgstr "" +"Bu özellik etkinleştirildiğinde RADIUS MAC kimlik doğrulama kullanılamaz." + +#: usr/local/www/services_captiveportal.php:538 +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:541 +#: usr/local/www/services_captiveportal.php:543 +msgid "Pass-through MAC Auto Entry" +msgstr "İzinli MAC otomatik girişi" + +#: usr/local/www/services_captiveportal.php:541 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:544 +#: usr/local/www/services_captiveportal.php:546 +msgid "Enable Pass-through MAC automatic additions" +msgstr "İzinli MAC otomatik eklemelerini etkinleştir" + +#: usr/local/www/services_captiveportal.php:542 +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:545 +#: usr/local/www/services_captiveportal.php:547 +msgid "" +"If this option is set, a MAC passthrough entry is automatically added after " +"the user has successfully authenticated. Users of that MAC address will " +"never have to authenticate again." +msgstr "" +"Bu seçenek açıldığında kullanıcı başarılı şekilde kimlik doğruladıktan sonra " +"otomatik olarak bir MAC izni oluşturulur. O MAC adresinden çıkan " +"kullanıcıların bir daha kimlik doğrulaması gerekmez." + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +msgid "" +"To remove the passthrough MAC entry you either have to log in and remove it " +"manually from the" +msgstr "İzinli MAC girdisini silmek için oturum açmalı veya silmeli (" + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +msgid "Pass-through MAC tab" +msgstr "İzinli MAC sekmesi" + +#: usr/local/www/services_captiveportal.php:543 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +#: usr/local/www/services_captiveportal.php:546 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:554 +msgid "or send a POST from another system to remove it." +msgstr ") ya da silmek için başka bir sistemden POST isteğinde bulunmalısınız." + +#: usr/local/www/services_captiveportal.php:544 +#: usr/local/www/services_captiveportal.php:549 +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:549 +msgid "" +"If this is enabled, RADIUS MAC authentication cannot be used. Also, the " +"logout window will not be shown." +msgstr "" +"Etkinleştirildiğinde RADIUS MAC kimlik doğrulama kullanılamaz. Aynı zamanda " +"oturum kapatma ekranı da görüntülenmeyecektir." + +#: usr/local/www/services_captiveportal.php:547 +#: usr/local/www/services_captiveportal.php:552 +#: usr/local/www/services_captiveportal.php:550 +#: usr/local/www/services_captiveportal.php:552 +msgid "Enable Pass-through MAC automatic addition with username" +msgstr "Kullanıcı adı ile otomatik izinli MAC eklenmesini etkinleştir" + +#: usr/local/www/services_captiveportal.php:548 +#: usr/local/www/services_captiveportal.php:553 +#: usr/local/www/services_captiveportal.php:551 +#: usr/local/www/services_captiveportal.php:553 +msgid "" +"If this option is set, with the automatically MAC passthrough entry created " +"the username, used during authentication, will be saved." +msgstr "" +"Bu seçenek açıldığında otomatik MAC izni eklenirken, kimlik doğrulayan " +"kullanıcı adı da kaydedilir." + +#: usr/local/www/services_captiveportal.php:553 +#: usr/local/www/services_captiveportal.php:558 +#: usr/local/www/services_captiveportal.php:556 +#: usr/local/www/services_captiveportal.php:558 +msgid "Per-user bandwidth restriction" +msgstr "Kullanıcı başına bant genişliği sınırlaması" + +#: usr/local/www/services_captiveportal.php:556 +#: usr/local/www/services_captiveportal.php:561 +#: usr/local/www/services_captiveportal.php:559 +#: usr/local/www/services_captiveportal.php:561 +msgid "Enable per-user bandwidth restriction" +msgstr "Kullanıcı başına bant genişliği sınırlamasını etkinleştir" + +#: usr/local/www/services_captiveportal.php:559 +#: usr/local/www/services_captiveportal.php:564 +#: usr/local/www/services_captiveportal.php:562 +#: usr/local/www/services_captiveportal.php:564 +msgid "Default download" +msgstr "Varsayılan indirme" + +#: usr/local/www/services_captiveportal.php:563 +#: usr/local/www/services_captiveportal.php:568 +#: usr/local/www/services_captiveportal.php:566 +#: usr/local/www/services_captiveportal.php:568 +msgid "Default upload" +msgstr "Varsayılan gönderme" + +#: usr/local/www/services_captiveportal.php:567 +#: usr/local/www/services_captiveportal.php:572 +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:572 +msgid "" +"If this option is set, the captive portal will restrict each user who logs " +"in to the specified default bandwidth. RADIUS can override the default " +"settings. Leave empty or set to 0 for no limit." +msgstr "" +"Bu seçenek etkinleştirildiğinde Hizmet Portalı oturum açan her kullanıcıya " +"belirtilen varsayılan bantgenişliği sınırlamasını uygulayacaktır. RADIUS " +"varsayılan değerlerin üzerine yazabilir. Sınırlama uygulamamak için boş " +"bırakın veya 0 atayın." + +#: usr/local/www/services_captiveportal.php:570 +#: usr/local/www/services_captiveportal.php:575 +#: usr/local/www/services_captiveportal.php:573 +msgid "PMS authentication" +msgstr "PMS kimlik doğrulama" + +#: usr/local/www/services_captiveportal.php:573 +#: usr/local/www/services_captiveportal.php:578 +#: usr/local/www/services_captiveportal.php:576 +msgid "Enable PMS authentication" +msgstr "PMS kimlik doğrulamayı etkinleştir" + +#: usr/local/www/services_captiveportal.php:574 +#: usr/local/www/services_captiveportal.php:579 +#: usr/local/www/services_captiveportal.php:577 +msgid "" +"If this option is set, users will be authenticated through the PMS backend " +"if they fill the necessary information in the login page." +msgstr "" +"Bu seçenek ayarlanırsa, kullanıcılar PMS arka uç biriminde doğrulanır eğer " +"gerekli ise giriş ekranında bilgilendirmeyi doldurunuz." + +#: usr/local/www/services_captiveportal.php:583 +#: usr/local/www/services_captiveportal.php:588 +#: usr/local/www/services_captiveportal.php:586 +#: usr/local/www/services_captiveportal.php:580 +msgid "No Authentication" +msgstr "Kimlik Doğrulama Yok" + +#: usr/local/www/services_captiveportal.php:587 +#: usr/local/www/diag_ipsec.php:194 +#: usr/local/www/services_captiveportal.php:592 +#: usr/local/www/diag_ipsec.php:195 +#: usr/local/www/services_captiveportal.php:590 +#: usr/local/www/diag_ipsec.php:196 +#: usr/local/www/services_captiveportal.php:584 +msgid "Local" +msgstr "Yerel" + +#: usr/local/www/services_captiveportal.php:587 usr/local/www/fbegin.inc:93 +#: usr/local/www/fbegin.inc:95 usr/local/www/system_usermanager.php:54 +#: usr/local/www/fbegin.inc:110 usr/local/www/fbegin.inc:112 +#: usr/local/www/services_captiveportal.php:592 usr/local/www/fbegin.inc:119 +#: usr/local/www/fbegin.inc:121 usr/local/www/services_captiveportal.php:590 +#: usr/local/www/services_captiveportal.php:584 usr/local/www/fbegin.inc:111 +#: usr/local/www/fbegin.inc:113 usr/local/www/system_usermanager.php:54 +msgid "User Manager" +msgstr "Kullanıcı Yönetimi" + +#: usr/local/www/services_captiveportal.php:591 +#: usr/local/www/services_captiveportal.php:596 +#: usr/local/www/services_captiveportal.php:594 +#: usr/local/www/services_captiveportal.php:596 +msgid "RADIUS Authentication" +msgstr "RADIUS Kimlik Doğrulama" + +#: usr/local/www/services_captiveportal.php:599 +#: usr/local/www/services_captiveportal.php:635 +#: usr/local/www/services_captiveportal.php:678 +#: usr/local/www/services_captiveportal.php:633 +#: usr/local/www/services_captiveportal.php:676 +#: usr/local/www/services_captiveportal.php:634 +#: usr/local/www/services_captiveportal.php:677 +msgid "Primary RADIUS server" +msgstr "Ana RADIUS sunucu" + +#: usr/local/www/services_captiveportal.php:604 +#: usr/local/www/services_captiveportal.php:640 +#: usr/local/www/services_captiveportal.php:638 +#: usr/local/www/services_captiveportal.php:639 +msgid "" +"Enter the IP address of the RADIUS server which users of the captive portal " +"have to authenticate against." +msgstr "" +"Hizmet Portalının kimlik doğrulamada kullanacağı RADIUS sunucusunun IP " +"adresini giriniz." + +#: usr/local/www/services_captiveportal.php:609 +#: usr/local/www/services_captiveportal.php:645 +#: usr/local/www/services_captiveportal.php:643 +#: usr/local/www/services_captiveportal.php:644 +msgid "Leave this field blank to use the default port (1812)." +msgstr "Varsayılan 1812 portunu kullanmak için boş bırakınız." + +#: usr/local/www/services_captiveportal.php:612 +#: usr/local/www/services_captiveportal.php:632 +#: usr/local/www/services_captiveportal.php:651 +#: usr/local/www/services_captiveportal.php:670 +#: usr/local/www/services_captiveportal.php:725 +#: usr/local/www/services_captiveportal.php:648 +#: usr/local/www/services_captiveportal.php:668 +#: usr/local/www/services_captiveportal.php:690 +#: usr/local/www/services_captiveportal.php:709 +#: usr/local/www/services_captiveportal.php:767 +#: usr/local/www/services_captiveportal.php:646 +#: usr/local/www/services_captiveportal.php:666 +#: usr/local/www/services_captiveportal.php:688 +#: usr/local/www/services_captiveportal.php:707 +#: usr/local/www/services_captiveportal.php:765 +#: usr/local/www/services_captiveportal.php:647 +#: usr/local/www/services_captiveportal.php:667 +#: usr/local/www/services_captiveportal.php:689 +#: usr/local/www/services_captiveportal.php:708 +msgid "Shared secret" +msgstr "Paylaşımlı anahtar" + +#: usr/local/www/services_captiveportal.php:614 +#: usr/local/www/services_captiveportal.php:650 +#: usr/local/www/services_captiveportal.php:648 +#: usr/local/www/services_captiveportal.php:649 +msgid "" +"Leave this field blank to not use a RADIUS shared secret (not recommended)." +msgstr "" +"Bu alanı boş bırakarak RADIUS paylaşımlı anahtar kullanımını devre dışı " +"bırakabilirsiniz (tavsiye edilmez)." + +#: usr/local/www/services_captiveportal.php:620 usr/local/www/vpn_pptp.php:440 +#: usr/local/www/services_captiveportal.php:656 +#: usr/local/www/services_captiveportal.php:697 usr/local/www/vpn_pptp.php:442 +#: usr/local/www/services_captiveportal.php:654 +#: usr/local/www/services_captiveportal.php:695 +#: usr/local/www/services_captiveportal.php:655 +#: usr/local/www/services_captiveportal.php:696 usr/local/www/vpn_pptp.php:445 +msgid "Secondary RADIUS server" +msgstr "İkincil RADIUS sunucu" + +#: usr/local/www/services_captiveportal.php:625 +#: usr/local/www/services_captiveportal.php:661 +#: usr/local/www/services_captiveportal.php:659 +#: usr/local/www/services_captiveportal.php:660 +msgid "" +"If you have a second RADIUS server, you can activate it by entering its IP " +"address here." +msgstr "" +"İkinci bir RADIUS sunucunuz varsa bu alandan IP adresini girerek " +"etkinleştirebilirsiniz." + +#: usr/local/www/services_captiveportal.php:639 +msgid "Tertiary RADIUS server" +msgstr "Üçüncü RADIUS sunucu" + +#: usr/local/www/services_captiveportal.php:644 +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:681 +#: usr/local/www/services_captiveportal.php:682 +msgid "" +"If you have a third RADIUS server, you can activate it by entering its IP " +"address here." +msgstr "" +"Üçüncü bir RADIUS sunucunuz varsa bu alandan IP adresini girerek " +"etkinleştirebilirsiniz." + +#: usr/local/www/services_captiveportal.php:658 +msgid "Quaternary RADIUS server" +msgstr "Dördüncü RADIUS sunucu" + +#: usr/local/www/services_captiveportal.php:663 +#: usr/local/www/services_captiveportal.php:702 +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/services_captiveportal.php:701 +msgid "" +"If you have a fourth RADIUS server, you can activate it by entering its IP " +"address here." +msgstr "" +"Dördüncü bir RADIUS sunucunuz varsa bu alandan IP adresini girerek " +"etkinleştirebilirsiniz." + +#: usr/local/www/services_captiveportal.php:677 +#: usr/local/www/services_captiveportal.php:719 +#: usr/local/www/services_captiveportal.php:717 +#: usr/local/www/services_captiveportal.php:715 +msgid "Accounting" +msgstr "Hesaplandırma" + +#: usr/local/www/services_captiveportal.php:682 +#: usr/local/www/services_captiveportal.php:724 +#: usr/local/www/services_captiveportal.php:722 +#: usr/local/www/services_captiveportal.php:720 +msgid "send RADIUS accounting packets" +msgstr "RADIUS hesaplandırma paketleri gönder" + +#: usr/local/www/services_captiveportal.php:683 +#: usr/local/www/services_captiveportal.php:725 +#: usr/local/www/services_captiveportal.php:723 +#: usr/local/www/services_captiveportal.php:721 +msgid "" +"If this is enabled, RADIUS accounting packets will be sent to the primary " +"RADIUS server." +msgstr "" +"Etkinleştirildiğinde ana RADIUS sunucuya RADIUS hesaplandırma paketleri " +"gönderilir." + +#: usr/local/www/services_captiveportal.php:686 +#: usr/local/www/services_captiveportal.php:728 +#: usr/local/www/services_captiveportal.php:726 +#: usr/local/www/services_captiveportal.php:724 +msgid "Accounting port" +msgstr "Hesaplandırma portu" + +#: usr/local/www/services_captiveportal.php:688 +#: usr/local/www/services_captiveportal.php:730 +#: usr/local/www/services_captiveportal.php:728 +#: usr/local/www/services_captiveportal.php:726 +msgid "Leave blank to use the default port (1813)." +msgstr "Varsayılan (1813) portunun kullanılması için boş bırakınız." + +#: usr/local/www/services_captiveportal.php:694 +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:734 +#: usr/local/www/services_captiveportal.php:746 +msgid "Reauthentication" +msgstr "Tekrar kimlik doğrulama" + +#: usr/local/www/services_captiveportal.php:699 +#: usr/local/www/services_captiveportal.php:741 +#: usr/local/www/services_captiveportal.php:739 +#: usr/local/www/services_captiveportal.php:748 +msgid "Reauthenticate connected users every minute" +msgstr "Bağlı kullanıcıları her dakika tekrar kimlik doğrulamaya tabi tut" + +#: usr/local/www/services_captiveportal.php:700 +#: usr/local/www/services_captiveportal.php:742 +#: usr/local/www/services_captiveportal.php:740 +#: usr/local/www/services_captiveportal.php:749 +msgid "" +"If reauthentication is enabled, Access-Requests will be sent to the RADIUS " +"server for each user that is logged in every minute. If an Access-Reject is " +"received for a user, that user is disconnected from the captive portal " +"immediately." +msgstr "" +"Eğer yeniden kimlik doğrulama açıldıysa her kullanıcının erişim istekleri " +"her dakika RADIUS sunucuya gönderilir. Herhangi bir kullanıcı için yanıt " +"olarak erişim reddi alındığında o kullanıcının Hizmet Portalı bağlantısı " +"kesilir." + +#: usr/local/www/services_captiveportal.php:704 +#: usr/local/www/services_captiveportal.php:746 +#: usr/local/www/services_captiveportal.php:744 +#: usr/local/www/services_captiveportal.php:732 +msgid "Accounting updates" +msgstr "Hesaplandırma güncellemeleri" + +#: usr/local/www/services_captiveportal.php:706 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:746 +#: usr/local/www/services_captiveportal.php:734 +msgid "no accounting updates" +msgstr "hesaplandırma güncellemesi yapma" + +#: usr/local/www/services_captiveportal.php:707 +#: usr/local/www/services_captiveportal.php:749 +#: usr/local/www/services_captiveportal.php:747 +#: usr/local/www/services_captiveportal.php:735 +msgid "stop/start accounting" +msgstr "hesaplandırmayı başlat/durdur" + +#: usr/local/www/services_captiveportal.php:708 +#: usr/local/www/services_captiveportal.php:750 +#: usr/local/www/services_captiveportal.php:748 +#: usr/local/www/services_captiveportal.php:736 +msgid "interim update" +msgstr "geçici güncelleme" + +#: usr/local/www/services_captiveportal.php:715 +#: usr/local/www/services_captiveportal.php:757 +#: usr/local/www/services_captiveportal.php:755 +#: usr/local/www/services_captiveportal.php:753 +msgid "RADIUS MAC authentication" +msgstr "RADIUS MAC kimlik doğrulama" + +#: usr/local/www/services_captiveportal.php:720 +#: usr/local/www/services_captiveportal.php:762 +#: usr/local/www/services_captiveportal.php:760 +#: usr/local/www/services_captiveportal.php:755 +msgid "Enable RADIUS MAC authentication" +msgstr "RADIUS MAC kimlik doğrulamayı etkinleştir" + +#: usr/local/www/services_captiveportal.php:721 +#: usr/local/www/services_captiveportal.php:763 +#: usr/local/www/services_captiveportal.php:761 +#: usr/local/www/services_captiveportal.php:756 +msgid "" +"If this option is enabled, the captive portal will try to authenticate users " +"by sending their MAC address as the username and the password entered below " +"to the RADIUS server." +msgstr "" +"Bu seçenek açıldığında Hizmet Portalı RADIUS sunucuya kullanıcı adı olarak " +"kullanıcıların MAC adreslerini ve parola olarak da aşağıda girilen değeri " +"göndererek kimlik kontrolü gerçekleştirir." + +#: usr/local/www/services_captiveportal.php:732 +#: usr/local/www/services_captiveportal.php:774 +#: usr/local/www/services_captiveportal.php:772 +#: usr/local/www/services_captiveportal.php:743 +msgid "RADIUS options" +msgstr "RADIUS seçenekleri" + +#: usr/local/www/services_captiveportal.php:736 +#: usr/local/www/services_captiveportal.php:778 +#: usr/local/www/services_captiveportal.php:776 +#: usr/local/www/services_captiveportal.php:764 +msgid "RADIUS NAS IP attribute" +msgstr "RADIUS NAS IP niteliği" + +#: usr/local/www/services_captiveportal.php:766 +#: usr/local/www/services_captiveportal.php:808 +#: usr/local/www/services_captiveportal.php:806 +#: usr/local/www/services_captiveportal.php:794 +msgid "Choose the IP to use for calling station attribute." +msgstr "İstemci niteliğini çağırmak için kullanılacak IPyi seçin." + +#: usr/local/www/services_captiveportal.php:771 +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:811 +#: usr/local/www/services_captiveportal.php:799 +msgid "Session-Timeout" +msgstr "Oturum Zaman Aşımı" + +#: usr/local/www/services_captiveportal.php:772 +#: usr/local/www/services_captiveportal.php:814 +#: usr/local/www/services_captiveportal.php:812 +#: usr/local/www/services_captiveportal.php:800 +msgid "Use RADIUS Session-Timeout attributes" +msgstr "RADIUS oturum zaman aşımı niteliklerini kullan" + +#: usr/local/www/services_captiveportal.php:773 +#: usr/local/www/services_captiveportal.php:815 +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:801 +msgid "" +"When this is enabled, clients will be disconnected after the amount of time " +"retrieved from the RADIUS Session-Timeout attribute." +msgstr "" +"Etkinleştirildiğinde istemcilerin bağlantıları RADIUS oturum zaman aşımı " +"niteliğiyle alınan süre sonunda kesilir." + +#: usr/local/www/services_captiveportal.php:789 +#: usr/local/www/services_captiveportal.php:831 +#: usr/local/www/services_captiveportal.php:829 +#: usr/local/www/services_captiveportal.php:817 +#, php-format +msgid "" +"If RADIUS type is set to Cisco, in Access-Requests the value of Calling-" +"Station-Id will be set to the client's IP address and the Called-Station-Id " +"to the client's MAC address. Default behavior is Calling-Station-Id = " +"client's MAC address and Called-Station-Id = %s's WAN IP address." +msgstr "" +"RADIUS türü Cisco olarak ayarlandığında, erişim isteklerinde Calling-" +"Station-Id değeri istemcinin IP adresi olarak ve Called-Station-Id de " +"istemcinin MAC adresi olarak atanır. Öntanımlı davranış Calling-Station-" +"Id'ye istemcinin MAC adresini ve Called-Station-Id'ye %s WAN IP adresini " +"atamaktır." + +#: usr/local/www/services_captiveportal.php:796 +#: usr/local/www/services_captiveportal.php:838 +#: usr/local/www/services_captiveportal.php:836 +#: usr/local/www/services_captiveportal.php:834 +msgid "MAC address format" +msgstr "MAC adresi formatı" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "singledash" +msgstr "tek çizgi" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +#, fuzzy +msgid "ietf" +msgstr "ietf" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +#, fuzzy +msgid "cisco" +msgstr "cisco" + +#: usr/local/www/services_captiveportal.php:801 +#: usr/local/www/services_captiveportal.php:843 +msgid "unformatted" +msgstr "düz" + +#: usr/local/www/services_captiveportal.php:810 +#: usr/local/www/services_captiveportal.php:852 +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/services_captiveportal.php:849 +msgid "" +"This option changes the MAC address format used in the whole RADIUS system. " +"Change this if you also" +msgstr "" +"Bu seçenek tüm RADIUS sisteminde belirtilen formatın kullanılmasını sağlar. " +"RADIUS MAC kimlik" + +#: usr/local/www/services_captiveportal.php:811 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:851 +#: usr/local/www/services_captiveportal.php:850 +msgid "need to change the username format for RADIUS MAC authentication." +msgstr "" +"doğrulamadaki kullanıcı adını da değiştirmeniz gerekiyorsa bunu kullanın." + +#: usr/local/www/services_captiveportal.php:812 +#: usr/local/www/services_captiveportal.php:854 +#: usr/local/www/services_captiveportal.php:852 +#: usr/local/www/services_captiveportal.php:851 +msgid "default:" +msgstr "varsayılan:" + +#: usr/local/www/services_captiveportal.php:813 +#: usr/local/www/services_captiveportal.php:855 +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:852 +msgid "singledash:" +msgstr "tek çizgi:" + +#: usr/local/www/services_captiveportal.php:814 +#: usr/local/www/services_captiveportal.php:856 +#: usr/local/www/services_captiveportal.php:854 +#: usr/local/www/services_captiveportal.php:853 +#, fuzzy +msgid "ietf:" +msgstr "ietf:" + +#: usr/local/www/services_captiveportal.php:815 +#: usr/local/www/services_captiveportal.php:857 +#: usr/local/www/services_captiveportal.php:855 +#: usr/local/www/services_captiveportal.php:854 +#, fuzzy +msgid "cisco:" +msgstr "cisco:" + +#: usr/local/www/services_captiveportal.php:816 +#: usr/local/www/services_captiveportal.php:858 +#: usr/local/www/services_captiveportal.php:856 +#: usr/local/www/services_captiveportal.php:855 +msgid "unformatted:" +msgstr "düz:" + +#: usr/local/www/services_captiveportal.php:819 +#: usr/local/www/services_captiveportal.php:861 +#: usr/local/www/services_captiveportal.php:859 +#: usr/local/www/services_captiveportal.php:861 +msgid "HTTPS login" +msgstr "HTTPS oturum" + +#: usr/local/www/services_captiveportal.php:822 +#: usr/local/www/services_captiveportal.php:864 +#: usr/local/www/services_captiveportal.php:862 +#: usr/local/www/services_captiveportal.php:864 +msgid "Enable HTTPS login" +msgstr "HTTPS oturumunu etkinleştir" + +#: usr/local/www/services_captiveportal.php:823 +#: usr/local/www/services_captiveportal.php:865 +msgid "" +"If enabled, the username and password will be transmitted over an HTTPS " +"connection to protect against eavesdroppers. A server name, certificate and " +"matching private key must also be specified below." +msgstr "" +"Etkinleştirildiğinde kullanıcı adı ve şifre dinlenmelerini engellemek için " +"HTTPS üzerinden gönderilecektir. Bir sunucu adı, sertifika ve bunlara uyumlu " +"özel anahtar aşağıda tanımlanmalıdır." + +#: usr/local/www/services_captiveportal.php:826 +#: usr/local/www/services_captiveportal.php:868 +#: usr/local/www/services_captiveportal.php:866 +#: usr/local/www/services_captiveportal.php:868 +msgid "HTTPS server name" +msgstr "HTTPS sunucu adı" + +#: usr/local/www/services_captiveportal.php:829 +#: usr/local/www/services_captiveportal.php:871 +#: usr/local/www/services_captiveportal.php:869 +#: usr/local/www/services_captiveportal.php:871 +#, php-format +msgid "" +"This name will be used in the form action for the HTTPS POST and should " +"match the Common Name (CN) in your certificate (otherwise, the client " +"browser will most likely display a security warning). Make sure captive " +"portal clients can resolve this name in DNS and verify on the client that " +"the IP resolves to the correct interface IP on %s." +msgstr "" +"Bu isim HTTPS POST form eyleminde kullanılacaktır ve sertifikanızdaki Ortak " +"İsim (CN - Common Name) ile aynı olmalıdır (aksi taktirde istemci browser " +"büyük ihtimalle bir güvenlik uyarısı verecektir). Hizmet Portalı " +"istemcilerinin DNS'te bu ismi çözümleyebildiğinden ve istemcide IP'nin %s " +"üzerindeki doğru arabirim IP'sine gittiğine emin olmalısınız." + +#: usr/local/www/services_captiveportal.php:832 +#: usr/local/www/services_captiveportal.php:874 +msgid "HTTPS certificate" +msgstr "HTTPS sertifikası" + +#: usr/local/www/services_captiveportal.php:836 +#: usr/local/www/services_captiveportal.php:878 +msgid "Paste a signed certificate in X.509 PEM format here." +msgstr "İmzalı sertifikayı x.509 PEM formatında bu alana yapıştırınız." + +#: usr/local/www/services_captiveportal.php:839 +#: usr/local/www/services_captiveportal.php:881 +msgid "HTTPS private key" +msgstr "HTTPS özel anahtar" + +#: usr/local/www/services_captiveportal.php:843 +#: usr/local/www/services_captiveportal.php:885 +msgid "Paste an RSA private key in PEM format here." +msgstr "RSA özel anahtarını PEM formatında bu alana yapıştırınız." + +#: usr/local/www/services_captiveportal.php:846 +#: usr/local/www/services_captiveportal.php:888 +msgid "HTTPS intermediate certificate" +msgstr "HTTPS ara sertifika" + +#: usr/local/www/services_captiveportal.php:850 +#: usr/local/www/system_camanager.php:406 +#: usr/local/www/system_certmanager.php:515 +#: usr/local/www/system_certmanager.php:614 +#: usr/local/www/services_captiveportal.php:892 +#: usr/local/www/system_camanager.php:413 +#: usr/local/www/system_certmanager.php:623 +msgid "Paste a certificate in X.509 PEM format here." +msgstr "Sertifikayı X.509 PEM formatında bu alana yapıştırınız." + +#: usr/local/www/services_captiveportal.php:853 +#: usr/local/www/services_captiveportal.php:895 +#: usr/local/www/services_captiveportal.php:891 +#: usr/local/www/services_captiveportal.php:893 +msgid "Portal page contents" +msgstr "Hizmet Portalı sayfa içerikleri" + +#: usr/local/www/services_captiveportal.php:865 +#: usr/local/www/services_captiveportal.php:899 +#: usr/local/www/services_captiveportal.php:913 +#: usr/local/www/services_captiveportal.php:910 +#: usr/local/www/services_captiveportal.php:944 +#: usr/local/www/services_captiveportal.php:958 +#: usr/local/www/services_captiveportal.php:906 +#: usr/local/www/services_captiveportal.php:940 +#: usr/local/www/services_captiveportal.php:954 +#: usr/local/www/services_captiveportal.php:908 +#: usr/local/www/services_captiveportal.php:942 +#: usr/local/www/services_captiveportal.php:956 +msgid "View current page" +msgstr "Sayfayı görüntüle" + +#: usr/local/www/services_captiveportal.php:871 +#: usr/local/www/services_captiveportal.php:916 +#: usr/local/www/services_captiveportal.php:912 +#: usr/local/www/services_captiveportal.php:914 +#, php-format +msgid "" +"Upload an HTML/PHP file for the portal page here (leave blank to keep the " +"current one). Make sure to include a form (POST to %1$s) with a submit " +"button (%2$s) and a hidden field with %3$s and %4$s. Include the %5$s and " +"%6$s and/or %7$s input fields if authentication is enabled, otherwise it " +"will always fail." +msgstr "" +"Hizmet Portalı için bir HTML/PHP sayfası yükleyin. %1$s POST yapacak bir " +"form, %2$s bir gönder düğmesi ve %3$s ve %4$s şeklinde bir gizli alan " +"eklemeyi unutmayın. Kimlik doğrulama açıksa %5$s ve %6$s girdi alanlarını " +"eklemeyi unutmayın. Ayrıca kimlik doğrulama açıksa %7$s alanını da " +"ekleyebilirsiniz." + +#: usr/local/www/services_captiveportal.php:882 +#: usr/local/www/services_captiveportal.php:927 +#: usr/local/www/services_captiveportal.php:923 +#: usr/local/www/services_captiveportal.php:925 +msgid "Example code for the form:" +msgstr "Form için örnek kod:" + +#: usr/local/www/services_captiveportal.php:894 +#: usr/local/www/services_captiveportal.php:939 +#: usr/local/www/services_captiveportal.php:935 +#: usr/local/www/services_captiveportal.php:937 +msgid "error page" +msgstr "hata sayfası" + +#: usr/local/www/services_captiveportal.php:895 +#: usr/local/www/services_captiveportal.php:909 +#: usr/local/www/services_captiveportal.php:940 +#: usr/local/www/services_captiveportal.php:954 +#: usr/local/www/services_captiveportal.php:936 +#: usr/local/www/services_captiveportal.php:950 +#: usr/local/www/services_captiveportal.php:938 +#: usr/local/www/services_captiveportal.php:952 +msgid "contents" +msgstr "içindekiler" + +#: usr/local/www/services_captiveportal.php:903 +#: usr/local/www/services_captiveportal.php:948 +#: usr/local/www/services_captiveportal.php:944 +#: usr/local/www/services_captiveportal.php:946 +msgid "" +"The contents of the HTML/PHP file that you upload here are displayed when an " +"authentication error occurs. You may include" +msgstr "" +"Burada yüklediğiniz HTML/PHP dosyası bir kimlik doğrulama hatası oluştuğunda " +"gösterilen dosyadır" + +#: usr/local/www/services_captiveportal.php:904 +#: usr/local/www/services_captiveportal.php:949 +#: usr/local/www/services_captiveportal.php:945 +#: usr/local/www/services_captiveportal.php:947 +msgid "" +"which will be replaced by the error or reply messages from the RADIUS " +"server, if any." +msgstr "" +"eklediğinizde RADIUS sunucudan gelen hata mesajı veya yanıtla değiştirilir." + +#: usr/local/www/services_captiveportal.php:907 usr/local/www/fbegin.inc:86 +#: usr/local/www/fbegin.inc:103 usr/local/www/services_captiveportal.php:952 +#: usr/local/www/fbegin.inc:112 usr/local/www/services_captiveportal.php:948 +#: usr/local/www/services_captiveportal.php:950 usr/local/www/fbegin.inc:104 +msgid "Logout" +msgstr "Güvenli Çıkış" + +#: usr/local/www/services_captiveportal.php:917 +#: usr/local/www/services_captiveportal.php:962 +#: usr/local/www/services_captiveportal.php:958 +#: usr/local/www/services_captiveportal.php:960 +msgid "" +"The contents of the HTML/PHP file that you upload here are displayed on " +"authentication success when the logout popup is enabled." +msgstr "" +"Burada yüklediğiniz HTML/PHP dosyası oturum kapatma penceresi " +"etkinleştirildiğinde kimlik doğrulandıktan sonra gösterilir." + +#: usr/local/www/services_captiveportal.php:930 +#: usr/local/www/services_captiveportal.php:975 +#: usr/local/www/services_captiveportal.php:971 +#: usr/local/www/services_captiveportal.php:973 +msgid "" +"Changing any settings on this page will disconnect all clients! Don't forget " +"to enable the DHCP server on your captive portal interface! Make sure that " +"the default/maximum DHCP lease time is higher than the timeout entered on " +"this page. Also, the DNS forwarder needs to be enabled for DNS lookups by " +"unauthenticated clients to work." +msgstr "" +"Bu sayfadaki herhangi bir ayarı değiştirmek tüm istemcilerin bağlantısını " +"kesecektir. Hizmet Portalı arabiriminde DHCP sunucuyu etkinleştirmeyi " +"unutmayın. DHCP kira süresinin bu sayfada girilen zaman aşımından yüksek " +"olması gerekir. Ayrıca, kimliği doğrulanmamış istemcilerin DNS sorgularının " +"çalışması için DNS yönlendiricinin etkinleştirilmesi gerekir." + +#: usr/local/www/services_captiveportal_filemanager.php:101 +#: usr/local/www/services_captiveportal_filemanager.php:98 +#: usr/local/www/services_captiveportal_filemanager.php:98 +#, php-format +msgid "A file with the name '%s' already exists." +msgstr "%s adında dosya sistemde zaten mevcut." + +#: usr/local/www/services_captiveportal_filemanager.php:108 +#: usr/local/www/services_captiveportal_filemanager.php:105 +#: usr/local/www/services_captiveportal_filemanager.php:105 +msgid "The total size of all files uploaded may not exceed " +msgstr "Tüm dosyaların toplam boyutu şu değeri geçemez " + +#: usr/local/www/services_captiveportal_filemanager.php:163 +#: usr/local/www/system_firmware_restorefullbackup.php:141 +#: usr/local/www/services_captiveportal_filemanager.php:160 +#: usr/local/www/diag_system_pftop.php:140 +#: usr/local/www/diag_system_pftop.php:159 +#: usr/local/www/services_captiveportal_filemanager.php:160 +#: usr/local/www/system_firmware_restorefullbackup.php:141 +msgid "Size" +msgstr "Boyut" + +#: usr/local/www/services_captiveportal_filemanager.php:168 +#: usr/local/www/services_captiveportal_filemanager.php:207 +#: usr/local/www/services_captiveportal_filemanager.php:165 +#: usr/local/www/services_captiveportal_filemanager.php:204 +#: usr/local/www/services_captiveportal_filemanager.php:165 +#: usr/local/www/services_captiveportal_filemanager.php:204 +msgid "add file" +msgstr "dosya ekle" + +#: usr/local/www/services_captiveportal_filemanager.php:179 +#: usr/local/www/services_captiveportal_filemanager.php:176 +#: usr/local/www/services_captiveportal_filemanager.php:176 +msgid "Do you really want to delete this file?" +msgstr "Bu dosyayı silmek istediğinize emin misiniz?" + +#: usr/local/www/services_captiveportal_filemanager.php:179 +#: usr/local/www/services_captiveportal_filemanager.php:176 +#: usr/local/www/services_captiveportal_filemanager.php:176 +msgid "delete file" +msgstr "dosyayı sil" + +#: usr/local/www/services_captiveportal_filemanager.php:186 +#: usr/local/www/services_captiveportal_filemanager.php:183 +#: usr/local/www/services_captiveportal_filemanager.php:183 +msgid "TOTAL" +msgstr "TOPLAM" + +#: usr/local/www/services_captiveportal_filemanager.php:197 +#: usr/local/www/services_captiveportal_filemanager.php:194 +#: usr/local/www/services_captiveportal_filemanager.php:194 +msgid "cancel" +msgstr "iptal" + +#: usr/local/www/services_captiveportal_filemanager.php:217 +#: usr/local/www/services_captiveportal_filemanager.php:214 +#: usr/local/www/services_captiveportal_filemanager.php:214 +msgid "" +"Any files that you upload here with the filename prefix of captiveportal- " +"will be made available in the root directory of the captive portal HTTP(S) " +"server. You may reference them directly from your portal page HTML code " +"using relative paths. Example: you've uploaded an image with the name " +"'captiveportal-test.jpg' using the file manager. Then you can include it in " +"your portal page like this:" +msgstr "" +"Burada yükleyeceğiniz tüm dosyalarının adlarının başına captiveportal- " +"eklenecektir ve Hizmet Portalı HTTP(S) sunucusunun kök dizininden " +"erişilebilir olacaktır. Portal sayfalarınızın HTML'in bu dosyalara atıfta " +"bulunabilirsiniz. Örneğin dosya yöneticisini kullanacak 'captiveportal-" +"test.jpg' adlında bir dosya yüklediyseniz, Hizmet Portalı sayfalarınızda şu " +"şekilde atıfta bulunabilirsiniz:" + +#: usr/local/www/services_captiveportal_filemanager.php:224 +#: usr/local/www/services_captiveportal_filemanager.php:221 +#: usr/local/www/services_captiveportal_filemanager.php:221 +msgid "" +"In addition, you can also upload .php files for execution. You can pass the " +"filename to your custom page from the initial page by using text similar to:" +msgstr "" +"Ek olarak, çalıştırılmak üzere .php dosyaları da yükleyebilirsiniz. " +"Hazırladığınız özel dosyalara ana dosyadan şuna benzer şekilde atıfta " +"bulunabilirsiniz:" + +#: usr/local/www/services_captiveportal_filemanager.php:227 +#: usr/local/www/services_captiveportal_filemanager.php:224 +#: usr/local/www/services_captiveportal_filemanager.php:224 +msgid "Acceptable usage policy" +msgstr "Kabul edilebilir kullanım ilkeleri" + +#: usr/local/www/services_captiveportal_filemanager.php:229 +#: usr/local/www/services_captiveportal_filemanager.php:226 +#: usr/local/www/services_captiveportal_filemanager.php:226 +#, php-format +msgid "The total size limit for all files is %s." +msgstr "Tüm dosyalar için toplam boyut limiti %s." + +#: usr/local/www/diag_limiter_info.php:46 +#: usr/local/www/diag_limiter_info.php:46 +msgid "Diagnostics: Limiter Info" +msgstr "Araçlar: Limitleyici Bilgisi" + +#: usr/local/www/diag_limiter_info.php:108 +#: usr/local/www/diag_limiter_info.php:109 +#: usr/local/www/diag_limiter_info.php:109 +msgid "Gathering Limiter information, please wait..." +msgstr "Limitleyici bilgisi alınıyor, lütfen bekleyiniz..." + +#: usr/local/www/firewall_nat.php:197 usr/local/www/firewall_nat.php:202 +#: usr/local/www/firewall_nat.php:202 +msgid "Src. addr" +msgstr "Kyn. adres" + +#: usr/local/www/firewall_nat.php:198 usr/local/www/firewall_nat.php:203 +#: usr/local/www/firewall_nat.php:203 +msgid "Src. ports" +msgstr "Kyn. portlar" + +#: usr/local/www/firewall_nat.php:199 usr/local/www/firewall_nat.php:204 +#: usr/local/www/firewall_nat.php:204 +msgid "Dest. addr" +msgstr "Hdf. adres" + +#: usr/local/www/firewall_nat.php:200 usr/local/www/firewall_nat.php:205 +#: usr/local/www/firewall_nat.php:205 +msgid "Dest. ports" +msgstr "Hdf. portlar" + +#: usr/local/www/firewall_nat.php:201 usr/local/www/firewall_nat.php:206 +#: usr/local/www/firewall_nat.php:206 +msgid "NAT IP" +msgstr "NAT IP" + +#: usr/local/www/firewall_nat.php:202 usr/local/www/firewall_nat.php:207 +#: usr/local/www/firewall_nat.php:207 +msgid "NAT Ports" +msgstr "NAT Portları" + +#: usr/local/www/firewall_nat.php:252 usr/local/www/firewall_nat.php:265 +#: usr/local/www/firewall_nat.php:265 +msgid "All traffic matching this NAT entry is passed" +msgstr "Bu NAT girişine uyan tüm trafik geçirilir" + +#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267 +#: usr/local/www/firewall_nat.php:267 +msgid "Firewall rule ID" +msgstr "Güvenlik duvarı kuralı" + +#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267 +#: usr/local/www/firewall_nat.php:267 +msgid "is managed with this rule" +msgstr "bu kural tarafından yönetilmektedir" + +#: usr/local/www/firewall_nat.php:313 usr/local/www/firewall_nat_out.php:450 +#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326 +#: usr/local/www/firewall_nat.php:326 usr/local/www/firewall_nat_out.php:448 +msgid "Do you really want to delete this rule?" +msgstr "Bu kuralı silmek istediğinize emin misiniz?" + +#: usr/local/www/firewall_nat.php:349 usr/local/www/firewall_nat.php:362 +#: usr/local/www/firewall_nat.php:362 +msgid "linked rule" +msgstr "ilişkilendirilmiş kural" + +#: usr/local/www/diag_ipsec.php:78 usr/local/www/diag_ipsec_sad.php:73 +#: usr/local/www/diag_ipsec_spd.php:72 usr/local/www/diag_ipsec.php:88 +#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec_sad.php:74 +#: usr/local/www/diag_ipsec_spd.php:73 usr/local/www/diag_ipsec.php:91 +#: usr/local/www/diag_ipsec_spd.php:73 usr/local/www/diag_ipsec_sad.php:74 +msgid "Overview" +msgstr "Görünüm" + +#: usr/local/www/diag_ipsec.php:79 usr/local/www/diag_ipsec_sad.php:49 +#: usr/local/www/diag_ipsec_sad.php:74 usr/local/www/diag_ipsec_spd.php:73 +#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec.php:90 +#: usr/local/www/diag_ipsec_sad.php:75 usr/local/www/diag_ipsec_spd.php:74 +#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec_spd.php:74 +#: usr/local/www/diag_ipsec_sad.php:49 usr/local/www/diag_ipsec_sad.php:75 +msgid "SAD" +msgstr "SAD" + +#: usr/local/www/diag_ipsec.php:80 usr/local/www/diag_ipsec_sad.php:75 +#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_ipsec_spd.php:74 +#: usr/local/www/diag_ipsec.php:90 usr/local/www/diag_ipsec.php:91 +#: usr/local/www/diag_ipsec_sad.php:76 usr/local/www/diag_ipsec_spd.php:75 +#: usr/local/www/diag_ipsec.php:93 usr/local/www/diag_ipsec_spd.php:49 +#: usr/local/www/diag_ipsec_spd.php:75 usr/local/www/diag_ipsec_sad.php:76 +msgid "SPD" +msgstr "SPD" + +#: usr/local/www/diag_ipsec.php:81 usr/local/www/diag_ipsec_sad.php:76 +#: usr/local/www/diag_ipsec_spd.php:75 usr/local/www/diag_ipsec.php:91 +#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec_sad.php:77 +#: usr/local/www/diag_ipsec_spd.php:76 usr/local/www/diag_ipsec.php:94 +#: usr/local/www/diag_ipsec_spd.php:76 usr/local/www/diag_ipsec_sad.php:77 +msgid "Logs" +msgstr "Kayıtlar" + +#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec.php:103 +#: usr/local/www/diag_ipsec.php:104 usr/local/www/diag_ipsec.php:106 +msgid "Remote IP" +msgstr "Uzak IP" + +#: usr/local/www/diag_ipsec.php:93 usr/local/www/vpn_ipsec_phase2.php:419 +#: usr/local/www/diag_ipsec.php:104 usr/local/www/vpn_ipsec_phase2.php:445 +#: usr/local/www/diag_ipsec.php:105 usr/local/www/vpn_ipsec_phase2.php:511 +#: usr/local/www/diag_ipsec.php:107 usr/local/www/vpn_ipsec_phase2.php:533 +msgid "Local Network" +msgstr "Yerel Ağ" + +#: usr/local/www/diag_ipsec.php:94 usr/local/www/vpn_ipsec_phase2.php:461 +#: usr/local/www/vpn_openvpn_client.php:762 +#: usr/local/www/vpn_openvpn_server.php:1055 usr/local/www/diag_ipsec.php:105 +#: usr/local/www/vpn_openvpn_server.php:1197 +#: usr/local/www/vpn_ipsec_phase2.php:487 +#: usr/local/www/vpn_openvpn_client.php:767 usr/local/www/diag_ipsec.php:106 +#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/diag_ipsec.php:108 +#: usr/local/www/vpn_ipsec_phase2.php:610 +msgid "Remote Network" +msgstr "Uzak Ağ" + +# yapılandırabilirsiniz kelimesi web arayüz de iki defa geldiği için silindi. (technical) +#: usr/local/www/diag_ipsec.php:165 usr/local/www/diag_ipsec_sad.php:135 +#: usr/local/www/diag_ipsec_spd.php:144 usr/local/www/diag_ipsec_sad.php:136 +#: usr/local/www/diag_ipsec_spd.php:145 usr/local/www/diag_ipsec_spd.php:145 +#: usr/local/www/diag_ipsec_sad.php:136 +msgid "You can configure your IPsec" +msgstr "IPsec'i " + +#: usr/local/www/diag_ipsec_sad.php:90 usr/local/www/diag_ipsec_sad.php:91 +#: usr/local/www/diag_ipsec_sad.php:91 +msgid "SPI" +msgstr "SPI" + +#: usr/local/www/diag_ipsec_sad.php:91 usr/local/www/diag_ipsec_sad.php:92 +#: usr/local/www/diag_ipsec_sad.php:92 +msgid "Enc. alg." +msgstr "Şifreleme algoritması" + +#: usr/local/www/diag_ipsec_sad.php:92 usr/local/www/diag_ipsec_sad.php:93 +#: usr/local/www/diag_ipsec_sad.php:93 +msgid "Auth. alg." +msgstr "Kimlik doğrulama algoritması" + +#: usr/local/www/diag_ipsec_sad.php:93 usr/local/www/diag_ipsec_sad.php:94 +#: usr/local/www/diag_ipsec_sad.php:94 +msgid "Data" +msgstr "Veri" + +#: usr/local/www/diag_ipsec_sad.php:112 usr/local/www/diag_ipsec_sad.php:113 +#: usr/local/www/diag_ipsec_sad.php:113 +msgid "Do you really want to delete this security association?" +msgstr "Bu güvenlik ilişkilendirmesini silmeyi gerçekten istiyor musunuz?" + +#: usr/local/www/diag_ipsec_sad.php:121 usr/local/www/diag_ipsec_sad.php:122 +#: usr/local/www/diag_ipsec_sad.php:122 +msgid "No IPsec security associations." +msgstr "IPsec güvenlik ilişkilendirmesi yok." + +#: usr/local/www/services_captiveportal_ip.php:123 +#: usr/local/www/services_captiveportal_ip.php:163 +#: usr/local/www/services_captiveportal_hostname.php:128 +#: usr/local/www/services_captiveportal_hostname.php:164 +#: usr/local/www/services_captiveportal_ip.php:121 +#: usr/local/www/services_captiveportal_ip.php:161 +#: usr/local/www/services_captiveportal_hostname.php:126 +#: usr/local/www/services_captiveportal_hostname.php:162 +#: usr/local/www/services_captiveportal_ip.php:121 +#: usr/local/www/services_captiveportal_ip.php:161 +#: usr/local/www/services_captiveportal_hostname.php:126 +#: usr/local/www/services_captiveportal_hostname.php:162 +msgid "add address" +msgstr "adres ekle" + +#: usr/local/www/services_captiveportal_ip.php:153 +#: usr/local/www/services_captiveportal_hostname.php:154 +#: usr/local/www/services_captiveportal_ip.php:151 +#: usr/local/www/services_captiveportal_hostname.php:152 +#: usr/local/www/services_captiveportal_ip.php:151 +#: usr/local/www/services_captiveportal_hostname.php:152 +msgid "edit address" +msgstr "adres düzenle" + +#: usr/local/www/services_captiveportal_ip.php:154 +#: usr/local/www/services_captiveportal_hostname.php:155 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +msgid "Do you really want to delete this address?" +msgstr "Bu adresi silmek istediğinize emin misiniz?" + +#: usr/local/www/services_captiveportal_ip.php:154 +#: usr/local/www/services_captiveportal_hostname.php:155 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +#: usr/local/www/services_captiveportal_ip.php:152 +#: usr/local/www/services_captiveportal_hostname.php:153 +msgid "delete address" +msgstr "adresi sil" + +#: usr/local/www/services_captiveportal_ip.php:172 +#: usr/local/www/services_captiveportal_ip.php:170 +#: usr/local/www/services_captiveportal_ip.php:170 +msgid "" +"Adding allowed IP addresses will allow IP access to/from these addresses " +"through the captive portal without being taken to the portal page. This can " +"be used for a web server serving images for the portal page or a DNS server " +"on another network, for example. By specifying from addresses, it " +"may be used to always allow pass-through access from a client behind the " +"captive portal." +msgstr "" +"Eklenen izinli IP adresleri oturum açma sayfasına yönlendirilmeden IP " +"erişimine izin verilen adreslerdir. Bu özelliği başka bir ağdan hizmet " +"portalına resim gönderen bir web sunucu gibi sistemlere erişim vermek için " +"kullanabilirsiniz. Kaynak adresleri belirterek Hizmet Portalının " +"arkasındaki bir istemciye her zaman erişim izni verilebilir." + +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "All connections" +msgstr "Tüm bağlantılar" + +#: usr/local/www/services_captiveportal_ip.php:176 +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_ip.php:174 +#: usr/local/www/services_captiveportal_ip.php:181 +msgid "the IP address are allowed" +msgstr "izin verilen IP adresi" + +#: usr/local/www/services_captiveportal_ip.php:183 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:182 +#: usr/local/www/services_captiveportal_ip.php:181 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "from" +msgstr "kaynak" + +#: usr/local/www/services_captiveportal_ip_edit.php:63 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +#: usr/local/www/services_captiveportal_ip_edit.php:60 +msgid "Edit allowed IP address" +msgstr "İzinli IP adresini düzenle" + +#: usr/local/www/services_captiveportal_ip_edit.php:102 +#: usr/local/www/services_captiveportal_ip_edit.php:100 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +msgid "Allowed IP address" +msgstr "İzinli IP adresi" + +#: usr/local/www/services_captiveportal_ip_edit.php:110 +#: usr/local/www/services_captiveportal_mac_edit.php:108 +#: usr/local/www/services_captiveportal_hostname_edit.php:110 +#: usr/local/www/services_captiveportal_hostname_edit.php:108 +#: usr/local/www/services_captiveportal_mac_edit.php:106 +#: usr/local/www/services_captiveportal_ip_edit.php:108 +#: usr/local/www/services_captiveportal_ip_edit.php:110 +#: usr/local/www/services_captiveportal_hostname_edit.php:108 +#: usr/local/www/services_captiveportal_mac_edit.php:106 +msgid "Upload speed needs to be an integer" +msgstr "Gönderme hızı tamsayı olmalıdır." + +#: usr/local/www/services_captiveportal_ip_edit.php:113 +#: usr/local/www/services_captiveportal_mac_edit.php:110 +#: usr/local/www/services_captiveportal_hostname_edit.php:112 +#: usr/local/www/services_captiveportal_hostname_edit.php:110 +#: usr/local/www/services_captiveportal_mac_edit.php:108 +#: usr/local/www/services_captiveportal_ip_edit.php:111 +#: usr/local/www/services_captiveportal_ip_edit.php:113 +#: usr/local/www/services_captiveportal_hostname_edit.php:110 +#: usr/local/www/services_captiveportal_mac_edit.php:108 +msgid "Download speed needs to be an integer" +msgstr "İndirme hızı tamsayı olmalıdır." + +#: usr/local/www/services_captiveportal_ip_edit.php:120 +#: usr/local/www/services_captiveportal_mac_edit.php:117 +#: usr/local/www/services_captiveportal_hostname_edit.php:119 +#: usr/local/www/services_captiveportal_hostname_edit.php:117 +#: usr/local/www/services_captiveportal_mac_edit.php:115 +#: usr/local/www/services_captiveportal_ip_edit.php:118 +#: usr/local/www/services_captiveportal_ip_edit.php:120 +#: usr/local/www/services_captiveportal_hostname_edit.php:117 +#: usr/local/www/services_captiveportal_mac_edit.php:115 +msgid "already allowed" +msgstr "zaten izinli" + +#: usr/local/www/services_captiveportal_ip_edit.php:175 +#: usr/local/www/services_captiveportal_ip_edit.php:173 +#: usr/local/www/services_captiveportal_ip_edit.php:184 +msgid "Edit allowed ip rule" +msgstr "İzinli IP kuralını düzenle" + +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/system_gateways_edit.php:442 +#: usr/local/www/system_gateways_edit.php:454 +#: usr/local/www/system_gateways_edit.php:463 +#: usr/local/www/system_gateways_edit.php:475 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +#: usr/local/www/system_gateways_edit.php:569 +#: usr/local/www/system_gateways_edit.php:581 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +#: usr/local/www/system_gateways_edit.php:573 +#: usr/local/www/system_gateways_edit.php:585 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +msgid "From" +msgstr "Kaynak" + +#: usr/local/www/services_captiveportal_ip_edit.php:182 +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/system_gateways_edit.php:445 +#: usr/local/www/system_gateways_edit.php:457 +#: usr/local/www/system_gateways_edit.php:466 +#: usr/local/www/system_gateways_edit.php:478 +#: usr/local/www/services_captiveportal_hostname_edit.php:162 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +#: usr/local/www/system_gateways_edit.php:572 +#: usr/local/www/system_gateways_edit.php:584 +#: usr/local/www/services_captiveportal_ip_edit.php:180 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +#: usr/local/www/system_gateways_edit.php:576 +#: usr/local/www/system_gateways_edit.php:588 +#: usr/local/www/services_captiveportal_hostname_edit.php:164 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +msgid "To" +msgstr "Hedef" + +# kelime içinde yeri yok herhangi bir veri girmeyiniz tek boşluk bırakılacak. +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +msgid "Use" +msgstr " " + +#: usr/local/www/services_captiveportal_ip_edit.php:191 +#: usr/local/www/services_captiveportal_ip_edit.php:189 +msgid "" +"to always allow an IP address through the captive portal (without " +"authentication)" +msgstr "" +"bir IP adresininin Hizmet Portalından (kimlik doğrulama olmaksızın) geçişine " +"izin ver" + +#: usr/local/www/services_captiveportal_ip_edit.php:192 +#: usr/local/www/services_captiveportal_ip_edit.php:190 +msgid "" +"to allow access from all clients (even non-authenticated ones) behind the " +"portal to this IP address" +msgstr "" +"Portalın arkasındaki tüm istemcilerden (kimliği doğrulanmamışlar dahil) bu " +"IP adresine erişim izni ver" + +#: usr/local/www/services_captiveportal_ip_edit.php:204 +#: usr/local/www/services_captiveportal_ip_edit.php:202 +#: usr/local/www/services_captiveportal_ip_edit.php:196 +msgid "IP address and subnet mask. Use /32 for a single IP" +msgstr "IP adresi ve altağ maskesi. Tek IP için /32 kullanınız." + +#: usr/local/www/services_captiveportal_ip_edit.php:215 +#: usr/local/www/services_captiveportal_mac_edit.php:189 +#: usr/local/www/services_captiveportal_hostname_edit.php:189 +#: usr/local/www/services_captiveportal_hostname_edit.php:187 +#: usr/local/www/services_captiveportal_mac_edit.php:187 +#: usr/local/www/services_captiveportal_ip_edit.php:213 +#: usr/local/www/services_captiveportal_ip_edit.php:207 +#: usr/local/www/services_captiveportal_hostname_edit.php:189 +#: usr/local/www/services_captiveportal_mac_edit.php:200 +msgid "Bandwidth up" +msgstr "Gönderme bantgenişliği" + +#: usr/local/www/services_captiveportal_ip_edit.php:218 +#: usr/local/www/services_captiveportal_ip_edit.php:216 +#: usr/local/www/services_captiveportal_ip_edit.php:210 +msgid "Enter a upload limit to be enforced on this IP address in Kbit/s" +msgstr "Kbit/sn cinsinden bu IP adresine veri gönderme hızı sınırını girin." + +#: usr/local/www/services_captiveportal_ip_edit.php:222 +#: usr/local/www/services_captiveportal_mac_edit.php:195 +#: usr/local/www/services_captiveportal_hostname_edit.php:195 +#: usr/local/www/services_captiveportal_hostname_edit.php:193 +#: usr/local/www/services_captiveportal_mac_edit.php:193 +#: usr/local/www/services_captiveportal_ip_edit.php:220 +#: usr/local/www/services_captiveportal_ip_edit.php:214 +#: usr/local/www/services_captiveportal_hostname_edit.php:195 +#: usr/local/www/services_captiveportal_mac_edit.php:206 +msgid "Bandwidth down" +msgstr "İndirme bantgenişliği" + +#: usr/local/www/services_captiveportal_ip_edit.php:225 +#: usr/local/www/services_captiveportal_ip_edit.php:223 +#: usr/local/www/services_captiveportal_ip_edit.php:217 +msgid "Enter a download limit to be enforced on this IP address in Kbit/s" +msgstr "Kbit/sn cinsinden bu IP adresinden veri çekme hızı sınırını girin." + +#: usr/local/www/services_captiveportal_mac.php:80 +#: usr/local/www/services_captiveportal_mac.php:78 +#: usr/local/www/services_captiveportal_mac.php:78 +msgid "No entry exists yet!" +msgstr "Henüz herhangi bir kayıt girilmemiş." + +#: usr/local/www/services_captiveportal_mac.php:84 +#: usr/local/www/services_captiveportal_mac.php:82 +#: usr/local/www/services_captiveportal_mac.php:82 +msgid "Please set the zone on which the operation should be allowed" +msgstr "Lütfen bu alanı izin verilecek işleme göre ayarlayınız" + +#: usr/local/www/services_captiveportal_mac.php:96 +#: usr/local/www/services_captiveportal_mac.php:94 +#: usr/local/www/services_captiveportal_mac.php:94 +msgid "No entry exists for this username:" +msgstr "Bu kullanıcı için hehangi bir kayıt bulunamadı:" + +#: usr/local/www/services_captiveportal_mac.php:115 +#: usr/local/www/services_captiveportal_mac.php:113 +#: usr/local/www/services_captiveportal_mac.php:118 +msgid "The entry was sucessfully deleted" +msgstr "Kayıt başarıyla silindi" + +#: usr/local/www/services_captiveportal_mac.php:117 +#: usr/local/www/services_captiveportal_mac.php:115 +#: usr/local/www/services_captiveportal_mac.php:120 +msgid "No entry exists for this mac address:" +msgstr "Bu MAC adresi için kayıt bulunamadı:" + +#: usr/local/www/services_captiveportal_mac.php:148 +#: usr/local/www/services_captiveportal_mac.php:146 +#: usr/local/www/services_captiveportal_mac.php:156 +msgid "" +"The captive portal MAC address configuration has been changed.
    You must " +"apply the changes in order for them to take effect." +msgstr "" +"Hizmet Portalı MAC adres yapılandırması değiştirildi.
    Değişiklikleri " +"uygulayarak etkin hale gelmelerini sağlayabilirsiniz." + +#: usr/local/www/services_captiveportal_mac.php:180 +#: usr/local/www/services_captiveportal_mac.php:178 +#: usr/local/www/services_captiveportal_mac.php:188 +msgid "edit host" +msgstr "host düzenle" + +#: usr/local/www/services_captiveportal_mac.php:181 +#: usr/local/www/services_dnsmasq.php:276 +#: usr/local/www/services_unbound.php:312 +#: usr/local/www/services_dnsmasq.php:277 +#: usr/local/www/services_captiveportal_mac.php:179 +#: usr/local/www/services_dnsmasq.php:302 +#: usr/local/www/services_captiveportal_mac.php:189 +msgid "Do you really want to delete this host?" +msgstr "Bu hostu silmek istediğinize emin misiniz?" + +#: usr/local/www/services_captiveportal_mac.php:181 +#: usr/local/www/services_captiveportal_mac.php:179 +#: usr/local/www/services_captiveportal_mac.php:189 +msgid "delete host" +msgstr "host sil" + +#: usr/local/www/services_captiveportal_mac.php:186 +#: usr/local/www/services_captiveportal_mac.php:184 +#: usr/local/www/services_captiveportal_mac.php:194 +msgid "add host" +msgstr "host ekle" + +#: usr/local/www/services_captiveportal_mac.php:192 +#: usr/local/www/services_captiveportal_mac.php:190 +#: usr/local/www/services_captiveportal_mac.php:200 +msgid "" +"Adding MAC addresses as pass-through MACs allows them access through the " +"captive portal automatically without being taken to the portal page." +msgstr "" +"MAC adreslerini izinli MAC olarak eklemek onlara Hizmet Portalı oturumu " +"gerektirmeden erişim sağlar." + +#: usr/local/www/services_captiveportal_mac_edit.php:60 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +#: usr/local/www/services_captiveportal_mac_edit.php:57 +msgid "Edit pass-through MAC address" +msgstr "İzinli MAC adresi girişini düzenle" + +#: usr/local/www/services_captiveportal_mac_edit.php:105 +#: usr/local/www/services_captiveportal_mac_edit.php:103 +#: usr/local/www/services_captiveportal_mac_edit.php:103 +msgid "A valid MAC address must be specified" +msgstr "Geçerli bir MAC adresi belirtilmelidir" + +#: usr/local/www/services_captiveportal_mac_edit.php:172 +#: usr/local/www/services_captiveportal_mac_edit.php:170 +#: usr/local/www/services_captiveportal_mac_edit.php:177 +msgid "Edit Pass-through MAC address" +msgstr "Geçmesine izin verilecek MAC adresini düzenle" + +#: usr/local/www/services_captiveportal_mac_edit.php:179 +#: usr/local/www/services_captiveportal_mac_edit.php:177 +#: usr/local/www/services_captiveportal_mac_edit.php:190 +msgid "MAC address (6 hex octets separated by colons)" +msgstr "" +"MAC adresi (birbirinden : ile ayrılmış 6 adet çift basamaklı onaltılık sayı)" + +#: usr/local/www/services_captiveportal_mac_edit.php:192 +#: usr/local/www/services_captiveportal_mac_edit.php:190 +#: usr/local/www/services_captiveportal_mac_edit.php:203 +msgid "Enter a upload limit to be enforced on this MAC address in Kbit/s" +msgstr "Bu MAC adresi için Kbit/sn cinsinden veri gönderme limiti giriniz." + +#: usr/local/www/services_captiveportal_mac_edit.php:198 +#: usr/local/www/services_captiveportal_mac_edit.php:196 +#: usr/local/www/services_captiveportal_mac_edit.php:209 +msgid "Enter a download limit to be enforced on this MAC address in Kbit/s" +msgstr "Bu MAC adresi için Kbit/sn cinsinden veri indirme limiti giriniz." + +#: usr/local/www/diag_ipsec_spd.php:90 usr/local/www/diag_ipsec_spd.php:91 +#: usr/local/www/diag_ipsec_spd.php:91 +msgid "Tunnel endpoints" +msgstr "Tünel uçları" + +#: usr/local/www/diag_ipsec_spd.php:108 usr/local/www/diag_ipsec_spd.php:109 +#: usr/local/www/diag_ipsec_spd.php:109 +msgid "Do you really want to delete this security policy?" +msgstr "Bu güvenlik ilkesini silmek istediğinize emin misiniz?" + +#: usr/local/www/diag_ipsec_spd.php:119 usr/local/www/diag_ipsec_spd.php:120 +#: usr/local/www/diag_ipsec_spd.php:120 +msgid "incoming (as seen by firewall)" +msgstr "gelen (güvenlik duvarı tarafından görüldüğü şekliyle)" + +#: usr/local/www/diag_ipsec_spd.php:126 usr/local/www/diag_ipsec_spd.php:127 +#: usr/local/www/diag_ipsec_spd.php:127 +msgid "outgoing (as seen by firewall)" +msgstr "giden (güvenlik duvarı tarafından görünen şekliyle)" + +#: usr/local/www/diag_ipsec_spd.php:131 usr/local/www/diag_ipsec_spd.php:132 +#: usr/local/www/diag_ipsec_spd.php:132 +msgid "No IPsec security policies." +msgstr "IPsec güvenlik ilkesi bulunamamıştır." + +#: usr/local/www/diag_ping.php:59 usr/local/www/diag_ping.php:59 +#, php-format +msgid "Count must be between 1 and %s" +msgstr "Adet 1 ile %s arasında olmalıdır" + +#: usr/local/www/diag_ping.php:126 usr/local/www/diag_ping.php:126 +msgid "Ping output" +msgstr "Ping çıktısı" + +#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcp.php:111 +msgid "" +"The DHCP Server can only be enabled on interfaces configured with static IP " +"addresses" +msgstr "" +"DHCP sunucu sadece statik adres ile çalışan arabirimlerde aktif edilebilir." + +#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcpv6.php:74 +#: usr/local/www/services_router_advertisements.php:75 +#: usr/local/www/services_dhcpv6.php:75 +#: usr/local/www/services_router_advertisements.php:75 +#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcpv6.php:75 +msgid "Only interfaces configured with a static IP will be shown" +msgstr "Sadece statik IP adresine sahip arabirimler görüntülenmektedir." + +#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177 +#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189 +#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +msgid "Range begin" +msgstr "Aralık başlangıcı" + +#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177 +#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189 +#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174 +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168 +msgid "Range end" +msgstr "Aralık sonu" + +#: usr/local/www/services_dhcp.php:212 usr/local/www/services_dhcp.php:214 +#: usr/local/www/services_dhcpv6.php:182 usr/local/www/services_dhcpv6.php:186 +#: usr/local/www/services_dhcpv6.php:188 usr/local/www/services_dhcp.php:213 +#: usr/local/www/services_dhcp.php:215 usr/local/www/services_dhcpv6.php:194 +#: usr/local/www/services_dhcpv6.php:198 usr/local/www/services_dhcpv6.php:200 +#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcp.php:261 +#: usr/local/www/services_dhcpv6.php:179 usr/local/www/services_dhcpv6.php:183 +#: usr/local/www/services_dhcpv6.php:185 usr/local/www/services_dhcp.php:240 +#: usr/local/www/services_dhcp.php:242 usr/local/www/services_dhcpv6.php:173 +#: usr/local/www/services_dhcpv6.php:177 usr/local/www/services_dhcpv6.php:179 +msgid "A valid range must be specified." +msgstr "Geçerli bir aralık belirtilmelidir." + +#: usr/local/www/services_dhcp.php:216 usr/local/www/services_dhcp.php:217 +#: usr/local/www/services_dhcp.php:263 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/services_dhcp.php:244 +msgid "A valid IP address must be specified for the gateway." +msgstr "Ağ geçidi için geçerli bir IP adresi belirtilmelidir." + +#: usr/local/www/services_dhcp.php:218 usr/local/www/services_dhcp.php:219 +#: usr/local/www/services_dhcp.php:265 +#: usr/local/www/services_dhcp_edit.php:209 +#: usr/local/www/services_dhcp.php:246 +msgid "" +"A valid IP address must be specified for the primary/secondary WINS servers." +msgstr "" +"Birincil/ikincil WINS sunucular için geçerli bir IP adresi girilmelidir." + +#: usr/local/www/services_dhcp.php:223 usr/local/www/services_dhcp.php:224 +#: usr/local/www/services_dhcp.php:270 +#: usr/local/www/services_dhcp_edit.php:215 +#: usr/local/www/services_dhcp.php:251 +#, php-format +msgid "" +"The gateway address %s does not lie within the chosen interface's subnet." +msgstr "Ağ geçidi adresi %s seçili arabirimin altağında değil." + +#: usr/local/www/services_dhcp.php:226 usr/local/www/services_dhcp.php:227 +#: usr/local/www/services_dhcp.php:273 +#: usr/local/www/services_dhcp_edit.php:218 +#: usr/local/www/services_dhcp.php:254 +msgid "" +"A valid IP address must be specified for the primary/secondary DNS servers." +msgstr "Birincil/ikincil DNS sunucular için geçerli bir IP adresi girilmelidir." + +#: usr/local/www/services_dhcp.php:229 usr/local/www/services_dhcpv6.php:195 +#: usr/local/www/services_dhcp.php:230 usr/local/www/services_dhcpv6.php:207 +#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcpv6.php:192 +#: usr/local/www/services_dhcp_edit.php:221 +#: usr/local/www/services_dhcp.php:257 usr/local/www/services_dhcpv6.php:186 +msgid "The default lease time must be at least 60 seconds." +msgstr "Varsayılan kira süresi en az 60 saniye olmalıdır." + +#: usr/local/www/services_dhcp.php:231 usr/local/www/services_dhcpv6.php:197 +#: usr/local/www/services_dhcp.php:232 usr/local/www/services_dhcpv6.php:209 +#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcpv6.php:194 +#: usr/local/www/services_dhcp_edit.php:223 +#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcpv6.php:188 +msgid "" +"The maximum lease time must be at least 60 seconds and higher than the " +"default lease time." +msgstr "" +"En fazla kira süresi en az 60 saniye olmalıdır ve varsayılan kira süresinden " +"de yüksek olmak zorundadır." + +#: usr/local/www/services_dhcp.php:233 usr/local/www/services_dhcpv6.php:199 +#: usr/local/www/services_dhcp.php:234 usr/local/www/services_dhcpv6.php:211 +#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcpv6.php:196 +#: usr/local/www/services_dhcp_edit.php:225 +#: usr/local/www/services_dhcp.php:261 usr/local/www/services_dhcpv6.php:190 +msgid "A valid domain name must be specified for the dynamic DNS registration." +msgstr "Dinamik DNS kaydı için geçerli bir sunucu adı girilmelidir." + +#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcp.php:246 +#: usr/local/www/services_dhcp.php:298 +#: usr/local/www/services_dhcp_edit.php:237 +#: usr/local/www/services_dhcp.php:279 +msgid "" +"A valid IP address must be specified for the primary/secondary NTP servers." +msgstr "Birincil/ikincil NTP sunucular için geçerli bir IP adresi girilmelidir." + +#: usr/local/www/services_dhcp.php:237 usr/local/www/services_dhcpv6.php:203 +#: usr/local/www/services_dhcp.php:248 usr/local/www/services_dhcpv6.php:225 +#: usr/local/www/services_dhcp.php:300 usr/local/www/services_dhcpv6.php:210 +#: usr/local/www/services_dhcp.php:281 usr/local/www/services_dhcpv6.php:204 +msgid "A valid domain name must be specified for the DNS domain." +msgstr "DNS etki alanı için geçerli bir sunucu adı girilmelidir." + +#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcp.php:250 +#: usr/local/www/services_dhcp.php:302 +#: usr/local/www/services_dhcp_edit.php:239 +#: usr/local/www/services_dhcp.php:283 +msgid "A valid IP address or hostname must be specified for the TFTP server." +msgstr "TFTP sunucu için geçerli bir host adı ya da IP adresi girilmelidir." + +#: usr/local/www/services_dhcp.php:241 usr/local/www/services_dhcp.php:252 +#: usr/local/www/services_dhcp.php:304 +#: usr/local/www/services_dhcp_edit.php:241 +#: usr/local/www/services_dhcp.php:285 +msgid "A valid IP address must be specified for the network boot server." +msgstr "Ağ açılış (boot) sunucusu olarak geçerli bir IP adresi girilmelidir." + +#: usr/local/www/services_dhcp.php:244 usr/local/www/services_dhcp.php:255 +#: usr/local/www/services_dhcp.php:307 usr/local/www/services_dhcp.php:288 +msgid "You cannot use the network address in the starting subnet range." +msgstr "Ağ adresini altağ sınırı başlangıcı olarak kullanamazsınız." + +#: usr/local/www/services_dhcp.php:246 usr/local/www/services_dhcp.php:257 +#: usr/local/www/services_dhcp.php:309 usr/local/www/services_dhcp.php:290 +msgid "You cannot use the broadcast address in the ending subnet range." +msgstr "Yayın adresini altağ sınırı bitişi olarak kullanamazsınız." + +#: usr/local/www/services_dhcp.php:253 usr/local/www/services_dhcp.php:264 +#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcp.php:297 +#, php-format +msgid "The subnet range cannot overlap with virtual IP address %s." +msgstr "Altağ aralığı sanal IP adresi %s ile çakışamaz." + +#: usr/local/www/services_dhcp.php:268 usr/local/www/services_dhcp.php:279 +#: usr/local/www/services_dhcp.php:331 usr/local/www/services_dhcp.php:312 +msgid "Text type cannot include quotation marks." +msgstr "Metin türü çift veya tek tırnak içeremez." + +#: usr/local/www/services_dhcp.php:270 usr/local/www/services_dhcp.php:281 +#: usr/local/www/services_dhcp.php:333 usr/local/www/services_dhcp.php:314 +msgid "" +"String type must be enclosed in quotes like \"this\" or must be a series of " +"octets specified in hexadecimal, separated by colons, like 01:23:45:67:89:ab:" +"cd:ef" +msgstr "" +"Dize (string) türü çift tırnakla sarmalanmış (\"bunun\" gibi) olmalıdır veya " +"iki basamaklı onaltılık 8 sayıdan (01:23:45:67:89:ab:cd:ef gibi) oluşmalıdır" + +#: usr/local/www/services_dhcp.php:272 usr/local/www/services_dhcp.php:283 +#: usr/local/www/services_dhcp.php:335 usr/local/www/services_dhcp.php:316 +msgid "Boolean type must be true, false, on, or off." +msgstr "Boole türü true, false, on veya off olabilir." + +#: usr/local/www/services_dhcp.php:274 usr/local/www/services_dhcp.php:285 +#: usr/local/www/services_dhcp.php:337 usr/local/www/services_dhcp.php:318 +msgid "Unsigned 8-bit integer type must be a number in the range 0 to 255." +msgstr "" +"İşaretsiz 8 bitlik tamsayı türü 0 ile 255 arasında bir tamsayı olmalıdır." + +#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcp.php:287 +#: usr/local/www/services_dhcp.php:339 usr/local/www/services_dhcp.php:320 +msgid "Unsigned 16-bit integer type must be a number in the range 0 to 65535." +msgstr "" +"İşaretsiz 16 bitlik tamsayı türü 0 ile 65535 arasında bir tamsayı olmalıdır." + +#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcp.php:289 +#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcp.php:322 +msgid "" +"Unsigned 32-bit integer type must be a number in the range 0 to 4294967295." +msgstr "" +"İşaretsiz 32 bitlik tamsayı türü 0 ile 4294967295 arasında bir tamsayı " +"olmalıdır." + +#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcp.php:291 +#: usr/local/www/services_dhcp.php:343 usr/local/www/services_dhcp.php:324 +msgid "Signed 8-bit integer type must be a number in the range -128 to 127." +msgstr "" +"İşaretli 8 bitlik tamsayı türü -128 ile 127 arasında bir tamsayı olmalıdır." + +#: usr/local/www/services_dhcp.php:282 usr/local/www/services_dhcp.php:293 +#: usr/local/www/services_dhcp.php:345 usr/local/www/services_dhcp.php:326 +msgid "" +"Signed 16-bit integer type must be a number in the range -32768 to 32767." +msgstr "" +"İşaretli 16 bitlik tamsayı türü -32768 ile 32767 arasında bir tamsayı " +"olmalıdır." + +#: usr/local/www/services_dhcp.php:284 usr/local/www/services_dhcp.php:295 +#: usr/local/www/services_dhcp.php:347 usr/local/www/services_dhcp.php:328 +msgid "" +"Signed 32-bit integer type must be a number in the range -2147483648 to " +"2147483647." +msgstr "" +"İşaretli 32 bitlik tamsayı türü -2147483648 ile 2147483647 arasında bir " +"tamsayı olmalıdır." + +#: usr/local/www/services_dhcp.php:286 usr/local/www/services_dhcp.php:297 +#: usr/local/www/services_dhcp.php:349 usr/local/www/services_dhcp.php:330 +msgid "IP address or host type must be an IP address or host name." +msgstr "IP adresi veya host adı bir IP adresi veya host adı olmalıdır." + +#: usr/local/www/services_dhcp.php:297 usr/local/www/services_dhcpv6.php:230 +#: usr/local/www/services_dhcp.php:308 usr/local/www/services_dhcpv6.php:252 +#: usr/local/www/services_dhcp.php:360 usr/local/www/services_dhcpv6.php:237 +#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcpv6.php:232 +msgid "The specified range lies outside of the current subnet." +msgstr "Belirtilen aralık varolan altağ dışında kalmaktadır." + +#: usr/local/www/services_dhcp.php:301 usr/local/www/services_dhcp.php:312 +#: usr/local/www/services_dhcpv6.php:257 usr/local/www/services_dhcp.php:364 +#: usr/local/www/services_dhcpv6.php:242 usr/local/www/services_dhcp.php:345 +#: usr/local/www/services_dhcpv6.php:237 +msgid "The range is invalid (first element higher than second element)." +msgstr "Aralık değeri geçerli değil (İlk sayı ikinciden daha büyük)." + +#: usr/local/www/services_dhcp.php:305 usr/local/www/services_dhcpv6.php:240 +#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcpv6.php:261 +#: usr/local/www/services_dhcp.php:372 usr/local/www/services_dhcpv6.php:246 +#: usr/local/www/services_dhcp.php:368 usr/local/www/services_dhcpv6.php:241 +#, php-format +msgid "" +"You must disable the DHCP relay on the %s interface before enabling the DHCP " +"server." +msgstr "" +"DHCP sunucuyu etkinleştirmeden önce %s arabirimindeki DHCP aracısını devre " +"dışı bırakmalısınız." + +#: usr/local/www/services_dhcp.php:315 usr/local/www/services_dhcp.php:326 +#: usr/local/www/services_dhcpv6.php:276 usr/local/www/services_dhcp.php:382 +#: usr/local/www/services_dhcpv6.php:261 usr/local/www/services_dhcp.php:378 +#: usr/local/www/services_dhcpv6.php:256 +#, php-format +msgid "The DHCP range cannot overlap any static DHCP mappings." +msgstr "" +"DHCP aralığı herhangi bir DHCP statik haritalamasındaki öğelerle örtüşemez." + +#: usr/local/www/services_dhcp.php:421 usr/local/www/services_dhcp.php:433 +#: usr/local/www/services_dhcp.php:527 usr/local/www/services_dhcp.php:526 +msgid "DHCP server" +msgstr "DHCP sunucu" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +msgid "Text" +msgstr "Metin" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +msgid "String" +msgstr "Dize (string)" + +#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447 +#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539 +msgid "Boolean" +msgstr "Boole" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +msgid "Unsigned 8-bit integer" +msgstr "İşaretsiz 8 bitlik tamsayı" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +msgid "Unsigned 16-bit integer" +msgstr "İşaretsiz 16 bitlik tamsayı" + +#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540 +msgid "Unsigned 32-bit integer" +msgstr "İşaretsiz 32 bitlik tamsayı" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +msgid "Signed 8-bit integer" +msgstr "İşaretli 8 bitlik tamsayı" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +msgid "Signed 16-bit integer" +msgstr "İşaretli 16 bitlik tamsayı" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +msgid "Signed 32-bit integer" +msgstr "İşaretli 32 bitlik tamsayı" + +#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449 +#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541 +msgid "IP address or host" +msgstr "IP adresi yada host" + +#: usr/local/www/services_dhcp.php:528 usr/local/www/services_dhcpv6.php:453 +#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcpv6.php:480 +#: usr/local/www/services_dhcp.php:645 usr/local/www/services_dhcpv6.php:460 +#: usr/local/www/services_dhcp.php:647 usr/local/www/services_dhcpv6.php:455 +msgid "" +"DHCP Relay is currently enabled. Cannot enable the DHCP Server service while " +"the DHCP Relay is enabled on any interface." +msgstr "" +"DHCP Aracısı etkin durumda. DHCP sunucu servisi DHCP Aracısı etkin " +"durumdayken başlatılamaz." + +#: usr/local/www/services_dhcp.php:536 usr/local/www/services_dhcpv6.php:461 +#: usr/local/www/services_dhcp.php:549 usr/local/www/services_dhcpv6.php:488 +#: usr/local/www/services_dhcp.php:653 usr/local/www/services_dhcpv6.php:468 +#: usr/local/www/services_dhcp.php:655 usr/local/www/services_dhcpv6.php:463 +msgid "The static mapping configuration has been changed" +msgstr "Statik haritalama yapılandırması değiştirildi" + +#: usr/local/www/services_dhcp.php:575 usr/local/www/services_dhcp.php:588 +#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcp.php:695 +#, php-format +msgid "Enable DHCP server on %s interface" +msgstr "%s arabiriminde DHCP sunucuyu etkinleştir" + +#: usr/local/www/services_dhcp.php:583 usr/local/www/services_dhcpv6.php:518 +#: usr/local/www/services_dhcp.php:596 usr/local/www/services_dhcpv6.php:592 +#: usr/local/www/services_dhcp.php:706 usr/local/www/services_dhcpv6.php:523 +#: usr/local/www/services_dhcp.php:708 usr/local/www/services_dhcpv6.php:534 +msgid "Deny unknown clients" +msgstr "Tanınmayan istemcileri reddet" + +#: usr/local/www/services_dhcp.php:584 usr/local/www/services_dhcpv6.php:519 +#: usr/local/www/services_dhcp.php:597 usr/local/www/services_dhcpv6.php:593 +#: usr/local/www/services_dhcp.php:707 usr/local/www/services_dhcpv6.php:524 +#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:535 +msgid "" +"If this is checked, only the clients defined below will get DHCP leases from " +"this server. " +msgstr "" +"Bu seçenek işaretlendiğinde sadece aşağıda belirtilen istemciler sunucudan " +"DHCP kirası temin edebilirler. " + +#: usr/local/www/services_dhcp.php:593 usr/local/www/services_dhcpv6.php:528 +#: usr/local/www/services_dhcp.php:606 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_dhcp.php:716 usr/local/www/services_dhcpv6.php:533 +#: usr/local/www/services_captiveportal_ip_edit.php:99 +#: usr/local/www/services_dhcp.php:726 usr/local/www/services_dhcpv6.php:548 +msgid "Subnet mask" +msgstr "Altağ maskesi" + +#: usr/local/www/services_dhcp.php:599 usr/local/www/services_dhcpv6.php:534 +#: usr/local/www/services_dhcp.php:612 usr/local/www/services_dhcpv6.php:608 +#: usr/local/www/services_dhcp.php:722 usr/local/www/services_dhcpv6.php:539 +#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:554 +msgid "Available range" +msgstr "Uygun aralık" + +#: usr/local/www/services_dhcp.php:616 usr/local/www/services_dhcpv6.php:552 +#: usr/local/www/services_dhcp.php:629 usr/local/www/services_dhcpv6.php:625 +#: usr/local/www/services_dhcp.php:750 usr/local/www/vpn_l2tp.php:342 +#: usr/local/www/services_dhcpv6.php:556 usr/local/www/vpn_l2tp.php:345 +#: usr/local/www/services_dhcp.php:760 usr/local/www/services_dhcpv6.php:573 +msgid "Subnet Mask" +msgstr "Altağ Maskesi" + +#: usr/local/www/services_dhcp.php:633 usr/local/www/services_dhcpv6.php:569 +#: usr/local/www/services_dhcp.php:646 usr/local/www/services_dhcpv6.php:642 +#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:573 +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:590 +msgid "Range" +msgstr "Aralık" + +#: usr/local/www/services_dhcp.php:640 usr/local/www/services_dhcp.php:653 +#: usr/local/www/services_dhcp.php:829 +#: usr/local/www/services_dhcp_edit.php:395 +#: usr/local/www/services_dhcp.php:843 +msgid "WINS servers" +msgstr "WINS sunucular" + +#: usr/local/www/services_dhcp.php:651 usr/local/www/services_dhcpv6.php:594 +#: usr/local/www/services_dhcp.php:664 usr/local/www/services_dhcpv6.php:671 +#: usr/local/www/services_router_advertisements.php:376 +#: usr/local/www/services_dhcp.php:840 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_router_advertisements.php:376 +#: usr/local/www/services_dhcp_edit.php:406 +#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:619 +msgid "" +"NOTE: leave blank to use the system default DNS servers - this interface's " +"IP if DNS forwarder is enabled, otherwise the servers configured on the " +"General page." +msgstr "" +"Not: Sistem varsayılan DNS sunucusunu kullanmak için boş bırakınız, DNS " +"yönlendirici etkinse bu arabirimin IPsini, aksi taktirde Genel sayfasında " +"yapılandırılmış sunucuları giriniz." + +#: usr/local/www/services_dhcp.php:658 usr/local/www/services_dhcpv6.php:602 +#: usr/local/www/services_dhcp.php:671 usr/local/www/services_dhcp.php:847 +#: usr/local/www/services_dhcp_edit.php:413 +#: usr/local/www/services_dhcp.php:861 +msgid "" +"The default is to use the IP on this interface of the firewall as the " +"gateway. Specify an alternate gateway here if this is not the correct " +"gateway for your network." +msgstr "" +"Varsayılan davranış ağ geçidi olarak güvenlik duvarının bu arabiriminin IP " +"adresini kullanmaktır. Eğer ağınızın ağ geçidi bu değilse buradan farklı bir " +"ağ geçidi belirtebilirsiniz." + +#: usr/local/www/services_dhcp.php:662 usr/local/www/services_dhcpv6.php:607 +#: usr/local/www/services_dhcp.php:675 usr/local/www/services_dhcpv6.php:675 +#: usr/local/www/services_dhcp.php:851 usr/local/www/services_dhcpv6.php:606 +#: usr/local/www/services_dhcp_edit.php:417 +#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:623 +msgid "Domain name" +msgstr "Alan adı" + +#: usr/local/www/services_dhcp.php:665 usr/local/www/services_dhcpv6.php:610 +#: usr/local/www/services_dhcp.php:678 usr/local/www/services_dhcpv6.php:678 +#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:609 +#: usr/local/www/services_dhcp_edit.php:420 +#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcpv6.php:626 +msgid "" +"The default is to use the domain name of this system as the default domain " +"name provided by DHCP. You may specify an alternate domain name here." +msgstr "" +"Varsayılan davranış DHCP tarafından verilen alan adı olarak bu sistmein alan " +"adını kullanmaktır. İsterseniz buradan farklı bir alan adı verebilirsiniz." + +#: usr/local/www/services_dhcp.php:669 usr/local/www/services_dhcpv6.php:614 +#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:682 +#: usr/local/www/services_router_advertisements.php:381 +#: usr/local/www/services_dhcp.php:858 usr/local/www/services_dhcpv6.php:613 +#: usr/local/www/services_router_advertisements.php:381 +#: usr/local/www/services_dhcp_edit.php:424 +#: usr/local/www/services_dhcp.php:872 usr/local/www/services_dhcpv6.php:630 +msgid "Domain search list" +msgstr "Alan adı arama listesi" + +#: usr/local/www/services_dhcp.php:672 usr/local/www/services_dhcpv6.php:617 +msgid "The DHCP server can optionally provide a domain search list." +msgstr "" +"DHCP sunucu isteğe bağlı olarak bir alan adı arama listesi de verebilir." + +#: usr/local/www/services_dhcp.php:676 usr/local/www/services_dhcpv6.php:621 +#: usr/local/www/services_dhcp.php:689 usr/local/www/services_dhcpv6.php:689 +#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:620 +#: usr/local/www/services_dhcp_edit.php:431 +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:637 +msgid "Default lease time" +msgstr "Varsayılan kira süresi" + +#: usr/local/www/services_dhcp.php:680 usr/local/www/services_dhcpv6.php:625 +#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcpv6.php:693 +#: usr/local/www/services_dhcp.php:869 usr/local/www/services_dhcpv6.php:624 +#: usr/local/www/services_dhcp_edit.php:435 +#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:641 +msgid "" +"This is used for clients that do not ask for a specific expiration time." +msgstr "Kiralarının ne zaman dolacağını sormayan istemciler için kullanılır." + +#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:627 +#: usr/local/www/services_dhcp.php:695 usr/local/www/services_dhcpv6.php:695 +#: usr/local/www/services_dhcp.php:871 usr/local/www/services_dhcpv6.php:626 +#: usr/local/www/services_dhcp_edit.php:437 +#: usr/local/www/services_dhcp.php:885 usr/local/www/services_dhcpv6.php:643 +msgid "The default is 7200 seconds." +msgstr "Varsayılan 7200 saniyedir." + +#: usr/local/www/services_dhcp.php:686 usr/local/www/services_dhcpv6.php:631 +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:699 +#: usr/local/www/services_dhcp.php:875 usr/local/www/services_dhcpv6.php:630 +#: usr/local/www/services_dhcp_edit.php:441 +#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:647 +msgid "Maximum lease time" +msgstr "Maksimum kira süresi" + +#: usr/local/www/services_dhcp.php:690 usr/local/www/services_dhcpv6.php:635 +#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcpv6.php:703 +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:634 +#: usr/local/www/services_dhcp_edit.php:445 +#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:651 +msgid "" +"This is the maximum lease time for clients that ask for a specific " +"expiration time." +msgstr "" +"Kiralarının ne zaman dolacağını soran kullanıcılar için en yüksek kira " +"süresidir." + +#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcpv6.php:637 +#: usr/local/www/services_dhcp.php:705 usr/local/www/services_dhcpv6.php:705 +#: usr/local/www/services_dhcp.php:881 usr/local/www/services_dhcpv6.php:636 +#: usr/local/www/services_dhcp_edit.php:447 +#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcpv6.php:653 +msgid "The default is 86400 seconds." +msgstr "Varsayılan 86400 saniyedir." + +#: usr/local/www/services_dhcp.php:696 usr/local/www/services_dhcpv6.php:641 +#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:886 usr/local/www/services_dhcpv6.php:640 +#: usr/local/www/services_dhcp.php:900 usr/local/www/services_dhcpv6.php:657 +msgid "Failover peer IP:" +msgstr "Yük aktarma eş IPsi:" + +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:644 +#: usr/local/www/services_dhcp.php:712 usr/local/www/services_dhcpv6.php:712 +#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:643 +#: usr/local/www/services_dhcpv6.php:660 +msgid "" +"Leave blank to disable. Enter the interface IP address of the other " +"machine. Machines must be using CARP." +msgstr "" +"Boş bırakarak devre dışı hale getirebilirsiniz. Diğer sistemin IP adresini " +"giriniz. Her iki sistem de CARP kullanmalıdırlar." + +#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcp.php:716 +#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcp.php:909 +#: usr/local/www/services_dhcp.php:1150 +msgid "Static ARP" +msgstr "Statik ARP" + +#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcp.php:723 +#: usr/local/www/services_dhcp.php:902 usr/local/www/services_dhcp.php:916 +msgid "Enable Static ARP entries" +msgstr "Statik ARP girdilerini etkinleştir" + +#: usr/local/www/services_dhcp.php:715 usr/local/www/services_dhcp.php:728 +#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:921 +msgid "" +"Only the machines listed below will be able to communicate with the firewall " +"on this NIC." +msgstr "" +"Sadece aşağıda belirtilen sistemler bu NIC üzerinden güvenlik duvarı ile " +"haberleşebilirler." + +#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcpv6.php:651 +#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcpv6.php:744 +#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcpv6.php:675 +#: usr/local/www/services_dhcp_edit.php:454 +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcpv6.php:692 +msgid "Show Dynamic DNS" +msgstr "Dinamik DNS kayıtlarını göster" + +#: usr/local/www/services_dhcp.php:729 usr/local/www/services_dhcpv6.php:655 +#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:748 +#: usr/local/www/services_dhcp.php:949 usr/local/www/services_dhcpv6.php:679 +#: usr/local/www/services_dhcp_edit.php:458 +#: usr/local/www/services_dhcp.php:962 usr/local/www/services_dhcpv6.php:696 +msgid "Enable registration of DHCP client names in DNS." +msgstr "DHCP istemci adlarının DNSe kaydedilmesini aktif et." + +#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:658 +#: usr/local/www/services_dhcp.php:770 usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/services_dhcp.php:952 usr/local/www/services_dhcpv6.php:682 +#: usr/local/www/services_dhcp_edit.php:461 +#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcpv6.php:699 +msgid "Note: Leave blank to disable dynamic DNS registration." +msgstr "" +"Not: Boş bırakarak dinamik DNS kayıt işlemini devre dışı bırakabilirsiniz." + +#: usr/local/www/services_dhcp.php:733 usr/local/www/services_dhcpv6.php:659 +#: usr/local/www/services_dhcp.php:771 usr/local/www/services_dhcpv6.php:752 +#: usr/local/www/services_dhcp.php:953 usr/local/www/services_dhcpv6.php:683 +#: usr/local/www/services_dhcp_edit.php:462 +#: usr/local/www/services_dhcp.php:966 usr/local/www/services_dhcpv6.php:700 +msgid "" +"Enter the dynamic DNS domain which will be used to register client names in " +"the DNS server." +msgstr "" +"DNS sunucuda istemci isimlerini kaydetmede kullanılacak dinamik DNS adını " +"giriniz." + +#: usr/local/www/services_dhcp.php:738 usr/local/www/services_dhcpv6.php:664 +#: usr/local/www/services_dhcp.php:776 usr/local/www/services_dhcpv6.php:757 +#: usr/local/www/services_dhcp.php:972 usr/local/www/services_dhcpv6.php:688 +#: usr/local/www/services_dhcp_edit.php:467 +#: usr/local/www/services_dhcp.php:985 usr/local/www/services_dhcpv6.php:705 +msgid "NTP servers" +msgstr "NTP sunucular" + +#: usr/local/www/services_dhcp.php:741 usr/local/www/services_dhcpv6.php:667 +#: usr/local/www/services_dhcp.php:779 usr/local/www/services_dhcpv6.php:760 +#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcp_edit.php:470 +#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcpv6.php:708 +msgid "Show NTP configuration" +msgstr "NTP yapılandırmasını görüntüle" + +#: usr/local/www/services_dhcp.php:750 usr/local/www/services_dhcpv6.php:676 +#: usr/local/www/services_dhcp.php:788 usr/local/www/services_dhcpv6.php:770 +#: usr/local/www/services_dhcp.php:984 usr/local/www/services_dhcpv6.php:701 +#: usr/local/www/services_dhcp_edit.php:479 +#: usr/local/www/services_dhcp.php:997 usr/local/www/services_dhcpv6.php:718 +msgid "TFTP server" +msgstr "TFTP sunucu" + +#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcpv6.php:679 +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:773 +#: usr/local/www/services_dhcp.php:987 usr/local/www/services_dhcpv6.php:704 +#: usr/local/www/services_dhcp_edit.php:482 +#: usr/local/www/services_dhcp.php:1000 usr/local/www/services_dhcpv6.php:721 +msgid "Show TFTP configuration" +msgstr "TFP yapılandırmasını görüntüle" + +#: usr/local/www/services_dhcp.php:757 usr/local/www/services_dhcpv6.php:683 +#: usr/local/www/services_dhcp.php:795 usr/local/www/services_dhcpv6.php:777 +#: usr/local/www/services_dhcp.php:991 usr/local/www/services_dhcpv6.php:708 +#: usr/local/www/services_dhcp_edit.php:486 +#: usr/local/www/services_dhcp.php:1004 usr/local/www/services_dhcpv6.php:725 +msgid "" +"Leave blank to disable. Enter a full hostname or IP for the TFTP server." +msgstr "" +"Boş bırakarak devre dış hale getirebilirsiniz. TFP sunucunun IP ya da Host " +"adını giriniz." + +#: usr/local/www/services_dhcp.php:762 usr/local/www/services_dhcpv6.php:688 +#: usr/local/www/services_dhcp.php:800 usr/local/www/services_dhcpv6.php:783 +#: usr/local/www/services_dhcp.php:996 usr/local/www/services_dhcpv6.php:714 +#: usr/local/www/services_dhcp.php:1009 usr/local/www/services_dhcpv6.php:731 +#, fuzzy +msgid "LDAP URI" +msgstr "LDAP URI" + +#: usr/local/www/services_dhcp.php:765 usr/local/www/services_dhcpv6.php:691 +#: usr/local/www/services_dhcp.php:803 usr/local/www/services_dhcpv6.php:786 +#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcpv6.php:717 +#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcpv6.php:734 +msgid "Show LDAP configuration" +msgstr "LDAP yapılandırmasını görüntüle" + +#: usr/local/www/services_dhcp.php:769 usr/local/www/services_dhcpv6.php:695 +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:1003 usr/local/www/services_dhcpv6.php:721 +#: usr/local/www/services_dhcp.php:1016 usr/local/www/services_dhcpv6.php:738 +msgid "" +"Leave blank to disable. Enter a full URI for the LDAP server in the form " +"ldap://ldap.example.com/dc=example,dc=com" +msgstr "" +"Boş bırakarak kapatabilirsiniz. LDAP sunucu URIsini " +"ldap://ldap.ornek.com/c=example,dc=com" + +#: usr/local/www/services_dhcp.php:774 usr/local/www/services_dhcpv6.php:700 +#: usr/local/www/services_dhcp.php:812 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcpv6.php:726 +#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:743 +msgid "Enable network booting" +msgstr "Ağdan açmayı etkinleştir" + +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:703 +#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcpv6.php:798 +#: usr/local/www/services_dhcp.php:1011 usr/local/www/services_dhcpv6.php:729 +#: usr/local/www/services_dhcp.php:1024 usr/local/www/services_dhcpv6.php:746 +msgid "Show Network booting" +msgstr "Ağ üzerinden açılma bilgilerini görüntüle" + +#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcpv6.php:707 +#: usr/local/www/services_dhcp.php:819 usr/local/www/services_dhcpv6.php:802 +#: usr/local/www/services_dhcp.php:1015 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/services_dhcp.php:1028 usr/local/www/services_dhcpv6.php:750 +msgid "Enables network booting." +msgstr "Ağdan açılmayı etkinleştir." + +#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735 +#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752 +msgid "Enter the IP of the" +msgstr "IPsini girin" + +#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709 +#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804 +#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735 +#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752 +msgid "next-server" +msgstr "bir sonraki sunucu" + +#: usr/local/www/services_dhcp.php:785 usr/local/www/services_dhcpv6.php:711 +#: usr/local/www/services_dhcp.php:823 usr/local/www/services_dhcpv6.php:806 +#: usr/local/www/services_dhcp.php:1019 usr/local/www/services_dhcpv6.php:737 +#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcpv6.php:754 +msgid "and the filename" +msgstr "dosya adı" + +#: usr/local/www/services_dhcp.php:787 usr/local/www/services_dhcpv6.php:713 +#: usr/local/www/services_dhcp.php:825 usr/local/www/services_dhcpv6.php:808 +#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:739 +#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:756 +msgid "" +"Note: You need both a filename and a boot server configured for this to work!" +msgstr "Not: Çalışması için hem dosya adı hem de açılma sunucusu girmelisiniz!" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +msgid "Enter the" +msgstr "Girin" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +msgid "root-path" +msgstr "kök yolu" + +#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715 +#: usr/local/www/services_dhcpv6_edit.php:224 +#: usr/local/www/services_dhcp.php:827 +#: usr/local/www/services_dhcp_edit.php:247 +#: usr/local/www/services_dhcpv6.php:810 +#: usr/local/www/services_dhcpv6_edit.php:226 +#: usr/local/www/services_dhcp.php:1023 +#: usr/local/www/services_dhcp_edit.php:249 +#: usr/local/www/services_dhcpv6.php:741 +#: usr/local/www/services_dhcpv6_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:377 +#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758 +msgid "string" +msgstr "dize" + +#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:717 +#: usr/local/www/services_dhcp.php:829 usr/local/www/services_dhcpv6.php:812 +#: usr/local/www/services_dhcp.php:1025 usr/local/www/services_dhcpv6.php:743 +#: usr/local/www/services_dhcp.php:1038 usr/local/www/services_dhcpv6.php:760 +msgid "" +"Note: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname" +msgstr "Not: Dize formatı: iscsi:(sunucu adı):(protokol):(port):(LUN):hedef ad" + +#: usr/local/www/services_dhcp.php:796 usr/local/www/services_dhcpv6.php:722 +#: usr/local/www/services_dhcp.php:834 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1031 usr/local/www/services_dhcpv6.php:748 +#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcpv6.php:765 +msgid "Additional BOOTP/DHCP Options" +msgstr "Ek DHCP/BOOTP seçenekleri" + +#: usr/local/www/services_dhcp.php:799 usr/local/www/services_dhcpv6.php:725 +#: usr/local/www/services_dhcp.php:837 usr/local/www/services_dhcpv6.php:820 +#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:751 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:768 +msgid "Show Additional BOOTP/DHCP Options" +msgstr "Ek DHCP/BOOTP Seçeneklerini Görüntüle" + +#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733 +#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828 +#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759 +#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776 +msgid "" +"Enter the DHCP option number and the value for each item you would like to " +"include in the DHCP lease information. For a list of available options " +"please visit this" +msgstr "" +"DHCP kira bilgisine dahil etmek istediğiniz seçeneklerin DHCP seçenek " +"numaralarını ve değerlerini girin. Seçeneklerin listesi " + +#: usr/local/www/services_dhcp.php:812 +#: usr/local/www/services_captiveportal_vouchers_edit.php:94 +#: usr/local/www/services_dhcpv6.php:738 usr/local/www/services_dhcp.php:850 +#: usr/local/www/services_dhcpv6.php:833 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:764 +#: usr/local/www/services_dhcp.php:1060 +#: usr/local/www/services_captiveportal_vouchers_edit.php:92 +#: usr/local/www/services_dhcpv6.php:781 +msgid "Number" +msgstr "Sıra" + +#: usr/local/www/services_dhcp.php:814 +#: usr/local/www/load_balancer_relay_action_edit.php:506 +#: usr/local/www/system_advanced_sysctl.php:173 +#: usr/local/www/system_advanced_sysctl.php:249 +#: usr/local/www/services_dhcpv6.php:739 +#: usr/local/www/system_certmanager.php:763 +#: usr/local/www/load_balancer_relay_action_edit.php:505 +#: usr/local/www/services_dhcp.php:852 usr/local/www/services_dhcpv6.php:834 +#: usr/local/www/load_balancer_relay_action_edit.php:503 +#: usr/local/www/services_dhcp.php:1049 usr/local/www/services_dhcpv6.php:765 +#: usr/local/www/services_dhcp.php:1062 +#: usr/local/www/system_certmanager.php:788 +#: usr/local/www/load_balancer_relay_action_edit.php:503 +#: usr/local/www/services_dhcpv6.php:782 +#: usr/local/www/system_advanced_sysctl.php:173 +#: usr/local/www/system_advanced_sysctl.php:249 +msgid "Value" +msgstr "Değer" + +#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885 +#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816 +#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833 +msgid "The DNS servers entered in" +msgstr "Girilen DNS sunucular" + +#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790 +#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885 +#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816 +#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833 +msgid "System: General setup" +msgstr "Sistem: Genel ayarlar" + +#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dhcpv6.php:791 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886 +#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817 +#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834 +msgid "(or the" +msgstr "(ya da etkinleştirilmişse" + +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792 +#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887 +#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818 +#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835 +msgid "if enabled)" +msgstr ")" + +#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792 +#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887 +#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818 +#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835 +msgid "will be assigned to clients by the DHCP server." +msgstr "DHCP sunucu tarafından istemcilere atanacaktır." + +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890 +#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcpv6.php:821 +#: usr/local/www/services_dhcp.php:1137 usr/local/www/services_dhcpv6.php:838 +msgid "The DHCP lease table can be viewed on the" +msgstr "DHCP kira tablosuna" + +#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795 +#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890 +#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcp.php:1137 +msgid "Status: DHCP leases" +msgstr "Durum: DHCP kiraları" + +#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:796 +#: usr/local/www/services_dhcp.php:921 usr/local/www/services_dhcpv6.php:891 +#: usr/local/www/services_dhcp.php:1125 usr/local/www/services_dhcpv6.php:822 +#: usr/local/www/services_dhcp.php:1138 usr/local/www/services_dhcpv6.php:839 +msgid "page." +msgstr "sayfasından bakabilirsiniz." + +#: usr/local/www/services_dhcp_edit.php:116 +#: usr/local/www/services_dhcpv6_edit.php:113 +#: usr/local/www/services_dhcpv6_edit.php:115 +#: usr/local/www/services_dhcp_edit.php:118 +#: usr/local/www/services_dhcpv6_edit.php:118 +#: usr/local/www/services_dhcp_edit.php:152 +msgid "The hostname cannot end with a hyphen according to RFC952" +msgstr "RFC952'ye göre sunucu adı '-' ile bitemez." + +#: usr/local/www/services_dhcp_edit.php:121 +#: usr/local/www/services_dhcpv6_edit.php:118 +#: usr/local/www/services_dhcpv6_edit.php:120 +#: usr/local/www/services_dhcp_edit.php:123 +#: usr/local/www/services_dhcpv6_edit.php:123 +#: usr/local/www/services_dhcp_edit.php:157 +msgid "" +"A valid hostname is specified, but the domain name part should be omitted" +msgstr "Sunucu adı geçerli ama alan adı kısmı olmamalı." + +#: usr/local/www/services_dhcp_edit.php:132 +#: usr/local/www/services_dhcp_edit.php:134 +#: usr/local/www/services_dhcp_edit.php:168 +msgid "Static ARP is enabled. You must specify an IP address." +msgstr "Statik ARP etkinleştirildi. Bir IP adresi belirtmelisiniz." + +#: usr/local/www/services_dhcp_edit.php:141 +#: usr/local/www/services_dhcp_edit.php:143 +#: usr/local/www/services_dhcp_edit.php:177 +msgid "This Hostname, IP or MAC address already exists." +msgstr "Bu host Adı, IP ya da MAC sistemde zaten mevcut." + +#: usr/local/www/services_dhcp_edit.php:152 +#: usr/local/www/services_dhcp_edit.php:154 +#: usr/local/www/services_dhcp_edit.php:188 +#, php-format +msgid "The IP address must not be within the DHCP range for this interface." +msgstr "IP adresi bu arabirimin DHCP aralığında olmamalıdır." + +#: usr/local/www/services_dhcp_edit.php:159 +#: usr/local/www/services_dhcp_edit.php:161 +#: usr/local/www/services_dhcp_edit.php:202 +#, php-format +msgid "The IP address must lie in the %s subnet." +msgstr "IP adresi %s altağında bulunmalıdırlar." + +#: usr/local/www/services_dhcp_edit.php:190 +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/services_dhcp_edit.php:193 +#: usr/local/www/services_dhcpv6_edit.php:178 +#: usr/local/www/services_dhcp_edit.php:301 +msgid "Edit static mapping" +msgstr "Statik eşlemeyi düzenle" + +#: usr/local/www/services_dhcp_edit.php:204 +#: usr/local/www/services_dhcp_edit.php:207 +#: usr/local/www/services_dhcp_edit.php:206 +#: usr/local/www/services_dhcp_edit.php:334 +msgid "Static DHCP Mapping" +msgstr "Statik DHCP Eşleme" + +#: usr/local/www/services_dhcp_edit.php:215 +#: usr/local/www/services_dhcp_edit.php:218 +#: usr/local/www/services_dhcp_edit.php:217 +#: usr/local/www/services_dhcp_edit.php:345 +#: usr/local/www/services_captiveportal_mac_edit.php:188 +msgid "Copy my MAC address" +msgstr "Mac adresimi kopyala" + +#: usr/local/www/services_dhcp_edit.php:217 +#: usr/local/www/services_dhcp_edit.php:220 +#: usr/local/www/services_dhcp_edit.php:219 +#: usr/local/www/services_dhcp_edit.php:347 +msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx" +msgstr "MAC adresini: xx:xx:xx:xx:xx:xx formatında giriniz." + +#: usr/local/www/services_dhcp_edit.php:225 +#: usr/local/www/services_dhcp_edit.php:228 +msgid "" +"If no IP address is given, one will be dynamically allocated from the pool." +msgstr "Eğer IP adresi verilmezse havuzdan dinamik olarak atanacaktır." + +#: usr/local/www/services_dhcp_edit.php:231 +#: usr/local/www/services_dhcpv6_edit.php:208 +#: usr/local/www/services_dhcpv6_edit.php:211 +#: usr/local/www/services_dhcp_edit.php:234 +#: usr/local/www/services_dhcpv6_edit.php:213 +#: usr/local/www/services_dhcp_edit.php:236 +#: usr/local/www/services_dhcpv6_edit.php:216 +#: usr/local/www/services_dhcp_edit.php:364 +msgid "Name of the host, without domain part." +msgstr "Host adı (alan adı olmadan) girilmelidir." + +#: usr/local/www/services_dhcp_relay.php:72 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/services_dhcpv6_relay.php:73 +#: usr/local/www/services_dhcp_relay.php:72 +msgid "Destination Server" +msgstr "Hedef Sunucu" + +#: usr/local/www/services_dhcp_relay.php:80 +msgid "A valid Destination Server IP address must be specified." +msgstr "Geçerli bir Hedef Sunucu IP adresi belirtilmelidir." + +#: usr/local/www/services_dhcp_relay.php:100 usr/local/www/fbegin.inc:122 +#: usr/local/www/status_services.php:295 +#: usr/local/www/widgets/widgets/services_status.widget.php:100 +#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:278 +#: usr/local/www/fbegin.inc:148 usr/local/www/fbegin.inc:140 +#: usr/local/www/services_dhcp_relay.php:100 etc/inc/service-utils.inc:277 +msgid "DHCP Relay" +msgstr "DHCP Aracısı (Relay)" + +#: usr/local/www/services_dhcp_relay.php:144 +#: usr/local/www/services_dhcp_relay.php:145 +#: usr/local/www/services_dhcp_relay.php:145 +msgid "DHCP Relay configuration" +msgstr "DHCP aracısı yapılandırma" + +#: usr/local/www/services_dhcp_relay.php:150 +#: usr/local/www/services_dhcp_relay.php:151 +#: usr/local/www/services_dhcp_relay.php:151 +#, php-format +msgid "Enable DHCP relay on interface" +msgstr "Bu arabirimde DHCP aracısını aktif et" + +#: usr/local/www/services_dhcp_relay.php:175 +#: usr/local/www/services_dhcpv6_relay.php:176 +#: usr/local/www/services_dhcp_relay.php:176 +#: usr/local/www/services_dhcpv6_relay.php:177 +#: usr/local/www/services_dhcpv6_relay.php:177 +#: usr/local/www/services_dhcp_relay.php:176 +msgid "Append circuit ID and agent ID to requests" +msgstr "İsteklere devre ve uygulama kimliklerini ekle" + +#: usr/local/www/services_dhcp_relay.php:176 +#: usr/local/www/services_dhcp_relay.php:177 +#: usr/local/www/services_dhcp_relay.php:177 +#, php-format +msgid "" +"If this is checked, the DHCP relay will append the circuit ID (%s interface " +"number) and the agent ID to the DHCP request." +msgstr "" +"İşaretliyse DHCP aracısı devre kimliğini (%s arabirim numarası) ve uygulama " +"kimliğini DHCP isteğine ekler." + +#: usr/local/www/services_dhcp_relay.php:179 +#: usr/local/www/services_dhcpv6_relay.php:180 +#: usr/local/www/services_dhcp_relay.php:180 +#: usr/local/www/services_dhcpv6_relay.php:181 +#: usr/local/www/services_dhcpv6_relay.php:181 +#: usr/local/www/services_dhcp_relay.php:180 +msgid "Destination server" +msgstr "Hedef sunucu" + +#: usr/local/www/services_dhcp_relay.php:183 +#: usr/local/www/services_dhcp_relay.php:184 +#: usr/local/www/services_dhcp_relay.php:184 +msgid "" +"This is the IP address of the server to which DHCP requests are relayed. You " +"can enter multiple server IP addresses, separated by commas. Select \"Proxy " +"requests to DHCP server on WAN subnet\" to relay DHCP packets to the server " +"that was used on the WAN interface." +msgstr "" +"DHCP isteklerinin aktarılacağı sunucunun IP adresidir. Virgülle ayırarak " +"birden fazla IP adresi girebilirsiniz. DHCP paketlerini WAN arabiriminde " +"kullanılan sunucuya aktarmak için \"DHCP sunucuya gelen istekleri WAN " +"altağına yönlendir\"i seçin." + +#: usr/local/www/services_dnsmasq.php:80 usr/local/www/services_dnsmasq.php:84 +msgid "Invalid custom options" +msgstr "Özel ayarlar geçersiz" + +#: usr/local/www/services_dnsmasq.php:147 +#: usr/local/www/services_dnsmasq.php:148 +#: usr/local/www/services_dnsmasq.php:152 +msgid "The DNS forwarder configuration has been changed" +msgstr "DNS yönlendirici yapılandırılması değiştirildi" + +#: usr/local/www/services_dnsmasq.php:151 +#: usr/local/www/services_dnsmasq.php:152 +#: usr/local/www/services_dnsmasq.php:156 +msgid "General DNS Forwarder Options" +msgstr "Genel DNS Yönlendirici Seçenekleri" + +#: usr/local/www/services_dnsmasq.php:157 +#: usr/local/www/services_dnsmasq.php:158 +#: usr/local/www/services_dnsmasq.php:162 +msgid "Enable DNS forwarder" +msgstr "DNS yönlendiriciyi etkinleştir" + +#: usr/local/www/services_dnsmasq.php:161 +#: usr/local/www/services_unbound.php:211 +#: usr/local/www/services_dnsmasq.php:162 +#: usr/local/www/services_dnsmasq.php:166 +msgid "DHCP Registration" +msgstr "DHCP Kayıt" + +#: usr/local/www/services_dnsmasq.php:164 +#: usr/local/www/services_dnsmasq.php:165 +#: usr/local/www/services_dnsmasq.php:169 +msgid "Register DHCP leases in DNS forwarder" +msgstr "DHCP kiralarını DNS yönlendiriciye kaydet" + +#: usr/local/www/services_dnsmasq.php:165 +#: usr/local/www/services_dnsmasq.php:166 +#: usr/local/www/services_dnsmasq.php:170 +#, php-format +msgid "" +"If this option is set, then machines that specify their hostname when " +"requesting a DHCP lease will be registered in the DNS forwarder, so that " +"their name can be resolved. You should also set the domain in %sSystem: " +"General setup%s to the proper value." +msgstr "" +"Bu seçenek açıldığında, DHCP kirası isterken kendi isimlerini belirten " +"makinalar DNS yönlendiriciye kaydedilir, böylece isimleri çözülebilir. " +"Ayrıca %sSistem: Genel ayarlar%s sayfasından alan adını da ayarlamalısınız." + +#: usr/local/www/services_dnsmasq.php:173 +#: usr/local/www/services_unbound.php:223 +#: usr/local/www/services_dnsmasq.php:174 +#: usr/local/www/services_dnsmasq.php:178 +msgid "Static DHCP" +msgstr "Statik DHCP" + +#: usr/local/www/services_dnsmasq.php:176 +#: usr/local/www/services_dnsmasq.php:177 +#: usr/local/www/services_dnsmasq.php:181 +msgid "Register DHCP static mappings in DNS forwarder" +msgstr "DHCP statik eşleşmeleri DNS yönlendiriciye kaydet" + +#: usr/local/www/services_dnsmasq.php:177 +#: usr/local/www/services_dnsmasq.php:178 +#: usr/local/www/services_dnsmasq.php:182 +#, php-format +msgid "" +"If this option is set, then DHCP static mappings will be registered in the " +"DNS forwarder, so that their name can be resolved. You should also set the " +"domain in %sSystem: General setup%s to the proper value." +msgstr "" +"Bu seçenek açıldığında DHCP statik eşlemeleri DNS yönlendiriciye kaydedilir, " +"böylece isimleri çözülebilir. Ayrıca %sSistem: Genel ayarlar%s sayfasından " +"alan adını da ayarlamalısınız." + +#: usr/local/www/services_dnsmasq.php:184 +#: usr/local/www/services_unbound.php:234 +#: usr/local/www/services_dnsmasq.php:185 +#: usr/local/www/services_dnsmasq.php:189 +msgid "Prefer DHCP" +msgstr "DHCP Öner" + +#: usr/local/www/services_dnsmasq.php:187 +#: usr/local/www/services_unbound.php:237 +#: usr/local/www/services_dnsmasq.php:188 +#: usr/local/www/services_dnsmasq.php:192 +msgid "Resolve DHCP mappings first" +msgstr "Önce DHCP eşleşmelerini çöz" + +#: usr/local/www/services_dnsmasq.php:188 +#: usr/local/www/services_unbound.php:238 +#: usr/local/www/services_dnsmasq.php:189 +#: usr/local/www/services_dnsmasq.php:193 +#, php-format +msgid "" +"If this option is set, then DHCP mappings will be resolved before the manual " +"list of names below. This only affects the name given for a reverse lookup " +"(PTR)." +msgstr "" +"Bu seçenek açıldığında, aşağıda girdiğiniz listeden önce DHCP eşleşmeleri " +"çözümlenir. Bu sadece tersine çözümleme (PTR) için verilen ismi etkiler." + +#: usr/local/www/services_dnsmasq.php:202 +#: usr/local/www/services_dnsmasq.php:203 +#: usr/local/www/services_dnsmasq.php:228 +msgid "" +"Enter any additional options you would like to add to the dnsmasq " +"configuration here, separated by a space or newline" +msgstr "" +"dnsmasq yapılandırmasına eklemek istediğiniz diğer seçenekleri aralarına " +"noktalı virgül koyarak veya her birini ayrı satıra yazarak buradan " +"girebilirsiniz" + +#: usr/local/www/services_dnsmasq.php:215 +#: usr/local/www/services_dnsmasq.php:216 +#: usr/local/www/services_dnsmasq.php:241 +#, php-format +msgid "" +"If the DNS forwarder is enabled, the DHCP service (if enabled) will " +"automatically serve the LAN IP address as a DNS server to DHCP clients so " +"they will use the forwarder. The DNS forwarder will use the DNS servers " +"entered in %sSystem: General setup%s or those obtained via DHCP or PPP on " +"WAN if the "Allow DNS server list to be overridden by DHCP/PPP on " +"WAN" is checked. If you don't use that option (or if you use a static " +"IP address on WAN), you must manually specify at least one DNS server on the " +"%sSystem:General setup%s page." +msgstr "" +"DHCP yönlendirici etkinleştirildiğinde DHCP servisi (açıksa) LAN IP adresini " +"DHCP istemcilere LAN DNS sunucu olarak bildirir, böylece istemciler " +"yönlendiriciyi kullanır. DNS yönlendirici de %sSystem: Genel ayarlar%s " +"sayfasında girilen veya DHCP ya da ("WAN üzerinden DHCP/PPPnin DNS " +"sunucu listesinin üzerine yazmasına izin ver" açıksa) WAN üzerinden PPP " +"ile alınan DNS sunucuları kullanır. O seçeneği kullanmıyorsanız (veya WAN " +"tarafında statik IP kullanıyorsanız), %sSistem: Genel ayarlar%s sayfasında " +"en az bir DNS sunucu belirtmelisiniz." + +#: usr/local/www/services_dnsmasq.php:231 +#: usr/local/www/services_unbound.php:267 +#: usr/local/www/services_dnsmasq.php:232 +#: usr/local/www/services_dnsmasq.php:257 +msgid "Host Overrides" +msgstr "Host Üzerine yaz" + +#: usr/local/www/services_dnsmasq.php:235 +#: usr/local/www/services_unbound.php:271 +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_dnsmasq.php:261 +msgid "" +"Entries in this section override individual results from the forwarders." +msgstr "" +"Bu bölümdeki girdiler yönlendiricilerdeki özel sonuçların üzerine yazar." + +#: usr/local/www/services_dnsmasq.php:236 +#: usr/local/www/services_unbound.php:272 +#: usr/local/www/services_dnsmasq.php:237 +#: usr/local/www/services_dnsmasq.php:262 +msgid "Use these for changing DNS results or for adding custom DNS records." +msgstr "" +"Bunu DNS sonuçlarını değiştirmede yada özel DNS kayıtlarını eklemede " +"kullanın." + +#: usr/local/www/services_dnsmasq.php:299 +#: usr/local/www/services_dnsmasq.php:320 +#: usr/local/www/services_unbound.php:335 +#: usr/local/www/services_dnsmasq.php:321 +#: usr/local/www/services_dnsmasq.php:346 +msgid "Domain Overrides" +msgstr "Alan adı Üzerine yaz" + +#: usr/local/www/services_dnsmasq.php:303 +#: usr/local/www/services_dnsmasq.php:324 +#: usr/local/www/services_unbound.php:339 +#: usr/local/www/services_dnsmasq.php:325 +#: usr/local/www/services_dnsmasq.php:350 +msgid "" +"Entries in this area override an entire domain by specifying an " +"authoritative DNS server to be queried for that domain." +msgstr "" +"Bu alandaki girdiler alan adı için sorgulanacak yetkili DNS sunucusu " +"belirterek tüm alan adının üzerine yazar." + +#: usr/local/www/services_dnsmasq.php:337 +#: usr/local/www/services_dnsmasq.php:358 +#: usr/local/www/services_unbound.php:373 +#: usr/local/www/services_dnsmasq.php:359 +#: usr/local/www/services_dnsmasq.php:384 +msgid "Do you really want to delete this domain override?" +msgstr "Bu alan adı üzerine yazmayı silmek istediğinize emin misiniz?" + +#: usr/local/www/services_dnsmasq_edit.php:100 +#: usr/local/www/services_dnsmasq_edit.php:138 +#: usr/local/www/services_dnsmasq_edit.php:138 +msgid "This host/domain already exists." +msgstr "Bu sunucu/alan adı zaten kayıtlı." + +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/services_dnsmasq_edit.php:166 +#: usr/local/www/services_dnsmasq_edit.php:166 +msgid "Edit host" +msgstr "Host düzenle" + +#: usr/local/www/services_dnsmasq_edit.php:138 +#: usr/local/www/services_dnsmasq_edit.php:193 +#: usr/local/www/services_dnsmasq_edit.php:194 +#: usr/local/www/services_dnsmasq_edit.php:194 +msgid "Edit DNS Forwarder entry" +msgstr "DNS Yönlendirici kaydını düzenle" + +#: usr/local/www/services_dnsmasq_edit.php:144 +#: usr/local/www/services_dnsmasq_edit.php:199 +#: usr/local/www/services_dnsmasq_edit.php:200 +#: usr/local/www/services_dnsmasq_edit.php:200 +msgid "Name of the host, without domain part" +msgstr "Host adı, domain kısmı belirtilmeden" + +#: usr/local/www/services_dnsmasq_edit.php:146 +#: usr/local/www/services_dnsmasq_edit.php:201 +#: usr/local/www/services_dnsmasq_edit.php:202 +#: usr/local/www/services_dnsmasq_edit.php:202 +msgid "myhost" +msgstr "hostum" + +#: usr/local/www/services_dnsmasq_edit.php:152 +#: usr/local/www/services_dnsmasq_edit.php:207 +#: usr/local/www/services_dnsmasq_edit.php:208 +#: usr/local/www/services_dnsmasq_edit.php:208 +msgid "Domain of the host" +msgstr "Host'un alan adı" + +#: usr/local/www/services_dnsmasq_edit.php:153 +#: usr/local/www/services_dnsmasq_edit.php:208 +#: usr/local/www/services_dnsmasq_edit.php:209 +#: usr/local/www/services_dnsmasq_edit.php:209 +msgid "example.com" +msgstr "ornek.com" + +#: usr/local/www/services_dnsmasq_edit.php:159 +#: usr/local/www/services_dnsmasq_edit.php:214 +#: usr/local/www/services_dnsmasq_edit.php:215 +#: usr/local/www/services_dnsmasq_edit.php:215 +msgid "IP address of the host" +msgstr "Host IP adresi" + +#: usr/local/www/diag_pkglogs.php:81 usr/local/www/diag_pkglogs.php:81 +msgid "Package logs" +msgstr "Paket günlükleri" + +#: usr/local/www/diag_pkglogs.php:92 usr/local/www/diag_pkglogs.php:92 +msgid "No packages with logging facilities are currently installed." +msgstr "Şu anda günlükleme özellikli bir paket yok." + +#: usr/local/www/diag_pkglogs.php:103 usr/local/www/diag_pkglogs.php:105 +#: usr/local/www/diag_pkglogs.php:103 usr/local/www/diag_pkglogs.php:105 +#, fuzzy, php-format +msgid "%s" +msgstr "%s" + +#: usr/local/www/diag_pkglogs.php:118 usr/local/www/diag_pkglogs.php:118 +#, php-format +msgid "Last %1$s %2$s log entries" +msgstr "Son %1$s %2$s günlük girdisi" + +#: usr/local/www/status.php:110 usr/local/www/status.php:111 +msgid "This status page includes the following information" +msgstr "Durum sayfası aşağıdaki bilgileri içerir" + +#: usr/local/www/status.php:225 usr/local/www/status.php:226 +msgid "" +"Note: make sure to remove any sensitive information (passwords, maybe also " +"IP addresses) before posting information from this page in public places " +"(like mailing lists)" +msgstr "" +"Not: Halka açık yerlerde (örneğin e-posta listelerinde) bu bilgileri " +"yayınlamadan önce gizlilik dereceli bilgileri (parolalar, belki IP " +"adresleri) silmeyi unutmayın." + +#: usr/local/www/status.php:228 usr/local/www/status.php:229 +msgid "Passwords in config.xml have been automatically removed" +msgstr "Config.xml'deki parolalar otomatik olarak silinecektir." + +#: usr/local/www/bandwidth_by_ip.php:54 usr/local/www/bandwidth_by_ip.php:67 +#: usr/local/www/bandwidth_by_ip.php:61 +msgid "no info" +msgstr "bilgi yok" + +#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_pptp.php:353 +#: usr/local/www/vpn_l2tp.php:73 usr/local/www/vpn_l2tp.php:321 +#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_pppoe_edit.php:424 +#: usr/local/www/vpn_pppoe_edit.php:425 usr/local/www/vpn_pptp.php:355 +#: usr/local/www/vpn_l2tp.php:74 usr/local/www/vpn_l2tp.php:74 +#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_pppoe_edit.php:428 +#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_pptp.php:358 +msgid "Server address" +msgstr "Sunucu adresi" + +#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_l2tp.php:73 +#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_l2tp.php:74 +#: usr/local/www/vpn_l2tp.php:74 usr/local/www/vpn_pppoe_edit.php:112 +#: usr/local/www/vpn_pptp.php:82 +msgid "Remote start address" +msgstr "Uzak başlangıç adresi" + +#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_l2tp.php:78 +#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_l2tp.php:79 +#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pppoe_edit.php:117 +#: usr/local/www/vpn_pptp.php:87 +msgid "RADIUS server address" +msgstr "RADIUS sunucu adresi" + +#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_pptp.php:432 +#: usr/local/www/vpn_l2tp.php:78 usr/local/www/vpn_l2tp.php:428 +#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_pptp.php:434 +#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_l2tp.php:79 +#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_pptp.php:87 +#: usr/local/www/vpn_pptp.php:437 +msgid "RADIUS shared secret" +msgstr "RADIUS paylaşımlı anahtar" + +#: usr/local/www/vpn_pptp.php:93 usr/local/www/vpn_l2tp.php:84 +#: usr/local/www/vpn_pppoe_edit.php:123 usr/local/www/vpn_l2tp.php:85 +#: usr/local/www/vpn_l2tp.php:85 usr/local/www/vpn_pppoe_edit.php:123 +#: usr/local/www/vpn_pptp.php:93 +msgid "A valid server address must be specified." +msgstr "Geçerli bir sunucu adresi belirtilmelidir." + +#: usr/local/www/vpn_pptp.php:96 usr/local/www/vpn_l2tp.php:87 +#: usr/local/www/vpn_pppoe_edit.php:125 usr/local/www/vpn_l2tp.php:88 +#: usr/local/www/vpn_l2tp.php:91 usr/local/www/vpn_pppoe_edit.php:125 +#: usr/local/www/vpn_pptp.php:99 +msgid "A valid remote start address must be specified." +msgstr "Geçerli bir uzak başlangıç adresi belirtilmelidir." + +#: usr/local/www/vpn_pptp.php:99 usr/local/www/vpn_l2tp.php:90 +#: usr/local/www/vpn_pppoe_edit.php:127 usr/local/www/vpn_l2tp.php:91 +#: usr/local/www/vpn_l2tp.php:94 usr/local/www/vpn_pppoe_edit.php:127 +#: usr/local/www/vpn_pptp.php:102 +msgid "A valid RADIUS server address must be specified." +msgstr "Geçerli bir RADIUS sunucu adresi belirtilmelidir." + +#: usr/local/www/vpn_pptp.php:108 usr/local/www/vpn_l2tp.php:106 +#: usr/local/www/vpn_pppoe_edit.php:134 usr/local/www/vpn_l2tp.php:107 +#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_pppoe_edit.php:134 +#: usr/local/www/vpn_pptp.php:111 +msgid "The specified server address lies in the remote subnet." +msgstr "Belirtilen sunucu adresi uzak ağ aralığı içinde kalıyor." + +#: usr/local/www/vpn_pptp.php:112 usr/local/www/vpn_l2tp.php:109 +#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_l2tp.php:113 +#: usr/local/www/vpn_pptp.php:115 +msgid "The specified server address is equal to the LAN interface address." +msgstr "Belirtilen sunucu adresi LAN arabirim adresi ile aynı." + +#: usr/local/www/vpn_pptp.php:117 usr/local/www/vpn_pptp.php:120 +msgid "PPTP redirection target address" +msgstr "PPTP yönlendirme hedef adresi" + +#: usr/local/www/vpn_pptp.php:122 usr/local/www/vpn_pptp.php:125 +msgid "A valid target address must be specified." +msgstr "Geçerli bir hedef adres belirtilmelidir." + +#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/vpn_pptp.php:196 +#: usr/local/www/vpn_pptp_users_edit.php:135 +#, fuzzy +msgid "VPN PPTP" +msgstr "VPN PPTP" + +#: usr/local/www/vpn_pptp.php:300 usr/local/www/vpn_pptp_users.php:89 +#: usr/local/www/vpn_l2tp.php:280 usr/local/www/vpn_l2tp_users.php:92 +#: usr/local/www/vpn_pptp.php:302 usr/local/www/vpn_l2tp_users.php:93 +#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_pptp_users.php:90 +#: usr/local/www/vpn_l2tp.php:284 usr/local/www/vpn_pptp_users.php:90 +#: usr/local/www/vpn_l2tp_users.php:93 usr/local/www/vpn_pptp.php:305 +msgid "Configuration" +msgstr "Yapılandırma" + +#: usr/local/www/vpn_pptp.php:301 usr/local/www/vpn_pptp_users.php:71 +#: usr/local/www/vpn_pptp_users.php:90 +#: usr/local/www/system_authservers.php:421 +#: usr/local/www/system_groupmanager.php:240 +#: usr/local/www/system_groupmanager_addprivs.php:168 +#: usr/local/www/system_usermanager.php:440 +#: usr/local/www/system_usermanager_addprivs.php:167 +#: usr/local/www/system_usermanager_settings.php:113 +#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_l2tp_users.php:38 +#: usr/local/www/vpn_l2tp_users.php:93 +#: usr/local/www/system_usermanager.php:438 +#: usr/local/www/system_groupmanager_addprivs.php:166 +#: usr/local/www/vpn_pptp.php:303 usr/local/www/vpn_l2tp_users.php:94 +#: usr/local/www/vpn_l2tp.php:282 usr/local/www/vpn_pptp_users.php:91 +#: usr/local/www/system_authservers.php:426 usr/local/www/vpn_l2tp.php:285 +#: usr/local/www/system_groupmanager.php:240 +#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/vpn_pptp_users.php:91 +#: usr/local/www/system_usermanager_addprivs.php:167 +#: usr/local/www/vpn_l2tp_users.php:38 usr/local/www/vpn_l2tp_users.php:94 +#: usr/local/www/system_authservers.php:433 +#: usr/local/www/system_groupmanager_addprivs.php:166 +#: usr/local/www/vpn_pptp.php:306 +#: usr/local/www/system_usermanager_settings.php:113 +#: usr/local/www/system_usermanager.php:438 +msgid "Users" +msgstr "Kullanıcılar" + +#: usr/local/www/vpn_pptp.php:320 usr/local/www/vpn_pptp.php:322 +#: usr/local/www/vpn_pptp.php:325 +msgid "Redirect incoming PPTP connections to" +msgstr "Gelen PPTP bağlantılarını yönlendir" + +#: usr/local/www/vpn_pptp.php:322 usr/local/www/vpn_pptp.php:324 +#: usr/local/www/vpn_pptp.php:327 +msgid "PPTP redirection" +msgstr "PPTP yönlendirme" + +#: usr/local/www/vpn_pptp.php:326 usr/local/www/vpn_pptp.php:328 +#: usr/local/www/vpn_pptp.php:331 +msgid "" +"Enter the IP address of a host which will accept incoming PPTP connections" +msgstr "Gelen PPTP bağlantılarını kabul edecek bir host IP adresi giriniz" + +#: usr/local/www/vpn_pptp.php:332 usr/local/www/vpn_pptp.php:334 +#: usr/local/www/vpn_pptp.php:337 +msgid "Enable PPTP server" +msgstr "PPTP sunucuyu etkinleştir" + +#: usr/local/www/vpn_pptp.php:335 usr/local/www/vpn_pptp.php:337 +#: usr/local/www/vpn_pptp.php:340 +msgid "No. PPTP users" +msgstr "PPTP kullanıcı sayısı" + +#: usr/local/www/vpn_pptp.php:349 usr/local/www/vpn_pptp.php:351 +#: usr/local/www/vpn_pptp.php:354 +msgid "Hint: 10 is ten PPTP clients" +msgstr "İpucu: 10, on adet PPTP istemcisi demektir" + +#: usr/local/www/vpn_pptp.php:357 usr/local/www/vpn_pptp.php:359 +#: usr/local/www/vpn_pptp.php:362 +msgid "" +"Enter the IP address the PPTP server should give to clients for use as their " +"\"gateway\"" +msgstr "" +"PPTP sunucunun istemcilere \"ağ geçidi\" olarak vereceği IP adresini giriniz" + +#: usr/local/www/vpn_pptp.php:359 usr/local/www/vpn_l2tp.php:327 +#: usr/local/www/vpn_pppoe_edit.php:430 usr/local/www/vpn_pppoe_edit.php:431 +#: usr/local/www/vpn_pptp.php:361 usr/local/www/vpn_l2tp.php:328 +#: usr/local/www/vpn_l2tp.php:331 usr/local/www/vpn_pppoe_edit.php:434 +#: usr/local/www/vpn_pptp.php:364 +msgid "Typically this is set to an unused IP just outside of the client range" +msgstr "Genelde istemci aralığının hemen dışında, kullanılmayan bir IP verilir" + +#: usr/local/www/vpn_pptp.php:362 usr/local/www/vpn_l2tp.php:330 +#: usr/local/www/vpn_pppoe_edit.php:433 usr/local/www/vpn_pppoe_edit.php:434 +#: usr/local/www/vpn_pptp.php:364 usr/local/www/vpn_l2tp.php:331 +#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_pppoe_edit.php:437 +#: usr/local/www/vpn_pptp.php:367 +msgid "" +"NOTE: This should NOT be set to any IP address currently in use on this " +"firewall" +msgstr "" +"NOT: Bu ayar bu güvenlik duvarında kullanımda olan bir IP adresi olmamalıdır" + +#: usr/local/www/vpn_pptp.php:365 usr/local/www/vpn_l2tp.php:333 +#: usr/local/www/vpn_pppoe_edit.php:436 usr/local/www/vpn_pppoe_edit.php:437 +#: usr/local/www/vpn_pptp.php:367 usr/local/www/vpn_pppoe_edit.php:440 +#: usr/local/www/vpn_pptp.php:370 +msgid "Remote address range" +msgstr "Uzak adres aralığı" + +#: usr/local/www/vpn_pptp.php:370 usr/local/www/vpn_pptp.php:372 +#: usr/local/www/vpn_pptp.php:375 +msgid "Specify the starting address for the client IP subnet" +msgstr "İstemci IP altağı için başlangıç adresi belirtiniz" + +#: usr/local/www/vpn_pptp.php:373 usr/local/www/vpn_pptp.php:375 +#: usr/local/www/vpn_pptp.php:378 +msgid "PPTP DNS Servers" +msgstr "PPTP DNS Sunucuları" + +#: usr/local/www/vpn_pptp.php:379 usr/local/www/vpn_pptp.php:381 +#: usr/local/www/vpn_pptp.php:384 +msgid "primary and secondary DNS servers assigned to PPTP clients" +msgstr "PPTP istemcilere atanacak birincil ve ikincil DNS sunucu" + +#: usr/local/www/vpn_pptp.php:382 usr/local/www/vpn_l2tp.php:404 +#: usr/local/www/vpn_pptp.php:384 usr/local/www/vpn_l2tp.php:405 +#: usr/local/www/vpn_l2tp.php:408 usr/local/www/vpn_pptp.php:387 +msgid "WINS Server" +msgstr "WINS Sunucu" + +#: usr/local/www/vpn_pptp.php:388 usr/local/www/vpn_l2tp.php:410 +#: usr/local/www/vpn_pppoe_edit.php:461 usr/local/www/vpn_pppoe_edit.php:462 +#: usr/local/www/vpn_pptp.php:390 usr/local/www/vpn_l2tp.php:411 +#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pptp.php:393 +#, fuzzy +msgid "RADIUS" +msgstr "RADIUS" + +#: usr/local/www/vpn_pptp.php:391 usr/local/www/vpn_l2tp.php:413 +#: usr/local/www/vpn_pppoe_edit.php:464 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pptp.php:393 usr/local/www/vpn_l2tp.php:414 +#: usr/local/www/vpn_l2tp.php:417 usr/local/www/vpn_pppoe_edit.php:468 +#: usr/local/www/vpn_pptp.php:396 +msgid "Use a RADIUS server for authentication" +msgstr "Kimlik doğrulama için RADIUS sunucu kullan" + +#: usr/local/www/vpn_pptp.php:392 usr/local/www/vpn_pppoe_edit.php:465 +#: usr/local/www/vpn_pppoe_edit.php:466 usr/local/www/vpn_pptp.php:394 +#: usr/local/www/vpn_pppoe_edit.php:469 usr/local/www/vpn_pptp.php:397 +msgid "" +"When set, all users will be authenticated using the RADIUS server specified " +"below. The local user database will not be used" +msgstr "" +"İşaretlendiğinde, tüm kullanıcılar aşağıda belirtilen RADIUS sunucu " +"kullanılarak kimlik doğrulamaya tabi tutulur. Yerel kullanıcı veritabanı " +"kullanılmaz" + +#: usr/local/www/vpn_pptp.php:397 usr/local/www/vpn_l2tp.php:417 +#: usr/local/www/vpn_pppoe_edit.php:470 usr/local/www/vpn_pppoe_edit.php:471 +#: usr/local/www/vpn_pptp.php:399 usr/local/www/vpn_l2tp.php:418 +#: usr/local/www/vpn_l2tp.php:421 usr/local/www/vpn_pppoe_edit.php:474 +#: usr/local/www/vpn_pptp.php:402 +msgid "Enable RADIUS accounting" +msgstr "RADIUS hesaplandırmayı etkinleştir" + +#: usr/local/www/vpn_pptp.php:398 usr/local/www/vpn_pppoe_edit.php:472 +#: usr/local/www/vpn_pppoe_edit.php:473 usr/local/www/vpn_pptp.php:400 +#: usr/local/www/vpn_pppoe_edit.php:476 usr/local/www/vpn_pptp.php:403 +msgid "Sends accounting packets to the RADIUS server" +msgstr "Hesaplandırma paketlerini RADIUS sunucuya gönderir" + +#: usr/local/www/vpn_pptp.php:401 usr/local/www/vpn_pptp.php:403 +#: usr/local/www/vpn_pptp.php:406 +msgid "Secondary RADIUS server for failover authentication" +msgstr "Yük aktarma kimlik doğrulama için ikincil RADIUS sunucu" + +#: usr/local/www/vpn_pptp.php:402 usr/local/www/vpn_pptp.php:404 +#: usr/local/www/vpn_pptp.php:407 +msgid "" +"When set, all requests will go to the secondary server when primary fails" +msgstr "" +"Ayarlandığında, birincil sunucu yanıt veremediğinde tüm istekler ikincil " +"sunucuya gidecektir" + +#: usr/local/www/vpn_pptp.php:405 usr/local/www/vpn_pppoe_edit.php:492 +#: usr/local/www/vpn_pppoe_edit.php:493 usr/local/www/vpn_pptp.php:407 +#: usr/local/www/vpn_pppoe_edit.php:496 usr/local/www/vpn_pptp.php:410 +msgid "RADIUS issued IPs" +msgstr "RADIUS tarafından atanan IP'ler" + +#: usr/local/www/vpn_pptp.php:406 usr/local/www/vpn_pptp.php:408 +#: usr/local/www/vpn_pptp.php:411 +msgid "Issue IP addresses via RADIUS server" +msgstr "IP adreslerini RADIUS sunucu üzerinden ata" + +#: usr/local/www/vpn_pptp.php:411 usr/local/www/vpn_pptp.php:413 +#: usr/local/www/vpn_pptp.php:416 +#, fuzzy +msgid "RADIUS NAS IP" +msgstr "RADIUS NAS IP" + +#: usr/local/www/vpn_pptp.php:417 usr/local/www/vpn_pppoe_edit.php:485 +#: usr/local/www/vpn_pppoe_edit.php:486 usr/local/www/vpn_pptp.php:419 +#: usr/local/www/vpn_pppoe_edit.php:489 usr/local/www/vpn_pptp.php:422 +msgid "RADIUS Accounting Update" +msgstr "RADIUS Hesaplandırma Güncelleme" + +#: usr/local/www/vpn_pptp.php:423 usr/local/www/vpn_pptp.php:425 +#: usr/local/www/vpn_l2tp.php:422 usr/local/www/vpn_l2tp.php:425 +#: usr/local/www/vpn_pptp.php:428 +msgid "RADIUS Server" +msgstr "RADIUS Sunucu" + +#: usr/local/www/vpn_pptp.php:429 usr/local/www/vpn_pptp.php:446 +#: usr/local/www/vpn_pptp.php:431 usr/local/www/vpn_pptp.php:448 +#: usr/local/www/vpn_pptp.php:434 usr/local/www/vpn_pptp.php:451 +msgid "" +"Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS " +"server" +msgstr "" +"RADIUS sunucunun IP adresini, RADIUS portunu ve RADIUS hesaplandırma portu " +"belirtiniz" + +#: usr/local/www/vpn_pptp.php:436 usr/local/www/vpn_pppoe_edit.php:510 +#: usr/local/www/vpn_pppoe_edit.php:527 usr/local/www/vpn_pppoe_edit.php:511 +#: usr/local/www/vpn_pppoe_edit.php:528 usr/local/www/vpn_pptp.php:438 +#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:531 +#: usr/local/www/vpn_pptp.php:441 +msgid "" +"Enter the shared secret that will be used to authenticate to the RADIUS " +"server" +msgstr "" +"RADIUS sunucuya kimlik doğrularken kullanılacak paylaşımlı anahtarı " +"belirtiniz." + +#: usr/local/www/vpn_pptp.php:449 usr/local/www/vpn_pptp.php:451 +#: usr/local/www/vpn_pptp.php:454 +msgid "Secondary RADIUS shared secret" +msgstr "İkincil RADIUS paylaşımlı anahtar" + +#: usr/local/www/vpn_pptp.php:453 usr/local/www/vpn_pptp.php:455 +#: usr/local/www/vpn_pptp.php:458 +msgid "" +"Enter the shared secret that will be used to authenticate to the secondary " +"RADIUS server" +msgstr "" +"İkincil RADIUS sunucuda kimlik doğrulama için kullanılacak paylaşımlı " +"anahtarı giriniz" + +#: usr/local/www/vpn_pptp.php:463 usr/local/www/vpn_pptp.php:465 +#: usr/local/www/vpn_pptp.php:468 +msgid "Require 128-bit encryption" +msgstr "128 bit şifreleme gerektir" + +#: usr/local/www/vpn_pptp.php:464 usr/local/www/vpn_pptp.php:466 +#: usr/local/www/vpn_pptp.php:469 +msgid "" +"When set, only 128-bit encryption will be accepted. Otherwise 40-bit and 56-" +"bit encryption will be accepted as well. Note that encryption will always be " +"forced on PPTP connections (i.e. unencrypted connections will not be " +"accepted)" +msgstr "" +"Bu seçenek açıldığında sadece 128-bit şifreleme kabul edilir. Aksi taktirde " +"40 ve 58-bit şifreleme de kabul edilir. PPTP bağlantılarda şifrelemenin her " +"durumda zorunlu tutulduğunu unutmayınız (şifresiz bağlantı istekleri " +"reddedilir)." + +# bu çevirilerde kelime ters olarak işlendiği için (ingilizce altyapısı) çeviri cümlesine dikkate almayınız +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 +msgid "don't forget to " +msgstr "PPTP istemcilerinin erişimine izin vermek için " + +# bu çevirilerde kelime ters olarak işlendiği için (ingilizce altyapısı) çeviri cümlesine dikkate almayınız +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 +msgid "add a firewall rule" +msgstr "güvenlik duvarı kuralı ekle" + +# bu çevirilerde kelime ters olarak işlendiği için (ingilizce altyapısı) çeviri cümlesine dikkate almayınız +#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480 +#: usr/local/www/vpn_pptp.php:483 +msgid "to permit traffic from PPTP clients" +msgstr "meyi unutmayınız." + +#: usr/local/www/vpn_pptp_users.php:81 usr/local/www/vpn_l2tp_users.php:84 +#: usr/local/www/vpn_l2tp_users.php:85 usr/local/www/vpn_pptp_users.php:82 +#: usr/local/www/vpn_pptp_users.php:82 usr/local/www/vpn_l2tp_users.php:85 +msgid "Warning: RADIUS is enabled. The local user database will not be used." +msgstr "" +"Uyarı: RADIUS etkinleştirildi. Yerel kullanıcı veritabanı " +"kullanılmayacaktır." + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84 +#: usr/local/www/vpn_pptp_users.php:84 +msgid "The PPTP user list has been modified" +msgstr "PPTP kullanıcı listesi değiştirildi" + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_l2tp_users.php:86 +#: usr/local/www/vpn_l2tp_users.php:87 usr/local/www/vpn_pptp_users.php:84 +#: usr/local/www/vpn_pptp_users.php:84 usr/local/www/vpn_l2tp_users.php:87 +msgid "You must apply the changes in order for them to take effect" +msgstr "Değişiklikleri uygulayarak etkin olmasını sağlayabilirsiniz" + +#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84 +#: usr/local/www/vpn_pptp_users.php:84 +msgid "Warning: this will terminate all current PPTP sessions" +msgstr "Uyarı: PPTP oturumları sonlandırılacaktır" + +#: usr/local/www/vpn_pptp_users.php:104 usr/local/www/vpn_pptp_users.php:127 +#: usr/local/www/system_usermanager.php:842 +#: usr/local/www/vpn_l2tp_users.php:120 +#: usr/local/www/system_usermanager.php:840 +#: usr/local/www/system_usermanager.php:845 +#: usr/local/www/vpn_l2tp_users.php:121 usr/local/www/vpn_pptp_users.php:105 +#: usr/local/www/vpn_pptp_users.php:128 usr/local/www/vpn_pptp_users.php:105 +#: usr/local/www/vpn_pptp_users.php:128 usr/local/www/vpn_l2tp_users.php:121 +#: usr/local/www/system_usermanager.php:845 +msgid "add user" +msgstr "kullanıcı ekle" + +#: usr/local/www/vpn_pptp_users.php:117 +#: usr/local/www/system_usermanager.php:824 +#: usr/local/www/system_usermanager.php:822 +#: usr/local/www/system_usermanager.php:825 +#: usr/local/www/vpn_pptp_users.php:118 usr/local/www/vpn_pptp_users.php:118 +#: usr/local/www/system_usermanager.php:825 +msgid "edit user" +msgstr "kullanıcı düzenle" + +#: usr/local/www/vpn_pptp_users.php:118 usr/local/www/vpn_l2tp_users.php:115 +#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119 +#: usr/local/www/vpn_pptp_users.php:119 usr/local/www/vpn_l2tp_users.php:116 +msgid "Do you really want to delete this user?" +msgstr "Bu kullanıcıyı silmek istediğinize emin misiniz?" + +#: usr/local/www/vpn_pptp_users.php:118 +#: usr/local/www/system_usermanager.php:829 +#: usr/local/www/vpn_l2tp_users.php:115 +#: usr/local/www/system_usermanager.php:827 +#: usr/local/www/system_usermanager.php:830 +#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119 +#: usr/local/www/vpn_pptp_users.php:119 usr/local/www/vpn_l2tp_users.php:116 +#: usr/local/www/system_usermanager.php:830 +msgid "delete user" +msgstr "kullanıcı sil" + +#: usr/local/www/vpn_pptp_users_edit.php:85 +#: usr/local/www/services_dyndns_edit.php:94 +#: usr/local/www/system_usermanager.php:199 +#: usr/local/www/vpn_l2tp_users_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:110 +#: usr/local/www/vpn_l2tp_users_edit.php:88 +#: usr/local/www/services_dyndns_edit.php:110 +#: usr/local/www/vpn_l2tp_users_edit.php:88 +#: usr/local/www/vpn_pptp_users_edit.php:85 +#: usr/local/www/system_usermanager.php:199 +msgid "The username contains invalid characters." +msgstr "Kullanıcı adı geçersiz karakterler içeriyor." + +#: usr/local/www/vpn_pptp_users_edit.php:88 +#: usr/local/www/vpn_pptp_users_edit.php:88 +msgid "The password cannot start with '!'." +msgstr "Parola '!' karakteri ile başlayamaz." + +#: usr/local/www/vpn_pptp_users_edit.php:91 +#: usr/local/www/vpn_l2tp_users_edit.php:90 +#: usr/local/www/vpn_l2tp_users_edit.php:91 +#: usr/local/www/vpn_l2tp_users_edit.php:91 +#: usr/local/www/vpn_pptp_users_edit.php:91 +msgid "The password contains invalid characters." +msgstr "Parola geçersiz karakterler içermekte." + +#: usr/local/www/vpn_pptp_users_edit.php:94 +#: usr/local/www/system_usermanager.php:205 +#: usr/local/www/system_usermanager_passwordmg.php:54 +#: usr/local/www/vpn_l2tp_users_edit.php:93 +#: usr/local/www/vpn_l2tp_users_edit.php:94 +#: usr/local/www/system_usermanager_passwordmg.php:54 +#: usr/local/www/vpn_l2tp_users_edit.php:94 +#: usr/local/www/vpn_pptp_users_edit.php:94 +#: usr/local/www/system_usermanager.php:205 +msgid "The passwords do not match." +msgstr "Parolalar aynı değil." + +#: usr/local/www/vpn_pptp_users_edit.php:97 +#: usr/local/www/vpn_l2tp_users_edit.php:96 +#: usr/local/www/vpn_l2tp_users_edit.php:97 +#: usr/local/www/vpn_l2tp_users_edit.php:97 +#: usr/local/www/vpn_pptp_users_edit.php:97 +msgid "The IP address entered is not valid." +msgstr "Girilen IP adresi geçerli değil." + +#: usr/local/www/vpn_pptp_users_edit.php:104 +#: usr/local/www/system_usermanager.php:215 +#: usr/local/www/vpn_l2tp_users_edit.php:103 +#: usr/local/www/vpn_l2tp_users_edit.php:104 +#: usr/local/www/vpn_l2tp_users_edit.php:104 +#: usr/local/www/vpn_pptp_users_edit.php:104 +#: usr/local/www/system_usermanager.php:215 +msgid "Another entry with the same username already exists." +msgstr "Aynı kullanıcı adıyla başka girdi tespit edildi." + +#: usr/local/www/vpn_pptp_users_edit.php:155 +#: usr/local/www/vpn_l2tp_users_edit.php:163 +#: usr/local/www/vpn_pptp_users_edit.php:156 +#: usr/local/www/vpn_l2tp_users_edit.php:164 +#: usr/local/www/vpn_l2tp_users_edit.php:164 +#: usr/local/www/vpn_pptp_users_edit.php:156 +msgid "confirmation" +msgstr "onay" + +#: usr/local/www/vpn_pptp_users_edit.php:156 +#: usr/local/www/vpn_pptp_users_edit.php:157 +#: usr/local/www/vpn_pptp_users_edit.php:157 +msgid "If you want to change the users' password, enter it here twice." +msgstr "" +"Kullanıcıların parolalarını değiştirmek için bu bölüme iki defa giriniz." + +#: usr/local/www/vpn_pptp_users_edit.php:163 +#: usr/local/www/vpn_l2tp_users_edit.php:171 +#: usr/local/www/vpn_pptp_users_edit.php:164 +#: usr/local/www/vpn_l2tp_users_edit.php:172 +#: usr/local/www/vpn_l2tp_users_edit.php:172 +#: usr/local/www/vpn_pptp_users_edit.php:164 +msgid "" +"If you want the user to be assigned a specific IP address, enter it here." +msgstr "" +"Kullanıcıya özel bir IP adresi atanması için IP adresini buraya giriniz." + +#: usr/local/www/wizard.php:65 usr/local/www/wizard.php:71 +#: usr/local/www/wizard.php:65 usr/local/www/wizard.php:71 +#, php-format +msgid "ERROR: Could not open %s." +msgstr "HATA: %s açılamadı." + +#: usr/local/www/wizard.php:77 usr/local/www/wizard.php:77 +#, php-format +msgid "ERROR: Could not parse %s/wizards/%s file." +msgstr "HATA: %s/wizards/%s dosyası ayrıştırılamadı." + +#: usr/local/www/load_balancer_relay_action_edit.php:65 +#: usr/local/www/load_balancer_relay_action_edit.php:65 +msgid "Load Balancer: Relay Action:" +msgstr "Yük Dengeleyici: Aktarma Eylemi:" + +#: usr/local/www/load_balancer_relay_action_edit.php:124 +#: usr/local/www/load_balancer_relay_action_edit.php:124 +msgid "This action name has already been used. Action names must be unique." +msgstr "Bu eylem adı kullanılıyor. Eylem adları benzersiz olmalıdır." + +#: usr/local/www/load_balancer_relay_action_edit.php:134 +#: usr/local/www/load_balancer_relay_action_edit.php:134 +#, php-format +msgid "modified '%s' action:" +msgstr "'%s' değiştirilmiş eylemi:" + +#: usr/local/www/load_balancer_relay_action_edit.php:186 +#: usr/local/www/load_balancer_relay_protocol_edit.php:144 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#: usr/local/www/load_balancer_relay_protocol_edit.php:142 +#: usr/local/www/load_balancer_relay_action_edit.php:184 +#, fuzzy +msgid "DNS" +msgstr "DNS" + +#: usr/local/www/load_balancer_relay_action_edit.php:408 +#: usr/local/www/load_balancer_relay_action_edit.php:407 +#: usr/local/www/load_balancer_relay_action_edit.php:405 +#: usr/local/www/load_balancer_relay_action_edit.php:405 +msgid "Edit Load Balancer - Relay Action entry" +msgstr "Yük Dengeleyici Düzenle - Aktarma Eylemi girişi" + +#: usr/local/www/load_balancer_relay_action_edit.php:508 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:173 +#: usr/local/www/load_balancer_relay_action_edit.php:507 +#: usr/local/www/load_balancer_relay_action_edit.php:505 +#: usr/local/www/load_balancer_relay_action_edit.php:505 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:173 +msgid "Key" +msgstr "Anahtar" + +#: usr/local/www/load_balancer_relay_action_edit.php:517 +#: usr/local/www/load_balancer_relay_action_edit.php:537 +#: usr/local/www/load_balancer_relay_action_edit.php:516 +#: usr/local/www/load_balancer_relay_action_edit.php:536 +#: usr/local/www/load_balancer_relay_action_edit.php:514 +#: usr/local/www/load_balancer_relay_action_edit.php:534 +#: usr/local/www/load_balancer_relay_action_edit.php:514 +#: usr/local/www/load_balancer_relay_action_edit.php:534 +msgid "TODO" +msgstr "YAPILACAK" + +#: usr/local/www/xmlrpc.php:58 usr/local/www/xmlrpc.php:54 +msgid "Disallowing CARP sync loop." +msgstr "CARP senkronizasyon döngüsüne izin verilmeyecek." + +#: usr/local/www/xmlrpc.php:67 usr/local/www/xmlrpc.php:63 +#: usr/local/www/xmlrpc.php:67 +msgid "Authentication failed" +msgstr "Kimlik doğrulama başarısız" + +#: usr/local/www/xmlrpc.php:78 usr/local/www/xmlrpc.php:74 +#: usr/local/www/xmlrpc.php:78 +msgid "" +"XMLRPC wrapper for eval(). This method must be called with two parameters: a " +"string containing the local system\\'s password followed by the PHP code to " +"evaluate." +msgstr "" + +#: usr/local/www/xmlrpc.php:109 usr/local/www/xmlrpc.php:105 +#: usr/local/www/xmlrpc.php:109 +msgid "" +"XMLRPC wrapper for mwexec(). This method must be called with two parameters: " +"a string containing the local system\\'s password followed by an shell " +"command to execute." +msgstr "" + +#: usr/local/www/xmlrpc.php:133 usr/local/www/xmlrpc.php:129 +#: usr/local/www/xmlrpc.php:133 +msgid "" +"XMLRPC wrapper for backup_config_section. This method must be called with " +"two parameters: a string containing the local system\\'s password followed " +"by an array containing the keys to be backed up." +msgstr "" + +#: usr/local/www/xmlrpc.php:156 usr/local/www/xmlrpc.php:152 +#: usr/local/www/xmlrpc.php:159 +msgid "" +"XMLRPC wrapper for restore_config_section. This method must be called with " +"two parameters: a string containing the local system\\'s password and an " +"array to merge into the system\\'s config. This function returns true upon " +"completion." +msgstr "" + +#: usr/local/www/xmlrpc.php:203 usr/local/www/xmlrpc.php:282 +#: usr/local/www/xmlrpc.php:307 usr/local/www/xmlrpc.php:212 +#: usr/local/www/xmlrpc.php:291 usr/local/www/xmlrpc.php:316 +#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:313 +#: usr/local/www/xmlrpc.php:224 usr/local/www/xmlrpc.php:308 +#: usr/local/www/xmlrpc.php:337 +#, php-format +msgid "Merged in config (%s sections) from XMLRPC client." +msgstr "" + +#: usr/local/www/xmlrpc.php:263 usr/local/www/xmlrpc.php:272 +#: usr/local/www/xmlrpc.php:269 usr/local/www/xmlrpc.php:286 +msgid "" +"XMLRPC wrapper for merging package sections. This method must be called with " +"two parameters: a string containing the local system\\'s password and an " +"array to merge into the system\\'s config. This function returns true upon " +"completion." +msgstr "" + +#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:297 +#: usr/local/www/xmlrpc.php:294 usr/local/www/xmlrpc.php:314 +msgid "" +"XMLRPC wrapper for merge_config_section. This method must be called with two " +"parameters: a string containing the local system\\'s password and an array " +"to merge into the system\\'s config. This function returns true upon " +"completion." +msgstr "" + +#: usr/local/www/xmlrpc.php:312 usr/local/www/xmlrpc.php:321 +#: usr/local/www/xmlrpc.php:318 usr/local/www/xmlrpc.php:342 +msgid "" +"Basic XMLRPC wrapper for filter_configure. This method must be called with " +"one paramater: a string containing the local system\\'s password. This " +"function returns true upon completion." +msgstr "" + +#: usr/local/www/xmlrpc.php:342 usr/local/www/xmlrpc.php:351 +#: usr/local/www/xmlrpc.php:348 usr/local/www/xmlrpc.php:372 +msgid "Basic XMLRPC wrapper for configuring CARP interfaces." +msgstr "" + +#: usr/local/www/xmlrpc.php:364 usr/local/www/xmlrpc.php:385 +#: usr/local/www/xmlrpc.php:373 usr/local/www/xmlrpc.php:394 +#: usr/local/www/xmlrpc.php:370 usr/local/www/xmlrpc.php:391 +#: usr/local/www/xmlrpc.php:397 usr/local/www/xmlrpc.php:418 +msgid "" +"Basic XMLRPC wrapper for check_firmware_version. This function will return " +"the output of check_firmware_version upon completion." +msgstr "" + +#: usr/local/www/xmlrpc.php:406 usr/local/www/xmlrpc.php:415 +#: usr/local/www/xmlrpc.php:412 usr/local/www/xmlrpc.php:439 +msgid "Basic XMLRPC wrapper for rc.reboot." +msgstr "" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:65 +#: usr/local/www/load_balancer_relay_protocol_edit.php:65 +msgid "Load Balancer: Relay Protocol:" +msgstr "Yük Dengeleyici: Aktarım Protokolü:" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:86 +#: usr/local/www/load_balancer_relay_protocol_edit.php:86 +msgid "" +"This protocol name has already been used. Protocol names must be unique." +msgstr "Protokol adı kullanımda. Protokol adları benzersiz olmalıdır." + +#: usr/local/www/load_balancer_relay_protocol_edit.php:105 +#: usr/local/www/load_balancer_relay_protocol_edit.php:105 +#, php-format +msgid "modified '%s' load balancing protocol:" +msgstr "değiştirilmiş '%s' yük dengeleme protokolü:" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:107 +#: usr/local/www/load_balancer_relay_protocol_edit.php:107 +msgid "name" +msgstr "isim" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:108 +#: usr/local/www/load_balancer_relay_protocol_edit.php:110 +#: usr/local/www/load_balancer_relay_protocol_edit.php:108 +#: usr/local/www/load_balancer_relay_protocol_edit.php:110 +msgid "type" +msgstr "tür" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:109 +#: usr/local/www/load_balancer_relay_protocol_edit.php:109 +msgid "description" +msgstr "açıklama" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:111 +#: usr/local/www/load_balancer_relay_protocol_edit.php:111 +msgid "action" +msgstr "eylem" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:192 +#: usr/local/www/load_balancer_relay_protocol_edit.php:190 +#: usr/local/www/load_balancer_relay_protocol_edit.php:190 +msgid "Edit Load Balancer - Relay Protocol entry" +msgstr "Yük dengeleyiciyi düzenle - Aktarma Protokolü girişi" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:227 +#: usr/local/www/load_balancer_relay_protocol_edit.php:225 +#: usr/local/www/load_balancer_relay_protocol_edit.php:225 +msgid "Add / remove available actions" +msgstr "Eylem ekle / kaldır" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:237 +#: usr/local/www/load_balancer_relay_protocol_edit.php:235 +#: usr/local/www/load_balancer_relay_protocol_edit.php:235 +msgid "Available Actions" +msgstr "Kullanılabilir Eylemler" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:252 +#: usr/local/www/system_crlmanager.php:474 +#: usr/local/www/load_balancer_relay_protocol_edit.php:250 +#: usr/local/www/system_crlmanager.php:507 +#: usr/local/www/load_balancer_relay_protocol_edit.php:250 +#: usr/local/www/system_crlmanager.php:507 +msgid "Add" +msgstr "Ekle" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:259 +#: usr/local/www/load_balancer_relay_protocol_edit.php:257 +#: usr/local/www/load_balancer_relay_protocol_edit.php:257 +msgid "Enabled Actions" +msgstr "Etkinleştirilmiş Eylemler" + +#: usr/local/www/pkg_mgr_settings.php:62 usr/local/www/pkg_mgr_settings.php:94 +#: usr/local/www/pkg_mgr_settings.php:62 usr/local/www/pkg_mgr_settings.php:94 +msgid "Package Settings" +msgstr "Paket Ayarları" + +#: usr/local/www/pkg_mgr_settings.php:92 usr/local/www/pkg_mgr_settings.php:92 +#, php-format +msgid "%s packages" +msgstr "%s paketler" + +#: usr/local/www/pkg_mgr_settings.php:102 +#: usr/local/www/pkg_mgr_settings.php:105 +#: usr/local/www/pkg_mgr_settings.php:102 +#: usr/local/www/pkg_mgr_settings.php:105 +msgid "Package Repository URL" +msgstr "Paket Depo URLsi" + +#: usr/local/www/pkg_mgr_settings.php:107 +#: usr/local/www/pkg_mgr_settings.php:107 +msgid "Use a different URL server for packages other than" +msgstr "Paketler için farklı bir URL sunucu kullan" + +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/pkg_mgr_settings.php:112 +#, php-format +msgid "This is where %s will check for packages when the" +msgstr "%s paketleri burada arayacak" + +#: usr/local/www/pkg_mgr_settings.php:112 +#: usr/local/www/pkg_mgr_settings.php:112 +msgid "System: Packages" +msgstr "Sistem: Paketler" + +#: usr/local/www/services_captiveportal_hostname.php:111 +#: usr/local/www/services_captiveportal_hostname.php:109 +#: usr/local/www/services_captiveportal_hostname.php:109 +msgid "Allowed IP Addresses" +msgstr "İzinli IP Adresleri" + +#: usr/local/www/services_captiveportal_hostname.php:173 +#: usr/local/www/services_captiveportal_hostname.php:171 +#: usr/local/www/services_captiveportal_hostname.php:171 +msgid "" +"Adding allowed Hostnames will allow a DNS hostname access to/from access " +"through the captive portal without being taken to the portal page. This can " +"be used for a web server serving images for the portal page or a DNS server " +"on another network, for example. By specifying from addresses, it " +"may be used to always allow pass-through access from a client behind the " +"captive portal." +msgstr "" +"Eklenen izinli sunucu adresleri portal sayfalarına yönlendirilmeksizin " +"trafik gidiş-gelişine izin verilen adreslerdir. Bu özelliği başka bir ağdan " +"hizmet portalına resim gönderen bir web sunucu gibi sistemlere erişim vermek " +"ya da başka bir ağdaki DNS sunucuya sorgu yapabilmek için " +"kullanabilirsiniz. Kaynak adresleri belirterek Hizmet Portalının " +"arkasındaki bir istemciden bu adrese her zaman erişim izni verilebilir." + +#: usr/local/www/services_captiveportal_hostname.php:177 +#: usr/local/www/services_captiveportal_hostname.php:184 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +#: usr/local/www/services_captiveportal_hostname.php:175 +#: usr/local/www/services_captiveportal_hostname.php:182 +msgid "the Hostname are allowed" +msgstr "İzin verilen hostlar" + +#: usr/local/www/services_captiveportal_hostname_edit.php:62 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +#: usr/local/www/services_captiveportal_hostname_edit.php:59 +msgid "Edit allowed Hostname" +msgstr "İzinli host düzenle" + +#: usr/local/www/services_captiveportal_hostname_edit.php:102 +#: usr/local/www/services_captiveportal_hostname_edit.php:100 +#: usr/local/www/services_captiveportal_hostname_edit.php:100 +msgid "Allowed Hostname" +msgstr "İzin verilen host adı" + +#: usr/local/www/services_captiveportal_hostname_edit.php:107 +#: usr/local/www/services_captiveportal_hostname_edit.php:105 +#: usr/local/www/services_captiveportal_hostname_edit.php:105 +#, php-format +msgid "A valid Hostname must be specified. [%s]" +msgstr "Geçerli bir host adı belirtilmelidir. [%s]" + +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +#: usr/local/www/services_captiveportal_hostname_edit.php:170 +#: usr/local/www/services_captiveportal_hostname_edit.php:172 +msgid "" +"to always allow an Hostname through the captive portal (without " +"authentication)" +msgstr "" +"İstemciyi (kimlik doğrulamaya tabi tutmadan) hizmet portalından geçişine " +"izin ver" + +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +#: usr/local/www/services_captiveportal_hostname_edit.php:171 +#: usr/local/www/services_captiveportal_hostname_edit.php:173 +msgid "" +"to allow access from all clients (even non-authenticated ones) behind the " +"portal to this Hostname" +msgstr "" +"tüm istemcilerden (kimliği doğrulanmamış olanlar dahil) bu sunucuya erişim " +"ver" + +#: usr/local/www/services_captiveportal_hostname_edit.php:192 +#: usr/local/www/services_captiveportal_hostname_edit.php:190 +#: usr/local/www/services_captiveportal_hostname_edit.php:192 +msgid "Enter a upload limit to be enforced on this Hostname in Kbit/s" +msgstr "Kbit/sn cinsinden bu sunucuya veri gönderme hızı belirleyin" + +#: usr/local/www/services_captiveportal_hostname_edit.php:198 +#: usr/local/www/services_captiveportal_hostname_edit.php:196 +#: usr/local/www/services_captiveportal_hostname_edit.php:198 +msgid "Enter a download limit to be enforced on this Hostname in Kbit/s" +msgstr "Kbit/sn cinsinden bu sunucudan veri indirme hızı belirleyin" + +#: usr/local/www/services_captiveportal_vouchers.php:67 +#: usr/local/www/services_captiveportal_vouchers.php:64 +#: usr/local/www/services_captiveportal_vouchers.php:64 +msgid "" +"You will need to recreate any existing Voucher Rolls due to the public and " +"private key changes. Click cancel if you do not wish to recreate the " +"vouchers." +msgstr "" +"Genel ve özel anahtarlar değiştiği için Bilet Gruplarının yeniden " +"hazırlanması gerekir. Eğer biletleri yeniden oluşturmak istemiyorsanız " +"İptal'e tıklayın." + +#: usr/local/www/services_captiveportal_vouchers.php:114 +#: usr/local/www/services_captiveportal_vouchers.php:123 +#: usr/local/www/services_captiveportal_vouchers.php:130 +msgid "Voucher invalid" +msgstr "Bilet geçersiz" + +#: usr/local/www/services_captiveportal_vouchers.php:116 +#: usr/local/www/services_captiveportal_vouchers.php:125 +#: usr/local/www/services_captiveportal_vouchers.php:132 +msgid "Voucher expired" +msgstr "Biletin süresi doldu" + +#: usr/local/www/services_captiveportal_vouchers.php:139 +#: usr/local/www/services_captiveportal_vouchers.php:148 +#: usr/local/www/services_captiveportal_vouchers.php:155 +msgid "Cannot write private key file" +msgstr "Özel anahtar dosyası yazılamadı" + +#: usr/local/www/services_captiveportal_vouchers.php:157 +#: usr/local/www/services_captiveportal_vouchers.php:166 +#: usr/local/www/services_captiveportal_vouchers.php:175 +msgid "Need private RSA key to print vouchers" +msgstr "Biletlerin yazdırılması için RSA özel anahtarına ihtiyaç duyulmaktadır." + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "charset" +msgstr "karakter kümesi" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "rollbits" +msgstr "grup bit sayısı" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "ticketbits" +msgstr "bilet bit sayısı" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "checksumbits" +msgstr "kontrol bit sayısı" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "publickey" +msgstr "genel anahtar" + +#: usr/local/www/services_captiveportal_vouchers.php:191 +#: usr/local/www/services_captiveportal_vouchers.php:201 +#: usr/local/www/services_captiveportal_vouchers.php:210 +msgid "magic" +msgstr "özel" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:565 +#: usr/local/www/services_captiveportal_vouchers.php:572 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:585 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:594 +msgid "Synchronize Voucher Database IP" +msgstr "Bilet Veritabanı IP Adresi" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync port" +msgstr "Senkron portu" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync password" +msgstr "Senkron parolası" + +#: usr/local/www/services_captiveportal_vouchers.php:194 +#: usr/local/www/services_captiveportal_vouchers.php:204 +#: usr/local/www/services_captiveportal_vouchers.php:213 +msgid "Sync username" +msgstr "Senkron kullanıcı adı" + +#: usr/local/www/services_captiveportal_vouchers.php:203 +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:222 +msgid "Need at least 2 characters to create vouchers." +msgstr "Bilet oluşturmak için en az 2 karater gerekir." + +#: usr/local/www/services_captiveportal_vouchers.php:205 +#: usr/local/www/services_captiveportal_vouchers.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:224 +msgid "Double quotes aren't allowed." +msgstr "Çift tırnak kullanılamaz." + +#: usr/local/www/services_captiveportal_vouchers.php:207 +#: usr/local/www/services_captiveportal_vouchers.php:217 +#: usr/local/www/services_captiveportal_vouchers.php:226 +msgid "aren't allowed." +msgstr "kullanılamaz." + +#: usr/local/www/services_captiveportal_vouchers.php:209 +#: usr/local/www/services_captiveportal_vouchers.php:219 +#: usr/local/www/services_captiveportal_vouchers.php:228 +msgid "# of Bits to store Roll Id needs to be between 1..31." +msgstr "# Grup Kimliğinin saklanacağı bit sayısı 1 ile 31 arasında olmalıdır." + +#: usr/local/www/services_captiveportal_vouchers.php:211 +#: usr/local/www/services_captiveportal_vouchers.php:221 +#: usr/local/www/services_captiveportal_vouchers.php:230 +msgid "# of Bits to store Ticket Id needs to be between 1..16." +msgstr "# Bilet Kimliğinin saklanacağı bit sayısı 1 ile 16 arasında olmalıdır." + +#: usr/local/www/services_captiveportal_vouchers.php:213 +#: usr/local/www/services_captiveportal_vouchers.php:223 +#: usr/local/www/services_captiveportal_vouchers.php:232 +msgid "# of Bits to store checksum needs to be between 1..31." +msgstr "# Kontrol değerinin saklanacağı bit sayısı 1 ile 31 arasında olmalıdır." + +#: usr/local/www/services_captiveportal_vouchers.php:215 +#: usr/local/www/services_captiveportal_vouchers.php:225 +#: usr/local/www/services_captiveportal_vouchers.php:234 +msgid "This doesn't look like an RSA Public key." +msgstr "Bu bir RSA Ortak anahtarına benzemiyor." + +#: usr/local/www/services_captiveportal_vouchers.php:217 +#: usr/local/www/services_captiveportal_vouchers.php:227 +#: usr/local/www/services_captiveportal_vouchers.php:236 +msgid "This doesn't look like an RSA Private key." +msgstr "Bu bir RSA Özel anahtarına benzemiyor." + +#: usr/local/www/services_captiveportal_vouchers.php:219 +#: usr/local/www/services_captiveportal_vouchers.php:229 +#: usr/local/www/services_captiveportal_vouchers.php:238 +msgid "You cannot sync the voucher database to this host (itself)." +msgstr "Bilet veritabanını bu sunucuya (kendisine) senkron edemezsiniz." + +#: usr/local/www/services_captiveportal_vouchers.php:421 +#: usr/local/www/services_captiveportal_vouchers.php:428 +#: usr/local/www/services_captiveportal_vouchers.php:441 +#: usr/local/www/services_captiveportal_vouchers.php:450 +msgid "Enable Vouchers" +msgstr "Biletleri Etkinleştir" + +#: usr/local/www/services_captiveportal_vouchers.php:435 +#: usr/local/www/services_captiveportal_vouchers_edit.php:173 +#: usr/local/www/status_captiveportal_vouchers.php:116 +#: usr/local/www/services_captiveportal_vouchers.php:442 +#: usr/local/www/status_captiveportal_vouchers.php:117 +#: usr/local/www/services_captiveportal_vouchers.php:455 +#: usr/local/www/services_captiveportal_vouchers_edit.php:171 +#: usr/local/www/services_captiveportal_vouchers.php:464 +#: usr/local/www/services_captiveportal_vouchers_edit.php:171 +#: usr/local/www/status_captiveportal_vouchers.php:122 +msgid "Roll" +msgstr "Grup" + +#: usr/local/www/services_captiveportal_vouchers.php:436 +#: usr/local/www/status_captiveportal_voucher_rolls.php:86 +#: usr/local/www/services_captiveportal_vouchers.php:443 +#: usr/local/www/services_captiveportal_vouchers.php:456 +#: usr/local/www/status_captiveportal_voucher_rolls.php:87 +#: usr/local/www/services_captiveportal_vouchers.php:465 +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +msgid "Minutes/Ticket" +msgstr "Dakika/Bilet" + +#: usr/local/www/services_captiveportal_vouchers.php:437 +#: usr/local/www/services_captiveportal_vouchers.php:444 +#: usr/local/www/services_captiveportal_vouchers.php:457 +#: usr/local/www/services_captiveportal_vouchers.php:466 +msgid "of Tickets" +msgstr "Bilette" + +#: usr/local/www/services_captiveportal_vouchers.php:438 +#: usr/local/www/services_captiveportal_vouchers_edit.php:197 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +#: usr/local/www/services_captiveportal_vouchers.php:445 +#: usr/local/www/services_captiveportal_vouchers.php:458 +#: usr/local/www/services_captiveportal_vouchers_edit.php:195 +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +#: usr/local/www/services_captiveportal_vouchers.php:467 +#: usr/local/www/services_captiveportal_vouchers_edit.php:195 +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +msgid "Comment" +msgstr "Yorum" + +#: usr/local/www/services_captiveportal_vouchers.php:458 +#: usr/local/www/services_captiveportal_vouchers.php:465 +#: usr/local/www/services_captiveportal_vouchers.php:478 +#: usr/local/www/services_captiveportal_vouchers.php:487 +msgid "edit voucher" +msgstr "bilet düzenle" + +#: usr/local/www/services_captiveportal_vouchers.php:459 +#: usr/local/www/services_captiveportal_vouchers.php:466 +#: usr/local/www/services_captiveportal_vouchers.php:479 +#: usr/local/www/services_captiveportal_vouchers.php:488 +msgid "" +"Do you really want to delete this voucher? This makes all vouchers from this " +"roll invalid" +msgstr "" +"Bu bileti silmek istediğinize emin misiniz? Bu eylem bu gruptaki tüm " +"biletleri geçersiz kılar" + +#: usr/local/www/services_captiveportal_vouchers.php:459 +#: usr/local/www/services_captiveportal_vouchers.php:466 +#: usr/local/www/services_captiveportal_vouchers.php:479 +#: usr/local/www/services_captiveportal_vouchers.php:488 +msgid "delete vouchers" +msgstr "biletleri sil" + +#: usr/local/www/services_captiveportal_vouchers.php:460 +#: usr/local/www/services_captiveportal_vouchers.php:467 +#: usr/local/www/services_captiveportal_vouchers.php:480 +#: usr/local/www/services_captiveportal_vouchers.php:489 +msgid "generate vouchers for this roll to CSV file" +msgstr "bu gruptaki biletleri CSV dosyasına yaz" + +#: usr/local/www/services_captiveportal_vouchers.php:470 +#: usr/local/www/services_captiveportal_vouchers.php:477 +#: usr/local/www/services_captiveportal_vouchers.php:490 +#: usr/local/www/services_captiveportal_vouchers.php:499 +msgid "add voucher" +msgstr "bilet ekle" + +#: usr/local/www/services_captiveportal_vouchers.php:475 +#: usr/local/www/services_captiveportal_vouchers.php:482 +#: usr/local/www/services_captiveportal_vouchers.php:495 +#: usr/local/www/services_captiveportal_vouchers.php:504 +msgid "" +"Create, generate and activate Rolls with Vouchers that allow access through " +"the captive portal for the configured time. Once a voucher is activated, its " +"clock is started and runs uninterrupted until it expires. During that time, " +"the voucher can be re-used from the same or a different computer. If the " +"voucher is used again from another computer, the previous session is stopped." +msgstr "" +"Hizmet Portalında istenen zaman aralığında kullanılmak üzere bilet(ler) " +"oluşturup etkinleştirebilirsiniz. Bir bilet etkinleştirildiğinde saati " +"başlar ve süresi dolana kadar kesintisiz devam eder. Bu süre zarfında bilet " +"aynı bilgisayardan veya farklı bilgisayardan kullanılabilir. Eğer bilet " +"farklı bir bilgisayarda kullanılırsa önceki oturum kapatılır." + +#: usr/local/www/services_captiveportal_vouchers.php:481 +#: usr/local/www/services_captiveportal_vouchers.php:488 +#: usr/local/www/services_captiveportal_vouchers.php:501 +#: usr/local/www/services_captiveportal_vouchers.php:510 +msgid "" +"Enable Voucher support first using the checkbox above and hit Save at the " +"bottom." +msgstr "" +"Bilet desteğini etkinleştirmek için aşağıdaki seçim kutusunu işaretleyip " +"Kaydet'e tıklayın." + +#: usr/local/www/services_captiveportal_vouchers.php:486 +#: usr/local/www/services_captiveportal_vouchers.php:493 +#: usr/local/www/services_captiveportal_vouchers.php:506 +#: usr/local/www/services_captiveportal_vouchers.php:515 +msgid "Voucher public key" +msgstr "Bilet ortak anahtarı" + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:520 +msgid "" +"Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is " +"used to decrypt vouchers." +msgstr "" +"Buraya PEM formatında bir RSA ortak anahtarı (64 bit veya daha küçük) " +"yapıştırın. Bu anahtar biletleri çözümlemede kullanılır." + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:520 +#: usr/local/www/services_captiveportal_vouchers.php:527 +msgid "Generate" +msgstr "Oluştur" + +#: usr/local/www/services_captiveportal_vouchers.php:491 +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:511 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:520 +#: usr/local/www/services_captiveportal_vouchers.php:527 +msgid "new key" +msgstr "yeni anahtar" + +#: usr/local/www/services_captiveportal_vouchers.php:494 +#: usr/local/www/services_captiveportal_vouchers.php:501 +#: usr/local/www/services_captiveportal_vouchers.php:514 +#: usr/local/www/services_captiveportal_vouchers.php:523 +msgid "Voucher private key" +msgstr "Bilet özel anahtarı" + +#: usr/local/www/services_captiveportal_vouchers.php:498 +#: usr/local/www/services_captiveportal_vouchers.php:505 +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:527 +msgid "" +"Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is " +"only used to generate encrypted vouchers and doesn't need to be available if " +"the vouchers have been generated offline." +msgstr "" +"Buraya PEM formatında bir RSA özel anahtarı (64 bit veya daha küçük) " +"yapıştırın. Bu anahtar sadece şifrelenmiş biletleri oluştururken kullanılır " +"ve bilet çevrimdışı olarak oluşturulmuşsa erişilebilir durumda olması " +"gerekmez." + +#: usr/local/www/services_captiveportal_vouchers.php:502 +#: usr/local/www/services_captiveportal_vouchers.php:509 +#: usr/local/www/services_captiveportal_vouchers.php:522 +#: usr/local/www/services_captiveportal_vouchers.php:531 +msgid "Character set" +msgstr "Karakter kümesi" + +#: usr/local/www/services_captiveportal_vouchers.php:506 +#: usr/local/www/services_captiveportal_vouchers.php:513 +#: usr/local/www/services_captiveportal_vouchers.php:526 +#: usr/local/www/services_captiveportal_vouchers.php:535 +msgid "" +"Tickets are generated with the specified character set. It should contain " +"printable characters (numbers, lower case and upper case letters) that are " +"hard to confuse with others. Avoid e.g. 0/O and l/1." +msgstr "" +"Biletler belirtilen karakter kümesinde oluşturulur. Diğer karakterlerle " +"karıştırılmayacak alfanümerik karakterler (rakamlar, büyük ve küçük harfler) " +"içermelidir. O (harf), 0 (sıfır), l (harf) ve 1 (bir) gibi karakterler " +"kullanmaktan kaçının." + +#: usr/local/www/services_captiveportal_vouchers.php:510 +#: usr/local/www/services_captiveportal_vouchers.php:517 +#: usr/local/www/services_captiveportal_vouchers.php:530 +#: usr/local/www/services_captiveportal_vouchers.php:539 +msgid "of Roll Bits" +msgstr "Grup Bitleri" + +#: usr/local/www/services_captiveportal_vouchers.php:514 +#: usr/local/www/services_captiveportal_vouchers.php:521 +#: usr/local/www/services_captiveportal_vouchers.php:534 +#: usr/local/www/services_captiveportal_vouchers.php:543 +msgid "" +"Reserves a range in each voucher to store the Roll # it belongs to. Allowed " +"range: 1..31. Sum of Roll+Ticket+Checksum bits must be one Bit less than the " +"RSA key size." +msgstr "" +"Her bilette biletin ait olduğu grup numarasını saklamak için bir aralığı " +"ayırır. İzin verilen bit sayısı 1 ile 31 arasıdır. Grup, Bilet ve Kontrol " +"toplamı bitleri toplam sayısı RSA anahtar boyutundan bir düşük olmalıdır." + +#: usr/local/www/services_captiveportal_vouchers.php:518 +#: usr/local/www/services_captiveportal_vouchers.php:525 +#: usr/local/www/services_captiveportal_vouchers.php:538 +#: usr/local/www/services_captiveportal_vouchers.php:547 +msgid "of Ticket Bits" +msgstr "Bilet bitleri" + +#: usr/local/www/services_captiveportal_vouchers.php:522 +#: usr/local/www/services_captiveportal_vouchers.php:529 +#: usr/local/www/services_captiveportal_vouchers.php:542 +#: usr/local/www/services_captiveportal_vouchers.php:551 +msgid "" +"Reserves a range in each voucher to store the Ticket# it belongs to. Allowed " +"range: 1..16. Using 16 bits allows a roll to have up to 65535 vouchers. A " +"bit array, stored in RAM and in the config, is used to mark if a voucher has " +"been used. A bit array for 65535 vouchers requires 8 KB of storage." +msgstr "" +"Her bilette bilet kimliğini saklamak için bir aralığı ayırır. İzin verilen " +"bit sayısı 1 ile 16 arasındadır. 16 bit kullanılması bir bilet grubunda " +"65535 bilet olmasına olanak verir. Oluşan dizeler RAMda ve sistem " +"yapılandırma dosyasında tutulur ve biletin kullanımda olup olmadığı oradan " +"takip edilir. 65535 biletli bir dize 8KB depolama alanı gerektirir." + +#: usr/local/www/services_captiveportal_vouchers.php:526 +#: usr/local/www/services_captiveportal_vouchers.php:533 +#: usr/local/www/services_captiveportal_vouchers.php:546 +#: usr/local/www/services_captiveportal_vouchers.php:555 +msgid "of Checksum Bits" +msgstr "Kontrol Toplamı Bitleri" + +#: usr/local/www/services_captiveportal_vouchers.php:530 +#: usr/local/www/services_captiveportal_vouchers.php:537 +#: usr/local/www/services_captiveportal_vouchers.php:550 +#: usr/local/www/services_captiveportal_vouchers.php:559 +msgid "" +"Reserves a range in each voucher to store a simple checksum over Roll # and " +"Ticket#. Allowed range is 0..31." +msgstr "" +"Her biletin bir kısmını grup ve bilet kimliklerinin kontrol toplamını " +"saklamak için ayırır. İzin verilen aralık 0-31dir." + +#: usr/local/www/services_captiveportal_vouchers.php:534 +#: usr/local/www/services_captiveportal_vouchers.php:541 +#: usr/local/www/services_captiveportal_vouchers.php:554 +#: usr/local/www/services_captiveportal_vouchers.php:563 +msgid "Magic Number" +msgstr "Özel Numara" + +#: usr/local/www/services_captiveportal_vouchers.php:538 +#: usr/local/www/services_captiveportal_vouchers.php:545 +#: usr/local/www/services_captiveportal_vouchers.php:558 +#: usr/local/www/services_captiveportal_vouchers.php:567 +msgid "" +"Magic number stored in every voucher. Verified during voucher check. Size " +"depends on how many bits are left by Roll+Ticket+Checksum bits. If all bits " +"are used, no magic number will be used and checked." +msgstr "" +"Her bilette saklanan özel numara. Bilet kontrolü sırasında doğrulanır. " +"Boyutu grup, bilet ve kontrol toplamı için kaç bit ayrıldığına bağlıdır. Tüm " +"bitler kullanımdaysa özel numara kullanılmaz ve kontrol edilmez." + +#: usr/local/www/services_captiveportal_vouchers.php:542 +#: usr/local/www/services_captiveportal_vouchers.php:549 +#: usr/local/www/services_captiveportal_vouchers.php:562 +#: usr/local/www/services_captiveportal_vouchers.php:571 +msgid "Invalid Voucher Message" +msgstr "Geçersiz Bilet Mesajı" + +#: usr/local/www/services_captiveportal_vouchers.php:545 +#: usr/local/www/services_captiveportal_vouchers.php:552 +#: usr/local/www/services_captiveportal_vouchers.php:565 +#: usr/local/www/services_captiveportal_vouchers.php:574 +msgid "" +"Error message displayed for invalid vouchers on captive portal error page" +msgstr "" +"Hizmet Portalında geçersiz bilet kullanıldığında hata sayfasında " +"gösterilecek hata mesajı" + +#: usr/local/www/services_captiveportal_vouchers.php:549 +#: usr/local/www/services_captiveportal_vouchers.php:556 +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:578 +msgid "Expired Voucher Message" +msgstr "Süresi Geçmiş Bilet Mesajı" + +#: usr/local/www/services_captiveportal_vouchers.php:552 +#: usr/local/www/services_captiveportal_vouchers.php:559 +#: usr/local/www/services_captiveportal_vouchers.php:572 +#: usr/local/www/services_captiveportal_vouchers.php:581 +msgid "" +"Error message displayed for expired vouchers on captive portal error page" +msgstr "" +"Hizmet Portalında süresi dolmuş bilet kullanıldığında hata sayfasında " +"gösterilecek hata mesajı" + +#: usr/local/www/services_captiveportal_vouchers.php:562 +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:582 +#: usr/local/www/services_captiveportal_vouchers.php:591 +msgid "Voucher database synchronization" +msgstr "Bilet veritabanı senkronizasyonu" + +#: usr/local/www/services_captiveportal_vouchers.php:568 +#: usr/local/www/services_captiveportal_vouchers.php:575 +#: usr/local/www/services_captiveportal_vouchers.php:588 +#: usr/local/www/services_captiveportal_vouchers.php:597 +msgid "" +"IP address of master nodes webConfigurator to synchronize voucher database " +"and used vouchers from." +msgstr "" +"webArayüzü bilet veritabanını ve kullanılmış biletleri senkronize edeceği IP " +"adresi" + +#: usr/local/www/services_captiveportal_vouchers.php:569 +#: usr/local/www/services_captiveportal_vouchers.php:576 +#: usr/local/www/services_captiveportal_vouchers.php:589 +#: usr/local/www/services_captiveportal_vouchers.php:598 +msgid "NOTE: this should be setup on the slave nodes and not the primary node!" +msgstr "NOT: Bu ayar ana uçta değil diğer uçlarda yapılmalıdır!" + +#: usr/local/www/services_captiveportal_vouchers.php:573 +#: usr/local/www/services_captiveportal_vouchers.php:580 +#: usr/local/www/services_captiveportal_vouchers.php:593 +#: usr/local/www/services_captiveportal_vouchers.php:602 +msgid "Voucher sync port" +msgstr "Bilet senkronizasyon portu" + +#: usr/local/www/services_captiveportal_vouchers.php:576 +#: usr/local/www/services_captiveportal_vouchers.php:583 +#: usr/local/www/services_captiveportal_vouchers.php:596 +#: usr/local/www/services_captiveportal_vouchers.php:605 +msgid "" +"This is the port of the master voucher nodes webConfigurator. Example: 443" +msgstr "" +"webArayüzü bilet verilerinin senkronizasyonu için kullanılacak porttur. " +"Örnek: 443" + +#: usr/local/www/services_captiveportal_vouchers.php:580 +#: usr/local/www/services_captiveportal_vouchers.php:587 +#: usr/local/www/services_captiveportal_vouchers.php:600 +#: usr/local/www/services_captiveportal_vouchers.php:609 +msgid "Voucher sync username" +msgstr "Bilet senkronizasyon kullanıcı adı" + +#: usr/local/www/services_captiveportal_vouchers.php:583 +#: usr/local/www/services_captiveportal_vouchers.php:590 +#: usr/local/www/services_captiveportal_vouchers.php:603 +#: usr/local/www/services_captiveportal_vouchers.php:612 +msgid "This is the username of the master voucher nodes webConfigurator." +msgstr "webArayüzü ana bilet düğümlerinde verilecek kullanıcı adı." + +#: usr/local/www/services_captiveportal_vouchers.php:587 +#: usr/local/www/services_captiveportal_vouchers.php:594 +#: usr/local/www/services_captiveportal_vouchers.php:607 +#: usr/local/www/services_captiveportal_vouchers.php:616 +msgid "Voucher sync password" +msgstr "Bilet senkronizasyon parolası" + +#: usr/local/www/services_captiveportal_vouchers.php:590 +#: usr/local/www/services_captiveportal_vouchers.php:597 +#: usr/local/www/services_captiveportal_vouchers.php:610 +#: usr/local/www/services_captiveportal_vouchers.php:619 +msgid "This is the password of the master voucher nodes webConfigurator." +msgstr "webArayüzü ana bilet düğümlerinde verilecek parola." + +#: usr/local/www/services_captiveportal_vouchers.php:604 +#: usr/local/www/services_captiveportal_vouchers.php:611 +#: usr/local/www/services_captiveportal_vouchers.php:625 +#: usr/local/www/services_captiveportal_vouchers.php:634 +msgid "" +"Changing any Voucher parameter (apart from managing the list of Rolls) on " +"this page will render existing vouchers useless if they were generated with " +"different settings." +msgstr "" +"Bu sayfadaki herhangi bir Bilet parametresini değiştirmek (grup listesi " +"yönetimi dışında) varolan biletleri (eğer farklı ayarlarla " +"oluşturulmuşlarsa) geçersiz kılacaktır." + +#: usr/local/www/services_captiveportal_vouchers.php:606 +#: usr/local/www/services_captiveportal_vouchers.php:613 +#: usr/local/www/services_captiveportal_vouchers.php:627 +#: usr/local/www/services_captiveportal_vouchers.php:636 +msgid "" +"Specifying the Voucher Database Synchronization options will not record any " +"other value from the other options. They will be retrieved/synced from the " +"master." +msgstr "" +"Bilet Veritabanı Senkronizasyon ayarları yapılırsa diğer seçenekler " +"kaydedilmez, ana uçtan alınır/senkronize edilir." + +#: usr/local/www/services_captiveportal_vouchers_edit.php:48 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +#: usr/local/www/services_captiveportal_vouchers_edit.php:45 +msgid "Edit Voucher Rolls" +msgstr "Bilet Gruplarını Yönet" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:101 +#: usr/local/www/services_captiveportal_vouchers_edit.php:99 +#: usr/local/www/services_captiveportal_vouchers_edit.php:99 +#, php-format +msgid "Roll number %s already exists." +msgstr "Grup numarası %s zaten var." + +#: usr/local/www/services_captiveportal_vouchers_edit.php:107 +#: usr/local/www/services_captiveportal_vouchers_edit.php:105 +#: usr/local/www/services_captiveportal_vouchers_edit.php:105 +#, php-format +msgid "Roll number must be numeric and less than %s" +msgstr "Grup numarası sayı olmalıdır ve %s sayısından küçük olmalıdır." + +#: usr/local/www/services_captiveportal_vouchers_edit.php:110 +#: usr/local/www/services_captiveportal_vouchers_edit.php:108 +#: usr/local/www/services_captiveportal_vouchers_edit.php:108 +#, php-format +msgid "A roll has at least one voucher and less than %s." +msgstr "Bir grubun %s sayısından düşük olmak kaydıyla en az bir bileti var." + +#: usr/local/www/services_captiveportal_vouchers_edit.php:113 +#: usr/local/www/services_captiveportal_vouchers_edit.php:111 +#: usr/local/www/services_captiveportal_vouchers_edit.php:111 +msgid "Each voucher must be good for at least 1 minute." +msgstr "Her bilet en az 1 dakika kullanılabilir olmalıdır." + +#: usr/local/www/services_captiveportal_vouchers_edit.php:134 +#: usr/local/www/services_captiveportal_vouchers_edit.php:132 +#: usr/local/www/services_captiveportal_vouchers_edit.php:132 +#, php-format +msgid "All %1$s vouchers from Roll %2$s marked unused" +msgstr "%2$s grubundaki tüm %1$s bilet kullanılmadı olarak işaretlendi." + +#: usr/local/www/services_captiveportal_vouchers_edit.php:177 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +msgid "Enter the Roll" +msgstr "Grubu gir" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:177 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +#: usr/local/www/services_captiveportal_vouchers_edit.php:175 +msgid "found on top of the generated/printed vouchers" +msgstr "oluşurulmuş veya yazdırılmış bilet listesinin üstünde" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:181 +#: usr/local/www/services_captiveportal_vouchers_edit.php:179 +#: usr/local/www/services_captiveportal_vouchers_edit.php:179 +msgid "Minutes per Ticket" +msgstr "Dakikadaki Bilet Sayısı" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:185 +#: usr/local/www/services_captiveportal_vouchers_edit.php:183 +#: usr/local/www/services_captiveportal_vouchers_edit.php:183 +msgid "" +"Defines the time in minutes that a user is allowed access. The clock starts " +"ticking the first time a voucher is used for authentication" +msgstr "" +"Kullanıcıya kaç dakika erişim izni verileceğini belirler. Süre bilet kimlik " +"doğrulama amacıyla kullanıldığı anda başlar" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:193 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +msgid "Enter the number of vouchers" +msgstr "Bilet sayısınız giriniz" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:193 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +#: usr/local/www/services_captiveportal_vouchers_edit.php:191 +msgid "" +"found on top of the generated/printed vouchers. WARNING: Changing this " +"number for an existing Roll will mark all vouchers as unused again" +msgstr "" +"oluşturulmuş/yazdırılmış bilet listesinin üstündeki. UYARI: Mevcut grupta bu " +"sayıyı değiştirmek tüm biletleri kullanılmamış olarak işaretler" + +#: usr/local/www/services_captiveportal_vouchers_edit.php:201 +#: usr/local/www/services_captiveportal_vouchers_edit.php:199 +#: usr/local/www/services_captiveportal_vouchers_edit.php:199 +msgid "Can be used to further identify this roll. Ignored by the system" +msgstr "Bu bileti tanımada kullanılabilir. Sistem tarafından gözardı edilir." + +#: usr/local/www/diag_resetstate.php:54 usr/local/www/diag_resetstate.php:54 +msgid "The state table has been flushed successfully." +msgstr "Durum tablosu başarıyla temizlendi." + +#: usr/local/www/diag_resetstate.php:60 usr/local/www/diag_resetstate.php:60 +msgid "The source tracking table has been flushed successfully." +msgstr "Kaynak takibi tablosu başarıyla temizlendi." + +#: usr/local/www/diag_resetstate.php:64 usr/local/www/diag_resetstate.php:64 +msgid "Reset state" +msgstr "Durumu sıfırla" + +#: usr/local/www/diag_resetstate.php:91 usr/local/www/diag_resetstate.php:91 +msgid "Firewall state table" +msgstr "Güvenlik Duvarı durum tablosu" + +#: usr/local/www/diag_resetstate.php:93 usr/local/www/diag_resetstate.php:93 +msgid "" +"Resetting the state tables will remove all entries from the corresponding " +"tables. This means that all open connections will be broken and will have to " +"be re-established. This may be necessary after making substantial changes to " +"the firewall and/or NAT rules, especially if there are IP protocol mappings " +"(e.g. for PPTP or IPv6) with open connections." +msgstr "" +"Durum tablosunun temizlenmesi tüm açık bağlantıların kapatılmasına sebep " +"olur. Dolayısıyla tüm açık bağlantılar kopar ve yeniden kurulmaları gerekir. " +"Bu sıfırlama işlemi, güvenlik duvarında ve/veya NAT kurallarında büyük " +"değişiklikler yapıldığında (özellikle PPTP veya IPv6 gibi IP protokol " +"eşleştirmeleri varsa) gerekli olabilir." + +#: usr/local/www/diag_resetstate.php:100 usr/local/www/diag_resetstate.php:100 +msgid "" +"The firewall will normally leave the state tables intact when changing rules." +msgstr "" +"Güvenlik duvarı normalde kurallar değiştirilirken durum tablolarına " +"dokunmaz." + +#: usr/local/www/diag_resetstate.php:103 usr/local/www/diag_resetstate.php:103 +msgid "" +"NOTE: If you reset the firewall state table, the browser session may appear " +"to be hung after clicking "Reset". Simply refresh the page to " +"continue." +msgstr "" +"NOT: Güvenlik duvarı durum tablosu sıfırlandığında tarayıcı oturumu asılı " +"kalabilir. Bu durumda çalışmaya devam etmek için sayfayı yenilemeniz " +"yeterlidir." + +#: usr/local/www/diag_resetstate.php:113 usr/local/www/diag_resetstate.php:113 +msgid "Firewall Source Tracking" +msgstr "Güvenlik Duvarı Kaynak Takibi" + +#: usr/local/www/diag_resetstate.php:115 usr/local/www/diag_resetstate.php:115 +msgid "" +"Resetting the source tracking table will remove all source/destination " +"associations. This means that the \"sticky\" source/destination association " +"will be cleared for all clients." +msgstr "" +"Kaynak takibi tablosunu temizlenmesi tüm kaynak/hedef ortaklıklarını " +"silecektir. Bu \"sabit\" kaynak/hedef ortaklılkarının tüm istemcilerde " +"silineceğini belirtir." + +#: usr/local/www/diag_resetstate.php:119 usr/local/www/diag_resetstate.php:119 +msgid "This does not clear active connection states, only source tracking." +msgstr "Bu aktif bağlantı durumlarını silmez, sadece kaynak takibini siler." + +#: usr/local/www/diag_resetstate.php:127 usr/local/www/status_lb_pool.php:218 +#: usr/local/www/status_lb_pool.php:218 usr/local/www/diag_resetstate.php:127 +msgid "Reset" +msgstr "Sıfırla" + +#: usr/local/www/status_filter_reload.php:44 +#: usr/local/www/status_filter_reload.php:44 +msgid "Filter Reload Status" +msgstr "Filtre Yeniden Yükleme Durumu" + +#: usr/local/www/status_filter_reload.php:88 +#: usr/local/www/status_filter_reload.php:89 +#: usr/local/www/status_filter_reload.php:89 +msgid "" +"This page will automatically refresh every 3 seconds until the filter is " +"done reloading" +msgstr "" +"Bu sayfa filtre yeniden yükleme tamamlanana kadar her 3 saniyede bir " +"güncellenecektir" + +#: usr/local/www/diag_routes.php:45 usr/local/www/diag_routes.php:45 +msgid "Routing tables" +msgstr "Yönlendirme tabloları" + +#: usr/local/www/diag_routes.php:58 usr/local/www/diag_routes.php:59 +#: usr/local/www/diag_routes.php:59 +msgid "Name resolution" +msgstr "İsim çözümleme" + +#: usr/local/www/diag_routes.php:62 usr/local/www/diag_routes.php:63 +#: usr/local/www/diag_routes.php:63 +msgid "Enable this to attempt to resolve names when displaying the tables." +msgstr "Tabloları görüntülerken isim çözümlemeyi etkinleştir." + +#: usr/local/www/diag_routes.php:69 usr/local/www/diag_routes.php:70 +#: usr/local/www/diag_routes.php:70 +msgid "Show" +msgstr "Göster" + +#: usr/local/www/diag_routes.php:72 +msgid "" +"By enabling name resolution, the query should take a bit longer. You can " +"stop it at any time by clicking the Stop button in your browser" +msgstr "" +"İsim çözümleme etkinleştirildiğinde, sorgulama biraz daha uzun sürecektir. " +"İstediğiniz anda tarayıcınızın Durdur düğmesini kullanarak işlemi " +"durdurabilirsiniz" + +#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:62 +#, fuzzy +msgid "ttl" +msgstr "ttl" + +#: usr/local/www/diag_traceroute.php:66 usr/local/www/diag_traceroute.php:66 +#, php-format +msgid "Maximum number of hops must be between 1 and %s" +msgstr "Maksimum atlama sayısı 1 ile %s arasında olmalıdır" + +#: usr/local/www/diag_traceroute.php:94 usr/local/www/diag_traceroute.php:112 +msgid "Maximum number of hops" +msgstr "Maksimum atlama sayısı" + +#: usr/local/www/diag_traceroute.php:104 usr/local/www/diag_traceroute.php:128 +msgid "Use ICMP" +msgstr "ICMP Kullan" + +#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:141 +msgid "" +"Traceroute may take a while to complete. You may hit the Stop button on your " +"browser at any time to see the progress of failed traceroutes." +msgstr "" +"Traceroute işleminin tamamlanması uzun zaman alabilir. Tarayıcınızdaki " +"durdur butonu ile başarısız traceroute sonuçlarını görebilirsiniz." + +#: usr/local/www/diag_traceroute.php:120 usr/local/www/diag_traceroute.php:144 +msgid "Traceroute output:" +msgstr "Traceroute çıktısı:" + +#: usr/local/www/diag_traceroute.php:137 +msgid "Multi-wan is not supported from this utility currently." +msgstr "Çoklu WAN bu uygulamada henüz desteklenmemektedir." + +#: usr/local/www/status_graph.php:85 usr/local/www/fbegin.inc:173 +#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:199 +#: usr/local/www/status_graph.php:90 usr/local/www/status_graph.php:101 +#: usr/local/www/fbegin.inc:190 +msgid "Traffic Graph" +msgstr "Trafik Grafikleri" + +#: usr/local/www/status_graph.php:197 +msgid "" +"Your browser does not support the type SVG! You need to either use Firefox " +"or download the Adobe SVG plugin" +msgstr "" +"Tarayıcınız SVG görüntülemeyi desteklemiyor. Firefox veya Chrome kullanın ya " +"da Adobe SVG eklentisini kurun" + +#: usr/local/www/status_graph.php:203 usr/local/www/status_graph.php:198 +#: usr/local/www/status_graph.php:209 usr/local/www/status_graph.php:220 +#, fuzzy +msgid "Host IP" +msgstr "Host IP" + +#: usr/local/www/status_graph.php:204 usr/local/www/status_graph.php:199 +#: usr/local/www/status_graph.php:210 usr/local/www/status_graph.php:221 +msgid "Bandwidth In" +msgstr "Bant Genişliği (içeri)" + +#: usr/local/www/status_graph.php:205 usr/local/www/status_graph.php:200 +#: usr/local/www/status_graph.php:211 usr/local/www/status_graph.php:222 +msgid "Bandwidth Out" +msgstr "Bant Genişliği (dışarı)" + +# boş bırakınız kelime içinde gerekli değil. +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +msgid "the" +msgstr " " + +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +msgid "Adobe SVG Viewer" +msgstr "Adobe SVG Görüntüleyici" + +#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286 +#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308 +msgid "" +"Firefox 1.5 or later or other browser supporting SVG is required to view the " +"graph" +msgstr "" +"Grafiği görüntülemek için Firefox 1.5 üstü ve SVG destekli tarayıcılar " +"gerekmektedir" + +#: usr/local/www/carp_status.php:71 usr/local/www/carp_status.php:67 +#: usr/local/www/carp_status.php:67 +#, php-format +msgid "" +"%s IPs have been disabled. Please note that disabling does not survive a " +"reboot." +msgstr "" +"%s IP kapatılmış durumda. Cihazı yeniden başlattığınızda tekrar " +"etkinleştirileceklerini unutmayın." + +#: usr/local/www/carp_status.php:73 usr/local/www/carp_status.php:69 +#: usr/local/www/carp_status.php:69 +msgid "CARP has been enabled." +msgstr "CARP etkinleştirildi." + +#: usr/local/www/carp_status.php:127 usr/local/www/carp_status.php:120 +#: usr/local/www/carp_status.php:120 +msgid "Enable Carp" +msgstr "CARP'ı etkinleştir" + +#: usr/local/www/carp_status.php:130 usr/local/www/carp_status.php:123 +#: usr/local/www/carp_status.php:123 +msgid "Disable Carp" +msgstr "CARP'ı devre dışı bırak" + +#: usr/local/www/carp_status.php:138 usr/local/www/carp_status.php:131 +#: usr/local/www/carp_status.php:131 +msgid "CARP Interface" +msgstr "CARP Arabirimi" + +#: usr/local/www/carp_status.php:144 usr/local/www/carp_status.php:137 +#: usr/local/www/carp_status.php:137 +msgid "Could not locate any defined CARP interfaces." +msgstr "Tanımlı herhangi bir CARP arabirimi tespit edilememiştir." + +#: usr/local/www/carp_status.php:196 +msgid "You can configure CARP settings" +msgstr "CARP ayarlarını düzenleyebilirsiniz" + +#: usr/local/www/carp_status.php:202 usr/local/www/carp_status.php:195 +#: usr/local/www/carp_status.php:195 +msgid "pfSync nodes" +msgstr "pfSync uçları" + +#: usr/local/www/status_interfaces.php:81 +#: usr/local/www/status_interfaces.php:84 +#: usr/local/www/status_interfaces.php:84 +msgid "interface" +msgstr "arabirim" + +# Interface kısmında hattı bıraktırmak için söylenen yer çeviri ye müdahele etmeyin. +#: usr/local/www/status_interfaces.php:99 +#: usr/local/www/status_interfaces.php:117 +#: usr/local/www/status_interfaces.php:102 +#: usr/local/www/status_interfaces.php:120 +#: usr/local/www/status_interfaces.php:102 +#: usr/local/www/status_interfaces.php:120 +msgid "Release" +msgstr "Bırak" + +#: usr/local/www/status_interfaces.php:102 +#: usr/local/www/status_interfaces.php:120 +#: usr/local/www/status_interfaces.php:105 +#: usr/local/www/status_interfaces.php:123 +#: usr/local/www/status_interfaces.php:105 +#: usr/local/www/status_interfaces.php:123 +msgid "Renew" +msgstr "Yenile" + +#: usr/local/www/status_interfaces.php:117 +#: usr/local/www/status_interfaces.php:132 +#: usr/local/www/status_interfaces.php:147 +#: usr/local/www/status_interfaces.php:163 +#: usr/local/www/status_interfaces.php:135 +#: usr/local/www/status_interfaces.php:150 +#: usr/local/www/status_interfaces.php:165 +#: usr/local/www/status_interfaces.php:181 +#: usr/local/www/status_interfaces.php:138 +#: usr/local/www/status_interfaces.php:153 +#: usr/local/www/status_interfaces.php:168 +#: usr/local/www/status_interfaces.php:184 +#: usr/local/www/status_interfaces.php:138 +#: usr/local/www/status_interfaces.php:153 +#: usr/local/www/status_interfaces.php:168 +#: usr/local/www/status_interfaces.php:184 +msgid "Connect" +msgstr "Bağlan" + +#: usr/local/www/status_interfaces.php:171 +#: usr/local/www/status_interfaces.php:189 +#: usr/local/www/status_interfaces.php:192 +#: usr/local/www/status_interfaces.php:192 +msgid "Uptime " +msgstr "Çalışma Zamanı " + +#: usr/local/www/status_interfaces.php:200 +#: usr/local/www/status_interfaces.php:274 +#: usr/local/www/status_interfaces.php:277 +#: usr/local/www/status_interfaces.php:277 +msgid "Subnet mask IPv4" +msgstr "Altağ maskesi IPv4" + +#: usr/local/www/status_interfaces.php:207 +#: usr/local/www/status_interfaces.php:281 +#: usr/local/www/status_interfaces.php:284 +#: usr/local/www/status_interfaces.php:284 +msgid "Gateway IPv4" +msgstr "Ağ geçidi IPv4" + +#: usr/local/www/status_interfaces.php:224 +#: usr/local/www/status_interfaces.php:305 +#: usr/local/www/status_interfaces.php:308 +#: usr/local/www/status_interfaces.php:308 +msgid "Subnet mask IPv6" +msgstr "Altağ maskesi IPv6" + +#: usr/local/www/status_interfaces.php:239 +#: usr/local/www/status_interfaces.php:320 +#: usr/local/www/status_interfaces.php:323 +#: usr/local/www/status_interfaces.php:323 +msgid "ISP DNS servers" +msgstr "ISP DNS sunucular" + +#: usr/local/www/status_interfaces.php:251 +#: usr/local/www/status_interfaces.php:332 +#: usr/local/www/status_interfaces.php:335 +#: usr/local/www/status_interfaces.php:335 +msgid "Media" +msgstr "Ortam" + +#: usr/local/www/status_interfaces.php:272 +#: usr/local/www/status_interfaces.php:369 +#: usr/local/www/status_interfaces.php:372 +#: usr/local/www/status_interfaces.php:372 +#, fuzzy +msgid "BSSID" +msgstr "BSSID" + +#: usr/local/www/status_interfaces.php:279 +#: usr/local/www/diag_dump_states_sources.php:148 +#: usr/local/www/status_interfaces.php:376 +#: usr/local/www/status_interfaces.php:379 +#: usr/local/www/diag_dump_states_sources.php:147 +#: usr/local/www/diag_dump_states_sources.php:147 +#: usr/local/www/status_interfaces.php:379 +#: usr/local/www/diag_system_pftop.php:158 +msgid "Rate" +msgstr "Hız" + +#: usr/local/www/status_interfaces.php:286 +#: usr/local/www/status_interfaces.php:383 +#: usr/local/www/status_interfaces.php:386 +#: usr/local/www/status_interfaces.php:386 +#, fuzzy +msgid "RSSI" +msgstr "RSSI" + +#: usr/local/www/status_interfaces.php:293 +#: usr/local/www/status_interfaces.php:390 +#: usr/local/www/status_interfaces.php:393 +#: usr/local/www/status_interfaces.php:393 +msgid "In/out packets" +msgstr "gelen/giden paketler" + +#: usr/local/www/status_interfaces.php:302 +#: usr/local/www/status_interfaces.php:399 +#: usr/local/www/status_interfaces.php:402 +#: usr/local/www/status_interfaces.php:402 +msgid "In/out packets (pass)" +msgstr "gelen/giden paketler (izin ver)" + +#: usr/local/www/status_interfaces.php:311 +#: usr/local/www/status_interfaces.php:408 +#: usr/local/www/status_interfaces.php:411 +#: usr/local/www/status_interfaces.php:411 +msgid "In/out packets (block)" +msgstr "gelen/giden paketler (engelle)" + +#: usr/local/www/status_interfaces.php:321 +#: usr/local/www/status_interfaces.php:418 +#: usr/local/www/status_interfaces.php:421 +#: usr/local/www/status_interfaces.php:421 +msgid "In/out errors" +msgstr "girdi/çıktı hataları" + +#: usr/local/www/status_interfaces.php:329 +#: usr/local/www/status_interfaces.php:426 +#: usr/local/www/status_interfaces.php:429 +#: usr/local/www/status_interfaces.php:429 +msgid "Collisions" +msgstr "Çarpışmalar" + +#: usr/local/www/status_interfaces.php:338 +#: usr/local/www/status_interfaces.php:435 +#: usr/local/www/status_interfaces.php:438 +#: usr/local/www/status_interfaces.php:438 +#, php-format +msgid "Bridge (%s)" +msgstr "Köprü (%s)" + +#: usr/local/www/status_interfaces.php:360 +#: usr/local/www/status_interfaces.php:457 +#: usr/local/www/status_interfaces.php:460 +#: usr/local/www/status_interfaces.php:460 +msgid "Interrupts/Second" +msgstr "Kesme/Saniye" + +#: usr/local/www/status_interfaces.php:363 +#: usr/local/www/status_interfaces.php:460 +#: usr/local/www/status_interfaces.php:463 +#: usr/local/www/status_interfaces.php:463 +msgid "total" +msgstr "toplam" + +#: usr/local/www/status_interfaces.php:376 +#: usr/local/www/status_interfaces.php:473 +#: usr/local/www/status_interfaces.php:476 +#: usr/local/www/status_interfaces.php:476 +#, php-format +msgid "" +"Using dial-on-demand will bring the connection up again if any packet " +"triggers it. To substantiate this point: disconnecting manually will %snot%s " +"prevent dial-on-demand from making connections to the outside! Don't use " +"dial-on-demand if you want to make sure that the line is kept disconnected." +msgstr "" +"Gerektiğinde arama özelliği eğer herhangi bir paket tarafından tetiklenirse " +"bağlantıyı tekrar kurar. Diğer bir deyişle, bağlantıyı kesmek bağlantının " +"tekrar kurulmayacağı anlamına %sgelmez%s . Bağlantıyı kestiğinizde tekrar " +"bağlanmamasını istiyorsanız gerektiğinde arama özelliğini kullanmayın." + +#: usr/local/www/exec.php:91 usr/local/www/exec.php:93 +#: usr/local/www/exec.php:93 +msgid "Execute command" +msgstr "Komut çalıştır" + +#: usr/local/www/exec.php:153 usr/local/www/exec.php:155 +#: usr/local/www/exec.php:155 +msgid "Nothing to recall" +msgstr "Çağırılacak herhangi bir bilgi yok" + +#: usr/local/www/exec.php:222 usr/local/www/exec.php:224 +#: usr/local/www/exec.php:224 +msgid "Note: this function is unsupported. Use it on your own risk" +msgstr "Not: Bu özellik desteklenmemektedir. Risk aldığınızı unutmayın" + +#: usr/local/www/exec.php:253 usr/local/www/exec.php:255 +#: usr/local/www/exec.php:255 +msgid "Execute Shell command" +msgstr "Kabuk komutu çalıştır" + +#: usr/local/www/exec.php:256 usr/local/www/exec.php:309 +#: usr/local/www/exec.php:258 usr/local/www/exec.php:311 +#: usr/local/www/exec.php:258 usr/local/www/exec.php:311 +msgid "Command" +msgstr "Komut" + +#: usr/local/www/exec.php:264 usr/local/www/exec.php:315 +#: usr/local/www/exec.php:266 usr/local/www/exec.php:317 +#: usr/local/www/exec.php:266 usr/local/www/exec.php:317 +msgid "Execute" +msgstr "Çalıştır" + +#: usr/local/www/exec.php:266 usr/local/www/status_upnp.php:77 +#: usr/local/www/exec.php:268 usr/local/www/status_upnp.php:78 +#: usr/local/www/exec.php:268 usr/local/www/status_upnp.php:78 +msgid "Clear" +msgstr "Temizle" + +#: usr/local/www/exec.php:276 usr/local/www/exec.php:278 +#: usr/local/www/exec.php:278 +msgid "File to download" +msgstr "İndirilecek dosya" + +#: usr/local/www/exec.php:293 usr/local/www/exec.php:295 +#: usr/local/www/exec.php:295 +msgid "File to upload" +msgstr "Yüklenecek dosya" + +#: usr/local/www/exec.php:306 usr/local/www/exec.php:308 +#: usr/local/www/exec.php:308 +msgid "PHP Execute" +msgstr "PHP Çalıştır" + +#: usr/local/www/exec.php:317 usr/local/www/exec.php:319 +#: usr/local/www/exec.php:319 +msgid "Example" +msgstr "Örnek" + +#: usr/local/www/exec_raw.php:47 +msgid "Nothing specified. Cannot continue." +msgstr "Herhangi bir tanım yapılmadı. Devam edilemiyor." + +#: usr/local/www/fbegin.inc:88 usr/local/www/fbegin.inc:105 +#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:106 +msgid "Packages" +msgstr "Paketler" + +#: usr/local/www/fbegin.inc:89 usr/local/www/fbegin.inc:106 +#: usr/local/www/fbegin.inc:115 usr/local/www/fbegin.inc:107 +msgid "Setup Wizard" +msgstr "Kurulum Sihirbazı" + +#: usr/local/www/fbegin.inc:90 usr/local/www/diag_logs_routing.php:54 +#: usr/local/www/diag_logs_routing.php:84 usr/local/www/fbegin.inc:107 +#: usr/local/www/diag_logs_resolver.php:98 usr/local/www/diag_logs.php:97 +#: usr/local/www/diag_logs_wireless.php:86 +#: usr/local/www/diag_logs_gateways.php:98 +#: usr/local/www/diag_logs_routing.php:85 usr/local/www/fbegin.inc:116 +#: usr/local/www/diag_logs_resolver.php:99 +#: usr/local/www/diag_logs_wireless.php:87 +#: usr/local/www/diag_logs_gateways.php:99 +#: usr/local/www/diag_logs_routing.php:54 +#: usr/local/www/diag_logs_routing.php:85 usr/local/www/diag_logs.php:97 +#: usr/local/www/diag_logs_gateways.php:99 usr/local/www/fbegin.inc:108 +#: usr/local/www/diag_logs_wireless.php:87 +#: usr/local/www/diag_logs_resolver.php:99 +msgid "Routing" +msgstr "Yönlendirmeler" + +#: usr/local/www/fbegin.inc:91 usr/local/www/fbegin.inc:108 +#: usr/local/www/fbegin.inc:117 usr/local/www/fbegin.inc:109 +msgid "Cert Manager" +msgstr "Sertifika Yöneticisi" + +#: usr/local/www/fbegin.inc:123 usr/local/www/services_dhcpv6_relay.php:101 +#: usr/local/www/fbegin.inc:140 usr/local/www/fbegin.inc:149 +#: usr/local/www/services_dhcpv6_relay.php:101 usr/local/www/fbegin.inc:141 +msgid "DHCPv6 Relay" +msgstr "DHCPv6 Aktarma" + +#: usr/local/www/fbegin.inc:126 usr/local/www/fbegin.inc:143 +#: usr/local/www/services_dhcpv6.php:581 +#: usr/local/www/services_router_advertisements.php:260 +#: usr/local/www/services_dhcpv6.php:502 usr/local/www/services_dhcpv6.php:512 +#: usr/local/www/services_router_advertisements.php:260 +#: usr/local/www/services_dhcpv6.php:513 usr/local/www/services_dhcpv6.php:523 +msgid "DHCPv6 Server" +msgstr "DHCPv6 Sunucu" + +#: usr/local/www/fbegin.inc:129 usr/local/www/status_services.php:316 +#: usr/local/www/widgets/widgets/services_status.widget.php:121 +#: usr/local/www/fbegin.inc:146 etc/inc/service-utils.inc:299 +#: usr/local/www/fbegin.inc:155 usr/local/www/fbegin.inc:147 +#: etc/inc/service-utils.inc:298 +msgid "IGMP proxy" +msgstr "IGMP vekil" + +#: usr/local/www/fbegin.inc:131 usr/local/www/fbegin.inc:149 +#, fuzzy +msgid "OLSR" +msgstr "OLSR" + +#: usr/local/www/fbegin.inc:132 usr/local/www/vpn_pppoe_edit.php:234 +#: usr/local/www/fbegin.inc:150 usr/local/www/fbegin.inc:158 +#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/fbegin.inc:150 +msgid "PPPoE Server" +msgstr "PPPoE Sunucu" + +#: usr/local/www/fbegin.inc:133 usr/local/www/fbegin.inc:151 +#: usr/local/www/fbegin.inc:159 +#, fuzzy +msgid "RIP" +msgstr "RIP" + +#: usr/local/www/fbegin.inc:139 usr/local/www/fbegin.inc:175 +#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:193 +#: usr/local/www/fbegin.inc:165 usr/local/www/fbegin.inc:201 +#: usr/local/www/fbegin.inc:156 usr/local/www/fbegin.inc:192 +#, fuzzy +msgid "UPnP & NAT-PMP" +msgstr "UPnP & NAT-PMP" + +#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:174 +#: usr/local/www/fbegin.inc:182 usr/local/www/fbegin.inc:173 +msgid "CARP (failover)" +msgstr "CARP (yük aktarma)" + +#: usr/local/www/fbegin.inc:158 usr/local/www/fbegin.inc:175 +#: usr/local/www/fbegin.inc:183 usr/local/www/fbegin.inc:174 +msgid "Dashboard" +msgstr "Anasayfa" + +#: usr/local/www/fbegin.inc:160 usr/local/www/fbegin.inc:177 +#: usr/local/www/fbegin.inc:185 usr/local/www/fbegin.inc:176 +msgid "DHCP Leases" +msgstr "DHCP Kiraları" + +#: usr/local/www/fbegin.inc:161 usr/local/www/fbegin.inc:178 +#: usr/local/www/fbegin.inc:186 usr/local/www/fbegin.inc:177 +msgid "DHCPv6 Leases" +msgstr "DHCPv6 Kiraları" + +#: usr/local/www/fbegin.inc:162 usr/local/www/fbegin.inc:179 +#: usr/local/www/fbegin.inc:187 usr/local/www/fbegin.inc:178 +msgid "Filter Reload" +msgstr "Filitre Yeniden Yükleme" + +#: usr/local/www/fbegin.inc:168 usr/local/www/fbegin.inc:186 +#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:185 +msgid "Package Logs" +msgstr "Paket Günlükleri" + +#: usr/local/www/fbegin.inc:169 usr/local/www/status_queues.php:98 +#: usr/local/www/status_rrd_graph.php:338 +#: usr/local/www/status_rrd_graph_settings.php:57 +#: usr/local/www/status_rrd_graph_settings.php:137 +#: usr/local/www/fbegin.inc:187 +#: usr/local/www/status_rrd_graph_settings.php:138 +#: usr/local/www/status_queues.php:101 usr/local/www/status_rrd_graph.php:386 +#: usr/local/www/fbegin.inc:195 usr/local/www/status_rrd_graph.php:411 +#: usr/local/www/status_rrd_graph_settings.php:57 +#: usr/local/www/status_rrd_graph_settings.php:138 +#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:186 +msgid "Queues" +msgstr "Kuyruklar" + +#: usr/local/www/fbegin.inc:170 usr/local/www/status_rrd_graph.php:224 +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_settings.php:113 +#: usr/local/www/status_rrd_graph_settings.php:171 +#: usr/local/www/fbegin.inc:188 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/status_rrd_graph_settings.php:172 +#: usr/local/www/status_rrd_graph.php:244 usr/local/www/fbegin.inc:196 +#: usr/local/www/status_rrd_graph_img.php:43 +#: usr/local/www/status_rrd_graph.php:248 +#: usr/local/www/status_rrd_graph_settings.php:114 +#: usr/local/www/status_rrd_graph_settings.php:172 +#: usr/local/www/fbegin.inc:187 +msgid "RRD Graphs" +msgstr "RRD Grafikleri" + +#: usr/local/www/fbegin.inc:172 usr/local/www/fbegin.inc:190 +#: usr/local/www/fbegin.inc:198 usr/local/www/fbegin.inc:189 +msgid "System Logs" +msgstr "Sistem Kayıtları" + +#: usr/local/www/fbegin.inc:188 +msgid "ARP Tables" +msgstr "ARP Tabloları" + +#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:209 +#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:208 +msgid "Command Prompt" +msgstr "Hızlı Komut Ekranı" + +#: usr/local/www/fbegin.inc:193 usr/local/www/fbegin.inc:211 +#: usr/local/www/fbegin.inc:219 usr/local/www/fbegin.inc:210 +msgid "Edit File" +msgstr "Dosya Düzenle" + +#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:212 +#: usr/local/www/fbegin.inc:220 usr/local/www/fbegin.inc:211 +msgid "Factory Defaults" +msgstr "Fabrika Ayarları" + +#: usr/local/www/fbegin.inc:195 usr/local/www/fbegin.inc:213 +#: usr/local/www/fbegin.inc:221 usr/local/www/fbegin.inc:212 +msgid "Halt System" +msgstr "Sistemi Kapat" + +#: usr/local/www/fbegin.inc:196 usr/local/www/fbegin.inc:214 +#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:213 +msgid "Limiter Info" +msgstr "Limitleyici Bilgisi" + +#: usr/local/www/fbegin.inc:197 usr/local/www/diag_ndp.php:103 +#: usr/local/www/fbegin.inc:215 usr/local/www/fbegin.inc:223 +#: usr/local/www/diag_ndp.php:103 usr/local/www/fbegin.inc:214 +msgid "NDP Table" +msgstr "NDB Tablosu" + +#: usr/local/www/fbegin.inc:201 usr/local/www/fbegin.inc:219 +#: usr/local/www/fbegin.inc:227 usr/local/www/fbegin.inc:219 +msgid "pfInfo" +msgstr "pfBilgi" + +#: usr/local/www/fbegin.inc:202 usr/local/www/fbegin.inc:220 +#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:220 +#, fuzzy +msgid "pfTop" +msgstr "pfTop" + +#: usr/local/www/fbegin.inc:203 usr/local/www/fbegin.inc:221 +#: usr/local/www/fbegin.inc:229 usr/local/www/fbegin.inc:221 +msgid "Reboot" +msgstr "Yeniden Başlat" + +#: usr/local/www/fbegin.inc:205 usr/local/www/fbegin.inc:223 +#: usr/local/www/widgets/widgets/smart_status.widget.php:38 +#: usr/local/www/fbegin.inc:231 usr/local/www/fbegin.inc:223 +#: usr/local/www/widgets/widgets/smart_status.widget.php:38 +msgid "SMART Status" +msgstr "SMART Durumu" + +#: usr/local/www/fbegin.inc:207 usr/local/www/fbegin.inc:225 +#: usr/local/www/fbegin.inc:234 usr/local/www/fbegin.inc:226 +msgid "States Summary" +msgstr "Durum Özeti" + +#: usr/local/www/fbegin.inc:208 usr/local/www/fbegin.inc:226 +#: usr/local/www/fbegin.inc:235 usr/local/www/fbegin.inc:227 +msgid "System Activity" +msgstr "Sistem Etkinliği" + +#: usr/local/www/fbegin.inc:216 usr/local/www/fbegin.inc:233 +#: usr/local/www/fbegin.inc:242 usr/local/www/fbegin.inc:234 +msgid "Restart HTTPD" +msgstr "HTTPD Yeniden Başlat" + +#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:240 +#: usr/local/www/fbegin.inc:249 usr/local/www/fbegin.inc:241 +msgid "About this Page" +msgstr "Sayfa Hakkında" + +#: usr/local/www/fbegin.inc:224 usr/local/www/fbegin.inc:242 +#: usr/local/www/fbegin.inc:251 usr/local/www/fbegin.inc:243 +msgid "Bug Database" +msgstr "Hata Veritabanı" + +#: usr/local/www/fbegin.inc:225 usr/local/www/fbegin.inc:243 +#: usr/local/www/fbegin.inc:252 usr/local/www/fbegin.inc:244 +msgid "User Forum" +msgstr "Kullanıcı Forum" + +#: usr/local/www/fbegin.inc:226 usr/local/www/fbegin.inc:244 +#: usr/local/www/fbegin.inc:253 usr/local/www/fbegin.inc:245 +msgid "Documentation" +msgstr "Dökümantasyon" + +#: usr/local/www/fbegin.inc:227 usr/local/www/fbegin.inc:245 +#: usr/local/www/fbegin.inc:254 usr/local/www/fbegin.inc:246 +msgid "Developers Wiki" +msgstr "Wiki Geliştiricileri" + +#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:246 +#: usr/local/www/fbegin.inc:255 usr/local/www/fbegin.inc:247 +msgid "Paid Support" +msgstr "Ödemeli Destek" + +#: usr/local/www/fbegin.inc:229 usr/local/www/fbegin.inc:247 +#: usr/local/www/fbegin.inc:256 usr/local/www/fbegin.inc:248 +msgid "pfSense Book" +msgstr "pfSense Kitabı" + +#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:248 +#: usr/local/www/fbegin.inc:257 usr/local/www/fbegin.inc:249 +msgid "Search portal" +msgstr "Arama portalı" + +#: usr/local/www/fbegin.inc:231 usr/local/www/fbegin.inc:249 +#: usr/local/www/fbegin.inc:258 usr/local/www/fbegin.inc:250 +msgid "FreeBSD Handbook" +msgstr "FreeBSD El Kitapçığı" + +#: usr/local/www/fbegin.inc:376 usr/local/www/fbegin.inc:394 +#: usr/local/www/fbegin.inc:340 usr/local/www/fbegin.inc:332 +msgid "Help" +msgstr "Yardım" + +#: usr/local/www/fbegin.inc:425 usr/local/www/fbegin.inc:443 +msgid "Status of items on this page." +msgstr "Bu sayfadaki maddelerin durumu." + +#: usr/local/www/fbegin.inc:428 usr/local/www/fbegin.inc:446 +msgid "Log entries for items on this page." +msgstr "Bu sayfadaki maddelerin kayıt girdileri." + +#: usr/local/www/fbegin.inc:431 usr/local/www/fbegin.inc:449 +msgid "Help for items on this page." +msgstr "Bu sayfadaki maddelerin yardımı." + +#: usr/local/www/fbegin.inc:441 usr/local/www/fbegin.inc:459 +#: usr/local/www/fbegin.inc:429 usr/local/www/fbegin.inc:421 +msgid "" +"Packages are currently being reinstalled in the background.

    Do not make " +"changes in the GUI until this is complete." +msgstr "" +"Åžu anda paketler arkaplanda yeniden kuruluyor.

    Bu işlem tamamlanana kadar " +"arayüzde değişiklik yapmayın." + +#: usr/local/www/status_queues.php:98 usr/local/www/status_queues.php:101 +#: usr/local/www/status_queues.php:109 +msgid "Traffic shaper" +msgstr "Trafik şekillendirici" + +#: usr/local/www/status_queues.php:107 usr/local/www/status_queues.php:110 +#: usr/local/www/status_queues.php:111 usr/local/www/status_queues.php:117 +msgid "Traffic shaping is not configured." +msgstr "Trafik şekillendirme yapılandırılmadı." + +#: usr/local/www/status_queues.php:136 usr/local/www/status_queues.php:143 +#: usr/local/www/status_queues.php:144 usr/local/www/status_queues.php:149 +msgid "Statistics" +msgstr "İstatistikler" + +#: usr/local/www/status_queues.php:158 usr/local/www/status_queues.php:165 +#: usr/local/www/status_queues.php:166 usr/local/www/status_queues.php:223 +msgid "Loading" +msgstr "Yükleniyor" + +#: usr/local/www/status_queues.php:173 usr/local/www/status_queues.php:181 +#: usr/local/www/status_queues.php:182 usr/local/www/status_queues.php:164 +msgid "Queue graphs take 5 seconds to sample data" +msgstr "Kuyruk grafiklerinin veri örneklemesi 5 saniye kadar sürer." + +#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182 +#: usr/local/www/status_queues.php:183 usr/local/www/status_queues.php:165 +msgid "You can configure the Traffic Shaper" +msgstr "Trafik şekillendiriciyi yapılandır" + +#: usr/local/www/status_rrd_graph.php:211 +#: usr/local/www/status_rrd_graph_settings.php:59 +#: usr/local/www/status_rrd_graph.php:174 +#: usr/local/www/status_rrd_graph.php:179 +#: usr/local/www/status_rrd_graph_settings.php:59 +msgid "Inverse" +msgstr "Ters" + +#: usr/local/www/status_rrd_graph.php:212 +#: usr/local/www/status_rrd_graph_settings.php:60 +#: usr/local/www/status_rrd_graph.php:175 +#: usr/local/www/status_rrd_graph.php:180 +#: usr/local/www/status_rrd_graph_settings.php:60 +msgid "Absolute" +msgstr "Mutlak" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:61 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph_settings.php:61 +msgid "Absolute Timespans" +msgstr "Mutlak Müddet" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:62 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph_settings.php:62 +msgid "Current Period" +msgstr "Güncel Aralık" + +#: usr/local/www/status_rrd_graph.php:214 +#: usr/local/www/status_rrd_graph_settings.php:63 +#: usr/local/www/status_rrd_graph.php:234 +#: usr/local/www/status_rrd_graph.php:238 +#: usr/local/www/status_rrd_graph_settings.php:63 +msgid "Previous Period" +msgstr "Önceki Aralık" + +#: usr/local/www/status_rrd_graph.php:331 +#: usr/local/www/status_rrd_graph_settings.php:54 +#: usr/local/www/status_rrd_graph_settings.php:130 +#: usr/local/www/status_rrd_graph_settings.php:131 +#: usr/local/www/status_rrd_graph.php:379 +#: usr/local/www/status_rrd_graph.php:404 +#: usr/local/www/status_rrd_graph_settings.php:54 +#: usr/local/www/status_rrd_graph_settings.php:131 +msgid "Traffic" +msgstr "Trafik" + +#: usr/local/www/status_rrd_graph.php:333 +#: usr/local/www/status_rrd_graph_settings.php:55 +#: usr/local/www/status_rrd_graph_settings.php:132 +#: usr/local/www/status_rrd_graph_settings.php:133 +#: usr/local/www/status_rrd_graph.php:381 +#: usr/local/www/status_rrd_graph.php:406 +#: usr/local/www/status_rrd_graph_settings.php:55 +#: usr/local/www/status_rrd_graph_settings.php:133 +msgid "Packets" +msgstr "Paketler" + +#: usr/local/www/status_rrd_graph.php:335 +#: usr/local/www/status_rrd_graph_settings.php:56 +#: usr/local/www/status_rrd_graph_settings.php:134 +#: usr/local/www/status_rrd_graph_settings.php:135 +#: usr/local/www/status_rrd_graph.php:383 +#: usr/local/www/status_rrd_graph.php:408 +#: usr/local/www/status_rrd_graph_settings.php:56 +#: usr/local/www/status_rrd_graph_settings.php:135 +msgid "Quality" +msgstr "Kalite" + +#: usr/local/www/status_rrd_graph.php:340 +#: usr/local/www/status_rrd_graph_settings.php:139 +#: usr/local/www/status_rrd_graph_settings.php:140 +#: usr/local/www/status_rrd_graph.php:388 +#: usr/local/www/status_rrd_graph.php:413 +#: usr/local/www/status_rrd_graph_settings.php:140 +msgid "QueueDrops" +msgstr "Kuyruktan Düşme" + +#: usr/local/www/status_rrd_graph.php:348 +#: usr/local/www/status_rrd_graph_settings.php:147 +#: usr/local/www/status_rrd_graph_settings.php:148 +#: usr/local/www/status_rrd_graph.php:396 +#: usr/local/www/status_rrd_graph.php:421 +#: usr/local/www/status_rrd_graph_settings.php:148 +msgid "Cellular" +msgstr "Hücresel" + +#: usr/local/www/status_rrd_graph.php:371 +#: usr/local/www/status_rrd_graph.php:419 +#: usr/local/www/status_rrd_graph.php:451 +msgid "" +"Note: Change of color and/or style may not take effect until the next refresh" +msgstr "" +"Not: Renk yada stil değişimi bir sonraki yenilemeye kadar etkin olmayabilir." + +#: usr/local/www/status_rrd_graph.php:375 +#: usr/local/www/status_rrd_graph.php:423 +#: usr/local/www/status_rrd_graph.php:455 +msgid "Graphs:" +msgstr "Grafikler:" + +#: usr/local/www/status_rrd_graph.php:432 +#: usr/local/www/status_rrd_graph.php:480 +#: usr/local/www/status_rrd_graph.php:515 +msgid "Style:" +msgstr "Stil:" + +#: usr/local/www/status_rrd_graph.php:446 +#: usr/local/www/status_rrd_graph.php:494 +#: usr/local/www/status_rrd_graph.php:529 +msgid "Period:" +msgstr "Aralık:" + +#: usr/local/www/status_rrd_graph.php:461 +#: usr/local/www/status_rrd_graph.php:513 +#: usr/local/www/status_rrd_graph.php:548 +msgid "Start:" +msgstr "Başlangıç:" + +#: usr/local/www/status_rrd_graph.php:463 +#: usr/local/www/status_rrd_graph.php:515 +#: usr/local/www/status_rrd_graph.php:550 +msgid "End:" +msgstr "Bitiş:" + +#: usr/local/www/status_rrd_graph.php:465 +#: usr/local/www/status_rrd_graph.php:517 +#: usr/local/www/status_rrd_graph.php:552 +msgid "Go" +msgstr "Oluştur" + +#: usr/local/www/status_rrd_graph_img.php:41 +#: usr/local/www/status_rrd_graph_img.php:43 +msgid "Image viewer" +msgstr "Resim görüntüleyici" + +#: usr/local/www/status_rrd_graph_img.php:216 +#: usr/local/www/status_rrd_graph_img.php:221 +#, php-format +msgid "rrdcolors.inc.php for theme %s does not exist, using defaults!" +msgstr "" +"%s temasının rrdcolors.inc.php dosyası olmadığından öntanımlı değerler " +"kullanılıyor!" + +#: usr/local/www/status_rrd_graph_img.php:1095 +#: usr/local/www/status_rrd_graph_img.php:1088 +#: usr/local/www/status_rrd_graph_img.php:1093 +#, php-format +msgid "Sorry we do not have data to graph for %s" +msgstr "%s için grafik oluşturmaya yetecek kadar veri yok" + +#: usr/local/www/status_rrd_graph_img.php:1115 +#: usr/local/www/status_rrd_graph_img.php:1108 +#: usr/local/www/status_rrd_graph_img.php:1113 +#, php-format +msgid "Failed to create graph with error code %1$s, the error is: %2$s" +msgstr "Grafik oluşturulamadı. Hata kodu: %1$s. Hata mesajı: %2$s" + +#: usr/local/www/status_rrd_graph_img.php:1117 +#: usr/local/www/status_rrd_graph_img.php:1124 +#: usr/local/www/status_rrd_graph_img.php:1110 +#: usr/local/www/status_rrd_graph_img.php:1115 +#: usr/local/www/status_rrd_graph_img.php:1122 +#, php-format +msgid "failed to create graph from %s%s, removing database" +msgstr "%s%s grafiği oluşturulamadı, veritabanı kaldırılıyor" + +#: usr/local/www/status_rrd_graph_settings.php:174 +#: usr/local/www/status_rrd_graph_settings.php:175 +#: usr/local/www/status_rrd_graph_settings.php:175 +msgid "Enables the RRD graphing backend." +msgstr "RRD grafiği çıkarma servisini etkinleştirir." + +#: usr/local/www/status_rrd_graph_settings.php:178 +#: usr/local/www/status_rrd_graph_settings.php:179 +#: usr/local/www/status_rrd_graph_settings.php:179 +msgid "Default category" +msgstr "Varsayılan kategori" + +#: usr/local/www/status_rrd_graph_settings.php:189 +#: usr/local/www/status_rrd_graph_settings.php:190 +#: usr/local/www/status_rrd_graph_settings.php:190 +msgid "This selects default category." +msgstr "Varsayılan kategoriyi seçer." + +#: usr/local/www/status_rrd_graph_settings.php:193 +#: usr/local/www/status_rrd_graph_settings.php:194 +#: usr/local/www/status_rrd_graph_settings.php:194 +msgid "Default style" +msgstr "Varsayılan stil" + +#: usr/local/www/status_rrd_graph_settings.php:204 +#: usr/local/www/status_rrd_graph_settings.php:205 +#: usr/local/www/status_rrd_graph_settings.php:205 +msgid "This selects the default style." +msgstr "Varsayılan stili seçer." + +#: usr/local/www/status_rrd_graph_settings.php:208 +#: usr/local/www/status_rrd_graph_settings.php:209 +#: usr/local/www/status_rrd_graph_settings.php:209 +msgid "Default period" +msgstr "Varsayılan zaman aralığı" + +#: usr/local/www/status_rrd_graph_settings.php:219 +#: usr/local/www/status_rrd_graph_settings.php:220 +#: usr/local/www/status_rrd_graph_settings.php:220 +msgid "This selects the default period." +msgstr "Varsayılan zaman aralığını seçer." + +#: usr/local/www/status_rrd_graph_settings.php:231 +#: usr/local/www/status_rrd_graph_settings.php:232 +#: usr/local/www/status_rrd_graph_settings.php:232 +msgid "Reset RRD Data" +msgstr "RRD verisini sıfırla" + +#: usr/local/www/status_rrd_graph_settings.php:231 +#: usr/local/www/status_rrd_graph_settings.php:232 +#: usr/local/www/status_rrd_graph_settings.php:232 +msgid "" +"Do you really want to reset the RRD graphs? This will erase all graph data." +msgstr "" +"RRD grafiklerini silmek istediğinize emin misiniz? Tüm grafik verisi " +"silinir." + +#: usr/local/www/status_rrd_graph_settings.php:237 +#: usr/local/www/status_rrd_graph_settings.php:238 +#: usr/local/www/status_rrd_graph_settings.php:238 +msgid "" +"Graphs will not be allowed to be recreated within a 1 minute interval, " +"please take this into account after changing the style." +msgstr "" +"Bir dakikalık aralıklarla grafik yeniden oluşturulamaz, stili seçtikten " +"sonra bir dakika boyunca tekrar değiştiremeyeceğinizi unutmayınız." + +#: usr/local/www/status_services.php:60 +#: usr/local/www/widgets/widgets/services_status.widget.php:54 +#: etc/inc/service-utils.inc:387 etc/inc/service-utils.inc:386 +msgid "Not available." +msgstr "Kullanılamaz." + +#: usr/local/www/status_services.php:112 usr/local/www/status_services.php:100 +#: usr/local/www/status_services.php:98 +#, php-format +msgid "%s has been restarted." +msgstr "%s tekrar başlatıldı." + +#: usr/local/www/status_services.php:159 usr/local/www/status_services.php:151 +#: usr/local/www/status_services.php:149 +#, php-format +msgid "%s has been started." +msgstr "%s başlatıldı." + +#: usr/local/www/status_services.php:218 usr/local/www/status_services.php:214 +#: usr/local/www/status_services.php:212 +#, php-format +msgid "%s has been stopped." +msgstr "%s durduruldu." + +#: usr/local/www/status_services.php:269 +#: usr/local/www/widgets/widgets/services_status.widget.php:74 +#: etc/inc/service-utils.inc:247 etc/inc/service-utils.inc:246 +msgid "NTP clock sync" +msgstr "NTP saat senkronizasyonu" + +#: usr/local/www/status_services.php:302 +#: usr/local/www/widgets/widgets/services_status.widget.php:107 +#: etc/inc/service-utils.inc:285 etc/inc/service-utils.inc:284 +msgid "DHCP Service" +msgstr "DHCP Servisi" + +#: usr/local/www/status_services.php:309 +#: usr/local/www/widgets/widgets/services_status.widget.php:114 +#: etc/inc/service-utils.inc:292 etc/inc/service-utils.inc:291 +msgid "SNMP Service" +msgstr "SNMP Servisi" + +#: usr/local/www/status_services.php:323 +#: usr/local/www/widgets/widgets/services_status.widget.php:128 +#: etc/inc/service-utils.inc:306 etc/inc/service-utils.inc:305 +msgid "UPnP Service" +msgstr "UPnP Servisi" + +#: usr/local/www/status_services.php:353 +#: usr/local/www/widgets/widgets/services_status.widget.php:158 +#: etc/inc/service-utils.inc:343 etc/inc/service-utils.inc:342 +msgid "Server load balancing daemon" +msgstr "Sunucu yük dengeleyici servisi" + +#: usr/local/www/status_services.php:380 +#: usr/local/www/widgets/widgets/services_status.widget.php:210 +#: etc/inc/service-utils.inc:411 etc/inc/service-utils.inc:410 +msgid "Running" +msgstr "Çalışıyor" + +#: usr/local/www/status_services.php:383 +#: usr/local/www/widgets/widgets/services_status.widget.php:213 +#: etc/inc/service-utils.inc:420 etc/inc/service-utils.inc:419 +msgid "Stopped" +msgstr "Durdu" + +#: usr/local/www/status_services.php:392 +#: usr/local/www/widgets/widgets/services_status.widget.php:222 +msgid "Restart Service" +msgstr "Servisi Tekrar Başlat" + +#: usr/local/www/status_services.php:398 +#: usr/local/www/widgets/widgets/services_status.widget.php:228 +msgid "Stop Service" +msgstr "Servisi Durdur" + +#: usr/local/www/status_services.php:407 +#: usr/local/www/widgets/widgets/services_status.widget.php:237 +msgid "Start Service" +msgstr "Servisi Başlat" + +#: usr/local/www/status_services.php:412 +#: usr/local/www/widgets/widgets/services_status.widget.php:242 +#: usr/local/www/status_services.php:271 +#: usr/local/www/widgets/widgets/services_status.widget.php:83 +#: usr/local/www/status_services.php:269 +#: usr/local/www/widgets/widgets/services_status.widget.php:83 +msgid "No services found" +msgstr "Herhangi bir servis bulunamadı" + +#: usr/local/www/status_upnp.php:48 usr/local/www/status_upnp.php:48 +msgid "Rules have been cleared and the daemon restarted" +msgstr "Kurallar temizlendi ve servis tekrar başlatıldı" + +#: usr/local/www/status_upnp.php:58 usr/local/www/status_upnp.php:58 +msgid "UPnP & NAT-PMP Status" +msgstr "UPnP & NAT-PMP Durumu" + +#: usr/local/www/status_upnp.php:67 usr/local/www/status_upnp.php:68 +#: usr/local/www/status_upnp.php:68 +msgid "UPnP is currently disabled." +msgstr "UPnP devre dışı." + +#: usr/local/www/status_upnp.php:77 usr/local/www/status_upnp.php:78 +#: usr/local/www/status_upnp.php:78 +msgid "all currently connected sessions" +msgstr "şu anda bağlı olan tüm oturumlar" + +#: usr/local/www/diag_arp.php:261 usr/local/www/fbegin.inc:206 +#: usr/local/www/fbegin.inc:214 usr/local/www/diag_arp.php:261 +#: usr/local/www/fbegin.inc:205 +msgid "ARP Table" +msgstr "ARP Tablosu" + +#: usr/local/www/diag_arp.php:271 usr/local/www/diag_ndp.php:113 +#: usr/local/www/diag_ndp.php:113 usr/local/www/diag_arp.php:271 +msgid "Loading, please wait..." +msgstr "Yükleniyor, lütfen bekleyiniz..." + +#: usr/local/www/services_dyndns_edit.php:87 +#: usr/local/www/services_dyndns_edit.php:158 +#: usr/local/www/services_dyndns_edit.php:92 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/services_dyndns_edit.php:92 +#: usr/local/www/services_dyndns_edit.php:220 +msgid "Service type" +msgstr "Servis türü" + +#: usr/local/www/services_dyndns_edit.php:92 +#: usr/local/www/services_dyndns_edit.php:108 +#: usr/local/www/services_dyndns_edit.php:108 +msgid "The MX contains invalid characters." +msgstr "MX geçersiz karaterler içeriyor." + +#: usr/local/www/services_dyndns_edit.php:133 +#: usr/local/www/services_dyndns_edit.php:147 +#: usr/local/www/services_dyndns_edit.php:156 +#: usr/local/www/services_dyndns_edit.php:205 +#: usr/local/www/services_dyndns_edit.php:160 +#: usr/local/www/services_dyndns_edit.php:209 +msgid "Dynamic DNS client" +msgstr "Dinamik DNS istemcisi" + +#: usr/local/www/services_dyndns_edit.php:154 +#: usr/local/www/services_rfc2136_edit.php:188 +#: usr/local/www/services_dyndns_edit.php:212 +#: usr/local/www/services_dyndns_edit.php:216 +#: usr/local/www/services_rfc2136_edit.php:188 +msgid "yes" +msgstr "evet" + +#: usr/local/www/services_dyndns_edit.php:172 +#: usr/local/www/services_rfc2136_edit.php:134 +#: usr/local/www/services_dyndns_edit.php:230 +#: usr/local/www/services_dyndns_edit.php:234 +#: usr/local/www/services_rfc2136_edit.php:134 +msgid "Interface to monitor" +msgstr "İzlenecek arabirim" + +#: usr/local/www/services_dyndns_edit.php:191 +#: usr/local/www/services_dyndns_edit.php:274 +#: usr/local/www/services_dyndns_edit.php:278 +msgid "Enter the complete host/domain name. example: myhost.dyndns.org" +msgstr "Tam host/alanadı giriniz. Örn: pfsense.dyndns.org" + +#: usr/local/www/services_dyndns_edit.php:192 +#: usr/local/www/services_dyndns_edit.php:275 +#: usr/local/www/services_dyndns_edit.php:279 +msgid "For he.net tunnelbroker, enter your tunnel ID" +msgstr "he.net tünelkırıcı için, tünel kimliğinizi giriniz" + +#: usr/local/www/services_dyndns_edit.php:197 +#: usr/local/www/services_dyndns_edit.php:280 +#: usr/local/www/services_dyndns_edit.php:284 +#, fuzzy +msgid "MX" +msgstr "MX" + +#: usr/local/www/services_dyndns_edit.php:201 +#: usr/local/www/services_dyndns_edit.php:284 +#: usr/local/www/services_dyndns_edit.php:288 +msgid "" +"Note: With DynDNS service you can only use a hostname, not an IP address." +msgstr "" +"Not: DynDNS servisi ile sadece host adı kullanılabilir, IP adresi " +"kullanılamaz." + +#: usr/local/www/services_dyndns_edit.php:203 +#: usr/local/www/services_dyndns_edit.php:286 +#: usr/local/www/services_dyndns_edit.php:290 +msgid "" +"Set this option only if you need a special MX record. Not all services " +"support this." +msgstr "" +"Bu seçeneği sadece özel MX kaydı oluşturulacak ise seçiniz. Bu özelliği tüm " +"servisler desteklemez, unutmayınız." + +#: usr/local/www/services_dyndns_edit.php:207 +#: usr/local/www/services_dyndns_edit.php:290 +#: usr/local/www/services_dyndns_edit.php:294 +msgid "Wildcards" +msgstr "Joker karakterler" + +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/services_dyndns_edit.php:293 +#: usr/local/www/services_dyndns_edit.php:297 +msgid "Enable " +msgstr "Etkinleştir " + +#: usr/local/www/services_dyndns_edit.php:210 +#: usr/local/www/services_dyndns_edit.php:293 +#: usr/local/www/services_dyndns_edit.php:297 +msgid "Wildcard" +msgstr "Joker karakter" + +#: usr/local/www/services_dyndns_edit.php:216 +msgid "Username is required for all types except Namecheap and FreeDNS." +msgstr "Namecheap ve FreeDNS dışındaki tüm türlerde kullanıcı adı girilmelidir." + +#: usr/local/www/services_dyndns_edit.php:224 +#: usr/local/www/services_dyndns_edit.php:309 +#: usr/local/www/services_dyndns_edit.php:313 +msgid "" +"FreeDNS (freedns.afraid.org): Enter your \"Authentication Token\" provided " +"by FreeDNS." +msgstr "" +"FreeDNS (freedns.afraid.org): FreeDNS tarafından sağlanan \"Kimlik Doğrulama " +"Anahtarı\"nı giriniz." + +#: usr/local/www/services_dyndns_edit.php:246 +#: usr/local/www/services_dyndns_edit.php:377 +#: usr/local/www/services_dyndns_edit.php:381 +#, php-format +msgid "" +"You must configure a DNS server in %sSystem:\n" +" General setup%s or allow the DNS server list to be " +"overridden\n" +" by DHCP/PPP on WAN for dynamic DNS updates to work." +msgstr "" +"Dinamik DNS güncellemelerinin çalışması için ya %sSistem:\n" +" Genel ayarlar%s sayfasında bir DNS sunucu " +"yapılandırmalısınız veya WAN\n" +" üzerinde DHCP/PPP tarafından üzerine yazılabilecek " +"şekilde ayarlamalısınız." + +#: usr/local/www/services_igmpproxy.php:80 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/services_igmpproxy_edit.php:46 +#: usr/local/www/services_igmpproxy.php:80 +msgid "IGMP Proxy" +msgstr "IGMP Vekil" + +#: usr/local/www/services_igmpproxy.php:90 +#: usr/local/www/services_igmpproxy.php:90 +msgid "The IGMP entry list has been changed" +msgstr "IGMP girdi listesi değiştirildi" + +#: usr/local/www/services_igmpproxy.php:103 +#: usr/local/www/services_igmpproxy.php:146 +#: usr/local/www/services_igmpproxy.php:103 +#: usr/local/www/services_igmpproxy.php:146 +msgid "add a new igmpentry" +msgstr "yeni IGMP girdisi ekle" + +#: usr/local/www/services_igmpproxy.php:133 +#: usr/local/www/services_igmpproxy.php:133 +msgid "edit igmpentry" +msgstr "IGMP girdisini düzenle" + +#: usr/local/www/services_igmpproxy.php:134 +#: usr/local/www/services_igmpproxy.php:134 +msgid "" +"Do you really want to delete this igmpentry? All elements that still use it " +"will become invalid (e.g. filter rules)!" +msgstr "" +"Bu IGMP girdisini silmek istediğinizden emin misiniz? Bu girdiyi kullanan " +"öğeler (örn. filtre kuralları) devre dışı kalacaktır!" + +#: usr/local/www/services_igmpproxy.php:134 +#: usr/local/www/services_igmpproxy.php:134 +msgid "delete igmpentry" +msgstr "IGMP girdisini sil" + +#: usr/local/www/services_igmpproxy.php:161 +#: usr/local/www/services_igmpproxy.php:161 +msgid "" +"Please add the interface for upstream, the allowed subnets, and the " +"downstream interfaces you would like the proxy to allow. Only one 'upstream' " +"interface can be configured." +msgstr "" +"Vekilin izin vermesini istediğiniz gönderme arabirimi, izin verilen altağlar " +"ve alma arabirimlerini ekleyin. Tek bir 'gönderme' arabirimi " +"yapılandırılabilir." + +#: usr/local/www/services_igmpproxy_edit.php:79 +#: usr/local/www/services_igmpproxy_edit.php:79 +msgid "Only one 'upstream' interface can be configured." +msgstr "Tek bir 'gönderme' arabirimi yapılandırılabilir." + +#: usr/local/www/services_igmpproxy_edit.php:158 +#: usr/local/www/services_igmpproxy_edit.php:160 +#: usr/local/www/services_igmpproxy_edit.php:160 +msgid "IGMP Proxy Edit" +msgstr "IGMP Vekili Düzenle" + +#: usr/local/www/services_igmpproxy_edit.php:188 +#: usr/local/www/services_igmpproxy_edit.php:190 +#: usr/local/www/services_igmpproxy_edit.php:190 +msgid "Upstream Interface" +msgstr "Gönderme Arabirimi" + +#: usr/local/www/services_igmpproxy_edit.php:189 +#: usr/local/www/services_igmpproxy_edit.php:191 +#: usr/local/www/services_igmpproxy_edit.php:191 +msgid "Downstream Interface" +msgstr "Alma Arabirimi" + +#: usr/local/www/services_igmpproxy_edit.php:193 +#: usr/local/www/services_igmpproxy_edit.php:195 +#: usr/local/www/services_igmpproxy_edit.php:195 +msgid "" +"The upstream network interface is the outgoing interface which is " +"responsible for communicating to available multicast data sources. There can " +"only be one upstream interface." +msgstr "" +"Gönderme ağ arabirimi çoklu yayın veri kaynaklarına erişmekten " +"sorumlu çıkış arabirimidir. Tek bir gönderme arabirimi olabilir." + +#: usr/local/www/services_igmpproxy_edit.php:199 +#: usr/local/www/services_igmpproxy_edit.php:201 +#: usr/local/www/services_igmpproxy_edit.php:201 +msgid "Downstream" +msgstr "Alma" + +#: usr/local/www/services_igmpproxy_edit.php:199 +#: usr/local/www/services_igmpproxy_edit.php:201 +#: usr/local/www/services_igmpproxy_edit.php:201 +msgid "" +"network interfaces are the distribution interfaces to the destination " +"networks, where multicast clients can join groups and receive multicast " +"data. One or more downstream interfaces must be configured." +msgstr "" +"arabirimleri çoklu yayın istemcilerinin gruplara dahil olabildiği ve çoklu " +"yayın veri alabildiği hedef ağlara dağıtım yapan arabirimlerdir. Birden " +"fazla alma arabirimi olabilir." + +#: usr/local/www/services_igmpproxy_edit.php:206 +#: usr/local/www/services_igmpproxy_edit.php:208 +#: usr/local/www/services_igmpproxy_edit.php:208 +msgid "Threshold" +msgstr "Eşik" + +#: usr/local/www/services_igmpproxy_edit.php:211 +#: usr/local/www/services_igmpproxy_edit.php:213 +#: usr/local/www/services_igmpproxy_edit.php:213 +msgid "" +"Defines the TTL threshold for the network interface. Packets with a " +"lower TTL than the threshold value will be ignored. This setting is " +"optional, and by default the threshold is 1." +msgstr "" +"Ağ arabiriminin TTL eşiğini tanımlar. Belirtilen eşiğin altında TTLsi olan " +"paketler gözardı edilir. Bu ayar seçimliktir ve varsayılan eşik değeri 1 " +"dir." + +#: usr/local/www/services_igmpproxy_edit.php:218 +#: usr/local/www/services_igmpproxy_edit.php:220 +#: usr/local/www/services_igmpproxy_edit.php:220 +msgid "Network (s)" +msgstr "Ağ (lar)" + +#: usr/local/www/services_rfc2136.php:55 usr/local/www/services_rfc2136.php:55 +msgid "RFC 2136 clients" +msgstr "RFC 2136 istemcileri" + +#: usr/local/www/services_rfc2136.php:99 +#: usr/local/www/vpn_openvpn_client.php:894 +#: usr/local/www/vpn_openvpn_client.php:899 +#: usr/local/www/vpn_openvpn_client.php:952 +#: usr/local/www/services_rfc2136.php:118 +#: usr/local/www/vpn_openvpn_client.php:971 +msgid "Do you really want to delete this client?" +msgstr "Bu istemciyi silmek istediğinize emin misiniz?" + +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:153 +#: usr/local/www/services_dyndns_edit.php:348 +#: usr/local/www/services_dyndns_edit.php:352 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:153 +#, fuzzy +msgid "TTL" +msgstr "TTL" + +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:159 +#: usr/local/www/services_rfc2136_edit.php:71 +#: usr/local/www/services_rfc2136_edit.php:159 +msgid "Key name" +msgstr "Anahtar adı" + +#: usr/local/www/services_rfc2136_edit.php:76 +#: usr/local/www/services_rfc2136_edit.php:76 +msgid "The DNS update host name contains invalid characters." +msgstr "DNS güncelleme host adı geçersiz karakterler içeriyor." + +#: usr/local/www/services_rfc2136_edit.php:78 +#: usr/local/www/services_rfc2136_edit.php:78 +msgid "The DNS update TTL must be an integer." +msgstr "DNS güncelleme TTL değeri tamsayı olmalıdır." + +#: usr/local/www/services_rfc2136_edit.php:80 +#: usr/local/www/services_rfc2136_edit.php:80 +msgid "The DNS update key name contains invalid characters." +msgstr "DNS güncelleme anahtar adı geçersiz karakterler içeriyor." + +#: usr/local/www/services_rfc2136_edit.php:100 +#: usr/local/www/services_rfc2136_edit.php:100 +msgid "New/Edited RFC2136 dnsupdate entry was posted." +msgstr "Yeni/değiştirilmiş RFC2136 dnsupdate girdisi gönderildi." + +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/services_rfc2136_edit.php:123 +#: usr/local/www/services_rfc2136_edit.php:109 +#: usr/local/www/services_rfc2136_edit.php:123 +msgid "RFC 2136 client" +msgstr "RFC 2136 istemcisi" + +#: usr/local/www/services_rfc2136_edit.php:163 +#: usr/local/www/services_rfc2136_edit.php:163 +msgid "This must match the setting on the DNS server." +msgstr "Bu ayar DNS sunucu ayarları ile uyumlu olmalıdır." + +#: usr/local/www/services_rfc2136_edit.php:166 +#: usr/local/www/services_rfc2136_edit.php:166 +msgid "Key type" +msgstr "Anahtar türü" + +#: usr/local/www/services_rfc2136_edit.php:168 +#: usr/local/www/services_captiveportal_zones.php:52 +#: usr/local/www/services_captiveportal_zones.php:53 +#: usr/local/www/services_captiveportal_zones.php:53 +#: usr/local/www/services_rfc2136_edit.php:168 +msgid "Zone" +msgstr "Bölge" + +#: usr/local/www/services_rfc2136_edit.php:170 +#: usr/local/www/services_rfc2136_edit.php:170 +msgid " User" +msgstr " Kullanıcı" + +#: usr/local/www/services_rfc2136_edit.php:177 +#: usr/local/www/services_rfc2136_edit.php:177 +msgid "Paste an HMAC-MD5 key here." +msgstr "Burada bir HMAC-MD5 anahtarı vermelisiniz." + +#: usr/local/www/services_rfc2136_edit.php:189 +#: usr/local/www/services_rfc2136_edit.php:189 +msgid "Use TCP instead of UDP" +msgstr "UDP yerine TCP kullan" + +#: usr/local/www/services_rfc2136_edit.php:210 +#: usr/local/www/services_rfc2136_edit.php:210 +#, php-format +msgid "" +"You must configure a DNS server in %sSystem: General setup %sor allow the " +"DNS server list to be overridden by DHCP/PPP on WAN for dynamic DNS updates " +"to work." +msgstr "" +"Dinamik DNS güncellemelerinin çalışması için %sSistem: Genel ayarlar%s " +"sayfasında bir DNS sunucu yapılandırmalı veya WAN üzerinde DHCP/PPP " +"tarafından DNS listesinin güncellenmesine izin vermelisiniz." + +#: usr/local/www/status_captiveportal_test.php:82 +#: usr/local/www/status_captiveportal_test.php:83 +#: usr/local/www/status_captiveportal_expire.php:82 +#: usr/local/www/status_captiveportal_test.php:84 +msgid "Voucher(s)" +msgstr "Bilet(ler)" + +#: usr/local/www/status_captiveportal_test.php:86 +#: usr/local/www/status_captiveportal_test.php:87 +#: usr/local/www/status_captiveportal_test.php:88 +msgid "" +"Enter multiple vouchers separated by space or newline. The remaining time, " +"if valid, will be shown for each voucher" +msgstr "" +"Boşluklarla veya yeni satırlarla birbirinden ayrılmış birden fazla bilet " +"girin. Her biletin (varsa) kalan süresi gösterilecektir." + +#: usr/local/www/status_captiveportal_voucher_rolls.php:85 +#: usr/local/www/status_captiveportal_voucher_rolls.php:86 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +msgid "Roll#" +msgstr "Grup No#" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:87 +#: usr/local/www/status_captiveportal_voucher_rolls.php:88 +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +msgid "# of Tickets" +msgstr "# Bilet Sayısı" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:89 +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +#: usr/local/www/status_captiveportal_voucher_rolls.php:92 +msgid "used" +msgstr "kullanılan" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:90 +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +#: usr/local/www/status_captiveportal_voucher_rolls.php:93 +msgid "active" +msgstr "aktif" + +#: usr/local/www/status_captiveportal_voucher_rolls.php:91 +#: usr/local/www/status_captiveportal_voucher_rolls.php:92 +#: usr/local/www/status_captiveportal_voucher_rolls.php:94 +msgid "ready" +msgstr "hazır" + +#: usr/local/www/status_captiveportal_vouchers.php:115 +#: usr/local/www/status_captiveportal_vouchers.php:116 +#: usr/local/www/status_captiveportal_vouchers.php:121 +msgid "Voucher" +msgstr "Bilet" + +#: usr/local/www/status_captiveportal_vouchers.php:117 +#: usr/local/www/status_captiveportal_vouchers.php:118 +#: usr/local/www/status_captiveportal_vouchers.php:123 +msgid "Activated at" +msgstr "Etkinleştirilme" + +#: usr/local/www/status_captiveportal_vouchers.php:118 +#: usr/local/www/status_captiveportal_vouchers.php:119 +#: usr/local/www/status_captiveportal_vouchers.php:124 +msgid "Expires in" +msgstr "Zaman dolumu" + +#: usr/local/www/status_captiveportal_vouchers.php:119 +#: usr/local/www/status_captiveportal_vouchers.php:120 +#: usr/local/www/status_captiveportal_vouchers.php:125 +msgid "Expires at" +msgstr "Zaman dolumu" + +#: usr/local/www/status_captiveportal_vouchers.php:127 +#: usr/local/www/status_captiveportal_vouchers.php:128 +#: usr/local/www/status_captiveportal_vouchers.php:133 +msgid "min" +msgstr "dk" + +#: usr/local/www/status_dhcp_leases.php:48 +#: usr/local/www/status_dhcp_leases.php:49 +#: usr/local/www/status_dhcp_leases.php:49 +msgid "DHCP leases" +msgstr "DHCP kiraları" + +#: usr/local/www/status_dhcp_leases.php:287 +#: usr/local/www/status_dhcpv6_leases.php:328 +#: usr/local/www/status_dhcpv6_leases.php:372 +#: usr/local/www/status_dhcp_leases.php:308 +#: usr/local/www/status_dhcpv6_leases.php:373 +#: usr/local/www/status_dhcp_leases.php:310 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:310 +msgid "Failover Group" +msgstr "Yük Aktarma Grubu" + +#: usr/local/www/status_dhcp_leases.php:288 +#: usr/local/www/status_dhcpv6_leases.php:329 +#: usr/local/www/status_dhcpv6_leases.php:373 +#: usr/local/www/status_dhcp_leases.php:309 +#: usr/local/www/status_dhcpv6_leases.php:374 +#: usr/local/www/status_dhcp_leases.php:311 +#: usr/local/www/status_dhcpv6_leases.php:377 +#: usr/local/www/status_dhcp_leases.php:311 +msgid "My State" +msgstr "Durumum" + +#: usr/local/www/status_dhcp_leases.php:289 +#: usr/local/www/status_dhcp_leases.php:291 +#: usr/local/www/status_dhcpv6_leases.php:330 +#: usr/local/www/status_dhcpv6_leases.php:332 +#: usr/local/www/status_dhcpv6_leases.php:374 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:310 +#: usr/local/www/status_dhcp_leases.php:312 +#: usr/local/www/status_dhcpv6_leases.php:375 +#: usr/local/www/status_dhcpv6_leases.php:377 +#: usr/local/www/status_dhcp_leases.php:314 +#: usr/local/www/status_dhcpv6_leases.php:378 +#: usr/local/www/status_dhcpv6_leases.php:380 +#: usr/local/www/status_dhcp_leases.php:312 +#: usr/local/www/status_dhcp_leases.php:314 +msgid "Since" +msgstr "Başlangıcı" + +#: usr/local/www/status_dhcp_leases.php:290 +#: usr/local/www/status_dhcpv6_leases.php:331 +#: usr/local/www/status_dhcpv6_leases.php:375 +#: usr/local/www/status_dhcp_leases.php:311 +#: usr/local/www/status_dhcpv6_leases.php:376 +#: usr/local/www/status_dhcp_leases.php:313 +#: usr/local/www/status_dhcpv6_leases.php:379 +#: usr/local/www/status_dhcp_leases.php:313 +msgid "Peer State" +msgstr "Eş Durumu" + +#: usr/local/www/status_dhcp_leases.php:322 +#: usr/local/www/status_dhcpv6_leases.php:364 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:485 +#: usr/local/www/status_dhcp_leases.php:343 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcpv6_leases.php:486 +#: usr/local/www/status_dhcp_leases.php:345 +#: usr/local/www/status_dhcpv6_leases.php:412 +#: usr/local/www/status_dhcpv6_leases.php:489 +#: usr/local/www/status_dhcp_leases.php:345 +msgid "End" +msgstr "Bitiş" + +#: usr/local/www/status_dhcp_leases.php:323 +#: usr/local/www/status_gateway_groups.php:132 +#: usr/local/www/status_gateways.php:127 usr/local/www/status_gateways.php:131 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:57 +#: usr/local/www/status_dhcpv6_leases.php:365 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcp_leases.php:344 +#: usr/local/www/status_dhcpv6_leases.php:410 +#: usr/local/www/status_gateways.php:128 usr/local/www/status_gateways.php:132 +#: usr/local/www/status_dhcp_leases.php:346 +#: usr/local/www/status_gateway_groups.php:133 +#: usr/local/www/status_dhcpv6_leases.php:413 +#: usr/local/www/status_dhcp_leases.php:346 +#: usr/local/www/status_gateway_groups.php:133 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:57 +#: usr/local/www/status_gateways.php:128 usr/local/www/status_gateways.php:132 +msgid "Online" +msgstr "Çevrim İçi" + +#: usr/local/www/status_dhcp_leases.php:324 +#: usr/local/www/status_dhcpv6_leases.php:366 +#: usr/local/www/status_dhcpv6_leases.php:410 +#: usr/local/www/status_dhcp_leases.php:345 +#: usr/local/www/status_dhcpv6_leases.php:411 +#: usr/local/www/status_dhcp_leases.php:347 +#: usr/local/www/status_dhcpv6_leases.php:414 +#: usr/local/www/status_dhcp_leases.php:347 +msgid "Lease Type" +msgstr "Kira Türü" + +#: usr/local/www/status_dhcp_leases.php:368 +#: usr/local/www/status_dhcp_leases.php:389 +#: usr/local/www/status_dhcp_leases.php:393 +#: usr/local/www/status_dhcp_leases.php:393 +msgid "send Wake on LAN packet to this MAC address" +msgstr "bu MAC adresine ağdan açma paketi gönder" + +#: usr/local/www/status_dhcp_leases.php:390 +#: usr/local/www/status_dhcpv6_leases.php:417 +#: usr/local/www/status_dhcpv6_leases.php:461 +#: usr/local/www/status_dhcp_leases.php:411 +#: usr/local/www/status_dhcpv6_leases.php:462 +#: usr/local/www/status_dhcp_leases.php:415 +#: usr/local/www/status_dhcpv6_leases.php:465 +#: usr/local/www/status_dhcp_leases.php:415 +msgid "add a static mapping for this MAC address" +msgstr "bu MAC adresi için statik eşleşme ekle" + +#: usr/local/www/status_dhcp_leases.php:397 +#: usr/local/www/status_dhcp_leases.php:418 +#: usr/local/www/status_dhcp_leases.php:422 +#: usr/local/www/status_dhcp_leases.php:422 +msgid "add a Wake on LAN mapping for this MAC address" +msgstr "bu MAC adresi için ağdan açma eşlemesi ekle" + +#: usr/local/www/status_dhcp_leases.php:402 +#: usr/local/www/status_dhcpv6_leases.php:426 +#: usr/local/www/status_dhcpv6_leases.php:470 +#: usr/local/www/status_dhcp_leases.php:423 +#: usr/local/www/status_dhcpv6_leases.php:471 +#: usr/local/www/status_dhcp_leases.php:427 +#: usr/local/www/status_dhcpv6_leases.php:474 +#: usr/local/www/status_dhcp_leases.php:427 +msgid "delete this DHCP lease" +msgstr "bu DHCP kirasını sil" + +#: usr/local/www/status_dhcp_leases.php:415 +#: usr/local/www/status_dhcpv6_leases.php:439 +#: usr/local/www/status_dhcpv6_leases.php:540 +#: usr/local/www/status_dhcp_leases.php:436 +#: usr/local/www/status_dhcpv6_leases.php:541 +#: usr/local/www/status_dhcp_leases.php:440 +#: usr/local/www/status_dhcpv6_leases.php:544 +#: usr/local/www/status_dhcp_leases.php:440 +msgid "Show active and static leases only" +msgstr "Sadece etkin ve statik kira girişlerini görüntüle" + +#: usr/local/www/status_dhcp_leases.php:418 +#: usr/local/www/status_dhcpv6_leases.php:442 +#: usr/local/www/status_dhcpv6_leases.php:543 +#: usr/local/www/status_dhcp_leases.php:439 +#: usr/local/www/status_dhcpv6_leases.php:544 +#: usr/local/www/status_dhcp_leases.php:443 +#: usr/local/www/status_dhcpv6_leases.php:547 +#: usr/local/www/status_dhcp_leases.php:443 +msgid "Show all configured leases" +msgstr "Yapılandırılmış tüm kiraları görüntüle" + +#: usr/local/www/status_dhcp_leases.php:422 +#: usr/local/www/status_dhcpv6_leases.php:446 +#: usr/local/www/status_dhcpv6_leases.php:547 +#: usr/local/www/status_dhcp_leases.php:443 +#: usr/local/www/status_dhcpv6_leases.php:548 +#: usr/local/www/status_dhcp_leases.php:447 +#: usr/local/www/status_dhcpv6_leases.php:551 +#: usr/local/www/status_dhcp_leases.php:447 +msgid "No leases file found. Is the DHCP server active" +msgstr "Kira dosyası bulunamadı. DHCP sunucunun aktif olduğundan emin olun." + +#: usr/local/www/status_gateway_groups.php:100 +#: usr/local/www/status_gateway_groups.php:101 +#: usr/local/www/status_gateway_groups.php:101 +#, php-format +msgid "Tier %s" +msgstr "Katman %s" + +#: usr/local/www/status_gateway_groups.php:126 +#: usr/local/www/status_gateways.php:121 usr/local/www/status_gateways.php:122 +#: usr/local/www/status_gateway_groups.php:127 +#: usr/local/www/status_gateway_groups.php:127 +#: usr/local/www/status_gateways.php:122 +msgid "Warning, Packetloss" +msgstr "Uyarı, Paket Kaybı" + +#: usr/local/www/status_gateway_groups.php:129 +#: usr/local/www/status_gateways.php:124 usr/local/www/status_gateways.php:125 +#: usr/local/www/status_gateway_groups.php:130 +#: usr/local/www/status_gateway_groups.php:130 +#: usr/local/www/status_gateways.php:125 +msgid "Warning, Latency" +msgstr "Uyarı, Gecikme" + +#: usr/local/www/status_gateway_groups.php:135 +#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108 +#: usr/local/www/status_gateways.php:134 +#: usr/local/www/widgets/widgets/gateways.widget.php:69 +#: usr/local/www/widgets/widgets/gateways.widget.php:77 +#: usr/local/www/widgets/widgets/gateways.widget.php:98 +#: usr/local/www/status_gateway_groups.php:136 +#: usr/local/www/status_gateway_groups.php:136 +msgid "Gathering data" +msgstr "Veri toplanıyor" + +#: usr/local/www/status_gateways.php:75 usr/local/www/status_gateways.php:76 +#: usr/local/www/status_gateways.php:76 +#, fuzzy +msgid "RTT" +msgstr "RTT" + +#: usr/local/www/status_gateways.php:76 usr/local/www/status_gateways.php:77 +#: usr/local/www/status_gateways.php:77 +msgid "Loss" +msgstr "Kayıp" + +#: usr/local/www/status_gateways.php:144 +#, php-format +msgid "Last check %s" +msgstr "Son kontrol %s" + +#: usr/local/www/status_graph_cpu.php:41 usr/local/www/status_graph_cpu.php:41 +msgid "CPU load" +msgstr "CPU yükü" + +#: usr/local/www/status_graph_cpu.php:46 usr/local/www/status_graph_cpu.php:46 +msgid "Status: CPU Graph" +msgstr "Durum: CPU Grafiği" + +#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph_cpu.php:53 +msgid "if you can't see the graph, you may have to install the" +msgstr "grafiği göremiyorsanız, kurmanız gerekebilir " + +#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph_cpu.php:53 +msgid "Adobe SVG viewer" +msgstr "Adobe SVG Görüntüleyici" + +#: usr/local/www/status_lb_vs.php:78 usr/local/www/vpn_ipsec_phase2.php:427 +#: usr/local/www/vpn_ipsec_phase2.php:469 +#: usr/local/www/vpn_ipsec_phase2.php:475 +#: usr/local/www/vpn_ipsec_phase2.php:453 +#: usr/local/www/vpn_ipsec_phase2.php:495 +#: usr/local/www/vpn_ipsec_phase2.php:501 +#: usr/local/www/vpn_ipsec_phase2.php:519 +#: usr/local/www/vpn_ipsec_phase2.php:555 +#: usr/local/www/vpn_ipsec_phase2.php:597 +#: usr/local/www/vpn_ipsec_phase2.php:603 usr/local/www/status_lb_vs.php:78 +#: usr/local/www/vpn_ipsec_phase2.php:541 +#: usr/local/www/vpn_ipsec_phase2.php:576 +#: usr/local/www/vpn_ipsec_phase2.php:618 +#: usr/local/www/vpn_ipsec_phase2.php:624 +msgid "Address" +msgstr "Adres" + +#: usr/local/www/status_openvpn.php:145 usr/local/www/status_openvpn.php:146 +#: usr/local/www/status_openvpn.php:146 +msgid "Client connections" +msgstr "İstemci bağlantıları" + +#: usr/local/www/status_openvpn.php:152 usr/local/www/system_camanager.php:534 +#: usr/local/www/system_certmanager.php:627 +#: usr/local/www/system_certmanager.php:730 +#: usr/local/www/vpn_openvpn_csc.php:673 +#: usr/local/www/system_certmanager.php:743 +#: usr/local/www/system_certmanager.php:896 +#: usr/local/www/system_camanager.php:535 usr/local/www/status_openvpn.php:153 +#: usr/local/www/vpn_openvpn_csc.php:672 +#: usr/local/www/system_camanager.php:559 usr/local/www/status_openvpn.php:153 +#: usr/local/www/status_openvpn.php:214 usr/local/www/vpn_openvpn_csc.php:672 +#: usr/local/www/system_certmanager.php:768 +#: usr/local/www/system_certmanager.php:938 +msgid "Common Name" +msgstr "Genel Ad" + +#: usr/local/www/status_openvpn.php:153 usr/local/www/status_openvpn.php:154 +#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:215 +msgid "Real Address" +msgstr "Gerçek Adres" + +#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:155 +#: usr/local/www/status_openvpn.php:155 +msgid "Virtual Address" +msgstr "Sanal Adres" + +#: usr/local/www/status_openvpn.php:155 usr/local/www/status_openvpn.php:213 +#: usr/local/www/status_openvpn.php:264 usr/local/www/status_openvpn.php:156 +#: usr/local/www/status_openvpn.php:216 usr/local/www/status_openvpn.php:267 +#: usr/local/www/status_openvpn.php:156 usr/local/www/status_openvpn.php:264 +#: usr/local/www/status_openvpn.php:315 +msgid "Connected Since" +msgstr "Bağlantı Süresi" + +#: usr/local/www/status_openvpn.php:156 usr/local/www/status_openvpn.php:216 +#: usr/local/www/status_openvpn.php:267 usr/local/www/status_openvpn.php:157 +#: usr/local/www/status_openvpn.php:219 usr/local/www/status_openvpn.php:270 +#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:267 +#: usr/local/www/status_openvpn.php:318 +msgid "Bytes Sent" +msgstr "Gönderilen Bayt" + +#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:217 +#: usr/local/www/status_openvpn.php:268 usr/local/www/status_openvpn.php:158 +#: usr/local/www/status_openvpn.php:220 usr/local/www/status_openvpn.php:271 +#: usr/local/www/status_openvpn.php:158 usr/local/www/status_openvpn.php:268 +#: usr/local/www/status_openvpn.php:319 +msgid "Bytes Received" +msgstr "Alınan Bayt" + +#: usr/local/www/status_openvpn.php:184 usr/local/www/status_openvpn.php:185 +#: usr/local/www/status_openvpn.php:185 +msgid "Kill client connection from" +msgstr "İstemci bağlantısını kes" + +#: usr/local/www/status_openvpn.php:205 usr/local/www/status_openvpn.php:208 +#: usr/local/www/status_openvpn.php:256 +msgid "Peer to Peer Server Instance Statistics" +msgstr "Eşler Arası Sunucu İstatistikleri" + +#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265 +#: usr/local/www/status_openvpn.php:217 usr/local/www/status_openvpn.php:268 +#: usr/local/www/status_openvpn.php:265 usr/local/www/status_openvpn.php:316 +msgid "Virtual Addr" +msgstr "Sanal Adres" + +#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266 +#: usr/local/www/status_openvpn.php:218 usr/local/www/status_openvpn.php:269 +#: usr/local/www/status_openvpn.php:266 usr/local/www/status_openvpn.php:317 +msgid "Remote Host" +msgstr "Uzak Host" + +#: usr/local/www/status_openvpn.php:256 usr/local/www/status_openvpn.php:259 +#: usr/local/www/status_openvpn.php:307 +msgid "Client Instance Statistics" +msgstr "OpenVPN İstemci İstatistikleri" + +#: usr/local/www/status_openvpn.php:304 usr/local/www/status_openvpn.php:307 +#: usr/local/www/status_openvpn.php:355 +msgid "" +"You need to bind each OpenVPN client to enable its management daemon: use " +"'Local port' setting in the OpenVPN client screen" +msgstr "" +"OpenVPN itemcilerinin yönetim hizmetlerini açmak için onları bağlamanız " +"gerekir: OpenVPN istemci ekranında 'Yerel port' ayarını kullanın." + +#: usr/local/www/status_openvpn.php:308 usr/local/www/status_openvpn.php:311 +#: usr/local/www/status_openvpn.php:359 +msgid "No OpenVPN instance defined" +msgstr "OpenVPN tanımı yapılmamış" + +#: usr/local/www/system_advanced_admin.php:87 +#: usr/local/www/system_advanced_admin.php:87 +msgid "You must specify a valid webConfigurator port number" +msgstr "webArayüzü için geçerli bir port numarası belirtmelisiniz" + +#: usr/local/www/system_advanced_admin.php:91 +#: usr/local/www/system_advanced_admin.php:91 +msgid "Max Processes must be a number 1 or greater" +msgstr "En Fazla Süreç Sayısı, en az 1 olmak üzere bir tamsayı olmalıdır" + +#: usr/local/www/system_advanced_admin.php:97 +#: usr/local/www/system_advanced_admin.php:97 +#, php-format +msgid "Alternate hostname %s is not a valid hostname." +msgstr "Alternatif host adı %s geçerli bir host adı değil." + +#: usr/local/www/system_advanced_admin.php:102 +#: usr/local/www/system_advanced_admin.php:102 +msgid "You must specify a valid port number" +msgstr "Geçerli bir port numarası belirtilmelidir." + +#: usr/local/www/system_advanced_admin.php:232 +#: usr/local/www/system_advanced_admin.php:232 +#, php-format +msgid "One moment...redirecting to %s in 20 seconds." +msgstr "Bekleyiniz... 20 saniye içinde %s sayfasına yönlendiriliyorsunuz." + +#: usr/local/www/system_advanced_admin.php:242 +#: usr/local/www/system_advanced_admin.php:242 +msgid "Advanced: Admin Access" +msgstr "Gelişmiş: Yönetici Erişimi" + +#: usr/local/www/system_advanced_admin.php:274 +#: usr/local/www/system_advanced_firewall.php:215 +#: usr/local/www/system_advanced_misc.php:206 +#: usr/local/www/system_advanced_network.php:182 +#: usr/local/www/system_advanced_notifications.php:151 +#: usr/local/www/system_advanced_sysctl.php:147 +#: usr/local/www/system_advanced_firewall.php:229 +#: usr/local/www/system_advanced_notifications.php:160 +#: usr/local/www/system_advanced_misc.php:232 +#: usr/local/www/system_advanced_misc.php:251 +#: usr/local/www/system_advanced_admin.php:274 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_firewall.php:258 +#: usr/local/www/system_advanced_notifications.php:160 +#: usr/local/www/system_advanced_network.php:182 +#: usr/local/www/system_advanced_sysctl.php:147 +msgid "Admin Access" +msgstr "Yönetici Erişimi" + +#: usr/local/www/system_advanced_admin.php:275 +#: usr/local/www/system_advanced_firewall.php:216 +#: usr/local/www/system_advanced_misc.php:207 +#: usr/local/www/system_advanced_network.php:183 +#: usr/local/www/system_advanced_notifications.php:152 +#: usr/local/www/system_advanced_sysctl.php:148 +#: usr/local/www/system_advanced_firewall.php:230 +#: usr/local/www/system_advanced_notifications.php:161 +#: usr/local/www/system_advanced_misc.php:233 +#: usr/local/www/system_advanced_misc.php:252 +#: usr/local/www/system_advanced_admin.php:275 +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_firewall.php:259 +#: usr/local/www/system_advanced_notifications.php:161 +#: usr/local/www/system_advanced_network.php:183 +#: usr/local/www/system_advanced_sysctl.php:148 +msgid "Firewall / NAT" +msgstr "Güvenlik duvarı/NAT" + +#: usr/local/www/system_advanced_admin.php:276 +#: usr/local/www/system_advanced_firewall.php:217 +#: usr/local/www/system_advanced_misc.php:208 +#: usr/local/www/system_advanced_network.php:184 +#: usr/local/www/system_advanced_notifications.php:153 +#: usr/local/www/system_advanced_sysctl.php:149 +#: usr/local/www/system_advanced_firewall.php:231 +#: usr/local/www/system_advanced_notifications.php:162 +#: usr/local/www/system_advanced_misc.php:234 +#: usr/local/www/system_advanced_misc.php:253 +#: usr/local/www/system_advanced_admin.php:276 +#: usr/local/www/system_advanced_misc.php:257 +#: usr/local/www/system_advanced_firewall.php:260 +#: usr/local/www/system_advanced_notifications.php:162 +#: usr/local/www/system_advanced_network.php:184 +#: usr/local/www/system_advanced_sysctl.php:149 +msgid "Networking" +msgstr "Ağ" + +#: usr/local/www/system_advanced_admin.php:277 +#: usr/local/www/system_advanced_firewall.php:218 +#: usr/local/www/system_advanced_misc.php:209 +#: usr/local/www/system_advanced_network.php:185 +#: usr/local/www/system_advanced_notifications.php:154 +#: usr/local/www/system_advanced_sysctl.php:150 +#: usr/local/www/system_advanced_firewall.php:232 +#: usr/local/www/system_advanced_notifications.php:163 +#: usr/local/www/system_advanced_misc.php:235 +#: usr/local/www/system_advanced_misc.php:254 +#: usr/local/www/system_advanced_admin.php:277 +#: usr/local/www/system_advanced_misc.php:258 +#: usr/local/www/system_advanced_firewall.php:261 +#: usr/local/www/system_advanced_notifications.php:163 +#: usr/local/www/system_advanced_network.php:185 +#: usr/local/www/system_advanced_sysctl.php:150 +msgid "Miscellaneous" +msgstr "Diğer Ayarlar" + +#: usr/local/www/system_advanced_admin.php:278 +#: usr/local/www/system_advanced_firewall.php:219 +#: usr/local/www/system_advanced_misc.php:210 +#: usr/local/www/system_advanced_network.php:186 +#: usr/local/www/system_advanced_notifications.php:155 +#: usr/local/www/system_advanced_sysctl.php:151 +#: usr/local/www/system_advanced_firewall.php:233 +#: usr/local/www/system_advanced_notifications.php:164 +#: usr/local/www/system_advanced_misc.php:236 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_admin.php:278 +#: usr/local/www/system_advanced_misc.php:259 +#: usr/local/www/system_advanced_firewall.php:262 +#: usr/local/www/system_advanced_notifications.php:164 +#: usr/local/www/system_advanced_network.php:186 +#: usr/local/www/system_advanced_sysctl.php:151 +msgid "System Tunables" +msgstr "Sistem İnce Ayarları" + +#: usr/local/www/system_advanced_admin.php:279 +#: usr/local/www/system_advanced_firewall.php:220 +#: usr/local/www/system_advanced_misc.php:211 +#: usr/local/www/system_advanced_network.php:187 +#: usr/local/www/system_advanced_notifications.php:156 +#: usr/local/www/system_advanced_sysctl.php:152 +#: usr/local/www/system_advanced_firewall.php:234 +#: usr/local/www/system_advanced_notifications.php:165 +#: usr/local/www/system_advanced_misc.php:237 +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_admin.php:279 +#: usr/local/www/system_advanced_misc.php:260 +#: usr/local/www/system_advanced_firewall.php:263 +#: usr/local/www/system_advanced_notifications.php:165 +#: usr/local/www/system_advanced_network.php:187 +#: usr/local/www/system_advanced_sysctl.php:152 +msgid "Notifications" +msgstr "Bildirimler" + +#: usr/local/www/system_advanced_admin.php:297 +#: usr/local/www/system_advanced_admin.php:297 +msgid "webConfigurator" +msgstr "webArayüzü" + +#: usr/local/www/system_advanced_admin.php:317 +#: usr/local/www/system_advanced_admin.php:317 +msgid "No Certificates have been defined. You must" +msgstr "" +"Herhangi bir sertifika tanımlanmadı. SSL'i etkinleştirebilmek için bir " +"sertifika" + +#: usr/local/www/system_advanced_admin.php:318 +#: usr/local/www/system_advanced_admin.php:318 +msgid "Create or Import" +msgstr "Oluştur yada İçeri Aktar" + +#: usr/local/www/system_advanced_admin.php:319 +#: usr/local/www/system_advanced_admin.php:319 +msgid "a Certificate before SSL can be enabled." +msgstr "SSL etkinleştirilmeden önceki sertifika." + +#: usr/local/www/system_advanced_admin.php:324 +#: usr/local/www/services_captiveportal.php:872 +#: usr/local/www/system_advanced_admin.php:324 +#: usr/local/www/services_captiveportal.php:874 +msgid "SSL Certificate" +msgstr "SSL Sertifikası" + +#: usr/local/www/system_advanced_admin.php:339 +#: usr/local/www/system_advanced_admin.php:339 +#, fuzzy +msgid "TCP port" +msgstr "TCP port" + +#: usr/local/www/system_advanced_admin.php:344 +#: usr/local/www/system_advanced_admin.php:344 +msgid "" +"Enter a custom port number for the webConfigurator above if you want to " +"override the default (80 for HTTP, 443 for HTTPS). Changes will take effect " +"immediately after save." +msgstr "" +"webArayüzünün çalışacağı portu değiştirmek istiyorsanız buraya yazın. " +"Varsayılan portlar (HTTP 80, HTTPS 443'tür). Kaydettiğiniz anda " +"değişiklikler etkinleştirilir." + +#: usr/local/www/system_advanced_admin.php:351 +#: usr/local/www/system_advanced_admin.php:351 +msgid "Max Processes" +msgstr "En Fazla İşlem Sayısı" + +#: usr/local/www/system_advanced_admin.php:356 +#: usr/local/www/system_advanced_admin.php:356 +msgid "" +"Enter the number of webConfigurator processes you want to run. This defaults " +"to 2. Increasing this will allow more users/browsers to access the GUI " +"concurrently." +msgstr "" +"Çalıştırmak istediğiniz webArayüzü sayısını girin. Öntanımlı değeri 2'dir. " +"Bu sayıyı artırmak aynı anda daha fazla kullanıcının / tarayıcının web " +"arayüzüne erişebilmesine olanak verir." + +#: usr/local/www/system_advanced_admin.php:363 +#: usr/local/www/system_advanced_admin.php:363 +msgid "WebGUI redirect" +msgstr "Web arayüzünü yeniden yönlendir" + +#: usr/local/www/system_advanced_admin.php:366 +#: usr/local/www/system_advanced_admin.php:366 +msgid "Disable webConfigurator redirect rule" +msgstr "webArayüzü yeniden yönlendirme kuralını kapat" + +#: usr/local/www/system_advanced_admin.php:368 +#: usr/local/www/system_advanced_admin.php:368 +msgid "" +"When this is unchecked, access to the webConfigurator is always permitted " +"even on port 80, regardless of the listening port configured. Check this box " +"to disable this automatically added redirect rule. " +msgstr "" +"Bu kutunun işareti kaldırıldığında başka bir porta yönlendirme olsa bile 80 " +"portundan webArayüzüne erişime izin verilir. Otomatik olarak eklenen bu " +"yeniden yönlendirme kuralını kapatmak için kutuyu işaretleyin. " + +#: usr/local/www/system_advanced_admin.php:375 +#: usr/local/www/system_advanced_admin.php:375 +msgid "WebGUI Login Autocomplete" +msgstr "Web arayüzü Oturum Açma Otomatik Tamamlama" + +#: usr/local/www/system_advanced_admin.php:378 +#: usr/local/www/system_advanced_admin.php:378 +msgid "Disable webConfigurator login autocomplete" +msgstr "webArayüzü oturum açma otomatik tamamlama özelliğini kapat" + +#: usr/local/www/system_advanced_admin.php:380 +#: usr/local/www/system_advanced_admin.php:380 +msgid "" +"When this is unchecked, login credentials for the webConfigurator may be " +"saved by the browser. While convenient, some security standards require this " +"to be disabled. Check this box to disable autocomplete on the login form so " +"that browsers will not prompt to save credentials (NOTE: Some browsers do " +"not respect this option). " +msgstr "" +"Bu seçenek işaretlenmediğinde, webArayüzü kimlik bilgileri tarayıcıya " +"kaydedilebilir. Bazı güvenlik standartları bu özelliğin kapalı olmasını " +"gerektirir. Bu seçeneği işaretleyerek oturum açma ekranında kullanıcı adının " +"otomatik tamamlanması özelliğini kapatabilirsiniz. (NOT: Bazı tarayıcılar " +"bu ayarı gözardı eder). " + +#: usr/local/www/system_advanced_admin.php:387 +#: usr/local/www/system_advanced_admin.php:387 +msgid "WebGUI login messages" +msgstr "Web arayüzü oturum açma mesajları" + +#: usr/local/www/system_advanced_admin.php:390 +#: usr/local/www/system_advanced_admin.php:390 +msgid "Disable logging of webConfigurator successful logins" +msgstr "webArayüzüne başarıyla oturum açma işlemlerini günlüğe kaydetme" + +#: usr/local/www/system_advanced_admin.php:392 +#: usr/local/www/system_advanced_admin.php:392 +msgid "" +"When this is checked, successful logins to the webConfigurator will not be " +"logged." +msgstr "" +"Bu seçenek işaretlendiğinde webArayüzüne oturum açma işlemleri günlüğe " +"kaydedilmez." + +#: usr/local/www/system_advanced_admin.php:398 +#: usr/local/www/system_advanced_admin.php:398 +msgid "Anti-lockout" +msgstr "Anti-kilit" + +#: usr/local/www/system_advanced_admin.php:407 +#: usr/local/www/system_advanced_admin.php:407 +msgid "Disable webConfigurator anti-lockout rule" +msgstr "webArayüzü anti-kilit kuralını kapat" + +#: usr/local/www/system_advanced_admin.php:409 +#: usr/local/www/system_advanced_admin.php:409 +#, php-format +msgid "" +"When this is unchecked, access to the webConfigurator on the %s interface is " +"always permitted, regardless of the user-defined firewall rule set. Check " +"this box to disable this automatically added rule, so access to the " +"webConfigurator is controlled by the user-defined firewall rules (ensure you " +"have a firewall rule in place that allows you in, or you will lock yourself " +"out!)" +msgstr "" +"Bu kutunun işareti kaldırıldığında, güvenlik duvarının kullanıcı tarafından " +"tanımlanmış kurallarına bakılmaksızın webArayüzüne %s arabiriminden erişime " +"her zaman izin verilir. Otomatik olarak eklenen bu kuralı kaldırmak için bu " +"kutuyu işaretleyin.webArayüzünden bu kutuyu işaretlerseniz (kendinizi " +"kilitlememek için bir güvenlik duvarı kuralı eklemeniz gerektiğini " +"unutmayın!)" + +#: usr/local/www/system_advanced_admin.php:415 +#: usr/local/www/system_advanced_admin.php:415 +msgid "" +"Hint: the "Set interface(s) IP address" option in the console menu " +"resets this setting as well." +msgstr "" +"İpucu: Konsol menüsündeki "Arabirim(ler)in IP adresini yapılandır" " +"seçeneği bu ayarı da sıfırlar." + +#: usr/local/www/system_advanced_admin.php:419 +#: usr/local/www/system_advanced_admin.php:419 +msgid "DNS Rebind Check" +msgstr "DNS Yeniden Bağlama Kontrolü" + +#: usr/local/www/system_advanced_admin.php:422 +#: usr/local/www/system_advanced_admin.php:422 +msgid "Disable DNS Rebinding Checks" +msgstr "DNS Yeniden Bağlama Kontrollerini Kapat" + +#: usr/local/www/system_advanced_admin.php:424 +#: usr/local/www/system_advanced_admin.php:424 +msgid "" +"When this is unchecked, your system is protected against DNS Rebinding attacks. This blocks " +"private IP responses from your configured DNS servers. Check this box to " +"disable this protection if it interferes with webConfigurator access or name " +"resolution in your environment. " +msgstr "" +"Bu kutunun işaretini kaldırdığınızda, sisteminiz DNS Yeniden Bağlama " +"saldırılarına karşı korunmuş olur. Bunu yapılandırılmış DNS " +"sunucularınızdan özel IP yanıtlarını engelleyerek yapar. Bu seçeneği sadece " +"webArayüzüne erişiminizi engelliyor veya isim çözme işlemlerini bozuyorsa " +"kapatın. " + +#: usr/local/www/system_advanced_admin.php:431 +#: usr/local/www/system_advanced_admin.php:431 +msgid "Alternate Hostnames" +msgstr "Alternatif Host Adları" + +#: usr/local/www/system_advanced_admin.php:435 +#: usr/local/www/system_advanced_admin.php:435 +msgid "Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks" +msgstr "" +"DNS Yeniden Bağlama ve HTTP_REFERER Kontrolleri için Alternatif Host Adları" + +#: usr/local/www/system_advanced_admin.php:437 +#: usr/local/www/system_advanced_admin.php:437 +msgid "" +"Here you can specify alternate hostnames by which the router may be queried, " +"to bypass the DNS Rebinding Attack checks. Separate hostnames with spaces." +msgstr "" +"Yönlendiricinin (router) sorgulanabileceği alternatif host adları " +"girebilirsiniz, bu hostlar DNS Yeniden Bağlama Saldırısı kontrollerinden " +"muaf tutulur. Birden fazla host adı girecekseniz aralarında bir boşluk " +"bırakın." + +#: usr/local/www/system_advanced_admin.php:442 +#: usr/local/www/system_advanced_admin.php:442 +msgid "Browser HTTP_REFERER enforcement" +msgstr "Tarayıcı HTTP_REFERER mecburiyeti" + +#: usr/local/www/system_advanced_admin.php:445 +#: usr/local/www/system_advanced_admin.php:445 +msgid "Disable HTTP_REFERER enforcement check" +msgstr "Tarayıcı HTTP_REFERER mecburiyeti kontrollerini kapat" + +#: usr/local/www/system_advanced_admin.php:447 +#: usr/local/www/system_advanced_admin.php:447 +msgid "" +"When this is unchecked, access to the webConfigurator is protected against " +"HTTP_REFERER redirection attempts. Check this box to disable this protection " +"if you find that it interferes with webConfigurator access in certain corner " +"cases such as using external scripts to interact with this system. More " +"information on HTTP_REFERER is available from Wikipedia." +msgstr "" +"Bu kutunun işareti kaldırıldığında, webArayüzüne erişim HTTP_REFERER yeniden " +"yönlendirme denemelerine karşı korunur. Dış betiklerin sisteme erişimde " +"sıkıntı yaşaması gibi uç durumlar yaşıyorsanız kutunun işaretini kaldırın. " +"HTTP_REFERER başlığı hakkında daha fazla bilgiyi Wikipedia'da " +"bulabilirsiniz." + +#: usr/local/www/system_advanced_admin.php:457 +#: usr/local/www/system_advanced_admin.php:457 +msgid "Secure Shell" +msgstr "SSH" + +#: usr/local/www/system_advanced_admin.php:460 +#: usr/local/www/system_advanced_admin.php:460 +msgid "Secure Shell Server" +msgstr "SSH Sunucu" + +#: usr/local/www/system_advanced_admin.php:463 +#: usr/local/www/system_advanced_admin.php:463 +msgid "Enable Secure Shell" +msgstr "SSH'ı Etkinleştir" + +#: usr/local/www/system_advanced_admin.php:467 +#: usr/local/www/system_advanced_admin.php:467 +msgid "Authentication Method" +msgstr "Kimlik Doğrulama Yöntemi" + +#: usr/local/www/system_advanced_admin.php:470 +msgid "Disable password login for Secure Shell (RSA key only)" +msgstr "SSH için şifre girişini kapat (RSA anahtarıyla bağlan)" + +#: usr/local/www/system_advanced_admin.php:472 +#: usr/local/www/system_advanced_admin.php:472 +msgid "When enabled, authorized keys need to be configured for each" +msgstr "Etkinleştirildiğinde, SSH erişimi verilen her " + +#: usr/local/www/system_advanced_admin.php:473 +#: usr/local/www/system_advanced_admin.php:473 +msgid "user" +msgstr "kullanıcı" + +#: usr/local/www/system_advanced_admin.php:474 +#: usr/local/www/system_advanced_admin.php:474 +msgid "that has been granted secure shell access." +msgstr "için kimliği doğrulanmış anahtarlar gerekir." + +#: usr/local/www/system_advanced_admin.php:478 +#: usr/local/www/system_advanced_admin.php:478 +msgid "SSH port" +msgstr "SSH portu" + +#: usr/local/www/system_advanced_admin.php:482 +#: usr/local/www/system_advanced_admin.php:482 +msgid "Note: Leave this blank for the default of 22." +msgstr "Not: Varsayılan 22 değeri için bu alanı boş bırakabilirsiniz." + +#: usr/local/www/system_advanced_admin.php:489 +#: usr/local/www/system_advanced_admin.php:489 +msgid "Serial Communcations" +msgstr "Seri İletişim" + +#: usr/local/www/system_advanced_admin.php:493 +#: usr/local/www/system_advanced_admin.php:493 +msgid "Serial Terminal" +msgstr "Seri Terminal" + +#: usr/local/www/system_advanced_admin.php:496 +#: usr/local/www/system_advanced_admin.php:496 +msgid "" +"Enables the first serial port with 9600/8/N/1 by default, or another speed " +"selectable below." +msgstr "" +"Seri port etkinleştirildiğinde 9600/8/N/1 varsayılandır, diğer hız " +"seçenekleri aşağıdadır." + +#: usr/local/www/system_advanced_admin.php:497 +#: usr/local/www/system_advanced_admin.php:497 +msgid "" +"Note: This will redirect the console output and messages to the serial " +"port. You can still access the console menu from the internal video card/" +"keyboard. A null modem serial cable or adapter is required to use the " +"serial console." +msgstr "" +"Not: Bu işlem konsol çıktısını seri porta yöneltir. Konsol menüsüne ekran " +"kartı/klavye ikilisinden erişim kapatılmaz. Seri konsolu kullanabilmek için " +"null modem seri kablosu veya adaptörü gereklidir." + +#: usr/local/www/system_advanced_admin.php:502 +#: usr/local/www/system_advanced_admin.php:502 +msgid "Serial Speed" +msgstr "Seri Hızı" + +#: usr/local/www/system_advanced_admin.php:512 +#: usr/local/www/system_advanced_admin.php:512 +msgid "Allows selection of different speeds for the serial console port." +msgstr "Seri konsol portu için değişik hız seçimine izin verir." + +#: usr/local/www/system_advanced_admin.php:519 +#: usr/local/www/system_advanced_admin.php:519 +msgid "Console Options" +msgstr "Konsol Seçenekleri" + +#: usr/local/www/system_advanced_admin.php:522 +#: usr/local/www/system_advanced_admin.php:522 +msgid "Console menu" +msgstr "Konsol menüsü" + +#: usr/local/www/system_advanced_admin.php:525 +#: usr/local/www/system_advanced_admin.php:525 +msgid "Password protect the console menu" +msgstr "Konsol menüsünü parola ile koru" + +#: usr/local/www/system_advanced_admin.php:527 +#: usr/local/www/system_advanced_admin.php:527 +msgid "Changes to this option will take effect after a reboot." +msgstr "" +"Bu seçenekte yapılan değişiklikler sistem tekrar başlatıldığında " +"etkinleştirilir." + +#: usr/local/www/system_advanced_admin.php:564 +#: usr/local/www/system_advanced_admin.php:564 +msgid "secure shell configuration has changed. Stopping sshd." +msgstr "SSH yapılandırması değiştirildi. sshd servisi durduruluyor." + +#: usr/local/www/system_advanced_admin.php:567 +#: usr/local/www/system_advanced_admin.php:567 +msgid "secure shell configuration has changed. Restarting sshd." +msgstr "SSH yapılandırması değiştirildi. sshd servisi yeniden başlatılıyor." + +#: usr/local/www/system_advanced_admin.php:574 +#: usr/local/www/system_advanced_admin.php:574 +msgid "webConfigurator configuration has changed. Restarting webConfigurator." +msgstr "webArayüzü ayarları değiştirildi. webArayüzü tekrar başlatılıyor." + +#: usr/local/www/system_advanced_firewall.php:78 +#: usr/local/www/system_advanced_firewall.php:77 +#: usr/local/www/system_advanced_firewall.php:88 +msgid "The Firewall Maximum States value must be an integer." +msgstr "Güvenlik duvarı Maksimum Durum değeri tamsayı olmalıdır." + +#: usr/local/www/system_advanced_firewall.php:81 +#: usr/local/www/system_advanced_firewall.php:83 +#: usr/local/www/system_advanced_firewall.php:94 +msgid "The Firewall Maximum Table Entries value must be an integer." +msgstr "Güvenlik duvarı Maksimum Tablo Girdisi tamsayı olmalıdır." + +#: usr/local/www/system_advanced_firewall.php:84 +#: usr/local/www/system_advanced_firewall.php:86 +#: usr/local/www/system_advanced_firewall.php:97 +msgid "The TCP idle timeout must be an integer." +msgstr "TCP boşta kalma zaman aşımı değeri tamsayı olmalıdır." + +#: usr/local/www/system_advanced_firewall.php:87 +#: usr/local/www/system_advanced_firewall.php:89 +#: usr/local/www/system_advanced_firewall.php:100 +msgid "The Reflection timeout must be an integer." +msgstr "Yansıtma zaman aşımı değeri tamsayı olmalıdır." + +#: usr/local/www/system_advanced_firewall.php:178 +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/system_advanced_firewall.php:221 +msgid "Advanced: Firewall and NAT" +msgstr "Gelişmiş: Güvenlik duvarı ve NAT" + +#: usr/local/www/system_advanced_firewall.php:190 +#: usr/local/www/system_advanced_firewall.php:204 +#: usr/local/www/system_advanced_firewall.php:233 +msgid "as the name says, it's the normal optimization algorithm" +msgstr "isminden de anlaşılacağı üzere, normal eniyileştirme algoritmasıdır" + +#: usr/local/www/system_advanced_firewall.php:191 +#: usr/local/www/system_advanced_firewall.php:205 +#: usr/local/www/system_advanced_firewall.php:234 +msgid "" +"used for high latency links, such as satellite links. Expires idle " +"connections later than default" +msgstr "" +"uydu bağlantıları gibi yüksek gecikmeli bağlantılar için kullanılır. Boş " +"bağlantıları normalden daha geç kapatır" + +#: usr/local/www/system_advanced_firewall.php:192 +#: usr/local/www/system_advanced_firewall.php:206 +msgid "" +"expires idle connections quicker. More efficient use of CPU and memory but " +"can drop legitimate connections" +msgstr "" +"boş bağlantıları daha çabuk kapatır. İşlemci ve hafıza daha verimli kullanır " +"ama sağlıklı bağlantıların da kapatılmasına neden olabilir." + +#: usr/local/www/system_advanced_firewall.php:193 +#: usr/local/www/system_advanced_firewall.php:207 +msgid "" +"tries to avoid dropping any legitimate connections at the expense of " +"increased memory usage and CPU utilization." +msgstr "" +"daha fazla hafıza ve işlemci kullanmayı göze alarak sağlıklı bağlantıların " +"kapatılmasını engellemeye çalışır." + +#: usr/local/www/system_advanced_firewall.php:239 +#: usr/local/www/system_advanced_firewall.php:253 +#: usr/local/www/system_advanced_firewall.php:282 +msgid "Firewall Advanced" +msgstr "Güvenlik Duvarı Gelişmiş" + +#: usr/local/www/system_advanced_firewall.php:242 +#: usr/local/www/system_advanced_firewall.php:256 +#: usr/local/www/system_advanced_firewall.php:285 +msgid "IP Do-Not-Fragment compatibility" +msgstr "IP Bölme (DF) uyumluluğu" + +#: usr/local/www/system_advanced_firewall.php:245 +#: usr/local/www/system_advanced_firewall.php:259 +#: usr/local/www/system_advanced_firewall.php:288 +msgid "Clear invalid DF bits instead of dropping the packets" +msgstr "Paketleri atmak yerine DG bitlerini temizlemeye çalış" + +#: usr/local/www/system_advanced_firewall.php:246 +#: usr/local/www/system_advanced_firewall.php:260 +#: usr/local/www/system_advanced_firewall.php:289 +msgid "" +"This allows for communications with hosts that generate fragmented packets " +"with the don't fragment (DF) bit set. Linux NFS is known to do this. This " +"will cause the filter to not drop such packets but instead clear the don't " +"fragment bit." +msgstr "" +"DF biti 1 durumunda olan parçalı paketler üreten sunucularla iletişime " +"olanak verir. Örneğin Linux NFS bu tür sunuculardan biridir. Bu seçenekle o " +"paketler atılmaz, sadece DF bitleri temizlenir." + +#: usr/local/www/system_advanced_firewall.php:253 +#: usr/local/www/system_advanced_firewall.php:267 +#: usr/local/www/system_advanced_firewall.php:296 +msgid "IP Random id generation" +msgstr "IP rasgele kimlik üretimi" + +#: usr/local/www/system_advanced_firewall.php:256 +#: usr/local/www/system_advanced_firewall.php:270 +#: usr/local/www/system_advanced_firewall.php:299 +msgid "" +"Insert a stronger id into IP header of packets passing through the filter." +msgstr "" +"Filtreden geçen paketlerin IP başlığına daha güçlü bir kimlik yerleştir." + +#: usr/local/www/system_advanced_firewall.php:257 +#: usr/local/www/system_advanced_firewall.php:271 +#: usr/local/www/system_advanced_firewall.php:300 +msgid "" +"Replaces the IP identification field of packets with random values to " +"compensate for operating systems that use predictable values. This option " +"only applies to packets that are not fragmented after the optional packet " +"reassembly." +msgstr "" +"Paketlerin IP kimlik tanımlama kısmında öngörülebilir değerler kullanan " +"işletim sistemlerinden gelen paketleri güçlendirmek için IP kimlik tanımlama " +"alanının değerini değiştirir. Bu seçenek sadece isteğe bağlı paket açma ve " +"yeniden birleştirme işleminden sonra parçalanmamış halde olan paketleri " +"etkiler." + +#: usr/local/www/system_advanced_firewall.php:264 +#: usr/local/www/system_advanced_firewall.php:278 +#: usr/local/www/system_advanced_firewall.php:307 +msgid "Firewall Optimization Options" +msgstr "Güvenlik Duvarı Eniyileştirme Seçenekleri" + +#: usr/local/www/system_advanced_firewall.php:267 +#: usr/local/www/system_advanced_firewall.php:281 +#: usr/local/www/system_advanced_firewall.php:310 +#, fuzzy +msgid "normal" +msgstr "normal" + +#: usr/local/www/system_advanced_firewall.php:268 +#: usr/local/www/system_advanced_firewall.php:282 +#: usr/local/www/system_advanced_firewall.php:311 +msgid "high-latency" +msgstr "yüksek gecikmeli" + +#: usr/local/www/system_advanced_firewall.php:269 +#: usr/local/www/system_advanced_firewall.php:283 +#: usr/local/www/system_advanced_firewall.php:312 +msgid "aggressive" +msgstr "saldırgan" + +#: usr/local/www/system_advanced_firewall.php:270 +#: usr/local/www/system_advanced_firewall.php:284 +#: usr/local/www/system_advanced_firewall.php:313 +msgid "conservative" +msgstr "muhafazakar" + +#: usr/local/www/system_advanced_firewall.php:278 +#: usr/local/www/system_advanced_firewall.php:292 +#: usr/local/www/system_advanced_firewall.php:321 +msgid "Select the type of state table optimization to use" +msgstr "Kullanılacak durum tablosu eniyileştirme yöntemini seçiniz" + +#: usr/local/www/system_advanced_firewall.php:282 +#: usr/local/www/system_advanced_firewall.php:296 +#: usr/local/www/system_advanced_firewall.php:325 +msgid "Disable Firewall" +msgstr "Güvenlik Duvarını Devre Dışı Bırak" + +#: usr/local/www/system_advanced_firewall.php:285 +#: usr/local/www/system_advanced_firewall.php:299 +#: usr/local/www/system_advanced_firewall.php:328 +msgid "Disable all packet filtering." +msgstr "Tüm paket filtrelemeyi devre dışı bırak." + +#: usr/local/www/system_advanced_firewall.php:287 +#: usr/local/www/system_advanced_firewall.php:301 +#: usr/local/www/system_advanced_firewall.php:330 +#, php-format +msgid "Note: This converts %s into a routing only platform!" +msgstr "" +"Not: Bu seçenek %s sistemini sadece yönlendime yapan bir sisteme dönüştürür." + +#: usr/local/www/system_advanced_firewall.php:288 +#: usr/local/www/system_advanced_firewall.php:302 +#: usr/local/www/system_advanced_firewall.php:331 +msgid "Note: This will also turn off NAT!" +msgstr "Not: NAT'ı da devre dışı bırakır!" + +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/system_advanced_firewall.php:332 +msgid "If you only want to disable NAT, and not firewall rules, visit the" +msgstr "" +"Güvenlik Duvarı kurallarını kapatmadan sadece NAT'ı devredışı bırakmak " +"istiyorsanız" + +#: usr/local/www/system_advanced_firewall.php:289 +#: usr/local/www/system_advanced_firewall.php:303 +#: usr/local/www/system_advanced_firewall.php:332 +msgid "Outbound NAT" +msgstr "Dışarı NAT" + +#: usr/local/www/system_advanced_firewall.php:294 +#: usr/local/www/system_advanced_firewall.php:308 +#: usr/local/www/system_advanced_firewall.php:337 +msgid "Disable Firewall Scrub" +msgstr "Güvenlik Duvarı Elden Geçirmeyi Devre Dışı Bırak" + +#: usr/local/www/system_advanced_firewall.php:297 +#: usr/local/www/system_advanced_firewall.php:311 +#: usr/local/www/system_advanced_firewall.php:340 +msgid "" +"Disables the PF scrubbing option which can sometimes interfere with NFS and " +"PPTP traffic." +msgstr "" +"Zaman zaman NFS ve PPTP trafiğini bozabilen bir özellik olan PF elden " +"geçirme seçeneğini kapatır." + +#: usr/local/www/system_advanced_firewall.php:302 +#: usr/local/www/system_advanced_firewall.php:316 +#: usr/local/www/system_advanced_firewall.php:360 +msgid "Firewall Maximum States" +msgstr "Güvenlik Duvarı Maksimum Durum" + +#: usr/local/www/system_advanced_firewall.php:306 +#: usr/local/www/system_advanced_firewall.php:320 +#: usr/local/www/system_advanced_firewall.php:364 +msgid "Maximum number of connections to hold in the firewall state table." +msgstr "Güvenlik Duvarı durum tablosunda tutulacak maksimum bağlantı sayısı." + +#: usr/local/www/system_advanced_firewall.php:308 +#: usr/local/www/system_advanced_firewall.php:322 +#: usr/local/www/system_advanced_firewall.php:366 +msgid "" +"Note: Leave this blank for the default. On your system the default size is:" +msgstr "" +"Not: Varsayılan değer için boş bırakınız. Sisteminizdeki varsayılan değer:" + +#: usr/local/www/system_advanced_firewall.php:312 +#: usr/local/www/system_advanced_firewall.php:342 +#: usr/local/www/system_advanced_firewall.php:386 +msgid "Firewall Maximum Table Entries" +msgstr "Güvenlik Duvarı Maksimum Tablo Girdisi Sayısı" + +#: usr/local/www/system_advanced_firewall.php:316 +#: usr/local/www/system_advanced_firewall.php:346 +#: usr/local/www/system_advanced_firewall.php:390 +msgid "" +"Maximum number of table entries for systems such as aliases, sshlockout, " +"snort, etc, combined." +msgstr "" +"Gruplar, sshlockout, snort vb sistemler için ayrılan en fazla tablo girdisi " +"sayısı." + +#: usr/local/www/system_advanced_firewall.php:319 +#: usr/local/www/system_advanced_firewall.php:334 +#: usr/local/www/system_advanced_firewall.php:349 +#: usr/local/www/system_advanced_firewall.php:378 +#: usr/local/www/system_advanced_firewall.php:393 +msgid "Note: Leave this blank for the default." +msgstr "Not: Varsayılan değer için boş bırakınız." + +#: usr/local/www/system_advanced_firewall.php:321 +#: usr/local/www/system_advanced_firewall.php:336 +#: usr/local/www/system_advanced_firewall.php:351 +#: usr/local/www/system_advanced_firewall.php:380 +#: usr/local/www/system_advanced_firewall.php:395 +msgid "On your system the default size is:" +msgstr "Sisteminizdeki varsayılan değer:" + +#: usr/local/www/system_advanced_firewall.php:327 +#: usr/local/www/system_advanced_firewall.php:357 +#: usr/local/www/system_advanced_firewall.php:401 +msgid "Static route filtering" +msgstr "Statik rota yönlendirme filtreleme" + +#: usr/local/www/system_advanced_firewall.php:330 +#: usr/local/www/system_advanced_firewall.php:360 +#: usr/local/www/system_advanced_firewall.php:404 +msgid "Bypass firewall rules for traffic on the same interface" +msgstr "Aynı arabirim üzerindeki trafik için güvenlik duvarı kurallarını atla" + +#: usr/local/www/system_advanced_firewall.php:332 +#: usr/local/www/system_advanced_firewall.php:362 +#: usr/local/www/system_advanced_firewall.php:406 +msgid "" +"This option only applies if you have defined one or more static routes. If " +"it is enabled, traffic that enters and leaves through the same interface " +"will not be checked by the firewall. This may be desirable in some " +"situations where multiple subnets are connected to the same interface." +msgstr "" +"Sadece statik rotalar tanımladıysanız anlamlıdır. Etkinleştirildiğinde, aynı " +"arabirim üzerinden gelip giden trafik güvenlik duvarı tarafından kontrol " +"edilmez. Bu seçeneği birden fazla altağın aynı arabirime bağlı olduğu " +"durumlarda kullanmak isteyebilirsiniz." + +#: usr/local/www/system_advanced_firewall.php:342 +#: usr/local/www/system_advanced_firewall.php:372 +#: usr/local/www/system_advanced_firewall.php:416 +msgid "Disable all auto-added VPN rules." +msgstr "Otomatik eklenen tüm VPN kurallarını kapat." + +#: usr/local/www/system_advanced_firewall.php:344 +#: usr/local/www/system_advanced_firewall.php:374 +#: usr/local/www/system_advanced_firewall.php:418 +msgid "Note: This disables automatically added rules for IPsec, PPTP." +msgstr "" +"Not: Bu seçenek IPsec ve PPTP için otomatik olarak eklenen kuralları " +"kapatır." + +#: usr/local/www/system_advanced_firewall.php:352 +#: usr/local/www/system_advanced_firewall.php:382 +#: usr/local/www/system_advanced_firewall.php:426 +msgid "Disable reply-to on WAN rules" +msgstr "WAN kurallarındaki yanıt adresi özelliğini kapat" + +#: usr/local/www/system_advanced_firewall.php:354 +#: usr/local/www/system_advanced_firewall.php:384 +#: usr/local/www/system_advanced_firewall.php:428 +msgid "" +"With Multi-WAN you generally want to ensure traffic leaves the same " +"interface it arrives on, hence reply-to is added automatically by default. " +"When using bridging, you must disable this behavior if the WAN gateway IP is " +"different from the gateway IP of the hosts behind the bridged interface." +msgstr "" +"Çoklu WAN yapılandırmalarda genellikle trafiğin geldiği arabirimden gitmesi " +"istenir ve bu amaçla yanıt adresi otomatik olarak eklenir. Köprüleme " +"kullanıldığında WAN ağ geçidi IPsi köprülenen arabirimin arkasındaki " +"istemcilerin ağ geçidi IPsinden farklı ise bu özelliği kapatmanız gerekir." + +#: usr/local/www/system_advanced_firewall.php:364 +#: usr/local/www/system_advanced_firewall.php:404 +#: usr/local/www/system_advanced_firewall.php:466 +msgid "Network Address Translation" +msgstr "NAT 'Ağ Adres Çevrimi'" + +#: usr/local/www/system_advanced_firewall.php:367 +msgid "Disable NAT Reflection for port forwards" +msgstr "Port yönlendirmeleri için NAT yansıtmayı kapat" + +#: usr/local/www/system_advanced_firewall.php:370 +msgid "" +"Disables the automatic creation of additional NAT redirect rules for access " +"to port forwards on your external IP addresses from within your internal " +"networks. Note: Reflection for port forward entries is skipped for ranges " +"larger than 500 ports." +msgstr "" +"İç ağlarınızdan dış IPleriniz ile yapılan port yönlendirmelerine erişim için " +"otomatik olarak ek NAT yönlendirme kuralları oluşturulmasını devre dışı " +"bırakır. Not: 500 porttan büyük aralıklar için port yönlendirme girdileri " +"yansıtması yapılmaz." + +#: usr/local/www/system_advanced_firewall.php:374 +#: usr/local/www/system_advanced_firewall.php:425 +#: usr/local/www/system_advanced_firewall.php:487 +msgid "Reflection Timeout" +msgstr "Yansıtma Zaman Aşımı" + +#: usr/local/www/system_advanced_firewall.php:377 +msgid "" +"Enter value for Reflection timeout in seconds. Note: Only applies to " +"Reflection on port forwards." +msgstr "" +"Saniye cinsinden bir Yansıtma zaman aşımı değeri girin. Not: Sadece port " +"yönlendirmelerdeki Yansıtmayı etkiler." + +#: usr/local/www/system_advanced_firewall.php:381 +msgid "Disable NAT Reflection for 1:1 NAT" +msgstr "1:1 NAT için NAT Yansıtmayı kapat" + +#: usr/local/www/system_advanced_firewall.php:384 +msgid "" +"Disables the automatic creation of additional NAT 1:1 mappings for access to " +"1:1 mappings of your external IP addresses from within your internal " +"networks. Note: Reflection for 1:1 NAT might not fully work in certain " +"complex routing scenarios." +msgstr "" +"İç ağlarınızdan dış IP adreslerinizle 1:1 eşlemelere erişim için otomatik " +"olarak ek 1:1 NAT eşlemeleri oluşturulmasını devre dışı bırakır. Not: 1:1 " +"NAT yansıtması belirli karmaşık yönlendirme senaryolarında çalışmayabilir." + +#: usr/local/www/system_advanced_firewall.php:391 +#: usr/local/www/system_advanced_firewall.php:448 +#: usr/local/www/system_advanced_firewall.php:510 +msgid "" +"Automatically create outbound NAT rules which assist inbound NAT rules that " +"direct traffic back out to the same subnet it originated from." +msgstr "" +"Trafiği geldiği altağa yönlendirilen içeriye doğru NAT kurallarına yardımcı " +"olmak amacıyla ek dışarıya doğru NAT kurallarını otomatik oluştur." + +#: usr/local/www/system_advanced_firewall.php:393 +msgid "" +"Currently only applies to 1:1 NAT rules. Required for full functionality of " +"NAT Reflection for 1:1 NAT." +msgstr "" +"Sadece 1:1 NAT kurallarına uygulanır. 1:1 NAT ile NAT Yansıtmanın tam olarak " +"çalışması için gereklidir." + +#: usr/local/www/system_advanced_firewall.php:397 +#: usr/local/www/system_advanced_firewall.php:456 +#: usr/local/www/system_advanced_firewall.php:518 +msgid "TFTP Proxy" +msgstr "TFTP Vekil" + +#: usr/local/www/system_advanced_firewall.php:407 +#: usr/local/www/system_advanced_firewall.php:466 +#: usr/local/www/system_advanced_firewall.php:528 +msgid "Choose the interfaces where you want TFTP proxy helper to be enabled." +msgstr "TFTP vekil yardımcısının etkinleştirileceği arabirimleri seçiniz." + +#: usr/local/www/system_advanced_misc.php:179 +#: usr/local/www/system_advanced_misc.php:199 +#: usr/local/www/system_advanced_misc.php:218 +#: usr/local/www/system_advanced_misc.php:222 +msgid "Advanced: Miscellaneous" +msgstr "Gelişmiş: Diğer" + +#: usr/local/www/system_advanced_misc.php:229 +#: usr/local/www/system_advanced_misc.php:255 +#: usr/local/www/system_advanced_misc.php:274 +#: usr/local/www/system_advanced_misc.php:278 +msgid "Proxy support" +msgstr "Vekil sunucu desteği" + +#: usr/local/www/system_advanced_misc.php:232 +#: usr/local/www/system_advanced_misc.php:258 +#: usr/local/www/system_advanced_misc.php:277 +#: usr/local/www/system_advanced_misc.php:281 +msgid "Proxy URL" +msgstr "Vekil URL" + +#: usr/local/www/system_advanced_misc.php:236 +#: usr/local/www/system_advanced_misc.php:262 +#: usr/local/www/system_advanced_misc.php:281 +#: usr/local/www/system_advanced_misc.php:285 +#, php-format +msgid "Proxy url for allowing %s to use this proxy to connect outside." +msgstr "%s Dış bağlantılar için kullanılacak Vekil Sunucu" + +#: usr/local/www/system_advanced_misc.php:240 +#: usr/local/www/system_advanced_misc.php:266 +#: usr/local/www/system_advanced_misc.php:285 +#: usr/local/www/system_advanced_misc.php:289 +msgid "Proxy Port" +msgstr "Vekil Portu" + +#: usr/local/www/system_advanced_misc.php:244 +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_advanced_misc.php:289 +#: usr/local/www/system_advanced_misc.php:293 +#, php-format +msgid "" +"Proxy port to use when %s connects to the proxy URL configured above. " +"Default is 8080 for http protocol or 443 for ssl." +msgstr "" +"%s üzerinde yapılandırılmış vekil URL'ye bağlanır, kullanılacak vekil port " +"numarası varsayılan http protokolü için 8080 ssl için 443 dür." + +#: usr/local/www/system_advanced_misc.php:248 +#: usr/local/www/system_advanced_misc.php:274 +#: usr/local/www/system_advanced_misc.php:293 +#: usr/local/www/system_advanced_misc.php:297 +msgid "Proxy Username" +msgstr "Vekil Kullanıcı adı" + +#: usr/local/www/system_advanced_misc.php:252 +#: usr/local/www/system_advanced_misc.php:278 +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:301 +#, php-format +msgid "Proxy username for allowing %s to use this proxy to connect outside" +msgstr "" +"%s Vekil Sunucuyu kullanarak dışarıya bağlantı kurması için izin verilen " +"vekil (proxy) kullanıcı adı" + +#: usr/local/www/system_advanced_misc.php:256 +#: usr/local/www/system_advanced_misc.php:282 +#: usr/local/www/system_advanced_misc.php:301 +#: usr/local/www/system_advanced_misc.php:305 +msgid "Proxy Pass" +msgstr "Vekil Parola" + +#: usr/local/www/system_advanced_misc.php:260 +#: usr/local/www/system_advanced_misc.php:286 +#: usr/local/www/system_advanced_misc.php:305 +#: usr/local/www/system_advanced_misc.php:309 +#, php-format +msgid "Proxy password for allowing %s to use this proxy to connect outside" +msgstr "" +"%s Vekil Sunucuyu kullanarak dışarıya bağlantı kurması için izin verilen " +"vekil (proxy) parolası" + +#: usr/local/www/system_advanced_misc.php:264 +#: usr/local/www/system_advanced_misc.php:267 +#: usr/local/www/system_advanced_misc.php:282 +#: usr/local/www/system_advanced_misc.php:290 +#: usr/local/www/system_advanced_misc.php:293 +#: usr/local/www/system_advanced_misc.php:314 +#: usr/local/www/system_advanced_misc.php:309 +#: usr/local/www/system_advanced_misc.php:312 +#: usr/local/www/system_advanced_misc.php:333 +#: usr/local/www/system_advanced_misc.php:313 +#: usr/local/www/system_advanced_misc.php:316 +#: usr/local/www/system_advanced_misc.php:337 +msgid "Load Balancing" +msgstr "Yük Dengeleme" + +#: usr/local/www/system_advanced_misc.php:270 +#: usr/local/www/system_advanced_misc.php:296 +#: usr/local/www/system_advanced_misc.php:315 +#: usr/local/www/system_advanced_misc.php:319 +msgid "Use sticky connections" +msgstr "Sabit bağlantılar kullan" + +#: usr/local/www/system_advanced_misc.php:271 +msgid "" +"Successive connections will be redirected to the servers in a round-robin " +"manner with connections from the same source being sent to the same web " +"server. This 'sticky connection' will exist as long as there are states that " +"refer to this connection. Once the states expire, so will the sticky " +"connection. Further connections from that host will be redirected to the " +"next web server in the round robin." +msgstr "" +"Ardışık bağlantılar sunuculara dairesel bir mantıkla yönlendirilir, bir " +"kaynaktan gelen bağlantılar hep aynı sunucuya gönderilir. Bu 'kalıcı " +"bağlantı', bu bağlantıya atıfta bulunan durumlar olduğu sürece canlı kalır. " +"Durumların süresi dolduğunda, kalıcı bağlantının da süresi dolmuş olur. O " +"istemciden gelen sonraki bağlantı istekleri dairesel dağıtılır." + +#: usr/local/www/system_advanced_misc.php:285 +#: usr/local/www/system_advanced_misc.php:317 +#: usr/local/www/system_advanced_misc.php:336 +#: usr/local/www/system_advanced_misc.php:340 +msgid "Allow default gateway switching" +msgstr "Ötanımlı ağ geçidi değiştirmeye izin ver" + +#: usr/local/www/system_advanced_misc.php:286 +#: usr/local/www/system_advanced_misc.php:318 +#: usr/local/www/system_advanced_misc.php:337 +#: usr/local/www/system_advanced_misc.php:341 +msgid "" +"If the link where the default gateway resides fails switch the default " +"gateway to another available one." +msgstr "" +"Eğer öntanımlı ağ geçidi bağlantısı başarısız olursa öntanımlı ağ geçidini " +"bir başkasıyla değiştir." + +#: usr/local/www/system_advanced_misc.php:294 +#: usr/local/www/system_advanced_misc.php:326 +#: usr/local/www/system_advanced_misc.php:345 +#: usr/local/www/system_advanced_misc.php:349 +msgid "Power savings" +msgstr "Güç tasarrufu" + +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:329 +#: usr/local/www/system_advanced_misc.php:348 +#: usr/local/www/system_advanced_misc.php:352 +#, fuzzy +msgid "PowerD" +msgstr "PowerD" + +#: usr/local/www/system_advanced_misc.php:300 +#: usr/local/www/system_advanced_misc.php:332 +#: usr/local/www/system_advanced_misc.php:351 +#: usr/local/www/system_advanced_misc.php:355 +msgid "Use PowerD" +msgstr "PowerD Kullan" + +#: usr/local/www/system_advanced_misc.php:302 +msgid "" +"The powerd utility monitors the system state and sets various power control " +"options accordingly. It offers three modes (maximum, minimum, and adaptive) " +"that can be individually selected while on AC power or batteries. The modes " +"maximum, minimum, and adaptive may be abbreviated max, min, adp. Maximum " +"mode chooses the highest performance values. Minimum mode selects the " +"lowest performance values to get the most power savings. Adaptive mode " +"attempts to strike a balance by degrading performance when the system " +"appears idle and increasing it when the system is busy. It offers a good " +"balance between a small performance loss for greatly " +msgstr "" +"PowerD aracı sistem durumunu takip eder ve çeşitli güç koruma seçeneklerini " +"ona göre ayarlar. AC güçte ve pilde çalışma anına göre ayarlanabilen üç " +"çalışma kipi sağlar: maksimum, minimum ve dengeli. Maksimum kip en yüksek " +"performans değerlerini seçer. Minimum kip en yüksek güç koruma için en düşük " +"performans değerlerini seçer. Denge kipi ise sistem boşta olduğunda " +"performansı düşürerek ve sistem yoğunluğu arttığında performansı yükselterek " +"bir denge elde etmeye çalışır." + +#: usr/local/www/system_advanced_misc.php:318 +#: usr/local/www/system_advanced_misc.php:361 +msgid "glxsb Crypto Acceleration" +msgstr "glxsb Şifreleme Hızlandırma" + +#: usr/local/www/system_advanced_misc.php:321 +#: usr/local/www/system_advanced_misc.php:364 +#, fuzzy +msgid "glxsb" +msgstr "glxsb" + +#: usr/local/www/system_advanced_misc.php:324 +#: usr/local/www/system_advanced_misc.php:367 +msgid "Use glxsb" +msgstr "Şifreleme Hızlandırma (glxsb) kullan" + +#: usr/local/www/system_advanced_misc.php:326 +#: usr/local/www/system_advanced_misc.php:369 +msgid "" +"The AMD Geode LX Security Block will accelerate some cryptographic functions " +"on systems which have the chip. Do not enable this option if you have a Hifn " +"cryptographic acceleration card, as this will take precedence and the Hifn " +"card will not be used. Acceleration should be automatic for IPsec when using " +"Rijndael (AES). OpenVPN should be set for AES-128-CBC." +msgstr "" +"AMD Geode LX Güvenlik Blok çipi olan sistemler için bazı şifreleme " +"fonksiyonlarını hızlandırır. Hifn şifreleme hızlandırma kartınız varsa " +"Hifn'den daha yüksek öncelikte olduğu için Hifn kartının kullanılmasını " +"engeller; bu nedenle Hifn şifreleme hızlandırma kartınız varsa bu seçeneği " +"açmamalısınız. IPSEC için Rijndael (AES) kullanırken hızlandırma otomatik " +"olarak devreye girecektir ve OpenVPN AES-128-CBC olarak ayarlanmalıdır." + +#: usr/local/www/system_advanced_misc.php:332 +#: usr/local/www/system_advanced_misc.php:375 +msgid "" +"If you do not have a glxsb chip in your system, this option will have no " +"effect. To unload the module, uncheck this option and then reboot." +msgstr "" +"Sisteminizde glxsb çipi yoksa bu seçeneği açmanın bir etkisi olmaz. Bileşeni " +"kaldırmak için bu seçeneğin işaretini kaldırıp sistemi yeniden başlatmanız " +"gerekir." + +#: usr/local/www/system_advanced_misc.php:340 +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:432 +#: usr/local/www/system_advanced_misc.php:444 +msgid "IP Security" +msgstr "IP Güvenlik" + +#: usr/local/www/system_advanced_misc.php:343 +#: usr/local/www/system_advanced_misc.php:386 +#: usr/local/www/system_advanced_misc.php:435 +#: usr/local/www/system_advanced_misc.php:447 +msgid "Security Associations" +msgstr "Güvenlik İlişkilendirmeleri" + +#: usr/local/www/system_advanced_misc.php:346 +#: usr/local/www/system_advanced_misc.php:389 +#: usr/local/www/system_advanced_misc.php:438 +#: usr/local/www/system_advanced_misc.php:450 +msgid "Prefer older IPsec SAs" +msgstr "Daha eski IPsec SA'larını seç" + +#: usr/local/www/system_advanced_misc.php:348 +#: usr/local/www/system_advanced_misc.php:391 +#: usr/local/www/system_advanced_misc.php:440 +#: usr/local/www/system_advanced_misc.php:452 +msgid "" +"By default, if several SAs match, the newest one is preferred if it's at " +"least 30 seconds old. Select this option to always prefer old SAs over new " +"ones." +msgstr "" +"Varsayılan olarak birden fazla SA eşleştiği taktirde, en az 30 saniyedir " +"hayatta olan en yenisi tercih edilir. Daha eski olanları yenilere tercih " +"etmek için bu seçeneği açın." + +#: usr/local/www/system_advanced_misc.php:354 +#: usr/local/www/system_advanced_misc.php:397 +#: usr/local/www/system_advanced_misc.php:446 +#: usr/local/www/system_advanced_misc.php:458 +msgid "IPsec Debug" +msgstr "IPsec Hata Ayıklama" + +#: usr/local/www/system_advanced_misc.php:357 +#: usr/local/www/system_advanced_misc.php:400 +#: usr/local/www/system_advanced_misc.php:449 +#: usr/local/www/system_advanced_misc.php:461 +msgid "Start racoon in debug mode" +msgstr "Racoon'u hata ayıklama kipinde başlat" + +#: usr/local/www/system_advanced_misc.php:359 +#: usr/local/www/system_advanced_misc.php:402 +#: usr/local/www/system_advanced_misc.php:451 +#: usr/local/www/system_advanced_misc.php:463 +msgid "" +"Launches racoon in debug mode so that more verbose logs will be generated to " +"aid in troubleshooting." +msgstr "" +"Sorun çözmenize yardımcı olmak için Racoon'u daha detaylı log üretmesine " +"neden olan hata ayıklama kipinde başlatır." + +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:404 +#: usr/local/www/system_advanced_misc.php:453 +#: usr/local/www/system_advanced_misc.php:465 +msgid "NOTE: Changing this setting will restart racoon." +msgstr "" +"NOT: Bu seçeneği işaretlemek Racoon'un yeniden başlatılmasına neden olur." + +#: usr/local/www/system_advanced_misc.php:365 +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:457 +#: usr/local/www/system_advanced_misc.php:469 +msgid "Maximum MSS" +msgstr "Maksimum MSS" + +#: usr/local/www/system_advanced_misc.php:368 +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:460 +#: usr/local/www/system_advanced_misc.php:472 +msgid "Enable MSS clamping on VPN traffic" +msgstr "VPN trafikte MSS sıkma özelliğini aç" + +#: usr/local/www/system_advanced_misc.php:372 +#: usr/local/www/system_advanced_misc.php:415 +#: usr/local/www/system_advanced_misc.php:464 +#: usr/local/www/system_advanced_misc.php:476 +msgid "" +"Enable MSS clamping on TCP flows over VPN. This helps overcome problems with " +"PMTUD on IPsec VPN links. If left blank, the default value is 1400 bytes. " +msgstr "" +"VPN üzerinden gerçekleşen TCP akışlarında MSS sıkma özelliğini etkinleştir. " +"Bu seçenek IPsec VPN bağlantılardaki PMTUD problemlerinin giderilmesine " +"yardımcı olur. Boş bırakarak varsayılan 1400 kullanılmasını " +"sağlayabilirsiniz." + +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:426 +#: usr/local/www/system_advanced_misc.php:475 +#: usr/local/www/system_advanced_misc.php:487 +msgid "Schedule States" +msgstr "Zamanlama Durumları" + +#: usr/local/www/system_advanced_misc.php:387 +#: usr/local/www/system_advanced_misc.php:430 +#: usr/local/www/system_advanced_misc.php:479 +#: usr/local/www/system_advanced_misc.php:491 +msgid "" +"By default schedules clear the states of existing connections when the " +"expiration time has come. This option overrides that behavior by not " +"clearing states for existing connections." +msgstr "" +"Varsayılan olarak zamanlamalar süreleri dolduğunda varolan bağlantıların " +"durumlarını temizler. Bu seçeneği kullanarak bu işlemin yapılmamasını " +"sağlayabilirsiniz." + +#: usr/local/www/system_advanced_misc.php:395 +#: usr/local/www/system_advanced_misc.php:438 +#: usr/local/www/system_advanced_misc.php:487 +#: usr/local/www/system_advanced_misc.php:499 +msgid "Gateway Monitoring" +msgstr "Ağ Geçidi İzleme" + +#: usr/local/www/system_advanced_misc.php:402 +#: usr/local/www/system_advanced_misc.php:445 +#: usr/local/www/system_advanced_misc.php:494 +#: usr/local/www/system_advanced_misc.php:506 +msgid "" +"By default the monitoring process will flush states for a gateway that goes " +"down. This option overrides that behavior by not clearing states for " +"existing connections." +msgstr "" +"Varsayılan olarak izleme süreci erişilemeyen ağ geçidinin durumlarını " +"temizler. Bu seçeneği kullanarak bu işlemin yapılmamasını sağlayabilirsiniz." + +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:454 +#: usr/local/www/system_advanced_misc.php:503 +#: usr/local/www/system_advanced_misc.php:515 +msgid "Hardware Settings" +msgstr "Donanım Ayarları" + +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:457 +#: usr/local/www/system_advanced_misc.php:506 +#: usr/local/www/system_advanced_misc.php:518 +msgid "Hard disk standby time " +msgstr "Harddisk beklemede kalma süresi " + +#: usr/local/www/system_advanced_misc.php:421 +#: usr/local/www/system_advanced_misc.php:464 +#: usr/local/www/system_advanced_misc.php:513 +#: usr/local/www/system_advanced_misc.php:525 +msgid "Always on" +msgstr "Her zaman açık" + +#: usr/local/www/system_advanced_misc.php:430 +#: usr/local/www/system_advanced_misc.php:473 +#: usr/local/www/system_advanced_misc.php:522 +#: usr/local/www/system_advanced_misc.php:534 +msgid "" +"Puts the hard disk into standby mode when the selected amount of time after " +"the last access has elapsed." +msgstr "" +"Son disk erişiminden itibaren belirtilen süre geçtiğinde diskin beklemeye " +"alınmasını sağlar." + +#: usr/local/www/system_advanced_misc.php:431 +#: usr/local/www/system_advanced_misc.php:474 +#: usr/local/www/system_advanced_misc.php:523 +#: usr/local/www/system_advanced_misc.php:535 +msgid "Do not set this for CF cards." +msgstr "CF kartlarda bu ayarı kullanmayınız." + +#: usr/local/www/system_advanced_network.php:68 +#: usr/local/www/system_advanced_network.php:68 +msgid "You must specify an IP address to NAT IPv6 packets." +msgstr "NAT IPv6 paketleri için bir IP adresi belirtmelisiniz." + +#: usr/local/www/system_advanced_network.php:148 +#: usr/local/www/system_advanced_network.php:148 +msgid "Advanced: Networking" +msgstr "Gelişmiş: Ağ" + +#: usr/local/www/system_advanced_network.php:205 +#: usr/local/www/system_advanced_network.php:205 +msgid "IPv6 Options" +msgstr "IPv6 Seçenekleri" + +#: usr/local/www/system_advanced_network.php:208 +#: usr/local/www/system_advanced_network.php:211 +#: usr/local/www/system_advanced_network.php:208 +#: usr/local/www/system_advanced_network.php:211 +msgid "Allow IPv6" +msgstr "IPv6ya İzin Ver" + +#: usr/local/www/system_advanced_network.php:212 +#: usr/local/www/system_advanced_network.php:212 +msgid "All IPv6 will be blocked unless this box is checked." +msgstr "Bu kutu işaretli değilse tüm IPv6 engellenir." + +#: usr/local/www/system_advanced_network.php:217 +#: usr/local/www/system_advanced_network.php:217 +msgid "IPv6 over IPv4 Tunneling" +msgstr "IPv4 tünellemeyle IPv6" + +#: usr/local/www/system_advanced_network.php:220 +#: usr/local/www/system_advanced_network.php:220 +msgid "Enable IPv4 NAT encapsulation of IPv6 packets" +msgstr "IPv6 paketlerinin IPv4 NAT ile sarmalanması özelliğini aç" + +#: usr/local/www/system_advanced_network.php:221 +#: usr/local/www/system_advanced_network.php:221 +msgid "" +"This provides an RFC 2893 compatibility mechanism that can be used to " +"tunneling IPv6 packets over IPv4 routing infrastructures. If enabled, don't " +"forget to add a firewall rule to permit IPv6 packets." +msgstr "" +"Bu seçenek IPv6 paketlerinin IPv4 altyapısından tünellenmesine olanak veren " +"RFC 2893 uyumluluk mekanizmasını sağlar. Etkinleştirirseniz IPv6 paketlerine " +"izin veren bir güvenlik duvarı kuralı eklemeyi unutmayın." + +#: usr/local/www/system_advanced_network.php:234 +#: usr/local/www/system_advanced_network.php:234 +msgid "Network Interfaces" +msgstr "Ağ Arabirimleri" + +#: usr/local/www/system_advanced_network.php:237 +#: usr/local/www/system_advanced_network.php:237 +msgid "Device polling" +msgstr "Aygıt sorgulama" + +#: usr/local/www/system_advanced_network.php:240 +#: usr/local/www/system_advanced_network.php:240 +msgid "Enable device polling" +msgstr "Aygıt sorgulamayı etkinleştir" + +#: usr/local/www/system_advanced_network.php:241 +#: usr/local/www/system_advanced_network.php:241 +#, php-format +msgid "" +"Device polling is a technique that lets the system periodically poll network " +"devices for new data instead of relying on interrupts. This prevents your " +"webConfigurator, SSH, etc. from being inaccessible due to interrupt floods " +"when under extreme load. Generally this is not recommended. Not all NICs " +"support polling; see the %s homepage for a list of supported cards." +msgstr "" +"Aygıt sorgulama sistemin kesmelerle çalışmak yerine belirli aralıklarla " +"ağdaki aygıtları sorguladığı bir tekniktir. Bu teknik webArayüzü ve SSH gibi " +"servislerin çok yoğun yükler altında erişilemez hale gelmesini engeller, " +"ancak genellikle tavsiye edilmez. Tüm NICler sorgulamayı desteklemez; " +"desteklenen kartların listesini için %s adresine bakabilirsiniz." + +#: usr/local/www/system_advanced_network.php:245 +#: usr/local/www/system_advanced_network.php:245 +msgid "Hardware Checksum Offloading" +msgstr "Donanım Kontrol Toplamı Yük Azaltımı" + +#: usr/local/www/system_advanced_network.php:248 +#: usr/local/www/system_advanced_network.php:248 +msgid "Disable hardware checksum offload" +msgstr "Donanım kontrol toplamı yük azaltımını kapat" + +#: usr/local/www/system_advanced_network.php:249 +#: usr/local/www/system_advanced_network.php:249 +msgid "" +"Checking this option will disable hardware checksum offloading. Checksum " +"offloading is broken in some hardware, particularly some Realtek cards. " +"Rarely, drivers may have problems with checksum offloading and some specific " +"NICs." +msgstr "" +"Bu seçeneğin işaretlenmesi donanım kontrol toplamı yük azaltımını kapatır. " +"Kontrol toplamı yük azaltımı bazı donanımlarda, özellikle de bazı Realtek " +"kartlarda düzgün çalışmaz. Nadiren de olsa sürücüler kontrol toplamı yük " +"azaltımı ve belirli NIClerde sorun çıkarabilir." + +#: usr/local/www/system_advanced_network.php:253 +#: usr/local/www/system_advanced_network.php:253 +msgid "Hardware TCP Segmentation Offloading" +msgstr "Donanım TCP Kesimleme Yük Azaltımı" + +#: usr/local/www/system_advanced_network.php:256 +#: usr/local/www/system_advanced_network.php:256 +msgid "Disable hardware TCP segmentation offload" +msgstr "Donanım TCP kesimleme yük azaltımını kapat" + +#: usr/local/www/system_advanced_network.php:257 +#: usr/local/www/system_advanced_network.php:257 +msgid "" +"Checking this option will disable hardware TCP segmentation offloading (TSO, " +"TSO4, TSO6). This offloading is broken in some hardware drivers, and may " +"impact performance with some specific NICs." +msgstr "" +"Bu seçeneği işaretlemek TCP kesimleme yük azaltımını (TSO, TSO4, TSO6) " +"kapatır. Bu yük azaltımı bazı donanım sürücülerinde düzgün çalışmaz ve " +"belirli NIClerde performansı etkileyebilir." + +#: usr/local/www/system_advanced_network.php:261 +#: usr/local/www/system_advanced_network.php:261 +msgid "Hardware Large Receive Offloading" +msgstr "Donanım Büyük Teslimat Yük Azaltımı" + +#: usr/local/www/system_advanced_network.php:264 +#: usr/local/www/system_advanced_network.php:264 +msgid "Disable hardware large receive offload" +msgstr "Donanım büyük teslimat yük azaltımını kapat" + +#: usr/local/www/system_advanced_network.php:265 +#: usr/local/www/system_advanced_network.php:265 +msgid "" +"Checking this option will disable hardware large receive offloading (LRO). " +"This offloading is broken in some hardware drivers, and may impact " +"performance with some specific NICs." +msgstr "" +"Bu seçeneği işaretlemek donanım büyük teslimat yük azatımını (LRO) kapatır. " +"Bu yük azaltımı bazı donanım sürücülerinde bozuktur ve belirli NIClerde " +"performansı etkileyebilir." + +#: usr/local/www/system_advanced_network.php:269 +#: usr/local/www/system_advanced_network.php:269 +msgid "ARP Handling" +msgstr "ARP İşleme" + +#: usr/local/www/system_advanced_network.php:272 +#: usr/local/www/system_advanced_network.php:272 +msgid "Suppress ARP messages" +msgstr "ARP mesajlarını baskıla" + +#: usr/local/www/system_advanced_network.php:273 +#: usr/local/www/system_advanced_network.php:273 +msgid "" +"This option will suppress ARP log messages when multiple interfaces reside " +"on the same broadcast domain" +msgstr "" +"Bu seçenek birden fazla arabirim aynı yayın alanında bulunduğunda ARP " +"günlükleme mesajlarını baskılar" + +#: usr/local/www/system_advanced_notifications.php:118 +#: usr/local/www/system_advanced_notifications.php:124 +#: usr/local/www/system_advanced_notifications.php:127 +#: usr/local/www/system_advanced_notifications.php:133 +#: usr/local/www/system_advanced_notifications.php:127 +#: usr/local/www/system_advanced_notifications.php:133 +#, php-format +msgid "This is a test message from %s. It is safe to ignore this message." +msgstr "Bu %s tarafından gönderilen bir test mesajıdır. Gözardı ediniz." + +#: usr/local/www/system_advanced_notifications.php:131 +#: usr/local/www/system_advanced_notifications.php:140 +#: usr/local/www/system_advanced_notifications.php:140 +msgid "Advanced: Notifications" +msgstr "Gelişmiş: Bildirimler" + +#: usr/local/www/system_advanced_notifications.php:168 +#: usr/local/www/system_advanced_notifications.php:177 +#: usr/local/www/system_advanced_notifications.php:177 +#, fuzzy +msgid "Growl" +msgstr "Growl" + +#: usr/local/www/system_advanced_notifications.php:171 +#: usr/local/www/system_advanced_notifications.php:180 +#: usr/local/www/system_advanced_notifications.php:180 +msgid "Registration Name" +msgstr "Kayıt Adı" + +#: usr/local/www/system_advanced_notifications.php:174 +#: usr/local/www/system_advanced_notifications.php:183 +#: usr/local/www/system_advanced_notifications.php:183 +msgid "Enter the name to register with the Growl server (default: PHP-Growl)." +msgstr "Growl sunucuya gönderilecek ismi giriniz (varsayılan PHP-Growl)." + +#: usr/local/www/system_advanced_notifications.php:178 +#: usr/local/www/system_advanced_notifications.php:187 +#: usr/local/www/system_advanced_notifications.php:187 +msgid "Notification Name" +msgstr "Bildirim adı" + +#: usr/local/www/system_advanced_notifications.php:181 +#: usr/local/www/system_advanced_notifications.php:190 +#: usr/local/www/system_advanced_notifications.php:190 +#, php-format +msgid "Enter a name for the Growl notifications (default: %s growl alert)." +msgstr "Growl bildirimleri için bir isim giriniz (varsayılan %s growl alert)." + +#: usr/local/www/system_advanced_notifications.php:188 +#: usr/local/www/system_advanced_notifications.php:197 +#: usr/local/www/system_advanced_notifications.php:197 +msgid "" +"This is the IP address that you would like to send growl notifications to." +msgstr "Growl bildirimlerini göndermek istediğiniz IP adresi." + +#: usr/local/www/system_advanced_notifications.php:195 +#: usr/local/www/system_advanced_notifications.php:204 +#: usr/local/www/system_advanced_notifications.php:204 +msgid "Enter the password of the remote growl notification device." +msgstr "Uzak Growl bildirim aygıtının parolası" + +#: usr/local/www/system_advanced_notifications.php:203 +#: usr/local/www/system_advanced_notifications.php:212 +#: usr/local/www/system_advanced_notifications.php:212 +msgid "SMTP E-Mail" +msgstr "SMTP E-Posta" + +#: usr/local/www/system_advanced_notifications.php:206 +#: usr/local/www/system_advanced_notifications.php:215 +#: usr/local/www/system_advanced_notifications.php:215 +msgid "E-Mail server" +msgstr "E-posta sunucu" + +#: usr/local/www/system_advanced_notifications.php:209 +#: usr/local/www/system_advanced_notifications.php:218 +#: usr/local/www/system_advanced_notifications.php:218 +msgid "" +"This is the FQDN or IP address of the SMTP E-Mail server to which " +"notifications will be sent." +msgstr "" +"Bildirim mesajlarının gönderileceği SMTP e-posta sunucusunun FQDN veya IP " +"adresidir." + +#: usr/local/www/system_advanced_notifications.php:213 +#: usr/local/www/system_advanced_notifications.php:222 +#: usr/local/www/system_advanced_notifications.php:222 +msgid "SMTP Port of E-Mail server" +msgstr "E-Posta sunucusunun SMTP portu" + +#: usr/local/www/system_advanced_notifications.php:217 +#: usr/local/www/system_advanced_notifications.php:226 +#: usr/local/www/system_advanced_notifications.php:226 +msgid "" +"This is the port of the SMTP E-Mail server, typically 25, 587 (submission) " +"or 465 (smtps, tick ssl/tls checkbox)" +msgstr "" +"SMTP posta sunucusu portu, çoğunlukla 25, 587 (gönderi) veya 465 (SMTPS, " +"SSL/TLS kutusunu işaretleyin) olarak kullanılmaktadır." + +#: usr/local/www/system_advanced_notifications.php:221 +#: usr/local/www/system_advanced_notifications.php:230 +#: usr/local/www/system_advanced_notifications.php:230 +msgid "From e-mail address" +msgstr "Kimden e-posta adresi" + +#: usr/local/www/system_advanced_notifications.php:224 +#: usr/local/www/system_advanced_notifications.php:233 +#: usr/local/www/system_advanced_notifications.php:233 +msgid "This is the e-mail address that will appear in the from field." +msgstr "Kimden alanında görüntülenecek e-posta adresi." + +#: usr/local/www/system_advanced_notifications.php:228 +#: usr/local/www/system_advanced_notifications.php:237 +#: usr/local/www/system_advanced_notifications.php:237 +msgid "Notification E-Mail address" +msgstr "Bildirim e-posta adresi" + +#: usr/local/www/system_advanced_notifications.php:231 +#: usr/local/www/system_advanced_notifications.php:240 +#: usr/local/www/system_advanced_notifications.php:240 +msgid "" +"Enter the e-mail address that you would like email notifications sent to." +msgstr "" +"Bilgilendirme mesajlarının gönderilmesini istediğiniz e-posta adresini " +"giriniz." + +#: usr/local/www/system_advanced_notifications.php:235 +#: usr/local/www/system_advanced_notifications.php:244 +#: usr/local/www/system_advanced_notifications.php:244 +msgid "Notification E-Mail auth username (optional)" +msgstr "Bildirim e-posta kutusu kimlik doğrulama kullanıcı adı (isteğe bağlı)" + +#: usr/local/www/system_advanced_notifications.php:238 +#: usr/local/www/system_advanced_notifications.php:247 +#: usr/local/www/system_advanced_notifications.php:247 +msgid "Enter the e-mail address username for SMTP authentication." +msgstr "" +"SMTP kimlik doğrulama için kullanılacak e-posta kutusu kullanıcı adını " +"giriniz." + +#: usr/local/www/system_advanced_notifications.php:242 +#: usr/local/www/system_advanced_notifications.php:251 +#: usr/local/www/system_advanced_notifications.php:251 +msgid "Notification E-Mail auth password" +msgstr "Bildirim eposta kutusu kimlik doğrulama parolası" + +#: usr/local/www/system_advanced_notifications.php:245 +#: usr/local/www/system_advanced_notifications.php:254 +#: usr/local/www/system_advanced_notifications.php:254 +msgid "Enter the e-mail address password for SMTP authentication." +msgstr "" +"SMTP kimlik doğrulama için kullanılacak e-posta kutusu parolasını giriniz." + +#: usr/local/www/system_advanced_sysctl.php:125 +#: usr/local/www/system_advanced_sysctl.php:125 +msgid "Advanced: System Tunables" +msgstr "Gelişmiş: Sistem Değişkenleri" + +#: usr/local/www/system_advanced_sysctl.php:139 +#: usr/local/www/system_advanced_sysctl.php:139 +msgid "" +"The firewall tunables have changed. You must apply the configuration to " +"take affect." +msgstr "" +"Güvenlik duvarı iç değişkenleri değiştirildi. Değişikliklerin uygulanması " +"için etkinleştirmelisiniz." + +#: usr/local/www/system_advanced_sysctl.php:171 +#: usr/local/www/system_advanced_sysctl.php:171 +msgid "Tunable Name" +msgstr "Değişken Adı" + +#: usr/local/www/system_advanced_sysctl.php:234 +#: usr/local/www/system_advanced_sysctl.php:234 +msgid "Edit system tunable" +msgstr "Sistem değişkenini düzenle" + +#: usr/local/www/system_advanced_sysctl.php:237 +#: usr/local/www/system_advanced_sysctl.php:237 +msgid "Tunable" +msgstr "Değişken" + +#: usr/local/www/system_authservers.php:44 +#: usr/local/www/system_authservers.php:44 +msgid "Authentication Servers" +msgstr "Kimlik Doğrulama Sunucuları" + +#: usr/local/www/system_authservers.php:83 +#: usr/local/www/system_authservers.php:84 +#: usr/local/www/system_authservers.php:84 +msgid "deleted" +msgstr "silindi" + +#: usr/local/www/system_authservers.php:160 +#: usr/local/www/system_authservers.php:183 +#: usr/local/www/system_authservers.php:438 +#: usr/local/www/system_camanager.php:165 +#: usr/local/www/system_camanager.php:177 +#: usr/local/www/system_camanager.php:192 +#: usr/local/www/system_camanager.php:369 +#: usr/local/www/system_certmanager.php:164 +#: usr/local/www/system_certmanager.php:176 +#: usr/local/www/system_certmanager.php:193 +#: usr/local/www/system_certmanager.php:307 +#: usr/local/www/system_certmanager.php:495 +#: usr/local/www/system_certmanager.php:801 +#: usr/local/www/system_crlmanager.php:193 +#: usr/local/www/system_crlmanager.php:200 +#: usr/local/www/system_crlmanager.php:318 +#: usr/local/www/system_usermanager.php:189 +#: usr/local/www/system_usermanager.php:705 +#: usr/local/www/system_certmanager.php:192 +#: usr/local/www/system_certmanager.php:204 +#: usr/local/www/system_certmanager.php:222 +#: usr/local/www/system_certmanager.php:394 +#: usr/local/www/system_certmanager.php:594 +#: usr/local/www/system_certmanager.php:967 +#: usr/local/www/system_usermanager.php:703 +#: usr/local/www/system_crlmanager.php:192 +#: usr/local/www/system_crlmanager.php:199 +#: usr/local/www/system_crlmanager.php:319 +#: usr/local/www/system_crlmanager.php:404 +#: usr/local/www/system_authservers.php:161 +#: usr/local/www/system_authservers.php:184 +#: usr/local/www/system_authservers.php:443 +#: usr/local/www/system_camanager.php:167 +#: usr/local/www/system_camanager.php:179 +#: usr/local/www/system_camanager.php:194 +#: usr/local/www/system_camanager.php:376 +#: usr/local/www/system_certmanager.php:195 +#: usr/local/www/system_certmanager.php:207 +#: usr/local/www/system_certmanager.php:225 +#: usr/local/www/system_certmanager.php:403 +#: usr/local/www/system_certmanager.php:603 +#: usr/local/www/system_certmanager.php:1009 +#: usr/local/www/system_crlmanager.php:192 +#: usr/local/www/system_crlmanager.php:199 +#: usr/local/www/system_crlmanager.php:319 +#: usr/local/www/system_crlmanager.php:404 +#: usr/local/www/system_authservers.php:162 +#: usr/local/www/system_authservers.php:185 +#: usr/local/www/system_authservers.php:450 +#: usr/local/www/system_usermanager.php:189 +#: usr/local/www/system_usermanager.php:703 +msgid "Descriptive name" +msgstr "Açıklayıcı isim" + +#: usr/local/www/system_authservers.php:163 +#: usr/local/www/system_authservers.php:484 +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:489 +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:496 +msgid "Port value" +msgstr "Port değeri" + +#: usr/local/www/system_authservers.php:164 +#: usr/local/www/system_authservers.php:490 +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:495 +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:502 +msgid "Transport" +msgstr "Taşıma" + +#: usr/local/www/system_authservers.php:165 +#: usr/local/www/system_authservers.php:526 +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:531 +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:538 +msgid "Protocol version" +msgstr "Protokol sürümü" + +#: usr/local/www/system_authservers.php:166 +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:168 +msgid "Search level" +msgstr "Arama seviyesi" + +#: usr/local/www/system_authservers.php:167 +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:169 +msgid "User naming Attribute" +msgstr "Kullanıcı isimlendirme niteliği" + +#: usr/local/www/system_authservers.php:168 +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:170 +msgid "Group naming Attribute" +msgstr "Grup isimlendirme niteliği" + +#: usr/local/www/system_authservers.php:169 +#: usr/local/www/system_authservers.php:665 +#: usr/local/www/system_authservers.php:170 +#: usr/local/www/system_authservers.php:670 +#: usr/local/www/system_authservers.php:171 +#: usr/local/www/system_authservers.php:677 +msgid "Group member attribute" +msgstr "Grup üyesi niteliği" + +#: usr/local/www/system_authservers.php:170 +#: usr/local/www/system_authservers.php:171 +#: usr/local/www/system_authservers.php:172 +msgid "Authentication container" +msgstr "Kimlik doğrulama taşıyıcısı" + +#: usr/local/www/system_authservers.php:175 +#: usr/local/www/system_authservers.php:176 +#: usr/local/www/system_authservers.php:177 +msgid "Bind user DN" +msgstr "Kullanıcı DN bağla" + +#: usr/local/www/system_authservers.php:176 +#: usr/local/www/system_authservers.php:177 +#: usr/local/www/system_authservers.php:178 +msgid "Bind Password" +msgstr "Parola bağla" + +#: usr/local/www/system_authservers.php:191 +#: usr/local/www/system_authservers.php:707 +#: usr/local/www/system_authservers.php:192 +#: usr/local/www/system_authservers.php:712 +#: usr/local/www/system_authservers.php:193 +#: usr/local/www/system_authservers.php:719 +msgid "Authentication port value" +msgstr "Kimlik doğrulama port değeri" + +#: usr/local/www/system_authservers.php:197 +#: usr/local/www/system_authservers.php:713 +#: usr/local/www/system_authservers.php:198 +#: usr/local/www/system_authservers.php:718 +#: usr/local/www/system_authservers.php:199 +#: usr/local/www/system_authservers.php:725 +msgid "Accounting port value" +msgstr "Hesaplandırma port değeri" + +#: usr/local/www/system_authservers.php:202 +#: usr/local/www/system_authservers.php:686 +#: usr/local/www/system_authservers.php:203 +#: usr/local/www/system_authservers.php:691 +#: usr/local/www/system_authservers.php:204 +#: usr/local/www/system_authservers.php:698 +msgid "Shared Secret" +msgstr "Paylaşımlı Anahtar" + +#: usr/local/www/system_authservers.php:209 +#: usr/local/www/system_authservers.php:210 +#: usr/local/www/system_authservers.php:211 +msgid "The host name contains invalid characters." +msgstr "Host adı geçersiz karakter içeriyor." + +#: usr/local/www/system_authservers.php:212 +#: usr/local/www/system_authservers.php:213 +#: usr/local/www/system_authservers.php:214 +msgid "An authentication server with the same name already exists." +msgstr "Aynı adla bir kimlik doğrulama sunucusu sistemde mevcut." + +#: usr/local/www/system_authservers.php:382 +#: usr/local/www/system_authservers.php:383 +#: usr/local/www/system_authservers.php:390 +msgid "Please fill the required values." +msgstr "Lütfen gerekli alanları doldurunuz." + +#: usr/local/www/system_authservers.php:388 +#: usr/local/www/system_authservers.php:389 +#: usr/local/www/system_authservers.php:396 +msgid "Please fill the bind username/password." +msgstr "Bağlama Kullanıcı adı ve parola alanlarını doldurunuz." + +#: usr/local/www/system_authservers.php:406 +#: usr/local/www/system_usermanager_settings.php:103 +#: usr/local/www/system_authservers.php:411 +#: usr/local/www/system_authservers.php:418 +#: usr/local/www/system_usermanager_settings.php:103 +msgid "Popup blocker detected. Action aborted." +msgstr "Açılır pencere engelleyicisi tespit edildi. Eylem iptal edildi." + +#: usr/local/www/system_authservers.php:475 +#: usr/local/www/system_authservers.php:480 +#: usr/local/www/system_authservers.php:487 +msgid "LDAP Server Settings" +msgstr "LDAP Sunucu Ayarları" + +#: usr/local/www/system_authservers.php:478 +#: usr/local/www/system_authservers.php:680 +#: usr/local/www/system_authservers.php:483 +#: usr/local/www/system_authservers.php:685 +#: usr/local/www/system_authservers.php:490 +#: usr/local/www/system_authservers.php:692 +msgid "Hostname or IP address" +msgstr "Host adı ya da IP adresi" + +#: usr/local/www/system_authservers.php:505 +#: usr/local/www/vpn_openvpn_client.php:629 +#: usr/local/www/vpn_openvpn_server.php:778 +#: usr/local/www/vpn_openvpn_server.php:851 +#: usr/local/www/vpn_openvpn_client.php:634 +#: usr/local/www/vpn_openvpn_server.php:879 +#: usr/local/www/vpn_openvpn_client.php:652 +#: usr/local/www/system_authservers.php:510 +#: usr/local/www/vpn_openvpn_client.php:671 +#: usr/local/www/system_authservers.php:517 +#: usr/local/www/vpn_openvpn_server.php:906 +msgid "Peer Certificate Authority" +msgstr "Eş Sertifika Otoritesi" + +#: usr/local/www/system_authservers.php:518 +#: usr/local/www/system_authservers.php:523 +#: usr/local/www/system_authservers.php:530 +msgid "This option is used if 'SSL Encrypted' option is choosen." +msgstr "Bu seçenek sadece 'SSL Şifreli' seçeneği açıksa kullanılır." + +#: usr/local/www/system_authservers.php:519 +#: usr/local/www/system_authservers.php:524 +#: usr/local/www/system_authservers.php:531 +msgid "It must match with the CA in the AD otherwise problems will arise." +msgstr "AD'deki CA ile eşleşmelidir, aksi taktirde problem çıkabilir." + +#: usr/local/www/system_authservers.php:541 +#: usr/local/www/system_authservers.php:546 +#: usr/local/www/system_authservers.php:553 +msgid "Search scope" +msgstr "Arama kapsamı" + +#: usr/local/www/system_authservers.php:545 +#: usr/local/www/system_authservers.php:550 +#: usr/local/www/system_authservers.php:557 +msgid "Level:" +msgstr "Seviye:" + +#: usr/local/www/system_authservers.php:560 +#: usr/local/www/system_authservers.php:565 +#: usr/local/www/system_authservers.php:572 +msgid "Base DN:" +msgstr "Temel DN:" + +#: usr/local/www/system_authservers.php:570 +#: usr/local/www/system_authservers.php:575 +#: usr/local/www/system_authservers.php:582 +msgid "Authentication containers" +msgstr "Kimlik doğrulama taşıyıcıları" + +#: usr/local/www/system_authservers.php:574 +#: usr/local/www/system_authservers.php:579 +#: usr/local/www/system_authservers.php:586 +msgid "Containers:" +msgstr "Taşıyıcılar:" + +#: usr/local/www/system_authservers.php:578 +#: usr/local/www/system_authservers.php:583 +#: usr/local/www/system_authservers.php:590 +msgid "" +"Note: Semi-Colon separated. This will be prepended to the search base dn " +"above or you can specify full container path." +msgstr "" +"Not: Noktalı virgülle ayrılmalıdır. Yukarıdaki temel arama DNye eklenir, " +"veya tam taşıyıcı yolu belirtebilirsiniz." + +#: usr/local/www/system_authservers.php:579 +#: usr/local/www/system_authservers.php:584 +#: usr/local/www/system_authservers.php:591 +msgid "Example: CN=Users;DC=example" +msgstr "Örnek: CN=Users;DC=ornek" + +#: usr/local/www/system_authservers.php:580 +#: usr/local/www/system_authservers.php:585 +#: usr/local/www/system_authservers.php:592 +msgid "Example: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com " +msgstr "Örnek: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com " + +#: usr/local/www/system_authservers.php:587 +#: usr/local/www/system_authservers.php:592 +#: usr/local/www/system_authservers.php:599 +msgid "Extended Query" +msgstr "Geniş Sorgu" + +#: usr/local/www/system_authservers.php:597 +#: usr/local/www/system_authservers.php:602 +#: usr/local/www/system_authservers.php:609 +msgid "" +"Example: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,DC=example," +"DC=com " +msgstr "" +"Örnek: " +"CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com " + +#: usr/local/www/system_authservers.php:604 +#: usr/local/www/system_authservers.php:609 +#: usr/local/www/system_authservers.php:616 +msgid "Bind credentials" +msgstr "Bağlama bilgileri" + +#: usr/local/www/system_authservers.php:612 +#: usr/local/www/system_authservers.php:617 +#: usr/local/www/system_authservers.php:624 +msgid "Use anonymous binds to resolve distinguished names" +msgstr "arklı isimleri çözmek için anonim bağlanma kullan" + +#: usr/local/www/system_authservers.php:621 +#: usr/local/www/system_authservers.php:626 +#: usr/local/www/system_authservers.php:633 +msgid "User DN:" +msgstr "Kullanıcı DN:" + +#: usr/local/www/system_authservers.php:637 +#: usr/local/www/system_authservers.php:642 +#: usr/local/www/system_authservers.php:649 +msgid "Initial Template" +msgstr "Başlangıç Şablonu" + +#: usr/local/www/system_authservers.php:653 +#: usr/local/www/system_authservers.php:658 +#: usr/local/www/system_authservers.php:665 +msgid "User naming attribute" +msgstr "Kullanıcı isimlendirme niteliği" + +#: usr/local/www/system_authservers.php:659 +#: usr/local/www/system_authservers.php:664 +#: usr/local/www/system_authservers.php:671 +msgid "Group naming attribute" +msgstr "Grup isimlendirme niteliği" + +#: usr/local/www/system_authservers.php:677 +#: usr/local/www/system_authservers.php:682 +#: usr/local/www/system_authservers.php:689 +msgid "Radius Server Settings" +msgstr "Radius Sunucu Ayarları" + +#: usr/local/www/system_authservers.php:692 +#: usr/local/www/system_authservers.php:697 +#: usr/local/www/system_authservers.php:704 +msgid "Services offered" +msgstr "Sunulan servisler" + +#: usr/local/www/system_authservers.php:737 +#: usr/local/www/system_authservers.php:743 +#: usr/local/www/system_authservers.php:759 +msgid "Server Name" +msgstr "Sunucu Adı" + +#: usr/local/www/system_authservers.php:739 +#: usr/local/www/system_authservers.php:745 +#: usr/local/www/system_authservers.php:761 +msgid "Host Name" +msgstr "Host Adı" + +#: usr/local/www/system_authservers.php:756 +#: usr/local/www/vpn_openvpn_server.php:1479 +#: usr/local/www/vpn_openvpn_server.php:1621 +#: usr/local/www/vpn_openvpn_server.php:1662 +#: usr/local/www/system_authservers.php:764 +#: usr/local/www/system_authservers.php:780 +#: usr/local/www/vpn_openvpn_server.php:1714 +msgid "edit server" +msgstr "sunucu düzenle" + +#: usr/local/www/system_authservers.php:759 +#: usr/local/www/system_authservers.php:767 +#: usr/local/www/system_authservers.php:783 +msgid "Do you really want to delete this Server?" +msgstr "Bu sunucuyu silmek istediğinize emin misiniz?" + +#: usr/local/www/system_authservers.php:760 +#: usr/local/www/vpn_openvpn_server.php:1483 +#: usr/local/www/vpn_openvpn_server.php:1625 +#: usr/local/www/vpn_openvpn_server.php:1666 +#: usr/local/www/system_authservers.php:768 +#: usr/local/www/system_authservers.php:784 +#: usr/local/www/vpn_openvpn_server.php:1718 +msgid "delete server" +msgstr "sunucu sil" + +#: usr/local/www/system_authservers.php:772 +#: usr/local/www/vpn_openvpn_server.php:1496 +#: usr/local/www/vpn_openvpn_server.php:1638 +#: usr/local/www/vpn_openvpn_server.php:1679 +#: usr/local/www/system_authservers.php:782 +#: usr/local/www/system_authservers.php:798 +#: usr/local/www/vpn_openvpn_server.php:1731 +msgid "add server" +msgstr "sunucu ekle" + +#: usr/local/www/system_authservers.php:779 +#: usr/local/www/system_authservers.php:789 +#: usr/local/www/system_authservers.php:805 +msgid "Additional authentication servers can be added here." +msgstr "Buradan kimlik doğrulama sunucuları ekleyebilirsiniz." + +#: usr/local/www/system_camanager.php:44 usr/local/www/system_camanager.php:44 +msgid "Import an existing Certificate Authority" +msgstr "Varolan Sertifika Otoritesini içeri aktar" + +#: usr/local/www/system_camanager.php:45 usr/local/www/system_camanager.php:45 +msgid "Create an internal Certificate Authority" +msgstr "İç Sertifika Sunucusu oluştur" + +#: usr/local/www/system_camanager.php:46 usr/local/www/system_camanager.php:46 +msgid "Create an intermediate Certificate Authority" +msgstr "Ara Sertifika Otoritesi oluştur" + +#: usr/local/www/system_camanager.php:50 usr/local/www/system_camanager.php:51 +msgid "Certificate Authority Manager" +msgstr "Sertifika Yöneticisi" + +#: usr/local/www/system_camanager.php:95 usr/local/www/system_camanager.php:96 +#, php-format +msgid "Certificate Authority %s and its CRLs (if any) successfully deleted" +msgstr "%s Sertifika Otoritesi ve CRLleri başarıyla silindi" + +#: usr/local/www/system_camanager.php:166 +#: usr/local/www/system_camanager.php:402 +#: usr/local/www/system_certmanager.php:165 +#: usr/local/www/system_certmanager.php:511 +#: usr/local/www/system_certmanager.php:193 +#: usr/local/www/system_certmanager.php:610 +#: usr/local/www/system_camanager.php:168 +#: usr/local/www/system_camanager.php:409 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/system_certmanager.php:619 +msgid "Certificate data" +msgstr "Sertifika verisi" + +#: usr/local/www/system_camanager.php:170 +#: usr/local/www/system_camanager.php:172 +msgid "Encrypted private keys are not yet supported." +msgstr "Şifreli özel anahtarlar henüz desteklenmemektedir." + +#: usr/local/www/system_camanager.php:178 +#: usr/local/www/system_camanager.php:194 +#: usr/local/www/system_camanager.php:453 +#: usr/local/www/system_certmanager.php:178 +#: usr/local/www/system_certmanager.php:194 +#: usr/local/www/system_certmanager.php:566 +#: usr/local/www/system_certmanager.php:656 +#: usr/local/www/system_usermanager.php:191 +#: usr/local/www/system_usermanager.php:725 +#: usr/local/www/system_certmanager.php:206 +#: usr/local/www/system_certmanager.php:223 +#: usr/local/www/system_certmanager.php:665 +#: usr/local/www/system_certmanager.php:820 +#: usr/local/www/system_usermanager.php:723 +#: usr/local/www/system_camanager.php:454 +#: usr/local/www/system_camanager.php:180 +#: usr/local/www/system_camanager.php:196 +#: usr/local/www/system_camanager.php:461 +#: usr/local/www/system_certmanager.php:209 +#: usr/local/www/system_certmanager.php:226 +#: usr/local/www/system_certmanager.php:674 +#: usr/local/www/system_certmanager.php:845 +#: usr/local/www/system_usermanager.php:191 +#: usr/local/www/system_usermanager.php:723 +msgid "Key length" +msgstr "Anahtar uzunluğu" + +#: usr/local/www/system_camanager.php:179 +#: usr/local/www/system_camanager.php:195 +#: usr/local/www/system_camanager.php:469 +#: usr/local/www/system_certmanager.php:179 +#: usr/local/www/system_certmanager.php:582 +#: usr/local/www/system_crlmanager.php:366 +#: usr/local/www/system_usermanager.php:192 +#: usr/local/www/system_usermanager.php:739 +#: usr/local/www/vpn_ipsec_phase1.php:758 +#: usr/local/www/vpn_ipsec_phase2.php:619 +#: usr/local/www/system_certmanager.php:208 +#: usr/local/www/system_certmanager.php:698 +#: usr/local/www/system_usermanager.php:737 +#: usr/local/www/system_camanager.php:470 +#: usr/local/www/vpn_ipsec_phase2.php:645 +#: usr/local/www/vpn_ipsec_phase1.php:771 +#: usr/local/www/system_crlmanager.php:367 +#: usr/local/www/vpn_ipsec_phase2.php:741 +#: usr/local/www/vpn_ipsec_phase1.php:768 +#: usr/local/www/system_camanager.php:181 +#: usr/local/www/system_camanager.php:197 +#: usr/local/www/system_camanager.php:493 +#: usr/local/www/system_certmanager.php:211 +#: usr/local/www/system_certmanager.php:723 +#: usr/local/www/system_crlmanager.php:367 +#: usr/local/www/vpn_ipsec_phase1.php:789 +#: usr/local/www/system_usermanager.php:192 +#: usr/local/www/system_usermanager.php:737 +#: usr/local/www/vpn_ipsec_phase2.php:762 +msgid "Lifetime" +msgstr "Yaşam süresi" + +#: usr/local/www/system_camanager.php:180 +#: usr/local/www/system_camanager.php:196 +#: usr/local/www/system_certmanager.php:180 +#: usr/local/www/system_certmanager.php:195 +#: usr/local/www/system_certmanager.php:209 +#: usr/local/www/system_certmanager.php:224 +#: usr/local/www/system_camanager.php:182 +#: usr/local/www/system_camanager.php:198 +#: usr/local/www/system_certmanager.php:212 +#: usr/local/www/system_certmanager.php:227 +msgid "Distinguished name Country Code" +msgstr "Ayrılmış isim Ülke Kodu" + +#: usr/local/www/system_camanager.php:181 +#: usr/local/www/system_camanager.php:197 +#: usr/local/www/system_certmanager.php:181 +#: usr/local/www/system_certmanager.php:196 +#: usr/local/www/system_certmanager.php:210 +#: usr/local/www/system_certmanager.php:225 +#: usr/local/www/system_camanager.php:183 +#: usr/local/www/system_camanager.php:199 +#: usr/local/www/system_certmanager.php:213 +#: usr/local/www/system_certmanager.php:228 +msgid "Distinguished name State or Province" +msgstr "Ayrılmış isim Eyalet" + +#: usr/local/www/system_camanager.php:182 +#: usr/local/www/system_camanager.php:198 +#: usr/local/www/system_certmanager.php:182 +#: usr/local/www/system_certmanager.php:197 +#: usr/local/www/system_certmanager.php:211 +#: usr/local/www/system_certmanager.php:226 +#: usr/local/www/system_camanager.php:184 +#: usr/local/www/system_camanager.php:200 +#: usr/local/www/system_certmanager.php:214 +#: usr/local/www/system_certmanager.php:229 +msgid "Distinguished name City" +msgstr "Ayrılmış isim Şehir" + +#: usr/local/www/system_camanager.php:183 +#: usr/local/www/system_camanager.php:199 +#: usr/local/www/system_certmanager.php:183 +#: usr/local/www/system_certmanager.php:198 +#: usr/local/www/system_certmanager.php:212 +#: usr/local/www/system_certmanager.php:227 +#: usr/local/www/system_camanager.php:185 +#: usr/local/www/system_camanager.php:201 +#: usr/local/www/system_certmanager.php:215 +#: usr/local/www/system_certmanager.php:230 +msgid "Distinguished name Organization" +msgstr "Ayrılmış isim Firma" + +#: usr/local/www/system_camanager.php:184 +#: usr/local/www/system_camanager.php:200 +#: usr/local/www/system_certmanager.php:184 +#: usr/local/www/system_certmanager.php:199 +#: usr/local/www/system_certmanager.php:213 +#: usr/local/www/system_certmanager.php:228 +#: usr/local/www/system_camanager.php:186 +#: usr/local/www/system_camanager.php:202 +#: usr/local/www/system_certmanager.php:216 +#: usr/local/www/system_certmanager.php:231 +msgid "Distinguished name Email Address" +msgstr "Ayrılmış isim E-posta Adresi" + +#: usr/local/www/system_camanager.php:185 +#: usr/local/www/system_camanager.php:201 +#: usr/local/www/system_certmanager.php:185 +#: usr/local/www/system_certmanager.php:200 +#: usr/local/www/system_certmanager.php:214 +#: usr/local/www/system_certmanager.php:229 +#: usr/local/www/system_camanager.php:187 +#: usr/local/www/system_camanager.php:203 +#: usr/local/www/system_certmanager.php:217 +#: usr/local/www/system_certmanager.php:232 +msgid "Distinguished name Common Name" +msgstr "Ayrılmış isim Genel Ad" + +#: usr/local/www/system_camanager.php:193 +#: usr/local/www/system_camanager.php:436 +#: usr/local/www/system_camanager.php:437 +#: usr/local/www/system_camanager.php:195 +#: usr/local/www/system_camanager.php:444 +msgid "Signing Certificate Authority" +msgstr "İşaretleyen Sertifika Otoritesi" + +#: usr/local/www/system_camanager.php:348 +#: usr/local/www/system_certmanager.php:458 +#: usr/local/www/system_crlmanager.php:283 +#: usr/local/www/system_certmanager.php:557 +#: usr/local/www/system_crlmanager.php:284 +#: usr/local/www/system_camanager.php:355 +#: usr/local/www/system_certmanager.php:566 +#: usr/local/www/system_crlmanager.php:284 +msgid "CAs" +msgstr "CA'lar" + +#: usr/local/www/system_camanager.php:349 +#: usr/local/www/system_camanager.php:568 +#: usr/local/www/system_certmanager.php:459 +#: usr/local/www/system_crlmanager.php:284 +#: usr/local/www/system_crlmanager.php:489 +#: usr/local/www/system_certmanager.php:558 +#: usr/local/www/system_camanager.php:569 +#: usr/local/www/system_crlmanager.php:285 +#: usr/local/www/system_crlmanager.php:522 +#: usr/local/www/system_camanager.php:356 +#: usr/local/www/system_camanager.php:593 +#: usr/local/www/system_certmanager.php:567 +#: usr/local/www/system_crlmanager.php:285 +#: usr/local/www/system_crlmanager.php:522 +msgid "Certificates" +msgstr "Sertifikalar" + +#: usr/local/www/system_camanager.php:350 +#: usr/local/www/system_certmanager.php:460 +#: usr/local/www/system_crlmanager.php:285 +#: usr/local/www/system_certmanager.php:559 +#: usr/local/www/system_crlmanager.php:286 +#: usr/local/www/system_camanager.php:357 +#: usr/local/www/system_certmanager.php:568 +#: usr/local/www/system_crlmanager.php:286 +msgid "Certificate Revocation" +msgstr "Sertifika İptal" + +#: usr/local/www/system_camanager.php:376 +#: usr/local/www/system_certmanager.php:475 +#: usr/local/www/system_crlmanager.php:300 +#: usr/local/www/system_certmanager.php:574 +#: usr/local/www/system_crlmanager.php:301 +#: usr/local/www/system_camanager.php:383 +#: usr/local/www/system_certmanager.php:583 +#: usr/local/www/system_crlmanager.php:301 +msgid "Method" +msgstr "Yöntem" + +#: usr/local/www/system_camanager.php:398 +#: usr/local/www/system_camanager.php:405 +msgid "Existing Certificate Authority" +msgstr "Varolan Sertifika Otoritesi" + +#: usr/local/www/system_camanager.php:410 +#: usr/local/www/system_camanager.php:417 +msgid "Certificate Private Key" +msgstr "Sertifika Özel Anahtarı" + +#: usr/local/www/system_camanager.php:410 +#: usr/local/www/system_camanager.php:417 +msgid "(optional)" +msgstr "(isteğe bağlı)" + +#: usr/local/www/system_camanager.php:414 +#: usr/local/www/system_camanager.php:421 +msgid "" +"Paste the private key for the above certificate here. This is optional in " +"most cases, but required if you need to generate a Certificate Revocation " +"List (CRL)." +msgstr "" +"Üsteki sertifikanın özel anahtarını buraya yapıştırın. Çoğu durumda isteğe " +"bağlıdır ama eğer Sertifika İptal Listesi (CRL) oluşturmak istiyorsanız " +"zorunludur." + +#: usr/local/www/system_camanager.php:420 +#: usr/local/www/system_crlmanager.php:374 +#: usr/local/www/system_crlmanager.php:375 +#: usr/local/www/system_crlmanager.php:375 +msgid "Serial" +msgstr "Seri" + +#: usr/local/www/system_camanager.php:433 +#: usr/local/www/system_camanager.php:434 +#: usr/local/www/system_camanager.php:441 +msgid "Internal Certificate Authority" +msgstr "İç Sertifika Otoritesi" + +#: usr/local/www/system_camanager.php:472 +#: usr/local/www/system_certmanager.php:585 +#: usr/local/www/system_crlmanager.php:369 +#: usr/local/www/system_certmanager.php:701 +#: usr/local/www/system_camanager.php:473 +#: usr/local/www/system_crlmanager.php:370 +#: usr/local/www/system_camanager.php:496 +#: usr/local/www/system_certmanager.php:726 +#: usr/local/www/system_crlmanager.php:370 +msgid "days" +msgstr "gün" + +#: usr/local/www/system_camanager.php:480 +#: usr/local/www/system_certmanager.php:593 +#: usr/local/www/system_certmanager.php:676 +#: usr/local/www/system_certmanager.php:709 +#: usr/local/www/system_certmanager.php:842 +#: usr/local/www/system_camanager.php:481 +#: usr/local/www/system_camanager.php:504 +#: usr/local/www/system_certmanager.php:734 +#: usr/local/www/system_certmanager.php:883 +msgid "Country Code" +msgstr "Ülke Kodu" + +#: usr/local/www/system_camanager.php:494 +#: usr/local/www/system_certmanager.php:599 +#: usr/local/www/system_certmanager.php:690 +#: usr/local/www/system_certmanager.php:715 +#: usr/local/www/system_certmanager.php:856 +#: usr/local/www/system_camanager.php:495 +#: usr/local/www/system_camanager.php:519 +#: usr/local/www/system_certmanager.php:740 +#: usr/local/www/system_certmanager.php:898 +msgid "State or Province" +msgstr "Eyalet" + +#: usr/local/www/system_camanager.php:498 +#: usr/local/www/system_camanager.php:508 +#: usr/local/www/system_camanager.php:518 +#: usr/local/www/system_camanager.php:528 +#: usr/local/www/system_camanager.php:538 +#: usr/local/www/system_camanager.php:499 +#: usr/local/www/system_camanager.php:509 +#: usr/local/www/system_camanager.php:519 +#: usr/local/www/system_camanager.php:529 +#: usr/local/www/system_camanager.php:539 +#: usr/local/www/system_camanager.php:523 +#: usr/local/www/system_camanager.php:533 +#: usr/local/www/system_camanager.php:543 +#: usr/local/www/system_camanager.php:553 +#: usr/local/www/system_camanager.php:563 +msgid "ex:" +msgstr "örn:" + +#: usr/local/www/system_camanager.php:500 +#: usr/local/www/system_certmanager.php:696 +#: usr/local/www/system_certmanager.php:862 +#: usr/local/www/system_camanager.php:501 +#: usr/local/www/system_camanager.php:525 +#: usr/local/www/system_certmanager.php:904 +msgid "Texas" +msgstr "Teksas" + +#: usr/local/www/system_camanager.php:504 +#: usr/local/www/system_certmanager.php:605 +#: usr/local/www/system_certmanager.php:700 +#: usr/local/www/system_certmanager.php:721 +#: usr/local/www/system_certmanager.php:866 +#: usr/local/www/system_camanager.php:505 +#: usr/local/www/system_camanager.php:529 +#: usr/local/www/system_certmanager.php:746 +#: usr/local/www/system_certmanager.php:908 +msgid "City" +msgstr "Şehir" + +#: usr/local/www/system_camanager.php:510 +#: usr/local/www/system_certmanager.php:706 +#: usr/local/www/system_certmanager.php:872 +#: usr/local/www/system_camanager.php:511 +#: usr/local/www/system_camanager.php:535 +#: usr/local/www/system_certmanager.php:914 +#, fuzzy +msgid "Austin" +msgstr "Austin" + +#: usr/local/www/system_camanager.php:514 +#: usr/local/www/system_certmanager.php:611 +#: usr/local/www/system_certmanager.php:710 +#: usr/local/www/system_certmanager.php:727 +#: usr/local/www/system_certmanager.php:876 +#: usr/local/www/system_camanager.php:515 +#: usr/local/www/system_camanager.php:539 +#: usr/local/www/system_certmanager.php:752 +#: usr/local/www/system_certmanager.php:918 +msgid "Organization" +msgstr "Kurum" + +#: usr/local/www/system_camanager.php:520 +#: usr/local/www/system_certmanager.php:716 +#: usr/local/www/system_certmanager.php:882 +#: usr/local/www/system_camanager.php:521 +#: usr/local/www/system_camanager.php:545 +#: usr/local/www/system_certmanager.php:924 +msgid "My Company Inc." +msgstr "Firmam Ltd. Şti." + +#: usr/local/www/system_camanager.php:530 +#: usr/local/www/system_camanager.php:531 +#: usr/local/www/system_camanager.php:555 +msgid "admin@mycompany.com" +msgstr "admin@sirketim.com" + +#: usr/local/www/system_camanager.php:540 +#: usr/local/www/system_camanager.php:541 +#: usr/local/www/system_camanager.php:565 +msgid "internal-ca" +msgstr "iç sertifika" + +#: usr/local/www/system_camanager.php:566 +#: usr/local/www/system_crlmanager.php:488 +#: usr/local/www/system_camanager.php:567 +#: usr/local/www/system_crlmanager.php:521 +#: usr/local/www/system_camanager.php:591 +#: usr/local/www/system_crlmanager.php:521 +msgid "Internal" +msgstr "iç" + +#: usr/local/www/system_camanager.php:567 +#: usr/local/www/system_certmanager.php:855 +#: usr/local/www/system_certmanager.php:1021 +#: usr/local/www/system_camanager.php:568 +#: usr/local/www/system_camanager.php:592 +#: usr/local/www/system_certmanager.php:1063 +msgid "Issuer" +msgstr "Sağlayıcı" + +#: usr/local/www/system_camanager.php:569 +#: usr/local/www/system_certmanager.php:856 +#: usr/local/www/system_certmanager.php:1022 +#: usr/local/www/system_camanager.php:570 +#: usr/local/www/system_camanager.php:594 +#: usr/local/www/system_certmanager.php:1064 +msgid "Distinguished Name" +msgstr "Ayrılmış İsim" + +#: usr/local/www/system_camanager.php:579 +#: usr/local/www/system_certmanager.php:869 +#: usr/local/www/system_certmanager.php:1036 +#: usr/local/www/system_camanager.php:580 +#: usr/local/www/system_camanager.php:605 +#: usr/local/www/system_certmanager.php:1079 +msgid "self-signed" +msgstr "kendinden imzalı" + +#: usr/local/www/system_camanager.php:581 +#: usr/local/www/system_certmanager.php:871 +#: usr/local/www/system_certmanager.php:1038 +#: usr/local/www/system_camanager.php:582 +#: usr/local/www/system_camanager.php:607 +#: usr/local/www/system_certmanager.php:1081 +msgid "external" +msgstr "dış" + +#: usr/local/www/system_camanager.php:626 +#: usr/local/www/system_camanager.php:627 +#: usr/local/www/system_camanager.php:665 +msgid "edit CA" +msgstr "CA düzenle" + +#: usr/local/www/system_camanager.php:629 +#: usr/local/www/system_camanager.php:630 +#: usr/local/www/system_camanager.php:668 +msgid "export CA cert" +msgstr "sertifikayı dışarı ver" + +#: usr/local/www/system_camanager.php:633 +#: usr/local/www/system_camanager.php:634 +#: usr/local/www/system_camanager.php:672 +msgid "export CA private key" +msgstr "özel anahtarı dışarı ver" + +#: usr/local/www/system_camanager.php:636 +#: usr/local/www/system_camanager.php:637 +#: usr/local/www/system_camanager.php:675 +msgid "" +"Do you really want to delete this Certificate Authority and its CRLs, and " +"unreference any associated certificates?" +msgstr "" +"Bu sertifika otoritesini ve bununla ilişkilendirilmiş sertifikaları silmek " +"istediğinize emin misiniz?" + +#: usr/local/www/system_camanager.php:637 +#: usr/local/www/system_camanager.php:638 +#: usr/local/www/system_camanager.php:676 +msgid "delete ca" +msgstr "CA sil" + +#: usr/local/www/system_camanager.php:649 +#: usr/local/www/system_certmanager.php:952 +#: usr/local/www/system_certmanager.php:1132 +#: usr/local/www/system_camanager.php:650 +#: usr/local/www/system_certmanager.php:1135 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1191 +msgid "add or import ca" +msgstr "CA ekle veya içeri aktar" + +#: usr/local/www/system_camanager.php:649 +#: usr/local/www/system_certmanager.php:952 +#: usr/local/www/system_certmanager.php:1132 +#: usr/local/www/system_camanager.php:650 +#: usr/local/www/system_certmanager.php:1135 +#: usr/local/www/system_camanager.php:688 +#: usr/local/www/system_certmanager.php:1191 +msgid "add ca" +msgstr "CA ekle" + +#: usr/local/www/system_camanager.php:656 +#: usr/local/www/system_camanager.php:657 +#: usr/local/www/system_camanager.php:695 +msgid "Additional trusted Certificate Authorities can be added here." +msgstr "Ek Güvenilen Sertifika Otoriteleri burada eklenebilir." + +#: usr/local/www/system_certmanager.php:44 +#: usr/local/www/system_certmanager.php:44 +msgid "Import an existing Certificate" +msgstr "Varolan bir sertifikayı içeri aktar" + +#: usr/local/www/system_certmanager.php:45 +#: usr/local/www/system_certmanager.php:45 +msgid "Create an internal Certificate" +msgstr "İç sertifika oluştur" + +#: usr/local/www/system_certmanager.php:46 +#: usr/local/www/system_certmanager.php:46 +msgid "Create a Certificate Signing Request" +msgstr "Sertifika İmzalama Talebi oluştur" + +#: usr/local/www/system_certmanager.php:51 +#: usr/local/www/system_certmanager.php:56 +#: usr/local/www/system_certmanager.php:57 +msgid "Certificate Manager" +msgstr "Sertifika Yöneticisi" + +#: usr/local/www/system_certmanager.php:57 +#: usr/local/www/system_certmanager.php:62 +#: usr/local/www/system_certmanager.php:63 +msgid "Choose an existing certificate" +msgstr "Varolan sertifika seç" + +#: usr/local/www/system_certmanager.php:96 +#: usr/local/www/system_certmanager.php:101 +#: usr/local/www/system_certmanager.php:102 +#, php-format +msgid "Certificate %s successfully deleted" +msgstr "% sertifikası başarıyla silindi" + +#: usr/local/www/system_certmanager.php:166 +#: usr/local/www/system_certmanager.php:194 +#: usr/local/www/system_certmanager.php:197 +msgid "Key data" +msgstr "Anahtar veri" + +#: usr/local/www/system_certmanager.php:177 +#: usr/local/www/system_certmanager.php:549 +#: usr/local/www/system_usermanager.php:190 +#: usr/local/www/system_usermanager.php:711 +#: usr/local/www/system_certmanager.php:205 +#: usr/local/www/system_certmanager.php:648 +#: usr/local/www/system_usermanager.php:709 +#: usr/local/www/system_certmanager.php:208 +#: usr/local/www/system_certmanager.php:657 +#: usr/local/www/system_usermanager.php:190 +#: usr/local/www/system_usermanager.php:709 +msgid "Certificate authority" +msgstr "Sertifika otoritesi" + +#: usr/local/www/system_certmanager.php:205 +#: usr/local/www/system_certmanager.php:234 +#: usr/local/www/system_certmanager.php:237 +msgid "Existing Certificate Choice" +msgstr "Varolan Sertifika Seçimi" + +#: usr/local/www/system_certmanager.php:300 +#: usr/local/www/system_certmanager.php:796 +#: usr/local/www/system_certmanager.php:840 +#: usr/local/www/system_certmanager.php:387 +#: usr/local/www/system_certmanager.php:962 +#: usr/local/www/system_certmanager.php:1006 +#: usr/local/www/system_certmanager.php:396 +#: usr/local/www/system_certmanager.php:1004 +#: usr/local/www/system_certmanager.php:1048 +msgid "Update" +msgstr "Güncelle" + +#: usr/local/www/system_certmanager.php:308 +#: usr/local/www/system_certmanager.php:822 +#: usr/local/www/system_certmanager.php:395 +#: usr/local/www/system_certmanager.php:988 +#: usr/local/www/system_certmanager.php:404 +#: usr/local/www/system_certmanager.php:1030 +msgid "Final Certificate data" +msgstr "Son Sertifika verisi" + +#: usr/local/www/system_certmanager.php:328 +#: usr/local/www/system_certmanager.php:415 +#: usr/local/www/system_certmanager.php:424 +#, php-format +msgid "The certificate modulus does not match the signing request modulus." +msgstr "Sertifika konusu imzalama isteği konusuyla eşleşmiyor." + +#: usr/local/www/system_certmanager.php:507 +#: usr/local/www/system_certmanager.php:606 +#: usr/local/www/system_certmanager.php:615 +msgid "Import Certificate" +msgstr "Sertifika İçeri Aktar" + +#: usr/local/www/system_certmanager.php:519 +#: usr/local/www/system_certmanager.php:618 +#: usr/local/www/system_certmanager.php:627 +msgid "Private key data" +msgstr "Özel anahtar verisi" + +#: usr/local/www/system_certmanager.php:523 +#: usr/local/www/system_certmanager.php:622 +#: usr/local/www/system_certmanager.php:631 +msgid "Paste a private key in X.509 PEM format here." +msgstr "Özel anahtarı x.509 PEM formatında yapıştırınız." + +#: usr/local/www/system_certmanager.php:533 +#: usr/local/www/system_certmanager.php:632 +#: usr/local/www/system_certmanager.php:641 +msgid "Internal Certificate" +msgstr "İç Sertifika" + +#: usr/local/www/system_certmanager.php:540 +#: usr/local/www/system_certmanager.php:639 +#: usr/local/www/system_certmanager.php:648 +msgid "No internal Certificate Authorities have been defined. You must" +msgstr "" +"İç Sertifika sunucusu tanımlanmadı. Bir iç sertifika oluşturmadan önce bir " + +#: usr/local/www/system_certmanager.php:542 +#: usr/local/www/system_certmanager.php:641 +#: usr/local/www/system_certmanager.php:650 +msgid "an internal CA before creating an internal certificate." +msgstr "manız gerekir." + +#: usr/local/www/system_certmanager.php:623 +#: usr/local/www/system_certmanager.php:726 +#: usr/local/www/system_certmanager.php:739 +#: usr/local/www/system_certmanager.php:892 +#: usr/local/www/system_certmanager.php:764 +#: usr/local/www/system_certmanager.php:934 +msgid "webadmin@mycompany.com" +msgstr "webadmin@test.com" + +#: usr/local/www/system_certmanager.php:637 +#: usr/local/www/system_certmanager.php:736 +#: usr/local/www/system_certmanager.php:753 +#: usr/local/www/system_certmanager.php:902 +#: usr/local/www/system_certmanager.php:778 +#: usr/local/www/system_certmanager.php:944 +msgid "www.example.com" +msgstr "www.test.com" + +#: usr/local/www/system_certmanager.php:653 +#: usr/local/www/system_certmanager.php:817 +#: usr/local/www/system_certmanager.php:842 +msgid "External Signing Request" +msgstr "Dış İmzalama Talebi" + +#: usr/local/www/system_certmanager.php:749 +#: usr/local/www/system_certmanager.php:915 +#: usr/local/www/system_certmanager.php:957 +msgid "Choose an Existing Certificate" +msgstr "Varolan Sertifikayı Seç" + +#: usr/local/www/system_certmanager.php:752 +#: usr/local/www/system_certmanager.php:918 +#: usr/local/www/system_certmanager.php:960 +msgid "Existing Certificates" +msgstr "Mevcut Sertifikalar" + +#: usr/local/www/system_certmanager.php:810 +#: usr/local/www/system_certmanager.php:976 +#: usr/local/www/system_certmanager.php:1018 +msgid "Complete Signing Request" +msgstr "Tam İmzalama Talebi" + +#: usr/local/www/system_certmanager.php:814 +#: usr/local/www/system_certmanager.php:980 +#: usr/local/www/system_certmanager.php:1022 +msgid "Signing Request data" +msgstr "İmzalama Talep verisi" + +#: usr/local/www/system_certmanager.php:818 +#: usr/local/www/system_certmanager.php:984 +#: usr/local/www/system_certmanager.php:1026 +msgid "" +"Copy the certificate signing data from here and forward it to your " +"certificate authority for signing." +msgstr "" +"Sertifika imzalama verisini buradan kopyalayın ve imzalama için sertifika " +"otoritenize gönderin." + +#: usr/local/www/system_certmanager.php:826 +#: usr/local/www/system_certmanager.php:992 +#: usr/local/www/system_certmanager.php:1034 +msgid "Paste the certificate received from your certificate authority here." +msgstr "Sertifika otoritesinden alınan sertifikayı buraya yapıştırın." + +#: usr/local/www/system_certmanager.php:857 +#: usr/local/www/system_crlmanager.php:490 +#: usr/local/www/system_certmanager.php:1023 +#: usr/local/www/system_crlmanager.php:523 +#: usr/local/www/system_certmanager.php:1065 +#: usr/local/www/system_crlmanager.php:523 +msgid "In Use" +msgstr "Kullanımda" + +#: usr/local/www/system_certmanager.php:877 +#: usr/local/www/system_certmanager.php:1044 +#: usr/local/www/system_certmanager.php:1087 +msgid "external - signature pending" +msgstr "dış - imza bekleniyor" + +#: usr/local/www/system_certmanager.php:926 +#: usr/local/www/system_usermanager.php:658 +#: usr/local/www/system_certmanager.php:1103 +#: usr/local/www/system_usermanager.php:656 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1162 +#: usr/local/www/system_usermanager.php:656 +msgid "export cert" +msgstr "sertifikayı dışarı aktar" + +#: usr/local/www/system_certmanager.php:926 +#: usr/local/www/system_certmanager.php:929 +#: usr/local/www/system_certmanager.php:1103 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1162 +#: usr/local/www/system_certmanager.php:1165 +msgid "export ca" +msgstr "sertifika otoritesini dışarı aktar" + +#: usr/local/www/system_certmanager.php:929 +#: usr/local/www/system_certmanager.php:1106 +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1165 +msgid "export key" +msgstr "anahtarı dışarı aktar" + +#: usr/local/www/system_certmanager.php:932 +#: usr/local/www/system_certmanager.php:1112 +#: usr/local/www/system_certmanager.php:1115 +#: usr/local/www/system_certmanager.php:1171 +msgid "Do you really want to delete this Certificate?" +msgstr "Bu sertifikayı silmek istediğinize emin misiniz?" + +#: usr/local/www/system_certmanager.php:933 +#: usr/local/www/system_usermanager.php:661 +#: usr/local/www/system_certmanager.php:1113 +#: usr/local/www/system_usermanager.php:659 +#: usr/local/www/system_certmanager.php:1116 +#: usr/local/www/system_certmanager.php:1172 +#: usr/local/www/system_usermanager.php:659 +msgid "delete cert" +msgstr "sertifikayı sil" + +#: usr/local/www/system_certmanager.php:939 +#: usr/local/www/system_certmanager.php:1119 +#: usr/local/www/system_certmanager.php:1122 +#: usr/local/www/system_certmanager.php:1178 +msgid "update csr" +msgstr "CSRyi güncelle" + +#: usr/local/www/system_certmanager.php:958 +#: usr/local/www/system_certmanager.php:1138 +#: usr/local/www/system_certmanager.php:1141 +#: usr/local/www/system_certmanager.php:1197 +msgid "Note: You can only delete a certificate if it is not currently in use." +msgstr "Not: Sadece kullanımda olmayan sertifikaları silebilirsiniz." + +#: usr/local/www/system_crlmanager.php:46 +#: usr/local/www/system_crlmanager.php:46 +msgid "Certificate Revocation List Manager" +msgstr "Sertifika İptal Listesi Yöneticisi" + +#: usr/local/www/system_crlmanager.php:49 +#: usr/local/www/system_crlmanager.php:49 +msgid "Create an internal Certificate Revocation List" +msgstr "İç Sertifika İptal Listesi oluştur" + +#: usr/local/www/system_crlmanager.php:50 +#: usr/local/www/system_crlmanager.php:50 +msgid "Import an existing Certificate Revocation List" +msgstr "Sertifika İptal Listesini içeri aktar" + +#: usr/local/www/system_crlmanager.php:86 +#: usr/local/www/system_crlmanager.php:86 +msgid "Invalid CRL reference." +msgstr "Geçersiz Sertifika İptal Listesi referansı." + +#: usr/local/www/system_crlmanager.php:92 +#: usr/local/www/system_crlmanager.php:92 +#, php-format +msgid "Certificate Revocation List %s is in use and cannot be deleted" +msgstr "Sertifika İptal Listesi %s kullanımda ve silinemez." + +#: usr/local/www/system_crlmanager.php:98 +#: usr/local/www/system_crlmanager.php:98 +#, php-format +msgid "Certificate Revocation List %s successfully deleted" +msgstr "Sertifika İptal Listesi %s başarıyla silindi." + +#: usr/local/www/system_crlmanager.php:136 +#: usr/local/www/system_crlmanager.php:136 +msgid "Both the Certificate and CRL must be specified." +msgstr "Sertifika ve İptal listesi belirtilmelidir." + +#: usr/local/www/system_crlmanager.php:140 +#: usr/local/www/system_crlmanager.php:140 +msgid "CA mismatch between the Certificate and CRL. Unable to Revoke." +msgstr "Sertifika ve Sertifika İptal listesinde uyumsuzluk. İptal edilemiyor." + +#: usr/local/www/system_crlmanager.php:143 +#: usr/local/www/system_crlmanager.php:143 +msgid "Cannot revoke certificates for an imported/external CRL." +msgstr "İçeriye aktarılmış veya dış CRL sertifikaları iptal edilemez." + +#: usr/local/www/system_crlmanager.php:175 +#: usr/local/www/system_crlmanager.php:177 +#: usr/local/www/system_crlmanager.php:175 +#: usr/local/www/system_crlmanager.php:177 +#, php-format +msgid "Deleted Certificate %s from CRL %s" +msgstr "CRL %1$s içindeki %2$s sertifikası silindi." + +#: usr/local/www/system_crlmanager.php:179 +#: usr/local/www/system_crlmanager.php:179 +#, php-format +msgid "Failed to delete Certificate %s from CRL %s" +msgstr "CRL %1$s içindeki %2$s sertifikası silinemedi." + +#: usr/local/www/system_crlmanager.php:194 +#: usr/local/www/system_crlmanager.php:193 +#: usr/local/www/system_crlmanager.php:193 +msgid "Certificate Revocation List data" +msgstr "Sertifika İptal Listesi verisi" + +#: usr/local/www/system_crlmanager.php:201 +#: usr/local/www/system_crlmanager.php:324 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/vpn_openvpn_server.php:287 +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/system_crlmanager.php:200 +#: usr/local/www/system_crlmanager.php:325 +#: usr/local/www/vpn_openvpn_server.php:288 +#: usr/local/www/vpn_openvpn_client.php:220 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/system_crlmanager.php:200 +#: usr/local/www/system_crlmanager.php:325 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/vpn_openvpn_server.php:309 +msgid "Certificate Authority" +msgstr "Sertifika Otoritesi" + +#: usr/local/www/system_crlmanager.php:345 +#: usr/local/www/system_crlmanager.php:346 +#: usr/local/www/system_crlmanager.php:346 +msgid "Existing Certificate Revocation List" +msgstr "Varolan Sertifika İptal Listesi" + +#: usr/local/www/system_crlmanager.php:349 +#: usr/local/www/system_crlmanager.php:350 +#: usr/local/www/system_crlmanager.php:410 +#: usr/local/www/system_crlmanager.php:350 +#: usr/local/www/system_crlmanager.php:410 +msgid "CRL data" +msgstr "CRL verisi" + +#: usr/local/www/system_crlmanager.php:353 +#: usr/local/www/system_crlmanager.php:354 +#: usr/local/www/system_crlmanager.php:414 +#: usr/local/www/system_crlmanager.php:354 +#: usr/local/www/system_crlmanager.php:414 +msgid "Paste a Certificate Revocation List in X.509 CRL format here." +msgstr "Sertifika İptal Listesini x.509 CRL formatında bu alana yapıştırınız." + +#: usr/local/www/system_crlmanager.php:363 +#: usr/local/www/system_crlmanager.php:364 +#: usr/local/www/system_crlmanager.php:364 +msgid "Internal Certificate Revocation List" +msgstr "İç Sertifika İptal Listesi" + +#: usr/local/www/system_crlmanager.php:370 +#: usr/local/www/system_crlmanager.php:371 +#: usr/local/www/system_crlmanager.php:371 +msgid "Default: 9999" +msgstr "Varsayılan: 9999" + +#: usr/local/www/system_crlmanager.php:378 +#: usr/local/www/system_crlmanager.php:379 +#: usr/local/www/system_crlmanager.php:379 +msgid "Default: 0" +msgstr "Varsayılan: 0" + +#: usr/local/www/system_crlmanager.php:401 +#: usr/local/www/system_crlmanager.php:434 +#: usr/local/www/system_crlmanager.php:434 +msgid "Currently Revoked Certificates for CRL" +msgstr "CRL iptal edilmiş sertifikalar listesi" + +#: usr/local/www/system_crlmanager.php:405 +#: usr/local/www/system_crlmanager.php:438 +#: usr/local/www/system_crlmanager.php:438 +msgid "Certificate Name" +msgstr "Sertifika Adı" + +#: usr/local/www/system_crlmanager.php:406 +#: usr/local/www/system_crlmanager.php:439 +#: usr/local/www/system_crlmanager.php:439 +msgid "Revocation Reason" +msgstr "İptal Sebebi" + +#: usr/local/www/system_crlmanager.php:407 +#: usr/local/www/system_crlmanager.php:440 +#: usr/local/www/system_crlmanager.php:440 +msgid "Revoked At" +msgstr "İptal Zamanı" + +#: usr/local/www/system_crlmanager.php:416 +#: usr/local/www/system_crlmanager.php:449 +#: usr/local/www/system_crlmanager.php:449 +msgid "No Certificates Found for this CRL." +msgstr "Sertifika İptal Listesinde Sertifika bulunamadı." + +#: usr/local/www/system_crlmanager.php:435 +#: usr/local/www/system_crlmanager.php:468 +#: usr/local/www/system_crlmanager.php:468 +msgid "Do you really want to delete this Certificate from the CRL?" +msgstr "" +"Bu sertifikayı Sertifika İptal Listesinden silmek istediğinize emin misiniz?" + +#: usr/local/www/system_crlmanager.php:436 +#: usr/local/www/system_crlmanager.php:469 +#: usr/local/www/system_crlmanager.php:469 +msgid "Delete this certificate from the CRL " +msgstr "Bu sertifikayı sertifika iptal listesinden sil " + +#: usr/local/www/system_crlmanager.php:453 +#: usr/local/www/system_crlmanager.php:486 +#: usr/local/www/system_crlmanager.php:486 +msgid "No Certificates Found for this CA." +msgstr "Sertifika otoritesi için sertifika bulunamadı." + +#: usr/local/www/system_crlmanager.php:460 +#: usr/local/www/system_crlmanager.php:493 +#: usr/local/www/system_crlmanager.php:493 +msgid "Choose a Certificate to Revoke" +msgstr "İptal edilecek sertifikayı seçiniz." + +#: usr/local/www/system_crlmanager.php:465 +#: usr/local/www/system_crlmanager.php:498 +#: usr/local/www/system_crlmanager.php:498 +msgid "Reason" +msgstr "Sebep" + +#: usr/local/www/system_crlmanager.php:527 +#: usr/local/www/system_crlmanager.php:560 +#: usr/local/www/system_crlmanager.php:560 +#, php-format +msgid "Add or Import CRL for %s" +msgstr "%s den CRL içeri aktar yada ekle" + +#: usr/local/www/system_crlmanager.php:527 +#: usr/local/www/system_crlmanager.php:531 +#: usr/local/www/system_crlmanager.php:560 +#: usr/local/www/system_crlmanager.php:564 +#: usr/local/www/system_crlmanager.php:560 +#: usr/local/www/system_crlmanager.php:564 +msgid "add crl" +msgstr "CRL ekle" + +#: usr/local/www/system_crlmanager.php:531 +#: usr/local/www/system_crlmanager.php:564 +#: usr/local/www/system_crlmanager.php:564 +#, php-format +msgid "Import CRL for %s" +msgstr "%s den CRL içeri aktar" + +#: usr/local/www/system_crlmanager.php:552 +#: usr/local/www/system_crlmanager.php:585 +#: usr/local/www/system_crlmanager.php:585 +msgid "Export CRL" +msgstr "CRL dışarı aktar" + +#: usr/local/www/system_crlmanager.php:557 +#: usr/local/www/system_crlmanager.php:590 +#: usr/local/www/system_crlmanager.php:594 +#: usr/local/www/system_crlmanager.php:590 +#: usr/local/www/system_crlmanager.php:594 +msgid "Edit CRL" +msgstr "CRL düzenle" + +#: usr/local/www/system_crlmanager.php:561 +#: usr/local/www/system_crlmanager.php:598 +#: usr/local/www/system_crlmanager.php:598 +msgid "Do you really want to delete this Certificate Revocation List?" +msgstr "Sertifika İptal Listesini silmek istediğinize emin misiniz?" + +#: usr/local/www/system_crlmanager.php:562 +#: usr/local/www/system_crlmanager.php:599 +#: usr/local/www/system_crlmanager.php:599 +msgid "Delete CRL" +msgstr "CRL sil" + +#: usr/local/www/system_crlmanager.php:582 +#: usr/local/www/system_crlmanager.php:619 +#: usr/local/www/system_crlmanager.php:619 +msgid "Additional Certificate Revocation Lists can be added here." +msgstr "Ek Sertifika İptal Listelerini buradan ekleyebilirsiniz." + +#: usr/local/www/system_gateway_groups.php:75 +#: usr/local/www/system_gateway_groups.php:76 +#: usr/local/www/system_gateway_groups.php:76 +msgid "removed gateway group" +msgstr "ağ geçidi grubu silindi" + +#: usr/local/www/system_gateway_groups.php:101 +#: usr/local/www/system_gateway_groups.php:102 +#: usr/local/www/system_gateway_groups.php:102 +#, php-format +msgid "" +"The gateway configuration has been changed.%sYou must apply the changes in " +"order for them to take effect." +msgstr "" +"Ağ geçidi yapılandırması değiştirildi.%s Değişiklikleri uygulayarak etkin " +"hale gelmelerini sağlayabilirsiniz." + +#: usr/local/www/system_gateway_groups.php:165 +#: usr/local/www/system_gateway_groups.php:166 +#: usr/local/www/system_gateway_groups.php:166 +msgid "Do you really want to delete this gateway group?" +msgstr "Bu ağ geçidi grubunu silmek istediğinize emin misiniz?" + +#: usr/local/www/system_gateway_groups.php:195 +#: usr/local/www/system_gateway_groups.php:196 +#: usr/local/www/system_gateway_groups.php:196 +msgid "" +"Remember to use these Gateway Groups in firewall rules in order to enable " +"load balancing, failover, or policy-based routing. Without rules directing " +"traffic into the Gateway Groups, they will not be used." +msgstr "" +"Yük dengeleme, yük aktarma veya ilke tabanlı yönlendirmeleri kullanabilmek " +"için güvenlik duvarı kurallarında bu Ağ Geçidi Gruplarını kullanmayı " +"unutmayın. Trafiği Ağ Geçidi Gruplarına yönlendiren kurallar olmazsa " +"kullanılmazlar." + +#: usr/local/www/system_gateway_groups_edit.php:50 +#: usr/local/www/system_gateway_groups_edit.php:53 +#: usr/local/www/system_gateway_groups_edit.php:53 +msgid "Member Down" +msgstr "Üye Kapalı" + +#: usr/local/www/system_gateway_groups_edit.php:51 +#: usr/local/www/system_gateway_groups_edit.php:54 +#: usr/local/www/system_gateway_groups_edit.php:54 +msgid "Packet Loss" +msgstr "Paket Kaybı" + +#: usr/local/www/system_gateway_groups_edit.php:52 +#: usr/local/www/system_gateway_groups_edit.php:55 +#: usr/local/www/system_gateway_groups_edit.php:55 +msgid "High Latency" +msgstr "Yüksek Gecikme" + +#: usr/local/www/system_gateway_groups_edit.php:53 +#: usr/local/www/system_gateway_groups_edit.php:56 +#: usr/local/www/system_gateway_groups_edit.php:56 +msgid "Packet Loss or High Latency" +msgstr "Paket Kaybı ya da Yüksek Gecikme" + +#: usr/local/www/system_gateway_groups_edit.php:85 +#: usr/local/www/system_gateway_groups_edit.php:88 +#: usr/local/www/system_gateway_groups_edit.php:88 +msgid "A valid gateway group name must be specified." +msgstr "Geçerli bir ağ geçidi grup adı belirtilmelidir." + +#: usr/local/www/system_gateway_groups_edit.php:88 +#: usr/local/www/system_gateways_edit.php:106 +#: usr/local/www/system_gateway_groups_edit.php:91 +#: usr/local/www/system_gateways_edit.php:107 +#: usr/local/www/system_gateways_edit.php:108 +#: usr/local/www/system_gateways_edit.php:108 +#: usr/local/www/system_gateway_groups_edit.php:91 +msgid "The gateway name must not contain invalid characters." +msgstr "Ağ geçidi adı geçersiz karakterler içermemelidir." + +#: usr/local/www/system_gateway_groups_edit.php:99 +#: usr/local/www/system_gateway_groups_edit.php:102 +#: usr/local/www/system_gateway_groups_edit.php:102 +#, php-format +msgid "A gateway group with this name \"%s\" already exists." +msgstr "\"%s\" adında bir ağ geçidi grubu sistemde mevcut." + +#: usr/local/www/system_gateway_groups_edit.php:115 +#: usr/local/www/system_gateway_groups_edit.php:119 +#: usr/local/www/system_gateway_groups_edit.php:119 +#, php-format +msgid "" +"A gateway group cannot have the same name with a gateway \"%s\" please " +"choose another name." +msgstr "" +"Bir ağ geçidi grubu ağ geçidi \"%s\" ile aynı ada sahip olamaz. Lütfen başka " +"bir isim seçin." + +#: usr/local/www/system_gateway_groups_edit.php:119 +#: usr/local/www/system_gateway_groups_edit.php:123 +#: usr/local/www/system_gateway_groups_edit.php:123 +msgid "No gateway(s) have been selected to be used in this group" +msgstr "Bu grupta kullanılmak üzere ağ geçit(ler)'i seçilmemiş." + +#: usr/local/www/system_gateway_groups_edit.php:142 +#: usr/local/www/system_gateways_edit.php:313 +#: usr/local/www/system_gateways_edit.php:344 +#: usr/local/www/system_gateway_groups_edit.php:153 +#: usr/local/www/system_gateways_edit.php:319 +#: usr/local/www/system_gateways_edit.php:350 +#: usr/local/www/system_gateway_groups_edit.php:146 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/system_gateways_edit.php:456 +#: usr/local/www/system_gateways_edit.php:425 +#: usr/local/www/system_gateways_edit.php:456 +#: usr/local/www/system_gateway_groups_edit.php:146 +msgid "Edit gateway" +msgstr "Ağ geçidi düzenle" + +#: usr/local/www/system_gateway_groups_edit.php:155 +#: usr/local/www/system_gateway_groups_edit.php:166 +#: usr/local/www/system_gateway_groups_edit.php:225 +#: usr/local/www/system_gateway_groups_edit.php:225 +msgid "Edit gateway entry" +msgstr "Ağ geçidi kaydını düzenle" + +#: usr/local/www/system_gateway_groups_edit.php:164 +#: usr/local/www/system_gateway_groups_edit.php:175 +#: usr/local/www/system_gateway_groups_edit.php:234 +#: usr/local/www/system_gateway_groups_edit.php:234 +msgid "Gateway Priority" +msgstr "Ağ Geçidi Önceliği" + +#: usr/local/www/system_gateway_groups_edit.php:185 +#: usr/local/www/system_gateway_groups_edit.php:208 +#: usr/local/www/system_gateway_groups_edit.php:268 +#: usr/local/www/system_gateway_groups_edit.php:268 +msgid "Never" +msgstr "Hiçbir zaman" + +#: usr/local/www/system_gateway_groups_edit.php:186 +#: usr/local/www/system_gateway_groups_edit.php:209 +#: usr/local/www/system_gateway_groups_edit.php:269 +#: usr/local/www/system_gateway_groups_edit.php:269 +msgid "Tier 1" +msgstr "Sıra 1" + +#: usr/local/www/system_gateway_groups_edit.php:187 +#: usr/local/www/system_gateway_groups_edit.php:210 +#: usr/local/www/system_gateway_groups_edit.php:270 +#: usr/local/www/system_gateway_groups_edit.php:270 +msgid "Tier 2" +msgstr "Sıra 2" + +#: usr/local/www/system_gateway_groups_edit.php:188 +#: usr/local/www/system_gateway_groups_edit.php:211 +#: usr/local/www/system_gateway_groups_edit.php:271 +#: usr/local/www/system_gateway_groups_edit.php:271 +msgid "Tier 3" +msgstr "Sıra 3" + +#: usr/local/www/system_gateway_groups_edit.php:189 +#: usr/local/www/system_gateway_groups_edit.php:212 +#: usr/local/www/system_gateway_groups_edit.php:272 +#: usr/local/www/system_gateway_groups_edit.php:272 +msgid "Tier 4" +msgstr "Sıra 4" + +#: usr/local/www/system_gateway_groups_edit.php:190 +#: usr/local/www/system_gateway_groups_edit.php:213 +#: usr/local/www/system_gateway_groups_edit.php:273 +#: usr/local/www/system_gateway_groups_edit.php:273 +msgid "Tier 5" +msgstr "Sıra 5" + +#: usr/local/www/system_gateway_groups_edit.php:195 +#: usr/local/www/system_gateway_groups_edit.php:247 +#: usr/local/www/system_gateway_groups_edit.php:307 +#: usr/local/www/system_gateway_groups_edit.php:307 +msgid "Link Priority" +msgstr "Bağlantı Önceliği" + +#: usr/local/www/system_gateway_groups_edit.php:196 +#: usr/local/www/system_gateway_groups_edit.php:248 +#: usr/local/www/system_gateway_groups_edit.php:308 +#: usr/local/www/system_gateway_groups_edit.php:308 +msgid "" +"The priority selected here defines in what order failover and balancing of " +"links will be done. Multiple links of the same priority will balance " +"connections until all links in the priority will be exhausted. If all links " +"in a priority level are exhausted we will use the next available link(s) in " +"the next priority level." +msgstr "" +"Burada seçilen öncelik bağlantılarda yük dengeleme ve aktarma işlemlerinin " +"hangi sırayla yapılacağını belirler. Aynı önceliğe sahip birden fazla " +"bağlantı olursa o önceliğe sahip tüm bağlantılar tükenene kadar dengeli " +"kullanılır. Bir öncelik sırasındaki tüm bağlantılar tükendiğinde bir sonraki " +"öncelik sırasına geçilir." + +#: usr/local/www/system_gateway_groups_edit.php:205 +#: usr/local/www/system_gateway_groups_edit.php:260 +#: usr/local/www/system_gateway_groups_edit.php:320 +#: usr/local/www/system_gateway_groups_edit.php:320 +msgid "Trigger Level" +msgstr "Tetikleme Seviyesi" + +#: usr/local/www/system_gateway_groups_edit.php:216 +#: usr/local/www/system_gateway_groups_edit.php:271 +#: usr/local/www/system_gateway_groups_edit.php:331 +#: usr/local/www/system_gateway_groups_edit.php:331 +msgid "When to trigger exclusion of a member" +msgstr "Bir üyenin dışarıda bırakılması ne zaman tetiklenecek" + +#: usr/local/www/system_gateways.php:134 usr/local/www/system_gateways.php:134 +msgid "The gateway configuration has been changed." +msgstr "Ağ geçidi yapılandırması değiştirildi." + +#: usr/local/www/system_gateways.php:155 +#: usr/local/www/system_gateways_edit.php:398 +#: usr/local/www/system_gateways_edit.php:419 +#: usr/local/www/system_gateways_edit.php:525 +#: usr/local/www/system_gateways_edit.php:529 +#: usr/local/www/system_gateways.php:155 +msgid "Monitor IP" +msgstr "İzleme IPsi" + +#: usr/local/www/system_gateways.php:205 usr/local/www/system_gateways.php:205 +msgid "Do you really want to delete this gateway?" +msgstr "Bu ağ geçidini silmek istediğinize emin misiniz?" + +#: usr/local/www/system_gateways_edit.php:110 +#: usr/local/www/system_gateways_edit.php:111 +#: usr/local/www/system_gateways_edit.php:112 +#: usr/local/www/system_gateways_edit.php:112 +msgid "A valid gateway IP address must be specified." +msgstr "Geçerli bir ağ geçidi IP adresi belirtilmelidir." + +#: usr/local/www/system_gateways_edit.php:118 +#: usr/local/www/system_gateways_edit.php:119 +#: usr/local/www/system_gateways_edit.php:120 +#: usr/local/www/system_gateways_edit.php:133 +msgid "You can not use a IPv6 Gateway Address on a IPv4 only interface." +msgstr "IPv4 arabiriminde IPV6 ağ geçidi adresi kullanamazsınız." + +#: usr/local/www/system_gateways_edit.php:122 +#: usr/local/www/system_gateways_edit.php:133 +#: usr/local/www/system_gateways_edit.php:123 +#: usr/local/www/system_gateways_edit.php:136 +#: usr/local/www/system_gateways_edit.php:124 +#: usr/local/www/system_gateways_edit.php:137 +#: usr/local/www/system_gateways_edit.php:124 +#: usr/local/www/system_gateways_edit.php:137 +#, php-format +msgid "" +"The gateway address %1$s does not lie within the chosen interface's subnet " +"'%2$s'." +msgstr "" +"Seçilen arabirimlerin altağı '%2$s' ise ağ geçidi adresi %1$s yalan " +"söylemez." + +#: usr/local/www/system_gateways_edit.php:129 +#: usr/local/www/system_gateways_edit.php:132 +#: usr/local/www/system_gateways_edit.php:133 +#: usr/local/www/system_gateways_edit.php:120 +msgid "You can not use a IPv4 Gateway Address on a IPv6 only interface." +msgstr "IPv6 arabiriminde IPV4 ağ geçidi adresi kullanamazsınız." + +#: usr/local/www/system_gateways_edit.php:139 +#: usr/local/www/system_gateways_edit.php:143 +#: usr/local/www/system_gateways_edit.php:144 +#: usr/local/www/system_gateways_edit.php:144 +msgid "" +"Dynamic gateway values cannot be specified for interfaces with a static IPv4 " +"configuration." +msgstr "" +"Statik IPv4 yapılandırması olan arabirimlerde dinamik ağ geçidi değerleri " +"belirtilemez." + +#: usr/local/www/system_gateways_edit.php:143 +#: usr/local/www/system_gateways_edit.php:147 +#: usr/local/www/system_gateways_edit.php:148 +#: usr/local/www/system_gateways_edit.php:148 +msgid "" +"Dynamic gateway values cannot be specified for interfaces with a static IPv6 " +"configuration." +msgstr "" +"Statik IPv6 yapılandırması olan arabirimlerde dinamik ağ geçidi değerleri " +"belirtilemez." + +#: usr/local/www/system_gateways_edit.php:147 +#: usr/local/www/system_gateways_edit.php:151 +#: usr/local/www/system_gateways_edit.php:152 +#: usr/local/www/system_gateways_edit.php:152 +msgid "A valid monitor IP address must be specified." +msgstr "Geçerli bir izleme IP adresi belirtilmelidir." + +#: usr/local/www/system_gateways_edit.php:160 +#: usr/local/www/system_gateways_edit.php:168 +#: usr/local/www/system_gateways_edit.php:178 +#: usr/local/www/system_gateways_edit.php:178 +msgid "Changing name on a gateway is not allowed." +msgstr "Ağ geçidi adının değiştirilmesine izin verilmemektedir." + +#: usr/local/www/system_gateways_edit.php:165 +#: usr/local/www/system_gateways_edit.php:173 +#: usr/local/www/system_gateways_edit.php:183 +#: usr/local/www/system_gateways_edit.php:183 +#, php-format +msgid "The gateway name \"%s\" already exists." +msgstr "\"%s\" adında ağ geçidi sistemde mevcut." + +#: usr/local/www/system_gateways_edit.php:171 +#: usr/local/www/system_gateways_edit.php:179 +#: usr/local/www/system_gateways_edit.php:189 +#: usr/local/www/system_gateways_edit.php:189 +#, php-format +msgid "The gateway IP address \"%s\" already exists." +msgstr "Ağ geçidi IP adresi \"%s\" sistemde zaten mevcut." + +#: usr/local/www/system_gateways_edit.php:177 +#: usr/local/www/system_gateways_edit.php:185 +#: usr/local/www/system_gateways_edit.php:195 +#: usr/local/www/system_gateways_edit.php:195 +#, php-format +msgid "" +"The monitor IP address \"%s\" is already in use. You must choose a different " +"monitor IP." +msgstr "\"%s\" izleme IP adresi kullanımda. Başka bir izleme IP adresi seçiniz." + +#: usr/local/www/system_gateways_edit.php:187 +#: usr/local/www/system_gateways_edit.php:220 +#: usr/local/www/system_gateways_edit.php:195 +#: usr/local/www/system_gateways_edit.php:228 +msgid "The low latency watermark needs to be a numeric value." +msgstr "Düşük gecikme belirteci bir sayı olmalıdır." + +#: usr/local/www/system_gateways_edit.php:193 +#: usr/local/www/system_gateways_edit.php:201 +msgid "The high latency watermark needs to be a numeric value." +msgstr "Yüksek gecikme belirteci bir sayı olmalıdır." + +#: usr/local/www/system_gateways_edit.php:198 +#: usr/local/www/system_gateways_edit.php:206 +msgid "The low loss watermark needs to be a numeric value." +msgstr "Düşük kayıp belirteci bir sayı olmalıdır." + +#: usr/local/www/system_gateways_edit.php:203 +#: usr/local/www/system_gateways_edit.php:211 +msgid "The high loss watermark needs to be a numeric value." +msgstr "Yüksek kayıp belirteci bir sayı olmalıdır." + +#: usr/local/www/system_gateways_edit.php:209 +#: usr/local/www/system_gateways_edit.php:217 +msgid "" +"The High latency watermark needs to be higher then the low latency watermark" +msgstr "" +"Yüksek gecikme belirtecinin düşük gecikme belirtecinden daha büyük bir sayı " +"olması gerekir" + +#: usr/local/www/system_gateways_edit.php:215 +#: usr/local/www/system_gateways_edit.php:223 +msgid "" +"The High packet loss watermark needs to be higher then the low packet loss " +"watermark" +msgstr "" +"Yüksek paket kayıp belirtecinin düşük paket kayıp belirtecinden daha büyük " +"bir sayı olması gerekir" + +#: usr/local/www/system_gateways_edit.php:363 +#: usr/local/www/system_gateways_edit.php:369 +#: usr/local/www/system_gateways_edit.php:475 +#: usr/local/www/system_gateways_edit.php:474 +msgid "Use BGPD" +msgstr "BGPD kullan" + +#: usr/local/www/system_gateways_edit.php:367 +#: usr/local/www/system_gateways_edit.php:373 +#: usr/local/www/system_gateways_edit.php:479 +#: usr/local/www/system_gateways_edit.php:478 +msgid "Choose which interface this gateway applies to." +msgstr "Bu ağ geçidinin hangi arabirim için olduğunu seçin." + +#: usr/local/www/system_gateways_edit.php:373 +#: usr/local/www/system_gateways_edit.php:394 +#: usr/local/www/system_gateways_edit.php:500 +#: usr/local/www/system_gateways_edit.php:502 +msgid "Gateway name" +msgstr "Ağ geçidi adı" + +#: usr/local/www/system_gateways_edit.php:379 +#: usr/local/www/system_gateways_edit.php:400 +#: usr/local/www/system_gateways_edit.php:506 +#: usr/local/www/system_gateways_edit.php:509 +msgid "Gateway IP address" +msgstr "Ağ geçidi IP adresi" + +#: usr/local/www/system_gateways_edit.php:382 +#: usr/local/www/system_gateways_edit.php:385 +#: usr/local/www/system_gateways_edit.php:403 +#: usr/local/www/system_gateways_edit.php:406 +#: usr/local/www/system_gateways_edit.php:509 +#: usr/local/www/system_gateways_edit.php:512 +#: usr/local/www/system_gateways_edit.php:513 +#: usr/local/www/system_gateways_edit.php:516 +msgid "Default Gateway" +msgstr "Varsayılan Ağ Geçidi" + +#: usr/local/www/system_gateways_edit.php:386 +#: usr/local/www/system_gateways_edit.php:407 +#: usr/local/www/system_gateways_edit.php:513 +#: usr/local/www/system_gateways_edit.php:517 +msgid "This will select the above gateway as the default gateway" +msgstr "" +"Bu seçenek aşağıda belirtilen ağ geçidini varsayılan ağ geçidi olarak " +"seçecektir." + +#: usr/local/www/system_gateways_edit.php:390 +#: usr/local/www/system_gateways_edit.php:393 +#: usr/local/www/system_gateways_edit.php:411 +#: usr/local/www/system_gateways_edit.php:414 +#: usr/local/www/system_gateways_edit.php:517 +#: usr/local/www/system_gateways_edit.php:520 +#: usr/local/www/system_gateways_edit.php:521 +#: usr/local/www/system_gateways_edit.php:524 +msgid "Disable Gateway Monitoring" +msgstr "Ağ Geçidi İzlemeyi Kapat" + +#: usr/local/www/system_gateways_edit.php:394 +#: usr/local/www/system_gateways_edit.php:415 +#: usr/local/www/system_gateways_edit.php:521 +#: usr/local/www/system_gateways_edit.php:525 +msgid "This will consider this gateway as always being up" +msgstr "Bu seçenek bu ağ geçidini her zaman açık kabul etmeyi sağlar" + +#: usr/local/www/system_gateways_edit.php:407 +#: usr/local/www/system_gateways_edit.php:428 +#: usr/local/www/system_gateways_edit.php:534 +#: usr/local/www/system_gateways_edit.php:538 +msgid "Alternative monitor IP" +msgstr "Alternatif izleme IP adresi" + +#: usr/local/www/system_gateways_edit.php:408 +#: usr/local/www/system_gateways_edit.php:429 +#: usr/local/www/system_gateways_edit.php:535 +#: usr/local/www/system_gateways_edit.php:539 +msgid "" +"Enter an alternative address here to be used to monitor the link. This is " +"used for the quality RRD graphs as well as the load balancer entries. Use " +"this if the gateway does not respond to ICMP echo requests (pings)" +msgstr "" +"Bağlantıyı izlemek için kullanılacak alternatif bir adres girin. Hem RRD " +"grafikleri hem de yük dengeleyici kayıtlarında kullanılır. Ağ geçidi ICMP " +"echo isteklerine (ping'lere) cevap vermiyorsa bunu kullanabilirsiniz." + +#: usr/local/www/system_gateways_edit.php:436 +#: usr/local/www/system_gateways_edit.php:457 +#: usr/local/www/system_gateways_edit.php:563 +#: usr/local/www/system_gateways_edit.php:567 +msgid "Weight for this gateway when used in a Gateway Group." +msgstr "Bu ağ geçidinin bir Ağ Geçidi Grubunda kullanıldığında alacağı ağırlık." + +#: usr/local/www/system_gateways_edit.php:440 +#: usr/local/www/system_gateways_edit.php:461 +#: usr/local/www/system_gateways_edit.php:567 +#: usr/local/www/system_gateways_edit.php:571 +msgid "Latency thresholds" +msgstr "Gecikme eşik değerleri" + +#: usr/local/www/system_gateways_edit.php:448 +#: usr/local/www/system_gateways_edit.php:469 +msgid "" +"These define the low and high water marks for latency in milliseconds. " +"Default is 100/200." +msgstr "" +"Bunlar milisaniye cinsinden gecikme alt ve üst sınırlarını tanımlar. " +"Varsayılan 100/200 dür." + +#: usr/local/www/system_gateways_edit.php:452 +#: usr/local/www/system_gateways_edit.php:473 +#: usr/local/www/system_gateways_edit.php:579 +#: usr/local/www/system_gateways_edit.php:583 +msgid "Packet Loss thresholds" +msgstr "Paket Kaybı eşik değeri" + +#: usr/local/www/system_gateways_edit.php:460 +#: usr/local/www/system_gateways_edit.php:481 +msgid "" +"These define the low and high water marks for packet loss in %. Default is " +"10/20." +msgstr "" +"Bunlar %. (yüzde) cinsinden paket kaybı alt ve üst sınırlarını tanımlar. " +"Varsayılan 10/20 dir." + +#: usr/local/www/system_gateways_edit.php:464 +#: usr/local/www/system_gateways_edit.php:496 +#: usr/local/www/system_gateways_edit.php:602 +#: usr/local/www/system_gateways_edit.php:606 +msgid "Down" +msgstr "Kapalı" + +#: usr/local/www/system_gateways_edit.php:468 +msgid "" +"This defines the down time for the alarm to fire in seconds. Default is 10." +msgstr "" +"Erişilemez alarmının tetiklenmesi için saniye cinsinden geçmesi gereken " +"süreyi tanımlar. Varsayılan 10 dur." + +#: usr/local/www/system_gateways_edit.php:472 +#: usr/local/www/system_gateways_edit.php:485 +#: usr/local/www/system_gateways_edit.php:591 +#: usr/local/www/system_gateways_edit.php:595 +msgid "Frequency Probe" +msgstr "Sorgu Sıklığı" + +#: usr/local/www/system_gateways_edit.php:476 +msgid "" +"This defines the frequency that an icmp probe will be sent in seconds. " +"Default is 1." +msgstr "" +"Bu ayar ICMP sorgusu gönderilme sıklığını saniye cinsinden belirler. " +"Varsayılan 1 dir." + +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/system_groupmanager.php:49 +#: usr/local/www/system_groupmanager_addprivs.php:56 +msgid "Group manager" +msgstr "Grup yöneticisi" + +#: usr/local/www/system_groupmanager.php:72 +#: usr/local/www/system_groupmanager.php:96 +#: usr/local/www/system_usermanager.php:90 +#: usr/local/www/system_usermanager.php:105 +#: usr/local/www/system_groupmanager.php:72 +#: usr/local/www/system_groupmanager.php:96 +#: usr/local/www/system_usermanager.php:90 +#: usr/local/www/system_usermanager.php:105 +msgid "successfully deleted" +msgstr "başarıyla silindi" + +#: usr/local/www/system_groupmanager.php:95 +#: usr/local/www/system_usermanager.php:104 +#: usr/local/www/system_groupmanager.php:95 +#: usr/local/www/system_usermanager.php:104 +msgid "Privilege" +msgstr "Yetki" + +#: usr/local/www/system_groupmanager.php:122 +#: usr/local/www/system_groupmanager.php:122 +msgid "The group name contains invalid characters." +msgstr "Grup adı geçersiz karakterler içeriyor." + +#: usr/local/www/system_groupmanager.php:128 +#: usr/local/www/system_groupmanager.php:128 +msgid "Another entry with the same group name already exists." +msgstr "Sistemde aynı grup isminde bir tanım mevcut." + +#: usr/local/www/system_groupmanager.php:262 +#: usr/local/www/system_usermanager.php:462 +#: usr/local/www/system_usermanager.php:460 +#: usr/local/www/system_groupmanager.php:262 +#: usr/local/www/system_usermanager.php:460 +msgid "Defined by" +msgstr "Tanımlayan" + +#: usr/local/www/system_groupmanager.php:269 +#: usr/local/www/system_groupmanager.php:404 +#: usr/local/www/system_groupmanager.php:405 +#: usr/local/www/system_groupmanager.php:269 +#: usr/local/www/system_groupmanager.php:405 +msgid "Group name" +msgstr "Grup adı" + +#: usr/local/www/system_groupmanager.php:279 +#: usr/local/www/system_groupmanager.php:279 +msgid "Group description, for your own information only" +msgstr "Grup açıklaması (grubu daha kolay tanıyabilmeniz için)" + +#: usr/local/www/system_groupmanager.php:286 +#: usr/local/www/system_usermanager.php:511 +#: usr/local/www/system_usermanager.php:509 +#: usr/local/www/system_groupmanager.php:286 +#: usr/local/www/system_usermanager.php:509 +msgid "Group Memberships" +msgstr "Grup Üyelikleri" + +#: usr/local/www/system_groupmanager.php:291 +#: usr/local/www/system_groupmanager.php:291 +msgid "Not Members" +msgstr "Üye Olmayanlar" + +#: usr/local/www/system_groupmanager.php:309 +#: usr/local/www/system_groupmanager.php:309 +msgid "Add Members" +msgstr "Üye Ekle" + +#: usr/local/www/system_groupmanager.php:313 +#: usr/local/www/system_groupmanager.php:313 +msgid "Remove Members" +msgstr "Üye Çıkar" + +#: usr/local/www/system_groupmanager.php:334 +#: usr/local/www/system_groupmanager_addprivs.php:196 +#: usr/local/www/system_usermanager.php:565 +#: usr/local/www/system_usermanager_addprivs.php:193 +#: usr/local/www/system_usermanager.php:563 +#: usr/local/www/system_groupmanager_addprivs.php:194 +#: usr/local/www/system_groupmanager.php:334 +#: usr/local/www/system_usermanager_addprivs.php:193 +#: usr/local/www/system_groupmanager_addprivs.php:194 +#: usr/local/www/system_usermanager.php:563 +msgid "Hold down CTRL (pc)/COMMAND (mac) key to select multiple items" +msgstr "Birden fazla öğe seçmek için CTRL (PC) / COMMAND (Mac) basılı tutun" + +#: usr/local/www/system_groupmanager.php:342 +#: usr/local/www/system_groupmanager.php:342 +msgid "Assigned Privileges" +msgstr "Atanan Yetkiler" + +#: usr/local/www/system_groupmanager.php:363 +#: usr/local/www/system_usermanager.php:601 +#: usr/local/www/system_usermanager.php:599 +#: usr/local/www/system_groupmanager.php:363 +#: usr/local/www/system_usermanager.php:599 +msgid "Do you really want to delete this privilege?" +msgstr "Bu yetkiyi silmek istediğinize emin misiniz?" + +#: usr/local/www/system_groupmanager.php:406 +#: usr/local/www/system_groupmanager.php:407 +#: usr/local/www/system_groupmanager.php:407 +msgid "Member Count" +msgstr "Üye Sayısı" + +#: usr/local/www/system_groupmanager.php:447 +#: usr/local/www/system_groupmanager.php:450 +#: usr/local/www/system_groupmanager.php:450 +msgid "Do you really want to delete this group?" +msgstr "Bu grubu silmek istediğinize emin misiniz?" + +#: usr/local/www/system_groupmanager.php:448 +#: usr/local/www/system_groupmanager.php:451 +#: usr/local/www/system_groupmanager.php:451 +msgid "delete group" +msgstr "grubu sil" + +#: usr/local/www/system_groupmanager.php:460 +#: usr/local/www/system_groupmanager.php:465 +#: usr/local/www/system_groupmanager.php:465 +msgid "add group" +msgstr "grup ekle" + +#: usr/local/www/system_groupmanager.php:467 +msgid "" +"Additional webConfigurator groups can be added here. \n" +"\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by " +"users who are members of the group.\n" +"\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system " +"defined object.\n" +"\t\t\t\t\t\t\t\tSome system object properties can be modified but they " +"cannot be deleted." +msgstr "" +"Buradan ek webArayüzü grupları eklenebilir. \n" +"\t\t\t\t\t\t\t\tGrup üyeleri tarafından miras alınan grup izinleri atanabilir.\n" +"\t\t\t\t\t\t\t\tGri bir simge nesnenin sistem tanımlı olduğu anlamına gelir.\n" +"\t\t\t\t\t\t\t\tBazı sistem nesnesi özellikleri değiştirilebilir ama silinemez." + +#: usr/local/www/system_groupmanager_addprivs.php:56 +#: usr/local/www/system_groupmanager_addprivs.php:56 +msgid "Add privileges" +msgstr "Yetki ekle" + +#: usr/local/www/system_groupmanager_addprivs.php:79 +#: usr/local/www/system_usermanager_addprivs.php:84 +#: usr/local/www/system_usermanager_addprivs.php:84 +#: usr/local/www/system_groupmanager_addprivs.php:79 +msgid "Selected priveleges" +msgstr "Seçili yetkiler" + +#: usr/local/www/system_groupmanager_addprivs.php:182 +#: usr/local/www/system_usermanager_addprivs.php:181 +#: usr/local/www/system_groupmanager_addprivs.php:180 +#: usr/local/www/system_usermanager_addprivs.php:181 +#: usr/local/www/system_groupmanager_addprivs.php:180 +msgid "System Privileges" +msgstr "Sistem yetkileri" + +#: usr/local/www/system_groupmanager_addprivs.php:218 +#: usr/local/www/system_usermanager_addprivs.php:199 +#: usr/local/www/system_groupmanager_addprivs.php:216 +#: usr/local/www/system_usermanager_addprivs.php:199 +#: usr/local/www/system_groupmanager_addprivs.php:216 +msgid "Select a privilege from the list above for a description" +msgstr "Yukarıdaki listeden bir yetki seçerek açıklamasını görebilirsiniz." + +#: usr/local/www/system_usermanager.php:157 +#: usr/local/www/system_usermanager.php:692 +#: usr/local/www/system_usermanager.php:701 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/system_usermanager.php:690 +#: usr/local/www/system_usermanager.php:699 +#: usr/local/www/vpn_openvpn_server.php:287 +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/vpn_openvpn_server.php:288 +#: usr/local/www/vpn_openvpn_client.php:220 +#: usr/local/www/vpn_openvpn_client.php:238 +#: usr/local/www/vpn_ipsec_phase1.php:166 +#: usr/local/www/system_usermanager.php:157 +#: usr/local/www/system_usermanager.php:690 +#: usr/local/www/system_usermanager.php:699 +#: usr/local/www/vpn_openvpn_server.php:309 +msgid "Certificate" +msgstr "Sertifika" + +#: usr/local/www/system_usermanager.php:158 +#: usr/local/www/system_usermanager.php:158 +msgid "association removed." +msgstr "ilişkilendirme kaldırıldı." + +#: usr/local/www/system_usermanager.php:202 +#: usr/local/www/system_usermanager.php:202 +msgid "The username is longer than 16 characters." +msgstr "Kullanıcı adı 16 karakterden uzun" + +#: usr/local/www/system_usermanager.php:226 +#: usr/local/www/system_usermanager.php:226 +msgid "That username is reserved by the system." +msgstr "Bu kullanıcı adı sistem tarafından kullanıma ayrılmıştır." + +#: usr/local/www/system_usermanager.php:250 +#: usr/local/www/system_usermanager.php:246 +#: usr/local/www/system_usermanager.php:246 +msgid "Invalid expiration date format; use MM/DD/YYYY instead." +msgstr "Süre dolum tarih formatı geçersiz; AA/GG/YYYY biçiminde girin." + +#: usr/local/www/system_usermanager.php:257 +#: usr/local/www/system_usermanager.php:253 +#: usr/local/www/system_usermanager.php:253 +msgid "Invalid internal Certificate Authority" +msgstr "Geçersiz iç Sertifika Otoritesi" + +#: usr/local/www/system_usermanager.php:489 +#: usr/local/www/system_usermanager_passwordmg.php:109 +#: usr/local/www/system_usermanager.php:487 +#: usr/local/www/system_usermanager_passwordmg.php:110 +#: usr/local/www/system_usermanager_passwordmg.php:115 +#: usr/local/www/system_usermanager.php:487 +msgid "(confirmation)" +msgstr "(onay)" + +#: usr/local/www/system_usermanager.php:493 +#: usr/local/www/system_usermanager.php:788 +#: usr/local/www/system_usermanager.php:491 +#: usr/local/www/system_usermanager.php:786 +#: usr/local/www/system_usermanager.php:787 +#: usr/local/www/system_usermanager.php:491 +#: usr/local/www/system_usermanager.php:787 +msgid "Full name" +msgstr "Ad Soyad" + +#: usr/local/www/system_usermanager.php:497 +#: usr/local/www/system_usermanager.php:495 +#: usr/local/www/system_usermanager.php:495 +msgid "User's full name, for your own information only" +msgstr "Kullanıcının tam adı (Bilgi amaçlı)" + +#: usr/local/www/system_usermanager.php:501 +#: usr/local/www/system_usermanager.php:499 +#: usr/local/www/system_usermanager.php:499 +msgid "Expiration date" +msgstr "Geçerlilik süresi" + +#: usr/local/www/system_usermanager.php:505 +#: usr/local/www/system_usermanager.php:503 +#: usr/local/www/system_usermanager.php:503 +msgid "Pick a date" +msgstr "Tarih seçiniz" + +#: usr/local/www/system_usermanager.php:508 +#: usr/local/www/system_usermanager.php:506 +#: usr/local/www/system_usermanager.php:506 +msgid "" +"Leave blank if the account shouldn't expire, otherwise enter the expiration " +"date in the following format: mm/dd/yyyy" +msgstr "" +"Hesap her zaman geçerli olsun istiyorsanız boş bırakın, aksi taktirde " +"hesabın son geçerlilik tarihini aa/gg/yyyy biçiminde girin." + +#: usr/local/www/system_usermanager.php:516 +#: usr/local/www/system_usermanager.php:514 +#: usr/local/www/system_usermanager.php:514 +msgid "Not Member Of" +msgstr "Üyesi Değil" + +#: usr/local/www/system_usermanager.php:536 +#: usr/local/www/system_usermanager.php:534 +#: usr/local/www/system_usermanager.php:534 +msgid "Add Groups" +msgstr "Grup ekle" + +#: usr/local/www/system_usermanager.php:540 +#: usr/local/www/system_usermanager.php:538 +#: usr/local/www/system_usermanager.php:538 +msgid "Remove Groups" +msgstr "Grup çıkar" + +#: usr/local/www/system_usermanager.php:544 +#: usr/local/www/system_usermanager.php:542 +#: usr/local/www/system_usermanager.php:542 +msgid "Member Of" +msgstr "Üyesi" + +#: usr/local/www/system_usermanager.php:572 +#: usr/local/www/system_usermanager.php:570 +#: usr/local/www/system_usermanager.php:570 +msgid "Effective Privileges" +msgstr "Etkin İzinler" + +#: usr/local/www/system_usermanager.php:576 +#: usr/local/www/system_usermanager.php:574 +#: usr/local/www/system_usermanager.php:574 +msgid "Inherited From" +msgstr "Miras Alınan" + +#: usr/local/www/system_usermanager.php:626 +#: usr/local/www/system_usermanager.php:624 +#: usr/local/www/system_usermanager.php:624 +msgid "User Certificates" +msgstr "Kullanıcı Sertifikaları" + +#: usr/local/www/system_usermanager.php:631 +#: usr/local/www/system_usermanager.php:629 +#: usr/local/www/system_usermanager.php:629 +#, fuzzy +msgid "CA" +msgstr "CA" + +#: usr/local/www/system_usermanager.php:655 +#: usr/local/www/system_usermanager.php:653 +#: usr/local/www/system_usermanager.php:653 +msgid "export private key" +msgstr "özel anahtarı dışarı ver" + +#: usr/local/www/system_usermanager.php:660 +#: usr/local/www/system_usermanager.php:658 +#: usr/local/www/system_usermanager.php:658 +msgid "Do you really want to remove this certificate association?" +msgstr "Bu sertifika ilişkilendirmesini silmek istediğinize emin misiniz?" + +#: usr/local/www/system_usermanager.php:660 +#: usr/local/www/system_usermanager.php:658 +#: usr/local/www/system_usermanager.php:658 +msgid "(Certificate will not be deleted)" +msgstr "(Sertifika silinmeyecektir.)" + +#: usr/local/www/system_usermanager.php:694 +#: usr/local/www/system_usermanager.php:692 +#: usr/local/www/system_usermanager.php:692 +msgid "Click to create a user certificate." +msgstr "Kullanıcı sertifikası oluşturmak için tıklayınız." + +#: usr/local/www/system_usermanager.php:752 +#: usr/local/www/system_usermanager.php:758 +#: usr/local/www/system_usermanager.php:750 +#: usr/local/www/system_usermanager.php:756 +#: usr/local/www/system_usermanager.php:750 +#: usr/local/www/system_usermanager.php:756 +msgid "Authorized keys" +msgstr "İzinli anahtarlar" + +#: usr/local/www/system_usermanager.php:754 +#: usr/local/www/system_usermanager.php:752 +#: usr/local/www/system_usermanager.php:752 +msgid "Click to paste an authorized key." +msgstr "İzinli anahtar yapıştırmak için tıklayınız." + +#: usr/local/www/system_usermanager.php:762 +#: usr/local/www/system_usermanager.php:760 +#: usr/local/www/system_usermanager.php:760 +msgid "Paste an authorized keys file here." +msgstr "Buraya izinli anahtar dosyası yapıştırabilirsiniz." + +#: usr/local/www/system_usermanager.php:766 +#: usr/local/www/system_usermanager.php:764 +#: usr/local/www/system_usermanager.php:764 +msgid "IPsec Pre-Shared Key" +msgstr "IPsec Ön Paylaşımlı Anahtar" + +#: usr/local/www/system_usermanager.php:828 +#: usr/local/www/system_usermanager.php:826 +#: usr/local/www/system_usermanager.php:829 +#: usr/local/www/system_usermanager.php:829 +msgid "Do you really want to delete this User?" +msgstr "Bu kullanıcıyı silmek istediğinizden emin misiniz?" + +#: usr/local/www/system_usermanager.php:849 +#: usr/local/www/system_usermanager.php:847 +#: usr/local/www/system_usermanager.php:852 +#: usr/local/www/system_usermanager.php:852 +msgid "" +"Additional users can be added here. User permissions for accessing the " +"webConfigurator can be assigned directly or inherited from group " +"memberships. An icon that appears grey indicates that it is a system defined " +"object. Some system object properties can be modified but they cannot be " +"deleted." +msgstr "" +"Ek webArayüzü kullanıcıları buradan eklenebilir. webArayüzüne erişim " +"izinleri doğrudan atanabilir veya grup üyeliklerinden miras alınabilir. Gri " +"bir simge sistem tanımlı bir nesne olduğu anlamına gelir. Sistem " +"nesnelerinin bazı özellikleri değiştirilebilir ancak silinemez." + +#: usr/local/www/system_usermanager.php:854 +#: usr/local/www/system_usermanager.php:852 +#: usr/local/www/system_usermanager.php:857 +#: usr/local/www/system_usermanager.php:857 +msgid "" +"Accounts created here are also used for other parts of the system such as " +"OpenVPN, IPsec, and Captive Portal." +msgstr "" +"Burada oluşturulan hesaplar OpenVPN, IPsec ve Hizmet Portalı gibi bölümler " +"için de kullanılır." + +#: usr/local/www/system_usermanager_passwordmg.php:43 +#: usr/local/www/system_usermanager_passwordmg.php:43 +msgid "User Password" +msgstr "Kullanıcı Parolası" + +#: usr/local/www/system_usermanager_passwordmg.php:63 +#: usr/local/www/system_usermanager_passwordmg.php:63 +msgid "Password successfully changed" +msgstr "Parola başarıyla değiştirildi" + +#: usr/local/www/system_usermanager_passwordmg.php:86 +#: usr/local/www/system_usermanager_passwordmg.php:87 +#: usr/local/www/system_usermanager_passwordmg.php:92 +msgid "Sorry, you cannot change the password for a non-local user." +msgstr "Yerel olmayan kullanıcının parolasını değiştiremezsiniz." + +#: usr/local/www/system_usermanager_passwordmg.php:112 +#: usr/local/www/system_usermanager_passwordmg.php:113 +#: usr/local/www/system_usermanager_passwordmg.php:118 +msgid "Select a new password" +msgstr "Yeni parola seçiniz" + +#: usr/local/www/system_usermanager_settings.php:51 +#: usr/local/www/system_usermanager_settings.php:51 +msgid "User manager settings" +msgstr "Kullanıcı yöneticisi ayarları" + +#: usr/local/www/system_usermanager_settings.php:61 +#: usr/local/www/system_usermanager_settings.php:61 +msgid "Session timeout must be an integer value." +msgstr "Oturum zaman aşımı değeri tamsayı olmalıdır." + +#: usr/local/www/system_usermanager_settings.php:71 +#: usr/local/www/system_usermanager_settings.php:71 +msgid "" +"The test was not performed because it is supported only for ldap based " +"backends." +msgstr "" +"Sadece LDAP tabanlı arkauçlarda desteklendiğinden dolayı test " +"gerçekleştirilmedi." + +#: usr/local/www/system_usermanager_settings.php:131 +#: usr/local/www/system_usermanager_settings.php:131 +msgid "Session Timeout" +msgstr "Oturum Zaman Aşımı" + +#: usr/local/www/system_usermanager_settings.php:135 +#: usr/local/www/system_usermanager_settings.php:135 +msgid "" +"Time in minutes to expire idle management sessions. The default is 4 hours " +"(240 minutes)." +msgstr "" +"Boş duran yönetim oturumlarının kapatılma süresi. Varsayılan 4 saattir (240 " +"dakika)." + +#: usr/local/www/system_usermanager_settings.php:136 +#: usr/local/www/system_usermanager_settings.php:136 +msgid "Enter 0 to never expire sessions. NOTE: This is a security risk!" +msgstr "" +"Sıfır (0) girerek oturumların sona ermesini engelleyebilirsiniz. Not: Bu bir " +"güvenlik riski oluşturur." + +#: usr/local/www/system_usermanager_settings.php:162 +#: usr/local/www/system_usermanager_settings.php:162 +msgid "Save and Test" +msgstr "Kaydet ve Test Et" + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97 +msgid "" +"Could not connect to the LDAP server. Please check your LDAP configuration." +msgstr "LDAP sunucuya bağlanamadı. LDAP yapılandırmasını kontrol edin." + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98 +#: usr/local/www/system_usermanager_settings_test.php:119 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98 +#: usr/local/www/system_usermanager_settings_test.php:119 +msgid "Close" +msgstr "Kapat" + +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100 +#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100 +msgid "Please select which containers to Authenticate against:" +msgstr "Her taşıyıcılarla kimlik doğrulama yapılacağını seçiniz:" + +#: usr/local/www/system_usermanager_settings_test.php:76 +#: usr/local/www/system_usermanager_settings_test.php:76 +#, php-format +msgid "Could not find settings for %s%s" +msgstr "%s%s ayarları bulunamadı." + +#: usr/local/www/system_usermanager_settings_test.php:78 +msgid "Testing pfSense LDAP settings... One moment please..." +msgstr "LDAP ayarları test ediliyor... Lütfen bekleyiniz..." + +#: usr/local/www/system_usermanager_settings_test.php:82 +#: usr/local/www/system_usermanager_settings_test.php:82 +msgid "Attempting connection to" +msgstr "Bağlanmaya çalışıyor" + +#: usr/local/www/system_usermanager_settings_test.php:86 +#: usr/local/www/system_usermanager_settings_test.php:86 +msgid "Attempting bind to" +msgstr "İlişkilendirmeye çalışıyor" + +#: usr/local/www/system_usermanager_settings_test.php:90 +#: usr/local/www/system_usermanager_settings_test.php:90 +msgid "Attempting to fetch Organizational Units from" +msgstr "Yönetimsel Birimler okunuyor" + +#: usr/local/www/system_usermanager_settings_test.php:96 +#: usr/local/www/system_usermanager_settings_test.php:96 +msgid "Organization units found" +msgstr "Bulunan yönetimsel birimler" + +#: usr/local/www/system_usermanager_settings_test.php:103 +#: usr/local/www/system_usermanager_settings_test.php:108 +#: usr/local/www/system_usermanager_settings_test.php:112 +#: usr/local/www/system_usermanager_settings_test.php:103 +#: usr/local/www/system_usermanager_settings_test.php:108 +#: usr/local/www/system_usermanager_settings_test.php:112 +msgid "failed" +msgstr "başarısız" + +#: usr/local/www/upload_progress.php:44 +msgid "Sorry, we could not find an uploadid code." +msgstr "Yükleme kimliği kodu (uploadid) bulunamadı." + +#: usr/local/www/upload_progress.php:86 +msgid "Uploading Files" +msgstr "Dosyalar Yükleniyor" + +#: usr/local/www/upload_progress.php:86 +msgid "Please wait" +msgstr "Lütfen bekleyiniz" + +#: usr/local/www/upload_progress.php:95 +msgid "Uploading file" +msgstr "Dosya yükleniyor" + +#: usr/local/www/upload_progress.php:123 +msgid "Uploaded" +msgstr "Yüklendi" + +#: usr/local/www/upload_progress.php:133 +msgid "File Size" +msgstr "Dosya Boyutu" + +#: usr/local/www/upload_progress.php:145 +msgid "Completed" +msgstr "Tamamlandı" + +#: usr/local/www/upload_progress.php:155 +msgid "Estimated" +msgstr "Tahmini" + +#: usr/local/www/vpn_ipsec_phase1.php:160 +#: usr/local/www/vpn_ipsec_phase1.php:662 +#: usr/local/www/vpn_ipsec_phase1.php:675 +#: usr/local/www/vpn_ipsec_mobile.php:347 usr/local/www/vpn_ipsec_keys.php:104 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:135 usr/local/www/interfaces.php:2486 +#: usr/local/www/vpn_ipsec_phase1.php:674 +#: usr/local/www/vpn_ipsec_keys_edit.php:69 +#: usr/local/www/vpn_ipsec_keys_edit.php:135 +#: usr/local/www/vpn_ipsec_phase1.php:160 +#: usr/local/www/vpn_ipsec_phase1.php:695 +#: usr/local/www/vpn_ipsec_mobile.php:347 usr/local/www/vpn_ipsec_keys.php:104 +#: usr/local/www/interfaces.php:2516 +msgid "Pre-Shared Key" +msgstr "Ön Paylaşımlı Anahtar" + +#: usr/local/www/vpn_ipsec_phase1.php:171 +#: usr/local/www/vpn_ipsec_phase1.php:564 +#: usr/local/www/vpn_ipsec_phase1.php:577 +#: usr/local/www/vpn_ipsec_phase1.php:576 +#: usr/local/www/vpn_ipsec_phase1.php:171 +#: usr/local/www/vpn_ipsec_phase1.php:597 +msgid "Remote gateway" +msgstr "Uzak ağ geçidi" + +#: usr/local/www/vpn_ipsec_phase1.php:177 +#: usr/local/www/vpn_ipsec_phase1.php:177 +msgid "The P1 lifetime must be an integer." +msgstr "P1 yaşam süresi sayı değeri olmalıdır." + +#: usr/local/www/vpn_ipsec_phase1.php:180 +#: usr/local/www/vpn_ipsec_phase1.php:181 +msgid "A valid remote gateway address or host name must be specified." +msgstr "Geçerli bir uzak ağ geçidi ya da host adı belirtilmelidir." + +#: usr/local/www/vpn_ipsec_phase1.php:188 +#: usr/local/www/vpn_ipsec_phase1.php:194 +#, php-format +msgid "The remote gateway \"%1$s\" is already used by phase1 \"%2$s\"." +msgstr "Uzak ağ geçidi \"%1$s\" aşama 1 \"%2$s\" tarafından kullanılıyor." + +#: usr/local/www/vpn_ipsec_phase1.php:201 +#: usr/local/www/vpn_ipsec_phase1.php:222 +msgid "Please enter an address for 'My Identifier'" +msgstr "Lütfen 'Tanımlayıcım' için bir adres giriniz" + +#: usr/local/www/vpn_ipsec_phase1.php:204 +#: usr/local/www/vpn_ipsec_phase1.php:225 +msgid "Please enter a keyid tag for 'My Identifier'" +msgstr "Lütfen 'Tanımlayıcım' için bir anahtar kimliği başlığı giriniz" + +#: usr/local/www/vpn_ipsec_phase1.php:207 +#: usr/local/www/vpn_ipsec_phase1.php:228 +msgid "Please enter a fully qualified domain name for 'My Identifier'" +msgstr "Lütfen 'Tanmlayıcım' için tam bir alan (domain) adı giriniz" + +#: usr/local/www/vpn_ipsec_phase1.php:210 +#: usr/local/www/vpn_ipsec_phase1.php:231 +msgid "Please enter a user and fully qualified domain name for 'My Identifier'" +msgstr "" +"Lütfen 'Tanmlayıcım' için bir kullanıcı ve tam bir alan (domain) adı giriniz" + +#: usr/local/www/vpn_ipsec_phase1.php:213 +#: usr/local/www/vpn_ipsec_phase1.php:234 +msgid "Please enter a dynamic domain name for 'My Identifier'" +msgstr "Lütfen 'Tanmlayıcım' için dinamik bir alan (domain) adı giriniz" + +#: usr/local/www/vpn_ipsec_phase1.php:216 +#: usr/local/www/vpn_ipsec_phase1.php:237 +msgid "A valid IP address for 'My identifier' must be specified." +msgstr "Lütfen 'Tanmlayıcım' için geçerli bir IP adresi giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:219 +#: usr/local/www/vpn_ipsec_phase1.php:240 +msgid "A valid domain name for 'My identifier' must be specified." +msgstr "Lütfen 'Tanmlayıcım' için geçerli bir domain adı giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:223 +#: usr/local/www/vpn_ipsec_phase1.php:244 +msgid "A valid FQDN for 'My identifier' must be specified." +msgstr "Lütfen 'Tanmlayıcım' için geçerli bir FQDN adresi giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:228 +#: usr/local/www/vpn_ipsec_phase1.php:249 +msgid "" +"A valid User FQDN in the form of user@my.domain.com for 'My identifier' must " +"be specified." +msgstr "" +"Lütfen 'Tanımlayıcım' için geçerli bir FQDN giriniz. Örn: " +"kullanici@guncel.adres.com" + +#: usr/local/www/vpn_ipsec_phase1.php:233 +#: usr/local/www/vpn_ipsec_phase1.php:254 +msgid "A valid Dynamic DNS address for 'My identifier' must be specified." +msgstr "Lütfen 'Tanımlayıcım' için geçerli bir Dinamik DNS adresi giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:243 +#: usr/local/www/vpn_ipsec_phase1.php:264 +msgid "Please enter an address for 'Peer Identifier'" +msgstr "'Eş Tanımlayıcı' için bir adres giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:246 +#: usr/local/www/vpn_ipsec_phase1.php:267 +msgid "Please enter a keyid tag for 'Peer Identifier'" +msgstr "'Eş Tanımlayıcı' için bir anahtar kimliği takısı giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:249 +#: usr/local/www/vpn_ipsec_phase1.php:270 +msgid "Please enter a fully qualified domain name for 'Peer Identifier'" +msgstr "'Eş Tanımlayıcı' için tam bir alan (domain) adı giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:252 +#: usr/local/www/vpn_ipsec_phase1.php:273 +msgid "" +"Please enter a user and fully qualified domain name for 'Peer Identifier'" +msgstr "" +"'Eş Tanımlayıcı' için bir kullanıcı ve tam bir alan (domain) adı giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:255 +#: usr/local/www/vpn_ipsec_phase1.php:276 +msgid "A valid IP address for 'Peer identifier' must be specified." +msgstr "'Eş Tanımlayıcı' için geçerli bir IP giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:258 +#: usr/local/www/vpn_ipsec_phase1.php:279 +msgid "A valid domain name for 'Peer identifier' must be specified." +msgstr "'Eş Tanımlayıcı' için geçerli bir alan adı giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:262 +#: usr/local/www/vpn_ipsec_phase1.php:283 +msgid "A valid FQDN for 'Peer identifier' must be specified." +msgstr "Lütfen 'Eş tanımlayıcı' için geçerli bir FQDN giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:267 +#: usr/local/www/vpn_ipsec_phase1.php:288 +msgid "" +"A valid User FQDN in the form of user@my.domain.com for 'Peer identifier' " +"must be specified." +msgstr "" +"Lütfen 'Eş tanımlayıcı' için geçerli bir FQDN giriniz. Örn: " +"kullanici@guncel.adres.com" + +#: usr/local/www/vpn_ipsec_phase1.php:273 +#: usr/local/www/vpn_ipsec_phase1.php:294 +msgid "A numeric value must be specified for DPD delay." +msgstr "DPD gecikmesi değeri sayı olmalıdır." + +#: usr/local/www/vpn_ipsec_phase1.php:276 +#: usr/local/www/vpn_ipsec_phase1.php:297 +msgid "A numeric value must be specified for DPD retries." +msgstr "DPD denemeleri sayı olmalıdır." + +#: usr/local/www/vpn_ipsec_phase1.php:358 +#: usr/local/www/vpn_ipsec_phase1.php:360 +#: usr/local/www/vpn_ipsec_phase1.php:379 +#: usr/local/www/vpn_ipsec_phase1.php:381 +msgid "Edit Phase 1" +msgstr "Aşama 1 Düzenle" + +#: usr/local/www/vpn_ipsec_phase1.php:509 +#: usr/local/www/vpn_openvpn_client.php:383 +#: usr/local/www/vpn_openvpn_csc.php:311 +#: usr/local/www/vpn_openvpn_server.php:601 +#: usr/local/www/vpn_openvpn_server.php:674 +#: usr/local/www/vpn_openvpn_client.php:388 +#: usr/local/www/vpn_openvpn_csc.php:310 +#: usr/local/www/vpn_openvpn_server.php:692 +#: usr/local/www/vpn_openvpn_client.php:396 +#: usr/local/www/vpn_ipsec_phase1.php:508 +#: usr/local/www/vpn_openvpn_client.php:414 +#: usr/local/www/vpn_openvpn_csc.php:310 +#: usr/local/www/vpn_ipsec_phase1.php:529 +#: usr/local/www/vpn_openvpn_server.php:718 +msgid "General information" +msgstr "Genel Bilgi" + +#: usr/local/www/vpn_ipsec_phase1.php:515 +#: usr/local/www/vpn_ipsec_phase1.php:514 +#: usr/local/www/vpn_ipsec_phase1.php:535 +msgid "Disable this phase1 entry" +msgstr "Bu aşama 1 girdisini devre dışı bırak" + +#: usr/local/www/vpn_ipsec_phase1.php:517 +#: usr/local/www/vpn_ipsec_phase1.php:516 +#: usr/local/www/vpn_ipsec_phase1.php:537 +msgid "" +"Set this option to disable this phase1 without removing it from the list" +msgstr "Bu seçenekle aşama 1'i silmeden devre dışı bırakabilirsiniz." + +#: usr/local/www/vpn_ipsec_phase1.php:523 +#: usr/local/www/vpn_ipsec_phase1.php:522 +#: usr/local/www/vpn_ipsec_phase1.php:543 +msgid "Internet Protocol" +msgstr "İnternet Protokolü" + +#: usr/local/www/vpn_ipsec_phase1.php:534 +#: usr/local/www/vpn_ipsec_phase1.php:533 +#: usr/local/www/vpn_ipsec_phase1.php:554 +msgid "Select the Internet Protocol family from this dropdown" +msgstr "Açılır menüden İnternet Protokol cinsini seçiniz" + +#: usr/local/www/vpn_ipsec_phase1.php:557 +#: usr/local/www/vpn_ipsec_phase1.php:570 +#: usr/local/www/vpn_ipsec_phase1.php:569 +#: usr/local/www/vpn_ipsec_phase1.php:590 +msgid "Select the interface for the local endpoint of this phase1 entry" +msgstr "Bu aşama 1 girdisinin yerel ucu için bir arabirim seçiniz." + +#: usr/local/www/vpn_ipsec_phase1.php:568 +#: usr/local/www/vpn_ipsec_phase1.php:581 +#: usr/local/www/vpn_ipsec_phase1.php:580 +#: usr/local/www/vpn_ipsec_phase1.php:601 +msgid "Enter the public IP address or host name of the remote gateway" +msgstr "Uzak ağ geçidinin dış IP adresini veya alan adını giriniz." + +#: usr/local/www/vpn_ipsec_phase1.php:590 +#: usr/local/www/vpn_ipsec_phase1.php:603 +#: usr/local/www/vpn_ipsec_phase1.php:602 +#: usr/local/www/vpn_ipsec_phase1.php:623 +msgid "Phase 1 proposal (Authentication)" +msgstr "Aşama 1 teklif (Kimlik doğrulama)" + +#: usr/local/www/vpn_ipsec_phase1.php:594 +#: usr/local/www/vpn_openvpn_client.php:514 +#: usr/local/www/vpn_openvpn_client.php:519 +#: usr/local/www/vpn_ipsec_phase1.php:607 +#: usr/local/www/vpn_openvpn_client.php:537 +#: usr/local/www/vpn_ipsec_phase1.php:606 +#: usr/local/www/vpn_openvpn_client.php:556 +#: usr/local/www/vpn_ipsec_phase1.php:627 +msgid "Authentication method" +msgstr "Kimlik doğrulama yöntemi" + +#: usr/local/www/vpn_ipsec_phase1.php:609 +#: usr/local/www/vpn_ipsec_phase1.php:735 +#: usr/local/www/vpn_ipsec_phase1.php:753 +#: usr/local/www/vpn_ipsec_phase1.php:622 +#: usr/local/www/vpn_ipsec_phase1.php:748 +#: usr/local/www/vpn_ipsec_phase1.php:766 +#: usr/local/www/vpn_ipsec_phase1.php:621 +#: usr/local/www/vpn_ipsec_phase1.php:747 +#: usr/local/www/vpn_ipsec_phase1.php:763 +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:768 +#: usr/local/www/vpn_ipsec_phase1.php:784 +msgid "Must match the setting chosen on the remote side" +msgstr "Uzak uçta seçilen ayarla eşleşmelidir." + +#: usr/local/www/vpn_ipsec_phase1.php:614 +#: usr/local/www/vpn_ipsec_phase1.php:627 +#: usr/local/www/vpn_ipsec_phase1.php:626 +#: usr/local/www/vpn_ipsec_phase1.php:647 +msgid "Negotiation mode" +msgstr "Uzlaşma kipi" + +#: usr/local/www/vpn_ipsec_phase1.php:625 +#: usr/local/www/vpn_ipsec_phase1.php:638 +#: usr/local/www/vpn_ipsec_phase1.php:637 +#: usr/local/www/vpn_ipsec_phase1.php:658 +msgid "Aggressive is more flexible, but less secure" +msgstr "'Saldırgan' dah esnek ama daha az güvenlidir." + +#: usr/local/www/vpn_ipsec_phase1.php:629 +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:641 +#: usr/local/www/vpn_ipsec_phase1.php:662 +msgid "My identifier" +msgstr "Tanımlayıcım" + +#: usr/local/www/vpn_ipsec_phase1.php:642 +#: usr/local/www/vpn_ipsec_phase1.php:655 +#: usr/local/www/vpn_ipsec_phase1.php:654 +#: usr/local/www/vpn_ipsec_phase1.php:675 +msgid "Peer identifier" +msgstr "Eş tanımlayıcı" + +#: usr/local/www/vpn_ipsec_phase1.php:657 +#: usr/local/www/vpn_ipsec_phase1.php:670 +#: usr/local/www/vpn_ipsec_phase1.php:669 +#: usr/local/www/vpn_ipsec_phase1.php:690 +msgid "" +"NOTE: This is known as the \"group\" setting on some VPN client " +"implementations" +msgstr "Not: Bazı VPN istemcilerde \"grup\" olarak bilinir." + +#: usr/local/www/vpn_ipsec_phase1.php:668 +#: usr/local/www/vpn_ipsec_phase1.php:681 +msgid "Input your pre-shared key string" +msgstr "Ön paylaşımlı anahtar dizenizi girin" + +#: usr/local/www/vpn_ipsec_phase1.php:673 +#: usr/local/www/vpn_ipsec_phase1.php:686 +#: usr/local/www/vpn_ipsec_phase1.php:685 +#: usr/local/www/vpn_ipsec_phase1.php:706 +msgid "Policy Generation" +msgstr "İlke Üretimi" + +#: usr/local/www/vpn_ipsec_phase1.php:684 +#: usr/local/www/vpn_ipsec_phase1.php:697 +#: usr/local/www/vpn_ipsec_phase1.php:696 +#: usr/local/www/vpn_ipsec_phase1.php:717 +msgid "" +"When working as a responder (as with mobile clients), this controls how " +"policies are generated based on SA proposals." +msgstr "" +"Yanıtlayıcı olarak çalışırken (mobil istemcilerle olduğu gibi), bu ayar SA " +"tekliflerine göre ilkelerin nasıl üretileceğini belirler." + +#: usr/local/www/vpn_ipsec_phase1.php:689 +#: usr/local/www/vpn_ipsec_phase1.php:702 +#: usr/local/www/vpn_ipsec_phase1.php:701 +#: usr/local/www/vpn_ipsec_phase1.php:722 +msgid "Proposal Checking" +msgstr "Teklif Kontrolü" + +#: usr/local/www/vpn_ipsec_phase1.php:700 +#: usr/local/www/vpn_ipsec_phase1.php:713 +#: usr/local/www/vpn_ipsec_phase1.php:712 +#: usr/local/www/vpn_ipsec_phase1.php:733 +msgid "" +"Specifies the action of lifetime length, key length, and PFS of the phase 2 " +"selection on the responder side, and the action of lifetime check in phase 1." +msgstr "" +"Yanıtlayan tarafta aşama 2 seçiminin ömür, anahtar uzunluğu ve PFS eylemini; " +"aşama 1'de ömür kontrolü eylemini belirtir." + +#: usr/local/www/vpn_ipsec_phase1.php:705 +#: usr/local/www/vpn_openvpn_client.php:706 +#: usr/local/www/vpn_openvpn_server.php:898 +#: usr/local/www/vpn_openvpn_server.php:971 +#: usr/local/www/vpn_openvpn_client.php:711 +#: usr/local/www/vpn_ipsec_phase1.php:718 +#: usr/local/www/vpn_openvpn_server.php:999 +#: usr/local/www/vpn_openvpn_client.php:729 +#: usr/local/www/vpn_ipsec_phase1.php:717 +#: usr/local/www/vpn_openvpn_client.php:748 +#: usr/local/www/vpn_ipsec_phase1.php:738 +#: usr/local/www/vpn_openvpn_server.php:1026 +msgid "Encryption algorithm" +msgstr "Şifreleme algoritması" + +#: usr/local/www/vpn_ipsec_phase1.php:724 +#: usr/local/www/vpn_ipsec_phase1.php:737 +#: usr/local/www/vpn_ipsec_phase1.php:736 +#: usr/local/www/vpn_ipsec_phase1.php:757 +msgid "Hash algorithm" +msgstr "Değer üretme algoritması" + +#: usr/local/www/vpn_ipsec_phase1.php:740 +#: usr/local/www/vpn_ipsec_phase1.php:753 +#: usr/local/www/vpn_ipsec_phase1.php:752 +#: usr/local/www/vpn_ipsec_phase1.php:773 +msgid "DH key group" +msgstr "DH anahtar grup" + +#: usr/local/www/vpn_ipsec_phase1.php:751 +#: usr/local/www/vpn_ipsec_phase2.php:603 +#: usr/local/www/vpn_ipsec_phase2.php:629 +#: usr/local/www/vpn_ipsec_phase1.php:764 +#, fuzzy +msgid "1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit" +msgstr "1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit" + +#: usr/local/www/vpn_ipsec_phase1.php:765 +#: usr/local/www/vpn_ipsec_phase1.php:778 +#: usr/local/www/vpn_ipsec_phase1.php:775 +#: usr/local/www/vpn_ipsec_phase1.php:796 +msgid "My Certificate" +msgstr "Sertifikam" + +#: usr/local/www/vpn_ipsec_phase1.php:779 +#: usr/local/www/vpn_ipsec_phase1.php:792 +#: usr/local/www/vpn_ipsec_phase1.php:789 +#: usr/local/www/vpn_ipsec_phase1.php:810 +msgid "Select a certificate previously configured in the Certificate Manager" +msgstr "Daha önce Sertifika Yöneticisinde yapılandırılmış bir sertifika seçiniz" + +#: usr/local/www/vpn_ipsec_phase1.php:784 +#: usr/local/www/vpn_ipsec_phase1.php:797 +#: usr/local/www/vpn_ipsec_phase1.php:794 +#: usr/local/www/vpn_ipsec_phase1.php:815 +msgid "My Certificate Authority" +msgstr "Sertifika Sunucum" + +#: usr/local/www/vpn_ipsec_phase1.php:798 +#: usr/local/www/vpn_ipsec_phase1.php:811 +#: usr/local/www/vpn_ipsec_phase1.php:808 +#: usr/local/www/vpn_ipsec_phase1.php:829 +msgid "" +"Select a certificate authority previously configured in the Certificate " +"Manager" +msgstr "" +"Daha önce Sertifika Yöneticisinde yapılandırılmış bir sertifika otoritesi " +"seçiniz" + +#: usr/local/www/vpn_ipsec_phase1.php:809 +#: usr/local/www/vpn_ipsec_phase1.php:822 +#: usr/local/www/vpn_ipsec_phase1.php:819 +#: usr/local/www/vpn_ipsec_phase1.php:840 +msgid "NAT Traversal" +msgstr "NAT Çözümleme" + +#: usr/local/www/vpn_ipsec_phase1.php:814 +#: usr/local/www/vpn_ipsec_phase1.php:827 +#: usr/local/www/vpn_ipsec_phase1.php:824 +#: usr/local/www/vpn_ipsec_phase1.php:845 +msgid "Force" +msgstr "Zorla" + +#: usr/local/www/vpn_ipsec_phase1.php:818 +#: usr/local/www/vpn_ipsec_phase1.php:831 +#: usr/local/www/vpn_ipsec_phase1.php:828 +#: usr/local/www/vpn_ipsec_phase1.php:849 +msgid "" +"Set this option to enable the use of NAT-T (i.e. the encapsulation of ESP in " +"UDP packets) if needed, which can help with clients that are behind " +"restrictive firewalls" +msgstr "" +"Bu seçeneği, gerekiyorsa kısıtlayıcılığı yüksek güvenlik duvarları arkasında " +"bulunan istemcilere yardımı olabilecek NAT-T (ESPnin UDP paketleriyle " +"sarmalanması) kullanımını açmak için kullanın." + +#: usr/local/www/vpn_ipsec_phase1.php:824 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:834 +#: usr/local/www/vpn_ipsec_phase1.php:855 +msgid "Dead Peer Detection" +msgstr "Ölü Eş Keşfi" + +#: usr/local/www/vpn_ipsec_phase1.php:827 +#: usr/local/www/vpn_ipsec_phase1.php:840 +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:858 +msgid "Enable DPD" +msgstr "DPD'yi Etkinleştir" + +#: usr/local/www/vpn_ipsec_phase1.php:833 +#: usr/local/www/vpn_ipsec_phase1.php:846 +#: usr/local/www/vpn_ipsec_phase1.php:843 +#: usr/local/www/vpn_ipsec_phase1.php:864 +msgid "Delay between requesting peer acknowledgement" +msgstr "Eş onayı istemleri arasındaki bekleme" + +#: usr/local/www/vpn_ipsec_phase1.php:837 +#: usr/local/www/vpn_ipsec_phase1.php:850 +#: usr/local/www/vpn_ipsec_phase1.php:847 +#: usr/local/www/vpn_ipsec_phase1.php:868 +msgid "retries" +msgstr "deneme" + +#: usr/local/www/vpn_ipsec_phase1.php:839 +#: usr/local/www/vpn_ipsec_phase1.php:852 +#: usr/local/www/vpn_ipsec_phase1.php:849 +#: usr/local/www/vpn_ipsec_phase1.php:870 +msgid "Number of consecutive failures allowed before disconnect" +msgstr "Bağlantı koparılmadan önce ardışık kaç başarısızlığa izin veriliyor" + +#: usr/local/www/vpn_ipsec_phase2.php:109 +#: usr/local/www/vpn_ipsec_phase2.php:111 +#: usr/local/www/vpn_ipsec_phase2.php:111 +msgid "A valid ikeid must be specified." +msgstr "Geçerli bir ikeid belirtilmelidir." + +#: usr/local/www/vpn_ipsec_phase2.php:113 +#: usr/local/www/vpn_ipsec_phase2.php:115 +#: usr/local/www/vpn_ipsec_phase2.php:115 +msgid "Local network type" +msgstr "Yerel ağ türü" + +#: usr/local/www/vpn_ipsec_phase2.php:113 +#: usr/local/www/vpn_ipsec_phase2.php:115 +#: usr/local/www/vpn_ipsec_phase2.php:115 +msgid "P2 Hash Algorithms" +msgstr "P2 Değer Üretme Algoritmaları" + +#: usr/local/www/vpn_ipsec_phase2.php:116 +#: usr/local/www/vpn_ipsec_phase2.php:118 +#: usr/local/www/vpn_ipsec_phase2.php:118 +msgid "Remote network type" +msgstr "Uzak ağ türü" + +#: usr/local/www/vpn_ipsec_phase2.php:126 +#: usr/local/www/vpn_ipsec_phase2.php:128 +#: usr/local/www/vpn_ipsec_phase2.php:128 +msgid "A valid local network bit count must be specified." +msgstr "Geçerli bir yerel ağ bit sayısı belirtilmelidir." + +#: usr/local/www/vpn_ipsec_phase2.php:129 +#: usr/local/www/vpn_ipsec_phase2.php:131 +#: usr/local/www/vpn_ipsec_phase2.php:131 +msgid "A valid local network IP address must be specified." +msgstr "Geçerli bir yerel ağ IP adresi belirtilmelidir." + +#: usr/local/www/vpn_ipsec_phase2.php:136 +#: usr/local/www/vpn_ipsec_phase2.php:146 +#: usr/local/www/vpn_ipsec_phase2.php:170 +#: usr/local/www/vpn_ipsec_phase2.php:178 +msgid "A valid remote network bit count must be specified." +msgstr "Geçerli bir uzak ağ bit sayısı belirtilmelidir." + +#: usr/local/www/vpn_ipsec_phase2.php:139 +#: usr/local/www/vpn_ipsec_phase2.php:149 +#: usr/local/www/vpn_ipsec_phase2.php:173 +#: usr/local/www/vpn_ipsec_phase2.php:181 +msgid "A valid remote network IP address must be specified." +msgstr "Geçerli bir uzak ağ IP adresi belirtilmelidir." + +#: usr/local/www/vpn_ipsec_phase2.php:158 +#: usr/local/www/vpn_ipsec_phase2.php:162 +#: usr/local/www/vpn_ipsec_phase2.php:168 +#: usr/local/www/vpn_ipsec_phase2.php:172 +#: usr/local/www/vpn_ipsec_phase2.php:192 +#: usr/local/www/vpn_ipsec_phase2.php:196 +#: usr/local/www/vpn_ipsec_phase2.php:206 +#: usr/local/www/vpn_ipsec_phase2.php:210 +msgid "Phase2 with this Local Network is already defined for mobile clients." +msgstr "Mobil istemciler için bu Yerel Ağda Aşama 2 zaten tanımlı." + +#: usr/local/www/vpn_ipsec_phase2.php:189 +#: usr/local/www/vpn_ipsec_phase2.php:193 +#: usr/local/www/vpn_ipsec_phase2.php:199 +#: usr/local/www/vpn_ipsec_phase2.php:203 +#: usr/local/www/vpn_ipsec_phase2.php:223 +#: usr/local/www/vpn_ipsec_phase2.php:227 +#: usr/local/www/vpn_ipsec_phase2.php:237 +#: usr/local/www/vpn_ipsec_phase2.php:241 +msgid "" +"Phase2 with this Local/Remote networks combination is already defined for " +"this Phase1." +msgstr "" +"Bu Yerel/Uzak ağ kombinasyonları için bu Aşama 1'in 2nci Aşaması zaten " +"tanımlı." + +#: usr/local/www/vpn_ipsec_phase2.php:204 +#: usr/local/www/vpn_ipsec_phase2.php:216 +#: usr/local/www/vpn_ipsec_phase2.php:240 +#: usr/local/www/vpn_ipsec_phase2.php:254 +msgid "At least one encryption algorithm must be selected." +msgstr "En az bir şifreleme algoritması seçilmelidir." + +#: usr/local/www/vpn_ipsec_phase2.php:207 +#: usr/local/www/vpn_ipsec_phase2.php:220 +#: usr/local/www/vpn_ipsec_phase2.php:244 +#: usr/local/www/vpn_ipsec_phase2.php:258 +msgid "The P2 lifetime must be an integer." +msgstr "P2 yaşam süresi değeri tamsayı olmalıdır." + +#: usr/local/www/vpn_ipsec_phase2.php:255 +#: usr/local/www/vpn_ipsec_phase2.php:257 +#: usr/local/www/vpn_ipsec_phase2.php:268 +#: usr/local/www/vpn_ipsec_phase2.php:270 +#: usr/local/www/vpn_ipsec_phase2.php:294 +#: usr/local/www/vpn_ipsec_phase2.php:296 +#: usr/local/www/vpn_ipsec_phase2.php:316 +#: usr/local/www/vpn_ipsec_phase2.php:318 +msgid "Edit Phase 2" +msgstr "Aşama 2 Düzenle" + +#: usr/local/www/vpn_ipsec_phase2.php:396 +#: usr/local/www/vpn_ipsec_phase2.php:422 +#: usr/local/www/vpn_ipsec_phase2.php:488 +#: usr/local/www/vpn_ipsec_phase2.php:510 +msgid "Disable this phase2 entry" +msgstr "Bu Aşama 2 girdisini devre dışı bırak" + +#: usr/local/www/vpn_ipsec_phase2.php:398 +#: usr/local/www/vpn_ipsec_phase2.php:424 +#: usr/local/www/vpn_ipsec_phase2.php:490 +#: usr/local/www/vpn_ipsec_phase2.php:512 +msgid "" +"Set this option to disable this phase2 entry without removing it from the " +"list" +msgstr "" +"Bu seçeneği etkinleştirerek aşama 2 girdisini lsiteden silmeden devre dışı " +"bırakabilirsiniz" + +#: usr/local/www/vpn_ipsec_phase2.php:433 +#: usr/local/www/vpn_ipsec_phase2.php:459 +#: usr/local/www/vpn_ipsec_phase2.php:525 +#: usr/local/www/vpn_ipsec_phase2.php:561 +#: usr/local/www/vpn_ipsec_phase2.php:547 +#: usr/local/www/vpn_ipsec_phase2.php:582 +#, php-format +msgid "%s subnet" +msgstr "%s altağ" + +#: usr/local/www/vpn_ipsec_phase2.php:512 +#: usr/local/www/vpn_ipsec_phase2.php:538 +#: usr/local/www/vpn_ipsec_phase2.php:640 +#: usr/local/www/vpn_ipsec_phase2.php:661 +msgid "Phase 2 proposal (SA/Key Exchange)" +msgstr "Aşama 2 teklif (SA/Anahtar Değişimi)" + +#: usr/local/www/vpn_ipsec_phase2.php:527 +#: usr/local/www/vpn_ipsec_phase2.php:553 +#: usr/local/www/vpn_ipsec_phase2.php:655 +#: usr/local/www/vpn_ipsec_phase2.php:676 +msgid "ESP is encryption, AH is authentication only" +msgstr "ESP şifreleme, AH sadece kimlik doğrulama içindir" + +#: usr/local/www/vpn_ipsec_phase2.php:532 +#: usr/local/www/vpn_ipsec_phase2.php:558 +#: usr/local/www/vpn_ipsec_phase2.php:660 +#: usr/local/www/vpn_ipsec_phase2.php:681 +msgid "Encryption algorithms" +msgstr "Şifreleme algoritmaları" + +#: usr/local/www/vpn_ipsec_phase2.php:574 +#: usr/local/www/vpn_ipsec_phase2.php:600 +#: usr/local/www/vpn_ipsec_phase2.php:702 +#: usr/local/www/vpn_ipsec_phase2.php:723 +msgid "" +"Hint: use 3DES for best compatibility or if you have a hardware crypto " +"accelerator card. Blowfish is usually the fastest in software encryption" +msgstr "" +"İpucu: En yüksek uyumluluk için ya da donanım şifreleme hızlandırıcı " +"kartınız varsa 3DES kullanın. Yazılım şifreleme söz konusu olduğunda " +"Blowfish en hızlısıdır." + +#: usr/local/www/vpn_ipsec_phase2.php:580 +#: usr/local/www/vpn_ipsec_phase2.php:606 +#: usr/local/www/vpn_ipsec_phase2.php:708 +#: usr/local/www/vpn_ipsec_phase2.php:729 +msgid "Hash algorithms" +msgstr "Değer üretme algoritmaları" + +#: usr/local/www/vpn_ipsec_phase2.php:590 +#: usr/local/www/vpn_ipsec_phase2.php:616 +#: usr/local/www/vpn_ipsec_phase2.php:718 +#: usr/local/www/vpn_ipsec_phase2.php:739 +msgid "PFS key group" +msgstr "PFS anahtar grubu" + +#: usr/local/www/vpn_ipsec_phase2.php:614 +#: usr/local/www/vpn_ipsec_phase2.php:640 +#: usr/local/www/vpn_ipsec_phase2.php:736 +#: usr/local/www/vpn_ipsec_phase2.php:757 +msgid "Set globally in mobile client options" +msgstr "Mobil istemci seçeneklerinde genel olarak yapılandırılır" + +#: usr/local/www/vpn_ipsec_phase2.php:632 +#: usr/local/www/vpn_ipsec_phase2.php:658 +#: usr/local/www/vpn_ipsec_phase2.php:754 +#: usr/local/www/vpn_ipsec_phase2.php:775 +msgid "Automatically ping host" +msgstr "Hostu otomatik pingle" + +#: usr/local/www/vpn_l2tp.php:300 +msgid "Enable l2tp server" +msgstr "L2TP sunucuyu etkinleştir" + +#: usr/local/www/vpn_l2tp.php:325 usr/local/www/vpn_l2tp.php:326 +#: usr/local/www/vpn_l2tp.php:329 +msgid "" +"Enter the IP address the L2TP server should give to clients for use as their " +"\"gateway\"" +msgstr "" +"L2TP sunucunun tüm istemcilere \"ağ geçidi\" olarak göndereceği IP adresini " +"giriniz." + +#: usr/local/www/vpn_l2tp.php:337 usr/local/www/vpn_l2tp.php:338 +#: usr/local/www/vpn_l2tp.php:341 +msgid "Specify the starting address for the client IP address subnet." +msgstr "İstemci IP adres aştağı için başlangış adresi belirtiniz." + +#: usr/local/www/vpn_l2tp.php:341 usr/local/www/vpn_pppoe_edit.php:390 +#: usr/local/www/vpn_pppoe_edit.php:391 usr/local/www/vpn_pppoe_edit.php:394 +msgid "Subnet netmask" +msgstr "Altağ maskesi" + +# kelime içinde anlamı olmadığı için boş geçilmelidir. +#: usr/local/www/vpn_l2tp.php:354 usr/local/www/vpn_pppoe_edit.php:403 +#: usr/local/www/vpn_pppoe_edit.php:404 usr/local/www/vpn_l2tp.php:355 +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_pppoe_edit.php:407 +msgid "is" +msgstr " " + +#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:359 +#: usr/local/www/vpn_l2tp.php:362 +msgid "Number of L2TP users" +msgstr "L2TP kullanıcı sayısı" + +#: usr/local/www/vpn_l2tp.php:371 usr/local/www/vpn_l2tp.php:372 +#: usr/local/www/vpn_l2tp.php:375 +msgid "is ten L2TP clients" +msgstr "10 (on) L2TP istemcisidir" + +#: usr/local/www/vpn_l2tp.php:375 usr/local/www/vpn_l2tp.php:376 +#: usr/local/www/vpn_l2tp.php:379 +msgid "Secret" +msgstr "Anahtar" + +#: usr/local/www/vpn_l2tp.php:379 usr/local/www/vpn_l2tp.php:380 +#: usr/local/www/vpn_l2tp.php:383 +msgid "" +"Specify optional secret shared between peers. Required on some devices/" +"setups." +msgstr "" +"Eşler arasında paylaşılan ve isteğe bağlı olan anahtarı belirtin. Bazı " +"aygıtlarda ve yapılandırmalarda gereklidir." + +#: usr/local/www/vpn_l2tp.php:383 +msgid "Encryption type" +msgstr "Şifreleme türü" + +#: usr/local/www/vpn_l2tp.php:386 usr/local/www/vpn_l2tp.php:387 +#: usr/local/www/vpn_l2tp.php:390 +#, fuzzy +msgid "CHAP" +msgstr "CHAP" + +#: usr/local/www/vpn_l2tp.php:387 usr/local/www/services_captiveportal.php:607 +#: usr/local/www/services_captiveportal.php:605 usr/local/www/vpn_l2tp.php:388 +#: usr/local/www/vpn_l2tp.php:391 usr/local/www/services_captiveportal.php:606 +#, fuzzy +msgid "PAP" +msgstr "PAP" + +#: usr/local/www/vpn_l2tp.php:390 usr/local/www/vpn_l2tp.php:391 +#: usr/local/www/vpn_l2tp.php:394 +msgid "Specifies which protocol to use for authentication." +msgstr "Kimlik doğrulama için hangi protokolün kullanılacağını belirler." + +#: usr/local/www/vpn_l2tp.php:394 usr/local/www/vpn_l2tp.php:395 +#: usr/local/www/vpn_l2tp.php:398 +msgid "L2TP DNS Servers" +msgstr "L2TP DNS Sunucuları" + +#: usr/local/www/vpn_l2tp.php:400 usr/local/www/vpn_l2tp.php:401 +#: usr/local/www/vpn_l2tp.php:404 +msgid "primary and secondary DNS servers assigned to L2TP clients" +msgstr "L2TP istemcilere atanacak birincil ve ikincil DNS sunucu" + +#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_l2tp.php:415 +#: usr/local/www/vpn_l2tp.php:418 +msgid "" +"When set, all users will be authenticated using the RADIUS server specified " +"below. The local user database will not be used." +msgstr "" +"Etkinleştirildiğinde istemciler aşağıda belirtilen RADIUS sunucusundan " +"kimlik doğrularlar. Yerel kullanıcı veritabanı kullanılmaz." + +#: usr/local/www/vpn_l2tp.php:418 usr/local/www/vpn_l2tp.php:419 +#: usr/local/www/vpn_l2tp.php:422 +msgid "Sends accounting packets to the RADIUS server." +msgstr "Hesaplandırma paketlerini RADIUS sunucuya gönderir." + +#: usr/local/www/vpn_l2tp.php:421 +msgid "RADIUS server" +msgstr "RADIUS sunucu" + +#: usr/local/www/vpn_l2tp.php:425 usr/local/www/vpn_l2tp.php:426 +#: usr/local/www/vpn_l2tp.php:429 +msgid "Enter the IP address of the RADIUS server." +msgstr "RADIUS sunucunun IP adresini giriniz." + +#: usr/local/www/vpn_l2tp.php:432 usr/local/www/vpn_l2tp.php:433 +#: usr/local/www/vpn_l2tp.php:436 +msgid "" +"Enter the shared secret that will be used to authenticate to the RADIUS " +"server." +msgstr "" +"RADIUS sunucu ile kimlik doğrulamada kullanılacak paylaşımlı anahtarı " +"giriniz." + +#: usr/local/www/vpn_l2tp.php:435 +msgid "RADIUS issued IP's" +msgstr "RADIUS tarafından sağlanan IPler" + +#: usr/local/www/vpn_l2tp.php:439 usr/local/www/vpn_l2tp.php:440 +#: usr/local/www/vpn_l2tp.php:443 +msgid "Issue IP Addresses via RADIUS server." +msgstr "IP Adreslerini RADIUS sunucu sağlasın." + +#: usr/local/www/vpn_l2tp.php:452 usr/local/www/vpn_l2tp.php:453 +#: usr/local/www/vpn_l2tp.php:456 +msgid "" +"Don't forget to add a firewall rule to permit traffic from L2TP clients!" +msgstr "" +"Güvenlik Duvarında L2TP istemcilerinden trafiğe izin verecek kural " +"oluşturulmalıdır!" + +#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87 +#: usr/local/www/vpn_l2tp_users.php:87 +msgid "The l2tp user list has been modified" +msgstr "L2TP kullanıcı listesi değiştirildi" + +#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87 +#: usr/local/www/vpn_l2tp_users.php:87 +msgid "Warning: this will terminate all current l2tp sessions!" +msgstr "Uyarı: Tüm aktif L2TP oturumları sonlandırılacaktır!" + +#: usr/local/www/vpn_l2tp_users_edit.php:164 +#: usr/local/www/vpn_l2tp_users_edit.php:165 +#: usr/local/www/vpn_l2tp_users_edit.php:165 +msgid "If you want to change the users password, enter it here twice." +msgstr "" +"Kullanıcı şifresini değiştirmek için yeni şifreyi burada iki defa giriniz." + +#: usr/local/www/vpn_openvpn_client.php:40 +#: usr/local/www/vpn_openvpn_client.php:366 +#: usr/local/www/vpn_openvpn_csc.php:294 +#: usr/local/www/vpn_openvpn_server.php:584 +#: usr/local/www/vpn_openvpn_server.php:657 +#: usr/local/www/vpn_openvpn_client.php:371 +#: usr/local/www/vpn_openvpn_csc.php:293 +#: usr/local/www/vpn_openvpn_server.php:675 +#: usr/local/www/vpn_openvpn_client.php:379 +#: usr/local/www/vpn_openvpn_client.php:40 +#: usr/local/www/vpn_openvpn_client.php:397 +#: usr/local/www/vpn_openvpn_csc.php:293 +#: usr/local/www/vpn_openvpn_server.php:701 +msgid "Client" +msgstr "İstemci" + +#: usr/local/www/vpn_openvpn_client.php:82 +#: usr/local/www/vpn_openvpn_client.php:86 +#: usr/local/www/vpn_openvpn_client.php:86 +msgid "Client successfully deleted" +msgstr "İstemci başarıyla silindi" + +#: usr/local/www/vpn_openvpn_client.php:164 +#: usr/local/www/vpn_openvpn_server.php:227 +#: usr/local/www/vpn_openvpn_server.php:232 +#: usr/local/www/vpn_openvpn_client.php:165 +#: usr/local/www/vpn_openvpn_server.php:233 +#: usr/local/www/vpn_openvpn_client.php:171 +#: usr/local/www/vpn_openvpn_client.php:182 +#: usr/local/www/vpn_openvpn_server.php:254 +msgid "The specified 'Local port' is in use. Please select another value" +msgstr "Belirtilen yerel port kullanımda. Lütfen başka port seçiniz" + +#: usr/local/www/vpn_openvpn_client.php:183 +#: usr/local/www/vpn_openvpn_client.php:184 +#: usr/local/www/vpn_openvpn_client.php:190 +#: usr/local/www/vpn_openvpn_client.php:201 +msgid "User name and password are required for proxy with authentication." +msgstr "Kimlik doğrulamalı vekil için kullanıcı adı ve parola gereklidir." + +#: usr/local/www/vpn_openvpn_client.php:200 +#: usr/local/www/vpn_openvpn_server.php:235 +#: usr/local/www/vpn_openvpn_server.php:240 +#: usr/local/www/vpn_openvpn_client.php:204 +#: usr/local/www/vpn_openvpn_server.php:241 +#: usr/local/www/vpn_openvpn_client.php:210 +#: usr/local/www/vpn_openvpn_client.php:228 +#: usr/local/www/vpn_openvpn_server.php:262 +msgid "The field 'Shared Key' does not appear to be valid" +msgstr "Paylaşımlı anahtar alanı geçersiz görünüyor" + +#: usr/local/www/vpn_openvpn_client.php:205 +#: usr/local/www/vpn_openvpn_server.php:240 +#: usr/local/www/vpn_openvpn_server.php:245 +#: usr/local/www/vpn_openvpn_client.php:209 +#: usr/local/www/vpn_openvpn_server.php:246 +#: usr/local/www/vpn_openvpn_client.php:215 +#: usr/local/www/vpn_openvpn_client.php:233 +#: usr/local/www/vpn_openvpn_server.php:267 +msgid "The field 'TLS Authentication Key' does not appear to be valid" +msgstr "TLS Kimlik Doğrulama Anahtarı alanı geçersiz görünüyor" + +#: usr/local/www/vpn_openvpn_client.php:214 +#: usr/local/www/vpn_openvpn_server.php:286 +#: usr/local/www/vpn_openvpn_server.php:291 +#: usr/local/www/vpn_openvpn_client.php:218 +#: usr/local/www/vpn_openvpn_server.php:292 +#: usr/local/www/vpn_openvpn_client.php:224 +#: usr/local/www/vpn_openvpn_client.php:242 +#: usr/local/www/vpn_openvpn_server.php:313 +msgid "Shared key" +msgstr "Paylaşımlı anahtar" + +#: usr/local/www/vpn_openvpn_client.php:367 +#: usr/local/www/vpn_openvpn_csc.php:295 +#: usr/local/www/vpn_openvpn_server.php:585 +#: usr/local/www/vpn_openvpn_server.php:658 +#: usr/local/www/vpn_openvpn_client.php:372 +#: usr/local/www/vpn_openvpn_csc.php:294 +#: usr/local/www/vpn_openvpn_server.php:676 +#: usr/local/www/vpn_openvpn_client.php:380 +#: usr/local/www/vpn_openvpn_client.php:398 +#: usr/local/www/vpn_openvpn_csc.php:294 +#: usr/local/www/vpn_openvpn_server.php:702 +msgid "Client Specific Overrides" +msgstr "İstemciye Özel Ayarlar" + +#: usr/local/www/vpn_openvpn_client.php:397 +#: usr/local/www/vpn_openvpn_client.php:402 +#: usr/local/www/vpn_openvpn_client.php:410 +#: usr/local/www/vpn_openvpn_client.php:428 +msgid "Disable this client" +msgstr "Bu istemciyi devre dışı bırak" + +#: usr/local/www/vpn_openvpn_client.php:402 +#: usr/local/www/vpn_openvpn_client.php:407 +#: usr/local/www/vpn_openvpn_client.php:415 +#: usr/local/www/vpn_openvpn_client.php:433 +msgid "" +"Set this option to disable this client without removing it from the list" +msgstr "Bu seçenekle istemciyi listeden silmeden devre dışı bırakabilirsiniz" + +#: usr/local/www/vpn_openvpn_client.php:406 +#: usr/local/www/vpn_openvpn_server.php:624 +#: usr/local/www/vpn_openvpn_server.php:697 +#: usr/local/www/vpn_openvpn_client.php:411 +#: usr/local/www/vpn_openvpn_server.php:715 +#: usr/local/www/vpn_openvpn_client.php:419 +#: usr/local/www/vpn_openvpn_client.php:437 +#: usr/local/www/vpn_openvpn_server.php:741 +msgid "Server Mode" +msgstr "Sunucu Kipi" + +#: usr/local/www/vpn_openvpn_client.php:436 +#: usr/local/www/vpn_openvpn_client.php:441 +#: usr/local/www/vpn_openvpn_client.php:449 +#: usr/local/www/vpn_openvpn_client.php:467 +msgid "Device mode" +msgstr "Aygıt kipi" + +#: usr/local/www/vpn_openvpn_client.php:476 +#: usr/local/www/vpn_openvpn_server.php:716 +#: usr/local/www/vpn_openvpn_server.php:789 +#: usr/local/www/vpn_openvpn_client.php:481 +#: usr/local/www/vpn_openvpn_server.php:817 +#: usr/local/www/vpn_openvpn_client.php:499 +#: usr/local/www/vpn_openvpn_client.php:518 +#: usr/local/www/vpn_openvpn_server.php:844 +msgid "Local port" +msgstr "Yerel port" + +#: usr/local/www/vpn_openvpn_client.php:480 +#: usr/local/www/vpn_openvpn_client.php:485 +#: usr/local/www/vpn_openvpn_client.php:503 +#: usr/local/www/vpn_openvpn_client.php:522 +msgid "" +"Set this option if you would like to bind to a specific port. Leave this " +"blank or enter 0 for a random dynamic port." +msgstr "" +"Bu seçenekle belirli bir porta bağlanmayı sağlayabilirsiniz. Boş bırakarak " +"ya da 0 girerek rasgele bir port seçilmesini sağlayabilirsiniz." + +#: usr/local/www/vpn_openvpn_client.php:484 +#: usr/local/www/vpn_openvpn_client.php:489 +#: usr/local/www/vpn_openvpn_client.php:507 +#: usr/local/www/vpn_openvpn_client.php:526 +msgid "Server host or address" +msgstr "Sunucu host yada adres" + +#: usr/local/www/vpn_openvpn_client.php:490 +#: usr/local/www/vpn_openvpn_client.php:495 +#: usr/local/www/vpn_openvpn_client.php:513 +#: usr/local/www/vpn_openvpn_client.php:532 +msgid "Server port" +msgstr "Sunucu portu" + +#: usr/local/www/vpn_openvpn_client.php:496 +#: usr/local/www/vpn_openvpn_client.php:501 +#: usr/local/www/vpn_openvpn_client.php:519 +#: usr/local/www/vpn_openvpn_client.php:538 +msgid "Proxy host or address" +msgstr "Vekil host ya da adres" + +#: usr/local/www/vpn_openvpn_client.php:502 +#: usr/local/www/vpn_openvpn_client.php:507 +#: usr/local/www/vpn_openvpn_client.php:525 +#: usr/local/www/vpn_openvpn_client.php:544 +msgid "Proxy port" +msgstr "Vekil portu" + +#: usr/local/www/vpn_openvpn_client.php:508 +#: usr/local/www/vpn_openvpn_client.php:513 +#: usr/local/www/vpn_openvpn_client.php:531 +#: usr/local/www/vpn_openvpn_client.php:550 +msgid "Proxy authentication extra options" +msgstr "Vekil kimlik doğrulama ek seçenekleri" + +#: usr/local/www/vpn_openvpn_client.php:520 +#: usr/local/www/vpn_openvpn_client.php:525 +#: usr/local/www/vpn_openvpn_client.php:543 +#: usr/local/www/vpn_openvpn_client.php:562 +msgid "basic" +msgstr "temel" + +#: usr/local/www/vpn_openvpn_client.php:521 +#: usr/local/www/vpn_openvpn_client.php:526 +#: usr/local/www/vpn_openvpn_client.php:544 +#: usr/local/www/vpn_openvpn_client.php:563 +#, fuzzy +msgid "ntlm" +msgstr "ntlm" + +#: usr/local/www/vpn_openvpn_client.php:552 +#: usr/local/www/vpn_openvpn_client.php:557 +#: usr/local/www/vpn_openvpn_client.php:575 +#: usr/local/www/vpn_openvpn_client.php:594 +msgid "Server host name resolution" +msgstr "Sunucu host isim çözümleme" + +#: usr/local/www/vpn_openvpn_client.php:562 +#: usr/local/www/vpn_openvpn_client.php:567 +#: usr/local/www/vpn_openvpn_client.php:585 +#: usr/local/www/vpn_openvpn_client.php:604 +msgid "Infinitely resolve server" +msgstr "Sürekli sunucu adresi çözümle" + +#: usr/local/www/vpn_openvpn_client.php:567 +#: usr/local/www/vpn_openvpn_client.php:572 +#: usr/local/www/vpn_openvpn_client.php:590 +#: usr/local/www/vpn_openvpn_client.php:609 +msgid "" +"Continuously attempt to resolve the server host name. Useful when " +"communicating with a server that is not permanently connected to the Internet" +msgstr "" +"Sunucu host adını çözümleyene kadar devam et. Internete sürekli bağlı " +"olmayan bir sunucuyla iletişim kurarken faydalıdır" + +#: usr/local/www/vpn_openvpn_client.php:584 +#: usr/local/www/vpn_openvpn_server.php:733 +#: usr/local/www/vpn_openvpn_server.php:806 +#: usr/local/www/vpn_openvpn_client.php:589 +#: usr/local/www/vpn_openvpn_server.php:834 +#: usr/local/www/vpn_openvpn_client.php:607 +#: usr/local/www/vpn_openvpn_client.php:626 +#: usr/local/www/vpn_openvpn_server.php:861 +msgid "Cryptographic Settings" +msgstr "Şifreleme Ayarı" + +#: usr/local/www/vpn_openvpn_client.php:587 +#: usr/local/www/vpn_openvpn_server.php:736 +#: usr/local/www/vpn_openvpn_server.php:809 +#: usr/local/www/vpn_openvpn_client.php:592 +#: usr/local/www/vpn_openvpn_server.php:837 +#: usr/local/www/vpn_openvpn_client.php:610 +#: usr/local/www/vpn_openvpn_client.php:629 +#: usr/local/www/vpn_openvpn_server.php:864 +msgid "TLS Authentication" +msgstr "TLS Kimlik Doğrulama" + +#: usr/local/www/vpn_openvpn_client.php:597 +#: usr/local/www/vpn_openvpn_server.php:746 +#: usr/local/www/vpn_openvpn_server.php:819 +#: usr/local/www/vpn_openvpn_client.php:602 +#: usr/local/www/vpn_openvpn_server.php:847 +#: usr/local/www/vpn_openvpn_client.php:620 +#: usr/local/www/vpn_openvpn_client.php:639 +#: usr/local/www/vpn_openvpn_server.php:874 +msgid "Enable authentication of TLS packets" +msgstr "TLS paketlerinin kimlik doğrulamasına izin ver" + +#: usr/local/www/vpn_openvpn_client.php:611 +#: usr/local/www/vpn_openvpn_server.php:760 +#: usr/local/www/vpn_openvpn_server.php:833 +#: usr/local/www/vpn_openvpn_client.php:616 +#: usr/local/www/vpn_openvpn_server.php:861 +#: usr/local/www/vpn_openvpn_client.php:634 +#: usr/local/www/vpn_openvpn_client.php:653 +#: usr/local/www/vpn_openvpn_server.php:888 +msgid "Automatically generate a shared TLS authentication key" +msgstr "Otomatik olarak paylaşımlı bir TLS kimlik doğrulama anahtarı oluştur" + +#: usr/local/www/vpn_openvpn_client.php:622 +#: usr/local/www/vpn_openvpn_client.php:699 +#: usr/local/www/vpn_openvpn_server.php:771 +#: usr/local/www/vpn_openvpn_server.php:891 +#: usr/local/www/vpn_openvpn_server.php:844 +#: usr/local/www/vpn_openvpn_server.php:964 +#: usr/local/www/vpn_openvpn_client.php:627 +#: usr/local/www/vpn_openvpn_client.php:704 +#: usr/local/www/vpn_openvpn_server.php:872 +#: usr/local/www/vpn_openvpn_server.php:992 +#: usr/local/www/vpn_openvpn_client.php:645 +#: usr/local/www/vpn_openvpn_client.php:722 +#: usr/local/www/vpn_openvpn_client.php:664 +#: usr/local/www/vpn_openvpn_client.php:741 +#: usr/local/www/vpn_openvpn_server.php:899 +#: usr/local/www/vpn_openvpn_server.php:1019 +msgid "Paste your shared key here" +msgstr "Paylaşımlı anahtarınızı bu alana yapıştırınız" + +#: usr/local/www/vpn_openvpn_client.php:648 +#: usr/local/www/vpn_openvpn_client.php:653 +#: usr/local/www/vpn_openvpn_client.php:671 +#: usr/local/www/vpn_openvpn_client.php:690 +msgid "Client Certificate" +msgstr "İstemci Sertifikası" + +#: usr/local/www/vpn_openvpn_client.php:677 +#: usr/local/www/vpn_openvpn_server.php:869 +#: usr/local/www/vpn_openvpn_server.php:942 +#: usr/local/www/vpn_openvpn_client.php:682 +#: usr/local/www/vpn_openvpn_server.php:970 +#: usr/local/www/vpn_openvpn_client.php:700 +#: usr/local/www/vpn_openvpn_client.php:719 +#: usr/local/www/vpn_openvpn_server.php:997 +msgid "Shared Key" +msgstr "Paylaşımlı Anahtar" + +#: usr/local/www/vpn_openvpn_client.php:688 +#: usr/local/www/vpn_openvpn_server.php:880 +#: usr/local/www/vpn_openvpn_server.php:953 +#: usr/local/www/vpn_openvpn_client.php:693 +#: usr/local/www/vpn_openvpn_server.php:981 +#: usr/local/www/vpn_openvpn_client.php:711 +#: usr/local/www/vpn_openvpn_client.php:730 +#: usr/local/www/vpn_openvpn_server.php:1008 +msgid "Automatically generate a shared key" +msgstr "Otomatik olarak bir paylaşımlı anahtar oluştur" + +#: usr/local/www/vpn_openvpn_client.php:724 +#: usr/local/www/vpn_openvpn_server.php:916 +#: usr/local/www/vpn_openvpn_server.php:989 +#: usr/local/www/vpn_openvpn_client.php:729 +#: usr/local/www/vpn_openvpn_server.php:1017 +#: usr/local/www/vpn_openvpn_client.php:747 +#: usr/local/www/vpn_openvpn_client.php:766 +#: usr/local/www/vpn_openvpn_server.php:1044 +msgid "Hardware Crypto" +msgstr "Donanım Şifreleme" + +#: usr/local/www/vpn_openvpn_client.php:745 +#: usr/local/www/vpn_openvpn_csc.php:374 +#: usr/local/www/vpn_openvpn_server.php:980 +#: usr/local/www/vpn_openvpn_server.php:1053 +#: usr/local/www/vpn_openvpn_client.php:750 +#: usr/local/www/vpn_openvpn_csc.php:373 +#: usr/local/www/vpn_openvpn_server.php:1081 +#: usr/local/www/vpn_openvpn_client.php:768 +#: usr/local/www/vpn_openvpn_client.php:787 +#: usr/local/www/vpn_openvpn_csc.php:373 +#: usr/local/www/vpn_openvpn_server.php:1108 +msgid "Tunnel Settings" +msgstr "Tünel Ayarları" + +#: usr/local/www/vpn_openvpn_client.php:748 +#: usr/local/www/vpn_openvpn_csc.php:377 +#: usr/local/www/vpn_openvpn_server.php:1450 +#: usr/local/www/vpn_openvpn_server.php:1592 +#: usr/local/www/vpn_openvpn_client.php:753 +#: usr/local/www/vpn_openvpn_csc.php:376 +#: usr/local/www/vpn_openvpn_server.php:1633 +#: usr/local/www/vpn_openvpn_csc.php:376 +#: usr/local/www/vpn_openvpn_server.php:1685 +msgid "Tunnel Network" +msgstr "Tünel Ağ" + +#: usr/local/www/vpn_openvpn_client.php:752 +#: usr/local/www/vpn_openvpn_csc.php:381 +#: usr/local/www/vpn_openvpn_client.php:757 +#: usr/local/www/vpn_openvpn_csc.php:380 +#: usr/local/www/vpn_openvpn_client.php:775 +#: usr/local/www/vpn_openvpn_client.php:794 +#: usr/local/www/vpn_openvpn_csc.php:380 +msgid "" +"This is the virtual network used for private communications between this " +"client and the server expressed using CIDR (eg. 10.0.8.0/24). The first " +"network address is assumed to be the server address and the second network " +"address will be assigned to the client virtual interface" +msgstr "" +"Bu sunucu ile CIDR yoluyla belirtilen istemciler (örn 10.0.8.0/24) arasında " +"özel iletişim için kullanılacak sanal ağdır. İlk ağ adresi sunucu adresi " +"olarak kabul edilir ve ikinci ağ adresi de istemci sanal arabirimine atanır." + +#: usr/local/www/vpn_openvpn_client.php:766 +#: usr/local/www/vpn_openvpn_client.php:771 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter here the " +"remote LAN here. You may leave this blank to only communicate with other " +"clients" +msgstr "" +"Yönlendirme tablolarını elle değiştirmeden alanlar arası sanal özel ağ " +"(site-to-site VPN) kurulabilmesi için tünel içinden yönlendirilecek ağdır. " +"CIDR aralığı olarak belirtilir. Eğer bu siteler arası VPN ise buraya uzak " +"LAN girilir. Sadece diğer istemcilerle iletişim kurmak için burayı boş " +"bırakabilirsiniz" + +#: usr/local/www/vpn_openvpn_client.php:776 +#: usr/local/www/vpn_openvpn_client.php:781 +#: usr/local/www/vpn_openvpn_client.php:827 +#: usr/local/www/vpn_openvpn_client.php:846 +msgid "Limit outgoing bandwidth" +msgstr "Giden bant genişliğini sınırla" + +#: usr/local/www/vpn_openvpn_client.php:780 +#: usr/local/www/vpn_openvpn_client.php:785 +#: usr/local/www/vpn_openvpn_client.php:831 +#: usr/local/www/vpn_openvpn_client.php:850 +msgid "" +"Maximum outgoing bandwidth for this tunnel. Leave empty for no limit. The " +"input value has to be something between 100 bytes/sec and 100 Mbytes/sec " +"(entered as bytes per second)" +msgstr "" +"Bu tünel için maksimum giden bant genişliği. Sınır koymamak için boş " +"bırakın. Girdi değeri 100 bayt/sn ile 100 Mbayt/sn arasında olmalıdır " +"(bayt/sn cinsinden girilir)" + +#: usr/local/www/vpn_openvpn_client.php:797 +#: usr/local/www/vpn_openvpn_server.php:1087 +#: usr/local/www/vpn_openvpn_server.php:1229 +#: usr/local/www/vpn_openvpn_client.php:802 +#: usr/local/www/vpn_openvpn_server.php:1271 +#: usr/local/www/vpn_openvpn_client.php:848 +#: usr/local/www/vpn_openvpn_client.php:867 +#: usr/local/www/vpn_openvpn_server.php:1298 +msgid "Compress tunnel packets using the LZO algorithm" +msgstr "Tünel paketlerini LZO algoritması ile sıkıştır" + +#: usr/local/www/vpn_openvpn_client.php:805 +#: usr/local/www/vpn_openvpn_server.php:1095 +#: usr/local/www/vpn_openvpn_server.php:1237 +#: usr/local/www/vpn_openvpn_client.php:810 +#: usr/local/www/vpn_openvpn_server.php:1279 +#: usr/local/www/vpn_openvpn_client.php:856 +#: usr/local/www/vpn_openvpn_client.php:875 +#: usr/local/www/vpn_openvpn_server.php:1306 +msgid "Type-of-Service" +msgstr "Servis Türü" + +#: usr/local/www/vpn_openvpn_client.php:815 +#: usr/local/www/vpn_openvpn_server.php:1105 +#: usr/local/www/vpn_openvpn_server.php:1247 +#: usr/local/www/vpn_openvpn_client.php:820 +#: usr/local/www/vpn_openvpn_server.php:1289 +#: usr/local/www/vpn_openvpn_client.php:866 +#: usr/local/www/vpn_openvpn_client.php:885 +#: usr/local/www/vpn_openvpn_server.php:1316 +msgid "" +"Set the TOS IP header value of tunnel packets to match the encapsulated " +"packet value" +msgstr "" +"Tünel paketlerinin TOS IP başlık değerini satmalanmış paket değeriyle " +"eşlenecek şekilde ayarla" + +#: usr/local/www/vpn_openvpn_client.php:826 +#: usr/local/www/vpn_openvpn_server.php:1409 +#: usr/local/www/vpn_openvpn_server.php:1551 +#: usr/local/www/vpn_openvpn_client.php:831 +#: usr/local/www/vpn_openvpn_server.php:1593 +#: usr/local/www/vpn_openvpn_client.php:880 +#: usr/local/www/vpn_openvpn_client.php:899 +#: usr/local/www/vpn_openvpn_server.php:1645 +msgid "Advanced configuration" +msgstr "Gelişmiş yapılandırma" + +#: usr/local/www/vpn_openvpn_client.php:835 +#: usr/local/www/vpn_openvpn_client.php:840 +#: usr/local/www/vpn_openvpn_client.php:889 +#: usr/local/www/vpn_openvpn_client.php:908 +msgid "" +"Enter any additional options you would like to add to the OpenVPN client " +"configuration here, separated by a semicolon" +msgstr "" +"OpenVPN istemci yapılandırmasına eklemek istediğiniz ek seçenekleri " +"aralarına noktalı virgül koyarak girin" + +#: usr/local/www/vpn_openvpn_client.php:836 +#: usr/local/www/vpn_openvpn_client.php:841 +#: usr/local/www/vpn_openvpn_client.php:890 +msgid "EXAMPLE: route 10.0.0.0 255.255.255.0;" +msgstr "ÖRNEK: route 10.0.0.0 255.255.255.0;" + +#: usr/local/www/vpn_openvpn_client.php:891 +#: usr/local/www/vpn_openvpn_client.php:896 +#: usr/local/www/vpn_openvpn_client.php:949 +#: usr/local/www/vpn_openvpn_client.php:968 +msgid "edit client" +msgstr "istemci düzenle" + +#: usr/local/www/vpn_openvpn_client.php:895 +#: usr/local/www/vpn_openvpn_client.php:900 +#: usr/local/www/vpn_openvpn_client.php:953 +#: usr/local/www/vpn_openvpn_client.php:972 +msgid "delete client" +msgstr "istemci sil" + +#: usr/local/www/vpn_openvpn_client.php:908 +#: usr/local/www/vpn_openvpn_client.php:913 +#: usr/local/www/vpn_openvpn_client.php:966 +#: usr/local/www/vpn_openvpn_client.php:985 +msgid "add client" +msgstr "istemci ekle" + +#: usr/local/www/vpn_openvpn_client.php:915 +#: usr/local/www/vpn_openvpn_client.php:920 +#: usr/local/www/vpn_openvpn_client.php:973 +#: usr/local/www/vpn_openvpn_client.php:992 +msgid "Additional OpenVPN clients can be added here." +msgstr "Ek OpenVPN istemcilerini burada ekleyebilirsiniz." + +#: usr/local/www/vpn_openvpn_csc.php:40 usr/local/www/vpn_openvpn_csc.php:40 +msgid "Client Specific Override" +msgstr "İstemciye Özel Ayarlar" + +#: usr/local/www/vpn_openvpn_csc.php:67 usr/local/www/vpn_openvpn_csc.php:66 +#: usr/local/www/vpn_openvpn_csc.php:66 +msgid "Client Specific Override successfully deleted" +msgstr "İstemciye Özel Ayarlar başarıyla silindi" + +#: usr/local/www/vpn_openvpn_csc.php:131 +#: usr/local/www/vpn_openvpn_server.php:244 +#: usr/local/www/vpn_openvpn_server.php:249 +#: usr/local/www/vpn_openvpn_csc.php:130 +#: usr/local/www/vpn_openvpn_server.php:250 +#: usr/local/www/vpn_openvpn_csc.php:130 +#: usr/local/www/vpn_openvpn_server.php:271 +msgid "The field 'DNS Server #1' must contain a valid IP address" +msgstr "DNS Sunucu #1 alanı geçerli bir IP adresi içermelidir" + +#: usr/local/www/vpn_openvpn_csc.php:133 +#: usr/local/www/vpn_openvpn_server.php:246 +#: usr/local/www/vpn_openvpn_server.php:251 +#: usr/local/www/vpn_openvpn_csc.php:132 +#: usr/local/www/vpn_openvpn_server.php:252 +#: usr/local/www/vpn_openvpn_csc.php:132 +#: usr/local/www/vpn_openvpn_server.php:273 +msgid "The field 'DNS Server #2' must contain a valid IP address" +msgstr "DNS Sunucu #2 alanı geçerli bir IP adresi içermelidir" + +#: usr/local/www/vpn_openvpn_csc.php:135 +#: usr/local/www/vpn_openvpn_server.php:248 +#: usr/local/www/vpn_openvpn_server.php:253 +#: usr/local/www/vpn_openvpn_csc.php:134 +#: usr/local/www/vpn_openvpn_server.php:254 +#: usr/local/www/vpn_openvpn_csc.php:134 +#: usr/local/www/vpn_openvpn_server.php:275 +msgid "The field 'DNS Server #3' must contain a valid IP address" +msgstr "DNS Sunucu #3 alanı geçerli bir IP adresi içermelidir" + +#: usr/local/www/vpn_openvpn_csc.php:137 +#: usr/local/www/vpn_openvpn_server.php:250 +#: usr/local/www/vpn_openvpn_server.php:255 +#: usr/local/www/vpn_openvpn_csc.php:136 +#: usr/local/www/vpn_openvpn_server.php:256 +#: usr/local/www/vpn_openvpn_csc.php:136 +#: usr/local/www/vpn_openvpn_server.php:277 +msgid "The field 'DNS Server #4' must contain a valid IP address" +msgstr "DNS Sunucu #4 alanı geçerli bir IP adresi içermelidir" + +#: usr/local/www/vpn_openvpn_csc.php:142 +#: usr/local/www/vpn_openvpn_server.php:255 +#: usr/local/www/vpn_openvpn_server.php:260 +#: usr/local/www/vpn_openvpn_csc.php:141 +#: usr/local/www/vpn_openvpn_server.php:261 +#: usr/local/www/vpn_openvpn_csc.php:141 +#: usr/local/www/vpn_openvpn_server.php:282 +msgid "The field 'NTP Server #1' must contain a valid IP address" +msgstr "NTP Sunucu #1 alanı geçerli bir IP adresi içermelidir" + +#: usr/local/www/vpn_openvpn_csc.php:144 +#: usr/local/www/vpn_openvpn_server.php:257 +#: usr/local/www/vpn_openvpn_server.php:262 +#: usr/local/www/vpn_openvpn_csc.php:143 +#: usr/local/www/vpn_openvpn_server.php:263 +#: usr/local/www/vpn_openvpn_csc.php:143 +#: usr/local/www/vpn_openvpn_server.php:284 +msgid "The field 'NTP Server #2' must contain a valid IP address" +msgstr "NTP Sunucu #2 alanı geçerli bir IP adresi içermelidir" + +#: usr/local/www/vpn_openvpn_csc.php:146 +#: usr/local/www/vpn_openvpn_server.php:259 +#: usr/local/www/vpn_openvpn_server.php:264 +#: usr/local/www/vpn_openvpn_csc.php:145 +#: usr/local/www/vpn_openvpn_server.php:265 +#: usr/local/www/vpn_openvpn_csc.php:145 +#: usr/local/www/vpn_openvpn_server.php:286 +msgid "The field 'NTP Server #3' must contain a valid IP address" +msgstr "NTP Sunucu #3 alanı geçerli bir IP adresi içermelidir" + +#: usr/local/www/vpn_openvpn_csc.php:148 +#: usr/local/www/vpn_openvpn_server.php:261 +#: usr/local/www/vpn_openvpn_server.php:266 +#: usr/local/www/vpn_openvpn_csc.php:147 +#: usr/local/www/vpn_openvpn_server.php:267 +#: usr/local/www/vpn_openvpn_csc.php:147 +#: usr/local/www/vpn_openvpn_server.php:288 +msgid "The field 'NTP Server #4' must contain a valid IP address" +msgstr "NTP Sunucu #4 alanı geçerli bir IP adresi içermelidir" + +#: usr/local/www/vpn_openvpn_csc.php:154 +#: usr/local/www/vpn_openvpn_server.php:267 +#: usr/local/www/vpn_openvpn_server.php:272 +#: usr/local/www/vpn_openvpn_csc.php:153 +#: usr/local/www/vpn_openvpn_server.php:273 +#: usr/local/www/vpn_openvpn_csc.php:153 +#: usr/local/www/vpn_openvpn_server.php:294 +msgid "The field 'WINS Server #1' must contain a valid IP address" +msgstr "WINS Sunucu #1 alanı geçerli bir IP adresi içermelidir" + +#: usr/local/www/vpn_openvpn_csc.php:156 +#: usr/local/www/vpn_openvpn_server.php:269 +#: usr/local/www/vpn_openvpn_server.php:274 +#: usr/local/www/vpn_openvpn_csc.php:155 +#: usr/local/www/vpn_openvpn_server.php:275 +#: usr/local/www/vpn_openvpn_csc.php:155 +#: usr/local/www/vpn_openvpn_server.php:296 +msgid "The field 'WINS Server #2' must contain a valid IP address" +msgstr "WINS Sunucu #2 alanı geçerli bir IP adresi içermelidir" + +#: usr/local/www/vpn_openvpn_csc.php:160 +#: usr/local/www/vpn_openvpn_server.php:273 +#: usr/local/www/vpn_openvpn_server.php:278 +#: usr/local/www/vpn_openvpn_csc.php:159 +#: usr/local/www/vpn_openvpn_server.php:279 +#: usr/local/www/vpn_openvpn_csc.php:159 +#: usr/local/www/vpn_openvpn_server.php:300 +msgid "" +"The field 'NetBIOS Data Distribution Server #1' must contain a valid IP " +"address" +msgstr "" +"NetBIOS Veri Dağıtım Sunucusu #1 alanı geçerli bir IP adresi içermelidir" + +#: usr/local/www/vpn_openvpn_csc.php:325 usr/local/www/vpn_openvpn_csc.php:324 +#: usr/local/www/vpn_openvpn_csc.php:324 +msgid "Disable this override" +msgstr "Üzerine yazmayı kapat" + +#: usr/local/www/vpn_openvpn_csc.php:330 usr/local/www/vpn_openvpn_csc.php:329 +#: usr/local/www/vpn_openvpn_csc.php:329 +msgid "" +"Set this option to disable this client-specific override without removing it " +"from the list" +msgstr "" +"Bu ayar seçeneği ile istemciye-özgü yeniden yazmayı listeden silmeden " +"kapatabilirsiniz" + +#: usr/local/www/vpn_openvpn_csc.php:334 usr/local/www/vpn_openvpn_csc.php:333 +#: usr/local/www/vpn_openvpn_csc.php:333 +msgid "Common name" +msgstr "Genel ad" + +#: usr/local/www/vpn_openvpn_csc.php:338 usr/local/www/vpn_openvpn_csc.php:337 +#: usr/local/www/vpn_openvpn_csc.php:337 +msgid "Enter the client's X.509 common name here" +msgstr "İstemcinin X.509 genel adını buraya girin" + +#: usr/local/www/vpn_openvpn_csc.php:350 usr/local/www/vpn_openvpn_csc.php:349 +#: usr/local/www/vpn_openvpn_csc.php:349 +msgid "Connection blocking" +msgstr "Bağlantı engelleme" + +#: usr/local/www/vpn_openvpn_csc.php:360 usr/local/www/vpn_openvpn_csc.php:359 +#: usr/local/www/vpn_openvpn_csc.php:359 +msgid "Block this client connection based on its common name" +msgstr "Genel adına göre bu istemci bağlantısını engelle" + +#: usr/local/www/vpn_openvpn_csc.php:365 usr/local/www/vpn_openvpn_csc.php:364 +#: usr/local/www/vpn_openvpn_csc.php:364 +msgid "" +"Don't use this option to permanently disable a client due to a compromised " +"key or password. Use a CRL (certificate revocation list) instead" +msgstr "" +"Bu seçeneği kullanarak bir anahtar ya da parola nedeniyle istemciyi " +"tamamiyle kapatmak için kullanmayın. Bunun yerine CRL (sertifika silme " +"listesi) kullanın" + +#: usr/local/www/vpn_openvpn_csc.php:391 +#: usr/local/www/vpn_openvpn_server.php:1011 +#: usr/local/www/vpn_openvpn_server.php:1153 +#: usr/local/www/vpn_openvpn_csc.php:390 +#: usr/local/www/vpn_openvpn_server.php:1181 +#: usr/local/www/vpn_openvpn_csc.php:390 +#: usr/local/www/vpn_openvpn_server.php:1208 +msgid "Redirect Gateway" +msgstr "Ağ Geçidini Yönlendir" + +#: usr/local/www/vpn_openvpn_csc.php:401 +#: usr/local/www/vpn_openvpn_server.php:1021 +#: usr/local/www/vpn_openvpn_server.php:1163 +#: usr/local/www/vpn_openvpn_csc.php:400 +#: usr/local/www/vpn_openvpn_server.php:1191 +#: usr/local/www/vpn_openvpn_csc.php:400 +#: usr/local/www/vpn_openvpn_server.php:1218 +msgid "Force all client generated traffic through the tunnel" +msgstr "İstemci tarafından oluşturulan tüm trafiği tünelden geçir" + +#: usr/local/www/vpn_openvpn_csc.php:412 +#: usr/local/www/vpn_openvpn_server.php:1155 +#: usr/local/www/vpn_openvpn_server.php:1297 +#: usr/local/www/vpn_openvpn_csc.php:411 +#: usr/local/www/vpn_openvpn_server.php:1339 +#: usr/local/www/vpn_openvpn_csc.php:411 +#: usr/local/www/vpn_openvpn_server.php:1366 +msgid "Client Settings" +msgstr "İstemci Ayarları" + +#: usr/local/www/vpn_openvpn_csc.php:415 usr/local/www/vpn_openvpn_csc.php:414 +#: usr/local/www/vpn_openvpn_csc.php:414 +msgid "Server Definitions" +msgstr "Sunucu Tanımlamaları" + +#: usr/local/www/vpn_openvpn_csc.php:425 usr/local/www/vpn_openvpn_csc.php:424 +#: usr/local/www/vpn_openvpn_csc.php:424 +msgid "Prevent this client from receiving any server-defined client settings" +msgstr "" +"Bu istemcinin sunucu tarafından tanımlanmış istemci ayarlarını almasını " +"engelle" + +#: usr/local/www/vpn_openvpn_csc.php:510 +#: usr/local/www/vpn_openvpn_server.php:1271 +#: usr/local/www/vpn_openvpn_server.php:1413 +#: usr/local/www/vpn_openvpn_csc.php:509 +#: usr/local/www/vpn_openvpn_server.php:1455 +#: usr/local/www/vpn_openvpn_csc.php:509 +#: usr/local/www/vpn_openvpn_server.php:1507 +msgid "NTP Servers" +msgstr "NTP Sunucular" + +#: usr/local/www/vpn_openvpn_csc.php:520 +#: usr/local/www/vpn_openvpn_server.php:1281 +#: usr/local/www/vpn_openvpn_server.php:1423 +#: usr/local/www/vpn_openvpn_csc.php:519 +#: usr/local/www/vpn_openvpn_server.php:1465 +#: usr/local/www/vpn_openvpn_csc.php:519 +#: usr/local/www/vpn_openvpn_server.php:1517 +msgid "Provide a NTP server list to clients" +msgstr "İstemcilere bir NTP sunucu listesi sağla" + +#: usr/local/www/vpn_openvpn_csc.php:546 +#: usr/local/www/vpn_openvpn_server.php:1307 +#: usr/local/www/vpn_openvpn_server.php:1449 +#: usr/local/www/vpn_openvpn_csc.php:545 +#: usr/local/www/vpn_openvpn_server.php:1491 +#: usr/local/www/vpn_openvpn_csc.php:545 +#: usr/local/www/vpn_openvpn_server.php:1543 +msgid "NetBIOS Options" +msgstr "NETBIOS Seçenekleri" + +#: usr/local/www/vpn_openvpn_csc.php:556 +#: usr/local/www/vpn_openvpn_server.php:1317 +#: usr/local/www/vpn_openvpn_server.php:1459 +#: usr/local/www/vpn_openvpn_csc.php:555 +#: usr/local/www/vpn_openvpn_server.php:1501 +#: usr/local/www/vpn_openvpn_csc.php:555 +#: usr/local/www/vpn_openvpn_server.php:1553 +msgid "Enable NetBIOS over TCP/IP" +msgstr "TCP/IP üzerinden NetBIOS'u etkinleştir" + +#: usr/local/www/vpn_openvpn_csc.php:561 +msgid "" +"If this option is not set, all NetBIOS-over-TCP/IP options (includeing WINS) " +"will be disabled" +msgstr "" +"Bu seçenek etkinleştirilmemişse tüm TCP/IP üzerinden NETBIOS (WINS dahil) " +"devre dışı kalır" + +#: usr/local/www/vpn_openvpn_csc.php:568 +#: usr/local/www/vpn_openvpn_server.php:1329 +#: usr/local/www/vpn_openvpn_server.php:1471 +#: usr/local/www/vpn_openvpn_csc.php:567 +#: usr/local/www/vpn_openvpn_server.php:1513 +#: usr/local/www/vpn_openvpn_csc.php:567 +#: usr/local/www/vpn_openvpn_server.php:1565 +msgid "Node Type" +msgstr "Uç Türü" + +#: usr/local/www/vpn_openvpn_csc.php:581 +#: usr/local/www/vpn_openvpn_server.php:1342 +#: usr/local/www/vpn_openvpn_server.php:1484 +#: usr/local/www/vpn_openvpn_csc.php:580 +#: usr/local/www/vpn_openvpn_server.php:1526 +#: usr/local/www/vpn_openvpn_csc.php:580 +#: usr/local/www/vpn_openvpn_server.php:1578 +msgid "" +"Possible options: b-node (broadcasts), p-node (point-to-point name queries " +"to a WINS server), m-node (broadcast then query name server), and h-node " +"(query name server, then broadcast)" +msgstr "" +"Mümkün seçenekler: b-node (yayınlamak), p-node (WINS sunucu noktadan noktaya " +"isim sorguları), m-node (yayınladıktan sonra isim sunucusunu sorgulamak), " +"ve h-node (isim sunucusunu sorguladıktan sonra yayınlamak)" + +#: usr/local/www/vpn_openvpn_csc.php:595 +#: usr/local/www/vpn_openvpn_server.php:1356 +#: usr/local/www/vpn_openvpn_server.php:1498 +#: usr/local/www/vpn_openvpn_csc.php:594 +#: usr/local/www/vpn_openvpn_server.php:1540 +#: usr/local/www/vpn_openvpn_csc.php:594 +#: usr/local/www/vpn_openvpn_server.php:1592 +msgid "" +"A NetBIOS Scope\tID provides an extended naming service for\tNetBIOS over " +"TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to " +"only those nodes with the same NetBIOS scope ID" +msgstr "" +"NetBIOS Scope ID TCP/IP üzerinden NetBIOS için genişletilmiş isimlendirme " +"servisi sağlar. NetBIOS scope ID tek ağ üzerindeki NetBIOS trafiğini sadece " +"aynı NetBIOS scope ID'sini taşıyanlarla sınırlar" + +#: usr/local/www/vpn_openvpn_csc.php:648 usr/local/www/vpn_openvpn_csc.php:647 +#: usr/local/www/vpn_openvpn_csc.php:647 +msgid "" +"Enter any additional options you would like to add for this client specific " +"override, separated by a semicolon" +msgstr "" +"Bu istemciye özel olarak eklemek istediğiniz seçenekleri aralarına noktalı " +"virgül koyarak girin" + +#: usr/local/www/vpn_openvpn_csc.php:649 +#: usr/local/www/vpn_openvpn_server.php:1419 +#: usr/local/www/vpn_openvpn_server.php:1561 +#: usr/local/www/vpn_openvpn_csc.php:648 +#: usr/local/www/vpn_openvpn_server.php:1603 +#: usr/local/www/vpn_openvpn_csc.php:648 +#: usr/local/www/vpn_openvpn_server.php:1655 +msgid "EXAMPLE: push \"route 10.0.0.0 255.255.255.0\"" +msgstr "ÖRNEK: push \"route 10.0.0.0 255.255.255.0\"" + +#: usr/local/www/vpn_openvpn_csc.php:696 usr/local/www/vpn_openvpn_csc.php:695 +#: usr/local/www/vpn_openvpn_csc.php:695 +msgid "edit csc" +msgstr "csc düzenle" + +#: usr/local/www/vpn_openvpn_csc.php:699 usr/local/www/vpn_openvpn_csc.php:698 +#: usr/local/www/vpn_openvpn_csc.php:698 +msgid "Do you really want to delete this csc?" +msgstr "Bu csc'yi silmek istediğinize emin misiniz?" + +#: usr/local/www/vpn_openvpn_csc.php:700 usr/local/www/vpn_openvpn_csc.php:699 +#: usr/local/www/vpn_openvpn_csc.php:699 +msgid "delete csc" +msgstr "csc sil" + +#: usr/local/www/vpn_openvpn_csc.php:711 usr/local/www/vpn_openvpn_csc.php:710 +#: usr/local/www/vpn_openvpn_csc.php:710 +msgid "add csc" +msgstr "csc ekle" + +#: usr/local/www/vpn_openvpn_csc.php:718 usr/local/www/vpn_openvpn_csc.php:717 +#: usr/local/www/vpn_openvpn_csc.php:717 +msgid "Additional OpenVPN client specific overrides can be added here." +msgstr "Ek OpenVPN istemciye özel ayarlar buradan girilebilir." + +#: usr/local/www/vpn_openvpn_server.php:86 +#: usr/local/www/vpn_openvpn_server.php:87 +#: usr/local/www/vpn_openvpn_server.php:87 +msgid "Server successfully deleted" +msgstr "Sunucu başarıyla silindi" + +#: usr/local/www/vpn_openvpn_server.php:210 +#: usr/local/www/vpn_openvpn_server.php:215 +#: usr/local/www/vpn_openvpn_server.php:216 +#: usr/local/www/vpn_openvpn_server.php:228 +msgid "" +"You must select a Backend for Authentication if the server mode requires " +"User Auth." +msgstr "" +"Sunucu kipi Kullanıcı Kimlik Doğrulama gerektiriyorsa kullanılacak kimlik " +"doğrulama arkaucunu seçin." + +#: usr/local/www/vpn_openvpn_server.php:277 +#: usr/local/www/vpn_openvpn_server.php:282 +#: usr/local/www/vpn_openvpn_server.php:283 +#: usr/local/www/vpn_openvpn_server.php:304 +msgid "The field 'Concurrent connections' must be numeric." +msgstr "Eş zamanlı bağlantılar alanı sayı olmalıdır." + +#: usr/local/www/vpn_openvpn_server.php:290 +#: usr/local/www/vpn_openvpn_server.php:296 +#: usr/local/www/vpn_openvpn_server.php:297 +#: usr/local/www/vpn_openvpn_server.php:318 +msgid "Tunnel network" +msgstr "Tünel ağ" + +#: usr/local/www/vpn_openvpn_server.php:615 +#: usr/local/www/vpn_openvpn_server.php:688 +#: usr/local/www/vpn_openvpn_server.php:706 +#: usr/local/www/vpn_openvpn_server.php:732 +msgid "Disable this server" +msgstr "Sunucuyu devre dışı bırak" + +#: usr/local/www/vpn_openvpn_server.php:620 +#: usr/local/www/vpn_openvpn_server.php:693 +#: usr/local/www/vpn_openvpn_server.php:711 +#: usr/local/www/vpn_openvpn_server.php:737 +msgid "" +"Set this option to disable this server without removing it from the list" +msgstr "" +"Bu seçeneği etkinleştirerek silmeden sunucunun devre dışı kalmasını " +"sağlayabilirsiniz" + +#: usr/local/www/vpn_openvpn_server.php:639 +#: usr/local/www/vpn_openvpn_server.php:712 +#: usr/local/www/vpn_openvpn_server.php:730 +#: usr/local/www/vpn_openvpn_server.php:756 +msgid "Backend for authentication" +msgstr "Kimlik doğrulama arkaucu" + +#: usr/local/www/vpn_openvpn_server.php:671 +#: usr/local/www/vpn_openvpn_server.php:744 +#: usr/local/www/vpn_openvpn_server.php:762 +#: usr/local/www/vpn_openvpn_server.php:788 +msgid "Device Mode" +msgstr "Aygıt Kipi" + +#: usr/local/www/vpn_openvpn_server.php:797 +#: usr/local/www/vpn_openvpn_server.php:870 +#: usr/local/www/vpn_openvpn_server.php:898 +#: usr/local/www/vpn_openvpn_server.php:925 +msgid "Peer Certificate Revocation List" +msgstr "Eş Sertifika Silme Listesi" + +#: usr/local/www/vpn_openvpn_server.php:822 +#: usr/local/www/vpn_openvpn_server.php:895 +#: usr/local/www/vpn_openvpn_server.php:923 +#: usr/local/www/vpn_openvpn_server.php:950 +msgid "Server Certificate" +msgstr "Sunucu Sertifikası" + +#: usr/local/www/vpn_openvpn_server.php:851 +#: usr/local/www/vpn_openvpn_server.php:924 +#: usr/local/www/vpn_openvpn_server.php:952 +#: usr/local/www/vpn_openvpn_server.php:979 +msgid "DH Parameters Length" +msgstr "DH Paremetre Uzunluğu" + +#: usr/local/www/vpn_openvpn_server.php:934 +#: usr/local/www/vpn_openvpn_server.php:1007 +#: usr/local/www/vpn_openvpn_server.php:1035 +#: usr/local/www/vpn_openvpn_server.php:1062 +msgid "Certificate Depth" +msgstr "Sertifika Derinliği" + +#: usr/local/www/vpn_openvpn_server.php:952 +#: usr/local/www/vpn_openvpn_server.php:1025 +#: usr/local/www/vpn_openvpn_server.php:1053 +#: usr/local/www/vpn_openvpn_server.php:1080 +msgid "" +"When a certificate-based client logs in, do not accept certificates below " +"this depth. Useful for denying certificates made with intermediate CAs " +"generated from the same CA as the server." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:959 +#: usr/local/www/vpn_openvpn_server.php:1032 +#: usr/local/www/vpn_openvpn_server.php:1060 +#: usr/local/www/vpn_openvpn_server.php:1087 +msgid "Strict User/CN Matching" +msgstr "Sıkı Kullanıcı/CN Eşleme" + +#: usr/local/www/vpn_openvpn_server.php:969 +#: usr/local/www/vpn_openvpn_server.php:1042 +#: usr/local/www/vpn_openvpn_server.php:1070 +#: usr/local/www/vpn_openvpn_server.php:1097 +msgid "" +"When authenticating users, enforce a match between the common name of the " +"client certificate and the username given at login." +msgstr "" +"Kullanıcı kimlikleri doğrulanırken istemci sertifikasının genel adı ile " +"oturum açılırken verilen kullanıcı adının aynı olmasını zorunlu kılar." + +#: usr/local/www/vpn_openvpn_server.php:983 +#: usr/local/www/vpn_openvpn_server.php:1056 +#: usr/local/www/vpn_openvpn_server.php:1084 +#: usr/local/www/vpn_openvpn_client.php:771 +#: usr/local/www/vpn_openvpn_client.php:790 +#: usr/local/www/vpn_openvpn_server.php:1111 +msgid "IPv4 Tunnel Network" +msgstr "IPv4 Tünel Ağ" + +#: usr/local/www/vpn_openvpn_server.php:987 +#: usr/local/www/vpn_openvpn_server.php:1060 +#: usr/local/www/vpn_openvpn_server.php:1088 +#: usr/local/www/vpn_openvpn_server.php:1115 +msgid "" +"This is the IPv4 virtual network used for private communications between " +"this server and client hosts expressed using CIDR (eg. 10.0.8.0/24). The " +"first network address will be assigned to the\tserver virtual interface. The " +"remaining network addresses can optionally be assigned to connecting " +"clients. (see Address Pool)" +msgstr "" +"Bu IPv4 sunucu ile CIDR yoluyla belirtilen istemciler (örn. 10.0.8.0/24) " +"arasında özel iletişim için kullanılacak sanal ağdır. İlk ağ adresi sunucu\t" +"sanal arabirimine atanır. Diğer ağ adresleri bağlanan istemcilere isteğe " +"göre atanabilir (bkz Adres Havuzu)." + +#: usr/local/www/vpn_openvpn_server.php:997 +#: usr/local/www/vpn_openvpn_server.php:1070 +#: usr/local/www/vpn_openvpn_server.php:1098 +#: usr/local/www/vpn_openvpn_client.php:785 +#: usr/local/www/vpn_openvpn_client.php:804 +#: usr/local/www/vpn_openvpn_server.php:1125 +msgid "IPv6 Tunnel Network" +msgstr "IPv6 Tünel Ağ" + +#: usr/local/www/vpn_openvpn_server.php:1001 +#: usr/local/www/vpn_openvpn_server.php:1074 +msgid "" +"This is the IPv6 virtual network used for private communications between " +"this server and client hosts expressed using CIDR (eg. fe80::/64). The first " +"network address will be assigned to the\tserver virtual interface. The " +"remaining network addresses can optionally be assigned to connecting " +"clients. (see Address Pool)" +msgstr "" +"Bu IPv6 sunucu ile CIDR yoluyla belirtilen istemciler (örn. fe80::/64) " +"arasında özel iletişim için kullanılacak sanal ağdır. İlk ağ adresi sunucu\t" +"sanal arabirimine atanır. Diğer ağ adresleri bağlanan istemcilere isteğe " +"göre atanabilir (bkz Adres Havuzu)." + +#: usr/local/www/vpn_openvpn_server.php:1029 +#: usr/local/www/vpn_openvpn_server.php:1171 +#: usr/local/www/vpn_openvpn_server.php:1199 +msgid "IPv4 Local Network" +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1033 +#: usr/local/www/vpn_openvpn_server.php:1175 +#: usr/local/www/vpn_openvpn_server.php:1203 +msgid "" +"This is the network that will be accessible from the remote endpoint. " +"Expressed as a CIDR range. You may leave this blank if you don't want to add " +"a route to the local network through this tunnel on the remote machine. This " +"is generally set to your LAN network" +msgstr "" +"Uzak uçtan erişilebilir olacak ağ. CIDR aralığı olarak belirtilir. Eğer uzak " +"makinada bu tünel içinden yerel ağa bir yönlendirme eklemek istemiyorsanız " +"burayı boş bırakabilirsiniz. Genel LAN ağınız olarak ayarlıdır" + +#: usr/local/www/vpn_openvpn_server.php:1042 +#: usr/local/www/vpn_openvpn_server.php:1184 +#: usr/local/www/vpn_openvpn_server.php:1212 +msgid "IPv6 Local Network" +msgstr "IPv6 Yerel Ağ" + +#: usr/local/www/vpn_openvpn_server.php:1046 +#: usr/local/www/vpn_openvpn_server.php:1188 +#: usr/local/www/vpn_openvpn_server.php:1216 +msgid "" +"This is the IPv6 network that will be accessible from the remote endpoint. " +"Expressed as a CIDR range. You may leave this blank if you don't want to add " +"a route to the local network through this tunnel on the remote machine. This " +"is generally set to your LAN network" +msgstr "" +"Uzak uçtan erişilebilir olacak IPv6 ağı. CIDR aralığı olarak belirtilir. " +"Eğer uzak makinada bu tünel içinden yerel ağa bir yönlendirme eklemek " +"istemiyorsanız burayı boş bırakabilirsiniz. Genel LAN ağınız olarak ayarlıdı" + +#: usr/local/www/vpn_openvpn_server.php:1059 +#: usr/local/www/vpn_openvpn_server.php:1201 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter here the " +"remote LAN here. You may leave this blank if you don't want a site-to-site " +"VPN" +msgstr "" +"Yönlendirme tablolarında elle değişiklik yapmadan alanlar arası sanal özel " +"ağ (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek bir " +"ağdır. CIDR aralığı şeklinde girilir. Eğer bu alanlar arası bir VPN ise " +"buraya uzak LAN'ı giriniz. Eğer alanlar arası VPN istemiyorsanız burayı boş " +"bırakabilirsiniz" + +#: usr/local/www/vpn_openvpn_server.php:1069 +#: usr/local/www/vpn_openvpn_server.php:1211 +#: usr/local/www/vpn_openvpn_server.php:1253 +#: usr/local/www/vpn_openvpn_server.php:1280 +msgid "Concurrent connections" +msgstr "Eş zamanlı bağlantılar" + +#: usr/local/www/vpn_openvpn_server.php:1073 +#: usr/local/www/vpn_openvpn_server.php:1215 +#: usr/local/www/vpn_openvpn_server.php:1257 +#: usr/local/www/vpn_openvpn_server.php:1284 +msgid "" +"Specify the maximum number of clients allowed to concurrently connect to " +"this server" +msgstr "" +"Bu sunucuya eş zamanlı bağlanmasına izin verilen istemci sayısını belirtiniz" + +#: usr/local/www/vpn_openvpn_server.php:1113 +#: usr/local/www/vpn_openvpn_server.php:1255 +#: usr/local/www/vpn_openvpn_server.php:1297 +#: usr/local/www/vpn_openvpn_server.php:1324 +msgid "Inter-client communication" +msgstr "İstemciler arası iletişim" + +#: usr/local/www/vpn_openvpn_server.php:1123 +#: usr/local/www/vpn_openvpn_server.php:1265 +#: usr/local/www/vpn_openvpn_server.php:1307 +#: usr/local/www/vpn_openvpn_server.php:1334 +msgid "Allow communication between clients connected to this server" +msgstr "" +"Bu sunucuya bağlanan istemcilerinin kendi aralarındaki trafiklerine izin " +"ver." + +#: usr/local/www/vpn_openvpn_server.php:1131 +#: usr/local/www/vpn_openvpn_server.php:1273 +#: usr/local/www/vpn_openvpn_server.php:1315 +#: usr/local/www/vpn_openvpn_server.php:1342 +msgid "Duplicate Connections" +msgstr "Çift Bağlantı" + +#: usr/local/www/vpn_openvpn_server.php:1141 +#: usr/local/www/vpn_openvpn_server.php:1283 +#: usr/local/www/vpn_openvpn_server.php:1325 +#: usr/local/www/vpn_openvpn_server.php:1352 +msgid "" +"Allow multiple concurrent connections from clients using the same Common " +"Name.
    NOTE: This is not generally recommended, but may be needed for " +"some scenarios." +msgstr "" +"Aynı Genel Adı kullanan istemcilerin birlikte birden fazla bağlantısına izin " +"ver.
    NOT: Genellikle önerilmez, ancak bazı durumlarda gerekebilir." + +#: usr/local/www/vpn_openvpn_server.php:1158 +#: usr/local/www/vpn_openvpn_server.php:1300 +#: usr/local/www/vpn_openvpn_server.php:1342 +#: usr/local/www/vpn_openvpn_server.php:1369 +msgid "Dynamic IP" +msgstr "Dinamik IP" + +#: usr/local/www/vpn_openvpn_server.php:1168 +#: usr/local/www/vpn_openvpn_server.php:1310 +#: usr/local/www/vpn_openvpn_server.php:1352 +#: usr/local/www/vpn_openvpn_server.php:1379 +msgid "" +"Allow connected clients to retain their connections if their IP address " +"changes" +msgstr "" +"Bağlanan istemcilerin IP adresleri değişse bile bağlantılarını korumalarına " +"izin ver." + +#: usr/local/www/vpn_openvpn_server.php:1176 +#: usr/local/www/vpn_openvpn_server.php:1318 +#: usr/local/www/vpn_openvpn_server.php:1360 +#: usr/local/www/vpn_openvpn_server.php:1387 +msgid "Address Pool" +msgstr "Adres Havuzu" + +#: usr/local/www/vpn_openvpn_server.php:1186 +#: usr/local/www/vpn_openvpn_server.php:1328 +#: usr/local/www/vpn_openvpn_server.php:1370 +#: usr/local/www/vpn_openvpn_server.php:1397 +msgid "Provide a virtual adapter IP address to clients (see Tunnel Network)" +msgstr "İstemcilere sanal IP adresi sağla (bkz Tünel Ağ)" + +#: usr/local/www/vpn_openvpn_server.php:1322 +#: usr/local/www/vpn_openvpn_server.php:1464 +#: usr/local/www/vpn_openvpn_csc.php:560 +#: usr/local/www/vpn_openvpn_server.php:1506 +#: usr/local/www/vpn_openvpn_csc.php:560 +#: usr/local/www/vpn_openvpn_server.php:1558 +msgid "" +"If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) " +"will be disabled" +msgstr "" +"Bu seçenek seçilmediğinde TCP/IP üzerinde NetBIOS (WINS dahil ) devre dışı " +"kalacaktır" + +#: usr/local/www/vpn_openvpn_server.php:1352 +#: usr/local/www/vpn_openvpn_server.php:1494 +#: usr/local/www/vpn_openvpn_server.php:1536 +#: usr/local/www/vpn_openvpn_server.php:1588 +#, fuzzy +msgid "Scope ID" +msgstr "Scope ID" + +#: usr/local/www/vpn_openvpn_server.php:1418 +#: usr/local/www/vpn_openvpn_server.php:1560 +#: usr/local/www/vpn_openvpn_server.php:1602 +#: usr/local/www/vpn_openvpn_server.php:1654 +msgid "" +"Enter any additional options you would like to add to the OpenVPN server " +"configuration here, separated by a semicolon" +msgstr "" +"OpenVPN sunucu yapılandırmasına eklemek istediğiniz diğer seçenekleri " +"aralarına noktalı virgül koyarak girebilirsiniz" + +#: usr/local/www/vpn_openvpn_server.php:1449 +#: usr/local/www/vpn_openvpn_server.php:1591 +#: usr/local/www/vpn_openvpn_server.php:1632 +#: usr/local/www/vpn_openvpn_server.php:1684 +msgid "Protocol / Port" +msgstr "Potokol / Port" + +#: usr/local/www/vpn_openvpn_server.php:1482 +#: usr/local/www/vpn_openvpn_server.php:1624 +#: usr/local/www/vpn_openvpn_server.php:1665 +#: usr/local/www/vpn_openvpn_server.php:1717 +msgid "Do you really want to delete this server?" +msgstr "Bu sunucuyu silmek istediğinizden emin misiniz?" + +#: usr/local/www/vpn_openvpn_server.php:1503 +#: usr/local/www/vpn_openvpn_server.php:1645 +#: usr/local/www/vpn_openvpn_server.php:1686 +#: usr/local/www/vpn_openvpn_server.php:1738 +msgid "Additional OpenVPN servers can be added here." +msgstr "Ek OpenVPN sunucular bu alandan eklenebilir." + +#: usr/local/www/vpn_pppoe_edit.php:136 usr/local/www/vpn_pppoe_edit.php:136 +msgid "The specified server address is equal to an interface ip address." +msgstr "Belirtilen sunucu adresi bir arabirim IP adresine eş." + +#: usr/local/www/vpn_pppoe_edit.php:141 usr/local/www/vpn_pppoe_edit.php:141 +#, php-format +msgid "No password specified for username %s" +msgstr "%s kullanıcısının parolası tanımlanmamış" + +#: usr/local/www/vpn_pppoe_edit.php:143 usr/local/www/vpn_pppoe_edit.php:143 +#, php-format +msgid "Incorrect ip address specified for username %s" +msgstr "%s kullanıcısı IP adresi yanlış girilmiş" + +#: usr/local/www/vpn_pppoe_edit.php:355 usr/local/www/vpn_pppoe_edit.php:356 +#: usr/local/www/vpn_pppoe_edit.php:359 +msgid "PPPoE server configuration" +msgstr "PPPoE sunucu yapılandırması" + +#: usr/local/www/vpn_pppoe_edit.php:368 usr/local/www/vpn_pppoe_edit.php:369 +#: usr/local/www/vpn_pppoe_edit.php:372 +msgid "Enable PPPoE server" +msgstr "PPPoE sunucuyu etkinleştir" + +#: usr/local/www/vpn_pppoe_edit.php:403 usr/local/www/vpn_pppoe_edit.php:404 +#: usr/local/www/vpn_pppoe_edit.php:407 +msgid "Hint" +msgstr "İpucu" + +#: usr/local/www/vpn_pppoe_edit.php:407 usr/local/www/vpn_pppoe_edit.php:408 +#: usr/local/www/vpn_pppoe_edit.php:411 +msgid "No. PPPoE users" +msgstr "PPPoE kullanıcı sayısı" + +#: usr/local/www/vpn_pppoe_edit.php:420 usr/local/www/vpn_pppoe_edit.php:421 +#: usr/local/www/vpn_pppoe_edit.php:424 +msgid "Hint: 10 is ten PPPoE clients" +msgstr "İpucu: 10 on adet PPPoE istemcisi demektir." + +#: usr/local/www/vpn_pppoe_edit.php:428 usr/local/www/vpn_pppoe_edit.php:429 +#: usr/local/www/vpn_pppoe_edit.php:432 +msgid "" +"Enter the IP address the PPPoE server should give to clients for use as " +"their \"gateway\"" +msgstr "" +"PPPoE sunucunun istemcilere \"ağ geçidi\" olarak vereceği IP adresini girin" + +#: usr/local/www/vpn_pppoe_edit.php:440 usr/local/www/vpn_pppoe_edit.php:441 +#: usr/local/www/vpn_pppoe_edit.php:444 +msgid "Specify the starting address for the client IP address subnet" +msgstr "İstemci IP adres altağı başlangıç adresi belirle" + +#: usr/local/www/vpn_pppoe_edit.php:457 usr/local/www/vpn_pppoe_edit.php:458 +#: usr/local/www/vpn_pppoe_edit.php:461 +msgid "" +"If entered they will be given to all PPPoE clients, else LAN DNS and one WAN " +"DNS will go to all clients" +msgstr "" +"Boş bırakırsanız LAN DNS ve bir WAN DNS tüm istemcilere gider, aksi taktirde " +"tüm PPPoE istemcilere bu değer gönderilir" + +#: usr/local/www/vpn_pppoe_edit.php:474 usr/local/www/vpn_pppoe_edit.php:475 +#: usr/local/www/vpn_pppoe_edit.php:478 +msgid "Use Backup RADIUS Server" +msgstr "Yedek RADIUS Sunucusu Kullan" + +#: usr/local/www/vpn_pppoe_edit.php:475 usr/local/www/vpn_pppoe_edit.php:476 +#: usr/local/www/vpn_pppoe_edit.php:479 +msgid "" +"When set, if primary server fails all requests will be sent via backup server" +msgstr "" +"Eğer ana sunucu isteklere cevap veremezse tüm istekler yedek sunucu " +"üzerinden gönderilir" + +#: usr/local/www/vpn_pppoe_edit.php:478 usr/local/www/vpn_pppoe_edit.php:479 +#: usr/local/www/vpn_pppoe_edit.php:482 +msgid "NAS IP Address" +msgstr "NAS IP Adresi" + +#: usr/local/www/vpn_pppoe_edit.php:481 usr/local/www/vpn_pppoe_edit.php:482 +#: usr/local/www/vpn_pppoe_edit.php:485 +msgid "RADIUS server NAS IP Address" +msgstr "RADIUS sunucu NAS IP adresi" + +#: usr/local/www/vpn_pppoe_edit.php:488 usr/local/www/vpn_pppoe_edit.php:489 +#: usr/local/www/vpn_pppoe_edit.php:492 +msgid "RADIUS accounting update period in seconds" +msgstr "RADIUS hesaplandırma güncelleme periyodu (sn)" + +#: usr/local/www/vpn_pppoe_edit.php:495 usr/local/www/vpn_pppoe_edit.php:496 +#: usr/local/www/vpn_pppoe_edit.php:499 +msgid "Issue IP Addresses via RADIUS server" +msgstr "IP adreslerini RADIUS sunucudan ata" + +#: usr/local/www/vpn_pppoe_edit.php:498 usr/local/www/vpn_pppoe_edit.php:499 +#: usr/local/www/vpn_pppoe_edit.php:502 +msgid "RADIUS server Primary" +msgstr "Ana RADIUS sunucu" + +#: usr/local/www/vpn_pppoe_edit.php:503 usr/local/www/vpn_pppoe_edit.php:504 +#: usr/local/www/vpn_pppoe_edit.php:507 +msgid "" +"Enter the IP address, authentication port and accounting port (optional) of " +"the RADIUS server." +msgstr "" +"Ana RADIUS sunucunun IP adresini, kimlik doğrulama portunu, hesaplandırma " +"portu (isteğe bağlı) belirtiniz." + +#: usr/local/www/vpn_pppoe_edit.php:504 usr/local/www/vpn_pppoe_edit.php:520 +#: usr/local/www/vpn_pppoe_edit.php:505 usr/local/www/vpn_pppoe_edit.php:521 +#: usr/local/www/vpn_pppoe_edit.php:508 usr/local/www/vpn_pppoe_edit.php:524 +msgid "standard port 1812 and 1813 accounting" +msgstr "standart 1812 ve 1813 hesaplandırma portları" + +#: usr/local/www/vpn_pppoe_edit.php:507 usr/local/www/vpn_pppoe_edit.php:508 +#: usr/local/www/vpn_pppoe_edit.php:511 +msgid "RADIUS primary shared secret" +msgstr "RADIUS ana paylaşımlı anahtar" + +#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:515 +#: usr/local/www/vpn_pppoe_edit.php:518 +msgid "RADIUS server Secondary" +msgstr "İkincil RADIUS sunucu" + +#: usr/local/www/vpn_pppoe_edit.php:519 usr/local/www/vpn_pppoe_edit.php:520 +#: usr/local/www/vpn_pppoe_edit.php:523 +msgid "" +"Enter the IP address, authentication port and accounting port (optional) of " +"the backup RADIUS server." +msgstr "" +"Yedek RADIUS sunucunun IP adresini, kimlik doğrulama portunu, hesaplandırma " +"portu (isteğe bağlı) belirtiniz." + +#: usr/local/www/vpn_pppoe_edit.php:523 usr/local/www/vpn_pppoe_edit.php:524 +#: usr/local/www/vpn_pppoe_edit.php:527 +msgid "RADIUS secondary shared secret" +msgstr "RADIUS ikincil paylaşımlı anahtar" + +#: usr/local/www/vpn_pppoe_edit.php:531 usr/local/www/vpn_pppoe_edit.php:532 +#: usr/local/www/vpn_pppoe_edit.php:535 +msgid "User (s)" +msgstr "Kullanıcı(lar)" + +#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/vpn_pppoe_edit.php:597 +#: usr/local/www/vpn_pppoe_edit.php:600 +msgid "" +"don't forget to add a firewall rule to permit traffic from PPPoE clients" +msgstr "" +"PPPoE istemcilerden trafiğe izin verecek güvenlik duvarı izin kuralı " +"eklemeyi unutmayın" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:37 +msgid "You need to specify the number of connections." +msgstr "Bağlantı sayısını belirtmelisiniz." + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:42 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:42 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:43 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:43 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:42 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:42 +msgid "The number of connections should be greater than 1." +msgstr "Bağlantı sayısı 1'den yüksek olmalıdır." + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:65 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:63 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:64 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:71 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:63 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:64 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:71 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:63 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:63 +msgid "You have less interfaces than number of connections!" +msgstr "Bağlantı sayısından az arabirim var!" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:445 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:518 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:459 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:551 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:489 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:586 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:293 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:372 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:588 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:443 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:516 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:489 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:588 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:459 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:551 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:443 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:516 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:293 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:372 +msgid "" +"Address must be a valid IP address or Firewall Alias. Please correct this " +"value to continue." +msgstr "" +"Adres geçerli bir IP adresi veya Güvenlik Duvarı Grup tanımı olmalıdır. " +"Devam etmek için hatayı düzeltiniz." + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:505 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:536 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:539 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:568 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:574 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:601 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:358 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:392 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:576 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:603 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:503 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:534 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:576 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:603 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:539 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:568 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:503 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:534 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:358 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:392 +msgid "Only percentage bandwidth specification is allowed." +msgstr "Bant genişliği sadece yüzde cinsinden yazılabilir." + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:695 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1044 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:722 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1106 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:756 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1154 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:930 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:758 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1156 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:693 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1042 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:758 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1156 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:722 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1106 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:693 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1042 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:542 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:930 +msgid "" +"Custom Bandwidths are greater than 30%. Please lower them for the wizard to " +"continue." +msgstr "" +"Özel Bant Genişlikleri yüzde 30'dan fazla. Sihirbazın devam edebilmesi için " +"onları düşürmelisiniz." + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1346 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1408 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1462 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1205 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1464 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1344 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1464 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1408 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1344 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1205 +msgid "Penalty Box" +msgstr "Ceza Kutusu" + +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1366 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1482 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364 +msgid "VOIP Adapter" +msgstr "VoIP Adaptörü" + +#: usr/local/www/wizards/openvpn_wizard.inc:602 +#: usr/local/www/wizards/openvpn_wizard.inc:618 +#: usr/local/www/wizards/openvpn_wizard.inc:602 +#: usr/local/www/wizards/openvpn_wizard.inc:618 +#, php-format +msgid "OpenVPN %s wizard" +msgstr "OpenVPN %s sihirbazı" + +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:268 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:268 +msgid "You cannot specify bandwidth smaller than 1!" +msgstr "Bant genişliği 1'den düşük olamaz!" + +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:278 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:288 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:288 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:278 +msgid "You cannot select the same interface for local and outside." +msgstr "Yerel ve dış için aynı arabirimi seçemezsiniz." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:276 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:276 +msgid "You cannot specify 0 bandwidth!" +msgstr "Sıfır \"0\" bant genişliği kullanılamaz!" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:297 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:297 +msgid "You cannot select the same interface twice on local interfaces." +msgstr "Yerel arabirimlerde aynı arabirimi iki kez seçemezsiniz." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:37 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:37 +msgid "You need to specify the number of local interfaces connected." +msgstr "Bağlı arabirimlerin sayısını belirtmelisiniz." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:41 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:41 +msgid "The number of local connection needs to be greater than 1." +msgstr "Yerel bağlantı sayısı 1'den fazla olmalıdır." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:240 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:240 +msgid "Upload bandwidth of connection is not valid." +msgstr "Bağlantı upload bant genişliği geçerli değil." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:245 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:245 +msgid "Download bandwidth of connection is not valid." +msgstr "Bağlantı download bant genişliği geçerli değil." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:252 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:252 +msgid "You cannot specify bandwidth less than 1!" +msgstr "Bant genişliği alanlarında 1'den küçük değer giremezsiniz." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:257 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:262 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:257 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:262 +msgid "We do not support Bandwidths smaller than 128Kbit/s for CBQ scheduler." +msgstr "CBQ zamanlayıcısında 128Kbit/s'den düşük değerleri desteklemiyoruz." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:300 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:300 +msgid "Upload or download bandwidth is not valid." +msgstr "Gönderme veya İndirme bant genişliği geçersiz." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:317 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:317 +#, php-format +msgid "" +"You cannot set the VoIP upload bandwidth on WAN connection higher than " +"80% of the connection." +msgstr "" +"Bağlantının 80% oranından daha fazlasını WAN bağlantısının VoIP gönderme " +"bant genişliği olarak ayarlayamazsınız." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:324 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:334 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:324 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:334 +#, php-format +msgid "" +"You cannot set the VoIP download bandwidth on connection higher than 80% of " +"the connection." +msgstr "" +"Bağlantının 80% oranından daha fazlasını VoIP indirme bant genişliği olarak " +"ayarlayamazsınız." + +#: usr/local/www/widgets/widgets/system_information.widget.php:162 +#: usr/local/www/widgets/widgets/system_information.widget.php:153 +#: usr/local/www/widgets/widgets/system_information.widget.php:159 +#: usr/local/www/widgets/widgets/system_information.widget.php:160 +msgid "Current date/time" +msgstr "Güncel tarih/saat" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:41 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:41 +msgid "Computer / Device" +msgstr "Bilgisayar / Aygıt" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:67 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:67 +msgid "Wake Up" +msgstr "Uyan" + +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:72 +#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:72 +msgid "No saved WoL addresses" +msgstr "Kayıtlı WoL (Lan ile Uyan) adresleri yok" + +#: usr/local/www/firewall_nat_npt.php:105 +#: usr/local/www/firewall_nat_npt.php:105 +msgid "External Prefix" +msgstr "Dış Ön-ek" + +#: usr/local/www/firewall_nat_npt.php:106 +#: usr/local/www/firewall_nat_npt.php:106 +msgid "Internal prefix" +msgstr "İç Ön-ek" + +#: usr/local/www/firewall_nat_npt_edit.php:106 +#: usr/local/www/firewall_nat_npt_edit.php:106 +msgid "Source prefix" +msgstr "Kaynak Ön-ek" + +#: usr/local/www/firewall_nat_npt_edit.php:108 +#: usr/local/www/firewall_nat_npt_edit.php:108 +msgid "Destination prefix" +msgstr "Hedef Ön-ek" + +#: usr/local/www/firewall_nat_npt_edit.php:156 +#: usr/local/www/firewall_nat_npt_edit.php:161 +#: usr/local/www/firewall_nat_npt_edit.php:160 +#: usr/local/www/firewall_nat_npt_edit.php:160 +msgid "Edit NAT NPt entry" +msgstr "NAT NPT girdisini düzenle" + +#: usr/local/www/firewall_nat_npt_edit.php:206 +#: usr/local/www/firewall_nat_npt_edit.php:211 +#: usr/local/www/firewall_nat_npt_edit.php:210 +#: usr/local/www/firewall_nat_npt_edit.php:210 +msgid "Internal IPv6 Prefix" +msgstr "İç IPv6 Ön-ek" + +#: usr/local/www/firewall_nat_npt_edit.php:228 +#: usr/local/www/firewall_nat_npt_edit.php:233 +#: usr/local/www/firewall_nat_npt_edit.php:232 +#: usr/local/www/firewall_nat_npt_edit.php:232 +msgid "" +"Enter the internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. " +"The prefix size specified for the internal IPv6 prefix will be applied to " +"the \n" +"external prefix." +msgstr "" +"İç (LAN) ULA IPv6 Ön-ek i Ağ ön-ek çevirisi için girin. Ön-ek boyutu iç IPv6 " +"ön-eki belirtin, belirtilen değer dış Ön-ek \n" +"için de geçerli olacak." + +#: usr/local/www/firewall_nat_npt_edit.php:234 +#: usr/local/www/firewall_nat_npt_edit.php:239 +#: usr/local/www/firewall_nat_npt_edit.php:238 +#: usr/local/www/firewall_nat_npt_edit.php:238 +msgid "Destination IPv6 Prefix" +msgstr "Hedef IPv6 Ön-ek" + +#: usr/local/www/firewall_nat_npt_edit.php:258 +#: usr/local/www/firewall_nat_npt_edit.php:263 +#: usr/local/www/firewall_nat_npt_edit.php:262 +#: usr/local/www/firewall_nat_npt_edit.php:262 +msgid "Enter the Global Unicast routable IPv6 prefix here" +msgstr "Global yönetilebilir tekli IPv6 ön-ek' i buraya girin" + +#: usr/local/www/services_dhcpv6.php:74 +#: usr/local/www/services_router_advertisements.php:74 +#: usr/local/www/services_router_advertisements.php:74 +#: usr/local/www/services_dhcpv6.php:74 +msgid "" +"The DHCPv6 Server can only be enabled on interfaces configured with static " +"IP addresses" +msgstr "" +"DHCPv6 Sunucu sadece arabirimler statik IP adresleri ile yapılandırılınca " +"etkinleşir" + +#: usr/local/www/services_dhcpv6.php:184 usr/local/www/services_dhcpv6.php:196 +#: usr/local/www/services_dhcpv6.php:181 usr/local/www/services_dhcpv6.php:175 +msgid "A valid prefix range must be specified." +msgstr "Geçerli bir Ön-ek aralığı belirtilmelidir." + +#: usr/local/www/services_dhcpv6.php:190 usr/local/www/services_dhcpv6.php:202 +#: usr/local/www/services_dhcpv6.php:187 usr/local/www/services_dhcpv6.php:181 +msgid "A valid IPv6 address must be specified for the gateway." +msgstr "Ağ geçidi için geçerli bir IPv6 adresi belirtilmelidir." + +#: usr/local/www/services_dhcpv6.php:192 usr/local/www/services_dhcpv6.php:204 +#: usr/local/www/services_router_advertisements.php:154 +#: usr/local/www/services_dhcpv6.php:189 +#: usr/local/www/services_router_advertisements.php:154 +#: usr/local/www/services_dhcpv6.php:183 +msgid "" +"A valid IPv6 address must be specified for the primary/secondary DNS servers." +msgstr "Ana/ikincil DNS sunucusu için geçerli bir IPv6 adresi belirtilmelidir." + +#: usr/local/www/services_dhcpv6.php:201 usr/local/www/services_dhcpv6.php:223 +#: usr/local/www/services_dhcpv6.php:208 usr/local/www/services_dhcpv6.php:202 +msgid "" +"A valid IPv6 address must be specified for the primary/secondary NTP servers." +msgstr "Ana/ikincil NTP sunucusu için geçerli bir IPv6 adresi belirtilmelidir." + +#: usr/local/www/services_dhcpv6.php:205 usr/local/www/services_dhcpv6.php:227 +#: usr/local/www/services_dhcpv6.php:212 usr/local/www/services_dhcpv6.php:206 +msgid "A valid IPv6 address or hostname must be specified for the TFTP server." +msgstr "TFTP sunucu için geçerli bir IPv6 adresi belirtilmelidir." + +#: usr/local/www/services_dhcpv6.php:207 usr/local/www/services_dhcpv6.php:229 +#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:208 +msgid "A valid IPv6 address must be specified for the network boot server." +msgstr "Ağ açılış (boot) sunucusu için geçerli bir IPv6 adresi belirtilmelidir." + +#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:236 +#: usr/local/www/services_dhcpv6.php:221 usr/local/www/services_dhcpv6.php:215 +#, php-format +msgid "The subnet range cannot overlap with virtual IPv6 address %s." +msgstr "Altağ aralığı sanal IPv6 adresi %s ile çakışamaz." + +#: usr/local/www/services_dhcpv6.php:359 usr/local/www/services_dhcpv6.php:386 +#: usr/local/www/services_dhcpv6.php:367 usr/local/www/services_dhcpv6.php:362 +msgid "DHCPv6 server" +msgstr "DHCPv6 sunucu" + +#: usr/local/www/services_dhcpv6.php:497 usr/local/www/services_dhcpv6.php:524 +#: usr/local/www/services_router_advertisements.php:261 +#: usr/local/www/services_router_advertisements.php:270 +#: usr/local/www/services_dhcpv6.php:503 +#: usr/local/www/services_router_advertisements.php:261 +#: usr/local/www/services_router_advertisements.php:270 +#: usr/local/www/services_dhcpv6.php:514 +msgid "Router Advertisements" +msgstr "Yönlendirici İlanı" + +#: usr/local/www/services_dhcpv6.php:504 +#, php-format +msgid "" +"Select the Operating Mode for the router advertisement Daemon. Use \"Router " +"Only\" to only advertise the router, \"Unmanaged\" for Router Advertising " +"with Stateless Autoconfig, \"Managed\" for DHCPv6 only with router " +"advertisements, \"Assisted\" for DHCPv6 Combined with Stateless Autoconfig" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:510 usr/local/www/services_dhcpv6.php:584 +#: usr/local/www/services_dhcpv6.php:515 usr/local/www/services_dhcpv6.php:526 +#, php-format +msgid "Enable DHCPv6 server on %s interface" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:649 +#: usr/local/www/services_dhcpv6.php:580 usr/local/www/services_dhcpv6.php:597 +msgid "Prefix Delegation Range" +msgstr "Ön-ek Yetilendirme Aralığı" + +#: usr/local/www/services_dhcpv6.php:580 +msgid "prefix length" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:585 +msgid "" +"You can define a Prefix range here for DHCP Prefix Delegation. This allows " +"for \n" +"\t\t\t\t\tassigning networks to subrouters" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:803 +#: usr/local/www/status_dhcpv6_leases.php:361 +#: usr/local/www/status_dhcpv6_leases.php:405 +#: usr/local/www/status_dhcpv6_leases.php:483 +#: usr/local/www/services_dhcpv6.php:898 +#: usr/local/www/status_dhcpv6_leases.php:406 +#: usr/local/www/status_dhcpv6_leases.php:484 +#: usr/local/www/services_dhcpv6.php:829 +#: usr/local/www/status_dhcpv6_leases.php:409 +#: usr/local/www/status_dhcpv6_leases.php:487 +#: usr/local/www/services_dhcpv6.php:850 +msgid "DUID" +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:106 +#: usr/local/www/services_dhcpv6_edit.php:189 +#: usr/local/www/services_dhcpv6_edit.php:108 +#: usr/local/www/services_dhcpv6_edit.php:192 +#: usr/local/www/services_dhcpv6_edit.php:191 +#: usr/local/www/services_dhcpv6_edit.php:111 +#: usr/local/www/services_dhcpv6_edit.php:194 +msgid "DUID Identifier" +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:126 +#: usr/local/www/services_dhcpv6_edit.php:128 +#: usr/local/www/services_dhcpv6_edit.php:131 +msgid "A valid DUID Identifier must be specified." +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:135 +#: usr/local/www/services_dhcpv6_edit.php:137 +#: usr/local/www/services_dhcpv6_edit.php:140 +msgid "This Hostname, IP or DUID Identifier already exists." +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:172 +#: usr/local/www/services_dhcpv6_edit.php:175 +#: usr/local/www/services_dhcpv6_edit.php:178 +msgid "DHCPv6" +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:186 +#: usr/local/www/services_dhcpv6_edit.php:189 +#: usr/local/www/services_dhcpv6_edit.php:188 +#: usr/local/www/services_dhcpv6_edit.php:191 +msgid "Static DHCPv6 Mapping" +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:193 +#: usr/local/www/services_dhcpv6_edit.php:196 +#: usr/local/www/services_dhcpv6_edit.php:195 +#: usr/local/www/services_dhcpv6_edit.php:198 +msgid "Enter a DUID Identifier in the following format: " +msgstr "" + +#: usr/local/www/services_dhcpv6_edit.php:202 +#: usr/local/www/services_dhcpv6_edit.php:205 +msgid "" +"If no IPv6 address is given, one will be dynamically allocated from the " +"pool." +msgstr "" + +#: usr/local/www/services_dhcpv6_relay.php:81 +#: usr/local/www/services_dhcpv6_relay.php:81 +msgid "A valid Destination Server IPv6 address must be specified." +msgstr "" + +#: usr/local/www/services_dhcpv6_relay.php:145 +#: usr/local/www/services_dhcpv6_relay.php:146 +#: usr/local/www/services_dhcpv6_relay.php:146 +msgid "DHCPv6 Relay configuration" +msgstr "DHCPv6 Aktarma yapılandırması" + +#: usr/local/www/services_dhcpv6_relay.php:151 +#: usr/local/www/services_dhcpv6_relay.php:152 +#: usr/local/www/services_dhcpv6_relay.php:152 +#, php-format +msgid "Enable DHCPv6 relay on interface" +msgstr "DHCPv6 Aktarıcısını arabirimde etkinleştir" + +#: usr/local/www/services_dhcpv6_relay.php:169 +#: usr/local/www/services_dhcpv6_relay.php:170 +#: usr/local/www/services_dhcpv6_relay.php:170 +msgid "Interfaces without an IPv6 address will not be shown." +msgstr "IPv6 adresi dışındaki arabirimler gösterilmeyecektir." + +#: usr/local/www/services_dhcpv6_relay.php:177 +#: usr/local/www/services_dhcpv6_relay.php:178 +#: usr/local/www/services_dhcpv6_relay.php:178 +#, php-format +msgid "" +"If this is checked, the DHCPv6 relay will append the circuit ID (%s " +"interface number) and the agent ID to the DHCPv6 request." +msgstr "" + +#: usr/local/www/services_dhcpv6_relay.php:184 +#: usr/local/www/services_dhcpv6_relay.php:185 +#: usr/local/www/services_dhcpv6_relay.php:185 +msgid "" +"This is the IPv6 address of the server to which DHCPv6 requests are relayed. " +"You can enter multiple server IPv6 addresses, separated by commas. Select " +"\"Proxy requests to DHCPv6 server on WAN subnet\" to relay DHCPv6 packets to " +"the server that was used on the WAN interface." +msgstr "" + +#: usr/local/www/status_dhcpv6_leases.php:49 +#: usr/local/www/status_dhcpv6_leases.php:50 +#: usr/local/www/status_dhcpv6_leases.php:50 +msgid "DHCPv6 leases" +msgstr "" + +#: usr/local/www/status_dhcpv6_leases.php:360 +#: usr/local/www/status_dhcpv6_leases.php:404 +#: usr/local/www/status_dhcpv6_leases.php:482 +#: usr/local/www/status_dhcpv6_leases.php:405 +#: usr/local/www/status_dhcpv6_leases.php:483 +#: usr/local/www/status_dhcpv6_leases.php:408 +#: usr/local/www/status_dhcpv6_leases.php:486 +msgid "IAID" +msgstr "" + +#: usr/local/www/status_dhcpv6_leases.php:362 +#: usr/local/www/status_dhcpv6_leases.php:406 +#: usr/local/www/status_dhcpv6_leases.php:407 +#: usr/local/www/status_dhcpv6_leases.php:410 +msgid "Hostname/MAC" +msgstr "" + +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_wireless.php:99 +#: usr/local/www/diag_logs_wireless.php:100 +#: usr/local/www/diag_logs_wireless.php:100 +#, php-format +msgid "Wireless (hostapd) log entries" +msgstr "Kablosuz (hostapd) günlük girdileri" + +#: usr/local/www/services_captiveportal_zones.php:37 +#: usr/local/www/services_captiveportal_zones.php:37 +msgid "Captiveportal" +msgstr "Hizmet Portalı" + +#: usr/local/www/services_captiveportal_zones.php:37 +#: usr/local/www/services_captiveportal_zones.php:37 +msgid "Zones" +msgstr "Bölgeler" + +#: usr/local/www/services_captiveportal_zones.php:47 +#: usr/local/www/services_captiveportal_zones.php:48 +#: usr/local/www/services_captiveportal_zones.php:48 +msgid "The CaptivePortal entry list has been changed" +msgstr "Hizmet Portalı girdi listesi değiştirildi" + +#: usr/local/www/services_captiveportal_zones.php:60 +#: usr/local/www/services_captiveportal_zones.php:101 +#: usr/local/www/services_captiveportal_zones.php:61 +#: usr/local/www/services_captiveportal_zones.php:102 +#: usr/local/www/services_captiveportal_zones.php:61 +#: usr/local/www/services_captiveportal_zones.php:102 +msgid "add a new captiveportal instance" +msgstr "yeni hizmet portalı örneği ekle" + +#: usr/local/www/services_captiveportal_zones.php:88 +#: usr/local/www/services_captiveportal_zones.php:89 +#: usr/local/www/services_captiveportal_zones.php:89 +msgid "edit captiveportal instance" +msgstr "hizmet portalı örneğini düzenle" + +#: usr/local/www/services_captiveportal_zones.php:89 +#: usr/local/www/services_captiveportal_zones.php:90 +#: usr/local/www/services_captiveportal_zones.php:90 +msgid "delete captiveportal instance" +msgstr "hizmet portalı örneğini sil" + +#: usr/local/www/services_captiveportal_zones_edit.php:48 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +#: usr/local/www/services_captiveportal_zones_edit.php:45 +msgid "Edit Zones" +msgstr "Bölgeleri düzenle" + +#: usr/local/www/services_captiveportal_zones_edit.php:67 +#: usr/local/www/services_captiveportal_zones_edit.php:69 +#: usr/local/www/services_captiveportal_zones_edit.php:69 +msgid "already exists" +msgstr "zaten mevcut" + +#: usr/local/www/services_captiveportal_zones_edit.php:96 +#: usr/local/www/services_captiveportal_zones_edit.php:98 +#: usr/local/www/services_captiveportal_zones_edit.php:94 +msgid "Edit Captiveportal Zones" +msgstr "Hizmet Portalı Bölgelerini düzenle" + +#: usr/local/www/services_captiveportal_zones_edit.php:103 +msgid "Zone name. Cannot contain spaces." +msgstr "Bölge adı. Boşluk içeremez." + +#: usr/local/www/system_firmware_restorefullbackup.php:104 +#: usr/local/www/system_firmware_restorefullbackup.php:104 +msgid "Restore full backup" +msgstr "Tam yedeği geri yükle" + +#: usr/local/www/system_firmware_restorefullbackup.php:139 +#: usr/local/www/system_firmware_restorefullbackup.php:139 +msgid "Filename" +msgstr "Dosya ismi" + +#: usr/local/www/system_firmware_restorefullbackup.php:162 +#: usr/local/www/system_firmware_restorefullbackup.php:162 +msgid "Do you really want to delete this backup?" +msgstr "Bu yedeği silmek istediğinize emin misiniz?" + +#: usr/local/www/system_firmware_restorefullbackup.php:174 +#: usr/local/www/system_firmware_restorefullbackup.php:174 +msgid "

    Could not locate any previous backups.
    " +msgstr "
    Önceki herhangi bir yedek(ler) bulunamıyor.
    " + +#: usr/local/www/system_firmware_restorefullbackup.php:184 +#: usr/local/www/system_firmware_restorefullbackup.php:184 +msgid "Restore" +msgstr "Geri yükle" + +#: usr/local/www/diag_dump_states_sources.php:65 +#: usr/local/www/diag_dump_states_sources.php:65 +msgid "Show Source Tracking" +msgstr "Kaynak Takibini Göster" + +#: usr/local/www/diag_dump_states_sources.php:145 +#: usr/local/www/diag_dump_states_sources.php:144 +#: usr/local/www/diag_dump_states_sources.php:144 +msgid "Source -> Destination" +msgstr "Kaynak -> Hedef" + +#: usr/local/www/diag_dump_states_sources.php:146 +#: usr/local/www/diag_dump_states_sources.php:145 +#: usr/local/www/diag_dump_states_sources.php:145 +msgid "# States" +msgstr "# Durum" + +#: usr/local/www/diag_dump_states_sources.php:147 +#: usr/local/www/diag_dump_states_sources.php:146 +#: usr/local/www/diag_dump_states_sources.php:146 +msgid "# Connections" +msgstr "# Bağlantılar" + +#: usr/local/www/diag_dump_states_sources.php:180 +#: usr/local/www/diag_dump_states_sources.php:179 +#: usr/local/www/diag_dump_states_sources.php:179 +msgid "Remove all source tracking entries from" +msgstr "" + +#: usr/local/www/diag_dump_states_sources.php:190 +#: usr/local/www/diag_dump_states_sources.php:189 +#: usr/local/www/diag_dump_states_sources.php:189 +msgid "No source tracking entries were found." +msgstr "" + +#: etc/inc/system.inc:418 etc/inc/system.inc:425 +#, php-format +msgid "Not adding default route because OLSR dynamic gateway is enabled." +msgstr "" + +#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:124 +#: etc/inc/priv.defs.inc:124 +msgid "WebCfg - Diagnostics: Logs: Gateways page" +msgstr "" + +#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:125 +#: etc/inc/priv.defs.inc:125 +msgid "Allow access to the 'Diagnostics: Logs: System: Gateways' page." +msgstr "" + +#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:130 +#: etc/inc/priv.defs.inc:130 +msgid "WebCfg - Diagnostics: Logs: Resolver page" +msgstr "" + +#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:131 +#: etc/inc/priv.defs.inc:131 +msgid "Allow access to the 'Diagnostics: Logs: System: Resolver' page." +msgstr "" + +#: etc/inc/priv.defs.inc:130 etc/inc/priv.defs.inc:136 +#: etc/inc/priv.defs.inc:136 +msgid "WebCfg - Diagnostics: Logs: Wireless page" +msgstr "" + +#: etc/inc/priv.defs.inc:131 etc/inc/priv.defs.inc:137 +#: etc/inc/priv.defs.inc:137 +msgid "Allow access to the 'Diagnostics: Logs: System: Wireless' page." +msgstr "" + +#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:154 +#: etc/inc/priv.defs.inc:154 +msgid "WebCfg - Status: System logs: NTP page" +msgstr "" + +#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:155 +#: etc/inc/priv.defs.inc:155 +msgid "Allow access to the 'Status: System logs: NTP' page." +msgstr "" + +#: etc/inc/pfsense-utils.inc:2377 etc/inc/pfsense-utils.inc:2468 +#: etc/inc/pfsense-utils.inc:2521 +msgid "English" +msgstr "İngilizce" + +#: etc/inc/pfsense-utils.inc:2378 etc/inc/pfsense-utils.inc:2469 +#: etc/inc/pfsense-utils.inc:2522 +msgid "Portuguese (Brazil)" +msgstr "Portekizce (Brezilya)" + +#: etc/inc/interfaces.inc:251 etc/inc/interfaces.inc:250 +#: etc/inc/interfaces.inc:248 +msgid "interface_vlan_configure called with if undefined." +msgstr "" + +#: etc/inc/interfaces.inc:292 etc/inc/interfaces.inc:291 +#: etc/inc/interfaces.inc:289 +#, php-format +msgid "interface_qinq_configure called with if undefined.%s" +msgstr "" + +#: etc/inc/interfaces.inc:377 etc/inc/interfaces.inc:376 +#: etc/inc/interfaces.inc:380 +#, php-format +msgid "interface_qinq2_configure called with if undefined.%s" +msgstr "" + +#: etc/inc/interfaces.inc:2152 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interface_carpdev_configure() for " +"writing.%s" +msgstr "" + +#: etc/inc/interfaces.inc:2995 +msgid "Could not bring wanif up in interface_carpdev_dhcp_configure()" +msgstr "" + +#: etc/inc/interfaces.inc:3500 etc/inc/interfaces.inc:3360 +#: etc/inc/interfaces.inc:3453 +#, php-format +msgid "" +"Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for " +"writing.%s" +msgstr "" + +#: etc/inc/services.inc:1085 etc/inc/services.inc:1217 +#: etc/inc/services.inc:1211 +msgid "Started IGMP proxy service." +msgstr "" + +#: usr/local/www/diag_logs_routing.php:74 +#: usr/local/www/diag_logs_settings.php:224 usr/local/www/fbegin.inc:148 +#: usr/local/www/fbegin.inc:183 usr/local/www/diag_logs_relayd.php:75 +#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111 +#: usr/local/www/diag_logs_vpn.php:135 usr/local/www/diag_logs_ppp.php:79 +#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:54 +#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs.php:86 +#: usr/local/www/status_ntpd.php:94 usr/local/www/diag_logs_dhcp.php:79 +#: usr/local/www/diag_logs_wireless.php:76 +#: usr/local/www/diag_logs_filter_summary.php:193 +#: usr/local/www/services_ntpd.php:71 usr/local/www/diag_logs_gateways.php:87 +#: usr/local/www/diag_logs_openvpn.php:78 +#: usr/local/www/diag_logs_filter_dynamic.php:107 +#: usr/local/www/diag_logs_filter.php:110 +#: usr/local/www/diag_logs_routing.php:75 +#: usr/local/www/diag_logs_settings.php:231 usr/local/www/fbegin.inc:157 +#: usr/local/www/fbegin.inc:191 usr/local/www/diag_logs_relayd.php:76 +#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112 +#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/status_ntpd.php:109 usr/local/www/diag_logs_dhcp.php:80 +#: usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/diag_logs_filter_summary.php:194 +#: usr/local/www/services_ntpd.php:76 usr/local/www/diag_logs_gateways.php:88 +#: usr/local/www/diag_logs_openvpn.php:79 +#: usr/local/www/diag_logs_filter_dynamic.php:108 +#: usr/local/www/diag_logs_filter.php:100 usr/local/www/diag_logs_auth.php:75 +#: usr/local/www/diag_logs_settings.php:231 +#: usr/local/www/diag_logs_filter.php:100 +#: usr/local/www/diag_logs_routing.php:75 usr/local/www/diag_logs_dhcp.php:80 +#: usr/local/www/services_ntpd.php:76 usr/local/www/diag_logs.php:86 +#: usr/local/www/diag_logs_filter_dynamic.php:106 +#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/diag_logs_ntpd.php:75 +#: usr/local/www/diag_logs_openvpn.php:79 usr/local/www/diag_logs_ppp.php:77 +#: usr/local/www/status_ntpd.php:109 usr/local/www/diag_logs_gateways.php:88 +#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:182 +#: usr/local/www/diag_logs_relayd.php:76 usr/local/www/diag_logs_vpn.php:135 +#: usr/local/www/diag_logs_ipsec.php:112 +#: usr/local/www/diag_logs_wireless.php:77 +#: usr/local/www/diag_logs_resolver.php:88 +#: usr/local/www/diag_logs_filter_summary.php:194 +msgid "NTP" +msgstr "" + +#: usr/local/www/diag_logs_routing.php:82 +#: usr/local/www/diag_logs_resolver.php:96 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs.php:95 usr/local/www/diag_logs_wireless.php:84 +#: usr/local/www/diag_logs_gateways.php:96 +#: usr/local/www/diag_logs_routing.php:83 +#: usr/local/www/diag_logs_resolver.php:97 +#: usr/local/www/diag_logs_wireless.php:85 +#: usr/local/www/diag_logs_gateways.php:97 +#: usr/local/www/diag_logs_routing.php:83 usr/local/www/diag_logs.php:65 +#: usr/local/www/diag_logs.php:95 usr/local/www/diag_logs_gateways.php:97 +#: usr/local/www/diag_logs_wireless.php:85 +#: usr/local/www/diag_logs_resolver.php:97 +msgid "General" +msgstr "" + +#: usr/local/www/diag_logs_routing.php:85 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_resolver.php:99 usr/local/www/diag_logs.php:98 +#: usr/local/www/diag_logs_wireless.php:87 +#: usr/local/www/diag_logs_gateways.php:99 +#: usr/local/www/diag_logs_routing.php:86 +#: usr/local/www/diag_logs_resolver.php:100 +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_gateways.php:100 +#: usr/local/www/diag_logs_routing.php:86 usr/local/www/diag_logs.php:98 +#: usr/local/www/diag_logs_gateways.php:100 +#: usr/local/www/diag_logs_wireless.php:88 +#: usr/local/www/diag_logs_resolver.php:66 +#: usr/local/www/diag_logs_resolver.php:100 +msgid "Resolver" +msgstr "" + +#: usr/local/www/diag_logs_routing.php:97 +#: usr/local/www/diag_logs_routing.php:98 +#: usr/local/www/diag_logs_routing.php:98 +#, php-format +msgid "Routing daemon log entries" +msgstr "Yönlendirme servisi günlük girdileri" + +#: usr/local/www/system_routes_edit.php:158 +#: usr/local/www/system_routes_edit.php:158 +msgid "A route to these destination networks already exists" +msgstr "" + +#: usr/local/www/system_routes_edit.php:302 +#: usr/local/www/system_routes_edit.php:303 +#: usr/local/www/system_routes_edit.php:303 +msgid "Disable this static route" +msgstr "" + +#: usr/local/www/system_routes_edit.php:303 +#: usr/local/www/system_routes_edit.php:304 +#: usr/local/www/system_routes_edit.php:304 +msgid "" +"Set this option to disable this static route without removing it from the " +"list." +msgstr "" + +#: usr/local/www/pkg_mgr.php:185 usr/local/www/pkg_mgr_installed.php:178 +#: usr/local/www/pkg_mgr_installed.php:178 usr/local/www/pkg_mgr.php:185 +msgid "Package info" +msgstr "" + +#: usr/local/www/pkg_mgr.php:189 usr/local/www/pkg_mgr_installed.php:182 +#: usr/local/www/pkg_mgr_installed.php:182 usr/local/www/pkg_mgr.php:189 +msgid "No package info, check the forum" +msgstr "" + +#: usr/local/www/pkg_mgr.php:193 +msgid "Click on package name to access it's website." +msgstr "" + +#: usr/local/www/pkg_mgr.php:217 usr/local/www/pkg_mgr.php:217 +msgid "Click " +msgstr "" + +#: usr/local/www/pkg_mgr.php:232 usr/local/www/pkg_mgr_installed.php:199 +#: usr/local/www/pkg_mgr_installed.php:199 usr/local/www/pkg_mgr.php:232 +msgid "Click package info for more details about " +msgstr "" + +#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240 +#: usr/local/www/pkg_mgr.php:240 +msgid "Do you really want to install " +msgstr "" + +#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240 +#: usr/local/www/pkg_mgr.php:240 +msgid "Install " +msgstr "" + +#: usr/local/www/services_unbound_acls.php:57 +msgid "Access List successfully deleted" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:173 +msgid "" +"The settings for the DNS Resolver have changed. You must apply the " +"configuration to take affect." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:181 +msgid "General Settings" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:182 +#: usr/local/www/services_unbound.php:137 +#: usr/local/www/services_unbound_advanced.php:124 +msgid "Advanced settings" +msgstr "Gelişmiş ayarlar" + +#: usr/local/www/services_unbound_acls.php:183 +#: usr/local/www/services_unbound.php:138 +#: usr/local/www/services_unbound_advanced.php:125 +msgid "Access Lists" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:200 +#, php-format +msgid "%s Access List" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:203 +msgid "Access List name" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:207 +msgid "Provide an Access List name." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:222 +msgid "" +"Choose what to do with DNS requests that match the criteria specified below." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:223 +msgid "" +"Deny: This action stops queries from hosts within the netblock " +"defined below." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:224 +msgid "" +"Refuse: This action also stops queries from hosts within the netblock " +"defined below, but sends a DNS rcode REFUSED error message back to the " +"client." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:225 +msgid "" +"Allow: This action allows queries from hosts within the netblock " +"defined below." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:226 +msgid "" +"Allow Snoop: This action allows recursive and nonrecursive access " +"from hosts within the netblock defined below. Used for cache snooping and " +"ideally should only be configured for your administrative host." +msgstr "" + +#: usr/local/www/services_unbound_acls.php:231 +msgid "Networks" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:317 +msgid "Access List Name" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:340 +msgid "edit access list" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:343 +msgid "Do you really want to delete this access list?" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:344 +msgid "delete access list" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:357 +msgid "Add new Access List" +msgstr "" + +#: usr/local/www/services_unbound_acls.php:364 +msgid "Access Lists to control access to the DNS Resolver can be defined here." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:86 +#: usr/local/www/diag_logs_settings.php:87 +#: usr/local/www/diag_logs_settings.php:87 +msgid "" +"A valid IP address/hosname or IP/hostname:port must be specified for remote " +"syslog server #1." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:89 +#: usr/local/www/diag_logs_settings.php:90 +#: usr/local/www/diag_logs_settings.php:90 +msgid "" +"A valid IP address/hosname or IP/hostname:port must be specified for remote " +"syslog server #2." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:92 +#: usr/local/www/diag_logs_settings.php:93 +#: usr/local/www/diag_logs_settings.php:93 +msgid "" +"A valid IP address/hosname or IP/hostname:port must be specified for remote " +"syslog server #3." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:234 +#: usr/local/www/diag_logs_settings.php:241 +#: usr/local/www/diag_logs_settings.php:241 +msgid "General Logging Options" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:245 +#: usr/local/www/diag_logs_settings.php:252 +#: usr/local/www/diag_logs_settings.php:252 +msgid "" +"Hint: This is only the number of log entries displayed in the GUI. It does " +"not affect how many entries are contained in the actual log files." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:251 +#: usr/local/www/diag_logs_settings.php:258 +#: usr/local/www/diag_logs_settings.php:258 +msgid "" +"Hint: packets that are blocked by the implicit default block rule will not " +"be logged if you uncheck this option. Per-rule logging options are still " +"respected." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:259 +#: usr/local/www/diag_logs_settings.php:266 +#: usr/local/www/diag_logs_settings.php:266 +msgid "" +"Hint: If this is checked, filter logs are shown as generated by the packet " +"filter, without any formatting. This will reveal more detailed information, " +"but it is more difficult to read." +msgstr "" + +#: usr/local/www/diag_logs_settings.php:265 +#: usr/local/www/diag_logs_settings.php:285 +#: usr/local/www/diag_logs_settings.php:285 +msgid "Disable writing log files to the local disk" +msgstr "Yerel diske (Harddisk) günlük dosyalarını yazmayı devre dışı bırak." + +#: usr/local/www/diag_logs_settings.php:274 +#: usr/local/www/diag_logs_settings.php:294 +#: usr/local/www/diag_logs_settings.php:294 +msgid "Remote Logging Options" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:277 +#: usr/local/www/diag_logs_settings.php:297 +#: usr/local/www/diag_logs_settings.php:297 +msgid "Enable Remote Logging" +msgstr "" + +#: usr/local/www/diag_logs_settings.php:279 +#: usr/local/www/diag_logs_settings.php:299 +#: usr/local/www/diag_logs_settings.php:299 +msgid "Send log messages to remote syslog server" +msgstr "Sistem günlüklerini uzaktaki Syslog sunusuna gönder" + +#: usr/local/www/diag_logs_settings.php:282 +#: usr/local/www/diag_logs_settings.php:302 +#: usr/local/www/diag_logs_settings.php:302 +msgid "Remote Syslog Servers" +msgstr "Uzak Syslog Sunucuları" + +#: usr/local/www/diag_logs_settings.php:299 +#: usr/local/www/diag_logs_settings.php:319 +#: usr/local/www/diag_logs_settings.php:319 +msgid "IP addresses of remote syslog servers, or an IP:port." +msgstr "Uzak syslog sunucularının IP adresleri, yada IP:port." + +#: usr/local/www/diag_logs_settings.php:304 +#: usr/local/www/diag_logs_settings.php:324 +#: usr/local/www/diag_logs_settings.php:324 +msgid "Remote Syslog Contents" +msgstr "Uzak Syslog İçerikleri" + +#: usr/local/www/diag_logs_settings.php:334 +#: usr/local/www/diag_logs_settings.php:354 +#: usr/local/www/diag_logs_settings.php:354 +msgid "" +"syslog sends UDP datagrams to port 514 on the specified remote syslog " +"server, unless another port is specified. Be sure to set syslogd on the " +"remote server to accept syslog messages from" +msgstr "" + +#: usr/local/www/system_gateway_groups_edit.php:229 +#: usr/local/www/system_gateway_groups_edit.php:289 +#: usr/local/www/system_gateway_groups_edit.php:289 +msgid "Interface Address" +msgstr "Arabirim Adresi" + +#: usr/local/www/system_gateway_groups_edit.php:253 +#: usr/local/www/system_gateway_groups_edit.php:313 +#: usr/local/www/system_gateway_groups_edit.php:313 +msgid "" +"The virtual IP field selects what (virtual) IP should be used when this " +"group applies to a local Dyndns, IPsec or openvpn endpoint" +msgstr "" +"Sanal IP alanı seçilen hangi (sanal) IP, bu grup yerel Dyndsn, IPsec yada " +"OpenVPN uç noktası için kullanılmalıdır" + +#: usr/local/www/services_dyndns_edit.php:102 +#: usr/local/www/services_dyndns_edit.php:322 +#: usr/local/www/services_dyndns_edit.php:102 +#: usr/local/www/services_dyndns_edit.php:326 +msgid "Update URL" +msgstr "Güncelleme URL" + +#: usr/local/www/services_dyndns_edit.php:254 +#: usr/local/www/services_dyndns_edit.php:258 +msgid "Interface to send update from" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:262 +#: usr/local/www/services_dyndns_edit.php:266 +msgid "Note: This is almost always the same as the Interface to Monitor." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:299 +#: usr/local/www/services_dyndns_edit.php:303 +msgid "" +"Username is required for all types except Namecheap, FreeDNS and Custom " +"Entries." +msgstr "" +"Namecheap,Özel girdiler ve FreeDNS dışındaki tüm türlerde kullanıcı adı " +"girilmelidir." + +#: usr/local/www/services_dyndns_edit.php:300 +#: usr/local/www/services_dyndns_edit.php:304 +msgid "Route 53: Enter your Access Key ID." +msgstr "Yönlendir 53: Giriş Anahtarı Kimliğini giriniz." + +#: usr/local/www/services_dyndns_edit.php:301 +#: usr/local/www/services_dyndns_edit.php:305 +msgid "" +"For Custom Entries, Username and Password represent HTTP Authentication " +"username and passwords." +msgstr "" +"Özel girdiler, Kullanıcı adı ve Parola HTTP kimlik doğrulama kullanıcı adı " +"ve parolasini temsil eder." + +#: usr/local/www/services_dyndns_edit.php:310 +#: usr/local/www/services_dyndns_edit.php:314 +msgid "Route 53: Enter your Secret Access Key." +msgstr "Yönlendir 53: Gizli Giriş Anahtar' ınızı giriniz." + +#: usr/local/www/services_dyndns_edit.php:315 +#: usr/local/www/services_dyndns_edit.php:319 +msgid "Zone ID" +msgstr "Alan Kimliği (ID)" + +#: usr/local/www/services_dyndns_edit.php:318 +#: usr/local/www/services_dyndns_edit.php:322 +msgid "" +"Enter Zone ID that you received when you created your domain in Route 53." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:325 +#: usr/local/www/services_dyndns_edit.php:329 +msgid "" +"This is the only field required by for Custom Dynamic DNS, and is only used " +"by Custom Entries." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:327 +#: usr/local/www/services_dyndns_edit.php:338 +#: usr/local/www/services_dyndns_edit.php:331 +#: usr/local/www/services_dyndns_edit.php:342 +msgid "" +"If you need the new IP to be included in the request, put %IP% in its place." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:331 +#: usr/local/www/services_dyndns_edit.php:335 +msgid "Result Match" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:334 +#: usr/local/www/services_dyndns_edit.php:338 +msgid "This field is only used by Custom Dynamic DNS Entries." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:336 +#: usr/local/www/services_dyndns_edit.php:340 +msgid "" +"This field should be identical to what your DDNS Provider will return if the " +"update succeeds, leave it blank to disable checking of returned results." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:340 +#: usr/local/www/services_dyndns_edit.php:344 +msgid "" +"If you need to include multiple possible values, sperate them with a |. If " +"your provider includes a |, escape it with \\|" +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:342 +#: usr/local/www/services_dyndns_edit.php:346 +msgid "" +"Tabs (\\t), newlines (\\n) and carriage returns (\\r) at the beginning or " +"end of the returned results are removed before comparison." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:351 +#: usr/local/www/services_dyndns_edit.php:355 +msgid "Choose TTL for your dns record." +msgstr "" + +#: usr/local/www/services_dyndns_edit.php:370 +#: usr/local/www/services_dyndns_edit.php:374 +msgid "Save & Force Update" +msgstr "" + +#: usr/local/www/fbegin.inc:102 usr/local/www/fbegin.inc:111 +#: usr/local/www/fbegin.inc:103 +msgid "High Avail. Sync" +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:119 +#: usr/local/www/services_dnsmasq_edit.php:119 +msgid "Alias Domain" +msgstr "" + +#: usr/local/www/services_dnsmasq_edit.php:124 +#: usr/local/www/services_dnsmasq_edit.php:124 +msgid "" +"Hostnames in alias list can only contain the characters A-Z, 0-9 and '-'." +msgstr "" +"Grup listesi içindeki Host adları sadece İngilizce A-Z, 0-9 ve '-' " +"karakterlerini içerebilir." + +#: usr/local/www/services_dnsmasq_edit.php:127 +#: usr/local/www/services_dnsmasq_edit.php:127 +msgid "A valid domain must be specified in alias list." +msgstr "" +"Geçerli bir domain (alan adı) grup (alias) listesi içinde belirtilmelidir." + +#: usr/local/www/services_dnsmasq_edit.php:232 +#: usr/local/www/services_dnsmasq_edit.php:233 +#: usr/local/www/services_dnsmasq_edit.php:233 +msgid "Enter additional names for this host." +msgstr "Bu host için ek isimleri giriniz." + +#: usr/local/www/pkg.php:238 usr/local/www/pkg.php:238 +msgid "Saving changes..." +msgstr "Değişiklikler kaydediliyor..." + +#: usr/local/www/pkg.php:239 usr/local/www/pkg.php:239 +msgid "Do you really want to save changes?" +msgstr "Gerçekten değişiklikleri kaydetmek istiyor musunuz?" + +#: usr/local/www/status_interfaces.php:196 +#: usr/local/www/status_interfaces.php:199 +#: usr/local/www/status_interfaces.php:199 +msgid "Cell Signal (RSSI)" +msgstr "Cep Sinyali (RSSI)" + +#: usr/local/www/status_interfaces.php:203 +#: usr/local/www/status_interfaces.php:206 +#: usr/local/www/status_interfaces.php:206 +msgid "Cell Mode" +msgstr "Cep Kipi" + +#: usr/local/www/status_interfaces.php:210 +#: usr/local/www/status_interfaces.php:213 +#: usr/local/www/status_interfaces.php:213 +msgid "Cell SIM State" +msgstr "Cep SIM Durumu" + +#: usr/local/www/status_interfaces.php:217 +#: usr/local/www/status_interfaces.php:220 +#: usr/local/www/status_interfaces.php:220 +msgid "Cell Service" +msgstr "Cep Servisi" + +#: usr/local/www/status_interfaces.php:224 +#: usr/local/www/status_interfaces.php:227 +#: usr/local/www/status_interfaces.php:227 +msgid "Cell Upstream" +msgstr "Cep Gönderme" + +#: usr/local/www/status_interfaces.php:231 +#: usr/local/www/status_interfaces.php:234 +#: usr/local/www/status_interfaces.php:234 +msgid "Cell Downstream" +msgstr "Cep İndirme" + +#: usr/local/www/status_interfaces.php:238 +#: usr/local/www/status_interfaces.php:241 +#: usr/local/www/status_interfaces.php:241 +msgid "Cell Current Up" +msgstr "Cep Şimdiki Gönderilen" + +#: usr/local/www/status_interfaces.php:245 +#: usr/local/www/status_interfaces.php:248 +#: usr/local/www/status_interfaces.php:248 +msgid "Cell Current Down" +msgstr "Cep Şimdiki İndirilen" + +#: usr/local/www/status_interfaces.php:289 +#: usr/local/www/status_interfaces.php:292 +#: usr/local/www/status_interfaces.php:292 +msgid "IPv6 Link Local" +msgstr "IPv6 Yerel Bağlantı" + +#: usr/local/www/status_interfaces.php:339 +#: usr/local/www/status_interfaces.php:342 +#: usr/local/www/status_interfaces.php:342 +msgid "LAGG Protocol" +msgstr "LAGG Protokol" + +#: usr/local/www/status_interfaces.php:346 +#: usr/local/www/status_interfaces.php:349 +#: usr/local/www/status_interfaces.php:349 +msgid "LAGG Ports" +msgstr "LAGG Portları" + +#: usr/local/www/diag_defaults.php:51 usr/local/www/diag_defaults.php:61 +msgid "" +"The system has been reset to factory defaults and is now rebooting. This may " +"take a few minutes, depending on your hardware." +msgstr "" +"Sistem fabrika ayarlarına geri döndürüldü ve tekrar başlatılacak. Bu işlem " +"donanımınıza bağlı olarak birkaç dakika sürebilir." + +#: usr/local/www/carp_status.php:196 usr/local/www/carp_status.php:189 +#: usr/local/www/carp_status.php:189 +msgid "You can configure high availability sync settings" +msgstr "Yüksek erişilebilirlik senkronize ayarlarını yapılandırabilirsiniz" + +#: usr/local/www/load_balancer_setting.php:69 +#: usr/local/www/load_balancer_setting.php:69 +msgid "Timeout must be a numeric value" +msgstr "Zaman aşımı sayısal bir değer olmalıdır" + +#: usr/local/www/load_balancer_setting.php:73 +#: usr/local/www/load_balancer_setting.php:73 +msgid "Interval must be a numeric value" +msgstr "Aralık sayısal bir değer olmalıdır" + +#: usr/local/www/load_balancer_setting.php:78 +#: usr/local/www/load_balancer_setting.php:78 +msgid "Prefork must be a numeric value" +msgstr "Prefork sayısal bir değer olmalıdır" + +#: usr/local/www/load_balancer_setting.php:81 +#: usr/local/www/load_balancer_setting.php:81 +msgid "Prefork value must be between 1 and 32" +msgstr "Prefork değeri 1 ile 32 arasında olmalıdır" + +#: usr/local/www/load_balancer_setting.php:132 +#: usr/local/www/load_balancer_setting.php:131 +#: usr/local/www/load_balancer_setting.php:131 +msgid "Relayd global settings" +msgstr "Aytarıcıd genel ayarları" + +#: usr/local/www/load_balancer_setting.php:135 +#: usr/local/www/load_balancer_setting.php:134 +#: usr/local/www/load_balancer_setting.php:134 +msgid "timeout" +msgstr "zaman aşımı" + +#: usr/local/www/load_balancer_setting.php:139 +#: usr/local/www/load_balancer_setting.php:138 +#: usr/local/www/load_balancer_setting.php:138 +msgid "" +"Set the global timeout in milliseconds for checks. Leave blank to use the " +"default value of 1000 ms " +msgstr "" +"Genel zaman aşımı kontrollerini milisaniye olarak ayarlayın. Boş bırakarak " +"varsayılan değer (1000 ms) kullanın " + +#: usr/local/www/load_balancer_setting.php:143 +#: usr/local/www/load_balancer_setting.php:142 +#: usr/local/www/load_balancer_setting.php:142 +msgid "interval" +msgstr "aralık" + +#: usr/local/www/load_balancer_setting.php:147 +#: usr/local/www/load_balancer_setting.php:146 +#: usr/local/www/load_balancer_setting.php:146 +msgid "" +"Set the interval in seconds at which the member of a pool will be checked. " +"Leave blank to use the default interval of 10 seconds" +msgstr "" +"Tabloya ait kullanıcıların kontrol edileceği aralığı ayarlayın. Boş " +"bırakarak varsayılan değer (10 saniye) kullanın" + +#: usr/local/www/load_balancer_setting.php:151 +#: usr/local/www/load_balancer_setting.php:150 +#: usr/local/www/load_balancer_setting.php:150 +msgid "prefork" +msgstr "işlem (prefork)" + +#: usr/local/www/load_balancer_setting.php:155 +#: usr/local/www/load_balancer_setting.php:154 +#: usr/local/www/load_balancer_setting.php:154 +msgid "" +"Number of processes used by relayd. Leave blank to use the default value of " +"5 processes" +msgstr "" +"Aktarıcıd nin kullanacağı işlemci sayısı. Boş bırakarak varsayılan değer (5 " +"işlemci) kullanın" + +#: usr/local/www/services_dhcp_relay.php:80 +#: usr/local/www/services_dhcp_relay.php:80 +msgid "A valid Destination Server IP address must be specified." +msgstr "Geçerli bir Hedef Sunucu IP adresi belirtilmelidir." + +#: usr/local/www/diag_ipsec.php:65 usr/local/www/diag_ipsec.php:66 +#: usr/local/www/diag_ipsec.php:68 +msgid "Disconnected user" +msgstr "Bağlantısı kopmuş kullanıcı" + +#: usr/local/www/diag_ipsec.php:192 usr/local/www/diag_ipsec.php:193 +#: usr/local/www/diag_ipsec.php:194 +msgid "Mobile User" +msgstr "Mobil Kullanıcı" + +#: usr/local/www/diag_ipsec.php:193 usr/local/www/diag_ipsec.php:194 +#: usr/local/www/diag_ipsec.php:195 +msgid "Login Time" +msgstr "Oturum açma Saati" + +#: usr/local/www/diag_ipsec.php:195 usr/local/www/diag_ipsec.php:196 +#: usr/local/www/diag_ipsec.php:197 +msgid "Remote" +msgstr "Uzak" + +#: usr/local/www/diag_ipsec.php:223 usr/local/www/diag_ipsec.php:224 +#: usr/local/www/diag_ipsec.php:225 +msgid "You can configure IPsec" +msgstr "IPsec'i yapılandırabilirsiniz" + +#: usr/local/www/system_certmanager.php:207 +#: usr/local/www/system_certmanager.php:681 +#: usr/local/www/system_certmanager.php:210 +#: usr/local/www/system_certmanager.php:706 +msgid "Certificate Type" +msgstr "Sertifika Türü" + +#: usr/local/www/system_certmanager.php:694 +#: usr/local/www/system_certmanager.php:719 +msgid "" +"Type of certificate to generate. Used for placing restrictions on the usage " +"of the generated certificate." +msgstr "" + +#: usr/local/www/system_certmanager.php:757 +#: usr/local/www/system_certmanager.php:782 +msgid "Alternative Names" +msgstr "Alternatif İsimler" + +#: usr/local/www/system_certmanager.php:1109 +#: usr/local/www/system_certmanager.php:1112 +#: usr/local/www/system_certmanager.php:1168 +msgid "export cert+key in .p12" +msgstr "" + +#: usr/local/www/diag_backup.php:192 usr/local/www/diag_backup.php:192 +msgid "RRD Data" +msgstr "RRD Veri" + +#: usr/local/www/firewall_rules_edit.php:224 +#: usr/local/www/firewall_rules_edit.php:237 +#: usr/local/www/firewall_rules_edit.php:222 +#: usr/local/www/firewall_rules_edit.php:236 +#: usr/local/www/firewall_rules_edit.php:219 +#: usr/local/www/firewall_rules_edit.php:233 +msgid "You can not assign a gateway to a rule that applies to IPv4 and IPv6" +msgstr "IPv4 ve IPv6 uygulanacak kural için ağ geçidi atayamazsınız" + +#: usr/local/www/firewall_rules_edit.php:249 +#: usr/local/www/firewall_rules_edit.php:248 +#: usr/local/www/firewall_rules_edit.php:245 +msgid "" +"You can not assign a protocol other then ICMP, TCP, UDP or TCP/UDP to a rule " +"that applies to IPv4 and IPv6" +msgstr "" +"IPv4 ve IPv6 uygulanacak kural için ICMP, TCP, UDP yada TCP/UDP protokolü " +"atayamazsınız" + +#: usr/local/www/firewall_rules_edit.php:253 +#: usr/local/www/firewall_rules_edit.php:252 +#: usr/local/www/firewall_rules_edit.php:249 +msgid "You can not assign a ICMP type to a rule that applies to IPv4 and IPv6" +msgstr "IPv4 ve IPv6 için uygulanacak ICMP türü kurallarını atayamazsınız." + +#: usr/local/www/firewall_rules_edit.php:416 +#: usr/local/www/firewall_rules_edit.php:415 +#: usr/local/www/firewall_rules_edit.php:418 +msgid "You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules." +msgstr "" +"IPv4 yada IPv6 adresleri içinde birleşik IPv4 IPv6 kurallarını " +"kullanamazsınız." + +#: usr/local/www/firewall_rules_edit.php:1285 +#: usr/local/www/firewall_rules_edit.php:1300 +#, fuzzy +msgid "802.1p" +msgstr "802.1p" + +#: usr/local/www/firewall_rules_edit.php:1308 +#: usr/local/www/firewall_rules_edit.php:1323 +msgid "Choose 802.1p priority to match on" +msgstr "802.1p eşleşen önceliği seçin" + +#: usr/local/www/firewall_rules_edit.php:1312 +#: usr/local/www/firewall_rules_edit.php:1327 +msgid "Choose 802.1p priority to apply" +msgstr "802.1p uygulanacak önceliği seçin" + +#: usr/local/www/services_unbound.php:102 +#: usr/local/www/services_unbound_advanced.php:88 +msgid "DNS Resolver" +msgstr "DNS Çözümleyici" + +#: usr/local/www/services_unbound.php:129 +msgid "The configuration for the DNS Resolver, has been changed" +msgstr "DNS Çözümleyici' nin yapılandırması değiştirildi" + +#: usr/local/www/services_unbound.php:136 +#: usr/local/www/services_unbound_advanced.php:123 +msgid "General settings" +msgstr "Genel ayarlar" + +#: usr/local/www/services_unbound.php:147 +msgid "General DNS Resolver Options" +msgstr "Genel DNS Çözümleyici Ayarları" + +#: usr/local/www/services_unbound.php:153 +msgid "Enable DNS Resolver" +msgstr "DNS Çözümleyici'yi etkinleştir" + +#: usr/local/www/services_unbound.php:157 +msgid "Network interfaces" +msgstr "Ağ Arabirimleri" + +#: usr/local/www/services_unbound.php:172 +msgid "" +"The DNS Resolver Server will listen on the selected interfaces. To add an " +"interface click inside the interface box and select the interface from the " +"drop down." +msgstr "" + +#: usr/local/www/services_unbound.php:177 +msgid "Outgoing interfaces" +msgstr "Giden Arabirimler" + +#: usr/local/www/services_unbound.php:192 +msgid "" +"Utilize different network interface(s) that the DNS Resolver will use to " +"send queries to authoritative servers and receive their replies. By default " +"all interfaces are used." +msgstr "" + +#: usr/local/www/services_unbound.php:197 +#, fuzzy +msgid "DNSSEC" +msgstr "DNSSEC" + +#: usr/local/www/services_unbound.php:200 +msgid "Enable DNSSEC Support" +msgstr "DNSSEC Desteğini Etkinleştir" + +#: usr/local/www/services_unbound.php:204 +msgid "Forwarding" +msgstr "Yönlendirme" + +#: usr/local/www/services_unbound.php:207 +msgid "Enable Forwarding Mode" +msgstr "Yönlendirme Kipini Etkinleştir" + +#: usr/local/www/services_unbound.php:214 +msgid "Register DHCP leases in the DNS Resolver" +msgstr "DHCP kiralarını DNS Çüzücüye kaydet" + +#: usr/local/www/services_unbound.php:215 +#, php-format +msgid "" +"If this option is set, then machines that specify their hostname when " +"requesting a DHCP lease will be registered in the DNS Resolver, so that " +"their name can be resolved. You should also set the domain in %sSystem: " +"General setup%s to the proper value." +msgstr "" + +#: usr/local/www/services_unbound.php:226 +msgid "Register DHCP static mappings in the DNS Resolver" +msgstr "DHCP statik eşleşmeleri DNS Çözücüye kaydet" + +#: usr/local/www/services_unbound.php:227 +#, php-format +msgid "" +"If this option is set, then DHCP static mappings will be registered in the " +"DNS Resolver, so that their name can be resolved. You should also set the " +"domain in %sSystem: General setup%s to the proper value." +msgstr "" + +#: usr/local/www/services_unbound.php:254 +#, php-format +msgid "" +"If the DNS Resolver is enabled, the DHCP service (if enabled) will " +"automatically serve the LAN IP address as a DNS server to DHCP clients so " +"they will use the DNS Resolver. If Forwarding, is enabled, the DNS Resolver " +"will use the DNS servers entered in %sSystem: General setup%s or those " +"obtained via DHCP or PPP on WAN if the "Allow DNS server list to be " +"overridden by DHCP/PPP on WAN" is checked." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:116 +msgid "The configuration of the DNS Resolver, has been changed" +msgstr "DNS Çözücü yapılandırması değiştirildi" + +#: usr/local/www/services_unbound_advanced.php:134 +msgid "Advanced Resolver Options" +msgstr "Gelişmiş Çözücü Seçenekleri" + +#: usr/local/www/services_unbound_advanced.php:137 +msgid "Hide Identity" +msgstr "Kimliği gizle" + +#: usr/local/www/services_unbound_advanced.php:140 +msgid "If enabled, id.server and hostname.bind queries are refused." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:144 +msgid "Hide Version" +msgstr "Sürümü gizle" + +#: usr/local/www/services_unbound_advanced.php:147 +msgid "If enabled, version.server and version.bind queries are refused." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:151 +msgid "Prefetch Support" +msgstr "Prefetch (önbellek) Desteği" + +#: usr/local/www/services_unbound_advanced.php:154 +msgid "" +"Message cache elements are prefetched before they expire to help keep the " +"cache up to date. When enabled, this option can cause an increase of around " +"10% more DNS traffic and load on the server, but frequently requested items " +"will not expire from the cache." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:158 +msgid "Prefetch DNS Key Support" +msgstr "Prefetch (önbellek) DNS Anahtar Desteği" + +#: usr/local/www/services_unbound_advanced.php:161 +#, php-format +msgid "" +"DNSKEY's are fetched earlier in the validation process when a %sDelegation " +"signer%s is encountered. This helps lower the latency of requests but does " +"utilize a little more CPU." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:165 +msgid "Harden Glue" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:168 +msgid "Only trust glue if it is within the servers authority." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:172 +msgid "Harden DNSSEC data" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:175 +msgid "" +"DNSSEC data is required for trust-anchored zones. If such data is absent, " +"the zone becomes bogus. If this is disabled and no DNSSEC data is received, " +"then the zone is made insecure." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:179 +msgid "Message Cache Size" +msgstr "Mesaj Ön bellek Boyutu" + +#: usr/local/www/services_unbound_advanced.php:190 +msgid "" +"Size of the message cache. The message cache stores DNS rcodes and " +"validation statuses. The RRSet cache will automatically be set to twice this " +"amount. The RRSet cache contains the actual RR data. The default is 4 " +"megabytes." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:194 +msgid "Outgoing TCP Buffers" +msgstr "Giden TCP Ön bellekleri" + +#: usr/local/www/services_unbound_advanced.php:204 +msgid "" +"The number of outgoing TCP buffers to allocate per thread. The default value " +"is 10. If 0 is selected then no TCP queries, to authoritative servers, are " +"done." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:208 +msgid "Incoming TCP Buffers" +msgstr "Gelen TCP Ön bellekleri" + +#: usr/local/www/services_unbound_advanced.php:218 +msgid "" +"The number of incoming TCP buffers to allocate per thread. The default value " +"is 10. If 0 is selected then no TCP queries, from clients, are accepted." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:222 +msgid "EDNS Buffer Size" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:229 +msgid "" +"Number of bytes size to advertise as the EDNS reassembly buffer size. This " +"is the value that is used in UDP datagrams sent to peers. RFC recommendation " +"is 4096 (which is the default). If you have fragmentation reassemble " +"problems, usually seen as timeouts, then a value of 1480 should help. The " +"512 value bypasses most MTU path problems, but it can generate an excessive " +"amount of TCP fallback." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:233 +msgid "Number of queries per thread" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:240 +msgid "" +"The number of queries that every thread will service simultaneously. If more " +"queries arrive that need to be serviced, and no queries can be jostled, then " +"these queries are dropped." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:244 +msgid "Jostle Timeout" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:252 +msgid "" +"This timeout is used for when the server is very busy. This protects against " +"denial of service by slow queries or high query rates. The default value is " +"200 milliseconds." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:256 +msgid "Maximum TTL for RRsets and messages" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:259 +msgid "" +"Configure a maximum Time to live for RRsets and messages in the cache. The " +"default is 86400 seconds (1 day). When the internal TTL expires the cache " +"item is expired. This can be configured to force the resolver to query for " +"data more often and not trust (very large) TTL values." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:263 +msgid "Minimum TTL for RRsets and messages" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:266 +msgid "" +"Configure a minimum Time to live for RRsets and messages in the cache. The " +"default is 0 seconds. If the minimum value kicks in, the data is cached for " +"longer than the domain owner intended, and thus less queries are made to " +"look up the data. The 0 value ensures the data in the cache is as the domain " +"owner intended. High values can lead to trouble as the data in the cache " +"might not match up with the actual data anymore." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:270 +msgid "TTL for Host cache entries" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:279 +msgid "" +"Time to live for entries in the host cache. The host cache contains " +"roundtrip timing and EDNS support information. The default is 15 minutes." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:283 +msgid "TTL for lame delegation" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:292 +msgid "" +"Time to live for when a delegation is considered to be lame. The default is " +"15 minutes." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:296 +msgid "Number of Hosts to cache" +msgstr "Ön belleğe alınacak Hostların sayısı" + +#: usr/local/www/services_unbound_advanced.php:305 +msgid "Number of hosts for which information is cached. The default is 10,000." +msgstr "" +"Önbelleğe alınacak bilgileri belirleyecek hostların sayısı. Varsayılan " +"10,000." + +#: usr/local/www/services_unbound_advanced.php:309 +msgid "Unwanted Reply Threshold" +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:319 +msgid "" +"If enabled, a total number of unwanted replies is kept track of in every " +"thread. When it reaches the threshold, a defensive action is taken and a " +"warning is printed to the log file. This defensive action is to clear the " +"RRSet and message caches, hopefully flushing away any poison. The default is " +"disabled, but if enabled a a value of 10 million is suggested." +msgstr "" + +#: usr/local/www/services_unbound_advanced.php:323 +msgid "Log level verbosity" +msgstr "Günlük seviyesi ayrıntı düzeyi" + +#: usr/local/www/services_unbound_advanced.php:333 +msgid "Select the log verbosity." +msgstr "Günlük ayrıntı düzeyini seç." + +#: usr/local/www/system_advanced_firewall.php:80 +#: usr/local/www/system_advanced_firewall.php:91 +msgid "The Firewall Maximum Tables value must be an integer." +msgstr "Güvenlik Duvarı Maksimum Tabloları Değeri tamsayı olmalıdır." + +#: usr/local/www/system_advanced_firewall.php:326 +#: usr/local/www/system_advanced_firewall.php:370 +msgid "Firewall Maximum Tables" +msgstr "Güvenlik Duvarı Maksimum Tabloları" + +#: usr/local/www/system_advanced_firewall.php:330 +#: usr/local/www/system_advanced_firewall.php:374 +msgid "" +"Maximum number of tables for systems such as aliases, sshlockout, snort, " +"etc, combined." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:331 +#: usr/local/www/system_advanced_firewall.php:375 +msgid "" +"This is the actual number of tables, not the number of entries inside the " +"tables (see below)" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:393 +#: usr/local/www/system_advanced_firewall.php:437 +msgid "Disable Negate rule on policy routing rules" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:395 +#: usr/local/www/system_advanced_firewall.php:439 +msgid "" +"With Multi-WAN you generally want to ensure traffic reaches directly " +"connected networks and VPN networks when using policy routing. You can " +"disable this for special purposes but it requires manually creating rules " +"for these networks" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:407 +#: usr/local/www/system_advanced_firewall.php:469 +msgid "NAT Reflection mode for port forwards" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:411 +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_nat_edit.php:788 +#: usr/local/www/system_advanced_firewall.php:473 +msgid "Enable (NAT + Proxy)" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:412 +#: usr/local/www/firewall_nat_edit.php:795 +#: usr/local/www/firewall_nat_edit.php:794 +#: usr/local/www/firewall_nat_edit.php:789 +#: usr/local/www/system_advanced_firewall.php:474 +msgid "Enable (Pure NAT)" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:415 +#: usr/local/www/system_advanced_firewall.php:477 +msgid "" +"When enabled, this automatically creates additional NAT redirect rules for " +"access to port forwards on your external IP addresses from within your " +"internal networks." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:417 +#: usr/local/www/system_advanced_firewall.php:479 +msgid "" +"The NAT + proxy mode uses a helper program to send packets to the target of " +"the port forward. It is useful in setups where the interface and/or gateway " +"IP used for communication with the target cannot be accurately determined at " +"the time the rules are loaded. Reflection rules are not created for ranges " +"larger than 500 ports and will not be used for more than 1000 ports total " +"between all port forwards. Only TCP and UDP protocols are supported." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:419 +#: usr/local/www/system_advanced_firewall.php:481 +msgid "" +"The pure NAT mode uses a set of NAT rules to direct packets to the target of " +"the port forward. It has better scalability, but it must be possible to " +"accurately determine the interface and gateway IP used for communication " +"with the target at the time the rules are loaded. There are no inherent " +"limits to the number of ports other than the limits of the protocols. All " +"protocols available for port forwards are supported." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:421 +#: usr/local/www/system_advanced_firewall.php:441 +#: usr/local/www/system_advanced_firewall.php:483 +#: usr/local/www/system_advanced_firewall.php:503 +msgid "" +"Individual rules may be configured to override this system setting on a per-" +"rule basis." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:428 +#: usr/local/www/system_advanced_firewall.php:490 +msgid "Enter value for Reflection timeout in seconds." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:430 +#: usr/local/www/system_advanced_firewall.php:492 +msgid "Note: Only applies to Reflection on port forwards in NAT + proxy mode." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:434 +#: usr/local/www/system_advanced_firewall.php:496 +msgid "Enable NAT Reflection for 1:1 NAT" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:437 +#: usr/local/www/system_advanced_firewall.php:499 +msgid "" +"Enables the automatic creation of additional NAT redirect rules for access " +"to 1:1 mappings of your external IP addresses from within your internal " +"networks." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:439 +#: usr/local/www/system_advanced_firewall.php:501 +msgid "" +"Note: Reflection on 1:1 mappings is only for the inbound component of the " +"1:1 mappings. This functions the same as the pure NAT mode for port " +"forwards. For more details, refer to the pure NAT mode description above." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:445 +#: usr/local/www/system_advanced_firewall.php:507 +msgid "Enable automatic outbound NAT for Reflection" +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:450 +#: usr/local/www/system_advanced_firewall.php:512 +msgid "" +"Required for full functionality of the pure NAT mode of NAT Reflection for " +"port forwards or NAT Reflection for 1:1 NAT." +msgstr "" + +#: usr/local/www/system_advanced_firewall.php:452 +#: usr/local/www/system_advanced_firewall.php:514 +msgid "" +"Note: This only works for assigned interfaces. Other interfaces require " +"manually creating the outbound NAT rules that direct the reply packets back " +"through the router." +msgstr "" + +#: usr/local/www/diag_logs_ntpd.php:85 usr/local/www/diag_logs_ntpd.php:86 +#: usr/local/www/diag_logs_ntpd.php:86 +#, php-format +msgid "Last %s NTP log entries" +msgstr "Son %s NTP günlük girdileri" + +#: usr/local/www/firewall_aliases_edit.php:468 +#: usr/local/www/firewall_aliases_edit.php:470 +#: usr/local/www/firewall_aliases_edit.php:470 +msgid "" +"Enter as many hosts as you would like. Hosts must be specified by their IP " +"address or fully qualified domain name (FQDN). FQDN hostnames are " +"periodically re-resolved and updated. If multiple IPs are returned by a DNS " +"query, all are used." +msgstr "" +"Birden fazla host girebilirsiniz. Hostlar IP adresi yada tam donanımlı " +"domian adı (FQDN) olmalıdır. (FQDN) host isimleri periyodik olarak " +"çözümlenmiş ve güncel olmalıdır. Eğer birden fazla IP DNS sorgusundan geri " +"dönüyorsa, tamamı kullanılmalıdır." + +#: usr/local/www/firewall_aliases_edit.php:590 +#: usr/local/www/firewall_aliases_edit.php:593 +#: usr/local/www/firewall_aliases_edit.php:593 +msgid "" +"The name of the alias may only consist of the characters \"a-z, A-Z, 0-9 and " +"_\"." +msgstr "Grup adı \"a-z, A-Z, 0-9 ve _\" karakterleri içerebilir." + +#: usr/local/www/system_advanced_admin.php:470 +#: usr/local/www/system_advanced_admin.php:470 +msgid "Disable password login for Secure Shell (RSA/DSA key only)" +msgstr "" + +#: usr/local/www/pkg_mgr_installed.php:113 usr/local/www/diag_confbak.php:154 +#: usr/local/www/pkg_mgr_installed.php:113 usr/local/www/diag_confbak.php:154 +msgid "Version" +msgstr "Sürüm" + +#: usr/local/www/pkg_mgr_installed.php:197 +#: usr/local/www/pkg_mgr_installed.php:197 +msgid "Click on " +msgstr "Tıklayın " + +#: usr/local/www/pkg_mgr_installed.php:205 +#: usr/local/www/pkg_mgr_installed.php:208 +#: usr/local/www/pkg_mgr_installed.php:208 +msgid "Remove " +msgstr "Sil " + +#: usr/local/www/pkg_mgr_installed.php:209 +#: usr/local/www/pkg_mgr_installed.php:212 +#: usr/local/www/pkg_mgr_installed.php:215 +#: usr/local/www/pkg_mgr_installed.php:212 +#: usr/local/www/pkg_mgr_installed.php:215 +msgid "Reinstall " +msgstr "Tekrar kur " + +#: usr/local/www/system_advanced_notifications.php:262 +#: usr/local/www/system_advanced_notifications.php:262 +msgid "System Sounds" +msgstr "Sistem Sesleri" + +#: usr/local/www/system_advanced_notifications.php:265 +#: usr/local/www/system_advanced_notifications.php:265 +msgid "Startup/Shutdown Sound" +msgstr "Başlangıç/Kapanış Sesi" + +#: usr/local/www/system_advanced_notifications.php:268 +#: usr/local/www/system_advanced_notifications.php:268 +msgid "Disable the startup/shutdown beep" +msgstr "Başlangıç/Kapanış sesini kapat" + +#: usr/local/www/system_advanced_notifications.php:270 +#: usr/local/www/system_advanced_notifications.php:270 +msgid "When this is checked, startup and shutdown sounds will no longer play." +msgstr "İşaretlendiğinde, başlangıç ve kapanış sesleri çalmayacak." + +#: usr/local/www/status_rrd_graph.php:146 +#: usr/local/www/status_rrd_graph.php:151 +msgid "Invalid start date/time:" +msgstr "Geçersiz başlat tarih/saat:" + +#: usr/local/www/status_rrd_graph.php:159 +#: usr/local/www/status_rrd_graph.php:164 +msgid "Invalid end date/time:" +msgstr "Geçersiz bitiş tarih/saat:" + +#: usr/local/www/status_rrd_graph.php:509 +#: usr/local/www/status_rrd_graph.php:544 +msgid "Enter date and/or time. Current timezone:" +msgstr "Şimdiki zamandilimi nin tarih ve/veya saatini giriniz:" + +#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:125 +#: usr/local/www/status_ntpd.php:125 +msgid "Ref ID" +msgstr "Referans Kimliği" + +#: usr/local/www/status_ntpd.php:110 usr/local/www/status_ntpd.php:126 +#: usr/local/www/status_ntpd.php:126 +msgid "Stratum" +msgstr "Katman" + +#: usr/local/www/status_ntpd.php:112 usr/local/www/status_ntpd.php:128 +#: usr/local/www/status_ntpd.php:128 +msgid "When" +msgstr "Ne zaman" + +#: usr/local/www/status_ntpd.php:113 usr/local/www/status_ntpd.php:129 +#: usr/local/www/status_ntpd.php:129 +msgid "Poll" +msgstr "Havuz" + +#: usr/local/www/status_ntpd.php:114 usr/local/www/status_ntpd.php:130 +#: usr/local/www/status_ntpd.php:130 +msgid "Reach" +msgstr "Erişim" + +#: usr/local/www/status_ntpd.php:116 usr/local/www/status_ntpd.php:132 +#: usr/local/www/status_ntpd.php:132 +msgid "Offset" +msgstr "Dengeli" + +#: usr/local/www/status_ntpd.php:117 usr/local/www/status_ntpd.php:133 +#: usr/local/www/status_ntpd.php:133 +msgid "Jitter" +msgstr "" + +#: usr/local/www/firewall_rules.php:790 usr/local/www/firewall_rules.php:783 +#: usr/local/www/firewall_rules.php:783 +msgid "No floating rules are currently defined." +msgstr "Geçerli olarak tanımlanmış değişen kurallar yok." + +#: usr/local/www/system_advanced_misc.php:297 +#: usr/local/www/system_advanced_misc.php:316 +#: usr/local/www/system_advanced_misc.php:320 +msgid "" +"Successive connections will be redirected to the servers in a round-robin " +"manner with connections from the same source being sent to the same web " +"server. This 'sticky connection' will exist as long as there are states that " +"refer to this connection. Once the states expire, so will the sticky " +"connection. Further connections from that host will be redirected to the " +"next web server in the round robin. Changing this option will restart the " +"Load Balancing service." +msgstr "" +"Ardışık bağlantılar sunuculara dairesel bir mantıkla yönlendirilir, bir " +"kaynaktan gelen bağlantılar hep aynı sunucuya gönderilir. Bu 'kalıcı " +"bağlantı', bu bağlantıya atıfta bulunan durumlar olduğu sürece canlı kalır. " +"Durumların süresi dolduğunda, kalıcı bağlantının da süresi dolmuş olur. O " +"istemciden gelen sonraki bağlantı istekleri dairesel dağıtılır. Bu ayarların " +"değiştirilmesi Yük Dengeleyici servisini yeniden başlatacaktır." + +#: usr/local/www/system_advanced_misc.php:308 +#: usr/local/www/system_advanced_misc.php:327 +#: usr/local/www/system_advanced_misc.php:331 +msgid "" +"Set the source tracking timeout for sticky connections. By default this is " +"0, so source tracking is removed as soon as the state expires. Setting this " +"timeout higher will cause the source/destination relationship to persist for " +"longer periods of time." +msgstr "" + +#: usr/local/www/system_advanced_misc.php:336 +#: usr/local/www/system_advanced_misc.php:355 +#: usr/local/www/system_advanced_misc.php:359 +#: usr/local/www/system_advanced_misc.php:367 +msgid "Hiadaptive" +msgstr "Hidengeli" + +#: usr/local/www/system_advanced_misc.php:337 +#: usr/local/www/system_advanced_misc.php:356 +#: usr/local/www/system_advanced_misc.php:360 +#: usr/local/www/system_advanced_misc.php:368 +msgid "Adaptive" +msgstr "Dengeli" + +#: usr/local/www/system_advanced_misc.php:338 +#: usr/local/www/system_advanced_misc.php:357 +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:369 +#, fuzzy +msgid "Minimum" +msgstr "Minimum" + +#: usr/local/www/system_advanced_misc.php:339 +#: usr/local/www/system_advanced_misc.php:358 +#: usr/local/www/system_advanced_misc.php:362 +#: usr/local/www/system_advanced_misc.php:370 +msgid "Maximum" +msgstr "Maksimum" + +#: usr/local/www/system_advanced_misc.php:342 +#: usr/local/www/system_advanced_misc.php:361 +#: usr/local/www/system_advanced_misc.php:373 +msgid "" +"The powerd utility monitors the system state and sets various power control " +"options accordingly. It offers four modes (maximum, minimum, adaptive and " +"hiadaptive) that can be individually selected while on AC power or " +"batteries. The modes maximum, minimum, adaptive and hiadaptive may be " +"abbreviated max, min, adp, hadp. Maximum mode chooses the highest " +"performance values. Minimum mode selects the lowest performance values to " +"get the most power savings. Adaptive mode attempts to strike a balance by " +"degrading performance when the system appears idle and increasing it when " +"the system is busy. It offers a good balance between a small performance " +"loss for greatly increased power savings. Hiadaptive mode is alike adaptive " +"mode, but tuned for systems where performance and interactivity are more " +"importantthan power consumption. It rises frequency faster, drops slower " +"andkeeps twice lower CPU load." +msgstr "" +"PowerD aracı sistem durumunu takip eder ve çeşitli güç koruma seçeneklerini " +"ona göre ayarlar. AC güçte ve pilde çalışma anına göre ayarlanabilen dört " +"çalışma kipi sağlar: (maksimum, minimum, dengeli ve hidengeli.) Maksimum kip " +"en yüksek performans değerlerini seçer. Minimum kip en yüksek güç koruma " +"için en düşük performans değerlerini seçer. Denge kipi ise sistem boşta " +"olduğunda performansı düşürerek ve sistem yoğunluğu arttığında performansı " +"yükselterek bir denge elde etmeye çalışır. hidengeli kipi dengeli kipine " +"benzer fakat hızlıca CPUfreknasını yükseltip iki kat yavaş düşürerek ve " +"bekleterek performans ve etkileşimin güç tüketimine göre daha önemli olduğu " +"sistemler için ayarlanmıştır." + +#: usr/local/www/firewall_shaper_vinterface.php:204 +#: usr/local/www/firewall_shaper_vinterface.php:228 +#: usr/local/www/firewall_shaper_vinterface.php:205 +#: usr/local/www/firewall_shaper_vinterface.php:230 +#: usr/local/www/firewall_shaper_vinterface.php:205 +#: usr/local/www/firewall_shaper_vinterface.php:230 +msgid "You cannot name a child queue with the same name as a parent limiter" +msgstr "" + +#: usr/local/www/diag_routes.php:72 usr/local/www/diag_routes.php:73 +#: usr/local/www/diag_routes.php:73 +msgid "" +"By enabling name resolution, the query should take a bit longer. You can " +"stop it at any time by clicking the Stop button in your browser." +msgstr "" + +#: usr/local/www/status_dhcpv6_leases.php:481 +#: usr/local/www/status_dhcpv6_leases.php:482 +#: usr/local/www/status_dhcpv6_leases.php:485 +msgid "IPv6 Prefix" +msgstr "" + +#: usr/local/www/services_captiveportal.php:465 +#: usr/local/www/services_captiveportal.php:463 +#: usr/local/www/services_captiveportal.php:465 +msgid "" +"This setting limits the number of concurrent connections to the captive " +"portal HTTP(S) server. This does not set how many users can be logged in to " +"the captive portal, but rather how many users can load the portal page or " +"authenticate at the same time! Possible setting allowed is: minimum 4 " +"connections per client IP address, with a total maximum of 100 connections." +msgstr "" +"Bu ayar Hizmet Portalı HTTP(S) sunucusuna aynı anda yapılabilecek bağlantı " +"sayısını sınırlar. Hizmet Portalına oturum açabilecek kullanıcı sayısı " +"değil, aynı anda oturum ekranını görebilecek kullanıcı sayısıdır. Varsayılan " +"bağlantı değeri istemci IP adresi başına 4'tür, toplam en fazla 100'dür." + +#: usr/local/www/services_captiveportal.php:602 +#: usr/local/www/services_captiveportal.php:600 +#: usr/local/www/services_captiveportal.php:601 +msgid "Radius Protocol" +msgstr "Radius Protokol" + +#: usr/local/www/services_captiveportal.php:611 +#: usr/local/www/services_captiveportal.php:609 +#: usr/local/www/services_captiveportal.php:610 +#, fuzzy +msgid "CHAP_MD5" +msgstr "CHAP_MD5" + +#: usr/local/www/services_captiveportal.php:615 +#: usr/local/www/services_captiveportal.php:613 +#: usr/local/www/services_captiveportal.php:614 +#, fuzzy +msgid "MSCHAPv1" +msgstr "MSCHAPv1" + +#: usr/local/www/services_captiveportal.php:619 +#: usr/local/www/services_captiveportal.php:617 +#: usr/local/www/services_captiveportal.php:618 +#, fuzzy +msgid "MSCHAPv2" +msgstr "MSCHAPv2" + +#: usr/local/www/system_gateways_edit.php:389 +#: usr/local/www/system_gateways_edit.php:495 +#: usr/local/www/system_gateways_edit.php:495 +msgid "Choose the Internet Protocol this gateway uses." +msgstr "İnternet Protokolü için kullanılacak ağ geçidi türünü seçiniz." + +#: usr/local/www/system_gateways_edit.php:490 +msgid "" +"This defines how often that an icmp probe will be sent in seconds. Default " +"is 1." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:491 +#: usr/local/www/system_gateways_edit.php:597 +#: usr/local/www/system_gateways_edit.php:601 +msgid "" +"NOTE: The quality graph is averaged over seconds, not intervals, so as the " +"frequency probe is increased the accuracy of the quality graph is decreased." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:500 +msgid "" +"This defines the number of bad probes before the alarm will fire. Default is " +"10." +msgstr "" + +#: usr/local/www/system_gateways_edit.php:505 +msgid "" +"NOTE: The total time before a gateway is down is the product of the " +"Frequency Probe and the Down fields. By default this is 1*10=10 seconds." +msgstr "" + +#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108 +#: usr/local/www/status_gateways.php:134 +#: usr/local/www/widgets/widgets/gateways.widget.php:73 +#: usr/local/www/widgets/widgets/gateways.widget.php:81 +#: usr/local/www/status_gateways.php:101 usr/local/www/status_gateways.php:109 +#: usr/local/www/status_gateways.php:135 +#: usr/local/www/widgets/widgets/gateways.widget.php:94 +#: usr/local/www/widgets/widgets/gateways.widget.php:103 +#: usr/local/www/status_gateways.php:101 usr/local/www/status_gateways.php:109 +#: usr/local/www/status_gateways.php:135 +msgid "Pending" +msgstr "Beklemede" + +#: usr/local/www/status_gateways.php:140 usr/local/www/status_gateways.php:141 +#: usr/local/www/status_gateways.php:141 +msgid "Last check:" +msgstr "Son kontrol:" + +#: usr/local/www/diag_dump_states.php:145 +#: usr/local/www/diag_dump_states.php:144 +#: usr/local/www/diag_dump_states.php:144 +msgid "Current state count" +msgstr "Güncel durum sayımı" + +#: usr/local/www/diag_dump_states.php:147 +#: usr/local/www/diag_dump_states.php:146 +#: usr/local/www/diag_dump_states.php:146 +msgid "Matching filter" +msgstr "Uyuşan filitre" + +#: usr/local/www/diag_dump_states.php:155 +#: usr/local/www/diag_dump_states.php:154 +#: usr/local/www/diag_dump_states.php:154 +msgid "Kill" +msgstr "Sonlandır" + +#: usr/local/www/services_dyndns.php:184 usr/local/www/services_dyndns.php:184 +msgid "" +"You can force an update for an IP address on the edit page for that service." +msgstr "" +"Bu hizmet için düzenleme sayfasında IP adresini güncelleştirmeye " +"zorlayabilirsiniz." + +#: usr/local/www/vpn_openvpn_server.php:299 +#: usr/local/www/vpn_openvpn_server.php:300 +#: usr/local/www/vpn_openvpn_server.php:321 +msgid "" +"Using a tunnel network and server bridge settings together is not allowed." +msgstr "Tünel ağ ve sunucu köprüsü ayarlarını beraber kullanıma izin verilmez." + +#: usr/local/www/vpn_openvpn_server.php:302 +#: usr/local/www/vpn_openvpn_server.php:303 +#: usr/local/www/vpn_openvpn_server.php:324 +msgid "Server Bridge DHCP Start and End must both be empty, or defined." +msgstr "Sunucu Köprüsü DHCP Başlangıç ve Bitişi boş yada tanımlı olmalıdır." + +#: usr/local/www/vpn_openvpn_server.php:304 +#: usr/local/www/vpn_openvpn_server.php:305 +#: usr/local/www/vpn_openvpn_server.php:326 +msgid "Server Bridge DHCP Start must be an IPv4 address." +msgstr "Sunucu Köprüsü DHCP Başlangıcı IPv4 adresi olmalıdır." + +#: usr/local/www/vpn_openvpn_server.php:306 +#: usr/local/www/vpn_openvpn_server.php:307 +#: usr/local/www/vpn_openvpn_server.php:328 +msgid "Server Bridge DHCP End must be an IPv4 address." +msgstr "Sunucu Köprüsü DHCP Bitişi IPv4 adresi olmalıdır." + +#: usr/local/www/vpn_openvpn_server.php:308 +#: usr/local/www/vpn_openvpn_server.php:309 +#: usr/local/www/vpn_openvpn_server.php:330 +msgid "The Server Bridge DHCP range is invalid (start higher than end)." +msgstr "" +"Sunucu Köprüsü DHCP aralığı geçersiz (Başlangıcı bitişinden daha yüksek)." + +#: usr/local/www/vpn_openvpn_server.php:1084 +#: usr/local/www/vpn_openvpn_server.php:1112 +#: usr/local/www/vpn_openvpn_server.php:1139 +msgid "Bridge DHCP" +msgstr "Köprü DHCP" + +#: usr/local/www/vpn_openvpn_server.php:1094 +#: usr/local/www/vpn_openvpn_server.php:1122 +#: usr/local/www/vpn_openvpn_server.php:1149 +msgid "Allow clients on the bridge to obtain DHCP." +msgstr "Köprüdeki istemcilerin DHCP den yararlanmasına izin ver." + +#: usr/local/www/vpn_openvpn_server.php:1102 +#: usr/local/www/vpn_openvpn_server.php:1130 +#: usr/local/www/vpn_openvpn_server.php:1157 +msgid "Bridge Interface" +msgstr "Köprü Arabirim" + +#: usr/local/www/vpn_openvpn_server.php:1124 +msgid "" +"The interface to which this tap instance will be, bridged. This is not done " +"automatically. You must assign this interface and create the bridge " +"separately. This setting controls which existing IP address and subnet mask " +"are used by OpenVPN for the bridge. Setting this to 'none' will cause the " +"Server Bridge DHCP settings below to be ignored." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1133 +#: usr/local/www/vpn_openvpn_server.php:1161 +#: usr/local/www/vpn_openvpn_server.php:1188 +msgid "Server Bridge DHCP Start" +msgstr "Sunucu Köprüsü DHCP Başlangıcı" + +#: usr/local/www/vpn_openvpn_server.php:1137 +msgid "" +"When using tap mode as multi-point server, you may optionally supply a DHCP " +"range to use on the interface to which this tap instance is bridged. If " +"these settings are left blank, DHCP will be passed through to the LAN, and " +"the interface setting above will be ignored." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1146 +#: usr/local/www/vpn_openvpn_server.php:1174 +#: usr/local/www/vpn_openvpn_server.php:1201 +msgid "Server Bridge DHCP End" +msgstr "Sunucu Köprüsü DHCP Bitişi" + +#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcpv6.php:216 +#: usr/local/www/services_router_advertisements.php:159 +#: usr/local/www/services_dhcp.php:285 usr/local/www/services_dhcpv6.php:201 +#: usr/local/www/services_router_advertisements.php:159 +#: usr/local/www/services_dhcp_edit.php:230 +#: usr/local/www/services_dhcp.php:266 usr/local/www/services_dhcpv6.php:195 +msgid "A valid domain search list must be specified." +msgstr "Geçerli bir domain (alan adı) listesi belirtilmelidir." + +#: usr/local/www/services_dhcp.php:685 usr/local/www/services_dhcp.php:861 +#: usr/local/www/services_dhcp_edit.php:427 +#: usr/local/www/services_dhcp.php:875 +msgid "" +"The DHCP server can optionally provide a domain search list. Use the " +"semicolon character as seperator " +msgstr "" +"DHCP sunucu isteğe bağlı olarak bir alan adı arama listesi de verebilir. " +"Ayırıcı olarak noktalı virgül karakterini kullanın " + +#: usr/local/www/services_dhcp.php:735 usr/local/www/services_dhcpv6.php:716 +#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:647 +#: usr/local/www/services_dhcp.php:930 usr/local/www/services_dhcpv6.php:664 +msgid "Time format change" +msgstr "Saat biçimi değiştir" + +#: usr/local/www/services_dhcp.php:744 usr/local/www/services_dhcp.php:925 +#: usr/local/www/services_dhcp.php:939 +msgid "Change DHCP display lease time from UTC to local time." +msgstr "DHCP izleme kira saatini UTC den yerel saate değiştir." + +#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:932 +msgid "" +"By default DHCP leases are displayed in UTC time. By checking this \n" +"\t\t\t\t\t\tbox DHCP lease time will be displayed in local time and set to " +"time zone selected. This will be used for all DHCP interfaces lease time." +msgstr "" +"Varsayılan olarak DHCP kiraları UTC saati olarak görüntülenir. Bu kutucuğu \n" +"\t\t\t\t\t\ttıkklayarak DHCP kira saati yerel saat olarak görüntülenir ve seçilen " +"zaman dilimine ayarlanır. Bu tüm DHCP arabirimleri kira saatlerinde " +"kullanılır." + +#: usr/local/www/load_balancer_virtual_server_edit.php:92 +#: usr/local/www/load_balancer_virtual_server_edit.php:92 +msgid "" +"The port must be an integer between 1 and 65535, a port alias, or left blank." +msgstr "" +"Port 1 ile 65535 arasında bir tamsayı yada grup (alias) portu olmalıdır yada " +"boş bırakılmalıdır." + +#: usr/local/www/load_balancer_virtual_server_edit.php:95 +#: usr/local/www/load_balancer_virtual_server_edit.php:95 +#, php-format +msgid "%s is not a valid IP address, IPv4 subnet, or alias." +msgstr "%s geçerli bir IP adresi, IPv4 altağ yada grup (alias) değil." + +#: usr/local/www/load_balancer_virtual_server_edit.php:97 +#: usr/local/www/load_balancer_virtual_server_edit.php:97 +#, php-format +msgid "%s is a subnet containing more than 64 IP addresses." +msgstr "%s altağı 64 ten daha fazla IP adresleri içeriyor." + +#: usr/local/www/load_balancer_virtual_server_edit.php:173 +#: usr/local/www/load_balancer_virtual_server_edit.php:171 +#: usr/local/www/load_balancer_virtual_server_edit.php:171 +msgid "" +"You may also specify a host alias listed in Firewall -> Aliases here." +msgstr "" +"Güvenlik Duvarı -> Gruplar kısmında belirtilmiş listelenen host Grup ları " +"belirtebilirsiniz." + +#: usr/local/www/load_balancer_virtual_server_edit.php:187 +#: usr/local/www/load_balancer_virtual_server_edit.php:185 +#: usr/local/www/load_balancer_virtual_server_edit.php:185 +msgid "If left blank, listening ports from the pool will be used." +msgstr "Eğer boş bırakırsanız, dinlenen portlar havuzdan kullanılır." + +#: usr/local/www/load_balancer_virtual_server_edit.php:188 +#: usr/local/www/load_balancer_pool_edit.php:216 +#: usr/local/www/load_balancer_virtual_server_edit.php:186 +#: usr/local/www/load_balancer_pool_edit.php:214 +#: usr/local/www/load_balancer_virtual_server_edit.php:186 +#: usr/local/www/load_balancer_pool_edit.php:214 +msgid "" +"You may also specify a port alias listed in Firewall -> Aliases here." +msgstr "" +"Güvenlik Duvarı -> Gruplar kısmında belirtilmiş listelenen port Grup ları " +"belirtebilirsiniz." + +#: usr/local/www/system_hasync.php:96 usr/local/www/system_hasync.php:97 +msgid "High Availability Sync" +msgstr "Yüksek Kullanılırlık senkronizasyonu" + +#: usr/local/www/services_ntpd.php:86 usr/local/www/services_ntpd.php:92 +#: usr/local/www/services_ntpd.php:92 +msgid "NTP Server Configuration" +msgstr "NTP Sunucu Yapılandırması" + +#: usr/local/www/interfaces_bridge_edit.php:391 +#: usr/local/www/interfaces_bridge_edit.php:392 +#: usr/local/www/interfaces_bridge_edit.php:393 +msgid "" +"Set the Spanning Tree priority of interface to value. The default is 128. " +"The minimum is 0 and the maximum is 240. Increments of 16." +msgstr "" + +#: usr/local/www/diag_packet_capture.php:172 +#: usr/local/www/diag_packet_capture.php:219 +#: usr/local/www/diag_packet_capture.php:219 +msgid "Select the protocol to capture, or Any." +msgstr "Yakalamak için protokol seçin veya tümünü." + +#: usr/local/www/diag_packet_capture.php:245 +#: usr/local/www/diag_packet_capture.php:292 +#: usr/local/www/diag_packet_capture.php:292 +msgid "View Capture" +msgstr "Yakalananı Gör" + +#: usr/local/www/system_camanager.php:420 +#: usr/local/www/system_camanager.php:427 +msgid "Serial for next certificate" +msgstr "Sonraki sertifika için seri numarası" + +#: usr/local/www/system_camanager.php:423 +#: usr/local/www/system_camanager.php:430 +msgid "" +"Enter a decimal number to be used as the serial number for the next " +"certificate to be created using this CA." +msgstr "" +"Sonraki oluşturulacak sertifika için numaralardan oluşan bir seri numarası " +"giriniz, bu oluşturulan CA'da kullanılacak." + +#: usr/local/www/vpn_ipsec_phase2.php:140 +#: usr/local/www/vpn_ipsec_phase2.php:141 +#: usr/local/www/vpn_ipsec_phase2.php:163 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +msgid "Invalid Local Network." +msgstr "Geçersiz Yerel Ağ." + +#: usr/local/www/vpn_ipsec_phase2.php:140 +#: usr/local/www/vpn_ipsec_phase2.php:141 +#: usr/local/www/vpn_ipsec_phase2.php:163 +#: usr/local/www/vpn_ipsec_phase2.php:145 +#: usr/local/www/vpn_ipsec_phase2.php:171 +msgid "has no subnet." +msgstr "altağ değil." + +#: usr/local/www/firewall_nat_edit.php:233 +#: usr/local/www/firewall_nat_edit.php:238 +#, php-format +msgid "" +"A valid local port must be specified. It must be a port alias or integer " +"between 1 and 65535." +msgstr "" +"Geçerli bir gerel port belirtilmelidir. Bir port grubu ya da 1 ile 65535 " +"arası bir tamsayı olmalıdır." + +#: usr/local/www/firewall_nat_edit.php:793 +#: usr/local/www/firewall_nat_edit.php:792 +#: usr/local/www/firewall_nat_edit.php:787 +msgid "Use system default" +msgstr "Sistem varsayılanını kullan" + +#: usr/local/www/interfaces.php:463 usr/local/www/interfaces.php:460 +#: usr/local/www/interfaces.php:448 +msgid "" +"This interface is referenced by IPv4 VIPs. Please delete those before " +"setting the interface to 'none' configuration." +msgstr "" +"Bu arabirim IPv4 VIP(lere) tarafından referans edildi. Lütfen arabirim 'hiç' " +"('none') yapılandırmasını ayarlamadan önce bunları silin." + +#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:513 +#: usr/local/www/interfaces.php:501 +msgid "" +"This interface is referenced by IPv6 VIPs. Please delete those before " +"setting the interface to 'none' configuration." +msgstr "" +"Bu arabirim IPv6 VIP(lere) tarafından referans edildi. Lütfen arabirim 'hiç' " +"('none') yapılandırmasını ayarlamadan önce bunları silin." + +#: usr/local/www/interfaces.php:526 usr/local/www/interfaces.php:523 +#: usr/local/www/interfaces.php:511 +#, php-format +msgid "You can only have one interface configured as %s or 6to4." +msgstr "Yapılandırabileceğiniz arabirim sadece bir tane %s yada 6 dan 4'e." + +#: usr/local/www/interfaces.php:536 usr/local/www/interfaces.php:533 +#: usr/local/www/interfaces.php:521 +#, php-format +msgid "You can only have one interface configured as %s or 6rd." +msgstr "Yapılandırabileceğiniz arabirim sadece bir tane %s yada 6'ıncı." + +#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:546 +#: usr/local/www/interfaces.php:534 +msgid "You must enter a valid hexadecimal number for the IPv6 prefix ID." +msgstr "IPv6 ön-eki kimliği için geçerli bir ondalık numara girmelisiniz." + +#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:550 +#: usr/local/www/interfaces.php:538 +msgid "You specified an IPv6 prefix ID that is out of range." +msgstr "Belirttiğiniz IPv6 ön-eki kimliği aralık dışında." + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 +#, fuzzy +msgid "SLAAC" +msgstr "SLAAC" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 +msgid "6rd Tunnel" +msgstr "6'ıncı Tünel" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 +msgid "6to4 Tunnel" +msgstr "6 dan 4'e Tünel" + +#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107 +#: usr/local/www/interfaces.php:1121 +msgid "Track Interface" +msgstr "Arabirim İzi" + +#: usr/local/www/interfaces.php:1411 usr/local/www/interfaces.php:1399 +#: usr/local/www/interfaces.php:1412 +msgid "" +"If you leave this field blank, the adapter's default MTU will be used. This " +"is typically 1500 bytes but can vary in some circumstances." +msgstr "" +"Bu alanı boş bırakırsanız, ağ kartının varsayılan MTU değeri kullanılır. " +"Varsayılan değer bir çok durumda bu 1500 bayttır." + +#: usr/local/www/interfaces.php:1768 usr/local/www/interfaces.php:1756 +#: usr/local/www/interfaces.php:1774 +msgid "6RD Rapid Deployment" +msgstr "6'ıncı Hızlı Dağıtım" + +#: usr/local/www/interfaces.php:1771 usr/local/www/interfaces.php:1759 +#: usr/local/www/interfaces.php:1777 +msgid "6RD prefix" +msgstr "6'ıncı ön-ek" + +#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1763 +#: usr/local/www/interfaces.php:1781 +msgid "" +"The value in this field is the 6RD IPv6 prefix assigned by your ISP. e.g. " +"'2001:db8::/32'" +msgstr "" +"Bu alandaki değer 6'ıncı IPv6 ön-eki sizin ISP'niz tarafından sağlanır. örn. " +"'2001:db8::/32'" + +#: usr/local/www/interfaces.php:1779 usr/local/www/interfaces.php:1767 +#: usr/local/www/interfaces.php:1785 +msgid "6RD Border Relay" +msgstr "6'ıncı Sınır Aktarma" + +#: usr/local/www/interfaces.php:1783 usr/local/www/interfaces.php:1771 +#: usr/local/www/interfaces.php:1789 +msgid "" +"The value in this field is 6RD IPv4 gateway address assigned by your ISP" +msgstr "" +"Bu alandaki değer 6'ıncı IPv4 ağ geçidi sizin ISP'niz tarafından sağlanır." + +#: usr/local/www/interfaces.php:1787 usr/local/www/interfaces.php:1775 +#: usr/local/www/interfaces.php:1793 +msgid "6RD IPv4 Prefix length" +msgstr "6'ıncı Ipv4 ön-ek uzunluğu" + +#: usr/local/www/interfaces.php:1799 usr/local/www/interfaces.php:1787 +#: usr/local/www/interfaces.php:1805 +msgid "" +"The value in this field is the 6RD IPv4 prefix length. Normally specified by " +"the ISP. A value of 0 means we embed the entire IPv4 address in the 6RD " +"prefix." +msgstr "" +"Bu alandaki değer 6'ıncı IPv4 ön-ek uzunluğudur. Normalde ISP tarafından " +"belirlenir. Değer 0 ise tüm IPv4 adresini 6'ıncı ön-ek'e gömmüşüz anlamına " +"gelir." + +#: usr/local/www/interfaces.php:1809 usr/local/www/interfaces.php:1797 +#: usr/local/www/interfaces.php:1818 +msgid "Track IPv6 Interface" +msgstr "IPv6 Arabirim İzi" + +#: usr/local/www/interfaces.php:1812 usr/local/www/interfaces.php:1800 +#: usr/local/www/interfaces.php:1821 +msgid "IPv6 Interface" +msgstr "IPv6 Arabirimi" + +#: usr/local/www/interfaces.php:1838 usr/local/www/interfaces.php:1826 +#: usr/local/www/interfaces.php:1847 +msgid "This selects the dynamic IPv6 WAN interface to track for configuration" +msgstr "Bu dinamik IPv6 WAN arabirimini yapılandırma izi için seçer" + +#: usr/local/www/interfaces.php:1842 usr/local/www/interfaces.php:1830 +#: usr/local/www/interfaces.php:1851 +msgid "IPv6 Prefix ID" +msgstr "IPv6 Ön-ek kimliği" + +#: usr/local/www/interfaces.php:1853 usr/local/www/interfaces.php:1841 +#: usr/local/www/interfaces.php:1862 +msgid "" +"The value in this field is the (Delegated) IPv6 prefix id. This determines " +"the configurable network ID based on the dynamic IPv6 connection" +msgstr "" +"Bu alandaki değer (yetkilendirimiş) IPv6 ön-ek kimliğidir. Bu dinamik IPv6 " +"bağlantısına dayalı yapılandırılabilir bir ağ kimliği belirler" + +#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1843 +#: usr/local/www/interfaces.php:1864 +#, php-format +msgid "" +"Enter a hexadecimal value between %x and %x here, or leave blank." +msgstr "" +"Buraya onaltılıkondalık bir değer aralığında %x ve %x buraya girin, " +"yada boş bırakın." + +#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2344 +#: usr/local/www/interfaces.php:2374 +msgid "" +"Note: Only required in Access Point mode. If left blank in Ad-hoc or " +"Infrastructure mode, this interface will connect to any available SSID" +msgstr "" +"Not: Sadece Access Point (Erişim Noktası) kipinde gerekir. Adhoc (eşler " +"arası) yada Infrastructure (Altyapı BSS) kipinde boş bırakılırsa arabirim " +"sadece mevcut olan SSID ye bağlanır" + +#: usr/local/www/interfaces.php:2576 usr/local/www/interfaces.php:2564 +#: usr/local/www/interfaces.php:2594 +msgid "Secondary 802.1X Authentication Server IP Address" +msgstr "İkincil 802.1X Kimlik Doğrulama Suncusu IP Adresi" + +#: usr/local/www/interfaces.php:2583 usr/local/www/interfaces.php:2571 +#: usr/local/www/interfaces.php:2601 +msgid "Secondary 802.1X Authentication Server Port" +msgstr "İkincil 802.1X Kimlik Doğrulama Sunucusu Portu" + +#: usr/local/www/interfaces.php:2590 usr/local/www/interfaces.php:2578 +#: usr/local/www/interfaces.php:2608 +msgid "Secondary 802.1X Authentication Server Shared Secret" +msgstr "İkincil 802.1X Kimlik Doğrulama Sunucusu Paylaşımlı Anahtarı" + +#: usr/local/www/vpn_openvpn_client.php:196 +#: usr/local/www/vpn_openvpn_client.php:202 +#: usr/local/www/vpn_openvpn_client.php:220 +msgid "The bandwidth limit must be a positive numeric value." +msgstr "Bant genişliği limiti pozitif bir sayısal değer olmalıdır." + +#: usr/local/www/load_balancer_pool_edit.php:89 +#: usr/local/www/load_balancer_pool_edit.php:89 +msgid "The port must be an integer between 1 and 65535, or a port alias." +msgstr "" +"Port 1 ile 65535 arasında bir tamsayı yada grup (alias) portu olmalıdır." + +#: usr/local/www/load_balancer_pool_edit.php:98 +#: usr/local/www/load_balancer_pool_edit.php:98 +#, php-format +msgid "%s is not a valid IP address or IPv4 subnet (in \"enabled\" list)." +msgstr "" +"%s geçerli bir IP adresi yada IPv4 altağ değil (\"etkin\" listesi içinde)." + +#: usr/local/www/load_balancer_pool_edit.php:101 +#: usr/local/www/load_balancer_pool_edit.php:101 +#, php-format +msgid "" +"%s is a subnet containing more than 64 IP addresses (in \"enabled\" list)." +msgstr "" +"%s altağı 64 ten daha fazla IP adresleri içeriyor (\"etkin\" listesi içinde)." + +#: usr/local/www/load_balancer_pool_edit.php:108 +#: usr/local/www/load_balancer_pool_edit.php:108 +#, php-format +msgid "%s is not a valid IP address or IPv4 subnet (in \"disabled\" list)." +msgstr "" +"%s geçerli bir IP adresi yada IPv4 altağ değil (\"kapalı\" listesi içinde)." + +#: usr/local/www/load_balancer_pool_edit.php:111 +#: usr/local/www/load_balancer_pool_edit.php:111 +#, php-format +msgid "" +"%s is a subnet containing more than 64 IP addresses (in \"disabled\" list)." +msgstr "" +"%s altağı 64 ten daha fazla IP adresleri içeriyor (\"kapalı\" listesi içinde)." + +#: usr/local/www/firewall_virtual_ip_edit.php:153 +#: usr/local/www/firewall_virtual_ip_edit.php:152 +#: usr/local/www/firewall_virtual_ip_edit.php:144 +#, php-format +msgid "" +"VHID %s is already in use on interface %s. Pick a unique number on this " +"interface." +msgstr "" +"VHID %s arabirimde zaten kullanılıyor %s. Bu arabirim için benzersiz bir " +"numara seçiniz." + +#: usr/local/www/services_snmp.php:391 usr/local/www/services_snmp.php:392 +#: usr/local/www/services_snmp.php:407 +msgid "Interface Binding" +msgstr "Arabirim Bağlama" + +#: usr/local/www/services_snmp.php:396 usr/local/www/services_snmp.php:397 +#: usr/local/www/services_snmp.php:412 +msgid "Bind Interface" +msgstr "Arabirim Bağla (Ata)" + +#: usr/local/www/widgets/widgets/smart_status.widget.php:36 +#: usr/local/www/widgets/widgets/smart_status.widget.php:36 +msgid "Drive" +msgstr "Sürücü" + +#: usr/local/www/widgets/widgets/smart_status.widget.php:37 +#: usr/local/www/widgets/widgets/smart_status.widget.php:37 +msgid "Ident" +msgstr "Tanım" + +#: usr/local/www/system.php:418 usr/local/www/system.php:411 +#: usr/local/www/system.php:411 +msgid "Language" +msgstr "Dil" + +#: usr/local/www/system.php:431 usr/local/www/system.php:424 +#: usr/local/www/system.php:424 +msgid "Choose a language for the webConfigurator" +msgstr "webArayüzü için dil seçiniz" + +#: usr/local/www/firewall_virtual_ip.php:118 +#: usr/local/www/firewall_virtual_ip.php:115 +#: usr/local/www/firewall_virtual_ip.php:127 +msgid "" +"This entry cannot be deleted because it is still referenced by a CARP IP " +"with the description" +msgstr "" +"Bu girdi halen açıklama içeren CARP IP ile beraber kullanıldığı için " +"silinemez" + +#: usr/local/www/firewall_virtual_ip.php:124 +#: usr/local/www/firewall_virtual_ip.php:121 +#: usr/local/www/firewall_virtual_ip.php:132 +msgid "" +"This entry cannot be deleted because it is still referenced by an IP alias " +"entry with the description" +msgstr "" +"Bu girdi halen açıklama içeren IP grubu ile beraber kullanıldığı için " +"silinemez" + +#: usr/local/www/services_dhcpv6.php:531 +#: usr/local/www/services_router_advertisements.php:277 +#: usr/local/www/services_router_advertisements.php:277 +#, php-format +msgid "Select the Operating Mode for the Router Advertisement (RA) Daemon." +msgstr "" +"Yönlendirici İlanı (RA Router Advertisement) Servisi için operasyon kipini " +"seçiniz." + +#: usr/local/www/services_dhcpv6.php:532 +#: usr/local/www/services_router_advertisements.php:278 +#: usr/local/www/services_router_advertisements.php:278 +#, php-format +msgid "" +"Use \"Router Only\" to only advertise this router, \"Unmanaged\" for Router " +"Advertising with Stateless Autoconfig, \"Managed\" for assignment through " +"(a) DHCPv6 Server, \"Assisted\" for DHCPv6 Server assignment combined with " +"Stateless Autoconfig" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:533 +#: usr/local/www/services_router_advertisements.php:279 +#: usr/local/www/services_router_advertisements.php:279 +#, php-format +msgid "" +"It is not required to activate this DHCPv6 server when set to \"Managed\", " +"this can be another host on the network" +msgstr "" + +#: usr/local/www/services_dhcpv6.php:537 +#: usr/local/www/services_router_advertisements.php:283 +#: usr/local/www/services_router_advertisements.php:283 +msgid "Router Priority" +msgstr "Yönlendirici Önceliği" + +#: usr/local/www/services_dhcpv6.php:544 +#: usr/local/www/services_router_advertisements.php:290 +#: usr/local/www/services_router_advertisements.php:290 +#, php-format +msgid "Select the Priority for the Router Advertisement (RA) Daemon." +msgstr "Yönlendirici İlanı (RA Router Advertisement) için öncelik seçiniz." + +#: usr/local/www/services_dhcpv6.php:558 +#: usr/local/www/services_router_advertisements.php:304 +#: usr/local/www/services_router_advertisements.php:304 +msgid "RA Interface" +msgstr "Yönlendirici İlanı (RA Router Advertisement) Arabirimi" + +#: usr/local/www/services_dhcpv6.php:566 +#: usr/local/www/services_router_advertisements.php:312 +#: usr/local/www/services_router_advertisements.php:312 +#, php-format +msgid "Select the Interface for the Router Advertisement (RA) Daemon." +msgstr "Yönlendirici İlanı (RA Router Advertisement) için arabirim seçiniz." + +#: usr/local/www/services_dhcpv6.php:653 usr/local/www/services_dhcpv6.php:584 +msgid "prefix delegation size" +msgstr "ön-ek yetkilendirme boyutu" + +#: usr/local/www/services_dhcpv6.php:662 usr/local/www/services_dhcpv6.php:593 +#: usr/local/www/services_dhcpv6.php:610 +msgid "" +"You can define a Prefix range here for DHCP Prefix Delegation. This allows " +"for \n" +"\t\t\t\t\tassigning networks to subrouters. The start and end of the range " +"must end on boundaries of the prefix delegation size." +msgstr "" + +#: usr/local/www/services_dhcpv6.php:685 usr/local/www/services_dhcpv6.php:616 +#: usr/local/www/services_dhcpv6.php:633 +msgid "" +"The DHCP server can optionally provide a domain search list. Use the " +"semicolon character as seperator" +msgstr "" +"DHCP sunucu isteğe bağlı olarak bir alan adı arama listesi de verebilir. " +"Ayırıcı olarak noktalı virgül karakterini kullanın" + +#: usr/local/www/services_dhcpv6.php:725 usr/local/www/services_dhcpv6.php:656 +#: usr/local/www/services_dhcpv6.php:673 +msgid "Change DHCPv6 display lease time from UTC to local time." +msgstr "DHCPv6 izleme kira saatini UTC den yerel saate değiştir." + +#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:663 +#: usr/local/www/services_dhcpv6.php:680 +msgid "" +"By default DHCPv6 leases are displayed in UTC time. By checking this \n" +"\t\t\t\t\t\tbox DHCPv6 lease time will be displayed in local time and set to " +"time zone selected. This will be used for all DHCPv6 interfaces lease time." +msgstr "" + +#: etc/inc/priv.defs.inc:64 etc/inc/priv.defs.inc:64 +msgid "WebCfg - Diagnostics: Sockets page" +msgstr "WebCfg - Araçlar: Soketler sayfası" + +#: etc/inc/priv.defs.inc:65 etc/inc/priv.defs.inc:65 +msgid "Allow access to the 'Diagnostics: Sockets' page." +msgstr "'Araçlar: Soketler' sayfasına erişim izni verir." + +#: etc/inc/config.console.inc:263 etc/inc/config.console.inc:263 +#, php-format +msgid "" +"%sEnter the Optional %s interface name or 'a' for auto-detection%s(or " +"nothing if finished):%s" +msgstr "" +"%sİsteğe bağlı%s arabirim adını girin yada otomatik algılama için 'a' ya " +"basın%s(yada tamamlandıysa hiçbirşey yapmayın):%s" + +#: etc/inc/shaper.inc:2909 etc/inc/shaper.inc:2910 +#, php-format +msgid "Bandwidth for schedule %s must be an integer." +msgstr "Zamanlama için bant genişliği %s tam sayı olmalıdır." + +#: etc/inc/shaper.inc:2915 etc/inc/shaper.inc:2916 +msgid "You need to specify a schedule for every additional entry" +msgstr "Her ek giriş için zamanlama belirtmeniz gerekir" + +#: etc/inc/shaper.inc:2917 etc/inc/shaper.inc:2918 +msgid "If more than one bandwidth configured all schedules need to be selected" +msgstr "" +"Eğer birden fazla bant genişliği yapılandırıldıysa tüm zamanlamaların " +"seçilmesi gerekir" + +#: etc/inc/shaper.inc:2919 etc/inc/shaper.inc:2920 +msgid "At least one bw specification is necessary" +msgstr "En az bir bw şartnamesi gereklidir" + +#: etc/inc/shaper.inc:3200 etc/inc/shaper.inc:3201 +msgid "add another schedule" +msgstr "başka bir zamanlama ekle" + +#: etc/inc/functions.inc:94 etc/inc/functions.inc:94 +msgid "Acknowledge All Notices" +msgstr "Tüm Bildirimleri Onaylayın" + +#: etc/inc/functions.inc:95 etc/inc/functions.inc:95 +msgid "Click to Acknowledge" +msgstr "Onaylamak için tıklayın" + +#: etc/inc/functions.inc:113 etc/inc/functions.inc:113 +msgid "unread notice" +msgstr "okunmamış bildirim" + +#: etc/inc/functions.inc:115 etc/inc/functions.inc:115 +msgid "unread notices" +msgstr "okunmamış bildirimler" + +#: etc/inc/service-utils.inc:234 etc/inc/service-utils.inc:233 +msgid "Router Advertisement Daemon" +msgstr "Yönlendirici İlan Servisi" + +#: etc/inc/service-utils.inc:313 etc/inc/service-utils.inc:312 +msgid "RIP Daemon" +msgstr "RIP Servisi" + +#: etc/inc/service-utils.inc:413 etc/inc/service-utils.inc:422 +#: etc/inc/service-utils.inc:412 etc/inc/service-utils.inc:421 +#, php-format +msgid "%s Service is" +msgstr "%s Servisi" + +#: etc/inc/service-utils.inc:447 etc/inc/service-utils.inc:446 +#, php-format +msgid "Restart %sService" +msgstr "%s Servisini Yeniden Başlat" + +#: etc/inc/service-utils.inc:458 etc/inc/service-utils.inc:457 +#, php-format +msgid "Stop %sService" +msgstr "%s Servisini Durdur" + +#: etc/inc/service-utils.inc:471 etc/inc/service-utils.inc:470 +#, php-format +msgid "Start %sService" +msgstr "%s Servisini Başlat" + +#: etc/inc/filter.inc:2993 etc/inc/filter.inc:3079 +msgid "Removed 15 minute filter reload for Time Based Rules" +msgstr "" +"Zaman Tabanlı Kurallar için kaldırılan filitre yeniden yüklemesi 15 " +"dakıkadır" + +#: usr/local/www/pkg_mgr.php:193 usr/local/www/pkg_mgr.php:193 +msgid "Click on package name to access its website." +msgstr "Paket ismine tıklayarak websitesine erişebilirsiniz." + +#: usr/local/www/diag_logs_settings.php:276 +#: usr/local/www/diag_logs_settings.php:276 +msgid "Show the applied rule description below or in the firewall log rows." +msgstr "" +"Uygulanan kural açıklamalarını aşşağıda yada Güvenlik Duvarı kayıt " +"satırlarında görebilirsiniz." + +#: usr/local/www/diag_logs_settings.php:278 +#: usr/local/www/diag_logs_settings.php:278 +msgid "" +"Displaying rule descriptions for all lines in the log might affect " +"performance with large rulessets." +msgstr "" +"Tüm satırlardaki büyük kural ayarlarını ve kural kayıtlarını görüntülemek " +"performansı etkileyebilir." + +#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:144 +msgid "DHCPv6 Server/RA" +msgstr "DHCPv6 Sunucu/RA" + +#: usr/local/www/fbegin.inc:232 usr/local/www/diag_sockets.php:44 +#: usr/local/www/fbegin.inc:224 usr/local/www/diag_sockets.php:44 +msgid "Sockets" +msgstr "Soketler" + +#: usr/local/www/fbegin.inc:419 usr/local/www/fbegin.inc:411 +msgid "Help for items on this page" +msgstr "Bu sayfadakı öğeler için yardım" + +#: usr/local/www/system_groupmanager.php:472 +#: usr/local/www/system_groupmanager.php:472 +msgid "" +"Additional webConfigurator groups can be added here. \n" +"\t\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by " +"users who are members of the group.\n" +"\t\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system " +"defined object.\n" +"\t\t\t\t\t\t\t\t\tSome system object properties can be modified but they " +"cannot be deleted." +msgstr "" +"Buradan ek webArayüzü grupları eklenebilir. \n" +"\t\t\t\t\t\t\t\tGrup üyeleri tarafından miras alınan grup izinleri atanabilir.\n" +"\t\t\t\t\t\t\t\tGri bir simge nesnenin sistem tanımlı olduğu anlamına gelir.\n" +"\t\t\t\t\t\t\t\tBazı sistem nesnesi özellikleri değiştirilebilir ama silinemez." + +# boş bırakınız cümle içinde gereksiz olabilir +#: usr/local/www/services_dnsmasq_edit.php:216 +#: usr/local/www/services_dnsmasq_edit.php:216 +msgid "or" +msgstr " " + +#: usr/local/www/services_dhcpv6_edit.php:204 +#: usr/local/www/services_dhcpv6_edit.php:207 +msgid "If an IPv6 address is entered, the address must be outside of the pool." +msgstr "Eğer IPv6 adresi girlidiyse bı adres havuzun dışında olmalıdır." + +#: usr/local/www/services_dhcpv6_edit.php:206 +#: usr/local/www/services_dhcpv6_edit.php:209 +msgid "" +"If no IPv6 address is given, one will be dynamically allocated from the pool." +msgstr "" +"Eğer verilen bir IPv6 adresi yoksa, biri dinamik olarak havuzdan tahsis " +"edilecek." + +#: usr/local/www/services_router_advertisements.php:118 +#: usr/local/www/services_router_advertisements.php:118 +msgid "" +"Subnets are specified in CIDR format. Select the CIDR mask that pertains to " +"each entry. /128 specifies a single IPv6 host; /64 specifies a normal IPv6 " +"network; etc. If no subnets are specified here, the Router Advertisement " +"(RA) Daemon will advertise to the subnet to which the router's interface is " +"assigned." +msgstr "" +"Altağlar CIDR formatında belirtilmelidir. Her girdi seçilen CIDR maskesi ile " +"ilgilidir. /128 tek bir IPv6 istemciyi belirtir; /64 normal bir IPv6 ağını " +"belirtir; vb. Eğer alt ağlar burada belirtiliyor ise, Yönlendirici İlanı " +"(RA) Servisi hangi arabirim atandıysa altağ için ilan yapar." + +#: usr/local/www/services_router_advertisements.php:149 +#: usr/local/www/services_router_advertisements.php:149 +#, php-format +msgid "An invalid subnet or alias was specified. [%s/%s]" +msgstr "Geçersiz altağ yada grup belirtildi. [%s/%s]" + +#: usr/local/www/services_router_advertisements.php:194 +#: usr/local/www/services_router_advertisements.php:194 +msgid "Router advertisements" +msgstr "Yönlendirici ilanları" + +#: usr/local/www/services_router_advertisements.php:318 +#: usr/local/www/services_router_advertisements.php:318 +msgid "RA Subnet(s)" +msgstr "Yönlendirici ilan (RA outer Advertisement) altağ(ları)" + +#: usr/local/www/services_router_advertisements.php:384 +#: usr/local/www/services_router_advertisements.php:384 +msgid "" +"The RA server can optionally provide a domain search list. Use the semicolon " +"character as seperator" +msgstr "" +"Yönlendirici ilan (RA Router Advertisement) sunucusu isteğe bağlı olarak bir " +"etki alanı arama listesini sağlar. Ayırıcı olarak noktalı virgül işaretini " +"kullanın" + +#: usr/local/www/services_router_advertisements.php:392 +#: usr/local/www/services_router_advertisements.php:392 +msgid "Use same settings as DHCPv6 server" +msgstr "Aynı ayarları DHCPv6 sunucu için kullan" + +#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94 +#: usr/local/www/vpn_ipsec_phase2.php:475 +#: usr/local/www/vpn_ipsec_phase1.php:498 usr/local/www/vpn_ipsec.php:148 +#: usr/local/www/vpn_ipsec_phase1.php:519 usr/local/www/vpn_ipsec_keys.php:94 +#: usr/local/www/vpn_ipsec_phase2.php:497 +msgid "Pre-Shared Keys" +msgstr "Ön Paylaşımlı Anahtarlar" + +#: usr/local/www/system_usermanager_settings_test.php:78 +#: usr/local/www/system_usermanager_settings_test.php:78 +#, php-format +msgid "Testing %s LDAP settings... One moment please..." +msgstr "%s LDAP ayarları test ediliyor... Bir dakika lütfen..." + +#: usr/local/www/vpn_ipsec_mobile.php:149 +#: usr/local/www/vpn_ipsec_mobile.php:149 +msgid "A valid split DNS domain list must be specified." +msgstr "Geçerli bölünmüş DNS domain (alan adı) listesi belirtilmeli." + +#: usr/local/www/vpn_ipsec_mobile.php:505 +#: usr/local/www/vpn_ipsec_mobile.php:505 +msgid "Split DNS" +msgstr "Bölünmüş DNS" + +#: usr/local/www/vpn_ipsec_mobile.php:514 +#: usr/local/www/vpn_ipsec_mobile.php:514 +msgid "" +"Provide a list of split DNS domain names to clients. Enter a comma separated " +"list." +msgstr "" +"DNS domain adı ve istemcilerini bölerek liste oluştur. Virgülle ayrılmış bir " +"liste girin." + +#: usr/local/www/vpn_ipsec_mobile.php:515 +#: usr/local/www/vpn_ipsec_mobile.php:515 +msgid "" +"NOTE: If left blank, and a default domain is set, it will be used for this " +"value." +msgstr "" +"NOT: Eğer boş bırakırsanız, varsayılan domain ayarlı ise, bu değer " +"kullanılır." + +#: usr/local/www/firewall_shaper.php:131 +#: usr/local/www/firewall_shaper_vinterface.php:146 +#: usr/local/www/firewall_shaper.php:131 +#: usr/local/www/firewall_shaper_vinterface.php:146 +msgid "Unable to write config.xml (Access Denied?)" +msgstr "Config.xml dosyasına yazılamadı (Erişim Reddedildi?)" + +#: usr/local/www/firewall_rules_edit.php:455 +#: usr/local/www/firewall_rules_edit.php:458 +msgid "" +"Please select a gateway, normaly the interface selected gateway, so the " +"limiters work correctly" +msgstr "" +"Ağ geçidini seçiniz, normalde arabirim ağ geçidi seçilidir, böylece " +"limitleyiciler düzgün çalışır" + +#: usr/local/www/vpn_ipsec_keys.php:136 usr/local/www/vpn_ipsec_keys.php:136 +msgid "Do you really want to delete this Pre-Shared Key?" +msgstr "Bu Ön Paylaşımlı anahtarı silmek istediğinize emin misiniz?" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:83 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:83 +msgid "A valid domain must be specified after _msdcs." +msgstr "Geçerli bir domain (alan adı) _msdcs den sonra belirtilmelidir." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:93 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:93 +msgid "An interface IP address must be specified for the DNS query source." +msgstr "Arabirim IP adresi DNS sorgu kaynağı için belirtilmelidir." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144 +msgid "Source IP" +msgstr "Kaynak IP" + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:147 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:147 +msgid "" +"Source IP address for queries to the DNS server for the override domain." +msgstr "" +"Domain (alan adı) üzerine yazacak DNS sunucu sorguları için kaynak IP " +"adresi." + +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148 +#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148 +msgid "Leave blank unless your DNS server is accessed through a VPN tunnel." +msgstr "DNS sunucunuz VPN tünel üzerinden erişim yapmadıkça boş bırakın." + +#: usr/local/www/system_crlmanager.php:401 +#: usr/local/www/system_crlmanager.php:401 +msgid "Edit Imported Certificate Revocation List" +msgstr "İçeriye aktarılan Sertifika İptal Listesini düzenle" + +#: usr/local/www/system_advanced_firewall.php:206 +#: usr/local/www/system_advanced_firewall.php:235 +msgid "" +"expires idle connections quicker. More efficient use of CPU and memory but " +"can drop legitimate idle connections" +msgstr "" +"boştaki bağlantıları daha hızlı sonlandır. CPU ve belleğin daha verimli " +"kullanılması için ancak meşru boştaki bağlantıları sonlandırabilirsiniz" + +#: usr/local/www/system_advanced_firewall.php:207 +#: usr/local/www/system_advanced_firewall.php:236 +msgid "" +"tries to avoid dropping any legitimate idle connections at the expense of " +"increased memory usage and CPU utilization." +msgstr "" +"meşru boştaki bağlantıyı sonlandırmak pahasına artan CPU ve bellek " +"kullanımını önlemeye çalışır." + +#: usr/local/www/vpn_pptp.php:297 usr/local/www/vpn_pptp.php:300 +msgid "" +"PPTP is no longer considered a secure VPN technology because it relies upon " +"MS-CHAPv2 which has been compromised. If you continue to use PPTP be aware " +"that intercepted traffic can be decrypted by a third party, so it should be " +"considered unencrypted. We advise migrating to another VPN type such as " +"OpenVPN or IPsec.

    Read More" +msgstr "" + +#: usr/local/www/status_ntpd.php:185 usr/local/www/status_ntpd.php:185 +msgid "Clock Latitude" +msgstr "Saat Enlemi" + +#: usr/local/www/status_ntpd.php:186 usr/local/www/status_ntpd.php:186 +msgid "Clock Longitude" +msgstr "Saat Boylamı" + +#: usr/local/www/system_advanced_misc.php:77 +#: usr/local/www/system_advanced_misc.php:80 +msgid "AMD Geode LX Security Block" +msgstr "AMD Geode LX Güvenlik Engeli" + +#: usr/local/www/system_advanced_misc.php:78 +#: usr/local/www/system_advanced_misc.php:81 +msgid "AES-NI CPU-based Acceleration" +msgstr "AES-NI CPU-based Hızlandırma" + +#: usr/local/www/system_advanced_misc.php:80 +#: usr/local/www/system_advanced_misc.php:83 +msgid "Intel Core* CPU on-die thermal sensor" +msgstr "Intel Core* CPU on-die termal algılayıcı" + +#: usr/local/www/system_advanced_misc.php:81 +#: usr/local/www/system_advanced_misc.php:84 +msgid "AMD K8, K10 and K11 CPU on-die thermal sensor" +msgstr "AMD K8, K10 ve K11 CPU on-die termal algılayıcı" + +#: usr/local/www/system_advanced_misc.php:92 +#: usr/local/www/system_advanced_misc.php:95 +msgid "Please select a valid Cryptographic Accelerator." +msgstr "Geçerli bir Åžifreleme Hızlandırıcı seçiniz." + +#: usr/local/www/system_advanced_misc.php:95 +#: usr/local/www/system_advanced_misc.php:98 +msgid "Please select a valid Thermal Hardware Sensor." +msgstr "Geçerli bir Termal Donanım Algılayıcı seçiniz." + +#: usr/local/www/system_advanced_misc.php:380 +#: usr/local/www/system_advanced_misc.php:392 +msgid "Cryptographic Hardware Acceleration" +msgstr "Donanımsal Åžifreleme Hızlandırıcı" + +#: usr/local/www/system_advanced_misc.php:383 +#: usr/local/www/system_advanced_misc.php:395 +msgid "Cryptographic Hardware" +msgstr "Donanımsal Åžifreleme" + +#: usr/local/www/system_advanced_misc.php:392 +#: usr/local/www/system_advanced_misc.php:404 +msgid "" +"A cryptographic accelerator module will use hardware support to speed up " +"some cryptographic functions on systems which have the chip. Do not enable " +"this option if you have a Hifn cryptographic acceleration card, as this will " +"take precedence and the Hifn card will not be used. Acceleration should be " +"automatic for IPsec when using a cipher supported by your chip, such as " +"AES-128. OpenVPN should be set for AES-128-CBC and have cryptodev enabled " +"for hardware acceleration." +msgstr "" +"Åžifreleme hızlandırcı birimi baÄŸzı hız artışı saÄŸlayan donanımsal ÅŸifreleme " +"iÅŸlevi saÄŸlayacak çip e sahip sistemlerde kullanılır. EÄŸer Hifn ÅŸifreleme " +"hızlandırıcı kart a sahipseniz bu seçeneÄŸi etkinleÅŸtirmeyin, bu öncelik alır " +"ve Hifn kart kullanılmaz. Hızlandırma IPsec'in kullanacaÄŸi çip otomatik " +"olmalı, örneÄŸin AES-128 desteÄŸine sahip bir çipe sahip olmalısınız. OpenVPN " +"AES-128-CBC ye ayarlanmalı ve donanımsal hızlandırma da cryptodev seçeneÄŸi " +"etkinleÅŸtirilmelidir." + +#: usr/local/www/system_advanced_misc.php:400 +#: usr/local/www/system_advanced_misc.php:412 +msgid "" +"If you do not have a crypto chip in your system, this option will have no " +"effect. To unload the selected module, set this option to 'none' and then " +"reboot." +msgstr "" +"EÄŸer sisteminizde ÅŸifreleme çipi yoksa, bu seçenek etkisiz olacak. " +"SeçtiÄŸiniz birimi kaldırın ve seçeneÄŸi 'yok (none)' ye ayarlayıp yeniden " +"baÅŸlatın." + +#: usr/local/www/system_advanced_misc.php:408 +#: usr/local/www/system_advanced_misc.php:411 +#: usr/local/www/system_advanced_misc.php:420 +#: usr/local/www/system_advanced_misc.php:423 +msgid "Thermal Sensors" +msgstr "Termal Algılayıcılar" + +#: usr/local/www/system_advanced_misc.php:414 +#: usr/local/www/system_advanced_misc.php:426 +msgid "None/ACPI" +msgstr "Yok (None)/ACPI" + +#: usr/local/www/system_advanced_misc.php:420 +#: usr/local/www/system_advanced_misc.php:432 +msgid "" +"If you have a supported CPU, selecting a themal sensor will load the " +"appropriate driver to read its temperature. Setting this to 'None' will " +"attempt to read the temperature from an ACPI-compliant motherboard sensor " +"instead, if one is present." +msgstr "" +"EÄŸer desteklenen bir CPU ya sahipseniz, seçilen termal algılayıcı sıcaklığı " +"okumak için uygun sürücüyü yükleyecektir. EÄŸer mevcutsa ayar 'yok (none) ise " +"sıcaklığı sensör yerine ACPI-uyumlu anakart tan okumaya çalışacaktır." + +#: usr/local/www/system_advanced_misc.php:424 +#: usr/local/www/system_advanced_misc.php:436 +msgid "" +"If you do not have a supported thermal sensor chip in your system, this " +"option will have no effect. To unload the selected module, set this option " +"to 'none' and then reboot." +msgstr "" +"EÄŸer sisteminizde desteklenen termal algılayıcı çipi yoksa, bu seçenek " +"etkisiz olacak. SeçtiÄŸiniz birimi kaldırın ve seçeneÄŸi 'yok (none)' ye " +"ayarlayıp yeniden baÅŸlatın." + +#: usr/local/www/services_captiveportal.php:173 +#: usr/local/www/services_captiveportal.php:175 +msgid "Certificate must be specified for HTTPS login." +msgstr "HTTPS giriÅŸ için sertifika tanımlanmalıdır." + +#: usr/local/www/services_captiveportal.php:863 +#: usr/local/www/services_captiveportal.php:865 +msgid "" +"If enabled, the username and password will be transmitted over an HTTPS " +"connection to protect against eavesdroppers. A server name and certificate " +"must also be specified below." +msgstr "" +"EtkinleÅŸtirildiÄŸinde kullanıcı adı ve ÅŸifre dinlenmelerini engellemek için " +"HTTPS üzerinden gönderilecektir. Bir sunucu adı ve sertifika aÅŸağıda " +"tanımlanmalıdır." + +#: usr/local/www/services_captiveportal.php:886 +#: usr/local/www/services_captiveportal.php:888 +msgid "No Certificates defined." +msgstr "Tanımlı sertifika yok." + +#: usr/local/www/system_gateways_edit.php:205 +#: usr/local/www/system_gateways_edit.php:205 +msgid "The low latency threshold needs to be a numeric value." +msgstr "Düşük gecikme eÅŸiÄŸinin sayısal bir deÄŸer olması gerekir." + +#: usr/local/www/system_gateways_edit.php:208 +#: usr/local/www/system_gateways_edit.php:208 +msgid "The low latency threshold needs to be positive." +msgstr "Düşük gecikme eÅŸiÄŸinin pozitif olması gerekir." + +#: usr/local/www/system_gateways_edit.php:215 +#: usr/local/www/system_gateways_edit.php:215 +msgid "The high latency threshold needs to be a numeric value." +msgstr "Yüksek gecikme eÅŸiÄŸinin sayısal bir deÄŸer olması gerekir." + +#: usr/local/www/system_gateways_edit.php:218 +#: usr/local/www/system_gateways_edit.php:218 +msgid "The high latency threshold needs to be positive." +msgstr "Yüksek gecikme eÅŸiÄŸinin pozitif olması gerekir." + +#: usr/local/www/system_gateways_edit.php:225 +#: usr/local/www/system_gateways_edit.php:225 +msgid "The low Packet Loss threshold needs to be a numeric value." +msgstr "Düşük paket kaybı eÅŸiÄŸinin sayısal bir deÄŸer olması gerekir." + +#: usr/local/www/system_gateways_edit.php:228 +#: usr/local/www/system_gateways_edit.php:228 +msgid "The low Packet Loss threshold needs to be positive." +msgstr "Düşük paket kaybı eÅŸiÄŸinin pozitif olması gerekir." + +#: usr/local/www/system_gateways_edit.php:231 +#: usr/local/www/system_gateways_edit.php:231 +msgid "The low Packet Loss threshold needs to be less than 100." +msgstr "Düşük paket kaybı eÅŸiÄŸinin 100 den daha az olması gerekir." + +#: usr/local/www/system_gateways_edit.php:238 +#: usr/local/www/system_gateways_edit.php:238 +msgid "The high Packet Loss threshold needs to be a numeric value." +msgstr "Yüksek paket kaybı eÅŸiÄŸinin sayısal bir deÄŸer olması gerekir." + +#: usr/local/www/system_gateways_edit.php:241 +#: usr/local/www/system_gateways_edit.php:241 +msgid "The high Packet Loss threshold needs to be positive." +msgstr "Yüksek paket kaybı eÅŸiÄŸinin pozitif olması gerekir." + +#: usr/local/www/system_gateways_edit.php:244 +#: usr/local/www/system_gateways_edit.php:244 +msgid "The high Packet Loss threshold needs to be 100 or less." +msgstr "Yüksek paket kaybı eÅŸiÄŸinin 100 yada daha az olması gerekir." + +#: usr/local/www/system_gateways_edit.php:252 +#: usr/local/www/system_gateways_edit.php:252 +msgid "" +"The high latency threshold needs to be higher than the low latency threshold" +msgstr "" +"Yüksek gecikme eÅŸiÄŸinin düşük gecikme eÅŸiÄŸinden daha yüksek olması gerekir" + +#: usr/local/www/system_gateways_edit.php:275 +#: usr/local/www/system_gateways_edit.php:275 +msgid "" +"The high Packet Loss threshold needs to be higher than the low Packet Loss " +"threshold" +msgstr "" +"Yüksek paket kaybı eÅŸiÄŸinin düşük paket kaybı eÅŸiÄŸinden daha yüksek olması " +"gerekir" + +#: usr/local/www/system_gateways_edit.php:297 +#: usr/local/www/system_gateways_edit.php:297 +msgid "The frequency probe interval needs to be a numeric value." +msgstr "Sorgu Sıklığı aralığının sayısal bir deÄŸer olması gerekir." + +#: usr/local/www/system_gateways_edit.php:300 +#: usr/local/www/system_gateways_edit.php:300 +msgid "The frequency probe interval needs to be positive." +msgstr "Sorgu Sıklığı aralığının pozitif olması gerekir." + +#: usr/local/www/system_gateways_edit.php:307 +#: usr/local/www/system_gateways_edit.php:307 +msgid "The down time setting needs to be a numeric value." +msgstr "EriÅŸilemez zamanının ayarları sayısal bir deÄŸer olması gerekir." + +#: usr/local/www/system_gateways_edit.php:310 +#: usr/local/www/system_gateways_edit.php:310 +msgid "The down time setting needs to be positive." +msgstr "EriÅŸilemez zamanının ayarlarının pozitif olması gerekir." + +#: usr/local/www/system_gateways_edit.php:318 +#: usr/local/www/system_gateways_edit.php:318 +msgid "" +"The Frequency Probe interval needs to be less than the down time setting." +msgstr "" +"Sorgu Sıklığı aralığının eriÅŸilemez zaman ayarlarından daha az olması " +"gerelir." + +#: usr/local/www/system_gateways_edit.php:611 +#: usr/local/www/system_gateways_edit.php:615 +msgid "" +"NOTE: The Frequency Probe interval must be less than the Down time, " +"otherwise the gateway will seem to go down then come up again at the next " +"probe." +msgstr "" +"NOT: Sorgu Sıklığı aralığı eriÅŸilemez zamandan daha az olması ÅŸarttır, aksi " +"taktirde aÄŸ geçidi kapalı gibi gördüğü için tekrar açılması yeni sorguda " +"gerçekleÅŸir." + +#: usr/local/www/shortcuts.inc:96 usr/local/www/shortcuts.inc:96 +msgid "Main page for this section" +msgstr "Bu bölümün ana sayfası" + +#: usr/local/www/shortcuts.inc:120 usr/local/www/shortcuts.inc:120 +msgid "Status of items on this page" +msgstr "Bu sayfanın öğelerinin durumları" + +#: usr/local/www/shortcuts.inc:127 usr/local/www/shortcuts.inc:127 +msgid "Log entries for items on this page" +msgstr "Bu sayfanın öğelerinin kayıt girdileri" + +#: usr/local/www/vpn_openvpn_server.php:1102 +#: usr/local/www/vpn_openvpn_server.php:1129 +msgid "" +"This is the IPv6 virtual network used for private communications between " +"this server and client hosts expressed using CIDR (eg. fe80::/64). The first " +"network address will be assigned to the server virtual interface. The " +"remaining network addresses can optionally be assigned to connecting " +"clients. (see Address Pool)" +msgstr "" +"Bu IPv6 sunucu ile CIDR yoluyla belirtilen istemciler (örn. fe80::/64) " +"arasında özel iletiÅŸim için kullanılacak sanal aÄŸdır. İlk aÄŸ adresi sunucu " +"sanal arabirimine atanır. DiÄŸer aÄŸ adresleri baÄŸlanan istemcilere isteÄŸe " +"göre atanabilir (bkz Adres Havuzu)." + +#: usr/local/www/vpn_openvpn_server.php:1152 +#: usr/local/www/vpn_openvpn_server.php:1179 +msgid "" +"The interface to which this tap instance will be bridged. This is not done " +"automatically. You must assign this interface and create the bridge " +"separately. This setting controls which existing IP address and subnet mask " +"are used by OpenVPN for the bridge. Setting this to 'none' will cause the " +"Server Bridge DHCP settings below to be ignored." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1165 +#: usr/local/www/vpn_openvpn_server.php:1192 +msgid "" +"When using tap mode as a multi-point server, you may optionally supply a " +"DHCP range to use on the interface to which this tap instance is bridged. If " +"these settings are left blank, DHCP will be passed through to the LAN, and " +"the interface setting above will be ignored." +msgstr "" + +#: usr/local/www/vpn_openvpn_server.php:1225 +#: usr/local/www/vpn_openvpn_client.php:799 +msgid "IPv4 Remote Network" +msgstr "IPv4 Uzak AÄŸ" + +#: usr/local/www/vpn_openvpn_server.php:1229 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote " +"LAN here. You may leave this blank if you don't want a site-to-site VPN" +msgstr "" +"Yönlendirme tablolarında elle deÄŸiÅŸiklik yapmadan alanlar arası sanal özel " +"aÄŸ (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek bir " +"aÄŸdır. CIDR aralığı ÅŸeklinde girilir. EÄŸer bu alanlar arası bir VPN ise " +"buraya uzak LAN'ı giriniz. EÄŸer alanlar arası VPN istemiyorsanız burayı boÅŸ " +"bırakabilirsiniz." + +#: usr/local/www/vpn_openvpn_server.php:1239 +#: usr/local/www/vpn_openvpn_client.php:813 +msgid "IPv6 Remote Network" +msgstr "IPv6 Uzak AÄŸ" + +#: usr/local/www/vpn_openvpn_server.php:1243 +msgid "" +"This is an IPv6 network that will be routed through the tunnel, so that a " +"site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the " +"remote LAN here. You may leave this blank if you don't want a site-to-site " +"VPN" +msgstr "" +"Yönlendirme tablolarında elle deÄŸiÅŸiklik yapmadan alanlar arası sanal özel " +"IPv6 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek " +"bir aÄŸdır. IP/PREFIX olarak ifade edilir. EÄŸer bu alanlar arası bir VPN ise " +"buraya uzak LAN'ı giriniz. EÄŸer alanlar arası VPN istemiyorsanız burayı boÅŸ " +"bırakabilirsiniz." + +#: usr/local/www/services_dhcp.php:293 usr/local/www/services_dhcp.php:274 +msgid "" +"If you specify a mac allow list, it must contain only valid partial MAC " +"addresses." +msgstr "" +"EÄŸer mac izin listesi belirtecekseniz, sadece geçerli kısmi MAC adresleri " +"içerebilir." + +#: usr/local/www/services_dhcp.php:295 usr/local/www/services_dhcp.php:276 +msgid "" +"If you specify a mac deny list, it must contain only valid partial MAC " +"addresses." +msgstr "" +"EÄŸer mac reddetme listesi belirtecekseniz, sadece geçerli kısmi MAC " +"adresleri içerebilir." + +#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcp.php:701 +msgid "" +"Editing Pool-Specific Options. To return to the Interface, click its tab " +"above." +msgstr "" +"Havuz özel seçeneklerini düzenle. Arabirime geri dönmek için yukarıdaki " +"sekmeye tıklayın." + +#: usr/local/www/services_dhcp.php:775 usr/local/www/services_dhcp.php:785 +msgid "Additional Pools" +msgstr "Ek Havuzlar" + +#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:787 +msgid "" +"If you need additional pools of addresses inside of this subnet outside the " +"above Range, they may be specified here." +msgstr "" +"Yukardaki aralığın dışında bu altaÄŸ içinde eÄŸer ek havuz adreslerine " +"ihtiyacınız varsa, buradan belirtilebilirsiniz." + +#: usr/local/www/services_dhcp.php:780 usr/local/www/services_dhcp.php:790 +msgid "Pool Start" +msgstr "Havuz BaÅŸlangıçı" + +#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcp.php:791 +msgid "Pool End" +msgstr "Havuz BitiÅŸi" + +#: usr/local/www/services_dhcp.php:805 usr/local/www/services_dhcp.php:819 +msgid "Do you really want to delete this pool?" +msgstr "Bu havuzu silmek istediÄŸinize emin misiniz?" + +#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:971 +msgid "MAC Address Control" +msgstr "MAC Adres Kontrol" + +#: usr/local/www/services_dhcp.php:961 usr/local/www/services_dhcp.php:974 +msgid "Show MAC Address Control" +msgstr "MAC Adres Kontrolünü Göster" + +#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcp.php:978 +msgid "" +"Enter a list of partial MAC addresses to allow, comma separated, no spaces, " +"such as " +msgstr "" +"İzin verilen Kısmi MAC adresleri listesini ,virgülle ayrılmış, boÅŸluk " +"olmadan, ÅŸu ÅŸekilde giriniz " + +#: usr/local/www/services_dhcp.php:967 usr/local/www/services_dhcp.php:980 +msgid "" +"Enter a list of partial MAC addresses to deny access, comma separated, no " +"spaces, such as " +msgstr "" +"İzin verilmeyen Kısmi MAC adresleri listesini , virgülle ayrılmış, boÅŸluk " +"olmadan, ÅŸu ÅŸekilde giriniz " + +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +msgid "You cannot use spaces or slashes in the 'name' field." +msgstr "'isim' alanında boÅŸluk veya bölü çizgisi (slaÅŸ) kullanamazsınız." + +#: usr/local/www/guiconfig.inc:1009 usr/local/www/guiconfig.inc:1024 +msgid "move mouse out this alias to hide" +msgstr "Bu grubu gizlemek için farenizi dışarı hareket ettirin" + +#: usr/local/www/guiconfig.inc:1066 usr/local/www/guiconfig.inc:1081 +msgid "edit this alias" +msgstr "bu grubu düzenle" + +#: usr/local/www/guiconfig.inc:1077 usr/local/www/guiconfig.inc:1089 +#: usr/local/www/guiconfig.inc:1092 usr/local/www/guiconfig.inc:1104 +msgid "loading..." +msgstr "yükleniyor..." + +#: usr/local/www/system_firmware_settings.php:175 +#: usr/local/www/system_firmware_settings.php:184 +msgid "Dashboard check" +msgstr "Anasayfa kotrol" + +#: usr/local/www/system_firmware_settings.php:179 +#: usr/local/www/system_firmware_settings.php:188 +msgid "Disable the automatic dashboard auto-update check." +msgstr "Anasayfada otomatik-güncelleme kontrol etmeyi kapat." + +#: usr/local/www/services_ntpd.php:119 usr/local/www/services_ntpd.php:119 +msgid "Interfaces without an IP address will not be shown." +msgstr "IP adresi içermeyen arabirimler gösterilmeyecektir." + +#: usr/local/www/services_ntpd.php:121 usr/local/www/services_ntpd.php:121 +msgid "Selecting no interfaces will listen on all interfaces with a wildcard." +msgstr "Arabirimler seçilmediÄŸinde tüm arabirimlerin joker karakterini izler." + +#: usr/local/www/services_ntpd.php:122 usr/local/www/services_ntpd.php:122 +msgid "" +"Selecting all interfaces will explicitly listen on only the interfaces/IPs " +"specified." +msgstr "" +"Tüm arabirimlerin seçilmesi halinde sadece belirtilen arabirimler/IP(ler)i " +"izlemesi beklenir." + +#: usr/local/www/services_ntpd.php:140 usr/local/www/services_ntpd.php:140 +msgid "The GPS must provide NMEA format output!" +msgstr "GPS NMEA formatında çıkış saÄŸlamalıdır!" + +#: usr/local/www/services_ntpd.php:142 usr/local/www/services_ntpd.php:142 +msgid "" +"All serial ports are listed, be sure to pick only the port with the GPS " +"attached." +msgstr "" +"Tüm seri portlar listelendi, GPS'in bir porta baÄŸlı olduÄŸundan emin olunuz." + +#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144 +msgid "It is best to configure at least 2 servers under" +msgstr "En az 2 sunucular altında yapılandırmak en iyisidir" + +#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144 +msgid "System > General" +msgstr "Sistem > Genel" + +#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144 +msgid "" +"to avoid loss of sync if the GPS data is not valid over time. Otherwise ntpd " +"may only use values from the unsynchronized local clock when providing time " +"to clients." +msgstr "" + +#: usr/local/www/firewall_aliases.php:177 +#: usr/local/www/firewall_aliases.php:177 +msgid "Ports" +msgstr "Portlar" + +#: usr/local/www/firewall_aliases.php:178 +#: usr/local/www/firewall_aliases.php:178 +msgid "Urls" +msgstr "Urller" + +#: usr/local/www/firewall_aliases.php:195 +#: usr/local/www/firewall_aliases.php:272 +#: usr/local/www/firewall_aliases.php:195 +#: usr/local/www/firewall_aliases.php:272 +msgid "Add a new alias" +msgstr "Yeni grup ekle" + +#: usr/local/www/firewall_aliases.php:255 +#: usr/local/www/firewall_aliases.php:255 +msgid "Edit alias" +msgstr "Grup düzenle" + +#: usr/local/www/firewall_aliases.php:256 +#: usr/local/www/firewall_aliases.php:256 +msgid "Delete alias" +msgstr "Grup sil" + +#: usr/local/www/services_captiveportal_zones_edit.php:64 +#: usr/local/www/services_captiveportal_zones_edit.php:64 +msgid "The zone name can only contain letters, digits, and underscores (_)." +msgstr "Bölge adı. Harfler, rakamlar ve sadece alt çizgi (_) içerebilir." + +#: usr/local/www/services_captiveportal_zones_edit.php:105 +#: usr/local/www/services_captiveportal_zones_edit.php:101 +msgid "Zone name. Can only contain letters, digits, and underscores (_)." +msgstr "Bölge adı. Harfler, rakamlar ve sadece alt çizgi (_) içerebilir." + +#: usr/local/www/diag_packet_capture.php:81 +#: usr/local/www/diag_packet_capture.php:81 +msgid "Invalid interface." +msgstr "Geçersiz arabirim." + +#: usr/local/www/diag_packet_capture.php:84 +#: usr/local/www/diag_packet_capture.php:84 +msgid "Invalid address family." +msgstr "Geçersiz adres ailesi." + +#: usr/local/www/diag_packet_capture.php:87 +#: usr/local/www/diag_packet_capture.php:87 +msgid "Invalid protocol." +msgstr "Geçersiz protokol." + +#: usr/local/www/diag_packet_capture.php:92 +#: usr/local/www/diag_packet_capture.php:92 +#, php-format +msgid "A valid IP address or CIDR block must be specified. [%s]" +msgstr "Geçerli bir IP adresi yada CIDR bloÄŸu belirtilmelidir. [%s]" + +#: usr/local/www/diag_packet_capture.php:97 +#: usr/local/www/diag_packet_capture.php:97 +msgid "Invalid value specified for port." +msgstr "Port için belirtilen deÄŸer geçersiz." + +#: usr/local/www/diag_packet_capture.php:104 +#: usr/local/www/diag_packet_capture.php:104 +msgid "Invalid value specified for packet length." +msgstr "Paket uzunluÄŸu için beliritlen deÄŸer geçersiz." + +#: usr/local/www/diag_packet_capture.php:111 +#: usr/local/www/diag_packet_capture.php:111 +msgid "Invalid value specified for packet count." +msgstr "Paket sayısı için belirtilen deÄŸer geçersiz." + +#: usr/local/www/vpn_ipsec_phase2.php:148 +#: usr/local/www/vpn_ipsec_phase2.php:152 +msgid "A valid NAT local network bit count must be specified." +msgstr "Geçerli bir NAT yerel aÄŸ bit sayısı belirtilmelidir." + +#: usr/local/www/vpn_ipsec_phase2.php:150 +#: usr/local/www/vpn_ipsec_phase2.php:154 +msgid "" +"You cannot configure a network type address for NAT while only an address " +"type is selected for local source." +msgstr "" +"Sadece yerel kaynaktan adres türü seçildiyse NAT için aÄŸ türü adresi " +"yapılandıramazsınız." + +#: usr/local/www/vpn_ipsec_phase2.php:153 +#: usr/local/www/vpn_ipsec_phase2.php:157 +msgid "A valid NAT local network IP address must be specified." +msgstr "Geçerli bir NAT yerel IP adresi belirtilmelidir." + +#: usr/local/www/vpn_ipsec_phase2.php:548 +#: usr/local/www/vpn_ipsec_phase2.php:569 +msgid "" +"In case you need NAT/BINAT on this network specify the address to be " +"translated" +msgstr "" +"Bu durumda aÄŸ üzerinde NAT/BINAT çevrilecek adresini belirtmeniz gerekir" + +#: usr/local/www/vpn_ipsec_keys_edit.php:114 +#: usr/local/www/vpn_ipsec_keys_edit.php:114 +msgid "VPN: IPsec: Edit Pre-Shared Key" +msgstr "VPN: IPsec: Ön Paylaşımlı Anahtar Düzenle" + +#: usr/local/www/services_dhcp_edit.php:227 +#: usr/local/www/services_dhcp_edit.php:355 +msgid "If an IPv4 address is entered, the address must be outside of the pool." +msgstr "Bir IPv4 adresi girdiyseniz adres havuzu dışında olması gerekir." + +#: usr/local/www/services_dhcp_edit.php:229 +#: usr/local/www/services_dhcp_edit.php:357 +msgid "" +"If no IPv4 address is given, one will be dynamically allocated from the pool." +msgstr "Hiçbir IPv4 adresi belirtilmemiÅŸse dinamik olarak havuzundan ayrılır." + +#: usr/local/www/interfaces.php:2460 usr/local/www/interfaces.php:2490 +msgid "WPA Pre-Shared Key" +msgstr "WPA Ön Paylaşımlı Anahtar" + +#: usr/local/www/vpn_openvpn_client.php:789 +#: usr/local/www/vpn_openvpn_client.php:808 +msgid "" +"This is the IPv6 virtual network used for private communications between " +"this client and the server expressed using CIDR (eg. fe80::/64). The first " +"network address is assumed to be the server address and the second network " +"address will be assigned to the client virtual interface" +msgstr "" +"Bu IPv6 sunucu ile CIDR yoluyla belirtilen istemciler (örn. fe80::/64) " +"arasında özel iletiÅŸim için kullanılacak sanal aÄŸdır. İlk aÄŸ adresi sunucu " +"adresi olarak kabul edilir ve ikinci aÄŸ adresi de istemci sanal arabirimine " +"atanır" + +#: usr/local/www/vpn_openvpn_client.php:803 +msgid "" +"This is a network that will be routed through the tunnel, so that a site-to-" +"site VPN can be established without manually changing the routing tables. " +"Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote " +"LAN here. You may leave this blank to only communicate with other clients" +msgstr "" +"Yönlendirme tablolarını elle deÄŸiÅŸtirmeden alanlar arası sanal özel aÄŸ " +"(site-to-site VPN) kurulabilmesi için tünel içinden yönlendirilecek aÄŸdır. " +"CIDR aralığı olarak belirtilir. EÄŸer bu siteler arası VPN ise buraya uzak " +"LAN girilir. Sadece diÄŸer istemcilerle iletiÅŸim kurmak için burayı boÅŸ " +"bırakabilirsiniz." + +#: usr/local/www/vpn_openvpn_client.php:817 +msgid "" +"This is an IPv6 network that will be routed through the tunnel, so that a " +"site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the " +"remote LAN here. You may leave this blank to only communicate with other " +"clients" +msgstr "" +"Yönlendirme tablolarında elle deÄŸiÅŸiklik yapmadan alanlar arası sanal özel " +"IPv6 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek " +"bir aÄŸdır. IP/PREFIX olarak tanımlanır. EÄŸer bu alanlar arası bir VPN ise " +"buraya uzak LAN'ı giriniz. EÄŸer alanlar arası VPN istemiyorsanız burayı boÅŸ " +"bırakabilirsiniz." + +#: usr/local/www/vpn_l2tp.php:301 usr/local/www/vpn_l2tp.php:304 +msgid "Enable L2TP server" +msgstr "L2TP Sunucusunu EtkinleÅŸtir" + +#: usr/local/www/vpn_l2tp.php:322 usr/local/www/vpn_l2tp.php:325 +msgid "Server Address" +msgstr "Sunucu Adresi" + +#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_l2tp.php:337 +msgid "Remote Address Range" +msgstr "Uzak Adres Aralığı" + +#: usr/local/www/vpn_l2tp.php:384 usr/local/www/vpn_l2tp.php:387 +msgid "Authentication Type" +msgstr "Kimlik DoÄŸrulama Türü" + +#: usr/local/www/vpn_l2tp.php:429 usr/local/www/vpn_l2tp.php:432 +msgid "RADIUS Shared Secret" +msgstr "RADIUS Paylaşımlı Anahtar" + +#: usr/local/www/vpn_l2tp.php:436 usr/local/www/vpn_l2tp.php:439 +msgid "RADIUS Issued IP's" +msgstr "RADIUS Verilen IP(ler)" + +#: usr/local/www/firewall_virtual_ip_edit.php:126 +#: usr/local/www/firewall_virtual_ip_edit.php:128 +msgid "The /31 and /32 subnet mask are invalid for CARP IPs." +msgstr "/31 ve /32 altaÄŸ maskesi CARP IPleri için geçersiz." + +#: usr/local/www/firewall_virtual_ip_edit.php:130 +#: usr/local/www/firewall_virtual_ip_edit.php:132 +msgid "The /127 and /128 subnet mask are invalid for CARP IPs." +msgstr "/127 ve /128 altaÄŸ maskesi CARP IPleri için geçersiz." + +# takip eden 2 satır çeviri birlikte kullanılıyor o yüzden cümleler devrik konumlanmıştır (technical) +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +msgid "" +"If you are using a GIF tunnel to connect to a Hurricane Electric (he.net) " +"Tunnel Broker on a WAN with a dynamic IP, you may want to add a" +msgstr "" +"IP deÄŸiÅŸikliklerinizde tünelinizi iÅŸlevsel tutmak ve Hurricane Electric " +"(he.net) e baÄŸlanmak için WAN dinamik IP sinde GIF Tünelkırıcı " +"kullanıyorsanız," + +# takip eden 1 satır çeviri birlikte kullanılıyor o yüzden cümleler devrik konumlanmıştır (technical) +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +msgid "HE.net Tunnelbroker type DynDNS Entry" +msgstr "HE.net Tünelkırıcı için DynDNS girdisi eklemek" + +# yukarıdaki 2 satır çeviri birlikte kullanılıyor o yüzden cümleler devrik konumlanmıştır (technical) +#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141 +msgid "to keep your tunnel functional when your IP changes." +msgstr "isteyebilirsiniz." + +#: usr/local/www/widgets/widgets/system_information.widget.php:102 +#: usr/local/www/widgets/widgets/system_information.widget.php:103 +msgid "Obtaining update status" +msgstr "Güncelleme durumu alınıyor" + +#: usr/local/www/vpn_ipsec_phase1.php:680 +#: usr/local/www/vpn_ipsec_phase1.php:701 +msgid "Input your Pre-Shared Key string" +msgstr "Ön Paylaşımlı Anahtar dizilimini giriniz" + +#: usr/local/www/diag_nanobsd.php:179 usr/local/www/diag_nanobsd.php:179 +msgid "Media Read/Write Status" +msgstr "Ortam Oku/Yaz Durumu" + +#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:192 +msgid "Read/Write" +msgstr "Oku/Yaz" + +#: usr/local/www/diag_nanobsd.php:194 usr/local/www/diag_nanobsd.php:194 +msgid "Switch to Read-Only" +msgstr "Salt okunur' a deÄŸiÅŸtir" + +#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:196 +msgid "Read-Only" +msgstr "Salt okunur" + +#: usr/local/www/diag_nanobsd.php:198 usr/local/www/diag_nanobsd.php:198 +msgid "Switch to Read/Write" +msgstr "Oku/Yaz' ı deÄŸiÅŸtir" + +#: usr/local/www/diag_nanobsd.php:201 usr/local/www/diag_nanobsd.php:201 +msgid "" +"NOTE: This setting is only temporary, and can be switched dynamically in the " +"background." +msgstr "" +"NOT: Bu ​​ayar geçicidir, ve arka planda dinamik olarak deÄŸiÅŸtirilebilir." + +#: usr/local/www/diag_nanobsd.php:208 usr/local/www/diag_nanobsd.php:208 +msgid "Keep media mounted read/write at all times." +msgstr "Okuma/yazma için ortamı her zaman takılı tut (mounted)." + +#: usr/local/www/services_dhcpv6.php:821 usr/local/www/services_dhcpv6.php:838 +msgid "Status: DHCPv6 leases" +msgstr "Durum: DHCPv6 Kiraları" + +#: usr/local/www/diag_logs_filter.php:181 +#: usr/local/www/diag_logs_filter.php:181 +msgid "Rule" +msgstr "Kural" + +#: usr/local/www/system_firmware.php:55 +msgid "Standard Kernel" +msgstr "Standart Çekirdek" + +#: usr/local/www/system_firmware.php:56 +msgid "Embedded Kernel" +msgstr "Gömülü Çekirdek" + +#: usr/local/www/vpn_l2tp.php:88 usr/local/www/vpn_pptp.php:96 +msgid "" +"'Server address' parameter should NOT be set to any IP address currently in " +"use on this firewall." +msgstr "" +"'Sunucu adresi' parametresi güvenlik duvarında kullanılacak herhangi bir IP " +"adresine AYARLANAMAZ." + +#: usr/local/www/system_camanager.php:220 +#: usr/local/www/system_certmanager.php:299 +#: usr/local/www/system_certmanager.php:301 +msgid "Please select a valid Key Length." +msgstr "Geçerli anahtar uzunlığını seçiniz." + +#: usr/local/www/system_camanager.php:222 +#: usr/local/www/system_certmanager.php:303 +msgid "Please select a valid Digest Algorithm." +msgstr "Geçerli Özet Algoritması' nı seçiniz." + +#: usr/local/www/system_camanager.php:477 +#: usr/local/www/system_certmanager.php:690 +#: usr/local/www/system_certmanager.php:863 +msgid "Digest Algorithm" +msgstr "Özet Algoritması" + +#: usr/local/www/system_camanager.php:489 +#: usr/local/www/system_certmanager.php:702 +#: usr/local/www/system_certmanager.php:875 +msgid "" +"NOTE: It is recommended to use an algorithm stronger than SHA1 when possible." +msgstr "" +"NOT: Burada mümkünse SHA1 den daha güçlü bir algoritma kullanılması tavsiye " +"edilir." + +#: usr/local/www/system_camanager.php:653 +#: usr/local/www/system_certmanager.php:1127 +msgid "Valid From" +msgstr "İtibaren geçerli" + +#: usr/local/www/system_camanager.php:658 +#: usr/local/www/system_certmanager.php:1132 +msgid "Valid Until" +msgstr "Geçerlilik Tarihi" + +#: usr/local/www/services_captiveportal_ip_edit.php:107 +msgid "A valid subnet mask must be specified" +msgstr "Geçerli bir Alt AÄŸ maskesi belirtin." + +#: usr/local/www/vpn_openvpn_client.php:160 +#: usr/local/www/vpn_openvpn_server.php:213 +msgid "" +"Protocol and IP address families do not match. You cannot select an IPv6 " +"protocol and an IPv4 IP address." +msgstr "" +"Protokol ve IP adresi ailesi eÅŸleÅŸmiyor. IPv6 protokolü ve IPv4 IP adresi " +"seçemezsiniz." + +#: usr/local/www/vpn_openvpn_client.php:162 +#: usr/local/www/vpn_openvpn_server.php:215 +msgid "" +"Protocol and IP address families do not match. You cannot select an IPv4 " +"protocol and an IPv6 IP address." +msgstr "" +"Protokol ve IP adresi ailesi eÅŸleÅŸmiyor. IPv4 protokolü ve IPv6 IP adresi " +"seçemezsiniz." + +#: usr/local/www/vpn_openvpn_client.php:164 +#: usr/local/www/vpn_openvpn_server.php:217 +msgid "" +"An IPv4 protocol was selected, but the selected interface has no IPv4 " +"address." +msgstr "IPv4 protokolü seçildi ancak seçili arabirimin IPv4 adresi yok." + +#: usr/local/www/vpn_openvpn_client.php:166 +#: usr/local/www/vpn_openvpn_server.php:219 +msgid "" +"An IPv6 protocol was selected, but the selected interface has no IPv6 " +"address." +msgstr "IPv6 protokolü seçildi ancak seçili arabirimin IPv6 adresi yok." + +#: usr/local/www/vpn_openvpn_client.php:818 +#: usr/local/www/vpn_openvpn_server.php:1252 +msgid "IPv4 Remote Network/s" +msgstr "Uzaktaki IPv4 AÄŸ(lar)ı" + +#: usr/local/www/vpn_openvpn_client.php:822 +msgid "" +"These are the IPv4 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more CIDR ranges. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank to only communicate with other clients" +msgstr "" +"Yönlendirme tablolarında elle deÄŸiÅŸiklik yapmadan alanlar arası sanal özel " +"IPv4 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek " +"bir aÄŸdır. CIDR aralığı virgülle ayrılmış bir yada daha fazla liste olarak " +"girilir. EÄŸer bu alanlar arası bir VPN ise buraya uzak LAN'ı giriniz. EÄŸer " +"alanlar arası VPN istemiyorsanız burayı boÅŸ bırakabilirsiniz" + +#: usr/local/www/vpn_openvpn_client.php:832 +#: usr/local/www/vpn_openvpn_server.php:1266 +msgid "IPv6 Remote Network/s" +msgstr "Uzaktaki IPv6 AÄŸ(lar)ı" + +#: usr/local/www/vpn_openvpn_client.php:836 +msgid "" +"These are the IPv6 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank to only communicate with other clients" +msgstr "" +"Yönlendirme tablolarında elle deÄŸiÅŸiklik yapmadan alanlar arası sanal özel " +"IPv6 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek " +"bir aÄŸdır. IP/PREFIX virgülle ayrılmış bir yada daha fazla liste olarak " +"girilir. EÄŸer bu alanlar arası bir VPN ise buraya uzak LAN'ı giriniz. EÄŸer " +"alanlar arası VPN istemiyorsanız burayı boÅŸ bırakabilirsiniz" + +#: usr/local/www/vpn_openvpn_client.php:909 +msgid "EXAMPLE:" +msgstr "ÖRNEK:" + +#: usr/local/www/status_openvpn.php:201 +msgid "Show Routing Table" +msgstr "Yönlendirme Tablosunu Göster" + +#: usr/local/www/status_openvpn.php:201 +msgid "Display OpenVPN's internal routing table for this server." +msgstr "Bu sunucuda OpenVPN'(ler) in dahili yönlendirme tablolarını görüntüle." + +#: usr/local/www/status_openvpn.php:207 +msgid "Routing Table" +msgstr "Yönlendirme Tablosu" + +#: usr/local/www/status_openvpn.php:216 +msgid "Target Network" +msgstr "Hedef AÄŸ" + +#: usr/local/www/status_openvpn.php:217 +msgid "Last Used" +msgstr "Son Kullanım" + +#: usr/local/www/status_openvpn.php:239 +msgid "" +"An IP address followed by C indicates a host currently connected through the " +"VPN." +msgstr "" +"IP adresinden sonra C host'un geçerli baÄŸlantısının VPN üzerinden olduÄŸunu " +"gösterir." + +#: usr/local/www/diag_testport.php:49 usr/local/www/diag_testport.php:114 +#: usr/local/www/fbegin.inc:218 +msgid "Test Port" +msgstr "Port Test" + +#: usr/local/www/diag_testport.php:64 +msgid "Please enter a valid IP or hostname." +msgstr "Lütfen geçerli bir IP adresi girin." + +#: usr/local/www/diag_testport.php:68 +msgid "Please enter a valid port number." +msgstr "Lütfen geçerli bir port numarası girin." + +#: usr/local/www/diag_testport.php:72 +msgid "Please enter a valid source port number, or leave the field blank." +msgstr "Lütfen geçerli bir kaynak adresi girin veya bu alanı boÅŸ bırakın." + +#: usr/local/www/diag_testport.php:76 +msgid "You cannot connect to an IPv4 address using IPv6." +msgstr "IPv6 adresini kullanarak IPv4 adresine baÄŸlanamazsınız." + +#: usr/local/www/diag_testport.php:79 +msgid "You cannot connect to an IPv6 address using IPv4." +msgstr "IPv4 adresini kullanarak IPv6 adresine baÄŸlanamazsınız." + +#: usr/local/www/diag_testport.php:106 +msgid "" +"This page allows you to perform a simple TCP connection test to determine if " +"a host is up and accepting connections on a given port. This test does not " +"function for UDP since there is no way to reliably determine if a UDP port " +"accepts connections in this manner." +msgstr "" +"Bu sayfa, host'un açık ve belirtilen porttan baÄŸlantıyı kabul ettiÄŸini " +"belirlemek için basit bir TCP baÄŸlantısı testi gerçekleÅŸtirmeye olanak " +"saÄŸlar. UDP portları bu ÅŸekilde bir baÄŸlantıyı kabul ediyorsa " +"güvenilirliÄŸini belirlemenin bir yolu olmadığı için bu test UDP için " +"çalışmaz." + +#: usr/local/www/diag_testport.php:108 +msgid "" +"No data is transmitted to the remote host during this test, it will only " +"attempt to open a connection and optionally display the data sent back from " +"the server." +msgstr "" +"Test sırasında Host'a baÄŸlantıyı açmak için herhangi bir veri gönderilir ve " +"isteÄŸe baÄŸlı olarak Host'dan geri gönderilen verileri görüntülemek için " +"kullanılır." + +#: usr/local/www/diag_testport.php:132 +msgid "This should typically be left blank." +msgstr "Bu genellikle boÅŸ bırakılmalıdır." + +#: usr/local/www/diag_testport.php:136 +msgid "Show Remote Text" +msgstr "Uzak Metin Görüntüle" + +#: usr/local/www/diag_testport.php:139 +msgid "" +"Shows the text given by the server when connecting to the port. Will take " +"10+ seconds to display if checked." +msgstr "" +"Port'a baÄŸlanırken sunucu tarafından verilen metini gösterir. İşaretlenirse " +"görüntüleme 10+ saniye uzar." + +#: usr/local/www/diag_testport.php:159 +msgid "IP Protocol" +msgstr "IP Protokolü" + +#: usr/local/www/diag_testport.php:166 +#, fuzzy +msgid "IPv4" +msgstr "IPv4" + +#: usr/local/www/diag_testport.php:169 +#, fuzzy +msgid "IPv6" +msgstr "IPv6" + +#: usr/local/www/diag_testport.php:173 +msgid "" +"If you force IPv4 or IPv6 and use a hostname that does not contain a result " +"using that protocol, it will result in an error. For example if you force " +"IPv4 and use a hostname that only returns an AAAA IPv6 IP address, it will " +"not work." +msgstr "" +"Zorla IPv4 yada IPv6 ile host adı kullanılırsa bu protokol de sonuç vermez, " +"sonuç hatalı olacaktır. Örnek verecek olursak zorla IPv4 ve host adı " +"kullanımı sadece AAAA IPv6 IP adresi ile dönecektir, iÅŸe yaramayacaktır." + +#: usr/local/www/diag_testport.php:186 +msgid "Port Test Results" +msgstr "Port Testi Sonuçları" + +#: usr/local/www/diag_testport.php:246 +msgid "" +"No output received, or connection failed. Try with \"Show Remote Text\" " +"unchecked first." +msgstr "" +"Çıktı alınamadı, yada baÄŸlantı baÅŸarısız oldu. Önce \"Uzak Metin Göster\" " +"iÅŸaretsiz yaparak deneyin" + +#: usr/local/www/diag_testport.php:248 +msgid "Connection failed (Refused/Timeout)" +msgstr "BaÄŸlantı baÅŸarısız (Reddedildi/Zaman aşımı)" + +#: usr/local/www/firewall_rules_edit.php:1295 +#: usr/local/www/firewall_nat_edit.php:780 +#: usr/local/www/firewall_nat_out_edit.php:647 +msgid "" +"Hint: This prevents the rule on Master from automatically syncing to other " +"CARP members. This does NOT prevent the rule from being overwritten on Slave." +msgstr "" +"İpucu: CARP üyelerinin eÅŸitlenmesini (Ana \"Master\") kural otomatik olarak " +"engeller. Bu düşük seviyeli (Slave) kuralın üstüne gelen kuralı engellemez." + +#: usr/local/www/interfaces_qinq.php:68 +msgid "QinQ interface does not exist" +msgstr "QinQ arabirimi mevcut deÄŸil" + +#: usr/local/www/interfaces_vlan_edit.php:84 +msgid "Interface supplied as parent is invalid" +msgstr "Arabirime verilen aile(üst-parent) geçersiz" + +#: usr/local/www/system_firmware_settings.php:151 +#, php-format +msgid "" +"Entries denoted by \"Current architecture\" match the architecture of your " +"current installation, such as %s. Changing architectures during an upgrade " +"is not recommended, and may require a manual reboot after the update " +"completes." +msgstr "" +"\"Current architecture (güncel yapı)\" ifadesine uyan girdiler sizin " +"sisteminizde kurulu olan yapıdır, mesela %s gibi. Güncelleme sırasında yapı " +"deÄŸiÅŸitirmek önerilmez ve güncelleme tamamlanınca el ile yeniden baÅŸlatma " +"gerekebilir." + +#: usr/local/www/interfaces_lagg_edit.php:95 +#: usr/local/www/interfaces_lagg_edit.php:98 +msgid "Interface supplied as member is invalid" +msgstr "Arabirime verilen kullanıcı geçersiz" + +#: usr/local/www/interfaces_lagg_edit.php:101 +msgid "Protocol supplied is invalid" +msgstr "Verilen protokol geçersiz" + +#: usr/local/www/status_captiveportal_expire.php:58 +#: usr/local/www/status_captiveportal_expire.php:73 +#: usr/local/www/status_captiveportal_vouchers.php:112 +#: usr/local/www/status_captiveportal.php:110 +#: usr/local/www/status_captiveportal_test.php:75 +#: usr/local/www/status_captiveportal_voucher_rolls.php:79 +msgid "Expire Vouchers" +msgstr "Süresi dolan Biletler" + +#: usr/local/www/status_captiveportal_expire.php:86 +msgid "" +"Enter multiple vouchers separated by space or newline. All valid vouchers " +"will be marked as expired" +msgstr "" +"Birden fazla biletleri boÅŸluk yada yeni satır ile girin. Tüm geçerli " +"biletler süresi dolmuÅŸ olarak iÅŸaretlenecek" + +#: usr/local/www/firewall_nat_edit.php:835 +msgid "" +"NOTE: The \"pass\" selection does not work properly with Multi-WAN. It will " +"only work on an interface containing the default gateway." +msgstr "" +"Not: \"İzin ver\" seçimi Çoklu-WAN (Multi-WAN) ile düzgün çalışmamaktadır. " +"Yanlızca varsayılan aÄŸ geçidi içeren bir arabirim üzerinden çalışmaktadır." + +#: usr/local/www/interfaces_vlan.php:71 +msgid "Invalid VLAN interface." +msgstr "Geçersiz VLAN arabirimi." + +#: usr/local/www/interfaces_gif_edit.php:87 +msgid "" +"The alias IP address family has to match the family of the remote peer " +"address." +msgstr "" +"Grup IP adres ailesi ile uzak eÅŸ adres ailesine birbirine uymak zorundadır." + +#: usr/local/www/services_dhcp_edit.php:193 +msgid "" +"The IP address must not be within the range configured on a DHCP pool for " +"this interface." +msgstr "" +"IP Adresi DHCP havuzunun bu arabirim için yapılandırılmış aralığı içinde " +"olmalıdır." + +#: usr/local/www/services_dhcp_edit.php:388 +msgid "ARP Table Static Entry" +msgstr "ARP tablosu statik girdisi" + +#: usr/local/www/services_dhcp_edit.php:391 +msgid "Create an ARP Table Static Entry for this MAC & IP Address pair. " +msgstr "Bu MAC & IP adresi çifti için bir ARP tablo statik girdisi oluÅŸturur." + +#: usr/local/www/firewall_virtual_ip_edit.php:117 +msgid "This IP address is being used by another interface or VIP." +msgstr "Bu IP adresi baÅŸka bir arabirim veya VIP tarafından kullanılıyor." + +#: usr/local/www/diag_traceroute.php:122 +msgid "Reverse Address Lookup" +msgstr "Ters Adres Arama" + +#: usr/local/www/interfaces_bridge.php:70 +msgid "Invalid bridge interface." +msgstr "Geçersiz köprü arabirimi." + +#: usr/local/www/diag_smart.php:339 +msgid "Perform Self-tests" +msgstr "Kendini kendini testleri Yapın" + +#: usr/local/www/diag_smart.php:384 +msgid "Self-test" +msgstr "Kendi kendini test" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225 +msgid "Connections From Upstream SIP Server" +msgstr "Yukarıakış SIP Sunucu 'dan gelen baÄŸlantılar" + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1497 +#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1440 +#: usr/local/www/wizards/traffic_shaper_wizard.inc:1377 +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1238 +msgid "Connections To Upstream SIP Server" +msgstr "Yukarıakış SIP Sunucu 'ya giden baÄŸlantılar" + +#: usr/local/www/vpn_pppoe_edit.php:149 +msgid "Wrong data submitted" +msgstr "Yanlış veri gönderildi" + +#: usr/local/www/license.php:158 +msgid "1992-2012 The FreeBSD Project. All rights reserved" +msgstr "1992-2012 FreeBSD Projesi. Tüm hakları saklıdır" + +#: usr/local/www/license.php:161 +msgid "1999-2010 The PHP Group. All rights reserved." +msgstr "1999-2010 PHP Grubu. Tüm hakları saklıdır." + +#: usr/local/www/license.php:164 +#, fuzzy +msgid "2004, Jan Knescke, incremental" +msgstr "2004, Jan Knescke, incremental" + +#: usr/local/www/license.php:168 +#, fuzzy +msgid "2004-2012 Internet Software Consortium, Inc." +msgstr "2004-2012 Internet Software Consortium, Inc." + +#: usr/local/www/license.php:169 +#, fuzzy +msgid "1995-2003 Internet Software Consortium" +msgstr "1995-2003 Internet Software Consortium" + +#: usr/local/www/services_dhcp.php:352 +msgid "" +"The specified range must not be within the DHCP range for this interface." +msgstr "Belirtilen aralık bu arabirim için DHCP aralığı içinde olmalıdır." + +#: usr/local/www/services_dhcp.php:361 +msgid "" +"The specified range must not be within the range configured on a DHCP pool " +"for this interface." +msgstr "" +"Belirtilen aralık bu arabirim için DHCP havuzunun yapılandırılmış aralığında " +"olmalıdır." + +#: usr/local/www/services_dhcp.php:713 +msgid "Pool Description" +msgstr "Havuz Açıklaması" + +#: usr/local/www/services_dhcp.php:903 +msgid "" +"Leave blank to disable. Enter the interface IP address of the other " +"machine. Machines must be using CARP. Interface's advskew determines " +"whether the DHCPd process is Primary or Secondary. Ensure one machine's " +"advskew<20 (and the other is >20)." +msgstr "" +"BoÅŸ bırakarak devre dışı hale getirebilirsiniz. DiÄŸer sistemin IP adresini " +"giriniz. Her iki sistem de CARP kullanmalıdırlar. Arabirimler advskew DHCPd " +"iÅŸleminin birincil veya ikincil olup olmadığını belirler. Bir makinanın " +"advskew'i <20 (ve diÄŸer bir >20) olduÄŸundan emin olun." + +#: usr/local/www/services_dhcp.php:946 +msgid "" +"By default DHCP leases are displayed in UTC time. By checking this\n" +"\t\t\t\t\t\tbox DHCP lease time will be displayed in local time and set to " +"time zone selected. This will be used for all DHCP interfaces lease time." +msgstr "" +"Varsayılan olarak DHCP kiraları UTC zaman dilimine göre görüntülenir. DHCP " +"kira sürülerini yerel saat diliminde görmek istiyorsanız zaman dilimini " +"seçmek için bu\n" +"\t\t\t\t\t\tkutucuÄŸu iÅŸaretleyin." + +#: usr/local/www/services_dhcp.php:1146 +msgid "DHCP Static Mappings for this interface." +msgstr "DHCP arabirimi için statik eÅŸlemeler." + +#: usr/local/www/diag_system_pftop.php:133 +msgid "View type:" +msgstr "Türü Görüntüle:" + +#: usr/local/www/diag_system_pftop.php:136 +msgid "Label" +msgstr "Etiket" + +#: usr/local/www/diag_system_pftop.php:141 +msgid "Speed" +msgstr "Hız" + +#: usr/local/www/diag_system_pftop.php:150 +msgid "Age" +msgstr "YaÅŸ" + +#: usr/local/www/diag_system_pftop.php:151 +msgid "Bytes" +msgstr "Bayt" + +#: usr/local/www/diag_system_pftop.php:152 +msgid "Destination Address" +msgstr "Hedef Adres" + +#: usr/local/www/diag_system_pftop.php:154 +msgid "Expiry" +msgstr "Geçerlilik" + +#: usr/local/www/diag_system_pftop.php:156 +msgid "Peak" +msgstr "En Yüksek" + +#: usr/local/www/diag_system_pftop.php:157 +msgid "Packet" +msgstr "Paket" + +#: usr/local/www/diag_system_pftop.php:161 +msgid "Source Address" +msgstr "Kaynak Adres" + +#: usr/local/www/diag_system_pftop.php:166 +msgid "Number of States:" +msgstr "Durumların Numarası:" + +#: usr/local/www/system_advanced_misc.php:357 +msgid "On AC Power Mode" +msgstr "Prizde Güç Modu" + +#: usr/local/www/system_advanced_misc.php:365 +msgid "On Battery Power Mode" +msgstr "Bataryada Güç Modu" + +#: usr/local/www/bandwidth_by_ip.php:24 +msgid "Wrong Interface" +msgstr "Hatalı Arabirim" + +#: usr/local/www/services_dhcpv6.php:601 +msgid "Prefix Delegation Size" +msgstr "Ön-Ek Yetkilendirme Boyutu" + +#: usr/local/www/services_dhcpv6.php:846 +msgid "DHCPv6 Static Mappings for this interface." +msgstr "DHCPv6 arabirimi için statik eÅŸlemeler." + +#: usr/local/www/system_authservers.php:217 +msgid "RADIUS Timeout value must be numeric and positive." +msgstr "RADIUS zaman aşımı deÄŸeri pozitif ve tam sayı olmalıdır. " + +#: usr/local/www/system_authservers.php:731 +msgid "Authentication Timeout" +msgstr "Kimlik doÄŸrulamada zaman aşımı" + +#: usr/local/www/system_authservers.php:734 +msgid "" +"This value controls how long, in seconds, that the RADIUS server may take to " +"respond to an authentication request." +msgstr "" +"Bu deÄŸer RADIUS sunucusundan bir kimlik doÄŸrulama isteÄŸinde kaç saniye " +"sürdüğünü kontrol eder." + +#: usr/local/www/system_authservers.php:735 +msgid "If left blank, the default value is 5 seconds." +msgstr "BoÅŸ bırakılması durumunda varsayılan deÄŸer 5 saniyedir." + +#: usr/local/www/system_authservers.php:736 +msgid "" +"NOTE: If you are using an interactive two-factor authentication system, " +"increase this timeout to account for how long it will take the user to " +"receive and enter a token." +msgstr "" +"NOT: İki faktörlü kimlik doÄŸrulama sistemi kullanıyorsanız, hesabın zaman " +"aşımı süresini uzatmak için kullanıcının giriÅŸ yetkisini tekrar alabileceÄŸi " +"bir belirteç girin." + +#: usr/local/www/system_advanced_firewall.php:80 +msgid "The Firewall Adaptive values must be set together." +msgstr "Güvenlik Duvarı Uyarlanabilir deÄŸerleri beraber yapılandırılmalıdır." + +#: usr/local/www/system_advanced_firewall.php:82 +msgid "The Firewall Adaptive Start value must be an integer." +msgstr "Güvenlik Duvarı Uyarlanabilir BaÅŸlangıç deÄŸeri tam sayı olmalıdır." + +#: usr/local/www/system_advanced_firewall.php:85 +msgid "The Firewall Adaptive End value must be an integer." +msgstr "Güvenlik Duvarı Uyarlanabilir BitiÅŸ deÄŸeri tam sayı olmalıdır." + +#: usr/local/www/system_advanced_firewall.php:345 +msgid "Firewall Adaptive Timeouts" +msgstr "Güvenlik Duvarı Uyarlanabilir Zaman aşımları" + +#: usr/local/www/system_advanced_firewall.php:347 +msgid "" +"Timeouts for states can be scaled adaptively as the number of state table " +"entries grows." +msgstr "" +"Durum tablosu girdileri büyüdükçe durumlar için zaman aşımı baÄŸdaşık olarak " +"ölçeklendirilebilir." + +#: usr/local/www/system_advanced_firewall.php:350 +msgid "" +"When the number of state entries exceeds this value, adaptive scaling " +"begins. All timeout values are scaled linearly with factor (adaptive.end - " +"number of states) / (adaptive.end - adaptive.start)." +msgstr "" +"Durum tablosu girdilerinin sayısı bu deÄŸeri aÅŸtığında uyarlanabilir " +"ölçekleme baÅŸlar. Tüm zaman aşımı deÄŸerleri faktörü ile doÄŸrusal ölçeklenir " +"(uyarlanabilir.bitiÅŸ -durum tablosu girdiler sayısı) / (uyarlanabilir bitiÅŸ " +"- uyarlanabilir baÅŸlangıç)." + +#: usr/local/www/system_advanced_firewall.php:354 +msgid "" +"When reaching this number of state entries, all timeout values become zero, " +"effectively purging all state entries immediately. This value is used to " +"define the scale factor, it should not actually be reached (set a lower " +"state limit, see below)." +msgstr "" +"Durum giriÅŸleri bu sayıya ulaÅŸtığında tüm zaman aşımı deÄŸerleri anında " +"sıfırlanır. Bu deÄŸer ölçek faktörü tanımlamak için kullanılır, aslında " +"ulaşılabilir deÄŸildir. (daha düşük durum sınırı ayarlamak için aÅŸağıya " +"bakınız.)" + +#: usr/local/www/system_advanced_firewall.php:356 +msgid "Note: Leave this blank for the default(0)." +msgstr "Not: Varsayılan deÄŸer (0) için boÅŸ bırakın." + +#: usr/local/www/system_advanced_firewall.php:447 +msgid "Bogon Networks" +msgstr "Sahte AÄŸlar" + +# Güncelleme sıklığı +#: usr/local/www/system_advanced_firewall.php:450 +msgid "Update Frequency" +msgstr "GüncelleÅŸtirme sıklığı" + +#: usr/local/www/system_advanced_firewall.php:453 +msgid "Monthly" +msgstr "Aylık" + +#: usr/local/www/system_advanced_firewall.php:454 +msgid "Weekly" +msgstr "Haftalık" + +#: usr/local/www/system_advanced_firewall.php:455 +msgid "Daily" +msgstr "Günlük" + +#: usr/local/www/system_advanced_firewall.php:458 +msgid "" +"The frequency of updating the lists of IP addresses that are reserved (but " +"not RFC 1918) or not yet assigned by IANA." +msgstr "" +"IP adreslerinin listesi güncelleme sıklığı ayrılmış (RFC 1918 hariç) yada " +"IANA tarafından atanamaz." + +#: usr/local/www/services_captiveportal.php:227 +msgid "" +"The NAS-Identifier must be 3-253 characters long and should only contain " +"ASCII characters." +msgstr "" +"NAS-Identifier 3-253 karakter uzunluÄŸunda olmalıdır ve yalnızca ASCII " +"karakterler içermelidir." + +#: usr/local/www/services_captiveportal.php:593 +msgid "Allow only users/groups with 'Captive portal login' privilege set" +msgstr "" +"Sadece kullanıcılar/gruplar a 'Hizmet portalı giriÅŸ' ayrıcalığı ayarlanırsa " +"izin ver" + +#: usr/local/www/services_captiveportal.php:760 +msgid "MAC authentication secret" +msgstr "MAC kimlik doÄŸrulaması gizli" + +#: usr/local/www/services_captiveportal.php:823 +msgid "Accounting Style" +msgstr "Hesap Tazı" + +#: usr/local/www/services_captiveportal.php:824 +msgid "Invert Acct-Input-Octets and Acct-Output-Octets" +msgstr "Acct-Input-Octets ve Acct-Output-Octets ters çevir" + +#: usr/local/www/services_captiveportal.php:825 +msgid "" +"When this is enabled, data counts for RADIUS accounting packets will be " +"taken from the client perspective, not the NAS. Acct-Input-Octets will " +"represent download, and Acct-Output-Octets will represent upload." +msgstr "" +"EtkinleÅŸtirildiÄŸinde, RADIUS hesabında veri miktarı hesap edilirken, NAS " +"trafiÄŸi deÄŸil, client trafiÄŸi dikkate alınacak. Acct-Input-Octets indirilen, " +"Acct-Output-Octets gönderilen veriyi temsil edecek." + +#: usr/local/www/services_captiveportal.php:829 +msgid "NAS Identifier" +msgstr "NAS tanımlayıcısı" + +#: usr/local/www/services_captiveportal.php:831 +msgid "Specify a NAS identifier to override the default value" +msgstr "Varsayılan deÄŸeri geçersiz kılmak için bir NAS kimliÄŸi belirtin" + +#: usr/local/www/pkg_mgr_install.php:193 +msgid "No packages are installed." +msgstr "Yüklü paket yok." + +#: usr/local/www/interfaces_bridge_edit.php:154 +msgid "A member interface passed does not exist in configuration" +msgstr "GeçiÅŸ yapan arabirim üyesi yapılandırmada mevcut deÄŸil" + +#: usr/local/www/status_queues.php:150 +#, fuzzy +msgid "PPS" +msgstr "PPS" + +#: usr/local/www/status_queues.php:152 +msgid "Borrows" +msgstr "Borrow(lar)" + +#: usr/local/www/status_queues.php:153 +msgid "Suspends" +msgstr "Bekletilenler" + +#: usr/local/www/status_queues.php:154 +msgid "Drops" +msgstr "Düşenler" + +#: usr/local/www/status_queues.php:155 +msgid "Length" +msgstr "Uzunlık" + +#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:51 +#, fuzzy +msgid "Int." +msgstr "Int." + +#: usr/local/www/widgets/widgets/log.widget.php:164 +msgid "IF" +msgstr "Arabrm" + +#: usr/local/www/widgets/widgets/log.widget.php:167 +#, fuzzy +msgid "Prot" +msgstr "Prot" + +#: usr/local/www/services_dnsmasq.php:199 +msgid "DNS Query Forwarding" +msgstr "DNS sorgusu iletme" + +#: usr/local/www/services_dnsmasq.php:202 +msgid "Query DNS servers sequentially" +msgstr "DNS sunucularını sırayla sorgular" + +#: usr/local/www/services_dnsmasq.php:203 +#, php-format +msgid "" +"If this option is set, %s DNS Forwarder (dnsmasq) will query the DNS servers " +"sequentially in the order specified (System - General Setup - DNS " +"Servers), rather than all at once in parallel. " +msgstr "" +"Bu seçenek seçili ise, %s DNS Yönlendirici (dnsmasq),(Sistem - Genel " +"Ayarlar - DNS Sunucular), 'de belirtilen DNS sunucularının hepsinde tek " +"seferde paralel sorgu yapmak yerine, sırayla sorgulama yapar. " + +#: usr/local/www/services_dnsmasq.php:212 +msgid "Require domain" +msgstr "Etki alanı gerekli" + +#: usr/local/www/services_dnsmasq.php:213 +#, php-format +msgid "" +"If this option is set, %s DNS Forwarder (dnsmasq) will not forward A or AAAA " +"queries for plain names, without dots or domain parts, to upstream name " +"servers. If the name is not known from /etc/hosts or DHCP then a \"not found" +"\" answer is returned. " +msgstr "" +"EÄŸer bu seçenek ayarlanırsa, %s DNS Yönlendirici (dnsmasq), nokta ya da " +"domain parçaları içermeyen, sade isimlerin A yada AAAA sorgularını, üstdüzey " +"DNS sunucularına yönlendirmeyecek. EÄŸer isim bilinen bir /etc/hosts yada " +"DHCP de deÄŸilse \"not found (bulunamadı)\" cevabı ile geri döner. " + +#: usr/local/www/vpn_ipsec_phase1.php:183 +msgid "" +"A valid remote gateway IPv4 address must be specified or you need to change " +"protocol to IPv6" +msgstr "" +"Geçerli bir uzak aÄŸ geçidi IPv4 aÄŸ adresi belirtilmeli yada Kipi IPv6'ya " +"deÄŸiÅŸtirmelisiniz" + +#: usr/local/www/vpn_ipsec_phase1.php:185 +msgid "" +"A valid remote gateway IPv6 address must be specified or you need to change " +"protocol to IPv4" +msgstr "" +"Geçerli bir uzak aÄŸ geçidi IPv6 aÄŸ adresi belirtilmeli yada Kipi IPv4'e " +"deÄŸiÅŸtirmelisiniz" + +#: usr/local/www/vpn_ipsec_phase1.php:205 +msgid "There is a Phase 2 using IPv6, you cannot use IPv4." +msgstr "2. AÅŸama IPv6 kullanmaktadır, IPv4 kullanamazsınız." + +#: usr/local/www/vpn_ipsec_phase1.php:209 +msgid "There is a Phase 2 using IPv4, you cannot use IPv6." +msgstr "2. AÅŸama IPv4 kullanmaktadır, IPv6 kullanamazsınız." + +#: usr/local/www/vpn_openvpn_server.php:1226 +msgid "IPv4 Local Network/s" +msgstr "IPv4 Yerel AÄŸ(ları)" + +#: usr/local/www/vpn_openvpn_server.php:1230 +msgid "" +"These are the IPv4 networks that will be accessible from the remote " +"endpoint. Expressed as a comma-separated list of one or more CIDR ranges. " +"You may leave this blank if you don't want to add a route to the local " +"network through this tunnel on the remote machine. This is generally set to " +"your LAN network" +msgstr "" +"Uzak uçtan eriÅŸilebilir olacak IPv4 ağı. CIDR aralığı virgülle ayrılmış bir " +"yada daha fazla liste olarak belirtilir. EÄŸer uzak makinada bu tünel içinden " +"yerel aÄŸa bir yönlendirme eklemek istemiyorsanız burayı boÅŸ " +"bırakabilirsiniz. Genel LAN ağınız olarak ayarlıdır." + +#: usr/local/www/vpn_openvpn_server.php:1239 +msgid "IPv6 Local Network/s" +msgstr "IPv6 Yerel AÄŸ(ları)" + +#: usr/local/www/vpn_openvpn_server.php:1243 +msgid "" +"These are the IPv6 networks that will be accessible from the remote " +"endpoint. Expressed as a comma-separated list of one or more IP/PREFIX. You " +"may leave this blank if you don't want to add a route to the local network " +"through this tunnel on the remote machine. This is generally set to your LAN " +"network" +msgstr "" +"Uzak uçtan eriÅŸilebilir olacak IPv6 ağı. IP/PREFIX virgülle ayrılmış bir " +"yada daha fazla liste olarak belirtilir. EÄŸer uzak makinada bu tünel içinden " +"yerel aÄŸa bir yönlendirme eklemek istemiyorsanız burayı boÅŸ " +"bırakabilirsiniz. Genel LAN ağınız olarak ayarlıdır." + +#: usr/local/www/vpn_openvpn_server.php:1256 +msgid "" +"These are the IPv4 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more CIDR ranges. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank if you don't want a site-to-site VPN" +msgstr "" +"Yönlendirme tablolarında elle deÄŸiÅŸiklik yapmadan alanlar arası sanal özel " +"IPv4 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek " +"bir aÄŸdır. CIDR aralığı virgülle ayrılmış bir yada daha fazla liste olarak " +"girilir. EÄŸer bu alanlar arası bir VPN ise buraya uzak LAN'ı giriniz. EÄŸer " +"alanlar arası VPN istemiyorsanız burayı boÅŸ bırakabilirsiniz." + +#: usr/local/www/vpn_openvpn_server.php:1270 +msgid "" +"These are the IPv6 networks that will be routed through the tunnel, so that " +"a site-to-site VPN can be established without manually changing the routing " +"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If " +"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " +"blank if you don't want a site-to-site VPN" +msgstr "" +"Yönlendirme tablolarında elle deÄŸiÅŸiklik yapmadan alanlar arası sanal özel " +"IPv6 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek " +"bir aÄŸdır. IP/PREFIX virgülle ayrılmış bir yada daha fazla liste olarak " +"girilir. EÄŸer bu alanlar arası bir VPN ise buraya uzak LAN'ı giriniz. EÄŸer " +"alanlar arası VPN istemiyorsanız burayı boÅŸ bırakabilirsiniz." + +#: usr/local/www/vpn_openvpn_server.php:1405 +msgid "Topology" +msgstr "Topoloji" + +#: usr/local/www/vpn_openvpn_server.php:1415 +msgid "" +"Allocate only one IP per client (topology subnet), rather than an isolated " +"subnet per client (topology net30)." +msgstr "" +"İstemci başına IP yi paylaÅŸtır (altaÄŸ tapoloji), yerine ise istemci başına " +"izole edilmiÅŸ altaÄŸ koy (tapoloji net30)." + +#: usr/local/www/vpn_openvpn_server.php:1422 +msgid "" +"Relevant when supplying a virtual adapter IP address to clients when using " +"tun mode on IPv4." +msgstr "" +"IPv4 tünel kipinde istemciler için uygun sanal baÄŸdaÅŸtırıcı IP adresi " +"saÄŸlar." + +#: usr/local/www/vpn_openvpn_server.php:1423 +msgid "" +"Some clients may require this even for IPv6, such as OpenVPN Connect (iOS/" +"Android). Others may break if it is present, such as older versions of " +"OpenVPN or clients such as Yealink phones." +msgstr "" +"BaÄŸzı istemciler IPv6 ihtiyacı duyabilir, OpenVPN baÄŸlantısı (iOS/Android) " +"gibi. DiÄŸer eski versiyonlar mevcutsa (OpenVPN istemcileri yada Yealink " +"telefonlar gibi) bu durumu bozabilir." + +#: usr/local/www/vpn_ipsec_phase2.php:133 +msgid "" +"A valid local network IPv4 address must be specified or you need to change " +"Mode to IPv6" +msgstr "" +"Geçerli bir yerel IPv4 aÄŸ adresi belirtilmeli yada Kipi IPv6'ya " +"deÄŸiÅŸtirmelisiniz" + +#: usr/local/www/vpn_ipsec_phase2.php:135 +msgid "" +"A valid local network IPv6 address must be specified or you need to change " +"Mode to IPv4" +msgstr "" +"Geçerli bir yerel IPv6 aÄŸ adresi belirtilmeli yada Kipi IPv4'e " +"deÄŸiÅŸtirmelisiniz" + +#: usr/local/www/vpn_ipsec_phase2.php:159 +msgid "" +"A valid NAT local network IPv4 address must be specified or you need to " +"change Mode to IPv6" +msgstr "" +"Geçerli bir NAT yerel IPv4 aÄŸ adresi belirtilmeli yada Kipi IPv6'ya " +"deÄŸiÅŸtirmelisiniz" + +#: usr/local/www/vpn_ipsec_phase2.php:161 +msgid "" +"A valid NAT local network IPv6 address must be specified or you need to " +"change Mode to IPv4" +msgstr "" +"Geçerli bir NAT yerel IPv6 aÄŸ adresi belirtilmeli yada Kipi IPv4'e " +"deÄŸiÅŸtirmelisiniz" + +#: usr/local/www/vpn_ipsec_phase2.php:183 +msgid "" +"A valid remote network IPv4 address must be specified or you need to change " +"Mode to IPv6" +msgstr "" +"Geçerli bir uzak IPv4 aÄŸ adresi belirtilmeli yada Kipi IPv6'ya " +"deÄŸiÅŸtirmelisiniz" + +#: usr/local/www/vpn_ipsec_phase2.php:185 +msgid "" +"A valid remote network IPv6 address must be specified or you need to change " +"Mode to IPv4" +msgstr "" +"Geçerli bir uzak IPv6 aÄŸ adresi belirtilmeli yada Kipi IPv4'e " +"deÄŸiÅŸtirmelisiniz" + +#: usr/local/www/vpn_ipsec_phase2.php:192 +msgid "Mobile IPsec only supports Tunnel mode." +msgstr "Mobil IPsec yalnızca tünel modu destekler." + +#: usr/local/www/vpn_ipsec_phase2.php:287 +msgid "Phase 1 is using IPv4. You cannot use Tunnel IPv6 on Phase 2." +msgstr "" +"1. aÅŸamada IPv4 kullanılmaktadır, 2. aÅŸamada IPv6 tüneli kullanamazsınız." + +#: usr/local/www/vpn_ipsec_phase2.php:289 +msgid "Phase 1 is using IPv6. You cannot use Tunnel IPv4 on Phase 2." +msgstr "" +"1. aÅŸamada IPv6 kullanılmaktadır, 2. aÅŸamada IPv4 tüneli kullanamazsınız." + +#: usr/local/www/interfaces_assign.php:210 +#, php-format +msgid "" +"You cannot set port %s to interface %s because this interface is a member of " +"%s." +msgstr "%s port %s arabirimi üyesi olduÄŸundan %s arabirimi için kullanılamaz." + +#: usr/local/www/services_snmp.php:395 +#, fuzzy +msgid "UCD" +msgstr "UCD" + +#: usr/local/www/services_snmp.php:397 +msgid "Regex" +msgstr "Düzenli ifade" + +#: usr/local/www/interfaces.php:553 +msgid "This IPv4 address is being used by another interface or VIP." +msgstr "Bu IPv4 adresi baÅŸka bir arabirim veya VIP tarafından kullanılıyor." + +#: usr/local/www/interfaces.php:557 +msgid "This IPv4 address conflicts with a Static Route." +msgstr "Bu IPv4 adresi statik yönlendirme ile çakışmaya neden olmaktadır." + +#: usr/local/www/interfaces.php:568 +msgid "This IPv6 address is being used by another interface or VIP." +msgstr "Bu IPv6 adresi baÅŸka bir arabirim veya VIP tarafından kullanılıyor." + +#: usr/local/www/interfaces.php:572 +msgid "This IPv6 address conflicts with a Static Route." +msgstr "Bu IPv6 adresi statik yönlendirme ile çakışmaya neden olmaktadır." + +#: usr/local/www/interfaces.php:2651 +msgid "" +"Note: The update frequency can be changed under System->Advanced Firewall/" +"NAT settings." +msgstr "" +"Not: Güncelleme sıklığı Sistem -> GeliÅŸmiÅŸ -> Firewall/NAT menüsünden " +"yapılabilir." + +#: etc/inc/priv/user.priv.inc:6 +msgid "User - Services - Captive portal login" +msgstr "Kullanıcı - Servisler - Captive Portal giriÅŸi" + +#: etc/inc/priv/user.priv.inc:7 +msgid "Indicates whether the user is able to login on the captive portal." +msgstr "" +"Kullanıcının Captive portal'a giriÅŸinin mümkün olup olmadığını gösterir." + +#: etc/inc/pkg-utils.inc:617 etc/inc/pkg-utils.inc:618 +#, php-format +msgid "Package %s is not supported on this version." +msgstr "%s paketi, bu versiyonda desteklenmiyor." + +#: etc/inc/priv.defs.inc:732 +msgid "WebCfg - Services: Captive portal: Allowed Hostnames page" +msgstr "" +"WebCfg - Servisler: Capitve portal: İzin verilen Ana Bilgisayarlar sayfası" + +#: etc/inc/priv.defs.inc:733 etc/inc/priv.defs.inc:739 +msgid "Allow access to the 'Services: Captive portal: Allowed Hostnames' page." +msgstr "" +"'Servisler: Hizmet Portalı: İzin verilen Ana Bilgisayar adları' sayfasına " +"eriÅŸime izin ver." + +#: etc/inc/priv.defs.inc:738 +msgid "WebCfg - Services: Captive portal: Edit Allowed Hostnames page" +msgstr "" +"WebCfg - Servisler: Hizmet Portalı: İzin verilen Ana Bilgisayar sayfasını " +"düzenle" + +#: etc/inc/priv.defs.inc:1136 +msgid "WebCfg - System: User Manager: settings page" +msgstr "WebCfg - Sistem: Kullanıcı Yönetimi: ayarlar sayfası" + +#: etc/inc/priv.defs.inc:1137 +msgid "Allow access to the 'System: User Manager: settings' page." +msgstr "'Sistem: Kullanıcı Yönetimi: ayarlar' sayfasına eriÅŸime izin ver." + +#: etc/inc/interfaces.inc:294 +#, php-format +msgid "interface_qinq_configure called with invalid if.%s" +msgstr "interface_qinq_configure adlandırılan geçersiz %s" + +#: etc/inc/interfaces.inc:401 +msgid "Creating wireless clone interfaces..." +msgstr "Kablosuz klon arabirimleri oluÅŸturuluyor..." + +#: etc/inc/interfaces.inc:1139 +msgid "Wrong parameters used during interface_bring_down" +msgstr "interface_bring_down sırasında kullanılan parametreler yanlış" + +#: etc/inc/services.inc:2013 +#, php-format +msgid "Removed cron job for %s" +msgstr "%s zamanlanmış görevlerden kaldırıldı" + +#: etc/inc/openvpn.inc:257 +#, php-format +msgid "The field '%s' must contain a single valid %s CIDR range." +msgstr "%s alanı geçerli bir %s CIDR aralığı içermelidir." + +#: etc/inc/openvpn.inc:269 +#, php-format +msgid "" +"The field '%s' must contain only valid %s CIDR range(s) separated by commas." +msgstr "" +"%s alanı geçerli bir %s virgül ile ayrılmış CIDR aralık(ları) içermelidir." + +#: etc/inc/vpn.inc:1780 +#, php-format +msgid "" +"Removing SPDs from tunnel gw '%1$s'. Local Subnet '%2$s' and Remote Subnet " +"'%3$s'. Reloading policy" +msgstr "" +"SPD(ler) aÄŸ geçidi tünelinden siliniyor '%1$s'. Yerel AltaÄŸ '%2$s' ve Uzak " +"AltaÄŸ '%3$s'. ilkeler tekrar yükleniyor" + +#: etc/inc/pfsense-utils.inc:938 +msgid "Disabling auto login was not possible." +msgstr "Otomatik giriÅŸ mümkün olmadığı için devre dışı bırakıldı." + +#: etc/inc/pfsense-utils.inc:956 +msgid "Enabled console auto login, console menu is NOT password protected." +msgstr "" +"Konsola otomatik giriÅŸ açık, konsol menüsüne giriÅŸ ÅŸifre ile " +"korunmamaktadır." + +#: etc/inc/pfsense-utils.inc:958 +msgid "Disabled console auto login, console menu is password protected." +msgstr "" +"Konsola otomatik giriÅŸ kapalı, konsol menüsüne giriÅŸ ÅŸifre ile " +"korunmaktadır." diff --git a/usr/local/share/mobile-broadband-provider-info/iso_3166-1_list_en.xml b/usr/local/share/mobile-broadband-provider-info/iso_3166-1_list_en.xml new file mode 100755 index 000000000..44c5a627b --- /dev/null +++ b/usr/local/share/mobile-broadband-provider-info/iso_3166-1_list_en.xml @@ -0,0 +1,987 @@ + + + + AFGHANISTAN + AF + + + ÅLAND ISLANDS + AX + + + ALBANIA + AL + + + ALGERIA + DZ + + + AMERICAN SAMOA + AS + + + ANDORRA + AD + + + ANGOLA + AO + + + ANGUILLA + AI + + + ANTARCTICA + AQ + + + ANTIGUA AND BARBUDA + AG + + + ARGENTINA + AR + + + ARMENIA + AM + + + ARUBA + AW + + + AUSTRALIA + AU + + + AUSTRIA + AT + + + AZERBAIJAN + AZ + + + BAHAMAS + BS + + + BAHRAIN + BH + + + BANGLADESH + BD + + + BARBADOS + BB + + + BELARUS + BY + + + BELGIUM + BE + + + BELIZE + BZ + + + BENIN + BJ + + + BERMUDA + BM + + + BHUTAN + BT + + + BOLIVIA, PLURINATIONAL STATE OF + BO + + + BOSNIA AND HERZEGOVINA + BA + + + BOTSWANA + BW + + + BOUVET ISLAND + BV + + + BRAZIL + BR + + + BRITISH INDIAN OCEAN TERRITORY + IO + + + BRUNEI DARUSSALAM + BN + + + BULGARIA + BG + + + BURKINA FASO + BF + + + BURUNDI + BI + + + CAMBODIA + KH + + + CAMEROON + CM + + + CANADA + CA + + + CAPE VERDE + CV + + + CAYMAN ISLANDS + KY + + + CENTRAL AFRICAN REPUBLIC + CF + + + CHAD + TD + + + CHILE + CL + + + CHINA + CN + + + CHRISTMAS ISLAND + CX + + + COCOS (KEELING) ISLANDS + CC + + + COLOMBIA + CO + + + COMOROS + KM + + + CONGO + CG + + + CONGO, THE DEMOCRATIC REPUBLIC OF THE + CD + + + COOK ISLANDS + CK + + + COSTA RICA + CR + + + CÔTE D'IVOIRE + CI + + + CROATIA + HR + + + CUBA + CU + + + CYPRUS + CY + + + CZECH REPUBLIC + CZ + + + DENMARK + DK + + + DJIBOUTI + DJ + + + DOMINICA + DM + + + DOMINICAN REPUBLIC + DO + + + ECUADOR + EC + + + EGYPT + EG + + + EL SALVADOR + SV + + + EQUATORIAL GUINEA + GQ + + + ERITREA + ER + + + ESTONIA + EE + + + ETHIOPIA + ET + + + FALKLAND ISLANDS (MALVINAS) + FK + + + FAROE ISLANDS + FO + + + FIJI + FJ + + + FINLAND + FI + + + FRANCE + FR + + + FRENCH GUIANA + GF + + + FRENCH POLYNESIA + PF + + + FRENCH SOUTHERN TERRITORIES + TF + + + GABON + GA + + + GAMBIA + GM + + + GEORGIA + GE + + + GERMANY + DE + + + GHANA + GH + + + GIBRALTAR + GI + + + GREECE + GR + + + GREENLAND + GL + + + GRENADA + GD + + + GUADELOUPE + GP + + + GUAM + GU + + + GUATEMALA + GT + + + GUERNSEY + GG + + + GUINEA + GN + + + GUINEA-BISSAU + GW + + + GUYANA + GY + + + HAITI + HT + + + HEARD ISLAND AND MCDONALD ISLANDS + HM + + + HOLY SEE (VATICAN CITY STATE) + VA + + + HONDURAS + HN + + + HONG KONG + HK + + + HUNGARY + HU + + + ICELAND + IS + + + INDIA + IN + + + INDONESIA + ID + + + IRAN, ISLAMIC REPUBLIC OF + IR + + + IRAQ + IQ + + + IRELAND + IE + + + ISLE OF MAN + IM + + + ISRAEL + IL + + + ITALY + IT + + + JAMAICA + JM + + + JAPAN + JP + + + JERSEY + JE + + + JORDAN + JO + + + KAZAKHSTAN + KZ + + + KENYA + KE + + + KIRIBATI + KI + + + KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF + KP + + + KOREA, REPUBLIC OF + KR + + + KUWAIT + KW + + + KYRGYZSTAN + KG + + + LAO PEOPLE'S DEMOCRATIC REPUBLIC + LA + + + LATVIA + LV + + + LEBANON + LB + + + LESOTHO + LS + + + LIBERIA + LR + + + LIBYAN ARAB JAMAHIRIYA + LY + + + LIECHTENSTEIN + LI + + + LITHUANIA + LT + + + LUXEMBOURG + LU + + + MACAO + MO + + + MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF + MK + + + MADAGASCAR + MG + + + MALAWI + MW + + + MALAYSIA + MY + + + MALDIVES + MV + + + MALI + ML + + + MALTA + MT + + + MARSHALL ISLANDS + MH + + + MARTINIQUE + MQ + + + MAURITANIA + MR + + + MAURITIUS + MU + + + MAYOTTE + YT + + + MEXICO + MX + + + MICRONESIA, FEDERATED STATES OF + FM + + + MOLDOVA, REPUBLIC OF + MD + + + MONACO + MC + + + MONGOLIA + MN + + + MONTENEGRO + ME + + + MONTSERRAT + MS + + + MOROCCO + MA + + + MOZAMBIQUE + MZ + + + MYANMAR + MM + + + NAMIBIA + NA + + + NAURU + NR + + + NEPAL + NP + + + NETHERLANDS + NL + + + NETHERLANDS ANTILLES + AN + + + NEW CALEDONIA + NC + + + NEW ZEALAND + NZ + + + NICARAGUA + NI + + + NIGER + NE + + + NIGERIA + NG + + + NIUE + NU + + + NORFOLK ISLAND + NF + + + NORTHERN MARIANA ISLANDS + MP + + + NORWAY + NO + + + OMAN + OM + + + PAKISTAN + PK + + + PALAU + PW + + + PALESTINIAN TERRITORY, OCCUPIED + PS + + + PANAMA + PA + + + PAPUA NEW GUINEA + PG + + + PARAGUAY + PY + + + PERU + PE + + + PHILIPPINES + PH + + + PITCAIRN + PN + + + POLAND + PL + + + PORTUGAL + PT + + + PUERTO RICO + PR + + + QATAR + QA + + + REUNION + RE + + + ROMANIA + RO + + + RUSSIAN FEDERATION + RU + + + RWANDA + RW + + + SAINT BARTHÉLEMY + BL + + + SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA + SH + + + SAINT KITTS AND NEVIS + KN + + + SAINT LUCIA + LC + + + SAINT MARTIN + MF + + + SAINT PIERRE AND MIQUELON + PM + + + SAINT VINCENT AND THE GRENADINES + VC + + + SAMOA + WS + + + SAN MARINO + SM + + + SAO TOME AND PRINCIPE + ST + + + SAUDI ARABIA + SA + + + SENEGAL + SN + + + SERBIA + RS + + + SEYCHELLES + SC + + + SIERRA LEONE + SL + + + SINGAPORE + SG + + + SLOVAKIA + SK + + + SLOVENIA + SI + + + SOLOMON ISLANDS + SB + + + SOMALIA + SO + + + SOUTH AFRICA + ZA + + + SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS + GS + + + SPAIN + ES + + + SRI LANKA + LK + + + SUDAN + SD + + + SURINAME + SR + + + SVALBARD AND JAN MAYEN + SJ + + + SWAZILAND + SZ + + + SWEDEN + SE + + + SWITZERLAND + CH + + + SYRIAN ARAB REPUBLIC + SY + + + TAIWAN, PROVINCE OF CHINA + TW + + + TAJIKISTAN + TJ + + + TANZANIA, UNITED REPUBLIC OF + TZ + + + THAILAND + TH + + + TIMOR-LESTE + TL + + + TOGO + TG + + + TOKELAU + TK + + + TONGA + TO + + + TRINIDAD AND TOBAGO + TT + + + TUNISIA + TN + + + TURKEY + TR + + + TURKMENISTAN + TM + + + TURKS AND CAICOS ISLANDS + TC + + + TUVALU + TV + + + UGANDA + UG + + + UKRAINE + UA + + + UNITED ARAB EMIRATES + AE + + + UNITED KINGDOM + GB + + + UNITED STATES + US + + + UNITED STATES MINOR OUTLYING ISLANDS + UM + + + URUGUAY + UY + + + UZBEKISTAN + UZ + + + VANUATU + VU + + + VENEZUELA, BOLIVARIAN REPUBLIC OF + VE + + + VIET NAM + VN + + + VIRGIN ISLANDS, BRITISH + VG + + + VIRGIN ISLANDS, U.S. + VI + + + WALLIS AND FUTUNA + WF + + + WESTERN SAHARA + EH + + + YEMEN + YE + + + ZAMBIA + ZM + + + ZIMBABWE + ZW + + diff --git a/usr/local/share/mobile-broadband-provider-info/serviceproviders.xml b/usr/local/share/mobile-broadband-provider-info/serviceproviders.xml new file mode 100644 index 000000000..cff4e735e --- /dev/null +++ b/usr/local/share/mobile-broadband-provider-info/serviceproviders.xml @@ -0,0 +1,11614 @@ + + + + + + + + + + + + + + Etisalat + + + + + + Etisalat + mnet + mnet + 194.170.1.6 + 194.170.1.7 + + + + + Etisalat 3G + etisalat.ae + etisalat.ae + + + + + du + + + + *#100# + + + + + + + + + + + + + AWCC + + + + + + awcc + 1111 + + + + + + + + + Vodafone + + + + + + TWA + + + + + Vodafone Web + + + + + + + + + Beeline + + + + + + internet + internet + + + + + Orange + + + + + + Internet Hima (USB) + + + + + Mobile Broadband + + + + + VivaCell/MTS + + + + + + MTS connect + + + + + Mobile Broadband + + + + + Karabakh Telecom + + + + *122# + + + *123*CODE# + + + + + KT_MARK + + + + + + + + + + Movinet + + uname + + + + Unitel + + + + + + + + + + + + + + Personal + + + + + + + GPRS + gprs + adgj + 172.25.7.6 + 172.25.7.7 + + + + + DATOS + datos + datos + + + + + Arnet + + + + + + 172.25.7.6 + 172.25.7.7 + + + + + Claro + + + + + + + + 3G Internet + clarogprs + clarogprs999 + 170.51.255.100 + 170.51.242.18 + + + + + GPRS + clarogprs + clarogprs999 + + + + + Movistar + + + + + + + WAP + wap + wap + + + + + Internet + Internet + Internet + + + + + + + + + A1/Telekom Austria + + + + + + + A1 Breitband + ppp@a1plus.at + ppp + 194.48.124.202 + 194.48.124.200 + + + + + + aon (Flex, Breitband-Duo, BusinessFlex) + mobile@aon.at + ppp + + + + + + aonMobile + mobile@aon.at + ppp + + + + + ABroadband + + + + + + International Roaming + mdata@mdata.com + ppp + + + + + Bob + + + + + + data@bob.at + ppp + + + + + ppp@bob.at + ppp + 194.48.139.254 + 194.48.124.200 + + + + + data@bob.at + ppp + + + + + T-Mobile + + + + + + WAP + t-mobile + tm + + + + + Internet + t-mobile + tm + 213.162.69.169 + 213.162.65.1 + + + + + Business Internet + t-mobile + tm + + + + + tele.ring + + + + *102# + + + + + Ge org:) + web@telering.at + web + 213.162.69.170 + 213.162.65.2 + + + + + Orange + + + + + + OneNet Web + web + web + 194.24.128.100 + 194.24.128.102 + + + + + Orange WAP + wap + wap + + + + + Orange MMS + mms + mms + + + + + Web (no filtering) + web + web + + + + + Orange Web + Orange + Orange + 81.3.216.100 + 194.24.128.100 + + + + + Orange Web + mms + mms + + + + + Drei (3) + Drei + + + + + + 213.94.78.17 + 213.94.78.16 + + + + + Yesss + + + + + + + + + + + VOLmobil + + + + + + + + + + + + + + + Amaysim + + + + + + + + Apex Telecom + + + + + + + Beagle + + + + + + + + BLiNK + + + + BLiNK (services after 04/08/09) + + + BLiNK (services prior to 04/08/09) + + + + + Crazy John's + + + + + + + Crazy NET + 203.21.112.40 + 203.21.113.40 + + + + + Crazy WAP/MMS + + + + + Dodo + + + + + Postpaid + + + Prepaid + + + + + Escape Net + + + + + + + Exetel + + + + + Exetel (Optus Based HSPA plans) + + + Exetel (Optus Based CAP Plans) not iPhone + + + Exetel (Optus Based CAP Plans) not iPhone + + + Exetel (Optus Based CAP Plans) iPhone + + + + + Exetel (Vodafone based) + + + + Exetel (Vodafone Based) + + + + + + Highway1 + + + + + + + iiNet + + + + + + + + + + + Internode + + + + + + + NodeMobile Data + + + + + Old NodeMobile Data (before 2009-08-26) + + + + + iPrimus + + + + + + + + Optus + + + + + + Mobile Internet (handsets) + 211.29.132.12 + 198.142.0.51 + + + + + Optus Yes Internet + 211.29.132.12 + 198.142.0.51 + + + + + Wireless Broadband + 211.29.132.12 + 198.142.0.51 + + + + + Post-Paid Mobile Broadband + 211.29.132.12 + 198.142.0.51 + + + + + Pre-Paid Mobile Broadband + 211.29.132.12 + 198.142.0.51 + + + + + Optus MMS + + + + + TPG Mobile + + + + TPG (iPhone) + + + + + TPG (all except iPhone) + + + + + MMS + + + + + + Pennytel + + + + + Pennytel (Vodafone) live.vodafone.com + + + Pennytel (Vodafone) vfinternet.au + + + + + Smelly Black Dog + + + + + + + Telstra + + + + 125111 + 1258888 + *100# + + + + + 139.130.4.4 + 203.50.2.71 + + + + + Telstra (3G data pack) + Telstra + 139.130.4.4 + 203.50.2.71 + + + + + Telstra (Next G) + 10.4.85.138 + 10.4.176.234 + + + + + Telstra (3G PC pack - pay by time) + Telstra + 139.130.4.4 + 203.50.2.71 + + + + + Telstra Internet/Wap + + + + + Telstra MMS + + + + + Telstra BigPond + + + + + + Three + + + + + + a + a + 202.124.68.130 + 202.124.76.66 + + + + + Three Prepaid + a + a + 202.124.68.130 + 202.124.76.66 + + + + + Virgin Mobile + + + + + + Mobile Internet + guest + guest + 61.88.88.88 + + + + + Mobile Broadband + + + + + Vodafone + + + + + + + Postpaid and some prepaid phone plans + + + + + + + Prepaid + + + 203.21.112.40 + 203.21.113.40 + + + + + Vodafone Internet + + + + + Westnet + + + + + Westnet (iPhone) + + + Westnet (all except iPhone) + + + + + + + + + Azercell + + + + + + + + + + Bakcell + + + + + + + + + + Azerfon + + + + *100#3# + + + + + + + + + + + + + BH GSM + + + + + + + + + + m:tel + + + + *101# + + + + + Package 1 + 81.93.67.2 + 81.93.67.3 + + + + + Package 2 + 81.93.67.2 + 81.93.67.3 + + + + + Package 3 + 81.93.67.2 + 81.93.67.3 + + + + + Package 4 + 81.93.67.2 + 81.93.67.3 + + + + + Prepaid + 81.93.67.2 + 81.93.67.3 + + + + + HT-ERONET + + + + *101# + + + + + + + + + + + + + Digicel + + + + + + + + + + + + + + Robi (AKTel) + + + + + + Internet + 192.168.23.7 + + + + + Banglalink + + + + + + Web + 10.10.55.34 + + + + + GrameenPhone + + + + + + 202.56.4.120 + 202.56.4.121 + + + + + Warid + + + + + + Internet + 10.6.0.2 + + + + + Citycell + + waps + waps + 117.18.224.146 + 117.18.224.147 + + + + + + + + + Mobistar + + + 5555 + + #123# + + + + + Business + mobistar + mobistar + 212.65.63.10 + 212.65.63.145 + + + + + Personal + mobistar + mobistar + 212.65.63.10 + 212.65.63.145 + + + + + Internet Everywhere + mobistar + mobistar + 212.224.255.252 + 212.65.63.217 + + + + + mobistar + mobistar + 212.65.63.10 + 212.65.63.145 + + + + + Telenet Mobile + + + + + + Old Walk & Surf + + + + + Walk & Talk + + + + + Walk & Surf + + + + + Orange + + + + + + + + + + Proximus + + + 1230 + + + + + Inter + 195.238.2.21 + 81.169.60.107 + + + + + Intra + 195.238.2.21 + 195.238.2.22 + + + + + Base + + + 1933 + + + + + base + base + 195.130.131.139 + 212.53.4.4 + + + + + Mobile Vikings + + + 1933 + + + + web + web + + + + + + + + + Airtel 3G + + + + + + + + + + + + + + GloBul + + + 120 + + *125# + + + + + globul + 192.168.88.11 + + + + + M-Tel + + + 131 + + *101# + + + + + + 213.226.7.34 + 213.226.7.35 + + + + + Vivacom + + + 110 + + *102# + + + + + + Vivacom Internet (Postpaid) + vivacom + vivacom + + + + + Vivatel (old) + vivatel + vivatel + 192.168.123.123 + + + + + + + + + Batelco + + + + + + oNet + wap + wap + + + + + Zain BH + + + + + + Internet + internet + internet + + + + + eGO + hsdpa + hsdpa + + + + + STC + + + + + + Viva + + + + + + + + + + Brasil Telecom + + + + + + BrT + BrT + + + + + Claro + + + *100 + + *544# + *545# + *546# + + + + + claro + claro + + + + + 3G + claro + claro + + + + + CTBC + + + + + + + *22 + + + + + ctbc + 1212 + + + + + Oi + + + + + *100 + + *804 + *805 + + + + + oioioi + + + + + WAP + oiwap + oioioi + + + + + TIM + + + + + + *100 + + *222# + *222 + + + + + tim + tim + 10.223.246.102 + 10.223.246.103 + + + + + Velox + + + + + iesgprs + iesgprs2002 + 66.36.250.14 + + + + + Vivo + + + + + + *555 + + *8000 + *5005 + + + + + vivo + vivo + + + + + + + + + Batelco + + + + + + + + + + + + + + B-Mobile + + + + + + + + + + DSTCOM + + + + + + wap + wap + + + + + + + + + + velcom + + + + *100# + + + + + GPRS WAP + wap + wap + + + + + GPRS WEB + web + web + + + + + GPRS WEB PLUS + plus + plus + + + + + GPRS PRIVET + privet + privet + + + + + WEB BASIC + web1 + web1 + + + + + WEB 25 + web2 + web2 + + + + + WEB 150 + web3 + web3 + + + + + WEB 500 + vmi + vmi + + + + + MTS + + + + *100# + + + + + mts + mts + + + + + + life:) + + + + *100# + + + + + + + + + + + + + Mascom Wireless + + + + + + + + + + + + + + Leo/UCom + + + + + + + + + + Tempo/Africell + + + + + + + + + + + + + + Fido + + + + + + fido + fido + 204.92.15.211 + 207.181.101.4 + + + + + Rogers + + + + + + wapuser1 + wap + 207.181.101.4 + 207.181.101.5 + + + + + Bell Mobility + + + + + + + + + Internet + + + + + Mobile Web + + + + + Mobile Fast Web + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Telus Mobility + + + + + + + + Internet + + + + + Internet (with VPN) + + + + + Blackberry + + + + + Mobile Web/Smartphone + + + + + + + + + + + + + + Virgin Mobile + + + + SaskTel + + + + + + + Vidéotron + + + + + + + Telephony data + + + + + IHVM + + + + + WIND Mobile + + + + + + Laptop (data stick) + + + + + Mobile (add-on for phone) + + + + + Mobilicity + + + + + + Mobile Web + + + + + Mobile Broadband + + + + + + + + + Vodacom + + + + + + vodalive + 172.24.97.1 + + + + + + + + + + + + + Orange + + + + + + Internet Everywhere - Standard + 213.55.128.1 + 213.55.128.2 + + + + + Internet Everywhere - Prepaid + 213.55.128.1 + 213.55.128.2 + + + + + Internet Everywhere - Intranet Access + + + Internet Everywhere - Postpaid + + + + + Sunrise + + + + + + internet + internet + 194.230.1.103 + 194.230.1.71 + + + wap + wap + + + mms + mms + + + + + Swisscom + + + + + + *130# + + + *123*CODE# + + + + + Swisscom GPRS + 138.188.101.189 + 138.188.101.186 + + + + + Swisscom CAA + testprofil + temporary + + + + + Swisscom MMS + + + + + M-Budget + + + + *#100# + + + + + Migros Data + + + + + + + + + MTN + + + + + + 172.16.100.5 + + + + + + + + + Claro Chile + + + + + + clarochile + clarochile + + + + + Prepago + clarochile + clarochile + + + + + WAP + clarochile + clarochile + + + + + Entel PCS + + + + + + Contract / Prepaid / WebSession + entelpcs + entelpcs + + + + + WAP + entelpcs + entelpcs + + + + + Movistar + + + + + + Web + web + web + + + + + WAP + wap + wap + + + + + + + + + Orange + + + + + + orange + orange + + + + + MTN + + + + + + guest + guest + + + + + + + + + China Mobile + + + + + + + WAP + guest + guest + + + + + Internet + guest + guest + 211.136.20.203 + + + + + China Unicom + + + + + + uninet + + + + + China Telecom + + ctnet@mycdma.cn + vnet.mobi + + + + + + + + + + IceCelular + + + + + + + guest + guest + 208.133.206.44 + + + + + Kolbi + + + 190 + + 1150 + + + + + Kolbi 3g + + + + + + + + + Claro + + + + + + COMCELWEB + COMCELWEB + + + + + eTb + + + + + etb + etb + + + + + Movistar + + + + + + + movistar + movistar + + + + + Tigo + + + + + + + + + + + Uff + + + + + + + + + + UNE + + + + + + + une + une + + + + + LTE (4G) + + + + + + Virgin Mobile + + + + + + + + + + + + + + Cytamobile-Vodafone + + + + *#109# + + + + + Contract + + + + + Prepaid + + + + + MTN + + + + + + wap + wap + + + + + + + + + Vodafone + + + + *22# + + + + + 217.77.161.130 + 217.77.161.131 + + + + + O2 + + + + + + 160.218.10.200 + 160.218.43.200 + + + + + 160.218.10.200 + 160.218.43.200 + + + + + Prepaid + + + + + T-Mobile + + + + + + 62.141.0.1 + 213.162.65.1 + + + + + + + + + AldiTalk/MedionMobile + + + + + 9911 + + *100# + + + *104*CODE# + + + + + Volume rate/30 Day Flatrate + eplus + gprs + 212.23.97.2 + 212.23.97.3 + + + + + 24 Hour Flatrate + Tages-Flatrate + eplus + gprs + + + + + blau.de + + + + + + + *100# + + + *104*CODE# + + + + + blau + blau + + + + + 24 Hour Flatrate + Tages-Flatrate + blau + blau + + + + + Bild Mobil + + + + + + + BILD Mobilportal + + + + + Contract + 139.7.30.125 + 139.7.30.126 + + + + + + BILDmobil Speedstick (Surfpakete) + + + + + E-Plus + + + + + + + *100# + + + *104*CODE# + + + + + eplus + gprs + 212.23.97.2 + 212.23.97.3 + + + + + O2 + + + + + + 333 + + *101# + + + *103*CODE# + + + + + + LOOP + 193.189.244.225 + 193.189.244.206 + + + + + Pay-by-MB + 195.182.110.132 + 62.134.11.4 + + + + + Pay-by-time + 195.182.110.132 + 62.134.11.4 + + + + + Tchibo-Mobil + + + + + + + *101# + + + *103*CODE# + + + + + Tagesflat / Monats-Flatrate L / Monats-Flatrate XL + + + + + T-Mobile(Telekom) + + + + + 3311 + + *100# + + + *101*CODE# + + + + + t-d1 + 193.254.160.1 + 193.254.160.130 + + + + + t-mobile + tm + 10.74.83.22 + 193.254.160.1 + + + + + Congstar + + + + *100# + + + *101*CODE# + + + + + Prepaid Contracts + t-mobile + tm + 193.254.160.1 + 10.74.83.22 + + + + + Vodafone + + + + + + 5500 + + *100# + + + *100*CODE# + + + + + + 139.7.30.125 + 139.7.30.126 + + + + + WebSessions + vodafone + vodafone + 139.7.30.125 + 139.7.30.126 + + + + + FONIC + + + + + + *101# + + + *103*CODE# + + + + + fonic + fonic + + + + + simyo Internet + + + + + + *100# + + + *104*CODE# + + + + + simyo + simyo + 212.23.97.2 + 212.23.97.3 + + + + + + vistream + + + + *100# + + + + + web + vistream + + + + + solomo + + + + *100# + + + + + web + vistream + + + + + Materna BR + + + + + + web + vistream + + + + + sdt.net + + + + + + web + vistream + + + + + igge & ko + + + + + + web + vistream + + + + + PTT mobile + + + + + + web + vistream + + + + + TouristMobile + + + + + + web + vistream + + + + + SunSIM + + + + *100# + + + + + web + vistream + + + + + SüdkurierTel + + + + + + web + vistream + + + + + NetCologne + + + + + + web + password + + + + + Alice + + + + + + Option Mobile + 193.189.244.225 + 193.189.244.206 + + + + + 1&1 + + + + + + + 5500 + + *100# + + + + + + Mobile Broadband + + + + + Mobile Web + D2 + Web + + + + + Netzclub + + + + + + + + + + Internet + + + + + + + + + 3 + + + + + + BredbÃ¥nd (standard) + + + + + BredbÃ¥nd Premium Kontant + + + + + 3 (standard for mobilkunder; spærret for indgÃ¥ende trafik) + + + + + 3 (statisk IP) + + + + + + OiSTER + + + + + + + Mobile Broadband + + + + + Mobile Internet + + + + + + + ice.net (Nordisk Mobiltelefon) + + cdma + cdma + + + + Telenor + + + + + 20171717 + + *101# + 40454545 + + + + + + 212.88.64.199 + 212.88.64.14 + + + + + + + CBB Mobil + + + + + + + + + + + TDC + + + + 20171717 + + *101# + 40454545 + + + + + + + 194.239.134.83 + 193.162.153.164 + + + + + + + + + + + + + + + Fullrate + + + + + Fullrate + Fullrate + + + + + Telia + + + + 28184000 + + *101# + + + + + + + + + + BiBoB + + + + + + + + + + + Telmore + + + + + + 194.239.134.83 + 193.162.153.164 + + + + + Unotel + + + + + + + + + + happiimobil + + + + + + + + + + + Onfone Internet DK + + + + + + + + + + + + + + Orange + + + *777 + + #131# + + + + + + + + + Claro + + + *99 + + *122# + *22 + + + + + 196.3.81.5 + 196.3.81.132 + + + + + Viva + + + + #111# + *74 + + + + + viva + viva + + + + + + + + + Djezzy + + + + + + + + + + Mobilis + + + + + + internet + internet + + + + + Nedjma + + + + + + WEB + nedjma + nedjma + + + + + + + + + Movistar UMTS + + + + + + movistar + movistar + + + + + Porta 3G + + + + + + + + + + + + + + EMT + + + + + + 217.71.32.116 + 217.71.32.115 + + + + + Nordea + + + + + + + + + + Elisa + + + + + + 194.204.0.1 + + + + + Tele2 + + + + + + wap + wap + + + + + + + + + Vodafone + + + + *878# + + + + + internet + internet + 163.121.128.134 + 212.103.160.18 + + + + + Etisalat + + + + + + + + + + MobiNil + + + + + + 80.75.166.250 + 163.121.163.201 + + + + + + + + + Euskaltel + + + + + + CLIENTE + EUSKALTEL + + + + + Másmovil + + + + + + + + + + móbil R (Mundo-R) + + + + + + + + + + moviData + + + + + + 213.143.33.8 + 62.36.225.150 + + + + + ONO + + + + + + 62.42.230.24 + 62.42.63.52 + + + + + Pepephone + + + + + + Pepephone + + + + + Pepephone (Mobile) + + + + + Orange + + + + + 242 + + *111# + *113# + + + + + + Orange + ORANGE + ORANGE + 85.62.229.133 + 85.62.229.134 + + + + + Simyo/Blau + + + + + + 195.230.105.134 + 195.230.105.135 + + + + + Telecable + + + + + + telecable + telecable + + + + + Movistar (Telefónica) + + + + + 123 + + 2266 + + + + + + + Telefónica + telefonica + telefonica + 194.179.1.100 + 194.179.1.101 + + + + + Movistar (USB modems) + movistar + movistar + + + + + Vodafone (Airtel) + + + + + *138# + + + + + Vodafone + vodafone + vodafone + 212.73.32.96 + 212.73.32.67 + + + + + Airtel (old) + vodafone + vodafone + 212.73.32.3 + 212.73.32.67 + + + + + Yoigo + + + + 633 + + *111# + + + + + + 213.248.76.210 + 213.248.100.54 + + + + + Jazztel + + + + + + 87.216.1.65 + 87.216.1.66 + + + + + Carrefour Móvil + + + + + + + + + + Eroski Móvil + + + + Eroski Móvil GPRS + wap@wap + wap125 + + + + + + + + + Ethio Telecom + + + + *804# + + + + + + 213.55.96.148 + 213.55.96.166 + + + + etc + etc + + + + + + + + Vodafone FO + + + + *#100# + + + + + + + + + + + + + Dna + + + + + *100# + 0800412582 + 14000 + + + + + + dna internet + 217.78.192.22 + 217.78.192.78 + + + + + Dna + + + + + dna internet + + + + + Dna + + + + + dna internet + + + + + Dna + + + + + dna internet + + + + + Elisa + + + 777 + + 080090598 + 18258 + 18258 + + + + + + + + + + Saunalahti + + + + + + 16304 + 15045 + 16304 + 16304 + 16304 + + + + + + Postpaid (contract) NAT (available for all subscribers) + 195.74.0.47 + 195.197.54.100 + + + + + Postpaid (contract) public IP address (needs to be ordered) + 195.74.0.47 + 195.197.54.100 + + + + + Prepaid (no contract) + 195.74.0.47 + 195.197.54.100 + + + + + Sonera + + + + + + 15400 + + + + + + 192.89.123.230 + 192.89.123.231 + + + + + Prointernet (public IP) + 192.89.123.230 + 192.89.123.231 + + + + + Welho + + + + + Wekkula + + + + + + + + + Vodafone / Kidanet + + + + *999# + + + + + + + + + + + + + + + + + + + + + + A Mobile (Auchan Telecom) + + + + + + + + + Bouygues Telecom + + + + + 660 + + 630 + + + + + + Contrat Pro Data Illimité + 62.201.129.99 + + + + + B2Bouygtel + 62.201.129.99 + + + + + Forfait Data + 62.201.129.99 + + + + + Forfait Data + 62.201.129.99 + + + + + Contrat Pro Data + 62.201.129.99 + + + + + Free Mobile + + + + + + + Free-Mobile + free + free + + + + + Free-Mobile + + + + + Orange + + + + + 888 + + #123# + + + + + + Orange Internet + 194.51.3.56 + 194.51.3.76 + + + + + Business Contract + 194.51.3.56 + 194.51.3.76 + + + + + No Contract / Mobicarte + orange + orange + 194.51.3.56 + 194.51.3.76 + + + + + Orange Entreprises + mportail + mib + 172.17.0.2 + 172.17.0.4 + + + + + Orange MMS + orange + orange + + + + + Internet Everywhere 3G + + + + + SFR + + + + + + 9445 + + 123 + + 950 + + + + + + Web / Prepaid + 172.20.2.10 + 172.20.2.39 + + + + + WAP + + + + + SFR internetpro + + + + + SFR ipnet + + + + + Mobile Broadband + 172.20.2.10 + 172.20.2.39 + + + + + Full Internet (Webphone) + + + + + Internet (Neuf Telecom) + + + + + Transatel Telecom + + + + + + + + + + TEN + + + + + + orange + orange + + + + + Pay-by-MB + orange + orange + + + + + + + + + Asda Mobile + + + + + + web + web + + + + + BT Mobile + + + + + + bt + bt + + + + + giffgaff + + + + + 443 + + *100# + + + + + Mobile Broadband + giffgaff + password + + + + + O2 + + + + + 901 + + *#10# + 4444 + + + + + Contract + o2web + password + 193.113.200.200 + 193.113.200.201 + + + + + Contract (faster) + faster + password + 193.113.200.200 + 193.113.200.201 + + + + + Pay and Go (Prepaid) + payandgo + payandgo + + + + + iPhone (Contract) + vertigo + password + + + + + Mobile Broadband + o2bb + password + 82.132.254.2 + 82.132.254.3 + + + + + WAP + o2wap + password + + + + + + TalkTalk + + + 212.183.137.12:8799 + wap + wap + + + + + T-Mobile + + + 222 + + 150 + 150 + 150 + + + + + User + mms + 149.254.201.126 + 149.254.192.126 + + + + + 149.254.230.7 + 149.254.199.126 + + + + + Tesco Mobile + + + + + + + + tescowap + password + 193.113.200.195 + + + + + Virgin Mobile + + + + + + + 196.7.0.138 + 196.7.142.132 + + + + + user + + + + + Vodafone + + + + *#100# + + 121 + + *#1345# + 2345 + + + + + Contract + web + web + 10.206.65.68 + 10.203.65.68 + + + + + Prepaid + web + web + 172.29.1.11 + 172.29.1.11 + + + + + TopUp and Go + web + web + 10.203.129.68 + 10.203.129.68 + + + + + TopUp and Go (older 1GB SIMs) + + + + + 3 + + + + + + Internet + + + + + Handsets + 172.30.139.17 + 172.31.139.17 + + + + + Orange + + + + 123 + + 453 + + + + + Contract + orange + orange + 193.35.133.10 + 193.35.134.10 + + + + + Contract (with VPN) + orange + orange + 193.35.133.10 + 193.35.134.10 + + + + + Orange WAP + orange + multimedia + 158.43.192.1 + 158.43.128.1 + + + + + + + + + Geocell + + + + + + 212.72.130.20 + 212.72.152.001 + + + + + + + + + Airtel-Vodaphone + + + + + + + + + + Sure (Cable & Wireless) + + + + + + WAP + + + + + Internet + + + + + Wave Telecom + + + + + + 212.9.0.135 + 212.9.0.136 + + + + + + + + + MTN + + + + *124# + + + *125*CODE# + + + + + + + + + Vodafone + + + + *127# + + + *122# + + + *123*CODE# + + + + + + + + + Tigo + + + + *820# + + + *842*CODE# + + + + + web + + + + + Airtel + + + + *133# + + + *134*CODE# + + + + + + + + + GloGhana + + + + *124# + + + *123*CODE# + + + + + + + + + Expresso + + evdo@expresso.com + evdo + + + + + + + + + Tele Greenland A/S + + + + + + + + + + + + Cosmote + + + + 123 + + 1314 + 1314 + + + + + + + + + + Vodafone + + + 121 + + 1252 + 1252 + + + + + + Contract + + + + + Mobile Broadband On Demand + 213.249.17.10 + 213.249.17.11 + + + + + Wind + + + + + 122 + 1333 + + 1269 + 1225 + 1269 + 1225 + + + + + + web + web + + + + + + + + + Claro + + + + + + + + + + Comcel / Tigo + + + + + + Wap + Wap + + + + + Movistar + + + + + + movistargt + movistargt + + + + + + + + + GT&T Cellink Plus + + + + + + test + test + + + + + DigiCel + + + + + + web + web + + + + + + + + + CSL + + + + + + + 202.84.255.1 + 203.116.254.150 + + + + + New World + + + + + + + + + + China Mobile + + + + + + + + + + SmarTone + + + + + + + + + + PCCW (Sunday) + + + + + + + Sunday (Old) + + + + + PCCW 2G/GPRS + + + + + PCCW 3G + + + + + Sunday + + + + + + + + + + Orange + + + + + + + + + + Three + + + + + + + + + + + + + + + Tigo + + + + + + + + + + + + + + T-Mobile + + + + + + 10.12.0.1 + + + + + VIPNET + + + + + + Contract and Prepaid + + + + + GPRS 5 + 38591 + 38591 + 195.29.159.15 + + + + + GPRS 0 + 38591 + 38591 + 195.29.159.15 + + + + + 3G + 38591 + 38591 + 212.91.97.3 + 212.91.97.4 + + + + + CARNet VIPNET + + + + + + AAIEDU + + + + + + CARNet Tele2 + + + + + + AAIEDU + + + + + + Tele2 + + + + + + 212.247.156.66 + + + + + + + + + Telenor + + + + + + mobilinternet + 217.79.128.40 + 217.79.128.45 + + + + + DIGI + + + + + + + DIGI Move + + + + + T-Mobile + + + + + + 212.51.115.1 + 194.176.224.6 + + + + + MMS + mms + 212.51.115.1 + 194.176.224.3 + + + + + Vodafone + + + + + + ElÅ‘f. Normál + vodawap + vodawap + 80.244.97.30 + 80.244.96.1 + + + + + + ElÅ‘f. töm. + 80.244.97.30 + 80.244.96.1 + + + + + Felt. norm. + 80.244.97.30 + 80.244.96.1 + + + + + Vodafone (felt. töm.) + 80.244.97.30 + 80.244.96.1 + + + + + Invitel + + + + + + net.and.go + + + + + + + + + 3 + + + + + + GPRS + 3gprs + 3gprs + + + + + Monthly Internet Service + Layanan Internet Bulanan + 3data + 3data + + + + + AXIS + + + + + + axis + 123456 + + + + + Indosat + + + + + + + + + + + + + IM3/Mentari Time-based + indosat@durasi + indosat@durasi + + + + + IM3/Mentari Volume-based + indosat + indosat + + + + + Matrix 3G/3.5G + indosat + indosat + + + + StarOne + starone + indosat + + + + + + Telkomsel + + + + + + + + + wap + wap123 + 202.152.0.2 + 202.155.14.251 + + + + + + + Flash Time-based + foo + bar + + + + + Flash Volume-based + foo + bar + + + + + Excelcomindo (XL) + + + + + + xlgprs + proxl + 202.152.254.245 + 202.152.254.246 + + + + + SMART + + smart + smart + + + + + Ceria + + internet + ceria + + + + Fren + + m8 + m8 + + + + + Telkom Flexy + + telkomnet@flexi + telkom + + + + + Esia + + + + + + + + + + O2 + + + + *#100# + + + + + Contract + gprs + gprs + 62.40.32.33 + 62.40.32.34 + + + + + Prepaid + faster + web + 62.40.32.33 + 62.40.32.34 + + + + + Old Config Internet and MMS + + + + + Vodafone + + + + 50189 + + + + + vodafone + vodafone + 89.19.64.36 + 89.19.64.164 + + + + + Old + vodafone + vodafone + + + + + Prepaid + vodafone + vodafone + 10.24.59.100 + + + + + E-Mobile + + + + + + + Broadband To Go + 212.129.64.220 + 212.129.64.221 + + + + + Meteor + + + + + + Meteor Data + my + meteor + + + + + Broadband To Go + 212.129.64.220 + 212.129.64.221 + + + + + GPRS + my + isp + + + + + Three Ireland + + + + + + 172.31.140.69 + 172.30.140.69 + + + + + + + + + CellCom + + + + + + + + + + GolanTelecom + + + + + + + + + + Home Cellular + + + + + + + + + + Hot Mobile + + + + + + + + + + Orange + + + + + + 3G Internet + 158.43.192.1 + 158.43.128.1 + + + + + Pelephone + + + + + + 3G + pcl@3g + pcl + + + + + Rami Levi + + + + + + rl@3g + rl + + + + + YouPhone 3G + + + + + + + + + + + + + + Manx Telecom + + + + + + + + + + Sure (Cable & Wireless) + + + + + + + WAP + + + + + Internet + + + + + + + + + AIRCEL + + + + + + + + + + + + + + + + + + + + + + + + + + Web + + + + + GPRS + + + + + GPRS (Postpaid) + + + + + GPRS (Prepaid) + + + + + Airtel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 202.56.230.5 + 202.56.240.5 + + + + + Vodafone + + + + + + + + + + + + + + + + + + + + + + + + + + + Vodafone Connect + + + + + Vodafone Live + + + + + BSNL/CellOne + + + + + + + + + + + + + + + + + + + + + + + + + + + + New GPRS/3G + + + + + + New WAP + + + + + + Old South Zone A (Karnatka, Andhra Pradesh, Chennai, Tamil Nadu, Kerala) + + + + + Old South Zone B (Karnatka, Andhra Pradesh, Chennai, Tamil Nadu, Kerala) + + + + + Old North Zone (Haryana, Punjab, UP(East), UP(West), Himachal Pradesh, Rajasthan, Jammu & Kashmir) + + + + + Old West Zone (Maharashtra, Gujrat, Madhya Pradesh, Chattishgarh) + + + + + Old East Zone Prepaid (Jharkhand, Bihar, Kolkata, West Bengal, Orissa, Assam, North East, Adman Nicobar) + 218.248.240.208 + 218.248.240.135 + + + + + Old East Zone Postpaid (Jharkhand, Bihar, Kolkata, West Bengal, Orissa, Assam, North East, Adman Nicobar) + 218.248.240.208 + 218.248.240.135 + + + + + Idea Cellular + + + + + + + + + + + + + + + + + + + + + + + + MTNL + + + + + + Delhi (3G Prepaid / Postpaid) + mtnl + mtnl123 + + + + Mumbai (3G Prepaid / Postpaid) + + + + + Delhi + mtnl + mtnl123 + + + + + Mumbai (Prepaid) + mtnl + mtnl123 + + + + + Mumbai (Postpaid / Plan 2) + mtnl + mtnl123 + + + + + Reliance + + + + + + + + + + + + + Smart Net + + + + + Smart WAP + + + + + Netconnect (RCOMNET) + + + + Reliance Netconnect + + + + + + + + + + + + + + + + + + + + + + + + + Spice telecom + + + + + + + + spice + spice + + + + + kar + + + + + Tata Docomo + + + + + + + + + + + + + + + + + + + + + + + + + + Internet + + + + + Internet + + + + + Tata Indicom (Plug2Surf) + + internet + internet + + + + Tata Indicom (Photon+) + + internet + internet + + + + + MTS MBlaze + + internet@internet.mtsindia.in + mts + + + + + + + + + + Itisaluna + + itisaluna + itisaluna + + + + + Omnea Telecom + + omnea + omnea + + + + Kalimat Telecom + + + + + + Korek + + + + + + korek + korek + + + + + Asia Cell + + + + + + + + + + + + + + همراه اول + + + + + + + + + + ایرانسل + + + + + + + + + + + + + + Vodafone + + + + + + + 213.176.128.51 + 213.176.128.50 + + + + + Nova + + + + + + 192.168.190.54 + 192.168.190.55 + + + + + Síminn + + + + + + 194.105.224.1 + 212.30.200.200 + + + + + + + + + Vodafone + + + + + + Mobile Internet + + + + + Internet Facile (old) + 83.224.70.62 + 83.224.70.78 + + + + + TIM + + + + + + Maxxi Alice/Internet + 217.200.200.42 + 213.230.129.10 + + + + + WAP + WAPTIM + 213.230.155.94 + 213.230.130.222 + + + + + Wind + + + + + + Non-business + Wind + Wind + 193.70.152.25 + 193.70.192.25 + + + + + Business + Wind + Wind + 193.70.152.25 + 193.70.192.25 + + + + + 3 + + + + + + Ricaricabile + 62.13.169.92 + 62.13.169.93 + + + + + Abbonamento + + + + + Fastweb + + + + + + Voce/dati + + + + + Solo dati + 213.140.2.43 + 213.140.2.49 + + + + + PosteMobile + + + + + + + + + + CoopVoce + + + + + + Internet Mobile + + + + + + + Bip + + + + + + Megabip Internet + + + + + + + + + Airtel-Vodaphone + + + + + + + + + + Sure (Cable & Wireless) + + + + + + WAP + + + + + Internet + + + + + Jersey Telecom + + + + + + abc + abc + 212.9.0.135 + 212.9.0.136 + + + + + + + + + Cable & Wireless + + + + + + + + + + Digicel + + + + + + wapuser + wap03jam + 208.131.176.126 + 200.10.152.232 + + + + + + + + + Orange + + + + + + Mobile Broadband + net + net + + + + + Zain + + + + + + Mobile Broadband + Zain + Zain + + + + + + + + + Softbank Mobile + + + + + + + + + + + + + + + + + + + + + + + + + ai@softbank + softbank + + + + + b-mobile + + + + + + u300 + bmobile@u300 + bmobile + + + + + e-mobile + + + + + + em + em + + + + + NTTdocomo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mopera + + + + + mopera U + + + + + au(KDDI) + + au@au-win.ne.jp + au + 210.196.3.183 + 210.141.112.163 + + + + + + + + Airtel + + + + + + + + + + Safaricom + + + + + *144# + + + *544*CODE# + + + + + Safaricom (Prepaid) + saf + data + + + + + web + web + + + + + yu (Econet) + + + + + + + + + + Orange + + + + + + + + + Orange Fixed Plus + + + + + + + + Beeline + + + + + + + + + + MegaCom + + + + + + + + + + O! + + + + + + + + + + FONEX + + cdma + cdma + + + + nexi (mir+kg) + Зона Мир+КГ + + 555@mir + 555 + + + + nexi (kg) + Зона КГ + + 999@kg + 999 + + + + + + + + Cellcard + + + + + #124# + + + + + + mobitel + mobitel + + + + + Hello + + + + + *100# + + + + + + + + + + + qb + + + + + #132# + + + + + + + + + + Smart Mobile + + + + + *888# + + + + + + + + + + Metfone + + + + + *097# + + + + + + + + + + Beeline + + + + + *102# + + + + + + + + + + Excell + + + + + Mfone + + + + + *222# + + + + + + + + + + + + + + KTF + + + + + + + + + + ktf + ktf + + + + LGUPlus + + + + + + + + + + + + + + SKTelecom + + + + + + + + + + sktelecom + + + + + + + + Zain + + + + + + Personal + pps + pps + + + + + Corporate + + + + + Wataniya + + + + + + + + + + Viva + + + + + + + + + + + + + + Beeline + + + + + + @internet.beeline + 212.19.149.53 + 194.226.128.1 + + + + + K'CELL + + + + + + + + + + + Activ + + + + + + + + + + Tele2 + + + + + + + + + + Pathword + + Pathword + Pathword + + + + Dalacom + + Dalacom + Dalacom + + + + + + + + ETL + + + + + + 192.168.4.130 + + + + + Lao Telecom + + + + *122# + + + + + + + + + Unitel + + + + + + Unitel (2G) + + + + + Unitel (3G) + + + + + Beeline (Tigo) + + + + + + + + + + + + + + MTC Touch + + + + + + + + + + + + + + Cable & Wireless + + + + + + + + + + + + + + Airtel + + + + + + + + + + Dialog GSM + + + + + + Postpaid + + + + + Prepaid + + + + + Unlimited Broadband + + + + + Prepaid (Kitbb) + + + + + Hutch + + + + + + + + + + Mobitel + + + + + + + + + + Tigo + + + + + + + + + + + + + + Vodacom Lesotho + + + + + + + + + + + + + + Bite + + + + + + 213.226.131.131 + 193.219.88.36 + + + + + TELE2 GPRS + + + + + + + + + + Omnitel (contract) + + + + + + Contract + 194.176.32.129 + 195.22.175.1 + + + + + No contract + omni + omni + 194.176.32.129 + 195.22.175.1 + + + + + + + + + LUXGSM + + + + + + 194.154.192.101 + 194.154.192.102 + + + + + Tango + + + + + + hspa + tango + tango + + + + + internet + tango + tango + 212.66.70.3 + 212.66.75.7 + + + + + Orange + + + + + + 85.94.224.1 + 85.94.224.2 + + + + + VOXmobile + + + + + + + + + + + + + + LMT + + + + + + 212.93.96.2 + 212.93.96.4 + + + + + O!Karte internet + + + + + O!Karte + + + + + Tele2 + + + + + + Regular + gprs + internet + + + + + Mobile Internet + wap + wap + + + + + Zelta Zivtina + wap + wap + + + + + Bite + + + + + + Bite plus + + + + + Prepaid/Contract + + + + + + + + + Ittissalat Al Maghrib (IAM) + + + + + + Abonnement + + + + + Pre-payé + + + + + Medi Telecom + + + + + + Abonnement + MEDINET + MEDINET + + + + + Pre-payé + MEDINET + MEDINET + + + + + WANA + + + + + + INWI + + + + + + + + + Moldcell + + + + + + Internet + gprs + gprs + + + + + Unité + + + + + + Internet cu abonament + gprs + gprs + + + + + Internet fără abonament + gprs + gprs + + + + + Orange + + + + + + Internet + gprs + gprs + + + + + + + + + ProMonte GSM + + + + + + + + + + T-Mobile + + + + + + Mobile Broadband + 38267 + 38267 + + + + + GPRS + 38267 + 38267 + + + + + Postpaid (old) + + + + + Prepaid (old) + + + + + m:tel + + + + + + + + + + + + + + Airtel + + + + + + + + + + Orange + + + + + + world + orange + + + + + Telma + + + + + + + + + + + + + + Malitel + + + + + + 3G+ + internet + internet + + + + Internet Mobile+ + card + card + + + + Orange + + + + + + Internet Every Where + iew + iew + + + + + Internet + internet + internet + + + + + + + + + MPT + + + + + + MPTNET + mptnet + mptnet + + + + + + + + + MobiCom + + + + + + + + + + + + + + 3 / Hutchison + + + + + + + hutchison + 1234 + + + + + CTM + + + + + + + + + + + China Telecom + + + + + + + + T-Mobile + + + + + + internet + internet + + + + + One + + + + + + Internet + + + + + Vodafone + + + + + + vipoperator + vipoperator + + + + + + + + + GO Mobile + + + + + + Postpaid + + + + + Prepaid + + + + + Vodafone + + + + + + internet + internet + 80.85.96.131 + 80.85.97.70 + + + + + + + + + Emtel + + + + + + + + + + + + + + Dhiraagu + + + + + + + + + + Wataniya + + + + + + + + + + + + + + TNM + + + + + + + + + + + + + + Telcel + + + + *86 + + *333 + + + + + + webgprs + webgprs2002 + + + + + Movistar + + + + *86 + + *133# + + + + + + movistar + movistar + + + + + Iusacell + + + + + + + + DiGi + + + + + + Mobile Internet + 203.92.128.131 + 203.92.128.132 + + + + + Broadband + + + + + Maxis + + + + + + + Broadband + maxis + wap + + + + + GPRS + maxis + net + + + + + 3G (handsets) + maxis + wap + 10.213.17.1 + 10.213.17.2 + + + + + Celcom + + + + + + + + GPRS + + + + + + Celcom 3G + + + + + + + + + MCel + + + + + + guest + guest + 212.96.24.2 + 212.96.24.1 + + + + + Vodacom + + + + + + Contract / Prepaid + + + + + + + + + MTC + + + + + + Tango + ppsuser + ppsuser + + + + + Contract + + + + + Telecom + + switch + telecom + + + + Leo + + + + + + Leo + + + + + + + + + Airtel NG + + + + + + *123# + + + *126*CODE# + + + + + internet + internet + + + + + MTN + + + + + *556# + + + *555*CODE# + + + + + web + web + + + + + Glo Mobile + + + + + #124# + 4 + + + *123*CODE# + + + + + Pay as You Go + gprs + gprs + + + + + Glo 3G Packs + flat + flat + + + + + Etisalat + + + + *232# + + + *222*CODE# + + + + + Etisalat Internet + + + + + Starcomms + + your_phone_number@starcomms.com + your_phone_number + + + + + Multilinks + + + + + + + + + + Claro + + + + + + + WAP + wapemovil + wapemovil + + + + + Web + webemovil + webemovil + + + + + Web (Alo pcs) + internet + internet + + + + + WAP (Alo pcs) + wap + wap + + + + + Movistar + + + + + + internet + internet + + + + + + + + + Hi + + + + + + + + + + Lebara + + + + + + + + + + Lycamobile + + + + + + lmnl + plus + + + + + KPN NL + + + + + + + + + + + + + + KPN + gprs + 62.133.126.28 + 62.133.126.29 + + + + + 62.133.126.28 + 62.133.126.29 + + + + + MEDIONmobile + + + + + + + Aldi Talk Mobiel Prepaid Internet + + + + + Telfort + + + + + + telfortnl + + + + + T-Mobile + + + + + + 193.78.240.12 + 193.79.242.39 + + + + + Ben + + + + + + 193.78.240.12 + 193.79.242.39 + + + + + Orange + + + + + + orange + orange + + + + + Tele2 + + + + + + + + + + XS4ALL Mobiel Internet + + + + + xs4all + xs4all + + + + + Vodafone + + + + *#100# + + + + + Non-business + vodafone + vodafone + 62.140.138.237 + 62.140.140.250 + + + + + Business + vodafone + vodafone + + + + + + Galaxy + + + + + + + + + + + + + + Netcom + + + + + *150# + + + + + + netcom + netcom + 212.169.123.67 + 212.45.188.254 + + + + + + Chess + + + + + + chess + chess + + + + + + ice.net (Nordisk Mobiltelefon) + + cdma + cdma + + + + Telenor + + + + 91500002 + + 2525 + + + + + + 212.17.131.3 + 148.122.161.2 + + + + + TDC + + + + + + 80.232.41.10 + 80.232.41.20 + + + + + Network Norway + + + + + + + + + OneCall + + + + + + + + + MyCall + + + + + + + + + Altibox + + + + + + + + + Telipol + + + + + + + + + + Ventelo + + + + + + + + + + Ludo Mobil + + + + + + + + + + Tele2 + + + + + 47230000 + + *111# + 47300000 + + + + + + Mobilt internet + + + + + + Mobilt bredbÃ¥nd + + + + + + + + + Nepal Telecom + + + + + + + + + + Mero Mobile + + + + + + + + + + + + + + Telecom New Zealand + + + + + + + XT mobile (WAP) + + + + + XT mobile (Internet with Firewall) + 202.27.156.72 + 202.27.158.40 + + + + + XT mobile (Direct Internet) + 202.27.156.72 + 202.27.158.40 + + + + + XT mobile (One Office/Remote Office) + + + + + Vodafone + + + + + + WAP + 202.73.206.16 + 202.73.198.16 + + + + + Contract / Prepaid (Restricted) + + + + + Unrestricted (public) + 202.73.206.16 + 202.73.198.16 + + + + + 2-Degrees + + + + + + MMS + + + + + Broadband + 118.148.1.10 + 118.148.1.20 + + + + + TelstraClear + + + + + Broadband + + + + + Orcon + + + + + Broadband + + + + + + + + + Oman Mobile + + + + + + Mobile Broadband + taif + taif + + + + + Internet (old) + + + + + Nawras + + + + + + + + + + + + + + Cable and Wireless + + + + + + + + + + Movistar + + + + + + movistarpa + movistarpa + 200.39.10.1 + 200.36.160.237 + + + + + + + + + Claro + + + + + + tim + tulibertad + + + + + Internet Móvil Prepago + amx + amx + + + + + Movistar + + + + + + movistar@datos + movistar + + + + + Nextel + + + + + + + + + + + + + + Vini + + + + + + + + + + + + + + Globe Telecom + + + + + + Postpaid + globe + globe + 203.127.225.10 + 203.127.225.11 + + + + + Prepaid + globe + globe + 203.127.225.10 + 203.127.225.11 + + + + + WAP + globe + globe + 203.127.225.10 + 203.127.225.11 + + + + + Smart + + + + + + witsductoor + banonoy + 202.57.96.3 + 202.57.96.4 + + + + + Digitel (Sun Cellular) + + + + + + + + + + + + + + Djuice + + + + + + telenor + telenor + + + + + Mobilink + + + + + + Internet + + + + + Jazz + + + + + Telenor + + + + + + telenor + telenor + + + + + Ufone + + + + + + ufone + ufone + + + + + Warid + + + + + + + + + + ZONG + + + + + + + + + + Ptcl EVO + + vwireless@ptcl.com + ptcl + + + + WorldCall Wireless + + + + + + + + + T-mobile + + + 602950 + + *101# + + + *111*CODE# + + + + + + 213.158.194.1 + 213.158.193.38 + + + + + Play Online + + + + *101# + *155# + + + *100*CODE# + + + + + + + + + + Orange + + + *501 + + *124*# + + + *125*CODE# + + + + + + Standard access - with image compression + DostÄ™p standardowy - z kompresjÄ… grafiki + internet + internet + 194.9.223.79 + 194.204.159.1 + + + + + VPN mode access without compression (requires activation) + DostÄ™p VPN bez kompresji (wymaga aktywacji) + internet + internet + 194.9.223.79 + 194.204.159.1 + + + + cdma@orange + orange + + + + Plus + + + 2222 + + *100# + + + *123*CODE# + + + + + + Standard access + DostÄ™p standardowy + plusgsm + plusgsm + 212.2.96.51 + 212.2.96.52 + + + + + External dynamic IP address (requires activation) + ZewnÄ™trzny dynamiczny adres IP (wymaga aktywacji) + plusgsm + plusgsm + 212.2.96.51 + 212.2.96.52 + + + + + External static IP address (requires activation) + ZewnÄ™trzny statyczny adres IP (wymaga aktywacji) + plusgsm + plusgsm + 212.2.96.51 + 212.2.96.52 + + + + + + iPlus optimizer with data compression + iPlus optimizer z kompresjÄ… danych + 212.2.96.51 + 212.2.96.52 + + + + + Cyfrowy Polsat + + + + + + + + + + aero2 + + + + + + + + + + + Multimo + + + + + + Default APN + internet + internet + + + + + APN: mni.internet + mni.internet + + + + + APN: telogic.internet + telogic.internet + + + + cdma@orange + orange + + + + FreeM + + + + + + + + + + Heyah + + + + *108# + + + *109*CODE# + + + + + heyah + heyah + 213.158.194.1 + 213.158.193.38 + + + + + GaduAIR + + + + *101# + + + + + + + + + Aster + + + + + + internet + internet + + + + + Netia + + + + + + + + + + Vectra + + + + + + + + + + mBank mobile + + + + *100# + + + + + + + + + INEA + + + + + + internet + + + + + Mobilking + + + + + + mobilking + mobilking + + + + + SamiSwoi + + + + + + internet + internet + + + + + Sferia + + sferia + sferia + + + + Nordisk Polska + + CDMA + CDMA + + + + + + + + Kanguru + + + + + + Portable + Portátil + 62.169.67.172 + 62.169.67.171 + + + + + Tempo (Prepaid) + 62.169.67.172 + 62.169.67.171 + + + + + Fixo + 62.169.67.172 + 62.169.67.171 + + + Apn dinâmico (no apn) + 62.169.67.172 + 62.169.67.171 + + + + + + Clix + + + + + + + + + + Optimus + + + + + + 3G + + + + + GPRS + 194.79.69.129 + + + + + TMN + + + + + + Tmn Internet + tmn + tmn + 88.214.178.1 + 88.214.182.2 + + + + + Tmn Mms + tmn + tmnnet + 194.65.3.20 + 194.65.3.21 + + + + + Vodafone + + + + + + vodafone + vodafone + 212.18.160.133 + 212.18.160.134 + + + + + Vodafone Internet + + + + + Vodafone MMS + vas + vas + + + + + ZON + + + + + + Dados Móveis + + + + + MMS + vas + vas + + + + + + + + + VOX + + + + + + + + + Personal + + + + + + + + + Tigo + + + + + + Internet + + + + + Broadband + Banda Ancha Móvil + tigo + tigo + + + + + Claro + + + + + + Internet + + + + + + + + + Vodafone + + + + *#100# + + + + + Web + + + + + Web (old) + + + + + Q-Tel + + + + + + Qatarnet + gprs + gprs + + + + + + + + + SFR Réunion + + + + +33621012555 + + + + + Contract / Prepaid + + + + + SFR slsfr + + + + + SFR internetpro + + + + + SFR ipnet + + + + + + + + + Orange + + + + + + 172.22.7.21 + 172.22.7.20 + + + + + Vodafone + + + + + + Mobile Internet (Prepaid) + tobe.vodafone.ro + vodafone + + + + + Mobile Internet (Postpaid) + internet.vodafone.ro + vodafone + + + + + Mobile Internet (Prepaid) + internet.pre.vodafone.ro + vodafone + + + + + Live! (Postpaid) + live + vodafone + + + + + Live! (Prepaid) + live.pre.vodafone.com + vodafone + + + + + Zapp + + zapp + zapp + + + + Digi.Net Mobil + + + + + + Home + + + + + Business (static) + + + + + + + + + Telenor + + + + + + telenor + gprs + + + + + Telekom Srbija + + + + + + mts + 064 + 195.178.38.3 + + + + + VIP Mobile + + + + + + vipmobile + vipmobile + + + + + + + + + MTN + + + + + + + + + + Tigo + + + + + + + + + + + + + + BaikalWestCom + БайкалВеÑтКом + + + + + + bwc + bwc + 81.18.113.2 + 81.18.112.50 + + + + + Beeline + Билайн + + + + + *102# + + + + + 3G modem + USB-модем + beeline + beeline + 212.44.130.6 + 217.118.83.6 + + + + + Mobile phone + Мобильный телефон + beeline + beeline + 217.118.66.243 + 217.118.66.244 + + + + + ETK + + + + + + + + + + MTS + + + + *100# + + + + + mts + mts + 213.87.0.1 + 213.87.1.1 + + + + + Megafon + Мегафон + + + + + *100# + + + + + RUS + РоÑÑÐ¸Ñ + gdata + gdata + + + + + NCC + + + + + + ncc + 10.0.3.5 + 10.0.3.2 + + + + + NTC + + + + + + 80.243.64.67 + 80.243.68.34 + + + + + Enisey TeleCom + ЕниÑей Телеком + + + + + + etk + 10.10.30.3 + 10.10.30.4 + + + + + Motiv + Мотив + + + + + + motiv + 217.148.52.34 + 217.148.52.3 + + + + + Tatincom + Татинком + + + + + tatincom + tatincom + 89.207.96.2 + 89.207.97.18 + + + + + Tele2 + Теле2 + + + + + + 130.244.127.161 + 130.244.127.169 + + + + + Skylink + Скайлинк + + mobile + internet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + U-tel + + + + *100# + + + + + + + + + + + + + Mobily + + + + + + Postpaid + + + + + Prepaid + + + + + STC + + + + + + 212.118.133.101 + 212.118.133.102 + + + + + Zain + + + + + + + + + + + + + + + 3 + + + + + + + + Mobiltelefon + + + + + + Bredband + + + + + Bredband Kontantkort + + + + + Glocalnet + + + + + + + Mobilt Bredband + + + + + + Glocalnet Internet + + + + + Halebop + + + + + + + + + + + + + ice.net (Nordisk Mobiltelefon) + + cdma + cdma + + + + Tele2 + + + + + 222 + + *111# + 211 + + + + + + + Mobilt Internet + + + + + + Mobilt Bredband + + + + + Comviq + + + + + 222 + + *111# + 211 + + + *110*CODE# + + + + + + Surf + + + + + + Tele2 Comviq 3G + + + + + Tele2 Comviq 3G (7,2 Mbit/s) + + + + + Multicom Security + + + + + + + + + Mobiflex + + + + + Telenor + + + + + + 888 + + *222# + + + + + + + Mobilt Internet + + + + + Mobilsurf med maxtaxa + + + + + Mobilt Bredband + + + + + Telia + + + + + *133# + + *120# + *121# + + + + + + + Telia 3G + + + + + TDC + + + + + + + + + + djuice + + + + + + + + + + Com Hem + + + + + + + + + + + + Parlino + + + + + + + + + + Universal Telecom + + + + + + Mobilt Bredband + + + + + + Mobilt Internet + + + + + + + + + M1 + + + + + + + SunSurf/Mobile Broadband (postpaid) + 65 + 202.79.64.21 + 202.79.64.26 + + + + + + MiWorld Mobile (postpaid) + 65(mobilenumber) + user123 + + + + + + MiWorld Mobile (prepaid) + 65(mobilenumber) + user123 + + + + + Mobile Broadband (prepaid) + + + + + M Card (prepaid) + + + + + SingTel + + + + + + + 165.21.100.88 + 165.21.83.88 + + + + + Starhub + + + + + + WAP + star + hub + 203.116.1.78 + + + + + MaxMobile Broadband (prepaid) + + + + + MaxMobile Broadband (postpaid) + + + + + + + + + Mobitel + + + + + + + Postpaid + mobitel + internet + 213.229.248.161 + 193.189.160.11 + + + + + mobitel + internet + 213.229.248.161 + 193.189.160.11 + + + + + Vodafone / Simobil + + + + *100# + + + + + simobil + internet + 121.30.86.130 + 193.189.160.11 + + + + + T-2 + + + + + + + + + + + + + + Slovak Telekom + + + + + + + 195.91.0.17 + 194.154.227.17 + + + + + Orange + + + + + + 213.151.200.31 + 213.151.208.162 + + + + + O2 + + + + + + Internet + 160.218.161.60 + 194.228.211.33 + + + + + + + + + Tigo + + + + + + 200.85.0.104 + 200.85.0.107 + + + + + + + + + Movistar + + + + + + movistarsv + movistarsv + + + + + digicel + + + + + + + + + + Tigo + + + + + + + + + + Claro + + + + + + Internet + + + + + + + + + Zain + + + + *888# + + + *888*CODE# + + + + + + + + + MTN + + + + + + + + + + + Sudani + + + + + + + sudani + sudani + + + + sudani + sudani + + + + + + + + AIS + + + + + + 202.183.255.20 + 202.183.255.21 + + + + + DTAC + + + + + + 202.44.202.2 + 203.44.144.33 + + + + + True Move + + + + + + true + true + + + + + TOT 3G + + + + + + + + + + + + + + Orange + + + + + + Internet + + + + + Internet + MMS + + + + + Internet Everywhere Prepaid + + + + + Internet Everywhere Professional + + + + + Tunisie Télécom / TUNTEL + + + + + + MMS + mms@tt1 + mms + + + + + GPRS DATA + gprs + gprs + + + + + WEB DATA + + + + + Tunisiana + + + + Internet + internet + internet + + + + + + + + + Avea + + + + + + + 212.156.4.4 + 212.156.4.20 + + + + + + (former Aycell) + 212.156.4.1 + 212.156.4.4 + + + + + Turkcell + + + + + + + + Turkcell internet + + + + + Turkcell 3G + + + + + Vodafone + + + + *101# + + + + Vodafone Internet + vodafone + vodafone + + + + + + KKTC Telsim + + + + + + + + + Digicel + + + + + + wap + wap + + + + + bmobile / TSTT + + + + + + wap + wap + + + + + + + + + Chunghwa Telecom (emome) + 中è¯é›»ä¿¡ (emome) + + + + + + + web + web + + + + + + + + + + Far EasTone / KGT + é å‚³é›»ä¿¡ / 和信電訊 + + + + + + + + + + TW Mobile + å°æ¹¾å¤§å“¥å¤§ + + + + + + + + + + TransAsia + 泛亞電信 + + + + + + + + + + Vibo Telecom / Aurora + å¨å¯¶é›»ä¿¡ (Vibo) / 震旦電信 (Aurora) + + + + + + + + + + Asia Pacific Telecom (APBW) + 亞太電信 (亞太行動寬頻電信) + + + + + + + + Airtel Tanzania + + + + + + + + + + Vodacom + + + + + + + + + + Zantel + + + + + + + + + @zantel.com + + + + + tiGO + + + + + + + + + + Sasatel + + sasatel + sasatel + + + + + + TTCL + + + + + + + + kyivstar + + + + + + + Ace&Base + igprs + internet + + + + + Contract GPRS + + + + + Internet 3G + + + + + Djuice + + + + + + + Internet GPRS + + + + + Internet XL + + + + + Internet 3G + + + + + + life:) + + + + *111# + + + + + + Standard + 212.58.160.33 + 212.58.160.34 + + + + + Faster + 212.58.160.33 + 212.58.160.34 + + + + + Beeline + + + + + + + + + + Jeans + + + + + + 80.255.64.23 + 80.255.64.24 + + + + + Hyper.NET + 212.58.160.33 + 212.58.160.34 + + + + + MTS + + + + + + + GPRS Internet + internet + 212.58.160.33 + 212.58.160.34 + + + + + Hyper.NET + + + + + HyperActive + + + + + umc.ua + 80.255.64.23 + 80.255.64.24 + + + + MTS Connect 3G + mobile + internet + + + + + Utel + + + + + + + + + + CDMA Ukraine + + cdma + cdma + + + + InterTelecom + + IT@IT + IT + + + + + PEOPLEnet + + + + + + + + MTN + + + + + + 193.108.252.50 + 193.108.252.51 + + + + + Orange + + + + + + + + + + UTL + + + + + + Mobile Broadband + + + + + Mobile Internet + + + + + Warid + + + + + + + + + + + Zain + + + + + + + + + + + + + + AT&T + + + + + + + + + + + + MEdia Net (phones) + + + + + LaptopConnect (data cards) + + + + + Data Connect (old) + + + + + LTE + + + + + T-Mobile + + + + + + + + + + + + + + + + + + 123 + + + + LTE + + + + + Internet/WebConnect + 10.177.0.34 + 10.164.103.44 + + + + + Web2Go/t-zones + + + + + Internet (old) + + + + + Internet with VPN (old) + + + + + Cincinnati Bell Wireless + + + + + + cbw + + + + + Sprint + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Boost Mobile (Prepaid) + + + + Verizon + + + + + + + 4G LTE Contract + + + + + 4G LTE Contract + 66.174.92.14 + 69.78.96.14 + + + + + 4G LTE Contract + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + US Cellular + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Alltel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Leap Wireless + + + + Cricket Communications + + + + + + + Jump Mobile (Prepaid) + + + + MetroPCS + + + + + + + + + + + + + + + + + + + + + Virgin Mobile / Helio + + + + + + Cellular South + + + + + + + + + + + BendBroadband + + + + + + + + + + MTPCS (Cellular One) + + + + + + + + + + Mid-Rivers Cellular + + + + + + + Straight Talk + + + + + + + + + + + + + + Ancel + + + + + + + ADSL Móvil + 200.40.30.245 + 200.40.220.245 + + + + + ADSL Móvil Prepago + BAM + BAM + + + + + GPRS + 200.40.30.245 + 200.40.220.245 + + + + + Claro + + + + + + 3G Internet + ctigprs + ctigprs999 + + + + + 2G Internet + ctiweb + ctiweb999 + + + + + Movistar + + + + + + 3G Internet + movistar + movistar + + + + + 2G Internet + movistar + movistar + + + + + + + + + Beeline + + + + + + beeline + beeline + + + + + MTS (Uzdunrobita) + + + + + + mts + mts + + + + + Ucell + + + + + + + + + + + + + + Digicel + + + + + + wapoecs + wap03oecs + + + + + + + + + Digitel TIM + + + + + + + + 57.67.127.195 + + + + + Movilnet + + + + + + 200.44.32.12 + 200.11.248.12 + + + + + Movistar + + + + + + 200.35.65.3 + 200.35.65.4 + + + + + + + + + MobiFone + + + + + + mms + mms + + + + + Vinaphone + + + + + + Mobile Internet + mms + mms + + + + + Mobile Broadband + mms + mms + + + + + S-Fone + + + S-Fone + + + + + + Viettel Mobile + + + + + + Mobile Internet + + + + + D-com 3G + + + + + Vietnamobile + + + + + + + + + + EVNTelecom/E-Mobile + + + + + + EVNTelecomNet + + + + evntelecom + evntelecom + + + + Beeline VN + + + + + + + + + + + + + + Cell-c + + + + *147*100# + + + *101# + + + *102*CODE# + + + + + 196.7.0.138 + 196.7.142.132 + + + + + MTN + + + + *123*888# + + + *141# + + + *141*CODE# + + + + + 196.11.240.241 + 209.212.97.1 + + + + + Vodacom + + + + *111*501# + + + *100# + + + *100*01*CODE# + + + + + 196.207.40.165 + 196.43.46.190 + + + + + Unrestricted + 196.207.32.69 + 196.43.45.190 + + + + + Virgin Mobile + + + + *101# + + + *102*CODE# + + + + + 196.7.0.138 + 196.7.142.132 + + + + + 8.ta + + + + *1# + + + *188# + + + *188*CODE# + + + + + + + + + + + diff --git a/usr/local/share/pbi-keys/pfSense-BETA.ssl b/usr/local/share/pbi-keys/pfSense-BETA.ssl new file mode 100644 index 000000000..69ced3a96 --- /dev/null +++ b/usr/local/share/pbi-keys/pfSense-BETA.ssl @@ -0,0 +1,14 @@ +-----BEGIN PUBLIC KEY----- +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvl/Zi/Lj5p4cofA9pCIg +ylSFUNZAIrJHhWE4x1jHr43Ez24RbbNQu2BfsaOGaCOnxBDk6xRNHkxWjUdFQIkc +0R5lTLDiOnuJLB4nbA1FjVdygIeiikYHPnTQO2zaBAHX0O2k/ywNds+4HeKpf29S +7NtqIeePMt8MlSqXJdyopZynAa+EF53q/0ude9fzvpITOtSogaJ78jlr3mLQmLeF ++flXBfV6sTe7bvVseFng+SuY8iAIsQqq58QrSlPcA7O2qNBlscqfJNFrZ2OCU4nZ +7sXKqPWtIyZqCgH8XKv0ALwaDUt/F+XoAfod8kADXqhkIafx5dnbJ1ro0hffxi8Z +SLia6heHvxLb2Ia9S7tteC3yaSa/Assq7anKefRpEDpSJFWTI+imdjHjteNpKrYz +8WDPl5Rn3cOYgU1n73w+O9Km2VtO7Szhi6gh+EJ6+NXOmoUA4LHhVZYtfR3wFQtu +jWazGigk3g0kXRh/wA7YLiLHbsgNT6zAnIk34UVx9agugYEUUjpsCAKUOxUSZNx7 +H0ow1zRNaE3cyMQAuxXy4opTnls9hiS5TpN1dstxviPgNj8/udykzJyeGFRVo5Tu +iCcmBGizyK8n+9M1O5SAPpInukK5uR2sYYJhO8B8SOQTkbsBO55nip6wDQQx2ewE +Rsvesuw3X/Mq/5hJ2DT8StkCAwEAAQ== +-----END PUBLIC KEY----- diff --git a/usr/local/share/protocols/100bao.pat b/usr/local/share/protocols/100bao.pat new file mode 100644 index 000000000..a03a8914b --- /dev/null +++ b/usr/local/share/protocols/100bao.pat @@ -0,0 +1,12 @@ +# 100bao - a Chinese P2P protocol/program - http://www.100bao.com +# Pattern attributes: ok veryfast fast +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/100Bao +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Pattern written by www.routerclub.com's wsgtrsys. +# The author of this pattern says it works, but this is unconfirmed. + +100bao +^\x01\x01\x05\x0a + diff --git a/usr/local/share/protocols/EAOrigin.pat b/usr/local/share/protocols/EAOrigin.pat new file mode 100644 index 000000000..391be7277 --- /dev/null +++ b/usr/local/share/protocols/EAOrigin.pat @@ -0,0 +1,7 @@ +# Origin powered by EA +# zip? - Main Downloads for Games/Patches/Updates +# User-Agents - Browsing the EA store. + +User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) Origin/9.2.1.4399 Safari/534.34 EA Download Manager +User-Agent: Mozilla/5.0 EA Download Manager Origin +zip? diff --git a/usr/local/share/protocols/LICENSE b/usr/local/share/protocols/LICENSE new file mode 100644 index 000000000..49395f69d --- /dev/null +++ b/usr/local/share/protocols/LICENSE @@ -0,0 +1,605 @@ +You may distribute this software under either the GPLv2 or Creative +Commons Attribution-ShareAlike 2.5. The text of each follows: + +*************************************************************************** + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +*************************************************************************** + + Creative Commons Legal Code + Attribution-ShareAlike 2.5 + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + + License + + THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS + CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS + PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE + WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS + PROHIBITED. + + BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND + AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS + YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF + SUCH TERMS AND CONDITIONS. + + 1. Definitions + a. "Collective Work" means a work, such as a periodical issue, + anthology or encyclopedia, in which the Work in its entirety in + unmodified form, along with a number of other contributions, + constituting separate and independent works in themselves, are + assembled into a collective whole. A work that constitutes a + Collective Work will not be considered a Derivative Work (as + defined below) for the purposes of this License. + b. "Derivative Work" means a work based upon the Work or upon the + Work and other pre-existing works, such as a translation, musical + arrangement, dramatization, fictionalization, motion picture + version, sound recording, art reproduction, abridgment, + condensation, or any other form in which the Work may be recast, + transformed, or adapted, except that a work that constitutes a + Collective Work will not be considered a Derivative Work for the + purpose of this License. For the avoidance of doubt, where the + Work is a musical composition or sound recording, the + synchronization of the Work in timed-relation with a moving image + ("synching") will be considered a Derivative Work for the purpose + of this License. + c. "Licensor" means the individual or entity that offers the Work + under the terms of this License. + d. "Original Author" means the individual or entity who created the + Work. + e. "Work" means the copyrightable work of authorship offered under + the terms of this License. + f. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License + with respect to the Work, or who has received express permission + from the Licensor to exercise rights under this License despite a + previous violation. + g. "License Elements" means the following high-level license + attributes as selected by Licensor and indicated in the title of + this License: Attribution, ShareAlike. + + 2. Fair Use Rights. Nothing in this license is intended to reduce, + limit, or restrict any rights arising from fair use, first sale or + other limitations on the exclusive rights of the copyright owner under + copyright law or other applicable laws. + + 3. License Grant. Subject to the terms and conditions of this License, + Licensor hereby grants You a worldwide, royalty-free, non-exclusive, + perpetual (for the duration of the applicable copyright) license to + exercise the rights in the Work as stated below: + a. to reproduce the Work, to incorporate the Work into one or more + Collective Works, and to reproduce the Work as incorporated in the + Collective Works; + b. to create and reproduce Derivative Works; + c. to distribute copies or phonorecords of, display publicly, perform + publicly, and perform publicly by means of a digital audio + transmission the Work including as incorporated in Collective + Works; + d. to distribute copies or phonorecords of, display publicly, perform + publicly, and perform publicly by means of a digital audio + transmission Derivative Works. + e. For the avoidance of doubt, where the work is a musical + composition: + i. Performance Royalties Under Blanket Licenses. Licensor waives + the exclusive right to collect, whether individually or via a + performance rights society (e.g. ASCAP, BMI, SESAC), + royalties for the public performance or public digital + performance (e.g. webcast) of the Work. + ii. Mechanical Rights and Statutory Royalties. Licensor waives + the exclusive right to collect, whether individually or via a + music rights society or designated agent (e.g. Harry Fox + Agency), royalties for any phonorecord You create from the + Work ("cover version") and distribute, subject to the + compulsory license created by 17 USC Section 115 of the US + Copyright Act (or the equivalent in other jurisdictions). + f. Webcasting Rights and Statutory Royalties. For the avoidance of + doubt, where the Work is a sound recording, Licensor waives the + exclusive right to collect, whether individually or via a + performance-rights society (e.g. SoundExchange), royalties for the + public digital performance (e.g. webcast) of the Work, subject to + the compulsory license created by 17 USC Section 114 of the US + Copyright Act (or the equivalent in other jurisdictions). + + The above rights may be exercised in all media and formats whether now + known or hereafter devised. The above rights include the right to make + such modifications as are technically necessary to exercise the rights + in other media and formats. All rights not expressly granted by + Licensor are hereby reserved. + + 4. Restrictions.The license granted in Section 3 above is expressly + made subject to and limited by the following restrictions: + a. You may distribute, publicly display, publicly perform, or + publicly digitally perform the Work only under the terms of this + License, and You must include a copy of, or the Uniform Resource + Identifier for, this License with every copy or phonorecord of the + Work You distribute, publicly display, publicly perform, or + publicly digitally perform. You may not offer or impose any terms + on the Work that alter or restrict the terms of this License or + the recipients' exercise of the rights granted hereunder. You may + not sublicense the Work. You must keep intact all notices that + refer to this License and to the disclaimer of warranties. You may + not distribute, publicly display, publicly perform, or publicly + digitally perform the Work with any technological measures that + control access or use of the Work in a manner inconsistent with + the terms of this License Agreement. The above applies to the Work + as incorporated in a Collective Work, but this does not require + the Collective Work apart from the Work itself to be made subject + to the terms of this License. If You create a Collective Work, + upon notice from any Licensor You must, to the extent practicable, + remove from the Collective Work any credit as required by clause + 4(c), as requested. If You create a Derivative Work, upon notice + from any Licensor You must, to the extent practicable, remove from + the Derivative Work any credit as required by clause 4(c), as + requested. + b. You may distribute, publicly display, publicly perform, or + publicly digitally perform a Derivative Work only under the terms + of this License, a later version of this License with the same + License Elements as this License, or a Creative Commons iCommons + license that contains the same License Elements as this License + (e.g. Attribution-ShareAlike 2.5 Japan). You must include a copy + of, or the Uniform Resource Identifier for, this License or other + license specified in the previous sentence with every copy or + phonorecord of each Derivative Work You distribute, publicly + display, publicly perform, or publicly digitally perform. You may + not offer or impose any terms on the Derivative Works that alter + or restrict the terms of this License or the recipients' exercise + of the rights granted hereunder, and You must keep intact all + notices that refer to this License and to the disclaimer of + warranties. You may not distribute, publicly display, publicly + perform, or publicly digitally perform the Derivative Work with + any technological measures that control access or use of the Work + in a manner inconsistent with the terms of this License Agreement. + The above applies to the Derivative Work as incorporated in a + Collective Work, but this does not require the Collective Work + apart from the Derivative Work itself to be made subject to the + terms of this License. + c. If you distribute, publicly display, publicly perform, or publicly + digitally perform the Work or any Derivative Works or Collective + Works, You must keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) + the name of the Original Author (or pseudonym, if applicable) if + supplied, and/or (ii) if the Original Author and/or Licensor + designate another party or parties (e.g. a sponsor institute, + publishing entity, journal) for attribution in Licensor's + copyright notice, terms of service or by other reasonable means, + the name of such party or parties; the title of the Work if + supplied; to the extent reasonably practicable, the Uniform + Resource Identifier, if any, that Licensor specifies to be + associated with the Work, unless such URI does not refer to the + copyright notice or licensing information for the Work; and in the + case of a Derivative Work, a credit identifying the use of the + Work in the Derivative Work (e.g., "French translation of the Work + by Original Author," or "Screenplay based on original Work by + Original Author"). Such credit may be implemented in any + reasonable manner; provided, however, that in the case of a + Derivative Work or Collective Work, at a minimum such credit will + appear where any other comparable authorship credit appears and in + a manner at least as prominent as such other comparable authorship + credit. + + 5. Representations, Warranties and Disclaimer + + UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS + THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND + CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, + INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, + FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF + LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF + ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW + THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY + TO YOU. + + 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY + APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY + LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR + EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, + EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + 7. Termination + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Derivative Works or + Collective Works from You under this License, however, will not + have their licenses terminated provided such individuals or + entities remain in full compliance with those licenses. Sections + 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + b. Subject to the above terms and conditions, the license granted + here is perpetual (for the duration of the applicable copyright in + the Work). Notwithstanding the above, Licensor reserves the right + to release the Work under different license terms or to stop + distributing the Work at any time; provided, however that any such + election will not serve to withdraw this License (or any other + license that has been, or is required to be, granted under the + terms of this License), and this License will continue in full + force and effect unless terminated as stated above. + + 8. Miscellaneous + a. Each time You distribute or publicly digitally perform the Work or + a Collective Work, the Licensor offers to the recipient a license + to the Work on the same terms and conditions as the license + granted to You under this License. + b. Each time You distribute or publicly digitally perform a + Derivative Work, Licensor offers to the recipient a license to the + original Work on the same terms and conditions as the license + granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability + of the remainder of the terms of this License, and without further + action by the parties to this agreement, such provision shall be + reformed to the minimum extent necessary to make such provision + valid and enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in + writing and signed by the party to be charged with such waiver or + consent. + e. This License constitutes the entire agreement between the parties + with respect to the Work licensed here. There are no + understandings, agreements or representations with respect to the + Work not specified here. Licensor shall not be bound by any + additional provisions that may appear in any communication from + You. This License may not be modified without the mutual written + agreement of the Licensor and You. + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, neither party will use the trademark + "Creative Commons" or any related trademark or logo of Creative + Commons without the prior written consent of Creative Commons. Any + permitted use will be in compliance with Creative Commons' + then-current trademark usage guidelines, as may be published on its + website or otherwise made available upon request from time to time. + + Creative Commons may be contacted at http://creativecommons.org/. diff --git a/usr/local/share/protocols/aim.pat b/usr/local/share/protocols/aim.pat new file mode 100644 index 000000000..5c43930fd --- /dev/null +++ b/usr/local/share/protocols/aim.pat @@ -0,0 +1,28 @@ +# AIM - AOL instant messenger (OSCAR and TOC) +# Pattern attributes: good slow notsofast +# Protocol groups: chat proprietary +# Wiki: http://www.protocolinfo.org/wiki/AIM +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 5190 +# +# This may also match ICQ traffic. +# +# This pattern has been tested and is believed to work well. + +aim +# See http://gridley.res.carleton.edu/~straitm/final (and various other places) +# The first bit matches OSCAR signon and data commands, but not sure what +# \x03\x0b matches, but it works apparently. +# The next three bits match various parts of the TOC signon process. +# The third one is the magic number "*", then 0x01 for "signon", then up to four +# bytes ("up to" because l7-filter strips out nulls) which contain a sequence +# number (2 bytes) the data length (2 more) and 3 nulls (which don't count), +# then 0x01 for the version number (not sure if there ever has been another +# version) +# The fourth one is a command string, followed by some stuff, then the +# beginning of the "roasted" password + +# This pattern is too slow! + +^(\*[\x01\x02].*\x03\x0b|\*\x01.?.?.?.?\x01)|flapon|toc_signon.*0x diff --git a/usr/local/share/protocols/aimwebcontent.pat b/usr/local/share/protocols/aimwebcontent.pat new file mode 100644 index 000000000..bc9a22d8c --- /dev/null +++ b/usr/local/share/protocols/aimwebcontent.pat @@ -0,0 +1,10 @@ +# AIM web content - ads/news content downloaded by AOL Instant Messenger +# Pattern attributes: good notsofast notsofast +# Protocol groups: chat document_retrieval proprietary +# Wiki: http://www.protocolinfo.org/wiki/AIM +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested and is believed to work well. + +aimwebcontent +user-agent:aim/ diff --git a/usr/local/share/protocols/any.pat b/usr/local/share/protocols/any.pat new file mode 100644 index 000000000..56d813496 --- /dev/null +++ b/usr/local/share/protocols/any.pat @@ -0,0 +1,8 @@ +# Unknown - Dummy pattern for old unmatched connections. + +unknown +# This pattern is ignored by the kernel. It sees that the "protocol" is +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# "unknown" and always returns unmatched for connections that are still +# being tested. +. diff --git a/usr/local/share/protocols/applejuice.pat b/usr/local/share/protocols/applejuice.pat new file mode 100644 index 000000000..eb552dc72 --- /dev/null +++ b/usr/local/share/protocols/applejuice.pat @@ -0,0 +1,12 @@ +# Apple Juice - P2P filesharing - http://www.applejuicenet.de +# Pattern attributes: great veryfast fast +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/AppleJuice +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested with the Linux version (version +# 0,29,142,229). It matches search reqests and file transfers. + +applejuice +# this pattern extracted from ipp2p, by Eicke Friedrich. +^ajprot\x0d\x0a diff --git a/usr/local/share/protocols/ares.pat b/usr/local/share/protocols/ares.pat new file mode 100644 index 000000000..32dc70d10 --- /dev/null +++ b/usr/local/share/protocols/ares.pat @@ -0,0 +1,63 @@ +# Ares - P2P filesharing - http://aresgalaxy.sf.net +# Pattern attributes: good veryfast fast undermatch +# Protocol groups: p2p open_source +# Wiki: http://www.protocolinfo.org/wiki/Ares +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# This pattern catches only client-server connect messages. This is +# sufficient for blocking, but not for shaping, since it doesn't catch +# the actual file transfers (see below). + +# Original pattern by Brandon Enright + +# This pattern has been tested with Ares 1.8.8.2998. + +ares +# regular expression madness: "[]Z]" means ']' or 'Z'. +^\x03[]Z].?.?\x05$ + +# It appears that the general packet format is: +# - Two byte little endian integer giving the data length +# - One byte packet type +# - data +# +# Login packets (TCP) have the following format: +# - \x03\x00 (the length appears to always be 3) +# - \x5a - The login packet type. +# The source code suggests that for supernodes \x5d is used instead. +# - Three more bytes. I don't know the meaning of these, but for me they +# are always \x06\x06\x05 (in Ares 1.8.8.2998). From the comments in IPP2P, +# it seems that they are not always exactly that, but seem to always end in +# \x05. +# +# Search packets have the following format: +# - Two byte little endian integer giving the data length +# A single two letter word make this \x0a +# The biggest I could get it was \x4f +# - Packet type = \x09 +# - One byte document type: +# - "all" = 00 +# - "audio" = 01 +# - "software" = 03 +# - "video" = 05 +# - "document" = 06 +# - "image" = 07 +# - "other" = 08 +# - \x0f - I don't know what this means, but it is always this for me +# - Two bytes of unknown meaning that change +# - Some number search words: +# - \x14 - I don't know what this means, but it is always this for me +# - One byte length of the first search word +# Between 2 and \x14 in my tests with Ares 1.8.8.2998 +# It ignores single letter words and truncates ones longer than \x14 +# - Two bytes of unknown meaning that change +# - The search word (not null terminated) +# This was all investigated by searching for strings in "all". Searches +# can also be performed in "title" and "author". I'm not going to +# bother to research these because I new realize that searches are done +# on the same TCP connection as the login packets, so there is no need +# to match them separately. +# +# File transfers appear to be encrypted or at least obfuscated. (The +# files themselves, at least, are not transmitted in the clear.) I +# haven't found any patterns. diff --git a/usr/local/share/protocols/armagetron.pat b/usr/local/share/protocols/armagetron.pat new file mode 100644 index 000000000..a0324104e --- /dev/null +++ b/usr/local/share/protocols/armagetron.pat @@ -0,0 +1,12 @@ +# Armagetron Advanced - open source Tron/snake based multiplayer game +# Pattern attributes: good slow notsofast +# Protocol groups: open_source game +# Wiki: http://protocolinfo.org/wiki/Armagetron +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# Contributed to protocolinfo.org, possibly by joda.bot, who says "The +# filter matches the initial transfer of configuration data. Very early +# versions might not transfer the CYCLE_ Settings (before 0.2.5.x)." + +armagetron +YCLC_E|CYEL diff --git a/usr/local/share/protocols/audiogalaxy.pat b/usr/local/share/protocols/audiogalaxy.pat new file mode 100644 index 000000000..db1999a40 --- /dev/null +++ b/usr/local/share/protocols/audiogalaxy.pat @@ -0,0 +1,19 @@ +# Audiogalaxy - (defunct) Peer to Peer filesharing +# Pattern attributes: ok fast fast +# Protocol groups: p2p obsolete +# Wiki: http://protocolinfo.org/wiki/Audiogalaxy +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# http://www.movspclr.co.uk/info/agprotocol.html +# +# This pattern is untested. +# +# To get or provide more information about this protocol and/or pattern: +# http://www.protocolinfo.org/wiki/Audiogalaxy +# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers + +audiogalaxy +# (magic cookie that starts conversations)|(magic cookie that starts +# 0.606W/0.608W client/server conversations and a string that should always +# appear in login messages) +^(\x45\x5f\xd0\xd5|\x45\x5f.*0.60(6|8)W) diff --git a/usr/local/share/protocols/battlefield1942.pat b/usr/local/share/protocols/battlefield1942.pat new file mode 100644 index 000000000..ed7a7bf0f --- /dev/null +++ b/usr/local/share/protocols/battlefield1942.pat @@ -0,0 +1,14 @@ +# Battlefield 1942 - An EA game +# Pattern attributes: ok veryfast fast +# Protocol groups: game proprietary +# Wiki: http://www.protocolinfo.org/wiki/Battlefield_1942 +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Contributed by Myles Uyema +# +# This pattern has only been tested by one person. + +# tested on two original EA battlefield 1942 servers +# matches the first two packets of joining a server +battlefield1942 +^\x01\x11\x10\|\xf8\x02\x10\x40\x06 diff --git a/usr/local/share/protocols/battlefield2.pat b/usr/local/share/protocols/battlefield2.pat new file mode 100644 index 000000000..e2d879151 --- /dev/null +++ b/usr/local/share/protocols/battlefield2.pat @@ -0,0 +1,26 @@ +# Battlefield 2 - An EA game. +# Pattern attributes: ok slow notsofast +# Protocol groups: game proprietary +# Wiki: http://www.protocolinfo.org/wiki/Battlefield_2 +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern is unconfirmed except implicitly by a comment on protocolinfo. + +battlefield2 +# gameplay|account-login|server browsing/information +# See http://protocolinfo.org/wiki/Battlefield_2 +# Can we put a ^ on the last branch? If so, nosofast --> veryfast + +# 193.85.217.35 on protocolinfo says: +# The first part of the pattern, \x11\x20\x01\xa0\x98\x11, has to be +# modified for different version of Battlefield 2. The gameplay part of +# pattern for BF2 v1.4 is \x11\x20\x01\x30\xb9\x10\x11, and for BF2 +# v1.41 is \x11\x20\x01\x50\xb9\x10\x11 +# +# Rather than put all of those in, I've just gone with "...?" in the +# middle. + +^(\x11\x20\x01...?\x11|\xfe\xfd.?.?.?.?.?.?(\x14\x01\x06|\xff\xff\xff))|[]\x01].?battlefield2 + +# Pattern prior to 193.85.217.35's comment on protocolinfo: +#^(\x11\x20\x01\xa0\x98\x11|\xfe\xfd.?.?.?.?.?.?(\x14\x01\x06|\xff\xff\xff))|[]\x01].?battlefield2 diff --git a/usr/local/share/protocols/battlefield2142.pat b/usr/local/share/protocols/battlefield2142.pat new file mode 100644 index 000000000..4c0e42b14 --- /dev/null +++ b/usr/local/share/protocols/battlefield2142.pat @@ -0,0 +1,14 @@ +# Battlefield 2142 - An EA game. +# Pattern attributes: ok fast fast +# Protocol groups: proprietary game +# Wiki: http://protocolinfo.org/wiki/Battlefield_2142 +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# Submitted by Telsin. Not confirmed. + +battlefield2142 +# gameplay|account-login|server browsing/information +# Can't put a ^ on the last branch: it fails to match if you do. +# This branch seems to matter very rarely, though +^(\x11\x20\x01\x90\x50\x64\x10|\xfe\xfd.?.?.?\x18|[\x01\\].?battlefield2) + diff --git a/usr/local/share/protocols/bgp.pat b/usr/local/share/protocols/bgp.pat new file mode 100644 index 000000000..61e417f00 --- /dev/null +++ b/usr/local/share/protocols/bgp.pat @@ -0,0 +1,19 @@ +# BGP - Border Gateway Protocol - RFC 1771 +# Pattern attributes: ok veryfast fast +# Protocol groups: networking ietf_draft_standard +# Wiki: http://www.protocolinfo.org/wiki/BGP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern is UNTESTED. + +bgp +# "After a transport protocol connection is established, the first +# message sent by each side is an OPEN message." +# "If the Type of the message is OPEN, or if the Authentication Code used +# in the OPEN message of the connection is zero, then the Marker must be +# all ones." +# Then the 2 byte length field, then the 1 byte type field (1 = OPEN). +# Then the BGP version: 3 was RFC'd in 1991, 4 was RFC'd in 1995. +# Could keep going, but that should be sufficient. +^\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff..?\x01[\x03\x04] + diff --git a/usr/local/share/protocols/biff.pat b/usr/local/share/protocols/biff.pat new file mode 100644 index 000000000..91e8bbf62 --- /dev/null +++ b/usr/local/share/protocols/biff.pat @@ -0,0 +1,16 @@ +# Biff - new mail notification +# Pattern attributes: good fast fast undermatch overmatch +# Protocol groups: mail +# Wiki: http://www.protocolinfo.org/wiki/Biff +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 512 +# +# This pattern is completely untested. + +biff +# This is a rare case where we will specify a $ (end of line), since +# this is the entirety of the communication. +# something that looks like a username, an @, a number. +# won't catch usernames that have strange characters in them. +^[a-z][a-z0-9]+@[1-9][0-9]+$ diff --git a/usr/local/share/protocols/bittorrent.pat b/usr/local/share/protocols/bittorrent.pat new file mode 100644 index 000000000..54063ce89 --- /dev/null +++ b/usr/local/share/protocols/bittorrent.pat @@ -0,0 +1,25 @@ +# Bittorrent - P2P filesharing / publishing tool - http://www.bittorrent.com +# Pattern attributes: good slow notsofast undermatch +# Protocol groups: p2p open_source +# Wiki: http://www.protocolinfo.org/wiki/Bittorrent +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested and is believed to work well. +# It will, however, not work on bittorrent streams that are encrypted, since +# it's impossible to match (well) encrypted data. + +bittorrent + +# Does not attempt to match the HTTP download of the tracker +# 0x13 is the length of "bittorrent protocol" +# Second two bits match UDP wierdness +# Next bit matches something Azureus does +# Ditto on the next bit. Could also match on "user-agent: azureus", but that's in the next +# packet and perhaps this will match multiple clients. +# bitcomet-specific strings contributed by liangjun. + +# This is not a valid GNU basic regular expression (but that's ok). +^(\x13bittorrent protocol|azver\x01$|get /scrape\?info_hash=get /announce\?info_hash=|get /client/bitcomet/|GET /data\?fid=)|d1:ad2:id20:|\x08'7P\)[RP] + +# This pattern is "fast", but won't catch as much +#^(\x13bittorrent protocol|azver\x01$|get /scrape\?info_hash=) diff --git a/usr/local/share/protocols/chikka.pat b/usr/local/share/protocols/chikka.pat new file mode 100644 index 000000000..a97ef28f7 --- /dev/null +++ b/usr/local/share/protocols/chikka.pat @@ -0,0 +1,17 @@ +# Chikka - SMS service which can be used without phones - http://chikka.com +# Pattern attributes: good fast fast superset +# Protocol groups: proprietary chat +# Wiki: http://www.protocolinfo.org/wiki/Chikka +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# Tested with Chikka Javalite on 14 Jan 2007. +# The login and chat use the same TCP connection. + +# "Kamusta" means "Hello" in Tagalog, apparently, so that will probably +# stay the same. I've only seen v1.2, but I've given it some leeway for +# past and future versions. + +# Chikka uses CIMD as part of the login process, see cimd.pat + +chikka +^CTPv1\.[123] Kamusta.*\x0d\x0a$ diff --git a/usr/local/share/protocols/cimd.pat b/usr/local/share/protocols/cimd.pat new file mode 100644 index 000000000..f5083506a --- /dev/null +++ b/usr/local/share/protocols/cimd.pat @@ -0,0 +1,19 @@ +# Computer Interface to Message Distribution, an SMSC protocol by Nokia +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: proprietary chat +# Wiki: http://www.protocolinfo.org/wiki/CIMD +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# I don't know whether CIMD is ever found by itself in a TCP connection. +# I have only seen it myself as part of the Chikka login process, in +# which the second and third packets (at least) are CIMD. So I am not +# using a '^' at the beginning. +# +# This pretty well explains the pattern: +# http://en.wikipedia.org/w/index.php?title=CIMD&oldid=42707583 +# However, Chikka does NOT terminate the last field with a tab. +# +# Tested with Chikka Javalite on 14 Jan 2007. + +cimd +\x02[0-4][0-9]:[0-9]+.*\x03$ diff --git a/usr/local/share/protocols/ciscovpn.pat b/usr/local/share/protocols/ciscovpn.pat new file mode 100644 index 000000000..d3dd7a6d6 --- /dev/null +++ b/usr/local/share/protocols/ciscovpn.pat @@ -0,0 +1,11 @@ +# Cisco VPN - VPN client software to a Cisco VPN server +# Pattern attributes: ok veryfast fast +# Protocol groups: remote_access proprietary +# Wiki: http://www.protocolinfo.org/wiki/Cisco_VPN +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern contributed by Myles Uyema + +ciscovpn +^\x01\xf4\x01\xf4 + diff --git a/usr/local/share/protocols/citrix.pat b/usr/local/share/protocols/citrix.pat new file mode 100644 index 000000000..fa73ce194 --- /dev/null +++ b/usr/local/share/protocols/citrix.pat @@ -0,0 +1,12 @@ +# Citrix ICA - proprietary remote desktop application - http://citrix.com +# Pattern attributes: marginal notsofast notsofast +# Protocol groups: remote_access proprietary +# Wiki: http://www.protocolinfo.org/wiki/Citrix +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern is UNTESTED. + +# This is based on decode_citrix in dsniff 2.4. + +citrix +\x32\x26\x85\x92\x58 diff --git a/usr/local/share/protocols/code_red.pat b/usr/local/share/protocols/code_red.pat new file mode 100644 index 000000000..df0beee6d --- /dev/null +++ b/usr/local/share/protocols/code_red.pat @@ -0,0 +1,8 @@ +# Code Red - a worm that attacks Microsoft IIS web servers +# Pattern attributes: ok fast notsofast subset +# Protocol groups: worm +# Wiki: http://www.protocolinfo.org/wiki/CodeRed +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +code_red +/default\.ida\?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a diff --git a/usr/local/share/protocols/counterstrike-source.pat b/usr/local/share/protocols/counterstrike-source.pat new file mode 100644 index 000000000..8ebd627a5 --- /dev/null +++ b/usr/local/share/protocols/counterstrike-source.pat @@ -0,0 +1,42 @@ +# Counterstrike (using the new "Source" engine) - network game +# Pattern attributes: good veryfast fast +# Protocol groups: game proprietary +# Wiki: http://www.protocolinfo.org/wiki/Counter-Strike +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# By adam.randazzoATgmail.com + +counterstrike-source +^\xff\xff\xff\xff.*cstrikeCounter-Strike + +# These games use Steam, which is developed by Valve Software. +# +# This was based off of the following captured data from ethereal: +# --Source-- +# 0000 00 11 09 2a a8 79 00 13 10 2c 3f d7 08 00 45 20 ...*.y...,?...E +# 0010 00 72 b9 f6 00 00 6b 11 b6 78 18 0e 04 cc c0 a8 .r....k..x...... +# 0020 01 6a 69 87 04 65 00 5e 01 ac ff ff ff ff 49 07 .ji..e.^......I. +# 0030 54 4a 27 73 20 50 6c 61 63 65 20 6f 66 20 50 61 TJ's Place of Pa +# 0040 69 6e 00 64 65 5f 70 69 72 61 6e 65 73 69 00 63 in.de_piranesi.c +# 0050 73 74 72 69 6b 65 00 43 6f 75 6e 74 65 72 2d 53 strike.Counter-S +# 0060 74 72 69 6b 65 3a 20 53 6f 75 72 63 65 00 dc 00 trike: Source... +# 0070 08 10 06 64 77 00 00 31 2e 30 2e 30 2e 31 38 00 ...dw..1.0.0.18. +# 0080 +# +# --1.6-- +# 0000 00 11 09 2a a8 79 00 13 10 2c 3f d7 08 00 45 00 ...*.y...,?...E. +# 0010 00 8e c4 1a 00 00 76 11 b3 85 08 09 02 fa c0 a8 ......v......... +# 0020 01 14 69 91 04 37 00 7a c9 90 ff ff ff ff 6d 38 ..i..7.z......m8 +# 0030 2e 39 2e 32 2e 32 35 30 3a 32 37 30 32 35 00 49 .9.2.250:27025.I +# 0040 50 20 2d 20 43 6c 61 6e 20 73 65 72 76 65 72 00 P - Clan server. +# 0050 64 65 5f 64 75 73 74 32 00 63 73 74 72 69 6b 65 de_dust2.cstrike +# 0060 00 43 6f 75 6e 74 65 72 2d 53 74 72 69 6b 65 00 .Counter-Strike. +# 0070 0a 0c 2f 64 77 00 01 77 77 77 2e 63 6f 75 6e 74 ../dw..www.count +# 0080 65 72 2d 73 74 72 69 6b 65 2e 6e 65 74 00 00 00 er-strike.net... +# 0090 01 00 00 00 00 9e f7 0a 00 01 00 00 ............ + + +# Old pattern. (Adam Randazzo says "CS 1.6 and CS: Source are the +# only two versions that are playable on the Internet since Valve +# disabled the WON system in favor of steam.") +# cs .*dl.www.counter-strike.net diff --git a/usr/local/share/protocols/cvs.pat b/usr/local/share/protocols/cvs.pat new file mode 100644 index 000000000..fc084d39d --- /dev/null +++ b/usr/local/share/protocols/cvs.pat @@ -0,0 +1,14 @@ +# CVS - Concurrent Versions System +# Pattern attributes: good veryfast fast +# Protocol groups: version_control open_source +# Wiki: http://www.protocolinfo.org/wiki/CVS +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +cvs + +# Matches pserver login. AUTH is for actually starting the protocol +# VERIFICATION is for authenticating without starting the protocols +# and GSSAPI is for using security services such as kerberos. +# http://www.loria.fr/~molli/cvs/doc/cvsclient_3.html + +^BEGIN (AUTH|VERIFICATION|GSSAPI) REQUEST\x0a diff --git a/usr/local/share/protocols/dayofdefeat-source.pat b/usr/local/share/protocols/dayofdefeat-source.pat new file mode 100644 index 000000000..42b24bb5f --- /dev/null +++ b/usr/local/share/protocols/dayofdefeat-source.pat @@ -0,0 +1,11 @@ +# Day of Defeat: Source - game (Half-Life 2 mod) - http://www.valvesoftware.com +# Pattern attributes: good veryfast fast +# Protocol groups: game proprietary +# Wiki: http://www.protocolinfo.org/wiki/Day_of_Defeat:Source +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# By Clayton Macleod + +dayofdefeat-source +^\xff\xff\xff\xff.*dodDay of Defeat + diff --git a/usr/local/share/protocols/dazhihui.pat b/usr/local/share/protocols/dazhihui.pat new file mode 100644 index 000000000..032440c25 --- /dev/null +++ b/usr/local/share/protocols/dazhihui.pat @@ -0,0 +1,11 @@ +# Dazhihui - stock analysis and trading; Chinese - http://www.gw.com.cn +# Pattern attributes: fast fast ok +# Protocol groups: +# Wiki: http://www.protocolinfo.org/wiki/Dazhihui +# Copyright (C) 2009 Matthew Strait; See ../LICENSE + +# Pattern contributed by liangjun without comment. + +dazhihui +^(longaccoun|qsver2auth|\x35[57]\x30|\+\x10\*) + diff --git a/usr/local/share/protocols/dhcp.pat b/usr/local/share/protocols/dhcp.pat new file mode 100644 index 000000000..426480d49 --- /dev/null +++ b/usr/local/share/protocols/dhcp.pat @@ -0,0 +1,36 @@ +# DHCP - Dynamic Host Configuration Protocol - RFC 1541 +# Pattern attributes: good veryfast fast +# Protocol groups: networking ietf_draft_standard +# Wiki: http://www.protocolinfo.org/wiki/DHCP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on ports 67 (server) and 68 (client) +# +# Also matches BOOTP (Bootstrap Protocol (RFC 951)) in the case that +# the "vendor specific options" are used (these options were made standard +# for DHCP). +# +# This pattern is lightly tested. + +dhcp +^[\x01\x02][\x01- ]\x06.*c\x82sc + +# Let's break that down: +# +# (\x01|\x02) is for BOOTREQUEST or BOOTREPLY +# Is there a demand for doing these separately? The Packeteer does. +# +# [\x01-\x20] is for any of the hardware address types listed at +# (http://www.iana.org/assignments/arp-parameters) and hopefully faster +# ethernets too (100, 1000 and 10000mb) as well (do they share the 10mb +# number?). +# +# \x06 for "hardware address length = 6 bytes". Does anyone use other lengths +# these days? If so, this pattern won't match it as it stands. +# +# .* covers the hops, xid, secs, flags, ciaddr, yiaddr, siaddr, giaddr, +# chaddr, sname and file fields. While this can't really be "any number +# of characters" long, it doesn't seem worth it to count. +# Can we make this more specific by restricting the number of hops or seconds? +# +# 0x63825363 is the "magic cookie" which begins the DHCP options field. diff --git a/usr/local/share/protocols/directconnect.pat b/usr/local/share/protocols/directconnect.pat new file mode 100644 index 000000000..13be4a116 --- /dev/null +++ b/usr/local/share/protocols/directconnect.pat @@ -0,0 +1,14 @@ +# Direct Connect - P2P filesharing - http://www.neo-modus.com +# Pattern attributes: good fast fast +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/Direct_Connect +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Direct Connect "hubs" listen on port 411 +# http://www.dcpp.net/wiki/ +# I've verified that this pattern can be used to limit direct connect +# bandwidth using DC:PRO 0.2.3.149R11. + +directconnect +# client-to-client handshake|client-to-hub login, hub speaking|client-to-hub login, client speaking +^(\$mynick |\$lock |\$key ) diff --git a/usr/local/share/protocols/dns.pat b/usr/local/share/protocols/dns.pat new file mode 100644 index 000000000..c351831a7 --- /dev/null +++ b/usr/local/share/protocols/dns.pat @@ -0,0 +1,63 @@ +# DNS - Domain Name System - RFC 1035 +# Pattern attributes: great slow fast +# Protocol groups: networking ietf_internet_standard +# Wiki: http://www.protocolinfo.org/wiki/DNS +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# Thanks to Sebastien Bechet for TLD detection +# improvements + +# While RFC 2181 says "Occasionally it is assumed that the Domain Name +# System serves only the purpose of mapping Internet host names to data, +# and mapping Internet addresses to host names. This is not correct, the +# DNS is a general (if somewhat limited) hierarchical database, and can +# store almost any kind of data, for almost any purpose.", we will assume +# just that, because that represents the vast majority of DNS traffic. + +# The packet starts with a 2 byte random ID number and 2 bytes of flags that +# aren't easy to match on. + +# The first thing that is matchable is QDCOUNT, the number of queries. +# Despite the fact that you can apparently ask for up to 65535 +# things at a time, usually you only ask for one and I doubt you ever ask for +# zero. Let's allow up to two, just in case (even though I can't find any +# situation that generates more than one). + +# Next comes the ANCOUNT, NSCOUNT, and ARCOUNT fields, which could be null +# or some smallish number, not matchable except by length (up to 6) + +# The next matchable thing is the query address. The first byte indicates the +# length of the first part of the address, which is limited to 63 (0x3F == '?'). +# The next byte has to be a letter (for domain names) or number (for reverse lookups). +# Then there can be an combination of +# letters, digits, hyphens, and 0x01-0x3F length markers. +# Then we check for the presence of a top-level-domain at some later point. +# This is indicated by a 0x02-0x06 and at least two letters, followed by no +# more than four more letters. +# Note that this will miss a very few queries that are for a TLD alone. +# i.e. "host museum" (195.7.77.17) +# +# http://www.icann.org/tlds http://www.iana.org/cctld/cctld-whois.htm + +# next is the QTYPE field, which has valid values 1-16 (although this +# could probably be restricted further since many are rare) and \x1c for +# IPv6 (and maybe more?). It should follow immediately after the TLD +# (and some stripped-out nulls) + +# next is QCLASS, which has valid values 1-4 and 255, except 2 is never used. +# I'm not sure if 3 and 4 are used, so I'll include them. 1=Internet 255=any + +# If we wanted to match queries and responses separately, there could be +# more specifics after this for the responses. + +dns +# here's a sane way of doing it +^.?.?.?.?[\x01\x02].?.?.?.?.?.?[\x01-?][a-z0-9][\x01-?a-z]*[\x02-\x06][a-z][a-z][fglmoprstuvz]?[aeop]?(um)?[\x01-\x10\x1c][\x01\x03\x04\xFF] + +# This way assumes that TLDs are any alpha string 2-6 characters long. +# If TLDs are added, this is a good fallback. +#^.?.?.?.?[\x01\x02].?.?.?.?.?.?[\x01-?][a-z0-9][\x01-?a-z]*[\x02-\x06][a-z][a-z][a-z]?[a-z]?[a-z]?[a-z]?[\x01-\x10][\x01\x03\x04\xFF] + +# If you have more processing power than me, you can substitute this for +# the [a-z][a-z][a-z]?[a-z]?[a-z]?[a-z]? +#(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|arpa|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw) diff --git a/usr/local/share/protocols/doom3.pat b/usr/local/share/protocols/doom3.pat new file mode 100644 index 000000000..7d32d6f95 --- /dev/null +++ b/usr/local/share/protocols/doom3.pat @@ -0,0 +1,10 @@ +# Doom 3 - computer game +# Pattern attributes: good veryfast fast +# Protocol groups: game proprietary +# Wiki: http://www.protocolinfo.org/wiki/Doom +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Thanks to Clayton Macleod (cherrytwist at gmail.com). + +doom3 +^\xff\xffchallenge diff --git a/usr/local/share/protocols/edonkey.pat b/usr/local/share/protocols/edonkey.pat new file mode 100644 index 000000000..bc2522e3b --- /dev/null +++ b/usr/local/share/protocols/edonkey.pat @@ -0,0 +1,37 @@ +# eDonkey2000 - P2P filesharing - http://edonkey2000.com and others +# Pattern attributes: good fast fast overmatch +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/EDonkey +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Tested recently (April/May 2006) with eMule 0.47a and eDonkey2000 1.4 +# and a long time ago with something else. +# +# In addition to matching what you might expect, this matches much of +# what eMule does when you tell it to only connect to the KAD network. +# I don't quite know what to make of this. + +# Thanks to Matt Skidmore + +edonkey + +# http://gd.tuwien.ac.at/opsys/linux/sf/p/pdonkey/eDonkey-protocol-0.6 +# +# In addition to \xe3, \xc5 and \xd4, I see a lot of \xe5. +# As of April 2006, I also see some \xe4. +# +# God this is a mess. What an irritating protocol. +# This will match about 2% of streams with random data in them! +# (But fortunately much fewer than 2% of streams that are other protocols. +# You can test this with the data in ../testing/) + +^[\xc5\xd4\xe3-\xe5].?.?.?.?([\x01\x02\x05\x14\x15\x16\x18\x19\x1a\x1b\x1c\x20\x21\x32\x33\x34\x35\x36\x38\x40\x41\x42\x43\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58[\x60\x81\x82\x90\x91\x93\x96\x97\x98\x99\x9a\x9b\x9c\x9e\xa0\xa1\xa2\xa3\xa4]|\x59................?[ -~]|\x96....$) + +# matches everything and too much +# ^(\xe3|\xc5|\xd4) + +# ipp2p essentially uses "\xe3....\x47", which doesn't seem at all right to me. + +# bandwidtharbitrator uses +# e0.*@.*6[a-z].*p$|e0.*@.*[a-z]6[a-z].*p0$|e.*@.*[0-9]6.*p$|emule|edonkey +# no comments to explain what all the mush is, of course... diff --git a/usr/local/share/protocols/exe.pat b/usr/local/share/protocols/exe.pat new file mode 100644 index 000000000..0a16e2ad4 --- /dev/null +++ b/usr/local/share/protocols/exe.pat @@ -0,0 +1,20 @@ +# Executable - Microsoft PE file format. +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: file + +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# Thanks to Brandon Enright [bmenrighATucsd.edu] + +# This pattern doesn't techincally match the PE file format but rather the +# MZ stub program Microsoft uses for backwards compatibility with DOS. +# That means this will correctly match DOS executables too. + +exe +# There are two different stubs used depending on the compiler/packer. +# Numerous NULL bytes have been stripped from this pattern. + +# This pattern may be more efficient: +# \x4d\x5a\x90\x03\x04|\x4d\x5a\x50\x02\x04 + +# This is easier to understand: +\x4d\x5a(\x90\x03|\x50\x02)\x04 diff --git a/usr/local/share/protocols/fasttrack.pat b/usr/local/share/protocols/fasttrack.pat new file mode 100644 index 000000000..6ed8ff1d1 --- /dev/null +++ b/usr/local/share/protocols/fasttrack.pat @@ -0,0 +1,23 @@ +# FastTrack - P2P filesharing (Kazaa, Morpheus, iMesh, Grokster, etc) +# Pattern attributes: good slow notsofast +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/Fasttrack +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Tested with Kazaa Lite Resurrection 0.0.7.6F +# +# This appears to match the download connections well, but not the search +# connections (I think they are encrypted :-( ). + +fasttrack +# while this is a valid http request, this will be caught because +# the http pattern matches the response (and therefore the next packet) +# Even so, it's best to put this match earlier in the chain. +# http://cvs.berlios.de/cgi-bin/viewcvs.cgi/gift-fasttrack/giFT-FastTrack/PROTOCOL?rev=HEAD&content-type=text/vnd.viewcvs-markup + +# This pattern is kinda slow, but not too bad. +^get (/.download/[ -~]*|/.supernode[ -~]|/.status[ -~]|/.network[ -~]*|/.files|/.hash=[0-9a-f]*/[ -~]*) http/1.1|user-agent: kazaa|x-kazaa(-username|-network|-ip|-supernodeip|-xferid|-xferuid|tag)|^give [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]?[0-9]?[0-9]? + +# This isn't much faster: +#^get (/.download/.*|/.supernode.|/.status.|/.network.*|/.files|/.hash=[0-9a-f]*/.*) http/1.1|user-agent: kazaa|x-kazaa(-username|-network|-ip|-supernodeip|-xferid|-xferuid|tag)|^give [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]?[0-9]?[0-9]? + diff --git a/usr/local/share/protocols/finger.pat b/usr/local/share/protocols/finger.pat new file mode 100644 index 000000000..7f81d48fd --- /dev/null +++ b/usr/local/share/protocols/finger.pat @@ -0,0 +1,15 @@ +# Finger - User information server - RFC 1288 +# Pattern attributes: good slow slow undermatch overmatch +# Protocol groups: ietf_draft_standard +# Wiki: http://www.protocolinfo.org/wiki/Finger +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 79 +# +# This pattern is lightly tested. + +finger +# The first matches the client request, which should look like a username. +# The second matches the usual UNIX reply (but remember that they are +# allowed to say whatever they want) +^[a-z][a-z0-9\-_]+|login: [\x09-\x0d -~]* name: [\x09-\x0d -~]* Directory: diff --git a/usr/local/share/protocols/flash.pat b/usr/local/share/protocols/flash.pat new file mode 100644 index 000000000..23e5d743b --- /dev/null +++ b/usr/local/share/protocols/flash.pat @@ -0,0 +1,18 @@ +# Flash - Macromedia Flash. +# Pattern attributes: good slow notsofast subset +# Protocol groups: file + +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# Thanks to Brandon Enright {bmenrigh AT ucsd.edu} and chinalantian at +# 126 dot com + +# Macromedia spec: +# http://download.macromedia.com/pub/flash/flash_file_format_specification.pdf +# See also: +# http://www.digitalpreservation.gov/formats/fdd/fdd000130.shtml +# http://osflash.org/flv + +flash +# FWS = uncompressed, CWS = compressed, next byte is version number +# FLV = video +[FC]WS[\x01-\x09]|FLV\x01\x05\x09 diff --git a/usr/local/share/protocols/freenet.pat b/usr/local/share/protocols/freenet.pat new file mode 100644 index 000000000..c62ad576a --- /dev/null +++ b/usr/local/share/protocols/freenet.pat @@ -0,0 +1,10 @@ +# Freenet - Anonymous information retrieval - http://freenetproject.org +# Pattern attributes: poor veryfast fast +# Protocol groups: p2p document_retrieval open_source +# Wiki: http://www.protocolinfo.org/wiki/Freenet +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +freenet +# Freenet is intentionally hard to identify... +# This is empirical, only tested on one computer, and unlikely to work anymore. +^\x01[\x08\x09][\x03\x04] diff --git a/usr/local/share/protocols/ftp.pat b/usr/local/share/protocols/ftp.pat new file mode 100644 index 000000000..44d97c467 --- /dev/null +++ b/usr/local/share/protocols/ftp.pat @@ -0,0 +1,46 @@ +# FTP - File Transfer Protocol - RFC 959 +# Pattern attributes: great notsofast fast +# Protocol groups: document_retrieval ietf_internet_standard +# Wiki: http://protocolinfo.org/wiki/FTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 21. Note that the data stream is on a dynamically +# assigned port, which means that you will need the FTP connection +# tracking module in your kernel to usefully match FTP data transfers. +# +# This pattern is well tested. +# +# Handles the first two things a server should say: +# +# First, the server says it's ready by sending "220". Most servers say +# something after 220, even though they don't have to, and it usually +# includes the string "ftp" (l7-filter is case insensitive). This +# includes proftpd, vsftpd, wuftpd, warftpd, pureftpd, Bulletproof FTP +# Server, and whatever ftp.microsoft.com uses. Almost all servers use only +# ASCII printable characters between the "220" and the "FTP", but non-English +# ones might use others. +# +# The next thing the server sends is a 331. All the above servers also +# send something including "password" after this code. By default, we +# do not match on this because it takes another packet and is more work +# for regexec. + +ftp +# by default, we allow only ASCII +^220[\x09-\x0d -~]*ftp + +# This covers UTF-8 as well +#^220[\x09-\x0d -~\x80-\xfd]*ftp + +# This allows any characters and is about 4x faster than either of the above +# (which are about the same as each other) +#^220.*ftp + +# This is much slower +#^220[\x09-\x0d -~]*ftp|331[\x09-\x0d -~]*password + +# This pattern is more precise, but takes longer to match. (3 packets vs. 1) +#^220[\x09-\x0d -~]*\x0d\x0aUSER[\x09-\x0d -~]*\x0d\x0a331 + +# same as above, but slightly less precise and only takes 2 packets. +#^220[\x09-\x0d -~]*\x0d\x0aUSER[\x09-\x0d -~]*\x0d\x0a diff --git a/usr/local/share/protocols/gif.pat b/usr/local/share/protocols/gif.pat new file mode 100644 index 000000000..d54ed9193 --- /dev/null +++ b/usr/local/share/protocols/gif.pat @@ -0,0 +1,8 @@ +# GIF - Popular Image format. +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: file + +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +gif +# drawn from /usr/share/magic +GIF8(7|9)a diff --git a/usr/local/share/protocols/gkrellm.pat b/usr/local/share/protocols/gkrellm.pat new file mode 100644 index 000000000..73eb53748 --- /dev/null +++ b/usr/local/share/protocols/gkrellm.pat @@ -0,0 +1,13 @@ +# Gkrellm - a system monitor - http://gkrellm.net +# Pattern attributes: great veryfast fast +# Protocol groups: monitoring open_source +# Wiki: http://www.protocolinfo.org/wiki/Gkrellm +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested and is believed to work well. +# Since this is not anything resembling a published protocol, it may change without +# warning in new versions of gkrellm. + +gkrellm +# tested with gkrellm 2.2.7 +^gkrellm [23].[0-9].[0-9]\x0a$ diff --git a/usr/local/share/protocols/gnucleuslan.pat b/usr/local/share/protocols/gnucleuslan.pat new file mode 100644 index 000000000..ae5895b4f --- /dev/null +++ b/usr/local/share/protocols/gnucleuslan.pat @@ -0,0 +1,10 @@ +# GnucleusLAN - LAN-only P2P filesharing +# Pattern attributes: good notsofast notsofast +# Protocol groups: p2p open_source +# Wiki: http://www.protocolinfo.org/wiki/GnucleusLAN +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested and is believed to work well. + +gnucleuslan +gnuclear connect/[\x09-\x0d -~]*user-agent: gnucleus [\x09-\x0d -~]*lan: diff --git a/usr/local/share/protocols/gnutella.pat b/usr/local/share/protocols/gnutella.pat new file mode 100644 index 000000000..770ed43b3 --- /dev/null +++ b/usr/local/share/protocols/gnutella.pat @@ -0,0 +1,34 @@ +# Gnutella - P2P filesharing +# Pattern attributes: good notsofast notsofast +# Protocol groups: p2p open_source +# Wiki: http://www.protocolinfo.org/wiki/Gnutella +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This should match both Gnutella and "Gnutella2" ("Mike's protocol") +# +# Various clients use this protocol including Mactella, Shareaza, +# GTK-gnutella, Gnucleus, Gnotella, LimeWire, iMesh and BearShare. +# +# This is tested with gtk-gnutella and Shareaza. + +# http://www.gnutella2.com/tiki-index.php?page=UDP%20Transceiver +# http://rfc-gnutella.sf.net/ +# http://www.gnutella2.com/tiki-index.php?page=Gnutella2%20Specification +# http://en.wikipedia.org/wiki/Shareaza + +gnutella + +# The first part matches UDP messages - All start with "GND", then have +# a flag byte which is either \x00, \x01 or \x02, then two sequence bytes +# that can be anything, then a fragment number, which must start at 1. +# The rest matches TCP first client message or first server message (in case +# we can't see client messages). Some parts of this are empirical rather than +# document based. Assumes version is between 0.0 and 2.9. (usually is +# 0.4 or 0.6). I'm guessing at many of the user-agents. +# The last bit is emprical and probably only matches Limewire. +^(gnd[\x01\x02]?.?.?\x01|gnutella connect/[012]\.[0-9]\x0d\x0a|get /uri-res/n2r\?urn:sha1:|get /.*user-agent: (gtk-gnutella|bearshare|mactella|gnucleus|gnotella|limewire|imesh)|get /.*content-type: application/x-gnutella-packets|giv [0-9]*:[0-9a-f]*/|queue [0-9a-f]* [1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?:[1-9][0-9]?[0-9]?[0-9]?|gnutella.*content-type: application/x-gnutella|...................?lime) + +# Needlessly precise, at the expense of time +#^(gnd[\x01\x02]?.?.?\x01|gnutella connect/[012]\.[0-9]\x0d\x0a|get /uri-res/n2r\?urn:sha1:|get /[\x09-\x0d -~]*user-agent: (gtk-gnutella|bearshare|mactella|gnucleus|gnotella|limewire|imesh)|get /[\x09-\x0d -~]*content-type: application/x-gnutella-packets|giv [0-9]*:[0-9a-f]*/|queue [0-9a-f]* [1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?:[1-9][0-9]?[0-9]?[0-9]?|gnutella[\x09-\x0d -~]*content-type: application/x-gnutella|..................lime) + + diff --git a/usr/local/share/protocols/goboogy.pat b/usr/local/share/protocols/goboogy.pat new file mode 100644 index 000000000..d88d00b37 --- /dev/null +++ b/usr/local/share/protocols/goboogy.pat @@ -0,0 +1,13 @@ +# GoBoogy - a Korean P2P protocol +# Pattern attributes: marginal slow notsofast +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/GoBoogy +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern is untested and likely does not work in all cases! +# +# By Adam Przybyla, modified by Matthew Strait. Possibly lifted from +# Josh Ballard (oofle.com). + +goboogy +|^get /getfilebyhash\.cgi\?|^get /queue_register\.cgi\?|^get /getupdowninfo\.cgi\? diff --git a/usr/local/share/protocols/gopher.pat b/usr/local/share/protocols/gopher.pat new file mode 100644 index 000000000..773016fc4 --- /dev/null +++ b/usr/local/share/protocols/gopher.pat @@ -0,0 +1,25 @@ +# Gopher - A precursor to HTTP - RFC 1436 +# Pattern attributes: good slow notsofast undermatch +# Protocol groups: document_retrieval obsolete ietf_rfc_documented +# Wiki: http://www.protocolinfo.org/wiki/Gopher +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Gopher servers usually run on TCP port 70. +# +# This pattern is lightly tested using gopher.dna.affrc.go.jp . + +gopher +# This matches the server's response, but naturally only if it is a +# directory listing, not if it is sending a file, because then the data +# is totally arbitrary. + +# Matches the client saying "list what you have", then the server +# response: one of the file type characters, any printable characters, a +# tab, any printable characters, a tab, something that looks like a +# domain name, a tab, and then a number which could be the start of a +# port number. + +# "0About internet Gopher\tStuff:About us\trawBits.micro.umn.edu\t70" +# "\r7search by keywords on protein data using wais\twaissrc:/protein_all/protein\tgopher.dna.affrc.go.jp\t70" + +^[\x09-\x0d]*[1-9,+tgi][\x09-\x0d -~]*\x09[\x09-\x0d -~]*\x09[a-z0-9.]*\.[a-z][a-z].?.?\x09[1-9] diff --git a/usr/local/share/protocols/gtalk.pat b/usr/local/share/protocols/gtalk.pat new file mode 100644 index 000000000..aa538ca1b --- /dev/null +++ b/usr/local/share/protocols/gtalk.pat @@ -0,0 +1,11 @@ +# GTalk, a Jabber (XMPP) client +# Pattern attributes: good veryfast fast subset +# Protocol groups: chat ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/Jabber +# Copyright (C) 2009 Matthew Strait; See ../LICENSE + +# See ../protocols/jabber.pat for more details + +gtalk +^ + +halflife2-deathmatch +^\xff\xff\xff\xff.*hl2mpDeathmatch diff --git a/usr/local/share/protocols/hddtemp.pat b/usr/local/share/protocols/hddtemp.pat new file mode 100644 index 000000000..cdd908cbf --- /dev/null +++ b/usr/local/share/protocols/hddtemp.pat @@ -0,0 +1,14 @@ +# hddtemp - Hard drive temperature reporting +# Pattern attributes: great veryfast fast +# Protocol groups: monitoring open_source +# Wiki: http://www.protocolinfo.org/wiki/HDDtemp +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 7634 +# +# You're a silly person if you use this pattern. +# +# This pattern has been tested and is believed to work well. + +hddtemp +^\|/dev/[a-z][a-z][a-z]\|[0-9a-z]*\|[0-9][0-9]\|[cfk]\| diff --git a/usr/local/share/protocols/hotline.pat b/usr/local/share/protocols/hotline.pat new file mode 100644 index 000000000..20ec6ded6 --- /dev/null +++ b/usr/local/share/protocols/hotline.pat @@ -0,0 +1,12 @@ +# Hotline - An old P2P filesharing protocol +# Pattern attributes: marginal fast fast +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/Hotline +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern is untested! +# +# This is lifted from http://oofle.com/filesharing.php?app=hotline + +hotline +^....................TRTPHOTL\x01\x02 diff --git a/usr/local/share/protocols/html.pat b/usr/local/share/protocols/html.pat new file mode 100644 index 000000000..d834a967b --- /dev/null +++ b/usr/local/share/protocols/html.pat @@ -0,0 +1,11 @@ +# (X)HTML - (Extensible) Hypertext Markup Language - http://w3.org +# Pattern attributes: good fast notsofast subset +# Protocol groups: file +# +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# This pattern has been tested and is believe to work well. + +# this should match any (X)HTML document from any version that conforms +# even vaugly to the standards. +html + diff --git a/usr/local/share/protocols/http-dap.pat b/usr/local/share/protocols/http-dap.pat new file mode 100644 index 000000000..216d8d60f --- /dev/null +++ b/usr/local/share/protocols/http-dap.pat @@ -0,0 +1,19 @@ +# HTTP by Download Accelerator Plus - http://www.speedbit.com +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: document_retrieval ietf_draft_standard +# Wiki: http://protocolinfo.org/wiki/HTTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Uses HTTP to download. + +http-dap + +# DAP identifies itself in the User-Agent field of every HTTP request it +# makes. This is pretty trivial to get around if speedbit.com ever +# wanted to. + +# The latest version uses "User-Agent: DA 7.0". The additional version +# allowance is an attempt at "future proofing". + +User-Agent: DA [678]\.[0-9] + diff --git a/usr/local/share/protocols/http-freshdownload.pat b/usr/local/share/protocols/http-freshdownload.pat new file mode 100644 index 000000000..a342e86ef --- /dev/null +++ b/usr/local/share/protocols/http-freshdownload.pat @@ -0,0 +1,17 @@ +# HTTP by Fresh Download - http://www.freshdevices.com +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: document_retrieval ietf_draft_standard +# Wiki: http://protocolinfo.org/wiki/HTTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# Uses HTTP to download. + +http-freshdownload + +# Fresh Download identifies itself in the User-Agent field of every HTTP +# request it makes. + +# The latest version uses "User-Agent: FreshDownload/4.40". The +# additional version allowance is an attempt at "future proofing". + +User-Agent: FreshDownload/[456](\.[0-9][0-9]?)? + diff --git a/usr/local/share/protocols/http-itunes.pat b/usr/local/share/protocols/http-itunes.pat new file mode 100644 index 000000000..fd44ee47f --- /dev/null +++ b/usr/local/share/protocols/http-itunes.pat @@ -0,0 +1,14 @@ +# HTTP - iTunes (Apple's music program) +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: streaming_audio ietf_draft_standard +# Wiki: http://protocolinfo.org/wiki/HTTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Port 80 +# iTunes program basically uses the HTTP protocol for its initial +# communication. +# Pattern contributed by Deepak Seshadri + +http-itunes +http/(0\.9|1\.0|1\.1).*(user-agent: itunes) + diff --git a/usr/local/share/protocols/http-rtsp.pat b/usr/local/share/protocols/http-rtsp.pat new file mode 100644 index 000000000..73ef926d1 --- /dev/null +++ b/usr/local/share/protocols/http-rtsp.pat @@ -0,0 +1,16 @@ +# RTSP tunneled within HTTP +# Pattern attributes: ok notsofast fast subset +# Protocol groups: streaming_audio streaming_video ietf_draft_standard +# Wiki: http://www.protocolinfo.org/wiki/RTSP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Apple's documentation on what Quicktime does: +# http://developer.apple.com/quicktime/icefloe/dispatch028.html +# This is what the first part of the pattern is about +# +# The second part is based on the example in RFC 2326. For this part to +# work, this pattern MUST be earlier in the iptables rules chain than +# HTTP. Otherwise, the stream will be identified as HTTP. + +http-rtsp +^(get[\x09-\x0d -~]* Accept: application/x-rtsp-tunnelled|http/(0\.9|1\.0|1\.1) [1-5][0-9][0-9] [\x09-\x0d -~]*a=control:rtsp://) diff --git a/usr/local/share/protocols/http.pat b/usr/local/share/protocols/http.pat new file mode 100644 index 000000000..5122310d2 --- /dev/null +++ b/usr/local/share/protocols/http.pat @@ -0,0 +1,28 @@ +# HTTP - HyperText Transfer Protocol - RFC 2616 +# Pattern attributes: great slow notsofast superset +# Protocol groups: document_retrieval ietf_draft_standard +# Wiki: http://protocolinfo.org/wiki/HTTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 80 +# +# This pattern has been tested and is believed to work well. +# +# this intentionally catches the response from the server rather than +# the request so that other protocols which use http (like kazaa) can be +# caught based on specific http requests regardless of the ordering of +# filters... also matches posts + +# Sites that serve really long cookies may break this by pushing the +# server response too far away from the beginning of the connection. To +# fix this, increase the kernel's data buffer length. + +http +# Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF (rfc 2616) +# As specified in rfc 2616 a status code is preceeded and followed by a +# space. +http/(0\.9|1\.0|1\.1) [1-5][0-9][0-9] [\x09-\x0d -~]*(connection:|content-type:|content-length:|date:)|post [\x09-\x0d -~]* http/[01]\.[019] +# A slightly faster version that might be good enough: +#http/(0\.9|1\.0|1\.1) [1-5][0-9][0-9]|post [\x09-\x0d -~]* http/[01]\.[019] +# old pattern(s): +#(http[\x09-\x0d -~]*(200 ok|302 |304 )[\x09-\x0d -~]*(connection:|content-type:|content-length:))|^(post [\x09-\x0d -~]* http/) diff --git a/usr/local/share/protocols/httpaudio.pat b/usr/local/share/protocols/httpaudio.pat new file mode 100644 index 000000000..c6cdd9a2a --- /dev/null +++ b/usr/local/share/protocols/httpaudio.pat @@ -0,0 +1,32 @@ +# HTTP - Audio over HyperText Transfer Protocol (RFC 2616) +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: streaming_audio document_retrieval ietf_draft_standard +# Wiki: http://protocolinfo.org/wiki/HTTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 80 +# +# Contributed by Deepak Seshadri +# +# This pattern has been tested and is believed to work well. +# +# To get or provide more information about this protocol and/or pattern: +# http://www.protocolinfo.org/wiki/HTTP +# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers +# +# If you use this, you should be aware that: +# +# - they match both simple downloads of audio/video and streaming content. +# +# - blocking based on content-type encourages server +# writers/administrators to misreport content-type (which will just make +# headaches for everyone, including us), so I would strongly recommend +# shaping audio/video down to a speed that discourages use of streaming +# players without actually blocking it. +# +# - obviously, since this is a subset of HTTP, you need to match it +# earlier in your iptables rules than HTTP. + +httpaudio +http/(0\.9|1\.0|1\.1)[\x09-\x0d ][1-5][0-9][0-9][\x09-\x0d -~]*(content-type: audio) + diff --git a/usr/local/share/protocols/httpcachehit.pat b/usr/local/share/protocols/httpcachehit.pat new file mode 100644 index 000000000..41cb09920 --- /dev/null +++ b/usr/local/share/protocols/httpcachehit.pat @@ -0,0 +1,19 @@ +# HTTP - Proxy Cache hit for HyperText Transfer Protocol (RFC 2616) +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: document_retrieval ietf_draft_standard +# Wiki: http://protocolinfo.org/wiki/HTTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 80 +# +# Contributed by Francesco Del Degan +# +# This pattern has been tested and is believed to work well. +# +# To get or provide more information about this protocol and/or pattern: +# http://www.protocolinfo.org/wiki/HTTP +# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers + +httpcachehit +http/(0\.9|1\.0|1\.1)[\x09-\x0d ][1-5][0-9][0-9][\x09-\x0d -~]*(x-cache: hit) + diff --git a/usr/local/share/protocols/httpcachemiss.pat b/usr/local/share/protocols/httpcachemiss.pat new file mode 100644 index 000000000..09ac6cd60 --- /dev/null +++ b/usr/local/share/protocols/httpcachemiss.pat @@ -0,0 +1,17 @@ +# HTTP - Proxy Cache miss for HyperText Transfer Protocol (RFC 2616) +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: document_retrieval ietf_draft_standard +# Wiki: http://protocolinfo.org/wiki/HTTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 80 +# +# This pattern has been tested and is believed to work well. +# +# To get or provide more information about this protocol and/or pattern: +# http://www.protocolinfo.org/wiki/HTTP +# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers + +httpcachemiss +http/(0\.9|1\.0|1\.1)[\x09-\x0d ][1-5][0-9][0-9][\x09-\x0d -~]*(x-cache: miss) + diff --git a/usr/local/share/protocols/httpvideo.pat b/usr/local/share/protocols/httpvideo.pat new file mode 100644 index 000000000..4a75ce099 --- /dev/null +++ b/usr/local/share/protocols/httpvideo.pat @@ -0,0 +1,32 @@ +# HTTP - Video over HyperText Transfer Protocol (RFC 2616) +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: streaming_video document_retrieval ietf_draft_standard +# Wiki: http://protocolinfo.org/wiki/HTTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 80 +# +# Contributed by Deepak Seshadri +# +# This pattern has been tested and is believed to work well. +# +# To get or provide more information about this protocol and/or pattern: +# http://www.protocolinfo.org/wiki/HTTP +# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers +# +# If you use this, you should be aware that: +# +# - they match both simple downloads of audio/video and streaming content. +# +# - blocking based on content-type encourages server +# writers/administrators to misreport content-type (which will just make +# headaches for everyone, including us), so I would strongly recommend +# shaping audio/video down to a speed that discourages use of streaming +# players without actually blocking it. +# +# - obviously, since this is a subset of HTTP, you need to match it +# earlier in your iptables rules than HTTP. + +httpvideo +http/(0\.9|1\.0|1\.1)[\x09-\x0d ][1-5][0-9][0-9][\x09-\x0d -~]*(content-type: video) + diff --git a/usr/local/share/protocols/ident.pat b/usr/local/share/protocols/ident.pat new file mode 100644 index 000000000..3205e5e69 --- /dev/null +++ b/usr/local/share/protocols/ident.pat @@ -0,0 +1,15 @@ +# Ident - Identification Protocol - RFC 1413 +# Pattern attributes: good fast fast +# Protocol groups: networking ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/Ident +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 113 +# +# This pattern is believed to work. + +ident +# "number , numberCRLF" possibly without the CR and/or LF. +# ^$ is appropriate because the first packet should never have anything +# else in it. +^[1-9][0-9]?[0-9]?[0-9]?[0-9]?[\x09-\x0d]*,[\x09-\x0d]*[1-9][0-9]?[0-9]?[0-9]?[0-9]?(\x0d\x0a|[\x0d\x0a])?$ diff --git a/usr/local/share/protocols/imap.pat b/usr/local/share/protocols/imap.pat new file mode 100644 index 000000000..3f989c052 --- /dev/null +++ b/usr/local/share/protocols/imap.pat @@ -0,0 +1,14 @@ +# IMAP - Internet Message Access Protocol (A common e-mail protocol) +# Pattern attributes: great fast fast +# Protocol groups: mail ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/IMAP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This matches IMAP4 (RFC 3501) and probably IMAP2 (RFC 1176) +# +# This pattern has been tested and is believed to work well. +# +# This matches the IMAP welcome message or a noop command (which for +# some unknown reason can happen at the start of a connection?) +imap +^(\* ok|a[0-9]+ noop) diff --git a/usr/local/share/protocols/imesh.pat b/usr/local/share/protocols/imesh.pat new file mode 100644 index 000000000..4cb7ac706 --- /dev/null +++ b/usr/local/share/protocols/imesh.pat @@ -0,0 +1,15 @@ +# iMesh - the native protocol of iMesh, a P2P application - http://imesh.com +# Pattern attributes: ok fast notsofast +# Protocol groups: p2p +# Wiki: http://protocolinfo.org/wiki/iMesh +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# depending on the version of iMesh (the program), it can also use fasttrack, +# gnutella and edonkey in addition to iMesh (the protocol). + +imesh +# The first branch matches the login +# The second branch matches the main non-download connection (searches, etc) +# The third branch matches downloads of "premium" content +# The fourth branch matches peer downloads. +^(post[\x09-\x0d -~]*................................|\x34\x80?\x0d?\xfc\xff\x04|get[\x09-\x0d -~]*Host: imsh\.download-prod\.musicnet\.com|\x02[\x01\x02]\x83.*\x02[\x01\x02]\x83) diff --git a/usr/local/share/protocols/ipp.pat b/usr/local/share/protocols/ipp.pat new file mode 100644 index 000000000..15540d018 --- /dev/null +++ b/usr/local/share/protocols/ipp.pat @@ -0,0 +1,12 @@ +# IP printing - a new standard for UNIX printing - RFC 2911 +# Pattern attributes: good notsofast notsofast +# Protocol groups: printer ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/IPP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested and is believed to work well. + +ipp +# It's unlikely that anything else has this string, but I think we could +# do a bit better... +ipp:// diff --git a/usr/local/share/protocols/irc.pat b/usr/local/share/protocols/irc.pat new file mode 100644 index 000000000..b922b3e28 --- /dev/null +++ b/usr/local/share/protocols/irc.pat @@ -0,0 +1,20 @@ +# IRC - Internet Relay Chat - RFC 1459 +# Pattern attributes: great fast fast +# Protocol groups: chat ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/IRC +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 6666 or 6667 +# Note that chat traffic runs on these ports, but IRC-DCC traffic (which +# can use much more bandwidth) uses a dynamically assigned port, so you +# must have the IRC connection tracking module in your kernel to classify +# this. +# +# This pattern has been tested and is believed to work well. + +irc +# First thing that happens is that the client sends NICK and USER, in +# either order. This allows MIRC color codes (\x02-\x0d instead of +# \x09-\x0d). +^(nick[\x09-\x0d -~]*user[\x09-\x0d -~]*:|user[\x09-\x0d -~]*:[\x02-\x0d -~]*nick[\x09-\x0d -~]*\x0d\x0a) + diff --git a/usr/local/share/protocols/jabber.pat b/usr/local/share/protocols/jabber.pat new file mode 100644 index 000000000..7c328905e --- /dev/null +++ b/usr/local/share/protocols/jabber.pat @@ -0,0 +1,24 @@ +# Jabber (XMPP) - open instant messenger protocol - RFC 3920 - http://jabber.org +# Pattern attributes: good notsofast notsofast +# Protocol groups: chat ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/Jabber +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested with Gaim and Gabber. It is only tested +# with non-SSL mode Jabber with no proxies. + +# Thanks to Jan Hudec for some improvements. + +# Jabber seems to take a long time to set up a connection. I'm +# connecting with Gabber 0.8.8 to 12jabber.org and the first 8 packets +# is this: +# +# +# No mention of my username or password yet, you'll note. + +jabber + says: +# "This pattern identifies openFT P2P transfers fine. openFT is part of giFT +# and is a pretty large p2p network. I would describe this pattern as pretty +# weak, but it works for the giFT-based clients I've used." + +openft +x-openftalias: [-)(0-9a-z ~.] diff --git a/usr/local/share/protocols/pcanywhere.pat b/usr/local/share/protocols/pcanywhere.pat new file mode 100644 index 000000000..60b50a772 --- /dev/null +++ b/usr/local/share/protocols/pcanywhere.pat @@ -0,0 +1,12 @@ +# pcAnywhere - Symantec remote access program +# Pattern attributes: marginal veryfast fast +# Protocol groups: remote_access proprietary +# Wiki: http://www.protocolinfo.org/wiki/PcAnywhere +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# This is completely untested! +# See http://www.unixwiz.net/tools/pcascan.txt + +pcanywhere +# I think this only matches queries and not the bulk of the traffic! +^(nq|st)$ diff --git a/usr/local/share/protocols/pdf.pat b/usr/local/share/protocols/pdf.pat new file mode 100644 index 000000000..0c0e5f949 --- /dev/null +++ b/usr/local/share/protocols/pdf.pat @@ -0,0 +1,11 @@ +# PDF - Portable Document Format - Postscript-like format by Adobe +# Pattern attributes: good fast notsofast subset +# Protocol groups: file +# +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# This pattern has been tested and is believe to work well. + +# Matches PDF versions 1.0 - 1.6 (not sure if 1.6 exists yet, but it probably +# will. +pdf +%PDF-1\.[0123456] diff --git a/usr/local/share/protocols/perl.pat b/usr/local/share/protocols/perl.pat new file mode 100644 index 000000000..822986b3f --- /dev/null +++ b/usr/local/share/protocols/perl.pat @@ -0,0 +1,7 @@ +# Perl - A scripting language by Larry Wall. +# Pattern attributes: good fast notsofast subset +# Protocol groups: file + +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +perl +\#! ?/(usr/(local/)?)?bin/perl diff --git a/usr/local/share/protocols/png.pat b/usr/local/share/protocols/png.pat new file mode 100644 index 000000000..33aafda3d --- /dev/null +++ b/usr/local/share/protocols/png.pat @@ -0,0 +1,13 @@ +# PNG - Portable Network Graphics, a popular image format +# Pattern attributes: good fast notsofast subset +# Protocol groups: file + +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# Contributed by Radovan Josth. Tested at least a bit. + +png +# drawn from /usr/share/magic +\x89PNG\x0d\x0a\x1a\x0a + +# this is probably sufficient, but by default let's use the longer version +# \x89PNG diff --git a/usr/local/share/protocols/poco.pat b/usr/local/share/protocols/poco.pat new file mode 100644 index 000000000..c7ce686f3 --- /dev/null +++ b/usr/local/share/protocols/poco.pat @@ -0,0 +1,12 @@ +# POCO and PP365 - Chinese P2P filesharing - http://pp365.com http://poco.cn +# Pattern attributes: ok veryfast fast +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/Poco +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# The author of this pattern says it works, but this is unconfirmed. +# Written by www.routerclub.com wsgtrsys. + +poco +^\x80\x94\x0a\x01....\x1f\x9e + diff --git a/usr/local/share/protocols/pop3.pat b/usr/local/share/protocols/pop3.pat new file mode 100644 index 000000000..47a825222 --- /dev/null +++ b/usr/local/share/protocols/pop3.pat @@ -0,0 +1,50 @@ +# POP3 - Post Office Protocol version 3 (popular e-mail protocol) - RFC 1939 +# Pattern attributes: great fast fast +# Protocol groups: mail ietf_internet_standard +# Wiki: http://www.protocolinfo.org/wiki/POP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested somewhat. + +# this is a difficult protocol to match because of the relative lack of +# distinguishing information. Read on. +pop3 + +# this the most conservative pattern. It should definitely work. +#^(\+ok|-err) + +# this pattern assumes that the server says _something_ after +ok or -err +# I think this is probably the way to go. +^(\+ok |-err ) + +# more that 90% of servers seem to say "pop" after "+ok", but not all. +#^(\+ok .*pop) + +# Here's another tack. I think this is my second favorite. +#^(\+ok [\x09-\x0d -~]*(ready|hello|pop|starting)|-err [\x09-\x0d -~]*(invalid|unknown|unimplemented|unrecognized|command)) + +# this matches the server saying "you have N messages that are M bytes", +# which the client probably asks for early in the session (not tested) +#\+ok [0-9]+ [0-9]+ + +# some sample servers: +# RFC example: +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us> +# mail.dreamhost.com: +OK Hello there. +# pop.carleton.edu: +OK POP3D(*) Server PMDFV6.2.2 at Fri, 12 Sep 2003 19:28:10 -0500 (CDT) (APOP disabled) +# mail.earthlink.net: +OK NGPopper vEL_4_38 at earthlink.net ready <25509.1063412951@falcon> +# *.email.umn.edu: +OK Cubic Circle's v1.22 1998/04/11 POP3 ready <7d1e0000da67623f@aquamarine.tc.umn.edu> +# mail.yale.edu: +OK POP3 pantheon-po01 v2002.81 server ready +# mail.gustavus.edu: +OK POP3 solen v2001.78 server ready +# mail.reed.edu: +OK POP3 letra.reed.edu v2002.81 server ready +# mail.bowdoin.edu: +OK mail.bowdoin.edu POP3 service (iPlanet Messaging Server 5.2 HotFix 1.15 (built Apr 28 2003)) +# pop.colby.edu: +OK Qpopper (version 4.0.5) at basalt starting. +# mail.mac.com: +OK Netscape Messaging Multiplexor ready + +# various error strings: +#-ERR Invalid command. +#-ERR invalid command +#-ERR unimplemented +#-ERR Invalid command, try one of: USER name, PASS string, QUIT +#-ERR Unknown AUTHORIZATION state command +#-ERR Unrecognized command +#-ERR Unknown command: "sadf'". diff --git a/usr/local/share/protocols/postscript.pat b/usr/local/share/protocols/postscript.pat new file mode 100644 index 000000000..456ac2141 --- /dev/null +++ b/usr/local/share/protocols/postscript.pat @@ -0,0 +1,7 @@ +# Postscript - Printing Language +# Pattern attributes: good fast notsofast subset +# Protocol groups: file + +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +postscript +%!ps diff --git a/usr/local/share/protocols/pplive.pat b/usr/local/share/protocols/pplive.pat new file mode 100644 index 000000000..42fef723f --- /dev/null +++ b/usr/local/share/protocols/pplive.pat @@ -0,0 +1,11 @@ +# PPLive - Chinese P2P streaming video - http://pplive.com +# Pattern attributes: ok notsofast notsofast +# Protocol groups: p2p streaming_video proprietary +# Wiki: http://www.protocolinfo.org/wiki/PPLive +# Copyright (C) 2008 Matthew Strait; See ../LICENSE + +# By liangjun, who says that it works. It may be easily improvable with +# a bit more testing. + +pplive +\x01...\xd3.+\x0c.$ diff --git a/usr/local/share/protocols/pressplay.pat b/usr/local/share/protocols/pressplay.pat new file mode 100644 index 000000000..cd814cc50 --- /dev/null +++ b/usr/local/share/protocols/pressplay.pat @@ -0,0 +1,15 @@ +# pressplay - A legal music distribution site - http://pressplay.com +# Pattern attributes: ok notsofast notsofast +# Protocol groups: document_retrieval obsolete proprietary +# Wiki: http://www.protocolinfo.org/wiki/Pressplay +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern was "contributed" (taken with permission) by the bandwidth +# arbitrator project (www.bandwidtharbitrator.com). +# +# This pattern is unconfirmed. + +pressplay +# can we do better than this? +user-agent: nsplayer + diff --git a/usr/local/share/protocols/qq.pat b/usr/local/share/protocols/qq.pat new file mode 100644 index 000000000..08db802ac --- /dev/null +++ b/usr/local/share/protocols/qq.pat @@ -0,0 +1,26 @@ +# Tencent QQ Protocol - Chinese instant messenger protocol - http://www.qq.com +# Pattern attributes: good notsofast fast +# Protocol groups: chat +# Wiki: http://www.protocolinfo.org/wiki/QQ +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Over six million people use QQ in China, according to wsgtrsys. +# +# This pattern has been tested and is believed to work well. +# +# QQ uses three (two?) methods to connect to server(s?). +# one is udp, and another is tcp +# udp protocol: the first byte is 02 and last byte is 03 +# tcp protocol: the second byte is 02 and last byte is 03 +# tony on protocolinfo.org says that now the *third* byte is 02: +# "but when I tested on my PC, I found that when qq2007/qq2008 +# use tcp protocol, the third byte instead of the second is always 02. +# +# So the QQ protocol changed again, or I have made a mistake, I wonder +# that." +# So now the pattern allows any of the first three bytes to be 02. Delete +# one of the ".?" to restore to the old behaviour. +# pattern written by www.routerclub.com wsgtrsys + +qq +^.?.?\x02.+\x03$ diff --git a/usr/local/share/protocols/quake-halflife.pat b/usr/local/share/protocols/quake-halflife.pat new file mode 100644 index 000000000..97e7d8488 --- /dev/null +++ b/usr/local/share/protocols/quake-halflife.pat @@ -0,0 +1,27 @@ +# Half Life 1 engine games (HL 1, Quake 2/3/World, Counterstrike 1.6, etc.) +# Pattern attributes: good veryfast fast +# Protocol groups: game proprietary +# Wiki: http://www.protocolinfo.org/wiki/Half-Life http://www.protocolinfo.org/wiki/Counter-Strike http://www.protocolinfo.org/wiki/Day_of_Defeat +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Contributed by Laurens Blankers , who says: +# +# This pattern has been tested with QuakeWorld (2.30), Quake 2 (3.20), +# Quake 3 (1.32), and Half-life (1.1.1.0). But may also work on other +# games based on the Quake engine. +# +# Clayton Macleod says: +# [This should match] Counter-Strike v1.6, [...] the slightly updated +# Counter-Strike: Condition Zero, and the game Day Of Defeat, Team +# Fortress Classic, Deathmatch Classic, Ricochet, Half-Life [1] Deathmatch, +# and I imagine all the other 3rd party mods that also use this engine +# will match that pattern. + +quake-halflife +# All quake (like) protocols start with 4x 0xFF. Then the client either +# issues getinfo or getchallenge. +^\xff\xff\xff\xffget(info|challenge) + +# A previous quake pattern allowed the connection to start with only 2 bytes +# of 0xFF. This doesn't seem to ever happen, but we should keep an eye out +# for it. diff --git a/usr/local/share/protocols/quake1.pat b/usr/local/share/protocols/quake1.pat new file mode 100644 index 000000000..46bdebd05 --- /dev/null +++ b/usr/local/share/protocols/quake1.pat @@ -0,0 +1,19 @@ +# Quake 1 - A popular computer game. +# Pattern attributes: marginal veryfast fast +# Protocol groups: game proprietary +# Wiki: http://www.protocolinfo.org/wiki/Quake +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern is untested and unconfirmed. + +# Info taken from http://www.gamers.org/dEngine/quake/QDP/qnp.html, +# which says that it "is incomplete, inaccurate and only applies to +# versions 0.91, 0.92, 1.00 and 1.01 of QUAKE" + +quake1 +# Connection request: 80 00 00 0c 01 51 55 41 4b 45 00 03 +# \x80 = control packet. +# \x0c = packet length +# \x01 = CCREQ_CONNECT +# \x03 = protocol version (3 == 0.91, 0.92, 1.00, 1.01) +^\x80\x0c\x01quake\x03 diff --git a/usr/local/share/protocols/quicktime.pat b/usr/local/share/protocols/quicktime.pat new file mode 100644 index 000000000..5a6273da3 --- /dev/null +++ b/usr/local/share/protocols/quicktime.pat @@ -0,0 +1,21 @@ +# Quicktime HTTP +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: streaming_video streaming_audio ietf_draft_standard +# Wiki: http://protocolinfo.org/wiki/HTTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested and is believed to work well. +# (Quick Time v6.5.1 downloading from www.apple.com/trailers) +# +# To get or provide more information about this protocol and/or pattern: +# http://www.protocolinfo.org/wiki/HTTP +# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers +# +# Since this is a subset of HTTP, it should be put earlier in the packet +# filtering chain than HTTP. Also, please don't use this to block Quicktime. +# If you must do that, you should use a filtering HTTP proxy, which is probably +# more accurate. + +quicktime +user-agent: quicktime \(qtver=[0-9].[0-9].[0-9];os=[\x09-\x0d -~]+\)\x0d\x0a + diff --git a/usr/local/share/protocols/radmin.pat b/usr/local/share/protocols/radmin.pat new file mode 100644 index 000000000..d13aa65bd --- /dev/null +++ b/usr/local/share/protocols/radmin.pat @@ -0,0 +1,17 @@ +# Famatech Remote Administrator - remote desktop for MS Windows +# Pattern attributes: ok veryfast fast +# Protocol groups: remote_access proprietary +# Wiki: http://www.protocolinfo.org/wiki/Radmin +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been verified with Radmin v1.1 and v3.0beta on Win2000/XP +# It has only been tested between a single pair of computers. + +# The first packet of every TCP stream appears to be either one of: +# +# 01 00 00 00 01 00 00 00 08 08 +# 01 00 00 00 01 00 00 00 1b 1b + +radmin +^\x01\x01(\x08\x08|\x1b\x1b)$ + diff --git a/usr/local/share/protocols/rar.pat b/usr/local/share/protocols/rar.pat new file mode 100644 index 000000000..1332af117 --- /dev/null +++ b/usr/local/share/protocols/rar.pat @@ -0,0 +1,7 @@ +# RAR - The WinRAR archive format +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: file + +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +rar +rar\x21\x1a\x07 diff --git a/usr/local/share/protocols/rdp.pat b/usr/local/share/protocols/rdp.pat new file mode 100644 index 000000000..44b853f04 --- /dev/null +++ b/usr/local/share/protocols/rdp.pat @@ -0,0 +1,20 @@ +# RDP - Remote Desktop Protocol (used in Windows Terminal Services) +# Pattern attributes: ok notsofast notsofast +# Protocol groups: remote_access proprietary +# Wiki: http://www.protocolinfo.org/wiki/RDP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern was submitted by Michael Leong. It has been tested under the +# following conditions: "WinXP Pro with all the patches, rdesktop server +# running on port 7000 instead of 3389 --> WinXP Pro Remote Desktop Client." +# Also tested is WinXP to Win 2000 Server. + +# At least one other person has reported it to work as well. + +rdp +rdpdr.*cliprdr.*rdpsnd + +# Old pattern, submitted by Daniel Weatherford. +# rdpdr.*cliprdp.*rdpsnd + + diff --git a/usr/local/share/protocols/replaytv-ivs.pat b/usr/local/share/protocols/replaytv-ivs.pat new file mode 100644 index 000000000..aaf925523 --- /dev/null +++ b/usr/local/share/protocols/replaytv-ivs.pat @@ -0,0 +1,11 @@ +# ReplayTV Internet Video Sharing - Digital Video Recorder - http://replaytv.com +# Pattern attributes: good fast fast +# Protocol groups: +# Wiki: http://www.protocolinfo.org/wiki/ReplayTV +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Pattern by jm 409 at hot mail dot com, who says that this one "worked best". + +replaytv-ivs +^(get /ivs-IVSGetFileChunk|http/(0\.9|1\.0|1\.1) [1-5][0-9][0-9] [\x09-\x0d -~]*\x23\x23\x23\x23\x23REPLAY_CHUNK_START\x23\x23\x23\x23\x23) + diff --git a/usr/local/share/protocols/rlogin.pat b/usr/local/share/protocols/rlogin.pat new file mode 100644 index 000000000..42c4f7ed1 --- /dev/null +++ b/usr/local/share/protocols/rlogin.pat @@ -0,0 +1,19 @@ +# rlogin - remote login - RFC 1282 +# Pattern attributes: ok fast fast +# Protocol groups: remote_access ietf_rfc_documented +# Wiki: http://www.protocolinfo.org/wiki/Rlogin +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# usually runs on port 443 +# +# This pattern is untested. + +rlogin +# At least three characters (user name, user name, terminal type), +# the first of which could be the first character of a user name, a +# slash, then a terminal speed. (Assumes that usernames and terminal +# types are alphanumeric only. I'm sure there are usernames like +# "straitm-47" out there, but it's not common.) All terminal speeds +# I know of end in two zeros and are between 3 and 6 digits long. +# This pattern is uncomfortably general. +^[a-z][a-z0-9][a-z0-9]+/[1-9][0-9]?[0-9]?[0-9]?00 diff --git a/usr/local/share/protocols/rpm.pat b/usr/local/share/protocols/rpm.pat new file mode 100644 index 000000000..03028395b --- /dev/null +++ b/usr/local/share/protocols/rpm.pat @@ -0,0 +1,7 @@ +# RPM - Redhat Package Management packages +# Pattern attributes: good fast notsofast subset +# Protocol groups: file + +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +rpm +\xed\xab\xee\xdb.?.?.?.?[1-7] diff --git a/usr/local/share/protocols/rtf.pat b/usr/local/share/protocols/rtf.pat new file mode 100644 index 000000000..676cb1ab6 --- /dev/null +++ b/usr/local/share/protocols/rtf.pat @@ -0,0 +1,8 @@ +# RTF - Rich Text Format - an open document format +# Pattern attributes: good fast notsofast subset +# Protocol groups: file + +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +rtf +\{\\rtf[12] + diff --git a/usr/local/share/protocols/rtp.pat b/usr/local/share/protocols/rtp.pat new file mode 100644 index 000000000..61fcd8eed --- /dev/null +++ b/usr/local/share/protocols/rtp.pat @@ -0,0 +1,33 @@ +# RTP - Real-time Transport Protocol - RFC 3550 +# Pattern attributes: ok overmatch undermatch fast fast +# Protocol groups: streaming_video ietf_internet_standard +# Wiki: http://www.protocolinfo.org/wiki/RTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# RTP headers are *very* short and compact. They have almost nothing in +# them that can be matched by l7-filter. As RTP connections take place +# between even numbered ports, you should probably check for that before +# applying this pattern. If you want to match them along with their +# associated SIP packets, you might try setting up some iptables rules +# that watch for SIP packets and then also match any other UDP packets +# that are going between the same two IP addresses. +# +# I think we can count on the first bit being 1 and the second bit being +# 0 (meaning protocol version 2). The next two bits could go either way, +# but in the example I've seen, they are zero, so I'll assume they are +# usually zero. The next four bits are a count of "contributing source +# identifiers". I'm not sure how big that could be, but in the example +# I've seen, they're zero, so I'll assume they're usually zero. So that +# gives us ^\x80. The next bit is a tossup. Next is the payload type, 7 +# bits. I've taken likely values from the WireShark code: 0-34, 96-127 +# (decimal). The rest of the header is random numbers (sequence number, +# timestamp, synchronization source identifier), so that's no help at +# all. + +rtp +^\x80[\x01-"`-\x7f\x80-\xa2\xe0-\xff]?..........*\x80 + +# Might also try this. It's a bit slower (one packet and not too much extra +# regexec load) and a bit more accurate: +#^\x80[\x01-"`-\x7f\x80-\xa2\xe0-\xff]?..........*\x80.*\x80 + diff --git a/usr/local/share/protocols/rtsp.pat b/usr/local/share/protocols/rtsp.pat new file mode 100644 index 000000000..1013ae38e --- /dev/null +++ b/usr/local/share/protocols/rtsp.pat @@ -0,0 +1,15 @@ +# RTSP - Real Time Streaming Protocol - http://www.rtsp.org - RFC 2326 +# Pattern attributes: good notsofast notsofast +# Protocol groups: streaming_video ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/RTSP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# usually runs on port 554 +# +# To take full advantage of this pattern, please see the RTSP connection +# tracking patch to the Linux kernel referenced at the above site. +# +# This pattern has been tested and is believed to work well. + +rtsp +rtsp/1.0 200 ok diff --git a/usr/local/share/protocols/runesofmagic.pat b/usr/local/share/protocols/runesofmagic.pat new file mode 100644 index 000000000..6fbfea4b6 --- /dev/null +++ b/usr/local/share/protocols/runesofmagic.pat @@ -0,0 +1,63 @@ +# Runes of Magic - game - http://www.runesofmagic.com +# Pattern attributes: ok veryfast fast +# Protocol groups: game proprietary +# Wiki: http://www.protocolinfo.org/wiki/Runes_of_Magic +# Copyright (C) 2008 Matthew Strait; See ../LICENSE + +runesofmagic +^\x10\x03...........\x0a\x02.....\x0e +# See below (this is also veryfast fast) +#^\x10\x03...........?\x0a\x02.....?$ + +# Greatwolf captured the following: +# +# Server: +# +# 10 00 00 00 03 78 76 7a 1e 8a dd b5 95 a3 3a de .....xvz ......:. +# 0a 00 00 00 02 df 85 cc cc cc ........ .. +# +# Client reply: +# +# 0e 00 00 00 02 28 82 cc cc cc 8b c9 cc cc .....(.. ...... +# +# Server: +# +# 2e 00 00 00 02 1e 7f f4 f4 f4 ef f4 f4 f4 b3 8c ........ ........ +# [...] +# +# And says: "Bytes 10 00 00 00 03, 0a 00 00 00 02 and 0e (client reply) +# were consistently present. +# +# ^\x10\x03...........\x0a\x02.....\x0e +# +# Pattern was able to match during the closed beta period. It is still +# matching okay after RoM started open beta but could definitely use +# more testing from others to verify effectiveness." +# +# Matthew Strait says: +# +# * If the server consistently sends those four bytes in the first packet, +# it is probably wasteful to wait for the next (client) packet before +# matching. +# +# * If we switch the match strategy to just looking at the first packet, and +# the first packet is always the same (or nearly the same) length, we can +# anchor (i.e. use a '$') at the end of the packet. +# +# * When there's a string of bytes that I don't understand and that take +# different values from connection to connection, I think it's good to allow +# for the possibility that at least one might be \x00, and so I'd make one +# of the "." into ".?", unless you *know* that \x00 is impossible somehow. +# +# * All of those \xcc bytes don't look random to me. Your comments suggest +# that it isn't always exactly like that, but is there always pattern of +# repeated bytes or something else that might be useful? It probably isn't +# necessary to exploit this, since it looks like there's already enough to +# go with, but it would be nice to understand. +# +# So perhaps it would be an improvement to use: +# +# ^\x10\x03...........?\x0a\x02.....?$ +# +# but this depends on the assumptions I made above. + diff --git a/usr/local/share/protocols/shoutcast.pat b/usr/local/share/protocols/shoutcast.pat new file mode 100644 index 000000000..e78883c0e --- /dev/null +++ b/usr/local/share/protocols/shoutcast.pat @@ -0,0 +1,27 @@ +# Shoutcast and Icecast - streaming audio +# Pattern attributes: good slow notsofast +# Protocol groups: streaming_audio +# Wiki: http://www.protocolinfo.org/wiki/Icecast +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# usually runs on port 80 +# +# Original pattern contributed by Deepak Seshadri who says "The difference between [Shoutcast and +# Icecast] is not clearly mentioned anywhere. According to this +# document, my pattern would filter JUST shoutcast packets." +# +# Should now match both Shoutcast and Icecast. Tested with Winamp (in +# 2005) and Totem using streams at dir.xiph.org (in Nov 2007). +# +# http://sander.vanzoest.com/talks/2002/audio_and_apache/ +# http://forums.radiotoolbox.com/viewtopic.php?t=74 +# http://www.icecast.org + +shoutcast +# The first branch looks for an HTTP request that looks like it is asking for +# a SHOUTcast stream. The second branch looks for the server's reply. However, +# some (newer?) servers answer with "http/1.0 200 OK", not "ICY 200 OK", so +# this will not work. +# This pattern was discovered using Ethereal. +^get /.*icy-metadata:1|icy [1-5][0-9][0-9] [\x09-\x0d -~]*(content-type:audio|icy-) diff --git a/usr/local/share/protocols/sip.pat b/usr/local/share/protocols/sip.pat new file mode 100644 index 000000000..2728009f6 --- /dev/null +++ b/usr/local/share/protocols/sip.pat @@ -0,0 +1,20 @@ +# SIP - Session Initiation Protocol - Internet telephony - RFC 3261, 3265, etc. +# Pattern attributes: good fast fast +# Protocol groups: voip ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/SIP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested with the Ubiquity SIP user agent and has been +# confirmed by at least one other user. +# +# Thanks to Ankit Desai for this pattern. Updated by tehseen sagar. +# +# SIP typically uses port 5060. +# +# This pattern is based on SIP request format as per RFC 3261. I'm not +# sure about the version part. The RFC doesn't say anything about it, so +# I have allowed version ranging from 0.x to 2.x. + +#Request-Line = Method SP Request-URI SP SIP-Version CRLF +sip +^(invite|register|cancel|message|subscribe|notify) sip[\x09-\x0d -~]*sip/[0-2]\.[0-9] diff --git a/usr/local/share/protocols/skypeout.pat b/usr/local/share/protocols/skypeout.pat new file mode 100644 index 000000000..55e4e10ff --- /dev/null +++ b/usr/local/share/protocols/skypeout.pat @@ -0,0 +1,50 @@ +# Skype to phone - UDP voice call (program to POTS phone) - http://skype.com +# Pattern attributes: ok slow notsofast overmatch +# Protocol groups: voip p2p proprietary +# Wiki: http://www.protocolinfo.org/wiki/Skype +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# Thanks to Myles Uyema, mylesuyema AT gmail.com + +# Taken using Ethereal traces of Windows Skype v1.2.037, same in v1.2.0.18_API +# +# Skype will attempt to use the same UDP port for all its connections as +# configured in its options. However, this is a random port by default. +# Skype has some preference for ports 80 and 443. +# +# Example sessions: +# +#SkypeOut +#c6 5c bf 41 8e 8d d6 d2 08 <-- this is sometimes as short as 1 byte and +#c6 5c bf 41 8e 8d d6 d2 08 <-- sometimes as long as 9 (or more?) +#00 6b 2c f5 87 f1 06 +#00 6b 2c f5 87 f1 06 +#00 6b 2c f5 36 ea 85 +#00 6b 2c f5 36 ea 85 +#00 6b 2c f5 57 27 d4 +#00 6b 2c f5 57 27 d4 +#00 6b 2c f5 43 5b 00 +#00 6b 2c f5 43 5b 00 +# +#SkypeOut +#7e 4f e5 b8 +#7e 4f e5 b8 +#00 6b 88 61 80 52 93 +#00 6b 88 61 80 52 93 +#00 6b 88 61 1a 09 e9 +#00 6b 88 61 1a 09 e9 +#00 6b 88 61 47 43 c4 +#00 6b 88 61 47 43 c4 + +skypeout + +# Scary. Our regular expressions suck. This is a prime candidate for +# some sort of a scheme to support two different regular expressions +# when there's a major difference between what the two libraries allow. +# For the Henry Spencer library, there's not much that can be done +# except requiring that we see the same byte twice. + +# This matches about %4 of random streams and 13% of printable random streams + +# This is slow, but not as bad as you might think. +^(\x01.?.?.?.?.?.?.?.?\x01|\x02.?.?.?.?.?.?.?.?\x02|\x03.?.?.?.?.?.?.?.?\x03|\x04.?.?.?.?.?.?.?.?\x04|\x05.?.?.?.?.?.?.?.?\x05|\x06.?.?.?.?.?.?.?.?\x06|\x07.?.?.?.?.?.?.?.?\x07|\x08.?.?.?.?.?.?.?.?\x08|\x09.?.?.?.?.?.?.?.?\x09|\x0a.?.?.?.?.?.?.?.?\x0a|\x0b.?.?.?.?.?.?.?.?\x0b|\x0c.?.?.?.?.?.?.?.?\x0c|\x0d.?.?.?.?.?.?.?.?\x0d|\x0e.?.?.?.?.?.?.?.?\x0e|\x0f.?.?.?.?.?.?.?.?\x0f|\x10.?.?.?.?.?.?.?.?\x10|\x11.?.?.?.?.?.?.?.?\x11|\x12.?.?.?.?.?.?.?.?\x12|\x13.?.?.?.?.?.?.?.?\x13|\x14.?.?.?.?.?.?.?.?\x14|\x15.?.?.?.?.?.?.?.?\x15|\x16.?.?.?.?.?.?.?.?\x16|\x17.?.?.?.?.?.?.?.?\x17|\x18.?.?.?.?.?.?.?.?\x18|\x19.?.?.?.?.?.?.?.?\x19|\x1a.?.?.?.?.?.?.?.?\x1a|\x1b.?.?.?.?.?.?.?.?\x1b|\x1c.?.?.?.?.?.?.?.?\x1c|\x1d.?.?.?.?.?.?.?.?\x1d|\x1e.?.?.?.?.?.?.?.?\x1e|\x1f.?.?.?.?.?.?.?.?\x1f|\x20.?.?.?.?.?.?.?.?\x20|\x21.?.?.?.?.?.?.?.?\x21|\x22.?.?.?.?.?.?.?.?\x22|\x23.?.?.?.?.?.?.?.?\x23|\$.?.?.?.?.?.?.?.?\$|\x25.?.?.?.?.?.?.?.?\x25|\x26.?.?.?.?.?.?.?.?\x26|\x27.?.?.?.?.?.?.?.?\x27|\(.?.?.?.?.?.?.?.?\(|\).?.?.?.?.?.?.?.?\)|\*.?.?.?.?.?.?.?.?\*|\+.?.?.?.?.?.?.?.?\+|\x2c.?.?.?.?.?.?.?.?\x2c|\x2d.?.?.?.?.?.?.?.?\x2d|\..?.?.?.?.?.?.?.?\.|\x2f.?.?.?.?.?.?.?.?\x2f|\x30.?.?.?.?.?.?.?.?\x30|\x31.?.?.?.?.?.?.?.?\x31|\x32.?.?.?.?.?.?.?.?\x32|\x33.?.?.?.?.?.?.?.?\x33|\x34.?.?.?.?.?.?.?.?\x34|\x35.?.?.?.?.?.?.?.?\x35|\x36.?.?.?.?.?.?.?.?\x36|\x37.?.?.?.?.?.?.?.?\x37|\x38.?.?.?.?.?.?.?.?\x38|\x39.?.?.?.?.?.?.?.?\x39|\x3a.?.?.?.?.?.?.?.?\x3a|\x3b.?.?.?.?.?.?.?.?\x3b|\x3c.?.?.?.?.?.?.?.?\x3c|\x3d.?.?.?.?.?.?.?.?\x3d|\x3e.?.?.?.?.?.?.?.?\x3e|\?.?.?.?.?.?.?.?.?\?|\x40.?.?.?.?.?.?.?.?\x40|\x41.?.?.?.?.?.?.?.?\x41|\x42.?.?.?.?.?.?.?.?\x42|\x43.?.?.?.?.?.?.?.?\x43|\x44.?.?.?.?.?.?.?.?\x44|\x45.?.?.?.?.?.?.?.?\x45|\x46.?.?.?.?.?.?.?.?\x46|\x47.?.?.?.?.?.?.?.?\x47|\x48.?.?.?.?.?.?.?.?\x48|\x49.?.?.?.?.?.?.?.?\x49|\x4a.?.?.?.?.?.?.?.?\x4a|\x4b.?.?.?.?.?.?.?.?\x4b|\x4c.?.?.?.?.?.?.?.?\x4c|\x4d.?.?.?.?.?.?.?.?\x4d|\x4e.?.?.?.?.?.?.?.?\x4e|\x4f.?.?.?.?.?.?.?.?\x4f|\x50.?.?.?.?.?.?.?.?\x50|\x51.?.?.?.?.?.?.?.?\x51|\x52.?.?.?.?.?.?.?.?\x52|\x53.?.?.?.?.?.?.?.?\x53|\x54.?.?.?.?.?.?.?.?\x54|\x55.?.?.?.?.?.?.?.?\x55|\x56.?.?.?.?.?.?.?.?\x56|\x57.?.?.?.?.?.?.?.?\x57|\x58.?.?.?.?.?.?.?.?\x58|\x59.?.?.?.?.?.?.?.?\x59|\x5a.?.?.?.?.?.?.?.?\x5a|\[.?.?.?.?.?.?.?.?\[|\\.?.?.?.?.?.?.?.?\\|\].?.?.?.?.?.?.?.?\]|\^.?.?.?.?.?.?.?.?\^|\x5f.?.?.?.?.?.?.?.?\x5f|\x60.?.?.?.?.?.?.?.?\x60|\x61.?.?.?.?.?.?.?.?\x61|\x62.?.?.?.?.?.?.?.?\x62|\x63.?.?.?.?.?.?.?.?\x63|\x64.?.?.?.?.?.?.?.?\x64|\x65.?.?.?.?.?.?.?.?\x65|\x66.?.?.?.?.?.?.?.?\x66|\x67.?.?.?.?.?.?.?.?\x67|\x68.?.?.?.?.?.?.?.?\x68|\x69.?.?.?.?.?.?.?.?\x69|\x6a.?.?.?.?.?.?.?.?\x6a|\x6b.?.?.?.?.?.?.?.?\x6b|\x6c.?.?.?.?.?.?.?.?\x6c|\x6d.?.?.?.?.?.?.?.?\x6d|\x6e.?.?.?.?.?.?.?.?\x6e|\x6f.?.?.?.?.?.?.?.?\x6f|\x70.?.?.?.?.?.?.?.?\x70|\x71.?.?.?.?.?.?.?.?\x71|\x72.?.?.?.?.?.?.?.?\x72|\x73.?.?.?.?.?.?.?.?\x73|\x74.?.?.?.?.?.?.?.?\x74|\x75.?.?.?.?.?.?.?.?\x75|\x76.?.?.?.?.?.?.?.?\x76|\x77.?.?.?.?.?.?.?.?\x77|\x78.?.?.?.?.?.?.?.?\x78|\x79.?.?.?.?.?.?.?.?\x79|\x7a.?.?.?.?.?.?.?.?\x7a|\{.?.?.?.?.?.?.?.?\{|\|.?.?.?.?.?.?.?.?\||\}.?.?.?.?.?.?.?.?\}|\x7e.?.?.?.?.?.?.?.?\x7e|\x7f.?.?.?.?.?.?.?.?\x7f|\x80.?.?.?.?.?.?.?.?\x80|\x81.?.?.?.?.?.?.?.?\x81|\x82.?.?.?.?.?.?.?.?\x82|\x83.?.?.?.?.?.?.?.?\x83|\x84.?.?.?.?.?.?.?.?\x84|\x85.?.?.?.?.?.?.?.?\x85|\x86.?.?.?.?.?.?.?.?\x86|\x87.?.?.?.?.?.?.?.?\x87|\x88.?.?.?.?.?.?.?.?\x88|\x89.?.?.?.?.?.?.?.?\x89|\x8a.?.?.?.?.?.?.?.?\x8a|\x8b.?.?.?.?.?.?.?.?\x8b|\x8c.?.?.?.?.?.?.?.?\x8c|\x8d.?.?.?.?.?.?.?.?\x8d|\x8e.?.?.?.?.?.?.?.?\x8e|\x8f.?.?.?.?.?.?.?.?\x8f|\x90.?.?.?.?.?.?.?.?\x90|\x91.?.?.?.?.?.?.?.?\x91|\x92.?.?.?.?.?.?.?.?\x92|\x93.?.?.?.?.?.?.?.?\x93|\x94.?.?.?.?.?.?.?.?\x94|\x95.?.?.?.?.?.?.?.?\x95|\x96.?.?.?.?.?.?.?.?\x96|\x97.?.?.?.?.?.?.?.?\x97|\x98.?.?.?.?.?.?.?.?\x98|\x99.?.?.?.?.?.?.?.?\x99|\x9a.?.?.?.?.?.?.?.?\x9a|\x9b.?.?.?.?.?.?.?.?\x9b|\x9c.?.?.?.?.?.?.?.?\x9c|\x9d.?.?.?.?.?.?.?.?\x9d|\x9e.?.?.?.?.?.?.?.?\x9e|\x9f.?.?.?.?.?.?.?.?\x9f|\xa0.?.?.?.?.?.?.?.?\xa0|\xa1.?.?.?.?.?.?.?.?\xa1|\xa2.?.?.?.?.?.?.?.?\xa2|\xa3.?.?.?.?.?.?.?.?\xa3|\xa4.?.?.?.?.?.?.?.?\xa4|\xa5.?.?.?.?.?.?.?.?\xa5|\xa6.?.?.?.?.?.?.?.?\xa6|\xa7.?.?.?.?.?.?.?.?\xa7|\xa8.?.?.?.?.?.?.?.?\xa8|\xa9.?.?.?.?.?.?.?.?\xa9|\xaa.?.?.?.?.?.?.?.?\xaa|\xab.?.?.?.?.?.?.?.?\xab|\xac.?.?.?.?.?.?.?.?\xac|\xad.?.?.?.?.?.?.?.?\xad|\xae.?.?.?.?.?.?.?.?\xae|\xaf.?.?.?.?.?.?.?.?\xaf|\xb0.?.?.?.?.?.?.?.?\xb0|\xb1.?.?.?.?.?.?.?.?\xb1|\xb2.?.?.?.?.?.?.?.?\xb2|\xb3.?.?.?.?.?.?.?.?\xb3|\xb4.?.?.?.?.?.?.?.?\xb4|\xb5.?.?.?.?.?.?.?.?\xb5|\xb6.?.?.?.?.?.?.?.?\xb6|\xb7.?.?.?.?.?.?.?.?\xb7|\xb8.?.?.?.?.?.?.?.?\xb8|\xb9.?.?.?.?.?.?.?.?\xb9|\xba.?.?.?.?.?.?.?.?\xba|\xbb.?.?.?.?.?.?.?.?\xbb|\xbc.?.?.?.?.?.?.?.?\xbc|\xbd.?.?.?.?.?.?.?.?\xbd|\xbe.?.?.?.?.?.?.?.?\xbe|\xbf.?.?.?.?.?.?.?.?\xbf|\xc0.?.?.?.?.?.?.?.?\xc0|\xc1.?.?.?.?.?.?.?.?\xc1|\xc2.?.?.?.?.?.?.?.?\xc2|\xc3.?.?.?.?.?.?.?.?\xc3|\xc4.?.?.?.?.?.?.?.?\xc4|\xc5.?.?.?.?.?.?.?.?\xc5|\xc6.?.?.?.?.?.?.?.?\xc6|\xc7.?.?.?.?.?.?.?.?\xc7|\xc8.?.?.?.?.?.?.?.?\xc8|\xc9.?.?.?.?.?.?.?.?\xc9|\xca.?.?.?.?.?.?.?.?\xca|\xcb.?.?.?.?.?.?.?.?\xcb|\xcc.?.?.?.?.?.?.?.?\xcc|\xcd.?.?.?.?.?.?.?.?\xcd|\xce.?.?.?.?.?.?.?.?\xce|\xcf.?.?.?.?.?.?.?.?\xcf|\xd0.?.?.?.?.?.?.?.?\xd0|\xd1.?.?.?.?.?.?.?.?\xd1|\xd2.?.?.?.?.?.?.?.?\xd2|\xd3.?.?.?.?.?.?.?.?\xd3|\xd4.?.?.?.?.?.?.?.?\xd4|\xd5.?.?.?.?.?.?.?.?\xd5|\xd6.?.?.?.?.?.?.?.?\xd6|\xd7.?.?.?.?.?.?.?.?\xd7|\xd8.?.?.?.?.?.?.?.?\xd8|\xd9.?.?.?.?.?.?.?.?\xd9|\xda.?.?.?.?.?.?.?.?\xda|\xdb.?.?.?.?.?.?.?.?\xdb|\xdc.?.?.?.?.?.?.?.?\xdc|\xdd.?.?.?.?.?.?.?.?\xdd|\xde.?.?.?.?.?.?.?.?\xde|\xdf.?.?.?.?.?.?.?.?\xdf|\xe0.?.?.?.?.?.?.?.?\xe0|\xe1.?.?.?.?.?.?.?.?\xe1|\xe2.?.?.?.?.?.?.?.?\xe2|\xe3.?.?.?.?.?.?.?.?\xe3|\xe4.?.?.?.?.?.?.?.?\xe4|\xe5.?.?.?.?.?.?.?.?\xe5|\xe6.?.?.?.?.?.?.?.?\xe6|\xe7.?.?.?.?.?.?.?.?\xe7|\xe8.?.?.?.?.?.?.?.?\xe8|\xe9.?.?.?.?.?.?.?.?\xe9|\xea.?.?.?.?.?.?.?.?\xea|\xeb.?.?.?.?.?.?.?.?\xeb|\xec.?.?.?.?.?.?.?.?\xec|\xed.?.?.?.?.?.?.?.?\xed|\xee.?.?.?.?.?.?.?.?\xee|\xef.?.?.?.?.?.?.?.?\xef|\xf0.?.?.?.?.?.?.?.?\xf0|\xf1.?.?.?.?.?.?.?.?\xf1|\xf2.?.?.?.?.?.?.?.?\xf2|\xf3.?.?.?.?.?.?.?.?\xf3|\xf4.?.?.?.?.?.?.?.?\xf4|\xf5.?.?.?.?.?.?.?.?\xf5|\xf6.?.?.?.?.?.?.?.?\xf6|\xf7.?.?.?.?.?.?.?.?\xf7|\xf8.?.?.?.?.?.?.?.?\xf8|\xf9.?.?.?.?.?.?.?.?\xf9|\xfa.?.?.?.?.?.?.?.?\xfa|\xfb.?.?.?.?.?.?.?.?\xfb|\xfc.?.?.?.?.?.?.?.?\xfc|\xfd.?.?.?.?.?.?.?.?\xfd|\xfe.?.?.?.?.?.?.?.?\xfe|\xff.?.?.?.?.?.?.?.?\xff) diff --git a/usr/local/share/protocols/skypetoskype.pat b/usr/local/share/protocols/skypetoskype.pat new file mode 100644 index 000000000..ed1103a25 --- /dev/null +++ b/usr/local/share/protocols/skypetoskype.pat @@ -0,0 +1,14 @@ +# Skype to Skype - UDP voice call (program to program) - http://skype.com +# Pattern attributes: ok veryfast fast overmatch +# Protocol groups: voip p2p proprietary +# Wiki: http://www.protocolinfo.org/wiki/Skype +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# This matches at least some of the general chatter that occurs when the +# user isn't doing anything as well as actual calls. +# Thanks to Myles Uyema, mylesuyema AT gmail.com + +skypetoskype +# require at least 16 bytes (my limited tests always get at least 18) +^..\x02............. + diff --git a/usr/local/share/protocols/smb.pat b/usr/local/share/protocols/smb.pat new file mode 100644 index 000000000..c1f8b0a52 --- /dev/null +++ b/usr/local/share/protocols/smb.pat @@ -0,0 +1,19 @@ +# Samba/SMB - Server Message Block - Microsoft Windows filesharing +# Pattern attributes: good fast notsofast +# Protocol groups: document_retrieval networking proprietary +# Wiki: http://www.protocolinfo.org/wiki/SMB +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# "This protocol is sometimes also referred to as the Common Internet File +# System (CIFS), LanManager or NetBIOS protocol." -- "man samba" +# +# Actually, SMB is a higher level protocol than NetBIOS. However, the +# NetBIOS header is only 4 bytes: not much to match on. +# +# http://www.ubiqx.org/cifs/SMB.html +# +# This pattern is lightly tested. + +smb +# matches a NEGOTIATE PROTOCOL or TRANSACTION REQUEST command +\xffsmb[\x72\x25] diff --git a/usr/local/share/protocols/smtp.pat b/usr/local/share/protocols/smtp.pat new file mode 100644 index 000000000..2f5d1957f --- /dev/null +++ b/usr/local/share/protocols/smtp.pat @@ -0,0 +1,40 @@ +# SMTP - Simple Mail Transfer Protocol - RFC 2821 (See also RFC 1869) +# Pattern attributes: great notsofast fast +# Protocol groups: mail ietf_internet_standard +# Wiki: http://www.protocolinfo.org/wiki/SMTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# usually runs on port 25 +# +# This pattern has been tested and is believed to work well. + +# As usual, no text is required after "220", but all known servers have some +# there. It (almost?) always has string "smtp" in it. The RFC examples +# does not, so we match those too, just in case anyone has copied them +# literally. +# +# Some examples: +# 220 mail.stalker.com ESMTP CommuniGate Pro 4.1.3 +# 220 mail.vieodata.com ESMTP Merak 6.1.0; Mon, 15 Sep 2003 13:48:11 -0400 +# 220 mail.ut.caldera.com ESMTP +# 220 persephone.pmail.gen.nz ESMTP server ready. +# 220 smtp1.superb.net ESMTP +# 220 mail.kerio.com Kerio MailServer 5.6.7 ESMTP ready +# 220-mail.deerfield.com ESMTP VisNetic.MailServer.v6.0.9.0; Mon, 15 Sep 2003 13:4 +# 220 altn.com ESMTP MDaemon 6.8.5; Mon, 15 Sep 2003 12:46:42 -0500 +# 220 X1 NT-ESMTP Server ipsmin0165atl2.interland.net (IMail 6.06 73062-3) +# 220 mail.icewarp.com ESMTP Merak 6.1.1; Mon, 15 Sep 2003 19:43:23 +0200 +# 220-mail.email-scan.com ESMTP +# 220 smaug.dreamhost.com ESMTP +# 220 kona.carleton.edu -- Server ESMTP (PMDF V6.2#30648) +# 220 letra.reed.edu ESMTP Sendmail 8.12.9/8.12.9; Mon, 15 Sep 2003 10:35:57 -0700 (PDT) +# 220-swan.mail.pas.earthlink.net ESMTP Exim 3.33 #1 Mon, 15 Sep 2003 10:32:15 -0700 +# +# RFC examples: +# 220 xyz.com Simple Mail Transfer Service Ready (RFC example) +# 220 dbc.mtview.ca.us SMTP service ready + +smtp +^220[\x09-\x0d -~]* (e?smtp|simple mail) +userspace pattern=^220[\x09-\x0d -~]* (E?SMTP|[Ss]imple [Mm]ail) +userspace flags=REG_NOSUB REG_EXTENDED diff --git a/usr/local/share/protocols/snmp-mon.pat b/usr/local/share/protocols/snmp-mon.pat new file mode 100644 index 000000000..fe226626f --- /dev/null +++ b/usr/local/share/protocols/snmp-mon.pat @@ -0,0 +1,32 @@ +# SNMP Monitoring - Simple Network Management Protocol (RFC1157) +# Pattern attributes: good veryfast fast subset +# Protocol groups: networking ietf_internet_standard +# Wiki: http://en.wikipedia.org/wiki/SNMP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on UDP ports 161 +# +# These filters match SNMPv1 packets without fail, and are made +# as specific as possible not to match any ASN.1 encoded protocols. +# However these could still be matched by other protocols that +# use ASN.1 encoding + +# Contributed by Goli SriSairam + +# This pattern has been tested and is believe to work well. +# +# To get or provide more information about this protocol and/or pattern: +# http://www.protocolinfo.org/wiki/SNMP +# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers + +# SNMPv1 GET/GETNEXT/SET request and response +# matches SNMP header +# version \x02\x01 +# community \x04.+ +# PDU type [\xa0-\xa3] (GET/GETNEXT/SET/GETRESPONSE) +# RequestId \x02[\x01-\x04].?.?.?.? +# errorStatus \x02\x01.? +# errorIndex \x02\x01.? +# varbinds start \x30 +snmp-mon +^\x02\x01\x04.+[\xa0-\xa3]\x02[\x01-\x04].?.?.?.?\x02\x01.?\x02\x01.?\x30 diff --git a/usr/local/share/protocols/snmp-trap.pat b/usr/local/share/protocols/snmp-trap.pat new file mode 100644 index 000000000..e8ba19ab0 --- /dev/null +++ b/usr/local/share/protocols/snmp-trap.pat @@ -0,0 +1,33 @@ +# SNMP Traps - Simple Network Management Protocol (RFC1157) +# Pattern attributes: good veryfast fast subset +# Protocol groups: networking ietf_internet_standard +# Wiki: http://en.wikipedia.org/wiki/SNMP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on UDP ports 162 +# +# These filters match SNMPv1 packets without fail, and are made +# as specific as possible not to match any ASN.1 encoded protocols. +# However these could still be matched by other protocols that +# use ASN.1 encoding + +# Contributed by Goli SriSairam + +# This pattern has been tested and is believe to work well. +# +# To get or provide more information about this protocol and/or pattern: +# http://www.protocolinfo.org/wiki/SNMP +# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers + +# SNMPv1 Trap +# matches SNMP trap header +# version \x02\x01 +# community string \x04.+ +# PDU type \xa4 (TRAP) +# enterprise \x06.+ +# agent address \x40\x04\.?.?.?.? +# trap type \x02\x01.? +# specific trap type \x02\x01.? +# timestamp \x43 +snmp-trap +^\x02\x01\x04.+\xa4\x06.+\x40\x04.?.?.?.?\x02\x01.?\x02\x01.?\x43 diff --git a/usr/local/share/protocols/snmp.pat b/usr/local/share/protocols/snmp.pat new file mode 100644 index 000000000..a7186b217 --- /dev/null +++ b/usr/local/share/protocols/snmp.pat @@ -0,0 +1,19 @@ +# SNMP - Simple Network Management Protocol - RFC 1157 +# Pattern attributes: good veryfast fast superset +# Protocol groups: networking ietf_internet_standard +# Wiki: http://www.protocolinfo.org/wiki/SNMP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on UDP ports 161 (monitoring) and 162 (traps). +# +# These filters match SNMPv1 packets without fail, and are made as +# specific as possible not to match any ASN.1 encoded protocols. However +# these could still be matched by other protocols that use ASN.1 encoding + +# Contributed by Goli SriSairam + +# This pattern has been tested and is believed to work well. + +# All SNMPv1 traffic. See snmp-mon.pat and snmp-trap.pat for details. +snmp +^\x02\x01\x04.+([\xa0-\xa3]\x02[\x01-\x04].?.?.?.?\x02\x01.?\x02\x01.?\x30|\xa4\x06.+\x40\x04.?.?.?.?\x02\x01.?\x02\x01.?\x43) diff --git a/usr/local/share/protocols/socks.pat b/usr/local/share/protocols/socks.pat new file mode 100644 index 000000000..54189fdfc --- /dev/null +++ b/usr/local/share/protocols/socks.pat @@ -0,0 +1,32 @@ +# SOCKS Version 5 - Firewall traversal protocol - RFC 1928 +# Pattern attributes: good notsofast notsofast +# Protocol groups: networking ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/SOCKS +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 1080 +# Also useful: http://www.iana.org/assignments/socks-methods +# +# We have had two reports that this pattern works. + +# method request, no private methods \x05[\x01-\x08]* +# method reply, assumes sucess \x05[\x01-\x08]? +# method dependent sub-negotiation .* +# request, ipv4 only \x05[\x01-\x03][\x01\x03].* +# reply \x05[\x01-\x08]?[\x01\x03].* + +# username/password method +# u/p request, assuming reasonable usernames and passwords +# \x05[\x02-\x10][a-z][a-z0-9\-]*[\x05-\x20][!-~]* +# server reply +# \x05 + +# GSSAPI method +# client initial token \x01\x01\x02.* +# server reply \x01\x01\x02.* + +# any other method .* (all methods boil down to this until we have information +# about all the commonly used ones) + +socks +\x05[\x01-\x08]*\x05[\x01-\x08]?.*\x05[\x01-\x03][\x01\x03].*\x05[\x01-\x08]?[\x01\x03] diff --git a/usr/local/share/protocols/soribada.pat b/usr/local/share/protocols/soribada.pat new file mode 100644 index 000000000..e1c0c562a --- /dev/null +++ b/usr/local/share/protocols/soribada.pat @@ -0,0 +1,51 @@ +# Soribada - A Korean P2P filesharing program/protocol - http://www.soribada.com +# Pattern attributes: good slow notsofast +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/Soribada +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# I am told that there are three versions of this protocol, the first no +# longer being used. That would probably explain why incoming searches +# have two different formats... + +# There are three parts to Soribada protocal: +# 1: Ping/Pong to establish a relationship on the net (UDP with 2 useful bytes) +# 2: Searching (in two formats) (UDP with two short easy to match starts) +# 3: Download requests/transfers (TCP with an obvious first packet) + +# 1 -- Pings/Pongs: +# Requester send 2 bytes and a 6 byte response is sent back. +# \x10 for the first byte and \x14-\x16 for the second. +# The response is the first byte (\x10) and the second byte incremented +# by 1 (\x15-\x17). +# No further communication happens between the hosts except for searches. +# A regex match: ^\x10[\x14-\x16]\x10[\x15-\x17].?.?.?.?$ +# First Packet ---^^^^^^^^^^^^^^^ +# Second Packet -----------------^^^^^^^^^^^^^^^^^^^^^^^ + +# 2 -- Search requests: +# All searches are totally stateless and are only responded to if the user +# actually has the file. +# Both format start with a \x01 byte, have 3 "random bytes" and then 3 bytes +# corasponding to one of two formats. +# Format 1 is \x51\x3a\+ and format 2 is \x51\x32\x3a +# A regex match: ^\x01.?.?.?(\x51\x3a\+|\x51\x32\x3a) + +# 3 -- Download requests: +# All downloads start with "GETMP3\x0d\x0aFilename" +# A regex match: ^GETMP3\x0d\x0aFilename + +soribada + +# This will match the second packet of two. +# ^\x10[\x14-\x16]\x10[\x15-\x17].?.?.?.?$ + +# Again, matching this is the end of the comunication. +# ^\x01.?.?.?(\x51\x3a\+|\x51\x32\x3a) + +# This is the start of the transfer and an easy match +#^GETMP3\x0d\x0aFilename + +# This will match everything including the udp packet portions +^GETMP3\x0d\x0aFilename|^\x01.?.?.?(\x51\x3a\+|\x51\x32\x3a)|^\x10[\x14-\x16]\x10[\x15-\x17].?.?.?.?$ + diff --git a/usr/local/share/protocols/soulseek.pat b/usr/local/share/protocols/soulseek.pat new file mode 100644 index 000000000..ebc06ab3a --- /dev/null +++ b/usr/local/share/protocols/soulseek.pat @@ -0,0 +1,17 @@ +# Soulseek - P2P filesharing - http://slsknet.org +# Pattern attributes: good fast fast +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/Soulseek +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# All my tests show that this pattern is fast, but one user has reported that +# it is slow. Your milage may vary. + +# This has been tested and works for "pierce firewall" commands and file +# transfers. It does *not* match all the various sorts of chatter that go on, +# such as searches, pings and whatnot. + +soulseek +# (Pierce firewall: in theory the token could be 4 bytes, but the last two +# seem to always be zero.|download: Peer Init) +^(\x05..?|.\x01.[ -~]+\x01F..?.?.?.?.?.?.?)$ diff --git a/usr/local/share/protocols/ssdp.pat b/usr/local/share/protocols/ssdp.pat new file mode 100644 index 000000000..d2de92d44 --- /dev/null +++ b/usr/local/share/protocols/ssdp.pat @@ -0,0 +1,21 @@ +# SSDP - Simple Service Discovery Protocol - easy discovery of network devices +# Pattern attributes: good slow notsofast +# Protocol groups: networking ietf_draft_standard +# Wiki: http://www.protocolinfo.org/wiki/SSDP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# This pattern was tested only by listening to a Linksys WRT54G. However, +# I expect it works in general given the simplicity of the protocol. + +# SSDP packets should _always_ be sent to the multicast address +# 239.255.255.250, making this pattern irrelevant. (Moreover, SSDP +# packets should be resitricted to local networks that have plenty of +# bandwidth.) However, Microsoft, as usual, has other ideas, so maybe +# it could be useful. Can't hurt, anyway. :-) +# +# http://www.upnp.org/download/draft_cai_ssdp_v1_03.txt +# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/randz/protocol/ssdp.asp + +ssdp +^notify[\x09-\x0d ]\*[\x09-\x0d ]http/1\.1[\x09-\x0d -~]*ssdp:(alive|byebye)|^m-search[\x09-\x0d ]\*[\x09-\x0d ]http/1\.1[\x09-\x0d -~]*ssdp:discover + diff --git a/usr/local/share/protocols/ssh.pat b/usr/local/share/protocols/ssh.pat new file mode 100644 index 000000000..5e32f5c32 --- /dev/null +++ b/usr/local/share/protocols/ssh.pat @@ -0,0 +1,17 @@ +# SSH - Secure SHell +# Pattern attributes: great veryfast fast +# Protocol groups: remote_access secure ietf_draft_standard +# Wiki: http://www.protocolinfo.org/wiki/SSH +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# usually runs on port 22 +# +# http://www.ietf.org/internet-drafts/draft-ietf-secsh-transport-22.txt +# +# This pattern has been tested and is believed to work well. + +ssh +^ssh-[12]\.[0-9] + +# old pattern: +# (diffie-hellman-group-exchange-sha1|diffie-hellman-group1-sha1.ssh-rsa|ssh-dssfaes128-cbc|3des-cbc|blowfish-cbc|cast128-cbc|arcfour|aes192-cbc|aes256-cbc|rijndael-cbc@lysator.liu.sefaes128-cbc|3des-cbc|blowfish-cbc|cast128-cbc|arcfour|aes192-cbc|aes256-cbc|rijndael-cbc@lysator.liu.seuhmac-md5|hmac-sha1|hmac-ripemd160)+ diff --git a/usr/local/share/protocols/ssl.pat b/usr/local/share/protocols/ssl.pat new file mode 100644 index 000000000..ae30ee440 --- /dev/null +++ b/usr/local/share/protocols/ssl.pat @@ -0,0 +1,16 @@ +# SSL and TLS - Secure Socket Layer / Transport Layer Security - RFC 2246 +# Pattern attributes: good notsofast fast superset +# Protocol groups: secure ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/SSL +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 443 +# +# This is a superset of validcertssl. For it to match, it must be first. +# +# This pattern has been tested and is believed to work well. + +ssl +# Server Hello with certificate | Client Hello +# This allows SSL 3.X, which includes TLS 1.0, known internally as SSL 3.1 +^(.?.?\x16\x03.*\x16\x03|.?.?\x01\x03\x01?.*\x0b) diff --git a/usr/local/share/protocols/stun.pat b/usr/local/share/protocols/stun.pat new file mode 100644 index 000000000..3bfc3ab1f --- /dev/null +++ b/usr/local/share/protocols/stun.pat @@ -0,0 +1,46 @@ +# STUN - Simple Traversal of UDP Through NAT - RFC 3489 +# Pattern attributes: ok veryfast fast +# Protocol groups: networking ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/STUN +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern is untested as far as I know. + +# Wikipedia says: "The STUN server is contacted on UDP port 3478, +# however the server will hint clients to perform tests on alternate IP +# and port number too (STUN servers have two IP addresses). The RFC +# states that this port and IP are arbitrary." + +stun +# \x01 is a Binding Request. \x02 is a Shared Secret Request. Binding +# Requests are, experimentally, exactly 20 Bytes with three NULL Bytes. +# The first NULL is part of the two byte message type field. The other +# two give the message length, zero. I'm guessing that Shared Secret +# Requests are similar, but I have not checked. Please read the RFC and +# do experiments to find out. All other message types are responses, +# and so don't matter. +# +# The .? allows one of the Message Transaction ID Bytes to be \x00. If +# two are \x00, it will fail. This will happen 0.37% of the time, since +# the Message Transaction ID is supposed to be random. If this is +# unacceptable to you, add another ? to reduce this to 0.020%, but be +# aware of the increased possibility of false positives. +^[\x01\x02]................?$ + +# From my post to the mailing list: +# http://sourceforge.net/mailarchive/message.php?msg_id=36787107 +# +# This is a rather permissive pattern, but you can make it a little better +# by combining it with another iptables rule that checks that the packet +# data is exactly 20 Bytes. Of course, the second packet is longer, so +# maybe that introduces more complications than benefits. +# +# If you're willing to wait until the second packet to make the +# identification, you could use this: +# +# ^\x01................?\x01\x01 +# +# or if the Message Length is always \x24 (I'm not sure it is from your +# single example): +# +# ^\x01................?\x01\x01\x24 diff --git a/usr/local/share/protocols/subspace.pat b/usr/local/share/protocols/subspace.pat new file mode 100644 index 000000000..0a1b17448 --- /dev/null +++ b/usr/local/share/protocols/subspace.pat @@ -0,0 +1,21 @@ +# Subspace - 2D asteroids-style space game - http://sscentral.com +# Pattern attributes: marginal veryfast fast +# Protocol groups: game +# Wiki: http://www.protocolinfo.org/wiki/Subspace +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# By Myles Uyema +# +# This pattern matches the initial 2 packets of the client-server +# 'handshake' when joining a Zone. +# +# The first packet is an 8 byte UDP payload sent from client +# 0x00 0x01 0x?? 0x?? 0x?? 0x?? 0x11 +# The next packet is a 12 byte UDP response from server +# 0x00 0x10 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x01 0x00 +# +# l7-filter strips out the null bytes, leaving me with this pattern + +subspace +^\x01....\x11\x10........\x01$ + diff --git a/usr/local/share/protocols/subversion.pat b/usr/local/share/protocols/subversion.pat new file mode 100644 index 000000000..8769a19bc --- /dev/null +++ b/usr/local/share/protocols/subversion.pat @@ -0,0 +1,13 @@ +# Subversion - a version control system +# Pattern attributes: ok veryfast fast +# Protocol groups: version_control open_source +# Wiki: http://www.protocolinfo.org/wiki/Subversion +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern is UNTESTED. (But it seems straightforward enough...) +# +# Subversion uses TCP port 3690 by default. + +subversion +# This is not a valid basic GNU regular expression. +^\( success \( 1 2 \( diff --git a/usr/local/share/protocols/swf.pat b/usr/local/share/protocols/swf.pat new file mode 100644 index 000000000..af0308687 --- /dev/null +++ b/usr/local/share/protocols/swf.pat @@ -0,0 +1,2 @@ +swf +swf\x21\x1a\x07 diff --git a/usr/local/share/protocols/tar.pat b/usr/local/share/protocols/tar.pat new file mode 100644 index 000000000..d3ea9871b --- /dev/null +++ b/usr/local/share/protocols/tar.pat @@ -0,0 +1,12 @@ +# Tar - tape archive. Standard UNIX file archiver, not just for tapes. +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: file + +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +tar +# /usr/share/magic +## POSIX tar archives +#257 string ustar\0 POSIX tar archive +#257 string ustar\040\040\0 GNU tar archive +# this is pretty general. It's not a dictionary word, but still... +ustar diff --git a/usr/local/share/protocols/teamfortress2.pat b/usr/local/share/protocols/teamfortress2.pat new file mode 100644 index 000000000..337af3990 --- /dev/null +++ b/usr/local/share/protocols/teamfortress2.pat @@ -0,0 +1,11 @@ +# Team Fortress 2 - network game - http://www.valvesoftware.com +# Pattern attributes: good veryfast fast +# Protocol groups: game proprietary +# Wiki: http://www.protocolinfo.org/wiki/Team_Fortress +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Credits: Clayton Macleod +# Jan Engelhardt + +teamfortress2 +^\xff\xff\xff\xff.....*tfTeam Fortress diff --git a/usr/local/share/protocols/teamspeak.pat b/usr/local/share/protocols/teamspeak.pat new file mode 100644 index 000000000..8b2155ead --- /dev/null +++ b/usr/local/share/protocols/teamspeak.pat @@ -0,0 +1,15 @@ +# TeamSpeak - VoIP application - http://goteamspeak.com +# Pattern attributes: good veryfast fast +# Protocol groups: voip proprietary +# Wiki: http://www.protocolinfo.org/wiki/TeamSpeak +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested by Matthew Strait and verified by packet +# traces by at least two other people. The meaning of f4b303 is not +# known, but it seems to appear in all first packets. This pattern only +# matches the actual UDP voice traffic, not the TeamSpeak web interface +# or "TCP query". + +teamspeak +^\xf4\xbe\x03.*teamspeak + diff --git a/usr/local/share/protocols/telnet.pat b/usr/local/share/protocols/telnet.pat new file mode 100644 index 000000000..cf10d0e13 --- /dev/null +++ b/usr/local/share/protocols/telnet.pat @@ -0,0 +1,16 @@ +# Telnet - Insecure remote login - RFC 854 +# Pattern attributes: good veryfast fast +# Protocol groups: remote_access obsolete ietf_internet_standard +# Wiki: http://www.protocolinfo.org/wiki/Telnet +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 23 +# +# This pattern is lightly tested. + +telnet +# Matches at least three IAC (Do|Will|Don't|Won't) commands in a row. +# My telnet client sends 9 when I connect, so this should be fine. +# This pattern could fail on a unchatty connection or it could be +# matched by something non-telnet spewing a lot of stuff in the fb-ff range. +^\xff[\xfb-\xfe].\xff[\xfb-\xfe].\xff[\xfb-\xfe] diff --git a/usr/local/share/protocols/tesla.pat b/usr/local/share/protocols/tesla.pat new file mode 100644 index 000000000..1f4ee86a0 --- /dev/null +++ b/usr/local/share/protocols/tesla.pat @@ -0,0 +1,15 @@ +# Tesla Advanced Communication - P2P filesharing (?) +# Pattern attributes: marginal slow notsofast +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/Tesla +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern is untested! + +# This is lifted from http://oofle.com/filesharing.php?app=tesla +# There is no explaination of what these numbers mean. +# The above page says that the first string is found only in TCP packets +# and the second only in UDP. + +tesla +\x03\x9a\x89\x22\x31\x31\x31\.\x30\x30\x20\x42\x65\x74\x61\x20|\xe2\x3c\x69\x1e\x1c\xe9 diff --git a/usr/local/share/protocols/tftp.pat b/usr/local/share/protocols/tftp.pat new file mode 100644 index 000000000..1782ff544 --- /dev/null +++ b/usr/local/share/protocols/tftp.pat @@ -0,0 +1,21 @@ +# TFTP - Trivial File Transfer Protocol - used for bootstrapping - RFC 1350 +# Pattern attributes: marginal fast fast +# Protocol groups: document_retrieval ietf_internet_standard +# Wiki: http://www.protocolinfo.org/wiki/TFTP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# usually runs on port 69 +# +# This pattern is unconfirmed. + +tftp +# The first packet from the initiating host should either be a Read Request +# or a Write Request. In the other direction, it should be data packet with +# block number one or an ACK with block number zero. We only attempt to match +# the initiating host's packets, because the only identifying features of +# the responses to them are two byte sequences (which isn't specific enough). +# (\x01|\x02) = Read Request or Write Request +# [ -~]* = the file name +# the rest = netascii|octet|mail (case insensitivity done by the kernel) + +^(\x01|\x02)[ -~]*(netascii|octet|mail) diff --git a/usr/local/share/protocols/thecircle.pat b/usr/local/share/protocols/thecircle.pat new file mode 100644 index 000000000..d5e2b80b7 --- /dev/null +++ b/usr/local/share/protocols/thecircle.pat @@ -0,0 +1,12 @@ +# The Circle - P2P application - http://thecircle.org.au +# Pattern attributes: ok veryfast fast +# Protocol groups: p2p open_source +# Wiki: http://www.protocolinfo.org/wiki/The_Circle +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# This is tested with The Circle 0.41c on Linux. +# It likely misses some stuff. Notably, I wasn't able to test it on any +# large downloads, because no one is sharing anything! + +thecircle +^t\x03ni.?[\x01-\x06]?t[\x01-\x05]s[\x0a\x0b](glob|who are you$|query data) diff --git a/usr/local/share/protocols/tonghuashun.pat b/usr/local/share/protocols/tonghuashun.pat new file mode 100644 index 000000000..45f838b20 --- /dev/null +++ b/usr/local/share/protocols/tonghuashun.pat @@ -0,0 +1,11 @@ +# Tonghuashun - stock analysis and trading; Chinese - http://www.10jqka.com.cn +# Pattern attributes: ok fast fast +# Protocol groups: +# Wiki: http://www.protocolinfo.org/wiki/Tonghuashun +# Copyright (C) 2009 Matthew Strait; See ../LICENSE + +# Pattern contributed by liangjun without comment. + +tonghuashun +^(GET /docookie\.php\?uname=|\xfd\xfd\xfd\xfd\x30\x30\x30\x30\x30) + diff --git a/usr/local/share/protocols/tor.pat b/usr/local/share/protocols/tor.pat new file mode 100644 index 000000000..7e4f70755 --- /dev/null +++ b/usr/local/share/protocols/tor.pat @@ -0,0 +1,17 @@ +# Tor - The Onion Router - used for anonymization - http://tor.eff.org +# Pattern attributes: good notsofast notsofast +# Protocol groups: networking +# Wiki: http://protocolinfo.org/wiki/Tor +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This pattern has been tested and is believed to work well. +# +# It matches on the second packet. I have no idea how the protocol +# works, but this matches every stream I have made using Tor 0.1.0.16 as +# a client on Linux. +# +# It does NOT attempt to match the HTTP request that fetches the list of +# Tor servers. + +tor +TOR1.* diff --git a/usr/local/share/protocols/tsp.pat b/usr/local/share/protocols/tsp.pat new file mode 100644 index 000000000..7751df9e8 --- /dev/null +++ b/usr/local/share/protocols/tsp.pat @@ -0,0 +1,14 @@ +# TSP - Berkely UNIX Time Synchronization Protocol +# Pattern attributes: good veryfast fast overmatch +# Protocol groups: time_synchronization open_source +# Wiki: http://www.protocolinfo.org/wiki/TSP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# http://ftp.svbug.com/ftp/pub/manuals/pdf/smm.22.timed.pdf +# http://docs.freebsd.org/44doc/smm/12.timed/paper.pdf +# +# This pattern is barely tested. + +tsp +# type, version (1), sequence number, 8 type specific bytes, machine name +^[\x01-\x13\x16-$]\x01.?.?.?.?.?.?.?.?.?.?[ -~]+ diff --git a/usr/local/share/protocols/unset.pat b/usr/local/share/protocols/unset.pat new file mode 100644 index 000000000..b9c124462 --- /dev/null +++ b/usr/local/share/protocols/unset.pat @@ -0,0 +1,8 @@ +# Unset - Dummy pattern for unmatched connections that are still being tested + +unset +# This pattern is ignored by the kernel. It sees that the "protocol" is +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# "testing" and always returns matched for connections that are still +# being tested. +. diff --git a/usr/local/share/protocols/uucp.pat b/usr/local/share/protocols/uucp.pat new file mode 100644 index 000000000..f7ef22c9a --- /dev/null +++ b/usr/local/share/protocols/uucp.pat @@ -0,0 +1,12 @@ +# UUCP - Unix to Unix Copy +# Pattern attributes: ok veryfast fast +# Protocol groups: document_retrieval obsolete +# Wiki: http://www.protocolinfo.org/wiki/UUCP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# This is completely untested! (I don't know how to use UUCP...) + +# See http://docs.freebsd.org/info/uucp/uucp.info.The_Initial_Handshake.html + +uucp +^\x10here= diff --git a/usr/local/share/protocols/validcertssl.pat b/usr/local/share/protocols/validcertssl.pat new file mode 100644 index 000000000..7aa181221 --- /dev/null +++ b/usr/local/share/protocols/validcertssl.pat @@ -0,0 +1,25 @@ +# Valid certificate SSL +# Pattern attributes: good slow notsofast subset +# Protocol groups: secure ietf_proposed_standard +# Wiki: http://www.protocolinfo.org/wiki/SSL +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +# This matches anything claiming to use a valid certificate from a well +# known certificate authority. +# +# This is a subset of ssl, so it needs to come first to match. +# +# Note that opening a website that has a valid certificate will +# open one connection that matches this and many ssl connections that +# only match the ssl pattern. Thus, this pattern may not be very useful. +# +# This pattern is believed match only the above, but may not match all +# of it. +# +# the certificate authority info is sent in quasi plain text, if it matches +# a well known certificate authority then we will assume it is a +# web/imaps/etc server. Other ssl may be good too, but it should fall under +# a different rule + +validcertssl +^(.?.?\x16\x03.*\x16\x03|.?.?\x01\x03\x01?.*\x0b).*(thawte|equifax secure|rsa data security, inc|verisign, inc|gte cybertrust root|entrust\.net limited) diff --git a/usr/local/share/protocols/ventrilo.pat b/usr/local/share/protocols/ventrilo.pat new file mode 100644 index 000000000..74e588c27 --- /dev/null +++ b/usr/local/share/protocols/ventrilo.pat @@ -0,0 +1,18 @@ +# Ventrilo - VoIP - http://ventrilo.com +# Pattern attributes: good fast fast +# Protocol groups: voip proprietary +# Wiki: http://www.protocolinfo.org/wiki/Ventrilo +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# I have tested this with Ventrilo client 2.3.0 on Windows talking to +# Ventrilo server 2.3.1 (the public version) on Linux. I've done this +# both within a LAN and over the Internet. In one test, I tried +# monkeying around with the server settings to see if I could break the +# pattern, and I couldn't. However, you can't change the port number in +# the public server. +# +# It has also been tested by one other person in an unknown configuration. + +ventrilo +^..?v\$\xcf + diff --git a/usr/local/share/protocols/vnc.pat b/usr/local/share/protocols/vnc.pat new file mode 100644 index 000000000..79d0ae8a2 --- /dev/null +++ b/usr/local/share/protocols/vnc.pat @@ -0,0 +1,23 @@ +# VNC - Virtual Network Computing. Also known as RFB - Remote Frame Buffer +# Pattern attributes: great veryfast fast +# Protocol groups: remote_access +# Wiki: http://www.protocolinfo.org/wiki/VNC +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# http://www.realvnc.com/documentation.html +# +# This pattern has been verified with vnc v3.3.7 on WinXP and Linux +# +# Thanks to Trevor Paskett for this pattern. + +vnc +# Assumes single digit major and minor version numbers +# This message should be all alone in the first packet, so ^$ is appropriate +^rfb 00[1-9]\.00[0-9]\x0a$ + +# This is a more restrictive version which assumes the version numbers +# are ones actually in existance at the time of this writing, i.e. 3.3, +# 3.7 and 3.8 (with some clients wrongly reporting 3.5). It should be +# slightly faster, but probably not worth the extra maintenance. +# ^rfb 003\.00[3578]\x0a$ + diff --git a/usr/local/share/protocols/whois.pat b/usr/local/share/protocols/whois.pat new file mode 100644 index 000000000..6abf0e85d --- /dev/null +++ b/usr/local/share/protocols/whois.pat @@ -0,0 +1,14 @@ +# Whois - query/response system, usually used for domain name info - RFC 3912 +# Pattern attributes: good notsofast notsofast overmatch +# Protocol groups: networking ietf_draft_standard +# Wiki: http://www.protocolinfo.org/wiki/Whois +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on TCP port 43 +# +# This pattern has been tested and is believed to work well. + +whois +# Matches the query. Assumes only that it is printable ASCII without wierd +# whitespace. +^[ !-~]+\x0d\x0a$ diff --git a/usr/local/share/protocols/worldofwarcraft.pat b/usr/local/share/protocols/worldofwarcraft.pat new file mode 100644 index 000000000..4136d795b --- /dev/null +++ b/usr/local/share/protocols/worldofwarcraft.pat @@ -0,0 +1,66 @@ +# World of Warcraft - popular network game - http://blizzard.com/ +# Pattern attributes: ok veryfast fast +# Protocol groups: game proprietary +# Wiki: http://www.protocolinfo.org/wiki/World_of_Warcraft +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE + +worldofwarcraft +^\x06\xec\x01 + +# Quoth the author of this pattern, Weisskopf Beat : + +# I have written a pattern for wow (tested with versions 1.8.3 and +# 1.8.4, german edition). It does not match the login as i think this is +# uncritical, but i have added the necessary info later on. So only the +# actual in-game traffic is matched. +# +# I hope the pattern is specific enough, otherwise one may add some +# bytes from the response. +# +# some captured info: +# +# login: +# +# 0000: 00 02 28 00 57 6F 57 00 01 08 03 C7 12 36 38 78 ..(.WoW......68x +# 0010: 00 6E 69 57 00 45 44 65 64 3C 00 00 00 C0 A8 01 .niW.EDed<...... +# 0020: 22 0A 42 57 45 49 53 53 4B 4F 50 46 ".BWEISSKOPF +# +# 0000: 00 02 28 00 57 6F 57 00 01 08 03 C7 12 36 38 78 ..(.WoW......68x +# 0010: 00 6E 69 57 00 45 44 65 64 3C 00 00 00 C0 A8 01 .niW.EDed<...... +# 0020: 22 0A 42 57 45 49 53 53 4B 4F 50 46 ".BWEISSKOPF +# +# server asking: +# +# #1 +# 0000: 00 06 EC 01 04 49 C5 33 .....I.3 +# +# #2 +# 0000: 00 06 EC 01 C3 A8 6E 63 ......nc +# +# client response +# #1 +# 0000: 00 A4 ED 01 00 00 C7 12 00 00 00 00 00 00 42 57 ..............BW +# 0010: 45 49 53 53 4B 4F 50 46 00 EB 35 DC 89 5A CA 6D EISSKOPF..5..Z.m +# 0020: 17 95 DE 5B 74 6E 1E 5D 23 73 C6 8F 27 9F 11 12 ...[tn.]#s..'... +# 0030: BB 21 01 00 00 78 9C 75 CC 41 0A 83 50 0C 84 E1 .!...x.u.A..P... +# 0040: E7 3D 7A 19 75 25 D4 4D AB EB 12 5E A2 0C 8D 51 .=z.u%.M...^...Q +# 0050: D2 57 04 4F DF 2E 2D A4 B3 FD 86 3F A5 EF 1A C5 .W.O..-....?.... +# 0060: 71 90 F3 A3 7E E7 82 D5 C6 2E 55 CB 7E B9 FE 58 q...~.....U.~..X +# 0070: 43 A5 A8 4C 10 E5 1E 86 85 B6 E8 04 63 D8 1C 06 C..L........c... +# 0080: 5A A7 A9 84 D2 D9 6B 93 1C 5B 4F D9 D7 50 6E 04 Z.....k..[O..Pn. +# 0090: 0E 61 20 15 8B 6B 83 13 CB FD 09 D5 7F 0C 13 3F .a ..k.........? +# 00A0: DB 07 B4 EA 54 F8 ....T. +# +# #2 +# 0000: 00 A4 ED 01 00 00 C7 12 00 00 00 00 00 00 42 57 ..............BW +# 0010: 45 49 53 53 4B 4F 50 46 00 38 4C B5 95 C3 AD 25 EISSKOPF.8L....% +# 0020: CB 73 48 BD 82 FC 99 63 59 AC BF F3 D0 C6 8D AB .sH....cY....... +# 0030: 3D 21 01 00 00 78 9C 75 CC 41 0A 83 50 0C 84 E1 =!...x.u.A..P... +# 0040: E7 3D 7A 19 75 25 D4 4D AB EB 12 5E A2 0C 8D 51 .=z.u%.M...^...Q +# 0050: D2 57 04 4F DF 2E 2D A4 B3 FD 86 3F A5 EF 1A C5 .W.O..-....?.... +# 0060: 71 90 F3 A3 7E E7 82 D5 C6 2E 55 CB 7E B9 FE 58 q...~.....U.~..X +# 0070: 43 A5 A8 4C 10 E5 1E 86 85 B6 E8 04 63 D8 1C 06 C..L........c... +# 0080: 5A A7 A9 84 D2 D9 6B 93 1C 5B 4F D9 D7 50 6E 04 Z.....k..[O..Pn. +# 0090: 0E 61 20 15 8B 6B 83 13 CB FD 09 D5 7F 0C 13 3F .a ..k.........? +# 00A0: DB 07 B4 EA 54 F8 ....T. + diff --git a/usr/local/share/protocols/x11.pat b/usr/local/share/protocols/x11.pat new file mode 100644 index 000000000..2028ee7ea --- /dev/null +++ b/usr/local/share/protocols/x11.pat @@ -0,0 +1,23 @@ +# X Windows Version 11 - Networked GUI system used in most Unices +# Pattern attributes: good notsofast veryfast +# Protocol groups: remote_access x_consortium_standard +# Wiki: http://www.protocolinfo.org/wiki/X11 +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# It is common for X to be tunneled through SSH. Then obviously this pattern +# will not catch it. +# +# Specification: http://www.msu.edu/~huntharo/xwin/docs/xwindows/PROTO.pdf +# Usually runs on port 6000 (6001 for the second server on a host, etc) +# +# This pattern has been tested. + +x11 +# 'l' = little-endian. 'B' = big endian +# ".?" is for the unused byte that comes next. If it's a null, it won't appear. +# \x0b = protocol-major-version 11. +# For some reason, protocol-minor-version is 0, not 6, so can't match it. +# This pattern is too general. +^[lb].?\x0b +userspace pattern=^[lB].?\x0b +userspace flags=REG_NOSUB diff --git a/usr/local/share/protocols/xboxlive.pat b/usr/local/share/protocols/xboxlive.pat new file mode 100644 index 000000000..d04d9a756 --- /dev/null +++ b/usr/local/share/protocols/xboxlive.pat @@ -0,0 +1,41 @@ +# XBox Live - Console gaming +# Pattern attributes: marginal slow notsofast +# Protocol groups: game proprietary +# Wiki: http://www.protocolinfo.org/wiki/XBox_Live +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This may match all XBox traffic, or may only match Halo 2 traffic. +# We don't know yet. +# +# Thanks to Myles Uyema , who says: +# +# Analyzing packet traces using Ethereal, the Xbox typically connects +# to remote users using UDP port 3074. The first frame is typically +# a 156 byte UDP payload. I've only scrutinized the first 20 or so bytes. +# +# Each line below represents the first frame between my Xbox and a remote +# player's IP address playing Halo2 on Xbox Live. +# +# 00 00 00 00 00 58 80 00 00 00 00 00 82 31 9e a8 05 0f c5 62 00 f3 96 08 +# 00 00 00 00 00 58 80 00 00 00 00 00 82 31 9e a8 0f 0f c5 62 00 f3 97 09 +# 00 00 00 00 00 58 80 00 00 00 00 00 82 31 9e a8 05 0f c5 62 00 f3 95 07 +# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 bc 07 +# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 be 09 +# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 bf 0a +# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 bd 08 +# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 ba 05 +# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 bb 06 +# 00 00 00 00 00 58 80 00 00 00 00 00 81 7f dd 14 f2 8e a3 a1 00 f3 ca 06 +# 00 00 00 00 00 58 80 00 00 00 00 00 81 7f dd 14 f2 8e a3 a1 00 f3 cc 08 +# 00 00 00 00 00 58 80 00 00 00 00 00 81 7f dd 14 f2 8e a3 a1 00 f3 c9 05 +# 00 00 00 00 00 58 80 00 00 00 00 00 8b ca 5b c0 d8 9c f8 c3 00 f3 d4 0a +# 00 00 00 00 00 58 80 00 00 00 00 00 8b ca 5b c0 d8 9c f3 c3 00 f3 d1 07 +# 00 00 00 00 00 58 80 00 00 00 00 00 8b ca 5b c0 d8 9c f8 c3 00 f3 d2 08 +# 00 00 00 00 00 58 80 00 00 00 00 00 8b ca 5b c0 d8 9c f8 c3 00 f3 cf 05 +# 00 00 00 00 06 58 4e 00 00 00 e6 d9 6e ab 65 0d 63 9f 02 00 00 02 80 dd +# 00 00 00 00 06 58 4e 00 00 00 46 e2 95 74 cd f9 bc 3d 00 00 00 00 8b ca +# 00 00 00 00 06 58 4e 00 00 00 cf ce 3b 5c f5 f2 49 9a 00 00 00 00 8b ca +# 00 00 00 00 06 58 4e 00 00 00 a9 c0 ac c5 16 e5 c9 92 00 00 00 00 8b ca + +xboxlive +^\x58\x80........\xf3|^\x06\x58\x4e diff --git a/usr/local/share/protocols/xunlei.pat b/usr/local/share/protocols/xunlei.pat new file mode 100644 index 000000000..f7814c799 --- /dev/null +++ b/usr/local/share/protocols/xunlei.pat @@ -0,0 +1,83 @@ +# Xunlei - Chinese P2P filesharing - http://xunlei.com +# Pattern attributes: good slow notsofast +# Protocol groups: p2p +# Wiki: http://www.protocolinfo.org/wiki/Xunlei +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# This has been tested by a number of people. +# +# Written by wsgtrsys of www.routerclub.com. Improved by VeNoMouS. +# Improved more by wsgtrsys and platinum of bbs.chinaunix.net. +# +# Further additions of HTTP-like content by liangjunATdcuxD.Tcom, who +# says: "i find old pattern is not working . so i write a new pattern of +# xunlei,it's working with all of xunlei 5 version!" Matthew Strait notes +# in response: +# +# I've looked around and I'm fairly sure that Internet Explorer 5.0 +# never identifies itself as "Mozilla/4.0 (compatible; MSIE 5.00; +# Windows 98)" and that Internet Explorer 6.0 never identifies itself as +# either "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; )" or +# "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)". + +# The keep-alive part needs some examination too. These might validly +# occur in an HTTP/1.0 connection, although I think in practical cases +# they don't since there's general only one \x0d\x0a after it and/or the +# next line starts with a letter (especially because it's the client +# sending it). It wouldn't be crazy, though, if another protocol +# (besides Xunlei) used keep-alive in a way that did match this. But +# since I can't think of any examples, I'll assume it's ok for now. + +xunlei +^([()]|get)(...?.?.?(reg|get|query)|.+User-Agent: (Mozilla/4\.0 \(compatible; (MSIE 6\.0; Windows NT 5\.1;? ?\)|MSIE 5\.00; Windows 98\))))|Keep-Alive\x0d\x0a\x0d\x0a[26] + + +# This was the pattern until 2008 11 08. It is safer than the above against +# overmatching ordinary HTTP connections +#^[()]...?.?.?(reg|get|query) + +# More detail: +# From http://sourceforge.net/tracker/index.php?func=detail&aid=1885209&group_id=80085&atid=558668 +# +############################################################################## +# Date: 2008-02-03 +# Sender: hydr0g3n +# +# Xunlei (Chinese P2P) traffic is not matched anymore by layer7 xunlei +# pattern. It used to work in the past but not anymore. Maybe Xunlei was +# updated and pattern should be adapted? +# +# Apparently ipp2p was edited by Chinese people to detect pplive and xunlei. +# It is interesting and very recent: +# http://www.chinaunix.net/jh/4/914377.html +############################################################################## +# Date: 2008-02-03 +# Sender: quadong +# +# Ok. Only some of the ipp2p function can be translated into an l7-filter +# regular expression. The first part of search_xunlei can't be, since it +# works by checking whether the length of the packet matches a byte in the +# packet. The second part of search_xunlei becomes: +# +# \x20.?\x01?.?[\x01\x77]............?.?.?.?\x38 +# +# Or possibly: +# +# ^\x20.?\x01?.?[\x01\x77]............?.?.?.?\x38 +# +# I'm not sure whether IPP2P looks at every packet or only the first of each +# connection. +# +# udp_search_xunlei says: +# \x01\x01\x01\xfe\xff\xfe\xff|\x01\x11\xa0\xfe\xff\xfe\xff +# +# Again, putting a ^ at the beginning might work: +# +# ^(\x01\x01\x01\xfe\xff\xfe\xff|\x01\x11\xa0\xfe\xff\xfe\xff) +# +# So this *might* work: +# +# ^(\x20.?\x01?.?[\x01\x77]............?.?.?.?\x38|\x01\x01\x01\xfe\xff\xfe\xff|\x01\x11\xa0\xfe\xff\xfe\xff) +# +# but the ^ might be wrong and it will not match the HTTP part of Xunlei. +############################################################################## diff --git a/usr/local/share/protocols/yahoo.pat b/usr/local/share/protocols/yahoo.pat new file mode 100644 index 000000000..17595b855 --- /dev/null +++ b/usr/local/share/protocols/yahoo.pat @@ -0,0 +1,27 @@ +# Yahoo messenger - an instant messenger protocol - http://yahoo.com +# Pattern attributes: good fast fast +# Protocol groups: chat proprietary +# Wiki: http://www.protocolinfo.org/wiki/Yahoo_Messenger +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# Usually runs on port 5050 +# +# This pattern has been tested and is believed to work well. + +yahoo +# http://www.venkydude.com/articles/yahoo.htm says: +# All Yahoo commands start with YMSG. +# (Well... http://ethereal.com/faq.html#q5.32 suggests that YPNS and YHOO +# are also possible, so let's allow those) +# The next 7 bytes contain command (packet?) length and version information +# which we won't currently try to match. +# L means "YAHOO_SERVICE_VERIFY" according to Ethereal +# W means "encryption challenge command" (YAHOO_SERVICE_AUTH) +# T means "login command" (YAHOO_SERVICE_AUTHRESP) +# (there are others, i.e. 0x01 "coming online", 0x02 "going offline", +# 0x04 "changing status to available", 0x06 "user message", but W and T +# should appear in the first few packets.) +# 0xC080 is the standard argument separator, it should appear not long +# after the "type of command" byte. + +^(ymsg|ypns|yhoo).?.?.?.?.?.?.?[lwt].*\xc0\x80 diff --git a/usr/local/share/protocols/zip.pat b/usr/local/share/protocols/zip.pat new file mode 100644 index 000000000..e00135493 --- /dev/null +++ b/usr/local/share/protocols/zip.pat @@ -0,0 +1,7 @@ +# ZIP - (PK|Win)Zip archive format +# Pattern attributes: good notsofast notsofast subset +# Protocol groups: file + +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +zip +pk\x03\x04\x14 diff --git a/usr/local/share/protocols/zmaap.pat b/usr/local/share/protocols/zmaap.pat new file mode 100644 index 000000000..e741eca1a --- /dev/null +++ b/usr/local/share/protocols/zmaap.pat @@ -0,0 +1,18 @@ +# ZMAAP - Zeroconf Multicast Address Allocation Protocol +# Pattern attributes: ok veryfast fast +# Protocol groups: networking ietf_draft_standard +# Wiki: http://www.protocolinfo.org/wiki/ZMAAP +# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE +# +# http://files.zeroconf.org/draft-ietf-zeroconf-zmaap-02.txt +# (Note that this reference is an Internet-Draft, and therefore must +# be considered a work in progress.) +# +# This pattern is untested! + +zmaap +# - 4 byte magic number. +# - 1 byte version. Allow 1 & 2, even though only version 1 currently exists. +# - 1 byte message type,which is either 0 or 1 +# - 1 byte address family. L7-filter only works in IPv4, so this is 1. +^\x1b\xd7\x3b\x48[\x01\x02]\x01?\x01 diff --git a/usr/local/share/rrdtool/fonts/DejaVuSansMono-Roman.ttf b/usr/local/share/rrdtool/fonts/DejaVuSansMono-Roman.ttf new file mode 100644 index 0000000000000000000000000000000000000000..691c8d63c056b4f8f8ac5d076facf1d771a403a5 GIT binary patch literal 60444 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¥1ocGuEHD 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/apple-touch-icon.png b/usr/local/www/apple-touch-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..7a4b9759dd3bb1f6117c5eea8fb7c61989ac8632 GIT binary patch literal 4068 zcmVhDk(0RCwCdS_zCBo(`9C@M z|MGlHqaVHh5nCDm^gJ#SVLgwfFaF^~A}+%?4CB(5gIdgco_7dd@n&fyS%x_T&l6oY ziZ8BWwH_+aS~-^4gh$C2q% za@|(jR&3jjL@buwE=fg>(>bmRi&+*H<9C~7okpJKXR^`{7Vo;E=fNNNf{8gYw`MDO z!o(OqJ7wE#mUWV*9apK$H;e+yj_?!nUT>PW_x9!lp~A8{e9UnM zzIdKNru*<{W-Al81d}Cj!X=J_Sz|PJhiSqSd7g)r7`Kd*9D|umve=`bo$z1W%=*%_&;N@@NM0;eO{?_dZqFS$9X-OT$fId3xdjV z7#dE6p%-McC#vd=?d^EBNmd|Mm5`@z$>mlV#!IObd^}16RtXF+msz@W=@h35oNx&|q|57fuSktcP>e?d+bEUa+N~OC-M}N`X z{iZCBl6R|=3|wbt=K+`!CM3^8Ho(@ejE~;~Z*g4np+|ZC@njOPzGY;@q!j5hjB|3i zOS`&uiDJV?Fd}FH_-=T0nn|Dhn(NDfLk_3Y-2S%NwR8&3)yC~r z;m-`HZC^C{W+HKBvG~Z)(APRUUzMc#QyAe_>GbD|#jUZJN}R|nS+b;-Po4*lc3IYg z+qdHZgaA%LihL`dzpPl?6^mhl9nol(60^rNJ1y%dUC%QN(tMb!A-c|*cZ`lAuYZ=w z_`hJ}#|H-uLHKhfGa!m!w+gYQPdG8kjcy7fipA=lo_(Q!q+R#5J$r8J=>c#@1c9$J zKWHC!zb;8Px3^g<36iU3f)w zoP=!;isA~Ey?=Q4g6{6)t5wTGaL+f*RmEaMw!f-a z+>lPg$}GpJEL%mP52T3`NG+D*B%WWNO5HF#42*@xL3q#AbwN>3o@zfMrDQ5m9hQak zf0|H;q(*sEc|ObYV?19DRcDU8D3G~22_=ct)4((;J<2q(;GNMZkW--|JVlYz)K(;d zOTbu;;{Xz5#aczF->^j#uToXk=hJ$XI$hH~tEw+Z(!J?4ZaQDn-by4?s+=&?FP;+< zKnfu-Jr8rk?j*-yom&NAN+RP}XqpAG(ieVCBa!M7w7{d_CQx;sWreRIFJXg2q2M`^ zYAZFZRo8EBYpZ7>n01RR>yZee25xghvLQU5MOTlnRDRc}ydgOZU*P#NvXNN!XmDJ$ zJr8DqaKcx8KpO;c-VY_z+D1vL8wv(kY??3gyh~AYXCPEIs36F0gnRl8@Tf@o(3ihV zBN6R44jhdJOGX1exwcRkXW35286w4qu<#6Nby)0%Dqf7>==q-TkA}t~FY&DFy0pCM z*FO|Rz(aBzs5U6zT4qjHTzA(C`P}nVs`$X~4Or}Ih$@|L!Tv8$D z1Lmj#t&ZdCYc7<$VSn&cdtwCl&C|f@XGWG~QJlbzMN&*gNbuL`GEQnKZQJ1Njl@~V zmaWm~lPxV!6d>X7CXW);&qpJlMXnXg)>}NA|(!KyLqx=tRJX7 zCzZ=k=&hEekdF}umQKE|k}V6xGMU`ZapxBb3rzDc(?pbkik3hg zp`>@2CN9BHltU;UKc7G#h`vUBN4+~>;Y^)j_VPSJxHyy_FC-FUEPGb5*lC(rH_Q^r z6I|fVH1#K#>6CIAbIhc1@%wch9f0G-xg50O5!LGaYPHuiVHqmO;f8@9FUseS)ph6r z->FC=sNPSO%QZoWKM{GP6QJ1M*2a^<0y_Jv)fYo@K9_@>MIo_>H9SgcAD}24 z@W(}k!YIf6u(h>G7Y@dGLYATNE-4ldvn=#sKzW;O!#=F@Y*mG>xU#EjXQ-5HL~m0l zd>~1Kf?(8ZP+MCYNCHZ;$n$HmS%f|ph-+X4k^Oo;kF4Ayim;Vs7)*o7I&J$TU0+=+ z!V}lFx6h=S5700wej@RYcpUNZA3UvG#yER94yEVLKeOsZ7vJQ|-_ zeDu)(IM4&Jb7?*gRe&WrlPkv!`TQ}KwJw=_PmD@wFm2P4&nH2HrwYo z_h&MIY>v8ce+sU(wYAPc`+5Gr>z=TR$3~STr6^3!Ss!s2aARFde)^c4xrdma3 z>olDY4I|Em1)|A;!VaGxqWD}g2`WC^G=J3EY6U<9 zaG^vm%jb6p!o$gAL-_}Wh5}qwF3YrWf?txZ`+hX~Y$EZnqF7BajVA1y`Fxw}KBFib z(7r-If>r|+F%kLx{{D#~M3kAN{iYtvy1Y<8rvQ2XQivIFHJk+D1DL+LP)pw<4VeH(o=~lxSuR&N4w?6|ERXs8Pn$Y+pvos~?d$8S3lWY) zv`nd1YrHCz6_pCg2Dmm&(cI1RD4Wwu)ZL?_N1NuevWz|_PpzCos$8VeKu@bmB@DHu zqa)m+f%Df548Wk*;&JH70n+0dVYC|Tb%yhS%VaVKv>Evv5CKhKS-S-REsaL)Va9dQ zA)cY@$gqb}DLWKUG#;pVzfYw;qWMP2F)9TSnxh0^%CZ9_+2DBCTIWQUZaCF2;8Dzl z%!aV4kY;dvI&ZR1=+RA8`h>Zdrr>$dzX&UU0b5V2R8&zkLWTmPu;A|2R)~xN+B4IG zy-t5iRK(n_i|Y7NB7x5Pw(;>Ry1K%Z{CnA~MMjs&qjnPsI$4v{N?FaXkw^*Efn`x< z_v3_OhqqW3rF_%mx{ri_@3+I9EQ=e;^sKMV9U2NN2a2FVFvz+@0%d$zNO-`Dh(3gi zOIq8er)D}DCyE=m77GP{R64Qrl}gKX18^He9Z&&_(Z+qQ zQVHJxTYGGq32j6l${u|Eg6;R5#1i2K5WI#7;87%#KCRUWn+s>-27qdtC{7V{`*^;e zG*dHCA7uY54qCLoGZzLc8jMP?Mcky-@dEFf1coUc6-HobF$XOhvwaWa1!s8E5OL?J zlsJtVhv|>o^mv`2QPrTSKdtNUMWcRJdH?=<7$5k4BM-7H1dtu(ILsGr%bG;SKT%(N zkqS7i-?tC!_Et3dTs&T;jRG%Jr4A7T6B_~y1LMMae1x{%(L4BEC^N%rlG+X=^_y|e z>u?-@$Lgz^2IhZEmN&-ZHU6hAr8x{(Zx#o#%B1$;L)ww8KkOqK9n*%p#$- zjG;F<=-d2lU9^g)P;TK_5DVxGXC+{|=4Q;+ugDC9>Frnyg|`k_K#iqF7bNd@W(u{n z0&N-yBrp=5hbE%kaSpR>lqgib-Q-tPffEd)-?B{qmD9lxU!%xWDmAM&hM1e8dAw;N zWLpTb0Km0{ffMFB}6)wYTvxP75zeHlFoR2auW5X!{FuoBLOmR)Gu z7ne#{>eU?`@5EwizytpNGg`6w+lzzvYr%pAvosXAguX=Aa9yzog>Yvedi(=9_k*!9 z#CnS$?BRL%3C5vW@3XAqO!FZ{!Tn)w211@19DF4j{bMpYLfd=xLH#;Q40r+cV74)y zzpzvS0JeqdEtu#LMS+{U9A~L%9*M@^aR656y>HK(_na)-lil|H@$s1BJS@xORQ9Zy zOUa?s0^kx<028-+-g-&;>DXA7=cl}&gRo%yl7OE-aVN z)b+p0GI~G&pfb&9aMoFs%4$sm0lyrJZIC3W;T(C?Zvkf6xX; diff --git a/usr/local/www/carp_status.php b/usr/local/www/carp_status.php new file mode 100644 index 000000000..d53cf5047 --- /dev/null +++ b/usr/local/www/carp_status.php @@ -0,0 +1,209 @@ + "") { + interfaces_carp_set_maintenancemode(!isset($config["virtualip_carp_maintenancemode"])); +} +if($_POST['disablecarp'] <> "") { + if($status > 0) { + set_single_sysctl('net.inet.carp.allow', '0'); + if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + switch ($vip['mode']) { + case "carp": + interface_vip_bring_down($vip); + sleep(1); + break; + } + } + } + $savemsg = sprintf(gettext("%s IPs have been disabled. Please note that disabling does not survive a reboot."), $carp_counter); + $status = 0; + } else { + $savemsg = gettext("CARP has been enabled."); + if(is_array($config['virtualip']['vip'])) { + $viparr = &$config['virtualip']['vip']; + foreach ($viparr as $vip) { + switch ($vip['mode']) { + case "carp": + interface_carp_configure($vip); + sleep(1); + break; + } + } + } + interfaces_carp_setup(); + set_single_sysctl('net.inet.carp.allow', '1'); + $status = 1; + } +} + +$carp_detected_problems = ((get_single_sysctl("net.inet.carp.demotion")) > 0); + +$pgtitle = array(gettext("Status"),gettext("CARP")); +$shortcut_section = "carp"; +include("head.inc"); + +?> + + + +
    + + +" . gettext("Check link status on all interfaces with configured CARP VIPs.")); ?> + + +
    + + + "; + $align = "style=\"vertical-align:middle\""; + if($carp_enabled == false) { + $icon = "\"disabled\""; + $status = "DISABLED"; + } else { + if($status == "MASTER") { + $icon = "\"master\""; + } else if($status == "BACKUP") { + $icon = "\"backup\""; + } else if($status == "INIT") { + $icon = "\"init\""; + } + } + echo ""; + echo ""; + echo ""; + echo ""; + } + } +?> +
    + 0) { + if($status > 0) { + $carp_enabled = true; + echo ""; + } else { + $carp_enabled = false; + echo ""; + } + if(isset($config["virtualip_carp_maintenancemode"])) { + echo ""; + } else { + echo ""; + } + } +?> + +

    + + + + + + +

    " . gettext("Could not locate any defined CARP interfaces."); + echo "
    "; + + include("fend.inc"); + echo ""; + return; + } + if(is_array($config['virtualip']['vip'])) { + foreach($config['virtualip']['vip'] as $carp) { + if ($carp['mode'] != "carp") + continue; + $ipaddress = $carp['subnet']; + $password = $carp['password']; + $netmask = $carp['subnet_bits']; + $vhid = $carp['vhid']; + $advskew = $carp['advskew']; + $advbase = $carp['advbase']; + $status = get_carp_interface_status("{$carp['interface']}_vip{$carp['vhid']}"); + echo "
    " . convert_friendly_interface_to_friendly_descr($carp['interface']) . "@{$vhid}  " . $ipaddress . " {$icon}  " . $status . " 
    + + + +
    + + +

    +: +
    +
    . +

    + +" . gettext("pfSync nodes") . ":
    "; + echo "
    ";
    +	system("/sbin/pfctl -vvss | /usr/bin/grep creator | /usr/bin/cut -d\" \" -f7 | /usr/bin/sort -u");
    +	echo "
    "; +?> + + + + + diff --git a/usr/local/www/classes/maintable.inc b/usr/local/www/classes/maintable.inc new file mode 100644 index 000000000..38cf145c7 --- /dev/null +++ b/usr/local/www/classes/maintable.inc @@ -0,0 +1,196 @@ +. + 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. +*/ + +/* + pfSense_MODULE: guiutils +*/ + +/* DISABLE_PHP_LINT_CHECKING */ + +class MainTable { + private $headers = array(); +// private $columns = array(); + private $columns = 0; + private $rows = 0; + private $content = array(); + private $edit_uri = ''; + private $my_uri = ''; + private $buttons = array('move' => false, 'edit' => false, 'del' => false, 'dup' => false); + + function add_column($header, $cname, $width) { +// $this->column[] = array('header' => $header, 'cname' => $cname, 'width' => $width) + $this->headers[] = $header; + $this->cname[] = $cname; + $this->width[] = $width; + $this->columns++; + } + + function add_content_array($rows) { + foreach($rows as $row) { + $this->content[] = $row; + $this->rows++; + } + } + function add_button($name) { + if (isset($this->buttons[$name])) { + $this->buttons[$name] = true; + } + } + function edit_uri($uri) { + $this->edit_uri = $uri; + } + + function my_uri($uri) { + $this->my_uri = $uri; + } + + function display() { + echo "\n"; + echo "\n"; + echo " \n"; + echo $this->display_header(); + echo " \n"; + echo " \n"; + echo $this->display_rows(); + echo " \n"; + echo " \n"; + echo $this->display_footer(); + echo " \n"; + echo "
    \n"; + echo "\n"; + } + + private function display_header() { + global $g; + echo "\n"; + for ($col = 0; $col < $this->columns - 1; $col++) { + echo " width[$col]}%\" class=\"listhdrr\">{$this->headers[$col]}\n"; + } + echo " width[$this->columns - 1]}%\" class=\"listhdr\">{$this->headers[$this->columns - 1]}\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
    edit_uri}\">\"plus\"
    \n"; + echo " \n"; + echo "\n"; + + } + private function display_rows() { + global $g; + $cur_row = 0; + foreach ($this->content as $row) { + echo "\n"; + for ($col = 0; $col < $this->columns - 1; $col++) { + if ($col == 0) { + $cl = 'listlr'; + } else { + $cl = 'listr'; + } + echo " edit_uri}?id={$cur_row}'\">\n"; + if (is_array($row[$this->cname[$col]])) { + foreach ($row[$this->cname[$col]] as $data) { + echo " {$data}
    \n"; + } + } else { + echo " " . $row[$this->cname[$col]] . "\n"; + } + echo " \n"; + } + echo " edit_uri}?id={$cur_row}'\">\n"; + echo " {$row[$this->cname[$this->columns - 1]]}\n"; + echo " \n"; + echo " \n"; + $this->display_buttons($cur_row); + echo " \n"; + echo "\n"; + + $cur_row++; + } + } + private function display_footer() { + global $g; + echo "\n"; + echo " columns}\">\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
    edit_uri}\">\"plus\"
    \n"; + echo " \n"; + echo "\n"; + } + private function display_buttons($row) { + echo " \n"; + echo " \n"; + if ($this->buttons['move']) + echo $this->display_button('move', $row); + if ($this->buttons['edit']) + echo $this->display_button('edit', $row); + echo " \n"; + echo " \n"; + if ($this->buttons['del']) + echo $this->display_button('del', $row); + if ($this->buttons['dup']) + echo $this->display_button('dup', $row); + echo " \n"; + echo "
    \n"; + } + private function display_button($button, $row) { + global $g; + echo ""; + switch ($button) { + case "move": { + echo ""; + break; + } + case "edit": { + echo "edit_uri}?id={$row}\">\"edit\""; + break; + } + case "del": { + echo "my_uri}?act=del&id={$row}\" onclick=\"return confirm('Do you really want to delete this entry?')\">\"delete\""; + break; + } + case "dup": { + echo "edit_uri}?act=dup&id={$row}\">\"duplicate\""; + break; + } + } + echo ""; + } + +} + +?> \ No newline at end of file diff --git a/usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css b/usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css new file mode 100644 index 000000000..413a0342a --- /dev/null +++ b/usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css @@ -0,0 +1,166 @@ + +/* Main style for the table */ + +.dp-highlighter { + width: 100%; + overflow: auto; + line-height: 100% !important; + margin: 18px 0px 18px 0px; +} + +.dp-highlighter table { + width: 100%; + margin: 2px 0px 2px 0px; + border-collapse: collapse; + border-bottom: 2px solid #eee; + background-color: #fff; +} + +.dp-highlighter td +{ + font-family: Courier New; + font-size: 11px; +} + +/* Styles for the tools */ + +.dp-highlighter .tools-corner { + background-color: #eee; + font-size: 9px; +} + +.dp-highlighter .tools { + background-color: #eee; + padding: 3px 8px 3px 0px; + border-bottom: 1px solid gray; + font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif; + color: silver; +} + +.dp-highlighter .tools a { + font-size: 9px; + color: gray; + text-decoration: none; +} + +.dp-highlighter .tools a:hover { + color: red; + text-decoration: underline; +} + +/* Gutter with line number */ + +.dp-highlighter .gutter { + padding-right: 5px; + padding-left: 10px; + width: 5px; + background-color: #eee; + border-right: 1px solid gray; + color: gray; + text-align: right; + vertical-align: top; +} + +/* Single line style */ + +.dp-highlighter .line { + padding-left: 10px; + border-bottom: 1px solid #F7F7F7; + white-space:nowrap; +} + +/* About dialog styles */ + +.dp-about { + background-color: #fff; + margin: 0px; +} + +.dp-about table { + width: 100%; + height: 100%; + font-size: 11px; + font-family: Tahoma, Verdana, Arial, sans-serif !important; +} + +.dp-about td { + padding: 10px; + vertical-align: top; +} + +.dp-about .copy { + border-bottom: 1px solid #ACA899; + height: 95%; +} + +.dp-about .title { + color: red; + font-weight: bold; +} + +.dp-about .para { + margin-bottom: 4px; +} + +.dp-about .footer { + background-color: #ECEADB; + border-top: 1px solid #fff; + text-align: right; +} + +.dp-about .close { + font-size: 11px; + font-family: Tahoma, Verdana, Arial, sans-serif !important; + background-color: #ECEADB; + width: 60px; + height: 22px; +} + +/* Language specific styles */ + +.dp-c {} +.dp-c .comment { color: green; } +.dp-c .string { color: blue; } +.dp-c .preprocessor { color: gray; } +.dp-c .keyword { color: blue; } +.dp-c .vars { color: #d00; } + +.dp-vb {} +.dp-vb .comment { color: green; } +.dp-vb .string { color: blue; } +.dp-vb .preprocessor { color: gray; } +.dp-vb .keyword { color: blue; } + +.dp-sql {} +.dp-sql .comment { color: green; } +.dp-sql .string { color: red; } +.dp-sql .keyword { color: blue; } +.dp-sql .func { color: #ff1493; } +.dp-sql .op { color: #808080; } + +.dp-xml {} +.dp-xml .cdata { color: #ff1493; } +.dp-xml .comments { color: green; } +.dp-xml .tag { color: blue; } +.dp-xml .tag-name { color: black; font-weight: bold; } +.dp-xml .attribute { color: red; } +.dp-xml .attribute-value { color: blue; } + +.dp-delphi {} +.dp-delphi .comment { color: #008200; font-style: italic; } +.dp-delphi .string { color: blue; } +.dp-delphi .number { color: blue; } +.dp-delphi .directive { color: #008284; } +.dp-delphi .keyword { font-weight: bold; color: navy; } +.dp-delphi .vars { color: #000; } + +.dp-py {} +.dp-py .comment { color: green; } +.dp-py .string { color: red; } +.dp-py .docstring { color: brown; } +.dp-py .keyword { color: blue; font-weight: bold;} +.dp-py .builtins { color: #ff1493; } +.dp-py .magicmethods { color: #808080; } +.dp-py .exceptions { color: brown; } +.dp-py .types { color: brown; font-style: italic; } +.dp-py .commonlibs { color: #8A2BE2; font-style: italic; } diff --git a/usr/local/www/code-syntax-highlighter/gpl.txt b/usr/local/www/code-syntax-highlighter/gpl.txt new file mode 100644 index 000000000..5b6e7c66c --- /dev/null +++ b/usr/local/www/code-syntax-highlighter/gpl.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/usr/local/www/code-syntax-highlighter/shBrushCSharp.js b/usr/local/www/code-syntax-highlighter/shBrushCSharp.js new file mode 100644 index 000000000..5743b9366 --- /dev/null +++ b/usr/local/www/code-syntax-highlighter/shBrushCSharp.js @@ -0,0 +1,30 @@ +dp.sh.Brushes.CSharp = function() +{ + var keywords = 'abstract as base bool break byte case catch char checked class const ' + + 'continue decimal default delegate do double else enum event explicit ' + + 'extern false finally fixed float for foreach get goto if implicit in int ' + + 'interface internal is lock long namespace new null object operator out ' + + 'override params private protected public readonly ref return sbyte sealed set ' + + 'short sizeof stackalloc static string struct switch this throw true try ' + + 'typeof uint ulong unchecked unsafe ushort using virtual void while'; + + this.regexList = [ + // There's a slight problem with matching single line comments and figuring out + // a difference between // and ///. Using lookahead and lookbehind solves the + // problem, unfortunately JavaScript doesn't support lookbehind. So I'm at a + // loss how to translate that regular expression to JavaScript compatible one. +// { regex: new RegExp('(?) + | () + | (<)*(\w+)*\s*(\w+)\s*=\s*(".*?"|'.*?'|\w+)(/*>)* + | () + */ + var index = 0; + var match = null; + var regex = null; + + // Match CDATA in the following format + // <\!\[[\w\s]*?\[(.|\s)*?\]\]> + this.GetMatches(new RegExp('<\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\]>', 'gm'), 'cdata'); + + // Match comments + // + this.GetMatches(new RegExp('', 'gm'), 'comments'); + + // Match attributes and their values + // (\w+)\s*=\s*(".*?"|\'.*?\'|\w+)* + regex = new RegExp('([\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*', 'gm'); + while((match = regex.exec(this.code)) != null) + { + push(this.matches, new dp.sh.Match(match[1], match.index, 'attribute')); + + // if xml is invalid and attribute has no property value, ignore it + if(match[2] != undefined) + { + push(this.matches, new dp.sh.Match(match[2], match.index + match[0].indexOf(match[2]), 'attribute-value')); + } + } + + // Match opening and closing tag brackets + // + this.GetMatches(new RegExp('', 'gm'), 'tag'); + + // Match tag names + // + * + * + * + * + * + * + ** + * History: + * 1.1.0 - March 23rd, 2005 + * - split brushes into separate files + * - now works in Safari + * - added missing strings to PHP matches + * + * 1.0.4 - February 2nd, 2005 + * - added Delphi & Python + * - multi-line comments fixed + * - language name can be set through w3c valid 'class' attribute + * - HighlightAll(name, [showGutter], [showTools]) + * + * 1.0.3 - December 31th, 2004 (added PHP & SQL) + * 1.0.2 - December 28th, 2004 (refactoring with namespaces) + * 1.0.1 - December 14th, 2004 + * 1.0.0 - November 13th, 2004 + */ + +// create namespaces +var dp = { + sh : // dp.sh + { + Utils : {}, // dp.sh.Utils + Brushes : {} // dp.sh.Brushes + } +}; + +dp.sh.Config = { + Version : '1.1.0', + About : 'About...
    dp.SyntaxHighlighter
    Version: {V}
    ©2004-2005 Dream Projections Inc. All right reserved.
    ' +}; + +dp.SyntaxHighlighter = dp.sh; + + + +// opens a new windows and puts the original unformatted source code inside. +dp.sh.Utils.ViewSource = function(sender) +{ + var code = sender.parentNode.originalCode; + var wnd = window.open('', '_blank', 'width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1'); + + code = code.replace(/' + code + ''); + wnd.document.close(); +} + +// copies the original source code in to the clipboard (IE only) +dp.sh.Utils.ToClipboard = function(sender) +{ + var code = sender.parentNode.originalCode; + + // This works only for IE. There's a way to make it work with Mozilla as well, + // but it requires security settings changed on the client, which isn't by + // default, so 99% of users won't have it working anyways. + if(window.clipboardData) + { + window.clipboardData.setData('text', code); + + alert('The code is in your clipboard now.'); + } +} + +// creates an invisible iframe, puts the original source code inside and prints it +dp.sh.Utils.PrintSource = function(sender) +{ + var td = sender.parentNode; + var code = td.processedCode; + var iframe = document.createElement('iframe'); + var doc = null; + var wnd = + + // this hides the iframe + iframe.style.cssText = 'position:absolute; width:0px; height:0px; left:-5px; top:-5px;'; + + td.appendChild(iframe); + + doc = iframe.contentWindow.document; + code = code.replace(/' + code + ''); + doc.close(); + + iframe.contentWindow.focus(); + iframe.contentWindow.print(); + + td.removeChild(iframe); +} + +dp.sh.Utils.About = function() +{ + var wnd = window.open('', '_blank', 'dialog, width=320, height=150'); + var doc = wnd.document; + + var styles = document.getElementsByTagName('style'); + var links = document.getElementsByTagName('link'); + + doc.write(dp.sh.Config.About.replace('{V}', dp.sh.Config.Version)); + + // copy over ALL the styles from the parent page + for(var i = 0; i < styles.length; i++) + doc.write(''); + + for(var i = 0; i < links.length; i++) + if(links[i].rel.toLowerCase() == 'stylesheet') + doc.write(''); + + doc.close(); + wnd.focus(); +} + + + + + +// creates a new match object +dp.sh.Match = function(value, index, css) +{ + this.value = value; + this.index = index; + this.length = value.length; + this.css = css; +} + + + + + +dp.sh.Highlighter = function() +{ + this.addGutter = true; + this.addControls = true; + this.tabsToSpaces = true; +} + +// static callback for the match sorting +dp.sh.Highlighter.SortCallback = function(m1, m2) +{ + // sort matches by index first + if(m1.index < m2.index) + return -1; + else if(m1.index > m2.index) + return 1; + else + { + // if index is the same, sort by length + if(m1.length < m2.length) + return -1; + else if(m1.length > m2.length) + return 1; + } + return 0; +} + +// gets a list of all matches for a given regular expression +dp.sh.Highlighter.prototype.GetMatches = function(regex, css) +{ + var index = 0; + var match = null; + + while((match = regex.exec(this.code)) != null) + { + this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css); + } +} + +dp.sh.Highlighter.prototype.AddBit = function(str, css) +{ + var span = document.createElement('span'); + + str = str.replace(/&/g, '&'); + str = str.replace(/ /g, ' '); + str = str.replace(/'); + + // when adding a piece of code, check to see if it has line breaks in it + // and if it does, wrap individual line breaks with span tags + if(css != null) + { + var regex = new RegExp('
    ', 'gi'); + + if(regex.test(str)) + { + var lines = str.split(' 
    '); + + str = ''; + + for(var i = 0; i < lines.length; i++) + { + span = document.createElement('span'); + span.className = css; + span.innerHTML = lines[i]; + + this.div.appendChild(span); + + // don't add a
    for the last line + if(i + 1 < lines.length) + { + this.div.appendChild(document.createElement('br')); + } + } + } + else + { + span.className = css; + span.innerHTML = str; + this.div.appendChild(span); + } + } + else + { + span.innerHTML = str; + this.div.appendChild(span); + } +} + +// checks if one match is inside another +dp.sh.Highlighter.prototype.IsInside = function(match) +{ + if(match == null || match.length == 0) + { + return; + } + + for(var i = 0; i < this.matches.length; i++) + { + var c = this.matches[i]; + + if(c == null) + { + continue; + } + + if((match.index > c.index) && (match.index <= c.index + c.length)) + { + return true; + } + } + + return false; +} + +dp.sh.Highlighter.prototype.ProcessRegexList = function() +{ + for(var i = 0; i < this.regexList.length; i++) + { + this.GetMatches(this.regexList[i].regex, this.regexList[i].css); + } +} + +dp.sh.Highlighter.prototype.ProcessSmartTabs = function(code) +{ + var lines = code.split('\n'); + var result = ''; + var tabSize = 4; + var tab = '\t'; + + // This function inserts specified amount of spaces in the string + // where a tab is while removing that given tab. + function InsertSpaces(line, pos, count) + { + var left = line.substr(0, pos); + var right = line.substr(pos + 1, line.length); // pos + 1 will get rid of the tab + var spaces = ''; + + for(var i = 0; i < count; i++) + { + spaces += ' '; + } + + return left + spaces + right; + } + + // This function process one line for 'smart tabs' + function ProcessLine(line, tabSize) + { + if(line.indexOf(tab) == -1) + { + return line; + } + + var pos = 0; + + while((pos = line.indexOf(tab)) != -1) + { + // This is pretty much all there is to the 'smart tabs' logic. + // Based on the position within the line and size of a tab, + // calculate the amount of spaces we need to insert. + var spaces = tabSize - pos % tabSize; + + line = InsertSpaces(line, pos, spaces); + } + + return line; + } + + // Go through all the lines and do the 'smart tabs' magic. + for(var i = 0; i < lines.length; i++) + { + var line = lines[i]; + result += ProcessLine(line, tabSize) + '\n'; + } + + return result; +} + +dp.sh.Highlighter.prototype.SwitchToTable = function() +{ + // Safari fix: for some reason lowercase
    isn't getting picked up, even though 'i' is set + var lines = this.div.innerHTML.split(/
    /gi); + var row = null; + var cell = null; + var html = ''; + var pipe = ' | '; + + // creates an anchor to a utility + function UtilHref(util, text) + { + return '' + text + ''; + } + + row = this.table.insertRow(-1); + + if(this.addGutter == true) + { + cell = row.insertCell(-1); + cell.className = 'tools-corner'; + } + + if(this.addControls == true) + { + cell = row.insertCell(-1); + + cell.originalCode = this.originalCode; + cell.processedCode = this.code; + + cell.className = 'tools'; + cell.innerHTML = UtilHref('ViewSource', 'view plain') + pipe + UtilHref('PrintSource', 'print'); + + if(window.clipboardData) + { + cell.innerHTML += pipe + UtilHref('ToClipboard', 'copy to clipboard'); + } + + cell.innerHTML += pipe + UtilHref('About', '?'); + } + + for(var i = 0; i < lines.length - 1; i++) + { + row = this.table.insertRow(-1); + + if(this.addGutter == true) + { + cell = row.insertCell(-1); + cell.className = 'gutter'; + cell.innerHTML = i + 1; + } + + cell = row.insertCell(-1); + cell.className = 'line'; + cell.innerHTML = lines[i]; + } + + this.div.innerHTML = ''; +} + +dp.sh.Highlighter.prototype.Highlight = function(code) +{ + // This function strips all new lines and spaces + // from the beging and end of the string . + function Trim(str) + { + var begining = new RegExp('^[\\s\\n]', 'g'); + var end = new RegExp('[\\s\\n]$', 'g'); + + while(begining.test(str)) + { + str = str.substr(1); + } + + while(end.test(str)) + { + str = str.substr(0, str.length - 1); + } + + return str; + } + + // This function returns a portions of the string + // from pos1 to pos2 inclusive. + function Copy(string, pos1, pos2) + { + return string.substr(pos1, pos2 - pos1); + } + + var pos = 0; + + this.originalCode = code; + this.code = Trim(code); + this.div = document.createElement('div'); + this.table = document.createElement('table'); + this.matches = new Array(); + + if(this.CssClass != null) + { + this.table.className = this.CssClass; + } + + // replace tabs with spaces + if(this.tabsToSpaces == true) + { + this.code = this.ProcessSmartTabs(this.code); + } + + this.table.border = 0; + this.table.cellSpacing = 0; + this.table.cellPadding = 0; + + this.ProcessRegexList(); + + // if no matches found, do nothing + if(this.matches.length == 0) + { + return; + } + + // sort the matches + this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback); + + // The following loop checks to see if any of the matches are inside + // of other matches. This process would get rid of highligting strings + // inside comments, keywords inside strings and so on. + for(var i = 0; i < this.matches.length; i++) + { + if(this.IsInside(this.matches[i])) + { + this.matches[i] = null; + } + } + + // Finally, go through the final list of matches and pull the all + // together adding everything in between that isn't a match. + for(var i = 0; i < this.matches.length; i++) + { + var match = this.matches[i]; + + if(match == null || match.length == 0) + { + continue; + } + + this.AddBit(Copy(this.code, pos, match.index), null); + this.AddBit(match.value, match.css); + + pos = match.index + match.length; + } + + this.AddBit(this.code.substr(pos), null); + + this.SwitchToTable(); +} + +dp.sh.Highlighter.prototype.GetKeywords = function(str) +{ + return '\\b' + str.replace(/ /g, '\\b|\\b') + '\\b'; +} + +// highlightes all elements identified by name and gets source code from specified property +dp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */) +{ + var elements = document.getElementsByName(name); + var highlighter = null; + var registered = new Object(); + var propertyName = 'value'; + + function FindValue() + { + var a = arguments; + + for(var i = 0; i < a.length; i++) + if(a[i] != null && ((typeof(a[i]) == 'string' && a[i] != '') || (typeof(a[i]) == 'object' && a[i].value != ''))) + return a[i]; + + return null; + } + + if(elements == null) + { + return; + } + + // if showGutter isn't set, default to TRUE + if(showGutter == null) + { + showGutter = true; + } + + // if showControls isn't set, default to TRUE + if(showControls == null) + { + showControls = true; + } + + // register all brushes + for(var brush in dp.sh.Brushes) + { + var aliases = dp.sh.Brushes[brush].Aliases; + + if(aliases == null) + { + continue; + } + + for(var i = 0; i < aliases.length; i++) + { + registered[aliases[i]] = brush; + } + } + + for(var i = 0; i < elements.length; i++) + { + var element = elements[i]; + var language = FindValue(element.attributes['class'], element.className, element.attributes['language'], element.language); + + if(language == null) + continue; + + if(language.value) + language = language.value; + + language = (language + '').toLowerCase(); + + if(registered[language] == null) + { + continue; + } + + // instantiate a brush + highlighter = new dp.sh.Brushes[registered[language]](); + + // hide the original element + element.style.display = 'none'; + + highlighter.addGutter = showGutter; + highlighter.addControls = showControls; + highlighter.Highlight(element[propertyName]); + + // place the result table inside a div + var div = document.createElement('div'); + + div.className = 'dp-highlighter'; + div.appendChild(highlighter.table); + + element.parentNode.insertBefore(div, element); + } +} diff --git a/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js b/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js new file mode 100644 index 000000000..8d9272164 --- /dev/null +++ b/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js @@ -0,0 +1,636 @@ +/** + * Code Syntax Highlighter. + * Version 1.3.0 + * Copyright (C) 2004 Alex Gorbatchev. + * http://www.dreamprojections.com/syntaxhighlighter/ + * + * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +// +// create namespaces +// +var dp = { + sh : + { + Toolbar : {}, + Utils : {}, + RegexLib: {}, + Brushes : {}, + Strings : {}, + Version : '1.4.1' + } +}; + +dp.sh.Strings = { + AboutDialog : 'About...

    dp.SyntaxHighlighter

    Version: {V}

    http://www.dreamprojections.com/SyntaxHighlighter

    ©2004-2005 Alex Gorbatchev. All right reserved.
    ' +}; + +dp.SyntaxHighlighter = dp.sh; + +// +// Toolbar functions +// + +dp.sh.Toolbar.Commands = { + ExpandSource: { + label: '+ expand source', + check: function(highlighter) { return highlighter.collapse; }, + func: function(sender, highlighter) + { + sender.parentNode.removeChild(sender); + highlighter.div.className = highlighter.div.className.replace('collapsed', ''); + } + }, + + // opens a new windows and puts the original unformatted source code inside. + ViewSource: { + label: 'view plain', + func: function(sender, highlighter) + { + var code = highlighter.originalCode.replace(/' + code + ''); + wnd.document.close(); + } + }, + + // copies the original source code in to the clipboard (IE only) + CopyToClipboard: { + label: 'copy to clipboard', + check: function() { return window.clipboardData != null; }, + func: function(sender, highlighter) + { + window.clipboardData.setData('text', highlighter.originalCode); + alert('The code is in your clipboard now'); + } + }, + + // creates an invisible iframe, puts the original source code inside and prints it + PrintSource: { + label: 'print', + func: function(sender, highlighter) + { + var iframe = document.createElement('IFRAME'); + var doc = null; + + // this hides the iframe + iframe.style.cssText = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;'; + + document.body.appendChild(iframe); + doc = iframe.contentWindow.document; + + dp.sh.Utils.CopyStyles(doc, window.document); + doc.write('
    ' + highlighter.div.innerHTML + '
    '); + doc.close(); + + iframe.contentWindow.focus(); + iframe.contentWindow.print(); + + alert('Printing...'); + + document.body.removeChild(iframe); + } + }, + + About: { + label: '?', + func: function(highlighter) + { + var wnd = window.open('', '_blank', 'dialog,width=300,height=150,scrollbars=0'); + var doc = wnd.document; + + dp.sh.Utils.CopyStyles(doc, window.document); + + doc.write(dp.sh.Strings.AboutDialog.replace('{V}', dp.sh.Version)); + doc.close(); + wnd.focus(); + } + } +}; + +// creates a
    with all toolbar links +dp.sh.Toolbar.Create = function(highlighter) +{ + var div = document.createElement('div'); + + div.className = 'tools'; + + for(var name in dp.sh.Toolbar.Commands) + { + var cmd = dp.sh.Toolbar.Commands[name]; + + if(cmd.check != null && !cmd.check(highlighter)) + continue; + + div.innerHTML += '' + cmd.label + ''; + } + + return div; +} + +// executes toolbar command by name +dp.sh.Toolbar.Command = function(name, sender) +{ + var n = sender; + + while(n != null && n.className.indexOf('dp-highlighter') == -1) + n = n.parentNode; + + if(n != null) + dp.sh.Toolbar.Commands[name].func(sender, n.highlighter); +} + +// copies all from 'target' window to 'dest' +dp.sh.Utils.CopyStyles = function(destDoc, sourceDoc) +{ + var links = sourceDoc.getElementsByTagName('link'); + + for(var i = 0; i < links.length; i++) + if(links[i].rel.toLowerCase() == 'stylesheet') + destDoc.write(''); +} + +// +// Common reusable regular expressions +// +dp.sh.RegexLib = { + MultiLineCComments : new RegExp('/\\*[\\s\\S]*?\\*/', 'gm'), + SingleLineCComments : new RegExp('//.*$', 'gm'), + SingleLinePerlComments : new RegExp('#.*$', 'gm'), + DoubleQuotedString : new RegExp('"(?:\\.|(\\\\\\")|[^\\""])*"','g'), + SingleQuotedString : new RegExp("'(?:\\.|(\\\\\\')|[^\\''])*'", 'g') +}; + +// +// Match object +// +dp.sh.Match = function(value, index, css) +{ + this.value = value; + this.index = index; + this.length = value.length; + this.css = css; +} + +// +// Highlighter object +// +dp.sh.Highlighter = function() +{ + this.noGutter = false; + this.addControls = true; + this.collapse = false; + this.tabsToSpaces = true; + this.wrapColumn = 80; + this.showColumns = true; +} + +// static callback for the match sorting +dp.sh.Highlighter.SortCallback = function(m1, m2) +{ + // sort matches by index first + if(m1.index < m2.index) + return -1; + else if(m1.index > m2.index) + return 1; + else + { + // if index is the same, sort by length + if(m1.length < m2.length) + return -1; + else if(m1.length > m2.length) + return 1; + } + return 0; +} + +dp.sh.Highlighter.prototype.createElement = function(name) +{ + var result = document.createElement(name); + result.highlighter = this; + return result; +} + +// gets a list of all matches for a given regular expression +dp.sh.Highlighter.prototype.GetMatches = function(regex, css) +{ + var index = 0; + var match = null; + + while((match = regex.exec(this.code)) != null) + this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css); +} + +dp.sh.Highlighter.prototype.AddBit = function(str, css) +{ + if(str == null || str.length == 0) + return; + + var span = this.createElement('span'); + + str = str.replace(/&/g, '&'); + str = str.replace(/ /g, ' '); + str = str.replace(/'); + + // when adding a piece of code, check to see if it has line breaks in it + // and if it does, wrap individual line breaks with span tags + if(css != null) + { + var regex = new RegExp('
    ', 'gi'); + + if(regex.test(str)) + { + var lines = str.split(' 
    '); + + str = ''; + + for(var i = 0; i < lines.length; i++) + { + span = this.createElement('span'); + span.className = css; + span.innerHTML = lines[i]; + + this.div.appendChild(span); + + // don't add a
    for the last line + if(i + 1 < lines.length) + this.div.appendChild(this.createElement('br')); + } + } + else + { + span.className = css; + span.innerHTML = str; + this.div.appendChild(span); + } + } + else + { + span.innerHTML = str; + this.div.appendChild(span); + } +} + +// checks if one match is inside any other match +dp.sh.Highlighter.prototype.IsInside = function(match) +{ + if(match == null || match.length == 0) + return false; + + for(var i = 0; i < this.matches.length; i++) + { + var c = this.matches[i]; + + if(c == null) + continue; + + if((match.index > c.index) && (match.index < c.index + c.length)) + return true; + } + + return false; +} + +dp.sh.Highlighter.prototype.ProcessRegexList = function() +{ + for(var i = 0; i < this.regexList.length; i++) + this.GetMatches(this.regexList[i].regex, this.regexList[i].css); +} + +dp.sh.Highlighter.prototype.ProcessSmartTabs = function(code) +{ + var lines = code.split('\n'); + var result = ''; + var tabSize = 4; + var tab = '\t'; + + // This function inserts specified amount of spaces in the string + // where a tab is while removing that given tab. + function InsertSpaces(line, pos, count) + { + var left = line.substr(0, pos); + var right = line.substr(pos + 1, line.length); // pos + 1 will get rid of the tab + var spaces = ''; + + for(var i = 0; i < count; i++) + spaces += ' '; + + return left + spaces + right; + } + + // This function process one line for 'smart tabs' + function ProcessLine(line, tabSize) + { + if(line.indexOf(tab) == -1) + return line; + + var pos = 0; + + while((pos = line.indexOf(tab)) != -1) + { + // This is pretty much all there is to the 'smart tabs' logic. + // Based on the position within the line and size of a tab, + // calculate the amount of spaces we need to insert. + var spaces = tabSize - pos % tabSize; + + line = InsertSpaces(line, pos, spaces); + } + + return line; + } + + // Go through all the lines and do the 'smart tabs' magic. + for(var i = 0; i < lines.length; i++) + result += ProcessLine(lines[i], tabSize) + '\n'; + + return result; +} + +dp.sh.Highlighter.prototype.SwitchToList = function() +{ + // thanks to Lachlan Donald from SitePoint.com for this
    tag fix. + var html = this.div.innerHTML.replace(/<(br)\/?>/gi, '\n'); + var lines = html.split('\n'); + + if(this.addControls == true) + this.bar.appendChild(dp.sh.Toolbar.Create(this)); + + // add columns ruler + if(this.showColumns) + { + var div = this.createElement('div'); + var columns = this.createElement('div'); + var showEvery = 10; + var i = 1; + + while(i <= 150) + { + if(i % showEvery == 0) + { + div.innerHTML += i; + i += (i + '').length; + } + else + { + div.innerHTML += '·'; + i++; + } + } + + columns.className = 'columns'; + columns.appendChild(div); + this.bar.appendChild(columns); + } + + for(var i = 0, lineIndex = this.firstLine; i < lines.length - 1; i++, lineIndex++) + { + var li = this.createElement('li'); + var span = this.createElement('span'); + + // uses .line1 and .line2 css styles for alternating lines + li.className = (i % 2 == 0) ? 'alt' : ''; + span.innerHTML = lines[i] + ' '; + + li.appendChild(span); + this.ol.appendChild(li); + } + + this.div.innerHTML = ''; +} + +dp.sh.Highlighter.prototype.Highlight = function(code) +{ + function Trim(str) + { + return str.replace(/^\s*(.*?)[\s\n]*$/g, '$1'); + } + + function Chop(str) + { + return str.replace(/\n*$/, '').replace(/^\n*/, ''); + } + + function Unindent(str) + { + var lines = str.split('\n'); + var indents = new Array(); + var regex = new RegExp('^\\s*', 'g'); + var min = 1000; + + // go through every line and check for common number of indents + for(var i = 0; i < lines.length && min > 0; i++) + { + if(Trim(lines[i]).length == 0) + continue; + + var matches = regex.exec(lines[i]); + + if(matches != null && matches.length > 0) + min = Math.min(matches[0].length, min); + } + + // trim minimum common number of white space from the begining of every line + if(min > 0) + for(var i = 0; i < lines.length; i++) + lines[i] = lines[i].substr(min); + + return lines.join('\n'); + } + + // This function returns a portions of the string from pos1 to pos2 inclusive + function Copy(string, pos1, pos2) + { + return string.substr(pos1, pos2 - pos1); + } + + var pos = 0; + + this.originalCode = code; + this.code = Chop(Unindent(code)); + this.div = this.createElement('div'); + this.bar = this.createElement('div'); + this.ol = this.createElement('ol'); + this.matches = new Array(); + + this.div.className = 'dp-highlighter'; + this.div.highlighter = this; + + this.bar.className = 'bar'; + + // set the first line + this.ol.start = this.firstLine; + + if(this.CssClass != null) + this.ol.className = this.CssClass; + + if(this.collapse) + this.div.className += ' collapsed'; + + if(this.noGutter) + this.div.className += ' nogutter'; + + // replace tabs with spaces + if(this.tabsToSpaces == true) + this.code = this.ProcessSmartTabs(this.code); + + this.ProcessRegexList(); + + // if no matches found, add entire code as plain text + if(this.matches.length == 0) + { + this.AddBit(this.code, null); + this.SwitchToList(); + this.div.appendChild(this.ol); + return; + } + + // sort the matches + this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback); + + // The following loop checks to see if any of the matches are inside + // of other matches. This process would get rid of highligted strings + // inside comments, keywords inside strings and so on. + for(var i = 0; i < this.matches.length; i++) + if(this.IsInside(this.matches[i])) + this.matches[i] = null; + + // Finally, go through the final list of matches and pull the all + // together adding everything in between that isn't a match. + for(var i = 0; i < this.matches.length; i++) + { + var match = this.matches[i]; + + if(match == null || match.length == 0) + continue; + + this.AddBit(Copy(this.code, pos, match.index), null); + this.AddBit(match.value, match.css); + + pos = match.index + match.length; + } + + this.AddBit(this.code.substr(pos), null); + + this.SwitchToList(); + this.div.appendChild(this.bar); + this.div.appendChild(this.ol); +} + +dp.sh.Highlighter.prototype.GetKeywords = function(str) +{ + return '\\b' + str.replace(/ /g, '\\b|\\b') + '\\b'; +} + +// highlightes all elements identified by name and gets source code from specified property +dp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */, collapseAll /* optional */, firstLine /* optional */, showColumns /* optional */) +{ + function FindValue() + { + var a = arguments; + + for(var i = 0; i < a.length; i++) + { + if(a[i] == null) + continue; + + if(typeof(a[i]) == 'string' && a[i] != '') + return a[i] + ''; + + if(typeof(a[i]) == 'object' && a[i].value != '') + return a[i].value + ''; + } + + return null; + } + + function IsOptionSet(value, list) + { + for(var i = 0; i < list.length; i++) + if(list[i] == value) + return true; + + return false; + } + + function GetOptionValue(name, list, defaultValue) + { + var regex = new RegExp('^' + name + '\\[(\\w+)\\]$', 'gi'); + var matches = null; + + for(var i = 0; i < list.length; i++) + if((matches = regex.exec(list[i])) != null) + return matches[1]; + + return defaultValue; + } + + var elements = document.getElementsByName(name); + var highlighter = null; + var registered = new Object(); + var propertyName = 'value'; + + // if no code blocks found, leave + if(elements == null) + return; + + // register all brushes + for(var brush in dp.sh.Brushes) + { + var aliases = dp.sh.Brushes[brush].Aliases; + + if(aliases == null) + continue; + + for(var i = 0; i < aliases.length; i++) + registered[aliases[i]] = brush; + } + + for(var i = 0; i < elements.length; i++) + { + var element = elements[i]; + var options = FindValue( + element.attributes['class'], element.className, + element.attributes['language'], element.language + ); + var language = ''; + + if(options == null) + continue; + + options = options.split(':'); + + language = options[0].toLowerCase(); + + if(registered[language] == null) + continue; + + // instantiate a brush + highlighter = new dp.sh.Brushes[registered[language]](); + + // hide the original element + element.style.display = 'none'; + + highlighter.noGutter = (showGutter == null) ? IsOptionSet('nogutter', options) : !showGutter; + highlighter.addControls = (showControls == null) ? !IsOptionSet('nocontrols', options) : showControls; + highlighter.collapse = (collapseAll == null) ? IsOptionSet('collapse', options) : collapseAll; + highlighter.showColumns = (showColumns == null) ? IsOptionSet('showcolumns', options) : showColumns; + + // first line idea comes from Andrew Collington, thanks! + highlighter.firstLine = (firstLine == null) ? parseInt(GetOptionValue('firstline', options, 1)) : firstLine; + + highlighter.Highlight(element[propertyName]); + + element.parentNode.insertBefore(highlighter.div, element); + } +} diff --git a/usr/local/www/crash_reporter.php b/usr/local/www/crash_reporter.php new file mode 100644 index 000000000..1b3d40bc9 --- /dev/null +++ b/usr/local/www/crash_reporter.php @@ -0,0 +1,152 @@ +" . gettext("Unfortunately we have detected a programming bug.") . "

    "; + echo "

    " . gettext("Would you like to submit the programming debug logs to the pfSense developers for inspection?") . "

    "; + echo "

    " . gettext("Please double check the contents to ensure you are comfortable sending this information before clicking Yes.") . "

    "; + echo "

    " . gettext("Contents of crash reports") . ":
    "; + echo "

    "; + echo "

    " . gettext(" - Submit this to the developers for inspection") . "

    "; + echo "

    " . gettext(" - Just delete the crash report and take me back to the Dashboard") . "

    "; + echo ""; +} + +$pgtitle = array(gettext("Diagnostics"),gettext("Crash reporter")); +include('head.inc'); + +$crash_report_header = "Crash report begins. Anonymous machine information:\n\n"; +$crash_report_header .= php_uname("m") . "\n"; +$crash_report_header .= php_uname("r") . "\n"; +$crash_report_header .= php_uname("v") . "\n"; +$crash_report_header .= "\nCrash report details:\n"; + +exec("/usr/bin/grep -vi warning /tmp/PHP_errors.log", $php_errors); + +?> + + + + + +
    + +"; + echo gettext("Uploading..."); + ob_flush(); + flush(); + if(is_array($files_to_upload)) { + $resp = upload_crash_report($files_to_upload); + array_map('unlink', glob("/var/crash/*")); + // Erase the contents of the PHP error log + fclose(fopen("/tmp/PHP_errors.log", 'w')); + echo "
    "; + print_r($resp); + echo "

    " . gettext("Continue") . "" . gettext(" and delete crash report files from local disk.") . "

    "; + } else { + echo "Could not find any crash files."; + } + } else if(gettext($_POST['Submit']) == "No") { + array_map('unlink', glob("/var/crash/*")); + // Erase the contents of the PHP error log + fclose(fopen("/tmp/PHP_errors.log", 'w')); + header("Location: /"); + exit; + } else { + $crash_files = glob("/var/crash/*"); + $crash_reports = $crash_report_header; + if (count($php_errors) > 0) { + $crash_reports .= "\nPHP Errors:\n"; + $crash_reports .= implode("\n", $php_errors) . "\n\n"; + } + if(is_array($crash_files)) { + foreach($crash_files as $cf) { + if(filesize($cf) < FILE_SIZE) { + $crash_reports .= "\nFilename: {$cf}\n"; + $crash_reports .= file_get_contents($cf); + } + } + } else { + echo "Could not locate any crash data."; + } + output_crash_reporter_html($crash_reports); + } +?> + + + + + diff --git a/usr/local/www/csrf/csrf-magic.js b/usr/local/www/csrf/csrf-magic.js new file mode 100644 index 000000000..d358b0f06 --- /dev/null +++ b/usr/local/www/csrf/csrf-magic.js @@ -0,0 +1,186 @@ +/** + * @file + * + * Rewrites XMLHttpRequest to automatically send CSRF token with it. In theory + * plays nice with other JavaScript libraries, needs testing though. + */ + +// Here are the basic overloaded method definitions +// The wrapper must be set BEFORE onreadystatechange is written to, since +// a bug in ActiveXObject prevents us from properly testing for it. +CsrfMagic = function(real) { + // try to make it ourselves, if you didn't pass it + if (!real) try { real = new XMLHttpRequest; } catch (e) {;} + if (!real) try { real = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) {;} + if (!real) try { real = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) {;} + if (!real) try { real = new ActiveXObject('Msxml2.XMLHTTP.4.0'); } catch (e) {;} + this.csrf = real; + // properties + var csrfMagic = this; + real.onreadystatechange = function() { + csrfMagic._updateProps(); + return csrfMagic.onreadystatechange ? csrfMagic.onreadystatechange() : null; + }; + csrfMagic._updateProps(); +} + +CsrfMagic.prototype = { + + open: function(method, url, async, username, password) { + if (method == 'POST') this.csrf_isPost = true; + // deal with Opera bug, thanks jQuery + if (username) return this.csrf_open(method, url, async, username, password); + else return this.csrf_open(method, url, async); + }, + csrf_open: function(method, url, async, username, password) { + if (username) return this.csrf.open(method, url, async, username, password); + else return this.csrf.open(method, url, async); + }, + + send: function(data) { + if (!this.csrf_isPost) return this.csrf_send(data); + prepend = csrfMagicName + '=' + csrfMagicToken + '&'; + if (this.csrf_purportedLength === undefined) { + this.csrf_setRequestHeader("Content-length", this.csrf_purportedLength + prepend.length); + delete this.csrf_purportedLength; + } + delete this.csrf_isPost; + return this.csrf_send(prepend + data); + }, + csrf_send: function(data) { + return this.csrf.send(data); + }, + + setRequestHeader: function(header, value) { + // We have to auto-set this at the end, since we don't know how long the + // nonce is when added to the data. + if (this.csrf_isPost && header == "Content-length") { + this.csrf_purportedLength = value; + return; + } + return this.csrf_setRequestHeader(header, value); + }, + csrf_setRequestHeader: function(header, value) { + return this.csrf.setRequestHeader(header, value); + }, + + abort: function() { + return this.csrf.abort(); + }, + getAllResponseHeaders: function() { + return this.csrf.getAllResponseHeaders(); + }, + getResponseHeader: function(header) { + return this.csrf.getResponseHeader(header); + } // , +} + +// proprietary +CsrfMagic.prototype._updateProps = function() { + this.readyState = this.csrf.readyState; + if (this.readyState == 4) { + this.responseText = this.csrf.responseText; + this.responseXML = this.csrf.responseXML; + this.status = this.csrf.status; + this.statusText = this.csrf.statusText; + } +} +CsrfMagic.process = function(base) { + var prepend = csrfMagicName + '=' + csrfMagicToken; + if (base) return prepend + '&' + base; + return prepend; +} +// callback function for when everything on the page has loaded +CsrfMagic.end = function() { + // This rewrites forms AGAIN, so in case buffering didn't work this + // certainly will. + forms = document.getElementsByTagName('form'); + for (var i = 0; i < forms.length; i++) { + form = forms[i]; + if (form.method.toUpperCase() !== 'POST') continue; + if (form.elements[csrfMagicName]) continue; + var input = document.createElement('input'); + input.setAttribute('name', csrfMagicName); + input.setAttribute('value', csrfMagicToken); + input.setAttribute('type', 'hidden'); + form.appendChild(input); + } +} + +// Sets things up for Mozilla/Opera/nice browsers +// We very specifically match against Internet Explorer, since they haven't +// implemented prototypes correctly yet. +if (window.XMLHttpRequest && window.XMLHttpRequest.prototype && '\v' != 'v') { + var x = XMLHttpRequest.prototype; + var c = CsrfMagic.prototype; + + // Save the original functions + x.csrf_open = x.open; + x.csrf_send = x.send; + x.csrf_setRequestHeader = x.setRequestHeader; + + // Notice that CsrfMagic is itself an instantiatable object, but only + // open, send and setRequestHeader are necessary as decorators. + x.open = c.open; + x.send = c.send; + x.setRequestHeader = c.setRequestHeader; +} else { + // The only way we can do this is by modifying a library you have been + // using. We support YUI, script.aculo.us, prototype, MooTools, + // jQuery, Ext and Dojo. + if (window.jQuery) { + // jQuery didn't implement a new XMLHttpRequest function, so we have + // to do this the hard way. + jQuery.csrf_ajax = jQuery.ajax; + jQuery.ajax = function( s ) { + if (s.type && s.type.toUpperCase() == 'POST') { + s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s)); + if ( s.data && s.processData && typeof s.data != "string" ) { + s.data = jQuery.param(s.data); + } + s.data = CsrfMagic.process(s.data); + } + return jQuery.csrf_ajax( s ); + } + } + if (window.Prototype) { + // This works for script.aculo.us too + Ajax.csrf_getTransport = Ajax.getTransport; + Ajax.getTransport = function() { + return new CsrfMagic(Ajax.csrf_getTransport()); + } + } + if (window.MooTools) { + Browser.csrf_Request = Browser.Request; + Browser.Request = function () { + return new CsrfMagic(Browser.csrf_Request()); + } + } + if (window.YAHOO) { + // old YUI API + YAHOO.util.Connect.csrf_createXhrObject = YAHOO.util.Connect.createXhrObject; + YAHOO.util.Connect.createXhrObject = function (transaction) { + obj = YAHOO.util.Connect.csrf_createXhrObject(transaction); + obj.conn = new CsrfMagic(obj.conn); + return obj; + } + } + if (window.Ext) { + // Ext can use other js libraries as loaders, so it has to come last + // Ext's implementation is pretty identical to Yahoo's, but we duplicate + // it for comprehensiveness's sake. + Ext.lib.Ajax.csrf_createXhrObject = Ext.lib.Ajax.createXhrObject; + Ext.lib.Ajax.createXhrObject = function (transaction) { + obj = Ext.lib.Ajax.csrf_createXhrObject(transaction); + obj.conn = new CsrfMagic(obj.conn); + return obj; + } + } + if (window.dojo) { + // NOTE: this doesn't work with latest dojo + dojo.csrf__xhrObj = dojo._xhrObj; + dojo._xhrObj = function () { + return new CsrfMagic(dojo.csrf__xhrObj()); + } + } +} diff --git a/usr/local/www/csrf/csrf-magic.php b/usr/local/www/csrf/csrf-magic.php new file mode 100644 index 000000000..58f4eba5e --- /dev/null +++ b/usr/local/www/csrf/csrf-magic.php @@ -0,0 +1,403 @@ + + */ +$GLOBALS['csrf']['input-name'] = '__csrf_magic'; + +/** + * Set this to false if your site must work inside of frame/iframe elements, + * but do so at your own risk: this configuration protects you against CSS + * overlay attacks that defeat tokens. + */ +$GLOBALS['csrf']['frame-breaker'] = true; + +/** + * Whether or not CSRF Magic should be allowed to start a new session in order + * to determine the key. + */ +$GLOBALS['csrf']['auto-session'] = true; + +/** + * Whether or not csrf-magic should produce XHTML style tags. + */ +$GLOBALS['csrf']['xhtml'] = true; + +// FUNCTIONS: + +// Don't edit this! +$GLOBALS['csrf']['version'] = '1.0.4'; + +/** + * Rewrites on the fly to add CSRF tokens to them. This can also + * inject our JavaScript library. + */ +function csrf_ob_handler($buffer, $flags) { + // Even though the user told us to rewrite, we should do a quick heuristic + // to check if the page is *actually* HTML. We don't begin rewriting until + // we hit the first "; + $buffer = preg_replace('#(]*method\s*=\s*["\']post["\'][^>]*>)#i', '$1' . $input, $buffer); + if ($GLOBALS['csrf']['frame-breaker']) { + $buffer = str_ireplace('', '', $buffer); + } + if ($js = $GLOBALS['csrf']['rewrite-js']) { + $buffer = str_ireplace( + '', + ''. + '', + $buffer + ); + $script = ''; + $buffer = str_ireplace('', $script . '', $buffer, $count); + if (!$count) { + $buffer .= $script; + } + } + return $buffer; +} + +/** + * Checks if this is a post request, and if it is, checks if the nonce is valid. + * @param bool $fatal Whether or not to fatally error out if there is a problem. + * @return True if check passes or is not necessary, false if failure. + */ +function csrf_check($fatal = true) { + if ($_SERVER['REQUEST_METHOD'] !== 'POST') return true; + csrf_start(); + $name = $GLOBALS['csrf']['input-name']; + $ok = false; + $tokens = ''; + do { + if (!isset($_POST[$name])) break; + // we don't regenerate a token and check it because some token creation + // schemes are volatile. + $tokens = $_POST[$name]; + if (!csrf_check_tokens($tokens)) break; + $ok = true; + } while (false); + if ($fatal && !$ok) { + $callback = $GLOBALS['csrf']['callback']; + if (trim($tokens, 'A..Za..z0..9:;,') !== '') $tokens = 'hidden'; + $callback($tokens); + exit; + } + return $ok; +} + +/** + * Retrieves a valid token(s) for a particular context. Tokens are separated + * by semicolons. + */ +function csrf_get_tokens() { + $has_cookies = !empty($_COOKIE); + + // $ip implements a composite key, which is sent if the user hasn't sent + // any cookies. It may or may not be used, depending on whether or not + // the cookies "stick" + $secret = csrf_get_secret(); + if (!$has_cookies && $secret) { + // :TODO: Harden this against proxy-spoofing attacks + $ip = ';ip:' . csrf_hash($_SERVER['IP_ADDRESS']); + } else { + $ip = ''; + } + csrf_start(); + + // These are "strong" algorithms that don't require per se a secret + if (session_id()) return 'sid:' . csrf_hash(session_id()) . $ip; + if ($GLOBALS['csrf']['cookie']) { + $val = csrf_generate_secret(); + setcookie($GLOBALS['csrf']['cookie'], $val); + return 'cookie:' . csrf_hash($val) . $ip; + } + if ($GLOBALS['csrf']['key']) return 'key:' . csrf_hash($GLOBALS['csrf']['key']) . $ip; + // These further algorithms require a server-side secret + if (!$secret) return 'invalid'; + if ($GLOBALS['csrf']['user'] !== false) { + return 'user:' . csrf_hash($GLOBALS['csrf']['user']); + } + if ($GLOBALS['csrf']['allow-ip']) { + return ltrim($ip, ';'); + } + return 'invalid'; +} + +function csrf_flattenpost($data) { + $ret = array(); + foreach($data as $n => $v) { + $ret = array_merge($ret, csrf_flattenpost2(1, $n, $v)); + } + return $ret; +} +function csrf_flattenpost2($level, $key, $data) { + if(!is_array($data)) return array($key => $data); + $ret = array(); + foreach($data as $n => $v) { + $nk = $level >= 1 ? $key."[$n]" : "[$n]"; + $ret = array_merge($ret, csrf_flattenpost2($level+1, $nk, $v)); + } + return $ret; +} + +/** + * @param $tokens is safe for HTML consumption + */ +function csrf_callback($tokens) { + // (yes, $tokens is safe to echo without escaping) + header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden'); + $data = ''; + foreach (csrf_flattenpost($_POST) as $key => $value) { + if ($key == $GLOBALS['csrf']['input-name']) continue; + $data .= ''; + } + echo "CSRF check failed + +

    CSRF check failed. Your form session may have expired, or you may not have + cookies enabled.

    + $data +

    Debug: $tokens

    +"; +} + +/** + * Checks if a composite token is valid. Outward facing code should use this + * instead of csrf_check_token() + */ +function csrf_check_tokens($tokens) { + if (is_string($tokens)) $tokens = explode(';', $tokens); + foreach ($tokens as $token) { + if (csrf_check_token($token)) return true; + } + return false; +} + +/** + * Checks if a token is valid. + */ +function csrf_check_token($token) { + if (strpos($token, ':') === false) return false; + list($type, $value) = explode(':', $token, 2); + if (strpos($value, ',') === false) return false; + list($x, $time) = explode(',', $token, 2); + if ($GLOBALS['csrf']['expires']) { + if (time() > $time + $GLOBALS['csrf']['expires']) return false; + } + switch ($type) { + case 'sid': + return $value === csrf_hash(session_id(), $time); + case 'cookie': + $n = $GLOBALS['csrf']['cookie']; + if (!$n) return false; + if (!isset($_COOKIE[$n])) return false; + return $value === csrf_hash($_COOKIE[$n], $time); + case 'key': + if (!$GLOBALS['csrf']['key']) return false; + return $value === csrf_hash($GLOBALS['csrf']['key'], $time); + // We could disable these 'weaker' checks if 'key' was set, but + // that doesn't make me feel good then about the cookie-based + // implementation. + case 'user': + if (!csrf_get_secret()) return false; + if ($GLOBALS['csrf']['user'] === false) return false; + return $value === csrf_hash($GLOBALS['csrf']['user'], $time); + case 'ip': + if (!csrf_get_secret()) return false; + // do not allow IP-based checks if the username is set, or if + // the browser sent cookies + if ($GLOBALS['csrf']['user'] !== false) return false; + if (!empty($_COOKIE)) return false; + if (!$GLOBALS['csrf']['allow-ip']) return false; + return $value === csrf_hash($_SERVER['IP_ADDRESS'], $time); + } + return false; +} + +/** + * Sets a configuration value. + */ +function csrf_conf($key, $val) { + if (!isset($GLOBALS['csrf'][$key])) { + trigger_error('No such configuration ' . $key, E_USER_WARNING); + return; + } + $GLOBALS['csrf'][$key] = $val; +} + +/** + * Starts a session if we're allowed to. + */ +function csrf_start() { + if ($GLOBALS['csrf']['auto-session'] && !session_id()) { + session_start(); + } +} + +/** + * Retrieves the secret, and generates one if necessary. + */ +function csrf_get_secret() { + if ($GLOBALS['csrf']['secret']) return $GLOBALS['csrf']['secret']; + $dir = dirname(__FILE__); + $file = $dir . '/csrf-secret.php'; + $secret = ''; + if (file_exists($file)) { + include $file; + return $secret; + } + if (is_writable($dir)) { + $secret = csrf_generate_secret(); + $fh = fopen($file, 'w'); + fwrite($fh, ' + + originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2005 Paul Taylor (paultaylor@winndixie.com) and Manuel Kasper . + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /bin/cat /usr/sbin/arp + pfSense_MODULE: arp +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-arptable +##|*NAME=Diagnostics: ARP Table page +##|*DESCR=Allow access to the 'Diagnostics: ARP Table' page. +##|*MATCH=diag_arp.php* +##|-PRIV + +@ini_set('zlib.output_compression', 0); +@ini_set('implicit_flush', 1); + +require("guiconfig.inc"); + +function leasecmp($a, $b) { + return strcmp($a[$_GET['order']], $b[$_GET['order']]); +} + +function adjust_gmt($dt) { + $ts = strtotime($dt . " GMT"); + return strftime("%Y/%m/%d %H:%M:%S", $ts); +} + +function remove_duplicate($array, $field) { + foreach ($array as $sub) + $cmp[] = $sub[$field]; + $unique = array_unique($cmp); + foreach ($unique as $k => $rien) + $new[] = $array[$k]; + return $new; +} + +// Define path to AWK +$awk = "/usr/bin/awk"; + +// Read in leases file +$leasesfile = "{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases"; + +/* this pattern sticks comments into a single array item */ +$cleanpattern = "'{ gsub(\"#.*\", \"\");} { gsub(\";\", \"\"); print;}'"; + +/* We then split the leases file by } */ +$splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i; printf \"}\\n\";}'"; + +/* stuff the leases file in a proper format into a array by line */ +exec("cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern}", $leases_content); +$leases_count = count($leases_content); + +$pools = array(); +$leases = array(); +$i = 0; +$l = 0; +$p = 0; +// Put everything together again +while($i < $leases_count) { + /* split the line by space */ + $data = explode(" ", $leases_content[$i]); + /* walk the fields */ + $f = 0; + $fcount = count($data); + /* with less then 20 fields there is nothing useful */ + if($fcount < 20) { + $i++; + continue; + } + while($f < $fcount) { + switch($data[$f]) { + case "failover": + $pools[$p]['name'] = $data[$f+2]; + $pools[$p]['mystate'] = $data[$f+7]; + $pools[$p]['peerstate'] = $data[$f+14]; + $pools[$p]['mydate'] = $data[$f+10]; + $pools[$p]['mydate'] .= " " . $data[$f+11]; + $pools[$p]['peerdate'] = $data[$f+17]; + $pools[$p]['peerdate'] .= " " . $data[$f+18]; + $p++; + $i++; + continue 3; + case "lease": + $leases[$l]['ip'] = $data[$f+1]; + $leases[$l]['type'] = "dynamic"; + $f = $f+2; + break; + case "starts": + $leases[$l]['start'] = $data[$f+2]; + $leases[$l]['start'] .= " " . $data[$f+3]; + $f = $f+3; + break; + case "ends": + $leases[$l]['end'] = $data[$f+2]; + $leases[$l]['end'] .= " " . $data[$f+3]; + $f = $f+3; + break; + case "tstp": + $f = $f+3; + break; + case "tsfp": + $f = $f+3; + break; + case "atsfp": + $f = $f+3; + break; + case "cltt": + $f = $f+3; + break; + case "binding": + switch($data[$f+2]) { + case "active": + $leases[$l]['act'] = "active"; + break; + case "free": + $leases[$l]['act'] = "expired"; + $leases[$l]['online'] = "offline"; + break; + case "backup": + $leases[$l]['act'] = "reserved"; + $leases[$l]['online'] = "offline"; + break; + } + $f = $f+1; + break; + case "next": + /* skip the next binding statement */ + $f = $f+3; + break; + case "rewind": + /* skip the rewind binding statement */ + $f = $f+3; + break; + case "hardware": + $leases[$l]['mac'] = $data[$f+2]; + /* check if it's online and the lease is active */ + if($leases[$l]['act'] == "active") { + $online = exec("/usr/sbin/arp -an |/usr/bin/awk '/{$leases[$l]['ip']}/ {print}'|wc -l"); + if ($online == 1) { + $leases[$l]['online'] = 'online'; + } else { + $leases[$l]['online'] = 'offline'; + } + } + $f = $f+2; + break; + case "client-hostname": + if($data[$f+1] <> "") { + $leases[$l]['hostname'] = preg_replace('/"/','',$data[$f+1]); + } else { + $hostname = gethostbyaddr($leases[$l]['ip']); + if($hostname <> "") { + $leases[$l]['hostname'] = $hostname; + } + } + $f = $f+1; + break; + case "uid": + $f = $f+1; + break; + } + $f++; + } + $l++; + $i++; +} + +/* remove duplicate items by mac address */ +if(count($leases) > 0) { + $leases = remove_duplicate($leases,"ip"); +} + +if(count($pools) > 0) { + $pools = remove_duplicate($pools,"name"); + asort($pools); +} + +// Put this in an easy to use form +$dhcpmac = array(); +$dhcpip = array(); + +foreach ($leases as $value) { + $dhcpmac[$value['mac']] = $value['hostname']; + $dhcpip[$value['ip']] = $value['hostname']; +} + +exec("/usr/sbin/arp -an",$rawdata); + +$i = 0; + +/* if list */ +$ifdescrs = get_configured_interface_with_descr(); + +foreach ($ifdescrs as $key => $interface) { + $thisif = convert_friendly_interface_to_real_interface_name($key); + if (!empty($thisif)) + $hwif[$thisif] = $interface; +} + +$data = array(); +foreach ($rawdata as $line) { + $elements = explode(' ',$line); + + if ($elements[3] != "(incomplete)") { + $arpent = array(); + $arpent['ip'] = trim(str_replace(array('(',')'),'',$elements[1])); + $arpent['mac'] = trim($elements[3]); + $arpent['interface'] = trim($elements[5]); + $data[] = $arpent; + } +} + +function _getHostName($mac,$ip) { + global $dhcpmac, $dhcpip; + + if ($dhcpmac[$mac]) + return $dhcpmac[$mac]; + else if ($dhcpip[$ip]) + return $dhcpip[$ip]; + else{ + exec("host -W 1 " . escapeshellarg($ip), $output); + if (preg_match('/.*pointer ([A-Za-z0-9.-]+)\..*/',$output[0],$matches)) { + if ($matches[1] <> $ip) + return $matches[1]; + } + } + return ""; +} + +$pgtitle = array(gettext("Diagnostics"),gettext("ARP Table")); +include("head.inc"); + +?> + + + + + +
    + loader +

     

    +
    + + + + + + + + + +
    + + + + + + + + + + + + + + + + +
    + {$mac_man[$mac_hi]}"; } + ?> + + +
    +

    .
    + + + + + + diff --git a/usr/local/www/diag_authentication.php b/usr/local/www/diag_authentication.php new file mode 100644 index 000000000..5fd0abdc6 --- /dev/null +++ b/usr/local/www/diag_authentication.php @@ -0,0 +1,132 @@ +" . gettext("This user is a member of these groups") . ":
    "; + foreach ($groups as $group) + $savemsg .= "{$group} "; + } else { + $input_errors[] = gettext("Authentication failed."); + } + } +} +$pgtitle = array(gettext("Diagnostics"),gettext("Authentication")); +$shortcut_section = "authentication"; +include("head.inc"); + +?> + + + + + + + + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
      + " /> +
    +
    +
    +
    + + + + diff --git a/usr/local/www/diag_backup.php b/usr/local/www/diag_backup.php new file mode 100644 index 000000000..1b67fee8e --- /dev/null +++ b/usr/local/www/diag_backup.php @@ -0,0 +1,793 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /sbin/shutdown + pfSense_MODULE: backup +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-backup/restore +##|*NAME=Diagnostics: Backup/restore page +##|*DESCR=Allow access to the 'Diagnostics: Backup/restore' page. +##|*MATCH=diag_backup.php* +##|-PRIV + +/* Allow additional execution time 0 = no limit. */ +ini_set('max_execution_time', '0'); +ini_set('max_input_time', '0'); + +/* omit no-cache headers because it confuses IE with file downloads */ +$omit_nocacheheaders = true; +$nocsrf = true; +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +$rrddbpath = "/var/db/rrd"; +$rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; + +function rrd_data_xml() { + global $rrddbpath; + global $rrdtool; + + $result = "\t\n"; + $rrd_files = glob("{$rrddbpath}/*.rrd"); + $xml_files = array(); + foreach ($rrd_files as $rrd_file) { + $basename = basename($rrd_file); + $xml_file = preg_replace('/\.rrd$/', ".xml", $rrd_file); + exec("$rrdtool dump '{$rrd_file}' '{$xml_file}'"); + $xml_data = file_get_contents($xml_file); + unlink($xml_file); + if ($xml_data !== false) { + $result .= "\t\t\n"; + $result .= "\t\t\t{$basename}\n"; + $result .= "\t\t\t" . base64_encode(gzdeflate($xml_data)) . "\n"; + $result .= "\t\t\n"; + } + } + $result .= "\t\n"; + return $result; +} + +function restore_rrddata() { + global $config, $g, $rrdtool, $input_errors; + foreach($config['rrddata']['rrddatafile'] as $rrd) { + if ($rrd['xmldata']) { + $rrd_file = "{$g['vardb_path']}/rrd/{$rrd['filename']}"; + $xml_file = preg_replace('/\.rrd$/', ".xml", $rrd_file); + if (file_put_contents($xml_file, gzinflate(base64_decode($rrd['xmldata']))) === false) { + log_error("Cannot write $xml_file"); + continue; + } + $output = array(); + $status = null; + exec("$rrdtool restore -f '{$xml_file}' '{$rrd_file}'", $output, $status); + if ($status) { + log_error("rrdtool restore -f '{$xml_file}' '{$rrd_file}' failed returning {$status}."); + continue; + } + unlink($xml_file); + } + else if ($rrd['data']) { + $rrd_file = "{$g['vardb_path']}/rrd/{$rrd['filename']}"; + $rrd_fd = fopen($rrd_file, "w"); + if (!$rrd_fd) { + log_error("Cannot write $rrd_file"); + continue; + } + $data = base64_decode($rrd['data']); + /* Try to decompress the data. */ + $dcomp = @gzinflate($data); + if ($dcomp) { + /* If the decompression worked, write the decompressed data */ + if (fwrite($rrd_fd, $dcomp) === false) { + log_error("fwrite $rrd_file failed"); + continue; + } + } else { + /* If the decompression failed, it wasn't compressed, so write raw data */ + if (fwrite($rrd_fd, $data) === false) { + log_error("fwrite $rrd_file failed"); + continue; + } + } + if (fclose($rrd_fd) === false) { + log_error("fclose $rrd_file failed"); + continue; + } + } + } +} + +function add_base_packages_menu_items() { + global $g, $config; + $base_packages = explode(",", $g['base_packages']); + $modified_config = false; + foreach($base_packages as $bp) { + $basepkg_path = "/usr/local/pkg/{$bp}"; + $tmpinfo = pathinfo($basepkg_path, PATHINFO_EXTENSION); + if($tmpinfo['extension'] == "xml" && file_exists($basepkg_path)) { + $pkg_config = parse_xml_config_pkg($basepkg_path, "packagegui"); + if($pkg_config['menu'] != "") { + if(is_array($pkg_config['menu'])) { + foreach($pkg_config['menu'] as $menu) { + if(is_array($config['installedpackages']['menu'])) + foreach($config['installedpackages']['menu'] as $amenu) + if($amenu['name'] == $menu['name']) + continue; + $config['installedpackages']['menu'][] = $menu; + $modified_config = true; + } + } + $static_output .= "done.\n"; + update_output_window($static_output); + } + } + } + if($modified_config) { + write_config(gettext("Restored base_package menus after configuration restore.")); + $config = parse_config(true); + } +} + +function remove_bad_chars($string) { + return preg_replace('/[^a-z_0-9]/i','',$string); +} + +function check_and_returnif_section_exists($section) { + global $config; + if(is_array($config[$section])) + return true; + return false; +} + +function spit_out_select_items($name, $showall) { + global $config; + + $areas = array("aliases" => gettext("Aliases"), + "captiveportal" => gettext("Captive Portal"), + "voucher" => gettext("Captive Portal Vouchers"), + "dnsmasq" => gettext("DNS Forwarder"), + "dhcpd" => gettext("DHCP Server"), + "dhcpdv6" => gettext("DHCPv6 Server"), + "filter" => gettext("Firewall Rules"), + "interfaces" => gettext("Interfaces"), + "ipsec" => gettext("IPSEC"), + "nat" => gettext("NAT"), + "openvpn" => gettext("OpenVPN"), + "installedpackages" => gettext("Package Manager"), + "pptpd" => gettext("PPTP Server"), + "rrddata" => gettext("RRD Data"), + "cron" => gettext("Scheduled Tasks"), + "syslog" => gettext("Syslog"), + "system" => gettext("System"), + "staticroutes" => gettext("Static routes"), + "sysctl" => gettext("System tunables"), + "snmpd" => gettext("SNMP Server"), + "shaper" => gettext("Traffic Shaper"), + "vlans" => gettext("VLANS"), + "wol" => gettext("Wake on LAN") + ); + + $select = "\n"; + + if ($name === "backuparea") { + $select .= << + // + +END_SCRIPT_BLOCK; + } + + echo $select; + +} + +if ($_POST['apply']) { + ob_flush(); + flush(); + conf_mount_rw(); + clear_subsystem_dirty("restore"); + conf_mount_ro(); + exit; +} + +if ($_POST) { + unset($input_errors); + if (stristr($_POST['Submit'], gettext("Restore configuration"))) + $mode = "restore"; + else if (stristr($_POST['Submit'], gettext("Reinstall"))) + $mode = "reinstallpackages"; + else if (stristr($_POST['Submit'], gettext("Clear Package Lock"))) + $mode = "clearpackagelock"; + else if (stristr($_POST['Submit'], gettext("Download"))) + $mode = "download"; + else if (stristr($_POST['Submit'], gettext("Restore version"))) + $mode = "restore_ver"; + + if ($_POST["nopackages"] <> "") + $options = "nopackages"; + + if ($_POST["ver"] <> "") + $ver2restore = $_POST["ver"]; + + if ($mode) { + + if ($mode == "download") { + + if ($_POST['encrypt']) { + if(!$_POST['encrypt_password'] || !$_POST['encrypt_passconf']) + $input_errors[] = gettext("You must supply and confirm the password for encryption."); + if($_POST['encrypt_password'] != $_POST['encrypt_passconf']) + $input_errors[] = gettext("The supplied 'Password' and 'Confirm' field values must match."); + } + + if (!$input_errors) { + + //$lockbckp = lock('config'); + + $host = "{$config['system']['hostname']}.{$config['system']['domain']}"; + $name = "config-{$host}-".date("YmdHis").".xml"; + $data = ""; + + if($options == "nopackages") { + if(!$_POST['backuparea']) { + /* backup entire configuration */ + $data = file_get_contents("{$g['conf_path']}/config.xml"); + } else { + /* backup specific area of configuration */ + $data = backup_config_section($_POST['backuparea']); + $name = "{$_POST['backuparea']}-{$name}"; + } + $sfn = "{$g['tmp_path']}/config.xml.nopkg"; + file_put_contents($sfn, $data); + exec("sed '//,/<\/installedpackages>/d' {$sfn} > {$sfn}-new"); + $data = file_get_contents($sfn . "-new"); + } else { + if(!$_POST['backuparea']) { + /* backup entire configuration */ + $data = file_get_contents("{$g['conf_path']}/config.xml"); + } else if ($_POST['backuparea'] === "rrddata") { + $data = rrd_data_xml(); + $name = "{$_POST['backuparea']}-{$name}"; + } else { + /* backup specific area of configuration */ + $data = backup_config_section($_POST['backuparea']); + $name = "{$_POST['backuparea']}-{$name}"; + } + } + + //unlock($lockbckp); + + /* + * Backup RRD Data + */ + if ($_POST['backuparea'] !== "rrddata" && !$_POST['donotbackuprrd']) { + $rrd_data_xml = rrd_data_xml(); + $closing_tag = ""; + $data = str_replace($closing_tag, $rrd_data_xml . $closing_tag, $data); + } + + if ($_POST['encrypt']) { + $data = encrypt_data($data, $_POST['encrypt_password']); + tagfile_reformat($data, $data, "config.xml"); + } + + $size = strlen($data); + header("Content-Type: application/octet-stream"); + header("Content-Disposition: attachment; filename={$name}"); + header("Content-Length: $size"); + if (isset($_SERVER['HTTPS'])) { + header('Pragma: '); + header('Cache-Control: '); + } else { + header("Pragma: private"); + header("Cache-Control: private, must-revalidate"); + } + echo $data; + + exit; + } + } + + if ($mode == "restore") { + + if ($_POST['decrypt']) { + if(!$_POST['decrypt_password'] || !$_POST['decrypt_passconf']) + $input_errors[] = gettext("You must supply and confirm the password for decryption."); + if($_POST['decrypt_password'] != $_POST['decrypt_passconf']) + $input_errors[] = gettext("The supplied 'Password' and 'Confirm' field values must match."); + } + + if (!$input_errors) { + + if (is_uploaded_file($_FILES['conffile']['tmp_name'])) { + + /* read the file contents */ + $data = file_get_contents($_FILES['conffile']['tmp_name']); + if(!$data) { + log_error(sprintf(gettext("Warning, could not read file %s"), $_FILES['conffile']['tmp_name'])); + return 1; + } + + if ($_POST['decrypt']) { + if (!tagfile_deformat($data, $data, "config.xml")) { + $input_errors[] = gettext("The uploaded file does not appear to contain an encrypted pfsense configuration."); + return 1; + } + $data = decrypt_data($data, $_POST['decrypt_password']); + } + + if(stristr($data, "")) { + log_error(gettext("Upgrading m0n0wall configuration to pfsense.")); + /* m0n0wall was found in config. convert it. */ + $data = str_replace("m0n0wall", "pfsense", $data); + $m0n0wall_upgrade = true; + } + if($_POST['restorearea']) { + /* restore a specific area of the configuration */ + if(!stristr($data, "<" . $_POST['restorearea'] . ">")) { + $input_errors[] = gettext("You have selected to restore an area but we could not locate the correct xml tag."); + } else { + if (!restore_config_section($_POST['restorearea'], $data)) { + $input_errors[] = gettext("You have selected to restore an area but we could not locate the correct xml tag."); + } else { + if ($config['rrddata']) { + restore_rrddata(); + unset($config['rrddata']); + unlink_if_exists("{$g['tmp_path']}/config.cache"); + write_config(); + add_base_packages_menu_items(); + convert_config(); + conf_mount_ro(); + } + filter_configure(); + $savemsg = gettext("The configuration area has been restored. You may need to reboot the firewall."); + } + } + } else { + if(!stristr($data, "<" . $g['xml_rootobj'] . ">")) { + $input_errors[] = sprintf(gettext("You have selected to restore the full configuration but we could not locate a %s tag."), $g['xml_rootobj']); + } else { + /* restore the entire configuration */ + file_put_contents($_FILES['conffile']['tmp_name'], $data); + if (config_install($_FILES['conffile']['tmp_name']) == 0) { + /* this will be picked up by /index.php */ + conf_mount_rw(); + mark_subsystem_dirty("restore"); + touch("/conf/needs_package_sync"); + /* remove cache, we will force a config reboot */ + if(file_exists("{$g['tmp_path']}/config.cache")) + unlink("{$g['tmp_path']}/config.cache"); + $config = parse_config(true); + /* extract out rrd items, unset from $config when done */ + if($config['rrddata']) { + restore_rrddata(); + unset($config['rrddata']); + unlink_if_exists("{$g['tmp_path']}/config.cache"); + write_config(); + add_base_packages_menu_items(); + convert_config(); + conf_mount_ro(); + } + if($m0n0wall_upgrade == true) { + if($config['system']['gateway'] <> "") + $config['interfaces']['wan']['gateway'] = $config['system']['gateway']; + unset($config['shaper']); + /* optional if list */ + $ifdescrs = get_configured_interface_list(true, true); + /* remove special characters from interface descriptions */ + if(is_array($ifdescrs)) + foreach($ifdescrs as $iface) + $config['interfaces'][$iface]['descr'] = remove_bad_chars($config['interfaces'][$iface]['descr']); + /* check for interface names with an alias */ + if(is_array($ifdescrs)) { + foreach($ifdescrs as $iface) { + if(is_alias($config['interfaces'][$iface]['descr'])) { + // Firewall rules + $origname = $config['interfaces'][$iface]['descr']; + $newname = $config['interfaces'][$iface]['descr'] . "Alias"; + update_alias_names_upon_change(array('filter', 'rule'), array('source', 'address'), $newname, $origname); + update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'address'), $newname, $origname); + // NAT Rules + update_alias_names_upon_change(array('nat', 'rule'), array('source', 'address'), $newname, $origname); + update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'address'), $newname, $origname); + update_alias_names_upon_change(array('nat', 'rule'), array('target'), $newname, $origname); + // Alias in an alias + update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $newname, $origname); + } + } + } + unlink_if_exists("{$g['tmp_path']}/config.cache"); + // Reset configuration version to something low + // in order to force the config upgrade code to + // run through with all steps that are required. + $config['system']['version'] = "1.0"; + // Deal with descriptions longer than 63 characters + for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) { + if(count($config['filter']['rule'][$i]['descr']) > 63) + $config['filter']['rule'][$i]['descr'] = substr($config['filter']['rule'][$i]['descr'], 0, 63); + } + // Move interface from ipsec to enc0 + for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) { + if($config['filter']['rule'][$i]['interface'] == "ipsec") + $config['filter']['rule'][$i]['interface'] = "enc0"; + } + // Convert icmp types + // http://www.openbsd.org/cgi-bin/man.cgi?query=icmp&sektion=4&arch=i386&apropos=0&manpath=OpenBSD+Current + for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) { + if($config["filter"]["rule"][$i]['icmptype']) { + switch($config["filter"]["rule"][$i]['icmptype']) { + case "echo": + $config["filter"]["rule"][$i]['icmptype'] = "echoreq"; + break; + case "unreach": + $config["filter"]["rule"][$i]['icmptype'] = "unreach"; + break; + case "echorep": + $config["filter"]["rule"][$i]['icmptype'] = "echorep"; + break; + case "squench": + $config["filter"]["rule"][$i]['icmptype'] = "squench"; + break; + case "redir": + $config["filter"]["rule"][$i]['icmptype'] = "redir"; + break; + case "timex": + $config["filter"]["rule"][$i]['icmptype'] = "timex"; + break; + case "paramprob": + $config["filter"]["rule"][$i]['icmptype'] = "paramprob"; + break; + case "timest": + $config["filter"]["rule"][$i]['icmptype'] = "timereq"; + break; + case "timestrep": + $config["filter"]["rule"][$i]['icmptype'] = "timerep"; + break; + case "inforeq": + $config["filter"]["rule"][$i]['icmptype'] = "inforeq"; + break; + case "inforep": + $config["filter"]["rule"][$i]['icmptype'] = "inforep"; + break; + case "maskreq": + $config["filter"]["rule"][$i]['icmptype'] = "maskreq"; + break; + case "maskrep": + $config["filter"]["rule"][$i]['icmptype'] = "maskrep"; + break; + } + } + } + $config['diag']['ipv6nat'] = true; + write_config(); + add_base_packages_menu_items(); + convert_config(); + conf_mount_ro(); + $savemsg = gettext("The m0n0wall configuration has been restored and upgraded to pfSense."); + mark_subsystem_dirty("restore"); + } + if(is_array($config['captiveportal'])) { + foreach($config['captiveportal'] as $cp) { + if (isset($cp['enable'])) { + /* for some reason ipfw doesn't init correctly except on bootup sequence */ + mark_subsystem_dirty("restore"); + break; + } + } + } + setup_serial_port(); + if(is_interface_mismatch() == true) { + touch("/var/run/interface_mismatch_reboot_needed"); + clear_subsystem_dirty("restore"); + convert_config(); + header("Location: interfaces_assign.php"); + exit; + } + if (is_interface_vlan_mismatch() == true) { + touch("/var/run/interface_mismatch_reboot_needed"); + clear_subsystem_dirty("restore"); + convert_config(); + header("Location: interfaces_assign.php"); + exit; + } + } else { + $input_errors[] = gettext("The configuration could not be restored."); + } + } + } + } else { + $input_errors[] = gettext("The configuration could not be restored (file upload error)."); + } + } + } + + if ($mode == "reinstallpackages") { + + header("Location: pkg_mgr_install.php?mode=reinstallall"); + exit; + } else if ($mode == "clearpackagelock") { + clear_subsystem_dirty('packagelock'); + $savemsg = "Package Lock Cleared"; + } else if ($mode == "restore_ver") { + $input_errors[] = gettext("XXX - this feature may hose your config (do NOT backrev configs!) - billm"); + if ($ver2restore <> "") { + $conf_file = "{$g['cf_conf_path']}/bak/config-" . strtotime($ver2restore) . ".xml"; + if (config_install($conf_file) == 0) { + mark_subsystem_dirty("restore"); + } else { + $input_errors[] = gettext("The configuration could not be restored."); + } + } else { + $input_errors[] = gettext("No version selected."); + } + } + } +} + +$id = rand() . '.' . time(); + +$mth = ini_get('upload_progress_meter.store_method'); +$dir = ini_get('upload_progress_meter.file.filename_template'); + +$pgtitle = array(gettext("Diagnostics"),gettext("Backup/restore")); +include("head.inc"); + +?> + + + + + + + +
    +
    + +" . gettext("The firewall is now rebooting."));?>
    +
    + +
    + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +



    + + + + + +
    + + + +
    + + + + + + + + + +
    + + + +
    + + + +
    + + + + + + + + + +
    + + + +
    + + + +
    +

    " />

    +
     
      + +

    + +

    + + + + + +
    + + + +
    + + + + + + + + + +
    + + + +
    + + + +
    +

    " />

    +



    +
     
      + +



    + " /> +
    +
    + + +



    + " /> + +

    +
    +
    +
    +
    + + + + + + + diff --git a/usr/local/www/diag_confbak.php b/usr/local/www/diag_confbak.php new file mode 100644 index 000000000..4d631a34b --- /dev/null +++ b/usr/local/www/diag_confbak.php @@ -0,0 +1,294 @@ += 0)) { + $config['system']['backupcount'] = $_POST['backupcount']; + $changedescr = $config['system']['backupcount']; + } else { + unset($config['system']['backupcount']); + $changedescr = "(platform default)"; + } + write_config("Changed backup revision count to {$changedescr}"); +} elseif ($_POST) { + if (!isset($_POST['confirm']) || ($_POST['confirm'] != gettext("Confirm")) || (!isset($_POST['newver']) && !isset($_POST['rmver']))) { + header("Location: diag_confbak.php"); + return; + } + + conf_mount_rw(); + $confvers = unserialize(file_get_contents($g['cf_conf_path'] . '/backup/backup.cache')); + if($_POST['newver'] != "") { + if(config_restore($g['conf_path'] . '/backup/config-' . $_POST['newver'] . '.xml') == 0) + $savemsg = sprintf(gettext('Successfully reverted to timestamp %1$s with description "%2$s".'), date(gettext("n/j/y H:i:s"), $_POST['newver']), $confvers[$_POST['newver']]['description']); + else + $savemsg = gettext("Unable to revert to the selected configuration."); + } + if($_POST['rmver'] != "") { + unlink_if_exists($g['conf_path'] . '/backup/config-' . $_POST['rmver'] . '.xml'); + $savemsg = sprintf(gettext('Deleted backup with timestamp %1$s and description "%2$s".'), date(gettext("n/j/y H:i:s"), $_POST['rmver']),$confvers[$_POST['rmver']]['description']); + } + conf_mount_ro(); +} + +if($_GET['getcfg'] != "") { + $file = $g['conf_path'] . '/backup/config-' . $_GET['getcfg'] . '.xml'; + + $exp_name = urlencode("config-{$config['system']['hostname']}.{$config['system']['domain']}-{$_GET['getcfg']}.xml"); + $exp_data = file_get_contents($file); + $exp_size = strlen($exp_data); + + header("Content-Type: application/octet-stream"); + header("Content-Disposition: attachment; filename={$exp_name}"); + header("Content-Length: $exp_size"); + echo $exp_data; + exit; +} + +if (($_GET['diff'] == 'Diff') && isset($_GET['oldtime']) && isset($_GET['newtime']) + && is_numeric($_GET['oldtime']) && (is_numeric($_GET['newtime']) || ($_GET['newtime'] == 'current'))) { + $diff = ""; + $oldfile = $g['conf_path'] . '/backup/config-' . $_GET['oldtime'] . '.xml'; + $oldtime = $_GET['oldtime']; + if ($_GET['newtime'] == 'current') { + $newfile = $g['conf_path'] . '/config.xml'; + $newtime = $config['revision']['time']; + } else { + $newfile = $g['conf_path'] . '/backup/config-' . $_GET['newtime'] . '.xml'; + $newtime = $_GET['newtime']; + } + if (file_exists($oldfile) && file_exists($newfile)) { + exec("/usr/bin/diff -u " . escapeshellarg($oldfile) . " " . escapeshellarg($newfile), $diff); + } +} + +cleanup_backupcache(false); +$confvers = get_backups(); +unset($confvers['versions']); + +$pgtitle = array(gettext("Diagnostics"),gettext("Configuration History")); +include("head.inc"); + +?> + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
      + + : +
    +
    : + + " /> + + " /> + +
    : + +
    " /> +
      + + + + " />
      + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

    +
    " /> 
    + +
    + + + + + +   + + + + <?=gettext(" title="" /> + + + <?=gettext(" title="" /> + + + <?=gettext(" title="" /> + +
    " />
    + +
    +
    +
    +
    + + + + diff --git a/usr/local/www/diag_defaults.php b/usr/local/www/diag_defaults.php new file mode 100755 index 000000000..9b50b1c07 --- /dev/null +++ b/usr/local/www/diag_defaults.php @@ -0,0 +1,89 @@ +. + 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. +*/ + +/* + pfSense_MODULE: config +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-factorydefaults +##|*NAME=Diagnostics: Factory defaults page +##|*DESCR=Allow access to the 'Diagnostics: Factory defaults' page. +##|*MATCH=diag_defaults.php* +##|-PRIV + +require("guiconfig.inc"); + +if ($_POST['Submit'] == " " . gettext("No") . " ") { + header("Location: index.php"); + exit; +} + +$pgtitle = array(gettext("Diagnostics"),gettext("Factory defaults")); +include("head.inc"); + +?> + + + + + +
    +
    +
    + +
    +

    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • ''
    • +
    +

    +

    + " /> + " /> +

    +
    + + + + diff --git a/usr/local/www/diag_dns.php b/usr/local/www/diag_dns.php new file mode 100644 index 000000000..21a903541 --- /dev/null +++ b/usr/local/www/diag_dns.php @@ -0,0 +1,284 @@ + "") { + if(!$isfirst) + $addresses .= " "; + $addresses .= rtrim($re) . "/32"; + $isfirst = false; + } + } + $newalias = array(); + if($override) + $alias_exists = false; + if($alias_exists == false) { + $newalias['name'] = $aliasname; + $newalias['type'] = "network"; + $newalias['address'] = $addresses; + $newalias['descr'] = "Created from Diagnostics-> DNS Lookup"; + if($override) + $a_aliases[$id] = $newalias; + else + $a_aliases[] = $newalias; + write_config(); + $createdalias = true; + } + } +} + +if ($_POST) { + unset($input_errors); + + $reqdfields = explode(" ", "host"); + $reqdfieldsn = explode(",", "Host"); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (!is_hostname($host) && !is_ipaddr($host)) { + $input_errors[] = gettext("Host must be a valid hostname or IP address."); + } else { + // Test resolution speed of each DNS server. + $dns_speeds = array(); + $dns_servers = array(); + exec("/usr/bin/grep nameserver /etc/resolv.conf | /usr/bin/cut -f2 -d' '", $dns_servers); + foreach ($dns_servers as $dns_server) { + $query_time = exec("/usr/bin/drill {$host_esc} " . escapeshellarg("@" . trim($dns_server)) . " | /usr/bin/grep Query | /usr/bin/cut -d':' -f2"); + if($query_time == "") + $query_time = gettext("No response"); + $new_qt = array(); + $new_qt['dns_server'] = $dns_server; + $new_qt['query_time'] = $query_time; + $dns_speeds[] = $new_qt; + unset($new_qt); + } + } + + $type = "unknown"; + $resolved = ""; + $ipaddr = ""; + $hostname = ""; + if (!$input_errors) { + if (is_ipaddr($host)) { + $type = "ip"; + $resolved = gethostbyaddr($host); + $ipaddr = $host; + if ($host != $resolved) + $hostname = $resolved; + } elseif (is_hostname($host)) { + $type = "hostname"; + $resolved = gethostbyname($host); + if($resolved) { + $resolved = array(); + exec("/usr/bin/drill {$host_esc} A | /usr/bin/grep {$host_esc} | /usr/bin/grep -v ';' | /usr/bin/awk '{ print $5 }'", $resolved); + } + $hostname = $host; + if ($host != $resolved) + $ipaddr = $resolved[0]; + } + + if ($host == $resolved) { + $resolved = gettext("No record found"); + } + } +} + +if( ($_POST['host']) && ($_POST['dialog_output']) ) { + display_host_results ($host,$resolved,$dns_speeds); + exit; +} + +function display_host_results ($address,$hostname,$dns_speeds) { + $map_lengths = function($element) { return strlen($element[0]); }; + + echo gettext("IP Address") . ": {$address} \n"; + echo gettext("Host Name") . ": {$hostname} \n"; + echo "\n"; + $text_table = array(); + $text_table[] = array(gettext("Server"), gettext("Query Time")); + if (is_array($dns_speeds)) { + foreach ($dns_speeds as $qt) { + $text_table[] = array(trim($qt['dns_server']), trim($qt['query_time'])); + } + } + $col0_padlength = max(array_map($map_lengths, $text_table)) + 4; + foreach ($text_table as $text_row) { + echo str_pad($text_row[0], $col0_padlength) . $text_row[1] . "\n"; + } +} + +include("head.inc"); ?> + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + +  =  + + "") { + echo $hostitem . "
    "; + $found++; + } + } + } else { + echo $resolved; + } + if($found > 0) { ?> +
    + + An alias already exists for the hostname .
    + + + + + + Alias created with name + + + +
    +
    + + + + + + + + + + + +
    + + + +
    + + + +
    +
    +
    + +

    +

    +
    + +

    +
      +
      + " /> +
    +
    +
    + + + diff --git a/usr/local/www/diag_dump_states.php b/usr/local/www/diag_dump_states.php new file mode 100755 index 000000000..40ab24bbb --- /dev/null +++ b/usr/local/www/diag_dump_states.php @@ -0,0 +1,251 @@ + + +"> + + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + +
    +
    + + + + + +
    + : + + + + " /> + + " /> + +
    +
    +
    + + + + + + + + + + + += 10000) + break; + + $line_split = preg_split("/\s+/", $line); + + $iface = array_shift($line_split); + $proto = array_shift($line_split); + $state = array_pop($line_split); + $info = implode(" ", $line_split); + + // We may want to make this optional, with a large state table, this could get to be expensive. + $iface = convert_real_interface_to_friendly_descr($iface); + + /* break up info and extract $srcip and $dstip */ + $ends = preg_split("/\?/", $info); + $parts = explode(":", $ends[0]); + $srcip = trim($parts[0]); + $parts = explode(":", $ends[count($ends) - 1]); + $dstip = trim($parts[0]); + +?> + + + + + + + + + + + + + +
    Router -> Destination");?>
    + +
    + +
    +
    + + : + +
    + + + +
    +
    + + + + diff --git a/usr/local/www/diag_dump_states_sources.php b/usr/local/www/diag_dump_states_sources.php new file mode 100644 index 000000000..2220d1fc2 --- /dev/null +++ b/usr/local/www/diag_dump_states_sources.php @@ -0,0 +1,211 @@ + + +"> + +
    + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + +
    + + + + + + +
      + + + " /> +
    + +
    + + + + + + + + + + + + 0) { + foreach($sources as $line) { + if($row >= 1000) + break; + + // 192.168.20.2 -> 216.252.56.1 ( states 10, connections 0, rate 0.0/0s ) + + $source_split = ""; + preg_match("/(.*)\s\(\sstates\s(.*),\sconnections\s(.*),\srate\s(.*)\s\)/", $line, $source_split); + list($all, $info, $numstates, $numconnections, $rate) = $source_split; + + $source_split = ""; + preg_match("/(.*)\s\?\s(.*)/", $info, $source_split); + list($all, $srcip, $dstip) = $source_split; + + ?> + + + + + + + + + + "; +} +?> + +
    Destination");?>
    + /images/icons/icon_x.gif' height='17' width='17' border='0' + onclick="removeSource();" style='cursor:pointer;' + name='i:' + title='' alt='' /> +
    + " . gettext("No source tracking entries were found.") . " +
    +
    + + + +
    +
    + + + + diff --git a/usr/local/www/diag_gmirror.php b/usr/local/www/diag_gmirror.php new file mode 100644 index 000000000..f2009916d --- /dev/null +++ b/usr/local/www/diag_gmirror.php @@ -0,0 +1,346 @@ + + +"> + + + + gettext("Forget all formerly connected consumers"), + "clear" => gettext("Remove metadata from disk"), + "insert" => gettext("Insert consumer into mirror"), + "remove" => gettext("Remove consumer from mirror"), + "activate" => gettext("Reactivate consumer on mirror"), + "deactivate" => gettext("Deactivate consumer from mirror"), + "rebuild" => gettext("Force rebuild of mirror consumer"), +); + +/* User tried to pass a bogus action */ +if (!empty($_REQUEST['action']) && !array_key_exists($_REQUEST['action'], $action_list)) { + header("Location: diag_gmirror.php"); + return; +} + +if ($_POST) { + if (!isset($_POST['confirm']) || ($_POST['confirm'] != gettext("Confirm"))) { + header("Location: diag_gmirror.php"); + return; + } + $input_errors = ""; + + if (($_POST['action'] != "clear") && !is_valid_mirror($_POST['mirror'])) + $input_errors[] = gettext("You must supply a valid mirror name."); + + if (!empty($_POST['consumer']) && !is_valid_consumer($_POST['consumer'])) + $input_errors[] = gettext("You must supply a valid consumer name"); + + /* Additional action-specific validation that hasn't already been tested */ + switch ($_POST['action']) { + case "insert": + if (!is_consumer_unused($_POST['consumer'])) + $input_errors[] = gettext("Consumer is already in use and cannot be inserted. Remove consumer from existing mirror first."); + if (gmirror_consumer_has_metadata($_POST['consumer'])) + $input_errors[] = gettext("Consumer has metadata from an existing mirror. Clear metadata before inserting consumer."); + $mstat = gmirror_get_status_single($_POST['mirror']); + if (strtoupper($mstat) != "COMPLETE") + $input_errors[] = gettext("Mirror is not in a COMPLETE state, cannot insert consumer. Forget disconnected disks or wait for rebuild to finish."); + break; + case "clear": + if (!is_consumer_unused($_POST['consumer'])) + $input_errors[] = gettext("Consumer is in use and cannot be cleared. Deactivate disk first."); + if (!gmirror_consumer_has_metadata($_POST['consumer'])) + $input_errors[] = gettext("Consumer has no metadata to clear."); + break; + case "activate": + if (is_consumer_in_mirror($_POST['consumer'], $_POST['mirror'])) + $input_errors[] = gettext("Consumer is already present on specified mirror."); + if (!gmirror_consumer_has_metadata($_POST['consumer'])) + $input_errors[] = gettext("Consumer has no metadata and cannot be reactivated."); + + break; + case "remove": + case "deactivate": + case "rebuild": + if (!is_consumer_in_mirror($_POST['consumer'], $_POST['mirror'])) + $input_errors[] = gettext("Consumer must be present on the specified mirror."); + break; + } + +$result = 0; + if (empty($input_errors)) { + switch ($_POST['action']) { + case "forget": + $result = gmirror_forget_disconnected($_POST['mirror']); + break; + case "clear": + $result = gmirror_clear_consumer($_POST['consumer']); + break; + case "insert": + $result = gmirror_insert_consumer($_POST['mirror'], $_POST['consumer']); + break; + case "remove": + $result = gmirror_remove_consumer($_POST['mirror'], $_POST['consumer']); + break; + case "activate": + $result = gmirror_activate_consumer($_POST['mirror'], $_POST['consumer']); + break; + case "deactivate": + $result = gmirror_deactivate_consumer($_POST['mirror'], $_POST['consumer']); + break; + case "rebuild": + $result = gmirror_force_rebuild($_POST['mirror'], $_POST['consumer']); + break; + } + $redir = "Location: diag_gmirror.php"; + if ($result != 0) { + $redir .= "?error=" . urlencode($result); + } + /* If we reload the page too fast, the gmirror information may be missing or not up-to-date. */ + sleep(3); + header($redir); + return; + } +} + +$mirror_status = gmirror_get_status(); +$mirror_list = gmirror_get_mirrors(); +$unused_disks = gmirror_get_disks(); +$unused_consumers = array(); +foreach ($unused_disks as $disk) { + if (is_consumer_unused($disk)) + $unused_consumers = array_merge($unused_consumers, gmirror_get_all_unused_consumer_sizes_on_disk($disk)); +} + +if ($input_errors) + print_input_errors($input_errors); +if ($_GET["error"] && ($_GET["error"] != 0)) + print_info_box(gettext("There was an error performing the chosen mirror operation. Check the System Log for details.")); + +?> +
    + + + + +
    +
    + + +   + + +
      +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + : +
    +
    : + " /> + +
    : + " /> + + +
    : + " /> + +
    +
    " /> +
    + + + + 0): ?> + + + + + + $name): + $components = count($name["components"]); ?> + + + + + + 1): + $morecomponents = array_slice($name["components"], 1); ?> + + + + + + + + + + + +
    + +
    Size: +
    + + +
    [] + +
    + + +
    + 1)): ?> + [] + [] + [] + +
    + + +
    + 1)): ?> + [] + [] + [] + +
    +
    +
    + + + + 0): ?> + + + + + + + + + + + + + + + + +
    + + + + [ ] +
    [] + + + $mirror_size): ?> + + + + +
    +
    +
     
    +

    +
    +
    + + + + +"; +echo "jQuery('#loading').html('');"; +echo ""; + +?> diff --git a/usr/local/www/diag_ipsec.php b/usr/local/www/diag_ipsec.php new file mode 100644 index 000000000..9c77b187a --- /dev/null +++ b/usr/local/www/diag_ipsec.php @@ -0,0 +1,460 @@ +. + All rights reserved. + + Parts of this code was originally based on vpn_ipsec_sad.php + Copyright (C) 2003-2004 Manuel Kasper + + 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. +*/ + +/* + pfSense_MODULE: ipsec +*/ + +##|+PRIV +##|*IDENT=page-status-ipsec +##|*NAME=Status: IPsec page +##|*DESCR=Allow access to the 'Status: IPsec' page. +##|*MATCH=diag_ipsec.php* +##|-PRIV + + +global $g; + +$pgtitle = array(gettext("Status"),gettext("IPsec")); +$shortcut_section = "ipsec"; + +require("guiconfig.inc"); +include("head.inc"); +require("ipsec.inc"); + +if ($_GET['act'] == 'connect') { + if (ctype_digit($_GET['ikeid'])) { + mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid'])); + mwexec("/usr/local/sbin/ipsec up con" . escapeshellarg($_GET['ikeid'])); + } +} else if ($_GET['act'] == 'ikedisconnect') { + if (ctype_digit($_GET['ikeid'])) { + if (!empty($_GET['ikesaid']) && ctype_digit($_GET['ikesaid'])) + mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid']) . "[" . escapeshellarg($_GET['ikesaid']) . "]"); + else + mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid'])); + } +} else if ($_GET['act'] == 'childdisconnect') { + if (ctype_digit($_GET['ikeid'])) { + if (!empty($_GET['ikesaid']) && ctype_digit($_GET['ikesaid'])) + mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid']) . "{" . escapeshellarg($_GET['ikesaid']) . "}"); + } +} + +if (!is_array($config['ipsec']['phase1'])) + $config['ipsec']['phase1'] = array(); + +$a_phase1 = &$config['ipsec']['phase1']; + +$status = ipsec_smp_dump_status(); + +?> + +"> + +
    + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + $ikesa) { + $con_id = substr($ikesa['peerconfig'], 3); + $ipsecconnected[$con_id] = $con_id; + + if (ipsec_phase1_status($status['query']['ikesalist']['ikesa'], $ikesa['id'])) { + $icon = "pass"; + } elseif(!isset($config['ipsec']['enable'])) { + $icon = "block"; + } else { + $icon = "reject"; + } +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Port:' . htmlspecialchars($ikesa['local']['port']); + else + echo 'Unknown'; + if ($ikesa['local']['nat'] != 'false') + echo " NAT-T"; + } + ?> + + {$identity}"; + } else { + if (empty($identity)) + echo "Unknown"; + else + echo $identity; + } + } + ?> + + Port:' . htmlspecialchars($ikesa['remote']['port']); + else + echo 'Unknown'; + if ($ikesa['remote']['nat'] != 'false') + echo " NAT-T"; + } + ?> + + IKEv +
    + + +
    + + + "; + echo htmlspecialchars($ikesa['intalg']); + echo "
    "; + echo htmlspecialchars($ikesa['prfalg']); + echo "
    "; + echo htmlspecialchars($ikesa['dhgroup']); + ?> +
    +
    + +
    +
    +
    +
    + +
    + + Connect VPN + +
    + +
    + + Disconnect VPN + + + Disconnect VPN Connection + +
    + +
    + +
    +
    +
    + - Show child SA entries +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    Disconnected +
    +
    +
    + + Connect VPN + +
    +
    + +
    +
    +
    +
    + +

    + +
    +
    + + here. +

    + + + + diff --git a/usr/local/www/diag_ipsec_leases.php b/usr/local/www/diag_ipsec_leases.php new file mode 100644 index 000000000..571259ddd --- /dev/null +++ b/usr/local/www/diag_ipsec_leases.php @@ -0,0 +1,130 @@ + + + + + + + + + + + +
    + +
    +
    + + + + + + + 0): ?> + + + + + + + + + + + + + + + + + + +
    + +
    +
    +

    +
    + + + + + + +
    +

    +
    + +
    +
    + +

    +
    + +

    + + + + diff --git a/usr/local/www/diag_ipsec_sad.php b/usr/local/www/diag_ipsec_sad.php new file mode 100644 index 000000000..001f5256e --- /dev/null +++ b/usr/local/www/diag_ipsec_sad.php @@ -0,0 +1,121 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /sbin/setkey + pfSense_MODULE: ipsec +*/ + +##|+PRIV +##|*IDENT=page-status-ipsec-sad +##|*NAME=Status: IPsec: SAD page +##|*DESCR=Allow access to the 'Status: IPsec: SAD' page. +##|*MATCH=diag_ipsec_sad.php* +##|-PRIV + +require("guiconfig.inc"); +require("ipsec.inc"); + +$pgtitle = array(gettext("Status"),gettext("IPsec"),gettext("SAD")); +$shortcut_section = "ipsec"; +include("head.inc"); + +$sad = ipsec_dump_sad(); + +?> + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +
    +
    +
    + +

    +
    + +

    + + + + diff --git a/usr/local/www/diag_ipsec_spd.php b/usr/local/www/diag_ipsec_spd.php new file mode 100644 index 000000000..34f2566cb --- /dev/null +++ b/usr/local/www/diag_ipsec_spd.php @@ -0,0 +1,137 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /sbin/setkey + pfSense_MODULE: ipsec +*/ + +##|+PRIV +##|*IDENT=page-status-ipsec-spd +##|*NAME=Status: IPsec: SPD page +##|*DESCR=Allow access to the 'Status: IPsec: SPD' page. +##|*MATCH=diag_ipsec_spd.php* +##|-PRIV + +require("guiconfig.inc"); +require("ipsec.inc"); + +$pgtitle = array(gettext("Status"),gettext("IPsec"),gettext("SPD")); +$shortcut_section = "ipsec"; +include("head.inc"); + +$spd = ipsec_dump_spd(); +?> + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + direction + -> + +
    +
    + + + + + + + + + + + + + + + + + +
    in
    out
    +

    +
    +
    +
    + +

    +
    + +

    + + + + diff --git a/usr/local/www/diag_ipsec_xml.php b/usr/local/www/diag_ipsec_xml.php new file mode 100644 index 000000000..2d74c1b3a --- /dev/null +++ b/usr/local/www/diag_ipsec_xml.php @@ -0,0 +1,81 @@ + diff --git a/usr/local/www/diag_limiter_info.php b/usr/local/www/diag_limiter_info.php new file mode 100644 index 000000000..b6c0ecc7d --- /dev/null +++ b/usr/local/www/diag_limiter_info.php @@ -0,0 +1,118 @@ + + + + +
    +"; + print_info_box($savemsg); + echo "
    "; + } + if ($input_errors) + print_input_errors($input_errors); +?> + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    +
    +
    + + + diff --git a/usr/local/www/diag_logs.php b/usr/local/www/diag_logs.php new file mode 100755 index 000000000..74d01b17d --- /dev/null +++ b/usr/local/www/diag_logs.php @@ -0,0 +1,137 @@ +. + 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. +*/ + +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-logs-system +##|*NAME=Diagnostics: Logs: System page +##|*DESCR=Allow access to the 'Diagnostics: Logs: System' page. +##|*MATCH=diag_logs.php* +##|-PRIV + +require("guiconfig.inc"); + +$system_logfile = "{$g['varlog_path']}/system.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($system_logfile); + +if ($_GET['filtertext']) + $filtertext = htmlspecialchars($_GET['filtertext']); + +if ($_POST['filtertext']) + $filtertext = htmlspecialchars($_POST['filtertext']); + +if ($filtertext) + $filtertextmeta="?filtertext=$filtertext"; + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("General")); +include("head.inc"); + +?> + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + + +
    +
    + " /> +
    +
    +
    + + " /> +
    +
    +
    +
    + + + diff --git a/usr/local/www/diag_logs_auth.php b/usr/local/www/diag_logs_auth.php new file mode 100644 index 000000000..8983d7d3e --- /dev/null +++ b/usr/local/www/diag_logs_auth.php @@ -0,0 +1,98 @@ +. + 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. +*/ + +/* + pfSense_MODULE: captiveportal +*/ + +##|+PRIV +##|*IDENT=page-status-systemlogs-portalauth +##|*NAME=Status: System logs: Portal Auth page +##|*DESCR=Allow access to the 'Status: System logs: Portal Auth' page. +##|*MATCH=diag_logs_auth.php* +##|-PRIV + +require("guiconfig.inc"); + +$portal_logfile = "{$g['varlog_path']}/portalauth.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($portal_logfile); + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("Portal Auth")); +$shortcut_section = "captiveportal"; +include("head.inc"); + +?> + + + + + + + + +
    + +
    +
    + + + + + + +
    +

    + "/>
    +
    +
    + + + \ No newline at end of file diff --git a/usr/local/www/diag_logs_dhcp.php b/usr/local/www/diag_logs_dhcp.php new file mode 100644 index 000000000..f6b70602b --- /dev/null +++ b/usr/local/www/diag_logs_dhcp.php @@ -0,0 +1,104 @@ +. + 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. +*/ + +/* + pfSense_MODULE: dhcpserver +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-logs-dhcp +##|*NAME=Diagnostics: Logs: DHCP page +##|*DESCR=Allow access to the 'Diagnostics: Logs: DHCP' page. +##|*MATCH=diag_logs_dhcp.php* +##|-PRIV + +require("guiconfig.inc"); + +$dhcpd_logfile = "{$g['varlog_path']}/dhcpd.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) { + clear_log_file($dhcpd_logfile); + killbyname("dhcpd"); + services_dhcpd_configure(); +} + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("DHCP")); +$shortcut_section = "dhcp"; +include("head.inc"); + +?> + + + + + + + + +
    + +
    +
    + + + + + + + +
    +

    + " />
    NOTE: Clearing the log file will restart the DHCP daemon.
    +
    +
    + + + diff --git a/usr/local/www/diag_logs_filter.php b/usr/local/www/diag_logs_filter.php new file mode 100644 index 000000000..5595fc668 --- /dev/null +++ b/usr/local/www/diag_logs_filter.php @@ -0,0 +1,463 @@ +, + Jim Pingle jim@pingle.org + 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. +*/ + +/* + pfSense_MODULE: filter +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-logs-firewall +##|*NAME=Diagnostics: Logs: Firewall page +##|*DESCR=Allow access to the 'Diagnostics: Logs: Firewall' page. +##|*MATCH=diag_logs_filter.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("filter_log.inc"); + +# --- AJAX RESOLVE --- +if (isset($_POST['resolve'])) { + $ip = strtolower($_POST['resolve']); + $res = (is_ipaddr($ip) ? gethostbyaddr($ip) : ''); + + if ($res && $res != $ip) + $response = array('resolve_ip' => $ip, 'resolve_text' => $res); + else + $response = array('resolve_ip' => $ip, 'resolve_text' => gettext("Cannot resolve")); + + echo json_encode(str_replace("\\","\\\\", $response)); // single escape chars can break JSON decode + exit; +} + +function getGETPOSTsettingvalue($settingname, $default) +{ + $settingvalue = $default; + if($_GET[$settingname]) + $settingvalue = $_GET[$settingname]; + if($_POST[$settingname]) + $settingvalue = $_POST[$settingname]; + return $settingvalue; +} + +$rulenum = getGETPOSTsettingvalue('getrulenum', null); +if($rulenum) { + list($rulenum, $tracker, $type) = explode(',', $rulenum); + $rule = find_rule_by_number($rulenum, $tracker, $type); + echo gettext("The rule that triggered this action is") . ":\n\n{$rule}"; + exit; +} + +$filtersubmit = getGETPOSTsettingvalue('filtersubmit', null); +if ($filtersubmit) { + $interfacefilter = getGETPOSTsettingvalue('interface', null); + $filtertext = getGETPOSTsettingvalue('filtertext', ""); + $filterlogentries_qty = getGETPOSTsettingvalue('filterlogentries_qty', null); +} + +$filterlogentries_submit = getGETPOSTsettingvalue('filterlogentries_submit', null); +if ($filterlogentries_submit) { + $filterfieldsarray = array(); + + $actpass = getGETPOSTsettingvalue('actpass', null); + $actblock = getGETPOSTsettingvalue('actblock', null); + + $filterfieldsarray['act'] = str_replace(" ", " ", trim($actpass . " " . $actblock)); + $filterfieldsarray['act'] = $filterfieldsarray['act'] != "" ? $filterfieldsarray['act'] : 'All'; + $filterfieldsarray['time'] = getGETPOSTsettingvalue('filterlogentries_time', null); + $filterfieldsarray['interface'] = getGETPOSTsettingvalue('filterlogentries_interfaces', null); + $filterfieldsarray['srcip'] = getGETPOSTsettingvalue('filterlogentries_sourceipaddress', null); + $filterfieldsarray['srcport'] = getGETPOSTsettingvalue('filterlogentries_sourceport', null); + $filterfieldsarray['dstip'] = getGETPOSTsettingvalue('filterlogentries_destinationipaddress', null); + $filterfieldsarray['dstport'] = getGETPOSTsettingvalue('filterlogentries_destinationport', null); + $filterfieldsarray['proto'] = getGETPOSTsettingvalue('filterlogentries_protocol', null); + $filterfieldsarray['tcpflags'] = getGETPOSTsettingvalue('filterlogentries_protocolflags', null); + $filterlogentries_qty = getGETPOSTsettingvalue('filterlogentries_qty', null); +} + +$filter_logfile = "{$g['varlog_path']}/filter.log"; + +$nentries = $config['syslog']['nentries']; + +# Override Display Quantity +if ($filterlogentries_qty) + $nentries = $filterlogentries_qty; + +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($filter_logfile); + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("Firewall")); +$shortcut_section = "firewall"; +include("head.inc"); + +?> + + + + + + + + + + +
    + +
    + +
    +
    + " summary="main area"> + + + + + + + + + + + + + + + + + + + + + + + + ".find_rule_by_number_buffer($filterent['rulenum'],$filterent['tracker'],$filterent['act']).""); + + $int = strtolower($filterent['interface']); + $proto = strtolower($filterent['proto']); + if($filterent['version'] == '6') { + $ipproto = "inet6"; + $filterent['srcip'] = "[{$filterent['srcip']}]"; + $filterent['dstip'] = "[{$filterent['dstip']}]"; + } else { + $ipproto = "inet"; + } + + $srcstr = $filterent['srcip'] . get_port_with_service($filterent['srcport'], $proto); + $src_htmlclass = str_replace(array('.', ':'), '-', $filterent['srcip']); + $dststr = $filterent['dstip'] . get_port_with_service($filterent['dstport'], $proto); + $dst_htmlclass = str_replace(array('.', ':'), '-', $filterent['dstip']); + ?> + + + + + + + + + + + + + + + + + + + +
    +
    "> +
    + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + /> Pass
    + /> Block
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    " />
    +
    + ', '');?>   +    +
    +
    +
    +
    "> +
    + + + + + + + + + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
     
    +
    " />
    +
    + ', '');?>   +
    +
    +
    + +
    " class="listtopic"> + +
    +
    + ', outputrule);"> + <?php echo $filterent['act'] .'/'. $filterent['tracker'];?> +
    + + Direction=OUT + + + ');" title="" class="ICON-" border="0" src="/themes//images/icons/icon_log.gif" alt="Icon Reverse Resolve with DNS"/> + " title="" onclick="return confirm('')"> + Icon Easy Rule: Add to Block List + ';?> + + ');" title="" class="ICON-" border="0" src="/themes//images/icons/icon_log.gif" alt="Icon Reverse Resolve with DNS"/> + " title="" onclick="return confirm('')"> + Icon Easy Rule: Pass this traffic + ';?> +
    +
    +
    +
    + " /> +
    +
    +
    +
    + +

    TCP Flags: F - FIN, S - SYN, A or . - ACK, R - RST, P - PSH, U - URG, E - ECE, W - CWR

    + + + + + + + + diff --git a/usr/local/www/diag_logs_filter_dynamic.php b/usr/local/www/diag_logs_filter_dynamic.php new file mode 100755 index 000000000..02ec32e2b --- /dev/null +++ b/usr/local/www/diag_logs_filter_dynamic.php @@ -0,0 +1,175 @@ +. + 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. +*/ + +/* + pfSense_MODULE: filter +*/ + +##|+PRIV +##|*IDENT=page-hidden-nolongerincluded +##|*NAME=Hidden: No longer included page +##|*DESCR=Allow access to the 'Hidden: No longer included' page. +##|*MATCH=diag_logs_filter_dynamic.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("filter_log.inc"); + +$filter_logfile = "{$g['varlog_path']}/filter.log"; + +/* Hardcode this. AJAX doesn't do so well with large numbers */ +$nentries = 50; + +/* AJAX related routines */ +handle_ajax($nentries, $nentries + 20); + +if ($_POST['clear']) + clear_log_file($filter_logfile); + +$filterlog = conv_log_filter($filter_logfile, $nentries, $nentries + 100); + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("Firewall (Dynamic View)")); +$shortcut_section = "firewall"; +include("head.inc"); + +?> + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + ; +
    + ', outputrule);"> + <?php echo $filterent['act'];?> + +
    +
    +
    +

    : F - FIN, S - SYN, A or . - ACK, R - RST, P - PSH, U - URG, E - ECE, C - CWR

    + + + diff --git a/usr/local/www/diag_logs_filter_summary.php b/usr/local/www/diag_logs_filter_summary.php new file mode 100644 index 000000000..e4c11e2a8 --- /dev/null +++ b/usr/local/www/diag_logs_filter_summary.php @@ -0,0 +1,236 @@ + gettext("Actions"), + 'interface' => gettext("Interfaces"), + 'proto' => gettext("Protocols"), + 'srcip' => gettext("Source IPs"), + 'dstip' => gettext("Destination IPs"), + 'srcport' => gettext("Source Ports"), + 'dstport' => gettext("Destination Ports")); + +$summary = array(); +foreach (array_keys($fields) as $f) { + $summary[$f] = array(); +} + +$totals = array(); + +function cmp($a, $b) { + if ($a == $b) { + return 0; + } + return ($a < $b) ? 1 : -1; +} + +function stat_block($summary, $stat, $num) { + global $g, $gotlines, $fields; + uasort($summary[$stat] , 'cmp'); + print ""; + print ""; + $k = array_keys($summary[$stat]); + $total = 0; + $numentries = 0; + for ($i=0; $i < $num; $i++) { + if ($k[$i]) { + $total += $summary[$stat][$k[$i]]; + $numentries++; + $outstr = $k[$i]; + if (is_ipaddr($outstr)) { + $outstr = "\"log\" {$outstr}"; + } elseif (substr_count($outstr, '/') == 1) { + list($proto, $port) = explode('/', $outstr); + $service = getservbyport($port, strtolower($proto)); + if ($service) + $outstr .= ": {$service}"; + } + print ""; + } + } + $leftover = $gotlines - $total; + if ($leftover > 0) { + print ""; + } + print "
    {$fields[$stat]} ".gettext("data")."
    {$outstr}{$summary[$stat][$k[$i]]}
    Other{$leftover}
    "; +} + +function pie_block($summary, $stat, $num) { + global $gotlines, $fields; + uasort($summary[$stat] , 'cmp'); + $k = array_keys($summary[$stat]); + $total = 0; + $numentries = 0; + print "\n\n"; + print ""; + print ""; + print ""; + print "
    {$fields[$stat]}
    \n"; +} + +foreach ($filterlog as $fe) { + $specialfields = array('srcport', 'dstport'); + foreach (array_keys($fields) as $field) { + if (!in_array($field, $specialfields)) + $summary[$field][$fe[$field]]++; + } + /* Handle some special cases */ + if ($fe['srcport']) + $summary['srcport'][$fe['proto'].'/'.$fe['srcport']]++; + else + $summary['srcport'][$fe['srcport']]++; + if ($fe['dstport']) + $summary['dstport'][$fe['proto'].'/'.$fe['dstport']]++; + else + $summary['dstport'][$fe['dstport']]++; +} + +include("head.inc"); ?> + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +
    + +
    + + +
    "; + stat_block($summary, $field , $entriesperblock); + echo "

    "; +} +?> +
    +
    +
    + + + diff --git a/usr/local/www/diag_logs_gateways.php b/usr/local/www/diag_logs_gateways.php new file mode 100755 index 000000000..df1d25d99 --- /dev/null +++ b/usr/local/www/diag_logs_gateways.php @@ -0,0 +1,139 @@ +. + 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. +*/ + +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-logs-gateways +##|*NAME=Diagnostics: Logs: System: Gateways page +##|*DESCR=Allow access to the 'Diagnostics: Logs: System: Gateways' page. +##|*MATCH=diag_logs_gateways.php* +##|-PRIV + +require("guiconfig.inc"); + +$system_logfile = "{$g['varlog_path']}/gateways.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($system_logfile); + +if ($_GET['filtertext']) + $filtertext = htmlspecialchars($_GET['filtertext']); + +if ($_POST['filtertext']) + $filtertext = htmlspecialchars($_POST['filtertext']); + +if ($filtertext) + $filtertextmeta="?filtertext=$filtertext"; + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("Gateways")); +$shortcut_section = "gateways"; +include("head.inc"); + +?> + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + + +
    +
    + " /> +
    +
    +
    + + " /> +
    +
    +
    +
    + + + diff --git a/usr/local/www/diag_logs_ipsec.php b/usr/local/www/diag_logs_ipsec.php new file mode 100644 index 000000000..79b63a916 --- /dev/null +++ b/usr/local/www/diag_logs_ipsec.php @@ -0,0 +1,120 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig /usr/bin/awk + pfSense_MODULE: ipsec +*/ + +##|+PRIV +##|*IDENT=page-status-systemlogs-ipsecvpn +##|*NAME=Status: System logs: IPsec VPN page +##|*DESCR=Allow access to the 'Status: System logs: IPsec VPN' page. +##|*MATCH=diag_logs_ipsec.php* +##|-PRIV + +require("guiconfig.inc"); +require("ipsec.inc"); + +$ipsec_logfile = "{$g['varlog_path']}/ipsec.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($ipsec_logfile); + +$ipsec_logarr = return_clog($ipsec_logfile, $nentries); + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("IPsec VPN")); +$shortcut_section = "ipsec"; +include("head.inc"); + +?> + + + + + + + + + +
    + +
    +
    + + + + + \n"; + $entry_date_time = htmlspecialchars(join(" ", array_slice($logent, 0, 3))); + echo "\n"; + echo "\n"; + echo "\n"; + } + ?> + + + +
    " . $entry_date_time . "" . $logent[4] . " " . $logent[5] . "
    +
    +
    + " /> +
    +
    +
    +
    + + + diff --git a/usr/local/www/diag_logs_ntpd.php b/usr/local/www/diag_logs_ntpd.php new file mode 100644 index 000000000..b8ab79608 --- /dev/null +++ b/usr/local/www/diag_logs_ntpd.php @@ -0,0 +1,101 @@ +. + Copyright (C) 2003-2004 Manuel Kasper . + 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. +*/ + +/* + pfSense_MODULE: ntpd +*/ + +##|+PRIV +##|*IDENT=page-status-systemlogs-ntpd +##|*NAME=Status: System logs: NTP page +##|*DESCR=Allow access to the 'Status: System logs: NTP' page. +##|*MATCH=diag_logs_ntpd.php* +##|-PRIV + +require("guiconfig.inc"); + +$ntpd_logfile = "{$g['varlog_path']}/ntpd.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($ntpd_logfile); + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("NTP")); +$shortcut_section = "ntp"; +include("head.inc"); + +?> + + + + + + + + +
    + +
    +
    + + + + + + +
    +

    +
    + " /> +
    +
    +
    +
    + + + diff --git a/usr/local/www/diag_logs_openvpn.php b/usr/local/www/diag_logs_openvpn.php new file mode 100644 index 000000000..56dcf518b --- /dev/null +++ b/usr/local/www/diag_logs_openvpn.php @@ -0,0 +1,108 @@ +. + 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. +*/ + +/* + pfSense_MODULE: openvpn +*/ + +##|+PRIV +##|*IDENT=page-status-systemlogs-openvpn +##|*NAME=Status: System logs: OpenVPN page +##|*DESCR=Allow access to the 'Status: System logs: OpenVPN' page. +##|*MATCH=diag_logs_openvpn.php* +##|-PRIV + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("OpenVPN")); +$shortcut_section = "openvpn"; + +require("guiconfig.inc"); +require_once("vpn.inc"); + +$openvpn_logfile = "{$g['varlog_path']}/openvpn.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($openvpn_logfile); + +include("head.inc"); + +?> + + + + + + + + + +
    + +
    +
    + + + + + + + + +
    +
    +
    + " /> +
    +
    +
    +
    + + + diff --git a/usr/local/www/diag_logs_ppp.php b/usr/local/www/diag_logs_ppp.php new file mode 100644 index 000000000..e9b3279ab --- /dev/null +++ b/usr/local/www/diag_logs_ppp.php @@ -0,0 +1,106 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig /usr/bin/awk + pfSense_MODULE: +*/ + +##|+PRIV +##|*IDENT=page-status-systemlogs-ppp +##|*NAME=Status: System logs: IPsec VPN page +##|*DESCR=Allow access to the 'Status: System logs: IPsec VPN' page. +##|*MATCH=diag_logs_ppp.php* +##|-PRIV + +require("guiconfig.inc"); + +$ppp_logfile = "{$g['varlog_path']}/ppp.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($ppp_logfile); + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("PPP")); +include("head.inc"); + +?> + + + + + + + + + +
    + +
    +
    + + + + + + + + +
    +
    +
    + " /> +
    +
    +
    +
    + + + diff --git a/usr/local/www/diag_logs_relayd.php b/usr/local/www/diag_logs_relayd.php new file mode 100644 index 000000000..b7430d220 --- /dev/null +++ b/usr/local/www/diag_logs_relayd.php @@ -0,0 +1,99 @@ +. + Copyright (C) 2008 Seth Mos . + 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. +*/ + +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-status-systemlogs-loadbalancer +##|*NAME=Status: System logs: Load Balancer page +##|*DESCR=Allow access to the 'Status: System logs: Load Balancer' page. +##|*MATCH=diag_logs_relayd.php* +##|-PRIV + +require("guiconfig.inc"); + +$relayd_logfile = "{$g['varlog_path']}/relayd.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($relayd_logfile); + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("Load Balancer")); +$shortcut_section = "relayd"; +include("head.inc"); + +?> + + + + + + + + +
    + +
    +
    + + + + + + +
    +

    +" />
    +
    +
    + + + diff --git a/usr/local/www/diag_logs_resolver.php b/usr/local/www/diag_logs_resolver.php new file mode 100755 index 000000000..f083c88a7 --- /dev/null +++ b/usr/local/www/diag_logs_resolver.php @@ -0,0 +1,139 @@ +. + 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. +*/ + +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-logs-resolver +##|*NAME=Diagnostics: Logs: System: Resolver page +##|*DESCR=Allow access to the 'Diagnostics: Logs: System: Resolver' page. +##|*MATCH=diag_logs_resolver.php* +##|-PRIV + +require("guiconfig.inc"); + +$system_logfile = "{$g['varlog_path']}/resolver.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($system_logfile); + +if ($_GET['filtertext']) + $filtertext = htmlspecialchars($_GET['filtertext']); + +if ($_POST['filtertext']) + $filtertext = htmlspecialchars($_POST['filtertext']); + +if ($filtertext) + $filtertextmeta="?filtertext=$filtertext"; + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("Resolver")); +$shortcut_section = "resolver"; +include("head.inc"); + +?> + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + + +
    +
    + " /> +
    +
    +
    + + " /> +
    +
    +
    +
    + + + diff --git a/usr/local/www/diag_logs_routing.php b/usr/local/www/diag_logs_routing.php new file mode 100644 index 000000000..0168e3c41 --- /dev/null +++ b/usr/local/www/diag_logs_routing.php @@ -0,0 +1,110 @@ +. + 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. +*/ + +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-status-systemlogs-routing +##|*NAME=Status: System logs: Routing page +##|*DESCR=Allow access to the 'Status: System logs: System: Routing' page. +##|*MATCH=diag_logs_routing.php* +##|-PRIV + +require("guiconfig.inc"); + +$routing_logfile = "{$g['varlog_path']}/routing.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($routing_logfile); + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("Routing")); +$shortcut_section = "routing"; +include("head.inc"); + +?> + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + +
    +

    +" />
    +
    +
    + + + diff --git a/usr/local/www/diag_logs_settings.php b/usr/local/www/diag_logs_settings.php new file mode 100644 index 000000000..805c7e3c8 --- /dev/null +++ b/usr/local/www/diag_logs_settings.php @@ -0,0 +1,486 @@ +. + 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. +*/ + +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-logs-settings +##|*NAME=Diagnostics: Logs: Settings page +##|*DESCR=Allow access to the 'Diagnostics: Logs: Settings' page. +##|*MATCH=diag_logs_settings.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +$pconfig['reverse'] = isset($config['syslog']['reverse']); +$pconfig['nentries'] = $config['syslog']['nentries']; +$pconfig['remoteserver'] = $config['syslog']['remoteserver']; +$pconfig['remoteserver2'] = $config['syslog']['remoteserver2']; +$pconfig['remoteserver3'] = $config['syslog']['remoteserver3']; +$pconfig['sourceip'] = $config['syslog']['sourceip']; +$pconfig['ipproto'] = $config['syslog']['ipproto']; +$pconfig['filter'] = isset($config['syslog']['filter']); +$pconfig['dhcp'] = isset($config['syslog']['dhcp']); +$pconfig['portalauth'] = isset($config['syslog']['portalauth']); +$pconfig['vpn'] = isset($config['syslog']['vpn']); +$pconfig['apinger'] = isset($config['syslog']['apinger']); +$pconfig['relayd'] = isset($config['syslog']['relayd']); +$pconfig['hostapd'] = isset($config['syslog']['hostapd']); +$pconfig['logall'] = isset($config['syslog']['logall']); +$pconfig['system'] = isset($config['syslog']['system']); +$pconfig['enable'] = isset($config['syslog']['enable']); +$pconfig['logdefaultblock'] = !isset($config['syslog']['nologdefaultblock']); +$pconfig['logdefaultpass'] = isset($config['syslog']['nologdefaultpass']); +$pconfig['logbogons'] = !isset($config['syslog']['nologbogons']); +$pconfig['logprivatenets'] = !isset($config['syslog']['nologprivatenets']); +$pconfig['loglighttpd'] = !isset($config['syslog']['nologlighttpd']); +$pconfig['rawfilter'] = isset($config['syslog']['rawfilter']); +$pconfig['filterdescriptions'] = $config['syslog']['filterdescriptions']; +$pconfig['disablelocallogging'] = isset($config['syslog']['disablelocallogging']); +$pconfig['logfilesize'] = $config['syslog']['logfilesize']; + +if (!$pconfig['nentries']) + $pconfig['nentries'] = 50; + +function is_valid_syslog_server($target) { + return (is_ipaddr($target) + || is_ipaddrwithport($target) + || is_hostname($target) + || is_hostnamewithport($target)); +} + +if ($_POST['resetlogs'] == gettext("Reset Log Files")) { + clear_all_log_files(); + $savemsg .= gettext("The log files have been reset."); +} elseif ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + if ($_POST['enable'] && !is_valid_syslog_server($_POST['remoteserver'])) { + $input_errors[] = gettext("A valid IP address/hostname or IP/hostname:port must be specified for remote syslog server #1."); + } + if ($_POST['enable'] && $_POST['remoteserver2'] && !is_valid_syslog_server($_POST['remoteserver2'])) { + $input_errors[] = gettext("A valid IP address/hostname or IP/hostname:port must be specified for remote syslog server #2."); + } + if ($_POST['enable'] && $_POST['remoteserver3'] && !is_valid_syslog_server($_POST['remoteserver3'])) { + $input_errors[] = gettext("A valid IP address/hostname or IP/hostname:port must be specified for remote syslog server #3."); + } + + if (($_POST['nentries'] < 5) || ($_POST['nentries'] > 2000)) { + $input_errors[] = gettext("Number of log entries to show must be between 5 and 2000."); + } + + if (isset($_POST['logfilesize']) && (strlen($_POST['logfilesize']) > 0)) { + if (!is_numeric($_POST['logfilesize']) || ($_POST['logfilesize'] < 5120)) { + $input_errors[] = gettext("Log file size must be a positive integer greater than 5120."); + } + } + if (!$input_errors) { + $config['syslog']['reverse'] = $_POST['reverse'] ? true : false; + $config['syslog']['nentries'] = (int)$_POST['nentries']; + $pconfig['nentries'] = $config['syslog']['nentries']; + if (isset($_POST['logfilesize']) && (strlen($_POST['logfilesize']) > 0)) { + $config['syslog']['logfilesize'] = (int)$_POST['logfilesize']; + $pconfig['logfilesize'] = $config['syslog']['logfilesize']; + } else { + unset($config['syslog']['logfilesize']); + } + $config['syslog']['remoteserver'] = $_POST['remoteserver']; + $config['syslog']['remoteserver2'] = $_POST['remoteserver2']; + $config['syslog']['remoteserver3'] = $_POST['remoteserver3']; + $config['syslog']['sourceip'] = $_POST['sourceip']; + $config['syslog']['ipproto'] = $_POST['ipproto']; + $config['syslog']['filter'] = $_POST['filter'] ? true : false; + $config['syslog']['dhcp'] = $_POST['dhcp'] ? true : false; + $config['syslog']['portalauth'] = $_POST['portalauth'] ? true : false; + $config['syslog']['vpn'] = $_POST['vpn'] ? true : false; + $config['syslog']['apinger'] = $_POST['apinger'] ? true : false; + $config['syslog']['relayd'] = $_POST['relayd'] ? true : false; + $config['syslog']['hostapd'] = $_POST['hostapd'] ? true : false; + $config['syslog']['logall'] = $_POST['logall'] ? true : false; + $config['syslog']['system'] = $_POST['system'] ? true : false; + $config['syslog']['disablelocallogging'] = $_POST['disablelocallogging'] ? true : false; + $config['syslog']['enable'] = $_POST['enable'] ? true : false; + $oldnologdefaultblock = isset($config['syslog']['nologdefaultblock']); + $oldnologdefaultpass = isset($config['syslog']['nologdefaultpass']); + $oldnologbogons = isset($config['syslog']['nologbogons']); + $oldnologprivatenets = isset($config['syslog']['nologprivatenets']); + $oldnologlighttpd = isset($config['syslog']['nologlighttpd']); + $config['syslog']['nologdefaultblock'] = $_POST['logdefaultblock'] ? false : true; + $config['syslog']['nologdefaultpass'] = $_POST['logdefaultpass'] ? true : false; + $config['syslog']['nologbogons'] = $_POST['logbogons'] ? false : true; + $config['syslog']['nologprivatenets'] = $_POST['logprivatenets'] ? false : true; + $config['syslog']['nologlighttpd'] = $_POST['loglighttpd'] ? false : true; + $config['syslog']['rawfilter'] = $_POST['rawfilter'] ? true : false; + if (is_numeric($_POST['filterdescriptions']) && $_POST['filterdescriptions'] > 0) + $config['syslog']['filterdescriptions'] = $_POST['filterdescriptions']; + else + unset($config['syslog']['filterdescriptions']); + if($config['syslog']['enable'] == false) { + unset($config['syslog']['remoteserver']); + unset($config['syslog']['remoteserver2']); + unset($config['syslog']['remoteserver3']); + } + + write_config(); + + $retval = 0; + $retval = system_syslogd_start(); + if (($oldnologdefaultblock !== isset($config['syslog']['nologdefaultblock'])) + || ($oldnologdefaultpass !== isset($config['syslog']['nologdefaultpass'])) + || ($oldnologbogons !== isset($config['syslog']['nologbogons'])) + || ($oldnologprivatenets !== isset($config['syslog']['nologprivatenets']))) + $retval |= filter_configure(); + + $savemsg = get_std_save_message($retval); + + if ($oldnologlighttpd !== isset($config['syslog']['nologlighttpd'])) { + ob_flush(); + flush(); + log_error(gettext("webConfigurator configuration has changed. Restarting webConfigurator.")); + send_event("service restart webgui"); + $savemsg .= "
    " . gettext("WebGUI process is restarting."); + } + + filter_pflog_start(true); + } +} + +$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Settings")); +$closehead = false; +include("head.inc"); + +?> + + + + + + +
    + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Forward/Reverse Display /> +
    GUI Log Entries to Display +
    +
    Log File Size (Bytes) +
    + +

    + + + . + . +
    Log Firewall Default Blocks + /> +
    + +
    + /> +
    + +
    + /> +
    +
    + /> +
    +
    Web Server Log /> +
    +
    Raw Logs /> +
    +
    Filter descriptions + + +
    + +
    Local Logging onclick="enable_change(false)" /> + +
    Reset Logs + " onclick="return confirm('')" /> +

    + +
     
    + +
    + + +

    + +
    + +
    + +
    onclick="enable_change(false)" /> +
    + + + + + + + + + + + + + + + + + +
     
    +
    + onclick="check_everything();" /> +

    + /> +
    + /> +
    + /> +
    + /> +
    + /> +
    + /> +
    + /> +
    + /> +
    +
      " onclick="enable_change(true)" /> +
     
    + . +
    +
    +
    +
    + + + + diff --git a/usr/local/www/diag_logs_vpn.php b/usr/local/www/diag_logs_vpn.php new file mode 100755 index 000000000..d618a5029 --- /dev/null +++ b/usr/local/www/diag_logs_vpn.php @@ -0,0 +1,194 @@ +#!/usr/local/bin/php +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/sbin/fifolog_reader /usr/local/sbin/clog + pfSense_MODULE: vpn +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-logs-pptpvpn +##|*NAME=Diagnostics: Logs: VPN page +##|*DESCR=Allow access to the 'Diagnostics: Logs: VPN' page. +##|*MATCH=diag_logs_vpn.php* +##|-PRIV + +$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("VPN")); +require("guiconfig.inc"); +require_once("vpn.inc"); + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if (htmlspecialchars($_POST['vpntype'])) + $vpntype = htmlspecialchars($_POST['vpntype']); +elseif (htmlspecialchars($_GET['vpntype'])) + $vpntype = htmlspecialchars($_GET['vpntype']); +else + $vpntype = "pptp"; + +if (htmlspecialchars($_POST['mode'])) + $mode = htmlspecialchars($_POST['mode']); +elseif (htmlspecialchars($_GET['mode'])) + $mode = htmlspecialchars($_GET['mode']); +else + $mode = "login"; + +switch ($vpntype) { + case 'pptp': + $logname = "pptps"; + break; + case 'poes': + $logname = "poes"; + break; + case 'l2tp': + $logname = "l2tps"; + break; +} + +if ($_POST['clear']) { + if ($mode != "raw") + clear_log_file("/var/log/vpn.log"); + else + clear_log_file("/var/log/{$logname}.log"); +} + +function dump_clog_vpn($logfile, $tail) { + global $g, $config, $vpntype; + + $sor = isset($config['syslog']['reverse']) ? "-r" : ""; + + $logarr = ""; + + if(isset($config['system']['usefifolog'])) + exec("/usr/sbin/fifolog_reader " . escapeshellarg($logfile) . " | tail {$sor} -n " . $tail, $logarr); + else + exec("/usr/local/sbin/clog " . escapeshellarg($logfile) . " | tail {$sor} -n " . $tail, $logarr); + + foreach ($logarr as $logent) { + $logent = preg_split("/\s+/", $logent, 6); + $llent = explode(",", $logent[5]); + $iftype = substr($llent[1], 0, 4); + if ($iftype != $vpntype) + continue; + echo "\n"; + echo "" . htmlspecialchars(join(" ", array_slice($logent, 0, 3))) . "\n"; + + if ($llent[0] == "login") + echo "\"in\"\n"; + else + echo "\"out\"\n"; + + echo "" . htmlspecialchars($llent[3]) . "\n"; + echo "" . htmlspecialchars($llent[2]) . " \n"; + echo "\n"; + } +} + +include("head.inc"); + +?> + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + + + + + + +
    +
    +
    + + + " /> +
    +
    + + + diff --git a/usr/local/www/diag_logs_wireless.php b/usr/local/www/diag_logs_wireless.php new file mode 100644 index 000000000..aa5593685 --- /dev/null +++ b/usr/local/www/diag_logs_wireless.php @@ -0,0 +1,112 @@ +. + Copyright (C) 2008 Seth Mos . + Copyright (C) 2011 Jim Pingle . + 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. +*/ + +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-status-systemlogs-wireless +##|*NAME=Status: System logs: Wireless page +##|*DESCR=Allow access to the 'Status: System logs: System: Wireless' page. +##|*MATCH=diag_logs_wireless.php* +##|-PRIV + +require("guiconfig.inc"); + +$wireless_logfile = "{$g['varlog_path']}/wireless.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($wireless_logfile); + +$pgtitle = array(gettext("Status"),gettext("System logs"),gettext("Wireless")); +$shortcut_section = "wireless"; +include("head.inc"); + +?> + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + +
    +

    +" />
    +
    +
    + + + diff --git a/usr/local/www/diag_nanobsd.php b/usr/local/www/diag_nanobsd.php new file mode 100644 index 000000000..61bcfa7bf --- /dev/null +++ b/usr/local/www/diag_nanobsd.php @@ -0,0 +1,284 @@ + + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /sbin/mount /sbin/glabel /usr/bin/grep /usr/bin/cut /usr/bin/head /bin/cp + pfSense_BUILDER_BINARIES: /usr/sbin/boot0cfg /bin/mkdir /sbin/fsck_ufs /sbin/mount /bin/dd /sbin/tunefs + pfSense_MODULE: nanobsd +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-nanobsd +##|*NAME=Diagnostics: NanoBSD +##|*DESCR=Allow access to the 'Diagnostics: NanoBSD' page. +##|*MATCH=diag_nanobsd.php* +##|-PRIV + +ini_set('zlib.output_compression', 0); +ini_set('implicit_flush', 1); +ini_set('max_input_time', '9999'); + +require_once("guiconfig.inc"); +require_once("config.inc"); + +$pgtitle = array(gettext("Diagnostics"), gettext("NanoBSD")); +include("head.inc"); + +// Survey slice info +global $SLICE, $OLDSLICE, $TOFLASH, $COMPLETE_PATH, $COMPLETE_BOOT_PATH; +global $GLABEL_SLICE, $UFS_ID, $OLD_UFS_ID, $BOOTFLASH; +global $BOOT_DEVICE, $REAL_BOOT_DEVICE, $BOOT_DRIVE, $ACTIVE_SLICE; +nanobsd_detect_slice_info(); + +?> + +"> + + + + + + $statusmsg +

      +

    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

    +EOF; + nanobsd_switch_boot_slice(); + $savemsg = gettext("The boot slice has been set to") . " " . nanobsd_get_active_slice(); + // Survey slice info + nanobsd_detect_slice_info(); + +} + +if($_POST['destslice']) { + $statusmsg = gettext("Duplicating slice. Please wait, this will take a moment..."); +echo << + + $statusmsg +

      +

    +EOF; + if(nanobsd_clone_slice($_POST['destslice'])) { + $savemsg = gettext("The slice has been duplicated.") . "

    " . gettext("If you would like to boot from this newly duplicated slice please set it using the bootup information area."); + } else { + $savemsg = gettext("There was an error while duplicating the slice. Operation aborted."); + } + // Re-Survey slice info + nanobsd_detect_slice_info(); +} + +if ($_POST['changero']) { + if (is_writable("/")) { + conf_mount_ro(); + } else { + conf_mount_rw(); + } +} + +if ($_POST['setrw']) { + conf_mount_rw(); + if (isset($_POST['nanobsd_force_rw'])) + $config['system']['nanobsd_force_rw'] = true; + else + unset($config['system']['nanobsd_force_rw']); + + write_config("Changed Permanent Read/Write Setting"); + conf_mount_ro(); +} + +if ($savemsg) + print_info_box($savemsg) + +?> + + + + + + + +
    + +
    +
    + + +   + + +
      +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +

    +
    + +
    +
     
    Current Read/Write Status: +
    + "; + } else { + echo gettext("Read-Only"); + if (!isset($config['system']['nanobsd_force_rw'])) + echo "
    "; + } ?> +
    +
    +
    Permanent Read/Write: +
    + > +
    +
    +
     
    +
    + + +
    + +
    +
    +
     
    + Advanced, Miscellaneous tab")?>. +
     
    + "; + echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/upgrade_log.txt")); + echo "\nFile list:\n"; + echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/file_upgrade_log.txt")); + echo "\nMisc log:\n"; + echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/firmware_update_misc_log.txt")); + echo "\nfdisk/bsdlabel log:\n"; + echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/fdisk_upgrade_log.txt")); + echo ""; + } else { + echo "
    "; + echo ""; + } + ?> +
     
    +

    +
    + + + + +"; +echo "jQuery('#loading').html('');"; +echo ""; + +?> diff --git a/usr/local/www/diag_ndp.php b/usr/local/www/diag_ndp.php new file mode 100644 index 000000000..2a290d428 --- /dev/null +++ b/usr/local/www/diag_ndp.php @@ -0,0 +1,178 @@ + + Copyright (C) 2011 Seth Mos + + + originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2005 Paul Taylor (paultaylor@winndixie.com) and Manuel Kasper . + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /bin/cat /usr/sbin/arp + pfSense_MODULE: arp +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-ndptable +##|*NAME=Diagnostics: NDP Table page +##|*DESCR=Allow access to the 'Diagnostics: NDP Table' page. +##|*MATCH=diag_ndp.php* +##|-PRIV + +@ini_set('zlib.output_compression', 0); +@ini_set('implicit_flush', 1); + +require("guiconfig.inc"); + +exec("/usr/sbin/ndp -na", $rawdata); + +$i = 0; + +/* if list */ +$ifdescrs = get_configured_interface_with_descr(); + +foreach ($ifdescrs as $key =>$interface) { + $hwif[$config['interfaces'][$key]['if']] = $interface; +} + +/* Array ( [0] => Neighbor [1] => Linklayer [2] => Address +[3] => Netif [4] => Expire [5] => S +[6] => Flags ) */ +$data = array(); +array_shift($rawdata); +foreach ($rawdata as $line) { + $elements = preg_split('/[ ]+/', $line); + + $ndpent = array(); + $ndpent['ipv6'] = trim($elements[0]); + $ndpent['mac'] = trim($elements[1]); + $ndpent['interface'] = trim($elements[2]); + $data[] = $ndpent; +} + +/* FIXME: Not ipv6 compatible dns resolving. PHP needs fixing */ +function _getHostName($mac,$ip) +{ + if(is_ipaddr($ip)) { + list($ip, $scope) = explode("%", $ip); + if(gethostbyaddr($ip) <> "" and gethostbyaddr($ip) <> $ip) + return gethostbyaddr($ip); + else + return ""; + } +} + +// Resolve hostnames and replace Z_ with "". The intention +// is to sort the list by hostnames, alpha and then the non +// resolvable addresses will appear last in the list. +foreach ($data as &$entry) { + $dns = trim(_getHostName($entry['mac'], $entry['ipv6'])); + if(trim($dns)) + $entry['dnsresolve'] = "$dns"; + else + $entry['dnsresolve'] = "Z_ "; +} + +// Sort the data alpha first +$data = msort($data, "dnsresolve"); + +// Load MAC-Manufacturer table +$mac_man = load_mac_manufacturer_table(); + +$pgtitle = array(gettext("Diagnostics"),gettext("NDP Table")); +include("head.inc"); + +?> + + + + + +

    + loader +

     

    +
    + + + + + + +
    + + + + + + + + + + + + + + + + +
    + {$mac_man[$mac_hi]}"; } + ?> + + + + +
    +
    + + + + + + diff --git a/usr/local/www/diag_packet_capture.php b/usr/local/www/diag_packet_capture.php new file mode 100644 index 000000000..38cb8c274 --- /dev/null +++ b/usr/local/www/diag_packet_capture.php @@ -0,0 +1,473 @@ + 0) ? get_host_boolean($value, $host) : ""; + if (is_ipaddr($host)) + return "{$andor}host {$not}" . $host; + elseif (is_subnet($host)) + return "{$andor}net {$not}" . $host; + else + return ""; +} + +if ($_POST['downloadbtn'] == gettext("Download Capture")) + $nocsrf = true; + +$pgtitle = array(gettext("Diagnostics"), gettext("Packet Capture")); +require_once("guiconfig.inc"); +require_once("pfsense-utils.inc"); + +$fp = "/root/"; +$fn = "packetcapture.cap"; +$snaplen = 0;//default packet length +$count = 100;//default number of packets to capture + +$fams = array('ip', 'ip6'); +$protos = array('icmp', 'icmp6', 'tcp', 'udp', 'arp', 'carp', 'esp', + '!icmp', '!icmp6', '!tcp', '!udp', '!arp', '!carp', '!esp'); + +$input_errors = array(); + +$interfaces = get_configured_interface_with_descr(); +if (isset($config['ipsec']['enable'])) + $interfaces['ipsec'] = "IPsec"; +foreach (array('server', 'client') as $mode) { + if (is_array($config['openvpn']["openvpn-{$mode}"])) { + foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) { + if (!isset($setting['disable'])) { + $interfaces['ovpn' . substr($mode, 0, 1) . $setting['vpnid']] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']); + } + } + } +} + +if ($_POST) { + $host = $_POST['host']; + $selectedif = $_POST['interface']; + $count = $_POST['count']; + $snaplen = $_POST['snaplen']; + $port = $_POST['port']; + $detail = $_POST['detail']; + $fam = $_POST['fam']; + $proto = $_POST['proto']; + + if (!array_key_exists($selectedif, $interfaces)) { + $input_errors[] = gettext("Invalid interface."); + } + if ($fam !== "" && $fam !== "ip" && $fam !== "ip6") { + $input_errors[] = gettext("Invalid address family."); + } + if ($proto !== "" && !in_array(strip_not($proto), $protos)) { + $input_errors[] = gettext("Invalid protocol."); + } + + if ($host != "") { + $host_string = str_replace(array(" ", "|", ","), array("", "#|", "#+"), $host); + if (strpos($host_string, '#') === false) { + $hosts = array($host); + } else { + $hosts = explode('#', $host_string); + } + foreach ($hosts as $h) { + if (!is_subnet(strip_host_logic($h)) && !is_ipaddr(strip_host_logic($h))) { + $input_errors[] = sprintf(gettext("A valid IP address or CIDR block must be specified. [%s]"), $h); + } + } + } + if ($port != "") { + if (!is_port(strip_not($port))) { + $input_errors[] = gettext("Invalid value specified for port."); + } + } + if ($snaplen == "") { + $snaplen = 0; + } else { + if (!is_numeric($snaplen) || $snaplen < 0) { + $input_errors[] = gettext("Invalid value specified for packet length."); + } + } + if ($count == "") { + $count = 0; + } else { + if (!is_numeric($count) || $count < 0) { + $input_errors[] = gettext("Invalid value specified for packet count."); + } + } + + if (!count($input_errors)) { + $do_tcpdump = true; + + conf_mount_rw(); + + if ($_POST['promiscuous']) { + //if promiscuous mode is checked + $disablepromiscuous = ""; + } else { + //if promiscuous mode is unchecked + $disablepromiscuous = "-p"; + } + + if ($_POST['dnsquery']) { + //if dns lookup is checked + $disabledns = ""; + } else { + //if dns lookup is unchecked + $disabledns = "-n"; + } + + if ($_POST['startbtn'] != "" ) { + $action = gettext("Start"); + + //delete previous packet capture if it exists + if (file_exists($fp.$fn)) + unlink ($fp.$fn); + + } elseif ($_POST['stopbtn']!= "") { + $action = gettext("Stop"); + $processes_running = trim(shell_exec("/bin/ps axw -O pid= | /usr/bin/grep tcpdump | /usr/bin/grep {$fn} | /usr/bin/egrep -v '(pflog|grep)'")); + + //explode processes into an array, (delimiter is new line) + $processes_running_array = explode("\n", $processes_running); + + //kill each of the packetcapture processes + foreach ($processes_running_array as $process) { + $process_id_pos = strpos($process, ' '); + $process_id = substr($process, 0, $process_id_pos); + exec("kill $process_id"); + } + + } elseif ($_POST['downloadbtn']!= "") { + //download file + $fs = filesize($fp.$fn); + header("Content-Type: application/octet-stream"); + header("Content-Disposition: attachment; filename=$fn"); + header("Content-Length: $fs"); + readfile($fp.$fn); + exit; + } + } +} else { + $do_tcpdump = false; +} + +include("head.inc"); ?> + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + /> +
    +
    : +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    " . gettext("Enter 0 (zero) for no count limit.");?> +
    + +
    " . + gettext("Note:") . " " . + gettext("This option does not affect the level of detail when downloading the packet capture.");?> +
    + /> +
    +
    : +
      + "; + else { + echo " "; + } + if (file_exists($fp.$fn) and $processisrunning != true) { + echo " "; + echo ""; + echo "
    " . gettext("The packet capture file was last updated:") . " " . date("F jS, Y g:i:s a.", filemtime($fp.$fn)); + } +?> +
    + + + + + +
    +"; + if ($processisrunning == true) + echo("" . gettext("Packet Capture is running.") . "
    "); + + if ($do_tcpdump) { + $matches = array(); + + if (in_array($fam, $fams)) + $matches[] = $fam; + + if (in_array($proto, $protos)) { + $matches[] = fixup_not($proto); + } + + if ($port != "") + $matches[] = "port ".fixup_not($port); + + if ($host != "") { + $hostmatch = ""; + $hostcount = 0; + foreach ($hosts as $h) { + $h = fixup_host($h, $hostcount++); + if (!empty($h)) + $hostmatch .= " " . $h; + } + if (!empty($hostmatch)) + $matches[] = "({$hostmatch})"; + } + + if ($count != "0" ) { + $searchcount = "-c " . $count; + } else { + $searchcount = ""; + } + + $selectedif = convert_friendly_interface_to_real_interface_name($selectedif); + + if ($action == gettext("Start")) { + $matchstr = implode($matches, " and "); + echo("" . gettext("Packet Capture is running.") . "
    "); + $cmd = "/usr/sbin/tcpdump -i {$selectedif} {$disablepromiscuous} {$searchcount} -s {$snaplen} -w {$fp}{$fn} " . escapeshellarg($matchstr); + // Debug + //echo $cmd; + mwexec_bg ($cmd); + } else { + //action = stop + echo("" . gettext("Packet Capture stopped.") . "

    " . gettext("Packets Captured:") . "

    "); +?> + + + +   +
    +
    + + + + diff --git a/usr/local/www/diag_patterns.php b/usr/local/www/diag_patterns.php new file mode 100644 index 000000000..680f76fbd --- /dev/null +++ b/usr/local/www/diag_patterns.php @@ -0,0 +1,96 @@ + + + + +" . $ulmsg . "

    \n"; ?> +
    +
    + + + + + + + + + + + + + + + +
    + +
        + " /> +
    +
    +
    + + + diff --git a/usr/local/www/diag_pf_info.php b/usr/local/www/diag_pf_info.php new file mode 100644 index 000000000..de5766798 --- /dev/null +++ b/usr/local/www/diag_pf_info.php @@ -0,0 +1,113 @@ +"; + $text .= `/sbin/pfctl -vvsm`; + $text .= "

    "; + $text .= `/sbin/pfctl -vvst`; + $text .= "

    "; + $text .= `/sbin/pfctl -vvsI`; + echo $text; + exit; +} + +include("head.inc"); + +?> + + + +

    +"; + print_info_box($savemsg); + echo "
    "; + } + if ($input_errors) + print_input_errors($input_errors); +?> + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    +
    + + + + diff --git a/usr/local/www/diag_ping.php b/usr/local/www/diag_ping.php new file mode 100644 index 000000000..d74feacee --- /dev/null +++ b/usr/local/www/diag_ping.php @@ -0,0 +1,193 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /sbin/ping /sbin/ping6 + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-ping +##|*NAME=Diagnostics: Ping page +##|*DESCR=Allow access to the 'Diagnostics: Ping' page. +##|*MATCH=diag_ping.php* +##|-PRIV + +$allowautocomplete = true; +$pgtitle = array(gettext("Diagnostics"), gettext("Ping")); +require_once("guiconfig.inc"); + + +define('MAX_COUNT', 10); +define('DEFAULT_COUNT', 3); + +if ($_POST || $_REQUEST['host']) { + unset($input_errors); + unset($do_ping); + + /* input validation */ + $reqdfields = explode(" ", "host count"); + $reqdfieldsn = array(gettext("Host"),gettext("Count")); + do_input_validation($_REQUEST, $reqdfields, $reqdfieldsn, $input_errors); + + if (($_REQUEST['count'] < 1) || ($_REQUEST['count'] > MAX_COUNT)) { + $input_errors[] = sprintf(gettext("Count must be between 1 and %s"), MAX_COUNT); + } + + $host = trim($_REQUEST['host']); + $ipproto = $_REQUEST['ipproto']; + if (($ipproto == "ipv4") && is_ipaddrv6($host)) + $input_errors[] = gettext("When using IPv4, the target host must be an IPv4 address or hostname."); + if (($ipproto == "ipv6") && is_ipaddrv4($host)) + $input_errors[] = gettext("When using IPv6, the target host must be an IPv6 address or hostname."); + + if (!$input_errors) { + $do_ping = true; + $sourceip = $_REQUEST['sourceip']; + $count = $_POST['count']; + if (preg_match('/[^0-9]/', $count) ) + $count = DEFAULT_COUNT; + } +} +if (!isset($do_ping)) { + $do_ping = false; + $host = ''; + $count = DEFAULT_COUNT; +} + +include("head.inc"); ?> + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + +
    + +
      + " /> +
    + "; + echo "" . gettext("Ping output") . ":
    "; +?> + +"; + $ifscope = ''; + $command = "/sbin/ping"; + if ($ipproto == "ipv6") { + $command .= "6"; + $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ipv6($sourceip); + if (is_linklocal($ifaddr)) + $ifscope = get_ll_scope($ifaddr); + } else { + $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ip($sourceip); + } + if ($ifaddr && (is_ipaddr($host) || is_hostname($host))) { + $srcip = "-S" . escapeshellarg($ifaddr); + if (is_linklocal($host) && !strstr($host, "%") && !empty($ifscope)) + $host .= "%{$ifscope}"; + } + + $cmd = "{$command} {$srcip} -c" . escapeshellarg($count) . " " . escapeshellarg($host); + //echo "Ping command: {$cmd}\n"; + system($cmd); + echo(' '); + } + ?> +
      
    +
    +
    + + + diff --git a/usr/local/www/diag_pkglogs.php b/usr/local/www/diag_pkglogs.php new file mode 100755 index 000000000..b1d65cbcd --- /dev/null +++ b/usr/local/www/diag_pkglogs.php @@ -0,0 +1,138 @@ + + arpwatch + arpwatch + + + + /var/log/arpwatch.log + +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/bin/netstat + pfSense_MODULE: pkgs +*/ + +##|+PRIV +##|*IDENT=page-status-packagelogs +##|*NAME=Status: Package logs page +##|*DESCR=Allow access to the 'Status: Package logs' page. +##|*MATCH=diag_pkglogs.php* +##|-PRIV + +require("guiconfig.inc"); +require("pkg-utils.inc"); + +if(!($nentries = $config['syslog']['nentries'])) $nentries = 50; + +//if ($_POST['clear']) +// clear_log_file($logfile); + +$i = 0; +$pkgwithlogging = false; +$apkg = $_GET['pkg']; +if(!$apkg) { // If we aren't looking for a specific package, locate the first package that handles logging. + if($config['installedpackages']['package'] <> "") { + foreach($config['installedpackages']['package'] as $package) { + if(is_array($package['logging'])) { + $pkgwithlogging = true; + $apkg = $package['name']; + $apkgid = $i; + break; + } + $i++; + } + } +} elseif($apkg) { + $apkgid = get_pkg_id($apkg); + if ($apkgid != -1) { + $pkgwithlogging = true; + $i = $apkgid; + } +} + +$pgtitle = array(gettext("Status"),gettext("Package logs")); +include("head.inc"); + +?> + + + + +
    +
    '; + include("fend.inc"); + exit; + } + $tab_array = array(); + foreach($config['installedpackages']['package'] as $package) { + if(is_array($package['logging'])) { + if(!($logtab = $package['logging']['logtab'])) $logtab = $package['name']; + if($apkg == $package['name']) { + $curtab = $logtab; + $tab_array[] = array(sprintf(gettext("%s"),$logtab), true, "diag_pkglogs.php?pkg=".$package['name']); + } else { + $tab_array[] = array(sprintf(gettext("%s"),$logtab), false, "diag_pkglogs.php?pkg=".$package['name']); + } + } + } + display_top_tabs($tab_array); + ?> + + + +
    + + + + + +
    +
    + +
    + + + + + + diff --git a/usr/local/www/diag_resetstate.php b/usr/local/www/diag_resetstate.php new file mode 100644 index 000000000..bb8af7435 --- /dev/null +++ b/usr/local/www/diag_resetstate.php @@ -0,0 +1,136 @@ +. + 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. +*/ + +/* + pfSense_MODULE: filter +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-resetstate +##|*NAME=Diagnostics: Reset state page +##|*DESCR=Allow access to the 'Diagnostics: Reset state' page. +##|*MATCH=diag_resetstate.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("filter.inc"); + +if ($_POST) { + $savemsg = ""; + if ($_POST['statetable']) { + filter_flush_state_table(); + if ($savemsg) + $savemsg .= " "; + $savemsg .= gettext("The state table has been flushed successfully."); + } + if ($_POST['sourcetracking']) { + mwexec("/sbin/pfctl -F Sources"); + if ($savemsg) + $savemsg .= "
    "; + $savemsg .= gettext("The source tracking table has been flushed successfully."); + } +} + +$pgtitle = array(gettext("Diagnostics"), gettext("Reset state")); +include("head.inc"); + +?> + + + + +
    + + + +
    + +
    + + + + + + + + + + + + + + + + +
     

    + +
    +
    +
    +
    +

    +
    +

    +
     

    + +
    +
    +
    +
    +

    +

    +
      + " /> +
    +
    +
    + + + diff --git a/usr/local/www/diag_routes.php b/usr/local/www/diag_routes.php new file mode 100644 index 000000000..d62e55af9 --- /dev/null +++ b/usr/local/www/diag_routes.php @@ -0,0 +1,237 @@ + 0) + $netstat .= " | /usr/bin/head -n {$_REQUEST['limit']}"; + + echo htmlspecialchars_decode(shell_exec($netstat)); + + exit; +} + +$pgtitle = array(gettext("Diagnostics"),gettext("Routing tables")); +$shortcut_section = "routing"; + +include('head.inc'); + +?> + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + /> +
    + +
    + +
    + +
    + +
    + +
      +" /> +
    +
    + +
    +
    + + + + + + + + +
    IPv4
    + + + + + + + +
    IPv6
    + +
    + + + + + diff --git a/usr/local/www/diag_smart.php b/usr/local/www/diag_smart.php new file mode 100644 index 000000000..2cbc60bf1 --- /dev/null +++ b/usr/local/www/diag_smart.php @@ -0,0 +1,457 @@ + + + + + + +' . gettext("PASSED") . '
    '; + $replacements[1] = '' . gettext("FAILED") . ''; + $replacements[2] = '' . gettext("Warning") . ''; + ksort($patterns); + ksort($replacements); + return preg_replace($patterns, $replacements, $string); +} + +// Edits smartd.conf file, adds or removes email for failed disk reporting +function update_email($email) +{ + // Did they pass an email? + if(!empty($email)) + { + // Put it in the smartd.conf file + shell_exec("/usr/bin/sed -i old 's/^DEVICESCAN.*/DEVICESCAN -H -m " . escapeshellarg($email) . "/' /usr/local/etc/smartd.conf"); + } + // Nope + else + { + // Remove email flags in smartd.conf + shell_exec("/usr/bin/sed -i old 's/^DEVICESCAN.*/DEVICESCAN/' /usr/local/etc/smartd.conf"); + } +} + +function smartmonctl($action) +{ + global $start_script; + shell_exec($start_script . escapeshellarg($action)); +} + +// What page, aka. action is being wanted +// If they "get" a page but don't pass all arguments, smartctl will throw an error +$action = (isset($_POST['action']) ? $_POST['action'] : $_GET['action']); +$targetdev = basename($_POST['device']); +if (!file_exists('/dev/' . $targetdev)) { + echo "Device does not exist, bailing."; + return; +} +switch($action) { + // Testing devices + case 'test': + { + $test = $_POST['testType']; + if (!in_array($test, $valid_test_types)) { + echo "Invalid test type, bailing."; + return; + } + $output = add_colors(shell_exec($smartctl . " -t " . escapeshellarg($test) . " /dev/" . escapeshellarg($targetdev))); + echo '
    ' . $output . '
    +		
    + + + +
    +
    '; + break; + } + + // Info on devices + case 'info': + { + $type = $_POST['type']; + if (!in_array($type, $valid_info_types)) { + echo "Invalid info type, bailing."; + return; + } + $output = add_colors(shell_exec($smartctl . " -" . escapeshellarg($type) . " /dev/" . escapeshellarg($targetdev))); + echo "
    $output
    "; + break; + } + + // View logs + case 'logs': + { + $type = $_POST['type']; + if (!in_array($type, $valid_log_types)) { + echo "Invalid log type, bailing."; + return; + } + $output = add_colors(shell_exec($smartctl . " -l " . escapeshellarg($type) . " /dev/" . escapeshellarg($targetdev))); + echo "
    $output
    "; + break; + } + + // Abort tests + case 'abort': + { + $output = shell_exec($smartctl . " -X /dev/" . escapeshellarg($targetdev)); + echo "
    $output
    "; + break; + } + + // Config changes, users email in xml config and write changes to smartd.conf + case 'config': + { + if(isset($_POST['submit'])) + { + // DOES NOT WORK YET... + if($_POST['testemail']) + { +// FIXME shell_exec($smartd . " -M test -m " . $config['system']['smartmonemail']); + $savemsg = sprintf(gettext("Email sent to %s"), $config['system']['smartmonemail']); + smartmonctl("stop"); + smartmonctl("start"); + } + else + { + $config['system']['smartmonemail'] = $_POST['smartmonemail']; + write_config(); + + // Don't know what all this means, but it addes the config changed header when config is saved + $retval = 0; + config_lock(); + if(stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + config_unlock(); + + if($_POST['email']) + { + // Write the changes to the smartd.conf file + update_email($_POST['smartmonemail']); + } + + // Send sig HUP to smartd, rereads the config file + shell_exec("/usr/bin/killall -HUP smartd"); + } + } + // Was the config changed? if so , print the message + if ($savemsg) print_info_box($savemsg); + // Get users email from the xml file + $pconfig['smartmonemail'] = $config['system']['smartmonemail']; + + ?> + + + + + +
    + +
    + +
    + + + + + + + + + + + + + + +
    + +
      + + + " class="formbtn" /> +
    +
    + + +
    + + + + + + + + + + + + + + +
      + +
      + + + " class="formbtn" /> +
    +
    + + + + + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + +
      + + " class="formbtn" /> +
    +
    + +
    + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + +
      + + " class="formbtn" /> +
    +
    + +
    + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
      + + " class="formbtn" /> +
    +
    + +
    + + + + + + + + + + + + + + +
    + +
      + + " class="formbtn" onclick="return confirm('')" /> +
    +
    + + ' . gettext("Back") . ''; +} +?> +
    +" . $ulmsg . "

    \n"; ?> + + + + diff --git a/usr/local/www/diag_sockets.php b/usr/local/www/diag_sockets.php new file mode 100644 index 000000000..c3008d721 --- /dev/null +++ b/usr/local/www/diag_sockets.php @@ -0,0 +1,140 @@ + + + +
    + + + + + + + + + + +
    Information about listening sockets for both IPv4 and IPv6.
    For explanation about the meaning of the information listed for each socket click here.
    To show information about both listening and connected sockets click this.
    + + $table) { + $elements = ($tabindex == 0 ? 7 : 7); + $name = ($tabindex == 0 ? 'IPv4' : 'IPv6'); +?> + + + +
    + + $line) { + if ($i == 0) + $class = 'listhdrr'; + else + $class = 'listlr'; + + if (trim($line) == "") + continue; + print("\n"); + $j = 0; + foreach (explode(' ', $line) as $entry) { + if ($entry == '' || $entry == "ADDRESS") continue; + if ($i == 0) + print("\n"); + else + print("\n"); + if ($i > 0) + $class = 'listr'; + $j++; + } + print("\n"); + }?> +
    $entry$entry
    +
    + + +
    + + + + + + + + + + + + +
    Socket information explanation
    +This page show the output for the commands: "sockstat -4lL" and "sockstat -6lL".
    +Or in case of showing all sockets the output for: "sockstat -4" and "sockstat -6".
    +
    +The information listed for each socket is:
    USER The user who owns the socket.
    COMMAND The command which holds the socket.
    PID The process ID of the command which holds the socket.
    FD The file descriptor number of the socket.
    PROTO The transport protocol associated with the socket for Internet sockets, or the type of socket (stream or data-gram) for UNIX sockets.
    ADDRESS (UNIX sockets only) For bound sockets, this is the file-name of the socket. For other sockets, it is the name, PID and file descriptor number of the peer, or ``(none)'' if the socket is neither bound nor connected.
    LOCAL ADDRESS (Internet sockets only) The address the local end of the socket is bound to (see getsockname(2)).
    FOREIGN ADDRESS (Internet sockets only) The address the foreign end of the socket is bound to (see getpeername(2)).
    +
    + + + diff --git a/usr/local/www/diag_states_summary.php b/usr/local/www/diag_states_summary.php new file mode 100644 index 000000000..3c5e297e4 --- /dev/null +++ b/usr/local/www/diag_states_summary.php @@ -0,0 +1,201 @@ + 0) { + foreach($states as $line) { + $line_split = preg_split("/\s+/", $line); + $iface = array_shift($line_split); + $proto = array_shift($line_split); + $state = array_pop($line_split); + $info = implode(" ", $line_split); + + /* Handle NAT cases + Replaces an external IP + NAT by the internal IP */ + if (strpos($info, ') ->') !== FALSE) { + /* Outbound NAT */ + $info = preg_replace('/(\S+) \((\S+)\)/U', "$2", $info); + } elseif (strpos($info, ') <-') !== FALSE) { + /* Inbound NAT/Port Forward */ + $info = preg_replace('/(\S+) \((\S+)\)/U', "$1", $info); + } + + /* break up info and extract $srcip and $dstip */ + $ends = preg_split("/\?/", $info); + + if (strpos($info, '->') === FALSE) { + $srcinfo = $ends[count($ends) - 1]; + $dstinfo = $ends[0]; + } else { + $srcinfo = $ends[0]; + $dstinfo = $ends[count($ends) - 1]; + } + + /* Handle IPv6 */ + $parts = explode(":", $srcinfo); + $partcount = count($parts); + if ($partcount <= 2) { + $srcip = trim($parts[0]); + $srcport = trim($parts[1]); + } else { + preg_match("/([0-9a-f:]+)(\[([0-9]+)\])?/i", $srcinfo, $matches); + $srcip = $matches[1]; + $srcport = trim($matches[3]); + } + + $parts = explode(":", $dstinfo); + $partcount = count($parts); + if ($partcount <= 2) { + $dstip = trim($parts[0]); + $dstport = trim($parts[1]); + } else { + preg_match("/([0-9a-f:]+)(\[([0-9]+)\])?/i", $dstinfo, $matches); + $dstip = $matches[1]; + $dstport = trim($matches[3]); + } + + addipinfo($srcipinfo, $srcip, $proto, $srcport, $dstport); + addipinfo($dstipinfo, $dstip, $proto, $srcport, $dstport); + addipinfo($pairipinfo, "{$srcip} -> {$dstip}", $proto, $srcport, $dstport); + + addipinfo($allipinfo, $srcip, $proto, $srcport, $dstport); + addipinfo($allipinfo, $dstip, $proto, $srcport, $dstport); + + } +} + +function sort_by_ip($a, $b) { + return ip2ulong($a) < ip2ulong($b) ? -1 : 1; +} + +function build_port_info($portarr, $proto) { + if (!$portarr) + return ''; + $ports = array(); + asort($portarr); + foreach (array_reverse($portarr, TRUE) as $port => $count) { + $str = ""; + $service = getservbyport($port, strtolower($proto)); + $port = "{$proto}/{$port}"; + if ($service) + $port = "{$port} ({$service})"; + $ports[] = "{$port}: {$count}"; + } + return implode($ports, ', '); +} + +function print_summary_table($label, $iparr, $sort = TRUE) { ?> + +

    + + + + + + + + + + $ipinfo) { ?> + + + + + + + + + $protoinfo) { ?> + + + + + + + + + + + +
    # #
        
      
    + +"; +include("fbegin.inc"); + + +print_summary_table(gettext("By Source IP"), $srcipinfo); +print_summary_table(gettext("By Destination IP"), $dstipinfo); +print_summary_table(gettext("Total per IP"), $allipinfo); +print_summary_table(gettext("By IP Pair"), $pairipinfo, FALSE); +?> + + + + diff --git a/usr/local/www/diag_system_activity.php b/usr/local/www/diag_system_activity.php new file mode 100644 index 000000000..cc5cc694a --- /dev/null +++ b/usr/local/www/diag_system_activity.php @@ -0,0 +1,110 @@ + + + + +
    +"; + print_info_box($savemsg); + echo "
    "; + } + if ($input_errors) + print_input_errors($input_errors); +?> + + + + +
    + + + + +
    + + +
    +
    + +
    +
    +
    +
    + + + + diff --git a/usr/local/www/diag_system_pftop.php b/usr/local/www/diag_system_pftop.php new file mode 100644 index 000000000..2afcd7b7a --- /dev/null +++ b/usr/local/www/diag_system_pftop.php @@ -0,0 +1,214 @@ + + + +
    + +
    +"; + print_info_box($savemsg); + echo "
    "; + } + if ($input_errors) + print_input_errors($input_errors); +?> +
    + + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    + + + + +
    + + + + +
    +
    +
    +
    +
    +
    + +
    + + + + diff --git a/usr/local/www/diag_tables.php b/usr/local/www/diag_tables.php new file mode 100644 index 000000000..e181c80a0 --- /dev/null +++ b/usr/local/www/diag_tables.php @@ -0,0 +1,176 @@ + 89) + $loading = false; + sleep(1); + } + if($maxtimetowait < 90) + $savemsg = gettext("The bogons database has been updated."); +} + +exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T show", $entries); +exec("/sbin/pfctl -sT", $tables); + +include("head.inc"); +?> + + + + +
    + + + + + + +

    + + + + + + + + + + + + + +
    + + + + + delete + + +
    " . gettext("No entries exist in this table.") . "  " . " " . gettext(" the latest bogon data."); + else + echo "
    " . gettext("No entries exist in this table."); +?> + + 0) + if( ($tablename == "bogons") || ($tablename == "bogonsv6") ) { + $last_updated = exec('/usr/bin/grep -i -m 1 -E "^# last updated" /etc/' . escapeshellarg($tablename)); + echo "
     $count " . gettext("entries in this table.") . "  " . " " . gettext(" the latest bogon data.") . "
    " . "$last_updated"; + } + else + echo "
    " . gettext("Delete") . " " . gettext("all") . " " . "$count " . gettext("entries in this table."); +?> +
    +
    + + + + diff --git a/usr/local/www/diag_testport.php b/usr/local/www/diag_testport.php new file mode 100644 index 000000000..b04a9d74d --- /dev/null +++ b/usr/local/www/diag_testport.php @@ -0,0 +1,288 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/bin/nc + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-testport +##|*NAME=Diagnostics: Test Port +##|*DESCR=Allow access to the 'Diagnostics: Test Port' page. +##|*MATCH=diag_testport.php* +##|-PRIV + +$allowautocomplete = true; + +$pgtitle = array(gettext("Diagnostics"), gettext("Test Port")); +require("guiconfig.inc"); + +define('NC_TIMEOUT', 10); + +if ($_POST || $_REQUEST['host']) { + unset($input_errors); + unset($do_testport); + + /* input validation */ + $reqdfields = explode(" ", "host port"); + $reqdfieldsn = array(gettext("Host"),gettext("Port")); + do_input_validation($_REQUEST, $reqdfields, $reqdfieldsn, $input_errors); + + if (!is_ipaddr($_REQUEST['host']) && !is_hostname($_REQUEST['host'])) { + $input_errors[] = gettext("Please enter a valid IP or hostname."); + } + + if (!is_port($_REQUEST['port'])) { + $input_errors[] = gettext("Please enter a valid port number."); + } + + if (!is_numeric($_REQUEST['srcport']) || !is_port($_REQUEST['srcport'])) { + $input_errors[] = gettext("Please enter a valid source port number, or leave the field blank."); + } + + if (is_ipaddrv4($_REQUEST['host']) && ($_REQUEST['ipprotocol'] == "ipv6")) { + $input_errors[] = gettext("You cannot connect to an IPv4 address using IPv6."); + } + if (is_ipaddrv6($_REQUEST['host']) && ($_REQUEST['ipprotocol'] == "ipv4")) { + $input_errors[] = gettext("You cannot connect to an IPv6 address using IPv4."); + } + + if (!$input_errors) { + $do_testport = true; + $host = $_REQUEST['host']; + $sourceip = $_REQUEST['sourceip']; + $port = $_REQUEST['port']; + $srcport = $_REQUEST['srcport']; + $showtext = isset($_REQUEST['showtext']); + $ipprotocol = $_REQUEST['ipprotocol']; + $timeout = NC_TIMEOUT; + } +} +if (!isset($do_testport)) { + $do_testport = false; + $host = ''; + $port = ''; + $srcport = ''; + unset($showtext); +} + +include("head.inc"); ?> + + + +
    + +

    + +


    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +

    +
    + /> +

    +
    + +
    + +

    + +
      + " /> +
    + "; + echo "" . gettext("Port Test Results") . ":
    "; + ?> + + "; + $result = ""; + $nc_base_cmd = "/usr/bin/nc"; + $nc_args = "-w " . escapeshellarg($timeout); + if (!$showtext) + $nc_args .= " -z "; + if (!empty($srcport)) + $nc_args .= " -p " . escapeshellarg($srcport) . " "; + + /* Attempt to determine the interface address, if possible. Else try both. */ + if (is_ipaddrv4($host)) { + $ifaddr = ($sourceip == "any") ? "" : get_interface_ip($sourceip); + $nc_args .= " -4"; + } elseif (is_ipaddrv6($host)) { + if ($sourceip == "any") + $ifaddr = ""; + else if (is_linklocal($sourceip)) + $ifaddr = $sourceip; + else + $ifaddr = get_interface_ipv6($sourceip); + $nc_args .= " -6"; + } else { + switch ($ipprotocol) { + case "ipv4": + $ifaddr = get_interface_ip($sourceip); + $nc_ipproto = " -4"; + break; + case "ipv6": + $ifaddr = (is_linklocal($sourceip) ? $sourceip : get_interface_ipv6($sourceip)); + $nc_ipproto = " -6"; + break; + case "any": + $ifaddr = get_interface_ip($sourceip); + $nc_ipproto = (!empty($ifaddr)) ? " -4" : ""; + if (empty($ifaddr)) { + $ifaddr = (is_linklocal($sourceip) ? $sourceip : get_interface_ipv6($sourceip)); + $nc_ipproto = (!empty($ifaddr)) ? " -6" : ""; + } + break; + } + /* Netcat doesn't like it if we try to connect using a certain type of IP without specifying the family. */ + if (!empty($ifaddr)) { + $nc_args .= $nc_ipproto; + } elseif ($sourceip == "any") { + switch ($ipprotocol) { + case "ipv4": + $nc_ipproto = " -4"; + break; + case "ipv6": + $nc_ipproto = " -6"; + break; + } + $nc_args .= $nc_ipproto; + } + } + /* Only add on the interface IP if we managed to find one. */ + if (!empty($ifaddr)) { + $nc_args .= " -s " . escapeshellarg($ifaddr) . " "; + $scope = get_ll_scope($ifaddr); + if (!empty($scope) && !strstr($host, "%")) + $host .= "%{$scope}"; + } + + $nc_cmd = "{$nc_base_cmd} {$nc_args} " . escapeshellarg($host) . " " . escapeshellarg($port) . " 2>&1"; + exec($nc_cmd, $result, $retval); + //echo "NC CMD: {$nc_cmd}\n\n"; + if (empty($result)) { + if ($showtext) + echo gettext("No output received, or connection failed. Try with \"Show Remote Text\" unchecked first."); + else + echo gettext("Connection failed (Refused/Timeout)"); + } else { + if (is_array($result)) { + foreach ($result as $resline) { + echo htmlspecialchars($resline) . "\n"; + } + } else { + echo htmlspecialchars($result); + } + } + echo ' ' ; + } + ?> +
    +
    +
    + + + diff --git a/usr/local/www/diag_traceroute.php b/usr/local/www/diag_traceroute.php new file mode 100644 index 000000000..cbbc1cb7b --- /dev/null +++ b/usr/local/www/diag_traceroute.php @@ -0,0 +1,211 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/sbin/traceroute + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-traceroute +##|*NAME=Diagnostics: Traceroute page +##|*DESCR=Allow access to the 'Diagnostics: Traceroute' page. +##|*MATCH=diag_traceroute.php* +##|-PRIV + +require("guiconfig.inc"); + +$allowautocomplete = true; +$pgtitle = array(gettext("Diagnostics"),gettext("Traceroute")); +include("head.inc"); + +?> + + + MAX_TTL)) { + $input_errors[] = sprintf(gettext("Maximum number of hops must be between 1 and %s"), MAX_TTL); + } + $host = trim($_REQUEST['host']); + $ipproto = $_REQUEST['ipproto']; + if (($ipproto == "ipv4") && is_ipaddrv6($host)) + $input_errors[] = gettext("When using IPv4, the target host must be an IPv4 address or hostname."); + if (($ipproto == "ipv6") && is_ipaddrv4($host)) + $input_errors[] = gettext("When using IPv6, the target host must be an IPv6 address or hostname."); + + if (!$input_errors) { + $sourceip = $_REQUEST['sourceip']; + $do_traceroute = true; + $ttl = $_REQUEST['ttl']; + $resolve = $_REQUEST['resolve']; + } +} else + $resolve = true; + +if (!isset($do_traceroute)) { + $do_traceroute = false; + $host = ''; + $ttl = DEFAULT_TTL; +} + +?> + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + +
    + +
    + /> +
    + /> +
      + " /> +
    + + + +

    + +
    +
    +\n"; + echo "" . gettext("Traceroute output:") . "
    \n"; + ob_end_flush(); +?> + +"; + $useicmp = isset($_REQUEST['useicmp']) ? "-I" : ""; + $n = isset($resolve) ? "" : "-n"; + + $command = "/usr/sbin/traceroute"; + if ($ipproto == "ipv6") { + $command .= "6"; + $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ipv6($sourceip); + } else { + $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ip($sourceip); + } + + if ($ifaddr && (is_ipaddr($host) || is_hostname($host))) + $srcip = "-s " . escapeshellarg($ifaddr); + + $cmd = "{$command} {$n} {$srcip} -w 2 {$useicmp} -m " . escapeshellarg($ttl) . " " . escapeshellarg($host); + + //echo "Traceroute command: {$cmd}\n"; + system($cmd); + echo " "; +} ?> +
    +
    + + + diff --git a/usr/local/www/easyrule.php b/usr/local/www/easyrule.php new file mode 100644 index 000000000..90feca6e9 --- /dev/null +++ b/usr/local/www/easyrule.php @@ -0,0 +1,87 @@ + + + + + +
    + + + +
    +: +
    + +.

    +, > . +
    + +
    + diff --git a/usr/local/www/edit.php b/usr/local/www/edit.php new file mode 100644 index 000000000..17729b64c --- /dev/null +++ b/usr/local/www/edit.php @@ -0,0 +1,253 @@ + strlen($_POST['data'])) { + echo "|" . gettext("Error while writing file") . ".|"; + } else { + echo "|" . gettext("File successfully saved") . ".|"; + } + } + exit; + } + exit; +} + +$closehead = false; +require("head.inc"); +outputCSSFileInline("code-syntax-highlighter/SyntaxHighlighter.css"); +outputJavaScriptFileInline("filebrowser/browser.js"); +outputJavaScriptFileInline("javascript/base64.js"); + +?> + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + : + + + + +
    + +
    + + + + + + + + + +
    +
    + + +
    +
    + +
    + + + + + + + + + + + diff --git a/usr/local/www/exec.php b/usr/local/www/exec.php new file mode 100644 index 000000000..196350894 --- /dev/null +++ b/usr/local/www/exec.php @@ -0,0 +1,343 @@ +) + + 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. +*/ +/* + pfSense_MODULE: shell +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-command +##|*NAME=Diagnostics: Command page +##|*DESCR=Allow access to the 'Diagnostics: Command' page. +##|*MATCH=exec.php* +##|-PRIV + +$allowautocomplete = true; + +require("guiconfig.inc"); + +if (($_POST['submit'] == "Download") && file_exists($_POST['dlPath'])) { + session_cache_limiter('public'); + $fd = fopen($_POST['dlPath'], "rb"); + header("Content-Type: application/octet-stream"); + header("Content-Length: " . filesize($_POST['dlPath'])); + header("Content-Disposition: attachment; filename=\"" . + trim(htmlentities(basename($_POST['dlPath']))) . "\""); + if (isset($_SERVER['HTTPS'])) { + header('Pragma: '); + header('Cache-Control: '); + } else { + header("Pragma: private"); + header("Cache-Control: private, must-revalidate"); + } + + fpassthru($fd); + exit; +} else if (($_POST['submit'] == "Upload") && is_uploaded_file($_FILES['ulfile']['tmp_name'])) { + move_uploaded_file($_FILES['ulfile']['tmp_name'], "/tmp/" . $_FILES['ulfile']['name']); + $ulmsg = "Uploaded file to /tmp/" . htmlentities($_FILES['ulfile']['name']); + unset($_POST['txtCommand']); +} + +if($_POST) + conf_mount_rw(); + +// Function: is Blank +// Returns true or false depending on blankness of argument. + +function isBlank( $arg ) { return preg_match( "/^\s*$/", $arg ); } + + +// Function: Puts +// Put string, Ruby-style. + +function puts( $arg ) { echo "$arg\n"; } + + +// "Constants". + +$Version = ''; +$ScriptName = $REQUEST['SCRIPT_NAME']; + +// Get year. + +$arrDT = localtime(); +$intYear = $arrDT[5] + 1900; + +$closehead = false; +$pgtitle = array(gettext("Diagnostics"),gettext("Execute command")); +include("head.inc"); +?> + + + + + + + +

    !

    + +" . $ulmsg . "

    \n"; ?> +"); + puts("\$ " . htmlspecialchars($_POST['txtCommand'])); + putenv("PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"); + putenv("SCRIPT_FILENAME=" . strtok($_POST['txtCommand'], " ")); /* PHP scripts */ + $ph = popen($_POST['txtCommand'] . ' 2>&1', "r" ); + while ($line = fgets($ph)) echo htmlspecialchars($line); + pclose($ph); + puts(" "); +} + + +if (!isBlank($_POST['txtPHPCommand'])) { + puts("
    ");
    +   require_once("config.inc");
    +   require_once("functions.inc");
    +   echo eval($_POST['txtPHPCommand']);
    +   puts(" 
    "); +} + +?> +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
        + + + " /> + + " onclick="return Reset_onClick( this.form );" /> +
    : + +
        + " /> +
    : + +
        + " />
    :
        + " /> +

    + : interfaces_carp_setup(); +

    +
    +
    +
    + + + + + + diff --git a/usr/local/www/favicon.ico b/usr/local/www/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..3440bf24d471f1210668aea9634a4c4571a8874a GIT binary patch literal 1406 zcmeH{uTMfz6vsaxzaBgg6a-Ouh#SMr5l9qfU1$um$ zjmKm9{XWCtkXEZjAP}HjE>o-3C>D#v<8hkJCWS%)MNvp35)1|dDwPL1oeueYo^JP< zZ1#?JdxEB2lgs5urBXy95$X9vsdP`H@klaxLnd>}bULM4t?u3+wYnIxPh!F0)-VD4Wb{60%sa=`{Y>*D-u(@Y#a*H^J*1qcNOI-KG33 Ub|^T7E5XGPj7;!y2KxBE0oZy=+W-In literal 0 HcmV?d00001 diff --git a/usr/local/www/fbegin.inc b/usr/local/www/fbegin.inc new file mode 100755 index 000000000..531df4c71 --- /dev/null +++ b/usr/local/www/fbegin.inc @@ -0,0 +1,441 @@ + "") { + foreach($config['installedpackages']['menu'] as $menuitem) { + if($menuitem['section'] != $section) continue; + if($menuitem['url'] <> "") { + $test_url=$menuitem['url']; + $addresswithport = getenv("HTTP_HOST"); + $colonpos = strpos($addresswithport, ":"); + if ($colonpos !== False){ + //my url is actually just the IP address of the pfsense box + $myurl = substr($addresswithport, 0, $colonpos); + } else { + $myurl = $addresswithport; + } + $description = str_replace('$myurl', $myurl, $menuitem['url']); + } else { + $description = '/pkg.php?xml=' . $menuitem['configfile']; + $test_url=$description; + } + if(isAllowedPage($test_url)){ + $extarray[] = array($menuitem['name'], $description); + } + } + } + return $extarray; +} + +function output_menu($arrayitem, $target = null) { + foreach ($arrayitem as $item) { + if (isAllowedPage($item[1]) || $item[1]=="/index.php?logout"){ + $attr = sprintf("href=\"%s\"", htmlentities($item[1])); + if ($target) { + $attr .= sprintf(" target=\"%s\"", htmlentities($target)); + } + $class = "navlnk"; + if ($item['class']) { + $class .= " {$item['class']}"; + } + $attr .= sprintf(" class=\"%s\"", htmlentities($class)); + if ($item['style']) { + $attr .= sprintf(" style=\"%s\"", htmlentities($item['style'])); + } + echo "
  • \n"; + printf("%s\n", $attr, $item[0]); + echo "
  • \n"; + } + } +} + +// System +$system_menu = array(); +$system_menu[] = array(gettext("Advanced"), "/system_advanced_admin.php"); +$system_menu[] = array(gettext("Firmware"), "/system_firmware.php"); +$system_menu[] = array(gettext("General Setup"), "/system.php"); +$system_menu[] = array(gettext("High Avail. Sync"), "/system_hasync.php"); +$system_menu[] = array(gettext("Logout"), "/index.php?logout"); +if ($g['platform'] == "pfSense" or $g['platform'] == "nanobsd") + $system_menu[] = array(gettext("Packages"), "/pkg_mgr_installed.php"); +$system_menu[] = array(gettext("Setup Wizard"), "/wizard.php?xml=setup_wizard.xml"); +$system_menu[] = array(gettext("Routing"), "/system_gateways.php"); +$system_menu[] = array(gettext("Cert Manager"), "/system_camanager.php"); +if (!isAllowedPage("system_usermanager.php*")) + $system_menu[] = array(gettext("User Manager"), "/system_usermanager_passwordmg.php"); +else + $system_menu[] = array(gettext("User Manager"), "/system_usermanager.php"); +$system_menu = msort(array_merge($system_menu, return_ext_menu("System")),0); + +// Interfaces +$interfaces_menu = array(); +if (!isset($config['system']['webgui']['noassigninterfaces'])) + $interfaces_menu[] = array(gettext("(assign)"), "/interfaces_assign.php"); +$opts = get_configured_interface_with_descr(false, true); +foreach ($opts as $oif => $odescr) + if (!isset($config['interfaces'][$oif]['ovpn'])) + $interfaces_menu[] = array(htmlspecialchars($odescr), "/interfaces.php?if={$oif}"); +$interfaces_menu = msort(array_merge($interfaces_menu, return_ext_menu("Interfaces")),0); + +// Firewall +$firewall_menu = array(); +$firewall_menu[] = array(gettext("Aliases"), "/firewall_aliases.php"); +$firewall_menu[] = array(gettext("NAT"), "/firewall_nat.php"); +$firewall_menu[] = array(gettext("Rules"), "/firewall_rules.php"); +$firewall_menu[] = array(gettext("Schedules"), "/firewall_schedule.php"); +$firewall_menu[] = array(gettext("Traffic Shaper"), "/firewall_shaper.php"); +$firewall_menu[] = array(gettext("Virtual IPs"), "/firewall_virtual_ip.php"); +$firewall_menu = msort(array_merge($firewall_menu, return_ext_menu("Firewall")),0); + +// Services +$services_menu = array(); +$services_menu[] = array(gettext("Captive Portal"), "/services_captiveportal.php"); +$services_menu[] = array(gettext("DNS Forwarder"), "/services_dnsmasq.php"); +$services_menu[] = array(gettext("DNS Resolver"), "/services_unbound.php"); +$services_menu[] = array(gettext("DHCP Relay"), "/services_dhcp_relay.php"); +$services_menu[] = array(gettext("DHCPv6 Relay"), "/services_dhcpv6_relay.php"); +if($g['services_dhcp_server_enable']) { + $services_menu[] = array(gettext("DHCP Server"), "/services_dhcp.php"); + $services_menu[] = array(gettext("DHCPv6 Server/RA"), "/services_dhcpv6.php"); +} +$services_menu[] = array(gettext("Dynamic DNS"), "/services_dyndns.php"); +$services_menu[] = array(gettext("IGMP proxy"), "/services_igmpproxy.php"); +$services_menu[] = array(gettext("Load Balancer"), "/load_balancer_pool.php"); +$services_menu[] = array(gettext("NTP"), "/services_ntpd.php"); +$services_menu[] = array(gettext("PPPoE Server"), "/vpn_pppoe.php"); +$services_menu[] = array(gettext("SNMP"), "/services_snmp.php"); +if(count($config['interfaces']) > 1) { + /* no use for UPnP in single-interface deployments + remove to reduce user confusion + */ + $services_menu[] = array(gettext("UPnP & NAT-PMP"), "/pkg_edit.php?xml=miniupnpd.xml"); +} +$services_menu[] = array(gettext("Wake on LAN"), "/services_wol.php"); +$services_menu = msort(array_merge($services_menu, return_ext_menu("Services")),0); + +// VPN +$vpn_menu = array(); +$vpn_menu[] = array(gettext("IPsec"), "/vpn_ipsec.php"); +$vpn_menu[] = array(gettext("OpenVPN"), "/vpn_openvpn_server.php"); +$vpn_menu[] = array(gettext("PPTP"), "/vpn_pptp.php"); +$vpn_menu[] = array(gettext("L2TP"), "/vpn_l2tp.php"); +$vpn_menu = msort(array_merge($vpn_menu, return_ext_menu("VPN")),0); + +// Status +$status_menu = array(); +if (count($config['captiveportal']) > 0) + $status_menu[] = array(gettext("Captive Portal"), "/status_captiveportal.php"); +$status_menu[] = array(gettext("CARP (failover)"), "/carp_status.php"); +$status_menu[] = array(gettext("Dashboard"), "/index.php"); +$status_menu[] = array(gettext("Gateways"), "/status_gateways.php"); +$status_menu[] = array(gettext("DHCP Leases"), "/status_dhcp_leases.php"); +$status_menu[] = array(gettext("DHCPv6 Leases"), "/status_dhcpv6_leases.php"); +$status_menu[] = array(gettext("Filter Reload"), "/status_filter_reload.php"); +$status_menu[] = array(gettext("Interfaces"), "/status_interfaces.php"); +$status_menu[] = array(gettext("IPsec"), "/diag_ipsec.php"); +$status_menu[] = array(gettext("Load Balancer"), "/status_lb_pool.php"); +$status_menu[] = array(gettext("NTP"), "/status_ntpd.php"); +$status_menu[] = array(gettext("OpenVPN"), "/status_openvpn.php"); +if ($g['platform'] == "pfSense") + $status_menu[] = array(gettext("Package Logs"), "/diag_pkglogs.php"); +$status_menu[] = array(gettext("Queues"), "/status_queues.php"); +$status_menu[] = array(gettext("RRD Graphs"), "/status_rrd_graph.php"); +$status_menu[] = array(gettext("Services"), "/status_services.php"); +$status_menu[] = array(gettext("System Logs"), "/diag_logs.php"); +$status_menu[] = array(gettext("Traffic Graph"), "/status_graph.php?if=wan"); +if(count($config['interfaces']) > 1) + $status_menu[] = array(gettext("UPnP & NAT-PMP"), "/status_upnp.php"); +$ifentries = get_configured_interface_with_descr(); +foreach ($ifentries as $ent => $entdesc) { + if (is_array($config['interfaces'][$ent]['wireless']) && + preg_match($g['wireless_regex'], $config['interfaces'][$ent]['if'])) + $wifdescrs[$ent] = $entdesc; +} +if (count($wifdescrs) > 0) + $status_menu[] = array(gettext("Wireless"), "/status_wireless.php"); +$status_menu = msort(array_merge($status_menu, return_ext_menu("Status")),0); + +// Diagnostics +$diagnostics_menu = array(); +$diagnostics_menu[] = array(gettext("ARP Table"), "/diag_arp.php"); +$diagnostics_menu[] = array(gettext("Authentication"), "/diag_authentication.php"); +$diagnostics_menu[] = array(gettext("Backup/Restore"), "/diag_backup.php"); +$diagnostics_menu[] = array(gettext("Command Prompt"), "/exec.php"); +$diagnostics_menu[] = array(gettext("DNS Lookup"), "/diag_dns.php"); +$diagnostics_menu[] = array(gettext("Edit File"), "/edit.php"); +$diagnostics_menu[] = array(gettext("Factory Defaults"), "/diag_defaults.php"); + +if(file_exists("/var/run/gmirror_active")) + $diagnostics_menu[] = array(gettext("GEOM Mirrors"), "/diag_gmirror.php" ); + +$diagnostics_menu[] = array(gettext("Halt System"), "/halt.php" ); +$diagnostics_menu[] = array(gettext("Limiter Info"), "/diag_limiter_info.php" ); +$diagnostics_menu[] = array(gettext("NDP Table"), "/diag_ndp.php" ); + +$diagnostics_menu[] = array(gettext("Tables"), "/diag_tables.php"); +$diagnostics_menu[] = array(gettext("Ping"), "/diag_ping.php"); +$diagnostics_menu[] = array(gettext("Test Port"), "/diag_testport.php"); +$diagnostics_menu[] = array(gettext("pfInfo"), "/diag_pf_info.php"); +$diagnostics_menu[] = array(gettext("pfTop"), "/diag_system_pftop.php"); +$diagnostics_menu[] = array(gettext("Reboot"), "/reboot.php"); +$diagnostics_menu[] = array(gettext("Routes"), "/diag_routes.php"); +$diagnostics_menu[] = array(gettext("SMART Status"), "/diag_smart.php"); +$diagnostics_menu[] = array(gettext("Sockets"), "/diag_sockets.php" ); +$diagnostics_menu[] = array(gettext("States"), "/diag_dump_states.php"); +$diagnostics_menu[] = array(gettext("States Summary"), "/diag_states_summary.php"); +$diagnostics_menu[] = array(gettext("System Activity"), "/diag_system_activity.php"); +$diagnostics_menu[] = array(gettext("Traceroute"), "/diag_traceroute.php"); +$diagnostics_menu[] = array(gettext("Packet Capture"), "/diag_packet_capture.php"); +if($g['platform'] == "nanobsd") + $diagnostics_menu[] = array(gettext("NanoBSD"), "/diag_nanobsd.php"); + +if (isset($config['system']['developer'])) { + $diagnostics_menu[] = array(gettext("Restart HTTPD"), "/restart_httpd.php", "style" => "font-weight: bold; color: yellow;"); + +} +$diagnostics_menu = msort(array_merge($diagnostics_menu, return_ext_menu("Diagnostics")),0); + +$gold_menu = array(); +$gold_menu[] = array(gettext("pfSense Gold"), "https://www.pfsense.org/gold"); +$gold_menu = msort(array_merge($gold_menu, return_ext_menu("Gold")),0); + +if(! $g['disablehelpmenu']) { + $help_menu = array(); + $help_menu[] = array(gettext("About this Page"), $helpurl); + if($g['product_name'] == "pfSense") + $help_menu[] = array(gettext("Bug Database"), "https://www.pfsense.org/j.php?jumpto=redmine"); + $help_menu[] = array(gettext("User Forum"), "https://www.pfsense.org/j.php?jumpto=forum"); + $help_menu[] = array(gettext("Documentation"), "https://www.pfsense.org/j.php?jumpto=doc"); + $help_menu[] = array(gettext("Developers Wiki"), "https://www.pfsense.org/j.php?jumpto=devwiki"); + $help_menu[] = array(gettext("Paid Support"), "https://www.pfsense.org/j.php?jumpto=portal"); + $help_menu[] = array(gettext("pfSense Book"), "https://www.pfsense.org/j.php?jumpto=book"); + $help_menu[] = array(gettext("Search portal"), "https://www.pfsense.org/j.php?jumpto=searchportal"); + $help_menu[] = array(gettext("FreeBSD Handbook"), "https://www.pfsense.org/j.php?jumpto=fbsdhandbook"); + $help_menu = msort(array_merge($help_menu, return_ext_menu("Help")),0); +} + +?> + +
    + +
    +
    + + +
    + + + +
    + + + +
    + + + + diff --git a/usr/local/www/filebrowser/browser.js b/usr/local/www/filebrowser/browser.js new file mode 100644 index 000000000..c9788c4e4 --- /dev/null +++ b/usr/local/www/filebrowser/browser.js @@ -0,0 +1,47 @@ +/* + pfSense_MODULE: shell +*/ + +jQuery(document).ready( + function() { + jQuery("#fbOpen").click( + function() { + jQuery("#fbBrowser").fadeIn(750); + fbBrowse(jQuery("#fbTarget").val()); + } + ); + } +); + +function fbBrowse(path) { + jQuery("#fileContent").fadeOut(); + + if(jQuery("#fbCurrentDir")) + jQuery("#fbCurrentDir").html("Loading ..."); + + jQuery.ajax( + "/filebrowser/browser.php?path=" + encodeURI(path ? path : "/"), + { type: "get", complete: fbComplete } + ); + +} + +function fbComplete(req) { + jQuery("#fbBrowser").html(req.responseText); + + var actions = { + fbHome: function() { fbBrowse("/"); }, + fbClose: function() { jQuery("#fbBrowser").fadeOut(750); }, + fbDir: function() { fbBrowse(this.id); }, + fbFile: function() { jQuery("#fbTarget").val(this.id); } + } + + for(var type in actions) { + jQuery("#fbBrowser ." + type).each( + function() { + jQuery(this).click(actions[type]); + jQuery(this).css("cursor","pointer"); + } + ); + } +} diff --git a/usr/local/www/filebrowser/browser.php b/usr/local/www/filebrowser/browser.php new file mode 100644 index 000000000..d8cbea391 --- /dev/null +++ b/usr/local/www/filebrowser/browser.php @@ -0,0 +1,159 @@ + 0 ? $_GET['path'] : "/"); +if(is_file($path)) + $path = dirname($path); + +// ----- header ----- +?> + + + + + + + + + + + Directory does not exist. + + +
    + Home + + Close +
    + + +
    + + + + +
    + +   +
    + + + + + + + + +
    + +   +
    + + + + + + + diff --git a/usr/local/www/filebrowser/images/file_code.gif b/usr/local/www/filebrowser/images/file_code.gif new file mode 100755 index 0000000000000000000000000000000000000000..f06a20581104f040781f82e4ceb1c27001747c40 GIT binary patch literal 610 zcmZ?wbhEHb6krfwcoxR+?c28>KYo1u`t|$w@AvQD|NHmvr%#^>x4wG%_Q$JNuRebK z_~_B2)2B~ot$OkP{rfLpzI^`tIcfcigmtgdXFq=P@q6mxr*GfBefjcb=!6H`uYURP z^;hMNH}AjxiJbK~edgn*uYW|%dlEC@dg{{qsmouaZ-4Xp_3JNRe-v$hz5eLivfXd8 zw!VJ+`0=x6&k8oY+H(HW;lqccmpzM}^6=8budyp$y!-g$-RIv)i=JM*|0QkR%cDn+ zzW(r|bkoZZA3i*L|MSh8H{o+0KY#xG(4j-G-hVrA^i=B9hw*csY&iKgW5x5LZLbp- zJT2V(Dq+ows725AA3B-3@puJWNAX1w+RH@FV0aqHkRT%}@Z zC>kVA3nT)|Nivp)308=x_|%vqeqY4ym|Ba^XHErKmPsu z_sf?rr%s((vu4fBn>XLSeS6`;g%>Yg96fsU;>C+QckVoY{``?6M~)pkcIeQdS+iy> zTC`~8%9VTe>^X7b#JqX)wr<__{Q2|!`}e_foIH8*_3PJ{FJHc5#ft6Q zx9{A!>-+cbTXt?acKqay-8=T~+xPhK<9++~UA=mB$BrG(o;|yD>(<=4bC)e!_V3@n z!-o$)dGciG(xqR&e*O9L=eKX)e*OCO@*x~IN4cD4(M?3S+U7-T05R( zVB$X@;-JhVAmAe9e8Y}|;efoL5fd}Bi`+ze+hYf`1Xl@(yGTxStop)mskecXnMX@N zQ&8nZzq|tnS7Jh=1JH32Hwu1yP&AMcH8Zg&RCa4<(@^9TRCzMp+f%!j=f%fQ;r&WY QJUk9Zf;|M88yOg^0k_raJOBUy literal 0 HcmV?d00001 diff --git a/usr/local/www/filebrowser/images/file_doc.gif b/usr/local/www/filebrowser/images/file_doc.gif new file mode 100755 index 0000000000000000000000000000000000000000..222c31b77201bd6ca863edd3a2b5e571cba6f0ef GIT binary patch literal 1061 zcmd_peNPhy0D$qMO2W)S3X^S+pmtlf#jwP^AQChyR?3T#8A#1m7Oh}9OLZH@u!I!X zVigLa=tME1YmpH`0FhCn0~SgnTuX~yUw}BU?Ol7lQo7dm+PmIe>Eh?u^9_D~Jf-FQ zeT66402?4ifIx(tT_yKQrvzO_icT0@^m>@$HAC}GYH$6NKSJf#PtH3it0%F#9wX_* zMwqBkyZH)>!9xkU7I1Jiz|6yq?~N!(5*T6#Y1T zq!qNG2}wUH`2)SA@o^hwOb9)>6qVds4dJ8~3|Ud;%A-Kf!}ZZwWK@P389QQ8j5^ks6r zKTOvB?lvRLA%&&j%rxX?lF20Szl;;#ngReLK;9eunI1P{_uh6ePsdYt z>yO<6Lc3UMI6JMP|A_>9!Ajejdg}Z3FZ-{)lXoDq0YAs-?#PtwP8CIVnUxv2LZ6DQ zfp+fM>72n1rna;l7!Vd~F1Banqz@k|Uy*-md#mI-;hHFA2z3cr?rCDN*@Q$8ve z7FyUmFt@6n84E+FDtgN93-9a;sq7gQ!?g=y`^RniD!$k+7M$$XX9*ggUpP9)xm~^E m@#%9;u7b5?_r(6E@SaQAJl6OpWn&^m7FW7M%i5L(6#WMk>+#nB literal 0 HcmV?d00001 diff --git a/usr/local/www/filebrowser/images/file_flash.gif b/usr/local/www/filebrowser/images/file_flash.gif new file mode 100755 index 0000000000000000000000000000000000000000..e565c37a2750edbcc6ad7200da95d681b27dca38 GIT binary patch literal 627 zcmZ?wbhEHb6krfwc$UQQ>({UQ_wWDs@#FRD*MI;1{o>_&`t<2nuU;KKeE8e9Zy!H? zJap*L+W@X5;l`|%TBo7re@{{8O#&(mjrUAz7*JnCyx%gdK9e;zoraN)ugD^^_G zxbfHBdtbkP{rU6f@87>qo;>;I&!01A&iw!XpMf?&@h1x-149yn4#;>=oG`FoXh=%p zNsMo6Z)0R>YD#2^OPDx`iMy*OK29)ZHWzT06QlM>=LCqzp)hp5JI@v(dE-K-IyEbbl06eG%SczTJ07i)N6f*d!eubqM6O;ku0hPZ5_#nJ-3mhv*%UKtkKUg?X_3bfbW%kx}s@$c~aCw!9c-hJZS zFG@3!OoZx0tUfLrrT?9QdM7P!HgBuauz(x!!cc@Vy4Zu=)QA_1&j3d-v8_^r2NKTN zc=2;;ErQqM)=Y?K1UO_;og?$8m|0M|PiSN=M- zKr#-0L|Kc@H88n-HYU(d$1 zQ}Nex@i58kZ!j9B8R0oS<^iq{Wg@_v`Iv=(jzGfXV{LvYX&5Tgzy*@_hABM2@jQ>b z$E{&flMtj6+4#=j-4jSUk9_m_KAWmGe@(f1pshl2(;!Eag%c|t601_r!13e3Lyh+` zJ{7K8rZyB^7D_BXSG0O`&1tgnrO595v<=zovkqWg^>r;N$J)_+l|q`6_oXkC6BFxH z*(un70yV2eqHo2|2%Tu4J~d@?zfwQgCXjxzdCPf3sH@L-u;lx@L}vZE-*SXeHcT|3MYNe{JbkDlRO_eiAh)$K3bfn;`2x`0{$||0Mr?Sh%X!_v~a}L`K zZS6AUiE&0>Rv=h@G4FwZ=qh=%zBR8ph+x+qfBYn8>FIQ_{)y!FXF?=N|I0@OyE<~K YtpRb}{0CVw!Bd66+)~(?oQ&-FA60S)R{#J2 literal 0 HcmV?d00001 diff --git a/usr/local/www/filebrowser/images/file_image.gif b/usr/local/www/filebrowser/images/file_image.gif new file mode 100755 index 0000000000000000000000000000000000000000..496068380b27911c90ecaeeb553c08dfb474aac1 GIT binary patch literal 608 zcmZ?wbhEHb6krfwc$UlHp1=0pr|(6}@3`fz?O44pplrj(FW;MYJqavZ`}xcFr*FR% zue$gC%lBt*zd0o}UVrg-!@X~>-hF)Y;oFjJ7hb&kxc=U^jSqf2d-vt-r|;>_o11n$ ziL2Z6^v$=HrCZ*7{J#F~m(bcJp_Lof-1=O#Xjf>(`i5n@YZmW%|LOakd-rM=F4=JJ zt6$05>RC(YZanwl)Av_z-o5|wW7?7X>u$Xdt6%1tyZYm&&#ylK&H1$Y*5~G>+ZvZ_ zd-wVKhPz*1ef<9B!}s@}f6Uu>{^^_VuRncXd*@Tf-V<9M|9SuUdul^}Xyy7DM<2~R zc=`3GAH^&0&OQF@#ryA73s&b%o3r}nr}g*0zx(u~dBvW0pMR9iTlV(TkF?fJ6_fXW z`tsc^cXjcKyPrOPUVG=`riZ`kmh5`|{@bE07q>qB_u=!8n8s-VW$U*-`RkUy_WFx| zekJQ8n%0!Aeft0Ze+IIE;!hSv28LV)9guENoG`HOZOCnEZfR{2mgLCj?q=>|*4Ax` z(1_)XV&gFg4fl2u@o3^OO%2oZS5`|<4RN<+ZDQcGa@H~z4HAoYW%1jP%fQBxoPP9J zI!j{OMjlHW0r@x!r9dND@zV#a1AILVU8LCAy>xhQGDsM6bNj?Fy=PK*)|4Tao%7@8 zk8G}+8D`(VJbgU9w~e1YTS&|2MMJZcW3-Bmhx10IqwJ1y+ire1#5z;n&5uPwGQq1w Ypy^18;o@aWy{D@*NX+uo5MZzd093m?cmMzZ literal 0 HcmV?d00001 diff --git a/usr/local/www/filebrowser/images/file_js.gif b/usr/local/www/filebrowser/images/file_js.gif new file mode 100755 index 0000000000000000000000000000000000000000..9b6601f9529605f71e152d05972bca40cf0ef601 GIT binary patch literal 1077 zcmd7Rc~6sf0KoBwL!)sa446}wx$a^KLleWcz%Zi(-D$e|Ufmj1rYZz-CPrTVRv4&;R9%q&g zh*V%VB_|}iF~5CFo08r+F5W$#t+fKV(Sf{pX*zpu*9h!s7s=mtxGa{6N8AUak~x7! zSy*ED;!JAwsBjORNTu-eL%VFDP*?b}GcH~sY^(Q^C9#*TGt z4H0cB4Z&e*SOptF&w{FVcIU@Q<*dwn`>E2LkTkXk&uri=91Vg3*x=|ITb)@^Fj(q` zJjJb+sp4+QpBx!`6TLH`kZB0xl{~eX=zk_e&QToG({>zChvfE*OvL6iN5>;}XLxRl z1p|o%?KNyQR(O*-EH7zeGX_P!^l^d9rMCk5gxZ1<4yP-xW{6Vp*TOR~wQgcVhpi|G zgUL1`!WthhULV&uESHHj++<@|^*Ior6Uu&BIq2Dz9e(}8J;{#q?_c3Ef2y!2^C-PAg2xSTCg z5$2c#BcoKTatLL5IRc8Cn6%dEm7Z~1S+O=bt&?kS;%ReR;f=go;nZd;=J<&zYv|?d z83?4Ts%%P`*1|X2i5ELKZ=1OK>q{Ml!iRBtdWJqMO6`9t{fFPDq$qW8OM?KwA3827NQLmnW4!EF>@I$llOMdTMRUYy2J+s(P3ib@xHub|n z!CzfyPqKW_>_-n9JiXu^NjV;vyZ>|$`Hw2r$s{Ntt5#m`oAOp0C59HiRps-|Z+ywz zPD8-kMI`#??k6G#_H`Z0FBLH)LvOg{Sl)Z0jc`k>ChG_SzgZYGI#us2j)#P)I&~uJP zhLEA1eI$CQT8xnTd^%#XKZ{*Xn!C%2COJxm{a&lTcRYX!*n-%s_g_E!5IMC~dDj2U v3jKjkeB%y1IMG)wCHrMDPNv@V^zxY(^)3wu{~dF_$V@Kn`q16O9SZ#y(QQp5 literal 0 HcmV?d00001 diff --git a/usr/local/www/filebrowser/images/file_pdf.gif b/usr/local/www/filebrowser/images/file_pdf.gif new file mode 100755 index 0000000000000000000000000000000000000000..b01bb230b403b9b43826b3982c35a11c5ac1a769 GIT binary patch literal 603 zcmZ?wbhEHb6krfwcoxd=?c2Be_wWDw`SaJWUthm|{rmUtr%#_ge*F08(WB3wKfikQ z>h$T;@87@w{{8!xFJHcY{`BSJ$7gZDZ|6+^e(lQlmoFZr#(uwZ>+S00Pg@&5A3u7_ zLigFTXAg5ypX8-IsVRHfSoQtx?N7_*y?pud_lNiI>Px=ex^X|$=V@lb*9&Kk9zFW{ z_3J~24n2SV{9Re*hYufahx$K${P^wLx34l{Z-xe(YH$7V^vUP7%bu6!e%`&5fGT)lkw@ZmRa-u$?C=UIE>87JGHFQ0!pee&bs182J0f4+Nr zKfvv2Wzmz`^7lKoe5@~iQ^w>#Iu6r9gF^WIGD16MUuRaq%7QE%~p2R`z?cJB7hGIAw%ew#9#>{gk$$VJki;ZPsr uKBEMMq$Sf2bx&CGVTR-4>F%EUSLq0R*f_mGvq?b5;YiRa5tc><25SHY#tXjy literal 0 HcmV?d00001 diff --git a/usr/local/www/filebrowser/images/file_php.gif b/usr/local/www/filebrowser/images/file_php.gif new file mode 100755 index 0000000000000000000000000000000000000000..ab7f45995205a66c1764ae3b31c060729264c1e9 GIT binary patch literal 603 zcmZ?wbhEHb6krfwc;?FR_wU~yKYrZ5fB);(uQ728zJLGz^XJcd_uu^b_3O)*pQlfs z{`T!#QSsU@U%sqZc_t`iR#?Q`M~@z@T7CA=p+h@%UVZrR*|TRaK7aoF;lqc?Qw~g= zv=7K%zv1GYJFi~8{Pg(o5die0+j~_oCJb3KauRpbQ zn_s{AboA)aPoF-uw(ofN?(5sPZ(qH7m6Nyf<;$0|XK#;+ng8th$ClRZ&!0bEy6nV@ z7w=cCI<N2@9XbP$DI64|ziB6d4q$RV{(c$n;MKNh-CtF852V1!d=g-<0o>p>XXR$M9VZUvs zZKijc|HwJnBS-Cc__$Agf=gFb9)w|mgz7er&<#Ej~_ zpHQUfmq-1}I;qZ^a7p62Tge+<)w8Y+Yv5zWg2xxKAR{_==a;lP=svX8BQ|N8$tsg? z*@>(;;bkYhz+?8w*5WFLZFYEmh_@u_S&<7LP1=iDPh(1jdYenX=&WE*)$uH{pRyfO zqi&62oLV$Z$(f}QK4Hoql67AZ5 zoF4QkC0j4z*TlySjayXnKDh~XczpP3>6i(%yAc%Xr@p&~Uql?pOKi#hTE%QM_1!MM zr6n-Ns``zCvu;~w%|o?ow)UKWl+BZvZGT*a4Crr}skBauZUJ8JtYr3C=UA5(S6zfA z#c1Iv?VVb4`_Js$4E>U)F%8cxBtHN1_RPHfrPcjJkKBLexZE@2>b|(Zp=Z(|#(++s zc71hIDVTMyIuUg@%W$h)WkzKcM36I`Mtw5*ug~xI1OLyWyukqgAOViN;=g(V*y0DS zMKoV4tsc(2Y1uLmk-$8ep9C17fR1zfgLqT;^A@rM7y4S*kGM(P*4?SC2gtpcESVGgV!ZLBw}{N-#Ai{)nyF3apE1YYVRA?%=W!uN8@ne+~_@#VNoLT z$f4GQAMO)A3){t^NyAT35AV-ATYqxri8HO0(;WeU!5C~?hEx`{J(dz&|2nbb>~P?2 M9FDYO7Zy1FA2jw3Y5)KL literal 0 HcmV?d00001 diff --git a/usr/local/www/filebrowser/images/file_system.gif b/usr/local/www/filebrowser/images/file_system.gif new file mode 100755 index 0000000000000000000000000000000000000000..f1997c73caa94dde0dff548a0a86e578ccc58745 GIT binary patch literal 601 zcmZ?wbhEHb6krfwcoxU-f+e*F08(W5V4zMMXN z`p}_6A3l6|duhd<6%&7c`S||I>YInxzJC4s&6_tLZfv@HWW$xk0Y{G>{dyzx^z_ExpHIFxnD*vm{pFV#0bjjjczsKj#pT9pU{`P3*w_BmlpFjWhAnVz)XLpu{ zez?-`?NP&zXLYX*#+`3<{BpPR+;rz_`&ORXI_uf)?A!CaK7IOhxzGLUP2ZENsvkdo zeE9I;?{}lWJiB;qs{PM*D^E@F-oJd(`}gl(zI^%Sc-^;a?&oJXf4Erp_sNqd&zw2)=g*)2|Nk@49w`1~VPs&4W6%Lv1&R{}_H7Muo-xs_ZLQ2Kaouq- z3{kNYCoyn$_C!ZW3%gQOv+`Tk%D-)}$(4^St&9M{q zGcd9Xvsvufw>#>Pez=Oj-X*&yo|aNl&~-X_nb%g!D%eu~(&bo9KO5~ZYnLZiqM{`2 z&5dPE?cVM8aaNR5_LlGqIpKbgg;z&omP99GYP7hRYC^zDp_IeT8C;t@iVi;Hn7}b{ XQ$b{lL!+XK*gOk^Bdm?n9T=s@`I=dbj zQ%BMsCxW+JC)w>>o1QWBGIR$#ArA^|Rx@)LZ|3C-OW}d%;dvfo*Wa=4fAIO?%g#G` z;9yk}kOW|QAP~YWE}REVWz~;YcNY`n=1P#Td5E0Gd7$aZ9kj5xXJ zT8Ug5_KN$;GwY1@XGAV&bNZ-?PR^OGV|5yr(@#46RB1=a$b7HENAbS5-tW4@Z7~up!W%gk5L|BZn-0yN8tCtPtz?m-If# z^(qvn9A47lvMNlXPo!p!;*fKRI?-_tUWf)z;k_P-6K- zxbCMv|3z`TkAw_R^_8jP7h$31RAb-yL8M=6|4M28B3GU@vq;5aG2s8vt|*-b0D9n~ zSKL=m00}YRTzsN|12R+I|5QDHilNEjtAU=CxV{@{^xRsO==r*%J#I_E#KFQuMM}=L z^afV7Fz(&Ac*FFBF!*|Weu-e&JFH|VlliOw`0X3!Ek(x!o%|Vd0`1Lop`k1&NV!sQ zK``iDOnkKOweKd?l5HTXw-8E;479-AKQs3hyAF7Eo8D$`4b6?2cCu45^IE|Ti`BH7 zKbXn^EN!%8W<_clZeSF}^Seg5GrpPv-5&PVuiMQ_C*EmO4%}19ekr)d{jJ27+z;z^ z9MU&Vi|N)~Y23TA&vq_C?a1OPfinUv{w$($mZbY;d)v}h|5LW}K?mxm=s=s{2s zRPe5-=!p(O(s)5pYQkkd_G?)m4?G%jYgA7rJ~VjFc>r# z4242LB9XXUE~QfGcDvPTwN|SYi9~+C-)6Hl8V!L!P%4#VGMP%H5(k$q2Xej%Ryhw z&qI>)Oen$7<+O#CSfu{_4Of>Qk#7+I&UKKbn~bwR-+0P^VEqtzeDv`v6p!x(PkGcI<`2JEz`0DzA+ZHqE9BLyRu(MuOr_~1Ij<_a%Rh$vk^!CPRl%2tdL!)-Q+l$oSv zbXyj+2a~dbj0l|ubK17tYU-JDIyEP{dG2TDTKj88k9vi03fm2e@FnEO3;-5t#Q3=DUwiRfPtx zVbD`*-h@LnEMlV;+fi?m??X;-xDt8J#pn*JfH#F)GVxgJxk4BS1a kG}l)Y$K`fzJu35jlHP0DB-g8&6UtPEokmOXMiBu10r_2l`v3p{ literal 0 HcmV?d00001 diff --git a/usr/local/www/filebrowser/images/icon_cancel.gif b/usr/local/www/filebrowser/images/icon_cancel.gif new file mode 100755 index 0000000000000000000000000000000000000000..246a81960ecaaf4f84596f110db29016ea678554 GIT binary patch literal 1024 zcmeH`*-z2|0LOoTD?3~?TlJuum7TMu%{h-u$t%n9I7<%p8+o5qmJ~HT&l4A4o z4(lBiWEqZIO2_MG&_A-&%YG_L<_DkRfn=sv=Sc9k^|gYN1Qs2~Xb>^Ja@lx#dxRcp z>unv03Ac4?OfC1Y&j)2J2vbdMEs*BoNd=TyrfWPru0s(Atu+&Q=TUslp{+-1FvP5n z`y$49mmTjq$GDkLB*$UjGm^=gp=3Z_-jUS3s3#Q_E)u z`bX)ZNbp4!_Y?DwEyjDIkdJ7uuUV&OB|^&$sl8DNNd_8nXSzFW_v=2;X~^F1&}qgC zE}Jy>(Q)@JEc-Uor5;HRjal)slMdpphJnWEDZIaHhV_jgTp~6Jchf~b3=n@ zmRZ;d;KW+nn{apsx>}&VK3!Y&QzD!jHXy+d6@o8UF4&t@C{8nGbKZyenY0g}$VBpv zNlDSKGY4_A5Se?B6o?}s<`>V5EC$lTt+%RhF$vPM^Exf!eQ{zJQg)7u3Q(4AX^@R^ zSU4Ru#!SXvi2wYfz#5wqi6GR3*B}4q3Bvg^5w^%}w}#OjlJ9#!?7@2JDpY&;6GkD0 zPtN7^ZSH4~ull7LJZXKq-zc_GzHi#@N*N@UR14Z!@iZF2Kb3g1eAq}U3Gn0bxV_Di zP@mOlnQGGX-Ua(FdR`ici)1YGR5+J=lNKimA}c*z0@q4P8{G-w#}qqUxdZpo2{ro>T)n_Mz#RvWy-bZd%N1m@GZJqGzIs&Lg(XCmk~=gyo^ literal 0 HcmV?d00001 diff --git a/usr/local/www/filebrowser/images/icon_contract.gif b/usr/local/www/filebrowser/images/icon_contract.gif new file mode 100755 index 0000000000000000000000000000000000000000..cf82159808e726f68430d95fcf064bc653978a25 GIT binary patch literal 599 zcmZ?wbhEHb6krfwc$UfV`_J$D|8JGfyHdI6#_j*tZvVe}@BhuR1y_3(9((fo@wUUa z)4C7*{`)(sX4BI*PfNCC=S?{kT)Z-NR(Ra>$YuMN1{SVdvS)GOmduE%4ax0$^QWCI z+?iRmNZgt4ZPcMRt zSH1fDa_gl{MYGOtJ-;b``kCT67ps=sN?sCOx2G(l@32m;dPwQ&XYZaCOgz}O_HNFk z6KjsFN?8`$e5^WpL2y{v+Q6cfAya){ete;tsubV6bI+|E4fBrQ`G5WS`{xBS&n33* zPH5c~Qo3f^nZCRKZ>&DLQXx(@ZDo8+-PY@WF5UWnb<)lk)ywbv2LlF*f#OdVMh1pV z1|5(|pg3V*-_nrT)ZEgV$)%lc>6JEf*6dlHndu7_E?UH$DU-^| z62WE}X2X-QF+(y_Z-uEJo1vD~hD|Y<%&Do;=JL+A!3>)+lrq^mF*+d&Ln3t zsffqP>L{ptoZiHn>6n`2tFIxHVDN0CM5e>xAYDc`A3n`9v6mbq+|ryFv_yo?IB!-y rJ1LQ69}7paqvB?bOaYO|fFy5GY2LJ!h9VUwR+hG)RWX(t0u0swGAsw+ literal 0 HcmV?d00001 diff --git a/usr/local/www/filebrowser/images/icon_expand.gif b/usr/local/www/filebrowser/images/icon_expand.gif new file mode 100755 index 0000000000000000000000000000000000000000..06c0c685ce839fae27d8c635113f727e3e0c1eec GIT binary patch literal 613 zcmZ?wbhEHb6krfwcvi&l;P0JB|L;BgclX!7e`(zZwjI8`^Tnp?KQ2A`cdu;0)zW!a zdKMn5Ty!ITVMJ8Trtg3LxVG87{`7sv^Gz=8wy!>X4=!GL@#C3-nddT>rUVwQ%%668 z+L^wT~^`@-IJr$2adRn0PR6%BiAR=QrM8z2)(`YtOEPSFQ^wT~oE}PTShM-+uir zo_i^OL;AIE7q9=goWC*S%GV3;KmUqr+FSbg*-jnSm5Xn#y1ukw-tpk#RaSK-8}6=(soPSr zIVXSmnO}eZMpSQXJ6!kt_1Bz9ClXtCCoYPbwB_E5H{YJW`xH~R_1o{?DeI$?+xHgF zxtKHM&Z2IW{ri*yO;? z4ffBTJ!@@kUAAo5#s=rVzkhxF`0>#71K&TqI^64ByT7PlOWK8HSu0nr^lS6j-RXL4 za?pkIXQN9ai+5)2ot3?2&6=e3k%#A`-?@GB_~XOJrUdn$YMD86=FV!fDhKuBOUn;U z3tv>~9$y<1wVN{VaKKh|M~sv(wdSz4K~wLEbOYSUfn)^sN18ux_W1|)x`eZ-tMmGuE@GQ zWy{KJ>+0$r+`IGm;r)Xh?h$=KyPB={Yq!X?Lsj z?s}(P?ap!Y!q+wUZZ9`IGCgd`i3KGkB@^PU_H;TXO^hpAmvv-%=(lg*Hul6UT)5Dy z!fnEY37MIhyV{*DttxEVRrB=oquq5j@7}$$C^KHNWJyIuMcSOiO)UWzSLU5xQ`^+k z^!>xjDJeD+V=e#w`St$&`~Uy{GmHX?LqPE-3nK%=WCk6ONuWHz!0~`Vol{2Q6J{7O?veR)LGeJVM8&g?g2Y8fW?FMfEo^8!z$7lsS0mB&K`n5;7?*;A V#e!%4{UXjQawdAzBsefw0|3*!Uey2q literal 0 HcmV?d00001 diff --git a/usr/local/www/filebrowser/images/icon_left.gif b/usr/local/www/filebrowser/images/icon_left.gif new file mode 100755 index 0000000000000000000000000000000000000000..0d1137ced848fc866df6848f1158e32a167e25c2 GIT binary patch literal 306 zcmZ?wbhEHb6krfwxN6Q|-C(Mjsj8B!Xj-A~)M2e(pyfZ)-E*Sj#LFFXFHHIK?|1vj znpx*3Hy^Aj*_PX|wW{xAd;8JGq>T~Fug%NY5nFelV*aIRi?7UTI#j##>YVQ5trdHV zrk?5RJl6F4@9#+$J4=sdwVkN$IA1&Yba%|k;NFYPEk~=v7Wzgn30`=4M)khJ38y++ z4%f}RHlgcGy+WL9&AzgfRngsN8)lrFaO36mhJ#hBZ!G%%|33o`p!k!8k%7USK?fuc z@)HA_|AE;B9y(I}Czcdd25*_+B*+mpNmoPY(#Zk^1~yj3L#eZ4ba>8r2_Fn$I^?f0 p+3Sqk1isa5w>jF>w0I3;;u08{^j-KgOakQi113$LGS!j68UUX2fQuRXn?C+>d!_~PEuLc?=Q%67L0?6~sz z>zl{Z<0ZD9fAi(t^J6O-C$2cY;na)cGt(|V{ocOf(%r3{yRU!VeeLt#KflgC`uXqg zpIa|~9J%x5?yH~cPQEyK@AKJ*U)P`eaAr~I%~yXOz5TgsO3KWg_fIXUesOyBlY?_7 zZMr>m`hx4vzaN^DfB4RqfB*lVdhm75uKQ;m{kZ(>$DzBwc3%5-^8VKgkH4LJ^sQ#$ zh2!_WZaVjF=E8MnAACJJJ>}uspGWV0-F5!Or6=FlS3B&#^5)>}9|v!Jx%T|W+}-zq z!Nougp!k!8k%1wDK?h_QC{7sIr#56XHMg`jGdl%`aBIf+wPi4iTJTFbTS;&+wkZV4 zvWK&V+2|yBf$1#OQS~GB_$+tQ1iHrEA3P=WVv_*L{?PN1$urqEG z<`QIKGh;|h_tI)*G_bWd5>pA#m(h^Bm*B|}p&0GxuAZbip_$h$*27Tkd$akBo&_5p W-B%EFG23Baq2bQm_MM55!5RR~Uo33^ literal 0 HcmV?d00001 diff --git a/usr/local/www/firewall_aliases.php b/usr/local/www/firewall_aliases.php new file mode 100644 index 000000000..d7c7c8c95 --- /dev/null +++ b/usr/local/www/firewall_aliases.php @@ -0,0 +1,301 @@ +. + 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. +*/ +/* + pfSense_MODULE: aliases +*/ + +##|+PRIV +##|*IDENT=page-firewall-aliases +##|*NAME=Firewall: Aliases page +##|*DESCR=Allow access to the 'Firewall: Aliases' page. +##|*MATCH=firewall_aliases.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +if (!is_array($config['aliases']['alias'])) + $config['aliases']['alias'] = array(); +$a_aliases = &$config['aliases']['alias']; + +$tab = ($_REQUEST['tab'] == "" ? "ip" : preg_replace("/\W/","",$_REQUEST['tab'])); + +if ($_POST) { + + if ($_POST['apply']) { + $retval = 0; + + /* reload all components that use aliases */ + $retval = filter_configure(); + + if(stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + if ($retval == 0) + clear_subsystem_dirty('aliases'); + } +} + +if ($_GET['act'] == "del") { + if ($a_aliases[$_GET['id']]) { + /* make sure rule is not being referenced by any nat or filter rules */ + $is_alias_referenced = false; + $referenced_by = false; + $alias_name = $a_aliases[$_GET['id']]['name']; + // Firewall rules + find_alias_reference(array('filter', 'rule'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('filter', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('filter', 'rule'), array('source', 'port'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('filter', 'rule'), array('destination', 'port'), $alias_name, $is_alias_referenced, $referenced_by); + // NAT Rules + find_alias_reference(array('nat', 'rule'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('nat', 'rule'), array('source', 'port'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('nat', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('nat', 'rule'), array('destination', 'port'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('nat', 'rule'), array('target'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('nat', 'rule'), array('local-port'), $alias_name, $is_alias_referenced, $referenced_by); + // NAT 1:1 Rules + //find_alias_reference(array('nat', 'onetoone'), array('external'), $alias_name, $is_alias_referenced, $referenced_by); + //find_alias_reference(array('nat', 'onetoone'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('nat', 'onetoone'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by); + // NAT Outbound Rules + find_alias_reference(array('nat', 'advancedoutbound', 'rule'), array('source', 'network'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('nat', 'advancedoutbound', 'rule'), array('sourceport'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('nat', 'advancedoutbound', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('nat', 'advancedoutbound', 'rule'), array('dstport'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('nat', 'advancedoutbound', 'rule'), array('target'), $alias_name, $is_alias_referenced, $referenced_by); + // Alias in an alias + find_alias_reference(array('aliases', 'alias'), array('address'), $alias_name, $is_alias_referenced, $referenced_by); + // Load Balancer + find_alias_reference(array('load_balancer', 'lbpool'), array('port'), $alias_name, $is_alias_referenced, $referenced_by); + find_alias_reference(array('load_balancer', 'virtual_server'), array('port'), $alias_name, $is_alias_referenced, $referenced_by); + // Static routes + find_alias_reference(array('staticroutes', 'route'), array('network'), $alias_name, $is_alias_referenced, $referenced_by); + if($is_alias_referenced == true) { + $savemsg = sprintf(gettext("Cannot delete alias. Currently in use by %s"), $referenced_by); + } else { + unset($a_aliases[$_GET['id']]); + if (write_config()) { + filter_configure(); + mark_subsystem_dirty('aliases'); + } + header("Location: firewall_aliases.php?tab=" . $tab); + exit; + } + } +} + +function find_alias_reference($section, $field, $origname, &$is_alias_referenced, &$referenced_by) { + global $config; + if(!$origname || $is_alias_referenced) + return; + + $sectionref = &$config; + foreach($section as $sectionname) { + if(is_array($sectionref) && isset($sectionref[$sectionname])) + $sectionref = &$sectionref[$sectionname]; + else + return; + } + + if(is_array($sectionref)) { + foreach($sectionref as $itemkey => $item) { + $fieldfound = true; + $fieldref = &$sectionref[$itemkey]; + foreach($field as $fieldname) { + if(is_array($fieldref) && isset($fieldref[$fieldname])) + $fieldref = &$fieldref[$fieldname]; + else { + $fieldfound = false; + break; + } + } + if($fieldfound && $fieldref == $origname) { + $is_alias_referenced = true; + if(is_array($item)) + $referenced_by = $item['descr']; + break; + } + } + } +} + +$pgtitle = array(gettext("Firewall"),gettext("Aliases")); +$shortcut_section = "aliases"; + +include("head.inc"); + +?> + + + +
    + +

    +" . gettext("You must apply the changes in order for them to take effect."));?> + + + + + + + + + +
    + + +
    +
    + + + + + + + + $alias){ + unset ($show_alias); + switch ($tab){ + case "all": + $show_alias= true; + break; + case "ip": + case "host": + case "network": + if (preg_match("/(host|network)/",$alias["type"])) + $show_alias= true; + break; + case "url": + if (preg_match("/(url)/i",$alias["type"])) + $show_alias= true; + break; + case "port": + if($alias["type"] == "port") + $show_alias= true; + break; + } + if ($show_alias) { + ?> + + + + + + + + + + + + + + + + +
    + + + + + +
      alt="add" />
    +
    + + + "; + } else { + if(is_array($alias["aliasurl"])) { + $aliasurls = implode(", ", array_slice($alias["aliasurl"], 0, 10)); + echo $aliasurls; + if(count($aliasurls) > 10) { + echo "...
    "; + } + echo "
    \n"; + } + $tmpaddr = explode(" ", $alias['address']); + $addresses = implode(", ", array_slice($tmpaddr, 0, 10)); + echo $addresses; + if(count($tmpaddr) > 10) { + echo "..."; + } + } + ?> +
    +   + + + + + + +
    alt="edit" />')"> alt="delete" />
    +
      + + + + + + + +
    + alt="add" /> + + alt="import" /> +
    +
    +


    +
    +
    +
    +

    + + + diff --git a/usr/local/www/firewall_aliases_edit.php b/usr/local/www/firewall_aliases_edit.php new file mode 100755 index 000000000..aa59497e5 --- /dev/null +++ b/usr/local/www/firewall_aliases_edit.php @@ -0,0 +1,781 @@ +. + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /bin/rm /bin/mkdir /usr/bin/fetch + pfSense_MODULE: aliases +*/ + +##|+PRIV +##|*IDENT=page-firewall-alias-edit +##|*NAME=Firewall: Alias: Edit page +##|*DESCR=Allow access to the 'Firewall: Alias: Edit' page. +##|*MATCH=firewall_aliases_edit.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +$pgtitle = array(gettext("Firewall"),gettext("Aliases"),gettext("Edit")); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_aliases.php'); + +// Keywords not allowed in names +$reserved_keywords = array("all", "pass", "block", "out", "queue", "max", "min", "pptp", "pppoe", "L2TP", "OpenVPN", "IPsec"); + +// Add all Load balance names to reserved_keywords +if (is_array($config['load_balancer']['lbpool'])) + foreach ($config['load_balancer']['lbpool'] as $lbpool) + $reserved_keywords[] = $lbpool['name']; + +$reserved_ifs = get_configured_interface_list(false, true); +$reserved_keywords = array_merge($reserved_keywords, $reserved_ifs, $reserved_table_names); + +if (!is_array($config['aliases']['alias'])) + $config['aliases']['alias'] = array(); +$a_aliases = &$config['aliases']['alias']; + +$tab = $_REQUEST['tab']; + +if($_POST) + $origname = $_POST['origname']; + +// Debugging +if($debug) + unlink_if_exists("{$g['tmp_path']}/alias_rename_log.txt"); + +function alias_same_type($name, $type) { + global $config; + + foreach ($config['aliases']['alias'] as $alias) { + if ($name == $alias['name']) { + if (in_array($type, array("host", "network")) && + in_array($alias['type'], array("host", "network"))) + return true; + if ($type == $alias['type']) + return true; + else + return false; + } + } + return true; +} + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_aliases[$id]) { + $original_alias_name = $a_aliases[$id]['name']; + $pconfig['name'] = $a_aliases[$id]['name']; + $pconfig['detail'] = $a_aliases[$id]['detail']; + $pconfig['address'] = $a_aliases[$id]['address']; + $pconfig['type'] = $a_aliases[$id]['type']; + $pconfig['descr'] = html_entity_decode($a_aliases[$id]['descr']); + + if(preg_match("/urltable/i", $a_aliases[$id]['type'])) { + $pconfig['address'] = $a_aliases[$id]['url']; + $pconfig['updatefreq'] = $a_aliases[$id]['updatefreq']; + } + if($a_aliases[$id]['aliasurl'] <> "") { + if(is_array($a_aliases[$id]['aliasurl'])) + $pconfig['address'] = implode(" ", $a_aliases[$id]['aliasurl']); + else + $pconfig['address'] = $a_aliases[$id]['aliasurl']; + } +} + +if ($_POST) { + unset($input_errors); + $vertical_bar_err_text = gettext("Vertical bars (|) at start or end, or double in the middle of descriptions not allowed. Descriptions have been cleaned. Check and save again."); + + /* input validation */ + + $reqdfields = explode(" ", "name"); + $reqdfieldsn = array(gettext("Name")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + $x = is_validaliasname($_POST['name']); + if (!isset($x)) { + $input_errors[] = gettext("Reserved word used for alias name."); + } else if ($_POST['type'] == "port" && (getservbyname($_POST['name'], "tcp") || getservbyname($_POST['name'], "udp"))) { + $input_errors[] = gettext("Reserved word used for alias name."); + } else { + if (is_validaliasname($_POST['name']) == false) + $input_errors[] = gettext("The alias name must be less than 32 characters long and may only consist of the characters") . " a-z, A-Z, 0-9, _."; + } + /* check for name conflicts */ + if (empty($a_aliases[$id])) { + foreach ($a_aliases as $alias) { + if ($alias['name'] == $_POST['name']) { + $input_errors[] = gettext("An alias with this name already exists."); + break; + } + } + } + + /* Check for reserved keyword names */ + foreach($reserved_keywords as $rk) + if($rk == $_POST['name']) + $input_errors[] = sprintf(gettext("Cannot use a reserved keyword as alias name %s"), $rk); + + /* check for name interface description conflicts */ + foreach($config['interfaces'] as $interface) { + if($interface['descr'] == $_POST['name']) { + $input_errors[] = gettext("An interface description with this name already exists."); + break; + } + } + + $alias = array(); + $address = array(); + $final_address_details = array(); + $alias['name'] = $_POST['name']; + + if (preg_match("/urltable/i", $_POST['type'])) { + $address = ""; + $isfirst = 0; + + /* item is a url table type */ + if ($_POST['address0']) { + /* fetch down and add in */ + $_POST['address0'] = trim($_POST['address0']); + $isfirst = 0; + $address[] = $_POST['address0']; + $alias['url'] = $_POST['address0']; + $alias['updatefreq'] = $_POST['address_subnet0'] ? $_POST['address_subnet0'] : 7; + if (!is_URL($alias['url']) || empty($alias['url'])) { + $input_errors[] = gettext("You must provide a valid URL."); + } elseif (! process_alias_urltable($alias['name'], $alias['url'], 0, true)) { + $input_errors[] = gettext("Unable to fetch usable data."); + } + if ($_POST["detail0"] <> "") { + if ((strpos($_POST["detail0"], "||") === false) && (substr($_POST["detail0"], 0, 1) != "|") && (substr($_POST["detail0"], -1, 1) != "|")) { + $final_address_details[] = $_POST["detail0"]; + } else { + /* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */ + /* and put in the output array so the text is at least redisplayed for the user. */ + $final_address_details[] = preg_replace('/\|\|+/', '|', trim($_POST["detail0"], "|")); + $input_errors[] = $vertical_bar_err_text; + } + } else + $final_address_details[] = sprintf(gettext("Entry added %s"), date('r')); + } + } else if ($_POST['type'] == "url" || $_POST['type'] == "url_ports") { + $isfirst = 0; + $address_count = 2; + $desc_fmt_err_found = false; + + /* item is a url type */ + for($x=0; $x<4999; $x++) { + $_POST['address' . $x] = trim($_POST['address' . $x]); + if($_POST['address' . $x]) { + /* fetch down and add in */ + $isfirst = 0; + $temp_filename = tempnam("{$g['tmp_path']}/", "alias_import"); + unlink_if_exists($temp_filename); + $verify_ssl = isset($config['system']['checkaliasesurlcert']); + mkdir($temp_filename); + download_file($_POST['address' . $x], $temp_filename . "/aliases", $verify_ssl); + + /* if the item is tar gzipped then extract */ + if(stristr($_POST['address' . $x], ".tgz")) + process_alias_tgz($temp_filename); + else if(stristr($_POST['address' . $x], ".zip")) + process_alias_unzip($temp_filename); + + if (!isset($alias['aliasurl'])) + $alias['aliasurl'] = array(); + + $alias['aliasurl'][] = $_POST['address' . $x]; + if ($_POST["detail{$x}"] <> "") { + if ((strpos($_POST["detail{$x}"], "||") === false) && (substr($_POST["detail{$x}"], 0, 1) != "|") && (substr($_POST["detail{$x}"], -1, 1) != "|")) { + $final_address_details[] = $_POST["detail{$x}"]; + } else { + /* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */ + /* and put in the output array so the text is at least redisplayed for the user. */ + $final_address_details[] = preg_replace('/\|\|+/', '|', trim($_POST["detail{$x}"], "|")); + if (!$desc_fmt_err_found) { + $input_errors[] = $vertical_bar_err_text; + $desc_fmt_err_found = true; + } + } + } else + $final_address_details[] = sprintf(gettext("Entry added %s"), date('r')); + + if(file_exists("{$temp_filename}/aliases")) { + $file_contents = file_get_contents("{$temp_filename}/aliases"); + $file_contents = str_replace("#", "\n#", $file_contents); + $file_contents_split = explode("\n", $file_contents); + foreach($file_contents_split as $fc) { + // Stop at 3000 items, aliases larger than that tend to break both pf and the WebGUI. + if ($address_count >= 3000) + break; + $tmp = trim($fc); + if(stristr($fc, "#")) { + $tmp_split = explode("#", $tmp); + $tmp = trim($tmp_split[0]); + } + $tmp = trim($tmp); + if ($_POST['type'] == "url") + $is_valid = (is_ipaddr($tmp) || is_subnet($tmp)); + else + $is_valid = (is_port($tmp) || is_portrange($tmp)); + + if (!empty($tmp) && $is_valid) { + $address[] = $tmp; + $isfirst = 1; + $address_count++; + } + } + if($isfirst == 0) { + /* nothing was found */ + $input_errors[] = sprintf(gettext("You must provide a valid URL. Could not fetch usable data from '%s'."), $_POST['address' . $x]); + } + mwexec("/bin/rm -rf " . escapeshellarg($temp_filename)); + } else { + $input_errors[] = sprintf(gettext("URL '%s' is not valid."), $_POST['address' . $x]); + } + } + } + unset($desc_fmt_err_found); + if ($_POST['type'] == "url_ports") + $address = group_ports($address); + } else { + /* item is a normal alias type */ + $wrongaliases = ""; + $desc_fmt_err_found = false; + for($x=0; $x<4999; $x++) { + if($_POST["address{$x}"] <> "") { + $_POST["address{$x}"] = trim($_POST["address{$x}"]); + if (is_alias($_POST["address{$x}"])) { + if (!alias_same_type($_POST["address{$x}"], $_POST['type'])) + // But alias type network can include alias type urltable. Feature#1603. + if (!($_POST['type'] == 'network' && + preg_match("/urltable/i", alias_get_type($_POST["address{$x}"])))) + $wrongaliases .= " " . $_POST["address{$x}"]; + } else if ($_POST['type'] == "port") { + if (!is_port($_POST["address{$x}"]) && !is_portrange($_POST["address{$x}"])) + $input_errors[] = $_POST["address{$x}"] . " " . gettext("is not a valid port or alias."); + } else if ($_POST['type'] == "host" || $_POST['type'] == "network") { + if (is_subnet($_POST["address{$x}"]) || (!is_ipaddr($_POST["address{$x}"]) + && !is_hostname($_POST["address{$x}"]) + && !is_iprange($_POST["address{$x}"]))) + $input_errors[] = sprintf(gettext('%1$s is not a valid %2$s alias.'), $_POST["address{$x}"], $_POST['type']); + } + if (is_iprange($_POST["address{$x}"])) { + list($startip, $endip) = explode('-', $_POST["address{$x}"]); + $rangesubnets = ip_range_to_subnet_array($startip, $endip); + $address = array_merge($address, $rangesubnets); + } else { + $tmpaddress = $_POST["address{$x}"]; + if($_POST['type'] != "host" && is_ipaddr($_POST["address{$x}"]) && $_POST["address_subnet{$x}"] <> "") { + if (!is_subnet($_POST["address{$x}"] . "/" . $_POST["address_subnet{$x}"])) + $input_errors[] = sprintf(gettext('%s/%s is not a valid subnet.'), $_POST["address{$x}"], $_POST["address_subnet{$x}"]); + else + $tmpaddress .= "/" . $_POST["address_subnet{$x}"]; + } + $address[] = $tmpaddress; + } + if ($_POST["detail{$x}"] <> "") { + if ((strpos($_POST["detail{$x}"], "||") === false) && (substr($_POST["detail{$x}"], 0, 1) != "|") && (substr($_POST["detail{$x}"], -1, 1) != "|")) { + $final_address_details[] = $_POST["detail{$x}"]; + } else { + /* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */ + /* and put in the output array so the text is at least redisplayed for the user. */ + $final_address_details[] = preg_replace('/\|\|+/', '|', trim($_POST["detail{$x}"], "|")); + if (!$desc_fmt_err_found) { + $input_errors[] = $vertical_bar_err_text; + $desc_fmt_err_found = true; + } + } + } else + $final_address_details[] = sprintf(gettext("Entry added %s"), date('r')); + } + } + unset($desc_fmt_err_found); + if ($wrongaliases <> "") + $input_errors[] = sprintf(gettext('The alias(es): %s cannot be nested because they are not of the same type.'), $wrongaliases); + } + + unset($vertical_bar_err_text); + + // Allow extending of the firewall edit page and include custom input validation + pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/input_validation"); + + if (!$input_errors) { + $alias['address'] = is_array($address) ? implode(" ", $address) : $address; + $alias['descr'] = $_POST['descr']; + $alias['type'] = $_POST['type']; + $alias['detail'] = implode("||", $final_address_details); + + /* Check to see if alias name needs to be + * renamed on referenced rules and such + */ + if ($_POST['name'] <> $_POST['origname']) { + // Firewall rules + update_alias_names_upon_change(array('filter', 'rule'), array('source', 'address'), $_POST['name'], $origname); + update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'address'), $_POST['name'], $origname); + update_alias_names_upon_change(array('filter', 'rule'), array('source', 'port'), $_POST['name'], $origname); + update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'port'), $_POST['name'], $origname); + // NAT Rules + update_alias_names_upon_change(array('nat', 'rule'), array('source', 'address'), $_POST['name'], $origname); + update_alias_names_upon_change(array('nat', 'rule'), array('source', 'port'), $_POST['name'], $origname); + update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'address'), $_POST['name'], $origname); + update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'port'), $_POST['name'], $origname); + update_alias_names_upon_change(array('nat', 'rule'), array('target'), $_POST['name'], $origname); + update_alias_names_upon_change(array('nat', 'rule'), array('local-port'), $_POST['name'], $origname); + // NAT 1:1 Rules + //update_alias_names_upon_change(array('nat', 'onetoone'), array('external'), $_POST['name'], $origname); + //update_alias_names_upon_change(array('nat', 'onetoone'), array('source', 'address'), $_POST['name'], $origname); + update_alias_names_upon_change(array('nat', 'onetoone'), array('destination', 'address'), $_POST['name'], $origname); + // NAT Outbound Rules + update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('source', 'network'), $_POST['name'], $origname); + update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('sourceport'), $_POST['name'], $origname); + update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('destination', 'address'), $_POST['name'], $origname); + update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('dstport'), $_POST['name'], $origname); + update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('target'), $_POST['name'], $origname); + // Alias in an alias + update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $_POST['name'], $origname); + } + + pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_write_config"); + + if (isset($id) && $a_aliases[$id]) { + if ($a_aliases[$id]['name'] <> $alias['name']) { + foreach ($a_aliases as $aliasid => $aliasd) { + if ($aliasd['address'] <> "") { + $tmpdirty = false; + $tmpaddr = explode(" ", $aliasd['address']); + foreach ($tmpaddr as $tmpidx => $tmpalias) { + if ($tmpalias == $a_aliases[$id]['name']) { + $tmpaddr[$tmpidx] = $alias['name']; + $tmpdirty = true; + } + } + if ($tmpdirty == true) + $a_aliases[$aliasid]['address'] = implode(" ", $tmpaddr); + } + } + } + $a_aliases[$id] = $alias; + } else + $a_aliases[] = $alias; + + // Sort list + $a_aliases = msort($a_aliases, "name"); + + if (write_config()) + mark_subsystem_dirty('aliases'); + + if(!empty($tab)) + header("Location: firewall_aliases.php?tab=" . htmlspecialchars ($tab)); + else + header("Location: firewall_aliases.php"); + exit; + } + //we received input errors, copy data to prevent retype + else + { + $pconfig['name'] = $_POST['name']; + $pconfig['descr'] = $_POST['descr']; + if (($_POST['type'] == 'url') || ($_POST['type'] == 'url_ports')) + $pconfig['address'] = implode(" ", $alias['aliasurl']); + else + $pconfig['address'] = implode(" ", $address); + $pconfig['type'] = $_POST['type']; + $pconfig['detail'] = implode("||", $final_address_details); + } +} + +include("head.inc"); + +$jscriptstr = << +// + + +EOD; + +?> + +"> + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + +
    + +
    + + + +
    + +
    + + + + + + + + + + + + ""): + $addresses = explode(" ", $pconfig['address']); + $details = explode("||", $pconfig['detail']); + while ($counter < count($addresses)): + if (is_subnet($addresses[$counter])) { + list($address, $address_subnet) = explode("/", $addresses[$counter]); + } else { + $address = $addresses[$counter]; + $address_subnet = ""; + } + ?> + + + + + + + + +
    +
    +
    CIDR
    + + + + + + + " /> +
    + +
      + " /> + " onclick="window.location.href=''" /> +
    +
    + + + + + + diff --git a/usr/local/www/firewall_aliases_import.php b/usr/local/www/firewall_aliases_import.php new file mode 100755 index 000000000..f7444414f --- /dev/null +++ b/usr/local/www/firewall_aliases_import.php @@ -0,0 +1,231 @@ + "") { + $reqdfields = explode(" ", "name aliasimport"); + $reqdfieldsn = array(gettext("Name"),gettext("Aliases")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (is_validaliasname($_POST['name']) == false) + $input_errors[] = gettext("The alias name may only consist of the characters") . " a-z, A-Z, 0-9, _."; + + /* check for name duplicates */ + if (is_alias($_POST['name'])) + $input_errors[] = gettext("An alias with this name already exists."); + + + /* Check for reserved keyword names */ + foreach($reserved_keywords as $rk) + if ($rk == $_POST['name']) + $input_errors[] = sprintf(gettext("Cannot use a reserved keyword as alias name %s"), $rk); + + /* check for name interface description conflicts */ + foreach($config['interfaces'] as $interface) { + if($interface['descr'] == $_POST['name']) { + $input_errors[] = gettext("An interface description with this name already exists."); + break; + } + } + + if ($_POST['aliasimport']) { + $tocheck = explode("\n", $_POST['aliasimport']); + $imported_ips = array(); + $imported_descs = array(); + $desc_len_err_found = false; + $desc_fmt_err_found = false; + foreach ($tocheck as $impline) { + $implinea = explode(" ",trim($impline),2); + $impip = $implinea[0]; + $impdesc = trim($implinea[1]); + if (strlen($impdesc) < 200) { + if ((strpos($impdesc, "||") === false) && (substr($impdesc, 0, 1) != "|") && (substr($impdesc, -1, 1) != "|")) { + if (is_iprange($impip)) { + list($startip, $endip) = explode('-', $impip); + $rangesubnets = ip_range_to_subnet_array($startip, $endip); + $imported_ips = array_merge($imported_ips, $rangesubnets); + $rangedescs = array_fill(0, count($rangesubnets), $impdesc); + $imported_descs = array_merge($imported_descs, $rangedescs); + } else if (!is_ipaddr($impip) && !is_subnet($impip) && !is_hostname($impip) && !empty($impip)) { + $input_errors[] = sprintf(gettext("%s is not an IP address. Please correct the error to continue"), $impip); + } elseif (!empty($impip)) { + $imported_ips[] = $impip; + $imported_descs[] = $impdesc; + } + } + else { + if (!$desc_fmt_err_found) { + $input_errors[] = gettext("Descriptions may not start or end with vertical bar (|) or contain double vertical bar ||."); + $desc_fmt_err_found = true; + } + } + } + else { + if (!$desc_len_err_found) { + /* Note: The 200 character limit is just a practical check to avoid accidents */ + /* if the user pastes a large number of IP addresses without line breaks. */ + $input_errors[] = gettext("Descriptions must be less than 200 characters long."); + $desc_len_err_found = true; + } + } + } + unset($desc_len_err_found, $desc_fmt_err_found); + } + + if (!$input_errors && is_array($imported_ips)) { + $alias = array(); + $alias['address'] = implode(" ", $imported_ips); + $alias['detail'] = implode("||", $imported_descs); + $alias['name'] = $_POST['name']; + $alias['type'] = "network"; + $alias['descr'] = $_POST['descr']; + unset($imported_ips, $imported_descs); + $a_aliases[] = $alias; + + // Sort list + $a_aliases = msort($a_aliases, "name"); + + if (write_config()) + mark_subsystem_dirty('aliases'); + pfSenseHeader("firewall_aliases.php"); + + exit; + } +} + +include("head.inc"); + +?> + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    + +
    + + . + +
    + +
    + + +
    + +
    172.16.1.2 +
    172.16.0.0/24 +
    10.11.12.100-10.11.12.200 +
    192.168.1.254 Home router +
    10.20.0.0/16 Office network +
    10.40.1.10-10.40.1.19 Managed switches +
    +
      + " /> + " onclick="window.location.href=''" /> +
    + + +
    +
    + + + + + + + diff --git a/usr/local/www/firewall_nat.php b/usr/local/www/firewall_nat.php new file mode 100644 index 000000000..b20e5d056 --- /dev/null +++ b/usr/local/www/firewall_nat.php @@ -0,0 +1,382 @@ +. + 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. +*/ +/* + pfSense_MODULE: nat +*/ + +##|+PRIV +##|*IDENT=page-firewall-nat-portforward +##|*NAME=Firewall: NAT: Port Forward page +##|*DESCR=Allow access to the 'Firewall: NAT: Port Forward' page. +##|*MATCH=firewall_nat.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("itemid.inc"); + +if (!is_array($config['nat']['rule'])) + $config['nat']['rule'] = array(); + +$a_nat = &$config['nat']['rule']; + +/* if a custom message has been passed along, lets process it */ +if ($_GET['savemsg']) + $savemsg = $_GET['savemsg']; + +if ($_POST) { + + $pconfig = $_POST; + + if ($_POST['apply']) { + + write_config(); + + $retval = 0; + + unlink_if_exists("/tmp/config.cache"); + $retval |= filter_configure(); + $savemsg = get_std_save_message($retval); + + pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/apply"); + + if ($retval == 0) { + clear_subsystem_dirty('natconf'); + clear_subsystem_dirty('filter'); + } + + } +} + +if ($_GET['act'] == "del") { + if ($a_nat[$_GET['id']]) { + + if (isset($a_nat[$_GET['id']]['associated-rule-id'])) { + delete_id($a_nat[$_GET['id']]['associated-rule-id'], $config['filter']['rule']); + $want_dirty_filter = true; + } + unset($a_nat[$_GET['id']]); + + if (write_config()) { + mark_subsystem_dirty('natconf'); + if ($want_dirty_filter) + mark_subsystem_dirty('filter'); + } + header("Location: firewall_nat.php"); + exit; + } +} + +if (isset($_POST['del_x'])) { + /* delete selected rules */ + if (is_array($_POST['rule']) && count($_POST['rule'])) { + foreach ($_POST['rule'] as $rulei) { + $target = $rule['target']; + // Check for filter rule associations + if (isset($a_nat[$rulei]['associated-rule-id'])){ + delete_id($a_nat[$rulei]['associated-rule-id'], $config['filter']['rule']); + + mark_subsystem_dirty('filter'); + } + unset($a_nat[$rulei]); + } + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat.php"); + exit; + } + +} else { + /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */ + unset($movebtn); + foreach ($_POST as $pn => $pd) { + if (preg_match("/move_(\d+)_x/", $pn, $matches)) { + $movebtn = $matches[1]; + break; + } + } + /* move selected rules before this rule */ + if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) { + $a_nat_new = array(); + + /* copy all rules < $movebtn and not selected */ + for ($i = 0; $i < $movebtn; $i++) { + if (!in_array($i, $_POST['rule'])) + $a_nat_new[] = $a_nat[$i]; + } + + /* copy all selected rules */ + for ($i = 0; $i < count($a_nat); $i++) { + if ($i == $movebtn) + continue; + if (in_array($i, $_POST['rule'])) + $a_nat_new[] = $a_nat[$i]; + } + + /* copy $movebtn rule */ + if ($movebtn < count($a_nat)) + $a_nat_new[] = $a_nat[$movebtn]; + + /* copy all rules > $movebtn and not selected */ + for ($i = $movebtn+1; $i < count($a_nat); $i++) { + if (!in_array($i, $_POST['rule'])) + $a_nat_new[] = $a_nat[$i]; + } + $a_nat = $a_nat_new; + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat.php"); + exit; + } +} + +$closehead = false; +$pgtitle = array(gettext("Firewall"),gettext("NAT"),gettext("Port Forward")); +include("head.inc"); + +echo ""; +echo ""; +echo ""; +echo ""; + +?> + + + + +
    + + + +" . gettext("You must apply the changes in order for them to take effect."));?>
    + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + "; + + $alias_popup = rule_popup($natent['source']['address'], pprint_port($natent['source']['port']), $natent['destination']['address'], pprint_port($natent['destination']['port'])); + + $alias_src_span_begin = $alias_popup["src"]; + $alias_src_port_span_begin = $alias_popup["srcport"]; + $alias_dst_span_begin = $alias_popup["dst"]; + $alias_dst_port_span_begin = $alias_popup["dstport"]; + + $alias_src_span_end = $alias_popup["src_end"]; + $alias_src_port_span_end = $alias_popup["srcport_end"]; + $alias_dst_span_end = $alias_popup["dst_end"]; + $alias_dst_port_span_end = $alias_popup["dstport_end"]; + + $alias_popup = rule_popup("","",$natent['target'], pprint_port($natent['local-port'])); + + $alias_target_span_begin = $alias_popup["dst"]; + $alias_local_port_span_begin = $alias_popup["dstport"]; + + $alias_target_span_end = $alias_popup["dst_end"]; + $alias_local_port_span_end = $alias_popup["dstport_end"]; + + if (isset($natent['disabled'])) + $textss = ""; + else + $textss = ""; + + $textse = ""; + + /* if user does not have access to edit an interface skip on to the next record */ + if(!have_natpfruleint_access($natent['interface'])) + continue; + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
       + + + + + +
    + + " border="0" alt="delete" /> + + " onclick="return confirm('')" /> + + add
    +
    + + " border="0" alt="pass" /> + + " border="0" alt="change" /> + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + +
    " height="17" type="image" width="17" border="0" />">
    ')">" alt="delete" />" width="17" height="17" border="0" alt="add" />
    +
        + + + + + + + + +
    " border="0" alt="move" />" />
    + + " border="0" alt="delete" /> + + " onclick="return confirm('')" /> + + add
    +
     
    pass
    chain
    +
    +
    + + "") { + echo ""; +} +?> + +
    + + + diff --git a/usr/local/www/firewall_nat_1to1.php b/usr/local/www/firewall_nat_1to1.php new file mode 100644 index 000000000..1f76b4242 --- /dev/null +++ b/usr/local/www/firewall_nat_1to1.php @@ -0,0 +1,354 @@ +. + 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. +*/ +/* + pfSense_MODULE: nat +*/ + +##|+PRIV +##|*IDENT=page-firewall-nat-1-1 +##|*NAME=Firewall: NAT: 1:1 page +##|*DESCR=Allow access to the 'Firewall: NAT: 1:1' page. +##|*MATCH=firewall_nat_1to1.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +if (!is_array($config['nat']['onetoone'])) + $config['nat']['onetoone'] = array(); + +$a_1to1 = &$config['nat']['onetoone']; + +if ($_POST) { + $pconfig = $_POST; + + if ($_POST['apply']) { + $retval = 0; + $retval |= filter_configure(); + $savemsg = get_std_save_message($retval); + + if ($retval == 0) { + clear_subsystem_dirty('natconf'); + clear_subsystem_dirty('filter'); + } + } +} + +if ($_GET['act'] == "del") { + if ($a_1to1[$_GET['id']]) { + unset($a_1to1[$_GET['id']]); + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_1to1.php"); + exit; + } +} + +if (isset($_POST['del_x'])) { + /* delete selected rules */ + if (is_array($_POST['rule']) && count($_POST['rule'])) { + foreach ($_POST['rule'] as $rulei) { + unset($a_1to1[$rulei]); + } + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_1to1.php"); + exit; + } + +} else if ($_GET['act'] == "toggle") { + if ($a_1to1[$_GET['id']]) { + if(isset($a_1to1[$_GET['id']]['disabled'])) + unset($a_1to1[$_GET['id']]['disabled']); + else + $a_1to1[$_GET['id']]['disabled'] = true; + if (write_config("Firewall: NAT: Outbound, enable/disable NAT rule")) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_1to1.php"); + exit; + } +} else { + /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */ + unset($movebtn); + foreach ($_POST as $pn => $pd) { + if (preg_match("/move_(\d+)_x/", $pn, $matches)) { + $movebtn = $matches[1]; + break; + } + } + /* move selected rules before this rule */ + if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) { + $a_1to1_new = array(); + + /* copy all rules < $movebtn and not selected */ + for ($i = 0; $i < $movebtn; $i++) { + if (!in_array($i, $_POST['rule'])) + $a_1to1_new[] = $a_1to1[$i]; + } + + /* copy all selected rules */ + for ($i = 0; $i < count($a_1to1); $i++) { + if ($i == $movebtn) + continue; + if (in_array($i, $_POST['rule'])) + $a_1to1_new[] = $a_1to1[$i]; + } + + /* copy $movebtn rule */ + if ($movebtn < count($a_1to1)) + $a_1to1_new[] = $a_1to1[$movebtn]; + + /* copy all rules > $movebtn and not selected */ + for ($i = $movebtn+1; $i < count($a_1to1); $i++) { + if (!in_array($i, $_POST['rule'])) + $a_1to1_new[] = $a_1to1[$i]; + } + if (count($a_1to1_new) > 0) + $a_1to1 = $a_1to1_new; + + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_1to1.php"); + exit; + } +} + +$pgtitle = array(gettext("Firewall"),gettext("NAT"),gettext("1:1")); +include("head.inc"); + +?> + + +
    + +" . + gettext("You must apply the changes in order for them to take effect.")); +?> +
    + + + +
    + +
    +
    + + + + + + + + + + + +"; + $i = 0; + foreach ($a_1to1 as $natent): + if (isset($natent['disabled'])) { + $textss = ""; + $iconfn = "pass_d"; + } else { + $textss = ""; + $iconfn = "pass"; + } +?> + + + + + + + + + + + + + + + + + + +
       + + + + + +
    + + " alt="add" /> + +
    +
    + + + + " alt="icon" /> + + + + + + + + + + + + + + + + + + + + + +
    + " + type="image" style="height:17;width:17;border:0" /> + + + " alt="edit" /> + +
    + ')"> + " alt="delete" /> + + + + " width="17" height="17" border="0" alt="duplicate" /> + +
    +
    + + + + + + + + +
    + + " border="0" alt="move" /> + + " /> + + + + " alt="add" /> + +
    + + " border="0" alt="delete" /> + + " + onclick="return confirm('')" /> + +
    +
    +

    +
    + +
    + +

    +
    +
    +
    +
    + + + diff --git a/usr/local/www/firewall_nat_1to1_edit.php b/usr/local/www/firewall_nat_1to1_edit.php new file mode 100644 index 000000000..928396284 --- /dev/null +++ b/usr/local/www/firewall_nat_1to1_edit.php @@ -0,0 +1,556 @@ +. + 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. +*/ +/* + pfSense_MODULE: nat +*/ + +##|+PRIV +##|*IDENT=page-firewall-nat-1-1-edit +##|*NAME=Firewall: NAT: 1:1: Edit page +##|*DESCR=Allow access to the 'Firewall: NAT: 1:1: Edit' page. +##|*MATCH=firewall_nat_1to1_edit.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("interfaces.inc"); +require_once("filter.inc"); +require("shaper.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat_1to1.php'); + +$specialsrcdst = explode(" ", "any pptp pppoe l2tp openvpn"); +$ifdisp = get_configured_interface_with_descr(); +foreach ($ifdisp as $kif => $kdescr) { + $specialsrcdst[] = "{$kif}"; + $specialsrcdst[] = "{$kif}ip"; +} + +if (!is_array($config['nat']['onetoone'])) + $config['nat']['onetoone'] = array(); + +$a_1to1 = &$config['nat']['onetoone']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +$after = $_GET['after']; +if (isset($_POST['after'])) + $after = $_POST['after']; + +if (isset($_GET['dup'])) { + $id = $_GET['dup']; + $after = $_GET['dup']; +} + +if (isset($id) && $a_1to1[$id]) { + $pconfig['disabled'] = isset($a_1to1[$id]['disabled']); + + address_to_pconfig($a_1to1[$id]['source'], $pconfig['src'], + $pconfig['srcmask'], $pconfig['srcnot'], + $pconfig['srcbeginport'], $pconfig['srcendport']); + + address_to_pconfig($a_1to1[$id]['destination'], $pconfig['dst'], + $pconfig['dstmask'], $pconfig['dstnot'], + $pconfig['dstbeginport'], $pconfig['dstendport']); + + $pconfig['interface'] = $a_1to1[$id]['interface']; + if (!$pconfig['interface']) + $pconfig['interface'] = "wan"; + + $pconfig['external'] = $a_1to1[$id]['external']; + $pconfig['descr'] = $a_1to1[$id]['descr']; + $pconfig['natreflection'] = $a_1to1[$id]['natreflection']; +} else + $pconfig['interface'] = "wan"; + +if (isset($_GET['dup'])) + unset($id); + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + /* run through $_POST items encoding HTML entties so that the user + * cannot think he is slick and perform a XSS attack on the unwilling + */ + foreach ($_POST as $key => $value) { + $temp = str_replace(">", "", $value); + $newpost = htmlentities($temp); + if($newpost <> $temp) + $input_errors[] = sprintf(gettext("Invalid characters detected (%s). Please remove invalid characters and save again."),$temp); + } + + /* input validation */ + $reqdfields = explode(" ", "interface external"); + $reqdfieldsn = array(gettext("Interface"), gettext("External subnet")); + if ($_POST['srctype'] == "single" || $_POST['srctype'] == "network") { + $reqdfields[] = "src"; + $reqdfieldsn[] = gettext("Source address"); + } + if ($_POST['dsttype'] == "single" || $_POST['dsttype'] == "network") { + $reqdfields[] = "dst"; + $reqdfieldsn[] = gettext("Destination address"); + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if ($_POST['external']) + $_POST['external'] = trim($_POST['external']); + if ($_POST['src']) + $_POST['src'] = trim($_POST['src']); + if ($_POST['dst']) + $_POST['dst'] = trim($_POST['dst']); + + if (is_specialnet($_POST['srctype'])) { + $_POST['src'] = $_POST['srctype']; + $_POST['srcmask'] = 0; + } else if ($_POST['srctype'] == "single") { + $_POST['srcmask'] = 32; + } + if (is_specialnet($_POST['dsttype'])) { + $_POST['dst'] = $_POST['dsttype']; + $_POST['dstmask'] = 0; + } else if ($_POST['dsttype'] == "single") { + $_POST['dstmask'] = 32; + } else if (is_ipaddr($_POST['dsttype'])) { + $_POST['dst'] = $_POST['dsttype']; + $_POST['dstmask'] = 32; + $_POST['dsttype'] = "single"; + } + + /* For external, user can enter only ip's */ + if (($_POST['external'] && !is_ipaddr($_POST['external']))) + $input_errors[] = gettext("A valid external subnet must be specified."); + + /* For dst, if user enters an alias and selects "network" then disallow. */ + if ($_POST['dsttype'] == "network" && is_alias($_POST['dst']) ) + $input_errors[] = gettext("You must specify single host or alias for alias entries."); + + /* For src, user can enter only ip's or networks */ + if (!is_specialnet($_POST['srctype'])) { + if (($_POST['src'] && !is_ipaddr($_POST['src']))) { + $input_errors[] = sprintf(gettext("%s is not a valid internal IP address."), $_POST['src']); + } + if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) { + $input_errors[] = gettext("A valid internal bit count must be specified."); + } + } + + /* For dst, user can enter ip's, networks or aliases */ + if (!is_specialnet($_POST['dsttype'])) { + if (($_POST['dst'] && !is_ipaddroralias($_POST['dst']))) { + $input_errors[] = sprintf(gettext("%s is not a valid destination IP address or alias."), $_POST['dst']); + } + if (($_POST['dstmask'] && !is_numericint($_POST['dstmask']))) { + $input_errors[] = gettext("A valid destination bit count must be specified."); + } + } + + /* check for overlaps with other 1:1 */ + foreach ($a_1to1 as $natent) { + if (isset($id) && ($a_1to1[$id]) && ($a_1to1[$id] === $natent)) + continue; + + if (check_subnets_overlap($_POST['internal'], $_POST['subnet'], $natent['internal'], $natent['subnet'])) { + //$input_errors[] = "Another 1:1 rule overlaps with the specified internal subnet."; + //break; + } + } + + if (!$input_errors) { + $natent = array(); + + $natent['disabled'] = isset($_POST['disabled']) ? true:false; + $natent['external'] = $_POST['external']; + $natent['descr'] = $_POST['descr']; + $natent['interface'] = $_POST['interface']; + + pconfig_to_address($natent['source'], $_POST['src'], + $_POST['srcmask'], $_POST['srcnot']); + + pconfig_to_address($natent['destination'], $_POST['dst'], + $_POST['dstmask'], $_POST['dstnot']); + + if ($_POST['natreflection'] == "enable" || $_POST['natreflection'] == "disable") + $natent['natreflection'] = $_POST['natreflection']; + else + unset($natent['natreflection']); + + if (isset($id) && $a_1to1[$id]) + $a_1to1[$id] = $natent; + else { + if (is_numeric($after)) + array_splice($a_1to1, $after+1, 0, array($natent)); + else + $a_1to1[] = $natent; + } + + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_1to1.php"); + exit; + } +} + +$pgtitle = array(gettext("Firewall"),gettext("NAT"),gettext("1:1"),gettext("Edit")); +include("head.inc"); + +?> + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + /> +
    + +
    +
    + .
    + .
    + +
    + +
    + +
    +
    + /> + +
    + +
    +
    + + + + + + + + + +
       + +
       + / + +
    +
    + +
    + /> + +
    + +
    +
    + + + + + + + + + +
       + +
       + + / + +
    +
    + +
    + +
    +
    + +
    + + + +
    + +
      + " /> + " onclick="window.location.href=''" /> + + + +
    +
    + + + + + diff --git a/usr/local/www/firewall_nat_edit.php b/usr/local/www/firewall_nat_edit.php new file mode 100644 index 000000000..cb892fd6c --- /dev/null +++ b/usr/local/www/firewall_nat_edit.php @@ -0,0 +1,934 @@ +. + 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. +*/ +/* + pfSense_MODULE: nat +*/ + +##|+PRIV +##|*IDENT=page-firewall-nat-portforward-edit +##|*NAME=Firewall: NAT: Port Forward: Edit page +##|*DESCR=Allow access to the 'Firewall: NAT: Port Forward: Edit' page. +##|*MATCH=firewall_nat_edit.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("itemid.inc"); +require_once("filter.inc"); +require("shaper.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat.php'); + +$specialsrcdst = explode(" ", "any (self) pptp pppoe l2tp openvpn"); +$ifdisp = get_configured_interface_with_descr(); +foreach ($ifdisp as $kif => $kdescr) { + $specialsrcdst[] = "{$kif}"; + $specialsrcdst[] = "{$kif}ip"; +} + +if (!is_array($config['nat']['rule'])) { + $config['nat']['rule'] = array(); +} +$a_nat = &$config['nat']['rule']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (is_numericint($_GET['after']) || $_GET['after'] == "-1") + $after = $_GET['after']; +if (isset($_POST['after']) && (is_numericint($_POST['after']) || $_POST['after'] == "-1")) + $after = $_POST['after']; + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) { + $id = $_GET['dup']; + $after = $_GET['dup']; +} + +if (isset($id) && $a_nat[$id]) { + if ( isset($a_nat[$id]['created']) && is_array($a_nat[$id]['created']) ) + $pconfig['created'] = $a_nat[$id]['created']; + + if ( isset($a_nat[$id]['updated']) && is_array($a_nat[$id]['updated']) ) + $pconfig['updated'] = $a_nat[$id]['updated']; + + $pconfig['disabled'] = isset($a_nat[$id]['disabled']); + $pconfig['nordr'] = isset($a_nat[$id]['nordr']); + address_to_pconfig($a_nat[$id]['source'], $pconfig['src'], + $pconfig['srcmask'], $pconfig['srcnot'], + $pconfig['srcbeginport'], $pconfig['srcendport']); + + address_to_pconfig($a_nat[$id]['destination'], $pconfig['dst'], + $pconfig['dstmask'], $pconfig['dstnot'], + $pconfig['dstbeginport'], $pconfig['dstendport']); + + $pconfig['proto'] = $a_nat[$id]['protocol']; + $pconfig['localip'] = $a_nat[$id]['target']; + $pconfig['localbeginport'] = $a_nat[$id]['local-port']; + $pconfig['descr'] = $a_nat[$id]['descr']; + $pconfig['interface'] = $a_nat[$id]['interface']; + $pconfig['associated-rule-id'] = $a_nat[$id]['associated-rule-id']; + $pconfig['nosync'] = isset($a_nat[$id]['nosync']); + $pconfig['natreflection'] = $a_nat[$id]['natreflection']; + + if (!$pconfig['interface']) + $pconfig['interface'] = "wan"; +} else { + $pconfig['interface'] = "wan"; + $pconfig['src'] = "any"; + $pconfig['srcbeginport'] = "any"; + $pconfig['srcendport'] = "any"; +} + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) + unset($id); + +/* run through $_POST items encoding HTML entties so that the user + * cannot think he is slick and perform a XSS attack on the unwilling + */ +unset($input_errors); +foreach ($_POST as $key => $value) { + $temp = $value; + $newpost = htmlentities($temp); + if($newpost <> $temp) + $input_errors[] = sprintf(gettext("Invalid characters detected %s. Please remove invalid characters and save again."), $temp); +} + +if ($_POST) { + + if(strtoupper($_POST['proto']) == "TCP" || strtoupper($_POST['proto']) == "UDP" || strtoupper($_POST['proto']) == "TCP/UDP") { + if ($_POST['srcbeginport_cust'] && !$_POST['srcbeginport']) + $_POST['srcbeginport'] = trim($_POST['srcbeginport_cust']); + if ($_POST['srcendport_cust'] && !$_POST['srcendport']) + $_POST['srcendport'] = trim($_POST['srcendport_cust']); + + if ($_POST['srcbeginport'] == "any") { + $_POST['srcbeginport'] = 0; + $_POST['srcendport'] = 0; + } else { + if (!$_POST['srcendport']) + $_POST['srcendport'] = $_POST['srcbeginport']; + } + if ($_POST['srcendport'] == "any") + $_POST['srcendport'] = $_POST['srcbeginport']; + + if ($_POST['dstbeginport_cust'] && !$_POST['dstbeginport']) + $_POST['dstbeginport'] = trim($_POST['dstbeginport_cust']); + if ($_POST['dstendport_cust'] && !$_POST['dstendport']) + $_POST['dstendport'] = trim($_POST['dstendport_cust']); + + if ($_POST['dstbeginport'] == "any") { + $_POST['dstbeginport'] = 0; + $_POST['dstendport'] = 0; + } else { + if (!$_POST['dstendport']) + $_POST['dstendport'] = $_POST['dstbeginport']; + } + if ($_POST['dstendport'] == "any") + $_POST['dstendport'] = $_POST['dstbeginport']; + + if ($_POST['localbeginport_cust'] && !$_POST['localbeginport']) + $_POST['localbeginport'] = trim($_POST['localbeginport_cust']); + + /* Make beginning port end port if not defined and endport is */ + if (!$_POST['srcbeginport'] && $_POST['srcendport']) + $_POST['srcbeginport'] = $_POST['srcendport']; + if (!$_POST['dstbeginport'] && $_POST['dstendport']) + $_POST['dstbeginport'] = $_POST['dstendport']; + } else { + $_POST['srcbeginport'] = 0; + $_POST['srcendport'] = 0; + $_POST['dstbeginport'] = 0; + $_POST['dstendport'] = 0; + } + + if (is_specialnet($_POST['srctype'])) { + $_POST['src'] = $_POST['srctype']; + $_POST['srcmask'] = 0; + } else if ($_POST['srctype'] == "single") { + $_POST['srcmask'] = 32; + } + if (is_specialnet($_POST['dsttype'])) { + $_POST['dst'] = $_POST['dsttype']; + $_POST['dstmask'] = 0; + } else if ($_POST['dsttype'] == "single") { + $_POST['dstmask'] = 32; + } else if (is_ipaddr($_POST['dsttype'])) { + $_POST['dst'] = $_POST['dsttype']; + $_POST['dstmask'] = 32; + $_POST['dsttype'] = "single"; + } + + $pconfig = $_POST; + + /* input validation */ + if(strtoupper($_POST['proto']) == "TCP" or strtoupper($_POST['proto']) == "UDP" or strtoupper($_POST['proto']) == "TCP/UDP") { + $reqdfields = explode(" ", "interface proto dstbeginport dstendport"); + $reqdfieldsn = array(gettext("Interface"),gettext("Protocol"),gettext("Destination port from"),gettext("Destination port to")); + } else { + $reqdfields = explode(" ", "interface proto"); + $reqdfieldsn = array(gettext("Interface"),gettext("Protocol")); + } + + if ($_POST['srctype'] == "single" || $_POST['srctype'] == "network") { + $reqdfields[] = "src"; + $reqdfieldsn[] = gettext("Source address"); + } + if ($_POST['dsttype'] == "single" || $_POST['dsttype'] == "network") { + $reqdfields[] = "dst"; + $reqdfieldsn[] = gettext("Destination address"); + } + if (!isset($_POST['nordr'])) { + $reqdfields[] = "localip"; + $reqdfieldsn[] = gettext("Redirect target IP"); + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (!$_POST['srcbeginport']) { + $_POST['srcbeginport'] = 0; + $_POST['srcendport'] = 0; + } + if (!$_POST['dstbeginport']) { + $_POST['dstbeginport'] = 0; + $_POST['dstendport'] = 0; + } + + if ($_POST['src']) + $_POST['src'] = trim($_POST['src']); + if ($_POST['dst']) + $_POST['dst'] = trim($_POST['dst']); + if ($_POST['localip']) + $_POST['localip'] = trim($_POST['localip']); + + if (!isset($_POST['nordr']) && ($_POST['localip'] && !is_ipaddroralias($_POST['localip']))) { + $input_errors[] = sprintf(gettext("\"%s\" is not a valid redirect target IP address or host alias."), $_POST['localip']); + } + + if ($_POST['srcbeginport'] && !is_portoralias($_POST['srcbeginport'])) + $input_errors[] = sprintf(gettext("%s is not a valid start source port. It must be a port alias or integer between 1 and 65535."), $_POST['srcbeginport']); + if ($_POST['srcendport'] && !is_portoralias($_POST['srcendport'])) + $input_errors[] = sprintf(gettext("%s is not a valid end source port. It must be a port alias or integer between 1 and 65535."), $_POST['srcendport']); + if ($_POST['dstbeginport'] && !is_portoralias($_POST['dstbeginport'])) + $input_errors[] = sprintf(gettext("%s is not a valid start destination port. It must be a port alias or integer between 1 and 65535."), $_POST['dstbeginport']); + if ($_POST['dstendport'] && !is_portoralias($_POST['dstendport'])) + $input_errors[] = sprintf(gettext("%s is not a valid end destination port. It must be a port alias or integer between 1 and 65535."), $_POST['dstendport']); + + if ((strtoupper($_POST['proto']) == "TCP" || strtoupper($_POST['proto']) == "UDP" || strtoupper($_POST['proto']) == "TCP/UDP") && (!isset($_POST['nordr']) && !is_portoralias($_POST['localbeginport']))) { + $input_errors[] = sprintf(gettext("A valid redirect target port must be specified. It must be a port alias or integer between 1 and 65535."), $_POST['localbeginport']); + } + + /* if user enters an alias and selects "network" then disallow. */ + if( ($_POST['srctype'] == "network" && is_alias($_POST['src']) ) + || ($_POST['dsttype'] == "network" && is_alias($_POST['dst']) ) ) { + $input_errors[] = gettext("You must specify single host or alias for alias entries."); + } + + if (!is_specialnet($_POST['srctype'])) { + if (($_POST['src'] && !is_ipaddroralias($_POST['src']))) { + $input_errors[] = sprintf(gettext("%s is not a valid source IP address or alias."), $_POST['src']); + } + if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) { + $input_errors[] = gettext("A valid source bit count must be specified."); + } + } + if (!is_specialnet($_POST['dsttype'])) { + if (($_POST['dst'] && !is_ipaddroralias($_POST['dst']))) { + $input_errors[] = sprintf(gettext("%s is not a valid destination IP address or alias."), $_POST['dst']); + } + if (($_POST['dstmask'] && !is_numericint($_POST['dstmask']))) { + $input_errors[] = gettext("A valid destination bit count must be specified."); + } + } + + if ($_POST['srcbeginport'] > $_POST['srcendport']) { + /* swap */ + $tmp = $_POST['srcendport']; + $_POST['srcendport'] = $_POST['srcbeginport']; + $_POST['srcbeginport'] = $tmp; + } + if ($_POST['dstbeginport'] > $_POST['dstendport']) { + /* swap */ + $tmp = $_POST['dstendport']; + $_POST['dstendport'] = $_POST['dstbeginport']; + $_POST['dstbeginport'] = $tmp; + } + + if (!$input_errors) { + if (!isset($_POST['nordr']) && ($_POST['dstendport'] - $_POST['dstbeginport'] + $_POST['localbeginport']) > 65535) + $input_errors[] = gettext("The target port range must be an integer between 1 and 65535."); + } + + /* check for overlaps */ + foreach ($a_nat as $natent) { + if (isset($id) && ($a_nat[$id]) && ($a_nat[$id] === $natent)) + continue; + if ($natent['interface'] != $_POST['interface']) + continue; + if ($natent['destination']['address'] != $_POST['dst']) + continue; + if (($natent['proto'] != $_POST['proto']) && ($natent['proto'] != "tcp/udp") && ($_POST['proto'] != "tcp/udp")) + continue; + + list($begp,$endp) = explode("-", $natent['destination']['port']); + if (!$endp) + $endp = $begp; + + if (!( (($_POST['beginport'] < $begp) && ($_POST['endport'] < $begp)) + || (($_POST['beginport'] > $endp) && ($_POST['endport'] > $endp)))) { + + $input_errors[] = gettext("The destination port range overlaps with an existing entry."); + break; + } + } + + // Allow extending of the firewall edit page and include custom input validation + pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/input_validation"); + + if (!$input_errors) { + $natent = array(); + + $natent['disabled'] = isset($_POST['disabled']) ? true:false; + $natent['nordr'] = isset($_POST['nordr']) ? true:false; + + if ($natent['nordr']) { + $_POST['associated-rule-id'] = ''; + $_POST['filter-rule-association'] = ''; + } + + pconfig_to_address($natent['source'], $_POST['src'], + $_POST['srcmask'], $_POST['srcnot'], + $_POST['srcbeginport'], $_POST['srcendport']); + + pconfig_to_address($natent['destination'], $_POST['dst'], + $_POST['dstmask'], $_POST['dstnot'], + $_POST['dstbeginport'], $_POST['dstendport']); + + $natent['protocol'] = $_POST['proto']; + + if (!$natent['nordr']) { + $natent['target'] = $_POST['localip']; + $natent['local-port'] = $_POST['localbeginport']; + } + $natent['interface'] = $_POST['interface']; + $natent['descr'] = $_POST['descr']; + $natent['associated-rule-id'] = $_POST['associated-rule-id']; + + if($_POST['filter-rule-association'] == "pass") + $natent['associated-rule-id'] = "pass"; + + if($_POST['nosync'] == "yes") + $natent['nosync'] = true; + else + unset($natent['nosync']); + + if ($_POST['natreflection'] == "enable" || $_POST['natreflection'] == "purenat" || $_POST['natreflection'] == "disable") + $natent['natreflection'] = $_POST['natreflection']; + else + unset($natent['natreflection']); + + // If we used to have an associated filter rule, but no-longer should have one + if (!empty($a_nat[$id]) && ( empty($natent['associated-rule-id']) || $natent['associated-rule-id'] != $a_nat[$id]['associated-rule-id'] ) ) { + // Delete the previous rule + delete_id($a_nat[$id]['associated-rule-id'], $config['filter']['rule']); + mark_subsystem_dirty('filter'); + } + + $need_filter_rule = false; + // Updating a rule with a filter rule associated + if (!empty($natent['associated-rule-id'])) + $need_filter_rule = true; + // Create a rule or if we want to create a new one + if( $natent['associated-rule-id']=='new' ) { + $need_filter_rule = true; + unset( $natent['associated-rule-id'] ); + $_POST['filter-rule-association']='add-associated'; + } + // If creating a new rule, where we want to add the filter rule, associated or not + else if( isset($_POST['filter-rule-association']) && + ($_POST['filter-rule-association']=='add-associated' || + $_POST['filter-rule-association']=='add-unassociated') ) + $need_filter_rule = true; + + if ($need_filter_rule == true) { + + /* auto-generate a matching firewall rule */ + $filterent = array(); + unset($filterentid); + // If a rule already exists, load it + if (!empty($natent['associated-rule-id'])) { + $filterentid = get_id($natent['associated-rule-id'], $config['filter']['rule']); + if ($filterentid === false) + $filterent['associated-rule-id'] = $natent['associated-rule-id']; + else + $filterent =& $config['filter']['rule'][$filterentid]; + } + pconfig_to_address($filterent['source'], $_POST['src'], + $_POST['srcmask'], $_POST['srcnot'], + $_POST['srcbeginport'], $_POST['srcendport']); + + // Update interface, protocol and destination + $filterent['interface'] = $_POST['interface']; + $filterent['protocol'] = $_POST['proto']; + $filterent['destination']['address'] = $_POST['localip']; + + $dstpfrom = $_POST['localbeginport']; + $dstpto = $dstpfrom + $_POST['dstendport'] - $_POST['dstbeginport']; + + if ($dstpfrom == $dstpto) + $filterent['destination']['port'] = $dstpfrom; + else + $filterent['destination']['port'] = $dstpfrom . "-" . $dstpto; + + /* + * Our firewall filter description may be no longer than + * 63 characters, so don't let it be. + */ + $filterent['descr'] = substr("NAT " . $_POST['descr'], 0, 62); + + // If this is a new rule, create an ID and add the rule + if( $_POST['filter-rule-association']=='add-associated' ) { + $filterent['associated-rule-id'] = $natent['associated-rule-id'] = get_unique_id(); + $filterent['created'] = make_config_revision_entry(null, gettext("NAT Port Forward")); + $config['filter']['rule'][] = $filterent; + } + + mark_subsystem_dirty('filter'); + } + + if ( isset($a_nat[$id]['created']) && is_array($a_nat[$id]['created']) ) + $natent['created'] = $a_nat[$id]['created']; + + $natent['updated'] = make_config_revision_entry(); + + // Allow extending of the firewall edit page and include custom input validation + pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/pre_write_config"); + + // Update the NAT entry now + if (isset($id) && $a_nat[$id]) + $a_nat[$id] = $natent; + else { + $natent['created'] = make_config_revision_entry(); + if (is_numeric($after)) + array_splice($a_nat, $after+1, 0, array($natent)); + else + $a_nat[] = $natent; + } + + if (write_config()) + mark_subsystem_dirty('natconf'); + + header("Location: firewall_nat.php"); + exit; + } +} + +$closehead = false; +$pgtitle = array(gettext("Firewall"),gettext("NAT"),gettext("Port Forward"),gettext("Edit")); +include("head.inc"); + +?> + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + /> +
    + +
    + /> + +
    +
    +
    +
    +
    +

    +  
    + " /> - +
    + /> + +
    + +
    +
    + + + + + + + + + +
       + +
       + + / + +
    +
    + + + + + + + + + +
       + + +
    + + +
    +
    + + +
    + '' +
    +
    + +

    + 192.168.1.12
    + +
    +
    +
    + +
    + />
    + +
    + +
    + \n"; + echo $linkedrule; + ?> +
    + +

    +
     
    + +
    + +
      
      + " /> + " onclick="window.location.href=''" /> + + + + +
    +
    + + + + + diff --git a/usr/local/www/firewall_nat_npt.php b/usr/local/www/firewall_nat_npt.php new file mode 100644 index 000000000..78574fe0a --- /dev/null +++ b/usr/local/www/firewall_nat_npt.php @@ -0,0 +1,183 @@ +. + 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. +*/ +/* + pfSense_MODULE: nat +*/ + +##|+PRIV +##|*IDENT=page-firewall-nat-npt +##|*NAME=Firewall: NAT: NPT page +##|*DESCR=Allow access to the 'Firewall: NAT: NPT' page. +##|*MATCH=firewall_nat_npt.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +if (!is_array($config['nat']['npt'])) { + $config['nat']['npt'] = array(); +} +$a_npt = &$config['nat']['npt']; + +if ($_POST) { + + $pconfig = $_POST; + + if ($_POST['apply']) { + $retval = 0; + $retval |= filter_configure(); + $savemsg = get_std_save_message($retval); + + if ($retval == 0) { + clear_subsystem_dirty('natconf'); + clear_subsystem_dirty('filter'); + } + } +} + +if ($_GET['act'] == "del") { + if ($a_npt[$_GET['id']]) { + unset($a_npt[$_GET['id']]); + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_npt.php"); + exit; + } +} + +$pgtitle = array(gettext("Firewall"),gettext("NAT"),gettext("NPt")); +include("head.inc"); + +?> + + +
    + + +" . gettext("You must apply the changes in order for them to take effect."));?>
    + + + + + +
    + +
    +
    + + + + + + + + + "; + + $i = 0; foreach ($a_npt as $natent): + + if (isset($natent['disabled'])) + $textss = ""; + else + $textss = ""; ?> + + + + + + + + + + + + + +
    + + + + + +
    " alt="add" />
    +
    + + + + + + + +   + + + + + + + +
    " alt="edit" />')">" alt="delete" />
    +
    + + + + + +
    " alt="add" />
    +
    +
    +
    +
    + + + diff --git a/usr/local/www/firewall_nat_npt_edit.php b/usr/local/www/firewall_nat_npt_edit.php new file mode 100644 index 000000000..a0d3ff3e4 --- /dev/null +++ b/usr/local/www/firewall_nat_npt_edit.php @@ -0,0 +1,288 @@ +. + 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. +*/ +/* + pfSense_MODULE: nat +*/ + +##|+PRIV +##|*IDENT=page-firewall-nat-npt-edit +##|*NAME=Firewall: NAT: NPt: Edit page +##|*DESCR=Allow access to the 'Firewall: NAT: NPt: Edit' page. +##|*MATCH=firewall_nat_npt_edit.php* +##|-PRIV + +function natnptcmp($a, $b) { + return ipcmp($a['external'], $b['external']); +} + +function nat_npt_rules_sort() { + global $g, $config; + + if (!is_array($config['nat']['npt'])) + return; + + + usort($config['nat']['npt'], "natnptcmp"); +} + +require("guiconfig.inc"); +require_once("interfaces.inc"); +require_once("filter.inc"); +require("shaper.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat_npt.php'); + +$ifdisp = get_configured_interface_with_descr(); +foreach ($ifdisp as $kif => $kdescr) { + $specialsrcdst[] = "{$kif}"; + $specialsrcdst[] = "{$kif}ip"; +} + +if (!is_array($config['nat']['npt'])) { + $config['nat']['npt'] = array(); +} +$a_npt = &$config['nat']['npt']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_npt[$id]) { + $pconfig['disabled'] = isset($a_npt[$id]['disabled']); + + address_to_pconfig($a_npt[$id]['source'], $pconfig['src'], + $pconfig['srcmask'], $pconfig['srcnot'], + $pconfig['srcbeginport'], $pconfig['srcendport']); + + address_to_pconfig($a_npt[$id]['destination'], $pconfig['dst'], + $pconfig['dstmask'], $pconfig['dstnot'], + $pconfig['dstbeginport'], $pconfig['dstendport']); + + $pconfig['interface'] = $a_npt[$id]['interface']; + if (!$pconfig['interface']) + $pconfig['interface'] = "wan"; + + $pconfig['external'] = $a_npt[$id]['external']; + $pconfig['descr'] = $a_npt[$id]['descr']; +} else + $pconfig['interface'] = "wan"; + + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "interface"); + $reqdfieldsn = array(gettext("Interface")); + $reqdfields[] = "src"; + $reqdfieldsn[] = gettext("Source prefix"); + $reqdfields[] = "dst"; + $reqdfieldsn[] = gettext("Destination prefix"); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (!$input_errors) { + $natent = array(); + + $natent['disabled'] = isset($_POST['disabled']) ? true:false; + $natent['descr'] = $_POST['descr']; + $natent['interface'] = $_POST['interface']; + + if ($_POST['src']) + $_POST['src'] = trim($_POST['src']); + if ($_POST['dst']) + $_POST['dst'] = trim($_POST['dst']); + + pconfig_to_address($natent['source'], $_POST['src'], + $_POST['srcmask'], $_POST['srcnot']); + + pconfig_to_address($natent['destination'], $_POST['dst'], + $_POST['dstmask'], $_POST['dstnot']); + + if (isset($id) && $a_npt[$id]) + $a_npt[$id] = $natent; + else + $a_npt[] = $natent; + nat_npt_rules_sort(); + + if (write_config()) + mark_subsystem_dirty('natconf'); + + header("Location: firewall_nat_npt.php"); + exit; + } +} + +$pgtitle = array(gettext("Firewall"),gettext("NAT"),gettext("NPt"),gettext("Edit")); +include("head.inc"); + +?> + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + /> +
    + +
    +
    + .
    + .
    + /> + +
    + +
    +
    + + + + + +
       + / + +
    +
    + +
    + /> + +
    + +
    +
    + + + + + +
       + + / + +
    +
    +
    +
    + +
      + " /> + " onclick="window.location.href=''" /> + + + +
    +
    + + + diff --git a/usr/local/www/firewall_nat_out.php b/usr/local/www/firewall_nat_out.php new file mode 100644 index 000000000..7b509dd0d --- /dev/null +++ b/usr/local/www/firewall_nat_out.php @@ -0,0 +1,661 @@ +. + 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. +*/ +/* + pfSense_MODULE: nat +*/ + +##|+PRIV +##|*IDENT=page-firewall-nat-outbound +##|*NAME=Firewall: NAT: Outbound page +##|*DESCR=Allow access to the 'Firewall: NAT: Outbound' page. +##|*MATCH=firewall_nat_out.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +global $FilterIflist; +global $GatewaysList; + +if (!is_array($config['nat']['outbound'])) + $config['nat']['outbound'] = array(); + +if (!is_array($config['nat']['outbound']['rule'])) + $config['nat']['outbound']['rule'] = array(); + +$a_out = &$config['nat']['outbound']['rule']; + +if (!isset($config['nat']['outbound']['mode'])) + $config['nat']['outbound']['mode'] = "automatic"; + +$mode = $config['nat']['outbound']['mode']; + +if ($_POST['apply']) { + write_config(); + + $retval = 0; + $retval |= filter_configure(); + + if(stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + + if ($retval == 0) { + clear_subsystem_dirty('natconf'); + clear_subsystem_dirty('filter'); + } +} + +if (isset($_POST['save']) && $_POST['save'] == "Save") { + /* mutually exclusive settings - if user wants advanced NAT, we don't generate automatic rules */ + if ($_POST['mode'] == "advanced" && ($mode == "automatic" || $mode == "hybrid")) { + /* + * user has enabled advanced outbound NAT and doesn't have rules + * lets automatically create entries + * for all of the interfaces to make life easier on the pip-o-chap + */ + if(empty($FilterIflist)) + filter_generate_optcfg_array(); + if(empty($GatewaysList)) + filter_generate_gateways(); + $tonathosts = filter_nat_rules_automatic_tonathosts(true); + $automatic_rules = filter_nat_rules_outbound_automatic(""); + + foreach ($tonathosts as $tonathost) { + foreach ($automatic_rules as $natent) { + $natent['source']['network'] = $tonathost['subnet']; + $natent['descr'] .= sprintf(gettext(' - %1$s to %2$s'), + $tonathost['descr'], + convert_real_interface_to_friendly_descr($natent['interface'])); + $natent['created'] = make_config_revision_entry(null, gettext("Manual Outbound NAT Switch")); + + /* Try to detect already auto created rules and avoid duplicate them */ + $found = false; + foreach ($a_out as $rule) { + if ($rule['interface'] == $natent['interface'] && + $rule['source']['network'] == $natent['source']['network'] && + $rule['dstport'] == $natent['dstport'] && + $rule['target'] == $natent['target'] && + $rule['descr'] == $natent['descr']) { + $found = true; + break; + } + } + + if ($found === false) + $a_out[] = $natent; + } + } + $savemsg = gettext("Default rules for each interface have been created."); + unset($FilterIflist, $GatewaysList); + } + + $config['nat']['outbound']['mode'] = $_POST['mode']; + + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_out.php"); + exit; +} + +if ($_GET['act'] == "del") { + if ($a_out[$_GET['id']]) { + unset($a_out[$_GET['id']]); + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_out.php"); + exit; + } +} + +if (isset($_POST['del_x'])) { + /* delete selected rules */ + if (is_array($_POST['rule']) && count($_POST['rule'])) { + foreach ($_POST['rule'] as $rulei) { + unset($a_out[$rulei]); + } + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_out.php"); + exit; + } + +} else if ($_GET['act'] == "toggle") { + if ($a_out[$_GET['id']]) { + if(isset($a_out[$_GET['id']]['disabled'])) + unset($a_out[$_GET['id']]['disabled']); + else + $a_out[$_GET['id']]['disabled'] = true; + if (write_config("Firewall: NAT: Outbound, enable/disable NAT rule")) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_out.php"); + exit; + } +} else { + /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */ + unset($movebtn); + foreach ($_POST as $pn => $pd) { + if (preg_match("/move_(\d+)_x/", $pn, $matches)) { + $movebtn = $matches[1]; + break; + } + } + /* move selected rules before this rule */ + if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) { + $a_out_new = array(); + + /* copy all rules < $movebtn and not selected */ + for ($i = 0; $i < $movebtn; $i++) { + if (!in_array($i, $_POST['rule'])) + $a_out_new[] = $a_out[$i]; + } + + /* copy all selected rules */ + for ($i = 0; $i < count($a_out); $i++) { + if ($i == $movebtn) + continue; + if (in_array($i, $_POST['rule'])) + $a_out_new[] = $a_out[$i]; + } + + /* copy $movebtn rule */ + if ($movebtn < count($a_out)) + $a_out_new[] = $a_out[$movebtn]; + + /* copy all rules > $movebtn and not selected */ + for ($i = $movebtn+1; $i < count($a_out); $i++) { + if (!in_array($i, $_POST['rule'])) + $a_out_new[] = $a_out[$i]; + } + if (count($a_out_new) > 0) + $a_out = $a_out_new; + + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_out.php"); + exit; + } +} + +$pgtitle = array(gettext("Firewall"),gettext("NAT"),gettext("Outbound")); +include("head.inc"); + +?> + + +
    + +".gettext("You must apply the changes in order for them to take effect.")); +?> +
    + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    + /> + + +
    + +
    +
    + /> + + +
    + +
    +
    + " /> +
    +   +
    + /> + + +
    + +
    +
    + /> + + +
    + +
    +
    +   +
    + + + + + + + + + + + + + + + + + +"; + $textse = ""; + $iconfn .= "_d"; + } + + //build Alias popup box + $alias_src_span_begin = ""; + $alias_src_port_span_begin = ""; + $alias_dst_span_begin = ""; + $alias_dst_port_span_begin = ""; + + $alias_popup = rule_popup($natent['source']['network'],pprint_port($natent['sourceport']),$natent['destination']['address'],pprint_port($natent['dstport'])); + + $alias_src_span_begin = $alias_popup["src"]; + $alias_src_port_span_begin = $alias_popup["srcport"]; + $alias_dst_span_begin = $alias_popup["dst"]; + $alias_dst_port_span_begin = $alias_popup["dstport"]; + + $alias_src_span_end = $alias_popup["src_end"]; + $alias_src_port_span_end = $alias_popup["srcport_end"]; + $alias_dst_span_end = $alias_popup["dst_end"]; + $alias_dst_port_span_end = $alias_popup["dstport_end"]; +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
     
       + + + + + +
    + + " alt="add" /> + +
    +
    + + + + " alt="icon" /> + + + " alt="icon" /> + + + + +   + + + + + + + + + + +NO NAT'; + elseif (!$natent['target']) + echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface'])) . " address"; + elseif ($natent['target'] == "other-subnet") + echo $natent['targetip'] . '/' . $natent['targetip_subnet']; + else + echo $natent['target']; + echo $textse; +?> + + + + + +   + + + + + + + + + + +
    " type="image" style="height:17;width:17;border:0" /> + + " alt="edit" /> + +
    + ')"> + " alt="delete" /> + + + + " width="17" height="17" border="0" alt="duplicate" /> + +
    +
    + + + + + + + + +
    + + " border="0" alt="move" /> + + " /> + + + + " alt="add" /> + +
    + + " border="0" alt="delete" /> + + " onclick="return confirm('')" /> + +
    +
     
     
       
      + " alt="icon" /> + + +   + + + + + + + + + +NO NAT'; + elseif (!$natent['target']) + echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface'])) . " address"; + elseif ($natent['target'] == "other-subnet") + echo $natent['targetip'] . '/' . $natent['targetip_subnet']; + else + echo $natent['target']; +?> + + + + + +   +  
    +

    +
    +
    " . + "If manual outbound NAT is selected, outbound NAT rules will not be " . + "automatically generated and only the mappings you specify on this page " . + "will be used.

    " . + "If hybrid outbound NAT is selected, mappings you specify on this page will " . + "be used, followed by the automatically generated ones.

    " . + "If disable outbound NAT is selected, no rules will be used.

    " . + "If a target address other than a WAN-type interface's IP address is used, " . + "then depending on the way the WAN connection is setup, a "); ?> + + +

    +
    +
    +
    +
    + + + diff --git a/usr/local/www/firewall_nat_out_edit.php b/usr/local/www/firewall_nat_out_edit.php new file mode 100644 index 000000000..09f50e541 --- /dev/null +++ b/usr/local/www/firewall_nat_out_edit.php @@ -0,0 +1,861 @@ +. + 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. +*/ +/* + pfSense_MODULE: nat +*/ + +##|+PRIV +##|*IDENT=page-firewall-nat-outbound-edit +##|*NAME=Firewall: NAT: Outbound: Edit page +##|*DESCR=Allow access to the 'Firewall: NAT: Outbound: Edit' page. +##|*MATCH=firewall_nat_out_edit.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("filter.inc"); +require("shaper.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat_out.php'); + +if (!is_array($config['nat']['outbound'])) + $config['nat']['outbound'] = array(); + +if (!is_array($config['nat']['outbound']['rule'])) { + $config['nat']['outbound']['rule'] = array(); +} + +$a_out = &$config['nat']['outbound']['rule']; + +if (!is_array($config['aliases']['alias'])) + $config['aliases']['alias'] = array(); +$a_aliases = &$config['aliases']['alias']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (is_numericint($_GET['after']) || $_GET['after'] == "-1") + $after = $_GET['after']; +if (isset($_POST['after']) && (is_numericint($_POST['after']) || $_POST['after'] == "-1")) + $after = $_POST['after']; + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) { + $id = $_GET['dup']; + $after = $_GET['dup']; +} + +if (isset($id) && $a_out[$id]) { + if ( isset($a_out[$id]['created']) && is_array($a_out[$id]['created']) ) + $pconfig['created'] = $a_out[$id]['created']; + + if ( isset($a_out[$id]['updated']) && is_array($a_out[$id]['updated']) ) + $pconfig['updated'] = $a_out[$id]['updated']; + + $pconfig['protocol'] = $a_out[$id]['protocol']; + list($pconfig['source'],$pconfig['source_subnet']) = explode('/', $a_out[$id]['source']['network']); + if (!is_numeric($pconfig['source_subnet'])) + $pconfig['source_subnet'] = 32; + $pconfig['sourceport'] = $a_out[$id]['sourceport']; + address_to_pconfig($a_out[$id]['destination'], $pconfig['destination'], + $pconfig['destination_subnet'], $pconfig['destination_not'], + $none, $none); + $pconfig['dstport'] = $a_out[$id]['dstport']; + $pconfig['natport'] = $a_out[$id]['natport']; + $pconfig['target'] = $a_out[$id]['target']; + $pconfig['targetip'] = $a_out[$id]['targetip']; + $pconfig['targetip_subnet'] = $a_out[$id]['targetip_subnet']; + $pconfig['poolopts'] = $a_out[$id]['poolopts']; + $pconfig['interface'] = $a_out[$id]['interface']; + if (!$pconfig['interface']) { + $pconfig['interface'] = "wan"; + } + $pconfig['descr'] = $a_out[$id]['descr']; + $pconfig['nonat'] = $a_out[$id]['nonat']; + $pconfig['disabled'] = isset($a_out[$id]['disabled']); + $pconfig['staticnatport'] = isset($a_out[$id]['staticnatport']); + $pconfig['nosync'] = isset($a_out[$id]['nosync']); +} else { + $pconfig['source_subnet'] = 24; + $pconfig['destination'] = "any"; + $pconfig['destination_subnet'] = 24; + $pconfig['interface'] = "wan"; +} + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) + unset($id); + +if ($_POST) { + if ($_POST['destination_type'] == "any") { + $_POST['destination'] = "any"; + $_POST['destination_subnet'] = 24; + } + if ($_POST['source_type'] == "any") { + $_POST['source'] = "any"; + $_POST['source_subnet'] = 24; + } elseif ($_POST['source_type'] == "(self)") { + $_POST['source'] = "(self)"; + $_POST['source_subnet'] = 24; + } + + unset($input_errors); + $pconfig = $_POST; + /* run through $_POST items encoding HTML entties so that the user + * cannot think he is slick and perform a XSS attack on the unwilling + */ + foreach ($_POST as $key => $value) { + $temp = str_replace(">", "", $value); + $newpost = htmlentities($temp); + if($newpost <> $temp) + $input_errors[] = sprintf(gettext("Invalid characters detected (%s). Please remove invalid characters and save again."),$temp); + } + + /* input validation */ + $reqdfields = explode(" ", "interface protocol source source_subnet destination destination_subnet"); + $reqdfieldsn = array(gettext("Interface"),gettext("Protocol"),gettext("Source"),gettext("Source bit count"),gettext("Destination"),gettext("Destination bit count")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + $protocol_uses_ports = in_array($_POST['protocol'], explode(" ", "any tcp udp tcp/udp")); + + if ($_POST['source']) + $_POST['source'] = trim($_POST['source']); + if ($_POST['destination']) + $_POST['destination'] = trim($_POST['destination']); + if ($_POST['targetip']) + $_POST['targetip'] = trim($_POST['targetip']); + if ($_POST['sourceport']) + $_POST['sourceport'] = trim($_POST['sourceport']); + if ($_POST['dstport']) + $_POST['dstport'] = trim($_POST['dstport']); + if ($_POST['natport']) + $_POST['natport'] = trim($_POST['natport']); + + if($protocol_uses_ports && $_POST['sourceport'] <> "" && !is_portoralias($_POST['sourceport'])) + $input_errors[] = gettext("You must supply either a valid port or port alias for the source port entry."); + + if($protocol_uses_ports && $_POST['dstport'] <> "" && !is_portoralias($_POST['dstport'])) + $input_errors[] = gettext("You must supply either a valid port or port alias for the destination port entry."); + + if($protocol_uses_ports && $_POST['natport'] <> "" && !is_port($_POST['natport']) && !isset($_POST['nonat'])) + $input_errors[] = gettext("You must supply a valid port for the NAT port entry."); + + if (($_POST['source_type'] != "any") && ($_POST['source_type'] != "(self)")) { + if ($_POST['source'] && !is_ipaddroralias($_POST['source']) && $_POST['source'] <> "any") { + $input_errors[] = gettext("A valid source must be specified."); + } + } + if ($_POST['source_subnet'] && !is_numericint($_POST['source_subnet'])) { + $input_errors[] = gettext("A valid source bit count must be specified."); + } + if ($_POST['destination_type'] != "any") { + if ($_POST['destination'] && !is_ipaddroralias($_POST['destination'])) { + $input_errors[] = gettext("A valid destination must be specified."); + } + } + if ($_POST['destination_subnet'] && !is_numericint($_POST['destination_subnet'])) { + $input_errors[] = gettext("A valid destination bit count must be specified."); + } + if ($_POST['destination_type'] == "any") { + if ($_POST['destination_not']) { + $input_errors[] = gettext("Negating destination address of \"any\" is invalid."); + } + } + + if ($_POST['target'] && !is_ipaddr($_POST['target']) && !is_subnet($_POST['target']) && !is_alias($_POST['target']) && !isset($_POST['nonat']) && !($_POST['target'] == "other-subnet")) { + $input_errors[] = gettext("A valid target IP address must be specified."); + } + + if ($_POST['target'] == "other-subnet") { + if (!is_ipaddr($_POST['targetip'])) { + $input_errors[] = gettext("A valid target IP must be specified when using the 'Other Subnet' type."); + } + if (!is_numericint($_POST['targetip_subnet'])) { + $input_errors[] = gettext("A valid target bit count must be specified when using the 'Other Subnet' type."); + } + } + + /* Verify Pool Options */ + $poolopts = ""; + if ($_POST['poolopts']) { + if (is_subnet($_POST['target']) || ($_POST['target'] == "other-subnet")) + $poolopts = $_POST['poolopts']; + elseif (is_alias($_POST['target'])) { + if (substr($_POST['poolopts'], 0, 11) == "round-robin") + $poolopts = $_POST['poolopts']; + else + $input_errors[] = gettext("Only Round Robin pool options may be chosen when selecting an alias."); + } + } + + /* if user has selected any as source, set it here */ + if($_POST['source_type'] == "any") { + $osn = "any"; + } else if($_POST['source_type'] == "(self)") { + $osn = "(self)"; + } else if(is_alias($_POST['source'])) { + $osn = $_POST['source']; + } else { + $osn = gen_subnet($_POST['source'], $_POST['source_subnet']) . "/" . $_POST['source_subnet']; + } + + /* check for existing entries */ + if ($_POST['destination_type'] == "any") { + $ext = "any"; + } else if(is_alias($_POST['destination'])) { + $ext = $_POST['destination']; + } else { + $ext = gen_subnet($_POST['destination'], $_POST['destination_subnet']) . "/" . $_POST['destination_subnet']; + } + + foreach ($a_out as $natent) { + if (isset($id) && ($a_out[$id]) && ($a_out[$id] === $natent)) { + continue; + } + + if (!$natent['interface']) { + $natent['interface'] == "wan"; + } + } + + // Allow extending of the firewall edit page and include custom input validation + pfSense_handle_custom_code("/usr/local/pkg/firewall_aon/input_validation"); + + if (!$input_errors) { + $natent = array(); + $natent['source']['network'] = $osn; + $natent['sourceport'] = ($protocol_uses_ports) ? $_POST['sourceport'] : ""; + $natent['descr'] = $_POST['descr']; + $natent['target'] = (!isset($_POST['nonat'])) ? $_POST['target'] : ""; + $natent['targetip'] = (!isset($_POST['nonat'])) ? $_POST['targetip'] : ""; + $natent['targetip_subnet'] = (!isset($_POST['nonat'])) ? $_POST['targetip_subnet'] : ""; + $natent['interface'] = $_POST['interface']; + $natent['poolopts'] = $poolopts; + + /* static-port */ + if(isset($_POST['staticnatport']) && $protocol_uses_ports && !isset($_POST['nonat'])) { + $natent['staticnatport'] = true; + } else { + unset($natent['staticnatport']); + } + + if(isset($_POST['disabled'])) { + $natent['disabled'] = true; + } else { + unset($natent['disabled']); + } + + /* if user has selected not nat, set it here */ + if(isset($_POST['nonat'])) { + $natent['nonat'] = true; + } else { + unset($natent['nonat']); + } + + if ($_POST['protocol'] && $_POST['protocol'] != "any") + $natent['protocol'] = $_POST['protocol']; + else + unset($natent['protocol']); + + if ($ext == "any") { + $natent['destination']['any'] = true; + } else { + $natent['destination']['address'] = $ext; + } + if($_POST['natport'] != "" && $protocol_uses_ports && !isset($_POST['nonat'])) { + $natent['natport'] = $_POST['natport']; + } else { + unset($natent['natport']); + } + if($_POST['dstport'] != "" && $protocol_uses_ports) { + $natent['dstport'] = $_POST['dstport']; + } else { + unset($natent['dstport']); + } + + if($_POST['nosync'] == "yes") { + $natent['nosync'] = true; + } else { + unset($natent['nosync']); + } + + if (isset($_POST['destination_not']) && $ext != "any") { + $natent['destination']['not'] = true; + } + + if ( isset($a_out[$id]['created']) && is_array($a_out[$id]['created']) ) + $natent['created'] = $a_out[$id]['created']; + + $natent['updated'] = make_config_revision_entry(); + + // Allow extending of the firewall edit page and include custom input validation + pfSense_handle_custom_code("/usr/local/pkg/firewall_aon/pre_write_config"); + + if (isset($id) && $a_out[$id]) { + $a_out[$id] = $natent; + } else { + $natent['created'] = make_config_revision_entry(); + if (is_numeric($after)) { + array_splice($a_out, $after+1, 0, array($natent)); + } else { + $a_out[] = $natent; + } + } + + if (write_config()) + mark_subsystem_dirty('natconf'); + header("Location: firewall_nat_out.php"); + exit; + } +} + +$pgtitle = array(gettext("Firewall"),gettext("NAT"),gettext("Outbound"),gettext("Edit")); +$closehead = false; +include("head.inc"); + +?> + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + /> +
    + +
    + /> + +
    +
    +
    +
    + +
    +
    +
    +
    +"," "); +?> +
    +
    + + + + + + + + + + + + + + + + + +
       + +
       + / + +
      + +
       + + +
    +
    + /> +
    +
    +
    + + + + + + + + + + + + + + + + + +
       + +
       + / + +
      + +
       + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
       + +
       + / + +
      +
    + + + +

    +
    Pool Options + +
    + +
    + *
    + *
    + *
    + *
    + *
    +

    +
       + +
      + +
       />
    +
    + />
    + +
    + +
    + +
     
    + +
    + +
      + " /> + " onclick="window.location.href=''" /> + + + + +
    +
    + + + + diff --git a/usr/local/www/firewall_rules.php b/usr/local/www/firewall_rules.php new file mode 100644 index 000000000..1c3b2cd88 --- /dev/null +++ b/usr/local/www/firewall_rules.php @@ -0,0 +1,928 @@ +. + 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. +*/ +/* + pfSense_MODULE: filter +*/ + +##|+PRIV +##|*IDENT=page-firewall-rules +##|*NAME=Firewall: Rules page +##|*DESCR=Allow access to the 'Firewall: Rules' page. +##|*MATCH=firewall_rules.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +$pgtitle = array(gettext("Firewall"),gettext("Rules")); +$shortcut_section = "firewall"; + +function delete_nat_association($id) { + global $config; + + if (!$id || !is_array($config['nat']['rule'])) + return; + + $a_nat = &$config['nat']['rule']; + + foreach ($a_nat as &$natent) + if ($natent['associated-rule-id'] == $id) + $natent['associated-rule-id'] = ''; +} + +if (!is_array($config['filter']['rule'])) { + $config['filter']['rule'] = array(); +} +filter_rules_sort(); +$a_filter = &$config['filter']['rule']; + +$if = $_GET['if']; +if ($_POST['if']) + $if = $_POST['if']; + +$ifdescs = get_configured_interface_with_descr(); + +// Drag and drop reordering +if($_REQUEST['dragdroporder']) { + // First create a new ruleset array and tmp arrays + $a_filter_before = array(); + $a_filter_order = array(); + $a_filter_order_tmp = array(); + $a_filter_after = array(); + $found = false; + $drag_order = $_REQUEST['dragtable']; + // Next traverse through rules building a new order for interface + for ($i = 0; isset($a_filter[$i]); $i++) { + if(( $_REQUEST['if'] == "FloatingRules" && isset($a_filter[$i]['floating']) ) || ( $a_filter[$i]['interface'] == $_REQUEST['if'] && !isset($a_filter[$i]['floating']) )) { + $a_filter_order_tmp[] = $a_filter[$i]; + $found = true; + } else if (!$found) + $a_filter_before[] = $a_filter[$i]; + else + $a_filter_after[] = $a_filter[$i]; + } + // Reorder rules with the posted order + for ($i = 0; $i gettext("any"), + "echoreq" => gettext("Echo request"), + "echorep" => gettext("Echo reply"), + "unreach" => gettext("Destination unreachable"), + "squench" => gettext("Source quench"), + "redir" => gettext("Redirect"), + "althost" => gettext("Alternate Host"), + "routeradv" => gettext("Router advertisement"), + "routersol" => gettext("Router solicitation"), + "timex" => gettext("Time exceeded"), + "paramprob" => gettext("Invalid IP header"), + "timereq" => gettext("Timestamp"), + "timerep" => gettext("Timestamp reply"), + "inforeq" => gettext("Information request"), + "inforep" => gettext("Information reply"), + "maskreq" => gettext("Address mask request"), + "maskrep" => gettext("Address mask reply") +); + +/* add group interfaces */ +if (is_array($config['ifgroups']['ifgroupentry'])) + foreach($config['ifgroups']['ifgroupentry'] as $ifgen) + if (have_ruleint_access($ifgen['ifname'])) + $iflist[$ifgen['ifname']] = $ifgen['ifname']; + +foreach ($ifdescs as $ifent => $ifdesc) + if(have_ruleint_access($ifent)) + $iflist[$ifent] = $ifdesc; + +if ($config['l2tp']['mode'] == "server") + if(have_ruleint_access("l2tp")) + $iflist['l2tp'] = "L2TP VPN"; + +if ($config['pptpd']['mode'] == "server") + if(have_ruleint_access("pptp")) + $iflist['pptp'] = "PPTP VPN"; + +if (is_array($config['pppoes']['pppoe'])) { + foreach ($config['pppoes']['pppoe'] as $pppoes) + if (($pppoes['mode'] == 'server') && have_ruleint_access("pppoe")) + $iflist['pppoe'] = "PPPoE Server"; +} + +/* add ipsec interfaces */ +if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) + if(have_ruleint_access("enc0")) + $iflist["enc0"] = "IPsec"; + +/* add openvpn/tun interfaces */ +if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) + $iflist["openvpn"] = "OpenVPN"; + +pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/interfaces_override"); + +if (!$if || !isset($iflist[$if])) { + if ("any" == $if) + $if = "FloatingRules"; + else if ("FloatingRules" != $if) { + if (isset($iflist['wan'])) + $if = "wan"; + else + $if = "FloatingRules"; + } +} + +if ($_POST) { + + $pconfig = $_POST; + + if ($_POST['apply']) { + $retval = 0; + $retval = filter_configure(); + + clear_subsystem_dirty('filter'); + + pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/apply"); + + $savemsg = sprintf(gettext("The settings have been applied. The firewall rules are now reloading in the background.
    You can also %s monitor %s the reload progress"),"",""); + } +} + +if ($_GET['act'] == "del") { + if ($a_filter[$_GET['id']]) { + if (!empty($a_filter[$_GET['id']]['associated-rule-id'])) { + delete_nat_association($a_filter[$_GET['id']]['associated-rule-id']); + } + unset($a_filter[$_GET['id']]); + if (write_config()) + mark_subsystem_dirty('filter'); + header("Location: firewall_rules.php?if=" . htmlspecialchars($if)); + exit; + } +} + +// Handle save msg if defined +if($_REQUEST['savemsg']) + $savemsg = htmlentities($_REQUEST['savemsg']); + +if (isset($_POST['del_x'])) { + /* delete selected rules */ + if (is_array($_POST['rule']) && count($_POST['rule'])) { + foreach ($_POST['rule'] as $rulei) { + delete_nat_association($a_filter[$rulei]['associated-rule-id']); + unset($a_filter[$rulei]); + } + if (write_config()) + mark_subsystem_dirty('filter'); + header("Location: firewall_rules.php?if=" . htmlspecialchars($if)); + exit; + } +} else if ($_GET['act'] == "toggle") { + if ($a_filter[$_GET['id']]) { + if(isset($a_filter[$_GET['id']]['disabled'])) + unset($a_filter[$_GET['id']]['disabled']); + else + $a_filter[$_GET['id']]['disabled'] = true; + if (write_config()) + mark_subsystem_dirty('filter'); + header("Location: firewall_rules.php?if=" . htmlspecialchars($if)); + exit; + } +} else { + /* yuck - IE won't send value attributes for image buttons, while Mozilla does - + so we use .x/.y to fine move button clicks instead... */ + unset($movebtn); + foreach ($_POST as $pn => $pd) { + if (preg_match("/move_(\d+)_x/", $pn, $matches)) { + $movebtn = $matches[1]; + break; + } + } + /* move selected rules before this rule */ + if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) { + $a_filter_new = array(); + + /* copy all rules < $movebtn and not selected */ + for ($i = 0; $i < $movebtn; $i++) { + if (!in_array($i, $_POST['rule'])) + $a_filter_new[] = $a_filter[$i]; + } + + /* copy all selected rules */ + for ($i = 0; $i < count($a_filter); $i++) { + if ($i == $movebtn) + continue; + if (in_array($i, $_POST['rule'])) + $a_filter_new[] = $a_filter[$i]; + } + + /* copy $movebtn rule */ + if ($movebtn < count($a_filter)) + $a_filter_new[] = $a_filter[$movebtn]; + + /* copy all rules > $movebtn and not selected */ + for ($i = $movebtn+1; $i < count($a_filter); $i++) { + if (!in_array($i, $_POST['rule'])) + $a_filter_new[] = $a_filter[$i]; + } + + $a_filter = $a_filter_new; + if (write_config()) + mark_subsystem_dirty('filter'); + header("Location: firewall_rules.php?if=" . htmlspecialchars($if)); + exit; + } +} +$closehead = false; + +include("head.inc"); +?> + + + + + + +
    + + + +

    +You must apply the changes in order for them to take effect."), "apply" , gettext("Apply changes") , "firewall_rules.php?if={$_REQUEST['if']}&dragdroporder=true&{$dragtable}"); +} else { + print_info_box_np(gettext("The firewall rule configuration has been changed.
    You must apply the changes in order for them to take effect.")); +} +?> +
    + +

    + loader +

     

    +
    + + + + + +
    + $ifname) { + if ($ifent == $if) + $active = true; + else + $active = false; + $tab_array[] = array($ifname, $active, "firewall_rules.php?if={$ifent}"); + } + display_top_tabs($tab_array); + ?> +
    +
    + + + + + + + + + + + + + + + + + + + + 1, or WAN with an if count of 1. + if (!isset($config['system']['webgui']['noantilockout']) && + (((count($config['interfaces']) > 1) && ($if == 'lan')) + || ((count($config['interfaces']) == 1) && ($if == 'wan')))): + + $alports = implode('
    ', filter_get_antilockout_ports(true)); + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +"; + else + $advanced_set = ""; +?> + + + + "" and is_array($config['schedules']['schedule'])) { + foreach ($a_schedules as $schedule) + { + if ($schedule['name'] == $filterent['sched'] ){ + $schedstatus = filter_get_time_based_rule_status($schedule); + + foreach($schedule['timerange'] as $timerange) { + $tempFriendlyTime = ""; + $tempID = ""; + $firstprint = false; + if ($timerange){ + $dayFriendly = ""; + $tempFriendlyTime = ""; + + //get hours + $temptimerange = $timerange['hour']; + $temptimeseparator = strrpos($temptimerange, "-"); + + $starttime = substr ($temptimerange, 0, $temptimeseparator); + $stoptime = substr ($temptimerange, $temptimeseparator+1); + + if ($timerange['month']){ + $tempmontharray = explode(",", $timerange['month']); + $tempdayarray = explode(",",$timerange['day']); + $arraycounter = 0; + $firstDayFound = false; + $firstPrint = false; + foreach ($tempmontharray as $monthtmp){ + $month = $tempmontharray[$arraycounter]; + $day = $tempdayarray[$arraycounter]; + + if (!$firstDayFound) + { + $firstDay = $day; + $firstmonth = $month; + $firstDayFound = true; + } + + $currentDay = $day; + $nextDay = $tempdayarray[$arraycounter+1]; + $currentDay++; + if (($currentDay != $nextDay) || ($tempmontharray[$arraycounter] != $tempmontharray[$arraycounter+1])){ + if ($firstPrint) + $dayFriendly .= ", "; + $currentDay--; + if ($currentDay != $firstDay) + $dayFriendly .= $monthArray[$firstmonth-1] . " " . $firstDay . " - " . $currentDay ; + else + $dayFriendly .= $monthArray[$month-1] . " " . $day; + $firstDayFound = false; + $firstPrint = true; + } + $arraycounter++; + } + } + else + { + $tempdayFriendly = $timerange['position']; + $firstDayFound = false; + $tempFriendlyDayArray = explode(",", $tempdayFriendly); + $currentDay = ""; + $firstDay = ""; + $nextDay = ""; + $counter = 0; + foreach ($tempFriendlyDayArray as $day){ + if ($day != ""){ + if (!$firstDayFound) + { + $firstDay = $tempFriendlyDayArray[$counter]; + $firstDayFound = true; + } + $currentDay =$tempFriendlyDayArray[$counter]; + //get next day + $nextDay = $tempFriendlyDayArray[$counter+1]; + $currentDay++; + if ($currentDay != $nextDay){ + if ($firstprint) + $dayFriendly .= ", "; + $currentDay--; + if ($currentDay != $firstDay) + $dayFriendly .= $dayArray[$firstDay-1] . " - " . $dayArray[$currentDay-1]; + else + $dayFriendly .= $dayArray[$firstDay-1]; + $firstDayFound = false; + $firstprint = true; + } + $counter++; + } + } + } + $timeFriendly = $starttime . " - " . $stoptime; + $description = $timerange['rangedescr']; + $sched_content .= $dayFriendly . "; " . $timeFriendly . "
    "; + } + } + $sched_caption_escaped = str_replace("'", "\'", $schedule['descr']); + $schedule_span_begin = "{$sched_caption_escaped}

    {$sched_content}

    ', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\" onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\">"; + $schedule_span_end = "
    "; + } + } + } + $printicon = false; + $alttext = ""; + $image = ""; + if (!isset($filterent['disabled'])) { + if ($schedstatus) { + if ($iconfn == "block" || $iconfn == "reject") { + $image = "icon_block"; + $alttext = gettext("Traffic matching this rule is currently being denied"); + } else { + $image = "icon_pass"; + $alttext = gettext("Traffic matching this rule is currently being allowed"); + } + $printicon = true; + } else if ($filterent['sched']) { + if ($iconfn == "block" || $iconfn == "reject") + $image = "icon_block_d"; + else + $image = "icon_block"; + $alttext = gettext("This rule is not currently active because its period has expired"); + $printicon = true; + } + } + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
       + + + + + + +
    + + " border="0" alt="delete" /> + " onclick="return confirm('')" /> + + " width="17" height="17" border="0" alt="add" />
    +
     pass *** Address**  + + + + + + + + + +
    " alt="move" />" width="17" height="17" border="0" alt="edit" />
    " width="17" height="17" border="0" alt="add" />
    +
     block ******  + + + + + + + + + +
    " alt="edit" />" width="17" height="17" border="0" alt="edit" />
    " width="17" height="17" border="0" alt="add" />
    +
     block ******* + + + + + + + + + +
    " alt="move" />" width="17" height="17" border="0" alt=" edit" />
    " width="17" height="17" border="0" alt="add" />
    +
    + + + + "; + $textse = ""; + $iconfn .= "_d"; + } else { + $textss = $textse = ""; + } + ?> + " alt="icon" /> + +
    icon + +
    + + + + '; + echo $filterent['icmptype']; + echo ''; + } + } else echo "*"; + ?> + + + + + + + + + + + + + + {$desc}"; + $desc = $filterent['defaultqueue']; + echo "/{$desc}"; + } else if (isset($filterent['defaultqueue'])) { + $desc = $filterent['defaultqueue']; + echo "{$desc}"; + } else + echo gettext("none"); + ?> + + + icon  + +   + + + + + + + + + + +
    " onmouseover="fr_insline(, true)" onmouseout="fr_insline(, false)" />" width="17" height="17" border="0" alt="edit" />
    " onclick="return confirm('Do you really want to delete this rule?')" alt="delete" />" width="17" height="17" border="0" alt="add" />
    +
    + + +

    + +
    +

    + + " border="0" width="17" height="17" align="middle" alt="add" />
    +
               + + + + + + + + + +
    + " border="0" alt="move" />" onmouseover="fr_insline(, true)" onmouseout="fr_insline(, false)" />
    + + " border="0" alt="delete" /> + " onclick="return confirm('')" /> + + " width="17" height="17" border="0" alt="add" />
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    passmatchblockrejectlog
    pass disabled match disabled block disabled reject disabled log disabled
    +

     

    + + +
    +
      + +
    • +
    • + +
    • +
    • + +
    +
    +
    +
    + + +
    + + + diff --git a/usr/local/www/firewall_rules_edit.php b/usr/local/www/firewall_rules_edit.php new file mode 100644 index 000000000..5376a084f --- /dev/null +++ b/usr/local/www/firewall_rules_edit.php @@ -0,0 +1,1766 @@ +. + 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. +*/ +/* + pfSense_MODULE: filter +*/ + +##|+PRIV +##|*IDENT=page-firewall-rules-edit +##|*NAME=Firewall: Rules: Edit page +##|*DESCR=Allow access to the 'Firewall: Rules: Edit' page. +##|*MATCH=firewall_rules_edit.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("filter.inc"); +require("shaper.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_rules.php'); + +function is_posnumericint($arg) { + // Note that to be safe we do not allow any leading zero - "01", "007" + return (is_numericint($arg) && $arg[0] != '0' && $arg > 0); +} + +function is_aoadv_used($rule_config) { + // Note that the user could set "tag" or "tagged" to the string "0", which is valid but empty(). + // And if the user enters "0" in other fields, we want to present an error message, and keep the Advanced Options section open. + if ((isset($rule_config['allowopts'])) || + (isset($rule_config['disablereplyto'])) || + ($rule_config['tag'] != "") || + ($rule_config['tagged'] != "") || + ($rule_config['max'] != "") || + ($rule_config['max-src-nodes'] != "") || + ($rule_config['max-src-conn'] != "") || + ($rule_config['max-src-states'] != "") || + ($rule_config['max-src-conn-rate'] != "") || + ($rule_config['max-src-conn-rates'] != "") || + ($rule_config['statetimeout'] != "")) + return true; + return false; +} + +$ostypes = array(); +exec('/sbin/pfctl -s osfp | /usr/bin/tr \'\t\' \' \'', $ostypes); + +if (count($ostypes) > 2) { + // Remove header rows from pfctl output + array_shift($ostypes); + array_shift($ostypes); +} else { + // Fall back to a default list + $ostypes = array( + "AIX", + "Linux", + "FreeBSD", + "NetBSD", + "OpenBSD", + "Solaris", + "MacOS", + "Windows", + "Novell", + "NMAP" + ); +} + +$specialsrcdst = explode(" ", "any (self) pptp pppoe l2tp openvpn"); +$ifdisp = get_configured_interface_with_descr(); +foreach ($ifdisp as $kif => $kdescr) { + $specialsrcdst[] = "{$kif}"; + $specialsrcdst[] = "{$kif}ip"; +} + +if (!is_array($config['filter']['rule'])) { + $config['filter']['rule'] = array(); +} +filter_rules_sort(); +$a_filter = &$config['filter']['rule']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (is_numericint($_GET['after']) || $_GET['after'] == "-1") + $after = $_GET['after']; +if (isset($_POST['after']) && (is_numericint($_POST['after']) || $_POST['after'] == "-1")) + $after = $_POST['after']; + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) { + $id = $_GET['dup']; + $after = $_GET['dup']; +} + +if (isset($id) && $a_filter[$id]) { + $pconfig['interface'] = $a_filter[$id]['interface']; + + if (isset($a_filter[$id]['id'])) + $pconfig['ruleid'] = $a_filter[$id]['id']; + + if ( isset($a_filter[$id]['created']) && is_array($a_filter[$id]['created']) ) + $pconfig['created'] = $a_filter[$id]['created']; + + if ( isset($a_filter[$id]['updated']) && is_array($a_filter[$id]['updated']) ) + $pconfig['updated'] = $a_filter[$id]['updated']; + + if (!isset($a_filter[$id]['type'])) + $pconfig['type'] = "pass"; + else + $pconfig['type'] = $a_filter[$id]['type']; + + if (isset($a_filter[$id]['floating']) || $if == "FloatingRules") { + $pconfig['floating'] = $a_filter[$id]['floating']; + if (isset($a_filter[$id]['interface']) && $a_filter[$id]['interface'] <> "") + $pconfig['interface'] = $a_filter[$id]['interface']; + } + + if (isset($a_filter['floating'])) + $pconfig['floating'] = "yes"; + + if (isset($a_filter[$id]['direction'])) + $pconfig['direction'] = $a_filter[$id]['direction']; + + if (isset($a_filter[$id]['ipprotocol'])) + $pconfig['ipprotocol'] = $a_filter[$id]['ipprotocol']; + + if (isset($a_filter[$id]['protocol'])) + $pconfig['proto'] = $a_filter[$id]['protocol']; + else + $pconfig['proto'] = "any"; + + if ($a_filter[$id]['protocol'] == "icmp") + $pconfig['icmptype'] = $a_filter[$id]['icmptype']; + + address_to_pconfig($a_filter[$id]['source'], $pconfig['src'], + $pconfig['srcmask'], $pconfig['srcnot'], + $pconfig['srcbeginport'], $pconfig['srcendport']); + + if($a_filter[$id]['os'] <> "") + $pconfig['os'] = $a_filter[$id]['os']; + + address_to_pconfig($a_filter[$id]['destination'], $pconfig['dst'], + $pconfig['dstmask'], $pconfig['dstnot'], + $pconfig['dstbeginport'], $pconfig['dstendport']); + + if ($a_filter[$id]['dscp'] <> "") + $pconfig['dscp'] = $a_filter[$id]['dscp']; + + $pconfig['disabled'] = isset($a_filter[$id]['disabled']); + $pconfig['log'] = isset($a_filter[$id]['log']); + $pconfig['descr'] = $a_filter[$id]['descr']; + + if (isset($a_filter[$id]['tcpflags_any'])) + $pconfig['tcpflags_any'] = true; + else { + if (isset($a_filter[$id]['tcpflags1']) && $a_filter[$id]['tcpflags1'] <> "") + $pconfig['tcpflags1'] = $a_filter[$id]['tcpflags1']; + if (isset($a_filter[$id]['tcpflags2']) && $a_filter[$id]['tcpflags2'] <> "") + $pconfig['tcpflags2'] = $a_filter[$id]['tcpflags2']; + } + + if (isset($a_filter[$id]['tag']) && $a_filter[$id]['tag'] <> "") + $pconfig['tag'] = $a_filter[$id]['tag']; + if (isset($a_filter[$id]['tagged']) && $a_filter[$id]['tagged'] <> "") + $pconfig['tagged'] = $a_filter[$id]['tagged']; + if (isset($a_filter[$id]['quick']) && $a_filter[$id]['quick']) + $pconfig['quick'] = $a_filter[$id]['quick']; + if (isset($a_filter[$id]['allowopts'])) + $pconfig['allowopts'] = true; + if (isset($a_filter[$id]['disablereplyto'])) + $pconfig['disablereplyto'] = true; + + /* advanced */ + $pconfig['max'] = $a_filter[$id]['max']; + $pconfig['max-src-nodes'] = $a_filter[$id]['max-src-nodes']; + $pconfig['max-src-conn'] = $a_filter[$id]['max-src-conn']; + $pconfig['max-src-states'] = $a_filter[$id]['max-src-states']; + $pconfig['statetype'] = $a_filter[$id]['statetype']; + $pconfig['statetimeout'] = $a_filter[$id]['statetimeout']; + $pconfig['nopfsync'] = isset($a_filter[$id]['nopfsync']); + + /* advanced - nosync */ + $pconfig['nosync'] = isset($a_filter[$id]['nosync']); + + /* advanced - new connection per second banning*/ + $pconfig['max-src-conn-rate'] = $a_filter[$id]['max-src-conn-rate']; + $pconfig['max-src-conn-rates'] = $a_filter[$id]['max-src-conn-rates']; + + /* Multi-WAN next-hop support */ + $pconfig['gateway'] = $a_filter[$id]['gateway']; + + /* Shaper support */ + $pconfig['defaultqueue'] = (($a_filter[$id]['ackqueue'] == "none") ? '' : $a_filter[$id]['defaultqueue']); + $pconfig['ackqueue'] = (($a_filter[$id]['ackqueue'] == "none") ? '' : $a_filter[$id]['ackqueue']); + $pconfig['dnpipe'] = (($a_filter[$id]['dnpipe'] == "none") ? '' : $a_filter[$id]['dnpipe']); + $pconfig['pdnpipe'] = (($a_filter[$id]['pdnpipe'] == "none") ? '' : $a_filter[$id]['pdnpipe']); + $pconfig['l7container'] = (($a_filter[$id]['l7container'] == "none") ? '' : $a_filter[$id]['l7container']); + + //schedule support + $pconfig['sched'] = (($a_filter[$id]['sched'] == "none") ? '' : $a_filter[$id]['sched']); + $pconfig['vlanprio'] = (($a_filter[$id]['vlanprio'] == "none") ? '' : $a_filter[$id]['vlanprio']); + $pconfig['vlanprioset'] = (($a_filter[$id]['vlanprioset'] == "none") ? '' : $a_filter[$id]['vlanprioset']); + if (!isset($_GET['dup']) || !is_numericint($_GET['dup'])) + $pconfig['associated-rule-id'] = $a_filter[$id]['associated-rule-id']; + + $pconfig['tracker'] = $a_filter[$id]['tracker']; + +} else { + /* defaults */ + if ($_GET['if']) + $pconfig['interface'] = $_GET['if']; + $pconfig['type'] = "pass"; + $pconfig['src'] = "any"; + $pconfig['dst'] = "any"; +} +/* Allow the FloatingRules to work */ +$if = $pconfig['interface']; + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) + unset($id); + +read_altq_config(); /* XXX: */ +$qlist =& get_unique_queue_list(); +read_dummynet_config(); /* XXX: */ +$dnqlist =& get_unique_dnqueue_list(); +read_layer7_config(); +$l7clist =& get_l7_unique_list(); +$a_gatewaygroups = return_gateway_groups_array(); + +if ($_POST) { + unset($input_errors); + + if( isset($a_filter[$id]['associated-rule-id']) ) { + $_POST['proto'] = $pconfig['proto']; + if ($pconfig['proto'] == "icmp") + $_POST['icmptype'] = $pconfig['icmptype']; + } + + if (($_POST['ipprotocol'] <> "") && ($_POST['gateway'] <> "")) { + if(is_array($config['gateways']['gateway_group'])) { + foreach($config['gateways']['gateway_group'] as $gw_group) { + if($gw_group['name'] == $_POST['gateway']) { + $family = $a_gatewaygroups[$_POST['gateway']]['ipprotocol']; + if($_POST['ipprotocol'] == $family) { + continue; + } + if(($_POST['ipprotocol'] == "inet46") && ($_POST['ipprotocol'] != $family)) { + $input_errors[] = gettext("You can not assign a gateway to a rule that applies to IPv4 and IPv6"); + } + if(($_POST['ipprotocol'] == "inet6") && ($_POST['ipprotocol'] != $family)) { + $input_errors[] = gettext("You can not assign a IPv4 gateway group on IPv6 Address Family rule"); + } + if(($_POST['ipprotocol'] == "inet") && ($_POST['ipprotocol'] != $family)) { + $input_errors[] = gettext("You can not assign a IPv6 gateway group on IPv4 Address Family rule"); + } + } + } + } + } + if (($_POST['ipprotocol'] <> "") && ($_POST['gateway'] <> "") && (is_ipaddr(lookup_gateway_ip_by_name($_POST['gateway'])))) { + if(($_POST['ipprotocol'] == "inet46") && ($_POST['gateway'] <> "")) { + $input_errors[] = gettext("You can not assign a gateway to a rule that applies to IPv4 and IPv6"); + } + if(($_POST['ipprotocol'] == "inet6") && (!is_ipaddrv6(lookup_gateway_ip_by_name($_POST['gateway'])))) { + $input_errors[] = gettext("You can not assign the IPv4 Gateway to a IPv6 Filter rule"); + } + if(($_POST['ipprotocol'] == "inet") && (!is_ipaddrv4(lookup_gateway_ip_by_name($_POST['gateway'])))) { + $input_errors[] = gettext("You can not assign the IPv6 Gateway to a IPv4 Filter rule"); + } + } + + if (($_POST['proto'] != "tcp") && ($_POST['proto'] != "udp") && ($_POST['proto'] != "tcp/udp") && ($_POST['proto'] != "icmp")) { + if($_POST['ipprotocol'] == "inet46") + $input_errors[] = gettext("You can not assign a protocol other then ICMP, TCP, UDP or TCP/UDP to a rule that applies to IPv4 and IPv6"); + } + if (($_POST['proto'] == "icmp") && ($_POST['icmptype'] <> "")){ + if($_POST['ipprotocol'] == "inet46") + $input_errors[] = gettext("You can not assign a ICMP type to a rule that applies to IPv4 and IPv6"); + } + + if (($_POST['proto'] != "tcp") && ($_POST['proto'] != "udp") && ($_POST['proto'] != "tcp/udp")) { + $_POST['srcbeginport'] = 0; + $_POST['srcendport'] = 0; + $_POST['dstbeginport'] = 0; + $_POST['dstendport'] = 0; + } else { + if ($_POST['srcbeginport_cust'] && !$_POST['srcbeginport']) + $_POST['srcbeginport'] = trim($_POST['srcbeginport_cust']); + if ($_POST['srcendport_cust'] && !$_POST['srcendport']) + $_POST['srcendport'] = trim($_POST['srcendport_cust']); + if ($_POST['srcbeginport'] == "any") { + $_POST['srcbeginport'] = 0; + $_POST['srcendport'] = 0; + } else { + if (!$_POST['srcendport']) + $_POST['srcendport'] = $_POST['srcbeginport']; + } + if ($_POST['srcendport'] == "any") + $_POST['srcendport'] = $_POST['srcbeginport']; + + if ($_POST['dstbeginport_cust'] && !$_POST['dstbeginport']) + $_POST['dstbeginport'] = trim($_POST['dstbeginport_cust']); + if ($_POST['dstendport_cust'] && !$_POST['dstendport']) + $_POST['dstendport'] = trim($_POST['dstendport_cust']); + + if ($_POST['dstbeginport'] == "any") { + $_POST['dstbeginport'] = 0; + $_POST['dstendport'] = 0; + } else { + if (!$_POST['dstendport']) + $_POST['dstendport'] = $_POST['dstbeginport']; + } + if ($_POST['dstendport'] == "any") + $_POST['dstendport'] = $_POST['dstbeginport']; + } + + if (is_specialnet($_POST['srctype'])) { + $_POST['src'] = $_POST['srctype']; + $_POST['srcmask'] = 0; + } else if ($_POST['srctype'] == "single") { + if (is_ipaddrv6($_POST['src'])) + $_POST['srcmask'] = 128; + else + $_POST['srcmask'] = 32; + } + if (is_specialnet($_POST['dsttype'])) { + $_POST['dst'] = $_POST['dsttype']; + $_POST['dstmask'] = 0; + } else if ($_POST['dsttype'] == "single") { + if (is_ipaddrv6($_POST['dst'])) + $_POST['dstmask'] = 128; + else + $_POST['dstmask'] = 32; + } + + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "type proto"); + if ( isset($a_filter[$id]['associated-rule-id'])===false ) { + $reqdfields[] = "src"; + $reqdfields[] = "dst"; + } + $reqdfieldsn = explode(",", "Type,Protocol"); + if ( isset($a_filter[$id]['associated-rule-id'])===false ) { + $reqdfieldsn[] = "Source"; + $reqdfieldsn[] = "Destination"; + } + + if($_POST['statetype'] == "modulate state" or $_POST['statetype'] == "synproxy state") { + if( $_POST['proto'] != "tcp" ) + $input_errors[] = sprintf(gettext("%s is only valid with protocol tcp."),$_POST['statetype']); + if(($_POST['statetype'] == "synproxy state") && ($_POST['gateway'] != "")) + $input_errors[] = sprintf(gettext("%s is only valid if the gateway is set to 'default'."),$_POST['statetype']); + } + + if ( isset($a_filter[$id]['associated-rule-id'])===false && + (!(is_specialnet($_POST['srctype']) || ($_POST['srctype'] == "single"))) ) { + $reqdfields[] = "srcmask"; + $reqdfieldsn[] = "Source bit count"; + } + if ( isset($a_filter[$id]['associated-rule-id'])===false && + (!(is_specialnet($_POST['dsttype']) || ($_POST['dsttype'] == "single"))) ) { + $reqdfields[] = "dstmask"; + $reqdfieldsn[] = gettext("Destination bit count"); + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (!$_POST['srcbeginport']) { + $_POST['srcbeginport'] = 0; + $_POST['srcendport'] = 0; + } + if (!$_POST['dstbeginport']) { + $_POST['dstbeginport'] = 0; + $_POST['dstendport'] = 0; + } + + if ($_POST['srcbeginport'] && !is_portoralias($_POST['srcbeginport'])) + $input_errors[] = sprintf(gettext("%s is not a valid start source port. It must be a port alias or integer between 1 and 65535."),$_POST['srcbeginposrt']); + if ($_POST['srcendport'] && !is_portoralias($_POST['srcendport'])) + $input_errors[] = sprintf(gettext("%s is not a valid end source port. It must be a port alias or integer between 1 and 65535."),$_POST['srcendport']); + if ($_POST['dstbeginport'] && !is_portoralias($_POST['dstbeginport'])) + $input_errors[] = sprintf(gettext("%s is not a valid start destination port. It must be a port alias or integer between 1 and 65535."),$_POST['dstbeginport']); + if ($_POST['dstendport'] && !is_portoralias($_POST['dstendport'])) + $input_errors[] = sprintf(gettext("%s is not a valid end destination port. It must be a port alias or integer between 1 and 65535."),$_POST['dstendport']); + if ( !$_POST['srcbeginport_cust'] && $_POST['srcendport_cust']) + if (is_alias($_POST['srcendport_cust'])) + $input_errors[] = 'If you put port alias in Source port range to: field you must put the same port alias in from: field'; + if ( $_POST['srcbeginport_cust'] && $_POST['srcendport_cust']){ + if (is_alias($_POST['srcendport_cust']) && is_alias($_POST['srcendport_cust']) && $_POST['srcbeginport_cust'] != $_POST['srcendport_cust']) + $input_errors[] = 'The same port alias must be used in Source port range from: and to: fields'; + if ((is_alias($_POST['srcbeginport_cust']) && (!is_alias($_POST['srcendport_cust']) && $_POST['srcendport_cust']!='')) || + ((!is_alias($_POST['srcbeginport_cust']) && $_POST['srcbeginport_cust']!='') && is_alias($_POST['srcendport_cust']))) + $input_errors[] = 'You cannot specify numbers and port aliases at the same time in Source port range from: and to: field'; + } + if ( !$_POST['dstbeginport_cust'] && $_POST['dstendport_cust']) + if (is_alias($_POST['dstendport_cust'])) + $input_errors[] = 'If you put port alias in Destination port range to: field you must put the same port alias in from: field'; + if ( $_POST['dstbeginport_cust'] && $_POST['dstendport_cust']){ + if (is_alias($_POST['dstendport_cust']) && is_alias($_POST['dstendport_cust']) && $_POST['dstbeginport_cust'] != $_POST['dstendport_cust']) + $input_errors[] = 'The same port alias must be used in Destination port range from: and to: fields'; + if ((is_alias($_POST['dstbeginport_cust']) && (!is_alias($_POST['dstendport_cust']) && $_POST['dstendport_cust']!='')) || + ((!is_alias($_POST['dstbeginport_cust']) && $_POST['dstbeginport_cust']!='') && is_alias($_POST['dstendport_cust']))) + $input_errors[] = 'You cannot specify numbers and port aliases at the same time in Destination port range from: and to: field'; + } + + if ($_POST['src']) + $_POST['src'] = trim($_POST['src']); + if ($_POST['dst']) + $_POST['dst'] = trim($_POST['dst']); + + /* if user enters an alias and selects "network" then disallow. */ + if($_POST['srctype'] == "network") { + if(is_alias($_POST['src'])) + $input_errors[] = gettext("You must specify single host or alias for alias entries."); + } + if($_POST['dsttype'] == "network") { + if(is_alias($_POST['dst'])) + $input_errors[] = gettext("You must specify single host or alias for alias entries."); + } + + if (!is_specialnet($_POST['srctype'])) { + if (($_POST['src'] && !is_ipaddroralias($_POST['src']))) { + $input_errors[] = sprintf(gettext("%s is not a valid source IP address or alias."),$_POST['src']); + } + if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) { + $input_errors[] = gettext("A valid source bit count must be specified."); + } + } + if (!is_specialnet($_POST['dsttype'])) { + if (($_POST['dst'] && !is_ipaddroralias($_POST['dst']))) { + $input_errors[] = sprintf(gettext("%s is not a valid destination IP address or alias."),$_POST['dst']); + } + if (($_POST['dstmask'] && !is_numericint($_POST['dstmask']))) { + $input_errors[] = gettext("A valid destination bit count must be specified."); + } + } + if((is_ipaddr($_POST['src']) && is_ipaddr($_POST['dst']))) { + if(!validate_address_family($_POST['src'], $_POST['dst'])) + $input_errors[] = sprintf(gettext("The Source IP address %s Address Family differs from the destination %s."), $_POST['src'], $_POST['dst']); + if((is_ipaddrv6($_POST['src']) || is_ipaddrv6($_POST['dst'])) && ($_POST['ipprotocol'] == "inet")) + $input_errors[] = gettext("You can not use IPv6 addresses in IPv4 rules."); + if((is_ipaddrv4($_POST['src']) || is_ipaddrv4($_POST['dst'])) && ($_POST['ipprotocol'] == "inet6")) + $input_errors[] = gettext("You can not use IPv4 addresses in IPv6 rules."); + } + + if((is_ipaddr($_POST['src']) || is_ipaddr($_POST['dst'])) && ($_POST['ipprotocol'] == "inet46")) + $input_errors[] = gettext("You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules."); + + if ($_POST['srcbeginport'] > $_POST['srcendport']) { + /* swap */ + $tmp = $_POST['srcendport']; + $_POST['srcendport'] = $_POST['srcbeginport']; + $_POST['srcbeginport'] = $tmp; + } + if ($_POST['dstbeginport'] > $_POST['dstendport']) { + /* swap */ + $tmp = $_POST['dstendport']; + $_POST['dstendport'] = $_POST['dstbeginport']; + $_POST['dstbeginport'] = $tmp; + } + if ($_POST['os']) { + if( $_POST['proto'] != "tcp" ) + $input_errors[] = gettext("OS detection is only valid with protocol tcp."); + if (!in_array($_POST['os'], $ostypes)) + $input_errors[] = gettext("Invalid OS detection selection. Please select a valid OS."); + } + + if ($_POST['ackqueue'] != "") { + if ($_POST['defaultqueue'] == "" ) + $input_errors[] = gettext("You have to select a queue when you select an acknowledge queue too."); + else if ($_POST['ackqueue'] == $_POST['defaultqueue']) + $input_errors[] = gettext("Acknowledge queue and Queue cannot be the same."); + } + if (isset($_POST['floating']) && $_POST['pdnpipe'] != "" && (empty($_POST['direction']) || $_POST['direction'] == "any")) + $input_errors[] = gettext("You can not use limiters in Floating rules without choosing a direction."); + if (isset($_POST['floating']) && $_POST['gateway'] != "" && (empty($_POST['direction']) || $_POST['direction'] == "any")) + $input_errors[] = gettext("You can not use gateways in Floating rules without choosing a direction."); + if ($_POST['pdnpipe'] && $_POST['pdnpipe'] != "") { + if ($_POST['dnpipe'] == "" ) + $input_errors[] = gettext("You must select a queue for the In direction before selecting one for Out too."); + else if ($_POST['pdnpipe'] == $_POST['dnpipe']) + $input_errors[] = gettext("In and Out Queue cannot be the same."); + else if ($dnqlist[$_POST['pdnpipe']][0] == "?" && $dnqlist[$_POST['dnpipe']][0] <> "?") + $input_errors[] = gettext("You cannot select one queue and one virtual interface for IN and Out. both must be from the same type."); + else if ($dnqlist[$_POST['dnpipe']][0] == "?" && $dnqlist[$_POST['pdnpipe']][0] <> "?") + $input_errors[] = gettext("You cannot select one queue and one virtual interface for IN and Out. both must be from the same type."); + if ($_POST['direction'] == "out" && empty($_POST['gateway'])) + $input_errors[] = gettext("Please select a gateway, normaly the interface selected gateway, so the limiters work correctly"); + } + if( !empty($_POST['ruleid']) && !ctype_digit($_POST['ruleid'])) + $input_errors[] = gettext('ID must be an integer'); + if($_POST['l7container'] && $_POST['l7container'] != "") { + if(!($_POST['proto'] == "tcp" || $_POST['proto'] == "udp" || $_POST['proto'] == "tcp/udp")) + $input_errors[] = gettext("You can only select a layer7 container for TCP and/or UDP protocols"); + if ($_POST['type'] <> "pass") + $input_errors[] = gettext("You can only select a layer7 container for Pass type rules."); + } + + if (!in_array($_POST['proto'], array("tcp","tcp/udp"))) { + if (!empty($_POST['max-src-conn'])) + $input_errors[] = gettext("You can only specify the maximum number of established connections per host (advanced option) for TCP protocol."); + if (!empty($_POST['max-src-conn-rate']) || !empty($_POST['max-src-conn-rates'])) + $input_errors[] = gettext("You can only specify the maximum new connections per host / per second(s) (advanced option) for TCP protocol."); + if (!empty($_POST['statetimeout'])) + $input_errors[] = gettext("You can only specify the state timeout (advanced option) for TCP protocol."); + } + + if ($_POST['type'] <> "pass") { + if (!empty($_POST['max'])) + $input_errors[] = gettext("You can only specify the maximum state entries (advanced option) for Pass type rules."); + if (!empty($_POST['max-src-nodes'])) + $input_errors[] = gettext("You can only specify the maximum number of unique source hosts (advanced option) for Pass type rules."); + if (!empty($_POST['max-src-conn'])) + $input_errors[] = gettext("You can only specify the maximum number of established connections per host (advanced option) for Pass type rules."); + if (!empty($_POST['max-src-states'])) + $input_errors[] = gettext("You can only specify the maximum state entries per host (advanced option) for Pass type rules."); + if (!empty($_POST['max-src-conn-rate']) || !empty($_POST['max-src-conn-rates'])) + $input_errors[] = gettext("You can only specify the maximum new connections per host / per second(s) (advanced option) for Pass type rules."); + if (!empty($_POST['statetimeout'])) + $input_errors[] = gettext("You can only specify the state timeout (advanced option) for Pass type rules."); + } + + if (($_POST['statetype'] == "none") && (empty($_POST['l7container']))) { + if (!empty($_POST['max'])) + $input_errors[] = gettext("You cannot specify the maximum state entries (advanced option) if statetype is none and no L7 container is selected."); + if (!empty($_POST['max-src-nodes'])) + $input_errors[] = gettext("You cannot specify the maximum number of unique source hosts (advanced option) if statetype is none and no L7 container is selected."); + if (!empty($_POST['max-src-conn'])) + $input_errors[] = gettext("You cannot specify the maximum number of established connections per host (advanced option) if statetype is none and no L7 container is selected."); + if (!empty($_POST['max-src-states'])) + $input_errors[] = gettext("You cannot specify the maximum state entries per host (advanced option) if statetype is none and no L7 container is selected."); + if (!empty($_POST['max-src-conn-rate']) || !empty($_POST['max-src-conn-rates'])) + $input_errors[] = gettext("You cannot specify the maximum new connections per host / per second(s) (advanced option) if statetype is none and no L7 container is selected."); + if (!empty($_POST['statetimeout'])) + $input_errors[] = gettext("You cannot specify the state timeout (advanced option) if statetype is none and no L7 container is selected."); + } + + if (($_POST['max'] != "") && !is_posnumericint($_POST['max'])) + $input_errors[] = gettext("Maximum state entries (advanced option) must be a positive integer"); + + if (($_POST['max-src-nodes'] != "") && !is_posnumericint($_POST['max-src-nodes'])) + $input_errors[] = gettext("Maximum number of unique source hosts (advanced option) must be a positive integer"); + + if (($_POST['max-src-conn'] != "") && !is_posnumericint($_POST['max-src-conn'])) + $input_errors[] = gettext("Maximum number of established connections per host (advanced option) must be a positive integer"); + + if (($_POST['max-src-states'] != "") && !is_posnumericint($_POST['max-src-states'])) + $input_errors[] = gettext("Maximum state entries per host (advanced option) must be a positive integer"); + + if (($_POST['max-src-conn-rate'] != "") && !is_posnumericint($_POST['max-src-conn-rate'])) + $input_errors[] = gettext("Maximum new connections per host / per second(s) (advanced option) must be a positive integer"); + + if (($_POST['statetimeout'] != "") && !is_posnumericint($_POST['statetimeout'])) + $input_errors[] = gettext("State timeout (advanced option) must be a positive integer"); + + if ((($_POST['max-src-conn-rate'] <> "" and $_POST['max-src-conn-rates'] == "")) || + (($_POST['max-src-conn-rate'] == "" and $_POST['max-src-conn-rates'] <> ""))) + $input_errors[] = gettext("Both maximum new connections per host and the interval (per second(s)) must be specified"); + + if (!$_POST['tcpflags_any']) { + $settcpflags = array(); + $outoftcpflags = array(); + foreach ($tcpflags as $tcpflag) { + if ($_POST['tcpflags1_' . $tcpflag] == "on") + $settcpflags[] = $tcpflag; + if ($_POST['tcpflags2_' . $tcpflag] == "on") + $outoftcpflags[] = $tcpflag; + } + if (empty($outoftcpflags) && !empty($settcpflags)) + $input_errors[] = gettext("If you specify TCP flags that should be set you should specify out of which flags as well."); + } + + // Allow extending of the firewall edit page and include custom input validation + pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/input_validation"); + + if (!$input_errors) { + $filterent = array(); + $filterent['id'] = $_POST['ruleid']>0?$_POST['ruleid']:''; + + $filterent['tracker'] = empty($_POST['tracker']) ? (int)microtime(true) : $_POST['tracker']; + + $filterent['type'] = $_POST['type']; + if (isset($_POST['interface'] )) + $filterent['interface'] = $_POST['interface']; + + if (isset($_POST['ipprotocol'] )) + $filterent['ipprotocol'] = $_POST['ipprotocol']; + + if ($_POST['tcpflags_any']) { + $filterent['tcpflags_any'] = true; + } else { + $settcpflags = array(); + $outoftcpflags = array(); + foreach ($tcpflags as $tcpflag) { + if ($_POST['tcpflags1_' . $tcpflag] == "on") + $settcpflags[] = $tcpflag; + if ($_POST['tcpflags2_' . $tcpflag] == "on") + $outoftcpflags[] = $tcpflag; + } + if (!empty($outoftcpflags)) { + $filterent['tcpflags2'] = join(",", $outoftcpflags); + if (!empty($settcpflags)) + $filterent['tcpflags1'] = join(",", $settcpflags); + } + } + + if (isset($_POST['tag'])) + $filterent['tag'] = $_POST['tag']; + if (isset($_POST['tagged'])) + $filterent['tagged'] = $_POST['tagged']; + if ($if == "FloatingRules" || isset($_POST['floating'])) { + $filterent['direction'] = $_POST['direction']; + if (isset($_POST['quick']) && $_POST['quick'] <> "") + $filterent['quick'] = $_POST['quick']; + $filterent['floating'] = "yes"; + if (isset($_POST['interface']) && count($_POST['interface']) > 0) { + $filterent['interface'] = implode(",", $_POST['interface']); + } + } + + /* Advanced options */ + if ($_POST['allowopts'] == "yes") + $filterent['allowopts'] = true; + else + unset($filterent['allowopts']); + if ($_POST['disablereplyto'] == "yes") + $filterent['disablereplyto'] = true; + else + unset($filterent['disablereplyto']); + $filterent['max'] = $_POST['max']; + $filterent['max-src-nodes'] = $_POST['max-src-nodes']; + $filterent['max-src-conn'] = $_POST['max-src-conn']; + $filterent['max-src-states'] = $_POST['max-src-states']; + $filterent['statetimeout'] = $_POST['statetimeout']; + $filterent['statetype'] = $_POST['statetype']; + $filterent['os'] = $_POST['os']; + if($_POST['nopfsync'] <> "") + $filterent['nopfsync'] = true; + else + unset($filterent['nopfsync']); + + /* Nosync directive - do not xmlrpc sync this item */ + if($_POST['nosync'] <> "") + $filterent['nosync'] = true; + else + unset($filterent['nosync']); + + /* unless both values are provided, unset the values - ticket #650 */ + if($_POST['max-src-conn-rate'] <> "" and $_POST['max-src-conn-rates'] <> "") { + $filterent['max-src-conn-rate'] = $_POST['max-src-conn-rate']; + $filterent['max-src-conn-rates'] = $_POST['max-src-conn-rates']; + } else { + unset($filterent['max-src-conn-rate']); + unset($filterent['max-src-conn-rates']); + } + + if ($_POST['proto'] != "any") + $filterent['protocol'] = $_POST['proto']; + else + unset($filterent['protocol']); + + if ($_POST['proto'] == "icmp" && $_POST['icmptype']) + $filterent['icmptype'] = $_POST['icmptype']; + else + unset($filterent['icmptype']); + + pconfig_to_address($filterent['source'], $_POST['src'], + $_POST['srcmask'], $_POST['srcnot'], + $_POST['srcbeginport'], $_POST['srcendport']); + + pconfig_to_address($filterent['destination'], $_POST['dst'], + $_POST['dstmask'], $_POST['dstnot'], + $_POST['dstbeginport'], $_POST['dstendport']); + + if ($_POST['disabled']) + $filterent['disabled'] = true; + else + unset($filterent['disabled']); + + if ($_POST['dscp']) + $filterent['dscp'] = $_POST['dscp']; + + if ($_POST['log']) + $filterent['log'] = true; + else + unset($filterent['log']); + strncpy($filterent['descr'], $_POST['descr'], 52); + + if ($_POST['gateway'] != "") { + $filterent['gateway'] = $_POST['gateway']; + } + + if ($_POST['defaultqueue'] != "") { + $filterent['defaultqueue'] = $_POST['defaultqueue']; + if ($_POST['ackqueue'] != "") + $filterent['ackqueue'] = $_POST['ackqueue']; + } + + if ($_POST['dnpipe'] != "") { + $filterent['dnpipe'] = $_POST['dnpipe']; + if ($_POST['pdnpipe'] != "") + $filterent['pdnpipe'] = $_POST['pdnpipe']; + } + + if ($_POST['l7container'] != "") { + $filterent['l7container'] = $_POST['l7container']; + } + + if ($_POST['sched'] != "") { + $filterent['sched'] = $_POST['sched']; + } + + if ($_POST['vlanprio'] != "") { + $filterent['vlanprio'] = $_POST['vlanprio']; + } + if ($_POST['vlanprioset'] != "") { + $filterent['vlanprioset'] = $_POST['vlanprioset']; + } + + // If we have an associated nat rule, make sure the source and destination doesn't change + if( isset($a_filter[$id]['associated-rule-id']) ) { + $filterent['interface'] = $a_filter[$id]['interface']; + if (isset($a_filter[$id]['protocol'])) + $filterent['protocol'] = $a_filter[$id]['protocol']; + else if (isset($filterent['protocol'])) + unset($filterent['protocol']); + if ($a_filter[$id]['protocol'] == "icmp" && $a_filter[$id]['icmptype']) + $filterent['icmptype'] = $a_filter[$id]['icmptype']; + else if (isset($filterent['icmptype'])) + unset($filterent['icmptype']); + + $filterent['source'] = $a_filter[$id]['source']; + $filterent['destination'] = $a_filter[$id]['destination']; + $filterent['associated-rule-id'] = $a_filter[$id]['associated-rule-id']; + } + + if ( isset($a_filter[$id]['created']) && is_array($a_filter[$id]['created']) ) + $filterent['created'] = $a_filter[$id]['created']; + + $filterent['updated'] = make_config_revision_entry(); + + // Allow extending of the firewall edit page and include custom input validation + pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_write_config"); + + if (isset($id) && $a_filter[$id]) + $a_filter[$id] = $filterent; + else { + $filterent['created'] = make_config_revision_entry(); + if (is_numeric($after)) + array_splice($a_filter, $after+1, 0, array($filterent)); + else + $a_filter[] = $filterent; + } + + filter_rules_sort(); + + if (write_config()) + mark_subsystem_dirty('filter'); + + if (isset($_POST['floating'])) + header("Location: firewall_rules.php?if=FloatingRules"); + else + header("Location: firewall_rules.php?if=" . htmlspecialchars($_POST['interface'])); + exit; + } +} + +$pgtitle = array(gettext("Firewall"),gettext("Rules"),gettext("Edit")); +$shortcut_section = "firewall"; + +$closehead = false; + +$page_filename = "firewall_rules_edit.php"; +include("head.inc"); + +?> + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "")): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "") + $schedules[] = $schedule['name']; + } + } + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + /> +
    + +
    + + + /> +
    + +
    +
    +
    +
    + $nat_rule ) { + if( isset($nat_rule['associated-rule-id']) && $nat_rule['associated-rule-id']==$pconfig['associated-rule-id'] ) { + echo "" . gettext("View the NAT rule") . "
    "; + break; + } + } + } + echo ""; + if (!empty($pconfig['interface'])) + echo ""; + ?> + +
    + + > + $ifdesc) + if(have_ruleint_access($ifent)) + $interfaces[$ifent] = $ifdesc; + if ($config['l2tp']['mode'] == "server") + if(have_ruleint_access("l2tp")) + $interfaces['l2tp'] = "L2TP VPN"; + if ($config['pptpd']['mode'] == "server") + if(have_ruleint_access("pptp")) + $interfaces['pptp'] = "PPTP VPN"; + + if (is_pppoe_server_enabled() && have_ruleint_access("pppoe")) + $interfaces['pppoe'] = "PPPoE VPN"; + /* add ipsec interfaces */ + if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) + if(have_ruleint_access("enc0")) + $interfaces["enc0"] = "IPsec"; + /* add openvpn/tun interfaces */ + if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) + $interfaces["openvpn"] = "OpenVPN"; + if (is_array($pconfig['interface'])) + $pconfig['interface'] = implode(",", $pconfig['interface']); + $selected_interfaces = explode(",", $pconfig['interface']); + foreach ($interfaces as $iface => $ifacename): ?> + + + +
    + +
    + + + + +
    + +
    +
    + +
    +
    TCP  
    +
    + +
    + +
    + name="srcnot" type="checkbox" id="srcnot" value="yes" /> + +
    + +
    +
    + + + + + + + + + +
       + +
       + autocomplete='off' name="src" type="text" class="formfldalias ipv4v6" id="src" size="20" value="" /> / + +
    +
    +

    + type="button" onclick="show_source_port_range()" value="" /> - +

    +
    +
    + name="dstnot" type="checkbox" id="dstnot" value="yes" /> + +
    + +
    +
    + + + + + + + + + +
       + +
       + autocomplete='off' name="dst" type="text" class="formfldalias ipv4v6" id="dst" size="20" value="" /> + / + +
    +
    + + + + + + + + + +
       + + autocomplete='off' class="formfldalias" name="dstbeginport_cust" id="dstbeginport_cust" type="text" size="5" value="" /> +
    + + autocomplete='off' class="formfldalias" name="dstendport_cust" id="dstendport_cust" type="text" size="5" value="" /> +
    +
    + + +
    + +
    +
    + /> + +
    + ( ). +
    + +
    + +
      +  
      + " /> + " onclick="window.location.href=''" /> + + + + +
     
    +
    > + " /> - +
    +
    > +   + +
    + +
    +
    +
    > + " /> - +
    +
    > + +
    +
    +
    > + " /> - +
    +
    > + /> +
    +

    + /> +
    +

    + +
    +

    + +
    +

    +

    +

    +

    +

    + / +
    + +

    +
    + +

    +

    +
    +
    +
    > + " /> - +
    +
    > +
    + + "; + $tcpflags1 = ""; + $tcpflags2 = ""; + foreach ($tcpflags as $tcpflag) { + $header .= "\n"; + $tcpflags1 .= "\n"; + echo "{$tcpflags1}\n"; + echo "{$tcpflags2}\n"; + ?> +
    setout of" . strtoupper($tcpflag) . " {$header}
    +
    +
    + />
    +
    + +
    +
    +
    > + " /> - +
    +
    > + /> + + NO pfsync
    +
    +

    +
    + + + + + + + + +
    +
    +
    +
    > + " /> - +
    +
    > + />
    + +
    +
    +
    > + " /> - +
    +
    > + +{$vprio}\n"; + else + $opts .= "\n"; + } + + $optsset = ""; + foreach($vlanprio as $vprioset) { + if ($vprioset == $pconfig['vlanprioset']) + $selected = " selected=\"selected\""; + else + $selected = ""; + if ($vprioset == "none") + $optsset .= "\n"; + else + $optsset .= "\n"; + } +?> + +

    + +

    +
    +
    +
    > + " /> - +
    +
    > + +

    +
    +
    +
    > + " /> - +
    +
    > + +

    +
    +
    +
    > + " /> - +
    +
    > + / + +
    + ".gettext("The Out selection is applied to traffic leaving the interface where the rule is created, In is applied to traffic coming into the chosen interface.")."
    ".gettext("If you are creating a floating rule, if the direction is In then the same rules apply, if the direction is out the selections are reverted Out is for incoming and In is for outgoing.");?>
    +
    +
    +
    > + " /> - +
    +
    > + / + +
    + +
    +
    +
    > + " /> - +
    +
    > + +
    + + + +
    +
     
    + +
    + +
      +  
      + " /> + " onclick="window.location.href=''" /> + + + + + +
    +
    + + + + diff --git a/usr/local/www/firewall_schedule.php b/usr/local/www/firewall_schedule.php new file mode 100644 index 000000000..5414cfc38 --- /dev/null +++ b/usr/local/www/firewall_schedule.php @@ -0,0 +1,247 @@ +. + 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. +*/ +/* + pfSense_MODULE: schedules +*/ +##|+PRIV +##|*IDENT=page-firewall-schedules +##|*NAME=Firewall: Schedules page +##|*DESCR=Allow access to the 'Firewall: Schedules' page. +##|*MATCH=firewall_schedule.php* +##|-PRIV + + +$dayArray = array (gettext('Mon'),gettext('Tues'),gettext('Wed'),gettext('Thur'),gettext('Fri'),gettext('Sat'),gettext('Sun')); +$monthArray = array (gettext('January'),gettext('February'),gettext('March'),gettext('April'),gettext('May'),gettext('June'),gettext('July'),gettext('August'),gettext('September'),gettext('October'),gettext('November'),gettext('December')); + +require("guiconfig.inc"); +require_once("filter.inc"); +require("shaper.inc"); + +$pgtitle = array(gettext("Firewall"),gettext("Schedules")); + +if (!is_array($config['schedules']['schedule'])) + $config['schedules']['schedule'] = array(); + +$a_schedules = &$config['schedules']['schedule']; + + +if ($_GET['act'] == "del") { + if ($a_schedules[$_GET['id']]) { + /* make sure rule is not being referenced by any nat or filter rules */ + $is_schedule_referenced = false; + $referenced_by = false; + $schedule_name = $a_schedules[$_GET['id']]['name']; + + if(is_array($config['filter']['rule'])) { + foreach($config['filter']['rule'] as $rule) { + //check for this later once this is established + if ($rule['sched'] == $schedule_name){ + $referenced_by = $rule['descr']; + $is_schedule_referenced = true; + break; + } + } + } + + if($is_schedule_referenced == true) { + $savemsg = sprintf(gettext("Cannot delete Schedule. Currently in use by %s"),$referenced_by); + } else { + unset($a_schedules[$_GET['id']]); + write_config(); + header("Location: firewall_schedule.php"); + exit; + } + } +} + +include("head.inc"); +?> + + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    " alt="add" />
    +
    + + +  " width="17" height="17" border="0" alt="schedule" /> + + + + + "; + $currentDay--; + if ($currentDay != $firstDay) + $dayFriendly .= $monthArray[$firstmonth-1] . " " . $firstDay . " - " . $currentDay ; + else + $dayFriendly .= $monthArray[$month-1] . " " . $day; + $firstDayFound = false; + $firstPrint = true; + } + $arraycounter++; + } + } + else + { + $tempdayFriendly = $timerange['position']; + $firstDayFound = false; + $tempFriendlyDayArray = explode(",", $tempdayFriendly); + $currentDay = ""; + $firstDay = ""; + $nextDay = ""; + $counter = 0; + foreach ($tempFriendlyDayArray as $day){ + if ($day != ""){ + if (!$firstDayFound) + { + $firstDay = $tempFriendlyDayArray[$counter]; + $firstDayFound = true; + } + $currentDay =$tempFriendlyDayArray[$counter]; + //get next day + $nextDay = $tempFriendlyDayArray[$counter+1]; + $currentDay++; + if ($currentDay != $nextDay){ + if ($firstprint) + $dayFriendly .= "
    "; + $currentDay--; + if ($currentDay != $firstDay) + $dayFriendly .= $dayArray[$firstDay-1] . " - " . $dayArray[$currentDay-1]; + else + $dayFriendly .= $dayArray[$firstDay-1]; + $firstDayFound = false; + $firstprint = true; + } + $counter++; + } + } + } + $timeFriendly = $starttime . "-" . $stoptime; + $description = $timerange['rangedescr']; + + ?>
    +
    +   + + + + + + +
    " alt="edit" />" alt="delete" />
    +
    + + + + + +
    " alt="add" />
    +
    +


    +
    +
    + + + diff --git a/usr/local/www/firewall_schedule_edit.php b/usr/local/www/firewall_schedule_edit.php new file mode 100644 index 000000000..f8dce2008 --- /dev/null +++ b/usr/local/www/firewall_schedule_edit.php @@ -0,0 +1,1179 @@ +. + 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. +*/ +/* + pfSense_MODULE: schedules +*/ + +##|+PRIV +##|*IDENT=page-firewall-schedules-edit +##|*NAME=Firewall: Schedules: Edit page +##|*DESCR=Allow access to the 'Firewall: Schedules: Edit' page. +##|*MATCH=firewall_schedule_edit.php* +##|-PRIV + +function schedulecmp($a, $b) { + return strcmp($a['name'], $b['name']); +} + +function schedule_sort(){ + global $g, $config; + + if (!is_array($config['schedules']['schedule'])) + return; + + usort($config['schedules']['schedule'], "schedulecmp"); +} + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +$pgtitle = array(gettext("Firewall"),gettext("Schedules"),gettext("Edit")); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_schedule.php'); + +$dayArray = array (gettext('Mon'),gettext('Tues'),gettext('Wed'),gettext('Thur'),gettext('Fri'),gettext('Sat'),gettext('Sun')); +$monthArray = array (gettext('January'),gettext('February'),gettext('March'),gettext('April'),gettext('May'),gettext('June'),gettext('July'),gettext('August'),gettext('September'),gettext('October'),gettext('November'),gettext('December')); + +if (!is_array($config['schedules']['schedule'])) + $config['schedules']['schedule'] = array(); + +$a_schedules = &$config['schedules']['schedule']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_schedules[$id]) { + $pconfig['name'] = $a_schedules[$id]['name']; + $pconfig['descr'] = html_entity_decode($a_schedules[$id]['descr']); + $pconfig['timerange'] = $a_schedules[$id]['timerange']; + $pconfig['schedlabel'] = $a_schedules[$id]['schedlabel']; + $getSchedule = true; +} + +if ($_POST) { + + if(strtolower($_POST['name']) == "lan") + $input_errors[] = gettext("Schedule may not be named LAN."); + if(strtolower($_POST['name']) == "wan") + $input_errors[] = gettext("Schedule may not be named WAN."); + if(strtolower($_POST['name']) == "") + $input_errors[] = gettext("Schedule name cannot be blank."); + + $x = is_validaliasname($_POST['name']); + if (!isset($x)) { + $input_errors[] = gettext("Reserved word used for schedule name."); + } else { + if (is_validaliasname($_POST['name']) == false) + $input_errors[] = gettext("The schedule name may only consist of the characters a-z, A-Z, 0-9"); + } + + /* check for name conflicts */ + foreach ($a_schedules as $schedule) { + if (isset($id) && ($a_schedules[$id]) && ($a_schedules[$id] === $schedule)) + continue; + + if ($schedule['name'] == $_POST['name']) { + $input_errors[] = gettext("A Schedule with this name already exists."); + break; + } + } + $schedule = array(); + + $schedule['name'] = $_POST['name']; + $schedule['descr'] = htmlentities($_POST['descr'], ENT_QUOTES, 'UTF-8'); + + $timerangeFound = false; + for ($x=0; $x<99; $x++){ + if($_POST['schedule' . $x]) { + if (!preg_match('/^[0-9]+:[0-9]+$/', $_POST['starttime' . $x])) { + $input_errors[] = sprintf(gettext("Invalid start time - '%s'"), $_POST['starttime' . $x]); + continue; + } + if (!preg_match('/^[0-9]+:[0-9]+$/', $_POST['stoptime' . $x])) { + $input_errors[] = sprintf(gettext("Invalid stop time - '%s'"), $_POST['stoptime' . $x]); + continue; + } + $timerangeFound = true; + $timeparts = array(); + $firstprint = false; + $timestr = $_POST['schedule' . $x]; + $timehourstr = $_POST['starttime' . $x]; + $timehourstr .= "-"; + $timehourstr .= $_POST['stoptime' . $x]; + $timedescrstr = htmlentities($_POST['timedescr' . $x], ENT_QUOTES, 'UTF-8'); + $dashpos = strpos($timestr, '-'); + if ($dashpos === false) + { + $timeparts['position'] = $timestr; + } + else + { + $tempindarray = array(); + $monthstr = ""; + $daystr = ""; + $tempindarray = explode(",", $timestr); + foreach ($tempindarray as $currentselection) + { + if ($currentselection){ + if ($firstprint) + { + $monthstr .= ","; + $daystr .= ","; + } + $tempstr = ""; + $monthpos = strpos($currentselection, "m"); + $daypos = strpos($currentselection, "d"); + $monthstr .= substr($currentselection, $monthpos+1, $daypos-$monthpos-1); + $daystr .= substr($currentselection, $daypos+1); + $firstprint = true; + } + } + $timeparts['month'] = $monthstr; + $timeparts['day'] = $daystr; + } + $timeparts['hour'] = $timehourstr; + $timeparts['rangedescr'] = $timedescrstr; + $schedule['timerange'][$x] = $timeparts; + } + } + + if (!$timerangeFound) + $input_errors[] = gettext("The schedule must have at least one time range configured."); + + if (!$input_errors) { + + if (!empty($pconfig['schedlabel'])) + $schedule['schedlabel'] = $pconfig['schedlabel']; + else + $schedule['schedlabel'] = uniqid(); + + if (isset($id) && $a_schedules[$id]){ + $a_schedules[$id] = $schedule; + } + else{ + $a_schedules[] = $schedule; + } + schedule_sort(); + if (write_config()) + filter_configure(); + + header("Location: firewall_schedule.php"); + exit; + + } + //we received input errors, copy data to prevent retype + else + { + if (!$_POST['schedule0']) + $getSchedule = false; + else + $getSchedule = true; + $pconfig['name'] = $schedule['name']; + $pconfig['descr'] = $schedule['descr']; + $pconfig['timerange'] = $schedule['timerange']; + } + +} +include("head.inc"); + +/* put your custom HTML head content here */ +/* using some of the $pfSenseHead function calls */ +$jscriptstr = << +// stoptimehour) + { + errors = "Error: Start Hour cannot be greater than Stop Hour."; + passedValidiation = false; + + } + else if (starttimehour == stoptimehour) + { + if (starttimemin > stoptimemin){ + errors = "Error: Start Minute cannot be greater than Stop Minute."; + passedValidiation = false; + } + } + + if (passedValidiation){ + addTimeRange(); + } + else { + if (errors != "") + alert(errors); + } +} + +function addTimeRange(){ + var tempdayarray = daysSelected.split(","); + var tempstr, tempFriendlyDay, starttimehour, starttimemin, stoptimehour, nrtempFriendlyTime, rtempFriendlyTime, nrtempID, rtempID = ""; + var stoptimemin, timeRange, tempstrdaypos, week, daypos, day, month, dashpos, nrtempTime, rtempTime, monthstr, daystr = ""; + rtempFriendlyTime = ""; + nrtempFriendlyTime = ""; + nrtempID = ""; + rtempID = ""; + nrtempTime = ""; + rtempTime = ""; + tempdayarray.sort(); + rtempFriendlyDay = ""; + monthstr = ""; + daystr = ""; + + //check for existing entries + var findCurrentCounter; + for (u=0; u<99; u++){ + findCurrentCounter = document.getElementById("schedule" + u); + if (!findCurrentCounter) + { + schCounter = u; + break; + } + } + + if (daysSelected != ""){ + //get days selected + for (i=0; i"; + tr.appendChild(td); + + td = d.createElement("td"); + td.innerHTML=""; + tr.appendChild(td); + + td = d.createElement("td"); + td.innerHTML=""; + tr.appendChild(td); + + td = d.createElement("td"); + td.innerHTML=""; + tr.appendChild(td); + + td = d.createElement("td"); + td.innerHTML = "edit"; + tr.appendChild(td); + + td = d.createElement("td"); + td.innerHTML = "remove"; + tr.appendChild(td); + + td = d.createElement("td"); + td.innerHTML=""; + tr.appendChild(td); + tbody.appendChild(tr); + + schCounter++; + + //reset calendar and time and descr + clearCalendar(); + clearTime(); + clearDescr(); +} + + +function clearCalendar(){ + var tempstr, daycell = ""; + //clear days selected + daysSelected = ""; + //loop through all 52 weeks + for (j=1; j<=53; j++) + { + //loop through all 7 days + for (k=1; k<8; k++){ + tempstr = 'w' + j + 'p' + k; + daycell = eval('document.getElementById(tempstr)'); + if (daycell != null){ + daycell.style.backgroundColor = "#FFFFFF"; // white + } + } + } +} + +function clearTime(){ + document.getElementById("starttimehour").value = "0"; + document.getElementById("starttimemin").value = "00"; + document.getElementById("stoptimehour").value = "23"; + document.getElementById("stoptimemin").value = "59"; +} + +function clearDescr(){ + document.getElementById("timerangedescr").value = ""; +} + +function editRow(incTime, el) { + var check = checkForRanges(); + + if (check){ + + //reset calendar and time + clearCalendar(); + clearTime(); + + var starttimehour, descr, days, tempstr, starttimemin, hours, stoptimehour, stoptimemin = ""; + + tempArray = incTime.split ("||"); + + days = tempArray[0]; + hours = tempArray[1]; + descr = tempArray[2]; + + var tempdayArray = days.split(","); + var temphourArray = hours.split("-"); + tempstr = temphourArray[0]; + var temphourArray2 = tempstr.split(":"); + + document.getElementById("starttimehour").value = temphourArray2[0]; + document.getElementById("starttimemin").value = temphourArray2[1]; + + tempstr = temphourArray[1]; + temphourArray2 = tempstr.split(":"); + + document.getElementById("stoptimehour").value = temphourArray2[0]; + document.getElementById("stoptimemin").value = temphourArray2[1]; + + document.getElementById("timerangedescr").value = descr; + + //toggle the appropriate days + for (i=0; i + +EOD; +?> + +"> + + + + +
    + +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + +

    + +
    + + + + +

    + + + + +
    +

    + +
    " style=" position:relative; display:"> + + + + + + + + + + + + + "; + } + if ($firstdayofmonth == $positioncounter){?> + "; + } + + if ($positioncounter == 7 || $daycounter > $numberofdays){ + $positioncounter = 1; + echo ""; + } + else{ + $positioncounter++; + } + + }//end while loop?> +
    + "; + } + elseif ($firstdayprinted == TRUE && $daycounter <= $numberofdays){?> + + "; + } + else + { + echo "
    +
    + +
    + +
    + + + + + + + + + +
    +     +   + +     +   +

    + +

    + + + +
      + " class="formbtn" onclick="javascript:processEntries();" />    + " class="formbtn" onclick="javascript:clearCalendar(); clearTime(); clearDescr();" /> +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + /images/icons/icon_e.gif' alt='edit' /> + + /images/icons/icon_x.gif' alt='remove' /> + + +
    +
      + " /> + " onclick="window.location.href=''" /> + + + +
    + +
    + + + diff --git a/usr/local/www/firewall_shaper.php b/usr/local/www/firewall_shaper.php new file mode 100644 index 000000000..61f5fafbb --- /dev/null +++ b/usr/local/www/firewall_shaper.php @@ -0,0 +1,452 @@ + "") { + /* XXX: Huh, why are we killing php? */ + mwexec("killall -9 pfctl php"); + exit; +} + +$pgtitle = array(gettext("Firewall"),gettext("Traffic Shaper")); +$shortcut_section = "trafficshaper"; + +$shaperIFlist = get_configured_interface_with_descr(); +read_altq_config(); +/* + * The whole logic in these code maybe can be specified. + * If you find a better way contact me :). + */ + +if ($_GET) { + if ($_GET['queue']) + $qname = trim($_GET['queue']); + if ($_GET['interface']) + $interface = htmlspecialchars(trim($_GET['interface'])); + if ($_GET['action']) + $action = htmlspecialchars($_GET['action']); +} +if ($_POST) { + if ($_POST['name']) + $qname = htmlspecialchars(trim($_POST['name'])); + if ($_POST['interface']) + $interface = htmlspecialchars(trim($_POST['interface'])); + if ($_POST['parentqueue']) + $parentqueue = htmlspecialchars(trim($_POST['parentqueue'])); +} + +if ($interface) { + $altq = $altq_list_queues[$interface]; + if ($altq) { + $queue =& $altq->find_queue($interface, $qname); + } else $addnewaltq = true; +} + +$dontshow = false; +$newqueue = false; +$output_form = ""; + +if ($_GET) { + switch ($action) { + case "delete": + if ($queue) { + $queue->delete_queue(); + if (write_config()) + mark_subsystem_dirty('shaper'); + } + header("Location: firewall_shaper.php"); + exit; + break; + case "resetall": + foreach ($altq_list_queues as $altq) + $altq->delete_all(); + unset($altq_list_queues); + $altq_list_queues = array(); + $tree = "
      "; + $tree .= get_interface_list_to_show(); + $tree .= "
    "; + unset($config['shaper']['queue']); + unset($queue); + unset($altq); + $can_add = false; + $can_enable = false; + $dontshow = true; + foreach ($config['filter']['rule'] as $key => $rule) { + if (isset($rule['wizard']) && $rule['wizard'] == "yes") + unset($config['filter']['rule'][$key]); + } + if (write_config()) { + $retval = 0; + $retval |= filter_configure(); + $savemsg = get_std_save_message($retval); + + if (stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + } else { + $savemsg = gettext("Unable to write config.xml (Access Denied?)"); + } + $output_form = $default_shaper_message; + + break; + case "add": + /* XXX: Find better way because we shouldn't know about this */ + if ($altq) { + switch ($altq->GetScheduler()) { + case "PRIQ": + $q = new priq_queue(); + break; + case "FAIRQ": + $q = new fairq_queue(); + break; + case "HFSC": + $q = new hfsc_queue(); + break; + case "CBQ": + $q = new cbq_queue(); + break; + default: + /* XXX: Happens when sched==NONE?! */ + $q = new altq_root_queue(); + break; + } + } else if ($addnewaltq) { + $q = new altq_root_queue(); + } else + $input_errors[] = gettext("Could not create new queue/discipline!"); + + if ($q) { + $q->SetInterface($interface); + $output_form .= $q->build_form(); + $output_form .= ""; + $newjavascript = $q->build_javascript(); + unset($q); + $newqueue = true; + } + break; + case "show": + if ($queue) + $output_form .= $queue->build_form(); + else + $input_errors[] = gettext("Queue not found!"); + break; + case "enable": + if ($queue) { + $queue->SetEnabled("on"); + $output_form .= $queue->build_form(); + if (write_config()) + mark_subsystem_dirty('shaper'); + } else + $input_errors[] = gettext("Queue not found!"); + break; + case "disable": + if ($queue) { + $queue->SetEnabled(""); + $output_form .= $queue->build_form(); + if (write_config()) + mark_subsystem_dirty('shaper'); + } else + $input_errors[] = gettext("Queue not found!"); + break; + default: + $output_form .= $default_shaper_msg; + $dontshow = true; + break; + } +} else if ($_POST) { + unset($input_errors); + + if ($addnewaltq) { + $altq =& new altq_root_queue(); + $altq->SetInterface($interface); + + switch ($altq->GetBwscale()) { + case "Mb": + $factor = 1000 * 1000; + brak; + case "Kb": + $factor = 1000; + break; + case "b": + $factor = 1; + break; + case "Gb": + $factor = 1000 * 1000 * 1000; + break; + case "%": /* We don't use it for root_XXX queues. */ + default: /* XXX assume Kb by default. */ + $factor = 1000; + break; + } + $altq->SetAvailableBandwidth($altq->GetBandwidth() * $factor); + $altq->ReadConfig($_POST); + $altq->validate_input($_POST, $input_errors); + if (!$input_errors) { + unset($tmppath); + $tmppath[] = $altq->GetInterface(); + $altq->SetLink($tmppath); + $altq->wconfig(); + if (write_config()) + mark_subsystem_dirty('shaper'); + $can_enable = true; + $can_add = true; + } + read_altq_config(); + $output_form .= $altq->build_form(); + + } else if ($parentqueue) { /* Add a new queue */ + $qtmp =& $altq->find_queue($interface, $parentqueue); + if ($qtmp) { + $tmppath =& $qtmp->GetLink(); + array_push($tmppath, $qname); + $tmp =& $qtmp->add_queue($interface, $_POST, $tmppath, $input_errors); + if (!$input_errors) { + array_pop($tmppath); + $tmp->wconfig(); + $can_enable = true; + if ($tmp->CanHaveChildren() && $can_enable) { + if ($tmp->GetDefault() <> "") + $can_add = false; + else + $can_add = true; + } else + $can_add = false; + if (write_config()) + mark_subsystem_dirty('shaper'); + $can_enable = true; + if ($altq->GetScheduler() != "PRIQ") /* XXX */ + if ($tmp->GetDefault() <> "") + $can_add = false; + else + $can_add = true; + } + read_altq_config(); + $output_form .= $tmp->build_form(); + } else + $input_errors[] = gettext("Could not add new queue."); + } else if ($_POST['apply']) { + write_config(); + + $retval = 0; + $retval = filter_configure(); + $savemsg = get_std_save_message($retval); + + if (stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + + /* reset rrd queues */ + system("rm -f /var/db/rrd/*queuedrops.rrd"); + system("rm -f /var/db/rrd/*queues.rrd"); + enable_rrd_graphing(); + + clear_subsystem_dirty('shaper'); + + if ($queue) { + $output_form .= $queue->build_form(); + $dontshow = false; + } + else { + $output_form .= $default_shaper_message; + $dontshow = true; + } + + } else if ($queue) { + $queue->validate_input($_POST, $input_errors); + if (!$input_errors) { + $queue->update_altq_queue_data($_POST); + $queue->wconfig(); + if (write_config()) + mark_subsystem_dirty('shaper'); + $dontshow = false; + } + read_altq_config(); + $output_form .= $queue->build_form(); + } else { + $output_form .= $default_shaper_msg; + $dontshow = true; + } + mwexec("killall qstats"); +} else { + $output_form .= $default_shaper_msg; + $dontshow = true; +} + +if ($queue) { + if ($queue->GetEnabled()) + $can_enable = true; + else + $can_enable = false; + if ($queue->CanHaveChildren() && $can_enable) { + if ($altq->GetQname() <> $queue->GetQname() && $queue->GetDefault() <> "") + $can_add = false; + else + $can_add = true; + } else + $can_add = false; +} + +$tree = "
      "; +if (is_array($altq_list_queues)) { + foreach ($altq_list_queues as $tmpaltq) { + $tree .= $tmpaltq->build_tree(); + } +$tree .= get_interface_list_to_show(); +} +$tree .= "
    "; + +if (!$dontshow || $newqueue) { + +$output_form .= ""; +$output_form .= "
    " . gettext("Queue Actions") . "
    "; +$output_form .= "
    "; + +$output_form .= ""; +if ($can_add || $addnewaltq) { + $output_form .= "
    GetQname(); + } + $output_form .= "&action=add\">"; + $output_form .= ""; + $output_form .= ""; +} +$output_form .= ""; +$output_form .= ""; +else + $output_form .= " value=\"" . gettext("Disable shaper on interface") . "\" />"; +$output_form .= ""; +$output_form .= "
    "; +$output_form .= ""; +} +else + $output_form .= ""; + +$output = ""; +$output .= $output_form; + +//$pgtitle = "Firewall: Shaper: By Interface View"; +$closehead = false; +include("head.inc"); +?> + + + + + +build_javascript(); +echo $newjavascript; + +include("fbegin.inc"); +?> +
    + + + + + +

    +".gettext("You must apply the changes in order for them to take effect."));?>

    + +
    + + + + +
    + +
    +
    + + 0): ?> + + + + + +
    + + " class="formbtn" /> + +
    + + +
    + +
    + +
    +
    +
    + + + + diff --git a/usr/local/www/firewall_shaper_layer7.php b/usr/local/www/firewall_shaper_layer7.php new file mode 100644 index 000000000..e3fb2485b --- /dev/null +++ b/usr/local/www/firewall_shaper_layer7.php @@ -0,0 +1,591 @@ +"; +$default_layer7shaper_msg .= "" . gettext("Note") . ":
    "; +$default_layer7shaper_msg .= "
    " . gettext("You can add new layer7 protocol patterns by simply uploading the file") . " " . gettext("here") . ".

    "; +$default_layer7shaper_msg .= ""; + + +read_layer7_config(); + +if($_GET['reset'] <> "") { + // kill all ipfw-classifyd processes + mwexec("killall -9 ipfw-classifyd"); + exit; +} + +if ($_GET) { + if ($_GET['container']) + $name = htmlspecialchars(trim($_GET['container'])); + if ($_GET['action']) + $action = htmlspecialchars($_GET['action']); +} + +if($_POST) { + if ($_POST['container']) { + $name = htmlspecialchars(trim($_POST['container'])); + } +} + +if ($name) { + //Get the object from the 7rules list + $container = $layer7_rules_list[$name]; +} + +if ($_GET) { + switch ($action) { + case "add": + $show_proto_form = true; + $container = new layer7(); + $output_form .= $container->build_form(); //constructs the graphical interface on the right side + unset($container); + break; + case "show": + $show_proto_form = true; + if($container) { + $output_form .= $container->build_form(); + } + else { + $show_proto_form = false; + $input_errors[] = gettext("Layer7 Rules Container not found!"); + } + break; + default: + echo log_error("Get default"); + $show_proto_form = false; + $output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg; + break; + } +} + +//add a new l7rules container +else if ($_POST) { + $show_proto_form = true; + unset($input_errors); + + if($_POST['submit']) { + if (isset($layer7_rules_list[$name])) { + $l7r = $layer7_rules_list[$name]; + $_POST['divert_port'] = $l7r->GetRPort(); + } else { + $l7r =& new layer7(); + $_POST['divert_port'] = $l7r->gen_divert_port(); + } + for($i=0; $_POST['protocol'][$i] <> ""; $i++) { + $_POST['l7rules'][$i]['protocol'] = $_POST['protocol'][$i]; + $_POST['l7rules'][$i]['structure'] = $_POST['structure'][$i]; + $_POST['l7rules'][$i]['behaviour'] = $_POST['behaviour'][$i]; + } + $l7r->validate_input($_POST,$input_errors); + $l7r->ReadConfig($_POST['container'], $_POST); + //Before writing the results, we need to test for repeated protocols + $non_dupes = array(); + $dupes = array(); + for($j=0; $j<$i; $j++) { + if(!$non_dupes[$_POST['protocol'][$j]]) + $non_dupes[$_POST['protocol'][$j]] = true; + else + $dupes[] = $_POST['protocol'][$j]; + } + unset($non_dupes); + if(sizeof($dupes) == 0 && !$input_errors) { + $l7r->wconfig(); + if (write_config()) + mark_subsystem_dirty('shaper'); + + read_layer7_config(); + } + else { + if(sizeof($dupes) > 0) { + $dupe_error = gettext("Found the following repeated protocol definitions") . ": "; + foreach($dupes as $dupe) + $dupe_error .= "$dupe "; + $input_errors[] .= $dupe_error; + } + } + unset($dupes); + unset($dupe_error); + //Even if there are repeated protocols, we won't lose any previous values + //The user will be able to solve the situation + $output_form .= $l7r->build_form(); + //Necessary to correctly build the proto form + $container = $layer7_rules_list[$name]; + if($input_errors) + $container =& $l7r; + } else if($_POST['apply']) { + write_config(); + + $retval = 0; + $retval = filter_configure(); + $savemsg = get_std_save_message($retval); + + if(stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + + clear_subsystem_dirty('shaper'); + + if($container) { + $output_form .= $container->build_form(); + } else { + $show_proto_form = false; + $output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg; + } + } else if ($_POST['delete']) { + $container->delete_l7c(); + if (write_config()) + mark_subsystem_dirty('shaper'); + unset($container); + + header("Location: firewall_shaper_layer7.php"); + exit; + } + else { + $show_proto_form = false; + } +} +else { + $show_proto_form = false; + $output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg; +} + +// Builds the left tree +$tree = "
      "; +if (is_array($layer7_rules_list)) { + foreach ($layer7_rules_list as $tmpl7) { + $tree .= $tmpl7->build_tree(); + } +} +$tree .= "
    "; + +$output = ""; +$output .= $output_form; +$closehead = false; +include("head.inc"); +?> + + + + + + + + + +
    + + + + + +

    +" . gettext("You must apply the changes in order for them to take effect."));?>

    + +
    + + + +
    + +
    +
    + + + 0): ?> + + + + + + + + + + + + + + + + + +
    +
    + +

    + + " width="17" height="17" border="0" alt="add" /> +
    +
    +
    + + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + rsets as $l7rule) { + ?> + + + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    + + + + + + + GetRStructure() == "queue"): ?> + + + + + + GetRStructure() == "limiter"): ?> + + + + + + + x +
    + + " /> +
    +   + + " /> + + + " /> + + + " /> + + +
    +
    + +
    + + + + + + + + + diff --git a/usr/local/www/firewall_shaper_queues.php b/usr/local/www/firewall_shaper_queues.php new file mode 100644 index 000000000..ebac911f4 --- /dev/null +++ b/usr/local/www/firewall_shaper_queues.php @@ -0,0 +1,229 @@ + "") { + mwexec("killall -9 pfctl"); + exit; +} + +$shaperIFlist = get_configured_interface_with_descr(); +read_altq_config(); +$qlist =& get_unique_queue_list(); + +if (!is_array($qlist)) + $qlist = array(); + +$tree = ""; + +if ($_GET) { + if ($_GET['queue']) + $qname = htmlspecialchars(trim($_GET['queue'])); + if ($_GET['interface']) + $interface = htmlspecialchars(trim($_GET['interface'])); + if ($_GET['action']) + $action = htmlspecialchars($_GET['action']); + + switch ($action) { + case "delete": + $altq =& $altq_list_queues[$interface]; + $qtmp =& $altq->find_queue("", $qname); + if ($qtmp) { + $qtmp->delete_queue(); + if (write_config()) + mark_subsystem_dirty('shaper'); + } + header("Location: firewall_shaper_queues.php"); + exit; + break; + case "add": + /* + * XXX: WARNING: This returns the first it finds. + * Maybe the user expects something else?! + */ + foreach ($altq_list_queues as $altq) { + $qtmp =& $altq->find_queue("", $qname); + if ($qtmp) { + $copycfg = array(); + $qtmp->copy_queue($interface, $copycfg); + $aq =& $altq_list_queues[$interface]; + if ($qname == $qtmp->GetInterface()) { + $config['shaper']['queue'][] = $copycfg; + } else if ($aq) { + $tmp1 =& $qtmp->find_parentqueue($interface, $qname); + if ($tmp1) + $tmp =& $aq->find_queue($interface, $tmp1->GetQname()); + + if ($tmp) + $link =& get_reference_to_me_in_config($tmp->GetLink()); + else + $link =& get_reference_to_me_in_config($aq->GetLink()); + $link['queue'][] = $copycfg; + } else { + $newroot = array(); + $newroot['name'] = $interface; + $newroot['interface'] = $interface; + $newroot['scheduler'] = $altq->GetScheduler(); + $newroot['queue'] = array(); + $newroot['queue'][] = $copycfg; + $config['shaper']['queue'][] = $newroot; + } + if (write_config()) + mark_subsystem_dirty('shaper'); + break; + } + } + + header("Location: firewall_shaper_queues.php?queue=".$qname."&action=show"); + exit; + break; + case "show": + foreach ($config['interfaces'] as $if => $ifdesc) { + $altq = $altq_list_queues[$if]; + if ($altq) { + $qtmp =& $altq->find_queue("", $qname); + if ($qtmp) + $output .= $qtmp->build_shortform(); + else + $output .= build_iface_without_this_queue($if, $qname); + } else { + if (!is_altq_capable($ifdesc['if'])) + continue; + if (!isset($ifdesc['enable']) && $if != "lan" && $if != "wan") + continue; + $output .= build_iface_without_this_queue($if, $qname); + } + } + break; + } +} + +if ($_POST['apply']) { + write_config(); + + $retval = 0; + /* Setup pf rules since the user may have changed the optimization value */ + $retval = filter_configure(); + $savemsg = get_std_save_message($retval); + if (stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + + /* reset rrd queues */ + system("rm -f /var/db/rrd/*queuedrops.rrd"); + system("rm -f /var/db/rrd/*queues.rrd"); + enable_rrd_graphing(); + + clear_subsystem_dirty('shaper'); +} + +$pgtitle = gettext("Firewall: Shaper: By Queues View"); +$shortcut_section = "trafficshaper"; +$closehead = false; +include("head.inc"); +?> + + + + + + +
    + +
    + +

    +" . gettext("You must apply the changes in order for them to take effect."));?>

    + + + + + + +
    + +
    +
    + + + + +
    + + + " . $qname . "


    "; + echo ""; + echo $output; + echo ""; + echo "
     
    "; + ?> +
    + +
    +
    +
    + + + diff --git a/usr/local/www/firewall_shaper_vinterface.php b/usr/local/www/firewall_shaper_vinterface.php new file mode 100644 index 000000000..5384cdeee --- /dev/null +++ b/usr/local/www/firewall_shaper_vinterface.php @@ -0,0 +1,443 @@ + "") { + mwexec("/usr/bin/killall -9 pfctl"); + exit; +} + +$pgtitle = array(gettext("Firewall"),gettext("Traffic Shaper"), gettext("Limiter")); +$shortcut_section = "trafficshaper-limiters"; + +read_dummynet_config(); +/* + * The whole logic in these code maybe can be specified. + * If you find a better way contact me :). + */ + +if ($_GET) { + if ($_GET['queue']) + $qname = htmlspecialchars(trim($_GET['queue'])); + if ($_GET['pipe']) + $pipe = htmlspecialchars(trim($_GET['pipe'])); + if ($_GET['action']) + $action = htmlspecialchars($_GET['action']); +} +if ($_POST) { + if ($_POST['name']) + $qname = htmlspecialchars(trim($_POST['name'])); + else if ($_POST['newname']) + $qname = htmlspecialchars(trim($_POST['newname'])); + if ($_POST['pipe']) + $pipe = htmlspecialchars(trim($_POST['pipe'])); + else + $pipe = htmlspecialchars(trim($qname)); + if ($_POST['parentqueue']) + $parentqueue = htmlspecialchars(trim($_POST['parentqueue'])); +} + +if ($pipe) { + $dnpipe = $dummynet_pipe_list[$pipe]; + if ($dnpipe) { + $queue =& $dnpipe->find_queue($pipe, $qname); + } else $addnewpipe = true; +} + +$dontshow = false; +$newqueue = false; +$output_form = ""; + +if ($_GET) { + switch ($action) { + case "delete": + if ($queue) { + if (is_array($config['filter']['rule'])) { + foreach ($config['filter']['rule'] as $rule) { + if ($rule['dnpipe'] == $queue->GetQname() || $rule['pdnpipe'] == $queue->GetQname()) + $input_errors[] = gettext("This pipe/queue is referenced in filter rules, please remove references from there before deleting."); + } + } + if (!$input_errors) { + $queue->delete_queue(); + if (write_config()) + mark_subsystem_dirty('shaper'); + header("Location: firewall_shaper_vinterface.php"); + exit; + } + $output_form .= $queue->build_form(); + } else { + $input_errors[] = sprintf(gettext("No queue with name %s was found!"),$qname); + $output_form .= $dn_default_shaper_msg; + $dontshow = true; + } + break; + case "resetall": + foreach ($dummynet_pipe_list as $dn) + $dn->delete_queue(); + unset($dummynet_pipe_list); + $dummynet_pipe_list = array(); + unset($config['dnshaper']['queue']); + unset($queue); + unset($pipe); + $can_add = false; + $can_enable = false; + $dontshow = true; + foreach ($config['filter']['rule'] as $key => $rule) { + if (isset($rule['dnpipe'])) + unset($config['filter']['rule'][$key]['dnpipe']); + if (isset($rule['pdnpipe'])) + unset($config['filter']['rule'][$key]['pdnpipe']); + } + if (write_config()) { + $retval = 0; + $retval = filter_configure(); + $savemsg = get_std_save_message($retval); + + if (stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + } else + $savemsg = gettext("Unable to write config.xml (Access Denied?)"); + $output_form = $dn_default_shaper_message; + + break; + case "add": + if ($dnpipe) { + $q = new dnqueue_class(); + $q->SetPipe($pipe); + $output_form .= ""; + } else if ($addnewpipe) { + $q = new dnpipe_class(); + $q->SetQname($pipe); + } else + $input_errors[] = gettext("Could not create new queue/discipline!"); + + if ($q) { + $output_form .= $q->build_form(); + $newjavascript = $q->build_javascript(); + unset($q); + $newqueue = true; + } + break; + case "show": + if ($queue) + $output_form .= $queue->build_form(); + else + $input_errors[] = gettext("Queue not found!"); + break; + case "enable": + if ($queue) { + $queue->SetEnabled("on"); + $output_form .= $queue->build_form(); + $queue->wconfig(); + if (write_config()) + mark_subsystem_dirty('shaper'); + } else + $input_errors[] = gettext("Queue not found!"); + break; + case "disable": + if ($queue) { + $queue->SetEnabled(""); + $output_form .= $queue->build_form(); + $queue->wconfig(); + if (write_config()) + mark_subsystem_dirty('shaper'); + } else + $input_errors[] = gettext("Queue not found!"); + break; + default: + $output_form .= $dn_default_shaper_msg; + $dontshow = true; + break; + } +} else if ($_POST) { + unset($input_errors); + + if ($addnewpipe) { + if (!empty($dummynet_pipe_list[$qname])) + $input_errors[] = gettext("You cannot name a child queue with the same name as a parent limiter"); + else { + $dnpipe =& new dnpipe_class(); + + $dnpipe->ReadConfig($_POST); + $dnpipe->validate_input($_POST, $input_errors); + if (!$input_errors) { + $number = dnpipe_find_nextnumber(); + $dnpipe->SetNumber($number); + unset($tmppath); + $tmppath[] = $dnpipe->GetQname(); + $dnpipe->SetLink($tmppath); + $dnpipe->wconfig(); + if (write_config()) + mark_subsystem_dirty('shaper'); + $can_enable = true; + $can_add = true; + } + + read_dummynet_config(); + $output_form .= $dnpipe->build_form(); + $newjavascript = $dnpipe->build_javascript(); + } + } else if ($parentqueue) { /* Add a new queue */ + if (!empty($dummynet_pipe_list[$qname])) + $input_errors[] = gettext("You cannot name a child queue with the same name as a parent limiter"); + else if ($dnpipe) { + $tmppath =& $dnpipe->GetLink(); + array_push($tmppath, $qname); + $tmp =& $dnpipe->add_queue($pipe, $_POST, $tmppath, $input_errors); + if (!$input_errors) { + array_pop($tmppath); + $tmp->wconfig(); + if (write_config()) { + $can_enable = true; + $can_add = false; + mark_subsystem_dirty('shaper'); + } + } + read_dummynet_config(); + $output_form .= $tmp->build_form(); + } else + $input_errors[] = gettext("Could not add new queue."); + } else if ($_POST['apply']) { + write_config(); + + $retval = 0; + $retval = filter_configure(); + $savemsg = get_std_save_message($retval); + + if (stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + + /* XXX: TODO Make dummynet pretty graphs */ + // enable_rrd_graphing(); + + clear_subsystem_dirty('shaper'); + + if ($queue) { + $output_form .= $queue->build_form(); + $dontshow = false; + } + else { + $output_form .= $dn_default_shaper_message; + $dontshow = true; + } + + } else if ($queue) { + $queue->validate_input($_POST, $input_errors); + if (!$input_errors) { + $queue->update_dn_data($_POST); + $queue->wconfig(); + if (write_config()) + mark_subsystem_dirty('shaper'); + $dontshow = false; + } + read_dummynet_config(); + $output_form .= $queue->build_form(); + } else { + $output_form .= $dn_default_shaper_msg; + $dontshow = true; + } +} else { + $output_form .= $dn_default_shaper_msg; + $dontshow = true; +} + +if ($queue) { + if ($queue->GetEnabled()) + $can_enable = true; + else + $can_enable = false; + if ($queue->CanHaveChildren()) { + $can_add = true; + } else + $can_add = false; +} + +$tree = "
      "; +if (is_array($dummynet_pipe_list)) { + foreach ($dummynet_pipe_list as $tmpdn) { + $tree .= $tmpdn->build_tree(); + } +} +$tree .= "
    "; + +if (!$dontshow || $newqueue) { + +$output_form .= ""; +$output_form .= gettext("Queue Actions"); +$output_form .= ""; + +$output_form .= ""; +if ($can_add || $addnewaltq) { + $output_form .= "GetQname(); + } + $output_form .= "&action=add\">"; + $output_form .= ""; + $output_form .= ""; +} +$output_form .= "GetQname(); +} +$output_form .= "&action=delete\">"; +$output_form .= ""; +else + $output_form .= " value=\"" . gettext("Delete Limiter") ."\" />"; +$output_form .= ""; +$output_form .= ""; +$output_form .= ""; +} +else + $output_form .= ""; + +$output = ""; +$output .= $output_form; +$closehead = false; +include("head.inc"); +?> + + + + + + + +build_javascript(); +else + echo $newjavascript; + +include("fbegin.inc"); +?> +
    + + + + + +

    +".gettext("You must apply the changes in order for them to take effect."));?>

    + +
    + + + + +
    + +
    +
    + + 0): ?> + + + + + +
    +
    + +

    + + " width="17" height="17" border="0" alt="add" />  +
    +
    +
    + +
    + +
    +
    +
    + + + + + diff --git a/usr/local/www/firewall_shaper_wizards.php b/usr/local/www/firewall_shaper_wizards.php new file mode 100644 index 000000000..85d43cac9 --- /dev/null +++ b/usr/local/www/firewall_shaper_wizards.php @@ -0,0 +1,144 @@ + "") { + sigkillbyname('pfctl', SIGKILL); + exit; +} + +if ($_POST['apply']) { + write_config(); + + $retval = 0; + /* Setup pf rules since the user may have changed the optimization value */ + $retval = filter_configure(); + $savemsg = get_std_save_message($retval); + if (stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + + /* reset rrd queues */ + unlink_if_exists("/var/db/rrd/*queuedrops.rrd"); + unlink_if_exists("/var/db/rrd/*queues.rrd"); + enable_rrd_graphing(); + + clear_subsystem_dirty('shaper'); +} + +$pgtitle = array(gettext("Firewall"),gettext("Traffic Shaper"),gettext("Wizards")); +$shortcut_section = "trafficshaper"; + +$wizards = array( + gettext("Multiple Lan/Wan") => "traffic_shaper_wizard_multi_all.xml", + gettext("Dedicated Links") => "traffic_shaper_wizard_dedicated.xml", +); + +$closehead = false; +include("head.inc"); +?> + + + + + + + + +
    + + +

    +".gettext("You must apply the changes in order for them to take effect."));?>

    + + + + + + +
    + +
    +
    + + + + + + $wizard): +?> + + + + + +
    + + +" .$wizard . ""; +?> +
    +
    +
    +
    + + + diff --git a/usr/local/www/firewall_virtual_ip.php b/usr/local/www/firewall_virtual_ip.php new file mode 100644 index 000000000..f4aa0d353 --- /dev/null +++ b/usr/local/www/firewall_virtual_ip.php @@ -0,0 +1,309 @@ +. + All rights reserved. + + Includes code from m0n0wall which is: + Copyright (C) 2003-2005 Manuel Kasper . + All rights reserved. + + Includes code from pfSense which is: + Copyright (C) 2004-2005 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. +*/ +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-firewall-virtualipaddresses +##|*NAME=Firewall: Virtual IP Addresses page +##|*DESCR=Allow access to the 'Firewall: Virtual IP Addresses' page. +##|*MATCH=firewall_virtual_ip.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +if (!is_array($config['virtualip']['vip'])) { + $config['virtualip']['vip'] = array(); +} +$a_vip = &$config['virtualip']['vip']; + +if ($_POST) { + $pconfig = $_POST; + + if ($_POST['apply']) { + if (file_exists("{$g['tmp_path']}/.firewall_virtual_ip.apply")) { + $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.firewall_virtual_ip.apply")); + foreach ($toapplylist as $vid => $ovip) { + if (!empty($ovip)) + interface_vip_bring_down($ovip); + if ($a_vip[$vid]) { + switch ($a_vip[$vid]['mode']) { + case "ipalias": + interface_ipalias_configure($a_vip[$vid]); + break; + case "proxyarp": + interface_proxyarp_configure($a_vip[$vid]['interface']); + break; + case "carp": + interface_carp_configure($a_vip[$vid]); + break; + default: + break; + } + } + } + @unlink("{$g['tmp_path']}/.firewall_virtual_ip.apply"); + } + $retval = 0; + $retval |= filter_configure(); + $savemsg = get_std_save_message($retval); + + clear_subsystem_dirty('vip'); + } +} + +if ($_GET['act'] == "del") { + if ($a_vip[$_GET['id']]) { + /* make sure no inbound NAT mappings reference this entry */ + if (is_array($config['nat']['rule'])) { + foreach ($config['nat']['rule'] as $rule) { + if($rule['destination']['address'] <> "") { + if ($rule['destination']['address'] == $a_vip[$_GET['id']]['subnet']) { + $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one NAT mapping."); + break; + } + } + } + } + + if (is_ipaddrv6($a_vip[$_GET['id']]['subnet'])) { + $is_ipv6 = true; + $subnet = gen_subnetv6($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']); + $if_subnet_bits = get_interface_subnetv6($a_vip[$_GET['id']]['interface']); + $if_subnet = gen_subnetv6(get_interface_ipv6($a_vip[$_GET['id']]['interface']), $if_subnet_bits); + } else { + $is_ipv6 = false; + $subnet = gen_subnet($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']); + $if_subnet_bits = get_interface_subnet($a_vip[$_GET['id']]['interface']); + $if_subnet = gen_subnet(get_interface_ip($a_vip[$_GET['id']]['interface']), $if_subnet_bits); + } + + $subnet .= "/" . $a_vip[$_GET['id']]['subnet_bits']; + $if_subnet .= "/" . $if_subnet_bits; + + if (is_array($config['gateways']['gateway_item'])) + foreach($config['gateways']['gateway_item'] as $gateway) { + if ($a_vip[$_GET['id']]['interface'] != $gateway['interface']) + continue; + if ($is_ipv6 && $gateway['ipprotocol'] == 'inet') + continue; + if (!$is_ipv6 && $gateway['ipprotocol'] == 'inet6') + continue; + if (ip_in_subnet($gateway['gateway'], $if_subnet)) + continue; + + if (ip_in_subnet($gateway['gateway'], $subnet)) { + $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one Gateway."); + break; + } + } + + if ($a_vip[$_GET['id']]['mode'] == "ipalias") { + $subnet = gen_subnet($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']) . "/" . $a_vip[$_GET['id']]['subnet_bits']; + $found_if = false; + $found_carp = false; + $found_other_alias = false; + + if ($subnet == $if_subnet) + $found_if = true; + + $vipiface = $a_vip[$_GET['id']]['interface']; + foreach ($a_vip as $vip_id => $vip) { + if ($vip_id == $_GET['id']) + continue; + + if ($vip['interface'] == $vipiface && ip_in_subnet($vip['subnet'], $subnet)) + if ($vip['mode'] == "carp") + $found_carp = true; + else if ($vip['mode'] == "ipalias") + $found_other_alias = true; + } + + if ($found_carp === true && $found_other_alias === false && $found_if === false) + $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by a CARP IP with the description") . " {$vip['descr']}."; + } + + if (!$input_errors) { + if (!session_id()) + session_start(); + $user = getUserEntry($_SESSION['Username']); + if (is_array($user) && userHasPrivilege($user, "user-config-readonly")) { + header("Location: firewall_virtual_ip.php"); + exit; + } + session_commit(); + + // Special case since every proxyarp vip is handled by the same daemon. + if ($a_vip[$_GET['id']]['mode'] == "proxyarp") { + $viface = $a_vip[$_GET['id']]['interface']; + unset($a_vip[$_GET['id']]); + interface_proxyarp_configure($viface); + } else { + interface_vip_bring_down($a_vip[$_GET['id']]); + unset($a_vip[$_GET['id']]); + } + if (count($config['virtualip']['vip']) == 0) + unset($config['virtualip']['vip']); + write_config(); + header("Location: firewall_virtual_ip.php"); + exit; + } + } +} else if ($_GET['changes'] == "mods" && is_numericint($_GET['id'])) + $id = $_GET['id']; + +$pgtitle = array(gettext("Firewall"),gettext("Virtual IP Addresses")); +include("head.inc"); + +?> + + +
    +".gettext("You must apply the changes in order for them to take effect.")); +?> +
    + + + + + + + +
    + +
    +
    + + + + + + + + + + + "" or $vipent['range'] <> "" or + $vipent['subnet_bits'] <> "" or (isset($vipent['range']['from']) && $vipent['range']['from'] <> "")): ?> + + + + + + + + + + + + + + + + + + +
    + + + + + +
    edit
    +
    + + + +   + + "; elseif($vipent['mode'] == "carp") echo "carp"; elseif($vipent['mode'] == "other") echo "other"; elseif($vipent['mode'] == "ipalias") echo "ip alias";?> + +   + + + + + + +
    editdelete
    +
    + + + + + +
    edit
    +
    +


    +

    + .

    +
    +
    +
    +
    + + + diff --git a/usr/local/www/firewall_virtual_ip_edit.php b/usr/local/www/firewall_virtual_ip_edit.php new file mode 100644 index 000000000..d03c39ff3 --- /dev/null +++ b/usr/local/www/firewall_virtual_ip_edit.php @@ -0,0 +1,505 @@ +. + All rights reserved. + + Includes code from m0n0wall which is: + Copyright (C) 2003-2005 Manuel Kasper . + All rights reserved. + + Includes code from pfSense which is: + Copyright (C) 2004-2005 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. +*/ +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-firewall-virtualipaddress-edit +##|*NAME=Firewall: Virtual IP Address: Edit page +##|*DESCR=Allow access to the 'Firewall: Virtual IP Address: Edit' page. +##|*MATCH=firewall_virtual_ip_edit.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("filter.inc"); +require("shaper.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_virtual_ip.php'); + +if (!is_array($config['virtualip']['vip'])) { + $config['virtualip']['vip'] = array(); +} +$a_vip = &$config['virtualip']['vip']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +function return_first_two_octets($ip) { + $ip_split = explode(".", $ip); + return $ip_split[0] . "." . $ip_split[1]; +} + +function find_last_used_vhid() { + global $config, $g; + $vhid = 0; + foreach($config['virtualip']['vip'] as $vip) { + if($vip['vhid'] > $vhid) + $vhid = $vip['vhid']; + } + return $vhid; +} + +if (isset($id) && $a_vip[$id]) { + $pconfig['mode'] = $a_vip[$id]['mode']; + $pconfig['vhid'] = $a_vip[$id]['vhid']; + $pconfig['advskew'] = $a_vip[$id]['advskew']; + $pconfig['advbase'] = $a_vip[$id]['advbase']; + $pconfig['password'] = $a_vip[$id]['password']; + $pconfig['range'] = $a_vip[$id]['range']; + $pconfig['subnet'] = $a_vip[$id]['subnet']; + $pconfig['subnet_bits'] = $a_vip[$id]['subnet_bits']; + $pconfig['noexpand'] = $a_vip[$id]['noexpand']; + $pconfig['descr'] = $a_vip[$id]['descr']; + $pconfig['type'] = $a_vip[$id]['type']; + $pconfig['interface'] = $a_vip[$id]['interface']; +} else { + $lastvhid = find_last_used_vhid(); + $lastvhid++; + $pconfig['vhid'] = $lastvhid; +} + +if ($_POST) { + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "mode"); + $reqdfieldsn = array(gettext("Type")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if ($_POST['subnet']) + $_POST['subnet'] = trim($_POST['subnet']); + + if ($_POST['subnet']) { + if (!is_ipaddr($_POST['subnet'])) + $input_errors[] = gettext("A valid IP address must be specified."); + else { + if (isset($id) && isset($a_vip[$id])) { + $ignore_if = $a_vip[$id]['interface']; + $ignore_mode = $a_vip[$id]['mode']; + if (isset($a_vip[$id]['vhid'])) + $ignore_vhid = $a_vip[$id]['vhid']; + } else { + $ignore_if = $_POST['interface']; + $ignore_mode = $_POST['mode']; + } + + if (!isset($ignore_vhid)) + $ignore_vhid = $_POST['vhid']; + + if ($ignore_mode == 'carp') + $ignore_if .= "_vip{$ignore_vhid}"; + else + $ignore_if .= "_virtualip{$id}"; + + if (is_ipaddr_configured($_POST['subnet'], $ignore_if)) + $input_errors[] = gettext("This IP address is being used by another interface or VIP."); + + unset($ignore_if, $ignore_mode); + } + } + + $natiflist = get_configured_interface_with_descr(); + foreach ($natiflist as $natif => $natdescr) { + if ($_POST['interface'] == $natif && (empty($config['interfaces'][$natif]['ipaddr']) && empty($config['interfaces'][$natif]['ipaddrv6']))) + $input_errors[] = gettext("The interface chosen for the VIP has no IPv4 or IPv6 address configured so it cannot be used as a parent for the VIP."); + } + + /* ipalias and carp should not use network or broadcast address */ + if ($_POST['mode'] == "ipalias" || $_POST['mode'] == "carp") { + if (is_ipaddrv4($_POST['subnet']) && $_POST['subnet_bits'] != "32") { + $network_addr = gen_subnet($_POST['subnet'], $_POST['subnet_bits']); + $broadcast_addr = gen_subnet_max($_POST['subnet'], $_POST['subnet_bits']); + } else if (is_ipaddrv6($_POST['subnet']) && $_POST['subnet_bits'] != "128" ) { + $network_addr = gen_subnetv6($_POST['subnet'], $_POST['subnet_bits']); + $broadcast_addr = gen_subnetv6_max($_POST['subnet'], $_POST['subnet_bits']); + } + + if (isset($network_addr) && $_POST['subnet'] == $network_addr) + $input_errors[] = gettext("You cannot use the network address for this VIP"); + else if (isset($broadcast_addr) && $_POST['subnet'] == $broadcast_addr) + $input_errors[] = gettext("You cannot use the broadcast address for this VIP"); + } + + /* make sure new ip is within the subnet of a valid ip + * on one of our interfaces (wan, lan optX) + */ + if ($_POST['mode'] == 'carp') { + /* verify against reusage of vhids */ + $idtracker = 0; + foreach($config['virtualip']['vip'] as $vip) { + if($vip['vhid'] == $_POST['vhid'] && $vip['interface'] == $_POST['interface'] && $idtracker <> $id) + $input_errors[] = sprintf(gettext("VHID %s is already in use on interface %s. Pick a unique number on this interface."),$_POST['vhid'], convert_friendly_interface_to_friendly_descr($_POST['interface'])); + $idtracker++; + } + if (empty($_POST['password'])) + $input_errors[] = gettext("You must specify a CARP password that is shared between the two VHID members."); + + if (is_ipaddrv4($_POST['subnet'])) { + $parent_ip = get_interface_ip($_POST['interface']); + $parent_sn = get_interface_subnet($_POST['interface']); + $subnet = gen_subnet($parent_ip, $parent_sn); + } else if (is_ipaddrv6($_POST['subnet'])) { + $parent_ip = get_interface_ipv6($_POST['interface']); + $parent_sn = get_interface_subnetv6($_POST['interface']); + $subnet = gen_subnetv6($parent_ip, $parent_sn); + } + + if ($_POST['interface'] == "lo0") + $input_errors[] = gettext("For this type of vip localhost is not allowed."); + } else if ($_POST['mode'] != 'ipalias' && $_POST['interface'] == "lo0") + $input_errors[] = gettext("For this type of vip localhost is not allowed."); + + if (!$input_errors) { + $vipent = array(); + + $vipent['mode'] = $_POST['mode']; + $vipent['interface'] = $_POST['interface']; + + /* ProxyARP specific fields */ + if ($_POST['mode'] === "proxyarp") { + if ($_POST['type'] == "range") { + $vipent['range']['from'] = $_POST['range_from']; + $vipent['range']['to'] = $_POST['range_to']; + + } + $vipent['noexpand'] = isset($_POST['noexpand']); + } + + /* CARP specific fields */ + if ($_POST['mode'] === "carp") { + $vipent['vhid'] = $_POST['vhid']; + $vipent['advskew'] = $_POST['advskew']; + $vipent['advbase'] = $_POST['advbase']; + $vipent['password'] = $_POST['password']; + } + + /* Common fields */ + $vipent['descr'] = $_POST['descr']; + if (isset($_POST['type'])) + $vipent['type'] = $_POST['type']; + else + $vipent['type'] = "single"; + + if ($vipent['type'] == "single" || $vipent['type'] == "network") { + if (!isset($_POST['subnet_bits'])) { + $vipent['subnet_bits'] = "32"; + } else { + $vipent['subnet_bits'] = $_POST['subnet_bits']; + } + $vipent['subnet'] = $_POST['subnet']; + } + + if (!isset($id)) + $id = count($a_vip); + if (file_exists("{$g['tmp_path']}/.firewall_virtual_ip.apply")) + $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.firewall_virtual_ip.apply")); + else + $toapplylist = array(); + + $toapplylist[$id] = $a_vip[$id]; + if (!empty($a_vip[$id])) { + /* modify all virtual IP rules with this address */ + for ($i = 0; isset($config['nat']['rule'][$i]); $i++) { + if ($config['nat']['rule'][$i]['destination']['address'] == $a_vip[$id]['subnet']) + $config['nat']['rule'][$i]['destination']['address'] = $vipent['subnet']; + } + } + $a_vip[$id] = $vipent; + + if (write_config()) { + mark_subsystem_dirty('vip'); + file_put_contents("{$g['tmp_path']}/.firewall_virtual_ip.apply", serialize($toapplylist)); + } + header("Location: firewall_virtual_ip.php"); + exit; + } +} + +$pgtitle = array(gettext("Firewall"),gettext("Virtual IP Address"),gettext("Edit")); +include("head.inc"); + +?> + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + /> + /> + /> + /> +
    + +
    + + + + + + + + + + + + + + + + + + */ + ?> +
      
       + / +
       /> + Disable expansion of this entry into IPs on NAT lists (e.g. 192.168.1.0/24 expands to 256 entries.) +
    Range:   +- + +
    +
    +
    +
    +
    +
    + Base: + Skew: +

    + +
    + +
      + " /> + " onclick="window.location.href=''" /> + + + +
    + + +
    +
       + +

        . +
    +
    +
    + + + + diff --git a/usr/local/www/getserviceproviders.php b/usr/local/www/getserviceproviders.php new file mode 100644 index 000000000..91713772d --- /dev/null +++ b/usr/local/www/getserviceproviders.php @@ -0,0 +1,148 @@ + + 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. +*/ +/* + pfSense_MODULE: ajax +*/ + +##|+PRIV +##|*IDENT=page-getserviceproviders +##|*NAME=AJAX: Get Service Providers +##|*DESCR=Allow access to the 'AJAX: Service Providers' page. +##|*MATCH=getserviceproviders.php* +##|-PRIV +require_once("guiconfig.inc"); +require_once("pfsense-utils.inc"); + +$serviceproviders_xml = "/usr/local/share/mobile-broadband-provider-info/serviceproviders.xml"; +$serviceproviders_contents = file_get_contents($serviceproviders_xml); +$serviceproviders_attr = xml2array($serviceproviders_contents,1,"attr"); + +$serviceproviders = &$serviceproviders_attr['serviceproviders']['country']; + +function get_country_providers($country) { + global $serviceproviders; + foreach($serviceproviders as $sp) { + if($sp['attr']['code'] == strtolower($country)) { + return is_array($sp['provider'][0]) ? $sp['provider'] : array($sp['provider']); + } + } + return $provider_list; +} + +function country_list() { + global $serviceproviders; + $country_list = get_country_name("ALL"); + foreach($serviceproviders as $sp) { + foreach($country_list as $country) { + if(strtoupper($sp['attr']['code']) == $country['code']) { + echo $country['name'] . ":" . $country['code'] . "\n"; + } + } + } +} + +function providers_list($country) { + $serviceproviders = get_country_providers($country); + foreach($serviceproviders as $sp) { + echo $sp['name']['value'] . "\n"; + } +} + +function provider_plan_data($country,$provider,$connection) { + header("Content-type: application/xml;"); + echo "\n"; + echo "\n"; + $serviceproviders = get_country_providers($country); + foreach($serviceproviders as $sp) { + if(strtolower($sp['name']['value']) == strtolower($provider)) { + if(strtoupper($connection) == "CDMA") { + $conndata = $sp['cdma']; + } else { + if(!is_array($sp['gsm']['apn'][0])) { + $conndata = $sp['gsm']['apn']; + } else { + foreach($sp['gsm']['apn'] as $apn) { + if($apn['attr']['value'] == $connection) { + $conndata = $apn; + break; + } + } + } + } + if(is_array($conndata)) { + echo "" . $connection . "\n"; + echo "" . $conndata['username']['value'] . "\n"; + echo "" . $conndata['password']['value'] . "\n"; + + $dns_arr = is_array($conndata['dns'][0]) ? $conndata['dns'] : array( $conndata['dns'] ); + foreach($dns_arr as $dns) { + echo '' . $dns['value'] . "\n"; + } + } + break; + } + } + echo ""; +} + +function provider_plans_list($country,$provider) { + $serviceproviders = get_country_providers($country); + foreach($serviceproviders as $sp) { + if(strtolower($sp['name']['value']) == strtolower($provider)) { + if(array_key_exists('gsm',$sp)) { + if(array_key_exists('attr',$sp['gsm']['apn'])) { + $name = ($sp['gsm']['apn']['name'] ? $sp['gsm']['apn']['name'] : $sp['name']['value']); + echo $name . ":" . $sp['gsm']['apn']['attr']['value']; + } else { + foreach($sp['gsm']['apn'] as $apn_info) { + $name = ($apn_info['name']['value'] ? $apn_info['name']['value'] : $apn_info['gsm']['apn']['name']); + echo $name . ":" . $apn_info['attr']['value'] . "\n"; + } + } + } + if(array_key_exists('cdma',$sp)) { + $name = $sp['cdma']['name']['value'] ? $sp['cdma']['name']['value']:$sp['name']['value']; + echo $name . ":" . "CDMA"; + } + } + } +} + +$_GET_OR_POST = ($_SERVER['REQUEST_METHOD'] === 'POST') ? $_POST : $_GET; + +if(isset($_GET_OR_POST['country']) && !isset($_GET_OR_POST['provider'])) { + providers_list($_GET_OR_POST['country']); +} elseif(isset($_GET_OR_POST['country']) && isset($_GET_OR_POST['provider'])) { + if(isset($_GET_OR_POST['plan'])) + provider_plan_data($_GET_OR_POST['country'],$_GET_OR_POST['provider'],$_GET_OR_POST['plan']); + else + provider_plans_list($_GET_OR_POST['country'],$_GET_OR_POST['provider']); +} else { + country_list(); +} +?> diff --git a/usr/local/www/getstats.php b/usr/local/www/getstats.php new file mode 100644 index 000000000..a20f14e5b --- /dev/null +++ b/usr/local/www/getstats.php @@ -0,0 +1,50 @@ + \ No newline at end of file diff --git a/usr/local/www/graph.php b/usr/local/www/graph.php new file mode 100755 index 000000000..666f198c6 --- /dev/null +++ b/usr/local/www/graph.php @@ -0,0 +1,390 @@ +, Manuel Kasper + and Jonathan Watt . + 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. +*/ +/* + pfSense_MODULE: graph +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-interfacetraffic +##|*NAME=Diagnostics: Interface Traffic page +##|*DESCR=Allow access to the 'Diagnostics: Interface Traffic' page. +##|*MATCH=graph.php* +##|-PRIV + +require("globals.inc"); +require("guiconfig.inc"); + +header("Last-Modified: " . gmdate( "D, j M Y H:i:s" ) . " GMT" ); +header("Expires: " . gmdate( "D, j M Y H:i:s", time() ) . " GMT" ); +header("Cache-Control: no-store, no-cache, must-revalidate" ); // HTTP/1.1 +header("Cache-Control: post-check=0, pre-check=0", FALSE ); +header("Pragma: no-cache"); // HTTP/1.0 +header("Content-type: image/svg+xml"); + +/********** HTTP GET Based Conf ***********/ +$ifnum=@$_GET["ifnum"]; // BSD / SNMP interface name / number +$ifnum = get_real_interface($ifnum); +$ifname=@$_GET["ifname"]?$_GET["ifname"]:"Interface $ifnum"; //Interface name that will be showed on top right of graph + +/********* Other conf *******/ +if (isset($config["widgets"]["trafficgraphs"]["scale_type"])) + $scale_type = $config["widgets"]["trafficgraphs"]["scale_type"]; +else + $scale_type = "up"; + +$nb_plot=120; //NB plot in graph +if ($_GET["timeint"]) + $time_interval = $_GET["timeint"]; //Refresh time Interval +else + $time_interval = 3; + +if ($_GET["initdelay"]) + $init_delay = $_GET["initdelay"]; //Initial Delay +else + $init_delay = 3; + +//SVG attributes +$attribs['axis']='fill="black" stroke="black"'; +$attribs['in']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="7"'; +$attribs['out']='fill="#000000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="7"'; +$attribs['graph_in']='fill="none" stroke="#FF0000" stroke-opacity="0.8"'; +$attribs['graph_out']='fill="none" stroke="#000000" stroke-opacity="0.8"'; +$attribs['legend']='fill="black" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"'; +$attribs['graphname']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="8"'; +$attribs['grid_txt']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="6"'; +$attribs['grid']='stroke="gray" stroke-opacity="0.5"'; +$attribs['switch_unit']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4" text-decoration="underline"'; +$attribs['switch_scale']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4" text-decoration="underline"'; +$attribs['error']='fill="blue" font-family="Arial" font-size="4"'; +$attribs['collect_initial']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"'; + +//Error text if we cannot fetch data : depends on which method is used +$error_text = "Cannot get data about interface " . htmlspecialchars($ifnum); + +$height=100; //SVG internal height : do not modify +$width=200; //SVG internal width : do not modify + +$fetch_link = "ifstats.php?if=" . htmlspecialchars($ifnum); + +/* check for custom theme colors */ +if(file_exists("/usr/local/www/themes/{$g['theme']}/graph.php")) { + $themetxt = file_get_contents("/usr/local/www/themes/{$g['theme']}/graph.php"); + eval($themetxt); +} + +/********* Graph DATA **************/ +print('' . "\n");?> + + + + /> + /> + /> + /> + /> + text-anchor="end"> + text-anchor="end"> + text-anchor="end"> + > + > + > + > + text-anchor="end"> + > + > () + > + > + > + points=" "/> + text-anchor="middle"> + text-anchor="middle">... + + + diff --git a/usr/local/www/graph_cpu.php b/usr/local/www/graph_cpu.php new file mode 100644 index 000000000..12641d277 --- /dev/null +++ b/usr/local/www/graph_cpu.php @@ -0,0 +1,206 @@ +, Manuel Kasper + and Jonathan Watt . + 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. +*/ +/* + pfSense_MODULE: graph +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-cpuutilization +##|*NAME=Diagnostics: CPU Utilization page +##|*DESCR=Allow access to the 'Diagnostics: CPU Utilization' page. +##|*MATCH=graph_cpu.php* +##|-PRIV + +require_once("guiconfig.inc"); + +header("Last-Modified: " . gmdate( "D, j M Y H:i:s" ) . " GMT" ); +header("Expires: " . gmdate( "D, j M Y H:i:s", time() ) . " GMT" ); +header("Cache-Control: no-store, no-cache, must-revalidate" ); // HTTP/1.1 +header("Cache-Control: post-check=0, pre-check=0", FALSE ); +header("Pragma: no-cache"); // HTTP/1.0 +header("Content-type: image/svg+xml"); + +/********* Other conf *******/ + +$nb_plot = 120; // maximum number of data points to plot in the graph +$fetch_link = "stats.php?stats=cpu"; + +//SVG attributes +$attribs['axis']='fill="black" stroke="black"'; +$attribs['cpu']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="7"'; +$attribs['graph_cpu']='fill="none" stroke="#FF0000" stroke-opacity="0.8"'; +$attribs['legend']='fill="black" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"'; +$attribs['grid_txt']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="6"'; +$attribs['grid']='stroke="gray" stroke-opacity="0.5"'; +$attribs['error']='fill="blue" font-family="Arial" font-size="4"'; +$attribs['collect_initial']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"'; + +$height=100; // SVG internal height : do not modify +$width=200; // SVG internal width : do not modify + +/********* Graph DATA **************/ +print('' . "\n");?> + + + + /> + /> + points=" "/> + /> + /> + text-anchor="end">75% + text-anchor="end">50% + text-anchor="end">25% + > + text-anchor="middle"> + text-anchor="middle">... + + + diff --git a/usr/local/www/green_dot.jpg b/usr/local/www/green_dot.jpg new file mode 100755 index 0000000000000000000000000000000000000000..9df0abf6a333ba90d467ddcec2d4d834cd41d275 GIT binary patch literal 65 zcmex=. + 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. +*/ +/* + pfSense_MODULE: base +*/ + +/* Include authentication routines */ +/* THIS MUST BE ABOVE ALL OTHER CODE */ +if(!$nocsrf) { + function csrf_startup() { + csrf_conf('rewrite-js', '/csrf/csrf-magic.js'); + $timeout_minutes = isset($config['system']['webgui']['session_timeout']) ? $config['system']['webgui']['session_timeout'] : 240; + csrf_conf('expires', $timeout_minutes * 60); + } + require_once("csrf/csrf-magic.php"); +} + +/* make sure nothing is cached */ +if (!$omit_nocacheheaders) { + header("Expires: 0"); + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); + header("Cache-Control: no-store, no-cache, must-revalidate"); + header("Cache-Control: post-check=0, pre-check=0", false); + header("Pragma: no-cache"); +} + +header("X-Frame-Options: SAMEORIGIN"); +require_once("authgui.inc"); + +/* parse the configuration and include all configuration functions */ +require_once("functions.inc"); + +/* Pull in all the gui related display classes) */ +foreach (scandir("/usr/local/www/classes/") as $file) { + if (substr($file, -4) == ".inc") { + require_once("classes/{$file}"); + } +} + +$g['theme'] = get_current_theme(); + +/* Set the default interface language */ +if($config['system']['language'] <> "") { + $g['language'] = $config['system']['language']; +} elseif ($g['language'] == "") { + $g['language'] = 'en_US'; +} + +set_language($g['language']); + +/* used by progress bar */ +$lastseen = "-1"; + +$navlevelsep = ": "; /* navigation level separator string */ +$mandfldhtml = ""; /* display this before mandatory input fields */ +$mandfldhtmlspc = ""; /* same as above, but with spacing */ + +/* Some ajax scripts still need access to GUI */ +if(!$ignorefirmwarelock) { + if (is_subsystem_dirty('firmwarelock')) { + if (!$d_isfwfile) { + header("Location: system_firmware.php"); + exit; + } else { + return; + } + } +} + +/* Reserved table names to avoid colision */ +$reserved_table_names = array( + "bogons", + "bogonsv6", + "negate_networks", + "snort2c", + "sshlockout", + "tonatsubnets", + "virusprot", + "vpn_networks", + "webConfiguratorlockout" +); + +$firewall_rules_dscp_types = array("af11", + "af12", + "af13", + "af21", + "af22", + "af23", + "af31", + "af32", + "af33", + "af41", + "af42", + "af43", + "VA", + "EF", + "cs1", + "cs2", + "cs3", + "cs4", + "cs5", + "cs6", + "cs7", + "0x01", + "0x02", + "0x04"); + +$auth_server_types = array( + 'ldap' => "LDAP", + 'radius' => "Radius"); + +$ldap_urltypes = array( + 'TCP - Standard' => 389, + 'SSL - Encrypted' => 636); + +$ldap_scopes = array( + 'one' => "One Level", + 'subtree' => "Entire Subtree"); + +$ldap_protvers = array( + 2, + 3); + +$ldap_templates = array( + + 'open' => array( + 'desc' => "OpenLDAP", + 'attr_user' => "cn", + 'attr_group' => "cn", + 'attr_member' => "member"), + + 'msad' => array( + 'desc' => "Microsoft AD", + 'attr_user' => "samAccountName", + 'attr_group' => "cn", + 'attr_member' => "memberOf"), + + 'edir' => array( + 'desc' => "Novell eDirectory", + 'attr_user' => "cn", + 'attr_group' => "cn", + 'attr_member' => "uniqueMember")); + +$radius_srvcs = array( + 'both' => "Authentication and Accounting", + 'auth' => "Authentication", + 'acct' => "Accounting"); + +$netbios_nodetypes = array( + '0' => "none", + '1' => "b-node", + '2' => "p-node", + '4' => "m-node", + '5' => "h-node"); + +/* some well knows ports */ +$wkports = array( + 5999 => "CVSup", + 53 => "DNS", + 21 => "FTP", + 3000 => "HBCI", + 80 => "HTTP", + 443 => "HTTPS", + 5190 => "ICQ", + 113 => "IDENT/AUTH", + 143 => "IMAP", + 993 => "IMAP/S", + 4500 => "IPsec NAT-T", + 500 => "ISAKMP", + 1701 => "L2TP", + 389 => "LDAP", + 1755 => "MMS/TCP", + 7000 => "MMS/UDP", + 445 => "MS DS", + 3389 => "MS RDP", + 1512 => "MS WINS", + 1863 => "MSN", + 119 => "NNTP", + 123 => "NTP", + 138 => "NetBIOS-DGM", + 137 => "NetBIOS-NS", + 139 => "NetBIOS-SSN", + 1194 => "OpenVPN", + 110 => "POP3", + 995 => "POP3/S", + 1723 => "PPTP", + 1812 => "RADIUS", + 1813 => "RADIUS accounting", + 5004 => "RTP", + 5060 => "SIP", + 25 => "SMTP", + 465 => "SMTP/S", + 161 => "SNMP", + 162 => "SNMP-Trap", + 22 => "SSH", + 3478 => "STUN", + 587 => "SUBMISSION", + 3544 => "Teredo", + 23 => "Telnet", + 69 => "TFTP", + 5900 => "VNC"); + +/* TCP flags */ +$tcpflags = array("fin", "syn", "rst", "psh", "ack", "urg", "ece", "cwr"); + +$specialnets = array("(self)" => "This Firewall", "pptp" => "PPTP clients", "pppoe" => "PPPoE clients", "l2tp" => "L2TP clients"); + +$spiflist = get_configured_interface_with_descr(false, true); +foreach ($spiflist as $ifgui => $ifdesc) { + $specialnets[$ifgui] = $ifdesc . " net"; + $specialnets[$ifgui . 'ip'] = $ifdesc . " address"; +} + +$medias = array("auto" => "autoselect", "100full" => "100BASE-TX full-duplex", + "100half" => "100BASE-TX half-duplex", "10full" => "10BASE-T full-duplex", + "10half" => "10BASE-T half-duplex"); + +$wlan_modes = array("bss" => "Infrastructure (BSS)", "adhoc" => "Ad-hoc (IBSS)", + "hostap" => "Access Point"); + +/* platforms that support firmware updating */ +$fwupplatforms = array('pfSense', 'net45xx', 'net48xx', 'generic-pc', 'embedded', 'wrap', 'nanobsd'); + +function do_input_validation($postdata, $reqdfields, $reqdfieldsn, &$input_errors) { + + /* check for bad control characters */ + foreach ($postdata as $pn => $pd) { + if (is_string($pd) && preg_match("/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/", $pd)) { + $input_errors[] = sprintf(gettext("The field %s contains invalid characters."), $pn); + } + } + + for ($i = 0; $i < count($reqdfields); $i++) { + if ($_POST[$reqdfields[$i]] == "" && $_REQUEST[$reqdfields[$i]] == "") { + $input_errors[] = sprintf(gettext("The field %s is required."), $reqdfieldsn[$i]); + } + } +} + +function print_input_errors($input_errors) { + global $g; + + print << + + + + +
    + errors + +EOF; + echo "

    " . gettext("The following input errors were detected:") . "

    \n
      "; + foreach ($input_errors as $ierr) { + echo "
    • " . htmlspecialchars($ierr) . "
    • "; + } + + print << +
    + +  
    +EOF2; + +} + +function verify_gzip_file($fname) { + $returnvar = mwexec("/usr/bin/gzip -t " . escapeshellarg($fname)); + if ($returnvar != 0) + return 0; + else + return 1; +} + +function print_info_box_np($msg, $name="apply",$value="", $showapply=false) { + global $g, $nifty_redbox, $nifty_blackbox, $nifty_background; + + if(empty($value)) { + $value = gettext("Apply changes"); + } + + // Set the Nifty background color if one is not set already (defaults to white) + if($nifty_background == "") + $nifty_background = "#FFF"; + + if(stristr($msg, gettext("apply")) != false || stristr($msg, gettext("save")) != false || stristr($msg, gettext("create")) != false || $showapply) { + $savebutton = ""; + $savebutton .= ""; + if($_POST['if']) + $savebutton .= ""; + $savebutton.=""; + } + $nifty_redbox = "#990000"; + $nifty_blackbox = "#000000"; + + $themename = $g['theme']; + + if(file_exists("/usr/local/www/themes/{$themename}/tabcontrols.php")) { + $toeval = file_get_contents("/usr/local/www/themes/{$themename}/tabcontrols.php"); + eval($toeval); + } + + if(file_exists("/usr/local/www/themes/{$themename}/infobox.php")) { + $toeval = file_get_contents("/usr/local/www/themes/{$themename}/infobox.php"); + eval($toeval); + } + + if(!$savebutton) { + $savebutton = ""; + } + + echo << + + +
    + + + + + {$savebutton} + +
    +    exclamation + + {$msg} +
    +
    +
    +

     

    +
    + + + + +EOFnp; + +} + +function print_info_box_np_undo($msg, $name="apply",$value="Apply changes", $undo) { + global $g; + + if(stristr($msg, "apply") != false || stristr($msg, "save") != false || stristr($msg, "create") != false) { + $savebutton = ""; + $savebutton .= ""; + $savebutton .= ""; + $savebutton .= ""; + if($_POST['if']) + $savebutton .= ""; + } + $nifty_redbox = "#990000"; + $nifty_blackbox = "#000000"; + + $themename = $g['theme']; + + if(file_exists("/usr/local/www/themes/{$themename}/tabcontrols.php")) { + $toeval = file_get_contents("/usr/local/www/themes/{$themename}/tabcontrols.php"); + eval($toeval); + } + + if(file_exists("/usr/local/www/themes/{$themename}/infobox.php")) { + $toeval = file_get_contents("/usr/local/www/themes/{$themename}/infobox.php"); + eval($toeval); + } + + + if(!$savebutton) { + $savebutton = ""; + } + + echo << + + +
    + + + + + {$savebutton} + {$undobutton} + +
    +    exclamation + + {$msg} +
    +
    +
    +

     

    +
    + + + + +EOFnp; + +} + +function print_info_box($msg) { + print_info_box_np($msg); +} + +function get_std_save_message($ok) { + global $d_sysrebootreqd_path; + $filter_related = false; + $filter_pages = array("nat", "filter"); + $to_return = gettext("The changes have been applied successfully."); + foreach($filter_pages as $fp) + if(stristr($_SERVER['SCRIPT_FILENAME'], $fp)) + $filter_related = true; + if($filter_related) + $to_return .= "
    " . gettext("You can also monitor the filter reload progress."); + return $to_return; +} + +function pprint_address($adr) { + global $specialnets; + + if (isset($adr['any'])) { + $padr = "*"; + } else if ($adr['network']) { + $padr = $specialnets[$adr['network']]; + } else { + $padr = $adr['address']; + } + + if (isset($adr['not'])) + $padr = "! " . $padr; + + return $padr; +} + +function pprint_port($port) { + global $wkports; + + $pport = ""; + + if (!$port) + return "*"; + else { + $srcport = explode("-", $port); + if ((!$srcport[1]) || ($srcport[0] == $srcport[1])) { + $pport = $srcport[0]; + if ($wkports[$srcport[0]]) { + $pport .= " (" . $wkports[$srcport[0]] . ")"; + } + } else + $pport .= $srcport[0] . " - " . $srcport[1]; + } + + return $pport; +} + +function firewall_check_for_advanced_options(&$item) { + $item_set = ""; + if($item['os']) + $item_set .= "os {$item['os']} "; + if($item['dscp']) + $item_set .= "dscp {$item['dscp']} "; + if($item['max']) + $item_set .= "max {$item['max']} "; + if($item['max-src-nodes']) + $item_set .= "max-src-nodes {$item['max-src-nodes']} "; + if($item['max-src-conn']) + $item_set .= "max-src-conn {$item['max-src-conn']} "; + if($item['max-src-states']) + $item_set .= "max-src-states {$item['max-src-states']} "; + if(isset($item['nopfsync'])) + $item_set .= "nopfsync "; + if($item['statetype'] != "keep state" && $item['statetype'] != "") + $item_set .= "statetype {$item['statetype']} "; + if($item['statetimeout']) + $item_set .= "statetimeout {$item['statetimeout']} "; + if(isset($item['nosync'])) + $item_set .= "no XMLRPC Sync "; + if($item['max-src-conn-rate']) + $item_set .= "max-src-conn-rate {$item['max-src-conn-rate']} "; + if($item['max-src-conn-rates']) + $item_set .= "max-src-conn-rates {$item['max-src-conn-rates']} "; + if($item['vlanprio']) + $item_set .= "vlanprio {$item['vlanprio']} "; + if($item['vlanprioset']) + $item_set .= "vlanprioset {$item['vlanprioset']} "; + if($item['gateway']) + $item_set .= "gateway {$item['gateway']} "; + if($item['dnpipe']) + $item_set .= "limiter {$item['dnpipe']} "; + if($item['pdnpipe']) + $item_set .= "limiter {$item['pdnpipe']} "; + if($item['ackqueue']) + $item_set .= "ackqueue {$item['ackqueue']} "; + if($item['defaultqueue']) + $item_set .= "defaultqueue {$item['defaultqueue']} "; + if($item['l7container']) + $item_set .= "layer7 {$item['l7container']} "; + if($item['tag']) + $item_set .= "tag {$item['tag']} "; + if($item['tagged']) + $item_set .= "tagged {$item['tagged']} "; + if(isset($item['allowopts'])) + $item_set .= "allowopts "; + if(isset($item['disablereplyto'])) + $item_set .= "disable reply-to "; + if($item['tcpflags_any'] || $item['tcpflags1'] || $item['tcpflags2']) + $item_set .= "tcpflags set"; + + return $item_set; +} + +function gentitle($title) { + global $navlevelsep; + if(!is_array($title)) + return $title; + else + return join($navlevelsep, $title); +} + +function genhtmltitle($title) { + global $config; + return gentitle($title); +} + +/* update the changedesc and changecount(er) variables */ +function update_changedesc($update) { + global $changedesc; + global $changecount; + + $changedesc .= " {$update}"; + $changecount++; +} + +function clear_log_file($logfile = "/var/log/system.log", $restart_syslogd = true) { + global $config, $g; + if ($restart_syslogd) + exec("/usr/bin/killall syslogd"); + if(isset($config['system']['disablesyslogclog'])) { + unlink($logfile); + touch($logfile); + } else { + $log_size = isset($config['syslog']['logfilesize']) ? $config['syslog']['logfilesize'] : "511488"; + if(isset($config['system']['usefifolog'])) + exec("/usr/sbin/fifolog_create -s {$log_size} " . escapeshellarg($logfile)); + else + exec("/usr/local/sbin/clog -i -s {$log_size} " . escapeshellarg($logfile)); + } + if ($restart_syslogd) + system_syslogd_start(); +} + +function clear_all_log_files() { + global $g; + exec("/usr/bin/killall syslogd"); + + $log_files = array("system", "filter", "dhcpd", "vpn", "pptps", "poes", "l2tps", "openvpn", "portalauth", "ipsec", "ppp", "relayd", "wireless", "lighttpd", "ntpd", "gateways", "resolver", "routing"); + foreach ($log_files as $lfile) { + clear_log_file("{$g['varlog_path']}/{$lfile}.log", false); + } + + system_syslogd_start(); + killbyname("dhcpd"); + services_dhcpd_configure(); + return; +} + +function dump_clog($logfile, $tail, $withorig = true, $grepfor = "", $grepinvert = "") { + global $g, $config; + $sor = isset($config['syslog']['reverse']) ? "-r" : ""; + $logarr = ""; + $grepline = " "; + if(is_array($grepfor)) + $grepline .= " | /usr/bin/egrep " . escapeshellarg(implode("|", $grepfor)); + if(is_array($grepinvert)) + $grepline .= " | /usr/bin/egrep -v " . escapeshellarg(implode("|", $grepinvert)); + if (is_dir($logfile)) { + $logarr = array("File $logfile is a directory."); + } elseif (file_exists($logfile) && filesize($logfile) == 0) { + $logarr = array("Log file started."); + } else { + if($config['system']['disablesyslogclog']) { + exec("cat " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr); + } else { + if(isset($config['system']['usefifolog'])) + exec("/usr/sbin/fifolog_reader " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr); + else + exec("/usr/local/sbin/clog " . escapeshellarg($logfile) . "{$grepline}| grep -v \"CLOG\" | grep -v \"\033\" | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr); + } + } + foreach ($logarr as $logent) { + $logent = preg_split("/\s+/", $logent, 6); + echo "\n"; + if ($withorig) { + if(isset($config['system']['usefifolog'])) { + $entry_date_time = htmlspecialchars(date("F j, Y, g:i a","" . $logent[1] . "")); + $entry_text = htmlspecialchars($logent[5]); + } else { + $entry_date_time = htmlspecialchars(join(" ", array_slice($logent, 0, 3))); + $entry_text = ($logent[3] == $config['system']['hostname']) ? "" : $logent[3] . " "; + $entry_text .= htmlspecialchars($logent[4] . " " . $logent[5]); + } + echo "{$entry_date_time}\n"; + echo "{$entry_text}\n"; + + } else { + echo "" . htmlspecialchars($logent[5]) . "\n"; + } + echo "\n"; + } +} + +function return_clog($logfile, $tail, $withorig = true, $grepfor = "", $grepinvert = "", $grepreverse = false) { + global $g, $config; + $sor = (isset($config['syslog']['reverse']) || $grepreverse) ? "-r" : ""; + $logarr = ""; + $grepline = " "; + if(is_array($grepfor)) + $grepline .= " | /usr/bin/egrep " . escapeshellarg(implode("|", $grepfor)); + if(is_array($grepinvert)) + $grepline .= " | /usr/bin/egrep -v " . escapeshellarg(implode("|", $grepinvert)); + if($config['system']['disablesyslogclog']) { + exec("cat " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr); + } else { + if(isset($config['system']['usefifolog'])) { + exec("/usr/sbin/fifolog_reader " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr); + } else { + exec("/usr/local/sbin/clog " . escapeshellarg($logfile) . "{$grepline}| grep -v \"CLOG\" | grep -v \"\033\" | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr); + } + } + return($logarr); +} + +/* Check if variable has changed, update and log if it has + * returns true if var changed + * varname = variable name in plain text + * orig = original value + * new = new value + */ +function update_if_changed($varname, & $orig, $new) { + if (is_array($orig) && is_array($new)) { + $a_diff = array_diff($orig, $new); + foreach ($a_diff as $diff) { + update_changedesc("removed {$varname}: \"{$diff}\""); + } + $a_diff = array_diff($new, $orig); + foreach ($a_diff as $diff) { + update_changedesc("added {$varname}: \"{$diff}\""); + } + $orig = $new; + return true; + + } else { + if ($orig != $new) { + update_changedesc("{$varname}: \"{$orig}\" -> \"{$new}\""); + $orig = $new; + return true; + } + } + return false; +} + +function address_to_pconfig($adr, &$padr, &$pmask, &$pnot, &$pbeginport, &$pendport) { + if (isset($adr['any'])) + $padr = "any"; + else if ($adr['network']) + $padr = $adr['network']; + else if ($adr['address']) { + list($padr, $pmask) = explode("/", $adr['address']); + if (!$pmask) { + if (is_ipaddrv6($padr)) + $pmask = 128; + else + $pmask = 32; + } + } + + if (isset($adr['not'])) + $pnot = 1; + else + $pnot = 0; + + if ($adr['port']) { + list($pbeginport, $pendport) = explode("-", $adr['port']); + if (!$pendport) + $pendport = $pbeginport; + } else if (!is_alias($pbeginport) && !is_alias($pendport)) { + $pbeginport = "any"; + $pendport = "any"; + } +} + +function pconfig_to_address(&$adr, $padr, $pmask, $pnot=false, $pbeginport=0, $pendport=0) { + $adr = array(); + + if ($padr == "any") + $adr['any'] = true; + else if (is_specialnet($padr)) + $adr['network'] = $padr; + else { + $adr['address'] = $padr; + if (is_ipaddrv6($padr)) { + if ($pmask != 128) + $adr['address'] .= "/" . $pmask; + } else { + if ($pmask != 32) + $adr['address'] .= "/" . $pmask; + } + } + + if ($pnot) + $adr['not'] = true; + else + unset($adr['not']); + + if (($pbeginport != 0) && ($pbeginport != "any")) { + if ($pbeginport != $pendport) + $adr['port'] = $pbeginport . "-" . $pendport; + else + $adr['port'] = $pbeginport; + } + + if(is_alias($pbeginport)) { + $adr['port'] = $pbeginport; + } +} + +function is_specialnet($net) { + global $specialsrcdst; + + if(!$net) + return false; + if (in_array($net, $specialsrcdst)) + return true; + else + return false; +} + +//function to create widget tabs when called +function display_widget_tabs(& $tab_array) { + echo "
    "; + $tabscounter = 0; + foreach ($tab_array as $ta) { + $dashpos = strpos($ta[2],'-'); + $tabname = $ta[2] . "-tab"; + $tabclass = substr($ta[2],0,$dashpos); + $tabclass = $tabclass . "-class"; + if ($ta[1] == true) { + $tabActive = "table-cell"; + $tabNonActive = "none"; + } + else { + $tabActive = "none"; + $tabNonActive = "table-cell"; + } + echo "
    "; + echo "   {$ta[0]}"; + echo "   "; + echo "
    "; + + echo "
    "; + echo "   {$ta[0]}"; + echo "   "; + echo "
    "; + } + + echo ""; + echo "
    "; +} + + +// Return inline javascript file or CSS to minimizie +// request count going back to server. +function outputJavaScriptFileInline($javascript) { + if(file_exists($javascript)) { + echo "\n\n"; + } else { + echo "\n\n\n\n"; + } +} + + + +function outputCSSPrintFileInline($css) { + if(file_exists($css)) { + echo "\n\n"; + } else { + echo "\n\n\n\n"; + } +} + + +function outputCSSFileInline($css) { + if(file_exists($css)) { + echo "\n\n"; + } else { + echo "\n\n\n\n"; + } +} + +$rfc2616 = array( + 100 => "100 Continue", + 101 => "101 Switching Protocols", + 200 => "200 OK", + 201 => "201 Created", + 202 => "202 Accepted", + 203 => "203 Non-Authoritative Information", + 204 => "204 No Content", + 205 => "205 Reset Content", + 206 => "206 Partial Content", + 300 => "300 Multiple Choices", + 301 => "301 Moved Permanently", + 302 => "302 Found", + 303 => "303 See Other", + 304 => "304 Not Modified", + 305 => "305 Use Proxy", + 306 => "306 (Unused)", + 307 => "307 Temporary Redirect", + 400 => "400 Bad Request", + 401 => "401 Unauthorized", + 402 => "402 Payment Required", + 403 => "403 Forbidden", + 404 => "404 Not Found", + 405 => "405 Method Not Allowed", + 406 => "406 Not Acceptable", + 407 => "407 Proxy Authentication Required", + 408 => "408 Request Timeout", + 409 => "409 Conflict", + 410 => "410 Gone", + 411 => "411 Length Required", + 412 => "412 Precondition Failed", + 413 => "413 Request Entity Too Large", + 414 => "414 Request-URI Too Long", + 415 => "415 Unsupported Media Type", + 416 => "416 Requested Range Not Satisfiable", + 417 => "417 Expectation Failed", + 500 => "500 Internal Server Error", + 501 => "501 Not Implemented", + 502 => "502 Bad Gateway", + 503 => "503 Service Unavailable", + 504 => "504 Gateway Timeout", + 505 => "505 HTTP Version Not Supported" +); + +function is_rfc2616_code($code) { + global $rfc2616; + if (isset($rfc2616[$code])) + return true; + else + return false; +} + +function print_rfc2616_select($tag, $current){ + global $rfc2616; + + /* Default to 200 OK if not set */ + if ($current == "") + $current = 200; + + echo "\n"; +} + +// Useful debugging function, much cleaner than print_r +function echo_array($array,$return_me=false){ + if(is_array($array) == false){ + $return = "The provided variable is not an array."; + }else{ + foreach($array as $name=>$value){ + if(is_array($value)){ + $return .= ""; + $return .= "['$name'] {
    \n"; + $return .= echo_array($value,true); + $return .= "
    }"; + $return .= "\n\n"; + }else{ + if(is_string($value)){ + $value = "\"$value\""; + } + $return .= "['$name'] = $value\n\n"; + } + } + } + if($return_me == true){ + return $return; + }else{ + echo "
    ".$return."
    "; + } +} + +/****f* pfsense-utils/display_top_tabs + * NAME + * display_top_tabs - display tabs with rounded edges + * INPUTS + * $text - array of tabs + * RESULT + * null + ******/ +function display_top_tabs(& $tab_array, $no_drop_down = false) { + global $config; + global $g; + global $tab_array_indent; + global $tab_array_space; + global $tab_array_char_limit; + + /* does the user have access to this tab? + * master user has access to everything. + * if the user does not have access, simply + * unset the tab item. + */ + + /* empty string code */ + if ($tab_array_indent == '') { + $tab_array_indent = 0; + } + + if ($tab_array_space == '') { + $tab_array_space = 1; + } + + if ($tab_array_char_limit == '') { + $tab_array_char_limit = 92; + } + + foreach ($tab_array as $tab_id => $ta){ + if(!isAllowedPage($ta[2])) + unset ($tab_array[$tab_id]); + } + + $tab_active_bg = "#EEEEEE"; + $tab_inactive_bg = "#777777"; + $nifty_tabs_corners = "#FFF"; + $font_color = "white"; + + /* if tabcontrols.php exist for a theme, allow it to be overriden */ + $themename = $config['theme']; + $filename = "/usr/local/www/themes/{$themename}/tabcontrols.php"; + if(file_exists($filename)) { + $eval_code = file_get_contents($filename); + eval($eval_code); + } + + $tabcharcount = 0; + foreach ($tab_array as $ta) + $tabcharcount = $tabcharcount + strlen($ta[0]); + + if($no_drop_down == true) { + $tabcharcount = 0; + unset($tab_array_char_limit); + } + + // If the character count of the tab names is > 670 + // then show a select item dropdown menubox. + if($tabcharcount > $tab_array_char_limit) { + echo gettext("Currently viewing: "); + echo "\n

     

    "; + echo ""; + } else { + echo "
    \n"; + echo "\n"; + echo "
      \n"; + $tabscounter = 0; + foreach ($tab_array as $ta) { + if ($ta[1] == true) { + echo "
    • {$ta[0]}
    • \n"; + } else { + echo "
    • {$ta[0]}
    • \n"; + } + $tabscounter++; + } + echo "
    \n
    \n"; + } +} + +function add_package_tabs($tabgroup, & $tab_array) { + global $config, $g; + + if(!is_array($config['installedpackages'])) + return; + if(!is_array($config['installedpackages']['tab'])) + return; + + foreach($config['installedpackages']['tab'] as $tab) { + if ($tab['group'] !== $group) + continue; + $tab_entry = array(); + if($tab['name']) { + $tab_entry[] = $tab['name']; + $tab_entry[] = false; + $tab_entry[] = $tab['url']; + $tab_array[] = $tab_entry; + } + } +} + +function alias_info_popup($alias_id){ + global $config; + $maxlength = 60; + $close_title="title='".gettext('move mouse out this alias to hide')."'"; + if (is_array($config['aliases']['alias'][$alias_id])){ + $alias_name=$config['aliases']['alias'][$alias_id]; + $alias_objects_with_details = ""; + if ($alias_name['url']) { + // TODO: Change it when pf supports tables with ports + if ($alias_name['type'] == "urltable") { + exec("/sbin/pfctl -t {$alias_name['name']} -T show | wc -l", $total_entries); + $counter=preg_replace("/\D/","",$total_entries[0]); + exec("/sbin/pfctl -t {$alias_name['name']} -T show | head -10002", $alias_addresses); + } else { + $urlfn = alias_expand_urltable($alias_name['name']); + $alias_addresses = explode("\n", file_get_contents($urlfn)); + $counter = count($alias_addresses); + } + $alias_objects_with_details .= ""; + $x=0; + foreach ($alias_addresses as $alias_ports_address ) { + switch ($x) { + case 0: + $x++; + $alias_objects_with_details .= ""; + break; + case 1: + $x++; + $alias_objects_with_details .= ""; + break; + default: + $x=0; + $alias_objects_with_details .= ""; + break; + } + } + for ($y = $x; $y <= $x; $y++) { + $alias_objects_with_details .= ""; + } + if ($x > 0) { + $alias_objects_with_details .= ""; + } + if ($counter > 10002) { + $alias_objects_with_details .= ""; + } + } + else{ + $alias_addresses = explode (" ", $alias_name['address']); + $alias_details = explode ("||", $alias_name['detail']); + $counter = 0; + foreach ($alias_addresses as $alias_ports_address) { + $alias_objects_with_details .= ""; + $alias_detail_default = strpos ($alias_details[$counter],"Entry added"); + if ($alias_details[$counter] != "" && $alias_detail_default === False) + $alias_objects_with_details .=""; + else + $alias_objects_with_details .=""; + $alias_objects_with_details .= ""; + $counter++; + } + } + $alias_objects_with_details .= "
    {$alias_name['url']}
    {$alias_ports_address}{$alias_ports_address}{$alias_ports_address}
     
    ". gettext("listing only first 10k items") . "
    {$alias_addresses[$counter]}{$alias_details[$counter]} 
    "; + } + $alias_descr_substr = $alias_name['descr']; + if ($strlength >= $maxlength) + $alias_descr_substr = substr($alias_descr_substr, 0, $maxlength) . "..."; + $item_text = ($counter > 1 ? "items" : "item"); + $alias_caption = "{$alias_descr_substr} - {$counter} {$item_text}  edit "; + $strlength = strlen ($alias_caption); + print "

    {$alias_caption}

    " . $alias_objects_with_details; +} + +function rule_popup($src,$srcport,$dst,$dstport){ + global $config,$g; + $aliases_array = array(); + if ($config['aliases']['alias'] <> "" and is_array($config['aliases']['alias'])) { + $descriptions = array (); + foreach ($config['aliases']['alias'] as $alias_id=>$alias_name){ + $loading_image="\'loader\' " .gettext("loading...").""; + switch ($alias_name['type']){ + case "port": + $width="250"; + break; + case "urltable": + $width="500"; + break; + default: + $width="350"; + break; + } + $span_begin = ""; + $span_end = ""; + if ($alias_name['name'] == $src) { + $descriptions['src'] = $span_begin; + $descriptions['src_end'] = $span_end; + } + if ($alias_name['name'] == $srcport) { + $descriptions['srcport'] = $span_begin; + $descriptions['srcport_end'] = $span_end; + } + if ($alias_name['name'] == $dst ) { + $descriptions['dst'] = $span_begin; + $descriptions['dst_end'] = $span_end; + } + if ($alias_name['name'] == $dstport) { + $descriptions['dstport'] = $span_begin; + $descriptions['dstport_end'] = $span_end; + } + } + return $descriptions; + } +} + +$timezone = $config['system']['timezone']; +if (!$timezone) + $timezone = "Etc/UTC"; + +date_default_timezone_set($timezone); + +?> diff --git a/usr/local/www/halt.php b/usr/local/www/halt.php new file mode 100755 index 000000000..cd3de11e1 --- /dev/null +++ b/usr/local/www/halt.php @@ -0,0 +1,76 @@ +. + 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. +*/ +/* + pfSense_MODULE: header +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-haltsystem +##|*NAME=Diagnostics: Halt system page +##|*DESCR=Allow access to the 'Diagnostics: Halt system' page. +##|*MATCH=halt.php* +##|-PRIV + +require("guiconfig.inc"); +require("functions.inc"); +require("captiveportal.inc"); + +if ($_POST['Submit'] == " " . gettext("No") . " ") { + header("Location: index.php"); + exit; +} + +$pgtitle = array(gettext("Diagnostics"),gettext("Halt system")); +include('head.inc'); +?> + + + + +
    +
    +
    + +
    +

    +

    + " /> + " /> +

    +
    + + + + diff --git a/usr/local/www/head.inc b/usr/local/www/head.inc new file mode 100755 index 000000000..afdee938f --- /dev/null +++ b/usr/local/www/head.inc @@ -0,0 +1,112 @@ + + + + + <?php echo($config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pagetitle); ?> + + + + "; + else: + echo ""; + endif; + ?> + + + "; ?> + + + + + + + + + + + + + + + + + + + \n"; ?> +\n"; + echo "\t\n"; + } + echo "\t\n"; + echo "\t\n"; + echo "\t\n"; + echo "\t\n"; + if(file_exists("{$g['www_path']}/javascript/global.js")) + echo "\t\n"; + /* + * Find all javascript files that need to be included + * for this page ... from the arrays ... :) + * Coded by: Erik Kristensen + */ + + $dir = trim(basename($_SERVER["SCRIPT_FILENAME"], '.php')); + $path = "{$g['www_path']}/javascript/" . $dir . "/"; + if (is_dir($path)) { + if ($dh = opendir($path)) { + while (($file = readdir($dh)) !== false) { + if (is_dir($file)) + continue; + echo "\t\n"; + } + closedir($dh); + } + } + +if (!isset($closehead)) + echo ""; + +/* If this page is being remotely managed then do not allow the loading of the contents. */ +if($config['remote_managed_pages']['item']) { + foreach($config['remote_managed_pages']['item'] as $rmp) { + if($rmp == $_SERVER['SCRIPT_NAME']) { + include("fbegin.inc"); + print_info_box_np("This page is currently being managed by a remote machine."); + include("fend.inc"); + exit; + } + } +} + +?> diff --git a/usr/local/www/headjs.php b/usr/local/www/headjs.php new file mode 100644 index 000000000..0ee1cb4b6 --- /dev/null +++ b/usr/local/www/headjs.php @@ -0,0 +1,171 @@ +loader<\/div>\"; + jQuery('#submit').before(to_insert); + } + } + + function submit_form(e){ + // debugging helper + //alert(Form.serialize($('iform'))); + + if(jQuery('#inputerrors')) + jQuery('#inputerrors').html('
    Loading...<\/i><\/b><\/center>'); + + /* dsh: Introduced because pkg_edit tries to set some hidden fields + * if executing submit's onclick event. The click gets deleted + * by Ajax. Hence using onkeydown instead. + */ + if(jQuery('#submit').prop('keydown')) { + jQuery('#submit').keydown(); + jQuery('#submit').css('visibility','hidden'); + } + if(jQuery('#cancelbutton')) + jQuery('#cancelbutton').css('visibility','hidden'); + jQuery('#loading').css('visibility','visible'); + // submit the form using Ajax + } + + function formSubmitted(resp) { + var responseText = resp.responseText; + + // debugging helper + // alert(responseText); + + if(responseText.indexOf('html') > 0) { + /* somehow we have been fed an html page! */ + //alert('Somehow we have been fed an html page! Forwarding to /.'); + document.location.href = '/'; + } + + eval(responseText); + } + + /* this function will be called if an HTTP error will be triggered */ + function formFailure(resp) { + showajaxmessage(resp.responseText); + if(jQuery('#submit')) + jQuery('#submit').css('visibility','visible'); + if(jQuery('#cancelbutton')) + jQuery('#cancelbutton').css('visibility','visible'); + if(jQuery('#loading')) + jQuery('#loading').css('visibility','hidden'); + + } + + function showajaxmessage(message) { + var message_html; + + if (message == '') { + NiftyCheck(); + Rounded(\"div#redbox\",\"all\",\"#FFF\",\"#990000\",\"smooth\"); + Rounded(\"td#blackbox\",\"all\",\"#FFF\",\"#000000\",\"smooth\"); + + if(jQuery('#submit')) + jQuery('#submit').css('visibility','visible'); + if(jQuery('#cancelbutton')) + jQuery('#cancelbutton').css('visibility','visible'); + if(jQuery('#loading')) + jQuery('#loading').css('visibility','hidden'); + + return; + } + + message_html = '"; + page_table_start(); + echo << +
    +
    + Welcome to the {$g['product_name']} webInstaller!

    + This utility will install {$g['product_name']} to a hard disk, flash drive, etc. +

    '; + message_html += '
    '; + message_html += ' + +
    '; + message_html += '\"exclamation\"'; + message_html += '<\/td>'; + message_html += '' + message + '<\/b><\/font><\/td>'; + + if(message.indexOf('apply') > 0) { + message_html += ''; + message_html += ''; + message_html += '<\/td>'; + } + + message_html += '<\/tr><\/table><\/div><\/td><\/table>
    '; + jQuery('#inputerrors').html(message_html); + + NiftyCheck(); + Rounded(\"div#redbox\",\"all\",\"#FFF\",\"#990000\",\"smooth\"); + Rounded(\"td#blackbox\",\"all\",\"#FFF\",\"#000000\",\"smooth\"); + + if(jQuery('#submit')) + jQuery('#submit').css('visibility','visible'); + if(jQuery('#cancelbutton')) + jQuery('#cancelbutton').css('visibility','visible'); + if(jQuery('#loading')) + jQuery('#loading').css('visibility','hidden'); + if(jQuery('#inputerrors')) + window.scrollTo(0, 0); + } + "; + + return $headjs; +} + +?> diff --git a/usr/local/www/help.php b/usr/local/www/help.php new file mode 100644 index 000000000..387a14e76 --- /dev/null +++ b/usr/local/www/help.php @@ -0,0 +1,449 @@ + + * + */ + +require_once("guiconfig.inc"); + +/* Define hash of jumpto url maps */ + +/* Links to categories could probably be more specific. */ +$helppages = array( + /* These pages are confirmed to work and have usable content */ + 'index.php' => 'https://doc.pfsense.org/index.php/Dashboard', + 'license.php' => 'https://www.pfsense.org/index.php@option=com_content&task=view&id=42&Itemid=62.html', + 'miniupnpd.xml' => 'https://doc.pfsense.org/index.php/What_is_UPNP%3F', + 'status_upnp.php' => 'https://doc.pfsense.org/index.php/What_is_UPNP%3F', + 'firewall_virtual_ip.php' => 'https://doc.pfsense.org/index.php/What_are_Virtual_IP_Addresses%3F', + 'firewall_virtual_ip_edit.php' => 'https://doc.pfsense.org/index.php/What_are_Virtual_IP_Addresses%3F', + 'firewall_aliases.php' => 'https://doc.pfsense.org/index.php/Aliases', + 'firewall_aliases_edit.php' => 'https://doc.pfsense.org/index.php/Aliases', + 'firewall_aliases_import.php' => 'https://doc.pfsense.org/index.php/Aliases', + 'firewall_nat_out.php' => 'https://doc.pfsense.org/index.php/Outbound_NAT', + 'firewall_nat_out_edit.php' => 'https://doc.pfsense.org/index.php/Outbound_NAT', + 'firewall_rules.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Basics', + 'firewall_rules_edit.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Basics', + 'firewall_schedule.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Schedules', + 'firewall_schedule_edit.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Schedules', + 'interfaces_vlan.php' => 'https://doc.pfsense.org/index.php/VLAN_Trunking', + 'interfaces_vlan_edit.php' => 'https://doc.pfsense.org/index.php/VLAN_Trunking', + 'diag_routes.php' => 'https://doc.pfsense.org/index.php/Viewing_Routes', + 'diag_packet_capture.php' => 'https://doc.pfsense.org/index.php/Sniffers,_Packet_Capture', + 'diag_system_pftop.php' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage%3F#pftop', + 'status_rrd_graph.php' => "https://doc.pfsense.org/index.php/RRD_Graphs", + 'status_rrd_graph_img.php' => "https://doc.pfsense.org/index.php/RRD_Graphs", + 'status_rrd_graph_settings.php' => "https://doc.pfsense.org/index.php/RRD_Graphs", + 'firewall_nat.php' => 'https://doc.pfsense.org/index.php/How_can_I_forward_ports_with_pfSense%3F', + 'firewall_nat_edit.php' => 'https://doc.pfsense.org/index.php/How_can_I_forward_ports_with_pfSense%3F', + 'diag_arp.php' => 'https://doc.pfsense.org/index.php/ARP_Table', + 'diag_backup.php' => 'https://doc.pfsense.org/index.php/Configuration_Backup_and_Restore', + 'diag_confbak.php' => 'https://doc.pfsense.org/index.php/Configuration_History', + 'diag_defaults.php' => 'https://doc.pfsense.org/index.php/Factory_Defaults', + 'firewall_shaper.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide', + 'firewall_shaper_layer7.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide', + 'firewall_shaper_queues.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide', + 'firewall_shaper_vinterface.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide', + 'firewall_shaper_wizards.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide', + 'status_queues.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide', + 'status_dhcp_leases.php' => 'https://doc.pfsense.org/index.php/DHCP_Leases', + 'diag_dns.php' => 'https://doc.pfsense.org/index.php/DNS_Lookup', + 'diag_dump_states.php' => 'https://doc.pfsense.org/index.php/Show_States', + 'diag_resetstate.php' => 'https://doc.pfsense.org/index.php/Reset_States', + 'diag_logs.php' => 'https://doc.pfsense.org/index.php/System_Logs', + 'diag_logs_auth.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Authentication_Logs', + 'diag_logs_dhcp.php' => 'https://doc.pfsense.org/index.php/DHCP_Logs', + 'diag_logs_filter.php' => 'https://doc.pfsense.org/index.php/Firewall_Logs', + 'diag_logs_filter_dynamic.php' => 'https://doc.pfsense.org/index.php/Firewall_Logs', + 'diag_logs_filter_summary.php' => 'https://doc.pfsense.org/index.php/Firewall_Logs', + 'diag_logs_ntpd.php' => 'https://doc.pfsense.org/index.php/NTP_Logs', + 'diag_logs_ppp.php' => 'https://doc.pfsense.org/index.php/PPP_Logs', + 'diag_logs_relayd.php' => 'https://doc.pfsense.org/index.php/Load_Balancer_Logs', + 'diag_logs_settings.php' => 'https://doc.pfsense.org/index.php/Log_Settings', + 'diag_logs_vpn.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Logs', + 'diag_logs_ipsec.php' => 'https://doc.pfsense.org/index.php/IPsec_Logs', + 'diag_logs_openvpn.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Logs', + 'diag_nanobsd.php' => 'https://doc.pfsense.org/index.php/NanoBSD_Diagnostics', + 'diag_patterns.php' => 'https://doc.pfsense.org/index.php/Layer7_Pattern_Diagnostics', + 'diag_ping.php' => 'https://doc.pfsense.org/index.php/Ping_Host', + 'diag_pkglogs.php' => 'https://doc.pfsense.org/index.php/Package_Logs', + 'diag_tables.php' => 'https://doc.pfsense.org/index.php/Tables', + 'diag_system_activity.php' => 'https://doc.pfsense.org/index.php/System_Activity', + 'diag_traceroute.php' => 'https://doc.pfsense.org/index.php/Traceroute', + 'easyrule.php' => 'https://doc.pfsense.org/index.php/Easy_Rule', + 'edit.php' => 'https://doc.pfsense.org/index.php/Edit_File', + 'exec.php' => 'https://doc.pfsense.org/index.php/Execute_Command', + 'firewall_nat_1to1.php' => 'https://doc.pfsense.org/index.php/1:1_NAT', + 'firewall_nat_1to1_edit.php' => 'https://doc.pfsense.org/index.php/1:1_NAT', + 'halt.php' => 'https://doc.pfsense.org/index.php/Halt_System', + 'reboot.php' => 'https://doc.pfsense.org/index.php/Reboot_System', + 'status_filter_reload.php' => 'https://doc.pfsense.org/index.php/Filter_Reload_Status', + 'status_gateway_groups.php' => 'https://doc.pfsense.org/index.php/Gateway_Status', + 'status_gateways.php' => 'https://doc.pfsense.org/index.php/Gateway_Status', + 'status_graph.php' => 'https://doc.pfsense.org/index.php/Traffic_Graph', + 'status_graph_cpu.php' => 'https://doc.pfsense.org/index.php/CPU_Load', + 'status_interfaces.php' => 'https://doc.pfsense.org/index.php/Interface_Status', + 'status_services.php' => 'https://doc.pfsense.org/index.php/Services_Status', + 'status_wireless.php' => 'https://doc.pfsense.org/index.php/Wireless_Status', + 'pkg_mgr.php' => 'https://doc.pfsense.org/index.php/Package_Manager', + 'pkg_mgr_install.php' => 'https://doc.pfsense.org/index.php/Package_Manager', + 'pkg_mgr_installed.php' => 'https://doc.pfsense.org/index.php/Package_Manager', + 'pkg_mgr_settings.php' => 'https://doc.pfsense.org/index.php/Package_Manager_Settings', + 'interfaces.php' => 'https://doc.pfsense.org/index.php/Interface_Settings', + 'interfaces_assign.php' => 'https://doc.pfsense.org/index.php/Assign_Interfaces', + 'interfaces_bridge.php' => 'https://doc.pfsense.org/index.php/Interface_Bridges', + 'interfaces_bridge_edit.php' => 'https://doc.pfsense.org/index.php/Interface_Bridges', + 'interfaces_gif.php' => 'https://doc.pfsense.org/index.php/GIF_Interfaces', + 'interfaces_gif_edit.php' => 'https://doc.pfsense.org/index.php/GIF_Interfaces', + 'interfaces_gre.php' => 'https://doc.pfsense.org/index.php/GRE_Interfaces', + 'interfaces_gre_edit.php' => 'https://doc.pfsense.org/index.php/GRE_Interfaces', + 'interfaces_groups.php' => 'https://doc.pfsense.org/index.php/Interface_Groups', + 'interfaces_groups_edit.php' => 'https://doc.pfsense.org/index.php/Interface_Groups', + 'interfaces_lagg.php' => 'https://doc.pfsense.org/index.php/LAGG_Interfaces', + 'interfaces_lagg_edit.php' => 'https://doc.pfsense.org/index.php/LAGG_Interfaces', + 'interfaces_ppps.php' => 'https://doc.pfsense.org/index.php/PPP_Interfaces', + 'interfaces_ppps_edit.php' => 'https://doc.pfsense.org/index.php/PPP_Interfaces', + 'interfaces_qinq.php' => 'https://doc.pfsense.org/index.php/QinQ_Interfaces', + 'interfaces_qinq_edit.php' => 'https://doc.pfsense.org/index.php/QinQ_Interfaces', + 'services_dyndns.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS', + 'services_dyndns_edit.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS', + 'services_rfc2136.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS', + 'services_rfc2136_edit.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS', + 'services_dhcp.php' => 'https://doc.pfsense.org/index.php/DHCP_Server', + 'services_dhcp_edit.php' => 'https://doc.pfsense.org/index.php/DHCP_Server', + 'services_dhcp_relay.php' => 'https://doc.pfsense.org/index.php/DHCP_Relay', + 'services_dnsmasq.php' => 'https://doc.pfsense.org/index.php/DNS_Forwarder', + 'services_dnsmasq_domainoverride_edit.php' => 'https://doc.pfsense.org/index.php/DNS_Forwarder', + 'services_dnsmasq_edit.php' => 'https://doc.pfsense.org/index.php/DNS_Forwarder', + 'services_igmpproxy.php' => 'https://doc.pfsense.org/index.php/IGMP_Proxy', + 'services_igmpproxy_edit.php' => 'https://doc.pfsense.org/index.php/IGMP_Proxy', + 'services_snmp.php' => 'https://doc.pfsense.org/index.php/SNMP_Daemon', + 'services_wol.php' => 'https://doc.pfsense.org/index.php/Wake_on_LAN', + 'services_wol_edit.php' => 'https://doc.pfsense.org/index.php/Wake_on_LAN', + 'system.php' => 'https://doc.pfsense.org/index.php/General_Setup_(2.0)', + 'system_advanced_admin.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup_(2.0)', + 'system_advanced_firewall.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup_(2.0)#Firewall.2FNAT', + 'system_advanced_misc.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup_(2.0)#Miscellaneous', + 'system_advanced_network.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup_(2.0)#Firewall.2FNAT', + 'system_advanced_notifications.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup_(2.0)#Notifications', + 'system_advanced_sysctl.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup_(2.0)#System_Tunables', + 'system_firmware.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates', + 'system_firmware_auto.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates', + 'system_firmware_check.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates', + 'system_firmware_settings.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates', + 'system_gateway_groups.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings', + 'system_gateway_groups_edit.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings', + 'system_gateways.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings', + 'system_gateways_edit.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings', + 'system_routes.php' => 'https://doc.pfsense.org/index.php/Static_Routes', + 'system_routes_edit.php' => 'https://doc.pfsense.org/index.php/Static_Routes', + 'system_authservers.php' => 'https://doc.pfsense.org/index.php/User_Authentication_Servers', + 'system_groupmanager.php' => 'https://doc.pfsense.org/index.php/Group_Manager', + 'system_groupmanager_addprivs.php' => 'https://doc.pfsense.org/index.php/Group_Manager', + 'system_usermanager.php' => 'https://doc.pfsense.org/index.php/User_Manager', + 'system_usermanager_addprivs.php' => 'https://doc.pfsense.org/index.php/User_Manager', + 'system_usermanager_settings.php' => 'https://doc.pfsense.org/index.php/User_Manager', + 'system_usermanager_settings_ldapacpicker.php' => 'https://doc.pfsense.org/index.php/User_Manager', + 'system_usermanager_settings_test.php' => 'https://doc.pfsense.org/index.php/User_Manager', + 'system_usermanager_passwordmg.php' => 'https://doc.pfsense.org/index.php/User_Manager', + 'system_camanager.php' => 'https://doc.pfsense.org/index.php/Certificate_Management', + 'system_certmanager.php' => 'https://doc.pfsense.org/index.php/Certificate_Management', + 'vpn_l2tp.php' => 'https://doc.pfsense.org/index.php/L2TP_VPN_Settings', + 'vpn_l2tp_users.php' => 'https://doc.pfsense.org/index.php/L2TP_VPN_Settings', + 'vpn_l2tp_users_edit.php' => 'https://doc.pfsense.org/index.php/L2TP_VPN_Settings', + 'vpn_pppoe.php' => 'https://doc.pfsense.org/index.php/PPPoE_Server_Settings', + 'vpn_pppoe_edit.php' => 'https://doc.pfsense.org/index.php/PPPoE_Server_Settings', + 'vpn_pptp.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Settings', + 'vpn_pptp_users.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Settings', + 'vpn_pptp_users_edit.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Settings', + 'diag_ipsec.php' => 'https://doc.pfsense.org/index.php/IPsec_Status', + 'diag_ipsec_sad.php' => 'https://doc.pfsense.org/index.php/IPsec_Status', + 'diag_ipsec_spd.php' => 'https://doc.pfsense.org/index.php/IPsec_Status', + 'vpn_ipsec.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels', + 'vpn_ipsec_mobile.php' => 'https://doc.pfsense.org/index.php/IPsec_Mobile_Clients', + 'vpn_ipsec_phase1.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels', + 'vpn_ipsec_phase2.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels', + 'vpn_ipsec_keys.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels', + 'vpn_ipsec_keys_edit.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels', + 'services_captiveportal.php' => 'https://doc.pfsense.org/index.php/Captive_Portal', + 'services_captiveportal_filemanager.php' => 'https://doc.pfsense.org/index.php/Captive_Portal', + 'services_captiveportal_ip.php' => 'https://doc.pfsense.org/index.php/Captive_Portal', + 'services_captiveportal_ip_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal', + 'services_captiveportal_mac.php' => 'https://doc.pfsense.org/index.php/Captive_Portal', + 'services_captiveportal_mac_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal', + 'services_captiveportal_hostname.php' => 'https://doc.pfsense.org/index.php/Captive_Portal', + 'services_captiveportal_hostname_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal', + 'status_captiveportal.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Status', + 'status_captiveportal_test.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Status', + 'services_captiveportal_vouchers.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers', + 'services_captiveportal_vouchers_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers', + 'status_captiveportal_voucher_rolls.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers', + 'status_captiveportal_vouchers.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers', + 'status_openvpn.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Status', + 'vpn_openvpn_client.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Settings', + 'vpn_openvpn_csc.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Settings', + 'vpn_openvpn_server.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Settings', + 'openvpn-client-export.xml' => 'https://doc.pfsense.org/index.php/OpenVPN_Client_Exporter', /* Package */ + 'vpn_openvpn_export.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Client_Exporter', /* Package */ + 'diag_authentication.php' => 'https://doc.pfsense.org/index.php/User_Authentication_Servers', + 'diag_limiter_info.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide#Display_Pipes', + 'diag_pf_info.php' => 'https://doc.pfsense.org/index.php/Packet_Filter_Information', + 'diag_smart.php' => 'https://doc.pfsense.org/index.php/SMART_Status', + 'diag_states_summary.php' => 'https://doc.pfsense.org/index.php/States_Summary', + 'interfaces_wireless.php' => 'https://doc.pfsense.org/index.php/Wireless_Interfaces', + 'interfaces_wireless_edit.php' => 'https://doc.pfsense.org/index.php/Wireless_Interfaces', + 'system_crlmanager.php' => 'https://doc.pfsense.org/index.php/Certificate_Management', + 'crash_reporter.php' => 'https://doc.pfsense.org/index.php/Unexpected_Reboot_Troubleshooting', + 'diag_dump_states_sources.php' => "https://doc.pfsense.org/index.php/Show_Source_Tracking", + 'diag_logs_gateways.php' => "https://doc.pfsense.org/index.php/Gateway_Logs", + 'diag_logs_resolver.php' => "https://doc.pfsense.org/index.php/Resolver_Logs", + 'diag_logs_routing.php' => "https://doc.pfsense.org/index.php/Routing_Logs", + 'diag_logs_wireless.php' => "https://doc.pfsense.org/index.php/Wireless_Logs", + 'diag_ndp.php' => "https://doc.pfsense.org/index.php/NDP_Table", + 'diag_sockets.php' => "https://doc.pfsense.org/index.php/Diag_Sockets", + 'diag_testport.php' => "https://doc.pfsense.org/index.php/Test_Port", + 'firewall_nat_npt.php' => "https://doc.pfsense.org/index.php/NPt", + 'firewall_nat_npt_edit.php' => "https://doc.pfsense.org/index.php/NPt", + 'load_balancer_setting.php' => "https://doc.pfsense.org/index.php/Category:Load_balancing", + 'services_captiveportal_zones.php' => "https://doc.pfsense.org/index.php/Captive_Portal", + 'services_captiveportal_zones_edit.php' => "https://doc.pfsense.org/index.php/Captive_Portal", + 'status_captiveportal_expire.php' => "https://doc.pfsense.org/index.php/Captive_Portal", + 'services_ntpd.php' => "https://doc.pfsense.org/index.php/NTP_Server", + 'status_ntpd.php' => "https://doc.pfsense.org/index.php/NTP_Server", + 'system_firmware_restorefullbackup.php' => "https://doc.pfsense.org/index.php/Full_Backup", + + /* New Files for 2.1 that still need better pages/links. */ + 'services_dhcpv6.php' => "https://doc.pfsense.org/index.php/Category:IPv6", + 'services_dhcpv6_edit.php' => "https://doc.pfsense.org/index.php/Category:IPv6", + 'services_dhcpv6_relay.php' => "https://doc.pfsense.org/index.php/Category:IPv6", + 'status_dhcpv6_leases.php' => "https://doc.pfsense.org/index.php/Category:IPv6", + 'services_router_advertisements.php' => "https://doc.pfsense.org/index.php/Category:IPv6", + + /* Below here are pages that may need some cleanup or have not been fully looked at yet */ + + 'carp_status.php' => 'https://doc.pfsense.org/index.php/Category:CARP', + 'system_hasync.php' => 'https://doc.pfsense.org/index.php/Category:CARP', /* FIXME? */ + + 'load_balancer_monitor.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + 'load_balancer_monitor_edit.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + 'load_balancer_pool.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + 'load_balancer_pool_edit.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + 'load_balancer_relay_action.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + 'load_balancer_relay_action_edit.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + 'load_balancer_relay_protocol.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + 'load_balancer_relay_protocol_edit.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + 'load_balancer_virtual_server.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + 'load_balancer_virtual_server_edit.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + 'status_lb_pool.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + 'status_lb_vs.php' => 'https://doc.pfsense.org/index.php/Category:Load_balancing', + + + /* From here down are packages. Not checking these as strictly, + any information is better than nothing. */ + 'olsrd.xml' => 'https://doc.pfsense.org/index.php/OLSR_Daemon', + 'routed.xml' => 'https://doc.pfsense.org/index.php/Routing_Information_Protocol_(RIP)', # RIP + 'autoconfigbackup.xml' => 'https://doc.pfsense.org/index.php/AutoConfigBackup', + 'phpservice.xml' => 'https://doc.pfsense.org/index.php/PHPService', + 'anyterm.xml' => 'https://doc.pfsense.org/index.php/AnyTerm_package', + 'avahi.xml' => 'https://doc.pfsense.org/index.php/Avahi_package', + 'squid.xml' => 'https://doc.pfsense.org/index.php/Category:Squid', + 'squid_auth.xml' => 'https://doc.pfsense.org/index.php/Category:Squid', + 'squid_cache.xml' => 'https://doc.pfsense.org/index.php/Category:Squid', + 'squid_extauth.xml' => 'https://doc.pfsense.org/index.php/Category:Squid', + 'squid_nac.xml' => 'https://doc.pfsense.org/index.php/Category:Squid', + 'squid_ng.xml' => 'https://doc.pfsense.org/index.php/Category:Squid', + 'squid_traffic.xml' => 'https://doc.pfsense.org/index.php/Category:Squid', + 'squid_upstream.xml' => 'https://doc.pfsense.org/index.php/Category:Squid', + 'squid_users.xml' => 'https://doc.pfsense.org/index.php/Category:Squid', + 'squidGuard.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package', + 'squidguard.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package', + 'squidguard_acl.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package', + 'squidguard_default.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package', + 'squidguard_dest.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package', + 'squidguard_log.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package', + 'squidguard_rewr.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package', + 'squidguard_time.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package', + 'bandwidthd.xml' => "https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage%3F", + 'pfflowd.xml' => "https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage%3F", + 'darkstat.xml' => "https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage%3F", + 'rate.xml' => "https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage%3F", + 'ntop.xml' => "https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage%3F", + 'vnstat.xml' => "https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage%3F", + 'widentd.xml' => 'https://doc.pfsense.org/index.php/Widentd_package', + 'tinydns.xml' => 'https://doc.pfsense.org/index.php/Tinydns_package', + 'tinydns_domains.xml' => 'https://doc.pfsense.org/index.php/Tinydns_package', + 'tinydns_sync.xml' => 'https://doc.pfsense.org/index.php/Tinydns_package', + 'blinkled.xml' => 'https://doc.pfsense.org/index.php/BlinkLED_Package', + 'freeswitch.xml' => 'https://doc.pfsense.org/index.php/FreeSWITCH', + 'freeswitch_modules.xml' => 'https://doc.pfsense.org/index.php/FreeSWITCH', + 'dialplan.default.xml' => 'https://doc.pfsense.org/index.php/FreeSWITCH', + 'dialplan.public.xml' => 'https://doc.pfsense.org/index.php/FreeSWITCH', + 'havp.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning', + 'havp_avset.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning', + 'havp_blacklist.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning', + 'havp_fscan.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning', + 'havp_trans_exclude.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning', + 'havp_whitelist.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning', + 'snort.xml' => 'https://doc.pfsense.org/index.php/Setup_Snort_Package', + 'snort/snort_interfaces.php' => 'https://doc.pfsense.org/index.php/snort_interfaces', + 'snort/snort_interfaces_global.php' => 'https://doc.pfsense.org/index.php/snort_interfaces_global', + 'snort/snort_download_updates.php' => 'https://doc.pfsense.org/index.php/snort_updates', + 'snort/snort_alerts.php' => 'https://doc.pfsense.org/index.php/snort_alerts', + 'snort/snort_blocked.php' => 'https://doc.pfsense.org/index.php/snort_blocked_hosts', + 'snort/snort_passlist.php' => 'https://doc.pfsense.org/index.php/snort_passlist', + 'snort/snort_passlist_edit.php' => 'https://doc.pfsense.org/index.php/snort_passlist', + 'snort/snort_interfaces_suppress.php' => 'https://doc.pfsense.org/index.php/Snort_suppress_list', + 'snort/snort_interfaces_suppress_edit.php' => 'https://doc.pfsense.org/index.php/Snort_suppress_list', + 'snort/snort_interfaces_edit.php' => 'https://doc.pfsense.org/index.php/Snort_interfaces_edit', + 'snort/snort_rulesets.php' => 'https://doc.pfsense.org/index.php/Snort_rulesets', + 'snort/snort_rules.php' => 'https://doc.pfsense.org/index.php/Snort_rules', + 'snort/snort_define_servers.php' => 'https://doc.pfsense.org/index.php/Snort_define_servers', + 'snort/snort_preprocessors.php' => 'https://doc.pfsense.org/index.php/Snort_preprocessors', + 'snort/snort_barnyard.php' => 'https://doc.pfsense.org/index.php/Snort_barnyard2', + 'snort/snort_ip_reputation.php' => 'https://doc.pfsense.org/index.php/Snort_ip_reputation_preprocessor', + 'snort/snort_ip_list_mgmt.php' => 'https://doc.pfsense.org/index.php/Snort_ip_list_mgmt', + 'snort/snort_sync.xml' => 'https://doc.pfsense.org/index.php/Snort_sync', + 'stunnel.xml' => 'https://doc.pfsense.org/index.php/Stunnel_package', + 'stunnel_certs.xml' => 'https://doc.pfsense.org/index.php/Stunnel_package', + 'openbgpd.xml' => 'https://doc.pfsense.org/index.php/OpenBGPD_package', + 'openbgpd_groups.xml' => 'https://doc.pfsense.org/index.php/OpenBGPD_package', + 'openbgpd_neighbors.xml' => 'https://doc.pfsense.org/index.php/OpenBGPD_package', + 'iperf.xml' => 'https://doc.pfsense.org/index.php/Iperf_package', + 'iperfserver.xml' => 'https://doc.pfsense.org/index.php/Iperf_package', + 'jail_template.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package', + 'jailctl.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package', + 'jailctl.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package', + 'jailctl_defaults.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package', + 'jailctl_settings.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package', + 'siproxd.xml' => 'https://doc.pfsense.org/index.php/Siproxd_package', + 'siproxdusers.xml' => 'https://doc.pfsense.org/index.php/Siproxd_package', + 'open-vm-tools.xml' => 'https://doc.pfsense.org/index.php/Open_VM_Tools_package', + 'arping.xml' => 'https://doc.pfsense.org/index.php/Arping_package', + 'unbound.xml' => 'https://doc.pfsense.org/index.php/Unbound_package', + +); + +/* +Filename list (2.0 box as of 2009-11-15), entries with help maps should be +removed. Also, files which cannot normally be accessed by a user can +be removed.(e.g. xmlrpc.php) + +Below this is a list of .xml files from built-in and add-on packages + + + +Package .xml files (some may not be needed) + 'apache_mod_security.xml' => '', + 'apache_mod_security_settings.xml' => '', + 'arpwatch.xml' => '', + 'assp.xml' => '', + 'backup.xml' => '', + 'bsdstats.xml' => '', + 'cron.xml' => '', + 'ddns.xml' => '', + 'denyhosts.xml' => '', + 'dnsblacklist.xml' => '', + 'dyntables.xml' => '', + 'fit123.xml' => '', + 'freeradius.xml' => '', + 'freeradiusclients.xml' => '', + 'freeradiussettings.xml' => '', + 'frickin.xml' => '', + 'haproxy.xml' => '', + 'hula.xml' => '', + 'ifdepd.xml' => '', + 'ifstated.xml' => '', + 'igmpproxy.xml' => '', + 'imspector.xml' => '', + 'lcdproc.xml' => '', + 'lcdproc_screens.xml' => '', + 'lightsquid.xml' => '', + 'messages_de.xml' => '', + 'messages_en.xml' => '', + 'mtr-nox11.xml' => '', + 'netio-newpkg.xml' => '', + 'netio.xml' => '', + 'netioserver-newpkg.xml' => '', + 'netioserver.xml' => '', + 'new_zone_wizard.xml' => '', + 'nmap.xml' => '', + 'notes.xml' => '', + 'nrpe2.xml' => '', + 'nut.xml' => '', + 'per-user-bandwidth-distribution.xml' => '', + 'pfstat.xml' => '', + 'phpmrss.xml' => '', + 'phpsysinfo.xml' => '', + 'powerdns.xml' => '', + 'pure-ftpd.xml' => '', + 'pure-ftpdsettings.xml' => '', + 'quagga.xml' => '', + 'routed.xml' => '', + 'shellcmd.xml' => '', + 'spamd.xml' => '', + 'spamd_outlook.xml' => '', + 'spamd_settings.xml' => '', + 'spamd_whitelist.xml' => '', + 'sshterm.xml' => '', + 'tftp.xml' => '', + 'upclient.xml' => '', + 'viralator.xml' => '', + 'zabbix-agent.xml' => '', + + */ + +$pagename = ""; +/* Check for parameter "page". */ +if ($_GET && isset($_GET['page'])) { + $pagename = $_GET['page']; +} + +/* If "page" is not found, check referring URL */ +if (empty($pagename)) { + /* Attempt to parse out filename */ + $uri_split = ""; + preg_match("/\/(.*)\?(.*)/", $_SERVER["HTTP_REFERER"], $uri_split); + + /* If there was no match, there were no parameters, just grab the filename + Otherwise, use the matched filename from above. */ + if (empty($uri_split[0])) { + $pagename = ltrim(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_PATH), '/'); + } else { + $pagename = $uri_split[1]; + } + + /* If the page name is still empty, the user must have requested / (index.php) */ + if (empty($pagename)) { + $pagename = "index.php"; + } + + /* If the filename is pkg_edit.php or wizard.php, reparse looking + for the .xml filename */ + if (($pagename == "pkg.php") || ($pagename == "pkg_edit.php") || ($pagename == "wizard.php")) { + $param_split = explode('&', $uri_split[2]); + foreach ($param_split as $param) { + if (substr($param, 0, 4) == "xml=") { + $xmlfile = explode('=', $param); + $pagename = $xmlfile[1]; + } + } + } +} + +/* Using the derived page name, attempt to find in the URL mapping hash */ +if (array_key_exists($pagename, $helppages)) { + $helppage = $helppages[$pagename]; +} + +/* If we haven't determined a proper page, use a generic help page + stating that a given page does not have help yet. */ + +if (empty($helppage)) { + $helppage = "https://doc.pfsense.org/index.php/No_Help_Found"; + +} + +/* Redirect to help page. */ +header("Location: {$helppage}"); + +?> diff --git a/usr/local/www/ifstats.php b/usr/local/www/ifstats.php new file mode 100644 index 000000000..7be2ace35 --- /dev/null +++ b/usr/local/www/ifstats.php @@ -0,0 +1,65 @@ + diff --git a/usr/local/www/includes/functions.inc.php b/usr/local/www/includes/functions.inc.php new file mode 100644 index 000000000..1c1fa9f01 --- /dev/null +++ b/usr/local/www/includes/functions.inc.php @@ -0,0 +1,349 @@ + $gw) { + if(!$isfirst) + $data .= ","; + $isfirst = false; + $data .= $gw['name'] . ","; + if ($gateways_status[$gname]) { + $data .= lookup_gateway_ip_by_name($gname) . ","; + $gws = $gateways_status[$gname]; + switch(strtolower($gws['status'])) { + case "none": + $online = "Online"; + $bgcolor = "#90EE90"; // lightgreen + break; + case "down": + $online = "Offline"; + $bgcolor = "#F08080"; // lightcoral + break; + case "delay": + $online = "Latency"; + $bgcolor = "#F0E68C"; // khaki + break; + case "loss": + $online = "Packetloss"; + $bgcolor = "#F0E68C"; // khaki + break; + default: + $online = "Pending"; + break; + } + } else { + $data .= "~,"; + $gws['delay'] = "~"; + $gws['loss'] = "~"; + $online = "Unknown"; + $bgcolor = "#ADD8E6"; // lightblue + } + $data .= ($online == "Pending") ? "{$online},{$online}," : "{$gws['delay']},{$gws['loss']},"; + $data .= "
     $online 
    "; + } + return $data; +} + +function get_uptime() { + $uptime = get_uptime_sec(); + + if(intval($uptime) == 0) + return; + + $updays = (int)($uptime / 86400); + $uptime %= 86400; + $uphours = (int)($uptime / 3600); + $uptime %= 3600; + $upmins = (int)($uptime / 60); + $uptime %= 60; + $upsecs = (int)($uptime); + + $uptimestr = ""; + if ($updays > 1) + $uptimestr .= "$updays Days "; + else if ($updays > 0) + $uptimestr .= "1 Day "; + + if ($uphours > 1) + $hours = "s"; + + if ($upmins > 1) + $minutes = "s"; + + if ($upmins > 1) + $seconds = "s"; + + $uptimestr .= sprintf("%02d Hour$hours %02d Minute$minutes %02d Second$seconds", $uphours, $upmins, $upsecs); + return $uptimestr; +} + +/* Calculates non-idle CPU time and returns as a percentage */ +function cpu_usage() { + $duration = 1; + $diff = array('user', 'nice', 'sys', 'intr', 'idle'); + $cpuTicks = array_combine($diff, explode(" ", get_single_sysctl('kern.cp_time'))); + sleep($duration); + $cpuTicks2 = array_combine($diff, explode(" ", get_single_sysctl('kern.cp_time'))); + + $totalStart = array_sum($cpuTicks); + $totalEnd = array_sum($cpuTicks2); + + // Something wrapped ?!?! + if ($totalEnd <= $totalStart) + return 0; + + // Calculate total cycles used + $totalUsed = ($totalEnd - $totalStart) - ($cpuTicks2['idle'] - $cpuTicks['idle']); + + // Calculate the percentage used + $cpuUsage = floor(100 * ($totalUsed / ($totalEnd - $totalStart))); + + return $cpuUsage; +} + +function get_pfstate($percent=false) { + global $config; + $matches = ""; + if (isset($config['system']['maximumstates']) and $config['system']['maximumstates'] > 0) + $maxstates="{$config['system']['maximumstates']}"; + else + $maxstates=pfsense_default_state_size(); + $curentries = `/sbin/pfctl -si |grep current`; + if (preg_match("/([0-9]+)/", $curentries, $matches)) { + $curentries = $matches[1]; + } + if (!is_numeric($curentries)) + $curentries = 0; + if ($percent) + if (intval($maxstates) > 0) + return round(($curentries / $maxstates) * 100, 0); + else + return "NA"; + else + return $curentries . "/" . $maxstates; +} + +function has_temp() { + /* no known temp monitors available at present */ + + /* should only reach here if there is no hardware monitor */ + return false; +} + +function get_hwtype() { + return; +} + +function get_mbuf($percent=false) { + $mbufs_output=trim(`/usr/bin/netstat -mb | /usr/bin/grep "mbuf clusters in use" | /usr/bin/awk '{ print $1 }'`); + list( $mbufs_current, $mbufs_cache, $mbufs_total, $mbufs_max ) = explode( "/", $mbufs_output); + if ($percent) + if ($mbufs_max > 0) + return round(($mbufs_total / $mbufs_max) * 100, 0); + else + return "NA"; + else + return "{$mbufs_total}/{$mbufs_max}"; +} + +function get_temp() { + $temp_out = get_single_sysctl("dev.cpu.0.temperature"); + if ($temp_out == "") + $temp_out = get_single_sysctl("hw.acpi.thermal.tz0.temperature"); + + // Remove 'C' from the end + return rtrim($temp_out, 'C'); +} + +/* Get mounted filesystems and usage. Do not display entries for virtual filesystems (e.g. devfs, nullfs, unionfs) */ +function get_mounted_filesystems() { + $mout = ""; + $filesystems = array(); + exec("/bin/df -Tht ufs,zfs,cd9660 | /usr/bin/awk '{print $1, $2, $3, $6, $7;}'", $mout); + + /* Get rid of the header */ + array_shift($mout); + foreach ($mout as $fs) { + $f = array(); + list($f['device'], $f['type'], $f['total_size'], $f['percent_used'], $f['mountpoint']) = explode(' ', $fs); + + /* We dont' want the trailing % sign. */ + $f['percent_used'] = trim($f['percent_used'], '%'); + + $filesystems[] = $f; + } + return $filesystems; +} + +function disk_usage($slice = '/') { + $dfout = ""; + exec("/bin/df -h {$slice} | /usr/bin/tail -n 1 | /usr/bin/awk '{ print $5 }' | /usr/bin/cut -d '%' -f 1", $dfout); + $diskusage = trim($dfout[0]); + + return $diskusage; +} + +function swap_usage() { + exec("/usr/sbin/swapinfo", $swap_info); + $swap_used = ""; + foreach ($swap_info as $line) + if (preg_match('/(\d+)%$/', $line, $matches)) { + $swap_used = $matches[1]; + break; + } + + return $swap_used; +} + +function mem_usage() { + $totalMem = get_single_sysctl("vm.stats.vm.v_page_count"); + if ($totalMem > 0) { + $inactiveMem = get_single_sysctl("vm.stats.vm.v_inactive_count"); + $cachedMem = get_single_sysctl("vm.stats.vm.v_cache_count"); + $freeMem = get_single_sysctl("vm.stats.vm.v_free_count"); + $usedMem = $totalMem - ($inactiveMem + $cachedMem + $freeMem); + $memUsage = round(($usedMem * 100) / $totalMem, 0); + } else + $memUsage = "NA"; + + return $memUsage; +} + +function update_date_time() { + $datetime = date("D M j G:i:s T Y"); + return $datetime; +} + +function get_cpufreq() { + $cpufreqs = ""; + $out = ""; + $cpufreqs = explode(" ", get_single_sysctl('dev.cpu.0.freq_levels')); + $maxfreq = explode("/", $cpufreqs[0]); + $maxfreq = $maxfreq[0]; + $curfreq = ""; + $curfreq = get_single_sysctl('dev.cpu.0.freq'); + if (($curfreq > 0) && ($curfreq != $maxfreq)) + $out = "Current: {$curfreq} MHz, Max: {$maxfreq} MHz"; + return $out; +} + +function get_cpu_count($show_detail = false) { + $cpucount = get_single_sysctl('kern.smp.cpus'); + + if ($show_detail) { + $cpudetail = ""; + exec("/usr/bin/grep 'SMP.*package.*core' /var/log/dmesg.boot | /usr/bin/cut -f2- -d' '", $cpudetail); + $cpucount = $cpudetail[0]; + } + return $cpucount; +} + +function get_load_average() { + $load_average = ""; + exec("/usr/bin/uptime | /usr/bin/sed 's/^.*: //'", $load_average); + return $load_average[0]; +} + +function get_interfacestats() { + global $config; + //build interface list for widget use + $ifdescrs = get_configured_interface_list(); + + $array_in_packets = array(); + $array_out_packets = array(); + $array_in_bytes = array(); + $array_out_bytes = array(); + $array_in_errors = array(); + $array_out_errors = array(); + $array_collisions = array(); + $array_interrupt = array(); + $new_data = ""; + + //build data arrays + foreach ($ifdescrs as $ifdescr => $ifname){ + $ifinfo = get_interface_info($ifdescr); + $new_data .= "{$ifinfo['inpkts']},"; + $new_data .= "{$ifinfo['outpkts']},"; + $new_data .= format_bytes($ifinfo['inbytes']) . ","; + $new_data .= format_bytes($ifinfo['outbytes']) . ","; + if (isset($ifinfo['inerrs'])){ + $new_data .= "{$ifinfo['inerrs']},"; + $new_data .= "{$ifinfo['outerrs']},"; + } + else{ + $new_data .= "0,"; + $new_data .= "0,"; + } + if (isset($ifinfo['collisions'])) + $new_data .= htmlspecialchars($ifinfo['collisions']) . ","; + else + $new_data .= "0,"; + }//end for + + return $new_data; +} + +function get_interfacestatus() { + $data = ""; + global $config; + + //build interface list for widget use + $ifdescrs = get_configured_interface_with_descr(); + + foreach ($ifdescrs as $ifdescr => $ifname){ + $ifinfo = get_interface_info($ifdescr); + $data .= $ifname . ","; + if($ifinfo['status'] == "up" || $ifinfo['status'] == "associated") { + $data .= "up"; + }else if ($ifinfo['status'] == "no carrier") { + $data .= "down"; + }else if ($ifinfo['status'] == "down") { + $data .= "block"; + } + $data .= ","; + if ($ifinfo['ipaddr']) + $data .= htmlspecialchars($ifinfo['ipaddr']); + $data .= ","; + if ($ifinfo['status'] != "down") + $data .= htmlspecialchars($ifinfo['media']); + + $data .= "~"; + + } + return $data; +} + +?> diff --git a/usr/local/www/index.php b/usr/local/www/index.php new file mode 100644 index 000000000..4fdcca6d1 --- /dev/null +++ b/usr/local/www/index.php @@ -0,0 +1,783 @@ +. + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-system-login/logout +##|*NAME=System: Login / Logout page / Dashboard +##|*DESCR=Allow access to the 'System: Login / Logout' page and Dashboard. +##|*MATCH=index.php* +##|-PRIV + +// Turn on buffering to speed up rendering +ini_set('output_buffering','true'); + +// Start buffering with a cache size of 100000 +ob_start(null, "1000"); + + +## Load Essential Includes +require_once('functions.inc'); +require_once('guiconfig.inc'); +require_once('notices.inc'); +require_once("pkg-utils.inc"); + +if(isset($_REQUEST['closenotice'])){ + close_notice($_REQUEST['closenotice']); + echo get_menu_messages(); + exit; +} +if ($_REQUEST['act'] == 'alias_info_popup' && !preg_match("/\D/",$_REQUEST['aliasid'])){ + alias_info_popup($_REQUEST['aliasid']); + exit; +} + +if($g['disablecrashreporter'] != true) { + // Check to see if we have a crash report + $x = 0; + if(file_exists("/tmp/PHP_errors.log")) { + $total = `/usr/bin/grep -vi warning /tmp/PHP_errors.log | /usr/bin/wc -l | /usr/bin/awk '{ print $1 }'`; + if($total > 0) + $x++; + } + $crash = glob("/var/crash/*"); + $skip_files = array(".", "..", "minfree", ""); + if(is_array($crash)) { + foreach($crash as $c) { + if (!in_array(basename($c), $skip_files)) + $x++; + } + if($x > 0) + $savemsg = "{$g['product_name']} has detected a crash report or programming bug. Click here for more information."; + } +} + +##build list of widgets +$directory = "/usr/local/www/widgets/widgets/"; +$dirhandle = opendir($directory); +$filename = ""; +$widgetnames = array(); +$widgetfiles = array(); +$widgetlist = array(); + +while (false !== ($filename = readdir($dirhandle))) { + $periodpos = strpos($filename, "."); + /* Ignore files not ending in .php */ + if (substr($filename, -4, 4) != ".php") + continue; + $widgetname = substr($filename, 0, $periodpos); + $widgetnames[] = $widgetname; + if ($widgetname != "system_information") + $widgetfiles[] = $filename; +} + +##sort widgets alphabetically +sort($widgetfiles); + +##insert the system information widget as first, so as to be displayed first +array_unshift($widgetfiles, "system_information.widget.php"); + +##if no config entry found, initialize config entry +if (!is_array($config['widgets'])) { + $config['widgets'] = array(); +} + + if ($_POST && $_POST['submit']) { + $config['widgets']['sequence'] = $_POST['sequence']; + + foreach ($widgetnames as $widget){ + if ($_POST[$widget . '-config']){ + $config['widgets'][$widget . '-config'] = $_POST[$widget . '-config']; + } + } + + write_config(gettext("Widget configuration has been changed.")); + header("Location: index.php"); + exit; + } + + ## Load Functions Files + require_once('includes/functions.inc.php'); + + ## Check to see if we have a swap space, + ## if true, display, if false, hide it ... + if(file_exists("/usr/sbin/swapinfo")) { + $swapinfo = `/usr/sbin/swapinfo`; + if(stristr($swapinfo,'%') == true) $showswap=true; + } + + ## User recently restored his config. + ## If packages are installed lets resync + if(file_exists('/conf/needs_package_sync')) { + if($config['installedpackages'] <> '' && is_array($config['installedpackages']['package'])) { + if($g['platform'] == "pfSense" || $g['platform'] == "nanobsd") { + header('Location: pkg_mgr_install.php?mode=reinstallall'); + exit; + } + } else { + conf_mount_rw(); + @unlink('/conf/needs_package_sync'); + conf_mount_ro(); + } + } + + ## If it is the first time webConfigurator has been + ## accessed since initial install show this stuff. + if(file_exists('/conf/trigger_initial_wizard')) { + echo << + + + {$g['product_name']}.localdomain - {$g['product_name']} first time setup + + + + + +EOF; + + echo "\n"; + + if(file_exists("/usr/local/www/themes/{$g['theme']}/wizard.css")) + echo "\n"; + else + echo ""; + + echo "
    \n"; + echo "
    \n"; + echo "\"logo\"

    \n"; + echo "

    \n"; + echo sprintf(gettext("Welcome to %s!\n"),$g['product_name']) . "

    "; + echo gettext("One moment while we start the initial setup wizard.") . "

    \n"; + echo gettext("Embedded platform users: Please be patient, the wizard takes a little longer to run than the normal GUI.") . "

    \n"; + echo sprintf(gettext("To bypass the wizard, click on the %s logo on the initial page."),$g['product_name']) . "\n"; + echo "

    \n"; + echo "\n"; + echo "\n"; + exit; + } + + + ## Find out whether there's hardware encryption or not + unset($hwcrypto); + $fd = @fopen("{$g['varlog_path']}/dmesg.boot", "r"); + if ($fd) { + while (!feof($fd)) { + $dmesgl = fgets($fd); + if (preg_match("/^hifn.: (.*?),/", $dmesgl, $matches) + or preg_match("/.*(VIA Padlock)/", $dmesgl, $matches) + or preg_match("/^safe.: (\w.*)/", $dmesgl, $matches) + or preg_match("/^ubsec.: (.*?),/", $dmesgl, $matches) + or preg_match("/^padlock.: <(.*?)>,/", $dmesgl, $matches) + or preg_match("/^glxsb.: (.*?),/", $dmesgl, $matches) + or preg_match("/^aesni.: (.*?),/", $dmesgl, $matches)) { + $hwcrypto = $matches[1]; + break; + } + } + fclose($fd); + } + +##build widget saved list information +if ($config['widgets'] && $config['widgets']['sequence'] != "") { + $pconfig['sequence'] = $config['widgets']['sequence']; + + $widgetlist = $pconfig['sequence']; + $colpos = array(); + $savedwidgetfiles = array(); + $widgetname = ""; + $widgetlist = explode(",",$widgetlist); + + ##read the widget position and display information + foreach ($widgetlist as $widget){ + $dashpos = strpos($widget, "-"); + $widgetname = substr($widget, 0, $dashpos); + $colposition = strpos($widget, ":"); + $displayposition = strrpos($widget, ":"); + $colpos[] = substr($widget,$colposition+1, $displayposition - $colposition-1); + $displayarray[] = substr($widget,$displayposition+1); + $savedwidgetfiles[] = $widgetname . ".widget.php"; + } + + ##add widgets that may not be in the saved configuration, in case they are to be displayed later + foreach ($widgetfiles as $defaultwidgets){ + if (!in_array($defaultwidgets, $savedwidgetfiles)){ + $savedwidgetfiles[] = $defaultwidgets; + } + } + + ##find custom configurations of a particular widget and load its info to $pconfig + foreach ($widgetnames as $widget){ + if ($config['widgets'][$widget . '-config']){ + $pconfig[$widget . '-config'] = $config['widgets'][$widget . '-config']; + } + } + + $widgetlist = $savedwidgetfiles; +} else{ + // no saved widget sequence found, build default list. + $widgetlist = $widgetfiles; +} + +##build list of php include files +$phpincludefiles = array(); +$directory = "/usr/local/www/widgets/include/"; +$dirhandle = opendir($directory); +$filename = ""; +while (false !== ($filename = readdir($dirhandle))) { + $phpincludefiles[] = $filename; +} +foreach($phpincludefiles as $includename) { + if(!stristr($includename, ".inc")) + continue; + include($directory . $includename); +} + +##begin AJAX +$jscriptstr = << +// + +EOD; + + +## Set Page Title and Include Header +$pgtitle = array(gettext("Status: Dashboard")); +include("head.inc"); + +?> + + + + + +\"big

    "; + +/* Print package server mismatch warning. See https://redmine.pfsense.org/issues/484 */ +if (!verify_all_package_servers()) + print_info_box(package_server_mismatch_message()); + +if ($savemsg) + print_info_box($savemsg); + +pfSense_handle_custom_code("/usr/local/pkg/dashboard/pre_dashboard"); + +?> + + + + + + +<?=gettext(" style="cursor: pointer;" onmouseup="domTT_activate(this, event, 'content', document.getElementById('content1'), 'type', 'velcro', 'delay', 0, 'fade', 'both', 'fadeMax', 100, 'styleClass', 'niceTitle');" /> + +<?=gettext(" style="cursor: help;" onmouseup="hideAllWidgets();domTT_activate(this, event, 'content', document.getElementById('welcome-container'), 'type', 'sticky', 'closeLink', '','delay', 0, 'fade', 'both', 'fadeMax', 100, 'styleClass', 'niceTitle');" /> + + +    + " /> +
    + +
    + +
    + +
    +
    + = $halftotal && $printed == false){ + $printed = true; + ?> +
    +
    + +
    +
    + + + +
    +
    + +
    +
    + + + + + + + + + +
    +
    + +
    open
    +
    minimize
    +
    close
    +
    +
    +
    + +
    +
    + <?=gettext(..." /> +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + + + +\n"; + } +?> + + + diff --git a/usr/local/www/installer/index.php b/usr/local/www/installer/index.php new file mode 100644 index 000000000..9c97c41b0 --- /dev/null +++ b/usr/local/www/installer/index.php @@ -0,0 +1,5 @@ + diff --git a/usr/local/www/installer/installer.php b/usr/local/www/installer/installer.php new file mode 100644 index 000000000..b2ba3c45c --- /dev/null +++ b/usr/local/www/installer/installer.php @@ -0,0 +1,1211 @@ + + 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. +*/ + +$nocsrf = true; + +require("globals.inc"); +require("guiconfig.inc"); + +define('PC_SYSINSTALL', '/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh'); + +if($g['platform'] == "pfSense" or $g['platform'] == "nanobsd") { + header("Location: /"); + exit; +} + +// Main switch dispatcher +switch ($_REQUEST['state']) { + case "update_installer_status": + update_installer_status(); + exit; + case "custominstall": + installer_custom(); + exit; + case "begin_install": + installing_gui(); + begin_install(); + exit; + case "verify_before_install": + verify_before_install(); + exit; + case "easy_install_ufs": + easy_install("UFS+S"); + exit; + case "easy_install_ufs": + easy_install("ZFS"); + exit; + + default: + installer_main(); +} + +function easy_install($fstype = "UFS+S") { + // Calculate swap and disk sizes + $disks = installer_find_all_disks(); + $memory = get_memory(); + $swap_size = $memory[0] * 2; + $first_disk = trim(installer_find_first_disk()); + $disk_info = pcsysinstall_get_disk_info($first_disk); + $size = $disk_info['size']; + $first_disk_size = $size - $swap_size; + $disk_setup = array(); + $tmp_array = array(); + // Build the disk layout for / + $tmp_array['disk'] = $first_disk; + $tmp_array['size'] = $first_disk_size; + $tmp_array['mountpoint'] = "/"; + $tmp_array['fstype'] = $fstype; + $disk_setup[] = $tmp_array; + unset($tmp_array); + $tmp_array = array(); + // Build the disk layout for SWAP + $tmp_array['disk'] = $first_disk; + $tmp_array['size'] = $swap_size; + $tmp_array['mountpoint'] = "none"; + $tmp_array['fstype'] = "SWAP"; + $disk_setup[] = $tmp_array; + unset($tmp_array); + $bootmanager = "bsd"; + file_put_contents("/tmp/webInstaller_disk_layout.txt", serialize($disk_setup)); + file_put_contents("/tmp/webInstaller_disk_bootmanager.txt", serialize($bootmanager)); + header("Location: installer.php?state=verify_before_install"); + exit; +} + +function write_out_pc_sysinstaller_config($disks, $bootmanager = "bsd") { + $diskareas = ""; + $fd = fopen("/usr/sbin/pc-sysinstall/examples/pfSense-install.cfg", "w"); + if(!$fd) + return true; + if($bootmanager == "") + $bootmanager = "none"; + // Yes, -1. We ++ early in loop. + $numdisks = -1; + $lastdisk = ""; + $diskdefs = ""; + // Run through the disks and create the conf areas for pc-sysinstaller + foreach($disks as $disksa) { + $fstype = $disksa['fstype']; + $size = $disksa['size']; + $mountpoint = $disksa['mountpoint']; + $disk = $disksa['disk']; + if($disk <> $lastdisk) { + $lastdisk = $disk; + $numdisks++; + $diskdefs .= "# disk {$disk}\n"; + $diskdefs .= "disk{$numdisks}={$disk}\n"; + $diskdefs .= "partition=all\n"; + $diskdefs .= "bootManager={$bootmanager}\n"; + $diskdefs .= "commitDiskPart\n\n"; + } + $diskareas .= "disk{$numdisks}-part={$fstype} {$size} {$mountpoint} \n"; + if($encpass) + $diskareas .= "encpass={$encpass}\n"; + } + + $config = <</dev/null\n"); + fwrite($fd, "/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh -c /usr/sbin/pc-sysinstall/examples/pfSense-install.cfg \n"); + fwrite($fd, "/bin/chmod a+rx /usr/local/bin/after_installation_routines.sh\n"); + fwrite($fd, "cd / && /usr/local/bin/after_installation_routines.sh\n"); + fwrite($fd, "/bin/mkdir /mnt/tmp\n"); + fwrite($fd, "/usr/bin/touch /tmp/install_complete\n"); + fclose($fd); + exec("/bin/chmod a+rx /tmp/installer.sh"); + mwexec_bg("/bin/sh /tmp/installer.sh"); +} + +function installer_find_first_disk() { + global $g, $fstype, $savemsg; + $disk = `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list | head -n1 | cut -d':' -f1`; + return trim($disk); +} + +function pcsysinstall_get_disk_info($diskname) { + global $g, $fstype, $savemsg; + $disk = explode("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list`); + $disks_array = array(); + foreach($disk as $d) { + $disks_info = explode(":", $d); + $tmp_array = array(); + if($disks_info[0] == $diskname) { + $disk_info = explode("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-info {$disks_info[0]}`); + $disk_info_split = explode("=", $disk_info); + foreach($disk_info as $di) { + $di_s = explode("=", $di); + if($di_s[0]) + $tmp_array[$di_s[0]] = $di_s[1]; + } + $tmp_array['size']--; + $tmp_array['disk'] = trim($disks_info[0]); + $tmp_array['desc'] = trim(htmlentities($disks_info[1])); + return $tmp_array; + } + } +} + +// Return an array with all disks information. +function installer_find_all_disks() { + global $g, $fstype, $savemsg; + $disk = explode("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list`); + $disks_array = array(); + foreach($disk as $d) { + if(!$d) + continue; + $disks_info = explode(":", $d); + $tmp_array = array(); + $disk_info = explode("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-info {$disks_info[0]}`); + foreach($disk_info as $di) { + $di_s = explode("=", $di); + if($di_s[0]) + $tmp_array[$di_s[0]] = $di_s[1]; + } + $tmp_array['size']--; + $tmp_array['disk'] = trim($disks_info[0]); + $tmp_array['desc'] = trim(htmlentities($disks_info[1])); + $disks_array[] = $tmp_array; + } + return $disks_array; +} + +function update_installer_status() { + global $g, $fstype, $savemsg; + // Ensure status files exist + if(!file_exists("/tmp/installer_installer_running")) + touch("/tmp/installer_installer_running"); + $status = `cat /tmp/.pc-sysinstall/pc-sysinstall.log`; + $status = str_replace("\n", "\\n", $status); + $status = str_replace("\n", "\\r", $status); + $status = str_replace("'", "\\'", $status); + echo "document.forms[0].installeroutput.value='$status';\n"; + echo "document.forms[0].installeroutput.scrollTop = document.forms[0].installeroutput.scrollHeight;\n"; + // Find out installer progress + $progress = "5"; + if(strstr($status, "Running: dd")) + $progress = "6"; + if(strstr($status, "Running: gpart create -s GPT")) + $progress = "7"; + if(strstr($status, "Running: gpart bootcode")) + $progress = "7"; + if(strstr($status, "Running: newfs -U")) + $progress = "8"; + if(strstr($status, "Running: sync")) + $progress = "9"; + if(strstr($status, "/boot /mnt/boot")) + $progress = "10"; + if(strstr($status, "/COPYRIGHT /mnt/COPYRIGHT")) + $progress = "11"; + if(strstr($status, "/bin /mnt/bin")) + $progress = "12"; + if(strstr($status, "/conf /mnt/conf")) + $progress = "15"; + if(strstr($status, "/conf.default /mnt/conf.default")) + $progress = "20"; + if(strstr($status, "/dev /mnt/dev")) + $progress = "25"; + if(strstr($status, "/etc /mnt/etc")) + $progress = "30"; + if(strstr($status, "/home /mnt/home")) + $progress = "35"; + if(strstr($status, "/kernels /mnt/kernels")) + $progress = "40"; + if(strstr($status, "/libexec /mnt/libexec")) + $progress = "50"; + if(strstr($status, "/lib /mnt/lib")) + $progress = "60"; + if(strstr($status, "/root /mnt/root")) + $progress = "70"; + if(strstr($status, "/sbin /mnt/sbin")) + $progress = "75"; + if(strstr($status, "/sys /mnt/sys")) + $progress = "80"; + if(strstr($status, "/usr /mnt/usr")) + $progress = "95"; + if(strstr($status, "/usr /mnt/usr")) + $progress = "90"; + if(strstr($status, "/var /mnt/var")) + $progress = "95"; + if(strstr($status, "cap_mkdb /etc/login.conf")) + $progress = "96"; + if(strstr($status, "Setting hostname")) + $progress = "97"; + if(strstr($status, "umount -f /mnt")) + $progress = "98"; + if(strstr($status, "umount -f /mnt")) + $progress = "99"; + if(strstr($status, "Installation finished")) + $progress = "100"; + // Check for error and bail if we see one. + if(stristr($status, "error")) { + $error = true; + echo "\$('#installerrunning').html(' An error occurred. Aborting installation. Back to webInstaller'); "; + echo "\$('#progressbar').css('width','100%');\n"; + unlink_if_exists("/tmp/install_complete"); + return; + } + $running_old = trim(file_get_contents("/tmp/installer_installer_running")); + if($installer_running <> "running") { + $ps_running = exec("/bin/ps awwwux | /usr/bin/grep -v grep | /usr/bin/grep 'sh /tmp/installer.sh'"); + if($ps_running) { + $running = "\$('#installerrunning').html('
     Installer running ({$progress}% completed)...
    '); "; + if($running_old <> $running) { + echo $running; + file_put_contents("/tmp/installer_installer_running", "$running"); + } + } + } + if($progress) + echo "\$('#progressbar').css('width','{$progress}%');\n"; + if(file_exists("/tmp/install_complete")) { + echo "\$('#installerrunning').html(' Installation completed. Please reboot to continue');\n"; + echo "\$('#pbdiv').fadeOut();\n"; + unlink_if_exists("/tmp/installer.sh"); + file_put_contents("/tmp/installer_installer_running", "finished"); + } +} + +function update_installer_status_win($status) { + global $g, $fstype, $savemsg; + echo "\n"; +} + +function begin_install() { + global $g, $savemsg; + if(file_exists("/tmp/install_complete")) + return; + unlink_if_exists("/tmp/install_complete"); + update_installer_status_win(sprintf(gettext("Beginning installation on disk %s."),$disk)); + start_installation(); +} + +function head_html() { + global $g, $fstype, $savemsg; + echo << + + + +EOF; + +} + +function body_html() { + global $g, $fstype, $savemsg; + $pgtitle = array("{$g['product_name']}", gettext("Installer")); + include("head.inc"); + echo << + + + + +EOF; + + if($one_two) + echo "

    {$pgtitle}

    "; + + if ($savemsg) print_info_box($savemsg); +} + +function end_html() { + global $g, $fstype, $savemsg; + echo ""; + echo ""; + echo ""; +} + +function template() { + global $g, $fstype, $savemsg; + head_html(); + body_html(); + echo << + + + + +
    +
    + + + + +
    +
    +
    + + +
    +
    +
    +
    + +EOF; + end_html(); +} + +function verify_before_install() { + global $g, $fstype, $savemsg; + $encrypted_root = false; + $non_encrypted_boot = false; + $non_encrypted_notice = false; + head_html(); + body_html(); + page_table_start($g['product_name'] . " installer - Verify final installation settings"); + // If we are visiting this step from anything but the row editor / custom install + // then load the on disk layout contents if they are available. + if(!$_REQUEST['fstype0'] && file_exists("/tmp/webInstaller_disk_layout.txt")) { + $disks = unserialize(file_get_contents("/tmp/webInstaller_disk_layout.txt")); + $bootmanager = unserialize(file_get_contents("/tmp/webInstaller_disk_bootmanager.txt")); + $restored_layout_from_file = true; + $restored_layout_txt = "The previous disk layout was restored from disk"; + } else { + $disks = array(); + } + if(!$bootmanager) + $bootmanager = $_REQUEST['bootmanager']; + echo "\n\n"; + $disk = pcsysinstall_get_disk_info(htmlspecialchars($_REQUEST['disk'])); + $disksize = format_bytes($disk['size'] * 1048576); + // Loop through posted items and create an array + for($x=0; $x<99; $x++) { // XXX: Make this more optimal + if(!$_REQUEST['fstype' . $x]) + continue; + $tmparray = array(); + if($_REQUEST['fstype' . $x] <> "SWAP") { + $tmparray['mountpoint'] = $_REQUEST['mountpoint' . $x]; + // Check for encrypted slice / + if(stristr($_REQUEST['fstype' . $x], ".eli")) { + if($tmparray['mountpoint'] == "/") + $encrypted_root = true; + } + // Check if we have a non-encrypted /boot + if($tmparray['mountpoint'] == "/boot") { + if(!stristr($_REQUEST['fstype' . $x], ".eli")) + $non_encrypted_boot = true; + } + if($tmparray['mountpoint'] == "/conf") { + $tmparray['mountpoint'] = "/conf{$x}"; + $error_txt[] = "/conf is not an allowed mount point and has been renamed to /conf{$x}."; + } + } else { + $tmparray['mountpoint'] = "none"; + } + // If we have an encrypted /root and lack a non encrypted /boot, throw an error/warning + if($encrypted_root && !$non_encrypted_boot && !$non_encrypted_notice) { + $error_txt[] = "A non-encrypted /boot slice is required when encrypting the / slice"; + $non_encrypted_notice = true; + } + $tmparray['disk'] = $_REQUEST['disk' . $x]; + $tmparray['fstype'] = $_REQUEST['fstype' . $x]; + $tmparray['size'] = $_REQUEST['size' . $x]; + $tmparray['encpass'] = $_REQUEST['encpass' . $x]; + $disks[] = $tmparray; + } + echo "\n \n"; + $bootmanagerupper = strtoupper($bootmanager); + echo << + + + + + + +
    + + + + +
    +
    + + + + +
    +
    +
    +
    + +EOFAMBAC; + // If errors are found, throw the big red box. + if ($error_txt) { + echo ""; + echo ""; + } else + echo ""; + + echo << + + + + + + + + + + +EOFAMBACBAF; + + foreach($disks as $disk) { + $desc = pcsysinstall_get_disk_info($disk['disk']); + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + } + +echo << +
     
    "; + print_input_errors($error_txt); + echo "
     
    Boot manager: {$bootmanagerupper}
     
    + Mount point + + Filesysytem type + + Disk + + Size + + Encryption password +

       {$disk['mountpoint']}{$disk['fstype']}{$disk['disk']} {$desc['desc']}{$disk['size']}{$disk['encpass']}

    +
    +
    +
    +
    +
    +
    +

    +    +EOFAMB; + if(!$error_txt) + echo "
     "; +echo << +

    +
    +EOFAMBASDF; + + + page_table_end(); + end_html(); + write_out_pc_sysinstaller_config($disks, $bootmanager); + // Serialize layout to disk so it can be read in later. + file_put_contents("/tmp/webInstaller_disk_layout.txt", serialize($disks)); + file_put_contents("/tmp/webInstaller_disk_bootmanager.txt", serialize($bootmanager)); +} + +function installing_gui() { + global $g, $fstype, $savemsg; + head_html(); + body_html(); + echo ""; + page_table_start(); + echo << + + +
    +
    + + + + +
    +
    + + + + +
    +
    +
    + + + + + +
    + + +  Starting Installer... Please wait... +
    +
    +
    +
    +
    + + + + + + +
    + + + +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + +EOF; + page_table_end(); + end_html(); +} + +function page_table_start($pgtitle = "") { + global $g, $fstype, $savemsg; + if($pgtitle == "") + $pgtitle = "{$g['product_name']} installer"; + echo << +
    + + + + + + +
    + + + {$pgtitle} + + +
    + +EOF; + +} + +function page_table_end() { + global $g, $fstype, $savemsg; + echo << +
    + + +EOF; + +} + +function installer_custom() { + global $g, $fstype, $savemsg; + global $select_txt, $custom_disks; + if(file_exists("/tmp/.pc-sysinstall/pc-sysinstall.log")) + unlink("/tmp/.pc-sysinstall/pc-sysinstall.log"); + $disks = installer_find_all_disks(); + // Pass size of disks down to javascript. + $disk_sizes_js_txt = "var disk_sizes = new Array();\n"; + foreach($disks as $disk) + $disk_sizes_js_txt .= "disk_sizes['{$disk['disk']}'] = '{$disk['size']}';\n"; + head_html(); + body_html(); + page_table_start($g['product_name'] . " installer - Customize disk(s) layout"); + echo << + Array.prototype.in_array = function(p_val) { + for(var i = 0, l = this.length; i < l; i++) { + if(this[i] == p_val) { + return true; + } + } + return false; + } + function row_helper_dynamic_custom() { + var totalsize = 0; + {$disk_sizes_js_txt} + // Run through all rows and process data + for(var x = 0; x<99; x++) { //optimize me better + if(\$('#fstype' + x).length) { + if(\$('#size' + x).val() == '') + \$('#size' + x).val(disk_sizes[\$('disk' + x).value]); + var fstype = \$('#fstype' + x).val(); + if(fstype.substring(fstype.length - 4) == ".eli") { + \$('#encpass' + x).prop('disabled',false); + if(!encryption_warning_shown) { + alert('NOTE: If you define a disk encryption password you will need to enter it on *EVERY* bootup!'); + encryption_warning_shown = true; + } + } else { + \$('#encpass' + x).prop('disabled',true); + } + } + // Calculate size allocations + if(\$('#size' + x).length) { + if(parseInt($('#size' + x).val()) > 0) + totalsize += parseInt($('#size' + x).val()); + } + } + // If the totalsize element exists, set it and disable + if(\$('#totalsize').length) { + if(\$('#totalsize').val() != totalsize) { + // When size allocation changes, draw attention. + jQuery('#totalsize').effect('highlight'); + \$('#totalsize').val(totalsize); + } + \$('#totalsize').prop('disabled',true); + } + if(\$('#disktotals').length) { + var disks_seen = new Array(); + var tmp_sizedisks = 0; + var disksseen = 0; + for(var xx = 0; xx<99; xx++) { + if(\$('#disk' + xx).length) { + if(!disks_seen.in_array(\$('#disk' + xx).val())) { + tmp_sizedisks += parseInt(disk_sizes[\$('#disk' + xx).val()]); + disks_seen[disksseen] = \$('#disk' + xx).val(); + disksseen++; + } + } + \$('#disktotals').val(tmp_sizedisks); + \$('#disktotals').prop('disabled',true); + \$('#disktotals').css('color','#000000'); + var remaining = parseInt(\$('#disktotals').val()) - parseInt(\$('#totalsize').val()); + if(remaining == 0) { + if(\$('#totalsize').length) + \$('#totalsize').css({ + 'background':'#00FF00', + 'color':'#000000' + }); + } else { + if(\$('#totalsize').length) + \$('#totalsize').css({ + 'background':'#FFFFFF', + 'color':'#000000' + }); + } + if(parseInt(\$('#totalsize').val()) > parseInt(\$('#disktotals').val())) { + if(\$('#totalsize')) + \$('#totalsize').css({ + 'background':'#FF0000', + 'color':'#000000' + }); + } + if(\$('#availalloc').length) { + \$('#availalloc').prop('disabled',true); + \$('#availalloc').val(remaining); + \$('#availalloc').css({ + 'background':'#FFFFFF', + 'color':'#000000' + }); + } + } + } + } + + + + + +
    +
    + + + + +
    +
    +
    +
    + + + +
    +
    +
    +
    + + + + + +
    + + +  Probing disks, please wait... +
    +
    +EOF; + ob_flush(); + // Read bootmanager setting from disk if found + if(file_exists("/tmp/webInstaller_disk_bootmanager.txt")) + $bootmanager = unserialize(file_get_contents("/tmp/webInstaller_disk_bootmanager.txt")); + if($bootmanager == "none") + $noneselected = " SELECTED"; + if($bootmanager == "bsd") + $bsdeselected = " SELECTED"; + if(!$disks) { + $custom_txt = gettext("ERROR: Could not find any suitable disks for installation."); + } else { + // Prepare disk selection dropdown + $custom_txt = << + + + + + +
    + Boot manager: + + +
    +
    + + + + + + + + + + + +EOF; + + // Calculate swap disk sizes + $memory = get_memory(); + $swap_size = $memory[0] * 2; + $first_disk = trim(installer_find_first_disk()); + $disk_info = pcsysinstall_get_disk_info($first_disk); + $size = $disk_info['size']; + $first_disk_size = $size - $swap_size; + + // Debugging + echo "\n\n\n\n"; + + // Check to see if a on disk layout exists + if(file_exists("/tmp/webInstaller_disk_layout.txt")) { + $disks_restored = unserialize(file_get_contents("/tmp/webInstaller_disk_layout.txt")); + $restored_layout_from_file = true; + $restored_layout_txt = "
    * The previous disk layout was restored from a previous session"; + } + + // If we restored disk layout(s) from a file then build the rows + if($restored_layout_from_file == true) { + $diskcounter = 0; + foreach($disks_restored as $dr) { + $custom_txt .= return_rowhelper_row("$diskcounter", $dr['mountpoint'], $dr['fstype'], $dr['disk'], $dr['size'], $dr['encpass']); + $diskcounter++; + } + } else { + // Construct the default rows that outline the disks configuration. + $custom_txt .= return_rowhelper_row("0", "/", "UFS+S", $first_disk, "{$first_disk_size}", ""); + $custom_txt .= return_rowhelper_row("1", "none", "SWAP", $first_disk, "$swap_size", ""); + } + + // tfoot and tbody are used by rowhelper + $custom_txt .= ""; + $custom_txt .= ""; + // Total allocation box + $custom_txt .= ""; + // Add row button + $custom_txt .= ""; + // Disk capacity box + $custom_txt .= ""; + // Remaining allocation box + $custom_txt .= ""; + $custom_txt .= "
    + Mount + + Filesysytem + + Disk + + Size + + Encryption password + +   +
    Total allocated: "; + $custom_txt .= "
    "; + $custom_txt .= ""; + $custom_txt .= "\"\""; + $custom_txt .= "
    "; + $custom_txt .= "
    Disk(s) capacity total:
    Available space for allocation:
    "; + $custom_txt .= ""; + } + echo << +
    + + + + +
    +
    +
    +
    + + + + NOTES: + + +
    * Sizes are in megabytes. +
    * Mount points named /conf are not allowed. Use /cf if you want to make a configuration slice/mount. + {$restored_layout_txt} +
    + +
    +
    +
    + + + + +EOF; + page_table_end(); + end_html(); +} + +function installer_main() { + global $g, $fstype, $savemsg; + if(file_exists("/tmp/.pc-sysinstall/pc-sysinstall.log")) + unlink("/tmp/.pc-sysinstall/pc-sysinstall.log"); + head_html(); + body_html(); + $disk = installer_find_first_disk(); + // Only enable ZFS if this exists. The install will fail otherwise. + if(file_exists("/boot/gptzfsboot")) + $zfs_enabled = "
    Easy installation of {$g['product_name']} using the ZFS filesystem on disk {$disk}
    + +
    +
    +
    +
    +
    + Please select an installer option to begin: +

    + + +
    +
    +
    +EOF; + if(!$disk) { + echo gettext("ERROR: Could not find any suitable disks for installation."); + echo "

    "; + end_html(); + exit; + } + echo << + + Easy installation of {$g['product_name']} using the UFS filesystem on disk {$disk} + + {$zfs_enabled} + + Custom installation of {$g['product_name']} + + + Cancel and return to Dashboard + + +
    + + + + + + + + + +EOF; + page_table_end(); + end_html(); +} + +function return_rowhelper_row($rownum, $mountpoint, $fstype, $disk, $size, $encpass) { + global $g, $select_txt, $custom_disks, $savemsg; + $release = php_uname("r"); + $release = trim($release[0]); + + // Mount point + $disks = installer_find_all_disks(); + $custom_txt .= ""; + $custom_txt .= ""; + + // Filesystem type array + $types = array( + 'UFS' => 'UFS', + 'UFS+S' => 'UFS + Softupdates', + 'UFS.eli' => 'Encrypted UFS', + 'UFS+S.eli' => 'Encrypted UFS + Softupdates', + 'SWAP' => 'SWAP' + ); + + // UFS + Journaling was introduced in 9.0 + if($release == "9") { + $types['UFS+J'] = "UFS + Journaling"; + $types['UFS+J.eli'] = "Encrypted UFS + Journaling"; + } + + // Add ZFS Boot loader if it exists + if(file_exists("/boot/gptzfsboot")) { + $types['ZFS'] = "Zetabyte Filesystem"; + $types['ZFS.eli'] = "Encrypted Zetabyte Filesystem"; + } + + // fstype form field + $custom_txt .= "\n"; + $custom_txt .= ""; + + // Disk selection form field + $custom_txt .= "\n"; + + // Slice size + $custom_txt .= ""; + + // Encryption password + $custom_txt .= ""; + $custom_txt .= ""; + $custom_txt .= ""; + + // Add Rowhelper + button + if($rownum > 0) + $custom_txt .= "\"\""; + + $custom_txt .= ""; + return $custom_txt; +} + +?> diff --git a/usr/local/www/interfaces.php b/usr/local/www/interfaces.php new file mode 100644 index 000000000..55f02a444 --- /dev/null +++ b/usr/local/www/interfaces.php @@ -0,0 +1,3478 @@ +. + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/sbin/arp + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-interfaces +##|*NAME=Interfaces: WAN page +##|*DESCR=Allow access to the 'Interfaces' page. +##|*MATCH=interfaces.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("ipsec.inc"); +require_once("functions.inc"); +require_once("captiveportal.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("rrd.inc"); +require_once("vpn.inc"); +require_once("xmlparse_attr.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces.php'); + +// Get configured interface list +$ifdescrs = get_configured_interface_with_descr(false, true); + +$if = "wan"; +if ($_REQUEST['if']) + $if = $_REQUEST['if']; + +if (empty($ifdescrs[$if])) { + header("Location: interfaces.php"); + exit; +} + +define("CRON_MONTHLY_PATTERN", "0 0 1 * *"); +define("CRON_WEEKLY_PATTERN", "0 0 * * 0"); +define("CRON_DAILY_PATTERN", "0 0 * * *"); +define("CRON_HOURLY_PATTERN", "0 * * * *"); + +if (!is_array($pconfig)) + $pconfig = array(); + +if (!is_array($config['ppps']['ppp'])) + $config['ppps']['ppp'] = array(); + +$a_ppps = &$config['ppps']['ppp']; + +function remove_bad_chars($string) { + return preg_replace('/[^a-z_0-9]/i','',$string); +} + +if (!is_array($config['gateways']['gateway_item'])) + $config['gateways']['gateway_item'] = array(); +$a_gateways = &$config['gateways']['gateway_item']; + +$wancfg = &$config['interfaces'][$if]; +$old_wancfg = $wancfg; +$old_wancfg['realif'] = get_real_interface($if); +$old_ppps = $a_ppps; +// Populate page descr if it does not exist. +if ($if == "wan" && !$wancfg['descr']) + $wancfg['descr'] = "WAN"; +else if ($if == "lan" && !$wancfg['descr']) + $wancfg['descr'] = "LAN"; + +foreach ($a_ppps as $pppid => $ppp) { + if ($wancfg['if'] == $ppp['if']) + break; +} + +$type_disabled = (substr($wancfg['if'], 0, 3) == 'gre') ? 'disabled="disabled"' : ''; + +if ($wancfg['if'] == $a_ppps[$pppid]['if']) { + $pconfig['pppid'] = $pppid; + $pconfig['ptpid'] = $a_ppps[$pppid]['ptpid']; + $pconfig['port'] = $a_ppps[$pppid]['ports']; + if ($a_ppps[$pppid]['type'] == "ppp") { + $pconfig['username'] = $a_ppps[$pppid]['username']; + $pconfig['password'] = base64_decode($a_ppps[$pppid]['password']); + + $pconfig['phone'] = $a_ppps[$pppid]['phone']; + $pconfig['apn'] = $a_ppps[$pppid]['apn']; + } + else if ($a_ppps[$pppid]['type'] == "pppoe") { + $pconfig['pppoe_username'] = $a_ppps[$pppid]['username']; + $pconfig['pppoe_password'] = base64_decode($a_ppps[$pppid]['password']); + $pconfig['provider'] = $a_ppps[$pppid]['provider']; + $pconfig['pppoe_dialondemand'] = isset($a_ppps[$pppid]['ondemand']); + $pconfig['pppoe_idletimeout'] = $a_ppps[$pppid]['idletimeout']; + + /* ================================================ */ + /* = force a connection reset at a specific time? = */ + /* ================================================ */ + + if (isset($a_ppps[$pppid]['pppoe-reset-type'])) { + $pconfig['pppoe-reset-type'] = $a_ppps[$pppid]['pppoe-reset-type']; + $itemhash = getMPDCRONSettings($a_ppps[$pppid]['if']); + if ($itemhash) + $cronitem = $itemhash['ITEM']; + if (isset($cronitem)) { + $resetTime = "{$cronitem['minute']} {$cronitem['hour']} {$cronitem['mday']} {$cronitem['month']} {$cronitem['wday']}"; + } else { + $resetTime = NULL; + } + //log_error("ResetTime:".$resetTime); + if ($a_ppps[$pppid]['pppoe-reset-type'] == "custom") { + if ($cronitem) { + $pconfig['pppoe_pr_custom'] = true; + $pconfig['pppoe_resetminute'] = $cronitem['minute']; + $pconfig['pppoe_resethour'] = $cronitem['hour']; + if ($cronitem['mday'] <> "*" && $cronitem['month'] <> "*") + $pconfig['pppoe_resetdate'] = "{$cronitem['month']}/{$cronitem['mday']}/" . date("Y"); + } + } else if ($a_ppps[$pppid]['pppoe-reset-type'] == "preset") { + $pconfig['pppoe_pr_preset'] = true; + switch ($resetTime) { + case CRON_MONTHLY_PATTERN: + $pconfig['pppoe_monthly'] = true; + break; + case CRON_WEEKLY_PATTERN: + $pconfig['pppoe_weekly'] = true; + break; + case CRON_DAILY_PATTERN: + $pconfig['pppoe_daily'] = true; + break; + case CRON_HOURLY_PATTERN: + $pconfig['pppoe_hourly'] = true; + break; + } + } + }// End force pppoe reset at specific time + }// End if type == pppoe + else if ($a_ppps[$pppid]['type'] == "pptp" || $a_ppps[$pppid]['type'] == "l2tp"){ + $pconfig['pptp_username'] = $a_ppps[$pppid]['username']; + $pconfig['pptp_password'] = base64_decode($a_ppps[$pppid]['password']); + $pconfig['pptp_local'] = explode(",",$a_ppps[$pppid]['localip']); + $pconfig['pptp_subnet'] = explode(",",$a_ppps[$pppid]['subnet']); + $pconfig['pptp_remote'] = explode(",",$a_ppps[$pppid]['gateway']); + $pconfig['pptp_dialondemand'] = isset($a_ppps[$pppid]['ondemand']); + $pconfig['pptp_idletimeout'] = $a_ppps[$pppid]['timeout']; + } +} else { + $pconfig['ptpid'] = interfaces_ptpid_next(); + $pppid = count($a_ppps); +} +$pconfig['dhcphostname'] = $wancfg['dhcphostname']; +$pconfig['alias-address'] = $wancfg['alias-address']; +$pconfig['alias-subnet'] = $wancfg['alias-subnet']; +$pconfig['dhcprejectfrom'] = $wancfg['dhcprejectfrom']; + +$pconfig['adv_dhcp_pt_timeout'] = $wancfg['adv_dhcp_pt_timeout']; +$pconfig['adv_dhcp_pt_retry'] = $wancfg['adv_dhcp_pt_retry']; +$pconfig['adv_dhcp_pt_select_timeout'] = $wancfg['adv_dhcp_pt_select_timeout']; +$pconfig['adv_dhcp_pt_reboot'] = $wancfg['adv_dhcp_pt_reboot']; +$pconfig['adv_dhcp_pt_backoff_cutoff'] = $wancfg['adv_dhcp_pt_backoff_cutoff']; +$pconfig['adv_dhcp_pt_initial_interval'] = $wancfg['adv_dhcp_pt_initial_interval']; + +$pconfig['adv_dhcp_pt_values'] = $wancfg['adv_dhcp_pt_values']; + +$pconfig['adv_dhcp_send_options'] = $wancfg['adv_dhcp_send_options']; +$pconfig['adv_dhcp_request_options'] = $wancfg['adv_dhcp_request_options']; +$pconfig['adv_dhcp_required_options'] = $wancfg['adv_dhcp_required_options']; +$pconfig['adv_dhcp_option_modifiers'] = $wancfg['adv_dhcp_option_modifiers']; + +$pconfig['adv_dhcp_config_advanced'] = $wancfg['adv_dhcp_config_advanced']; +$pconfig['adv_dhcp_config_file_override'] = $wancfg['adv_dhcp_config_file_override']; +$pconfig['adv_dhcp_config_file_override_path'] = $wancfg['adv_dhcp_config_file_override_path']; + +$pconfig['adv_dhcp6_interface_statement_send_options'] = $wancfg['adv_dhcp6_interface_statement_send_options']; +$pconfig['adv_dhcp6_interface_statement_request_options'] = $wancfg['adv_dhcp6_interface_statement_request_options']; +$pconfig['adv_dhcp6_interface_statement_information_only_enable'] = $wancfg['adv_dhcp6_interface_statement_information_only_enable']; +$pconfig['adv_dhcp6_interface_statement_script'] = $wancfg['adv_dhcp6_interface_statement_script']; + +$pconfig['adv_dhcp6_id_assoc_statement_address_enable'] = $wancfg['adv_dhcp6_id_assoc_statement_address_enable']; +$pconfig['adv_dhcp6_id_assoc_statement_address'] = $wancfg['adv_dhcp6_id_assoc_statement_address']; +$pconfig['adv_dhcp6_id_assoc_statement_address_id'] = $wancfg['adv_dhcp6_id_assoc_statement_address_id']; +$pconfig['adv_dhcp6_id_assoc_statement_address_pltime'] = $wancfg['adv_dhcp6_id_assoc_statement_address_pltime']; +$pconfig['adv_dhcp6_id_assoc_statement_address_vltime'] = $wancfg['adv_dhcp6_id_assoc_statement_address_vltime']; + +$pconfig['adv_dhcp6_id_assoc_statement_prefix_enable'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_enable']; +$pconfig['adv_dhcp6_id_assoc_statement_prefix'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix']; +$pconfig['adv_dhcp6_id_assoc_statement_prefix_id'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_id']; +$pconfig['adv_dhcp6_id_assoc_statement_prefix_pltime'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime']; +$pconfig['adv_dhcp6_id_assoc_statement_prefix_vltime'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime']; + +$pconfig['adv_dhcp6_prefix_interface_statement_sla_id'] = $wancfg['adv_dhcp6_prefix_interface_statement_sla_id']; +$pconfig['adv_dhcp6_prefix_interface_statement_sla_len'] = $wancfg['adv_dhcp6_prefix_interface_statement_sla_len']; + +$pconfig['adv_dhcp6_authentication_statement_authname'] = $wancfg['adv_dhcp6_authentication_statement_authname']; +$pconfig['adv_dhcp6_authentication_statement_protocol'] = $wancfg['adv_dhcp6_authentication_statement_protocol']; +$pconfig['adv_dhcp6_authentication_statement_algorithm'] = $wancfg['adv_dhcp6_authentication_statement_algorithm']; +$pconfig['adv_dhcp6_authentication_statement_rdm'] = $wancfg['adv_dhcp6_authentication_statement_rdm']; + +$pconfig['adv_dhcp6_key_info_statement_keyname'] = $wancfg['adv_dhcp6_key_info_statement_keyname']; +$pconfig['adv_dhcp6_key_info_statement_realm'] = $wancfg['adv_dhcp6_key_info_statement_realm']; +$pconfig['adv_dhcp6_key_info_statement_keyid'] = $wancfg['adv_dhcp6_key_info_statement_keyid']; +$pconfig['adv_dhcp6_key_info_statement_secret'] = $wancfg['adv_dhcp6_key_info_statement_secret']; +$pconfig['adv_dhcp6_key_info_statement_expire'] = $wancfg['adv_dhcp6_key_info_statement_expire']; + +$pconfig['adv_dhcp6_config_advanced'] = $wancfg['adv_dhcp6_config_advanced']; +$pconfig['adv_dhcp6_config_file_override'] = $wancfg['adv_dhcp6_config_file_override']; +$pconfig['adv_dhcp6_config_file_override_path'] = $wancfg['adv_dhcp6_config_file_override_path']; + +$pconfig['dhcp_plus'] = isset($wancfg['dhcp_plus']); +$pconfig['descr'] = remove_bad_chars($wancfg['descr']); +$pconfig['enable'] = isset($wancfg['enable']); + +if (is_array($config['aliases']['alias'])) { + foreach($config['aliases']['alias'] as $alias) { + if($alias['name'] == $wancfg['descr']) { + $input_errors[] = sprintf(gettext("Sorry, an alias with the name %s already exists."),$wancfg['descr']); + } + } +} + +switch($wancfg['ipaddr']) { + case "dhcp": + $pconfig['type'] = "dhcp"; + break; + case "pppoe": + case "pptp": + case "l2tp": + case "ppp": + $pconfig['type'] = $wancfg['ipaddr']; + break; + default: + if(is_ipaddrv4($wancfg['ipaddr'])) { + $pconfig['type'] = "staticv4"; + $pconfig['ipaddr'] = $wancfg['ipaddr']; + $pconfig['subnet'] = $wancfg['subnet']; + $pconfig['gateway'] = $wancfg['gateway']; + } else + $pconfig['type'] = "none"; + break; +} + +switch($wancfg['ipaddrv6']) { + case "slaac": + $pconfig['type6'] = "slaac"; + break; + case "dhcp6": + $pconfig['dhcp6-duid'] = $wancfg['dhcp6-duid']; + if(!isset($wancfg['dhcp6-ia-pd-len'])) + $wancfg['dhcp6-ia-pd-len'] = "none"; + $pconfig['dhcp6-ia-pd-len'] = $wancfg['dhcp6-ia-pd-len']; + $pconfig['dhcp6-ia-pd-send-hint'] = isset($wancfg['dhcp6-ia-pd-send-hint']); + $pconfig['type6'] = "dhcp6"; + $pconfig['dhcp6prefixonly'] = isset($wancfg['dhcp6prefixonly']); + $pconfig['dhcp6usev4iface'] = isset($wancfg['dhcp6usev4iface']); + break; + case "6to4": + $pconfig['type6'] = "6to4"; + break; + case "track6": + $pconfig['type6'] = "track6"; + $pconfig['track6-interface'] = $wancfg['track6-interface']; + if ($wancfg['track6-prefix-id'] == "") + $pconfig['track6-prefix-id'] = 0; + else + $pconfig['track6-prefix-id'] = $wancfg['track6-prefix-id']; + $pconfig['track6-prefix-id--hex'] = sprintf("%x", $pconfig['track6-prefix-id']); + break; + case "6rd": + $pconfig['prefix-6rd'] = $wancfg['prefix-6rd']; + if($wancfg['prefix-6rd-v4plen'] == "") + $wancfg['prefix-6rd-v4plen'] = "0"; + $pconfig['prefix-6rd-v4plen'] = $wancfg['prefix-6rd-v4plen']; + $pconfig['type6'] = "6rd"; + $pconfig['gateway-6rd'] = $wancfg['gateway-6rd']; + break; + default: + if(is_ipaddrv6($wancfg['ipaddrv6'])) { + $pconfig['type6'] = "staticv6"; + $pconfig['ipaddrv6'] = $wancfg['ipaddrv6']; + $pconfig['subnetv6'] = $wancfg['subnetv6']; + $pconfig['gatewayv6'] = $wancfg['gatewayv6']; + } else + $pconfig['type6'] = "none"; + break; +} + +// print_r($pconfig); + +$pconfig['blockpriv'] = isset($wancfg['blockpriv']); +$pconfig['blockbogons'] = isset($wancfg['blockbogons']); +$pconfig['spoofmac'] = $wancfg['spoofmac']; +$pconfig['mtu'] = $wancfg['mtu']; +$pconfig['mss'] = $wancfg['mss']; + +/* Wireless interface? */ +if (isset($wancfg['wireless'])) { + /* Sync first to be sure it displays the actual settings that will be used */ + interface_sync_wireless_clones($wancfg, false); + /* Get wireless modes */ + $wlanif = get_real_interface($if); + if (!does_interface_exist($wlanif)) + interface_wireless_clone($wlanif, $wancfg); + $wlanbaseif = interface_get_wireless_base($wancfg['if']); + preg_match("/^(.*?)([0-9]*)$/", $wlanbaseif, $wlanbaseif_split); + $wl_modes = get_wireless_modes($if); + $wl_chaninfo = get_wireless_channel_info($if); + $wl_sysctl_prefix = 'dev.' . $wlanbaseif_split[1] . '.' . $wlanbaseif_split[2]; + $wl_sysctl = get_sysctl(array("{$wl_sysctl_prefix}.diversity", "{$wl_sysctl_prefix}.txantenna", "{$wl_sysctl_prefix}.rxantenna", + "{$wl_sysctl_prefix}.slottime", "{$wl_sysctl_prefix}.acktimeout", "{$wl_sysctl_prefix}.ctstimeout")); + $wl_regdomain_xml_attr = array(); + $wl_regdomain_xml = parse_xml_regdomain($wl_regdomain_xml_attr); + $wl_regdomains = &$wl_regdomain_xml['regulatory-domains']['rd']; + $wl_regdomains_attr = &$wl_regdomain_xml_attr['regulatory-domains']['rd']; + $wl_countries = &$wl_regdomain_xml['country-codes']['country']; + $wl_countries_attr = &$wl_regdomain_xml_attr['country-codes']['country']; + $pconfig['persistcommonwireless'] = isset($config['wireless']['interfaces'][$wlanbaseif]); + $pconfig['standard'] = $wancfg['wireless']['standard']; + $pconfig['mode'] = $wancfg['wireless']['mode']; + $pconfig['protmode'] = $wancfg['wireless']['protmode']; + $pconfig['ssid'] = $wancfg['wireless']['ssid']; + $pconfig['channel'] = $wancfg['wireless']['channel']; + $pconfig['txpower'] = $wancfg['wireless']['txpower']; + $pconfig['diversity'] = $wancfg['wireless']['diversity']; + $pconfig['txantenna'] = $wancfg['wireless']['txantenna']; + $pconfig['rxantenna'] = $wancfg['wireless']['rxantenna']; + $pconfig['distance'] = $wancfg['wireless']['distance']; + $pconfig['regdomain'] = $wancfg['wireless']['regdomain']; + $pconfig['regcountry'] = $wancfg['wireless']['regcountry']; + $pconfig['reglocation'] = $wancfg['wireless']['reglocation']; + $pconfig['wme_enable'] = isset($wancfg['wireless']['wme']['enable']); + if (isset($wancfg['wireless']['puren']['enable'])) + $pconfig['puremode'] = '11n'; + else if (isset($wancfg['wireless']['pureg']['enable'])) + $pconfig['puremode'] = '11g'; + else + $pconfig['puremode'] = 'any'; + $pconfig['apbridge_enable'] = isset($wancfg['wireless']['apbridge']['enable']); + $pconfig['authmode'] = $wancfg['wireless']['authmode']; + $pconfig['hidessid_enable'] = isset($wancfg['wireless']['hidessid']['enable']); + $pconfig['auth_server_addr'] = $wancfg['wireless']['auth_server_addr']; + $pconfig['auth_server_port'] = $wancfg['wireless']['auth_server_port']; + $pconfig['auth_server_shared_secret'] = $wancfg['wireless']['auth_server_shared_secret']; + $pconfig['auth_server_addr2'] = $wancfg['wireless']['auth_server_addr2']; + $pconfig['auth_server_port2'] = $wancfg['wireless']['auth_server_port2']; + $pconfig['auth_server_shared_secret2'] = $wancfg['wireless']['auth_server_shared_secret2']; + if (is_array($wancfg['wireless']['wpa'])) { + $pconfig['debug_mode'] = $wancfg['wireless']['wpa']['debug_mode']; + $pconfig['macaddr_acl'] = $wancfg['wireless']['wpa']['macaddr_acl']; + $pconfig['mac_acl_enable'] = isset($wancfg['wireless']['wpa']['mac_acl_enable']); + $pconfig['auth_algs'] = $wancfg['wireless']['wpa']['auth_algs']; + $pconfig['wpa_mode'] = $wancfg['wireless']['wpa']['wpa_mode']; + $pconfig['wpa_key_mgmt'] = $wancfg['wireless']['wpa']['wpa_key_mgmt']; + $pconfig['wpa_pairwise'] = $wancfg['wireless']['wpa']['wpa_pairwise']; + $pconfig['wpa_group_rekey'] = $wancfg['wireless']['wpa']['wpa_group_rekey']; + $pconfig['wpa_gmk_rekey'] = $wancfg['wireless']['wpa']['wpa_gmk_rekey']; + $pconfig['wpa_strict_rekey'] = isset($wancfg['wireless']['wpa']['wpa_strict_rekey']); + $pconfig['passphrase'] = $wancfg['wireless']['wpa']['passphrase']; + $pconfig['ieee8021x'] = isset($wancfg['wireless']['wpa']['ieee8021x']['enable']); + $pconfig['rsn_preauth'] = isset($wancfg['wireless']['wpa']['rsn_preauth']); + $pconfig['ext_wpa_sw'] = $wancfg['wireless']['wpa']['ext_wpa_sw']; + $pconfig['wpa_enable'] = isset($wancfg['wireless']['wpa']['enable']); + } + $pconfig['wep_enable'] = isset($wancfg['wireless']['wep']['enable']); + $pconfig['mac_acl'] = $wancfg['wireless']['mac_acl']; + if (is_array($wancfg['wireless']['wep']) && is_array($wancfg['wireless']['wep']['key'])) { + $i = 1; + foreach ($wancfg['wireless']['wep']['key'] as $wepkey) { + $pconfig['key' . $i] = $wepkey['value']; + if (isset($wepkey['txkey'])) + $pconfig['txkey'] = $i; + $i++; + } + if (!isset($wepkey['txkey'])) + $pconfig['txkey'] = 1; + } +} + +$ipv6_delegation_length = calculate_ipv6_delegation_length($pconfig['track6-interface']); +$ipv6_num_prefix_ids = pow(2, $ipv6_delegation_length); + +if ($_POST['apply']) { + unset($input_errors); + if (!is_subsystem_dirty('interfaces')) + $intput_errors[] = gettext("You have already applied your settings!"); + else { + unlink_if_exists("{$g['tmp_path']}/config.cache"); + clear_subsystem_dirty('interfaces'); + + if (file_exists("{$g['tmp_path']}/.interfaces.apply")) { + $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply")); + foreach ($toapplylist as $ifapply => $ifcfgo) { + if (isset($config['interfaces'][$ifapply]['enable'])) { + interface_bring_down($ifapply, false, $ifcfgo); + interface_configure($ifapply, true); + } else + interface_bring_down($ifapply, true, $ifcfgo); + } + } + /* restart snmp so that it binds to correct address */ + services_snmpd_configure(); + + /* sync filter configuration */ + setup_gateways_monitor(); + + clear_subsystem_dirty('interfaces'); + + filter_configure(); + + enable_rrd_graphing(); + + if (is_subsystem_dirty('staticroutes') && (system_routing_configure() == 0)) + clear_subsystem_dirty('staticroutes'); + } + @unlink("{$g['tmp_path']}/.interfaces.apply"); + header("Location: interfaces.php?if={$if}"); + exit; +} else if ($_POST && $_POST['enable'] != "yes") { + unset($wancfg['enable']); + if (isset($wancfg['wireless'])) + interface_sync_wireless_clones($wancfg, false); + write_config("Interface {$_POST['descr']}({$if}) is now disabled."); + mark_subsystem_dirty('interfaces'); + if (file_exists("{$g['tmp_path']}/.interfaces.apply")) { + $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply")); + } else { + $toapplylist = array(); + } + $toapplylist[$if]['ifcfg'] = $wancfg; + $toapplylist[$if]['ppps'] = $a_ppps; + /* we need to be able remove IP aliases for IPv6 */ + file_put_contents("{$g['tmp_path']}/.interfaces.apply", serialize($toapplylist)); + header("Location: interfaces.php?if={$if}"); + exit; +} else if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + if (isset($_POST['track6-interface'])) { + $ipv6_delegation_length = calculate_ipv6_delegation_length($_POST['track6-interface']); + $ipv6_num_prefix_ids = pow(2, $ipv6_delegation_length); + } + + if (is_numeric("0x" . $_POST['track6-prefix-id--hex'])) + $pconfig['track6-prefix-id'] = intval($_POST['track6-prefix-id--hex'], 16); + else + $pconfig['track6-prefix-id'] = 0; + conf_mount_rw(); + + /* filter out spaces from descriptions */ + $_POST['descr'] = remove_bad_chars($_POST['descr']); + + /* okay first of all, cause we are just hiding the PPPoE HTML + * fields releated to PPPoE resets, we are going to unset $_POST + * vars, if the reset feature should not be used. Otherwise the + * data validation procedure below, may trigger a false error + * message. + */ + if (empty($_POST['pppoe-reset-type'])) { + unset($_POST['pppoe_pr_type']); + unset($_POST['pppoe_resethour']); + unset($_POST['pppoe_resetminute']); + unset($_POST['pppoe_resetdate']); + unset($_POST['pppoe_pr_preset_val']); + } + /* description unique? */ + foreach ($ifdescrs as $ifent => $ifdescr) { + if ($if != $ifent && $ifdescr == $_POST['descr']) { + $input_errors[] = gettext("An interface with the specified description already exists."); + break; + } + } + /* input validation */ + if (isset($config['dhcpd']) && isset($config['dhcpd'][$if]['enable']) && (! preg_match("/^staticv4/", $_POST['type']))) + $input_errors[] = gettext("The DHCP Server is active on this interface and it can be used only with a static IP configuration. Please disable the DHCP Server service on this interface first, then change the interface configuration."); + if (isset($config['dhcpdv6']) && isset($config['dhcpdv6'][$if]['enable']) && (! preg_match("/^staticv6/", $_POST['type6']))) + $input_errors[] = gettext("The DHCP6 Server is active on this interface and it can be used only with a static IPv6 configuration. Please disable the DHCPv6 Server service on this interface first, then change the interface configuration."); + + switch(strtolower($_POST['type'])) { + case "staticv4": + $reqdfields = explode(" ", "ipaddr subnet gateway"); + $reqdfieldsn = array(gettext("IPv4 address"),gettext("Subnet bit count"),gettext("Gateway")); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + break; + case "none": + if(is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vip) { + if (is_ipaddrv4($vip['subnet']) && $vip['interface'] == $if) + $input_errors[] = gettext("This interface is referenced by IPv4 VIPs. Please delete those before setting the interface to 'none' configuration."); + } + } + case "dhcp": + if (in_array($wancfg['ipaddr'], array("ppp", "pppoe", "pptp", "l2tp"))) + $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."),$_POST['type']); + break; + case "ppp": + $reqdfields = explode(" ", "port phone"); + $reqdfieldsn = array(gettext("Modem Port"),gettext("Phone Number")); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + break; + case "pppoe": + if ($_POST['pppoe_dialondemand']) { + $reqdfields = explode(" ", "pppoe_username pppoe_password pppoe_dialondemand pppoe_idletimeout"); + $reqdfieldsn = array(gettext("PPPoE username"),gettext("PPPoE password"),gettext("Dial on demand"),gettext("Idle timeout value")); + } else { + $reqdfields = explode(" ", "pppoe_username pppoe_password"); + $reqdfieldsn = array(gettext("PPPoE username"),gettext("PPPoE password")); + } + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + break; + case "pptp": + if ($_POST['pptp_dialondemand']) { + $reqdfields = explode(" ", "pptp_username pptp_password pptp_local pptp_subnet pptp_remote pptp_dialondemand pptp_idletimeout"); + $reqdfieldsn = array(gettext("PPTP username"),gettext("PPTP password"),gettext("PPTP local IP address"),gettext("PPTP subnet"),gettext("PPTP remote IP address"),gettext("Dial on demand"),gettext("Idle timeout value")); + } else { + $reqdfields = explode(" ", "pptp_username pptp_password pptp_local pptp_subnet pptp_remote"); + $reqdfieldsn = array(gettext("PPTP username"),gettext("PPTP password"),gettext("PPTP local IP address"),gettext("PPTP subnet"),gettext("PPTP remote IP address")); + } + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + break; + case "l2tp": + if ($_POST['pptp_dialondemand']) { + $reqdfields = explode(" ", "pptp_username pptp_password pptp_remote pptp_dialondemand pptp_idletimeout"); + $reqdfieldsn = array(gettext("L2TP username"),gettext("L2TP password"),gettext("L2TP remote IP address"),gettext("Dial on demand"),gettext("Idle timeout value")); + } else { + $reqdfields = explode(" ", "pptp_username pptp_password pptp_remote"); + $reqdfieldsn = array(gettext("L2TP username"),gettext("L2TP password"),gettext("L2TP remote IP address")); + } + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + break; + } + switch(strtolower($_POST['type6'])) { + case "staticv6": + $reqdfields = explode(" ", "ipaddrv6 subnetv6 gatewayv6"); + $reqdfieldsn = array(gettext("IPv6 address"),gettext("Subnet bit count"),gettext("Gateway")); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + break; + case "none": + if(is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vip) { + if (is_ipaddrv6($vip['subnet']) && $vip['interface'] == $if) + $input_errors[] = gettext("This interface is referenced by IPv6 VIPs. Please delete those before setting the interface to 'none' configuration."); + } + } + case "dhcp6": + if (in_array($wancfg['ipaddrv6'], array())) + $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."),$_POST['type6']); + break; + case "6rd": + foreach ($ifdescrs as $ifent => $ifdescr) { + if ($if != $ifent && ($config[interfaces][$ifent]['ipaddrv6'] == $_POST['type6'])) { + if ($config[interfaces][$ifent]['prefix-6rd'] == $_POST['prefix-6rd']) { + $input_errors[] = gettext("You can only have one interface configured in 6rd with same prefix."); + break; + } + } + } + if (in_array($wancfg['ipaddrv6'], array())) + $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."),$_POST['type6']); + break; + case "6to4": + foreach ($ifdescrs as $ifent => $ifdescr) { + if ($if != $ifent && ($config[interfaces][$ifent]['ipaddrv6'] == $_POST['type6'])) { + $input_errors[] = sprintf(gettext("You can only have one interface configured as 6to4."),$_POST['type6']); + break; + } + } + if (in_array($wancfg['ipaddrv6'], array())) + $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."),$_POST['type6']); + break; + case "track6": + /* needs to check if $track6-prefix-id is used on another interface */ + if (in_array($wancfg['ipaddrv6'], array())) + $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."),$_POST['type6']); + + if ($_POST['track6-prefix-id--hex'] != "" && !is_numeric("0x" . $_POST['track6-prefix-id--hex'])) { + $input_errors[] = gettext("You must enter a valid hexadecimal number for the IPv6 prefix ID."); + } else { + $track6_prefix_id = intval($_POST['track6-prefix-id--hex'], 16); + if ($track6_prefix_id < 0 || $track6_prefix_id >= $ipv6_num_prefix_ids) { + $input_errors[] = gettext("You specified an IPv6 prefix ID that is out of range."); + } + } + break; + } + + + /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */ + $staticroutes = get_staticroutes(true); + $_POST['spoofmac'] = strtolower(str_replace("-", ":", $_POST['spoofmac'])); + if ($_POST['ipaddr']) { + if (!is_ipaddrv4($_POST['ipaddr'])) + $input_errors[] = gettext("A valid IPv4 address must be specified."); + else { + if (is_ipaddr_configured($_POST['ipaddr'], $if, true)) + $input_errors[] = gettext("This IPv4 address is being used by another interface or VIP."); + + /* Do not accept network or broadcast address, except if subnet is 31 or 32 */ + if ($_POST['subnet'] < 31) { + if ($_POST['ipaddr'] == gen_subnet($_POST['ipaddr'], $_POST['subnet'])) + $input_errors[] = gettext("This IPv4 address is the network address and cannot be used"); + else if ($_POST['ipaddr'] == gen_subnet_max($_POST['ipaddr'], $_POST['subnet'])) + $input_errors[] = gettext("This IPv4 address is the broadcast address and cannot be used"); + } + + foreach ($staticroutes as $route_subnet) { + list($network, $subnet) = explode("/", $route_subnet); + if ($_POST['subnet'] == $subnet && $network == gen_subnet($_POST['ipaddr'], $_POST['subnet'])) { + $input_errors[] = gettext("This IPv4 address conflicts with a Static Route."); + break; + } + unset($network, $subnet); + } + } + } + if ($_POST['ipaddrv6']) { + if (!is_ipaddrv6($_POST['ipaddrv6'])) + $input_errors[] = gettext("A valid IPv6 address must be specified."); + else { + if (is_ipaddr_configured($_POST['ipaddrv6'], $if, true)) + $input_errors[] = gettext("This IPv6 address is being used by another interface or VIP."); + + foreach ($staticroutes as $route_subnet) { + list($network, $subnet) = explode("/", $route_subnet); + if ($_POST['subnetv6'] == $subnet && $network == gen_subnetv6($_POST['ipaddrv6'], $_POST['subnetv6'])) { + $input_errors[] = gettext("This IPv6 address conflicts with a Static Route."); + break; + } + unset($network, $subnet); + } + } + } + if (($_POST['subnet'] && !is_numeric($_POST['subnet']))) + $input_errors[] = gettext("A valid subnet bit count must be specified."); + if (($_POST['subnetv6'] && !is_numeric($_POST['subnetv6']))) + $input_errors[] = gettext("A valid subnet bit count must be specified."); + if (($_POST['alias-address'] && !is_ipaddrv4($_POST['alias-address']))) + $input_errors[] = gettext("A valid alias IP address must be specified."); + if (($_POST['alias-subnet'] && !is_numeric($_POST['alias-subnet']))) + $input_errors[] = gettext("A valid alias subnet bit count must be specified."); + if ($_POST['dhcprejectfrom'] && !is_ipaddrv4($_POST['dhcprejectfrom'])) + $input_errors[] = gettext("A valid alias IP address must be specified to reject DHCP Leases from."); + if (($_POST['gateway'] != "none") || ($_POST['gatewayv6'] != "none")) { + $match = false; + foreach($a_gateways as $gateway) { + if(in_array($_POST['gateway'], $gateway)) { + $match = true; + } + } + foreach($a_gateways as $gateway) { + if(in_array($_POST['gatewayv6'], $gateway)) { + $match = true; + } + } + if(!$match) { + $input_errors[] = gettext("A valid gateway must be specified."); + } + } + if (($_POST['provider'] && !is_domain($_POST['provider']))) + $input_errors[] = gettext("The service name contains invalid characters."); + if (($_POST['pppoe_idletimeout'] != "") && !is_numericint($_POST['pppoe_idletimeout'])) + $input_errors[] = gettext("The idle timeout value must be an integer."); + if ($_POST['pppoe_resethour'] <> "" && !is_numericint($_POST['pppoe_resethour']) && + $_POST['pppoe_resethour'] >= 0 && $_POST['pppoe_resethour'] <=23) + $input_errors[] = gettext("A valid PPPoE reset hour must be specified (0-23)."); + if ($_POST['pppoe_resetminute'] <> "" && !is_numericint($_POST['pppoe_resetminute']) && + $_POST['pppoe_resetminute'] >= 0 && $_POST['pppoe_resetminute'] <=59) + $input_errors[] = gettext("A valid PPPoE reset minute must be specified (0-59)."); + if ($_POST['pppoe_resetdate'] <> "" && !is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))) + $input_errors[] = gettext("A valid PPPoE reset date must be specified (mm/dd/yyyy)."); + if (($_POST['pptp_local'] && !is_ipaddrv4($_POST['pptp_local']))) + $input_errors[] = gettext("A valid PPTP local IP address must be specified."); + if (($_POST['pptp_subnet'] && !is_numeric($_POST['pptp_subnet']))) + $input_errors[] = gettext("A valid PPTP subnet bit count must be specified."); + if (($_POST['pptp_remote'] && !is_ipaddrv4($_POST['pptp_remote']) && !is_hostname($_POST['gateway'][$iface]))) + $input_errors[] = gettext("A valid PPTP remote IP address must be specified."); + if (($_POST['pptp_idletimeout'] != "") && !is_numericint($_POST['pptp_idletimeout'])) + $input_errors[] = gettext("The idle timeout value must be an integer."); + if (($_POST['spoofmac'] && !is_macaddr($_POST['spoofmac']))) + $input_errors[] = gettext("A valid MAC address must be specified."); + if ($_POST['mtu']) { + if ($_POST['mtu'] < 576 || $_POST['mtu'] > 9000) + $input_errors[] = gettext("The MTU must be greater than 576 bytes and less than 9000."); + + if (stristr($wancfg['if'], "_vlan")) { + $realhwif_array = get_parent_interface($wancfg['if']); + // Need code to handle MLPPP if we ever use $realhwif for MLPPP handling + $parent_realhwif = $realhwif_array[0]; + $parent_if = convert_real_interface_to_friendly_interface_name($parent_realhwif); + if (!empty($parent_if) && !empty($config['interfaces'][$parent_if]['mtu'])) { + if ($_POST['mtu'] > intval($config['interfaces'][$parent_if]['mtu'])) + $input_errors[] = gettext("MTU of a vlan should not be bigger than parent interface."); + } + } else { + foreach ($config['interfaces'] as $idx => $ifdata) { + if (($idx == $if) || !preg_match('/_vlan[0-9]/', $ifdata['if'])) + continue; + + $realhwif_array = get_parent_interface($ifdata['if']); + // Need code to handle MLPPP if we ever use $realhwif for MLPPP handling + $parent_realhwif = $realhwif_array[0]; + + if ($parent_realhwif != $wancfg['if']) + continue; + + if (isset($ifdata['mtu']) && $ifdata['mtu'] > $_POST['mtu']) + $input_errors[] = sprintf(gettext("Interface %s (VLAN) has MTU set to a bigger value"), $ifdata['descr']); + } + } + } + if ($_POST['mss'] && ($_POST['mss'] < 576)) + $input_errors[] = gettext("The MSS must be greater than 576 bytes."); + /* Wireless interface? */ + if (isset($wancfg['wireless'])) { + $reqdfields = array("mode"); + $reqdfieldsn = array(gettext("Mode")); + if ($_POST['mode'] == 'hostap') { + $reqdfields[] = "ssid"; + $reqdfieldsn[] = gettext("SSID"); + } + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + check_wireless_mode(); + /* loop through keys and enforce size */ + for ($i = 1; $i <= 4; $i++) { + if ($_POST['key' . $i]) { + /* 64 bit */ + if (strlen($_POST['key' . $i]) == 5) + continue; + if (strlen($_POST['key' . $i]) == 10) { + /* hex key */ + if (stristr($_POST['key' . $i], "0x") == false) { + $_POST['key' . $i] = "0x" . $_POST['key' . $i]; + } + continue; + } + if (strlen($_POST['key' . $i]) == 12) { + /* hex key */ + if(stristr($_POST['key' . $i], "0x") == false) { + $_POST['key' . $i] = "0x" . $_POST['key' . $i]; + } + continue; + } + /* 128 bit */ + if (strlen($_POST['key' . $i]) == 13) + continue; + if (strlen($_POST['key' . $i]) == 26) { + /* hex key */ + if (stristr($_POST['key' . $i], "0x") == false) + $_POST['key' . $i] = "0x" . $_POST['key' . $i]; + continue; + } + if(strlen($_POST['key' . $i]) == 28) + continue; + $input_errors[] = gettext("Invalid WEP key size. Sizes should be 40 (64) bit keys or 104 (128) bit."); + break; + } + } + + if ($_POST['passphrase']) { + $passlen = strlen($_POST['passphrase']); + if ($passlen < 8 || $passlen > 63) + $input_errors[] = gettext("The length of the passphrase should be between 8 and 63 characters."); + } + } + if (!$input_errors) { + if ($wancfg['ipaddr'] != $_POST['type']) { + if (in_array($wancfg['ipaddr'], array("ppp", "pppoe", "pptp", "l2tp"))) { + $wancfg['if'] = $a_ppps[$pppid]['ports']; + unset($a_ppps[$pppid]); + } else if ($wancfg['ipaddr'] == "dhcp") { + kill_dhclient_process($wancfg['if']); + } + if ($wancfg['ipaddrv6'] == "dhcp6") { + $pid = find_dhcp6c_process($wancfg['if']); + if($pid) + posix_kill($pid, SIGTERM); + } + } + $ppp = array(); + if ($wancfg['ipaddr'] != "ppp") + unset($wancfg['ipaddr']); + if ($wancfg['ipaddrv6'] != "ppp") + unset($wancfg['ipaddrv6']); + unset($wancfg['subnet']); + unset($wancfg['gateway']); + unset($wancfg['subnetv6']); + unset($wancfg['gatewayv6']); + unset($wancfg['dhcphostname']); + unset($wancfg['dhcprejectfrom']); + unset($wancfg['dhcp6-duid']); + unset($wancfg['dhcp6-ia-pd-len']); + unset($wancfg['dhcp6-ia-pd-send-hint']); + unset($wancfg['dhcp6prefixonly']); + unset($wancfg['dhcp6usev4iface']); + unset($wancfg['track6-interface']); + unset($wancfg['track6-prefix-id']); + unset($wancfg['prefix-6rd']); + unset($wancfg['prefix-6rd-v4plen']); + unset($wancfg['gateway-6rd']); + + unset($wancfg['adv_dhcp_pt_timeout']); + unset($wancfg['adv_dhcp_pt_retry']); + unset($wancfg['adv_dhcp_pt_select_timeout']); + unset($wancfg['adv_dhcp_pt_reboot']); + unset($wancfg['adv_dhcp_pt_backoff_cutoff']); + unset($wancfg['adv_dhcp_pt_initial_interval']); + + unset($wancfg['adv_dhcp_pt_values']); + + unset($wancfg['adv_dhcp_send_options']); + unset($wancfg['adv_dhcp_request_options']); + unset($wancfg['adv_dhcp_required_options']); + unset($wancfg['adv_dhcp_option_modifiers']); + + unset($wancfg['adv_dhcp_config_advanced']); + unset($wancfg['adv_dhcp_config_file_override']); + unset($wancfg['adv_dhcp_config_file_override_path']); + + unset($wancfg['adv_dhcp6_interface_statement_send_options']); + unset($wancfg['adv_dhcp6_interface_statement_request_options']); + unset($wancfg['adv_dhcp6_interface_statement_information_only_enable']); + unset($wancfg['adv_dhcp6_interface_statement_script']); + + unset($wancfg['adv_dhcp6_id_assoc_statement_address_enable']); + unset($wancfg['adv_dhcp6_id_assoc_statement_address']); + unset($wancfg['adv_dhcp6_id_assoc_statement_address_id']); + unset($wancfg['adv_dhcp6_id_assoc_statement_address_pltime']); + unset($wancfg['adv_dhcp6_id_assoc_statement_address_vltime']); + + unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_enable']); + unset($wancfg['adv_dhcp6_id_assoc_statement_prefix']); + unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_id']); + unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime']); + unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime']); + + unset($wancfg['adv_dhcp6_prefix_interface_statement_sla_id']); + unset($wancfg['adv_dhcp6_prefix_interface_statement_sla_len']); + + unset($wancfg['adv_dhcp6_authentication_statement_authname']); + unset($wancfg['adv_dhcp6_authentication_statement_protocol']); + unset($wancfg['adv_dhcp6_authentication_statement_algorithm']); + unset($wancfg['adv_dhcp6_authentication_statement_rdm']); + + unset($wancfg['adv_dhcp6_key_info_statement_keyname']); + unset($wancfg['adv_dhcp6_key_info_statement_realm']); + unset($wancfg['adv_dhcp6_key_info_statement_keyid']); + unset($wancfg['adv_dhcp6_key_info_statement_secret']); + unset($wancfg['adv_dhcp6_key_info_statement_expire']); + + unset($wancfg['adv_dhcp6_config_advanced']); + unset($wancfg['adv_dhcp6_config_file_override']); + unset($wancfg['adv_dhcp6_config_file_override_path']); + + unset($wancfg['pppoe_password']); + unset($wancfg['pptp_username']); + unset($wancfg['pptp_password']); + unset($wancfg['provider']); + unset($wancfg['ondemand']); + unset($wancfg['timeout']); + if (empty($wancfg['pppoe']['pppoe-reset-type'])) + unset($wancfg['pppoe']['pppoe-reset-type']); + unset($wancfg['local']); + + unset($wancfg['remote']); + unset($a_ppps[$pppid]['apn']); + unset($a_ppps[$pppid]['phone']); + unset($a_ppps[$pppid]['localip']); + unset($a_ppps[$pppid]['subnet']); + unset($a_ppps[$pppid]['gateway']); + unset($a_ppps[$pppid]['pppoe-reset-type']); + unset($a_ppps[$pppid]['provider']); + + $wancfg['descr'] = remove_bad_chars($_POST['descr']); + $wancfg['enable'] = $_POST['enable'] == "yes" ? true : false; + + /* let return_gateways_array() do the magic on dynamic interfaces for us */ + switch($_POST['type']) { + case "staticv4": + $wancfg['ipaddr'] = $_POST['ipaddr']; + $wancfg['subnet'] = $_POST['subnet']; + if ($_POST['gateway'] != "none") { + $wancfg['gateway'] = $_POST['gateway']; + } + break; + case "dhcp": + $wancfg['ipaddr'] = "dhcp"; + $wancfg['dhcphostname'] = $_POST['dhcphostname']; + $wancfg['alias-address'] = $_POST['alias-address']; + $wancfg['alias-subnet'] = $_POST['alias-subnet']; + $wancfg['dhcprejectfrom'] = $_POST['dhcprejectfrom']; + + $wancfg['adv_dhcp_pt_timeout'] = $_POST['adv_dhcp_pt_timeout']; + $wancfg['adv_dhcp_pt_retry'] = $_POST['adv_dhcp_pt_retry']; + $wancfg['adv_dhcp_pt_select_timeout'] = $_POST['adv_dhcp_pt_select_timeout']; + $wancfg['adv_dhcp_pt_reboot'] = $_POST['adv_dhcp_pt_reboot']; + $wancfg['adv_dhcp_pt_backoff_cutoff'] = $_POST['adv_dhcp_pt_backoff_cutoff']; + $wancfg['adv_dhcp_pt_initial_interval'] = $_POST['adv_dhcp_pt_initial_interval']; + + $wancfg['adv_dhcp_pt_values'] = $_POST['adv_dhcp_pt_values']; + + $wancfg['adv_dhcp_send_options'] = $_POST['adv_dhcp_send_options']; + $wancfg['adv_dhcp_request_options'] = $_POST['adv_dhcp_request_options']; + $wancfg['adv_dhcp_required_options'] = $_POST['adv_dhcp_required_options']; + $wancfg['adv_dhcp_option_modifiers'] = $_POST['adv_dhcp_option_modifiers']; + + $wancfg['adv_dhcp_config_advanced'] = $_POST['adv_dhcp_config_advanced']; + $wancfg['adv_dhcp_config_file_override'] = $_POST['adv_dhcp_config_file_override']; + $wancfg['adv_dhcp_config_file_override_path'] = $_POST['adv_dhcp_config_file_override_path']; + + $wancfg['dhcp_plus'] = $_POST['dhcp_plus'] == "yes" ? true : false; + if($gateway_item) { + $a_gateways[] = $gateway_item; + } + break; + case "ppp": + $a_ppps[$pppid]['ptpid'] = $_POST['ptpid']; + $a_ppps[$pppid]['type'] = $_POST['type']; + $a_ppps[$pppid]['if'] = $_POST['type'].$_POST['ptpid']; + $a_ppps[$pppid]['ports'] = $_POST['port']; + $a_ppps[$pppid]['username'] = $_POST['username']; + $a_ppps[$pppid]['password'] = base64_encode($_POST['password']); + $a_ppps[$pppid]['phone'] = $_POST['phone']; + $a_ppps[$pppid]['apn'] = $_POST['apn']; + $wancfg['if'] = $_POST['type'] . $_POST['ptpid']; + $wancfg['ipaddr'] = $_POST['type']; + unset($a_ppps[$pppid]['ondemand']); + unset($a_ppps[$pppid]['idletimeout']); + break; + + case "pppoe": + $a_ppps[$pppid]['ptpid'] = $_POST['ptpid']; + $a_ppps[$pppid]['type'] = $_POST['type']; + $a_ppps[$pppid]['if'] = $_POST['type'].$_POST['ptpid']; + if (isset($_POST['ppp_port'])) + $a_ppps[$pppid]['ports'] = $_POST['ppp_port']; + else + $a_ppps[$pppid]['ports'] = $wancfg['if']; + $a_ppps[$pppid]['username'] = $_POST['pppoe_username']; + $a_ppps[$pppid]['password'] = base64_encode($_POST['pppoe_password']); + if (!empty($_POST['provider'])) + $a_ppps[$pppid]['provider'] = $_POST['provider']; + else + $a_ppps[$pppid]['provider'] = true; + $a_ppps[$pppid]['ondemand'] = $_POST['pppoe_dialondemand'] ? true : false; + if (!empty($_POST['pppoe_idletimeout'])) + $a_ppps[$pppid]['idletimeout'] = $_POST['pppoe_idletimeout']; + else + unset($a_ppps[$pppid]['idletimeout']); + + if (!empty($_POST['pppoe-reset-type'])) + $a_ppps[$pppid]['pppoe-reset-type'] = $_POST['pppoe-reset-type']; + else + unset($a_ppps[$pppid]['pppoe-reset-type']); + $wancfg['if'] = $_POST['type'].$_POST['ptpid']; + $wancfg['ipaddr'] = $_POST['type']; + if($gateway_item) { + $a_gateways[] = $gateway_item; + } + + break; + case "pptp": + case "l2tp": + $a_ppps[$pppid]['ptpid'] = $_POST['ptpid']; + $a_ppps[$pppid]['type'] = $_POST['type']; + $a_ppps[$pppid]['if'] = $_POST['type'].$_POST['ptpid']; + if (isset($_POST['ppp_port'])) + $a_ppps[$pppid]['ports'] = $_POST['ppp_port']; + else + $a_ppps[$pppid]['ports'] = $wancfg['if']; + $a_ppps[$pppid]['username'] = $_POST['pptp_username']; + $a_ppps[$pppid]['password'] = base64_encode($_POST['pptp_password']); + $a_ppps[$pppid]['localip'] = $_POST['pptp_local']; + $a_ppps[$pppid]['subnet'] = $_POST['pptp_subnet']; + $a_ppps[$pppid]['gateway'] = $_POST['pptp_remote']; + $a_ppps[$pppid]['ondemand'] = $_POST['pptp_dialondemand'] ? true : false; + if (!empty($_POST['pptp_idletimeout'])) + $a_ppps[$pppid]['idletimeout'] = $_POST['pptp_idletimeout']; + else + unset($a_ppps[$pppid]['idletimeout']); + $wancfg['if'] = $_POST['type'].$_POST['ptpid']; + $wancfg['ipaddr'] = $_POST['type']; + if($gateway_item) { + $a_gateways[] = $gateway_item; + } + break; + case "none": + break; + } + switch($_POST['type6']) { + case "staticv6": + $wancfg['ipaddrv6'] = $_POST['ipaddrv6']; + $wancfg['subnetv6'] = $_POST['subnetv6']; + if ($_POST['gatewayv6'] != "none") { + $wancfg['gatewayv6'] = $_POST['gatewayv6']; + } + break; + case "slaac": + $wancfg['ipaddrv6'] = "slaac"; + break; + case "dhcp6": + $wancfg['ipaddrv6'] = "dhcp6"; + $wancfg['dhcp6-duid'] = $_POST['dhcp6-duid']; + $wancfg['dhcp6-ia-pd-len'] = $_POST['dhcp6-ia-pd-len']; + if($_POST['dhcp6-ia-pd-send-hint'] == "yes") + $wancfg['dhcp6-ia-pd-send-hint'] = true; + if($_POST['dhcp6prefixonly'] == "yes") + $wancfg['dhcp6prefixonly'] = true; + if($_POST['dhcp6usev4iface'] == "yes") + $wancfg['dhcp6usev4iface'] = true; + + $wancfg['adv_dhcp6_interface_statement_send_options'] = $_POST['adv_dhcp6_interface_statement_send_options']; + $wancfg['adv_dhcp6_interface_statement_request_options'] = $_POST['adv_dhcp6_interface_statement_request_options']; + $wancfg['adv_dhcp6_interface_statement_information_only_enable'] = $_POST['adv_dhcp6_interface_statement_information_only_enable']; + $wancfg['adv_dhcp6_interface_statement_script'] = $_POST['adv_dhcp6_interface_statement_script']; + + $wancfg['adv_dhcp6_id_assoc_statement_address_enable'] = $_POST['adv_dhcp6_id_assoc_statement_address_enable']; + $wancfg['adv_dhcp6_id_assoc_statement_address'] = $_POST['adv_dhcp6_id_assoc_statement_address']; + $wancfg['adv_dhcp6_id_assoc_statement_address_id'] = $_POST['adv_dhcp6_id_assoc_statement_address_id']; + $wancfg['adv_dhcp6_id_assoc_statement_address_pltime'] = $_POST['adv_dhcp6_id_assoc_statement_address_pltime']; + $wancfg['adv_dhcp6_id_assoc_statement_address_vltime'] = $_POST['adv_dhcp6_id_assoc_statement_address_vltime']; + + $wancfg['adv_dhcp6_id_assoc_statement_prefix_enable'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_enable']; + $wancfg['adv_dhcp6_id_assoc_statement_prefix'] = $_POST['adv_dhcp6_id_assoc_statement_prefix']; + $wancfg['adv_dhcp6_id_assoc_statement_prefix_id'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_id']; + $wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_pltime']; + $wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_vltime']; + + $wancfg['adv_dhcp6_prefix_interface_statement_sla_id'] = $_POST['adv_dhcp6_prefix_interface_statement_sla_id']; + $wancfg['adv_dhcp6_prefix_interface_statement_sla_len'] = $_POST['adv_dhcp6_prefix_interface_statement_sla_len']; + + $wancfg['adv_dhcp6_authentication_statement_authname'] = $_POST['adv_dhcp6_authentication_statement_authname']; + $wancfg['adv_dhcp6_authentication_statement_protocol'] = $_POST['adv_dhcp6_authentication_statement_protocol']; + $wancfg['adv_dhcp6_authentication_statement_algorithm'] = $_POST['adv_dhcp6_authentication_statement_algorithm']; + $wancfg['adv_dhcp6_authentication_statement_rdm'] = $_POST['adv_dhcp6_authentication_statement_rdm']; + + $wancfg['adv_dhcp6_key_info_statement_keyname'] = $_POST['adv_dhcp6_key_info_statement_keyname']; + $wancfg['adv_dhcp6_key_info_statement_realm'] = $_POST['adv_dhcp6_key_info_statement_realm']; + $wancfg['adv_dhcp6_key_info_statement_keyid'] = $_POST['adv_dhcp6_key_info_statement_keyid']; + $wancfg['adv_dhcp6_key_info_statement_secret'] = $_POST['adv_dhcp6_key_info_statement_secret']; + $wancfg['adv_dhcp6_key_info_statement_expire'] = $_POST['adv_dhcp6_key_info_statement_expire']; + + $wancfg['adv_dhcp6_config_advanced'] = $_POST['adv_dhcp6_config_advanced']; + $wancfg['adv_dhcp6_config_file_override'] = $_POST['adv_dhcp6_config_file_override']; + $wancfg['adv_dhcp6_config_file_override_path'] = $_POST['adv_dhcp6_config_file_override_path']; + + if($gateway_item) { + $a_gateways[] = $gateway_item; + } + break; + case "6rd": + $wancfg['ipaddrv6'] = "6rd"; + $wancfg['prefix-6rd'] = $_POST['prefix-6rd']; + $wancfg['prefix-6rd-v4plen'] = $_POST['prefix-6rd-v4plen']; + $wancfg['gateway-6rd'] = $_POST['gateway-6rd']; + if($gateway_item) { + $a_gateways[] = $gateway_item; + } + break; + case "6to4": + $wancfg['ipaddrv6'] = "6to4"; + break; + case "track6": + $wancfg['ipaddrv6'] = "track6"; + $wancfg['track6-interface'] = $_POST['track6-interface']; + if ($_POST['track6-prefix-id--hex'] === "") + $wancfg['track6-prefix-id'] = 0; + else if (is_numeric("0x" . $_POST['track6-prefix-id--hex'])) + $wancfg['track6-prefix-id'] = intval($_POST['track6-prefix-id--hex'], 16); + else + $wancfg['track6-prefix-id'] = 0; + break; + case "none": + break; + } + handle_pppoe_reset($_POST); + + if($_POST['blockpriv'] == "yes") { + $wancfg['blockpriv'] = true; + } else { + unset($wancfg['blockpriv']); + } + if($_POST['blockbogons'] == "yes") { + $wancfg['blockbogons'] = true; + } else { + unset($wancfg['blockbogons']); + } + $wancfg['spoofmac'] = $_POST['spoofmac']; + if (empty($_POST['mtu'])) { + unset($wancfg['mtu']); + } else { + $wancfg['mtu'] = $_POST['mtu']; + } + if (empty($_POST['mss'])) { + unset($wancfg['mss']); + } else { + $wancfg['mss'] = $_POST['mss']; + } + if (empty($_POST['mediaopt'])) { + unset($wancfg['media']); + unset($wancfg['mediaopt']); + } else { + $mediaopts = explode(' ', $_POST['mediaopt']); + if ($mediaopts[0] != ''){ $wancfg['media'] = $mediaopts[0]; } + if ($mediaopts[1] != ''){ $wancfg['mediaopt'] = $mediaopts[1]; } + else { unset($wancfg['mediaopt']); } + } + if (isset($wancfg['wireless'])) { + handle_wireless_post(); + } + + conf_mount_ro(); + write_config(); + + if (file_exists("{$g['tmp_path']}/.interfaces.apply")) { + $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply")); + } else { + $toapplylist = array(); + } + $toapplylist[$if]['ifcfg'] = $old_wancfg; + $toapplylist[$if]['ppps'] = $old_ppps; + file_put_contents("{$g['tmp_path']}/.interfaces.apply", serialize($toapplylist)); + + mark_subsystem_dirty('interfaces'); + + /* regenerate cron settings/crontab file */ + configure_cron(); + + header("Location: interfaces.php?if={$if}"); + exit; + } + +} // end if($_POST) + +function handle_wireless_post() { + global $_POST, $config, $g, $wancfg, $if, $wl_countries_attr, $wlanbaseif; + if (!is_array($wancfg['wireless'])) + $wancfg['wireless'] = array(); + $wancfg['wireless']['standard'] = $_POST['standard']; + $wancfg['wireless']['mode'] = $_POST['mode']; + $wancfg['wireless']['protmode'] = $_POST['protmode']; + $wancfg['wireless']['ssid'] = $_POST['ssid']; + $wancfg['wireless']['channel'] = $_POST['channel']; + $wancfg['wireless']['authmode'] = $_POST['authmode']; + $wancfg['wireless']['txpower'] = $_POST['txpower']; + $wancfg['wireless']['distance'] = $_POST['distance']; + $wancfg['wireless']['regdomain'] = $_POST['regdomain']; + $wancfg['wireless']['regcountry'] = $_POST['regcountry']; + $wancfg['wireless']['reglocation'] = $_POST['reglocation']; + if (!empty($wancfg['wireless']['regdomain']) && !empty($wancfg['wireless']['regcountry'])) { + foreach($wl_countries_attr as $wl_country) { + if ($wancfg['wireless']['regcountry'] == $wl_country['ID']) { + $wancfg['wireless']['regdomain'] = $wl_country['rd'][0]['REF']; + break; + } + } + } + if (!is_array($wancfg['wireless']['wpa'])) + $wancfg['wireless']['wpa'] = array(); + $wancfg['wireless']['wpa']['macaddr_acl'] = $_POST['macaddr_acl']; + $wancfg['wireless']['wpa']['auth_algs'] = $_POST['auth_algs']; + $wancfg['wireless']['wpa']['wpa_mode'] = $_POST['wpa_mode']; + $wancfg['wireless']['wpa']['wpa_key_mgmt'] = $_POST['wpa_key_mgmt']; + $wancfg['wireless']['wpa']['wpa_pairwise'] = $_POST['wpa_pairwise']; + $wancfg['wireless']['wpa']['wpa_group_rekey'] = $_POST['wpa_group_rekey']; + $wancfg['wireless']['wpa']['wpa_gmk_rekey'] = $_POST['wpa_gmk_rekey']; + $wancfg['wireless']['wpa']['passphrase'] = $_POST['passphrase']; + $wancfg['wireless']['wpa']['ext_wpa_sw'] = $_POST['ext_wpa_sw']; + $wancfg['wireless']['auth_server_addr'] = $_POST['auth_server_addr']; + $wancfg['wireless']['auth_server_port'] = $_POST['auth_server_port']; + $wancfg['wireless']['auth_server_shared_secret'] = $_POST['auth_server_shared_secret']; + $wancfg['wireless']['auth_server_addr2'] = $_POST['auth_server_addr2']; + $wancfg['wireless']['auth_server_port2'] = $_POST['auth_server_port2']; + $wancfg['wireless']['auth_server_shared_secret2'] = $_POST['auth_server_shared_secret2']; + + if ($_POST['persistcommonwireless'] == "yes") { + if (!is_array($config['wireless'])) + $config['wireless'] = array(); + if (!is_array($config['wireless']['interfaces'])) + $config['wireless']['interfaces'] = array(); + if (!is_array($config['wireless']['interfaces'][$wlanbaseif])) + $config['wireless']['interfaces'][$wlanbaseif] = array(); + } else if (isset($config['wireless']['interfaces'][$wlanbaseif])) + unset($config['wireless']['interfaces'][$wlanbaseif]); + if (isset($_POST['diversity']) && is_numeric($_POST['diversity'])) + $wancfg['wireless']['diversity'] = $_POST['diversity']; + else if (isset($wancfg['wireless']['diversity'])) + unset($wancfg['wireless']['diversity']); + if (isset($_POST['txantenna']) && is_numeric($_POST['txantenna'])) + $wancfg['wireless']['txantenna'] = $_POST['txantenna']; + else if (isset($wancfg['wireless']['txantenna'])) + unset($wancfg['wireless']['txantenna']); + if (isset($_POST['rxantenna']) && is_numeric($_POST['rxantenna'])) + $wancfg['wireless']['rxantenna'] = $_POST['rxantenna']; + else if (isset($wancfg['wireless']['rxantenna'])) + unset($wancfg['wireless']['rxantenna']); + if ($_POST['hidessid_enable'] == "yes") + $wancfg['wireless']['hidessid']['enable'] = true; + else if (isset($wancfg['wireless']['hidessid']['enable'])) + unset($wancfg['wireless']['hidessid']['enable']); + if ($_POST['mac_acl_enable'] == "yes") + $wancfg['wireless']['wpa']['mac_acl_enable'] = true; + else if (isset($wancfg['wireless']['wpa']['mac_acl_enable'])) + unset($wancfg['wireless']['wpa']['mac_acl_enable']); + if ($_POST['rsn_preauth'] == "yes") + $wancfg['wireless']['wpa']['rsn_preauth'] = true; + else + unset($wancfg['wireless']['wpa']['rsn_preauth']); + if ($_POST['ieee8021x'] == "yes") + $wancfg['wireless']['wpa']['ieee8021x']['enable'] = true; + else if (isset($wancfg['wireless']['wpa']['ieee8021x']['enable'])) + unset($wancfg['wireless']['wpa']['ieee8021x']['enable']); + if ($_POST['wpa_strict_rekey'] == "yes") + $wancfg['wireless']['wpa']['wpa_strict_rekey'] = true; + else if (isset($wancfg['wireless']['wpa']['wpa_strict_rekey'])) + unset($wancfg['wireless']['wpa']['wpa_strict_rekey']); + if ($_POST['debug_mode'] == "yes") + $wancfg['wireless']['wpa']['debug_mode'] = true; + else if (isset($wancfg['wireless']['wpa']['debug_mode'])) + sunset($wancfg['wireless']['wpa']['debug_mode']); + if ($_POST['wpa_enable'] == "yes") + $wancfg['wireless']['wpa']['enable'] = $_POST['wpa_enable'] = true; + else if (isset($wancfg['wireless']['wpa']['enable'])) + unset($wancfg['wireless']['wpa']['enable']); + if ($_POST['wep_enable'] == "yes") { + if (!is_array($wancfg['wireless']['wep'])) + $wancfg['wireless']['wep'] = array(); + $wancfg['wireless']['wep']['enable'] = $_POST['wep_enable'] = true; + } else if (isset($wancfg['wireless']['wep'])) + unset($wancfg['wireless']['wep']); + if ($_POST['wme_enable'] == "yes") { + if (!is_array($wancfg['wireless']['wme'])) + $wancfg['wireless']['wme'] = array(); + $wancfg['wireless']['wme']['enable'] = $_POST['wme_enable'] = true; + } else if (isset($wancfg['wireless']['wme']['enable'])) + unset($wancfg['wireless']['wme']['enable']); + if ($_POST['puremode'] == "11g") { + if (!is_array($wancfg['wireless']['pureg'])) + $wancfg['wireless']['pureg'] = array(); + $wancfg['wireless']['pureg']['enable'] = true; + } else if ($_POST['puremode'] == "11n") { + if (!is_array($wancfg['wireless']['puren'])) + $wancfg['wireless']['puren'] = array(); + $wancfg['wireless']['puren']['enable'] = true; + } else { + if (isset($wancfg['wireless']['pureg'])) + unset($wancfg['wireless']['pureg']); + if (isset($wancfg['wireless']['puren'])) + unset($wancfg['wireless']['puren']); + } + if ($_POST['apbridge_enable'] == "yes") { + if (!is_array($wancfg['wireless']['apbridge'])) + $wancfg['wireless']['apbridge'] = array(); + $wancfg['wireless']['apbridge']['enable'] = $_POST['apbridge_enable'] = true; + } else if (isset($wancfg['wireless']['apbridge']['enable'])) + unset($wancfg['wireless']['apbridge']['enable']); + if ($_POST['standard'] == "11g Turbo" || $_POST['standard'] == "11a Turbo") { + if (!is_array($wancfg['wireless']['turbo'])) + $wancfg['wireless']['turbo'] = array(); + $wancfg['wireless']['turbo']['enable'] = true; + } else if (isset($wancfg['wireless']['turbo']['enable'])) + unset($wancfg['wireless']['turbo']['enable']); + $wancfg['wireless']['wep']['key'] = array(); + for ($i = 1; $i <= 4; $i++) { + if ($_POST['key' . $i]) { + $newkey = array(); + $newkey['value'] = $_POST['key' . $i]; + if ($_POST['txkey'] == $i) + $newkey['txkey'] = true; + $wancfg['wireless']['wep']['key'][] = $newkey; + } + } + interface_sync_wireless_clones($wancfg, true); +} + +function check_wireless_mode() { + global $_POST, $config, $g, $wlan_modes, $wancfg, $if, $wlanif, $wlanbaseif, $old_wireless_mode, $input_errors; + + if ($wancfg['wireless']['mode'] == $_POST['mode']) + return; + + if (does_interface_exist(interface_get_wireless_clone($wlanbaseif))) + $clone_count = 1; + else + $clone_count = 0; + if (isset($config['wireless']['clone']) && is_array($config['wireless']['clone'])) { + foreach ($config['wireless']['clone'] as $clone) { + if ($clone['if'] == $wlanbaseif) + $clone_count++; + } + } + if ($clone_count > 1) { + $old_wireless_mode = $wancfg['wireless']['mode']; + $wancfg['wireless']['mode'] = $_POST['mode']; + if (!interface_wireless_clone("{$wlanif}_", $wancfg)) { + $input_errors[] = sprintf(gettext("Unable to change mode to %s. You may already have the maximum number of wireless clones supported in this mode."), $wlan_modes[$wancfg['wireless']['mode']]); + } else { + mwexec("/sbin/ifconfig " . escapeshellarg($wlanif) . "_ destroy"); + } + $wancfg['wireless']['mode'] = $old_wireless_mode; + } +} + +// Find all possible media options for the interface +$mediaopts_list = array(); +$intrealname = $config['interfaces'][$if]['if']; +exec("/sbin/ifconfig -m $intrealname | grep \"media \"", $mediaopts); +foreach ($mediaopts as $mediaopt){ + preg_match("/media (.*)/", $mediaopt, $matches); + if (preg_match("/(.*) mediaopt (.*)/", $matches[1], $matches1)){ + // there is media + mediaopt like "media 1000baseT mediaopt full-duplex" + array_push($mediaopts_list, $matches1[1] . " " . $matches1[2]); + }else{ + // there is only media like "media 1000baseT" + array_push($mediaopts_list, $matches[1]); + } +} + +$pgtitle = array(gettext("Interfaces"), $pconfig['descr']); +$shortcut_section = "interfaces"; + +$closehead = false; +include("head.inc"); +$types4 = array("none" => gettext("None"), "staticv4" => gettext("Static IPv4"), "dhcp" => gettext("DHCP"), "ppp" => gettext("PPP"), "pppoe" => gettext("PPPoE"), "pptp" => gettext("PPTP"), "l2tp" => gettext("L2TP")); +$types6 = array("none" => gettext("None"), "staticv6" => gettext("Static IPv6"), "dhcp6" => gettext("DHCP6"), "slaac" => gettext("SLAAC"), "6rd" => gettext("6rd Tunnel"), "6to4" => gettext("6to4 Tunnel"), "track6" => gettext("Track Interface")); + +?> + + + + + + + + + + + + +

    +

    ".gettext("You must apply the changes in order for them to take effect.")."

    ".gettext("Don't forget to adjust the DHCP Server range if needed after applying."));?>


    + + + + + + +
    +
    + + + + + + + + +
    + onclick="show_allcfg(this);" /> + +
    + + + + + + + +
    +   + +
    + " /> + " onclick="window.location.href=''" /> + + + + + +
    +
    +
    + + + + + diff --git a/usr/local/www/interfaces_assign.php b/usr/local/www/interfaces_assign.php new file mode 100644 index 000000000..a1c9c3edc --- /dev/null +++ b/usr/local/www/interfaces_assign.php @@ -0,0 +1,561 @@ +. + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /bin/rm + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-interfaces-assignnetworkports +##|*NAME=Interfaces: Assign network ports page +##|*DESCR=Allow access to the 'Interfaces: Assign network ports' page. +##|*MATCH=interfaces_assign.php* +##|-PRIV + +$pgtitle = array(gettext("Interfaces"),gettext("Assign network ports")); +$shortcut_section = "interfaces"; + +require("guiconfig.inc"); +require("functions.inc"); +require_once("filter.inc"); +require("shaper.inc"); +require("ipsec.inc"); +require("vpn.inc"); +require("captiveportal.inc"); +require_once("rrd.inc"); + +function interface_assign_description($portinfo, $portname) { + if ($portinfo['isvlan']) { + $descr = sprintf(gettext('VLAN %1$s on %2$s'),$portinfo['tag'],$portinfo['if']); + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + } elseif ($portinfo['iswlclone']) { + $descr = $portinfo['cloneif']; + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + } elseif ($portinfo['isppp']) { + $descr = $portinfo['descr']; + } elseif ($portinfo['isbridge']) { + $descr = strtoupper($portinfo['bridgeif']); + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + } elseif ($portinfo['isgre']) { + $descr = "GRE {$portinfo['remote-addr']}"; + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + } elseif ($portinfo['isgif']) { + $descr = "GIF {$portinfo['remote-addr']}"; + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + } elseif ($portinfo['islagg']) { + $descr = strtoupper($portinfo['laggif']); + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + } elseif ($portinfo['isqinq']) { + $descr = $portinfo['descr']; + } elseif (substr($portname, 0, 4) == 'ovpn') { + $descr = $portname . " (" . $ovpn_descrs[substr($portname, 5)] . ")"; + } else + $descr = $portname . " (" . $portinfo['mac'] . ")"; + + return htmlspecialchars($descr); +} + +/* + In this file, "port" refers to the physical port name, + while "interface" refers to LAN, WAN, or OPTn. +*/ + +/* get list without VLAN interfaces */ +$portlist = get_interface_list(); + +/* add wireless clone interfaces */ +if (is_array($config['wireless']['clone']) && count($config['wireless']['clone'])) { + foreach ($config['wireless']['clone'] as $clone) { + $portlist[$clone['cloneif']] = $clone; + $portlist[$clone['cloneif']]['iswlclone'] = true; + } +} + +/* add VLAN interfaces */ +if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { + foreach ($config['vlans']['vlan'] as $vlan) { + $portlist[$vlan['vlanif']] = $vlan; + $portlist[$vlan['vlanif']]['isvlan'] = true; + } +} + +/* add Bridge interfaces */ +if (is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) { + foreach ($config['bridges']['bridged'] as $bridge) { + $portlist[$bridge['bridgeif']] = $bridge; + $portlist[$bridge['bridgeif']]['isbridge'] = true; + } +} + +/* add GIF interfaces */ +if (is_array($config['gifs']['gif']) && count($config['gifs']['gif'])) { + foreach ($config['gifs']['gif'] as $gif) { + $portlist[$gif['gifif']] = $gif; + $portlist[$gif['gifif']]['isgif'] = true; + } +} + +/* add GRE interfaces */ +if (is_array($config['gres']['gre']) && count($config['gres']['gre'])) { + foreach ($config['gres']['gre'] as $gre) { + $portlist[$gre['greif']] = $gre; + $portlist[$gre['greif']]['isgre'] = true; + } +} + +/* add LAGG interfaces */ +if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) { + foreach ($config['laggs']['lagg'] as $lagg) { + $portlist[$lagg['laggif']] = $lagg; + $portlist[$lagg['laggif']]['islagg'] = true; + /* LAGG members cannot be assigned */ + $lagifs = explode(',', $lagg['members']); + foreach ($lagifs as $lagif) + if (isset($portlist[$lagif])) + unset($portlist[$lagif]); + } +} + +/* add QinQ interfaces */ +if (is_array($config['qinqs']['qinqentry']) && count($config['qinqs']['qinqentry'])) { + foreach ($config['qinqs']['qinqentry'] as $qinq) { + $portlist["vlan{$qinq['tag']}"]['descr'] = "VLAN {$qinq['tag']}"; + $portlist["vlan{$qinq['tag']}"]['isqinq'] = true; + /* QinQ members */ + $qinqifs = explode(' ', $qinq['members']); + foreach ($qinqifs as $qinqif) { + $portlist["vlan{$qinq['tag']}_{$qinqif}"]['descr'] = "QinQ {$qinqif}"; + $portlist["vlan{$qinq['tag']}_{$qinqif}"]['isqinq'] = true; + } + } +} + +/* add PPP interfaces */ +if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($config['ppps']['ppp'] as $pppid => $ppp) { + $portname = $ppp['if']; + $portlist[$portname] = $ppp; + $portlist[$portname]['isppp'] = true; + $ports_base = basename($ppp['ports']); + if (isset($ppp['descr'])) + $portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['descr']}"; + else if (isset($ppp['username'])) + $portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['username']}"; + else + $portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base})"; + } +} + +$ovpn_descrs = array(); +if (is_array($config['openvpn'])) { + if (is_array($config['openvpn']['openvpn-server'])) + foreach ($config['openvpn']['openvpn-server'] as $s) + $ovpn_descrs[$s['vpnid']] = $s['description']; + if (is_array($config['openvpn']['openvpn-client'])) + foreach ($config['openvpn']['openvpn-client'] as $c) + $ovpn_descrs[$c['vpnid']] = $c['description']; +} + +if (isset($_POST['add_x']) && isset($_POST['if_add'])) { + /* Be sure this port is not being used */ + $portused = false; + foreach ($config['interfaces'] as $ifname => $ifdata) { + if ($ifdata['if'] == $_PORT['if_add']) { + $portused = true; + break; + } + } + + if ($portused === false) { + /* find next free optional interface number */ + if(!$config['interfaces']['lan']) { + $newifname = gettext("lan"); + $descr = gettext("LAN"); + } else { + for ($i = 1; $i <= count($config['interfaces']); $i++) { + if (!$config['interfaces']["opt{$i}"]) + break; + } + $newifname = 'opt' . $i; + $descr = "OPT" . $i; + } + + $config['interfaces'][$newifname] = array(); + $config['interfaces'][$newifname]['descr'] = $descr; + $config['interfaces'][$newifname]['if'] = $_POST['if_add']; + if (preg_match($g['wireless_regex'], $_POST['if_add'])) { + $config['interfaces'][$newifname]['wireless'] = array(); + interface_sync_wireless_clones($config['interfaces'][$newifname], false); + } + + uksort($config['interfaces'], "compare_interface_friendly_names"); + + /* XXX: Do not remove this. */ + unlink_if_exists("{$g['tmp_path']}/config.cache"); + + write_config(); + + $savemsg = gettext("Interface has been added."); + } + +} else if (isset($_POST['apply'])) { + if (file_exists("/var/run/interface_mismatch_reboot_needed")) { + system_reboot(); + $rebootingnow = true; + } else { + write_config(); + + $retval = filter_configure(); + $savemsg = get_std_save_message($retval); + + if (stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + } + +} else if (isset($_POST['Submit'])) { + + unset($input_errors); + + /* input validation */ + + /* Build a list of the port names so we can see how the interfaces map */ + $portifmap = array(); + foreach ($portlist as $portname => $portinfo) + $portifmap[$portname] = array(); + + /* Go through the list of ports selected by the user, + build a list of port-to-interface mappings in portifmap */ + foreach ($_POST as $ifname => $ifport) { + if (($ifname == 'lan') || ($ifname == 'wan') || (substr($ifname, 0, 3) == 'opt')) + $portifmap[$ifport][] = strtoupper($ifname); + } + + /* Deliver error message for any port with more than one assignment */ + foreach ($portifmap as $portname => $ifnames) { + if (count($ifnames) > 1) { + $errstr = sprintf(gettext('Port %1$s '. + ' was assigned to %2$s' . + ' interfaces:'), $portname, count($ifnames)); + + foreach ($portifmap[$portname] as $ifn) + $errstr .= " " . $ifn; + + $input_errors[] = $errstr; + } else if (count($ifnames) == 1 && preg_match('/^bridge[0-9]/', $portname) && is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) { + foreach ($config['bridges']['bridged'] as $bridge) { + if ($bridge['bridgeif'] != $portname) + continue; + + $members = explode(",", strtoupper($bridge['members'])); + foreach ($members as $member) { + if ($member == $ifnames[0]) { + $input_errors[] = sprintf(gettext("You cannot set port %s to interface %s because this interface is a member of %s."), $portname, $member, $portname); + break; + } + } + } + } + } + + if (is_array($config['vlans']['vlan'])) { + foreach ($config['vlans']['vlan'] as $vlan) { + if (does_interface_exist($vlan['if']) == false) + $input_errors[] = "Vlan parent interface {$vlan['if']} does not exist anymore so vlan id {$vlan['tag']} cannot be created please fix the issue before continuing."; + } + } + + if (!$input_errors) { + /* No errors detected, so update the config */ + foreach ($_POST as $ifname => $ifport) { + + if (($ifname == 'lan') || ($ifname == 'wan') || (substr($ifname, 0, 3) == 'opt')) { + + if (!is_array($ifport)) { + $reloadif = false; + if (!empty($config['interfaces'][$ifname]['if']) && $config['interfaces'][$ifname]['if'] <> $ifport) { + interface_bring_down($ifname); + /* Mark this to be reconfigured in any case. */ + $reloadif = true; + } + $config['interfaces'][$ifname]['if'] = $ifport; + if (isset($portlist[$ifport]['isppp'])) + $config['interfaces'][$ifname]['ipaddr'] = $portlist[$ifport]['type']; + + if (substr($ifport, 0, 3) == 'gre' || substr($ifport, 0, 3) == 'gif') { + unset($config['interfaces'][$ifname]['ipaddr']); + unset($config['interfaces'][$ifname]['subnet']); + unset($config['interfaces'][$ifname]['ipaddrv6']); + unset($config['interfaces'][$ifname]['subnetv6']); + } + + /* check for wireless interfaces, set or clear ['wireless'] */ + if (preg_match($g['wireless_regex'], $ifport)) { + if (!is_array($config['interfaces'][$ifname]['wireless'])) + $config['interfaces'][$ifname]['wireless'] = array(); + } else { + unset($config['interfaces'][$ifname]['wireless']); + } + + /* make sure there is a descr for all interfaces */ + if (!isset($config['interfaces'][$ifname]['descr'])) + $config['interfaces'][$ifname]['descr'] = strtoupper($ifname); + + if ($reloadif == true) { + if (preg_match($g['wireless_regex'], $ifport)) + interface_sync_wireless_clones($config['interfaces'][$ifname], false); + /* Reload all for the interface. */ + interface_configure($ifname, true); + } + } + } + } + + write_config(); + + enable_rrd_graphing(); + } +} else { + /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */ + unset($delbtn); + foreach ($_POST as $pn => $pd) { + if (preg_match("/del_(.+)_x/", $pn, $matches)) + $delbtn = $matches[1]; + } + + if (isset($delbtn)) { + $id = $delbtn; + + if (link_interface_to_group($id)) + $input_errors[] = gettext("The interface is part of a group. Please remove it from the group to continue"); + else if (link_interface_to_bridge($id)) + $input_errors[] = gettext("The interface is part of a bridge. Please remove it from the bridge to continue"); + else if (link_interface_to_gre($id)) + $input_errors[] = gettext("The interface is part of a gre tunnel. Please delete the tunnel to continue"); + else if (link_interface_to_gif($id)) + $input_errors[] = gettext("The interface is part of a gif tunnel. Please delete the tunnel to continue"); + else { + unset($config['interfaces'][$id]['enable']); + $realid = get_real_interface($id); + interface_bring_down($id); /* down the interface */ + + unset($config['interfaces'][$id]); /* delete the specified OPTn or LAN*/ + + if (is_array($config['dhcpd']) && is_array($config['dhcpd'][$id])) { + unset($config['dhcpd'][$id]); + services_dhcpd_configure(); + } + + if (count($config['filter']['rule']) > 0) { + foreach ($config['filter']['rule'] as $x => $rule) { + if($rule['interface'] == $id) + unset($config['filter']['rule'][$x]); + } + } + if (is_array($config['nat']['rule']) && count($config['nat']['rule']) > 0) { + foreach ($config['nat']['rule'] as $x => $rule) { + if($rule['interface'] == $id) + unset($config['nat']['rule'][$x]['interface']); + } + } + + write_config(); + + /* If we are in firewall/routing mode (not single interface) + * then ensure that we are not running DHCP on the wan which + * will make a lot of ISP's unhappy. + */ + if($config['interfaces']['lan'] && $config['dhcpd']['wan']) { + unset($config['dhcpd']['wan']); + } + + link_interface_to_vlans($realid, "update"); + + $savemsg = gettext("Interface has been deleted."); + } + } +} + +/* Create a list of unused ports */ +$unused_portlist = array(); +foreach ($portlist as $portname => $portinfo) { + $portused = false; + foreach ($config['interfaces'] as $ifname => $ifdata) { + if ($ifdata['if'] == $portname) { + $portused = true; + break; + } + } + if ($portused === false) + $unused_portlist[$portname] = $portinfo; +} + +include("head.inc"); + +if(file_exists("/var/run/interface_mismatch_reboot_needed")) + if ($_POST) { + if($rebootingnow) + $savemsg = gettext("The system is now rebooting. Please wait."); + else + $savemsg = gettext("Reboot is needed. Please apply the settings in order to reboot."); + } else { + $savemsg = gettext("Interface mismatch detected. Please resolve the mismatch and click 'Apply changes'. The firewall will reboot afterwards."); + } +?> + + + + +
    + +\n"; + print_info_box_np(gettext("The interface configuration has been changed.
    You must apply the changes in order for them to take effect.")); + echo "

    \n"; +} elseif($savemsg) + print_info_box($savemsg); + +pfSense_handle_custom_code("/usr/local/pkg/interfaces_assign/pre_input_errors"); +if ($input_errors) + print_input_errors($input_errors); +?> + + + + +
    + +
    +
    + + + + + + + $iface): + if ($iface['descr']) + $ifdescr = $iface['descr']; + else + $ifdescr = strtoupper($ifname); +?> + + + + + + + + + + + + +
     
    + + + + " + type="image" style="height:17;width:17;border:0" + onclick="return confirm('')" /> + +
    + + + + + " /> +
    +
    +
    + +
      +
    • +
    +
    +
    + + + diff --git a/usr/local/www/interfaces_bridge.php b/usr/local/www/interfaces_bridge.php new file mode 100644 index 000000000..b6a6db733 --- /dev/null +++ b/usr/local/www/interfaces_bridge.php @@ -0,0 +1,167 @@ + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 0 && $j < count($members)) + echo ", "; + } + ?> + +   + edit +  ')">delete
      add

    +
    +
    +

    +
     
    +
    +
    + + + diff --git a/usr/local/www/interfaces_bridge_edit.php b/usr/local/www/interfaces_bridge_edit.php new file mode 100644 index 000000000..5e5f738e3 --- /dev/null +++ b/usr/local/www/interfaces_bridge_edit.php @@ -0,0 +1,614 @@ + $bdescr) { + if (substr(get_real_interface($bif), 0, 3) == "gre") + unset($ifacelist[$bif]); +} + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_bridges[$id]) { + $pconfig['enablestp'] = isset($a_bridges[$id]['enablestp']); + $pconfig['descr'] = $a_bridges[$id]['descr']; + $pconfig['bridgeif'] = $a_bridges[$id]['bridgeif']; + $pconfig['members'] = $a_bridges[$id]['members']; + $pconfig['maxaddr'] = $a_bridges[$id]['maxaddr']; + $pconfig['timeout'] = $a_bridges[$id]['timeout']; + if ($a_bridges[$id]['static']) + $pconfig['static'] = $a_bridges[$id]['static']; + if ($a_bridges[$id]['private']) + $pconfig['private'] = $a_bridges[$id]['private']; + if (isset($a_bridges[$id]['stp'])) + $pconfig['stp'] = $a_bridges[$id]['stp']; + $pconfig['maxage'] = $a_bridges[$id]['maxage']; + $pconfig['fwdelay'] = $a_bridges[$id]['fwdelay']; + $pconfig['hellotime'] = $a_bridges[$id]['hellotime']; + $pconfig['priority'] = $a_bridges[$id]['priority']; + $pconfig['proto'] = $a_bridges[$id]['proto']; + $pconfig['holdcnt'] = $a_bridges[$id]['holdcnt']; + if (!empty($a_bridges[$id]['ifpriority'])) { + $pconfig['ifpriority'] = explode(",", $a_bridges[$id]['ifpriority']); + $ifpriority = array(); + foreach ($pconfig['ifpriority'] as $cfg) { + list ($key, $value) = explode(":", $cfg); + $embprioritycfg[$key] = $value; + foreach ($embprioritycfg as $key => $value) { + $ifpriority[$key] = $value; + } + } + $pconfig['ifpriority'] = $ifpriority; + } + if (!empty($a_bridges[$id]['ifpathcost'])) { + $pconfig['ifpathcost'] = explode(",", $a_bridges[$id]['ifpathcost']); + $ifpathcost = array(); + foreach ($pconfig['ifpathcost'] as $cfg) { + list ($key, $value) = explode(":", $cfg); + $embpathcfg[$key] = $value; + foreach ($embpathcfg as $key => $value) { + $ifpathcost[$key] = $value; + } + } + $pconfig['ifpathcost'] = $ifpathcost; + } + $pconfig['span'] = $a_bridges[$id]['span']; + if (isset($a_bridges[$id]['edge'])) + $pconfig['edge'] = $a_bridges[$id]['edge']; + if (isset($a_bridges[$id]['autoedge'])) + $pconfig['autoedge'] = $a_bridges[$id]['autoedge']; + if (isset($a_bridges[$id]['ptp'])) + $pconfig['ptp'] = $a_bridges[$id]['ptp']; + if (isset($a_bridges[$id]['autoptp'])) + $pconfig['autoptp'] = $a_bridges[$id]['autoptp']; +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "members"); + $reqdfieldsn = array(gettext("Member Interfaces")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if ($_POST['maxage'] && !is_numeric($_POST['maxage'])) + $input_errors[] = gettext("Maxage needs to be an integer between 6 and 40."); + if ($_POST['maxaddr'] && !is_numeric($_POST['maxaddr'])) + $input_errors[] = gettext("Maxaddr needs to be an integer."); + if ($_POST['timeout'] && !is_numeric($_POST['timeout'])) + $input_errors[] = gettext("Timeout needs to be an integer."); + if ($_POST['fwdelay'] && !is_numeric($_POST['fwdelay'])) + $input_errors[] = gettext("Forward Delay needs to be an integer between 4 and 30."); + if ($_POST['hellotime'] && !is_numeric($_POST['hellotime'])) + $input_errors[] = gettext("Hello time for STP needs to be an integer between 1 and 2."); + if ($_POST['priority'] && !is_numeric($_POST['priority'])) + $input_errors[] = gettext("Priority for STP needs to be an integer between 0 and 61440."); + if ($_POST['holdcnt'] && !is_numeric($_POST['holdcnt'])) + $input_errors[] = gettext("Transmit Hold Count for STP needs to be an integer between 1 and 10."); + foreach ($ifacelist as $ifn => $ifdescr) { + if ($_POST[$ifn] <> "" && !is_numeric($_POST[$ifn])) + $input_errors[] = "{$ifdescr} " . gettext("interface priority for STP needs to be an integer between 0 and 240."); + } + $i = 0; + foreach ($ifacelist as $ifn => $ifdescr) { + if ($_POST["{$ifn}{$i}"] <> "" && !is_numeric($_POST["{$ifn}{$i}"])) + $input_errors[] = "{$ifdescr} " . gettext("interface path cost for STP needs to be an integer between 1 and 200000000."); + $i++; + } + + if (!is_array($_POST['members']) || count($_POST['members']) < 2) + $input_errors[] = gettext("You must select at least 2 member interfaces for a bridge."); + + if (is_array($_POST['members'])) { + foreach($_POST['members'] as $ifmembers) { + if (empty($config['interfaces'][$ifmembers])) + $input_errors[] = gettext("A member interface passed does not exist in configuration"); + if (is_array($config['interfaces'][$ifmembers]['wireless']) && + $config['interfaces'][$ifmembers]['wireless']['mode'] != "hostap") + $input_errors[] = gettext("Bridging a wireless interface is only possible in hostap mode."); + if ($_POST['span'] != "none" && $_POST['span'] == $ifmembers) + $input_errors[] = gettext("Span interface cannot be part of the bridge. Remove the span interface from bridge members to continue."); + } + } + + if (!$input_errors) { + $bridge = array(); + $bridge['members'] = implode(',', $_POST['members']); + $bridge['enablestp'] = $_POST['enablestp'] ? true : false; + $bridge['descr'] = $_POST['descr']; + $bridge['maxaddr'] = $_POST['maxaddr']; + $bridge['timeout'] = $_POST['timeout']; + if ($_POST['static']) + $bridge['static'] = implode(',', $_POST['static']); + if ($_POST['private']) + $bridge['private'] = implode(',', $_POST['private']); + if (isset($_POST['stp'])) + $bridge['stp'] = implode(',', $_POST['stp']); + $bridge['maxage'] = $_POST['maxage']; + $bridge['fwdelay'] = $_POST['fwdelay']; + $bridge['hellotime'] = $_POST['hellotime']; + $bridge['priority'] = $_POST['priority']; + $bridge['proto'] = $_POST['proto']; + $bridge['holdcnt'] = $_POST['holdcnt']; + $i = 0; + $ifpriority = ""; + $ifpathcost = ""; + foreach ($ifacelist as $ifn => $ifdescr) { + if ($_POST[$ifn] <> "") { + if ($i > 0) + $ifpriority .= ","; + $ifpriority .= $ifn.":".$_POST[$ifn]; + } + if ($_POST["{$ifn}0"] <> "") { + if ($i > 0) + $ifpathcost .= ","; + $ifpathcost .= $ifn.":".$_POST["{$ifn}0"]; + } + $i++; + } + $bridge['ifpriority'] = $ifpriority; + $bridge['ifpathcost'] = $ifpathcost; + + if ($_POST['span'] != "none") + $bridge['span'] = $_POST['span']; + else + unset($bridge['span']); + if (isset($_POST['edge'])) + $bridge['edge'] = implode(',', $_POST['edge']); + if (isset($_POST['autoedge'])) + $bridge['autoedge'] = implode(',', $_POST['autoedge']); + if (isset($_POST['ptp'])) + $bridge['ptp'] = implode(',', $_POST['ptp']); + if (isset($_POST['autoptp'])) + $bridge['autoptp'] = implode(',', $_POST['autoptp']); + + $bridge['bridgeif'] = $_POST['bridgeif']; + interface_bridge_configure($bridge); + if ($bridge['bridgeif'] == "" || !stristr($bridge['bridgeif'], "bridge")) + $input_errors[] = gettext("Error occurred creating interface, please retry."); + else { + if (isset($id) && $a_bridges[$id]) + $a_bridges[$id] = $bridge; + else + $a_bridges[] = $bridge; + + write_config(); + + $confif = convert_real_interface_to_friendly_interface_name($bridge['bridgeif']); + if ($confif <> "") + interface_configure($confif); + + header("Location: interfaces_bridge.php"); + exit; + } + } +} + +$pgtitle = array(gettext("Interfaces"),gettext("Bridge"),gettext("Edit")); +$shortcut_section = "interfaces"; +include("head.inc"); + +?> + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +

    " />

    +
      + + " /> + " onclick="window.location.href=''" /> + + + +
    +
    + + + diff --git a/usr/local/www/interfaces_gif.php b/usr/local/www/interfaces_gif.php new file mode 100644 index 000000000..128b26e31 --- /dev/null +++ b/usr/local/www/interfaces_gif.php @@ -0,0 +1,152 @@ + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +   + edit +  ')">delete
      add

    +
    +
    + +

    +

    +
     
    +
    +
    + + + diff --git a/usr/local/www/interfaces_gif_edit.php b/usr/local/www/interfaces_gif_edit.php new file mode 100644 index 000000000..7fb902a44 --- /dev/null +++ b/usr/local/www/interfaces_gif_edit.php @@ -0,0 +1,243 @@ + "") + interface_configure($confif); + + header("Location: interfaces_gif.php"); + exit; + } + } +} + +$pgtitle = array(gettext("Interfaces"),gettext("GIF"),gettext("Edit")); +$shortcut_section = "interfaces"; +include("head.inc"); + +?> + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    + +
    +
    + + +
    +
    + /> +
    +
    + /> +
    + + +
    + +
      + + " /> + " onclick="window.location.href=''" /> + + + +
    +
    + + + diff --git a/usr/local/www/interfaces_gre.php b/usr/local/www/interfaces_gre.php new file mode 100644 index 000000000..1a4099260 --- /dev/null +++ b/usr/local/www/interfaces_gre.php @@ -0,0 +1,148 @@ + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +   + edit +  ')">delete
      add
    +


    +
    +
    +
    + + + diff --git a/usr/local/www/interfaces_gre_edit.php b/usr/local/www/interfaces_gre_edit.php new file mode 100644 index 000000000..b5e5c4137 --- /dev/null +++ b/usr/local/www/interfaces_gre_edit.php @@ -0,0 +1,246 @@ + "") + interface_configure($confif); + + header("Location: interfaces_gre.php"); + exit; + } + } +} + +$pgtitle = array(gettext("Interfaces"),gettext("GRE"),gettext("Edit")); +$shortcut_section = "interfaces"; +include("head.inc"); + +?> + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    + +
    +
    + + +
    +
    + /> +
    +
    + /> +
    + + +
    + /> +
    +
    + +
      + + " /> + " onclick="window.location.href=''" /> + + + +
    +
    + + + diff --git a/usr/local/www/interfaces_groups.php b/usr/local/www/interfaces_groups.php new file mode 100644 index 000000000..3f97dd38b --- /dev/null +++ b/usr/local/www/interfaces_groups.php @@ -0,0 +1,159 @@ + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +   + + + + + + +
    " alt="edit" />')">" alt="delete" />
    +
    + + + + + +
     " alt="add" />
    +
    +


    +
    +
    +
    + + + diff --git a/usr/local/www/interfaces_groups_edit.php b/usr/local/www/interfaces_groups_edit.php new file mode 100644 index 000000000..f548bb303 --- /dev/null +++ b/usr/local/www/interfaces_groups_edit.php @@ -0,0 +1,357 @@ + $gdescr) { + if ($gdescr == $_POST['ifname'] || $gif == $_POST['ifname']) + $input_errors[] = "The specified group name is already used by an interface. Please choose another name."; + } + $members = ""; + $isfirst = 0; + /* item is a normal ifgroupentry type */ + for($x=0; $x<9999; $x++) { + if($_POST["members{$x}"] <> "") { + if ($isfirst > 0) + $members .= " "; + $members .= $_POST["members{$x}"]; + $isfirst++; + } + } + + if (!$input_errors) { + $ifgroupentry = array(); + $ifgroupentry['members'] = $members; + $ifgroupentry['descr'] = $_POST['descr']; + + if (isset($id) && $a_ifgroups[$id] && $_POST['ifname'] != $a_ifgroups[$id]['ifname']) { + if (!empty($config['filter']) && is_array($config['filter']['rule'])) { + foreach ($config['filter']['rule'] as $ridx => $rule) { + if (isset($rule['floating'])) { + $rule_ifs = explode(",", $rule['interface']); + $rule_changed = false; + foreach ($rule_ifs as $rule_if_id => $rule_if) { + if ($rule_if == $a_ifgroups[$id]['ifname']) { + $rule_ifs[$rule_if_id] = $_POST['ifname']; + $rule_changed = true; + } + } + if ($rule_changed) + $config['filter']['rule'][$ridx]['interface'] = implode(",", $rule_ifs); + } else { + if ($rule['interface'] == $a_ifgroups[$id]['ifname']) + $config['filter']['rule'][$ridx]['interface'] = $_POST['ifname']; + } + } + } + if (!empty($config['nat']) && is_array($config['nat']['rule'])) { + foreach ($config['nat']['rule'] as $ridx => $rule) { + if ($rule['interface'] == $a_ifgroups[$id]['ifname']) + $config['nat']['rule'][$ridx]['interface'] = $_POST['ifname']; + } + } + $omembers = explode(" ", $a_ifgroups[$id]['members']); + if (count($omembers) > 0) { + foreach ($omembers as $ifs) { + $realif = get_real_interface($ifs); + if ($realif) + mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$id]['ifname']); + } + } + $ifgroupentry['ifname'] = $_POST['ifname']; + $a_ifgroups[$id] = $ifgroupentry; + } else if (isset($id) && $a_ifgroups[$id]) { + $omembers = explode(" ", $a_ifgroups[$id]['members']); + $nmembers = explode(" ", $members); + $delmembers = array_diff($omembers, $nmembers); + if (count($delmembers) > 0) { + foreach ($delmembers as $ifs) { + $realif = get_real_interface($ifs); + if ($realif) + mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$id]['ifname']); + } + } + $ifgroupentry['ifname'] = $_POST['ifname']; + $a_ifgroups[$id] = $ifgroupentry; + } else { + $ifgroupentry['ifname'] = $_POST['ifname']; + $a_ifgroups[] = $ifgroupentry; + } + + write_config(); + + interface_group_setup($ifgroupentry); + + header("Location: interfaces_groups.php"); + exit; + } else { + $pconfig['descr'] = $_POST['descr']; + $pconfig['members'] = $members; + } +} + +include("head.inc"); + +?> + +"> + + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    + + + +
    + + + + + + + "") { + $item = explode(" ", $members); + foreach($item as $ww) { + $members = $item[$counter]; + $tracker = $counter; + ?> + + + + + + +
    + + + remove +
    + + " /> + +

    + + + +
      + " /> + " /> + + + +
    +
    + + + + + + diff --git a/usr/local/www/interfaces_lagg.php b/usr/local/www/interfaces_lagg.php new file mode 100644 index 000000000..1a7bf00c6 --- /dev/null +++ b/usr/local/www/interfaces_lagg.php @@ -0,0 +1,156 @@ + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +   + edit +  delete
      add

    +
    +
    +

    +
     
    +
    +
    + + + diff --git a/usr/local/www/interfaces_lagg_edit.php b/usr/local/www/interfaces_lagg_edit.php new file mode 100644 index 000000000..9c6c0c9ff --- /dev/null +++ b/usr/local/www/interfaces_lagg_edit.php @@ -0,0 +1,245 @@ + "") + interface_configure($confif); + + header("Location: interfaces_lagg.php"); + exit; + } + } +} + +$pgtitle = array(gettext("Interfaces"),gettext("LAGG"),gettext("Edit")); +$shortcut_section = "interfaces"; +include("head.inc"); + +?> + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    + .
    + +
    +
      +
    • +
      + +
    • +
      +
    • +
      +
    • +
      . +
    • +
      . +
    • +
      . +
    • +
    +
    + +
    .
      + + " /> + " onclick="window.location.href=''" /> + + + +
    +
    + + + diff --git a/usr/local/www/interfaces_ppps.php b/usr/local/www/interfaces_ppps.php new file mode 100644 index 000000000..443ddcf1f --- /dev/null +++ b/usr/local/www/interfaces_ppps.php @@ -0,0 +1,147 @@ +. + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-interfaces-ppps +##|*NAME=Interfaces: ppps page +##|*DESCR=Allow access to the 'Interfaces: ppps' page. +##|*MATCH=interfaces_ppps.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); + +function ppp_inuse($num) { + global $config, $g; + $iflist = get_configured_interface_list(false, true); + if (!is_array($config['ppps']['ppp'])) + return false; + + foreach ($iflist as $if) { + if ($config['interfaces'][$if]['if'] == $config['ppps']['ppp'][$num]['if']) + return true; + } + return false; +} + +if ($_GET['act'] == "del") { + /* check if still in use */ + if (ppp_inuse($_GET['id'])) { + $input_errors[] = gettext("This point-to-point link cannot be deleted because it is still being used as an interface."); + } elseif (is_array($config['ppps']['ppp']) && is_array($config['ppps']['ppp'][$_GET['id']])) { + + unset($config['ppps']['ppp'][$_GET['id']]['pppoe-reset-type']); + handle_pppoe_reset($config['ppps']['ppp'][$_GET['id']]); + unset($config['ppps']['ppp'][$_GET['id']]); + write_config(); + header("Location: interfaces_ppps.php"); + exit; + } +} + +if (!is_array($config['ppps']['ppp'])) + $config['ppps']['ppp'] = array(); +$a_ppps = $config['ppps']['ppp']; + +$pgtitle = gettext("Interfaces: PPPs"); +$shortcut_section = "interfaces"; +include("head.inc"); + +?> + + + + + + + + + +
    + +
    +
    + + + + + + + + $ppp): ?> + + + + + + + + + + + +
    + + + $port) { + if ($port != get_real_interface($port) && $ppp['type'] != "ppp") + $portlist[$portid] = convert_friendly_interface_to_friendly_descr($port); + } + echo htmlspecialchars(implode(",", $portlist)); + ?> + +   + edit +  ')">remove
      add
    +
    +
    + + + diff --git a/usr/local/www/interfaces_ppps_edit.php b/usr/local/www/interfaces_ppps_edit.php new file mode 100644 index 000000000..4d5b60b44 --- /dev/null +++ b/usr/local/www/interfaces_ppps_edit.php @@ -0,0 +1,805 @@ +. + All rights reserved. + Copyright (C) 2010 Gabriel B. . + 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. +*/ +/* + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-interfaces-ppps-edit +##|*NAME=Interfaces: PPPs: Edit page +##|*DESCR=Allow access to the 'Interfaces: PPPs: Edit' page. +##|*MATCH=interfaces_ppps_edit.php* +##|-PRIV + +require("guiconfig.inc"); +require("functions.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_ppps.php'); + +define("CRON_MONTHLY_PATTERN", "0 0 1 * *"); +define("CRON_WEEKLY_PATTERN", "0 0 * * 0"); +define("CRON_DAILY_PATTERN", "0 0 * * *"); +define("CRON_HOURLY_PATTERN", "0 * * * *"); + +if (!is_array($config['ppps']['ppp'])) + $config['ppps']['ppp'] = array(); + +$a_ppps = &$config['ppps']['ppp']; + +$iflist = get_configured_interface_with_descr(); +$portlist = get_interface_list(); +$portlist = array_merge($portlist, $iflist); + +if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { + foreach ($config['vlans']['vlan'] as $vlan) { + $portlist[$vlan['vlanif']] = $vlan; + } +} + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_ppps[$id]) { + $pconfig['ptpid'] = $a_ppps[$id]['ptpid']; + $pconfig['type'] = $a_ppps[$id]['type']; + //$pconfig['if'] = $a_ppps[$id]['if']; + $pconfig['interfaces'] = $a_ppps[$id]['ports']; + $pconfig['username'] = $a_ppps[$id]['username']; + $pconfig['password'] = base64_decode($a_ppps[$id]['password']); + if (isset($a_ppps[$id]['ondemand'])) + $pconfig['ondemand'] = true; + $pconfig['idletimeout'] = $a_ppps[$id]['idletimeout']; + $pconfig['uptime'] = $a_ppps[$id]['uptime']; + $pconfig['descr'] = $a_ppps[$id]['descr']; + $pconfig['bandwidth'] = explode(",",$a_ppps[$id]['bandwidth']); + $pconfig['mtu'] = explode(",",$a_ppps[$id]['mtu']); + $pconfig['mru'] = explode(",",$a_ppps[$id]['mru']); + $pconfig['mrru'] = explode(",",$a_ppps[$id]['mrru']); + if (isset($a_ppps[$id]['shortseq'])) + $pconfig['shortseq'] = true; + if (isset($a_ppps[$id]['acfcomp'])) + $pconfig['acfcomp'] = true; + if (isset($a_ppps[$id]['protocomp'])) + $pconfig['protocomp'] = true; + if (isset($a_ppps[$id]['vjcomp'])) + $pconfig['vjcomp'] = true; + if (isset($a_ppps[$id]['tcpmssfix'])) + $pconfig['tcpmssfix'] = true; + switch($a_ppps[$id]['type']) { + case "ppp": + $pconfig['initstr'] = base64_decode($a_ppps[$id]['initstr']); + $pconfig['simpin'] = $a_ppps[$id]['simpin']; + $pconfig['pin-wait'] = $a_ppps[$id]['pin-wait']; + $pconfig['apn'] = $a_ppps[$id]['apn']; + $pconfig['apnum'] = $a_ppps[$id]['apnum']; + $pconfig['phone'] = $a_ppps[$id]['phone']; + $pconfig['connect-timeout'] = $a_ppps[$id]['connect-timeout']; + $pconfig['localip'] = explode(",",$a_ppps[$id]['localip']); + $pconfig['gateway'] = explode(",",$a_ppps[$id]['gateway']); + break; + case "l2tp": + case "pptp": + $pconfig['localip'] = explode(",",$a_ppps[$id]['localip']); + $pconfig['subnet'] = explode(",",$a_ppps[$id]['subnet']); + $pconfig['gateway'] = explode(",",$a_ppps[$id]['gateway']); + case "pppoe": + $pconfig['provider'] = $a_ppps[$id]['provider']; + if (isset($a_ppps[$id]['provider']) and empty($a_ppps[$id]['provider'])) + $pconfig['null_service'] = true; + /* ================================================ */ + /* = force a connection reset at a specific time? = */ + /* ================================================ */ + + if (isset($a_ppps[$id]['pppoe-reset-type'])) { + $pconfig['pppoe-reset-type'] = $a_ppps[$id]['pppoe-reset-type']; + $itemhash = getMPDCRONSettings($a_ppps[$id]['if']); + $cronitem = $itemhash['ITEM']; + if (isset($cronitem)) { + $resetTime = "{$cronitem['minute']} {$cronitem['hour']} {$cronitem['mday']} {$cronitem['month']} {$cronitem['wday']}"; + } else { + $resetTime = NULL; + } + + if ($a_ppps[$id]['pppoe-reset-type'] == "custom") { + $resetTime_a = explode(" ", $resetTime); + $pconfig['pppoe_pr_custom'] = true; + $pconfig['pppoe_resetminute'] = $resetTime_a[0]; + $pconfig['pppoe_resethour'] = $resetTime_a[1]; + /* just initialize $pconfig['pppoe_resetdate'] if the + * coresponding item contains appropriate numeric values. + */ + if ($resetTime_a[2] <> "*" && $resetTime_a[3] <> "*") + $pconfig['pppoe_resetdate'] = "{$resetTime_a[3]}/{$resetTime_a[2]}/" . date("Y"); + } else if ($a_ppps[$id]['pppoe-reset-type'] == "preset") { + $pconfig['pppoe_pr_preset'] = true; + switch ($resetTime) { + case CRON_MONTHLY_PATTERN: + $pconfig['pppoe_monthly'] = true; + break; + case CRON_WEEKLY_PATTERN: + $pconfig['pppoe_weekly'] = true; + break; + case CRON_DAILY_PATTERN: + $pconfig['pppoe_daily'] = true; + break; + case CRON_HOURLY_PATTERN: + $pconfig['pppoe_hourly'] = true; + break; + } + } + } + break; + } + +} else + $pconfig['ptpid'] = interfaces_ptpid_next(); + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* okay first of all, cause we are just hiding the PPPoE HTML + * fields releated to PPPoE resets, we are going to unset $_POST + * vars, if the reset feature should not be used. Otherwise the + * data validation procedure below, may trigger a false error + * message. + */ + if (empty($_POST['pppoe-reset-type'])) { + unset($_POST['pppoe_resethour']); + unset($_POST['pppoe_resetminute']); + unset($_POST['pppoe_resetdate']); + unset($_POST['pppoe_pr_preset_val']); + } + + /* input validation */ + switch($_POST['type']) { + case "ppp": + $reqdfields = explode(" ", "interfaces phone"); + $reqdfieldsn = array(gettext("Link Interface(s)"),gettext("Phone Number")); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + break; + case "pppoe": + if ($_POST['ondemand']) { + $reqdfields = explode(" ", "interfaces username password ondemand idletimeout"); + $reqdfieldsn = array(gettext("Link Interface(s)"),gettext("Username"),gettext("Password"),gettext("Dial on demand"),gettext("Idle timeout value")); + } else { + $reqdfields = explode(" ", "interfaces username password"); + $reqdfieldsn = array(gettext("Link Interface(s)"),gettext("Username"),gettext("Password")); + } + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + break; + case "l2tp": + case "pptp": + if ($_POST['ondemand']) { + $reqdfields = explode(" ", "interfaces username password localip subnet gateway ondemand idletimeout"); + $reqdfieldsn = array(gettext("Link Interface(s)"),gettext("Username"),gettext("Password"),gettext("Local IP address"),gettext("Subnet"),gettext("Remote IP address"),gettext("Dial on demand"),gettext("Idle timeout value")); + } else { + $reqdfields = explode(" ", "interfaces username password localip subnet gateway"); + $reqdfieldsn = array(gettext("Link Interface(s)"),gettext("Username"),gettext("Password"),gettext("Local IP address"),gettext("Subnet"),gettext("Remote IP address")); + } + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + break; + default: + $input_errors[] = gettext("Please choose a Link Type."); + break; + } + if ($_POST['type'] == "ppp" && count($_POST['interfaces']) > 1) + $input_errors[] = gettext("Multilink connections (MLPPP) using the PPP link type is not currently supported. Please select only one Link Interface."); + if ($_POST['provider'] && !is_domain($_POST['provider'])) + $input_errors[] = gettext("The Service name contains invalid characters."); + if ($_POST['provider'] && $_POST['null_service']) + $input_errors[] = gettext("Do not specify both a Service name and a NULL Service name."); + if (($_POST['idletimeout'] != "") && !is_numericint($_POST['idletimeout'])) + $input_errors[] = gettext("The idle timeout value must be an integer."); + if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resethour'] <> "" && !is_numericint($_POST['pppoe_resethour']) && + $_POST['pppoe_resethour'] >= 0 && $_POST['pppoe_resethour'] <=23) + $input_errors[] = gettext("A valid PPPoE reset hour must be specified (0-23)."); + if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetminute'] <> "" && !is_numericint($_POST['pppoe_resetminute']) && + $_POST['pppoe_resetminute'] >= 0 && $_POST['pppoe_resetminute'] <=59) + $input_errors[] = gettext("A valid PPPoE reset minute must be specified (0-59)."); + if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetdate'] <> "" && !is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))) + $input_errors[] = gettext("A valid PPPoE reset date must be specified (mm/dd/yyyy)."); + if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetdate'] <> "" && is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))){ + $date_nums = explode("/",$_POST['pppoe_resetdate']); + if ($date_nums[0] < 1 || $date_nums[0] > 12) + $input_errors[] = gettext("A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE Periodic reset fields."); + if ($date_nums[1] < 1 || $date_nums[1] > 31) + $input_errors[] = gettext("A valid PPPoE reset day of month must be specified (1-31) in the Custom PPPoE Periodic reset fields. No checks are done on valid # of days per month"); + if ($date_nums[2] < date("Y")) + $input_errors[] = gettext("A valid PPPoE reset year must be specified. Don't select a year in the past!"); + } + + foreach($_POST['interfaces'] as $iface){ + if ($_POST['localip'][$iface] && !is_ipaddr($_POST['localip'][$iface])) + $input_errors[] = sprintf(gettext("A valid local IP address must be specified for %s."),$iface); + if ($_POST['gateway'][$iface] && !is_ipaddr($_POST['gateway'][$iface]) && !is_hostname($_POST['gateway'][$iface])) + $input_errors[] = sprintf(gettext("A valid gateway IP address OR hostname must be specified for %s."),$iface); + if ($_POST['bandwidth'][$iface] && !is_numericint($_POST['bandwidth'][$iface])) + $input_errors[] = sprintf(gettext("The bandwidth value for %s must be an integer."),$iface); + if ($_POST['mtu'][$iface] && ($_POST['mtu'][$iface] < 576)) + $input_errors[] = sprintf(gettext("The MTU for %s must be greater than 576 bytes."),$iface); + if ($_POST['mru'][$iface] && ($_POST['mru'][$iface] < 576)) + $input_errors[] = sprintf(gettext("The MRU for %s must be greater than 576 bytes."),$iface); + } + +/* + foreach ($a_ppps as $ppp) { + if (isset($id) && ($a_ppps[$id]) && ($a_ppps[$id] === $ppp)) + continue; + + if ($ppp['serialport'] == $_POST['serialport']) { + $input_errors[] = "Serial port is in use"; + break; + } + } +*/ + + if (!$input_errors) { + $ppp = array(); + $ppp['ptpid'] = $_POST['ptpid']; + $ppp['type'] = $_POST['type']; + $ppp['if'] = $ppp['type'].$ppp['ptpid']; + $ppp['ports'] = implode(',',$_POST['interfaces']); + $ppp['username'] = $_POST['username']; + $ppp['password'] = base64_encode($_POST['password']); + $ppp['ondemand'] = $_POST['ondemand'] ? true : false; + if (!empty($_POST['idletimeout'])) + $ppp['idletimeout'] = $_POST['idletimeout']; + else + unset($ppp['idletimeout']); + $ppp['uptime'] = $_POST['uptime'] ? true : false; + if (!empty($_POST['descr'])) + $ppp['descr'] = $_POST['descr']; + else + unset($ppp['descr']); + + // Loop through fields associated with a individual link/port and make an array of the data + $port_fields = array("localip", "gateway", "subnet", "bandwidth", "mtu", "mru", "mrru"); + foreach($_POST['interfaces'] as $iface){ + foreach($port_fields as $field_label){ + if (isset($_POST[$field_label][$iface])) + $port_data[$field_label][] = $_POST[$field_label][$iface]; + } + } + + switch($_POST['type']) { + case "ppp": + if (!empty($_POST['initstr'])) + $ppp['initstr'] = base64_encode($_POST['initstr']); + else + unset($ppp['initstr']); + if (!empty($_POST['simpin'])) { + $ppp['simpin'] = $_POST['simpin']; + $ppp['pin-wait'] = $_POST['pin-wait']; + } else { + unset($ppp['simpin']); + unset($ppp['pin-wait']); + } + + if (!empty($_POST['apn'])){ + $ppp['apn'] = $_POST['apn']; + $ppp['apnum'] = $_POST['apnum']; + } else { + unset($ppp['apn']); + unset($ppp['apnum']); + } + $ppp['phone'] = $_POST['phone']; + $ppp['localip'] = implode(',',$port_data['localip']); + $ppp['gateway'] = implode(',',$port_data['gateway']); + if (!empty($_POST['connect-timeout'])) + $ppp['connect-timeout'] = $_POST['connect-timeout']; + else + unset($ppp['connect-timeout']); + break; + case "pppoe": + if (!empty($_POST['provider'])) + $ppp['provider'] = $_POST['provider']; + else{ + unset($ppp['provider']); + $ppp['provider'] = $_POST['null_service'] ? true : false; + } + if (!empty($_POST['pppoe-reset-type'])) + $ppp['pppoe-reset-type'] = $_POST['pppoe-reset-type']; + else + unset($ppp['pppoe-reset-type']); + + break; + case "pptp": + case "l2tp": + $ppp['localip'] = implode(',',$port_data['localip']); + $ppp['subnet'] = implode(',',$port_data['subnet']); + $ppp['gateway'] = implode(',',$port_data['gateway']); + break; + default: + break; + + } + + $ppp['shortseq'] = $_POST['shortseq'] ? true : false; + $ppp['acfcomp'] = $_POST['acfcomp'] ? true : false; + $ppp['protocomp'] = $_POST['protocomp'] ? true : false; + $ppp['vjcomp'] = $_POST['vjcomp'] ? true : false; + $ppp['tcpmssfix'] = $_POST['tcpmssfix'] ? true : false; + $ppp['bandwidth'] = implode(',', $port_data['bandwidth']); + if (is_array($port_data['mtu'])) + $ppp['mtu'] = implode(',', $port_data['mtu']); + if (is_array($port_data['mru'])) + $ppp['mru'] = implode(',', $port_data['mru']); + if (is_array($port_data['mrru'])) + $ppp['mrru'] = implode(',', $port_data['mrru']); + + /* handle_pppoe_reset is called here because if user changes Link Type from PPPoE to another type we + must be able to clear the config data in the section of config.xml if it exists + */ + handle_pppoe_reset($_POST); + + if (isset($id) && $a_ppps[$id]) + $a_ppps[$id] = $ppp; + else + $a_ppps[] = $ppp; + + write_config(); + configure_cron(); + + foreach ($iflist as $pppif => $ifdescr) { + if ($config['interfaces'][$pppif]['if'] == $ppp['if']) + interface_ppps_configure($pppif); + } + header("Location: interfaces_ppps.php"); + exit; + } +} // end if($_POST) + +$closehead = false; +$pgtitle = array(gettext("Interfaces"),gettext("PPPs"),gettext("Edit")); +$shortcut_section = "interfaces"; +include("head.inc"); + +$types = array("select" => gettext("Select"), "ppp" => "PPP", "pppoe" => "PPPoE", "pptp" => "PPTP", "l2tp" => "L2TP"/*, "tcp" => "TCP", "udp" => "UDP"*/ ); + +?> + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    +
    + +
    +
    + +
    + +
      +

    " />

    +
      + " /> + " onclick="window.location.href=''" /> + + + + +
    +
    + + + diff --git a/usr/local/www/interfaces_qinq.php b/usr/local/www/interfaces_qinq.php new file mode 100644 index 000000000..559103d44 --- /dev/null +++ b/usr/local/www/interfaces_qinq.php @@ -0,0 +1,168 @@ + 0) { + foreach ($delmembers as $tag) + mwexec("/usr/sbin/ngctl shutdown {$qinq['vlanif']}h{$tag}:"); + } + mwexec("/usr/sbin/ngctl shutdown {$qinq['vlanif']}qinq:"); + mwexec("/usr/sbin/ngctl shutdown {$qinq['vlanif']}:"); + mwexec("/sbin/ifconfig {$qinq['vlanif']} destroy"); + unset($a_qinqs[$id]); + + write_config(); + + header("Location: interfaces_qinq.php"); + exit; + } +} + +$pgtitle = array(gettext("Interfaces"),gettext("QinQ")); +$shortcut_section = "interfaces"; +include("head.inc"); + +?> + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + 20) + echo substr(htmlspecialchars($qinq['members']), 0, 20) . "..."; + else + echo htmlspecialchars($qinq['members']); + ?> + +   + edit +  ')">remove
      add

    +
    +
    +

    +
     
    +
    +
    + + + diff --git a/usr/local/www/interfaces_qinq_edit.php b/usr/local/www/interfaces_qinq_edit.php new file mode 100644 index 000000000..26f3518cf --- /dev/null +++ b/usr/local/www/interfaces_qinq_edit.php @@ -0,0 +1,417 @@ + "") { + $member = explode("-", $_POST["members{$x}"]); + if (count($member) > 1) { + if (preg_match("/([^0-9])+/", $member[0], $match) || + preg_match("/([^0-9])+/", $member[1], $match)) + $input_errors[] = gettext("Tags can contain only numbers or a range in format #-#."); + + for ($i = $member[0]; $i <= $member[1]; $i++) { + if ($isfirst > 0) + $members .= " "; + $members .= $i; + $isfirst++; + } + } else { + if (preg_match("/([^0-9])+/", $_POST["members{$x}"], $match)) + $input_errors[] = gettext("Tags can contain only numbers or a range in format #-#."); + + if ($isfirst > 0) + $members .= " "; + $members .= $_POST["members{$x}"]; + $isfirst++; + } + } + } + + if (!$input_errors) { + $qinqentry['members'] = $members; + $qinqentry['descr'] = $_POST['descr']; + $qinqentry['vlanif'] = "{$_POST['if']}_{$_POST['tag']}"; + $nmembers = explode(" ", $members); + + if (isset($id) && $a_qinqs[$id]) { + $omembers = explode(" ", $a_qinqs[$id]['members']); + $delmembers = array_diff($omembers, $nmembers); + $addmembers = array_diff($nmembers, $omembers); + + if ((count($delmembers) > 0) || (count($addmembers) > 0)) { + $fd = fopen("{$g['tmp_path']}/netgraphcmd", "w"); + foreach ($delmembers as $tag) { + fwrite($fd, "shutdown {$qinqentry['vlanif']}h{$tag}:\n"); + fwrite($fd, "msg {$qinqentry['vlanif']}qinq: delfilter \\\"{$qinqentry['vlanif']}{$tag}\\\"\n"); + } + + foreach ($addmembers as $member) { + $qinq = array(); + $qinq['if'] = $qinqentry['vlanif']; + $qinq['tag'] = $member; + $macaddr = get_interface_mac($qinqentry['vlanif']); + interface_qinq2_configure($qinq, $fd, $macaddr); + } + + fclose($fd); + mwexec("/usr/sbin/ngctl -f {$g['tmp_path']}/netgraphcmd"); + } + $a_qinqs[$id] = $qinqentry; + } else { + interface_qinq_configure($qinqentry); + $a_qinqs[] = $qinqentry; + } + if ($_POST['autogroup'] == "yes") { + if (!is_array($config['ifgroups']['ifgroupentry'])) + $config['ifgroups']['ifgroupentry'] = array(); + foreach ($config['ifgroups']['ifgroupentry'] as $gid => $group) { + if ($group['ifname'] == "QinQ") { + $found = true; + break; + } + } + $additions = ""; + foreach($nmembers as $qtag) + $additions .= "{$qinqentry['vlanif']}_{$qtag} "; + $additions .= "{$qinqentry['vlanif']}"; + if ($found == true) + $config['ifgroups']['ifgroupentry'][$gid]['members'] .= " {$additions}"; + else { + $gentry = array(); + $gentry['ifname'] = "QinQ"; + $gentry['members'] = "{$additions}"; + $gentry['descr'] = gettext("QinQ VLANs group"); + $config['ifgroups']['ifgroupentry'][] = $gentry; + } + } + + write_config(); + + header("Location: interfaces_qinq.php"); + exit; + } else { + $pconfig['descr'] = $_POST['descr']; + $pconfig['tag'] = $_POST['tag']; + $pconfig['members'] = $members; + } +} + +include("head.inc"); + +?> + +"> + + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    + + + +
    + +
    + /> + Auto assign interface so it can be configured with ip etc... +
    + /> + Auto enable interface so it can be used on filter rules. +
    + /> + Allows to keep clients mtu unchanged(1500).
    NOTE: if you are using jumbo frames this option is not needed and may produce incorrect results!
    + +
    + /> + +
    + +
    + + + +
    + + + +
    + + + + + + + "") { + $item = explode(" ", $members); + foreach($item as $ww) { + $member = $item[$counter]; + ?> + + + + + + +
    + + + remove +
    + + " /> + +
      + " /> + " /> + + + +
    +
    + + + + + + diff --git a/usr/local/www/interfaces_vlan.php b/usr/local/www/interfaces_vlan.php new file mode 100644 index 000000000..e8acce920 --- /dev/null +++ b/usr/local/www/interfaces_vlan.php @@ -0,0 +1,153 @@ +. + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-interfaces-vlan +##|*NAME=Interfaces: VLAN page +##|*DESCR=Allow access to the 'Interfaces: VLAN' page. +##|*MATCH=interfaces_vlan.php* +##|-PRIV + +require("guiconfig.inc"); + +if (!is_array($config['vlans']['vlan'])) + $config['vlans']['vlan'] = array(); + +$a_vlans = &$config['vlans']['vlan'] ; + +function vlan_inuse($num) { + global $config, $a_vlans; + + $iflist = get_configured_interface_list(false, true); + foreach ($iflist as $if) { + if ($config['interfaces'][$if]['if'] == $a_vlans[$num]['vlanif']) + return true; + } + + return false; +} + +if ($_GET['act'] == "del") { + if (!isset($_GET['id'])) + $input_errors[] = getext("Wrong parameters supplied"); + else if (empty($a_vlans[$_GET['id']])) + $input_errors[] = getext("Wrong index supplied"); + /* check if still in use */ + else if (vlan_inuse($_GET['id'])) { + $input_errors[] = gettext("This VLAN cannot be deleted because it is still being used as an interface."); + } else { + if (does_interface_exist($a_vlans[$_GET['id']]['vlanif'])) + pfSense_interface_destroy($a_vlans[$_GET['id']]['vlanif']); + unset($a_vlans[$_GET['id']]); + + write_config(); + + header("Location: interfaces_vlan.php"); + exit; + } +} + + +$pgtitle = array(gettext("Interfaces"),gettext("VLAN")); +$shortcut_section = "interfaces"; +include("head.inc"); + +?> + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +   + edit +  ')">delete
      add

    +
    +
    +

    +
     
    +
    +
    + + + diff --git a/usr/local/www/interfaces_vlan_edit.php b/usr/local/www/interfaces_vlan_edit.php new file mode 100644 index 000000000..de52a13ad --- /dev/null +++ b/usr/local/www/interfaces_vlan_edit.php @@ -0,0 +1,213 @@ +. + 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. +*/ +/* + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-interfaces-vlan-edit +##|*NAME=Interfaces: VLAN: Edit page +##|*DESCR=Allow access to the 'Interfaces: VLAN: Edit' page. +##|*MATCH=interfaces_vlan_edit.php* +##|-PRIV + +require("guiconfig.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_vlan.php'); + +if (!is_array($config['vlans']['vlan'])) + $config['vlans']['vlan'] = array(); + +$a_vlans = &$config['vlans']['vlan']; + +$portlist = get_interface_list(); + +/* add LAGG interfaces */ +if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) { + foreach ($config['laggs']['lagg'] as $lagg) + $portlist[$lagg['laggif']] = $lagg; +} + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_vlans[$id]) { + $pconfig['if'] = $a_vlans[$id]['if']; + $pconfig['vlanif'] = $a_vlans[$id]['vlanif']; + $pconfig['tag'] = $a_vlans[$id]['tag']; + $pconfig['descr'] = $a_vlans[$id]['descr']; +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "if tag"); + $reqdfieldsn = array(gettext("Parent interface"),gettext("VLAN tag")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if ($_POST['tag'] && (!is_numericint($_POST['tag']) || ($_POST['tag'] < '1') || ($_POST['tag'] > '4094'))) { + $input_errors[] = gettext("The VLAN tag must be an integer between 1 and 4094."); + } + + if (!does_interface_exist($_POST['if'])) + $input_errors[] = gettext("Interface supplied as parent is invalid"); + + if (isset($id)) { + if ($_POST['tag'] && $_POST['tag'] != $a_vlans[$id]['tag']) { + if (!empty($a_vlans[$id]['vlanif']) && convert_real_interface_to_friendly_interface_name($a_vlans[$id]['vlanif']) != NULL) + $input_errors[] = gettext("Interface is assigned and you cannot change the VLAN tag while assigned."); + } + } + foreach ($a_vlans as $vlan) { + if (isset($id) && ($a_vlans[$id]) && ($a_vlans[$id] === $vlan)) + continue; + + if (($vlan['if'] == $_POST['if']) && ($vlan['tag'] == $_POST['tag'])) { + $input_errors[] = sprintf(gettext("A VLAN with the tag %s is already defined on this interface."),$vlan['tag']); + break; + } + } + if (is_array($config['qinqs']['qinqentry'])) { + foreach ($config['qinqs']['qinqentry'] as $qinq) + if ($qinq['tag'] == $_POST['tag'] && $qinq['if'] == $_POST['if']) + $input_errors[] = gettext("A QinQ VLAN exists with this tag please remove it to use this tag with."); + } + + if (!$input_errors) { + if (isset($id) && $a_vlans[$id]) { + if (($a_vlans[$id]['if'] != $_POST['if']) || ($a_vlans[$id]['tag'] != $_POST['tag'])) { + if (!empty($a_vlans[$id]['vlanif'])) { + $confif = convert_real_interface_to_friendly_interface_name($vlan['vlanif']); + // Destroy previous vlan + pfSense_interface_destroy($a_vlans[$id]['vlanif']); + } else { + pfSense_interface_destroy("{$a_vlans[$id]['if']}_vlan{$a_vlans[$id]['tag']}"); + $confif = convert_real_interface_to_friendly_interface_name("{$a_vlans[$id]['if']}_vlan{$a_vlans[$id]['tag']}"); + } + if ($confif <> "") + $config['interfaces'][$confif]['if'] = "{$_POST['if']}_vlan{$_POST['tag']}"; + } + } + $vlan = array(); + $vlan['if'] = $_POST['if']; + $vlan['tag'] = $_POST['tag']; + $vlan['descr'] = $_POST['descr']; + $vlan['vlanif'] = "{$_POST['if']}_vlan{$_POST['tag']}"; + + $vlan['vlanif'] = interface_vlan_configure($vlan); + if ($vlan['vlanif'] == "" || !stristr($vlan['vlanif'], "vlan")) + $input_errors[] = gettext("Error occurred creating interface, please retry."); + else { + if (isset($id) && $a_vlans[$id]) + $a_vlans[$id] = $vlan; + else + $a_vlans[] = $vlan; + + write_config(); + + if ($confif <> "") + interface_configure($confif); + + header("Location: interfaces_vlan.php"); + exit; + } + } +} + +$pgtitle = array(gettext("Interfaces"),gettext("VLAN"),gettext("Edit")); +$shortcut_section = "interfaces"; +include("head.inc"); + +?> + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    + +
      + + " /> + " onclick="window.location.href=''" /> + + + +
    +
    + + + diff --git a/usr/local/www/interfaces_wireless.php b/usr/local/www/interfaces_wireless.php new file mode 100644 index 000000000..be5a8d1dc --- /dev/null +++ b/usr/local/www/interfaces_wireless.php @@ -0,0 +1,149 @@ + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +   + edit +  ')">delete
      edit

    + :
    +
    +

    +
     
    +
    +
    + + + diff --git a/usr/local/www/interfaces_wireless_edit.php b/usr/local/www/interfaces_wireless_edit.php new file mode 100644 index 000000000..da24063e5 --- /dev/null +++ b/usr/local/www/interfaces_wireless_edit.php @@ -0,0 +1,211 @@ + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
      + + " /> + " onclick="window.location.href=''" /> + + + +
    +
    + + + diff --git a/usr/local/www/javascript/NetUtils.js b/usr/local/www/javascript/NetUtils.js new file mode 100644 index 000000000..b1c9ffbd9 --- /dev/null +++ b/usr/local/www/javascript/NetUtils.js @@ -0,0 +1,114 @@ +/* + NetUtils.js + part of pfSense (https://www.pfsense.org) + Various helper functions for IPv6 support. + + Copyright (C) 2007 Simon Cornelius P. Umacob + 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 NetUtils_changeIPVersionMask(field, version) { + switch(version){ + case 'IPv4': + NetUtils_clearOptions(document.getElementById(field)); + NetUtils_loadMaskIPv4(document.getElementById(field), 32); + + break; + case 'IPv6': + NetUtils_clearOptions(document.getElementById(field)); + NetUtils_loadMaskIPv6(document.getElementById(field), 64); + + break; + case 'IPv4_net': + NetUtils_clearOptions(document.getElementById(field)); + NetUtils_loadMaskIPv4(document.getElementById(field), 32, 1, 31); + + break; + case 'IPv6_net': + NetUtils_clearOptions(document.getElementById(field)); + NetUtils_loadMaskIPv6(document.getElementById(field), 64, 1, 63); + + break; + } +} + +function NetUtils_clearOptions(obj) { + var len = obj.length; + + for (var i = 0; i < len; i++) { + obj[0] = null; + } +} + +function NetUtils_loadMaskIPv4(obj, sel, min, max) { + var min, + max, + j = 0; + + min = min == undefined ? 1 : min; + max = max == undefined ? 32 : max; + + for (var i = max; i >= min; i--) { + obj[j] = new Option(i, i); + if (sel == i) { + obj[j].selected = true; + } + j++; + } +} + +function NetUtils_loadMaskIPv6(obj, sel, min, max) { + var min, + max, + j = 0; + + min = min == undefined ? 1 : min; + max = max == undefined ? 64 : max; + + if ((max % 4) != 0) { + obj[j++] = new Option(max, max); + + /** + * NOTE: This solution is a kludge. + * If you have a better way, don't hesitate + * to change this. Please send patches. :) + */ + for (var i = 1; i <= 3; i++) { + if (((max - i) % 4) == 0) { + max = max - i; + break; + } + } + } + + for (var i = max; i >= min; i -= 4) { + obj[j] = new Option(i, i); + if (sel == i) { + obj[j].selected = true; + } + j++; + } +} + diff --git a/usr/local/www/javascript/autosuggest.js b/usr/local/www/javascript/autosuggest.js new file mode 100644 index 000000000..6f0c10711 --- /dev/null +++ b/usr/local/www/javascript/autosuggest.js @@ -0,0 +1,336 @@ + +/** + * An autosuggest textbox control. + * @class + * @scope public + */ +function AutoSuggestControl(oTextbox /*:HTMLInputElement*/, + oProvider /*:SuggestionProvider*/) { + + /** + * The currently selected suggestions. + * @scope private + */ + this.cur /*:int*/ = -1; + + /** + * The dropdown list layer. + * @scope private + */ + this.layer = null; + + /** + * Suggestion provider for the autosuggest feature. + * @scope private. + */ + this.provider /*:SuggestionProvider*/ = oProvider; + + /** + * The textbox to capture. + * @scope private + */ + this.textbox /*:HTMLInputElement*/ = oTextbox; + + //initialize the control + this.init(); + +} + +/** + * Autosuggests one or more suggestions for what the user has typed. + * If no suggestions are passed in, then no autosuggest occurs. + * @scope private + * @param aSuggestions An array of suggestion strings. + * @param bTypeAhead If the control should provide a type ahead suggestion. + */ +AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/, + bTypeAhead /*:boolean*/) { + + //make sure there's at least one suggestion + if (aSuggestions.length > 0) { + if (bTypeAhead) { + this.typeAhead(aSuggestions[0]); + } + + this.showSuggestions(aSuggestions); + } else { + this.hideSuggestions(); + } +}; + +/** + * Creates the dropdown layer to display multiple suggestions. + * @scope private + */ +AutoSuggestControl.prototype.createDropDown = function () { + + var oThis = this; + + //create the layer and assign styles + this.layer = document.createElement("div"); + this.layer.className = "suggestions"; + this.layer.style.visibility = "hidden"; + this.layer.style.width = this.textbox.offsetWidth; + + //when the user clicks on the a suggestion, get the text (innerHTML) + //and place it into a textbox + this.layer.onmousedown = + this.layer.onmouseup = + this.layer.onmouseover = function (oEvent) { + oEvent = oEvent || window.event; + oTarget = oEvent.target || oEvent.srcElement; + + if (oEvent.type == "mousedown") { + oThis.textbox.value = oTarget.firstChild.nodeValue; + oThis.hideSuggestions(); + } else if (oEvent.type == "mouseover") { + oThis.highlightSuggestion(oTarget); + } else { + oThis.textbox.focus(); + } + }; + + + document.body.appendChild(this.layer); +}; + +/** + * Gets the left coordinate of the textbox. + * @scope private + * @return The left coordinate of the textbox in pixels. + */ +AutoSuggestControl.prototype.getLeft = function () /*:int*/ { + + var oNode = this.textbox; + var iLeft = 0; + + while(oNode.tagName != "BODY") { + iLeft += oNode.offsetLeft; + oNode = oNode.offsetParent; + } + + return iLeft; +}; + +/** + * Gets the top coordinate of the textbox. + * @scope private + * @return The top coordinate of the textbox in pixels. + */ +AutoSuggestControl.prototype.getTop = function () /*:int*/ { + + var oNode = this.textbox; + var iTop = 0; + + while(oNode.tagName != "BODY") { + iTop += oNode.offsetTop; + oNode = oNode.offsetParent; + } + + return iTop; +}; + +/** + * Handles three keydown events. + * @scope private + * @param oEvent The event object for the keydown event. + */ +AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) { + + switch(oEvent.keyCode) { + case 38: //up arrow + this.previousSuggestion(); + break; + case 40: //down arrow + this.nextSuggestion(); + break; + case 13: //enter + this.hideSuggestions(); + break; + } + +}; + +/** + * Handles keyup events. + * @scope private + * @param oEvent The event object for the keyup event. + */ +AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) { + + var iKeyCode = oEvent.keyCode; + + //for backspace (8) and delete (46), shows suggestions without typeahead + if (iKeyCode == 8 || iKeyCode == 46) { + this.provider.requestSuggestions(this, false); + + //make sure not to interfere with non-character keys + } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) { + //ignore + } else { + //request suggestions from the suggestion provider with typeahead + this.provider.requestSuggestions(this, true); + } +}; + +/** + * Hides the suggestion dropdown. + * @scope private + */ +AutoSuggestControl.prototype.hideSuggestions = function () { + this.layer.style.visibility = "hidden"; +}; + +/** + * Highlights the given node in the suggestions dropdown. + * @scope private + * @param oSuggestionNode The node representing a suggestion in the dropdown. + */ +AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) { + + for (var i=0; i < this.layer.childNodes.length; i++) { + var oNode = this.layer.childNodes[i]; + if (oNode == oSuggestionNode) { + oNode.className = "current"; + } else if (oNode.className == "current") { + oNode.className = ""; + } + } +}; + +/** + * Initializes the textbox with event handlers for + * auto suggest functionality. + * @scope private + */ +AutoSuggestControl.prototype.init = function () { + + //save a reference to this object + var oThis = this; + + //assign the onkeyup event handler + this.textbox.onkeyup = function (oEvent) { + + //check for the proper location of the event object + if (!oEvent) { + oEvent = window.event; + } + + //call the handleKeyUp() method with the event object + oThis.handleKeyUp(oEvent); + }; + + //assign onkeydown event handler + this.textbox.onkeydown = function (oEvent) { + + //check for the proper location of the event object + if (!oEvent) { + oEvent = window.event; + } + + //call the handleKeyDown() method with the event object + oThis.handleKeyDown(oEvent); + }; + + //assign onblur event handler (hides suggestions) + this.textbox.onblur = function () { + oThis.hideSuggestions(); + }; + + //create the suggestions dropdown + this.createDropDown(); +}; + +/** + * Highlights the next suggestion in the dropdown and + * places the suggestion into the textbox. + * @scope private + */ +AutoSuggestControl.prototype.nextSuggestion = function () { + var cSuggestionNodes = this.layer.childNodes; + + if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) { + var oNode = cSuggestionNodes[++this.cur]; + this.highlightSuggestion(oNode); + this.textbox.value = oNode.firstChild.nodeValue; + } +}; + +/** + * Highlights the previous suggestion in the dropdown and + * places the suggestion into the textbox. + * @scope private + */ +AutoSuggestControl.prototype.previousSuggestion = function () { + var cSuggestionNodes = this.layer.childNodes; + + if (cSuggestionNodes.length > 0 && this.cur > 0) { + var oNode = cSuggestionNodes[--this.cur]; + this.highlightSuggestion(oNode); + this.textbox.value = oNode.firstChild.nodeValue; + } +}; + +/** + * Selects a range of text in the textbox. + * @scope public + * @param iStart The start index (base 0) of the selection. + * @param iLength The number of characters to select. + */ +AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) { + + //use text ranges for Internet Explorer + if (this.textbox.createTextRange) { + var oRange = this.textbox.createTextRange(); + oRange.moveStart("character", iStart); + oRange.moveEnd("character", iLength - this.textbox.value.length); + oRange.select(); + + //use setSelectionRange() for Mozilla + } else if (this.textbox.setSelectionRange) { + this.textbox.setSelectionRange(iStart, iLength); + } + + //set focus back to the textbox + this.textbox.focus(); +}; + +/** + * Builds the suggestion layer contents, moves it into position, + * and displays the layer. + * @scope private + * @param aSuggestions An array of suggestions for the control. + */ +AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) { + + var oDiv = null; + this.layer.innerHTML = ""; //clear contents of the layer + + for (var i=0; i < aSuggestions.length; i++) { + oDiv = document.createElement("div"); + oDiv.appendChild(document.createTextNode(aSuggestions[i])); + this.layer.appendChild(oDiv); + } + + this.layer.style.left = this.getLeft() + "px"; + this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px"; + this.layer.style.visibility = "visible"; + +}; + +/** + * Inserts a suggestion into the textbox, highlighting the + * suggested part of the text. + * @scope private + * @param sSuggestion The suggestion for the textbox. + */ +AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) { + + //check for support of typeahead functionality + if (this.textbox.createTextRange || this.textbox.setSelectionRange){ + var iLen = this.textbox.value.length; + this.textbox.value = sSuggestion; + this.selectRange(iLen, sSuggestion.length); + } +}; + diff --git a/usr/local/www/javascript/base64.js b/usr/local/www/javascript/base64.js new file mode 100644 index 000000000..48d5f334f --- /dev/null +++ b/usr/local/www/javascript/base64.js @@ -0,0 +1,142 @@ +/** + * + * Base64 encode / decode + * http://www.webtoolkit.info/ + * http://www.webtoolkit.info/licence + **/ + +var Base64 = { + + // private property + _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + + // public method for encoding + encode : function (input) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + + input = Base64._utf8_encode(input); + + while (i < input.length) { + + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + + output = output + + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); + + } + + return output; + }, + + // public method for decoding + decode : function (input) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + while (i < input.length) { + + enc1 = this._keyStr.indexOf(input.charAt(i++)); + enc2 = this._keyStr.indexOf(input.charAt(i++)); + enc3 = this._keyStr.indexOf(input.charAt(i++)); + enc4 = this._keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output = output + String.fromCharCode(chr1); + + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + + } + + output = Base64._utf8_decode(output); + + return output; + + }, + + // private method for UTF-8 encoding + _utf8_encode : function (string) { + string = string.replace(/\r\n/g,"\n"); + var utftext = ""; + + for (var n = 0; n < string.length; n++) { + + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } + else if((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + + return utftext; + }, + + // private method for UTF-8 decoding + _utf8_decode : function (utftext) { + var string = ""; + var i = 0; + var c = c1 = c2 = 0; + + while ( i < utftext.length ) { + + c = utftext.charCodeAt(i); + + if (c < 128) { + string += String.fromCharCode(c); + i++; + } + else if((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i+1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } + else { + c2 = utftext.charCodeAt(i+1); + c3 = utftext.charCodeAt(i+2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + + } + + return string; + } + +}; \ No newline at end of file diff --git a/usr/local/www/javascript/carp_status/carp_status.js b/usr/local/www/javascript/carp_status/carp_status.js new file mode 100644 index 000000000..c14201da3 --- /dev/null +++ b/usr/local/www/javascript/carp_status/carp_status.js @@ -0,0 +1,5 @@ + +window.onLoad = function () { + NiftyCheck(); + Rounded("div#mainlevel","all","#FFF","#eeeeee","smooth"); +}; diff --git a/usr/local/www/javascript/chosen/chosen-sprite.png b/usr/local/www/javascript/chosen/chosen-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec9bbf1e6d77cd0e5f3d5ab2ae690b59cda01ea GIT binary patch literal 1866 zcmah~2~ZPP7)GdwfJQ-(OISn4S|zsxSqYkpLNOKtkx;}YBnvD_c4M+M35`Gy5wx`w zyowh>L9Grd3bca?9u*WsE@c9af{GO=gU6uN!P*T1wlmW1%zXGCC0>p)u0Sjk);+4S+7##Y+P`qUM-a=APk6y5@Ccz9ImM)06&Qbrcr=YX z0Tl8=#$(|gi2zcrgN$ktDYU@AK#K;QPQno+tpUNLdJ>}bolxLGTA2n` zV=#&U7DZ`1nu4*2c&6`4P^l+n5$$-J@P<+JQZE4OOWo(OOIhz0dc9 z!rCZ<8lngxEt;Z{;Rl!CYYC+Wxf)1{p_(WZRZesJ%Z4#;mxRL&VKq`X~i$8`J z2*5Bzi%Ag~6vkr_aRo9A%R%mP|9}uS6Ymb4O{4LtY=0h&yNtu8@)>~~E`vG2<)N|^ z6@*|DT={!0drGcl6jW+FG7r+gUqkW`4XOghN(SMna|xJIZ=5TiI+x{Baw&K+6wAT> z=!~QnwjTYQh`(R<{+m zTrAyQ>^8?fGm@>O&D+Lt@SiQ5qqyRFcHj1%`|)KQTbdo&o|C-C^~B8YzPiPZ*p}%O zk>@wy)a5p6^W7Uz#2{Xp+?GCr8$5 zi=QrB(UdQd(tk`SxF#>~YhoUe=)%6(5Es{vvwivx`t=lx zPA%#rf5sg2jlp2f+OpIxX`sh6$Zs07ztgzsNfLtW_L^N^=|Qq4kw}L0i~|Q2Y)VgG znR33SX6ew-kP8<3czC!|$@En5k8PfD>UdUZS6y93q4Vm?&3&4<<8zt!dUJ+W5w>tT zlRFxtDD!@)s(N7~Nk2twzf);FSk!!Jb53VR$GMt~u|JoW?;ac&5O#`0qGkJ^dtc8g zWlLVR5*BBRG6*S>8g>_;%(O9(;i+in_~iR#5l@cmtlR+UwKR9=C#hlJ#)AJw)^~s zlWA&oUa+25((2X%wn%&HbPIxbqp5nuVqxy|&F)PSTgKjtjtSI%nd_AcuPDOPYTvqe z5Gq<1t0K$~o*J9~s^-7FceZXv(c$?wM;lT~?nr_%>{_^&GEAFt%LuPrPl<1zPe&il zdT=*?v3Bn%nOSUK!p!!X3%4dWxn2GB{)&nVJJ-Rf)t5hZ(z9exvkN7!mS^4WHFVh; zx_P", { + id: this.container_id, + "class": 'chzn-container', + style: 'width: ' + this.f_width + 'px;' + }); + if (this.is_multiple) { + container_div.html('
      '); + } else { + container_div.html('' + this.default_text + '
        '); + } + this.form_field_jq.hide().after(container_div); + this.container = $('#' + this.container_id); + this.container.addClass("chzn-container-" + (this.is_multiple ? "multi" : "single")); + this.dropdown = this.container.find('div.chzn-drop').first(); + dd_top = this.container.height(); + dd_width = this.f_width - get_side_border_padding(this.dropdown); + this.dropdown.css({ + "width": dd_width + "px", + "top": dd_top + "px" + }); + this.search_field = this.container.find('input').first(); + this.search_results = this.container.find('ul.chzn-results').first(); + this.search_field_scale(); + this.search_no_results = this.container.find('li.no-results').first(); + if (this.is_multiple) { + this.search_choices = this.container.find('ul.chzn-choices').first(); + this.search_container = this.container.find('li.search-field').first(); + } else { + this.search_container = this.container.find('div.chzn-search').first(); + this.selected_item = this.container.find('.chzn-single').first(); + sf_width = dd_width - get_side_border_padding(this.search_container) - get_side_border_padding(this.search_field); + this.search_field.css({ + "width": sf_width + "px" + }); + } + this.results_build(); + return this.set_tab_index(); + }; + Chosen.prototype.register_observers = function() { + this.container.click(__bind(function(evt) { + return this.container_click(evt); + }, this)); + this.container.mouseenter(__bind(function(evt) { + return this.mouse_enter(evt); + }, this)); + this.container.mouseleave(__bind(function(evt) { + return this.mouse_leave(evt); + }, this)); + this.search_results.click(__bind(function(evt) { + return this.search_results_click(evt); + }, this)); + this.search_results.mouseover(__bind(function(evt) { + return this.search_results_mouseover(evt); + }, this)); + this.search_results.mouseout(__bind(function(evt) { + return this.search_results_mouseout(evt); + }, this)); + this.form_field_jq.bind("liszt:updated", __bind(function(evt) { + return this.results_update_field(evt); + }, this)); + this.search_field.blur(__bind(function(evt) { + return this.input_blur(evt); + }, this)); + this.search_field.keyup(__bind(function(evt) { + return this.keyup_checker(evt); + }, this)); + this.search_field.keydown(__bind(function(evt) { + return this.keydown_checker(evt); + }, this)); + if (this.is_multiple) { + this.search_choices.click(__bind(function(evt) { + return this.choices_click(evt); + }, this)); + return this.search_field.focus(__bind(function(evt) { + return this.input_focus(evt); + }, this)); + } else { + return this.selected_item.focus(__bind(function(evt) { + return this.activate_field(evt); + }, this)); + } + }; + Chosen.prototype.container_click = function(evt) { + if (evt && evt.type === "click") { + evt.stopPropagation(); + } + if (!this.pending_destroy_click) { + if (!this.active_field) { + if (this.is_multiple) { + this.search_field.val(""); + } + $(document).click(this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && ($(evt.target) === this.selected_item || $(evt.target).parents("a.chzn-single").length)) { + evt.preventDefault(); + this.results_toggle(); + } + return this.activate_field(); + } else { + return this.pending_destroy_click = false; + } + }; + Chosen.prototype.mouse_enter = function() { + return this.mouse_on_container = true; + }; + Chosen.prototype.mouse_leave = function() { + return this.mouse_on_container = false; + }; + Chosen.prototype.input_focus = function(evt) { + if (!this.active_field) { + return setTimeout((__bind(function() { + return this.container_click(); + }, this)), 50); + } + }; + Chosen.prototype.input_blur = function(evt) { + if (!this.mouse_on_container) { + this.active_field = false; + return setTimeout((__bind(function() { + return this.blur_test(); + }, this)), 100); + } + }; + Chosen.prototype.blur_test = function(evt) { + if (!this.active_field && this.container.hasClass("chzn-container-active")) { + return this.close_field(); + } + }; + Chosen.prototype.close_field = function() { + $(document).unbind("click", this.click_test_action); + if (!this.is_multiple) { + this.selected_item.attr("tabindex", this.search_field.attr("tabindex")); + this.search_field.attr("tabindex", -1); + } + this.active_field = false; + this.results_hide(); + this.container.removeClass("chzn-container-active"); + this.winnow_results_clear(); + this.clear_backstroke(); + this.show_search_field_default(); + return this.search_field_scale(); + }; + Chosen.prototype.activate_field = function() { + if (!this.is_multiple && !this.active_field) { + this.search_field.attr("tabindex", this.selected_item.attr("tabindex")); + this.selected_item.attr("tabindex", -1); + } + this.container.addClass("chzn-container-active"); + this.active_field = true; + this.search_field.val(this.search_field.val()); + return this.search_field.focus(); + }; + Chosen.prototype.test_active_click = function(evt) { + if ($(evt.target).parents('#' + this.container.id).length) { + return this.active_field = true; + } else { + return this.close_field(); + } + }; + Chosen.prototype.results_build = function() { + var content, data, startTime, _i, _len, _ref; + startTime = new Date(); + this.parsing = true; + this.results_data = SelectParser.select_to_array(this.form_field); + if (this.is_multiple && this.choices > 0) { + this.search_choices.find("li.search-choice").remove(); + this.choices = 0; + } else if (!this.is_multiple) { + this.selected_item.find("span").text(this.default_text); + } + content = ''; + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + data = _ref[_i]; + if (data.group) { + content += this.result_add_group(data); + } else if (!data.empty) { + content += this.result_add_option(data); + if (data.selected && this.is_multiple) { + this.choice_build(data); + } else if (data.selected && !this.is_multiple) { + this.selected_item.find("span").text(data.text); + } + } + } + this.show_search_field_default(); + this.search_field_scale(); + this.search_results.html(content); + return this.parsing = false; + }; + Chosen.prototype.result_add_group = function(group) { + if (!group.disabled) { + group.dom_id = this.form_field.id + "chzn_g_" + group.array_index; + return '
      • ' + $("
        ").text(group.label).html() + '
      • '; + } else { + return ""; + } + }; + Chosen.prototype.result_add_option = function(option) { + var classes; + if (!option.disabled) { + option.dom_id = this.form_field.id + "chzn_o_" + option.array_index; + classes = option.selected && this.is_multiple ? [] : ["active-result"]; + if (option.selected) { + classes.push("result-selected"); + } + if (option.group_array_index != null) { + classes.push("group-option"); + } + return '
      • ' + $("
        ").text(option.text).html() + '
      • '; + } else { + return ""; + } + }; + Chosen.prototype.results_update_field = function() { + this.result_clear_highlight(); + this.result_single_selected = null; + return this.results_build(); + }; + Chosen.prototype.result_do_highlight = function(el) { + var high_bottom, high_top, maxHeight, visible_bottom, visible_top; + if (el.length) { + this.result_clear_highlight(); + this.result_highlight = el; + this.result_highlight.addClass("highlighted"); + maxHeight = parseInt(this.search_results.css("maxHeight"), 10); + visible_top = this.search_results.scrollTop(); + visible_bottom = maxHeight + visible_top; + high_top = this.result_highlight.position().top + this.search_results.scrollTop(); + high_bottom = high_top + this.result_highlight.outerHeight(); + if (high_bottom >= visible_bottom) { + return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0); + } else if (high_top < visible_top) { + return this.search_results.scrollTop(high_top); + } + } + }; + Chosen.prototype.result_clear_highlight = function() { + if (this.result_highlight) { + this.result_highlight.removeClass("highlighted"); + } + return this.result_highlight = null; + }; + Chosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + Chosen.prototype.results_show = function() { + var dd_top; + if (!this.is_multiple) { + this.selected_item.addClass("chzn-single-with-drop"); + if (this.result_single_selected) { + this.result_do_highlight(this.result_single_selected); + } + } + dd_top = this.is_multiple ? this.container.height() : this.container.height() - 1; + this.dropdown.css({ + "top": dd_top + "px", + "left": 0 + }); + this.results_showing = true; + this.search_field.focus(); + this.search_field.val(this.search_field.val()); + return this.winnow_results(); + }; + Chosen.prototype.results_hide = function() { + if (!this.is_multiple) { + this.selected_item.removeClass("chzn-single-with-drop"); + } + this.result_clear_highlight(); + this.dropdown.css({ + "left": "-9000px" + }); + return this.results_showing = false; + }; + Chosen.prototype.set_tab_index = function(el) { + var ti; + if (this.form_field_jq.attr("tabindex")) { + ti = this.form_field_jq.attr("tabindex"); + this.form_field_jq.attr("tabindex", -1); + if (this.is_multiple) { + return this.search_field.attr("tabindex", ti); + } else { + this.selected_item.attr("tabindex", ti); + return this.search_field.attr("tabindex", -1); + } + } + }; + Chosen.prototype.show_search_field_default = function() { + if (this.is_multiple && this.choices < 1 && !this.active_field) { + this.search_field.val(this.default_text); + return this.search_field.addClass("default"); + } else { + this.search_field.val(""); + return this.search_field.removeClass("default"); + } + }; + Chosen.prototype.search_results_click = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target.length) { + this.result_highlight = target; + return this.result_select(); + } + }; + Chosen.prototype.search_results_mouseover = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target) { + return this.result_do_highlight(target); + } + }; + Chosen.prototype.search_results_mouseout = function(evt) { + if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) { + return this.result_clear_highlight(); + } + }; + Chosen.prototype.choices_click = function(evt) { + evt.preventDefault(); + if (this.active_field && !($(evt.target).hasClass("search-choice" || $(evt.target).parents('.search-choice').first)) && !this.results_showing) { + return this.results_show(); + } + }; + Chosen.prototype.choice_build = function(item) { + var choice_id, link; + choice_id = this.form_field.id + "_chzn_c_" + item.array_index; + this.choices += 1; + this.search_container.before('
      • ' + item.text + '
      • '); + link = $('#' + choice_id).find("a").first(); + return link.click(__bind(function(evt) { + return this.choice_destroy_link_click(evt); + }, this)); + }; + Chosen.prototype.choice_destroy_link_click = function(evt) { + evt.preventDefault(); + this.pending_destroy_click = true; + return this.choice_destroy($(evt.target)); + }; + Chosen.prototype.choice_destroy = function(link) { + this.choices -= 1; + this.show_search_field_default(); + if (this.is_multiple && this.choices > 0 && this.search_field.val().length < 1) { + this.results_hide(); + } + this.result_deselect(link.attr("rel")); + return link.parents('li').first().remove(); + }; + Chosen.prototype.result_select = function() { + var high, high_id, item, position; + if (this.result_highlight) { + high = this.result_highlight; + high_id = high.attr("id"); + this.result_clear_highlight(); + high.addClass("result-selected"); + if (this.is_multiple) { + this.result_deactivate(high); + } else { + this.result_single_selected = high; + } + position = high_id.substr(high_id.lastIndexOf("_") + 1); + item = this.results_data[position]; + item.selected = true; + this.form_field.options[item.options_index].selected = true; + if (this.is_multiple) { + this.choice_build(item); + } else { + this.selected_item.find("span").first().text(item.text); + } + this.results_hide(); + this.search_field.val(""); + this.form_field_jq.trigger("change"); + return this.search_field_scale(); + } + }; + Chosen.prototype.result_activate = function(el) { + return el.addClass("active-result").show(); + }; + Chosen.prototype.result_deactivate = function(el) { + return el.removeClass("active-result").hide(); + }; + Chosen.prototype.result_deselect = function(pos) { + var result, result_data; + result_data = this.results_data[pos]; + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + result = $("#" + this.form_field.id + "chzn_o_" + pos); + result.removeClass("result-selected").addClass("active-result").show(); + this.result_clear_highlight(); + this.winnow_results(); + this.form_field_jq.trigger("change"); + return this.search_field_scale(); + }; + Chosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + Chosen.prototype.winnow_results = function() { + var found, option, part, parts, regex, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref; + startTime = new Date(); + this.no_results_clear(); + results = 0; + searchText = this.search_field.val() === this.default_text ? "" : $.trim(this.search_field.val()); + regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i'); + zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i'); + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + if (!option.disabled && !option.empty) { + if (option.group) { + $('#' + option.dom_id).hide(); + } else if (!(this.is_multiple && option.selected)) { + found = false; + result_id = option.dom_id; + if (regex.test(option.text)) { + found = true; + results += 1; + } else if (option.text.indexOf(" ") >= 0 || option.text.indexOf("[") === 0) { + parts = option.text.replace(/\[|\]/g, "").split(" "); + if (parts.length) { + for (_j = 0, _len2 = parts.length; _j < _len2; _j++) { + part = parts[_j]; + if (regex.test(part)) { + found = true; + results += 1; + } + } + } + } + if (found) { + if (searchText.length) { + startpos = option.text.search(zregex); + text = option.text.substr(0, startpos + searchText.length) + '' + option.text.substr(startpos + searchText.length); + text = text.substr(0, startpos) + '' + text.substr(startpos); + } else { + text = option.text; + } + if ($("#" + result_id).html !== text) { + $("#" + result_id).html(text); + } + this.result_activate($("#" + result_id)); + if (option.group_array_index != null) { + $("#" + this.results_data[option.group_array_index].dom_id).show(); + } + } else { + if (this.result_highlight && result_id === this.result_highlight.attr('id')) { + this.result_clear_highlight(); + } + this.result_deactivate($("#" + result_id)); + } + } + } + } + if (results < 1 && searchText.length) { + return this.no_results(searchText); + } else { + return this.winnow_results_set_highlight(); + } + }; + Chosen.prototype.winnow_results_clear = function() { + var li, lis, _i, _len, _results; + this.search_field.val(""); + lis = this.search_results.find("li"); + _results = []; + for (_i = 0, _len = lis.length; _i < _len; _i++) { + li = lis[_i]; + li = $(li); + _results.push(li.hasClass("group-result") ? li.show() : !this.is_multiple || !li.hasClass("result-selected") ? this.result_activate(li) : void 0); + } + return _results; + }; + Chosen.prototype.winnow_results_set_highlight = function() { + var do_high; + if (!this.result_highlight) { + do_high = this.search_results.find(".active-result").first(); + if (do_high) { + return this.result_do_highlight(do_high); + } + } + }; + Chosen.prototype.no_results = function(terms) { + var no_results_html; + no_results_html = $('
      • No results match ""
      • '); + no_results_html.find("span").first().text(terms); + return this.search_results.append(no_results_html); + }; + Chosen.prototype.no_results_clear = function() { + return this.search_results.find(".no-results").remove(); + }; + Chosen.prototype.keydown_arrow = function() { + var first_active, next_sib; + if (!this.result_highlight) { + first_active = this.search_results.find("li.active-result").first(); + if (first_active) { + this.result_do_highlight($(first_active)); + } + } else if (this.results_showing) { + next_sib = this.result_highlight.nextAll("li.active-result").first(); + if (next_sib) { + this.result_do_highlight(next_sib); + } + } + if (!this.results_showing) { + return this.results_show(); + } + }; + Chosen.prototype.keyup_arrow = function() { + var prev_sibs; + if (!this.results_showing && !this.is_multiple) { + return this.results_show(); + } else if (this.result_highlight) { + prev_sibs = this.result_highlight.prevAll("li.active-result"); + if (prev_sibs.length) { + return this.result_do_highlight(prev_sibs.first()); + } else { + if (this.choices > 0) { + this.results_hide(); + } + return this.result_clear_highlight(); + } + } + }; + Chosen.prototype.keydown_backstroke = function() { + if (this.pending_backstroke) { + this.choice_destroy(this.pending_backstroke.find("a").first()); + return this.clear_backstroke(); + } else { + this.pending_backstroke = this.search_container.siblings("li.search-choice").last(); + return this.pending_backstroke.addClass("search-choice-focus"); + } + }; + Chosen.prototype.clear_backstroke = function() { + if (this.pending_backstroke) { + this.pending_backstroke.removeClass("search-choice-focus"); + } + return this.pending_backstroke = null; + }; + Chosen.prototype.keyup_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) { + return this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + return this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + return this.result_select(); + } + break; + case 27: + if (this.results_showing) { + return this.results_hide(); + } + break; + case 9: + case 38: + case 40: + case 16: + break; + default: + return this.results_search(); + } + }; + Chosen.prototype.keydown_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + if (stroke !== 8 && this.pending_backstroke) { + this.clear_backstroke(); + } + switch (stroke) { + case 8: + this.backstroke_length = this.search_field.val().length; + break; + case 9: + this.mouse_on_container = false; + break; + case 13: + evt.preventDefault(); + break; + case 38: + evt.preventDefault(); + this.keyup_arrow(); + break; + case 40: + this.keydown_arrow(); + break; + } + }; + Chosen.prototype.search_field_scale = function() { + var dd_top, div, h, style, style_block, styles, w, _i, _len; + if (this.is_multiple) { + h = 0; + w = 0; + style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; + styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; + for (_i = 0, _len = styles.length; _i < _len; _i++) { + style = styles[_i]; + style_block += style + ":" + this.search_field.css(style) + ";"; + } + div = $('
        ', { + 'style': style_block + }); + div.text(this.search_field.val()); + $('body').append(div); + w = div.width() + 25; + div.remove(); + if (w > this.f_width - 10) { + w = this.f_width - 10; + } + this.search_field.css({ + 'width': w + 'px' + }); + dd_top = this.container.height(); + return this.dropdown.css({ + "top": dd_top + "px" + }); + } + }; + return Chosen; + })(); + get_side_border_padding = function(elmt) { + var side_border_padding; + return side_border_padding = elmt.outerWidth() - elmt.width(); + }; + root.get_side_border_padding = get_side_border_padding; + SelectParser = (function() { + function SelectParser() { + this.options_index = 0; + this.parsed = []; + } + SelectParser.prototype.add_node = function(child) { + if (child.nodeName === "OPTGROUP") { + return this.add_group(child); + } else { + return this.add_option(child); + } + }; + SelectParser.prototype.add_group = function(group) { + var group_position, option, _i, _len, _ref, _results; + group_position = this.parsed.length; + this.parsed.push({ + array_index: group_position, + group: true, + label: group.label, + children: 0, + disabled: group.disabled + }); + _ref = group.childNodes; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + _results.push(this.add_option(option, group_position, group.disabled)); + } + return _results; + }; + SelectParser.prototype.add_option = function(option, group_position, group_disabled) { + if (option.nodeName === "OPTION") { + if (option.text !== "") { + if (group_position != null) { + this.parsed[group_position].children += 1; + } + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + value: option.value, + text: option.text, + selected: option.selected, + disabled: group_disabled === true ? group_disabled : option.disabled, + group_array_index: group_position + }); + } else { + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + empty: true + }); + } + return this.options_index += 1; + } + }; + return SelectParser; + })(); + SelectParser.select_to_array = function(select) { + var child, parser, _i, _len, _ref; + parser = new SelectParser(); + _ref = select.childNodes; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + child = _ref[_i]; + parser.add_node(child); + } + return parser.parsed; + }; + root.SelectParser = SelectParser; +}).call(this); diff --git a/usr/local/www/javascript/chosen/chosen.jquery.min.js b/usr/local/www/javascript/chosen/chosen.jquery.min.js new file mode 100644 index 000000000..ae69f2242 --- /dev/null +++ b/usr/local/www/javascript/chosen/chosen.jquery.min.js @@ -0,0 +1,9 @@ +/* +Chosen, a Select Box Enhancer for jQuery and Protoype +by Patrick Filler for Harvest, http://getharvest.com + +Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License + +Copyright (c) 2011 by Harvest +*/ +(function(){var $,Chosen,SelectParser,get_side_border_padding,root;var __bind=function(fn,me){return function(){return fn.apply(me,arguments);};};root=typeof exports!=="undefined"&&exports!==null?exports:this;$=jQuery;$.fn.extend({chosen:function(data,options){return $(this).each(function(input_field){if(!($(this)).hasClass("chzn-done")){return new Chosen(this,data,options);}});}});Chosen=(function(){function Chosen(elmn){this.set_default_values();this.form_field=elmn;this.form_field_jq=$(this.form_field);this.is_multiple=this.form_field.multiple;this.default_text_default=this.form_field.multiple?"Select Some Options":"Select an Option";this.set_up_html();this.register_observers();this.form_field_jq.addClass("chzn-done");}Chosen.prototype.set_default_values=function(){this.click_test_action=__bind(function(evt){return this.test_active_click(evt);},this);this.active_field=false;this.mouse_on_container=false;this.results_showing=false;this.result_highlighted=null;this.result_single_selected=null;return this.choices=0;};Chosen.prototype.set_up_html=function(){var container_div,dd_top,dd_width,sf_width;this.container_id=this.form_field.id+"_chzn";this.f_width=this.form_field_jq.width();this.default_text=this.form_field_jq.attr("title")?this.form_field_jq.attr("title"):this.default_text_default;container_div=$("
        ",{id:this.container_id,"class":"chzn-container",style:"width: "+this.f_width+"px;"});if(this.is_multiple){container_div.html('
          ');}else{container_div.html(''+this.default_text+'
            ');}this.form_field_jq.hide().after(container_div);this.container=$("#"+this.container_id);this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single"));this.dropdown=this.container.find("div.chzn-drop").first();dd_top=this.container.height();dd_width=this.f_width-get_side_border_padding(this.dropdown);this.dropdown.css({width:dd_width+"px",top:dd_top+"px"});this.search_field=this.container.find("input").first();this.search_results=this.container.find("ul.chzn-results").first();this.search_field_scale();this.search_no_results=this.container.find("li.no-results").first();if(this.is_multiple){this.search_choices=this.container.find("ul.chzn-choices").first();this.search_container=this.container.find("li.search-field").first();}else{this.search_container=this.container.find("div.chzn-search").first();this.selected_item=this.container.find(".chzn-single").first();sf_width=dd_width-get_side_border_padding(this.search_container)-get_side_border_padding(this.search_field);this.search_field.css({width:sf_width+"px"});}this.results_build();return this.set_tab_index();};Chosen.prototype.register_observers=function(){this.container.click(__bind(function(evt){return this.container_click(evt);},this));this.container.mouseenter(__bind(function(evt){return this.mouse_enter(evt);},this));this.container.mouseleave(__bind(function(evt){return this.mouse_leave(evt);},this));this.search_results.click(__bind(function(evt){return this.search_results_click(evt);},this));this.search_results.mouseover(__bind(function(evt){return this.search_results_mouseover(evt);},this));this.search_results.mouseout(__bind(function(evt){return this.search_results_mouseout(evt);},this));this.form_field_jq.bind("liszt:updated",__bind(function(evt){return this.results_update_field(evt);},this));this.search_field.blur(__bind(function(evt){return this.input_blur(evt);},this));this.search_field.keyup(__bind(function(evt){return this.keyup_checker(evt);},this));this.search_field.keydown(__bind(function(evt){return this.keydown_checker(evt);},this));if(this.is_multiple){this.search_choices.click(__bind(function(evt){return this.choices_click(evt);},this));return this.search_field.focus(__bind(function(evt){return this.input_focus(evt);},this));}else{return this.selected_item.focus(__bind(function(evt){return this.activate_field(evt);},this));}};Chosen.prototype.container_click=function(evt){if(evt&&evt.type==="click"){evt.stopPropagation();}if(!this.pending_destroy_click){if(!this.active_field){if(this.is_multiple){this.search_field.val("");}$(document).click(this.click_test_action);this.results_show();}else{if(!this.is_multiple&&evt&&($(evt.target)===this.selected_item||$(evt.target).parents("a.chzn-single").length)){evt.preventDefault();this.results_toggle();}}return this.activate_field();}else{return this.pending_destroy_click=false;}};Chosen.prototype.mouse_enter=function(){return this.mouse_on_container=true;};Chosen.prototype.mouse_leave=function(){return this.mouse_on_container=false;};Chosen.prototype.input_focus=function(evt){if(!this.active_field){return setTimeout((__bind(function(){return this.container_click();},this)),50);}};Chosen.prototype.input_blur=function(evt){if(!this.mouse_on_container){this.active_field=false;return setTimeout((__bind(function(){return this.blur_test();},this)),100);}};Chosen.prototype.blur_test=function(evt){if(!this.active_field&&this.container.hasClass("chzn-container-active")){return this.close_field();}};Chosen.prototype.close_field=function(){$(document).unbind("click",this.click_test_action);if(!this.is_multiple){this.selected_item.attr("tabindex",this.search_field.attr("tabindex"));this.search_field.attr("tabindex",-1);}this.active_field=false;this.results_hide();this.container.removeClass("chzn-container-active");this.winnow_results_clear();this.clear_backstroke();this.show_search_field_default();return this.search_field_scale();};Chosen.prototype.activate_field=function(){if(!this.is_multiple&&!this.active_field){this.search_field.attr("tabindex",this.selected_item.attr("tabindex"));this.selected_item.attr("tabindex",-1);}this.container.addClass("chzn-container-active");this.active_field=true;this.search_field.val(this.search_field.val());return this.search_field.focus();};Chosen.prototype.test_active_click=function(evt){if($(evt.target).parents("#"+this.container.id).length){return this.active_field=true;}else{return this.close_field();}};Chosen.prototype.results_build=function(){var content,data,startTime,_i,_len,_ref;startTime=new Date();this.parsing=true;this.results_data=SelectParser.select_to_array(this.form_field);if(this.is_multiple&&this.choices>0){this.search_choices.find("li.search-choice").remove();this.choices=0;}else{if(!this.is_multiple){this.selected_item.find("span").text(this.default_text);}}content="";_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){data=_ref[_i];if(data.group){content+=this.result_add_group(data);}else{if(!data.empty){content+=this.result_add_option(data);if(data.selected&&this.is_multiple){this.choice_build(data);}else{if(data.selected&&!this.is_multiple){this.selected_item.find("span").text(data.text);}}}}}this.show_search_field_default();this.search_field_scale();this.search_results.html(content);return this.parsing=false;};Chosen.prototype.result_add_group=function(group){if(!group.disabled){group.dom_id=this.form_field.id+"chzn_g_"+group.array_index;return'
          • '+$("
            ").text(group.label).html()+"
          • ";}else{return"";}};Chosen.prototype.result_add_option=function(option){var classes;if(!option.disabled){option.dom_id=this.form_field.id+"chzn_o_"+option.array_index;classes=option.selected&&this.is_multiple?[]:["active-result"];if(option.selected){classes.push("result-selected");}if(option.group_array_index!=null){classes.push("group-option");}return'
          • '+$("
            ").text(option.text).html()+"
          • ";}else{return"";}};Chosen.prototype.results_update_field=function(){this.result_clear_highlight();this.result_single_selected=null;return this.results_build();};Chosen.prototype.result_do_highlight=function(el){var high_bottom,high_top,maxHeight,visible_bottom,visible_top;if(el.length){this.result_clear_highlight();this.result_highlight=el;this.result_highlight.addClass("highlighted");maxHeight=parseInt(this.search_results.css("maxHeight"),10);visible_top=this.search_results.scrollTop();visible_bottom=maxHeight+visible_top;high_top=this.result_highlight.position().top+this.search_results.scrollTop();high_bottom=high_top+this.result_highlight.outerHeight();if(high_bottom>=visible_bottom){return this.search_results.scrollTop((high_bottom-maxHeight)>0?high_bottom-maxHeight:0);}else{if(high_top'+item.text+'');link=$("#"+choice_id).find("a").first();return link.click(__bind(function(evt){return this.choice_destroy_link_click(evt);},this));};Chosen.prototype.choice_destroy_link_click=function(evt){evt.preventDefault();this.pending_destroy_click=true;return this.choice_destroy($(evt.target));};Chosen.prototype.choice_destroy=function(link){this.choices-=1;this.show_search_field_default();if(this.is_multiple&&this.choices>0&&this.search_field.val().length<1){this.results_hide();}this.result_deselect(link.attr("rel"));return link.parents("li").first().remove();};Chosen.prototype.result_select=function(){var high,high_id,item,position;if(this.result_highlight){high=this.result_highlight;high_id=high.attr("id");this.result_clear_highlight();high.addClass("result-selected");if(this.is_multiple){this.result_deactivate(high);}else{this.result_single_selected=high;}position=high_id.substr(high_id.lastIndexOf("_")+1);item=this.results_data[position];item.selected=true;this.form_field.options[item.options_index].selected=true;if(this.is_multiple){this.choice_build(item);}else{this.selected_item.find("span").first().text(item.text);}this.results_hide();this.search_field.val("");this.form_field_jq.trigger("change");return this.search_field_scale();}};Chosen.prototype.result_activate=function(el){return el.addClass("active-result").show();};Chosen.prototype.result_deactivate=function(el){return el.removeClass("active-result").hide();};Chosen.prototype.result_deselect=function(pos){var result,result_data;result_data=this.results_data[pos];result_data.selected=false;this.form_field.options[result_data.options_index].selected=false;result=$("#"+this.form_field.id+"chzn_o_"+pos);result.removeClass("result-selected").addClass("active-result").show();this.result_clear_highlight();this.winnow_results();this.form_field_jq.trigger("change");return this.search_field_scale();};Chosen.prototype.results_search=function(evt){if(this.results_showing){return this.winnow_results();}else{return this.results_show();}};Chosen.prototype.winnow_results=function(){var found,option,part,parts,regex,result_id,results,searchText,startTime,startpos,text,zregex,_i,_j,_len,_len2,_ref;startTime=new Date();this.no_results_clear();results=0;searchText=this.search_field.val()===this.default_text?"":$.trim(this.search_field.val());regex=new RegExp("^"+searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");zregex=new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];if(!option.disabled&&!option.empty){if(option.group){$("#"+option.dom_id).hide();}else{if(!(this.is_multiple&&option.selected)){found=false;result_id=option.dom_id;if(regex.test(option.text)){found=true;results+=1;}else{if(option.text.indexOf(" ")>=0||option.text.indexOf("[")===0){parts=option.text.replace(/\[|\]/g,"").split(" ");if(parts.length){for(_j=0,_len2=parts.length;_j<_len2;_j++){part=parts[_j];if(regex.test(part)){found=true;results+=1;}}}}}if(found){if(searchText.length){startpos=option.text.search(zregex);text=option.text.substr(0,startpos+searchText.length)+"
            "+option.text.substr(startpos+searchText.length);text=text.substr(0,startpos)+""+text.substr(startpos);}else{text=option.text;}if($("#"+result_id).html!==text){$("#"+result_id).html(text);}this.result_activate($("#"+result_id));if(option.group_array_index!=null){$("#"+this.results_data[option.group_array_index].dom_id).show();}}else{if(this.result_highlight&&result_id===this.result_highlight.attr("id")){this.result_clear_highlight();}this.result_deactivate($("#"+result_id));}}}}}if(results<1&&searchText.length){return this.no_results(searchText);}else{return this.winnow_results_set_highlight();}};Chosen.prototype.winnow_results_clear=function(){var li,lis,_i,_len,_results;this.search_field.val("");lis=this.search_results.find("li");_results=[];for(_i=0,_len=lis.length;_i<_len;_i++){li=lis[_i];li=$(li);_results.push(li.hasClass("group-result")?li.show():!this.is_multiple||!li.hasClass("result-selected")?this.result_activate(li):void 0);}return _results;};Chosen.prototype.winnow_results_set_highlight=function(){var do_high;if(!this.result_highlight){do_high=this.search_results.find(".active-result").first();if(do_high){return this.result_do_highlight(do_high);}}};Chosen.prototype.no_results=function(terms){var no_results_html;no_results_html=$('
          • No results match ""
          • ');no_results_html.find("span").first().text(terms);return this.search_results.append(no_results_html);};Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove();};Chosen.prototype.keydown_arrow=function(){var first_active,next_sib;if(!this.result_highlight){first_active=this.search_results.find("li.active-result").first();if(first_active){this.result_do_highlight($(first_active));}}else{if(this.results_showing){next_sib=this.result_highlight.nextAll("li.active-result").first();if(next_sib){this.result_do_highlight(next_sib);}}}if(!this.results_showing){return this.results_show();}};Chosen.prototype.keyup_arrow=function(){var prev_sibs;if(!this.results_showing&&!this.is_multiple){return this.results_show();}else{if(this.result_highlight){prev_sibs=this.result_highlight.prevAll("li.active-result");if(prev_sibs.length){return this.result_do_highlight(prev_sibs.first());}else{if(this.choices>0){this.results_hide();}return this.result_clear_highlight();}}}};Chosen.prototype.keydown_backstroke=function(){if(this.pending_backstroke){this.choice_destroy(this.pending_backstroke.find("a").first());return this.clear_backstroke();}else{this.pending_backstroke=this.search_container.siblings("li.search-choice").last();return this.pending_backstroke.addClass("search-choice-focus");}};Chosen.prototype.clear_backstroke=function(){if(this.pending_backstroke){this.pending_backstroke.removeClass("search-choice-focus");}return this.pending_backstroke=null;};Chosen.prototype.keyup_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();switch(stroke){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0){return this.keydown_backstroke();}else{if(!this.pending_backstroke){this.result_clear_highlight();return this.results_search();}}break;case 13:evt.preventDefault();if(this.results_showing){return this.result_select();}break;case 27:if(this.results_showing){return this.results_hide();}break;case 9:case 38:case 40:case 16:break;default:return this.results_search();}};Chosen.prototype.keydown_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();if(stroke!==8&&this.pending_backstroke){this.clear_backstroke();}switch(stroke){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.mouse_on_container=false;break;case 13:evt.preventDefault();break;case 38:evt.preventDefault();this.keyup_arrow();break;case 40:this.keydown_arrow();break;}};Chosen.prototype.search_field_scale=function(){var dd_top,div,h,style,style_block,styles,w,_i,_len;if(this.is_multiple){h=0;w=0;style_block="position:absolute; left: -1000px; top: -1000px; display:none;";styles=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(_i=0,_len=styles.length;_i<_len;_i++){style=styles[_i];style_block+=style+":"+this.search_field.css(style)+";";}div=$("
            ",{style:style_block});div.text(this.search_field.val());$("body").append(div);w=div.width()+25;div.remove();if(w>this.f_width-10){w=this.f_width-10;}this.search_field.css({width:w+"px"});dd_top=this.container.height();return this.dropdown.css({top:dd_top+"px"});}};return Chosen;})();get_side_border_padding=function(elmt){var side_border_padding;return side_border_padding=elmt.outerWidth()-elmt.width();};root.get_side_border_padding=get_side_border_padding;SelectParser=(function(){function SelectParser(){this.options_index=0;this.parsed=[];}SelectParser.prototype.add_node=function(child){if(child.nodeName==="OPTGROUP"){return this.add_group(child);}else{return this.add_option(child);}};SelectParser.prototype.add_group=function(group){var group_position,option,_i,_len,_ref,_results;group_position=this.parsed.length;this.parsed.push({array_index:group_position,group:true,label:group.label,children:0,disabled:group.disabled});_ref=group.childNodes;_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];_results.push(this.add_option(option,group_position,group.disabled));}return _results;};SelectParser.prototype.add_option=function(option,group_position,group_disabled){if(option.nodeName==="OPTION"){if(option.text!==""){if(group_position!=null){this.parsed[group_position].children+=1;}this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:option.value,text:option.text,selected:option.selected,disabled:group_disabled===true?group_disabled:option.disabled,group_array_index:group_position});}else{this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:true});}return this.options_index+=1;}};return SelectParser;})();SelectParser.select_to_array=function(select){var child,parser,_i,_len,_ref;parser=new SelectParser();_ref=select.childNodes;for(_i=0,_len=_ref.length;_i<_len;_i++){child=_ref[_i];parser.add_node(child);}return parser.parsed;};root.SelectParser=SelectParser;}).call(this); \ No newline at end of file diff --git a/usr/local/www/javascript/chosen/chosen.proto.js b/usr/local/www/javascript/chosen/chosen.proto.js new file mode 100644 index 000000000..e3c0fbde1 --- /dev/null +++ b/usr/local/www/javascript/chosen/chosen.proto.js @@ -0,0 +1,765 @@ +(function() { + /* + Chosen, a Select Box Enhancer for jQuery and Protoype + by Patrick Filler for Harvest, http://getharvest.com + + Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License + + Copyright (c) 2011 by Harvest + */ var Chosen, SelectParser, get_side_border_padding, root; + var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + root = typeof exports !== "undefined" && exports !== null ? exports : this; + Chosen = (function() { + function Chosen(elmn) { + this.set_default_values(); + this.form_field = elmn; + this.is_multiple = this.form_field.multiple; + this.default_text_default = this.form_field.multiple ? "Select Some Options" : "Select an Option"; + this.set_up_html(); + this.register_observers(); + } + Chosen.prototype.set_default_values = function() { + this.click_test_action = __bind(function(evt) { + return this.test_active_click(evt); + }, this); + this.active_field = false; + this.mouse_on_container = false; + this.results_showing = false; + this.result_highlighted = null; + this.result_single_selected = null; + this.choices = 0; + this.single_temp = new Template('#{default}
              '); + this.multi_temp = new Template('
                '); + this.choice_temp = new Template('
              • #{choice}
              • '); + return this.no_results_temp = new Template('
              • No results match "#{terms}"
              • '); + }; + Chosen.prototype.set_up_html = function() { + var base_template, container_props, dd_top, dd_width, sf_width; + this.container_id = this.form_field.id + "_chzn"; + this.f_width = this.form_field.getStyle("width") ? parseInt(this.form_field.getStyle("width"), 10) : this.form_field.getWidth(); + container_props = { + 'id': this.container_id, + 'class': 'chzn-container', + 'style': 'width: ' + this.f_width + 'px' + }; + this.default_text = this.form_field.readAttribute('title') ? this.form_field.readAttribute('title') : this.default_text_default; + base_template = this.is_multiple ? new Element('div', container_props).update(this.multi_temp.evaluate({ + "default": this.default_text + })) : new Element('div', container_props).update(this.single_temp.evaluate({ + "default": this.default_text + })); + this.form_field.hide().insert({ + after: base_template + }); + this.container = $(this.container_id); + this.container.addClassName("chzn-container-" + (this.is_multiple ? "multi" : "single")); + this.dropdown = this.container.down('div.chzn-drop'); + dd_top = this.container.getHeight(); + dd_width = this.f_width - get_side_border_padding(this.dropdown); + this.dropdown.setStyle({ + "width": dd_width + "px", + "top": dd_top + "px" + }); + this.search_field = this.container.down('input'); + this.search_results = this.container.down('ul.chzn-results'); + this.search_field_scale(); + this.search_no_results = this.container.down('li.no-results'); + if (this.is_multiple) { + this.search_choices = this.container.down('ul.chzn-choices'); + this.search_container = this.container.down('li.search-field'); + } else { + this.search_container = this.container.down('div.chzn-search'); + this.selected_item = this.container.down('.chzn-single'); + sf_width = dd_width - get_side_border_padding(this.search_container) - get_side_border_padding(this.search_field); + this.search_field.setStyle({ + "width": sf_width + "px" + }); + } + this.results_build(); + return this.set_tab_index(); + }; + Chosen.prototype.register_observers = function() { + this.container.observe("click", __bind(function(evt) { + return this.container_click(evt); + }, this)); + this.container.observe("mouseenter", __bind(function(evt) { + return this.mouse_enter(evt); + }, this)); + this.container.observe("mouseleave", __bind(function(evt) { + return this.mouse_leave(evt); + }, this)); + this.search_results.observe("click", __bind(function(evt) { + return this.search_results_click(evt); + }, this)); + this.search_results.observe("mouseover", __bind(function(evt) { + return this.search_results_mouseover(evt); + }, this)); + this.search_results.observe("mouseout", __bind(function(evt) { + return this.search_results_mouseout(evt); + }, this)); + this.form_field.observe("liszt:updated", __bind(function(evt) { + return this.results_update_field(evt); + }, this)); + this.search_field.observe("blur", __bind(function(evt) { + return this.input_blur(evt); + }, this)); + this.search_field.observe("keyup", __bind(function(evt) { + return this.keyup_checker(evt); + }, this)); + this.search_field.observe("keydown", __bind(function(evt) { + return this.keydown_checker(evt); + }, this)); + if (this.is_multiple) { + this.search_choices.observe("click", __bind(function(evt) { + return this.choices_click(evt); + }, this)); + return this.search_field.observe("focus", __bind(function(evt) { + return this.input_focus(evt); + }, this)); + } else { + return this.selected_item.observe("focus", __bind(function(evt) { + return this.activate_field(evt); + }, this)); + } + }; + Chosen.prototype.container_click = function(evt) { + if (evt && evt.type === "click") { + evt.stop(); + } + if (!this.pending_destroy_click) { + if (!this.active_field) { + if (this.is_multiple) { + this.search_field.clear(); + } + document.observe("click", this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && (evt.target === this.selected_item || evt.target.up("a.chzn-single"))) { + this.results_toggle(); + } + return this.activate_field(); + } else { + return this.pending_destroy_click = false; + } + }; + Chosen.prototype.mouse_enter = function() { + return this.mouse_on_container = true; + }; + Chosen.prototype.mouse_leave = function() { + return this.mouse_on_container = false; + }; + Chosen.prototype.input_focus = function(evt) { + if (!this.active_field) { + return setTimeout(this.container_click.bind(this), 50); + } + }; + Chosen.prototype.input_blur = function(evt) { + if (!this.mouse_on_container) { + this.active_field = false; + return setTimeout(this.blur_test.bind(this), 100); + } + }; + Chosen.prototype.blur_test = function(evt) { + if (!this.active_field && this.container.hasClassName("chzn-container-active")) { + return this.close_field(); + } + }; + Chosen.prototype.close_field = function() { + document.stopObserving("click", this.click_test_action); + if (!this.is_multiple) { + this.selected_item.tabIndex = this.search_field.tabIndex; + this.search_field.tabIndex = -1; + } + this.active_field = false; + this.results_hide(); + this.container.removeClassName("chzn-container-active"); + this.winnow_results_clear(); + this.clear_backstroke(); + this.show_search_field_default(); + return this.search_field_scale(); + }; + Chosen.prototype.activate_field = function() { + if (!this.is_multiple && !this.active_field) { + this.search_field.tabIndex = this.selected_item.tabIndex; + this.selected_item.tabIndex = -1; + } + this.container.addClassName("chzn-container-active"); + this.active_field = true; + this.search_field.value = this.search_field.value; + return this.search_field.focus(); + }; + Chosen.prototype.test_active_click = function(evt) { + if (evt.target.up('#' + this.container.id)) { + return this.active_field = true; + } else { + return this.close_field(); + } + }; + Chosen.prototype.results_build = function() { + var content, data, startTime, _i, _len, _ref; + startTime = new Date(); + this.parsing = true; + this.results_data = SelectParser.select_to_array(this.form_field); + if (this.is_multiple && this.choices > 0) { + this.search_choices.select("li.search-choice").invoke("remove"); + this.choices = 0; + } else if (!this.is_multiple) { + this.selected_item.down("span").update(this.default_text); + } + content = ''; + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + data = _ref[_i]; + if (data.group) { + content += this.result_add_group(data); + } else if (!data.empty) { + content += this.result_add_option(data); + if (data.selected && this.is_multiple) { + this.choice_build(data); + } else if (data.selected && !this.is_multiple) { + this.selected_item.down("span").update(data.text); + } + } + } + this.show_search_field_default(); + this.search_field_scale(); + this.search_results.update(content); + return this.parsing = false; + }; + Chosen.prototype.result_add_group = function(group) { + if (!group.disabled) { + group.dom_id = this.form_field.id + "chzn_g_" + group.array_index; + return '
              • ' + group.label.escapeHTML() + '
              • '; + } else { + return ""; + } + }; + Chosen.prototype.result_add_option = function(option) { + var classes; + if (!option.disabled) { + option.dom_id = this.form_field.id + "chzn_o_" + option.array_index; + classes = option.selected && this.is_multiple ? [] : ["active-result"]; + if (option.selected) { + classes.push("result-selected"); + } + if (option.group_array_index != null) { + classes.push("group-option"); + } + return '
              • ' + option.text.escapeHTML() + '
              • '; + } else { + return ""; + } + }; + Chosen.prototype.results_update_field = function() { + this.result_clear_highlight(); + this.result_single_selected = null; + return this.results_build(); + }; + Chosen.prototype.result_do_highlight = function(el) { + var high_bottom, high_top, maxHeight, visible_bottom, visible_top; + this.result_clear_highlight(); + this.result_highlight = el; + this.result_highlight.addClassName("highlighted"); + maxHeight = parseInt(this.search_results.getStyle('maxHeight'), 10); + visible_top = this.search_results.scrollTop; + visible_bottom = maxHeight + visible_top; + high_top = this.result_highlight.positionedOffset().top; + high_bottom = high_top + this.result_highlight.getHeight(); + if (high_bottom >= visible_bottom) { + return this.search_results.scrollTop = (high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0; + } else if (high_top < visible_top) { + return this.search_results.scrollTop = high_top; + } + }; + Chosen.prototype.result_clear_highlight = function() { + if (this.result_highlight) { + this.result_highlight.removeClassName('highlighted'); + } + return this.result_highlight = null; + }; + Chosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + Chosen.prototype.results_show = function() { + var dd_top; + if (!this.is_multiple) { + this.selected_item.addClassName('chzn-single-with-drop'); + if (this.result_single_selected) { + this.result_do_highlight(this.result_single_selected); + } + } + dd_top = this.is_multiple ? this.container.getHeight() : this.container.getHeight() - 1; + this.dropdown.setStyle({ + "top": dd_top + "px", + "left": 0 + }); + this.results_showing = true; + this.search_field.focus(); + this.search_field.value = this.search_field.value; + return this.winnow_results(); + }; + Chosen.prototype.results_hide = function() { + if (!this.is_multiple) { + this.selected_item.removeClassName('chzn-single-with-drop'); + } + this.result_clear_highlight(); + this.dropdown.setStyle({ + "left": "-9000px" + }); + return this.results_showing = false; + }; + Chosen.prototype.set_tab_index = function(el) { + var ti; + if (this.form_field.tabIndex) { + ti = this.form_field.tabIndex; + this.form_field.tabIndex = -1; + if (this.is_multiple) { + return this.search_field.tabIndex = ti; + } else { + this.selected_item.tabIndex = ti; + return this.search_field.tabIndex = -1; + } + } + }; + Chosen.prototype.show_search_field_default = function() { + if (this.is_multiple && this.choices < 1 && !this.active_field) { + this.search_field.value = this.default_text; + return this.search_field.addClassName("default"); + } else { + this.search_field.value = ""; + return this.search_field.removeClassName("default"); + } + }; + Chosen.prototype.search_results_click = function(evt) { + var target; + target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); + if (target) { + this.result_highlight = target; + return this.result_select(); + } + }; + Chosen.prototype.search_results_mouseover = function(evt) { + var target; + target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); + if (target) { + return this.result_do_highlight(target); + } + }; + Chosen.prototype.search_results_mouseout = function(evt) { + if (evt.target.hasClassName('active-result') || evt.target.up('.active-result')) { + return this.result_clear_highlight(); + } + }; + Chosen.prototype.choices_click = function(evt) { + evt.preventDefault(); + if (this.active_field && !(evt.target.hasClassName('search-choice') || evt.target.up('.search-choice')) && !this.results_showing) { + return this.results_show(); + } + }; + Chosen.prototype.choice_build = function(item) { + var choice_id, link; + choice_id = this.form_field.id + "_chzn_c_" + item.array_index; + this.choices += 1; + this.search_container.insert({ + before: this.choice_temp.evaluate({ + "id": choice_id, + "choice": item.text, + "position": item.array_index + }) + }); + link = $(choice_id).down('a'); + return link.observe("click", __bind(function(evt) { + return this.choice_destroy_link_click(evt); + }, this)); + }; + Chosen.prototype.choice_destroy_link_click = function(evt) { + evt.preventDefault(); + this.pending_destroy_click = true; + return this.choice_destroy(evt.target); + }; + Chosen.prototype.choice_destroy = function(link) { + this.choices -= 1; + this.show_search_field_default(); + if (this.is_multiple && this.choices > 0 && this.search_field.value.length < 1) { + this.results_hide(); + } + this.result_deselect(link.readAttribute("rel")); + return link.up('li').remove(); + }; + Chosen.prototype.result_select = function() { + var high, item, position; + if (this.result_highlight) { + high = this.result_highlight; + this.result_clear_highlight(); + high.addClassName("result-selected"); + if (this.is_multiple) { + this.result_deactivate(high); + } else { + this.result_single_selected = high; + } + position = high.id.substr(high.id.lastIndexOf("_") + 1); + item = this.results_data[position]; + item.selected = true; + this.form_field.options[item.options_index].selected = true; + if (this.is_multiple) { + this.choice_build(item); + } else { + this.selected_item.down("span").update(item.text); + } + this.results_hide(); + this.search_field.value = ""; + if (typeof Event.simulate === 'function') { + this.form_field.simulate("change"); + } + return this.search_field_scale(); + } + }; + Chosen.prototype.result_activate = function(el) { + return el.addClassName("active-result").show(); + }; + Chosen.prototype.result_deactivate = function(el) { + return el.removeClassName("active-result").hide(); + }; + Chosen.prototype.result_deselect = function(pos) { + var result, result_data; + result_data = this.results_data[pos]; + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + result = $(this.form_field.id + "chzn_o_" + pos); + result.removeClassName("result-selected").addClassName("active-result").show(); + this.result_clear_highlight(); + this.winnow_results(); + if (typeof Event.simulate === 'function') { + this.form_field.simulate("change"); + } + return this.search_field_scale(); + }; + Chosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + Chosen.prototype.winnow_results = function() { + var found, option, part, parts, regex, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref; + startTime = new Date(); + this.no_results_clear(); + results = 0; + searchText = this.search_field.value === this.default_text ? "" : this.search_field.value.strip(); + regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i'); + zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i'); + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + if (!option.disabled && !option.empty) { + if (option.group) { + $(option.dom_id).hide(); + } else if (!(this.is_multiple && option.selected)) { + found = false; + result_id = option.dom_id; + if (regex.test(option.text)) { + found = true; + results += 1; + } else if (option.text.indexOf(" ") >= 0 || option.text.indexOf("[") === 0) { + parts = option.text.replace(/\[|\]/g, "").split(" "); + if (parts.length) { + for (_j = 0, _len2 = parts.length; _j < _len2; _j++) { + part = parts[_j]; + if (regex.test(part)) { + found = true; + results += 1; + } + } + } + } + if (found) { + if (searchText.length) { + startpos = option.text.search(zregex); + text = option.text.substr(0, startpos + searchText.length) + '
                ' + option.text.substr(startpos + searchText.length); + text = text.substr(0, startpos) + '' + text.substr(startpos); + } else { + text = option.text; + } + if ($(result_id).innerHTML !== text) { + $(result_id).update(text); + } + this.result_activate($(result_id)); + if (option.group_array_index != null) { + $(this.results_data[option.group_array_index].dom_id).show(); + } + } else { + if ($(result_id) === this.result_highlight) { + this.result_clear_highlight(); + } + this.result_deactivate($(result_id)); + } + } + } + } + if (results < 1 && searchText.length) { + return this.no_results(searchText); + } else { + return this.winnow_results_set_highlight(); + } + }; + Chosen.prototype.winnow_results_clear = function() { + var li, lis, _i, _len, _results; + this.search_field.clear(); + lis = this.search_results.select("li"); + _results = []; + for (_i = 0, _len = lis.length; _i < _len; _i++) { + li = lis[_i]; + _results.push(li.hasClassName("group-result") ? li.show() : !this.is_multiple || !li.hasClassName("result-selected") ? this.result_activate(li) : void 0); + } + return _results; + }; + Chosen.prototype.winnow_results_set_highlight = function() { + var do_high; + if (!this.result_highlight) { + do_high = this.search_results.down(".active-result"); + if (do_high) { + return this.result_do_highlight(do_high); + } + } + }; + Chosen.prototype.no_results = function(terms) { + return this.search_results.insert(this.no_results_temp.evaluate({ + "terms": terms.escapeHTML() + })); + }; + Chosen.prototype.no_results_clear = function() { + var nr, _results; + nr = null; + _results = []; + while (nr = this.search_results.down(".no-results")) { + _results.push(nr.remove()); + } + return _results; + }; + Chosen.prototype.keydown_arrow = function() { + var actives, nexts, sibs; + actives = this.search_results.select("li.active-result"); + if (actives.length) { + if (!this.result_highlight) { + this.result_do_highlight(actives.first()); + } else if (this.results_showing) { + sibs = this.result_highlight.nextSiblings(); + nexts = sibs.intersect(actives); + if (nexts.length) { + this.result_do_highlight(nexts.first()); + } + } + if (!this.results_showing) { + return this.results_show(); + } + } + }; + Chosen.prototype.keyup_arrow = function() { + var actives, prevs, sibs; + if (!this.results_showing && !this.is_multiple) { + return this.results_show(); + } else if (this.result_highlight) { + sibs = this.result_highlight.previousSiblings(); + actives = this.search_results.select("li.active-result"); + prevs = sibs.intersect(actives); + if (prevs.length) { + return this.result_do_highlight(prevs.first()); + } else { + if (this.choices > 0) { + this.results_hide(); + } + return this.result_clear_highlight(); + } + } + }; + Chosen.prototype.keydown_backstroke = function() { + if (this.pending_backstroke) { + this.choice_destroy(this.pending_backstroke.down("a")); + return this.clear_backstroke(); + } else { + this.pending_backstroke = this.search_container.siblings("li.search-choice").last(); + return this.pending_backstroke.addClassName("search-choice-focus"); + } + }; + Chosen.prototype.clear_backstroke = function() { + if (this.pending_backstroke) { + this.pending_backstroke.removeClassName("search-choice-focus"); + } + return this.pending_backstroke = null; + }; + Chosen.prototype.keyup_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) { + return this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + return this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + return this.result_select(); + } + break; + case 27: + if (this.results_showing) { + return this.results_hide(); + } + break; + case 9: + case 38: + case 40: + case 16: + break; + default: + return this.results_search(); + } + }; + Chosen.prototype.keydown_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + if (stroke !== 8 && this.pending_backstroke) { + this.clear_backstroke(); + } + switch (stroke) { + case 8: + return this.backstroke_length = this.search_field.value.length; + case 9: + return this.mouse_on_container = false; + case 13: + return evt.preventDefault(); + case 38: + evt.preventDefault(); + return this.keyup_arrow(); + case 40: + return this.keydown_arrow(); + } + }; + Chosen.prototype.search_field_scale = function() { + var dd_top, div, h, style, style_block, styles, w, _i, _len; + if (this.is_multiple) { + h = 0; + w = 0; + style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; + styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; + for (_i = 0, _len = styles.length; _i < _len; _i++) { + style = styles[_i]; + style_block += style + ":" + this.search_field.getStyle(style) + ";"; + } + div = new Element('div', { + 'style': style_block + }).update(this.search_field.value); + document.body.appendChild(div); + w = Element.measure(div, 'width') + 25; + div.remove(); + if (w > this.f_width - 10) { + w = this.f_width - 10; + } + this.search_field.setStyle({ + 'width': w + 'px' + }); + dd_top = this.container.getHeight(); + return this.dropdown.setStyle({ + "top": dd_top + "px" + }); + } + }; + return Chosen; + })(); + root.Chosen = Chosen; + document.observe('dom:loaded', function(evt) { + var select, selects, _i, _len, _results; + selects = $$(".chzn-select"); + _results = []; + for (_i = 0, _len = selects.length; _i < _len; _i++) { + select = selects[_i]; + _results.push(new Chosen(select)); + } + return _results; + }); + get_side_border_padding = function(elmt) { + var layout, side_border_padding; + layout = new Element.Layout(elmt); + return side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right"); + }; + root.get_side_border_padding = get_side_border_padding; + root = typeof exports !== "undefined" && exports !== null ? exports : this; + SelectParser = (function() { + function SelectParser() { + this.options_index = 0; + this.parsed = []; + } + SelectParser.prototype.add_node = function(child) { + if (child.nodeName === "OPTGROUP") { + return this.add_group(child); + } else { + return this.add_option(child); + } + }; + SelectParser.prototype.add_group = function(group) { + var group_position, option, _i, _len, _ref, _results; + group_position = this.parsed.length; + this.parsed.push({ + array_index: group_position, + group: true, + label: group.label, + children: 0, + disabled: group.disabled + }); + _ref = group.childNodes; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + _results.push(this.add_option(option, group_position, group.disabled)); + } + return _results; + }; + SelectParser.prototype.add_option = function(option, group_position, group_disabled) { + if (option.nodeName === "OPTION") { + if (option.text !== "") { + if (group_position != null) { + this.parsed[group_position].children += 1; + } + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + value: option.value, + text: option.text, + selected: option.selected, + disabled: group_disabled === true ? group_disabled : option.disabled, + group_array_index: group_position + }); + } else { + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + empty: true + }); + } + return this.options_index += 1; + } + }; + return SelectParser; + })(); + SelectParser.select_to_array = function(select) { + var child, parser, _i, _len, _ref; + parser = new SelectParser(); + _ref = select.childNodes; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + child = _ref[_i]; + parser.add_node(child); + } + return parser.parsed; + }; + root.SelectParser = SelectParser; +}).call(this); diff --git a/usr/local/www/javascript/chosen/chosen.proto.min.js b/usr/local/www/javascript/chosen/chosen.proto.min.js new file mode 100644 index 000000000..79109c53e --- /dev/null +++ b/usr/local/www/javascript/chosen/chosen.proto.min.js @@ -0,0 +1,9 @@ +/* +Chosen, a Select Box Enhancer for jQuery and Protoype +by Patrick Filler for Harvest, http://getharvest.com + +Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License + +Copyright (c) 2011 by Harvest +*/ +(function(){var Chosen,SelectParser,get_side_border_padding,root;var __bind=function(fn,me){return function(){return fn.apply(me,arguments);};};root=typeof exports!=="undefined"&&exports!==null?exports:this;Chosen=(function(){function Chosen(elmn){this.set_default_values();this.form_field=elmn;this.is_multiple=this.form_field.multiple;this.default_text_default=this.form_field.multiple?"Select Some Options":"Select an Option";this.set_up_html();this.register_observers();}Chosen.prototype.set_default_values=function(){this.click_test_action=__bind(function(evt){return this.test_active_click(evt);},this);this.active_field=false;this.mouse_on_container=false;this.results_showing=false;this.result_highlighted=null;this.result_single_selected=null;this.choices=0;this.single_temp=new Template('#{default}
                  ');this.multi_temp=new Template('
                    ');this.choice_temp=new Template('
                  • #{choice}
                  • ');return this.no_results_temp=new Template('
                  • No results match "#{terms}"
                  • ');};Chosen.prototype.set_up_html=function(){var base_template,container_props,dd_top,dd_width,sf_width;this.container_id=this.form_field.id+"_chzn";this.f_width=this.form_field.getStyle("width")?parseInt(this.form_field.getStyle("width"),10):this.form_field.getWidth();container_props={id:this.container_id,"class":"chzn-container",style:"width: "+this.f_width+"px"};this.default_text=this.form_field.readAttribute("title")?this.form_field.readAttribute("title"):this.default_text_default;base_template=this.is_multiple?new Element("div",container_props).update(this.multi_temp.evaluate({"default":this.default_text})):new Element("div",container_props).update(this.single_temp.evaluate({"default":this.default_text}));this.form_field.hide().insert({after:base_template});this.container=$(this.container_id);this.container.addClassName("chzn-container-"+(this.is_multiple?"multi":"single"));this.dropdown=this.container.down("div.chzn-drop");dd_top=this.container.getHeight();dd_width=this.f_width-get_side_border_padding(this.dropdown);this.dropdown.setStyle({width:dd_width+"px",top:dd_top+"px"});this.search_field=this.container.down("input");this.search_results=this.container.down("ul.chzn-results");this.search_field_scale();this.search_no_results=this.container.down("li.no-results");if(this.is_multiple){this.search_choices=this.container.down("ul.chzn-choices");this.search_container=this.container.down("li.search-field");}else{this.search_container=this.container.down("div.chzn-search");this.selected_item=this.container.down(".chzn-single");sf_width=dd_width-get_side_border_padding(this.search_container)-get_side_border_padding(this.search_field);this.search_field.setStyle({width:sf_width+"px"});}this.results_build();return this.set_tab_index();};Chosen.prototype.register_observers=function(){this.container.observe("click",__bind(function(evt){return this.container_click(evt);},this));this.container.observe("mouseenter",__bind(function(evt){return this.mouse_enter(evt);},this));this.container.observe("mouseleave",__bind(function(evt){return this.mouse_leave(evt);},this));this.search_results.observe("click",__bind(function(evt){return this.search_results_click(evt);},this));this.search_results.observe("mouseover",__bind(function(evt){return this.search_results_mouseover(evt);},this));this.search_results.observe("mouseout",__bind(function(evt){return this.search_results_mouseout(evt);},this));this.form_field.observe("liszt:updated",__bind(function(evt){return this.results_update_field(evt);},this));this.search_field.observe("blur",__bind(function(evt){return this.input_blur(evt);},this));this.search_field.observe("keyup",__bind(function(evt){return this.keyup_checker(evt);},this));this.search_field.observe("keydown",__bind(function(evt){return this.keydown_checker(evt);},this));if(this.is_multiple){this.search_choices.observe("click",__bind(function(evt){return this.choices_click(evt);},this));return this.search_field.observe("focus",__bind(function(evt){return this.input_focus(evt);},this));}else{return this.selected_item.observe("focus",__bind(function(evt){return this.activate_field(evt);},this));}};Chosen.prototype.container_click=function(evt){if(evt&&evt.type==="click"){evt.stop();}if(!this.pending_destroy_click){if(!this.active_field){if(this.is_multiple){this.search_field.clear();}document.observe("click",this.click_test_action);this.results_show();}else{if(!this.is_multiple&&evt&&(evt.target===this.selected_item||evt.target.up("a.chzn-single"))){this.results_toggle();}}return this.activate_field();}else{return this.pending_destroy_click=false;}};Chosen.prototype.mouse_enter=function(){return this.mouse_on_container=true;};Chosen.prototype.mouse_leave=function(){return this.mouse_on_container=false;};Chosen.prototype.input_focus=function(evt){if(!this.active_field){return setTimeout(this.container_click.bind(this),50);}};Chosen.prototype.input_blur=function(evt){if(!this.mouse_on_container){this.active_field=false;return setTimeout(this.blur_test.bind(this),100);}};Chosen.prototype.blur_test=function(evt){if(!this.active_field&&this.container.hasClassName("chzn-container-active")){return this.close_field();}};Chosen.prototype.close_field=function(){document.stopObserving("click",this.click_test_action);if(!this.is_multiple){this.selected_item.tabIndex=this.search_field.tabIndex;this.search_field.tabIndex=-1;}this.active_field=false;this.results_hide();this.container.removeClassName("chzn-container-active");this.winnow_results_clear();this.clear_backstroke();this.show_search_field_default();return this.search_field_scale();};Chosen.prototype.activate_field=function(){if(!this.is_multiple&&!this.active_field){this.search_field.tabIndex=this.selected_item.tabIndex;this.selected_item.tabIndex=-1;}this.container.addClassName("chzn-container-active");this.active_field=true;this.search_field.value=this.search_field.value;return this.search_field.focus();};Chosen.prototype.test_active_click=function(evt){if(evt.target.up("#"+this.container.id)){return this.active_field=true;}else{return this.close_field();}};Chosen.prototype.results_build=function(){var content,data,startTime,_i,_len,_ref;startTime=new Date();this.parsing=true;this.results_data=SelectParser.select_to_array(this.form_field);if(this.is_multiple&&this.choices>0){this.search_choices.select("li.search-choice").invoke("remove");this.choices=0;}else{if(!this.is_multiple){this.selected_item.down("span").update(this.default_text);}}content="";_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){data=_ref[_i];if(data.group){content+=this.result_add_group(data);}else{if(!data.empty){content+=this.result_add_option(data);if(data.selected&&this.is_multiple){this.choice_build(data);}else{if(data.selected&&!this.is_multiple){this.selected_item.down("span").update(data.text);}}}}}this.show_search_field_default();this.search_field_scale();this.search_results.update(content);return this.parsing=false;};Chosen.prototype.result_add_group=function(group){if(!group.disabled){group.dom_id=this.form_field.id+"chzn_g_"+group.array_index;return'
                  • '+group.label.escapeHTML()+"
                  • ";}else{return"";}};Chosen.prototype.result_add_option=function(option){var classes;if(!option.disabled){option.dom_id=this.form_field.id+"chzn_o_"+option.array_index;classes=option.selected&&this.is_multiple?[]:["active-result"];if(option.selected){classes.push("result-selected");}if(option.group_array_index!=null){classes.push("group-option");}return'
                  • '+option.text.escapeHTML()+"
                  • ";}else{return"";}};Chosen.prototype.results_update_field=function(){this.result_clear_highlight();this.result_single_selected=null;return this.results_build();};Chosen.prototype.result_do_highlight=function(el){var high_bottom,high_top,maxHeight,visible_bottom,visible_top;this.result_clear_highlight();this.result_highlight=el;this.result_highlight.addClassName("highlighted");maxHeight=parseInt(this.search_results.getStyle("maxHeight"),10);visible_top=this.search_results.scrollTop;visible_bottom=maxHeight+visible_top;high_top=this.result_highlight.positionedOffset().top;high_bottom=high_top+this.result_highlight.getHeight();if(high_bottom>=visible_bottom){return this.search_results.scrollTop=(high_bottom-maxHeight)>0?high_bottom-maxHeight:0;}else{if(high_top0&&this.search_field.value.length<1){this.results_hide();}this.result_deselect(link.readAttribute("rel"));return link.up("li").remove();};Chosen.prototype.result_select=function(){var high,item,position;if(this.result_highlight){high=this.result_highlight;this.result_clear_highlight();high.addClassName("result-selected");if(this.is_multiple){this.result_deactivate(high);}else{this.result_single_selected=high;}position=high.id.substr(high.id.lastIndexOf("_")+1);item=this.results_data[position];item.selected=true;this.form_field.options[item.options_index].selected=true;if(this.is_multiple){this.choice_build(item);}else{this.selected_item.down("span").update(item.text);}this.results_hide();this.search_field.value="";if(typeof Event.simulate==="function"){this.form_field.simulate("change");}return this.search_field_scale();}};Chosen.prototype.result_activate=function(el){return el.addClassName("active-result").show();};Chosen.prototype.result_deactivate=function(el){return el.removeClassName("active-result").hide();};Chosen.prototype.result_deselect=function(pos){var result,result_data;result_data=this.results_data[pos];result_data.selected=false;this.form_field.options[result_data.options_index].selected=false;result=$(this.form_field.id+"chzn_o_"+pos);result.removeClassName("result-selected").addClassName("active-result").show();this.result_clear_highlight();this.winnow_results();if(typeof Event.simulate==="function"){this.form_field.simulate("change");}return this.search_field_scale();};Chosen.prototype.results_search=function(evt){if(this.results_showing){return this.winnow_results();}else{return this.results_show();}};Chosen.prototype.winnow_results=function(){var found,option,part,parts,regex,result_id,results,searchText,startTime,startpos,text,zregex,_i,_j,_len,_len2,_ref;startTime=new Date();this.no_results_clear();results=0;searchText=this.search_field.value===this.default_text?"":this.search_field.value.strip();regex=new RegExp("^"+searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");zregex=new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];if(!option.disabled&&!option.empty){if(option.group){$(option.dom_id).hide();}else{if(!(this.is_multiple&&option.selected)){found=false;result_id=option.dom_id;if(regex.test(option.text)){found=true;results+=1;}else{if(option.text.indexOf(" ")>=0||option.text.indexOf("[")===0){parts=option.text.replace(/\[|\]/g,"").split(" ");if(parts.length){for(_j=0,_len2=parts.length;_j<_len2;_j++){part=parts[_j];if(regex.test(part)){found=true;results+=1;}}}}}if(found){if(searchText.length){startpos=option.text.search(zregex);text=option.text.substr(0,startpos+searchText.length)+"
                    "+option.text.substr(startpos+searchText.length);text=text.substr(0,startpos)+""+text.substr(startpos);}else{text=option.text;}if($(result_id).innerHTML!==text){$(result_id).update(text);}this.result_activate($(result_id));if(option.group_array_index!=null){$(this.results_data[option.group_array_index].dom_id).show();}}else{if($(result_id)===this.result_highlight){this.result_clear_highlight();}this.result_deactivate($(result_id));}}}}}if(results<1&&searchText.length){return this.no_results(searchText);}else{return this.winnow_results_set_highlight();}};Chosen.prototype.winnow_results_clear=function(){var li,lis,_i,_len,_results;this.search_field.clear();lis=this.search_results.select("li");_results=[];for(_i=0,_len=lis.length;_i<_len;_i++){li=lis[_i];_results.push(li.hasClassName("group-result")?li.show():!this.is_multiple||!li.hasClassName("result-selected")?this.result_activate(li):void 0);}return _results;};Chosen.prototype.winnow_results_set_highlight=function(){var do_high;if(!this.result_highlight){do_high=this.search_results.down(".active-result");if(do_high){return this.result_do_highlight(do_high);}}};Chosen.prototype.no_results=function(terms){return this.search_results.insert(this.no_results_temp.evaluate({terms:terms.escapeHTML()}));};Chosen.prototype.no_results_clear=function(){var nr,_results;nr=null;_results=[];while(nr=this.search_results.down(".no-results")){_results.push(nr.remove());}return _results;};Chosen.prototype.keydown_arrow=function(){var actives,nexts,sibs;actives=this.search_results.select("li.active-result");if(actives.length){if(!this.result_highlight){this.result_do_highlight(actives.first());}else{if(this.results_showing){sibs=this.result_highlight.nextSiblings();nexts=sibs.intersect(actives);if(nexts.length){this.result_do_highlight(nexts.first());}}}if(!this.results_showing){return this.results_show();}}};Chosen.prototype.keyup_arrow=function(){var actives,prevs,sibs;if(!this.results_showing&&!this.is_multiple){return this.results_show();}else{if(this.result_highlight){sibs=this.result_highlight.previousSiblings();actives=this.search_results.select("li.active-result");prevs=sibs.intersect(actives);if(prevs.length){return this.result_do_highlight(prevs.first());}else{if(this.choices>0){this.results_hide();}return this.result_clear_highlight();}}}};Chosen.prototype.keydown_backstroke=function(){if(this.pending_backstroke){this.choice_destroy(this.pending_backstroke.down("a"));return this.clear_backstroke();}else{this.pending_backstroke=this.search_container.siblings("li.search-choice").last();return this.pending_backstroke.addClassName("search-choice-focus");}};Chosen.prototype.clear_backstroke=function(){if(this.pending_backstroke){this.pending_backstroke.removeClassName("search-choice-focus");}return this.pending_backstroke=null;};Chosen.prototype.keyup_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();switch(stroke){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0){return this.keydown_backstroke();}else{if(!this.pending_backstroke){this.result_clear_highlight();return this.results_search();}}break;case 13:evt.preventDefault();if(this.results_showing){return this.result_select();}break;case 27:if(this.results_showing){return this.results_hide();}break;case 9:case 38:case 40:case 16:break;default:return this.results_search();}};Chosen.prototype.keydown_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();if(stroke!==8&&this.pending_backstroke){this.clear_backstroke();}switch(stroke){case 8:return this.backstroke_length=this.search_field.value.length;case 9:return this.mouse_on_container=false;case 13:return evt.preventDefault();case 38:evt.preventDefault();return this.keyup_arrow();case 40:return this.keydown_arrow();}};Chosen.prototype.search_field_scale=function(){var dd_top,div,h,style,style_block,styles,w,_i,_len;if(this.is_multiple){h=0;w=0;style_block="position:absolute; left: -1000px; top: -1000px; display:none;";styles=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(_i=0,_len=styles.length;_i<_len;_i++){style=styles[_i];style_block+=style+":"+this.search_field.getStyle(style)+";";}div=new Element("div",{style:style_block}).update(this.search_field.value);document.body.appendChild(div);w=Element.measure(div,"width")+25;div.remove();if(w>this.f_width-10){w=this.f_width-10;}this.search_field.setStyle({width:w+"px"});dd_top=this.container.getHeight();return this.dropdown.setStyle({top:dd_top+"px"});}};return Chosen;})();root.Chosen=Chosen;document.observe("dom:loaded",function(evt){var select,selects,_i,_len,_results;selects=$$(".chzn-select");_results=[];for(_i=0,_len=selects.length;_i<_len;_i++){select=selects[_i];_results.push(new Chosen(select));}return _results;});get_side_border_padding=function(elmt){var layout,side_border_padding;layout=new Element.Layout(elmt);return side_border_padding=layout.get("border-left")+layout.get("border-right")+layout.get("padding-left")+layout.get("padding-right");};root.get_side_border_padding=get_side_border_padding;root=typeof exports!=="undefined"&&exports!==null?exports:this;SelectParser=(function(){function SelectParser(){this.options_index=0;this.parsed=[];}SelectParser.prototype.add_node=function(child){if(child.nodeName==="OPTGROUP"){return this.add_group(child);}else{return this.add_option(child);}};SelectParser.prototype.add_group=function(group){var group_position,option,_i,_len,_ref,_results;group_position=this.parsed.length;this.parsed.push({array_index:group_position,group:true,label:group.label,children:0,disabled:group.disabled});_ref=group.childNodes;_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];_results.push(this.add_option(option,group_position,group.disabled));}return _results;};SelectParser.prototype.add_option=function(option,group_position,group_disabled){if(option.nodeName==="OPTION"){if(option.text!==""){if(group_position!=null){this.parsed[group_position].children+=1;}this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:option.value,text:option.text,selected:option.selected,disabled:group_disabled===true?group_disabled:option.disabled,group_array_index:group_position});}else{this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:true});}return this.options_index+=1;}};return SelectParser;})();SelectParser.select_to_array=function(select){var child,parser,_i,_len,_ref;parser=new SelectParser();_ref=select.childNodes;for(_i=0,_len=_ref.length;_i<_len;_i++){child=_ref[_i];parser.add_node(child);}return parser.parsed;};root.SelectParser=SelectParser;}).call(this); \ No newline at end of file diff --git a/usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee b/usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee new file mode 100644 index 000000000..0d6596aad --- /dev/null +++ b/usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee @@ -0,0 +1,633 @@ +### +Chosen, a Select Box Enhancer for jQuery and Protoype +by Patrick Filler for Harvest, http://getharvest.com + +Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License + +Copyright (c) 2011 by Harvest +### + +root = exports ? this +$ = jQuery + +$.fn.extend({ + chosen: (data, options) -> + $(this).each((input_field) -> + new Chosen(this, data, options) unless ($ this).hasClass "chzn-done" + ) +}) + +class Chosen + + constructor: (elmn) -> + this.set_default_values() + + @form_field = elmn + @form_field_jq = $ @form_field + @is_multiple = @form_field.multiple + + @default_text_default = if @form_field.multiple then "Select Some Options" else "Select an Option" + + this.set_up_html() + this.register_observers() + @form_field_jq.addClass "chzn-done" + + set_default_values: -> + + @click_test_action = (evt) => this.test_active_click(evt) + @active_field = false + @mouse_on_container = false + @results_showing = false + @result_highlighted = null + @result_single_selected = null + @choices = 0 + + set_up_html: -> + @container_id = @form_field.id + "_chzn" + + @f_width = @form_field_jq.width() + + @default_text = if @form_field_jq.attr 'title' then @form_field_jq.attr 'title' else @default_text_default + + container_div = ($ "
                    ", { + id: @container_id + class: 'chzn-container' + style: 'width: ' + (@f_width) + 'px;' #use parens around @f_width so coffeescript doesn't think + ' px' is a function parameter + }) + + if @is_multiple + container_div.html '
                      ' + else + container_div.html '' + @default_text + '
                        ' + + @form_field_jq.hide().after container_div + @container = ($ '#' + @container_id) + @container.addClass( "chzn-container-" + (if @is_multiple then "multi" else "single") ) + @dropdown = @container.find('div.chzn-drop').first() + + dd_top = @container.height() + dd_width = (@f_width - get_side_border_padding(@dropdown)) + + @dropdown.css({"width": dd_width + "px", "top": dd_top + "px"}) + + @search_field = @container.find('input').first() + @search_results = @container.find('ul.chzn-results').first() + this.search_field_scale() + + @search_no_results = @container.find('li.no-results').first() + + if @is_multiple + @search_choices = @container.find('ul.chzn-choices').first() + @search_container = @container.find('li.search-field').first() + else + @search_container = @container.find('div.chzn-search').first() + @selected_item = @container.find('.chzn-single').first() + sf_width = dd_width - get_side_border_padding(@search_container) - get_side_border_padding(@search_field) + @search_field.css( {"width" : sf_width + "px"} ) + + this.results_build() + this.set_tab_index() + + + register_observers: -> + @container.click (evt) => this.container_click(evt) + @container.mouseenter (evt) => this.mouse_enter(evt) + @container.mouseleave (evt) => this.mouse_leave(evt) + + @search_results.click (evt) => this.search_results_click(evt) + @search_results.mouseover (evt) => this.search_results_mouseover(evt) + @search_results.mouseout (evt) => this.search_results_mouseout(evt) + + @form_field_jq.bind "liszt:updated", (evt) => this.results_update_field(evt) + + @search_field.blur (evt) => this.input_blur(evt) + @search_field.keyup (evt) => this.keyup_checker(evt) + @search_field.keydown (evt) => this.keydown_checker(evt) + + if @is_multiple + @search_choices.click (evt) => this.choices_click(evt) + @search_field.focus (evt) => this.input_focus(evt) + else + @selected_item.focus (evt) => this.activate_field(evt) + + container_click: (evt) -> + if evt and evt.type is "click" + evt.stopPropagation() + if not @pending_destroy_click + if not @active_field + @search_field.val "" if @is_multiple + $(document).click @click_test_action + this.results_show() + else if not @is_multiple and evt and ($(evt.target) is @selected_item || $(evt.target).parents("a.chzn-single").length) + evt.preventDefault() + this.results_toggle() + + this.activate_field() + else + @pending_destroy_click = false + + mouse_enter: -> @mouse_on_container = true + mouse_leave: -> @mouse_on_container = false + + input_focus: (evt) -> + setTimeout (=> this.container_click()), 50 unless @active_field + + input_blur: (evt) -> + if not @mouse_on_container + @active_field = false + setTimeout (=> this.blur_test()), 100 + + blur_test: (evt) -> + this.close_field() if not @active_field and @container.hasClass "chzn-container-active" + + close_field: -> + $(document).unbind "click", @click_test_action + + if not @is_multiple + @selected_item.attr "tabindex", @search_field.attr("tabindex") + @search_field.attr "tabindex", -1 + + @active_field = false + this.results_hide() + + @container.removeClass "chzn-container-active" + this.winnow_results_clear() + this.clear_backstroke() + + this.show_search_field_default() + this.search_field_scale() + + activate_field: -> + if not @is_multiple and not @active_field + @search_field.attr "tabindex", (@selected_item.attr "tabindex") + @selected_item.attr "tabindex", -1 + + @container.addClass "chzn-container-active" + @active_field = true + + @search_field.val(@search_field.val()) + @search_field.focus() + + + test_active_click: (evt) -> + if $(evt.target).parents('#' + @container.id).length + @active_field = true + else + this.close_field() + + results_build: -> + startTime = new Date() + @parsing = true + @results_data = SelectParser.select_to_array @form_field + + if @is_multiple and @choices > 0 + @search_choices.find("li.search-choice").remove() + @choices = 0 + else if not @is_multiple + @selected_item.find("span").text @default_text + + content = '' + for data in @results_data + if data.group + content += this.result_add_group data + else if !data.empty + content += this.result_add_option data + if data.selected and @is_multiple + this.choice_build data + else if data.selected and not @is_multiple + @selected_item.find("span").text data.text + + this.show_search_field_default() + this.search_field_scale() + + @search_results.html content + @parsing = false + + + result_add_group: (group) -> + if not group.disabled + group.dom_id = @form_field.id + "chzn_g_" + group.array_index + '
                      • ' + $("
                        ").text(group.label).html() + '
                      • ' + else + "" + + result_add_option: (option) -> + if not option.disabled + option.dom_id = @form_field.id + "chzn_o_" + option.array_index + + classes = if option.selected and @is_multiple then [] else ["active-result"] + classes.push "result-selected" if option.selected + classes.push "group-option" if option.group_array_index? + + '
                      • ' + $("
                        ").text(option.text).html() + '
                      • ' + else + "" + + results_update_field: -> + this.result_clear_highlight() + @result_single_selected = null + this.results_build() + + result_do_highlight: (el) -> + if el.length + this.result_clear_highlight() + + @result_highlight = el + @result_highlight.addClass "highlighted" + + maxHeight = parseInt @search_results.css("maxHeight"), 10 + visible_top = @search_results.scrollTop() + visible_bottom = maxHeight + visible_top + + high_top = @result_highlight.position().top + @search_results.scrollTop() + high_bottom = high_top + @result_highlight.outerHeight() + + if high_bottom >= visible_bottom + @search_results.scrollTop if (high_bottom - maxHeight) > 0 then (high_bottom - maxHeight) else 0 + else if high_top < visible_top + @search_results.scrollTop high_top + + result_clear_highlight: -> + @result_highlight.removeClass "highlighted" if @result_highlight + @result_highlight = null + + results_toggle: -> + if @results_showing + this.results_hide() + else + this.results_show() + + results_show: -> + if not @is_multiple + @selected_item.addClass "chzn-single-with-drop" + if @result_single_selected + this.result_do_highlight( @result_single_selected ) + + dd_top = if @is_multiple then @container.height() else (@container.height() - 1) + @dropdown.css {"top": dd_top + "px", "left":0} + @results_showing = true + + @search_field.focus() + @search_field.val @search_field.val() + + this.winnow_results() + + results_hide: -> + @selected_item.removeClass "chzn-single-with-drop" unless @is_multiple + this.result_clear_highlight() + @dropdown.css {"left":"-9000px"} + @results_showing = false + + + set_tab_index: (el) -> + if @form_field_jq.attr "tabindex" + ti = @form_field_jq.attr "tabindex" + @form_field_jq.attr "tabindex", -1 + + if @is_multiple + @search_field.attr "tabindex", ti + else + @selected_item.attr "tabindex", ti + @search_field.attr "tabindex", -1 + + show_search_field_default: -> + if @is_multiple and @choices < 1 and not @active_field + @search_field.val(@default_text) + @search_field.addClass "default" + else + @search_field.val("") + @search_field.removeClass "default" + + search_results_click: (evt) -> + target = if $(evt.target).hasClass "active-result" then $(evt.target) else $(evt.target).parents(".active-result").first() + if target.length + @result_highlight = target + this.result_select() + + search_results_mouseover: (evt) -> + target = if $(evt.target).hasClass "active-result" then $(evt.target) else $(evt.target).parents(".active-result").first() + this.result_do_highlight( target ) if target + + search_results_mouseout: (evt) -> + this.result_clear_highlight() if $(evt.target).hasClass "active-result" or $(evt.target).parents('.active-result').first() + + + choices_click: (evt) -> + evt.preventDefault() + if( @active_field and not($(evt.target).hasClass "search-choice" or $(evt.target).parents('.search-choice').first) and not @results_showing ) + this.results_show() + + choice_build: (item) -> + choice_id = @form_field.id + "_chzn_c_" + item.array_index + @choices += 1 + @search_container.before '
                      • ' + item.text + '
                      • ' + link = $('#' + choice_id).find("a").first() + link.click (evt) => this.choice_destroy_link_click(evt) + + choice_destroy_link_click: (evt) -> + evt.preventDefault() + @pending_destroy_click = true + this.choice_destroy $(evt.target) + + choice_destroy: (link) -> + @choices -= 1 + this.show_search_field_default() + + this.results_hide() if @is_multiple and @choices > 0 and @search_field.val().length < 1 + + this.result_deselect (link.attr "rel") + link.parents('li').first().remove() + + result_select: -> + if @result_highlight + high = @result_highlight + high_id = high.attr "id" + + this.result_clear_highlight() + + high.addClass "result-selected" + + if @is_multiple + this.result_deactivate high + else + @result_single_selected = high + + position = high_id.substr(high_id.lastIndexOf("_") + 1 ) + item = @results_data[position] + item.selected = true + + @form_field.options[item.options_index].selected = true + + if @is_multiple + this.choice_build item + else + @selected_item.find("span").first().text item.text + + this.results_hide() + @search_field.val "" + + @form_field_jq.trigger "change" + this.search_field_scale() + + result_activate: (el) -> + el.addClass("active-result").show() + + result_deactivate: (el) -> + el.removeClass("active-result").hide() + + result_deselect: (pos) -> + result_data = @results_data[pos] + result_data.selected = false + + @form_field.options[result_data.options_index].selected = false + result = $("#" + @form_field.id + "chzn_o_" + pos) + result.removeClass("result-selected").addClass("active-result").show() + + this.result_clear_highlight() + this.winnow_results() + + @form_field_jq.trigger "change" + this.search_field_scale() + + results_search: (evt) -> + if @results_showing + this.winnow_results() + else + this.results_show() + + winnow_results: -> + startTime = new Date() + this.no_results_clear() + + results = 0 + + searchText = if @search_field.val() is @default_text then "" else $.trim @search_field.val() + regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i') + zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i') + + for option in @results_data + if not option.disabled and not option.empty + if option.group + $('#' + option.dom_id).hide() + else if not (@is_multiple and option.selected) + found = false + result_id = option.dom_id + + if regex.test option.text + found = true + results += 1 + else if option.text.indexOf(" ") >= 0 or option.text.indexOf("[") == 0 + #TODO: replace this substitution of /\[\]/ with a list of characters to skip. + parts = option.text.replace(/\[|\]/g, "").split(" ") + if parts.length + for part in parts + if regex.test part + found = true + results += 1 + + if found + if searchText.length + startpos = option.text.search zregex + text = option.text.substr(0, startpos + searchText.length) + '
                        ' + option.text.substr(startpos + searchText.length) + text = text.substr(0, startpos) + '' + text.substr(startpos) + else + text = option.text + + $("#" + result_id).html text if $("#" + result_id).html != text + + this.result_activate $("#" + result_id) + + $("#" + @results_data[option.group_array_index].dom_id).show() if option.group_array_index? + else + this.result_clear_highlight() if @result_highlight and result_id is @result_highlight.attr 'id' + this.result_deactivate $("#" + result_id) + + if results < 1 and searchText.length + this.no_results searchText + else + this.winnow_results_set_highlight() + + winnow_results_clear: -> + @search_field.val "" + lis = @search_results.find("li") + + for li in lis + li = $(li) + if li.hasClass "group-result" + li.show() + else if not @is_multiple or not li.hasClass "result-selected" + this.result_activate li + + winnow_results_set_highlight: -> + if not @result_highlight + do_high = @search_results.find(".active-result").first() + if(do_high) + this.result_do_highlight do_high + + no_results: (terms) -> + no_results_html = $('
                      • No results match ""
                      • ') + no_results_html.find("span").first().text(terms) + + @search_results.append no_results_html + + no_results_clear: -> + @search_results.find(".no-results").remove() + + keydown_arrow: -> + if not @result_highlight + first_active = @search_results.find("li.active-result").first() + this.result_do_highlight $(first_active) if first_active + else if @results_showing + next_sib = @result_highlight.nextAll("li.active-result").first() + this.result_do_highlight next_sib if next_sib + this.results_show() if not @results_showing + + keyup_arrow: -> + if not @results_showing and not @is_multiple + this.results_show() + else if @result_highlight + prev_sibs = @result_highlight.prevAll("li.active-result") + + if prev_sibs.length + this.result_do_highlight prev_sibs.first() + else + this.results_hide() if @choices > 0 + this.result_clear_highlight() + + keydown_backstroke: -> + if @pending_backstroke + this.choice_destroy @pending_backstroke.find("a").first() + this.clear_backstroke() + else + @pending_backstroke = @search_container.siblings("li.search-choice").last() + @pending_backstroke.addClass "search-choice-focus" + + clear_backstroke: -> + @pending_backstroke.removeClass "search-choice-focus" if @pending_backstroke + @pending_backstroke = null + + keyup_checker: (evt) -> + stroke = evt.which ? evt.keyCode + this.search_field_scale() + + switch stroke + when 8 + if @is_multiple and @backstroke_length < 1 and @choices > 0 + this.keydown_backstroke() + else if not @pending_backstroke + this.result_clear_highlight() + this.results_search() + when 13 + evt.preventDefault() + this.result_select() if this.results_showing + when 27 + this.results_hide() if @results_showing + when 9, 38, 40, 16 + # don't do anything on these keys + else this.results_search() + + + keydown_checker: (evt) -> + stroke = evt.which ? evt.keyCode + this.search_field_scale() + + this.clear_backstroke() if stroke != 8 and this.pending_backstroke + + switch stroke + when 8 + @backstroke_length = this.search_field.val().length + break + when 9 + @mouse_on_container = false + break + when 13 + evt.preventDefault() + break + when 38 + evt.preventDefault() + this.keyup_arrow() + break + when 40 + this.keydown_arrow() + break + + + search_field_scale: -> + if @is_multiple + h = 0 + w = 0 + + style_block = "position:absolute; left: -1000px; top: -1000px; display:none;" + styles = ['font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing'] + + for style in styles + style_block += style + ":" + @search_field.css(style) + ";" + + div = $('
                        ', { 'style' : style_block }) + div.text @search_field.val() + $('body').append div + + w = div.width() + 25 + div.remove() + + if( w > @f_width-10 ) + w = @f_width - 10 + + @search_field.css({'width': w + 'px'}) + + dd_top = @container.height() + @dropdown.css({"top": dd_top + "px"}) + +get_side_border_padding = (elmt) -> + side_border_padding = elmt.outerWidth() - elmt.width() + +root.get_side_border_padding = get_side_border_padding + +class SelectParser + + constructor: -> + @options_index = 0 + @parsed = [] + + add_node: (child) -> + if child.nodeName is "OPTGROUP" + this.add_group child + else + this.add_option child + + add_group: (group) -> + group_position = @parsed.length + @parsed.push + array_index: group_position + group: true + label: group.label + children: 0 + disabled: group.disabled + this.add_option( option, group_position, group.disabled ) for option in group.childNodes + + add_option: (option, group_position, group_disabled) -> + if option.nodeName is "OPTION" + if option.text != "" + if group_position? + @parsed[group_position].children += 1 + @parsed.push + array_index: @parsed.length + options_index: @options_index + value: option.value + text: option.text + selected: option.selected + disabled: if group_disabled is true then group_disabled else option.disabled + group_array_index: group_position + else + @parsed.push + array_index: @parsed.length + options_index: @options_index + empty: true + @options_index += 1 + +SelectParser.select_to_array = (select) -> + parser = new SelectParser() + parser.add_node( child ) for child in select.childNodes + parser.parsed + +root.SelectParser = SelectParser diff --git a/usr/local/www/javascript/chosen/coffee/chosen.proto.coffee b/usr/local/www/javascript/chosen/coffee/chosen.proto.coffee new file mode 100644 index 000000000..87a22b6f7 --- /dev/null +++ b/usr/local/www/javascript/chosen/coffee/chosen.proto.coffee @@ -0,0 +1,629 @@ +### +Chosen, a Select Box Enhancer for jQuery and Protoype +by Patrick Filler for Harvest, http://getharvest.com + +Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License + +Copyright (c) 2011 by Harvest +### + +root = exports ? this + +class Chosen + + constructor: (elmn) -> + this.set_default_values() + + @form_field = elmn + @is_multiple = @form_field.multiple + + @default_text_default = if @form_field.multiple then "Select Some Options" else "Select an Option" + + this.set_up_html() + this.register_observers() + + + set_default_values: -> + + @click_test_action = (evt) => this.test_active_click(evt) + @active_field = false + @mouse_on_container = false + @results_showing = false + @result_highlighted = null + @result_single_selected = null + @choices = 0 + + # HTML Templates + @single_temp = new Template('#{default}
                          ') + @multi_temp = new Template('
                            ') + @choice_temp = new Template('
                          • #{choice}
                          • ') + @no_results_temp = new Template('
                          • No results match "#{terms}"
                          • ') + + + set_up_html: -> + @container_id = @form_field.id + "_chzn" + + @f_width = if @form_field.getStyle("width") then parseInt @form_field.getStyle("width"), 10 else @form_field.getWidth() + + container_props = + 'id': @container_id + 'class': 'chzn-container' + 'style': 'width: ' + (@f_width) + 'px' #use parens around @f_width so coffeescript doesn't think + ' px' is a function parameter + + @default_text = if @form_field.readAttribute 'title' then @form_field.readAttribute 'title' else @default_text_default + + base_template = if @is_multiple then new Element('div', container_props).update( @multi_temp.evaluate({ "default": @default_text}) ) else new Element('div', container_props).update( @single_temp.evaluate({ "default":@default_text }) ) + + @form_field.hide().insert({ after: base_template }) + @container = $(@container_id) + @container.addClassName( "chzn-container-" + (if @is_multiple then "multi" else "single") ) + @dropdown = @container.down('div.chzn-drop') + + dd_top = @container.getHeight() + dd_width = (@f_width - get_side_border_padding(@dropdown)) + + @dropdown.setStyle({"width": dd_width + "px", "top": dd_top + "px"}) + + @search_field = @container.down('input') + @search_results = @container.down('ul.chzn-results') + this.search_field_scale() + + @search_no_results = @container.down('li.no-results') + + if @is_multiple + @search_choices = @container.down('ul.chzn-choices') + @search_container = @container.down('li.search-field') + else + @search_container = @container.down('div.chzn-search') + @selected_item = @container.down('.chzn-single') + sf_width = dd_width - get_side_border_padding(@search_container) - get_side_border_padding(@search_field) + @search_field.setStyle( {"width" : sf_width + "px"} ) + + this.results_build() + this.set_tab_index() + + + register_observers: -> + @container.observe "click", (evt) => this.container_click(evt) + @container.observe "mouseenter", (evt) => this.mouse_enter(evt) + @container.observe "mouseleave", (evt) => this.mouse_leave(evt) + + @search_results.observe "click", (evt) => this.search_results_click(evt) + @search_results.observe "mouseover", (evt) => this.search_results_mouseover(evt) + @search_results.observe "mouseout", (evt) => this.search_results_mouseout(evt) + + @form_field.observe "liszt:updated", (evt) => this.results_update_field(evt) + + @search_field.observe "blur", (evt) => this.input_blur(evt) + @search_field.observe "keyup", (evt) => this.keyup_checker(evt) + @search_field.observe "keydown", (evt) => this.keydown_checker(evt) + + if @is_multiple + @search_choices.observe "click", (evt) => this.choices_click(evt) + @search_field.observe "focus", (evt) => this.input_focus(evt) + else + @selected_item.observe "focus", (evt) => this.activate_field(evt) + + + container_click: (evt) -> + if evt and evt.type is "click" + evt.stop() + if not @pending_destroy_click + if not @active_field + @search_field.clear() if @is_multiple + document.observe "click", @click_test_action + this.results_show() + else if not @is_multiple and evt and (evt.target is @selected_item || evt.target.up("a.chzn-single")) + this.results_toggle() + + this.activate_field() + else + @pending_destroy_click = false + + mouse_enter: -> @mouse_on_container = true + mouse_leave: -> @mouse_on_container = false + + input_focus: (evt) -> + setTimeout this.container_click.bind(this), 50 unless @active_field + + input_blur: (evt) -> + if not @mouse_on_container + @active_field = false + setTimeout this.blur_test.bind(this), 100 + + blur_test: (evt) -> + this.close_field() if not @active_field and @container.hasClassName("chzn-container-active") + + close_field: -> + document.stopObserving "click", @click_test_action + + if not @is_multiple + @selected_item.tabIndex = @search_field.tabIndex + @search_field.tabIndex = -1 + + @active_field = false + this.results_hide() + + @container.removeClassName "chzn-container-active" + this.winnow_results_clear() + this.clear_backstroke() + + this.show_search_field_default() + this.search_field_scale() + + activate_field: -> + if not @is_multiple and not @active_field + @search_field.tabIndex = @selected_item.tabIndex + @selected_item.tabIndex = -1 + + @container.addClassName "chzn-container-active" + @active_field = true + + @search_field.value = @search_field.value + @search_field.focus() + + + test_active_click: (evt) -> + if evt.target.up('#' + @container.id) + @active_field = true + else + this.close_field() + + results_build: -> + startTime = new Date() + @parsing = true + @results_data = SelectParser.select_to_array @form_field + + if @is_multiple and @choices > 0 + @search_choices.select("li.search-choice").invoke("remove") + @choices = 0 + else if not @is_multiple + @selected_item.down("span").update(@default_text) + + content = '' + for data in @results_data + if data.group + content += this.result_add_group data + else if !data.empty + content += this.result_add_option data + if data.selected and @is_multiple + this.choice_build data + else if data.selected and not @is_multiple + @selected_item.down("span").update( data.text ) + + this.show_search_field_default() + this.search_field_scale() + + @search_results.update content + @parsing = false + + + result_add_group: (group) -> + if not group.disabled + group.dom_id = @form_field.id + "chzn_g_" + group.array_index + '
                          • ' + group.label.escapeHTML() + '
                          • ' + else + "" + + result_add_option: (option) -> + if not option.disabled + option.dom_id = @form_field.id + "chzn_o_" + option.array_index + + classes = if option.selected and @is_multiple then [] else ["active-result"] + classes.push "result-selected" if option.selected + classes.push "group-option" if option.group_array_index? + + '
                          • ' + option.text.escapeHTML() + '
                          • ' + else + "" + + results_update_field: -> + this.result_clear_highlight() + @result_single_selected = null + this.results_build() + + result_do_highlight: (el) -> + this.result_clear_highlight() + + @result_highlight = el + @result_highlight.addClassName "highlighted" + + maxHeight = parseInt @search_results.getStyle('maxHeight'), 10 + visible_top = @search_results.scrollTop + visible_bottom = maxHeight + visible_top + + high_top = @result_highlight.positionedOffset().top + high_bottom = high_top + @result_highlight.getHeight() + + if high_bottom >= visible_bottom + @search_results.scrollTop = if (high_bottom - maxHeight) > 0 then (high_bottom - maxHeight) else 0 + else if high_top < visible_top + @search_results.scrollTop = high_top + + result_clear_highlight: -> + @result_highlight.removeClassName('highlighted') if @result_highlight + @result_highlight = null + + results_toggle: -> + if @results_showing + this.results_hide() + else + this.results_show() + + results_show: -> + if not @is_multiple + @selected_item.addClassName('chzn-single-with-drop') + if @result_single_selected + this.result_do_highlight( @result_single_selected ) + + dd_top = if @is_multiple then @container.getHeight() else (@container.getHeight() - 1) + @dropdown.setStyle {"top": dd_top + "px", "left":0} + @results_showing = true + + @search_field.focus() + @search_field.value = @search_field.value + + this.winnow_results() + + results_hide: -> + @selected_item.removeClassName('chzn-single-with-drop') unless @is_multiple + this.result_clear_highlight() + @dropdown.setStyle({"left":"-9000px"}) + @results_showing = false + + + set_tab_index: (el) -> + if @form_field.tabIndex + ti = @form_field.tabIndex + @form_field.tabIndex = -1 + + if @is_multiple + @search_field.tabIndex = ti + else + @selected_item.tabIndex = ti + @search_field.tabIndex = -1 + + show_search_field_default: -> + if @is_multiple and @choices < 1 and not @active_field + @search_field.value = @default_text + @search_field.addClassName "default" + else + @search_field.value = "" + @search_field.removeClassName "default" + + search_results_click: (evt) -> + target = if evt.target.hasClassName("active-result") then evt.target else evt.target.up(".active-result") + if target + @result_highlight = target + this.result_select() + + search_results_mouseover: (evt) -> + target = if evt.target.hasClassName("active-result") then evt.target else evt.target.up(".active-result") + this.result_do_highlight( target ) if target + + search_results_mouseout: (evt) -> + this.result_clear_highlight() if evt.target.hasClassName('active-result') or evt.target.up('.active-result') + + + choices_click: (evt) -> + evt.preventDefault() + if( @active_field and not(evt.target.hasClassName('search-choice') or evt.target.up('.search-choice')) and not @results_showing ) + this.results_show() + + choice_build: (item) -> + choice_id = @form_field.id + "_chzn_c_" + item.array_index + @choices += 1 + @search_container.insert { before: @choice_temp.evaluate({"id":choice_id, "choice":item.text, "position":item.array_index}) } + link = $(choice_id).down('a') + link.observe "click", (evt) => this.choice_destroy_link_click(evt) + + choice_destroy_link_click: (evt) -> + evt.preventDefault() + @pending_destroy_click = true + this.choice_destroy evt.target + + choice_destroy: (link) -> + @choices -= 1 + this.show_search_field_default() + + this.results_hide() if @is_multiple and @choices > 0 and @search_field.value.length < 1 + + this.result_deselect link.readAttribute("rel") + link.up('li').remove() + + result_select: -> + if @result_highlight + high = @result_highlight + this.result_clear_highlight() + + high.addClassName("result-selected") + + if @is_multiple + this.result_deactivate high + else + @result_single_selected = high + + position = high.id.substr(high.id.lastIndexOf("_") + 1 ) + item = @results_data[position] + item.selected = true + + @form_field.options[item.options_index].selected = true + + if @is_multiple + this.choice_build item + else + @selected_item.down("span").update(item.text) + + this.results_hide() + @search_field.value = "" + + @form_field.simulate("change") if typeof Event.simulate is 'function' + this.search_field_scale() + + result_activate: (el) -> + el.addClassName("active-result").show() + + result_deactivate: (el) -> + el.removeClassName("active-result").hide() + + result_deselect: (pos) -> + result_data = @results_data[pos] + result_data.selected = false + + @form_field.options[result_data.options_index].selected = false + result = $(@form_field.id + "chzn_o_" + pos) + result.removeClassName("result-selected").addClassName("active-result").show() + + this.result_clear_highlight() + this.winnow_results() + + @form_field.simulate("change") if typeof Event.simulate is 'function' + this.search_field_scale() + + results_search: (evt) -> + if @results_showing + this.winnow_results() + else + this.results_show() + + winnow_results: -> + startTime = new Date() + this.no_results_clear() + + results = 0 + + searchText = if @search_field.value is @default_text then "" else @search_field.value.strip() + regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i') + zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i') + + for option in @results_data + if not option.disabled and not option.empty + if option.group + $(option.dom_id).hide() + else if not (@is_multiple and option.selected) + found = false + result_id = option.dom_id + + if regex.test option.text + found = true + results += 1 + else if option.text.indexOf(" ") >= 0 or option.text.indexOf("[") == 0 + #TODO: replace this substitution of /\[\]/ with a list of characters to skip. + parts = option.text.replace(/\[|\]/g, "").split(" ") + if parts.length + for part in parts + if regex.test part + found = true + results += 1 + + if found + if searchText.length + startpos = option.text.search zregex + text = option.text.substr(0, startpos + searchText.length) + '
                            ' + option.text.substr(startpos + searchText.length) + text = text.substr(0, startpos) + '' + text.substr(startpos) + else + text = option.text + + $(result_id).update text if $(result_id).innerHTML != text + + this.result_activate $(result_id) + + $(@results_data[option.group_array_index].dom_id).show() if option.group_array_index? + else + this.result_clear_highlight() if $(result_id) is @result_highlight + this.result_deactivate $(result_id) + + if results < 1 and searchText.length + this.no_results(searchText) + else + this.winnow_results_set_highlight() + + winnow_results_clear: -> + @search_field.clear() + lis = @search_results.select("li") + + for li in lis + if li.hasClassName("group-result") + li.show() + else if not @is_multiple or not li.hasClassName("result-selected") + this.result_activate li + + winnow_results_set_highlight: -> + if not @result_highlight + do_high = @search_results.down(".active-result") + if(do_high) + this.result_do_highlight do_high + + no_results: (terms) -> + @search_results.insert @no_results_temp.evaluate({"terms":terms.escapeHTML()}) + + no_results_clear: -> + nr = null + nr.remove() while nr = @search_results.down(".no-results") + + + keydown_arrow: -> + actives = @search_results.select("li.active-result") + if actives.length + if not @result_highlight + this.result_do_highlight actives.first() + else if @results_showing + sibs = @result_highlight.nextSiblings() + nexts = sibs.intersect(actives) + this.result_do_highlight nexts.first() if nexts.length + this.results_show() if not @results_showing + + keyup_arrow: -> + if not @results_showing and not @is_multiple + this.results_show() + else if @result_highlight + sibs = @result_highlight.previousSiblings() + actives = @search_results.select("li.active-result") + prevs = sibs.intersect(actives) + + if prevs.length + this.result_do_highlight prevs.first() + else + this.results_hide() if @choices > 0 + this.result_clear_highlight() + + keydown_backstroke: -> + if @pending_backstroke + this.choice_destroy @pending_backstroke.down("a") + this.clear_backstroke() + else + @pending_backstroke = @search_container.siblings("li.search-choice").last() + @pending_backstroke.addClassName("search-choice-focus") + + clear_backstroke: -> + @pending_backstroke.removeClassName("search-choice-focus") if @pending_backstroke + @pending_backstroke = null + + keyup_checker: (evt) -> + stroke = evt.which ? evt.keyCode + this.search_field_scale() + + switch stroke + when 8 + if @is_multiple and @backstroke_length < 1 and @choices > 0 + this.keydown_backstroke() + else if not @pending_backstroke + this.result_clear_highlight() + this.results_search() + when 13 + evt.preventDefault() + this.result_select() if this.results_showing + when 27 + this.results_hide() if @results_showing + when 9, 38, 40, 16 + # don't do anything on these keys + else this.results_search() + + + keydown_checker: (evt) -> + stroke = evt.which ? evt.keyCode + this.search_field_scale() + + this.clear_backstroke() if stroke != 8 and this.pending_backstroke + + switch stroke + when 8 + @backstroke_length = this.search_field.value.length + when 9 + @mouse_on_container = false + when 13 + evt.preventDefault() + when 38 + evt.preventDefault() + this.keyup_arrow() + when 40 + this.keydown_arrow() + + + search_field_scale: -> + if @is_multiple + h = 0 + w = 0 + + style_block = "position:absolute; left: -1000px; top: -1000px; display:none;" + styles = ['font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing'] + + for style in styles + style_block += style + ":" + @search_field.getStyle(style) + ";" + + div = new Element('div', { 'style' : style_block }).update(@search_field.value) + document.body.appendChild(div) + + w = Element.measure(div, 'width') + 25 + div.remove() + + if( w > @f_width-10 ) + w = @f_width - 10 + + @search_field.setStyle({'width': w + 'px'}) + + dd_top = @container.getHeight() + @dropdown.setStyle({"top": dd_top + "px"}) + +root.Chosen = Chosen + +document.observe 'dom:loaded', (evt) -> + selects = $$(".chzn-select") + new Chosen select for select in selects + +get_side_border_padding = (elmt) -> + layout = new Element.Layout(elmt) + side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right") + +root.get_side_border_padding = get_side_border_padding + +root = exports ? this + +class SelectParser + + constructor: -> + @options_index = 0 + @parsed = [] + + add_node: (child) -> + if child.nodeName is "OPTGROUP" + this.add_group child + else + this.add_option child + + add_group: (group) -> + group_position = @parsed.length + @parsed.push + array_index: group_position + group: true + label: group.label + children: 0 + disabled: group.disabled + this.add_option( option, group_position, group.disabled ) for option in group.childNodes + + add_option: (option, group_position, group_disabled) -> + if option.nodeName is "OPTION" + if option.text != "" + if group_position? + @parsed[group_position].children += 1 + @parsed.push + array_index: @parsed.length + options_index: @options_index + value: option.value + text: option.text + selected: option.selected + disabled: if group_disabled is true then group_disabled else option.disabled + group_array_index: group_position + else + @parsed.push + array_index: @parsed.length + options_index: @options_index + empty: true + @options_index += 1 + +SelectParser.select_to_array = (select) -> + parser = new SelectParser() + parser.add_node( child ) for child in select.childNodes + parser.parsed + +root.SelectParser = SelectParser diff --git a/usr/local/www/javascript/datepicker/css/datepicker.css b/usr/local/www/javascript/datepicker/css/datepicker.css new file mode 100644 index 000000000..0773fa67c --- /dev/null +++ b/usr/local/www/javascript/datepicker/css/datepicker.css @@ -0,0 +1,178 @@ +/* This is a very basic stylesheet for the date-picker. Feel free to create your own. */ + +/* The wrapper div */ +.datePicker + { + position:absolute; + min-width:21em; + width:21em; + z-index:9999; + text-align:center; + font:900 0.8em/0.8em Verdana, Sans-Serif; + background:transparent; + } +/* + Quirksmode necessity + -------------------- + + If your HTML document renders in quirksmode (i.e. has no doctype declaration) + then uncomment the following CSS rule or the datePicker will be HUGE... + +.datePicker th, +.datePicker td + { + font-size:11px; + } +*/ +/* The iframe hack to cover selectlists in Internet Explorer <= v6 */ +.iehack + { + position:absolute; + background:#fff; + z-index:9998; + padding:0; + border:0; + display:none; + } +/* The button created beside each input */ +.date-picker-control + { + border:0 none; + padding:0; + margin-left:4px; + background:transparent url(../media/cal.gif) no-repeat 0 0; + width:16px; + height:16px; + margin-top:0; + vertical-align:top; + cursor:pointer; + } +/* The next & previous buttons */ +.datePicker th button + { + display:inline; + padding:0; + margin:0; + color:#000; + height:1em; + width:0.8em; + line-height:0.8em; + border-width:0; + font-family: georgia, times new roman, palatino, times, bookman, serif; + background:transparent; + font-weight:bold; + cursor:pointer; + } +.datePicker th button:active, +.datePicker th button:focus, +.date-picker-control:active, +.date-picker-control:focus + { + outline:none; + } +.datePicker th button.prev-but + { + text-align:left; + } +.datePicker th button.next-but + { + text-align:right; + } +/* The mon, tue, wed etc day buttons */ +.datePicker th button.fd-day-header + { + text-align:center; + margin:0 auto; + font:900 1em Verdana, Sans-Serif; + height:auto; + width:auto; + text-decoration:none; + line-height:1.4em; + } +/* The table */ +.datePicker table + { + position:relative; + margin:0; + padding:0; + border:1px solid #ccc; + background:#fff url(../media/gradient-e5e5e5-ffffff.gif) repeat-x 0 -20px; + text-align:center; + width:100%; + } +.datePicker table tfoot td + { + background:#fff url(../media/gradient-e5e5e5-ffffff.gif) repeat-x 0 -40px; + } +/* Common TD & TH styling */ +.datePicker table td + { + border: 1px solid #ccc; + padding:0.6em 0.5em 0.5em 0.5em; + /* Opera requires a line-height bigger than 1em in order to redraw properly */ + line-height:1.2em; + cursor:default; + background:#fff url(../media/gradient-e5e5e5-ffffff.gif) repeat-x 0 -50px; + } +.datePicker table th + { + border:0 none; + padding:0; + line-height:1em; + font-weight:bold; + color:#222; + text-align:center; + } +/* The "mon tue wed etc" day header button styles */ +.datePicker table th.date-picker-day-header + { + text-transform:lowercase; + cursor:help; + } +/* The "todays date" style */ +.datePicker table td.date-picker-today + { + background:#fff url(../media/bullet2.gif) no-repeat 0 0; + color:rgb(100,100,100) !important; + } +/* The "selected date" style */ +.datePicker table td.date-picker-selected-date + { + color:#333 !important; + border-color:#333 !important; + } +/* the "highlight days" style */ +td.date-picker-highlight + { + color:#a86666; + } +/* The date "out of range" style */ +.datePicker table td.out-of-range + { + color:#ccc !important; + font-style:oblique; + background:transparent !important; + cursor:default !important; + } +/* The "disabled days" style */ +.datePicker table td.day-disabled + { + color:#aaa !important; + background:transparent !important; + cursor:default !important; + } +/* The "active cursor" style */ +.datePicker table td#date-picker-hover + { + background:#fff url(../media/bg_header.jpg) no-repeat 0 0; + cursor:pointer; + border-color:rgb(100,130,170); + color:rgb(100,130,170); + } +/* Remove the images for Internet Explorer <= v6 using the "* html" hack */ +* html .datePicker table td.date-picker-selected, +* html .datePicker table td.date-picker-hover, +* html .datePicker table td + { + background-image:none; + } diff --git a/usr/local/www/javascript/datepicker/js/blank.html b/usr/local/www/javascript/datepicker/js/blank.html new file mode 100644 index 000000000..53a7f2429 --- /dev/null +++ b/usr/local/www/javascript/datepicker/js/blank.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/usr/local/www/javascript/datepicker/js/datepicker.js b/usr/local/www/javascript/datepicker/js/datepicker.js new file mode 100644 index 000000000..3d6dbd3f4 --- /dev/null +++ b/usr/local/www/javascript/datepicker/js/datepicker.js @@ -0,0 +1,1111 @@ +/* + DatePicker v2.5 by frequency-decoder.com (2006/12/01) + + Released under a creative commons Attribution-ShareAlike 2.5 license (http://creativecommons.org/licenses/by-sa/2.5/) + + Please credit frequency-decoder in any derivative work - thanks. + + You are free: + + * to copy, distribute, display, and perform the work + * to make derivative works + * to make commercial use of the work + + Under the following conditions: + + by Attribution. + -------------- + You must attribute the work in the manner specified by the author or licensor. + + sa + -- + Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. + + * For any reuse or distribution, you must make clear to others the license terms of this work. + * Any of these conditions can be waived if you get permission from the copyright holder. +*/ +var datePickerController; + +(function() { + +datePicker.isSupported = typeof document.createElement != "undefined" && + typeof document.documentElement != "undefined" && + typeof document.documentElement.offsetWidth == "number"; + +// Detect the users language +datePicker.languageinfo = navigator.language ? navigator.language : navigator.userLanguage; +datePicker.languageinfo = datePicker.languageinfo ? datePicker.languageinfo.toLowerCase().replace(/-[a-z]+$/, "") : 'en'; + +if(datePicker.languageinfo != 'en') { + // Load the appropriate language file + var scriptFiles = document.getElementsByTagName('head')[0].getElementsByTagName('script'); + var loc = ""; + + for(var i = 0, scriptFile; scriptFile = scriptFiles[i]; i++) { + if(scriptFile.src && scriptFile.src.match(/datepicker/)) { + loc = scriptFile.src.replace("datepicker", "lang/" + datePicker.languageinfo); + break; + }; + }; + + if(loc != "") { + var script = document.createElement('script'); + script.type = "text/javascript"; + script.src = loc; + // Hopefully this allows a UTF-8 js file to be imported into a non-UTF HTML document + script.setAttribute("charset", "utf-8"); + document.getElementsByTagName('head')[0].appendChild(script); + }; +}; + +// Defaults for the language should the locale file not load +datePicker.months = [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December"]; +datePicker.fullDay = [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday"]; +datePicker.titles = [ + "Previous month", + "Next month", + "Previous year", + "Next year"]; +datePicker.daysPerMonth = [31,28,31,30,31,30,31,31,30,31,30,31]; + +datePicker.getDaysPerMonth = function (nMonth, nYear) { + nMonth = (nMonth + 12) % 12; + var res = datePicker.daysPerMonth[nMonth]; + if(((0 == (nYear%4)) && ((0 != (nYear%100)) || (0 == (nYear%400)))) && nMonth == 1) { + res = 29; + }; + return res; +}; + +function datePicker(options) { + + this.defaults = {}; + + for(opt in options) { + this[opt] = this.defaults[opt] = options[opt]; + }; + + this.date = new Date(); + this.yearinc = 1; + this.timer = null; + this.pause = 1000; + this.timerSet = false; + this.opacity = 0; + this.opacityTo = 0; + this.fadeTimer = null; + this.interval = new Date(); + this.firstDayOfWeek = this.defaults.firstDayOfWeek = 0; + this.dateSet = null; + this.visible = false; + this.div; + this.table; + + var o = this; + + o.reset = function() { + for(def in o.defaults) { + o[def] = o.defaults[def]; + }; + }; + o.setOpacity = function(op) { + o.div.style.opacity = + op/100; + o.div.style.filter = 'alpha(opacity=' + op + ')'; + o.opacity = op; + }; + o.fade = function() { + + window.clearTimeout(o.fadeTimer); + var diff = Math.round(o.opacity + ((o.opacityTo - o.opacity) / 4)); + + o.setOpacity(diff); + + if(Math.abs(o.opacityTo - diff) > 3) { + o.fadeTimer = window.setTimeout(function () { o.fade(); }, 50); + } else { + o.setOpacity(o.opacityTo); + if(o.opacityTo == 0) o.div.style.display = "none"; + }; + }; + o.killEvent = function(e) { + if (e == null) e = document.parentWindow.event; + + if (e.stopPropagation) { + e.stopPropagation(); + e.preventDefault(); + } + /*@cc_on@*/ + /*@if(@_win32) + e.cancelBubble = true; + e.returnValue = false; + /*@end@*/ + return false; + }; + o.startTimer = function () { + if (o.timerSet) o.stopTimer(); + o.timer = window.setTimeout(function () { o.onTimer(); }, o.timerInc); + o.timerSet = true; + }; + o.stopTimer = function () { + if (o.timer != null) window.clearTimeout(o.timer); + o.timerSet = false; + }; + o.events = { + onkeydown: function (e) { + + if(!o.visible) return false; + + if (e == null) e = document.parentWindow.event; + var kc = e.keyCode ? e.keyCode : e.charCode; + + if ( kc == 13 ) { + // close with update + o.returnFormattedDate(); + o.hide(); + return o.killEvent(e); + } else if ( kc == 27 ) { + // close + o.hide(); + return o.killEvent(e); + } else if ( kc == 32 || kc == 0 ) { + // close + o.date = new Date( ); + o.updateTable(); + return o.killEvent(e); + }; + + // Internet Explorer fires the keydown event faster than the JavaScript engine can + // update the interface. The following attempts to fix this. + + /*@cc_on@*/ + /*@if(@_win32) + if(new Date().getTime() - o.interval.getTime() < 100) return o.killEvent(e); + o.interval = new Date(); + /*@end@*/ + + if ((kc > 49 && kc < 56) || (kc > 97 && kc < 104)) { + if (kc > 96) kc -= (96-48); + kc -= 49; + o.firstDayOfWeek = (o.firstDayOfWeek + kc) % 7; + o.updateTable(); + return o.killEvent(e); + }; + + if ( kc < 37 || kc > 40 ) return true; + + var d = new Date( o.date ).valueOf(); + + if ( kc == 37 ) { + // ctrl + left = previous month + if( e.ctrlKey ) { + d = new Date( o.date ); + d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth() - 1,d.getFullYear())) ); // no need to catch dec -> jan for the year + d.setMonth( d.getMonth() - 1 ); + } else { + d -= 24 * 60 * 60 * 1000; + }; + } else if ( kc == 39 ) { + // ctrl + right = next month + if( e.ctrlKey ) { + d = new Date( o.date ); + d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth() + 1,d.getFullYear())) ); // no need to catch dec -> jan for the year + d.setMonth( d.getMonth() + 1 ); + } else { + d += 24 * 60 * 60 * 1000; + }; + } else if ( kc == 38 ) { + // ctrl + up = next year + if( e.ctrlKey ) { + d = new Date( o.date ); + d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth(),d.getFullYear() + 1)) ); // no need to catch dec -> jan for the year + d.setFullYear( d.getFullYear() + 1 ); + } else { + d -= 7 * 24 * 60 * 60 * 1000; + }; + } else if ( kc == 40 ) { + // ctrl + down = prev year + if( e.ctrlKey ) { + d = new Date( o.date ); + d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth(),d.getFullYear() - 1)) ); // no need to catch dec -> jan for the year + d.setFullYear( d.getFullYear() - 1 ); + } else { + d += 7 * 24 * 60 * 60 * 1000; + }; + }; + + var tmpDate = new Date( d ); + if(!o.outOfRange(tmpDate)) { + o.date = tmpDate; + }; + + o.updateTable(); + + return o.killEvent(e); + }, + onmousedown: function(e) { + if ( e == null ) e = document.parentWindow.event; + var el = e.target != null ? e.target : e.srcElement; + + var found = false; + + while(el.parentNode) { + if(el.id && (el.id == "fd-"+o.id || el.id == "fd-but-"+o.id)) { + found = true; + break; + } + try { + el = el.parentNode; + } catch(err) { + break; + } + } + if(found) return true; + datePickerController.hideAll(); + }, + onmouseover: function(e) { + if(document.getElementById("date-picker-hover")) { + document.getElementById("date-picker-hover").id = ""; + }; + + this.id = "date-picker-hover"; + + o.date.setDate(this.firstChild.nodeValue); + }, + onclick: function (e) { + if(o.opacity != o.opacityTo) return false; + if ( e == null ) e = document.parentWindow.event; + var el = e.target != null ? e.target : e.srcElement; + while ( el.nodeType != 1 ) el = el.parentNode; + + var d = new Date( o.date ); + var n = Number( el.firstChild.data ); + + if(isNaN(n)) { return true; }; + + d.setDate( n ); + o.date = d; + + o.returnFormattedDate(); + o.hide(); + return o.killEvent(e); + }, + incDec:function(e) { + if(o.timerSet) { + o.stopTimer(); + }; + + datePickerController.addEvent(document, "mouseup", o.events.clearTimer); + + o.timerInc = 1000; + o.dayInc = arguments[1]; + o.yearInc = arguments[2]; + o.monthInc = arguments[3]; + o.onTimer(); + return o.killEvent(e); + }, + clearTimer:function() { + o.stopped = true; + o.timerInc = 1000; + o.yearInc = 0; + o.monthInc = 0; + o.dayInc = 0; + try { + datePickerController.removeEvent(document, "mouseup", o.events.clearTimer); + } catch(e) { }; + o.stopTimer(); + } + }; + o.onTimer = function() { + var d = new Date( o.date ); + + d.setDate( Math.min(d.getDate()+o.dayInc, datePicker.getDaysPerMonth(d.getMonth()+o.monthInc,d.getFullYear()+o.yearInc)) ); // no need to catch dec -> jan for the year + d.setMonth( d.getMonth() + o.monthInc ); + d.setFullYear( d.getFullYear() + o.yearInc ); + + o.date = d; + + if(o.timerInc > 50) { + o.timerInc = 50 + Math.round(((o.timerInc - 50) / 1.8)); + }; + o.startTimer(); + o.updateTable(); + }; + o.getElem = function() { + return document.getElementById(o.id.replace(/^fd-/, '')) || false; + }; + o.setRangeLow = function(range) { + if(String(range).search(/^(\d\d?\d\d)(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/) == -1) range = ''; + o.low = o.defaults.low = range; + }; + o.setRangeHigh = function(range) { + if(String(range).search(/^(\d\d?\d\d)(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/) == -1) range = ''; + o.high = o.defaults.high = range; + }; + o.setDisabledDays = function(dayArray) { + o.disableDays = o.defaults.disableDays = dayArray; + }; + o.setFirstDayOfWeek = function(e) { + if ( e == null ) e = document.parentWindow.event; + var elem = e.target != null ? e.target : e.srcElement; + + if(elem.tagName.toLowerCase() != "th") { + while(elem.tagName.toLowerCase() != "th") elem = elem.parentNode; + } + + var cnt = 0; + + while(elem.previousSibling) { + elem = elem.previousSibling; + if(elem.tagName.toLowerCase() == "th") cnt++; + } + + o.firstDayOfWeek = (o.firstDayOfWeek + cnt) % 7; + o.updateTable(); + + return o.killEvent(e); + }; + o.trueBody = function() { + return; + }; + o.resize = function() { + if(!o.created || !o.getElem()) return; + + o.div.style.visibility = "hidden"; + o.div.style.display = "block"; + + var osh = o.div.offsetHeight; + var osw = o.div.offsetWidth; + + o.div.style.visibility = "visible"; + o.div.style.display = "none"; + + var elem = document.getElementById('fd-but-' + o.id); + var pos = datePickerController.findPosition(elem); + var trueBody = (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body; + + if ( parseInt(trueBody.clientWidth+trueBody.scrollLeft) < parseInt(osw+pos[0])) { + o.div.style.left = Math.abs(parseInt((trueBody.clientWidth+trueBody.scrollLeft) - osw)) + "px"; + } else { + o.div.style.left = pos[0] + "px"; + }; + + if ( parseInt(trueBody.clientHeight+trueBody.scrollTop) < parseInt(osh+pos[1]+elem.offsetHeight+2)) { + o.div.style.top = Math.abs(parseInt(pos[1] - (osh + 2))) + "px"; + } else { + o.div.style.top = Math.abs(parseInt(pos[1] + elem.offsetHeight + 2)) + "px"; + }; + }; + o.equaliseDates = function() { + var clearDayFound = false; + var tmpDate; + for(var i = o.low; i <= o.high; i++) { + tmpDate = String(i); + if(!o.disableDays[new Date(tmpDate.substr(4,2) + '/' + tmpDate.substr(6,2) + '/' + tmpDate.substr(0,4)).getDay() - 1]) { + clearDayFound = true; + break; + }; + }; + if(!clearDayFound) o.disableDays = o.defaults.disableDays = [0,0,0,0,0,0,0]; + }; + o.outOfRange = function(tmpDate) { + if(!o.low && !o.high) return false; + + var level = false; + if(!tmpDate) { + level = true; + tmpDate = o.date; + }; + + var d = (tmpDate.getDate() < 10) ? "0" + tmpDate.getDate() : tmpDate.getDate(); + var m = ((tmpDate.getMonth() + 1) < 10) ? "0" + (tmpDate.getMonth() + 1) : tmpDate.getMonth() + 1; + var y = tmpDate.getFullYear(); + var dt = (y+' '+m+' '+d).replace(/ /g,''); + + if(o.low) { + if(parseInt(dt) < parseInt(o.low)) { + if(!level) return true; + o.date = new Date( o.low.substr(4,2) + '/' + o.low.substr(6,2) + '/' + o.low.substr(0,4) ); + return false; + }; + }; + if(o.high) { + if(parseInt(dt) > parseInt(o.high)) { + if(!level) return true; + o.date = new Date( o.high.substr(4,2) + '/' + o.high.substr(6,2) + '/' + o.high.substr(0,4) ); + }; + }; + return false; + }; + o.create = function() { + + /*@cc_on@*/ + /*@if(@_jscript_version <= 5.6) + if(!document.getElementById("iePopUpHack")) { + var loc = "./blank.html"; + var scriptFiles = document.getElementsByTagName('head')[0].getElementsByTagName('script'); + for(var i = 0, scriptFile; scriptFile = scriptFiles[i]; i++) { + if(scriptFile.src && scriptFile.src.match(/datepicker.js$/)) { + loc = scriptFile.src.replace("datepicker.js", "blank.html"); + break; + }; + }; + + o.iePopUp = document.createElement('iframe'); + o.iePopUp.src = loc; + o.iePopUp.setAttribute('className','iehack'); + o.iePopUp.scrolling="no"; + o.iePopUp.frameBorder="0"; + o.iePopUp.name = o.iePopUp.id = "iePopUpHack"; + document.body.appendChild(o.iePopUp); + } else { + o.iePopUp = document.getElementById("iePopUpHack"); + }; + /*@end@*/ + + if(typeof(fdLocale) == "object" && o.locale) { + datePicker.titles = fdLocale.titles; + datePicker.months = fdLocale.months; + datePicker.fullDay = fdLocale.fullDay; + // Optional parameters + if(fdLocale.dayAbbr) datePicker.dayAbbr = fdLocale.dayAbbr; + if(fdLocale.firstDayOfWeek) o.firstDayOfWeek = o.defaults.firstDayOfWeek = fdLocale.firstDayOfWeek; + }; + + o.div = document.createElement('div'); + o.div.style.zIndex = 9999; + o.div.id = "fd-"+o.id; + var tableBody = document.createElement('tbody'); + var tableHead = document.createElement('thead'); + var nbsp = String.fromCharCode( 160 ); + + o.table = document.createElement('table'); + o.div.className = "datePicker"; + + var tr = document.createElement('tr'); + var th = document.createElement('th'); + + // previous year + var tmpelem = document.createElement('button'); + tmpelem.setAttribute("type", "button"); + tmpelem.className = "prev-but"; + tmpelem.appendChild(document.createTextNode('\u00AB')); + tmpelem.title = datePicker.titles[2]; + tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,-1,0); }; + tmpelem.onmouseup = o.events.clearTimer; + th.appendChild( tmpelem ); + + // previous month + var tmpelem = document.createElement('button'); + tmpelem.setAttribute("type", "button"); + tmpelem.className = "prev-but"; + tmpelem.appendChild(document.createTextNode("\u2039")); + tmpelem.title = datePicker.titles[0]; + tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,0,-1); }; + tmpelem.onmouseup = o.events.clearTimer; + th.appendChild( tmpelem ); + tr.appendChild( th ); + + // title bar + o.titleBar = document.createElement('th'); + + /*@cc_on + /*@if (@_win32) + o.titleBar.setAttribute('colSpan','5'); + @else @*/ + o.titleBar.setAttribute('colspan','5'); + /*@end + @*/ + + o.titleBar.setAttribute('text-align','center'); + tr.appendChild( o.titleBar ); + + th = document.createElement('th'); + + // next month + var tmpelem = document.createElement('button'); + tmpelem.setAttribute("type", "button"); + tmpelem.className = "next-but"; + tmpelem.appendChild(document.createTextNode('\u203A')); + tmpelem.title = datePicker.titles[1]; + tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,0,1); }; + tmpelem.onmouseup = o.events.clearTimer; + + th.appendChild( tmpelem ); + + // next year + var tmpelem = document.createElement('button'); + tmpelem.setAttribute("type", "button"); + tmpelem.className = "next-but"; + tmpelem.appendChild(document.createTextNode('\u00BB')); + tmpelem.title = datePicker.titles[3]; + tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,1,0); }; + tmpelem.onmouseup = o.events.clearTimer; + th.appendChild( tmpelem ); + + tr.appendChild( th ); + + tableHead.appendChild(tr); + + var row, col; + + for(var rows = 0; rows < 7; rows++) { + row = document.createElement('tr'); + for(var cols = 0; cols < 7; cols++) { + col = (rows == 0) ? document.createElement('th') : document.createElement('td'); + if(rows != 0) { + col.appendChild(document.createTextNode(nbsp)); + } else { + col.className = "date-picker-day-header"; + col.scope = "col"; + }; + + row.appendChild(col); + } + if(rows != 0) tableBody.appendChild(row); + else tableHead.appendChild(row); + }; + o.table.appendChild( tableHead ); + o.table.appendChild( tableBody ); + + o.div.appendChild( o.table ); + o.created = true; + + document.getElementsByTagName('body')[0].appendChild( o.div ); + }; + o.setDateFromInput = function() { + o.dateSet = null; + + var elem = o.getElem(); + if(!elem) return; + + var date = elem.value; + + var d,m,y,dt,dates; + + d = o.format.replace(/-/g,'').indexOf('d'); + m = o.format.replace(/-/g,'').indexOf('m'); + y = o.format.replace(/-/g,'').indexOf('y'); + + if(o.splitDate) { + dates = []; + + dates[m] = document.getElementById(o.id+'-mm').value; + if(dates[m] < 1 || dates[m] > 12) dates[m] = ""; + + dates[d] = document.getElementById(o.id+'-dd').value; + if(dates[d] < 1 || dates[d] > datePicker.daysPerMonth[dates[m]-1]) dates[d] = ""; + + dates[y] = date; + } else { + if(date.match(/^[0-9]{4}$/)) { + if(date > 1600 && date < 2030) { + o.date.setFullYear(date); + return; + }; + }; + + dates = date.split(o.divider); + + if(dates.length != 3) { + o.date = new Date(); + return; + }; + }; + + var check = new Date( dates[y] + "/" + dates[m] + "/" + dates[d] ); + if(check == 'Invalid Date' /*@cc_on@*/ /*@if(@_win32) || check == 'NaN' /*@end@*/) { + o.date = new Date(); + return; + }; + + o.date.setMonth(dates[m]-1); + o.date.setFullYear(dates[y]); + o.date.setDate(dates[d]); + + o.dateSet = new Date(o.date); + }; + o.returnFormattedDate = function() { + var elem = o.getElem(); + if(!elem) return; + + var d = (o.date.getDate() < 10) ? "0" + o.date.getDate() : o.date.getDate(); + var m = ((o.date.getMonth() + 1) < 10) ? "0" + (o.date.getMonth() + 1) : o.date.getMonth() + 1; + var yyyy = o.date.getFullYear(); + + var weekDay = ( o.date.getDay() + 6 ) % 7; + + if(!(o.disableDays[weekDay])) { + if(o.splitDate) { + document.getElementById(o.id+"-dd").value = d; + document.getElementById(o.id+"-mm").value = m; + elem.value = yyyy; + + document.getElementById(o.id+"-dd").focus(); + if(document.getElementById(o.id+"-dd").onchange) document.getElementById(o.id+"-dd").onchange(); + if(document.getElementById(o.id+"-mm").onchange) document.getElementById(o.id+"-mm").onchange(); + } else { + elem.value = o.format.replace('y',yyyy).replace('m',m).replace('d',d).replace(/-/g,o.divider); + elem.focus(); + }; + if(elem.onchange) elem.onchange(); + }; + }; + // Credit where credit's due: + + // Most of the logic for this method from the webfx date-picker + // http://webfx.eae.net/ + + o.updateTable = function() { + + if(document.getElementById("date-picker-hover")) { + document.getElementById("date-picker-hover").id = ""; + }; + + var i; + var str = ""; + var rows = 6; + var cols = 7; + var currentWeek = 0; + var nbsp = String.fromCharCode( 160 ); + + var cells = new Array( rows ); + + for ( i = 0; i < rows; i++ ) { + cells[i] = new Array( cols ); + }; + + o.outOfRange(); + + // Set the tmpDate to this month + var tmpDate = new Date( o.date.getFullYear(), o.date.getMonth(), 1 ); + var today = new Date(); + + // titleBar + var titleText = datePicker.months[o.date.getMonth()] + nbsp + o.date.getFullYear(); + while(o.titleBar.firstChild) o.titleBar.removeChild(o.titleBar.firstChild); + o.titleBar.appendChild(document.createTextNode(titleText)); + + for ( i = 1; i < 32; i++ ) { + + tmpDate.setDate( i ); + var weekDay = ( tmpDate.getDay() + 6 ) % 7; + var colIndex = ( (weekDay - o.firstDayOfWeek) + 7 ) % 7; + var cell = { text:"", className:"", id:"" }; + + if ( tmpDate.getMonth() == o.date.getMonth() ) { + + cells[currentWeek][colIndex] = { text:"", className:"", id:"" }; + + var isToday = tmpDate.getDate() == today.getDate() && + tmpDate.getMonth() == today.getMonth() && + tmpDate.getFullYear() == today.getFullYear(); + + if ( o.dateSet != null && o.dateSet.getDate() == tmpDate.getDate() && o.dateSet.getMonth() == tmpDate.getMonth() && o.dateSet.getFullYear() == tmpDate.getFullYear()) { + cells[currentWeek][colIndex].className = "date-picker-selected-date"; + }; + if ( o.date.getDate() == tmpDate.getDate() && o.date.getFullYear() == tmpDate.getFullYear()) { + cells[currentWeek][colIndex].id = "date-picker-hover"; + }; + + if(o.highlightDays[weekDay]) { + cells[currentWeek][colIndex].className += " date-picker-highlight"; + }; + if ( isToday ) { + cells[currentWeek][colIndex].className = "date-picker-today"; + }; + if(o.outOfRange(tmpDate)) { + cells[currentWeek][colIndex].className = "out-of-range"; + } else if(o.disableDays[weekDay]) { + cells[currentWeek][colIndex].className = "day-disabled"; + }; + cells[currentWeek][colIndex].text = tmpDate.getDate(); + if ( colIndex == 6 ) currentWeek++; + }; + }; + + // Table headers + var lnk, d; + var ths = o.table.getElementsByTagName('thead')[0].getElementsByTagName('tr')[1].getElementsByTagName('th'); + for ( var y = 0; y < 7; y++ ) { + d = (o.firstDayOfWeek + y) % 7; + + while(ths[y].firstChild) ths[y].removeChild(ths[y].firstChild); + + ths[y].title = datePicker.fullDay[d]; + + // Don't create a button for the first day header + if(y > 0) { + but = document.createElement("BUTTON"); + but.className = "fd-day-header"; + but.onclick = but.onkeypress = ths[y].onclick = o.setFirstDayOfWeek; + but.appendChild(document.createTextNode(datePicker.dayAbbr ? datePicker.dayAbbr[d] : datePicker.fullDay[d].charAt(0))); + ths[y].appendChild(but); + but.title = datePicker.fullDay[d]; + } else { + ths[y].appendChild(document.createTextNode(datePicker.dayAbbr ? datePicker.dayAbbr[d] : datePicker.fullDay[d].charAt(0))); + ths[y].onclick = null; + }; + }; + + + var trs = o.table.getElementsByTagName('tbody')[0].getElementsByTagName('tr'); + + var tmpCell; + + for ( var y = 0; y < rows; y++ ) { + var tds = trs[y].getElementsByTagName('td'); + for (var x = 0; x < cols; x++) { + tmpCell = tds[x]; + + while(tmpCell.firstChild) tmpCell.removeChild(tmpCell.firstChild); + + if ( typeof cells[y][x] != "undefined" ) { + tmpCell.className = cells[y][x].className; + tmpCell.id = cells[y][x].id; + + tmpCell.appendChild(document.createTextNode(cells[y][x].text)); + + if(cells[y][x].className != "out-of-range") { + tmpCell.onmouseover = o.events.onmouseover; + tmpCell.onclick = cells[y][x].className == "day-disabled" ? o.killEvent : o.events.onclick; + tmpCell.title = datePicker.months[o.date.getMonth()] + nbsp + cells[y][x].text + "," + nbsp + o.date.getFullYear(); + } else { + tmpCell.onmouseover = null; + tmpCell.onclick = o.killEvent; + tmpCell.title = ""; + }; + } else { + tmpCell.className = ""; + tmpCell.id = ""; + tmpCell.onmouseover = null; + tmpCell.onclick = function(e) { return o.killEvent(e); }; + tmpCell.appendChild(document.createTextNode(nbsp)); + tmpCell.title = ""; + }; + }; + }; + }; + o.init = function() { + if(o.low && o.high && (o.high - o.low < 7)) { + o.equaliseDates(); + }; + o.resize(); + o.setDateFromInput(); + o.fade(); + o.ieHack(true); + }; + o.ieHack = function(cleanup) { + // IE hack + if(o.iePopUp) { + o.iePopUp.style.display = "block"; + o.iePopUp.style.top = (o.div.offsetTop + 2) + "px"; + o.iePopUp.style.left = o.div.offsetLeft + "px"; + o.iePopUp.style.width = o.div.clientWidth + "px"; + o.iePopUp.style.height = (o.div.clientHeight - 2) + "px"; + if(cleanup) o.iePopUp.style.display = "none"; + } + }; + o.show = function() { + var elem = o.getElem(); + if(!elem || o.visible || elem.disabled) return; + + o.reset(); + o.setDateFromInput(); + o.updateTable(); + o.resize(); + o.ieHack(false); + + datePickerController.addEvent(document, "mousedown", o.events.onmousedown); + datePickerController.addEvent(document, "keypress", o.events.onkeydown); + + // Internet Explorer requires the keydown event in order to catch arrow keys + + /*@cc_on@*/ + /*@if(@_win32) + datePickerController.removeEvent(document, "keypress", o.events.onkeydown); + datePickerController.addEvent(document, "keydown", o.events.onkeydown); + /*@end@*/ + + o.opacityTo = 90; + o.div.style.display = "block"; + o.ieHack(false); + o.fade(); + o.visible = true; + + }; + o.hide = function() { + try { + datePickerController.removeEvent(document, "mousedown", o.events.onmousedown); + datePickerController.removeEvent(document, "keypress", o.events.onkeydown); + datePickerController.removeEvent(document, "keydown", o.events.onkeydown); + } catch(e) { + + }; + if(o.iePopUp) { + o.iePopUp.style.display = "none"; + }; + o.opacityTo = 0; + o.fade(); + o.visible = false; + }; + o.create(); + o.init(); +}; + +datePickerController = { + datePickers: {}, + addEvent: function(obj, type, fn, tmp) { + tmp || (tmp = true); + if( obj.attachEvent ) { + obj["e"+type+fn] = fn; + obj[type+fn] = function(){obj["e"+type+fn]( window.event );}; + obj.attachEvent( "on"+type, obj[type+fn] ); + } else { + obj.addEventListener( type, fn, true ); + }; + }, + removeEvent: function(obj, type, fn, tmp) { + tmp || (tmp = true); + if( obj.detachEvent ) { + obj.detachEvent( "on"+type, obj[type+fn] ); + obj[type+fn] = null; + } else { + obj.removeEventListener( type, fn, true ); + }; + }, + findPosition: function(obj) { + var curleft = 0; + var curtop = 0; + var orig = obj; + + if(obj.offsetParent) { + while(obj.offsetParent) { + curleft += obj.offsetLeft; + curtop += obj.offsetTop; + obj = obj.offsetParent; + }; + } else if (obj.x) { + curleft += obj.x; + curtop += obj.y; + }; + return [ curleft, curtop ]; + }, + hideAll: function(exception) { + for(dp in datePickerController.datePickers) { + if(exception && exception == datePickerController.datePickers[dp].id) continue; + datePickerController.datePickers[dp].hide(); + }; + }, + cleanUp: function() { + var dp; + for(dp in datePickerController.datePickers) { + if(!document.getElementById(datePickerController.datePickers[dp].id)) { + dpElem = document.getElementById("fd-"+datePickerController.datePickers[dp].id); + if(dpElem) { + dpElem.parentNode.removeChild(dpElem); + }; + datePickerController.datePickers[dp] = null; + delete datePickerController.datePickers[dp]; + }; + }; + }, + dateFormat: function(dateIn, favourMDY) { + var dateTest = [ + { regExp:/^(0[1-9]|[12][0-9]|3[01])([- \/.])(0[1-9]|1[012])([- \/.])(\d\d?\d\d)$/, d:1, m:3, y:5 }, // dmy + { regExp:/^(0[1-9]|1[012])([- \/.])(0[1-9]|[12][0-9]|3[01])([- \/.])(\d\d?\d\d)$/, d:3, m:1, y:5 }, // mdy + { regExp:/^(\d\d?\d\d)([- \/.])(0[1-9]|1[012])([- \/.])(0[1-9]|[12][0-9]|3[01])$/, d:5, m:3, y:1 } // ymd + ]; + + var start; + var cnt = 0; + + while(cnt < 3) { + start = (cnt + (favourMDY ? 4 : 3)) % 3; + + if(dateIn.match(dateTest[start].regExp)) { + res = dateIn.match(dateTest[start].regExp); + y = res[dateTest[start].y]; + m = res[dateTest[start].m]; + d = res[dateTest[start].d]; + if(m.length == 1) m = "0" + m; + if(d.length == 1) d = "0" + d; + if(y.length != 4) y = (parseInt(y) < 50) ? '20' + y : '19' + y; + + return y+m+d; + }; + + cnt++; + }; + + return 0; + }, + create: function() { + if(!datePicker.isSupported) return; + + datePickerController.cleanUp(); + + var inputs = document.getElementsByTagName('input'); + + var regExp1 = /disable-days-([1-7]){1,6}/g; // the days to disable + var regExp3 = /highlight-days-([1-7]){1,7}/g; // the days to highlight in red + var regExp4 = /range-low-([0-9\-]){10}/g; // the lowest selectable date + var regExp5 = /range-high-([0-9\-]){10}/g; // the highest selectable date + var regExp6 = /format-([dmy\-]{5})/g; // the input/output date format + var regExp7 = /divider-(dot|slash|space|dash)/g; // the character used to divide the date + var regExp8 = /no-locale/g; // do not attempt to detect the browser language + + for(var i=0, inp; inp = inputs[i]; i++) { + if(inp.className && (inp.className.search(regExp6) != -1 || inp.className.search(/split-date/) != -1) && inp.type == "text" && inp.name) { + + if(!inp.id) { + // Internet explorer requires you to give each input a unique ID attribute. + if(document.getElementById(inp.name)) continue; + inp.id = inp.name; + }; + + var options = { + id:inp.id, + low:"", + high:"", + divider:"/", + format:"d-m-y", + highlightDays:[0,0,0,0,0,1,1], + disableDays:[0,0,0,0,0,0,0], + locale:inp.className.search(regExp8) == -1, + splitDate:0 + }; + + // Split the date into three parts ? + if(inp.className.search(/split-date/) != -1) { + if(document.getElementById(inp.id+'-dd') && document.getElementById(inp.id+'-mm') && document.getElementById(inp.id+'-dd').tagName.toLowerCase() == "input" && document.getElementById(inp.id+'-mm').tagName.toLowerCase() == "input") { + options.splitDate = 1; + }; + }; + + // Date format(variations of d-m-y) + if(inp.className.search(regExp6) != -1) { + options.format = inp.className.match(regExp6)[0].replace('format-',''); + }; + + // What divider to use, a "/", "-", "." or " " + if(inp.className.search(regExp7) != -1) { + var divider = inp.className.match(regExp7)[0].replace('divider-',''); + switch(divider.toLowerCase()) { + case "dot": + options.divider = "."; + break; + case "space": + options.divider = " "; + break; + case "dash": + options.divider = "-"; + break; + default: + options.divider = "/"; + }; + }; + + // The days to highlight + if(inp.className.search(regExp3) != -1) { + var tmp = inp.className.match(regExp3)[0].replace(/highlight-days-/, ''); + options.highlightDays = [0,0,0,0,0,0,0]; + for(var j = 0; j < tmp.length; j++) { + options.highlightDays[tmp.charAt(j) - 1] = 1; + }; + }; + + // The days to disable + if(inp.className.search(regExp1) != -1) { + var tmp = inp.className.match(regExp1)[0].replace(/disable-days-/, ''); + options.disableDays = [0,0,0,0,0,0,0]; + for(var j = 0; j < tmp.length; j++) { + options.disableDays[tmp.charAt(j) - 1] = 1; + }; + }; + + // The lower limit + if(inp.className.search(regExp4) != -1) { + options.low = datePickerController.dateFormat(inp.className.match(regExp4)[0].replace(/range-low-/, ''), options.format.charAt(0) == "m"); + if(options.low == 0) { + options.low = ''; + }; + }; + + // The higher limit + if(inp.className.search(regExp5) != -1) { + options.high = datePickerController.dateFormat(inp.className.match(regExp5)[0].replace(/range-high-/, ''), options.format.charAt(0) == "m"); + if(options.high == 0) { + options.high = ''; + }; + }; + + // Datepicker is already created so reset it's defaults + if(document.getElementById('fd-'+inp.id)) { + for(var opt in options) { + datePickerController.datePickers[inp.id].defaults[opt] = options[opt]; + }; + }; + + // Create the button (if needs be) + if(!document.getElementById("fd-but-" + inp.id)) { + var but = document.createElement('button'); + but.setAttribute("type", "button"); + but.className = "date-picker-control"; + + but.id = "fd-but-" + inp.id; + but.appendChild(document.createTextNode(String.fromCharCode( 160 ))); + + if(inp.nextSibling) { + inp.parentNode.insertBefore(but, inp.nextSibling); + } else { + inp.parentNode.appendChild(but); + }; + + } else { + var but = document.getElementById("fd-but-" + inp.id); + }; + + // Add button events + but.onclick = but.onpress = function() { + var inpId = this.id.replace('fd-but-',''); + + datePickerController.hideAll(inpId); + if(inpId in datePickerController.datePickers && !datePickerController.datePickers[inpId].visible) { + datePickerController.datePickers[inpId].show(); + }; + return false; + }; + + // Create the datePicker (if needs be) + if(!document.getElementById('fd-'+inp.id)) { + datePickerController.datePickers[inp.id] = new datePicker(options); + }; + }; + }; + } + +}; + + +})(); + +datePickerController.addEvent(window, 'load', datePickerController.create); + diff --git a/usr/local/www/javascript/datepicker/media/bg_header.jpg b/usr/local/www/javascript/datepicker/media/bg_header.jpg new file mode 100755 index 0000000000000000000000000000000000000000..10dbd74e8acdbe80927dce4af7f5ad0b6d1dcf08 GIT binary patch literal 1792 zcmex=R-tZb|xz{bJG4g_o*9GqNST$~&{V890g0&u{{ z%)-LP#>T_J!6U@S!zUyHk`WOE%L_s%0VoC6gTnZKfI*OhL79nznNg5|Nsy6Qkn#T! zh6)BoFaWv}1{hhGnK&V$j4&}E&Bz3FumDgw2P4q^KzWFqFk|9HCg#a3q9KNkjf#P+ zf`t)sdG=REXwFh_;TAQ zXY)=|Jzv2yau2kvUJji!pLXA=q# zNMMr@An8Peb^1T51_NnswV^_~Ae`iI1OxVTk@iz-zyHKj>DQM=&A;uNE#Hy+cK&z! zZKZKh#T(PRbV3((i&iW;8m9r`L_X>k{g$!l=sYkl6vz{aSbbDX3&s@#s*HlEgmMC1 zyMU%V>IQN5R)Gx^`|=8#BB1FYML?^Exrgc z9M0AG=-Ra>FliCY7`XHA)rBp;{M1Mzz3ie$yp%lf$F~l zWgLvaYQw6Vj@CNn-Pirk5N-bV)qjRuwfzG3!G7SiRG+}}`U-nl!zb2H3>>U)SQwu$ zTQR)7!ahNpL(%yJ8)F3H0tepT4fzflg7XVB1Q-~2Ua@8fFxNeZPf(vA=di%v&SA|v zmiz`y7L7`Va}Cy|j8C|L1|ca~`+|kx{tmtaL5wb+80S_syt`mlv;A+*{qL*)ZaKGK z;N`df48^~vIr}+ture__FuY-4PwM=^G{IVggMmr?!Kx)p4GiiJxGn*0X1v3|_f~^} z;Q|8(gKdNH0tN=jJB!Q@h;TxcGcbJ9FkxU~;7{Or!MKz`wnMgy#bK2}Lx95nn*d13 B)&>9o literal 0 HcmV?d00001 diff --git a/usr/local/www/javascript/datepicker/media/bullet1.gif b/usr/local/www/javascript/datepicker/media/bullet1.gif new file mode 100755 index 0000000000000000000000000000000000000000..ae352c2b697b3309d21f667749a7fd4a2d695655 GIT binary patch literal 55 zcmZ?wbhEHb zn7DSR*ytGc7%6$hIB9taREfFC38UEw8fx+>T53van%aq~+G@$_8tVuvTU$tLo9lFKS96bdsUA;tYoh^i|-QC0O9bO|&URQqJ1dhHQ$nKu? M9{(**KT`kzJ6L&uY5)KL literal 0 HcmV?d00001 diff --git a/usr/local/www/javascript/datepicker/media/cal.gif b/usr/local/www/javascript/datepicker/media/cal.gif new file mode 100755 index 0000000000000000000000000000000000000000..8526cf5d19a915aa8073cf344873c4505491970d GIT binary patch literal 127 zcmZ?wbhEHb6krfwSj51v)Yr?)cd3`J*V1K6uU)?O9}E~67!-f9FfuT(G3WrDe9t*l+9<3>gnm}=;-L@=jZ0;=H=z( z|Ns900000000000A^8LW000~SEC2ui044xi000I5;3ke_X`X1Ru59bRa4gSSZQppV z?|kq7z#uO}EEin3mE$jQpf%+1ct4$;!n)YaD4(GA+$+}+;a z;Njxq;tb~J=;`X~?CtLF?hEqs^!4`l`1$(#`U?L400RmfNU)&6g9Z~QT*$DY!-o(f zN}MPWfyIj$Giuz(v7^V29uJ5dNwTELlPFV*s$9vkrOT8CV#=IJv!>0PICJXES)ixS zpFo2O9ZIyQ(V_&BDqYI7sne%Wqe`7hwJOvBShH%~%C)Q4uVBN99ZUABfU{`Rs$I*r zt=qS7(BTJr4xw7TUm@{kM Q%(=7Y&!9t#P8 -1) { + // Token is an ID selector + var bits = token.split('#'); + var tagName = bits[0]; + var id = bits[1]; + var element = document.getElementById(id); + if (tagName && element.nodeName.toLowerCase() != tagName) { + // tag with that ID not found, return false + return new Array(); + } + // Set currentContext to contain just this element + currentContext = new Array(element); + continue; // Skip to next token + } + if (token.indexOf('.') > -1) { + // Token contains a class selector + var bits = token.split('.'); + var tagName = bits[0]; + var className = bits[1]; + if (!tagName) { + tagName = '*'; + } + // Get elements matching tag, filter them for class selector + var found = new Array; + var foundCount = 0; + for (var h = 0; h < currentContext.length; h++) { + var elements; + if (tagName == '*') { + elements = getAllChildren(currentContext[h]); + } else { + elements = currentContext[h].getElementsByTagName(tagName); + } + for (var j = 0; j < elements.length; j++) { + found[foundCount++] = elements[j]; + } + } + currentContext = new Array; + var currentContextIndex = 0; + for (var k = 0; k < found.length; k++) { + if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) { + currentContext[currentContextIndex++] = found[k]; + } + } + continue; // Skip to next token + } + // Code to deal with attribute selectors + if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) { + var tagName = RegExp.$1; + var attrName = RegExp.$2; + var attrOperator = RegExp.$3; + var attrValue = RegExp.$4; + if (!tagName) { + tagName = '*'; + } + // Grab all of the tagName elements within current context + var found = new Array; + var foundCount = 0; + for (var h = 0; h < currentContext.length; h++) { + var elements; + if (tagName == '*') { + elements = getAllChildren(currentContext[h]); + } else { + elements = currentContext[h].getElementsByTagName(tagName); + } + for (var j = 0; j < elements.length; j++) { + found[foundCount++] = elements[j]; + } + } + currentContext = new Array; + var currentContextIndex = 0; + var checkFunction; // This function will be used to filter the elements + switch (attrOperator) { + case '=': // Equality + checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); }; + break; + case '~': // Match one of space separated words + checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); }; + break; + case '|': // Match start with value followed by optional hyphen + checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); }; + break; + case '^': // Match starts with value + checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); }; + break; + case '$': // Match ends with value - fails with "Warning" in Opera 7 + checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); }; + break; + case '*': // Match ends with value + checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); }; + break; + default : + // Just test for existence of attribute + checkFunction = function(e) { return e.getAttribute(attrName); }; + } + currentContext = new Array; + var currentContextIndex = 0; + for (var k = 0; k < found.length; k++) { + if (checkFunction(found[k])) { + currentContext[currentContextIndex++] = found[k]; + } + } + // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue); + continue; // Skip to next token + } + + if (!currentContext[0]){ + return; + } + + // If we get here, token is JUST an element (not a class or ID selector) + tagName = token; + var found = new Array; + var foundCount = 0; + for (var h = 0; h < currentContext.length; h++) { + var elements = currentContext[h].getElementsByTagName(tagName); + for (var j = 0; j < elements.length; j++) { + found[foundCount++] = elements[j]; + } + } + currentContext = found; + } + return currentContext; +} + +/* That revolting regular expression explained +/^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/ + \---/ \---/\-------------/ \-------/ + | | | | + | | | The value + | | ~,|,^,$,* or = + | Attribute + Tag +*/ diff --git a/usr/local/www/javascript/domTT/domLib.js b/usr/local/www/javascript/domTT/domLib.js new file mode 100644 index 000000000..9a51a3406 --- /dev/null +++ b/usr/local/www/javascript/domTT/domLib.js @@ -0,0 +1,706 @@ +/** $Id: domLib.js 2321 2006-06-12 06:45:41Z dallen $ */ +// {{{ license + +/* + * Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// }}} +// {{{ intro + +/** + * Title: DOM Library Core + * Version: 0.70 + * + * Summary: + * A set of commonly used functions that make it easier to create javascript + * applications that rely on the DOM. + * + * Updated: 2005/05/17 + * + * Maintainer: Dan Allen + * Maintainer: Jason Rust + * + * License: Apache 2.0 + */ + +// }}} +// {{{ global constants (DO NOT EDIT) + +// -- Browser Detection -- +var domLib_userAgent = navigator.userAgent.toLowerCase(); +var domLib_isMac = navigator.appVersion.indexOf('Mac') != -1; +var domLib_isWin = domLib_userAgent.indexOf('windows') != -1; +// NOTE: could use window.opera for detecting Opera +var domLib_isOpera = domLib_userAgent.indexOf('opera') != -1; +var domLib_isOpera7up = domLib_userAgent.match(/opera.(7|8)/i); +var domLib_isSafari = domLib_userAgent.indexOf('safari') != -1; +var domLib_isKonq = domLib_userAgent.indexOf('konqueror') != -1; +// Both konqueror and safari use the khtml rendering engine +var domLib_isKHTML = (domLib_isKonq || domLib_isSafari || domLib_userAgent.indexOf('khtml') != -1); +var domLib_isIE = (!domLib_isKHTML && !domLib_isOpera && (domLib_userAgent.indexOf('msie 5') != -1 || domLib_userAgent.indexOf('msie 6') != -1 || domLib_userAgent.indexOf('msie 7') != -1 || domLib_userAgent.indexOf('msie 8') != -1)); +var domLib_isIE5up = domLib_isIE; +var domLib_isIE50 = (domLib_isIE && domLib_userAgent.indexOf('msie 5.0') != -1); +var domLib_isIE55 = (domLib_isIE && domLib_userAgent.indexOf('msie 5.5') != -1); +var domLib_isIE5 = (domLib_isIE50 || domLib_isIE55); +// safari and konq may use string "khtml, like gecko", so check for destinctive / +var domLib_isGecko = domLib_userAgent.indexOf('gecko/') != -1; +var domLib_isMacIE = (domLib_isIE && domLib_isMac); +var domLib_isIE55up = domLib_isIE5up && !domLib_isIE50 && !domLib_isMacIE; +var domLib_isIE6up = domLib_isIE55up && !domLib_isIE55; + +// -- Browser Abilities -- +var domLib_standardsMode = (document.compatMode && document.compatMode == 'CSS1Compat'); +var domLib_useLibrary = (domLib_isOpera7up || domLib_isKHTML || domLib_isIE5up || domLib_isGecko || domLib_isMacIE || document.defaultView); +// fixed in Konq3.2 +var domLib_hasBrokenTimeout = (domLib_isMacIE || (domLib_isKonq && domLib_userAgent.match(/konqueror\/3.([2-9])/) == null)); +var domLib_canFade = (domLib_isGecko || domLib_isIE || domLib_isSafari || domLib_isOpera); +var domLib_canDrawOverSelect = (domLib_isMac || domLib_isOpera || domLib_isGecko); +var domLib_canDrawOverFlash = (domLib_isMac || domLib_isWin); + +// -- Event Variables -- +var domLib_eventTarget = domLib_isIE ? 'srcElement' : 'currentTarget'; +var domLib_eventButton = domLib_isIE ? 'button' : 'which'; +var domLib_eventTo = domLib_isIE ? 'toElement' : 'relatedTarget'; +var domLib_stylePointer = domLib_isIE ? 'hand' : 'pointer'; +// NOTE: a bug exists in Opera that prevents maxWidth from being set to 'none', so we make it huge +var domLib_styleNoMaxWidth = domLib_isOpera ? '10000px' : 'none'; +var domLib_hidePosition = '-1000px'; +var domLib_scrollbarWidth = 14; +var domLib_autoId = 1; +var domLib_zIndex = 1010; + +// -- Detection -- +var domLib_collisionElements; +var domLib_collisionsCached = false; + +var domLib_timeoutStateId = 0; +var domLib_timeoutStates = new domTT_Hash(); + +// }}} +// {{{ DOM enhancements + +if (!document.ELEMENT_NODE) +{ + document.ELEMENT_NODE = 1; + document.ATTRIBUTE_NODE = 2; + document.TEXT_NODE = 3; + document.DOCUMENT_NODE = 9; + document.DOCUMENT_FRAGMENT_NODE = 11; +} + +function domLib_clone(obj) +{ + var copy = {}; + for (var i in obj) + { + var value = obj[i]; + try + { + if (value != null && typeof(value) == 'object' && value != window && !value.nodeType) + { + copy[i] = domLib_clone(value); + } + else + { + copy[i] = value; + } + } + catch(e) + { + copy[i] = value; + } + } + + return copy; +} + +// }}} +// {{{ class domTT_Hash() + +function domTT_Hash() +{ + this.length = 0; + this.numericLength = 0; + this.elementData = []; + for (var i = 0; i < arguments.length; i += 2) + { + if (typeof(arguments[i + 1]) != 'undefined') + { + this.elementData[arguments[i]] = arguments[i + 1]; + this.length++; + if (arguments[i] == parseInt(arguments[i])) + { + this.numericLength++; + } + } + } +} + +// using prototype as opposed to inner functions saves on memory +domTT_Hash.prototype.get = function(in_key) +{ + if (typeof(this.elementData[in_key]) != 'undefined') { + return this.elementData[in_key]; + } + + return null; +}; + +domTT_Hash.prototype.set = function(in_key, in_value) +{ + if (typeof(in_value) != 'undefined') + { + if (typeof(this.elementData[in_key]) == 'undefined') + { + this.length++; + if (in_key == parseInt(in_key)) + { + this.numericLength++; + } + } + + return this.elementData[in_key] = in_value; + } + + return false; +}; + +domTT_Hash.prototype.remove = function(in_key) +{ + var tmp_value; + if (typeof(this.elementData[in_key]) != 'undefined') + { + this.length--; + if (in_key == parseInt(in_key)) + { + this.numericLength--; + } + + tmp_value = this.elementData[in_key]; + delete this.elementData[in_key]; + } + + return tmp_value; +}; + +domTT_Hash.prototype.size = function() +{ + return this.length; +}; + +domTT_Hash.prototype.has = function(in_key) +{ + return typeof(this.elementData[in_key]) != 'undefined'; +}; + +domTT_Hash.prototype.find = function(in_obj) +{ + for (var tmp_key in this.elementData) + { + if (this.elementData[tmp_key] == in_obj) + { + return tmp_key; + } + } + + return null; +}; + +domTT_Hash.prototype.merge = function(in_hash) +{ + for (var tmp_key in in_hash.elementData) + { + if (typeof(this.elementData[tmp_key]) == 'undefined') + { + this.length++; + if (tmp_key == parseInt(tmp_key)) + { + this.numericLength++; + } + } + + this.elementData[tmp_key] = in_hash.elementData[tmp_key]; + } +}; + +domTT_Hash.prototype.compare = function(in_hash) +{ + if (this.length != in_hash.length) + { + return false; + } + + for (var tmp_key in this.elementData) + { + if (this.elementData[tmp_key] != in_hash.elementData[tmp_key]) + { + return false; + } + } + + return true; +}; + +// }}} +// {{{ domLib_isDescendantOf() + +function domLib_isDescendantOf(in_object, in_ancestor, in_bannedTags) +{ + if (in_object == null) + { + return false; + } + + if (in_object == in_ancestor) + { + return true; + } + + if (typeof(in_bannedTags) != 'undefined' && + (',' + in_bannedTags.join(',') + ',').indexOf(',' + in_object.tagName + ',') != -1) + { + return false; + } + + while (in_object != document.documentElement) + { + try + { + if ((tmp_object = in_object.offsetParent) && tmp_object == in_ancestor) + { + return true; + } + else if ((tmp_object = in_object.parentNode) == in_ancestor) + { + return true; + } + else + { + in_object = tmp_object; + } + } + // in case we get some wierd error, assume we left the building + catch(e) + { + return false; + } + } + + return false; +} + +// }}} +// {{{ domLib_detectCollisions() + +/** + * For any given target element, determine if elements on the page + * are colliding with it that do not obey the rules of z-index. + */ +function domLib_detectCollisions(in_object, in_recover, in_useCache) +{ + // the reason for the cache is that if the root menu is built before + // the page is done loading, then it might not find all the elements. + // so really the only time you don't use cache is when building the + // menu as part of the page load + if (!domLib_collisionsCached) + { + var tags = []; + + if (!domLib_canDrawOverFlash) + { + tags[tags.length] = 'object'; + } + + if (!domLib_canDrawOverSelect) + { + tags[tags.length] = 'select'; + } + + domLib_collisionElements = domLib_getElementsByTagNames(tags, true); + domLib_collisionsCached = in_useCache; + } + + // if we don't have a tip, then unhide selects + if (in_recover) + { + for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++) + { + var thisElement = domLib_collisionElements[cnt]; + + if (!thisElement.hideList) + { + thisElement.hideList = new domTT_Hash(); + } + + thisElement.hideList.remove(in_object.id); + if (!thisElement.hideList.length) + { + domLib_collisionElements[cnt].style.visibility = 'visible'; + if (domLib_isKonq) + { + domLib_collisionElements[cnt].style.display = ''; + } + } + } + + return; + } + else if (domLib_collisionElements.length == 0) + { + return; + } + + // okay, we have a tip, so hunt and destroy + var objectOffsets = domLib_getOffsets(in_object); + + for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++) + { + var thisElement = domLib_collisionElements[cnt]; + + // if collision element is in active element, move on + // WARNING: is this too costly? + if (domLib_isDescendantOf(thisElement, in_object)) + { + continue; + } + + // konqueror only has trouble with multirow selects + if (domLib_isKonq && + thisElement.tagName == 'SELECT' && + (thisElement.size <= 1 && !thisElement.multiple)) + { + continue; + } + + if (!thisElement.hideList) + { + thisElement.hideList = new domTT_Hash(); + } + + var selectOffsets = domLib_getOffsets(thisElement); + var center2centerDistance = Math.sqrt(Math.pow(selectOffsets.get('leftCenter') - objectOffsets.get('leftCenter'), 2) + Math.pow(selectOffsets.get('topCenter') - objectOffsets.get('topCenter'), 2)); + var radiusSum = selectOffsets.get('radius') + objectOffsets.get('radius'); + // the encompassing circles are overlapping, get in for a closer look + if (center2centerDistance < radiusSum) + { + // tip is left of select + if ((objectOffsets.get('leftCenter') <= selectOffsets.get('leftCenter') && objectOffsets.get('right') < selectOffsets.get('left')) || + // tip is right of select + (objectOffsets.get('leftCenter') > selectOffsets.get('leftCenter') && objectOffsets.get('left') > selectOffsets.get('right')) || + // tip is above select + (objectOffsets.get('topCenter') <= selectOffsets.get('topCenter') && objectOffsets.get('bottom') < selectOffsets.get('top')) || + // tip is below select + (objectOffsets.get('topCenter') > selectOffsets.get('topCenter') && objectOffsets.get('top') > selectOffsets.get('bottom'))) + { + thisElement.hideList.remove(in_object.id); + if (!thisElement.hideList.length) + { + thisElement.style.visibility = 'visible'; + if (domLib_isKonq) + { + thisElement.style.display = ''; + } + } + } + else + { + thisElement.hideList.set(in_object.id, true); + thisElement.style.visibility = 'hidden'; + if (domLib_isKonq) + { + thisElement.style.display = 'none'; + } + } + } + } +} + +// }}} +// {{{ domLib_getOffsets() + +function domLib_getOffsets(in_object, in_preserveScroll) +{ + if (typeof(in_preserveScroll) == 'undefined') { + in_preserveScroll = false; + } + + var originalObject = in_object; + var originalWidth = in_object.offsetWidth; + var originalHeight = in_object.offsetHeight; + var offsetLeft = 0; + var offsetTop = 0; + + while (in_object) + { + offsetLeft += in_object.offsetLeft; + offsetTop += in_object.offsetTop; + in_object = in_object.offsetParent; + // consider scroll offset of parent elements + if (in_object && !in_preserveScroll) + { + offsetLeft -= in_object.scrollLeft; + offsetTop -= in_object.scrollTop; + } + } + + // MacIE misreports the offsets (even with margin: 0 in body{}), still not perfect + if (domLib_isMacIE) { + offsetLeft += 10; + offsetTop += 10; + } + + return new domTT_Hash( + 'left', offsetLeft, + 'top', offsetTop, + 'right', offsetLeft + originalWidth, + 'bottom', offsetTop + originalHeight, + 'leftCenter', offsetLeft + originalWidth/2, + 'topCenter', offsetTop + originalHeight/2, + 'radius', Math.max(originalWidth, originalHeight) + ); +} + +// }}} +// {{{ domLib_setTimeout() + +function domLib_setTimeout(in_function, in_timeout, in_args) +{ + if (typeof(in_args) == 'undefined') + { + in_args = []; + } + + if (in_timeout == -1) + { + // timeout event is disabled + return 0; + } + else if (in_timeout == 0) + { + in_function(in_args); + return 0; + } + + // must make a copy of the arguments so that we release the reference + var args = domLib_clone(in_args); + + if (!domLib_hasBrokenTimeout) + { + return setTimeout(function() { in_function(args); }, in_timeout); + } + else + { + var id = domLib_timeoutStateId++; + var data = new domTT_Hash(); + data.set('function', in_function); + data.set('args', args); + domLib_timeoutStates.set(id, data); + + data.set('timeoutId', setTimeout('domLib_timeoutStates.get(' + id + ').get(\'function\')(domLib_timeoutStates.get(' + id + ').get(\'args\')); domLib_timeoutStates.remove(' + id + ');', in_timeout)); + return id; + } +} + +// }}} +// {{{ domLib_clearTimeout() + +function domLib_clearTimeout(in_id) +{ + if (!domLib_hasBrokenTimeout) + { + if (in_id > 0) { + clearTimeout(in_id); + } + } + else + { + if (domLib_timeoutStates.has(in_id)) + { + clearTimeout(domLib_timeoutStates.get(in_id).get('timeoutId')); + domLib_timeoutStates.remove(in_id); + } + } +} + +// }}} +// {{{ domLib_getEventPosition() + +function domLib_getEventPosition(in_eventObj) +{ + var eventPosition = new domTT_Hash('x', 0, 'y', 0, 'scrollX', 0, 'scrollY', 0); + + // IE varies depending on standard compliance mode + if (domLib_isIE) + { + var doc = (domLib_standardsMode ? document.documentElement : document.body); + // NOTE: events may fire before the body has been loaded + if (doc) + { + eventPosition.set('x', in_eventObj.clientX + doc.scrollLeft); + eventPosition.set('y', in_eventObj.clientY + doc.scrollTop); + eventPosition.set('scrollX', doc.scrollLeft); + eventPosition.set('scrollY', doc.scrollTop); + } + } + else + { + eventPosition.set('x', in_eventObj.pageX); + eventPosition.set('y', in_eventObj.pageY); + eventPosition.set('scrollX', in_eventObj.pageX - in_eventObj.clientX); + eventPosition.set('scrollY', in_eventObj.pageY - in_eventObj.clientY); + } + + return eventPosition; +} + +// }}} +// {{{ domLib_cancelBubble() + +function domLib_cancelBubble(in_event) +{ + var eventObj = in_event ? in_event : window.event; + eventObj.cancelBubble = true; +} + +// }}} +// {{{ domLib_getIFrameReference() + +function domLib_getIFrameReference(in_frame) +{ + if (domLib_isGecko || domLib_isIE) + { + return in_frame.frameElement; + } + else + { + // we could either do it this way or require an id on the frame + // equivalent to the name + var name = in_frame.name; + if (!name || !in_frame.parent) + { + return null; + } + + var candidates = in_frame.parent.document.getElementsByTagName('iframe'); + for (var i = 0; i < candidates.length; i++) + { + if (candidates[i].name == name) + { + return candidates[i]; + } + } + + return null; + } +} + +// }}} +// {{{ domLib_getElementsByClass() + +function domLib_getElementsByClass(in_class) +{ + var elements = domLib_isIE5 ? document.all : document.getElementsByTagName('*'); + var matches = []; + var cnt = 0; + for (var i = 0; i < elements.length; i++) + { + if ((" " + elements[i].className + " ").indexOf(" " + in_class + " ") != -1) + { + matches[cnt++] = elements[i]; + } + } + + return matches; +} + +// }}} +// {{{ domLib_getElementsByTagNames() + +function domLib_getElementsByTagNames(in_list, in_excludeHidden) +{ + var elements = []; + for (var i = 0; i < in_list.length; i++) + { + var matches = document.getElementsByTagName(in_list[i]); + for (var j = 0; j < matches.length; j++) + { + // skip objects that have nested embeds, or else we get "flashing" + if (matches[j].tagName == 'OBJECT' && domLib_isGecko) + { + var kids = matches[j].childNodes; + var skip = false; + for (var k = 0; k < kids.length; k++) + { + if (kids[k].tagName == 'EMBED') + { + skip = true; + break; + } + } + if (skip) continue; + } + + if (in_excludeHidden && domLib_getComputedStyle(matches[j], 'visibility') == 'hidden') + { + continue; + } + + elements[elements.length] = matches[j]; + } + } + + return elements; +} + +// }}} +// {{{ domLib_getComputedStyle() + +function domLib_getComputedStyle(in_obj, in_property) +{ + if (domLib_isIE) + { + var humpBackProp = in_property.replace(/-(.)/, function (a, b) { return b.toUpperCase(); }); + return eval('in_obj.currentStyle.' + humpBackProp); + } + // getComputedStyle() is broken in konqueror, so let's go for the style object + else if (domLib_isKonq) + { + //var humpBackProp = in_property.replace(/-(.)/, function (a, b) { return b.toUpperCase(); }); + return eval('in_obj.style.' + in_property); + } + else + { + return document.defaultView.getComputedStyle(in_obj, null).getPropertyValue(in_property); + } +} + +// }}} +// {{{ makeTrue() + +function makeTrue() +{ + return true; +} + +// }}} +// {{{ makeFalse() + +function makeFalse() +{ + return false; +} + +// }}} diff --git a/usr/local/www/javascript/domTT/domTT.js b/usr/local/www/javascript/domTT/domTT.js new file mode 100644 index 000000000..fc9bf6ad0 --- /dev/null +++ b/usr/local/www/javascript/domTT/domTT.js @@ -0,0 +1,1132 @@ +/** $Id: domTT.js 2324 2006-06-12 07:06:39Z dallen $ */ +// {{{ license + +/* + * Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// }}} +// {{{ intro + +/** + * Title: DOM Tooltip Library + * Version: 0.7.3 + * + * Summary: + * Allows developers to add custom tooltips to the webpages. Tooltips are + * generated using the domTT_activate() function and customized by setting + * a handful of options. + * + * Maintainer: Dan Allen + * Contributors: + * Josh Gross + * Jason Rust + * + * License: Apache 2.0 + * However, if you use this library, you earn the position of official bug + * reporter :) Please post questions or problem reports to the newsgroup: + * + * http://groups-beta.google.com/group/dom-tooltip + * + * If you are doing this for commercial work, perhaps you could send me a few + * Starbucks Coffee gift dollars or PayPal bucks to encourage future + * developement (NOT REQUIRED). E-mail me for my snail mail address. + + * + * Homepage: http://www.mojavelinux.com/projects/domtooltip/ + * + * Newsgroup: http://groups-beta.google.com/group/dom-tooltip + * + * Freshmeat Project: http://freshmeat.net/projects/domtt/?topic_id=92 + * + * Updated: 2005/07/16 + * + * Supported Browsers: + * Mozilla (Gecko), IE 5.5+, IE on Mac, Safari, Konqueror, Opera 7 + * + * Usage: + * Please see the HOWTO documentation. +**/ + +// }}} +// {{{ settings (editable) + +// IE mouse events seem to be off by 2 pixels +var domTT_offsetX = (domLib_isIE ? -2 : 0); +var domTT_offsetY = (domLib_isIE ? 4 : 2); +var domTT_direction = 'southeast'; +var domTT_mouseHeight = domLib_isIE ? 13 : 19; +var domTT_closeLink = 'X'; +var domTT_closeAction = 'hide'; +var domTT_activateDelay = 500; +var domTT_maxWidth = false; +var domTT_styleClass = 'domTT'; +var domTT_fade = 'neither'; +var domTT_lifetime = 0; +var domTT_grid = 0; +var domTT_trailDelay = 200; +var domTT_useGlobalMousePosition = true; +var domTT_postponeActivation = false; +var domTT_tooltipIdPrefix = '[domTT]'; +var domTT_screenEdgeDetection = true; +var domTT_screenEdgePadding = 4; +var domTT_oneOnly = false; +var domTT_cloneNodes = false; +var domTT_detectCollisions = true; +var domTT_bannedTags = ['OPTION']; +var domTT_draggable = false; +if (typeof(domTT_dragEnabled) == 'undefined') +{ + domTT_dragEnabled = false; +} + +// }}} +// {{{ globals (DO NOT EDIT) + +var domTT_predefined = new domTT_Hash(); +// tooltips are keyed on both the tip id and the owner id, +// since events can originate on either object +var domTT_tooltips = new domTT_Hash(); +var domTT_lastOpened = 0; +var domTT_documentLoaded = false; +var domTT_mousePosition = null; + +// }}} +// {{{ document.onmousemove + +if (domLib_useLibrary && domTT_useGlobalMousePosition) +{ + document.onmousemove = function(in_event) + { + if (typeof(in_event) == 'undefined') { in_event = window.event; } + + domTT_mousePosition = domLib_getEventPosition(in_event); + if (domTT_dragEnabled && domTT_dragMouseDown) + { + domTT_dragUpdate(in_event); + } + }; +} + +// }}} +// {{{ domTT_activate() + +function domTT_activate(in_this, in_event) +{ + if (!domLib_useLibrary || (domTT_postponeActivation && !domTT_documentLoaded)) { return false; } + + // make sure in_event is set (for IE, some cases we have to use window.event) + if (typeof(in_event) == 'undefined') { in_event = window.event; } + + // don't allow tooltips on banned tags (such as OPTION) + if (in_event != null) { + var target = in_event.srcElement ? in_event.srcElement : in_event.target; + if (target != null && (',' + domTT_bannedTags.join(',') + ',').indexOf(',' + target.tagName + ',') != -1) + { + return false; + } + } + + var owner = document.body; + // we have an active event so get the owner + if (in_event != null && in_event.type.match(/key|mouse|click|contextmenu/i)) + { + // make sure we have nothing higher than the body element + if (in_this.nodeType && in_this.nodeType != document.DOCUMENT_NODE) + { + owner = in_this; + } + } + // non active event (make sure we were passed a string id) + else + { + if (typeof(in_this) != 'object' && !(owner = domTT_tooltips.get(in_this))) + { + // NOTE: two steps to avoid "flashing" in gecko + var embryo = document.createElement('div'); + owner = document.body.appendChild(embryo); + owner.style.display = 'none'; + owner.id = in_this; + } + } + + // make sure the owner has a unique id + if (!owner.id) + { + owner.id = '__autoId' + domLib_autoId++; + } + + // see if we should only be opening one tip at a time + // NOTE: this is not "perfect" yet since it really steps on any other + // tip working on fade out or delayed close, but it get's the job done + if (domTT_oneOnly && domTT_lastOpened) + { + domTT_deactivate(domTT_lastOpened); + } + + domTT_lastOpened = owner.id; + + var tooltip = domTT_tooltips.get(owner.id); + if (tooltip) + { + if (tooltip.get('eventType') != in_event.type) + { + if (tooltip.get('type') == 'greasy') + { + tooltip.set('closeAction', 'destroy'); + domTT_deactivate(owner.id); + } + else if (tooltip.get('status') != 'inactive') + { + return owner.id; + } + } + else + { + if (tooltip.get('status') == 'inactive') + { + tooltip.set('status', 'pending'); + tooltip.set('activateTimeout', domLib_setTimeout(domTT_runShow, tooltip.get('delay'), [owner.id, in_event])); + + return owner.id; + } + // either pending or active, let it be + else + { + return owner.id; + } + } + } + + // setup the default options hash + var options = new domTT_Hash( + 'caption', '', + 'content', '', + 'clearMouse', true, + 'closeAction', domTT_closeAction, + 'closeLink', domTT_closeLink, + 'delay', domTT_activateDelay, + 'direction', domTT_direction, + 'draggable', domTT_draggable, + 'fade', domTT_fade, + 'fadeMax', 100, + 'grid', domTT_grid, + 'id', domTT_tooltipIdPrefix + owner.id, + 'inframe', false, + 'lifetime', domTT_lifetime, + 'offsetX', domTT_offsetX, + 'offsetY', domTT_offsetY, + 'parent', document.body, + 'position', 'absolute', + 'styleClass', domTT_styleClass, + 'type', 'greasy', + 'trail', false, + 'lazy', false + ); + + // load in the options from the function call + for (var i = 2; i < arguments.length; i += 2) + { + // load in predefined + if (arguments[i] == 'predefined') + { + var predefinedOptions = domTT_predefined.get(arguments[i + 1]); + for (var j in predefinedOptions.elementData) + { + options.set(j, predefinedOptions.get(j)); + } + } + // set option + else + { + options.set(arguments[i], arguments[i + 1]); + } + } + + options.set('eventType', in_event != null ? in_event.type : null); + + // immediately set the status text if provided + if (options.has('statusText')) + { + try { window.status = options.get('statusText'); } catch(e) {} + } + + // if we didn't give content...assume we just wanted to change the status and return + if (!options.has('content') || options.get('content') == '' || options.get('content') == null) + { + if (typeof(owner.onmouseout) != 'function') + { + owner.onmouseout = function(in_event) { domTT_mouseout(this, in_event); }; + } + + return owner.id; + } + + options.set('owner', owner); + + domTT_create(options); + + // determine the show delay + options.set('delay', (in_event != null && in_event.type.match(/click|mousedown|contextmenu/i)) ? 0 : parseInt(options.get('delay'))); + domTT_tooltips.set(owner.id, options); + domTT_tooltips.set(options.get('id'), options); + options.set('status', 'pending'); + options.set('activateTimeout', domLib_setTimeout(domTT_runShow, options.get('delay'), [owner.id, in_event])); + + return owner.id; +} + +// }}} +// {{{ domTT_create() + +function domTT_create(in_options) +{ + var tipOwner = in_options.get('owner'); + var parentObj = in_options.get('parent'); + var parentDoc = parentObj.ownerDocument || parentObj.document; + + // create the tooltip and hide it + // NOTE: two steps to avoid "flashing" in gecko + var embryo = parentDoc.createElement('div'); + var tipObj = parentObj.appendChild(embryo); + tipObj.style.position = 'absolute'; + tipObj.style.left = '0px'; + tipObj.style.top = '0px'; + tipObj.style.visibility = 'hidden'; + tipObj.id = in_options.get('id'); + tipObj.className = in_options.get('styleClass'); + + var contentBlock; + var tableLayout = false; + + if (in_options.get('caption') || (in_options.get('type') == 'sticky' && in_options.get('caption') !== false)) + { + tableLayout = true; + // layout the tip with a hidden formatting table + var tipLayoutTable = tipObj.appendChild(parentDoc.createElement('table')); + tipLayoutTable.style.borderCollapse = 'collapse'; + if (domLib_isKHTML) + { + tipLayoutTable.cellSpacing = 0; + } + + var tipLayoutTbody = tipLayoutTable.appendChild(parentDoc.createElement('tbody')); + + var numCaptionCells = 0; + var captionRow = tipLayoutTbody.appendChild(parentDoc.createElement('tr')); + var captionCell = captionRow.appendChild(parentDoc.createElement('td')); + captionCell.style.padding = '0px'; + var caption = captionCell.appendChild(parentDoc.createElement('div')); + caption.className = 'caption'; + if (domLib_isIE50) + { + caption.style.height = '100%'; + } + + if (in_options.get('caption').nodeType) + { + caption.appendChild(domTT_cloneNodes ? in_options.get('caption').cloneNode(1) : in_options.get('caption')); + } + else + { + caption.innerHTML = in_options.get('caption'); + } + + if (in_options.get('type') == 'sticky') + { + var numCaptionCells = 2; + var closeLinkCell = captionRow.appendChild(parentDoc.createElement('td')); + closeLinkCell.style.padding = '0px'; + var closeLink = closeLinkCell.appendChild(parentDoc.createElement('div')); + closeLink.className = 'caption'; + if (domLib_isIE50) + { + closeLink.style.height = '100%'; + } + + closeLink.style.textAlign = 'right'; + closeLink.style.cursor = domLib_stylePointer; + // merge the styles of the two cells + closeLink.style.borderLeftWidth = caption.style.borderRightWidth = '0px'; + closeLink.style.paddingLeft = caption.style.paddingRight = '0px'; + closeLink.style.marginLeft = caption.style.marginRight = '0px'; + if (in_options.get('closeLink').nodeType) + { + closeLink.appendChild(in_options.get('closeLink').cloneNode(1)); + } + else + { + closeLink.innerHTML = in_options.get('closeLink'); + } + + closeLink.onclick = function() + { + domTT_deactivate(tipOwner.id); + }; + closeLink.onmousedown = function(in_event) + { + if (typeof(in_event) == 'undefined') { in_event = window.event; } + in_event.cancelBubble = true; + }; + // MacIE has to have a newline at the end and must be made with createTextNode() + if (domLib_isMacIE) + { + closeLinkCell.appendChild(parentDoc.createTextNode("\n")); + } + } + + // MacIE has to have a newline at the end and must be made with createTextNode() + if (domLib_isMacIE) + { + captionCell.appendChild(parentDoc.createTextNode("\n")); + } + + var contentRow = tipLayoutTbody.appendChild(parentDoc.createElement('tr')); + var contentCell = contentRow.appendChild(parentDoc.createElement('td')); + contentCell.style.padding = '0px'; + if (numCaptionCells) + { + if (domLib_isIE || domLib_isOpera) + { + contentCell.colSpan = numCaptionCells; + } + else + { + contentCell.setAttribute('colspan', numCaptionCells); + } + } + + contentBlock = contentCell.appendChild(parentDoc.createElement('div')); + if (domLib_isIE50) + { + contentBlock.style.height = '100%'; + } + } + else + { + contentBlock = tipObj.appendChild(parentDoc.createElement('div')); + } + + contentBlock.className = 'contents'; + + var content = in_options.get('content'); + // allow content has a function to return the actual content + if (typeof(content) == 'function') { + content = content(in_options.get('id')); + } + + if (content != null && content.nodeType) + { + contentBlock.appendChild(domTT_cloneNodes ? content.cloneNode(1) : content); + } + else + { + contentBlock.innerHTML = content; + } + + // adjust the width if specified + if (in_options.has('width')) + { + tipObj.style.width = parseInt(in_options.get('width')) + 'px'; + } + + // check if we are overridding the maxWidth + // if the browser supports maxWidth, the global setting will be ignored (assume stylesheet) + var maxWidth = domTT_maxWidth; + if (in_options.has('maxWidth')) + { + if ((maxWidth = in_options.get('maxWidth')) === false) + { + tipObj.style.maxWidth = domLib_styleNoMaxWidth; + } + else + { + maxWidth = parseInt(in_options.get('maxWidth')); + tipObj.style.maxWidth = maxWidth + 'px'; + } + } + + // HACK: fix lack of maxWidth in CSS for KHTML and IE + if (maxWidth !== false && (domLib_isIE || domLib_isKHTML) && tipObj.offsetWidth > maxWidth) + { + tipObj.style.width = maxWidth + 'px'; + } + + in_options.set('offsetWidth', tipObj.offsetWidth); + in_options.set('offsetHeight', tipObj.offsetHeight); + + // konqueror miscalcuates the width of the containing div when using the layout table based on the + // border size of the containing div + if (domLib_isKonq && tableLayout && !tipObj.style.width) + { + var left = document.defaultView.getComputedStyle(tipObj, '').getPropertyValue('border-left-width'); + var right = document.defaultView.getComputedStyle(tipObj, '').getPropertyValue('border-right-width'); + + left = left.substring(left.indexOf(':') + 2, left.indexOf(';')); + right = right.substring(right.indexOf(':') + 2, right.indexOf(';')); + var correction = 2 * ((left ? parseInt(left) : 0) + (right ? parseInt(right) : 0)); + tipObj.style.width = (tipObj.offsetWidth - correction) + 'px'; + } + + // if a width is not set on an absolutely positioned object, both IE and Opera + // will attempt to wrap when it spills outside of body...we cannot have that + if (domLib_isIE || domLib_isOpera) + { + if (!tipObj.style.width) + { + // HACK: the correction here is for a border + tipObj.style.width = (tipObj.offsetWidth - 2) + 'px'; + } + + // HACK: the correction here is for a border + tipObj.style.height = (tipObj.offsetHeight - 2) + 'px'; + } + + // store placement offsets from event position + var offsetX, offsetY; + + // tooltip floats + if (in_options.get('position') == 'absolute' && !(in_options.has('x') && in_options.has('y'))) + { + // determine the offset relative to the pointer + switch (in_options.get('direction')) + { + case 'northeast': + offsetX = in_options.get('offsetX'); + offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY'); + break; + case 'northwest': + offsetX = 0 - tipObj.offsetWidth - in_options.get('offsetX'); + offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY'); + break; + case 'north': + offsetX = 0 - parseInt(tipObj.offsetWidth/2); + offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY'); + break; + case 'southwest': + offsetX = 0 - tipObj.offsetWidth - in_options.get('offsetX'); + offsetY = in_options.get('offsetY'); + break; + case 'southeast': + offsetX = in_options.get('offsetX'); + offsetY = in_options.get('offsetY'); + break; + case 'south': + offsetX = 0 - parseInt(tipObj.offsetWidth/2); + offsetY = in_options.get('offsetY'); + break; + } + + // if we are in an iframe, get the offsets of the iframe in the parent document + if (in_options.get('inframe')) + { + var iframeObj = domLib_getIFrameReference(window); + if (iframeObj) + { + var frameOffsets = domLib_getOffsets(iframeObj); + offsetX += frameOffsets.get('left'); + offsetY += frameOffsets.get('top'); + } + } + } + // tooltip is fixed + else + { + offsetX = 0; + offsetY = 0; + in_options.set('trail', false); + } + + // set the direction-specific offsetX/Y + in_options.set('offsetX', offsetX); + in_options.set('offsetY', offsetY); + if (in_options.get('clearMouse') && in_options.get('direction').indexOf('south') != -1) + { + in_options.set('mouseOffset', domTT_mouseHeight); + } + else + { + in_options.set('mouseOffset', 0); + } + + if (domLib_canFade && typeof(Fadomatic) == 'function') + { + if (in_options.get('fade') != 'neither') + { + var fadeHandler = new Fadomatic(tipObj, 10, 0, 0, in_options.get('fadeMax')); + in_options.set('fadeHandler', fadeHandler); + } + } + else + { + in_options.set('fade', 'neither'); + } + + // setup mouse events + if (in_options.get('trail') && typeof(tipOwner.onmousemove) != 'function') + { + tipOwner.onmousemove = function(in_event) { domTT_mousemove(this, in_event); }; + } + + if (typeof(tipOwner.onmouseout) != 'function') + { + tipOwner.onmouseout = function(in_event) { domTT_mouseout(this, in_event); }; + } + + if (in_options.get('type') == 'sticky') + { + if (in_options.get('position') == 'absolute' && domTT_dragEnabled && in_options.get('draggable')) + { + if (domLib_isIE) + { + captionRow.onselectstart = function() { return false; }; + } + + // setup drag + captionRow.onmousedown = function(in_event) { domTT_dragStart(tipObj, in_event); }; + captionRow.onmousemove = function(in_event) { domTT_dragUpdate(in_event); }; + captionRow.onmouseup = function() { domTT_dragStop(); }; + } + } + else if (in_options.get('type') == 'velcro') + { + /* can use once we have deactivateDelay + tipObj.onmouseover = function(in_event) + { + if (typeof(in_event) == 'undefined') { in_event = window.event; } + var tooltip = domTT_tooltips.get(tipObj.id); + if (in_options.get('lifetime')) { + domLib_clearTimeout(in_options.get('lifetimeTimeout'); + } + }; + */ + tipObj.onmouseout = function(in_event) + { + if (typeof(in_event) == 'undefined') { in_event = window.event; } + if (!domLib_isDescendantOf(in_event[domLib_eventTo], tipObj, domTT_bannedTags)) { + domTT_deactivate(tipOwner.id); + } + }; + // NOTE: this might interfere with links in the tip + tipObj.onclick = function(in_event) + { + domTT_deactivate(tipOwner.id); + }; + } + + if (in_options.get('position') == 'relative') + { + tipObj.style.position = 'relative'; + } + + in_options.set('node', tipObj); + in_options.set('status', 'inactive'); +} + +// }}} +// {{{ domTT_show() + +// in_id is either tip id or the owner id +function domTT_show(in_id, in_event) +{ + + // should always find one since this call would be cancelled if tip was killed + var tooltip = domTT_tooltips.get(in_id); + var status = tooltip.get('status'); + var tipObj = tooltip.get('node'); + + if (tooltip.get('position') == 'absolute') + { + var mouseX, mouseY; + + if (tooltip.has('x') && tooltip.has('y')) + { + mouseX = tooltip.get('x'); + mouseY = tooltip.get('y'); + } + else if (!domTT_useGlobalMousePosition || domTT_mousePosition == null || status == 'active' || tooltip.get('delay') == 0) + { + var eventPosition = domLib_getEventPosition(in_event); + var eventX = eventPosition.get('x'); + var eventY = eventPosition.get('y'); + if (tooltip.get('inframe')) + { + eventX -= eventPosition.get('scrollX'); + eventY -= eventPosition.get('scrollY'); + } + + // only move tip along requested trail axis when updating position + if (status == 'active' && tooltip.get('trail') !== true) + { + var trail = tooltip.get('trail'); + if (trail == 'x') + { + mouseX = eventX; + mouseY = tooltip.get('mouseY'); + } + else if (trail == 'y') + { + mouseX = tooltip.get('mouseX'); + mouseY = eventY; + } + } + else + { + mouseX = eventX; + mouseY = eventY; + } + } + else + { + mouseX = domTT_mousePosition.get('x'); + mouseY = domTT_mousePosition.get('y'); + if (tooltip.get('inframe')) + { + mouseX -= domTT_mousePosition.get('scrollX'); + mouseY -= domTT_mousePosition.get('scrollY'); + } + } + + // we are using a grid for updates + if (tooltip.get('grid')) + { + // if this is not a mousemove event or it is a mousemove event on an active tip and + // the movement is bigger than the grid + if (in_event.type != 'mousemove' || (status == 'active' && (Math.abs(tooltip.get('lastX') - mouseX) > tooltip.get('grid') || Math.abs(tooltip.get('lastY') - mouseY) > tooltip.get('grid')))) + { + tooltip.set('lastX', mouseX); + tooltip.set('lastY', mouseY); + } + // did not satisfy the grid movement requirement + else + { + return false; + } + } + + // mouseX and mouseY store the last acknowleged mouse position, + // good for trailing on one axis + tooltip.set('mouseX', mouseX); + tooltip.set('mouseY', mouseY); + + var coordinates; + if (domTT_screenEdgeDetection) + { + coordinates = domTT_correctEdgeBleed( + tooltip.get('offsetWidth'), + tooltip.get('offsetHeight'), + mouseX, + mouseY, + tooltip.get('offsetX'), + tooltip.get('offsetY'), + tooltip.get('mouseOffset'), + tooltip.get('inframe') ? window.parent : window + ); + } + else + { + coordinates = { + 'x' : mouseX + tooltip.get('offsetX'), + 'y' : mouseY + tooltip.get('offsetY') + tooltip.get('mouseOffset') + }; + } + + // update the position + tipObj.style.left = coordinates.x + 'px'; + tipObj.style.top = coordinates.y + 'px'; + + // increase the tip zIndex so it goes over previously shown tips + tipObj.style.zIndex = domLib_zIndex++; + } + + // if tip is not active, active it now and check for a fade in + if (status == 'pending') + { + // unhide the tooltip + tooltip.set('status', 'active'); + tipObj.style.display = ''; + tipObj.style.visibility = 'visible'; + + var fade = tooltip.get('fade'); + if (fade != 'neither') + { + var fadeHandler = tooltip.get('fadeHandler'); + if (fade == 'out' || fade == 'both') + { + fadeHandler.haltFade(); + if (fade == 'out') + { + fadeHandler.halt(); + } + } + + if (fade == 'in' || fade == 'both') + { + fadeHandler.fadeIn(); + } + } + + if (tooltip.get('type') == 'greasy' && tooltip.get('lifetime') != 0) + { + tooltip.set('lifetimeTimeout', domLib_setTimeout(domTT_runDeactivate, tooltip.get('lifetime'), [tipObj.id])); + } + } + + if (tooltip.get('position') == 'absolute' && domTT_detectCollisions) + { + // utilize original collision element cache + domLib_detectCollisions(tipObj, false, true); + } +} + +// }}} +// {{{ domTT_close() + +// in_handle can either be an child object of the tip, the tip id or the owner id +function domTT_close(in_handle) +{ + var id; + if (typeof(in_handle) == 'object' && in_handle.nodeType) + { + var obj = in_handle; + while (!obj.id || !domTT_tooltips.get(obj.id)) + { + obj = obj.parentNode; + + if (obj.nodeType != document.ELEMENT_NODE) { return; } + } + + id = obj.id; + } + else + { + id = in_handle; + } + + domTT_deactivate(id); +} + +// }}} +// {{{ domTT_closeAll() + +// run through the tooltips and close them all +function domTT_closeAll() +{ + // NOTE: this will iterate 2x # of tooltips + for (var id in domTT_tooltips.elementData) { + domTT_close(id); + } +} + +// }}} +// {{{ domTT_deactivate() + +// in_id is either the tip id or the owner id +function domTT_deactivate(in_id) +{ + var tooltip = domTT_tooltips.get(in_id); + if (tooltip) + { + var status = tooltip.get('status'); + if (status == 'pending') + { + // cancel the creation of this tip if it is still pending + domLib_clearTimeout(tooltip.get('activateTimeout')); + tooltip.set('status', 'inactive'); + } + else if (status == 'active') + { + if (tooltip.get('lifetime')) + { + domLib_clearTimeout(tooltip.get('lifetimeTimeout')); + } + + var tipObj = tooltip.get('node'); + if (tooltip.get('closeAction') == 'hide') + { + var fade = tooltip.get('fade'); + if (fade != 'neither') + { + var fadeHandler = tooltip.get('fadeHandler'); + if (fade == 'out' || fade == 'both') + { + fadeHandler.fadeOut(); + } + else + { + fadeHandler.hide(); + } + } + else + { + tipObj.style.display = 'none'; + } + } + else + { + tooltip.get('parent').removeChild(tipObj); + domTT_tooltips.remove(tooltip.get('owner').id); + domTT_tooltips.remove(tooltip.get('id')); + } + + tooltip.set('status', 'inactive'); + if (domTT_detectCollisions) { + // unhide all of the selects that are owned by this object + // utilize original collision element cache + domLib_detectCollisions(tipObj, true, true); + } + } + } +} + +// }}} +// {{{ domTT_mouseout() + +function domTT_mouseout(in_owner, in_event) +{ + if (!domLib_useLibrary) { return false; } + + if (typeof(in_event) == 'undefined') { in_event = window.event; } + + var toChild = domLib_isDescendantOf(in_event[domLib_eventTo], in_owner, domTT_bannedTags); + var tooltip = domTT_tooltips.get(in_owner.id); + if (tooltip && (tooltip.get('type') == 'greasy' || tooltip.get('status') != 'active')) + { + // deactivate tip if exists and we moved away from the owner + if (!toChild) + { + domTT_deactivate(in_owner.id); + try { window.status = window.defaultStatus; } catch(e) {} + } + } + else if (!toChild) + { + try { window.status = window.defaultStatus; } catch(e) {} + } +} + +// }}} +// {{{ domTT_mousemove() + +function domTT_mousemove(in_owner, in_event) +{ + if (!domLib_useLibrary) { return false; } + + if (typeof(in_event) == 'undefined') { in_event = window.event; } + + var tooltip = domTT_tooltips.get(in_owner.id); + if (tooltip && tooltip.get('trail') && tooltip.get('status') == 'active') + { + // see if we are trailing lazy + if (tooltip.get('lazy')) + { + domLib_setTimeout(domTT_runShow, domTT_trailDelay, [in_owner.id, in_event]); + } + else + { + domTT_show(in_owner.id, in_event); + } + } +} + +// }}} +// {{{ domTT_addPredefined() + +function domTT_addPredefined(in_id) +{ + var options = new domTT_Hash(); + for (var i = 1; i < arguments.length; i += 2) + { + options.set(arguments[i], arguments[i + 1]); + } + + domTT_predefined.set(in_id, options); +} + +// }}} +// {{{ domTT_correctEdgeBleed() + +function domTT_correctEdgeBleed(in_width, in_height, in_x, in_y, in_offsetX, in_offsetY, in_mouseOffset, in_window) +{ + var win, doc; + var bleedRight, bleedBottom; + var pageHeight, pageWidth, pageYOffset, pageXOffset; + + var x = in_x + in_offsetX; + var y = in_y + in_offsetY + in_mouseOffset; + + win = (typeof(in_window) == 'undefined' ? window : in_window); + + // Gecko and IE swaps values of clientHeight, clientWidth properties when + // in standards compliance mode from documentElement to document.body + doc = ((domLib_standardsMode && (domLib_isIE || domLib_isGecko)) ? win.document.documentElement : win.document.body); + + // for IE in compliance mode + if (domLib_isIE) + { + pageHeight = doc.clientHeight; + pageWidth = doc.clientWidth; + pageYOffset = doc.scrollTop; + pageXOffset = doc.scrollLeft; + } + else + { + pageHeight = doc.clientHeight; + pageWidth = doc.clientWidth; + + if (domLib_isKHTML) + { + pageHeight = win.innerHeight; + } + + pageYOffset = win.pageYOffset; + pageXOffset = win.pageXOffset; + } + + // we are bleeding off the right, move tip over to stay on page + // logic: take x position, add width and subtract from effective page width + if ((bleedRight = (x - pageXOffset) + in_width - (pageWidth - domTT_screenEdgePadding)) > 0) + { + x -= bleedRight; + } + + // we are bleeding to the left, move tip over to stay on page + // if tip doesn't fit, we will go back to bleeding off the right + // logic: take x position and check if less than edge padding + if ((x - pageXOffset) < domTT_screenEdgePadding) + { + x = domTT_screenEdgePadding + pageXOffset; + } + + // if we are bleeding off the bottom, flip to north + // logic: take y position, add height and subtract from effective page height + if ((bleedBottom = (y - pageYOffset) + in_height - (pageHeight - domTT_screenEdgePadding)) > 0) + { + y = in_y - in_height - in_offsetY; + } + + // if we are bleeding off the top, flip to south + // if tip doesn't fit, we will go back to bleeding off the bottom + // logic: take y position and check if less than edge padding + if ((y - pageYOffset) < domTT_screenEdgePadding) + { + y = in_y + domTT_mouseHeight + in_offsetY; + } + + return {'x' : x, 'y' : y}; +} + +// }}} +// {{{ domTT_isActive() + +// in_id is either the tip id or the owner id +function domTT_isActive(in_id) +{ + var tooltip = domTT_tooltips.get(in_id); + if (!tooltip || tooltip.get('status') != 'active') + { + return false; + } + else + { + return true; + } +} + +// }}} +// {{{ domTT_runXXX() + +// All of these domMenu_runXXX() methods are used by the event handling sections to +// avoid the circular memory leaks caused by inner functions +function domTT_runDeactivate(args) { domTT_deactivate(args[0]); } +function domTT_runShow(args) { domTT_show(args[0], args[1]); } + +// }}} +// {{{ domTT_replaceTitles() + +function domTT_replaceTitles(in_decorator) +{ + var elements = domLib_getElementsByClass('tooltip'); + for (var i = 0; i < elements.length; i++) + { + if (elements[i].title) + { + var content; + if (typeof(in_decorator) == 'function') + { + content = in_decorator(elements[i]); + } + else + { + content = elements[i].title; + } + + content = content.replace(new RegExp('\'', 'g'), '\\\''); + elements[i].onmouseover = new Function('in_event', "domTT_activate(this, in_event, 'content', '" + content + "')"); + elements[i].title = ''; + } + } +} + +// }}} +// {{{ domTT_update() + +// Allow authors to update the contents of existing tips using the DOM +// Unfortunately, the tip must already exist, or else no work is done. +// TODO: make getting at content or caption cleaner +function domTT_update(handle, content, type) +{ + // type defaults to 'content', can also be 'caption' + if (typeof(type) == 'undefined') + { + type = 'content'; + } + + var tip = domTT_tooltips.get(handle); + if (!tip) + { + return; + } + + var tipObj = tip.get('node'); + var updateNode; + if (type == 'content') + { + //
                            ... + updateNode = tipObj.firstChild; + if (updateNode.className != 'contents') + { + // ...\s*$/g,rb={option:[1,""],legend:[1,"
                            ","
                            "],area:[1,"",""],param:[1,"",""],thead:[1,"
                            ... + updateNode = updateNode.firstChild.firstChild.nextSibling.firstChild.firstChild; + } + } + else + { + updateNode = tipObj.firstChild; + if (updateNode.className == 'contents') + { + // missing caption + return; + } + + // ' + data[i] + ''); + } + } + } else { + for (var i = rows.length - 1; i >= move; i--) { + jQuery(rows[i]).html(jQuery(rows[i - move]).html()); + } + + var tbody = jQuery('#filter-log-entries'); + for (var i = 0; i < data.length; i++) { + var rowIndex = move - 1 - i; + if (rowIndex >= 0) { + jQuery(rows[rowIndex]).html(data[i]); + } else { + jQuery(tbody).prepend('' + data[i] + ''); + } + } + } + + // Much easier to go through each of the rows once they've all be added. + rows = jQuery('#filter-log-entries>tr'); + for (var i = 0; i < rows.length; i++) { + rows[i].className = i % 2 == 0 ? 'listMRodd' : 'listMReven'; + } +} + +function toggle_pause() { + if(isPaused) { + isPaused = false; + fetch_new_rules(); + } else { + isPaused = true; + } +} +/* start local AJAX engine */ +if (typeof updateDelay != 'undefined') { + timer = setInterval('fetch_new_rules()', updateDelay); +} + +function toggleListDescriptions(){ + var ss = document.styleSheets; + for (var i=0; i + * v1.0 + * 04.11.2008, 8:25 PM ~ + * v1.0a + * 03.27.2008, 5:44 AM ~ 04.01.2008, 21:32 PM + * Azer Koçulu + */ + +var firebug = { + env:{ "cache":{}, "ctmp":[], "dIndex":"console", "init":false, "ml":false, "objCn":[] }, + init:function(){ + firebug.el = {}; // elements + firebug.el.content = {}; + with(firebug){ + + document.documentElement.childNodes[0].appendChild( + new pi.element("link").attribute.set("rel","stylesheet").attribute.set("href","http://firebuglite.appspot.com/firebug-lite.css").environment.getElement() + ); + + /* + * main interface + */ + el.main = new pi.element("DIV").attribute.set("id","Firebug").environment.addStyle({ "width":pi.util.GetWindowSize().width+"px" }).insert(document.body); + el.header = new pi.element("DIV").attribute.addClass("Header").insert(el.main); + el.left = {}; + el.left.container = new pi.element("DIV").attribute.addClass("Left").insert(el.main); + el.right = {}; + el.right.container = new pi.element("DIV").attribute.addClass("Right").insert(el.main); + el.main.child.add(new pi.element("DIV").environment.addStyle({ "clear":"both" })); + + /* + * buttons + */ + el.button = {}; + el.button.container = new pi.element("DIV").attribute.addClass("ButtonContainer").insert(el.header); + el.button.logo = new pi.element("A").attribute.set("title","Firebug Lite").attribute.set("target","_blank").attribute.set("href","http://getfirebug.com/lite.html").update(" ").attribute.addClass("Button Logo").insert(el.button.container); + el.button.inspect = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.inspector.toggle).update("Inspect").insert(el.button.container); + el.button.maximize = new pi.element("A").attribute.addClass("Button Maximize").event.addListener("click",win.maximize).insert(el.button.container); + el.button.minimize = new pi.element("A").attribute.addClass("Button Minimize").event.addListener("click",win.minimize).insert(el.button.container); + el.button.close = new pi.element("A").attribute.addClass("Button Close").event.addListener("click",win.close).insert(el.button.container); + + if(pi.env.ie||pi.env.webkit){ + el.button.container.environment.addStyle({ "paddingTop":"12px" }); + } + + /* + * navigation + */ + el.nav = {}; + el.nav.container = new pi.element("DIV").attribute.addClass("Nav").insert(el.left.container); + el.nav.console = new pi.element("A").attribute.addClass("Tab Selected").event.addListener("click",d.navigate.curry(window,"console")).update("Console").insert(el.nav.container); + el.nav.html = new pi.element("A").attribute.addClass("Tab").update("HTML").event.addListener("click",d.navigate.curry(window,"html")).insert(el.nav.container); + el.nav.css = new pi.element("A").attribute.addClass("Tab").update("CSS").event.addListener("click",d.navigate.curry(window,"css")).insert(el.nav.container); + el.nav.scripts = new pi.element("A").attribute.addClass("Tab").update("Script").event.addListener("click",d.navigate.curry(window,"scripts")).insert(el.nav.container); + el.nav.dom = new pi.element("A").attribute.addClass("Tab").update("DOM").event.addListener("click",d.navigate.curry(window,"dom")).insert(el.nav.container); + el.nav.xhr = new pi.element("A").attribute.addClass("Tab").update("XHR").event.addListener("click",d.navigate.curry(window,"xhr")).insert(el.nav.container); + + /* + * inspector + */ + + el.borderInspector = new pi.element("DIV").attribute.set("id","FirebugBorderInspector").event.addListener("click",listen.inspector).insert(document.body); + el.bgInspector = new pi.element("DIV").attribute.set("id","FirebugBGInspector").insert(document.body); + + /* + * console + */ + el.left.console = {}; + el.left.console.container = new pi.element("DIV").attribute.addClass("Console").insert(el.left.container); + el.left.console.mlButton = new pi.element("A").attribute.addClass("MLButton").event.addListener("click",d.console.toggleML).insert(el.left.console.container); + el.left.console.monitor = new pi.element("DIV").insert( + new pi.element("DIV").attribute.addClass("Monitor").insert(el.left.console.container) + ); + el.left.console.container.child.add( + new pi.element("DIV").attribute.addClass("InputArrow").update(">>>") + ); + el.left.console.input = new pi.element("INPUT").attribute.set("type","text").attribute.addClass("Input").event.addListener("keydown",listen.consoleTextbox).insert( + new pi.element("DIV").attribute.addClass("InputContainer").insert(el.left.console.container) + ); + + el.right.console = {}; + el.right.console.container = new pi.element("DIV").attribute.addClass("Console Container").insert(el.right.container); + el.right.console.mlButton = new pi.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.console.container); + el.right.console.input = new pi.element("TEXTAREA").attribute.addClass("Input").insert(el.right.console.container); + el.right.console.run = new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.runMultiline).update("Run").insert(el.right.console.container); + + el.right.console.clear = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.right.console.input)).update("Clear").insert(el.right.console.container); + + el.button.console = {}; + el.button.console.container = new pi.element("DIV").attribute.addClass("ButtonSet").insert(el.button.container); + el.button.console.clear = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.left.console.monitor)).update("Clear").insert(el.button.console.container); + + /* + * html + */ + + el.left.html = {}; + el.left.html.container = new pi.element("DIV").attribute.addClass("HTML").insert(el.left.container); + + el.right.html = {}; + el.right.html.container = new pi.element("DIV").attribute.addClass("HTML Container").insert(el.right.container); + + el.right.html.nav = {}; + el.right.html.nav.container = new pi.element("DIV").attribute.addClass("Nav").insert(el.right.html.container); + el.right.html.nav.computedStyle = new pi.element("A").attribute.addClass("Tab Selected").event.addListener("click",d.html.navigate.curry(firebug,"computedStyle")).update("Computed Style").insert(el.right.html.nav.container); + if(!pi.env.ie6) + el.right.html.nav.dom = new pi.element("A").attribute.addClass("Tab").event.addListener("click",d.html.navigate.curry(firebug,"dom")).update("DOM").insert(el.right.html.nav.container); + + el.right.html.content = new pi.element("DIV").attribute.addClass("Content").insert(el.right.html.container); + + el.button.html = {}; + el.button.html.container = new pi.element("DIV").attribute.addClass("ButtonSet HTML").insert(el.button.container); + + /* + * css + */ + + el.left.css = {}; + el.left.css.container = new pi.element("DIV").attribute.addClass("CSS").insert(el.left.container); + + el.right.css = {}; + el.right.css.container = new pi.element("DIV").attribute.addClass("CSS Container").insert(el.right.container); + + el.right.css.nav = {}; + el.right.css.nav.container = new pi.element("DIV").attribute.addClass("Nav").insert(el.right.css.container); + el.right.css.nav.runCSS = new pi.element("A").attribute.addClass("Tab Selected").update("Run CSS").insert(el.right.css.nav.container); + + el.right.css.mlButton = new pi.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.css.container); + el.right.css.input = new pi.element("TEXTAREA").attribute.addClass("Input").insert(el.right.css.container); + el.right.css.run = new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.runCSS).update("Run").insert(el.right.css.container); + el.right.css.clear = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.right.css.input)).update("Clear").insert(el.right.css.container); + + el.button.css = {}; + el.button.css.container = new pi.element("DIV").attribute.addClass("ButtonSet CSS").insert(el.button.container); + el.button.css.selectbox = new pi.element("SELECT").event.addListener("change",listen.cssSelectbox).insert(el.button.css.container); + + /* + * scripts + */ + + el.left.scripts = {}; + el.left.scripts.container = new pi.element("DIV").attribute.addClass("Scripts").insert(el.left.container); + + el.right.scripts = {}; + el.right.scripts.container = new pi.element("DIV").attribute.addClass("Scripts Container").insert(el.right.container); + + el.button.scripts = {}; + el.button.scripts.container = new pi.element("DIV").attribute.addClass("ButtonSet Scripts").insert(el.button.container); + el.button.scripts.selectbox = new pi.element("SELECT").event.addListener("change",listen.scriptsSelectbox).insert(el.button.scripts.container); + el.button.scripts.lineNumbers = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.scripts.toggleLineNumbers).update("Show Line Numbers").insert(el.button.scripts.container); + + /* + * dom + */ + + el.left.dom = {}; + el.left.dom.container = new pi.element("DIV").attribute.addClass("DOM").insert(el.left.container); + + el.right.dom = {}; + el.right.dom.container = new pi.element("DIV").attribute.addClass("DOM Container").insert(el.right.container); + + el.button.dom = {}; + el.button.dom.container = new pi.element("DIV").attribute.addClass("ButtonSet DOM").insert(el.button.container); + el.button.dom.label = new pi.element("LABEL").update("Object Path:").insert(el.button.dom.container); + el.button.dom.textbox = new pi.element("INPUT").event.addListener("keydown",listen.domTextbox).update("window").insert(el.button.dom.container); + + /* + * str + */ + + el.left.str = {}; + el.left.str.container = new pi.element("DIV").attribute.addClass("STR").insert(el.left.container); + + el.right.str = {}; + el.right.str.container = new pi.element("DIV").attribute.addClass("STR").insert(el.left.container); + + el.button.str = {}; + el.button.str.container = new pi.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container); + el.button.str.watch = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.navigate.curry(window,"xhr")).update("Back").insert(el.button.str.container); + + /* + * xhr + */ + + el.left.xhr = {}; + el.left.xhr.container = new pi.element("DIV").attribute.addClass("XHR").insert(el.left.container); + + el.right.xhr = {}; + el.right.xhr.container = new pi.element("DIV").attribute.addClass("XHR").insert(el.left.container); + + + el.button.xhr = {}; + el.button.xhr.container = new pi.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container); + el.button.xhr.label = new pi.element("LABEL").update("XHR Path:").insert(el.button.xhr.container); + el.button.xhr.textbox = new pi.element("INPUT").event.addListener("keydown",listen.xhrTextbox).insert(el.button.xhr.container); + el.button.xhr.watch = new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.addXhrObject).update("Watch").insert(el.button.xhr.container); + + // fix ie6 a:hover bug + if(pi.env.ie6) + { + var buttons = [ + el.button.inspect, + el.button.close, + el.button.inspect, + el.button.console.clear, + el.right.console.run, + el.right.console.clear, + el.right.css.run, + el.right.css.clear + ]; + for(var i=0; i>> console.dir("+_value+")"); + d.dom.open(_value,d.console.addLine()); + } + }, + addLine:function(){ + with (firebug) { + return new pi.element("DIV").attribute.addClass("Row").insert(el.left.console.monitor); + } + }, + openObject:function(_index){ + with (firebug) { + d.dom.open(env.objCn[_index], el.left.dom.container, pi.env.ie); + d.navigate("dom"); + } + }, + historyIndex:0, + history:[], + log:function(_values){ + with (firebug) { + if(env.init==false){ + env.ctmp.push(arguments); + return; + } + + var value = ""; + for(var i=0; i0?" ":"")+d.highlight(arguments[i],false,false,true); + } + + d.console.addLine().update(value); + d.console.scroll(); + + } + }, + print: function(_cmd,_text){ + with (firebug){ + d.console.addLine().attribute.addClass("Arrow").update(">>> "+_cmd); + d.console.addLine().update(d.highlight(_text,false,false,true)); + d.console.scroll(); + d.console.historyIndex = d.console.history.push(_cmd); + } + }, + run:function(cmd){ + with(firebug){ + if(cmd.length==0)return; + el.left.console.input.environment.getElement().value = ""; + try { + var result = eval.call(window,cmd); + d.console.print(cmd,result); + } catch(e){ + d.console.addLine().attribute.addClass("Arrow").update(">>> "+cmd); + if(!pi.env.ff){ + d.console.scroll(); + return d.console.addLine().attribute.addClass("Error").update("Error: "+(e.description||e),true); + } + if(e.fileName==null){ + d.console.addLine().attribute.addClass("Error").update("Error: "+e.message,true); + } + var fileName = e.fileName.split("\/").getLastItem(); + d.console.addLine().attribute.addClass("Error").update("Error: "+e.message+" ("+fileName+","+e.lineNumber+")",true); + d.console.scroll(); + } + d.console.scroll(); + } + }, + scroll:function(){ + with(firebug){ + el.left.console.monitor.environment.getElement().parentNode.scrollTop = Math.abs(el.left.console.monitor.environment.getSize().offsetHeight-200); + } + }, + toggleML:function(){ + with(firebug){ + var open = !env.ml; + env.ml = !env.ml; + d.navigateRightColumn("console",open); + el[open?"left":"right"].console.mlButton.environment.addStyle({ display:"none" }); + el[!open?"left":"right"].console.mlButton.environment.addStyle({ display:"block" }); + el.left.console.monitor.environment.addStyle({ "height":(open?233:210)+"px" }); + el.left.console.mlButton.attribute[(open?"add":"remove")+"Class"]("CloseML"); + } + } + }, + css:{ + index:-1, + open:function(_index){ + with (firebug) { + var item = document.styleSheets[_index]; + var uri = item.href; + if(uri.indexOf("http:\/\/")>-1&&getDomain(uri)!=document.domain){ + el.left.css.container.update("Access to restricted URI denied"); + return; + } + var rules = item[pi.env.ie ? "rules" : "cssRules"]; + var str = ""; + for (var i=0; i"; + for(var i=0; i<_css.length; i++){ + var item = _css[i]; + str += "
                            "+item.replace(/(.+\:)(.+)/,"$1$2;")+"
                            "; + } + str+="
                            }
                            "; + return str; + } + }, + refresh:function(){ + with(firebug){ + el.button.css.selectbox.update(""); + var collection = document.styleSheets; + for(var i=0; i-1){ + // NULL + if(_value==null){ + return "null"; + } + + // BOOLEAN & NUMBER + if (["boolean", "number"].indexOf(typeof _value) > -1) { + return "" + _value + ""; + } + + // FUNCTION + if(typeof _value=="function"){ + return "function()"; + } + + // STRING + return "\""+( !_inObject&&!_inArray?_value : _value.substring(0,35) ).replace(/\n/g,"\\n").replace(/\s/g," ").replace(/>/g,">").replace(/"; + } + // element + else if(isElement){ + if(_value.nodeType==3)return d.highlight(_value.nodeValue); + + if(_inArray||_inObject){ + var result = ""+_value.nodeName.toLowerCase(); + if(_value.getAttribute&&_value.getAttribute("id"))result += "#"+_value.getAttribute("id")+""; + var elClass = _value.getAttribute?_value.getAttribute(pi.env.ie?"className":"class"):""; + if(elClass)result += "."+elClass.split(" ")[0]+""; + return result+""; + } + + var result = "<"+_value.nodeName.toLowerCase()+""; + if(_value.attributes) + for(var i=0; i<_value.attributes.length; i++){ + var item = _value.attributes[i]; + if(pi.env.ie&&Boolean(item.nodeValue)==false)continue; + result += " "+item.nodeName+"=\""+item.nodeValue+"\""; + } + result += ">"; + return result; + } + // array & object + else if(isArray||["object","array"].indexOf(typeof _value)>-1){ + var result = ""; + if(isArray||_value instanceof Array){ + if(_inObject)return "["+_value.length+"]"; + result += "[ "; + + for(var i=0; i<_value.length; i++){ + if((_inObject||_inArray)&&pi.env.ie&&i>3)break; + result += (i > 0 ? ", " : "") + d.highlight(_value[i], false, true, true); + } + result += " ]"; + return result; + } + if(_inObject)return "Object"; + result += "Object"; + var i=0; + for(var key in _value){ + var value = _value[key]; + if((_inObject||_inArray)&&pi.env.ie&&i>3) + break; + result += " "+key+"="+d.highlight(value,true); + i++; + }; + result += ""; + return result; + } else { + if(_inObject) + return ""+_value+""; + return _value; + } + + } + }, + html:{ + nIndex:"computedStyle", + current:null, + highlight:function(_element,_clear,_event){ + with(firebug){ + if(_clear){ + el.bgInspector.environment.addStyle({ "display":"none" }); + return; + } + d.inspector.inspect(_element,true); + } + }, + inspect:function(_element){ + var el = _element, map = [], parent = _element; + while(parent){ + map.push(parent); + if(parent==document.body)break; + parent = parent.parentNode; + } + map = map.reverse(); + with(firebug){ + d.inspector.toggle(); + var parentLayer = el.left.html.container.child.get()[1].childNodes[1].pi; + for(var t=0; map[t];){ + if(t==map.length-1){ + + var link = parentLayer.environment.getElement().previousSibling.pi; + link.attribute.addClass("Selected"); + + if(d.html.current)d.html.current[1].attribute.removeClass("Selected"); + + d.html.current = [_element,link]; + + return t; + } + parentLayer = d.html.openHtmlTree(map[t],parentLayer,map[t+1]); + t++; + } + } + }, + navigate:function(_index,_element){ + with(firebug){ + el.right.html.nav[d.html.nIndex].attribute.removeClass("Selected"); + el.right.html.nav[_index].attribute.addClass("Selected"); + d.html.nIndex = _index; + d.html.openProperties(); + + } + }, + openHtmlTree:function(_element,_parent,_returnParentElementByElement,_event){ + with(firebug){ + var element = _element || document.documentElement, + parent = _parent || el.left.html.container, + returnParentEl = _returnParentElementByElement || null, + returnParentVal = null; + + if(parent!=el.left.html.container){ + var nodeLink = parent.environment.getParent().pi.child.get()[0].pi; + if(d.html.current)d.html.current[1].attribute.removeClass("Selected"); + nodeLink.attribute.addClass("Selected"); + + d.html.current = [_element,nodeLink]; + d.html.openProperties(); + } + + if(element.childNodes&&(element.childNodes.length==0||(element.childNodes.length==1&&element.childNodes[0].nodeType==3)))return; + parent.clean(); + + if(parent.opened&&Boolean(_returnParentElementByElement)==false){ + parent.opened = false; + parent.environment.getParent().pi.child.get()[0].pi.attribute.removeClass("Open"); + return; + } + if (parent != el.left.html.container) { + parent.environment.getParent().pi.child.get()[0].pi.attribute.addClass("Open"); + parent.opened = true; + + } + + for(var i=0; i")); + continue; + } + else if(item.childNodes&&item.childNodes.length==0)continue; + link.attribute.addClass("ParentLink"); + + } + return returnParentVal; + } + }, + openProperties:function(){ + with(firebug){ + + var index = d.html.nIndex; + var node = d.html.current[0]; + d.clean(el.right.html.content); + var str = ""; + switch(index){ + case "computedStyle": + var property = ["opacity","filter","azimuth","background","backgroundAttachment","backgroundColor","backgroundImage","backgroundPosition","backgroundRepeat","border","borderCollapse","borderColor","borderSpacing","borderStyle","borderTop","borderRight","borderBottom","borderLeft","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderWidth","bottom","captionSide","clear","clip","color","content","counterIncrement","counterReset","cue","cueAfter","cueBefore","cursor","direction","display","elevation","emptyCells","cssFloat","font","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","height","left","letterSpacing","lineHeight","listStyle","listStyleImage","listStylePosition","listStyleType","margin","marginTop","marginRight","marginBottom","marginLeft","markerOffset","marks","maxHeight","maxWidth","minHeight","minWidth","orphans","outline","outlineColor","outlineStyle","outlineWidth","overflow","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","page","pageBreakAfter","pageBreakBefore","pageBreakInside","pause","pauseAfter","pauseBefore","pitch","pitchRange","playDuring","position","quotes","richness","right","size","speak","speakHeader","speakNumeral","speakPunctuation","speechRate","stress","tableLayout","textAlign","textDecoration","textIndent","textShadow","textTransform","top","unicodeBidi","verticalAlign","visibility","voiceFamily","volume","whiteSpace","widows","width","wordSpacing","zIndex"].sort(); + var view = document.defaultView?document.defaultView.getComputedStyle(node,null):node.currentStyle; + for(var i=0; i
                            "+d.highlight(view[item])+"
                            "; + } + el.right.html.content.update(str); + break; + case "dom": + d.dom.open(node,el.right.html.content,pi.env.ie); + break; + } + } + } + }, + inspector:{ + enabled:false, + el:null, + inspect:function(_element,_bgInspector){ + var el = _element, top = el.offsetTop, left = el.offsetLeft, parent = _element.offsetParent; + while(Boolean(parent)&&parent!=document.firstChild){ + top += parent.offsetTop; + left += parent.offsetLeft; + parent = parent.offsetParent; + if(parent==document.body)break; + }; + + with(firebug){ + el[_bgInspector?"bgInspector":"borderInspector"].environment.addStyle({ + "width":_element.offsetWidth+"px", "height":_element.offsetHeight+"px", + "top":top-(_bgInspector?0:2)+"px", "left":left-(_bgInspector?0:2)+"px", + "display":"block" + }); + + if(!_bgInspector){ + d.inspector.el = _element; + } + }; + }, + toggle:function(){ + with (firebug) { + d.inspector.enabled = !d.inspector.enabled; + el.button.inspect.attribute[(d.inspector.enabled ? "add" : "remove") + "Class"]("Enabled"); + if(d.inspector.enabled==false){ + el.borderInspector.environment.addStyle({ "display":"none" }); + d.inspector.el = null; + } else if(pi.env.dIndex!="html") { + d.navigate("html"); + } + } + } + }, + scripts:{ + index:-1, + lineNumbers:false, + open:function(_index){ + with(firebug){ + d.scripts.index = _index; + el.left.scripts.container.update(""); + var script = document.getElementsByTagName("script")[_index],uri = script.src||document.location.href,source; + + if(uri.indexOf("http:\/\/")>-1&&getDomain(uri)!=document.domain){ + el.left.scripts.container.update("Access to restricted URI denied"); + return; + } + + if(uri!=document.location.href){ + source = env.cache[uri]||pi.xhr.get(uri).responseText; + env.cache[uri] = source; + } else + source = script.innerHTML; + source = source.replace(/\n|\t|<|>/g,function(_ch){ + return ({"<":"<",">":">","\t":"        ","\n":"
                            "})[_ch]; + }); + + if (!d.scripts.lineNumbers) + el.left.scripts.container.child.add( + new pi.element("DIV").attribute.addClass("CodeContainer").update(source) + ); + else { + source = source.split("
                            "); + for (var i = 0; i < source.length; i++) { + el.left.scripts.container.child.add(new pi.element("DIV").child.add(new pi.element("DIV").attribute.addClass("LineNumber").update(i + 1), new pi.element("DIV").attribute.addClass("Code").update(" " + source[i]), new pi.element("DIV").environment.addStyle({ + "clear": "both" + }))); + }; + }; + } + }, + toggleLineNumbers:function(){ + with(firebug){ + d.scripts.lineNumbers = !d.scripts.lineNumbers; + el.button.scripts.lineNumbers.attribute[(d.scripts.lineNumbers ? "add" : "remove") + "Class"]("Enabled"); + d.scripts.open( d.scripts.index ); + + } + }, + refresh:function(){ + with(firebug){ + el.button.scripts.selectbox.clean(); + var collection = document.getElementsByTagName("script"); + for(var i=0; i")) + } + } + }, + xhr:{ + objects:[], + addObject:function(){ + with(firebug){ + for(var i=0; i d.console.historyIndex ? + d.console.history[d.console.historyIndex] : + "" + ); + } + }, + cssSelectbox:function(){ + with(firebug){ + d.css.open(el.button.css.selectbox.environment.getElement().selectedIndex); + } + }, + domTextbox:function(_event){ + with(firebug){ + if(_event.keyCode==13){ + d.dom.open(eval(el.button.dom.textbox.environment.getElement().value),el.left.dom.container); + } + } + }, + inspector:function(){ + with(firebug){ + d.html.inspect(d.inspector.el); + } + }, + keyboard:function(_event){ + with(firebug){ + if(_event.keyCode==27&&d.inspector.enabled) + d.inspector.toggle(); + } + }, + mouse:function(_event){ + with(firebug){ + var target = _event[pi.env.ie?"srcElement":"target"]; + if( + d.inspector.enabled&& + target!=document.body&& + target!=document.firstChild&& + target!=document.childNodes[1]&& + target!=el.borderInspector.environment.getElement()&& + target!=el.main.environment.getElement()&& + target.offsetParent!=el.main.environment.getElement() + ) + d.inspector.inspect(target); + } + }, + runMultiline:function(){ + with(firebug){ + d.console.run.call(window,el.right.console.input.environment.getElement().value); + } + }, + runCSS:function(){ + with(firebug){ + var source = el.right.css.input.environment.getElement().value.replace(/\n|\t/g,"").split("}"); + for(var i=0; i0?collection[0]:document.body.appendChild( document.createElement("style") ); + if(!item.match(/.+\{.+\}/))continue; + if(pi.env.ie) + style.styleSheet.addRule(rule[0],rule[1]); + else + style.sheet.insertRule( rule, style.sheet.cssRules.length ); + } + } + }, + scriptsSelectbox:function(){ + with(firebug){ + d.scripts.open(parseInt(el.button.scripts.selectbox.environment.getElement().value)); + } + }, + xhrTextbox:function(_event){ + with(firebug){ + if(_event.keyCode==13){ + d.xhr.addObject.apply(window, el.button.xhr.textbox.environment.getElement().value.split(",")); + } + } + } + } +}; + +window.console = firebug.d.console; +pi.util.AddEvent(window,"resize",firebug.d.refreshSize); +pi.util.AddEvent(document,"mousemove",firebug.listen.mouse); +pi.util.AddEvent(document,"keydown",firebug.listen.keyboard); +pi.util.DOMContentLoaded.push(firebug.init); \ No newline at end of file diff --git a/usr/local/www/javascript/firewall_nat_edit/autosuggest.js b/usr/local/www/javascript/firewall_nat_edit/autosuggest.js new file mode 100644 index 000000000..6f0c10711 --- /dev/null +++ b/usr/local/www/javascript/firewall_nat_edit/autosuggest.js @@ -0,0 +1,336 @@ + +/** + * An autosuggest textbox control. + * @class + * @scope public + */ +function AutoSuggestControl(oTextbox /*:HTMLInputElement*/, + oProvider /*:SuggestionProvider*/) { + + /** + * The currently selected suggestions. + * @scope private + */ + this.cur /*:int*/ = -1; + + /** + * The dropdown list layer. + * @scope private + */ + this.layer = null; + + /** + * Suggestion provider for the autosuggest feature. + * @scope private. + */ + this.provider /*:SuggestionProvider*/ = oProvider; + + /** + * The textbox to capture. + * @scope private + */ + this.textbox /*:HTMLInputElement*/ = oTextbox; + + //initialize the control + this.init(); + +} + +/** + * Autosuggests one or more suggestions for what the user has typed. + * If no suggestions are passed in, then no autosuggest occurs. + * @scope private + * @param aSuggestions An array of suggestion strings. + * @param bTypeAhead If the control should provide a type ahead suggestion. + */ +AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/, + bTypeAhead /*:boolean*/) { + + //make sure there's at least one suggestion + if (aSuggestions.length > 0) { + if (bTypeAhead) { + this.typeAhead(aSuggestions[0]); + } + + this.showSuggestions(aSuggestions); + } else { + this.hideSuggestions(); + } +}; + +/** + * Creates the dropdown layer to display multiple suggestions. + * @scope private + */ +AutoSuggestControl.prototype.createDropDown = function () { + + var oThis = this; + + //create the layer and assign styles + this.layer = document.createElement("div"); + this.layer.className = "suggestions"; + this.layer.style.visibility = "hidden"; + this.layer.style.width = this.textbox.offsetWidth; + + //when the user clicks on the a suggestion, get the text (innerHTML) + //and place it into a textbox + this.layer.onmousedown = + this.layer.onmouseup = + this.layer.onmouseover = function (oEvent) { + oEvent = oEvent || window.event; + oTarget = oEvent.target || oEvent.srcElement; + + if (oEvent.type == "mousedown") { + oThis.textbox.value = oTarget.firstChild.nodeValue; + oThis.hideSuggestions(); + } else if (oEvent.type == "mouseover") { + oThis.highlightSuggestion(oTarget); + } else { + oThis.textbox.focus(); + } + }; + + + document.body.appendChild(this.layer); +}; + +/** + * Gets the left coordinate of the textbox. + * @scope private + * @return The left coordinate of the textbox in pixels. + */ +AutoSuggestControl.prototype.getLeft = function () /*:int*/ { + + var oNode = this.textbox; + var iLeft = 0; + + while(oNode.tagName != "BODY") { + iLeft += oNode.offsetLeft; + oNode = oNode.offsetParent; + } + + return iLeft; +}; + +/** + * Gets the top coordinate of the textbox. + * @scope private + * @return The top coordinate of the textbox in pixels. + */ +AutoSuggestControl.prototype.getTop = function () /*:int*/ { + + var oNode = this.textbox; + var iTop = 0; + + while(oNode.tagName != "BODY") { + iTop += oNode.offsetTop; + oNode = oNode.offsetParent; + } + + return iTop; +}; + +/** + * Handles three keydown events. + * @scope private + * @param oEvent The event object for the keydown event. + */ +AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) { + + switch(oEvent.keyCode) { + case 38: //up arrow + this.previousSuggestion(); + break; + case 40: //down arrow + this.nextSuggestion(); + break; + case 13: //enter + this.hideSuggestions(); + break; + } + +}; + +/** + * Handles keyup events. + * @scope private + * @param oEvent The event object for the keyup event. + */ +AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) { + + var iKeyCode = oEvent.keyCode; + + //for backspace (8) and delete (46), shows suggestions without typeahead + if (iKeyCode == 8 || iKeyCode == 46) { + this.provider.requestSuggestions(this, false); + + //make sure not to interfere with non-character keys + } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) { + //ignore + } else { + //request suggestions from the suggestion provider with typeahead + this.provider.requestSuggestions(this, true); + } +}; + +/** + * Hides the suggestion dropdown. + * @scope private + */ +AutoSuggestControl.prototype.hideSuggestions = function () { + this.layer.style.visibility = "hidden"; +}; + +/** + * Highlights the given node in the suggestions dropdown. + * @scope private + * @param oSuggestionNode The node representing a suggestion in the dropdown. + */ +AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) { + + for (var i=0; i < this.layer.childNodes.length; i++) { + var oNode = this.layer.childNodes[i]; + if (oNode == oSuggestionNode) { + oNode.className = "current"; + } else if (oNode.className == "current") { + oNode.className = ""; + } + } +}; + +/** + * Initializes the textbox with event handlers for + * auto suggest functionality. + * @scope private + */ +AutoSuggestControl.prototype.init = function () { + + //save a reference to this object + var oThis = this; + + //assign the onkeyup event handler + this.textbox.onkeyup = function (oEvent) { + + //check for the proper location of the event object + if (!oEvent) { + oEvent = window.event; + } + + //call the handleKeyUp() method with the event object + oThis.handleKeyUp(oEvent); + }; + + //assign onkeydown event handler + this.textbox.onkeydown = function (oEvent) { + + //check for the proper location of the event object + if (!oEvent) { + oEvent = window.event; + } + + //call the handleKeyDown() method with the event object + oThis.handleKeyDown(oEvent); + }; + + //assign onblur event handler (hides suggestions) + this.textbox.onblur = function () { + oThis.hideSuggestions(); + }; + + //create the suggestions dropdown + this.createDropDown(); +}; + +/** + * Highlights the next suggestion in the dropdown and + * places the suggestion into the textbox. + * @scope private + */ +AutoSuggestControl.prototype.nextSuggestion = function () { + var cSuggestionNodes = this.layer.childNodes; + + if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) { + var oNode = cSuggestionNodes[++this.cur]; + this.highlightSuggestion(oNode); + this.textbox.value = oNode.firstChild.nodeValue; + } +}; + +/** + * Highlights the previous suggestion in the dropdown and + * places the suggestion into the textbox. + * @scope private + */ +AutoSuggestControl.prototype.previousSuggestion = function () { + var cSuggestionNodes = this.layer.childNodes; + + if (cSuggestionNodes.length > 0 && this.cur > 0) { + var oNode = cSuggestionNodes[--this.cur]; + this.highlightSuggestion(oNode); + this.textbox.value = oNode.firstChild.nodeValue; + } +}; + +/** + * Selects a range of text in the textbox. + * @scope public + * @param iStart The start index (base 0) of the selection. + * @param iLength The number of characters to select. + */ +AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) { + + //use text ranges for Internet Explorer + if (this.textbox.createTextRange) { + var oRange = this.textbox.createTextRange(); + oRange.moveStart("character", iStart); + oRange.moveEnd("character", iLength - this.textbox.value.length); + oRange.select(); + + //use setSelectionRange() for Mozilla + } else if (this.textbox.setSelectionRange) { + this.textbox.setSelectionRange(iStart, iLength); + } + + //set focus back to the textbox + this.textbox.focus(); +}; + +/** + * Builds the suggestion layer contents, moves it into position, + * and displays the layer. + * @scope private + * @param aSuggestions An array of suggestions for the control. + */ +AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) { + + var oDiv = null; + this.layer.innerHTML = ""; //clear contents of the layer + + for (var i=0; i < aSuggestions.length; i++) { + oDiv = document.createElement("div"); + oDiv.appendChild(document.createTextNode(aSuggestions[i])); + this.layer.appendChild(oDiv); + } + + this.layer.style.left = this.getLeft() + "px"; + this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px"; + this.layer.style.visibility = "visible"; + +}; + +/** + * Inserts a suggestion into the textbox, highlighting the + * suggested part of the text. + * @scope private + * @param sSuggestion The suggestion for the textbox. + */ +AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) { + + //check for support of typeahead functionality + if (this.textbox.createTextRange || this.textbox.setSelectionRange){ + var iLen = this.textbox.value.length; + this.textbox.value = sSuggestion; + this.selectRange(iLen, sSuggestion.length); + } +}; + diff --git a/usr/local/www/javascript/firewall_nat_edit/disablekeys.js b/usr/local/www/javascript/firewall_nat_edit/disablekeys.js new file mode 100644 index 000000000..5d6c87af5 --- /dev/null +++ b/usr/local/www/javascript/firewall_nat_edit/disablekeys.js @@ -0,0 +1,6 @@ +function kH(e) { + var pK = document.all? window.event.keyCode:e.which; + return pK != 13; +} +document.onkeypress = kH; +if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file diff --git a/usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js b/usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js new file mode 100644 index 000000000..7007b4085 --- /dev/null +++ b/usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js @@ -0,0 +1,203 @@ +//= 0 && document.iform.proto.selectedIndex <= 2) { + portsenabled = 1; + } else { + portsenabled = 0; + } + + if (portsenabled) { + document.getElementById("sprtable").style.display = showsource == 1 ? '':'none'; + document.getElementById("dprtr").style.display = ''; + document.getElementById("lprtr").style.display = document.iform.nordr.checked ? 'none' : ''; + } else { + document.getElementById("sprtable").style.display = 'none'; + document.getElementById("dprtr").style.display = 'none'; + document.getElementById("lprtr").style.display = 'none'; + document.getElementById("dstbeginport").selectedIndex = 0; + document.getElementById("dstbeginport_cust").value = ""; + document.getElementById("dstendport").selectedIndex = 0; + document.getElementById("dstendport_cust").value = ""; + document.getElementById("localbeginport").selectedIndex = 0; + document.getElementById("localbeginport_cust").value = ""; + } +} + +function typesel_change() { + switch (document.iform.srctype.selectedIndex) { + case 1: /* single */ + document.iform.src.disabled = 0; + document.iform.srcmask.value = ""; + document.iform.srcmask.disabled = 1; + break; + case 2: /* network */ + document.iform.src.disabled = 0; + document.iform.srcmask.disabled = 0; + break; + default: + document.iform.src.value = ""; + document.iform.src.disabled = 1; + document.iform.srcmask.value = ""; + document.iform.srcmask.disabled = 1; + break; + } + if( dstenabled ) + { + switch (document.iform.dsttype.selectedIndex) { + case 1: /* single */ + document.iform.dst.disabled = 0; + document.iform.dstmask.value = ""; + document.iform.dstmask.disabled = 1; + break; + case 2: /* network */ + document.iform.dst.disabled = 0; + document.iform.dstmask.disabled = 0; + break; + default: + document.iform.dst.value = ""; + document.iform.dst.disabled = 1; + document.iform.dstmask.value = ""; + document.iform.dstmask.disabled = 1; + break; + } + } +} + +function src_rep_change() { + document.iform.srcendport.selectedIndex = document.iform.srcbeginport.selectedIndex; +} + +function dst_rep_change() { + document.iform.dstendport.selectedIndex = document.iform.dstbeginport.selectedIndex; +} + +function dst_change( iface, old_iface, old_dst ) { + if ( ( old_dst == "" ) || ( old_iface.concat("ip") == old_dst ) ) { + document.iform.dsttype.value = iface.concat("ip"); + } +} +//]]> diff --git a/usr/local/www/javascript/firewall_nat_edit/suggestions.js b/usr/local/www/javascript/firewall_nat_edit/suggestions.js new file mode 100644 index 000000000..4d1e1276f --- /dev/null +++ b/usr/local/www/javascript/firewall_nat_edit/suggestions.js @@ -0,0 +1,33 @@ + +/** + * Provides suggestions for state names (USA). + * @class + * @scope public + */ +function StateSuggestions(text) { + this.states = text; +} + +/** + * Request suggestions for the given autosuggest control. + * @scope protected + * @param oAutoSuggestControl The autosuggest control to provide suggestions for. + */ +StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/, + bTypeAhead /*:boolean*/) { + var aSuggestions = []; + var sTextboxValue = oAutoSuggestControl.textbox.value; + + if (sTextboxValue.length > 0){ + + //search for matching states + for (var i=0; i < this.states.length; i++) { + if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) { + aSuggestions.push(this.states[i]); + } + } + } + + //provide suggestions to the control + oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead); +}; diff --git a/usr/local/www/javascript/firewall_rules_edit/autosuggest.js b/usr/local/www/javascript/firewall_rules_edit/autosuggest.js new file mode 100644 index 000000000..6f0c10711 --- /dev/null +++ b/usr/local/www/javascript/firewall_rules_edit/autosuggest.js @@ -0,0 +1,336 @@ + +/** + * An autosuggest textbox control. + * @class + * @scope public + */ +function AutoSuggestControl(oTextbox /*:HTMLInputElement*/, + oProvider /*:SuggestionProvider*/) { + + /** + * The currently selected suggestions. + * @scope private + */ + this.cur /*:int*/ = -1; + + /** + * The dropdown list layer. + * @scope private + */ + this.layer = null; + + /** + * Suggestion provider for the autosuggest feature. + * @scope private. + */ + this.provider /*:SuggestionProvider*/ = oProvider; + + /** + * The textbox to capture. + * @scope private + */ + this.textbox /*:HTMLInputElement*/ = oTextbox; + + //initialize the control + this.init(); + +} + +/** + * Autosuggests one or more suggestions for what the user has typed. + * If no suggestions are passed in, then no autosuggest occurs. + * @scope private + * @param aSuggestions An array of suggestion strings. + * @param bTypeAhead If the control should provide a type ahead suggestion. + */ +AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/, + bTypeAhead /*:boolean*/) { + + //make sure there's at least one suggestion + if (aSuggestions.length > 0) { + if (bTypeAhead) { + this.typeAhead(aSuggestions[0]); + } + + this.showSuggestions(aSuggestions); + } else { + this.hideSuggestions(); + } +}; + +/** + * Creates the dropdown layer to display multiple suggestions. + * @scope private + */ +AutoSuggestControl.prototype.createDropDown = function () { + + var oThis = this; + + //create the layer and assign styles + this.layer = document.createElement("div"); + this.layer.className = "suggestions"; + this.layer.style.visibility = "hidden"; + this.layer.style.width = this.textbox.offsetWidth; + + //when the user clicks on the a suggestion, get the text (innerHTML) + //and place it into a textbox + this.layer.onmousedown = + this.layer.onmouseup = + this.layer.onmouseover = function (oEvent) { + oEvent = oEvent || window.event; + oTarget = oEvent.target || oEvent.srcElement; + + if (oEvent.type == "mousedown") { + oThis.textbox.value = oTarget.firstChild.nodeValue; + oThis.hideSuggestions(); + } else if (oEvent.type == "mouseover") { + oThis.highlightSuggestion(oTarget); + } else { + oThis.textbox.focus(); + } + }; + + + document.body.appendChild(this.layer); +}; + +/** + * Gets the left coordinate of the textbox. + * @scope private + * @return The left coordinate of the textbox in pixels. + */ +AutoSuggestControl.prototype.getLeft = function () /*:int*/ { + + var oNode = this.textbox; + var iLeft = 0; + + while(oNode.tagName != "BODY") { + iLeft += oNode.offsetLeft; + oNode = oNode.offsetParent; + } + + return iLeft; +}; + +/** + * Gets the top coordinate of the textbox. + * @scope private + * @return The top coordinate of the textbox in pixels. + */ +AutoSuggestControl.prototype.getTop = function () /*:int*/ { + + var oNode = this.textbox; + var iTop = 0; + + while(oNode.tagName != "BODY") { + iTop += oNode.offsetTop; + oNode = oNode.offsetParent; + } + + return iTop; +}; + +/** + * Handles three keydown events. + * @scope private + * @param oEvent The event object for the keydown event. + */ +AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) { + + switch(oEvent.keyCode) { + case 38: //up arrow + this.previousSuggestion(); + break; + case 40: //down arrow + this.nextSuggestion(); + break; + case 13: //enter + this.hideSuggestions(); + break; + } + +}; + +/** + * Handles keyup events. + * @scope private + * @param oEvent The event object for the keyup event. + */ +AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) { + + var iKeyCode = oEvent.keyCode; + + //for backspace (8) and delete (46), shows suggestions without typeahead + if (iKeyCode == 8 || iKeyCode == 46) { + this.provider.requestSuggestions(this, false); + + //make sure not to interfere with non-character keys + } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) { + //ignore + } else { + //request suggestions from the suggestion provider with typeahead + this.provider.requestSuggestions(this, true); + } +}; + +/** + * Hides the suggestion dropdown. + * @scope private + */ +AutoSuggestControl.prototype.hideSuggestions = function () { + this.layer.style.visibility = "hidden"; +}; + +/** + * Highlights the given node in the suggestions dropdown. + * @scope private + * @param oSuggestionNode The node representing a suggestion in the dropdown. + */ +AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) { + + for (var i=0; i < this.layer.childNodes.length; i++) { + var oNode = this.layer.childNodes[i]; + if (oNode == oSuggestionNode) { + oNode.className = "current"; + } else if (oNode.className == "current") { + oNode.className = ""; + } + } +}; + +/** + * Initializes the textbox with event handlers for + * auto suggest functionality. + * @scope private + */ +AutoSuggestControl.prototype.init = function () { + + //save a reference to this object + var oThis = this; + + //assign the onkeyup event handler + this.textbox.onkeyup = function (oEvent) { + + //check for the proper location of the event object + if (!oEvent) { + oEvent = window.event; + } + + //call the handleKeyUp() method with the event object + oThis.handleKeyUp(oEvent); + }; + + //assign onkeydown event handler + this.textbox.onkeydown = function (oEvent) { + + //check for the proper location of the event object + if (!oEvent) { + oEvent = window.event; + } + + //call the handleKeyDown() method with the event object + oThis.handleKeyDown(oEvent); + }; + + //assign onblur event handler (hides suggestions) + this.textbox.onblur = function () { + oThis.hideSuggestions(); + }; + + //create the suggestions dropdown + this.createDropDown(); +}; + +/** + * Highlights the next suggestion in the dropdown and + * places the suggestion into the textbox. + * @scope private + */ +AutoSuggestControl.prototype.nextSuggestion = function () { + var cSuggestionNodes = this.layer.childNodes; + + if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) { + var oNode = cSuggestionNodes[++this.cur]; + this.highlightSuggestion(oNode); + this.textbox.value = oNode.firstChild.nodeValue; + } +}; + +/** + * Highlights the previous suggestion in the dropdown and + * places the suggestion into the textbox. + * @scope private + */ +AutoSuggestControl.prototype.previousSuggestion = function () { + var cSuggestionNodes = this.layer.childNodes; + + if (cSuggestionNodes.length > 0 && this.cur > 0) { + var oNode = cSuggestionNodes[--this.cur]; + this.highlightSuggestion(oNode); + this.textbox.value = oNode.firstChild.nodeValue; + } +}; + +/** + * Selects a range of text in the textbox. + * @scope public + * @param iStart The start index (base 0) of the selection. + * @param iLength The number of characters to select. + */ +AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) { + + //use text ranges for Internet Explorer + if (this.textbox.createTextRange) { + var oRange = this.textbox.createTextRange(); + oRange.moveStart("character", iStart); + oRange.moveEnd("character", iLength - this.textbox.value.length); + oRange.select(); + + //use setSelectionRange() for Mozilla + } else if (this.textbox.setSelectionRange) { + this.textbox.setSelectionRange(iStart, iLength); + } + + //set focus back to the textbox + this.textbox.focus(); +}; + +/** + * Builds the suggestion layer contents, moves it into position, + * and displays the layer. + * @scope private + * @param aSuggestions An array of suggestions for the control. + */ +AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) { + + var oDiv = null; + this.layer.innerHTML = ""; //clear contents of the layer + + for (var i=0; i < aSuggestions.length; i++) { + oDiv = document.createElement("div"); + oDiv.appendChild(document.createTextNode(aSuggestions[i])); + this.layer.appendChild(oDiv); + } + + this.layer.style.left = this.getLeft() + "px"; + this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px"; + this.layer.style.visibility = "visible"; + +}; + +/** + * Inserts a suggestion into the textbox, highlighting the + * suggested part of the text. + * @scope private + * @param sSuggestion The suggestion for the textbox. + */ +AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) { + + //check for support of typeahead functionality + if (this.textbox.createTextRange || this.textbox.setSelectionRange){ + var iLen = this.textbox.value.length; + this.textbox.value = sSuggestion; + this.selectRange(iLen, sSuggestion.length); + } +}; + diff --git a/usr/local/www/javascript/firewall_rules_edit/disablekeys.js b/usr/local/www/javascript/firewall_rules_edit/disablekeys.js new file mode 100644 index 000000000..5d6c87af5 --- /dev/null +++ b/usr/local/www/javascript/firewall_rules_edit/disablekeys.js @@ -0,0 +1,6 @@ +function kH(e) { + var pK = document.all? window.event.keyCode:e.which; + return pK != 13; +} +document.onkeypress = kH; +if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file diff --git a/usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js b/usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js new file mode 100644 index 000000000..f8d714d8a --- /dev/null +++ b/usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js @@ -0,0 +1,225 @@ +//= 0 && document.iform.proto.selectedIndex <= 2) { + document.getElementById("dprtr").style.display = ''; + if (editenabled) { + document.getElementById("showadvancedboxspr").style.display = 'table-row'; + } + } else { + document.getElementById("sprtable").style.display = 'none'; + document.getElementById("dprtr").style.display = 'none'; + document.getElementById("showadvancedboxspr").style.display = 'none'; + } +} + +function show_aodiv() { + document.getElementById("aoadv").innerHTML=''; + aodiv = document.getElementById('aodivmain'); + aodiv.style.display = "block"; +} + +function show_dsdiv() { + document.getElementById("dsadv").innerHTML=''; + dsdiv = document.getElementById('dsdivmain'); + dsdiv.style.display = "block"; +} + +function show_advanced_noxmlrpc() { + document.getElementById("showadvnoxmlrpcsyncbox").innerHTML=''; + aodiv = document.getElementById('shownoxmlrpcadv'); + aodiv.style.display = "block"; +} + +function show_advanced_vlanprio() { + document.getElementById("showadvvlanpriobox").innerHTML=''; + aodiv = document.getElementById('showvlanprioadv'); + aodiv.style.display = "block"; +} + +function show_advanced_schedule() { + document.getElementById("showadvschedulebox").innerHTML=''; + aodiv = document.getElementById('showscheduleadv'); + aodiv.style.display = "block"; +} + +function show_advanced_gateway() { + document.getElementById("showadvgatewaybox").innerHTML=''; + aodiv = document.getElementById('showgatewayadv'); + aodiv.style.display = "block"; +} + +function show_advanced_sourceos() { + document.getElementById("showadvsourceosbox").innerHTML=''; + aodiv = document.getElementById('showsourceosadv'); + aodiv.style.display = "block"; +} + +function show_advanced_ackqueue() { + document.getElementById("showadvackqueuebox").innerHTML=''; + aodiv = document.getElementById('showackqueueadv'); + aodiv.style.display = "block"; +} + +function show_advanced_inout() { + document.getElementById("showadvinoutbox").innerHTML=''; + aodiv = document.getElementById('showinoutadv'); + aodiv.style.display = "block"; +} + +function show_advanced_state() { + document.getElementById("showadvstatebox").innerHTML=''; + aodiv = document.getElementById('showstateadv'); + aodiv.style.display = "block"; +} + +function show_advanced_tcpflags() { + document.getElementById("showtcpflagsbox").innerHTML=''; + aodiv = document.getElementById('showtcpflagsadv'); + aodiv.style.display = "block"; +} + +function show_advanced_layer7() { + document.getElementById("showadvlayer7box").innerHTML=''; + aodiv = document.getElementById('showlayer7adv'); + aodiv.style.display = "block"; +} + +function src_rep_change() { + document.iform.srcendport.selectedIndex = document.iform.srcbeginport.selectedIndex; +} + +function dst_rep_change() { + document.iform.dstendport.selectedIndex = document.iform.dstbeginport.selectedIndex; +} + +function tcpflags_anyclick(obj) { + if (obj.checked) { + document.getElementById('tcpheader').style.display= 'none'; + } else { + document.getElementById('tcpheader').style.display= ""; + } +} +//]]> diff --git a/usr/local/www/javascript/firewall_rules_edit/suggestions.js b/usr/local/www/javascript/firewall_rules_edit/suggestions.js new file mode 100644 index 000000000..4d1e1276f --- /dev/null +++ b/usr/local/www/javascript/firewall_rules_edit/suggestions.js @@ -0,0 +1,33 @@ + +/** + * Provides suggestions for state names (USA). + * @class + * @scope public + */ +function StateSuggestions(text) { + this.states = text; +} + +/** + * Request suggestions for the given autosuggest control. + * @scope protected + * @param oAutoSuggestControl The autosuggest control to provide suggestions for. + */ +StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/, + bTypeAhead /*:boolean*/) { + var aSuggestions = []; + var sTextboxValue = oAutoSuggestControl.textbox.value; + + if (sTextboxValue.length > 0){ + + //search for matching states + for (var i=0; i < this.states.length; i++) { + if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) { + aSuggestions.push(this.states[i]); + } + } + } + + //provide suggestions to the control + oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead); +}; diff --git a/usr/local/www/javascript/firewall_shaper_edit/autosuggest.js b/usr/local/www/javascript/firewall_shaper_edit/autosuggest.js new file mode 100644 index 000000000..6f0c10711 --- /dev/null +++ b/usr/local/www/javascript/firewall_shaper_edit/autosuggest.js @@ -0,0 +1,336 @@ + +/** + * An autosuggest textbox control. + * @class + * @scope public + */ +function AutoSuggestControl(oTextbox /*:HTMLInputElement*/, + oProvider /*:SuggestionProvider*/) { + + /** + * The currently selected suggestions. + * @scope private + */ + this.cur /*:int*/ = -1; + + /** + * The dropdown list layer. + * @scope private + */ + this.layer = null; + + /** + * Suggestion provider for the autosuggest feature. + * @scope private. + */ + this.provider /*:SuggestionProvider*/ = oProvider; + + /** + * The textbox to capture. + * @scope private + */ + this.textbox /*:HTMLInputElement*/ = oTextbox; + + //initialize the control + this.init(); + +} + +/** + * Autosuggests one or more suggestions for what the user has typed. + * If no suggestions are passed in, then no autosuggest occurs. + * @scope private + * @param aSuggestions An array of suggestion strings. + * @param bTypeAhead If the control should provide a type ahead suggestion. + */ +AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/, + bTypeAhead /*:boolean*/) { + + //make sure there's at least one suggestion + if (aSuggestions.length > 0) { + if (bTypeAhead) { + this.typeAhead(aSuggestions[0]); + } + + this.showSuggestions(aSuggestions); + } else { + this.hideSuggestions(); + } +}; + +/** + * Creates the dropdown layer to display multiple suggestions. + * @scope private + */ +AutoSuggestControl.prototype.createDropDown = function () { + + var oThis = this; + + //create the layer and assign styles + this.layer = document.createElement("div"); + this.layer.className = "suggestions"; + this.layer.style.visibility = "hidden"; + this.layer.style.width = this.textbox.offsetWidth; + + //when the user clicks on the a suggestion, get the text (innerHTML) + //and place it into a textbox + this.layer.onmousedown = + this.layer.onmouseup = + this.layer.onmouseover = function (oEvent) { + oEvent = oEvent || window.event; + oTarget = oEvent.target || oEvent.srcElement; + + if (oEvent.type == "mousedown") { + oThis.textbox.value = oTarget.firstChild.nodeValue; + oThis.hideSuggestions(); + } else if (oEvent.type == "mouseover") { + oThis.highlightSuggestion(oTarget); + } else { + oThis.textbox.focus(); + } + }; + + + document.body.appendChild(this.layer); +}; + +/** + * Gets the left coordinate of the textbox. + * @scope private + * @return The left coordinate of the textbox in pixels. + */ +AutoSuggestControl.prototype.getLeft = function () /*:int*/ { + + var oNode = this.textbox; + var iLeft = 0; + + while(oNode.tagName != "BODY") { + iLeft += oNode.offsetLeft; + oNode = oNode.offsetParent; + } + + return iLeft; +}; + +/** + * Gets the top coordinate of the textbox. + * @scope private + * @return The top coordinate of the textbox in pixels. + */ +AutoSuggestControl.prototype.getTop = function () /*:int*/ { + + var oNode = this.textbox; + var iTop = 0; + + while(oNode.tagName != "BODY") { + iTop += oNode.offsetTop; + oNode = oNode.offsetParent; + } + + return iTop; +}; + +/** + * Handles three keydown events. + * @scope private + * @param oEvent The event object for the keydown event. + */ +AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) { + + switch(oEvent.keyCode) { + case 38: //up arrow + this.previousSuggestion(); + break; + case 40: //down arrow + this.nextSuggestion(); + break; + case 13: //enter + this.hideSuggestions(); + break; + } + +}; + +/** + * Handles keyup events. + * @scope private + * @param oEvent The event object for the keyup event. + */ +AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) { + + var iKeyCode = oEvent.keyCode; + + //for backspace (8) and delete (46), shows suggestions without typeahead + if (iKeyCode == 8 || iKeyCode == 46) { + this.provider.requestSuggestions(this, false); + + //make sure not to interfere with non-character keys + } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) { + //ignore + } else { + //request suggestions from the suggestion provider with typeahead + this.provider.requestSuggestions(this, true); + } +}; + +/** + * Hides the suggestion dropdown. + * @scope private + */ +AutoSuggestControl.prototype.hideSuggestions = function () { + this.layer.style.visibility = "hidden"; +}; + +/** + * Highlights the given node in the suggestions dropdown. + * @scope private + * @param oSuggestionNode The node representing a suggestion in the dropdown. + */ +AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) { + + for (var i=0; i < this.layer.childNodes.length; i++) { + var oNode = this.layer.childNodes[i]; + if (oNode == oSuggestionNode) { + oNode.className = "current"; + } else if (oNode.className == "current") { + oNode.className = ""; + } + } +}; + +/** + * Initializes the textbox with event handlers for + * auto suggest functionality. + * @scope private + */ +AutoSuggestControl.prototype.init = function () { + + //save a reference to this object + var oThis = this; + + //assign the onkeyup event handler + this.textbox.onkeyup = function (oEvent) { + + //check for the proper location of the event object + if (!oEvent) { + oEvent = window.event; + } + + //call the handleKeyUp() method with the event object + oThis.handleKeyUp(oEvent); + }; + + //assign onkeydown event handler + this.textbox.onkeydown = function (oEvent) { + + //check for the proper location of the event object + if (!oEvent) { + oEvent = window.event; + } + + //call the handleKeyDown() method with the event object + oThis.handleKeyDown(oEvent); + }; + + //assign onblur event handler (hides suggestions) + this.textbox.onblur = function () { + oThis.hideSuggestions(); + }; + + //create the suggestions dropdown + this.createDropDown(); +}; + +/** + * Highlights the next suggestion in the dropdown and + * places the suggestion into the textbox. + * @scope private + */ +AutoSuggestControl.prototype.nextSuggestion = function () { + var cSuggestionNodes = this.layer.childNodes; + + if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) { + var oNode = cSuggestionNodes[++this.cur]; + this.highlightSuggestion(oNode); + this.textbox.value = oNode.firstChild.nodeValue; + } +}; + +/** + * Highlights the previous suggestion in the dropdown and + * places the suggestion into the textbox. + * @scope private + */ +AutoSuggestControl.prototype.previousSuggestion = function () { + var cSuggestionNodes = this.layer.childNodes; + + if (cSuggestionNodes.length > 0 && this.cur > 0) { + var oNode = cSuggestionNodes[--this.cur]; + this.highlightSuggestion(oNode); + this.textbox.value = oNode.firstChild.nodeValue; + } +}; + +/** + * Selects a range of text in the textbox. + * @scope public + * @param iStart The start index (base 0) of the selection. + * @param iLength The number of characters to select. + */ +AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) { + + //use text ranges for Internet Explorer + if (this.textbox.createTextRange) { + var oRange = this.textbox.createTextRange(); + oRange.moveStart("character", iStart); + oRange.moveEnd("character", iLength - this.textbox.value.length); + oRange.select(); + + //use setSelectionRange() for Mozilla + } else if (this.textbox.setSelectionRange) { + this.textbox.setSelectionRange(iStart, iLength); + } + + //set focus back to the textbox + this.textbox.focus(); +}; + +/** + * Builds the suggestion layer contents, moves it into position, + * and displays the layer. + * @scope private + * @param aSuggestions An array of suggestions for the control. + */ +AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) { + + var oDiv = null; + this.layer.innerHTML = ""; //clear contents of the layer + + for (var i=0; i < aSuggestions.length; i++) { + oDiv = document.createElement("div"); + oDiv.appendChild(document.createTextNode(aSuggestions[i])); + this.layer.appendChild(oDiv); + } + + this.layer.style.left = this.getLeft() + "px"; + this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px"; + this.layer.style.visibility = "visible"; + +}; + +/** + * Inserts a suggestion into the textbox, highlighting the + * suggested part of the text. + * @scope private + * @param sSuggestion The suggestion for the textbox. + */ +AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) { + + //check for support of typeahead functionality + if (this.textbox.createTextRange || this.textbox.setSelectionRange){ + var iLen = this.textbox.value.length; + this.textbox.value = sSuggestion; + this.selectRange(iLen, sSuggestion.length); + } +}; + diff --git a/usr/local/www/javascript/firewall_shaper_edit/disablekeys.js b/usr/local/www/javascript/firewall_shaper_edit/disablekeys.js new file mode 100644 index 000000000..5d6c87af5 --- /dev/null +++ b/usr/local/www/javascript/firewall_shaper_edit/disablekeys.js @@ -0,0 +1,6 @@ +function kH(e) { + var pK = document.all? window.event.keyCode:e.which; + return pK != 13; +} +document.onkeypress = kH; +if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file diff --git a/usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js b/usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js new file mode 100644 index 000000000..b1b8df00e --- /dev/null +++ b/usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js @@ -0,0 +1,37 @@ +// \ No newline at end of file diff --git a/usr/local/www/javascript/firewall_shaper_edit/suggestions.js b/usr/local/www/javascript/firewall_shaper_edit/suggestions.js new file mode 100644 index 000000000..4d1e1276f --- /dev/null +++ b/usr/local/www/javascript/firewall_shaper_edit/suggestions.js @@ -0,0 +1,33 @@ + +/** + * Provides suggestions for state names (USA). + * @class + * @scope public + */ +function StateSuggestions(text) { + this.states = text; +} + +/** + * Request suggestions for the given autosuggest control. + * @scope protected + * @param oAutoSuggestControl The autosuggest control to provide suggestions for. + */ +StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/, + bTypeAhead /*:boolean*/) { + var aSuggestions = []; + var sTextboxValue = oAutoSuggestControl.textbox.value; + + if (sTextboxValue.length > 0){ + + //search for matching states + for (var i=0; i < this.states.length; i++) { + if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) { + aSuggestions.push(this.states[i]); + } + } + } + + //provide suggestions to the control + oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead); +}; diff --git a/usr/local/www/javascript/global.js b/usr/local/www/javascript/global.js new file mode 100644 index 000000000..0b67f5868 --- /dev/null +++ b/usr/local/www/javascript/global.js @@ -0,0 +1,43 @@ +var AjaxQueue = { + batchSize: 1, //No.of simultaneous AJAX requests allowed, Default : 1 + urlQueue: [], //Request URLs will be pushed into this array + elementsQueue: [], //Element IDs of elements to be updated on completion of a request + optionsQueue: [], //Request options will be pushed into this array + currentRequest: null, + setBatchSize: function(bSize){ //Method to set a different batch size. Recommended: Set batchSize before making requests + this.batchSize = bSize; + }, + push: function(url, options, elementID){ //Push the request in the queue. elementID is optional and required only for Ajax requests that updates the element + this.urlQueue.push(url); + this.optionsQueue.push(options); + if(elementID!=null){ + this.elementsQueue.push(elementID); + } else { + this.elementsQueue.push("NOTSPECIFIED"); + } + + this._processNext(); + }, + _processNext: function() { // Method for processing the requests in the queue. Private method. Don't call it explicitly + if(this.currentRequest == null && this.urlQueue.length > 0) // Check if the currently processing request count is less than batch size + { + // Call jQuery.ajax on the first item in the queue and remove it from the queue + AjaxQueue.currentRequest = jQuery.ajax(AjaxQueue.urlQueue.shift(), AjaxQueue.optionsQueue.shift()); + AjaxQueue.currentRequest.complete( function() { + //Call AjaxQueue._processNext on completion ( success / failure) of this AJAX request. + AjaxQueue.currentRequest = null; + AjaxQueue._processNext(); + }); + if(this.elementsQueue[0]=="NOTSPECIFIED") { //Check if an elementID was specified + // If no ElementID was specified remove the first item from the queue + var junk = AjaxQueue.elementsQueue.shift(); + } else { + // If ElementID was specified update the first item in the queue and remove it from the queue + AjaxQueue.currentRequest.success( function(data) { + jQuery(AjaxQueue.elementsQueue.shift()).html(data); + }); + } + } + } +}; + diff --git a/usr/local/www/javascript/index/ajax.js b/usr/local/www/javascript/index/ajax.js new file mode 100644 index 000000000..2fc6ab6d6 --- /dev/null +++ b/usr/local/www/javascript/index/ajax.js @@ -0,0 +1,186 @@ +/* Most widgets update their backend data every 10 seconds. 11 seconds + * will ensure that we update the GUI right after the stats are updated. + * Seconds * 1000 = value + */ +var Seconds = 11; +var update_interval = (Math.abs(Math.ceil(Seconds))-1)*1000 + 990; + +function updateMeters() { + url = '/getstats.php'; + + jQuery.ajax(url, { + type: 'get', + success: function(data) { + response = data || ""; + if (response != "") + stats(data); + } + }); + setTimer(); +} + +function setTimer() { + timeout = window.setTimeout('updateMeters()', update_interval); +} + +function stats(x) { + var values = x.split("|"); + if (jQuery.each(values,function(key,value){ + if (value == 'undefined' || value == null) + return true; + else + return false; + })) + + updateUptime(values[2]); + updateDateTime(values[5]); + updateCPU(values[0]); + updateMemory(values[1]); + updateState(values[3]); + updateTemp(values[4]); + updateInterfaceStats(values[6]); + updateInterfaces(values[7]); + updateGatewayStats(values[8]); + updateCpuFreq(values[9]); + updateLoadAverage(values[10]); + updateMbuf(values[11]); + updateMbufMeter(values[12]); + updateStateMeter(values[13]); +} + +function updateMemory(x) { + if(jQuery('#memusagemeter')) + jQuery("#memusagemeter").html(x + '%'); + if(jQuery('#memUsagePB')) + jQuery('#memUsagePB').progressbar( { value: parseInt(x) } ); +} + +function updateMbuf(x) { + if(jQuery('#mbuf')) + jQuery("#mbuf").html(x); +} + +function updateMbufMeter(x) { + if(jQuery('#mbufusagemeter')) + jQuery("#mbufusagemeter").html(x + '%'); + if(jQuery('#mbufPB')) + jQuery('#mbufPB').progressbar( { value: parseInt(x) } ); +} + +function updateCPU(x) { + if(jQuery('#cpumeter')) + jQuery("#cpumeter").html(x + '%'); + if(jQuery('#cpuPB')) + jQuery('#cpuPB').progressbar( { value: parseInt(x) } ); + /* Load CPU Graph widget if enabled */ + if(widgetActive('cpu_graphs')) { + GraphValue(graph[0], x); + } +} + +function updateTemp(x) { + if(jQuery("#tempmeter")) + jQuery("#tempmeter").html(x + '\u00B0' + 'C'); + if(jQuery('#tempPB')) + jQuery("#tempPB").progressbar( { value: parseInt(x) } ); +} + +function updateDateTime(x) { + if(jQuery('#datetime')) + jQuery("#datetime").html(x); +} + +function updateUptime(x) { + if(jQuery('#uptime')) + jQuery("#uptime").html(x); +} + +function updateState(x) { + if(jQuery('#pfstate')) + jQuery("#pfstate").html(x); +} + +function updateStateMeter(x) { + if(jQuery('#pfstateusagemeter')) + jQuery("#pfstateusagemeter").html(x + '%'); + if(jQuery('#statePB')) + jQuery('#statePB').progressbar( { value: parseInt(x) } ); +} + +function updateGatewayStats(x){ + if (widgetActive("gateways")){ + gateways_split = x.split(","); + for (var y=0; ya?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
                            ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; +if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
                            ... + updateNode = updateNode.firstChild.firstChild.firstChild.firstChild; + } + + // TODO: allow for a DOM node as content + updateNode.innerHTML = content; +} + +// }}} diff --git a/usr/local/www/javascript/domTT/fadomatic.js b/usr/local/www/javascript/domTT/fadomatic.js new file mode 100644 index 000000000..2c67d0b96 --- /dev/null +++ b/usr/local/www/javascript/domTT/fadomatic.js @@ -0,0 +1,180 @@ +/** $Id$ */ +// Title: Fadomatic +// Version: 1.2 +// Homepage: http://chimpen.com/fadomatic +// Author: Philip McCarthy + +// Fade interval in milliseconds +// Make this larger if you experience performance issues +Fadomatic.INTERVAL_MILLIS = 50; + +// Creates a fader +// element - The element to fade +// speed - The speed to fade at, from 0.0 to 100.0 +// initialOpacity (optional, default 100) - element's starting opacity, 0 to 100 +// minOpacity (optional, default 0) - element's minimum opacity, 0 to 100 +// maxOpacity (optional, default 0) - element's minimum opacity, 0 to 100 +function Fadomatic (element, rate, initialOpacity, minOpacity, maxOpacity) { + this._element = element; + this._intervalId = null; + this._rate = rate; + this._isFadeOut = true; + + // Set initial opacity and bounds + // NB use 99 instead of 100 to avoid flicker at start of fade + this._minOpacity = 0; + this._maxOpacity = 99; + this._opacity = 99; + + if (typeof minOpacity != 'undefined') { + if (minOpacity < 0) { + this._minOpacity = 0; + } else if (minOpacity > 99) { + this._minOpacity = 99; + } else { + this._minOpacity = minOpacity; + } + } + + if (typeof maxOpacity != 'undefined') { + if (maxOpacity < 0) { + this._maxOpacity = 0; + } else if (maxOpacity > 99) { + this._maxOpacity = 99; + } else { + this._maxOpacity = maxOpacity; + } + + if (this._maxOpacity < this._minOpacity) { + this._maxOpacity = this._minOpacity; + } + } + + if (typeof initialOpacity != 'undefined') { + if (initialOpacity > this._maxOpacity) { + this._opacity = this._maxOpacity; + } else if (initialOpacity < this._minOpacity) { + this._opacity = this._minOpacity; + } else { + this._opacity = initialOpacity; + } + } + + // See if we're using W3C opacity, MSIE filter, or just + // toggling visiblity + if(typeof element.style.opacity != 'undefined') { + + this._updateOpacity = this._updateOpacityW3c; + + } else if(typeof element.style.filter != 'undefined') { + + // If there's not an alpha filter on the element already, + // add one + if (element.style.filter.indexOf("alpha") == -1) { + + // Attempt to preserve existing filters + var existingFilters=""; + if (element.style.filter) { + existingFilters = element.style.filter+" "; + } + element.style.filter = existingFilters+"alpha(opacity="+this._opacity+")"; + } + + this._updateOpacity = this._updateOpacityMSIE; + + } else { + + this._updateOpacity = this._updateVisibility; + } + + this._updateOpacity(); +} + +// Initiates a fade out +Fadomatic.prototype.fadeOut = function () { + this._isFadeOut = true; + this._beginFade(); +}; + +// Initiates a fade in +Fadomatic.prototype.fadeIn = function () { + this._isFadeOut = false; + this._beginFade(); +}; + +// Makes the element completely opaque, stops any fade in progress +Fadomatic.prototype.show = function () { + this.haltFade(); + this._opacity = this._maxOpacity; + this._updateOpacity(); +}; + +// Makes the element completely transparent, stops any fade in progress +Fadomatic.prototype.hide = function () { + this.haltFade(); + this._opacity = 0; + this._updateOpacity(); +}; + +// Halts any fade in progress +Fadomatic.prototype.haltFade = function () { + + clearInterval(this._intervalId); +}; + +// Resumes a fade where it was halted +Fadomatic.prototype.resumeFade = function () { + + this._beginFade(); +}; + +// Pseudo-private members + +Fadomatic.prototype._beginFade = function () { + + this.haltFade(); + var objref = this; + this._intervalId = setInterval(function() { objref._tickFade(); },Fadomatic.INTERVAL_MILLIS); +}; + +Fadomatic.prototype._tickFade = function () { + + if (this._isFadeOut) { + this._opacity -= this._rate; + if (this._opacity < this._minOpacity) { + this._opacity = this._minOpacity; + this.haltFade(); + } + } else { + this._opacity += this._rate; + if (this._opacity > this._maxOpacity ) { + this._opacity = this._maxOpacity; + this.haltFade(); + } + } + + this._updateOpacity(); +}; + +Fadomatic.prototype._updateVisibility = function () { + + if (this._opacity > 0) { + this._element.style.visibility = 'visible'; + } else { + this._element.style.visibility = 'hidden'; + } +}; + +Fadomatic.prototype._updateOpacityW3c = function () { + + this._element.style.opacity = this._opacity/100; + this._updateVisibility(); +}; + +Fadomatic.prototype._updateOpacityMSIE = function () { + + this._element.filters.alpha.opacity = this._opacity; + this._updateVisibility(); +}; + +Fadomatic.prototype._updateOpacity = null; diff --git a/usr/local/www/javascript/filter_log.js b/usr/local/www/javascript/filter_log.js new file mode 100644 index 000000000..2cee6d46b --- /dev/null +++ b/usr/local/www/javascript/filter_log.js @@ -0,0 +1,168 @@ +if (typeof getURL == 'undefined') { + getURL = function(url, callback) { + if (!url) + throw 'No URL for getURL'; + try { + if (typeof callback.operationComplete == 'function') + callback = callback.operationComplete; + } catch (e) {} + if (typeof callback != 'function') + throw 'No callback function for getURL'; + var http_request = null; + if (typeof XMLHttpRequest != 'undefined') { + http_request = new XMLHttpRequest(); + } + else if (typeof ActiveXObject != 'undefined') { + try { + http_request = new ActiveXObject('Msxml2.XMLHTTP'); + } catch (e) { + try { + http_request = new ActiveXObject('Microsoft.XMLHTTP'); + } catch (e) {} + } + } + if (!http_request) + throw 'Both getURL and XMLHttpRequest are undefined'; + http_request.onreadystatechange = function() { + if (http_request.readyState == 4) { + callback( { success : true, + content : http_request.responseText, + contentType : http_request.getResponseHeader("Content-Type") } ); + } + }; + http_request.open('GET', url, true); + http_request.send(null); + }; +} + +function outputrule(req) { + alert(req.content); +} +function fetch_new_rules() { + if(isPaused) + return; + if(isBusy) + return; + isBusy = true; + getURL('diag_logs_filter_dynamic.php?lastsawtime=' + lastsawtime, fetch_new_rules_callback); +} +function fetch_new_rules_callback(callback_data) { + if(isPaused) + return; + + var data_split; + var new_data_to_add = Array(); + var data = callback_data.content; + + data_split = data.split("\n"); + + for(var x=0; xtr'); + + // Number of rows to move by + var move = rows.length + data.length - nentries; + if (move < 0) + move = 0; + + if (isReverse == false) { + for (var i = move; i < rows.length; i++) { + jQuery(rows[i - move]).html(jQuery(rows[i]).html()); + } + + var tbody = jQuery('#filter-log-entries'); + for (var i = 0; i < data.length; i++) { + var rowIndex = rows.length - move + i; + if (rowIndex < rows.length) { + jQuery(rows[rowIndex]).html(data[i]); + } else { + jQuery(tbody).append('
                            a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/
                            ","
                            "],tr:[2,"","
                            "],col:[2,"","
                            "],td:[3,"","
                            "],_default:k.htmlSerialize?[0,"",""]:[1,"X
                            ","
                            "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("'); + this.iefix = $(this.update.id+'_iefix'); + } + if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50); + }, + + fixIEOverlapping: function() { + Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)}); + this.iefix.style.zIndex = 1; + this.update.style.zIndex = 2; + Element.show(this.iefix); + }, + + hide: function() { + this.stopIndicator(); + if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update); + if(this.iefix) Element.hide(this.iefix); + }, + + startIndicator: function() { + if(this.options.indicator) Element.show(this.options.indicator); + }, + + stopIndicator: function() { + if(this.options.indicator) Element.hide(this.options.indicator); + }, + + onKeyPress: function(event) { + if(this.active) + switch(event.keyCode) { + case Event.KEY_TAB: + case Event.KEY_RETURN: + this.selectEntry(); + Event.stop(event); + case Event.KEY_ESC: + this.hide(); + this.active = false; + Event.stop(event); + return; + case Event.KEY_LEFT: + case Event.KEY_RIGHT: + return; + case Event.KEY_UP: + this.markPrevious(); + this.render(); + Event.stop(event); + return; + case Event.KEY_DOWN: + this.markNext(); + this.render(); + Event.stop(event); + return; + } + else + if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || + (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return; + + this.changed = true; + this.hasFocus = true; + + if(this.observer) clearTimeout(this.observer); + this.observer = + setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000); + }, + + activate: function() { + this.changed = false; + this.hasFocus = true; + this.getUpdatedChoices(); + }, + + onHover: function(event) { + var element = Event.findElement(event, 'LI'); + if(this.index != element.autocompleteIndex) + { + this.index = element.autocompleteIndex; + this.render(); + } + Event.stop(event); + }, + + onClick: function(event) { + var element = Event.findElement(event, 'LI'); + this.index = element.autocompleteIndex; + this.selectEntry(); + this.hide(); + }, + + onBlur: function(event) { + // needed to make click events working + setTimeout(this.hide.bind(this), 250); + this.hasFocus = false; + this.active = false; + }, + + render: function() { + if(this.entryCount > 0) { + for (var i = 0; i < this.entryCount; i++) + this.index==i ? + Element.addClassName(this.getEntry(i),"selected") : + Element.removeClassName(this.getEntry(i),"selected"); + if(this.hasFocus) { + this.show(); + this.active = true; + } + } else { + this.active = false; + this.hide(); + } + }, + + markPrevious: function() { + if(this.index > 0) this.index--; + else this.index = this.entryCount-1; + this.getEntry(this.index).scrollIntoView(true); + }, + + markNext: function() { + if(this.index < this.entryCount-1) this.index++; + else this.index = 0; + this.getEntry(this.index).scrollIntoView(false); + }, + + getEntry: function(index) { + return this.update.firstChild.childNodes[index]; + }, + + getCurrentEntry: function() { + return this.getEntry(this.index); + }, + + selectEntry: function() { + this.active = false; + this.updateElement(this.getCurrentEntry()); + }, + + updateElement: function(selectedElement) { + if (this.options.updateElement) { + this.options.updateElement(selectedElement); + return; + } + var value = ''; + if (this.options.select) { + var nodes = $(selectedElement).select('.' + this.options.select) || []; + if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select); + } else + value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal'); + + var bounds = this.getTokenBounds(); + if (bounds[0] != -1) { + var newValue = this.element.value.substr(0, bounds[0]); + var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/); + if (whitespace) + newValue += whitespace[0]; + this.element.value = newValue + value + this.element.value.substr(bounds[1]); + } else { + this.element.value = value; + } + this.oldElementValue = this.element.value; + this.element.focus(); + + if (this.options.afterUpdateElement) + this.options.afterUpdateElement(this.element, selectedElement); + }, + + updateChoices: function(choices) { + if(!this.changed && this.hasFocus) { + this.update.innerHTML = choices; + Element.cleanWhitespace(this.update); + Element.cleanWhitespace(this.update.down()); + + if(this.update.firstChild && this.update.down().childNodes) { + this.entryCount = + this.update.down().childNodes.length; + for (var i = 0; i < this.entryCount; i++) { + var entry = this.getEntry(i); + entry.autocompleteIndex = i; + this.addObservers(entry); + } + } else { + this.entryCount = 0; + } + + this.stopIndicator(); + this.index = 0; + + if(this.entryCount==1 && this.options.autoSelect) { + this.selectEntry(); + this.hide(); + } else { + this.render(); + } + } + }, + + addObservers: function(element) { + Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this)); + Event.observe(element, "click", this.onClick.bindAsEventListener(this)); + }, + + onObserverEvent: function() { + this.changed = false; + this.tokenBounds = null; + if(this.getToken().length>=this.options.minChars) { + this.getUpdatedChoices(); + } else { + this.active = false; + this.hide(); + } + this.oldElementValue = this.element.value; + }, + + getToken: function() { + var bounds = this.getTokenBounds(); + return this.element.value.substring(bounds[0], bounds[1]).strip(); + }, + + getTokenBounds: function() { + if (null != this.tokenBounds) return this.tokenBounds; + var value = this.element.value; + if (value.strip().empty()) return [-1, 0]; + var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue); + var offset = (diff == this.oldElementValue.length ? 1 : 0); + var prevTokenPos = -1, nextTokenPos = value.length; + var tp; + for (var index = 0, l = this.options.tokens.length; index < l; ++index) { + tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1); + if (tp > prevTokenPos) prevTokenPos = tp; + tp = value.indexOf(this.options.tokens[index], diff + offset); + if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp; + } + return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]); + } +}); + +Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) { + var boundary = Math.min(newS.length, oldS.length); + for (var index = 0; index < boundary; ++index) + if (newS[index] != oldS[index]) + return index; + return boundary; +}; + +Ajax.Autocompleter = Class.create(Autocompleter.Base, { + initialize: function(element, update, url, options) { + this.baseInitialize(element, update, options); + this.options.asynchronous = true; + this.options.onComplete = this.onComplete.bind(this); + this.options.defaultParams = this.options.parameters || null; + this.url = url; + }, + + getUpdatedChoices: function() { + this.startIndicator(); + + var entry = encodeURIComponent(this.options.paramName) + '=' + + encodeURIComponent(this.getToken()); + + this.options.parameters = this.options.callback ? + this.options.callback(this.element, entry) : entry; + + if(this.options.defaultParams) + this.options.parameters += '&' + this.options.defaultParams; + + new Ajax.Request(this.url, this.options); + }, + + onComplete: function(request) { + this.updateChoices(request.responseText); + } +}); + +// The local array autocompleter. Used when you'd prefer to +// inject an array of autocompletion options into the page, rather +// than sending out Ajax queries, which can be quite slow sometimes. +// +// The constructor takes four parameters. The first two are, as usual, +// the id of the monitored textbox, and id of the autocompletion menu. +// The third is the array you want to autocomplete from, and the fourth +// is the options block. +// +// Extra local autocompletion options: +// - choices - How many autocompletion choices to offer +// +// - partialSearch - If false, the autocompleter will match entered +// text only at the beginning of strings in the +// autocomplete array. Defaults to true, which will +// match text at the beginning of any *word* in the +// strings in the autocomplete array. If you want to +// search anywhere in the string, additionally set +// the option fullSearch to true (default: off). +// +// - fullSsearch - Search anywhere in autocomplete array strings. +// +// - partialChars - How many characters to enter before triggering +// a partial match (unlike minChars, which defines +// how many characters are required to do any match +// at all). Defaults to 2. +// +// - ignoreCase - Whether to ignore case when autocompleting. +// Defaults to true. +// +// It's possible to pass in a custom function as the 'selector' +// option, if you prefer to write your own autocompletion logic. +// In that case, the other options above will not apply unless +// you support them. + +Autocompleter.Local = Class.create(Autocompleter.Base, { + initialize: function(element, update, array, options) { + this.baseInitialize(element, update, options); + this.options.array = array; + }, + + getUpdatedChoices: function() { + this.updateChoices(this.options.selector(this)); + }, + + setOptions: function(options) { + this.options = Object.extend({ + choices: 10, + partialSearch: true, + partialChars: 2, + ignoreCase: true, + fullSearch: false, + selector: function(instance) { + var ret = []; // Beginning matches + var partial = []; // Inside matches + var entry = instance.getToken(); + var count = 0; + + for (var i = 0; i < instance.options.array.length && + ret.length < instance.options.choices ; i++) { + + var elem = instance.options.array[i]; + var foundPos = instance.options.ignoreCase ? + elem.toLowerCase().indexOf(entry.toLowerCase()) : + elem.indexOf(entry); + + while (foundPos != -1) { + if (foundPos == 0 && elem.length != entry.length) { + ret.push("
                          • " + elem.substr(0, entry.length) + "" + + elem.substr(entry.length) + "
                          • "); + break; + } else if (entry.length >= instance.options.partialChars && + instance.options.partialSearch && foundPos != -1) { + if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) { + partial.push("
                          • " + elem.substr(0, foundPos) + "" + + elem.substr(foundPos, entry.length) + "" + elem.substr( + foundPos + entry.length) + "
                          • "); + break; + } + } + + foundPos = instance.options.ignoreCase ? + elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : + elem.indexOf(entry, foundPos + 1); + + } + } + if (partial.length) + ret = ret.concat(partial.slice(0, instance.options.choices - ret.length)); + return "
                              " + ret.join('') + "
                            "; + } + }, options || { }); + } +}); + +// AJAX in-place editor and collection editor +// Full rewrite by Christophe Porteneuve (April 2007). + +// Use this if you notice weird scrolling problems on some browsers, +// the DOM might be a bit confused when this gets called so do this +// waits 1 ms (with setTimeout) until it does the activation +Field.scrollFreeActivate = function(field) { + setTimeout(function() { + Field.activate(field); + }, 1); +}; + +Ajax.InPlaceEditor = Class.create({ + initialize: function(element, url, options) { + this.url = url; + this.element = element = $(element); + this.prepareOptions(); + this._controls = { }; + arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!! + Object.extend(this.options, options || { }); + if (!this.options.formId && this.element.id) { + this.options.formId = this.element.id + '-inplaceeditor'; + if ($(this.options.formId)) + this.options.formId = ''; + } + if (this.options.externalControl) + this.options.externalControl = $(this.options.externalControl); + if (!this.options.externalControl) + this.options.externalControlOnly = false; + this._originalBackground = this.element.getStyle('background-color') || 'transparent'; + this.element.title = this.options.clickToEditText; + this._boundCancelHandler = this.handleFormCancellation.bind(this); + this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this); + this._boundFailureHandler = this.handleAJAXFailure.bind(this); + this._boundSubmitHandler = this.handleFormSubmission.bind(this); + this._boundWrapperHandler = this.wrapUp.bind(this); + this.registerListeners(); + }, + checkForEscapeOrReturn: function(e) { + if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return; + if (Event.KEY_ESC == e.keyCode) + this.handleFormCancellation(e); + else if (Event.KEY_RETURN == e.keyCode) + this.handleFormSubmission(e); + }, + createControl: function(mode, handler, extraClasses) { + var control = this.options[mode + 'Control']; + var text = this.options[mode + 'Text']; + if ('button' == control) { + var btn = document.createElement('input'); + btn.type = 'submit'; + btn.value = text; + btn.className = 'editor_' + mode + '_button'; + if ('cancel' == mode) + btn.onclick = this._boundCancelHandler; + this._form.appendChild(btn); + this._controls[mode] = btn; + } else if ('link' == control) { + var link = document.createElement('a'); + link.href = '#'; + link.appendChild(document.createTextNode(text)); + link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler; + link.className = 'editor_' + mode + '_link'; + if (extraClasses) + link.className += ' ' + extraClasses; + this._form.appendChild(link); + this._controls[mode] = link; + } + }, + createEditField: function() { + var text = (this.options.loadTextURL ? this.options.loadingText : this.getText()); + var fld; + if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) { + fld = document.createElement('input'); + fld.type = 'text'; + var size = this.options.size || this.options.cols || 0; + if (0 < size) fld.size = size; + } else { + fld = document.createElement('textarea'); + fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows); + fld.cols = this.options.cols || 40; + } + fld.name = this.options.paramName; + fld.value = text; // No HTML breaks conversion anymore + fld.className = 'editor_field'; + if (this.options.submitOnBlur) + fld.onblur = this._boundSubmitHandler; + this._controls.editor = fld; + if (this.options.loadTextURL) + this.loadExternalText(); + this._form.appendChild(this._controls.editor); + }, + createForm: function() { + var ipe = this; + function addText(mode, condition) { + var text = ipe.options['text' + mode + 'Controls']; + if (!text || condition === false) return; + ipe._form.appendChild(document.createTextNode(text)); + }; + this._form = $(document.createElement('form')); + this._form.id = this.options.formId; + this._form.addClassName(this.options.formClassName); + this._form.onsubmit = this._boundSubmitHandler; + this.createEditField(); + if ('textarea' == this._controls.editor.tagName.toLowerCase()) + this._form.appendChild(document.createElement('br')); + if (this.options.onFormCustomization) + this.options.onFormCustomization(this, this._form); + addText('Before', this.options.okControl || this.options.cancelControl); + this.createControl('ok', this._boundSubmitHandler); + addText('Between', this.options.okControl && this.options.cancelControl); + this.createControl('cancel', this._boundCancelHandler, 'editor_cancel'); + addText('After', this.options.okControl || this.options.cancelControl); + }, + destroy: function() { + if (this._oldInnerHTML) + this.element.innerHTML = this._oldInnerHTML; + this.leaveEditMode(); + this.unregisterListeners(); + }, + enterEditMode: function(e) { + if (this._saving || this._editing) return; + this._editing = true; + this.triggerCallback('onEnterEditMode'); + if (this.options.externalControl) + this.options.externalControl.hide(); + this.element.hide(); + this.createForm(); + this.element.parentNode.insertBefore(this._form, this.element); + if (!this.options.loadTextURL) + this.postProcessEditField(); + if (e) Event.stop(e); + }, + enterHover: function(e) { + if (this.options.hoverClassName) + this.element.addClassName(this.options.hoverClassName); + if (this._saving) return; + this.triggerCallback('onEnterHover'); + }, + getText: function() { + return this.element.innerHTML.unescapeHTML(); + }, + handleAJAXFailure: function(transport) { + this.triggerCallback('onFailure', transport); + if (this._oldInnerHTML) { + this.element.innerHTML = this._oldInnerHTML; + this._oldInnerHTML = null; + } + }, + handleFormCancellation: function(e) { + this.wrapUp(); + if (e) Event.stop(e); + }, + handleFormSubmission: function(e) { + var form = this._form; + var value = $F(this._controls.editor); + this.prepareSubmission(); + var params = this.options.callback(form, value) || ''; + if (Object.isString(params)) + params = params.toQueryParams(); + params.editorId = this.element.id; + if (this.options.htmlResponse) { + var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions); + Object.extend(options, { + parameters: params, + onComplete: this._boundWrapperHandler, + onFailure: this._boundFailureHandler + }); + new Ajax.Updater({ success: this.element }, this.url, options); + } else { + var options = Object.extend({ method: 'get' }, this.options.ajaxOptions); + Object.extend(options, { + parameters: params, + onComplete: this._boundWrapperHandler, + onFailure: this._boundFailureHandler + }); + new Ajax.Request(this.url, options); + } + if (e) Event.stop(e); + }, + leaveEditMode: function() { + this.element.removeClassName(this.options.savingClassName); + this.removeForm(); + this.leaveHover(); + this.element.style.backgroundColor = this._originalBackground; + this.element.show(); + if (this.options.externalControl) + this.options.externalControl.show(); + this._saving = false; + this._editing = false; + this._oldInnerHTML = null; + this.triggerCallback('onLeaveEditMode'); + }, + leaveHover: function(e) { + if (this.options.hoverClassName) + this.element.removeClassName(this.options.hoverClassName); + if (this._saving) return; + this.triggerCallback('onLeaveHover'); + }, + loadExternalText: function() { + this._form.addClassName(this.options.loadingClassName); + this._controls.editor.disabled = true; + var options = Object.extend({ method: 'get' }, this.options.ajaxOptions); + Object.extend(options, { + parameters: 'editorId=' + encodeURIComponent(this.element.id), + onComplete: Prototype.emptyFunction, + onSuccess: function(transport) { + this._form.removeClassName(this.options.loadingClassName); + var text = transport.responseText; + if (this.options.stripLoadedTextTags) + text = text.stripTags(); + this._controls.editor.value = text; + this._controls.editor.disabled = false; + this.postProcessEditField(); + }.bind(this), + onFailure: this._boundFailureHandler + }); + new Ajax.Request(this.options.loadTextURL, options); + }, + postProcessEditField: function() { + var fpc = this.options.fieldPostCreation; + if (fpc) + $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate'](); + }, + prepareOptions: function() { + this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions); + Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks); + [this._extraDefaultOptions].flatten().compact().each(function(defs) { + Object.extend(this.options, defs); + }.bind(this)); + }, + prepareSubmission: function() { + this._saving = true; + this.removeForm(); + this.leaveHover(); + this.showSaving(); + }, + registerListeners: function() { + this._listeners = { }; + var listener; + $H(Ajax.InPlaceEditor.Listeners).each(function(pair) { + listener = this[pair.value].bind(this); + this._listeners[pair.key] = listener; + if (!this.options.externalControlOnly) + this.element.observe(pair.key, listener); + if (this.options.externalControl) + this.options.externalControl.observe(pair.key, listener); + }.bind(this)); + }, + removeForm: function() { + if (!this._form) return; + this._form.remove(); + this._form = null; + this._controls = { }; + }, + showSaving: function() { + this._oldInnerHTML = this.element.innerHTML; + this.element.innerHTML = this.options.savingText; + this.element.addClassName(this.options.savingClassName); + this.element.style.backgroundColor = this._originalBackground; + this.element.show(); + }, + triggerCallback: function(cbName, arg) { + if ('function' == typeof this.options[cbName]) { + this.options[cbName](this, arg); + } + }, + unregisterListeners: function() { + $H(this._listeners).each(function(pair) { + if (!this.options.externalControlOnly) + this.element.stopObserving(pair.key, pair.value); + if (this.options.externalControl) + this.options.externalControl.stopObserving(pair.key, pair.value); + }.bind(this)); + }, + wrapUp: function(transport) { + this.leaveEditMode(); + // Can't use triggerCallback due to backward compatibility: requires + // binding + direct element + this._boundComplete(transport, this.element); + } +}); + +Object.extend(Ajax.InPlaceEditor.prototype, { + dispose: Ajax.InPlaceEditor.prototype.destroy +}); + +Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, { + initialize: function($super, element, url, options) { + this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions; + $super(element, url, options); + }, + + createEditField: function() { + var list = document.createElement('select'); + list.name = this.options.paramName; + list.size = 1; + this._controls.editor = list; + this._collection = this.options.collection || []; + if (this.options.loadCollectionURL) + this.loadCollection(); + else + this.checkForExternalText(); + this._form.appendChild(this._controls.editor); + }, + + loadCollection: function() { + this._form.addClassName(this.options.loadingClassName); + this.showLoadingText(this.options.loadingCollectionText); + var options = Object.extend({ method: 'get' }, this.options.ajaxOptions); + Object.extend(options, { + parameters: 'editorId=' + encodeURIComponent(this.element.id), + onComplete: Prototype.emptyFunction, + onSuccess: function(transport) { + var js = transport.responseText.strip(); + if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check + throw('Server returned an invalid collection representation.'); + this._collection = eval(js); + this.checkForExternalText(); + }.bind(this), + onFailure: this.onFailure + }); + new Ajax.Request(this.options.loadCollectionURL, options); + }, + + showLoadingText: function(text) { + this._controls.editor.disabled = true; + var tempOption = this._controls.editor.firstChild; + if (!tempOption) { + tempOption = document.createElement('option'); + tempOption.value = ''; + this._controls.editor.appendChild(tempOption); + tempOption.selected = true; + } + tempOption.update((text || '').stripScripts().stripTags()); + }, + + checkForExternalText: function() { + this._text = this.getText(); + if (this.options.loadTextURL) + this.loadExternalText(); + else + this.buildOptionList(); + }, + + loadExternalText: function() { + this.showLoadingText(this.options.loadingText); + var options = Object.extend({ method: 'get' }, this.options.ajaxOptions); + Object.extend(options, { + parameters: 'editorId=' + encodeURIComponent(this.element.id), + onComplete: Prototype.emptyFunction, + onSuccess: function(transport) { + this._text = transport.responseText.strip(); + this.buildOptionList(); + }.bind(this), + onFailure: this.onFailure + }); + new Ajax.Request(this.options.loadTextURL, options); + }, + + buildOptionList: function() { + this._form.removeClassName(this.options.loadingClassName); + this._collection = this._collection.map(function(entry) { + return 2 === entry.length ? entry : [entry, entry].flatten(); + }); + var marker = ('value' in this.options) ? this.options.value : this._text; + var textFound = this._collection.any(function(entry) { + return entry[0] == marker; + }.bind(this)); + this._controls.editor.update(''); + var option; + this._collection.each(function(entry, index) { + option = document.createElement('option'); + option.value = entry[0]; + option.selected = textFound ? entry[0] == marker : 0 == index; + option.appendChild(document.createTextNode(entry[1])); + this._controls.editor.appendChild(option); + }.bind(this)); + this._controls.editor.disabled = false; + Field.scrollFreeActivate(this._controls.editor); + } +}); + +//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! **** +//**** This only exists for a while, in order to let **** +//**** users adapt to the new API. Read up on the new **** +//**** API and convert your code to it ASAP! **** + +Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) { + if (!options) return; + function fallback(name, expr) { + if (name in options || expr === undefined) return; + options[name] = expr; + }; + fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' : + options.cancelLink == options.cancelButton == false ? false : undefined))); + fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' : + options.okLink == options.okButton == false ? false : undefined))); + fallback('highlightColor', options.highlightcolor); + fallback('highlightEndColor', options.highlightendcolor); +}; + +Object.extend(Ajax.InPlaceEditor, { + DefaultOptions: { + ajaxOptions: { }, + autoRows: 3, // Use when multi-line w/ rows == 1 + cancelControl: 'link', // 'link'|'button'|false + cancelText: 'cancel', + clickToEditText: 'Click to edit', + externalControl: null, // id|elt + externalControlOnly: false, + fieldPostCreation: 'activate', // 'activate'|'focus'|false + formClassName: 'inplaceeditor-form', + formId: null, // id|elt + highlightColor: '#ffff99', + highlightEndColor: '#ffffff', + hoverClassName: '', + htmlResponse: true, + loadingClassName: 'inplaceeditor-loading', + loadingText: 'Loading...', + okControl: 'button', // 'link'|'button'|false + okText: 'ok', + paramName: 'value', + rows: 1, // If 1 and multi-line, uses autoRows + savingClassName: 'inplaceeditor-saving', + savingText: 'Saving...', + size: 0, + stripLoadedTextTags: false, + submitOnBlur: false, + textAfterControls: '', + textBeforeControls: '', + textBetweenControls: '' + }, + DefaultCallbacks: { + callback: function(form) { + return Form.serialize(form); + }, + onComplete: function(transport, element) { + // For backward compatibility, this one is bound to the IPE, and passes + // the element directly. It was too often customized, so we don't break it. + new Effect.Highlight(element, { + startcolor: this.options.highlightColor, keepBackgroundImage: true }); + }, + onEnterEditMode: null, + onEnterHover: function(ipe) { + ipe.element.style.backgroundColor = ipe.options.highlightColor; + if (ipe._effect) + ipe._effect.cancel(); + }, + onFailure: function(transport, ipe) { + alert('Error communication with the server: ' + transport.responseText.stripTags()); + }, + onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls. + onLeaveEditMode: null, + onLeaveHover: function(ipe) { + ipe._effect = new Effect.Highlight(ipe.element, { + startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor, + restorecolor: ipe._originalBackground, keepBackgroundImage: true + }); + } + }, + Listeners: { + click: 'enterEditMode', + keydown: 'checkForEscapeOrReturn', + mouseover: 'enterHover', + mouseout: 'leaveHover' + } +}); + +Ajax.InPlaceCollectionEditor.DefaultOptions = { + loadingCollectionText: 'Loading options...' +}; + +// Delayed observer, like Form.Element.Observer, +// but waits for delay after last key input +// Ideal for live-search fields + +Form.Element.DelayedObserver = Class.create({ + initialize: function(element, delay, callback) { + this.delay = delay || 0.5; + this.element = $(element); + this.callback = callback; + this.timer = null; + this.lastValue = $F(this.element); + Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this)); + }, + delayedListener: function(event) { + if(this.lastValue == $F(this.element)) return; + if(this.timer) clearTimeout(this.timer); + this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000); + this.lastValue = $F(this.element); + }, + onTimerEvent: function() { + this.timer = null; + this.callback(this.element, $F(this.element)); + } +}); \ No newline at end of file diff --git a/usr/local/www/javascript/scriptaculous/dragdrop.js b/usr/local/www/javascript/scriptaculous/dragdrop.js new file mode 100644 index 000000000..452601e24 --- /dev/null +++ b/usr/local/www/javascript/scriptaculous/dragdrop.js @@ -0,0 +1,974 @@ +// script.aculo.us dragdrop.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009 + +// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) +// +// script.aculo.us is freely distributable under the terms of an MIT-style license. +// For details, see the script.aculo.us web site: http://script.aculo.us/ + +if(Object.isUndefined(Effect)) + throw("dragdrop.js requires including script.aculo.us' effects.js library"); + +var Droppables = { + drops: [], + + remove: function(element) { + this.drops = this.drops.reject(function(d) { return d.element==$(element); }); + }, + + add: function(element) { + element = $(element); + var options = Object.extend({ + greedy: true, + hoverclass: null, + tree: false + }, arguments[1] || { }); + + // cache containers + if(options.containment) { + options._containers = []; + var containment = options.containment; + if(Object.isArray(containment)) { + containment.each( function(c) { options._containers.push($(c)); }); + } else { + options._containers.push($(containment)); + } + } + + if(options.accept) options.accept = [options.accept].flatten(); + + Element.makePositioned(element); // fix IE + options.element = element; + + this.drops.push(options); + }, + + findDeepestChild: function(drops) { + deepest = drops[0]; + + for (i = 1; i < drops.length; ++i) + if (Element.isParent(drops[i].element, deepest.element)) + deepest = drops[i]; + + return deepest; + }, + + isContained: function(element, drop) { + var containmentNode; + if(drop.tree) { + containmentNode = element.treeNode; + } else { + containmentNode = element.parentNode; + } + return drop._containers.detect(function(c) { return containmentNode == c; }); + }, + + isAffected: function(point, element, drop) { + return ( + (drop.element!=element) && + ((!drop._containers) || + this.isContained(element, drop)) && + ((!drop.accept) || + (Element.classNames(element).detect( + function(v) { return drop.accept.include(v); } ) )) && + Position.within(drop.element, point[0], point[1]) ); + }, + + deactivate: function(drop) { + if(drop.hoverclass) + Element.removeClassName(drop.element, drop.hoverclass); + this.last_active = null; + }, + + activate: function(drop) { + if(drop.hoverclass) + Element.addClassName(drop.element, drop.hoverclass); + this.last_active = drop; + }, + + show: function(point, element) { + if(!this.drops.length) return; + var drop, affected = []; + + this.drops.each( function(drop) { + if(Droppables.isAffected(point, element, drop)) + affected.push(drop); + }); + + if(affected.length>0) + drop = Droppables.findDeepestChild(affected); + + if(this.last_active && this.last_active != drop) this.deactivate(this.last_active); + if (drop) { + Position.within(drop.element, point[0], point[1]); + if(drop.onHover) + drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element)); + + if (drop != this.last_active) Droppables.activate(drop); + } + }, + + fire: function(event, element) { + if(!this.last_active) return; + Position.prepare(); + + if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active)) + if (this.last_active.onDrop) { + this.last_active.onDrop(element, this.last_active.element, event); + return true; + } + }, + + reset: function() { + if(this.last_active) + this.deactivate(this.last_active); + } +}; + +var Draggables = { + drags: [], + observers: [], + + register: function(draggable) { + if(this.drags.length == 0) { + this.eventMouseUp = this.endDrag.bindAsEventListener(this); + this.eventMouseMove = this.updateDrag.bindAsEventListener(this); + this.eventKeypress = this.keyPress.bindAsEventListener(this); + + Event.observe(document, "mouseup", this.eventMouseUp); + Event.observe(document, "mousemove", this.eventMouseMove); + Event.observe(document, "keypress", this.eventKeypress); + } + this.drags.push(draggable); + }, + + unregister: function(draggable) { + this.drags = this.drags.reject(function(d) { return d==draggable; }); + if(this.drags.length == 0) { + Event.stopObserving(document, "mouseup", this.eventMouseUp); + Event.stopObserving(document, "mousemove", this.eventMouseMove); + Event.stopObserving(document, "keypress", this.eventKeypress); + } + }, + + activate: function(draggable) { + if(draggable.options.delay) { + this._timeout = setTimeout(function() { + Draggables._timeout = null; + window.focus(); + Draggables.activeDraggable = draggable; + }.bind(this), draggable.options.delay); + } else { + window.focus(); // allows keypress events if window isn't currently focused, fails for Safari + this.activeDraggable = draggable; + } + }, + + deactivate: function() { + this.activeDraggable = null; + }, + + updateDrag: function(event) { + if(!this.activeDraggable) return; + var pointer = [Event.pointerX(event), Event.pointerY(event)]; + // Mozilla-based browsers fire successive mousemove events with + // the same coordinates, prevent needless redrawing (moz bug?) + if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return; + this._lastPointer = pointer; + + this.activeDraggable.updateDrag(event, pointer); + }, + + endDrag: function(event) { + if(this._timeout) { + clearTimeout(this._timeout); + this._timeout = null; + } + if(!this.activeDraggable) return; + this._lastPointer = null; + this.activeDraggable.endDrag(event); + this.activeDraggable = null; + }, + + keyPress: function(event) { + if(this.activeDraggable) + this.activeDraggable.keyPress(event); + }, + + addObserver: function(observer) { + this.observers.push(observer); + this._cacheObserverCallbacks(); + }, + + removeObserver: function(element) { // element instead of observer fixes mem leaks + this.observers = this.observers.reject( function(o) { return o.element==element; }); + this._cacheObserverCallbacks(); + }, + + notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag' + if(this[eventName+'Count'] > 0) + this.observers.each( function(o) { + if(o[eventName]) o[eventName](eventName, draggable, event); + }); + if(draggable.options[eventName]) draggable.options[eventName](draggable, event); + }, + + _cacheObserverCallbacks: function() { + ['onStart','onEnd','onDrag'].each( function(eventName) { + Draggables[eventName+'Count'] = Draggables.observers.select( + function(o) { return o[eventName]; } + ).length; + }); + } +}; + +/*--------------------------------------------------------------------------*/ + +var Draggable = Class.create({ + initialize: function(element) { + var defaults = { + handle: false, + reverteffect: function(element, top_offset, left_offset) { + var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; + new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur, + queue: {scope:'_draggable', position:'end'} + }); + }, + endeffect: function(element) { + var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0; + new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, + queue: {scope:'_draggable', position:'end'}, + afterFinish: function(){ + Draggable._dragging[element] = false; + } + }); + }, + zindex: 1000, + revert: false, + quiet: false, + scroll: false, + scrollSensitivity: 20, + scrollSpeed: 15, + snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] } + delay: 0 + }; + + if(!arguments[1] || Object.isUndefined(arguments[1].endeffect)) + Object.extend(defaults, { + starteffect: function(element) { + element._opacity = Element.getOpacity(element); + Draggable._dragging[element] = true; + new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); + } + }); + + var options = Object.extend(defaults, arguments[1] || { }); + + this.element = $(element); + + if(options.handle && Object.isString(options.handle)) + this.handle = this.element.down('.'+options.handle, 0); + + if(!this.handle) this.handle = $(options.handle); + if(!this.handle) this.handle = this.element; + + if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) { + options.scroll = $(options.scroll); + this._isScrollChild = Element.childOf(this.element, options.scroll); + } + + Element.makePositioned(this.element); // fix IE + + this.options = options; + this.dragging = false; + + this.eventMouseDown = this.initDrag.bindAsEventListener(this); + Event.observe(this.handle, "mousedown", this.eventMouseDown); + + Draggables.register(this); + }, + + destroy: function() { + Event.stopObserving(this.handle, "mousedown", this.eventMouseDown); + Draggables.unregister(this); + }, + + currentDelta: function() { + return([ + parseInt(Element.getStyle(this.element,'left') || '0'), + parseInt(Element.getStyle(this.element,'top') || '0')]); + }, + + initDrag: function(event) { + if(!Object.isUndefined(Draggable._dragging[this.element]) && + Draggable._dragging[this.element]) return; + if(Event.isLeftClick(event)) { + // abort on form elements, fixes a Firefox issue + var src = Event.element(event); + if((tag_name = src.tagName.toUpperCase()) && ( + tag_name=='input' || + tag_name=='select' || + tag_name=='option' || + tag_name=='button' || + tag_name=='textarea')) return; + + var pointer = [Event.pointerX(event), Event.pointerY(event)]; + var pos = this.element.cumulativeOffset(); + this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]); }); + + Draggables.activate(this); + Event.stop(event); + } + }, + + startDrag: function(event) { + this.dragging = true; + if(!this.delta) + this.delta = this.currentDelta(); + + if(this.options.zindex) { + this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0); + this.element.style.zIndex = this.options.zindex; + } + + if(this.options.ghosting) { + this._clone = this.element.cloneNode(true); + this._originallyAbsolute = (this.element.getStyle('position') == 'absolute'); + if (!this._originallyAbsolute) + Position.absolutize(this.element); + this.element.parentNode.insertBefore(this._clone, this.element); + } + + if(this.options.scroll) { + if (this.options.scroll == window) { + var where = this._getWindowScroll(this.options.scroll); + this.originalScrollLeft = where.left; + this.originalScrollTop = where.top; + } else { + this.originalScrollLeft = this.options.scroll.scrollLeft; + this.originalScrollTop = this.options.scroll.scrollTop; + } + } + + Draggables.notify('onStart', this, event); + + if(this.options.starteffect) this.options.starteffect(this.element); + }, + + updateDrag: function(event, pointer) { + if(!this.dragging) this.startDrag(event); + + if(!this.options.quiet){ + Position.prepare(); + Droppables.show(pointer, this.element); + } + + Draggables.notify('onDrag', this, event); + + this.draw(pointer); + if(this.options.change) this.options.change(this); + + if(this.options.scroll) { + this.stopScrolling(); + + var p; + if (this.options.scroll == window) { + with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; } + } else { + p = Position.page(this.options.scroll); + p[0] += this.options.scroll.scrollLeft + Position.deltaX; + p[1] += this.options.scroll.scrollTop + Position.deltaY; + p.push(p[0]+this.options.scroll.offsetWidth); + p.push(p[1]+this.options.scroll.offsetHeight); + } + var speed = [0,0]; + if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity); + if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity); + if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity); + if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity); + this.startScrolling(speed); + } + + // fix AppleWebKit rendering + if(Prototype.Browser.WebKit) window.scrollBy(0,0); + + Event.stop(event); + }, + + finishDrag: function(event, success) { + this.dragging = false; + + if(this.options.quiet){ + Position.prepare(); + var pointer = [Event.pointerX(event), Event.pointerY(event)]; + Droppables.show(pointer, this.element); + } + + if(this.options.ghosting) { + if (!this._originallyAbsolute) + Position.relativize(this.element); + delete this._originallyAbsolute; + Element.remove(this._clone); + this._clone = null; + } + + var dropped = false; + if(success) { + dropped = Droppables.fire(event, this.element); + if (!dropped) dropped = false; + } + if(dropped && this.options.onDropped) this.options.onDropped(this.element); + Draggables.notify('onEnd', this, event); + + var revert = this.options.revert; + if(revert && Object.isFunction(revert)) revert = revert(this.element); + + var d = this.currentDelta(); + if(revert && this.options.reverteffect) { + if (dropped == 0 || revert != 'failure') + this.options.reverteffect(this.element, + d[1]-this.delta[1], d[0]-this.delta[0]); + } else { + this.delta = d; + } + + if(this.options.zindex) + this.element.style.zIndex = this.originalZ; + + if(this.options.endeffect) + this.options.endeffect(this.element); + + Draggables.deactivate(this); + Droppables.reset(); + }, + + keyPress: function(event) { + if(event.keyCode!=Event.KEY_ESC) return; + this.finishDrag(event, false); + Event.stop(event); + }, + + endDrag: function(event) { + if(!this.dragging) return; + this.stopScrolling(); + this.finishDrag(event, true); + Event.stop(event); + }, + + draw: function(point) { + var pos = this.element.cumulativeOffset(); + if(this.options.ghosting) { + var r = Position.realOffset(this.element); + pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY; + } + + var d = this.currentDelta(); + pos[0] -= d[0]; pos[1] -= d[1]; + + if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) { + pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft; + pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop; + } + + var p = [0,1].map(function(i){ + return (point[i]-pos[i]-this.offset[i]); + }.bind(this)); + + if(this.options.snap) { + if(Object.isFunction(this.options.snap)) { + p = this.options.snap(p[0],p[1],this); + } else { + if(Object.isArray(this.options.snap)) { + p = p.map( function(v, i) { + return (v/this.options.snap[i]).round()*this.options.snap[i]; }.bind(this)); + } else { + p = p.map( function(v) { + return (v/this.options.snap).round()*this.options.snap; }.bind(this)); + } + }} + + var style = this.element.style; + if((!this.options.constraint) || (this.options.constraint=='horizontal')) + style.left = p[0] + "px"; + if((!this.options.constraint) || (this.options.constraint=='vertical')) + style.top = p[1] + "px"; + + if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering + }, + + stopScrolling: function() { + if(this.scrollInterval) { + clearInterval(this.scrollInterval); + this.scrollInterval = null; + Draggables._lastScrollPointer = null; + } + }, + + startScrolling: function(speed) { + if(!(speed[0] || speed[1])) return; + this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed]; + this.lastScrolled = new Date(); + this.scrollInterval = setInterval(this.scroll.bind(this), 10); + }, + + scroll: function() { + var current = new Date(); + var delta = current - this.lastScrolled; + this.lastScrolled = current; + if(this.options.scroll == window) { + with (this._getWindowScroll(this.options.scroll)) { + if (this.scrollSpeed[0] || this.scrollSpeed[1]) { + var d = delta / 1000; + this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] ); + } + } + } else { + this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; + this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; + } + + Position.prepare(); + Droppables.show(Draggables._lastPointer, this.element); + Draggables.notify('onDrag', this); + if (this._isScrollChild) { + Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); + Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; + Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; + if (Draggables._lastScrollPointer[0] < 0) + Draggables._lastScrollPointer[0] = 0; + if (Draggables._lastScrollPointer[1] < 0) + Draggables._lastScrollPointer[1] = 0; + this.draw(Draggables._lastScrollPointer); + } + + if(this.options.change) this.options.change(this); + }, + + _getWindowScroll: function(w) { + var T, L, W, H; + with (w.document) { + if (w.document.documentElement && documentElement.scrollTop) { + T = documentElement.scrollTop; + L = documentElement.scrollLeft; + } else if (w.document.body) { + T = body.scrollTop; + L = body.scrollLeft; + } + if (w.innerWidth) { + W = w.innerWidth; + H = w.innerHeight; + } else if (w.document.documentElement && documentElement.clientWidth) { + W = documentElement.clientWidth; + H = documentElement.clientHeight; + } else { + W = body.offsetWidth; + H = body.offsetHeight; + } + } + return { top: T, left: L, width: W, height: H }; + } +}); + +Draggable._dragging = { }; + +/*--------------------------------------------------------------------------*/ + +var SortableObserver = Class.create({ + initialize: function(element, observer) { + this.element = $(element); + this.observer = observer; + this.lastValue = Sortable.serialize(this.element); + }, + + onStart: function() { + this.lastValue = Sortable.serialize(this.element); + }, + + onEnd: function() { + Sortable.unmark(); + if(this.lastValue != Sortable.serialize(this.element)) + this.observer(this.element); + } +}); + +var Sortable = { + SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/, + + sortables: { }, + + _findRootElement: function(element) { + while (element.tagName.toUpperCase() != "BODY") { + if(element.id && Sortable.sortables[element.id]) return element; + element = element.parentNode; + } + }, + + options: function(element) { + element = Sortable._findRootElement($(element)); + if(!element) return; + return Sortable.sortables[element.id]; + }, + + destroy: function(element){ + element = $(element); + var s = Sortable.sortables[element.id]; + + if(s) { + Draggables.removeObserver(s.element); + s.droppables.each(function(d){ Droppables.remove(d); }); + s.draggables.invoke('destroy'); + + delete Sortable.sortables[s.element.id]; + } + }, + + create: function(element) { + element = $(element); + var options = Object.extend({ + element: element, + tag: 'li', // assumes li children, override with tag: 'tagname' + dropOnEmpty: false, + tree: false, + treeTag: 'ul', + overlap: 'vertical', // one of 'vertical', 'horizontal' + constraint: 'vertical', // one of 'vertical', 'horizontal', false + containment: element, // also takes array of elements (or id's); or false + handle: false, // or a CSS class + only: false, + delay: 0, + hoverclass: null, + ghosting: false, + quiet: false, + scroll: false, + scrollSensitivity: 20, + scrollSpeed: 15, + format: this.SERIALIZE_RULE, + + // these take arrays of elements or ids and can be + // used for better initialization performance + elements: false, + handles: false, + + onChange: Prototype.emptyFunction, + onUpdate: Prototype.emptyFunction + }, arguments[1] || { }); + + // clear any old sortable with same element + this.destroy(element); + + // build options for the draggables + var options_for_draggable = { + revert: true, + quiet: options.quiet, + scroll: options.scroll, + scrollSpeed: options.scrollSpeed, + scrollSensitivity: options.scrollSensitivity, + delay: options.delay, + ghosting: options.ghosting, + constraint: options.constraint, + handle: options.handle }; + + if(options.starteffect) + options_for_draggable.starteffect = options.starteffect; + + if(options.reverteffect) + options_for_draggable.reverteffect = options.reverteffect; + else + if(options.ghosting) options_for_draggable.reverteffect = function(element) { + element.style.top = 0; + element.style.left = 0; + }; + + if(options.endeffect) + options_for_draggable.endeffect = options.endeffect; + + if(options.zindex) + options_for_draggable.zindex = options.zindex; + + // build options for the droppables + var options_for_droppable = { + overlap: options.overlap, + containment: options.containment, + tree: options.tree, + hoverclass: options.hoverclass, + onHover: Sortable.onHover + }; + + var options_for_tree = { + onHover: Sortable.onEmptyHover, + overlap: options.overlap, + containment: options.containment, + hoverclass: options.hoverclass + }; + + // fix for gecko engine + Element.cleanWhitespace(element); + + options.draggables = []; + options.droppables = []; + + // drop on empty handling + if(options.dropOnEmpty || options.tree) { + Droppables.add(element, options_for_tree); + options.droppables.push(element); + } + + (options.elements || this.findElements(element, options) || []).each( function(e,i) { + var handle = options.handles ? $(options.handles[i]) : + (options.handle ? $(e).select('.' + options.handle)[0] : e); + options.draggables.push( + new Draggable(e, Object.extend(options_for_draggable, { handle: handle }))); + Droppables.add(e, options_for_droppable); + if(options.tree) e.treeNode = element; + options.droppables.push(e); + }); + + if(options.tree) { + (Sortable.findTreeElements(element, options) || []).each( function(e) { + Droppables.add(e, options_for_tree); + e.treeNode = element; + options.droppables.push(e); + }); + } + + // keep reference + this.sortables[element.identify()] = options; + + // for onupdate + Draggables.addObserver(new SortableObserver(element, options.onUpdate)); + + }, + + // return all suitable-for-sortable elements in a guaranteed order + findElements: function(element, options) { + return Element.findChildren( + element, options.only, options.tree ? true : false, options.tag); + }, + + findTreeElements: function(element, options) { + return Element.findChildren( + element, options.only, options.tree ? true : false, options.treeTag); + }, + + onHover: function(element, dropon, overlap) { + if(Element.isParent(dropon, element)) return; + + if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) { + return; + } else if(overlap>0.5) { + Sortable.mark(dropon, 'before'); + if(dropon.previousSibling != element) { + var oldParentNode = element.parentNode; + element.style.visibility = "hidden"; // fix gecko rendering + dropon.parentNode.insertBefore(element, dropon); + if(dropon.parentNode!=oldParentNode) + Sortable.options(oldParentNode).onChange(element); + Sortable.options(dropon.parentNode).onChange(element); + } + } else { + Sortable.mark(dropon, 'after'); + var nextElement = dropon.nextSibling || null; + if(nextElement != element) { + var oldParentNode = element.parentNode; + element.style.visibility = "hidden"; // fix gecko rendering + dropon.parentNode.insertBefore(element, nextElement); + if(dropon.parentNode!=oldParentNode) + Sortable.options(oldParentNode).onChange(element); + Sortable.options(dropon.parentNode).onChange(element); + } + } + }, + + onEmptyHover: function(element, dropon, overlap) { + var oldParentNode = element.parentNode; + var droponOptions = Sortable.options(dropon); + + if(!Element.isParent(dropon, element)) { + var index; + + var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only}); + var child = null; + + if(children) { + var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap); + + for (index = 0; index < children.length; index += 1) { + if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) { + offset -= Element.offsetSize (children[index], droponOptions.overlap); + } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) { + child = index + 1 < children.length ? children[index + 1] : null; + break; + } else { + child = children[index]; + break; + } + } + } + + dropon.insertBefore(element, child); + + Sortable.options(oldParentNode).onChange(element); + droponOptions.onChange(element); + } + }, + + unmark: function() { + if(Sortable._marker) Sortable._marker.hide(); + }, + + mark: function(dropon, position) { + // mark on ghosting only + var sortable = Sortable.options(dropon.parentNode); + if(sortable && !sortable.ghosting) return; + + if(!Sortable._marker) { + Sortable._marker = + ($('dropmarker') || Element.extend(document.createElement('DIV'))). + hide().addClassName('dropmarker').setStyle({position:'absolute'}); + document.getElementsByTagName("body").item(0).appendChild(Sortable._marker); + } + var offsets = dropon.cumulativeOffset(); + Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'}); + + if(position=='after') + if(sortable.overlap == 'horizontal') + Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'}); + else + Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'}); + + Sortable._marker.show(); + }, + + _tree: function(element, options, parent) { + var children = Sortable.findElements(element, options) || []; + + for (var i = 0; i < children.length; ++i) { + var match = children[i].id.match(options.format); + + if (!match) continue; + + var child = { + id: encodeURIComponent(match ? match[1] : null), + element: element, + parent: parent, + children: [], + position: parent.children.length, + container: $(children[i]).down(options.treeTag) + }; + + /* Get the element containing the children and recurse over it */ + if (child.container) + this._tree(child.container, options, child); + + parent.children.push (child); + } + + return parent; + }, + + tree: function(element) { + element = $(element); + var sortableOptions = this.options(element); + var options = Object.extend({ + tag: sortableOptions.tag, + treeTag: sortableOptions.treeTag, + only: sortableOptions.only, + name: element.id, + format: sortableOptions.format + }, arguments[1] || { }); + + var root = { + id: null, + parent: null, + children: [], + container: element, + position: 0 + }; + + return Sortable._tree(element, options, root); + }, + + /* Construct a [i] index for a particular node */ + _constructIndex: function(node) { + var index = ''; + do { + if (node.id) index = '[' + node.position + ']' + index; + } while ((node = node.parent) != null); + return index; + }, + + sequence: function(element) { + element = $(element); + var options = Object.extend(this.options(element), arguments[1] || { }); + + return $(this.findElements(element, options) || []).map( function(item) { + return item.id.match(options.format) ? item.id.match(options.format)[1] : ''; + }); + }, + + setSequence: function(element, new_sequence) { + element = $(element); + var options = Object.extend(this.options(element), arguments[2] || { }); + + var nodeMap = { }; + this.findElements(element, options).each( function(n) { + if (n.id.match(options.format)) + nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode]; + n.parentNode.removeChild(n); + }); + + new_sequence.each(function(ident) { + var n = nodeMap[ident]; + if (n) { + n[1].appendChild(n[0]); + delete nodeMap[ident]; + } + }); + }, + + serialize: function(element) { + element = $(element); + var options = Object.extend(Sortable.options(element), arguments[1] || { }); + var name = encodeURIComponent( + (arguments[1] && arguments[1].name) ? arguments[1].name : element.id); + + if (options.tree) { + return Sortable.tree(element, arguments[1]).children.map( function (item) { + return [name + Sortable._constructIndex(item) + "[id]=" + + encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); + }).flatten().join('&'); + } else { + return Sortable.sequence(element, arguments[1]).map( function(item) { + return name + "[]=" + encodeURIComponent(item); + }).join('&'); + } + } +}; + +// Returns true if child is contained within element +Element.isParent = function(child, element) { + if (!child.parentNode || child == element) return false; + if (child.parentNode == element) return true; + return Element.isParent(child.parentNode, element); +}; + +Element.findChildren = function(element, only, recursive, tagName) { + if(!element.hasChildNodes()) return null; + tagName = tagName.toUpperCase(); + if(only) only = [only].flatten(); + var elements = []; + $A(element.childNodes).each( function(e) { + if(e.tagName && e.tagName.toUpperCase()==tagName && + (!only || (Element.classNames(e).detect(function(v) { return only.include(v); })))) + elements.push(e); + if(recursive) { + var grandchildren = Element.findChildren(e, only, recursive, tagName); + if(grandchildren) elements.push(grandchildren); + } + }); + + return (elements.length>0 ? elements.flatten() : []); +}; + +Element.offsetSize = function (element, type) { + return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')]; +}; \ No newline at end of file diff --git a/usr/local/www/javascript/scriptaculous/effects.js b/usr/local/www/javascript/scriptaculous/effects.js new file mode 100644 index 000000000..7d5192c43 --- /dev/null +++ b/usr/local/www/javascript/scriptaculous/effects.js @@ -0,0 +1,1123 @@ +// script.aculo.us effects.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009 + +// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) +// Contributors: +// Justin Palmer (http://encytemedia.com/) +// Mark Pilgrim (http://diveintomark.org/) +// Martin Bialasinki +// +// script.aculo.us is freely distributable under the terms of an MIT-style license. +// For details, see the script.aculo.us web site: http://script.aculo.us/ + +// converts rgb() and #xxx to #xxxxxx format, +// returns self (or first argument) if not convertable +String.prototype.parseColor = function() { + var color = '#'; + if (this.slice(0,4) == 'rgb(') { + var cols = this.slice(4,this.length-1).split(','); + var i=0; do { color += parseInt(cols[i]).toColorPart(); } while (++i<3); + } else { + if (this.slice(0,1) == '#') { + if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase(); + if (this.length==7) color = this.toLowerCase(); + } + } + return (color.length==7 ? color : (arguments[0] || this)); +}; + +/*--------------------------------------------------------------------------*/ + +Element.collectTextNodes = function(element) { + return $A($(element).childNodes).collect( function(node) { + return (node.nodeType==3 ? node.nodeValue : + (node.hasChildNodes() ? Element.collectTextNodes(node) : '')); + }).flatten().join(''); +}; + +Element.collectTextNodesIgnoreClass = function(element, className) { + return $A($(element).childNodes).collect( function(node) { + return (node.nodeType==3 ? node.nodeValue : + ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? + Element.collectTextNodesIgnoreClass(node, className) : '')); + }).flatten().join(''); +}; + +Element.setContentZoom = function(element, percent) { + element = $(element); + element.setStyle({fontSize: (percent/100) + 'em'}); + if (Prototype.Browser.WebKit) window.scrollBy(0,0); + return element; +}; + +Element.getInlineOpacity = function(element){ + return $(element).style.opacity || ''; +}; + +Element.forceRerendering = function(element) { + try { + element = $(element); + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch(e) { } +}; + +/*--------------------------------------------------------------------------*/ + +var Effect = { + _elementDoesNotExistError: { + name: 'ElementDoesNotExistError', + message: 'The specified DOM element does not exist, but is required for this effect to operate' + }, + Transitions: { + linear: Prototype.K, + sinoidal: function(pos) { + return (-Math.cos(pos*Math.PI)/2) + .5; + }, + reverse: function(pos) { + return 1-pos; + }, + flicker: function(pos) { + var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4; + return pos > 1 ? 1 : pos; + }, + wobble: function(pos) { + return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5; + }, + pulse: function(pos, pulses) { + return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5; + }, + spring: function(pos) { + return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); + }, + none: function(pos) { + return 0; + }, + full: function(pos) { + return 1; + } + }, + DefaultOptions: { + duration: 1.0, // seconds + fps: 100, // 100= assume 66fps max. + sync: false, // true for combining + from: 0.0, + to: 1.0, + delay: 0.0, + queue: 'parallel' + }, + tagifyText: function(element) { + var tagifyStyle = 'position:relative'; + if (Prototype.Browser.IE) tagifyStyle += ';zoom:1'; + + element = $(element); + $A(element.childNodes).each( function(child) { + if (child.nodeType==3) { + child.nodeValue.toArray().each( function(character) { + element.insertBefore( + new Element('span', {style: tagifyStyle}).update( + character == ' ' ? String.fromCharCode(160) : character), + child); + }); + Element.remove(child); + } + }); + }, + multiple: function(element, effect) { + var elements; + if (((typeof element == 'object') || + Object.isFunction(element)) && + (element.length)) + elements = element; + else + elements = $(element).childNodes; + + var options = Object.extend({ + speed: 0.1, + delay: 0.0 + }, arguments[2] || { }); + var masterDelay = options.delay; + + $A(elements).each( function(element, index) { + new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay })); + }); + }, + PAIRS: { + 'slide': ['SlideDown','SlideUp'], + 'blind': ['BlindDown','BlindUp'], + 'appear': ['Appear','Fade'] + }, + toggle: function(element, effect, options) { + element = $(element); + effect = (effect || 'appear').toLowerCase(); + + return Effect[ Effect.PAIRS[ effect ][ element.visible() ? 1 : 0 ] ](element, Object.extend({ + queue: { position:'end', scope:(element.id || 'global'), limit: 1 } + }, options || {})); + } +}; + +Effect.DefaultOptions.transition = Effect.Transitions.sinoidal; + +/* ------------- core effects ------------- */ + +Effect.ScopedQueue = Class.create(Enumerable, { + initialize: function() { + this.effects = []; + this.interval = null; + }, + _each: function(iterator) { + this.effects._each(iterator); + }, + add: function(effect) { + var timestamp = new Date().getTime(); + + var position = Object.isString(effect.options.queue) ? + effect.options.queue : effect.options.queue.position; + + switch(position) { + case 'front': + // move unstarted effects after this effect + this.effects.findAll(function(e){ return e.state=='idle'; }).each( function(e) { + e.startOn += effect.finishOn; + e.finishOn += effect.finishOn; + }); + break; + case 'with-last': + timestamp = this.effects.pluck('startOn').max() || timestamp; + break; + case 'end': + // start effect after last queued effect has finished + timestamp = this.effects.pluck('finishOn').max() || timestamp; + break; + } + + effect.startOn += timestamp; + effect.finishOn += timestamp; + + if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) + this.effects.push(effect); + + if (!this.interval) + this.interval = setInterval(this.loop.bind(this), 15); + }, + remove: function(effect) { + this.effects = this.effects.reject(function(e) { return e==effect; }); + if (this.effects.length == 0) { + clearInterval(this.interval); + this.interval = null; + } + }, + loop: function() { + var timePos = new Date().getTime(); + for(var i=0, len=this.effects.length;i= this.startOn) { + if (timePos >= this.finishOn) { + this.render(1.0); + this.cancel(); + this.event('beforeFinish'); + if (this.finish) this.finish(); + this.event('afterFinish'); + return; + } + var pos = (timePos - this.startOn) / this.totalTime, + frame = (pos * this.totalFrames).round(); + if (frame > this.currentFrame) { + this.render(pos); + this.currentFrame = frame; + } + } + }, + cancel: function() { + if (!this.options.sync) + Effect.Queues.get(Object.isString(this.options.queue) ? + 'global' : this.options.queue.scope).remove(this); + this.state = 'finished'; + }, + event: function(eventName) { + if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this); + if (this.options[eventName]) this.options[eventName](this); + }, + inspect: function() { + var data = $H(); + for(property in this) + if (!Object.isFunction(this[property])) data.set(property, this[property]); + return '#'; + } +}); + +Effect.Parallel = Class.create(Effect.Base, { + initialize: function(effects) { + this.effects = effects || []; + this.start(arguments[1]); + }, + update: function(position) { + this.effects.invoke('render', position); + }, + finish: function(position) { + this.effects.each( function(effect) { + effect.render(1.0); + effect.cancel(); + effect.event('beforeFinish'); + if (effect.finish) effect.finish(position); + effect.event('afterFinish'); + }); + } +}); + +Effect.Tween = Class.create(Effect.Base, { + initialize: function(object, from, to) { + object = Object.isString(object) ? $(object) : object; + var args = $A(arguments), method = args.last(), + options = args.length == 5 ? args[3] : null; + this.method = Object.isFunction(method) ? method.bind(object) : + Object.isFunction(object[method]) ? object[method].bind(object) : + function(value) { object[method] = value; }; + this.start(Object.extend({ from: from, to: to }, options || { })); + }, + update: function(position) { + this.method(position); + } +}); + +Effect.Event = Class.create(Effect.Base, { + initialize: function() { + this.start(Object.extend({ duration: 0 }, arguments[0] || { })); + }, + update: Prototype.emptyFunction +}); + +Effect.Opacity = Class.create(Effect.Base, { + initialize: function(element) { + this.element = $(element); + if (!this.element) throw(Effect._elementDoesNotExistError); + // make this work on IE on elements without 'layout' + if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout)) + this.element.setStyle({zoom: 1}); + var options = Object.extend({ + from: this.element.getOpacity() || 0.0, + to: 1.0 + }, arguments[1] || { }); + this.start(options); + }, + update: function(position) { + this.element.setOpacity(position); + } +}); + +Effect.Move = Class.create(Effect.Base, { + initialize: function(element) { + this.element = $(element); + if (!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + x: 0, + y: 0, + mode: 'relative' + }, arguments[1] || { }); + this.start(options); + }, + setup: function() { + this.element.makePositioned(); + this.originalLeft = parseFloat(this.element.getStyle('left') || '0'); + this.originalTop = parseFloat(this.element.getStyle('top') || '0'); + if (this.options.mode == 'absolute') { + this.options.x = this.options.x - this.originalLeft; + this.options.y = this.options.y - this.originalTop; + } + }, + update: function(position) { + this.element.setStyle({ + left: (this.options.x * position + this.originalLeft).round() + 'px', + top: (this.options.y * position + this.originalTop).round() + 'px' + }); + } +}); + +// for backwards compatibility +Effect.MoveBy = function(element, toTop, toLeft) { + return new Effect.Move(element, + Object.extend({ x: toLeft, y: toTop }, arguments[3] || { })); +}; + +Effect.Scale = Class.create(Effect.Base, { + initialize: function(element, percent) { + this.element = $(element); + if (!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + scaleX: true, + scaleY: true, + scaleContent: true, + scaleFromCenter: false, + scaleMode: 'box', // 'box' or 'contents' or { } with provided values + scaleFrom: 100.0, + scaleTo: percent + }, arguments[2] || { }); + this.start(options); + }, + setup: function() { + this.restoreAfterFinish = this.options.restoreAfterFinish || false; + this.elementPositioning = this.element.getStyle('position'); + + this.originalStyle = { }; + ['top','left','width','height','fontSize'].each( function(k) { + this.originalStyle[k] = this.element.style[k]; + }.bind(this)); + + this.originalTop = this.element.offsetTop; + this.originalLeft = this.element.offsetLeft; + + var fontSize = this.element.getStyle('font-size') || '100%'; + ['em','px','%','pt'].each( function(fontSizeType) { + if (fontSize.indexOf(fontSizeType)>0) { + this.fontSize = parseFloat(fontSize); + this.fontSizeType = fontSizeType; + } + }.bind(this)); + + this.factor = (this.options.scaleTo - this.options.scaleFrom)/100; + + this.dims = null; + if (this.options.scaleMode=='box') + this.dims = [this.element.offsetHeight, this.element.offsetWidth]; + if (/^content/.test(this.options.scaleMode)) + this.dims = [this.element.scrollHeight, this.element.scrollWidth]; + if (!this.dims) + this.dims = [this.options.scaleMode.originalHeight, + this.options.scaleMode.originalWidth]; + }, + update: function(position) { + var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position); + if (this.options.scaleContent && this.fontSize) + this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType }); + this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale); + }, + finish: function(position) { + if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle); + }, + setDimensions: function(height, width) { + var d = { }; + if (this.options.scaleX) d.width = width.round() + 'px'; + if (this.options.scaleY) d.height = height.round() + 'px'; + if (this.options.scaleFromCenter) { + var topd = (height - this.dims[0])/2; + var leftd = (width - this.dims[1])/2; + if (this.elementPositioning == 'absolute') { + if (this.options.scaleY) d.top = this.originalTop-topd + 'px'; + if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px'; + } else { + if (this.options.scaleY) d.top = -topd + 'px'; + if (this.options.scaleX) d.left = -leftd + 'px'; + } + } + this.element.setStyle(d); + } +}); + +Effect.Highlight = Class.create(Effect.Base, { + initialize: function(element) { + this.element = $(element); + if (!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { }); + this.start(options); + }, + setup: function() { + // Prevent executing on elements not in the layout flow + if (this.element.getStyle('display')=='none') { this.cancel(); return; } + // Disable background image during the effect + this.oldStyle = { }; + if (!this.options.keepBackgroundImage) { + this.oldStyle.backgroundImage = this.element.getStyle('background-image'); + this.element.setStyle({backgroundImage: 'none'}); + } + if (!this.options.endcolor) + this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff'); + if (!this.options.restorecolor) + this.options.restorecolor = this.element.getStyle('background-color'); + // init color calculations + this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16); }.bind(this)); + this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]; }.bind(this)); + }, + update: function(position) { + this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){ + return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) }); + }, + finish: function() { + this.element.setStyle(Object.extend(this.oldStyle, { + backgroundColor: this.options.restorecolor + })); + } +}); + +Effect.ScrollTo = function(element) { + var options = arguments[1] || { }, + scrollOffsets = document.viewport.getScrollOffsets(), + elementOffsets = $(element).cumulativeOffset(); + + if (options.offset) elementOffsets[1] += options.offset; + + return new Effect.Tween(null, + scrollOffsets.top, + elementOffsets[1], + options, + function(p){ scrollTo(scrollOffsets.left, p.round()); } + ); +}; + +/* ------------- combination effects ------------- */ + +Effect.Fade = function(element) { + element = $(element); + var oldOpacity = element.getInlineOpacity(); + var options = Object.extend({ + from: element.getOpacity() || 1.0, + to: 0.0, + afterFinishInternal: function(effect) { + if (effect.options.to!=0) return; + effect.element.hide().setStyle({opacity: oldOpacity}); + } + }, arguments[1] || { }); + return new Effect.Opacity(element,options); +}; + +Effect.Appear = function(element) { + element = $(element); + var options = Object.extend({ + from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0), + to: 1.0, + // force Safari to render floated elements properly + afterFinishInternal: function(effect) { + effect.element.forceRerendering(); + }, + beforeSetup: function(effect) { + effect.element.setOpacity(effect.options.from).show(); + }}, arguments[1] || { }); + return new Effect.Opacity(element,options); +}; + +Effect.Puff = function(element) { + element = $(element); + var oldStyle = { + opacity: element.getInlineOpacity(), + position: element.getStyle('position'), + top: element.style.top, + left: element.style.left, + width: element.style.width, + height: element.style.height + }; + return new Effect.Parallel( + [ new Effect.Scale(element, 200, + { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), + new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], + Object.extend({ duration: 1.0, + beforeSetupInternal: function(effect) { + Position.absolutize(effect.effects[0].element); + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.hide().setStyle(oldStyle); } + }, arguments[1] || { }) + ); +}; + +Effect.BlindUp = function(element) { + element = $(element); + element.makeClipping(); + return new Effect.Scale(element, 0, + Object.extend({ scaleContent: false, + scaleX: false, + restoreAfterFinish: true, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping(); + } + }, arguments[1] || { }) + ); +}; + +Effect.BlindDown = function(element) { + element = $(element); + var elementDimensions = element.getDimensions(); + return new Effect.Scale(element, 100, Object.extend({ + scaleContent: false, + scaleX: false, + scaleFrom: 0, + scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, + restoreAfterFinish: true, + afterSetup: function(effect) { + effect.element.makeClipping().setStyle({height: '0px'}).show(); + }, + afterFinishInternal: function(effect) { + effect.element.undoClipping(); + } + }, arguments[1] || { })); +}; + +Effect.SwitchOff = function(element) { + element = $(element); + var oldOpacity = element.getInlineOpacity(); + return new Effect.Appear(element, Object.extend({ + duration: 0.4, + from: 0, + transition: Effect.Transitions.flicker, + afterFinishInternal: function(effect) { + new Effect.Scale(effect.element, 1, { + duration: 0.3, scaleFromCenter: true, + scaleX: false, scaleContent: false, restoreAfterFinish: true, + beforeSetup: function(effect) { + effect.element.makePositioned().makeClipping(); + }, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity}); + } + }); + } + }, arguments[1] || { })); +}; + +Effect.DropOut = function(element) { + element = $(element); + var oldStyle = { + top: element.getStyle('top'), + left: element.getStyle('left'), + opacity: element.getInlineOpacity() }; + return new Effect.Parallel( + [ new Effect.Move(element, {x: 0, y: 100, sync: true }), + new Effect.Opacity(element, { sync: true, to: 0.0 }) ], + Object.extend( + { duration: 0.5, + beforeSetup: function(effect) { + effect.effects[0].element.makePositioned(); + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle); + } + }, arguments[1] || { })); +}; + +Effect.Shake = function(element) { + element = $(element); + var options = Object.extend({ + distance: 20, + duration: 0.5 + }, arguments[1] || {}); + var distance = parseFloat(options.distance); + var split = parseFloat(options.duration) / 10.0; + var oldStyle = { + top: element.getStyle('top'), + left: element.getStyle('left') }; + return new Effect.Move(element, + { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) { + effect.element.undoPositioned().setStyle(oldStyle); + }}); }}); }}); }}); }}); }}); +}; + +Effect.SlideDown = function(element) { + element = $(element).cleanWhitespace(); + // SlideDown need to have the content of the element wrapped in a container element with fixed height! + var oldInnerBottom = element.down().getStyle('bottom'); + var elementDimensions = element.getDimensions(); + return new Effect.Scale(element, 100, Object.extend({ + scaleContent: false, + scaleX: false, + scaleFrom: window.opera ? 0 : 1, + scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, + restoreAfterFinish: true, + afterSetup: function(effect) { + effect.element.makePositioned(); + effect.element.down().makePositioned(); + if (window.opera) effect.element.setStyle({top: ''}); + effect.element.makeClipping().setStyle({height: '0px'}).show(); + }, + afterUpdateInternal: function(effect) { + effect.element.down().setStyle({bottom: + (effect.dims[0] - effect.element.clientHeight) + 'px' }); + }, + afterFinishInternal: function(effect) { + effect.element.undoClipping().undoPositioned(); + effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); } + }, arguments[1] || { }) + ); +}; + +Effect.SlideUp = function(element) { + element = $(element).cleanWhitespace(); + var oldInnerBottom = element.down().getStyle('bottom'); + var elementDimensions = element.getDimensions(); + return new Effect.Scale(element, window.opera ? 0 : 1, + Object.extend({ scaleContent: false, + scaleX: false, + scaleMode: 'box', + scaleFrom: 100, + scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, + restoreAfterFinish: true, + afterSetup: function(effect) { + effect.element.makePositioned(); + effect.element.down().makePositioned(); + if (window.opera) effect.element.setStyle({top: ''}); + effect.element.makeClipping().show(); + }, + afterUpdateInternal: function(effect) { + effect.element.down().setStyle({bottom: + (effect.dims[0] - effect.element.clientHeight) + 'px' }); + }, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping().undoPositioned(); + effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); + } + }, arguments[1] || { }) + ); +}; + +// Bug in opera makes the TD containing this element expand for a instance after finish +Effect.Squish = function(element) { + return new Effect.Scale(element, window.opera ? 1 : 0, { + restoreAfterFinish: true, + beforeSetup: function(effect) { + effect.element.makeClipping(); + }, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping(); + } + }); +}; + +Effect.Grow = function(element) { + element = $(element); + var options = Object.extend({ + direction: 'center', + moveTransition: Effect.Transitions.sinoidal, + scaleTransition: Effect.Transitions.sinoidal, + opacityTransition: Effect.Transitions.full + }, arguments[1] || { }); + var oldStyle = { + top: element.style.top, + left: element.style.left, + height: element.style.height, + width: element.style.width, + opacity: element.getInlineOpacity() }; + + var dims = element.getDimensions(); + var initialMoveX, initialMoveY; + var moveX, moveY; + + switch (options.direction) { + case 'top-left': + initialMoveX = initialMoveY = moveX = moveY = 0; + break; + case 'top-right': + initialMoveX = dims.width; + initialMoveY = moveY = 0; + moveX = -dims.width; + break; + case 'bottom-left': + initialMoveX = moveX = 0; + initialMoveY = dims.height; + moveY = -dims.height; + break; + case 'bottom-right': + initialMoveX = dims.width; + initialMoveY = dims.height; + moveX = -dims.width; + moveY = -dims.height; + break; + case 'center': + initialMoveX = dims.width / 2; + initialMoveY = dims.height / 2; + moveX = -dims.width / 2; + moveY = -dims.height / 2; + break; + } + + return new Effect.Move(element, { + x: initialMoveX, + y: initialMoveY, + duration: 0.01, + beforeSetup: function(effect) { + effect.element.hide().makeClipping().makePositioned(); + }, + afterFinishInternal: function(effect) { + new Effect.Parallel( + [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }), + new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }), + new Effect.Scale(effect.element, 100, { + scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, + sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true}) + ], Object.extend({ + beforeSetup: function(effect) { + effect.effects[0].element.setStyle({height: '0px'}).show(); + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); + } + }, options) + ); + } + }); +}; + +Effect.Shrink = function(element) { + element = $(element); + var options = Object.extend({ + direction: 'center', + moveTransition: Effect.Transitions.sinoidal, + scaleTransition: Effect.Transitions.sinoidal, + opacityTransition: Effect.Transitions.none + }, arguments[1] || { }); + var oldStyle = { + top: element.style.top, + left: element.style.left, + height: element.style.height, + width: element.style.width, + opacity: element.getInlineOpacity() }; + + var dims = element.getDimensions(); + var moveX, moveY; + + switch (options.direction) { + case 'top-left': + moveX = moveY = 0; + break; + case 'top-right': + moveX = dims.width; + moveY = 0; + break; + case 'bottom-left': + moveX = 0; + moveY = dims.height; + break; + case 'bottom-right': + moveX = dims.width; + moveY = dims.height; + break; + case 'center': + moveX = dims.width / 2; + moveY = dims.height / 2; + break; + } + + return new Effect.Parallel( + [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }), + new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}), + new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }) + ], Object.extend({ + beforeStartInternal: function(effect) { + effect.effects[0].element.makePositioned().makeClipping(); + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); } + }, options) + ); +}; + +Effect.Pulsate = function(element) { + element = $(element); + var options = arguments[1] || { }, + oldOpacity = element.getInlineOpacity(), + transition = options.transition || Effect.Transitions.linear, + reverser = function(pos){ + return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5); + }; + + return new Effect.Opacity(element, + Object.extend(Object.extend({ duration: 2.0, from: 0, + afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); } + }, options), {transition: reverser})); +}; + +Effect.Fold = function(element) { + element = $(element); + var oldStyle = { + top: element.style.top, + left: element.style.left, + width: element.style.width, + height: element.style.height }; + element.makeClipping(); + return new Effect.Scale(element, 5, Object.extend({ + scaleContent: false, + scaleX: false, + afterFinishInternal: function(effect) { + new Effect.Scale(element, 1, { + scaleContent: false, + scaleY: false, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping().setStyle(oldStyle); + } }); + }}, arguments[1] || { })); +}; + +Effect.Morph = Class.create(Effect.Base, { + initialize: function(element) { + this.element = $(element); + if (!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + style: { } + }, arguments[1] || { }); + + if (!Object.isString(options.style)) this.style = $H(options.style); + else { + if (options.style.include(':')) + this.style = options.style.parseStyle(); + else { + this.element.addClassName(options.style); + this.style = $H(this.element.getStyles()); + this.element.removeClassName(options.style); + var css = this.element.getStyles(); + this.style = this.style.reject(function(style) { + return style.value == css[style.key]; + }); + options.afterFinishInternal = function(effect) { + effect.element.addClassName(effect.options.style); + effect.transforms.each(function(transform) { + effect.element.style[transform.style] = ''; + }); + }; + } + } + this.start(options); + }, + + setup: function(){ + function parseColor(color){ + if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff'; + color = color.parseColor(); + return $R(0,2).map(function(i){ + return parseInt( color.slice(i*2+1,i*2+3), 16 ); + }); + } + this.transforms = this.style.map(function(pair){ + var property = pair[0], value = pair[1], unit = null; + + if (value.parseColor('#zzzzzz') != '#zzzzzz') { + value = value.parseColor(); + unit = 'color'; + } else if (property == 'opacity') { + value = parseFloat(value); + if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout)) + this.element.setStyle({zoom: 1}); + } else if (Element.CSS_LENGTH.test(value)) { + var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/); + value = parseFloat(components[1]); + unit = (components.length == 3) ? components[2] : null; + } + + var originalValue = this.element.getStyle(property); + return { + style: property.camelize(), + originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), + targetValue: unit=='color' ? parseColor(value) : value, + unit: unit + }; + }.bind(this)).reject(function(transform){ + return ( + (transform.originalValue == transform.targetValue) || + ( + transform.unit != 'color' && + (isNaN(transform.originalValue) || isNaN(transform.targetValue)) + ) + ); + }); + }, + update: function(position) { + var style = { }, transform, i = this.transforms.length; + while(i--) + style[(transform = this.transforms[i]).style] = + transform.unit=='color' ? '#'+ + (Math.round(transform.originalValue[0]+ + (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() + + (Math.round(transform.originalValue[1]+ + (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() + + (Math.round(transform.originalValue[2]+ + (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() : + (transform.originalValue + + (transform.targetValue - transform.originalValue) * position).toFixed(3) + + (transform.unit === null ? '' : transform.unit); + this.element.setStyle(style, true); + } +}); + +Effect.Transform = Class.create({ + initialize: function(tracks){ + this.tracks = []; + this.options = arguments[1] || { }; + this.addTracks(tracks); + }, + addTracks: function(tracks){ + tracks.each(function(track){ + track = $H(track); + var data = track.values().first(); + this.tracks.push($H({ + ids: track.keys().first(), + effect: Effect.Morph, + options: { style: data } + })); + }.bind(this)); + return this; + }, + play: function(){ + return new Effect.Parallel( + this.tracks.map(function(track){ + var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options'); + var elements = [$(ids) || $$(ids)].flatten(); + return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)); }); + }).flatten(), + this.options + ); + } +}); + +Element.CSS_PROPERTIES = $w( + 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + + 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' + + 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' + + 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' + + 'fontSize fontWeight height left letterSpacing lineHeight ' + + 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+ + 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' + + 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' + + 'right textIndent top width wordSpacing zIndex'); + +Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; + +String.__parseStyleElement = document.createElement('div'); +String.prototype.parseStyle = function(){ + var style, styleRules = $H(); + if (Prototype.Browser.WebKit) + style = new Element('div',{style:this}).style; + else { + String.__parseStyleElement.innerHTML = '
                            '; + style = String.__parseStyleElement.childNodes[0].style; + } + + Element.CSS_PROPERTIES.each(function(property){ + if (style[property]) styleRules.set(property, style[property]); + }); + + if (Prototype.Browser.IE && this.include('opacity')) + styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]); + + return styleRules; +}; + +if (document.defaultView && document.defaultView.getComputedStyle) { + Element.getStyles = function(element) { + var css = document.defaultView.getComputedStyle($(element), null); + return Element.CSS_PROPERTIES.inject({ }, function(styles, property) { + styles[property] = css[property]; + return styles; + }); + }; +} else { + Element.getStyles = function(element) { + element = $(element); + var css = element.currentStyle, styles; + styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) { + results[property] = css[property]; + return results; + }); + if (!styles.opacity) styles.opacity = element.getOpacity(); + return styles; + }; +} + +Effect.Methods = { + morph: function(element, style) { + element = $(element); + new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { })); + return element; + }, + visualEffect: function(element, effect, options) { + element = $(element); + var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1); + new Effect[klass](element, options); + return element; + }, + highlight: function(element, options) { + element = $(element); + new Effect.Highlight(element, options); + return element; + } +}; + +$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+ + 'pulsate shake puff squish switchOff dropOut').each( + function(effect) { + Effect.Methods[effect] = function(element, options){ + element = $(element); + Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options); + return element; + }; + } +); + +$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each( + function(f) { Effect.Methods[f] = Element[f]; } +); + +Element.addMethods(Effect.Methods); \ No newline at end of file diff --git a/usr/local/www/javascript/scriptaculous/prototype.js b/usr/local/www/javascript/scriptaculous/prototype.js new file mode 100644 index 000000000..9cb702cb6 --- /dev/null +++ b/usr/local/www/javascript/scriptaculous/prototype.js @@ -0,0 +1,6079 @@ +/* Prototype JavaScript framework, version 1.7 + * (c) 2005-2010 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + + Version: '1.7', + + Browser: (function(){ + var ua = navigator.userAgent; + var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; + return { + IE: !!window.attachEvent && !isOpera, + Opera: isOpera, + WebKit: ua.indexOf('AppleWebKit/') > -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + }; + })(), + + BrowserFeatures: { + XPath: !!document.evaluate, + + SelectorsAPI: !!document.querySelector, + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + + K: function(x) { return x; } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; + + +var Abstract = { }; + + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = method.valueOf.bind(method); + value.toString = method.toString.bind(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + FUNCTION_CLASS = '[object Function]', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + DATE_CLASS = '[object Date]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key], + type = typeof value; + + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { throw new TypeError(); } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (object.hasOwnProperty(property)) { + results.push(property); + } + } + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return _toString.call(object) === FUNCTION_CLASS; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isDate(object) { + return _toString.call(object) === DATE_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; + var __method = this, args = slice.call(arguments, 1); + return function() { + var a = merge(args, arguments); + return __method.apply(context, a); + }; + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + }; + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + }; + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + }; + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + return { + argumentNames: argumentNames, + bind: bind, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + }; +})()); + + + +(function(proto) { + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match); }; + } + + function gsub(pattern, replacement) { + var result = '', source = this, match; + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || pattern.source)) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } + + while (source.length > 0) { + if (match = source.match(pattern)) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + } + + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + } + + function scan(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + } + + function truncate(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + } + + function strip() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + } + + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } + + function stripScripts() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + } + + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + } + + function evalScripts() { + return this.extractScripts().map(function(script) { return eval(script); }); + } + + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } + + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } + + + function toQueryParams(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + + if (value != undefined) value = decodeURIComponent(value); + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + } + + function toArray() { + return this.split(''); + } + + function succ() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + } + + function times(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + } + + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } + + function capitalize() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + } + + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } + + function dasherize() { + return this.replace(/_/g, '-'); + } + + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } + + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } + + function isJSON() { + var str = this; + if (str.blank()) return false; + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } + + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + } + + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { + return this.indexOf(pattern) > -1; + } + + function startsWith(pattern) { + return this.lastIndexOf(pattern, 0) === 0; + } + + function endsWith(pattern) { + var d = this.length - pattern.length; + return d >= 0 && this.indexOf(pattern, d) === d; + } + + function empty() { + return this == ''; + } + + function blank() { + return /^\s*$/.test(this); + } + + function interpolate(object, pattern) { + return new Template(this, pattern).evaluate(object); + } + + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: startsWith, + endsWith: endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (object && Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return (match[1] + ''); + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = (function() { + function each(iterator, context) { + var index = 0; + try { + this._each(function(value) { + iterator.call(context, value, index++); + }); + } catch (e) { + if (e != $break) throw e; + } + return this; + } + + function eachSlice(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + } + + function all(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index); + if (!result) throw $break; + }); + return result; + } + + function any(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index)) + throw $break; + }); + return result; + } + + function collect(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index)); + }); + return results; + } + + function detect(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index)) { + result = value; + throw $break; + } + }); + return result; + } + + function findAll(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index)) + results.push(value); + }); + return results; + } + + function grep(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(RegExp.escape(filter)); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index)); + }); + return results; + } + + function include(object) { + if (Object.isFunction(this.indexOf)) + if (this.indexOf(object) != -1) return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + } + + function inGroupsOf(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + } + + function inject(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index); + }); + return memo; + } + + function invoke(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + } + + function max(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index); + if (result == null || value >= result) + result = value; + }); + return result; + } + + function min(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index); + if (result == null || value < result) + result = value; + }); + return result; + } + + function partition(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index) ? + trues : falses).push(value); + }); + return [trues, falses]; + } + + function pluck(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + } + + function reject(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index)) + results.push(value); + }); + return results; + } + + function sortBy(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index) + }; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + } + + function toArray() { + return this.map(); + } + + function zip() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + } + + function size() { + return this.toArray().length; + } + + function inspect() { + return '#'; + } + + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + +function $A(iterable) { + if (!iterable) return []; + if ('toArray' in Object(iterable)) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator, context) { + for (var i = 0, length = this.length >>> 0; i < length; i++) { + if (i in this) iterator.call(context, this[i], i, this); + } + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.detect(function(value) { return item === value; }); + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + i || (i = 0); + var length = this.length; + if (i < 0) i = length + i; + for (; i < length; i++) + if (this[i] === item) return i; + return -1; + } + + function lastIndexOf(item, i) { + i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; + var n = this.slice(0, i).reverse().indexOf(item); + return (n < 0) ? n : i - n - 1; + } + + function concat() { + var array = slice.call(this, 0), item; + for (var i = 0, length = arguments.length; i < length; i++) { + item = arguments[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) + array.push(item[j]); + } else { + array.push(item); + } + } + return array; + } + + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2); + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator) { + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + return key + '=' + encodeURIComponent(String.interpret(value)); + } + + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) { + var queryValues = []; + for (var i = 0, len = values.length, value; i < len; i++) { + value = values[i]; + queryValues.push(toQueryPair(key, value)); + } + return results.concat(queryValues); + } + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; +})()); + +Hash.from = $H; +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + } + + function _each(iterator) { + var value = this.start; + while (this.include(value)) { + iterator(value); + value = value.succ(); + } + } + + function include(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } + + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest();}, + function() {return new ActiveXObject('Msxml2.XMLHTTP');}, + function() {return new ActiveXObject('Microsoft.XMLHTTP');} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator) { + this.responders._each(iterator); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++; }, + onComplete: function() { Ajax.activeRequestCount--; } +}); +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.isString(this.options.parameters) ? + this.options.parameters : + Object.toQueryString(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + params += (params ? '&' : '') + "_method=" + this.method; + this.method = 'post'; + } + + if (params && this.method === 'get') { + this.url += (this.url.include('?') ? '&' : '?') + params; + } + + this.parameters = params.toQueryParams(); + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value; }); + } + + for (var name in headers) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300) || status == 304; + }, + + getStatus: function() { + try { + if (this.transport.status === 1223) return 204; + return this.transport.status || 0; + } catch (e) { return 0; } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null; } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if (readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return ''; } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null; } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + json = decodeURIComponent(escape(json)); + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + + +function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); +} + +if (Prototype.BrowserFeatures.XPath) { + document._getElementsByXPath = function(expression, parentElement) { + var results = []; + var query = document.evaluate(expression, $(parentElement) || document, + null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + for (var i = 0, length = query.snapshotLength; i < length; i++) + results.push(Element.extend(query.snapshotItem(i))); + return results; + }; +} + +/*--------------------------------------------------------------------------*/ + +if (!Node) var Node = { }; + +if (!Node.ELEMENT_NODE) { + Object.extend(Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); +} + + + +(function(global) { + function shouldUseCache(tagName, attributes) { + if (tagName === 'select') return false; + if ('type' in attributes) return false; + return true; + } + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + var element = global.Element; + + global.Element = function(tagName, attributes) { + attributes = attributes || { }; + tagName = tagName.toLowerCase(); + var cache = Element.cache; + + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + + if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); + + var node = shouldUseCache(tagName, attributes) ? + cache[tagName].cloneNode(false) : document.createElement(tagName); + + return Element.writeAttribute(node, attributes); + }; + + Object.extend(global.Element, element || { }); + if (element) global.Element.prototype = element.prototype; + +})(this); + +Element.idCounter = 1; +Element.cache = { }; + +Element._purgeElement = function(element) { + var uid = element._prototypeUID; + if (uid) { + Element.stopObserving(element); + element._prototypeUID = void 0; + delete Element.Storage[uid]; + } +}; + +Element.Methods = { + visible: function(element) { + return $(element).style.display != 'none'; + }, + + toggle: function(element) { + element = $(element); + Element[Element.visible(element) ? 'hide' : 'show'](element); + return element; + }, + + hide: function(element) { + element = $(element); + element.style.display = 'none'; + return element; + }, + + show: function(element) { + element = $(element); + element.style.display = ''; + return element; + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + }, + + update: (function(){ + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "
                            "; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var LINK_ELEMENT_INNERHTML_BUGGY = (function() { + try { + var el = document.createElement('div'); + el.innerHTML = ""; + var isBuggy = (el.childNodes.length === 0); + el = null; + return isBuggy; + } catch(e) { + return true; + } + })(); + + var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || + TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + + function update(element, content) { + element = $(element); + var purgeElement = Element._purgeElement; + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + content = Object.toHTML(content); + + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (ANY_INNERHTML_BUGGY) { + if (tagName in Element._insertionTranslations.tags) { + while (element.firstChild) { + element.removeChild(element.firstChild); + } + Element._getContentFromAnonymousElement(tagName, content.stripScripts()) + .each(function(node) { + element.appendChild(node); + }); + } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { + while (element.firstChild) { + element.removeChild(element.firstChild); + } + var nodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts(), true); + nodes.each(function(node) { element.appendChild(node); }); + } + else { + element.innerHTML = content.stripScripts(); + } + } + else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + return update; + })(), + + replace: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + element.parentNode.replaceChild(content, element); + return element; + }, + + insert: function(element, insertions) { + element = $(element); + + if (Object.isString(insertions) || Object.isNumber(insertions) || + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) + insertions = {bottom:insertions}; + + var content, insert, tagName, childNodes; + + for (var position in insertions) { + content = insertions[position]; + position = position.toLowerCase(); + insert = Element._insertionTranslations[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + insert(element, content); + continue; + } + + content = Object.toHTML(content); + + tagName = ((position == 'before' || position == 'after') + ? element.parentNode : element).tagName.toUpperCase(); + + childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position == 'top' || position == 'after') childNodes.reverse(); + childNodes.each(insert.curry(element)); + + content.evalScripts.bind(content).defer(); + } + + return element; + }, + + wrap: function(element, wrapper, attributes) { + element = $(element); + if (Object.isElement(wrapper)) + $(wrapper).writeAttribute(attributes || { }); + else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); + else wrapper = new Element('div', wrapper); + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + wrapper.appendChild(element); + return wrapper; + }, + + inspect: function(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + $H({'id': 'id', 'className': 'class'}).each(function(pair) { + var property = pair.first(), + attribute = pair.last(), + value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + }); + return result + '>'; + }, + + recursivelyCollect: function(element, property, maximumLength) { + element = $(element); + maximumLength = maximumLength || -1; + var elements = []; + + while (element = element[property]) { + if (element.nodeType == 1) + elements.push(Element.extend(element)); + if (elements.length == maximumLength) + break; + } + + return elements; + }, + + ancestors: function(element) { + return Element.recursivelyCollect(element, 'parentNode'); + }, + + descendants: function(element) { + return Element.select(element, "*"); + }, + + firstDescendant: function(element) { + element = $(element).firstChild; + while (element && element.nodeType != 1) element = element.nextSibling; + return $(element); + }, + + immediateDescendants: function(element) { + var results = [], child = $(element).firstChild; + while (child) { + if (child.nodeType === 1) { + results.push(Element.extend(child)); + } + child = child.nextSibling; + } + return results; + }, + + previousSiblings: function(element, maximumLength) { + return Element.recursivelyCollect(element, 'previousSibling'); + }, + + nextSiblings: function(element) { + return Element.recursivelyCollect(element, 'nextSibling'); + }, + + siblings: function(element) { + element = $(element); + return Element.previousSiblings(element).reverse() + .concat(Element.nextSiblings(element)); + }, + + match: function(element, selector) { + element = $(element); + if (Object.isString(selector)) + return Prototype.Selector.match(element, selector); + return selector.match(element); + }, + + up: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(element.parentNode); + var ancestors = Element.ancestors(element); + return Object.isNumber(expression) ? ancestors[expression] : + Prototype.Selector.find(ancestors, expression, index); + }, + + down: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return Element.firstDescendant(element); + return Object.isNumber(expression) ? Element.descendants(element)[expression] : + Element.select(element, expression)[index || 0]; + }, + + previous: function(element, expression, index) { + element = $(element); + if (Object.isNumber(expression)) index = expression, expression = false; + if (!Object.isNumber(index)) index = 0; + + if (expression) { + return Prototype.Selector.find(element.previousSiblings(), expression, index); + } else { + return element.recursivelyCollect("previousSibling", index + 1)[index]; + } + }, + + next: function(element, expression, index) { + element = $(element); + if (Object.isNumber(expression)) index = expression, expression = false; + if (!Object.isNumber(index)) index = 0; + + if (expression) { + return Prototype.Selector.find(element.nextSiblings(), expression, index); + } else { + var maximumLength = Object.isNumber(index) ? index + 1 : 1; + return element.recursivelyCollect("nextSibling", index + 1)[index]; + } + }, + + + select: function(element) { + element = $(element); + var expressions = Array.prototype.slice.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); + }, + + adjacent: function(element) { + element = $(element); + var expressions = Array.prototype.slice.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element.parentNode).without(element); + }, + + identify: function(element) { + element = $(element); + var id = Element.readAttribute(element, 'id'); + if (id) return id; + do { id = 'anonymous_element_' + Element.idCounter++; } while ($(id)); + Element.writeAttribute(element, 'id', id); + return id; + }, + + readAttribute: function(element, name) { + element = $(element); + if (Prototype.Browser.IE) { + var t = Element._attributeTranslations.read; + if (t.values[name]) return t.values[name](element, name); + if (t.names[name]) name = t.names[name]; + if (name.include(':')) { + return (!element.attributes || !element.attributes[name]) ? null : + element.attributes[name].value; + } + } + return element.getAttribute(name); + }, + + writeAttribute: function(element, name, value) { + element = $(element); + var attributes = { }, t = Element._attributeTranslations.write; + + if (typeof name == 'object') attributes = name; + else attributes[name] = Object.isUndefined(value) ? true : value; + + for (var attr in attributes) { + name = t.names[attr] || attr; + value = attributes[attr]; + if (t.values[attr]) name = t.values[attr](element, value); + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + return element; + }, + + getHeight: function(element) { + return Element.getDimensions(element).height; + }, + + getWidth: function(element) { + return Element.getDimensions(element).width; + }, + + classNames: function(element) { + return new Element.ClassNames(element); + }, + + hasClassName: function(element, className) { + if (!(element = $(element))) return; + var elementClassName = element.className; + return (elementClassName.length > 0 && (elementClassName == className || + new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); + }, + + addClassName: function(element, className) { + if (!(element = $(element))) return; + if (!Element.hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + return element; + }, + + removeClassName: function(element, className) { + if (!(element = $(element))) return; + element.className = element.className.replace( + new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); + return element; + }, + + toggleClassName: function(element, className) { + if (!(element = $(element))) return; + return Element[Element.hasClassName(element, className) ? + 'removeClassName' : 'addClassName'](element, className); + }, + + cleanWhitespace: function(element) { + element = $(element); + var node = element.firstChild; + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + }, + + empty: function(element) { + return $(element).innerHTML.blank(); + }, + + descendantOf: function(element, ancestor) { + element = $(element), ancestor = $(ancestor); + + if (element.compareDocumentPosition) + return (element.compareDocumentPosition(ancestor) & 8) === 8; + + if (ancestor.contains) + return ancestor.contains(element) && ancestor !== element; + + while (element = element.parentNode) + if (element == ancestor) return true; + + return false; + }, + + scrollTo: function(element) { + element = $(element); + var pos = Element.cumulativeOffset(element); + window.scrollTo(pos[0], pos[1]); + return element; + }, + + getStyle: function(element, style) { + element = $(element); + style = style == 'float' ? 'cssFloat' : style.camelize(); + var value = element.style[style]; + if (!value || value == 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + if (style == 'opacity') return value ? parseFloat(value) : 1.0; + return value == 'auto' ? null : value; + }, + + getOpacity: function(element) { + return $(element).getStyle('opacity'); + }, + + setStyle: function(element, styles) { + element = $(element); + var elementStyle = element.style, match; + if (Object.isString(styles)) { + element.style.cssText += ';' + styles; + return styles.include('opacity') ? + element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; + } + for (var property in styles) + if (property == 'opacity') element.setOpacity(styles[property]); + else + elementStyle[(property == 'float' || property == 'cssFloat') ? + (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') : + property] = styles[property]; + + return element; + }, + + setOpacity: function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + return element; + }, + + makePositioned: function(element) { + element = $(element); + var pos = Element.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element._madePositioned = true; + element.style.position = 'relative'; + if (Prototype.Browser.Opera) { + element.style.top = 0; + element.style.left = 0; + } + } + return element; + }, + + undoPositioned: function(element) { + element = $(element); + if (element._madePositioned) { + element._madePositioned = undefined; + element.style.position = + element.style.top = + element.style.left = + element.style.bottom = + element.style.right = ''; + } + return element; + }, + + makeClipping: function(element) { + element = $(element); + if (element._overflow) return element; + element._overflow = Element.getStyle(element, 'overflow') || 'auto'; + if (element._overflow !== 'hidden') + element.style.overflow = 'hidden'; + return element; + }, + + undoClipping: function(element) { + element = $(element); + if (!element._overflow) return element; + element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; + element._overflow = null; + return element; + }, + + clonePosition: function(element, source) { + var options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, arguments[2] || { }); + + source = $(source); + var p = Element.viewportOffset(source), delta = [0, 0], parent = null; + + element = $(element); + + if (Element.getStyle(element, 'position') == 'absolute') { + parent = Element.getOffsetParent(element); + delta = Element.viewportOffset(parent); + } + + if (parent == document.body) { + delta[0] -= document.body.offsetLeft; + delta[1] -= document.body.offsetTop; + } + + if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + if (options.setWidth) element.style.width = source.offsetWidth + 'px'; + if (options.setHeight) element.style.height = source.offsetHeight + 'px'; + return element; + } +}; + +Object.extend(Element.Methods, { + getElementsBySelector: Element.Methods.select, + + childElements: Element.Methods.immediateDescendants +}); + +Element._attributeTranslations = { + write: { + names: { + className: 'class', + htmlFor: 'for' + }, + values: { } + } +}; + +if (Prototype.Browser.Opera) { + Element.Methods.getStyle = Element.Methods.getStyle.wrap( + function(proceed, element, style) { + switch (style) { + case 'height': case 'width': + if (!Element.visible(element)) return null; + + var dim = parseInt(proceed(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + var properties; + if (style === 'height') { + properties = ['border-top-width', 'padding-top', + 'padding-bottom', 'border-bottom-width']; + } + else { + properties = ['border-left-width', 'padding-left', + 'padding-right', 'border-right-width']; + } + return properties.inject(dim, function(memo, property) { + var val = proceed(element, property); + return val === null ? memo : memo - parseInt(val, 10); + }) + 'px'; + default: return proceed(element, style); + } + } + ); + + Element.Methods.readAttribute = Element.Methods.readAttribute.wrap( + function(proceed, element, attribute) { + if (attribute === 'title') return element.title; + return proceed(element, attribute); + } + ); +} + +else if (Prototype.Browser.IE) { + Element.Methods.getStyle = function(element, style) { + element = $(element); + style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); + var value = element.style[style]; + if (!value && element.currentStyle) value = element.currentStyle[style]; + + if (style == 'opacity') { + if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) + if (value[1]) return parseFloat(value[1]) / 100; + return 1.0; + } + + if (value == 'auto') { + if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) + return element['offset' + style.capitalize()] + 'px'; + return null; + } + return value; + }; + + Element.Methods.setOpacity = function(element, value) { + function stripAlpha(filter){ + return filter.replace(/alpha\([^\)]*\)/gi,''); + } + element = $(element); + var currentStyle = element.currentStyle; + if ((currentStyle && !currentStyle.hasLayout) || + (!currentStyle && element.style.zoom == 'normal')) + element.style.zoom = 1; + + var filter = element.getStyle('filter'), style = element.style; + if (value == 1 || value === '') { + (filter = stripAlpha(filter)) ? + style.filter = filter : style.removeAttribute('filter'); + return element; + } else if (value < 0.00001) value = 0; + style.filter = stripAlpha(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + return element; + }; + + Element._attributeTranslations = (function(){ + + var classProp = 'className', + forProp = 'for', + el = document.createElement('div'); + + el.setAttribute(classProp, 'x'); + + if (el.className !== 'x') { + el.setAttribute('class', 'x'); + if (el.className === 'x') { + classProp = 'class'; + } + } + el = null; + + el = document.createElement('label'); + el.setAttribute(forProp, 'x'); + if (el.htmlFor !== 'x') { + el.setAttribute('htmlFor', 'x'); + if (el.htmlFor === 'x') { + forProp = 'htmlFor'; + } + } + el = null; + + return { + read: { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp + }, + values: { + _getAttr: function(element, attribute) { + return element.getAttribute(attribute); + }, + _getAttr2: function(element, attribute) { + return element.getAttribute(attribute, 2); + }, + _getAttrNode: function(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ""; + }, + _getEv: (function(){ + + var el = document.createElement('div'), f; + el.onclick = Prototype.emptyFunction; + var value = el.getAttribute('onclick'); + + if (String(value).indexOf('{') > -1) { + f = function(element, attribute) { + attribute = element.getAttribute(attribute); + if (!attribute) return null; + attribute = attribute.toString(); + attribute = attribute.split('{')[1]; + attribute = attribute.split('}')[0]; + return attribute.strip(); + }; + } + else if (value === '') { + f = function(element, attribute) { + attribute = element.getAttribute(attribute); + if (!attribute) return null; + return attribute.strip(); + }; + } + el = null; + return f; + })(), + _flag: function(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + }, + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + } + }; + })(); + + Element._attributeTranslations.write = { + names: Object.extend({ + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, Element._attributeTranslations.read.names), + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + Element._attributeTranslations.has = {}; + + $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + + 'encType maxLength readOnly longDesc frameBorder').each(function(attr) { + Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; + Element._attributeTranslations.has[attr.toLowerCase()] = attr; + }); + + (function(v) { + Object.extend(v, { + href: v._getAttr2, + src: v._getAttr2, + type: v._getAttr, + action: v._getAttrNode, + disabled: v._flag, + checked: v._flag, + readonly: v._flag, + multiple: v._flag, + onload: v._getEv, + onunload: v._getEv, + onclick: v._getEv, + ondblclick: v._getEv, + onmousedown: v._getEv, + onmouseup: v._getEv, + onmouseover: v._getEv, + onmousemove: v._getEv, + onmouseout: v._getEv, + onfocus: v._getEv, + onblur: v._getEv, + onkeypress: v._getEv, + onkeydown: v._getEv, + onkeyup: v._getEv, + onsubmit: v._getEv, + onreset: v._getEv, + onselect: v._getEv, + onchange: v._getEv + }); + })(Element._attributeTranslations.read.values); + + if (Prototype.BrowserFeatures.ElementExtensions) { + (function() { + function _descendants(element) { + var nodes = element.getElementsByTagName('*'), results = []; + for (var i = 0, node; node = nodes[i]; i++) + if (node.tagName !== "!") // Filter out comment nodes. + results.push(node); + return results; + } + + Element.Methods.down = function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return element.firstDescendant(); + return Object.isNumber(expression) ? _descendants(element)[expression] : + Element.select(element, expression)[index || 0]; + }; + })(); + } + +} + +else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1) ? 0.999999 : + (value === '') ? '' : (value < 0.00001) ? 0 : value; + return element; + }; +} + +else if (Prototype.Browser.WebKit) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + + if (value == 1) + if (element.tagName.toUpperCase() == 'IMG' && element.width) { + element.width++; element.width--; + } else try { + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch (e) { } + + return element; + }; +} + +if ('outerHTML' in document.documentElement) { + Element.Methods.replace = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (Element._insertionTranslations.tags[tagName]) { + var nextSibling = element.next(), + fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + parent.removeChild(element); + if (nextSibling) + fragments.each(function(node) { parent.insertBefore(node, nextSibling); }); + else + fragments.each(function(node) { parent.appendChild(node); }); + } + else element.outerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +Element._returnOffset = function(l, t) { + var result = [l, t]; + result.left = l; + result.top = t; + return result; +}; + +Element._getContentFromAnonymousElement = function(tagName, html, force) { + var div = new Element('div'), + t = Element._insertionTranslations.tags[tagName]; + + var workaround = false; + if (t) workaround = true; + else if (force) { + workaround = true; + t = ['', '', 0]; + } + + if (workaround) { + div.innerHTML = ' ' + t[0] + html + t[1]; + div.removeChild(div.firstChild); + for (var i = t[2]; i--; ) { + div = div.firstChild; + } + } + else { + div.innerHTML = html; + } + return $A(div.childNodes); +}; + +Element._insertionTranslations = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + tags: { + TABLE: ['
                            test
                            ', '
                            ', 1], + TBODY: ['', '
                            ', 2], + TR: ['', '
                            ', 3], + TD: ['
                            ', '
                            ', 4], + SELECT: ['', 1] + } +}; + +(function() { + var tags = Element._insertionTranslations.tags; + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD + }); +})(); + +Element.Methods.Simulated = { + hasAttribute: function(element, attribute) { + attribute = Element._attributeTranslations.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } +}; + +Element.Methods.ByTag = { }; + +Object.extend(Element, Element.Methods); + +(function(div) { + + if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) { + window.HTMLElement = { }; + window.HTMLElement.prototype = div['__proto__']; + Prototype.BrowserFeatures.ElementExtensions = true; + } + + div = null; + +})(document.createElement('div')); + +Element.extend = (function() { + + function checkDeficiency(tagName) { + if (typeof window.Element != 'undefined') { + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random()+'').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + } + return false; + } + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object'); + + if (Prototype.BrowserFeatures.SpecificElementExtensions) { + if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) { + return function(element) { + if (element && typeof element._extendedByPrototype == 'undefined') { + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + } + return element; + }; + } + return Prototype.K; + } + + var Methods = { }, ByTag = Element.Methods.ByTag; + + var extend = Object.extend(function(element) { + if (!element || typeof element._extendedByPrototype != 'undefined' || + element.nodeType != 1 || element == window) return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(); + + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + extendElementWith(element, methods); + + element._extendedByPrototype = Prototype.emptyFunction; + return element; + + }, { + refresh: function() { + if (!Prototype.BrowserFeatures.ElementExtensions) { + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + } + } + }); + + extend.refresh(); + return extend; +})(); + +if (document.documentElement.hasAttribute) { + Element.hasAttribute = function(element, attribute) { + return element.hasAttribute(attribute); + }; +} +else { + Element.hasAttribute = Element.Methods.Simulated.hasAttribute; +} + +Element.addMethods = function(methods) { + var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; + + if (!methods) { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods), + "BUTTON": Object.clone(Form.Element.Methods) + }); + } + + if (arguments.length == 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) Object.extend(Element.Methods, methods || { }); + else { + if (Object.isArray(tagName)) tagName.each(extend); + else extend(tagName); + } + + function extend(tagName) { + tagName = tagName.toUpperCase(); + if (!Element.Methods.ByTag[tagName]) + Element.Methods.ByTag[tagName] = { }; + Object.extend(Element.Methods.ByTag[tagName], methods); + } + + function copy(methods, destination, onlyIfAbsent) { + onlyIfAbsent = onlyIfAbsent || false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; + } + + var elementPrototype = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + + if (F.ElementExtensions) { + copy(Element.Methods, elementPrototype); + copy(Element.Methods.Simulated, elementPrototype, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + copy(T[tag], klass.prototype); + } + } + + Object.extend(Element, Element.Methods); + delete Element.ByTag; + + if (Element.extend.refresh) Element.extend.refresh(); + Element.cache = { }; +}; + + +document.viewport = { + + getDimensions: function() { + return { width: this.getWidth(), height: this.getHeight() }; + }, + + getScrollOffsets: function() { + return Element._returnOffset( + window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, + window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); + } +}; + +(function(viewport) { + var B = Prototype.Browser, doc = document, element, property = {}; + + function getRootElement() { + if (B.WebKit && !doc.evaluate) + return document; + + if (B.Opera && window.parseFloat(window.opera.version()) < 9.5) + return document.body; + + return document.documentElement; + } + + function define(D) { + if (!element) element = getRootElement(); + + property[D] = 'client' + D; + + viewport['get' + D] = function() { return element[property[D]]; }; + return viewport['get' + D](); + } + + viewport.getWidth = define.curry('Width'); + + viewport.getHeight = define.curry('Height'); +})(document.viewport); + + +Element.Storage = { + UID: 1 +}; + +Element.addMethods({ + getStorage: function(element) { + if (!(element = $(element))) return; + + var uid; + if (element === window) { + uid = 0; + } else { + if (typeof element._prototypeUID === "undefined") + element._prototypeUID = Element.Storage.UID++; + uid = element._prototypeUID; + } + + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; + }, + + store: function(element, key, value) { + if (!(element = $(element))) return; + + if (arguments.length === 2) { + Element.getStorage(element).update(key); + } else { + Element.getStorage(element).set(key, value); + } + + return element; + }, + + retrieve: function(element, key, defaultValue) { + if (!(element = $(element))) return; + var hash = Element.getStorage(element), value = hash.get(key); + + if (Object.isUndefined(value)) { + hash.set(key, defaultValue); + value = defaultValue; + } + + return value; + }, + + clone: function(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + clone._prototypeUID = void 0; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) { + descendants[i]._prototypeUID = void 0; + } + } + return Element.extend(clone); + }, + + purge: function(element) { + if (!(element = $(element))) return; + var purgeElement = Element._purgeElement; + + purgeElement(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + + while (i--) purgeElement(descendants[i]); + + return null; + } +}); + +(function() { + + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } + + function getPixelValue(value, property, context) { + var element = null; + if (Object.isElement(value)) { + element = value; + value = element.getStyle(property); + } + + if (value === null) { + return null; + } + + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + var isPercentage = value.include('%'), isViewport = (context === document.viewport); + + if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (element && isPercentage) { + context = context || element.parentNode; + var decimal = toDecimal(value); + var whole = null; + var position = element.getStyle('position'); + + var isHorizontal = property.include('left') || property.include('right') || + property.include('width'); + + var isVertical = property.include('top') || property.include('bottom') || + property.include('height'); + + if (context === document.viewport) { + if (isHorizontal) { + whole = document.viewport.getWidth(); + } else if (isVertical) { + whole = document.viewport.getHeight(); + } + } else { + if (isHorizontal) { + whole = $(context).measure('width'); + } else if (isVertical) { + whole = $(context).measure('height'); + } + } + + return (whole === null) ? 0 : whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) { + return number; + } + return number + 'px'; + } + + function isDisplayed(element) { + var originalElement = element; + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; + } + }, + + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._prepared) return; + + var element = this.element; + if (isDisplayed(element)) { + this._prepared = true; + return; + } + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = element.getStyle('position'), + width = element.getStyle('width'); + + if (width === "0px" || width === null) { + element.style.display = 'block'; + width = element.getStyle('width'); + } + + var context = (position === 'fixed') ? document.viewport : + element.parentNode; + + element.setStyle({ + position: 'absolute', + visibility: 'hidden', + display: 'block' + }); + + var positionedWidth = element.getStyle('width'); + + var newWidth; + if (width && (positionedWidth === width)) { + newWidth = getPixelValue(element, 'width', context); + } else if (position === 'absolute' || position === 'fixed') { + newWidth = getPixelValue(element, 'width', context); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); + } + + element.setStyle({ width: newWidth + 'px' }); + + this._prepared = true; + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._prepared = false; + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; + } + + return this._set(property, COMPUTATIONS[property].call(this, this.element)); + }, + + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; + }, + + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); + }, + + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + if (!this._preComputing) this._begin(); + var height = element.offsetHeight; + if (!this._preComputing) this._end(); + return height; + }, + + 'border-box-width': function(element) { + if (!this._preComputing) this._begin(); + var width = element.offsetWidth; + if (!this._preComputing) this._end(); + return width; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getDimensions(element) { + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; + } + + function getOffsetParent(element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return isHtml(element) ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + element = $(element); + var valueT = 0, valueL = 0; + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + element = $(element); + + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + element = $(element); + var valueT = 0, valueL = 0, docBody = document.body; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + if (Prototype.Browser.IE) { + getOffsetParent = getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + positionedOffset = positionedOffset.wrap(function(proceed, element) { + element = $(element); + if (!element.parentNode) return new Element.Offset(0, 0); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + hasLayout(offsetParent); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + }); + } else if (Prototype.Browser.Webkit) { + cumulativeOffset = function(element) { + element = $(element); + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) + if (Element.getStyle(element, 'position') == 'absolute') break; + + element = element.offsetParent; + } while (element); + + return new Element.Offset(valueL, valueT); + }; + } + + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isHtml(element) { + return element.nodeName.toUpperCase() === 'HTML'; + } + + function isDocument(element) { + return element.nodeType === Node.DOCUMENT_NODE; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + } + }); + } +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +Prototype._original_property = window.Sizzle; +/*! + * Sizzle CSS Selector Engine - v1.0 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true; + +[0, 0].sort(function(){ + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function(selector, context, results, seed) { + results = results || []; + var origContext = context = context || document; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context), + soFar = selector; + + while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) + selector += parts.shift(); + + set = posProcess( selector, set ); + } + } + } else { + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + var ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; + } + + if ( context ) { + var ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray(set); + } else { + prune = false; + } + + while ( parts.length ) { + var cur = parts.pop(), pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + throw "Syntax error, unrecognized expression: " + (cur || selector); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + } else if ( context && context.nodeType === 1 ) { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + } else { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function(results){ + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort(sortOrder); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[i-1] ) { + results.splice(i--, 1); + } + } + } + } + + return results; +}; + +Sizzle.matches = function(expr, set){ + return Sizzle(expr, null, null, set); +}; + +Sizzle.find = function(expr, context, isXML){ + var set, match; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var type = Expr.order[i], match; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice(1,1); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace(/\\/g, ""); + set = Expr.find[ type ]( match, context, isXML ); + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = context.getElementsByTagName("*"); + } + + return {set: set, expr: expr}; +}; + +Sizzle.filter = function(expr, set, inplace, not){ + var old = expr, result = [], curLoop = set, match, anyFound, + isXMLFilter = set && set[0] && isXML(set[0]); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.match[ type ].exec( expr )) != null ) { + var filter = Expr.filter[ type ], found, item; + anyFound = false; + + if ( curLoop == result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + } else { + curLoop[i] = false; + } + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + if ( expr == old ) { + if ( anyFound == null ) { + throw "Syntax error, unrecognized expression: " + expr; + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + match: { + ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/ + }, + leftMatch: {}, + attrMap: { + "class": "className", + "for": "htmlFor" + }, + attrHandle: { + href: function(elem){ + return elem.getAttribute("href"); + } + }, + relative: { + "+": function(checkSet, part, isXML){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !/\W/.test(part), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag && !isXML ) { + part = part.toUpperCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + ">": function(checkSet, part, isXML){ + var isPartStr = typeof part === "string"; + + if ( isPartStr && !/\W/.test(part) ) { + part = isXML ? part : part.toUpperCase(); + + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName === part ? parent : false; + } + } + } else { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + "": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( !/\W/.test(part) ) { + var nodeCheck = part = isXML ? part : part.toUpperCase(); + checkFn = dirNodeCheck; + } + + checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); + }, + "~": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + var nodeCheck = part = isXML ? part : part.toUpperCase(); + checkFn = dirNodeCheck; + } + + checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); + } + }, + find: { + ID: function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? [m] : []; + } + }, + NAME: function(match, context, isXML){ + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], results = context.getElementsByName(match[1]); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + TAG: function(match, context){ + return context.getElementsByTagName(match[1]); + } + }, + preFilter: { + CLASS: function(match, curLoop, inplace, result, not, isXML){ + match = " " + match[1].replace(/\\/g, "") + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) { + if ( !inplace ) + result.push( elem ); + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + ID: function(match){ + return match[1].replace(/\\/g, ""); + }, + TAG: function(match, curLoop){ + for ( var i = 0; curLoop[i] === false; i++ ){} + return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase(); + }, + CHILD: function(match){ + if ( match[1] == "nth" ) { + var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( + match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + + match[0] = done++; + + return match; + }, + ATTR: function(match, curLoop, inplace, result, not, isXML){ + var name = match[1].replace(/\\/g, ""); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + PSEUDO: function(match, curLoop, inplace, result, not){ + if ( match[1] === "not" ) { + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + if ( !inplace ) { + result.push.apply( result, ret ); + } + return false; + } + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + POS: function(match){ + match.unshift( true ); + return match; + } + }, + filters: { + enabled: function(elem){ + return elem.disabled === false && elem.type !== "hidden"; + }, + disabled: function(elem){ + return elem.disabled === true; + }, + checked: function(elem){ + return elem.checked === true; + }, + selected: function(elem){ + elem.parentNode.selectedIndex; + return elem.selected === true; + }, + parent: function(elem){ + return !!elem.firstChild; + }, + empty: function(elem){ + return !elem.firstChild; + }, + has: function(elem, i, match){ + return !!Sizzle( match[3], elem ).length; + }, + header: function(elem){ + return /h\d/i.test( elem.nodeName ); + }, + text: function(elem){ + return "text" === elem.type; + }, + radio: function(elem){ + return "radio" === elem.type; + }, + checkbox: function(elem){ + return "checkbox" === elem.type; + }, + file: function(elem){ + return "file" === elem.type; + }, + password: function(elem){ + return "password" === elem.type; + }, + submit: function(elem){ + return "submit" === elem.type; + }, + image: function(elem){ + return "image" === elem.type; + }, + reset: function(elem){ + return "reset" === elem.type; + }, + button: function(elem){ + return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON"; + }, + input: function(elem){ + return /input|select|textarea|button/i.test(elem.nodeName); + } + }, + setFilters: { + first: function(elem, i){ + return i === 0; + }, + last: function(elem, i, match, array){ + return i === array.length - 1; + }, + even: function(elem, i){ + return i % 2 === 0; + }, + odd: function(elem, i){ + return i % 2 === 1; + }, + lt: function(elem, i, match){ + return i < match[3] - 0; + }, + gt: function(elem, i, match){ + return i > match[3] - 0; + }, + nth: function(elem, i, match){ + return match[3] - 0 == i; + }, + eq: function(elem, i, match){ + return match[3] - 0 == i; + } + }, + filter: { + PSEUDO: function(elem, match, i, array){ + var name = match[1], filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0; + } else if ( name === "not" ) { + var not = match[3]; + + for ( var i = 0, l = not.length; i < l; i++ ) { + if ( not[i] === elem ) { + return false; + } + } + + return true; + } + }, + CHILD: function(elem, match){ + var type = match[1], node = elem; + switch (type) { + case 'only': + case 'first': + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) return false; + } + if ( type == 'first') return true; + node = elem; + case 'last': + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) return false; + } + return true; + case 'nth': + var first = match[2], last = match[3]; + + if ( first == 1 && last == 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + if ( first == 0 ) { + return diff == 0; + } else { + return ( diff % first == 0 && diff / first >= 0 ); + } + } + }, + ID: function(elem, match){ + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + TAG: function(elem, match){ + return (match === "*" && elem.nodeType === 1) || elem.nodeName === match; + }, + CLASS: function(elem, match){ + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + ATTR: function(elem, match){ + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value != check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + POS: function(elem, match, i, array){ + var name = match[2], filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source ); +} + +var makeArray = function(array, results) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 ); + +} catch(e){ + makeArray = function(array, results) { + var ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + } else { + if ( typeof array.length === "number" ) { + for ( var i = 0, l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + } else { + for ( var i = 0; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + if ( a == b ) { + hasDuplicate = true; + } + return 0; + } + + var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( "sourceIndex" in document.documentElement ) { + sortOrder = function( a, b ) { + if ( !a.sourceIndex || !b.sourceIndex ) { + if ( a == b ) { + hasDuplicate = true; + } + return 0; + } + + var ret = a.sourceIndex - b.sourceIndex; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( document.createRange ) { + sortOrder = function( a, b ) { + if ( !a.ownerDocument || !b.ownerDocument ) { + if ( a == b ) { + hasDuplicate = true; + } + return 0; + } + + var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); + aRange.setStart(a, 0); + aRange.setEnd(a, 0); + bRange.setStart(b, 0); + bRange.setEnd(b, 0); + var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} + +(function(){ + var form = document.createElement("div"), + id = "script" + (new Date).getTime(); + form.innerHTML = ""; + + var root = document.documentElement; + root.insertBefore( form, root.firstChild ); + + if ( !!document.getElementById( id ) ) { + Expr.find.ID = function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; + } + }; + + Expr.filter.ID = function(elem, match){ + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + root = form = null; // release memory in IE +})(); + +(function(){ + + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function(match, context){ + var results = context.getElementsByTagName(match[1]); + + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + div.innerHTML = ""; + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + Expr.attrHandle.href = function(elem){ + return elem.getAttribute("href", 2); + }; + } + + div = null; // release memory in IE +})(); + +if ( document.querySelectorAll ) (function(){ + var oldSizzle = Sizzle, div = document.createElement("div"); + div.innerHTML = "

                            "; + + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function(query, context, extra, seed){ + context = context || document; + + if ( !seed && context.nodeType === 9 && !isXML(context) ) { + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(e){} + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + div = null; // release memory in IE +})(); + +if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){ + var div = document.createElement("div"); + div.innerHTML = "
                            "; + + if ( div.getElementsByClassName("e").length === 0 ) + return; + + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) + return; + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function(match, context, isXML) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + div = null; // release memory in IE +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + var sibDir = dir == "previousSibling" && !isXML; + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + if ( sibDir && elem.nodeType === 1 ){ + elem.sizcache = doneName; + elem.sizset = i; + } + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + var sibDir = dir == "previousSibling" && !isXML; + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + if ( sibDir && elem.nodeType === 1 ) { + elem.sizcache = doneName; + elem.sizset = i; + } + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +var contains = document.compareDocumentPosition ? function(a, b){ + return a.compareDocumentPosition(b) & 16; +} : function(a, b){ + return a !== b && (a.contains ? a.contains(b) : true); +}; + +var isXML = function(elem){ + return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || + !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML"; +}; + +var posProcess = function(selector, context){ + var tmpSet = [], later = "", match, + root = context.nodeType ? [context] : context; + + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + + +window.Sizzle = Sizzle; + +})(); + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + +var Form = { + reset: function(form) { + form = $(form); + form.reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit, accumulator, initial; + + if (options.hash) { + initial = {}; + accumulator = function(result, key, value) { + if (key in result) { + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key].push(value); + } else result[key] = value; + return result; + }; + } else { + initial = ''; + accumulator = function(result, key, value) { + return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(value); + }; + } + + return elements.inject(initial, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + result = accumulator(result, key, value); + } + } + return result; + }); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + getElements: function(form) { + var elements = $(form).getElementsByTagName('*'), + element, + arr = [ ], + serializers = Form.Element.Serializers; + for (var i = 0; element = elements[i]; i++) { + arr.push(element); + } + return arr.inject([], function(elements, child) { + if (serializers[child.tagName.toLowerCase()]) + elements.push(Element.extend(child)); + return elements; + }); + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex; }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return /^(?:input|select|textarea)$/i.test(element.tagName); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + var element = form.findFirstElement(); + if (element) element.activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !(/^(?:button|reset|submit)$/i.test(element.type)))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; + +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = (function() { + function input(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return inputSelector(element, value); + default: + return valueSelector(element, value); + } + } + + function inputSelector(element, value) { + if (Object.isUndefined(value)) + return element.checked ? element.value : null; + else element.checked = !!value; + } + + function valueSelector(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + } + + function select(element, value) { + if (Object.isUndefined(value)) + return (element.type === 'select-one' ? selectOne : selectMany)(element); + + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + + function selectOne(element) { + var index = element.selectedIndex; + return index >= 0 ? optionValue(element.options[index]) : null; + } + + function selectMany(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(optionValue(opt)); + } + return values; + } + + function optionValue(opt) { + return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; + } + + return { + input: input, + inputSelector: inputSelector, + textarea: valueSelector, + select: select, + selectOne: selectOne, + selectMany: selectMany, + optionValue: optionValue, + button: valueSelector + }; +})(); + +/*--------------------------------------------------------------------------*/ + + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +(function() { + + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45, + + cache: {} + }; + + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + + + var isIELegacyEvent = function(event) { return false; }; + + if (window.attachEvent) { + if (window.addEventListener) { + isIELegacyEvent = function(event) { + return !(event instanceof window.Event); + }; + } else { + isIELegacyEvent = function(event) { return true; }; + } + } + + var _isButton; + + function _isButtonForDOMEvents(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + } + + var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; + function _isButtonForLegacyEvents(event, code) { + return event.button === legacyButtonMap[code]; + } + + function _isButtonForWebKit(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 2 || (event.which == 1 && event.metaKey); + case 2: return event.which == 3; + default: return false; + } + } + + if (window.attachEvent) { + if (!window.addEventListener) { + _isButton = _isButtonForLegacyEvents; + } else { + _isButton = function(event, code) { + return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : + _isButtonForDOMEvents(event, code); + }; + } + } else if (Prototype.Browser.WebKit) { + _isButton = _isButtonForWebKit; + } else { + _isButton = _isButtonForDOMEvents; + } + + function isLeftClick(event) { return _isButton(event, 0); } + + function isMiddleClick(event) { return _isButton(event, 1); } + + function isRightClick(event) { return _isButton(event, 2); } + + function element(event) { + event = Event.extend(event); + + var node = event.target, type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + + if (node.nodeType == Node.TEXT_NODE) + node = node.parentNode; + + return Element.extend(node); + } + + function findElement(event, expression) { + var element = Event.element(event); + + if (!expression) return element; + while (element) { + if (Object.isElement(element) && Prototype.Selector.match(element, expression)) { + return Element.extend(element); + } + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (window.attachEvent) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': + case 'mouseenter': + element = event.fromElement; + break; + case 'mouseout': + case 'mouseleave': + element = event.toElement; + break; + default: + return null; + } + return Element.extend(element); + } + + var additionalMethods = { + stopPropagation: function() { this.cancelBubble = true; }, + preventDefault: function() { this.returnValue = false; }, + inspect: function() { return '[object Event]'; } + }; + + Event.extend = function(event, element) { + if (!event) return false; + + if (!isIELegacyEvent(event)) return event; + + if (event._extendedByPrototype) return event; + event._extendedByPrototype = Prototype.emptyFunction; + + var pointer = Event.pointer(event); + + Object.extend(event, { + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + + Object.extend(event, methods); + Object.extend(event, additionalMethods); + + return event; + }; + } else { + Event.extend = Prototype.K; + } + + if (window.addEventListener) { + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; + Object.extend(Event.prototype, methods); + } + + function _createResponder(element, eventName, handler) { + var registry = Element.retrieve(element, 'prototype_event_registry'); + + if (Object.isUndefined(registry)) { + CACHE.push(element); + registry = Element.retrieve(element, 'prototype_event_registry', $H()); + } + + var respondersForEvent = registry.get(eventName); + if (Object.isUndefined(respondersForEvent)) { + respondersForEvent = []; + registry.set(eventName, respondersForEvent); + } + + if (respondersForEvent.pluck('handler').include(handler)) return false; + + var responder; + if (eventName.include(":")) { + responder = function(event) { + if (Object.isUndefined(event.eventName)) + return false; + + if (event.eventName !== eventName) + return false; + + Event.extend(event, element); + handler.call(element, event); + }; + } else { + if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === "mouseenter" || eventName === "mouseleave")) { + if (eventName === "mouseenter" || eventName === "mouseleave") { + responder = function(event) { + Event.extend(event, element); + + var parent = event.relatedTarget; + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } + + if (parent === element) return; + + handler.call(element, event); + }; + } + } else { + responder = function(event) { + Event.extend(event, element); + handler.call(element, event); + }; + } + } + + responder.handler = handler; + respondersForEvent.push(responder); + return responder; + } + + function _destroyCache() { + for (var i = 0, length = CACHE.length; i < length; i++) { + Event.stopObserving(CACHE[i]); + CACHE[i] = null; + } + } + + var CACHE = []; + + if (Prototype.Browser.IE) + window.attachEvent('onunload', _destroyCache); + + if (Prototype.Browser.WebKit) + window.addEventListener('unload', Prototype.emptyFunction, false); + + + var _getDOMEventName = Prototype.K, + translations = { mouseenter: "mouseover", mouseleave: "mouseout" }; + + if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) { + _getDOMEventName = function(eventName) { + return (translations[eventName] || eventName); + }; + } + + function observe(element, eventName, handler) { + element = $(element); + + var responder = _createResponder(element, eventName, handler); + + if (!responder) return element; + + if (eventName.include(':')) { + if (element.addEventListener) + element.addEventListener("dataavailable", responder, false); + else { + element.attachEvent("ondataavailable", responder); + element.attachEvent("onlosecapture", responder); + } + } else { + var actualEventName = _getDOMEventName(eventName); + + if (element.addEventListener) + element.addEventListener(actualEventName, responder, false); + else + element.attachEvent("on" + actualEventName, responder); + } + + return element; + } + + function stopObserving(element, eventName, handler) { + element = $(element); + + var registry = Element.retrieve(element, 'prototype_event_registry'); + if (!registry) return element; + + if (!eventName) { + registry.each( function(pair) { + var eventName = pair.key; + stopObserving(element, eventName); + }); + return element; + } + + var responders = registry.get(eventName); + if (!responders) return element; + + if (!handler) { + responders.each(function(r) { + stopObserving(element, eventName, r.handler); + }); + return element; + } + + var i = responders.length, responder; + while (i--) { + if (responders[i].handler === handler) { + responder = responders[i]; + break; + } + } + if (!responder) return element; + + if (eventName.include(':')) { + if (element.removeEventListener) + element.removeEventListener("dataavailable", responder, false); + else { + element.detachEvent("ondataavailable", responder); + element.detachEvent("onlosecapture", responder); + } + } else { + var actualEventName = _getDOMEventName(eventName); + if (element.removeEventListener) + element.removeEventListener(actualEventName, responder, false); + else + element.detachEvent('on' + actualEventName, responder); + } + + registry.set(eventName, responders.without(responder)); + + return element; + } + + function fire(element, eventName, memo, bubble) { + element = $(element); + + if (Object.isUndefined(bubble)) + bubble = true; + + if (element == document && document.createEvent && !element.dispatchEvent) + element = document.documentElement; + + var event; + if (document.createEvent) { + event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', bubble, true); + } else { + event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; + } + + event.eventName = eventName; + event.memo = memo || { }; + + if (document.createEvent) + element.dispatchEvent(event); + else + element.fireEvent(event.eventType, event); + + return Event.extend(event); + } + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = Event.findElement(event, this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (window.Event) Object.extend(window.Event, Event); + else window.Event = Event; +})(); + +(function() { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ + + var timer; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (timer) window.clearTimeout(timer); + document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.stopObserving('readystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { document.documentElement.doScroll('left'); } + catch(e) { + timer = pollDoScroll.defer(); + return; + } + fireContentLoadedEvent(); + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); + } else { + document.observe('readystatechange', checkReadyState); + if (window == top) + timer = pollDoScroll.defer(); + } + + Event.observe(window, 'load', fireContentLoadedEvent); +})(); + +Element.addMethods(); + +/*------------------------------- DEPRECATED -------------------------------*/ + +Hash.toQueryString = Object.toQueryString; + +var Toggle = { display: Element.toggle }; + +Element.Methods.childOf = Element.Methods.descendantOf; + +var Insertion = { + Before: function(element, content) { + return Element.insert(element, {before:content}); + }, + + Top: function(element, content) { + return Element.insert(element, {top:content}); + }, + + Bottom: function(element, content) { + return Element.insert(element, {bottom:content}); + }, + + After: function(element, content) { + return Element.insert(element, {after:content}); + } +}; + +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); + +var Position = { + includeScrollOffsets: false, + + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = Element.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = Element.cumulativeScrollOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = Element.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + + cumulativeOffset: Element.Methods.cumulativeOffset, + + positionedOffset: Element.Methods.positionedOffset, + + absolutize: function(element) { + Position.prepare(); + return Element.absolutize(element); + }, + + relativize: function(element) { + Position.prepare(); + return Element.relativize(element); + }, + + realOffset: Element.Methods.cumulativeScrollOffset, + + offsetParent: Element.Methods.getOffsetParent, + + page: Element.Methods.viewportOffset, + + clone: function(source, target, options) { + options = options || { }; + return Element.clonePosition(target, source, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ + function iter(name) { + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; + } + + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? + function(element, className) { + className = className.toString().strip(); + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; + } : function(element, className) { + className = className.toString().strip(); + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); + if (!classNames && !className) return elements; + + var nodes = $(element).getElementsByTagName('*'); + className = ' ' + className + ' '; + + for (var i = 0, child, cn; child = nodes[i]; i++) { + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || + (classNames && classNames.all(function(name) { + return !name.toString().blank() && cn.include(' ' + name + ' '); + })))) + elements.push(Element.extend(child)); + } + return elements; + }; + + return function(className, parentElement) { + return $(parentElement || document.body).getElementsByClassName(className); + }; +}(Element.Methods); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); + +/*--------------------------------------------------------------------------*/ + +(function() { + window.Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + }, + + findElements: function(rootElement) { + return Prototype.Selector.select(this.expression, rootElement); + }, + + match: function(element) { + return Prototype.Selector.match(element, this.expression); + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Selector, { + matchElements: function(elements, expression) { + var match = Prototype.Selector.match, + results = []; + + for (var i = 0, length = elements.length; i < length; i++) { + var element = elements[i]; + if (match(element, expression)) { + results.push(Element.extend(element)); + } + } + return results; + }, + + findElement: function(elements, expression, index) { + index = index || 0; + var matchIndex = 0, element; + for (var i = 0, length = elements.length; i < length; i++) { + element = elements[i]; + if (Prototype.Selector.match(element, expression) && index === matchIndex++) { + return Element.extend(element); + } + } + }, + + findChildElements: function(element, expressions) { + var selector = expressions.toArray().join(', '); + return Prototype.Selector.select(selector, element || document); + } + }); +})(); diff --git a/usr/local/www/javascript/scriptaculous/scriptaculous.js b/usr/local/www/javascript/scriptaculous/scriptaculous.js new file mode 100644 index 000000000..6bf437acc --- /dev/null +++ b/usr/local/www/javascript/scriptaculous/scriptaculous.js @@ -0,0 +1,68 @@ +// script.aculo.us scriptaculous.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009 + +// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// For details, see the script.aculo.us web site: http://script.aculo.us/ + +var Scriptaculous = { + Version: '1.8.3', + require: function(libraryName) { + try{ + // inserting via DOM fails in Safari 2.0, so brute force approach + document.write(' to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. + + -- pfSense modifications -- + Allow for sorting of IP adresses + 2012-09-15 Allow for multiple header rows, using "sortableHeaderRowIdentifier" class for the TR that has the column headers. (used in firewall-log) + 2012-09-15 Allow sorting multiple dual/mutlti rows together, using sortablemultirow="2" attribute for the table + 2012-09-15 Allow sorting of IP:Port texts, changed sort compare function + 2012-11-05 Allow sorting of IP:Port and *:port texts toghether also AAA_23 AAA_123 in 'numeric order' (used in Diagnostics\Sockets column LOCAL) +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + headrow = undefined; + if (table.tHead.rows.length == 1) + headrow = table.tHead.rows[0].cells; + else + { + //if multiple rows are found one must be marked with class + for (var i=0; i5' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody, sortableMultirow); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' 6' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' 6' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody, sortableMultirow) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i=0; i-=sortableMultirow) { + for(var j=sortableMultirow-1;j>=0;j--) + { + tbody.appendChild(newrows[i-j]); + } + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0] b2match) return 1; + if (a2match < b2match) return -1; + } + if (a[0] == b[0]) return 0; + if (a[0] < b[0]) return -1; + return 1; + }, + sort_ipaddr: function(a,b) { + aip = ip2ulong(a[0]); + bip = ip2ulong(b[0]); + if (aip && bip) + { + if (aip == bip) return 0; + if (aip < bip) return -1; + return 1; + } else { + if (aip !== false || bip !== false) + return aip === false ? -1 : 1; + else + { + return sorttable.sortWithNumber(a,b); + } + } + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +}; + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +function ip2ulong(ip) { + ip += ""; + var ulip = false; + var octets = []; + ipportmatch = ip.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:[0-9]{1,5}\b/);// IP:port + if (ipportmatch) { + ipportmatch += ""; + ipport = ipportmatch.split(':'); + octets = ipport[0].split('.'); + for (i=0; i < 4; i++) { + ulip += octets[i] * Math.pow(256, (5-i)); + } + ulip += parseInt(ipport[1]); + } else { + ipmatch = ip.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/);// IP only + if (ipmatch) { + ipmatch+=""; + octets = ipmatch.split('.'); + for (i=0; i < 4; i++) { + ulip += octets[i] * Math.pow(256, (5-i)); + } + } + } + return ulip; +} + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +}; + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; + diff --git a/usr/local/www/javascript/suggestions.js b/usr/local/www/javascript/suggestions.js new file mode 100644 index 000000000..682a35245 --- /dev/null +++ b/usr/local/www/javascript/suggestions.js @@ -0,0 +1,33 @@ + +/** + * Provides suggestions for state names (USA). + * @class + * @scope public + */ +function StateSuggestions(text) { + this.states = text; +} + +/** + * Request suggestions for the given autosuggest control. + * @scope protected + * @param oAutoSuggestControl The autosuggest control to provide suggestions for. + */ +StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/, + bTypeAhead /*:boolean*/) { + var aSuggestions = []; + var sTextboxValue = oAutoSuggestControl.textbox.value; + + if (sTextboxValue.length > 0){ + + //search for matching states + for (var i=0; i < this.states.length; i++) { + if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) { + aSuggestions.push(this.states[i]); + } + } + } + + //provide suggestions to the control + oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead); +}; diff --git a/usr/local/www/javascript/ticker.js b/usr/local/www/javascript/ticker.js new file mode 100644 index 000000000..defb1d84d --- /dev/null +++ b/usr/local/www/javascript/ticker.js @@ -0,0 +1,73 @@ +/* $Id$ */ +/* + ticker.js + Copyright (C) 2012 Marcello Coutinho + Copyright (C) 2012 Carlos Cesario - carloscesario@gmail.com + All rights reserved. + + originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2004 Manuel Kasper . + 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. + + pfSense_MODULE: utils + +*/ +function notice_action(action,msgid) { + jQuery.ajax({ + type: 'post', + cache: false, + url: 'index.php', + data: {closenotice: msgid}, + success: function(response) { + jQuery('#menu_messages').html(response); + } + }); +} + +function pulsateText(elem) { + jQuery(elem).effect("pulsate", { times:12 }, 500); + jQuery(elem).effect("pulsate", { times:6 }, 1500); + jQuery(elem).effect("pulsate", { times:3 }, 2500); +} + +jQuery(document).ready(function() { + pulsateText('#marquee-text'); + jQuery('#marquee-text a').hover(function () { + jQuery(this).css('cursor','pointer'); + }); +}); + +function alias_popup(alias_id,theme,loading) { + domTT_update('ttalias_'+alias_id,""+loading+""); + jQuery.ajax({ + type: 'post', + cache: false, + url: "/index.php", + data: {aliasid:alias_id, act:'alias_info_popup'}, + success: function(response) { + //alert('
                            '+response.match(/

                            .*<\/table>/i)+'
                            '); + domTT_update('ttalias_'+alias_id,'
                            '+response.match(/

                            .*<\/table>/i)+'
                            '); + } + }); +} \ No newline at end of file diff --git a/usr/local/www/javascript/wizard/autosuggest.js b/usr/local/www/javascript/wizard/autosuggest.js new file mode 100644 index 000000000..6f0c10711 --- /dev/null +++ b/usr/local/www/javascript/wizard/autosuggest.js @@ -0,0 +1,336 @@ + +/** + * An autosuggest textbox control. + * @class + * @scope public + */ +function AutoSuggestControl(oTextbox /*:HTMLInputElement*/, + oProvider /*:SuggestionProvider*/) { + + /** + * The currently selected suggestions. + * @scope private + */ + this.cur /*:int*/ = -1; + + /** + * The dropdown list layer. + * @scope private + */ + this.layer = null; + + /** + * Suggestion provider for the autosuggest feature. + * @scope private. + */ + this.provider /*:SuggestionProvider*/ = oProvider; + + /** + * The textbox to capture. + * @scope private + */ + this.textbox /*:HTMLInputElement*/ = oTextbox; + + //initialize the control + this.init(); + +} + +/** + * Autosuggests one or more suggestions for what the user has typed. + * If no suggestions are passed in, then no autosuggest occurs. + * @scope private + * @param aSuggestions An array of suggestion strings. + * @param bTypeAhead If the control should provide a type ahead suggestion. + */ +AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/, + bTypeAhead /*:boolean*/) { + + //make sure there's at least one suggestion + if (aSuggestions.length > 0) { + if (bTypeAhead) { + this.typeAhead(aSuggestions[0]); + } + + this.showSuggestions(aSuggestions); + } else { + this.hideSuggestions(); + } +}; + +/** + * Creates the dropdown layer to display multiple suggestions. + * @scope private + */ +AutoSuggestControl.prototype.createDropDown = function () { + + var oThis = this; + + //create the layer and assign styles + this.layer = document.createElement("div"); + this.layer.className = "suggestions"; + this.layer.style.visibility = "hidden"; + this.layer.style.width = this.textbox.offsetWidth; + + //when the user clicks on the a suggestion, get the text (innerHTML) + //and place it into a textbox + this.layer.onmousedown = + this.layer.onmouseup = + this.layer.onmouseover = function (oEvent) { + oEvent = oEvent || window.event; + oTarget = oEvent.target || oEvent.srcElement; + + if (oEvent.type == "mousedown") { + oThis.textbox.value = oTarget.firstChild.nodeValue; + oThis.hideSuggestions(); + } else if (oEvent.type == "mouseover") { + oThis.highlightSuggestion(oTarget); + } else { + oThis.textbox.focus(); + } + }; + + + document.body.appendChild(this.layer); +}; + +/** + * Gets the left coordinate of the textbox. + * @scope private + * @return The left coordinate of the textbox in pixels. + */ +AutoSuggestControl.prototype.getLeft = function () /*:int*/ { + + var oNode = this.textbox; + var iLeft = 0; + + while(oNode.tagName != "BODY") { + iLeft += oNode.offsetLeft; + oNode = oNode.offsetParent; + } + + return iLeft; +}; + +/** + * Gets the top coordinate of the textbox. + * @scope private + * @return The top coordinate of the textbox in pixels. + */ +AutoSuggestControl.prototype.getTop = function () /*:int*/ { + + var oNode = this.textbox; + var iTop = 0; + + while(oNode.tagName != "BODY") { + iTop += oNode.offsetTop; + oNode = oNode.offsetParent; + } + + return iTop; +}; + +/** + * Handles three keydown events. + * @scope private + * @param oEvent The event object for the keydown event. + */ +AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) { + + switch(oEvent.keyCode) { + case 38: //up arrow + this.previousSuggestion(); + break; + case 40: //down arrow + this.nextSuggestion(); + break; + case 13: //enter + this.hideSuggestions(); + break; + } + +}; + +/** + * Handles keyup events. + * @scope private + * @param oEvent The event object for the keyup event. + */ +AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) { + + var iKeyCode = oEvent.keyCode; + + //for backspace (8) and delete (46), shows suggestions without typeahead + if (iKeyCode == 8 || iKeyCode == 46) { + this.provider.requestSuggestions(this, false); + + //make sure not to interfere with non-character keys + } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) { + //ignore + } else { + //request suggestions from the suggestion provider with typeahead + this.provider.requestSuggestions(this, true); + } +}; + +/** + * Hides the suggestion dropdown. + * @scope private + */ +AutoSuggestControl.prototype.hideSuggestions = function () { + this.layer.style.visibility = "hidden"; +}; + +/** + * Highlights the given node in the suggestions dropdown. + * @scope private + * @param oSuggestionNode The node representing a suggestion in the dropdown. + */ +AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) { + + for (var i=0; i < this.layer.childNodes.length; i++) { + var oNode = this.layer.childNodes[i]; + if (oNode == oSuggestionNode) { + oNode.className = "current"; + } else if (oNode.className == "current") { + oNode.className = ""; + } + } +}; + +/** + * Initializes the textbox with event handlers for + * auto suggest functionality. + * @scope private + */ +AutoSuggestControl.prototype.init = function () { + + //save a reference to this object + var oThis = this; + + //assign the onkeyup event handler + this.textbox.onkeyup = function (oEvent) { + + //check for the proper location of the event object + if (!oEvent) { + oEvent = window.event; + } + + //call the handleKeyUp() method with the event object + oThis.handleKeyUp(oEvent); + }; + + //assign onkeydown event handler + this.textbox.onkeydown = function (oEvent) { + + //check for the proper location of the event object + if (!oEvent) { + oEvent = window.event; + } + + //call the handleKeyDown() method with the event object + oThis.handleKeyDown(oEvent); + }; + + //assign onblur event handler (hides suggestions) + this.textbox.onblur = function () { + oThis.hideSuggestions(); + }; + + //create the suggestions dropdown + this.createDropDown(); +}; + +/** + * Highlights the next suggestion in the dropdown and + * places the suggestion into the textbox. + * @scope private + */ +AutoSuggestControl.prototype.nextSuggestion = function () { + var cSuggestionNodes = this.layer.childNodes; + + if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) { + var oNode = cSuggestionNodes[++this.cur]; + this.highlightSuggestion(oNode); + this.textbox.value = oNode.firstChild.nodeValue; + } +}; + +/** + * Highlights the previous suggestion in the dropdown and + * places the suggestion into the textbox. + * @scope private + */ +AutoSuggestControl.prototype.previousSuggestion = function () { + var cSuggestionNodes = this.layer.childNodes; + + if (cSuggestionNodes.length > 0 && this.cur > 0) { + var oNode = cSuggestionNodes[--this.cur]; + this.highlightSuggestion(oNode); + this.textbox.value = oNode.firstChild.nodeValue; + } +}; + +/** + * Selects a range of text in the textbox. + * @scope public + * @param iStart The start index (base 0) of the selection. + * @param iLength The number of characters to select. + */ +AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) { + + //use text ranges for Internet Explorer + if (this.textbox.createTextRange) { + var oRange = this.textbox.createTextRange(); + oRange.moveStart("character", iStart); + oRange.moveEnd("character", iLength - this.textbox.value.length); + oRange.select(); + + //use setSelectionRange() for Mozilla + } else if (this.textbox.setSelectionRange) { + this.textbox.setSelectionRange(iStart, iLength); + } + + //set focus back to the textbox + this.textbox.focus(); +}; + +/** + * Builds the suggestion layer contents, moves it into position, + * and displays the layer. + * @scope private + * @param aSuggestions An array of suggestions for the control. + */ +AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) { + + var oDiv = null; + this.layer.innerHTML = ""; //clear contents of the layer + + for (var i=0; i < aSuggestions.length; i++) { + oDiv = document.createElement("div"); + oDiv.appendChild(document.createTextNode(aSuggestions[i])); + this.layer.appendChild(oDiv); + } + + this.layer.style.left = this.getLeft() + "px"; + this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px"; + this.layer.style.visibility = "visible"; + +}; + +/** + * Inserts a suggestion into the textbox, highlighting the + * suggested part of the text. + * @scope private + * @param sSuggestion The suggestion for the textbox. + */ +AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) { + + //check for support of typeahead functionality + if (this.textbox.createTextRange || this.textbox.setSelectionRange){ + var iLen = this.textbox.value.length; + this.textbox.value = sSuggestion; + this.selectRange(iLen, sSuggestion.length); + } +}; + diff --git a/usr/local/www/javascript/wizard/disablekeys.js b/usr/local/www/javascript/wizard/disablekeys.js new file mode 100644 index 000000000..5d6c87af5 --- /dev/null +++ b/usr/local/www/javascript/wizard/disablekeys.js @@ -0,0 +1,6 @@ +function kH(e) { + var pK = document.all? window.event.keyCode:e.which; + return pK != 13; +} +document.onkeypress = kH; +if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file diff --git a/usr/local/www/javascript/wizard/suggestions.js b/usr/local/www/javascript/wizard/suggestions.js new file mode 100644 index 000000000..4d1e1276f --- /dev/null +++ b/usr/local/www/javascript/wizard/suggestions.js @@ -0,0 +1,33 @@ + +/** + * Provides suggestions for state names (USA). + * @class + * @scope public + */ +function StateSuggestions(text) { + this.states = text; +} + +/** + * Request suggestions for the given autosuggest control. + * @scope protected + * @param oAutoSuggestControl The autosuggest control to provide suggestions for. + */ +StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/, + bTypeAhead /*:boolean*/) { + var aSuggestions = []; + var sTextboxValue = oAutoSuggestControl.textbox.value; + + if (sTextboxValue.length > 0){ + + //search for matching states + for (var i=0; i < this.states.length; i++) { + if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) { + aSuggestions.push(this.states[i]); + } + } + } + + //provide suggestions to the control + oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead); +}; diff --git a/usr/local/www/license.php b/usr/local/www/license.php new file mode 100644 index 000000000..84aec4000 --- /dev/null +++ b/usr/local/www/license.php @@ -0,0 +1,145 @@ + + + + +

                            + +

                            ©
                            + .

                            + +

                            © + (mk@neon1.net).
                            + .

                            +


                            + :
                            +
                            +
                            + .
                            +
                            +
                            +
                            +
                            +
                            + "
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            .

                            +
                            +


                            + .

                            +

                            FreeBSD (http://www.freebsd.org)
                            + ©.
                            +
                            + http://www.php.net.
                            + © .
                            +
                            + (http://www.lighttpd.net)
                            + © +
                            +
                            + (http://www.isc.org/products/DHCP)
                            + ©
                            + ©
                            +
                            + (http://www.openbsd.org)
                            +
                            + (http://www.dellroad.org/mpd)
                            + © 2003-2004, Archie L. Cobbs, Michael Bretterklieber, Alexander Motin
                            +
                            +
                            + (http://software.wheelhouse.org/syslogd/)
                            + © 2001 Jeff Wheelhouse (jdw@wwwi.com)
                            +
                            + (http://www.thekelleys.org.uk)
                            + © 2000-2012 Simon Kelley.
                            +
                            + (http://ipsec-tools.sourceforge.net/)
                            + ©
                            +
                            + (http://www.hpcf.cam.ac.uk/export)
                            + ©
                            +
                            + (http://www.ece.ucdavis.edu/ucd-snmp)
                            + ©
                            + © .
                            + ©
                            + ©
                            +
                            + (http://choparp.sourceforge.net)
                            + © 1997 Takamichi Tateoka (tree@mma.club.uec.ac.jp)
                            + © 2002 Thomas Quinot (thomas@cuivre.fr.eu.org)
                            +
                            + (http://www.mavetju.org/programming/php.php)
                            +
                            +
                            +
                            + (http://ahh.sourceforge.net/wol)
                            + © 2000,2001,2002,2003,2004 Thomas Krennwallner <krennwallner@aon.at> +
                            + (http://openvpn.net/) + + + + diff --git a/usr/local/www/load_balancer_monitor.php b/usr/local/www/load_balancer_monitor.php new file mode 100644 index 000000000..79f06ee42 --- /dev/null +++ b/usr/local/www/load_balancer_monitor.php @@ -0,0 +1,137 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-services-loadbalancer-monitor +##|*NAME=Services: Load Balancer: Monitors page +##|*DESCR=Allow access to the 'Services: Load Balancer: Monitors' page. +##|*MATCH=load_balancer_monitor.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("util.inc"); + +if (!is_array($config['load_balancer']['monitor_type'])) { + $config['load_balancer']['monitor_type'] = array(); +} +$a_monitor = &$config['load_balancer']['monitor_type']; + +if ($_POST) { + $pconfig = $_POST; + + if ($_POST['apply']) { + $retval = 0; + $retval |= filter_configure(); + $retval |= relayd_configure(); + + $savemsg = get_std_save_message($retval); + clear_subsystem_dirty('loadbalancer'); + } +} + +if ($_GET['act'] == "del") { + if (array_key_exists($_GET['id'], $a_monitor)) { + /* make sure no pools reference this entry */ + if (is_array($config['load_balancer']['lbpool'])) { + foreach ($config['load_balancer']['lbpool'] as $pool) { + if ($pool['monitor'] == $a_monitor[$_GET['id']]['name']) { + $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one pool."); + break; + } + } + } + + if (!$input_errors) { + unset($a_monitor[$_GET['id']]); + write_config(); + mark_subsystem_dirty('loadbalancer'); + header("Location: load_balancer_monitor.php"); + exit; + } + } +} + +$pgtitle = array(gettext("Services"),gettext("Load Balancer"),gettext("Monitor")); +$shortcut_section = "relayd"; + +include("head.inc"); + +?> + + +

                            + + +
                            +" . gettext("You must apply the changes in order for them to take effect."));?>
                            + + + + + + +
                            + +
                            +
                            +edit_uri('load_balancer_monitor_edit.php'); + $t->my_uri('load_balancer_monitor.php'); + $t->add_column(gettext('Name'),'name',20); + $t->add_column(gettext('Type'),'type',10); + $t->add_column(gettext('Description'),'descr',30); + $t->add_button('edit'); + $t->add_button('dup'); + $t->add_button('del'); + $t->add_content_array($a_monitor); + $t->display(); +?> +
                            +
                            +
                            + + + diff --git a/usr/local/www/load_balancer_monitor_edit.php b/usr/local/www/load_balancer_monitor_edit.php new file mode 100644 index 000000000..d9ef17506 --- /dev/null +++ b/usr/local/www/load_balancer_monitor_edit.php @@ -0,0 +1,369 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-services-loadbalancer-monitor-edit +##|*NAME=Services: Load Balancer: Monitor: Edit page +##|*DESCR=Allow access to the 'Services: Load Balancer: Monitor: Edit' page. +##|*MATCH=load_balancer_monitor_edit.php* +##|-PRIV + +require("guiconfig.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_monitor.php'); + +if (!is_array($config['load_balancer']['monitor_type'])) { + $config['load_balancer']['monitor_type'] = array(); +} +$a_monitor = &$config['load_balancer']['monitor_type']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_monitor[$id]) { + $pconfig['name'] = $a_monitor[$id]['name']; + $pconfig['type'] = $a_monitor[$id]['type']; + $pconfig['descr'] = $a_monitor[$id]['descr']; + $pconfig['options'] = array(); + $pconfig['options'] = $a_monitor[$id]['options']; +} else { + /* Some sane page defaults */ + $pconfig['options']['path'] = '/'; + $pconfig['options']['code'] = 200; +} + +$changedesc = gettext("Load Balancer: Monitor:") . " "; +$changecount = 0; + +if ($_POST) { + $changecount++; + + unset($input_errors); + $pconfig = $_POST; + + /* turn $_POST['http_options_*'] into $pconfig['options'][*] */ + foreach($_POST as $key => $val) { + if (stristr($key, 'options') !== false) { + if (stristr($key, $pconfig['type'].'_') !== false) { + $opt = explode('_',$key); + $pconfig['options'][$opt[2]] = $val; + } + unset($pconfig[$key]); + } + } + + /* input validation */ + $reqdfields = explode(" ", "name type descr"); + $reqdfieldsn = array(gettext("Name"),gettext("Type"),gettext("Description")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + /* Ensure that our monitor names are unique */ + for ($i=0; isset($config['load_balancer']['monitor_type'][$i]); $i++) + if (($_POST['name'] == $config['load_balancer']['monitor_type'][$i]['name']) && ($i != $id)) + $input_errors[] = gettext("This monitor name has already been used. Monitor names must be unique."); + + if (strpos($_POST['name'], " ") !== false) + $input_errors[] = gettext("You cannot use spaces in the 'name' field."); + + switch($_POST['type']) { + case 'icmp': { + break; + } + case 'tcp': { + break; + } + case 'http': + case 'https': { + if (is_array($pconfig['options'])) { + if (isset($pconfig['options']['host']) && $pconfig['options']['host'] != "") { + if (!is_hostname($pconfig['options']['host'])) { + $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'."); + } + } + if (isset($pconfig['options']['code']) && $pconfig['options']['code'] != "") { + // Check code + if(!is_rfc2616_code($pconfig['options']['code'])) { + $input_errors[] = gettext("HTTP(s) codes must be from RFC2616."); + } + } + if (!isset($pconfig['options']['path']) || $pconfig['options']['path'] == "") { + $input_errors[] = gettext("The path to monitor must be set."); + } + } + break; + } + case 'send': { + if (is_array($pconfig['options'])) { + if (isset($pconfig['options']['send']) && $pconfig['options']['send'] != "") { + // Check send + } + if (isset($pconfig['options']['expect']) && $pconfig['options']['expect'] != "") { + // Check expect + } + } + break; + } + } + + if (!$input_errors) { + $monent = array(); + if(isset($id) && $a_monitor[$id]) + $monent = $a_monitor[$id]; + if($monent['name'] != "") + $changedesc .= " " . sprintf(gettext("modified '%s' monitor:"), $monent['name']); + + update_if_changed("name", $monent['name'], $pconfig['name']); + update_if_changed("type", $monent['type'], $pconfig['type']); + update_if_changed("description", $monent['descr'], $pconfig['descr']); + if($pconfig['type'] == "http" || $pconfig['type'] == "https" ) { + /* log updates, then clear array and reassign - dumb, but easiest way to have a clear array */ + update_if_changed("path", $monent['options']['path'], $pconfig['options']['path']); + update_if_changed("host", $monent['options']['host'], $pconfig['options']['host']); + update_if_changed("code", $monent['options']['code'], $pconfig['options']['code']); + $monent['options'] = array(); + $monent['options']['path'] = $pconfig['options']['path']; + $monent['options']['host'] = $pconfig['options']['host']; + $monent['options']['code'] = $pconfig['options']['code']; + } + if($pconfig['type'] == "send" ) { + /* log updates, then clear array and reassign - dumb, but easiest way to have a clear array */ + update_if_changed("send", $monent['options']['send'], $pconfig['options']['send']); + update_if_changed("expect", $monent['options']['expect'], $pconfig['options']['expect']); + $monent['options'] = array(); + $monent['options']['send'] = $pconfig['options']['send']; + $monent['options']['expect'] = $pconfig['options']['expect']; + } + if($pconfig['type'] == "tcp" || $pconfig['type'] == "icmp") { + $monent['options'] = array(); + } + + if (isset($id) && $a_monitor[$id]) { + /* modify all pools with this name */ + for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) { + if ($config['load_balancer']['lbpool'][$i]['monitor'] == $a_monitor[$id]['name']) + $config['load_balancer']['lbpool'][$i]['monitor'] = $monent['name']; + } + $a_monitor[$id] = $monent; + } else + $a_monitor[] = $monent; + + if ($changecount > 0) { + /* Mark config dirty */ + mark_subsystem_dirty('loadbalancer'); + write_config($changedesc); + } + + header("Location: load_balancer_monitor.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"),gettext("Load Balancer"),gettext("Monitor"),gettext("Edit")); +$shortcut_section = "relayd"; + +include("head.inc"); +$types = array("icmp" => gettext("ICMP"), "tcp" => gettext("TCP"), "http" => gettext("HTTP"), "https" => gettext("HTTPS"), "send" => gettext("Send/Expect")); + +?> + + + + + + + +
                            + + + + + + + + + + + + + + + + + > + + > + + > + + + + > + + + + > + + + + + + + +
                            + size="16" maxlength="16" /> +
                            + size="64" /> +
                            + +
                            + + + + + + + + + + + + + + +
                            + size="64" /> +
                            + size="64" />
                            +
                            + +
                            +
                            + + + + + + + + + + + + + + +
                            + size="64" /> +
                            + size="64" />
                            +
                            + +
                            +
                            + + + + + + + + + +
                            + size="64" /> +
                            + size="64" /> +
                            +
                              + " /> + " onclick="window.location.href=''" /> + + + +
                            +
                            +
                            + + + diff --git a/usr/local/www/load_balancer_pool.php b/usr/local/www/load_balancer_pool.php new file mode 100644 index 000000000..6358ac4b2 --- /dev/null +++ b/usr/local/www/load_balancer_pool.php @@ -0,0 +1,155 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-loadbalancer-pool +##|*NAME=Load Balancer: Pool page +##|*DESCR=Allow access to the 'Load Balancer: Pool' page. +##|*MATCH=load_balancer_pool.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +if (!is_array($config['load_balancer']['lbpool'])) { + $config['load_balancer']['lbpool'] = array(); +} +$a_pool = &$config['load_balancer']['lbpool']; + + +if ($_POST) { + $pconfig = $_POST; + + if ($_POST['apply']) { + $retval = 0; + $retval |= filter_configure(); + $retval |= relayd_configure(); + + $savemsg = get_std_save_message($retval); + clear_subsystem_dirty('loadbalancer'); + } +} + +if ($_GET['act'] == "del") { + if (array_key_exists($_GET['id'], $a_pool)) { + /* make sure no virtual servers reference this entry */ + if (is_array($config['load_balancer']['virtual_server'])) { + foreach ($config['load_balancer']['virtual_server'] as $vs) { + if ($vs['poolname'] == $a_pool[$_GET['id']]['name']) { + $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one virtual server."); + break; + } + } + } + + if (!$input_errors) { + unset($a_pool[$_GET['id']]); + write_config(); + mark_subsystem_dirty('loadbalancer'); + header("Location: load_balancer_pool.php"); + exit; + } + } +} + +/* Index monitor_type array for easy hyperlinking */ +$mondex = array(); +for ($i = 0; isset($config['load_balancer']['monitor_type'][$i]); $i++) { + $mondex[$config['load_balancer']['monitor_type'][$i]['name']] = $i; +} +for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) { + $a_pool[$i]['monitor'] = "{$a_pool[$i]['monitor']}"; +} + +$pgtitle = array(gettext("Services"), gettext("Load Balancer"),gettext("Pool")); +$shortcut_section = "relayd"; + +include("head.inc"); + +?> + + +
                            + + +
                            +"));?>
                            + + + + + + + +
                            + +
                            +
                            +edit_uri('load_balancer_pool_edit.php'); + $t->my_uri('load_balancer_pool.php'); + $t->add_column(gettext('Name'),'name',10); + $t->add_column(gettext('Mode'),'mode',10); + $t->add_column(gettext('Servers'),'servers',15); + $t->add_column(gettext('Port'),'port',10); + $t->add_column(gettext('Monitor'),'monitor',10); + $t->add_column(gettext('Description'),'descr',25); + $t->add_button('edit'); + $t->add_button('dup'); + $t->add_button('del'); + $t->add_content_array($a_pool); + $t->display(); +?> + +
                            +
                            +

                            + + +
                            +
                            + + + diff --git a/usr/local/www/load_balancer_pool_edit.php b/usr/local/www/load_balancer_pool_edit.php new file mode 100644 index 000000000..a8dec4e64 --- /dev/null +++ b/usr/local/www/load_balancer_pool_edit.php @@ -0,0 +1,345 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-loadbalancer-pool-edit +##|*NAME=Load Balancer: Pool: Edit page +##|*DESCR=Allow access to the 'Load Balancer: Pool: Edit' page. +##|*MATCH=load_balancer_pool_edit.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("filter.inc"); +require_once("util.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_pool.php'); + +if (!is_array($config['load_balancer']['lbpool'])) { + $config['load_balancer']['lbpool'] = array(); +} +$a_pool = &$config['load_balancer']['lbpool']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_pool[$id]) { + $pconfig['name'] = $a_pool[$id]['name']; + $pconfig['mode'] = $a_pool[$id]['mode']; + $pconfig['descr'] = $a_pool[$id]['descr']; + $pconfig['port'] = $a_pool[$id]['port']; + $pconfig['retry'] = $a_pool[$id]['retry']; + $pconfig['servers'] = &$a_pool[$id]['servers']; + $pconfig['serversdisabled'] = &$a_pool[$id]['serversdisabled']; + $pconfig['monitor'] = $a_pool[$id]['monitor']; +} + +$changedesc = gettext("Load Balancer: Pool:") . " "; +$changecount = 0; + +if ($_POST) { + $changecount++; + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "name mode port monitor servers"); + $reqdfieldsn = array(gettext("Name"),gettext("Mode"),gettext("Port"),gettext("Monitor"),gettext("Server List")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + /* Ensure that our pool names are unique */ + for ($i=0; isset($config['load_balancer']['lbpool'][$i]); $i++) + if (($_POST['name'] == $config['load_balancer']['lbpool'][$i]['name']) && ($i != $id)) + $input_errors[] = gettext("This pool name has already been used. Pool names must be unique."); + + if (strpos($_POST['name'], " ") !== false) + $input_errors[] = gettext("You cannot use spaces in the 'name' field."); + + if (in_array($_POST['name'], $reserved_table_names)) + $input_errors[] = sprintf(gettext("The name '%s' is a reserved word and cannot be used."), $_POST['name']); + + if (is_alias($_POST['name'])) + $input_errors[] = sprintf(gettext("Sorry, an alias is already named %s."), $_POST['name']); + + if (!is_portoralias($_POST['port'])) + $input_errors[] = gettext("The port must be an integer between 1 and 65535, or a port alias."); + + // May as well use is_port as we want a positive integer and such. + if (!empty($_POST['retry']) && !is_port($_POST['retry'])) + $input_errors[] = gettext("The retry value must be an integer between 1 and 65535."); + + if (is_array($_POST['servers'])) { + foreach($pconfig['servers'] as $svrent) { + if (!is_ipaddr($svrent) && !is_subnetv4($svrent)) { + $input_errors[] = sprintf(gettext("%s is not a valid IP address or IPv4 subnet (in \"enabled\" list)."), $svrent); + } + else if (is_subnetv4($svrent) && subnet_size($svrent) > 64) { + $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses (in \"enabled\" list)."), $svrent); + } + } + } + if (is_array($_POST['serversdisabled'])) { + foreach($pconfig['serversdisabled'] as $svrent) { + if (!is_ipaddr($svrent) && !is_subnetv4($svrent)) { + $input_errors[] = sprintf(gettext("%s is not a valid IP address or IPv4 subnet (in \"disabled\" list)."), $svrent); + } + else if (is_subnetv4($svrent) && subnet_size($svrent) > 64) { + $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses (in \"disabled\" list)."), $svrent); + } + } + } + $m = array(); + for ($i=0; isset($config['load_balancer']['monitor_type'][$i]); $i++) + $m[$config['load_balancer']['monitor_type'][$i]['name']] = $config['load_balancer']['monitor_type'][$i]; + + if (!isset($m[$_POST['monitor']])) + $input_errors[] = gettext("Invalid monitor chosen."); + + if (!$input_errors) { + $poolent = array(); + if(isset($id) && $a_pool[$id]) + $poolent = $a_pool[$id]; + if($poolent['name'] != "") + $changedesc .= sprintf(gettext(" modified '%s' pool:"), $poolent['name']); + + update_if_changed("name", $poolent['name'], $_POST['name']); + update_if_changed("mode", $poolent['mode'], $_POST['mode']); + update_if_changed("description", $poolent['descr'], $_POST['descr']); + update_if_changed("port", $poolent['port'], $_POST['port']); + update_if_changed("retry", $poolent['retry'], $_POST['retry']); + update_if_changed("servers", $poolent['servers'], $_POST['servers']); + update_if_changed("serversdisabled", $poolent['serversdisabled'], $_POST['serversdisabled']); + update_if_changed("monitor", $poolent['monitor'], $_POST['monitor']); + + if (isset($id) && $a_pool[$id]) { + /* modify all virtual servers with this name */ + for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) { + if ($config['load_balancer']['virtual_server'][$i]['lbpool'] == $a_pool[$id]['name']) + $config['load_balancer']['virtual_server'][$i]['lbpool'] = $poolent['name']; + } + $a_pool[$id] = $poolent; + } else + $a_pool[] = $poolent; + + if ($changecount > 0) { + /* Mark pool dirty */ + mark_subsystem_dirty('loadbalancer'); + write_config($changedesc); + } + + header("Location: load_balancer_pool.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"), gettext("Load Balancer"),gettext("Pool"),gettext("Edit")); +$shortcut_section = "relayd"; + +include("head.inc"); + +?> + + + + + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + size="16" maxlength="16" /> +
                            + +
                            + size="64" /> +
                            + size="16" maxlength="16" />
                            +
                            +
                            + +
                            + +
                            + size="16" maxlength="16" />
                            +
                            +
                             
                            + + +
                            + + " onclick="AddServerToPool(document.iform); enforceFailover(); checkPoolControls();" />
                            +
                             
                            + + + + + + + + + + +
                            + +
                            + + " onclick="RemoveServerFromPool(document.iform, 'serversdisabled[]');" /> +
                            +
                            + +
                            + +
                            + + " onclick="RemoveServerFromPool(document.iform, 'servers[]');" /> +
                            +
                              +
                            + " onclick="AllServers('serversSelect', true); AllServers('serversDisabledSelect', true);" /> + " onclick="window.location.href=''" /> + + + +
                            +
                            +
                            + + + diff --git a/usr/local/www/load_balancer_relay_action.php b/usr/local/www/load_balancer_relay_action.php new file mode 100644 index 000000000..5b2ac524e --- /dev/null +++ b/usr/local/www/load_balancer_relay_action.php @@ -0,0 +1,155 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-services-loadbalancer-relay-action +##|*NAME=Services: Load Balancer: Relay Actions page +##|*DESCR=Allow access to the 'Services: Load Balancer: Relay Actions' page. +##|*MATCH=load_balancer_relay_action.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +if (!is_array($config['load_balancer']['lbaction'])) { + $config['load_balancer']['lbaction'] = array(); +} +$a_action = &$config['load_balancer']['lbaction']; + + +if ($_POST) { + + $pconfig = $_POST; + + if ($_POST['apply']) { + $retval = 0; + $retval |= filter_configure(); + $retval |= relayd_configure(); + + $savemsg = get_std_save_message($retval); + clear_subsystem_dirty('loadbalancer'); + } +} + +if ($_GET['act'] == "del") { + if (array_key_exists($_GET['id'], $a_action)) { + /* make sure no relay protocols reference this entry */ + if (is_array($config['load_balancer']['lbprotocol'])) { + foreach ($config['load_balancer']['lbprotocol'] as $lbp) { + foreach($lbp['lbaction'] as $lba) { + if ($lba['name'] == $a_action[$_GET['id']]['name']) { + $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one relay protocol."); + break; + } + } + } + } + + if (!$input_errors) { + unset($a_action[$_GET['id']]); + write_config(); + mark_subsystem_dirty('loadbalancer'); + header("Location: load_balancer_relay_action.php"); + exit; + } + } +} + +/* Index lbpool array for easy hyperlinking */ +/* for ($i = 0; isset($config['load_balancer']['lbprotocol'][$i]); $i++) { + for ($o = 0; isset($config['load_balancer']['lbprotocol'][$i]['options'][$o]); o++) { + $a_vs[$i]['options'][$o] = " + $a_vs[$i]['poolname'] = "{$a_vs[$i]['poolname']}"; + if ($a_vs[$i]['sitedown'] != '') { + $a_vs[$i]['sitedown'] = "{$a_vs[$i]['sitedown']}"; + } else { + $a_vs[$i]['sitedown'] = 'none'; + } +} +*/ + +$pgtitle = array(gettext("Services"), gettext("Load Balancer"),gettext("Relay Action")); +$shortcut_section = "relayd"; + +include("head.inc"); + +?> + + +
                            + + +

                            +You must apply the changes in order for them to take effect."));?>
                            + + + + + + +
                            + +
                            +
                            +edit_uri('load_balancer_relay_action_edit.php'); + $t->my_uri('load_balancer_relay_action.php'); + $t->add_column(gettext('Name'),'name',20); + $t->add_column(gettext('Type'),'type',10); + $t->add_column(gettext('Options'),'options',30); + $t->add_column(gettext('Description'),'descr',30); + $t->add_button('edit'); + $t->add_button('dup'); + $t->add_button('del'); + $t->add_content_array($a_action); + $t->display(); +?> +
                            +
                            +

                            + + + diff --git a/usr/local/www/load_balancer_relay_action_edit.php b/usr/local/www/load_balancer_relay_action_edit.php new file mode 100644 index 000000000..e8b841e5f --- /dev/null +++ b/usr/local/www/load_balancer_relay_action_edit.php @@ -0,0 +1,569 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-services-loadbalancer-relay-action-edit +##|*NAME=Services: Load Balancer: Relay Action: Edit page +##|*DESCR=Allow access to the 'Services: Load Balancer: Relay Action: Edit' page. +##|*MATCH=load_balancer_relay_action_edit.php* +##|-PRIV + +require("guiconfig.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_relay_action.php'); + +if (!is_array($config['load_balancer']['lbaction'])) { + $config['load_balancer']['lbaction'] = array(); +} +$a_action = &$config['load_balancer']['lbaction']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_action[$id]) { + $pconfig = array(); + $pconfig = $a_action[$id]; +} else { + // XXX - TODO, this isn't sane for this page :) + /* Some sane page defaults */ + $pconfig['protocol'] = 'http'; + $pconfig['direction'] = 'request'; + $pconfig['type'] = 'cookie'; + $pconfig['action'] = 'change'; +} + +$changedesc = gettext("Load Balancer: Relay Action:") . " "; +$changecount = 0; + +$kv = array('key', 'value'); +$vk = array('value', 'key'); +$hr_actions = array(); +$hr_actions['append'] = $vk; +$hr_actions['change'] = $kv; +$hr_actions['expect'] = $vk; +$hr_actions['filter'] = $vk; +$hr_actions['hash'] = 'key'; +$hr_actions['log'] = 'key'; +// mark is disabled until I can figure out how to make the display clean +//$hr_actions['mark'] = array('value', 'key', 'id'); +//$hr_actions[] = 'label'; +//$hr_actions[] = 'no label'; +$hr_actions['remove'] = 'key'; +//$hr_actions[] = 'return error'; +/* Setup decision tree */ +$action = array(); +$actions['protocol']['http'] = 'HTTP'; +$actions['protocol']['tcp'] = 'TCP'; +$actions['protocol']['dns'] = 'DNS'; +$actions['direction'] = array(); +$actions['direction']['request'] = array(); +$actions['direction']['request']['cookie'] = $hr_actions; +$actions['direction']['request']['header'] = $hr_actions; +$actions['direction']['request']['path'] = $hr_actions; +$actions['direction']['request']['query'] = $hr_actions; +$actions['direction']['request']['url'] = $hr_actions; +$actions['direction']['response'] = array(); +$actions['direction']['response']['cookie'] = $hr_actions; +$actions['direction']['response']['header'] = $hr_actions; +//$action['http']['tcp'] = array(); +//$action['http']['ssl'] = array(); + + + +if ($_POST) { + $changecount++; + + unset($input_errors); + $pconfig = $_POST; + + // Peel off the action and type from the post and fix $pconfig + $action = explode('_', $pconfig['action']); + $pconfig['action'] = $action[2]; + $pconfig['type'] = $action[1]; + unset($pconfig["type_{$pconfig['direction']}"]); + + /* input validation */ + $reqdfields = explode(" ", "name protocol direction action descr"); + $reqdfieldsn = array(gettext("Name"),gettext("Protocol"),gettext("Direction"),gettext("Action"),gettext("Description")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + /* Ensure that our monitor names are unique */ + for ($i=0; isset($config['load_balancer']['lbactions'][$i]); $i++) + if (($_POST['name'] == $config['load_balancer']['lbactions'][$i]['name']) && ($i != $id)) + $input_errors[] = gettext("This action name has already been used. Action names must be unique."); + + if (strpos($_POST['name'], " ") !== false) + $input_errors[] = gettext("You cannot use spaces in the 'name' field."); + + if (!$input_errors) { + $actent = array(); + if(isset($id) && $a_action[$id]) + $actent = $a_action[$id]; + if($actent['name'] != "") + $changedesc .= " " . sprintf(gettext("modified '%s' action:"), $actent['name']); + + update_if_changed("name", $actent['name'], $pconfig['name']); + update_if_changed("protocol", $actent['protocol'], $pconfig['protocol']); + update_if_changed("type", $actent['type'], $pconfig['type']); + update_if_changed("direction", $actent['direction'], $pconfig['direction']); + update_if_changed("description", $actent['descr'], $pconfig['descr']); + update_if_changed("action", $actent['action'], $pconfig['action']); + switch ($pconfig['action']) { + case "append": + case "change": + case "expect": + case "filter": { + update_if_changed("value", $actent['options']['value'], $pconfig['option_action_value']); + update_if_changed("key", $actent['options']['akey'], $pconfig['option_action_key']); + break; + } + case "hash": + case "log": { + update_if_changed("key", $actent['options']['akey'], $pconfig['option_action_key']); + break; + } + } + + if (isset($id) && $a_action[$id]) { +// XXX - TODO + /* modify all virtual servers with this name */ +// for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) { +// if ($config['load_balancer']['virtual_server'][$i]['protocol'] == $a_protocol[$id]['name']) +// $config['load_balancer']['virtual_server'][$i]['protocol'] = $protent['name']; +// } + $a_action[$id] = $actent; + } else { + $a_action[] = $actent; + } + if ($changecount > 0) { + /* Mark config dirty */ + mark_subsystem_dirty('loadbalancer'); + write_config($changedesc); + } + + header("Location: load_balancer_relay_action.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"), gettext("Load Balancer"),gettext("Relay Action"),gettext("Edit")); +$shortcut_section = "relayd"; + +include("head.inc"); + $types = array("http" => gettext("HTTP"), "tcp" => gettext("TCP"), "dns" => gettext("DNS")); +?> + + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + > + + + + > + + + + > + + + + + + + +
                            + size="16" maxlength="16"> +
                            + size="64"> +
                            + +
                            + + +
                            + $v) { + echo" +
                            + +
                            + + + + + + +
                             size="20">
                             size="20">
                             size="20">
                            +
                            + XXX: +
                            + XXX: + +
                              + "> + " onclick="window.location.href=''" /> + + + +
                            +
                            +
                            + + + diff --git a/usr/local/www/load_balancer_relay_protocol.php b/usr/local/www/load_balancer_relay_protocol.php new file mode 100644 index 000000000..62e6cde5a --- /dev/null +++ b/usr/local/www/load_balancer_relay_protocol.php @@ -0,0 +1,149 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-services-loadbalancer-relay-protocol +##|*NAME=Services: Load Balancer: Relay Protocols page +##|*DESCR=Allow access to the 'Services: Load Balancer: Relay Protocols' page. +##|*MATCH=load_balancer_relay_protocol.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +if (!is_array($config['load_balancer']['lbprotocol'])) { + $config['load_balancer']['lbprotocol'] = array(); +} +$a_protocol = &$config['load_balancer']['lbprotocol']; + +if ($_POST) { + $pconfig = $_POST; + + if ($_POST['apply']) { + $retval = 0; + $retval |= filter_configure(); + $retval |= relayd_configure(); + + $savemsg = get_std_save_message($retval); + clear_subsystem_dirty('loadbalancer'); + } +} + +if ($_GET['act'] == "del") { + if (array_key_exists($_GET['id'], $a_protocol)) { + /* make sure no virtual servers reference this entry */ + if (is_array($config['load_balancer']['virtual_server'])) { + foreach ($config['load_balancer']['virtual_server'] as $vs) { + if ($vs['protocol'] == $a_protocol[$_GET['id']]['name']) { + $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one virtual server."); + break; + } + } + } + + if (!$input_errors) { + unset($a_protocol[$_GET['id']]); + write_config(); + mark_subsystem_dirty('loadbalancer'); + header("Location: load_balancer_relay_protocol.php"); + exit; + } + } +} + +/* Index lbpool array for easy hyperlinking */ +/* for ($i = 0; isset($config['load_balancer']['lbprotocol'][$i]); $i++) { + for ($o = 0; isset($config['load_balancer']['lbprotocol'][$i]['options'][$o]); o++) { + $a_vs[$i]['options'][$o] = " + $a_vs[$i]['poolname'] = "{$a_vs[$i]['poolname']}"; + if ($a_vs[$i]['sitedown'] != '') { + $a_vs[$i]['sitedown'] = "{$a_vs[$i]['sitedown']}"; + } else { + $a_vs[$i]['sitedown'] = 'none'; + } +} +*/ + +$pgtitle = array(gettext("Services"), gettext("Load Balancer"),gettext("Relay Protocol")); +$shortcut_section = "relayd"; + +include("head.inc"); + +?> + + +
                            + + +

                            +" . gettext("You must apply the changes in order for them to take effect."));?>
                            + + + + + + +
                            + +
                            +
                            +edit_uri('load_balancer_relay_protocol_edit.php'); + $t->my_uri('load_balancer_relay_protocol.php'); + $t->add_column(gettext('Name'),'name',20); + $t->add_column(gettext('Type'),'type',10); + $t->add_column(gettext('Options'),'options',30); + $t->add_column(gettext('Description'),'descr',30); + $t->add_button('edit'); + $t->add_button('dup'); + $t->add_button('del'); + $t->add_content_array($a_protocol); + $t->display(); +?> +
                            +
                            +

                            + + + diff --git a/usr/local/www/load_balancer_relay_protocol_edit.php b/usr/local/www/load_balancer_relay_protocol_edit.php new file mode 100644 index 000000000..5d07fe7e2 --- /dev/null +++ b/usr/local/www/load_balancer_relay_protocol_edit.php @@ -0,0 +1,292 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-services-loadbalancer-relay-protocol-edit +##|*NAME=Services: Load Balancer: Relay Protocol: Edit page +##|*DESCR=Allow access to the 'Services: Load Balancer: Relay Protocol: Edit' page. +##|*MATCH=load_balancer_relay_protocol_edit.php* +##|-PRIV + +require("guiconfig.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_relay_protocol.php'); + +if (!is_array($config['load_balancer']['lbprotocol'])) { + $config['load_balancer']['lbprotocol'] = array(); +} +$a_protocol = &$config['load_balancer']['lbprotocol']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_protocol[$id]) { + $pconfig = $a_protocol[$id]; + $pconfig['type'] = $a_protocol[$id]['type']; + $pconfig['descr'] = $a_protocol[$id]['descr']; + $pconfig['lbaction'] = array(); + $pconfig['options'] = $a_protocol[$id]['options']; +} else { + /* Some sane page defaults */ + $pconfig['type'] = 'http'; +} + +$changedesc = gettext("Load Balancer: Relay Protocol:") . " "; +$changecount = 0; + + + +if ($_POST) { + $changecount++; + + unset($input_errors); + $pconfig = $_POST; + + + /* input validation */ + $reqdfields = explode(" ", "name type descr"); + $reqdfieldsn = array(gettext("Name"),gettext("Type"),gettext("Description")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + /* Ensure that our monitor names are unique */ + for ($i=0; isset($config['load_balancer']['lbprotocol'][$i]); $i++) + if (($_POST['name'] == $config['load_balancer']['lbprotocol'][$i]['name']) && ($i != $id)) + $input_errors[] = gettext("This protocol name has already been used. Protocol names must be unique."); + + if (strpos($_POST['name'], " ") !== false) + $input_errors[] = gettext("You cannot use spaces in the 'name' field."); + + switch($_POST['type']) { + case 'tcp': + case 'http': + case 'https': + case 'dns': { + break; + } + } + + if (!$input_errors) { + $protent = array(); + if(isset($id) && $a_protocol[$id]) + $protent = $a_protocol[$id]; + if($protent['name'] != "") + $changedesc .= " " . sprintf(gettext("modified '%s' load balancing protocol:"), $protent['name']); + + update_if_changed(gettext("name"), $protent['name'], $pconfig['name']); + update_if_changed(gettext("type"), $protent['type'], $pconfig['type']); + update_if_changed(gettext("description"), $protent['descr'], $pconfig['descr']); + update_if_changed(gettext("type"), $protent['type'], $pconfig['type']); + update_if_changed(gettext("action"), $protent['lbaction'], $pconfig['lbaction']); + + if (isset($id) && $a_protocol[$id]) { + /* modify all virtual servers with this name */ +/* + for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) { + if ($config['load_balancer']['virtual_server'][$i]['protocol'] == $a_protocol[$id]['name']) + $config['load_balancer']['virtual_server'][$i]['protocol'] = $protent['name']; + } +*/ + $a_protocol[$id] = $protent; + } else { + $a_protocol[] = $protent; + } + + if ($changecount > 0) { + /* Mark config dirty */ + mark_subsystem_dirty('loadbalancer'); + write_config($changedesc); + } + + header("Location: load_balancer_relay_protocol.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"), gettext("Load Balancer"),gettext("Relay Protocol"),gettext("Edit")); +$shortcut_section = "relayd"; + +include("head.inc"); + +$types = array("http" => gettext("HTTP"), "tcp" => gettext("TCP"), "dns" => gettext("DNS")); +?> + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + size="16" maxlength="16"> +
                            + +
                            + size="64"> +
                             
                            + + + + + + + + + +
                            +
                            + +
                            + "; +?> +
                            +
                            +
                            + " onclick="copyOption($('available_action'), $('lbaction'));" />
                            + " onclick="deleteOption($('lbaction'));" /> +
                            +
                            +
                            + +
                            + "; +?> +
                            +
                            +
                              + " onClick="AllOptions($('lbaction'), true); AllOptions($('available_action'), false);"> + " onclick="window.location.href=''" /> + + + +
                            +
                            +
                            + + + diff --git a/usr/local/www/load_balancer_setting.php b/usr/local/www/load_balancer_setting.php new file mode 100644 index 000000000..25fe47cce --- /dev/null +++ b/usr/local/www/load_balancer_setting.php @@ -0,0 +1,171 @@ +. + Copyright (C) 2012 Pierre POMES . + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-services-loadbalancer-setting +##|*NAME=Services: Load Balancer: setting page +##|*DESCR=Allow access to the 'Settings: Load Balancer: Settings' page. +##|*MATCH=load_balancer_setting.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("util.inc"); + +if (!is_array($config['load_balancer']['setting'])) { + $config['load_balancer']['setting'] = array(); +} +$lbsetting = &$config['load_balancer']['setting']; + +if ($_POST) { + + if ($_POST['apply']) { + $retval = 0; + $retval |= filter_configure(); + $retval |= relayd_configure(); + + $savemsg = get_std_save_message($retval); + clear_subsystem_dirty('loadbalancer'); + } else { + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + if ($_POST['timeout'] && !is_numeric($_POST['timeout'])) { + $input_errors[] = gettext("Timeout must be a numeric value"); + } + + if ($_POST['interval'] && !is_numeric($_POST['interval'])) { + $input_errors[] = gettext("Interval must be a numeric value"); + } + + if ($_POST['prefork']) { + if (!is_numeric($_POST['prefork'])) { + $input_errors[] = gettext("Prefork must be a numeric value"); + } else { + if (($_POST['prefork']<=0) || ($_POST['prefork']>32)) { + $input_errors[] = gettext("Prefork value must be between 1 and 32"); + } + } + } + + /* update config if user entry is valid */ + if (!$input_errors) { + $lbsetting['timeout'] = $_POST['timeout']; + $lbsetting['interval'] = $_POST['interval']; + $lbsetting['prefork'] = $_POST['prefork']; + + write_config(); + mark_subsystem_dirty('loadbalancer'); + } + } +} + +$pgtitle = array(gettext("Services"),gettext("Load Balancer"),gettext("Settings")); +$shortcut_section = "relayd"; + +include("head.inc"); + +?> + + +
                            + + +
                            +" . gettext("You must apply the changes in order for them to take effect."));?>
                            + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + +
                            + " class="formfld unknown" /> +
                            + +
                            + " class="formfld unknown" /> +
                            + +
                            + " class="formfld unknown" /> +
                            + +
                              + " /> +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/load_balancer_virtual_server.php b/usr/local/www/load_balancer_virtual_server.php new file mode 100644 index 000000000..c31940832 --- /dev/null +++ b/usr/local/www/load_balancer_virtual_server.php @@ -0,0 +1,150 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-services-loadbalancer-virtualservers +##|*NAME=Services: Load Balancer: Virtual Servers page +##|*DESCR=Allow access to the 'Services: Load Balancer: Virtual Servers' page. +##|*MATCH=load_balancer_virtual_server.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("vslb.inc"); + +if (!is_array($config['load_balancer']['virtual_server'])) { + $config['load_balancer']['virtual_server'] = array(); +} +$a_vs = &$config['load_balancer']['virtual_server']; + +if ($_POST) { + $pconfig = $_POST; + + if ($_POST['apply']) { + $retval = 0; + $retval |= filter_configure(); + $retval |= relayd_configure(); + $savemsg = get_std_save_message($retval); + /* Wipe out old relayd anchors no longer in use. */ + cleanup_lb_marked(); + clear_subsystem_dirty('loadbalancer'); + } +} + +if ($_GET['act'] == "del") { + if (array_key_exists($_GET['id'], $a_vs)) { + + if (!$input_errors) { + cleanup_lb_mark_anchor($a_vs[$_GET['id']]['name']); + unset($a_vs[$_GET['id']]); + write_config(); + mark_subsystem_dirty('loadbalancer'); + header("Location: load_balancer_virtual_server.php"); + exit; + } + } +} + +/* Index lbpool array for easy hyperlinking */ +$poodex = array(); +for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) { + $poodex[$config['load_balancer']['lbpool'][$i]['name']] = $i; +} +for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) { + if($a_vs[$i]) { + $a_vs[$i]['poolname'] = "{$a_vs[$i]['poolname']}"; + if ($a_vs[$i]['sitedown'] != '') { + $a_vs[$i]['sitedown'] = "{$a_vs[$i]['sitedown']}"; + } else { + $a_vs[$i]['sitedown'] = 'none'; + } + } +} + +$pgtitle = array(gettext("Services"),gettext("Load Balancer"),gettext("Virtual Servers")); +$shortcut_section = "relayd-virtualservers"; + +include("head.inc"); + +?> + + +
                            + + +
                            +" . gettext("You must apply the changes in order for them to take effect."));?>
                            + + + + + + +
                            + +
                            +
                            +edit_uri('load_balancer_virtual_server_edit.php'); + $t->my_uri('load_balancer_virtual_server.php'); + $t->add_column(gettext('Name'),'name',10); + $t->add_column(gettext('Protocol'),'relay_protocol',10); + $t->add_column(gettext('IP Address'),'ipaddr',15); + $t->add_column(gettext('Port'),'port',10); + $t->add_column(gettext('Pool'),'poolname',15); + $t->add_column(gettext('Fall Back Pool'),'sitedown',15); + $t->add_column(gettext('Description'),'descr',30); + $t->add_button('edit'); + $t->add_button('dup'); + $t->add_button('del'); + $t->add_content_array($a_vs); + $t->display(); +?> +
                            +
                            +
                            + + + diff --git a/usr/local/www/load_balancer_virtual_server_edit.php b/usr/local/www/load_balancer_virtual_server_edit.php new file mode 100644 index 000000000..e491ad9d5 --- /dev/null +++ b/usr/local/www/load_balancer_virtual_server_edit.php @@ -0,0 +1,290 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-loadbalancer-virtualserver-edit +##|*NAME=Load Balancer: Virtual Server: Edit page +##|*DESCR=Allow access to the 'Load Balancer: Virtual Server: Edit' page. +##|*MATCH=load_balancer_virtual_server_edit.php* +##|-PRIV + +require("guiconfig.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_virtual_server.php'); + +if (!is_array($config['load_balancer']['virtual_server'])) { + $config['load_balancer']['virtual_server'] = array(); +} +$a_vs = &$config['load_balancer']['virtual_server']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_vs[$id]) { + $pconfig = $a_vs[$id]; +} else { + // Sane defaults + $pconfig['mode'] = 'redirect'; +} + +$changedesc = gettext("Load Balancer: Virtual Server:") . " "; +$changecount = 0; + +if ($_POST) { + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + switch($pconfig['mode']) { + case "redirect": { + $reqdfields = explode(" ", "ipaddr name mode"); + $reqdfieldsn = array(gettext("IP Address"),gettext("Name"),gettext("Mode")); + break; + } + case "relay": { + $reqdfields = explode(" ", "ipaddr name mode relay_protocol"); + $reqdfieldsn = array(gettext("IP Address"),gettext("Name"),gettext("Relay Protocol")); + break; + } + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + for ($i=0; isset($config['load_balancer']['virtual_server'][$i]); $i++) + if (($_POST['name'] == $config['load_balancer']['virtual_server'][$i]['name']) && ($i != $id)) + $input_errors[] = gettext("This virtual server name has already been used. Virtual server names must be unique."); + + if (preg_match('/[ \/]/', $_POST['name'])) + $input_errors[] = gettext("You cannot use spaces or slashes in the 'name' field."); + + if ($_POST['port'] != "" && !is_portoralias($_POST['port'])) + $input_errors[] = gettext("The port must be an integer between 1 and 65535, a port alias, or left blank."); + + if (!is_ipaddroralias($_POST['ipaddr']) && !is_subnetv4($_POST['ipaddr'])) + $input_errors[] = sprintf(gettext("%s is not a valid IP address, IPv4 subnet, or alias."), $_POST['ipaddr']); + else if (is_subnetv4($_POST['ipaddr']) && subnet_size($_POST['ipaddr']) > 64) + $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses."), $_POST['ipaddr']); + + if ((strtolower($_POST['relay_protocol']) == "dns") && !empty($_POST['sitedown'])) + $input_errors[] = gettext("You cannot select a Fall Back Pool when using the DNS relay protocol."); + + if (!$input_errors) { + $vsent = array(); + if(isset($id) && $a_vs[$id]) + $vsent = $a_vs[$id]; + if($vsent['name'] != "") + $changedesc .= " " . sprintf(gettext("modified '%s' vs:"), $vsent['name']); + else + $changedesc .= " " . sprintf(gettext("created '%s' vs:"), $_POST['name']); + + update_if_changed("name", $vsent['name'], $_POST['name']); + update_if_changed("descr", $vsent['descr'], $_POST['descr']); + update_if_changed("poolname", $vsent['poolname'], $_POST['poolname']); + update_if_changed("port", $vsent['port'], $_POST['port']); + update_if_changed("sitedown", $vsent['sitedown'], $_POST['sitedown']); + update_if_changed("ipaddr", $vsent['ipaddr'], $_POST['ipaddr']); + update_if_changed("mode", $vsent['mode'], $_POST['mode']); + update_if_changed("relay protocol", $vsent['relay_protocol'], $_POST['relay_protocol']); + + if($_POST['sitedown'] == "") + unset($vsent['sitedown']); + + if (isset($id) && $a_vs[$id]) { + if ($a_vs[$id]['name'] != $_POST['name']) { + /* Because the VS name changed, mark the old name for cleanup. */ + cleanup_lb_mark_anchor($a_vs[$id]['name']); + } + $a_vs[$id] = $vsent; + } else + $a_vs[] = $vsent; + + if ($changecount > 0) { + /* Mark virtual server dirty */ + mark_subsystem_dirty('loadbalancer'); + write_config($changedesc); + } + + header("Location: load_balancer_virtual_server.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"),gettext("Load Balancer"),gettext("Virtual Server"),gettext("Edit")); +$shortcut_section = "relayd-virtualservers"; + +include("head.inc"); + +?> + + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + size="32" maxlength="32" /> +
                            + size="64" /> +
                            + size="39" maxlength="39" /> +
                            +
                            + +
                            + size="16" maxlength="16" /> +
                            +
                            +
                            + +
                            + + + + + +
                            + + + + +
                            +
                            + +
                            + +
                            +
                              + " /> + " onclick="window.location.href=''" /> + + + +
                            +
                            +
                            + + + + diff --git a/usr/local/www/logobig.jpg b/usr/local/www/logobig.jpg new file mode 100755 index 0000000000000000000000000000000000000000..2ef196da665d17728079e3b973f2cec1f0bc4589 GIT binary patch literal 7540 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 QO&Lbyv-m)CCE@4)0;g?hhX4Qo literal 0 HcmV?d00001 diff --git a/usr/local/www/niftycssCode.css b/usr/local/www/niftycssCode.css new file mode 100755 index 000000000..ec4af8052 --- /dev/null +++ b/usr/local/www/niftycssCode.css @@ -0,0 +1,21 @@ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 0px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} \ No newline at end of file diff --git a/usr/local/www/niftycssprintCode.css b/usr/local/www/niftycssprintCode.css new file mode 100755 index 000000000..e856b5bef --- /dev/null +++ b/usr/local/www/niftycssprintCode.css @@ -0,0 +1 @@ +.rtop,.rbottom,.artop,.arbottom{display: none} diff --git a/usr/local/www/pkg.php b/usr/local/www/pkg.php new file mode 100755 index 000000000..f552f323f --- /dev/null +++ b/usr/local/www/pkg.php @@ -0,0 +1,538 @@ + + 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. +*/ +/* + pfSense_MODULE: pkgs +*/ + +##|+PRIV +##|*IDENT=page-package-settings +##|*NAME=Package: Settings page +##|*DESCR=Allow access to the 'Package: Settings' page. +##|*MATCH=pkg.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("pkg-utils.inc"); + +function gentitle_pkg($pgname) { + global $config; + return $config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pgname; +} + +function domTT_title($title_msg){ + print "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '".gettext($title_msg)."', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\""; +} + +$xml = $_REQUEST['xml']; + +if($xml == "") { + print_info_box_np(gettext("ERROR: No package defined.")); + exit; +} else { + if(file_exists("/usr/local/pkg/" . $xml)) + $pkg = parse_xml_config_pkg("/usr/local/pkg/" . $xml, "packagegui"); + else { + echo "File not found " . htmlspecialchars($xml); + exit; + } +} + +if($pkg['donotsave'] <> "") { + header("Location: pkg_edit.php?xml=" . $xml); + exit; +} + +if ($pkg['include_file'] != "") { + require_once($pkg['include_file']); +} + +$package_name = $pkg['menu'][0]['name']; +$section = $pkg['menu'][0]['section']; +$config_path = $pkg['configpath']; +$title = $pkg['title']; + +if($_REQUEST['startdisplayingat']) + $startdisplayingat = $_REQUEST['startdisplayingat']; + +if($_REQUEST['display_maximum_rows']) + if($_REQUEST['display_maximum_rows']) + $display_maximum_rows = $_REQUEST['display_maximum_rows']; + +$evaledvar = $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']; + +if ($_GET['act'] == "update") { + + if(is_array($config['installedpackages'][$pkg['name']]) && $pkg['name'] != "" && $_REQUEST['ids'] !=""){ + #get current values + $current_values=$config['installedpackages'][$pkg['name']]['config']; + #get updated ids + parse_str($_REQUEST['ids'], $update_list); + #sort ids to know what to change + #usefull to do not loose data when using sorting and paging + $sort_list=$update_list['ids']; + sort($sort_list); + #apply updates + foreach($update_list['ids'] as $key=> $value){ + $config['installedpackages'][$pkg['name']]['config'][$sort_list[$key]]=$current_values[$update_list['ids'][$key]]; + } + #save current config + write_config(); + #sync package + eval ("{$pkg['custom_php_resync_config_command']}"); + } + #function called via jquery, no need to continue after save changes. + exit; +} +if ($_GET['act'] == "del") { + // loop through our fieldnames and automatically setup the fieldnames + // in the environment. ie: a fieldname of username with a value of + // testuser would automatically eval $username = "testuser"; + foreach ($evaledvar as $ip) { + if($pkg['adddeleteeditpagefields']['columnitem']) + foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) { + ${xml_safe_fieldname($column['fielddescr'])} = $ip[xml_safe_fieldname($column['fieldname'])]; + } + } + + $a_pkg = &$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']; + + if ($a_pkg[$_GET['id']]) { + unset($a_pkg[$_GET['id']]); + write_config(); + if($pkg['custom_delete_php_command'] <> "") { + if($pkg['custom_php_command_before_form'] <> "") + eval($pkg['custom_php_command_before_form']); + eval($pkg['custom_delete_php_command']); + } + header("Location: pkg.php?xml=" . $xml); + exit; + } +} + +ob_start(); + +$iflist = get_configured_interface_with_descr(false, true); +$evaledvar = $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']; + +if($pkg['custom_php_global_functions'] <> "") + eval($pkg['custom_php_global_functions']); + +if($pkg['custom_php_command_before_form'] <> "") + eval($pkg['custom_php_command_before_form']); + +$pgtitle = array($title); +include("head.inc"); + +?> + + + + + + + + +
                            +' /> + "") $savemsg = htmlspecialchars($_GET['savemsg']); ?> +
                            + + + "") { + $tab_array = array(); + foreach($pkg['tabs']['tab'] as $tab) { + if($tab['tab_level']) + $tab_level = $tab['tab_level']; + else + $tab_level = 1; + if(isset($tab['active'])) { + $active = true; + } else { + $active = false; + } + if(isset($tab['no_drop_down'])) + $no_drop_down = true; + $urltmp = ""; + if($tab['url'] <> "") $urltmp = $tab['url']; + if($tab['xml'] <> "") $urltmp = "pkg_edit.php?xml=" . $tab['xml']; + + $addresswithport = getenv("HTTP_HOST"); + $colonpos = strpos($addresswithport, ":"); + if ($colonpos !== False) { + //my url is actually just the IP address of the pfsense box + $myurl = substr($addresswithport, 0, $colonpos); + } else { + $myurl = $addresswithport; + } + // eval url so that above $myurl item can be processed if need be. + $url = str_replace('$myurl', $myurl, $urltmp); + + $tab_array[$tab_level][] = array( + $tab['text'], + $active, + $url + ); + } + + ksort($tab_array); + foreach($tab_array as $tab) { + echo ''; + } +} +?> +
                            '; + display_top_tabs($tab, $no_drop_down); + echo '
                            + + + +
                            + + "") + foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) + $colspan++; + if($pkg['fields']['field']) { + // First find the sorting type field if it exists + foreach($pkg['fields']['field'] as $field) { + if($field['type'] == "sorting") { + if(isset($field['include_filtering_inputbox'])) + $include_filtering_inputbox = true; + if($display_maximum_rows < 1) + if($field['display_maximum_rows']) + $display_maximum_rows = $field['display_maximum_rows']; + echo ""; + echo ""; + } + } + } +?> + +"; + } + $cols = 0; + if($pkg['adddeleteeditpagefields']['columnitem'] <> "") { + foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) { + echo ""; + $cols++; + } + } + echo ""; + $i=0; + $pagination_startingrow=0; + $pagination_counter=0; + if($evaledvar) + foreach ($evaledvar as $ip) { + if($startdisplayingat) { + if($i < $startdisplayingat) { + $i++; + continue; + } + } + if($_REQUEST['pkg_filter']) { + // Handle filterered items + if($pkg['fields']['field'] && !$filter_regex) { + // First find the sorting type field if it exists + foreach($pkg['fields']['field'] as $field) { + if($field['type'] == "sorting") { + if($field['sortablefields']['item']) { + foreach($field['sortablefields']['item'] as $sf) { + if($sf['name'] == $_REQUEST['pkg_filter_type']) { + $filter_fieldname = $sf['fieldname']; + #Use a default regex on sortable fields when none is declared + if($sf['regex']) + $filter_regex = str_replace("%FILTERTEXT%", $_REQUEST['pkg_filter'], trim($sf['regex'])); + else + $filter_regex = "/{$_REQUEST['pkg_filter']}/i"; + } + } + } + } + } + } + // Do we have something to filter on? + unset($filter_matches); + if($pkg['adddeleteeditpagefields']['columnitem'] <> "") { + foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) { + $fieldname = $ip[xml_safe_fieldname($column['fieldname'])]; + if($column['fieldname'] == $filter_fieldname) { + if($filter_regex) { + //echo "$filter_regex - $fieldname

                            "; + preg_match($filter_regex, $fieldname, $filter_matches); + break; + } + } + } + } + if(!$filter_matches) { + $i++; + continue; + } + } + if($pkg['adddeleteeditpagefields']['movable']) + echo "

                            \n"; + else + echo "\n"; + if($pkg['adddeleteeditpagefields']['columnitem'] <> "") + foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) { + if ($column['fieldname'] == "description") + $class = "listbg"; + else + $class = "listlr"; +?> + + + +\n"; + // Handle pagination and display_maximum_rows + if($display_maximum_rows) { + if($pagination_counter == ($display_maximum_rows-1) or + $i == (count($evaledvar)-1)) { + $colcount = count($pkg['adddeleteeditpagefields']['columnitem']); + $final_footer = ""; + $final_footer .= ""; + $i = count($evaledvar); + break; + } + } + $i++; + $pagination_counter++; + } +?> + + + + + + + + +
                            "; + echo "Filter by: "; + $isfirst = true; + for($char = 65; $char < 91; $char++) { + if(!$isfirst) + echo " | "; + echo "" . chr($char) . ""; + $isfirst = false; + } + echo "
                            "; + if($field['sortablefields']) { + echo "Filter field: "; + } + if($include_filtering_inputbox) + echo "  Filter text: "; + echo "
                             
                            "; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
                            Displaying page $page of $totalpagesRows per page:
                            "; + echo "
                            " . $column['fielddescr'] . "
                            + + + + + + + + + +
                            alt="edit" />')"> alt="delete" />
                            +
                            "; + $final_footer .= ""; + $final_footer .= "
                            "; + $startingat = $startdisplayingat - $display_maximum_rows; + if($startingat > -1) { + $final_footer .= ""; + } else { + if($startingnat > 1) + $final_footer .= ""; + } + $final_footer .= "<< Previous page"; + if($tmppp + $display_maximum_rows > count($evaledvar)) + $endingrecord = count($evaledvar); + else + $endingrecord = $tmppp + $display_maximum_rows; + $final_footer .= ""; + $tmppp++; + $final_footer .= "Displaying {$tmppp} - {$endingrecord} / " . count($evaledvar) . " records"; + $final_footer .= " "; + if(($i+1) < count($evaledvar)) + $final_footer .= ""; + $final_footer .= "Next page >>"; + $final_footer .= "
                            + + + + + + + + +
                            alt="add" /> alt="info" />
                            +
                            +
                            +
                            + +
                            + + +"; + echo ""; +?> + + + diff --git a/usr/local/www/pkg_edit.php b/usr/local/www/pkg_edit.php new file mode 100644 index 000000000..1a78ef37e --- /dev/null +++ b/usr/local/www/pkg_edit.php @@ -0,0 +1,1132 @@ + + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig + pfSense_MODULE: pkgs +*/ + +##|+PRIV +##|*IDENT=page-package-edit +##|*NAME=Package: Edit page +##|*DESCR=Allow access to the 'Package: Edit' page. +##|*MATCH=pkg_edit.php* +##|-PRIV + +ini_set('max_execution_time', '0'); + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("pkg-utils.inc"); + +/* dummy stubs needed by some code that was MFC'd */ +function pfSenseHeader($location) { header("Location: " . $location); } + +function gentitle_pkg($pgname) { + global $pfSense_config; + return $pfSense_config['system']['hostname'] . "." . $pfSense_config['system']['domain'] . " - " . $pgname; +} + +function domTT_title($title_msg){ + if (!empty($title_msg)){ + $title_msg=preg_replace("/\s+/"," ",$title_msg); + $title_msg=preg_replace("/'/","\'",$title_msg); + return "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '{$title_msg}', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'delay',300,'styleClass', 'niceTitle');\""; + } +} + +$xml = htmlspecialchars($_GET['xml']); +if($_POST['xml']) $xml = htmlspecialchars($_POST['xml']); + +$xml_fullpath = realpath('/usr/local/pkg/' . $xml); + +if ($xml == "" || $xml_fullpath === false || + substr($xml_fullpath, 0, strlen('/usr/local/pkg/')) != '/usr/local/pkg/') { + print_info_box_np(gettext("ERROR: No valid package defined.")); + die; +} else { + $pkg = parse_xml_config_pkg($xml_fullpath, "packagegui"); +} + +if($pkg['include_file'] <> "") { + require_once($pkg['include_file']); +} + +if (!isset($pkg['adddeleteeditpagefields'])) + $only_edit = true; +else + $only_edit = false; + +$package_name = $pkg['menu'][0]['name']; +$section = $pkg['menu'][0]['section']; +$config_path = $pkg['configpath']; +$name = $pkg['name']; +$title = $pkg['title']; +$pgtitle = $title; + +$id = $_GET['id']; +if (isset($_POST['id'])) + $id = htmlspecialchars($_POST['id']); + +// Not posting? Then user is editing a record. There must be a valid id +// when editing a record. +if(!$id && !$_POST) + $id = "0"; + +if(!is_numeric($id)) { + header("Location: /"); + exit; +} + +if($pkg['custom_php_global_functions'] <> "") + eval($pkg['custom_php_global_functions']); + +// grab the installedpackages->package_name section. +if($config['installedpackages'] && !is_array($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'])) + $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'] = array(); + +// If the first entry in the array is an empty tag, kill it. +if ($config['installedpackages'] && (count($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']) > 0) + && ($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'][0] == "")) + array_shift($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']); + +$a_pkg = &$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']; + +if($_GET['savemsg'] <> "") + $savemsg = htmlspecialchars($_GET['savemsg']); + +if($pkg['custom_php_command_before_form'] <> "") + eval($pkg['custom_php_command_before_form']); + +if ($_POST) { + $firstfield = ""; + $rows = 0; + + $input_errors = array(); + $reqfields = array(); + $reqfieldsn = array(); + foreach ($pkg['fields']['field'] as $field) { + if (($field['type'] == 'input') && isset($field['required'])) { + if($field['fieldname']) + $reqfields[] = $field['fieldname']; + if($field['fielddescr']) + $reqfieldsn[] = $field['fielddescr']; + } + } + do_input_validation($_POST, $reqfields, $reqfieldsn, $input_errors); + + if ($pkg['custom_php_validation_command']) + eval($pkg['custom_php_validation_command']); + + if($_POST['act'] == "del") { + if($pkg['custom_delete_php_command']) { + if($pkg['custom_php_command_before_form'] <> "") + eval($pkg['custom_php_command_before_form']); + eval($pkg['custom_delete_php_command']); + } + write_config($pkg['delete_string']); + // resync the configuration file code if defined. + if($pkg['custom_php_resync_config_command'] <> "") { + if($pkg['custom_php_command_before_form'] <> "") + eval($pkg['custom_php_command_before_form']); + eval($pkg['custom_php_resync_config_command']); + } + } else { + if(!$input_errors && $pkg['custom_add_php_command']) { + if($pkg['donotsave'] <> "" or $pkg['preoutput'] <> "") { + ?> + + + + +"; + eval($pkg['custom_add_php_command']); + if($pkg['preoutput']) echo ""; + } + } + + // donotsave is enabled. lets simply exit. + if(empty($pkg['donotsave'])) { + + // store values in xml configration file. + if (!$input_errors) { + $pkgarr = array(); + foreach ($pkg['fields']['field'] as $fields) { + switch($fields['type']){ + case "rowhelper": + // save rowhelper items. + #$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row"); + $rowhelpername="row"; + foreach($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) + foreach($_POST as $key => $value){ + if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/",$key,$matches)) + $pkgarr[$rowhelpername][$matches[1]][$rowhelperfield['fieldname']]=$value; + } + break; + default: + $fieldname = $fields['fieldname']; + if ($fieldname == "interface_array") { + $fieldvalue = $_POST[$fieldname]; + } elseif (is_array($_POST[$fieldname])) { + $fieldvalue = implode(',', $_POST[$fieldname]); + } else { + $fieldvalue = trim($_POST[$fieldname]); + if ($fields['encoding'] == 'base64') + $fieldvalue = base64_encode($fieldvalue); + } + if($fieldname) + $pkgarr[$fieldname] = $fieldvalue; + } + } + + if (isset($id) && $a_pkg[$id]) + $a_pkg[$id] = $pkgarr; + else + $a_pkg[] = $pkgarr; + + write_config($pkg['addedit_string']); + // late running code + if($pkg['custom_add_php_command_late'] <> "") { + eval($pkg['custom_add_php_command_late']); + } + + if (isset($pkg['filter_rules_needed'])) + filter_configure(); + + // resync the configuration file code if defined. + if($pkg['custom_php_resync_config_command'] <> "") { + eval($pkg['custom_php_resync_config_command']); + } + + parse_package_templates(); + + /* if start_command is defined, restart w/ this */ + if($pkg['start_command'] <> "") + exec($pkg['start_command'] . ">/dev/null 2&>1"); + + /* if restart_command is defined, restart w/ this */ + if($pkg['restart_command'] <> "") + exec($pkg['restart_command'] . ">/dev/null 2&>1"); + + if($pkg['aftersaveredirect'] <> "") { + pfSenseHeader($pkg['aftersaveredirect']); + } elseif(!$pkg['adddeleteeditpagefields']) { + pfSenseHeader("pkg_edit.php?xml={$xml}&id=0"); + } elseif(!$pkg['preoutput']) { + pfSenseHeader("pkg.php?xml=" . $xml); + } + exit; + } else { + $get_from_post = true; + } + } elseif (!$input_errors) { + exit; + } +} + +if($pkg['title'] <> "") { + $edit = ($only_edit ? '' : ": " . gettext("Edit")); + $title = $pkg['title'] . $edit; +} +else + $title = gettext("Package Editor"); + +$pgtitle = $title; + +if ($pkg['custom_php_after_head_command']) { + $closehead = false; + include("head.inc"); + eval($pkg['custom_php_after_head_command']); + echo "\n"; +} +else + include("head.inc"); + +?> + + + + + + + + + "") { ?> + + + + + + + + + +
                            + + + + "") { + $tab_array = array(); + foreach($pkg['tabs']['tab'] as $tab) { + if($tab['tab_level']) + $tab_level = $tab['tab_level']; + else + $tab_level = 1; + if(isset($tab['active'])) { + $active = true; + } else { + $active = false; + } + if(isset($tab['no_drop_down'])) + $no_drop_down = true; + $urltmp = ""; + if($tab['url'] <> "") $urltmp = $tab['url']; + if($tab['xml'] <> "") $urltmp = "pkg_edit.php?xml=" . $tab['xml']; + + $addresswithport = getenv("HTTP_HOST"); + $colonpos = strpos($addresswithport, ":"); + if ($colonpos !== False) { + //my url is actually just the IP address of the pfsense box + $myurl = substr($addresswithport, 0, $colonpos); + } else { + $myurl = $addresswithport; + } + // eval url so that above $myurl item can be processed if need be. + $url = str_replace('$myurl', $myurl, $urltmp); + + $tab_array[$tab_level][] = array( + $tab['text'], + $active, + $url + ); + } + + ksort($tab_array); + foreach($tab_array as $tabid => $tab) { + echo ''; + } +} + +?> + +
                            '; + display_top_tabs($tab, $no_drop_down, $tabid); + echo '
                            + "") $savevalue = $pkg['savetext']; + /* If a package's XML has configured, then setup + * the table rows for the fields that have set. + * These fields will be placed below other fields in a seprate area titled 'Advanced Features'. + * These advanced fields are not normally configured and generally left to default to 'default settings'. + */ + + if ($pkg['advanced_options'] == "enabled") { + $adv_filed_count = 0; + $advanced = ""; + $advanced .= "\n"; + } + foreach ($pkg['fields']['field'] as $pkga) { + if ($pkga['type'] == "sorting") + continue; + + if ($pkga['type'] == "listtopic") { + $input = ""; + $input .= "\n"; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) { + $advanced .= $input; + $adv_filed_count++; + } + else + echo $input; + continue; + } + + if($pkga['combinefields']=="begin"){ + $input=""; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) + $advanced .= $input; + else + echo $input; + } + + $size = ""; + if (isset($pkga['dontdisplayname'])){ + $input=""; + if(!isset($pkga['combinefields'])) + $input .= ""; + if(isset($pkga['usecolspan2'])) + $colspan="colspan='2'"; + else + $input .= ""; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) { + $advanced .= $input; + $adv_filed_count++; + } + else + echo $input; + } + else if (!isset($pkga['placeonbottom'])){ + unset($req); + if (isset($pkga['required'])) + $req = 'req'; + $input= ""; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) { + $advanced .= $input; + $adv_filed_count++; + } + else + echo $input; + } + if($pkga['combinefields']=="begin"){ + $input=""; + } + else{ + $input= ""; + if($pkga['usecolspan2']) + $input.= "
                            "; + } + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) + $advanced .= "{$input}\n"; + else + echo "{$input}\n"; + #increment counter + $i++; + } + + #print advanced settings if any after reading all fields + if (isset($advanced) && $adv_filed_count > 0) + echo $advanced; + + ?> + + + + + + + + +
                             
                            ". gettext("Advanced features") . "
                             
                            {$pkga['name']}
                             
                            "; + $input .= fixup_string($pkga['fielddescr']); + $input .= ""; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) + $advanced .= $input; + else + echo $input; + } + + $class=(isset($pkga['combinefields']) ? '' : 'class="vtable"'); + if (!isset($pkga['placeonbottom'])){ + $input="
                            "; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)){ + $advanced .= $input; + $adv_filed_count++; + } + else + echo $input; + } + + // if user is editing a record, load in the data. + $fieldname = $pkga['fieldname']; + if ($get_from_post) { + $value = $_POST[$fieldname]; + if (is_array($value)) $value = implode(',', $value); + } else { + if (isset($id) && $a_pkg[$id]) + $value = $a_pkg[$id][$fieldname]; + else + $value = $pkga['default_value']; + } + switch($pkga['type']){ + case "input": + $size = ($pkga['size'] ? " size='{$pkga['size']}' " : ""); + $input = "\n"; + $input .= "
                            " . fixup_string($pkga['description']) . "\n"; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) { + $js_array[] = $pkga['fieldname']; + $advanced .= display_advanced_field($pkga['fieldname']).$input ."\n"; + } + else + echo $input; + break; + + case "password": + $size = ($pkga['size'] ? " size='{$pkga['size']}' " : ""); + $input = "\n"; + $input .= "
                            " . fixup_string($pkga['description']) . "\n"; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) { + $js_array[] = $pkga['fieldname']; + $advanced .= display_advanced_field($pkga['fieldname']).$input ."\n"; + } + else + echo $input; + break; + + case "info": + $input = fixup_string($pkga['description']) . "\n"; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) { + $js_array[] = $pkga['fieldname']; + $advanced .= display_advanced_field($pkga['fieldname']).$input ."\n"; + } + else + echo $input; + break; + + case "select": + $fieldname = $pkga['fieldname']; + if (isset($pkga['multiple'])) { + $multiple = 'multiple="multiple"'; + $items = explode(',', $value); + $fieldname .= "[]"; + } else { + $multiple = ''; + $items = array($value); + } + $size = ($pkga['size'] ? " size='{$pkga['size']}' " : ""); + $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : ''); + $input = "\n
                            \n" . fixup_string($pkga['description']) . "\n"; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) { + $js_array[] = $pkga['fieldname']; + $advanced .= display_advanced_field($pkga['fieldname']).$input; + $advanced .= "\n"; + } + else + echo $input; + break; + + case "select_source": + $fieldname = $pkga['fieldname']; + if (isset($pkga['multiple'])) { + $multiple = 'multiple="multiple"'; + $items = explode(',', $value); + $fieldname .= "[]"; + } else { + $multiple = ''; + $items = array($value); + } + $size = (isset($pkga['size']) ? "size=\"{$pkga['size']}\"" : ''); + $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : ''); + $input = "\n
                            \n" . fixup_string($pkga['description']) . "\n"; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) + $advanced .= $input; + else + echo $input; + break; + + case "vpn_selection" : + $input = "\n"; + $input .= "
                            " . fixup_string($pkga['description']) . "\n"; + + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) { + $js_array[] = $pkga['fieldname']; + $advanced .= display_advanced_field($pkga['fieldname']).$input; + $advanced .= "\n"; + } + else + echo $input; + break; + + case "checkbox": + $checkboxchecked =($value == "on" ? " checked=\"checked\"" : ""); + $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : ''); + if (isset($pkga['enablefields']) || isset($pkga['checkenablefields'])) + $onclick = ' onclick="javascript:enablechange();"'; + $input = "\n"; + $input .= "
                            " . fixup_string($pkga['description']) . "\n"; + + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) { + $js_array[] = $pkga['fieldname']; + $advanced .= display_advanced_field($pkga['fieldname']).$input; + $advanced .= "\n"; + } + else + echo $input; + break; + + case "textarea": + if($pkga['rows']) + $rows = " rows='{$pkga['rows']}' "; + if($pkga['cols']) + $cols = " cols='{$pkga['cols']}' "; + if (($pkga['encoding'] == 'base64') && !$get_from_post && !empty($value)) + $value = base64_decode($value); + $wrap =($pkga['wrap'] == "off" ? 'wrap="off" style="white-space:nowrap;"' : ''); + $input = "\n"; + $input .= "
                            " . fixup_string($pkga['description']) . "\n"; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) { + $js_array[] = $pkga['fieldname']; + $advanced .= display_advanced_field($pkga['fieldname']).$input; + $advanced .= "\n"; + } + else + echo $input; + break; + + case "aliases": + // Use xml tag to filter type aliases + $size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : ''); + $fieldname = $pkga['fieldname']; + $a_aliases = &$config['aliases']['alias']; + $addrisfirst = 0; + $aliasesaddr = ""; + $value = "value='{$value}'"; + + if(isset($a_aliases)) { + if(!empty($pkga['typealiases'])) { + foreach($a_aliases as $alias) + if($alias['type'] == $pkga['typealiases']) { + if($addrisfirst == 1) $aliasesaddr .= ","; + $aliasesaddr .= "'" . $alias['name'] . "'"; + $addrisfirst = 1; + } + } else { + foreach($a_aliases as $alias) { + if($addrisfirst == 1) $aliasesaddr .= ","; + $aliasesaddr .= "'" . $alias['name'] . "'"; + $addrisfirst = 1; + } + } + } + + $input = "\n
                            "; + $input .= fixup_string($pkga['description']) . "\n"; + + $script = ""; + + echo $input; + echo $script; + break; + + case "interfaces_selection": + $ips=array(); + $interface_regex=(isset($pkga['hideinterfaceregex']) ? $pkga['hideinterfaceregex'] : "nointerfacestohide"); + if (is_array($config['interfaces'])) + foreach ($config['interfaces'] as $iface_key=>$iface_value){ + if (isset($iface_value['enable']) && ! preg_match("/$interface_regex/",$iface_key)){ + $iface_description=($iface_value['descr'] !="" ? strtoupper($iface_value['descr']) : strtoupper($iface_key)); + if (isset($pkga['showips'])) + $iface_description .= " address"; + $ips[]=array('ip'=> $iface_key, 'description'=> $iface_description); + } + } + if (is_array($config['virtualip']) && isset($pkga['showvirtualips'])) + foreach ($config['virtualip']['vip'] as $vip){ + if (! preg_match("/$interface_regex/",$vip['interface'])) + $vip_description=($vip['descr'] !="" ? " ({$vip['descr']}) " : " "); + switch ($vip['mode']){ + case "ipalias": + case "carp": + $ips[]=array( 'ip'=> $vip['subnet'],'description' => "{$vip['subnet']} $vip_description"); + break; + case "proxyarp": + if ($vip['type']=="network"){ + $start = ip2long32(gen_subnet($vip['subnet'], $vip['subnet_bits'])); + $end = ip2long32(gen_subnet_max($vip['subnet'], $vip['subnet_bits'])); + $len = $end - $start; + for ($i = 0; $i <= $len; $i++) + $ips[]= array('ip'=>long2ip32($start+$i),'description'=> long2ip32($start+$i)." from {$vip['subnet']}/{$vip['subnet_bits']} {$vip_description}"); + } + else{ + $ips[]= array('ip'=>$vip['subnet'],'description'=> "{$vip['subnet']} $vip_description"); + } + break; + } + } + sort($ips); + if (isset($pkga['showlistenall'])) + array_unshift($ips,array('ip'=> 'All', 'description'=> 'Listen on All interfaces/ip addresses ')); + if (! preg_match("/$interface_regex/","loopback")){ + $iface_description=(isset($pkga['showips']) ? "127.0.0.1 (loopback)" : "loopback"); + array_push($ips,array('ip'=> 'lo0', 'description'=> $iface_description)); + } + + #show interfaces array on gui + $size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : ''); + $multiple = ''; + $fieldname = $pkga['fieldname']; + if (isset($pkga['multiple'])) { + $fieldname .= '[]'; + $multiple = 'multiple="multiple"'; + } + $input = "\n
                            " . fixup_string($pkga['description']) . "\n"; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) + $advanced .= $input; + else + echo $input; + break; + + case "radio": + $input = ""; + if(isset($pkga['advancedfield']) && isset($adv_filed_count)) + $advanced .= $input; + else + echo $input; + break; + + case "button": + $input = "\n"; + if(isset($pkga['placeonbottom'])) + $pkg_buttons .= $input; + else + echo $input ."\n
                            " . fixup_string($pkga['description']) . "\n"; + break; + + case "rowhelper": + #$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row"); + $rowhelpername="row"; + ?> + + + '> + " . fixup_string($rowhelper['fielddescr']) . "\n"; + } + + $rowcounter = 0; + $trc = 0; + + //Use assigned $a_pkg or create an empty array to enter loop + if(isset($a_pkg[$id][$rowhelpername])) + $saved_rows=$a_pkg[$id][$rowhelpername]; + else + $saved_rows[]=array(); + + foreach($saved_rows as $row) { + echo "\n\n"; + foreach($pkga['rowhelper']['rowhelperfield'] as $rowhelper) { + unset($value); + if($rowhelper['value'] <> "") $value = $rowhelper['value']; + $fieldname = $rowhelper['fieldname']; + // if user is editing a record, load in the data. + if (isset($id) && $a_pkg[$id]) { + $value = $row[$fieldname]; + } + $options = ""; + $type = $rowhelper['type']; + $description = $rowhelper['description']; + $fieldname = $rowhelper['fieldname']; + if($type == "option") + $options = &$rowhelper['options']['option']; + if($rowhelper['size']) + $size = $rowhelper['size']; + else if ($pkga['size']) + $size = $pkga['size']; + else + $size = "8"; + display_row($rowcounter, $value, $fieldname, $type, $rowhelper, $size); + + $text = ""; + $trc++; + } + $rowcounter++; + echo "\n"; + } + ?> + + +
                            "; + #echo "\"remove\""; + echo "delete"; + echo "
                            + + +
                            add +
                            + + + "; + if ($pkga['combinefields']=="end") + $input.="
                             
                              +
                            + " . gettext("Note") . ": {$pkg['note']}

                            "; + } + //if (isset($id) && $a_pkg[$id]) // We'll always have a valid ID in our hands + echo ""; + echo "\n{$pkg_buttons}\n"; + if (!$only_edit){ + echo ""; + } + ?> +
                            +
                            +
                            +
                            + + + +\n"; + echo "//\n"; + echo "\n"; + } +?> + + + + + +\n"; + switch($type){ + case "input": + echo "\n"; + break; + case "checkbox": + echo "\n"; + break; + case "password": + echo "\n"; + break; + case "textarea": + echo "\n"; + case "select": + echo "\n"; + break; + case "interfaces_selection": + $size = ($size ? "size=\"{$size}\"" : ''); + $multiple = ''; + if (isset($rowhelper['multiple'])) { + $fieldname .= '[]'; + $multiple = "multiple=\"multiple\""; + } + echo "\n"; + break; + case "select_source": + echo "\n"; + break; + } + echo "\n"; +} + +function fixup_string($string) { + global $config; + // fixup #1: $myurl -> http[s]://ip_address:port/ + $https = ""; + $port = $config['system']['webguiport']; + if($port <> "443" and $port <> "80") + $urlport = ":" . $port; + else + $urlport = ""; + + if($config['system']['webgui']['protocol'] == "https") $https = "s"; + $myurl = "http" . $https . "://" . getenv("HTTP_HOST") . $urlport; + $newstring = str_replace("\$myurl", $myurl, $string); + $string = $newstring; + // fixup #2: $wanip + $curwanip = get_interface_ip(); + $newstring = str_replace("\$wanip", $curwanip, $string); + $string = $newstring; + // fixup #3: $lanip + $lancfg = $config['interfaces']['lan']; + $lanip = $lancfg['ipaddr']; + $newstring = str_replace("\$lanip", $lanip, $string); + $string = $newstring; + // fixup #4: fix'r'up here. + return $newstring; +} + +/* + * Parse templates if they are defined + */ +function parse_package_templates() { + global $pkg, $config; + $rows = 0; + if($pkg['templates']['template'] <> "") + foreach($pkg['templates']['template'] as $pkg_template_row) { + $filename = $pkg_template_row['filename']; + $template_text = $pkg_template_row['templatecontents']; + $firstfield = ""; + /* calculate total row helpers count and */ + /* change fields defined as fieldname_fieldvalue to their value */ + foreach ($pkg['fields']['field'] as $fields) { + switch($fields['type']){ + case "rowhelper": + // save rowhelper items. + $row_helper_total_rows = 0; + $row_helper_data = ""; + foreach($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) + foreach($_POST as $key => $value){ + if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/",$key,$matches)){ + $row_helper_total_rows++; + $row_helper_data .= $value; + $sep = ""; + ereg($rowhelperfield['fieldname'] . "_fieldvalue\[(.*)\]", $template_text, $sep); + foreach ($sep as $se) $separator = $se; + if($separator <> "") { + $row_helper_data = ereg_replace(" ", $separator, $row_helper_data); + $template_text = ereg_replace("\[{$separator}\]", "", $template_text); + } + $template_text = str_replace($rowhelperfield['fieldname'] . "_fieldvalue", $row_helper_data, $template_text); + } + } + break; + default: + $fieldname = $fields['fieldname']; + $fieldvalue = $_POST[$fieldname]; + $template_text = str_replace($fieldname . "_fieldvalue", $fieldvalue, $template_text); + } + } + /* replace $domain_total_rows with total rows */ + $template_text = str_replace("$domain_total_rows", $row_helper_total_rows, $template_text); + + /* replace cr's */ + $template_text = str_replace("\\n", "\n", $template_text); + + /* write out new template file */ + $fout = fopen($filename,"w"); + fwrite($fout, $template_text); + fclose($fout); + } +} + +/* Return html div fields */ +function display_advanced_field($fieldname) { + $div = "
                            \n"; + $div .= " - " . gettext("Show advanced option") ."
                            \n"; + $div .= " + + + + + + + + diff --git a/usr/local/www/services_dhcpv6.php b/usr/local/www/services_dhcpv6.php new file mode 100644 index 000000000..7f56a6cc5 --- /dev/null +++ b/usr/local/www/services_dhcpv6.php @@ -0,0 +1,917 @@ +. + All rights reserved. + + part of pfSense (https://www.pfsense.org) + Copyright (C) 2010 Seth Mos . + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /bin/rm + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-services-dhcpv6server +##|*NAME=Services: DHCPv6 server page +##|*DESCR=Allow access to the 'Services: DHCPv6 server' page. +##|*MATCH=services_dhcpv6.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("filter.inc"); + +if(!$g['services_dhcp_server_enable']) { + header("Location: /"); + exit; +} + +/* Fix failover DHCP problem + * http://article.gmane.org/gmane.comp.security.firewalls.pfsense.support/18749 + */ +ini_set("memory_limit","64M"); + +$if = $_GET['if']; +if ($_POST['if']) + $if = $_POST['if']; + +/* if OLSRD is enabled, allow WAN to house DHCP. */ +if($config['installedpackages']['olsrd']) { + foreach($config['installedpackages']['olsrd']['config'] as $olsrd) { + if($olsrd['enable']) { + $is_olsr_enabled = true; + break; + } + } +} + +if (!$_GET['if']) + $savemsg = gettext("The DHCPv6 Server can only be enabled on interfaces configured with static IP addresses") . + gettext("Only interfaces configured with a static IP will be shown") . "."; + +$iflist = get_configured_interface_with_descr(); +$iflist = array_merge($iflist, get_configured_pppoe_server_interfaces()); + +/* set the starting interface */ +if (!$if || !isset($iflist[$if])) { + foreach ($iflist as $ifent => $ifname) { + $oc = $config['interfaces'][$ifent]; + if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) || + (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) + continue; + $if = $ifent; + break; + } +} + +if (is_array($config['dhcpdv6'][$if])){ + /* DHCPv6 */ + if (is_array($config['dhcpdv6'][$if]['range'])) { + $pconfig['range_from'] = $config['dhcpdv6'][$if]['range']['from']; + $pconfig['range_to'] = $config['dhcpdv6'][$if]['range']['to']; + } + if (is_array($config['dhcpdv6'][$if]['prefixrange'])) { + $pconfig['prefixrange_from'] = $config['dhcpdv6'][$if]['prefixrange']['from']; + $pconfig['prefixrange_to'] = $config['dhcpdv6'][$if]['prefixrange']['to']; + $pconfig['prefixrange_length'] = $config['dhcpdv6'][$if]['prefixrange']['prefixlength']; + } + $pconfig['deftime'] = $config['dhcpdv6'][$if]['defaultleasetime']; + $pconfig['maxtime'] = $config['dhcpdv6'][$if]['maxleasetime']; + $pconfig['domain'] = $config['dhcpdv6'][$if]['domain']; + $pconfig['domainsearchlist'] = $config['dhcpdv6'][$if]['domainsearchlist']; + list($pconfig['wins1'],$pconfig['wins2']) = $config['dhcpdv6'][$if]['winsserver']; + list($pconfig['dns1'],$pconfig['dns2']) = $config['dhcpdv6'][$if]['dnsserver']; + $pconfig['enable'] = isset($config['dhcpdv6'][$if]['enable']); + $pconfig['ddnsdomain'] = $config['dhcpdv6'][$if]['ddnsdomain']; + $pconfig['ddnsdomainprimary'] = $config['dhcpdv6'][$if]['ddnsdomainprimary']; + $pconfig['ddnsdomainkeyname'] = $config['dhcpdv6'][$if]['ddnsdomainkeyname']; + $pconfig['ddnsdomainkey'] = $config['dhcpdv6'][$if]['ddnsdomainkey']; + $pconfig['ddnsupdate'] = isset($config['dhcpdv6'][$if]['ddnsupdate']); + list($pconfig['ntp1'],$pconfig['ntp2']) = $config['dhcpdv6'][$if]['ntpserver']; + $pconfig['tftp'] = $config['dhcpdv6'][$if]['tftp']; + $pconfig['ldap'] = $config['dhcpdv6'][$if]['ldap']; + $pconfig['netboot'] = isset($config['dhcpdv6'][$if]['netboot']); + $pconfig['bootfile_url'] = $config['dhcpdv6'][$if]['bootfile_url']; + $pconfig['netmask'] = $config['dhcpdv6'][$if]['netmask']; + $pconfig['numberoptions'] = $config['dhcpdv6'][$if]['numberoptions']; + $pconfig['dhcpv6leaseinlocaltime'] = $config['dhcpdv6'][$if]['dhcpv6leaseinlocaltime']; + if (!is_array($config['dhcpdv6'][$if]['staticmap'])) + $config['dhcpdv6'][$if]['staticmap'] = array(); + $a_maps = &$config['dhcpdv6'][$if]['staticmap']; +} + +$ifcfgip = get_interface_ipv6($if); +$ifcfgsn = get_interface_subnetv6($if); + +/* set the enabled flag which will tell us if DHCP relay is enabled + * on any interface. We will use this to disable DHCP server since + * the two are not compatible with each other. + */ + +$dhcrelay_enabled = false; +$dhcrelaycfg = $config['dhcrelay6']; + +if(is_array($dhcrelaycfg)) { + foreach ($dhcrelaycfg as $dhcrelayif => $dhcrelayifconf) { + if (isset($dhcrelayifconf['enable']) && isset($iflist[$dhcrelayif]) && + (!link_interface_to_bridge($dhcrelayif))) + $dhcrelay_enabled = true; + } +} + +if ($_POST) { + + unset($input_errors); + + $old_dhcpdv6_enable = ($pconfig['enable'] == true); + $new_dhcpdv6_enable = ($_POST['enable'] ? true : false); + $dhcpdv6_enable_changed = ($old_dhcpdv6_enable != $new_dhcpdv6_enable); + + $pconfig = $_POST; + + $numberoptions = array(); + for($x=0; $x<99; $x++) { + if(isset($_POST["number{$x}"]) && ctype_digit($_POST["number{$x}"])) { + $numbervalue = array(); + $numbervalue['number'] = htmlspecialchars($_POST["number{$x}"]); + $numbervalue['value'] = htmlspecialchars($_POST["value{$x}"]); + $numberoptions['item'][] = $numbervalue; + } + } + // Reload the new pconfig variable that the forum uses. + $pconfig['numberoptions'] = $numberoptions; + + /* input validation */ + if ($_POST['enable']) { + $reqdfields = explode(" ", "range_from range_to"); + $reqdfieldsn = array(gettext("Range begin"),gettext("Range end")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (($_POST['prefixrange_from'] && !is_ipaddrv6($_POST['prefixrange_from']))) + $input_errors[] = gettext("A valid range must be specified."); + if (($_POST['prefixrange_to'] && !is_ipaddrv6($_POST['prefixrange_to']))) + $input_errors[] = gettext("A valid prefix range must be specified."); + if (($_POST['range_from'] && !is_ipaddrv6($_POST['range_from']))) + $input_errors[] = gettext("A valid range must be specified."); + if (($_POST['range_to'] && !is_ipaddrv6($_POST['range_to']))) + $input_errors[] = gettext("A valid range must be specified."); + if (($_POST['gateway'] && !is_ipaddrv6($_POST['gateway']))) + $input_errors[] = gettext("A valid IPv6 address must be specified for the gateway."); + if (($_POST['dns1'] && !is_ipaddrv6($_POST['dns1'])) || ($_POST['dns2'] && !is_ipaddrv6($_POST['dns2']))) + $input_errors[] = gettext("A valid IPv6 address must be specified for the primary/secondary DNS servers."); + + if ($_POST['deftime'] && (!is_numeric($_POST['deftime']) || ($_POST['deftime'] < 60))) + $input_errors[] = gettext("The default lease time must be at least 60 seconds."); + if ($_POST['maxtime'] && (!is_numeric($_POST['maxtime']) || ($_POST['maxtime'] < 60) || ($_POST['maxtime'] <= $_POST['deftime']))) + $input_errors[] = gettext("The maximum lease time must be at least 60 seconds and higher than the default lease time."); + if (($_POST['ddnsdomain'] && !is_domain($_POST['ddnsdomain']))) + $input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration."); + if (($_POST['ddnsdomain'] && !is_ipaddrv4($_POST['ddnsdomainprimary']))) + $input_errors[] = gettext("A valid primary domain name server IPv4 address must be specified for the dynamic domain name."); + if (($_POST['ddnsdomainkey'] && !$_POST['ddnsdomainkeyname']) || + ($_POST['ddnsdomainkeyname'] && !$_POST['ddnsdomainkey'])) + $input_errors[] = gettext("You must specify both a valid domain key and key name."); + if ($_POST['domainsearchlist']) { + $domain_array=preg_split("/[ ;]+/",$_POST['domainsearchlist']); + foreach ($domain_array as $curdomain) { + if (!is_domain($curdomain)) { + $input_errors[] = gettext("A valid domain search list must be specified."); + break; + } + } + } + + if (($_POST['ntp1'] && !is_ipaddrv6($_POST['ntp1'])) || ($_POST['ntp2'] && !is_ipaddrv6($_POST['ntp2']))) + $input_errors[] = gettext("A valid IPv6 address must be specified for the primary/secondary NTP servers."); + if (($_POST['domain'] && !is_domain($_POST['domain']))) + $input_errors[] = gettext("A valid domain name must be specified for the DNS domain."); + if ($_POST['tftp'] && !is_ipaddr($_POST['tftp']) && !is_domain($_POST['tftp']) && !is_URL($_POST['tftp'])) + $input_errors[] = gettext("A valid IPv6 address or hostname must be specified for the TFTP server."); + if (($_POST['bootfile_url'] && !is_URL($_POST['bootfile_url']))) + $input_errors[] = gettext("A valid URL must be specified for the network bootfile."); + + // Disallow a range that includes the virtualip + if (is_array($config['virtualip']['vip'])) { + foreach($config['virtualip']['vip'] as $vip) { + if($vip['interface'] == $if) + if($vip['subnetv6'] && is_inrange_v6($vip['subnetv6'], $_POST['range_from'], $_POST['range_to'])) + $input_errors[] = sprintf(gettext("The subnet range cannot overlap with virtual IPv6 address %s."),$vip['subnetv6']); + } + } + + $noip = false; + if(is_array($a_maps)) + foreach ($a_maps as $map) + if (empty($map['ipaddrv6'])) + $noip = true; + if (!$input_errors) { + /* make sure the range lies within the current subnet */ + $subnet_start = gen_subnetv6($ifcfgip, $ifcfgsn); + $subnet_end = gen_subnetv6_max($ifcfgip, $ifcfgsn); + + if (is_ipaddrv6($ifcfgip)) { + if ((! is_inrange_v6($_POST['range_from'], $subnet_start, $subnet_end)) || + (! is_inrange_v6($_POST['range_to'], $subnet_start, $subnet_end))) { + $input_errors[] = gettext("The specified range lies outside of the current subnet."); + } + } + /* "from" cannot be higher than "to" */ + if (inet_pton($_POST['range_from']) > inet_pton($_POST['range_to'])) + $input_errors[] = gettext("The range is invalid (first element higher than second element)."); + + /* make sure that the DHCP Relay isn't enabled on this interface */ + if (isset($config['dhcrelay'][$if]['enable'])) + $input_errors[] = sprintf(gettext("You must disable the DHCP relay on the %s interface before enabling the DHCP server."),$iflist[$if]); + + + /* Verify static mappings do not overlap: + - available DHCP range + - prefix delegation range (FIXME: still need to be completed) */ + $dynsubnet_start = inet_pton($_POST['range_from']); + $dynsubnet_end = inet_pton($_POST['range_to']); + + if(is_array($a_maps)) { + foreach ($a_maps as $map) { + if (empty($map['ipaddrv6'])) + continue; + if ((inet_pton($map['ipaddrv6']) > $dynsubnet_start) && + (inet_pton($map['ipaddrv6']) < $dynsubnet_end)) { + $input_errors[] = sprintf(gettext("The DHCP range cannot overlap any static DHCP mappings.")); + break; + } + } + } + } + } + + if (!$input_errors) { + if (!is_array($config['dhcpdv6'][$if])) + $config['dhcpdv6'][$if] = array(); + if (!is_array($config['dhcpdv6'][$if]['range'])) + $config['dhcpdv6'][$if]['range'] = array(); + if (!is_array($config['dhcpdv6'][$if]['prefixrange'])) + $config['dhcpdv6'][$if]['prefixrange'] = array(); + + $config['dhcpdv6'][$if]['range']['from'] = $_POST['range_from']; + $config['dhcpdv6'][$if]['range']['to'] = $_POST['range_to']; + $config['dhcpdv6'][$if]['prefixrange']['from'] = $_POST['prefixrange_from']; + $config['dhcpdv6'][$if]['prefixrange']['to'] = $_POST['prefixrange_to']; + $config['dhcpdv6'][$if]['prefixrange']['prefixlength'] = $_POST['prefixrange_length']; + $config['dhcpdv6'][$if]['defaultleasetime'] = $_POST['deftime']; + $config['dhcpdv6'][$if]['maxleasetime'] = $_POST['maxtime']; + $config['dhcpdv6'][$if]['netmask'] = $_POST['netmask']; + + unset($config['dhcpdv6'][$if]['winsserver']); + + unset($config['dhcpdv6'][$if]['dnsserver']); + if ($_POST['dns1']) + $config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns1']; + if ($_POST['dns2']) + $config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns2']; + + $config['dhcpdv6'][$if]['domain'] = $_POST['domain']; + $config['dhcpdv6'][$if]['domainsearchlist'] = $_POST['domainsearchlist']; + $config['dhcpdv6'][$if]['enable'] = ($_POST['enable']) ? true : false; + $config['dhcpdv6'][$if]['ddnsdomain'] = $_POST['ddnsdomain']; + $config['dhcpdv6'][$if]['ddnsdomainprimary'] = $_POST['ddnsdomainprimary']; + $config['dhcpdv6'][$if]['ddnsdomainkeyname'] = $_POST['ddnsdomainkeyname']; + $config['dhcpdv6'][$if]['ddnsdomainkey'] = $_POST['ddnsdomainkey']; + $config['dhcpdv6'][$if]['ddnsupdate'] = ($_POST['ddnsupdate']) ? true : false; + + unset($config['dhcpdv6'][$if]['ntpserver']); + if ($_POST['ntp1']) + $config['dhcpdv6'][$if]['ntpserver'][] = $_POST['ntp1']; + if ($_POST['ntp2']) + $config['dhcpdv6'][$if]['ntpserver'][] = $_POST['ntp2']; + + $config['dhcpdv6'][$if]['tftp'] = $_POST['tftp']; + $config['dhcpdv6'][$if]['ldap'] = $_POST['ldap']; + $config['dhcpdv6'][$if]['netboot'] = ($_POST['netboot']) ? true : false; + $config['dhcpdv6'][$if]['bootfile_url'] = $_POST['bootfile_url']; + $config['dhcpdv6'][$if]['dhcpv6leaseinlocaltime'] = $_POST['dhcpv6leaseinlocaltime']; + + // Handle the custom options rowhelper + if(isset($config['dhcpdv6'][$if]['numberoptions']['item'])) + unset($config['dhcpdv6'][$if]['numberoptions']['item']); + + $config['dhcpdv6'][$if]['numberoptions'] = $numberoptions; + + write_config(); + + $retval = 0; + $retvaldhcp = 0; + $retvaldns = 0; + /* Stop DHCPv6 so we can cleanup leases */ + killbypid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpdv6.pid"); + // dhcp_clean_leases(); + /* dnsmasq_configure calls dhcpd_configure */ + /* no need to restart dhcpd twice */ + if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) { + $retvaldns = services_dnsmasq_configure(); + if ($retvaldns == 0) { + clear_subsystem_dirty('hosts'); + clear_subsystem_dirty('staticmaps'); + } + } else if (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcpstatic'])) { + $retvaldns = services_unbound_configure(); + if ($retvaldns == 0) + clear_subsystem_dirty('unbound'); + } else { + $retvaldhcp = services_dhcpd_configure(); + if ($retvaldhcp == 0) + clear_subsystem_dirty('staticmaps'); + } + if ($dhcpdv6_enable_changed) + $retvalfc = filter_configure(); + if($retvaldhcp == 1 || $retvaldns == 1 || $retvalfc == 1) + $retval = 1; + $savemsg = get_std_save_message($retval); + } +} + +if ($_GET['act'] == "del") { + if ($a_maps[$_GET['id']]) { + unset($a_maps[$_GET['id']]); + write_config(); + if(isset($config['dhcpdv6'][$if]['enable'])) { + mark_subsystem_dirty('staticmapsv6'); + if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstaticv6'])) + mark_subsystem_dirty('hosts'); + } + header("Location: services_dhcpv6.php?if={$if}"); + exit; + } +} + +$closehead = false; +$pgtitle = array(gettext("Services"),gettext("DHCPv6 server")); +$shortcut_section = "dhcp6"; + +include("head.inc"); + +?> + + + + + + + + + + +
                            + + +"; + echo ""; + exit; + } +?> +

                            +" . gettext("You must apply the changes in order for them to take effect."));?>
                            + + +
                            + $ifname) { + $oc = $config['interfaces'][$ifent]; + if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) || + (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) + continue; + if ($ifent == $if) + $active = true; + else + $active = false; + $tab_array[] = array($ifname, $active, "services_dhcpv6.php?if={$ifent}"); + $tabscounter++; + } + /* tack on PPPoE or PPtP servers here */ + /* pppoe server */ + if (is_array($config['pppoes']['pppoe'])) { + foreach($config['pppoes']['pppoe'] as $pppoe) { + if ($pppoe['mode'] == "server") { + $ifent = "poes". $pppoe['pppoeid']; + $ifname = strtoupper($ifent); + if ($ifent == $if) + $active = true; + else + $active = false; + $tab_array[] = array($ifname, $active, "services_dhcpv6.php?if={$ifent}"); + $tabscounter++; + } + } + } + if ($tabscounter == 0) { + echo "

                            "; + include("fend.inc"); + echo ""; + echo ""; + exit; + } + display_top_tabs($tab_array); +?> + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + onclick="enable_change(false);" /> +
                            + +
                            + bits +
                            + + - + +
                            + +
                            + +    +
                            + +    +  

                            + +
                            +
                            +
                            + +
                            +
                            + +
                            +
                            + +
                            + +
                            +
                            + +
                            + +
                            +
                            + +
                            + + + + + + + + + +
                            + /> + + + + +
                              + + +
                            +
                            +
                            + " /> - +
                            + +
                            +
                            + " /> - +
                            + +
                            +
                            + " /> - +
                            + +
                            +
                            + " /> - +
                            + +
                            +
                            + " /> - +
                            + + +
                              + + " onclick="enable_change(true)" /> +
                             


                            +
                            ,

                            +
                            +
                            +

                            +
                            + + + + + + + + + + + + + + + "" or $mapent['ipaddrv6'] <> ""): ?> + + + + + + + + + + + + + + +
                             
                            + + + + + +
                            add
                            +
                            + + +   + +   + +   + + + + + + +
                            edit')">delete
                            +
                            + + + + + +
                            add
                            +
                            +
                            + + + + + + + + diff --git a/usr/local/www/services_dhcpv6_edit.php b/usr/local/www/services_dhcpv6_edit.php new file mode 100644 index 000000000..99a8f7b85 --- /dev/null +++ b/usr/local/www/services_dhcpv6_edit.php @@ -0,0 +1,260 @@ +. + Copyright (C) 2011 Seth Mos . + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/sbin/arp + pfSense_MODULE: dhcpserver +*/ + +##|+PRIV +##|*IDENT=page-services-dhcpserverv6-editstaticmapping +##|*NAME=Services: DHCPv6 Server : Edit static mapping page +##|*DESCR=Allow access to the 'Services: DHCPv6 Server : Edit static mapping' page. +##|*MATCH=services_dhcpv6_edit.php* +##|-PRIV + +function staticmapcmp($a, $b) { + return ipcmp($a['ipaddrv6'], $b['ipaddrv6']); +} + +function staticmaps_sort($ifgui) { + global $g, $config; + + usort($config['dhcpdv6'][$ifgui]['staticmap'], "staticmapcmp"); +} + +require_once('globals.inc'); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_dhcpv6.php'); + +if(!$g['services_dhcp_server_enable']) { + header("Location: /"); + exit; +} + +require("guiconfig.inc"); + +$if = $_GET['if']; +if ($_POST['if']) + $if = $_POST['if']; + +if (!$if) { + header("Location: services_dhcpv6.php"); + exit; +} + +if (!is_array($config['dhcpdv6'])) + $config['dhcpdv6'] = array(); +if (!is_array($config['dhcpdv6'][$if])) + $config['dhcpdv6'][$if] = array(); +if (!is_array($config['dhcpdv6'][$if]['staticmap'])) + $config['dhcpdv6'][$if]['staticmap'] = array(); + +$netboot_enabled=isset($config['dhcpdv6'][$if]['netboot']); +$a_maps = &$config['dhcpdv6'][$if]['staticmap']; +$ifcfgipv6 = get_interface_ipv6($if); +$ifcfgsnv6 = get_interface_subnetv6($if); +$ifcfgdescr = convert_friendly_interface_to_friendly_descr($if); + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_maps[$id]) { + $pconfig['duid'] = $a_maps[$id]['duid']; + $pconfig['hostname'] = $a_maps[$id]['hostname']; + $pconfig['ipaddrv6'] = $a_maps[$id]['ipaddrv6']; + $pconfig['filename'] = $a_maps[$id]['filename']; + $pconfig['rootpath'] = $a_maps[$id]['rootpath']; + $pconfig['descr'] = $a_maps[$id]['descr']; +} else { + $pconfig['duid'] = $_GET['duid']; + $pconfig['hostname'] = $_GET['hostname']; + $pconfig['filename'] = $_GET['filename']; + $pconfig['rootpath'] = $a_maps[$id]['rootpath']; + $pconfig['descr'] = $_GET['descr']; +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "duid"); + $reqdfieldsn = array(gettext("DUID Identifier")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if ($_POST['hostname']) { + preg_match("/\-\$/", $_POST['hostname'], $matches); + if($matches) + $input_errors[] = gettext("The hostname cannot end with a hyphen according to RFC952"); + if (!is_hostname($_POST['hostname'])) { + $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'."); + } else { + if (strpos($_POST['hostname'],'.')) { + $input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted"); + } + } + } + if (($_POST['ipaddrv6'] && !is_ipaddrv6($_POST['ipaddrv6']))) { + $input_errors[] = gettext("A valid IPv6 address must be specified."); + } + if (empty($_POST['duid'])) { + $input_errors[] = gettext("A valid DUID Identifier must be specified."); + } + + /* check for overlaps */ + foreach ($a_maps as $mapent) { + if (isset($id) && ($a_maps[$id]) && ($a_maps[$id] === $mapent)) + continue; + + if ((($mapent['hostname'] == $_POST['hostname']) && $mapent['hostname']) || ($mapent['duid'] == $_POST['duid'])) { + $input_errors[] = gettext("This Hostname, IP or DUID Identifier already exists."); + break; + } + } + + /* make sure it's not within the dynamic subnet */ + if ($_POST['ipaddrv6']) { + /* oh boy, we need to be able to somehow do this at some point. skip */ + } + + if (!$input_errors) { + $mapent = array(); + $mapent['duid'] = $_POST['duid']; + $mapent['ipaddrv6'] = $_POST['ipaddrv6']; + $mapent['hostname'] = $_POST['hostname']; + $mapent['descr'] = $_POST['descr']; + $mapent['filename'] = $_POST['filename']; + $mapent['rootpath'] = $_POST['rootpath']; + + if (isset($id) && $a_maps[$id]) + $a_maps[$id] = $mapent; + else + $a_maps[] = $mapent; + staticmaps_sort($if); + + write_config(); + + if(isset($config['dhcpdv6'][$if]['enable'])) { + mark_subsystem_dirty('staticmaps'); + if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) + mark_subsystem_dirty('hosts'); + if (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcpstatic'])) + mark_subsystem_dirty('unbound'); + + } + + header("Location: services_dhcpv6.php?if={$if}"); + exit; + } +} + +$pgtitle = array(gettext("Services"),gettext("DHCPv6"),gettext("Edit static mapping")); +$shortcut_section = "dhcp6"; + +include("head.inc"); + +?> + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + +
                            +
                            +"DUID-LLT - ETH -- TIME --- ---- address ----"
                            +"xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
                            + +
                            + +
                            + +
                            + +
                            Netboot filename + +
                            Name of the file that should be loaded when this host boots off of the network, overrides setting on main page.
                            Root Path + +
                            -, overrides setting on main page.
                            + +
                              + " /> + " onclick="window.location.href=''" /> + + + + +
                            +
                            + + + diff --git a/usr/local/www/services_dhcpv6_relay.php b/usr/local/www/services_dhcpv6_relay.php new file mode 100644 index 000000000..900cdafce --- /dev/null +++ b/usr/local/www/services_dhcpv6_relay.php @@ -0,0 +1,208 @@ +. + Copyright (C) 2010 Ermal Luçi + Copyright (C) 2010 Seth Mos + 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. +*/ +/* + pfSense_MODULE: dhcpv6relay +*/ + +##|+PRIV +##|*IDENT=page-services-dhcpv6relay +##|*NAME=Services: DHCPv6 Relay page +##|*DESCR=Allow access to the 'Services: DHCPv6 Relay' page. +##|*MATCH=services_dhcpv6_relay.php* +##|-PRIV + +require("guiconfig.inc"); + +$pconfig['enable'] = isset($config['dhcrelay6']['enable']); +if (empty($config['dhcrelay6']['interface'])) + $pconfig['interface'] = array(); +else + $pconfig['interface'] = explode(",", $config['dhcrelay6']['interface']); +$pconfig['server'] = $config['dhcrelay6']['server']; +$pconfig['agentoption'] = isset($config['dhcrelay6']['agentoption']); + +$iflist = get_configured_interface_with_descr(); + +/* set the enabled flag which will tell us if DHCP server is enabled + * on any interface. We will use this to disable dhcp-relay since + * the two are not compatible with each other. + */ +$dhcpd_enabled = false; +if (is_array($config['dhcpdv6'])) { + foreach($config['dhcpdv6'] as $dhcp) + if (isset($dhcp['enable'])) + $dhcpd_enabled = true; +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + if ($_POST['enable']) { + $reqdfields = explode(" ", "server interface"); + $reqdfieldsn = array(gettext("Destination Server"), gettext("Interface")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if ($_POST['server']) { + $checksrv = explode(",", $_POST['server']); + foreach ($checksrv as $srv) { + if (!is_ipaddrv6($srv)) + $input_errors[] = gettext("A valid Destination Server IPv6 address must be specified."); + } + } + } + + if (!$input_errors) { + $config['dhcrelay6']['enable'] = $_POST['enable'] ? true : false; + $config['dhcrelay6']['interface'] = implode(",", $_POST['interface']); + $config['dhcrelay6']['agentoption'] = $_POST['agentoption'] ? true : false; + $config['dhcrelay6']['server'] = $_POST['server']; + + write_config(); + + $retval = 0; + $retval = services_dhcrelay6_configure(); + $savemsg = get_std_save_message($retval); + + } +} + +$closehead = false; +$pgtitle = array(gettext("Services"),gettext("DHCPv6 Relay")); +$shortcut_section = "dhcp6"; +include("head.inc"); + +?> + + + + + + +
                            + + + + + +
                            +
                            + + +DHCPv6 Server is currently enabled. Cannot enable the DHCPv6 Relay service while the DHCPv6 Server is enabled on any interface."; + echo "
                            "; + include("fend.inc"); + echo ""; + exit; + } +?> + + + + + Enable + + onclick="enable_change(false)" /> + + + + + Interface(s) + + +
                            + + + +   + + /> +
                            + + + + + + +
                            + + + + +   + + " onclick="enable_change(true)" /> + + + +
                            + + + + + + + + diff --git a/usr/local/www/services_dnsmasq.php b/usr/local/www/services_dnsmasq.php new file mode 100644 index 000000000..7733f0023 --- /dev/null +++ b/usr/local/www/services_dnsmasq.php @@ -0,0 +1,489 @@ + and Manuel Kasper . + 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. +*/ +/* + pfSense_MODULE: dnsforwarder +*/ + +##|+PRIV +##|*IDENT=page-services-dnsforwarder +##|*NAME=Services: DNS Forwarder page +##|*DESCR=Allow access to the 'Services: DNS Forwarder' page. +##|*MATCH=services_dnsmasq.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +$pconfig['enable'] = isset($config['dnsmasq']['enable']); +$pconfig['regdhcp'] = isset($config['dnsmasq']['regdhcp']); +$pconfig['regdhcpstatic'] = isset($config['dnsmasq']['regdhcpstatic']); +$pconfig['dhcpfirst'] = isset($config['dnsmasq']['dhcpfirst']); +$pconfig['strict_order'] = isset($config['dnsmasq']['strict_order']); +$pconfig['domain_needed'] = isset($config['dnsmasq']['domain_needed']); +$pconfig['no_private_reverse'] = isset($config['dnsmasq']['no_private_reverse']); +$pconfig['port'] = $config['dnsmasq']['port']; +$pconfig['custom_options'] = $config['dnsmasq']['custom_options']; + +$pconfig['strictbind'] = isset($config['dnsmasq']['strictbind']); +if (!empty($config['dnsmasq']['interface'])) + $pconfig['interface'] = explode(",", $config['dnsmasq']['interface']); +else + $pconfig['interface'] = array(); + +if (!is_array($config['dnsmasq']['hosts'])) + $config['dnsmasq']['hosts'] = array(); + +if (!is_array($config['dnsmasq']['domainoverrides'])) + $config['dnsmasq']['domainoverrides'] = array(); + + +$a_hosts = &$config['dnsmasq']['hosts']; +$a_domainOverrides = &$config['dnsmasq']['domainoverrides']; + +if ($_POST) { + + $pconfig = $_POST; + unset($input_errors); + + $config['dnsmasq']['enable'] = ($_POST['enable']) ? true : false; + $config['dnsmasq']['regdhcp'] = ($_POST['regdhcp']) ? true : false; + $config['dnsmasq']['regdhcpstatic'] = ($_POST['regdhcpstatic']) ? true : false; + $config['dnsmasq']['dhcpfirst'] = ($_POST['dhcpfirst']) ? true : false; + $config['dnsmasq']['strict_order'] = ($_POST['strict_order']) ? true : false; + $config['dnsmasq']['domain_needed'] = ($_POST['domain_needed']) ? true : false; + $config['dnsmasq']['no_private_reverse'] = ($_POST['no_private_reverse']) ? true : false; + $config['dnsmasq']['custom_options'] = str_replace("\r\n", "\n", $_POST['custom_options']); + $config['dnsmasq']['strictbind'] = ($_POST['strictbind']) ? true : false; + + if ($_POST['port']) + if(is_port($_POST['port'])) + $config['dnsmasq']['port'] = $_POST['port']; + else + $input_errors[] = gettext("You must specify a valid port number"); + else if (isset($config['dnsmasq']['port'])) + unset($config['dnsmasq']['port']); + + if (is_array($_POST['interface'])) + $config['dnsmasq']['interface'] = implode(",", $_POST['interface']); + elseif (isset($config['dnsmasq']['interface'])) + unset($config['dnsmasq']['interface']); + + if ($config['dnsmasq']['custom_options']) { + $args = ''; + foreach (preg_split('/\s+/', $config['dnsmasq']['custom_options']) as $c) + $args .= escapeshellarg("--{$c}") . " "; + exec("/usr/local/sbin/dnsmasq --test $args", $output, $rc); + if ($rc != 0) + $input_errors[] = gettext("Invalid custom options"); + } + + if (!$input_errors) { + write_config(); + + $retval = 0; + $retval = services_dnsmasq_configure(); + $savemsg = get_std_save_message($retval); + + // Relaod filter (we might need to sync to CARP hosts) + filter_configure(); + /* Update resolv.conf in case the interface bindings exclude localhost. */ + system_resolvconf_generate(); + + if ($retval == 0) + clear_subsystem_dirty('hosts'); + } +} + +if ($_GET['act'] == "del") { + if ($_GET['type'] == 'host') { + if ($a_hosts[$_GET['id']]) { + unset($a_hosts[$_GET['id']]); + write_config(); + mark_subsystem_dirty('hosts'); + header("Location: services_dnsmasq.php"); + exit; + } + } + elseif ($_GET['type'] == 'doverride') { + if ($a_domainOverrides[$_GET['id']]) { + unset($a_domainOverrides[$_GET['id']]); + write_config(); + mark_subsystem_dirty('hosts'); + header("Location: services_dnsmasq.php"); + exit; + } + } +} + +$closehead = false; +$pgtitle = array(gettext("Services"),gettext("DNS forwarder")); +$shortcut_section = "resolver"; +include("head.inc"); + +?> + + + + + +
                            + + +
                            +" . gettext("You must apply the changes in order for them to take effect."));?>
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

                            + onclick="enable_change(false)" /> +
                            +

                            + /> +
                            +
                            ','')?>

                            +

                            + /> +
                            +
                            ','');?>

                            +

                            + /> +
                            +

                            +

                            + /> +
                            +
                            System - General Setup - DNS Servers), ". + "rather than all at once in parallel. ". + ""), $g['product_name']); ?>

                            +

                            + /> +
                            +

                            +

                            + /> +
                            +

                            +

                            + /> +

                            +

                            +
                            + + +

                            + +

                            +

                            + /> + +
                            + +

                            + +

                            +
                            +
                            > + " /> - +
                            +
                            > +
                            +
                            +
                            +
                            +
                            + " onclick="enable_change(true)" /> +
                            + +


                            +
                            ','','','');?>
                            +

                            + + 
                            + + + + + + + +

                            + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + + + + +
                            add
                            +
                            + + + + + +
                            add
                            +
                            +   + +   + +   + +   + + + + + + +
                            edit')">delete
                            +
                            +   + +   + + Alias for   + +   + + edit +
                            +
                            + + + + + + + +

                            + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + + + + +
                            add
                            +
                            + + + + + +
                            add
                            +
                            +   + +   + +   + edit +  ')">delete
                            +
                            + + + + diff --git a/usr/local/www/services_dnsmasq_domainoverride_edit.php b/usr/local/www/services_dnsmasq_domainoverride_edit.php new file mode 100644 index 000000000..a1a74ae7e --- /dev/null +++ b/usr/local/www/services_dnsmasq_domainoverride_edit.php @@ -0,0 +1,174 @@ + and Manuel Kasper . + 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. +*/ +/* + pfSense_MODULE: dnsforwarder +*/ + +##|+PRIV +##|*IDENT=page-services-dnsforwarder-editdomainoverride +##|*NAME=Services: DNS Forwarder: Edit Domain Override page +##|*DESCR=Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page. +##|*MATCH=services_dnsmasq_domainoverride_edit.php* +##|-PRIV + +require("guiconfig.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_dnsmasq.php'); + +if (!is_array($config['dnsmasq']['domainoverrides'])) { + $config['dnsmasq']['domainoverrides'] = array(); +} +$a_domainOverrides = &$config['dnsmasq']['domainoverrides']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_domainOverrides[$id]) { + $pconfig['domain'] = $a_domainOverrides[$id]['domain']; + if (is_ipaddr($a_domainOverrides[$id]['ip']) && ($a_domainOverrides[$id]['ip'] != '#')) { + $pconfig['ip'] = $a_domainOverrides[$id]['ip']; + } + else { + $dnsmasqpieces = explode('@', $a_domainOverrides[$id]['ip'], 2); + $pconfig['ip'] = $dnsmasqpieces[0]; + $pconfig['dnssrcip'] = $dnsmasqpieces[1]; + } + $pconfig['descr'] = $a_domainOverrides[$id]['descr']; +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "domain ip"); + $reqdfieldsn = array(gettext("Domain"),gettext("IP address")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + function String_Begins_With($needle, $haystack) { + return (substr($haystack, 0, strlen($needle))==$needle); + } + + if (String_Begins_With(_msdcs, $_POST['domain'])) { + $subdomainstr = substr($_POST['domain'], 7); + if ($subdomainstr && !is_domain($subdomainstr)) { + $input_errors[] = gettext("A valid domain must be specified after _msdcs."); + } + } + elseif ($_POST['domain'] && !is_domain($_POST['domain'])) { + $input_errors[] = gettext("A valid domain must be specified."); + } + if ($_POST['ip'] && !is_ipaddr($_POST['ip']) && ($_POST['ip'] != '#') && ($_POST['ip'] != '!')) { + $input_errors[] = gettext("A valid IP address must be specified, or # for an exclusion or ! to not forward at all."); + } + if ($_POST['dnssrcip'] && !in_array($_POST['dnssrcip'], get_configured_ip_addresses())) { + $input_errors[] = gettext("An interface IP address must be specified for the DNS query source."); + } + if (!$input_errors) { + $doment = array(); + $doment['domain'] = $_POST['domain']; + if (empty($_POST['dnssrcip'])) + $doment['ip'] = $_POST['ip']; + else + $doment['ip'] = $_POST['ip'] . "@" . $_POST['dnssrcip']; + $doment['descr'] = $_POST['descr']; + + if (isset($id) && $a_domainOverrides[$id]) + $a_domainOverrides[$id] = $doment; + else + $a_domainOverrides[] = $doment; + + $retval = services_dnsmasq_configure(); + + write_config(); + + header("Location: services_dnsmasq.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"),gettext("DNS forwarder"),gettext("Edit Domain Override")); +$shortcut_section = "resolver"; +include("head.inc"); + +?> + + + + +
                            + + + + + + + + + + + + + + + + + + + + + +
                            + +

                            + mycompany.localdomain 1.168.192.in-addr.arpa
                            + +

                            + 192.168.100.100

                            + +

                            +
                            + +
                              + " /> + " onclick="window.location.href=''" /> + + + +
                            +
                            + + + diff --git a/usr/local/www/services_dnsmasq_edit.php b/usr/local/www/services_dnsmasq_edit.php new file mode 100644 index 000000000..2c3ab5f85 --- /dev/null +++ b/usr/local/www/services_dnsmasq_edit.php @@ -0,0 +1,303 @@ + and Manuel Kasper . + 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. +*/ +/* + pfSense_MODULE: dnsforwarder +*/ + +##|+PRIV +##|*IDENT=page-services-dnsforwarder-edithost +##|*NAME=Services: DNS Forwarder: Edit host page +##|*DESCR=Allow access to the 'Services: DNS Forwarder: Edit host' page. +##|*MATCH=services_dnsmasq_edit.php* +##|-PRIV + +function hostcmp($a, $b) { + return strcasecmp($a['host'], $b['host']); +} + +function hosts_sort() { + global $g, $config; + + if (!is_array($config['dnsmasq']['hosts'])) + return; + + usort($config['dnsmasq']['hosts'], "hostcmp"); +} + +require("guiconfig.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_dnsmasq.php'); + +if (!is_array($config['dnsmasq']['hosts'])) + $config['dnsmasq']['hosts'] = array(); + +$a_hosts = &$config['dnsmasq']['hosts']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_hosts[$id]) { + $pconfig['host'] = $a_hosts[$id]['host']; + $pconfig['domain'] = $a_hosts[$id]['domain']; + $pconfig['ip'] = $a_hosts[$id]['ip']; + $pconfig['descr'] = $a_hosts[$id]['descr']; + $pconfig['aliases'] = $a_hosts[$id]['aliases']; +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "domain ip"); + $reqdfieldsn = array(gettext("Domain"),gettext("IP address")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (($_POST['host'] && !is_hostname($_POST['host']))) + $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'."); + + if (($_POST['domain'] && !is_domain($_POST['domain']))) + $input_errors[] = gettext("A valid domain must be specified."); + + if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) + $input_errors[] = gettext("A valid IP address must be specified."); + + /* collect aliases */ + $aliases = array(); + foreach ($_POST as $key => $value) { + $entry = ''; + if (!substr_compare('aliashost', $key, 0, 9)) { + $entry = substr($key, 9); + $field = 'host'; + } + elseif (!substr_compare('aliasdomain', $key, 0, 11)) { + $entry = substr($key, 11); + $field = 'domain'; + } + elseif (!substr_compare('aliasdescription', $key, 0, 16)) { + $entry = substr($key, 16); + $field = 'description'; + } + if (ctype_digit($entry)) { + $aliases[$entry][$field] = $value; + } + } + $pconfig['aliases']['item'] = $aliases; + + /* validate aliases */ + foreach ($aliases as $idx => $alias) { + $aliasreqdfields = array('aliasdomain' . $idx); + $aliasreqdfieldsn = array(gettext("Alias Domain")); + + var_dump(array('fields' => $aliasreqdfields, 'names' => $aliasreqdfieldsn, 'alias' => $alias)); + do_input_validation($_POST, $aliasreqdfields, $aliasreqdfieldsn, $input_errors); + if (($alias['host'] && !is_hostname($alias['host']))) { + $input_errors[] = gettext("Hostnames in alias list can only contain the characters A-Z, 0-9 and '-'."); + } + if (($alias['domain'] && !is_domain($alias['domain']))) { + $input_errors[] = gettext("A valid domain must be specified in alias list."); + } + } + + /* check for overlaps */ + foreach ($a_hosts as $hostent) { + if (isset($id) && ($a_hosts[$id]) && ($a_hosts[$id] === $hostent)) + continue; + + if (($hostent['host'] == $_POST['host']) && ($hostent['domain'] == $_POST['domain']) + && ((is_ipaddrv4($hostent['ip']) && is_ipaddrv4($_POST['ip'])) || (is_ipaddrv6($hostent['ip']) && is_ipaddrv6($_POST['ip'])))) { + $input_errors[] = gettext("This host/domain already exists."); + break; + } + } + + if (!$input_errors) { + $hostent = array(); + $hostent['host'] = $_POST['host']; + $hostent['domain'] = $_POST['domain']; + $hostent['ip'] = $_POST['ip']; + $hostent['descr'] = $_POST['descr']; + $hostent['aliases']['item'] = $aliases; + + if (isset($id) && $a_hosts[$id]) + $a_hosts[$id] = $hostent; + else + $a_hosts[] = $hostent; + hosts_sort(); + + mark_subsystem_dirty('hosts'); + + write_config(); + + header("Location: services_dnsmasq.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"),gettext("DNS forwarder"),gettext("Edit host")); +$shortcut_section = "resolver"; +include("head.inc"); + +?> + +"> + + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + +

                            +
                            + +

                            +
                            + +

                            + 192.168.100.100 fd00:abcd::1
                            + +
                            + + + + + + + + + + + + + + + + + + + +
                            +
                            + +
                            +
                            + + + + + + + " /> +
                            + + " /> + + +
                              + " /> + " onclick="window.location.href=''" /> + + + +
                            +
                            + + + diff --git a/usr/local/www/services_dyndns.php b/usr/local/www/services_dyndns.php new file mode 100644 index 000000000..10b8dbe7d --- /dev/null +++ b/usr/local/www/services_dyndns.php @@ -0,0 +1,203 @@ + + + + +
                            + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + $ifdesc) { + if ($dyndns['interface'] == $if) { + if (!isset($dyndns['enable'])) + echo "{$ifdesc}"; + else + echo "{$ifdesc}"; + break; + } + } + $groupslist = return_gateway_groups_array(); + foreach ($groupslist as $if => $group) { + if ($dyndns['interface'] == $if) { + if (!isset($dyndns['enable'])) + echo "{$if}"; + else + echo "{$if}"; + break; + } + } + ?> + + " . htmlspecialchars($types[$j]) . ""; + else + echo htmlspecialchars($types[$j]); + break; + } + ?> + + " . htmlspecialchars($dyndns['host']) . ""; + else + echo htmlspecialchars($dyndns['host']); + ?> + + $cached_ip) + echo ""; + else + echo ""; + echo htmlspecialchars($cached_ip); + echo ""; + } else if (file_exists($filename_v6)) { + $ipv6addr = get_interface_ipv6($dyndns['interface']); + $cached_ipv6_s = explode("|", file_get_contents($filename_v6)); + $cached_ipv6 = $cached_ipv6_s[0]; + if ($ipv6addr <> $cached_ipv6) + echo ""; + else + echo ""; + echo htmlspecialchars($cached_ipv6); + echo ""; + } else { + echo "N/A"; + } + ?> + + ".htmlspecialchars($dyndns['descr']).""; + else + echo htmlspecialchars($dyndns['descr']); + ?> + + edit +  ')">delete +
                            add

                            +
                            +
                            +
                            +

                            +
                             
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/services_dyndns_edit.php b/usr/local/www/services_dyndns_edit.php new file mode 100644 index 000000000..620e06b65 --- /dev/null +++ b/usr/local/www/services_dyndns_edit.php @@ -0,0 +1,448 @@ + + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + +
                            +
                            + " /> +
                            +
                            + +
                            + +
                            +
                            + +
                            + +
                            +
                            +
                            + +
                            +
                            + +
                            + +
                            +
                            + /> +
                            + /> +
                            + /> +
                            + /> + +
                            + +
                            +
                            +
                            +
                            + +
                            + +
                            +
                            + +
                            +
                            + +
                            + +
                            +
                            + +
                            + +
                            + +
                            + +
                            + +
                              + " onclick="enable_change(true)" /> + " /> + + + " onclick="enable_change(true)" /> + +
                             
                            +
                            ','');?>
                            +
                            + + + + + + diff --git a/usr/local/www/services_igmpproxy.php b/usr/local/www/services_igmpproxy.php new file mode 100644 index 000000000..aa207f659 --- /dev/null +++ b/usr/local/www/services_igmpproxy.php @@ -0,0 +1,167 @@ +. + 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. +*/ +/* + pfSense_MODULE: dyndns +*/ + +##|+PRIV +##|*IDENT=page-services-igmpproxy +##|*NAME=Services: Igmpproxy page +##|*DESCR=Allow access to the 'Services: Igmpproxy' page. +##|*MATCH=services_igmpproxy.php* +##|-PRIV + +require("guiconfig.inc"); + +if (!is_array($config['igmpproxy']['igmpentry'])) + $config['igmpproxy']['igmpentry'] = array(); + +//igmpproxy_sort(); +$a_igmpproxy = &$config['igmpproxy']['igmpentry']; + +if ($_POST) { + + $pconfig = $_POST; + + $retval = 0; + /* reload all components that use igmpproxy */ + $retval = services_igmpproxy_configure(); + + if(stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + + clear_subsystem_dirty('igmpproxy'); +} + +if ($_GET['act'] == "del") { + if ($a_igmpproxy[$_GET['id']]) { + unset($a_igmpproxy[$_GET['id']]); + write_config(); + mark_subsystem_dirty('igmpproxy'); + header("Location: services_igmpproxy.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"),gettext("IGMP Proxy")); +include("head.inc"); + +?> + + + +
                            + +
                            +" . gettext("You must apply the changes in order for them to take effect."));?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + + + + +
                             " alt="add" />
                            +
                            + + + + + + +   + + + + + + +
                            " alt="edit" />')">" alt="delete" />
                            +
                            + + + + + +
                             " alt="add" />
                            +
                            +
                            + " /> +
                            +
                            +


                            +
                            +
                            + + + diff --git a/usr/local/www/services_igmpproxy_edit.php b/usr/local/www/services_igmpproxy_edit.php new file mode 100644 index 000000000..b48f64bc4 --- /dev/null +++ b/usr/local/www/services_igmpproxy_edit.php @@ -0,0 +1,303 @@ +. + 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. +*/ +/* + pfSense_MODULE: igmpproxy +*/ + +##|+PRIV +##|*IDENT=page-services-igmpproxy-edit +##|*NAME=Firewall: Igmpproxy: Edit page +##|*DESCR=Allow access to the 'Services: Igmpproxy: Edit' page. +##|*MATCH=services_igmpproxy_edit.php* +##|-PRIV + +$pgtitle = array(gettext("Firewall"),gettext("IGMP Proxy"), gettext("Edit")); + +require("guiconfig.inc"); + +if (!is_array($config['igmpproxy']['igmpentry'])) + $config['igmpproxy']['igmpentry'] = array(); + +//igmpproxy_sort(); +$a_igmpproxy = &$config['igmpproxy']['igmpentry']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_igmpproxy[$id]) { + $pconfig['ifname'] = $a_igmpproxy[$id]['ifname']; + $pconfig['threshold'] = $a_igmpproxy[$id]['threshold']; + $pconfig['type'] = $a_igmpproxy[$id]['type']; + $pconfig['address'] = $a_igmpproxy[$id]['address']; + $pconfig['descr'] = html_entity_decode($a_igmpproxy[$id]['descr']); + +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + if ($_POST['type'] == "upstream") { + foreach ($a_igmpproxy as $pid => $proxyentry) { + if (isset($id) && $id == $pid) + continue; + if ($proxyentry['type'] == "upstream" && $proxyentry['ifname'] != $_POST['interface']) + $input_errors[] = gettext("Only one 'upstream' interface can be configured."); + } + } + $igmpentry = array(); + $igmpentry['ifname'] = $_POST['ifname']; + $igmpentry['threshold'] = $_POST['threshold']; + $igmpentry['type'] = $_POST['type']; + $address = ""; + $isfirst = 0; + /* item is a normal igmpentry type */ + for($x=0; $x<4999; $x++) { + if($_POST["address{$x}"] <> "") { + if ($isfirst > 0) + $address .= " "; + $address .= $_POST["address{$x}"]; + $address .= "/" . $_POST["address_subnet{$x}"]; + $isfirst++; + } + } + + if (!$input_errors) { + $igmpentry['address'] = $address; + $igmpentry['descr'] = $_POST['descr']; + + if (isset($id) && $a_igmpproxy[$id]) + $a_igmpproxy[$id] = $igmpentry; + else + $a_igmpproxy[] = $igmpentry; + + write_config(); + + mark_subsystem_dirty('igmpproxy'); + header("Location: services_igmpproxy.php"); + exit; + } + //we received input errors, copy data to prevent retype + else + { + $pconfig['descr'] = $_POST['descr']; + $pconfig['address'] = $address; + $pconfig['type'] = $_POST['type']; + } +} + +include("head.inc"); + +?> + +"> + + + + + + + + + + + +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +
                            + +
                            + + + +
                            + +
                            + + upstream network interface is the outgoing interface which is". + " responsible for communicating to available multicast data sources.". + " There can only be one upstream interface.");?> + +
                            + + + +
                            + +
                            + + + +
                            + + + + + + + + "") { + $item = explode(" ", $address); + foreach($item as $ww) { + $address = $item[$counter]; + $address_subnet = ""; + $item2 = explode("/", $address); + foreach($item2 as $current) { + if($item2[1] <> "") { + $address = $item2[0]; + $address_subnet = $item2[1]; + } + } + $item4 = $item3[$counter]; + $tracker = $counter; + ?> + + + + + + + +
                            + + + + + delete +
                            + + add" /> + +
                              + " /> + " /> + + + +
                            +
                            + + + + + + diff --git a/usr/local/www/services_ntpd.php b/usr/local/www/services_ntpd.php new file mode 100644 index 000000000..f49fde39a --- /dev/null +++ b/usr/local/www/services_ntpd.php @@ -0,0 +1,418 @@ + + + + + + + +
                            + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            Interface(s) + $carpip) + $interfaces[$cif] = $carpip." (".get_vip_descr($carpip).")"; + $aliaslist = get_configured_ip_aliases_list(); + foreach ($aliaslist as $aliasip => $aliasif) + $interfaces[$aliasip] = $aliasip." (".get_vip_descr($aliasip).")"; + $size = (count($interfaces) < 10) ? count($interfaces) : 10; +?> + +
                            +
                            +
                            +
                            +
                            +
                            Time servers + \n"; + + echo " "; + echo "\n prefer "; + echo "\n noselect\n
                            \n\n"; + } + ?> +
                            + " onclick="NewTimeServer()" alt="add" /> +
                            +
                            + +
                            + prefer option indicates that NTP should favor the use of this server more than all others.'); ?> +
                            + noselect option indicates that NTP should not use this server for time, but stats for this server will be collected and displayed.'); ?> +
                            Orphan mode +
                            + +
                            NTP graphs + /> + +
                            Syslog logging + ( System Logs > NTP"); ?>). +

                            + /> + +
                            + /> + +
                            Statistics logging +
                            + " /> - +
                            + +
                            Access restrictions +
                            + " /> - +
                            + +
                            Leap seconds +
                            + " /> - +
                            + +
                              + " /> +
                            +
                            +
                            + + + diff --git a/usr/local/www/services_ntpd_gps.php b/usr/local/www/services_ntpd_gps.php new file mode 100644 index 000000000..76bd9d5c2 --- /dev/null +++ b/usr/local/www/services_ntpd_gps.php @@ -0,0 +1,588 @@ + + + + + + +
                            + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + A GPS connected via a serial port may be used as a reference clock for NTP. If the GPS also supports PPS and is properly configured, and connected, that GPS may also be used as a Pulse Per Second clock reference. NOTE: a USB GPS may work, but is not recommended due to USB bus timing issues. +
                            +
                            NTP"); ?> +
                            + + +
                            +
                            + +
                            + +
                            Serial port +   + +

                            +   +
                            +
                            + +
                            NMEA sentences +
                            + +
                            Fudge time 1 + ()
                            + (: 0.0).
                            Fudge time 2 + ()
                            + (: 0.0).
                            Stratum +
                            + (: 0).
                            Flags + + + + +
                            +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + /> + + +
                            + /> + + +
                            + /> + + +
                            + /> + + +
                            + /> + + +
                            + /> + + +
                            + /> + + Note: enabling this will rapidly fill the log, but is useful for tuning Fudge time 2."); ?> +
                            +
                            Clock ID +
                            + (: GPS).
                            GPS Initialization +
                            + " /> - +
                            + +
                              + " /> +
                            +
                            +
                            + +
                            + + + diff --git a/usr/local/www/services_ntpd_pps.php b/usr/local/www/services_ntpd_pps.php new file mode 100644 index 000000000..9808fd2e2 --- /dev/null +++ b/usr/local/www/services_ntpd_pps.php @@ -0,0 +1,227 @@ + + + + +
                            + + + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + + +
                            +
                            : NTP"); ?> +
                            Serial port +   + +
                            Fudge time + ()
                            + (: 0.0).
                            Stratum +
                            + (: 0).
                            Flags + + + + +
                            +
                            +
                            + + + + + + + + + + + + + +
                            + /> + + +
                            + /> + + +
                            + /> + + +
                            +
                            Clock ID +
                            + (: PPS).
                              + " /> +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/services_rfc2136.php b/usr/local/www/services_rfc2136.php new file mode 100644 index 000000000..fb38005dd --- /dev/null +++ b/usr/local/www/services_rfc2136.php @@ -0,0 +1,187 @@ + + + + +
                            + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + $ifdesc) { + if ($rfc2136['interface'] == $if) { + if (!isset($rfc2136['enable'])) + echo "{$ifdesc}"; + else + echo "{$ifdesc}"; + break; + } + } + ?> + + " . htmlspecialchars($rfc2136['server']) . ""; + else + echo htmlspecialchars($rfc2136['server']); + ?> + + " . htmlspecialchars($rfc2136['host']) . ""; + else + echo htmlspecialchars($rfc2136['host']); + ?> + + $cached_ip) + echo ""; + else + echo ""; + echo htmlspecialchars($cached_ip); + echo ""; + } else { + echo "IPv4: N/A"; + } + echo "
                            "; + if (file_exists("{$filename}.ipv6")) { + echo "IPv6: "; + $ipaddr = get_interface_ipv6($rfc2136['interface']); + $cached_ip_s = explode("|", file_get_contents("{$filename}.ipv6")); + $cached_ip = $cached_ip_s[0]; + if ($ipaddr <> $cached_ip) + echo ""; + else + echo ""; + echo htmlspecialchars($cached_ip); + echo ""; + } else { + echo "IPv6: N/A"; + } + ?> +
                            + " . htmlspecialchars($rfc2136['descr']) . ""; + else + echo htmlspecialchars($rfc2136['descr']); + ?> + + edit +  ')">delete +
                             add
                            +


                            +
                             
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/services_rfc2136_edit.php b/usr/local/www/services_rfc2136_edit.php new file mode 100644 index 000000000..6489cf6dc --- /dev/null +++ b/usr/local/www/services_rfc2136_edit.php @@ -0,0 +1,232 @@ + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + +
                            +
                            + /> +
                            + +
                            + +
                            Fully qualified hostname of the host to be updated +
                            + +
                            + +
                            +
                            + />   + />   + /> +
                            + +
                            +
                            + +
                            + " /> +
                            + " /> + +
                            + +
                              + " onclick="enable_change(true)" /> + " /> + " onclick="enable_change(true)" /> + + + +
                             
                            +
                            ', '');?>
                            +
                            + + + diff --git a/usr/local/www/services_router_advertisements.php b/usr/local/www/services_router_advertisements.php new file mode 100644 index 000000000..6686052b4 --- /dev/null +++ b/usr/local/www/services_router_advertisements.php @@ -0,0 +1,443 @@ +. + All rights reserved. + + part of pfSense (https://www.pfsense.org) + Copyright (C) 2010 Seth Mos . + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /bin/rm + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-services-router-advertisements +##|*NAME=Services: Router advertisementspage +##|*DESCR=Allow access to the 'Services: Router Advertisements' page. +##|*MATCH=services_router_advertisements.php* +##|-PRIV + +require("guiconfig.inc"); + +if(!$g['services_dhcp_server_enable']) { + header("Location: /"); + exit; +} + +/* Fix failover DHCP problem + * http://article.gmane.org/gmane.comp.security.firewalls.pfsense.support/18749 + */ +ini_set("memory_limit","64M"); + +$if = $_GET['if']; +if ($_POST['if']) + $if = $_POST['if']; + +/* if OLSRD is enabled, allow WAN to house DHCP. */ +if($config['installedpackages']['olsrd']) { + foreach($config['installedpackages']['olsrd']['config'] as $olsrd) { + if($olsrd['enable']) { + $is_olsr_enabled = true; + break; + } + } +} + +if (!$_GET['if']) + $savemsg = "

                            " . gettext("The DHCPv6 Server can only be enabled on interfaces configured with static IP addresses") . ".

                            " . + "

                            " . gettext("Only interfaces configured with a static IP will be shown") . ".

                            "; + +$iflist = get_configured_interface_with_descr(); + +/* set the starting interface */ +if (!$if || !isset($iflist[$if])) { + foreach ($iflist as $ifent => $ifname) { + $oc = $config['interfaces'][$ifent]; + if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) || + (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) + continue; + $if = $ifent; + break; + } +} + +if (is_array($config['dhcpdv6'][$if])) { + /* RA specific */ + $pconfig['ramode'] = $config['dhcpdv6'][$if]['ramode']; + $pconfig['rapriority'] = $config['dhcpdv6'][$if]['rapriority']; + if($pconfig['rapriority'] == "") + $pconfig['rapriority'] = "medium"; + $pconfig['rainterface'] = $config['dhcpdv6'][$if]['rainterface']; + $pconfig['radomainsearchlist'] = $config['dhcpdv6'][$if]['radomainsearchlist']; + list($pconfig['radns1'],$pconfig['radns2']) = $config['dhcpdv6'][$if]['radnsserver']; + $pconfig['rasamednsasdhcp6'] = isset($config['dhcpdv6'][$if]['rasamednsasdhcp6']); + + $pconfig['subnets'] = $config['dhcpdv6'][$if]['subnets']['item']; +} +if (!is_array($pconfig['subnets'])) + $pconfig['subnets'] = array(); + +$advertise_modes = array("disabled" => "Disabled", + "router" => "Router Only", + "unmanaged" => "Unmanaged", + "managed" => "Managed", + "assist" => "Assisted"); +$priority_modes = array("low" => "Low", + "medium" => "Normal", + "high" => "High"); +$carplist = get_configured_carp_interface_list(); + +$subnets_help = gettext("Subnets are specified in CIDR format. " . + "Select the CIDR mask that pertains to each entry. " . + "/128 specifies a single IPv6 host; /64 specifies a normal IPv6 network; etc. " . + "If no subnets are specified here, the Router Advertisement (RA) Daemon will advertise to the subnet to which the router's interface is assigned."); + +if ($_POST) { + unset($input_errors); + + $pconfig = $_POST; + + /* input validation */ + + $pconfig['subnets'] = array(); + for ($x = 0; $x < 5000; $x += 1) { + $address = trim($_POST['subnet_address' . $x]); + if ($address === "") + continue; + + $bits = trim($_POST['subnet_bits' . $x]); + if ($bits === "") + $bits = "128"; + + if (is_alias($address)) { + $pconfig['subnets'][] = $address; + } else { + $pconfig['subnets'][] = $address . "/" . $bits; + if (!is_ipaddrv6($address)) + $input_errors[] = sprintf(gettext("An invalid subnet or alias was specified. [%s/%s]"), $address, $bits); + } + } + + if (($_POST['radns1'] && !is_ipaddrv6($_POST['radns1'])) || ($_POST['radns2'] && !is_ipaddrv6($_POST['radns2']))) + $input_errors[] = gettext("A valid IPv6 address must be specified for the primary/secondary DNS servers."); + if ($_POST['radomainsearchlist']) { + $domain_array=preg_split("/[ ;]+/",$_POST['radomainsearchlist']); + foreach ($domain_array as $curdomain) { + if (!is_domain($curdomain)) { + $input_errors[] = gettext("A valid domain search list must be specified."); + break; + } + } + } + + if (!$input_errors) { + if (!is_array($config['dhcpdv6'][$if])) + $config['dhcpdv6'][$if] = array(); + + $config['dhcpdv6'][$if]['ramode'] = $_POST['ramode']; + $config['dhcpdv6'][$if]['rapriority'] = $_POST['rapriority']; + $config['dhcpdv6'][$if]['rainterface'] = $_POST['rainterface']; + + $config['dhcpdv6'][$if]['radomainsearchlist'] = $_POST['radomainsearchlist']; + unset($config['dhcpdv6'][$if]['radnsserver']); + if ($_POST['radns1']) + $config['dhcpdv6'][$if]['radnsserver'][] = $_POST['radns1']; + if ($_POST['radns2']) + $config['dhcpdv6'][$if]['radnsserver'][] = $_POST['radns2']; + + $config['dhcpdv6'][$if]['rasamednsasdhcp6'] = ($_POST['rasamednsasdhcp6']) ? true : false; + + if (count($pconfig['subnets'])) { + $config['dhcpdv6'][$if]['subnets']['item'] = $pconfig['subnets']; + } else { + unset($config['dhcpdv6'][$if]['subnets']); + } + + write_config(); + $retval = services_radvd_configure(); + $savemsg = get_std_save_message($retval); + } +} + +$pgtitle = array(gettext("Services"),gettext("Router advertisements")); + +include("head.inc"); + +?> + + + + + + + + + +
                            + + + +
                            + $ifname) { + $oc = $config['interfaces'][$ifent]; + if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) || + (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) + continue; + if ($ifent == $if) + $active = true; + else + $active = false; + $tab_array[] = array($ifname, $active, "services_dhcpv6.php?if={$ifent}"); + $tabscounter++; + } + if ($tabscounter == 0) { + echo "
                            "; + include("fend.inc"); + echo ""; + echo ""; + exit; + } + display_top_tabs($tab_array); +?> + + + + + + +
                            + + + + + + + + + + 0) { + foreach($carplist as $ifname => $vip) { + if((preg_match("/^{$if}_/", $ifname)) && (is_ipaddrv6($vip))) + $carplistif[$ifname] = $vip; + } + } + if(count($carplistif) > 0) { + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +
                            + + + +
                            +
                            + +
                            +
                            + +
                            +
                            + + + + + + + + + + + +
                            + + + + + " /> +
                            + +
                            + " /> +
                            +
                             
                            DNS
                            +
                            +
                            + +
                            +
                            + +
                              + /> + +
                              + + " /> +
                            +
                            + + + + + + + + + + diff --git a/usr/local/www/services_snmp.php b/usr/local/www/services_snmp.php new file mode 100644 index 000000000..02e503e3e --- /dev/null +++ b/usr/local/www/services_snmp.php @@ -0,0 +1,446 @@ +. + 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. +*/ +/* + pfSense_MODULE: snmp +*/ + +##|+PRIV +##|*IDENT=page-services-snmp +##|*NAME=Services: SNMP page +##|*DESCR=Allow access to the 'Services: SNMP' page. +##|*MATCH=services_snmp.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); + +if (!is_array($config['snmpd'])) { + $config['snmpd'] = array(); + $config['snmpd']['rocommunity'] = "public"; + $config['snmpd']['pollport'] = "161"; +} + +if (!is_array($config['snmpd']['modules'])) { + $config['snmpd']['modules'] = array(); + $config['snmpd']['modules']['mibii'] = true; + $config['snmpd']['modules']['netgraph'] = true; + $config['snmpd']['modules']['pf'] = true; + $config['snmpd']['modules']['hostres'] = true; + $config['snmpd']['modules']['bridge'] = true; + $config['snmpd']['modules']['ucd'] = true; + $config['snmpd']['modules']['regex'] = true; +} +$pconfig['enable'] = isset($config['snmpd']['enable']); +$pconfig['pollport'] = $config['snmpd']['pollport']; +$pconfig['syslocation'] = $config['snmpd']['syslocation']; +$pconfig['syscontact'] = $config['snmpd']['syscontact']; +$pconfig['rocommunity'] = $config['snmpd']['rocommunity']; +/* disabled until some docs show up on what this does. +$pconfig['rwenable'] = isset($config['snmpd']['rwenable']); +$pconfig['rwcommunity'] = $config['snmpd']['rwcommunity']; +*/ +$pconfig['trapenable'] = isset($config['snmpd']['trapenable']); +$pconfig['trapserver'] = $config['snmpd']['trapserver']; +$pconfig['trapserverport'] = $config['snmpd']['trapserverport']; +$pconfig['trapstring'] = $config['snmpd']['trapstring']; + +$pconfig['mibii'] = isset($config['snmpd']['modules']['mibii']); +$pconfig['netgraph'] = isset($config['snmpd']['modules']['netgraph']); +$pconfig['pf'] = isset($config['snmpd']['modules']['pf']); +$pconfig['hostres'] = isset($config['snmpd']['modules']['hostres']); +$pconfig['bridge'] = isset($config['snmpd']['modules']['bridge']); +$pconfig['ucd'] = isset($config['snmpd']['modules']['ucd']); +$pconfig['regex'] = isset($config['snmpd']['modules']['regex']); +$pconfig['bindip'] = $config['snmpd']['bindip']; + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + if ($_POST['enable']) { + if (strstr($_POST['syslocation'],"#")) $input_errors[] = gettext("Invalid character '#' in system location"); + if (strstr($_POST['syscontact'],"#")) $input_errors[] = gettext("Invalid character '#' in system contact"); + if (strstr($_POST['rocommunity'],"#")) $input_errors[] = gettext("Invalid character '#' in read community string"); + + $reqdfields = explode(" ", "rocommunity"); + $reqdfieldsn = array(gettext("Community")); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + $reqdfields = explode(" ", "pollport"); + $reqdfieldsn = array(gettext("Polling Port")); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + + } + + if ($_POST['trapenable']) { + if (strstr($_POST['trapstring'],"#")) $input_errors[] = gettext("Invalid character '#' in SNMP trap string"); + + $reqdfields = explode(" ", "trapserver"); + $reqdfieldsn = array(gettext("Trap server")); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + $reqdfields = explode(" ", "trapserverport"); + $reqdfieldsn = array(gettext("Trap server port")); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + $reqdfields = explode(" ", "trapstring"); + $reqdfieldsn = array(gettext("Trap string")); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + } + + +/* disabled until some docs show up on what this does. + if ($_POST['rwenable']) { + $reqdfields = explode(" ", "rwcommunity"); + $reqdfieldsn = explode(",", "Write community string"); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + } +*/ + + + + if (!$input_errors) { + $config['snmpd']['enable'] = $_POST['enable'] ? true : false; + $config['snmpd']['pollport'] = $_POST['pollport']; + $config['snmpd']['syslocation'] = $_POST['syslocation']; + $config['snmpd']['syscontact'] = $_POST['syscontact']; + $config['snmpd']['rocommunity'] = $_POST['rocommunity']; + /* disabled until some docs show up on what this does. + $config['snmpd']['rwenable'] = $_POST['rwenable'] ? true : false; + $config['snmpd']['rwcommunity'] = $_POST['rwcommunity']; + */ + $config['snmpd']['trapenable'] = $_POST['trapenable'] ? true : false; + $config['snmpd']['trapserver'] = $_POST['trapserver']; + $config['snmpd']['trapserverport'] = $_POST['trapserverport']; + $config['snmpd']['trapstring'] = $_POST['trapstring']; + + $config['snmpd']['modules']['mibii'] = $_POST['mibii'] ? true : false; + $config['snmpd']['modules']['netgraph'] = $_POST['netgraph'] ? true : false; + $config['snmpd']['modules']['pf'] = $_POST['pf'] ? true : false; + $config['snmpd']['modules']['hostres'] = $_POST['hostres'] ? true : false; + $config['snmpd']['modules']['bridge'] = $_POST['bridge'] ? true : false; + $config['snmpd']['modules']['ucd'] = $_POST['ucd'] ? true : false; + $config['snmpd']['modules']['regex'] = $_POST['regex'] ? true : false; + $config['snmpd']['bindip'] = $_POST['bindip']; + + write_config(); + + $retval = 0; + $retval = services_snmpd_configure(); + $savemsg = get_std_save_message($retval); + } +} + +$closehead = false; +$pgtitle = array(gettext("Services"),gettext("SNMP")); +$shortcut_section = "snmp"; +include("head.inc"); + +?> + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + */ +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + + +
                            onclick="enable_change(this)" />
                            + +

                            +
                            + +
                            + +
                            + +

                            +
                              + onclick="enable_change(this)" /> + Enable Write Community String +
                            Write community string + +
                            Please use something other then "private" here
                            +
                             
                            + + + +
                            onclick="enable_change(this)" />
                            + +

                            +
                            + +

                            +
                            + +

                            +
                             
                            + + + +
                             
                            + /> +
                            + /> +
                            + /> +
                            + /> +
                            + /> +
                            + /> +
                            +
                             
                            + + + +
                             
                            + +
                              + " onclick="enable_change(true)" /> +
                            +
                            + + + + diff --git a/usr/local/www/services_unbound.php b/usr/local/www/services_unbound.php new file mode 100644 index 000000000..88634ef0d --- /dev/null +++ b/usr/local/www/services_unbound.php @@ -0,0 +1,516 @@ + + + + + + + +
                            + + +
                            +" . gettext("You must apply the changes in order for them to take effect."));?>
                            + + + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

                            + onclick="enable_change(false)" /> +
                            +

                            +
                            +

                            + /> +

                            + +

                            +
                            + + +

                            + +

                            +
                            + + +

                            + +

                            +

                            + /> +
                            +

                            +

                            + /> +

                            +

                            + /> +
                            +
                            ','')?>

                            +

                            + /> +
                            +
                            ','');?>

                            +

                            + /> +
                            +

                            +
                            +
                            > + " /> - +
                            +
                            > +
                            +
                            +
                            +
                            +
                            + " onclick="enable_change(true)" /> +
                            +
                            +
                            + + +


                            +
                            ','');?>
                            +

                            + + 
                            + + + + + + + +

                            + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + + + + +
                            add
                            +
                            + + + + + +
                            add
                            +
                            +   + +   + +   + +   + + + + + + +
                            edit')">delete
                            +
                            +
                            + + + + + + + +

                            + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + + + + +
                            add
                            +
                            + + + + + +
                            add
                            +
                            +   + +   + +   + + + + + + +
                            + edit + ')"> + delete +
                            +
                            +
                            + + + + diff --git a/usr/local/www/services_unbound_acls.php b/usr/local/www/services_unbound_acls.php new file mode 100644 index 000000000..6ec2250ed --- /dev/null +++ b/usr/local/www/services_unbound_acls.php @@ -0,0 +1,391 @@ + + 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. +*/ + +require("guiconfig.inc"); +require("unbound.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_unbound_acls.php'); + +if (!is_array($config['unbound']['acls'])) + $config['unbound']['acls'] = array(); + +$a_acls = &$config['unbound']['acls']; + +$id = $_GET['id']; +if (isset($_POST['aclid'])) + $id = $_POST['aclid']; + +$act = $_GET['act']; +if (isset($_POST['act'])) + $act = $_POST['act']; + +if ($act == "del") { + if (!$a_acls[$id]) { + pfSenseHeader("services_unbound_acls.php"); + exit; + } + + unset($a_acls[$id]); + write_config(); + mark_subsystem_dirty('unbound'); +} + +if ($act == "new") { + $id = unbound_get_next_id(); +} + +if ($act == "edit") { + if (isset($id) && $a_acls[$id]) { + $pconfig = $a_acls[$id]; + $networkacl = $a_acls[$id]['row']; + } +} + +if ($_POST) { + unset($input_errors); + $pconfig = $_POST; + + if ($_POST['apply']) { + $retval = services_unbound_configure(); + $savemsg = get_std_save_message($retval); + if ($retval == 0) + clear_subsystem_dirty('unbound'); + } else { + + // input validation - only allow 50 entries in a single ACL + for($x=0; $x<50; $x++) { + if (isset($pconfig["acl_network{$x}"])) { + $networkacl[$x] = array(); + $networkacl[$x]['acl_network'] = $pconfig["acl_network{$x}"]; + $networkacl[$x]['mask'] = $pconfig["mask{$x}"]; + $networkacl[$x]['description'] = $pconfig["description{$x}"]; + if (!is_ipaddr($networkacl[$x]['acl_network'])) + $input_errors[] = gettext("You must enter a valid network IP address for {$networkacl[$x]['acl_network']}."); + + if (is_ipaddr($networkacl[$x]['acl_network'])) { + if (!is_subnet($networkacl[$x]['acl_network']."/".$networkacl[$x]['mask'])) + $input_errors[] = gettext("You must enter a valid IPv4 netmask for {$networkacl[$x]['acl_network']}/{$networkacl[$x]['mask']}."); + } else if (function_exists("is_ipaddrv6")) { + if (!is_ipaddrv6($networkacl[$x]['acl_network'])) + $input_errors[] = gettext("You must enter a valid IPv6 address for {$networkacl[$x]['acl_network']}."); + else if (!is_subnetv6($networkacl[$x]['acl_network']."/".$networkacl[$x]['mask'])) + $input_errors[] = gettext("You must enter a valid IPv6 netmask for {$networkacl[$x]['acl_network']}/{$networkacl[$x]['mask']}."); + } else + $input_errors[] = gettext("You must enter a valid IPv4 address for {$networkacl[$x]['acl_network']}."); + } else if (isset($networkacl[$x])) + unset($networkacl[$x]); + } + + if (!$input_errors) { + if ($pconfig['Submit'] == gettext("Save")) { + $acl_entry = array(); + $acl_entry['aclid'] = $pconfig['aclid']; + $acl_entry['aclname'] = $pconfig['aclname']; + $acl_entry['aclaction'] = $pconfig['aclaction']; + $acl_entry['description'] = $pconfig['description']; + $acl_entry['aclid'] = $pconfig['aclid']; + $acl_entry['row'] = array(); + foreach ($networkacl as $acl) + $acl_entry['row'][] = $acl; + + if (isset($id) && $a_acls[$id]) + $a_acls[$id] = $acl_entry; + else + $a_acls[] = $acl_entry; + + + mark_subsystem_dirty("unbound"); + write_config(); + + pfSenseHeader("/services_unbound_acls.php"); + exit; + } + + } + } +} + +$closehead = false; +$pgtitle = "Services: DNS Resolver: Access Lists"; +include("head.inc"); + +?> + + + + + + + + + + +
                            + + + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + +
                            + +
                            + +
                            + +
                            + Deny: This action stops queries from hosts within the netblock defined below.");?>
                            + Refuse: This action also stops queries from hosts within the netblock defined below, but sends a DNS rcode REFUSED error message back to the client.");?>
                            + Allow: This action allows queries from hosts within the netblock defined below.");?>
                            + Allow Snoop: This action allows recursive and nonrecursive access from hosts within the netblock defined below. Used for cache snooping and ideally should only be configured for your administrative host.");?>
                            +
                            +
                            + + + + + + + + + + + + + + + + + + + +
                            + + + + + + + delete +
                            + + " /> + + + +
                            + +
                            + +
                             
                              +  
                              + " /> + " onclick="window.location.href=''" /> +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                             
                              + + + + + +
                              + " border="0" alt="add" /> +
                            +
                            +

                            + +

                            +
                            + + + + + + + + + + + +
                            + " width="17" height="17" border="0" alt="edit" /> + ')"> + " width="17" height="17" border="0" alt="delete" /> +
                            +
                            + +
                            +
                            +
                            + + + + diff --git a/usr/local/www/services_unbound_advanced.php b/usr/local/www/services_unbound_advanced.php new file mode 100644 index 000000000..b0b77a747 --- /dev/null +++ b/usr/local/www/services_unbound_advanced.php @@ -0,0 +1,435 @@ + + + + + + +
                            + + +
                            +" . gettext("You must apply the changes in order for them to take effect."));?>
                            + + + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            />
                            +

                            +
                            +

                            />
                            +

                            +
                            +

                            />
                            +

                            +
                            +

                            />
                            + ", "");?>

                            +
                            +

                            />
                            +

                            +
                            +

                            />
                            +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                            +

                            +
                            + +

                            +
                             
                            + +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/services_unbound_domainoverride_edit.php b/usr/local/www/services_unbound_domainoverride_edit.php new file mode 100644 index 000000000..7bd3e5feb --- /dev/null +++ b/usr/local/www/services_unbound_domainoverride_edit.php @@ -0,0 +1,169 @@ + and Manuel Kasper . + 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. +*/ +/* + pfSense_MODULE: dnsresolver +*/ + +##|+PRIV +##|*IDENT=page-services-dnsresolver-editdomainoverride +##|*NAME=Services: DNS Resolver: Edit Domain Override page +##|*DESCR=Allow access to the 'Services: DNS Resolver: Edit Domain Override' page. +##|*MATCH=services_unbound_domainoverride_edit.php* +##|-PRIV + +require("guiconfig.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_unbound.php'); + +if (!is_array($config['unbound']['domainoverrides'])) + $config['unbound']['domainoverrides'] = array(); + +$a_domainOverrides = &$config['unbound']['domainoverrides']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_domainOverrides[$id]) { + $pconfig['domain'] = $a_domainOverrides[$id]['domain']; + $pconfig['ip'] = $a_domainOverrides[$id]['ip']; + $pconfig['descr'] = $a_domainOverrides[$id]['descr']; +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "domain ip"); + $reqdfieldsn = array(gettext("Domain"),gettext("IP address")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + function String_Begins_With($needle, $haystack) { + return (substr($haystack, 0, strlen($needle))==$needle); + } + + if (String_Begins_With(_msdcs, $_POST['domain'])) { + $subdomainstr = substr($_POST['domain'], 7); + if ($subdomainstr && !is_domain($subdomainstr)) + $input_errors[] = gettext("A valid domain must be specified after _msdcs."); + } elseif ($_POST['domain'] && !is_domain($_POST['domain'])) + $input_errors[] = gettext("A valid domain must be specified."); + + if ($_POST['ip']) { + if (strpos($_POST['ip'],'@') !== false) { + $ip_details = explode("@", $_POST['ip']); + if (!is_ipaddr($ip_details[0]) && !is_port($ip_details[1])) + $input_errors[] = gettext("A valid IP address and port must be specified, for example 192.168.100.10@5353."); + } else if (!is_ipaddr($_POST['ip'])) + $input_errors[] = gettext("A valid IP address must be specified, for example 192.168.100.10."); + } + + if (!$input_errors) { + $doment = array(); + $doment['domain'] = $_POST['domain']; + $doment['ip'] = $_POST['ip']; + $doment['descr'] = $_POST['descr']; + + if (isset($id) && $a_domainOverrides[$id]) + $a_domainOverrides[$id] = $doment; + else + $a_domainOverrides[] = $doment; + + mark_subsystem_dirty('unbound'); + + write_config(); + + header("Location: services_unbound.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"),gettext("DNS Resolver"),gettext("Edit Domain Override")); +$shortcut_section = "resolver"; +include("head.inc"); + +?> + + + + +
                            + + + + + + + + + + + + + + + + + +
                            +
                            + +
                            + mycompany.localdomain 1.168.192.in-addr.arpa +
                            +
                            +
                            + +
                            + 192.168.100.100
                            +
                            +
                            +
                            +
                            + + + +
                              + " /> + " onclick="window.location.href=''" /> + + + +
                            +
                            + + + diff --git a/usr/local/www/services_unbound_host_edit.php b/usr/local/www/services_unbound_host_edit.php new file mode 100644 index 000000000..6a43a1ef8 --- /dev/null +++ b/usr/local/www/services_unbound_host_edit.php @@ -0,0 +1,307 @@ + and Manuel Kasper . + 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. +*/ +/* + pfSense_MODULE: dnsforwarder +*/ + +##|+PRIV +##|*IDENT=page-services-dnsresolver-edithost +##|*NAME=Services: DNS Forwarder: Edit host page +##|*DESCR=Allow access to the 'Services: DNS Forwarder: Edit host' page. +##|*MATCH=services_unbound_host_edit.php* +##|-PRIV + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_unbound.php'); + +function hostcmp($a, $b) { + return strcasecmp($a['host'], $b['host']); +} + +function hosts_sort() { + global $g, $config; + + if (!is_array($config['unbound']['hosts'])) + return; + + usort($config['unbound']['hosts'], "hostcmp"); +} + +require("guiconfig.inc"); + +if (!is_array($config['unbound']['hosts'])) + $config['unbound']['hosts'] = array(); + +$a_hosts = &$config['unbound']['hosts']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_hosts[$id]) { + $pconfig['host'] = $a_hosts[$id]['host']; + $pconfig['domain'] = $a_hosts[$id]['domain']; + $pconfig['ip'] = $a_hosts[$id]['ip']; + $pconfig['descr'] = $a_hosts[$id]['descr']; + $pconfig['aliases'] = $a_hosts[$id]['aliases']; +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "domain ip"); + $reqdfieldsn = array(gettext("Domain"),gettext("IP address")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (($_POST['host'] && !is_hostname($_POST['host']))) + $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'."); + + if (($_POST['domain'] && !is_domain($_POST['domain']))) + $input_errors[] = gettext("A valid domain must be specified."); + + if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) + $input_errors[] = gettext("A valid IP address must be specified."); + + /* collect aliases */ + $aliases = array(); + foreach ($_POST as $key => $value) { + $entry = ''; + if (!substr_compare('aliashost', $key, 0, 9)) { + $entry = substr($key, 9); + $field = 'host'; + } + elseif (!substr_compare('aliasdomain', $key, 0, 11)) { + $entry = substr($key, 11); + $field = 'domain'; + } + elseif (!substr_compare('aliasdescription', $key, 0, 16)) { + $entry = substr($key, 16); + $field = 'description'; + } + if (ctype_digit($entry)) { + $aliases[$entry][$field] = $value; + } + } + $pconfig['aliases']['item'] = $aliases; + + /* validate aliases */ + foreach ($aliases as $idx => $alias) { + $aliasreqdfields = array('aliasdomain' . $idx); + $aliasreqdfieldsn = array(gettext("Alias Domain")); + + var_dump(array('fields' => $aliasreqdfields, 'names' => $aliasreqdfieldsn, 'alias' => $alias)); + do_input_validation($_POST, $aliasreqdfields, $aliasreqdfieldsn, $input_errors); + if (($alias['host'] && !is_hostname($alias['host']))) + $input_errors[] = gettext("Hostnames in alias list can only contain the characters A-Z, 0-9 and '-'."); + if (($alias['domain'] && !is_domain($alias['domain']))) + $input_errors[] = gettext("A valid domain must be specified in alias list."); + } + + /* check for overlaps */ + foreach ($a_hosts as $hostent) { + if (isset($id) && ($a_hosts[$id]) && ($a_hosts[$id] === $hostent)) + continue; + + if (($hostent['host'] == $_POST['host']) && ($hostent['domain'] == $_POST['domain']) + && ((is_ipaddrv4($hostent['ip']) && is_ipaddrv4($_POST['ip'])) || (is_ipaddrv6($hostent['ip']) && is_ipaddrv6($_POST['ip'])))) { + $input_errors[] = gettext("This host/domain already exists."); + break; + } + } + + if (!$input_errors) { + $hostent = array(); + $hostent['host'] = $_POST['host']; + $hostent['domain'] = $_POST['domain']; + $hostent['ip'] = $_POST['ip']; + $hostent['descr'] = $_POST['descr']; + $hostent['aliases']['item'] = $aliases; + + if (isset($id) && $a_hosts[$id]) + $a_hosts[$id] = $hostent; + else + $a_hosts[] = $hostent; + hosts_sort(); + + mark_subsystem_dirty('unbound'); + + write_config(); + + header("Location: services_unbound.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"),gettext("DNS Resolver"),gettext("Edit host")); +$shortcut_section = "resolver"; +include("head.inc"); + +?> + +"> + + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            +
                            + 192.168.100.100 fd00:abcd::1
                            +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + + + +
                            +
                            + +
                            +
                            + + + + + + + + " /> + +
                            + + " /> + + +
                              + " /> + " onclick="window.location.href=''" /> + + + +
                            +
                            + + + diff --git a/usr/local/www/services_wol.php b/usr/local/www/services_wol.php new file mode 100644 index 000000000..3a9434941 --- /dev/null +++ b/usr/local/www/services_wol.php @@ -0,0 +1,218 @@ +. + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/local/bin/wol + pfSense_MODULE: wol +*/ + +##|+PRIV +##|*IDENT=page-services-wakeonlan +##|*NAME=Services: Wake on LAN page +##|*DESCR=Allow access to the 'Services: Wake on LAN' page. +##|*MATCH=services_wol.php* +##|-PRIV + +require("guiconfig.inc"); + +if (!is_array($config['wol']['wolentry'])) { + $config['wol']['wolentry'] = array(); +} +$a_wol = &$config['wol']['wolentry']; + +if($_GET['wakeall'] <> "") { + $i = 0; + $savemsg = ""; + foreach ($a_wol as $wolent) { + $mac = $wolent['mac']; + $if = $wolent['interface']; + $description = $wolent['descr']; + $ipaddr = get_interface_ip($if); + if (!is_ipaddr($ipaddr)) + continue; + $bcip = gen_subnet_max($ipaddr, get_interface_subnet($if)); + /* Execute wol command and check return code. */ + if (!mwexec("/usr/local/bin/wol -i {$bcip} {$mac}")) + $savemsg .= sprintf(gettext('Sent magic packet to %1$s (%2$s)%3$s'),$mac, $description, ".
                            "); + else + $savemsg .= sprintf(gettext('Please check the %1$ssystem log%2$s, the wol command for %3$s (%4$s) did not complete successfully%5$s'),'','',$description,$mac,".
                            "); + } +} + +if ($_POST || $_GET['mac']) { + unset($input_errors); + + if ($_GET['mac']) { + /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */ + $_GET['mac'] = strtolower(str_replace("-", ":", $_GET['mac'])); + $mac = $_GET['mac']; + $if = $_GET['if']; + } else { + /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */ + $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac'])); + $mac = $_POST['mac']; + $if = $_POST['interface']; + } + + /* input validation */ + if (!$mac || !is_macaddr($mac)) + $input_errors[] = gettext("A valid MAC address must be specified."); + if (!$if) + $input_errors[] = gettext("A valid interface must be specified."); + + if (!$input_errors) { + /* determine broadcast address */ + $ipaddr = get_interface_ip($if); + if (!is_ipaddr($ipaddr)) + $input_errors[] = gettext("A valid ip could not be found!"); + else { + $bcip = gen_subnet_max($ipaddr, get_interface_subnet($if)); + /* Execute wol command and check return code. */ + if(!mwexec("/usr/local/bin/wol -i {$bcip} " . escapeshellarg($mac))) + $savemsg .= sprintf(gettext("Sent magic packet to %s."),$mac); + else + $savemsg .= sprintf(gettext('Please check the %1$ssystem log%2$s, the wol command for %3$s did not complete successfully%4$s'),'', '', $mac, ".
                            "); + } + } +} + +if ($_GET['act'] == "del") { + if ($a_wol[$_GET['id']]) { + unset($a_wol[$_GET['id']]); + write_config(); + header("Location: services_wol.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"),gettext("Wake on LAN")); +include("head.inc"); + +?> + + + + + +
                            + + + + + + + + + + + + + + + +
                            +
                            +
                            + +
                            +
                              + " /> +
                            +  
                            + wol all
                            + + + + + + + + + + + + + + + + + + + + + +
                            + + + + + +
                            add
                            +
                            + + + + + + + + + + + +
                            edit')">delete
                            +
                            + + + + + +
                            add
                            +
                            + + + +
                            +
                            +
                            "". +
                            + +
                            + + + diff --git a/usr/local/www/services_wol_edit.php b/usr/local/www/services_wol_edit.php new file mode 100644 index 000000000..77b773fb1 --- /dev/null +++ b/usr/local/www/services_wol_edit.php @@ -0,0 +1,171 @@ +. + 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. +*/ +/* + pfSense_MODULE: wol +*/ + +##|+PRIV +##|*IDENT=page-services-wakeonlan-edit +##|*NAME=Services: Wake on LAN: Edit page +##|*DESCR=Allow access to the 'Services: Wake on LAN: Edit' page. +##|*MATCH=services_wol_edit.php* +##|-PRIV + +function wolcmp($a, $b) { + return strcmp($a['descr'], $b['descr']); +} + +function wol_sort() { + global $config; + + usort($config['wol']['wolentry'], "wolcmp"); +} + +require("guiconfig.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_wol.php'); + +if (!is_array($config['wol']['wolentry'])) { + $config['wol']['wolentry'] = array(); +} +$a_wol = &$config['wol']['wolentry']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_wol[$id]) { + $pconfig['interface'] = $a_wol[$id]['interface']; + $pconfig['mac'] = $a_wol[$id]['mac']; + $pconfig['descr'] = $a_wol[$id]['descr']; +} +else +{ + $pconfig['interface'] = $_GET['if']; + $pconfig['mac'] = $_GET['mac']; + $pconfig['descr'] = $_GET['descr']; +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "interface mac"); + $reqdfieldsn = array(gettext("Interface"),gettext("MAC address")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */ + $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac'])); + + if (($_POST['mac'] && !is_macaddr($_POST['mac']))) { + $input_errors[] = gettext("A valid MAC address must be specified."); + } + + if (!$input_errors) { + $wolent = array(); + $wolent['interface'] = $_POST['interface']; + $wolent['mac'] = $_POST['mac']; + $wolent['descr'] = $_POST['descr']; + + if (isset($id) && $a_wol[$id]) + $a_wol[$id] = $wolent; + else + $a_wol[] = $wolent; + wol_sort(); + + write_config(); + + header("Location: services_wol.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"),gettext("Wake on LAN"),gettext("Edit")); +include("head.inc"); + +?> + + + + +
                            + + + + + + + + + + + + + + + + + + + + +
                            +
                            +
                            + +
                            +
                            + +
                              + " /> + " onclick="window.location.href=''" /> + + + +
                            +
                            + + + diff --git a/usr/local/www/shortcuts.inc b/usr/local/www/shortcuts.inc new file mode 100644 index 000000000..d192c74cc --- /dev/null +++ b/usr/local/www/shortcuts.inc @@ -0,0 +1,266 @@ + + 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. + +*/ + +/* + pfSense_MODULE: system +*/ + +// On the page, add in like so: +// $shortcut_section = "relayd"; + +$shortcuts = array(); + +/* Load and process custom shortcuts. */ +function get_shortcut_files($directory) { + $dir_array = array(); + if(!is_dir($directory)) + return; + if ($dh = opendir($directory)) { + while (($file = readdir($dh)) !== false) { + $canadd = 0; + if($file == ".") + $canadd = 1; + if($file == "..") + $canadd = 1; + if($canadd == 0) + array_push($dir_array, $file); + } + closedir($dh); + } + if(!is_array($dir_array)) + return; + return $dir_array; +} + +function get_shortcut_by_service_name($servicename) { + global $shortcuts; + foreach ($shortcuts as $name => $shortcut) { + if (!empty($shortcut['service']) && ($shortcut['service'] == $servicename)) + return $name; + } + return null; +} + +function get_shortcut_main_link($shortcut_section, $addspace = true, $service = array()) { + global $g, $shortcuts; + if(empty($shortcut_section)) + return ""; + $space = ($addspace) ? " " : "" ; + switch ($shortcut_section) { + case "openvpn": + if (!empty($service['mode']) && is_numeric($service['id'])) + $link = "vpn_openvpn_{$service['mode']}.php?act=edit&id={$service['id']}"; + else + $link = $shortcuts[$shortcut_section]['main']; + break; + case "captiveportal": + if (!empty($service['zone'])) + $link = "services_captiveportal.php?zone={$service['zone']}"; + else + $link = $shortcuts[$shortcut_section]['main']; + break; + default: + $link = $shortcuts[$shortcut_section]['main']; + break; + } + if(!empty($link) && ($_SERVER['REQUEST_URI'] != "/{$link}")) + return "{$space}\"plus\""; +} + +function get_shortcut_status_link($shortcut_section, $addspace = true, $service = array()) { + global $g, $shortcuts, $cpzone; + if(empty($shortcut_section)) + return ""; + $space = ($addspace) ? " " : "" ; + if (!empty($cpzone)) + $zone = $cpzone; + elseif (!empty($service['zone'])) + $zone = $service['zone']; + switch ($shortcut_section) { + case "captiveportal": + if (!empty($zone)) + $link = "status_captiveportal.php?zone={$zone}"; + else + $link = $shortcuts[$shortcut_section]['status']; + break; + default: + $link = $shortcuts[$shortcut_section]['status']; + break; + } + if(!empty($link)) + return "{$space}\"status\""; +} + +function get_shortcut_log_link($shortcut_section, $addspace = true) { + global $g, $shortcuts; + $space = ($addspace) ? " " : "" ; + if(!empty($shortcut_section) && !empty($shortcuts[$shortcut_section]['log'])) { + return "{$space}\"logs\""; + } +} + +// Load shortcuts +$dir_array = get_shortcut_files("/usr/local/www/shortcuts"); +foreach ($dir_array as $file) + if (!is_dir("/usr/local/www/shortcuts/{$file}") && stristr($file,".inc")) + include("/usr/local/www/shortcuts/{$file}"); +if(is_dir("/usr/local/pkg/shortcuts")) { + $dir_array = get_shortcut_files("/usr/local/pkg/shortcuts"); + foreach ($dir_array as $file) + if (!is_dir("/usr/local/pkg/shortcuts/{$file}") && stristr($file,".inc")) + include("/usr/local/pkg/shortcuts/{$file}"); +} + +$shortcuts['relayd'] = array(); +$shortcuts['relayd']['main'] = "load_balancer_pool.php"; +$shortcuts['relayd']['log'] = "diag_logs_relayd.php"; +$shortcuts['relayd']['status'] = "status_lb_pool.php"; +$shortcuts['relayd']['service'] = "relayd"; + +$shortcuts['relayd-virtualservers'] = array(); +$shortcuts['relayd-virtualservers']['main'] = "load_balancer_virtual_server.php"; +$shortcuts['relayd-virtualservers']['log'] = "diag_logs_relayd.php"; +$shortcuts['relayd-virtualservers']['status'] = "status_lb_vs.php"; +$shortcuts['relayd-virtualservers']['service'] = "relayd"; + +$shortcuts['captiveportal'] = array(); +$shortcuts['captiveportal']['main'] = "services_captiveportal_zones.php"; +$shortcuts['captiveportal']['log'] = "diag_logs_auth.php"; +$shortcuts['captiveportal']['status'] = "status_captiveportal.php"; +$shortcuts['captiveportal']['service'] = "captiveportal"; + +$shortcuts['captiveportal-vouchers'] = array(); +$shortcuts['captiveportal-vouchers']['log'] = "diag_logs_auth.php"; +$shortcuts['captiveportal-vouchers']['status'] = "status_captiveportal_vouchers.php"; +$shortcuts['captiveportal-vouchers']['service'] = "captiveportal"; + +$shortcuts['dhcp'] = array(); +$shortcuts['dhcp']['main'] = "services_dhcp.php"; +$shortcuts['dhcp']['log'] = "diag_logs_dhcp.php"; +$shortcuts['dhcp']['status'] = "status_dhcp_leases.php"; +$shortcuts['dhcp']['service'] = "dhcpd"; + +$shortcuts['dhcp6'] = array(); +$shortcuts['dhcp6']['main'] = "services_dhcpv6.php"; +$shortcuts['dhcp6']['log'] = "diag_logs_dhcp.php"; +$shortcuts['dhcp6']['status'] = "status_dhcpv6_leases.php"; + + +$shortcuts['ipsec'] = array(); +$shortcuts['ipsec']['main'] = "vpn_ipsec.php"; +$shortcuts['ipsec']['log'] = "diag_logs_ipsec.php"; +$shortcuts['ipsec']['status'] = "diag_ipsec.php"; +$shortcuts['ipsec']['service'] = "ipsec"; + +$shortcuts['openvpn'] = array(); +$shortcuts['openvpn']['main'] = "vpn_openvpn_server.php"; +$shortcuts['openvpn']['log'] = "diag_logs_openvpn.php"; +$shortcuts['openvpn']['status'] = "status_openvpn.php"; +$shortcuts['openvpn']['service'] = "openvpn"; + +$shortcuts['firewall'] = array(); +$shortcuts['firewall']['main'] = "firewall_rules.php"; +$shortcuts['firewall']['log'] = "diag_logs_filter.php"; +$shortcuts['firewall']['status'] = "status_filter_reload.php"; + +$shortcuts['routing'] = array(); +$shortcuts['routing']['main'] = "system_routes.php"; +$shortcuts['routing']['log'] = "diag_logs_routing.php"; +$shortcuts['routing']['status'] = "diag_routes.php"; + +$shortcuts['gateways'] = array(); +$shortcuts['gateways']['main'] = "system_gateways.php"; +$shortcuts['gateways']['log'] = "diag_logs_gateways.php"; +$shortcuts['gateways']['status'] = "status_gateways.php"; +$shortcuts['gateways']['service'] = "apinger"; + +$shortcuts['gateway-groups'] = array(); +$shortcuts['gateway-groups']['main'] = "system_gateway_groups.php"; +$shortcuts['gateway-groups']['log'] = "diag_logs_gateways.php"; +$shortcuts['gateway-groups']['status'] = "status_gateway_groups.php"; + +$shortcuts['interfaces'] = array(); +$shortcuts['interfaces']['main'] = "interfaces_assign.php"; +$shortcuts['interfaces']['status'] = "status_interfaces.php"; + +$shortcuts['trafficshaper'] = array(); +$shortcuts['trafficshaper']['main'] = "firewall_shaper.php"; +$shortcuts['trafficshaper']['status'] = "status_queues.php"; + +$shortcuts['trafficshaper-limiters'] = array(); +$shortcuts['trafficshaper-limiters']['main'] = "firewall_shaper_vinterface.php"; +$shortcuts['trafficshaper-limiters']['status'] = "diag_limiter_info.php"; + +$shortcuts['resolver'] = array(); +$shortcuts['resolver']['main'] = "services_dnsmasq.php"; +$shortcuts['resolver']['log'] = "diag_logs_resolver.php"; +$shortcuts['resolver']['service'] = "dnsmasq"; + +$shortcuts['wireless'] = array(); +$shortcuts['wireless']['main'] = "interfaces_wireless.php"; +$shortcuts['wireless']['log'] = "diag_logs_wireless.php"; +$shortcuts['wireless']['status'] = "status_wireless.php"; + +$shortcuts['ntp'] = array(); +$shortcuts['ntp']['main'] = "services_ntpd.php"; +$shortcuts['ntp']['log'] = "diag_logs_ntpd.php"; +$shortcuts['ntp']['status'] = "status_ntpd.php"; +$shortcuts['ntp']['service'] = "ntpd"; + +$shortcuts['pptps'] = array(); +$shortcuts['pptps']['main'] = "vpn_pptp.php"; +$shortcuts['pptps']['log'] = "diag_logs_vpn.php"; + +$shortcuts['pppoes'] = array(); +$shortcuts['pppoes']['main'] = "vpn_pppoe.php"; +$shortcuts['pppoes']['log'] = "diag_logs_vpn.php?vpntype=poes"; + +$shortcuts['l2tps'] = array(); +$shortcuts['l2tps']['main'] = "vpn_l2tp.php"; +$shortcuts['l2tps']['log'] = "diag_logs_vpn.php?vpntype=l2tp"; + +$shortcuts['carp'] = array(); +$shortcuts['carp']['main'] = "system_hasync.php"; +$shortcuts['carp']['status'] = "carp_status.php"; + +$shortcuts['snmp'] = array(); +$shortcuts['snmp']['main'] = "services_snmp.php"; +$shortcuts['snmp']['service'] = "bsnmpd"; + +$shortcuts['authentication'] = array(); +$shortcuts['authentication']['main'] = "system_authservers.php"; +$shortcuts['authentication']['status'] = "diag_authentication.php"; + +$shortcuts['aliases'] = array(); +$shortcuts['aliases']['main'] = "firewall_aliases.php"; +$shortcuts['aliases']['status'] = "diag_tables.php"; +?> \ No newline at end of file diff --git a/usr/local/www/shortcuts/pkg_upnp.inc b/usr/local/www/shortcuts/pkg_upnp.inc new file mode 100644 index 000000000..2b068a71b --- /dev/null +++ b/usr/local/www/shortcuts/pkg_upnp.inc @@ -0,0 +1,11 @@ + diff --git a/usr/local/www/stats.php b/usr/local/www/stats.php new file mode 100644 index 000000000..e13fafed7 --- /dev/null +++ b/usr/local/www/stats.php @@ -0,0 +1,46 @@ + + 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. +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-cpuutilization +##|*NAME=Diagnostics: CPU Utilization page +##|*DESCR=Allow access to the 'Diagnostics: CPU Utilization' page. +##|*MATCH=stats.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("includes/functions.inc.php"); + +$cpu = cpu_usage(); + +echo $cpu; +exit; + +?> diff --git a/usr/local/www/status.php b/usr/local/www/status.php new file mode 100755 index 000000000..0a0f70a09 --- /dev/null +++ b/usr/local/www/status.php @@ -0,0 +1,244 @@ + Nov 2003 + * + * (modified for m0n0wall by Manuel Kasper ) + * (modified for pfSense by Scott Ullrich geekgod@pfsense.com) + */ +/* + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/bin/vmstat /usr/bin/netstat /sbin/dmesg /sbin/mount /sbin/setkey /usr/local/sbin/pftop + pfSense_BUILDER_BINARIES: /sbin/pfctl /sbin/sysctl /usr/bin/top /usr/bin/netstat /sbin/pfctl /sbin/ifconfig + pfSense_MODULE: support +*/ + +##|+PRIV +##|*IDENT=page-hidden-detailedstatus +##|*NAME=Hidden: Detailed Status page +##|*DESCR=Allow access to the 'Hidden: Detailed Status' page. +##|*MATCH=status.php* +##|-PRIV + +/* Execute a command, with a title, and generate an HTML table + * showing the results. + */ + +/* include all configuration functions */ +require_once("guiconfig.inc"); +require_once("functions.inc"); + +function doCmdT($title, $command) { + $rubbish = array('|', '-', '/', '.', ' '); /* fixes the tag to be W3C compliant */ + echo "\n\n"; + echo "\n"; + echo "\t\n"; + echo "\t\n\t\t\n\t\n"; + echo "
                            " . $title . "
                            \n\t\t\t
                            ";		/* no newline after pre */
                            +
                            +	if ($command == "dumpconfigxml") {
                            +		$fd = @fopen("/conf/config.xml", "r");
                            +		if ($fd) {
                            +			while (!feof($fd)) {
                            +				$line = fgets($fd);
                            +				/* remove sensitive contents */
                            +				$line = preg_replace("/.*?<\\/password>/", "xxxxx", $line);
                            +				$line = preg_replace("/.*?<\\/pre-shared-key>/", "xxxxx", $line);
                            +				$line = preg_replace("/.*?<\\/rocommunity>/", "xxxxx", $line);
                            +				$line = str_replace("\t", "    ", $line);
                            +				echo htmlspecialchars($line,ENT_NOQUOTES);
                            +			}
                            +		}
                            +		fclose($fd);
                            +	} else {
                            +		$execOutput = "";
                            +		$execStatus = "";
                            +		exec ($command . " 2>&1", $execOutput, $execStatus);
                            +		for ($i = 0; isset($execOutput[$i]); $i++) {
                            +			if ($i > 0) {
                            +				echo "\n";
                            +			}
                            +			echo htmlspecialchars($execOutput[$i],ENT_NOQUOTES);
                            +		}
                            +	}
                            +    echo "\n\t\t\t
                            \n\t\t
                            \n"; +} + +/* Execute a command, giving it a title which is the same as the command. */ +function doCmd($command) { + doCmdT($command,$command); +} + +/* Define a command, with a title, to be executed later. */ +function defCmdT($title, $command) { + global $commands; + $title = htmlspecialchars($title,ENT_NOQUOTES); + $commands[] = array($title, $command); +} + +/* Define a command, with a title which is the same as the command, + * to be executed later. + */ +function defCmd($command) { + defCmdT($command,$command); +} + +/* List all of the commands as an index. */ +function listCmds() { + global $commands; + $rubbish = array('|', '-', '/', '.', ' '); /* fixes the tag to be W3C compliant */ + echo "\n

                            " . gettext("This status page includes the following information") . ":\n"; + echo "

                            \n"; +} + +/* Execute all of the commands which were defined by a call to defCmd. */ +function execCmds() { + global $commands; + for ($i = 0; isset($commands[$i]); $i++ ) { + doCmdT($commands[$i][0], $commands[$i][1]); + } +} + +global $g, $config; + +/* Set up all of the commands we want to execute. */ +defCmdT("System uptime","uptime"); +defCmdT("Interfaces","/sbin/ifconfig -a"); + +defCmdT("PF Info","/sbin/pfctl -s info"); + +defCmdT("Routing tables","netstat -nr"); + +defCmdT("top | head -n5", "/usr/bin/top | /usr/bin/head -n5"); + +defCmdT("sysctl hw.physmem","/sbin/sysctl hw.physmem"); + +if (isset($config['captiveportal']) && is_array($config['captiveportal'])) { + foreach ($config['captiveportal'] as $cpZone => $cpdata) { + if (isset($cpdata['enable'])) + defCmdT("ipfw -x {$cpdata['zoneid']} show", "/sbin/ipfw -x {$cpdata['zoneid']} show"); + } +} + +defCmdT("pfctl -sn", "/sbin/pfctl -sn"); +defCmdT("pfctl -sr", "/sbin/pfctl -sr"); +defCmdT("pfctl -ss", "/sbin/pfctl -ss"); +defCmdT("pfctl -si", "/sbin/pfctl -si"); +defCmdT("pfctl -sa", "/sbin/pfctl -sa"); +defCmdT("pfctl -s rules -vv","/sbin/pfctl -s rules -vv"); +defCmdT("pfctl -s queue -v","/sbin/pfctl -s queue -v"); +defCmdT("pfctl -s nat -v","/sbin/pfctl -s nat -v"); + +defCmdT("PF OSFP","/sbin/pfctl -s osfp"); + + +defCmdT("netstat -s -ppfsync","netstat -s -ppfsync"); + +defCmdT("pfctl -vsq","/sbin/pfctl -vsq"); + +defCmdT("pfctl -vs Tables","/sbin/pfctl -vs Tables"); + +defCmdT("Load Balancer","/sbin/pfctl -a slb -s nat"); + +defCmdT("pftop -w 150 -a -b","/usr/local/sbin/pftop -a -b"); +defCmdT("pftop -w 150 -a -b -v long","/usr/local/sbin/pftop -w 150 -a -b -v long"); +defCmdT("pftop -w 150 -a -b -v queue","/usr/local/sbin/pftop -w 150 -a -b -v queue"); +defCmdT("pftop -w 150 -a -b -v rules","/usr/local/sbin/pftop -w 150 -a -b -v rules"); +defCmdT("pftop -w 150 -a -b -v size","/usr/local/sbin/pftop -w 150 -a -b -v size"); +defCmdT("pftop -w 150 -a -b -v speed","/usr/local/sbin/pftop -w 150 -a -b -v speed"); + +defCmdT("resolv.conf","cat /etc/resolv.conf"); + +defCmdT("Processes","ps xauww"); +defCmdT("dhcpd.conf","cat /var/dhcpd/etc/dhcpd.conf"); + +defCmdT("df","/bin/df"); + +defCmdT("ipsec.conf","cat /var/etc/ipsec/ipsec.conf"); +defCmdT("SPD","/sbin/setkey -DP"); +defCmdT("SAD","/sbin/setkey -D"); + +if(isset($config['system']['usefifolog'])) { + defCmdT("last 200 system log entries","/usr/sbin/fifolog_reader /var/log/system.log 2>&1 | tail -n 200"); + defCmdT("last 50 filter log entries","/usr/sbin/fifolog_reader /var/log/filter.log 2>&1 | tail -n 50"); +} else { + defCmdT("last 200 system log entries","/usr/local/sbin/clog /var/log/system.log 2>&1 | tail -n 200"); + defCmdT("last 50 filter log entries","/usr/local/sbin/clog /var/log/filter.log 2>&1 | tail -n 50"); +} + +defCmd("ls /conf"); +defCmd("ls /var/run"); + +defCmd("/sbin/mount"); + +defCmdT("cat {$g['tmp_path']}/rules.debug","cat {$g['tmp_path']}/rules.debug"); + +defCmdT("VMStat", "vmstat -afimsz"); + +defCmdT("config.xml","dumpconfigxml"); + +defCmdT("DMESG","/sbin/dmesg -a"); + +defCmdT("netstat -mb","netstat -mb"); +defCmdT("vmstat -z","vmstat -z"); + +exec("/bin/date", $dateOutput, $dateStatus); +$currentDate = $dateOutput[0]; + +$pgtitle = array("{$g['product_name']}","status"); +include("head.inc"); + +?> + + + + + +

                            !
                            +. + +

                            + + + +
                            + + + + diff --git a/usr/local/www/status_captiveportal.php b/usr/local/www/status_captiveportal.php new file mode 100644 index 000000000..c9aab189f --- /dev/null +++ b/usr/local/www/status_captiveportal.php @@ -0,0 +1,214 @@ +. + 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. +*/ +/* + pfSense_MODULE: captiveportal +*/ + +##|+PRIV +##|*IDENT=page-status-captiveportal +##|*NAME=Status: Captive portal page +##|*DESCR=Allow access to the 'Status: Captive portal' page. +##|*MATCH=status_captiveportal.php* +##|-PRIV + +require("guiconfig.inc"); +require("functions.inc"); +require_once("filter.inc"); +require("shaper.inc"); +require("captiveportal.inc"); + +$cpzone = $_GET['zone']; +if (isset($_POST['zone'])) + $cpzone = $_POST['zone']; + +if ($_GET['act'] == "del" && !empty($cpzone)) { + captiveportal_disconnect_client($_GET['id']); + header("Location: status_captiveportal.php?zone={$cpzone}"); + exit; +} + +$pgtitle = array(gettext("Status: Captive portal")); +$shortcut_section = "captiveportal"; + +if (!is_array($config['captiveportal'])) + $config['captiveportal'] = array(); +$a_cp =& $config['captiveportal']; + +if (count($a_cp) == 1) + $cpzone = current(array_keys($a_cp)); + +include("head.inc"); + +?> + + + + + + + + + + + +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +


                            +
                            + 1) { ?> +
                            + +
                            +
                            + +

                            + {$mac_man[$mac_hi]}"; } + } + ?>  +   + ')">"> +
                            + + +
                            + + +
                            + + + + +" /> + + +" /> + + + +
                            + + + + diff --git a/usr/local/www/status_captiveportal_expire.php b/usr/local/www/status_captiveportal_expire.php new file mode 100644 index 000000000..2083ff0d3 --- /dev/null +++ b/usr/local/www/status_captiveportal_expire.php @@ -0,0 +1,119 @@ +. + 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. +*/ +/* + pfSense_MODULE: captiveportal +*/ + +##|+PRIV +##|*IDENT=page-status-captiveportal-expire +##|*NAME=Status: Captive portal Expire Vouchers page +##|*DESCR=Allow access to the 'Status: Captive portal Expire Vouchers' page. +##|*MATCH=status_captiveportal_expire.php* +##|-PRIV + +require("guiconfig.inc"); +require("functions.inc"); +require_once("filter.inc"); +require("shaper.inc"); +require("captiveportal.inc"); +require_once("voucher.inc"); + +$cpzone = $_GET['zone']; +if (isset($_POST['zone'])) + $cpzone = $_POST['zone']; + +if (empty($cpzone)) { + header("Location: services_captiveportal_zones.php"); + exit; +} + +if (!is_array($config['captiveportal'])) + $config['captiveportal'] = array(); +$a_cp =& $config['captiveportal']; + +$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Expire Vouchers"), $a_cp[$cpzone]['zone']); + +include("head.inc"); +?> + + + +
                            + + + +
                            + +
                            + + + + + + + + + + +
                            + +
                            +.
                              + + " /> +
                            +
                            +
                            +
                            +\n"; + if ( $result) { + echo "\"pass\""; + echo "Success"; + } else { + echo "\"block\""; + echo "Error"; + } + echo ""; + } +} + +include("fend.inc"); +?> + + diff --git a/usr/local/www/status_captiveportal_test.php b/usr/local/www/status_captiveportal_test.php new file mode 100644 index 000000000..dd065ad7d --- /dev/null +++ b/usr/local/www/status_captiveportal_test.php @@ -0,0 +1,122 @@ +. + 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. +*/ +/* + pfSense_MODULE: captiveportal +*/ + +##|+PRIV +##|*IDENT=page-status-captiveportal-test +##|*NAME=Status: Captive portal test Vouchers page +##|*DESCR=Allow access to the 'Status: Captive portal Test Vouchers' page. +##|*MATCH=status_captiveportal_test.php* +##|-PRIV + +require("guiconfig.inc"); +require("functions.inc"); +require_once("filter.inc"); +require("shaper.inc"); +require("captiveportal.inc"); +require_once("voucher.inc"); + +$cpzone = $_GET['zone']; +if (isset($_POST['zone'])) + $cpzone = $_POST['zone']; + +if (empty($cpzone)) { + header("Location: services_captiveportal_zones.php"); + exit; +} + +if (!is_array($config['captiveportal'])) + $config['captiveportal'] = array(); +$a_cp =& $config['captiveportal']; + +$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Test Vouchers"), $a_cp[$cpzone]['zone']); +$shortcut_section = "captiveportal-vouchers"; + +include("head.inc"); +?> + + + +
                            + + + +
                            + +
                            + + + + + + + + + + +
                            + +
                            +.
                              + + " /> +
                            +
                            +
                            +
                            +\n"; + foreach ($test_results as $result) { + if (strpos($result, " good ") || strpos($result, " granted ")) { + echo "\"pass\""; + echo "$result"; + } else { + echo "\"block\""; + echo "$result"; + } + } + echo ""; + } +} + +include("fend.inc"); +?> + + diff --git a/usr/local/www/status_captiveportal_voucher_rolls.php b/usr/local/www/status_captiveportal_voucher_rolls.php new file mode 100644 index 000000000..3b7f40a61 --- /dev/null +++ b/usr/local/www/status_captiveportal_voucher_rolls.php @@ -0,0 +1,137 @@ +. + 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. +*/ +/* + pfSense_MODULE: captiveportal +*/ + +##|+PRIV +##|*IDENT=page-status-captiveportal-voucher-rolls +##|*NAME=Status: Captive portal Voucher Rolls page +##|*DESCR=Allow access to the 'Status: Captive portal Voucher Rolls' page. +##|*MATCH=status_captiveportal_voucher_rolls.php* +##|-PRIV + +require("guiconfig.inc"); +require("functions.inc"); +require_once("filter.inc"); +require("shaper.inc"); +require("captiveportal.inc"); +require_once("voucher.inc"); + +$cpzone = $_GET['zone']; +if (isset($_POST['zone'])) + $cpzone = $_POST['zone']; + +if (empty($cpzone)) { + header("Location: services_captiveportal_zones.php"); + exit; +} + +if (!is_array($config['captiveportal'])) + $config['captiveportal'] = array(); +$a_cp =& $config['captiveportal']; +$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Voucher Rolls"), $a_cp[$cpzone]['zone']); +$shortcut_section = "captiveportal-vouchers"; + +if (!is_array($config['voucher'][$cpzone]['roll'])) { + $config['voucher'][$cpzone]['roll'] = array(); +} +$a_roll = &$config['voucher'][$cpzone]['roll']; + +include("head.inc"); +?> + + + +
                            + + + + + + + +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + +
                            +   + +   + +   + +   + +   + +   + +   +
                            +
                            +
                            + + + diff --git a/usr/local/www/status_captiveportal_vouchers.php b/usr/local/www/status_captiveportal_vouchers.php new file mode 100644 index 000000000..663ead12b --- /dev/null +++ b/usr/local/www/status_captiveportal_vouchers.php @@ -0,0 +1,146 @@ +. + 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. +*/ +/* + pfSense_MODULE: captiveportal +*/ + +##|+PRIV +##|*IDENT=page-status-captiveportal-vouchers +##|*NAME=Status: Captive portal Vouchers page +##|*DESCR=Allow access to the 'Status: Captive portal Vouchers' page. +##|*MATCH=status_captiveportal_vouchers.php* +##|-PRIV + +require("guiconfig.inc"); +require("functions.inc"); +require_once("filter.inc"); +require("shaper.inc"); +require("captiveportal.inc"); +require_once("voucher.inc"); + +$cpzone = $_GET['zone']; +if (isset($_POST['zone'])) + $cpzone = $_POST['zone']; + +if (empty($cpzone)) { + header("Location: services_captiveportal_zones.php"); + exit; +} + +if (!is_array($config['captiveportal'])) + $config['captiveportal'] = array(); +$a_cp =& $config['captiveportal']; +$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Vouchers"), $a_cp[$cpzone]['zone']); +$shortcut_section = "captiveportal-vouchers"; + +function clientcmp($a, $b) { + global $order; + return strcmp($a[$order], $b[$order]); +} + +if (!is_array($config['voucher'][$cpzone]['roll'])) { + $config['voucher'][$cpzone]['roll'] = array(); +} +$a_roll = $config['voucher'][$cpzone]['roll']; + +$db = array(); + +foreach($a_roll as $rollent) { + $roll = $rollent['number']; + $minutes = $rollent['minutes']; + + if (!file_exists("{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db")) + continue; + + $active_vouchers = file("{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + foreach($active_vouchers as $voucher => $line) { + list($voucher,$timestamp, $minutes) = explode(",", $line); + $remaining = (($timestamp + 60*$minutes) - time()); + if ($remaining > 0) { + $dbent[0] = $voucher; + $dbent[1] = $roll; + $dbent[2] = $timestamp; + $dbent[3] = intval($remaining/60); + $dbent[4] = $timestamp + 60*$minutes; // expires at + $db[] = $dbent; + } + } +} + +if ($_GET['order']) { + $order = $_GET['order']; + usort($db, "clientcmp"); +} + +include("head.inc"); +?> + + + +
                            + + + + + +
                            + +
                            + + + + + + + + + + + + + + + + + + + + +
                            +
                            +
                            + + + diff --git a/usr/local/www/status_dhcp_leases.php b/usr/local/www/status_dhcp_leases.php new file mode 100644 index 000000000..ed1a8c3c8 --- /dev/null +++ b/usr/local/www/status_dhcp_leases.php @@ -0,0 +1,441 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/bin/awk /bin/cat /usr/sbin/arp /usr/bin/wc /usr/bin/grep + pfSense_MODULE: dhcpserver +*/ + +##|+PRIV +##|*IDENT=page-status-dhcpleases +##|*NAME=Status: DHCP leases page +##|*DESCR=Allow access to the 'Status: DHCP leases' page. +##|*MATCH=status_dhcp_leases.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("config.inc"); + +$pgtitle = array(gettext("Status"),gettext("DHCP leases")); +$shortcut_section = "dhcp"; + +$leasesfile = "{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases"; + +if (($_GET['deleteip']) && (is_ipaddr($_GET['deleteip']))) { + /* Stop DHCPD */ + killbyname("dhcpd"); + + /* Read existing leases */ + /* $leases_contents has the lines of the file, including the newline char at the end of each line. */ + $leases_contents = file($leasesfile); + $newleases_contents = array(); + $i=0; + while ($i < count($leases_contents)) { + /* Find the lease(s) we want to delete */ + if ($leases_contents[$i] == "lease {$_GET['deleteip']} {\n") { + /* Skip to the end of the lease declaration */ + do { + $i++; + } while ($leases_contents[$i] != "}\n"); + } else { + /* It's a line we want to keep, copy it over. */ + $newleases_contents[] = $leases_contents[$i]; + } + $i++; + } + + /* Write out the new leases file */ + $fd = fopen($leasesfile, 'w'); + fwrite($fd, implode("\n", $newleases_contents)); + fclose($fd); + + /* Restart DHCP Service */ + services_dhcpd_configure(); + header("Location: status_dhcp_leases.php?all={$_GET['all']}"); +} + +include("head.inc"); + +?> + + + + $rien) + $new[] = $array[$k]; + return $new; +} + +$awk = "/usr/bin/awk"; +/* this pattern sticks comments into a single array item */ +$cleanpattern = "'{ gsub(\"#.*\", \"\");} { gsub(\";\", \"\"); print;}'"; +/* We then split the leases file by } */ +$splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i; printf \"}\\n\";}'"; + +/* stuff the leases file in a proper format into a array by line */ +exec("/bin/cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern}", $leases_content); +$leases_count = count($leases_content); +exec("/usr/sbin/arp -an", $rawdata); +$arpdata_ip = array(); +$arpdata_mac = array(); +foreach ($rawdata as $line) { + $elements = explode(' ',$line); + if ($elements[3] != "(incomplete)") { + $arpent = array(); + $arpdata_ip[] = trim(str_replace(array('(',')'),'',$elements[1])); + $arpdata_mac[] = strtolower(trim($elements[3])); + } +} +unset($rawdata); +$pools = array(); +$leases = array(); +$i = 0; +$l = 0; +$p = 0; + +// Put everything together again +foreach($leases_content as $lease) { + /* split the line by space */ + $data = explode(" ", $lease); + /* walk the fields */ + $f = 0; + $fcount = count($data); + /* with less then 20 fields there is nothing useful */ + if($fcount < 20) { + $i++; + continue; + } + while($f < $fcount) { + switch($data[$f]) { + case "failover": + $pools[$p]['name'] = trim($data[$f+2], '"'); + $pools[$p]['name'] = "{$pools[$p]['name']} (" . convert_friendly_interface_to_friendly_descr(substr($pools[$p]['name'], 5)) . ")"; + $pools[$p]['mystate'] = $data[$f+7]; + $pools[$p]['peerstate'] = $data[$f+14]; + $pools[$p]['mydate'] = $data[$f+10]; + $pools[$p]['mydate'] .= " " . $data[$f+11]; + $pools[$p]['peerdate'] = $data[$f+17]; + $pools[$p]['peerdate'] .= " " . $data[$f+18]; + $p++; + $i++; + continue 3; + case "lease": + $leases[$l]['ip'] = $data[$f+1]; + $leases[$l]['type'] = "dynamic"; + $f = $f+2; + break; + case "starts": + $leases[$l]['start'] = $data[$f+2]; + $leases[$l]['start'] .= " " . $data[$f+3]; + $f = $f+3; + break; + case "ends": + $leases[$l]['end'] = $data[$f+2]; + $leases[$l]['end'] .= " " . $data[$f+3]; + $f = $f+3; + break; + case "tstp": + $f = $f+3; + break; + case "tsfp": + $f = $f+3; + break; + case "atsfp": + $f = $f+3; + break; + case "cltt": + $f = $f+3; + break; + case "binding": + switch($data[$f+2]) { + case "active": + $leases[$l]['act'] = "active"; + break; + case "free": + $leases[$l]['act'] = "expired"; + $leases[$l]['online'] = "offline"; + break; + case "backup": + $leases[$l]['act'] = "reserved"; + $leases[$l]['online'] = "offline"; + break; + } + $f = $f+1; + break; + case "next": + /* skip the next binding statement */ + $f = $f+3; + break; + case "rewind": + /* skip the rewind binding statement */ + $f = $f+3; + break; + case "hardware": + $leases[$l]['mac'] = $data[$f+2]; + /* check if it's online and the lease is active */ + if (in_array($leases[$l]['ip'], $arpdata_ip)) { + $leases[$l]['online'] = 'online'; + } else { + $leases[$l]['online'] = 'offline'; + } + $f = $f+2; + break; + case "client-hostname": + if($data[$f+1] <> "") { + $leases[$l]['hostname'] = preg_replace('/"/','',$data[$f+1]); + } else { + $hostname = gethostbyaddr($leases[$l]['ip']); + if($hostname <> "") { + $leases[$l]['hostname'] = $hostname; + } + } + $f = $f+1; + break; + case "uid": + $f = $f+1; + break; + } + $f++; + } + $l++; + $i++; + /* slowly chisel away at the source array */ + array_shift($leases_content); +} +/* remove the old array */ +unset($lease_content); + +/* remove duplicate items by mac address */ +if(count($leases) > 0) { + $leases = remove_duplicate($leases,"ip"); +} + +if(count($pools) > 0) { + $pools = remove_duplicate($pools,"name"); + asort($pools); +} + +foreach($config['interfaces'] as $ifname => $ifarr) { + if (is_array($config['dhcpd'][$ifname]) && + is_array($config['dhcpd'][$ifname]['staticmap'])) { + foreach($config['dhcpd'][$ifname]['staticmap'] as $static) { + $slease = array(); + $slease['ip'] = $static['ipaddr']; + $slease['type'] = "static"; + $slease['mac'] = $static['mac']; + $slease['start'] = ""; + $slease['end'] = ""; + $slease['hostname'] = htmlentities($static['hostname']); + $slease['act'] = "static"; + $slease['online'] = in_array(strtolower($slease['mac']), $arpdata_mac) ? 'online' : 'offline'; + $leases[] = $slease; + } + } +} + +if ($_GET['order']) + usort($leases, "leasecmp"); + +/* only print pool status when we have one */ +if(count($pools) > 0) { +?> + + + + + + + + +\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; +} + +?> +
                            {$fspans}{$data['name']}{$fspane}{$fspans}{$data['mystate']}{$fspane}{$fspans}" . adjust_gmt($data['mydate']) . "{$fspane}{$fspans}{$data['peerstate']}{$fspane}{$fspans}" . adjust_gmt($data['peerdate']) . "{$fspane}  
                            + + + +
                            + + + + + + + + + + + +"; + $fspane = " "; + } else { + $fspans = ""; + $fspane = " "; + } + $lip = ip2ulong($data['ip']); + if ($data['act'] == "static") { + foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) { + if(is_array($dhcpifconf['staticmap'])) { + foreach ($dhcpifconf['staticmap'] as $staticent) { + if ($data['ip'] == $staticent['ipaddr']) { + $data['if'] = $dhcpif; + break; + } + } + } + /* exit as soon as we have an interface */ + if ($data['if'] != "") + break; + } + } else { + foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) { + if (!is_array($dhcpifconf['range'])) + continue; + if (($lip >= ip2ulong($dhcpifconf['range']['from'])) && ($lip <= ip2ulong($dhcpifconf['range']['to']))) { + $data['if'] = $dhcpif; + break; + } + } + } + echo "\n"; + echo "\n"; + $mac=$data['mac']; + $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]); + if ($data['online'] != "online") { + if(isset($mac_man[$mac_hi])){ // Manufacturer for this MAC is defined + echo "\n"; + }else{ + echo "\n"; + } + }else{ + if(isset($mac_man[$mac_hi])){ // Manufacturer for this MAC is defined + echo "\n"; + }else{ + echo "\n"; + } + } + echo "\n"; + if ($data['type'] != "static") { + echo "\n"; + echo "\n"; + } else { + echo "\n"; + echo "\n"; + } + echo "\n"; + echo "\n"; + echo "\n"; + } +} + +?> +
                            {$fspans}{$data['ip']}{$fspane}{$fspans}{$mac}
                            {$mac_man[$mac_hi]}{$fspane}
                            {$fspans}{$data['mac']}{$fspane}{$fspans}{$mac}
                            {$mac_man[$mac_hi]}{$fspane}
                            {$fspans}{$data['mac']}{$fspane}{$fspans}" . htmlentities($data['hostname']) . "{$fspane}{$fspans}" . adjust_gmt($data['start']) . "{$fspane}{$fspans}" . adjust_gmt($data['end']) . "{$fspane}{$fspans} n/a {$fspane}{$fspans} n/a {$fspane}{$fspans}{$data['online']}{$fspane}{$fspans}{$data['act']}{$fspane} "; + if ($data['type'] == "dynamic") { + echo ""; + echo "\"add\" \n"; + } else { + echo "\"add\" \n"; + } + + echo ""; + echo "\"add\" \n"; + + /* Only show the button for offline dynamic leases */ + if (($data['type'] == "dynamic") && ($data['online'] != "online")) { + echo ""; + echo "\"delete\" \n"; + } + echo "
                            +
                            +
                            + + + +" /> + + +" /> + +
                            + +

                            ?

                            + + + + + diff --git a/usr/local/www/status_dhcpv6_leases.php b/usr/local/www/status_dhcpv6_leases.php new file mode 100644 index 000000000..9eeda114b --- /dev/null +++ b/usr/local/www/status_dhcpv6_leases.php @@ -0,0 +1,573 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /usr/bin/awk /bin/cat /usr/sbin/ndp /usr/bin/wc /usr/bin/grep + pfSense_MODULE: dhcpserver +*/ + +##|+PRIV +##|*IDENT=page-status-dhcpv6leases +##|*NAME=Status: DHCPv6 leases page +##|*DESCR=Allow access to the 'Status: DHCPv6 leases' page. +##|*MATCH=status_dhcpv6_leases.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("config.inc"); + +$pgtitle = array(gettext("Status"),gettext("DHCPv6 leases")); +$shortcut_section = "dhcp6"; + +$leasesfile = "{$g['dhcpd_chroot_path']}/var/db/dhcpd6.leases"; + +if (($_GET['deleteip']) && (is_ipaddr($_GET['deleteip']))) { + /* Stop DHCPD */ + killbyname("dhcpd"); + + /* Read existing leases */ + $leases_contents = explode("\n", file_get_contents($leasesfile)); + $newleases_contents = array(); + $i=0; + while ($i < count($leases_contents)) { + /* Find the lease(s) we want to delete */ + if ($leases_contents[$i] == " iaaddr {$_GET['deleteip']} {") { + /* The iaaddr line is two lines down from the start of the lease, so remove those two lines. */ + array_pop($newleases_contents); + array_pop($newleases_contents); + /* Skip to the end of the lease declaration */ + do { + $i++; + } while ($leases_contents[$i] != "}"); + } else { + /* It's a line we want to keep, copy it over. */ + $newleases_contents[] = $leases_contents[$i]; + } + $i++; + } + + /* Write out the new leases file */ + $fd = fopen($leasesfile, 'w'); + fwrite($fd, implode("\n", $newleases_contents)); + fclose($fd); + + /* Restart DHCP Service */ + services_dhcpd_configure(); + header("Location: status_dhcpv6_leases.php?all={$_GET['all']}"); +} + +// Load MAC-Manufacturer table +$mac_man = load_mac_manufacturer_table(); + +include("head.inc"); + +?> + + + +getOffset($dhcp_lt); + $ts = $ts + $offset; + return strftime("%Y/%m/%d %I:%M:%S%p", $ts); + } + else + return strftime("%Y/%m/%d %H:%M:%S", $ts); +} + +function remove_duplicate($array, $field) { + foreach ($array as $sub) + $cmp[] = $sub[$field]; + $unique = array_unique(array_reverse($cmp,true)); + foreach ($unique as $k => $rien) + $new[] = $array[$k]; + return $new; +} + +function parse_duid($duid_string) { + $parsed_duid = array(); + for ($i=0; $i < strlen($duid_string); $i++) { + $s = substr($duid_string, $i, 1); + if ($s == '\\') { + $n = substr($duid_string, $i+1, 1); + if (($n == '\\') || ($n == '"')) { + $parsed_duid[] = sprintf("%02x", ord($n)); + } elseif (is_numeric($n)) { + $parsed_duid[] = sprintf("%02x", octdec(substr($duid_string, $i+1, 3))); + $i += 3; + } + } else { + $parsed_duid[] = sprintf("%02x", ord($s)); + } + } + $iaid = array_slice($parsed_duid, 0, 4); + $duid = array_slice($parsed_duid, 4); + return array($iaid, $duid); +} + +$awk = "/usr/bin/awk"; + +/* this pattern sticks comments into a single array item */ +$cleanpattern = "'{ gsub(\"^#.*\", \"\");} { gsub(\"^server-duid.*\", \"\");} { gsub(\";$\", \"\"); print;}'"; +/* We then split the leases file by } */ +$splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i; printf \"}\\n\";}'"; + +/* stuff the leases file in a proper format into a array by line */ +exec("/bin/cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern} | /usr/bin/grep '^ia-.. '", $leases_content); +$leases_count = count($leases_content); +exec("/usr/sbin/ndp -an", $rawdata); +$ndpdata = array(); +foreach ($rawdata as $line) { + $elements = preg_split('/\s+/ ',$line); + if ($elements[1] != "(incomplete)") { + $ndpent = array(); + $ip = trim(str_replace(array('(',')'),'',$elements[0])); + $ndpent['mac'] = trim($elements[1]); + $ndpent['interface'] = trim($elements[2]); + $ndpdata[$ip] = $ndpent; + } +} + +$pools = array(); +$leases = array(); +$prefixes = array(); +$mappings = array(); +$i = 0; +$l = 0; +$p = 0; + +// Put everything together again +while($i < $leases_count) { + $entry = array(); + /* split the line by space */ + $duid_split = array(); + preg_match('/ia-.. "(.*)" { (.*)/ ', $leases_content[$i], $duid_split); + if (!empty($duid_split[1])) { + $iaid_duid = parse_duid($duid_split[1]); + $entry['iaid'] = hexdec(implode("", array_reverse($iaid_duid[0]))); + $entry['duid'] = implode(":", $iaid_duid[1]); + $data = explode(" ", $duid_split[2]); + } else { + $data = explode(" ", $leases_content[$i]); + } + /* walk the fields */ + $f = 0; + $fcount = count($data); + /* with less then 12 fields there is nothing useful */ + if($fcount < 12) { + $i++; + continue; + } + while($f < $fcount) { + switch($data[$f]) { + case "failover": + $pools[$p]['name'] = $data[$f+2]; + $pools[$p]['mystate'] = $data[$f+7]; + $pools[$p]['peerstate'] = $data[$f+14]; + $pools[$p]['mydate'] = $data[$f+10]; + $pools[$p]['mydate'] .= " " . $data[$f+11]; + $pools[$p]['peerdate'] = $data[$f+17]; + $pools[$p]['peerdate'] .= " " . $data[$f+18]; + $p++; + $i++; + continue 3; + case "ia-pd": + $is_prefix = true; + case "ia-na": + $entry['iaid'] = $tmp_iaid; + $entry['duid'] = $tmp_duid; + if ($data[$f+1][0] == '"') { + $duid = ""; + /* FIXME: This needs a safety belt to prevent an infinite loop */ + while ($data[$f][strlen($data[$f])-1] != '"') { + $duid .= " " . $data[$f+1]; + $f++; + } + $entry['duid'] = $duid; + } else { + $entry['duid'] = $data[$f+1]; + } + $entry['type'] = "dynamic"; + $f = $f+2; + break; + case "iaaddr": + $entry['ip'] = $data[$f+1]; + $entry['type'] = "dynamic"; + if (in_array($entry['ip'], array_keys($ndpdata))) { + $entry['online'] = 'online'; + } else { + $entry['online'] = 'offline'; + } + $f = $f+2; + break; + case "iaprefix": + $is_prefix = true; + $entry['prefix'] = $data[$f+1]; + $entry['type'] = "dynamic"; + $f = $f+2; + break; + case "starts": + $entry['start'] = $data[$f+2]; + $entry['start'] .= " " . $data[$f+3]; + $f = $f+3; + break; + case "ends": + $entry['end'] = $data[$f+2]; + $entry['end'] .= " " . $data[$f+3]; + $f = $f+3; + break; + case "tstp": + $f = $f+3; + break; + case "tsfp": + $f = $f+3; + break; + case "atsfp": + $f = $f+3; + break; + case "cltt": + $entry['start'] = $data[$f+2]; + $entry['start'] .= " " . $data[$f+3]; + $f = $f+3; + break; + case "binding": + switch($data[$f+2]) { + case "active": + $entry['act'] = "active"; + break; + case "free": + $entry['act'] = "expired"; + $entry['online'] = "offline"; + break; + case "backup": + $entry['act'] = "reserved"; + $entry['online'] = "offline"; + break; + case "released": + $entry['act'] = "released"; + $entry['online'] = "offline"; + } + $f = $f+1; + break; + case "next": + /* skip the next binding statement */ + $f = $f+3; + break; + case "hardware": + $f = $f+2; + break; + case "client-hostname": + if($data[$f+1] <> "") { + $entry['hostname'] = preg_replace('/"/','',$data[$f+1]); + } else { + $hostname = gethostbyaddr($entry['ip']); + if($hostname <> "") { + $entry['hostname'] = $hostname; + } + } + $f = $f+1; + break; + case "uid": + $f = $f+1; + break; + } + $f++; + } + if ($is_prefix) { + $prefixes[] = $entry; + } else { + $leases[] = $entry; + $mappings[$entry['iaid'] . $entry['duid']] = $entry['ip']; + } + $l++; + $i++; + $is_prefix = false; +} + +if(count($leases) > 0) { + $leases = remove_duplicate($leases,"ip"); +} + +if(count($prefixes) > 0) { + $prefixes = remove_duplicate($prefixes,"prefix"); +} + +if(count($pools) > 0) { + $pools = remove_duplicate($pools,"name"); + asort($pools); +} + +foreach($config['interfaces'] as $ifname => $ifarr) { + if (is_array($config['dhcpdv6'][$ifname]) && + is_array($config['dhcpdv6'][$ifname]['staticmap'])) { + foreach($config['dhcpdv6'][$ifname]['staticmap'] as $static) { + $slease = array(); + $slease['ip'] = $static['ipaddrv6']; + $slease['type'] = "static"; + $slease['duid'] = $static['duid']; + $slease['start'] = ""; + $slease['end'] = ""; + $slease['hostname'] = htmlentities($static['hostname']); + $slease['act'] = "static"; + if (in_array($slease['ip'], array_keys($ndpdata))) { + $slease['online'] = 'online'; + } else { + $slease['online'] = 'offline'; + } + + $leases[] = $slease; + } + } +} + +if ($_GET['order']) + usort($leases, "leasecmp"); + +/* only print pool status when we have one */ +if(count($pools) > 0) { +?> + + + + + + + + +\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; +} + +?> +
                            {$fspans}{$data['name']}{$fspane}{$fspans}{$data['mystate']}{$fspane}{$fspans}" . adjust_gmt($data['mydate']) . "{$fspane}{$fspans}{$data['peerstate']}{$fspane}{$fspans}" . adjust_gmt($data['peerdate']) . "{$fspane}  
                            + + + +
                            + + + + + + + + + + + + +"; + $fspane = " "; + } else { + $fspans = ""; + $fspane = " "; + } + + if ($data['act'] == "static") { + foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf) { + if(is_array($dhcpifconf['staticmap'])) { + foreach ($dhcpifconf['staticmap'] as $staticent) { + if ($data['ip'] == $staticent['ipaddr']) { + $data['if'] = $dhcpif; + break; + } + } + } + /* exit as soon as we have an interface */ + if ($data['if'] != "") + break; + } + } else { + $data['if'] = convert_real_interface_to_friendly_interface_name(guess_interface_from_ip($data['ip'])); + } + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + if ($data['type'] != "static") { + echo "\n"; + echo "\n"; + } else { + echo "\n"; + echo "\n"; + } + echo "\n"; + echo "\n"; + + if ($data['type'] == "dynamic") { + echo "\n"; + } else { + echo "\n"; + } + + /* Only show the button for offline dynamic leases */ + if (($data['type'] == "dynamic") && ($data['online'] != "online")) { + echo "\n"; + } + echo "\n"; + } +} +?> +
                            {$fspans}{$data['ip']}{$fspane}{$fspans}{$data['iaid']}{$fspane}{$fspans}{$data['duid']}{$fspane}{$fspans}"; + if (!empty($data['hostname'])) { + echo htmlentities($data['hostname']) . "
                            "; + } + + $mac=trim($ndpdata[$data['ip']]['mac']); + if (!empty($mac)) { + $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]); + print htmlentities($mac); + if(isset($mac_man[$mac_hi])){ print "
                            {$mac_man[$mac_hi]}"; } + } + + echo "{$fspane} 
                            {$fspans}" . adjust_gmt($data['start']) . "{$fspane}{$fspans}" . adjust_gmt($data['end']) . "{$fspane}{$fspans} n/a {$fspane}{$fspans} n/a {$fspane}{$fspans}{$data['online']}{$fspane}{$fspans}{$data['act']}{$fspane}"; + echo "\"add\""; + echo "\"add\""; + echo "\"delete\"
                            +
                            +

                            Delegated Prefixes

                            + + + + + + + + + +"; + $fspane = " "; + } else { + $fspans = ""; + $fspane = " "; + } + + if ($data['act'] == "static") { + foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf) { + if(is_array($dhcpifconf['staticmap'])) { + foreach ($dhcpifconf['staticmap'] as $staticent) { + if ($data['ip'] == $staticent['ipaddr']) { + $data['if'] = $dhcpif; + break; + } + } + } + /* exit as soon as we have an interface */ + if ($data['if'] != "") + break; + } + } else { + $data['if'] = convert_real_interface_to_friendly_interface_name(guess_interface_from_ip($data['ip'])); + } + echo "\n"; + if ($mappings[$data['iaid'] . $data['duid']]) { + $dip = "
                            Routed To: {$mappings[$data['iaid'] . $data['duid']]}"; + } + echo "\n"; + echo "\n"; + echo "\n"; + if ($data['type'] != "static") { + echo "\n"; + echo "\n"; + } else { + echo "\n"; + echo "\n"; + } + echo "\n"; + echo "\n"; + } +} +?> +
                            {$fspans}{$data['prefix']}{$dip}{$fspane}{$fspans}{$data['iaid']}{$fspane}{$fspans}{$data['duid']}{$fspane}{$fspans}" . adjust_gmt($data['start']) . "{$fspane}{$fspans}" . adjust_gmt($data['end']) . "{$fspane}{$fspans} n/a {$fspane}{$fspans} n/a {$fspane}{$fspans}{$data['act']}{$fspane}
                            +
                            +
                            + + + +" /> + + +" /> + +
                            + +

                            ?

                            + + + + + diff --git a/usr/local/www/status_filter_reload.php b/usr/local/www/status_filter_reload.php new file mode 100644 index 000000000..9b0471669 --- /dev/null +++ b/usr/local/www/status_filter_reload.php @@ -0,0 +1,176 @@ + + + + + +
                            +
                            + + +     + + +
                            +


                            +
                            + +
                            + +
                            +
                            + +
                            + +
                            .
                            + + + + + + + + + + + diff --git a/usr/local/www/status_gateway_groups.php b/usr/local/www/status_gateway_groups.php new file mode 100755 index 000000000..29677c6bd --- /dev/null +++ b/usr/local/www/status_gateway_groups.php @@ -0,0 +1,165 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-status-gatewaygroups +##|*NAME=Status: Gateway Groups page +##|*DESCR=Allow access to the 'Status: Gateway Groups' page. +##|*MATCH=status_gateway_groups.php* +##|-PRIV + +require("guiconfig.inc"); + +if (!is_array($config['gateways']['gateway_group'])) + $config['gateways']['gateway_group'] = array(); + +$a_gateway_groups = &$config['gateways']['gateway_group']; +$changedesc = gettext("Gateway Groups") . ": "; + +$gateways_status = return_gateways_status(); + +$pgtitle = array(gettext("Status"),gettext("Gateway Groups")); +$shortcut_section = "gateway-groups"; +include("head.inc"); + +?> + + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + +
                            + + + + + "; + foreach($priorities as $number => $tier) { + echo ""; + } + echo "\n"; + + /* inverse gateway group to gateway priority */ + $priority_arr = array(); + foreach($gateway_group['item'] as $item) { + $itemsplit = explode("|", $item); + $priority_arr[$itemsplit[1]][] = $itemsplit[0]; + } + ksort($priority_arr); + $p = 1; + foreach($priority_arr as $number => $tier) { + /* for each priority process the gateways */ + foreach($tier as $member) { + /* we always have $priority_count fields */ + echo ""; + $c = 1; + while($c <= $priority_count) { + $monitor = lookup_gateway_monitor_ip_by_name($member); + if($p == $c) { + $status = $gateways_status[$monitor]['status']; + if (stristr($status, "down")) { + $online = gettext("Offline"); + $bgcolor = "#F08080"; // lightcoral + } elseif (stristr($status, "loss")) { + $online = gettext("Warning, Packetloss"); + $bgcolor = "#F0E68C"; // khaki + } elseif (stristr($status, "delay")) { + $online = gettext("Warning, Latency"); + $bgcolor = "#F0E68C"; // khaki + } elseif ($status == "none") { + $online = gettext("Online"); + $bgcolor = "#90EE90"; // lightgreen + } else { + $online = gettext("Gathering data"); + $bgcolor = "#ADD8E6"; // lightblue + } + echo ""; + } else { + echo ""; + } + $c++; + } + echo "\n"; + } + $p++; + } + ?> +
                            " . sprintf(gettext("Tier %s"), $number) . "
                             ". htmlspecialchars($member) .", $online  
                            +
                            +   +
                            +
                            +
                            + + + diff --git a/usr/local/www/status_gateways.php b/usr/local/www/status_gateways.php new file mode 100644 index 000000000..858a179ed --- /dev/null +++ b/usr/local/www/status_gateways.php @@ -0,0 +1,160 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-status-gateways +##|*NAME=Status: Gateways page +##|*DESCR=Allow access to the 'Status: Gateways' page. +##|*MATCH=status_gateways.php* +##|-PRIV + +require("guiconfig.inc"); + +$a_gateways = return_gateways_array(); +$gateways_status = array(); +$gateways_status = return_gateways_status(true); + +$now = time(); +$year = date("Y"); + +$pgtitle = array(gettext("Status"),gettext("Gateways")); +$shortcut_section = "gateways"; +include("head.inc"); + +?> + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + $gateway) { + ?> + + + + + + + + + + +
                            + + + + + + + + + + + + + + "; + ?> +
                             $online 
                            "; + $lastchange = $gateways_status[$gname]['lastcheck']; + if(!empty($lastchange)) { + echo gettext("Last check:") . '
                            ' . $lastchange; + } + echo "
                            +
                            +
                            +
                            + + + + diff --git a/usr/local/www/status_graph.php b/usr/local/www/status_graph.php new file mode 100644 index 000000000..745780421 --- /dev/null +++ b/usr/local/www/status_graph.php @@ -0,0 +1,347 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-status-trafficgraph +##|*NAME=Status: Traffic Graph page +##|*DESCR=Allow access to the 'Status: Traffic Graph' page. +##|*MATCH=status_graph.php* +##|*MATCH=bandwidth_by_ip.php* +##|*MATCH=graph.php* +##|*MATCH=ifstats.php* +##|-PRIV + +require("guiconfig.inc"); + +if ($_POST['width']) + $width = $_POST['width']; +else + $width = "100%"; + +if ($_POST['height']) + $height = $_POST['height']; +else + $height = "200"; + +// Get configured interface list +$ifdescrs = get_configured_interface_with_descr(); +if (isset($config['ipsec']['enable'])) + $ifdescrs['enc0'] = "IPsec"; +foreach (array('server', 'client') as $mode) { + if (is_array($config['openvpn']["openvpn-{$mode}"])) { + foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) { + if (!isset($setting['disable'])) { + $ifdescrs['ovpn' . substr($mode, 0, 1) . $setting['vpnid']] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']); + } + } + } +} + +if ($_GET['if']) { + $curif = $_GET['if']; + $found = false; + foreach($ifdescrs as $descr => $ifdescr) { + if ($descr == $curif) { + $found = true; + break; + } + } + if ($found === false) { + header("Location: status_graph.php"); + exit; + } +} else { + if (empty($ifdescrs["wan"])) { + /* Handle the case when WAN has been disabled. Use the first key in ifdescrs. */ + reset($ifdescrs); + $curif = key($ifdescrs); + } + else { + $curif = "wan"; + } +} +if ($_GET['sort']) { + $cursort = $_GET['sort']; +} else { + $cursort = ""; +} +if ($_GET['filter']) { + $curfilter = $_GET['filter']; +} else { + $curfilter = ""; +} +if ($_GET['hostipformat']) { + $curhostipformat = $_GET['hostipformat']; +} else { + $curhostipformat = ""; +} + +$pgtitle = array(gettext("Status"),gettext("Traffic Graph")); + +include("head.inc"); + +?> + + + + + + + +
                            +: + +, Sort by: + +, Filter: + +, Display: + +
                            +

                             

                            +
                            +
                            + + + + + + + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +
                            +
                            +
                            +

                            : , .

                            + + + + + + diff --git a/usr/local/www/status_graph_cpu.php b/usr/local/www/status_graph_cpu.php new file mode 100644 index 000000000..4e218146a --- /dev/null +++ b/usr/local/www/status_graph_cpu.php @@ -0,0 +1,54 @@ +. + 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. +*/ +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-status-cpuload +##|*NAME=Status: CPU load page +##|*DESCR=Allow access to the 'Status: CPU load' page. +##|*MATCH=status_graph_cpu.php* +##|-PRIV + +$pgtitle = array(gettext("Status"), gettext("CPU load")); +require("guiconfig.inc"); +include("head.inc"); +include("fbegin.inc"); + +$pgtitle = gettext("Status: CPU Graph"); + +?> +
                            + +
                            +
                            : . + diff --git a/usr/local/www/status_interfaces.php b/usr/local/www/status_interfaces.php new file mode 100644 index 000000000..4e10fe118 --- /dev/null +++ b/usr/local/www/status_interfaces.php @@ -0,0 +1,474 @@ +. + All rights reserved. + + originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2005 Manuel Kasper . + 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. +*/ +/* + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-status-interfaces +##|*NAME=Status: Interfaces page +##|*DESCR=Allow access to the 'Status: Interfaces' page. +##|*MATCH=status_interfaces.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("shaper.inc"); +require_once("filter.inc"); + +if ($_POST['if'] && $_POST['submit']) { + $interface = $_POST['if']; + if ($_POST['status'] == "up") + interface_bring_down($interface); + else + interface_configure($interface); + header("Location: status_interfaces.php"); + exit; +} + +$pgtitle = array(gettext("Status"),gettext("Interfaces")); +$shortcut_section = "interfaces"; +include("head.inc"); + +?> + + + + + $ifname): + $ifinfo = get_interface_info($ifdescr); + // Load MAC-Manufacturer table + $mac_man = load_mac_manufacturer_table(); +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + (, ) +
                            + +
                            + DHCP + +
                            + + +    + + +
                            +
                            + DHCP6 + +
                            + + +    + + +
                            +
                            +
                            + + +    + + +
                            +
                            +
                            + + +    + + +
                            +
                            +
                            + + +    + + +
                            +
                            +
                            + + + + + " /> + + + " /> + + +
                            +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + kbit/s +
                            + kbit/s +
                            + kbit/s +
                            + kbit/s +
                            + " . $mac . " - " . htmlspecialchars($mac_man[$mac_hi]); print ""; } + else {print htmlspecialchars($mac);} + ?> +
                            + +   +
                            + +
                            + + +
                            + +   +
                            + +   +
                            + +
                            + + +
                            + "; + } + ?> +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + "; + echo $interrupt_sec . " " . gettext("rate"); + ?> +
                            + +
                            + +','')?> + + + + diff --git a/usr/local/www/status_lb_pool.php b/usr/local/www/status_lb_pool.php new file mode 100644 index 000000000..0e39316e9 --- /dev/null +++ b/usr/local/www/status_lb_pool.php @@ -0,0 +1,228 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-status-loadbalancer-pool +##|*NAME=Status: Load Balancer: Pool page +##|*DESCR=Allow access to the 'Status: Load Balancer: Pool' page. +##|*MATCH=status_lb_pool.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("vslb.inc"); + +if (!is_array($config['load_balancer']['lbpool'])) { + $config['load_balancer']['lbpool'] = array(); +} +$a_pool = &$config['load_balancer']['lbpool']; + +$lb_logfile = "{$g['varlog_path']}/relayd.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +$now = time(); +$year = date("Y"); + +$pgtitle = array(gettext("Status"),gettext("Load Balancer"),gettext("Pool")); +$shortcut_section = "relayd"; +include("head.inc"); + +$relay_hosts = get_lb_summary(); + +if ($_POST) { + if ($_POST['apply']) { + $retval = 0; + $retval |= filter_configure(); + $retval |= relayd_configure(); + $savemsg = get_std_save_message($retval); + clear_subsystem_dirty('loadbalancer'); + } else { + /* Keep a list of servers we find in POST variables */ + $newservers = array(); + foreach ($_POST as $name => $value) { + /* Look through the POST vars to find the pool data */ + if (strpos($name, '|') !== false){ + list($poolname, $ip) = explode("|", $name); + $ip = str_replace('_', '.', $ip); + $newservers[$poolname][] = $ip; + } elseif (is_ipaddr($value)) { + $newservers[$name][] = $value; + } + } + foreach ($a_pool as & $pool) { + if (is_array($pool['servers']) && is_array($pool['serversdisabled'])) { + $oldservers = array_merge($pool['servers'], $pool['serversdisabled']); + } elseif (is_array($pool['servers'])) { + $oldservers = $pool['servers']; + } elseif (is_array($pool['serversdisabled'])) { + $oldservers = $pool['serversdisabled']; + } else { + $oldservers = array(); + } + if (is_array($newservers[$pool['name']])) { + $pool['servers'] = $newservers[$pool['name']]; + $pool['serversdisabled'] = array_diff($oldservers, $newservers[$pool['name']]); + } + } + mark_subsystem_dirty('loadbalancer'); + write_config("Updated load balancer pools via status screen."); + } +} + +?> + + +
                            +
                            +"));?>
                            + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + +
                            + + + + + + "; + switch ($pool['mode']) { + case 'loadbalance': + echo "\n"; + break; + case 'failover': + echo "\n"; + break; + } + echo ""; + } + } + ?> +
                             {$server['ip']['addr']}:{$pool['port']}  "; +# echo " {$server['ip']['addr']}:{$pool['port']} "; + if($server['ip']['avail']) + echo " ({$server['ip']['avail']}) "; + echo " 
                            +
                            + + + +
                            + " /> + " /> +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/status_lb_vs.php b/usr/local/www/status_lb_vs.php new file mode 100644 index 000000000..5ea0af455 --- /dev/null +++ b/usr/local/www/status_lb_vs.php @@ -0,0 +1,145 @@ +. + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/local/sbin/relayctl + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-status-loadbalancer-virtualserver +##|*NAME=Status: Load Balancer: Virtual Server page +##|*DESCR=Allow access to the 'Status: Load Balancer: Virtual Server' page. +##|*MATCH=status_lb_vs.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("vslb.inc"); + +if (!is_array($config['load_balancer']['lbpool'])) { + $config['load_balancer']['lbpool'] = array(); +} +if (!is_array($config['load_balancer']['virtual_server'])) { + $config['load_balancer']['virtual_server'] = array(); +} +$a_vs = &$config['load_balancer']['virtual_server']; +$a_pool = &$config['load_balancer']['lbpool']; +$rdr_a = get_lb_redirects(); + +$pgtitle = array(gettext("Status"),gettext("Load Balancer"),gettext("Virtual Server")); +include("head.inc"); + +?> + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + +
                            + + + +
                            +
                            + + "; + } + } + } + ?> +
                            {$server}
                            +
                            + + +
                            + Last: {$rdr_a[$vsent['name']]['last']}\n"; + if (!empty($rdr_a[$vsent['name']]['average'])) + echo "
                            Average: {$rdr_a[$vsent['name']]['average']}\n"; + ?> +
                            + +
                            +
                            +
                            + + + + diff --git a/usr/local/www/status_ntpd.php b/usr/local/www/status_ntpd.php new file mode 100644 index 000000000..1bda7a40d --- /dev/null +++ b/usr/local/www/status_ntpd.php @@ -0,0 +1,271 @@ + + + + + +
                            + + +
                            Network Time Protocol Status
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + Statistics unavailable because ntpq and ntpdc queries are disabled in the NTP service settings. +
                            + No peers found, is the ntp service running?. +
                            + + + + + + + + + + + + + + + + + + + + + +
                            + + + + + + + + ' . gettext("Clock Altitude") . ''; $gps_goo_lnk++;}?> + ' . gettext("Satellites") . ''; $gps_goo_lnk++;}?> + + + + + + + ' . $gps_alt . ' ' . $gps_alt_unit . '';}?> + '; + if (isset($gps_satview)) {echo 'in view ' . intval($gps_satview);} + if (isset($gps_sat) && isset($gps_satview)) {echo ', ';} + if (isset($gps_sat)) {echo 'in use ' . $gps_sat;} + echo ''; + } + ?> + + + + + +
                            (° ) (° )
                            Google Maps Link
                            + +
                            + + + diff --git a/usr/local/www/status_openvpn.php b/usr/local/www/status_openvpn.php new file mode 100644 index 000000000..726f5d70d --- /dev/null +++ b/usr/local/www/status_openvpn.php @@ -0,0 +1,412 @@ + + +"> + +
                            + + + + + + + + + + + +
                            + +
                            + + + + + + + + + + + + "> + + + + + + + + + + + + + + + + +
                            + + + + + + + + + + + + + " + title="" alt="delete" /> +
                            + + + + +
                            + +
                            +
                             
                            +
                            + +
                            +" /> - +

                            +
                            + + + + + + + + + +
                            + + +
                            + + + + + + + + + +
                            + +
                            + + + + + + + + + + + + + + "> + + + + + + + + + + +
                            + + + + + + + + + + + + + + + + + + +
                            + +
                            +
                            +
                            + + +
                            + + + + + + + + +
                            + +
                            + + + + + + + + + + + + + + "> + + + + + + + + + + +
                            + + + + + + + + + + + + + + + + + + +
                            + +
                            +
                            +
                            + +" . gettext("NOTE") . ": " . gettext("If you have custom options that override the management features of OpenVPN on a client or server, they will cause that OpenVPN instance to not work correctly with this status page."); +} + +if ((empty($clients)) && (empty($servers)) && (empty($sk_servers))) { + echo gettext("No OpenVPN instance defined"); +} +?> +
                            + + + + + diff --git a/usr/local/www/status_queues.php b/usr/local/www/status_queues.php new file mode 100644 index 000000000..04252ee92 --- /dev/null +++ b/usr/local/www/status_queues.php @@ -0,0 +1,299 @@ +#!/usr/local/bin/php +pps) + $bigger_stat = $q->pps; + } + } + else + { + foreach($statistics as $q) { + if ($bigger_stat < $q->bandwidth) + $bigger_stat = $q->bandwidth; + } + } + $finscript = ""; + foreach($statistics as $q) { + if ($stat_type == "0") + $packet_s = round(150 * (1 - $q->pps / $bigger_stat), 0); + else + $packet_s = round(150 * (1 - $q->bandwidth / $bigger_stat), 0); + if ($packet_s < 0) {$packet_s = 0;} + $finscript .= "jQuery('#queue{$q->queuename}widthb').width('{$packet_s}');"; + $finscript .= "jQuery('#queue{$q->queuename}widtha').width('" . (150 - $packet_s) . "');"; + $finscript .= "jQuery('#queue{$q->queuename}pps').val('" . number_format($q->pps,1) . "');"; + $finscript .= "jQuery('#queue{$q->queuename}bps').val('" . format_bits($q->bandwidth) . "');"; + $finscript .= "jQuery('#queue{$q->queuename}borrows').val('{$q->borrows}');"; + $finscript .= "jQuery('#queue{$q->queuename}suspends').val('{$q->suspends}');"; + $finscript .= "jQuery('#queue{$q->queuename}drops').val('{$q->drops}');"; + $finscript .= "jQuery('#queue{$q->queuename}length').val('{$q->queuelength}');"; + } + unset($statistics, $altqstats); + header("Content-type: text/javascript"); + echo $finscript; + exit; +} +$pgtitle = array(gettext("Status"),gettext("Traffic shaper"),gettext("Queues")); +$shortcut_section = "trafficshaper"; +include("head.inc"); +?> + + +"; + exit;} +?> + +
                            + + + + + + + + + + + + + + + + + + +
                            + + +
                            +

                            + :
                            + .
                            + . +

                            + +
                            + + + + 250) $gray_value = 255; + $row_background = str_repeat(dechex($gray_value), 3); + $parent_name = $parent_name . " queuerow" . $altqstats['name'] . $altqstats['interface']; + $prev_if = $altqstats['interface']; + foreach ($altqstats['queue'] as $q) { + $if_name = ""; + foreach ($if_queue_list as $oif => $real_name) { + if ($oif == $q['interface']) { + $if_name = $real_name; + break; + } + } + if ($prev_if != $q['interface']) { + echo "Interface ". htmlspecialchars(convert_real_interface_to_friendly_descr($q['interface'])) . ""; + $prev_if = $q['interface']; + } + ?> + + + + Root queue"; + else + echo "" . htmlspecialchars($q['name']) . ""; + ?> + + + "; + echo ""; + echo "" . htmlspecialchars($q["; + echo "" . htmlspecialchars($q["; + echo " "; + if (is_array($q['queue'])) { + echo "+/- "; + } + echo " "; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + ?> + + queuename = $xml['name'] . $xml['interface']; + $current->queuelength = $xml['qlength']; + $current->pps = $xml['measured']; + $current->bandwidth = $xml['measuredspeedint']; + $current->borrows = intval($xml['borrows']); + $current->suspends = intval($xml['suspends']); + $current->drops = intval($xml['droppedpkts']); + if (is_array($xml['queue'])) { + foreach($xml['queue'] as $q) { + $child = statsQueues($q); + $current->pps += $child->pps; + $current->bandwidth += $child->bandwidth; + $current->borrows += $child->borrows; + $current->suspends += $child->suspends; + $current->drops += $child->drops; + } + } + unset($child); + $statistics[] = $current; + return $current; +} +function format_bits($bits) { + if ($bits >= 1000000000) { + return sprintf("%.2f Gbps", $bits/1000000000); + } else if ($bits >= 1000000) { + return sprintf("%.2f Mbps", $bits/1000000); + } else if ($bits >= 1000) { + return sprintf("%.2f Kbps", $bits/1000); + } else { + return sprintf("%d bps", $bits); + } +} +?> diff --git a/usr/local/www/status_rrd_graph.php b/usr/local/www/status_rrd_graph.php new file mode 100644 index 000000000..d64f9ec81 --- /dev/null +++ b/usr/local/www/status_rrd_graph.php @@ -0,0 +1,749 @@ + + 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. +*/ +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-status-rrdgraphs +##|*NAME=Status: RRD Graphs page +##|*DESCR=Allow access to the 'Status: RRD Graphs' page. +##|*MATCH=status_rrd_graph.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("filter.inc"); +require("shaper.inc"); +require_once("rrd.inc"); + +unset($input_errors); + +/* if the rrd graphs are not enabled redirect to settings page */ +if(! isset($config['rrd']['enable'])) { + header("Location: status_rrd_graph_settings.php"); +} + +$rrddbpath = "/var/db/rrd/"; +chdir($rrddbpath); +$databases = glob("*.rrd"); + + +if ($_GET['cat']) { + $curcat = htmlspecialchars($_GET['cat']); +} else { + if(! empty($config['rrd']['category'])) { + $curcat = $config['rrd']['category']; + } else { + $curcat = "system"; + } +} + +if ($_GET['zone']) + $curzone = $_GET['zone']; +else + $curzone = ''; + +if ($_GET['period']) { + $curperiod = $_GET['period']; +} else { + if(! empty($config['rrd']['period'])) { + $curperiod = $config['rrd']['period']; + } else { + $curperiod = "absolute"; + } +} + +if ($_GET['option']) { + $curoption = $_GET['option']; +} else { + switch($curcat) { + case "system": + $curoption = "processor"; + break; + case "queues": + $curoption = "queues"; + break; + case "queuedrops": + $curoption = "queuedrops"; + break; + case "quality": + foreach($databases as $database) { + if(preg_match("/[-]quality\.rrd/i", $database)) { + /* pick off the 1st database we find that matches the quality graph */ + $name = explode("-", $database); + $curoption = "$name[0]"; + continue 2; + } + } + case "wireless": + foreach($databases as $database) { + if(preg_match("/[-]wireless\.rrd/i", $database)) { + /* pick off the 1st database we find that matches the wireless graph */ + $name = explode("-", $database); + $curoption = "$name[0]"; + continue 2; + } + } + case "cellular": + foreach($databases as $database) { + if(preg_match("/[-]cellular\.rrd/i", $database)) { + /* pick off the 1st database we find that matches the celullar graph */ + $name = explode("-", $database); + $curoption = "$name[0]"; + continue 2; + } + } + case "vpnusers": + foreach($databases as $database) { + if(preg_match("/[-]vpnusers\.rrd/i", $database)) { + /* pick off the 1st database we find that matches the VPN graphs */ + $name = explode("-", $database); + $curoption = "$name[0]"; + continue 2; + } + } + case "captiveportal": + $curoption = "allgraphs"; + break; + case "ntpd": + if(isset($config['ntpd']['statsgraph'])) { + $curoption = "allgraphs"; + } else { + $curoption = "processor"; + $curcat = "system"; + } + break; + default: + $curoption = "wan"; + break; + } +} + +$now = time(); +if($curcat == "custom") { + if (is_numeric($_GET['start'])) { + if($start < ($now - (3600 * 24 * 365 * 5))) { + $start = $now - (8 * 3600); + } + $start = $_GET['start']; + } else if ($_GET['start']) { + $start = strtotime($_GET['start']); + if ($start === FALSE || $start === -1) { + $input_errors[] = gettext("Invalid start date/time:") . " '{$_GET['start']}'"; + $start = $now - (8 * 3600); + } + } else { + $start = $now - (8 * 3600); + } +} + +if (is_numeric($_GET['end'])) { + $end = $_GET['end']; +} else if ($_GET['end']) { + $end = strtotime($_GET['end']); + if ($end === FALSE || $end === -1) { + $input_errors[] = gettext("Invalid end date/time:") . " '{$_GET['end']}'"; + $end = $now; + } +} else { + $end = $now; +} + +/* this should never happen */ +if($end < $start) { + log_error("start $start is smaller than end $end"); + $end = $now; +} + +$seconds = $end - $start; + +$styles = array('inverse' => gettext('Inverse'), + 'absolute' => gettext('Absolute')); + +// Set default and override later +$curstyle = "inverse"; + +if ($_GET['style']) { + foreach($styles as $style) + if(strtoupper($style) == strtoupper($_GET['style'])) + $curstyle = $_GET['style']; +} else { + if(! empty($config['rrd']['style'])) { + $curstyle = $config['rrd']['style']; + } else { + $curstyle = "inverse"; + } +} + +/* sort names reverse so WAN comes first */ +rsort($databases); + +/* these boilerplate databases are required for the other menu choices */ +$dbheader = array("allgraphs-traffic.rrd", + "allgraphs-quality.rrd", + "allgraphs-wireless.rrd", + "allgraphs-cellular.rrd", + "allgraphs-vpnusers.rrd", + "allgraphs-packets.rrd", + "system-allgraphs.rrd", + "system-throughput.rrd", + "outbound-quality.rrd", + "outbound-packets.rrd", + "outbound-traffic.rrd"); + +/* additional menu choices for the custom tab */ +$dbheader_custom = array("system-throughput.rrd"); + +foreach($databases as $database) { + if(stristr($database, "-wireless")) { + $wireless = true; + } + if(stristr($database, "-queues")) { + $queues = true; + } + if(stristr($database, "-cellular") && !empty($config['ppps'])) { + $cellular = true; + } + if(stristr($database, "-vpnusers")) { + $vpnusers = true; + } + if(stristr($database, "captiveportal-") && is_array($config['captiveportal'])) { + $captiveportal = true; + } + if(stristr($database, "ntpd") && isset($config['ntpd']['statsgraph'])) { + $ntpd = true; + } +} +/* append the existing array to the header */ +$ui_databases = array_merge($dbheader, $databases); +$custom_databases = array_merge($dbheader_custom, $databases); + +$graphs = array("eighthour", "day", "week", "month", "quarter", "year", "fouryear"); +$periods = array("absolute" => gettext("Absolute Timespans"), "current" => gettext("Current Period"), "previous" => gettext("Previous Period")); +$graph_length = array( + "eighthour" => 28800, + "day" => 86400, + "week" => 604800, + "month" => 2678400, + "quarter" => 7948800, + "year" => 31622400, + "fouryear" => 126230400); + +$pgtitle = array(gettext("Status"),gettext("RRD Graphs")); + +$closehead = false; + +/* Load all CP zones */ +if ($captiveportal && is_array($config['captiveportal'])) { + $cp_zones_tab_array = array(); + foreach($config['captiveportal'] as $cpkey => $cp) { + if (!isset($cp['enable'])) + continue; + + if ($curzone == '') { + $tabactive = true; + $curzone = $cpkey; + } elseif ($curzone == $cpkey) { + $tabactive = true; + } else { + $tabactive = false; + } + + $cp_zones_tab_array[] = array($cp['zone'], $tabactive, "status_rrd_graph.php?cat=captiveportal&zone=$cpkey"); + } +} + +include("head.inc"); +?> + + + + + + + + + + + + +"; + $dates = array(); + $dates['start'] = $start; + $dates['end'] = $end; + return $dates; +} + +?> + + + + +
                            + + + + + + + + + + + + +
                            + " /> + +
                            + +
                            +
                            + + + + + + \n"; + } + ?> + + + + + + " /> + + \n"; + } + } else { + foreach($graphs as $graph) { + /* check which databases are valid for our category */ + foreach($ui_databases as $curdatabase) { + if(! preg_match("/($curcat)/i", $curdatabase)) + continue; + + if (($curcat == "captiveportal") && !empty($curzone) && !preg_match("/captiveportal-{$curzone}/i", $curdatabase)) + continue; + + $optionc = explode("-", $curdatabase); + $search = array("-", ".rrd", $optionc); + $replace = array(" :: ", "", $friendly); + switch($curoption) { + case "outbound": + /* make sure we do not show the placeholder databases in the outbound view */ + if((stristr($curdatabase, "outbound")) || (stristr($curdatabase, "allgraphs"))) { + continue 2; + } + /* only show interfaces with a gateway */ + $optionc = "$optionc[0]"; + if(!interface_has_gateway($optionc)) { + if(!isset($gateways_arr)) { + if(preg_match("/quality/i", $curdatabase)) + $gateways_arr = return_gateways_array(); + else + $gateways_arr = array(); + } + $found_gateway = false; + foreach ($gateways_arr as $gw) { + if ($gw['name'] == $optionc) { + $found_gateway = true; + break; + } + } + if(!$found_gateway) { + continue 2; + } + } + if(! preg_match("/(^$optionc-|-$optionc\\.)/i", $curdatabase)) { + continue 2; + } + break; + case "allgraphs": + /* make sure we do not show the placeholder databases in the all view */ + if((stristr($curdatabase, "outbound")) || (stristr($curdatabase, "allgraphs"))) { + continue 2; + } + break; + default: + /* just use the name here */ + if(! preg_match("/(^$curoption-|-$curoption\\.)/i", $curdatabase)) { + continue 2; + } + } + if(in_array($curdatabase, $ui_databases)) { + $id = "{$graph}-{$curoption}-{$curdatabase}"; + $id = preg_replace('/\./', '_', $id); + + $dates = get_dates($curperiod, $graph); + $start = $dates['start']; + $end = $dates['end']; + echo "\n"; + } + } + } + } + ?> + + + +

                            + + + + + + + + + + "custom") { + ?> + + \n"; + echo "
                            \n"; + echo "\"$prettydb\n"; + echo "


                            \n"; + echo "
                            \n"; + echo "\"$prettydb\n"; + echo "


                            \n"; + echo "
                            + +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/status_rrd_graph_img.php b/usr/local/www/status_rrd_graph_img.php new file mode 100644 index 000000000..868e3a13f --- /dev/null +++ b/usr/local/www/status_rrd_graph_img.php @@ -0,0 +1,1283 @@ + + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /bin/rm /usr/local/bin/rrdtool + pfSense_MODULE: system +*/ + +require_once("globals.inc"); +require_once("guiconfig.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("rrd.inc"); + +global $g; + +$pgtitle = array(gettext("System"),gettext("RRD Graphs"),gettext("Image viewer")); + +if ($_GET['database']) { + $curdatabase = basename($_GET['database']); + $curdatabase = str_replace(array("<", ">", ";", "&", "'", '"'), "", htmlspecialchars_decode($curdatabase, ENT_QUOTES | ENT_HTML401)); +} else { + $curdatabase = "wan-traffic.rrd"; +} + +if ($_GET['style']) { + $curstyle = $_GET['style']; +} else { + $curstyle = "inverse"; +} + +/* this is used for temp name */ +if ($_GET['graph']) { + $curgraph = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['graph'], ENT_QUOTES | ENT_HTML401)); +} else { + $curgraph = "custom"; +} + +$now = time(); + +if (is_numeric($_GET['start'])) { + $start = $_GET['start']; +} else { + $start = $now - (8 * 3600); +} + +if (is_numeric($_GET['end'])) { + $end = $_GET['end']; +} else { + $end = $now; +} + +/* this should never happen */ +if($end < $start) { + log_error("start $start is smaller than end $end"); + $end = $now; +} + +$seconds = $end - $start; + +$scales = array(); +$scales[14400] = "MINUTE:5:MINUTE:10:MINUTE:30:0:%H%:%M"; +$scales[57600] = "MINUTE:30:HOUR:1:HOUR:1:0:%H"; +$scales[172800] = "HOUR:1:HOUR:6:HOUR:2:0:%H"; +$scales[691200] = "HOUR:2:HOUR:12:DAY:1:0:%D %d"; +$scales[2764800] = "DAY:1:WEEK:1:WEEK:1:0:Week %W"; +$scales[16070400] = "WEEK:1:MONTH:1:MONTH:1:0:%b"; +$scales[42854400] = "MONTH:1:MONTH:1:MONTH:1:0:%b"; + +$archives = array(); +$archives[1] = 1200; +$archives[5] = 720; +$archives[60] = 1860; +$archives[1440] = 2284; + +$defOptions = array( + 'to' => 1, + 'parts' => 1, + 'precision' => 'minute', + 'distance' => FALSE, + 'separator' => ', ' +); + +/* always set the average to the highest value as a fallback */ +$average = 1440 * 60; +foreach($archives as $rra => $value) { + $archivestart = $now - ($rra * 60 * $value); + if($archivestart <= $start) { + $average = $rra * 60; + break; + } +} + +foreach($scales as $scalelength => $value) { + if($scalelength >= $seconds) { + $scale = $value; + break; + } +} + +// log_error("start $start, end $end, archivestart $archivestart, average $average, scale $scale, seconds $seconds"); + +/* Deduce a interface if possible and use the description */ +$curif = explode("-", $curdatabase); +$curif = "$curif[0]"; +$friendly = convert_friendly_interface_to_friendly_descr(strtolower($curif)); +if($friendly == "") { + $friendly = $curif; +} +$search = array("-", ".rrd", $curif); +$replace = array(" :: ", "", $friendly); +$prettydb = ucwords(str_replace($search, $replace, $curdatabase)); + + +$rrddbpath = "/var/db/rrd/"; +$rrdtmppath = "/tmp/"; +$rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; +$uptime = "/usr/bin/uptime"; +$sed = "/usr/bin/sed"; + +$havg = timeDiff($average, $defOptions); +$hperiod = timeDiff($seconds, $defOptions); +$data = true; + +/* Don't leave it up to RRD Tool to select the RRA and resolution to use. */ +/* Specify the RRA and resolution to use per the graph havg value. */ +switch ($havg) { + case "1 minute": $step = 60; break; + case "5 minutes": $step = 300; break; + case "1 hour": $step = 3600; break; + case "1 day": $step = 86400; break; + default: $step = 0; break; +} + +$rrddbpath = "/var/db/rrd/"; +chdir($rrddbpath); +$databases = glob("*.rrd"); +rsort($databases); + +/* compare bytes/sec counters, divide bps by 8 */ +read_altq_config(); +if ($altq_list_queues[$curif]) { + $altq =& $altq_list_queues[$curif]; + switch ($altq->GetBwscale()) { + case "Gb": + $factor = 1024 * 1024 * 1024; + break; + case "Mb": + $factor = 1024 * 1024; + break; + case "Kb": + $factor = 1024; + break; + case "b": + default: + $factor = 1; + break; + } + $upstream = (($altq->GetBandwidth()*$factor)/8); + if ($upstream != 0) + $downstream = $upstream; /* XXX: Ugly hack */ + else + $downstream = $upstream = 12500000; + $upif = $curif; + $downif = "lan"; /* XXX should this be set to something else?! */ +} else { + $altq = null; + $downstream = 12500000; + $upstream = 12500000; + $upif = "wan"; + $downif = "lan"; +} + +$speedlimit = ($upstream + $downstream); + +/* Set default colors explicitly, the theme can then override them below. + This prevents missing colors in themes from crashing the graphs. */ +/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* 95th Percentile Lines Out, In */ +$colortraffic95 = array('660000', 'FF0000'); + +/* State Table pfrate, pfstates, pfnat, srcip, dstip */ +$colorstates = array('00AA00','990000','0000FF','000000','DD9B00'); + +/* Processor Usage user, nice, system, int, processes */ +$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000'); + +/* Memory Usage active, inact, free, cache, wire */ +$colormemory = array('00AA00','990000','0000FF','666666','DD9B00'); + +/* MBUF Usage current, cache, total, max */ +$colormbuf = array('0080FF','00E344','FF0000','000000'); + +/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */ +$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */ +$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000'); +/* Quality Graph Loss */ +$colorqualityloss = 'ee0000'; + +/* Wireless Graph SNR, Rate, Channel*/ +/* Cellular Graph RSSI, */ +$colorwireless = array('333333','a83c3c','999999'); + +/* SPAMD Times min area, avg area, max area, Time line */ +$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066'); +/* SPAMD Connections max area, min area, min line, max line, avg line */ +$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600'); + +/* OpenVPN Users Online Users */ +$colorvpnusers = array('990000'); + +/* NTPD stats offset, clk jit, sys jit, wander */ +$colorntpd = array('0080FF','00E344','FF0000','000000'); + +/* Captive Portal Total Users Total Users */ +/* Captive Portal Concurrent Concurrent Users */ +$colorcaptiveportalusers = array('990000'); + +/* select theme colors if the inclusion file exists */ +$rrdcolors = "{$g['www_path']}/themes/{$g['theme']}/rrdcolors.inc.php"; +if(file_exists($rrdcolors)) { + include($rrdcolors); +} else { + log_error(sprintf(gettext("rrdcolors.inc.php for theme %s does not exist, using defaults!"),$g['theme'])); +} + +switch ($curstyle) { +case "absolute": + $multiplier = 1; + $AREA = "LINE1"; + break; +default: + $multiplier = -1; + $AREA = "AREA"; + break; +} + +function timeDiff($time, $opt = array()) { + // The default values + $defOptions = array( + 'to' => 0, + 'parts' => 1, + 'precision' => 'second', + 'distance' => TRUE, + 'separator' => ', ' + ); + $opt = array_merge($defOptions, $opt); + // Default to current time if no to point is given + (!$opt['to']) && ($opt['to'] = time()); + // Init an empty string + $str = ''; + // To or From computation + $diff = ($opt['to'] > $time) ? $opt['to'] - $time : $time - $opt['to']; + // An array of label => periods of seconds; + $periods = array( + 'decade' => 315569260, + 'year' => 31539600, + 'month' => 2629744, + 'week' => 604800, + 'day' => 86400, + 'hour' => 3600, + 'minute' => 60, + 'second' => 1 + ); + // 31539600, 31556926, 31622400 + // Round to precision + if ($opt['precision'] != 'second') + $diff = round(($diff / $periods[$opt['precision']])) * $periods[$opt['precision']]; + // Report the value is 'less than 1 ' precision period away + (0 == $diff) && ($str = 'less than 1 ' . $opt['precision']); + // Loop over each period + foreach ($periods as $label => $value) { + // Stitch together the time difference string + (($x = round($diff / $value)) && $opt['parts']--) && $str .= ($str ? $opt['separator'] : '') . ($x .' '. $label. ($x > 1 ? 's' : '')); + // Stop processing if no more parts are going to be reported. + if ($opt['parts'] == 0 || $label == $opt['precision']) break; + // Get ready for the next pass + $diff -= $x * $value; + } + $opt['distance'] && $str .= ($str && $opt['to'] >= $time) ? ' ago' : ' away'; + return $str; +} + + +if((strstr($curdatabase, "-traffic.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for traffic stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step --vertical-label \"bits/sec\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:$curif-in_bytes_pass=$rrddbpath$curdatabase:inpass:AVERAGE:step=$step "; + $graphcmd .= "DEF:$curif-out_bytes_pass=$rrddbpath$curdatabase:outpass:AVERAGE:step=$step "; + $graphcmd .= "DEF:$curif-in_bytes_block=$rrddbpath$curdatabase:inblock:AVERAGE:step=$step "; + $graphcmd .= "DEF:$curif-out_bytes_block=$rrddbpath$curdatabase:outblock:AVERAGE:step=$step "; + + $graphcmd .= "DEF:$curif-in6_bytes_pass=$rrddbpath$curdatabase:inpass6:AVERAGE:step=$step "; + $graphcmd .= "DEF:$curif-out6_bytes_pass=$rrddbpath$curdatabase:outpass6:AVERAGE:step=$step "; + $graphcmd .= "DEF:$curif-in6_bytes_block=$rrddbpath$curdatabase:inblock6:AVERAGE:step=$step "; + $graphcmd .= "DEF:$curif-out6_bytes_block=$rrddbpath$curdatabase:outblock6:AVERAGE:step=$step "; + + $graphcmd .= "CDEF:\"$curif-in_bits_pass=$curif-in_bytes_pass,8,*\" "; + $graphcmd .= "CDEF:\"$curif-out_bits_pass=$curif-out_bytes_pass,8,*\" "; + $graphcmd .= "CDEF:\"$curif-in_bits_block=$curif-in_bytes_block,8,*\" "; + $graphcmd .= "CDEF:\"$curif-out_bits_block=$curif-out_bytes_block,8,*\" "; + + $graphcmd .= "CDEF:\"$curif-in6_bits_pass=$curif-in6_bytes_pass,8,*\" "; + $graphcmd .= "CDEF:\"$curif-out6_bits_pass=$curif-out6_bytes_pass,8,*\" "; + $graphcmd .= "CDEF:\"$curif-in6_bits_block=$curif-in6_bytes_block,8,*\" "; + $graphcmd .= "CDEF:\"$curif-out6_bits_block=$curif-out6_bytes_block,8,*\" "; + + $graphcmd .= "CDEF:\"$curif-in_bytes=$curif-in_bytes_pass,$curif-in_bytes_block,+\" "; + $graphcmd .= "CDEF:\"$curif-out_bytes=$curif-out_bytes_pass,$curif-out_bytes_block,+\" "; + $graphcmd .= "CDEF:\"$curif-in_bits=$curif-in_bits_pass,$curif-in_bits_block,+\" "; + $graphcmd .= "CDEF:\"$curif-out_bits=$curif-out_bits_pass,$curif-out_bits_block,+\" "; + + $graphcmd .= "CDEF:\"$curif-in6_bytes=$curif-in6_bytes_pass,$curif-in6_bytes_block,+\" "; + $graphcmd .= "CDEF:\"$curif-out6_bytes=$curif-out6_bytes_pass,$curif-out6_bytes_block,+\" "; + $graphcmd .= "CDEF:\"$curif-in6_bits=$curif-in6_bits_pass,$curif-in6_bits_block,+\" "; + $graphcmd .= "CDEF:\"$curif-out6_bits=$curif-out6_bits_pass,$curif-out6_bits_block,+\" "; + + $graphcmd .= "CDEF:\"$curif-bits_io=$curif-in_bits,$curif-out_bits,+\" "; + $graphcmd .= "CDEF:\"$curif-out_bits_block_neg=$curif-out_bits_block,$multiplier,*\" "; + $graphcmd .= "CDEF:\"$curif-out_bits_pass_neg=$curif-out_bits_pass,$multiplier,*\" "; + + $graphcmd .= "CDEF:\"$curif-bits6_io=$curif-in6_bits,$curif-out6_bits,+\" "; + $graphcmd .= "CDEF:\"$curif-out6_bits_block_neg=$curif-out6_bits_block,$multiplier,*\" "; + $graphcmd .= "CDEF:\"$curif-out6_bits_pass_neg=$curif-out6_bits_pass,$multiplier,*\" "; + + $graphcmd .= "CDEF:\"$curif-bytes_in_pass=$curif-in_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_pass,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_out_pass=$curif-out_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_pass,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_in_block=$curif-in_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_block,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_out_block=$curif-out_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_block,IF,$average,*\" "; + + $graphcmd .= "CDEF:\"$curif-bytes_in6_pass=$curif-in6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_pass,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_out6_pass=$curif-out6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_pass,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_in6_block=$curif-in6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_block,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_out6_block=$curif-out6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_block,IF,$average,*\" "; + + $graphcmd .= "CDEF:\"$curif-bytes_pass=$curif-bytes_in_pass,$curif-bytes_out_pass,+\" "; + $graphcmd .= "CDEF:\"$curif-bytes_block=$curif-bytes_in_block,$curif-bytes_out_block,+\" "; + + $graphcmd .= "CDEF:\"$curif-bytes_pass6=$curif-bytes_in6_pass,$curif-bytes_out6_pass,+\" "; + $graphcmd .= "CDEF:\"$curif-bytes_block6=$curif-bytes_in6_block,$curif-bytes_out6_block,+\" "; + + $graphcmd .= "CDEF:\"$curif-bytes_in_t_pass=$curif-in_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_pass,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_out_t_pass=$curif-out_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_pass,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_in_t_block=$curif-in_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_block,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_out_t_block=$curif-out_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_block,IF,$seconds,*\" "; + + $graphcmd .= "CDEF:\"$curif-bytes_in6_t_pass=$curif-in6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_pass,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_out6_t_pass=$curif-out6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_pass,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_in6_t_block=$curif-in6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_block,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-bytes_out6_t_block=$curif-out6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_block,IF,$seconds,*\" "; + + $graphcmd .= "CDEF:\"$curif-bytes_t_pass=$curif-bytes_in_t_pass,$curif-bytes_out_t_pass,+\" "; + $graphcmd .= "CDEF:\"$curif-bytes_t_block=$curif-bytes_in_t_block,$curif-bytes_out_t_block,+\" "; + $graphcmd .= "CDEF:\"$curif-bytes_t=$curif-bytes_t_pass,$curif-bytes_t_block,+\" "; + + $graphcmd .= "CDEF:\"$curif-bytes_t_pass6=$curif-bytes_in6_t_pass,$curif-bytes_out6_t_pass,+\" "; + $graphcmd .= "CDEF:\"$curif-bytes_t_block6=$curif-bytes_in6_t_block,$curif-bytes_out6_t_block,+\" "; + $graphcmd .= "CDEF:\"$curif-bytes_t6=$curif-bytes_t_pass6,$curif-bytes_t_block6,+\" "; + $graphcmd .= "VDEF:\"$curif-in_bits_95=$curif-in_bits,95,PERCENT\" "; + $graphcmd .= "CDEF:\"$curif-out_bits_mul=$curif-out_bits,$multiplier,*\" "; + $perc = $multiplier > 0 ? "95" : "5"; + $graphcmd .= "VDEF:\"$curif-out_bits_95=$curif-out_bits_mul,{$perc},PERCENT\" "; + + $graphcmd .= "AREA:\"$curif-in_bits_block#{$colortrafficdown[1]}:$curif-in-block\" "; + $graphcmd .= "AREA:\"$curif-in_bits_pass#{$colortrafficdown[0]}:$curif-in-pass:STACK\" "; + $graphcmd .= "AREA:\"$curif-in6_bits_block#{$colortrafficdown[3]}:$curif-in6-block:STACK\" "; + $graphcmd .= "AREA:\"$curif-in6_bits_pass#{$colortrafficdown[2]}:$curif-in6-pass:STACK\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + + $graphcmd .= "{$AREA}:\"$curif-out_bits_block_neg#{$colortrafficup[1]}:$curif-out-block\" "; + $graphcmd .= "{$AREA}:\"$curif-out_bits_pass_neg#{$colortrafficup[0]}:$curif-out-pass:STACK\" "; + $graphcmd .= "{$AREA}:\"$curif-out6_bits_block_neg#{$colortrafficup[3]}:$curif-out6-block:STACK\" "; + $graphcmd .= "{$AREA}:\"$curif-out6_bits_pass_neg#{$colortrafficup[2]}:$curif-out6-pass:STACK\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "HRULE:\"$curif-in_bits_95#{$colortraffic95[1]}:$curif-in (95%)\" "; + $graphcmd .= "HRULE:\"$curif-out_bits_95#{$colortraffic95[0]}:$curif-out (95%)\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t maximum\t average\t\t current\t period\t 95th percentile\\n\" "; + $graphcmd .= "COMMENT:\"IPv4 in-pass\t\" "; + $graphcmd .= "GPRINT:\"$curif-in_bits_pass:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-in_bits_pass:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-in_bits_pass:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-bytes_in_t_pass:AVERAGE:%7.2lf %sB i\" "; + $graphcmd .= "GPRINT:\"$curif-in_bits_95:%7.2lf %sb/s\" "; + + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"IPv4 out-pass\t\" "; + $graphcmd .= "GPRINT:\"$curif-out_bits_pass:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-out_bits_pass:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-out_bits_pass:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-bytes_out_t_pass:AVERAGE:%7.2lf %sB o\" "; + $graphcmd .= "GPRINT:\"$curif-out_bits_95:%7.2lf %sb/s\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"IPv4 in-block\t\" "; + $graphcmd .= "GPRINT:\"$curif-in_bits_block:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-in_bits_block:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-in_bits_block:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-bytes_in_t_block:AVERAGE:%7.2lf %sB i\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"IPv4 out-block\t\" "; + $graphcmd .= "GPRINT:\"$curif-out_bits_block:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-out_bits_block:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-out_bits_block:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-bytes_out_t_block:AVERAGE:%7.2lf %sB o\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"IPv6 in-pass\t\" "; + $graphcmd .= "GPRINT:\"$curif-in6_bits_pass:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-in6_bits_pass:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-in6_bits_pass:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-bytes_in6_t_pass:AVERAGE:%7.2lf %sB i\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"IPv6 out-pass\t\" "; + $graphcmd .= "GPRINT:\"$curif-out6_bits_pass:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-out6_bits_pass:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-out6_bits_pass:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-bytes_out6_t_pass:AVERAGE:%7.2lf %sB o\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"IPv6 in-block\t\" "; + $graphcmd .= "GPRINT:\"$curif-in6_bits_block:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-in6_bits_block:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-in6_bits_block:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-bytes_in6_t_block:AVERAGE:%7.2lf %sB i\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"IPv6 out-block\t\" "; + $graphcmd .= "GPRINT:\"$curif-out6_bits_block:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-out6_bits_block:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-out6_bits_block:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"$curif-bytes_out6_t_block:AVERAGE:%7.2lf %sB o\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif(strstr($curdatabase, "-throughput.rrd")) { + /* define graphcmd for throughput stats */ + /* this gathers all interface statistics, the database does not actually exist */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"bits/sec\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + + $iflist = get_configured_interface_list(); + $g = 0; + $operand = ""; + $comma = ""; + $graphtputbip = ""; + $graphtputbop = ""; + $graphtputbtp = ""; + $graphtputbib = ""; + $graphtputbob = ""; + $graphtputbtb = ""; + $graphtputbyip = ""; + $graphtputbyop = ""; + $graphtputbytp = ""; + $graphtputbyib = ""; + $graphtputbyob = ""; + $graphtputbytb = ""; + foreach($iflist as $ifname) { + /* collect all interface stats */ + $graphcmd .= "DEF:\"{$ifname}-in_bytes_pass={$rrddbpath}{$ifname}-traffic.rrd:inpass:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"{$ifname}-out_bytes_pass={$rrddbpath}{$ifname}-traffic.rrd:outpass:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"{$ifname}-in_bytes_block={$rrddbpath}{$ifname}-traffic.rrd:inblock:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"{$ifname}-out_bytes_block={$rrddbpath}{$ifname}-traffic.rrd:outblock:AVERAGE:step=$step\" "; + + $graphcmd .= "CDEF:\"{$ifname}-in_bytes={$ifname}-in_bytes_pass,{$ifname}-in_bytes_block,+\" "; + $graphcmd .= "CDEF:\"{$ifname}-out_bytes={$ifname}-out_bytes_pass,{$ifname}-out_bytes_block,+\" "; + + $graphcmd .= "CDEF:\"{$ifname}-in_bits_pass={$ifname}-in_bytes_pass,8,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-out_bits_pass={$ifname}-out_bytes_pass,8,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-bits_io_pass={$ifname}-in_bits_pass,{$ifname}-out_bits_pass,+\" "; + + $graphcmd .= "CDEF:\"{$ifname}-in_bits_block={$ifname}-in_bytes_block,8,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-out_bits_block={$ifname}-out_bytes_block,8,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-bits_io_block={$ifname}-in_bits_block,{$ifname}-out_bits_block,+\" "; + + $graphcmd .= "CDEF:\"{$ifname}-bytes_in_pass={$ifname}-in_bytes_pass,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_pass,IF,$average,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-bytes_out_pass={$ifname}-out_bytes_pass,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_pass,IF,$average,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-bytes_in_block={$ifname}-in_bytes_block,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_block,IF,$average,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-bytes_out_block={$ifname}-out_bytes_block,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_block,IF,$average,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-bytes_pass={$ifname}-bytes_in_pass,{$ifname}-bytes_out_pass,+\" "; + $graphcmd .= "CDEF:\"{$ifname}-bytes_block={$ifname}-bytes_in_pass,{$ifname}-bytes_out_block,+\" "; + + $graphcmd .= "CDEF:\"{$ifname}-bytes_in_t_pass={$ifname}-in_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_pass,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-bytes_in_t_block={$ifname}-in_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_block,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-bytes_out_t_pass={$ifname}-out_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_pass,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-bytes_out_t_block={$ifname}-out_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_block,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"{$ifname}-bytes_t_pass={$ifname}-bytes_in_t_pass,{$ifname}-bytes_out_t_pass,+\" "; + $graphcmd .= "CDEF:\"{$ifname}-bytes_t_block={$ifname}-bytes_in_t_block,{$ifname}-bytes_out_t_block,+\" "; + if ($g > 0) { + $operand .= ",+"; + $comma = ","; + } + $graphtputbip .= "{$comma}{$ifname}-in_bits_pass"; + $graphtputbop .= "{$comma}{$ifname}-out_bits_pass"; + $graphtputbtp .= "{$comma}{$ifname}-bits_io_pass"; + $graphtputbib .= "{$comma}{$ifname}-in_bits_block"; + $graphtputbob .= "{$comma}{$ifname}-out_bits_block"; + $graphtputbtb .= "{$comma}{$ifname}-bits_io_block"; + $graphtputbyip .= "{$comma}{$ifname}-bytes_in_t_pass"; + $graphtputbyop .= "{$comma}{$ifname}-bytes_out_t_pass"; + $graphtputbyib .= "{$comma}{$ifname}-bytes_in_t_block"; + $graphtputbyob .= "{$comma}{$ifname}-bytes_out_t_block"; + $graphtputbytp .= "{$comma}{$ifname}-bytes_t_pass"; + $graphtputbytb .= "{$comma}{$ifname}-bytes_t_block"; + $g++; + } + $graphcmd .= "CDEF:\"tput-in_bits_pass={$graphtputbip}{$operand}\" "; + $graphcmd .= "CDEF:\"tput-out_bits_pass={$graphtputbop}{$operand}\" "; + $graphcmd .= "CDEF:\"tput-bits_io_pass={$graphtputbtp}{$operand}\" "; + + $graphcmd .= "CDEF:\"tput-in_bits_block={$graphtputbib}{$operand}\" "; + $graphcmd .= "CDEF:\"tput-out_bits_block={$graphtputbob}{$operand}\" "; + $graphcmd .= "CDEF:\"tput-bits_io_block={$graphtputbtb}{$operand}\" "; + + $graphcmd .= "CDEF:\"tput-out_bits_pass_neg=tput-out_bits_pass,$multiplier,*\" "; + $graphcmd .= "CDEF:\"tput-out_bits_block_neg=tput-out_bits_block,$multiplier,*\" "; + + $graphcmd .= "CDEF:\"tput-bytes_in_t_pass={$graphtputbyip}{$operand}\" "; + $graphcmd .= "CDEF:\"tput-bytes_out_t_pass={$graphtputbyop}{$operand}\" "; + $graphcmd .= "CDEF:\"tput-bytes_t_pass={$graphtputbytp}{$operand}\" "; + + $graphcmd .= "CDEF:\"tput-bytes_in_t_block={$graphtputbyib}{$operand}\" "; + $graphcmd .= "CDEF:\"tput-bytes_out_t_block={$graphtputbyob}{$operand}\" "; + $graphcmd .= "CDEF:\"tput-bytes_t_block={$graphtputbytb}{$operand}\" "; + + $graphcmd .= "AREA:\"tput-in_bits_block#{$colortrafficdown[0]}:in-block \" "; + $graphcmd .= "AREA:\"tput-in_bits_pass#{$colortrafficdown[1]}:in-pass \" "; + + $graphcmd .= "{$AREA}:\"tput-out_bits_block_neg#{$colortrafficup[1]}:out-block \" "; + $graphcmd .= "{$AREA}:\"tput-out_bits_pass_neg#{$colortrafficup[0]}:out-pass \" "; + + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t maximum average current period\\n\" "; + $graphcmd .= "COMMENT:\"in-pass\t\" "; + $graphcmd .= "GPRINT:\"tput-in_bits_pass:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"tput-in_bits_pass:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"tput-in_bits_pass:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"tput-bytes_in_t_pass:AVERAGE:%7.2lf %sB i\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"out-pass\t\" "; + $graphcmd .= "GPRINT:\"tput-out_bits_pass:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"tput-out_bits_pass:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"tput-out_bits_pass:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"tput-bytes_out_t_pass:AVERAGE:%7.2lf %sB o\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"in-block\t\" "; + $graphcmd .= "GPRINT:\"tput-in_bits_block:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"tput-in_bits_block:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"tput-in_bits_block:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"tput-bytes_in_t_block:AVERAGE:%7.2lf %sB i\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"out-block\t\" "; + $graphcmd .= "GPRINT:\"tput-out_bits_block:MAX:%7.2lf %sb/s\" "; + $graphcmd .= "GPRINT:\"tput-out_bits_block:AVERAGE:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"tput-out_bits_block:LAST:%7.2lf %Sb/s\" "; + $graphcmd .= "GPRINT:\"tput-bytes_out_t_block:AVERAGE:%7.2lf %sB o\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-packets.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for packets stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"packets/sec\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:\"$curif-in_pps_pass=$rrddbpath$curdatabase:inpass:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-out_pps_pass=$rrddbpath$curdatabase:outpass:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-in_pps_block=$rrddbpath$curdatabase:inblock:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-out_pps_block=$rrddbpath$curdatabase:outblock:AVERAGE:step=$step\" "; + + $graphcmd .= "DEF:\"$curif-in6_pps_pass=$rrddbpath$curdatabase:inpass6:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-out6_pps_pass=$rrddbpath$curdatabase:outpass6:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-in6_pps_block=$rrddbpath$curdatabase:inblock6:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-out6_pps_block=$rrddbpath$curdatabase:outblock6:AVERAGE:step=$step\" "; + + $graphcmd .= "CDEF:\"$curif-in_pps=$curif-in_pps_pass,$curif-in_pps_block,+\" "; + $graphcmd .= "CDEF:\"$curif-out_pps=$curif-out_pps_pass,$curif-out_pps_block,+\" "; + $graphcmd .= "CDEF:\"$curif-out_pps_pass_neg=$curif-out_pps_pass,$multiplier,*\" "; + $graphcmd .= "CDEF:\"$curif-out_pps_block_neg=$curif-out_pps_block,$multiplier,*\" "; + + $graphcmd .= "CDEF:\"$curif-in6_pps=$curif-in6_pps_pass,$curif-in6_pps_block,+\" "; + $graphcmd .= "CDEF:\"$curif-out6_pps=$curif-out6_pps_pass,$curif-out6_pps_block,+\" "; + $graphcmd .= "CDEF:\"$curif-out6_pps_pass_neg=$curif-out6_pps_pass,$multiplier,*\" "; + $graphcmd .= "CDEF:\"$curif-out6_pps_block_neg=$curif-out6_pps_block,$multiplier,*\" "; + + $graphcmd .= "CDEF:\"$curif-pps_in_pass=$curif-in_pps_pass,0,12500000,LIMIT,UN,0,$curif-in_pps_pass,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_out_pass=$curif-out_pps_pass,0,12500000,LIMIT,UN,0,$curif-out_pps_pass,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_in_block=$curif-in_pps_block,0,12500000,LIMIT,UN,0,$curif-in_pps_block,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_out_block=$curif-out_pps_block,0,12500000,LIMIT,UN,0,$curif-out_pps_block,IF,$average,*\" "; + + $graphcmd .= "CDEF:\"$curif-pps_in6_pass=$curif-in6_pps_pass,0,12500000,LIMIT,UN,0,$curif-in6_pps_pass,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_out6_pass=$curif-out6_pps_pass,0,12500000,LIMIT,UN,0,$curif-out6_pps_pass,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_in6_block=$curif-in6_pps_block,0,12500000,LIMIT,UN,0,$curif-in6_pps_block,IF,$average,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_out6_block=$curif-out6_pps_block,0,12500000,LIMIT,UN,0,$curif-out6_pps_block,IF,$average,*\" "; + + $graphcmd .= "CDEF:\"$curif-pps_io=$curif-in_pps,$curif-out_pps,+\" "; + $graphcmd .= "CDEF:\"$curif-pps_pass=$curif-pps_in_pass,$curif-pps_out_pass,+\" "; + $graphcmd .= "CDEF:\"$curif-pps_block=$curif-pps_in_block,$curif-pps_out_block,+\" "; + + $graphcmd .= "CDEF:\"$curif-pps_io6=$curif-in6_pps,$curif-out6_pps,+\" "; + $graphcmd .= "CDEF:\"$curif-pps_pass6=$curif-pps_in6_pass,$curif-pps_out6_pass,+\" "; + $graphcmd .= "CDEF:\"$curif-pps_block6=$curif-pps_in6_block,$curif-pps_out6_block,+\" "; + + $graphcmd .= "CDEF:\"$curif-pps_in_t_pass=$curif-in_pps_pass,0,12500000,LIMIT,UN,0,$curif-in_pps_pass,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_out_t_pass=$curif-out_pps_pass,0,12500000,LIMIT,UN,0,$curif-out_pps_pass,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_in_t_block=$curif-in_pps_block,0,12500000,LIMIT,UN,0,$curif-in_pps_block,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_out_t_block=$curif-out_pps_block,0,12500000,LIMIT,UN,0,$curif-out_pps_block,IF,$seconds,*\" "; + + $graphcmd .= "CDEF:\"$curif-pps_in6_t_pass=$curif-in6_pps_pass,0,12500000,LIMIT,UN,0,$curif-in6_pps_pass,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_out6_t_pass=$curif-out6_pps_pass,0,12500000,LIMIT,UN,0,$curif-out6_pps_pass,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_in6_t_block=$curif-in6_pps_block,0,12500000,LIMIT,UN,0,$curif-in6_pps_block,IF,$seconds,*\" "; + $graphcmd .= "CDEF:\"$curif-pps_out6_t_block=$curif-out6_pps_block,0,12500000,LIMIT,UN,0,$curif-out6_pps_block,IF,$seconds,*\" "; + + $graphcmd .= "CDEF:\"$curif-pps_t_pass=$curif-pps_in_t_pass,$curif-pps_out_t_pass,+\" "; + $graphcmd .= "CDEF:\"$curif-pps_t_block=$curif-pps_in_t_block,$curif-pps_out_t_block,+\" "; + + $graphcmd .= "CDEF:\"$curif-pps_t_pass6=$curif-pps_in6_t_pass,$curif-pps_out6_t_pass,+\" "; + $graphcmd .= "CDEF:\"$curif-pps_t_block6=$curif-pps_in6_t_block,$curif-pps_out6_t_block,+\" "; + + $graphcmd .= "AREA:\"$curif-in_pps_block#{$colorpacketsdown[1]}:$curif-in-block\" "; + $graphcmd .= "AREA:\"$curif-in_pps_pass#{$colorpacketsdown[0]}:$curif-in-pass:STACK\" "; + $graphcmd .= "AREA:\"$curif-in6_pps_block#{$colorpacketsdown[3]}:$curif-in6-block:STACK\" "; + $graphcmd .= "AREA:\"$curif-in6_pps_pass#{$colorpacketsdown[2]}:$curif-in6-pass:STACK\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "$AREA:\"$curif-out_pps_block_neg#{$colorpacketsup[1]}:$curif-out-block\" "; + $graphcmd .= "$AREA:\"$curif-out_pps_pass_neg#{$colorpacketsup[0]}:$curif-out-pass:STACK\" "; + $graphcmd .= "$AREA:\"$curif-out6_pps_block_neg#{$colorpacketsup[3]}:$curif-out6-block:STACK\" "; + $graphcmd .= "$AREA:\"$curif-out6_pps_pass_neg#{$colorpacketsup[2]}:$curif-out6-pass:STACK\" "; + + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t maximum\t\t average\t current\t period\\n\" "; + $graphcmd .= "COMMENT:\"in-pass\t\" "; + $graphcmd .= "GPRINT:\"$curif-in_pps_pass:MAX:%7.2lf %s pps\" "; + $graphcmd .= "GPRINT:\"$curif-in_pps_pass:AVERAGE:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-in_pps_pass:LAST:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-pps_in_t_pass:AVERAGE:%7.2lf %s pkts\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"out-pass\t\" "; + $graphcmd .= "GPRINT:\"$curif-out_pps_pass:MAX:%7.2lf %s pps\" "; + $graphcmd .= "GPRINT:\"$curif-out_pps_pass:AVERAGE:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-out_pps_pass:LAST:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-pps_out_t_pass:AVERAGE:%7.2lf %s pkts\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"in-block\t\" "; + $graphcmd .= "GPRINT:\"$curif-in_pps_block:MAX:%7.2lf %s pps\" "; + $graphcmd .= "GPRINT:\"$curif-in_pps_block:AVERAGE:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-in_pps_block:LAST:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-pps_in_t_block:AVERAGE:%7.2lf %s pkts\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"out-block\t\" "; + $graphcmd .= "GPRINT:\"$curif-out_pps_block:MAX:%7.2lf %s pps\" "; + $graphcmd .= "GPRINT:\"$curif-out_pps_block:AVERAGE:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-out_pps_block:LAST:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-pps_out_t_block:AVERAGE:%7.2lf %s pkts\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"in-pass6\t\" "; + $graphcmd .= "GPRINT:\"$curif-in6_pps_pass:MAX:%7.2lf %s pps\" "; + $graphcmd .= "GPRINT:\"$curif-in6_pps_pass:AVERAGE:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-in6_pps_pass:LAST:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-pps_in6_t_pass:AVERAGE:%7.2lf %s pkts\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"out-pass6\t\" "; + $graphcmd .= "GPRINT:\"$curif-out6_pps_pass:MAX:%7.2lf %s pps\" "; + $graphcmd .= "GPRINT:\"$curif-out6_pps_pass:AVERAGE:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-out6_pps_pass:LAST:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-pps_out6_t_pass:AVERAGE:%7.2lf %s pkts\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"in-block6\t\" "; + $graphcmd .= "GPRINT:\"$curif-in6_pps_block:MAX:%7.2lf %s pps\" "; + $graphcmd .= "GPRINT:\"$curif-in6_pps_block:AVERAGE:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-in6_pps_block:LAST:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-pps_in6_t_block:AVERAGE:%7.2lf %s pkts\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"out-pass6\t\" "; + $graphcmd .= "GPRINT:\"$curif-out6_pps_block:MAX:%7.2lf %s pps\" "; + $graphcmd .= "GPRINT:\"$curif-out6_pps_block:AVERAGE:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-out6_pps_block:LAST:%7.2lf %S pps\" "; + $graphcmd .= "GPRINT:\"$curif-pps_out6_t_block:AVERAGE:%7.2lf %s pkts\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-wireless.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for packets stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"snr/channel/rate\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:\"$curif-snr=$rrddbpath$curdatabase:snr:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-rate=$rrddbpath$curdatabase:rate:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-channel=$rrddbpath$curdatabase:channel:AVERAGE:step=$step\" "; + $graphcmd .= "LINE2:\"$curif-snr#{$colorwireless[0]}:$curif-snr\" "; + $graphcmd .= "LINE2:\"$curif-rate#{$colorwireless[1]}:$curif-rate\" "; + $graphcmd .= "LINE2:\"$curif-channel#{$colorwireless[2]}:$curif-channel\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t maximum\t\t average\t current\\n\" "; + $graphcmd .= "COMMENT:\"SNR\t\t\" "; + $graphcmd .= "GPRINT:\"$curif-snr:MAX:%7.2lf dBi \" "; + $graphcmd .= "GPRINT:\"$curif-snr:AVERAGE:%7.2lf dBi \" "; + $graphcmd .= "GPRINT:\"$curif-snr:LAST:%7.2lf dBi\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"RATE\t\t\" "; + $graphcmd .= "GPRINT:\"$curif-rate:MAX:%7.2lf Mb \" "; + $graphcmd .= "GPRINT:\"$curif-rate:AVERAGE:%7.2lf Mb \" "; + $graphcmd .= "GPRINT:\"$curif-rate:LAST:%7.2lf Mb\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Channel\t\" "; + $graphcmd .= "GPRINT:\"$curif-channel:MAX:%7.2lf \" "; + $graphcmd .= "GPRINT:\"$curif-channel:AVERAGE:%7.2lf \" "; + $graphcmd .= "GPRINT:\"$curif-channel:LAST:%7.2lf\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-vpnusers.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for vpn users stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"users\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:\"$curif-users=$rrddbpath$curdatabase:users:AVERAGE:step=$step\" "; + $graphcmd .= "LINE2:\"$curif-users#{$colorvpnusers[0]}:$curif-users\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t maximum\t\t average\t current\\n\" "; + $graphcmd .= "COMMENT:\"Users Online\t\" "; + $graphcmd .= "GPRINT:\"$curif-users:MAX:%7.2lf \" "; + $graphcmd .= "GPRINT:\"$curif-users:AVERAGE:%7.2lf \" "; + $graphcmd .= "GPRINT:\"$curif-users:LAST:%7.2lf \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-states.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for states stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start -$seconds -e -$average --step $step "; + $graphcmd .= "--vertical-label \"states, ip\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:\"$curif-pfrate=$rrddbpath$curdatabase:pfrate:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-pfstates=$rrddbpath$curdatabase:pfstates:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-pfnat=$rrddbpath$curdatabase:pfnat:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-srcip=$rrddbpath$curdatabase:srcip:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"$curif-dstip=$rrddbpath$curdatabase:dstip:AVERAGE:step=$step\" "; + $graphcmd .= "CDEF:\"$curif-pfrate_t=$curif-pfrate,0,1000000,LIMIT,UN,0,$curif-pfrate,IF,$seconds,*\" "; + $graphcmd .= "LINE1:\"$curif-pfrate#{$colorstates[0]}:$curif-pfrate\" "; + $graphcmd .= "LINE1:\"$curif-pfstates#{$colorstates[1]}:$curif-pfstates\" "; + $graphcmd .= "LINE1:\"$curif-pfnat#{$colorstates[2]}:$curif-pfnat\" "; + $graphcmd .= "LINE1:\"$curif-srcip#{$colorstates[3]}:$curif-srcip\" "; + $graphcmd .= "LINE1:\"$curif-dstip#{$colorstates[4]}:$curif-dstip\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t minimum average maximum current period\\n\" "; + $graphcmd .= "COMMENT:\"state changes\" "; + $graphcmd .= "GPRINT:\"$curif-pfrate:MIN:%7.2lf %s cps\" "; + $graphcmd .= "GPRINT:\"$curif-pfrate:AVERAGE:%7.2lf %s cps\" "; + $graphcmd .= "GPRINT:\"$curif-pfrate:MAX:%7.2lf %s cps\" "; + $graphcmd .= "GPRINT:\"$curif-pfrate:LAST:%7.2lf %S cps\" "; + $graphcmd .= "GPRINT:\"$curif-pfrate_t:AVERAGE:%7.2lf %s chg\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"filter states\" "; + $graphcmd .= "GPRINT:\"$curif-pfstates:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-pfstates:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-pfstates:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-pfstates:LAST:%7.2lf %s \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"nat states \" "; + $graphcmd .= "GPRINT:\"$curif-pfnat:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-pfnat:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-pfnat:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-pfnat:LAST:%7.2lf %s \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Source addr. \" "; + $graphcmd .= "GPRINT:\"$curif-srcip:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-srcip:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-srcip:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-srcip:LAST:%7.2lf %s \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Dest. addr. \" "; + $graphcmd .= "GPRINT:\"$curif-dstip:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-dstip:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-dstip:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"$curif-dstip:LAST:%7.2lf %s \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-processor.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for processor stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"utilization, number\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:\"user=$rrddbpath$curdatabase:user:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"nice=$rrddbpath$curdatabase:nice:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"system=$rrddbpath$curdatabase:system:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"interrupt=$rrddbpath$curdatabase:interrupt:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"processes=$rrddbpath$curdatabase:processes:AVERAGE:step=$step\" "; + $graphcmd .= "AREA:\"user#{$colorprocessor[0]}:user\" "; + $graphcmd .= "AREA:\"nice#{$colorprocessor[1]}:nice:STACK\" "; + $graphcmd .= "AREA:\"system#{$colorprocessor[2]}:system:STACK\" "; + $graphcmd .= "AREA:\"interrupt#{$colorprocessor[3]}:interrupt:STACK\" "; + $graphcmd .= "LINE2:\"processes#{$colorprocessor[4]}:processes\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" "; + $graphcmd .= "COMMENT:\"User util. \" "; + $graphcmd .= "GPRINT:\"user:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"user:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"user:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"user:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Nice util. \" "; + $graphcmd .= "GPRINT:\"nice:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"nice:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"nice:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"nice:LAST:%7.2lf %s \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"System util. \" "; + $graphcmd .= "GPRINT:\"system:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"system:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"system:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"system:LAST:%7.2lf %s \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Interrupt \" "; + $graphcmd .= "GPRINT:\"interrupt:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"interrupt:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"interrupt:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"interrupt:LAST:%7.2lf %s \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Processes \" "; + $graphcmd .= "GPRINT:\"processes:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"processes:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"processes:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"processes:LAST:%7.2lf %s \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-memory.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for memory usage stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"utilization, percent\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:\"active=$rrddbpath$curdatabase:active:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"inactive=$rrddbpath$curdatabase:inactive:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"free=$rrddbpath$curdatabase:free:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"cache=$rrddbpath$curdatabase:cache:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"wire=$rrddbpath$curdatabase:wire:AVERAGE:step=$step\" "; + $graphcmd .= "LINE2:\"active#{$colormemory[0]}:active\" "; + $graphcmd .= "LINE2:\"inactive#{$colormemory[1]}:inactive\" "; + $graphcmd .= "LINE2:\"free#{$colormemory[2]}:free\" "; + $graphcmd .= "LINE2:\"cache#{$colormemory[3]}:cache\" "; + $graphcmd .= "LINE2:\"wire#{$colormemory[4]}:wire\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" "; + $graphcmd .= "COMMENT:\"Active. \" "; + $graphcmd .= "GPRINT:\"active:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"active:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"active:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"active:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Inactive. \" "; + $graphcmd .= "GPRINT:\"inactive:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"inactive:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"inactive:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"inactive:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Free. \" "; + $graphcmd .= "GPRINT:\"free:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"free:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"free:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"free:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Cached. \" "; + $graphcmd .= "GPRINT:\"cache:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"cache:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"cache:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"cache:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Wired. \" "; + $graphcmd .= "GPRINT:\"wire:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"wire:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"wire:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"wire:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-mbuf.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for mbuf usage stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"utilization, percent\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} clusters - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:\"current=$rrddbpath$curdatabase:current:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"cache=$rrddbpath$curdatabase:cache:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"total=$rrddbpath$curdatabase:total:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"max=$rrddbpath$curdatabase:max:AVERAGE:step=$step\" "; + $graphcmd .= "LINE2:\"current#{$colormbuf[0]}:current\" "; + $graphcmd .= "LINE2:\"cache#{$colormbuf[1]}:cache\" "; + $graphcmd .= "LINE2:\"total#{$colormbuf[2]}:total\" "; + $graphcmd .= "LINE2:\"max#{$colormbuf[3]}:max\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" "; + $graphcmd .= "COMMENT:\"Current. \" "; + $graphcmd .= "GPRINT:\"current:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"current:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"current:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"current:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Cache. \" "; + $graphcmd .= "GPRINT:\"cache:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"cache:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"cache:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"cache:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Total. \" "; + $graphcmd .= "GPRINT:\"total:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"total:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"total:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"total:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Max. \" "; + $graphcmd .= "GPRINT:\"max:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"max:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"max:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"max:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-queues.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for queue stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"bits/sec\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + if ($altq) { + $a_queues =& $altq->get_queue_list(); + $t = 0; + } else { + $a_queues = array(); + $i = 0; + $t = 0; + } + foreach ($a_queues as $name => $q) { + $color = "$colorqueuesup[$t]"; + if($t > 0) { $stack = ":STACK"; } + $graphcmd .= "DEF:\"$name=$rrddbpath$curdatabase:$name:AVERAGE:step=$step\" "; + $graphcmd .= "CDEF:\"$name-bytes_out=$name,0,$speedlimit,LIMIT,UN,0,$name,IF\" "; + $graphcmd .= "CDEF:\"$name-bits_out=$name-bytes_out,8,*\" "; + $graphcmd .= "$AREA:\"$name-bits_out#${color}:$name$stack\" "; + $t++; + if($t > 7) { $t = 0; } + } + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-queuedrops.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for queuedrop stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"drops / sec\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + if ($altq) { + $a_queues =& $altq->get_queue_list(); + $t = 0; + } else { + $a_queues = array(); + $i = 0; + $t = 0; + } + foreach ($a_queues as $name => $q) { + $color = "$colorqueuesdropup[$t]"; + if($t > 0) { $stack = ":STACK"; } + $graphcmd .= "DEF:\"$name=$rrddbpath$curdatabase:$name:AVERAGE:step=$step\" "; + $graphcmd .= "CDEF:\"$name-bytes_out=$name,0,$speedlimit,LIMIT,UN,0,$name,IF\" "; + $graphcmd .= "CDEF:\"$name-bits_out=$name-bytes_out,8,*\" "; + $graphcmd .= "CDEF:\"$name-bits_out_neg=$name-bits_out,$multiplier,*\" "; + $graphcmd .= "$AREA:\"$name-bits_out_neg#${color}:$name$stack\" "; + $t++; + if($t > 7) { $t = 0; } + } + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-quality.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* make a link quality graphcmd, we only have WAN for now, others too follow */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png \\ + --start $start --end $end --step $step \\ + --title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" \\ + --color SHADEA#eeeeee --color SHADEB#eeeeee \\ + --vertical-label \"ms / %\" \\ + --height 200 --width 620 \\ + --lower-limit 0 \\ + DEF:delayraw=$rrddbpath$curdatabase:delay:AVERAGE:step=$step \\ + DEF:loss=$rrddbpath$curdatabase:loss:AVERAGE:step=$step \\ + \"CDEF:delay=delayraw,1000,*\" \\ + \"CDEF:roundavg=delay,PREV(delay),+,2,/\" \\ + \"CDEF:loss10=loss,$multiplier,*\" \\ + \"CDEF:r0=delay,20,MIN\" \\ + \"CDEF:r1=delay,60,MIN\" \\ + \"CDEF:r2=delay,180,MIN\" \\ + \"CDEF:r3=delay,420,MIN\" \\ + COMMENT:\"\t\t\t\t\tDelay\t\t\tPacket loss\\n\" \\ + AREA:delay#$colorqualityrtt[0]:\"> 420 ms\" \\ + GPRINT:delay:MIN:\"\t\tMin\\: %7.2lf ms\" \\ + GPRINT:loss:MIN:\"\tMin\\: %3.1lf %%\\n\" \\ + AREA:r3#$colorqualityrtt[1]:\"180-420 ms\" \\ + GPRINT:delay:AVERAGE:\"\t\tAvg\\: %7.2lf ms\" \\ + GPRINT:loss:AVERAGE:\"\tAvg\\: %3.1lf %%\\n\" \\ + AREA:r2#$colorqualityrtt[2]:\"60-180 ms\" \\ + GPRINT:delay:MAX:\"\t\tMax\\: %7.2lf ms\" \\ + GPRINT:loss:MAX:\"\tMax\\: %3.1lf %%\\n\" \\ + AREA:r1#$colorqualityrtt[3]:\"20-60 ms\\n\" \\ + AREA:r0#$colorqualityrtt[4]:\"< 20 ms\" \\ + GPRINT:delay:LAST:\"\t\tLast\\: %7.2lf ms\" \\ + GPRINT:loss:LAST:\"\tLast\: %3.1lf %%\\n\" \\ + AREA:loss10#$colorqualityloss:\"Packet loss\\n\" \\ + LINE1:delay#$colorqualityrtt[5]:\"Delay average\\n\" \\ + COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\""; +} +elseif((strstr($curdatabase, "spamd.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* graph a spamd statistics graph */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png \\ + --start $start --end $end --step $step \\ + --title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" \\ + --color SHADEA#eeeeee --color SHADEB#eeeeee \\ + --vertical-label=\"Conn / Time, sec.\" \\ + --height 200 --width 620 --no-gridfit \\ + --lower-limit 0 \\ + DEF:consmin=$rrddbpath$curdatabase:conn:MIN:step=$step \\ + DEF:consavg=$rrddbpath$curdatabase:conn:AVERAGE:step=$step \\ + DEF:consmax=$rrddbpath$curdatabase:conn:MAX:step=$step \\ + DEF:timemin=$rrddbpath$curdatabase:time:MIN:step=$step \\ + DEF:timeavg=$rrddbpath$curdatabase:time:AVERAGE:step=$step \\ + DEF:timemax=$rrddbpath$curdatabase:time:MAX:step=$step \\ + \"CDEF:timeminadj=timemin,0,86400,LIMIT,UN,0,timemin,IF\" \\ + \"CDEF:timeavgadj=timeavg,0,86400,LIMIT,UN,0,timeavg,IF\" \\ + \"CDEF:timemaxadj=timemax,0,86400,LIMIT,UN,0,timemax,IF\" \\ + \"CDEF:t1=timeminadj,timeavgadj,+,2,/,timeminadj,-\" \\ + \"CDEF:t2=timeavgadj,timemaxadj,+,2,/,timeminadj,-,t1,-\" \\ + \"CDEF:t3=timemaxadj,timeminadj,-,t1,-,t2,-\" \\ + AREA:timeminadj \\ + AREA:t1#$colorspamdtime[0]::STACK \\ + AREA:t2#$colorspamdtime[1]::STACK \\ + AREA:t3#$colorspamdtime[2]::STACK \\ + LINE2:timeavgadj#$colorspamdtime[3]:\"Time \" \\ + GPRINT:timeminadj:MIN:\"Min\\:%6.2lf\\t\" \\ + GPRINT:timeavgadj:AVERAGE:\"Avg\\:%6.2lf\\t\" \\ + GPRINT:timemaxadj:MAX:\"Max\\:%6.2lf\\n\" \\ + AREA:consmax#$colorspamdconn[0] \\ + AREA:consmin#$colorspamdconn[1] \\ + LINE1:consmin#$colorspamdconn[2] \\ + LINE1:consmax#$colorspamdconn[3] \\ + LINE1:consavg#$colorspamdconn[4]:\"Cons \" \\ + GPRINT:consmin:MIN:\"Min\\:%6.2lf\\t\" \\ + GPRINT:consavg:AVERAGE:\"Avg\\:%6.2lf\\t\" \\ + GPRINT:consmax:MAX:\"Max\\:%6.2lf\\n\" \\ + COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-cellular.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"signal\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:\"$curif-rssi=$rrddbpath$curdatabase:rssi:AVERAGE:step=$step\" "; + $graphcmd .= "LINE2:\"$curif-rssi#{$colorwireless[0]}:$curif-rssi\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t maximum\t\t average\t current\\n\" "; + $graphcmd .= "COMMENT:\"RSSI\t\t\" "; + $graphcmd .= "GPRINT:\"$curif-rssi:MAX:%7.2lf \" "; + $graphcmd .= "GPRINT:\"$curif-rssi:AVERAGE:%7.2lf \" "; + $graphcmd .= "GPRINT:\"$curif-rssi:LAST:%7.2lf \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-loggedin.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for online Captive Portal users stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"Captive Portal Users\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--base=1000 "; + $graphcmd .= "--lower-limit=0 "; + $graphcmd .= "--slope-mode "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:\"$curif-loggedinusers=$rrddbpath$curdatabase:loggedinusers:AVERAGE:step=$step\" "; + $graphcmd .= "CDEF:\"$curif-totalusers_t=PREV,UN,0,PREV,IF,$curif-loggedinusers,+\" "; + $graphcmd .= "CDEF:\"$curif-totalusers_d=$curif-totalusers_t,FLOOR\" "; + $graphcmd .= "AREA:\"$curif-totalusers_d#{$colorcaptiveportalusers[0]}:Total logged in users\" "; + $graphcmd .= "GPRINT:\"$curif-totalusers_d:MAX:%8.0lf \\n\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "-concurrent.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for online Captive Portal users stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"Captive Portal Users\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--base=1000 "; + $graphcmd .= "--lower-limit=0 "; + $graphcmd .= "--slope-mode "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:\"$curif-concurrentusers=$rrddbpath$curdatabase:concurrentusers:AVERAGE:step=$step\" "; + $graphcmd .= "AREA:\"$curif-concurrentusers#{$colorcaptiveportalusers[0]}:Concurrent Users\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t current\t\t average\t maximum\\n\" "; + $graphcmd .= "COMMENT:\"Users Online\t\" "; + $graphcmd .= "GPRINT:\"$curif-concurrentusers:LAST:%8.0lf \" "; + $graphcmd .= "GPRINT:\"$curif-concurrentusers:AVERAGE:%8.0lf \" "; + $graphcmd .= "GPRINT:\"$curif-concurrentusers:MAX:%8.0lf \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +elseif((strstr($curdatabase, "ntpd.rrd")) && (file_exists("$rrddbpath$curdatabase"))) { + /* define graphcmd for ntpd (was: mbuf) usage stats */ + $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png "; + $graphcmd .= "--start $start --end $end --step $step "; + $graphcmd .= "--vertical-label \"time\" "; + $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee "; + $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" "; + $graphcmd .= "--height 200 --width 620 "; + $graphcmd .= "DEF:\"offset=$rrddbpath$curdatabase:offset:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"sjit=$rrddbpath$curdatabase:sjit:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"cjit=$rrddbpath$curdatabase:cjit:AVERAGE:step=$step\" "; + $graphcmd .= "DEF:\"wander=$rrddbpath$curdatabase:wander:AVERAGE:step=$step\" "; + $graphcmd .= "LINE2:\"offset#{$colorntpd[0]}:offset\" "; + $graphcmd .= "LINE2:\"sjit#{$colorntpd[1]}:sjit\" "; + $graphcmd .= "LINE2:\"cjit#{$colorntpd[2]}:cjit\" "; + $graphcmd .= "LINE2:\"wander#{$colorntpd[3]}:wander\" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" "; + $graphcmd .= "COMMENT:\"Offset \" "; + $graphcmd .= "GPRINT:\"offset:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"offset:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"offset:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"offset:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"System jitter \" "; + $graphcmd .= "GPRINT:\"sjit:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"sjit:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"sjit:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"sjit:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Clock jitter \" "; + $graphcmd .= "GPRINT:\"cjit:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"cjit:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"cjit:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"cjit:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"Clk freq wander\" "; + $graphcmd .= "GPRINT:\"wander:MIN:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"wander:AVERAGE:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"wander:MAX:%7.2lf %s \" "; + $graphcmd .= "GPRINT:\"wander:LAST:%7.2lf %S \" "; + $graphcmd .= "COMMENT:\"\\n\" "; + $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" "; +} +else { + $data = false; + log_error(sprintf(gettext("Sorry we do not have data to graph for %s"),$curdatabase)); +} + +/* check modification time to see if we need to generate image */ +if (file_exists("$rrdtmppath$curdatabase-$curgraph.png")) { + if((time() - filemtime("$rrdtmppath$curdatabase-$curgraph.png")) >= 15 ) { + if($data) + $_gb = exec("$graphcmd 2>&1", $graphcmdoutput, $graphcmdreturn); + $graphcmdoutput = implode(" ", $graphcmdoutput) . $graphcmd; + flush(); + usleep(500); + } +} else { + if($data) + $_gb = exec("$graphcmd 2>&1", $graphcmdoutput, $graphcmdreturn); + $graphcmdoutput = implode(" ", $graphcmdoutput) . $graphcmd; + flush(); + usleep(500); +} +if(($graphcmdreturn <> 0) || (! $data)) { + log_error(sprintf(gettext('Failed to create graph with error code %1$s, the error is: %2$s'),$graphcmdreturn,$graphcmdoutput)); + if(strstr($curdatabase, "queues")) { + log_error(sprintf(gettext("failed to create graph from %s%s, removing database"),$rrddbpath,$curdatabase)); + unlink_if_exists($rrddbpath . $curif . $queues); + flush(); + usleep(500); + enable_rrd_graphing(); + } + if(strstr($curdatabase, "queuesdrop")) { + log_error(sprintf(gettext("failed to create graph from %s%s, removing database"),$rrddbpath,$curdatabase)); + unlink_if_exists($rrddbpath . $curdatabase); + flush(); + usleep(500); + enable_rrd_graphing(); + } + header("Content-type: image/png"); + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); + header("Cache-Control: no-store, no-cache, must-revalidate"); + header("Cache-Control: post-check=0, pre-check=0", false); + header("Pragma: no-cache"); + $file= "/usr/local/www/themes/{$g['theme']}/images/misc/rrd_error.png"; + readfile($file); +} else { + $file = "$rrdtmppath$curdatabase-$curgraph.png"; + if(file_exists("$file")) { + header("Content-type: image/png"); + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); + header("Cache-Control: no-store, no-cache, must-revalidate"); + header("Cache-Control: post-check=0, pre-check=0", false); + header("Pragma: no-cache"); + readfile($file); + } +} + +?> diff --git a/usr/local/www/status_rrd_graph_settings.php b/usr/local/www/status_rrd_graph_settings.php new file mode 100644 index 000000000..4c3e35a7b --- /dev/null +++ b/usr/local/www/status_rrd_graph_settings.php @@ -0,0 +1,260 @@ + + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/bin/find + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-status-rrdgraph-settings +##|*NAME=Status: RRD Graphs settings page +##|*DESCR=Allow access to the 'Status: RRD Graphs: settings' page. +##|*MATCH=status_rrd_graph_settings.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("filter.inc"); +require("shaper.inc"); +require_once("rrd.inc"); + +$pconfig['enable'] = isset($config['rrd']['enable']); +$pconfig['category'] = $config['rrd']['category']; +$pconfig['style'] = $config['rrd']['style']; +$pconfig['period'] = $config['rrd']['period']; + +$curcat = "settings"; +$categories = array('system' => gettext("System"), + 'traffic' => gettext("Traffic"), + 'packets' => gettext("Packets"), + 'quality' => gettext("Quality"), + 'queues' => gettext("Queues"), + 'captiveportal' => gettext("Captive Portal")); + +if(isset($config['ntpd']['statsgraph'])) { + $categories['ntpd'] = gettext("NTP"); +} + +$styles = array('inverse' => gettext("Inverse"), + 'absolute' => gettext("Absolute")); +$periods = array("absolute" => gettext("Absolute Timespans"), + "current" => gettext("Current Period"), + "previous" => gettext("Previous Period")); + +if ($_POST['ResetRRD']) { + mwexec('/bin/rm /var/db/rrd/*'); + enable_rrd_graphing(); + setup_gateways_monitor(); + $savemsg = "RRD data has been cleared. New RRD files have been generated."; +} elseif ($_POST) { + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + /* none */ + + if (!$input_errors) { + $config['rrd']['enable'] = $_POST['enable'] ? true : false; + $config['rrd']['category'] = $_POST['category']; + $config['rrd']['style'] = $_POST['style']; + $config['rrd']['period'] = $_POST['period']; + write_config(); + + $retval = 0; + $retval = enable_rrd_graphing(); + $savemsg = get_std_save_message($retval); + } +} + + + +$rrddbpath = "/var/db/rrd/"; +chdir($rrddbpath); +$databases = glob("*.rrd"); + +foreach($databases as $database) { + if(stristr($database, "wireless")) { + $wireless = true; + } + if(stristr($database, "queues")) { + $queues = true; + } + if(stristr($database, "-cellular") && !empty($config['ppps'])) { + $cellular = true; + } + if(stristr($database, "-vpnusers")) { + $vpnusers = true; + } + if(stristr($database, "captiveportal-") && is_array($config['captiveportal'])) { + $captiveportal = true; + } +} + +$pgtitle = array(gettext("Status"),gettext("RRD Graphs")); +include("head.inc"); + +?> + + + + +
                            + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + onclick="enable_change(false)" /> + +
                            + + +
                            + + +
                            + + +
                              + " onclick="enable_change(true)" /> +
                              + " onclick="return confirm('')" /> +
                             
                            + +
                            +
                            +
                            + +
                            + + + diff --git a/usr/local/www/status_services.php b/usr/local/www/status_services.php new file mode 100755 index 000000000..c08f773fa --- /dev/null +++ b/usr/local/www/status_services.php @@ -0,0 +1,129 @@ + + + + +
                            + + +
                            + + + + + + + + + + 0) { + uasort($services, "service_name_compare"); + foreach($services as $service) { + if (empty($service['name'])) + continue; + if (empty($service['description'])) + $service['description'] = get_pkg_descr($service['name']); + echo "\n"; + echo "\n"; + // if service is running then listr else listbg + $bgclass = null; + if (get_service_status($service)) + $bgclass = "listr"; + else + $bgclass = "listbg"; + echo "\n"; + echo "\n"; + } +} else { + echo "\n"; +} + +?> + +
                            " . $service['name'] . "" . $service['description'] . "" . get_service_status_icon($service, true, true) . "" . get_service_control_links($service); + $scut = get_shortcut_by_service_name($service['name']); + if (!empty($scut)) { + echo get_shortcut_main_link($scut, true, $service); + echo get_shortcut_status_link($scut, true, $service); + echo get_shortcut_log_link($scut, true); + } + echo "
                            " . gettext("No services found") . " .
                            +
                            +
                            + + + diff --git a/usr/local/www/status_upnp.php b/usr/local/www/status_upnp.php new file mode 100644 index 000000000..72c939800 --- /dev/null +++ b/usr/local/www/status_upnp.php @@ -0,0 +1,125 @@ +. + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /sbin/pfctl + pfSense_MODULE: upnp +*/ + +##|+PRIV +##|*IDENT=page-status-upnpstatus +##|*NAME=Status: UPnP Status page +##|*DESCR=Allow access to the 'Status: UPnP Status' page. +##|*MATCH=status_upnp.php* +##|-PRIV + +require("guiconfig.inc"); + +if ($_POST) { + if ($_POST['clear'] == "Clear") { + upnp_action('restart'); + $savemsg = gettext("Rules have been cleared and the daemon restarted"); + } +} + +$rdr_entries = array(); +exec("/sbin/pfctl -aminiupnpd -sn", $rdr_entries, $pf_ret); + +$now = time(); +$year = date("Y"); + +$pgtitle = array(gettext("Status"),gettext("UPnP & NAT-PMP Status")); +$shortcut_section = "upnp"; +include("head.inc"); +?> + + + + +
                            + + + + + + + +
                            +
                            + " /> . +
                            +
                            + + + + + + + + + (.*) port (.*)/", $rdr_entry, $matches)) + $rdr_proto = $matches[2]; + $rdr_port = $matches[3]; + $rdr_label =$matches[4]; + $rdr_ip = $matches[5]; + $rdr_iport = $matches[6]; + ?> + + + + + + + + +
                            + + + + + + + + + +
                            +
                            +
                            + + + diff --git a/usr/local/www/status_wireless.php b/usr/local/www/status_wireless.php new file mode 100644 index 000000000..c0d4a4bd2 --- /dev/null +++ b/usr/local/www/status_wireless.php @@ -0,0 +1,196 @@ + "") + $if = $_GET['if']; + +$ciflist = get_configured_interface_with_descr(); +if(empty($if)) { + /* Find the first interface + that is wireless */ + foreach($ciflist as $interface => $ifdescr) { + if(is_interface_wireless(get_real_interface($interface))) { + $if = $interface; + break; + } + } +} +?> + + + +
                            + + + + + +
                            + $ifdescr) { + if (is_interface_wireless(get_real_interface($interface))) { + $enabled = false; + if($if == $interface) + $enabled = true; + $tab_array[] = array(gettext("Status") . " ({$ifdescr})", $enabled, "status_wireless.php?if={$interface}"); + } +} +$rwlif = get_real_interface($if); +if($_POST['rescanwifi'] <> "") { + mwexec_bg("/sbin/ifconfig {$rwlif} scan 2>&1"); + $savemsg = gettext("Rescan has been initiated in the background. Refresh this page in 10 seconds to see the results."); +} +if ($savemsg) print_info_box($savemsg); +display_top_tabs($tab_array); +?> +
                            +
                            + +

                            + + + + + + + + + + + + + + +&1", $states, $ret); + /* Skip Header */ + array_shift($states); + + $counter=0; + foreach($states as $state) { + /* Split by Mac address for the SSID Field */ + $split = preg_split("/([0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f])/i", $state); + preg_match("/([0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f]\:[0-9a-f][[0-9a-f])/i", $state, $bssid); + $ssid = htmlspecialchars($split[0]); + $bssid = $bssid[0]; + /* Split the rest by using spaces for this line using the 2nd part */ + $split = preg_split("/[ ]+/i", $split[1]); + $channel = $split[1]; + $rate = $split[2]; + $rssi = $split[3]; + $int = $split[4]; + $caps = "$split[5] $split[6] $split[7] $split[8] $split[9] $split[10] $split[11] "; + + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print "\n"; + } +?> + +
                            SSIDBSSIDCHANRATERSSIINTCAPS
                            {$ssid}{$bssid}{$channel}{$rate}{$rssi}{$int}{$caps}
                            +
                            + + + + + + + + + + + + + + + + + +&1", $states, $ret); + array_shift($states); + + $counter=0; + foreach($states as $state) { + $split = preg_split("/[ ]+/i", $state); + /* Split the rest by using spaces for this line using the 2nd part */ + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print "\n"; + } + +/* XXX: what stats to we get for adhoc mode? */ + +?> + +
                            ADDRAIDCHANRATERSSIIDLETXSEQRXSEQCAPSERP
                            {$split[0]}{$split[1]}{$split[2]}{$split[3]}{$split[4]}{$split[5]}{$split[6]}{$split[7]}{$split[8]}{$split[9]}
                            +

                            + Flags: A = authorized, E = Extended Rate (802.11g), P = Power save mode
                            + Capabilities: E = ESS (infrastructure mode), I = IBSS (ad-hoc mode), P = privacy (WEP/TKIP/AES), + S = Short preamble, s = Short slot time +
                            + + + + diff --git a/usr/local/www/system.php b/usr/local/www/system.php new file mode 100644 index 000000000..c5cfe5209 --- /dev/null +++ b/usr/local/www/system.php @@ -0,0 +1,524 @@ +. + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /bin/kill /usr/bin/tar + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-system-generalsetup +##|*NAME=System: General Setup page +##|*DESCR=Allow access to the 'System: General Setup' page. +##|*MATCH=system.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +$pconfig['hostname'] = $config['system']['hostname']; +$pconfig['domain'] = $config['system']['domain']; +list($pconfig['dns1'],$pconfig['dns2'],$pconfig['dns3'],$pconfig['dns4']) = $config['system']['dnsserver']; + +$arr_gateways = return_gateways_array(); + +$pconfig['dns1gw'] = $config['system']['dns1gw']; +$pconfig['dns2gw'] = $config['system']['dns2gw']; +$pconfig['dns3gw'] = $config['system']['dns3gw']; +$pconfig['dns4gw'] = $config['system']['dns4gw']; + +$pconfig['dnsallowoverride'] = isset($config['system']['dnsallowoverride']); +$pconfig['timezone'] = $config['system']['timezone']; +$pconfig['timeupdateinterval'] = $config['system']['time-update-interval']; +$pconfig['timeservers'] = $config['system']['timeservers']; +$pconfig['theme'] = $config['system']['theme']; +$pconfig['language'] = $config['system']['language']; + +$pconfig['dnslocalhost'] = isset($config['system']['dnslocalhost']); + +if (!isset($pconfig['timeupdateinterval'])) + $pconfig['timeupdateinterval'] = 300; +if (!$pconfig['timezone']) + $pconfig['timezone'] = "Etc/UTC"; +if (!$pconfig['timeservers']) + $pconfig['timeservers'] = "pool.ntp.org"; + +$changedesc = gettext("System") . ": "; +$changecount = 0; + +function is_timezone($elt) { + return !preg_match("/\/$/", $elt); +} + +if($pconfig['timezone'] <> $_POST['timezone']) { + filter_pflog_start(true); +} + +exec('/usr/bin/tar -tzf /usr/share/zoneinfo.tgz', $timezonelist); +$timezonelist = array_filter($timezonelist, 'is_timezone'); +sort($timezonelist); + +$multiwan = false; +$interfaces = get_configured_interface_list(); +foreach($interfaces as $interface) { + if(interface_has_gateway($interface)) { + $multiwan = true; + } +} + +if ($_POST) { + + $changecount++; + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "hostname domain"); + $reqdfieldsn = array(gettext("Hostname"),gettext("Domain")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if ($_POST['hostname'] && !is_hostname($_POST['hostname'])) { + $input_errors[] = gettext("The hostname may only contain the characters a-z, 0-9 and '-'."); + } + if ($_POST['domain'] && !is_domain($_POST['domain'])) { + $input_errors[] = gettext("The domain may only contain the characters a-z, 0-9, '-' and '.'."); + } + + $ignore_posted_dnsgw = array(); + + for ($dnscounter=1; $dnscounter<5; $dnscounter++){ + $dnsname="dns{$dnscounter}"; + $dnsgwname="dns{$dnscounter}gw"; + if (($_POST[$dnsname] && !is_ipaddr($_POST[$dnsname]))) { + $input_errors[] = gettext("A valid IP address must be specified for DNS server $dnscounter."); + } else { + if(($_POST[$dnsgwname] <> "") && ($_POST[$dnsgwname] <> "none")) { + // A real gateway has been selected. + if (is_ipaddr($_POST[$dnsname])) { + if ((is_ipaddrv4($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false )) { + $input_errors[] = gettext("You can not specify IPv6 gateway '{$_POST[$dnsgwname]}' for IPv4 DNS server '{$_POST[$dnsname]}'"); + } + if ((is_ipaddrv6($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false )) { + $input_errors[] = gettext("You can not specify IPv4 gateway '{$_POST[$dnsgwname]}' for IPv6 DNS server '{$_POST[$dnsname]}'"); + } + } else { + // The user selected a gateway but did not provide a DNS address. Be nice and set the gateway back to "none". + $ignore_posted_dnsgw[$dnsgwname] = true; + } + } + } + } + + $direct_networks_list = explode(" ", filter_get_direct_networks_list()); + for ($dnscounter=1; $dnscounter<5; $dnscounter++) { + $dnsitem = "dns{$dnscounter}"; + $dnsgwitem = "dns{$dnscounter}gw"; + if ($_POST[$dnsgwitem]) { + if(interface_has_gateway($_POST[$dnsgwitem])) { + foreach($direct_networks_list as $direct_network) { + if(ip_in_subnet($_POST[$dnsitem], $direct_network)) { + $input_errors[] = sprintf(gettext("You can not assign a gateway to DNS '%s' server which is on a directly connected network."),$_POST[$dnsitem]); + } + } + } + } + } + + $t = (int)$_POST['timeupdateinterval']; + if (($t < 0) || (($t > 0) && ($t < 6)) || ($t > 1440)) { + $input_errors[] = gettext("The time update interval must be either 0 (disabled) or between 6 and 1440."); + } + # it's easy to have a little too much whitespace in the field, clean it up for the user before processing. + $_POST['timeservers'] = preg_replace('/[[:blank:]]+/', ' ', $_POST['timeservers']); + $_POST['timeservers'] = trim($_POST['timeservers']); + foreach (explode(' ', $_POST['timeservers']) as $ts) { + if (!is_domain($ts)) { + $input_errors[] = gettext("A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'."); + } + } + + if (!$input_errors) { + update_if_changed("hostname", $config['system']['hostname'], $_POST['hostname']); + update_if_changed("domain", $config['system']['domain'], $_POST['domain']); + + update_if_changed("timezone", $config['system']['timezone'], $_POST['timezone']); + update_if_changed("NTP servers", $config['system']['timeservers'], strtolower($_POST['timeservers'])); + update_if_changed("NTP update interval", $config['system']['time-update-interval'], $_POST['timeupdateinterval']); + + if($_POST['language'] && $_POST['language'] != $config['system']['language']) { + $config['system']['language'] = $_POST['language']; + set_language($config['system']['language']); + } + + /* pfSense themes */ + if (! $g['disablethemeselection']) { + update_if_changed("System Theme", $config['theme'], $_POST['theme']); + } + + /* XXX - billm: these still need updating after figuring out how to check if they actually changed */ + $olddnsservers = $config['system']['dnsserver']; + unset($config['system']['dnsserver']); + if ($_POST['dns1']) + $config['system']['dnsserver'][] = $_POST['dns1']; + if ($_POST['dns2']) + $config['system']['dnsserver'][] = $_POST['dns2']; + if ($_POST['dns3']) + $config['system']['dnsserver'][] = $_POST['dns3']; + if ($_POST['dns4']) + $config['system']['dnsserver'][] = $_POST['dns4']; + + $olddnsallowoverride = $config['system']['dnsallowoverride']; + + unset($config['system']['dnsallowoverride']); + $config['system']['dnsallowoverride'] = $_POST['dnsallowoverride'] ? true : false; + + if($_POST['dnslocalhost'] == "yes") + $config['system']['dnslocalhost'] = true; + else + unset($config['system']['dnslocalhost']); + + /* which interface should the dns servers resolve through? */ + $outdnscounter = 0; + for ($dnscounter=1; $dnscounter<5; $dnscounter++) { + $dnsname="dns{$dnscounter}"; + $dnsgwname="dns{$dnscounter}gw"; + $olddnsgwname = $config['system'][$dnsgwname]; + + if ($ignore_posted_dnsgw[$dnsgwname]) + $thisdnsgwname = "none"; + else + $thisdnsgwname = $pconfig[$dnsgwname]; + + // "Blank" out the settings for this index, then we set them below using the "outdnscounter" index. + $config['system'][$dnsgwname] = "none"; + $pconfig[$dnsgwname] = "none"; + $pconfig[$dnsname] = ""; + + if ($_POST[$dnsname]) { + // Only the non-blank DNS servers were put into the config above. + // So we similarly only add the corresponding gateways sequentially to the config (and to pconfig), as we find non-blank DNS servers. + // This keeps the DNS server IP and corresponding gateway "lined up" when the user blanks out a DNS server IP in the middle of the list. + $outdnscounter++; + $outdnsname="dns{$outdnscounter}"; + $outdnsgwname="dns{$outdnscounter}gw"; + $pconfig[$outdnsname] = $_POST[$dnsname]; + if($_POST[$dnsgwname]) { + $config['system'][$outdnsgwname] = $thisdnsgwname; + $pconfig[$outdnsgwname] = $thisdnsgwname; + } else { + // Note: when no DNS GW name is chosen, the entry is set to "none", so actually this case never happens. + unset($config['system'][$outdnsgwname]); + $pconfig[$outdnsgwname] = ""; + } + } + if (($olddnsgwname != "") && ($olddnsgwname != "none") && (($olddnsgwname != $thisdnsgwname) || ($olddnsservers[$dnscounter-1] != $_POST[$dnsname]))) { + // A previous DNS GW name was specified. It has now gone or changed, or the DNS server address has changed. + // Remove the route. Later calls will add the correct new route if needed. + if (is_ipaddrv4($olddnsservers[$dnscounter-1])) + mwexec("/sbin/route delete " . escapeshellarg($olddnsservers[$dnscounter-1])); + else + if (is_ipaddrv6($olddnsservers[$dnscounter-1])) + mwexec("/sbin/route delete -inet6 " . escapeshellarg($olddnsservers[$dnscounter-1])); + } + } + + if ($changecount > 0) + write_config($changedesc); + + $retval = 0; + $retval = system_hostname_configure(); + $retval |= system_hosts_generate(); + $retval |= system_resolvconf_generate(); + if (isset($config['dnsmasq']['enable'])) + $retval |= services_dnsmasq_configure(); + elseif (isset($config['unbound']['enable'])) + $retval |= services_unbound_configure(); + $retval |= system_timezone_configure(); + $retval |= system_ntp_configure(); + + if ($olddnsallowoverride != $config['system']['dnsallowoverride']) + $retval |= send_event("service reload dns"); + + // Reload the filter - plugins might need to be run. + $retval |= filter_configure(); + + $savemsg = get_std_save_message($retval); + } + + unset($ignore_posted_dnsgw); +} + +$pgtitle = array(gettext("System"),gettext("General Setup")); +include("head.inc"); + +?> + + + + + + + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +
                            + + +
                            + firewall +
                            +
                            +
                            + + +
                            + +
                            +
                            +
                            + + + + + + + + + + + + + +
                            + + + + + +
                            +
                            + + +
                            + +
                            + +
                            + +
                            + /> + + + +
                            + +
                            +
                            + /> + + + +
                            + +
                            +
                            + +
                            + + + +
                            + +
                            + + + +
                            + + + + +
                             
                              + + + + . + +
                             
                              + " /> +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/system_advanced_admin.php b/usr/local/www/system_advanced_admin.php new file mode 100644 index 000000000..4982b66a4 --- /dev/null +++ b/usr/local/www/system_advanced_admin.php @@ -0,0 +1,637 @@ +. + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/bin/killall + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-system-advanced-admin +##|*NAME=System: Advanced: Admin Access Page +##|*DESCR=Allow access to the 'System: Advanced: Admin Access' page. +##|*MATCH=system_advanced_admin.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +$pconfig['webguiproto'] = $config['system']['webgui']['protocol']; +$pconfig['webguiport'] = $config['system']['webgui']['port']; +$pconfig['max_procs'] = ($config['system']['webgui']['max_procs']) ? $config['system']['webgui']['max_procs'] : 2; +$pconfig['ssl-certref'] = $config['system']['webgui']['ssl-certref']; +$pconfig['disablehttpredirect'] = isset($config['system']['webgui']['disablehttpredirect']); +$pconfig['disableconsolemenu'] = isset($config['system']['disableconsolemenu']); +$pconfig['noantilockout'] = isset($config['system']['webgui']['noantilockout']); +$pconfig['nodnsrebindcheck'] = isset($config['system']['webgui']['nodnsrebindcheck']); +$pconfig['nohttpreferercheck'] = isset($config['system']['webgui']['nohttpreferercheck']); +$pconfig['beast_protection'] = isset($config['system']['webgui']['beast_protection']); +$pconfig['loginautocomplete'] = isset($config['system']['webgui']['loginautocomplete']); +$pconfig['althostnames'] = $config['system']['webgui']['althostnames']; +$pconfig['enableserial'] = $config['system']['enableserial']; +$pconfig['serialspeed'] = $config['system']['serialspeed']; +$pconfig['primaryconsole'] = $config['system']['primaryconsole']; +$pconfig['enablesshd'] = $config['system']['enablesshd']; +$pconfig['sshport'] = $config['system']['ssh']['port']; +$pconfig['sshdkeyonly'] = isset($config['system']['ssh']['sshdkeyonly']); +$pconfig['quietlogin'] = isset($config['system']['webgui']['quietlogin']); + +$a_cert =& $config['cert']; + +$certs_available = false; +if (is_array($a_cert) && count($a_cert)) + $certs_available = true; + +if (!$pconfig['webguiproto'] || !$certs_available) + $pconfig['webguiproto'] = "http"; + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + if ($_POST['webguiport']) + if(!is_port($_POST['webguiport'])) + $input_errors[] = gettext("You must specify a valid webConfigurator port number"); + + if ($_POST['max_procs']) + if(!is_numeric($_POST['max_procs']) || ($_POST['max_procs'] < 1) || ($_POST['max_procs'] > 500)) + $input_errors[] = gettext("Max Processes must be a number 1 or greater"); + + if ($_POST['althostnames']) { + $althosts = explode(" ", $_POST['althostnames']); + foreach ($althosts as $ah) + if (!is_hostname($ah)) + $input_errors[] = sprintf(gettext("Alternate hostname %s is not a valid hostname."),htmlspecialchars($ah)); + } + + if ($_POST['sshport']) + if(!is_port($_POST['sshport'])) + $input_errors[] = gettext("You must specify a valid port number"); + + if($_POST['sshdkeyonly'] == "yes") + $config['system']['ssh']['sshdkeyonly'] = "enabled"; + else if (isset($config['system']['ssh']['sshdkeyonly'])) + unset($config['system']['ssh']['sshdkeyonly']); + + ob_flush(); + flush(); + + if (!$input_errors) { + + if (update_if_changed("webgui protocol", $config['system']['webgui']['protocol'], $_POST['webguiproto'])) + $restart_webgui = true; + if (update_if_changed("webgui port", $config['system']['webgui']['port'], $_POST['webguiport'])) + $restart_webgui = true; + if (update_if_changed("webgui certificate", $config['system']['webgui']['ssl-certref'], $_POST['ssl-certref'])) + $restart_webgui = true; + if (update_if_changed("webgui max processes", $config['system']['webgui']['max_procs'], $_POST['max_procs'])) + $restart_webgui = true; + + if ($_POST['disablehttpredirect'] == "yes") { + $config['system']['webgui']['disablehttpredirect'] = true; + $restart_webgui = true; + } else { + unset($config['system']['webgui']['disablehttpredirect']); + $restart_webgui = true; + } + if ($_POST['quietlogin'] == "yes") { + $config['system']['webgui']['quietlogin'] = true; + } else { + unset($config['system']['webgui']['quietlogin']); + } + + if($_POST['disableconsolemenu'] == "yes") + $config['system']['disableconsolemenu'] = true; + else + unset($config['system']['disableconsolemenu']); + + if ($_POST['noantilockout'] == "yes") + $config['system']['webgui']['noantilockout'] = true; + else + unset($config['system']['webgui']['noantilockout']); + + if ($_POST['enableserial'] == "yes" || $g['enableserial_force']) + $config['system']['enableserial'] = true; + else + unset($config['system']['enableserial']); + + if (is_numeric($_POST['serialspeed'])) + $config['system']['serialspeed'] = $_POST['serialspeed']; + else + unset($config['system']['serialspeed']); + + if ($_POST['primaryconsole']) + $config['system']['primaryconsole'] = $_POST['primaryconsole']; + else + unset($config['system']['primaryconsole']); + + if ($_POST['nodnsrebindcheck'] == "yes") + $config['system']['webgui']['nodnsrebindcheck'] = true; + else + unset($config['system']['webgui']['nodnsrebindcheck']); + + if ($_POST['nohttpreferercheck'] == "yes") + $config['system']['webgui']['nohttpreferercheck'] = true; + else + unset($config['system']['webgui']['nohttpreferercheck']); + + if ($_POST['beast_protection'] == "yes") + $config['system']['webgui']['beast_protection'] = true; + else + unset($config['system']['webgui']['beast_protection']); + + if ($_POST['loginautocomplete'] == "yes") + $config['system']['webgui']['loginautocomplete'] = true; + else + unset($config['system']['webgui']['loginautocomplete']); + + if ($_POST['althostnames']) + $config['system']['webgui']['althostnames'] = $_POST['althostnames']; + else + unset($config['system']['webgui']['althostnames']); + + $sshd_enabled = $config['system']['enablesshd']; + if($_POST['enablesshd']) + $config['system']['enablesshd'] = "enabled"; + else + unset($config['system']['enablesshd']); + + $sshd_keyonly = isset($config['system']['sshdkeyonly']); + if ($_POST['sshdkeyonly']) + $config['system']['sshdkeyonly'] = true; + else + unset($config['system']['sshdkeyonly']); + + $sshd_port = $config['system']['ssh']['port']; + if ($_POST['sshport']) + $config['system']['ssh']['port'] = $_POST['sshport']; + else if (isset($config['system']['ssh']['port'])) + unset($config['system']['ssh']['port']); + + if (($sshd_enabled != $config['system']['enablesshd']) || + ($sshd_keyonly != $config['system']['sshdkeyonly']) || + ($sshd_port != $config['system']['ssh']['port'])) + $restart_sshd = true; + + if ($restart_webgui) { + global $_SERVER; + $http_host_port = explode("]", $_SERVER['HTTP_HOST']); + /* IPv6 address check */ + if(strstr($_SERVER['HTTP_HOST'], "]")) { + if(count($http_host_port) > 1) { + array_pop($http_host_port); + $host = str_replace(array("[", "]"), "", implode(":", $http_host_port)); + $host = "[{$host}]"; + } else { + $host = str_replace(array("[", "]"), "", implode(":", $http_host_port)); + $host = "[{$host}]"; + } + } else { + list($host) = explode(":", $_SERVER['HTTP_HOST']); + } + $prot = $config['system']['webgui']['protocol']; + $port = $config['system']['webgui']['port']; + if ($port) + $url = "{$prot}://{$host}:{$port}/system_advanced_admin.php"; + else + $url = "{$prot}://{$host}/system_advanced_admin.php"; + } + + write_config(); + + $retval = filter_configure(); + $savemsg = get_std_save_message($retval); + + if ($restart_webgui) + $savemsg .= sprintf("
                            " . gettext("One moment...redirecting to %s in 20 seconds."),$url); + + conf_mount_rw(); + setup_serial_port(); + // Restart DNS in case dns rebinding toggled + if (isset($config['dnsmasq']['enable'])) + services_dnsmasq_configure(); + elseif (isset($config['unbound']['enable'])) + services_unbound_configure(); + conf_mount_ro(); + } +} + +unset($hwcrypto); +$fd = @fopen("{$g['varlog_path']}/dmesg.boot", "r"); +if ($fd) { + while (!feof($fd)) { + $dmesgl = fgets($fd); + if (preg_match("/^hifn.: (.*?),/", $dmesgl, $matches)) { + unset($pconfig['beast_protection']); + $disable_beast_option = "disabled"; + $hwcrypto = $matches[1]; + break; + } + } + fclose($fd); +} + +$pgtitle = array(gettext("System"),gettext("Advanced: Admin Access")); +include("head.inc"); + +?> + + + + + +
                            + + + + + + + +
                            + +
                            +
                            + + +   + + +
                            +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + onclick="prot_change()" /> + +     + onclick="prot_change()" /> + + +
                            + + + + +
                            + +
                            + +
                            + + + +
                            + +
                            + + + +
                            + /> + +
                            + +
                            + /> + +
                            + +
                            + /> + +
                            + +
                            + + /> + +
                            + + +
                            + /> + +
                            + DNS Rebinding attacks. " . + "This blocks private IP responses from your configured DNS servers. Check this box to disable this protection if it interferes with " . + "webConfigurator access or name resolution in your environment. "); ?> +
                            + +
                            + +
                            + +
                            + /> + +
                            + Wikipedia."); ?> +
                            + /> + +
                            + +
                            + " . sprintf(gettext("This option has been automatically disabled because a conflicting cryptographic accelerator card has been detected (%s)."), $hwcrypto) . "

                            "; + } ?> + Wikipedia."); ?> +
                             
                            + /> + +
                            + /> + +
                            + + + +
                            + +
                            + +
                             
                            + /> + + null modem serial cable or adapter is required to use the serial console."); ?> +
                            + bps +
                            +
                            + +
                            +
                             
                            + /> + +
                            + +
                             
                             " />
                             
                            +
                            +
                            +
                            + + + +"; +?> + + + + diff --git a/usr/local/www/system_advanced_firewall.php b/usr/local/www/system_advanced_firewall.php new file mode 100644 index 000000000..48e0de49b --- /dev/null +++ b/usr/local/www/system_advanced_firewall.php @@ -0,0 +1,570 @@ +. + 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. +*/ +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-system-advanced-firewall +##|*NAME=System: Advanced: Firewall and NAT page +##|*DESCR=Allow access to the 'System: Advanced: Firewall and NAT' page. +##|*MATCH=system_advanced_firewall.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +$pconfig['disablefilter'] = $config['system']['disablefilter']; +$pconfig['rfc959workaround'] = $config['system']['rfc959workaround']; +$pconfig['scrubnodf'] = $config['system']['scrubnodf']; +$pconfig['scrubrnid'] = $config['system']['scrubrnid']; +$pconfig['tcpidletimeout'] = $config['filter']['tcpidletimeout']; +$pconfig['optimization'] = $config['filter']['optimization']; +$pconfig['adaptivestart'] = $config['system']['adaptivestart']; +$pconfig['adaptiveend'] = $config['system']['adaptiveend']; +$pconfig['maximumstates'] = $config['system']['maximumstates']; +$pconfig['aliasesresolveinterval'] = $config['system']['aliasesresolveinterval']; +$old_aliasesresolveinterval = $config['system']['aliasesresolveinterval']; +$pconfig['checkaliasesurlcert'] = isset($config['system']['checkaliasesurlcert']); +$pconfig['maximumtableentries'] = $config['system']['maximumtableentries']; +$pconfig['disablereplyto'] = isset($config['system']['disablereplyto']); +$pconfig['disablenegate'] = isset($config['system']['disablenegate']); +$pconfig['bogonsinterval'] = $config['system']['bogons']['interval']; +$pconfig['disablenatreflection'] = $config['system']['disablenatreflection']; +$pconfig['enablebinatreflection'] = $config['system']['enablebinatreflection']; +$pconfig['reflectiontimeout'] = $config['system']['reflectiontimeout']; +$pconfig['bypassstaticroutes'] = isset($config['filter']['bypassstaticroutes']); +$pconfig['disablescrub'] = isset($config['system']['disablescrub']); +$pconfig['tftpinterface'] = explode(",", $config['system']['tftpinterface']); +$pconfig['disablevpnrules'] = isset($config['system']['disablevpnrules']); + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + if ((empty($_POST['adaptivestart']) && !empty($_POST['adaptiveend'])) || (!empty($_POST['adaptivestart']) && empty($_POST['adaptiveend']))) + $input_errors[] = gettext("The Firewall Adaptive values must be set together."); + if (!empty($_POST['adaptivestart']) && !is_numericint($_POST['adaptivestart'])) { + $input_errors[] = gettext("The Firewall Adaptive Start value must be an integer."); + } + if (!empty($_POST['adaptiveend']) && !is_numericint($_POST['adaptiveend'])) { + $input_errors[] = gettext("The Firewall Adaptive End value must be an integer."); + } + if ($_POST['maximumstates'] && !is_numericint($_POST['maximumstates'])) { + $input_errors[] = gettext("The Firewall Maximum States value must be an integer."); + } + if ($_POST['aliasesresolveinterval'] && !is_numericint($_POST['aliasesresolveinterval'])) { + $input_errors[] = gettext("The Aliases Hostname Resolve Interval value must be an integer."); + } + if ($_POST['maximumtableentries'] && !is_numericint($_POST['maximumtableentries'])) { + $input_errors[] = gettext("The Firewall Maximum Table Entries value must be an integer."); + } + if ($_POST['tcpidletimeout'] && !is_numericint($_POST['tcpidletimeout'])) { + $input_errors[] = gettext("The TCP idle timeout must be an integer."); + } + if ($_POST['reflectiontimeout'] && !is_numericint($_POST['reflectiontimeout'])) { + $input_errors[] = gettext("The Reflection timeout must be an integer."); + } + + ob_flush(); + flush(); + + if (!$input_errors) { + + if($_POST['disablefilter'] == "yes") + $config['system']['disablefilter'] = "enabled"; + else + unset($config['system']['disablefilter']); + + if($_POST['disablevpnrules'] == "yes") + $config['system']['disablevpnrules'] = true; + else + unset($config['system']['disablevpnrules']); + if($_POST['rfc959workaround'] == "yes") + $config['system']['rfc959workaround'] = "enabled"; + else + unset($config['system']['rfc959workaround']); + + if($_POST['scrubnodf'] == "yes") + $config['system']['scrubnodf'] = "enabled"; + else + unset($config['system']['scrubnodf']); + + if($_POST['scrubrnid'] == "yes") + $config['system']['scrubrnid'] = "enabled"; + else + unset($config['system']['scrubrnid']); + + if (!empty($_POST['adaptiveend'])) + $config['system']['adaptiveend'] = $_POST['adaptiveend']; + else + unset($config['system']['adaptiveend']); + if (!empty($_POST['adaptivestart'])) + $config['system']['adaptivestart'] = $_POST['adaptivestart']; + else + unset($config['system']['adaptivestart']); + + if ($_POST['checkaliasesurlcert'] == "yes") + $config['system']['checkaliasesurlcert'] = true; + else + unset($config['system']['checkaliasesurlcert']); + + $config['system']['optimization'] = $_POST['optimization']; + $config['system']['maximumstates'] = $_POST['maximumstates']; + $config['system']['aliasesresolveinterval'] = $_POST['aliasesresolveinterval']; + $config['system']['maximumtableentries'] = $_POST['maximumtableentries']; + + if($_POST['natreflection'] == "proxy") { + unset($config['system']['disablenatreflection']); + unset($config['system']['enablenatreflectionpurenat']); + } else if($_POST['natreflection'] == "purenat") { + unset($config['system']['disablenatreflection']); + $config['system']['enablenatreflectionpurenat'] = "yes"; + } else { + $config['system']['disablenatreflection'] = "yes"; + unset($config['system']['enablenatreflectionpurenat']); + } + + if($_POST['enablebinatreflection'] == "yes") + $config['system']['enablebinatreflection'] = "yes"; + else + unset($config['system']['enablebinatreflection']); + + if($_POST['disablereplyto'] == "yes") + $config['system']['disablereplyto'] = $_POST['disablereplyto']; + else + unset($config['system']['disablereplyto']); + + if($_POST['disablenegate'] == "yes") + $config['system']['disablenegate'] = $_POST['disablenegate']; + else + unset($config['system']['disablenegate']); + + if($_POST['enablenatreflectionhelper'] == "yes") + $config['system']['enablenatreflectionhelper'] = "yes"; + else + unset($config['system']['enablenatreflectionhelper']); + + $config['system']['reflectiontimeout'] = $_POST['reflectiontimeout']; + + if($_POST['bypassstaticroutes'] == "yes") + $config['filter']['bypassstaticroutes'] = $_POST['bypassstaticroutes']; + elseif(isset($config['filter']['bypassstaticroutes'])) + unset($config['filter']['bypassstaticroutes']); + + if($_POST['disablescrub'] == "yes") + $config['system']['disablescrub'] = $_POST['disablescrub']; + else + unset($config['system']['disablescrub']); + + if ($_POST['tftpinterface']) + $config['system']['tftpinterface'] = implode(",", $_POST['tftpinterface']); + else + unset($config['system']['tftpinterface']); + + if ($_POST['bogonsinterval'] != $config['system']['bogons']['interval']) { + switch ($_POST['bogonsinterval']) { + case 'daily': + install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "*", "*", "*"); + break; + case 'weekly': + install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "*", "*", "0"); + break; + case 'monthly': + // fall through + default: + install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "1", "*", "*"); + } + $config['system']['bogons']['interval'] = $_POST['bogonsinterval']; + } + + write_config(); + + // Kill filterdns when value changes, filter_configure() will restart it + if (($old_aliasesresolveinterval != $config['system']['aliasesresolveinterval']) && + isvalidpid("{$g['varrun_path']}/filterdns.pid")) + killbypid("{$g['varrun_path']}/filterdns.pid"); + + $retval = 0; + $retval = filter_configure(); + if(stristr($retval, "error") <> true) + $savemsg = get_std_save_message($retval); + else + $savemsg = $retval; + } +} + +$pgtitle = array(gettext("System"),gettext("Advanced: Firewall and NAT")); +include("head.inc"); + +?> + + + + + + + +
                            + + + + + + + +
                            + +
                            +
                            + + +   + + +
                            +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + /> +
                            + +
                            + /> +
                            + +
                            + +
                            + + +
                            + +
                            + /> + +
                            +
                            + +
                            . +
                            +
                            + /> + +
                            +
                            + +
                            + +
                            + +
                            + +
                            +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + +
                            + + + + + + +
                            + /> + +
                            + +
                            +
                            Disable Auto-added VPN rules + /> + +
                            + + +
                            Disable reply-to + /> + +
                            + +
                            +
                            Disable Negate rules + /> + +
                            + +
                            +
                            + +
                            + +
                            + +
                            + /> + +
                            + +
                            +
                             
                            + +
                            + +
                             
                            + +
                            + +

                            + +

                            + +

                            + +
                            +
                            + +

                            + +
                            + /> + +

                            + +

                            + +
                            + /> + +
                            + +

                            + +
                            + + +
                             
                             " />
                            +
                            +
                            +
                            + + + + diff --git a/usr/local/www/system_advanced_misc.php b/usr/local/www/system_advanced_misc.php new file mode 100644 index 000000000..abfdda50c --- /dev/null +++ b/usr/local/www/system_advanced_misc.php @@ -0,0 +1,664 @@ +. + 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. +*/ +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-system-advanced-misc +##|*NAME=System: Advanced: Miscellaneous page +##|*DESCR=Allow access to the 'System: Advanced: Miscellaneous' page. +##|*MATCH=system_advanced_misc.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("vpn.inc"); +require_once("vslb.inc"); + +$pconfig['proxyurl'] = $config['system']['proxyurl']; +$pconfig['proxyport'] = $config['system']['proxyport']; +$pconfig['proxyuser'] = $config['system']['proxyuser']; +$pconfig['proxypass'] = $config['system']['proxypass']; +$pconfig['harddiskstandby'] = $config['system']['harddiskstandby']; +$pconfig['lb_use_sticky'] = isset($config['system']['lb_use_sticky']); +$pconfig['srctrack'] = $config['system']['srctrack']; +$pconfig['gw_switch_default'] = isset($config['system']['gw_switch_default']); +$pconfig['powerd_enable'] = isset($config['system']['powerd_enable']); +$pconfig['crypto_hardware'] = $config['system']['crypto_hardware']; +$pconfig['thermal_hardware'] = $config['system']['thermal_hardware']; +$pconfig['schedule_states'] = isset($config['system']['schedule_states']); +$pconfig['kill_states'] = isset($config['system']['kill_states']); +$pconfig['skip_rules_gw_down'] = isset($config['system']['skip_rules_gw_down']); +$pconfig['apinger_debug'] = isset($config['system']['apinger_debug']); +$pconfig['use_mfs_tmpvar'] = isset($config['system']['use_mfs_tmpvar']); +$pconfig['use_mfs_tmp_size'] = $config['system']['use_mfs_tmp_size']; +$pconfig['use_mfs_var_size'] = $config['system']['use_mfs_var_size']; +$pconfig['pkg_nochecksig'] = isset($config['system']['pkg_nochecksig']); + +$pconfig['powerd_ac_mode'] = "hadp"; +if (!empty($config['system']['powerd_ac_mode'])) + $pconfig['powerd_ac_mode'] = $config['system']['powerd_ac_mode']; + +$pconfig['powerd_battery_mode'] = "hadp"; +if (!empty($config['system']['powerd_battery_mode'])) + $pconfig['powerd_battery_mode'] = $config['system']['powerd_battery_mode']; + +$pconfig['powerd_normal_mode'] = "hadp"; +if (!empty($config['system']['powerd_normal_mode'])) + $pconfig['powerd_normal_mode'] = $config['system']['powerd_normal_mode']; + +$crypto_modules = array('glxsb' => gettext("AMD Geode LX Security Block"), + 'aesni' => gettext("AES-NI CPU-based Acceleration")); + +$thermal_hardware_modules = array( 'coretemp' => gettext("Intel Core* CPU on-die thermal sensor"), + 'amdtemp' => gettext("AMD K8, K10 and K11 CPU on-die thermal sensor")); + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + ob_flush(); + flush(); + + if (!empty($_POST['crypto_hardware']) && !array_key_exists($_POST['crypto_hardware'], $crypto_modules)) + $input_errors[] = gettext("Please select a valid Cryptographic Accelerator."); + + if (!empty($_POST['thermal_hardware']) && !array_key_exists($_POST['thermal_hardware'], $thermal_hardware_modules)) + $input_errors[] = gettext("Please select a valid Thermal Hardware Sensor."); + + if (!empty($_POST['use_mfs_tmp_size']) && (!is_numeric($_POST['use_mfs_tmp_size']) || ($_POST['use_mfs_tmp_size'] <= 40))) + $input_errors[] = gettext("/tmp Size must be numeric and should not be less than 40MB."); + + if (!empty($_POST['use_mfs_var_size']) && (!is_numeric($_POST['use_mfs_var_size']) || ($_POST['use_mfs_var_size'] <= 60))) + $input_errors[] = gettext("/var Size must be numeric and should not be less than 60MB."); + + if (!$input_errors) { + + if($_POST['harddiskstandby'] <> "") { + $config['system']['harddiskstandby'] = $_POST['harddiskstandby']; + system_set_harddisk_standby(); + } else + unset($config['system']['harddiskstandby']); + + if($_POST['proxyurl'] <> "") + $config['system']['proxyurl'] = $_POST['proxyurl']; + else + unset($config['system']['proxyurl']); + + if($_POST['proxyport'] <> "") + $config['system']['proxyport'] = $_POST['proxyport']; + else + unset($config['system']['proxyport']); + + if($_POST['proxyuser'] <> "") + $config['system']['proxyuser'] = $_POST['proxyuser']; + else + unset($config['system']['proxyuser']); + + if($_POST['proxypass'] <> "") + $config['system']['proxypass'] = $_POST['proxypass']; + else + unset($config['system']['proxypass']); + + $need_relayd_restart = false; + if($_POST['lb_use_sticky'] == "yes") { + if (!isset($config['system']['lb_use_sticky'])) { + $config['system']['lb_use_sticky'] = true; + $config['system']['srctrack'] = $_POST['srctrack']; + $need_relayd_restart = true; + } + } else { + if (isset($config['system']['lb_use_sticky'])) { + unset($config['system']['lb_use_sticky']); + $need_relayd_restart = true; + } + } + + if($_POST['gw_switch_default'] == "yes") + $config['system']['gw_switch_default'] = true; + else + unset($config['system']['gw_switch_default']); + + if($_POST['pkg_nochecksig'] == "yes") + $config['system']['pkg_nochecksig'] = true; + elseif (isset($config['system']['pkg_nochecksig'])) + unset($config['system']['pkg_nochecksig']); + + if($_POST['powerd_enable'] == "yes") + $config['system']['powerd_enable'] = true; + else + unset($config['system']['powerd_enable']); + + $config['system']['powerd_ac_mode'] = $_POST['powerd_ac_mode']; + $config['system']['powerd_battery_mode'] = $_POST['powerd_battery_mode']; + $config['system']['powerd_normal_mode'] = $_POST['powerd_normal_mode']; + + if($_POST['crypto_hardware']) + $config['system']['crypto_hardware'] = $_POST['crypto_hardware']; + else + unset($config['system']['crypto_hardware']); + + if($_POST['thermal_hardware']) + $config['system']['thermal_hardware'] = $_POST['thermal_hardware']; + else + unset($config['system']['thermal_hardware']); + + if($_POST['schedule_states'] == "yes") + $config['system']['schedule_states'] = true; + else + unset($config['system']['schedule_states']); + + if($_POST['kill_states'] == "yes") + $config['system']['kill_states'] = true; + else + unset($config['system']['kill_states']); + + if($_POST['skip_rules_gw_down'] == "yes") + $config['system']['skip_rules_gw_down'] = true; + else + unset($config['system']['skip_rules_gw_down']); + + $need_apinger_restart = false; + if($_POST['apinger_debug'] == "yes") { + if (!isset($config['system']['apinger_debug'])) + $need_apinger_restart = true; + $config['system']['apinger_debug'] = true; + } else { + if (isset($config['system']['apinger_debug'])) + $need_apinger_restart = true; + unset($config['system']['apinger_debug']); + } + + if($_POST['use_mfs_tmpvar'] == "yes") + $config['system']['use_mfs_tmpvar'] = true; + else + unset($config['system']['use_mfs_tmpvar']); + + $config['system']['use_mfs_tmp_size'] = $_POST['use_mfs_tmp_size']; + $config['system']['use_mfs_var_size'] = $_POST['use_mfs_var_size']; + + if (isset($_POST['rrdbackup'])) { + $config['system']['rrdbackup'] = $_POST['rrdbackup']; + install_cron_job("/etc/rc.backup_rrd.sh", ($config['system']['rrdbackup'] > 0), $minute="0", "*/{$config['system']['rrdbackup']}"); + } + if (isset($_POST['dhcpbackup'])) { + $config['system']['dhcpbackup'] = $_POST['dhcpbackup']; + install_cron_job("/etc/rc.backup_dhcpleases.sh", ($config['system']['dhcpbackup'] > 0), $minute="0", "*/{$config['system']['dhcpbackup']}"); + } + + write_config(); + + $retval = 0; + system_resolvconf_generate(true); + $retval = filter_configure(); + if(stristr($retval, "error") <> true) + $savemsg = get_std_save_message(gettext($retval)); + else + $savemsg = gettext($retval); + + activate_powerd(); + load_crypto(); + load_thermal_hardware(); + if ($need_relayd_restart) + relayd_configure(); + if ($need_apinger_restart) + setup_gateways_monitor(); + } +} + +$pgtitle = array(gettext("System"),gettext("Advanced: Miscellaneous")); +include("head.inc"); + +?> + + + + +
                            + + + + + + + +
                            + +
                            +
                            + + +   + + +
                            +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + " class="formfld unknown" /> +
                            + +
                            + " class="formfld unknown" /> +
                            + +
                            + " class="formfld unknown" /> +
                            + +
                            + " class="formfld unknown" /> +
                            + +
                            + onclick="sticky_checked(this)" /> +
                            + +
                            + " class="formfld unknown" /> +
                            + +
                            + /> +
                            + +
                             
                            + /> +
                            +
                            +  :  + +    +  :  + +
                            +  :  + +

                            + +
                             
                            + +
                            + +

                            + +
                             
                            + +
                            + +

                            + +
                             
                              + VPN > IPsec on the Advanced Settings tab."); ?> +
                             
                            + /> +
                            + +
                             
                            + /> +
                            + +
                            + /> +
                            + +
                            + /> +
                            + +
                            + onclick="tmpvar_checked(this)" /> +
                            + +
                            + " class="formfld unknown" /> MB +
                            + +
                            + " class="formfld unknown" /> MB +
                            + +
                            + + +
                            + +
                            +
                            +
                            + + +
                            + +
                            +
                            +
                             
                            + +
                            + +
                             
                            + /> +
                            + +
                              + " /> +
                            +
                            +
                            +
                            + + + + diff --git a/usr/local/www/system_advanced_network.php b/usr/local/www/system_advanced_network.php new file mode 100644 index 000000000..24114904c --- /dev/null +++ b/usr/local/www/system_advanced_network.php @@ -0,0 +1,349 @@ +. + 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. +*/ +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-system-advanced-network +##|*NAME=System: Advanced: Network page +##|*DESCR=Allow access to the 'System: Advanced: Networking' page. +##|*MATCH=system_advanced_network.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + + +$pconfig['ipv6nat_enable'] = isset($config['diag']['ipv6nat']['enable']); +$pconfig['ipv6nat_ipaddr'] = $config['diag']['ipv6nat']['ipaddr']; +$pconfig['ipv6allow'] = isset($config['system']['ipv6allow']); +$pconfig['prefer_ipv4'] = isset($config['system']['prefer_ipv4']); +$pconfig['polling_enable'] = isset($config['system']['polling']); +$pconfig['sharednet'] = $config['system']['sharednet']; +$pconfig['disablechecksumoffloading'] = isset($config['system']['disablechecksumoffloading']); +$pconfig['disablesegmentationoffloading'] = isset($config['system']['disablesegmentationoffloading']); +$pconfig['disablelargereceiveoffloading'] = isset($config['system']['disablelargereceiveoffloading']); +$pconfig['flowtable'] = isset($config['system']['flowtable']); + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + if ($_POST['ipv6nat_enable'] && !is_ipaddr($_POST['ipv6nat_ipaddr'])) + $input_errors[] = gettext("You must specify an IP address to NAT IPv6 packets."); + + ob_flush(); + flush(); + if (!$input_errors) { + + if($_POST['ipv6nat_enable'] == "yes") { + $config['diag']['ipv6nat']['enable'] = true; + $config['diag']['ipv6nat']['ipaddr'] = $_POST['ipv6nat_ipaddr']; + } else { + if($config['diag']) { + if($config['diag']['ipv6nat']) { + unset($config['diag']['ipv6nat']['enable']); + unset($config['diag']['ipv6nat']['ipaddr']); + } + } + } + + if($_POST['ipv6allow'] == "yes") { + $config['system']['ipv6allow'] = true; + } else { + unset($config['system']['ipv6allow']); + } + + if($_POST['prefer_ipv4'] == "yes") { + $config['system']['prefer_ipv4'] = true; + } else { + unset($config['system']['prefer_ipv4']); + } + + if($_POST['sharednet'] == "yes") { + $config['system']['sharednet'] = true; + system_disable_arp_wrong_if(); + } else { + unset($config['system']['sharednet']); + system_enable_arp_wrong_if(); + } + + if($_POST['polling_enable'] == "yes") { + $config['system']['polling'] = true; + setup_polling(); + } else { + unset($config['system']['polling']); + setup_polling(); + } + + if($_POST['flowtable'] == "yes") { + $config['system']['flowtable'] = $_POST['flowtable']; + } else { + unset($config['system']['flowtable']); + } + + if($_POST['disablechecksumoffloading'] == "yes") { + $config['system']['disablechecksumoffloading'] = true; + } else { + unset($config['system']['disablechecksumoffloading']); + } + + if($_POST['disablesegmentationoffloading'] == "yes") { + $config['system']['disablesegmentationoffloading'] = true; + } else { + unset($config['system']['disablesegmentationoffloading']); + } + + if($_POST['disablelargereceiveoffloading'] == "yes") { + $config['system']['disablelargereceiveoffloading'] = true; + } else { + unset($config['system']['disablelargereceiveoffloading']); + } + + setup_microcode(); + + // Write out configuration (config.xml) + write_config(); + + // Configure flowtable support from filter.inc + flowtable_configure(); + + // Set preferred protocol + prefer_ipv4_or_ipv6(); + + $retval = filter_configure(); + if(stristr($retval, "error") <> true) + $savemsg = get_std_save_message(gettext($retval)); + else + $savemsg = gettext($retval); + } +} + +$pgtitle = array(gettext("System"),gettext("Advanced: Networking")); +include("head.inc"); + +?> + + + + + + + + +
                            + + + + + + + +
                            + +
                            +
                            + + +   + + +
                            +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +*/ +?> + + + + + + + +
                            + onclick="enable_change(false)" /> +
                            +
                            +
                            +
                            +
                            + onclick="enable_change(false)" /> +
                            +
                            +
                            +  :  + +
                            + /> +
                            +
                            +
                             
                            + /> +
                            + +
                            + /> +
                            + +
                            +   + +
                            + /> +
                            + +
                            +   + +
                            + /> +
                            + +
                            +   + +
                            + /> +
                            + +
                             
                            Flowtable support
                            Enable Flowtable + /> + Enable flowtable support
                            + Enables infrastructure for caching flows as a means of accelerating L3 and L2 lookups + as well as providing stateful load balancing when used with RADIX_MPATH.
                            +
                             
                             " />
                            +
                            +
                            +
                            + + + + + diff --git a/usr/local/www/system_advanced_notifications.php b/usr/local/www/system_advanced_notifications.php new file mode 100644 index 000000000..2ead28d17 --- /dev/null +++ b/usr/local/www/system_advanced_notifications.php @@ -0,0 +1,370 @@ + + + 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. +*/ +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-system-advanced-notifications +##|*NAME=System: Advanced: Notifications page +##|*DESCR=Allow access to the 'System: Advanced: Notifications' page. +##|*MATCH=system_advanced_notifications.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("notices.inc"); + +// Growl +$pconfig['disable_growl'] = isset($config['notifications']['growl']['disable']); +if($config['notifications']['growl']['password']) + $pconfig['password'] = $config['notifications']['growl']['password']; +if($config['notifications']['growl']['ipaddress']) + $pconfig['ipaddress'] = $config['notifications']['growl']['ipaddress']; + +if($config['notifications']['growl']['notification_name']) + $pconfig['notification_name'] = $config['notifications']['growl']['notification_name']; +else + $pconfig['notification_name'] = "{$g['product_name']} growl alert"; + +if($config['notifications']['growl']['name']) + $pconfig['name'] = $config['notifications']['growl']['name']; +else + $pconfig['name'] = 'PHP-Growl'; + + +// SMTP +$pconfig['disable_smtp'] = isset($config['notifications']['smtp']['disable']); +if ($config['notifications']['smtp']['ipaddress']) + $pconfig['smtpipaddress'] = $config['notifications']['smtp']['ipaddress']; +if ($config['notifications']['smtp']['port']) + $pconfig['smtpport'] = $config['notifications']['smtp']['port']; +if (isset($config['notifications']['smtp']['ssl'])) + $pconfig['smtpssl'] = true; +if (isset($config['notifications']['smtp']['tls'])) + $pconfig['smtptls'] = true; +if ($config['notifications']['smtp']['notifyemailaddress']) + $pconfig['smtpnotifyemailaddress'] = $config['notifications']['smtp']['notifyemailaddress']; +if ($config['notifications']['smtp']['username']) + $pconfig['smtpusername'] = $config['notifications']['smtp']['username']; +if ($config['notifications']['smtp']['password']) + $pconfig['smtppassword'] = $config['notifications']['smtp']['password']; +if ($config['notifications']['smtp']['fromaddress']) + $pconfig['smtpfromaddress'] = $config['notifications']['smtp']['fromaddress']; + +// System Sounds +$pconfig['disablebeep'] = isset($config['system']['disablebeep']); + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* if this is an AJAX caller then handle via JSON */ + if (isAjax() && is_array($input_errors)) { + input_errors2Ajax($input_errors); + exit; + } + + if ($_POST['apply']) { + $retval = 0; + system_setup_sysctl(); + $savemsg = get_std_save_message($retval); + } + + if ($_POST['Submit'] == gettext("Save")) { + $tunableent = array(); + + // Growl + $config['notifications']['growl']['ipaddress'] = $_POST['ipaddress']; + $config['notifications']['growl']['password'] = $_POST['password']; + $config['notifications']['growl']['name'] = $_POST['name']; + $config['notifications']['growl']['notification_name'] = $_POST['notification_name']; + + if($_POST['disable_growl'] == "yes") + $config['notifications']['growl']['disable'] = true; + else + unset($config['notifications']['growl']['disable']); + + // SMTP + $config['notifications']['smtp']['ipaddress'] = $_POST['smtpipaddress']; + $config['notifications']['smtp']['port'] = $_POST['smtpport']; + if (isset($_POST['smtpssl'])) + $config['notifications']['smtp']['ssl'] = true; + else + unset($config['notifications']['smtp']['ssl']); + if (isset($_POST['smtptls'])) + $config['notifications']['smtp']['tls'] = true; + else + unset($config['notifications']['smtp']['tls']); + $config['notifications']['smtp']['notifyemailaddress'] = $_POST['smtpnotifyemailaddress']; + $config['notifications']['smtp']['username'] = $_POST['smtpusername']; + $config['notifications']['smtp']['password'] = $_POST['smtppassword']; + $config['notifications']['smtp']['fromaddress'] = $_POST['smtpfromaddress']; + + if($_POST['disable_smtp'] == "yes") + $config['notifications']['smtp']['disable'] = true; + else + unset($config['notifications']['smtp']['disable']); + + // System Sounds + if($_POST['disablebeep'] == "yes") + $config['system']['disablebeep'] = true; + else + unset($config['system']['disablebeep']); + + write_config(); + pfSenseHeader("system_advanced_notifications.php"); + return; + + } + if ($_POST['test_growl'] == gettext("Test Growl")) { + // Send test message via growl + if($config['notifications']['growl']['ipaddress'] && + $config['notifications']['growl']['password'] = $_POST['password']) { + unlink_if_exists($g['vardb_path'] . "/growlnotices_lastmsg.txt"); + register_via_growl(); + notify_via_growl(sprintf(gettext("This is a test message from %s. It is safe to ignore this message."), $g['product_name']), true); + } + } + if ($_POST['test_smtp'] == gettext("Test SMTP")) { + // Send test message via smtp + if(file_exists("/var/db/notices_lastmsg.txt")) + unlink("/var/db/notices_lastmsg.txt"); + $savemsg = notify_via_smtp(sprintf(gettext("This is a test message from %s. It is safe to ignore this message."), $g['product_name']), true); + } +} + +$pgtitle = array(gettext("System"),gettext("Advanced: Notifications")); +include("head.inc"); + +?> + + + +
                            + +
                            + + + + + + + +
                            + +
                            +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + checked="checked" />
                            + +
                            + ' />
                            + +
                            + ' />
                            + +
                            + ' />
                            + +
                            + ' />
                            + +
                            +   + + +
                            +
                             
                            + checked="checked" />
                            + +
                            + ' />
                            + +
                            + ' />
                            + +
                            + />Enable SMTP over SSL/TLS
                            + />Enable STARTTLS
                            +
                            + ' />
                            + +
                            + ' />
                            + +
                            + ' />
                            + +
                            + ' />
                            + +
                            +   + + +
                            +
                             
                            + /> + +
                            + +
                             
                            +   + + +
                            +
                            +
                            +
                            + + + + diff --git a/usr/local/www/system_advanced_sysctl.php b/usr/local/www/system_advanced_sysctl.php new file mode 100644 index 000000000..7dcf3dfcf --- /dev/null +++ b/usr/local/www/system_advanced_sysctl.php @@ -0,0 +1,276 @@ +. + 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. +*/ +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-system-advanced-sysctl +##|*NAME=System: Advanced: Tunables page +##|*DESCR=Allow access to the 'System: Advanced: Tunables' page. +##|*MATCH=system_advanced_sysctl.php* +##|-PRIV + +require("guiconfig.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_advanced_sysctl.php'); + +if (!is_array($config['sysctl']['item'])) + $config['sysctl']['item'] = array(); + +$a_tunable = &$config['sysctl']['item']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +$act = $_GET['act']; +if (isset($_POST['act'])) + $act = $_POST['act']; + +if ($act == "edit") { + if ($a_tunable[$id]) { + $pconfig['tunable'] = $a_tunable[$id]['tunable']; + $pconfig['value'] = $a_tunable[$id]['value']; + $pconfig['descr'] = $a_tunable[$id]['descr']; + } +} + +if ($act == "del") { + if ($a_tunable[$id]) { + /* if this is an AJAX caller then handle via JSON */ + if(isAjax() && is_array($input_errors)) { + input_errors2Ajax($input_errors); + exit; + } + if (!$input_errors) { + unset($a_tunable[$id]); + write_config(); + mark_subsystem_dirty('sysctl'); + pfSenseHeader("system_advanced_sysctl.php"); + exit; + } + } +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* if this is an AJAX caller then handle via JSON */ + if (isAjax() && is_array($input_errors)) { + input_errors2Ajax($input_errors); + exit; + } + + if ($_POST['apply']) { + $retval = 0; + system_setup_sysctl(); + $savemsg = get_std_save_message($retval); + clear_subsystem_dirty('sysctl'); + } + + if ($_POST['Submit'] == gettext("Save")) { + $tunableent = array(); + + $tunableent['tunable'] = $_POST['tunable']; + $tunableent['value'] = $_POST['value']; + $tunableent['descr'] = $_POST['descr']; + + if (isset($id) && $a_tunable[$id]) + $a_tunable[$id] = $tunableent; + else + $a_tunable[] = $tunableent; + + mark_subsystem_dirty('sysctl'); + + write_config(); + + pfSenseHeader("system_advanced_sysctl.php"); + exit; + } +} + +$pgtitle = array(gettext("System"),gettext("Advanced: System Tunables")); +include("head.inc"); + +?> + + + +
                            + +
                            + + + + + + + + + + + + + +
                            + +
                            +
                            + + +   + + +
                            +
                            +
                            + + + + + + + + + + + + + + + + + + +
                            + + + + + + + + + + + + +
                            + + + + + ')"> + + +
                            +
                            + + + + + +
                            + + + +
                            +
                            +
                            +
                            +
                            +
                            + + + + + + + + + + + + + + + + + + + + +
                            + +
                            + +
                            + +
                              + " /> + " onclick="window.location.href=''" /> + + + +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/system_authservers.php b/usr/local/www/system_authservers.php new file mode 100644 index 000000000..676e92820 --- /dev/null +++ b/usr/local/www/system_authservers.php @@ -0,0 +1,881 @@ + $as) { + if ($config['system']['authserver'][$k]['name'] == $serverdeleted) + unset($config['system']['authserver'][$k]); + } + + /* Remove server from temp list used later on this page. */ + unset($a_server[$_GET['id']]); + + $savemsg = gettext("Authentication Server")." {$serverdeleted} ". + gettext("deleted")."
                            "; + write_config($savemsg); +} + +if ($act == "edit") { + if (isset($id) && $a_server[$id]) { + + $pconfig['type'] = $a_server[$id]['type']; + $pconfig['name'] = $a_server[$id]['name']; + + if ($pconfig['type'] == "ldap") { + $pconfig['ldap_caref'] = $a_server[$id]['ldap_caref']; + $pconfig['ldap_host'] = $a_server[$id]['host']; + $pconfig['ldap_port'] = $a_server[$id]['ldap_port']; + $pconfig['ldap_urltype'] = $a_server[$id]['ldap_urltype']; + $pconfig['ldap_protver'] = $a_server[$id]['ldap_protver']; + $pconfig['ldap_scope'] = $a_server[$id]['ldap_scope']; + $pconfig['ldap_basedn'] = $a_server[$id]['ldap_basedn']; + $pconfig['ldap_authcn'] = $a_server[$id]['ldap_authcn']; + $pconfig['ldap_extended_enabled'] = $a_server[$id]['ldap_extended_enabled']; + $pconfig['ldap_extended_query'] = $a_server[$id]['ldap_extended_query']; + $pconfig['ldap_binddn'] = $a_server[$id]['ldap_binddn']; + $pconfig['ldap_bindpw'] = $a_server[$id]['ldap_bindpw']; + $pconfig['ldap_attr_user'] = $a_server[$id]['ldap_attr_user']; + $pconfig['ldap_attr_group'] = $a_server[$id]['ldap_attr_group']; + $pconfig['ldap_attr_member'] = $a_server[$id]['ldap_attr_member']; + $pconfig['ldap_utf8'] = isset($a_server[$id]['ldap_utf8']); + $pconfig['ldap_nostrip_at'] = isset($a_server[$id]['ldap_nostrip_at']); + + if (!$pconfig['ldap_binddn'] || !$pconfig['ldap_bindpw']) + $pconfig['ldap_anon'] = true; + } + + if ($pconfig['type'] == "radius") { + $pconfig['radius_host'] = $a_server[$id]['host']; + $pconfig['radius_auth_port'] = $a_server[$id]['radius_auth_port']; + $pconfig['radius_acct_port'] = $a_server[$id]['radius_acct_port']; + $pconfig['radius_secret'] = $a_server[$id]['radius_secret']; + $pconfig['radius_timeout'] = $a_server[$id]['radius_timeout']; + + if ($pconfig['radius_auth_port'] && + $pconfig['radius_acct_port'] ) { + $pconfig['radius_srvcs'] = "both"; + } + + if ( $pconfig['radius_auth_port'] && + !$pconfig['radius_acct_port'] ) { + $pconfig['radius_srvcs'] = "auth"; + $pconfig['radius_acct_port'] = 1813; + } + + if (!$pconfig['radius_auth_port'] && + $pconfig['radius_acct_port'] ) { + $pconfig['radius_srvcs'] = "acct"; + $pconfig['radius_auth_port'] = 1812; + } + + } + } +} + +if ($act == "new") { + $pconfig['ldap_protver'] = 3; + $pconfig['ldap_anon'] = true; + $pconfig['radius_srvcs'] = "both"; + $pconfig['radius_auth_port'] = "1812"; + $pconfig['radius_acct_port'] = "1813"; +} + +if ($_POST) { + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + + if ($pconfig['type'] == "ldap") { + $reqdfields = explode(" ", "name type ldap_host ldap_port ". + "ldap_urltype ldap_protver ldap_scope ". + "ldap_attr_user ldap_attr_group ldap_attr_member ldapauthcontainers"); + $reqdfieldsn = array( + gettext("Descriptive name"), + gettext("Type"), + gettext("Hostname or IP"), + gettext("Port value"), + gettext("Transport"), + gettext("Protocol version"), + gettext("Search level"), + gettext("User naming Attribute"), + gettext("Group naming Attribute"), + gettext("Group member attribute"), + gettext("Authentication container")); + + if (!$pconfig['ldap_anon']) { + $reqdfields[] = "ldap_binddn"; + $reqdfields[] = "ldap_bindpw"; + $reqdfieldsn[] = gettext("Bind user DN"); + $reqdfieldsn[] = gettext("Bind Password"); + } + } + + if ($pconfig['type'] == "radius") { + $reqdfields = explode(" ", "name type radius_host radius_srvcs"); + $reqdfieldsn = array( + gettext("Descriptive name"), + gettext("Type"), + gettext("Hostname or IP"), + gettext("Services")); + + if ($pconfig['radisu_srvcs'] == "both" || + $pconfig['radisu_srvcs'] == "auth") { + $reqdfields[] = "radius_auth_port"; + $reqdfieldsn[] = gettext("Authentication port value"); + } + + if ($pconfig['radisu_srvcs'] == "both" || + $pconfig['radisu_srvcs'] == "acct") { + $reqdfields[] = "radius_acct_port"; + $reqdfieldsn[] = gettext("Accounting port value"); + } + + if (!isset($id)) { + $reqdfields[] = "radius_secret"; + $reqdfieldsn[] = gettext("Shared Secret"); + } + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['host'])) + $input_errors[] = gettext("The host name contains invalid characters."); + + if (auth_get_authserver($pconfig['name']) && !isset($id)) + $input_errors[] = gettext("An authentication server with the same name already exists."); + + if (($pconfig['type'] == "radius") && isset($_POST['radius_timeout']) && !empty($_POST['radius_timeout']) && (!is_numeric($_POST['radius_timeout']) || (is_numeric($_POST['radius_timeout']) && ($_POST['radius_timeout'] <= 0)))) + $input_errors[] = gettext("RADIUS Timeout value must be numeric and positive."); + + /* if this is an AJAX caller then handle via JSON */ + if (isAjax() && is_array($input_errors)) { + input_errors2Ajax($input_errors); + exit; + } + + if (!$input_errors) { + $server = array(); + $server['refid'] = uniqid(); + if (isset($id) && $a_server[$id]) + $server = $a_server[$id]; + + $server['type'] = $pconfig['type']; + $server['name'] = $pconfig['name']; + + if ($server['type'] == "ldap") { + + if (!empty($pconfig['ldap_caref'])) + $server['ldap_caref'] = $pconfig['ldap_caref']; + $server['host'] = $pconfig['ldap_host']; + $server['ldap_port'] = $pconfig['ldap_port']; + $server['ldap_urltype'] = $pconfig['ldap_urltype']; + $server['ldap_protver'] = $pconfig['ldap_protver']; + $server['ldap_scope'] = $pconfig['ldap_scope']; + $server['ldap_basedn'] = $pconfig['ldap_basedn']; + $server['ldap_authcn'] = $pconfig['ldapauthcontainers']; + $server['ldap_extended_enabled'] = $pconfig['ldap_extended_enabled']; + $server['ldap_extended_query'] = $pconfig['ldap_extended_query']; + $server['ldap_attr_user'] = $pconfig['ldap_attr_user']; + $server['ldap_attr_group'] = $pconfig['ldap_attr_group']; + $server['ldap_attr_member'] = $pconfig['ldap_attr_member']; + if ($pconfig['ldap_utf8'] == "yes") + $server['ldap_utf8'] = true; + else + unset($server['ldap_utf8']); + if ($pconfig['ldap_nostrip_at'] == "yes") + $server['ldap_nostrip_at'] = true; + else + unset($server['ldap_nostrip_at']); + + + if (!$pconfig['ldap_anon']) { + $server['ldap_binddn'] = $pconfig['ldap_binddn']; + $server['ldap_bindpw'] = $pconfig['ldap_bindpw']; + } else { + unset($server['ldap_binddn']); + unset($server['ldap_bindpw']); + } + } + + if ($server['type'] == "radius") { + + $server['host'] = $pconfig['radius_host']; + + if ($pconfig['radius_secret']) + $server['radius_secret'] = $pconfig['radius_secret']; + + if ($pconfig['radius_timeout']) + $server['radius_timeout'] = $pconfig['radius_timeout']; + else + $server['radius_timeout'] = 5; + + if ($pconfig['radius_srvcs'] == "both") { + $server['radius_auth_port'] = $pconfig['radius_auth_port']; + $server['radius_acct_port'] = $pconfig['radius_acct_port']; + } + + if ($pconfig['radius_srvcs'] == "auth") { + $server['radius_auth_port'] = $pconfig['radius_auth_port']; + unset($server['radius_acct_port']); + } + + if ($pconfig['radius_srvcs'] == "acct") { + $server['radius_acct_port'] = $pconfig['radius_acct_port']; + unset($server['radius_auth_port']); + } + } + + if (isset($id) && $config['system']['authserver'][$id]) + $config['system']['authserver'][$id] = $server; + else + $config['system']['authserver'][] = $server; + + write_config(); + + pfSenseHeader("system_authservers.php"); + } +} + +include("head.inc"); +?> + +"> + + + + + + + + + + +
                            + +
                            +
                            + + + +
                            + + + + + + + + + +
                            + + + + + + +
                            + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + " /> + + + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + ondblclick="document.location='system_authservers.php?act=edit&id='" > + + + + + + + +
                            + + " alt="" width="17" height="17" border="0" /> + +
                            +

                            + +

                            +
                                + + + " alt="" width="17" height="17" border="0" /> + +   + ')"> + " alt="" width="17" height="17" border="0" /> + + +
                            + + + +
                            +
                            + + + + diff --git a/usr/local/www/system_camanager.php b/usr/local/www/system_camanager.php new file mode 100644 index 000000000..57057e127 --- /dev/null +++ b/usr/local/www/system_camanager.php @@ -0,0 +1,719 @@ + gettext("Import an existing Certificate Authority"), + "internal" => gettext("Create an internal Certificate Authority"), + "intermediate" => gettext("Create an intermediate Certificate Authority")); + +$ca_keylens = array( "512", "1024", "2048", "4096"); +$openssl_digest_algs = array("sha1", "sha224", "sha256", "sha384", "sha512"); + +$pgtitle = array(gettext("System"), gettext("Certificate Authority Manager")); + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (!is_array($config['ca'])) + $config['ca'] = array(); + +$a_ca =& $config['ca']; + +if (!is_array($config['cert'])) + $config['cert'] = array(); + +$a_cert =& $config['cert']; + +if (!is_array($config['crl'])) + $config['crl'] = array(); + +$a_crl =& $config['crl']; + +$act = $_GET['act']; +if ($_POST['act']) + $act = $_POST['act']; + +if ($act == "del") { + + if (!isset($a_ca[$id])) { + pfSenseHeader("system_camanager.php"); + exit; + } + + $index = count($a_cert) - 1; + for (;$index >=0; $index--) + if ($a_cert[$index]['caref'] == $a_ca[$id]['refid']) + unset($a_cert[$index]); + + $index = count($a_crl) - 1; + for (;$index >=0; $index--) + if ($a_crl[$index]['caref'] == $a_ca[$id]['refid']) + unset($a_crl[$index]); + + $name = $a_ca[$id]['descr']; + unset($a_ca[$id]); + write_config(); + $savemsg = sprintf(gettext("Certificate Authority %s and its CRLs (if any) successfully deleted"), $name) . "
                            "; + pfSenseHeader("system_camanager.php"); + exit; +} + +if ($act == "edit") { + if (!$a_ca[$id]) { + pfSenseHeader("system_camanager.php"); + exit; + } + $pconfig['descr'] = $a_ca[$id]['descr']; + $pconfig['refid'] = $a_ca[$id]['refid']; + $pconfig['cert'] = base64_decode($a_ca[$id]['crt']); + $pconfig['serial'] = $a_ca[$id]['serial']; + if (!empty($a_ca[$id]['prv'])) + $pconfig['key'] = base64_decode($a_ca[$id]['prv']); +} + +if ($act == "new") { + $pconfig['method'] = $_GET['method']; + $pconfig['keylen'] = "2048"; + $pconfig['digest_alg'] = "sha256"; + $pconfig['lifetime'] = "3650"; + $pconfig['dn_commonname'] = "internal-ca"; +} + +if ($act == "exp") { + + if (!$a_ca[$id]) { + pfSenseHeader("system_camanager.php"); + exit; + } + + $exp_name = urlencode("{$a_ca[$id]['descr']}.crt"); + $exp_data = base64_decode($a_ca[$id]['crt']); + $exp_size = strlen($exp_data); + + header("Content-Type: application/octet-stream"); + header("Content-Disposition: attachment; filename={$exp_name}"); + header("Content-Length: $exp_size"); + echo $exp_data; + exit; +} + +if ($act == "expkey") { + + if (!$a_ca[$id]) { + pfSenseHeader("system_camanager.php"); + exit; + } + + $exp_name = urlencode("{$a_ca[$id]['descr']}.key"); + $exp_data = base64_decode($a_ca[$id]['prv']); + $exp_size = strlen($exp_data); + + header("Content-Type: application/octet-stream"); + header("Content-Disposition: attachment; filename={$exp_name}"); + header("Content-Length: $exp_size"); + echo $exp_data; + exit; +} + +if ($_POST) { + + unset($input_errors); + $input_errors = array(); + $pconfig = $_POST; + + /* input validation */ + if ($pconfig['method'] == "existing") { + $reqdfields = explode(" ", "descr cert"); + $reqdfieldsn = array( + gettext("Descriptive name"), + gettext("Certificate data")); + if ($_POST['cert'] && (!strstr($_POST['cert'], "BEGIN CERTIFICATE") || !strstr($_POST['cert'], "END CERTIFICATE"))) + $input_errors[] = gettext("This certificate does not appear to be valid."); + if ($_POST['key'] && strstr($_POST['key'], "ENCRYPTED")) + $input_errors[] = gettext("Encrypted private keys are not yet supported."); + } + if ($pconfig['method'] == "internal") { + $reqdfields = explode(" ", + "descr keylen lifetime dn_country dn_state dn_city ". + "dn_organization dn_email dn_commonname"); + $reqdfieldsn = array( + gettext("Descriptive name"), + gettext("Key length"), + gettext("Lifetime"), + gettext("Distinguished name Country Code"), + gettext("Distinguished name State or Province"), + gettext("Distinguished name City"), + gettext("Distinguished name Organization"), + gettext("Distinguished name Email Address"), + gettext("Distinguished name Common Name")); + } + if ($pconfig['method'] == "intermediate") { + $reqdfields = explode(" ", + "descr caref keylen lifetime dn_country dn_state dn_city ". + "dn_organization dn_email dn_commonname"); + $reqdfieldsn = array( + gettext("Descriptive name"), + gettext("Signing Certificate Authority"), + gettext("Key length"), + gettext("Lifetime"), + gettext("Distinguished name Country Code"), + gettext("Distinguished name State or Province"), + gettext("Distinguished name City"), + gettext("Distinguished name Organization"), + gettext("Distinguished name Email Address"), + gettext("Distinguished name Common Name")); + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + if ($pconfig['method'] != "existing") { + /* Make sure we do not have invalid characters in the fields for the certificate */ + for ($i = 0; $i < count($reqdfields); $i++) { + if ($reqdfields[$i] == 'dn_email'){ + if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST["dn_email"])) + array_push($input_errors, "The field 'Distinguished name Email Address' contains invalid characters."); + }else if ($reqdfields[$i] == 'dn_commonname'){ + if (preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST["dn_commonname"])) + array_push($input_errors, "The field 'Distinguished name Common Name' contains invalid characters."); + }else if (($reqdfields[$i] != "descr") && preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\.\"\']/", $_POST["$reqdfields[$i]"])) + array_push($input_errors, "The field '" . $reqdfieldsn[$i] . "' contains invalid characters."); + } + if (!in_array($_POST["keylen"], $ca_keylens)) + array_push($input_errors, gettext("Please select a valid Key Length.")); + if (!in_array($_POST["digest_alg"], $openssl_digest_algs)) + array_push($input_errors, gettext("Please select a valid Digest Algorithm.")); + } + + /* if this is an AJAX caller then handle via JSON */ + if (isAjax() && is_array($input_errors)) { + input_errors2Ajax($input_errors); + exit; + } + + /* save modifications */ + if (!$input_errors) { + + $ca = array(); + if (!isset($pconfig['refid']) || empty($pconfig['refid'])) + $ca['refid'] = uniqid(); + else + $ca['refid'] = $pconfig['refid']; + + if (isset($id) && $a_ca[$id]) + $ca = $a_ca[$id]; + + $ca['descr'] = $pconfig['descr']; + + if ($_POST['edit'] == "edit") { + $ca['descr'] = $pconfig['descr']; + $ca['refid'] = $pconfig['refid']; + $ca['serial'] = $pconfig['serial']; + $ca['crt'] = base64_encode($pconfig['cert']); + if (!empty($pconfig['key'])) + $ca['prv'] = base64_encode($pconfig['key']); + } else { + $old_err_level = error_reporting(0); /* otherwise openssl_ functions throw warings directly to a page screwing menu tab */ + if ($pconfig['method'] == "existing") + ca_import($ca, $pconfig['cert'], $pconfig['key'], $pconfig['serial']); + + else if ($pconfig['method'] == "internal") { + $dn = array( + 'countryName' => $pconfig['dn_country'], + 'stateOrProvinceName' => $pconfig['dn_state'], + 'localityName' => $pconfig['dn_city'], + 'organizationName' => $pconfig['dn_organization'], + 'emailAddress' => $pconfig['dn_email'], + 'commonName' => $pconfig['dn_commonname']); + if (!ca_create($ca, $pconfig['keylen'], $pconfig['lifetime'], $dn, $pconfig['digest_alg'])){ + while($ssl_err = openssl_error_string()){ + $input_errors = array(); + array_push($input_errors, "openssl library returns: " . $ssl_err); + } + } + } + else if ($pconfig['method'] == "intermediate") { + $dn = array( + 'countryName' => $pconfig['dn_country'], + 'stateOrProvinceName' => $pconfig['dn_state'], + 'localityName' => $pconfig['dn_city'], + 'organizationName' => $pconfig['dn_organization'], + 'emailAddress' => $pconfig['dn_email'], + 'commonName' => $pconfig['dn_commonname']); + if (!ca_inter_create($ca, $pconfig['keylen'], $pconfig['lifetime'], $dn, $pconfig['caref'], $pconfig['digest_alg'])){ + while($ssl_err = openssl_error_string()){ + $input_errors = array(); + array_push($input_errors, "openssl library returns: " . $ssl_err); + } + } + } + error_reporting($old_err_level); + } + + if (isset($id) && $a_ca[$id]) + $a_ca[$id] = $ca; + else + $a_ca[] = $ca; + + if (!$input_errors) + write_config(); + +// pfSenseHeader("system_camanager.php"); + } +} + +include("head.inc"); +?> + +"> + + + + + + + + + + +
                            + +
                            +
                            + + + +
                            + + + + + + + + + + + + + + + + +
                            + +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + +
                            + +
                            + +

                            + +
                            + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + +
                            + + +
                            + +
                            +
                            + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + +
                            :   + +
                            :   + +   + +   + +
                            :   + +   + +   + +
                            :   + +   + +   + +
                            :   + +   + +   + +
                            :   + +   + +   + +
                            +
                            + + + + + + +
                              + " /> + + + +
                            +
                            + + + + + + + + + + + + + " . gettext("self-signed") . ""; + else + $issuer_name = "" . gettext("external") . ""; + $subj = htmlspecialchars($subj); + $issuer = htmlspecialchars($issuer); + $certcount = 0; + + $issuer_ca = lookup_ca($ca['caref']); + if ($issuer_ca) + $issuer_name = $issuer_ca['descr']; + + // TODO : Need gray certificate icon + + if($ca['prv']) { + $caimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png"; + $internal = "YES"; + + } else { + $caimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png"; + $internal = "NO"; + } + foreach ($a_cert as $cert) + if ($cert['caref'] == $ca['refid']) + $certcount++; + foreach ($a_ca as $cert) + if ($cert['caref'] == $ca['refid']) + $certcount++; + ?> + + + + + + + + + + + + + + + + +
                            + + + + + +
                            + CA + + +
                            +
                               
                            + + + + + + + + + + + +
                             :
                             :
                            +
                            + + " alt="" width="17" height="17" border="0" /> + + + " alt="" width="17" height="17" border="0" /> + + + + " alt="" width="17" height="17" border="0" /> + + + ')"> + " alt="" width="17" height="17" border="0" /> + +
                            + + " alt="" width="17" height="17" border="0" /> + +
                            +

                            + +

                            +
                            + + + +
                            +
                            + + + + + diff --git a/usr/local/www/system_certmanager.php b/usr/local/www/system_certmanager.php new file mode 100644 index 000000000..0772ae69c --- /dev/null +++ b/usr/local/www/system_certmanager.php @@ -0,0 +1,1238 @@ + gettext("Import an existing Certificate"), + "internal" => gettext("Create an internal Certificate"), + "external" => gettext("Create a Certificate Signing Request"), +); + +$cert_keylens = array( "512", "1024", "2048", "4096"); +$cert_types = array( "ca" => "Certificate Authority", + "server" => "Server Certificate", + "user" => "User Certificate"); + +$altname_types = array("DNS", "IP", "email", "URI"); +$openssl_digest_algs = array("sha1", "sha224", "sha256", "sha384", "sha512"); + +$pgtitle = array(gettext("System"), gettext("Certificate Manager")); + +if (is_numericint($_GET['userid'])) + $userid = $_GET['userid']; +if (isset($_POST['userid']) && is_numericint($_POST['userid'])) + $userid = $_POST['userid']; + +if (isset($userid)) { + $cert_methods["existing"] = gettext("Choose an existing certificate"); + if (!is_array($config['system']['user'])) + $config['system']['user'] = array(); + $a_user =& $config['system']['user']; +} + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (!is_array($config['ca'])) + $config['ca'] = array(); + +$a_ca =& $config['ca']; + +if (!is_array($config['cert'])) + $config['cert'] = array(); + +$a_cert =& $config['cert']; + +$internal_ca_count = 0; +foreach ($a_ca as $ca) + if ($ca['prv']) + $internal_ca_count++; + +$act = $_GET['act']; +if ($_POST['act']) + $act = $_POST['act']; + +if ($act == "del") { + + if (!isset($a_cert[$id])) { + pfSenseHeader("system_certmanager.php"); + exit; + } + + $name = $a_cert[$id]['descr']; + unset($a_cert[$id]); + write_config(); + $savemsg = sprintf(gettext("Certificate %s successfully deleted"), $name) . "
                            "; + pfSenseHeader("system_certmanager.php"); + exit; +} + +if ($act == "new") { + $pconfig['method'] = $_GET['method']; + $pconfig['keylen'] = "2048"; + $pconfig['digest_alg'] = "sha256"; + $pconfig['csr_keylen'] = "2048"; + $pconfig['csr_digest_alg'] = "sha256"; + $pconfig['type'] = "user"; + $pconfig['lifetime'] = "3650"; +} + +if ($act == "exp") { + + if (!$a_cert[$id]) { + pfSenseHeader("system_certmanager.php"); + exit; + } + + $exp_name = urlencode("{$a_cert[$id]['descr']}.crt"); + $exp_data = base64_decode($a_cert[$id]['crt']); + $exp_size = strlen($exp_data); + + header("Content-Type: application/octet-stream"); + header("Content-Disposition: attachment; filename={$exp_name}"); + header("Content-Length: $exp_size"); + echo $exp_data; + exit; +} + +if ($act == "key") { + + if (!$a_cert[$id]) { + pfSenseHeader("system_certmanager.php"); + exit; + } + + $exp_name = urlencode("{$a_cert[$id]['descr']}.key"); + $exp_data = base64_decode($a_cert[$id]['prv']); + $exp_size = strlen($exp_data); + + header("Content-Type: application/octet-stream"); + header("Content-Disposition: attachment; filename={$exp_name}"); + header("Content-Length: $exp_size"); + echo $exp_data; + exit; +} + +if ($act == "p12") { + if (!$a_cert[$id]) { + pfSenseHeader("system_certmanager.php"); + exit; + } + + $exp_name = urlencode("{$a_cert[$id]['descr']}.p12"); + $args = array(); + $args['friendly_name'] = $a_cert[$id]['descr']; + + $ca = lookup_ca($a_cert[$id]['caref']); + if ($ca) + $args['extracerts'] = openssl_x509_read(base64_decode($ca['crt'])); + + $res_crt = openssl_x509_read(base64_decode($a_cert[$id]['crt'])); + $res_key = openssl_pkey_get_private(array(0 => base64_decode($a_cert[$id]['prv']) , 1 => "")); + + $exp_data = ""; + openssl_pkcs12_export($res_crt, $exp_data, $res_key, null, $args); + $exp_size = strlen($exp_data); + + header("Content-Type: application/octet-stream"); + header("Content-Disposition: attachment; filename={$exp_name}"); + header("Content-Length: $exp_size"); + echo $exp_data; + exit; +} + +if ($act == "csr") { + + if (!$a_cert[$id]) { + pfSenseHeader("system_certmanager.php"); + exit; + } + + $pconfig['descr'] = $a_cert[$id]['descr']; + $pconfig['csr'] = base64_decode($a_cert[$id]['csr']); +} + +if ($_POST) { + if ($_POST['save'] == gettext("Save")) { + $input_errors = array(); + $pconfig = $_POST; + + /* input validation */ + if ($pconfig['method'] == "import") { + $reqdfields = explode(" ", + "descr cert key"); + $reqdfieldsn = array( + gettext("Descriptive name"), + gettext("Certificate data"), + gettext("Key data")); + if ($_POST['cert'] && (!strstr($_POST['cert'], "BEGIN CERTIFICATE") || !strstr($_POST['cert'], "END CERTIFICATE"))) + $input_errors[] = gettext("This certificate does not appear to be valid."); + } + + if ($pconfig['method'] == "internal") { + $reqdfields = explode(" ", + "descr caref keylen type lifetime dn_country dn_state dn_city ". + "dn_organization dn_email dn_commonname"); + $reqdfieldsn = array( + gettext("Descriptive name"), + gettext("Certificate authority"), + gettext("Key length"), + gettext("Certificate Type"), + gettext("Lifetime"), + gettext("Distinguished name Country Code"), + gettext("Distinguished name State or Province"), + gettext("Distinguished name City"), + gettext("Distinguished name Organization"), + gettext("Distinguished name Email Address"), + gettext("Distinguished name Common Name")); + } + + if ($pconfig['method'] == "external") { + $reqdfields = explode(" ", + "descr csr_keylen csr_dn_country csr_dn_state csr_dn_city ". + "csr_dn_organization csr_dn_email csr_dn_commonname"); + $reqdfieldsn = array( + gettext("Descriptive name"), + gettext("Key length"), + gettext("Distinguished name Country Code"), + gettext("Distinguished name State or Province"), + gettext("Distinguished name City"), + gettext("Distinguished name Organization"), + gettext("Distinguished name Email Address"), + gettext("Distinguished name Common Name")); + } + + if ($pconfig['method'] == "existing") { + $reqdfields = array("certref"); + $reqdfieldsn = array(gettext("Existing Certificate Choice")); + } + + $altnames = array(); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + if ($pconfig['method'] != "import" && $pconfig['method'] != "existing") { + /* subjectAltNames */ + foreach ($_POST as $key => $value) { + $entry = ''; + if (!substr_compare('altname_type', $key, 0, 12)) { + $entry = substr($key, 12); + $field = 'type'; + } + elseif (!substr_compare('altname_value', $key, 0, 13)) { + $entry = substr($key, 13); + $field = 'value'; + } + if (ctype_digit($entry)) { + $altnames[$entry][$field] = $value; + } + } + $pconfig['altnames']['item'] = $altnames; + + /* Input validation for subjectAltNames */ + foreach ($altnames as $idx => $altname) { + switch ($altname['type']) { + case "DNS": + if (!is_hostname($altname['value'])) + array_push($input_errors, "DNS subjectAltName values must be valid hostnames or FQDNs"); + break; + case "IP": + if (!is_ipaddr($altname['value'])) + array_push($input_errors, "IP subjectAltName values must be valid IP Addresses"); + break; + case "email": + if (empty($altname['value'])) + array_push($input_errors, "You must provide an e-mail address for this type of subjectAltName"); + if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $altname['value'])) + array_push($input_errors, "The e-mail provided in a subjectAltName contains invalid characters."); + break; + case "URI": + /* Close enough? */ + if (!is_URL($altname['value'])) + $input_errors[] = "URI subjectAltName types must be a valid URI"; + break; + default: + $input_errors[] = "Unrecognized subjectAltName type."; + } + } + + /* Make sure we do not have invalid characters in the fields for the certificate */ + for ($i = 0; $i < count($reqdfields); $i++) { + if (preg_match('/email/', $reqdfields[$i])){ /* dn_email or csr_dn_name */ + if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST[$reqdfields[$i]])) + array_push($input_errors, "The field 'Distinguished name Email Address' contains invalid characters."); + }else if (preg_match('/commonname/', $reqdfields[$i])){ /* dn_commonname or csr_dn_commonname */ + if (preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST[$reqdfields[$i]])) + array_push($input_errors, "The field 'Distinguished name Common Name' contains invalid characters."); + }else if (($reqdfields[$i] != "descr") && preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\.\"\']/", $_POST[$reqdfields[$i]])) + array_push($input_errors, "The field '" . $reqdfieldsn[$i] . "' contains invalid characters."); + } + + if (($pconfig['method'] != "external") && isset($_POST["keylen"]) && !in_array($_POST["keylen"], $cert_keylens)) + array_push($input_errors, gettext("Please select a valid Key Length.")); + if (($pconfig['method'] != "external") && !in_array($_POST["digest_alg"], $openssl_digest_algs)) + array_push($input_errors, gettext("Please select a valid Digest Algorithm.")); + + if (($pconfig['method'] == "external") && isset($_POST["csr_keylen"]) && !in_array($_POST["csr_keylen"], $cert_keylens)) + array_push($input_errors, gettext("Please select a valid Key Length.")); + if (($pconfig['method'] == "external") && !in_array($_POST["csr_digest_alg"], $openssl_digest_algs)) + array_push($input_errors, gettext("Please select a valid Digest Algorithm.")); + } + + /* if this is an AJAX caller then handle via JSON */ + if (isAjax() && is_array($input_errors)) { + input_errors2Ajax($input_errors); + exit; + } + + /* save modifications */ + if (!$input_errors) { + + if ($pconfig['method'] == "existing") { + $cert = lookup_cert($pconfig['certref']); + if ($cert && $a_user) + $a_user[$userid]['cert'][] = $cert['refid']; + } else { + $cert = array(); + $cert['refid'] = uniqid(); + if (isset($id) && $a_cert[$id]) + $cert = $a_cert[$id]; + + $cert['descr'] = $pconfig['descr']; + + $old_err_level = error_reporting(0); /* otherwise openssl_ functions throw warings directly to a page screwing menu tab */ + + if ($pconfig['method'] == "import") + cert_import($cert, $pconfig['cert'], $pconfig['key']); + + if ($pconfig['method'] == "internal") { + $dn = array( + 'countryName' => $pconfig['dn_country'], + 'stateOrProvinceName' => $pconfig['dn_state'], + 'localityName' => $pconfig['dn_city'], + 'organizationName' => $pconfig['dn_organization'], + 'emailAddress' => $pconfig['dn_email'], + 'commonName' => $pconfig['dn_commonname']); + if (count($altnames)) { + $altnames_tmp = ""; + foreach ($altnames as $altname) { + $altnames_tmp[] = "{$altname['type']}:{$altname['value']}"; + } + $dn['subjectAltName'] = implode(",", $altnames_tmp); + } + if (!cert_create($cert, $pconfig['caref'], $pconfig['keylen'], + $pconfig['lifetime'], $dn, $pconfig['type'], $pconfig['digest_alg'])){ + while($ssl_err = openssl_error_string()){ + $input_errors = array(); + array_push($input_errors, "openssl library returns: " . $ssl_err); + } + } + } + + if ($pconfig['method'] == "external") { + $dn = array( + 'countryName' => $pconfig['csr_dn_country'], + 'stateOrProvinceName' => $pconfig['csr_dn_state'], + 'localityName' => $pconfig['csr_dn_city'], + 'organizationName' => $pconfig['csr_dn_organization'], + 'emailAddress' => $pconfig['csr_dn_email'], + 'commonName' => $pconfig['csr_dn_commonname']); + if (count($altnames)) { + $altnames_tmp = ""; + foreach ($altnames as $altname) { + $altnames_tmp[] = "{$altname['type']}:{$altname['value']}"; + } + $dn['subjectAltName'] = implode(",", $altnames_tmp); + } + if(!csr_generate($cert, $pconfig['csr_keylen'], $dn, $pconfig['csr_digest_alg'])){ + while($ssl_err = openssl_error_string()){ + $input_errors = array(); + array_push($input_errors, "openssl library returns: " . $ssl_err); + } + } + } + error_reporting($old_err_level); + + if (isset($id) && $a_cert[$id]) + $a_cert[$id] = $cert; + else + $a_cert[] = $cert; + if (isset($a_user) && isset($userid)) + $a_user[$userid]['cert'][] = $cert['refid']; + } + + if (!$input_errors) + write_config(); + + if ($userid) { + post_redirect("system_usermanager.php", array('act' => 'edit', 'userid' => $userid)); + exit; + } + } + } + + if ($_POST['save'] == gettext("Update")) { + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "descr cert"); + $reqdfieldsn = array( + gettext("Descriptive name"), + gettext("Final Certificate data")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + +// old way + /* make sure this csr and certificate subjects match */ +// $subj_csr = csr_get_subject($pconfig['csr'], false); +// $subj_cert = cert_get_subject($pconfig['cert'], false); +// +// if ( !isset($_POST['ignoresubjectmismatch']) && !($_POST['ignoresubjectmismatch'] == "yes") ) { +// if (strcmp($subj_csr,$subj_cert)) { +// $input_errors[] = sprintf(gettext("The certificate subject '%s' does not match the signing request subject."),$subj_cert); +// $subject_mismatch = true; +// } +// } + $mod_csr = csr_get_modulus($pconfig['csr'], false); + $mod_cert = cert_get_modulus($pconfig['cert'], false); + + if (strcmp($mod_csr,$mod_cert)) { + // simply: if the moduli don't match, then the private key and public key won't match + $input_errors[] = sprintf(gettext("The certificate modulus does not match the signing request modulus."),$subj_cert); + $subject_mismatch = true; + } + + /* if this is an AJAX caller then handle via JSON */ + if (isAjax() && is_array($input_errors)) { + input_errors2Ajax($input_errors); + exit; + } + + /* save modifications */ + if (!$input_errors) { + + $cert = $a_cert[$id]; + + $cert['descr'] = $pconfig['descr']; + + csr_complete($cert, $pconfig['cert']); + + $a_cert[$id] = $cert; + + write_config(); + + pfSenseHeader("system_certmanager.php"); + } + } +} + +include("head.inc"); +?> + +"> + + + + + + + + + + + + + + +
                            + +
                            +
                            + + + +
                            + + + + + + + + + + + + +
                            + +
                            + +
                            + + + + + + + + + + + + + + + + + +
                            + +
                            + +
                            + +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + + +
                            + +
                            + + +
                            + +
                            +
                            + +
                            + +
                            + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            :   + +
                            :   + +
                            :   + +
                            :   + +
                            :   + +   + ex: +   + +
                            :   + + +   + ex: +   + +
                            :   + + + + + + + + + + + + + + + + + +
                            + + + + + " /> +
                             
                            + + " /> + + +
                            NOTE: Type must be one of DNS (FQDN or Hostname), IP (IP address), URI, or email. +
                            +
                            + + + + + + + + + + + + + + + + + + + + +
                            + + bits +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + +
                            :   + +
                            :   + +   + ex: +   + +
                            :   + +   + ex: +   + +
                            :   + +   + ex: +   + +
                            :   + +   + ex: +   + +
                            :   + +   + ex: +   + +
                            +
                            + + + + + + + + + + + + +
                            + + + + +
                            + + + + + + +
                              + " /> + + + +
                            +
                            + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + +
                            + +
                            +
                            + +
                            +
                              + + +
                            + " . + "response subject verification. "); + ?>
                            + + " /> + + + + +
                            +
                            + + + + + + + + + + + + " . gettext("self-signed") . ""; + else + $caname = "" . gettext("external"). ""; + $subj = htmlspecialchars($subj); + } + + if ($cert['csr']) { + $subj = htmlspecialchars(csr_get_subject($cert['csr'])); + $caname = "" . gettext("external - signature pending") . ""; + } + + $ca = lookup_ca($cert['caref']); + if ($ca) + $caname = $ca['descr']; + + if($cert['prv']) + $certimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png"; + else + $certimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png"; + ?> + + + + + + + + + + + + + + + + +
                            + + + + + + + + + + + + +
                            + CA + + +
                             
                            + CA: , + Server: +
                            +
                              
                            + + + + + + + + + + + +
                             :
                             :
                            +
                            + + Revoked
                            + + + webConfigurator
                            + + + User Cert
                            + + + OpenVPN Server
                            + + + OpenVPN Client
                            + + + IPsec Tunnel
                            + + + Captive Portal
                            + +
                            + + " alt="" width="17" height="17" border="0" /> + + + " alt="" width="17" height="17" border="0" /> + + + " alt="" width="17" height="17" border="0" /> + + + ')"> + " alt="" width="17" height="17" border="0" /> + + + +   + + " alt="" width="17" height="17" border="0" /> + + +
                            + + " alt="" width="17" height="17" border="0" /> + +
                             
                            + + + +
                            +
                            + + + + + diff --git a/usr/local/www/system_crlmanager.php b/usr/local/www/system_crlmanager.php new file mode 100644 index 000000000..35794f661 --- /dev/null +++ b/usr/local/www/system_crlmanager.php @@ -0,0 +1,659 @@ + gettext("Create an internal Certificate Revocation List"), + "existing" => gettext("Import an existing Certificate Revocation List")); + +if (ctype_alnum($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && ctype_alnum($_POST['id'])) + $id = $_POST['id']; + +if (!is_array($config['ca'])) + $config['ca'] = array(); + +$a_ca =& $config['ca']; + +if (!is_array($config['cert'])) + $config['cert'] = array(); + +$a_cert =& $config['cert']; + +if (!is_array($config['crl'])) + $config['crl'] = array(); + +$a_crl =& $config['crl']; + +foreach ($a_crl as $cid => $acrl) + if (!isset($acrl['refid'])) + unset ($a_crl[$cid]); + +$act = $_GET['act']; +if ($_POST['act']) + $act = $_POST['act']; + +if (!empty($id)) + $thiscrl =& lookup_crl($id); + +// If we were given an invalid crlref in the id, no sense in continuing as it would only cause errors. +if (!$thiscrl && (($act != "") && ($act != "new"))) { + pfSenseHeader("system_crlmanager.php"); + $act=""; + $savemsg = gettext("Invalid CRL reference."); +} + +if ($act == "del") { + $name = $thiscrl['descr']; + if (crl_in_use($id)) { + $savemsg = sprintf(gettext("Certificate Revocation List %s is in use and cannot be deleted"), $name) . "
                            "; + } else { + foreach ($a_crl as $cid => $acrl) + if ($acrl['refid'] == $thiscrl['refid']) + unset($a_crl[$cid]); + write_config("Deleted CRL {$name}."); + $savemsg = sprintf(gettext("Certificate Revocation List %s successfully deleted"), $name) . "
                            "; + } +} + +if ($act == "new") { + $pconfig['method'] = $_GET['method']; + $pconfig['caref'] = $_GET['caref']; + $pconfig['lifetime'] = "9999"; + $pconfig['serial'] = "0"; +} + +if ($act == "exp") { + crl_update($thiscrl); + $exp_name = urlencode("{$thiscrl['descr']}.crl"); + $exp_data = base64_decode($thiscrl['text']); + $exp_size = strlen($exp_data); + + header("Content-Type: application/octet-stream"); + header("Content-Disposition: attachment; filename={$exp_name}"); + header("Content-Length: $exp_size"); + echo $exp_data; + exit; +} + +if ($act == "addcert") { + if ($_POST) { + unset($input_errors); + $pconfig = $_POST; + + if (!$pconfig['crlref'] || !$pconfig['certref']) { + pfSenseHeader("system_crlmanager.php"); + exit; + } + + // certref, crlref + $crl =& lookup_crl($pconfig['crlref']); + $cert = lookup_cert($pconfig['certref']); + + if (!$crl['caref'] || !$cert['caref']) { + $input_errors[] = gettext("Both the Certificate and CRL must be specified."); + } + + if ($crl['caref'] != $cert['caref']) { + $input_errors[] = gettext("CA mismatch between the Certificate and CRL. Unable to Revoke."); + } + if (!is_crl_internal($crl)) { + $input_errors[] = gettext("Cannot revoke certificates for an imported/external CRL."); + } + + if (!$input_errors) { + $reason = (empty($pconfig['crlreason'])) ? OCSP_REVOKED_STATUS_UNSPECIFIED : $pconfig['crlreason']; + cert_revoke($cert, $crl, $reason); + openvpn_refresh_crls(); + write_config("Revoked cert {$cert['descr']} in CRL {$crl['descr']}."); + pfSenseHeader("system_crlmanager.php"); + exit; + } + } +} + +if ($act == "delcert") { + if (!is_array($thiscrl['cert'])) { + pfSenseHeader("system_crlmanager.php"); + exit; + } + $found = false; + foreach ($thiscrl['cert'] as $acert) { + if ($acert['refid'] == $_GET['certref']) { + $found = true; + $thiscert = $acert; + } + } + if (!$found) { + pfSenseHeader("system_crlmanager.php"); + exit; + } + $name = $thiscert['descr']; + if (cert_unrevoke($thiscert, $thiscrl)) { + $savemsg = sprintf(gettext("Deleted Certificate %s from CRL %s"), $name, $thiscrl['descr']) . "
                            "; + openvpn_refresh_crls(); + write_config(sprintf(gettext("Deleted Certificate %s from CRL %s"), $name, $thiscrl['descr'])); + } else { + $savemsg = sprintf(gettext("Failed to delete Certificate %s from CRL %s"), $name, $thiscrl['descr']) . "
                            "; + } + $act="edit"; +} + +if ($_POST) { + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + if (($pconfig['method'] == "existing") || ($act == "editimported")) { + $reqdfields = explode(" ", "descr crltext"); + $reqdfieldsn = array( + gettext("Descriptive name"), + gettext("Certificate Revocation List data")); + } + if ($pconfig['method'] == "internal") { + $reqdfields = explode(" ", + "descr caref"); + $reqdfieldsn = array( + gettext("Descriptive name"), + gettext("Certificate Authority")); + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + /* if this is an AJAX caller then handle via JSON */ + if (isAjax() && is_array($input_errors)) { + input_errors2Ajax($input_errors); + exit; + } + + /* save modifications */ + if (!$input_errors) { + $result = false; + + if ($thiscrl) { + $crl =& $thiscrl; + } else { + $crl = array(); + $crl['refid'] = uniqid(); + } + + $crl['descr'] = $pconfig['descr']; + if ($act != "editimported") { + $crl['caref'] = $pconfig['caref']; + $crl['method'] = $pconfig['method']; + } + + if (($pconfig['method'] == "existing") || ($act == "editimported")) { + $crl['text'] = base64_encode($pconfig['crltext']); + } + + if ($pconfig['method'] == "internal") { + $crl['serial'] = empty($pconfig['serial']) ? 9999 : $pconfig['serial']; + $crl['lifetime'] = empty($pconfig['lifetime']) ? 9999 : $pconfig['lifetime']; + $crl['cert'] = array(); + } + + if (!$thiscrl) + $a_crl[] = $crl; + + write_config("Saved CRL {$crl['descr']}"); + openvpn_refresh_crls(); + pfSenseHeader("system_crlmanager.php"); + } +} + +include("head.inc"); +?> + +"> + + + + + + + + + + +
                            + +
                            +
                            + + + +
                            + + + + + + + + + + + + + + + +
                            + +
                            + +
                            + +
                            + + + + + + + + + + + + + +
                            + +
                            + +
                            + + + + + + + + + + + + + + + + +
                            + +
                            + +
                            + +
                            + +
                            + + + + + + +
                              + " /> + + + +
                            +
                            + + +
                            + + + + + + + + + + + + + + + + + +
                            + +
                            + +
                            +
                              + " /> + + +
                            +
                            + + + +
                            + + + + + + + + + + + + + + + + + + + + $cert): + $name = htmlspecialchars($cert['descr']); + ?> + + + + + + + + + + + + + + + + + + + +
                            +      +  
                            + + + + + + + ')"> + " alt="" width="17" height="17" border="0" /> + +
                            +      +  
                            + : + : + + + + + " /> +  
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +

                            + +

                            +
                            + + + + + +
                            + CA + + +
                            +
                            + + + " alt="" width="17" height="17" border="0" /> + + + + " alt="" width="17" height="17" border="0" /> + + +
                            + + " alt="" width="17" height="17" border="0" /> + + + + " alt="" width="17" height="17" border="0" /> + + + + " alt="" width="17" height="17" border="0" /> + + + + ')"> + " alt="" width="17" height="17" border="0" /> + + +
                             
                            + + + +
                            +
                            + + + + + diff --git a/usr/local/www/system_firmware.php b/usr/local/www/system_firmware.php new file mode 100644 index 000000000..37fdf9309 --- /dev/null +++ b/usr/local/www/system_firmware.php @@ -0,0 +1,316 @@ + + All rights reserved. + + originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2004 Manuel Kasper . + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/bin/tar + pfSense_MODULE: firmware +*/ + +##|+PRIV +##|*IDENT=page-system-firmware-manualupdate +##|*NAME=System: Firmware: Manual Update page +##|*DESCR=Allow access to the 'System: Firmware: Manual Update' page. +##|*MATCH=system_firmware.php* +##|-PRIV + +$d_isfwfile = 1; +$nocsrf = true; + +require_once("globals.inc"); +require_once("functions.inc"); +require_once("guiconfig.inc"); +require_once("xmlrpc_client.inc"); + +$curcfg = $config['system']['firmware']; + +/* Allow additional execution time 0 = no limit. */ +ini_set('max_execution_time', '9999'); +ini_set('max_input_time', '9999'); + +function file_is_for_platform($filename, $ul_name) { + global $g; + if($g['platform'] == "nanobsd") { + if(stristr($ul_name, "nanobsd")) + return true; + else + return false; + } + $_gb = exec("/usr/bin/tar xzf $filename -C /tmp/ etc/platform"); + unset($_gb); + if(!file_exists("/tmp/etc/platform")) + return false; + $upgrade_is_for_platform = trim(file_get_contents("/tmp/etc/platform", " \n\t\r")); + if ($g['platform'] == $upgrade_is_for_platform) { + @unlink("/tmp/etc/platform"); + return true; + } + return false; +} + +function file_upload_error_message($error_code) { + switch ($error_code) { + case UPLOAD_ERR_INI_SIZE: + return gettext('The uploaded file exceeds the upload_max_filesize directive in php.ini'); + case UPLOAD_ERR_FORM_SIZE: + return gettext('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'); + case UPLOAD_ERR_PARTIAL: + return gettext('The uploaded file was only partially uploaded'); + case UPLOAD_ERR_NO_FILE: + return gettext('No file was uploaded'); + case UPLOAD_ERR_NO_TMP_DIR: + return gettext('Missing a temporary folder'); + case UPLOAD_ERR_CANT_WRITE: + return gettext('Failed to write file to disk'); + case UPLOAD_ERR_EXTENSION: + return gettext('File upload stopped by extension'); + default: + return gettext('Unknown upload error'); + } +} + +/* if upgrade in progress, alert user */ +if(is_subsystem_dirty('firmwarelock')) { + $pgtitle = array(gettext("System"),gettext("Firmware"),gettext("Manual Update")); + include("head.inc"); + echo "\n"; + include("fbegin.inc"); + echo "
                            \n"; + print_info_box(gettext("An upgrade is currently in progress.

                            The firewall will reboot when the operation is complete.") . "

                            update

                            "); + echo "
                            \n"; + include("fend.inc"); + echo ""; + echo ""; + exit; +} + +if($_POST['backupbeforeupgrade']) + touch("/tmp/perform_full_backup.txt"); + +/* Handle manual upgrade */ +if ($_POST && !is_subsystem_dirty('firmwarelock')) { + + unset($input_errors); + unset($sig_warning); + + if (stristr($_POST['Submit'], gettext("Enable"))) + $mode = "enable"; + else if (stristr($_POST['Submit'], gettext("Disable"))) + $mode = "disable"; + else if (stristr($_POST['Submit'], gettext("Upgrade")) || $_POST['sig_override']) + $mode = "upgrade"; + else if ($_POST['sig_no']) { + if(file_exists("{$g['upload_path']}/firmware.tgz")) + unlink("{$g['upload_path']}/firmware.tgz"); + } + if ($mode) { + if ($mode == "enable") { + conf_mount_rw(); + mark_subsystem_dirty('firmware'); + } else if ($mode == "disable") { + conf_mount_ro(); + clear_subsystem_dirty('firmware'); + } else if ($mode == "upgrade") { + if ($_FILES['ulfile']['error']) + $errortext = "(" . file_upload_error_message($_FILES['ulfile']['error']) . ")"; + if (is_uploaded_file($_FILES['ulfile']['tmp_name'])) { + /* verify firmware image(s) */ + if (file_is_for_platform($_FILES['ulfile']['tmp_name'], $_FILES['ulfile']['name']) == false && !$_POST['sig_override']) + $input_errors[] = gettext("The uploaded image file is not for this platform."); + else if (!file_exists($_FILES['ulfile']['tmp_name'])) { + /* probably out of memory for the MFS */ + $input_errors[] = gettext("Image upload failed (out of memory?)"); + mwexec("/etc/rc.firmware disable"); + clear_subsystem_dirty('firmware'); + } else { + /* move the image so PHP won't delete it */ + rename($_FILES['ulfile']['tmp_name'], "{$g['upload_path']}/firmware.tgz"); + + /* check digital signature */ + $sigchk = verify_digital_signature("{$g['upload_path']}/firmware.tgz"); + + if ($sigchk == 1) + $sig_warning = gettext("The digital signature on this image is invalid."); + else if ($sigchk == 2 && !isset($config['system']['firmware']['allowinvalidsig'])) + $sig_warning = gettext("This image is not digitally signed."); + else if (($sigchk >= 3)) + $sig_warning = gettext("There has been an error verifying the signature on this image."); + + if (!verify_gzip_file("{$g['upload_path']}/firmware.tgz")) { + $input_errors[] = gettext("The image file is corrupt."); + unlink("{$g['upload_path']}/firmware.tgz"); + } + } + } + + run_plugins("/usr/local/pkg/firmware_upgrade"); + + /* Check for input errors, firmware locks, warnings, then check for firmware if sig_override is set */ + if (!$input_errors && !is_subsystem_dirty('firmwarelock') && (!$sig_warning || $_POST['sig_override'])) { + if (file_exists("{$g['upload_path']}/firmware.tgz")) { + /* fire up the update script in the background */ + mark_subsystem_dirty('firmwarelock'); + $savemsg = gettext("The firmware is now being updated. The firewall will reboot automatically."); + if (stristr($_FILES['ulfile']['name'],"nanobsd") or $_POST['isnano'] == "yes") + mwexec_bg("/etc/rc.firmware pfSenseNanoBSDupgrade {$g['upload_path']}/firmware.tgz"); + else if(stristr($_FILES['ulfile']['name'],"bdiff")) + mwexec_bg("/etc/rc.firmware delta_update {$g['upload_path']}/firmware.tgz"); + else { + if($g['platform'] == "nanobsd") + $whichone = "pfSenseNanoBSDupgrade"; + else + $whichone = "pfSenseupgrade"; + mwexec_bg("/etc/rc.firmware {$whichone} {$g['upload_path']}/firmware.tgz"); + unset($whichone); + } + } else + $savemsg = sprintf(gettext("Firmware image missing or other error, please try again %s."),$errortext); + } + } + } +} + +$pgtitle = array(gettext("System"),gettext("Firmware")); +include("head.inc"); + +?> + +
                            + + + + + + "") print_info_box($fwinfo); ?> + +" . $sig_warning . "
                            " . gettext("This means that the image you uploaded " . + "is not an official/supported image and may lead to unexpected behavior or security " . + "compromises. Only install images that come from sources that you trust, and make sure ". + "that the image has not been tampered with.") . "

                            ". + gettext("Do you want to install this image anyway (on your own risk)?"); +print_info_box($sig_warning); +if(stristr($_FILES['ulfile']['name'],"nanobsd")) + echo "\n"; +?> + " /> + " /> + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + +
                              + + + " /> +
                            + +
                            + + " /> +
                              + + + +
                            + + +
                            + + " /> + + + + +
                              + + + + +
                            +
                            +
                            + +
                            + +
                            +
                            +
                            + + + +
                            + + diff --git a/usr/local/www/system_firmware_auto.php b/usr/local/www/system_firmware_auto.php new file mode 100755 index 000000000..47e9761fd --- /dev/null +++ b/usr/local/www/system_firmware_auto.php @@ -0,0 +1,288 @@ + + Copyright (C) 2005 Scott Ullrich + + Based originally on system_firmware.php + (C)2003-2004 Manuel Kasper + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/bin/tar /usr/bin/nohup /bin/cat /sbin/sha256 + pfSense_MODULE: firmware +*/ + +##|+PRIV +##|*IDENT=page-system-firmware-checkforupdate +##|*NAME=System: Firmware: Check For Update page +##|*DESCR=Allow access to the 'System: Firmware: Check For Update' page. +##|*MATCH=system_firmware_auto.php* +##|-PRIV + +$nocsrf = true; + +require("guiconfig.inc"); +require_once("pfsense-utils.inc"); + +$curcfg = $config['system']['firmware']; + +if(isset($curcfg['alturl']['enable'])) + $updater_url = "{$config['system']['firmware']['alturl']['firmwareurl']}"; +else + $updater_url = $g['update_url']; + +if($_POST['backupbeforeupgrade']) + touch("/tmp/perform_full_backup.txt"); + +$closehead = false; +$pgtitle = array(gettext("Diagnostics"),gettext("Firmware"),gettext("Auto Update")); +include("head.inc"); + +?> + + + + + + + + + +
                            + + + + + + + +
                            + +
                            + + + + +
                            + + + + +
                            + + + + + + + +
                            + + +
                            + +
                            +
                            +
                            + + + +
                            + + +
                            +
                            +
                            +
                            + + + += 3)) { + $sig_warning = gettext("There has been an error verifying the signature on this image."); + $exitstatus = 1; +} + +if ($exitstatus) { + update_status($sig_warning); + update_output_window(gettext("Update cannot continue. You can disable this check on the Updater Settings tab.")); + require("fend.inc"); + exit; +} else if ($sigchk == 2) { + update_status("Upgrade in progress..."); + update_output_window("\n" . gettext("Upgrade Image does not contain a signature but the system has been configured to allow unsigned images. One moment please...") . "\n"); +} + +if (!verify_gzip_file("{$g['upload_path']}/latest.tgz")) { + update_status(gettext("The image file is corrupt.")); + update_output_window(gettext("Update cannot continue")); + if (file_exists("{$g['upload_path']}/latest.tgz")) { + conf_mount_rw(); + unlink("{$g['upload_path']}/latest.tgz"); + conf_mount_ro(); + } + require("fend.inc"); + exit; +} + +if($downloaded_latest_tgz_sha256 <> $upgrade_latest_tgz_sha256) { + update_status(gettext("Downloading complete but sha256 does not match.")); + update_output_window(gettext("Auto upgrade aborted.") . " \n\n" . gettext("Downloaded SHA256") . ": " . $downloaded_latest_tgz_sha256 . "\n\n" . gettext("Needed SHA256") . ": " . $upgrade_latest_tgz_sha256); +} else { + update_output_window($g['product_name'] . " " . gettext("is now upgrading.") . "\\n\\n" . gettext("The firewall will reboot once the operation is completed.")); + echo "\n"; + mwexec_bg($external_upgrade_helper_text); +} + +/* + Helper functions +*/ + +function read_body_firmware($ch, $string) { + global $fout, $file_size, $downloaded, $counter, $version, $latest_version, $current_installed_version; + $length = strlen($string); + $downloaded += intval($length); + $downloadProgress = round(100 * (1 - $downloaded / $file_size), 0); + $downloadProgress = 100 - $downloadProgress; + $a = $file_size; + $b = $downloaded; + $c = $downloadProgress; + $text = " " . gettext("Auto Update Download Status") . "\\n"; + $text .= "----------------------------------------------------\\n"; + $text .= " " . gettext("Current Version") . " : {$current_installed_version}\\n"; + $text .= " " . gettext("Latest Version") . " : {$latest_version}\\n"; + $text .= " " . gettext("File size") . " : {$a}\\n"; + $text .= " " . gettext("Downloaded") . " : {$b}\\n"; + $text .= " " . gettext("Percent") . " : {$c}%\\n"; + $text .= "----------------------------------------------------\\n"; + $counter++; + if($counter > 150) { + update_output_window($text); + update_progress_bar($downloadProgress); + $counter = 0; + } + fwrite($fout, $string); + return $length; +} + +?> + + + diff --git a/usr/local/www/system_firmware_check.php b/usr/local/www/system_firmware_check.php new file mode 100644 index 000000000..d09bda60f --- /dev/null +++ b/usr/local/www/system_firmware_check.php @@ -0,0 +1,199 @@ + + All rights reserved. + + originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2004 Manuel Kasper . + 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. +*/ +/* + pfSense_MODULE: firmware +*/ + +##|+PRIV +##|*IDENT=page-system-firmware-autoupdate +##|*NAME=System: Firmware: Auto Update page +##|*DESCR=Allow access to the 'System: Firmware: Auto Update' page. +##|*MATCH=system_firmware_check.php* +##|-PRIV + +$d_isfwfile = 1; +require("guiconfig.inc"); +require_once("pfsense-utils.inc"); + +$curcfg = $config['system']['firmware']; +$pgtitle=array(gettext("System"), gettext("Firmware"), gettext("Auto Update")); +include("head.inc"); + +?> + + + + + +
                            + + + + + + + +
                            + +
                            + + + + +
                            + + + + + + + + +
                            + + +
                            + +
                            +
                            +
                            + + + + + " /> +
                            +
                            + +

                            + +"; + echo "

                            "; + require("fend.inc"); + echo ""; + echo ""; + exit; +} + +echo "\n\n"; +echo "\n\n"; + +$txt = gettext("A new version is now available") . "\\n\\n"; +$txt .= gettext("Current version") .": ". $current_installed_version . "\\n"; +if ($g['platform'] == "nanobsd") { + $txt .= " " . gettext("NanoBSD Size") . " : " . trim(file_get_contents("/etc/nanosize.txt")) . "\\n"; +} +$txt .= " " . gettext("Built On") .": ". $current_installed_buildtime . "\\n"; +$txt .= " " . gettext("New version") .": ". htmlspecialchars($remote_version, ENT_QUOTES | ENT_HTML401). "\\n\\n"; +$txt .= " " . gettext("Update source") .": ". $updater_url . "\\n"; +update_output_window($txt); +?> +

                            + + + + diff --git a/usr/local/www/system_firmware_restorefullbackup.php b/usr/local/www/system_firmware_restorefullbackup.php new file mode 100644 index 000000000..7d635bf3f --- /dev/null +++ b/usr/local/www/system_firmware_restorefullbackup.php @@ -0,0 +1,209 @@ +. + 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. +*/ + +/* + pfSense_BUILDER_BINARIES: /etc/rc.restore_full_backup + pfSense_MODULE: backup +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-restore-full-backup +##|*NAME=Diagnostics: Restore full backup +##|*DESCR=Allow access to the 'Diagnostics: Restore Full Backup' page. +##|*MATCH=system_firmware_restorefullbackup.php +##|-PRIV + +/* Allow additional execution time 0 = no limit. */ +ini_set('max_execution_time', '0'); +ini_set('max_input_time', '0'); + +require_once("functions.inc"); +require("guiconfig.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +if($_POST['overwriteconfigxml']) + touch("/tmp/do_not_restore_config.xml"); + +if($_GET['backupnow']) + mwexec_bg("/etc/rc.create_full_backup"); + +if($_GET['downloadbackup']) { + $filename = basename($_GET['downloadbackup']); + $path = "/root/{$filename}"; + if(file_exists($path)) { + session_write_close(); + ob_end_clean(); + session_cache_limiter('public'); + //$fd = fopen("/root/{$filename}", "rb"); + $filesize = filesize("/root/{$filename}"); + header("Cache-Control: "); + header("Pragma: "); + header("Content-Type: application/octet-stream"); + header("Content-Length: " .(string)(filesize($path)) ); + header('Content-Disposition: attachment; filename="'.$filename.'"'); + header("Content-Transfer-Encoding: binary\n"); + if($file = fopen("/root/{$filename}", 'rb')){ + while( (!feof($file)) && (connection_status()==0) ){ + print(fread($file, 1024*8)); + flush(); + } + fclose($file); + } + + exit; + } +} + +if ($_GET['deletefile']) { + $filename = $_GET['deletefile']; + if(file_exists("/root/{$filename}")) { + unlink("/root/" . $filename); + $savemsg = gettext("$filename has been deleted."); + } +} + +if ($_POST['restorefile']) { + $filename = $_POST['restorefile']; + if(file_exists("/root/{$filename}")) { + mwexec_bg("/etc/rc.restore_full_backup /root/" . escapeshellcmd($filename)); + $savemsg = gettext("The firewall is currently restoring $filename"); + } +} + +$pgtitle = array(gettext("Diagnostics"),gettext("Restore full backup")); +include("head.inc"); + +?> + + + + + +

                            +

                            + +" . gettext("The firewall is now rebooting."));?>
                            +
                            + +
                            + + + + + + + +
                            + +
                            +
                            + + + + + + + +"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + } + if($counter == 0) { + echo ""; + echo ""; + echo ""; + } +?> + + + +
                            "; + echo " $arf"; + echo ""; + echo date ("F d Y H:i:s", filemtime($arf)); + echo ""; + echo format_bytes($size); + echo ""; + echo ""; + echo gettext("Delete"); + echo " | "; + echo ""; + echo gettext("Download"); + echo ""; + echo "
                            "; + echo gettext("Could not locate any previous backups."); + echo "
                            +  
                            + +
                            + " /> +
                            +
                            +
                            +
                            + + + + + + + diff --git a/usr/local/www/system_firmware_settings.php b/usr/local/www/system_firmware_settings.php new file mode 100644 index 000000000..c79d959d5 --- /dev/null +++ b/usr/local/www/system_firmware_settings.php @@ -0,0 +1,273 @@ + + Copyright (C) 2005 Colin Smith + + 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. +*/ +/* + pfSense_BUILDER_BINARIES: /usr/bin/fetch + pfSense_MODULE: firmware +*/ + +##|+PRIV +##|*IDENT=page-system-firmware-settings +##|*NAME=System: Firmware: Settings page +##|*DESCR=Allow access to the 'System: Firmware: Settings' page. +##|*MATCH=system_firmware_settings.php* +##|-PRIV + +require("guiconfig.inc"); + +if ($_POST) { + if (!$input_errors) { + if($_POST['alturlenable'] == "yes") { + $config['system']['firmware']['alturl']['enable'] = true; + $config['system']['firmware']['alturl']['firmwareurl'] = $_POST['firmwareurl']; + } else { + unset($config['system']['firmware']['alturl']['enable']); + unset($config['system']['firmware']['alturl']['firmwareurl']); + unset($config['system']['firmware']['alturl']); + unset($config['system']['firmware']); + } + if($_POST['allowinvalidsig'] == "yes") + $config['system']['firmware']['allowinvalidsig'] = true; + else + unset($config['system']['firmware']['allowinvalidsig']); + + if($_POST['disablecheck'] == "yes") + $config['system']['firmware']['disablecheck'] = true; + else + unset($config['system']['firmware']['disablecheck']); + + if($_POST['synconupgrade'] == "yes") + $config['system']['gitsync']['synconupgrade'] = true; + else + unset($config['system']['gitsync']['synconupgrade']); + $config['system']['gitsync']['repositoryurl'] = $_POST['repositoryurl']; + $config['system']['gitsync']['branch'] = $_POST['branch']; + + write_config(); + } +} + +$curcfg = $config['system']['firmware']; +$gitcfg = $config['system']['gitsync']; + +$pgtitle = array(gettext("System"),gettext("Firmware"),gettext("Settings")); +$closehead = false; +include("head.inc"); + +exec("/usr/bin/fetch -q -o {$g['tmp_path']}/manifest \"{$g['update_manifest']}\""); +if(file_exists("{$g['tmp_path']}/manifest")) { + $preset_urls_split = explode("\n", file_get_contents("{$g['tmp_path']}/manifest")); +} + +?> + + + + + + + +
                            + + + + + +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + +

                            +
                            + />
                            + + +
                            + + +
                            + +
                            +
                             
                            + /> +
                            + +
                            + /> +
                            + +
                             
                            + /> +
                            + +
                            + + +
                            + +
                            + + +
                            + + +
                            + + +
                            + + +
                            + +
                              + " /> +
                            +
                            + + + diff --git a/usr/local/www/system_gateway_groups.php b/usr/local/www/system_gateway_groups.php new file mode 100644 index 000000000..567e3057b --- /dev/null +++ b/usr/local/www/system_gateway_groups.php @@ -0,0 +1,208 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-system-gatewaygroups +##|*NAME=System: Gateway Groups page +##|*DESCR=Allow access to the 'System: Gateway Groups' page. +##|*MATCH=system_gateway_groups.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("openvpn.inc"); + +if (!is_array($config['gateways']['gateway_group'])) + $config['gateways']['gateway_group'] = array(); + +$a_gateway_groups = &$config['gateways']['gateway_group']; +$a_gateways = &$config['gateways']['gateway_item']; +$changedesc = gettext("Gateway Groups") . ": "; + +if ($_POST) { + + $pconfig = $_POST; + + if ($_POST['apply']) { + + $retval = 0; + + $retval = system_routing_configure(); + send_multiple_events(array("service reload dyndnsall", "service reload ipsecdns", "filter reload")); + + /* reconfigure our gateway monitor */ + setup_gateways_monitor(); + + $savemsg = get_std_save_message($retval); + if ($retval == 0) + clear_subsystem_dirty('staticroutes'); + + foreach ($a_gateway_groups as $gateway_group) { + $gw_subsystem = 'gwgroup.' . $gateway_group['name']; + if (is_subsystem_dirty($gw_subsystem)) { + openvpn_resync_gwgroup($gateway_group['name']); + clear_subsystem_dirty($gw_subsystem); + } + } + } +} + +if ($_GET['act'] == "del") { + if ($a_gateway_groups[$_GET['id']]) { + $changedesc .= gettext("removed gateway group") . " {$_GET['id']}"; + foreach ($config['filter']['rule'] as $idx => $rule) { + if ($rule['gateway'] == $a_gateway_groups[$_GET['id']]['name']) + unset($config['filter']['rule'][$idx]['gateway']); + } + unset($a_gateway_groups[$_GET['id']]); + write_config($changedesc); + mark_subsystem_dirty('staticroutes'); + header("Location: system_gateway_groups.php"); + exit; + } +} + +$pgtitle = array(gettext("System"),gettext("Gateway Groups")); +$shortcut_section = "gateway-groups"; + +include("head.inc"); + +?> + + + +
                            + + +
                            +"));?>

                            + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + + + + +
                            edit
                            +
                            + + + + + +
                            edit
                            +
                            + + + \n"; + } + ?> + + \n"; + } + ?> + +   + + + + + + + + + + +
                            edit')">delete
                            duplicate
                            +
                            +
                            +
                            +
                            +

                            + + + diff --git a/usr/local/www/system_gateway_groups_edit.php b/usr/local/www/system_gateway_groups_edit.php new file mode 100644 index 000000000..621e117a7 --- /dev/null +++ b/usr/local/www/system_gateway_groups_edit.php @@ -0,0 +1,357 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-system-gateways-editgatewaygroups +##|*NAME=System: Gateways: Edit Gateway Groups page +##|*DESCR=Allow access to the 'System: Gateways: Edit Gateway Groups' page. +##|*MATCH=system_gateway_groups_edit.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_gateway_groups.php'); + +if (!is_array($config['gateways']['gateway_group'])) + $config['gateways']['gateway_group'] = array(); + +$a_gateway_groups = &$config['gateways']['gateway_group']; +$a_gateways = return_gateways_array(); +$carplist = get_configured_carp_interface_list(); + +$categories = array('down' => gettext("Member Down"), + 'downloss' => gettext("Packet Loss"), + 'downlatency' => gettext("High Latency"), + 'downlosslatency' => gettext("Packet Loss or High Latency")); + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) + $id = $_GET['dup']; + +if (isset($id) && $a_gateway_groups[$id]) { + $pconfig['name'] = $a_gateway_groups[$id]['name']; + $pconfig['item'] = &$a_gateway_groups[$id]['item']; + $pconfig['descr'] = $a_gateway_groups[$id]['descr']; + $pconfig['trigger'] = $a_gateway_groups[$id]['trigger']; +} + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) + unset($id); + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "name"); + $reqdfieldsn = explode(",", "Name"); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (! isset($_POST['name'])) { + $input_errors[] = gettext("A valid gateway group name must be specified."); + } + if (! is_validaliasname($_POST['name'])) { + $input_errors[] = gettext("The gateway name must not contain invalid characters."); + } + + if (isset($_POST['name'])) { + /* check for overlaps */ + if(is_array($a_gateway_groups)) { + foreach ($a_gateway_groups as $gateway_group) { + if (isset($id) && ($a_gateway_groups[$id]) && ($a_gateway_groups[$id] === $gateway_group)) { + if ($gateway_group['name'] != $_POST['name']) + $input_errors[] = gettext("Changing name on a gateway group is not allowed."); + continue; + } + + if ($gateway_group['name'] == $_POST['name']) { + $input_errors[] = sprintf(gettext('A gateway group with this name "%s" already exists.'), $_POST['name']); + break; + } + } + } + } + + /* Build list of items in group with priority */ + $pconfig['item'] = array(); + foreach($a_gateways as $gwname => $gateway) { + if($_POST[$gwname] > 0) { + $vipname = "{$gwname}_vip"; + /* we have a priority above 0 (disabled), add item to list */ + $pconfig['item'][] = "{$gwname}|{$_POST[$gwname]}|{$_POST[$vipname]}"; + } + /* check for overlaps */ + if ($_POST['name'] == $gwname) + $input_errors[] = sprintf(gettext('A gateway group cannot have the same name with a gateway "%s" please choose another name.'), $_POST['name']); + + } + if(count($pconfig['item']) == 0) + $input_errors[] = gettext("No gateway(s) have been selected to be used in this group"); + + if (!$input_errors) { + $gateway_group = array(); + $gateway_group['name'] = $_POST['name']; + $gateway_group['item'] = $pconfig['item']; + $gateway_group['trigger'] = $_POST['trigger']; + $gateway_group['descr'] = $_POST['descr']; + + if (isset($id) && $a_gateway_groups[$id]) + $a_gateway_groups[$id] = $gateway_group; + else + $a_gateway_groups[] = $gateway_group; + + mark_subsystem_dirty('staticroutes'); + mark_subsystem_dirty('gwgroup.' . $gateway_group['name']); + + write_config(); + + header("Location: system_gateway_groups.php"); + exit; + } +} + +$pgtitle = array(gettext("System"),gettext("Gateways"),gettext("Edit gateway group")); +$shortcut_section = "gateway-groups"; + +function build_gateway_protocol_map (&$a_gateways) { + $result = array(); + foreach ($a_gateways as $gwname => $gateway) { + $result[$gwname] = $gateway['ipprotocol']; + } + return $result; +} + +include("head.inc"); + +?> + + + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + +
                            + +
                            + + + + + + + + $gateway) { + if(!empty($pconfig['item'])) { + $af = explode("|", $pconfig['item'][0]); + $family = $a_gateways[$af[0]]['ipprotocol']; + if($gateway['ipprotocol'] != $family) + continue; + } + $interface = $gateway['friendlyiface']; + $selected = array(); + foreach((array)$pconfig['item'] as $item) { + $itemsplit = explode("|", $item); + if($itemsplit[0] == $gwname) { + $selected[$itemsplit[1]] = "selected=\"selected\""; + break; + } else { + $selected[0] = "selected=\"selected\""; + } + } + $tr_id = $gwname . "_row"; + echo "\n"; + echo ""; + + $selected = array(); + foreach((array)$pconfig['item'] as $item) { + $itemsplit = explode("|", $item); + if($itemsplit[0] == $gwname) { + $selected[$itemsplit[2]] = "selected=\"selected\""; + break; + } else { + $selected['address'] = "selected=\"selected\""; + } + } + echo ""; + echo ""; + } + ?> +
                            GatewayTierVirtual IPDescription
                            "; + echo "{$gateway['name']} "; + echo ""; + echo "\n"; + echo ""; + echo "{$gateway['descr']} "; + echo "
                            +
                            +
                            + +
                            +
                            + +

                            +
                            + +
                            + +
                              + " /> + " onclick="window.location.href=''" /> + + + +
                            +
                            + + + diff --git a/usr/local/www/system_gateways.php b/usr/local/www/system_gateways.php new file mode 100644 index 000000000..58de70001 --- /dev/null +++ b/usr/local/www/system_gateways.php @@ -0,0 +1,404 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-system-gateways +##|*NAME=System: Gateways page +##|*DESCR=Allow access to the 'System: Gateways' page. +##|*MATCH=system_gateways.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +$a_gateways = return_gateways_array(true, false, true); +$a_gateways_arr = array(); +foreach ($a_gateways as $gw) + $a_gateways_arr[] = $gw; +$a_gateways = $a_gateways_arr; + +if (!is_array($config['gateways']['gateway_item'])) + $config['gateways']['gateway_item'] = array(); + +$a_gateway_item = &$config['gateways']['gateway_item']; + +if ($_POST) { + + $pconfig = $_POST; + + if ($_POST['apply']) { + + $retval = 0; + + $retval = system_routing_configure(); + $retval |= filter_configure(); + /* reconfigure our gateway monitor */ + setup_gateways_monitor(); + + $savemsg = get_std_save_message($retval); + if ($retval == 0) + clear_subsystem_dirty('staticroutes'); + } +} + +function can_delete_gateway_item($id) { + global $config, $input_errors, $a_gateways; + + if (!isset($a_gateways[$id])) + return false; + + if (is_array($config['gateways']['gateway_group'])) { + foreach ($config['gateways']['gateway_group'] as $group) { + foreach ($group['item'] as $item) { + $items = explode("|", $item); + if ($items[0] == $a_gateways[$id]['name']) { + $input_errors[] = sprintf(gettext("Gateway '%s' cannot be deleted because it is in use on Gateway Group '%s'"), $a_gateways[$id]['name'], $group['name']); + break; + } + } + } + } + + if (is_array($config['staticroutes']['route'])) { + foreach ($config['staticroutes']['route'] as $route) { + if ($route['gateway'] == $a_gateways[$id]['name']) { + $input_errors[] = sprintf(gettext("Gateway '%s' cannot be deleted because it is in use on Static Route '%s'"), $a_gateways[$id]['name'], $route['network']); + break; + } + } + } + + if (isset($input_errors)) + return false; + + return true; +} + +function delete_gateway_item($id) { + global $config, $a_gateways; + + if (!isset($a_gateways[$id])) + return; + + /* NOTE: Cleanup static routes for the monitor ip if any */ + if (!empty($a_gateways[$id]['monitor']) && + $a_gateways[$id]['monitor'] != "dynamic" && + is_ipaddr($a_gateways[$id]['monitor']) && + $a_gateways[$id]['gateway'] != $a_gateways[$id]['monitor']) { + if (is_ipaddrv4($a_gateways[$id]['monitor'])) + mwexec("/sbin/route delete " . escapeshellarg($a_gateways[$id]['monitor'])); + else + mwexec("/sbin/route delete -inet6 " . escapeshellarg($a_gateways[$id]['monitor'])); + } + + if ($config['interfaces'][$a_gateways[$id]['friendlyiface']]['gateway'] == $a_gateways[$id]['name']) + unset($config['interfaces'][$a_gateways[$id]['friendlyiface']]['gateway']); + unset($config['gateways']['gateway_item'][$a_gateways[$id]['attribute']]); +} + +unset($input_errors); +if ($_GET['act'] == "del") { + if (can_delete_gateway_item($_GET['id'])) { + $realid = $a_gateways[$_GET['id']]['attribute']; + delete_gateway_item($_GET['id']); + write_config("Gateways: removed gateway {$realid}"); + mark_subsystem_dirty('staticroutes'); + header("Location: system_gateways.php"); + exit; + } +} + +if (isset($_POST['del_x'])) { + /* delete selected items */ + if (is_array($_POST['rule']) && count($_POST['rule'])) { + foreach ($_POST['rule'] as $rulei) + if(!can_delete_gateway_item($rulei)) + break; + + if (!isset($input_errors)) { + $items_deleted = ""; + foreach ($_POST['rule'] as $rulei) { + delete_gateway_item($rulei); + $items_deleted .= "{$rulei} "; + } + if (!empty($items_deleted)) { + write_config("Gateways: removed gateways {$items_deleted}"); + mark_subsystem_dirty('staticroutes'); + } + header("Location: system_gateways.php"); + exit; + } + } + +} else if ($_GET['act'] == "toggle" && $a_gateways[$_GET['id']]) { + $realid = $a_gateways[$_GET['id']]['attribute']; + + if(isset($a_gateway_item[$realid]['disabled'])) + unset($a_gateway_item[$realid]['disabled']); + else + $a_gateway_item[$realid]['disabled'] = true; + + if (write_config("Gateways: enable/disable")) + mark_subsystem_dirty('staticroutes'); + + header("Location: system_gateways.php"); + exit; +} + +$pgtitle = array(gettext("System"),gettext("Gateways")); +$shortcut_section = "gateways"; + +include("head.inc"); + +?> + + + + +
                            + + +

                            +" . gettext("You must apply the changes in order for them to take effect."));?>

                            + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + +"; + $i = 0; + foreach ($a_gateways as $gateway): + if (isset($gateway['disabled']) || isset($gateway['inactive'])) { + $textss = ""; + $iconfn = "pass_d"; + } else { + $textss = ""; + $iconfn = "pass"; + } +?> + + + + + + + + + + + + + + + + +
                               + + + + + +
                            + + add + +
                            +
                            + + + +   + + + + " alt="icon" /> + + + " alt="icon" /> + + + " alt="icon" /> + + +(default)"; + echo $textse; +?> + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + edit + + + ')"> + delete + +
                            + + add + +
                            +
                            + + + + + +
                            + + " border="0" alt="delete" /> + + " + onclick="return confirm('')" /> + + + + edit + +
                            +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/system_gateways_edit.php b/usr/local/www/system_gateways_edit.php new file mode 100644 index 000000000..ebecbe7b8 --- /dev/null +++ b/usr/local/www/system_gateways_edit.php @@ -0,0 +1,877 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-system-gateways-editgateway +##|*NAME=System: Gateways: Edit Gateway page +##|*DESCR=Allow access to the 'System: Gateways: Edit Gateway' page. +##|*MATCH=system_gateways_edit.php* +##|-PRIV + +require("guiconfig.inc"); +require("pkg-utils.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_gateways.php'); + +$a_gateways = return_gateways_array(true, false, true); +$a_gateways_arr = array(); +foreach($a_gateways as $gw) { + $a_gateways_arr[] = $gw; +} +$a_gateways = $a_gateways_arr; + +if (!is_array($config['gateways']['gateway_item'])) + $config['gateways']['gateway_item'] = array(); + +$a_gateway_item = &$config['gateways']['gateway_item']; +$apinger_default = return_apinger_defaults(); + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) + $id = $_GET['dup']; + +if (isset($id) && $a_gateways[$id]) { + $pconfig = array(); + $pconfig['name'] = $a_gateways[$id]['name']; + $pconfig['weight'] = $a_gateways[$id]['weight']; + $pconfig['interval'] = $a_gateways[$id]['interval']; + $pconfig['avg_delay_samples'] = $a_gateways[$id]['avg_delay_samples']; + $pconfig['avg_delay_samples_calculated'] = isset($a_gateways[$id]['avg_delay_samples_calculated']); + $pconfig['avg_loss_samples'] = $a_gateways[$id]['avg_loss_samples']; + $pconfig['avg_loss_samples_calculated'] = isset($a_gateways[$id]['avg_loss_samples_calculated']); + $pconfig['avg_loss_delay_samples'] = $a_gateways[$id]['avg_loss_delay_samples']; + $pconfig['avg_loss_delay_samples_calculated'] = isset($a_gateways[$id]['avg_loss_delay_samples_calculated']); + $pconfig['interface'] = $a_gateways[$id]['interface']; + $pconfig['friendlyiface'] = $a_gateways[$id]['friendlyiface']; + $pconfig['ipprotocol'] = $a_gateways[$id]['ipprotocol']; + if (isset($a_gateways[$id]['dynamic'])) + $pconfig['dynamic'] = true; + $pconfig['gateway'] = $a_gateways[$id]['gateway']; + $pconfig['defaultgw'] = isset($a_gateways[$id]['defaultgw']); + $pconfig['force_down'] = isset($a_gateways[$id]['force_down']); + $pconfig['latencylow'] = $a_gateways[$id]['latencylow']; + $pconfig['latencyhigh'] = $a_gateways[$id]['latencyhigh']; + $pconfig['losslow'] = $a_gateways[$id]['losslow']; + $pconfig['losshigh'] = $a_gateways[$id]['losshigh']; + $pconfig['down'] = $a_gateways[$id]['down']; + $pconfig['monitor'] = $a_gateways[$id]['monitor']; + $pconfig['monitor_disable'] = isset($a_gateways[$id]['monitor_disable']); + $pconfig['descr'] = $a_gateways[$id]['descr']; + $pconfig['attribute'] = $a_gateways[$id]['attribute']; + $pconfig['disabled'] = isset($a_gateways[$id]['disabled']); +} + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) { + unset($id); + unset($pconfig['attribute']); +} + +if (isset($id) && $a_gateways[$id]) + $realid = $a_gateways[$id]['attribute']; + +if ($_POST) { + + unset($input_errors); + + /* input validation */ + $reqdfields = explode(" ", "name interface"); + $reqdfieldsn = array(gettext("Name"), gettext("Interface")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (! isset($_POST['name'])) { + $input_errors[] = "A valid gateway name must be specified."; + } + if (! is_validaliasname($_POST['name'])) { + $input_errors[] = gettext("The gateway name must not contain invalid characters."); + } + /* skip system gateways which have been automatically added */ + if (($_POST['gateway'] && (!is_ipaddr($_POST['gateway'])) && ($_POST['attribute'] !== "system")) && ($_POST['gateway'] != "dynamic")) { + $input_errors[] = gettext("A valid gateway IP address must be specified."); + } + + if ($_POST['gateway'] && (is_ipaddr($_POST['gateway'])) && !$_REQUEST['isAjax']) { + if(is_ipaddrv4($_POST['gateway'])) { + $parent_ip = get_interface_ip($_POST['interface']); + $parent_sn = get_interface_subnet($_POST['interface']); + if(empty($parent_ip) || empty($parent_sn)) { + $input_errors[] = gettext("Cannot add IPv4 Gateway Address because no IPv4 address could be found on the interface."); + } else { + $subnets = array(gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn); + $vips = link_interface_to_vips($_POST['interface']); + if (is_array($vips)) + foreach($vips as $vip) { + if (!is_ipaddrv4($vip['subnet'])) + continue; + $subnets[] = gen_subnet($vip['subnet'], $vip['subnet_bits']) . "/" . $vip['subnet_bits']; + } + + $found = false; + foreach($subnets as $subnet) + if(ip_in_subnet($_POST['gateway'], $subnet)) { + $found = true; + break; + } + + if ($found === false) + $input_errors[] = sprintf(gettext("The gateway address %1\$s does not lie within one of the chosen interface's subnets."), $_POST['gateway']); + } + } + else if(is_ipaddrv6($_POST['gateway'])) { + /* do not do a subnet match on a link local address, it's valid */ + if(!is_linklocal($_POST['gateway'])) { + $parent_ip = get_interface_ipv6($_POST['interface']); + $parent_sn = get_interface_subnetv6($_POST['interface']); + if(empty($parent_ip) || empty($parent_sn)) { + $input_errors[] = gettext("Cannot add IPv6 Gateway Address because no IPv6 address could be found on the interface."); + } else { + $subnets = array(gen_subnetv6($parent_ip, $parent_sn) . "/" . $parent_sn); + $vips = link_interface_to_vips($_POST['interface']); + if (is_array($vips)) + foreach($vips as $vip) { + if (!is_ipaddrv6($vip['subnet'])) + continue; + $subnets[] = gen_subnetv6($vip['subnet'], $vip['subnet_bits']) . "/" . $vip['subnet_bits']; + } + + $found = false; + foreach($subnets as $subnet) + if(ip_in_subnet($_POST['gateway'], $subnet)) { + $found = true; + break; + } + + if ($found === false) + $input_errors[] = sprintf(gettext("The gateway address %1\$s does not lie within one of the chosen interface's subnets."), $_POST['gateway']); + } + } + } + + if (!empty($config['interfaces'][$_POST['interface']]['ipaddr'])) { + if (is_ipaddr($config['interfaces'][$_POST['interface']]['ipaddr']) && (empty($_POST['gateway']) || $_POST['gateway'] == "dynamic")) + $input_errors[] = gettext("Dynamic gateway values cannot be specified for interfaces with a static IPv4 configuration."); + } + if (!empty($config['interfaces'][$_POST['interface']]['ipaddrv6'])) { + if (is_ipaddr($config['interfaces'][$_POST['interface']]['ipaddrv6']) && (empty($_POST['gateway']) || $_POST['gateway'] == "dynamic")) + $input_errors[] = gettext("Dynamic gateway values cannot be specified for interfaces with a static IPv6 configuration."); + } + } + if (($_POST['monitor'] <> "") && !is_ipaddr($_POST['monitor']) && $_POST['monitor'] != "dynamic") { + $input_errors[] = gettext("A valid monitor IP address must be specified."); + } + /* only allow correct IPv4 and IPv6 gateway addresses */ + if (($_POST['gateway'] <> "") && is_ipaddr($_POST['gateway']) && $_POST['gateway'] != "dynamic") { + if(is_ipaddrv6($_POST['gateway']) && ($_POST['ipprotocol'] == "inet")) { + $input_errors[] = gettext("The IPv6 gateway address '{$_POST['gateway']}' can not be used as a IPv4 gateway'."); + } + if(is_ipaddrv4($_POST['gateway']) && ($_POST['ipprotocol'] == "inet6")) { + $input_errors[] = gettext("The IPv4 gateway address '{$_POST['gateway']}' can not be used as a IPv6 gateway'."); + } + } + /* only allow correct IPv4 and IPv6 monitor addresses */ + if (($_POST['monitor'] <> "") && is_ipaddr($_POST['monitor']) && $_POST['monitor'] != "dynamic") { + if(is_ipaddrv6($_POST['monitor']) && ($_POST['ipprotocol'] == "inet")) { + $input_errors[] = gettext("The IPv6 monitor address '{$_POST['monitor']}' can not be used on a IPv4 gateway'."); + } + if(is_ipaddrv4($_POST['monitor']) && ($_POST['ipprotocol'] == "inet6")) { + $input_errors[] = gettext("The IPv4 monitor address '{$_POST['monitor']}' can not be used on a IPv6 gateway'."); + } + } + + if (isset($_POST['name'])) { + /* check for overlaps */ + foreach ($a_gateways as $gateway) { + if (isset($id) && ($a_gateways[$id]) && ($a_gateways[$id] === $gateway)) { + if ($gateway['name'] != $_POST['name']) + $input_errors[] = gettext("Changing name on a gateway is not allowed."); + continue; + } + if($_POST['name'] <> "") { + if (($gateway['name'] <> "") && ($_POST['name'] == $gateway['name']) && ($gateway['attribute'] !== "system")) { + $input_errors[] = sprintf(gettext('The gateway name "%s" already exists.'), $_POST['name']); + break; + } + } + if(is_ipaddr($_POST['gateway'])) { + if (($gateway['gateway'] <> "") && ($_POST['gateway'] == $gateway['gateway']) && ($gateway['attribute'] !== "system")) { + $input_errors[] = sprintf(gettext('The gateway IP address "%s" already exists.'), $_POST['gateway']); + break; + } + } + if(is_ipaddr($_POST['monitor'])) { + if (($gateway['monitor'] <> "") && ($_POST['monitor'] == $gateway['monitor']) && ($gateway['attribute'] !== "system")) { + $input_errors[] = sprintf(gettext('The monitor IP address "%s" is already in use. You must choose a different monitor IP.'), $_POST['monitor']); + break; + } + } + } + } + + /* input validation of apinger advanced parameters */ + if($_POST['latencylow']) { + if (! is_numeric($_POST['latencylow'])) { + $input_errors[] = gettext("The low latency threshold needs to be a numeric value."); + } else { + if ($_POST['latencylow'] < 1) { + $input_errors[] = gettext("The low latency threshold needs to be positive."); + } + } + } + + if($_POST['latencyhigh']) { + if (! is_numeric($_POST['latencyhigh'])) { + $input_errors[] = gettext("The high latency threshold needs to be a numeric value."); + } else { + if ($_POST['latencyhigh'] < 1) { + $input_errors[] = gettext("The high latency threshold needs to be positive."); + } + } + } + + if($_POST['losslow']) { + if (! is_numeric($_POST['losslow'])) { + $input_errors[] = gettext("The low Packet Loss threshold needs to be a numeric value."); + } else { + if ($_POST['losslow'] < 1) { + $input_errors[] = gettext("The low Packet Loss threshold needs to be positive."); + } + if ($_POST['losslow'] >= 100) { + $input_errors[] = gettext("The low Packet Loss threshold needs to be less than 100."); + } + } + } + + if($_POST['losshigh']) { + if (! is_numeric($_POST['losshigh'])) { + $input_errors[] = gettext("The high Packet Loss threshold needs to be a numeric value."); + } else { + if ($_POST['losshigh'] < 1) { + $input_errors[] = gettext("The high Packet Loss threshold needs to be positive."); + } + if ($_POST['losshigh'] > 100) { + $input_errors[] = gettext("The high Packet Loss threshold needs to be 100 or less."); + } + } + } + + if(($_POST['latencylow']) && ($_POST['latencyhigh'])) { + if ((is_numeric($_POST['latencylow'])) && (is_numeric($_POST['latencyhigh']))) { + if(($_POST['latencylow'] > $_POST['latencyhigh'])) { + $input_errors[] = gettext("The high latency threshold needs to be higher than the low latency threshold"); + } + } + } else { + if($_POST['latencylow']){ + if (is_numeric($_POST['latencylow'])) { + if($_POST['latencylow'] > $apinger_default['latencyhigh']) { + $input_errors[] = gettext(sprintf("The low latency threshold needs to be less than the default high latency threshold (%d)", $apinger_default['latencyhigh'])); + } + } + } + if($_POST['latencyhigh']){ + if (is_numeric($_POST['latencyhigh'])) { + if($_POST['latencyhigh'] < $apinger_default['latencylow']) { + $input_errors[] = gettext(sprintf("The high latency threshold needs to be higher than the default low latency threshold (%d)", $apinger_default['latencylow'])); + } + } + } + } + + if(($_POST['losslow']) && ($_POST['losshigh'])){ + if ((is_numeric($_POST['losslow'])) && (is_numeric($_POST['losshigh']))) { + if($_POST['losslow'] > $_POST['losshigh']) { + $input_errors[] = gettext("The high Packet Loss threshold needs to be higher than the low Packet Loss threshold"); + } + } + } else { + if($_POST['losslow']){ + if (is_numeric($_POST['losslow'])) { + if($_POST['losslow'] > $apinger_default['losshigh']) { + $input_errors[] = gettext(sprintf("The low Packet Loss threshold needs to be less than the default high Packet Loss threshold (%d)", $apinger_default['losshigh'])); + } + } + } + if($_POST['losshigh']){ + if (is_numeric($_POST['losshigh'])) { + if($_POST['losshigh'] < $apinger_default['losslow']) { + $input_errors[] = gettext(sprintf("The high Packet Loss threshold needs to be higher than the default low Packet Loss threshold (%d)", $apinger_default['losslow'])); + } + } + } + } + + if($_POST['interval']) { + if (! is_numeric($_POST['interval'])) { + $input_errors[] = gettext("The probe interval needs to be a numeric value."); + } else { + if ($_POST['interval'] < 1) { + $input_errors[] = gettext("The probe interval needs to be positive."); + } + } + } + + if($_POST['down']) { + if (! is_numeric($_POST['down'])) { + $input_errors[] = gettext("The down time setting needs to be a numeric value."); + } else { + if ($_POST['down'] < 1) { + $input_errors[] = gettext("The down time setting needs to be positive."); + } + } + } + + if(($_POST['interval']) && ($_POST['down'])){ + if ((is_numeric($_POST['interval'])) && (is_numeric($_POST['down']))) { + if($_POST['interval'] > $_POST['down']) { + $input_errors[] = gettext("The probe interval needs to be less than the down time setting."); + } + } + } else { + if($_POST['interval']){ + if (is_numeric($_POST['interval'])) { + if($_POST['interval'] > $apinger_default['down']) { + $input_errors[] = gettext(sprintf("The probe interval needs to be less than the default down time setting (%d)", $apinger_default['down'])); + } + } + } + if($_POST['down']){ + if (is_numeric($_POST['down'])) { + if($_POST['down'] < $apinger_default['interval']) { + $input_errors[] = gettext(sprintf("The down time setting needs to be higher than the default probe interval (%d)", $apinger_default['interval'])); + } + } + } + } + + if($_POST['avg_delay_samples']) { + if (! is_numeric($_POST['avg_delay_samples'])) { + $input_errors[] = gettext("The average delay replies qty needs to be a numeric value."); + } else { + if ($_POST['avg_delay_samples'] < 1) { + $input_errors[] = gettext("The average delay replies qty needs to be positive."); + } + } + } + + if($_POST['avg_loss_samples']) { + if (! is_numeric($_POST['avg_loss_samples'])) { + $input_errors[] = gettext("The average packet loss probes qty needs to be a numeric value."); + } else { + if ($_POST['avg_loss_samples'] < 1) { + $input_errors[] = gettext("The average packet loss probes qty needs to be positive."); + } + } + } + + if($_POST['avg_loss_delay_samples']) { + if (! is_numeric($_POST['avg_loss_delay_samples'])) { + $input_errors[] = gettext("The lost probe delay needs to be a numeric value."); + } else { + if ($_POST['avg_loss_delay_samples'] < 1) { + $input_errors[] = gettext("The lost probe delay needs to be positive."); + } + } + } + + if (!$input_errors) { + $reloadif = ""; + $gateway = array(); + + if (empty($_POST['interface'])) + $gateway['interface'] = $pconfig['friendlyiface']; + else + $gateway['interface'] = $_POST['interface']; + if (is_ipaddr($_POST['gateway'])) + $gateway['gateway'] = $_POST['gateway']; + else + $gateway['gateway'] = "dynamic"; + $gateway['name'] = $_POST['name']; + $gateway['weight'] = $_POST['weight']; + $gateway['ipprotocol'] = $_POST['ipprotocol']; + $gateway['interval'] = $_POST['interval']; + + $gateway['avg_delay_samples'] = $_POST['avg_delay_samples']; + if ($_POST['avg_delay_samples_calculated'] == "yes" || $_POST['avg_delay_samples_calculated'] == "on") + $gateway['avg_delay_samples_calculated'] = true; + + $gateway['avg_loss_samples'] = $_POST['avg_loss_samples']; + if ($_POST['avg_loss_samples_calculated'] == "yes" || $_POST['avg_loss_samples_calculated'] == "on") + $gateway['avg_loss_samples_calculated'] = true; + + $gateway['avg_loss_delay_samples'] = $_POST['avg_loss_delay_samples']; + if ($_POST['avg_loss_delay_samples_calculated'] == "yes" || $_POST['avg_loss_delay_samples_calculated'] == "on") + $gateway['avg_loss_delay_samples_calculated'] = true; + + $gateway['descr'] = $_POST['descr']; + if ($_POST['monitor_disable'] == "yes") + $gateway['monitor_disable'] = true; + if ($_POST['force_down'] == "yes") + $gateway['force_down'] = true; + if (is_ipaddr($_POST['monitor'])) + $gateway['monitor'] = $_POST['monitor']; + + /* NOTE: If monitor ip is changed need to cleanup the old static route */ + if ($_POST['monitor'] != "dynamic" && !empty($a_gateway_item[$realid]) && is_ipaddr($a_gateway_item[$realid]['monitor']) && + $_POST['monitor'] != $a_gateway_item[$realid]['monitor'] && $gateway['gateway'] != $a_gateway_item[$realid]['monitor']) { + if (is_ipaddrv4($a_gateway_item[$realid]['monitor'])) + mwexec("/sbin/route delete " . escapeshellarg($a_gateway_item[$realid]['monitor'])); + else + mwexec("/sbin/route delete -inet6 " . escapeshellarg($a_gateway_item[$realid]['monitor'])); + } + + if ($_POST['defaultgw'] == "yes" || $_POST['defaultgw'] == "on") { + $i = 0; + /* remove the default gateway bits for all gateways with the same address family */ + foreach($a_gateway_item as $gw) { + if ($gateway['ipprotocol'] == $gw['ipprotocol']) { + unset($config['gateways']['gateway_item'][$i]['defaultgw']); + if ($gw['interface'] != $_POST['interface'] && $gw['defaultgw']) + $reloadif = $gw['interface']; + } + $i++; + } + $gateway['defaultgw'] = true; + } + + if ($_POST['latencylow']) + $gateway['latencylow'] = $_POST['latencylow']; + if ($_POST['latencyhigh']) + $gateway['latencyhigh'] = $_POST['latencyhigh']; + if ($_POST['losslow']) + $gateway['losslow'] = $_POST['losslow']; + if ($_POST['losshigh']) + $gateway['losshigh'] = $_POST['losshigh']; + if ($_POST['down']) + $gateway['down'] = $_POST['down']; + + if(isset($_POST['disabled'])) + $gateway['disabled'] = true; + else + unset($gateway['disabled']); + + /* when saving the manual gateway we use the attribute which has the corresponding id */ + if (isset($realid) && $a_gateway_item[$realid]) + $a_gateway_item[$realid] = $gateway; + else + $a_gateway_item[] = $gateway; + + mark_subsystem_dirty('staticroutes'); + + write_config(); + + if($_REQUEST['isAjax']) { + echo $_POST['name']; + exit; + } else if (!empty($reloadif)) + send_event("interface reconfigure {$reloadif}"); + + header("Location: system_gateways.php"); + exit; + } else { + if ($_REQUEST['isAjax']) { + header("HTTP/1.0 500 Internal Server Error"); + header("Content-type: text/plain"); + foreach ($input_errors as $error) { + echo("$error\n"); + } + exit; + } + + $pconfig = $_POST; + if (empty($_POST['friendlyiface'])) + $pconfig['friendlyiface'] = $_POST['interface']; + } +} + + +$pgtitle = array(gettext("System"),gettext("Gateways"),gettext("Edit gateway")); +$shortcut_section = "gateways"; + +include("head.inc"); + +?> + + + + + +
                            + \n"; + } + echo "\n"; + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + /> +
                            + +
                            +
                            + +
                            +
                            + +
                            + +
                            +
                            + " /> +
                            +
                            + /> +
                            + +
                            + onclick="monitor_change()" /> +
                            + +
                            + + +
                            + . +
                            +
                            + /> +
                            + +
                            + 1) || (isset($pconfig['interval']) && ($pconfig['interval'] > $apinger_default['interval'])) || (isset($pconfig['down']) && !($pconfig['down'] == $apinger_default['down']))); ?> +
                            > + +
                            +
                            > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + +

                            +
                            + + + + +
                            +
                            + + + + +
                            +
                            + +
                            +

                            + +
                            +
                            + +
                            +
                            + + onclick="calculated_change(this, document.iform.avg_delay_samples)" /> + +


                            +
                            + + onclick="calculated_change(this, document.iform.avg_loss_samples)" /> + +


                            +
                            + + onclick="calculated_change(this, document.iform.avg_loss_delay_samples)" /> + +


                            +
                            +

                            +
                            +
                            +
                            +
                            + +
                            . +
                              + " onclick="enable_change()" /> + " onclick="window.location.href=''" /> + + + +
                            +
                            + + + + diff --git a/usr/local/www/system_groupmanager.php b/usr/local/www/system_groupmanager.php new file mode 100644 index 000000000..0ca9f5d69 --- /dev/null +++ b/usr/local/www/system_groupmanager.php @@ -0,0 +1,545 @@ +. + All rights reserved. + + Copyright (C) 2003-2005 Manuel Kasper . + 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. +*/ +/* + pfSense_MODULE: auth +*/ + +##|+PRIV +##|*IDENT=page-system-groupmanager +##|*NAME=System: Group manager page +##|*DESCR=Allow access to the 'System: Group manager' page. +##|*MATCH=system_groupmanager.php* +##|-PRIV + +require("guiconfig.inc"); + +$pgtitle = array(gettext("System"), gettext("Group manager")); + +if (!is_array($config['system']['group'])) + $config['system']['group'] = array(); + +$a_group = &$config['system']['group']; + +unset($id); +if (isset($_POST['groupid']) && is_numericint($_POST['groupid'])) + $id = $_POST['groupid']; + +$act = (isset($_POST['act']) ? $_POST['act'] : ''); + +if ($act == "delgroup") { + + if (!isset($id) || !isset($_POST['groupname']) || !isset($a_group[$id]) || ($_POST['groupname'] != $a_group[$id]['name'])) { + pfSenseHeader("system_groupmanager.php"); + exit; + } + + conf_mount_rw(); + local_group_del($a_group[$id]); + conf_mount_ro(); + $groupdeleted = $a_group[$id]['name']; + unset($a_group[$id]); + write_config(); + $savemsg = gettext("Group")." {$groupdeleted} ". + gettext("successfully deleted")."
                            "; +} + +if ($act == "delpriv") { + + if (!isset($id) || !isset($a_group[$id])) { + pfSenseHeader("system_groupmanager.php"); + exit; + } + + $privdeleted = $priv_list[$a_group[$id]['priv'][$_POST['privid']]]['name']; + unset($a_group[$id]['priv'][$_POST['privid']]); + + if (is_array($a_group[$id]['member'])) { + foreach ($a_group[$id]['member'] as $uid) { + $user = getUserEntryByUID($uid); + if ($user) + local_user_set($user); + } + } + + write_config(); + $act = "edit"; + $savemsg = gettext("Privilege")." {$privdeleted} ". + gettext("successfully deleted")."
                            "; +} + +if ($act == "edit") { + if (isset($id) && isset($a_group[$id])) { + $pconfig['name'] = $a_group[$id]['name']; + $pconfig['gid'] = $a_group[$id]['gid']; + $pconfig['gtype'] = $a_group[$id]['scope']; + $pconfig['description'] = $a_group[$id]['description']; + $pconfig['members'] = $a_group[$id]['member']; + $pconfig['priv'] = $a_group[$id]['priv']; + } +} + +if (isset($_POST['save'])) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "groupname"); + $reqdfieldsn = array(gettext("Group Name")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (preg_match("/[^a-zA-Z0-9\.\-_ ]/", $_POST['groupname'])) + $input_errors[] = gettext("The group name contains invalid characters."); + + if (strlen($_POST['groupname']) > 16) + $input_errors[] = gettext("The group name is longer than 16 characters."); + + if (!$input_errors && !(isset($id) && $a_group[$id])) { + /* make sure there are no dupes */ + foreach ($a_group as $group) { + if ($group['name'] == $_POST['groupname']) { + $input_errors[] = gettext("Another entry with the same group name already exists."); + break; + } + } + } + + if (!$input_errors) { + $group = array(); + if (isset($id) && $a_group[$id]) + $group = $a_group[$id]; + + $group['name'] = $_POST['groupname']; + $group['description'] = $_POST['description']; + + if (empty($_POST['members'])) + unset($group['member']); + else if ($group['gid'] != 1998) // all group + $group['member'] = $_POST['members']; + + if (isset($id) && $a_group[$id]) + $a_group[$id] = $group; + else { + $group['gid'] = $config['system']['nextgid']++; + $a_group[] = $group; + } + + conf_mount_rw(); + local_group_set($group); + conf_mount_ro(); + + /* Refresh users in this group since their privileges may have changed. */ + if (is_array($group['member'])) { + $a_user = &$config['system']['user']; + foreach ($a_user as & $user) { + if (in_array($user['uid'], $group['member'])) + local_user_set($user); + } + } + + write_config(); + + header("Location: system_groupmanager.php"); + exit; + } +} + +include("head.inc"); + +?> + +"> + + + + + + + + + + +
                            + +
                            +
                            + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + +
                            + /> +
                            + +
                            + +
                            + + + + + + +
                            +
                            +
                            + +
                            +
                            +
                            + + " alt="" width="17" height="17" border="0" /> + +

                            + + " alt="" width="17" height="17" border="0" /> + +
                            +
                            +
                            + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + + +
                            + + + + + '; + return confirm('');" + title="" /> +
                            + + add + + +
                            +
                              + " /> + " onclick="window.location.href='/system_groupmanager.php'" /> + + + + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + '; + document.getElementById('groupid').value=''; + document.iform2.submit();"> + + + + + + + +
                            + ';" + title="" /> +
                            +

                            + +

                            +
                            + + + + + +
                            + <?=gettext(" title="" border="0" height="16" width="16" /> + +   +
                            +
                            +   + + + + ';" + title="" /> +   + + '; + return confirm('');" + title="" /> + +
                            +
                            + +
                            +
                            + + + diff --git a/usr/local/www/system_groupmanager_addprivs.php b/usr/local/www/system_groupmanager_addprivs.php new file mode 100644 index 000000000..d7d192193 --- /dev/null +++ b/usr/local/www/system_groupmanager_addprivs.php @@ -0,0 +1,240 @@ + + +"> + + + + + + + + + + +
                            + +
                            +
                            +
                            + + + + + + + + + + + + + +
                            + + + +
                            + +
                            + +
                            + Select all + +
                            +
                            +
                            + +
                              + " /> + " onclick="history.back()" /> + + + +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/system_hasync.php b/usr/local/www/system_hasync.php new file mode 100755 index 000000000..17eff6255 --- /dev/null +++ b/usr/local/www/system_hasync.php @@ -0,0 +1,359 @@ +. + 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. +*/ +/* + pfSense_MODULE: system +*/ + +##|+PRIV +##|*IDENT=page-system-hasync +##|*NAME=System: High Availability Sync +##|*DESCR=Allow access to the 'System: High Availability Sync' page. +##|*MATCH=system_hasync.php* +##|-PRIV + +require("guiconfig.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_hasync.php'); + +if (!is_array($config['hasync'])) + $config['hasync'] = array(); + +$a_hasync = &$config['hasync']; + +$checkbox_names = array('pfsyncenabled', + 'synchronizeusers', + 'synchronizeauthservers', + 'synchronizecerts', + 'synchronizerules', + 'synchronizeschedules', + 'synchronizealiases', + 'synchronizenat', + 'synchronizeipsec', + 'synchronizeopenvpn', + 'synchronizedhcpd', + 'synchronizewol', + 'synchronizestaticroutes', + 'synchronizelb', + 'synchronizevirtualip', + 'synchronizetrafficshaper', + 'synchronizetrafficshaperlimiter', + 'synchronizetrafficshaperlayer7', + 'synchronizednsforwarder', + 'synchronizecaptiveportal'); + +if ($_POST) { + $pconfig = $_POST; + foreach ($checkbox_names as $name) { + $a_hasync[$name] = $pconfig[$name] ? $pconfig[$name] : false; + } + $a_hasync['pfsyncpeerip'] = $pconfig['pfsyncpeerip']; + $a_hasync['pfsyncinterface'] = $pconfig['pfsyncinterface']; + $a_hasync['synchronizetoip'] = $pconfig['synchronizetoip']; + $a_hasync['username'] = $pconfig['username']; + $a_hasync['password'] = $pconfig['password']; + write_config("Updated High Availability Sync configuration"); + interfaces_carp_setup(); + header("Location: system_hasync.php"); + exit(); +} + +foreach ($checkbox_names as $name) { + $pconfig[$name] = $a_hasync[$name]; +} +$pconfig['pfsyncpeerip'] = $a_hasync['pfsyncpeerip']; +$pconfig['pfsyncinterface'] = $a_hasync['pfsyncinterface']; +$pconfig['synchronizetoip'] = $a_hasync['synchronizetoip']; +$pconfig['username'] = $a_hasync['username']; +$pconfig['password'] = $a_hasync['password']; + +$ifaces = get_configured_interface_with_descr(); +$ifaces["lo0"] = "loopback"; + +$pgtitle = array(gettext("System"),gettext("High Availability Sync")); +$shortcut_section = "carp"; +include("head.inc"); +?> + + + +
                            + + + + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            State Synchronization Settings (pfsync)
                            Synchronize States + /> +
                            + pfsync transfers state insertion, update, and deletion messages between firewalls. Each firewall sends these messages out via multicast on a specified interface, using the PFSYNC protocol (IP Protocol 240). It also listens on that interface for similar messages from other firewalls, and imports them into the local state table.

                            This setting should be enabled on all members of a failover group.

                            NOTE: Clicking save will force a configuration sync if it is enabled! (see Configuration Synchronization Settings below)

                            +
                            Synchronize Interface + +
                            + If Synchronize States is enabled, it will utilize this interface for communication.
                            + NOTE: We recommend setting this to a interface other than LAN! A dedicated interface works the best.
                            + NOTE: You must define a IP on each machine participating in this failover group.
                            + NOTE: You must have an IP assigned to the interface on any participating sync nodes. +
                            pfsync Synchronize Peer IP + ' /> +
                            + Setting this option will force pfsync to synchronize its state table to this IP address. The default is directed multicast. +
                             
                            Configuration Synchronization Settings (XMLRPC Sync)
                            Synchronize Config to IP + ' /> +
                            + Enter the IP address of the firewall to which the selected configuration sections should be synchronized.
                            +
                            + NOTE: XMLRPC sync is currently only supported over connections using the same protocol and port as this system - make sure the remote system's port and protocol are set accordingly!
                            +
                            + NOTE: Do not use the Synchronize Config to IP and password option on backup cluster members! +
                            Remote System Username + ' /> +
                            + Enter the webConfigurator username of the system entered above for synchronizing your configuration.
                            +
                            + NOTE: Do not use the Synchronize Config to IP and username option on backup cluster members! +
                            Remote System Password + ' /> +
                            + Enter the webConfigurator password of the system entered above for synchronizing your configuration.
                            +
                            + NOTE: Do not use the Synchronize Config to IP and password option on backup cluster members! +
                            Synchronize Users and Groups + /> +
                            + When this option is enabled, this system will automatically sync the users and groups over to the other HA host when changes are made. +
                            Synchronize Auth Servers + /> +
                            + When this option is enabled, this system will automatically sync the authentication servers (e.g. LDAP, RADIUS) over to the other HA host when changes are made. +
                            Synchronize Certificates + /> +
                            + When this option is enabled, this system will automatically sync the Certificate Authorities, Certificates, and Certificate Revocation Lists over to the other HA host when changes are made. +
                            Synchronize rules + /> +
                            + When this option is enabled, this system will automatically sync the firewall rules to the other HA host when changes are made. +
                            Synchronize Firewall Schedules + /> +
                            + When this option is enabled, this system will automatically sync the firewall schedules to the other HA host when changes are made. +
                            Synchronize aliases + /> +
                            + When this option is enabled, this system will automatically sync the aliases over to the other HA host when changes are made. +
                            Synchronize NAT + /> +
                            + When this option is enabled, this system will automatically sync the NAT rules over to the other HA host when changes are made. +
                            Synchronize IPsec + /> +
                            + When this option is enabled, this system will automatically sync the IPsec configuration to the other HA host when changes are made. +
                            Synchronize OpenVPN + /> +
                            + When this option is enabled, this system will automatically sync the OpenVPN configuration to the other HA host when changes are made. Using this option implies "Synchronize Certificates" as they are required for OpenVPN. +
                            Synchronize DHCPD + /> +
                            + When this option is enabled, this system will automatically sync the DHCP Server settings over to the other HA host when changes are made. This only applies to DHCP for IPv4. +
                            Synchronize Wake on LAN + /> +
                            + When this option is enabled, this system will automatically sync the WoL configuration to the other HA host when changes are made. +
                            Synchronize Static Routes + /> +
                            + When this option is enabled, this system will automatically sync the Static Route configuration to the other HA host when changes are made. +
                            Synchronize Load Balancer + /> +
                            + When this option is enabled, this system will automatically sync the Load Balancer configuration to the other HA host when changes are made. +
                            Synchronize Virtual IPs + /> +
                            + When this option is enabled, this system will automatically sync the CARP Virtual IPs to the other HA host when changes are made. +
                            Synchronize traffic shaper(queues) + /> +
                            + When this option is enabled, this system will automatically sync the traffic shaper configuration for queues to the other HA host when changes are made. +
                            Synchronize traffic shaper(limiter) + /> +
                            + When this option is enabled, this system will automatically sync the traffic shaper configuration for limiters to the other HA host when changes are made. +
                            Synchronize traffic shaper(layer7) + /> +
                            + When this option is enabled, this system will automatically sync the traffic shaper configuration for layer7 to the other HA host when changes are made. +
                            Synchronize DNS Forwarder + /> +
                            + When this option is enabled, this system will automatically sync the DNS Forwarder configuration to the other HA host when changes are made. +
                            Synchronize Captive Portal + /> +
                            + When this option is enabled, this system will automatically sync the Captive Portal configuration to the other HA host when changes are made. +
                             
                              + + + " onclick="window.location.href=''" /> +
                            + +
                            +
                            +
                            + + + diff --git a/usr/local/www/system_routes.php b/usr/local/www/system_routes.php new file mode 100644 index 000000000..f500468bd --- /dev/null +++ b/usr/local/www/system_routes.php @@ -0,0 +1,373 @@ +. + 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-system-staticroutes +##|*NAME=System: Static Routes page +##|*DESCR=Allow access to the 'System: Static Routes' page. +##|*MATCH=system_routes.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); + +if (!is_array($config['staticroutes']['route'])) + $config['staticroutes']['route'] = array(); + +$a_routes = &$config['staticroutes']['route']; +$a_gateways = return_gateways_array(true, true, true); +$changedesc_prefix = gettext("Static Routes") . ": "; + +if ($_POST) { + + $pconfig = $_POST; + + if ($_POST['apply']) { + + $retval = 0; + + if (file_exists("{$g['tmp_path']}/.system_routes.apply")) { + $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.system_routes.apply")); + foreach ($toapplylist as $toapply) + mwexec("{$toapply}"); + + @unlink("{$g['tmp_path']}/.system_routes.apply"); + } + + $retval = system_routing_configure(); + $retval |= filter_configure(); + /* reconfigure our gateway monitor */ + setup_gateways_monitor(); + + $savemsg = get_std_save_message($retval); + if ($retval == 0) + clear_subsystem_dirty('staticroutes'); + } +} + +function delete_static_route($id) { + global $config, $a_routes, $changedesc_prefix; + + if (!isset($a_routes[$id])) + return; + + $targets = array(); + if (is_alias($a_routes[$id]['network'])) { + foreach (filter_expand_alias_array($a_routes[$id]['network']) as $tgt) { + if (is_ipaddrv4($tgt)) + $tgt .= "/32"; + else if (is_ipaddrv6($tgt)) + $tgt .= "/128"; + if (!is_subnet($tgt)) + continue; + $targets[] = $tgt; + } + } else { + $targets[] = $a_routes[$id]['network']; + } + + foreach ($targets as $tgt) { + $family = (is_subnetv6($tgt) ? "-inet6" : "-inet"); + mwexec("/sbin/route delete {$family} " . escapeshellarg($tgt)); + } + + unset($targets); +} + +if ($_GET['act'] == "del") { + if ($a_routes[$_GET['id']]) { + $changedesc = $changedesc_prefix . gettext("removed route to") . " " . $a_routes[$_GET['id']]['network']; + delete_static_route($_GET['id']); + unset($a_routes[$_GET['id']]); + write_config($changedesc); + header("Location: system_routes.php"); + exit; + } +} + +if (isset($_POST['del_x'])) { + /* delete selected routes */ + if (is_array($_POST['route']) && count($_POST['route'])) { + $changedesc = $changedesc_prefix . gettext("removed route to"); + foreach ($_POST['route'] as $routei) { + $changedesc .= " " . $a_routes[$routei]['network']; + delete_static_route($routei); + unset($a_routes[$routei]); + } + write_config($changedesc); + header("Location: system_routes.php"); + exit; + } + +} else if ($_GET['act'] == "toggle") { + if ($a_routes[$_GET['id']]) { + if(isset($a_routes[$_GET['id']]['disabled'])) { + unset($a_routes[$_GET['id']]['disabled']); + $changedesc = $changedesc_prefix . gettext("enabled route to") . " " . $a_routes[$id]['network']; + } else { + delete_static_route($_GET['id']); + $a_routes[$_GET['id']]['disabled'] = true; + $changedesc = $changedesc_prefix . gettext("disabled route to") . " " . $a_routes[$id]['network']; + } + + if (write_config($changedesc)) + mark_subsystem_dirty('staticroutes'); + header("Location: system_routes.php"); + exit; + } +} else { + /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */ + unset($movebtn); + foreach ($_POST as $pn => $pd) { + if (preg_match("/move_(\d+)_x/", $pn, $matches)) { + $movebtn = $matches[1]; + break; + } + } + /* move selected routes before this route */ + if (isset($movebtn) && is_array($_POST['route']) && count($_POST['route'])) { + $a_routes_new = array(); + + /* copy all routes < $movebtn and not selected */ + for ($i = 0; $i < $movebtn; $i++) { + if (!in_array($i, $_POST['route'])) + $a_routes_new[] = $a_routes[$i]; + } + + /* copy all selected routes */ + for ($i = 0; $i < count($a_routes); $i++) { + if ($i == $movebtn) + continue; + if (in_array($i, $_POST['route'])) + $a_routes_new[] = $a_routes[$i]; + } + + /* copy $movebtn route */ + if ($movebtn < count($a_routes)) + $a_routes_new[] = $a_routes[$movebtn]; + + /* copy all routes > $movebtn and not selected */ + for ($i = $movebtn+1; $i < count($a_routes); $i++) { + if (!in_array($i, $_POST['route'])) + $a_routes_new[] = $a_routes[$i]; + } + if (count($a_routes_new) > 0) + $a_routes = $a_routes_new; + + if (write_config()) + mark_subsystem_dirty('staticroutes'); + header("Location: system_routes.php"); + exit; + } +} + +$pgtitle = array(gettext("System"),gettext("Static Routes")); +$shortcut_section = "routing"; + +include("head.inc"); + +?> + + + +
                            + + +

                            +"));?>

                            + + + + + + + + + +
                            + +
                            +
                            + + + + + + + + + + + + + "; + $textse = ""; + $iconfn .= "_d"; + } else + $textss = $textse = ""; + ?> + + + + + + + + + + + + + +
                               + + + + + +
                            add
                            +
                            + + + + " alt="icon" /> + + + + + + + + + + + + +   + + + + + + + + + + +
                            + " + type="image" style="height:17;width:17;border:0" /> + + + " alt="edit" /> + +
                            + ')"> + " alt="delete" /> + + + + " width="17" height="17" border="0" alt="duplicate" /> + +
                            +
                            + + + + + + + + +
                            + + " border="0" alt="move" /> + + " /> + + + + " alt="add" /> + +
                            + + " border="0" alt="delete" /> + + " + onclick="return confirm('')" /> + +
                            +
                            +
                            +
                            +
                            +

                            + + + diff --git a/usr/local/www/system_routes_edit.php b/usr/local/www/system_routes_edit.php new file mode 100644 index 000000000..592ec5a7f --- /dev/null +++ b/usr/local/www/system_routes_edit.php @@ -0,0 +1,415 @@ +. + Copyright (C) 2010 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. +*/ +/* + pfSense_MODULE: routing +*/ + +##|+PRIV +##|*IDENT=page-system-staticroutes-editroute +##|*NAME=System: Static Routes: Edit route page +##|*DESCR=Allow access to the 'System: Static Routes: Edit route' page. +##|*MATCH=system_routes_edit.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("filter.inc"); +require_once("util.inc"); +require_once("gwlb.inc"); + +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_routes.php'); + +if (!is_array($config['staticroutes']['route'])) + $config['staticroutes']['route'] = array(); + +$a_routes = &$config['staticroutes']['route']; +$a_gateways = return_gateways_array(true, true); + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) + $id = $_GET['dup']; + +if (isset($id) && $a_routes[$id]) { + list($pconfig['network'],$pconfig['network_subnet']) = + explode('/', $a_routes[$id]['network']); + $pconfig['gateway'] = $a_routes[$id]['gateway']; + $pconfig['descr'] = $a_routes[$id]['descr']; + $pconfig['disabled'] = isset($a_routes[$id]['disabled']); +} + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) + unset($id); + +if ($_POST) { + + global $aliastable; + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "network network_subnet gateway"); + $reqdfieldsn = explode(",", + gettext("Destination network") . "," . + gettext("Destination network bit count") . "," . + gettext("Gateway")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (($_POST['network'] && !is_ipaddr($_POST['network']) && !is_alias($_POST['network']))) { + $input_errors[] = gettext("A valid IPv4 or IPv6 destination network must be specified."); + } + if (($_POST['network_subnet'] && !is_numeric($_POST['network_subnet']))) { + $input_errors[] = gettext("A valid destination network bit count must be specified."); + } + if (($_POST['gateway']) && is_ipaddr($_POST['network'])) { + if (!isset($a_gateways[$_POST['gateway']])) + $input_errors[] = gettext("A valid gateway must be specified."); + if(!validate_address_family($_POST['network'], lookup_gateway_ip_by_name($_POST['gateway']))) + $input_errors[] = gettext("The gateway '{$a_gateways[$_POST['gateway']]['gateway']}' is a different Address Family as network '{$_POST['network']}'."); + } + + /* check for overlaps */ + $current_targets = get_staticroutes(true); + $new_targets = array(); + if(is_ipaddrv6($_POST['network'])) { + $osn = gen_subnetv6($_POST['network'], $_POST['network_subnet']) . "/" . $_POST['network_subnet']; + $new_targets[] = $osn; + } + if (is_ipaddrv4($_POST['network'])) { + if($_POST['network_subnet'] > 32) + $input_errors[] = gettext("A IPv4 subnet can not be over 32 bits."); + else { + $osn = gen_subnet($_POST['network'], $_POST['network_subnet']) . "/" . $_POST['network_subnet']; + $new_targets[] = $osn; + } + } elseif (is_alias($_POST['network'])) { + $osn = $_POST['network']; + foreach (preg_split('/\s+/', $aliastable[$osn]) as $tgt) { + if (is_ipaddrv4($tgt)) + $tgt .= "/32"; + if (is_ipaddrv6($tgt)) + $tgt .= "/128"; + if (!is_subnet($tgt)) + continue; + if (!is_subnetv6($tgt)) + continue; + $new_targets[] = $tgt; + } + } + if (!isset($id)) + $id = count($a_routes); + $oroute = $a_routes[$id]; + $old_targets = array(); + if (!empty($oroute)) { + if (is_alias($oroute['network'])) { + foreach (filter_expand_alias_array($oroute['network']) as $tgt) { + if (is_ipaddrv4($tgt)) + $tgt .= "/32"; + else if (is_ipaddrv6($tgt)) + $tgt .= "/128"; + if (!is_subnet($tgt)) + continue; + $old_targets[] = $tgt; + } + } else { + $old_targets[] = $oroute['network']; + } + } + + $overlaps = array_intersect($current_targets, $new_targets); + $overlaps = array_diff($overlaps, $old_targets); + if (count($overlaps)) { + $input_errors[] = gettext("A route to these destination networks already exists") . ": " . implode(", ", $overlaps); + } + + if (is_array($config['interfaces'])) { + foreach ($config['interfaces'] as $if) { + if (is_ipaddrv4($_POST['network']) + && isset($if['ipaddr']) && isset($if['subnet']) + && is_ipaddrv4($if['ipaddr']) && is_numeric($if['subnet']) + && ($_POST['network_subnet'] == $if['subnet']) + && (gen_subnet($_POST['network'], $_POST['network_subnet']) == gen_subnet($if['ipaddr'], $if['subnet']))) + $input_errors[] = sprintf(gettext("This network conflicts with address configured on interface %s."), $if['descr']); + + else if (is_ipaddrv6($_POST['network']) + && isset($if['ipaddrv6']) && isset($if['subnetv6']) + && is_ipaddrv6($if['ipaddrv6']) && is_numeric($if['subnetv6']) + && ($_POST['network_subnet'] == $if['subnetv6']) + && (gen_subnetv6($_POST['network'], $_POST['network_subnet']) == gen_subnetv6($if['ipaddrv6'], $if['subnetv6']))) + $input_errors[] = sprintf(gettext("This network conflicts with address configured on interface %s."), $if['descr']); + } + } + + if (!$input_errors) { + $route = array(); + $route['network'] = $osn; + $route['gateway'] = $_POST['gateway']; + $route['descr'] = $_POST['descr']; + if ($_POST['disabled']) + $route['disabled'] = true; + else + unset($route['disabled']); + + if (file_exists("{$g['tmp_path']}/.system_routes.apply")) + $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.system_routes.apply")); + else + $toapplylist = array(); + $a_routes[$id] = $route; + + if (!empty($oroute)) { + $delete_targets = array_diff($old_targets, $new_targets); + if (count($delete_targets)) + foreach ($delete_targets as $dts) { + if(is_ipaddrv6($dts)) + $family = "-inet6"; + $toapplylist[] = "/sbin/route delete {$family} {$dts}"; + } + } + file_put_contents("{$g['tmp_path']}/.system_routes.apply", serialize($toapplylist)); + + mark_subsystem_dirty('staticroutes'); + + write_config(); + + header("Location: system_routes.php"); + exit; + } +} + +$pgtitle = array(gettext("System"),gettext("Static Routes"),gettext("Edit route")); +$shortcut_section = "routing"; +include("head.inc"); +?> + + + + + + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + +
                            + + / + +
                            +
                            +
                            +
                            + +
                            +
                            +
                            + + +
                            + /> +
                            + +
                            + +
                            +
                              + " /> + " onclick="window.location.href=''" /> + + + +
                            +
                            + + + + diff --git a/usr/local/www/system_usermanager.php b/usr/local/www/system_usermanager.php new file mode 100644 index 000000000..9dfd81450 --- /dev/null +++ b/usr/local/www/system_usermanager.php @@ -0,0 +1,968 @@ +. + All rights reserved. + + Copyright (C) 2003-2005 Manuel Kasper . + 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. +*/ +/* + pfSense_BUILDER_BINARIES: + pfSense_MODULE: auth +*/ + +##|+PRIV +##|*IDENT=page-system-usermanager +##|*NAME=System: User Manager page +##|*DESCR=Allow access to the 'System: User Manager' page. +##|*MATCH=system_usermanager.php* +##|-PRIV + +require("certs.inc"); +require("guiconfig.inc"); + + +// start admin user code +$pgtitle = array(gettext("System"),gettext("User Manager")); + +if (isset($_POST['userid']) && is_numericint($_POST['userid'])) + $id = $_POST['userid']; + +if (!isset($config['system']['user']) || !is_array($config['system']['user'])) + $config['system']['user'] = array(); + +$a_user = &$config['system']['user']; + +if (isset($_SERVER['HTTP_REFERER'])) + $referer = $_SERVER['HTTP_REFERER']; +else + $referer = '/system_usermanager.php'; + +if (isset($id) && $a_user[$id]) { + $pconfig['usernamefld'] = $a_user[$id]['name']; + $pconfig['descr'] = $a_user[$id]['descr']; + $pconfig['expires'] = $a_user[$id]['expires']; + $pconfig['groups'] = local_user_get_groups($a_user[$id]); + $pconfig['utype'] = $a_user[$id]['scope']; + $pconfig['uid'] = $a_user[$id]['uid']; + $pconfig['authorizedkeys'] = base64_decode($a_user[$id]['authorizedkeys']); + $pconfig['priv'] = $a_user[$id]['priv']; + $pconfig['ipsecpsk'] = $a_user[$id]['ipsecpsk']; + $pconfig['disabled'] = isset($a_user[$id]['disabled']); +} + +if ($_POST['act'] == "deluser") { + + if (!isset($_POST['username']) || !isset($a_user[$id]) || ($_POST['username'] != $a_user[$id]['name'])) { + pfSenseHeader("system_usermanager.php"); + exit; + } + + conf_mount_rw(); + local_user_del($a_user[$id]); + conf_mount_ro(); + $userdeleted = $a_user[$id]['name']; + unset($a_user[$id]); + write_config(); + $savemsg = gettext("User")." {$userdeleted} ". + gettext("successfully deleted")."
                            "; +} +else if ($_POST['act'] == "delpriv") { + + if (!$a_user[$id]) { + pfSenseHeader("system_usermanager.php"); + exit; + } + + $privdeleted = $priv_list[$a_user[$id]['priv'][$_POST['privid']]]['name']; + unset($a_user[$id]['priv'][$_POST['privid']]); + local_user_set($a_user[$id]); + write_config(); + $_POST['act'] = "edit"; + $savemsg = gettext("Privilege")." {$privdeleted} ". + gettext("successfully deleted")."
                            "; +} +else if ($_POST['act'] == "expcert") { + + if (!$a_user[$id]) { + pfSenseHeader("system_usermanager.php"); + exit; + } + + $cert =& lookup_cert($a_user[$id]['cert'][$_POST['certid']]); + + $exp_name = urlencode("{$a_user[$id]['name']}-{$cert['descr']}.crt"); + $exp_data = base64_decode($cert['crt']); + $exp_size = strlen($exp_data); + + header("Content-Type: application/octet-stream"); + header("Content-Disposition: attachment; filename={$exp_name}"); + header("Content-Length: $exp_size"); + echo $exp_data; + exit; +} +else if ($_POST['act'] == "expckey") { + + if (!$a_user[$id]) { + pfSenseHeader("system_usermanager.php"); + exit; + } + + $cert =& lookup_cert($a_user[$id]['cert'][$_POST['certid']]); + + $exp_name = urlencode("{$a_user[$id]['name']}-{$cert['descr']}.key"); + $exp_data = base64_decode($cert['prv']); + $exp_size = strlen($exp_data); + + header("Content-Type: application/octet-stream"); + header("Content-Disposition: attachment; filename={$exp_name}"); + header("Content-Length: $exp_size"); + echo $exp_data; + exit; +} +else if ($_POST['act'] == "delcert") { + + if (!$a_user[$id]) { + pfSenseHeader("system_usermanager.php"); + exit; + } + + $certdeleted = lookup_cert($a_user[$id]['cert'][$_POST['certid']]); + $certdeleted = $certdeleted['descr']; + unset($a_user[$id]['cert'][$_POST['certid']]); + write_config(); + $_POST['act'] = "edit"; + $savemsg = gettext("Certificate")." {$certdeleted} ". + gettext("association removed.")."
                            "; +} +else if ($_POST['act'] == "new") { + /* + * set this value cause the text field is read only + * and the user should not be able to mess with this + * setting. + */ + $pconfig['utype'] = "user"; + $pconfig['lifetime'] = 3650; +} + +if ($_POST['save']) { + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + if (isset($id) && ($a_user[$id])) { + $reqdfields = explode(" ", "usernamefld"); + $reqdfieldsn = array(gettext("Username")); + } else { + if (empty($_POST['name'])) { + $reqdfields = explode(" ", "usernamefld passwordfld1"); + $reqdfieldsn = array( + gettext("Username"), + gettext("Password")); + } else { + $reqdfields = explode(" ", "usernamefld passwordfld1 name caref keylen lifetime"); + $reqdfieldsn = array( + gettext("Username"), + gettext("Password"), + gettext("Descriptive name"), + gettext("Certificate authority"), + gettext("Key length"), + gettext("Lifetime")); + } + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['usernamefld'])) + $input_errors[] = gettext("The username contains invalid characters."); + + if (strlen($_POST['usernamefld']) > 16) + $input_errors[] = gettext("The username is longer than 16 characters."); + + if (($_POST['passwordfld1']) && ($_POST['passwordfld1'] != $_POST['passwordfld2'])) + $input_errors[] = gettext("The passwords do not match."); + + if (isset($id) && $a_user[$id]) + $oldusername = $a_user[$id]['name']; + else + $oldusername = ""; + /* make sure this user name is unique */ + if (!$input_errors) { + foreach ($a_user as $userent) { + if ($userent['name'] == $_POST['usernamefld'] && $oldusername != $_POST['usernamefld']) { + $input_errors[] = gettext("Another entry with the same username already exists."); + break; + } + } + } + /* also make sure it is not reserved */ + if (!$input_errors) { + $system_users = explode("\n", file_get_contents("/etc/passwd")); + foreach ($system_users as $s_user) { + $ent = explode(":", $s_user); + if ($ent[0] == $_POST['usernamefld'] && $oldusername != $_POST['usernamefld']) { + $input_errors[] = gettext("That username is reserved by the system."); + break; + } + } + } + + /* + * Check for a valid expirationdate if one is set at all (valid means, + * DateTime puts out a time stamp so any DateTime compatible time + * format may be used. to keep it simple for the enduser, we only + * claim to accept MM/DD/YYYY as inputs. Advanced users may use inputs + * like "+1 day", which will be converted to MM/DD/YYYY based on "now". + * Otherwhise such an entry would lead to an invalid expiration data. + */ + if ($_POST['expires']){ + try { + $expdate = new DateTime($_POST['expires']); + //convert from any DateTime compatible date to MM/DD/YYYY + $_POST['expires'] = $expdate->format("m/d/Y"); + } catch ( Exception $ex ) { + $input_errors[] = gettext("Invalid expiration date format; use MM/DD/YYYY instead."); + } + } + + if (!empty($_POST['name'])) { + $ca = lookup_ca($_POST['caref']); + if (!$ca) + $input_errors[] = gettext("Invalid internal Certificate Authority") . "\n"; + } + + /* if this is an AJAX caller then handle via JSON */ + if (isAjax() && is_array($input_errors)) { + input_errors2Ajax($input_errors); + exit; + } + + if (!$input_errors) { + conf_mount_rw(); + $userent = array(); + if (isset($id) && $a_user[$id]) + $userent = $a_user[$id]; + + isset($_POST['utype']) ? $userent['scope'] = $_POST['utype'] : $userent['scope'] = "system"; + + /* the user name was modified */ + if ($_POST['usernamefld'] <> $_POST['oldusername']) { + $_SERVER['REMOTE_USER'] = $_POST['usernamefld']; + local_user_del($userent); + } + + /* the user password was mofified */ + if ($_POST['passwordfld1']) + local_user_set_password($userent, $_POST['passwordfld1']); + + $userent['name'] = $_POST['usernamefld']; + $userent['descr'] = $_POST['descr']; + $userent['expires'] = $_POST['expires']; + $userent['authorizedkeys'] = base64_encode($_POST['authorizedkeys']); + $userent['ipsecpsk'] = $_POST['ipsecpsk']; + + if($_POST['disabled']) + $userent['disabled'] = true; + else + unset($userent['disabled']); + + if (isset($id) && $a_user[$id]) + $a_user[$id] = $userent; + else { + if (!empty($_POST['name'])) { + $cert = array(); + $cert['refid'] = uniqid(); + $userent['cert'] = array(); + + $cert['descr'] = $_POST['name']; + + $subject = cert_get_subject_array($ca['crt']); + + $dn = array( + 'countryName' => $subject[0]['v'], + 'stateOrProvinceName' => $subject[1]['v'], + 'localityName' => $subject[2]['v'], + 'organizationName' => $subject[3]['v'], + 'emailAddress' => $subject[4]['v'], + 'commonName' => $userent['name']); + + cert_create($cert, $_POST['caref'], $_POST['keylen'], + (int)$_POST['lifetime'], $dn); + + if (!is_array($config['cert'])) + $config['cert'] = array(); + $config['cert'][] = $cert; + $userent['cert'][] = $cert['refid']; + } + $userent['uid'] = $config['system']['nextuid']++; + /* Add the user to All Users group. */ + foreach ($config['system']['group'] as $gidx => $group) { + if ($group['name'] == "all") { + if (!is_array($config['system']['group'][$gidx]['member'])) + $config['system']['group'][$gidx]['member'] = array(); + $config['system']['group'][$gidx]['member'][] = $userent['uid']; + break; + } + } + + $a_user[] = $userent; + } + + local_user_set_groups($userent,$_POST['groups']); + local_user_set($userent); + write_config(); + + if(is_dir("/etc/inc/privhooks")) + run_plugins("/etc/inc/privhooks"); + + conf_mount_ro(); + + pfSenseHeader("system_usermanager.php"); + } +} + +$closehead = false; +include("head.inc"); +?> + + + + + + + +"> + + + + + + + + + + + +
                            + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0): + $i = 0; + foreach( $config['ca'] as $ca) { + if (!$ca['prv']) + continue; + $i++; + } +?> + + + + + + + 0): +?> + + + + + + > + + + + > + + + + + + + + + + + +
                            + + +
                            + /> +
                            + /> + +
                            + +
                            +   +
                            + /> +
                            + +
                            + +
                            +
                            + + + + + + +
                            +
                            +
                            + +
                            +
                            +
                            + + " alt="" width="17" height="17" border="0" /> + +

                            + + " alt="" width="17" height="17" border="0" /> + +
                            +
                            +
                            + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + + + +
                            + + + + + + '; + return confirm('');" + title="" /> + +
                            + + add + +
                            +
                            + + + + + + + + + + + + + + + + + +
                            + + + (Revoked) + + + + + ';" + title="" /> + ';" + title="" /> + '; + return confirm('')" + title="" /> +
                            + + add + +
                            +
                            + +
                            + +
                            + + +
                            + +
                            + +
                              + " /> + " onclick="window.location.href=''" /> + + + +
                            +
                            + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + '; + document.getElementById('userid').value=''; + document.iform2.submit();"> + + + + + + + + +
                            + ';" + title="" /> +
                            +

                            + +

                            + +

                            +
                            + + + + + +
                            + + <?=gettext(" title="" border="0" height="16" width="16" /> + + +
                            +
                              + +   + + ';" + title="" /> + +   + '; + return confirm('');" + title="" /> + +
                            +
                            + +
                            +
                            + + + diff --git a/usr/local/www/system_usermanager_addprivs.php b/usr/local/www/system_usermanager_addprivs.php new file mode 100644 index 000000000..1d0a9e640 --- /dev/null +++ b/usr/local/www/system_usermanager_addprivs.php @@ -0,0 +1,207 @@ + 'edit', 'userid' => $userid)); + + exit; + } + conf_mount_ro(); +} + +/* if ajax is calling, give them an update message */ +if(isAjax()) + print_info_box_np($savemsg); + +include("head.inc"); +?> + +"> + + + + + + + + + + +
                            + +
                            +
                            +
                            + + + + + + + + + + + + + +
                            + +
                            + +
                            + +
                              + " /> + " onclick="history.back()" /> + + + +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/system_usermanager_passwordmg.php b/usr/local/www/system_usermanager_passwordmg.php new file mode 100644 index 000000000..466f8f044 --- /dev/null +++ b/usr/local/www/system_usermanager_passwordmg.php @@ -0,0 +1,141 @@ + saving changes + $config['system']['user'][$userindex[$_SESSION['Username']]]['password'] = crypt(trim($_POST['passwordfld1'])); + local_user_set($config['system']['user'][$userindex[$_SESSION['Username']]]); + session_commit(); + + write_config(); + + $savemsg = gettext("Password successfully changed") . "
                            "; + } +} + +if (!session_id()) + session_start(); + +/* determine if user is not local to system */ +$islocal = false; +foreach($config['system']['user'] as $user) + if($user['name'] == $_SESSION['Username']) + $islocal = true; + +session_commit(); + +include("head.inc"); + +?> + +"> + + +
                            +
                            +
                            + + + + + + + + + + + + + + + + + +
                            's
                            + +
                            + +   +
                            + + + +
                              + " /> +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/system_usermanager_settings.php b/usr/local/www/system_usermanager_settings.php new file mode 100644 index 000000000..4192ea49b --- /dev/null +++ b/usr/local/www/system_usermanager_settings.php @@ -0,0 +1,176 @@ + + All rights reserved. + + Copyright (C) 2007 Bill Marquette + 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. +*/ +/* + pfSense_MODULE: auth +*/ + +##|+PRIV +##|*IDENT=page-system-usermanager-settings +##|*NAME=System: User Manager: settings page +##|*DESCR=Allow access to the 'System: User Manager: settings' page. +##|*MATCH=system_usermanager_settings.php* +##|-PRIV + +require("guiconfig.inc"); + +$pconfig['session_timeout'] = &$config['system']['webgui']['session_timeout']; +$pconfig['authmode'] = &$config['system']['webgui']['authmode']; +$pconfig['backend'] = &$config['system']['webgui']['backend']; + +// Page title for main admin +$pgtitle = array(gettext("System"),gettext("User manager settings")); + +$save_and_test = false; +if ($_POST) { + unset($input_errors); + $pconfig = $_POST; + + if(isset($_POST['session_timeout'])) { + $timeout = intval($_POST['session_timeout']); + if ($timeout != "" && (!is_numeric($timeout) || $timeout <= 0)) + $input_errors[] = gettext("Session timeout must be an integer value."); + } + + if (!$input_errors) { + if ($_POST['authmode'] != "local") { + $authsrv = auth_get_authserver($_POST['authmode']); + if ($_POST['savetest']) + if ($authsrv['type'] == "ldap") + $save_and_test = true; + else + $savemsg = gettext("The test was not performed because it is supported only for ldap based backends."); + } + + + if(isset($_POST['session_timeout']) && $_POST['session_timeout'] != "") + $config['system']['webgui']['session_timeout'] = intval($_POST['session_timeout']); + else + unset($config['system']['webgui']['session_timeout']); + + if($_POST['authmode']) + $config['system']['webgui']['authmode'] = $_POST['authmode']; + else + unset($config['system']['webgui']['authmode']); + + write_config(); + + } +} + +include("head.inc"); +?> + +"> + + + + +\n"; + echo "//\n"; + echo "\n"; + } +?> + + + + + + + + +
                            + +
                            +
                            +
                            + + + + + + + + + + + + + +
                            + +
                            +
                            +
                            +
                            + +
                              + " /> + " /> +
                            +
                            +
                            +
                            + + + diff --git a/usr/local/www/system_usermanager_settings_ldapacpicker.php b/usr/local/www/system_usermanager_settings_ldapacpicker.php new file mode 100644 index 000000000..28d765d0a --- /dev/null +++ b/usr/local/www/system_usermanager_settings_ldapacpicker.php @@ -0,0 +1,128 @@ + + 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. +*/ +/* + pfSense_MODULE: auth +*/ + +require("guiconfig.inc"); +require_once("auth.inc"); + +$ous = array(); + +if($_GET) { + $authcfg = array(); + $authcfg['ldap_port'] = $_GET['port']; + $authcfg['ldap_basedn'] = $_GET['basedn']; + $authcfg['host'] = $_GET['host']; + $authcfg['ldap_scope'] = $_GET['scope']; + $authcfg['ldap_binddn'] = $_GET['binddn']; + $authcfg['ldap_bindpw'] = $_GET['bindpw']; + $authcfg['ldap_urltype'] = $_GET['urltype']; + $authcfg['ldap_protver'] = $_GET['proto']; + $authcfg['ldap_authcn'] = explode(";", $_GET['authcn']); + $authcfg['ldap_caref'] = $_GET['cert']; + $ous = ldap_get_user_ous(true, $authcfg); +} + +?> + + + + + + + +
                            + +

                            + + + +

                            + + + + +
                            + +\n"; + } + } +?> +
                            {$ou}
                            +
                            + +

                            + + + +

                            + + diff --git a/usr/local/www/system_usermanager_settings_test.php b/usr/local/www/system_usermanager_settings_test.php new file mode 100755 index 000000000..562b1e2b6 --- /dev/null +++ b/usr/local/www/system_usermanager_settings_test.php @@ -0,0 +1,123 @@ + + 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. +*/ +/* + pfSense_MODULE: auth +*/ + +##|+PRIV +##|*IDENT=page-system-usermanager-settings-testldap +##|*NAME=System: User Manager: Settings: Test LDAP page +##|*DESCR=Allow access to the 'System: User Manager: Settings: Test LDAP' page. +##|*MATCH=system_usermanager_settings_test.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("auth.inc"); + +$authserver = $_GET['authserver']; +$authcfg = auth_get_authserver($authserver); + +?> + + + + + + +
                            + +"); +} else { + echo sprintf(gettext("Testing %s LDAP settings... One moment please..."), $g['product_name']) . "

                            "; + + echo ""; + + echo ""; + + echo ""; + + echo ""; + echo "
                            " . gettext("Attempting connection to") . " " . $ldapserver . ""; + if(ldap_test_connection($authcfg)) { + echo "OK
                            " . gettext("Attempting bind to") . " " . $ldapserver . ""; + if(ldap_test_bind($authcfg)) { + echo "OK
                            " . gettext("Attempting to fetch Organizational Units from") . " " . $ldapserver . ""; + $ous = ldap_get_user_ous(true, $authcfg); + if(count($ous)>1) { + echo "OK
                            "; + if(is_array($ous)) { + echo gettext("Organization units found") . ":

                            "; + echo ""; + foreach($ous as $ou) { + echo ""; + } + } + } else + echo ""; + + echo "
                            " . $ou . "
                            " . gettext("failed") . "

                            "; + + } else { + echo "" . gettext("failed") . ""; + echo "

                            "; + } + } else { + echo "" . gettext("failed") . ""; + echo "

                            "; + } +} + +?> +

                            + " onClick='Javascript:window.close();'> + + + + diff --git a/usr/local/www/themes/_corporate/all.css b/usr/local/www/themes/_corporate/all.css new file mode 100644 index 000000000..fb5f404b3 --- /dev/null +++ b/usr/local/www/themes/_corporate/all.css @@ -0,0 +1,1208 @@ +/* + * "corporate" theme by Guillaume Belanger + * based on the original "metallic" theme */ + + +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; +} + +.nowrap { white-space: nowrap; } + +.addgatewaybox { + background-color: #990000; + border-style: none none none none; + width: 225px; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 250px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 11px; + font-family: "Trebuchet MS", sans-serif; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + background-color: #333333; + margin: 5px auto; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 815px; + margin: 5px auto; +} + +#header { + background: url('images/header.gif') no-repeat; + background-position: 4px; + height: 102px; + width: 808px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.gif') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 28px; + left: 230px; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: bold; + font-family: Verdana; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 4px; + margin-top: 0px; + margin-left: 5px; + padding-top: 0px; + width: 800px; + background: url('images/horizontal.gif') repeat-y; +} + +#left { + width: 800px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.gif') no-repeat; + top: -18px; + left: 7px; + width: 800px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 7px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + /* background: url('images/menu.gif') no-repeat; */ + /* width: 693px; */ + position: relative; + top: -24px; + left: -2px; + width: 800px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + width: 7.75em; + height: 28px; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + background-color: #202020; + /* background: url("images/menu_footer.gif") no-repeat; */ + background-position: bottom; + + padding: 0em 0em 0em 0; + margin-top: 4px; + padding-top: 0em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #303030; + border-top: 0px; + width: 8.9em; + height: 1.6em; + line-height: 1.6em; + background: url('images/metal_bgr.gif') repeat-x; + color: #FFF; +} +#navigation ul li ul li:hover { + background: url('images/metal_bgr_red.gif') repeat-x; +} + +#navigation li li a { + display: block; + padding-left: 10px; + padding-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +#graph { + position: relative; + z-index: 1; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/metallic/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/metallic/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/metallic/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/metallic/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/metallic/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/metallic/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/metallic/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/metallic/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/metallic/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/metallic/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/metallic/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/metallic/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/metallic/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/metallic/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/metallic/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/metallic/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/metallic/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/metallic/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #FFFFFF; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #DDDDDD; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 6px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + +#login { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 340px; +} + +#login h1 { + background: url(/themes/metallic/images/misc/logon.png) no-repeat top left; + margin-top: 0; + display: block; + text-indent: -1000px; + height: 50px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login #username, #password, #password2 { + font-size: small; + width: 60%; + padding-left: 19px; + padding: 3px; + margin: 0em; +} + +#login #submit { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +/* Widget CSS */ +.widgetsubheader { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #B1B1B1; + padding-right: 6px; + padding-left: 6px; + color: #000000; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.widgetheader { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.widgetdiv{ + margin:5px; + padding: 5px; + background:#CCCCCC; +} +.widgetconfigdiv{ + background:#BBBBBB; + font-size: 11px; + color: #000000; + padding-right: 5px; + padding-left: 5px; + padding-top: 5px; + padding-bottom: 5px; +} + +div#log div.log-entry-mini { + clear: both; +} + +div#log div.log-entry-mini span { + padding: 2px 2px 2px 2px; + padding-left: 6px; +} + +div#log span.log-action-mini-header, +div#log span.log-time-mini-header, +div#log span.log-interface-mini-header, +div#log span.log-source-mini-header, +div#log span.log-destination-mini-header, +div#log span.log-protocol-mini-header { + float: left; + text-align: left; + background-color: #FFFFFF; + font-size: 12px; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-action-mini, +div#log span.log-time-mini, +div#log span.log-interface-mini, +div#log span.log-source-mini, +div#log span.log-destination-mini, +div#log span.log-protocol-mini { + float: left; + text-align: left; + background-color: #FFFFFF; + font-size: 11px; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-action-mini, +div#log span.log-action-mini-header { + width: 6%; +} + +div#log span.log-time-mini, +div#log span.log-time-mini-header { + width: 19%; +} + +div#log span.log-interface-mini, +div#log span.log-interface-mini-header { + width: 8%; +} + +div#log span.log-source-mini, +div#log span.log-source-mini-header { + width: 23%; +} + +div#log span.log-destination-mini, +div#log span.log-destination-mini-header { + width: 31%; +} + +div#log span.log-protocol-mini, +div#log span.log-protocol-mini-header { + width: 8%; + border-right: 1px solid #999; +} + +/*thermal_sensors widget styles*/ + +.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; } +.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; } +.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px; + background-color: LimeGreen; + border-top-width: 2px; border-top-color: Lime; + border-left-width: 0px; + border-right-width: 0px; + border-bottom-width: 2px; border-bottom-color: Green; +} +.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; } +.thermalSensorText { float: left; height: 20px; top: 3px; } +.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;} + +.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; } +.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; } + +.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; } + +.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; } + +/* widget textarea styles - full width */ +.textarea_widget { + width: 100%; + resize:vertical; + -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */ + -moz-box-sizing: border-box; /* Firefox, other Gecko */ + box-sizing: border-box; /* IE 8+ */ +} diff --git a/usr/local/www/themes/_corporate/bottom-loader.js b/usr/local/www/themes/_corporate/bottom-loader.js new file mode 100644 index 000000000..a21f775a4 --- /dev/null +++ b/usr/local/www/themes/_corporate/bottom-loader.js @@ -0,0 +1,10 @@ +// diff --git a/usr/local/www/themes/_corporate/graphlink.css b/usr/local/www/themes/_corporate/graphlink.css new file mode 100644 index 000000000..5bb1b4c7d --- /dev/null +++ b/usr/local/www/themes/_corporate/graphlink.css @@ -0,0 +1,43 @@ +/******************************************************************************* + $Id$ + + This file is part of the GraphLink software. + GraphLink is distributed under the MIT License. + Copyright (C) 2005-2006 Max Khitrov +*******************************************************************************/ + +/** + * Defines the background image used for the graph, as well as the actual data + * locations. + * Use padding-left and padding-top to align the data area correctly with your + * background image. + * Width and height should same as the dimensions of the image, minus the + * padding values in both directions. + */ +div.GraphLink { + width: 212px; + height: 60px; + padding-left: 38px; + padding-top: 10px; + background-image: url(/themes/corporate/images/misc/graph.png); + overflow: hidden; +} + +/** + * Defines the data display area. Modify to fit your background image. + */ +div.GraphLinkData { + width: 200px; + height: 50px; + overflow: hidden; +} + +/** + * Defines the look of one bar. Nothing to change here other than the color. + */ +span.GraphLinkBar { + background-color: #990000; + height: 100%; + float: left; + overflow: hidden; +} diff --git a/usr/local/www/themes/_corporate/images/alert_bgr.gif b/usr/local/www/themes/_corporate/images/alert_bgr.gif new file mode 100755 index 0000000000000000000000000000000000000000..65498f1b0ed68cd123f4b42e1bc78c6c3ec134c0 GIT binary patch literal 3415 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 Y`Iw*in!ov+-}#>Z`Jf;Aq8|bPJE>90jQ{`u literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/header.gif b/usr/local/www/themes/_corporate/images/header.gif new file mode 100755 index 0000000000000000000000000000000000000000..aebc5111b29b84a1e0941a856802f5d061e983ed GIT binary patch literal 16536 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 P>a9NNpB~%`5&{4_na0fF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/help.png b/usr/local/www/themes/_corporate/images/help.png new file mode 100755 index 0000000000000000000000000000000000000000..1de05e3efa0ffeb34091a3e20cfa5a2726799fee GIT binary patch literal 324 zcmV-K0lWT*P)gwo{CjXz=^MCKw|L@-5)w6!d|3It%-o_{>*!KVSwb=Ch{`J2u z7hN?nYAgHy_b;j*pkv_D`7!^WKY>cmpM(%!G6PA^i>LqnEf8`*4TpDw7?WE;DylOP zj)eFPq-WVI6ia{rNW%3aTeW#5Ob;%fB>VmU{PBN#IYOkn8m0#rte6^rRsl5tLkwB4 zsSu{8r376=xFblz>ILZH6PsXqR?Wv^2@n9?h9j7{pjfE*4EbT?d{Rg z(bCe=?Ck8`-rnTo+7njs?*cc?(Xibt*!k0{Kdt^+}zx? zwYA8|$fc#F<>lq#;^O!B_vz{B@$vDUot^&v{`2$mzrVl#|Nk>HGXMYp0000000000 z00000A^8LW0024wEC2ui03ZVf000K*K;4e8KolB+Lt+pC7;@04bV{vSuh^`1%k6r< z;IMd1E}PHjw0g~MyWjA*d`@Q@0I~sU=FnIWCj>h>ggX@!6Auy)3Kk9w7yxyXl$Dm3 zn3eGcxMQaB1VoNN%}{zqQ#3CGin57W5a+FF*p!d@j--%5H(;00RTH3 C^Y`Nb literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/favicon.ico b/usr/local/www/themes/_corporate/images/icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3440bf24d471f1210668aea9634a4c4571a8874a GIT binary patch literal 1406 zcmeH{uTMfz6vsaxzaBgg6a-Ouh#SMr5l9qfU1$um$ zjmKm9{XWCtkXEZjAP}HjE>o-3C>D#v<8hkJCWS%)MNvp35)1|dDwPL1oeueYo^JP< zZ1#?JdxEB2lgs5urBXy95$X9vsdP`H@klaxLnd>}bULM4t?u3+wYnIxPh!F0)-VD4Wb{60%sa=`{Y>*D-u(@Y#a*H^J*1qcNOI-KG33 Ub|^T7E5XGPj7;!y2KxBE0oZy=+W-In literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_3g.gif b/usr/local/www/themes/_corporate/images/icons/icon_3g.gif new file mode 100755 index 0000000000000000000000000000000000000000..46ccb92dacdc634220fef86f63bd89cb3c62fc34 GIT binary patch literal 200 zcmZ?wbhEHbmww(Odb(IiwjflYTL<01Y0{*go}M*p)@<6eY3I(J_4V~RIXP`@ZAC>zm6etI_wQe} zY}x$z^N$@nHgo38w6wG{XU;H?0u+C;FfuR*FzA3Zf$U^pbyZO5OUZQNJ#4b*kcGFf zO~*w6w!bQU2W+||88=xtu<$D@IhI%`tUJCap@BiD|4^brsf`TtfyeI2qH-C_k}R@# LM3x6}FjxZsL>W54 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_advanced.gif b/usr/local/www/themes/_corporate/images/icons/icon_advanced.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ede1fffbed345efa81f61c487e67f6cde3abaa4 GIT binary patch literal 306 zcmZ?wbhEHb4v8_qi()i_3oC- zt@C2%|GfKiUgZ2a!E^ur|3AZU=H0t@3^W6ZKUo+V7!(QQw=e2S}4o(Omb$8#jNy%&p9pPGu4?^c^25UFJJWeNr1yl3yzJfs&?{{ bLP??F0SwGO0&NWZ-aKq6(rlfIjttfScsp%? literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gif b/usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gif new file mode 100644 index 0000000000000000000000000000000000000000..b23354909ff9b2a96c45b9d699661de74b8952dd GIT binary patch literal 314 zcmZ?wbhEHbso^E)0&G_0m!E^ur|3AZU=H0t@3^W6ZKUo+V7!(<|F?a0&yh8mGD--BE?8dxe6 kIFl4OLcxxNLAvzz-VP|)Zf0h1qtr^t7R^YuWUj^_ zY}(!i0Rt5qV2_k2ngJsa@Ofv~dC`qfimt`i2IWy$$HI6l!ibC4%lUC~&Ua4ooo7ke zfx>-nDWSv`-~-+VP6FqEHsCn$HgFgi0KNe(0p9@^fNJ0aVAyE15=0^JF7O*r&oE=a z2=FH`3Cw3^PD`bm9JfT%e*>#-_pC~F7g#bH7Y&9Lr*ny-rX`YfuQ#StTGZ-adHyWJ zd_)kdJRjHTmQ1E~pKmn~SoL@w*46zRi!IXhLU#5&i)Gp2i0k#WBpC!^3dK0fKJxqL z($g1mbC=BKIgMr}CFOBAyd8;L6M0>(hYbzOcKaQkUo0+;7Zf~6B-Wam)>>M+S@yow zdatx}*=CF9=g;riGb58t1C@XYZ~+y-DTe6;hJaq+$K>Q+wAwu2rcO7SnR!hrUE#P1 zn&u>ukkL49Fa%Yq8Mk|aqV71IKZq0XdV@+OrB;V|{!t`yx2|r=;h1Y_@ss2qJU`=d zZ6^|oet$rrm@u196GVdNgDkt?^L;M%>&~(`C zzFt-JZCTk@85vjg`d+QJ1L%@UEkK;(vVam`%;_AVs3NsG>h*?re$wL^HktnN`!^Gb zDW8ubh+&$(Zns~M$u6d(EO6Xqg<>TV>DTE#A<4en+)#aek47`k^EVuh2jTEWEcOn= ze9f}6fk2e!J6To`g{Fn(=KFx)c1J~BRrMdREgEHILPmy=oGj?|0!0a0t)SDbiFi_y zz;S}XAgEM=(I_~bw|QRhdS6qkpNLVVk|#;Q<2gYPf>@+TA>M$9MDw|1Ajc~^&dyJi$fHooYYq(h$>T}N zya#(fZlZESZy3%b>}fxpPkH9$n$4#xu2`-6^UDj?kNDn{RZ3vbj^FYix&OAS_2|&C z8>U9@KmHSa%ol}ICtqJ~r`lf1B8=wN_QA$0`wz-?q5NRYv4LlI1*eRX9OaQ5uC(>{ zfuk3z&nKm&M*D2Cv=^l2)Q+sfy6+Pk@y1}@huuZ%MO|BSkjtJw)LhtB{`08f#aAys z?&#DpIU4WA-nMg+O4+CTo*R5Bc(v_I?2?}{ruBD)+G|hu^q#G)xM|Bwm81B7mNUC? literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alias_host.gif b/usr/local/www/themes/_corporate/images/icons/icon_alias_host.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad43e17992a15f9e9303105f7a5ac96acd2abe68 GIT binary patch literal 348 zcmV-i0i*s$Nk%w1VJH9(0K^{v?%k`+n+E*( z@c#b%`0?G{yHxSwx6Yjj^ytO<^yKp8z4-Cl`t|4V;k4}9qVC+N(4iIK!)fv4yX)4O z;KFAA|NqRH0RR90A^8LW0018VEC2ui04M+t000Hq;3tk`X`X1gTp8!Sa4gR-P>qeJ z?|kq7K*0yHa{-S$PEWZ@C{W86A=mC-U8h_2wFM;3m+B_==DDs5F->78~y(O00RpACqaRT5CA((AEN01 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alias_net.gif b/usr/local/www/themes/_corporate/images/icons/icon_alias_net.gif new file mode 100644 index 0000000000000000000000000000000000000000..abd1b8b34c3a7f2a9d7cd3e6c6efd7593f6aad77 GIT binary patch literal 331 zcmV-R0kr-{Nk%w1VJH9(0K^{vySwqs%=IE7({^^`Mn>ADrR|7_=kD(O($e;;tM1+1 z`0()j{QUj~2F)HG(xRg5#>Vt%Y2m1-?!CS8V!YA^8LW0018VEC2ui04M+t000HZ;3tk`X`X1wND=40a4gU8aE*kg z?|kq7K*I+DEcOIB9_QCs6pTPXLU%~+41gcv+2arhgB@7l;dB&)O+d#9>pIrm*4L@m zJsZ0rP~RNF00(?zQa*D%cYGda9*P}V9aI4X9ApELJ%>DZ0FicgkBd42d>u=dhFqJG zor{qM28#d!9fV;4Sq2BGbgYqPeI5rL2@0{mwT&BwQ&2?%yL4nd3KR{_MFC4Z39&s6 d3?B~|*yTSK86y=M8}07z@bU8R6AL0C06T*ln8yGB literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alias_port.gif b/usr/local/www/themes/_corporate/images/icons/icon_alias_port.gif new file mode 100644 index 0000000000000000000000000000000000000000..4acf2aa106f42f5f6757621d1ba4e8aa578c34f2 GIT binary patch literal 346 zcmV-g0j2&&Nk%w1VJH9(0K^{vMA}59?WNN8(%tyo%=OIf{O+pms)*-^@ci%x%?JGc z{2tOCw(+)d<8r<7z2^Gn70?w_-BiQ#!`t}Vis*{2@2Won0Xmxh9Zg_wqxm^udq z9abKmI*2=zdK-5bwi%Y87zS1Vau}jz9 z{szs>i09|q`1r%~^Qi9btncr)@$nkb(X{aJqU`ME`ud9K=yK!Z3C_+`-QC9Y^qK4H zX5ire|Nj8Y%>V!YA^8LW0018VEC2ui04M+t000HI;3tk`X`X1QJY4I(a4f@DG-h6| z?|kq7mXGE~Y~>0D9_P1642Zu@Cnrem4uK!x*)tll2A9;cIphLMPhslY`o@51TsjtH zI|l)~ljga5aB>}YQ+pc)SsnlYZCpHoihG4Q90(l(1&WM4e~(jokvU@>nV24f9tRJN zJ`7TzaiUWQ3}jMfr&fLtP*4E^U2HuK6$`yY2YopRx;q659~2nJ)I<^vBNY=H+}+;a M;Nji?0wN&*J2GgRdjJ3c literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gif new file mode 100644 index 0000000000000000000000000000000000000000..55c1c4ad287a2dfd16a569d945202b3c4b42c0c2 GIT binary patch literal 1111 zcmdUu>rYw-0L3pA1(i9ht#QG2npqcDyJpTAXR~Q7vt=<;>#~tqgW4BnGb3xWv`!-! zI_WBNwhhWto&`EUpi#qk+Fjj-+zSGk2=zq;MMYF%mL+YN{WErQKK#C&{63uXgqrdX zTQh-7;2#^{bUGuENGuj>XlU5m+Y1B&7K=qJ78?wP_4RcKn(65w)z#HSqfwvF$6~QW zBGJ;)5}8bv$z<*A?cs1Z6bgYLxVpNUk&)qYxwu^J_V)J1#>VF6K{t&?6NR;v|{$HTCrySrN?5^}jce!o8+kC&Ifqfp2L0ngajSX&$6*)#v}@Q}@Bo1KO9 zdOa44IoN?=yV-2!^ZCJGkj-WjiPe7p{IO%%Q&W?>ySwA#<2P-D-+ zDnUs}iAKY*T8#?}3qGH{urL>g!$l%%48~OmGTgrX)srWWi;9Zo=H@&e7n9j;w}Vot zl`^j3Zwz;`^Vq#)+bd*MGq0ugf z!_Nl?2Sp2kSTDC~E;;hCAIeSOzdDwWp@ClYZK3NPD3!{AfdQpbJ~Z_3=FRr5u1gT~7YsuX1Wr%?u2w5MJ3F1ur$i!ga?*guzfY&P zwYIh#KaP`1r7#TF*4FZPOb&-VKR+)N3OO8($Kzozs4|&gc6MrbxSK$@U@{r?dfm>> zj=`WE85t=nE9>a!006+@a3m6m1Ni?Y|6e2m0Bk_ zcI9vyK9ibSrS1I#kzPP9sHhj;P5$y*^wAuI@GLbyrJ~D5Nd^(P44^*8CO?#d8pR_S z=c=mE$dBI5$!jE3(@9@fq1WFiL}1d?#ccM<)z1;7Ks9>hmpt0zdU-*s{Xt|JcrB{} zyMxWM^)+2eS;@RY{yQrLjk)#bo#)`&g|yPhq4))a@?uiii)BFZygv9^y^8YR_|KGj)FDm+f`}Y6R(*IYl{?Ehnf6=1< z{QUpdt^2Q}^j}c$|IC^Hjg9}OrTss1=06ZH5C)1rS-^^PKqSac23ETTOaUpLs%JP{ zQ&|ETSp|iqeUErsUNW(@>s)-~vu}%9*8vTWdp%n(DcpGB%eIt#(su=24`+jy4H_z* JjLsYk)&QRYKx+U1 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif b/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif new file mode 100755 index 0000000000000000000000000000000000000000..eb726d6da80aaca27538a0fd3e527ed4c3b883d7 GIT binary patch literal 192 zcmZ?wbhEHbJ@BV-E z=>N%+|L4#Dzi{FIwQK($I`n_Rg8#2y|NsA=0jPK8OdyFLDE?#tE6@RvAUhdYZ4(3o zQalxpys&xtIDq*ngV1k}1Ky4kRXF!?EIIPovqkOHA&Z$a@_f`^3gkpBWqP>vqyn#} PZR^I0S0RT4;WBg literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_block_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_block_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..e6345fe89beacaed80781c84b11e5b223bbdb5a0 GIT binary patch literal 193 zcmZ?wbhEHb;IA^|L4v7KY#xJYuEm-UHkvgq5lgO{D1xWKM>5E$v_Aw{$v3w(E*VlI~iE*7AOUz zcp4u6;h_2@faNQLFt_gkZ`VsEmUf;?j(qlQQ9E_O!sA}g)*yw57rsoY?311=n0h!H PWKMKY@nmu4V6X-NI3G~K literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_cablenic.gif b/usr/local/www/themes/_corporate/images/icons/icon_cablenic.gif new file mode 100755 index 0000000000000000000000000000000000000000..a071c66d707efafecc89cedd418a71a5e3e558bc GIT binary patch literal 91 zcmZ?wbhEHb9$6Tjb>ACnqNu7#P{v+57wZs;a8U$jH09yHZk8i;IhWeSP8K z;o92TMMXu!!^37~X4cl$?(XhtYHDI)Vmv%Nqobn^4i3D$ytcNspP!#_aBv|ZA+xiy z>+9>awYBo{^1Z#iQBhH@uCCqP-KnXm{r&xScX!dz(R6flN=iy&V`GhtjnL50US3`( zC@7ein00k^0|NtqfPnS&^@N0k?d|P&cz9`PX;f5HFfcGCCMG*OJL&1^;^N{-MV>$aJHk#FI{*Lx literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_cal_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_cal_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..1647e2f4f408254893f512f68e583fa0d1f4b944 GIT binary patch literal 1060 zcmZ?wbhEHb6krfw_`Z)pkb~p#2YU;Od-(I|U;mOC>Xm2mX z$?50iwWX$ppPxTUUw@UKUr9;HDu4endHE7q*`=PI8_UWHva&4s_%_AG9jd7*S5YZd zQ%jSUKDdAX>Lp9M^z^3M+OAx*XiY#sZdTT+#fw+?_{d93_Zk~tUA|mIM8wzEcbb)z z6VNVQ-C7luTt&qdfq_j129+8b^Sr!nZr!>%Jbb!?LqI@4l7Ydoj*gA1RxNgS@6gei zVqvj!=gw+*`PZ*s@7ccn=FOWY_w4C%bbS8&`TO_pmwI`1Sy-gW$@SUWZ%#^D7#O&& zsL0FBZFO4OlDTtv*x1s{%*t$R)<#A)sj1moT1JG1zJ2?4ri;sRA0JIk&1FeRB3xWc z!o&NFjqB{}9_-&AtFIp*C>SIx?Ca^d+}k@sPj8u**T(YlEw#0WYHK??J9qW;%yn~{ z4-CMR6b=p!AAbINJG*vc<6E0IPqni8`0-=0y85)<-VLFlRl2%)YHHJce6FuvefRF& zL@}}3w{IIsNSvQJb9sFH&!0c%hJ-vlb?RVs_3Dg_kdTl_Ev*AHXV%!+HLI)l85z~u z*|q5E{`vD~x{XbQpx~jpx*KcPGBPq|XJ_{q7+hboX0eBdzq)$7iOIu<4;Mv725V~0 zw6#6l(BP_|5F#eFF+P5>on4rO#I@C{E7aAWK7D$A&YTs&!Fvh|l>`JfRaC55x^%LI zMU|W!A3OVr6DMM&r8kt6tn~E_@bOvV;n8boxM$BE1_p-z|NjHYp$-&(vM@3*>|@XY zc?6Uv7&!hj)N;yrY*0AJ>=wovA@M+1frW+l>L-O1_ci>gE-n{~8QT>a?K>2NlAm8% zX1_8>;L?N6?)9FzStdoB*``TxZ=X|g(aHIgfQ?FoX~37IoRclsc#f+9>?_}#d;xOe1t(%sVa_4V}j z^k(2@?)>iFg2{r2=ZGTHBG=*9`TO~;t*xrRs?5yH z|Ns90%m8L)W&i*HA^8LW0018VEC2ui04M+t000Hu;Ma{L`JHI0uIyPp$5Xa+?T!K4yR^l zX=ZF`32!46X-Xpyk3V>6duSdF99e7|8CkM&BocIWk$@SN9=;xKY*9f*$PyF^xXh;; yKLZ>F(rf_LLMdSg90~{+90;XE^z`as7ipwokoEpW_m&B?L6C*OWd#d{0028uv7Gt< literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_carp_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_carp_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..2ba8db211f22533f43cef096f7a553b38f73f91f GIT binary patch literal 357 zcmV-r0h<0tNk%w1VJH9(0K^{v@$vEQ?(W*!+ScpV;Nalr=jZVE@c8)n%H_)Z{QRr< ztJ43{^#An2;KH=pw9Nm^pVFV*|K02B>-hZms^zNF)6@0!^{V`;`TzOX|JUT?Z_0z@TvG5p@Qf!7(}V0W}(+01Ew8s083>!XY(Co6Uvtk?IORfNt&4taZPUt^^J% z%D(_7aY%E15*$#19(qwYT^$exUmXl#8+aajdVWv`98-jPStAG>1_%ip2yzi&cmf;} zs%UC!Xl`o>ah_{RBM*>xdTV`Z9u^!~ZUGuuwR9v9kdZ$+mw&*Me{NAhM#>!u47$#$ z0Y3yB1=DT-)oDlRk|c*ll86%+&x+)(hKjSv7k DsiLkc literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_chain.png b/usr/local/www/themes/_corporate/images/icons/icon_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..12db07ad024ff5e6c6d29c717e1440a425d24151 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1SGfcUswyIGCW-zLn>}1|M0g;Sg>2}W0Wz6 z)3jqEjxQL!G;+T*D(q0&p)kvgEyYqndL7425tCe=6H*Eck(!%0Vx&X(XLVonalGud zMy^AlOKwfx;Y|K(1_}@4&umbW$(vEwC1W3{y_G`|1< literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_check.gif b/usr/local/www/themes/_corporate/images/icons/icon_check.gif new file mode 100755 index 0000000000000000000000000000000000000000..393674d42e39b25c9c4c7b617a8cf8c88ee4674d GIT binary patch literal 1291 zcmdT@k5kiS9DdlogMp0OREV*GG#HCX+d&*UA&xm5gStXOTZYJH3l1vqC?ErGZV1C! ztyGGDnjBKck3?<|MAATh$u@rDP7Y&G2xymOorcF%U;Hn6@80L0_xarW`MjU^dEcaD z`Cf^Ni(otg+yONJA>8b4umR=31>h98BCfKJDXXNps~T8U@~ zW(D{Z7z4TxKqeUkV}gMf5l-@t00ZzHAOLv42+#-RPf9Ksih}luj8_0JARX`qc5Ts$ z)e1C&Kf^~Z2nT^8pbcmOu7K6eQZ1?w4^%_ft23?{Wn`+WAOQL}9WMhXAiX6;GJGa{ z&;#E|U)e2L_EI(l2$%{;FH84uc;F0RM%2xy{N?=WyVdpg>dCW;=fnle1-s{Vvz}*# z#D$pFO|SxQkbP`bR#F z;5yI^?lkvs%V9Ti7f?e^`xEv*ho?8l7etPTE!g@Kp#O^xJh_T?bHCo5`b@@Xy9(vk zLLE!K3O}9E|GCVC!Ybz%VnU+wAJV5Z1a*dflX2t0Q0;*1>;EJ%5O`AOpiFW;0 z3Hta^sbMf8^-RiN4=!nJMp<%es$t38JlEo*PPOh=%~T3Ar`N`0`!7@|`=*z7AX)R()oUTogZ7QR(G z-e~oFoH$wA1#zZoGw0#ZhL$qPl)oBZHcxmDwH>>k!mPE3XDshuJQAsnq&nL*pZUC0 zOJi)yD-=9p)NQOYePebx9j|ZX-?P8Bu$FbL?D1Q_TSDf7KQ1l4|EKF}UjAbJz7juK z)WqsPrzC~T!&A=1VoOaH^_`WTk@B)1=+ncw#Abn(dHN3)Eok;=mo>LfnPB8|h=-mu zMJw$(joZXe3OpCrVcWjfpH)sH8oR4$hIdVru!PUuMrcpD28N$yM`Zo-i9%$Ox@V+! z$U=6Q4(h_Ml(^jZHR)N_>Wrcr8d~n8*-8{GoR*9A7Hx_bXYgPmwO}|ro2uznjS@S~ xO(hGdCy=}?m>#@lF833H{&iiyR4OpLC@{%|>y7Bv4tO#(&Ff8d+jlY%`yZ7jY@+}G literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_clock_green.gif b/usr/local/www/themes/_corporate/images/icons/icon_clock_green.gif new file mode 100755 index 0000000000000000000000000000000000000000..e171ba883ff6adb2c24c38893301da408880c34e GIT binary patch literal 308 zcmZ?wbhEHb54l zzcXjfFsx@_*vY_<#js(+1{D<*hTRM|ZrorD7ml#~<`6JyxIz`)KRBO}9b zoPl8*gP@>be0)4ZAp^r&1|=mW5fPEASFfg~rXD|joS~C}jg4*Hx^)a?4BXt@3_x&( z;oZA;AO?v*@h1x-1A`ue4oDx!PYi5<4%1IJ2y9g1nslKwf>CPi1?34+>sZ!`X-9wb z5o=fz<`cL^=uz&r;)@+y*XXjB)^!_8x15@%JH>}NB43@6#fMozNSBXQTfmz~Oj$=l KzD>`O!5RRChfC-H literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_clock_grey.gif b/usr/local/www/themes/_corporate/images/icons/icon_clock_grey.gif new file mode 100755 index 0000000000000000000000000000000000000000..00c865a19c662dd9e7df3b8067c187cc5cf3680b GIT binary patch literal 308 zcmZ?wbhEHbge{LGm%N=izH4|EW>~PofUA3gs)wSLwqII+)H1HsQ?-6ykdWwD z6SgN{iO{3mvM-LETUV`BEUD|(R(Ci&PqjfsBO;%VncYW2T1i`wMN`0ASWQJsT&_*W Hk--`O8gXE6 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_clock_red.gif b/usr/local/www/themes/_corporate/images/icons/icon_clock_red.gif new file mode 100755 index 0000000000000000000000000000000000000000..7b412eed1873645dc604d9d95db433b38cbad27d GIT binary patch literal 308 zcmZ?wbhEHb+H`I453cjgVE*71BB&v5sr4n6`CR zh)?^PFd5G^B9C&nO@7$1bI*R7V> S>k5;nS4v%(m@r9%!5RSkFA^yL literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_configure.gif b/usr/local/www/themes/_corporate/images/icons/icon_configure.gif new file mode 100755 index 0000000000000000000000000000000000000000..7182e0dafde29cece7529b08bec24c70f9f245b3 GIT binary patch literal 64 zcmZ?wbhEHbaEr4HjlXWzu51?^ZEJk{7BJ6{1@qGfwREh zDnKrmvsf&#SUf&HuGMN25)zC? z%*@R2@bKW^phBU5pu)|~)v2ke)zuY=q&*}g#KXfQJ3E`nsBv&`SXp^XBoZwav(>sV zF)?f~7|7(zf`WpSloXXpwZ6W-x3?#gj_P#s(a}+%kZ&^0$Hm3bXpb}++0oI_-Me>4 zq)4e$+S1a(<-#IS7nAvPX=%x9o~x^SDUtmC`Zdhuas&bal}hRDlanJ1*WSMUZDeE!1VL_Yn5d|zhYxcZ493`)n9XjC zkB|5E_TJgqsjshZXlQ6`tdET)fFP*V%0ff0BqqjjIPAT>{psmxv)Rn$w5rw8{{HUH zPWJN3vc4etcXvxm3z^KS_I5Zw|Hp%a19$iH zTrT&;3%XjZuCA`m%ga_M{#ahNZf$KvL_}CD78D9)v)LvlCi?nVuU=If4C;!C0s?`+ zX8)F)oQ%hRo|TnpH0nA!8k9;U4A*Hi>gZ_vg$r&ZQg}wjEgp}Xnwsk4gRQ72HyX7# z+{K}x!QNgTo6QCQ;6p+m`2U>Wzjg=!PywHQ)cg1e!0`ltf9eP9NA0s>zyR0GKnEIH zm4fnJG!G-cw*vsbMY}4*b@IhT_j|1G*mh{IhJOG~F#?JF0UBBgEMoZl5(c~Q11kK( z-OoJWNt;J-7$@$w;aq0P)#$cWM}GpvP=dS;mNCrf$sGX+wwiLwTQ^6La?kfpvoC?} znpYT=9{fDI6ihcfS-FgWgnvROWO_1yJoOn%`7@Q@CCIn|^t%Rx7rk_G4+HU!Dx2wz ze%H?QCB5emao^N?J~4xpST@4*L1GLUIYyT~Cn|*bU8jm}p~5bq^{v%(*_V|p;iW(# z^Bjo7jD+r@a7!`^@0AKwFj;rq| literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_down_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_down_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..70a7473c30f8ef7a9ee5ba94d9fbb6dba711dda2 GIT binary patch literal 689 zcmZ?wbhEHb6l4%&coxR+?Afz-@7{HFb=|vn@4C-XFJJ!k>({4GpB67(eB;KA@87?_diCnuxpS8;UAlGa*518)dwP0$dwUxj z8{fQnbNBAu7cX91zkdD0hYz=J-#&l-{GB^@T3T9m@7}$6^X8K$PSn-aojP@5`}S>D zu3TBNWJz~-_k{}=7A#nB;J|^yhYxSqu;Kmt_b*?(*tBWW+O=yB9z3{X$BtdQcD1#& zb#`{{+qduOvu8hl{#w0y^~sYb_w3p8=g*%bM~-aSvSsevxj%pYJb&)oj2Sb&e*OCN z>C>jBrq7>0zkU1m?Af#b{{4IY{Q09tj~+gJ_~XZqYuB#*{rmSn7%&VRQ2fcl$iNWB zpaXIOC{7sI|2KsB3CRn~`ge4C2C%w@g|G$jd$4i&d$J0JgtE&zd3#R^;$rag3A9o3 zaSRO=)%W)k4&mboVpg!#)Zq09VRh#Y^Mb(36Oi{UT%8^4#HH$$o zER~5-J+Q>ZBBOzsM@D6q$HGGjLESRJlQ@<%r8qaSD6#2uD5;*};_zxTzVoRX%iEiKtR%|sqO9Uhbt?{mzT3$UAkUgF)S>w zR8rWnv7%X7fo)WFsRZY(P0nM@Oz$ zSXWb11qB4HRaJIMMXOLymsC&EqM~|GP}#7su&}V3M@F=?w79sq%!7l6Nkuw3Hg`ET z$hEb#Zf;mADrYMz92^xSBplbQtONuEomNu0Zf<8}WCaBUfI&ZgH8pZGGFL7vm`+NK zF)EKlL6SQ*pH)>=3=E7=Nxph|ltV+jyu8+$nxarppF~5!fq?-50li{k%$1ehwzi~A zO`@Wrb3{FLH#eh5L$Ov=%!GueS5(i>&w6@#gD4}VSy@yB1l6mn=;-LcczB{!RhK+E zsZC5Y9viV$Q;Ik;UNkUSDk`sGVVyxiTmS(7|Nj600000000000000000000000000 z0000000000A^8LW008v>EC2ui01*HY000R80PCFq5DnI(DBA`o1T|ya6LIy>&H9pv zkBe6(iX=Jbi_IB5hyXys#_l#B3q3YM$S}K8Sqk72v}QJTxF&3PG=N;{?qJaR~5?nW7^HER}HlxL6oR zr54;_Qs`R&I9E86*x-y;sC2<{JX+`NN1H~CEerwXDGv)bqEgZELQaVg6!iX#2uH>P zpkZLNX@J&=$~z;|WSFzT%FwYJqjUv2lF;pev0E^J2-;({SqYHI%f|KG>Q=luEe4<9~!`}S=|N5_E!8!leF zc=__>t5>hSeEBjXBjeVsTg#U(fAi+e`}gnn@88$m-I$P&ux;D&%a>1-mq*Q+)6CA! ze(c!JfB*jZ`+MHGb9>REMeEnk%gxQWbm@|wp02aA5f>NxxpU_>Y?%G--MiDLk7Z}a zmXs9t^%d^jyZ79=qcSq0PoF-~&`|pQ`N4e1_o~0G&d?L%E7^*uCDa#*|X8nUXhVbbLRB_`t>s+BBH!JQcO(j z!iA%Y7A>4VzwgSG%TZBoUS3}R|9`)6<3?3g)x?SU4Gj(V?_aRDw`XBtPEJlbbZ8S3 z6JtX|`Lt=1GBV;?TGG#+J@fwkJ3c1_KlO1)5yqBS6B1LkMA}%*4wu) z-LPT9rcHCMUA-zJBfE6TqQb)L1q-Hq`0)Pk-@pC+6%i337cXA8c=5#JM~{+{;x1e` z{_NSao}M0OXXl+eckbQ0rna_r^XAP#K|#H}`O3;t>FK`x{r$qi!XY6+K0e+_Nikcu zZoYEmLT+yE;>C;4oH@h5zyOS2AUW)T;!hSv28PWHIv}5d@&p6Ne};5Njth$gIU@9> zG>$ZRg^00kc4_!kpy)Lqs5L3kJ_hBb*cKa#M8k2aG;U2hGY>dYu{vhL$=zV z3GAc!c+&ZiwB5bbWBdZZ$HjT|uxTPTJ!z)o8d9{o)y3!2CSxj;aY$hE25xOk6 z`MyE`%R>)7_Dud`ROFZO+pa6q40H#{2-v9sr literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_e_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_e_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..9ba5738fd049b7a747a536a5bae8b1e4ff5a513c GIT binary patch literal 1120 zcmb7@>o=Qs0LOoLJT5U!499WFs?s1Hb=Ra)ks?pk8`D2w-`C&IoA3F2(HIt$CL#a=I64Hs zPD~`k#x9hVJu58K2!$#--DotvXld#0?(SqVV*r@Hd$$HbBy{?`SUk$*j&eA&Qt3oW z%4|-Kxw&}`9>1Yh&*kSYNF;KPbAEn)vzeLc@vQGMGUOO`35LVNgJn)mQ~)p{ajB{* z#>GV^k<1B&YPEV`VBjVWcT+6h)@THQeh_5FU<8v$&bf~E8a_WSFK;9{@d<`a%L-N$ z3OWEvIz0t|t6Z*LCQAh%B?WzFFtjq6n`2`?FE4+^OX}(ANec*2T@HIdr4k5)R5Cdv z#H${|P?WK(P~1Q3774&BmFjsz!(?h|I?iUjtxYeNXX9llx>t<@SbGnGtcRgk~YsLMi-F>a!Z zi+wgic@!Etl#rkd_2*M49TD^p7#6{>8V#SDn;VQrCsMd&oMeF=p65w^P*%nPU~g}) zxVX5N&Ax%NuJrcIiJ-|TWbL(Uiw_@`lU&!<)|kwonOnCEg|a&rE_B64A_y{n?;eeY z*xFk2`LS_C;=#c|If;03a->d9Zf|eb35Agi#%+81zL+cC-k)eQG8RfpV{kZyLh&Rm z?alCT2Pd&H8OyMzl+67oY+(>RaEVugQSUESZ`KM)rMK@bW+B8Cknpvurtom9G5 zU+?cv0szoxzE)ONeO!)*hesuf%BjKS-X237PH8wzClqK!!ar74MmU`70Gynhoc8~3 z+>ap>01g520sQa@V0i+5`!{f>F5cQc3hxEA>~Glc53#=qlew5W2n52(y?tA*BzVYh zY*;XDj<(>0&X_F0EhJ~Q?-V}MP-XcsIe)b$C$&MO@p@Xz@~u!=?4M;fer~KCa_V_s zxygLj63~n9?evGNU-`(MQVxuN4OyGq*(X6hyKI*Lns)E&RfmZA@~JOhit>f9jTs!F zI_~Bj9Xf>F_mu8#jDB_|D)O;I>YJg+j>KS|CN9aW(X?Pk@473haHGWEw$ltJbw#+F zEBmdcW|)tgZgg4)=N7RozKz0Oue@J6U)g-|HSemh=_QbjAAqa&12iyUr(*OVf literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_error.gif b/usr/local/www/themes/_corporate/images/icons/icon_error.gif new file mode 100755 index 0000000000000000000000000000000000000000..e0fa6597a6ab440c246ace3e6124a2b59d44219f GIT binary patch literal 1312 zcmd^;`A^$r9LL{ftI|yIiv9xTJm@cz(XoV<1@W$D0S(mI>~eY~Z*Njkl1Iz9IKt%; zu{eP`hr^*;Q7J1Ut*s<1jC6Go4-Z#5qfn&KmnJ8#@cCNcDDV{M2UdVvfIFa}8L2dr z(!rq%sG(sXf-*k7k{;*fMH(7NU0tkDNP>eiXiO%X1c2g}{&01%h76$Vk%P zKa-L|OeW&x^&v0@v;&&}k9I|(0w5UpiMpfXd0-XD;Pdxr852X4N|Kg#zo6h(TGrN* z48U*wKY~TWr54Zs~;2;fjbP%m}EjPCqPz3~#_IA?S8|&lK#AK48A-i0@0~i1% z;0%0?{qa6s^`HC?;r}=N5_E*`WB;E3hoI0|lwmVZnVeXmnpxW*E{)2rtApBFo7xY> zmgu@FdR_=;UaRSQJs`_HJ4-sOnRA=*dHL0?z^C@~Wha3}wQAUUaKto_WRfrESyFGx zZ-(0ho7D%nicY(xW5sNJJi^my3}+cvoT1|=iXJ&|Imu(+T2D;AZE*27EQ?}dKREDS zoS&0z;j8bOTm71H3$@+Tmy1}wI}^EIWJWMvYCLSoJlEXj7hUafOr5Iz*vcFc+!N22 zIbEIOyqhvVa-nDa;i<$)UP6(B$#K|s^z^yv?e#mi8%M+^h4oVAXNCIhIt z78k5{pRM0{>uBPQUHjRM@9zrt(qBt>UcWT-D9v}NF@n93|73h%JWgJ^m{6+61h zemTU2DgE8-G9R7c>8Um-9Zqv)svybdxNqq$I3+>kb;Fk&)+gCUHsg|XZP?5dSYfM0BSB literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_exclam.gif b/usr/local/www/themes/_corporate/images/icons/icon_exclam.gif new file mode 100755 index 0000000000000000000000000000000000000000..36c2ec7b0d423d145494026ae4225d9266eb78c9 GIT binary patch literal 1274 zcmds$`A^da7{*`D7FsH>Ld$^m+j3(e6>#Gi+H#MM`xr-sG7vF?q1g}yCWBJ33ML&O z;}Ar%EJ`9H447=1P?QQdm^(x!0xeX8icm#mo4R*pf5x64p1jHXCZG3tlQ;VPsKB5+ zCm>)OAi#%I3BU%xd6$14aEH4c{P}GCY;wVeRuLf`v9-IQ(0%%5j*Ba~ zopQUCTWo*6Gd}$qSH!s4x~OE~v!3U_aq#Jd>F*p*R%hdSUFcr28)2pzOhbKpJwSE> z)rMv)5?a!2Oz?3Pu4Lr_^fcR}CYTH01E8BJv^7wc!oN}2hXq;aXCgH!o)y670M!8Z zuR9;gpv3@qaLvjOSrdlIMILT6U2bHct}@u4++AcsX zZuR2E83sVQh%(Y&Kr%Oq-GTbz(*BbGWRj77Hfv*=z;!9=&p%YL*CyGxUK=B1YE`U1 z?{QEasGm*M&&FSAVKjX~FF(xk=d)-4nj0)}BDFAsmYYJwjpm7w22=;3u7Yqf%}utd zD6;-(FaVdMP@9bEfPr&N)W)^S=(ylz0Xu3l>@aUQ*#AwOzfAv&#M|+mp8zt#Q46P- zzHVi$xrwKEye|)AS0&BEFEq6^^-TX9>fo~dSx-}T9#dv1SGexuUJ_6Eja?3JQbW9CM!Rjs1o(6#b;yhSRdSNOON)Z zJ*srv=GP=;rqA||O-wbv+vvp@dYvEFIz^HMk&kB#xZd8yBn0!4vZB#Oi)I;c486PcvZYO7!s;mVyX}rvQHx?;wXoi+qa;trdvdC9R@_eI z7zm60xk4+MgbWe3LXDJ{(c>D%(FM2vg!sv_FjAyMLDmSyc;f5xFea?8n5k)*Wo ztkB5lj@>pUWV3)ZZBx8dJ>fx4m6*Ebsz=G}-HH)QFA-hhRzP=To1T=)f M)78&qol`;+0MHgBO#lD@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_flag_en.png b/usr/local/www/themes/_corporate/images/icons/icon_flag_en.png new file mode 100755 index 0000000000000000000000000000000000000000..bd7f9a5e1a727a1f26dbee85c62d142fe6bc26a5 GIT binary patch literal 618 zcmV-w0+s!VP)F6}X$ILm@h4=_42t;odEO-v|?~BL3#zxHs z>Vjxz0LBwAwiYiu_Vw<4VEh4N5g3=i7zM^FT1<0u=M)sII(P2TyK|TBCnnxXNSqSa zVy0Qa%bUwEZQ4O#$^oVyU@8KpC18pIrYk(DPF=mWqGH|U(|6u)-wsTxM#lW--Owqt}O=J!*FlcUW-un9XqYqoR-b+pa0KBb>=4{QMUjP6A07*qoM6N<$ Ef(Py}1poj5 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_flag_es.png b/usr/local/www/themes/_corporate/images/icons/icon_flag_es.png new file mode 100755 index 0000000000000000000000000000000000000000..434776ca9a72fd62a77d9183e5a8d537bfdfb1d2 GIT binary patch literal 281 zcmV+!0p|XRP)i=rkE~q*mzd<(_`-LgBt1!T*xt{V2A$82fRO?a(;Ti2P7}u5bXro{Me6ru9ya{P2Kp#!(fmh0X*_QJ&{oy+`NmLmr^z zl`WY-{m3Y@qV)R{uG_Z-qc)i0G{tG9&5a}U>YjP$s%^b%cTQZtr+C6P@3eIg zgZ6AU1Im7X%DMEUg25t36jM~^yR_}s{P>s~VgwLPpB-cswgRY4&u2+c-ul*MTWjWT zv=?JQdHMR~ z>oVbLp55om-EM&HBhS@VXRe7tRGc}iZ46-eA{OgN_PmfP;TBngb^ z$umOj!lwewvWuA6H#HU*(+f{1>Me32A=MS`(0>6=b?@&90G)92wov#6Gjei($r6Wk sXXL&<;hJ_-6>DN6Avc;*m>Y>l03tlVCfuNw6#xJL07*qoM6N<$g05TZhyVZp literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.png new file mode 100755 index 0000000000000000000000000000000000000000..48a34b666aae6c1b7947fc2f4c05d146b95529cd GIT binary patch literal 1528 zcmVSOD;`dveHR>N|J3gMv)Gy{~Py z9h2#e(>YyI;skMc2$-KYW@op;U?MVklt!Ba4aLk zL%`ha+rw0+7G1 z#oJR;TN4xO9UW`c)z(|L0MFIhs;jJ=NK5NPq09$Fvk#yPh0@g4s)bYv{G1Tzj4D}Rb}V#hDapWesTO4VCd}y)l-+1&1Plk za&z@``j%MyN-F)R$B+M#NOlGXUx-9@HhVcIM@OTrT)DE6kzvlySJCON{TlZZfQG~A zfx~Bti^uSIMO2g=fzS|%8};?>wze%k|9N+}yR~(rq2Xz5t(C!8N=%$VA|W)|7#V40 zGQ|Xf^KgJ(AZUldqy+_!0t5R`pPmX1o;-I>hsWECi-AYrcZ17)T2td)M`d~^5I7dL(ia{+ zLMDrm$T1%unXj+P&rb$}X^=?30Esrn#+rykQ+&LcL;^9HQ&UwK%t}^PyN{1+a`N+l zmo{6imsh)=-$NX3EG`a8N}5KYX5nx}P>?Pp#DK*vMMQvfn-da1a;*9Ja|D70i(N@i z@ACI|9enV8+NL0nySu8&N-2ZU2RejGmHYe81_V68XXuYY2yP9u@HKBd@wz8WW>IqvbG|GB8k$!RVr+^>J|v(a|bAUW3CehJ`JLhJw_M zhljg70669H4mjLMB57eTH5{(Gcu@&5hQ(@QV}TI})MJTATu4mp!{N3M9zF*G{(kv# z_|heaNQ7W8$lqTV5b&`Esi|X;QDSUZKNcrOV?;qgojyJ&QC@qr_{;V7I*IML0LbA!clG{_M;g}H>Xj}H z`JObhTMuU|Xl=@`8JuISj(gs}y;K7$<%e?yytBAzyisb?NCZd3pLd-pXc^Jkjs*aj z`I*uD9i`@GpK@4h8-c8Q_6ng2Q`P@XxL{!Xo#y~Bu96=P7}mG;ecJd~d%1b^xZCyN em)7at*ZvQi1F0RQzOT>s!4H z)jtq{3=9?NuVr$D1DC89G%rAxe9{ob^%fwU_~xqs8RLS}G%@8Rr-Hy`G8z(zgy~bWvm=iltj&O}rI4-i%6!{( zu|pYoo44GQ<51;0TJG5zi##>Cm|8i~)40}uat+FY+6sb%gIyFGk@?9DlL`Q#R2rbP|eS!^l4Xe>UBHC|ig?Z<+@cD0#bnC*Ffru+6L$F^3 zskJ;`^3D>U7h6+aY)yN*Ch-1z>#Ga>{{H@f@Iy(E;M`oLC50d~J45Plr_S@u32%?I zzCStP<@T&c3vI4XH+XhtAxOi&fB)t#tV>7|uZR+vmZ3N+TXA}Z{OO6N&o{=rJ<|3L zs9{I;qlH#?=a@W)Xjr{&LQ1xDW(i+h8b@ZTV3a>cYLdY2Zq3Kb-GG+7*qZuuwcmr; zx;JJRK06K85SOf+RU(>J#FDOixzxI^MY}ddi!j21Tbqbn@j@H{VyTSlXi!lXbTaDE;>Iy^g;LfLFCe^W--&s>xcl`M-)iHuq1P=64aab4NYms%p1GDo3rF!Qm*| z!h@`?lX2&2ASi$>2 z%S&QW9LL2)|3KTqXweID(Iz3$3Ku=-wYf#0A`vd`Mg$i{Vi2`xrG(1?kr^2B>LA0N zQIMG_8FgUPsnHxw^KtI=m8s+Vfiy?2H97NL9L|N`hwtxu&zJVttGL4vz%W0C!LvvZ zkN=7GeDfO&7b1~+Z7sO65?WpLZESpAT-0+og!LS}6U@*84Bz%4j0Py*I8jS{?@E*Iq_D)TCH#c7o4?p{~fiDOWQmH^k zd_JE>qX~sV>NDza+zbtUnxDUv$-01Fr~8Q@AQE{A2n2#eA`y?r34#boB)^uI)qQxV zxlAUL428lYBkx(PTMBSPK&^(;&^?()=wUZeZxnK5!1Mp;RgxjYg~0f($gt zXf(vq(yRV{>d(>&0DNRH!Z=O=Mx&9-<(kdrX0utV)r#3{dVSr=<6(1if8W8rzyE{F z1s)H~AQp>Z1{6grl}f2p%ATA=dAzrSgRo;g)i5%dp4nLf$6*p2$D!5la5y8A#W)<( z`1rS{SL-RCWoPGdbo6dv0fcDo@Eun@>(S(fK{ zAHQIlCPpTq0(D&16IG^aI`^(yjV!YJ{Vn=W%esQ{{;ks(isR?z5(Y#$F+n{ RRD}Ql002ovPDHLkV1kYdn#uqG literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.png new file mode 100755 index 0000000000000000000000000000000000000000..06b53a113dabbacb139a01dac04b413e707ac3bf GIT binary patch literal 620 zcmV-y0+aoTP)c%=i$TN|0YnjbQ6*9`PrD`ct z-kzf1ehM+TpPf%8;4T24@d9;yo6%ald6Yn?aB$iY}MSZnu}qW#D-d;R2W4mXqJm_9Utu|6>+& zfM|!qq0{LM27_L&*Jv~l1c5sBdR^qGD%`i>7$g)R85k?4W|j0%x2#rcqtU4Ea~ym; zGONZFU~}~WyZyW;07hyyn^H9`2Kqlto$FMHhwN1N*8hN3t0fVy#RxP%dQ{n1s9B8U!7rtL&E2qKO!1& z{bF%#V0EHT`J5gA5S`zOddAVU(WKuLUAhwwzLdnjFZ>sjj5H@at#T&-00003c=M9>jN(gGbY%D`^T#KD?1Ewse~l_Cuw zZQYD9P%teoW0_pcQ(?omWKaG{llJ`1dH&C-YQGeW5Hw7UlWt57KPeB){TrL!7x2#MSI4d)F22;%304?YB)^{qSkCwFfKmXfv~ fOV}fgwJrSwMtOH)-`~a100000NkvXXu0mjf=1US- literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_time.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_time.png new file mode 100755 index 0000000000000000000000000000000000000000..aa8300ab88c0506d159c27ff1123153cbf465e11 GIT binary patch literal 646 zcmV;10(t$3P)c@;1P@<~A6%E!J%;8YWWablh915Vcx06pA3i zjYW>~aPRaQ5RD{J&4;(PEi(VP@SQ`Y)mcp2YEk`u_x!v?5Jjn2H_wt4^5i8zDl%zM zH${;~)#FU~6&d5Y z?SC-rkyilVvKU;mOfd|A26|*tdpw@#^*ZD6@Z#dP+o6+i@9p_KAgSGM*6UT0Bm({* zn}L9PS~Q#xBi48#7W^6j%F$>5FuhJ^GMQSfMzdL`sM68#!4E9|^pa1{>07*qoM6N<$g57O0RR910 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.png new file mode 100755 index 0000000000000000000000000000000000000000..1857d0e604ecf3376bf7251520e8226b8e12edd0 GIT binary patch literal 487 zcmV+PuJD_Cj=O-CW(Cv&;O|s_B*HfL9^$RwN(T(+(%YH$uxJ3{C#x&2)~Wwoto(l^%m1wm{|~eOzL|Qv-|YF; zj(>lCW6=Q7bGusn=MojDo|KbXaL&&d~@545`mvfwf?VUg8Jur!u=Tz z@c3as^V7dSzn*VtyIw5tYl#NPKU+ZI_WN4QgIP`xJq(xu2eb$1wi~5_KNhR~U&;D+ zr^v6{)xTcsx--!Uy9Q{ut*yRQF7{)Q>Zd&k?{9DU@&3Zob%k$Fu3*5E3ZAT~yj3Cg zVn^l6^GiP7-~IXK+9#{a81N^xC#x&3HyJ!woc!kO!aHZT>_`!2_)i3Qdvf{HHI)a7 dG`7TX0RU=HaFmEk7ijm6U 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 AdjJ3c literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_help.gif b/usr/local/www/themes/_corporate/images/icons/icon_help.gif new file mode 100644 index 0000000000000000000000000000000000000000..84c84dbffa0a61882b21d8cf82d402644547811e GIT binary patch literal 1669 zcmZ?wbhEHb6l4%&coxHO^XARKK%d*UZ~OcEFI>3r!i5XBZr!?k`EpfN`NoYK{rvnA z5<>3Zzn_tjv17*$7Z;Z+SFW5owff1EC)clE4-5>PJ$p6_3v)w5!^DXbPoF-$Zr!@3 zrlz}hFGfT}eE$5|$Hyl$H1y%ahgDTod-v|m%*=fA=1qTpe?mfny}iA=yZih1@3(B( zvS`sFCML#t^X5&MFk$D;od*vd6cZDB^ytyPefz4btJ&Gvj~qF&X3d&&=Z?>uIa5hV zsimdG%F621tJ}+$FP}br3J(ttKR-7oC+F0uQ+Ms!_5c5m-rnA`XHUL+_wL!VXQHB_ zFJHc_t*za#VZ-s`#~(j_Y-D7#d-v|x*x1F37oR+NvcJD?@7^_ng1l$WoMB*KIDh{9 z|NsAi4Eg}Y|J)J20SYdOC5b@V#=fE;F*!T6L?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp z&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dgxv3?I3Kh9IdBs*0wn~X9`AMl(KsHEN zUr7P1q$Jx`$q^)>0J76LzbI9~RL?*+*}%*|!OT$4(AdP>++0V&$iUD*-@r)U&`8(N z+{)O<%D_MY3Y37h6{VzE1-ZCE?E>;_l`=|73as??%gf94%8m8%i_-NCEiElUW*8ai z0#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*nV6WAUs__T1av9H3%LbwWAlpjz~0eI z&d=4aNG#Ad)H48i38v837r)ZnT)67ulAu(Cd$Af^98y`3svneEoL^d$oC;K~46>@g z%DE^tu_V7JBtJg~7K#BG`6cd1|nJHE-u9nWOMn>kY#x5>~hOUNAPR_=buI82&22Q3f&K7Pky)OC5rManjB{01y z2)!0K^@0*YZUN9{m(-%nveXo}qWoM1u!pTOal6G7r+HAlDY)HYhEuOT&@uX;Xhn)< zm=G}SfSB+^3*^9)eQF*strr0kHRJz(fB*dc_4CK~Z(qNB{`B#~`*&~Oyngla#q(!R zpFDo_@WK6ickkT3b@RscYgeyazI5@z`EzH_oIZ8(#PMTCj~qU9@WB3kd-v?#wR6Yz zZCkf&-n4PU`gLp9tX{Qp#qwoKmn>eiaKZd}bLY&SHFL)FX;Y_6o-}bne_wA;cUNae zds}Nub5mnOeO+x$bya0Wd0A;maZzDGeqL@)c2;IadRl5qa#CVKd|YfybW~(Scvxsi za8O`?zn`yFMfdYiVkztEs9eD=8|- z%gM?}OG!$Ii;0Q|3keGF^YQXVhLeG(x z$0T~=hN$RJmnc~#sh!Jr?+p_ZVdI-QV^gSu6ElOMC#&f0J;x(12l)iB9XT3l8Fq)k zRY;iO(R7Z;$Y=5le2VO>Z#lR>JmVMEX4;mLu}y(-Qboif8H+{C?o-PIm11@#ojcYm zrRk89VP3e%QiL~dj=;v|WcT98Hk%oX7PxO_Fknu2c)+!xNp)jX!p)PH+b23OSOWmW CC1bb% literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_ifalias.gif b/usr/local/www/themes/_corporate/images/icons/icon_ifalias.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c569a793cf681950bdb6140144525df1bb23d85 GIT binary patch literal 315 zcmZ?wbhEHb)L`IeI3mn&?b@})ix;n5ySBf-|MlzF4<0<&v17-XGiRQp{XcZ*P*qjc z*RNl{o%#QE=KtsA|L?i{zr^q#2-4Eh7>EOkKUo+V7=#&gK*~XOGO+G=pwgF;IWJ?? zIvviv1~y(Lx%Vq<4{?05vO94^P2dXKF$aZm;e$$o9L&F@F0lnL^9oE9;qsaNnYGrT zIqan3CWV~cUQrGPJGiDzGGw{cV6@6KCp%v#ATB`AwS%Ej*gr6&K`4SVA}XdemXj-j zA%?A@DrBOQNp?rxj5bz57C{ECb%F_tCIn6ja9t;~s#9>mdPa7k-CL`-FO4`X#JGPi hSI6eF0i3;t*C!?3@~ygIeEWg!qsLF4sw*;B0{|A|cQXJ0 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gif new file mode 100644 index 0000000000000000000000000000000000000000..faa84d403a9e02ada2aff885634004e37b2c2698 GIT binary patch literal 315 zcmZ?wbhEHb)L`IeI3mpO@#Dt_4<0;u^5oX7TVKC^{qf_+^XJdsy?gih(7)HOUthj_ z`S;1RE6TxO2iLSohAg)l^j4YXWakS7#03btb}&>5`v-ezfXfV0=|`lQ5LzEwAjZ$Hp|^!UkBbwvhi07(IX8UO$Q literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_import_alias.gif b/usr/local/www/themes/_corporate/images/icons/icon_import_alias.gif new file mode 100755 index 0000000000000000000000000000000000000000..d11a5f00c8529612a30e845c663880f122917c85 GIT binary patch literal 1109 zcmdUuTThw?0ERz=mV$)Tx-eNZ%S=^fjXLJ$I!&ajh04r4lnWPYCn;U&>XL3Y%VKH- zDju8QqzVH^Kr%ou2nyn~U=jJi1JzGKtX7SOsFW%K#ifxjFgm=%+Jq{kB_&twOOrJCX-2{(eU_Kx7$@# zRtAH?G@3ul%fD4B6?8har>9A+mSeHllamvvRJydZq*N+*b~aHcl*a>sAh_~k!EDw) zd*&)EEF=<%!^5VoF5%R#baZ%lh(@D59w!7r4Gr9tl@*;%Ad#@TySptG zwMwPR&(BX!Ppqx2t*)*X3Wect*yEWV8hTqK2f?RQDpjd$_WO52p&+0Cptbd9JU%Wb zC);Gw2n2$T4*o%4AA`a8{Vy{!Gkv~YE|=@``JO+Y>+I|#5Tcv7z^r$5#hbWPV7Z(@BVlkiJURTE)7#Q&T z{bOTe8yg#Lx7%zs-@Z-n=xAdw7=wd@y}i8)3kx_LPOH`GbbS!ya5|j_fq=td@9!Tl z8jV)#U$0(y*4JI(P;g>mf=0VqQ9<6?THf8=m~c9fNF)LQhoCVMiKI|S1A%=G=e}OA zpPHI-I2^01t8%$~dU`q%i2wlbAK%LVdLO+(zyQDkq`j+n_X*%k1gO2(TzrQeT|quW zsA5#2K7d(Xl29xXk99rnQ!G@;x^}7@6@>tF(NP5ak6)%0Ka3VMV(JmhgY}eicmy9o zlit5{O_}vwZq=||L&zX;zG}wb0}Er}=6roG7nAdT{a?@>EKCC9!6J@>^FaeR%X2mVYumuAf?_=6)^s h=lCe;kC2^7#hrc7%efNMl=&1u)6UYV@h}*W^DiFE;70%e literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_in.gif b/usr/local/www/themes/_corporate/images/icons/icon_in.gif new file mode 100755 index 0000000000000000000000000000000000000000..f1da7718fae4f8369c8bf1749b651e0572a09cc6 GIT binary patch literal 177 zcmZ?wbhEHbjy?gg+X=#1<@WI2wBP1l`=g*&S-@d(i z^=fi*^2w7Yj~zR+|z#z_` z1Cj;V$-t`jpj5CeV_qoB+!d*Tyw#!WPW$BMGCC?(;Gv=gvKT{P_Cy>mNRR`10k;!-o&=-o5+i(W6V3F5SL; z`^JqMSFT+7{rmTmCr|$U`}g$e)1NC;q!GHlTQ2fcl$iN`VpaW6`vXg<; zIw4fIBV*R36rUrS%R*Q*E^-EoOq4ip{m{YjK;TYBO@^&U-U=yAFI>5so1chy Q%CNCc=U@2~v=tQ(+Um@-t5`b^7Kg+*wTnkX)kYMtxKJYvVqC==7BjpmFjTAu zqKFzS3E=8tsR6YM$}q5sR6xY2^Nx5X-p(WIk|wPEFZMpX&+p4idXyLyodXBpz&}P{ zZf47y34_6=r%f|6I*Y}Sm4!b$I}?fc>+7=`jhxHnYBZXqrKSG< z{<^xt_4W0ZmKG9;L?#nhtXd+GI505a?CdNQw(|K+4Gj%uv)*q1u&}UjaIl(?5LZ)E z)7jZsS@|=Y&F1lVsj1NnMwvpPsH)0NOpNgM_6`ULK%>#c#l>*An^Y>LP$(rOB?3Y9 z(a{kKg?j$HQmfUrwz8>IJQC?oqtVD@^6~MpPN&1;u{}LKg@qZ7jg3a5y0`a*Kp>c% zovp1cz~PcBDj3t#Q>Uk=B9V~IF0HF$Lm*&H4LvqCmPE>W_AFH_7T4F;4G#}rTwD|u z7H~M_d_JqZybOUr7>%#Hx&%W*5~Z>~DClb}7E2%yOeRxENYK{S*45QjPEHP){Pgnj z^4>ka?d@#}g?xB;xWB*u>Xq1Lv&m##DJc(}oSf8Zh1L3ACXIC%gc+!Dm9zU z007wS_D}vlgZS4G1OOxO&F9F^PXJIm(E0E|83x-rJBz4Q0DdfCM6< z<0~6Bp*B`cam$5Uv{%#+%PmFC7$eQ!@cx)oJOSbivW3I zF9fRs03CRnTW|BRxju0Liz85F3I41g*CN|TW1!Xn;pJA)3u-YuN1y8aaJqD-y#);Y zv4!?lDpdG9#k@`aFdv%!Ef`XLxqLTw0=!>pCK{EGtbG9x>&LcoXwNOTRHot`>U+nI lh5&s8N{jr-Qvw71eLBpXslfK@x5?>4O?RGT!##of{{is6&GrBQ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_interface_down.gif b/usr/local/www/themes/_corporate/images/icons/icon_interface_down.gif new file mode 100755 index 0000000000000000000000000000000000000000..0626655100ef0f6e109e3953bd2c25b7762a7f8b GIT binary patch literal 88 zcmZ?wbhEHbYb6N$v}@$uHy z)`*A*JRV6WqNwrU@+|M?ZwA`ClYmacXx+`_#qImuC6YDK%muX zOG`^Z5L{o^Lm&_j506KW(v3zVjYb<7=uj% zdM6a}YHA*zoSaap;OXh9L~drFKR-I1T2PQaH#gVYTSq1n2?WA{+05f{NhEM*XXnO^ zK&@77Z*QNUpLuX_z~OL0LqnaMK4CDP^LUrEdu(>Kw>NTTX3SzaG#HIkDpjSLY-ni6 z&c@f**KKc`5)%_mrhoPNRk2uHTwE|atC^mbDil%-1~oYN*VNQ-OUsL+qYpJTG)8T0 zMMcHV&Q@b%qrvcxmzS4Xt)|l}6A}{I+S)QQQfzH)$HsceVm;L{V?+FwF07~HNk4PUs0U#^@o3x1$#XxU+ z!meKN_(^8%s7y!1UAF>C!|i;O@ff{hnfKIZY1c7ux~G*RdYkVS2v|X37($PzED8(} zh*O)s$#r?14#8#?hCKzJ-Tyok%U`J)cfj1khX)7znow?o7QDbW1p`2ENAaB?Yw{G# zruvz!(s@&ClPc?T2f@+Xe_Dst18Ig~Vuka&fva|mji+v(!cp!w`CQdkDM9&OE;Ir? z>|VZO6#tfgbnunvj`u;>&G|4~bL#tcK7gtJGRa@`9INZ=b#kW!ggT3oc)r$g>bK{a z;{i6;5U89ODIB4D^YTq|ls*A~_&7p5KUgVz?!T?}{XrH6iGf5vA(~bG5;rJ1r;(O? w0B5qky^El^zOJn3@aH3j?E~>qBf~)vOa}M`^AA_)wO`y_Z@IjJLV@r91JG3k)&Kwi literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_left_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_left_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..c778014544da5a0c6a87c3c7df42dbdd0f5d3fc8 GIT binary patch literal 691 zcmZ?wbhEHb6l4%&coxp^`Sa(qXV1QT`SSPg-|ybNd;IwEy?gh*fB*jJ)29ay9=v_~ z_Sdgp7cX9X{rdIYyLVr`dUfEyfg3k&?Ay2R&Ye5w&!2zs;>D#)m)^X2vth%AD_5@k z`Sa(=lP9}&?YedA)`bffu3x`?`}XZ?*RIW+IrIMg`->MZK6mcij2SaJIy!oKdUovC z@$$us&6_u`UcLI%sS}NjjpxsuTd-ik`}gmE{`|RV)28j)w{>@SA3S()-MV!xEiGHN zY&m@R@W~S=dV71@+S;Bzd$xD)-ppFe*cIdbIq@#9;!Zk;n{&dHM}KYsk!)z$U& z>({4GpMLxH?b)+uO-)Vz{{4IS@ZqCJkAD34@!`XV%agyi+R^D1z-km8;vLB0>Fpls#mXKM#w_Z@z%VJ$-N%p1 z-_Dv#DlAM)Ak>dPgqtUjO~KJbH`p_TRZTj~lO>GDQ!tpro=Hd6)5j)&omXpd2qz~O zBd>v(xR+@F3%5RBn4h;dgHN!M44aonfIhb7}Nu&DJTS} zIy5jzE%BKtzVwI)gFAs*NMMHu43&+AI3R6|YSu#om5|~9b1w0r|Bpx|1 kd2_~ml@kXNTm)Ie1(qZ@G%oJEyW2Nr&W?)@yc8I$0W=ON761SM literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_left_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_left_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..84c6fa2701caacd05b950306438359bd9fbfb29e GIT binary patch literal 1129 zcmV-v1eW_pNk%w1VG#fk0Qdg@p`oELFeFY&O3BH|VHg;}Wo5#BeRCHVyBXPNPRhi7hS3l9IVzT&z$~ zM@K)3IXQe%O}cGuvQ|}D7#O8lSx^7~S1Bo@qocQ5TcAWlw_94Krl!1LV31Q#wpv=T zRa2x*O(rHCzhq-9;el<0gIy#IsGQoa+pH)>UDIcavMNJqOPfSeR!osCW zM#Xq|!DeQ}jg8*k%K`!dj5;}qE+-5O3A57eEiEmv zRZx~pNk}s@K0Y$Pe}92OJ+xR@wpv)sgM+?mYO=Dj$$)^^x3`WmDMLR$wQg>hJUZH< zqQQZIxLsXuZ*Q|{X{}gT$&QY*S5#jzFoQ)x*Q~5V00380Q;t+oXlPw#IW&epKUpd& zRw*f1Dk{QeW`HFkkyKJxDk-^MT@@7&kTf)+Mn zWYwpqem_0ixVXWIi8BNQu~k%3 zU0q)o7}u+-xo&Q_Tv^9?dez6rX$}s#X=#;2L?a_3v14PiSXQE0S*uS-XJlm3si~h$ zMzdE}RR92dIy$XYRk*mg9UT_LYik7s1-M*Vv2AUqr>C7rNRN+?q)0``wY7mhJ!el$ zpF=}1FffNSF?LKsGBPK0HZ&0t5y+R9r%q0AN=lGILjV8sy<%dbOiZRqO2?3prBY8^ z000000RR90A^8LW00930EC2ui01*HY000R80RPDvfNM>;5|98WlyXi>olyTUeS6j; z)g@cmkSzJc=hQx3@&=?x*G9svC~{;3$?!xK9s|h+wY#!x9;I0#eo%wrtct5xcYIZt zfK6DL58=2dxWLX5BRZfs*;6;e&m1^O@R=xJA<~%!TOQaLh3XiO8*G5-GXx|-0!6IQ zxoIV4&np4s()8L;V8H?eNAi@qmXAg*a00AYQv(Bm3I!UPg>i&I6oC~l1W>?XZW{{} zp)9VpB<0jO)Dg*+pl2pJelED%ge4+oz`ty vBaRA*M1&MGi5`JC@s0=ejKM(@{|o>|4E{togfT`eqDc;903yUa0RaFzE9T7z literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_log.gif b/usr/local/www/themes/_corporate/images/icons/icon_log.gif new file mode 100755 index 0000000000000000000000000000000000000000..4a1983ae9022e44f398e3a9a0e10b4ac94956f1e GIT binary patch literal 297 zcmZ?wbhEHbH{jaY6KPTt^lPCYL zUj2Xj_WxbG{_oxUKOy12oZNpEmH*Px|KGj)pO*GNB;>z@#D6xn|DvM*g@pb;fBv6` z=YM(me`DkSK)}ENAsJ`~6o0ZXGB7AG=zy#M`H6we%|U>pprb~BsZ}84MvcYf^T#hp zSlP?=eVKeQWLv_@2fsKg4hR`M-?MkZ^@J0N-1pVQm{;ypHWiprnIO&Q&BHGtFD6p2 I;K*PN0Lu?w6951J literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_log_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_log_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..d31bd9b64e3c86a5eaf0bb647179307f5c21a93b GIT binary patch literal 297 zcmZ?wbhEHb;JD^`~T$0|EEv?|N8a+_FfuSGFzA3R0r`o6&CNmJg+WJ+P)oZ2%ZnO| zDd*KUNLbl(^nGEzXs|6o^WiVUiUX1c&-av0xc=Z&0{49_DW;W@io7B-DidUdyv4+& MH{jaY6KPTt^lPCYL zUj2Xj_WxbG{_oxUKOy12oZNpEmH*Px|KGj)pO*GNB;>z@#D6xn|DvM*g@pb;fBv6` z=YM(me`DkSK)}ENAsJ`~6o0ZXGB7AG=zy#M`H6we&tXD=hmKVL2^Efljv4``qZ>B- zEKr-@zi{K4I;%Nv)EBSpI3L;gUHHQs)%3pTn#j}VCp7=i^V4CA%$1E~V^LsjNSEew Q=HZu+7ZYhyaAdFs04Kp>J^%m! literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_log_s_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_log_s_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..fb2c05fcd423064deaaa9f620c95152ab5eac9c5 GIT binary patch literal 305 zcmZ?wbhEHb;JD^`~T$0|EEv?|N8a+_FfuSGFzA3R0r`o6&Cg*%frpM%{|S{B1|2m* zEyo2e{4CIz@1L-7O`X7;H|&cNJI+ToeNX-{$2h$&`c1^?^HUpt=!KcEMCNitGO{W# VG^EQ4Ig5!)%S#BiDL67%0|2;Adcgny literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_logs.gif b/usr/local/www/themes/_corporate/images/icons/icon_logs.gif new file mode 100644 index 0000000000000000000000000000000000000000..afe0104bd6140e76bc00736e4217bf08e6a22e7d GIT binary patch literal 2092 zcmdT_XFwBY7)}(6R9v7|Mdb`=Q6b|PAyEWO02u*6RHRxB$w@*;E+#?1ss+Vrs|9hO zf`b5+rL2IUh%sOSgdquArqGH=F*2%H2fa|y{wV$5_s88gp64Ck`+RpUuFke3`h3)U z)N2{)(W6IRUS7@3&0?{*tE;QLyj(87E0@b-Vq)s*>gwz3b8>RLy}chke27M)Yiepv zoDdck7CwFYw79rfCX=yPEQLamot<5fpWEBpW@NN<`SPV=@fET7nvTwNl}g#$+nbx4 zd;WZ+Mx)8k&*X4?($jAwCMHUyB^4DFE-p?~Dpm91#idK+4o1?xm+E#KlFZ)paE$C7Br+y1KfJjg8ICWfDnBUS96t;FH?g+LV;U zHEWC;8|&V^dpAD*ULXh@7a=&Vr*<|Z*TAG>#I`L*4Njx zwYB;CQw9eI4<9~USy@(En%df`mPjN-;u=Rs%YlIbLqo&b+RCh~Og%l_k>TN{riRhc zVSRo5s;a7nhB~FPA}J}!)s-}Fp1w*|)!*OW(a{kax;G)=a!X4~csS?m*;uu@nnv@8 zjy~<@=jZP3*3{ILoSdAQd4tJhy1BW@WJOU?QCV48QfUEVuV24%aBxs4imqL|+TGn1 zA0HnT#ZxMkt*xz#7A<-+HkOwsX=-YWh=@3OQh5LV{m4k(9lq9s3jH_1mXxJ5=rX=1T7GRg)p2aqK8@VgeH?7sF08$VDm+6 zmsNn_jtmdI)Vvt{ec*Zj zv%aUl{o32}q`RxLqrL5MYfE!eV?(`KRrjd2rn*X5Sy8T#KP)SiJ&@inxmSGmPEq0Q zf_zC{ZccXAt(%z{>1nAqeo0AA5+`22cJ)d^{N+m*<1U;(cQ*D+O!UvEPyO`c$rC>u zk2-cVGUEFqhYx*sFgz^uK!`{v*w2S~++a=+n-#bZVlo2gd-r_1d)GJqJN#@fmfL@pH8!hGG@HD+J0US(>6SqT`g zSia0?>5|1?En2w1&|v<&xpQXg&-zktrtTLrbf!;3qfjf~=pauS%3S+})BY_{Gc~AV z9d0=c^sSA-UzlAv4x9p}$($b;0BD`aQ;Ts5$CnjuCv~UkpvIi?OkLe)ti@lVIykO1 z-y5Jjo!(Q5v06BmG9;G-dQr9*wC+#Tbw=-*jWOH36m525!-~bGw%t|bk(qvTQG*So zG!$y~A#N%4w)twxJyxCB@P(r|Z%U7HdBC&l{@|Wr1#B@>N4_%nTA9 u6BZn3VrJ!VhzL+T+``Ri)pEn&(UC3&J+BaniHgVDC9S1cI29Zm7_0&H=@-WU literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_match_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_match_d.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e4c3645b34b46fcc70ba37ae2b7dbab3f8a306e GIT binary patch literal 843 zcmV-R1GM}{Nk%w1VG95Y0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui01E&M00#&t0RPn*NRXhwf&>2@M3`_PLWKn(HjH>s VBE?!34JvdeqJ1t0 OORCzr8Uvlg7_0%j`wztc literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_open.gif b/usr/local/www/themes/_corporate/images/icons/icon_open.gif new file mode 100755 index 0000000000000000000000000000000000000000..ac3da1476b7823fcdddf0830dc5fbc801870f7c7 GIT binary patch literal 62 zcmZ?wbhEHbUp-6H@0{{R30A^8LW000L7 zEC2ui04M+t0009*c)HyFFv>|^xfs{IiVz+k1{b##hJmIjQJB>#2k8q>a!n8R9px+o fpy#vHQlnB40?ZJXjAjOEaXP70>l4fEb`t|^xfs{IiVz+k1{b##hJmIjQJB>#2k8q>a!n8R9px+o fpy#vHQlnB40?ZJXjAjOEaXP70>l4fEb`tgPW@a)lF#P}jA4uW?ia%Kx85qPEbU+F~ zb~3OUEKu#6c4a~eQ{W0wm(Zhq9fHR0bsS?#@@vw{1Z3qP0hjafQ1x~CU9bab&X J268Z10{|*zJVyWk literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_out_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_out_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..879f1dac388aedfe9b6217850e1ff5897c0ac8b6 GIT binary patch literal 189 zcmZ?wbhEHbV2y7c?^?_0NS{rmUt>C>mbe*L<5@#23lV88(sf3h$#Fo-kg zfaF1TGO$`bQ0)spI3YQJQPfq)$t7Z~2BUw%+pWnwyAymFIk{pd&p#5e+ksJ?-TZaxEdiUo|Ns9C3}@2P(in&Uia%Kx85l$ubUiwVljVBXR>Exk>BMT+4;_Ff^MbRK9vDMymd^1oc)o}L6Px6 z>`BW0g7%JOF?rF#+=4#w0{lL+l;#-L1vV!x7LJW~G3&}$AJ#8m!Ys(TC7xlsdFA@~ YmS-%jPlYO-z3i)d?fQ+Is)`KO08fZ=vj6}9 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_parp_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_parp_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..7d7d00e06212aa364adceaaee2d017fd749cc979 GIT binary patch literal 303 zcmZ?wbhEHb)L`IeI3mLE@#DvL@7_Im^6}QKTPIIGdGO%Dj~_ptKYzYu%dJ0u{`~my z=k@E?moHzwd-vVz*I$9)$&)Al|Noyk^9&F$5CIf_vM@3*h%o4Y)Pn3}U|pl2+Lw|! zFJslZH=275Z2U@c@Baun#PLwsNSY-`ny205*v0_mgDev>j(l7svY1`UL29nU4#8QU zS!*?wu0|NG(m9m`_!qJ{Ydec~Afd}b-lF{}%0PFyS;8}DM)m9ajopV5R>kbO%$!*=t^_46&y WSX!S7RXTgwSNGcW8#h%I8LR<8Hhd-k literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_pass.gif b/usr/local/www/themes/_corporate/images/icons/icon_pass.gif new file mode 100755 index 0000000000000000000000000000000000000000..fe1bb0da01c67d7e747a84cac85629a052541dd5 GIT binary patch literal 182 zcmZ?wbhEHbUlLGnT$6EpbtT^Bkw{Ro(yp|1+FnzzP(9vVg^P zKqSac23F$-!HFrIf~O>AsJcdV9+`Hn)KM?`w!@Z7+ZH5$;bP)C@@T2yj7YKenGBOn Oe0h2#+nP8S8LR=;PDG;s literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif b/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif new file mode 100755 index 0000000000000000000000000000000000000000..f7f4c2007b0bd1651a3faba0b2028938c07870f7 GIT binary patch literal 183 zcmZ?wbhEHbIfZ|UUu&fS<1lh^J zYLXxvni9!*hGT}Rikh5kdv@>Jk8fYTd-?d)%luZy(%nY1@P3FI;RQM;@gr&5Y#g Tjbxc@qNva=*|v#;k--`OV8&L@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus.gif new file mode 100755 index 0000000000000000000000000000000000000000..2a94eeb93f43211da015b194db1041875fe809bb GIT binary patch literal 1100 zcmdT@YfoAS0KHUNVbd08tBuxzja{VcqO+T=bDL1KC}ItjIYY9=wk9>Qtc@!0MH7heSbA4^CwY8DMDZ706Qv^XENCCr7>2$h8@(UJ= zU0U)Q48Kbx{FWB3!(rEGG}4})(9lq))9H5Wl*+EYKE>+lA2yqlZha<@$u2AsVNqVvbwrjRaIp& z>7G9qO-?$LO6B?UL^Ao@%F0S)WTeez>g|KzViULO6ygZo8AMY*{&m&+v-3Z>HS zl9Cb{jRrw#9*@`C+pEn>EJUKZT6&3Y*cek%k z>2f)_T<+bw6+=Tq)z!gn*P5G~mX>@blTj=dd%YI9Tr@DikBvR5)9F%DQam2FDd-u+ zI-Ojldb+&)XF|eBzu!-#Qa3j?9FE|y29IZAdU{%|R+p6(%z3Bze7;B|>gf@(*{tpD z?fLn67OQY`b8~ifHZ?W1rKKeh2w1IF004p_$p2Hszeb|~00Pdw&Hwfj044zZI75?P zM?LxC+e3-%HH3SF1JI@6_XsF-_1DMG85mq|eKYO|8Ut)d8SlI+NIWZN3P=YJHDVI8 zYYv8;z^adG8oI98YqCnuY~=W)V%h0ug+wyySIVjM!~Wq!uawNYSbwLuvJ)=+@G$4I zmrK7JD6G*OhkPJm9P;OZFU%smR1Uz=+)b5!IV&l??I=(i>`4V%l zpzppv=1pZ~65;dr+i&T0Jp74{Y|fikLME2@12YSeqny!c^zNHPaAE$dpD6_g{)QSq j_z4rD3r{Z7ojx8%x_UC5ux+v&!{GE+YQwY9XdwMR4>RzF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus_bl.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus_bl.gif new file mode 100755 index 0000000000000000000000000000000000000000..8dcd7c006291c272c7c41036c707deb3887d6ff2 GIT binary patch literal 1096 zcmZ?wbhEHb6l4%&_`ZqZ{Q2|#{{9&m8N$NC_wV0lWo7m7@UXJ7TDWjwe}DhkvuCBG zqyhuIfFLI)$KKvPB_+kq&dS8ZWXFyj?(Xg_EiL=@?c?O+?CEI_4-b!ti7_`fKYsl9 zg$ow~0|OT=T9licd;9inQBl#<)YRFtXD?f}XywYK8#Zj%zJ2?oNfTRJTMr&Q7#SHZ zDJdBl8Qjp&aP8VP1qJEt+qYO-Swuxe_4IU3nl$O?(F3BQ0ud1r!NI{UE-w1|`g`{5 zynOj`X=#2%Wl2M0bz@^=TwI)uja5@q{rmUttE;OgPMo-S@#0gbj>W~rtX{qH*|TSP zdC7^1iB?vohYlUuxN)Plw%UOM2OJ#ie0+R(czD>@*}1s5R8>`jf`U|46`GowG&D5S z)Ra%2Jh^7gnyjoWb#?X9($coJHW5)#V`IZrtCsKGyLb8Wg}Zm}-nDC2QBje#wUvjb z>x>ywuV24jTU+bsl)%HwJ9+Y?g9rEf`S}P62^kp~g@=b^XJX6AM4)|Ho+Pngh~ zlaneWB;?@WaO1{}&d%x`JGRZ5HEY|pZS3sqB_$bmX4WM)OwZ&hqD|A zFkRMgk(>Fzal`lT5yt<4zLtcWZ>6nPH zlV}nv!-D0ZYyw>}4H`;^r>^!c*mZ)nV98W*PU%&93YoOSbRx2{LT2q=C91&d?eKNS z#UC3dIq9uo5V*wUEvDD^XIIghT}Sv>wW3m`7?y5+e7j$;apB^p7n&p|#c`JF{1I&n z$(AUUQc((OQCMnq_*b*yF=h?{6_ZCB51ySFaH(EE^&;czLn|Dn@dPYLP!LpqsHW6$ aNToZZnQ=$5&6;UvXQipBIcd_QUAuNED=Sr3S0^SW zT3cBJ1qG?9DyXWeUc7j|uC7j7TP-dwX3w5ITwLr?QBfHg8GH8ZbaHZvjEbB;fBsPr zIDG8b;hvs$At9lvs!9(}*X`T4sHrKlv9SdP2J-OoZrr$zmyeH)on1pi!_UvBu&~h1 z&Q3u=Iwd7VQc|*^vHIGzivLMy zhv&?hGYkw2|Ns97lB0l<5K#Qd!pOidg+T{o2q;f5aQtV`%)DTjFzH}3yRv11!i5u! zObl|Kb2t{XGjL2iqGF-2;8=@Ewi1WNhcu>s4u(}SoDOWPt*9n$V!5@gRj!$WhD3 zXQxr5&{U@Yp`4CM506N2*L?V*Dd&7b$&>kj#;oK8)+(lUS%*aog_rQDvWatSU~_S5 OY?4&43gF^kum%8gEG!HF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..ebc745718a3bf0b3ea032d817d0c9ab7f9c55f77 GIT binary patch literal 682 zcmZ?wbhEHb6l4%&coxs_`Sa(?moGnj_^_+1>*>>{Po6xvckf*RBm4Hr#*k;K-398#iv8GiT23-Mj1R>bkqT@87@o3445?&#<^e*E~+qenk|`gH#M`F;ELEnd91y1M%I?b{C@JXo`4&D^TT8b91RMFoZ@)v#@eRhw-w781aOMs6~VahlldI6H(x1VAEg{VA6_?iHKuzjuaGQbdgn*4GuH8z!fJR{ggM*D#StX9`gm3I7U?= zAys|*sHl*)7g*zj7YRHtxR4qlUKg{i;-Q1;fp$G9uBw+xOc)XanK)X{qHY>}*aPgt(nyzj(mIuBy2xv;O8<`jyJ@i&!um%9- C9yqK3 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..1c7ca08350708c8b4b72ad9838822f035120f2f1 GIT binary patch literal 1120 zcmah|`A^z+0R3pcUiGL%!y;O5owMjz=Zwc!Kp}p=90Gm?L98cuw0HzOrgR>dTD5po z*QzOYtDCSz@+j$re}l5A6N$-Y@TmmzVbtMrvGq z0S@56pQk{M#~b+AR#nyE^z>7ulEY+9W7zQU@E{Bq!*DhLTMETee*PGPvDw`{E6AAS za${qo$1%)iv+)2}kw~63HqK=V)^FTcD=GPkkBy?}lWY+uHrk?4jE|3xqR1#p@4+yR zn;S1QSeTK)bi4R4g*wIKbWtc@(rCT>^luc3P8gQq@vH!U48trxn3 zH~|2OpP#F%^OK4SW#HwTT;|v1<@*y8i@CY8nF75?v`|(y04F*)I2feTeXF&VOdg<8 z0|MU5#p4ILObCKX6JsXQ*b7BPECktBsiLAn*VO7C78eKTDGe~J#jvBr^^z^DqrQ@=; zdwNEAw5`5AEsM3-(h^S~OsDhaGBedwvc0_>%imv%pfn0a4#SVrm@Y0Z6Kv+j#xgHB zSO5TuQXL%~LqmOAVq#zb?$cAUA|s75Sx^vRwW_M^N~k#cgO7;B8H{VLC|@opurxG0 z9~#n%(_#2y2)fYJ*f=W?98OJb$Yc-5Nq5qav$KEhu&E1T5sIdSgoI#t{6jvb(P&5{ z(sE(JB#*}l4D|GLdtoxEGdV-4spkB=#)O2Wr6rwCr^2wb^9=M7sdTxra*#?95xgJs z(=AeI763RLj`<03MN+s{T&&e<@p#XTuCC!!dQVT!W?h|upK+kqPjVUSH8tki+V5v( zxNJ58zzoJSh{g9X>~1RU`1ttfXm3xe)$w?hm6c1?)z37Vr}g!Yjt&ghiz6c=s~sJt zYuP6!Cwu+*yWZJ3FBAwPBCK*bkw|P2 zi&y0GYv3GbXJ`NE|4`6hkR1T0fOzgZ{{(P813%Yje$?+c<-PQX@CzgQEqr+TsN>39 z(YN=d7p@jYhCg3T%<;-?WsF&0`Z`(m887fou5-n0Xx5t`oA14XE${kf z2M6J|TiHI!SA`Y};&pieGxiA!-PP4PLYd{%oesR!)_t4=$r|;uk4|pRuke_!A^c%@ z*G9ITJq%5Fj=ZKjOD+Lm8XNV~o0FmMY$?Cmw-FqF+Wee!-K)>sj*oFZ+)8f-z3;2V z$**k-KCY3!MgC4B0b6w6t%QMbLT~L|k=!*Z%kEK8Y<`Tw9$Js{`NBU?G!rOPM=Htg zs;XORB8_jUmrGhxh$Z?xdXnAdTWfn+czN+BCR& literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus_p.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus_p.gif new file mode 100755 index 0000000000000000000000000000000000000000..eb41284aaaeaf9d9216a2c7d0bda260e83db8d71 GIT binary patch literal 1087 zcmeH`+fP~t0LBk;Q5JMwSTA4|JCl{BS-N$#Q`d;r7SPV=scAP~rVopYWQldjl%z2v zZSB^Ftq&9jG>VpTk%U-*f;Gtfa=^p%aM?l33b>(2P;q41>Bi{)vG3u__xQ^%`Izi$ zAJ_Ml0cF6x9B?=s3kwTQr_*dUV=x#Zk*L?}gTWwzAYQNc!GmuR1a4|-G8&DKAM*o& zWeBnbgUfzDjH2l9@GzB1X=`g!&CCo94H1cjFbw;AKDAn<(P+ZqaDRWlK)|EZt23F5 z#bTM8(Q$z;;ya+yrJjg9qmI+jYsB@#((ZB=vgg~i3iY<5p7l~hzz zq|<4wR)wOzY&L7L7&x4s_Vz0Zh2r(WfzJmy9543w|H|{CXaHG(bGd(D*xA!_B^pIX zMn<^YzS2@sGPyZ1Ax6<(!(oKW9q@SEOeRyUR>)-IU0q$NR7#~%4Gi3tX^$%IV~b9=L-tf&z=)9_SD2f#w0=yUQPOj$#Nn}KSj$@jp^mDi_lW8K(J$+4({ zJe@28JL<@k)AFnIyU)&Bg#K;(04ZoHVr)LV{C2)}z&lu{k-ittpuc%Z;sA%9^kj z4n1+BrTV0eRnatPr4Ra`KTbWh9!g55YDGLpF1Osp*?)1L7vI;P?~6~yJup6@Bp3(= z{+a@gj*dDyI(Bz=H5$#{-kv}pV6)k$r>8SBGwbW?6bgmQ<fYY&#>U3x=4Mw{*ZBCj%jFUZg)|yXBoakMMU9M%@OZq^($coJHmz2BaB$#s zI%j90{r!C^m8w)KcXoEl%gY-ZYv}+sw&}^PqSeWkV=>fq6GMPL!_C7f|xuT*Bi@jmD&q*ZglamuBvjKvX z27_UF*``*jFP~^M!Lv09$%PYSAF`VgtRngmk)aUua zZqg&hY$;3z!pFb;rPJ-r{0jADZ4TgP@`0bNmt|>I}5wk#-mgeXCCI;|yf+@q% zkNYa%=t)vTQV^K5_I0sdcqap|#_8cL4e0CsVKvBb>^ce4{o*hwx+(j^J8rU3>)~Yi5plJ9zT@x zakBphR;Z2E-gGsT=(k;b8+e;7e!%j1XD7VDu!vW3K7CruAhtV)p8c!;btgB<2fxFR zr$*!-hxK6`NfhBkPBb#|ZhfWgoA?;CJPF%W`KPh*A&w!bcpfl;jxNWcGVpK@D*z9* V*Mr{)kS@dZ#(z@N@m^j);(xAOqequ6U3&if z`OB9tzkU1m;K76M-@o6wb?fQVryoCl{QUXznKNhpg8{=p1I3>#j0_AR3_2i(fZ~LK z{eMFUudl4BFdq|#XSct*B2S2;x0^Q;vlP3Bhre5}s4QP#;M`yzA8%zTPd^q8-e3<^ z&-J1#;@;|0xU7PFgBA7If&~HVx%iycd z9H{KgrXbJC!R7Dj?(gI48{j3u=)t*$%}2{IJZ5Ip~eAz4-X3z6b}Uj z1qKELhDt<%Ffi4prz9jBxqg1DRZ@IVPPJ}s&zP8~Oh=JEK9MyvdP+rX5D=T2o7AJD z$BT=lSy_BKI;^a$Qx+D#adEX-S%*MCt!QXxDJh&lI*v?8nLRp!K0c^iT&rGQ)vBtw zU0hB|O22AqykKC%dV0%~leoCJpGQWnQc$c=O2B=68yggVKt9T$p(7(2!I6>Nw6t+D zGPPV>RsaA51OqTIFvFmrt58i@Dk=;N3GMCe6B7;`92Eov1Ofs9;=#dRIx|xzB||?y zXJlk=Z*PNITB}e>5fKr&US6qCP_=S$yk}>xR8c$t0KkBNd>|jNX=$`;Yobt4qgGa@ zRaC`=g^!PqlsGuAT3U2SLwHU~XBHNhOi6AX9hFE&c0oLeJUp;sVu>v*;KamwdV0fk zb#6L0si~<;M@PbpjMmoFTrV%bb#*N*EtEJjpI1|bM?<>0y02?%xoK&$S67=rJ)fVS zg(@kGPfV^@R;Wx&s!mO+PEN&lch|12oKjG*R8v|I5S~OsxLjP9R8Og9W-%-*e|~;e zEh@ijYmZV;wP0YiVq%6rKcPiGPfSc#Q&V_4Iz2r(tWZ#)PD-v)N+Tm9p+-W&eSMfb zJjZ!?eL_EtP)y38puUxrx^HitMn*gw9JI8w+qATuLPD23Jjk`Rs$ycGL_$yi0KbQa zu2N1_C@5eyGN(&Qu~t=LHZrSFOpP)xrlzJbF)>d{O2C(ws#;bC1_lZW2!caC92^t~ z2nf&5&;S4bA^8LW00930EC2ui01*HY000R80RQa~AZrS$TMr&2NZ{mBsY3q#g*YRE z)E#oa+}!)-4UCW!h7bv$cMeb-II0jJKw@T{3nFXg5{OUe4%i+KB=&PV^j;nC|idbO)j7d7LXo;j(B0lpuv(85rR!Nw}AvVJ;!KGqJRPu zE(;M_0QjH+-4M2M9c{@x~A~a4^j({{#d8JG3Rny8r+H literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gif new file mode 100755 index 0000000000000000000000000000000000000000..9aebb032dc71ca41625bbf47fee7b0d7c5323302 GIT binary patch literal 1109 zcmd_p>rYw-00r>N3RDCuY{scsj8a&1bBnsQ1vZn;W=%_D zgO9~Wn2xm)Uno*}h)hry3>CpS0Y&j%9?C_7P!V=T&~<@gUB~D1 z`}_O1wycpz1VNDb`56+4R9jo)@wlwkRk>USLCa?x4sd2>W?@0a?d>4A@bcx6R4P@egu}zbe!mZfU0&~& zLLm(V{4ZX(x3{T@3^5~sVny95G(&2F&SY$lVA#bOQ(4Ly7Iu&Sy` zC=?ov3!|f>eSLim4fUbWf!pnHI-#PXJcGetHZKhf3>b}*!Jr2O*Lr(<7Z(?!(c{z8 zD1!K%PRpZ5O=|U&%e5K|2Jhbe#%^CaIXN+#XIEAXQ&SQG0p~jFZ81X7hRtRL!HuS- zPrJH05#*0>_;7G=&}3Q`i-!ybtwtl;+_byh?zy=+7K?=-Hm6h9)6)gR*2&3<)>dw3 z=PeM_cXZrhGMTYhRIk_V?d{do(RsWsfuMDKoYUOgOrc!ka=8!$jf{+h!=cBIzf4b0 zZ)|ML&(B|9Uk3mnkw~27|5L_aXcPb_0qXhu^G^Ut37{r7Z8NC@`_UKrtWwbrm*ix8 zHAVz|{iG$CzFqis-EH&5lFZ6axRs)143?Pk0D%#&9bH}cU)*$TRidi^RBn59_IZ(#C#I5M^+xx5}*L(cpvmHQU8klI<9y_E7n zQ|9-B@2ujky*@~^uF%Ud$wiz(A$%{06IbRuz4Fjsa%r3dpsSywvdY@hXyL5STC;wl zFvzsA?%CVxcNpEu2Q^RezbhDu;tK^gd~pgr<6B*6UwLW^YNA5;_q}qiVrSS_nv#o4 zZJ|#RuUyQ1PIxVEB54`h6T1H$Bdzk^yzH5O;uEl({i^!M?jCZsnDI->&;E)F41g?u ck6dTDP8Cb0jc-cn(Xy+6?mmD+p@8@Q1M?o&7ytkO literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..4ab4992a10cf7060d29a72b8490050c14b6c406c GIT binary patch literal 694 zcmZ?wbhEHb6l4%&c;?CQ_3PKmmoLA3`SSVm=lAa2J9X;R#fukz{``6W{{3gqp1phb z?$V`8@87?_b?esY)2Gj!J9qv1^?(2V9XWEOtE=nm*|RTRytr`T!uj*(A3uJ4_3G7| zH*fy>^{c6=>EXkNw{PG6^5x5i4j#fujoKYqNfuI|8r z1GTlad-v`=di3a{M~}XJ`}X?v>!(kjK6vop`}gmkKY#x5PYghoA?yCG&b^aS=P|DfX)FP973Et{%=TEbQz~i#V*^)jc>(Y&}?* z6izHs=QB2E@^CP;bz*dqW^k6bbJa3Z)`0*Xjl|9d~8->5Nu>%um%7L@Crx( literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..7025d20ea0b1518b7ca830f576c77ef8d9ac7b93 GIT binary patch literal 1135 zcmV-#1d#hjNk%w1VG#fk0QdR;tx{5P78ZvrEG#T6yOjY2{~LNUg8c$-pExO8$65fMEA0J2(F$B>ZBlaq!kD!sk29UT`? zOiaIVaga1KNec^;H#UA!P}Qoce^X4FLqpfAtFv8Qz-()$OGjH*RaO81K|wHTEG&>x zQmBTv&5+ZUzPh*4E7h1q4|D0J2t8 z&(F_iWMncjCRi30d@L-%k&#pu7OzxNCnqO!F)>n3O2B=6tW{IASXRP)eWOxR5)u-P zF)_-ap>A$&e^gJHQc_6(08mg!K|w*VR8pc+Qif7evQ|=#JUn3r23J#0m^?IiIyt;y zVZN1>e>^;!R8oLcPP)3fyKiooG_ zVq&FGPOno=xn5p&A|i27PQ77ZX)!UcQ%tzHxUEr7pP!$HKR;S5ED;e5wS0VoCnv#j za9JuUF8~0ON=UC+R;5{4!ftJLARvxJM5Q00960{{R3000000 z0000000000A^8LW008;`EC2ui01*HY000R80QK#8unG$wY6uW0P~gf5J`9BP*^{P* zOFCh;Ea5s;Y=#&VYf3yAmIq9QL}nsHVCQZYws(?lY@_naMv@NWzQrRWB8`h5vb2z^ z_NPz^UGU(TB5;5h2VN@V)rf^E-#s>O+L#M+;1#nfFS5mG0>Vwc7LStIA+UhKf?Lzh zF$p$LT&X}FV9~-sfI*}|i@cD^K~GsXG}p%90S4|_A1lisREj2qh_@%|(CHvCC5i(8 z06GN_V5HTqFC)6t8`Tb3Gf@Q!02mFyK!P2bObl?8i&eM)03;*`V8DO_W4$t27%)d$ zoFxK436Kz=fD!zu&!9xRvG!VijL*$bWBY*@106VNY B#V`N> literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gif new file mode 100755 index 0000000000000000000000000000000000000000..4542432ec8f314da629f445fd09963aaad94ba65 GIT binary patch literal 1105 zcmds$+fP~t0EZ7N1zW9Cx0yDkYZ_}UnKRC1#&&&JyT)phI#DC6g;W=t;*eCk*#;9+ zX))8ePGu<*1w~c_Efp^aDl4EcvD^+E@d#2bUQjLy1vR^539J9czNcTlx8K8ewWuKf zd{r`#4E#9*gu`JF1er``Fc?frOG`{l#9%Ny9?$3VDHJbREY|(|coK=^^?Jv~#wZl5 z&1O?56mGZM;c#qhY(%5c-QC@RfdRQ(URqij2>4AVlgHz+*(}r3(|*7I!iA5XKNmpI zEQiAp3I$%T$K`VE@9+2a_G&a5zuy;$gsQ6v0)gP}-7<-!4+OPzI(>MU2SFyCPTSGZ z!Q;`*W-|ybOiT<}t=jEvkJ0$bYBki?m#?p{uCGIFZ6v8w>hU<2mzNh7q@A73csyP# z?p|G8)@YP=yIrr>na!G5?4QxmQ4*y?(2S#4?9t>ET0))9IASc>VqTMMdY0 zMnghE!sh1Y&dv^--LbS}0l|5-T0Sx|Qd3hiH#cLk=m!U%$z-zJ+|1_YX0ce@)z!sd zJh58MLZL7e3b9yBKA%4`Bkb<}H5^`oVX&#GsjjXJf)qp|5r->YSy^dlz!?nky}hVN zB#Om?FlE# z#>U3_`dXt=pPHHq!;2La<&j8)N~MmCaX?VHwzhWS#Cv-EyxVQVVzGI7c@zo-004u* z5R1j$j{g&<|3)GJUXBs4`(1>TK#{ zKG%2caYk+V^|~aL9(_9b%rWj4NHyYe(mS0){K5Fcalf5y%EuxA^t(q(uf+Y)LZcJN zIe^c9gqDFi>iTKmQ{MtT6Ok`@^ca{$;Tj7$nD?(%pst)j;g54KsRxn$iIZ*CLR4JE zk(8%v&*qF-8Q60~o%ImPI%a<>2-MV%2=FNNe?!A8f z`u_dg(&9o16FT+c$Ua+`D)09yoB|_U+p@ZrrG=tJ}MG?~)};u3Wit^yty9uCD$2_s^Iy zW6z#F@7}#TdGh3m6DN9md$(=d*4^D*TU)zf!-l6%pFVo@=-an%moH!b`0?Y9A3wf- z|Ni;&=O<5|oH=vmKNv6!KA`xMg^_{5k3k3IG*Fx{u>WuH6Y^BD<(CxUX6kl!QQ+}Y zarJN&VHW3PWOVlMRaKJo@|x?*%IYd7&cx2ZE#%9n&$M2ZLCjTo3YV#mr>}ygx33o` zCl8P3B5q?J8DBv=7hg^``4fv|Sk!she4QO!Jl#B%nZ4v(y>%pP#P6BAIJ0_sy0ZyN zsoAqAdUA=Fm_*!Ybm?Sd=jBMakf_Ym$;Vu9z+e+Y1Gln|QC3RRMowWRH5s3Xq6M8B z)O`C)91k5)p4hDFt($1+;COmAYeKF>!;^!PlsWozcD^)p6J~J>kozH7vckPzwv9nz zXNpR|LYJ8uo{k5Y8d~_xWHR`0LStQ A-~a#s literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..15e0aed9a8e917d8f85e13eca9e25e1f838dbaec GIT binary patch literal 1131 zcmV-x1eE(nNk%w1VG#fk0QdO-hb$~oQc}5HT`w;qYAh^q78WclAfTY2p`oF@VPQQ0 z0MeVAY!DE+UR}w_$+})%d@L+1EFqFMHPoY{u~t+=006O7Q@C_;lQ=hLQcG0;0Gd)# zd3kxRQc$i^Qj%0slSW2?Q%(j32Dff)fK*JzczDNoc~nqNR#H!EfGlas%3al(Cls!~#{Vq)OL#7G7Pwp&}LRaD!ww0e4aq)0{8s;aqu ze%Gt3eN#@)&(E`3S+8PZ)yK!dcXxhLQ8P0xykTL9Qc|QyL^?V%0|NqoQBi(WO=uPt zfIU20S5>W1PpnW$A0HU1Vq%?CQoCSay=!E^ac`nbOp7opSXfxJSW_@CFi}iQ|Nr`{ zUS3iF0Kt)wuT)XTkdW1Zn zQjR=4N=iT9-^atCperjNu31@|o13s$RjH||XA29zcy+Z|R^q|ItgNhHU{A1VX@65s z&d$XxEg@MdDw$GJQ2+ob004|IFs)Wpq)0!?lasSuU1t^+xpZ;Lp`n6AL1q#XsZ>+X zn3$DINPa9Vy1Kd;006kSxWmJ^kB^UhQc}WL-_ItLCQK+p=>4n0BgnR7GI;{$AnQ;NVzjnqMD2$_E>2t zC1OtuG-0wKNpR(ofKKc%bpru~Nx6Bp!r=&YMt}ehz6fEM)@V*1K`(0fN${XSg9qLY zNoa9SnK5}^=#9{XO@IX{EADLJp`=eGaZ65I^VBYltQ3jjO#(Khiz6#-HbuEm#1bfQ z_)Os&O$Hw_bqWHYAhzuo0B-jH+?!qC-n$K{;lwH=Y4#cbu<$WZgHMCDbpiNf!6JkK zr49fJP$&R^2DwKr0pr3=l^xsnih=06Qmu%T53Q literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reject.gif b/usr/local/www/themes/_corporate/images/icons/icon_reject.gif new file mode 100755 index 0000000000000000000000000000000000000000..5565cd67d267ffb92fa0253b34ba929d3a5e62d3 GIT binary patch literal 193 zcmZ?wbhEHb5u#s2^M;s4vt{|`+5f7$u}^Sb|Ew*7x(|No)o z|NHv?@9X^kdhq|p<^P}f{eNBc|Gwe>AD90F!CfT=LO}5+3s{K`hy>Zmz-sq^F(Ad$ z@YoLr)h_{zUwMSNeGhxPUNW(?^IUS|vu}$U*Fg`Ddp%nxDa?4`%c9CY>A8ZghqHla NqlSuSqZJIwq4)0>{Q2|x|NsB*-pynn1QdU=fR*TgNRXWjtacBK z0#ZB;kN$8_{Sv_NRX~{A_lURaB@;_K&m~7b`?jcg9gy(2*Ryq!LdOeV7FG61&lOBP QoDDP+15`X4oH-b*0Ywy4f&c&j literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_right.gif b/usr/local/www/themes/_corporate/images/icons/icon_right.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdf2d8b8005db78c3620f357b5d5149dd4402274 GIT binary patch literal 1117 zcmd5*=}+1R0R2%I9@Sc%8s{{zZm!MNb=CMm(am~G12Q#TXlJdaTScsE-G^4Tsfa?+ zaVj2}0wQx#0~MxOMA3+Npa}XCh2e>!Fyl->!=~|I^uO5q@IJo0ydx8t5f@+N5BLNB zg23wPs>x((Y;2sKp6=@E((CmY48~&FnwpyO@$peAl@5p9VzD3)2%%8ua=D6&i%UvM zFEJM@cjJz?Ci{Lw=XX*udlDy*VivBER2qh3Iu}k z@^Yz^KQ}jLwQi4$j3^X}lapf#rH;*JfuM4BcGh4t^7*uu)>bqcJv215v9V#ZS=nr6 zWo0Fo+h8#0S5{UA2M2q5dj$gK1ju(kUi;Jr2>T0caY<_-RA`vGgC2eo7n$0W0 z!NEa6L29*{&8~pKpc>5>2+pLZr;m>I7Zl{FRH})I36ba*xm=7wA-UW(HkvTE-;kibmfx}@53DI6&UIlK& zJXB6jjzl6EAD5Ms;G9lpcz8GllfdKg@c8>ro}jX`v%7y4(r69TR}?;j3d@v*=0Ea8At}ff#`%9q^-ntd(1_;h(W+K|!S~VJVRaKQx z*bx}$XSW}?!!Vo891gp^z1?VBdhsIP;c(DsKXi9f`un+u4hNn7Gl77QiHR8=9@c87 zN=x&Pj*j~J`b;K+OeWsj+cO#s2E$@YON)nxM@Cc7 zWqB7D7dRZQuCC5zv#?k!CWB$MTFvIo+}zyV-Q9tK*9Qj&&z?PXxz63yHa9oV%*=Ru zdm|8^93DDkGFe7OMq*+j008b4x%q#BYbP)W0D!>Fw|?G!0`PPJLhd4wlmhpF1u%f6 z{ftg85HSY;W~gtB=h+fM)ylz5Mxm2=HDqKn)`GavD+c$)2<>l(ZZUA%%VV pwfOIV=x_Y5M;l?ZedT?SZ+|A5c3AQFnlZ{{YZs3S|HQ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_restart.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_restart.gif new file mode 100755 index 0000000000000000000000000000000000000000..e49fbd73c29915da23e6af95042be61c76d005e2 GIT binary patch literal 1120 zcmcJO=}+1R06>34QM5RZs-=ltXWNw&0fYbvpkDj*(c z72|~jH?6g)%Z@A!YyXJ75AW;y^wQC&tFeSYAQ1R# z6M(^B2n1q%eO)9HIh{@t39HpAaX6gWY+hbo*6Vdfqmf7?R#a5*csve=6A=-yv$NaO z)TC0)=j7z*_4?xC;?U60{r!W~)KsU_m6@3t6BC0*qqnzrz+iBEe0+X>espv+gF$O- zEMHr*4h{~wTzf9p&dSQl>(@tWwOXsy9vvN_P$({!E0sz~q{{B@hOn>@0wKd-(AjLu z-Q5p49C~76Vqsw+5{Vic>pgq+RBUW)Qc@C$RE0z$`}+D!Cav9W-QISTmlr&EK+ew2 zG#Csd5`oKQ#l%FC$<;dDFH1`%HoJ#Tr}y;q3=MT-FxRM53J#Zi^JX3flaY{+AP@*7 z5;2)fcDvube7SDsj8}KcJ>(>oiRNvHyHF&Q`7tVzb!1x=jCM&4-4+zEps?_OG@&U$|dA;D(yF!6i8%DYb&jxp#X_Y(dl%#xw&$=?D+WD;cyfc6+s|gFxV*u zqt#?G*4Nhx1bmrHR$Yyoot+&R7>J9DW3!vzv$yxVPB$l$egEp!p~0{~CYRc5iy#mP z3WWjy;C8#;`~N2VA5RbfYyy`*gg!h0K-|D=VCoxa06aB(2GXHQ?_{Lk{&kXak_oi? zo%Vv-3E>5_VE@k{&72F({g1+)#WwQ4rcjhNR zurn8R6iV_X?#GBg`}Gp%$a>3_Agh^3D-9JP$~>!1gGiPsC@qTrnOfT}E2x52*ll~A zPi~#LR%lh|PxAAGO!ix$!N&RYi=Wl#H<2sB9-p|{DJlZ+aM@tX_sNbDx zUT;fQ2E?u_wo!tT9|PK5KXiRNT@&E-w=x8P3=+DZ>!08L_fPL{&V|+{zxDPXUGwcM zq7V$m&N4;si>Kg?FI#gl)OQILBjB$?!a6TwAuWD1pZu|!KJmyRva9qCg(1G@dU!rh i#5SJ@+=Q@CM2r7Wc!t1(vB~Fn*ExQ^H#|Loxc>ll+5?yX literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..a5d6d7c991c2181a7bea03032c506b6f0e908864 GIT binary patch literal 1115 zcmeIxTThY!0LJkbL3%Azw5en#oL<=0lC>_VSOcb&>oDA$x9PGQyRo*m)`bZH5@J!V zw(YPI$Ei>s=tm`tY6w;`2E84SkQn0$0}RH0B94920MA(2Q_UtizY z*ccA)H8eCBjdKSF2Ll5GUawcLH<-;9iDXzT7O$dU$x4!{M~Iw_7X= z9e?tjomQ)r&u^TcpV#ST$H&JNigArbTTxN5vEg?*U6Yf_si`Tu-F|p@NTboFr>FP# z_m7T_PX7Y_`zH&e>?2?RPzKyQtDSuU08fF~9E`3Ms7t!k2PEgxi1c`ROb>v=Dw)?_ zVDp!;`EY>zT1jCDK3QyW~it<3>WH$!#M;jMl2FF%fF$MkUYGBO!|p__teHpef5PM3F08i z+jcPN+>Q7ZklV!I0T*tM;3!yj3?cds3xg=6#o}2RTnUA*PE4nx5|VRS5wI)h#LVJK z7c%+*Nd9`OP|0ORMG(@7sV&*x;eBs(f@dUJ895WrA}x~#7|Sn~}{b??{loZ~URX8iNt&p-eE@So?G zz9{|q?`NOeJ_kM>c=`LK#ubfQ-)|K>DyVu=_3PiS$a|4Dzuzo*T+;KR=k|}=KmPsr z_y6C;Zx<_`RLEVDv%GG}c9xCv9H;J8-T(jpGn`?dI#B%29pM|G;F4I92&8T7D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBBbrg&Y3=Q-RjPwnSbPdg|jE$@e3>2V1320kUN}5%WiyPD~AkS7Q zqokz3N?*Ucyj-u`STDaQUEk2s(h_8bk&!M?g>G?WUP)qwZeFo6%mkOz;^d;tf|AVq zJOz-6iAnjTCALaHmqNUdTL3pUuUHT49lhlIT>Xl~0)0b01CWucqiS6q^qmz?V9Vygtyua}vbVr6Dx?&9of=H_bbYHVoeYUt=> z;b>uQ0TyvGbTfqMb;(aI%}vcKf$2?w>oqsPsTY(GatnYqyQCInmZhe+73JqDfIV!L ziQ6qMIL(9VO~L6FGgq8?^?{Dj2SqDVG{b~|X$QoFCt4r}p6pZefN8x5n5Y^5|NHyr z_phHnzJL4r<@2YHAKt%v`{wnlmoJ__d-~+@qlXXf-@AL~_N|*Yu3x))1N{AbeZ0LqJ>1<~U7Vd99qjFFZLF;< zEzHeKO^l6z8A?xAM_Wr%LtRZ(MOjHvL0(Q)Mp{ZzLR?H#L|8~rfS-?-hntI&gPo0) zg_((wfkE*n3%In=0g<56j)AT4z(EBUEvbGL=Y<9;N)y`x6kS*v=eaW+&=7LvW7pX< z`$5Q&AlJtvdXyg!YX>H_`2&rgO77>!mh~-e` mW65xh<&l-o;NnsVsf*y|W>TCzhe45%iD_*H10$m&gEauM4C%Q5 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_start.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_start.gif new file mode 100755 index 0000000000000000000000000000000000000000..09bb58fd43f6d5fce323eea6198e167f1bcef4f3 GIT binary patch literal 1119 zcmcJO?K9g40LOo+G#2#cd0AH*d9fMOa~4H{R6@j6^ekMLvW1d_qUxboJM$B%21y7* z9}@Lc4=LAKMa0mFj3AMpr!-kgBDT2FdN{l7cDG%|AFq6ckidRZ=MN^Yin2d;2ES zror%1uh-dZ|3*ee-n^MlrBd~JeMLnn2v*kCa!4dnNJvP1ef`nVkxXn1{z7 zceqsAClub1$@+G8-+~}064m1Ic%2Taso@d`gvrTCEY=?mw-X4s6B841`HvnR9u*Z8 zZEbA<0cZw;!RMEV#ckKGr%)&qoldu~F#i0x7zFdu($ccBu30Qw27~e5y?ab1V{mY= ztSq~)udlni)?_jXg~Eh{1dT>>c(~Wu*)=dA$<58(+WNh&u1>3+O-V^otCc}PLBqqt zznx&s$;rKSE3fK!b|w4rW!&Q8qD1mkEEaP(cgbWj4u=y6>W7AgAV`&&$)HfekVs@v zQI6GW-PkbA&CR_!VFQD~L`6l##E{0u#-vi2Ml;>f(Xq6&%;VjC_>k-A>AAVNrBY3k z$s`DZ&}cLWe$(9CTvvBnt9_A?K~t$Fc|6|uco&_1WoBktuV0|iXfm1H!NEbH7*Z;g zy}iBe?(dq-n=LIZI-Q!uV(stmL(p7wbaZQLD}#|~wQi@U)2&tujYidIe%juC-QO?r z^70ai!~_C9KR=(#y|cUf8jB4?AmA)k+Un|(P{=7Q&3^Odt=YWs=#dD8a^2W4tJN>; z?d?}r*HTkcJ32b)bo$7MjL#S3t1GRTKJA90+ zUQ+=5d~a6qci&6g06@y{Ddeh(6!x7LlP|3Iw|I*XH{d9j+ZVe&IP2Ml;2$1L5k`>( zh@Tb7TgJy}zb+rtCS|wS)7^bJer`n9W^{zW+xyQs;SWADnSm*wj|&*W0xKP%DOkYy z5w@>)#x`oi&hLirsrSym8gw+ayQ?6x0ps6G?w%)&6_1{wISsp-tLstDpn}(zm$Hfu zE=omRt$gAlh*0Je0~>g&XAusCjH}lMFFbJ^AVr05!GM|v_Cwg16^uNn$M=ijq=OYg tbK{lIOAHMF{QX`p${!Yf=(%sxqeBVz8>2sJB~!t3FaJSbLc(AG?mw0!{x|>t literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_start_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_start_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..f58f11114cada2854d69e527367c5c5354bcbc82 GIT binary patch literal 1115 zcmeH`=}*#e0EfQ;IxsbD%rL8IvsGIe7+Yqofoo-3mNi%TD&1Q1rB*L$Z3IYS3d@cy zyb+J#g*Xhusr)1yB8OaZ=@RsVNDKM)P_% zW@l#=3WeM4h9F3*)#>#Hv)R(t*0#UDFA|Lz4D(;V3g_qNeLkPZ;~5?vZf|era(i_; zeMd(}eSN*%?y%Wx0)fEcaIo2Ii^V!JGBPkQKq8S83Z>a>Hkr&lJv~zCv__-la=9BD zK9x$%VzHK&mzhlF`npFT7-?>9{%sKog_TN`Og3Y)*&~st-|w%fsgcWP<#M^xxe|#) zg2CX=zkvVzlLxY5hywu7!MQ(cf0_WupWx8FtP&)Zm4G5Opa?($hovW%V+d{pJ>xMx zd!0=FPENd2`-o4drN9wzSOxB0ri6Jm5vzR3;S@4aMZ3|wO7?Un`t>)=E9~jF35ay0 zFXe;mVBCo#4_;^*IBFUKo3pWWv4EI#37s>uj^hAK#$jZvp`dyyEdzxoW1s(kzl+DA zS(v1c-o&t3CC(p|b228lPN=&VAyR!Z5g_ zSD{oS;(Z?a`Zr9GwKyg1!c{EySvKQ%%K4`n9+OC;C%w#nRN4`r@NrpKHH5=M#4ouI zuWhl5Du@71286tnTmU{D$|Bw7B|_D(^fWcHuDEOlb}s(pZ6qIh%fOc&yI+VToXLVH RFb1H3d^bc)rXvvG$}fi;u$%w@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_status.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_status.gif new file mode 100644 index 0000000000000000000000000000000000000000..a93bcfb1419a6df2239639083ef02239b926416a GIT binary patch literal 2150 zcmd^AX+slN6dg3ONsAlQs;xtC7qS6D20~0G35gO41jM*hLNbsD$;2d>XsZN?fQn#1 z&{jhcYo%xxC`iHL0;q^=E>I{4VKG!usI{%#(}@-BhtfaL`{B)dZ_c^PymQ}#@Hhcf z(M(__@U$G5J9k!NV|{aTgP)(DR4R>#hzJY}?C9u#VK_82w6^vFlgW&akFTq%@9F7b zv)NQCH9b9@$K&nVwM(zxk(ZbE;K8WbJlNdaER)GjpFS-R2!exy`}_NAYHIrW`p3t| zo0^)&#>V^l%)PyRN+qgN$?0@Dhr?mBIhB=_`}Z5FtIG=t3jF>3Pn;;WTK}+E23uNM zq|!Kp!GNOZzI~ZVNl7_5IfaFViHS*0PEH942^0#&WGXBvDM1kA$&)8tT{qg=t{II+ zp-`}C)25IRI4v!$y}fbc#;7@ST(h#Wj7CFPSlGjdk9vE1V`F12mJzi&(ZRvNY#!+D z?lBtQvA4%@xm+482s2+_-=U#d(km(|+}zxXi%-HZoy+Cu zbXpv4DxV*E=S~NM!MJ(z)`0^D^7HfQbXt3Rdw2J32qFy(40U#PibPwEA2*GTJ~A3} zD=Vv#ljU7qT?Y?l4-O8+$0OOx%b zr2+t8wOX<9|6m^0>FfF7AWNhXVb37CPAL*6A{sCbNsuXM`0?`>@t{mX!^imXNqi-Y zNM+oeDnzg|EK0mHQB0NK>A_%-4${e$azrBnb@C*I8q(45A_*FYK-k>2O~ixGAeuxP zo?&|d+G4_}3IY8HByTZk6$xBLCXju6u_o{WDI_w9NTLwQ6mPOWU-%z>y1zN3% zL|*3mua4DGJCq195>cbcDlvk=J#C?s5UfH(8dMd9qDd29FnM?xtli*c8Fic|muqk9Rn;Za>ePEU!gAw5COJ%XB z6I>Q5PL?AI%>-BSl1rYHYZHQ8iA821D%o~K!cn1e@L9o-Y|>nq>`DDS=Sn8cg~^$e zOT>~P+K%-f$2_rxX~#BwAzEzlLiUIP)4B>1wVn0PKYsu1*I#~q`qPg;Jo*0dcjIG^ z9*#b^|Lut7-tf@ifVsc#Zg0;w-CbXIcHFsr>t=gfYfJNurt6K@u3l-Vue*Hd;)U9; z&ev3bS#_?m;*0XK&p-S0le1?^KQ1}_(Wwtl7N02kpwM*u*!%AtJyMW=I4{?DC@1@1 z)`9)|GBeWm8q)Tp>Qi>_diR~3J9OIZ$r`n4n-W#XlM=VeqzUneL>woI-SYP4O&d1| z*T<}jjuJ#hgufNW4_&*4#|`1ISum5anjTCG3WTTu{;T|aeJEH%5xl)tu2{Zo>5|2Z zJn}HRT#^-W!rs?wxBl3UH3QS=^adF4+aLT&S6g#DIb0?o}4i zUSzlQ)u|-OvKi?&>=(Kff;HhGvrh_&+@-4*XX>3j@!!WfN7bcgxTYMH@B|*~?0B<# z55>+H$;@@jD+=FJxrFJ3`@oBP`Q*Lk!%IHdaL{>1k)xN_tVIhR6g#xIxKF`Vs1_Th z=-B|JHb5zIwF`!EuG`%J;B1VmV%fYh9^=f)ZJVptAU~`2xaLl xUaqS*XM3*u_I66jUXg?Io2#Msz6-MknyBRq0+!ES+mag%*gM9$kZ?F4@GsHC5SRb} literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_stop.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_stop.gif new file mode 100755 index 0000000000000000000000000000000000000000..922addc5ca6c5a27f4c6776448947662861f2191 GIT binary patch literal 1106 zcmchWTThw?06;%)^}e7^hjeLc)^1@lTeTW=1w{l3sW(uz;HV-ZmnhY^`Cv92DDyIH zkx|7)VO~15n5F8thznB@>(mbf0*bW?DwS5PZu+n;*}~dCvGZ_V&(pa<#HXc~MFCO3 zUrzu6fdGfY$z(DV3gz?psi~=piyFQDH;2P<=g!@&Ef)xa91e%e>=kb_8(0Fw8vc0`MAi&>Xm^^nb z&}=rx#>TSQY%)3D<#M4=NDKy}R4P#@l*KY1A0OlK?9*tJ?(Xi5jrE?M&XJK3nM{U6 zUVjZ5jY>&LVKOT^I_j)etI=q*Sj=&8agB|&4u?H6GgB-U+wBgi^lPnlQmGvC`OdPk zvZPWe7K@&qR#GUGnwrASPH|IH)1yanqfw*LXuV#qTCLsP_1Nv!wY9Z{1%pnfo0`%E z2M33ShR)1P@_5|7J~@p>TUweqJbbBAsqlFG#f$IM*O%<=Jp;ktOG`_;y1Lx%9kY3P zbaYfC`c@*5P^nal#i-Lg*xA|Z@0S!6JwZ zs>*DBoR;>X(`jB^wQ4luZEX!_XJ;Odr>>4iAmHV4xlq`s*XvhSi~s=me7@KIKS}sI z&<_Bf0Eus+Z=L``e1IC)Ui-88$G3m&v)fc7Q9@X)N_gp~?BbxX_!<-tlK}B2O-J8) zg?<187RP~UpY~_XU%e0%m*TWA3R*AUv*k$KALX~@NuIxYsA=+>q+Bk3NEr8I!Grpf z7fAj?rskW0ntytL=RxDNp=I>J-m`E;#9CrULFx@l5+|_({UYJY<0#f!@Ah|6M6fP4 zb(}(FRz$!)qa8uBFYUxgxhoh-2>O2Q-CXFsD_;z_XJg}kImbMYf&u5lBBRsh8SVMk zu!BT)09}yn2NO;A{9&IfsIsYgrzVo%t&pVd+y8#do3$r=4!K%{A-6hDH!eVvLWWrW z5Y+btxKAKx1yWcNo~LiTwueLZE1ectu?Eyt<@SJSfRG~ z;=DyuCwSoy9S#E(L=Kfhk=s|m3*-n;2u*(lR$UH#j)h*x0C2sa984CnqO08jaOz-QM2r=;&x}Zg#spcKd2? zZ}0N*^4i)Om&;|d*&Gf>tyaS@?Dcw?Os2!(6bJ-%yWQjQ_V@SOY&L;FsMTuw`ueom zB@&5bu~=qiW`>7{SuEDk(UH&RTUuK3`~7mcT&L6Vc)X2`jn2-_uC6YZ%gyKW6$*vf zY|&^IR#sN(>+3xpk5Z|UNF*wiy1KfWMxz}Z9PI7wEi5b=jmD9Y5vf$F*BcHG54qeC zI-S0`=`fkh)6>&3ncQqP4-E~u-R_#2nzpvK@$qq^(Igg&TU%Qtk{OXm?DK6i80|8d zOt07Lbo#}`MFxX0KR+)N3I_%T)M|~vV30~>-QC?*tF5PpDH4e&6iR!0ds9glFJnw&al(DH8wWpa5!dX=NcLsc)T%%V%B6bO-xL#udk1ej@H)Jx?C=&(@7?i z_xJZt{sR8

                            ';}} +TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;} +function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();} +else{cancelHide(oMenu);}} +function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}} +function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);} +function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}} +function hide(oMenu){if(!oMenu&¤t)oMenu=current;if(oMenu&¤t==oMenu&&oMenu.isOpen){hideCurrent();}} +function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}} +function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;" +var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;" +return''+sText+''+'';}} +function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();} +Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);} +Accelimation.prototype.stop=function(){Accelimation._remove(this);} +Accelimation.prototype._paint=function(time){if(time= !,... +# where: forbidden pages are those pages that should *not* use +# the particular JavaScript function within the JS event +# specified below. +# $Id$ +# +onload=tmenuinit(); !wizard.php \ No newline at end of file diff --git a/usr/local/www/themes/code-red/loader.js b/usr/local/www/themes/code-red/loader.js new file mode 100644 index 000000000..7f67dc02e --- /dev/null +++ b/usr/local/www/themes/code-red/loader.js @@ -0,0 +1,29 @@ +//'); +} + +document.write(''); + +//]]> diff --git a/usr/local/www/themes/code-red/login.css b/usr/local/www/themes/code-red/login.css new file mode 100755 index 000000000..6ccdd4255 --- /dev/null +++ b/usr/local/www/themes/code-red/login.css @@ -0,0 +1,1136 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + +} + +.infoboxnptd2 { + width:100%; + color:white; + background-color:#990000; + padding-right: 10px; +} + +.infoboxnptd { + width:8%; + background-color:#990000; +} + +.infoboxnptable { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnptable2 { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnp { + background-color:#990000; + width:100%; +} + +.infoboxnpimg { + vertical-align:middle; + width:28px; + height:32px; + background-color:#990000; +} + +/* please adjust the bgcolor to be used together with niftycorners! */ +.rtop, .artop { + background-color: #999999; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 250px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 9px; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + margin: 0px auto; + background: url('images/logon-background.gif') no-repeat; + background-position : center 0px; + background-color: #4a0203; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 810px; + margin: 0px auto; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 102px; + width: 810px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.png') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; + font-size: 14px; + color: #cccccc; + font-weight: bold; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: normal; + font-family: Verdana; + color: #ffffff; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 0px; + margin-top: 0px; + margin-left: 0px; + padding-top: 0px; + width: 810px; + background-color: #ffffff; +} + +#left { + width: 810px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.png') no-repeat; + top: -18px; + left: 0px; + width: 810px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + /* background: url('images/menu.gif') no-repeat; */ + /* width: 693px; */ + position: relative; + top: -25px; + left: 3px; + width: 810px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + /* width: 7.5em; */ + width: 8.77em; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + /* background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #990000; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background-color: #990000; + color: #FFF; +} +#navigation ul li ul li:hover { + background-color: #666666; +} + +#navigation li li a { + display: block; + padding-left: 10px; + padding-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 10; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + + +#graph { + position: relative; + z-index: 10; +} + + + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 8px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + + +#login { +/* background: #cccccc; */ + background-color: transparent; + border: 0px solid #cccccc; + margin: 5em auto; + padding: 0em; + width: 400px; +/* filter:alpha(opacity=60); + -moz-opacity:0.6; + -khtml-opacity: 0.6; + opacity: 0.6; */ +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; +/* background: #ffffff; */ + margin-top: 0; + display: block; + text-indent: -1000px; + height: 400px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: -40px; + margin: 0em; +/* text-indent: 10px; */ + position: relative; + top: -390px; + left: 60px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; +/* text-indent: 10px; + position: relative; + top: -300px; */ +} + +#login #username, #password { + font-size: 1em; + width: 60%; + padding: 3px; + margin: 0em; +/* text-indent: 10px; + position: relative; + left: 10px; + top: -300px; */ +} + +#login #submit { + font-size: 1em; + font-weight: bold; + text-align: center; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ + position: relative; + top: -20px; + left: 170px; +} + +/* loginerror box follows */ + +#login #inputerrors { + background-color: transparent; + border: 0px solid #666666; + margin: 5em auto; + vertical-align: middle; + padding: 0em; + width: 330px; + height: 50px; + position: relative; + top: -112px; +} \ No newline at end of file diff --git a/usr/local/www/themes/code-red/menu.inc b/usr/local/www/themes/code-red/menu.inc new file mode 100755 index 000000000..ec9d389c6 --- /dev/null +++ b/usr/local/www/themes/code-red/menu.inc @@ -0,0 +1,178 @@ + + All rights reserved. + */ +/* ========================================================================== */ +/* + Originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2004 Manuel Kasper . + 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. + */ +/* ========================================================================== */ + +require("menu.inc"); + +define("TMENU_STUB", " + // set up drop downs anywhere in the body of the page. I think the bottom of the page is better.. + // but you can experiment with effect on loadtime. + if (TransMenu.isSupported()) { + + //================================================================================================== + // create a set of dropdowns + //================================================================================================== + // the first param should always be down, as it is here + // + // The second and third param are the top and left offset positions of the menus from their actuators + // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use + // something like -5, 5 + // + // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner + // of the actuator from which to measure the offset positions above. Here we are saying we want the + // menu to appear directly below the bottom left corner of the actuator + //================================================================================================== + var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft); + + //================================================================================================== + // create a dropdown menu + //================================================================================================== + // the first parameter should be the HTML element which will act actuator for the menu + //================================================================================================== + + @@MENU_DEFINITIONS@@ + + //================================================================================================== + // write drop downs into page + //================================================================================================== + // this method writes all the HTML for the menus into the page with document.write(). It must be + // called within the body of the HTML page. + //================================================================================================== + TransMenu.renderAll(); + } +"); + +class NervecenterMenu extends Menu { + private $menuJScript = "NOT-SET"; + private $menuJScriptEvents = "NOT-SET"; + private $menuID = "NOT-SET"; + + public function __construct($identification = "", $filename = "", Component $c = NULL) { + parent::__construct($identification, $filename, $c); + + $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); + $this->menuID = $id; + + if ($this->hasParent()) { + $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n"; + } + } // end __construct + + public function getMenuID() { + return $this->menuID; + } + + public function setMenuID($myMenuID) { + $this->menuID = $myMenuID; + } + + public function getMenuJScript() { + $childJScript = ""; + foreach ($this->getChildren() as $component) { + $childJScript .= $component->getMenuJScript(); + } + + if (! $this->hasParent()) { + $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB); + } else { + $this->menuJScript .= "\n$childJScript\n"; + } + + return $this->menuJScript; + } + + public function getMenuJScriptEvents() { + return $this->menuJScriptEvents; + } + + public function __toString() { + if (! $this->hasParent()) { + $menuMarkup =<< + @@CHILD_ELEMENTS@@ +
                            + +EOD; + } else { + $name = gettext($this->getID()); + $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); + + $menuMarkup =<<{$name} + @@CHILD_ELEMENTS@@ +EOD; + } + + $childMarkup = ""; + foreach ($this->getChildren() as $component) { + $childMarkup .= $component; + } + + $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup); + + return $menuMarkup; + } +} + +class NervecenterMenuItem extends MenuItem { + private $menuJScript = "NOT-SET"; + private $menuJScriptEvents = "NOT-SET"; + + public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) { + parent::__construct($identification, $filename, $href, $c); + + $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}"; + $name = gettext($this->getID()); + $file = $this->getFile(); + + $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n"); + } + + public function getMenuJScript() { + return $this->menuJScript; + } + + public function getMenuJScriptEvents() { + return $this->menuJScriptEvents; + } + + public function __toString() { + return ""; + } +} + +?> diff --git a/usr/local/www/themes/code-red/new_tab_menu.css b/usr/local/www/themes/code-red/new_tab_menu.css new file mode 100644 index 000000000..04c4cf2ea --- /dev/null +++ b/usr/local/www/themes/code-red/new_tab_menu.css @@ -0,0 +1,101 @@ +/* + new_tab_menu.css + part of pfSense + Copyright (C) 2010-2011 Robert Zelaya + + 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. + + + Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again. + The following code is dependent on new_tab_menu.css and images/new_tab_menu.png. + + + + + + + +*/ + +.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;} + +.newtabmenu li{float:left; margin-right:2px; text-align: center;} +.newtabmenu a:link, .newtabmenu a:visited{ + background:url(images/new_tab_menu.png) right 45px; + color:#ffffff; /* noactive font */ + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + font-weight:bold; + font-size:.9em; + height:20px; + line-height:20px; + text-decoration:none; +} +.newtabmenu a span{ + background:url(images/new_tab_menu.png) left 45px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + height:20px; + margin-right:7px; + padding-left:7px; +} +.newtabmenu a:hover{ + background:url(images/new_tab_menu.png) right 23px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + color:#ffffff; /* hover over font */ +} +.newtabmenu a:hover span{ + background:url(images/new_tab_menu.png) left 23px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ +} + +/* -------------------------------- */ +/* ACTIVE ELEMENTS */ +.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{ + color:#000000; /* active font */ + background:url(images/new_tab_menu.png) right 0 no-repeat; +} +.newtabmenu_active a span, .newtabmenu_active a:hover span{ + background:url(images/new_tab_menu.png) left 0 no-repeat; +} \ No newline at end of file diff --git a/usr/local/www/themes/code-red/no_big_logo b/usr/local/www/themes/code-red/no_big_logo new file mode 100755 index 000000000..6e5c70d7a --- /dev/null +++ b/usr/local/www/themes/code-red/no_big_logo @@ -0,0 +1 @@ +NO! DONT! \ No newline at end of file diff --git a/usr/local/www/themes/code-red/rrdcolors.inc.php b/usr/local/www/themes/code-red/rrdcolors.inc.php new file mode 100755 index 000000000..52337b9ed --- /dev/null +++ b/usr/local/www/themes/code-red/rrdcolors.inc.php @@ -0,0 +1,88 @@ + + 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. +*/ + +/* This file is included by the RRD graphing page and sets the colors */ + +/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* 95th Percentile Lines Out, In */ +$colortraffic95 = array('660000', 'FF0000'); + +/* State Table pfrate, pfstates, pfnat, srcip, dstip */ +$colorstates = array('00AA00','990000','0000FF','000000','DD9B00'); + +/* Processor Usage user, nice, system, int, processes */ +$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000'); + +/* Memory Usage active, inact, free, cache, wire */ +$colormemory = array('00AA00','990000','0000FF','666666','DD9B00'); + +/* MBUF Usage current, cache, total, max */ +$colormbuf = array('0080FF','00E344','FF0000','000000'); + +/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */ +$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */ +$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000'); +/* Quality Graph Loss */ +$colorqualityloss = 'ee0000'; + +/* Wireless Graph SNR, Rate, Channel*/ +/* Cellular Graph RSSI, */ +$colorwireless = array('333333','a83c3c','999999'); + +/* SPAMD Times min area, avg area, max area, Time line */ +$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066'); +/* SPAMD Connections max area, min area, min line, max line, avg line */ +$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600'); + +/* OpenVPN Users Online Users */ +$colorvpnusers = array('990000'); + +/* Captive Portal Total Users Total Users */ +/* Captive Portal Concurrent Concurrent Users */ +$colorcaptiveportalusers = array('990000'); + +?> diff --git a/usr/local/www/themes/code-red/styles/menustyles.css b/usr/local/www/themes/code-red/styles/menustyles.css new file mode 100755 index 000000000..06b3c7af5 --- /dev/null +++ b/usr/local/www/themes/code-red/styles/menustyles.css @@ -0,0 +1,44 @@ +#navigation { + /* border:1px solid black; */ + width: 98%; + vertical-align: middle; + height: 16px; + padding-top: 4px; + } + +#menu { + /* background: #990000; */ + /* border-bottom:1px solid white; */ + padding: 0 0 0 0; + width: 98%; + vertical-align: middle; + height: 16px; + } +#menu a { + padding: 2px 28px 4px 28px; + text-decoration: none; + font-weight: bold; + font-size: 1.0em; + color: #FFFFFF; + width: 08%; + height: 16px; + } +#menu a.hover { + background: #AF2020; + } +#menu span { + display: none; + } + +#subnav { + font-size: 10px; + margin-bottom: 2em; + } +#subnav a { + color: #FF0000; /* #FB3B00; */ + margin-right: 1em; + } +#subnav span { + color: silver; + margin-right: 1em; + } diff --git a/usr/local/www/themes/code-red/styles/transmenu.css b/usr/local/www/themes/code-red/styles/transmenu.css new file mode 100755 index 000000000..f68357434 --- /dev/null +++ b/usr/local/www/themes/code-red/styles/transmenu.css @@ -0,0 +1,75 @@ +/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */ +.transMenu { + position:absolute; + overflow:hidden; + left:-1000px; + top:-1000px; + } + +/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */ +.transMenu .content { + position:absolute; + } + +/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */ +.transMenu .items { + position:relative; + left:0px; top:0px; + z-index:2; + } + +.transMenu.top .items { + border-top:none; + } + +/* each TR.item is one menu item */ +.transMenu .item { + color: #FFFFFF; /* #336; */ + font-size: 1.1em; + font-weight: normal; + font-family:sans-serif; + text-decoration:none; + /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */ + border:none; + cursor:pointer; + cursor:hand; + } + +/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */ +/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */ +.transMenu .background { + position:absolute; + left:0px; top:0px; + z-index:1; + -moz-opacity:.8; + filter:alpha(opacity=80); + } + +/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */ +.transMenu .shadowRight { + position:absolute; + z-index:3; + top:3px; width:2px; + -moz-opacity:.4; + filter:alpha(opacity=40); + } + +/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */ +.transMenu .shadowBottom { + position:absolute; + z-index:1; + left:3px; height:2px; + -moz-opacity:.4; + filter:alpha(opacity=40); + } + +/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */ +.transMenu .item.hover { + background:#fdfdfd; + color:black; + } + +/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */ +.transMenu .item img { + margin-left:10px; + } \ No newline at end of file diff --git a/usr/local/www/themes/code-red/wizard.css b/usr/local/www/themes/code-red/wizard.css new file mode 100755 index 000000000..c0a75463d --- /dev/null +++ b/usr/local/www/themes/code-red/wizard.css @@ -0,0 +1,1068 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + +} + +.nowrap { white-space: nowrap; } + +/* please adjust the bgcolor to be used together with niftycorners! */ +.rtop, .artop { + background-color: #5f0406; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 250px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 9px; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + margin: 0px auto; + background: url('images/logon-background.gif') no-repeat; + background-position : center 0px; + background-color: #4a0203; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 810px; + margin: 0px auto; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 102px; + width: 810px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.png') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; + font-size: 14px; + color: #cccccc; + font-weight: bold; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: normal; + font-family: Verdana; + color: #ffffff; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 0px; + margin-top: 0px; + margin-left: 0px; + padding-top: 0px; + width: 810px; + background-color: #ffffff; +} + +#left { + width: 810px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.png') no-repeat; + top: -18px; + left: 0px; + width: 810px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + /* background: url('images/menu.gif') no-repeat; */ + /* width: 693px; */ + position: relative; + top: -25px; + left: 3px; + width: 810px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + /* width: 7.5em; */ + width: 8.77em; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + /* background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #990000; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background-color: #990000; + color: #FFF; +} +#navigation ul li ul li:hover { + background-color: #666666; +} + +#navigation li li a { + display: block; + padding-left: 10px; + padding-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 10; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + + +#graph { + position: relative; + z-index: 10; +} + + + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 8px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + +#login { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 340px; +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; + margin-top: 0; + display: block; + text-indent: -1000px; + height: 50px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login #username, #password { + font-size: 1em; + width: 60%; + padding: 3px; + margin: 0em; +} + +#login #submit { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} diff --git a/usr/local/www/themes/metallic/all.css b/usr/local/www/themes/metallic/all.css new file mode 100644 index 000000000..e1a49d696 --- /dev/null +++ b/usr/local/www/themes/metallic/all.css @@ -0,0 +1,1268 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, sans-serif; + font-size: 0.9em; +} + +.nowrap { white-space: nowrap; } + +.infobox { + width:100%; +} + +.addgatewaybox { + background-color: #990000; + border-style: none none none none; + width: 225px; +} + +.infoboxsave { + padding-right: 10px; +} + +.infoboxnptd2 { + width:100%; + color:white; + background-color:#990000; + padding-right: 10px; + padding-right: 10px; +} + +.infoboxnptd { + width:8%; + background-color:#990000; +} + +.infoboxnptable { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnptable2 { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnp { + background-color:#990000; + width:100%; +} + +.infoboxnpimg { + vertical-align:middle; + width:28px; + height:32px; + background-color:#990000; +} + +.inputerrorsleft { + background-color: #990000; + width: 36px; +} + +.inputerrorsright { + background-color: #FFD9D1; + color: #000000; + font-size: 11px; + padding-left: 8px; + padding-top: 6px; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 220px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 11px; + font-family: "Trebuchet MS", sans-serif; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + background-color: #333333; + margin: 5px auto; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 815px; + margin: 5px auto; +} + +#header { + background: url('images/header.gif') no-repeat; + background-position: 4px; + height: 102px; + width: 808px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.gif') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: bold; + font-family: Verdana; + text-align: center; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 4px; + margin-top: 0px; + margin-left: 5px; + padding-top: 0px; + width: 800px; + background: url('images/horizontal.gif') repeat-y; +} + +#left { + width: 800px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.gif') no-repeat; + top: -18px; + left: 7px; + width: 800px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + position: relative; + top: -24px; + left: -4px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + width: 80px; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #505050; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background: url('images/metal_bgr.gif') repeat-x; + color: #FFF; +} +#navigation ul li ul li:hover { + background: url('images/metal_bgr_red.gif') repeat-x; +} + +#navigation li li a { + display: block; + padding-left: 5px; + margin-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 1; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/metallic/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/metallic/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/metallic/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/metallic/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/metallic/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/metallic/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/metallic/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/metallic/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/metallic/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/metallic/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/metallic/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/metallic/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/metallic/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/metallic/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/metallic/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/metallic/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/metallic/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/metallic/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #FFFFFF; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listrborder { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-left: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + color: #FFFFFF; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #DDDDDD; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 6px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + + +#login { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 340px; +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; + margin-top: 0; + display: block; + text-indent: -1000px; + height: 50px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login #username, #password, #password2 { + font-size: small; + width: 60%; + padding-left: 19px; + padding: 3px; + margin: 0em; +} + +#login #submit { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + + +/* Widget CSS */ +.widgetsubheader { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #B1B1B1; + padding-right: 6px; + padding-left: 6px; + color: #000000; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.widgetheader { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.widgetdiv{ + margin:5px; + padding: 5px; + background:#CCCCCC; +} +.widgetconfigdiv{ + background:#BBBBBB; + font-size: 11px; + color: #000000; + padding-right: 5px; + padding-left: 5px; + padding-top: 5px; + padding-bottom: 5px; +} + +div#log div.log-entry-mini { + clear: both; +} + +div#log div.log-entry-mini span { + padding: 2px 2px 2px 2px; + padding-left: 6px; +} + +div#log span.log-action-mini-header, +div#log span.log-time-mini-header, +div#log span.log-interface-mini-header, +div#log span.log-source-mini-header, +div#log span.log-destination-mini-header, +div#log span.log-protocol-mini-header { + float: left; + text-align: left; + background-color: #FFFFFF; + font-size: 12px; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-action-mini, +div#log span.log-time-mini, +div#log span.log-interface-mini, +div#log span.log-source-mini, +div#log span.log-destination-mini, +div#log span.log-protocol-mini { + float: left; + text-align: left; + background-color: #FFFFFF; + font-size: 11px; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-action-mini, +div#log span.log-action-mini-header { + width: 6%; +} + +div#log span.log-time-mini, +div#log span.log-time-mini-header { + width: 19%; +} + +div#log span.log-interface-mini, +div#log span.log-interface-mini-header { + width: 8%; +} + +div#log span.log-source-mini, +div#log span.log-source-mini-header { + width: 23%; +} + +div#log span.log-destination-mini, +div#log span.log-destination-mini-header { + width: 31%; +} + +div#log span.log-protocol-mini, +div#log span.log-protocol-mini-header { + width: 8%; + border-right: 1px solid #999; +} + +/* Sortable tables */ +table.sortable thead { + cursor: default; + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} + +/*thermal_sensors widget styles*/ + +.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; } +.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; } +.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px; + background-color: LimeGreen; + border-top-width: 2px; border-top-color: Lime; + border-left-width: 0px; + border-right-width: 0px; + border-bottom-width: 2px; border-bottom-color: Green; +} +.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; } +.thermalSensorText { float: left; height: 20px; top: 3px; } +.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;} + +.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; } +.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; } + +.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; } + +.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; } + +/* widget textarea styles - full width */ +.textarea_widget { + width: 100%; + resize:vertical; + -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */ + -moz-box-sizing: border-box; /* Firefox, other Gecko */ + box-sizing: border-box; /* IE 8+ */ +} diff --git a/usr/local/www/themes/metallic/apple-touch-icon.png b/usr/local/www/themes/metallic/apple-touch-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..7a4b9759dd3bb1f6117c5eea8fb7c61989ac8632 GIT binary patch literal 4068 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 diff --git a/usr/local/www/themes/metallic/images/alert_bgr.gif b/usr/local/www/themes/metallic/images/alert_bgr.gif new file mode 100755 index 0000000000000000000000000000000000000000..65498f1b0ed68cd123f4b42e1bc78c6c3ec134c0 GIT binary patch literal 3415 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/header.gif b/usr/local/www/themes/metallic/images/header.gif new file mode 100755 index 0000000000000000000000000000000000000000..0a4406856fec81c99025e36564419ddf3b7acdea GIT binary patch literal 33347 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

                            n7Y$%HguaQUFaLY)y;&y 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%0AQDLc4h(@)PmVI|FW23b-%&@ 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/help.png b/usr/local/www/themes/metallic/images/help.png new file mode 100755 index 0000000000000000000000000000000000000000..1de05e3efa0ffeb34091a3e20cfa5a2726799fee GIT binary patch literal 324 zcmV-K0lWT*P)gwo{CjXz=^MCKw|L@-5)w6!d|3It%-o_{>*!KVSwb=Ch{`J2u z7hN?nYAgHy_b;j*pkv_D`7!^WKY>cmpM(%!G6PA^i>LqnEf8`*4TpDw7?WE;DylOP zj)eFPq-WVI6ia{rNW%3aTeW#5Ob;%fB>VmU{PBN#IYOkn8m0#rte6^rRsl5tLkwB4 zsSu{8r376=xFblz>ILZH6PsXqR?Wv^2@n9?h9j7{pjfE*4EbT?d{Rg z(bCe=?Ck8`-rnTo+7njs?*cc?(Xibt*!k0{Kdt^+}zx? zwYA8|$fc#F<>lq#;^O!B_vz{B@$vDUot^&v{`2$mzrVl#|Nk>HGXMYp0000000000 z00000A^8LW0024wEC2ui03ZVf000K+KwXBgKolB+Lt+pC7;@04bV{vSuh^`1%k6r< z;IMd1E}PHjw0g~MyWjA*d`@Q@0I~sU=FnIWCjutG#eNJ>mj1$um$ zjmKm9{XWCtkXEZjAP}HjE>o-3C>D#v<8hkJCWS%)MNvp35)1|dDwPL1oeueYo^JP< zZ1#?JdxEB2lgs5urBXy95$X9vsdP`H@klaxLnd>}bULM4t?u3+wYnIxPh!F0)-VD4Wb{60%sa=`{Y>*D-u(@Y#a*H^J*1qcNOI-KG33 Ub|^T7E5XGPj7;!y2KxBE0oZy=+W-In literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_3g.gif b/usr/local/www/themes/metallic/images/icons/icon_3g.gif new file mode 100755 index 0000000000000000000000000000000000000000..46ccb92dacdc634220fef86f63bd89cb3c62fc34 GIT binary patch literal 200 zcmZ?wbhEHbmww(Odb(IiwjflYTL<01Y0{*go}M*p)@<6eY3I(J_4V~RIXP`@ZAC>zm6etI_wQe} zY}x$z^N$@nHgo38w6wG{XU;H?0u+C;FfuR*FzA3Zf$U^pbyZO5OUZQNJ#4b*kcGFf zO~*w6w!bQU2W+||88=xtu<$D@IhI%`tUJCap@BiD|4^brsf`TtfyeI2qH-C_k}R@# LM3x6}FjxZsL>W54 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_advanced.gif b/usr/local/www/themes/metallic/images/icons/icon_advanced.gif new file mode 100755 index 0000000000000000000000000000000000000000..3ede1fffbed345efa81f61c487e67f6cde3abaa4 GIT binary patch literal 306 zcmZ?wbhEHb4v8_qi()i_3oC- zt@C2%|GfKiUgZ2a!E^ur|3AZU=H0t@3^W6ZKUo+V7!(QQw=e2S}4o(Omb$8#jNy%&p9pPGu4?^c^25UFJJWeNr1yl3yzJfs&?{{ bLP??F0SwGO0&NWZ-aKq6(rlfIjttfScsp%? literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_advanced_s.gif b/usr/local/www/themes/metallic/images/icons/icon_advanced_s.gif new file mode 100755 index 0000000000000000000000000000000000000000..b23354909ff9b2a96c45b9d699661de74b8952dd GIT binary patch literal 314 zcmZ?wbhEHbso^E)0&G_0m!E^ur|3AZU=H0t@3^W6ZKUo+V7!(<|F?a0&yh8mGD--BE?8dxe6 kIFl4OLcxxNLAvzz-VP|)Zf0h1qtr^t7R^YuWUj^_ zY}(!i0Rt5qV2_k2ngJsa@Ofv~dC`qfimt`i2IWy$$HI6l!ibC4%lUC~&Ua4ooo7ke zfx>-nDWSv`-~-+VP6FqEHsCn$HgFgi0KNe(0p9@^fNJ0aVAyE15=0^JF7O*r&oE=a z2=FH`3Cw3^PD`bm9JfT%e*>#-_pC~F7g#bH7Y&9Lr*ny-rX`YfuQ#StTGZ-adHyWJ zd_)kdJRjHTmQ1E~pKmn~SoL@w*46zRi!IXhLU#5&i)Gp2i0k#WBpC!^3dK0fKJxqL z($g1mbC=BKIgMr}CFOBAyd8;L6M0>(hYbzOcKaQkUo0+;7Zf~6B-Wam)>>M+S@yow zdatx}*=CF9=g;riGb58t1C@XYZ~+y-DTe6;hJaq+$K>Q+wAwu2rcO7SnR!hrUE#P1 zn&u>ukkL49Fa%Yq8Mk|aqV71IKZq0XdV@+OrB;V|{!t`yx2|r=;h1Y_@ss2qJU`=d zZ6^|oet$rrm@u196GVdNgDkt?^L;M%>&~(`C zzFt-JZCTk@85vjg`d+QJ1L%@UEkK;(vVam`%;_AVs3NsG>h*?re$wL^HktnN`!^Gb zDW8ubh+&$(Zns~M$u6d(EO6Xqg<>TV>DTE#A<4en+)#aek47`k^EVuh2jTEWEcOn= ze9f}6fk2e!J6To`g{Fn(=KFx)c1J~BRrMdREgEHILPmy=oGj?|0!0a0t)SDbiFi_y zz;S}XAgEM=(I_~bw|QRhdS6qkpNLVVk|#;Q<2gYPf>@+TA>M$9MDw|1Ajc~^&dyJi$fHooYYq(h$>T}N zya#(fZlZESZy3%b>}fxpPkH9$n$4#xu2`-6^UDj?kNDn{RZ3vbj^FYix&OAS_2|&C z8>U9@KmHSa%ol}ICtqJ~r`lf1B8=wN_QA$0`wz-?q5NRYv4LlI1*eRX9OaQ5uC(>{ zfuk3z&nKm&M*D2Cv=^l2)Q+sfy6+Pk@y1}@huuZ%MO|BSkjtJw)LhtB{`08f#aAys z?&#DpIU4WA-nMg+O4+CTo*R5Bc(v_I?2?}{ruBD)+G|hu^q#G)xM|Bwm81B7mNUC? literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_alias_host.gif b/usr/local/www/themes/metallic/images/icons/icon_alias_host.gif new file mode 100755 index 0000000000000000000000000000000000000000..ad43e17992a15f9e9303105f7a5ac96acd2abe68 GIT binary patch literal 348 zcmV-i0i*s$Nk%w1VJH9(0K^{v?%k`+n+E*( z@c#b%`0?G{yHxSwx6Yjj^ytO<^yKp8z4-Cl`t|4V;k4}9qVC+N(4iIK!)fv4yX)4O z;KFAA|NqRH0RR90A^8LW0018VEC2ui04M+t000Hq;3tk`X`X1gTp8!Sa4gR-P>qeJ z?|kq7K*0yHa{-S$PEWZ@C{W86A=mC-U8h_2wFM;3m+B_==DDs5F->78~y(O00RpACqaRT5CA((AEN01 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_alias_net.gif b/usr/local/www/themes/metallic/images/icons/icon_alias_net.gif new file mode 100755 index 0000000000000000000000000000000000000000..abd1b8b34c3a7f2a9d7cd3e6c6efd7593f6aad77 GIT binary patch literal 331 zcmV-R0kr-{Nk%w1VJH9(0K^{vySwqs%=IE7({^^`Mn>ADrR|7_=kD(O($e;;tM1+1 z`0()j{QUj~2F)HG(xRg5#>Vt%Y2m1-?!CS8V!YA^8LW0018VEC2ui04M+t000HZ;3tk`X`X1wND=40a4gU8aE*kg z?|kq7K*I+DEcOIB9_QCs6pTPXLU%~+41gcv+2arhgB@7l;dB&)O+d#9>pIrm*4L@m zJsZ0rP~RNF00(?zQa*D%cYGda9*P}V9aI4X9ApELJ%>DZ0FicgkBd42d>u=dhFqJG zor{qM28#d!9fV;4Sq2BGbgYqPeI5rL2@0{mwT&BwQ&2?%yL4nd3KR{_MFC4Z39&s6 d3?B~|*yTSK86y=M8}07z@bU8R6AL0C06T*ln8yGB literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_alias_port.gif b/usr/local/www/themes/metallic/images/icons/icon_alias_port.gif new file mode 100755 index 0000000000000000000000000000000000000000..4acf2aa106f42f5f6757621d1ba4e8aa578c34f2 GIT binary patch literal 346 zcmV-g0j2&&Nk%w1VJH9(0K^{vMA}59?WNN8(%tyo%=OIf{O+pms)*-^@ci%x%?JGc z{2tOCw(+)d<8r<7z2^Gn70?w_-BiQ#!`t}Vis*{2@2Won0Xmxh9Zg_wqxm^udq z9abKmI*2=zdK-5bwi%Y87zS1Vau}jz9 z{szs>i09|q`1r%~^Qi9btncr)@$nkb(X{aJqU`ME`ud9K=yK!Z3C_+`-QC9Y^qK4H zX5ire|Nj8Y%>V!YA^8LW0018VEC2ui04M+t000HI;3tk`X`X1QJY4I(a4f@DG-h6| z?|kq7mXGE~Y~>0D9_P1642Zu@Cnrem4uK!x*)tll2A9;cIphLMPhslY`o@51TsjtH zI|l)~ljga5aB>}YQ+pc)SsnlYZCpHoihG4Q90(l(1&WM4e~(jokvU@>nV24f9tRJN zJ`7TzaiUWQ3}jMfr&fLtP*4E^U2HuK6$`yY2YopRx;q659~2nJ)I<^vBNY=H+}+;a M;Nji?0wN&*J2GgRdjJ3c literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gif new file mode 100755 index 0000000000000000000000000000000000000000..55c1c4ad287a2dfd16a569d945202b3c4b42c0c2 GIT binary patch literal 1111 zcmdUu>rYw-0L3pA1(i9ht#QG2npqcDyJpTAXR~Q7vt=<;>#~tqgW4BnGb3xWv`!-! zI_WBNwhhWto&`EUpi#qk+Fjj-+zSGk2=zq;MMYF%mL+YN{WErQKK#C&{63uXgqrdX zTQh-7;2#^{bUGuENGuj>XlU5m+Y1B&7K=qJ78?wP_4RcKn(65w)z#HSqfwvF$6~QW zBGJ;)5}8bv$z<*A?cs1Z6bgYLxVpNUk&)qYxwu^J_V)J1#>VF6K{t&?6NR;v|{$HTCrySrN?5^}jce!o8+kC&Ifqfp2L0ngajSX&$6*)#v}@Q}@Bo1KO9 zdOa44IoN?=yV-2!^ZCJGkj-WjiPe7p{IO%%Q&W?>ySwA#<2P-D-+ zDnUs}iAKY*T8#?}3qGH{urL>g!$l%%48~OmGTgrX)srWWi;9Zo=H@&e7n9j;w}Vot zl`^j3Zwz;`^Vq#)+bd*MGq0ugf z!_Nl?2Sp2kSTDC~E;;hCAIeSOzdDwWp@ClYZK3NPD3!{AfdQpbJ~Z_3=FRr5u1gT~7YsuX1Wr%?u2w5MJ3F1ur$i!ga?*guzfY&P zwYIh#KaP`1r7#TF*4FZPOb&-VKR+)N3OO8($Kzozs4|&gc6MrbxSK$@U@{r?dfm>> zj=`WE85t=nE9>a!006+@a3m6m1Ni?Y|6e2m0Bk_ zcI9vyK9ibSrS1I#kzPP9sHhj;P5$y*^wAuI@GLbyrJ~D5Nd^(P44^*8CO?#d8pR_S z=c=mE$dBI5$!jE3(@9@fq1WFiL}1d?#ccM<)z1;7Ks9>hmpt0zdU-*s{Xt|JcrB{} zyMxWM^)+2eS;@RY{yQrLjk)#bo#)`&g|yPhq4))a@?uiii)BFZygv9^y^8YR_|KGj)FDm+f`}Y6R(*IYl{?Ehnf6=1< z{QUpdt^2Q}^j}c$|IC^Hjg9}OrTss1=06ZH5C)1rS-^^PKqSac23ETTOaUpLs%JP{ zQ&|ETSp|iqeUErsUNW(@>s)-~vu}%9*8vTWdp%n(DcpGB%eIt#(su=24`+jy4H_z* JjLsYk)&QRYKx+U1 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_block_add.gif b/usr/local/www/themes/metallic/images/icons/icon_block_add.gif new file mode 100755 index 0000000000000000000000000000000000000000..eb726d6da80aaca27538a0fd3e527ed4c3b883d7 GIT binary patch literal 192 zcmZ?wbhEHbJ@BV-E z=>N%+|L4#Dzi{FIwQK($I`n_Rg8#2y|NsA=0jPK8OdyFLDE?#tE6@RvAUhdYZ4(3o zQalxpys&xtIDq*ngV1k}1Ky4kRXF!?EIIPovqkOHA&Z$a@_f`^3gkpBWqP>vqyn#} PZR^I0S0RT4;WBg literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_block_d.gif b/usr/local/www/themes/metallic/images/icons/icon_block_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..e6345fe89beacaed80781c84b11e5b223bbdb5a0 GIT binary patch literal 193 zcmZ?wbhEHb;IA^|L4v7KY#xJYuEm-UHkvgq5lgO{D1xWKM>5E$v_Aw{$v3w(E*VlI~iE*7AOUz zcp4u6;h_2@faNQLFt_gkZ`VsEmUf;?j(qlQQ9E_O!sA}g)*yw57rsoY?311=n0h!H PWKMKY@nmu4V6X-NI3G~K literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_cablenic.gif b/usr/local/www/themes/metallic/images/icons/icon_cablenic.gif new file mode 100755 index 0000000000000000000000000000000000000000..a071c66d707efafecc89cedd418a71a5e3e558bc GIT binary patch literal 91 zcmZ?wbhEHb9$6Tjb>ACnqNu7#P{v+57wZs;a8U$jH09yHZk8i;IhWeSP8K z;o92TMMXu!!^37~X4cl$?(XhtYHDI)Vmv%Nqobn^4i3D$ytcNspP!#_aBv|ZA+xiy z>+9>awYBo{^1Z#iQBhH@uCCqP-KnXm{r&xScX!dz(R6flN=iy&V`GhtjnL50US3`( zC@7ein00k^0|NtqfPnS&^@N0k?d|P&cz9`PX;f5HFfcGCCMG*OJL&1^;^N{-MV>$aJHk#FI{*Lx literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_cal_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_cal_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..1647e2f4f408254893f512f68e583fa0d1f4b944 GIT binary patch literal 1060 zcmZ?wbhEHb6krfw_`Z)pkb~p#2YU;Od-(I|U;mOC>Xm2mX z$?50iwWX$ppPxTUUw@UKUr9;HDu4endHE7q*`=PI8_UWHva&4s_%_AG9jd7*S5YZd zQ%jSUKDdAX>Lp9M^z^3M+OAx*XiY#sZdTT+#fw+?_{d93_Zk~tUA|mIM8wzEcbb)z z6VNVQ-C7luTt&qdfq_j129+8b^Sr!nZr!>%Jbb!?LqI@4l7Ydoj*gA1RxNgS@6gei zVqvj!=gw+*`PZ*s@7ccn=FOWY_w4C%bbS8&`TO_pmwI`1Sy-gW$@SUWZ%#^D7#O&& zsL0FBZFO4OlDTtv*x1s{%*t$R)<#A)sj1moT1JG1zJ2?4ri;sRA0JIk&1FeRB3xWc z!o&NFjqB{}9_-&AtFIp*C>SIx?Ca^d+}k@sPj8u**T(YlEw#0WYHK??J9qW;%yn~{ z4-CMR6b=p!AAbINJG*vc<6E0IPqni8`0-=0y85)<-VLFlRl2%)YHHJce6FuvefRF& zL@}}3w{IIsNSvQJb9sFH&!0c%hJ-vlb?RVs_3Dg_kdTl_Ev*AHXV%!+HLI)l85z~u z*|q5E{`vD~x{XbQpx~jpx*KcPGBPq|XJ_{q7+hboX0eBdzq)$7iOIu<4;Mv725V~0 zw6#6l(BP_|5F#eFF+P5>on4rO#I@C{E7aAWK7D$A&YTs&!Fvh|l>`JfRaC55x^%LI zMU|W!A3OVr6DMM&r8kt6tn~E_@bOvV;n8boxM$BE1_p-z|NjHYp$-&(vM@3*>|@XY zc?6Uv7&!hj)N;yrY*0AJ>=wovA@M+1frW+l>L-O1_ci>gE-n{~8QT>a?K>2NlAm8% zX1_8>;L?N6?)9FzStdoB*``TxZ=X|g(aHIgfQ?FoX~37IoRclsc#f+9>?_}#d;xOe1t(%sVa_4V}j z^k(2@?)>iFg2{r2=ZGTHBG=*9`TO~;t*xrRs?5yH z|Ns90%m8L)W&i*HA^8LW0018VEC2ui04M+t000Hu;Ma{L`JHI0uIyPp$5Xa+?T!K4yR^l zX=ZF`32!46X-Xpyk3V>6duSdF99e7|8CkM&BocIWk$@SN9=;xKY*9f*$PyF^xXh;; yKLZ>F(rf_LLMdSg90~{+90;XE^z`as7ipwokoEpW_m&B?L6C*OWd#d{0028uv7Gt< literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_carp_d.gif b/usr/local/www/themes/metallic/images/icons/icon_carp_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..2ba8db211f22533f43cef096f7a553b38f73f91f GIT binary patch literal 357 zcmV-r0h<0tNk%w1VJH9(0K^{v@$vEQ?(W*!+ScpV;Nalr=jZVE@c8)n%H_)Z{QRr< ztJ43{^#An2;KH=pw9Nm^pVFV*|K02B>-hZms^zNF)6@0!^{V`;`TzOX|JUT?Z_0z@TvG5p@Qf!7(}V0W}(+01Ew8s083>!XY(Co6Uvtk?IORfNt&4taZPUt^^J% z%D(_7aY%E15*$#19(qwYT^$exUmXl#8+aajdVWv`98-jPStAG>1_%ip2yzi&cmf;} zs%UC!Xl`o>ah_{RBM*>xdTV`Z9u^!~ZUGuuwR9v9kdZ$+mw&*Me{NAhM#>!u47$#$ z0Y3yB1=DT-)oDlRk|c*ll86%+&x+)(hKjSv7k DsiLkc literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_chain.png b/usr/local/www/themes/metallic/images/icons/icon_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..12db07ad024ff5e6c6d29c717e1440a425d24151 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1SGfcUswyIGCW-zLn>}1|M0g;Sg>2}W0Wz6 z)3jqEjxQL!G;+T*D(q0&p)kvgEyYqndL7425tCe=6H*Eck(!%0Vx&X(XLVonalGud zMy^AlOKwfx;Y|K(1_}@4&umbW$(vEwC1W3{y_G`|1< literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_check.gif b/usr/local/www/themes/metallic/images/icons/icon_check.gif new file mode 100755 index 0000000000000000000000000000000000000000..393674d42e39b25c9c4c7b617a8cf8c88ee4674d GIT binary patch literal 1291 zcmdT@k5kiS9DdlogMp0OREV*GG#HCX+d&*UA&xm5gStXOTZYJH3l1vqC?ErGZV1C! ztyGGDnjBKck3?<|MAATh$u@rDP7Y&G2xymOorcF%U;Hn6@80L0_xarW`MjU^dEcaD z`Cf^Ni(otg+yONJA>8b4umR=31>h98BCfKJDXXNps~T8U@~ zW(D{Z7z4TxKqeUkV}gMf5l-@t00ZzHAOLv42+#-RPf9Ksih}luj8_0JARX`qc5Ts$ z)e1C&Kf^~Z2nT^8pbcmOu7K6eQZ1?w4^%_ft23?{Wn`+WAOQL}9WMhXAiX6;GJGa{ z&;#E|U)e2L_EI(l2$%{;FH84uc;F0RM%2xy{N?=WyVdpg>dCW;=fnle1-s{Vvz}*# z#D$pFO|SxQkbP`bR#F z;5yI^?lkvs%V9Ti7f?e^`xEv*ho?8l7etPTE!g@Kp#O^xJh_T?bHCo5`b@@Xy9(vk zLLE!K3O}9E|GCVC!Ybz%VnU+wAJV5Z1a*dflX2t0Q0;*1>;EJ%5O`AOpiFW;0 z3Hta^sbMf8^-RiN4=!nJMp<%es$t38JlEo*PPOh=%~T3Ar`N`0`!7@|`=*z7AX)R()oUTogZ7QR(G z-e~oFoH$wA1#zZoGw0#ZhL$qPl)oBZHcxmDwH>>k!mPE3XDshuJQAsnq&nL*pZUC0 zOJi)yD-=9p)NQOYePebx9j|ZX-?P8Bu$FbL?D1Q_TSDf7KQ1l4|EKF}UjAbJz7juK z)WqsPrzC~T!&A=1VoOaH^_`WTk@B)1=+ncw#Abn(dHN3)Eok;=mo>LfnPB8|h=-mu zMJw$(joZXe3OpCrVcWjfpH)sH8oR4$hIdVru!PUuMrcpD28N$yM`Zo-i9%$Ox@V+! z$U=6Q4(h_Ml(^jZHR)N_>Wrcr8d~n8*-8{GoR*9A7Hx_bXYgPmwO}|ro2uznjS@S~ xO(hGdCy=}?m>#@lF833H{&iiyR4OpLC@{%|>y7Bv4tO#(&Ff8d+jlY%`yZ7jY@+}G literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_clock_green.gif b/usr/local/www/themes/metallic/images/icons/icon_clock_green.gif new file mode 100755 index 0000000000000000000000000000000000000000..e171ba883ff6adb2c24c38893301da408880c34e GIT binary patch literal 308 zcmZ?wbhEHb54l zzcXjfFsx@_*vY_<#js(+1{D<*hTRM|ZrorD7ml#~<`6JyxIz`)KRBO}9b zoPl8*gP@>be0)4ZAp^r&1|=mW5fPEASFfg~rXD|joS~C}jg4*Hx^)a?4BXt@3_x&( z;oZA;AO?v*@h1x-1A`ue4oDx!PYi5<4%1IJ2y9g1nslKwf>CPi1?34+>sZ!`X-9wb z5o=fz<`cL^=uz&r;)@+y*XXjB)^!_8x15@%JH>}NB43@6#fMozNSBXQTfmz~Oj$=l KzD>`O!5RRChfC-H literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_clock_grey.gif b/usr/local/www/themes/metallic/images/icons/icon_clock_grey.gif new file mode 100755 index 0000000000000000000000000000000000000000..00c865a19c662dd9e7df3b8067c187cc5cf3680b GIT binary patch literal 308 zcmZ?wbhEHbge{LGm%N=izH4|EW>~PofUA3gs)wSLwqII+)H1HsQ?-6ykdWwD z6SgN{iO{3mvM-LETUV`BEUD|(R(Ci&PqjfsBO;%VncYW2T1i`wMN`0ASWQJsT&_*W Hk--`O8gXE6 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_clock_red.gif b/usr/local/www/themes/metallic/images/icons/icon_clock_red.gif new file mode 100755 index 0000000000000000000000000000000000000000..7b412eed1873645dc604d9d95db433b38cbad27d GIT binary patch literal 308 zcmZ?wbhEHb+H`I453cjgVE*71BB&v5sr4n6`CR zh)?^PFd5G^B9C&nO@7$1bI*R7V> S>k5;nS4v%(m@r9%!5RSkFA^yL literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_configure.gif b/usr/local/www/themes/metallic/images/icons/icon_configure.gif new file mode 100755 index 0000000000000000000000000000000000000000..7182e0dafde29cece7529b08bec24c70f9f245b3 GIT binary patch literal 64 zcmZ?wbhEHbaEr4HjlXWzu51?^ZEJk{7BJ6{1@qGfwREh zDnKrmvsf&#SUf&HuGMN25)zC? z%*@R2@bKW^phBU5pu)|~)v2ke)zuY=q&*}g#KXfQJ3E`nsBv&`SXp^XBoZwav(>sV zF)?f~7|7(zf`WpSloXXpwZ6W-x3?#gj_P#s(a}+%kZ&^0$Hm3bXpb}++0oI_-Me>4 zq)4e$+S1a(<-#IS7nAvPX=%x9o~x^SDUtmC`Zdhuas&bal}hRDlanJ1*WSMUZDeE!1VL_Yn5d|zhYxcZ493`)n9XjC zkB|5E_TJgqsjshZXlQ6`tdET)fFP*V%0ff0BqqjjIPAT>{psmxv)Rn$w5rw8{{HUH zPWJN3vc4etcXvxm3z^KS_I5Zw|Hp%a19$iH zTrT&;3%XjZuCA`m%ga_M{#ahNZf$KvL_}CD78D9)v)LvlCi?nVuU=If4C;!C0s?`+ zX8)F)oQ%hRo|TnpH0nA!8k9;U4A*Hi>gZ_vg$r&ZQg}wjEgp}Xnwsk4gRQ72HyX7# z+{K}x!QNgTo6QCQ;6p+m`2U>Wzjg=!PywHQ)cg1e!0`ltf9eP9NA0s>zyR0GKnEIH zm4fnJG!G-cw*vsbMY}4*b@IhT_j|1G*mh{IhJOG~F#?JF0UBBgEMoZl5(c~Q11kK( z-OoJWNt;J-7$@$w;aq0P)#$cWM}GpvP=dS;mNCrf$sGX+wwiLwTQ^6La?kfpvoC?} znpYT=9{fDI6ihcfS-FgWgnvROWO_1yJoOn%`7@Q@CCIn|^t%Rx7rk_G4+HU!Dx2wz ze%H?QCB5emao^N?J~4xpST@4*L1GLUIYyT~Cn|*bU8jm}p~5bq^{v%(*_V|p;iW(# z^Bjo7jD+r@a7!`^@0AKwFj;rq| literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_down_d.gif b/usr/local/www/themes/metallic/images/icons/icon_down_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..70a7473c30f8ef7a9ee5ba94d9fbb6dba711dda2 GIT binary patch literal 689 zcmZ?wbhEHb6l4%&coxR+?Afz-@7{HFb=|vn@4C-XFJJ!k>({4GpB67(eB;KA@87?_diCnuxpS8;UAlGa*518)dwP0$dwUxj z8{fQnbNBAu7cX91zkdD0hYz=J-#&l-{GB^@T3T9m@7}$6^X8K$PSn-aojP@5`}S>D zu3TBNWJz~-_k{}=7A#nB;J|^yhYxSqu;Kmt_b*?(*tBWW+O=yB9z3{X$BtdQcD1#& zb#`{{+qduOvu8hl{#w0y^~sYb_w3p8=g*%bM~-aSvSsevxj%pYJb&)oj2Sb&e*OCN z>C>jBrq7>0zkU1m?Af#b{{4IY{Q09tj~+gJ_~XZqYuB#*{rmSn7%&VRQ2fcl$iNWB zpaXIOC{7sI|2KsB3CRn~`ge4C2C%w@g|G$jd$4i&d$J0JgtE&zd3#R^;$rag3A9o3 zaSRO=)%W)k4&mboVpg!#)Zq09VRh#Y^Mb(36Oi{UT%8^4#HH$$o zER~5-J+Q>ZBBOzsM@D6q$HGGjLESRJlQ@<%r8qaSD6#2uD5;*};_zxTzVoRX%iEiKtR%|sqO9Uhbt?{mzT3$UAkUgF)S>w zR8rWnv7%X7fo)WFsRZY(P0nM@Oz$ zSXWb11qB4HRaJIMMXOLymsC&EqM~|GP}#7su&}V3M@F=?w79sq%!7l6Nkuw3Hg`ET z$hEb#Zf;mADrYMz92^xSBplbQtONuEomNu0Zf<8}WCaBUfI&ZgH8pZGGFL7vm`+NK zF)EKlL6SQ*pH)>=3=E7=Nxph|ltV+jyu8+$nxarppF~5!fq?-50li{k%$1ehwzi~A zO`@Wrb3{FLH#eh5L$Ov=%!GueS5(i>&w6@#gD4}VSy@yB1l6mn=;-LcczB{!RhK+E zsZC5Y9viV$Q;Ik;UNkUSDk`sGVVyxiTmS(7|Nj600000000000000000000000000 z0000000000A^8LW008v>EC2ui01*HY000R80PCFq5DnI(DBA`o1T|ya6LIy>&H9pv zkBe6(iX=Jbi_IB5hyXys#_l#B3q3YM$S}K8Sqk72v}QJTxF&3PG=N;{?qJaR~5?nW7^HER}HlxL6oR zr54;_Qs`R&I9E86*x-y;sC2<{JX+`NN1H~CEerwXDGv)bqEgZELQaVg6!iX#2uH>P zpkZLNX@J&=$~z;|WSFzT%FwYJqjUv2lF;pev0E^J2-;({SqYHI%f|KG>Q=luEe4<9~!`}S=|N5_E!8!leF zc=__>t5>hSeEBjXBjeVsTg#U(fAi+e`}gnn@88$m-I$P&ux;D&%a>1-mq*Q+)6CA! ze(c!JfB*jZ`+MHGb9>REMeEnk%gxQWbm@|wp02aA5f>NxxpU_>Y?%G--MiDLk7Z}a zmXs9t^%d^jyZ79=qcSq0PoF-~&`|pQ`N4e1_o~0G&d?L%E7^*uCDa#*|X8nUXhVbbLRB_`t>s+BBH!JQcO(j z!iA%Y7A>4VzwgSG%TZBoUS3}R|9`)6<3?3g)x?SU4Gj(V?_aRDw`XBtPEJlbbZ8S3 z6JtX|`Lt=1GBV;?TGG#+J@fwkJ3c1_KlO1)5yqBS6B1LkMA}%*4wu) z-LPT9rcHCMUA-zJBfE6TqQb)L1q-Hq`0)Pk-@pC+6%i337cXA8c=5#JM~{+{;x1e` z{_NSao}M0OXXl+eckbQ0rna_r^XAP#K|#H}`O3;t>FK`x{r$qi!XY6+K0e+_Nikcu zZoYEmLT+yE;>C;4oH@h5zyOS2AUW)T;!hSv28PWHIv}5d@&p6Ne};5Njth$gIU@9> zG>$ZRg^00kc4_!kpy)Lqs5L3kJ_hBb*cKa#M8k2aG;U2hGY>dYu{vhL$=zV z3GAc!c+&ZiwB5bbWBdZZ$HjT|uxTPTJ!z)o8d9{o)y3!2CSxj;aY$hE25xOk6 z`MyE`%R>)7_Dud`ROFZO+pa6q40H#{2-v9sr literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_e_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_e_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..9ba5738fd049b7a747a536a5bae8b1e4ff5a513c GIT binary patch literal 1120 zcmb7@>o=Qs0LOoLJT5U!499WFs?s1Hb=Ra)ks?pk8`D2w-`C&IoA3F2(HIt$CL#a=I64Hs zPD~`k#x9hVJu58K2!$#--DotvXld#0?(SqVV*r@Hd$$HbBy{?`SUk$*j&eA&Qt3oW z%4|-Kxw&}`9>1Yh&*kSYNF;KPbAEn)vzeLc@vQGMGUOO`35LVNgJn)mQ~)p{ajB{* z#>GV^k<1B&YPEV`VBjVWcT+6h)@THQeh_5FU<8v$&bf~E8a_WSFK;9{@d<`a%L-N$ z3OWEvIz0t|t6Z*LCQAh%B?WzFFtjq6n`2`?FE4+^OX}(ANec*2T@HIdr4k5)R5Cdv z#H${|P?WK(P~1Q3774&BmFjsz!(?h|I?iUjtxYeNXX9llx>t<@SbGnGtcRgk~YsLMi-F>a!Z zi+wgic@!Etl#rkd_2*M49TD^p7#6{>8V#SDn;VQrCsMd&oMeF=p65w^P*%nPU~g}) zxVX5N&Ax%NuJrcIiJ-|TWbL(Uiw_@`lU&!<)|kwonOnCEg|a&rE_B64A_y{n?;eeY z*xFk2`LS_C;=#c|If;03a->d9Zf|eb35Agi#%+81zL+cC-k)eQG8RfpV{kZyLh&Rm z?alCT2Pd&H8OyMzl+67oY+(>RaEVugQSUESZ`KM)rMK@bW+B8Cknpvurtom9G5 zU+?cv0szoxzE)ONeO!)*hesuf%BjKS-X237PH8wzClqK!!ar74MmU`70Gynhoc8~3 z+>ap>01g520sQa@V0i+5`!{f>F5cQc3hxEA>~Glc53#=qlew5W2n52(y?tA*BzVYh zY*;XDj<(>0&X_F0EhJ~Q?-V}MP-XcsIe)b$C$&MO@p@Xz@~u!=?4M;fer~KCa_V_s zxygLj63~n9?evGNU-`(MQVxuN4OyGq*(X6hyKI*Lns)E&RfmZA@~JOhit>f9jTs!F zI_~Bj9Xf>F_mu8#jDB_|D)O;I>YJg+j>KS|CN9aW(X?Pk@473haHGWEw$ltJbw#+F zEBmdcW|)tgZgg4)=N7RozKz0Oue@J6U)g-|HSemh=_QbjAAqa&12iyUr(*OVf literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_error.gif b/usr/local/www/themes/metallic/images/icons/icon_error.gif new file mode 100755 index 0000000000000000000000000000000000000000..e0fa6597a6ab440c246ace3e6124a2b59d44219f GIT binary patch literal 1312 zcmd^;`A^$r9LL{ftI|yIiv9xTJm@cz(XoV<1@W$D0S(mI>~eY~Z*Njkl1Iz9IKt%; zu{eP`hr^*;Q7J1Ut*s<1jC6Go4-Z#5qfn&KmnJ8#@cCNcDDV{M2UdVvfIFa}8L2dr z(!rq%sG(sXf-*k7k{;*fMH(7NU0tkDNP>eiXiO%X1c2g}{&01%h76$Vk%P zKa-L|OeW&x^&v0@v;&&}k9I|(0w5UpiMpfXd0-XD;Pdxr852X4N|Kg#zo6h(TGrN* z48U*wKY~TWr54Zs~;2;fjbP%m}EjPCqPz3~#_IA?S8|&lK#AK48A-i0@0~i1% z;0%0?{qa6s^`HC?;r}=N5_E*`WB;E3hoI0|lwmVZnVeXmnpxW*E{)2rtApBFo7xY> zmgu@FdR_=;UaRSQJs`_HJ4-sOnRA=*dHL0?z^C@~Wha3}wQAUUaKto_WRfrESyFGx zZ-(0ho7D%nicY(xW5sNJJi^my3}+cvoT1|=iXJ&|Imu(+T2D;AZE*27EQ?}dKREDS zoS&0z;j8bOTm71H3$@+Tmy1}wI}^EIWJWMvYCLSoJlEXj7hUafOr5Iz*vcFc+!N22 zIbEIOyqhvVa-nDa;i<$)UP6(B$#K|s^z^yv?e#mi8%M+^h4oVAXNCIhIt z78k5{pRM0{>uBPQUHjRM@9zrt(qBt>UcWT-D9v}NF@n93|73h%JWgJ^m{6+61h zemTU2DgE8-G9R7c>8Um-9Zqv)svybdxNqq$I3+>kb;Fk&)+gCUHsg|XZP?5dSYfM0BSB literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_exclam.gif b/usr/local/www/themes/metallic/images/icons/icon_exclam.gif new file mode 100755 index 0000000000000000000000000000000000000000..36c2ec7b0d423d145494026ae4225d9266eb78c9 GIT binary patch literal 1274 zcmds$`A^da7{*`D7FsH>Ld$^m+j3(e6>#Gi+H#MM`xr-sG7vF?q1g}yCWBJ33ML&O z;}Ar%EJ`9H447=1P?QQdm^(x!0xeX8icm#mo4R*pf5x64p1jHXCZG3tlQ;VPsKB5+ zCm>)OAi#%I3BU%xd6$14aEH4c{P}GCY;wVeRuLf`v9-IQ(0%%5j*Ba~ zopQUCTWo*6Gd}$qSH!s4x~OE~v!3U_aq#Jd>F*p*R%hdSUFcr28)2pzOhbKpJwSE> z)rMv)5?a!2Oz?3Pu4Lr_^fcR}CYTH01E8BJv^7wc!oN}2hXq;aXCgH!o)y670M!8Z zuR9;gpv3@qaLvjOSrdlIMILT6U2bHct}@u4++AcsX zZuR2E83sVQh%(Y&Kr%Oq-GTbz(*BbGWRj77Hfv*=z;!9=&p%YL*CyGxUK=B1YE`U1 z?{QEasGm*M&&FSAVKjX~FF(xk=d)-4nj0)}BDFAsmYYJwjpm7w22=;3u7Yqf%}utd zD6;-(FaVdMP@9bEfPr&N)W)^S=(ylz0Xu3l>@aUQ*#AwOzfAv&#M|+mp8zt#Q46P- zzHVi$xrwKEye|)AS0&BEFEq6^^-TX9>fo~dSx-}T9#dv1SGexuUJ_6Eja?3JQbW9CM!Rjs1o(6#b;yhSRdSNOON)Z zJ*srv=GP=;rqA||O-wbv+vvp@dYvEFIz^HMk&kB#xZd8yBn0!4vZB#Oi)I;c486PcvZYO7!s;mVyX}rvQHx?;wXoi+qa;trdvdC9R@_eI z7zm60xk4+MgbWe3LXDJ{(c>D%(FM2vg!sv_FjAyMLDmSyc;f5xFea?8n5k)*Wo ztkB5lj@>pUWV3)ZZBx8dJ>fx4m6*Ebsz=G}-HH)QFA-hhRzP=To1T=)f M)78&qol`;+0MHgBO#lD@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_flag_en.png b/usr/local/www/themes/metallic/images/icons/icon_flag_en.png new file mode 100755 index 0000000000000000000000000000000000000000..bd7f9a5e1a727a1f26dbee85c62d142fe6bc26a5 GIT binary patch literal 618 zcmV-w0+s!VP)F6}X$ILm@h4=_42t;odEO-v|?~BL3#zxHs z>Vjxz0LBwAwiYiu_Vw<4VEh4N5g3=i7zM^FT1<0u=M)sII(P2TyK|TBCnnxXNSqSa zVy0Qa%bUwEZQ4O#$^oVyU@8KpC18pIrYk(DPF=mWqGH|U(|6u)-wsTxM#lW--Owqt}O=J!*FlcUW-un9XqYqoR-b+pa0KBb>=4{QMUjP6A07*qoM6N<$ Ef(Py}1poj5 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_flag_es.png b/usr/local/www/themes/metallic/images/icons/icon_flag_es.png new file mode 100755 index 0000000000000000000000000000000000000000..434776ca9a72fd62a77d9183e5a8d537bfdfb1d2 GIT binary patch literal 281 zcmV+!0p|XRP)i=rkE~q*mzd<(_`-LgBt1!T*xt{V2A$82fRO?a(;Ti2P7}u5bXro{Me6ru9ya{P2Kp#!(fmh0X*_QJ&{oy+`NmLmr^z zl`WY-{m3Y@qV)R{uG_Z-qc)i0G{tG9&5a}U>YjP$s%^b%cTQZtr+C6P@3eIg zgZ6AU1Im7X%DMEUg25t36jM~^yR_}s{P>s~VgwLPpB-cswgRY4&u2+c-ul*MTWjWT zv=?JQdHMR~ z>oVbLp55om-EM&HBhS@VXRe7tRGc}iZ46-eA{OgN_PmfP;TBngb^ z$umOj!lwewvWuA6H#HU*(+f{1>Me32A=MS`(0>6=b?@&90G)92wov#6Gjei($r6Wk sXXL&<;hJ_-6>DN6Avc;*m>Y>l03tlVCfuNw6#xJL07*qoM6N<$g05TZhyVZp literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_cert.png new file mode 100755 index 0000000000000000000000000000000000000000..48a34b666aae6c1b7947fc2f4c05d146b95529cd GIT binary patch literal 1528 zcmVSOD;`dveHR>N|J3gMv)Gy{~Py z9h2#e(>YyI;skMc2$-KYW@op;U?MVklt!Ba4aLk zL%`ha+rw0+7G1 z#oJR;TN4xO9UW`c)z(|L0MFIhs;jJ=NK5NPq09$Fvk#yPh0@g4s)bYv{G1Tzj4D}Rb}V#hDapWesTO4VCd}y)l-+1&1Plk za&z@``j%MyN-F)R$B+M#NOlGXUx-9@HhVcIM@OTrT)DE6kzvlySJCON{TlZZfQG~A zfx~Bti^uSIMO2g=fzS|%8};?>wze%k|9N+}yR~(rq2Xz5t(C!8N=%$VA|W)|7#V40 zGQ|Xf^KgJ(AZUldqy+_!0t5R`pPmX1o;-I>hsWECi-AYrcZ17)T2td)M`d~^5I7dL(ia{+ zLMDrm$T1%unXj+P&rb$}X^=?30Esrn#+rykQ+&LcL;^9HQ&UwK%t}^PyN{1+a`N+l zmo{6imsh)=-$NX3EG`a8N}5KYX5nx}P>?Pp#DK*vMMQvfn-da1a;*9Ja|D70i(N@i z@ACI|9enV8+NL0nySu8&N-2ZU2RejGmHYe81_V68XXuYY2yP9u@HKBd@wz8WW>IqvbG|GB8k$!RVr+^>J|v(a|bAUW3CehJ`JLhJw_M zhljg70669H4mjLMB57eTH5{(Gcu@&5hQ(@QV}TI})MJTATu4mp!{N3M9zF*G{(kv# z_|heaNQ7W8$lqTV5b&`Esi|X;QDSUZKNcrOV?;qgojyJ&QC@qr_{;V7I*IML0LbA!clG{_M;g}H>Xj}H z`JObhTMuU|Xl=@`8JuISj(gs}y;K7$<%e?yytBAzyisb?NCZd3pLd-pXc^Jkjs*aj z`I*uD9i`@GpK@4h8-c8Q_6ng2Q`P@XxL{!Xo#y~Bu96=P7}mG;ecJd~d%1b^xZCyN em)7at*ZvQi1F0RQzOT>s!4H z)jtq{3=9?NuVr$D1DC89G%rAxe9{ob^%fwU_~xqs8RLS}G%@8Rr-Hy`G8z(zgy~bWvm=iltj&O}rI4-i%6!{( zu|pYoo44GQ<51;0TJG5zi##>Cm|8i~)40}uat+FY+6sb%gIyFGk@?9DlL`Q#R2rbP|eS!^l4Xe>UBHC|ig?Z<+@cD0#bnC*Ffru+6L$F^3 zskJ;`^3D>U7h6+aY)yN*Ch-1z>#Ga>{{H@f@Iy(E;M`oLC50d~J45Plr_S@u32%?I zzCStP<@T&c3vI4XH+XhtAxOi&fB)t#tV>7|uZR+vmZ3N+TXA}Z{OO6N&o{=rJ<|3L zs9{I;qlH#?=a@W)Xjr{&LQ1xDW(i+h8b@ZTV3a>cYLdY2Zq3Kb-GG+7*qZuuwcmr; zx;JJRK06K85SOf+RU(>J#FDOixzxI^MY}ddi!j21Tbqbn@j@H{VyTSlXi!lXbTaDE;>Iy^g;LfLFCe^W--&s>xcl`M-)iHuq1P=64aab4NYms%p1GDo3rF!Qm*| z!h@`?lX2&2ASi$>2 z%S&QW9LL2)|3KTqXweID(Iz3$3Ku=-wYf#0A`vd`Mg$i{Vi2`xrG(1?kr^2B>LA0N zQIMG_8FgUPsnHxw^KtI=m8s+Vfiy?2H97NL9L|N`hwtxu&zJVttGL4vz%W0C!LvvZ zkN=7GeDfO&7b1~+Z7sO65?WpLZESpAT-0+og!LS}6U@*84Bz%4j0Py*I8jS{?@E*Iq_D)TCH#c7o4?p{~fiDOWQmH^k zd_JE>qX~sV>NDza+zbtUnxDUv$-01Fr~8Q@AQE{A2n2#eA`y?r34#boB)^uI)qQxV zxlAUL428lYBkx(PTMBSPK&^(;&^?()=wUZeZxnK5!1Mp;RgxjYg~0f($gt zXf(vq(yRV{>d(>&0DNRH!Z=O=Mx&9-<(kdrX0utV)r#3{dVSr=<6(1if8W8rzyE{F z1s)H~AQp>Z1{6grl}f2p%ATA=dAzrSgRo;g)i5%dp4nLf$6*p2$D!5la5y8A#W)<( z`1rS{SL-RCWoPGdbo6dv0fcDo@Eun@>(S(fK{ zAHQIlCPpTq0(D&16IG^aI`^(yjV!YJ{Vn=W%esQ{{;ks(isR?z5(Y#$F+n{ RRD}Ql002ovPDHLkV1kYdn#uqG literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.png new file mode 100755 index 0000000000000000000000000000000000000000..06b53a113dabbacb139a01dac04b413e707ac3bf GIT binary patch literal 620 zcmV-y0+aoTP)c%=i$TN|0YnjbQ6*9`PrD`ct z-kzf1ehM+TpPf%8;4T24@d9;yo6%ald6Yn?aB$iY}MSZnu}qW#D-d;R2W4mXqJm_9Utu|6>+& zfM|!qq0{LM27_L&*Jv~l1c5sBdR^qGD%`i>7$g)R85k?4W|j0%x2#rcqtU4Ea~ym; zGONZFU~}~WyZyW;07hyyn^H9`2Kqlto$FMHhwN1N*8hN3t0fVy#RxP%dQ{n1s9B8U!7rtL&E2qKO!1& z{bF%#V0EHT`J5gA5S`zOddAVU(WKuLUAhwwzLdnjFZ>sjj5H@at#T&-00003c=M9>jN(gGbY%D`^T#KD?1Ewse~l_Cuw zZQYD9P%teoW0_pcQ(?omWKaG{llJ`1dH&C-YQGeW5Hw7UlWt57KPeB){TrL!7x2#MSI4d)F22;%304?YB)^{qSkCwFfKmXfv~ fOV}fgwJrSwMtOH)-`~a100000NkvXXu0mjf=1US- literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_time.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_time.png new file mode 100755 index 0000000000000000000000000000000000000000..aa8300ab88c0506d159c27ff1123153cbf465e11 GIT binary patch literal 646 zcmV;10(t$3P)c@;1P@<~A6%E!J%;8YWWablh915Vcx06pA3i zjYW>~aPRaQ5RD{J&4;(PEi(VP@SQ`Y)mcp2YEk`u_x!v?5Jjn2H_wt4^5i8zDl%zM zH${;~)#FU~6&d5Y z?SC-rkyilVvKU;mOfd|A26|*tdpw@#^*ZD6@Z#dP+o6+i@9p_KAgSGM*6UT0Bm({* zn}L9PS~Q#xBi48#7W^6j%F$>5FuhJ^GMQSfMzdL`sM68#!4E9|^pa1{>07*qoM6N<$g57O0RR910 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.png new file mode 100755 index 0000000000000000000000000000000000000000..1857d0e604ecf3376bf7251520e8226b8e12edd0 GIT binary patch literal 487 zcmV+PuJD_Cj=O-CW(Cv&;O|s_B*HfL9^$RwN(T(+(%YH$uxJ3{C#x&2)~Wwoto(l^%m1wm{|~eOzL|Qv-|YF; zj(>lCW6=Q7bGusn=MojDo|KbXaL&&d~@545`mvfwf?VUg8Jur!u=Tz z@c3as^V7dSzn*VtyIw5tYl#NPKU+ZI_WN4QgIP`xJq(xu2eb$1wi~5_KNhR~U&;D+ zr^v6{)xTcsx--!Uy9Q{ut*yRQF7{)Q>Zd&k?{9DU@&3Zob%k$Fu3*5E3ZAT~yj3Cg zVn^l6^GiP7-~IXK+9#{a81N^xC#x&3HyJ!woc!kO!aHZT>_`!2_)i3Qdvf{HHI)a7 dG`7TX0RU=HaFmEk7ijm6U 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 AdjJ3c literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_help.gif b/usr/local/www/themes/metallic/images/icons/icon_help.gif new file mode 100644 index 0000000000000000000000000000000000000000..84c84dbffa0a61882b21d8cf82d402644547811e GIT binary patch literal 1669 zcmZ?wbhEHb6l4%&coxHO^XARKK%d*UZ~OcEFI>3r!i5XBZr!?k`EpfN`NoYK{rvnA z5<>3Zzn_tjv17*$7Z;Z+SFW5owff1EC)clE4-5>PJ$p6_3v)w5!^DXbPoF-$Zr!@3 zrlz}hFGfT}eE$5|$Hyl$H1y%ahgDTod-v|m%*=fA=1qTpe?mfny}iA=yZih1@3(B( zvS`sFCML#t^X5&MFk$D;od*vd6cZDB^ytyPefz4btJ&Gvj~qF&X3d&&=Z?>uIa5hV zsimdG%F621tJ}+$FP}br3J(ttKR-7oC+F0uQ+Ms!_5c5m-rnA`XHUL+_wL!VXQHB_ zFJHc_t*za#VZ-s`#~(j_Y-D7#d-v|x*x1F37oR+NvcJD?@7^_ng1l$WoMB*KIDh{9 z|NsAi4Eg}Y|J)J20SYdOC5b@V#=fE;F*!T6L?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp z&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dgxv3?I3Kh9IdBs*0wn~X9`AMl(KsHEN zUr7P1q$Jx`$q^)>0J76LzbI9~RL?*+*}%*|!OT$4(AdP>++0V&$iUD*-@r)U&`8(N z+{)O<%D_MY3Y37h6{VzE1-ZCE?E>;_l`=|73as??%gf94%8m8%i_-NCEiElUW*8ai z0#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*nV6WAUs__T1av9H3%LbwWAlpjz~0eI z&d=4aNG#Ad)H48i38v837r)ZnT)67ulAu(Cd$Af^98y`3svneEoL^d$oC;K~46>@g z%DE^tu_V7JBtJg~7K#BG`6cd1|nJHE-u9nWOMn>kY#x5>~hOUNAPR_=buI82&22Q3f&K7Pky)OC5rManjB{01y z2)!0K^@0*YZUN9{m(-%nveXo}qWoM1u!pTOal6G7r+HAlDY)HYhEuOT&@uX;Xhn)< zm=G}SfSB+^3*^9)eQF*strr0kHRJz(fB*dc_4CK~Z(qNB{`B#~`*&~Oyngla#q(!R zpFDo_@WK6ickkT3b@RscYgeyazI5@z`EzH_oIZ8(#PMTCj~qU9@WB3kd-v?#wR6Yz zZCkf&-n4PU`gLp9tX{Qp#qwoKmn>eiaKZd}bLY&SHFL)FX;Y_6o-}bne_wA;cUNae zds}Nub5mnOeO+x$bya0Wd0A;maZzDGeqL@)c2;IadRl5qa#CVKd|YfybW~(Scvxsi za8O`?zn`yFMfdYiVkztEs9eD=8|- z%gM?}OG!$Ii;0Q|3keGF^YQXVhLeG(x z$0T~=hN$RJmnc~#sh!Jr?+p_ZVdI-QV^gSu6ElOMC#&f0J;x(12l)iB9XT3l8Fq)k zRY;iO(R7Z;$Y=5le2VO>Z#lR>JmVMEX4;mLu}y(-Qboif8H+{C?o-PIm11@#ojcYm zrRk89VP3e%QiL~dj=;v|WcT98Hk%oX7PxO_Fknu2c)+!xNp)jX!p)PH+b23OSOWmW CC1bb% literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_ifalias.gif b/usr/local/www/themes/metallic/images/icons/icon_ifalias.gif new file mode 100755 index 0000000000000000000000000000000000000000..0c569a793cf681950bdb6140144525df1bb23d85 GIT binary patch literal 315 zcmZ?wbhEHb)L`IeI3mn&?b@})ix;n5ySBf-|MlzF4<0<&v17-XGiRQp{XcZ*P*qjc z*RNl{o%#QE=KtsA|L?i{zr^q#2-4Eh7>EOkKUo+V7=#&gK*~XOGO+G=pwgF;IWJ?? zIvviv1~y(Lx%Vq<4{?05vO94^P2dXKF$aZm;e$$o9L&F@F0lnL^9oE9;qsaNnYGrT zIqan3CWV~cUQrGPJGiDzGGw{cV6@6KCp%v#ATB`AwS%Ej*gr6&K`4SVA}XdemXj-j zA%?A@DrBOQNp?rxj5bz57C{ECb%F_tCIn6ja9t;~s#9>mdPa7k-CL`-FO4`X#JGPi hSI6eF0i3;t*C!?3@~ygIeEWg!qsLF4sw*;B0{|A|cQXJ0 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/metallic/images/icons/icon_ifalias_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..faa84d403a9e02ada2aff885634004e37b2c2698 GIT binary patch literal 315 zcmZ?wbhEHb)L`IeI3mpO@#Dt_4<0;u^5oX7TVKC^{qf_+^XJdsy?gih(7)HOUthj_ z`S;1RE6TxO2iLSohAg)l^j4YXWakS7#03btb}&>5`v-ezfXfV0=|`lQ5LzEwAjZ$Hp|^!UkBbwvhi07(IX8UO$Q literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_import_alias.gif b/usr/local/www/themes/metallic/images/icons/icon_import_alias.gif new file mode 100755 index 0000000000000000000000000000000000000000..d11a5f00c8529612a30e845c663880f122917c85 GIT binary patch literal 1109 zcmdUuTThw?0ERz=mV$)Tx-eNZ%S=^fjXLJ$I!&ajh04r4lnWPYCn;U&>XL3Y%VKH- zDju8QqzVH^Kr%ou2nyn~U=jJi1JzGKtX7SOsFW%K#ifxjFgm=%+Jq{kB_&twOOrJCX-2{(eU_Kx7$@# zRtAH?G@3ul%fD4B6?8har>9A+mSeHllamvvRJydZq*N+*b~aHcl*a>sAh_~k!EDw) zd*&)EEF=<%!^5VoF5%R#baZ%lh(@D59w!7r4Gr9tl@*;%Ad#@TySptG zwMwPR&(BX!Ppqx2t*)*X3Wect*yEWV8hTqK2f?RQDpjd$_WO52p&+0Cptbd9JU%Wb zC);Gw2n2$T4*o%4AA`a8{Vy{!Gkv~YE|=@``JO+Y>+I|#5Tcv7z^r$5#hbWPV7Z(@BVlkiJURTE)7#Q&T z{bOTe8yg#Lx7%zs-@Z-n=xAdw7=wd@y}i8)3kx_LPOH`GbbS!ya5|j_fq=td@9!Tl z8jV)#U$0(y*4JI(P;g>mf=0VqQ9<6?THf8=m~c9fNF)LQhoCVMiKI|S1A%=G=e}OA zpPHI-I2^01t8%$~dU`q%i2wlbAK%LVdLO+(zyQDkq`j+n_X*%k1gO2(TzrQeT|quW zsA5#2K7d(Xl29xXk99rnQ!G@;x^}7@6@>tF(NP5ak6)%0Ka3VMV(JmhgY}eicmy9o zlit5{O_}vwZq=||L&zX;zG}wb0}Er}=6roG7nAdT{a?@>EKCC9!6J@>^FaeR%X2mVYumuAf?_=6)^s h=lCe;kC2^7#hrc7%efNMl=&1u)6UYV@h}*W^DiFE;70%e literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_in.gif b/usr/local/www/themes/metallic/images/icons/icon_in.gif new file mode 100755 index 0000000000000000000000000000000000000000..f1da7718fae4f8369c8bf1749b651e0572a09cc6 GIT binary patch literal 177 zcmZ?wbhEHbjy?gg+X=#1<@WI2wBP1l`=g*&S-@d(i z^=fi*^2w7Yj~zR+|z#z_` z1Cj;V$-t`jpj5CeV_qoB+!d*Tyw#!WPW$BMGCC?(;Gv=gvKT{P_Cy>mNRR`10k;!-o&=-o5+i(W6V3F5SL; z`^JqMSFT+7{rmTmCr|$U`}g$e)1NC;q!GHlTQ2fcl$iN`VpaW6`vXg<; zIw4fIBV*R36rUrS%R*Q*E^-EoOq4ip{m{YjK;TYBO@^&U-U=yAFI>5so1chy Q%CNCc=U@2~v=tQ(+Um@-t5`b^7Kg+*wTnkX)kYMtxKJYvVqC==7BjpmFjTAu zqKFzS3E=8tsR6YM$}q5sR6xY2^Nx5X-p(WIk|wPEFZMpX&+p4idXyLyodXBpz&}P{ zZf47y34_6=r%f|6I*Y}Sm4!b$I}?fc>+7=`jhxHnYBZXqrKSG< z{<^xt_4W0ZmKG9;L?#nhtXd+GI505a?CdNQw(|K+4Gj%uv)*q1u&}UjaIl(?5LZ)E z)7jZsS@|=Y&F1lVsj1NnMwvpPsH)0NOpNgM_6`ULK%>#c#l>*An^Y>LP$(rOB?3Y9 z(a{kKg?j$HQmfUrwz8>IJQC?oqtVD@^6~MpPN&1;u{}LKg@qZ7jg3a5y0`a*Kp>c% zovp1cz~PcBDj3t#Q>Uk=B9V~IF0HF$Lm*&H4LvqCmPE>W_AFH_7T4F;4G#}rTwD|u z7H~M_d_JqZybOUr7>%#Hx&%W*5~Z>~DClb}7E2%yOeRxENYK{S*45QjPEHP){Pgnj z^4>ka?d@#}g?xB;xWB*u>Xq1Lv&m##DJc(}oSf8Zh1L3ACXIC%gc+!Dm9zU z007wS_D}vlgZS4G1OOxO&F9F^PXJIm(E0E|83x-rJBz4Q0DdfCM6< z<0~6Bp*B`cam$5Uv{%#+%PmFC7$eQ!@cx)oJOSbivW3I zF9fRs03CRnTW|BRxju0Liz85F3I41g*CN|TW1!Xn;pJA)3u-YuN1y8aaJqD-y#);Y zv4!?lDpdG9#k@`aFdv%!Ef`XLxqLTw0=!>pCK{EGtbG9x>&LcoXwNOTRHot`>U+nI lh5&s8N{jr-Qvw71eLBpXslfK@x5?>4O?RGT!##of{{is6&GrBQ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_interface_down.gif b/usr/local/www/themes/metallic/images/icons/icon_interface_down.gif new file mode 100755 index 0000000000000000000000000000000000000000..0626655100ef0f6e109e3953bd2c25b7762a7f8b GIT binary patch literal 88 zcmZ?wbhEHbYb6N$v}@$uHy z)`*A*JRV6WqNwrU@+|M?ZwA`ClYmacXx+`_#qImuC6YDK%muX zOG`^Z5L{o^Lm&_j506KW(v3zVjYb<7=uj% zdM6a}YHA*zoSaap;OXh9L~drFKR-I1T2PQaH#gVYTSq1n2?WA{+05f{NhEM*XXnO^ zK&@77Z*QNUpLuX_z~OL0LqnaMK4CDP^LUrEdu(>Kw>NTTX3SzaG#HIkDpjSLY-ni6 z&c@f**KKc`5)%_mrhoPNRk2uHTwE|atC^mbDil%-1~oYN*VNQ-OUsL+qYpJTG)8T0 zMMcHV&Q@b%qrvcxmzS4Xt)|l}6A}{I+S)QQQfzH)$HsceVm;L{V?+FwF07~HNk4PUs0U#^@o3x1$#XxU+ z!meKN_(^8%s7y!1UAF>C!|i;O@ff{hnfKIZY1c7ux~G*RdYkVS2v|X37($PzED8(} zh*O)s$#r?14#8#?hCKzJ-Tyok%U`J)cfj1khX)7znow?o7QDbW1p`2ENAaB?Yw{G# zruvz!(s@&ClPc?T2f@+Xe_Dst18Ig~Vuka&fva|mji+v(!cp!w`CQdkDM9&OE;Ir? z>|VZO6#tfgbnunvj`u;>&G|4~bL#tcK7gtJGRa@`9INZ=b#kW!ggT3oc)r$g>bK{a z;{i6;5U89ODIB4D^YTq|ls*A~_&7p5KUgVz?!T?}{XrH6iGf5vA(~bG5;rJ1r;(O? w0B5qky^El^zOJn3@aH3j?E~>qBf~)vOa}M`^AA_)wO`y_Z@IjJLV@r91JG3k)&Kwi literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_left_d.gif b/usr/local/www/themes/metallic/images/icons/icon_left_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..c778014544da5a0c6a87c3c7df42dbdd0f5d3fc8 GIT binary patch literal 691 zcmZ?wbhEHb6l4%&coxp^`Sa(qXV1QT`SSPg-|ybNd;IwEy?gh*fB*jJ)29ay9=v_~ z_Sdgp7cX9X{rdIYyLVr`dUfEyfg3k&?Ay2R&Ye5w&!2zs;>D#)m)^X2vth%AD_5@k z`Sa(=lP9}&?YedA)`bffu3x`?`}XZ?*RIW+IrIMg`->MZK6mcij2SaJIy!oKdUovC z@$$us&6_u`UcLI%sS}NjjpxsuTd-ik`}gmE{`|RV)28j)w{>@SA3S()-MV!xEiGHN zY&m@R@W~S=dV71@+S;Bzd$xD)-ppFe*cIdbIq@#9;!Zk;n{&dHM}KYsk!)z$U& z>({4GpMLxH?b)+uO-)Vz{{4IS@ZqCJkAD34@!`XV%agyi+R^D1z-km8;vLB0>Fpls#mXKM#w_Z@z%VJ$-N%p1 z-_Dv#DlAM)Ak>dPgqtUjO~KJbH`p_TRZTj~lO>GDQ!tpro=Hd6)5j)&omXpd2qz~O zBd>v(xR+@F3%5RBn4h;dgHN!M44aonfIhb7}Nu&DJTS} zIy5jzE%BKtzVwI)gFAs*NMMHu43&+AI3R6|YSu#om5|~9b1w0r|Bpx|1 kd2_~ml@kXNTm)Ie1(qZ@G%oJEyW2Nr&W?)@yc8I$0W=ON761SM literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_left_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_left_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..84c6fa2701caacd05b950306438359bd9fbfb29e GIT binary patch literal 1129 zcmV-v1eW_pNk%w1VG#fk0Qdg@p`oELFeFY&O3BH|VHg;}Wo5#BeRCHVyBXPNPRhi7hS3l9IVzT&z$~ zM@K)3IXQe%O}cGuvQ|}D7#O8lSx^7~S1Bo@qocQ5TcAWlw_94Krl!1LV31Q#wpv=T zRa2x*O(rHCzhq-9;el<0gIy#IsGQoa+pH)>UDIcavMNJqOPfSeR!osCW zM#Xq|!DeQ}jg8*k%K`!dj5;}qE+-5O3A57eEiEmv zRZx~pNk}s@K0Y$Pe}92OJ+xR@wpv)sgM+?mYO=Dj$$)^^x3`WmDMLR$wQg>hJUZH< zqQQZIxLsXuZ*Q|{X{}gT$&QY*S5#jzFoQ)x*Q~5V00380Q;t+oXlPw#IW&epKUpd& zRw*f1Dk{QeW`HFkkyKJxDk-^MT@@7&kTf)+Mn zWYwpqem_0ixVXWIi8BNQu~k%3 zU0q)o7}u+-xo&Q_Tv^9?dez6rX$}s#X=#;2L?a_3v14PiSXQE0S*uS-XJlm3si~h$ zMzdE}RR92dIy$XYRk*mg9UT_LYik7s1-M*Vv2AUqr>C7rNRN+?q)0``wY7mhJ!el$ zpF=}1FffNSF?LKsGBPK0HZ&0t5y+R9r%q0AN=lGILjV8sy<%dbOiZRqO2?3prBY8^ z000000RR90A^8LW00930EC2ui01*HY000R80RPDvfNM>;5|98WlyXi>olyTUeS6j; z)g@cmkSzJc=hQx3@&=?x*G9svC~{;3$?!xK9s|h+wY#!x9;I0#eo%wrtct5xcYIZt zfK6DL58=2dxWLX5BRZfs*;6;e&m1^O@R=xJA<~%!TOQaLh3XiO8*G5-GXx|-0!6IQ zxoIV4&np4s()8L;V8H?eNAi@qmXAg*a00AYQv(Bm3I!UPg>i&I6oC~l1W>?XZW{{} zp)9VpB<0jO)Dg*+pl2pJelED%ge4+oz`ty vBaRA*M1&MGi5`JC@s0=ejKM(@{|o>|4E{togfT`eqDc;903yUa0RaFzE9T7z literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_log.gif b/usr/local/www/themes/metallic/images/icons/icon_log.gif new file mode 100755 index 0000000000000000000000000000000000000000..4a1983ae9022e44f398e3a9a0e10b4ac94956f1e GIT binary patch literal 297 zcmZ?wbhEHbH{jaY6KPTt^lPCYL zUj2Xj_WxbG{_oxUKOy12oZNpEmH*Px|KGj)pO*GNB;>z@#D6xn|DvM*g@pb;fBv6` z=YM(me`DkSK)}ENAsJ`~6o0ZXGB7AG=zy#M`H6we%|U>pprb~BsZ}84MvcYf^T#hp zSlP?=eVKeQWLv_@2fsKg4hR`M-?MkZ^@J0N-1pVQm{;ypHWiprnIO&Q&BHGtFD6p2 I;K*PN0Lu?w6951J literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_log_d.gif b/usr/local/www/themes/metallic/images/icons/icon_log_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..d31bd9b64e3c86a5eaf0bb647179307f5c21a93b GIT binary patch literal 297 zcmZ?wbhEHb;JD^`~T$0|EEv?|N8a+_FfuSGFzA3R0r`o6&CNmJg+WJ+P)oZ2%ZnO| zDd*KUNLbl(^nGEzXs|6o^WiVUiUX1c&-av0xc=Z&0{49_DW;W@io7B-DidUdyv4+& MH{jaY6KPTt^lPCYL zUj2Xj_WxbG{_oxUKOy12oZNpEmH*Px|KGj)pO*GNB;>z@#D6xn|DvM*g@pb;fBv6` z=YM(me`DkSK)}ENAsJ`~6o0ZXGB7AG=zy#M`H6we&tXD=hmKVL2^Efljv4``qZ>B- zEKr-@zi{K4I;%Nv)EBSpI3L;gUHHQs)%3pTn#j}VCp7=i^V4CA%$1E~V^LsjNSEew Q=HZu+7ZYhyaAdFs04Kp>J^%m! literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_log_s_d.gif b/usr/local/www/themes/metallic/images/icons/icon_log_s_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..fb2c05fcd423064deaaa9f620c95152ab5eac9c5 GIT binary patch literal 305 zcmZ?wbhEHb;JD^`~T$0|EEv?|N8a+_FfuSGFzA3R0r`o6&Cg*%frpM%{|S{B1|2m* zEyo2e{4CIz@1L-7O`X7;H|&cNJI+ToeNX-{$2h$&`c1^?^HUpt=!KcEMCNitGO{W# VG^EQ4Ig5!)%S#BiDL67%0|2;Adcgny literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_logs.gif b/usr/local/www/themes/metallic/images/icons/icon_logs.gif new file mode 100644 index 0000000000000000000000000000000000000000..afe0104bd6140e76bc00736e4217bf08e6a22e7d GIT binary patch literal 2092 zcmdT_XFwBY7)}(6R9v7|Mdb`=Q6b|PAyEWO02u*6RHRxB$w@*;E+#?1ss+Vrs|9hO zf`b5+rL2IUh%sOSgdquArqGH=F*2%H2fa|y{wV$5_s88gp64Ck`+RpUuFke3`h3)U z)N2{)(W6IRUS7@3&0?{*tE;QLyj(87E0@b-Vq)s*>gwz3b8>RLy}chke27M)Yiepv zoDdck7CwFYw79rfCX=yPEQLamot<5fpWEBpW@NN<`SPV=@fET7nvTwNl}g#$+nbx4 zd;WZ+Mx)8k&*X4?($jAwCMHUyB^4DFE-p?~Dpm91#idK+4o1?xm+E#KlFZ)paE$C7Br+y1KfJjg8ICWfDnBUS96t;FH?g+LV;U zHEWC;8|&V^dpAD*ULXh@7a=&Vr*<|Z*TAG>#I`L*4Njx zwYB;CQw9eI4<9~USy@(En%df`mPjN-;u=Rs%YlIbLqo&b+RCh~Og%l_k>TN{riRhc zVSRo5s;a7nhB~FPA}J}!)s-}Fp1w*|)!*OW(a{kax;G)=a!X4~csS?m*;uu@nnv@8 zjy~<@=jZP3*3{ILoSdAQd4tJhy1BW@WJOU?QCV48QfUEVuV24%aBxs4imqL|+TGn1 zA0HnT#ZxMkt*xz#7A<-+HkOwsX=-YWh=@3OQh5LV{m4k(9lq9s3jH_1mXxJ5=rX=1T7GRg)p2aqK8@VgeH?7sF08$VDm+6 zmsNn_jtmdI)Vvt{ec*Zj zv%aUl{o32}q`RxLqrL5MYfE!eV?(`KRrjd2rn*X5Sy8T#KP)SiJ&@inxmSGmPEq0Q zf_zC{ZccXAt(%z{>1nAqeo0AA5+`22cJ)d^{N+m*<1U;(cQ*D+O!UvEPyO`c$rC>u zk2-cVGUEFqhYx*sFgz^uK!`{v*w2S~++a=+n-#bZVlo2gd-r_1d)GJqJN#@fmfL@pH8!hGG@HD+J0US(>6SqT`g zSia0?>5|1?En2w1&|v<&xpQXg&-zktrtTLrbf!;3qfjf~=pauS%3S+})BY_{Gc~AV z9d0=c^sSA-UzlAv4x9p}$($b;0BD`aQ;Ts5$CnjuCv~UkpvIi?OkLe)ti@lVIykO1 z-y5Jjo!(Q5v06BmG9;G-dQr9*wC+#Tbw=-*jWOH36m525!-~bGw%t|bk(qvTQG*So zG!$y~A#N%4w)twxJyxCB@P(r|Z%U7HdBC&l{@|Wr1#B@>N4_%nTA9 u6BZn3VrJ!VhzL+T+``Ri)pEn&(UC3&J+BaniHgVDC9S1cI29Zm7_0&H=@-WU literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_match_d.gif b/usr/local/www/themes/metallic/images/icons/icon_match_d.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e4c3645b34b46fcc70ba37ae2b7dbab3f8a306e GIT binary patch literal 843 zcmV-R1GM}{Nk%w1VG95Y0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui01E&M00#&t0RPn*NRXhwf&>2@M3`_PLWKn(HjH>s VBE?!34JvdeqJ1t0 OORCzr8Uvlg7_0%j`wztc literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_open.gif b/usr/local/www/themes/metallic/images/icons/icon_open.gif new file mode 100755 index 0000000000000000000000000000000000000000..ac3da1476b7823fcdddf0830dc5fbc801870f7c7 GIT binary patch literal 62 zcmZ?wbhEHbUp-6H@0{{R30A^8LW000L7 zEC2ui04M+t0009*c)HyFFv>|^xfs{IiVz+k1{b##hJmIjQJB>#2k8q>a!n8R9px+o fpy#vHQlnB40?ZJXjAjOEaXP70>l4fEb`t|^xfs{IiVz+k1{b##hJmIjQJB>#2k8q>a!n8R9px+o fpy#vHQlnB40?ZJXjAjOEaXP70>l4fEb`tgPW@a)lF#P}jA4uW?ia%Kx85qPEbU+F~ zb~3OUEKu#6c4a~eQ{W0wm(Zhq9fHR0bsS?#@@vw{1Z3qP0hjafQ1x~CU9bab&X J268Z10{|*zJVyWk literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_out_d.gif b/usr/local/www/themes/metallic/images/icons/icon_out_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..879f1dac388aedfe9b6217850e1ff5897c0ac8b6 GIT binary patch literal 189 zcmZ?wbhEHbV2y7c?^?_0NS{rmUt>C>mbe*L<5@#23lV88(sf3h$#Fo-kg zfaF1TGO$`bQ0)spI3YQJQPfq)$t7Z~2BUw%+pWnwyAymFIk{pd&p#5e+ksJ?-TZaxEdiUo|Ns9C3}@2P(in&Uia%Kx85l$ubUiwVljVBXR>Exk>BMT+4;_Ff^MbRK9vDMymd^1oc)o}L6Px6 z>`BW0g7%JOF?rF#+=4#w0{lL+l;#-L1vV!x7LJW~G3&}$AJ#8m!Ys(TC7xlsdFA@~ YmS-%jPlYO-z3i)d?fQ+Is)`KO08fZ=vj6}9 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_parp_d.gif b/usr/local/www/themes/metallic/images/icons/icon_parp_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..7d7d00e06212aa364adceaaee2d017fd749cc979 GIT binary patch literal 303 zcmZ?wbhEHb)L`IeI3mLE@#DvL@7_Im^6}QKTPIIGdGO%Dj~_ptKYzYu%dJ0u{`~my z=k@E?moHzwd-vVz*I$9)$&)Al|Noyk^9&F$5CIf_vM@3*h%o4Y)Pn3}U|pl2+Lw|! zFJslZH=275Z2U@c@Baun#PLwsNSY-`ny205*v0_mgDev>j(l7svY1`UL29nU4#8QU zS!*?wu0|NG(m9m`_!qJ{Ydec~Afd}b-lF{}%0PFyS;8}DM)m9ajopV5R>kbO%$!*=t^_46&y WSX!S7RXTgwSNGcW8#h%I8LR<8Hhd-k literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_pass.gif b/usr/local/www/themes/metallic/images/icons/icon_pass.gif new file mode 100755 index 0000000000000000000000000000000000000000..fe1bb0da01c67d7e747a84cac85629a052541dd5 GIT binary patch literal 182 zcmZ?wbhEHbUlLGnT$6EpbtT^Bkw{Ro(yp|1+FnzzP(9vVg^P zKqSac23F$-!HFrIf~O>AsJcdV9+`Hn)KM?`w!@Z7+ZH5$;bP)C@@T2yj7YKenGBOn Oe0h2#+nP8S8LR=;PDG;s literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif b/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif new file mode 100755 index 0000000000000000000000000000000000000000..f7f4c2007b0bd1651a3faba0b2028938c07870f7 GIT binary patch literal 183 zcmZ?wbhEHbIfZ|UUu&fS<1lh^J zYLXxvni9!*hGT}Rikh5kdv@>Jk8fYTd-?d)%luZy(%nY1@P3FI;RQM;@gr&5Y#g Tjbxc@qNva=*|v#;k--`OV8&L@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus.gif b/usr/local/www/themes/metallic/images/icons/icon_plus.gif new file mode 100755 index 0000000000000000000000000000000000000000..2a94eeb93f43211da015b194db1041875fe809bb GIT binary patch literal 1100 zcmdT@YfoAS0KHUNVbd08tBuxzja{VcqO+T=bDL1KC}ItjIYY9=wk9>Qtc@!0MH7heSbA4^CwY8DMDZ706Qv^XENCCr7>2$h8@(UJ= zU0U)Q48Kbx{FWB3!(rEGG}4})(9lq))9H5Wl*+EYKE>+lA2yqlZha<@$u2AsVNqVvbwrjRaIp& z>7G9qO-?$LO6B?UL^Ao@%F0S)WTeez>g|KzViULO6ygZo8AMY*{&m&+v-3Z>HS zl9Cb{jRrw#9*@`C+pEn>EJUKZT6&3Y*cek%k z>2f)_T<+bw6+=Tq)z!gn*P5G~mX>@blTj=dd%YI9Tr@DikBvR5)9F%DQam2FDd-u+ zI-Ojldb+&)XF|eBzu!-#Qa3j?9FE|y29IZAdU{%|R+p6(%z3Bze7;B|>gf@(*{tpD z?fLn67OQY`b8~ifHZ?W1rKKeh2w1IF004p_$p2Hszeb|~00Pdw&Hwfj044zZI75?P zM?LxC+e3-%HH3SF1JI@6_XsF-_1DMG85mq|eKYO|8Ut)d8SlI+NIWZN3P=YJHDVI8 zYYv8;z^adG8oI98YqCnuY~=W)V%h0ug+wyySIVjM!~Wq!uawNYSbwLuvJ)=+@G$4I zmrK7JD6G*OhkPJm9P;OZFU%smR1Uz=+)b5!IV&l??I=(i>`4V%l zpzppv=1pZ~65;dr+i&T0Jp74{Y|fikLME2@12YSeqny!c^zNHPaAE$dpD6_g{)QSq j_z4rD3r{Z7ojx8%x_UC5ux+v&!{GE+YQwY9XdwMR4>RzF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus_bl.gif b/usr/local/www/themes/metallic/images/icons/icon_plus_bl.gif new file mode 100755 index 0000000000000000000000000000000000000000..8dcd7c006291c272c7c41036c707deb3887d6ff2 GIT binary patch literal 1096 zcmZ?wbhEHb6l4%&_`ZqZ{Q2|#{{9&m8N$NC_wV0lWo7m7@UXJ7TDWjwe}DhkvuCBG zqyhuIfFLI)$KKvPB_+kq&dS8ZWXFyj?(Xg_EiL=@?c?O+?CEI_4-b!ti7_`fKYsl9 zg$ow~0|OT=T9licd;9inQBl#<)YRFtXD?f}XywYK8#Zj%zJ2?oNfTRJTMr&Q7#SHZ zDJdBl8Qjp&aP8VP1qJEt+qYO-Swuxe_4IU3nl$O?(F3BQ0ud1r!NI{UE-w1|`g`{5 zynOj`X=#2%Wl2M0bz@^=TwI)uja5@q{rmUttE;OgPMo-S@#0gbj>W~rtX{qH*|TSP zdC7^1iB?vohYlUuxN)Plw%UOM2OJ#ie0+R(czD>@*}1s5R8>`jf`U|46`GowG&D5S z)Ra%2Jh^7gnyjoWb#?X9($coJHW5)#V`IZrtCsKGyLb8Wg}Zm}-nDC2QBje#wUvjb z>x>ywuV24jTU+bsl)%HwJ9+Y?g9rEf`S}P62^kp~g@=b^XJX6AM4)|Ho+Pngh~ zlaneWB;?@WaO1{}&d%x`JGRZ5HEY|pZS3sqB_$bmX4WM)OwZ&hqD|A zFkRMgk(>Fzal`lT5yt<4zLtcWZ>6nPH zlV}nv!-D0ZYyw>}4H`;^r>^!c*mZ)nV98W*PU%&93YoOSbRx2{LT2q=C91&d?eKNS z#UC3dIq9uo5V*wUEvDD^XIIghT}Sv>wW3m`7?y5+e7j$;apB^p7n&p|#c`JF{1I&n z$(AUUQc((OQCMnq_*b*yF=h?{6_ZCB51ySFaH(EE^&;czLn|Dn@dPYLP!LpqsHW6$ aNToZZnQ=$5&6;UvXQipBIcd_QUAuNED=Sr3S0^SW zT3cBJ1qG?9DyXWeUc7j|uC7j7TP-dwX3w5ITwLr?QBfHg8GH8ZbaHZvjEbB;fBsPr zIDG8b;hvs$At9lvs!9(}*X`T4sHrKlv9SdP2J-OoZrr$zmyeH)on1pi!_UvBu&~h1 z&Q3u=Iwd7VQc|*^vHIGzivLMy zhv&?hGYkw2|Ns97lB0l<5K#Qd!pOidg+T{o2q;f5aQtV`%)DTjFzH}3yRv11!i5u! zObl|Kb2t{XGjL2iqGF-2;8=@Ewi1WNhcu>s4u(}SoDOWPt*9n$V!5@gRj!$WhD3 zXQxr5&{U@Yp`4CM506N2*L?V*Dd&7b$&>kj#;oK8)+(lUS%*aog_rQDvWatSU~_S5 OY?4&43gF^kum%8gEG!HF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus_d.gif b/usr/local/www/themes/metallic/images/icons/icon_plus_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..ebc745718a3bf0b3ea032d817d0c9ab7f9c55f77 GIT binary patch literal 682 zcmZ?wbhEHb6l4%&coxs_`Sa(?moGnj_^_+1>*>>{Po6xvckf*RBm4Hr#*k;K-398#iv8GiT23-Mj1R>bkqT@87@o3445?&#<^e*E~+qenk|`gH#M`F;ELEnd91y1M%I?b{C@JXo`4&D^TT8b91RMFoZ@)v#@eRhw-w781aOMs6~VahlldI6H(x1VAEg{VA6_?iHKuzjuaGQbdgn*4GuH8z!fJR{ggM*D#StX9`gm3I7U?= zAys|*sHl*)7g*zj7YRHtxR4qlUKg{i;-Q1;fp$G9uBw+xOc)XanK)X{qHY>}*aPgt(nyzj(mIuBy2xv;O8<`jyJ@i&!um%9- C9yqK3 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_plus_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..1c7ca08350708c8b4b72ad9838822f035120f2f1 GIT binary patch literal 1120 zcmah|`A^z+0R3pcUiGL%!y;O5owMjz=Zwc!Kp}p=90Gm?L98cuw0HzOrgR>dTD5po z*QzOYtDCSz@+j$re}l5A6N$-Y@TmmzVbtMrvGq z0S@56pQk{M#~b+AR#nyE^z>7ulEY+9W7zQU@E{Bq!*DhLTMETee*PGPvDw`{E6AAS za${qo$1%)iv+)2}kw~63HqK=V)^FTcD=GPkkBy?}lWY+uHrk?4jE|3xqR1#p@4+yR zn;S1QSeTK)bi4R4g*wIKbWtc@(rCT>^luc3P8gQq@vH!U48trxn3 zH~|2OpP#F%^OK4SW#HwTT;|v1<@*y8i@CY8nF75?v`|(y04F*)I2feTeXF&VOdg<8 z0|MU5#p4ILObCKX6JsXQ*b7BPECktBsiLAn*VO7C78eKTDGe~J#jvBr^^z^DqrQ@=; zdwNEAw5`5AEsM3-(h^S~OsDhaGBedwvc0_>%imv%pfn0a4#SVrm@Y0Z6Kv+j#xgHB zSO5TuQXL%~LqmOAVq#zb?$cAUA|s75Sx^vRwW_M^N~k#cgO7;B8H{VLC|@opurxG0 z9~#n%(_#2y2)fYJ*f=W?98OJb$Yc-5Nq5qav$KEhu&E1T5sIdSgoI#t{6jvb(P&5{ z(sE(JB#*}l4D|GLdtoxEGdV-4spkB=#)O2Wr6rwCr^2wb^9=M7sdTxra*#?95xgJs z(=AeI763RLj`<03MN+s{T&&e<@p#XTuCC!!dQVT!W?h|upK+kqPjVUSH8tki+V5v( zxNJ58zzoJSh{g9X>~1RU`1ttfXm3xe)$w?hm6c1?)z37Vr}g!Yjt&ghiz6c=s~sJt zYuP6!Cwu+*yWZJ3FBAwPBCK*bkw|P2 zi&y0GYv3GbXJ`NE|4`6hkR1T0fOzgZ{{(P813%Yje$?+c<-PQX@CzgQEqr+TsN>39 z(YN=d7p@jYhCg3T%<;-?WsF&0`Z`(m887fou5-n0Xx5t`oA14XE${kf z2M6J|TiHI!SA`Y};&pieGxiA!-PP4PLYd{%oesR!)_t4=$r|;uk4|pRuke_!A^c%@ z*G9ITJq%5Fj=ZKjOD+Lm8XNV~o0FmMY$?Cmw-FqF+Wee!-K)>sj*oFZ+)8f-z3;2V z$**k-KCY3!MgC4B0b6w6t%QMbLT~L|k=!*Z%kEK8Y<`Tw9$Js{`NBU?G!rOPM=Htg zs;XORB8_jUmrGhxh$Z?xdXnAdTWfn+czN+BCR& literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus_p.gif b/usr/local/www/themes/metallic/images/icons/icon_plus_p.gif new file mode 100755 index 0000000000000000000000000000000000000000..eb41284aaaeaf9d9216a2c7d0bda260e83db8d71 GIT binary patch literal 1087 zcmeH`+fP~t0LBk;Q5JMwSTA4|JCl{BS-N$#Q`d;r7SPV=scAP~rVopYWQldjl%z2v zZSB^Ftq&9jG>VpTk%U-*f;Gtfa=^p%aM?l33b>(2P;q41>Bi{)vG3u__xQ^%`Izi$ zAJ_Ml0cF6x9B?=s3kwTQr_*dUV=x#Zk*L?}gTWwzAYQNc!GmuR1a4|-G8&DKAM*o& zWeBnbgUfzDjH2l9@GzB1X=`g!&CCo94H1cjFbw;AKDAn<(P+ZqaDRWlK)|EZt23F5 z#bTM8(Q$z;;ya+yrJjg9qmI+jYsB@#((ZB=vgg~i3iY<5p7l~hzz zq|<4wR)wOzY&L7L7&x4s_Vz0Zh2r(WfzJmy9543w|H|{CXaHG(bGd(D*xA!_B^pIX zMn<^YzS2@sGPyZ1Ax6<(!(oKW9q@SEOeRyUR>)-IU0q$NR7#~%4Gi3tX^$%IV~b9=L-tf&z=)9_SD2f#w0=yUQPOj$#Nn}KSj$@jp^mDi_lW8K(J$+4({ zJe@28JL<@k)AFnIyU)&Bg#K;(04ZoHVr)LV{C2)}z&lu{k-ittpuc%Z;sA%9^kj z4n1+BrTV0eRnatPr4Ra`KTbWh9!g55YDGLpF1Osp*?)1L7vI;P?~6~yJup6@Bp3(= z{+a@gj*dDyI(Bz=H5$#{-kv}pV6)k$r>8SBGwbW?6bgmQ<fYY&#>U3x=4Mw{*ZBCj%jFUZg)|yXBoakMMU9M%@OZq^($coJHmz2BaB$#s zI%j90{r!C^m8w)KcXoEl%gY-ZYv}+sw&}^PqSeWkV=>fq6GMPL!_C7f|xuT*Bi@jmD&q*ZglamuBvjKvX z27_UF*``*jFP~^M!Lv09$%PYSAF`VgtRngmk)aUua zZqg&hY$;3z!pFb;rPJ-r{0jADZ4TgP@`0bNmt|>I}5wk#-mgeXCCI;|yf+@q% zkNYa%=t)vTQV^K5_I0sdcqap|#_8cL4e0CsVKvBb>^ce4{o*hwx+(j^J8rU3>)~Yi5plJ9zT@x zakBphR;Z2E-gGsT=(k;b8+e;7e!%j1XD7VDu!vW3K7CruAhtV)p8c!;btgB<2fxFR zr$*!-hxK6`NfhBkPBb#|ZhfWgoA?;CJPF%W`KPh*A&w!bcpfl;jxNWcGVpK@D*z9* V*Mr{)kS@dZ#(z@N@m^j);(xAOqequ6U3&if z`OB9tzkU1m;K76M-@o6wb?fQVryoCl{QUXznKNhpg8{=p1I3>#j0_AR3_2i(fZ~LK z{eMFUudl4BFdq|#XSct*B2S2;x0^Q;vlP3Bhre5}s4QP#;M`yzA8%zTPd^q8-e3<^ z&-J1#;@;|0xU7PFgBA7If&~HVx%iycd z9H{KgrXbJC!R7Dj?(gI48{j3u=)t*$%}2{IJZ5Ip~eAz4-X3z6b}Uj z1qKELhDt<%Ffi4prz9jBxqg1DRZ@IVPPJ}s&zP8~Oh=JEK9MyvdP+rX5D=T2o7AJD z$BT=lSy_BKI;^a$Qx+D#adEX-S%*MCt!QXxDJh&lI*v?8nLRp!K0c^iT&rGQ)vBtw zU0hB|O22AqykKC%dV0%~leoCJpGQWnQc$c=O2B=68yggVKt9T$p(7(2!I6>Nw6t+D zGPPV>RsaA51OqTIFvFmrt58i@Dk=;N3GMCe6B7;`92Eov1Ofs9;=#dRIx|xzB||?y zXJlk=Z*PNITB}e>5fKr&US6qCP_=S$yk}>xR8c$t0KkBNd>|jNX=$`;Yobt4qgGa@ zRaC`=g^!PqlsGuAT3U2SLwHU~XBHNhOi6AX9hFE&c0oLeJUp;sVu>v*;KamwdV0fk zb#6L0si~<;M@PbpjMmoFTrV%bb#*N*EtEJjpI1|bM?<>0y02?%xoK&$S67=rJ)fVS zg(@kGPfV^@R;Wx&s!mO+PEN&lch|12oKjG*R8v|I5S~OsxLjP9R8Og9W-%-*e|~;e zEh@ijYmZV;wP0YiVq%6rKcPiGPfSc#Q&V_4Iz2r(tWZ#)PD-v)N+Tm9p+-W&eSMfb zJjZ!?eL_EtP)y38puUxrx^HitMn*gw9JI8w+qATuLPD23Jjk`Rs$ycGL_$yi0KbQa zu2N1_C@5eyGN(&Qu~t=LHZrSFOpP)xrlzJbF)>d{O2C(ws#;bC1_lZW2!caC92^t~ z2nf&5&;S4bA^8LW00930EC2ui01*HY000R80RQa~AZrS$TMr&2NZ{mBsY3q#g*YRE z)E#oa+}!)-4UCW!h7bv$cMeb-II0jJKw@T{3nFXg5{OUe4%i+KB=&PV^j;nC|idbO)j7d7LXo;j(B0lpuv(85rR!Nw}AvVJ;!KGqJRPu zE(;M_0QjH+-4M2M9c{@x~A~a4^j({{#d8JG3Rny8r+H literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gif new file mode 100755 index 0000000000000000000000000000000000000000..9aebb032dc71ca41625bbf47fee7b0d7c5323302 GIT binary patch literal 1109 zcmd_p>rYw-00r>N3RDCuY{scsj8a&1bBnsQ1vZn;W=%_D zgO9~Wn2xm)Uno*}h)hry3>CpS0Y&j%9?C_7P!V=T&~<@gUB~D1 z`}_O1wycpz1VNDb`56+4R9jo)@wlwkRk>USLCa?x4sd2>W?@0a?d>4A@bcx6R4P@egu}zbe!mZfU0&~& zLLm(V{4ZX(x3{T@3^5~sVny95G(&2F&SY$lVA#bOQ(4Ly7Iu&Sy` zC=?ov3!|f>eSLim4fUbWf!pnHI-#PXJcGetHZKhf3>b}*!Jr2O*Lr(<7Z(?!(c{z8 zD1!K%PRpZ5O=|U&%e5K|2Jhbe#%^CaIXN+#XIEAXQ&SQG0p~jFZ81X7hRtRL!HuS- zPrJH05#*0>_;7G=&}3Q`i-!ybtwtl;+_byh?zy=+7K?=-Hm6h9)6)gR*2&3<)>dw3 z=PeM_cXZrhGMTYhRIk_V?d{do(RsWsfuMDKoYUOgOrc!ka=8!$jf{+h!=cBIzf4b0 zZ)|ML&(B|9Uk3mnkw~27|5L_aXcPb_0qXhu^G^Ut37{r7Z8NC@`_UKrtWwbrm*ix8 zHAVz|{iG$CzFqis-EH&5lFZ6axRs)143?Pk0D%#&9bH}cU)*$TRidi^RBn59_IZ(#C#I5M^+xx5}*L(cpvmHQU8klI<9y_E7n zQ|9-B@2ujky*@~^uF%Ud$wiz(A$%{06IbRuz4Fjsa%r3dpsSywvdY@hXyL5STC;wl zFvzsA?%CVxcNpEu2Q^RezbhDu;tK^gd~pgr<6B*6UwLW^YNA5;_q}qiVrSS_nv#o4 zZJ|#RuUyQ1PIxVEB54`h6T1H$Bdzk^yzH5O;uEl({i^!M?jCZsnDI->&;E)F41g?u ck6dTDP8Cb0jc-cn(Xy+6?mmD+p@8@Q1M?o&7ytkO literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..4ab4992a10cf7060d29a72b8490050c14b6c406c GIT binary patch literal 694 zcmZ?wbhEHb6l4%&c;?CQ_3PKmmoLA3`SSVm=lAa2J9X;R#fukz{``6W{{3gqp1phb z?$V`8@87?_b?esY)2Gj!J9qv1^?(2V9XWEOtE=nm*|RTRytr`T!uj*(A3uJ4_3G7| zH*fy>^{c6=>EXkNw{PG6^5x5i4j#fujoKYqNfuI|8r z1GTlad-v`=di3a{M~}XJ`}X?v>!(kjK6vop`}gmkKY#x5PYghoA?yCG&b^aS=P|DfX)FP973Et{%=TEbQz~i#V*^)jc>(Y&}?* z6izHs=QB2E@^CP;bz*dqW^k6bbJa3Z)`0*Xjl|9d~8->5Nu>%um%7L@Crx( literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..7025d20ea0b1518b7ca830f576c77ef8d9ac7b93 GIT binary patch literal 1135 zcmV-#1d#hjNk%w1VG#fk0QdR;tx{5P78ZvrEG#T6yOjY2{~LNUg8c$-pExO8$65fMEA0J2(F$B>ZBlaq!kD!sk29UT`? zOiaIVaga1KNec^;H#UA!P}Qoce^X4FLqpfAtFv8Qz-()$OGjH*RaO81K|wHTEG&>x zQmBTv&5+ZUzPh*4E7h1q4|D0J2t8 z&(F_iWMncjCRi30d@L-%k&#pu7OzxNCnqO!F)>n3O2B=6tW{IASXRP)eWOxR5)u-P zF)_-ap>A$&e^gJHQc_6(08mg!K|w*VR8pc+Qif7evQ|=#JUn3r23J#0m^?IiIyt;y zVZN1>e>^;!R8oLcPP)3fyKiooG_ zVq&FGPOno=xn5p&A|i27PQ77ZX)!UcQ%tzHxUEr7pP!$HKR;S5ED;e5wS0VoCnv#j za9JuUF8~0ON=UC+R;5{4!ftJLARvxJM5Q00960{{R3000000 z0000000000A^8LW008;`EC2ui01*HY000R80QK#8unG$wY6uW0P~gf5J`9BP*^{P* zOFCh;Ea5s;Y=#&VYf3yAmIq9QL}nsHVCQZYws(?lY@_naMv@NWzQrRWB8`h5vb2z^ z_NPz^UGU(TB5;5h2VN@V)rf^E-#s>O+L#M+;1#nfFS5mG0>Vwc7LStIA+UhKf?Lzh zF$p$LT&X}FV9~-sfI*}|i@cD^K~GsXG}p%90S4|_A1lisREj2qh_@%|(CHvCC5i(8 z06GN_V5HTqFC)6t8`Tb3Gf@Q!02mFyK!P2bObl?8i&eM)03;*`V8DO_W4$t27%)d$ zoFxK436Kz=fD!zu&!9xRvG!VijL*$bWBY*@106VNY B#V`N> literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gif new file mode 100755 index 0000000000000000000000000000000000000000..4542432ec8f314da629f445fd09963aaad94ba65 GIT binary patch literal 1105 zcmds$+fP~t0EZ7N1zW9Cx0yDkYZ_}UnKRC1#&&&JyT)phI#DC6g;W=t;*eCk*#;9+ zX))8ePGu<*1w~c_Efp^aDl4EcvD^+E@d#2bUQjLy1vR^539J9czNcTlx8K8ewWuKf zd{r`#4E#9*gu`JF1er``Fc?frOG`{l#9%Ny9?$3VDHJbREY|(|coK=^^?Jv~#wZl5 z&1O?56mGZM;c#qhY(%5c-QC@RfdRQ(URqij2>4AVlgHz+*(}r3(|*7I!iA5XKNmpI zEQiAp3I$%T$K`VE@9+2a_G&a5zuy;$gsQ6v0)gP}-7<-!4+OPzI(>MU2SFyCPTSGZ z!Q;`*W-|ybOiT<}t=jEvkJ0$bYBki?m#?p{uCGIFZ6v8w>hU<2mzNh7q@A73csyP# z?p|G8)@YP=yIrr>na!G5?4QxmQ4*y?(2S#4?9t>ET0))9IASc>VqTMMdY0 zMnghE!sh1Y&dv^--LbS}0l|5-T0Sx|Qd3hiH#cLk=m!U%$z-zJ+|1_YX0ce@)z!sd zJh58MLZL7e3b9yBKA%4`Bkb<}H5^`oVX&#GsjjXJf)qp|5r->YSy^dlz!?nky}hVN zB#Om?FlE# z#>U3_`dXt=pPHHq!;2La<&j8)N~MmCaX?VHwzhWS#Cv-EyxVQVVzGI7c@zo-004u* z5R1j$j{g&<|3)GJUXBs4`(1>TK#{ zKG%2caYk+V^|~aL9(_9b%rWj4NHyYe(mS0){K5Fcalf5y%EuxA^t(q(uf+Y)LZcJN zIe^c9gqDFi>iTKmQ{MtT6Ok`@^ca{$;Tj7$nD?(%pst)j;g54KsRxn$iIZ*CLR4JE zk(8%v&*qF-8Q60~o%ImPI%a<>2-MV%2=FNNe?!A8f z`u_dg(&9o16FT+c$Ua+`D)09yoB|_U+p@ZrrG=tJ}MG?~)};u3Wit^yty9uCD$2_s^Iy zW6z#F@7}#TdGh3m6DN9md$(=d*4^D*TU)zf!-l6%pFVo@=-an%moH!b`0?Y9A3wf- z|Ni;&=O<5|oH=vmKNv6!KA`xMg^_{5k3k3IG*Fx{u>WuH6Y^BD<(CxUX6kl!QQ+}Y zarJN&VHW3PWOVlMRaKJo@|x?*%IYd7&cx2ZE#%9n&$M2ZLCjTo3YV#mr>}ygx33o` zCl8P3B5q?J8DBv=7hg^``4fv|Sk!she4QO!Jl#B%nZ4v(y>%pP#P6BAIJ0_sy0ZyN zsoAqAdUA=Fm_*!Ybm?Sd=jBMakf_Ym$;Vu9z+e+Y1Gln|QC3RRMowWRH5s3Xq6M8B z)O`C)91k5)p4hDFt($1+;COmAYeKF>!;^!PlsWozcD^)p6J~J>kozH7vckPzwv9nz zXNpR|LYJ8uo{k5Y8d~_xWHR`0LStQ A-~a#s literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..15e0aed9a8e917d8f85e13eca9e25e1f838dbaec GIT binary patch literal 1131 zcmV-x1eE(nNk%w1VG#fk0QdO-hb$~oQc}5HT`w;qYAh^q78WclAfTY2p`oF@VPQQ0 z0MeVAY!DE+UR}w_$+})%d@L+1EFqFMHPoY{u~t+=006O7Q@C_;lQ=hLQcG0;0Gd)# zd3kxRQc$i^Qj%0slSW2?Q%(j32Dff)fK*JzczDNoc~nqNR#H!EfGlas%3al(Cls!~#{Vq)OL#7G7Pwp&}LRaD!ww0e4aq)0{8s;aqu ze%Gt3eN#@)&(E`3S+8PZ)yK!dcXxhLQ8P0xykTL9Qc|QyL^?V%0|NqoQBi(WO=uPt zfIU20S5>W1PpnW$A0HU1Vq%?CQoCSay=!E^ac`nbOp7opSXfxJSW_@CFi}iQ|Nr`{ zUS3iF0Kt)wuT)XTkdW1Zn zQjR=4N=iT9-^atCperjNu31@|o13s$RjH||XA29zcy+Z|R^q|ItgNhHU{A1VX@65s z&d$XxEg@MdDw$GJQ2+ob004|IFs)Wpq)0!?lasSuU1t^+xpZ;Lp`n6AL1q#XsZ>+X zn3$DINPa9Vy1Kd;006kSxWmJ^kB^UhQc}WL-_ItLCQK+p=>4n0BgnR7GI;{$AnQ;NVzjnqMD2$_E>2t zC1OtuG-0wKNpR(ofKKc%bpru~Nx6Bp!r=&YMt}ehz6fEM)@V*1K`(0fN${XSg9qLY zNoa9SnK5}^=#9{XO@IX{EADLJp`=eGaZ65I^VBYltQ3jjO#(Khiz6#-HbuEm#1bfQ z_)Os&O$Hw_bqWHYAhzuo0B-jH+?!qC-n$K{;lwH=Y4#cbu<$WZgHMCDbpiNf!6JkK zr49fJP$&R^2DwKr0pr3=l^xsnih=06Qmu%T53Q literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_reject.gif b/usr/local/www/themes/metallic/images/icons/icon_reject.gif new file mode 100755 index 0000000000000000000000000000000000000000..5565cd67d267ffb92fa0253b34ba929d3a5e62d3 GIT binary patch literal 193 zcmZ?wbhEHb5u#s2^M;s4vt{|`+5f7$u}^Sb|Ew*7x(|No)o z|NHv?@9X^kdhq|p<^P}f{eNBc|Gwe>AD90F!CfT=LO}5+3s{K`hy>Zmz-sq^F(Ad$ z@YoLr)h_{zUwMSNeGhxPUNW(?^IUS|vu}$U*Fg`Ddp%nxDa?4`%c9CY>A8ZghqHla NqlSuSqZJIwq4)0>{Q2|x|NsB*-pynn1QdU=fR*TgNRXWjtacBK z0#ZB;kN$8_{Sv_NRX~{A_lURaB@;_K&m~7b`?jcg9gy(2*Ryq!LdOeV7FG61&lOBP QoDDP+15`X4oH-b*0Ywy4f&c&j literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_right.gif b/usr/local/www/themes/metallic/images/icons/icon_right.gif new file mode 100755 index 0000000000000000000000000000000000000000..fdf2d8b8005db78c3620f357b5d5149dd4402274 GIT binary patch literal 1117 zcmd5*=}+1R0R2%I9@Sc%8s{{zZm!MNb=CMm(am~G12Q#TXlJdaTScsE-G^4Tsfa?+ zaVj2}0wQx#0~MxOMA3+Npa}XCh2e>!Fyl->!=~|I^uO5q@IJo0ydx8t5f@+N5BLNB zg23wPs>x((Y;2sKp6=@E((CmY48~&FnwpyO@$peAl@5p9VzD3)2%%8ua=D6&i%UvM zFEJM@cjJz?Ci{Lw=XX*udlDy*VivBER2qh3Iu}k z@^Yz^KQ}jLwQi4$j3^X}lapf#rH;*JfuM4BcGh4t^7*uu)>bqcJv215v9V#ZS=nr6 zWo0Fo+h8#0S5{UA2M2q5dj$gK1ju(kUi;Jr2>T0caY<_-RA`vGgC2eo7n$0W0 z!NEa6L29*{&8~pKpc>5>2+pLZr;m>I7Zl{FRH})I36ba*xm=7wA-UW(HkvTE-;kibmfx}@53DI6&UIlK& zJXB6jjzl6EAD5Ms;G9lpcz8GllfdKg@c8>ro}jX`v%7y4(r69TR}?;j3d@v*=0Ea8At}ff#`%9q^-ntd(1_;h(W+K|!S~VJVRaKQx z*bx}$XSW}?!!Vo891gp^z1?VBdhsIP;c(DsKXi9f`un+u4hNn7Gl77QiHR8=9@c87 zN=x&Pj*j~J`b;K+OeWsj+cO#s2E$@YON)nxM@Cc7 zWqB7D7dRZQuCC5zv#?k!CWB$MTFvIo+}zyV-Q9tK*9Qj&&z?PXxz63yHa9oV%*=Ru zdm|8^93DDkGFe7OMq*+j008b4x%q#BYbP)W0D!>Fw|?G!0`PPJLhd4wlmhpF1u%f6 z{ftg85HSY;W~gtB=h+fM)ylz5Mxm2=HDqKn)`GavD+c$)2<>l(ZZUA%%VV pwfOIV=x_Y5M;l?ZedT?SZ+|A5c3AQFnlZ{{YZs3S|HQ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_restart.gif b/usr/local/www/themes/metallic/images/icons/icon_service_restart.gif new file mode 100755 index 0000000000000000000000000000000000000000..e49fbd73c29915da23e6af95042be61c76d005e2 GIT binary patch literal 1120 zcmcJO=}+1R06>34QM5RZs-=ltXWNw&0fYbvpkDj*(c z72|~jH?6g)%Z@A!YyXJ75AW;y^wQC&tFeSYAQ1R# z6M(^B2n1q%eO)9HIh{@t39HpAaX6gWY+hbo*6Vdfqmf7?R#a5*csve=6A=-yv$NaO z)TC0)=j7z*_4?xC;?U60{r!W~)KsU_m6@3t6BC0*qqnzrz+iBEe0+X>espv+gF$O- zEMHr*4h{~wTzf9p&dSQl>(@tWwOXsy9vvN_P$({!E0sz~q{{B@hOn>@0wKd-(AjLu z-Q5p49C~76Vqsw+5{Vic>pgq+RBUW)Qc@C$RE0z$`}+D!Cav9W-QISTmlr&EK+ew2 zG#Csd5`oKQ#l%FC$<;dDFH1`%HoJ#Tr}y;q3=MT-FxRM53J#Zi^JX3flaY{+AP@*7 z5;2)fcDvube7SDsj8}KcJ>(>oiRNvHyHF&Q`7tVzb!1x=jCM&4-4+zEps?_OG@&U$|dA;D(yF!6i8%DYb&jxp#X_Y(dl%#xw&$=?D+WD;cyfc6+s|gFxV*u zqt#?G*4Nhx1bmrHR$Yyoot+&R7>J9DW3!vzv$yxVPB$l$egEp!p~0{~CYRc5iy#mP z3WWjy;C8#;`~N2VA5RbfYyy`*gg!h0K-|D=VCoxa06aB(2GXHQ?_{Lk{&kXak_oi? zo%Vv-3E>5_VE@k{&72F({g1+)#WwQ4rcjhNR zurn8R6iV_X?#GBg`}Gp%$a>3_Agh^3D-9JP$~>!1gGiPsC@qTrnOfT}E2x52*ll~A zPi~#LR%lh|PxAAGO!ix$!N&RYi=Wl#H<2sB9-p|{DJlZ+aM@tX_sNbDx zUT;fQ2E?u_wo!tT9|PK5KXiRNT@&E-w=x8P3=+DZ>!08L_fPL{&V|+{zxDPXUGwcM zq7V$m&N4;si>Kg?FI#gl)OQILBjB$?!a6TwAuWD1pZu|!KJmyRva9qCg(1G@dU!rh i#5SJ@+=Q@CM2r7Wc!t1(vB~Fn*ExQ^H#|Loxc>ll+5?yX literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/metallic/images/icons/icon_service_restart_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..a5d6d7c991c2181a7bea03032c506b6f0e908864 GIT binary patch literal 1115 zcmeIxTThY!0LJkbL3%Azw5en#oL<=0lC>_VSOcb&>oDA$x9PGQyRo*m)`bZH5@J!V zw(YPI$Ei>s=tm`tY6w;`2E84SkQn0$0}RH0B94920MA(2Q_UtizY z*ccA)H8eCBjdKSF2Ll5GUawcLH<-;9iDXzT7O$dU$x4!{M~Iw_7X= z9e?tjomQ)r&u^TcpV#ST$H&JNigArbTTxN5vEg?*U6Yf_si`Tu-F|p@NTboFr>FP# z_m7T_PX7Y_`zH&e>?2?RPzKyQtDSuU08fF~9E`3Ms7t!k2PEgxi1c`ROb>v=Dw)?_ zVDp!;`EY>zT1jCDK3QyW~it<3>WH$!#M;jMl2FF%fF$MkUYGBO!|p__teHpef5PM3F08i z+jcPN+>Q7ZklV!I0T*tM;3!yj3?cds3xg=6#o}2RTnUA*PE4nx5|VRS5wI)h#LVJK z7c%+*Nd9`OP|0ORMG(@7sV&*x;eBs(f@dUJ895WrA}x~#7|Sn~}{b??{loZ~URX8iNt&p-eE@So?G zz9{|q?`NOeJ_kM>c=`LK#ubfQ-)|K>DyVu=_3PiS$a|4Dzuzo*T+;KR=k|}=KmPsr z_y6C;Zx<_`RLEVDv%GG}c9xCv9H;J8-T(jpGn`?dI#B%29pM|G;F4I92&8T7D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBBbrg&Y3=Q-RjPwnSbPdg|jE$@e3>2V1320kUN}5%WiyPD~AkS7Q zqokz3N?*Ucyj-u`STDaQUEk2s(h_8bk&!M?g>G?WUP)qwZeFo6%mkOz;^d;tf|AVq zJOz-6iAnjTCALaHmqNUdTL3pUuUHT49lhlIT>Xl~0)0b01CWucqiS6q^qmz?V9Vygtyua}vbVr6Dx?&9of=H_bbYHVoeYUt=> z;b>uQ0TyvGbTfqMb;(aI%}vcKf$2?w>oqsPsTY(GatnYqyQCInmZhe+73JqDfIV!L ziQ6qMIL(9VO~L6FGgq8?^?{Dj2SqDVG{b~|X$QoFCt4r}p6pZefN8x5n5Y^5|NHyr z_phHnzJL4r<@2YHAKt%v`{wnlmoJ__d-~+@qlXXf-@AL~_N|*Yu3x))1N{AbeZ0LqJ>1<~U7Vd99qjFFZLF;< zEzHeKO^l6z8A?xAM_Wr%LtRZ(MOjHvL0(Q)Mp{ZzLR?H#L|8~rfS-?-hntI&gPo0) zg_((wfkE*n3%In=0g<56j)AT4z(EBUEvbGL=Y<9;N)y`x6kS*v=eaW+&=7LvW7pX< z`$5Q&AlJtvdXyg!YX>H_`2&rgO77>!mh~-e` mW65xh<&l-o;NnsVsf*y|W>TCzhe45%iD_*H10$m&gEauM4C%Q5 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_start.gif b/usr/local/www/themes/metallic/images/icons/icon_service_start.gif new file mode 100755 index 0000000000000000000000000000000000000000..09bb58fd43f6d5fce323eea6198e167f1bcef4f3 GIT binary patch literal 1119 zcmcJO?K9g40LOo+G#2#cd0AH*d9fMOa~4H{R6@j6^ekMLvW1d_qUxboJM$B%21y7* z9}@Lc4=LAKMa0mFj3AMpr!-kgBDT2FdN{l7cDG%|AFq6ckidRZ=MN^Yin2d;2ES zror%1uh-dZ|3*ee-n^MlrBd~JeMLnn2v*kCa!4dnNJvP1ef`nVkxXn1{z7 zceqsAClub1$@+G8-+~}064m1Ic%2Taso@d`gvrTCEY=?mw-X4s6B841`HvnR9u*Z8 zZEbA<0cZw;!RMEV#ckKGr%)&qoldu~F#i0x7zFdu($ccBu30Qw27~e5y?ab1V{mY= ztSq~)udlni)?_jXg~Eh{1dT>>c(~Wu*)=dA$<58(+WNh&u1>3+O-V^otCc}PLBqqt zznx&s$;rKSE3fK!b|w4rW!&Q8qD1mkEEaP(cgbWj4u=y6>W7AgAV`&&$)HfekVs@v zQI6GW-PkbA&CR_!VFQD~L`6l##E{0u#-vi2Ml;>f(Xq6&%;VjC_>k-A>AAVNrBY3k z$s`DZ&}cLWe$(9CTvvBnt9_A?K~t$Fc|6|uco&_1WoBktuV0|iXfm1H!NEbH7*Z;g zy}iBe?(dq-n=LIZI-Q!uV(stmL(p7wbaZQLD}#|~wQi@U)2&tujYidIe%juC-QO?r z^70ai!~_C9KR=(#y|cUf8jB4?AmA)k+Un|(P{=7Q&3^Odt=YWs=#dD8a^2W4tJN>; z?d?}r*HTkcJ32b)bo$7MjL#S3t1GRTKJA90+ zUQ+=5d~a6qci&6g06@y{Ddeh(6!x7LlP|3Iw|I*XH{d9j+ZVe&IP2Ml;2$1L5k`>( zh@Tb7TgJy}zb+rtCS|wS)7^bJer`n9W^{zW+xyQs;SWADnSm*wj|&*W0xKP%DOkYy z5w@>)#x`oi&hLirsrSym8gw+ayQ?6x0ps6G?w%)&6_1{wISsp-tLstDpn}(zm$Hfu zE=omRt$gAlh*0Je0~>g&XAusCjH}lMFFbJ^AVr05!GM|v_Cwg16^uNn$M=ijq=OYg tbK{lIOAHMF{QX`p${!Yf=(%sxqeBVz8>2sJB~!t3FaJSbLc(AG?mw0!{x|>t literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_start_d.gif b/usr/local/www/themes/metallic/images/icons/icon_service_start_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..f58f11114cada2854d69e527367c5c5354bcbc82 GIT binary patch literal 1115 zcmeH`=}*#e0EfQ;IxsbD%rL8IvsGIe7+Yqofoo-3mNi%TD&1Q1rB*L$Z3IYS3d@cy zyb+J#g*Xhusr)1yB8OaZ=@RsVNDKM)P_% zW@l#=3WeM4h9F3*)#>#Hv)R(t*0#UDFA|Lz4D(;V3g_qNeLkPZ;~5?vZf|era(i_; zeMd(}eSN*%?y%Wx0)fEcaIo2Ii^V!JGBPkQKq8S83Z>a>Hkr&lJv~zCv__-la=9BD zK9x$%VzHK&mzhlF`npFT7-?>9{%sKog_TN`Og3Y)*&~st-|w%fsgcWP<#M^xxe|#) zg2CX=zkvVzlLxY5hywu7!MQ(cf0_WupWx8FtP&)Zm4G5Opa?($hovW%V+d{pJ>xMx zd!0=FPENd2`-o4drN9wzSOxB0ri6Jm5vzR3;S@4aMZ3|wO7?Un`t>)=E9~jF35ay0 zFXe;mVBCo#4_;^*IBFUKo3pWWv4EI#37s>uj^hAK#$jZvp`dyyEdzxoW1s(kzl+DA zS(v1c-o&t3CC(p|b228lPN=&VAyR!Z5g_ zSD{oS;(Z?a`Zr9GwKyg1!c{EySvKQ%%K4`n9+OC;C%w#nRN4`r@NrpKHH5=M#4ouI zuWhl5Du@71286tnTmU{D$|Bw7B|_D(^fWcHuDEOlb}s(pZ6qIh%fOc&yI+VToXLVH RFb1H3d^bc)rXvvG$}fi;u$%w@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_status.gif b/usr/local/www/themes/metallic/images/icons/icon_service_status.gif new file mode 100644 index 0000000000000000000000000000000000000000..a93bcfb1419a6df2239639083ef02239b926416a GIT binary patch literal 2150 zcmd^AX+slN6dg3ONsAlQs;xtC7qS6D20~0G35gO41jM*hLNbsD$;2d>XsZN?fQn#1 z&{jhcYo%xxC`iHL0;q^=E>I{4VKG!usI{%#(}@-BhtfaL`{B)dZ_c^PymQ}#@Hhcf z(M(__@U$G5J9k!NV|{aTgP)(DR4R>#hzJY}?C9u#VK_82w6^vFlgW&akFTq%@9F7b zv)NQCH9b9@$K&nVwM(zxk(ZbE;K8WbJlNdaER)GjpFS-R2!exy`}_NAYHIrW`p3t| zo0^)&#>V^l%)PyRN+qgN$?0@Dhr?mBIhB=_`}Z5FtIG=t3jF>3Pn;;WTK}+E23uNM zq|!Kp!GNOZzI~ZVNl7_5IfaFViHS*0PEH942^0#&WGXBvDM1kA$&)8tT{qg=t{II+ zp-`}C)25IRI4v!$y}fbc#;7@ST(h#Wj7CFPSlGjdk9vE1V`F12mJzi&(ZRvNY#!+D z?lBtQvA4%@xm+482s2+_-=U#d(km(|+}zxXi%-HZoy+Cu zbXpv4DxV*E=S~NM!MJ(z)`0^D^7HfQbXt3Rdw2J32qFy(40U#PibPwEA2*GTJ~A3} zD=Vv#ljU7qT?Y?l4-O8+$0OOx%b zr2+t8wOX<9|6m^0>FfF7AWNhXVb37CPAL*6A{sCbNsuXM`0?`>@t{mX!^imXNqi-Y zNM+oeDnzg|EK0mHQB0NK>A_%-4${e$azrBnb@C*I8q(45A_*FYK-k>2O~ixGAeuxP zo?&|d+G4_}3IY8HByTZk6$xBLCXju6u_o{WDI_w9NTLwQ6mPOWU-%z>y1zN3% zL|*3mua4DGJCq195>cbcDlvk=J#C?s5UfH(8dMd9qDd29FnM?xtli*c8Fic|muqk9Rn;Za>ePEU!gAw5COJ%XB z6I>Q5PL?AI%>-BSl1rYHYZHQ8iA821D%o~K!cn1e@L9o-Y|>nq>`DDS=Sn8cg~^$e zOT>~P+K%-f$2_rxX~#BwAzEzlLiUIP)4B>1wVn0PKYsu1*I#~q`qPg;Jo*0dcjIG^ z9*#b^|Lut7-tf@ifVsc#Zg0;w-CbXIcHFsr>t=gfYfJNurt6K@u3l-Vue*Hd;)U9; z&ev3bS#_?m;*0XK&p-S0le1?^KQ1}_(Wwtl7N02kpwM*u*!%AtJyMW=I4{?DC@1@1 z)`9)|GBeWm8q)Tp>Qi>_diR~3J9OIZ$r`n4n-W#XlM=VeqzUneL>woI-SYP4O&d1| z*T<}jjuJ#hgufNW4_&*4#|`1ISum5anjTCG3WTTu{;T|aeJEH%5xl)tu2{Zo>5|2Z zJn}HRT#^-W!rs?wxBl3UH3QS=^adF4+aLT&S6g#DIb0?o}4i zUSzlQ)u|-OvKi?&>=(Kff;HhGvrh_&+@-4*XX>3j@!!WfN7bcgxTYMH@B|*~?0B<# z55>+H$;@@jD+=FJxrFJ3`@oBP`Q*Lk!%IHdaL{>1k)xN_tVIhR6g#xIxKF`Vs1_Th z=-B|JHb5zIwF`!EuG`%J;B1VmV%fYh9^=f)ZJVptAU~`2xaLl xUaqS*XM3*u_I66jUXg?Io2#Msz6-MknyBRq0+!ES+mag%*gM9$kZ?F4@GsHC5SRb} literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_stop.gif b/usr/local/www/themes/metallic/images/icons/icon_service_stop.gif new file mode 100755 index 0000000000000000000000000000000000000000..922addc5ca6c5a27f4c6776448947662861f2191 GIT binary patch literal 1106 zcmchWTThw?06;%)^}e7^hjeLc)^1@lTeTW=1w{l3sW(uz;HV-ZmnhY^`Cv92DDyIH zkx|7)VO~15n5F8thznB@>(mbf0*bW?DwS5PZu+n;*}~dCvGZ_V&(pa<#HXc~MFCO3 zUrzu6fdGfY$z(DV3gz?psi~=piyFQDH;2P<=g!@&Ef)xa91e%e>=kb_8(0Fw8vc0`MAi&>Xm^^nb z&}=rx#>TSQY%)3D<#M4=NDKy}R4P#@l*KY1A0OlK?9*tJ?(Xi5jrE?M&XJK3nM{U6 zUVjZ5jY>&LVKOT^I_j)etI=q*Sj=&8agB|&4u?H6GgB-U+wBgi^lPnlQmGvC`OdPk zvZPWe7K@&qR#GUGnwrASPH|IH)1yanqfw*LXuV#qTCLsP_1Nv!wY9Z{1%pnfo0`%E z2M33ShR)1P@_5|7J~@p>TUweqJbbBAsqlFG#f$IM*O%<=Jp;ktOG`_;y1Lx%9kY3P zbaYfC`c@*5P^nal#i-Lg*xA|Z@0S!6JwZ zs>*DBoR;>X(`jB^wQ4luZEX!_XJ;Odr>>4iAmHV4xlq`s*XvhSi~s=me7@KIKS}sI z&<_Bf0Eus+Z=L``e1IC)Ui-88$G3m&v)fc7Q9@X)N_gp~?BbxX_!<-tlK}B2O-J8) zg?<187RP~UpY~_XU%e0%m*TWA3R*AUv*k$KALX~@NuIxYsA=+>q+Bk3NEr8I!Grpf z7fAj?rskW0ntytL=RxDNp=I>J-m`E;#9CrULFx@l5+|_({UYJY<0#f!@Ah|6M6fP4 zb(}(FRz$!)qa8uBFYUxgxhoh-2>O2Q-CXFsD_;z_XJg}kImbMYf&u5lBBRsh8SVMk zu!BT)09}yn2NO;A{9&IfsIsYgrzVo%t&pVd+y8#do3$r=4!K%{A-6hDH!eVvLWWrW z5Y+btxKAKx1yWcNo~LiTwueLZE1ectu?Eyt<@SJSfRG~ z;=DyuCwSoy9S#E(L=Kfhk=s|m3*-n;2u*(lR$UH#j)h*x0C2sa984CnqO08jaOz-QM2r=;&x}Zg#spcKd2? zZ}0N*^4i)Om&;|d*&Gf>tyaS@?Dcw?Os2!(6bJ-%yWQjQ_V@SOY&L;FsMTuw`ueom zB@&5bu~=qiW`>7{SuEDk(UH&RTUuK3`~7mcT&L6Vc)X2`jn2-_uC6YZ%gyKW6$*vf zY|&^IR#sN(>+3xpk5Z|UNF*wiy1KfWMxz}Z9PI7wEi5b=jmD9Y5vf$F*BcHG54qeC zI-S0`=`fkh)6>&3ncQqP4-E~u-R_#2nzpvK@$qq^(Igg&TU%Qtk{OXm?DK6i80|8d zOt07Lbo#}`MFxX0KR+)N3I_%T)M|~vV30~>-QC?*tF5PpDH4e&6iR!0ds9glFJnw&al(DH8wWpa5!dX=NcLsc)T%%V%B6bO-xL#udk1ej@H)Jx?C=&(@7?i z_xJZt{sR8

                            ';}} +TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;} +function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();} +else{cancelHide(oMenu);}} +function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}} +function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);} +function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}} +function hide(oMenu){if(!oMenu&¤t)oMenu=current;if(oMenu&¤t==oMenu&&oMenu.isOpen){hideCurrent();}} +function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}} +function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;" +var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;" +return''+sText+''+'';}} +function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();} +Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);} +Accelimation.prototype.stop=function(){Accelimation._remove(this);} +Accelimation.prototype._paint=function(time){if(time= !,... +# where: forbidden pages are those pages that should *not* use +# the particular JavaScript function within the JS event +# specified below. +# $Id$ +# +onload=tmenuinit(); !wizard.php \ No newline at end of file diff --git a/usr/local/www/themes/nervecenter/loader.js b/usr/local/www/themes/nervecenter/loader.js new file mode 100644 index 000000000..491e874ca --- /dev/null +++ b/usr/local/www/themes/nervecenter/loader.js @@ -0,0 +1,29 @@ +//'); +} + +document.write(''); + +//]]> diff --git a/usr/local/www/themes/nervecenter/login.css b/usr/local/www/themes/nervecenter/login.css new file mode 100644 index 000000000..f8abdfcb2 --- /dev/null +++ b/usr/local/www/themes/nervecenter/login.css @@ -0,0 +1,1127 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + +} + +.infoboxnptd2 { + width:100%; + color:white; + background-color:#990000; + padding-right: 10px; +} + +.infoboxnptd { + width:8%; + background-color:#990000; +} + +.infoboxnptable { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnptable2 { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnp { + background-color:#990000; + width:100%; +} + +.infoboxnpimg { + vertical-align:middle; + width:28px; + height:32px; + background-color:#990000; +} + +/* please adjust the bgcolor to be used together with niftycorners! */ +.rtop, .artop { + background-color: #999999; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 250px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 9px; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + margin: 0px auto; + background-position : center 0px; + background-color: #999999; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 810px; + margin: 0px auto; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 102px; + width: 810px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.png') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; + font-size: 14px; + color: #cccccc; + font-weight: bold; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: normal; + font-family: Verdana; + color: #ffffff; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 0px; + margin-top: 0px; + margin-left: 0px; + padding-top: 0px; + width: 810px; + background-color: #ffffff; +} + +#left { + width: 810px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.png') no-repeat; + top: -18px; + left: 0px; + width: 810px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + /* background: url('images/menu.gif') no-repeat; */ + /* width: 693px; */ + position: relative; + top: -25px; + left: 3px; + width: 810px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + /* width: 7.5em; */ + width: 8.77em; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + /* background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #990000; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background-color: #990000; + color: #FFF; +} +#navigation ul li ul li:hover { + background-color: #666666; +} + +#navigation li li a { + display: block; + padding-left: 10px; + padding-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 1; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 8px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + + +#login { +/* background: #cccccc; */ + background-color: transparent; + border: 0px solid #cccccc; + margin: 5em auto; + padding: 0em; + width: 400px; +/* filter:alpha(opacity=60); + -moz-opacity:0.6; + -khtml-opacity: 0.6; + opacity: 0.6; */ +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; +/* background: #ffffff; */ + margin-top: 0; + display: block; + text-indent: -1000px; + height: 400px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ + position: relative; + top: -420px; + left: 70px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; +/* text-indent: 10px; + position: relative; + top: -300px; */ +} + +#login #username, #password { + font-size: 1em; + width: 60%; + padding: 3px; + margin: 0em; +/* text-indent: 10px; + position: relative; + left: 10px; + top: -300px; */ +} + +#login #submit { + font-size: 1em; + font-weight: bold; + text-align: center; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ + position: relative; + top: -20px; + left: 170px; +} + +/* loginerror box follows */ + +#login #inputerrors { + background-color: transparent; + border: 0px solid #666666; + margin: 5em auto; + vertical-align: middle; + padding: 0em; + width: 330px; + height: 50px; + position: relative; + top: -370px; +} \ No newline at end of file diff --git a/usr/local/www/themes/nervecenter/menu.inc b/usr/local/www/themes/nervecenter/menu.inc new file mode 100644 index 000000000..ec9d389c6 --- /dev/null +++ b/usr/local/www/themes/nervecenter/menu.inc @@ -0,0 +1,178 @@ + + All rights reserved. + */ +/* ========================================================================== */ +/* + Originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2004 Manuel Kasper . + 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. + */ +/* ========================================================================== */ + +require("menu.inc"); + +define("TMENU_STUB", " + // set up drop downs anywhere in the body of the page. I think the bottom of the page is better.. + // but you can experiment with effect on loadtime. + if (TransMenu.isSupported()) { + + //================================================================================================== + // create a set of dropdowns + //================================================================================================== + // the first param should always be down, as it is here + // + // The second and third param are the top and left offset positions of the menus from their actuators + // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use + // something like -5, 5 + // + // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner + // of the actuator from which to measure the offset positions above. Here we are saying we want the + // menu to appear directly below the bottom left corner of the actuator + //================================================================================================== + var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft); + + //================================================================================================== + // create a dropdown menu + //================================================================================================== + // the first parameter should be the HTML element which will act actuator for the menu + //================================================================================================== + + @@MENU_DEFINITIONS@@ + + //================================================================================================== + // write drop downs into page + //================================================================================================== + // this method writes all the HTML for the menus into the page with document.write(). It must be + // called within the body of the HTML page. + //================================================================================================== + TransMenu.renderAll(); + } +"); + +class NervecenterMenu extends Menu { + private $menuJScript = "NOT-SET"; + private $menuJScriptEvents = "NOT-SET"; + private $menuID = "NOT-SET"; + + public function __construct($identification = "", $filename = "", Component $c = NULL) { + parent::__construct($identification, $filename, $c); + + $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); + $this->menuID = $id; + + if ($this->hasParent()) { + $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n"; + } + } // end __construct + + public function getMenuID() { + return $this->menuID; + } + + public function setMenuID($myMenuID) { + $this->menuID = $myMenuID; + } + + public function getMenuJScript() { + $childJScript = ""; + foreach ($this->getChildren() as $component) { + $childJScript .= $component->getMenuJScript(); + } + + if (! $this->hasParent()) { + $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB); + } else { + $this->menuJScript .= "\n$childJScript\n"; + } + + return $this->menuJScript; + } + + public function getMenuJScriptEvents() { + return $this->menuJScriptEvents; + } + + public function __toString() { + if (! $this->hasParent()) { + $menuMarkup =<< + @@CHILD_ELEMENTS@@ +
                            + +EOD; + } else { + $name = gettext($this->getID()); + $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); + + $menuMarkup =<<{$name} + @@CHILD_ELEMENTS@@ +EOD; + } + + $childMarkup = ""; + foreach ($this->getChildren() as $component) { + $childMarkup .= $component; + } + + $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup); + + return $menuMarkup; + } +} + +class NervecenterMenuItem extends MenuItem { + private $menuJScript = "NOT-SET"; + private $menuJScriptEvents = "NOT-SET"; + + public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) { + parent::__construct($identification, $filename, $href, $c); + + $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}"; + $name = gettext($this->getID()); + $file = $this->getFile(); + + $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n"); + } + + public function getMenuJScript() { + return $this->menuJScript; + } + + public function getMenuJScriptEvents() { + return $this->menuJScriptEvents; + } + + public function __toString() { + return ""; + } +} + +?> diff --git a/usr/local/www/themes/nervecenter/new_tab_menu.css b/usr/local/www/themes/nervecenter/new_tab_menu.css new file mode 100644 index 000000000..04c4cf2ea --- /dev/null +++ b/usr/local/www/themes/nervecenter/new_tab_menu.css @@ -0,0 +1,101 @@ +/* + new_tab_menu.css + part of pfSense + Copyright (C) 2010-2011 Robert Zelaya + + 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. + + + Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again. + The following code is dependent on new_tab_menu.css and images/new_tab_menu.png. + + + + + + + +*/ + +.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;} + +.newtabmenu li{float:left; margin-right:2px; text-align: center;} +.newtabmenu a:link, .newtabmenu a:visited{ + background:url(images/new_tab_menu.png) right 45px; + color:#ffffff; /* noactive font */ + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + font-weight:bold; + font-size:.9em; + height:20px; + line-height:20px; + text-decoration:none; +} +.newtabmenu a span{ + background:url(images/new_tab_menu.png) left 45px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + height:20px; + margin-right:7px; + padding-left:7px; +} +.newtabmenu a:hover{ + background:url(images/new_tab_menu.png) right 23px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + color:#ffffff; /* hover over font */ +} +.newtabmenu a:hover span{ + background:url(images/new_tab_menu.png) left 23px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ +} + +/* -------------------------------- */ +/* ACTIVE ELEMENTS */ +.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{ + color:#000000; /* active font */ + background:url(images/new_tab_menu.png) right 0 no-repeat; +} +.newtabmenu_active a span, .newtabmenu_active a:hover span{ + background:url(images/new_tab_menu.png) left 0 no-repeat; +} \ No newline at end of file diff --git a/usr/local/www/themes/nervecenter/no_big_logo b/usr/local/www/themes/nervecenter/no_big_logo new file mode 100644 index 000000000..6e5c70d7a --- /dev/null +++ b/usr/local/www/themes/nervecenter/no_big_logo @@ -0,0 +1 @@ +NO! DONT! \ No newline at end of file diff --git a/usr/local/www/themes/nervecenter/rrdcolors.inc.php b/usr/local/www/themes/nervecenter/rrdcolors.inc.php new file mode 100644 index 000000000..52337b9ed --- /dev/null +++ b/usr/local/www/themes/nervecenter/rrdcolors.inc.php @@ -0,0 +1,88 @@ + + 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. +*/ + +/* This file is included by the RRD graphing page and sets the colors */ + +/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* 95th Percentile Lines Out, In */ +$colortraffic95 = array('660000', 'FF0000'); + +/* State Table pfrate, pfstates, pfnat, srcip, dstip */ +$colorstates = array('00AA00','990000','0000FF','000000','DD9B00'); + +/* Processor Usage user, nice, system, int, processes */ +$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000'); + +/* Memory Usage active, inact, free, cache, wire */ +$colormemory = array('00AA00','990000','0000FF','666666','DD9B00'); + +/* MBUF Usage current, cache, total, max */ +$colormbuf = array('0080FF','00E344','FF0000','000000'); + +/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */ +$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */ +$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000'); +/* Quality Graph Loss */ +$colorqualityloss = 'ee0000'; + +/* Wireless Graph SNR, Rate, Channel*/ +/* Cellular Graph RSSI, */ +$colorwireless = array('333333','a83c3c','999999'); + +/* SPAMD Times min area, avg area, max area, Time line */ +$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066'); +/* SPAMD Connections max area, min area, min line, max line, avg line */ +$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600'); + +/* OpenVPN Users Online Users */ +$colorvpnusers = array('990000'); + +/* Captive Portal Total Users Total Users */ +/* Captive Portal Concurrent Concurrent Users */ +$colorcaptiveportalusers = array('990000'); + +?> diff --git a/usr/local/www/themes/nervecenter/styles/menustyles.css b/usr/local/www/themes/nervecenter/styles/menustyles.css new file mode 100644 index 000000000..06b3c7af5 --- /dev/null +++ b/usr/local/www/themes/nervecenter/styles/menustyles.css @@ -0,0 +1,44 @@ +#navigation { + /* border:1px solid black; */ + width: 98%; + vertical-align: middle; + height: 16px; + padding-top: 4px; + } + +#menu { + /* background: #990000; */ + /* border-bottom:1px solid white; */ + padding: 0 0 0 0; + width: 98%; + vertical-align: middle; + height: 16px; + } +#menu a { + padding: 2px 28px 4px 28px; + text-decoration: none; + font-weight: bold; + font-size: 1.0em; + color: #FFFFFF; + width: 08%; + height: 16px; + } +#menu a.hover { + background: #AF2020; + } +#menu span { + display: none; + } + +#subnav { + font-size: 10px; + margin-bottom: 2em; + } +#subnav a { + color: #FF0000; /* #FB3B00; */ + margin-right: 1em; + } +#subnav span { + color: silver; + margin-right: 1em; + } diff --git a/usr/local/www/themes/nervecenter/styles/transmenu.css b/usr/local/www/themes/nervecenter/styles/transmenu.css new file mode 100644 index 000000000..f68357434 --- /dev/null +++ b/usr/local/www/themes/nervecenter/styles/transmenu.css @@ -0,0 +1,75 @@ +/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */ +.transMenu { + position:absolute; + overflow:hidden; + left:-1000px; + top:-1000px; + } + +/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */ +.transMenu .content { + position:absolute; + } + +/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */ +.transMenu .items { + position:relative; + left:0px; top:0px; + z-index:2; + } + +.transMenu.top .items { + border-top:none; + } + +/* each TR.item is one menu item */ +.transMenu .item { + color: #FFFFFF; /* #336; */ + font-size: 1.1em; + font-weight: normal; + font-family:sans-serif; + text-decoration:none; + /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */ + border:none; + cursor:pointer; + cursor:hand; + } + +/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */ +/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */ +.transMenu .background { + position:absolute; + left:0px; top:0px; + z-index:1; + -moz-opacity:.8; + filter:alpha(opacity=80); + } + +/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */ +.transMenu .shadowRight { + position:absolute; + z-index:3; + top:3px; width:2px; + -moz-opacity:.4; + filter:alpha(opacity=40); + } + +/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */ +.transMenu .shadowBottom { + position:absolute; + z-index:1; + left:3px; height:2px; + -moz-opacity:.4; + filter:alpha(opacity=40); + } + +/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */ +.transMenu .item.hover { + background:#fdfdfd; + color:black; + } + +/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */ +.transMenu .item img { + margin-left:10px; + } \ No newline at end of file diff --git a/usr/local/www/themes/nervecenter/wizard.css b/usr/local/www/themes/nervecenter/wizard.css new file mode 100644 index 000000000..a2d31d5ee --- /dev/null +++ b/usr/local/www/themes/nervecenter/wizard.css @@ -0,0 +1,1060 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + +} + +.nowrap { white-space: nowrap; } + +/* please adjust the bgcolor to be used together with niftycorners! */ +.rtop, .artop { + background-color: #999999; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 250px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 9px; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + margin: 0px auto; + /* background: url('images/background.png') no-repeat; */ + background-position : center 0px; + background-color: #999999; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 810px; + margin: 0px auto; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 102px; + width: 810px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.png') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; + font-size: 14px; + color: #cccccc; + font-weight: bold; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: normal; + font-family: Verdana; + color: #ffffff; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 0px; + margin-top: 0px; + margin-left: 0px; + padding-top: 0px; + width: 810px; + background-color: #ffffff; +} + +#left { + width: 810px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.png') no-repeat; + top: -18px; + left: 0px; + width: 810px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + /* background: url('images/menu.gif') no-repeat; */ + /* width: 693px; */ + position: relative; + top: -25px; + left: 3px; + width: 810px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + /* width: 7.5em; */ + width: 8.77em; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + /* background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #990000; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background-color: #990000; + color: #FFF; +} +#navigation ul li ul li:hover { + background-color: #666666; +} + +#navigation li li a { + display: block; + padding-left: 10px; + padding-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 1; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 8px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + +#login { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 340px; +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; + margin-top: 0; + display: block; + text-indent: -1000px; + height: 50px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login #username, #password { + font-size: 1em; + width: 60%; + padding: 3px; + margin: 0em; +} + +#login #submit { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} diff --git a/usr/local/www/themes/pfsense-dropdown/all.css b/usr/local/www/themes/pfsense-dropdown/all.css new file mode 100644 index 000000000..e0f1c464a --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/all.css @@ -0,0 +1,1027 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; +} + +.nowrap { white-space: nowrap; } + +.addgatewaybox { + background-color: #990000; + border-style: none none none none; + width: 225px; +} + +.infobox { + width:100%; +} + +.infoboxsave { + padding-right: 10px; +} + +.infoboxnptd2 { + width:100%; + color:white; + background-color:#990000; + padding-right: 10px; +} + +.infoboxnptd { + width:8%; + background-color:#990000; +} + +.infoboxnptable { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnptable2 { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnp { + background-color:#990000; + width:100%; +} + +.infoboxnpimg { + vertical-align:middle; + width:28px; + height:32px; + background-color:#990000; +} + +.inputerrorsleft { + background-color: #990000; + width: 36px; + text-align: center; +} + +.inputerrorsright { + background-color: #FFD9D1; + color: #000000; + font-size: 11px; + padding-left: 8px; + padding-top: 6px; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 220px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 11px; + font-family: "Trebuchet MS", sans-serif; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + background-color: #ffffff; +} + +/* ID Based CSS Definitions */ +#wrapper { + +} + +#header { + height: 70px; + width: 800px; +} +#header-left { + position: relative; + background: url('images/logo.gif') no-repeat; + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; + background-color: #fff; +} +#header-right { + position: relative; + background: url('images/header.gif') no-repeat; + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} + +#header-right .container .left { + position: relative; + top: 32px; + left: 9px; + font-size: 1.8em; +} + +#header-right .container .right { + position: relative; + top: -8px; + left: 195px; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.gif') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; +} + + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: bold; + font: Verdana; + text-align: center; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + + + +#content { + border-top: 1px solid #FFFFFF; + margin-top: 0px; + padding-top: 0px; + width: 800px; +} + +#left { + width: 800px; + height: 25px; + margin-bottom: 5px; +} +#right { + width: 770px; + margin-left: 5px; + margin-right: 5px; + margin-top: 4px; + padding-top: 1px; + padding-bottom: 15px; + padding-left: 10px; + padding-right: 10px; + border-left: 1px solid #000000; + border-right: 1px solid #000000; +} + +#footer { + position: relative; + top: 3px; + padding: 0px; + margin: 6px; + margin-left: 0px; + margin-top: 2px; + width: 800px; + background-color: #990000; + text-align: center; + color: #ffffff; + font-size: 0.75em; + clear: both; + margin-bottom: 20px; + z-index: 0; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + background: url('images/menu.gif') no-repeat; + /* width: 693px; */ + width: 800px; + padding: 0px; + height: 28px; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; + z-index: 10; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + width: 6.2em; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; + text-align: center; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: 0px; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + padding: 0em 0 1em 0; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: hand; +} +#navigation ul li:hover { + cursor: hand; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: underline; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #000; + background-color: #000; + color: #FFF; +} +#navigation ul li ul li a.navlnk:hover { + text-decoration: underline; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + + + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #FFFFFF; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listrborder { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-left: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + color: #FFFFFF; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #DDDDDD; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} + +#login { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 340px; +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; + margin-top: 0; + display: block; + text-indent: -1000px; + height: 50px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login #username, #password, #password2 { + font-size: small; + width: 60%; + padding-left: 19px; + padding: 3px; + margin: 0em; +} + +#login #submit { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + + +/* Widget CSS */ +.widgetsubheader { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #B1B1B1; + padding-right: 6px; + padding-left: 6px; + color: #000000; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.widgetheader { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.widgetdiv{ + margin:5px; + padding: 5px; + background:#CCCCCC; +} +.widgetconfigdiv{ + background:#BBBBBB; + font-size: 11px; + color: #000000; + padding-right: 5px; + padding-left: 5px; + padding-top: 5px; + padding-bottom: 5px; +} + +div#log div.log-entry-mini { + clear: both; +} + +div#log div.log-entry-mini span { + padding: 2px 2px 2px 2px; + padding-left: 6px; +} + +div#log span.log-action-mini-header, +div#log span.log-time-mini-header, +div#log span.log-interface-mini-header, +div#log span.log-source-mini-header, +div#log span.log-destination-mini-header, +div#log span.log-protocol-mini-header { + float: left; + text-align: left; + background-color: #FFFFFF; + font-size: 12px; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-action-mini, +div#log span.log-time-mini, +div#log span.log-interface-mini, +div#log span.log-source-mini, +div#log span.log-destination-mini, +div#log span.log-protocol-mini { + float: left; + text-align: left; + background-color: #FFFFFF; + font-size: 11px; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-action-mini, +div#log span.log-action-mini-header { + width: 6%; +} + +div#log span.log-time-mini, +div#log span.log-time-mini-header { + width: 19%; +} + +div#log span.log-interface-mini, +div#log span.log-interface-mini-header { + width: 8%; +} + +div#log span.log-source-mini, +div#log span.log-source-mini-header { + width: 23%; +} + +div#log span.log-destination-mini, +div#log span.log-destination-mini-header { + width: 31%; +} + +div#log span.log-protocol-mini, +div#log span.log-protocol-mini-header { + width: 8%; + border-right: 1px solid #999; +} + +/* Sortable tables */ +table.sortable thead { + cursor: default; + + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} + +#graph { + position: relative; + z-index: 1; +} + +/*thermal_sensors widget styles*/ + +.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; } +.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; } +.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px; + background-color: LimeGreen; + border-top-width: 2px; border-top-color: Lime; + border-left-width: 0px; + border-right-width: 0px; + border-bottom-width: 2px; border-bottom-color: Green; +} +.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; } +.thermalSensorText { float: left; height: 20px; top: 3px; } +.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;} + +.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; } +.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; } + +.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; } + +.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; } + +/* widget textarea styles - full width */ +.textarea_widget { + width: 100%; + resize:vertical; + -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */ + -moz-box-sizing: border-box; /* Firefox, other Gecko */ + box-sizing: border-box; /* IE 8+ */ +} diff --git a/usr/local/www/themes/pfsense-dropdown/apple-touch-icon.png b/usr/local/www/themes/pfsense-dropdown/apple-touch-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..7a4b9759dd3bb1f6117c5eea8fb7c61989ac8632 GIT binary patch literal 4068 zcmVhDk(0RCwCdS_zCBo(`9C@M z|MGlHqaVHh5nCDm^gJ#SVLgwfFaF^~A}+%?4CB(5gIdgco_7dd@n&fyS%x_T&l6oY ziZ8BWwH_+aS~-^4gh$C2q% za@|(jR&3jjL@buwE=fg>(>bmRi&+*H<9C~7okpJKXR^`{7Vo;E=fNNNf{8gYw`MDO z!o(OqJ7wE#mUWV*9apK$H;e+yj_?!nUT>PW_x9!lp~A8{e9UnM zzIdKNru*<{W-Al81d}Cj!X=J_Sz|PJhiSqSd7g)r7`Kd*9D|umve=`bo$z1W%=*%_&;N@@NM0;eO{?_dZqFS$9X-OT$fId3xdjV z7#dE6p%-McC#vd=?d^EBNmd|Mm5`@z$>mlV#!IObd^}16RtXF+msz@W=@h35oNx&|q|57fuSktcP>e?d+bEUa+N~OC-M}N`X z{iZCBl6R|=3|wbt=K+`!CM3^8Ho(@ejE~;~Z*g4np+|ZC@njOPzGY;@q!j5hjB|3i zOS`&uiDJV?Fd}FH_-=T0nn|Dhn(NDfLk_3Y-2S%NwR8&3)yC~r z;m-`HZC^C{W+HKBvG~Z)(APRUUzMc#QyAe_>GbD|#jUZJN}R|nS+b;-Po4*lc3IYg z+qdHZgaA%LihL`dzpPl?6^mhl9nol(60^rNJ1y%dUC%QN(tMb!A-c|*cZ`lAuYZ=w z_`hJ}#|H-uLHKhfGa!m!w+gYQPdG8kjcy7fipA=lo_(Q!q+R#5J$r8J=>c#@1c9$J zKWHC!zb;8Px3^g<36iU3f)w zoP=!;isA~Ey?=Q4g6{6)t5wTGaL+f*RmEaMw!f-a z+>lPg$}GpJEL%mP52T3`NG+D*B%WWNO5HF#42*@xL3q#AbwN>3o@zfMrDQ5m9hQak zf0|H;q(*sEc|ObYV?19DRcDU8D3G~22_=ct)4((;J<2q(;GNMZkW--|JVlYz)K(;d zOTbu;;{Xz5#aczF->^j#uToXk=hJ$XI$hH~tEw+Z(!J?4ZaQDn-by4?s+=&?FP;+< zKnfu-Jr8rk?j*-yom&NAN+RP}XqpAG(ieVCBa!M7w7{d_CQx;sWreRIFJXg2q2M`^ zYAZFZRo8EBYpZ7>n01RR>yZee25xghvLQU5MOTlnRDRc}ydgOZU*P#NvXNN!XmDJ$ zJr8DqaKcx8KpO;c-VY_z+D1vL8wv(kY??3gyh~AYXCPEIs36F0gnRl8@Tf@o(3ihV zBN6R44jhdJOGX1exwcRkXW35286w4qu<#6Nby)0%Dqf7>==q-TkA}t~FY&DFy0pCM z*FO|Rz(aBzs5U6zT4qjHTzA(C`P}nVs`$X~4Or}Ih$@|L!Tv8$D z1Lmj#t&ZdCYc7<$VSn&cdtwCl&C|f@XGWG~QJlbzMN&*gNbuL`GEQnKZQJ1Njl@~V zmaWm~lPxV!6d>X7CXW);&qpJlMXnXg)>}NA|(!KyLqx=tRJX7 zCzZ=k=&hEekdF}umQKE|k}V6xGMU`ZapxBb3rzDc(?pbkik3hg zp`>@2CN9BHltU;UKc7G#h`vUBN4+~>;Y^)j_VPSJxHyy_FC-FUEPGb5*lC(rH_Q^r z6I|fVH1#K#>6CIAbIhc1@%wch9f0G-xg50O5!LGaYPHuiVHqmO;f8@9FUseS)ph6r z->FC=sNPSO%QZoWKM{GP6QJ1M*2a^<0y_Jv)fYo@K9_@>MIo_>H9SgcAD}24 z@W(}k!YIf6u(h>G7Y@dGLYATNE-4ldvn=#sKzW;O!#=F@Y*mG>xU#EjXQ-5HL~m0l zd>~1Kf?(8ZP+MCYNCHZ;$n$HmS%f|ph-+X4k^Oo;kF4Ayim;Vs7)*o7I&J$TU0+=+ z!V}lFx6h=S5700wej@RYcpUNZA3UvG#yER94yEVLKeOsZ7vJQ|-_ zeDu)(IM4&Jb7?*gRe&WrlPkv!`TQ}KwJw=_PmD@wFm2P4&nH2HrwYo z_h&MIY>v8ce+sU(wYAPc`+5Gr>z=TR$3~STr6^3!Ss!s2aARFde)^c4xrdma3 z>olDY4I|Em1)|A;!VaGxqWD}g2`WC^G=J3EY6U<9 zaG^vm%jb6p!o$gAL-_}Wh5}qwF3YrWf?txZ`+hX~Y$EZnqF7BajVA1y`Fxw}KBFib z(7r-If>r|+F%kLx{{D#~M3kAN{iYtvy1Y<8rvQ2XQivIFHJk+D1DL+LP)pw<4VeH(o=~lxSuR&N4w?6|ERXs8Pn$Y+pvos~?d$8S3lWY) zv`nd1YrHCz6_pCg2Dmm&(cI1RD4Wwu)ZL?_N1NuevWz|_PpzCos$8VeKu@bmB@DHu zqa)m+f%Df548Wk*;&JH70n+0dVYC|Tb%yhS%VaVKv>Evv5CKhKS-S-REsaL)Va9dQ zA)cY@$gqb}DLWKUG#;pVzfYw;qWMP2F)9TSnxh0^%CZ9_+2DBCTIWQUZaCF2;8Dzl z%!aV4kY;dvI&ZR1=+RA8`h>Zdrr>$dzX&UU0b5V2R8&zkLWTmPu;A|2R)~xN+B4IG zy-t5iRK(n_i|Y7NB7x5Pw(;>Ry1K%Z{CnA~MMjs&qjnPsI$4v{N?FaXkw^*Efn`x< z_v3_OhqqW3rF_%mx{ri_@3+I9EQ=e;^sKMV9U2NN2a2FVFvz+@0%d$zNO-`Dh(3gi zOIq8er)D}DCyE=m77GP{R64Qrl}gKX18^He9Z&&_(Z+qQ zQVHJxTYGGq32j6l${u|Eg6;R5#1i2K5WI#7;87%#KCRUWn+s>-27qdtC{7V{`*^;e zG*dHCA7uY54qCLoGZzLc8jMP?Mcky-@dEFf1coUc6-HobF$XOhvwaWa1!s8E5OL?J zlsJtVhv|>o^mv`2QPrTSKdtNUMWcRJdH?=<7$5k4BM-7H1dtu(ILsGr%bG;SKT%(N zkqS7i-?tC!_Et3dTs&T;jRG%Jr4A7T6B_~y1LMMae1x{%(L4BEC^N%rlG+X=^_y|e z>u?-@$Lgz^2IhZEmN&-ZHU6hAr8x{(Zx#o#%B1$;L)ww8KkOqK9n*%p#$- zjG;F<=-d2lU9^g)P;TK_5DVxGXC+{|=4Q;+ugDC9>Frnyg|`k_K#iqF7bNd@W(u{n z0&N-yBrp=5hbE%kaSpR>lqgib-Q-tPffEd)-?B{qmD9lxU!%xWDmAM&hM1e8dAw;N zWLpTb0Km0{ffMFB}6)wYTvxP75zeHlFoR2auW5X!{FuoBLOmR)Gu z7ne#{>eU?`@5EwizytpNGg`6w+lzzvYr%pAvosXAguX=Aa9yzog>Yvedi(=9_k*!9 z#CnS$?BRL%3C5vW@3XAqO!FZ{!Tn)w211@19DF4j{bMpYLfd=xLH#;Q40r+cV74)y zzpzvS0JeqdEtu#LMS+{U9A~L%9*M@^aR656y>HK(_na)-lil|H@$s1BJS@xORQ9Zy zOUa?s0^kx<028-+-g-&;>DXA7=cl}&gRo%yl7OE-aVN z)b+p0GI~G&pfb&9aMoFs%4$sm0lyrJZIC3W;T(C?Zvkf6xX; diff --git a/usr/local/www/themes/pfsense-dropdown/images/alert_bgr.gif b/usr/local/www/themes/pfsense-dropdown/images/alert_bgr.gif new file mode 100755 index 0000000000000000000000000000000000000000..2a5c000f8e8db18868a2da5793db2fc512ce4558 GIT binary patch literal 1651 zcmV-(28{VfNk%w1VXpxv0K^{vZ~y>d78WT00LT&&!(Lv+YimpZ0FeLyWjs8n006N> zM7IC{rym~z004^z2Y&zn%K!k!003P80Hpu`t^fc-005f+08{_~(Rg^Y006)M0J#7F zg#ZAV006rH0GR*)A^8LW0018VEC2ui0IvZj000I5;3tk`X`X1Ru59bRa4gSsZKsS< zV0`cYz@TtQEEXb>bV{vSuh<#GY3X>s;IMd1E}PHjw0g~Mmn}MIc22L` z?|4^^;qLqYfPsR2IeCVMh>40S3>bWakdcy;lpPirin-t$a8UPufnsD!DIrxU(J8R*Js$1#mU~^ z;4caUpkxva=n~BWvjXV7vK$Q(VD9K0=jhQL75V_NUhL_TU@zSlbQRujB0g9Kd|q(J;fp%}{W!d;>Sburojreg>~J(`Jd@LIj-3aK zqsFYSE`T+8j_6V`5A+!n<1(h-zo^D_K@%-1#Iy%1f&nm1mNje~D!6N^*YPdHUUELe z#@OA|ld&p3HhOC-EVLR=>y7J07UF3IZH_64Zg7~sfOG3MG|qvVU;s2D{%3M*HMEvn zKkFc`F=ci}wO$6TS^4qCpSv<0JK9>#em&Ekh92>kYih6^U-(xO9ecjJ^>U)L(ExT77%L3jXBRhKoGkp&C?Ra^O|pjffUxo;DkKU z72!5uoCDfz^QEYw6!opqQ##ez1CK~T=~Y31i4_MBFAG@%RE+}gXk1q|s%29xp50PQ zNkK9eGviX9(~>8Mv+J<(DZapnz?qlxb!q1hp2F8V8usC75u23CEac z)@dg+7e!LQ0elkW=bwNED(Iku7Ha6Bh$gD&qKr1`=%bJ#>VTM$R%+>`m}cr{1qNWs z=K%$9@Bjc4m1^p#sHUpws;su^>Z`EED(kGY)@tjmuObituDtf@>#x8DYbpQ_a8LjM z0R(`+vdlK??6c5DEA6z@R%`A5wb*8>?Y7)@>ut3G7$EMr+ZYo z#w)M75+in+2Q2Ww1Q%@Z!3Za;@WKo??C`@7N6heg1R$`I0Y+u4 z@x~l??D5AShb;2QB$sUR$tb6+^2#i??DESn$1L;767WF!J(MTt)^wLZ>?ex=7M=kZ#R3lB40~H%k@28en;PuyFhb{KlWS4FB*=VP&_S$T> z?e^Pn$1V5Vbk}Y7-FT-x!30?Yz`+4t?=AS?gcol3;fN=$_~MK=?)c-7M=tr~lvi%~ z<(Ox#`R0x%;CaRCabUs!-V~H>`st{ruKMb%x9`#Aul(}NH}CxO&_^%*^wd{x{q@*qul@Gickli8;D;~%_|`Arfd>`W zY}*@W(Iz{Pfpv|NZ#qumAr1_wWDz01Ti22S~sI8t{M!OrZWepaBgK&v?n( z!1*Rf!3tXNf*8!81~ zD9VtATnwWa$4JKTGLq4YQv{A%8fItMC;2ZWe(2=;zr7m~L%U=5Om%t3BFo#LZVjA<9$V{d(m&wd# zI`f&(jOH*QK+OR>p#Tg>zy>rBOKN)ao8SzmILArOa+>p;=uD?N*U8Ryy7QgzjHf*3 xNzZ!P^PcJ)05&av8p8yT0KnF_Df*SOo2u-L$7s}9vBEbm*m_P^s06Xy2HJktd literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/header-alert.gif b/usr/local/www/themes/pfsense-dropdown/images/header-alert.gif new file mode 100755 index 0000000000000000000000000000000000000000..02eca2b687c2859b90d521480085eb8d98c4b69a GIT binary patch literal 4910 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/header.gif b/usr/local/www/themes/pfsense-dropdown/images/header.gif new file mode 100755 index 0000000000000000000000000000000000000000..6f29ec9cdb99230be453d0ad4bf7f1aa77f208cd GIT binary patch literal 7932 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 Ub|^T7E5XGPj7;!y2KxBE0oZy=+W-In literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gif new file mode 100755 index 0000000000000000000000000000000000000000..46ccb92dacdc634220fef86f63bd89cb3c62fc34 GIT binary patch literal 200 zcmZ?wbhEHbmww(Odb(IiwjflYTL<01Y0{*go}M*p)@<6eY3I(J_4V~RIXP`@ZAC>zm6etI_wQe} zY}x$z^N$@nHgo38w6wG{XU;H?0u+C;FfuR*FzA3Zf$U^pbyZO5OUZQNJ#4b*kcGFf zO~*w6w!bQU2W+||88=xtu<$D@IhI%`tUJCap@BiD|4^brsf`TtfyeI2qH-C_k}R@# LM3x6}FjxZsL>W54 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gif new file mode 100755 index 0000000000000000000000000000000000000000..3ede1fffbed345efa81f61c487e67f6cde3abaa4 GIT binary patch literal 306 zcmZ?wbhEHb4v8_qi()i_3oC- zt@C2%|GfKiUgZ2a!E^ur|3AZU=H0t@3^W6ZKUo+V7!(QQw=e2S}4o(Omb$8#jNy%&p9pPGu4?^c^25UFJJWeNr1yl3yzJfs&?{{ bLP??F0SwGO0&NWZ-aKq6(rlfIjttfScsp%? literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gif new file mode 100755 index 0000000000000000000000000000000000000000..b23354909ff9b2a96c45b9d699661de74b8952dd GIT binary patch literal 314 zcmZ?wbhEHbso^E)0&G_0m!E^ur|3AZU=H0t@3^W6ZKUo+V7!(<|F?a0&yh8mGD--BE?8dxe6 kIFl4OA~EU~e$r9VGONlEwV>BYsivOhm}cXwALBzFi1 ziatKedwbQAlKcSK<44vx5&3=7#Q*K@t!?B^V!+x=;&%{RFWDR zr8zl+gM;4Q-r3pN(9h44l9JZe)h8z=lQlJbe0^)-?wQkSr`tNjuCdE0Q1}FV!#O!<(#?Cjha(HN;IDgUsrM+gY||Niv)`M0;X|0gH&^Z()L;mXp`wgCZJ zT15Ks@p5r+si~&i!NKC`>z5nGO!6B_*LbIhi{iczCy3S$}qSif(TF{QUp__5Vafq^heA4-TK7j@#YZ+~3}z?4gz5Q>e-lWb;rs4@_S1(JG3vH7=%l1+U04rPKN5YU5Adfd2~S;OX`qkkd* z5~w7UyiqoZQaXC5-=87c1pZ^A$0jABRQvVY!04Y=Hu1b3`q!bV*s*1`%1b+SZHKp3 z$(r@|Z!T54V*dypa%b$2Ej!}XEx2K)(M^h-E}BYVn}b^C2H3)#d6@p6Q$bJTE1LVsS_RzCe+lB OA-5k94{ARc5CA(mx)3V> literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad43e17992a15f9e9303105f7a5ac96acd2abe68 GIT binary patch literal 348 zcmV-i0i*s$Nk%w1VJH9(0K^{v?%k`+n+E*( z@c#b%`0?G{yHxSwx6Yjj^ytO<^yKp8z4-Cl`t|4V;k4}9qVC+N(4iIK!)fv4yX)4O z;KFAA|NqRH0RR90A^8LW0018VEC2ui04M+t000Hq;3tk`X`X1gTp8!Sa4gR-P>qeJ z?|kq7K*0yHa{-S$PEWZ@C{W86A=mC-U8h_2wFM;3m+B_==DDs5F->78~y(O00RpACqaRT5CA((AEN01 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gif new file mode 100644 index 0000000000000000000000000000000000000000..abd1b8b34c3a7f2a9d7cd3e6c6efd7593f6aad77 GIT binary patch literal 331 zcmV-R0kr-{Nk%w1VJH9(0K^{vySwqs%=IE7({^^`Mn>ADrR|7_=kD(O($e;;tM1+1 z`0()j{QUj~2F)HG(xRg5#>Vt%Y2m1-?!CS8V!YA^8LW0018VEC2ui04M+t000HZ;3tk`X`X1wND=40a4gU8aE*kg z?|kq7K*I+DEcOIB9_QCs6pTPXLU%~+41gcv+2arhgB@7l;dB&)O+d#9>pIrm*4L@m zJsZ0rP~RNF00(?zQa*D%cYGda9*P}V9aI4X9ApELJ%>DZ0FicgkBd42d>u=dhFqJG zor{qM28#d!9fV;4Sq2BGbgYqPeI5rL2@0{mwT&BwQ&2?%yL4nd3KR{_MFC4Z39&s6 d3?B~|*yTSK86y=M8}07z@bU8R6AL0C06T*ln8yGB literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gif new file mode 100644 index 0000000000000000000000000000000000000000..4acf2aa106f42f5f6757621d1ba4e8aa578c34f2 GIT binary patch literal 346 zcmV-g0j2&&Nk%w1VJH9(0K^{vMA}59?WNN8(%tyo%=OIf{O+pms)*-^@ci%x%?JGc z{2tOCw(+)d<8r<7z2^Gn70?w_-BiQ#!`t}Vis*{2@2Won0Xmxh9Zg_wqxm^udq z9abKmI*2=zdK-5bwi%Y87zS1Vau}jz9 z{szs>i09|q`1r%~^Qi9btncr)@$nkb(X{aJqU`ME`ud9K=yK!Z3C_+`-QC9Y^qK4H zX5ire|Nj8Y%>V!YA^8LW0018VEC2ui04M+t000HI;3tk`X`X1QJY4I(a4f@DG-h6| z?|kq7mXGE~Y~>0D9_P1642Zu@Cnrem4uK!x*)tll2A9;cIphLMPhslY`o@51TsjtH zI|l)~ljga5aB>}YQ+pc)SsnlYZCpHoihG4Q90(l(1&WM4e~(jokvU@>nV24f9tRJN zJ`7TzaiUWQ3}jMfr&fLtP*4E^U2HuK6$`yY2YopRx;q659~2nJ)I<^vBNY=H+}+;a M;Nji?0wN&*J2GgRdjJ3c literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gif new file mode 100644 index 0000000000000000000000000000000000000000..55c1c4ad287a2dfd16a569d945202b3c4b42c0c2 GIT binary patch literal 1111 zcmdUu>rYw-0L3pA1(i9ht#QG2npqcDyJpTAXR~Q7vt=<;>#~tqgW4BnGb3xWv`!-! zI_WBNwhhWto&`EUpi#qk+Fjj-+zSGk2=zq;MMYF%mL+YN{WErQKK#C&{63uXgqrdX zTQh-7;2#^{bUGuENGuj>XlU5m+Y1B&7K=qJ78?wP_4RcKn(65w)z#HSqfwvF$6~QW zBGJ;)5}8bv$z<*A?cs1Z6bgYLxVpNUk&)qYxwu^J_V)J1#>VF6K{t&?6NR;v|{$HTCrySrN?5^}jce!o8+kC&Ifqfp2L0ngajSX&$6*)#v}@Q}@Bo1KO9 zdOa44IoN?=yV-2!^ZCJGkj-WjiPe7p{IO%%Q&W?>ySwA#<2P-D-+ zDnUs}iAKY*T8#?}3qGH{urL>g!$l%%48~OmGTgrX)srWWi;9Zo=H@&e7n9j;w}Vot zl`^j3Zwz;`^Vq#)+bd*MGq0ugf z!_Nl?2Sp2kSTDC~E;;hCAIeSOzdDwWp@ClYZK3NPD3!{AfdQpbJ~Z_3=FRr5u1gT~7YsuX1Wr%?u2w5MJ3F1ur$i!ga?*guzfY&P zwYIh#KaP`1r7#TF*4FZPOb&-VKR+)N3OO8($Kzozs4|&gc6MrbxSK$@U@{r?dfm>> zj=`WE85t=nE9>a!006+@a3m6m1Ni?Y|6e2m0Bk_ zcI9vyK9ibSrS1I#kzPP9sHhj;P5$y*^wAuI@GLbyrJ~D5Nd^(P44^*8CO?#d8pR_S z=c=mE$dBI5$!jE3(@9@fq1WFiL}1d?#ccM<)z1;7Ks9>hmpt0zdU-*s{Xt|JcrB{} zyMxWM^)+2eS;@RY{yQrLjk)#bo#)`&g|yPhq4))a@?uiii)BFZygv9^y^8YR_|KGj)FDm+f`}Y6R(*IYl{?Ehnf6=1< z{QUpdt^2Q}^j}c$|IC^Hjg9}OrTss1=06ZH5C)1rS-^^PKqSac23ETTOaUpLs%JP{ zQ&|ETSp|iqeUErsUNW(@>s)-~vu}%9*8vTWdp%n(DcpGB%eIt#(su=24`+jy4H_z* JjLsYk)&QRYKx+U1 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif new file mode 100755 index 0000000000000000000000000000000000000000..eb726d6da80aaca27538a0fd3e527ed4c3b883d7 GIT binary patch literal 192 zcmZ?wbhEHbJ@BV-E z=>N%+|L4#Dzi{FIwQK($I`n_Rg8#2y|NsA=0jPK8OdyFLDE?#tE6@RvAUhdYZ4(3o zQalxpys&xtIDq*ngV1k}1Ky4kRXF!?EIIPovqkOHA&Z$a@_f`^3gkpBWqP>vqyn#} PZR^I0S0RT4;WBg literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..e6345fe89beacaed80781c84b11e5b223bbdb5a0 GIT binary patch literal 193 zcmZ?wbhEHb;IA^|L4v7KY#xJYuEm-UHkvgq5lgO{D1xWKM>5E$v_Aw{$v3w(E*VlI~iE*7AOUz zcp4u6;h_2@faNQLFt_gkZ`VsEmUf;?j(qlQQ9E_O!sA}g)*yw57rsoY?311=n0h!H PWKMKY@nmu4V6X-NI3G~K literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gif new file mode 100755 index 0000000000000000000000000000000000000000..a071c66d707efafecc89cedd418a71a5e3e558bc GIT binary patch literal 91 zcmZ?wbhEHb9$6Tjb>ACnqNu7#P{v+57wZs;a8U$jH09yHZk8i;IhWeSP8K z;o92TMMXu!!^37~X4cl$?(XhtYHDI)Vmv%Nqobn^4i3D$ytcNspP!#_aBv|ZA+xiy z>+9>awYBo{^1Z#iQBhH@uCCqP-KnXm{r&xScX!dz(R6flN=iy&V`GhtjnL50US3`( zC@7ein00k^0|NtqfPnS&^@N0k?d|P&cz9`PX;f5HFfcGCCMG*OJL&1^;^N{-MV>$aJHk#FI{*Lx literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..1647e2f4f408254893f512f68e583fa0d1f4b944 GIT binary patch literal 1060 zcmZ?wbhEHb6krfw_`Z)pkb~p#2YU;Od-(I|U;mOC>Xm2mX z$?50iwWX$ppPxTUUw@UKUr9;HDu4endHE7q*`=PI8_UWHva&4s_%_AG9jd7*S5YZd zQ%jSUKDdAX>Lp9M^z^3M+OAx*XiY#sZdTT+#fw+?_{d93_Zk~tUA|mIM8wzEcbb)z z6VNVQ-C7luTt&qdfq_j129+8b^Sr!nZr!>%Jbb!?LqI@4l7Ydoj*gA1RxNgS@6gei zVqvj!=gw+*`PZ*s@7ccn=FOWY_w4C%bbS8&`TO_pmwI`1Sy-gW$@SUWZ%#^D7#O&& zsL0FBZFO4OlDTtv*x1s{%*t$R)<#A)sj1moT1JG1zJ2?4ri;sRA0JIk&1FeRB3xWc z!o&NFjqB{}9_-&AtFIp*C>SIx?Ca^d+}k@sPj8u**T(YlEw#0WYHK??J9qW;%yn~{ z4-CMR6b=p!AAbINJG*vc<6E0IPqni8`0-=0y85)<-VLFlRl2%)YHHJce6FuvefRF& zL@}}3w{IIsNSvQJb9sFH&!0c%hJ-vlb?RVs_3Dg_kdTl_Ev*AHXV%!+HLI)l85z~u z*|q5E{`vD~x{XbQpx~jpx*KcPGBPq|XJ_{q7+hboX0eBdzq)$7iOIu<4;Mv725V~0 zw6#6l(BP_|5F#eFF+P5>on4rO#I@C{E7aAWK7D$A&YTs&!Fvh|l>`JfRaC55x^%LI zMU|W!A3OVr6DMM&r8kt6tn~E_@bOvV;n8boxM$BE1_p-z|NjHYp$-&(vM@3*>|@XY zc?6Uv7&!hj)N;yrY*0AJ>=wovA@M+1frW+l>L-O1_ci>gE-n{~8QT>a?K>2NlAm8% zX1_8>;L?N6?)9FzStdoB*``TxZ=X|g(aHIgfQ?FoX~37IoRclsc#f+9>?_}#d;xOe1t(%sVa_4V}j z^k(2@?)>iFg2{r2=ZGTHBG=*9`TO~;t*xrRs?5yH z|Ns90%m8L)W&i*HA^8LW0018VEC2ui04M+t000Hu;Ma{L`JHI0uIyPp$5Xa+?T!K4yR^l zX=ZF`32!46X-Xpyk3V>6duSdF99e7|8CkM&BocIWk$@SN9=;xKY*9f*$PyF^xXh;; yKLZ>F(rf_LLMdSg90~{+90;XE^z`as7ipwokoEpW_m&B?L6C*OWd#d{0028uv7Gt< literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..2ba8db211f22533f43cef096f7a553b38f73f91f GIT binary patch literal 357 zcmV-r0h<0tNk%w1VJH9(0K^{v@$vEQ?(W*!+ScpV;Nalr=jZVE@c8)n%H_)Z{QRr< ztJ43{^#An2;KH=pw9Nm^pVFV*|K02B>-hZms^zNF)6@0!^{V`;`TzOX|JUT?Z_0z@TvG5p@Qf!7(}V0W}(+01Ew8s083>!XY(Co6Uvtk?IORfNt&4taZPUt^^J% z%D(_7aY%E15*$#19(qwYT^$exUmXl#8+aajdVWv`98-jPStAG>1_%ip2yzi&cmf;} zs%UC!Xl`o>ah_{RBM*>xdTV`Z9u^!~ZUGuuwR9v9kdZ$+mw&*Me{NAhM#>!u47$#$ z0Y3yB1=DT-)oDlRk|c*ll86%+&x+)(hKjSv7k DsiLkc literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..12db07ad024ff5e6c6d29c717e1440a425d24151 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1SGfcUswyIGCW-zLn>}1|M0g;Sg>2}W0Wz6 z)3jqEjxQL!G;+T*D(q0&p)kvgEyYqndL7425tCe=6H*Eck(!%0Vx&X(XLVonalGud zMy^AlOKwfx;Y|K(1_}@4&umbW$(vEwC1W3{y_G`|1< literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gif new file mode 100755 index 0000000000000000000000000000000000000000..393674d42e39b25c9c4c7b617a8cf8c88ee4674d GIT binary patch literal 1291 zcmdT@k5kiS9DdlogMp0OREV*GG#HCX+d&*UA&xm5gStXOTZYJH3l1vqC?ErGZV1C! ztyGGDnjBKck3?<|MAATh$u@rDP7Y&G2xymOorcF%U;Hn6@80L0_xarW`MjU^dEcaD z`Cf^Ni(otg+yONJA>8b4umR=31>h98BCfKJDXXNps~T8U@~ zW(D{Z7z4TxKqeUkV}gMf5l-@t00ZzHAOLv42+#-RPf9Ksih}luj8_0JARX`qc5Ts$ z)e1C&Kf^~Z2nT^8pbcmOu7K6eQZ1?w4^%_ft23?{Wn`+WAOQL}9WMhXAiX6;GJGa{ z&;#E|U)e2L_EI(l2$%{;FH84uc;F0RM%2xy{N?=WyVdpg>dCW;=fnle1-s{Vvz}*# z#D$pFO|SxQkbP`bR#F z;5yI^?lkvs%V9Ti7f?e^`xEv*ho?8l7etPTE!g@Kp#O^xJh_T?bHCo5`b@@Xy9(vk zLLE!K3O}9E|GCVC!Ybz%VnU+wAJV5Z1a*dflX2t0Q0;*1>;EJ%5O`AOpiFW;0 z3Hta^sbMf8^-RiN4=!nJMp<%es$t38JlEo*PPOh=%~T3Ar`N`0`!7@|`=*z7AX)R()oUTogZ7QR(G z-e~oFoH$wA1#zZoGw0#ZhL$qPl)oBZHcxmDwH>>k!mPE3XDshuJQAsnq&nL*pZUC0 zOJi)yD-=9p)NQOYePebx9j|ZX-?P8Bu$FbL?D1Q_TSDf7KQ1l4|EKF}UjAbJz7juK z)WqsPrzC~T!&A=1VoOaH^_`WTk@B)1=+ncw#Abn(dHN3)Eok;=mo>LfnPB8|h=-mu zMJw$(joZXe3OpCrVcWjfpH)sH8oR4$hIdVru!PUuMrcpD28N$yM`Zo-i9%$Ox@V+! z$U=6Q4(h_Ml(^jZHR)N_>Wrcr8d~n8*-8{GoR*9A7Hx_bXYgPmwO}|ro2uznjS@S~ xO(hGdCy=}?m>#@lF833H{&iiyR4OpLC@{%|>y7Bv4tO#(&Ff8d+jlY%`yZ7jY@+}G literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gif new file mode 100755 index 0000000000000000000000000000000000000000..e171ba883ff6adb2c24c38893301da408880c34e GIT binary patch literal 308 zcmZ?wbhEHb54l zzcXjfFsx@_*vY_<#js(+1{D<*hTRM|ZrorD7ml#~<`6JyxIz`)KRBO}9b zoPl8*gP@>be0)4ZAp^r&1|=mW5fPEASFfg~rXD|joS~C}jg4*Hx^)a?4BXt@3_x&( z;oZA;AO?v*@h1x-1A`ue4oDx!PYi5<4%1IJ2y9g1nslKwf>CPi1?34+>sZ!`X-9wb z5o=fz<`cL^=uz&r;)@+y*XXjB)^!_8x15@%JH>}NB43@6#fMozNSBXQTfmz~Oj$=l KzD>`O!5RRChfC-H literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gif new file mode 100755 index 0000000000000000000000000000000000000000..00c865a19c662dd9e7df3b8067c187cc5cf3680b GIT binary patch literal 308 zcmZ?wbhEHbge{LGm%N=izH4|EW>~PofUA3gs)wSLwqII+)H1HsQ?-6ykdWwD z6SgN{iO{3mvM-LETUV`BEUD|(R(Ci&PqjfsBO;%VncYW2T1i`wMN`0ASWQJsT&_*W Hk--`O8gXE6 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gif new file mode 100755 index 0000000000000000000000000000000000000000..7b412eed1873645dc604d9d95db433b38cbad27d GIT binary patch literal 308 zcmZ?wbhEHb+H`I453cjgVE*71BB&v5sr4n6`CR zh)?^PFd5G^B9C&nO@7$1bI*R7V> S>k5;nS4v%(m@r9%!5RSkFA^yL literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gif new file mode 100755 index 0000000000000000000000000000000000000000..7182e0dafde29cece7529b08bec24c70f9f245b3 GIT binary patch literal 64 zcmZ?wbhEHbaEr4HjlXWzu51?^ZEJk{7BJ6{1@qGfwREh zDnKrmvsf&#SUf&HuGMN25)zC? z%*@R2@bKW^phBU5pu)|~)v2ke)zuY=q&*}g#KXfQJ3E`nsBv&`SXp^XBoZwav(>sV zF)?f~7|7(zf`WpSloXXpwZ6W-x3?#gj_P#s(a}+%kZ&^0$Hm3bXpb}++0oI_-Me>4 zq)4e$+S1a(<-#IS7nAvPX=%x9o~x^SDUtmC`Zdhuas&bal}hRDlanJ1*WSMUZDeE!1VL_Yn5d|zhYxcZ493`)n9XjC zkB|5E_TJgqsjshZXlQ6`tdET)fFP*V%0ff0BqqjjIPAT>{psmxv)Rn$w5rw8{{HUH zPWJN3vc4etcXvxm3z^KS_I5Zw|Hp%a19$iH zTrT&;3%XjZuCA`m%ga_M{#ahNZf$KvL_}CD78D9)v)LvlCi?nVuU=If4C;!C0s?`+ zX8)F)oQ%hRo|TnpH0nA!8k9;U4A*Hi>gZ_vg$r&ZQg}wjEgp}Xnwsk4gRQ72HyX7# z+{K}x!QNgTo6QCQ;6p+m`2U>Wzjg=!PywHQ)cg1e!0`ltf9eP9NA0s>zyR0GKnEIH zm4fnJG!G-cw*vsbMY}4*b@IhT_j|1G*mh{IhJOG~F#?JF0UBBgEMoZl5(c~Q11kK( z-OoJWNt;J-7$@$w;aq0P)#$cWM}GpvP=dS;mNCrf$sGX+wwiLwTQ^6La?kfpvoC?} znpYT=9{fDI6ihcfS-FgWgnvROWO_1yJoOn%`7@Q@CCIn|^t%Rx7rk_G4+HU!Dx2wz ze%H?QCB5emao^N?J~4xpST@4*L1GLUIYyT~Cn|*bU8jm}p~5bq^{v%(*_V|p;iW(# z^Bjo7jD+r@a7!`^@0AKwFj;rq| literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..70a7473c30f8ef7a9ee5ba94d9fbb6dba711dda2 GIT binary patch literal 689 zcmZ?wbhEHb6l4%&coxR+?Afz-@7{HFb=|vn@4C-XFJJ!k>({4GpB67(eB;KA@87?_diCnuxpS8;UAlGa*518)dwP0$dwUxj z8{fQnbNBAu7cX91zkdD0hYz=J-#&l-{GB^@T3T9m@7}$6^X8K$PSn-aojP@5`}S>D zu3TBNWJz~-_k{}=7A#nB;J|^yhYxSqu;Kmt_b*?(*tBWW+O=yB9z3{X$BtdQcD1#& zb#`{{+qduOvu8hl{#w0y^~sYb_w3p8=g*%bM~-aSvSsevxj%pYJb&)oj2Sb&e*OCN z>C>jBrq7>0zkU1m?Af#b{{4IY{Q09tj~+gJ_~XZqYuB#*{rmSn7%&VRQ2fcl$iNWB zpaXIOC{7sI|2KsB3CRn~`ge4C2C%w@g|G$jd$4i&d$J0JgtE&zd3#R^;$rag3A9o3 zaSRO=)%W)k4&mboVpg!#)Zq09VRh#Y^Mb(36Oi{UT%8^4#HH$$o zER~5-J+Q>ZBBOzsM@D6q$HGGjLESRJlQ@<%r8qaSD6#2uD5;*};_zxTzVoRX%iEiKtR%|sqO9Uhbt?{mzT3$UAkUgF)S>w zR8rWnv7%X7fo)WFsRZY(P0nM@Oz$ zSXWb11qB4HRaJIMMXOLymsC&EqM~|GP}#7su&}V3M@F=?w79sq%!7l6Nkuw3Hg`ET z$hEb#Zf;mADrYMz92^xSBplbQtONuEomNu0Zf<8}WCaBUfI&ZgH8pZGGFL7vm`+NK zF)EKlL6SQ*pH)>=3=E7=Nxph|ltV+jyu8+$nxarppF~5!fq?-50li{k%$1ehwzi~A zO`@Wrb3{FLH#eh5L$Ov=%!GueS5(i>&w6@#gD4}VSy@yB1l6mn=;-LcczB{!RhK+E zsZC5Y9viV$Q;Ik;UNkUSDk`sGVVyxiTmS(7|Nj600000000000000000000000000 z0000000000A^8LW008v>EC2ui01*HY000R80PCFq5DnI(DBA`o1T|ya6LIy>&H9pv zkBe6(iX=Jbi_IB5hyXys#_l#B3q3YM$S}K8Sqk72v}QJTxF&3PG=N;{?qJaR~5?nW7^HER}HlxL6oR zr54;_Qs`R&I9E86*x-y;sC2<{JX+`NN1H~CEerwXDGv)bqEgZELQaVg6!iX#2uH>P zpkZLNX@J&=$~z;|WSFzT%FwYJqjUv2lF;pev0E^J2-;({SqYHI%f|KG>Q=luEe4<9~!`}S=|N5_E!8!leF zc=__>t5>hSeEBjXBjeVsTg#U(fAi+e`}gnn@88$m-I$P&ux;D&%a>1-mq*Q+)6CA! ze(c!JfB*jZ`+MHGb9>REMeEnk%gxQWbm@|wp02aA5f>NxxpU_>Y?%G--MiDLk7Z}a zmXs9t^%d^jyZ79=qcSq0PoF-~&`|pQ`N4e1_o~0G&d?L%E7^*uCDa#*|X8nUXhVbbLRB_`t>s+BBH!JQcO(j z!iA%Y7A>4VzwgSG%TZBoUS3}R|9`)6<3?3g)x?SU4Gj(V?_aRDw`XBtPEJlbbZ8S3 z6JtX|`Lt=1GBV;?TGG#+J@fwkJ3c1_KlO1)5yqBS6B1LkMA}%*4wu) z-LPT9rcHCMUA-zJBfE6TqQb)L1q-Hq`0)Pk-@pC+6%i337cXA8c=5#JM~{+{;x1e` z{_NSao}M0OXXl+eckbQ0rna_r^XAP#K|#H}`O3;t>FK`x{r$qi!XY6+K0e+_Nikcu zZoYEmLT+yE;>C;4oH@h5zyOS2AUW)T;!hSv28PWHIv}5d@&p6Ne};5Njth$gIU@9> zG>$ZRg^00kc4_!kpy)Lqs5L3kJ_hBb*cKa#M8k2aG;U2hGY>dYu{vhL$=zV z3GAc!c+&ZiwB5bbWBdZZ$HjT|uxTPTJ!z)o8d9{o)y3!2CSxj;aY$hE25xOk6 z`MyE`%R>)7_Dud`ROFZO+pa6q40H#{2-v9sr literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..9ba5738fd049b7a747a536a5bae8b1e4ff5a513c GIT binary patch literal 1120 zcmb7@>o=Qs0LOoLJT5U!499WFs?s1Hb=Ra)ks?pk8`D2w-`C&IoA3F2(HIt$CL#a=I64Hs zPD~`k#x9hVJu58K2!$#--DotvXld#0?(SqVV*r@Hd$$HbBy{?`SUk$*j&eA&Qt3oW z%4|-Kxw&}`9>1Yh&*kSYNF;KPbAEn)vzeLc@vQGMGUOO`35LVNgJn)mQ~)p{ajB{* z#>GV^k<1B&YPEV`VBjVWcT+6h)@THQeh_5FU<8v$&bf~E8a_WSFK;9{@d<`a%L-N$ z3OWEvIz0t|t6Z*LCQAh%B?WzFFtjq6n`2`?FE4+^OX}(ANec*2T@HIdr4k5)R5Cdv z#H${|P?WK(P~1Q3774&BmFjsz!(?h|I?iUjtxYeNXX9llx>t<@SbGnGtcRgk~YsLMi-F>a!Z zi+wgic@!Etl#rkd_2*M49TD^p7#6{>8V#SDn;VQrCsMd&oMeF=p65w^P*%nPU~g}) zxVX5N&Ax%NuJrcIiJ-|TWbL(Uiw_@`lU&!<)|kwonOnCEg|a&rE_B64A_y{n?;eeY z*xFk2`LS_C;=#c|If;03a->d9Zf|eb35Agi#%+81zL+cC-k)eQG8RfpV{kZyLh&Rm z?alCT2Pd&H8OyMzl+67oY+(>RaEVugQSUESZ`KM)rMK@bW+B8Cknpvurtom9G5 zU+?cv0szoxzE)ONeO!)*hesuf%BjKS-X237PH8wzClqK!!ar74MmU`70Gynhoc8~3 z+>ap>01g520sQa@V0i+5`!{f>F5cQc3hxEA>~Glc53#=qlew5W2n52(y?tA*BzVYh zY*;XDj<(>0&X_F0EhJ~Q?-V}MP-XcsIe)b$C$&MO@p@Xz@~u!=?4M;fer~KCa_V_s zxygLj63~n9?evGNU-`(MQVxuN4OyGq*(X6hyKI*Lns)E&RfmZA@~JOhit>f9jTs!F zI_~Bj9Xf>F_mu8#jDB_|D)O;I>YJg+j>KS|CN9aW(X?Pk@473haHGWEw$ltJbw#+F zEBmdcW|)tgZgg4)=N7RozKz0Oue@J6U)g-|HSemh=_QbjAAqa&12iyUr(*OVf literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gif new file mode 100755 index 0000000000000000000000000000000000000000..e0fa6597a6ab440c246ace3e6124a2b59d44219f GIT binary patch literal 1312 zcmd^;`A^$r9LL{ftI|yIiv9xTJm@cz(XoV<1@W$D0S(mI>~eY~Z*Njkl1Iz9IKt%; zu{eP`hr^*;Q7J1Ut*s<1jC6Go4-Z#5qfn&KmnJ8#@cCNcDDV{M2UdVvfIFa}8L2dr z(!rq%sG(sXf-*k7k{;*fMH(7NU0tkDNP>eiXiO%X1c2g}{&01%h76$Vk%P zKa-L|OeW&x^&v0@v;&&}k9I|(0w5UpiMpfXd0-XD;Pdxr852X4N|Kg#zo6h(TGrN* z48U*wKY~TWr54Zs~;2;fjbP%m}EjPCqPz3~#_IA?S8|&lK#AK48A-i0@0~i1% z;0%0?{qa6s^`HC?;r}=N5_E*`WB;E3hoI0|lwmVZnVeXmnpxW*E{)2rtApBFo7xY> zmgu@FdR_=;UaRSQJs`_HJ4-sOnRA=*dHL0?z^C@~Wha3}wQAUUaKto_WRfrESyFGx zZ-(0ho7D%nicY(xW5sNJJi^my3}+cvoT1|=iXJ&|Imu(+T2D;AZE*27EQ?}dKREDS zoS&0z;j8bOTm71H3$@+Tmy1}wI}^EIWJWMvYCLSoJlEXj7hUafOr5Iz*vcFc+!N22 zIbEIOyqhvVa-nDa;i<$)UP6(B$#K|s^z^yv?e#mi8%M+^h4oVAXNCIhIt z78k5{pRM0{>uBPQUHjRM@9zrt(qBt>UcWT-D9v}NF@n93|73h%JWgJ^m{6+61h zemTU2DgE8-G9R7c>8Um-9Zqv)svybdxNqq$I3+>kb;Fk&)+gCUHsg|XZP?5dSYfM0BSB literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gif new file mode 100755 index 0000000000000000000000000000000000000000..36c2ec7b0d423d145494026ae4225d9266eb78c9 GIT binary patch literal 1274 zcmds$`A^da7{*`D7FsH>Ld$^m+j3(e6>#Gi+H#MM`xr-sG7vF?q1g}yCWBJ33ML&O z;}Ar%EJ`9H447=1P?QQdm^(x!0xeX8icm#mo4R*pf5x64p1jHXCZG3tlQ;VPsKB5+ zCm>)OAi#%I3BU%xd6$14aEH4c{P}GCY;wVeRuLf`v9-IQ(0%%5j*Ba~ zopQUCTWo*6Gd}$qSH!s4x~OE~v!3U_aq#Jd>F*p*R%hdSUFcr28)2pzOhbKpJwSE> z)rMv)5?a!2Oz?3Pu4Lr_^fcR}CYTH01E8BJv^7wc!oN}2hXq;aXCgH!o)y670M!8Z zuR9;gpv3@qaLvjOSrdlIMILT6U2bHct}@u4++AcsX zZuR2E83sVQh%(Y&Kr%Oq-GTbz(*BbGWRj77Hfv*=z;!9=&p%YL*CyGxUK=B1YE`U1 z?{QEasGm*M&&FSAVKjX~FF(xk=d)-4nj0)}BDFAsmYYJwjpm7w22=;3u7Yqf%}utd zD6;-(FaVdMP@9bEfPr&N)W)^S=(ylz0Xu3l>@aUQ*#AwOzfAv&#M|+mp8zt#Q46P- zzHVi$xrwKEye|)AS0&BEFEq6^^-TX9>fo~dSx-}T9#dv1SGexuUJ_6Eja?3JQbW9CM!Rjs1o(6#b;yhSRdSNOON)Z zJ*srv=GP=;rqA||O-wbv+vvp@dYvEFIz^HMk&kB#xZd8yBn0!4vZB#Oi)I;c486PcvZYO7!s;mVyX}rvQHx?;wXoi+qa;trdvdC9R@_eI z7zm60xk4+MgbWe3LXDJ{(c>D%(FM2vg!sv_FjAyMLDmSyc;f5xFea?8n5k)*Wo ztkB5lj@>pUWV3)ZZBx8dJ>fx4m6*Ebsz=G}-HH)QFA-hhRzP=To1T=)f M)78&qol`;+0MHgBO#lD@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7f9a5e1a727a1f26dbee85c62d142fe6bc26a5 GIT binary patch literal 618 zcmV-w0+s!VP)F6}X$ILm@h4=_42t;odEO-v|?~BL3#zxHs z>Vjxz0LBwAwiYiu_Vw<4VEh4N5g3=i7zM^FT1<0u=M)sII(P2TyK|TBCnnxXNSqSa zVy0Qa%bUwEZQ4O#$^oVyU@8KpC18pIrYk(DPF=mWqGH|U(|6u)-wsTxM#lW--Owqt}O=J!*FlcUW-un9XqYqoR-b+pa0KBb>=4{QMUjP6A07*qoM6N<$ Ef(Py}1poj5 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.png new file mode 100644 index 0000000000000000000000000000000000000000..434776ca9a72fd62a77d9183e5a8d537bfdfb1d2 GIT binary patch literal 281 zcmV+!0p|XRP)i=rkE~q*mzd<(_`-LgBt1!T*xt{V2A$82fRO?a(;Ti2P7}u5bXro{Me6ru9ya{P2Kp#!(fmh0X*_QJ&{oy+`NmLmr^z zl`WY-{m3Y@qV)R{uG_Z-qc)i0G{tG9&5a}U>YjP$s%^b%cTQZtr+C6P@3eIg zgZ6AU1Im7X%DMEUg25t36jM~^yR_}s{P>s~VgwLPpB-cswgRY4&u2+c-ul*MTWjWT zv=?JQdHMR~ z>oVbLp55om-EM&HBhS@VXRe7tRGc}iZ46-eA{OgN_PmfP;TBngb^ z$umOj!lwewvWuA6H#HU*(+f{1>Me32A=MS`(0>6=b?@&90G)92wov#6Gjei($r6Wk sXXL&<;hJ_-6>DN6Avc;*m>Y>l03tlVCfuNw6#xJL07*qoM6N<$g05TZhyVZp literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.png new file mode 100644 index 0000000000000000000000000000000000000000..48a34b666aae6c1b7947fc2f4c05d146b95529cd GIT binary patch literal 1528 zcmVSOD;`dveHR>N|J3gMv)Gy{~Py z9h2#e(>YyI;skMc2$-KYW@op;U?MVklt!Ba4aLk zL%`ha+rw0+7G1 z#oJR;TN4xO9UW`c)z(|L0MFIhs;jJ=NK5NPq09$Fvk#yPh0@g4s)bYv{G1Tzj4D}Rb}V#hDapWesTO4VCd}y)l-+1&1Plk za&z@``j%MyN-F)R$B+M#NOlGXUx-9@HhVcIM@OTrT)DE6kzvlySJCON{TlZZfQG~A zfx~Bti^uSIMO2g=fzS|%8};?>wze%k|9N+}yR~(rq2Xz5t(C!8N=%$VA|W)|7#V40 zGQ|Xf^KgJ(AZUldqy+_!0t5R`pPmX1o;-I>hsWECi-AYrcZ17)T2td)M`d~^5I7dL(ia{+ zLMDrm$T1%unXj+P&rb$}X^=?30Esrn#+rykQ+&LcL;^9HQ&UwK%t}^PyN{1+a`N+l zmo{6imsh)=-$NX3EG`a8N}5KYX5nx}P>?Pp#DK*vMMQvfn-da1a;*9Ja|D70i(N@i z@ACI|9enV8+NL0nySu8&N-2ZU2RejGmHYe81_V68XXuYY2yP9u@HKBd@wz8WW>IqvbG|GB8k$!RVr+^>J|v(a|bAUW3CehJ`JLhJw_M zhljg70669H4mjLMB57eTH5{(Gcu@&5hQ(@QV}TI})MJTATu4mp!{N3M9zF*G{(kv# z_|heaNQ7W8$lqTV5b&`Esi|X;QDSUZKNcrOV?;qgojyJ&QC@qr_{;V7I*IML0LbA!clG{_M;g}H>Xj}H z`JObhTMuU|Xl=@`8JuISj(gs}y;K7$<%e?yytBAzyisb?NCZd3pLd-pXc^Jkjs*aj z`I*uD9i`@GpK@4h8-c8Q_6ng2Q`P@XxL{!Xo#y~Bu96=P7}mG;ecJd~d%1b^xZCyN em)7at*ZvQi1F0RQzOT>s!4H z)jtq{3=9?NuVr$D1DC89G%rAxe9{ob^%fwU_~xqs8RLS}G%@8Rr-Hy`G8z(zgy~bWvm=iltj&O}rI4-i%6!{( zu|pYoo44GQ<51;0TJG5zi##>Cm|8i~)40}uat+FY+6sb%gIyFGk@?9DlL`Q#R2rbP|eS!^l4Xe>UBHC|ig?Z<+@cD0#bnC*Ffru+6L$F^3 zskJ;`^3D>U7h6+aY)yN*Ch-1z>#Ga>{{H@f@Iy(E;M`oLC50d~J45Plr_S@u32%?I zzCStP<@T&c3vI4XH+XhtAxOi&fB)t#tV>7|uZR+vmZ3N+TXA}Z{OO6N&o{=rJ<|3L zs9{I;qlH#?=a@W)Xjr{&LQ1xDW(i+h8b@ZTV3a>cYLdY2Zq3Kb-GG+7*qZuuwcmr; zx;JJRK06K85SOf+RU(>J#FDOixzxI^MY}ddi!j21Tbqbn@j@H{VyTSlXi!lXbTaDE;>Iy^g;LfLFCe^W--&s>xcl`M-)iHuq1P=64aab4NYms%p1GDo3rF!Qm*| z!h@`?lX2&2ASi$>2 z%S&QW9LL2)|3KTqXweID(Iz3$3Ku=-wYf#0A`vd`Mg$i{Vi2`xrG(1?kr^2B>LA0N zQIMG_8FgUPsnHxw^KtI=m8s+Vfiy?2H97NL9L|N`hwtxu&zJVttGL4vz%W0C!LvvZ zkN=7GeDfO&7b1~+Z7sO65?WpLZESpAT-0+og!LS}6U@*84Bz%4j0Py*I8jS{?@E*Iq_D)TCH#c7o4?p{~fiDOWQmH^k zd_JE>qX~sV>NDza+zbtUnxDUv$-01Fr~8Q@AQE{A2n2#eA`y?r34#boB)^uI)qQxV zxlAUL428lYBkx(PTMBSPK&^(;&^?()=wUZeZxnK5!1Mp;RgxjYg~0f($gt zXf(vq(yRV{>d(>&0DNRH!Z=O=Mx&9-<(kdrX0utV)r#3{dVSr=<6(1if8W8rzyE{F z1s)H~AQp>Z1{6grl}f2p%ATA=dAzrSgRo;g)i5%dp4nLf$6*p2$D!5la5y8A#W)<( z`1rS{SL-RCWoPGdbo6dv0fcDo@Eun@>(S(fK{ zAHQIlCPpTq0(D&16IG^aI`^(yjV!YJ{Vn=W%esQ{{;ks(isR?z5(Y#$F+n{ RRD}Ql002ovPDHLkV1kYdn#uqG literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.png new file mode 100644 index 0000000000000000000000000000000000000000..06b53a113dabbacb139a01dac04b413e707ac3bf GIT binary patch literal 620 zcmV-y0+aoTP)c%=i$TN|0YnjbQ6*9`PrD`ct z-kzf1ehM+TpPf%8;4T24@d9;yo6%ald6Yn?aB$iY}MSZnu}qW#D-d;R2W4mXqJm_9Utu|6>+& zfM|!qq0{LM27_L&*Jv~l1c5sBdR^qGD%`i>7$g)R85k?4W|j0%x2#rcqtU4Ea~ym; zGONZFU~}~WyZyW;07hyyn^H9`2Kqlto$FMHhwN1N*8hN3t0fVy#RxP%dQ{n1s9B8U!7rtL&E2qKO!1& z{bF%#V0EHT`J5gA5S`zOddAVU(WKuLUAhwwzLdnjFZ>sjj5H@at#T&-00003c=M9>jN(gGbY%D`^T#KD?1Ewse~l_Cuw zZQYD9P%teoW0_pcQ(?omWKaG{llJ`1dH&C-YQGeW5Hw7UlWt57KPeB){TrL!7x2#MSI4d)F22;%304?YB)^{qSkCwFfKmXfv~ fOV}fgwJrSwMtOH)-`~a100000NkvXXu0mjf=1US- literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8300ab88c0506d159c27ff1123153cbf465e11 GIT binary patch literal 646 zcmV;10(t$3P)c@;1P@<~A6%E!J%;8YWWablh915Vcx06pA3i zjYW>~aPRaQ5RD{J&4;(PEi(VP@SQ`Y)mcp2YEk`u_x!v?5Jjn2H_wt4^5i8zDl%zM zH${;~)#FU~6&d5Y z?SC-rkyilVvKU;mOfd|A26|*tdpw@#^*ZD6@Z#dP+o6+i@9p_KAgSGM*6UT0Bm({* zn}L9PS~Q#xBi48#7W^6j%F$>5FuhJ^GMQSfMzdL`sM68#!4E9|^pa1{>07*qoM6N<$g57O0RR910 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..1857d0e604ecf3376bf7251520e8226b8e12edd0 GIT binary patch literal 487 zcmV+PuJD_Cj=O-CW(Cv&;O|s_B*HfL9^$RwN(T(+(%YH$uxJ3{C#x&2)~Wwoto(l^%m1wm{|~eOzL|Qv-|YF; zj(>lCW6=Q7bGusn=MojDo|KbXaL&&d~@545`mvfwf?VUg8Jur!u=Tz z@c3as^V7dSzn*VtyIw5tYl#NPKU+ZI_WN4QgIP`xJq(xu2eb$1wi~5_KNhR~U&;D+ zr^v6{)xTcsx--!Uy9Q{ut*yRQF7{)Q>Zd&k?{9DU@&3Zob%k$Fu3*5E3ZAT~yj3Cg zVn^l6^GiP7-~IXK+9#{a81N^xC#x&3HyJ!woc!kO!aHZT>_`!2_)i3Qdvf{HHI)a7 dG`7TX0RU=HaFmEk7ijm6U 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 AdjJ3c literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gif new file mode 100644 index 0000000000000000000000000000000000000000..84c84dbffa0a61882b21d8cf82d402644547811e GIT binary patch literal 1669 zcmZ?wbhEHb6l4%&coxHO^XARKK%d*UZ~OcEFI>3r!i5XBZr!?k`EpfN`NoYK{rvnA z5<>3Zzn_tjv17*$7Z;Z+SFW5owff1EC)clE4-5>PJ$p6_3v)w5!^DXbPoF-$Zr!@3 zrlz}hFGfT}eE$5|$Hyl$H1y%ahgDTod-v|m%*=fA=1qTpe?mfny}iA=yZih1@3(B( zvS`sFCML#t^X5&MFk$D;od*vd6cZDB^ytyPefz4btJ&Gvj~qF&X3d&&=Z?>uIa5hV zsimdG%F621tJ}+$FP}br3J(ttKR-7oC+F0uQ+Ms!_5c5m-rnA`XHUL+_wL!VXQHB_ zFJHc_t*za#VZ-s`#~(j_Y-D7#d-v|x*x1F37oR+NvcJD?@7^_ng1l$WoMB*KIDh{9 z|NsAi4Eg}Y|J)J20SYdOC5b@V#=fE;F*!T6L?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp z&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dgxv3?I3Kh9IdBs*0wn~X9`AMl(KsHEN zUr7P1q$Jx`$q^)>0J76LzbI9~RL?*+*}%*|!OT$4(AdP>++0V&$iUD*-@r)U&`8(N z+{)O<%D_MY3Y37h6{VzE1-ZCE?E>;_l`=|73as??%gf94%8m8%i_-NCEiElUW*8ai z0#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*nV6WAUs__T1av9H3%LbwWAlpjz~0eI z&d=4aNG#Ad)H48i38v837r)ZnT)67ulAu(Cd$Af^98y`3svneEoL^d$oC;K~46>@g z%DE^tu_V7JBtJg~7K#BG`6cd1|nJHE-u9nWOMn>kY#x5>~hOUNAPR_=buI82&22Q3f&K7Pky)OC5rManjB{01y z2)!0K^@0*YZUN9{m(-%nveXo}qWoM1u!pTOal6G7r+HAlDY)HYhEuOT&@uX;Xhn)< zm=G}SfSB+^3*^9)eQF*strr0kHRJz(fB*dc_4CK~Z(qNB{`B#~`*&~Oyngla#q(!R zpFDo_@WK6ickkT3b@RscYgeyazI5@z`EzH_oIZ8(#PMTCj~qU9@WB3kd-v?#wR6Yz zZCkf&-n4PU`gLp9tX{Qp#qwoKmn>eiaKZd}bLY&SHFL)FX;Y_6o-}bne_wA;cUNae zds}Nub5mnOeO+x$bya0Wd0A;maZzDGeqL@)c2;IadRl5qa#CVKd|YfybW~(Scvxsi za8O`?zn`yFMfdYiVkztEs9eD=8|- z%gM?}OG!$Ii;0Q|3keGF^YQXVhLeG(x z$0T~=hN$RJmnc~#sh!Jr?+p_ZVdI-QV^gSu6ElOMC#&f0J;x(12l)iB9XT3l8Fq)k zRY;iO(R7Z;$Y=5le2VO>Z#lR>JmVMEX4;mLu}y(-Qboif8H+{C?o-PIm11@#ojcYm zrRk89VP3e%QiL~dj=;v|WcT98Hk%oX7PxO_Fknu2c)+!xNp)jX!p)PH+b23OSOWmW CC1bb% literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c569a793cf681950bdb6140144525df1bb23d85 GIT binary patch literal 315 zcmZ?wbhEHb)L`IeI3mn&?b@})ix;n5ySBf-|MlzF4<0<&v17-XGiRQp{XcZ*P*qjc z*RNl{o%#QE=KtsA|L?i{zr^q#2-4Eh7>EOkKUo+V7=#&gK*~XOGO+G=pwgF;IWJ?? zIvviv1~y(Lx%Vq<4{?05vO94^P2dXKF$aZm;e$$o9L&F@F0lnL^9oE9;qsaNnYGrT zIqan3CWV~cUQrGPJGiDzGGw{cV6@6KCp%v#ATB`AwS%Ej*gr6&K`4SVA}XdemXj-j zA%?A@DrBOQNp?rxj5bz57C{ECb%F_tCIn6ja9t;~s#9>mdPa7k-CL`-FO4`X#JGPi hSI6eF0i3;t*C!?3@~ygIeEWg!qsLF4sw*;B0{|A|cQXJ0 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gif new file mode 100644 index 0000000000000000000000000000000000000000..faa84d403a9e02ada2aff885634004e37b2c2698 GIT binary patch literal 315 zcmZ?wbhEHb)L`IeI3mpO@#Dt_4<0;u^5oX7TVKC^{qf_+^XJdsy?gih(7)HOUthj_ z`S;1RE6TxO2iLSohAg)l^j4YXWakS7#03btb}&>5`v-ezfXfV0=|`lQ5LzEwAjZ$Hp|^!UkBbwvhi07(IX8UO$Q literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gif new file mode 100755 index 0000000000000000000000000000000000000000..d11a5f00c8529612a30e845c663880f122917c85 GIT binary patch literal 1109 zcmdUuTThw?0ERz=mV$)Tx-eNZ%S=^fjXLJ$I!&ajh04r4lnWPYCn;U&>XL3Y%VKH- zDju8QqzVH^Kr%ou2nyn~U=jJi1JzGKtX7SOsFW%K#ifxjFgm=%+Jq{kB_&twOOrJCX-2{(eU_Kx7$@# zRtAH?G@3ul%fD4B6?8har>9A+mSeHllamvvRJydZq*N+*b~aHcl*a>sAh_~k!EDw) zd*&)EEF=<%!^5VoF5%R#baZ%lh(@D59w!7r4Gr9tl@*;%Ad#@TySptG zwMwPR&(BX!Ppqx2t*)*X3Wect*yEWV8hTqK2f?RQDpjd$_WO52p&+0Cptbd9JU%Wb zC);Gw2n2$T4*o%4AA`a8{Vy{!Gkv~YE|=@``JO+Y>+I|#5Tcv7z^r$5#hbWPV7Z(@BVlkiJURTE)7#Q&T z{bOTe8yg#Lx7%zs-@Z-n=xAdw7=wd@y}i8)3kx_LPOH`GbbS!ya5|j_fq=td@9!Tl z8jV)#U$0(y*4JI(P;g>mf=0VqQ9<6?THf8=m~c9fNF)LQhoCVMiKI|S1A%=G=e}OA zpPHI-I2^01t8%$~dU`q%i2wlbAK%LVdLO+(zyQDkq`j+n_X*%k1gO2(TzrQeT|quW zsA5#2K7d(Xl29xXk99rnQ!G@;x^}7@6@>tF(NP5ak6)%0Ka3VMV(JmhgY}eicmy9o zlit5{O_}vwZq=||L&zX;zG}wb0}Er}=6roG7nAdT{a?@>EKCC9!6J@>^FaeR%X2mVYumuAf?_=6)^s h=lCe;kC2^7#hrc7%efNMl=&1u)6UYV@h}*W^DiFE;70%e literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gif new file mode 100755 index 0000000000000000000000000000000000000000..f1da7718fae4f8369c8bf1749b651e0572a09cc6 GIT binary patch literal 177 zcmZ?wbhEHbjy?gg+X=#1<@WI2wBP1l`=g*&S-@d(i z^=fi*^2w7Yj~zR+|z#z_` z1Cj;V$-t`jpj5CeV_qoB+!d*Tyw#!WPW$BMGCC?(;Gv=gvKT{P_Cy>mNRR`10k;!-o&=-o5+i(W6V3F5SL; z`^JqMSFT+7{rmTmCr|$U`}g$e)1NC;q!GHlTQ2fcl$iN`VpaW6`vXg<; zIw4fIBV*R36rUrS%R*Q*E^-EoOq4ip{m{YjK;TYBO@^&U-U=yAFI>5so1chy Q%CNCc=U@2~v=tQ(+Um@-t5`b^7Kg+*wTnkX)kYMtxKJYvVqC==7BjpmFjTAu zqKFzS3E=8tsR6YM$}q5sR6xY2^Nx5X-p(WIk|wPEFZMpX&+p4idXyLyodXBpz&}P{ zZf47y34_6=r%f|6I*Y}Sm4!b$I}?fc>+7=`jhxHnYBZXqrKSG< z{<^xt_4W0ZmKG9;L?#nhtXd+GI505a?CdNQw(|K+4Gj%uv)*q1u&}UjaIl(?5LZ)E z)7jZsS@|=Y&F1lVsj1NnMwvpPsH)0NOpNgM_6`ULK%>#c#l>*An^Y>LP$(rOB?3Y9 z(a{kKg?j$HQmfUrwz8>IJQC?oqtVD@^6~MpPN&1;u{}LKg@qZ7jg3a5y0`a*Kp>c% zovp1cz~PcBDj3t#Q>Uk=B9V~IF0HF$Lm*&H4LvqCmPE>W_AFH_7T4F;4G#}rTwD|u z7H~M_d_JqZybOUr7>%#Hx&%W*5~Z>~DClb}7E2%yOeRxENYK{S*45QjPEHP){Pgnj z^4>ka?d@#}g?xB;xWB*u>Xq1Lv&m##DJc(}oSf8Zh1L3ACXIC%gc+!Dm9zU z007wS_D}vlgZS4G1OOxO&F9F^PXJIm(E0E|83x-rJBz4Q0DdfCM6< z<0~6Bp*B`cam$5Uv{%#+%PmFC7$eQ!@cx)oJOSbivW3I zF9fRs03CRnTW|BRxju0Liz85F3I41g*CN|TW1!Xn;pJA)3u-YuN1y8aaJqD-y#);Y zv4!?lDpdG9#k@`aFdv%!Ef`XLxqLTw0=!>pCK{EGtbG9x>&LcoXwNOTRHot`>U+nI lh5&s8N{jr-Qvw71eLBpXslfK@x5?>4O?RGT!##of{{is6&GrBQ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gif new file mode 100755 index 0000000000000000000000000000000000000000..0626655100ef0f6e109e3953bd2c25b7762a7f8b GIT binary patch literal 88 zcmZ?wbhEHbYb6N$v}@$uHy z)`*A*JRV6WqNwrU@+|M?ZwA`ClYmacXx+`_#qImuC6YDK%muX zOG`^Z5L{o^Lm&_j506KW(v3zVjYb<7=uj% zdM6a}YHA*zoSaap;OXh9L~drFKR-I1T2PQaH#gVYTSq1n2?WA{+05f{NhEM*XXnO^ zK&@77Z*QNUpLuX_z~OL0LqnaMK4CDP^LUrEdu(>Kw>NTTX3SzaG#HIkDpjSLY-ni6 z&c@f**KKc`5)%_mrhoPNRk2uHTwE|atC^mbDil%-1~oYN*VNQ-OUsL+qYpJTG)8T0 zMMcHV&Q@b%qrvcxmzS4Xt)|l}6A}{I+S)QQQfzH)$HsceVm;L{V?+FwF07~HNk4PUs0U#^@o3x1$#XxU+ z!meKN_(^8%s7y!1UAF>C!|i;O@ff{hnfKIZY1c7ux~G*RdYkVS2v|X37($PzED8(} zh*O)s$#r?14#8#?hCKzJ-Tyok%U`J)cfj1khX)7znow?o7QDbW1p`2ENAaB?Yw{G# zruvz!(s@&ClPc?T2f@+Xe_Dst18Ig~Vuka&fva|mji+v(!cp!w`CQdkDM9&OE;Ir? z>|VZO6#tfgbnunvj`u;>&G|4~bL#tcK7gtJGRa@`9INZ=b#kW!ggT3oc)r$g>bK{a z;{i6;5U89ODIB4D^YTq|ls*A~_&7p5KUgVz?!T?}{XrH6iGf5vA(~bG5;rJ1r;(O? w0B5qky^El^zOJn3@aH3j?E~>qBf~)vOa}M`^AA_)wO`y_Z@IjJLV@r91JG3k)&Kwi literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..c778014544da5a0c6a87c3c7df42dbdd0f5d3fc8 GIT binary patch literal 691 zcmZ?wbhEHb6l4%&coxp^`Sa(qXV1QT`SSPg-|ybNd;IwEy?gh*fB*jJ)29ay9=v_~ z_Sdgp7cX9X{rdIYyLVr`dUfEyfg3k&?Ay2R&Ye5w&!2zs;>D#)m)^X2vth%AD_5@k z`Sa(=lP9}&?YedA)`bffu3x`?`}XZ?*RIW+IrIMg`->MZK6mcij2SaJIy!oKdUovC z@$$us&6_u`UcLI%sS}NjjpxsuTd-ik`}gmE{`|RV)28j)w{>@SA3S()-MV!xEiGHN zY&m@R@W~S=dV71@+S;Bzd$xD)-ppFe*cIdbIq@#9;!Zk;n{&dHM}KYsk!)z$U& z>({4GpMLxH?b)+uO-)Vz{{4IS@ZqCJkAD34@!`XV%agyi+R^D1z-km8;vLB0>Fpls#mXKM#w_Z@z%VJ$-N%p1 z-_Dv#DlAM)Ak>dPgqtUjO~KJbH`p_TRZTj~lO>GDQ!tpro=Hd6)5j)&omXpd2qz~O zBd>v(xR+@F3%5RBn4h;dgHN!M44aonfIhb7}Nu&DJTS} zIy5jzE%BKtzVwI)gFAs*NMMHu43&+AI3R6|YSu#om5|~9b1w0r|Bpx|1 kd2_~ml@kXNTm)Ie1(qZ@G%oJEyW2Nr&W?)@yc8I$0W=ON761SM literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..84c6fa2701caacd05b950306438359bd9fbfb29e GIT binary patch literal 1129 zcmV-v1eW_pNk%w1VG#fk0Qdg@p`oELFeFY&O3BH|VHg;}Wo5#BeRCHVyBXPNPRhi7hS3l9IVzT&z$~ zM@K)3IXQe%O}cGuvQ|}D7#O8lSx^7~S1Bo@qocQ5TcAWlw_94Krl!1LV31Q#wpv=T zRa2x*O(rHCzhq-9;el<0gIy#IsGQoa+pH)>UDIcavMNJqOPfSeR!osCW zM#Xq|!DeQ}jg8*k%K`!dj5;}qE+-5O3A57eEiEmv zRZx~pNk}s@K0Y$Pe}92OJ+xR@wpv)sgM+?mYO=Dj$$)^^x3`WmDMLR$wQg>hJUZH< zqQQZIxLsXuZ*Q|{X{}gT$&QY*S5#jzFoQ)x*Q~5V00380Q;t+oXlPw#IW&epKUpd& zRw*f1Dk{QeW`HFkkyKJxDk-^MT@@7&kTf)+Mn zWYwpqem_0ixVXWIi8BNQu~k%3 zU0q)o7}u+-xo&Q_Tv^9?dez6rX$}s#X=#;2L?a_3v14PiSXQE0S*uS-XJlm3si~h$ zMzdE}RR92dIy$XYRk*mg9UT_LYik7s1-M*Vv2AUqr>C7rNRN+?q)0``wY7mhJ!el$ zpF=}1FffNSF?LKsGBPK0HZ&0t5y+R9r%q0AN=lGILjV8sy<%dbOiZRqO2?3prBY8^ z000000RR90A^8LW00930EC2ui01*HY000R80RPDvfNM>;5|98WlyXi>olyTUeS6j; z)g@cmkSzJc=hQx3@&=?x*G9svC~{;3$?!xK9s|h+wY#!x9;I0#eo%wrtct5xcYIZt zfK6DL58=2dxWLX5BRZfs*;6;e&m1^O@R=xJA<~%!TOQaLh3XiO8*G5-GXx|-0!6IQ zxoIV4&np4s()8L;V8H?eNAi@qmXAg*a00AYQv(Bm3I!UPg>i&I6oC~l1W>?XZW{{} zp)9VpB<0jO)Dg*+pl2pJelED%ge4+oz`ty vBaRA*M1&MGi5`JC@s0=ejKM(@{|o>|4E{togfT`eqDc;903yUa0RaFzE9T7z literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gif new file mode 100755 index 0000000000000000000000000000000000000000..4a1983ae9022e44f398e3a9a0e10b4ac94956f1e GIT binary patch literal 297 zcmZ?wbhEHbH{jaY6KPTt^lPCYL zUj2Xj_WxbG{_oxUKOy12oZNpEmH*Px|KGj)pO*GNB;>z@#D6xn|DvM*g@pb;fBv6` z=YM(me`DkSK)}ENAsJ`~6o0ZXGB7AG=zy#M`H6we%|U>pprb~BsZ}84MvcYf^T#hp zSlP?=eVKeQWLv_@2fsKg4hR`M-?MkZ^@J0N-1pVQm{;ypHWiprnIO&Q&BHGtFD6p2 I;K*PN0Lu?w6951J literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..d31bd9b64e3c86a5eaf0bb647179307f5c21a93b GIT binary patch literal 297 zcmZ?wbhEHb;JD^`~T$0|EEv?|N8a+_FfuSGFzA3R0r`o6&CNmJg+WJ+P)oZ2%ZnO| zDd*KUNLbl(^nGEzXs|6o^WiVUiUX1c&-av0xc=Z&0{49_DW;W@io7B-DidUdyv4+& MH{jaY6KPTt^lPCYL zUj2Xj_WxbG{_oxUKOy12oZNpEmH*Px|KGj)pO*GNB;>z@#D6xn|DvM*g@pb;fBv6` z=YM(me`DkSK)}ENAsJ`~6o0ZXGB7AG=zy#M`H6we&tXD=hmKVL2^Efljv4``qZ>B- zEKr-@zi{K4I;%Nv)EBSpI3L;gUHHQs)%3pTn#j}VCp7=i^V4CA%$1E~V^LsjNSEew Q=HZu+7ZYhyaAdFs04Kp>J^%m! literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..fb2c05fcd423064deaaa9f620c95152ab5eac9c5 GIT binary patch literal 305 zcmZ?wbhEHb;JD^`~T$0|EEv?|N8a+_FfuSGFzA3R0r`o6&Cg*%frpM%{|S{B1|2m* zEyo2e{4CIz@1L-7O`X7;H|&cNJI+ToeNX-{$2h$&`c1^?^HUpt=!KcEMCNitGO{W# VG^EQ4Ig5!)%S#BiDL67%0|2;Adcgny literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gif new file mode 100644 index 0000000000000000000000000000000000000000..afe0104bd6140e76bc00736e4217bf08e6a22e7d GIT binary patch literal 2092 zcmdT_XFwBY7)}(6R9v7|Mdb`=Q6b|PAyEWO02u*6RHRxB$w@*;E+#?1ss+Vrs|9hO zf`b5+rL2IUh%sOSgdquArqGH=F*2%H2fa|y{wV$5_s88gp64Ck`+RpUuFke3`h3)U z)N2{)(W6IRUS7@3&0?{*tE;QLyj(87E0@b-Vq)s*>gwz3b8>RLy}chke27M)Yiepv zoDdck7CwFYw79rfCX=yPEQLamot<5fpWEBpW@NN<`SPV=@fET7nvTwNl}g#$+nbx4 zd;WZ+Mx)8k&*X4?($jAwCMHUyB^4DFE-p?~Dpm91#idK+4o1?xm+E#KlFZ)paE$C7Br+y1KfJjg8ICWfDnBUS96t;FH?g+LV;U zHEWC;8|&V^dpAD*ULXh@7a=&Vr*<|Z*TAG>#I`L*4Njx zwYB;CQw9eI4<9~USy@(En%df`mPjN-;u=Rs%YlIbLqo&b+RCh~Og%l_k>TN{riRhc zVSRo5s;a7nhB~FPA}J}!)s-}Fp1w*|)!*OW(a{kax;G)=a!X4~csS?m*;uu@nnv@8 zjy~<@=jZP3*3{ILoSdAQd4tJhy1BW@WJOU?QCV48QfUEVuV24%aBxs4imqL|+TGn1 zA0HnT#ZxMkt*xz#7A<-+HkOwsX=-YWh=@3OQh5LV{m4k(9lq9s3jH_1mXxJ5=rX=1T7GRg)p2aqK8@VgeH?7sF08$VDm+6 zmsNn_jtmdI)Vvt{ec*Zj zv%aUl{o32}q`RxLqrL5MYfE!eV?(`KRrjd2rn*X5Sy8T#KP)SiJ&@inxmSGmPEq0Q zf_zC{ZccXAt(%z{>1nAqeo0AA5+`22cJ)d^{N+m*<1U;(cQ*D+O!UvEPyO`c$rC>u zk2-cVGUEFqhYx*sFgz^uK!`{v*w2S~++a=+n-#bZVlo2gd-r_1d)GJqJN#@fmfL@pH8!hGG@HD+J0US(>6SqT`g zSia0?>5|1?En2w1&|v<&xpQXg&-zktrtTLrbf!;3qfjf~=pauS%3S+})BY_{Gc~AV z9d0=c^sSA-UzlAv4x9p}$($b;0BD`aQ;Ts5$CnjuCv~UkpvIi?OkLe)ti@lVIykO1 z-y5Jjo!(Q5v06BmG9;G-dQr9*wC+#Tbw=-*jWOH36m525!-~bGw%t|bk(qvTQG*So zG!$y~A#N%4w)twxJyxCB@P(r|Z%U7HdBC&l{@|Wr1#B@>N4_%nTA9 u6BZn3VrJ!VhzL+T+``Ri)pEn&(UC3&J+BaniHgVDC9S1cI29Zm7_0&H=@-WU literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e4c3645b34b46fcc70ba37ae2b7dbab3f8a306e GIT binary patch literal 843 zcmV-R1GM}{Nk%w1VG95Y0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui01E&M00#&t0RPn*NRXhwf&>2@M3`_PLWKn(HjH>s VBE?!34JvdeqJ1t0 OORCzr8Uvlg7_0%j`wztc literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gif new file mode 100755 index 0000000000000000000000000000000000000000..ac3da1476b7823fcdddf0830dc5fbc801870f7c7 GIT binary patch literal 62 zcmZ?wbhEHbUp-6H@0{{R30A^8LW000L7 zEC2ui04M+t0009*c)HyFFv>|^xfs{IiVz+k1{b##hJmIjQJB>#2k8q>a!n8R9px+o fpy#vHQlnB40?ZJXjAjOEaXP70>l4fEb`t|^xfs{IiVz+k1{b##hJmIjQJB>#2k8q>a!n8R9px+o fpy#vHQlnB40?ZJXjAjOEaXP70>l4fEb`tgPW@a)lF#P}jA4uW?ia%Kx85qPEbU+F~ zb~3OUEKu#6c4a~eQ{W0wm(Zhq9fHR0bsS?#@@vw{1Z3qP0hjafQ1x~CU9bab&X J268Z10{|*zJVyWk literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..879f1dac388aedfe9b6217850e1ff5897c0ac8b6 GIT binary patch literal 189 zcmZ?wbhEHbV2y7c?^?_0NS{rmUt>C>mbe*L<5@#23lV88(sf3h$#Fo-kg zfaF1TGO$`bQ0)spI3YQJQPfq)$t7Z~2BUw%+pWnwyAymFIk{pd&p#5e+ksJ?-TZaxEdiUo|Ns9C3}@2P(in&Uia%Kx85l$ubUiwVljVBXR>Exk>BMT+4;_Ff^MbRK9vDMymd^1oc)o}L6Px6 z>`BW0g7%JOF?rF#+=4#w0{lL+l;#-L1vV!x7LJW~G3&}$AJ#8m!Ys(TC7xlsdFA@~ YmS-%jPlYO-z3i)d?fQ+Is)`KO08fZ=vj6}9 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..7d7d00e06212aa364adceaaee2d017fd749cc979 GIT binary patch literal 303 zcmZ?wbhEHb)L`IeI3mLE@#DvL@7_Im^6}QKTPIIGdGO%Dj~_ptKYzYu%dJ0u{`~my z=k@E?moHzwd-vVz*I$9)$&)Al|Noyk^9&F$5CIf_vM@3*h%o4Y)Pn3}U|pl2+Lw|! zFJslZH=275Z2U@c@Baun#PLwsNSY-`ny205*v0_mgDev>j(l7svY1`UL29nU4#8QU zS!*?wu0|NG(m9m`_!qJ{Ydec~Afd}b-lF{}%0PFyS;8}DM)m9ajopV5R>kbO%$!*=t^_46&y WSX!S7RXTgwSNGcW8#h%I8LR<8Hhd-k literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gif new file mode 100755 index 0000000000000000000000000000000000000000..fe1bb0da01c67d7e747a84cac85629a052541dd5 GIT binary patch literal 182 zcmZ?wbhEHbUlLGnT$6EpbtT^Bkw{Ro(yp|1+FnzzP(9vVg^P zKqSac23F$-!HFrIf~O>AsJcdV9+`Hn)KM?`w!@Z7+ZH5$;bP)C@@T2yj7YKenGBOn Oe0h2#+nP8S8LR=;PDG;s literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif new file mode 100755 index 0000000000000000000000000000000000000000..f7f4c2007b0bd1651a3faba0b2028938c07870f7 GIT binary patch literal 183 zcmZ?wbhEHbIfZ|UUu&fS<1lh^J zYLXxvni9!*hGT}Rikh5kdv@>Jk8fYTd-?d)%luZy(%nY1@P3FI;RQM;@gr&5Y#g Tjbxc@qNva=*|v#;k--`OV8&L@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gif new file mode 100755 index 0000000000000000000000000000000000000000..2a94eeb93f43211da015b194db1041875fe809bb GIT binary patch literal 1100 zcmdT@YfoAS0KHUNVbd08tBuxzja{VcqO+T=bDL1KC}ItjIYY9=wk9>Qtc@!0MH7heSbA4^CwY8DMDZ706Qv^XENCCr7>2$h8@(UJ= zU0U)Q48Kbx{FWB3!(rEGG}4})(9lq))9H5Wl*+EYKE>+lA2yqlZha<@$u2AsVNqVvbwrjRaIp& z>7G9qO-?$LO6B?UL^Ao@%F0S)WTeez>g|KzViULO6ygZo8AMY*{&m&+v-3Z>HS zl9Cb{jRrw#9*@`C+pEn>EJUKZT6&3Y*cek%k z>2f)_T<+bw6+=Tq)z!gn*P5G~mX>@blTj=dd%YI9Tr@DikBvR5)9F%DQam2FDd-u+ zI-Ojldb+&)XF|eBzu!-#Qa3j?9FE|y29IZAdU{%|R+p6(%z3Bze7;B|>gf@(*{tpD z?fLn67OQY`b8~ifHZ?W1rKKeh2w1IF004p_$p2Hszeb|~00Pdw&Hwfj044zZI75?P zM?LxC+e3-%HH3SF1JI@6_XsF-_1DMG85mq|eKYO|8Ut)d8SlI+NIWZN3P=YJHDVI8 zYYv8;z^adG8oI98YqCnuY~=W)V%h0ug+wyySIVjM!~Wq!uawNYSbwLuvJ)=+@G$4I zmrK7JD6G*OhkPJm9P;OZFU%smR1Uz=+)b5!IV&l??I=(i>`4V%l zpzppv=1pZ~65;dr+i&T0Jp74{Y|fikLME2@12YSeqny!c^zNHPaAE$dpD6_g{)QSq j_z4rD3r{Z7ojx8%x_UC5ux+v&!{GE+YQwY9XdwMR4>RzF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gif new file mode 100644 index 0000000000000000000000000000000000000000..8dcd7c006291c272c7c41036c707deb3887d6ff2 GIT binary patch literal 1096 zcmZ?wbhEHb6l4%&_`ZqZ{Q2|#{{9&m8N$NC_wV0lWo7m7@UXJ7TDWjwe}DhkvuCBG zqyhuIfFLI)$KKvPB_+kq&dS8ZWXFyj?(Xg_EiL=@?c?O+?CEI_4-b!ti7_`fKYsl9 zg$ow~0|OT=T9licd;9inQBl#<)YRFtXD?f}XywYK8#Zj%zJ2?oNfTRJTMr&Q7#SHZ zDJdBl8Qjp&aP8VP1qJEt+qYO-Swuxe_4IU3nl$O?(F3BQ0ud1r!NI{UE-w1|`g`{5 zynOj`X=#2%Wl2M0bz@^=TwI)uja5@q{rmUttE;OgPMo-S@#0gbj>W~rtX{qH*|TSP zdC7^1iB?vohYlUuxN)Plw%UOM2OJ#ie0+R(czD>@*}1s5R8>`jf`U|46`GowG&D5S z)Ra%2Jh^7gnyjoWb#?X9($coJHW5)#V`IZrtCsKGyLb8Wg}Zm}-nDC2QBje#wUvjb z>x>ywuV24jTU+bsl)%HwJ9+Y?g9rEf`S}P62^kp~g@=b^XJX6AM4)|Ho+Pngh~ zlaneWB;?@WaO1{}&d%x`JGRZ5HEY|pZS3sqB_$bmX4WM)OwZ&hqD|A zFkRMgk(>Fzal`lT5yt<4zLtcWZ>6nPH zlV}nv!-D0ZYyw>}4H`;^r>^!c*mZ)nV98W*PU%&93YoOSbRx2{LT2q=C91&d?eKNS z#UC3dIq9uo5V*wUEvDD^XIIghT}Sv>wW3m`7?y5+e7j$;apB^p7n&p|#c`JF{1I&n z$(AUUQc((OQCMnq_*b*yF=h?{6_ZCB51ySFaH(EE^&;czLn|Dn@dPYLP!LpqsHW6$ aNToZZnQ=$5&6;UvXQipBIcd_QUAuNED=Sr3S0^SW zT3cBJ1qG?9DyXWeUc7j|uC7j7TP-dwX3w5ITwLr?QBfHg8GH8ZbaHZvjEbB;fBsPr zIDG8b;hvs$At9lvs!9(}*X`T4sHrKlv9SdP2J-OoZrr$zmyeH)on1pi!_UvBu&~h1 z&Q3u=Iwd7VQc|*^vHIGzivLMy zhv&?hGYkw2|Ns97lB0l<5K#Qd!pOidg+T{o2q;f5aQtV`%)DTjFzH}3yRv11!i5u! zObl|Kb2t{XGjL2iqGF-2;8=@Ewi1WNhcu>s4u(}SoDOWPt*9n$V!5@gRj!$WhD3 zXQxr5&{U@Yp`4CM506N2*L?V*Dd&7b$&>kj#;oK8)+(lUS%*aog_rQDvWatSU~_S5 OY?4&43gF^kum%8gEG!HF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..ebc745718a3bf0b3ea032d817d0c9ab7f9c55f77 GIT binary patch literal 682 zcmZ?wbhEHb6l4%&coxs_`Sa(?moGnj_^_+1>*>>{Po6xvckf*RBm4Hr#*k;K-398#iv8GiT23-Mj1R>bkqT@87@o3445?&#<^e*E~+qenk|`gH#M`F;ELEnd91y1M%I?b{C@JXo`4&D^TT8b91RMFoZ@)v#@eRhw-w781aOMs6~VahlldI6H(x1VAEg{VA6_?iHKuzjuaGQbdgn*4GuH8z!fJR{ggM*D#StX9`gm3I7U?= zAys|*sHl*)7g*zj7YRHtxR4qlUKg{i;-Q1;fp$G9uBw+xOc)XanK)X{qHY>}*aPgt(nyzj(mIuBy2xv;O8<`jyJ@i&!um%9- C9yqK3 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..1c7ca08350708c8b4b72ad9838822f035120f2f1 GIT binary patch literal 1120 zcmah|`A^z+0R3pcUiGL%!y;O5owMjz=Zwc!Kp}p=90Gm?L98cuw0HzOrgR>dTD5po z*QzOYtDCSz@+j$re}l5A6N$-Y@TmmzVbtMrvGq z0S@56pQk{M#~b+AR#nyE^z>7ulEY+9W7zQU@E{Bq!*DhLTMETee*PGPvDw`{E6AAS za${qo$1%)iv+)2}kw~63HqK=V)^FTcD=GPkkBy?}lWY+uHrk?4jE|3xqR1#p@4+yR zn;S1QSeTK)bi4R4g*wIKbWtc@(rCT>^luc3P8gQq@vH!U48trxn3 zH~|2OpP#F%^OK4SW#HwTT;|v1<@*y8i@CY8nF75?v`|(y04F*)I2feTeXF&VOdg<8 z0|MU5#p4ILObCKX6JsXQ*b7BPECktBsiLAn*VO7C78eKTDGe~J#jvBr^^z^DqrQ@=; zdwNEAw5`5AEsM3-(h^S~OsDhaGBedwvc0_>%imv%pfn0a4#SVrm@Y0Z6Kv+j#xgHB zSO5TuQXL%~LqmOAVq#zb?$cAUA|s75Sx^vRwW_M^N~k#cgO7;B8H{VLC|@opurxG0 z9~#n%(_#2y2)fYJ*f=W?98OJb$Yc-5Nq5qav$KEhu&E1T5sIdSgoI#t{6jvb(P&5{ z(sE(JB#*}l4D|GLdtoxEGdV-4spkB=#)O2Wr6rwCr^2wb^9=M7sdTxra*#?95xgJs z(=AeI763RLj`<03MN+s{T&&e<@p#XTuCC!!dQVT!W?h|upK+kqPjVUSH8tki+V5v( zxNJ58zzoJSh{g9X>~1RU`1ttfXm3xe)$w?hm6c1?)z37Vr}g!Yjt&ghiz6c=s~sJt zYuP6!Cwu+*yWZJ3FBAwPBCK*bkw|P2 zi&y0GYv3GbXJ`NE|4`6hkR1T0fOzgZ{{(P813%Yje$?+c<-PQX@CzgQEqr+TsN>39 z(YN=d7p@jYhCg3T%<;-?WsF&0`Z`(m887fou5-n0Xx5t`oA14XE${kf z2M6J|TiHI!SA`Y};&pieGxiA!-PP4PLYd{%oesR!)_t4=$r|;uk4|pRuke_!A^c%@ z*G9ITJq%5Fj=ZKjOD+Lm8XNV~o0FmMY$?Cmw-FqF+Wee!-K)>sj*oFZ+)8f-z3;2V z$**k-KCY3!MgC4B0b6w6t%QMbLT~L|k=!*Z%kEK8Y<`Tw9$Js{`NBU?G!rOPM=Htg zs;XORB8_jUmrGhxh$Z?xdXnAdTWfn+czN+BCR& literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb41284aaaeaf9d9216a2c7d0bda260e83db8d71 GIT binary patch literal 1087 zcmeH`+fP~t0LBk;Q5JMwSTA4|JCl{BS-N$#Q`d;r7SPV=scAP~rVopYWQldjl%z2v zZSB^Ftq&9jG>VpTk%U-*f;Gtfa=^p%aM?l33b>(2P;q41>Bi{)vG3u__xQ^%`Izi$ zAJ_Ml0cF6x9B?=s3kwTQr_*dUV=x#Zk*L?}gTWwzAYQNc!GmuR1a4|-G8&DKAM*o& zWeBnbgUfzDjH2l9@GzB1X=`g!&CCo94H1cjFbw;AKDAn<(P+ZqaDRWlK)|EZt23F5 z#bTM8(Q$z;;ya+yrJjg9qmI+jYsB@#((ZB=vgg~i3iY<5p7l~hzz zq|<4wR)wOzY&L7L7&x4s_Vz0Zh2r(WfzJmy9543w|H|{CXaHG(bGd(D*xA!_B^pIX zMn<^YzS2@sGPyZ1Ax6<(!(oKW9q@SEOeRyUR>)-IU0q$NR7#~%4Gi3tX^$%IV~b9=L-tf&z=)9_SD2f#w0=yUQPOj$#Nn}KSj$@jp^mDi_lW8K(J$+4({ zJe@28JL<@k)AFnIyU)&Bg#K;(04ZoHVr)LV{C2)}z&lu{k-ittpuc%Z;sA%9^kj z4n1+BrTV0eRnatPr4Ra`KTbWh9!g55YDGLpF1Osp*?)1L7vI;P?~6~yJup6@Bp3(= z{+a@gj*dDyI(Bz=H5$#{-kv}pV6)k$r>8SBGwbW?6bgmQ<fYY&#>U3x=4Mw{*ZBCj%jFUZg)|yXBoakMMU9M%@OZq^($coJHmz2BaB$#s zI%j90{r!C^m8w)KcXoEl%gY-ZYv}+sw&}^PqSeWkV=>fq6GMPL!_C7f|xuT*Bi@jmD&q*ZglamuBvjKvX z27_UF*``*jFP~^M!Lv09$%PYSAF`VgtRngmk)aUua zZqg&hY$;3z!pFb;rPJ-r{0jADZ4TgP@`0bNmt|>I}5wk#-mgeXCCI;|yf+@q% zkNYa%=t)vTQV^K5_I0sdcqap|#_8cL4e0CsVKvBb>^ce4{o*hwx+(j^J8rU3>)~Yi5plJ9zT@x zakBphR;Z2E-gGsT=(k;b8+e;7e!%j1XD7VDu!vW3K7CruAhtV)p8c!;btgB<2fxFR zr$*!-hxK6`NfhBkPBb#|ZhfWgoA?;CJPF%W`KPh*A&w!bcpfl;jxNWcGVpK@D*z9* V*Mr{)kS@dZ#(z@N@m^j);(xAOqequ6U3&if z`OB9tzkU1m;K76M-@o6wb?fQVryoCl{QUXznKNhpg8{=p1I3>#j0_AR3_2i(fZ~LK z{eMFUudl4BFdq|#XSct*B2S2;x0^Q;vlP3Bhre5}s4QP#;M`yzA8%zTPd^q8-e3<^ z&-J1#;@;|0xU7PFgBA7If&~HVx%iycd z9H{KgrXbJC!R7Dj?(gI48{j3u=)t*$%}2{IJZ5Ip~eAz4-X3z6b}Uj z1qKELhDt<%Ffi4prz9jBxqg1DRZ@IVPPJ}s&zP8~Oh=JEK9MyvdP+rX5D=T2o7AJD z$BT=lSy_BKI;^a$Qx+D#adEX-S%*MCt!QXxDJh&lI*v?8nLRp!K0c^iT&rGQ)vBtw zU0hB|O22AqykKC%dV0%~leoCJpGQWnQc$c=O2B=68yggVKt9T$p(7(2!I6>Nw6t+D zGPPV>RsaA51OqTIFvFmrt58i@Dk=;N3GMCe6B7;`92Eov1Ofs9;=#dRIx|xzB||?y zXJlk=Z*PNITB}e>5fKr&US6qCP_=S$yk}>xR8c$t0KkBNd>|jNX=$`;Yobt4qgGa@ zRaC`=g^!PqlsGuAT3U2SLwHU~XBHNhOi6AX9hFE&c0oLeJUp;sVu>v*;KamwdV0fk zb#6L0si~<;M@PbpjMmoFTrV%bb#*N*EtEJjpI1|bM?<>0y02?%xoK&$S67=rJ)fVS zg(@kGPfV^@R;Wx&s!mO+PEN&lch|12oKjG*R8v|I5S~OsxLjP9R8Og9W-%-*e|~;e zEh@ijYmZV;wP0YiVq%6rKcPiGPfSc#Q&V_4Iz2r(tWZ#)PD-v)N+Tm9p+-W&eSMfb zJjZ!?eL_EtP)y38puUxrx^HitMn*gw9JI8w+qATuLPD23Jjk`Rs$ycGL_$yi0KbQa zu2N1_C@5eyGN(&Qu~t=LHZrSFOpP)xrlzJbF)>d{O2C(ws#;bC1_lZW2!caC92^t~ z2nf&5&;S4bA^8LW00930EC2ui01*HY000R80RQa~AZrS$TMr&2NZ{mBsY3q#g*YRE z)E#oa+}!)-4UCW!h7bv$cMeb-II0jJKw@T{3nFXg5{OUe4%i+KB=&PV^j;nC|idbO)j7d7LXo;j(B0lpuv(85rR!Nw}AvVJ;!KGqJRPu zE(;M_0QjH+-4M2M9c{@x~A~a4^j({{#d8JG3Rny8r+H literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gif new file mode 100755 index 0000000000000000000000000000000000000000..9aebb032dc71ca41625bbf47fee7b0d7c5323302 GIT binary patch literal 1109 zcmd_p>rYw-00r>N3RDCuY{scsj8a&1bBnsQ1vZn;W=%_D zgO9~Wn2xm)Uno*}h)hry3>CpS0Y&j%9?C_7P!V=T&~<@gUB~D1 z`}_O1wycpz1VNDb`56+4R9jo)@wlwkRk>USLCa?x4sd2>W?@0a?d>4A@bcx6R4P@egu}zbe!mZfU0&~& zLLm(V{4ZX(x3{T@3^5~sVny95G(&2F&SY$lVA#bOQ(4Ly7Iu&Sy` zC=?ov3!|f>eSLim4fUbWf!pnHI-#PXJcGetHZKhf3>b}*!Jr2O*Lr(<7Z(?!(c{z8 zD1!K%PRpZ5O=|U&%e5K|2Jhbe#%^CaIXN+#XIEAXQ&SQG0p~jFZ81X7hRtRL!HuS- zPrJH05#*0>_;7G=&}3Q`i-!ybtwtl;+_byh?zy=+7K?=-Hm6h9)6)gR*2&3<)>dw3 z=PeM_cXZrhGMTYhRIk_V?d{do(RsWsfuMDKoYUOgOrc!ka=8!$jf{+h!=cBIzf4b0 zZ)|ML&(B|9Uk3mnkw~27|5L_aXcPb_0qXhu^G^Ut37{r7Z8NC@`_UKrtWwbrm*ix8 zHAVz|{iG$CzFqis-EH&5lFZ6axRs)143?Pk0D%#&9bH}cU)*$TRidi^RBn59_IZ(#C#I5M^+xx5}*L(cpvmHQU8klI<9y_E7n zQ|9-B@2ujky*@~^uF%Ud$wiz(A$%{06IbRuz4Fjsa%r3dpsSywvdY@hXyL5STC;wl zFvzsA?%CVxcNpEu2Q^RezbhDu;tK^gd~pgr<6B*6UwLW^YNA5;_q}qiVrSS_nv#o4 zZJ|#RuUyQ1PIxVEB54`h6T1H$Bdzk^yzH5O;uEl({i^!M?jCZsnDI->&;E)F41g?u ck6dTDP8Cb0jc-cn(Xy+6?mmD+p@8@Q1M?o&7ytkO literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..4ab4992a10cf7060d29a72b8490050c14b6c406c GIT binary patch literal 694 zcmZ?wbhEHb6l4%&c;?CQ_3PKmmoLA3`SSVm=lAa2J9X;R#fukz{``6W{{3gqp1phb z?$V`8@87?_b?esY)2Gj!J9qv1^?(2V9XWEOtE=nm*|RTRytr`T!uj*(A3uJ4_3G7| zH*fy>^{c6=>EXkNw{PG6^5x5i4j#fujoKYqNfuI|8r z1GTlad-v`=di3a{M~}XJ`}X?v>!(kjK6vop`}gmkKY#x5PYghoA?yCG&b^aS=P|DfX)FP973Et{%=TEbQz~i#V*^)jc>(Y&}?* z6izHs=QB2E@^CP;bz*dqW^k6bbJa3Z)`0*Xjl|9d~8->5Nu>%um%7L@Crx( literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..7025d20ea0b1518b7ca830f576c77ef8d9ac7b93 GIT binary patch literal 1135 zcmV-#1d#hjNk%w1VG#fk0QdR;tx{5P78ZvrEG#T6yOjY2{~LNUg8c$-pExO8$65fMEA0J2(F$B>ZBlaq!kD!sk29UT`? zOiaIVaga1KNec^;H#UA!P}Qoce^X4FLqpfAtFv8Qz-()$OGjH*RaO81K|wHTEG&>x zQmBTv&5+ZUzPh*4E7h1q4|D0J2t8 z&(F_iWMncjCRi30d@L-%k&#pu7OzxNCnqO!F)>n3O2B=6tW{IASXRP)eWOxR5)u-P zF)_-ap>A$&e^gJHQc_6(08mg!K|w*VR8pc+Qif7evQ|=#JUn3r23J#0m^?IiIyt;y zVZN1>e>^;!R8oLcPP)3fyKiooG_ zVq&FGPOno=xn5p&A|i27PQ77ZX)!UcQ%tzHxUEr7pP!$HKR;S5ED;e5wS0VoCnv#j za9JuUF8~0ON=UC+R;5{4!ftJLARvxJM5Q00960{{R3000000 z0000000000A^8LW008;`EC2ui01*HY000R80QK#8unG$wY6uW0P~gf5J`9BP*^{P* zOFCh;Ea5s;Y=#&VYf3yAmIq9QL}nsHVCQZYws(?lY@_naMv@NWzQrRWB8`h5vb2z^ z_NPz^UGU(TB5;5h2VN@V)rf^E-#s>O+L#M+;1#nfFS5mG0>Vwc7LStIA+UhKf?Lzh zF$p$LT&X}FV9~-sfI*}|i@cD^K~GsXG}p%90S4|_A1lisREj2qh_@%|(CHvCC5i(8 z06GN_V5HTqFC)6t8`Tb3Gf@Q!02mFyK!P2bObl?8i&eM)03;*`V8DO_W4$t27%)d$ zoFxK436Kz=fD!zu&!9xRvG!VijL*$bWBY*@106VNY B#V`N> literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gif new file mode 100755 index 0000000000000000000000000000000000000000..4542432ec8f314da629f445fd09963aaad94ba65 GIT binary patch literal 1105 zcmds$+fP~t0EZ7N1zW9Cx0yDkYZ_}UnKRC1#&&&JyT)phI#DC6g;W=t;*eCk*#;9+ zX))8ePGu<*1w~c_Efp^aDl4EcvD^+E@d#2bUQjLy1vR^539J9czNcTlx8K8ewWuKf zd{r`#4E#9*gu`JF1er``Fc?frOG`{l#9%Ny9?$3VDHJbREY|(|coK=^^?Jv~#wZl5 z&1O?56mGZM;c#qhY(%5c-QC@RfdRQ(URqij2>4AVlgHz+*(}r3(|*7I!iA5XKNmpI zEQiAp3I$%T$K`VE@9+2a_G&a5zuy;$gsQ6v0)gP}-7<-!4+OPzI(>MU2SFyCPTSGZ z!Q;`*W-|ybOiT<}t=jEvkJ0$bYBki?m#?p{uCGIFZ6v8w>hU<2mzNh7q@A73csyP# z?p|G8)@YP=yIrr>na!G5?4QxmQ4*y?(2S#4?9t>ET0))9IASc>VqTMMdY0 zMnghE!sh1Y&dv^--LbS}0l|5-T0Sx|Qd3hiH#cLk=m!U%$z-zJ+|1_YX0ce@)z!sd zJh58MLZL7e3b9yBKA%4`Bkb<}H5^`oVX&#GsjjXJf)qp|5r->YSy^dlz!?nky}hVN zB#Om?FlE# z#>U3_`dXt=pPHHq!;2La<&j8)N~MmCaX?VHwzhWS#Cv-EyxVQVVzGI7c@zo-004u* z5R1j$j{g&<|3)GJUXBs4`(1>TK#{ zKG%2caYk+V^|~aL9(_9b%rWj4NHyYe(mS0){K5Fcalf5y%EuxA^t(q(uf+Y)LZcJN zIe^c9gqDFi>iTKmQ{MtT6Ok`@^ca{$;Tj7$nD?(%pst)j;g54KsRxn$iIZ*CLR4JE zk(8%v&*qF-8Q60~o%ImPI%a<>2-MV%2=FNNe?!A8f z`u_dg(&9o16FT+c$Ua+`D)09yoB|_U+p@ZrrG=tJ}MG?~)};u3Wit^yty9uCD$2_s^Iy zW6z#F@7}#TdGh3m6DN9md$(=d*4^D*TU)zf!-l6%pFVo@=-an%moH!b`0?Y9A3wf- z|Ni;&=O<5|oH=vmKNv6!KA`xMg^_{5k3k3IG*Fx{u>WuH6Y^BD<(CxUX6kl!QQ+}Y zarJN&VHW3PWOVlMRaKJo@|x?*%IYd7&cx2ZE#%9n&$M2ZLCjTo3YV#mr>}ygx33o` zCl8P3B5q?J8DBv=7hg^``4fv|Sk!she4QO!Jl#B%nZ4v(y>%pP#P6BAIJ0_sy0ZyN zsoAqAdUA=Fm_*!Ybm?Sd=jBMakf_Ym$;Vu9z+e+Y1Gln|QC3RRMowWRH5s3Xq6M8B z)O`C)91k5)p4hDFt($1+;COmAYeKF>!;^!PlsWozcD^)p6J~J>kozH7vckPzwv9nz zXNpR|LYJ8uo{k5Y8d~_xWHR`0LStQ A-~a#s literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..15e0aed9a8e917d8f85e13eca9e25e1f838dbaec GIT binary patch literal 1131 zcmV-x1eE(nNk%w1VG#fk0QdO-hb$~oQc}5HT`w;qYAh^q78WclAfTY2p`oF@VPQQ0 z0MeVAY!DE+UR}w_$+})%d@L+1EFqFMHPoY{u~t+=006O7Q@C_;lQ=hLQcG0;0Gd)# zd3kxRQc$i^Qj%0slSW2?Q%(j32Dff)fK*JzczDNoc~nqNR#H!EfGlas%3al(Cls!~#{Vq)OL#7G7Pwp&}LRaD!ww0e4aq)0{8s;aqu ze%Gt3eN#@)&(E`3S+8PZ)yK!dcXxhLQ8P0xykTL9Qc|QyL^?V%0|NqoQBi(WO=uPt zfIU20S5>W1PpnW$A0HU1Vq%?CQoCSay=!E^ac`nbOp7opSXfxJSW_@CFi}iQ|Nr`{ zUS3iF0Kt)wuT)XTkdW1Zn zQjR=4N=iT9-^atCperjNu31@|o13s$RjH||XA29zcy+Z|R^q|ItgNhHU{A1VX@65s z&d$XxEg@MdDw$GJQ2+ob004|IFs)Wpq)0!?lasSuU1t^+xpZ;Lp`n6AL1q#XsZ>+X zn3$DINPa9Vy1Kd;006kSxWmJ^kB^UhQc}WL-_ItLCQK+p=>4n0BgnR7GI;{$AnQ;NVzjnqMD2$_E>2t zC1OtuG-0wKNpR(ofKKc%bpru~Nx6Bp!r=&YMt}ehz6fEM)@V*1K`(0fN${XSg9qLY zNoa9SnK5}^=#9{XO@IX{EADLJp`=eGaZ65I^VBYltQ3jjO#(Khiz6#-HbuEm#1bfQ z_)Os&O$Hw_bqWHYAhzuo0B-jH+?!qC-n$K{;lwH=Y4#cbu<$WZgHMCDbpiNf!6JkK zr49fJP$&R^2DwKr0pr3=l^xsnih=06Qmu%T53Q literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gif new file mode 100755 index 0000000000000000000000000000000000000000..5565cd67d267ffb92fa0253b34ba929d3a5e62d3 GIT binary patch literal 193 zcmZ?wbhEHb5u#s2^M;s4vt{|`+5f7$u}^Sb|Ew*7x(|No)o z|NHv?@9X^kdhq|p<^P}f{eNBc|Gwe>AD90F!CfT=LO}5+3s{K`hy>Zmz-sq^F(Ad$ z@YoLr)h_{zUwMSNeGhxPUNW(?^IUS|vu}$U*Fg`Ddp%nxDa?4`%c9CY>A8ZghqHla NqlSuSqZJIwq4)0>{Q2|x|NsB*-pynn1QdU=fR*TgNRXWjtacBK z0#ZB;kN$8_{Sv_NRX~{A_lURaB@;_K&m~7b`?jcg9gy(2*Ryq!LdOeV7FG61&lOBP QoDDP+15`X4oH-b*0Ywy4f&c&j literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gif new file mode 100755 index 0000000000000000000000000000000000000000..fdf2d8b8005db78c3620f357b5d5149dd4402274 GIT binary patch literal 1117 zcmd5*=}+1R0R2%I9@Sc%8s{{zZm!MNb=CMm(am~G12Q#TXlJdaTScsE-G^4Tsfa?+ zaVj2}0wQx#0~MxOMA3+Npa}XCh2e>!Fyl->!=~|I^uO5q@IJo0ydx8t5f@+N5BLNB zg23wPs>x((Y;2sKp6=@E((CmY48~&FnwpyO@$peAl@5p9VzD3)2%%8ua=D6&i%UvM zFEJM@cjJz?Ci{Lw=XX*udlDy*VivBER2qh3Iu}k z@^Yz^KQ}jLwQi4$j3^X}lapf#rH;*JfuM4BcGh4t^7*uu)>bqcJv215v9V#ZS=nr6 zWo0Fo+h8#0S5{UA2M2q5dj$gK1ju(kUi;Jr2>T0caY<_-RA`vGgC2eo7n$0W0 z!NEa6L29*{&8~pKpc>5>2+pLZr;m>I7Zl{FRH})I36ba*xm=7wA-UW(HkvTE-;kibmfx}@53DI6&UIlK& zJXB6jjzl6EAD5Ms;G9lpcz8GllfdKg@c8>ro}jX`v%7y4(r69TR}?;j3d@v*=0Ea8At}ff#`%9q^-ntd(1_;h(W+K|!S~VJVRaKQx z*bx}$XSW}?!!Vo891gp^z1?VBdhsIP;c(DsKXi9f`un+u4hNn7Gl77QiHR8=9@c87 zN=x&Pj*j~J`b;K+OeWsj+cO#s2E$@YON)nxM@Cc7 zWqB7D7dRZQuCC5zv#?k!CWB$MTFvIo+}zyV-Q9tK*9Qj&&z?PXxz63yHa9oV%*=Ru zdm|8^93DDkGFe7OMq*+j008b4x%q#BYbP)W0D!>Fw|?G!0`PPJLhd4wlmhpF1u%f6 z{ftg85HSY;W~gtB=h+fM)ylz5Mxm2=HDqKn)`GavD+c$)2<>l(ZZUA%%VV pwfOIV=x_Y5M;l?ZedT?SZ+|A5c3AQFnlZ{{YZs3S|HQ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gif new file mode 100755 index 0000000000000000000000000000000000000000..e49fbd73c29915da23e6af95042be61c76d005e2 GIT binary patch literal 1120 zcmcJO=}+1R06>34QM5RZs-=ltXWNw&0fYbvpkDj*(c z72|~jH?6g)%Z@A!YyXJ75AW;y^wQC&tFeSYAQ1R# z6M(^B2n1q%eO)9HIh{@t39HpAaX6gWY+hbo*6Vdfqmf7?R#a5*csve=6A=-yv$NaO z)TC0)=j7z*_4?xC;?U60{r!W~)KsU_m6@3t6BC0*qqnzrz+iBEe0+X>espv+gF$O- zEMHr*4h{~wTzf9p&dSQl>(@tWwOXsy9vvN_P$({!E0sz~q{{B@hOn>@0wKd-(AjLu z-Q5p49C~76Vqsw+5{Vic>pgq+RBUW)Qc@C$RE0z$`}+D!Cav9W-QISTmlr&EK+ew2 zG#Csd5`oKQ#l%FC$<;dDFH1`%HoJ#Tr}y;q3=MT-FxRM53J#Zi^JX3flaY{+AP@*7 z5;2)fcDvube7SDsj8}KcJ>(>oiRNvHyHF&Q`7tVzb!1x=jCM&4-4+zEps?_OG@&U$|dA;D(yF!6i8%DYb&jxp#X_Y(dl%#xw&$=?D+WD;cyfc6+s|gFxV*u zqt#?G*4Nhx1bmrHR$Yyoot+&R7>J9DW3!vzv$yxVPB$l$egEp!p~0{~CYRc5iy#mP z3WWjy;C8#;`~N2VA5RbfYyy`*gg!h0K-|D=VCoxa06aB(2GXHQ?_{Lk{&kXak_oi? zo%Vv-3E>5_VE@k{&72F({g1+)#WwQ4rcjhNR zurn8R6iV_X?#GBg`}Gp%$a>3_Agh^3D-9JP$~>!1gGiPsC@qTrnOfT}E2x52*ll~A zPi~#LR%lh|PxAAGO!ix$!N&RYi=Wl#H<2sB9-p|{DJlZ+aM@tX_sNbDx zUT;fQ2E?u_wo!tT9|PK5KXiRNT@&E-w=x8P3=+DZ>!08L_fPL{&V|+{zxDPXUGwcM zq7V$m&N4;si>Kg?FI#gl)OQILBjB$?!a6TwAuWD1pZu|!KJmyRva9qCg(1G@dU!rh i#5SJ@+=Q@CM2r7Wc!t1(vB~Fn*ExQ^H#|Loxc>ll+5?yX literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..a5d6d7c991c2181a7bea03032c506b6f0e908864 GIT binary patch literal 1115 zcmeIxTThY!0LJkbL3%Azw5en#oL<=0lC>_VSOcb&>oDA$x9PGQyRo*m)`bZH5@J!V zw(YPI$Ei>s=tm`tY6w;`2E84SkQn0$0}RH0B94920MA(2Q_UtizY z*ccA)H8eCBjdKSF2Ll5GUawcLH<-;9iDXzT7O$dU$x4!{M~Iw_7X= z9e?tjomQ)r&u^TcpV#ST$H&JNigArbTTxN5vEg?*U6Yf_si`Tu-F|p@NTboFr>FP# z_m7T_PX7Y_`zH&e>?2?RPzKyQtDSuU08fF~9E`3Ms7t!k2PEgxi1c`ROb>v=Dw)?_ zVDp!;`EY>zT1jCDK3QyW~it<3>WH$!#M;jMl2FF%fF$MkUYGBO!|p__teHpef5PM3F08i z+jcPN+>Q7ZklV!I0T*tM;3!yj3?cds3xg=6#o}2RTnUA*PE4nx5|VRS5wI)h#LVJK z7c%+*Nd9`OP|0ORMG(@7sV&*x;eBs(f@dUJ895WrA}x~#7|Sn~}{b??{loZ~URX8iNt&p-eE@So?G zz9{|q?`NOeJ_kM>c=`LK#ubfQ-)|K>DyVu=_3PiS$a|4Dzuzo*T+;KR=k|}=KmPsr z_y6C;Zx<_`RLEVDv%GG}c9xCv9H;J8-T(jpGn`?dI#B%29pM|G;F4I92&8T7D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBBbrg&Y3=Q-RjPwnSbPdg|jE$@e3>2V1320kUN}5%WiyPD~AkS7Q zqokz3N?*Ucyj-u`STDaQUEk2s(h_8bk&!M?g>G?WUP)qwZeFo6%mkOz;^d;tf|AVq zJOz-6iAnjTCALaHmqNUdTL3pUuUHT49lhlIT>Xl~0)0b01CWucqiS6q^qmz?V9Vygtyua}vbVr6Dx?&9of=H_bbYHVoeYUt=> z;b>uQ0TyvGbTfqMb;(aI%}vcKf$2?w>oqsPsTY(GatnYqyQCInmZhe+73JqDfIV!L ziQ6qMIL(9VO~L6FGgq8?^?{Dj2SqDVG{b~|X$QoFCt4r}p6pZefN8x5n5Y^5|NHyr z_phHnzJL4r<@2YHAKt%v`{wnlmoJ__d-~+@qlXXf-@AL~_N|*Yu3x))1N{AbeZ0LqJ>1<~U7Vd99qjFFZLF;< zEzHeKO^l6z8A?xAM_Wr%LtRZ(MOjHvL0(Q)Mp{ZzLR?H#L|8~rfS-?-hntI&gPo0) zg_((wfkE*n3%In=0g<56j)AT4z(EBUEvbGL=Y<9;N)y`x6kS*v=eaW+&=7LvW7pX< z`$5Q&AlJtvdXyg!YX>H_`2&rgO77>!mh~-e` mW65xh<&l-o;NnsVsf*y|W>TCzhe45%iD_*H10$m&gEauM4C%Q5 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gif new file mode 100755 index 0000000000000000000000000000000000000000..09bb58fd43f6d5fce323eea6198e167f1bcef4f3 GIT binary patch literal 1119 zcmcJO?K9g40LOo+G#2#cd0AH*d9fMOa~4H{R6@j6^ekMLvW1d_qUxboJM$B%21y7* z9}@Lc4=LAKMa0mFj3AMpr!-kgBDT2FdN{l7cDG%|AFq6ckidRZ=MN^Yin2d;2ES zror%1uh-dZ|3*ee-n^MlrBd~JeMLnn2v*kCa!4dnNJvP1ef`nVkxXn1{z7 zceqsAClub1$@+G8-+~}064m1Ic%2Taso@d`gvrTCEY=?mw-X4s6B841`HvnR9u*Z8 zZEbA<0cZw;!RMEV#ckKGr%)&qoldu~F#i0x7zFdu($ccBu30Qw27~e5y?ab1V{mY= ztSq~)udlni)?_jXg~Eh{1dT>>c(~Wu*)=dA$<58(+WNh&u1>3+O-V^otCc}PLBqqt zznx&s$;rKSE3fK!b|w4rW!&Q8qD1mkEEaP(cgbWj4u=y6>W7AgAV`&&$)HfekVs@v zQI6GW-PkbA&CR_!VFQD~L`6l##E{0u#-vi2Ml;>f(Xq6&%;VjC_>k-A>AAVNrBY3k z$s`DZ&}cLWe$(9CTvvBnt9_A?K~t$Fc|6|uco&_1WoBktuV0|iXfm1H!NEbH7*Z;g zy}iBe?(dq-n=LIZI-Q!uV(stmL(p7wbaZQLD}#|~wQi@U)2&tujYidIe%juC-QO?r z^70ai!~_C9KR=(#y|cUf8jB4?AmA)k+Un|(P{=7Q&3^Odt=YWs=#dD8a^2W4tJN>; z?d?}r*HTkcJ32b)bo$7MjL#S3t1GRTKJA90+ zUQ+=5d~a6qci&6g06@y{Ddeh(6!x7LlP|3Iw|I*XH{d9j+ZVe&IP2Ml;2$1L5k`>( zh@Tb7TgJy}zb+rtCS|wS)7^bJer`n9W^{zW+xyQs;SWADnSm*wj|&*W0xKP%DOkYy z5w@>)#x`oi&hLirsrSym8gw+ayQ?6x0ps6G?w%)&6_1{wISsp-tLstDpn}(zm$Hfu zE=omRt$gAlh*0Je0~>g&XAusCjH}lMFFbJ^AVr05!GM|v_Cwg16^uNn$M=ijq=OYg tbK{lIOAHMF{QX`p${!Yf=(%sxqeBVz8>2sJB~!t3FaJSbLc(AG?mw0!{x|>t literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..f58f11114cada2854d69e527367c5c5354bcbc82 GIT binary patch literal 1115 zcmeH`=}*#e0EfQ;IxsbD%rL8IvsGIe7+Yqofoo-3mNi%TD&1Q1rB*L$Z3IYS3d@cy zyb+J#g*Xhusr)1yB8OaZ=@RsVNDKM)P_% zW@l#=3WeM4h9F3*)#>#Hv)R(t*0#UDFA|Lz4D(;V3g_qNeLkPZ;~5?vZf|era(i_; zeMd(}eSN*%?y%Wx0)fEcaIo2Ii^V!JGBPkQKq8S83Z>a>Hkr&lJv~zCv__-la=9BD zK9x$%VzHK&mzhlF`npFT7-?>9{%sKog_TN`Og3Y)*&~st-|w%fsgcWP<#M^xxe|#) zg2CX=zkvVzlLxY5hywu7!MQ(cf0_WupWx8FtP&)Zm4G5Opa?($hovW%V+d{pJ>xMx zd!0=FPENd2`-o4drN9wzSOxB0ri6Jm5vzR3;S@4aMZ3|wO7?Un`t>)=E9~jF35ay0 zFXe;mVBCo#4_;^*IBFUKo3pWWv4EI#37s>uj^hAK#$jZvp`dyyEdzxoW1s(kzl+DA zS(v1c-o&t3CC(p|b228lPN=&VAyR!Z5g_ zSD{oS;(Z?a`Zr9GwKyg1!c{EySvKQ%%K4`n9+OC;C%w#nRN4`r@NrpKHH5=M#4ouI zuWhl5Du@71286tnTmU{D$|Bw7B|_D(^fWcHuDEOlb}s(pZ6qIh%fOc&yI+VToXLVH RFb1H3d^bc)rXvvG$}fi;u$%w@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gif new file mode 100644 index 0000000000000000000000000000000000000000..a93bcfb1419a6df2239639083ef02239b926416a GIT binary patch literal 2150 zcmd^AX+slN6dg3ONsAlQs;xtC7qS6D20~0G35gO41jM*hLNbsD$;2d>XsZN?fQn#1 z&{jhcYo%xxC`iHL0;q^=E>I{4VKG!usI{%#(}@-BhtfaL`{B)dZ_c^PymQ}#@Hhcf z(M(__@U$G5J9k!NV|{aTgP)(DR4R>#hzJY}?C9u#VK_82w6^vFlgW&akFTq%@9F7b zv)NQCH9b9@$K&nVwM(zxk(ZbE;K8WbJlNdaER)GjpFS-R2!exy`}_NAYHIrW`p3t| zo0^)&#>V^l%)PyRN+qgN$?0@Dhr?mBIhB=_`}Z5FtIG=t3jF>3Pn;;WTK}+E23uNM zq|!Kp!GNOZzI~ZVNl7_5IfaFViHS*0PEH942^0#&WGXBvDM1kA$&)8tT{qg=t{II+ zp-`}C)25IRI4v!$y}fbc#;7@ST(h#Wj7CFPSlGjdk9vE1V`F12mJzi&(ZRvNY#!+D z?lBtQvA4%@xm+482s2+_-=U#d(km(|+}zxXi%-HZoy+Cu zbXpv4DxV*E=S~NM!MJ(z)`0^D^7HfQbXt3Rdw2J32qFy(40U#PibPwEA2*GTJ~A3} zD=Vv#ljU7qT?Y?l4-O8+$0OOx%b zr2+t8wOX<9|6m^0>FfF7AWNhXVb37CPAL*6A{sCbNsuXM`0?`>@t{mX!^imXNqi-Y zNM+oeDnzg|EK0mHQB0NK>A_%-4${e$azrBnb@C*I8q(45A_*FYK-k>2O~ixGAeuxP zo?&|d+G4_}3IY8HByTZk6$xBLCXju6u_o{WDI_w9NTLwQ6mPOWU-%z>y1zN3% zL|*3mua4DGJCq195>cbcDlvk=J#C?s5UfH(8dMd9qDd29FnM?xtli*c8Fic|muqk9Rn;Za>ePEU!gAw5COJ%XB z6I>Q5PL?AI%>-BSl1rYHYZHQ8iA821D%o~K!cn1e@L9o-Y|>nq>`DDS=Sn8cg~^$e zOT>~P+K%-f$2_rxX~#BwAzEzlLiUIP)4B>1wVn0PKYsu1*I#~q`qPg;Jo*0dcjIG^ z9*#b^|Lut7-tf@ifVsc#Zg0;w-CbXIcHFsr>t=gfYfJNurt6K@u3l-Vue*Hd;)U9; z&ev3bS#_?m;*0XK&p-S0le1?^KQ1}_(Wwtl7N02kpwM*u*!%AtJyMW=I4{?DC@1@1 z)`9)|GBeWm8q)Tp>Qi>_diR~3J9OIZ$r`n4n-W#XlM=VeqzUneL>woI-SYP4O&d1| z*T<}jjuJ#hgufNW4_&*4#|`1ISum5anjTCG3WTTu{;T|aeJEH%5xl)tu2{Zo>5|2Z zJn}HRT#^-W!rs?wxBl3UH3QS=^adF4+aLT&S6g#DIb0?o}4i zUSzlQ)u|-OvKi?&>=(Kff;HhGvrh_&+@-4*XX>3j@!!WfN7bcgxTYMH@B|*~?0B<# z55>+H$;@@jD+=FJxrFJ3`@oBP`Q*Lk!%IHdaL{>1k)xN_tVIhR6g#xIxKF`Vs1_Th z=-B|JHb5zIwF`!EuG`%J;B1VmV%fYh9^=f)ZJVptAU~`2xaLl xUaqS*XM3*u_I66jUXg?Io2#Msz6-MknyBRq0+!ES+mag%*gM9$kZ?F4@GsHC5SRb} literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gif new file mode 100755 index 0000000000000000000000000000000000000000..922addc5ca6c5a27f4c6776448947662861f2191 GIT binary patch literal 1106 zcmchWTThw?06;%)^}e7^hjeLc)^1@lTeTW=1w{l3sW(uz;HV-ZmnhY^`Cv92DDyIH zkx|7)VO~15n5F8thznB@>(mbf0*bW?DwS5PZu+n;*}~dCvGZ_V&(pa<#HXc~MFCO3 zUrzu6fdGfY$z(DV3gz?psi~=piyFQDH;2P<=g!@&Ef)xa91e%e>=kb_8(0Fw8vc0`MAi&>Xm^^nb z&}=rx#>TSQY%)3D<#M4=NDKy}R4P#@l*KY1A0OlK?9*tJ?(Xi5jrE?M&XJK3nM{U6 zUVjZ5jY>&LVKOT^I_j)etI=q*Sj=&8agB|&4u?H6GgB-U+wBgi^lPnlQmGvC`OdPk zvZPWe7K@&qR#GUGnwrASPH|IH)1yanqfw*LXuV#qTCLsP_1Nv!wY9Z{1%pnfo0`%E z2M33ShR)1P@_5|7J~@p>TUweqJbbBAsqlFG#f$IM*O%<=Jp;ktOG`_;y1Lx%9kY3P zbaYfC`c@*5P^nal#i-Lg*xA|Z@0S!6JwZ zs>*DBoR;>X(`jB^wQ4luZEX!_XJ;Odr>>4iAmHV4xlq`s*XvhSi~s=me7@KIKS}sI z&<_Bf0Eus+Z=L``e1IC)Ui-88$G3m&v)fc7Q9@X)N_gp~?BbxX_!<-tlK}B2O-J8) zg?<187RP~UpY~_XU%e0%m*TWA3R*AUv*k$KALX~@NuIxYsA=+>q+Bk3NEr8I!Grpf z7fAj?rskW0ntytL=RxDNp=I>J-m`E;#9CrULFx@l5+|_({UYJY<0#f!@Ah|6M6fP4 zb(}(FRz$!)qa8uBFYUxgxhoh-2>O2Q-CXFsD_;z_XJg}kImbMYf&u5lBBRsh8SVMk zu!BT)09}yn2NO;A{9&IfsIsYgrzVo%t&pVd+y8#do3$r=4!K%{A-6hDH!eVvLWWrW z5Y+btxKAKx1yWcNo~LiTwueLZE1ectu?Eyt<@SJSfRG~ z;=DyuCwSoy9S#E(L=Kfhk=s|m3*-n;2u*(lR$UH#j)h*x0C2sa984CnqO08jaOz-QM2r=;&x}Zg#spcKd2? zZ}0N*^4i)Om&;|d*&Gf>tyaS@?Dcw?Os2!(6bJ-%yWQjQ_V@SOY&L;FsMTuw`ueom zB@&5bu~=qiW`>7{SuEDk(UH&RTUuK3`~7mcT&L6Vc)X2`jn2-_uC6YZ%gyKW6$*vf zY|&^IR#sN(>+3xpk5Z|UNF*wiy1KfWMxz}Z9PI7wEi5b=jmD9Y5vf$F*BcHG54qeC zI-S0`=`fkh)6>&3ncQqP4-E~u-R_#2nzpvK@$qq^(Igg&TU%Qtk{OXm?DK6i80|8d zOt07Lbo#}`MFxX0KR+)N3I_%T)M|~vV30~>-QC?*tF5PpDH4e&6iR!0ds9glFJnw&al(DH8wWpa5!dX=NcLsc)T%%V%B6bO-xL#udk1ej@H)Jx?C=&(@7?i z_xJZt{sR8
                            ';}} +TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;} +function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();} +else{cancelHide(oMenu);}} +function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}} +function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);} +function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}} +function hide(oMenu){if(!oMenu&¤t)oMenu=current;if(oMenu&¤t==oMenu&&oMenu.isOpen){hideCurrent();}} +function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}} +function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;" +var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;" +return''+sText+''+'';}} +function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();} +Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);} +Accelimation.prototype.stop=function(){Accelimation._remove(this);} +Accelimation.prototype._paint=function(time){if(time= !,... +# where: forbidden pages are those pages that should *not* use +# the particular JavaScript function within the JS event +# specified below. +# $Id: body.def,v 1.2.2.1 2007/01/17 18:43:52 sullrich Exp $ +# +onload=tmenuinit(); !wizard.php \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng/loader.js b/usr/local/www/themes/pfsense_ng/loader.js new file mode 100644 index 000000000..ee215f3aa --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/loader.js @@ -0,0 +1,36 @@ +//'); +} + +document.write(''); + +// jQuery function to define dropdown menu size +jQuery(document).ready(function () { + var hwindow = ''; + hwindow = (jQuery(window).height()-35); + // Force the size dropdown menu + jQuery('#navigation ul li ul').css('max-height', hwindow); +}); +//]]> diff --git a/usr/local/www/themes/pfsense_ng/login.css b/usr/local/www/themes/pfsense_ng/login.css new file mode 100644 index 000000000..f8abdfcb2 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/login.css @@ -0,0 +1,1127 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + +} + +.infoboxnptd2 { + width:100%; + color:white; + background-color:#990000; + padding-right: 10px; +} + +.infoboxnptd { + width:8%; + background-color:#990000; +} + +.infoboxnptable { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnptable2 { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnp { + background-color:#990000; + width:100%; +} + +.infoboxnpimg { + vertical-align:middle; + width:28px; + height:32px; + background-color:#990000; +} + +/* please adjust the bgcolor to be used together with niftycorners! */ +.rtop, .artop { + background-color: #999999; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 250px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 9px; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + margin: 0px auto; + background-position : center 0px; + background-color: #999999; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 810px; + margin: 0px auto; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 102px; + width: 810px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.png') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; + font-size: 14px; + color: #cccccc; + font-weight: bold; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: normal; + font-family: Verdana; + color: #ffffff; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 0px; + margin-top: 0px; + margin-left: 0px; + padding-top: 0px; + width: 810px; + background-color: #ffffff; +} + +#left { + width: 810px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.png') no-repeat; + top: -18px; + left: 0px; + width: 810px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + /* background: url('images/menu.gif') no-repeat; */ + /* width: 693px; */ + position: relative; + top: -25px; + left: 3px; + width: 810px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + /* width: 7.5em; */ + width: 8.77em; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + /* background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #990000; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background-color: #990000; + color: #FFF; +} +#navigation ul li ul li:hover { + background-color: #666666; +} + +#navigation li li a { + display: block; + padding-left: 10px; + padding-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 1; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 8px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + + +#login { +/* background: #cccccc; */ + background-color: transparent; + border: 0px solid #cccccc; + margin: 5em auto; + padding: 0em; + width: 400px; +/* filter:alpha(opacity=60); + -moz-opacity:0.6; + -khtml-opacity: 0.6; + opacity: 0.6; */ +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; +/* background: #ffffff; */ + margin-top: 0; + display: block; + text-indent: -1000px; + height: 400px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ + position: relative; + top: -420px; + left: 70px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; +/* text-indent: 10px; + position: relative; + top: -300px; */ +} + +#login #username, #password { + font-size: 1em; + width: 60%; + padding: 3px; + margin: 0em; +/* text-indent: 10px; + position: relative; + left: 10px; + top: -300px; */ +} + +#login #submit { + font-size: 1em; + font-weight: bold; + text-align: center; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ + position: relative; + top: -20px; + left: 170px; +} + +/* loginerror box follows */ + +#login #inputerrors { + background-color: transparent; + border: 0px solid #666666; + margin: 5em auto; + vertical-align: middle; + padding: 0em; + width: 330px; + height: 50px; + position: relative; + top: -370px; +} \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng/menu.inc b/usr/local/www/themes/pfsense_ng/menu.inc new file mode 100644 index 000000000..ae55e64b5 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/menu.inc @@ -0,0 +1,178 @@ + + All rights reserved. + */ +/* ========================================================================== */ +/* + Originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2004 Manuel Kasper . + 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. + */ +/* ========================================================================== */ + +require("menu.inc"); + +define("TMENU_STUB", " + // set up drop downs anywhere in the body of the page. I think the bottom of the page is better.. + // but you can experiment with effect on loadtime. + if (TransMenu.isSupported()) { + + //================================================================================================== + // create a set of dropdowns + //================================================================================================== + // the first param should always be down, as it is here + // + // The second and third param are the top and left offset positions of the menus from their actuators + // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use + // something like -5, 5 + // + // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner + // of the actuator from which to measure the offset positions above. Here we are saying we want the + // menu to appear directly below the bottom left corner of the actuator + //================================================================================================== + var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft); + + //================================================================================================== + // create a dropdown menu + //================================================================================================== + // the first parameter should be the HTML element which will act actuator for the menu + //================================================================================================== + + @@MENU_DEFINITIONS@@ + + //================================================================================================== + // write drop downs into page + //================================================================================================== + // this method writes all the HTML for the menus into the page with document.write(). It must be + // called within the body of the HTML page. + //================================================================================================== + TransMenu.renderAll(); + } +"); + +class NervecenterMenu extends Menu { + private $menuJScript = "NOT-SET"; + private $menuJScriptEvents = "NOT-SET"; + private $menuID = "NOT-SET"; + + public function __construct($identification = "", $filename = "", Component $c = NULL) { + parent::__construct($identification, $filename, $c); + + $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); + $this->menuID = $id; + + if ($this->hasParent()) { + $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n"; + } + } // end __construct + + public function getMenuID() { + return $this->menuID; + } + + public function setMenuID($myMenuID) { + $this->menuID = $myMenuID; + } + + public function getMenuJScript() { + $childJScript = ""; + foreach ($this->getChildren() as $component) { + $childJScript .= $component->getMenuJScript(); + } + + if (! $this->hasParent()) { + $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB); + } else { + $this->menuJScript .= "\n$childJScript\n"; + } + + return $this->menuJScript; + } + + public function getMenuJScriptEvents() { + return $this->menuJScriptEvents; + } + + public function __toString() { + if (! $this->hasParent()) { + $menuMarkup =<< + @@CHILD_ELEMENTS@@ +
                            + +EOD; + } else { + $name = gettext($this->getID()); + $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); + + $menuMarkup =<<{$name} + @@CHILD_ELEMENTS@@ +EOD; + } + + $childMarkup = ""; + foreach ($this->getChildren() as $component) { + $childMarkup .= $component; + } + + $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup); + + return $menuMarkup; + } +} + +class NervecenterMenuItem extends MenuItem { + private $menuJScript = "NOT-SET"; + private $menuJScriptEvents = "NOT-SET"; + + public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) { + parent::__construct($identification, $filename, $href, $c); + + $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}"; + $name = gettext($this->getID()); + $file = $this->getFile(); + + $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n"); + } + + public function getMenuJScript() { + return $this->menuJScript; + } + + public function getMenuJScriptEvents() { + return $this->menuJScriptEvents; + } + + public function __toString() { + return ""; + } +} + +?> diff --git a/usr/local/www/themes/pfsense_ng/new_tab_menu.css b/usr/local/www/themes/pfsense_ng/new_tab_menu.css new file mode 100644 index 000000000..04c4cf2ea --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/new_tab_menu.css @@ -0,0 +1,101 @@ +/* + new_tab_menu.css + part of pfSense + Copyright (C) 2010-2011 Robert Zelaya + + 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. + + + Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again. + The following code is dependent on new_tab_menu.css and images/new_tab_menu.png. + + + + + + + +*/ + +.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;} + +.newtabmenu li{float:left; margin-right:2px; text-align: center;} +.newtabmenu a:link, .newtabmenu a:visited{ + background:url(images/new_tab_menu.png) right 45px; + color:#ffffff; /* noactive font */ + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + font-weight:bold; + font-size:.9em; + height:20px; + line-height:20px; + text-decoration:none; +} +.newtabmenu a span{ + background:url(images/new_tab_menu.png) left 45px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + height:20px; + margin-right:7px; + padding-left:7px; +} +.newtabmenu a:hover{ + background:url(images/new_tab_menu.png) right 23px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + color:#ffffff; /* hover over font */ +} +.newtabmenu a:hover span{ + background:url(images/new_tab_menu.png) left 23px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ +} + +/* -------------------------------- */ +/* ACTIVE ELEMENTS */ +.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{ + color:#000000; /* active font */ + background:url(images/new_tab_menu.png) right 0 no-repeat; +} +.newtabmenu_active a span, .newtabmenu_active a:hover span{ + background:url(images/new_tab_menu.png) left 0 no-repeat; +} \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng/no_big_logo b/usr/local/www/themes/pfsense_ng/no_big_logo new file mode 100644 index 000000000..6e5c70d7a --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/no_big_logo @@ -0,0 +1 @@ +NO! DONT! \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng/rrdcolors.inc.php b/usr/local/www/themes/pfsense_ng/rrdcolors.inc.php new file mode 100644 index 000000000..52337b9ed --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/rrdcolors.inc.php @@ -0,0 +1,88 @@ + + 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. +*/ + +/* This file is included by the RRD graphing page and sets the colors */ + +/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* 95th Percentile Lines Out, In */ +$colortraffic95 = array('660000', 'FF0000'); + +/* State Table pfrate, pfstates, pfnat, srcip, dstip */ +$colorstates = array('00AA00','990000','0000FF','000000','DD9B00'); + +/* Processor Usage user, nice, system, int, processes */ +$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000'); + +/* Memory Usage active, inact, free, cache, wire */ +$colormemory = array('00AA00','990000','0000FF','666666','DD9B00'); + +/* MBUF Usage current, cache, total, max */ +$colormbuf = array('0080FF','00E344','FF0000','000000'); + +/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */ +$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */ +$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000'); +/* Quality Graph Loss */ +$colorqualityloss = 'ee0000'; + +/* Wireless Graph SNR, Rate, Channel*/ +/* Cellular Graph RSSI, */ +$colorwireless = array('333333','a83c3c','999999'); + +/* SPAMD Times min area, avg area, max area, Time line */ +$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066'); +/* SPAMD Connections max area, min area, min line, max line, avg line */ +$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600'); + +/* OpenVPN Users Online Users */ +$colorvpnusers = array('990000'); + +/* Captive Portal Total Users Total Users */ +/* Captive Portal Concurrent Concurrent Users */ +$colorcaptiveportalusers = array('990000'); + +?> diff --git a/usr/local/www/themes/pfsense_ng/styles/menustyles.css b/usr/local/www/themes/pfsense_ng/styles/menustyles.css new file mode 100644 index 000000000..06b3c7af5 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/styles/menustyles.css @@ -0,0 +1,44 @@ +#navigation { + /* border:1px solid black; */ + width: 98%; + vertical-align: middle; + height: 16px; + padding-top: 4px; + } + +#menu { + /* background: #990000; */ + /* border-bottom:1px solid white; */ + padding: 0 0 0 0; + width: 98%; + vertical-align: middle; + height: 16px; + } +#menu a { + padding: 2px 28px 4px 28px; + text-decoration: none; + font-weight: bold; + font-size: 1.0em; + color: #FFFFFF; + width: 08%; + height: 16px; + } +#menu a.hover { + background: #AF2020; + } +#menu span { + display: none; + } + +#subnav { + font-size: 10px; + margin-bottom: 2em; + } +#subnav a { + color: #FF0000; /* #FB3B00; */ + margin-right: 1em; + } +#subnav span { + color: silver; + margin-right: 1em; + } diff --git a/usr/local/www/themes/pfsense_ng/styles/transmenu.css b/usr/local/www/themes/pfsense_ng/styles/transmenu.css new file mode 100644 index 000000000..f68357434 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/styles/transmenu.css @@ -0,0 +1,75 @@ +/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */ +.transMenu { + position:absolute; + overflow:hidden; + left:-1000px; + top:-1000px; + } + +/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */ +.transMenu .content { + position:absolute; + } + +/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */ +.transMenu .items { + position:relative; + left:0px; top:0px; + z-index:2; + } + +.transMenu.top .items { + border-top:none; + } + +/* each TR.item is one menu item */ +.transMenu .item { + color: #FFFFFF; /* #336; */ + font-size: 1.1em; + font-weight: normal; + font-family:sans-serif; + text-decoration:none; + /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */ + border:none; + cursor:pointer; + cursor:hand; + } + +/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */ +/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */ +.transMenu .background { + position:absolute; + left:0px; top:0px; + z-index:1; + -moz-opacity:.8; + filter:alpha(opacity=80); + } + +/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */ +.transMenu .shadowRight { + position:absolute; + z-index:3; + top:3px; width:2px; + -moz-opacity:.4; + filter:alpha(opacity=40); + } + +/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */ +.transMenu .shadowBottom { + position:absolute; + z-index:1; + left:3px; height:2px; + -moz-opacity:.4; + filter:alpha(opacity=40); + } + +/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */ +.transMenu .item.hover { + background:#fdfdfd; + color:black; + } + +/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */ +.transMenu .item img { + margin-left:10px; + } \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng/wizard.css b/usr/local/www/themes/pfsense_ng/wizard.css new file mode 100644 index 000000000..f2c9f3e48 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/wizard.css @@ -0,0 +1,1117 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + +} + +.nowrap { white-space: nowrap; } + +/* please adjust the bgcolor to be used together with niftycorners! */ +.rtop, .artop { + background-color: #999999; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 250px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 9px; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + margin: 0px auto; + /* background: url('images/background.png') no-repeat; */ + background-position : center 0px; + background-color: #999999; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 810px; + margin: 0px auto; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 102px; + width: 810px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.png') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; + font-size: 14px; + color: #cccccc; + font-weight: bold; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: normal; + font-family: Verdana; + color: #ffffff; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 0px; + margin-top: 0px; + margin-left: 0px; + padding-top: 0px; + width: 810px; + background-color: #ffffff; +} + +#left { + width: 810px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.png') no-repeat; + top: -18px; + left: 0px; + width: 810px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + /* background: url('images/menu.gif') no-repeat; */ + /* width: 693px; */ + position: relative; + top: -25px; + left: 3px; + width: 810px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + /* width: 7.5em; */ + width: 8.77em; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + /* background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #990000; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background-color: #990000; + color: #FFF; +} +#navigation ul li ul li:hover { + background-color: #666666; +} + +#navigation li li a { + display: block; + padding-left: 10px; + padding-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 1; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 8px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + +#login { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 340px; +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; + margin-top: 0; + display: block; + text-indent: -1000px; + height: 50px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login #username, #password { + font-size: 1em; + width: 60%; + padding: 3px; + margin: 0em; +} + +#login #submit { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +.infobox { + width:100%; +} + +.infoboxsave { + padding-right: 10px; +} + +.infoboxnptd2 { + width:100%; + color:white; + background-color:#990000; + padding-right: 10px; +} + +.infoboxnptd { + width:8%; + background-color:#990000; +} + +.infoboxnptable { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnptable2 { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnp { + background-color:#990000; + width:100%; +} + +.infoboxnpimg { + vertical-align:middle; + width:28px; + height:32px; + background-color:#990000; +} + +.inputerrorsleft { + background-color: #990000; + width: 36px; +} + +.inputerrorsright { + background-color: #FFD9D1; + color: #000000; + font-size: 11px; + padding-left: 8px; + padding-top: 6px; +} diff --git a/usr/local/www/themes/pfsense_ng_fs/all.css b/usr/local/www/themes/pfsense_ng_fs/all.css new file mode 100644 index 000000000..dd66eecbf --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/all.css @@ -0,0 +1,1375 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, sans-serif; + font-size: 0.9em; + +} + +.nowrap { white-space: nowrap; } + +.addgatewaybox { + background-color: #990000; + border-style: none none none none; + width: 225px; +} + +.infobox { + width:100%; +} + +.infoboxsave { + padding-right: 10px; +} + +.infoboxnptd2 { + width:100%; + color:white; + background-color:#990000; + padding-right: 10px; +} + +.infoboxnptd { + width:8%; + background-color:#990000; +} + +.infoboxnptable { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnptable2 { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnp { + background-color:#990000; + width:100%; +} + +.infoboxnpimg { + vertical-align:middle; + width:28px; + height:32px; + background-color:#990000; +} + +.inputerrorsleft { + background-color: #990000; + width: 36px; +} + +.inputerrorsright { + background-color: #FFD9D1; + color: #000000; + font-size: 11px; + padding-left: 8px; + padding-top: 6px; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 220px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 11px; + font-family: "Trebuchet MS", sans-serif; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +a:link { + color: #550000; +} + +a:visited { + color: #550000; +} + +a:active { + color: #550000; +} + +a:hover { + color: #550000; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* style of disabled formelements */ +#wrap div {margin:1em 0} +[disabled] { + color:#666666; + background:#eeeeee; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 40px; + width: 810px; + position: fixed; + left: 0; + margin-bottom: 5px; + z-index: 2; + top: 0; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 40px; + width: 80px; + left: 0px; + top:0px; + float: left; +} +#header-left #status-link { + position: relative; + top: 0px; + left: 0px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 30px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +/* for forcing an alert run the following command from diagnostics>command, php command: +file_notice("blah", "blah blah...testing my new theme..."); +*/ + +#header-right .container .right #alerts { + position: fixed; + background: url('images/alert_bgr.png') no-repeat; + height: 40px; + width: 400px; + top: 0px; + left: 810px; + z-index: 2; + padding-top: 1px; + padding-left: 10px; + margin: 0px; +} + +#header-right .container .right #hostname { + position: fixed; + background: url('images/hostname.png') no-repeat; + height: 40px; + width: 400px; + z-index: 1; + padding-right: 5px; + margin: 0px; + top: 0px; + left: 810px; + font-size: 12px; + color: #000000; + font-weight: bold; + padding-left: 40px; + padding-top: 2px; + text-align: left; +} + + + + +table#marquee { + position: relative; + top: -4px; + left: 15px; + border: 0; + padding: 0; + margin: 0; + width: 350px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { +/* font-size: 1.18em; + font-weight: normal; + font-family: Verdana; + color: #ffffff; */ + font-size: 12px; + font-weight: normal; + font-style: italic; + color: #000000; + padding-left: 30px; + padding-top: 2px; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 330px; + height: 16px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + +#content { + padding-top: 50px; + padding-right: 40px; + padding-left: 40px; +} + + +/* try to abuse left as a fadeout at the end of the page */ +#left { + width: 810px; + height: 1px; +} + +#right { + padding: 10px; + margin-bottom: 30px; + font-size: 12px; + font-weight: 200; + line-height: 12px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +#footer { + text-align: center; +} +#footer p { + padding: 0px; + margin: 0px; + +} + +/* Style the List */ +#navigation { + position: fixed; + top: 0px; + left: 100px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; + margin-left: 10px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + padding-right: 20px; + top: 0px; +} + +/* Text mainmenubar */ +#navigation ul li div { + background-image: url(images/mainmenu-right.gif); + background-position: 2% 50%; + background-repeat: no-repeat; + padding-top:0px; + font-size: 12px; + font-weight: normal; + color: #ffffff; + text-align: left; + padding-left: 13px; + height: 13px; +} + +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + font-weight: normal; + margin-top: 1px; + padding-top: 5px; + background: #850000; + border: 0px; + /* transparent */ + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=95); + -moz-opacity: 0.95; + -khtml-opacity: 0.95; + opacity: 0.95; + /* borders */ + border-bottom-right-radius: 0px; + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; + border-top-right-radius: 6px; + /* Mozilla */ + -moz-border-radius-bottomright: 0px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-topleft: 6px; + /* WebKit */ + -webkit-border-bottom-right-radius: 0px; + -webkit-border-bottom-left-radius: 6px; + -webkit-border-top-right-radius: 6px; + -webkit-border-top-left-radius: 6px; + /* Shadow Effect */ + box-shadow: 5px 5px 10px #000000; + -webkit-box-shadow: 5px 5px 10px #000000; + -moz-box-shadow: 5px 5px 10px #000000; + /* Vertical menu max size */ + /* max-height: 259px; / + /* Horizontal menu max size */ + max-width: 128px; + overflow-x: hidden; + overflow-y: auto; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; + background-image: url(images/mainmenu-down.gif); + background-position: 5% 50%; + background-repeat: no-repeat; +} + +#navigation ul li { + background-color: transparent; + color: #000000; +} +/* dropdownmenu */ +#navigation ul li ul li { + border: 0px solid #850000; + width: 128px; + height: 1.6em; + line-height: 1.6em; + background-color: #850000; + /* borders */ + border-bottom-right-radius: 0px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + /* Mozilla */ + -moz-border-radius-bottomright: 0px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-topleft: 3px; + /* WebKit */ + -webkit-border-bottom-right-radius: 0px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-top-left-radius: 3px; +} +/* last element in dropdown menu*/ +#navigation ul li ul li:last-child { + margin-bottom: 5px; +} +#navigation ul li ul li:hover { + margin-left: 5px; + background-color: #666666; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=95); + -moz-opacity: 0.95; + -khtml-opacity: 0.95; + opacity: 0.95; +} + +/* textcolor in dropdownmenu */ +#navigation li li a { + display: block; + padding-left: 8px; + padding-right: 8px; + color: #ffffff; + font-size: 11px; + font-weight: normal; + text-align: left; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { +} +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 1; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; + background-color: transparent; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listrborder { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-left: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + color: #FFFFFF; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} + +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #DDDDDD; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + +/* style of disabled formelements */ +[disabled] { + color:#666666; + background:#eeeeee; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 6px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; + +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + +#login { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 340px; +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; + margin-top: 0; + display: block; + text-indent: -1000px; + height: 50px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login #username, #password, #password2 { + font-size: small; + width: 60%; + padding-left: 19px; + padding: 3px; + margin: 0em; +} + +#login #submit { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +/* Widget CSS */ +.widgetsubheader { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #B1B1B1; + padding-right: 6px; + padding-left: 6px; + color: #000000; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.widgetheader { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.widgetdiv{ + margin:5px; + padding: 5px; + background:#CCCCCC; +} +.widgetconfigdiv{ + background:#BBBBBB; + font-size: 11px; + color: #000000; + padding-right: 5px; + padding-left: 5px; + padding-top: 5px; + padding-bottom: 5px; +} + +div#log div.log-entry-mini { + clear: both; +} + +div#log div.log-entry-mini span { + padding: 2px 2px 2px 2px; + padding-left: 6px; +} + +div#log span.log-action-mini-header, +div#log span.log-time-mini-header, +div#log span.log-interface-mini-header, +div#log span.log-source-mini-header, +div#log span.log-destination-mini-header, +div#log span.log-protocol-mini-header { + float: left; + text-align: left; + background-color: #B1B1B1; + font-size: 12px; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-action-mini, +div#log span.log-time-mini, +div#log span.log-interface-mini, +div#log span.log-source-mini, +div#log span.log-destination-mini, +div#log span.log-protocol-mini { + float: left; + text-align: left; + background-color: #FFFFFF; + font-size: 11px; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-action-mini, +div#log span.log-action-mini-header { + width: 6%; +} + +div#log span.log-time-mini, +div#log span.log-time-mini-header { + width: 19%; +} + +div#log span.log-interface-mini, +div#log span.log-interface-mini-header { + width: 8%; +} + +div#log span.log-source-mini, +div#log span.log-source-mini-header { + width: 23%; +} + +div#log span.log-destination-mini, +div#log span.log-destination-mini-header { + width: 31%; +} + +div#log span.log-protocol-mini, +div#log span.log-protocol-mini-header { + width: 8%; + border-right: 1px solid #999; +} + +/* Sortable tables */ +table.sortable thead { + cursor: default; + /* background-color: #EEEEEE; this causing light gray rectangles to the right of many tables in gui */ + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} + +/*thermal_sensors widget styles*/ + +.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; } +.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; } +.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px; + background-color: LimeGreen; + border-top-width: 2px; border-top-color: Lime; + border-left-width: 0px; + border-right-width: 0px; + border-bottom-width: 2px; border-bottom-color: Green; +} +.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; } +.thermalSensorText { float: left; height: 20px; top: 3px; } +.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;} + +.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; } +.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; } + +.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; } + +.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; } + +/* widget textarea styles - full width */ +.textarea_widget { + width: 100%; + resize:vertical; + -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */ + -moz-box-sizing: border-box; /* Firefox, other Gecko */ + box-sizing: border-box; /* IE 8+ */ +} diff --git a/usr/local/www/themes/pfsense_ng_fs/apple-touch-icon.png b/usr/local/www/themes/pfsense_ng_fs/apple-touch-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..7a4b9759dd3bb1f6117c5eea8fb7c61989ac8632 GIT binary patch literal 4068 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 diff --git a/usr/local/www/themes/pfsense_ng_fs/favicon.ico b/usr/local/www/themes/pfsense_ng_fs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3440bf24d471f1210668aea9634a4c4571a8874a GIT binary patch literal 1406 zcmeH{uTMfz6vsaxzaBgg6a-Ouh#SMr5l9qfU1$um$ zjmKm9{XWCtkXEZjAP}HjE>o-3C>D#v<8hkJCWS%)MNvp35)1|dDwPL1oeueYo^JP< zZ1#?JdxEB2lgs5urBXy95$X9vsdP`H@klaxLnd>}bULM4t?u3+wYnIxPh!F0)-VD4Wb{60%sa=`{Y>*D-u(@Y#a*H^J*1qcNOI-KG33 Ub|^T7E5XGPj7;!y2KxBE0oZy=+W-In literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/graphlink.css b/usr/local/www/themes/pfsense_ng_fs/graphlink.css new file mode 100644 index 000000000..521059e4a --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/graphlink.css @@ -0,0 +1,43 @@ +/******************************************************************************* + $Id: graphlink.css,v 1.2.2.1 2007/01/17 18:43:30 sullrich Exp $ + + This file is part of the GraphLink software. + GraphLink is distributed under the MIT License. + Copyright (C) 2005-2006 Max Khitrov +*******************************************************************************/ + +/** + * Defines the background image used for the graph, as well as the actual data + * locations. + * Use padding-left and padding-top to align the data area correctly with your + * background image. + * Width and height should same as the dimensions of the image, minus the + * padding values in both directions. + */ +div.GraphLink { + width: 212px; + height: 60px; + padding-left: 38px; + padding-top: 10px; + background-image: url(/themes/nervecenter/images/misc/graph.png); + overflow: hidden; +} + +/** + * Defines the data display area. Modify to fit your background image. + */ +div.GraphLinkData { + width: 200px; + height: 50px; + overflow: hidden; +} + +/** + * Defines the look of one bar. Nothing to change here other than the color. + */ +span.GraphLinkBar { + background-color: #990000; + height: 100%; + float: left; + overflow: hidden; +} diff --git a/usr/local/www/themes/pfsense_ng_fs/images/alert_bgr.png b/usr/local/www/themes/pfsense_ng_fs/images/alert_bgr.png new file mode 100755 index 0000000000000000000000000000000000000000..5a8ac81b76e4d5022477b65c988b77ca90863eac GIT binary patch literal 2483 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 O0000~?z3eeXH{bI$v}pVu}_X7bE4^UVB~ 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 M8a|`p!~Fjy0Gcf+$p8QV literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/footer.png b/usr/local/www/themes/pfsense_ng_fs/images/footer.png new file mode 100755 index 0000000000000000000000000000000000000000..b10002b0ee4fdb9bd9c6310166cc06b961772972 GIT binary patch literal 2956 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 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/header.png b/usr/local/www/themes/pfsense_ng_fs/images/header.png new file mode 100755 index 0000000000000000000000000000000000000000..6f8128ca72793b956ef27a198672ce3d6e40d95b GIT binary patch literal 4994 zcmX|Fc|4SD7w)ZOvNiU7nK9O~WzE`*(HKjEWH-XdzV8jA7>q3jWh3HbQoH@gY)P((5%u536vkp#Qy6j9soVh4EWIB5L=$vRvos4K(h~o!Y zQMX?-pk9>+D)+(9j8Zs08*p1w;MS^P`@&RU#CV?`WRj`xA$8QM!%<4MgR8{ z9vGnyV177tea&Xe&)?rWRUNlVp}ZX!Fmrczui#bovcTaQ44($Y3i;LaAF_M$9gQa%K1?^&e zgdtF9Yip~Sg$37WY8Roz=0ixYm6g@f!jEEOKJUiEpd2~Jm@iMR$)m%Hv}Bc1we7%m zVRL9SI+vZDy|t>au<#Jp8FFj}TzT>0#SSjw_%Jw!cj7x6FCYIE-Sfn1$PCB-^noQJ z0Yoj#>xPC2X`A=J=<^cre!{_{jEr{r2X%fk@%&o2v7prn&%nUI!`_yn+VI{s>g2QdJ$jBSZ_CTeGhuq`teV4{Th#BUc8U;D(?pMGfJ1;?r{_tUS|wKR zx&$H)*2SN8i1{Cm{C2^C)8iYV-i<0*Q-wY#?q)}jDYwI}~wwd%LM_J~^9wCHZ zGi)emd4zp5XzYWZ-9i~sF_fQSbv2oZ2wIV-Q?%qR zg3dPOeqt572?uGrOoU7)iHGWP6E)yW669cTBq?$Fsa)E%0R0siXTA!!mEO>%d>$-5s#@ZcT5MX*{^9C(w$i z@)%}`UU(WjQP!h%tWGyj8@TxEI#nZd1H;DEAZ)Zf9&E>kgs^fK9L|3)+MgkWx^8cL zmO=b;u-1HOTAjfCL<6hT#mS5$6MTVsZ5Yq{q;cPN{;IIu4X!v6fw5p~z9?@35_l4z zm6N#rFGqWer8~-pxgo#ehM4T(E7H;HrK^+Pw)Rgo;>a_P(k*Z+n?lx zB8N-jbj5mFH=WO|Mh6p~fG646#*z4M&+)mU@eB(>$UmOcB1NCinF@8o?apMpHwV^0 z*Qz{6@17|1A$;up4|1u+<>p2jNVoQZySMnGF3Y(&hE+7+{*dWp3Jlo8C zElC~x1VF^6XS!KLEPqI zM}xHg57D))D$lN}dCTU~*$fuw;7kUis28>v8UyFzJ$t!m^*VmLbdOcmOcfJK1HNnxRj<9GZz((cs zy{p_|DN1tnyR8%v)&$Szf+nWBN1G&2(s^k+A){pNzxT%)~z-=^> zD$Z39OAej6IaC+yozB1Y1%%cmt%|7o{JgHN8R?Q&WKcerB9}QhcOzSKmz)-2&>D3~ zlS|l>0680-3Bn6l>I)7qg`p7R1Phjn27-=LkFM{+xhzq&s1iD!Hl6qHM+HbF61v0v zYagBx973w*3kwH$N7!gVD1h6U5;yApG@;$0UJ9H)o1uC9^bnhcrLDj8 zDiaMCGrSU_&2G{LaIa-16U&v_Cn6^AN?G5H<};LYemE058L!e+P|)PpWL06yx=p;H z_1Hm$(!Lj}j7S!E7n+aSdl`3@cS!qX1??%VPlNII-wN415d-kWG&uJNU}v+O9WY7H zg@NpS*UaD8a0^EQ1bVA#YiqgKF+IF~ak4D-aM=^Go{VS^Vn)!l%F@Pu9~>NPH@!&$ zmQfW<;v3c1KAtnXefx*q2T>{CFtIL*L>{SjBW|rw*e5GIZ1T=*_<%C|dT~i5-&bu0 z_fC3uPsX!je7TDYj>*GILhaqnn?*fWyMqi5zN&FuY=hYLU#^m_$Vtv#qkH~`3;=Ro zFiNx&;e5kd6TPt)VaQmB#!~ooMP;P|2M!d8Smz)!Au)oW+ltI;=aZ*Jhm>{GlPQ8= zN~=2%(vl{pVwW7Xz$~h@^=X@vC61)!8SeSfyZe)><)z438ZV$kd^1Kbk3L7xG*7~> zgxF(gU1ib!klzf5QJy;prKc~S6>@Q|_O4EYnj}PVJ(foE&FR>jz#S2V(2tGW$Grg= z_Z+@K!UH{ud>J1ES z&2t%+SR0~SR|5>r;=AF(<469XKi{5Dbsv0_bZFC`nXKpwdajv~z}Aa^vrWPEvIghw z*u?jdoTQ{|(8K-5TPR4na~2P#T0C*Q#y#VUxcFOjx=;Os)@ZIe3BbrZnTEFyh3cy8 zn}uq4Jq>k#8NK?~m7-nwXuEkh25lfJZ)G>v2eLF77phNc)w$bxW$xv6POcm%u* zC_s+y5a688hqG%q=t77`t`{9_zFs3Srufy~`E(Y$-pV;W34nx$8KOxdQh4c`R2`$? zMT-0SVHmnlK|Z`cT2>yWd%QW<(>_U2)9CO)d%kAp({L-)(NPj9Q9j<730Z<8LaJ6~ zKGW(*A*@*&g*$|wYU^Ti^Adh(B)pbUwMb!Uq7qsEy22Y6MJO6=&t?pAYZoJG%RKqz z&>9XWtilhtdXkGf42UHD#xfLBim(Zc_^fWVL2ZTKz?}B?bCAtgn1Re)?Rd$^d1Eb3 zSV8=}=Fzx_^rq&f!V^tTb0&dG=`E8BpPsUwf8+Pt?J|SO2=@wSP>_{*ND%&ta)+ar zOWJaFCTG^xw8Yi*NaYXKeJ+=qCvzpUC)8dB7@soZd%Ao<4lO=H5~uNclPtmZ#r3@! z{G&&Yj8_QMQ09!I&L)k$dl4B55980YeN9|&68QcTHrH-;KY?RA{9(Sy4Gj^cTY%{@ zUTDX?e~YJ$nJ8DvIuCpzR%X8p+#?eLQ#P^ymYQ>yM1PdGlt4(-01X&b+5j?k+@f61gQ| z796={A{~-*%;-!03bAvwX6DZP_EO9C(vmn6AJOFSN6>rvvpuVM{*{VS)>T*HL93Fi zxNW@>IBovGg;ha=qJ+Oll1}P&7FY*&6k8JX{2VQJL3R;6qw_2?a`4|Iz z!9~xEkpcC>;%nCU%uE3 zbU8$m-dV(iIiOPU#H$!BciBQvaCS@i0zNARh3xfT9cYo`%F8wP()9mOEJzd$U{=M@ z+27k5c3$3JZLH4D&gP=o6whCkfW%ijw8n>+(lD3iZ;67n;K#XP8=c~r9jw2|(Vi(+ zq`~fq2zYP8fI9V?wsDC{eB@av_$ctoK-((Ghs79kWuP^9qy`AaQSB;SjBVsypQsBO zYm|~yvE!xswX3*mm_E`wK$fV|){zR; z!~^r0B5rxkS%D+@r)p1xh`a~EpY{Rkkhw3)lYGWkfg)gA0$=$Jb^|g^9CR-wZ)0Oa z+y_p6-=o-HgT;l>IPU(l0dGqIuZ6m3_osj_OXJ7H{5pasKLaXtgqTf7>OO*D#vORjrK$8oRJYJLpbbT|UT+J!$dATBN~N%%nwzmYQ*!$AH4v{!am8XhDKn z(9)fxcGiD9P?)z;+JI9kbr|aqeEmS5^=i~X$_A3{Tk_+zmjX@EC*k^Dd#L_?JUtIg z2mfW8*H4frT$p|>oUfFr%bN-vAuQ|?nG$u_z78U-M+z@zvv`tr7&qo_YlSC64#OBU znZLv0zjtS|kIJI0GwbThe81Ha_M9qSOcg{?oebez+SsKuiV!cO+~>#Sit!63H~z}A zftQu?!!5yU^~C+i(M|`Marqco4UXkLgvCxT3$7(PnJ6H(IYiG{8z5Mk7>}1j>~(7i z_N*56C>!*&tLrZN_>%@(Cx=U1#VN52EM<^iJSu4b5DS41ZAb!wmL3EDwvx=CfL-5z zHo&s3y*$XX2woX$bt{#=;kbs!Q*aOUSuTC-GbxD|Z2kG=F2cNgUlvMabl8|b@V$wF zGa$Kt96?XBrIr{zt4YMmP)S4NaaRea3_1~e^&Fx(uyqfN&uF@xr)yvFyD-J=_}QP4 zgu_AfTNxD*QLFPB@7TC8JwiVWdH1&<0!)TXq8qX2bM>Vg(ysn{__u|;2y&k3dX$=U z@iBB#8TqeNL`6ICtU8osJ6g2vb!h?R2mCxrERV7C(5qhOR3JRS9*K;@`=qvfD^8B- z;aNCs(7j!y)b`<`nfdI0?aJO!K2i3g;u^E|!z>pA{I}x7a&Mn8y3Uv2l2a@oAddm}Ooan=DCVt3=r-YJ zAvvv4&49L-{?9$4NPx_Oq5)mK5|AHqJDno5PZI|;F-|{>8f3LhXE?Q_s15*ivWo`} zsAB=ak6udanZ8xr9leyF@z>V>-9b?_P|4b-CBjU!N7H(~l5_tKbmUx(oC2!Q%_Kd0 u6gXNsW?X`qFPPiZ_^&QL2dMl1oZ0+{I@>@g2s;_7ok8l{guj8^iTn?dohldr literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/help.png b/usr/local/www/themes/pfsense_ng_fs/images/help.png new file mode 100755 index 0000000000000000000000000000000000000000..1de05e3efa0ffeb34091a3e20cfa5a2726799fee GIT binary patch literal 324 zcmV-K0lWT*P)gwo{CjXz=^MCKw|L@-5)w6!d|3It%-o_{>*!KVSwb=Ch{`J2u z7hN?nYAgHy_b;j*pkv_D`7!^WKY>cmpM(%!G6PA^i>LqnEf8`*4TpDw7?WE;DylOP zj)eFPq-WVI6ia{rNW%3aTeW#5Ob;%fB>VmU{PBN#IYOkn8m0#rte6^rRsl5tLkwB4 zsSu{8r376=xFblz>ILZH6PsXqR?Wv^2@n9?h9WZ(QcMIhDY>EaktaqI1ML*51l0fvLG zS7gL9u*ES+#j)raG(}lVQeL=RX{Kk`5jPi~n{&42oUGcGrhI$T-wuoUK;8cy{Wbc2 z`^w{l0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU(4M{{nRCwC#on2^CXB@`=X`0%Pp;N3{ zwD^U0qEK1E3t@O6Rh(@>i-^L|X`vTVcGC-m4b&TZvl|CNujWmm7m5tQk8aG3eRf;z z*ruSh?X0!2-!(N&+jQ^q<~?berR_;}P8#s}!Jl)Qoa7_~&eP}ryzhHFevuhTlP^`R zJAGPeYiorNLP&OS_3Bme`~8h-_fu72Rnro8t)H2hapXKX>AoRVOS)z$p92q7d( zh(scC#Et5&Vj+t$`r*|KFz?0HK};6mU^KsX%MEiMSieD6yLA!L5{5s5^8P`j^H zAtwk+k|Df~3P>u^JR}W6cbg6!(r#fso;`b}x4U-jial1L9Lv_NTjk1?D_S&ia&qM9 zxpOiV3`#`3*K{Z(C6_P9TnHhA5PKkFHbZwU0f`rp>=2M2RlR@kpl(YoBp`4SM~)nk z?(S|a1{jI8cI{f(ym_;fl$2=qfyYN4KbE3Pmn5W)e^Fg6UgcciN(do@*yr}`+cG>n z{HNOOlW5YAC?Kwol7M`p>XQQpbh~LG%FD}jc|6hl#>zC*7nI)KUfI5VyZ+m+>Rq2t zR;*YdFYwL#`efzGl@t*|2uXqFX3QCspH+<|2na6m?qwi$rRk}vbvt*;#*G^nZ80JH zfa`$MfQTT|fW@-%j#H;jNoQxLG`F-!$=TM_^Q#e$5t-Y*a?O2c0kLz?fU3u;cJJP8>rMOn`}Hv1 z>({UAzfYVvA=j>5)2%NQLYM zaM?`|kV&`2!qqh|audxKf%0dVsgro;z0CajJI&^o`l;u7k zAg&GHwJjiMtR1MTN@-*i+EkU5l`$dF`G#^M7-3~S4;R9)oDf3NwGZ5 zeYiSw*S3IQEnut({Mr8fDZS~oZQHb1#OE7mUm^1V7_N(~gTr+RAtZHhZ8bx8f0Af$ zK58!6miuruJYQ5m@CmRiSLM;8I`B>fgyE>fFB}X8rJ|c^PV~x&iGPQ!0VL_8#YL3X{lcCiV#A`(h5gcSC@2jbRg4s zF45WM|44MrD{MQ>HekdABC=@y;nXcN5JX_86ef5~m?DG_k{zHOHD<&iY}^Lsc4PU# zZd1Jy9f=h*$1JK2P6-HFSbxauovWB^6GF(+V_o4RMnsS>AS53)0@80pW5fuD6`p65 zT=M}EZ+}Q3A%u{n7Y`IthLCY05RHJT0pm!lRd+KMp2rKwE1A9VI)#G}Lb3zPeT0qs zu-aFzjDSE)UP}fi4ki;2^w4}pKyvt-5kg2-xDd;IOc(({w`j-+$55R6$mr1BL;-nX z1jI`RLI@#QCm>-X6mT13rh<}zI}X|rkS??J(18#_NLC4m6`)(AWFZ(uzki5t)i}9Mf^mV`iy7D8!;r7@!kENH!9gr~a34I60A!b3h0o zB)gr6IO#T=6c9oPA#am1IV2zq%?Tldq~}1KQX)bKA#WFSAcPP?C?JFoLMR}F5JD&* lgb+d~AcPP?h~ZxW1^``y**|i3wV40_002ovPDHLkV1lzUW>WwF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.ico b/usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3440bf24d471f1210668aea9634a4c4571a8874a GIT binary patch literal 1406 zcmeH{uTMfz6vsaxzaBgg6a-Ouh#SMr5l9qfU1$um$ zjmKm9{XWCtkXEZjAP}HjE>o-3C>D#v<8hkJCWS%)MNvp35)1|dDwPL1oeueYo^JP< zZ1#?JdxEB2lgs5urBXy95$X9vsdP`H@klaxLnd>}bULM4t?u3+wYnIxPh!F0)-VD4Wb{60%sa=`{Y>*D-u(@Y#a*H^J*1qcNOI-KG33 Ub|^T7E5XGPj7;!y2KxBE0oZy=+W-In literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gif new file mode 100755 index 0000000000000000000000000000000000000000..46ccb92dacdc634220fef86f63bd89cb3c62fc34 GIT binary patch literal 200 zcmZ?wbhEHbmww(Odb(IiwjflYTL<01Y0{*go}M*p)@<6eY3I(J_4V~RIXP`@ZAC>zm6etI_wQe} zY}x$z^N$@nHgo38w6wG{XU;H?0u+C;FfuR*FzA3Zf$U^pbyZO5OUZQNJ#4b*kcGFf zO~*w6w!bQU2W+||88=xtu<$D@IhI%`tUJCap@BiD|4^brsf`TtfyeI2qH-C_k}R@# LM3x6}FjxZsL>W54 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gif new file mode 100755 index 0000000000000000000000000000000000000000..3ede1fffbed345efa81f61c487e67f6cde3abaa4 GIT binary patch literal 306 zcmZ?wbhEHb4v8_qi()i_3oC- zt@C2%|GfKiUgZ2a!E^ur|3AZU=H0t@3^W6ZKUo+V7!(QQw=e2S}4o(Omb$8#jNy%&p9pPGu4?^c^25UFJJWeNr1yl3yzJfs&?{{ bLP??F0SwGO0&NWZ-aKq6(rlfIjttfScsp%? literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gif new file mode 100755 index 0000000000000000000000000000000000000000..b23354909ff9b2a96c45b9d699661de74b8952dd GIT binary patch literal 314 zcmZ?wbhEHbso^E)0&G_0m!E^ur|3AZU=H0t@3^W6ZKUo+V7!(<|F?a0&yh8mGD--BE?8dxe6 kIFl4OLcxxNLAvzz-VP|)Zf0h1qtr^t7R^YuWUj^_ zY}(!i0Rt5qV2_k2ngJsa@Ofv~dC`qfimt`i2IWy$$HI6l!ibC4%lUC~&Ua4ooo7ke zfx>-nDWSv`-~-+VP6FqEHsCn$HgFgi0KNe(0p9@^fNJ0aVAyE15=0^JF7O*r&oE=a z2=FH`3Cw3^PD`bm9JfT%e*>#-_pC~F7g#bH7Y&9Lr*ny-rX`YfuQ#StTGZ-adHyWJ zd_)kdJRjHTmQ1E~pKmn~SoL@w*46zRi!IXhLU#5&i)Gp2i0k#WBpC!^3dK0fKJxqL z($g1mbC=BKIgMr}CFOBAyd8;L6M0>(hYbzOcKaQkUo0+;7Zf~6B-Wam)>>M+S@yow zdatx}*=CF9=g;riGb58t1C@XYZ~+y-DTe6;hJaq+$K>Q+wAwu2rcO7SnR!hrUE#P1 zn&u>ukkL49Fa%Yq8Mk|aqV71IKZq0XdV@+OrB;V|{!t`yx2|r=;h1Y_@ss2qJU`=d zZ6^|oet$rrm@u196GVdNgDkt?^L;M%>&~(`C zzFt-JZCTk@85vjg`d+QJ1L%@UEkK;(vVam`%;_AVs3NsG>h*?re$wL^HktnN`!^Gb zDW8ubh+&$(Zns~M$u6d(EO6Xqg<>TV>DTE#A<4en+)#aek47`k^EVuh2jTEWEcOn= ze9f}6fk2e!J6To`g{Fn(=KFx)c1J~BRrMdREgEHILPmy=oGj?|0!0a0t)SDbiFi_y zz;S}XAgEM=(I_~bw|QRhdS6qkpNLVVk|#;Q<2gYPf>@+TA>M$9MDw|1Ajc~^&dyJi$fHooYYq(h$>T}N zya#(fZlZESZy3%b>}fxpPkH9$n$4#xu2`-6^UDj?kNDn{RZ3vbj^FYix&OAS_2|&C z8>U9@KmHSa%ol}ICtqJ~r`lf1B8=wN_QA$0`wz-?q5NRYv4LlI1*eRX9OaQ5uC(>{ zfuk3z&nKm&M*D2Cv=^l2)Q+sfy6+Pk@y1}@huuZ%MO|BSkjtJw)LhtB{`08f#aAys z?&#DpIU4WA-nMg+O4+CTo*R5Bc(v_I?2?}{ruBD)+G|hu^q#G)xM|Bwm81B7mNUC? literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gif new file mode 100755 index 0000000000000000000000000000000000000000..ad43e17992a15f9e9303105f7a5ac96acd2abe68 GIT binary patch literal 348 zcmV-i0i*s$Nk%w1VJH9(0K^{v?%k`+n+E*( z@c#b%`0?G{yHxSwx6Yjj^ytO<^yKp8z4-Cl`t|4V;k4}9qVC+N(4iIK!)fv4yX)4O z;KFAA|NqRH0RR90A^8LW0018VEC2ui04M+t000Hq;3tk`X`X1gTp8!Sa4gR-P>qeJ z?|kq7K*0yHa{-S$PEWZ@C{W86A=mC-U8h_2wFM;3m+B_==DDs5F->78~y(O00RpACqaRT5CA((AEN01 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gif new file mode 100755 index 0000000000000000000000000000000000000000..abd1b8b34c3a7f2a9d7cd3e6c6efd7593f6aad77 GIT binary patch literal 331 zcmV-R0kr-{Nk%w1VJH9(0K^{vySwqs%=IE7({^^`Mn>ADrR|7_=kD(O($e;;tM1+1 z`0()j{QUj~2F)HG(xRg5#>Vt%Y2m1-?!CS8V!YA^8LW0018VEC2ui04M+t000HZ;3tk`X`X1wND=40a4gU8aE*kg z?|kq7K*I+DEcOIB9_QCs6pTPXLU%~+41gcv+2arhgB@7l;dB&)O+d#9>pIrm*4L@m zJsZ0rP~RNF00(?zQa*D%cYGda9*P}V9aI4X9ApELJ%>DZ0FicgkBd42d>u=dhFqJG zor{qM28#d!9fV;4Sq2BGbgYqPeI5rL2@0{mwT&BwQ&2?%yL4nd3KR{_MFC4Z39&s6 d3?B~|*yTSK86y=M8}07z@bU8R6AL0C06T*ln8yGB literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gif new file mode 100755 index 0000000000000000000000000000000000000000..4acf2aa106f42f5f6757621d1ba4e8aa578c34f2 GIT binary patch literal 346 zcmV-g0j2&&Nk%w1VJH9(0K^{vMA}59?WNN8(%tyo%=OIf{O+pms)*-^@ci%x%?JGc z{2tOCw(+)d<8r<7z2^Gn70?w_-BiQ#!`t}Vis*{2@2Won0Xmxh9Zg_wqxm^udq z9abKmI*2=zdK-5bwi%Y87zS1Vau}jz9 z{szs>i09|q`1r%~^Qi9btncr)@$nkb(X{aJqU`ME`ud9K=yK!Z3C_+`-QC9Y^qK4H zX5ire|Nj8Y%>V!YA^8LW0018VEC2ui04M+t000HI;3tk`X`X1QJY4I(a4f@DG-h6| z?|kq7mXGE~Y~>0D9_P1642Zu@Cnrem4uK!x*)tll2A9;cIphLMPhslY`o@51TsjtH zI|l)~ljga5aB>}YQ+pc)SsnlYZCpHoihG4Q90(l(1&WM4e~(jokvU@>nV24f9tRJN zJ`7TzaiUWQ3}jMfr&fLtP*4E^U2HuK6$`yY2YopRx;q659~2nJ)I<^vBNY=H+}+;a M;Nji?0wN&*J2GgRdjJ3c literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gif new file mode 100755 index 0000000000000000000000000000000000000000..55c1c4ad287a2dfd16a569d945202b3c4b42c0c2 GIT binary patch literal 1111 zcmdUu>rYw-0L3pA1(i9ht#QG2npqcDyJpTAXR~Q7vt=<;>#~tqgW4BnGb3xWv`!-! zI_WBNwhhWto&`EUpi#qk+Fjj-+zSGk2=zq;MMYF%mL+YN{WErQKK#C&{63uXgqrdX zTQh-7;2#^{bUGuENGuj>XlU5m+Y1B&7K=qJ78?wP_4RcKn(65w)z#HSqfwvF$6~QW zBGJ;)5}8bv$z<*A?cs1Z6bgYLxVpNUk&)qYxwu^J_V)J1#>VF6K{t&?6NR;v|{$HTCrySrN?5^}jce!o8+kC&Ifqfp2L0ngajSX&$6*)#v}@Q}@Bo1KO9 zdOa44IoN?=yV-2!^ZCJGkj-WjiPe7p{IO%%Q&W?>ySwA#<2P-D-+ zDnUs}iAKY*T8#?}3qGH{urL>g!$l%%48~OmGTgrX)srWWi;9Zo=H@&e7n9j;w}Vot zl`^j3Zwz;`^Vq#)+bd*MGq0ugf z!_Nl?2Sp2kSTDC~E;;hCAIeSOzdDwWp@ClYZK3NPD3!{AfdQpbJ~Z_3=FRr5u1gT~7YsuX1Wr%?u2w5MJ3F1ur$i!ga?*guzfY&P zwYIh#KaP`1r7#TF*4FZPOb&-VKR+)N3OO8($Kzozs4|&gc6MrbxSK$@U@{r?dfm>> zj=`WE85t=nE9>a!006+@a3m6m1Ni?Y|6e2m0Bk_ zcI9vyK9ibSrS1I#kzPP9sHhj;P5$y*^wAuI@GLbyrJ~D5Nd^(P44^*8CO?#d8pR_S z=c=mE$dBI5$!jE3(@9@fq1WFiL}1d?#ccM<)z1;7Ks9>hmpt0zdU-*s{Xt|JcrB{} zyMxWM^)+2eS;@RY{yQrLjk)#bo#)`&g|yPhq4))a@?uiii)BFZygv9^y^8YR_|KGj)FDm+f`}Y6R(*IYl{?Ehnf6=1< z{QUpdt^2Q}^j}c$|IC^Hjg9}OrTss1=06ZH5C)1rS-^^PKqSac23ETTOaUpLs%JP{ zQ&|ETSp|iqeUErsUNW(@>s)-~vu}%9*8vTWdp%n(DcpGB%eIt#(su=24`+jy4H_z* JjLsYk)&QRYKx+U1 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gif new file mode 100755 index 0000000000000000000000000000000000000000..eb726d6da80aaca27538a0fd3e527ed4c3b883d7 GIT binary patch literal 192 zcmZ?wbhEHbJ@BV-E z=>N%+|L4#Dzi{FIwQK($I`n_Rg8#2y|NsA=0jPK8OdyFLDE?#tE6@RvAUhdYZ4(3o zQalxpys&xtIDq*ngV1k}1Ky4kRXF!?EIIPovqkOHA&Z$a@_f`^3gkpBWqP>vqyn#} PZR^I0S0RT4;WBg literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..e6345fe89beacaed80781c84b11e5b223bbdb5a0 GIT binary patch literal 193 zcmZ?wbhEHb;IA^|L4v7KY#xJYuEm-UHkvgq5lgO{D1xWKM>5E$v_Aw{$v3w(E*VlI~iE*7AOUz zcp4u6;h_2@faNQLFt_gkZ`VsEmUf;?j(qlQQ9E_O!sA}g)*yw57rsoY?311=n0h!H PWKMKY@nmu4V6X-NI3G~K literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gif new file mode 100755 index 0000000000000000000000000000000000000000..a071c66d707efafecc89cedd418a71a5e3e558bc GIT binary patch literal 91 zcmZ?wbhEHb9$6Tjb>ACnqNu7#P{v+57wZs;a8U$jH09yHZk8i;IhWeSP8K z;o92TMMXu!!^37~X4cl$?(XhtYHDI)Vmv%Nqobn^4i3D$ytcNspP!#_aBv|ZA+xiy z>+9>awYBo{^1Z#iQBhH@uCCqP-KnXm{r&xScX!dz(R6flN=iy&V`GhtjnL50US3`( zC@7ein00k^0|NtqfPnS&^@N0k?d|P&cz9`PX;f5HFfcGCCMG*OJL&1^;^N{-MV>$aJHk#FI{*Lx literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..1647e2f4f408254893f512f68e583fa0d1f4b944 GIT binary patch literal 1060 zcmZ?wbhEHb6krfw_`Z)pkb~p#2YU;Od-(I|U;mOC>Xm2mX z$?50iwWX$ppPxTUUw@UKUr9;HDu4endHE7q*`=PI8_UWHva&4s_%_AG9jd7*S5YZd zQ%jSUKDdAX>Lp9M^z^3M+OAx*XiY#sZdTT+#fw+?_{d93_Zk~tUA|mIM8wzEcbb)z z6VNVQ-C7luTt&qdfq_j129+8b^Sr!nZr!>%Jbb!?LqI@4l7Ydoj*gA1RxNgS@6gei zVqvj!=gw+*`PZ*s@7ccn=FOWY_w4C%bbS8&`TO_pmwI`1Sy-gW$@SUWZ%#^D7#O&& zsL0FBZFO4OlDTtv*x1s{%*t$R)<#A)sj1moT1JG1zJ2?4ri;sRA0JIk&1FeRB3xWc z!o&NFjqB{}9_-&AtFIp*C>SIx?Ca^d+}k@sPj8u**T(YlEw#0WYHK??J9qW;%yn~{ z4-CMR6b=p!AAbINJG*vc<6E0IPqni8`0-=0y85)<-VLFlRl2%)YHHJce6FuvefRF& zL@}}3w{IIsNSvQJb9sFH&!0c%hJ-vlb?RVs_3Dg_kdTl_Ev*AHXV%!+HLI)l85z~u z*|q5E{`vD~x{XbQpx~jpx*KcPGBPq|XJ_{q7+hboX0eBdzq)$7iOIu<4;Mv725V~0 zw6#6l(BP_|5F#eFF+P5>on4rO#I@C{E7aAWK7D$A&YTs&!Fvh|l>`JfRaC55x^%LI zMU|W!A3OVr6DMM&r8kt6tn~E_@bOvV;n8boxM$BE1_p-z|NjHYp$-&(vM@3*>|@XY zc?6Uv7&!hj)N;yrY*0AJ>=wovA@M+1frW+l>L-O1_ci>gE-n{~8QT>a?K>2NlAm8% zX1_8>;L?N6?)9FzStdoB*``TxZ=X|g(aHIgfQ?FoX~37IoRclsc#f+9>?_}#d;xOe1t(%sVa_4V}j z^k(2@?)>iFg2{r2=ZGTHBG=*9`TO~;t*xrRs?5yH z|Ns90%m8L)W&i*HA^8LW0018VEC2ui04M+t000Hu;Ma{L`JHI0uIyPp$5Xa+?T!K4yR^l zX=ZF`32!46X-Xpyk3V>6duSdF99e7|8CkM&BocIWk$@SN9=;xKY*9f*$PyF^xXh;; yKLZ>F(rf_LLMdSg90~{+90;XE^z`as7ipwokoEpW_m&B?L6C*OWd#d{0028uv7Gt< literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..2ba8db211f22533f43cef096f7a553b38f73f91f GIT binary patch literal 357 zcmV-r0h<0tNk%w1VJH9(0K^{v@$vEQ?(W*!+ScpV;Nalr=jZVE@c8)n%H_)Z{QRr< ztJ43{^#An2;KH=pw9Nm^pVFV*|K02B>-hZms^zNF)6@0!^{V`;`TzOX|JUT?Z_0z@TvG5p@Qf!7(}V0W}(+01Ew8s083>!XY(Co6Uvtk?IORfNt&4taZPUt^^J% z%D(_7aY%E15*$#19(qwYT^$exUmXl#8+aajdVWv`98-jPStAG>1_%ip2yzi&cmf;} zs%UC!Xl`o>ah_{RBM*>xdTV`Z9u^!~ZUGuuwR9v9kdZ$+mw&*Me{NAhM#>!u47$#$ z0Y3yB1=DT-)oDlRk|c*ll86%+&x+)(hKjSv7k DsiLkc literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.png new file mode 100755 index 0000000000000000000000000000000000000000..12db07ad024ff5e6c6d29c717e1440a425d24151 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1SGfcUswyIGCW-zLn>}1|M0g;Sg>2}W0Wz6 z)3jqEjxQL!G;+T*D(q0&p)kvgEyYqndL7425tCe=6H*Eck(!%0Vx&X(XLVonalGud zMy^AlOKwfx;Y|K(1_}@4&umbW$(vEwC1W3{y_G`|1< literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gif new file mode 100755 index 0000000000000000000000000000000000000000..393674d42e39b25c9c4c7b617a8cf8c88ee4674d GIT binary patch literal 1291 zcmdT@k5kiS9DdlogMp0OREV*GG#HCX+d&*UA&xm5gStXOTZYJH3l1vqC?ErGZV1C! ztyGGDnjBKck3?<|MAATh$u@rDP7Y&G2xymOorcF%U;Hn6@80L0_xarW`MjU^dEcaD z`Cf^Ni(otg+yONJA>8b4umR=31>h98BCfKJDXXNps~T8U@~ zW(D{Z7z4TxKqeUkV}gMf5l-@t00ZzHAOLv42+#-RPf9Ksih}luj8_0JARX`qc5Ts$ z)e1C&Kf^~Z2nT^8pbcmOu7K6eQZ1?w4^%_ft23?{Wn`+WAOQL}9WMhXAiX6;GJGa{ z&;#E|U)e2L_EI(l2$%{;FH84uc;F0RM%2xy{N?=WyVdpg>dCW;=fnle1-s{Vvz}*# z#D$pFO|SxQkbP`bR#F z;5yI^?lkvs%V9Ti7f?e^`xEv*ho?8l7etPTE!g@Kp#O^xJh_T?bHCo5`b@@Xy9(vk zLLE!K3O}9E|GCVC!Ybz%VnU+wAJV5Z1a*dflX2t0Q0;*1>;EJ%5O`AOpiFW;0 z3Hta^sbMf8^-RiN4=!nJMp<%es$t38JlEo*PPOh=%~T3Ar`N`0`!7@|`=*z7AX)R()oUTogZ7QR(G z-e~oFoH$wA1#zZoGw0#ZhL$qPl)oBZHcxmDwH>>k!mPE3XDshuJQAsnq&nL*pZUC0 zOJi)yD-=9p)NQOYePebx9j|ZX-?P8Bu$FbL?D1Q_TSDf7KQ1l4|EKF}UjAbJz7juK z)WqsPrzC~T!&A=1VoOaH^_`WTk@B)1=+ncw#Abn(dHN3)Eok;=mo>LfnPB8|h=-mu zMJw$(joZXe3OpCrVcWjfpH)sH8oR4$hIdVru!PUuMrcpD28N$yM`Zo-i9%$Ox@V+! z$U=6Q4(h_Ml(^jZHR)N_>Wrcr8d~n8*-8{GoR*9A7Hx_bXYgPmwO}|ro2uznjS@S~ xO(hGdCy=}?m>#@lF833H{&iiyR4OpLC@{%|>y7Bv4tO#(&Ff8d+jlY%`yZ7jY@+}G literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gif new file mode 100755 index 0000000000000000000000000000000000000000..e171ba883ff6adb2c24c38893301da408880c34e GIT binary patch literal 308 zcmZ?wbhEHb54l zzcXjfFsx@_*vY_<#js(+1{D<*hTRM|ZrorD7ml#~<`6JyxIz`)KRBO}9b zoPl8*gP@>be0)4ZAp^r&1|=mW5fPEASFfg~rXD|joS~C}jg4*Hx^)a?4BXt@3_x&( z;oZA;AO?v*@h1x-1A`ue4oDx!PYi5<4%1IJ2y9g1nslKwf>CPi1?34+>sZ!`X-9wb z5o=fz<`cL^=uz&r;)@+y*XXjB)^!_8x15@%JH>}NB43@6#fMozNSBXQTfmz~Oj$=l KzD>`O!5RRChfC-H literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gif new file mode 100755 index 0000000000000000000000000000000000000000..00c865a19c662dd9e7df3b8067c187cc5cf3680b GIT binary patch literal 308 zcmZ?wbhEHbge{LGm%N=izH4|EW>~PofUA3gs)wSLwqII+)H1HsQ?-6ykdWwD z6SgN{iO{3mvM-LETUV`BEUD|(R(Ci&PqjfsBO;%VncYW2T1i`wMN`0ASWQJsT&_*W Hk--`O8gXE6 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gif new file mode 100755 index 0000000000000000000000000000000000000000..7b412eed1873645dc604d9d95db433b38cbad27d GIT binary patch literal 308 zcmZ?wbhEHb+H`I453cjgVE*71BB&v5sr4n6`CR zh)?^PFd5G^B9C&nO@7$1bI*R7V> S>k5;nS4v%(m@r9%!5RSkFA^yL literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gif new file mode 100755 index 0000000000000000000000000000000000000000..7182e0dafde29cece7529b08bec24c70f9f245b3 GIT binary patch literal 64 zcmZ?wbhEHbaEr4HjlXWzu51?^ZEJk{7BJ6{1@qGfwREh zDnKrmvsf&#SUf&HuGMN25)zC? z%*@R2@bKW^phBU5pu)|~)v2ke)zuY=q&*}g#KXfQJ3E`nsBv&`SXp^XBoZwav(>sV zF)?f~7|7(zf`WpSloXXpwZ6W-x3?#gj_P#s(a}+%kZ&^0$Hm3bXpb}++0oI_-Me>4 zq)4e$+S1a(<-#IS7nAvPX=%x9o~x^SDUtmC`Zdhuas&bal}hRDlanJ1*WSMUZDeE!1VL_Yn5d|zhYxcZ493`)n9XjC zkB|5E_TJgqsjshZXlQ6`tdET)fFP*V%0ff0BqqjjIPAT>{psmxv)Rn$w5rw8{{HUH zPWJN3vc4etcXvxm3z^KS_I5Zw|Hp%a19$iH zTrT&;3%XjZuCA`m%ga_M{#ahNZf$KvL_}CD78D9)v)LvlCi?nVuU=If4C;!C0s?`+ zX8)F)oQ%hRo|TnpH0nA!8k9;U4A*Hi>gZ_vg$r&ZQg}wjEgp}Xnwsk4gRQ72HyX7# z+{K}x!QNgTo6QCQ;6p+m`2U>Wzjg=!PywHQ)cg1e!0`ltf9eP9NA0s>zyR0GKnEIH zm4fnJG!G-cw*vsbMY}4*b@IhT_j|1G*mh{IhJOG~F#?JF0UBBgEMoZl5(c~Q11kK( z-OoJWNt;J-7$@$w;aq0P)#$cWM}GpvP=dS;mNCrf$sGX+wwiLwTQ^6La?kfpvoC?} znpYT=9{fDI6ihcfS-FgWgnvROWO_1yJoOn%`7@Q@CCIn|^t%Rx7rk_G4+HU!Dx2wz ze%H?QCB5emao^N?J~4xpST@4*L1GLUIYyT~Cn|*bU8jm}p~5bq^{v%(*_V|p;iW(# z^Bjo7jD+r@a7!`^@0AKwFj;rq| literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..70a7473c30f8ef7a9ee5ba94d9fbb6dba711dda2 GIT binary patch literal 689 zcmZ?wbhEHb6l4%&coxR+?Afz-@7{HFb=|vn@4C-XFJJ!k>({4GpB67(eB;KA@87?_diCnuxpS8;UAlGa*518)dwP0$dwUxj z8{fQnbNBAu7cX91zkdD0hYz=J-#&l-{GB^@T3T9m@7}$6^X8K$PSn-aojP@5`}S>D zu3TBNWJz~-_k{}=7A#nB;J|^yhYxSqu;Kmt_b*?(*tBWW+O=yB9z3{X$BtdQcD1#& zb#`{{+qduOvu8hl{#w0y^~sYb_w3p8=g*%bM~-aSvSsevxj%pYJb&)oj2Sb&e*OCN z>C>jBrq7>0zkU1m?Af#b{{4IY{Q09tj~+gJ_~XZqYuB#*{rmSn7%&VRQ2fcl$iNWB zpaXIOC{7sI|2KsB3CRn~`ge4C2C%w@g|G$jd$4i&d$J0JgtE&zd3#R^;$rag3A9o3 zaSRO=)%W)k4&mboVpg!#)Zq09VRh#Y^Mb(36Oi{UT%8^4#HH$$o zER~5-J+Q>ZBBOzsM@D6q$HGGjLESRJlQ@<%r8qaSD6#2uD5;*};_zxTzVoRX%iEiKtR%|sqO9Uhbt?{mzT3$UAkUgF)S>w zR8rWnv7%X7fo)WFsRZY(P0nM@Oz$ zSXWb11qB4HRaJIMMXOLymsC&EqM~|GP}#7su&}V3M@F=?w79sq%!7l6Nkuw3Hg`ET z$hEb#Zf;mADrYMz92^xSBplbQtONuEomNu0Zf<8}WCaBUfI&ZgH8pZGGFL7vm`+NK zF)EKlL6SQ*pH)>=3=E7=Nxph|ltV+jyu8+$nxarppF~5!fq?-50li{k%$1ehwzi~A zO`@Wrb3{FLH#eh5L$Ov=%!GueS5(i>&w6@#gD4}VSy@yB1l6mn=;-LcczB{!RhK+E zsZC5Y9viV$Q;Ik;UNkUSDk`sGVVyxiTmS(7|Nj600000000000000000000000000 z0000000000A^8LW008v>EC2ui01*HY000R80PCFq5DnI(DBA`o1T|ya6LIy>&H9pv zkBe6(iX=Jbi_IB5hyXys#_l#B3q3YM$S}K8Sqk72v}QJTxF&3PG=N;{?qJaR~5?nW7^HER}HlxL6oR zr54;_Qs`R&I9E86*x-y;sC2<{JX+`NN1H~CEerwXDGv)bqEgZELQaVg6!iX#2uH>P zpkZLNX@J&=$~z;|WSFzT%FwYJqjUv2lF;pev0E^J2-;({SqYHI%f|KG>Q=luEe4<9~!`}S=|N5_E!8!leF zc=__>t5>hSeEBjXBjeVsTg#U(fAi+e`}gnn@88$m-I$P&ux;D&%a>1-mq*Q+)6CA! ze(c!JfB*jZ`+MHGb9>REMeEnk%gxQWbm@|wp02aA5f>NxxpU_>Y?%G--MiDLk7Z}a zmXs9t^%d^jyZ79=qcSq0PoF-~&`|pQ`N4e1_o~0G&d?L%E7^*uCDa#*|X8nUXhVbbLRB_`t>s+BBH!JQcO(j z!iA%Y7A>4VzwgSG%TZBoUS3}R|9`)6<3?3g)x?SU4Gj(V?_aRDw`XBtPEJlbbZ8S3 z6JtX|`Lt=1GBV;?TGG#+J@fwkJ3c1_KlO1)5yqBS6B1LkMA}%*4wu) z-LPT9rcHCMUA-zJBfE6TqQb)L1q-Hq`0)Pk-@pC+6%i337cXA8c=5#JM~{+{;x1e` z{_NSao}M0OXXl+eckbQ0rna_r^XAP#K|#H}`O3;t>FK`x{r$qi!XY6+K0e+_Nikcu zZoYEmLT+yE;>C;4oH@h5zyOS2AUW)T;!hSv28PWHIv}5d@&p6Ne};5Njth$gIU@9> zG>$ZRg^00kc4_!kpy)Lqs5L3kJ_hBb*cKa#M8k2aG;U2hGY>dYu{vhL$=zV z3GAc!c+&ZiwB5bbWBdZZ$HjT|uxTPTJ!z)o8d9{o)y3!2CSxj;aY$hE25xOk6 z`MyE`%R>)7_Dud`ROFZO+pa6q40H#{2-v9sr literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..9ba5738fd049b7a747a536a5bae8b1e4ff5a513c GIT binary patch literal 1120 zcmb7@>o=Qs0LOoLJT5U!499WFs?s1Hb=Ra)ks?pk8`D2w-`C&IoA3F2(HIt$CL#a=I64Hs zPD~`k#x9hVJu58K2!$#--DotvXld#0?(SqVV*r@Hd$$HbBy{?`SUk$*j&eA&Qt3oW z%4|-Kxw&}`9>1Yh&*kSYNF;KPbAEn)vzeLc@vQGMGUOO`35LVNgJn)mQ~)p{ajB{* z#>GV^k<1B&YPEV`VBjVWcT+6h)@THQeh_5FU<8v$&bf~E8a_WSFK;9{@d<`a%L-N$ z3OWEvIz0t|t6Z*LCQAh%B?WzFFtjq6n`2`?FE4+^OX}(ANec*2T@HIdr4k5)R5Cdv z#H${|P?WK(P~1Q3774&BmFjsz!(?h|I?iUjtxYeNXX9llx>t<@SbGnGtcRgk~YsLMi-F>a!Z zi+wgic@!Etl#rkd_2*M49TD^p7#6{>8V#SDn;VQrCsMd&oMeF=p65w^P*%nPU~g}) zxVX5N&Ax%NuJrcIiJ-|TWbL(Uiw_@`lU&!<)|kwonOnCEg|a&rE_B64A_y{n?;eeY z*xFk2`LS_C;=#c|If;03a->d9Zf|eb35Agi#%+81zL+cC-k)eQG8RfpV{kZyLh&Rm z?alCT2Pd&H8OyMzl+67oY+(>RaEVugQSUESZ`KM)rMK@bW+B8Cknpvurtom9G5 zU+?cv0szoxzE)ONeO!)*hesuf%BjKS-X237PH8wzClqK!!ar74MmU`70Gynhoc8~3 z+>ap>01g520sQa@V0i+5`!{f>F5cQc3hxEA>~Glc53#=qlew5W2n52(y?tA*BzVYh zY*;XDj<(>0&X_F0EhJ~Q?-V}MP-XcsIe)b$C$&MO@p@Xz@~u!=?4M;fer~KCa_V_s zxygLj63~n9?evGNU-`(MQVxuN4OyGq*(X6hyKI*Lns)E&RfmZA@~JOhit>f9jTs!F zI_~Bj9Xf>F_mu8#jDB_|D)O;I>YJg+j>KS|CN9aW(X?Pk@473haHGWEw$ltJbw#+F zEBmdcW|)tgZgg4)=N7RozKz0Oue@J6U)g-|HSemh=_QbjAAqa&12iyUr(*OVf literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gif new file mode 100755 index 0000000000000000000000000000000000000000..e0fa6597a6ab440c246ace3e6124a2b59d44219f GIT binary patch literal 1312 zcmd^;`A^$r9LL{ftI|yIiv9xTJm@cz(XoV<1@W$D0S(mI>~eY~Z*Njkl1Iz9IKt%; zu{eP`hr^*;Q7J1Ut*s<1jC6Go4-Z#5qfn&KmnJ8#@cCNcDDV{M2UdVvfIFa}8L2dr z(!rq%sG(sXf-*k7k{;*fMH(7NU0tkDNP>eiXiO%X1c2g}{&01%h76$Vk%P zKa-L|OeW&x^&v0@v;&&}k9I|(0w5UpiMpfXd0-XD;Pdxr852X4N|Kg#zo6h(TGrN* z48U*wKY~TWr54Zs~;2;fjbP%m}EjPCqPz3~#_IA?S8|&lK#AK48A-i0@0~i1% z;0%0?{qa6s^`HC?;r}=N5_E*`WB;E3hoI0|lwmVZnVeXmnpxW*E{)2rtApBFo7xY> zmgu@FdR_=;UaRSQJs`_HJ4-sOnRA=*dHL0?z^C@~Wha3}wQAUUaKto_WRfrESyFGx zZ-(0ho7D%nicY(xW5sNJJi^my3}+cvoT1|=iXJ&|Imu(+T2D;AZE*27EQ?}dKREDS zoS&0z;j8bOTm71H3$@+Tmy1}wI}^EIWJWMvYCLSoJlEXj7hUafOr5Iz*vcFc+!N22 zIbEIOyqhvVa-nDa;i<$)UP6(B$#K|s^z^yv?e#mi8%M+^h4oVAXNCIhIt z78k5{pRM0{>uBPQUHjRM@9zrt(qBt>UcWT-D9v}NF@n93|73h%JWgJ^m{6+61h zemTU2DgE8-G9R7c>8Um-9Zqv)svybdxNqq$I3+>kb;Fk&)+gCUHsg|XZP?5dSYfM0BSB literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gif new file mode 100755 index 0000000000000000000000000000000000000000..36c2ec7b0d423d145494026ae4225d9266eb78c9 GIT binary patch literal 1274 zcmds$`A^da7{*`D7FsH>Ld$^m+j3(e6>#Gi+H#MM`xr-sG7vF?q1g}yCWBJ33ML&O z;}Ar%EJ`9H447=1P?QQdm^(x!0xeX8icm#mo4R*pf5x64p1jHXCZG3tlQ;VPsKB5+ zCm>)OAi#%I3BU%xd6$14aEH4c{P}GCY;wVeRuLf`v9-IQ(0%%5j*Ba~ zopQUCTWo*6Gd}$qSH!s4x~OE~v!3U_aq#Jd>F*p*R%hdSUFcr28)2pzOhbKpJwSE> z)rMv)5?a!2Oz?3Pu4Lr_^fcR}CYTH01E8BJv^7wc!oN}2hXq;aXCgH!o)y670M!8Z zuR9;gpv3@qaLvjOSrdlIMILT6U2bHct}@u4++AcsX zZuR2E83sVQh%(Y&Kr%Oq-GTbz(*BbGWRj77Hfv*=z;!9=&p%YL*CyGxUK=B1YE`U1 z?{QEasGm*M&&FSAVKjX~FF(xk=d)-4nj0)}BDFAsmYYJwjpm7w22=;3u7Yqf%}utd zD6;-(FaVdMP@9bEfPr&N)W)^S=(ylz0Xu3l>@aUQ*#AwOzfAv&#M|+mp8zt#Q46P- zzHVi$xrwKEye|)AS0&BEFEq6^^-TX9>fo~dSx-}T9#dv1SGexuUJ_6Eja?3JQbW9CM!Rjs1o(6#b;yhSRdSNOON)Z zJ*srv=GP=;rqA||O-wbv+vvp@dYvEFIz^HMk&kB#xZd8yBn0!4vZB#Oi)I;c486PcvZYO7!s;mVyX}rvQHx?;wXoi+qa;trdvdC9R@_eI z7zm60xk4+MgbWe3LXDJ{(c>D%(FM2vg!sv_FjAyMLDmSyc;f5xFea?8n5k)*Wo ztkB5lj@>pUWV3)ZZBx8dJ>fx4m6*Ebsz=G}-HH)QFA-hhRzP=To1T=)f M)78&qol`;+0MHgBO#lD@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.png new file mode 100755 index 0000000000000000000000000000000000000000..bd7f9a5e1a727a1f26dbee85c62d142fe6bc26a5 GIT binary patch literal 618 zcmV-w0+s!VP)F6}X$ILm@h4=_42t;odEO-v|?~BL3#zxHs z>Vjxz0LBwAwiYiu_Vw<4VEh4N5g3=i7zM^FT1<0u=M)sII(P2TyK|TBCnnxXNSqSa zVy0Qa%bUwEZQ4O#$^oVyU@8KpC18pIrYk(DPF=mWqGH|U(|6u)-wsTxM#lW--Owqt}O=J!*FlcUW-un9XqYqoR-b+pa0KBb>=4{QMUjP6A07*qoM6N<$ Ef(Py}1poj5 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.png new file mode 100755 index 0000000000000000000000000000000000000000..434776ca9a72fd62a77d9183e5a8d537bfdfb1d2 GIT binary patch literal 281 zcmV+!0p|XRP)i=rkE~q*mzd<(_`-LgBt1!T*xt{V2A$82fRO?a(;Ti2P7}u5bXro{Me6ru9ya{P2Kp#!(fmh0X*_QJ&{oy+`NmLmr^z zl`WY-{m3Y@qV)R{uG_Z-qc)i0G{tG9&5a}U>YjP$s%^b%cTQZtr+C6P@3eIg zgZ6AU1Im7X%DMEUg25t36jM~^yR_}s{P>s~VgwLPpB-cswgRY4&u2+c-ul*MTWjWT zv=?JQdHMR~ z>oVbLp55om-EM&HBhS@VXRe7tRGc}iZ46-eA{OgN_PmfP;TBngb^ z$umOj!lwewvWuA6H#HU*(+f{1>Me32A=MS`(0>6=b?@&90G)92wov#6Gjei($r6Wk sXXL&<;hJ_-6>DN6Avc;*m>Y>l03tlVCfuNw6#xJL07*qoM6N<$g05TZhyVZp literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.png new file mode 100755 index 0000000000000000000000000000000000000000..48a34b666aae6c1b7947fc2f4c05d146b95529cd GIT binary patch literal 1528 zcmVSOD;`dveHR>N|J3gMv)Gy{~Py z9h2#e(>YyI;skMc2$-KYW@op;U?MVklt!Ba4aLk zL%`ha+rw0+7G1 z#oJR;TN4xO9UW`c)z(|L0MFIhs;jJ=NK5NPq09$Fvk#yPh0@g4s)bYv{G1Tzj4D}Rb}V#hDapWesTO4VCd}y)l-+1&1Plk za&z@``j%MyN-F)R$B+M#NOlGXUx-9@HhVcIM@OTrT)DE6kzvlySJCON{TlZZfQG~A zfx~Bti^uSIMO2g=fzS|%8};?>wze%k|9N+}yR~(rq2Xz5t(C!8N=%$VA|W)|7#V40 zGQ|Xf^KgJ(AZUldqy+_!0t5R`pPmX1o;-I>hsWECi-AYrcZ17)T2td)M`d~^5I7dL(ia{+ zLMDrm$T1%unXj+P&rb$}X^=?30Esrn#+rykQ+&LcL;^9HQ&UwK%t}^PyN{1+a`N+l zmo{6imsh)=-$NX3EG`a8N}5KYX5nx}P>?Pp#DK*vMMQvfn-da1a;*9Ja|D70i(N@i z@ACI|9enV8+NL0nySu8&N-2ZU2RejGmHYe81_V68XXuYY2yP9u@HKBd@wz8WW>IqvbG|GB8k$!RVr+^>J|v(a|bAUW3CehJ`JLhJw_M zhljg70669H4mjLMB57eTH5{(Gcu@&5hQ(@QV}TI})MJTATu4mp!{N3M9zF*G{(kv# z_|heaNQ7W8$lqTV5b&`Esi|X;QDSUZKNcrOV?;qgojyJ&QC@qr_{;V7I*IML0LbA!clG{_M;g}H>Xj}H z`JObhTMuU|Xl=@`8JuISj(gs}y;K7$<%e?yytBAzyisb?NCZd3pLd-pXc^Jkjs*aj z`I*uD9i`@GpK@4h8-c8Q_6ng2Q`P@XxL{!Xo#y~Bu96=P7}mG;ecJd~d%1b^xZCyN em)7at*ZvQi1F0RQzOT>s!4H z)jtq{3=9?NuVr$D1DC89G%rAxe9{ob^%fwU_~xqs8RLS}G%@8Rr-Hy`G8z(zgy~bWvm=iltj&O}rI4-i%6!{( zu|pYoo44GQ<51;0TJG5zi##>Cm|8i~)40}uat+FY+6sb%gIyFGk@?9DlL`Q#R2rbP|eS!^l4Xe>UBHC|ig?Z<+@cD0#bnC*Ffru+6L$F^3 zskJ;`^3D>U7h6+aY)yN*Ch-1z>#Ga>{{H@f@Iy(E;M`oLC50d~J45Plr_S@u32%?I zzCStP<@T&c3vI4XH+XhtAxOi&fB)t#tV>7|uZR+vmZ3N+TXA}Z{OO6N&o{=rJ<|3L zs9{I;qlH#?=a@W)Xjr{&LQ1xDW(i+h8b@ZTV3a>cYLdY2Zq3Kb-GG+7*qZuuwcmr; zx;JJRK06K85SOf+RU(>J#FDOixzxI^MY}ddi!j21Tbqbn@j@H{VyTSlXi!lXbTaDE;>Iy^g;LfLFCe^W--&s>xcl`M-)iHuq1P=64aab4NYms%p1GDo3rF!Qm*| z!h@`?lX2&2ASi$>2 z%S&QW9LL2)|3KTqXweID(Iz3$3Ku=-wYf#0A`vd`Mg$i{Vi2`xrG(1?kr^2B>LA0N zQIMG_8FgUPsnHxw^KtI=m8s+Vfiy?2H97NL9L|N`hwtxu&zJVttGL4vz%W0C!LvvZ zkN=7GeDfO&7b1~+Z7sO65?WpLZESpAT-0+og!LS}6U@*84Bz%4j0Py*I8jS{?@E*Iq_D)TCH#c7o4?p{~fiDOWQmH^k zd_JE>qX~sV>NDza+zbtUnxDUv$-01Fr~8Q@AQE{A2n2#eA`y?r34#boB)^uI)qQxV zxlAUL428lYBkx(PTMBSPK&^(;&^?()=wUZeZxnK5!1Mp;RgxjYg~0f($gt zXf(vq(yRV{>d(>&0DNRH!Z=O=Mx&9-<(kdrX0utV)r#3{dVSr=<6(1if8W8rzyE{F z1s)H~AQp>Z1{6grl}f2p%ATA=dAzrSgRo;g)i5%dp4nLf$6*p2$D!5la5y8A#W)<( z`1rS{SL-RCWoPGdbo6dv0fcDo@Eun@>(S(fK{ zAHQIlCPpTq0(D&16IG^aI`^(yjV!YJ{Vn=W%esQ{{;ks(isR?z5(Y#$F+n{ RRD}Ql002ovPDHLkV1kYdn#uqG literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.png new file mode 100755 index 0000000000000000000000000000000000000000..06b53a113dabbacb139a01dac04b413e707ac3bf GIT binary patch literal 620 zcmV-y0+aoTP)c%=i$TN|0YnjbQ6*9`PrD`ct z-kzf1ehM+TpPf%8;4T24@d9;yo6%ald6Yn?aB$iY}MSZnu}qW#D-d;R2W4mXqJm_9Utu|6>+& zfM|!qq0{LM27_L&*Jv~l1c5sBdR^qGD%`i>7$g)R85k?4W|j0%x2#rcqtU4Ea~ym; zGONZFU~}~WyZyW;07hyyn^H9`2Kqlto$FMHhwN1N*8hN3t0fVy#RxP%dQ{n1s9B8U!7rtL&E2qKO!1& z{bF%#V0EHT`J5gA5S`zOddAVU(WKuLUAhwwzLdnjFZ>sjj5H@at#T&-00003c=M9>jN(gGbY%D`^T#KD?1Ewse~l_Cuw zZQYD9P%teoW0_pcQ(?omWKaG{llJ`1dH&C-YQGeW5Hw7UlWt57KPeB){TrL!7x2#MSI4d)F22;%304?YB)^{qSkCwFfKmXfv~ fOV}fgwJrSwMtOH)-`~a100000NkvXXu0mjf=1US- literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.png new file mode 100755 index 0000000000000000000000000000000000000000..aa8300ab88c0506d159c27ff1123153cbf465e11 GIT binary patch literal 646 zcmV;10(t$3P)c@;1P@<~A6%E!J%;8YWWablh915Vcx06pA3i zjYW>~aPRaQ5RD{J&4;(PEi(VP@SQ`Y)mcp2YEk`u_x!v?5Jjn2H_wt4^5i8zDl%zM zH${;~)#FU~6&d5Y z?SC-rkyilVvKU;mOfd|A26|*tdpw@#^*ZD6@Z#dP+o6+i@9p_KAgSGM*6UT0Bm({* zn}L9PS~Q#xBi48#7W^6j%F$>5FuhJ^GMQSfMzdL`sM68#!4E9|^pa1{>07*qoM6N<$g57O0RR910 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.png new file mode 100755 index 0000000000000000000000000000000000000000..1857d0e604ecf3376bf7251520e8226b8e12edd0 GIT binary patch literal 487 zcmV+PuJD_Cj=O-CW(Cv&;O|s_B*HfL9^$RwN(T(+(%YH$uxJ3{C#x&2)~Wwoto(l^%m1wm{|~eOzL|Qv-|YF; zj(>lCW6=Q7bGusn=MojDo|KbXaL&&d~@545`mvfwf?VUg8Jur!u=Tz z@c3as^V7dSzn*VtyIw5tYl#NPKU+ZI_WN4QgIP`xJq(xu2eb$1wi~5_KNhR~U&;D+ zr^v6{)xTcsx--!Uy9Q{ut*yRQF7{)Q>Zd&k?{9DU@&3Zob%k$Fu3*5E3ZAT~yj3Cg zVn^l6^GiP7-~IXK+9#{a81N^xC#x&3HyJ!woc!kO!aHZT>_`!2_)i3Qdvf{HHI)a7 dG`7TX0RU=HaFmEk7ijm6U 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 AdjJ3c literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gif new file mode 100644 index 0000000000000000000000000000000000000000..84c84dbffa0a61882b21d8cf82d402644547811e GIT binary patch literal 1669 zcmZ?wbhEHb6l4%&coxHO^XARKK%d*UZ~OcEFI>3r!i5XBZr!?k`EpfN`NoYK{rvnA z5<>3Zzn_tjv17*$7Z;Z+SFW5owff1EC)clE4-5>PJ$p6_3v)w5!^DXbPoF-$Zr!@3 zrlz}hFGfT}eE$5|$Hyl$H1y%ahgDTod-v|m%*=fA=1qTpe?mfny}iA=yZih1@3(B( zvS`sFCML#t^X5&MFk$D;od*vd6cZDB^ytyPefz4btJ&Gvj~qF&X3d&&=Z?>uIa5hV zsimdG%F621tJ}+$FP}br3J(ttKR-7oC+F0uQ+Ms!_5c5m-rnA`XHUL+_wL!VXQHB_ zFJHc_t*za#VZ-s`#~(j_Y-D7#d-v|x*x1F37oR+NvcJD?@7^_ng1l$WoMB*KIDh{9 z|NsAi4Eg}Y|J)J20SYdOC5b@V#=fE;F*!T6L?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp z&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dgxv3?I3Kh9IdBs*0wn~X9`AMl(KsHEN zUr7P1q$Jx`$q^)>0J76LzbI9~RL?*+*}%*|!OT$4(AdP>++0V&$iUD*-@r)U&`8(N z+{)O<%D_MY3Y37h6{VzE1-ZCE?E>;_l`=|73as??%gf94%8m8%i_-NCEiElUW*8ai z0#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*nV6WAUs__T1av9H3%LbwWAlpjz~0eI z&d=4aNG#Ad)H48i38v837r)ZnT)67ulAu(Cd$Af^98y`3svneEoL^d$oC;K~46>@g z%DE^tu_V7JBtJg~7K#BG`6cd1|nJHE-u9nWOMn>kY#x5>~hOUNAPR_=buI82&22Q3f&K7Pky)OC5rManjB{01y z2)!0K^@0*YZUN9{m(-%nveXo}qWoM1u!pTOal6G7r+HAlDY)HYhEuOT&@uX;Xhn)< zm=G}SfSB+^3*^9)eQF*strr0kHRJz(fB*dc_4CK~Z(qNB{`B#~`*&~Oyngla#q(!R zpFDo_@WK6ickkT3b@RscYgeyazI5@z`EzH_oIZ8(#PMTCj~qU9@WB3kd-v?#wR6Yz zZCkf&-n4PU`gLp9tX{Qp#qwoKmn>eiaKZd}bLY&SHFL)FX;Y_6o-}bne_wA;cUNae zds}Nub5mnOeO+x$bya0Wd0A;maZzDGeqL@)c2;IadRl5qa#CVKd|YfybW~(Scvxsi za8O`?zn`yFMfdYiVkztEs9eD=8|- z%gM?}OG!$Ii;0Q|3keGF^YQXVhLeG(x z$0T~=hN$RJmnc~#sh!Jr?+p_ZVdI-QV^gSu6ElOMC#&f0J;x(12l)iB9XT3l8Fq)k zRY;iO(R7Z;$Y=5le2VO>Z#lR>JmVMEX4;mLu}y(-Qboif8H+{C?o-PIm11@#ojcYm zrRk89VP3e%QiL~dj=;v|WcT98Hk%oX7PxO_Fknu2c)+!xNp)jX!p)PH+b23OSOWmW CC1bb% literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gif new file mode 100755 index 0000000000000000000000000000000000000000..0c569a793cf681950bdb6140144525df1bb23d85 GIT binary patch literal 315 zcmZ?wbhEHb)L`IeI3mn&?b@})ix;n5ySBf-|MlzF4<0<&v17-XGiRQp{XcZ*P*qjc z*RNl{o%#QE=KtsA|L?i{zr^q#2-4Eh7>EOkKUo+V7=#&gK*~XOGO+G=pwgF;IWJ?? zIvviv1~y(Lx%Vq<4{?05vO94^P2dXKF$aZm;e$$o9L&F@F0lnL^9oE9;qsaNnYGrT zIqan3CWV~cUQrGPJGiDzGGw{cV6@6KCp%v#ATB`AwS%Ej*gr6&K`4SVA}XdemXj-j zA%?A@DrBOQNp?rxj5bz57C{ECb%F_tCIn6ja9t;~s#9>mdPa7k-CL`-FO4`X#JGPi hSI6eF0i3;t*C!?3@~ygIeEWg!qsLF4sw*;B0{|A|cQXJ0 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..faa84d403a9e02ada2aff885634004e37b2c2698 GIT binary patch literal 315 zcmZ?wbhEHb)L`IeI3mpO@#Dt_4<0;u^5oX7TVKC^{qf_+^XJdsy?gih(7)HOUthj_ z`S;1RE6TxO2iLSohAg)l^j4YXWakS7#03btb}&>5`v-ezfXfV0=|`lQ5LzEwAjZ$Hp|^!UkBbwvhi07(IX8UO$Q literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gif new file mode 100755 index 0000000000000000000000000000000000000000..d11a5f00c8529612a30e845c663880f122917c85 GIT binary patch literal 1109 zcmdUuTThw?0ERz=mV$)Tx-eNZ%S=^fjXLJ$I!&ajh04r4lnWPYCn;U&>XL3Y%VKH- zDju8QqzVH^Kr%ou2nyn~U=jJi1JzGKtX7SOsFW%K#ifxjFgm=%+Jq{kB_&twOOrJCX-2{(eU_Kx7$@# zRtAH?G@3ul%fD4B6?8har>9A+mSeHllamvvRJydZq*N+*b~aHcl*a>sAh_~k!EDw) zd*&)EEF=<%!^5VoF5%R#baZ%lh(@D59w!7r4Gr9tl@*;%Ad#@TySptG zwMwPR&(BX!Ppqx2t*)*X3Wect*yEWV8hTqK2f?RQDpjd$_WO52p&+0Cptbd9JU%Wb zC);Gw2n2$T4*o%4AA`a8{Vy{!Gkv~YE|=@``JO+Y>+I|#5Tcv7z^r$5#hbWPV7Z(@BVlkiJURTE)7#Q&T z{bOTe8yg#Lx7%zs-@Z-n=xAdw7=wd@y}i8)3kx_LPOH`GbbS!ya5|j_fq=td@9!Tl z8jV)#U$0(y*4JI(P;g>mf=0VqQ9<6?THf8=m~c9fNF)LQhoCVMiKI|S1A%=G=e}OA zpPHI-I2^01t8%$~dU`q%i2wlbAK%LVdLO+(zyQDkq`j+n_X*%k1gO2(TzrQeT|quW zsA5#2K7d(Xl29xXk99rnQ!G@;x^}7@6@>tF(NP5ak6)%0Ka3VMV(JmhgY}eicmy9o zlit5{O_}vwZq=||L&zX;zG}wb0}Er}=6roG7nAdT{a?@>EKCC9!6J@>^FaeR%X2mVYumuAf?_=6)^s h=lCe;kC2^7#hrc7%efNMl=&1u)6UYV@h}*W^DiFE;70%e literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gif new file mode 100755 index 0000000000000000000000000000000000000000..f1da7718fae4f8369c8bf1749b651e0572a09cc6 GIT binary patch literal 177 zcmZ?wbhEHbjy?gg+X=#1<@WI2wBP1l`=g*&S-@d(i z^=fi*^2w7Yj~zR+|z#z_` z1Cj;V$-t`jpj5CeV_qoB+!d*Tyw#!WPW$BMGCC?(;Gv=gvKT{P_Cy>mNRR`10k;!-o&=-o5+i(W6V3F5SL; z`^JqMSFT+7{rmTmCr|$U`}g$e)1NC;q!GHlTQ2fcl$iN`VpaW6`vXg<; zIw4fIBV*R36rUrS%R*Q*E^-EoOq4ip{m{YjK;TYBO@^&U-U=yAFI>5so1chy Q%CNCc=U@2~v=tQ(+Um@-t5`b^7Kg+*wTnkX)kYMtxKJYvVqC==7BjpmFjTAu zqKFzS3E=8tsR6YM$}q5sR6xY2^Nx5X-p(WIk|wPEFZMpX&+p4idXyLyodXBpz&}P{ zZf47y34_6=r%f|6I*Y}Sm4!b$I}?fc>+7=`jhxHnYBZXqrKSG< z{<^xt_4W0ZmKG9;L?#nhtXd+GI505a?CdNQw(|K+4Gj%uv)*q1u&}UjaIl(?5LZ)E z)7jZsS@|=Y&F1lVsj1NnMwvpPsH)0NOpNgM_6`ULK%>#c#l>*An^Y>LP$(rOB?3Y9 z(a{kKg?j$HQmfUrwz8>IJQC?oqtVD@^6~MpPN&1;u{}LKg@qZ7jg3a5y0`a*Kp>c% zovp1cz~PcBDj3t#Q>Uk=B9V~IF0HF$Lm*&H4LvqCmPE>W_AFH_7T4F;4G#}rTwD|u z7H~M_d_JqZybOUr7>%#Hx&%W*5~Z>~DClb}7E2%yOeRxENYK{S*45QjPEHP){Pgnj z^4>ka?d@#}g?xB;xWB*u>Xq1Lv&m##DJc(}oSf8Zh1L3ACXIC%gc+!Dm9zU z007wS_D}vlgZS4G1OOxO&F9F^PXJIm(E0E|83x-rJBz4Q0DdfCM6< z<0~6Bp*B`cam$5Uv{%#+%PmFC7$eQ!@cx)oJOSbivW3I zF9fRs03CRnTW|BRxju0Liz85F3I41g*CN|TW1!Xn;pJA)3u-YuN1y8aaJqD-y#);Y zv4!?lDpdG9#k@`aFdv%!Ef`XLxqLTw0=!>pCK{EGtbG9x>&LcoXwNOTRHot`>U+nI lh5&s8N{jr-Qvw71eLBpXslfK@x5?>4O?RGT!##of{{is6&GrBQ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gif new file mode 100755 index 0000000000000000000000000000000000000000..0626655100ef0f6e109e3953bd2c25b7762a7f8b GIT binary patch literal 88 zcmZ?wbhEHbYb6N$v}@$uHy z)`*A*JRV6WqNwrU@+|M?ZwA`ClYmacXx+`_#qImuC6YDK%muX zOG`^Z5L{o^Lm&_j506KW(v3zVjYb<7=uj% zdM6a}YHA*zoSaap;OXh9L~drFKR-I1T2PQaH#gVYTSq1n2?WA{+05f{NhEM*XXnO^ zK&@77Z*QNUpLuX_z~OL0LqnaMK4CDP^LUrEdu(>Kw>NTTX3SzaG#HIkDpjSLY-ni6 z&c@f**KKc`5)%_mrhoPNRk2uHTwE|atC^mbDil%-1~oYN*VNQ-OUsL+qYpJTG)8T0 zMMcHV&Q@b%qrvcxmzS4Xt)|l}6A}{I+S)QQQfzH)$HsceVm;L{V?+FwF07~HNk4PUs0U#^@o3x1$#XxU+ z!meKN_(^8%s7y!1UAF>C!|i;O@ff{hnfKIZY1c7ux~G*RdYkVS2v|X37($PzED8(} zh*O)s$#r?14#8#?hCKzJ-Tyok%U`J)cfj1khX)7znow?o7QDbW1p`2ENAaB?Yw{G# zruvz!(s@&ClPc?T2f@+Xe_Dst18Ig~Vuka&fva|mji+v(!cp!w`CQdkDM9&OE;Ir? z>|VZO6#tfgbnunvj`u;>&G|4~bL#tcK7gtJGRa@`9INZ=b#kW!ggT3oc)r$g>bK{a z;{i6;5U89ODIB4D^YTq|ls*A~_&7p5KUgVz?!T?}{XrH6iGf5vA(~bG5;rJ1r;(O? w0B5qky^El^zOJn3@aH3j?E~>qBf~)vOa}M`^AA_)wO`y_Z@IjJLV@r91JG3k)&Kwi literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..c778014544da5a0c6a87c3c7df42dbdd0f5d3fc8 GIT binary patch literal 691 zcmZ?wbhEHb6l4%&coxp^`Sa(qXV1QT`SSPg-|ybNd;IwEy?gh*fB*jJ)29ay9=v_~ z_Sdgp7cX9X{rdIYyLVr`dUfEyfg3k&?Ay2R&Ye5w&!2zs;>D#)m)^X2vth%AD_5@k z`Sa(=lP9}&?YedA)`bffu3x`?`}XZ?*RIW+IrIMg`->MZK6mcij2SaJIy!oKdUovC z@$$us&6_u`UcLI%sS}NjjpxsuTd-ik`}gmE{`|RV)28j)w{>@SA3S()-MV!xEiGHN zY&m@R@W~S=dV71@+S;Bzd$xD)-ppFe*cIdbIq@#9;!Zk;n{&dHM}KYsk!)z$U& z>({4GpMLxH?b)+uO-)Vz{{4IS@ZqCJkAD34@!`XV%agyi+R^D1z-km8;vLB0>Fpls#mXKM#w_Z@z%VJ$-N%p1 z-_Dv#DlAM)Ak>dPgqtUjO~KJbH`p_TRZTj~lO>GDQ!tpro=Hd6)5j)&omXpd2qz~O zBd>v(xR+@F3%5RBn4h;dgHN!M44aonfIhb7}Nu&DJTS} zIy5jzE%BKtzVwI)gFAs*NMMHu43&+AI3R6|YSu#om5|~9b1w0r|Bpx|1 kd2_~ml@kXNTm)Ie1(qZ@G%oJEyW2Nr&W?)@yc8I$0W=ON761SM literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..84c6fa2701caacd05b950306438359bd9fbfb29e GIT binary patch literal 1129 zcmV-v1eW_pNk%w1VG#fk0Qdg@p`oELFeFY&O3BH|VHg;}Wo5#BeRCHVyBXPNPRhi7hS3l9IVzT&z$~ zM@K)3IXQe%O}cGuvQ|}D7#O8lSx^7~S1Bo@qocQ5TcAWlw_94Krl!1LV31Q#wpv=T zRa2x*O(rHCzhq-9;el<0gIy#IsGQoa+pH)>UDIcavMNJqOPfSeR!osCW zM#Xq|!DeQ}jg8*k%K`!dj5;}qE+-5O3A57eEiEmv zRZx~pNk}s@K0Y$Pe}92OJ+xR@wpv)sgM+?mYO=Dj$$)^^x3`WmDMLR$wQg>hJUZH< zqQQZIxLsXuZ*Q|{X{}gT$&QY*S5#jzFoQ)x*Q~5V00380Q;t+oXlPw#IW&epKUpd& zRw*f1Dk{QeW`HFkkyKJxDk-^MT@@7&kTf)+Mn zWYwpqem_0ixVXWIi8BNQu~k%3 zU0q)o7}u+-xo&Q_Tv^9?dez6rX$}s#X=#;2L?a_3v14PiSXQE0S*uS-XJlm3si~h$ zMzdE}RR92dIy$XYRk*mg9UT_LYik7s1-M*Vv2AUqr>C7rNRN+?q)0``wY7mhJ!el$ zpF=}1FffNSF?LKsGBPK0HZ&0t5y+R9r%q0AN=lGILjV8sy<%dbOiZRqO2?3prBY8^ z000000RR90A^8LW00930EC2ui01*HY000R80RPDvfNM>;5|98WlyXi>olyTUeS6j; z)g@cmkSzJc=hQx3@&=?x*G9svC~{;3$?!xK9s|h+wY#!x9;I0#eo%wrtct5xcYIZt zfK6DL58=2dxWLX5BRZfs*;6;e&m1^O@R=xJA<~%!TOQaLh3XiO8*G5-GXx|-0!6IQ zxoIV4&np4s()8L;V8H?eNAi@qmXAg*a00AYQv(Bm3I!UPg>i&I6oC~l1W>?XZW{{} zp)9VpB<0jO)Dg*+pl2pJelED%ge4+oz`ty vBaRA*M1&MGi5`JC@s0=ejKM(@{|o>|4E{togfT`eqDc;903yUa0RaFzE9T7z literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gif new file mode 100755 index 0000000000000000000000000000000000000000..4a1983ae9022e44f398e3a9a0e10b4ac94956f1e GIT binary patch literal 297 zcmZ?wbhEHbH{jaY6KPTt^lPCYL zUj2Xj_WxbG{_oxUKOy12oZNpEmH*Px|KGj)pO*GNB;>z@#D6xn|DvM*g@pb;fBv6` z=YM(me`DkSK)}ENAsJ`~6o0ZXGB7AG=zy#M`H6we%|U>pprb~BsZ}84MvcYf^T#hp zSlP?=eVKeQWLv_@2fsKg4hR`M-?MkZ^@J0N-1pVQm{;ypHWiprnIO&Q&BHGtFD6p2 I;K*PN0Lu?w6951J literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..d31bd9b64e3c86a5eaf0bb647179307f5c21a93b GIT binary patch literal 297 zcmZ?wbhEHb;JD^`~T$0|EEv?|N8a+_FfuSGFzA3R0r`o6&CNmJg+WJ+P)oZ2%ZnO| zDd*KUNLbl(^nGEzXs|6o^WiVUiUX1c&-av0xc=Z&0{49_DW;W@io7B-DidUdyv4+& MH{jaY6KPTt^lPCYL zUj2Xj_WxbG{_oxUKOy12oZNpEmH*Px|KGj)pO*GNB;>z@#D6xn|DvM*g@pb;fBv6` z=YM(me`DkSK)}ENAsJ`~6o0ZXGB7AG=zy#M`H6we&tXD=hmKVL2^Efljv4``qZ>B- zEKr-@zi{K4I;%Nv)EBSpI3L;gUHHQs)%3pTn#j}VCp7=i^V4CA%$1E~V^LsjNSEew Q=HZu+7ZYhyaAdFs04Kp>J^%m! literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..fb2c05fcd423064deaaa9f620c95152ab5eac9c5 GIT binary patch literal 305 zcmZ?wbhEHb;JD^`~T$0|EEv?|N8a+_FfuSGFzA3R0r`o6&Cg*%frpM%{|S{B1|2m* zEyo2e{4CIz@1L-7O`X7;H|&cNJI+ToeNX-{$2h$&`c1^?^HUpt=!KcEMCNitGO{W# VG^EQ4Ig5!)%S#BiDL67%0|2;Adcgny literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gif new file mode 100644 index 0000000000000000000000000000000000000000..afe0104bd6140e76bc00736e4217bf08e6a22e7d GIT binary patch literal 2092 zcmdT_XFwBY7)}(6R9v7|Mdb`=Q6b|PAyEWO02u*6RHRxB$w@*;E+#?1ss+Vrs|9hO zf`b5+rL2IUh%sOSgdquArqGH=F*2%H2fa|y{wV$5_s88gp64Ck`+RpUuFke3`h3)U z)N2{)(W6IRUS7@3&0?{*tE;QLyj(87E0@b-Vq)s*>gwz3b8>RLy}chke27M)Yiepv zoDdck7CwFYw79rfCX=yPEQLamot<5fpWEBpW@NN<`SPV=@fET7nvTwNl}g#$+nbx4 zd;WZ+Mx)8k&*X4?($jAwCMHUyB^4DFE-p?~Dpm91#idK+4o1?xm+E#KlFZ)paE$C7Br+y1KfJjg8ICWfDnBUS96t;FH?g+LV;U zHEWC;8|&V^dpAD*ULXh@7a=&Vr*<|Z*TAG>#I`L*4Njx zwYB;CQw9eI4<9~USy@(En%df`mPjN-;u=Rs%YlIbLqo&b+RCh~Og%l_k>TN{riRhc zVSRo5s;a7nhB~FPA}J}!)s-}Fp1w*|)!*OW(a{kax;G)=a!X4~csS?m*;uu@nnv@8 zjy~<@=jZP3*3{ILoSdAQd4tJhy1BW@WJOU?QCV48QfUEVuV24%aBxs4imqL|+TGn1 zA0HnT#ZxMkt*xz#7A<-+HkOwsX=-YWh=@3OQh5LV{m4k(9lq9s3jH_1mXxJ5=rX=1T7GRg)p2aqK8@VgeH?7sF08$VDm+6 zmsNn_jtmdI)Vvt{ec*Zj zv%aUl{o32}q`RxLqrL5MYfE!eV?(`KRrjd2rn*X5Sy8T#KP)SiJ&@inxmSGmPEq0Q zf_zC{ZccXAt(%z{>1nAqeo0AA5+`22cJ)d^{N+m*<1U;(cQ*D+O!UvEPyO`c$rC>u zk2-cVGUEFqhYx*sFgz^uK!`{v*w2S~++a=+n-#bZVlo2gd-r_1d)GJqJN#@fmfL@pH8!hGG@HD+J0US(>6SqT`g zSia0?>5|1?En2w1&|v<&xpQXg&-zktrtTLrbf!;3qfjf~=pauS%3S+})BY_{Gc~AV z9d0=c^sSA-UzlAv4x9p}$($b;0BD`aQ;Ts5$CnjuCv~UkpvIi?OkLe)ti@lVIykO1 z-y5Jjo!(Q5v06BmG9;G-dQr9*wC+#Tbw=-*jWOH36m525!-~bGw%t|bk(qvTQG*So zG!$y~A#N%4w)twxJyxCB@P(r|Z%U7HdBC&l{@|Wr1#B@>N4_%nTA9 u6BZn3VrJ!VhzL+T+``Ri)pEn&(UC3&J+BaniHgVDC9S1cI29Zm7_0&H=@-WU literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e4c3645b34b46fcc70ba37ae2b7dbab3f8a306e GIT binary patch literal 843 zcmV-R1GM}{Nk%w1VG95Y0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui01E&M00#&t0RPn*NRXhwf&>2@M3`_PLWKn(HjH>s VBE?!34JvdeqJ1t0 OORCzr8Uvlg7_0%j`wztc literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gif new file mode 100755 index 0000000000000000000000000000000000000000..ac3da1476b7823fcdddf0830dc5fbc801870f7c7 GIT binary patch literal 62 zcmZ?wbhEHbUp-6H@0{{R30A^8LW000L7 zEC2ui04M+t0009*c)HyFFv>|^xfs{IiVz+k1{b##hJmIjQJB>#2k8q>a!n8R9px+o fpy#vHQlnB40?ZJXjAjOEaXP70>l4fEb`t|^xfs{IiVz+k1{b##hJmIjQJB>#2k8q>a!n8R9px+o fpy#vHQlnB40?ZJXjAjOEaXP70>l4fEb`tgPW@a)lF#P}jA4uW?ia%Kx85qPEbU+F~ zb~3OUEKu#6c4a~eQ{W0wm(Zhq9fHR0bsS?#@@vw{1Z3qP0hjafQ1x~CU9bab&X J268Z10{|*zJVyWk literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..879f1dac388aedfe9b6217850e1ff5897c0ac8b6 GIT binary patch literal 189 zcmZ?wbhEHbV2y7c?^?_0NS{rmUt>C>mbe*L<5@#23lV88(sf3h$#Fo-kg zfaF1TGO$`bQ0)spI3YQJQPfq)$t7Z~2BUw%+pWnwyAymFIk{pd&p#5e+ksJ?-TZaxEdiUo|Ns9C3}@2P(in&Uia%Kx85l$ubUiwVljVBXR>Exk>BMT+4;_Ff^MbRK9vDMymd^1oc)o}L6Px6 z>`BW0g7%JOF?rF#+=4#w0{lL+l;#-L1vV!x7LJW~G3&}$AJ#8m!Ys(TC7xlsdFA@~ YmS-%jPlYO-z3i)d?fQ+Is)`KO08fZ=vj6}9 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..7d7d00e06212aa364adceaaee2d017fd749cc979 GIT binary patch literal 303 zcmZ?wbhEHb)L`IeI3mLE@#DvL@7_Im^6}QKTPIIGdGO%Dj~_ptKYzYu%dJ0u{`~my z=k@E?moHzwd-vVz*I$9)$&)Al|Noyk^9&F$5CIf_vM@3*h%o4Y)Pn3}U|pl2+Lw|! zFJslZH=275Z2U@c@Baun#PLwsNSY-`ny205*v0_mgDev>j(l7svY1`UL29nU4#8QU zS!*?wu0|NG(m9m`_!qJ{Ydec~Afd}b-lF{}%0PFyS;8}DM)m9ajopV5R>kbO%$!*=t^_46&y WSX!S7RXTgwSNGcW8#h%I8LR<8Hhd-k literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gif new file mode 100755 index 0000000000000000000000000000000000000000..fe1bb0da01c67d7e747a84cac85629a052541dd5 GIT binary patch literal 182 zcmZ?wbhEHbUlLGnT$6EpbtT^Bkw{Ro(yp|1+FnzzP(9vVg^P zKqSac23F$-!HFrIf~O>AsJcdV9+`Hn)KM?`w!@Z7+ZH5$;bP)C@@T2yj7YKenGBOn Oe0h2#+nP8S8LR=;PDG;s literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gif new file mode 100755 index 0000000000000000000000000000000000000000..f7f4c2007b0bd1651a3faba0b2028938c07870f7 GIT binary patch literal 183 zcmZ?wbhEHbIfZ|UUu&fS<1lh^J zYLXxvni9!*hGT}Rikh5kdv@>Jk8fYTd-?d)%luZy(%nY1@P3FI;RQM;@gr&5Y#g Tjbxc@qNva=*|v#;k--`OV8&L@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gif new file mode 100755 index 0000000000000000000000000000000000000000..2a94eeb93f43211da015b194db1041875fe809bb GIT binary patch literal 1100 zcmdT@YfoAS0KHUNVbd08tBuxzja{VcqO+T=bDL1KC}ItjIYY9=wk9>Qtc@!0MH7heSbA4^CwY8DMDZ706Qv^XENCCr7>2$h8@(UJ= zU0U)Q48Kbx{FWB3!(rEGG}4})(9lq))9H5Wl*+EYKE>+lA2yqlZha<@$u2AsVNqVvbwrjRaIp& z>7G9qO-?$LO6B?UL^Ao@%F0S)WTeez>g|KzViULO6ygZo8AMY*{&m&+v-3Z>HS zl9Cb{jRrw#9*@`C+pEn>EJUKZT6&3Y*cek%k z>2f)_T<+bw6+=Tq)z!gn*P5G~mX>@blTj=dd%YI9Tr@DikBvR5)9F%DQam2FDd-u+ zI-Ojldb+&)XF|eBzu!-#Qa3j?9FE|y29IZAdU{%|R+p6(%z3Bze7;B|>gf@(*{tpD z?fLn67OQY`b8~ifHZ?W1rKKeh2w1IF004p_$p2Hszeb|~00Pdw&Hwfj044zZI75?P zM?LxC+e3-%HH3SF1JI@6_XsF-_1DMG85mq|eKYO|8Ut)d8SlI+NIWZN3P=YJHDVI8 zYYv8;z^adG8oI98YqCnuY~=W)V%h0ug+wyySIVjM!~Wq!uawNYSbwLuvJ)=+@G$4I zmrK7JD6G*OhkPJm9P;OZFU%smR1Uz=+)b5!IV&l??I=(i>`4V%l zpzppv=1pZ~65;dr+i&T0Jp74{Y|fikLME2@12YSeqny!c^zNHPaAE$dpD6_g{)QSq j_z4rD3r{Z7ojx8%x_UC5ux+v&!{GE+YQwY9XdwMR4>RzF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gif new file mode 100755 index 0000000000000000000000000000000000000000..8dcd7c006291c272c7c41036c707deb3887d6ff2 GIT binary patch literal 1096 zcmZ?wbhEHb6l4%&_`ZqZ{Q2|#{{9&m8N$NC_wV0lWo7m7@UXJ7TDWjwe}DhkvuCBG zqyhuIfFLI)$KKvPB_+kq&dS8ZWXFyj?(Xg_EiL=@?c?O+?CEI_4-b!ti7_`fKYsl9 zg$ow~0|OT=T9licd;9inQBl#<)YRFtXD?f}XywYK8#Zj%zJ2?oNfTRJTMr&Q7#SHZ zDJdBl8Qjp&aP8VP1qJEt+qYO-Swuxe_4IU3nl$O?(F3BQ0ud1r!NI{UE-w1|`g`{5 zynOj`X=#2%Wl2M0bz@^=TwI)uja5@q{rmUttE;OgPMo-S@#0gbj>W~rtX{qH*|TSP zdC7^1iB?vohYlUuxN)Plw%UOM2OJ#ie0+R(czD>@*}1s5R8>`jf`U|46`GowG&D5S z)Ra%2Jh^7gnyjoWb#?X9($coJHW5)#V`IZrtCsKGyLb8Wg}Zm}-nDC2QBje#wUvjb z>x>ywuV24jTU+bsl)%HwJ9+Y?g9rEf`S}P62^kp~g@=b^XJX6AM4)|Ho+Pngh~ zlaneWB;?@WaO1{}&d%x`JGRZ5HEY|pZS3sqB_$bmX4WM)OwZ&hqD|A zFkRMgk(>Fzal`lT5yt<4zLtcWZ>6nPH zlV}nv!-D0ZYyw>}4H`;^r>^!c*mZ)nV98W*PU%&93YoOSbRx2{LT2q=C91&d?eKNS z#UC3dIq9uo5V*wUEvDD^XIIghT}Sv>wW3m`7?y5+e7j$;apB^p7n&p|#c`JF{1I&n z$(AUUQc((OQCMnq_*b*yF=h?{6_ZCB51ySFaH(EE^&;czLn|Dn@dPYLP!LpqsHW6$ aNToZZnQ=$5&6;UvXQipBIcd_QUAuNED=Sr3S0^SW zT3cBJ1qG?9DyXWeUc7j|uC7j7TP-dwX3w5ITwLr?QBfHg8GH8ZbaHZvjEbB;fBsPr zIDG8b;hvs$At9lvs!9(}*X`T4sHrKlv9SdP2J-OoZrr$zmyeH)on1pi!_UvBu&~h1 z&Q3u=Iwd7VQc|*^vHIGzivLMy zhv&?hGYkw2|Ns97lB0l<5K#Qd!pOidg+T{o2q;f5aQtV`%)DTjFzH}3yRv11!i5u! zObl|Kb2t{XGjL2iqGF-2;8=@Ewi1WNhcu>s4u(}SoDOWPt*9n$V!5@gRj!$WhD3 zXQxr5&{U@Yp`4CM506N2*L?V*Dd&7b$&>kj#;oK8)+(lUS%*aog_rQDvWatSU~_S5 OY?4&43gF^kum%8gEG!HF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..ebc745718a3bf0b3ea032d817d0c9ab7f9c55f77 GIT binary patch literal 682 zcmZ?wbhEHb6l4%&coxs_`Sa(?moGnj_^_+1>*>>{Po6xvckf*RBm4Hr#*k;K-398#iv8GiT23-Mj1R>bkqT@87@o3445?&#<^e*E~+qenk|`gH#M`F;ELEnd91y1M%I?b{C@JXo`4&D^TT8b91RMFoZ@)v#@eRhw-w781aOMs6~VahlldI6H(x1VAEg{VA6_?iHKuzjuaGQbdgn*4GuH8z!fJR{ggM*D#StX9`gm3I7U?= zAys|*sHl*)7g*zj7YRHtxR4qlUKg{i;-Q1;fp$G9uBw+xOc)XanK)X{qHY>}*aPgt(nyzj(mIuBy2xv;O8<`jyJ@i&!um%9- C9yqK3 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..1c7ca08350708c8b4b72ad9838822f035120f2f1 GIT binary patch literal 1120 zcmah|`A^z+0R3pcUiGL%!y;O5owMjz=Zwc!Kp}p=90Gm?L98cuw0HzOrgR>dTD5po z*QzOYtDCSz@+j$re}l5A6N$-Y@TmmzVbtMrvGq z0S@56pQk{M#~b+AR#nyE^z>7ulEY+9W7zQU@E{Bq!*DhLTMETee*PGPvDw`{E6AAS za${qo$1%)iv+)2}kw~63HqK=V)^FTcD=GPkkBy?}lWY+uHrk?4jE|3xqR1#p@4+yR zn;S1QSeTK)bi4R4g*wIKbWtc@(rCT>^luc3P8gQq@vH!U48trxn3 zH~|2OpP#F%^OK4SW#HwTT;|v1<@*y8i@CY8nF75?v`|(y04F*)I2feTeXF&VOdg<8 z0|MU5#p4ILObCKX6JsXQ*b7BPECktBsiLAn*VO7C78eKTDGe~J#jvBr^^z^DqrQ@=; zdwNEAw5`5AEsM3-(h^S~OsDhaGBedwvc0_>%imv%pfn0a4#SVrm@Y0Z6Kv+j#xgHB zSO5TuQXL%~LqmOAVq#zb?$cAUA|s75Sx^vRwW_M^N~k#cgO7;B8H{VLC|@opurxG0 z9~#n%(_#2y2)fYJ*f=W?98OJb$Yc-5Nq5qav$KEhu&E1T5sIdSgoI#t{6jvb(P&5{ z(sE(JB#*}l4D|GLdtoxEGdV-4spkB=#)O2Wr6rwCr^2wb^9=M7sdTxra*#?95xgJs z(=AeI763RLj`<03MN+s{T&&e<@p#XTuCC!!dQVT!W?h|upK+kqPjVUSH8tki+V5v( zxNJ58zzoJSh{g9X>~1RU`1ttfXm3xe)$w?hm6c1?)z37Vr}g!Yjt&ghiz6c=s~sJt zYuP6!Cwu+*yWZJ3FBAwPBCK*bkw|P2 zi&y0GYv3GbXJ`NE|4`6hkR1T0fOzgZ{{(P813%Yje$?+c<-PQX@CzgQEqr+TsN>39 z(YN=d7p@jYhCg3T%<;-?WsF&0`Z`(m887fou5-n0Xx5t`oA14XE${kf z2M6J|TiHI!SA`Y};&pieGxiA!-PP4PLYd{%oesR!)_t4=$r|;uk4|pRuke_!A^c%@ z*G9ITJq%5Fj=ZKjOD+Lm8XNV~o0FmMY$?Cmw-FqF+Wee!-K)>sj*oFZ+)8f-z3;2V z$**k-KCY3!MgC4B0b6w6t%QMbLT~L|k=!*Z%kEK8Y<`Tw9$Js{`NBU?G!rOPM=Htg zs;XORB8_jUmrGhxh$Z?xdXnAdTWfn+czN+BCR& literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gif new file mode 100755 index 0000000000000000000000000000000000000000..eb41284aaaeaf9d9216a2c7d0bda260e83db8d71 GIT binary patch literal 1087 zcmeH`+fP~t0LBk;Q5JMwSTA4|JCl{BS-N$#Q`d;r7SPV=scAP~rVopYWQldjl%z2v zZSB^Ftq&9jG>VpTk%U-*f;Gtfa=^p%aM?l33b>(2P;q41>Bi{)vG3u__xQ^%`Izi$ zAJ_Ml0cF6x9B?=s3kwTQr_*dUV=x#Zk*L?}gTWwzAYQNc!GmuR1a4|-G8&DKAM*o& zWeBnbgUfzDjH2l9@GzB1X=`g!&CCo94H1cjFbw;AKDAn<(P+ZqaDRWlK)|EZt23F5 z#bTM8(Q$z;;ya+yrJjg9qmI+jYsB@#((ZB=vgg~i3iY<5p7l~hzz zq|<4wR)wOzY&L7L7&x4s_Vz0Zh2r(WfzJmy9543w|H|{CXaHG(bGd(D*xA!_B^pIX zMn<^YzS2@sGPyZ1Ax6<(!(oKW9q@SEOeRyUR>)-IU0q$NR7#~%4Gi3tX^$%IV~b9=L-tf&z=)9_SD2f#w0=yUQPOj$#Nn}KSj$@jp^mDi_lW8K(J$+4({ zJe@28JL<@k)AFnIyU)&Bg#K;(04ZoHVr)LV{C2)}z&lu{k-ittpuc%Z;sA%9^kj z4n1+BrTV0eRnatPr4Ra`KTbWh9!g55YDGLpF1Osp*?)1L7vI;P?~6~yJup6@Bp3(= z{+a@gj*dDyI(Bz=H5$#{-kv}pV6)k$r>8SBGwbW?6bgmQ<fYY&#>U3x=4Mw{*ZBCj%jFUZg)|yXBoakMMU9M%@OZq^($coJHmz2BaB$#s zI%j90{r!C^m8w)KcXoEl%gY-ZYv}+sw&}^PqSeWkV=>fq6GMPL!_C7f|xuT*Bi@jmD&q*ZglamuBvjKvX z27_UF*``*jFP~^M!Lv09$%PYSAF`VgtRngmk)aUua zZqg&hY$;3z!pFb;rPJ-r{0jADZ4TgP@`0bNmt|>I}5wk#-mgeXCCI;|yf+@q% zkNYa%=t)vTQV^K5_I0sdcqap|#_8cL4e0CsVKvBb>^ce4{o*hwx+(j^J8rU3>)~Yi5plJ9zT@x zakBphR;Z2E-gGsT=(k;b8+e;7e!%j1XD7VDu!vW3K7CruAhtV)p8c!;btgB<2fxFR zr$*!-hxK6`NfhBkPBb#|ZhfWgoA?;CJPF%W`KPh*A&w!bcpfl;jxNWcGVpK@D*z9* V*Mr{)kS@dZ#(z@N@m^j);(xAOqequ6U3&if z`OB9tzkU1m;K76M-@o6wb?fQVryoCl{QUXznKNhpg8{=p1I3>#j0_AR3_2i(fZ~LK z{eMFUudl4BFdq|#XSct*B2S2;x0^Q;vlP3Bhre5}s4QP#;M`yzA8%zTPd^q8-e3<^ z&-J1#;@;|0xU7PFgBA7If&~HVx%iycd z9H{KgrXbJC!R7Dj?(gI48{j3u=)t*$%}2{IJZ5Ip~eAz4-X3z6b}Uj z1qKELhDt<%Ffi4prz9jBxqg1DRZ@IVPPJ}s&zP8~Oh=JEK9MyvdP+rX5D=T2o7AJD z$BT=lSy_BKI;^a$Qx+D#adEX-S%*MCt!QXxDJh&lI*v?8nLRp!K0c^iT&rGQ)vBtw zU0hB|O22AqykKC%dV0%~leoCJpGQWnQc$c=O2B=68yggVKt9T$p(7(2!I6>Nw6t+D zGPPV>RsaA51OqTIFvFmrt58i@Dk=;N3GMCe6B7;`92Eov1Ofs9;=#dRIx|xzB||?y zXJlk=Z*PNITB}e>5fKr&US6qCP_=S$yk}>xR8c$t0KkBNd>|jNX=$`;Yobt4qgGa@ zRaC`=g^!PqlsGuAT3U2SLwHU~XBHNhOi6AX9hFE&c0oLeJUp;sVu>v*;KamwdV0fk zb#6L0si~<;M@PbpjMmoFTrV%bb#*N*EtEJjpI1|bM?<>0y02?%xoK&$S67=rJ)fVS zg(@kGPfV^@R;Wx&s!mO+PEN&lch|12oKjG*R8v|I5S~OsxLjP9R8Og9W-%-*e|~;e zEh@ijYmZV;wP0YiVq%6rKcPiGPfSc#Q&V_4Iz2r(tWZ#)PD-v)N+Tm9p+-W&eSMfb zJjZ!?eL_EtP)y38puUxrx^HitMn*gw9JI8w+qATuLPD23Jjk`Rs$ycGL_$yi0KbQa zu2N1_C@5eyGN(&Qu~t=LHZrSFOpP)xrlzJbF)>d{O2C(ws#;bC1_lZW2!caC92^t~ z2nf&5&;S4bA^8LW00930EC2ui01*HY000R80RQa~AZrS$TMr&2NZ{mBsY3q#g*YRE z)E#oa+}!)-4UCW!h7bv$cMeb-II0jJKw@T{3nFXg5{OUe4%i+KB=&PV^j;nC|idbO)j7d7LXo;j(B0lpuv(85rR!Nw}AvVJ;!KGqJRPu zE(;M_0QjH+-4M2M9c{@x~A~a4^j({{#d8JG3Rny8r+H literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gif new file mode 100755 index 0000000000000000000000000000000000000000..9aebb032dc71ca41625bbf47fee7b0d7c5323302 GIT binary patch literal 1109 zcmd_p>rYw-00r>N3RDCuY{scsj8a&1bBnsQ1vZn;W=%_D zgO9~Wn2xm)Uno*}h)hry3>CpS0Y&j%9?C_7P!V=T&~<@gUB~D1 z`}_O1wycpz1VNDb`56+4R9jo)@wlwkRk>USLCa?x4sd2>W?@0a?d>4A@bcx6R4P@egu}zbe!mZfU0&~& zLLm(V{4ZX(x3{T@3^5~sVny95G(&2F&SY$lVA#bOQ(4Ly7Iu&Sy` zC=?ov3!|f>eSLim4fUbWf!pnHI-#PXJcGetHZKhf3>b}*!Jr2O*Lr(<7Z(?!(c{z8 zD1!K%PRpZ5O=|U&%e5K|2Jhbe#%^CaIXN+#XIEAXQ&SQG0p~jFZ81X7hRtRL!HuS- zPrJH05#*0>_;7G=&}3Q`i-!ybtwtl;+_byh?zy=+7K?=-Hm6h9)6)gR*2&3<)>dw3 z=PeM_cXZrhGMTYhRIk_V?d{do(RsWsfuMDKoYUOgOrc!ka=8!$jf{+h!=cBIzf4b0 zZ)|ML&(B|9Uk3mnkw~27|5L_aXcPb_0qXhu^G^Ut37{r7Z8NC@`_UKrtWwbrm*ix8 zHAVz|{iG$CzFqis-EH&5lFZ6axRs)143?Pk0D%#&9bH}cU)*$TRidi^RBn59_IZ(#C#I5M^+xx5}*L(cpvmHQU8klI<9y_E7n zQ|9-B@2ujky*@~^uF%Ud$wiz(A$%{06IbRuz4Fjsa%r3dpsSywvdY@hXyL5STC;wl zFvzsA?%CVxcNpEu2Q^RezbhDu;tK^gd~pgr<6B*6UwLW^YNA5;_q}qiVrSS_nv#o4 zZJ|#RuUyQ1PIxVEB54`h6T1H$Bdzk^yzH5O;uEl({i^!M?jCZsnDI->&;E)F41g?u ck6dTDP8Cb0jc-cn(Xy+6?mmD+p@8@Q1M?o&7ytkO literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..4ab4992a10cf7060d29a72b8490050c14b6c406c GIT binary patch literal 694 zcmZ?wbhEHb6l4%&c;?CQ_3PKmmoLA3`SSVm=lAa2J9X;R#fukz{``6W{{3gqp1phb z?$V`8@87?_b?esY)2Gj!J9qv1^?(2V9XWEOtE=nm*|RTRytr`T!uj*(A3uJ4_3G7| zH*fy>^{c6=>EXkNw{PG6^5x5i4j#fujoKYqNfuI|8r z1GTlad-v`=di3a{M~}XJ`}X?v>!(kjK6vop`}gmkKY#x5PYghoA?yCG&b^aS=P|DfX)FP973Et{%=TEbQz~i#V*^)jc>(Y&}?* z6izHs=QB2E@^CP;bz*dqW^k6bbJa3Z)`0*Xjl|9d~8->5Nu>%um%7L@Crx( literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..7025d20ea0b1518b7ca830f576c77ef8d9ac7b93 GIT binary patch literal 1135 zcmV-#1d#hjNk%w1VG#fk0QdR;tx{5P78ZvrEG#T6yOjY2{~LNUg8c$-pExO8$65fMEA0J2(F$B>ZBlaq!kD!sk29UT`? zOiaIVaga1KNec^;H#UA!P}Qoce^X4FLqpfAtFv8Qz-()$OGjH*RaO81K|wHTEG&>x zQmBTv&5+ZUzPh*4E7h1q4|D0J2t8 z&(F_iWMncjCRi30d@L-%k&#pu7OzxNCnqO!F)>n3O2B=6tW{IASXRP)eWOxR5)u-P zF)_-ap>A$&e^gJHQc_6(08mg!K|w*VR8pc+Qif7evQ|=#JUn3r23J#0m^?IiIyt;y zVZN1>e>^;!R8oLcPP)3fyKiooG_ zVq&FGPOno=xn5p&A|i27PQ77ZX)!UcQ%tzHxUEr7pP!$HKR;S5ED;e5wS0VoCnv#j za9JuUF8~0ON=UC+R;5{4!ftJLARvxJM5Q00960{{R3000000 z0000000000A^8LW008;`EC2ui01*HY000R80QK#8unG$wY6uW0P~gf5J`9BP*^{P* zOFCh;Ea5s;Y=#&VYf3yAmIq9QL}nsHVCQZYws(?lY@_naMv@NWzQrRWB8`h5vb2z^ z_NPz^UGU(TB5;5h2VN@V)rf^E-#s>O+L#M+;1#nfFS5mG0>Vwc7LStIA+UhKf?Lzh zF$p$LT&X}FV9~-sfI*}|i@cD^K~GsXG}p%90S4|_A1lisREj2qh_@%|(CHvCC5i(8 z06GN_V5HTqFC)6t8`Tb3Gf@Q!02mFyK!P2bObl?8i&eM)03;*`V8DO_W4$t27%)d$ zoFxK436Kz=fD!zu&!9xRvG!VijL*$bWBY*@106VNY B#V`N> literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gif new file mode 100755 index 0000000000000000000000000000000000000000..4542432ec8f314da629f445fd09963aaad94ba65 GIT binary patch literal 1105 zcmds$+fP~t0EZ7N1zW9Cx0yDkYZ_}UnKRC1#&&&JyT)phI#DC6g;W=t;*eCk*#;9+ zX))8ePGu<*1w~c_Efp^aDl4EcvD^+E@d#2bUQjLy1vR^539J9czNcTlx8K8ewWuKf zd{r`#4E#9*gu`JF1er``Fc?frOG`{l#9%Ny9?$3VDHJbREY|(|coK=^^?Jv~#wZl5 z&1O?56mGZM;c#qhY(%5c-QC@RfdRQ(URqij2>4AVlgHz+*(}r3(|*7I!iA5XKNmpI zEQiAp3I$%T$K`VE@9+2a_G&a5zuy;$gsQ6v0)gP}-7<-!4+OPzI(>MU2SFyCPTSGZ z!Q;`*W-|ybOiT<}t=jEvkJ0$bYBki?m#?p{uCGIFZ6v8w>hU<2mzNh7q@A73csyP# z?p|G8)@YP=yIrr>na!G5?4QxmQ4*y?(2S#4?9t>ET0))9IASc>VqTMMdY0 zMnghE!sh1Y&dv^--LbS}0l|5-T0Sx|Qd3hiH#cLk=m!U%$z-zJ+|1_YX0ce@)z!sd zJh58MLZL7e3b9yBKA%4`Bkb<}H5^`oVX&#GsjjXJf)qp|5r->YSy^dlz!?nky}hVN zB#Om?FlE# z#>U3_`dXt=pPHHq!;2La<&j8)N~MmCaX?VHwzhWS#Cv-EyxVQVVzGI7c@zo-004u* z5R1j$j{g&<|3)GJUXBs4`(1>TK#{ zKG%2caYk+V^|~aL9(_9b%rWj4NHyYe(mS0){K5Fcalf5y%EuxA^t(q(uf+Y)LZcJN zIe^c9gqDFi>iTKmQ{MtT6Ok`@^ca{$;Tj7$nD?(%pst)j;g54KsRxn$iIZ*CLR4JE zk(8%v&*qF-8Q60~o%ImPI%a<>2-MV%2=FNNe?!A8f z`u_dg(&9o16FT+c$Ua+`D)09yoB|_U+p@ZrrG=tJ}MG?~)};u3Wit^yty9uCD$2_s^Iy zW6z#F@7}#TdGh3m6DN9md$(=d*4^D*TU)zf!-l6%pFVo@=-an%moH!b`0?Y9A3wf- z|Ni;&=O<5|oH=vmKNv6!KA`xMg^_{5k3k3IG*Fx{u>WuH6Y^BD<(CxUX6kl!QQ+}Y zarJN&VHW3PWOVlMRaKJo@|x?*%IYd7&cx2ZE#%9n&$M2ZLCjTo3YV#mr>}ygx33o` zCl8P3B5q?J8DBv=7hg^``4fv|Sk!she4QO!Jl#B%nZ4v(y>%pP#P6BAIJ0_sy0ZyN zsoAqAdUA=Fm_*!Ybm?Sd=jBMakf_Ym$;Vu9z+e+Y1Gln|QC3RRMowWRH5s3Xq6M8B z)O`C)91k5)p4hDFt($1+;COmAYeKF>!;^!PlsWozcD^)p6J~J>kozH7vckPzwv9nz zXNpR|LYJ8uo{k5Y8d~_xWHR`0LStQ A-~a#s literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..15e0aed9a8e917d8f85e13eca9e25e1f838dbaec GIT binary patch literal 1131 zcmV-x1eE(nNk%w1VG#fk0QdO-hb$~oQc}5HT`w;qYAh^q78WclAfTY2p`oF@VPQQ0 z0MeVAY!DE+UR}w_$+})%d@L+1EFqFMHPoY{u~t+=006O7Q@C_;lQ=hLQcG0;0Gd)# zd3kxRQc$i^Qj%0slSW2?Q%(j32Dff)fK*JzczDNoc~nqNR#H!EfGlas%3al(Cls!~#{Vq)OL#7G7Pwp&}LRaD!ww0e4aq)0{8s;aqu ze%Gt3eN#@)&(E`3S+8PZ)yK!dcXxhLQ8P0xykTL9Qc|QyL^?V%0|NqoQBi(WO=uPt zfIU20S5>W1PpnW$A0HU1Vq%?CQoCSay=!E^ac`nbOp7opSXfxJSW_@CFi}iQ|Nr`{ zUS3iF0Kt)wuT)XTkdW1Zn zQjR=4N=iT9-^atCperjNu31@|o13s$RjH||XA29zcy+Z|R^q|ItgNhHU{A1VX@65s z&d$XxEg@MdDw$GJQ2+ob004|IFs)Wpq)0!?lasSuU1t^+xpZ;Lp`n6AL1q#XsZ>+X zn3$DINPa9Vy1Kd;006kSxWmJ^kB^UhQc}WL-_ItLCQK+p=>4n0BgnR7GI;{$AnQ;NVzjnqMD2$_E>2t zC1OtuG-0wKNpR(ofKKc%bpru~Nx6Bp!r=&YMt}ehz6fEM)@V*1K`(0fN${XSg9qLY zNoa9SnK5}^=#9{XO@IX{EADLJp`=eGaZ65I^VBYltQ3jjO#(Khiz6#-HbuEm#1bfQ z_)Os&O$Hw_bqWHYAhzuo0B-jH+?!qC-n$K{;lwH=Y4#cbu<$WZgHMCDbpiNf!6JkK zr49fJP$&R^2DwKr0pr3=l^xsnih=06Qmu%T53Q literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gif new file mode 100755 index 0000000000000000000000000000000000000000..5565cd67d267ffb92fa0253b34ba929d3a5e62d3 GIT binary patch literal 193 zcmZ?wbhEHb5u#s2^M;s4vt{|`+5f7$u}^Sb|Ew*7x(|No)o z|NHv?@9X^kdhq|p<^P}f{eNBc|Gwe>AD90F!CfT=LO}5+3s{K`hy>Zmz-sq^F(Ad$ z@YoLr)h_{zUwMSNeGhxPUNW(?^IUS|vu}$U*Fg`Ddp%nxDa?4`%c9CY>A8ZghqHla NqlSuSqZJIwq4)0>{Q2|x|NsB*-pynn1QdU=fR*TgNRXWjtacBK z0#ZB;kN$8_{Sv_NRX~{A_lURaB@;_K&m~7b`?jcg9gy(2*Ryq!LdOeV7FG61&lOBP QoDDP+15`X4oH-b*0Ywy4f&c&j literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gif new file mode 100755 index 0000000000000000000000000000000000000000..fdf2d8b8005db78c3620f357b5d5149dd4402274 GIT binary patch literal 1117 zcmd5*=}+1R0R2%I9@Sc%8s{{zZm!MNb=CMm(am~G12Q#TXlJdaTScsE-G^4Tsfa?+ zaVj2}0wQx#0~MxOMA3+Npa}XCh2e>!Fyl->!=~|I^uO5q@IJo0ydx8t5f@+N5BLNB zg23wPs>x((Y;2sKp6=@E((CmY48~&FnwpyO@$peAl@5p9VzD3)2%%8ua=D6&i%UvM zFEJM@cjJz?Ci{Lw=XX*udlDy*VivBER2qh3Iu}k z@^Yz^KQ}jLwQi4$j3^X}lapf#rH;*JfuM4BcGh4t^7*uu)>bqcJv215v9V#ZS=nr6 zWo0Fo+h8#0S5{UA2M2q5dj$gK1ju(kUi;Jr2>T0caY<_-RA`vGgC2eo7n$0W0 z!NEa6L29*{&8~pKpc>5>2+pLZr;m>I7Zl{FRH})I36ba*xm=7wA-UW(HkvTE-;kibmfx}@53DI6&UIlK& zJXB6jjzl6EAD5Ms;G9lpcz8GllfdKg@c8>ro}jX`v%7y4(r69TR}?;j3d@v*=0Ea8At}ff#`%9q^-ntd(1_;h(W+K|!S~VJVRaKQx z*bx}$XSW}?!!Vo891gp^z1?VBdhsIP;c(DsKXi9f`un+u4hNn7Gl77QiHR8=9@c87 zN=x&Pj*j~J`b;K+OeWsj+cO#s2E$@YON)nxM@Cc7 zWqB7D7dRZQuCC5zv#?k!CWB$MTFvIo+}zyV-Q9tK*9Qj&&z?PXxz63yHa9oV%*=Ru zdm|8^93DDkGFe7OMq*+j008b4x%q#BYbP)W0D!>Fw|?G!0`PPJLhd4wlmhpF1u%f6 z{ftg85HSY;W~gtB=h+fM)ylz5Mxm2=HDqKn)`GavD+c$)2<>l(ZZUA%%VV pwfOIV=x_Y5M;l?ZedT?SZ+|A5c3AQFnlZ{{YZs3S|HQ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gif new file mode 100755 index 0000000000000000000000000000000000000000..e49fbd73c29915da23e6af95042be61c76d005e2 GIT binary patch literal 1120 zcmcJO=}+1R06>34QM5RZs-=ltXWNw&0fYbvpkDj*(c z72|~jH?6g)%Z@A!YyXJ75AW;y^wQC&tFeSYAQ1R# z6M(^B2n1q%eO)9HIh{@t39HpAaX6gWY+hbo*6Vdfqmf7?R#a5*csve=6A=-yv$NaO z)TC0)=j7z*_4?xC;?U60{r!W~)KsU_m6@3t6BC0*qqnzrz+iBEe0+X>espv+gF$O- zEMHr*4h{~wTzf9p&dSQl>(@tWwOXsy9vvN_P$({!E0sz~q{{B@hOn>@0wKd-(AjLu z-Q5p49C~76Vqsw+5{Vic>pgq+RBUW)Qc@C$RE0z$`}+D!Cav9W-QISTmlr&EK+ew2 zG#Csd5`oKQ#l%FC$<;dDFH1`%HoJ#Tr}y;q3=MT-FxRM53J#Zi^JX3flaY{+AP@*7 z5;2)fcDvube7SDsj8}KcJ>(>oiRNvHyHF&Q`7tVzb!1x=jCM&4-4+zEps?_OG@&U$|dA;D(yF!6i8%DYb&jxp#X_Y(dl%#xw&$=?D+WD;cyfc6+s|gFxV*u zqt#?G*4Nhx1bmrHR$Yyoot+&R7>J9DW3!vzv$yxVPB$l$egEp!p~0{~CYRc5iy#mP z3WWjy;C8#;`~N2VA5RbfYyy`*gg!h0K-|D=VCoxa06aB(2GXHQ?_{Lk{&kXak_oi? zo%Vv-3E>5_VE@k{&72F({g1+)#WwQ4rcjhNR zurn8R6iV_X?#GBg`}Gp%$a>3_Agh^3D-9JP$~>!1gGiPsC@qTrnOfT}E2x52*ll~A zPi~#LR%lh|PxAAGO!ix$!N&RYi=Wl#H<2sB9-p|{DJlZ+aM@tX_sNbDx zUT;fQ2E?u_wo!tT9|PK5KXiRNT@&E-w=x8P3=+DZ>!08L_fPL{&V|+{zxDPXUGwcM zq7V$m&N4;si>Kg?FI#gl)OQILBjB$?!a6TwAuWD1pZu|!KJmyRva9qCg(1G@dU!rh i#5SJ@+=Q@CM2r7Wc!t1(vB~Fn*ExQ^H#|Loxc>ll+5?yX literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..a5d6d7c991c2181a7bea03032c506b6f0e908864 GIT binary patch literal 1115 zcmeIxTThY!0LJkbL3%Azw5en#oL<=0lC>_VSOcb&>oDA$x9PGQyRo*m)`bZH5@J!V zw(YPI$Ei>s=tm`tY6w;`2E84SkQn0$0}RH0B94920MA(2Q_UtizY z*ccA)H8eCBjdKSF2Ll5GUawcLH<-;9iDXzT7O$dU$x4!{M~Iw_7X= z9e?tjomQ)r&u^TcpV#ST$H&JNigArbTTxN5vEg?*U6Yf_si`Tu-F|p@NTboFr>FP# z_m7T_PX7Y_`zH&e>?2?RPzKyQtDSuU08fF~9E`3Ms7t!k2PEgxi1c`ROb>v=Dw)?_ zVDp!;`EY>zT1jCDK3QyW~it<3>WH$!#M;jMl2FF%fF$MkUYGBO!|p__teHpef5PM3F08i z+jcPN+>Q7ZklV!I0T*tM;3!yj3?cds3xg=6#o}2RTnUA*PE4nx5|VRS5wI)h#LVJK z7c%+*Nd9`OP|0ORMG(@7sV&*x;eBs(f@dUJ895WrA}x~#7|Sn~}{b??{loZ~URX8iNt&p-eE@So?G zz9{|q?`NOeJ_kM>c=`LK#ubfQ-)|K>DyVu=_3PiS$a|4Dzuzo*T+;KR=k|}=KmPsr z_y6C;Zx<_`RLEVDv%GG}c9xCv9H;J8-T(jpGn`?dI#B%29pM|G;F4I92&8T7D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBBbrg&Y3=Q-RjPwnSbPdg|jE$@e3>2V1320kUN}5%WiyPD~AkS7Q zqokz3N?*Ucyj-u`STDaQUEk2s(h_8bk&!M?g>G?WUP)qwZeFo6%mkOz;^d;tf|AVq zJOz-6iAnjTCALaHmqNUdTL3pUuUHT49lhlIT>Xl~0)0b01CWucqiS6q^qmz?V9Vygtyua}vbVr6Dx?&9of=H_bbYHVoeYUt=> z;b>uQ0TyvGbTfqMb;(aI%}vcKf$2?w>oqsPsTY(GatnYqyQCInmZhe+73JqDfIV!L ziQ6qMIL(9VO~L6FGgq8?^?{Dj2SqDVG{b~|X$QoFCt4r}p6pZefN8x5n5Y^5|NHyr z_phHnzJL4r<@2YHAKt%v`{wnlmoJ__d-~+@qlXXf-@AL~_N|*Yu3x))1N{AbeZ0LqJ>1<~U7Vd99qjFFZLF;< zEzHeKO^l6z8A?xAM_Wr%LtRZ(MOjHvL0(Q)Mp{ZzLR?H#L|8~rfS-?-hntI&gPo0) zg_((wfkE*n3%In=0g<56j)AT4z(EBUEvbGL=Y<9;N)y`x6kS*v=eaW+&=7LvW7pX< z`$5Q&AlJtvdXyg!YX>H_`2&rgO77>!mh~-e` mW65xh<&l-o;NnsVsf*y|W>TCzhe45%iD_*H10$m&gEauM4C%Q5 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gif new file mode 100755 index 0000000000000000000000000000000000000000..09bb58fd43f6d5fce323eea6198e167f1bcef4f3 GIT binary patch literal 1119 zcmcJO?K9g40LOo+G#2#cd0AH*d9fMOa~4H{R6@j6^ekMLvW1d_qUxboJM$B%21y7* z9}@Lc4=LAKMa0mFj3AMpr!-kgBDT2FdN{l7cDG%|AFq6ckidRZ=MN^Yin2d;2ES zror%1uh-dZ|3*ee-n^MlrBd~JeMLnn2v*kCa!4dnNJvP1ef`nVkxXn1{z7 zceqsAClub1$@+G8-+~}064m1Ic%2Taso@d`gvrTCEY=?mw-X4s6B841`HvnR9u*Z8 zZEbA<0cZw;!RMEV#ckKGr%)&qoldu~F#i0x7zFdu($ccBu30Qw27~e5y?ab1V{mY= ztSq~)udlni)?_jXg~Eh{1dT>>c(~Wu*)=dA$<58(+WNh&u1>3+O-V^otCc}PLBqqt zznx&s$;rKSE3fK!b|w4rW!&Q8qD1mkEEaP(cgbWj4u=y6>W7AgAV`&&$)HfekVs@v zQI6GW-PkbA&CR_!VFQD~L`6l##E{0u#-vi2Ml;>f(Xq6&%;VjC_>k-A>AAVNrBY3k z$s`DZ&}cLWe$(9CTvvBnt9_A?K~t$Fc|6|uco&_1WoBktuV0|iXfm1H!NEbH7*Z;g zy}iBe?(dq-n=LIZI-Q!uV(stmL(p7wbaZQLD}#|~wQi@U)2&tujYidIe%juC-QO?r z^70ai!~_C9KR=(#y|cUf8jB4?AmA)k+Un|(P{=7Q&3^Odt=YWs=#dD8a^2W4tJN>; z?d?}r*HTkcJ32b)bo$7MjL#S3t1GRTKJA90+ zUQ+=5d~a6qci&6g06@y{Ddeh(6!x7LlP|3Iw|I*XH{d9j+ZVe&IP2Ml;2$1L5k`>( zh@Tb7TgJy}zb+rtCS|wS)7^bJer`n9W^{zW+xyQs;SWADnSm*wj|&*W0xKP%DOkYy z5w@>)#x`oi&hLirsrSym8gw+ayQ?6x0ps6G?w%)&6_1{wISsp-tLstDpn}(zm$Hfu zE=omRt$gAlh*0Je0~>g&XAusCjH}lMFFbJ^AVr05!GM|v_Cwg16^uNn$M=ijq=OYg tbK{lIOAHMF{QX`p${!Yf=(%sxqeBVz8>2sJB~!t3FaJSbLc(AG?mw0!{x|>t literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..f58f11114cada2854d69e527367c5c5354bcbc82 GIT binary patch literal 1115 zcmeH`=}*#e0EfQ;IxsbD%rL8IvsGIe7+Yqofoo-3mNi%TD&1Q1rB*L$Z3IYS3d@cy zyb+J#g*Xhusr)1yB8OaZ=@RsVNDKM)P_% zW@l#=3WeM4h9F3*)#>#Hv)R(t*0#UDFA|Lz4D(;V3g_qNeLkPZ;~5?vZf|era(i_; zeMd(}eSN*%?y%Wx0)fEcaIo2Ii^V!JGBPkQKq8S83Z>a>Hkr&lJv~zCv__-la=9BD zK9x$%VzHK&mzhlF`npFT7-?>9{%sKog_TN`Og3Y)*&~st-|w%fsgcWP<#M^xxe|#) zg2CX=zkvVzlLxY5hywu7!MQ(cf0_WupWx8FtP&)Zm4G5Opa?($hovW%V+d{pJ>xMx zd!0=FPENd2`-o4drN9wzSOxB0ri6Jm5vzR3;S@4aMZ3|wO7?Un`t>)=E9~jF35ay0 zFXe;mVBCo#4_;^*IBFUKo3pWWv4EI#37s>uj^hAK#$jZvp`dyyEdzxoW1s(kzl+DA zS(v1c-o&t3CC(p|b228lPN=&VAyR!Z5g_ zSD{oS;(Z?a`Zr9GwKyg1!c{EySvKQ%%K4`n9+OC;C%w#nRN4`r@NrpKHH5=M#4ouI zuWhl5Du@71286tnTmU{D$|Bw7B|_D(^fWcHuDEOlb}s(pZ6qIh%fOc&yI+VToXLVH RFb1H3d^bc)rXvvG$}fi;u$%w@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gif new file mode 100644 index 0000000000000000000000000000000000000000..a93bcfb1419a6df2239639083ef02239b926416a GIT binary patch literal 2150 zcmd^AX+slN6dg3ONsAlQs;xtC7qS6D20~0G35gO41jM*hLNbsD$;2d>XsZN?fQn#1 z&{jhcYo%xxC`iHL0;q^=E>I{4VKG!usI{%#(}@-BhtfaL`{B)dZ_c^PymQ}#@Hhcf z(M(__@U$G5J9k!NV|{aTgP)(DR4R>#hzJY}?C9u#VK_82w6^vFlgW&akFTq%@9F7b zv)NQCH9b9@$K&nVwM(zxk(ZbE;K8WbJlNdaER)GjpFS-R2!exy`}_NAYHIrW`p3t| zo0^)&#>V^l%)PyRN+qgN$?0@Dhr?mBIhB=_`}Z5FtIG=t3jF>3Pn;;WTK}+E23uNM zq|!Kp!GNOZzI~ZVNl7_5IfaFViHS*0PEH942^0#&WGXBvDM1kA$&)8tT{qg=t{II+ zp-`}C)25IRI4v!$y}fbc#;7@ST(h#Wj7CFPSlGjdk9vE1V`F12mJzi&(ZRvNY#!+D z?lBtQvA4%@xm+482s2+_-=U#d(km(|+}zxXi%-HZoy+Cu zbXpv4DxV*E=S~NM!MJ(z)`0^D^7HfQbXt3Rdw2J32qFy(40U#PibPwEA2*GTJ~A3} zD=Vv#ljU7qT?Y?l4-O8+$0OOx%b zr2+t8wOX<9|6m^0>FfF7AWNhXVb37CPAL*6A{sCbNsuXM`0?`>@t{mX!^imXNqi-Y zNM+oeDnzg|EK0mHQB0NK>A_%-4${e$azrBnb@C*I8q(45A_*FYK-k>2O~ixGAeuxP zo?&|d+G4_}3IY8HByTZk6$xBLCXju6u_o{WDI_w9NTLwQ6mPOWU-%z>y1zN3% zL|*3mua4DGJCq195>cbcDlvk=J#C?s5UfH(8dMd9qDd29FnM?xtli*c8Fic|muqk9Rn;Za>ePEU!gAw5COJ%XB z6I>Q5PL?AI%>-BSl1rYHYZHQ8iA821D%o~K!cn1e@L9o-Y|>nq>`DDS=Sn8cg~^$e zOT>~P+K%-f$2_rxX~#BwAzEzlLiUIP)4B>1wVn0PKYsu1*I#~q`qPg;Jo*0dcjIG^ z9*#b^|Lut7-tf@ifVsc#Zg0;w-CbXIcHFsr>t=gfYfJNurt6K@u3l-Vue*Hd;)U9; z&ev3bS#_?m;*0XK&p-S0le1?^KQ1}_(Wwtl7N02kpwM*u*!%AtJyMW=I4{?DC@1@1 z)`9)|GBeWm8q)Tp>Qi>_diR~3J9OIZ$r`n4n-W#XlM=VeqzUneL>woI-SYP4O&d1| z*T<}jjuJ#hgufNW4_&*4#|`1ISum5anjTCG3WTTu{;T|aeJEH%5xl)tu2{Zo>5|2Z zJn}HRT#^-W!rs?wxBl3UH3QS=^adF4+aLT&S6g#DIb0?o}4i zUSzlQ)u|-OvKi?&>=(Kff;HhGvrh_&+@-4*XX>3j@!!WfN7bcgxTYMH@B|*~?0B<# z55>+H$;@@jD+=FJxrFJ3`@oBP`Q*Lk!%IHdaL{>1k)xN_tVIhR6g#xIxKF`Vs1_Th z=-B|JHb5zIwF`!EuG`%J;B1VmV%fYh9^=f)ZJVptAU~`2xaLl xUaqS*XM3*u_I66jUXg?Io2#Msz6-MknyBRq0+!ES+mag%*gM9$kZ?F4@GsHC5SRb} literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gif new file mode 100755 index 0000000000000000000000000000000000000000..922addc5ca6c5a27f4c6776448947662861f2191 GIT binary patch literal 1106 zcmchWTThw?06;%)^}e7^hjeLc)^1@lTeTW=1w{l3sW(uz;HV-ZmnhY^`Cv92DDyIH zkx|7)VO~15n5F8thznB@>(mbf0*bW?DwS5PZu+n;*}~dCvGZ_V&(pa<#HXc~MFCO3 zUrzu6fdGfY$z(DV3gz?psi~=piyFQDH;2P<=g!@&Ef)xa91e%e>=kb_8(0Fw8vc0`MAi&>Xm^^nb z&}=rx#>TSQY%)3D<#M4=NDKy}R4P#@l*KY1A0OlK?9*tJ?(Xi5jrE?M&XJK3nM{U6 zUVjZ5jY>&LVKOT^I_j)etI=q*Sj=&8agB|&4u?H6GgB-U+wBgi^lPnlQmGvC`OdPk zvZPWe7K@&qR#GUGnwrASPH|IH)1yanqfw*LXuV#qTCLsP_1Nv!wY9Z{1%pnfo0`%E z2M33ShR)1P@_5|7J~@p>TUweqJbbBAsqlFG#f$IM*O%<=Jp;ktOG`_;y1Lx%9kY3P zbaYfC`c@*5P^nal#i-Lg*xA|Z@0S!6JwZ zs>*DBoR;>X(`jB^wQ4luZEX!_XJ;Odr>>4iAmHV4xlq`s*XvhSi~s=me7@KIKS}sI z&<_Bf0Eus+Z=L``e1IC)Ui-88$G3m&v)fc7Q9@X)N_gp~?BbxX_!<-tlK}B2O-J8) zg?<187RP~UpY~_XU%e0%m*TWA3R*AUv*k$KALX~@NuIxYsA=+>q+Bk3NEr8I!Grpf z7fAj?rskW0ntytL=RxDNp=I>J-m`E;#9CrULFx@l5+|_({UYJY<0#f!@Ah|6M6fP4 zb(}(FRz$!)qa8uBFYUxgxhoh-2>O2Q-CXFsD_;z_XJg}kImbMYf&u5lBBRsh8SVMk zu!BT)09}yn2NO;A{9&IfsIsYgrzVo%t&pVd+y8#do3$r=4!K%{A-6hDH!eVvLWWrW z5Y+btxKAKx1yWcNo~LiTwueLZE1ectu?Eyt<@SJSfRG~ z;=DyuCwSoy9S#E(L=Kfhk=s|m3*-n;2u*(lR$UH#j)h*x0C2sa984CnqO08jaOz-QM2r=;&x}Zg#spcKd2? zZ}0N*^4i)Om&;|d*&Gf>tyaS@?Dcw?Os2!(6bJ-%yWQjQ_V@SOY&L;FsMTuw`ueom zB@&5bu~=qiW`>7{SuEDk(UH&RTUuK3`~7mcT&L6Vc)X2`jn2-_uC6YZ%gyKW6$*vf zY|&^IR#sN(>+3xpk5Z|UNF*wiy1KfWMxz}Z9PI7wEi5b=jmD9Y5vf$F*BcHG54qeC zI-S0`=`fkh)6>&3ncQqP4-E~u-R_#2nzpvK@$qq^(Igg&TU%Qtk{OXm?DK6i80|8d zOt07Lbo#}`MFxX0KR+)N3I_%T)M|~vV30~>-QC?*tF5PpDH4e&6iR!0ds9glFJnw&al(DH8wWpa5!dX=NcLsc)T%%V%B6bO-xL#udk1ej@H)Jx?C=&(@7?i z_xJZt{sR8
                            ';}} +TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;} +function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();} +else{cancelHide(oMenu);}} +function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}} +function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);} +function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}} +function hide(oMenu){if(!oMenu&¤t)oMenu=current;if(oMenu&¤t==oMenu&&oMenu.isOpen){hideCurrent();}} +function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}} +function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;" +var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;" +return''+sText+''+'';}} +function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();} +Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);} +Accelimation.prototype.stop=function(){Accelimation._remove(this);} +Accelimation.prototype._paint=function(time){if(time= !,... +# where: forbidden pages are those pages that should *not* use +# the particular JavaScript function within the JS event +# specified below. +# $Id: body.def,v 1.2.2.1 2007/01/17 18:43:52 sullrich Exp $ +# +onload=tmenuinit(); !wizard.php \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng_fs/loader.js b/usr/local/www/themes/pfsense_ng_fs/loader.js new file mode 100644 index 000000000..c8ebe6039 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/loader.js @@ -0,0 +1,294 @@ +//'); + +document.write(''); + +/////////////////////////////////////////// +// jQuery code for columns / widgets part 1 +/////////////////////////////////////////// + +var noCols = 2; +var printed3 = false; +var printed4 = false; +var printed5 = false; +var printed6 = false; +var printed7 = false; +var printed8 = false; +var printed9 = false; +var printed10 = false; +var id; +var noColsOnLoad = noCols; // holds a reference to the number of displayed columns on load +var existing =[]; // array to hold each columns contents +var specifiedColWidth = 350; // width of columns for resizing + +/////////////////////////////////////////// +// jQuery Widget functions +/////////////////////////////////////////// + +// function to connect all columns to each other to allow jQuery interaction (drag and droppable) +function connectColumns() +{ + jQuery('.ui-sortable').sortable({connectWith: '.ui-sortable', dropOnEmpty: true, handle: '.widgetheader', change: showSave}); +} + +// function to add columns due to a window resize +function resizeAddColumns() +{ + if(noColsOnLoad > noCols) // if a column has previously been deleted + { + var maxCols = maxColsToDisplay(); // the maximum we can display + + if(noColsOnLoad < maxCols) // if the number of columns on load is less then the maximum number of columns we can display + maxCols = noColsOnLoad; // change the maximum number of columns as we do not want to display them all + if( (maxCols - noCols) > 0 ) // if we need to add more columns + { + replaceColumn(); + + for(var i=noCols; i
                            "); + jQuery(existing[i]).appendTo('#col' + addCols ); // append onLoad contents + } + noCols = maxCols; + for(var i=noCols; i 1 ) // keep at least 1 column displayed at all times + { + var maxCols = maxColsToDisplay(); + var noColsToDel = noCols - maxCols; + + if(noColsToDel>0) // if columns need deleteing + { + for(var i=(noCols-noColsToDel); i
                            "); + else + jQuery('#col' + (tmpReplace).toString() ).after("
                            "); + jQuery(existing[tmpReplace]).appendTo('#col' + noCols); +} + + +// function to calculate & return the maximum number of columns we can display +function maxColsToDisplay() +{ + var niftyWidth = jQuery('#niftyOutter.fakeClass').width(); + return Math.round(niftyWidth / specifiedColWidth); +} + +// function to amend the widget width +function correctWidgetDisplay(noCols) +{ + var percent = ( 100 / noCols ) - 0.1; + var percentStr = percent.toString() + '%'; + + // set all column widths + jQuery('.ui-sortable').width(percentStr); +} + +// function to insert a new column we can place content into (from saved state) +function printColumn(newNum) +{ + if(newNum > noCols) + { + noCols = newNum; + noColsOnLoad = noCols; + } + + document.write("
                            "); + correctWidgetDisplay(noCols); + connectColumns(); +} + +// function to create the columns +function createColumn(colPos) +{ + if (colpos == "col3" && printed3 == false){ + printColumn(3); + printed3=true; + } + else if (colpos == "col4" && printed4 == false){ + printColumn(4); + printed4=true; + } + else if (colpos == "col5" && printed5 == false){ + printColumn(5); + printed5=true; + } + else if (colpos == "col6" && printed6 == false){ + printColumn(6); + printed6=true; + } + else if (colpos == "col7" && printed7 == false){ + printColumn(7); + printed7=true; + } + else if (colpos == "col8" && printed8 == false){ + printColumn(8); + printed8=true; + } + else if (colpos == "col9" && printed9 == false){ + printColumn(9); + printed9=true; + } + else if (colpos == "col10" && printed10 == false){ + printColumn(10); + printed10=true; + } +} + +// function which is called when the broswer window is resized +jQuery( window ).resize(function() +{ + // stop resize firing twice: http://stackoverflow.com/questions/4298612/jquery-how-to-call-resize-event-only-once-its-finished-resizing + clearTimeout(id); + id = setTimeout(finishedResizing, 500); +}); + +// function called after the browser has finished resizing +function finishedResizing() +{ + var colWidth = jQuery("#col1").width(); + if( colWidth < specifiedColWidth ) // Columns width is too small to display all the columns properly so we delete some columns and resize the remaining columns + resizeRmColumns(); // Check if we can delete any columns + else if( colWidth > specifiedColWidth ) // Columns width COULD display more columns properly + resizeAddColumns(); // Check if we can add any columns +} + +///////////////// end widget code part 1 ///////////////////////// + +// jQuery function to define dropdown menu size +jQuery(document).ready(function () +{ + var hwindow = ''; + hwindow = (jQuery(window).height()-35); + // Force the size dropdown menu + jQuery('#navigation ul li ul').css('max-height', hwindow); + + /////////////////////////////////////////// + // jQuery code for columns / widgets part 2 + /////////////////////////////////////////// + + // insert add/delete column buttons + jQuery('

                            \"Click
                             Add column 
                            \"Click
                             Delete column


                            ').insertBefore('#niftyOutter.fakeClass'); + + if ( jQuery('#columnModifier').length > 0 ) // only perform resizing on the dashboard page + { + // correct the css for column 2 + jQuery('#col2').css("float","left"); + + // Make a copy of the current state of columns on page load + for ( var i = 1; i <= noCols; i = i + 1 ) + { + var contents = jQuery('#col' + i ).html(); + existing.push( contents ); + } + + finishedResizing(); // on page load correct display of columns to fit + } + + // on click add a new column and change column widths + jQuery('#addCol').click(function() + { + var maxCols = maxColsToDisplay(); + if( (noCols < maxCols) && (noCols < 10) ) + { + var colAfter = noCols; + noCols++; + + // insert new column + jQuery('#col' + (colAfter).toString() ).after("
                            "); + + correctWidgetDisplay(noCols); + connectColumns(); + } + else + jQuery('#columnWarningText').html('Maximum number of columns reached for the current window size').show().delay(1000).fadeOut(1000); + }); + + // on click delete a columns and change column widths + jQuery('#delCol').click(function() + { + if( noCols > 1 ) + { + var colToDel = noCols; + noCols -= 1; + + correctWidgetDisplay(noCols); + + // get column contents before deletion + var colContent = jQuery('#col' + colToDel ).html(); + + // remove column + jQuery('#col' + colToDel ).remove(); + + // append deleted columns content to preceeding column + jQuery(colContent).appendTo('#col' + noCols ); + + showSave(); + } + else + jQuery('#columnWarningText').html('Minimum number of columns reached for the current window size').show().delay(1000).fadeOut(1000); + }); +}); +//]]> diff --git a/usr/local/www/themes/pfsense_ng_fs/login.css b/usr/local/www/themes/pfsense_ng_fs/login.css new file mode 100644 index 000000000..f8abdfcb2 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/login.css @@ -0,0 +1,1127 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + +} + +.infoboxnptd2 { + width:100%; + color:white; + background-color:#990000; + padding-right: 10px; +} + +.infoboxnptd { + width:8%; + background-color:#990000; +} + +.infoboxnptable { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnptable2 { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnp { + background-color:#990000; + width:100%; +} + +.infoboxnpimg { + vertical-align:middle; + width:28px; + height:32px; + background-color:#990000; +} + +/* please adjust the bgcolor to be used together with niftycorners! */ +.rtop, .artop { + background-color: #999999; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 250px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 9px; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + margin: 0px auto; + background-position : center 0px; + background-color: #999999; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 810px; + margin: 0px auto; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 102px; + width: 810px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.png') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; + font-size: 14px; + color: #cccccc; + font-weight: bold; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: normal; + font-family: Verdana; + color: #ffffff; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 0px; + margin-top: 0px; + margin-left: 0px; + padding-top: 0px; + width: 810px; + background-color: #ffffff; +} + +#left { + width: 810px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.png') no-repeat; + top: -18px; + left: 0px; + width: 810px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + /* background: url('images/menu.gif') no-repeat; */ + /* width: 693px; */ + position: relative; + top: -25px; + left: 3px; + width: 810px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + /* width: 7.5em; */ + width: 8.77em; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + /* background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #990000; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background-color: #990000; + color: #FFF; +} +#navigation ul li ul li:hover { + background-color: #666666; +} + +#navigation li li a { + display: block; + padding-left: 10px; + padding-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 1; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 8px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + + +#login { +/* background: #cccccc; */ + background-color: transparent; + border: 0px solid #cccccc; + margin: 5em auto; + padding: 0em; + width: 400px; +/* filter:alpha(opacity=60); + -moz-opacity:0.6; + -khtml-opacity: 0.6; + opacity: 0.6; */ +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; +/* background: #ffffff; */ + margin-top: 0; + display: block; + text-indent: -1000px; + height: 400px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ + position: relative; + top: -420px; + left: 70px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; +/* text-indent: 10px; + position: relative; + top: -300px; */ +} + +#login #username, #password { + font-size: 1em; + width: 60%; + padding: 3px; + margin: 0em; +/* text-indent: 10px; + position: relative; + left: 10px; + top: -300px; */ +} + +#login #submit { + font-size: 1em; + font-weight: bold; + text-align: center; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ + position: relative; + top: -20px; + left: 170px; +} + +/* loginerror box follows */ + +#login #inputerrors { + background-color: transparent; + border: 0px solid #666666; + margin: 5em auto; + vertical-align: middle; + padding: 0em; + width: 330px; + height: 50px; + position: relative; + top: -370px; +} \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng_fs/menu.inc b/usr/local/www/themes/pfsense_ng_fs/menu.inc new file mode 100644 index 000000000..ae55e64b5 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/menu.inc @@ -0,0 +1,178 @@ + + All rights reserved. + */ +/* ========================================================================== */ +/* + Originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2004 Manuel Kasper . + 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. + */ +/* ========================================================================== */ + +require("menu.inc"); + +define("TMENU_STUB", " + // set up drop downs anywhere in the body of the page. I think the bottom of the page is better.. + // but you can experiment with effect on loadtime. + if (TransMenu.isSupported()) { + + //================================================================================================== + // create a set of dropdowns + //================================================================================================== + // the first param should always be down, as it is here + // + // The second and third param are the top and left offset positions of the menus from their actuators + // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use + // something like -5, 5 + // + // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner + // of the actuator from which to measure the offset positions above. Here we are saying we want the + // menu to appear directly below the bottom left corner of the actuator + //================================================================================================== + var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft); + + //================================================================================================== + // create a dropdown menu + //================================================================================================== + // the first parameter should be the HTML element which will act actuator for the menu + //================================================================================================== + + @@MENU_DEFINITIONS@@ + + //================================================================================================== + // write drop downs into page + //================================================================================================== + // this method writes all the HTML for the menus into the page with document.write(). It must be + // called within the body of the HTML page. + //================================================================================================== + TransMenu.renderAll(); + } +"); + +class NervecenterMenu extends Menu { + private $menuJScript = "NOT-SET"; + private $menuJScriptEvents = "NOT-SET"; + private $menuID = "NOT-SET"; + + public function __construct($identification = "", $filename = "", Component $c = NULL) { + parent::__construct($identification, $filename, $c); + + $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); + $this->menuID = $id; + + if ($this->hasParent()) { + $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n"; + } + } // end __construct + + public function getMenuID() { + return $this->menuID; + } + + public function setMenuID($myMenuID) { + $this->menuID = $myMenuID; + } + + public function getMenuJScript() { + $childJScript = ""; + foreach ($this->getChildren() as $component) { + $childJScript .= $component->getMenuJScript(); + } + + if (! $this->hasParent()) { + $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB); + } else { + $this->menuJScript .= "\n$childJScript\n"; + } + + return $this->menuJScript; + } + + public function getMenuJScriptEvents() { + return $this->menuJScriptEvents; + } + + public function __toString() { + if (! $this->hasParent()) { + $menuMarkup =<< + @@CHILD_ELEMENTS@@ +
                            + +EOD; + } else { + $name = gettext($this->getID()); + $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); + + $menuMarkup =<<{$name}
                            + @@CHILD_ELEMENTS@@ +EOD; + } + + $childMarkup = ""; + foreach ($this->getChildren() as $component) { + $childMarkup .= $component; + } + + $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup); + + return $menuMarkup; + } +} + +class NervecenterMenuItem extends MenuItem { + private $menuJScript = "NOT-SET"; + private $menuJScriptEvents = "NOT-SET"; + + public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) { + parent::__construct($identification, $filename, $href, $c); + + $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}"; + $name = gettext($this->getID()); + $file = $this->getFile(); + + $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n"); + } + + public function getMenuJScript() { + return $this->menuJScript; + } + + public function getMenuJScriptEvents() { + return $this->menuJScriptEvents; + } + + public function __toString() { + return ""; + } +} + +?> diff --git a/usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css b/usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css new file mode 100644 index 000000000..04c4cf2ea --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css @@ -0,0 +1,101 @@ +/* + new_tab_menu.css + part of pfSense + Copyright (C) 2010-2011 Robert Zelaya + + 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. + + + Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again. + The following code is dependent on new_tab_menu.css and images/new_tab_menu.png. + + + + + + + +*/ + +.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;} + +.newtabmenu li{float:left; margin-right:2px; text-align: center;} +.newtabmenu a:link, .newtabmenu a:visited{ + background:url(images/new_tab_menu.png) right 45px; + color:#ffffff; /* noactive font */ + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + font-weight:bold; + font-size:.9em; + height:20px; + line-height:20px; + text-decoration:none; +} +.newtabmenu a span{ + background:url(images/new_tab_menu.png) left 45px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + height:20px; + margin-right:7px; + padding-left:7px; +} +.newtabmenu a:hover{ + background:url(images/new_tab_menu.png) right 23px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + color:#ffffff; /* hover over font */ +} +.newtabmenu a:hover span{ + background:url(images/new_tab_menu.png) left 23px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ +} + +/* -------------------------------- */ +/* ACTIVE ELEMENTS */ +.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{ + color:#000000; /* active font */ + background:url(images/new_tab_menu.png) right 0 no-repeat; +} +.newtabmenu_active a span, .newtabmenu_active a:hover span{ + background:url(images/new_tab_menu.png) left 0 no-repeat; +} \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng_fs/no_big_logo b/usr/local/www/themes/pfsense_ng_fs/no_big_logo new file mode 100644 index 000000000..6e5c70d7a --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/no_big_logo @@ -0,0 +1 @@ +NO! DONT! \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php b/usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php new file mode 100644 index 000000000..52337b9ed --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php @@ -0,0 +1,88 @@ + + 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. +*/ + +/* This file is included by the RRD graphing page and sets the colors */ + +/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* 95th Percentile Lines Out, In */ +$colortraffic95 = array('660000', 'FF0000'); + +/* State Table pfrate, pfstates, pfnat, srcip, dstip */ +$colorstates = array('00AA00','990000','0000FF','000000','DD9B00'); + +/* Processor Usage user, nice, system, int, processes */ +$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000'); + +/* Memory Usage active, inact, free, cache, wire */ +$colormemory = array('00AA00','990000','0000FF','666666','DD9B00'); + +/* MBUF Usage current, cache, total, max */ +$colormbuf = array('0080FF','00E344','FF0000','000000'); + +/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */ +$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */ +$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000'); +/* Quality Graph Loss */ +$colorqualityloss = 'ee0000'; + +/* Wireless Graph SNR, Rate, Channel*/ +/* Cellular Graph RSSI, */ +$colorwireless = array('333333','a83c3c','999999'); + +/* SPAMD Times min area, avg area, max area, Time line */ +$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066'); +/* SPAMD Connections max area, min area, min line, max line, avg line */ +$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600'); + +/* OpenVPN Users Online Users */ +$colorvpnusers = array('990000'); + +/* Captive Portal Total Users Total Users */ +/* Captive Portal Concurrent Concurrent Users */ +$colorcaptiveportalusers = array('990000'); + +?> diff --git a/usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css b/usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css new file mode 100644 index 000000000..06b3c7af5 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css @@ -0,0 +1,44 @@ +#navigation { + /* border:1px solid black; */ + width: 98%; + vertical-align: middle; + height: 16px; + padding-top: 4px; + } + +#menu { + /* background: #990000; */ + /* border-bottom:1px solid white; */ + padding: 0 0 0 0; + width: 98%; + vertical-align: middle; + height: 16px; + } +#menu a { + padding: 2px 28px 4px 28px; + text-decoration: none; + font-weight: bold; + font-size: 1.0em; + color: #FFFFFF; + width: 08%; + height: 16px; + } +#menu a.hover { + background: #AF2020; + } +#menu span { + display: none; + } + +#subnav { + font-size: 10px; + margin-bottom: 2em; + } +#subnav a { + color: #FF0000; /* #FB3B00; */ + margin-right: 1em; + } +#subnav span { + color: silver; + margin-right: 1em; + } diff --git a/usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css b/usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css new file mode 100644 index 000000000..f68357434 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css @@ -0,0 +1,75 @@ +/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */ +.transMenu { + position:absolute; + overflow:hidden; + left:-1000px; + top:-1000px; + } + +/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */ +.transMenu .content { + position:absolute; + } + +/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */ +.transMenu .items { + position:relative; + left:0px; top:0px; + z-index:2; + } + +.transMenu.top .items { + border-top:none; + } + +/* each TR.item is one menu item */ +.transMenu .item { + color: #FFFFFF; /* #336; */ + font-size: 1.1em; + font-weight: normal; + font-family:sans-serif; + text-decoration:none; + /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */ + border:none; + cursor:pointer; + cursor:hand; + } + +/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */ +/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */ +.transMenu .background { + position:absolute; + left:0px; top:0px; + z-index:1; + -moz-opacity:.8; + filter:alpha(opacity=80); + } + +/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */ +.transMenu .shadowRight { + position:absolute; + z-index:3; + top:3px; width:2px; + -moz-opacity:.4; + filter:alpha(opacity=40); + } + +/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */ +.transMenu .shadowBottom { + position:absolute; + z-index:1; + left:3px; height:2px; + -moz-opacity:.4; + filter:alpha(opacity=40); + } + +/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */ +.transMenu .item.hover { + background:#fdfdfd; + color:black; + } + +/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */ +.transMenu .item img { + margin-left:10px; + } \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng_fs/wizard.css b/usr/local/www/themes/pfsense_ng_fs/wizard.css new file mode 100644 index 000000000..f2c9f3e48 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/wizard.css @@ -0,0 +1,1117 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + +} + +.nowrap { white-space: nowrap; } + +/* please adjust the bgcolor to be used together with niftycorners! */ +.rtop, .artop { + background-color: #999999; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 250px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 9px; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + margin: 0px auto; + /* background: url('images/background.png') no-repeat; */ + background-position : center 0px; + background-color: #999999; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 810px; + margin: 0px auto; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 102px; + width: 810px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.png') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; + font-size: 14px; + color: #cccccc; + font-weight: bold; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: normal; + font-family: Verdana; + color: #ffffff; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 0px; + margin-top: 0px; + margin-left: 0px; + padding-top: 0px; + width: 810px; + background-color: #ffffff; +} + +#left { + width: 810px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.png') no-repeat; + top: -18px; + left: 0px; + width: 810px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + /* background: url('images/menu.gif') no-repeat; */ + /* width: 693px; */ + position: relative; + top: -25px; + left: 3px; + width: 810px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + /* width: 7.5em; */ + width: 8.77em; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + /* background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #990000; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background-color: #990000; + color: #FFF; +} +#navigation ul li ul li:hover { + background-color: #666666; +} + +#navigation li li a { + display: block; + padding-left: 10px; + padding-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 1; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 8px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + +#login { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 340px; +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; + margin-top: 0; + display: block; + text-indent: -1000px; + height: 50px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login #username, #password { + font-size: 1em; + width: 60%; + padding: 3px; + margin: 0em; +} + +#login #submit { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +.infobox { + width:100%; +} + +.infoboxsave { + padding-right: 10px; +} + +.infoboxnptd2 { + width:100%; + color:white; + background-color:#990000; + padding-right: 10px; +} + +.infoboxnptd { + width:8%; + background-color:#990000; +} + +.infoboxnptable { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnptable2 { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnp { + background-color:#990000; + width:100%; +} + +.infoboxnpimg { + vertical-align:middle; + width:28px; + height:32px; + background-color:#990000; +} + +.inputerrorsleft { + background-color: #990000; + width: 36px; +} + +.inputerrorsright { + background-color: #FFD9D1; + color: #000000; + font-size: 11px; + padding-left: 8px; + padding-top: 6px; +} diff --git a/usr/local/www/themes/the_wall/all.css b/usr/local/www/themes/the_wall/all.css new file mode 100644 index 000000000..cb909724f --- /dev/null +++ b/usr/local/www/themes/the_wall/all.css @@ -0,0 +1,1308 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, sans-serif; + font-size: 0.9em; + +} + +.nowrap { white-space: nowrap; } + +.addgatewaybox { + background-color: #990000; + border-style: none none none none; + width: 225px; +} + +.infobox { + width:100%; +} + +.infoboxsave { + padding-right: 10px; +} + +.infoboxnptd2 { + width:100%; + color:white; + background-color:#990000; + padding-right: 10px; +} + +.infoboxnptd { + width:8%; + background-color:#990000; +} + +.infoboxnptable { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnptable2 { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnp { + background-color:#990000; + width:100%; +} + +.infoboxnpimg { + vertical-align:middle; + width:28px; + height:32px; + background-color:#990000; +} + +.inputerrorsleft { + background-color: #990000; + width: 36px; + text-align: center; +} + +.inputerrorsright { + background-color: #FFD9D1; + color: #000000; + font-size: 11px; + padding-left: 8px; + padding-top: 6px; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 220px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 11px; + font-family: "Trebuchet MS", sans-serif; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + margin: 0px auto; + background: url('images/background.jpg') repeat-x; background-attachment:fixed; + background-position : center 0px; + background-color: #999999; +} + +a:link{color: #660000;} +a:visited{color: #660000;} +a:active{color: #660000;} +a:hover{color: #660000;} + + + + + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 810px; + margin: 0px auto; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 202px; + width: 810px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.png') no-repeat; + height: 90px; + width: 190px; + z-index: 1; + top: 55px; + left: -5px; + padding-top: 45px; + padding-left: 0px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 128px; + left: 230px; + font-size: 14px; + color: #000000; + font-weight: bold; +} + + + +table#marquee { + position: relative; + top: -21px; + left: -20px; + border: 0; + padding: 0; + margin: 0; + width: 170px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.0em; + font-weight: normal; + font-family: Verdana; + font-weight: bold; + color: #000000; + padding-left: 5px; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 170px; + height: 16px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + +#content { + position: relative; + top: -5px; + left: 0px; + margin-top: 0px; + margin-left: 0px; + padding-top: 0px; + width: 810px; + background: url('images/horizontal.png') repeat-y; +} + +#left { + width: 810px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.png') no-repeat; + top: -5px; + left: 0px; + width: 810px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + position: relative; + top: -25px; + left: 3px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 5px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + width: 80px; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + /* background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +/* dropdownmenu mainitems textcolor */ +#navigation ul li { + background-color: transparent; + font-size:13px; + color: #000000; +} +/* dropdownmenubackground */ +#navigation ul li ul li { + border: 0px solid #999999; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background-color: #999999; + color: #FFF; + filter:alpha(opacity=90); + -moz-opacity:0.9; + -khtml-opacity: 0.9; + opacity: 0.9; +} +#navigation ul li ul li:hover { + background-color: #cccccc; +} +/* textcolor in dropdownmenu */ +#navigation li li a { + display: block; + padding-left: 5px; + margin-right: 10px; + color: #000000; +} +/* textcolor mouseover in dropdownmenu */ +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; + color: #000000; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 1; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listrborder { + background-color: #FFFFFF; + border-left: 1px solid #999999; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + color: #FFFFFF; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #DDDDDD; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 6px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; + +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + +#login { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 340px; +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; + margin-top: 0; + display: block; + text-indent: -1000px; + height: 50px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; + text-indent: 10px; + margin: 0px auto; + background: url('images/background.jpg') repeat-x; background-attachment:fixed; + background-position : center 0px; + background-color: #999999; +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login #username, #password, #password2 { + font-size: small; + width: 60%; + padding-left: 19px; + padding: 3px; + margin: 0em; +} + +#login #submit { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +/* Widget CSS */ +.widgetsubheader { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #B1B1B1; + padding-right: 6px; + padding-left: 6px; + color: #000000; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.widgetheader { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.widgetdiv{ + margin:5px; + padding: 5px; + background:#CCCCCC; +} +.widgetconfigdiv{ + background:#BBBBBB; + font-size: 11px; + color: #000000; + padding-right: 5px; + padding-left: 5px; + padding-top: 5px; + padding-bottom: 5px; +} + +div#log div.log-entry-mini { + clear: both; +} + +div#log div.log-entry-mini span { + padding: 2px 2px 2px 2px; + padding-left: 6px; +} + +div#log span.log-action-mini-header, +div#log span.log-time-mini-header, +div#log span.log-interface-mini-header, +div#log span.log-source-mini-header, +div#log span.log-destination-mini-header, +div#log span.log-protocol-mini-header { + float: left; + text-align: left; + background-color: #B1B1B1; + font-size: 12px; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-action-mini, +div#log span.log-time-mini, +div#log span.log-interface-mini, +div#log span.log-source-mini, +div#log span.log-destination-mini, +div#log span.log-protocol-mini { + float: left; + text-align: left; + background-color: #FFFFFF; + font-size: 11px; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-action-mini, +div#log span.log-action-mini-header { + width: 6%; +} + +div#log span.log-time-mini, +div#log span.log-time-mini-header { + width: 19%; +} + +div#log span.log-interface-mini, +div#log span.log-interface-mini-header { + width: 8%; +} + +div#log span.log-source-mini, +div#log span.log-source-mini-header { + width: 23%; +} + +div#log span.log-destination-mini, +div#log span.log-destination-mini-header { + width: 31%; +} + +div#log span.log-protocol-mini, +div#log span.log-protocol-mini-header { + width: 8%; + border-right: 1px solid #999; +} + +/* Sortable tables */ +table.sortable thead { + cursor: default; + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} + +/*thermal_sensors widget styles*/ + +.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; } +.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; } +.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px; + background-color: LimeGreen; + border-top-width: 2px; border-top-color: Lime; + border-left-width: 0px; + border-right-width: 0px; + border-bottom-width: 2px; border-bottom-color: Green; +} +.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; } +.thermalSensorText { float: left; height: 20px; top: 3px; } +.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;} + +.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; } +.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; } + +.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; } +.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; } + +.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; } + +/* widget textarea styles - full width */ +.textarea_widget { + width: 100%; + resize:vertical; + -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */ + -moz-box-sizing: border-box; /* Firefox, other Gecko */ + box-sizing: border-box; /* IE 8+ */ +} diff --git a/usr/local/www/themes/the_wall/apple-touch-icon.png b/usr/local/www/themes/the_wall/apple-touch-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..7a4b9759dd3bb1f6117c5eea8fb7c61989ac8632 GIT binary patch literal 4068 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 diff --git a/usr/local/www/themes/the_wall/favicon.ico b/usr/local/www/themes/the_wall/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3440bf24d471f1210668aea9634a4c4571a8874a GIT binary patch literal 1406 zcmeH{uTMfz6vsaxzaBgg6a-Ouh#SMr5l9qfU1$um$ zjmKm9{XWCtkXEZjAP}HjE>o-3C>D#v<8hkJCWS%)MNvp35)1|dDwPL1oeueYo^JP< zZ1#?JdxEB2lgs5urBXy95$X9vsdP`H@klaxLnd>}bULM4t?u3+wYnIxPh!F0)-VD4Wb{60%sa=`{Y>*D-u(@Y#a*H^J*1qcNOI-KG33 Ub|^T7E5XGPj7;!y2KxBE0oZy=+W-In literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/graphlink.css b/usr/local/www/themes/the_wall/graphlink.css new file mode 100644 index 000000000..13f65f0fb --- /dev/null +++ b/usr/local/www/themes/the_wall/graphlink.css @@ -0,0 +1,43 @@ +/******************************************************************************* + $Id$ + + This file is part of the GraphLink software. + GraphLink is distributed under the MIT License. + Copyright (C) 2005-2006 Max Khitrov +*******************************************************************************/ + +/** + * Defines the background image used for the graph, as well as the actual data + * locations. + * Use padding-left and padding-top to align the data area correctly with your + * background image. + * Width and height should same as the dimensions of the image, minus the + * padding values in both directions. + */ +div.GraphLink { + width: 212px; + height: 60px; + padding-left: 38px; + padding-top: 10px; + background-image: url(/themes/nervecenter/images/misc/graph.png); + overflow: hidden; +} + +/** + * Defines the data display area. Modify to fit your background image. + */ +div.GraphLinkData { + width: 200px; + height: 50px; + overflow: hidden; +} + +/** + * Defines the look of one bar. Nothing to change here other than the color. + */ +span.GraphLinkBar { + background-color: #990000; + height: 100%; + float: left; + overflow: hidden; +} diff --git a/usr/local/www/themes/the_wall/images/alert_bgr.png b/usr/local/www/themes/the_wall/images/alert_bgr.png new file mode 100755 index 0000000000000000000000000000000000000000..b186db0fc9f24bb954b886ca3ca162247c8b6536 GIT binary patch literal 12705 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 b&)5G4n(^j#-|eLa00000NkvXXu0mjf*rRMd literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/background.jpg b/usr/local/www/themes/the_wall/images/background.jpg new file mode 100755 index 0000000000000000000000000000000000000000..cdd1df619b821f77b642b0c6d2b8f71a1d1cfbcd GIT binary patch literal 50449 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 Cqs1=( literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/footer.png b/usr/local/www/themes/the_wall/images/footer.png new file mode 100755 index 0000000000000000000000000000000000000000..399e0ffce8a532b93e0c55a3eae94c56f27c4e2f GIT binary patch literal 7774 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

                            jdtcI|hT5ozccxSzxKh6+l~|nJ`_Yj;*1){QorH<_w84x7VEdqfx|nr1j6`yaV7o;cVK? zcmJJOJJQg9efw7nfrawle(3ybngJXh|94gb#43N;xc~25oYOnO;!)rgwo{CjXz=^MCKw|L@-5)w6!d|3It%-o_{>*!KVSwb=Ch{`J2u z7hN?nYAgHy_b;j*pkv_D`7!^WKY>cmpM(%!G6PA^i>LqnEf8`*4TpDw7?WE;DylOP zj)eFPq-WVI6ia{rNW%3aTeW#5Ob;%fB>VmU{PBN#IYOkn8m0#rte6^rRsl5tLkwB4 zsSu{8r376=xFblz>ILZH6PsXqR?Wv^2@n9?h9j7{pjfE*4EbT?d{Rg z(bCe=?Ck8`-rnTo+7njs?*cc?(Xibt*!k0{Kdt^+}zx? zwYA8|$fc#F<>lq#;^O!B_vz{B@$vDUot^&v{`2$mzrVl#|Nk>HGXMYp0000000000 z00000A^8LW0024wEC2ui03ZVf000K+KwXBgKolB+Lt+pC7;@04bV{vSuh^`1%k6r< z;IMd1E}PHjw0g~MyWjA*d`@Q@0I~sU=FnIWCjutG#eNJ>mjWOVPU93a)|>EaktaqI2%jhqbzA`S<0 zlsJ?kIB%M3FWcZbb%ws!wQJ=c+A1`cZaH)9rrGUucg?43wm!QS^=|KTL$?xM28M?J zk2L2U@3`LayyJTZdu4n|^?en&qbq^sG)Hd#CJ`S;JI PKxqa~S3j3^P61$um$ zjmKm9{XWCtkXEZjAP}HjE>o-3C>D#v<8hkJCWS%)MNvp35)1|dDwPL1oeueYo^JP< zZ1#?JdxEB2lgs5urBXy95$X9vsdP`H@klaxLnd>}bULM4t?u3+wYnIxPh!F0)-VD4Wb{60%sa=`{Y>*D-u(@Y#a*H^J*1qcNOI-KG33 Ub|^T7E5XGPj7;!y2KxBE0oZy=+W-In literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_3g.gif b/usr/local/www/themes/the_wall/images/icons/icon_3g.gif new file mode 100755 index 0000000000000000000000000000000000000000..46ccb92dacdc634220fef86f63bd89cb3c62fc34 GIT binary patch literal 200 zcmZ?wbhEHbmww(Odb(IiwjflYTL<01Y0{*go}M*p)@<6eY3I(J_4V~RIXP`@ZAC>zm6etI_wQe} zY}x$z^N$@nHgo38w6wG{XU;H?0u+C;FfuR*FzA3Zf$U^pbyZO5OUZQNJ#4b*kcGFf zO~*w6w!bQU2W+||88=xtu<$D@IhI%`tUJCap@BiD|4^brsf`TtfyeI2qH-C_k}R@# LM3x6}FjxZsL>W54 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_advanced.gif b/usr/local/www/themes/the_wall/images/icons/icon_advanced.gif new file mode 100755 index 0000000000000000000000000000000000000000..3ede1fffbed345efa81f61c487e67f6cde3abaa4 GIT binary patch literal 306 zcmZ?wbhEHb4v8_qi()i_3oC- zt@C2%|GfKiUgZ2a!E^ur|3AZU=H0t@3^W6ZKUo+V7!(QQw=e2S}4o(Omb$8#jNy%&p9pPGu4?^c^25UFJJWeNr1yl3yzJfs&?{{ bLP??F0SwGO0&NWZ-aKq6(rlfIjttfScsp%? literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_advanced_s.gif b/usr/local/www/themes/the_wall/images/icons/icon_advanced_s.gif new file mode 100755 index 0000000000000000000000000000000000000000..b23354909ff9b2a96c45b9d699661de74b8952dd GIT binary patch literal 314 zcmZ?wbhEHbso^E)0&G_0m!E^ur|3AZU=H0t@3^W6ZKUo+V7!(<|F?a0&yh8mGD--BE?8dxe6 kIFl4OLcxxNLAvzz-VP|)Zf0h1qtr^t7R^YuWUj^_ zY}(!i0Rt5qV2_k2ngJsa@Ofv~dC`qfimt`i2IWy$$HI6l!ibC4%lUC~&Ua4ooo7ke zfx>-nDWSv`-~-+VP6FqEHsCn$HgFgi0KNe(0p9@^fNJ0aVAyE15=0^JF7O*r&oE=a z2=FH`3Cw3^PD`bm9JfT%e*>#-_pC~F7g#bH7Y&9Lr*ny-rX`YfuQ#StTGZ-adHyWJ zd_)kdJRjHTmQ1E~pKmn~SoL@w*46zRi!IXhLU#5&i)Gp2i0k#WBpC!^3dK0fKJxqL z($g1mbC=BKIgMr}CFOBAyd8;L6M0>(hYbzOcKaQkUo0+;7Zf~6B-Wam)>>M+S@yow zdatx}*=CF9=g;riGb58t1C@XYZ~+y-DTe6;hJaq+$K>Q+wAwu2rcO7SnR!hrUE#P1 zn&u>ukkL49Fa%Yq8Mk|aqV71IKZq0XdV@+OrB;V|{!t`yx2|r=;h1Y_@ss2qJU`=d zZ6^|oet$rrm@u196GVdNgDkt?^L;M%>&~(`C zzFt-JZCTk@85vjg`d+QJ1L%@UEkK;(vVam`%;_AVs3NsG>h*?re$wL^HktnN`!^Gb zDW8ubh+&$(Zns~M$u6d(EO6Xqg<>TV>DTE#A<4en+)#aek47`k^EVuh2jTEWEcOn= ze9f}6fk2e!J6To`g{Fn(=KFx)c1J~BRrMdREgEHILPmy=oGj?|0!0a0t)SDbiFi_y zz;S}XAgEM=(I_~bw|QRhdS6qkpNLVVk|#;Q<2gYPf>@+TA>M$9MDw|1Ajc~^&dyJi$fHooYYq(h$>T}N zya#(fZlZESZy3%b>}fxpPkH9$n$4#xu2`-6^UDj?kNDn{RZ3vbj^FYix&OAS_2|&C z8>U9@KmHSa%ol}ICtqJ~r`lf1B8=wN_QA$0`wz-?q5NRYv4LlI1*eRX9OaQ5uC(>{ zfuk3z&nKm&M*D2Cv=^l2)Q+sfy6+Pk@y1}@huuZ%MO|BSkjtJw)LhtB{`08f#aAys z?&#DpIU4WA-nMg+O4+CTo*R5Bc(v_I?2?}{ruBD)+G|hu^q#G)xM|Bwm81B7mNUC? literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alias_host.gif b/usr/local/www/themes/the_wall/images/icons/icon_alias_host.gif new file mode 100755 index 0000000000000000000000000000000000000000..ad43e17992a15f9e9303105f7a5ac96acd2abe68 GIT binary patch literal 348 zcmV-i0i*s$Nk%w1VJH9(0K^{v?%k`+n+E*( z@c#b%`0?G{yHxSwx6Yjj^ytO<^yKp8z4-Cl`t|4V;k4}9qVC+N(4iIK!)fv4yX)4O z;KFAA|NqRH0RR90A^8LW0018VEC2ui04M+t000Hq;3tk`X`X1gTp8!Sa4gR-P>qeJ z?|kq7K*0yHa{-S$PEWZ@C{W86A=mC-U8h_2wFM;3m+B_==DDs5F->78~y(O00RpACqaRT5CA((AEN01 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alias_net.gif b/usr/local/www/themes/the_wall/images/icons/icon_alias_net.gif new file mode 100755 index 0000000000000000000000000000000000000000..abd1b8b34c3a7f2a9d7cd3e6c6efd7593f6aad77 GIT binary patch literal 331 zcmV-R0kr-{Nk%w1VJH9(0K^{vySwqs%=IE7({^^`Mn>ADrR|7_=kD(O($e;;tM1+1 z`0()j{QUj~2F)HG(xRg5#>Vt%Y2m1-?!CS8V!YA^8LW0018VEC2ui04M+t000HZ;3tk`X`X1wND=40a4gU8aE*kg z?|kq7K*I+DEcOIB9_QCs6pTPXLU%~+41gcv+2arhgB@7l;dB&)O+d#9>pIrm*4L@m zJsZ0rP~RNF00(?zQa*D%cYGda9*P}V9aI4X9ApELJ%>DZ0FicgkBd42d>u=dhFqJG zor{qM28#d!9fV;4Sq2BGbgYqPeI5rL2@0{mwT&BwQ&2?%yL4nd3KR{_MFC4Z39&s6 d3?B~|*yTSK86y=M8}07z@bU8R6AL0C06T*ln8yGB literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alias_port.gif b/usr/local/www/themes/the_wall/images/icons/icon_alias_port.gif new file mode 100755 index 0000000000000000000000000000000000000000..4acf2aa106f42f5f6757621d1ba4e8aa578c34f2 GIT binary patch literal 346 zcmV-g0j2&&Nk%w1VJH9(0K^{vMA}59?WNN8(%tyo%=OIf{O+pms)*-^@ci%x%?JGc z{2tOCw(+)d<8r<7z2^Gn70?w_-BiQ#!`t}Vis*{2@2Won0Xmxh9Zg_wqxm^udq z9abKmI*2=zdK-5bwi%Y87zS1Vau}jz9 z{szs>i09|q`1r%~^Qi9btncr)@$nkb(X{aJqU`ME`ud9K=yK!Z3C_+`-QC9Y^qK4H zX5ire|Nj8Y%>V!YA^8LW0018VEC2ui04M+t000HI;3tk`X`X1QJY4I(a4f@DG-h6| z?|kq7mXGE~Y~>0D9_P1642Zu@Cnrem4uK!x*)tll2A9;cIphLMPhslY`o@51TsjtH zI|l)~ljga5aB>}YQ+pc)SsnlYZCpHoihG4Q90(l(1&WM4e~(jokvU@>nV24f9tRJN zJ`7TzaiUWQ3}jMfr&fLtP*4E^U2HuK6$`yY2YopRx;q659~2nJ)I<^vBNY=H+}+;a M;Nji?0wN&*J2GgRdjJ3c literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gif new file mode 100755 index 0000000000000000000000000000000000000000..55c1c4ad287a2dfd16a569d945202b3c4b42c0c2 GIT binary patch literal 1111 zcmdUu>rYw-0L3pA1(i9ht#QG2npqcDyJpTAXR~Q7vt=<;>#~tqgW4BnGb3xWv`!-! zI_WBNwhhWto&`EUpi#qk+Fjj-+zSGk2=zq;MMYF%mL+YN{WErQKK#C&{63uXgqrdX zTQh-7;2#^{bUGuENGuj>XlU5m+Y1B&7K=qJ78?wP_4RcKn(65w)z#HSqfwvF$6~QW zBGJ;)5}8bv$z<*A?cs1Z6bgYLxVpNUk&)qYxwu^J_V)J1#>VF6K{t&?6NR;v|{$HTCrySrN?5^}jce!o8+kC&Ifqfp2L0ngajSX&$6*)#v}@Q}@Bo1KO9 zdOa44IoN?=yV-2!^ZCJGkj-WjiPe7p{IO%%Q&W?>ySwA#<2P-D-+ zDnUs}iAKY*T8#?}3qGH{urL>g!$l%%48~OmGTgrX)srWWi;9Zo=H@&e7n9j;w}Vot zl`^j3Zwz;`^Vq#)+bd*MGq0ugf z!_Nl?2Sp2kSTDC~E;;hCAIeSOzdDwWp@ClYZK3NPD3!{AfdQpbJ~Z_3=FRr5u1gT~7YsuX1Wr%?u2w5MJ3F1ur$i!ga?*guzfY&P zwYIh#KaP`1r7#TF*4FZPOb&-VKR+)N3OO8($Kzozs4|&gc6MrbxSK$@U@{r?dfm>> zj=`WE85t=nE9>a!006+@a3m6m1Ni?Y|6e2m0Bk_ zcI9vyK9ibSrS1I#kzPP9sHhj;P5$y*^wAuI@GLbyrJ~D5Nd^(P44^*8CO?#d8pR_S z=c=mE$dBI5$!jE3(@9@fq1WFiL}1d?#ccM<)z1;7Ks9>hmpt0zdU-*s{Xt|JcrB{} zyMxWM^)+2eS;@RY{yQrLjk)#bo#)`&g|yPhq4))a@?uiii)BFZygv9^y^8YR_|KGj)FDm+f`}Y6R(*IYl{?Ehnf6=1< z{QUpdt^2Q}^j}c$|IC^Hjg9}OrTss1=06ZH5C)1rS-^^PKqSac23ETTOaUpLs%JP{ zQ&|ETSp|iqeUErsUNW(@>s)-~vu}%9*8vTWdp%n(DcpGB%eIt#(su=24`+jy4H_z* JjLsYk)&QRYKx+U1 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif b/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif new file mode 100755 index 0000000000000000000000000000000000000000..eb726d6da80aaca27538a0fd3e527ed4c3b883d7 GIT binary patch literal 192 zcmZ?wbhEHbJ@BV-E z=>N%+|L4#Dzi{FIwQK($I`n_Rg8#2y|NsA=0jPK8OdyFLDE?#tE6@RvAUhdYZ4(3o zQalxpys&xtIDq*ngV1k}1Ky4kRXF!?EIIPovqkOHA&Z$a@_f`^3gkpBWqP>vqyn#} PZR^I0S0RT4;WBg literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_block_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_block_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..e6345fe89beacaed80781c84b11e5b223bbdb5a0 GIT binary patch literal 193 zcmZ?wbhEHb;IA^|L4v7KY#xJYuEm-UHkvgq5lgO{D1xWKM>5E$v_Aw{$v3w(E*VlI~iE*7AOUz zcp4u6;h_2@faNQLFt_gkZ`VsEmUf;?j(qlQQ9E_O!sA}g)*yw57rsoY?311=n0h!H PWKMKY@nmu4V6X-NI3G~K literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_cablenic.gif b/usr/local/www/themes/the_wall/images/icons/icon_cablenic.gif new file mode 100755 index 0000000000000000000000000000000000000000..a071c66d707efafecc89cedd418a71a5e3e558bc GIT binary patch literal 91 zcmZ?wbhEHb9$6Tjb>ACnqNu7#P{v+57wZs;a8U$jH09yHZk8i;IhWeSP8K z;o92TMMXu!!^37~X4cl$?(XhtYHDI)Vmv%Nqobn^4i3D$ytcNspP!#_aBv|ZA+xiy z>+9>awYBo{^1Z#iQBhH@uCCqP-KnXm{r&xScX!dz(R6flN=iy&V`GhtjnL50US3`( zC@7ein00k^0|NtqfPnS&^@N0k?d|P&cz9`PX;f5HFfcGCCMG*OJL&1^;^N{-MV>$aJHk#FI{*Lx literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_cal_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_cal_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..1647e2f4f408254893f512f68e583fa0d1f4b944 GIT binary patch literal 1060 zcmZ?wbhEHb6krfw_`Z)pkb~p#2YU;Od-(I|U;mOC>Xm2mX z$?50iwWX$ppPxTUUw@UKUr9;HDu4endHE7q*`=PI8_UWHva&4s_%_AG9jd7*S5YZd zQ%jSUKDdAX>Lp9M^z^3M+OAx*XiY#sZdTT+#fw+?_{d93_Zk~tUA|mIM8wzEcbb)z z6VNVQ-C7luTt&qdfq_j129+8b^Sr!nZr!>%Jbb!?LqI@4l7Ydoj*gA1RxNgS@6gei zVqvj!=gw+*`PZ*s@7ccn=FOWY_w4C%bbS8&`TO_pmwI`1Sy-gW$@SUWZ%#^D7#O&& zsL0FBZFO4OlDTtv*x1s{%*t$R)<#A)sj1moT1JG1zJ2?4ri;sRA0JIk&1FeRB3xWc z!o&NFjqB{}9_-&AtFIp*C>SIx?Ca^d+}k@sPj8u**T(YlEw#0WYHK??J9qW;%yn~{ z4-CMR6b=p!AAbINJG*vc<6E0IPqni8`0-=0y85)<-VLFlRl2%)YHHJce6FuvefRF& zL@}}3w{IIsNSvQJb9sFH&!0c%hJ-vlb?RVs_3Dg_kdTl_Ev*AHXV%!+HLI)l85z~u z*|q5E{`vD~x{XbQpx~jpx*KcPGBPq|XJ_{q7+hboX0eBdzq)$7iOIu<4;Mv725V~0 zw6#6l(BP_|5F#eFF+P5>on4rO#I@C{E7aAWK7D$A&YTs&!Fvh|l>`JfRaC55x^%LI zMU|W!A3OVr6DMM&r8kt6tn~E_@bOvV;n8boxM$BE1_p-z|NjHYp$-&(vM@3*>|@XY zc?6Uv7&!hj)N;yrY*0AJ>=wovA@M+1frW+l>L-O1_ci>gE-n{~8QT>a?K>2NlAm8% zX1_8>;L?N6?)9FzStdoB*``TxZ=X|g(aHIgfQ?FoX~37IoRclsc#f+9>?_}#d;xOe1t(%sVa_4V}j z^k(2@?)>iFg2{r2=ZGTHBG=*9`TO~;t*xrRs?5yH z|Ns90%m8L)W&i*HA^8LW0018VEC2ui04M+t000Hu;Ma{L`JHI0uIyPp$5Xa+?T!K4yR^l zX=ZF`32!46X-Xpyk3V>6duSdF99e7|8CkM&BocIWk$@SN9=;xKY*9f*$PyF^xXh;; yKLZ>F(rf_LLMdSg90~{+90;XE^z`as7ipwokoEpW_m&B?L6C*OWd#d{0028uv7Gt< literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_carp_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_carp_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..2ba8db211f22533f43cef096f7a553b38f73f91f GIT binary patch literal 357 zcmV-r0h<0tNk%w1VJH9(0K^{v@$vEQ?(W*!+ScpV;Nalr=jZVE@c8)n%H_)Z{QRr< ztJ43{^#An2;KH=pw9Nm^pVFV*|K02B>-hZms^zNF)6@0!^{V`;`TzOX|JUT?Z_0z@TvG5p@Qf!7(}V0W}(+01Ew8s083>!XY(Co6Uvtk?IORfNt&4taZPUt^^J% z%D(_7aY%E15*$#19(qwYT^$exUmXl#8+aajdVWv`98-jPStAG>1_%ip2yzi&cmf;} zs%UC!Xl`o>ah_{RBM*>xdTV`Z9u^!~ZUGuuwR9v9kdZ$+mw&*Me{NAhM#>!u47$#$ z0Y3yB1=DT-)oDlRk|c*ll86%+&x+)(hKjSv7k DsiLkc literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_chain.png b/usr/local/www/themes/the_wall/images/icons/icon_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..12db07ad024ff5e6c6d29c717e1440a425d24151 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1SGfcUswyIGCW-zLn>}1|M0g;Sg>2}W0Wz6 z)3jqEjxQL!G;+T*D(q0&p)kvgEyYqndL7425tCe=6H*Eck(!%0Vx&X(XLVonalGud zMy^AlOKwfx;Y|K(1_}@4&umbW$(vEwC1W3{y_G`|1< literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_check.gif b/usr/local/www/themes/the_wall/images/icons/icon_check.gif new file mode 100755 index 0000000000000000000000000000000000000000..393674d42e39b25c9c4c7b617a8cf8c88ee4674d GIT binary patch literal 1291 zcmdT@k5kiS9DdlogMp0OREV*GG#HCX+d&*UA&xm5gStXOTZYJH3l1vqC?ErGZV1C! ztyGGDnjBKck3?<|MAATh$u@rDP7Y&G2xymOorcF%U;Hn6@80L0_xarW`MjU^dEcaD z`Cf^Ni(otg+yONJA>8b4umR=31>h98BCfKJDXXNps~T8U@~ zW(D{Z7z4TxKqeUkV}gMf5l-@t00ZzHAOLv42+#-RPf9Ksih}luj8_0JARX`qc5Ts$ z)e1C&Kf^~Z2nT^8pbcmOu7K6eQZ1?w4^%_ft23?{Wn`+WAOQL}9WMhXAiX6;GJGa{ z&;#E|U)e2L_EI(l2$%{;FH84uc;F0RM%2xy{N?=WyVdpg>dCW;=fnle1-s{Vvz}*# z#D$pFO|SxQkbP`bR#F z;5yI^?lkvs%V9Ti7f?e^`xEv*ho?8l7etPTE!g@Kp#O^xJh_T?bHCo5`b@@Xy9(vk zLLE!K3O}9E|GCVC!Ybz%VnU+wAJV5Z1a*dflX2t0Q0;*1>;EJ%5O`AOpiFW;0 z3Hta^sbMf8^-RiN4=!nJMp<%es$t38JlEo*PPOh=%~T3Ar`N`0`!7@|`=*z7AX)R()oUTogZ7QR(G z-e~oFoH$wA1#zZoGw0#ZhL$qPl)oBZHcxmDwH>>k!mPE3XDshuJQAsnq&nL*pZUC0 zOJi)yD-=9p)NQOYePebx9j|ZX-?P8Bu$FbL?D1Q_TSDf7KQ1l4|EKF}UjAbJz7juK z)WqsPrzC~T!&A=1VoOaH^_`WTk@B)1=+ncw#Abn(dHN3)Eok;=mo>LfnPB8|h=-mu zMJw$(joZXe3OpCrVcWjfpH)sH8oR4$hIdVru!PUuMrcpD28N$yM`Zo-i9%$Ox@V+! z$U=6Q4(h_Ml(^jZHR)N_>Wrcr8d~n8*-8{GoR*9A7Hx_bXYgPmwO}|ro2uznjS@S~ xO(hGdCy=}?m>#@lF833H{&iiyR4OpLC@{%|>y7Bv4tO#(&Ff8d+jlY%`yZ7jY@+}G literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_clock_green.gif b/usr/local/www/themes/the_wall/images/icons/icon_clock_green.gif new file mode 100755 index 0000000000000000000000000000000000000000..e171ba883ff6adb2c24c38893301da408880c34e GIT binary patch literal 308 zcmZ?wbhEHb54l zzcXjfFsx@_*vY_<#js(+1{D<*hTRM|ZrorD7ml#~<`6JyxIz`)KRBO}9b zoPl8*gP@>be0)4ZAp^r&1|=mW5fPEASFfg~rXD|joS~C}jg4*Hx^)a?4BXt@3_x&( z;oZA;AO?v*@h1x-1A`ue4oDx!PYi5<4%1IJ2y9g1nslKwf>CPi1?34+>sZ!`X-9wb z5o=fz<`cL^=uz&r;)@+y*XXjB)^!_8x15@%JH>}NB43@6#fMozNSBXQTfmz~Oj$=l KzD>`O!5RRChfC-H literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_clock_grey.gif b/usr/local/www/themes/the_wall/images/icons/icon_clock_grey.gif new file mode 100755 index 0000000000000000000000000000000000000000..00c865a19c662dd9e7df3b8067c187cc5cf3680b GIT binary patch literal 308 zcmZ?wbhEHbge{LGm%N=izH4|EW>~PofUA3gs)wSLwqII+)H1HsQ?-6ykdWwD z6SgN{iO{3mvM-LETUV`BEUD|(R(Ci&PqjfsBO;%VncYW2T1i`wMN`0ASWQJsT&_*W Hk--`O8gXE6 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_clock_red.gif b/usr/local/www/themes/the_wall/images/icons/icon_clock_red.gif new file mode 100755 index 0000000000000000000000000000000000000000..7b412eed1873645dc604d9d95db433b38cbad27d GIT binary patch literal 308 zcmZ?wbhEHb+H`I453cjgVE*71BB&v5sr4n6`CR zh)?^PFd5G^B9C&nO@7$1bI*R7V> S>k5;nS4v%(m@r9%!5RSkFA^yL literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_configure.gif b/usr/local/www/themes/the_wall/images/icons/icon_configure.gif new file mode 100755 index 0000000000000000000000000000000000000000..7182e0dafde29cece7529b08bec24c70f9f245b3 GIT binary patch literal 64 zcmZ?wbhEHbaEr4HjlXWzu51?^ZEJk{7BJ6{1@qGfwREh zDnKrmvsf&#SUf&HuGMN25)zC? z%*@R2@bKW^phBU5pu)|~)v2ke)zuY=q&*}g#KXfQJ3E`nsBv&`SXp^XBoZwav(>sV zF)?f~7|7(zf`WpSloXXpwZ6W-x3?#gj_P#s(a}+%kZ&^0$Hm3bXpb}++0oI_-Me>4 zq)4e$+S1a(<-#IS7nAvPX=%x9o~x^SDUtmC`Zdhuas&bal}hRDlanJ1*WSMUZDeE!1VL_Yn5d|zhYxcZ493`)n9XjC zkB|5E_TJgqsjshZXlQ6`tdET)fFP*V%0ff0BqqjjIPAT>{psmxv)Rn$w5rw8{{HUH zPWJN3vc4etcXvxm3z^KS_I5Zw|Hp%a19$iH zTrT&;3%XjZuCA`m%ga_M{#ahNZf$KvL_}CD78D9)v)LvlCi?nVuU=If4C;!C0s?`+ zX8)F)oQ%hRo|TnpH0nA!8k9;U4A*Hi>gZ_vg$r&ZQg}wjEgp}Xnwsk4gRQ72HyX7# z+{K}x!QNgTo6QCQ;6p+m`2U>Wzjg=!PywHQ)cg1e!0`ltf9eP9NA0s>zyR0GKnEIH zm4fnJG!G-cw*vsbMY}4*b@IhT_j|1G*mh{IhJOG~F#?JF0UBBgEMoZl5(c~Q11kK( z-OoJWNt;J-7$@$w;aq0P)#$cWM}GpvP=dS;mNCrf$sGX+wwiLwTQ^6La?kfpvoC?} znpYT=9{fDI6ihcfS-FgWgnvROWO_1yJoOn%`7@Q@CCIn|^t%Rx7rk_G4+HU!Dx2wz ze%H?QCB5emao^N?J~4xpST@4*L1GLUIYyT~Cn|*bU8jm}p~5bq^{v%(*_V|p;iW(# z^Bjo7jD+r@a7!`^@0AKwFj;rq| literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_down_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_down_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..70a7473c30f8ef7a9ee5ba94d9fbb6dba711dda2 GIT binary patch literal 689 zcmZ?wbhEHb6l4%&coxR+?Afz-@7{HFb=|vn@4C-XFJJ!k>({4GpB67(eB;KA@87?_diCnuxpS8;UAlGa*518)dwP0$dwUxj z8{fQnbNBAu7cX91zkdD0hYz=J-#&l-{GB^@T3T9m@7}$6^X8K$PSn-aojP@5`}S>D zu3TBNWJz~-_k{}=7A#nB;J|^yhYxSqu;Kmt_b*?(*tBWW+O=yB9z3{X$BtdQcD1#& zb#`{{+qduOvu8hl{#w0y^~sYb_w3p8=g*%bM~-aSvSsevxj%pYJb&)oj2Sb&e*OCN z>C>jBrq7>0zkU1m?Af#b{{4IY{Q09tj~+gJ_~XZqYuB#*{rmSn7%&VRQ2fcl$iNWB zpaXIOC{7sI|2KsB3CRn~`ge4C2C%w@g|G$jd$4i&d$J0JgtE&zd3#R^;$rag3A9o3 zaSRO=)%W)k4&mboVpg!#)Zq09VRh#Y^Mb(36Oi{UT%8^4#HH$$o zER~5-J+Q>ZBBOzsM@D6q$HGGjLESRJlQ@<%r8qaSD6#2uD5;*};_zxTzVoRX%iEiKtR%|sqO9Uhbt?{mzT3$UAkUgF)S>w zR8rWnv7%X7fo)WFsRZY(P0nM@Oz$ zSXWb11qB4HRaJIMMXOLymsC&EqM~|GP}#7su&}V3M@F=?w79sq%!7l6Nkuw3Hg`ET z$hEb#Zf;mADrYMz92^xSBplbQtONuEomNu0Zf<8}WCaBUfI&ZgH8pZGGFL7vm`+NK zF)EKlL6SQ*pH)>=3=E7=Nxph|ltV+jyu8+$nxarppF~5!fq?-50li{k%$1ehwzi~A zO`@Wrb3{FLH#eh5L$Ov=%!GueS5(i>&w6@#gD4}VSy@yB1l6mn=;-LcczB{!RhK+E zsZC5Y9viV$Q;Ik;UNkUSDk`sGVVyxiTmS(7|Nj600000000000000000000000000 z0000000000A^8LW008v>EC2ui01*HY000R80PCFq5DnI(DBA`o1T|ya6LIy>&H9pv zkBe6(iX=Jbi_IB5hyXys#_l#B3q3YM$S}K8Sqk72v}QJTxF&3PG=N;{?qJaR~5?nW7^HER}HlxL6oR zr54;_Qs`R&I9E86*x-y;sC2<{JX+`NN1H~CEerwXDGv)bqEgZELQaVg6!iX#2uH>P zpkZLNX@J&=$~z;|WSFzT%FwYJqjUv2lF;pev0E^J2-;({SqYHI%f|KG>Q=luEe4<9~!`}S=|N5_E!8!leF zc=__>t5>hSeEBjXBjeVsTg#U(fAi+e`}gnn@88$m-I$P&ux;D&%a>1-mq*Q+)6CA! ze(c!JfB*jZ`+MHGb9>REMeEnk%gxQWbm@|wp02aA5f>NxxpU_>Y?%G--MiDLk7Z}a zmXs9t^%d^jyZ79=qcSq0PoF-~&`|pQ`N4e1_o~0G&d?L%E7^*uCDa#*|X8nUXhVbbLRB_`t>s+BBH!JQcO(j z!iA%Y7A>4VzwgSG%TZBoUS3}R|9`)6<3?3g)x?SU4Gj(V?_aRDw`XBtPEJlbbZ8S3 z6JtX|`Lt=1GBV;?TGG#+J@fwkJ3c1_KlO1)5yqBS6B1LkMA}%*4wu) z-LPT9rcHCMUA-zJBfE6TqQb)L1q-Hq`0)Pk-@pC+6%i337cXA8c=5#JM~{+{;x1e` z{_NSao}M0OXXl+eckbQ0rna_r^XAP#K|#H}`O3;t>FK`x{r$qi!XY6+K0e+_Nikcu zZoYEmLT+yE;>C;4oH@h5zyOS2AUW)T;!hSv28PWHIv}5d@&p6Ne};5Njth$gIU@9> zG>$ZRg^00kc4_!kpy)Lqs5L3kJ_hBb*cKa#M8k2aG;U2hGY>dYu{vhL$=zV z3GAc!c+&ZiwB5bbWBdZZ$HjT|uxTPTJ!z)o8d9{o)y3!2CSxj;aY$hE25xOk6 z`MyE`%R>)7_Dud`ROFZO+pa6q40H#{2-v9sr literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_e_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_e_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..9ba5738fd049b7a747a536a5bae8b1e4ff5a513c GIT binary patch literal 1120 zcmb7@>o=Qs0LOoLJT5U!499WFs?s1Hb=Ra)ks?pk8`D2w-`C&IoA3F2(HIt$CL#a=I64Hs zPD~`k#x9hVJu58K2!$#--DotvXld#0?(SqVV*r@Hd$$HbBy{?`SUk$*j&eA&Qt3oW z%4|-Kxw&}`9>1Yh&*kSYNF;KPbAEn)vzeLc@vQGMGUOO`35LVNgJn)mQ~)p{ajB{* z#>GV^k<1B&YPEV`VBjVWcT+6h)@THQeh_5FU<8v$&bf~E8a_WSFK;9{@d<`a%L-N$ z3OWEvIz0t|t6Z*LCQAh%B?WzFFtjq6n`2`?FE4+^OX}(ANec*2T@HIdr4k5)R5Cdv z#H${|P?WK(P~1Q3774&BmFjsz!(?h|I?iUjtxYeNXX9llx>t<@SbGnGtcRgk~YsLMi-F>a!Z zi+wgic@!Etl#rkd_2*M49TD^p7#6{>8V#SDn;VQrCsMd&oMeF=p65w^P*%nPU~g}) zxVX5N&Ax%NuJrcIiJ-|TWbL(Uiw_@`lU&!<)|kwonOnCEg|a&rE_B64A_y{n?;eeY z*xFk2`LS_C;=#c|If;03a->d9Zf|eb35Agi#%+81zL+cC-k)eQG8RfpV{kZyLh&Rm z?alCT2Pd&H8OyMzl+67oY+(>RaEVugQSUESZ`KM)rMK@bW+B8Cknpvurtom9G5 zU+?cv0szoxzE)ONeO!)*hesuf%BjKS-X237PH8wzClqK!!ar74MmU`70Gynhoc8~3 z+>ap>01g520sQa@V0i+5`!{f>F5cQc3hxEA>~Glc53#=qlew5W2n52(y?tA*BzVYh zY*;XDj<(>0&X_F0EhJ~Q?-V}MP-XcsIe)b$C$&MO@p@Xz@~u!=?4M;fer~KCa_V_s zxygLj63~n9?evGNU-`(MQVxuN4OyGq*(X6hyKI*Lns)E&RfmZA@~JOhit>f9jTs!F zI_~Bj9Xf>F_mu8#jDB_|D)O;I>YJg+j>KS|CN9aW(X?Pk@473haHGWEw$ltJbw#+F zEBmdcW|)tgZgg4)=N7RozKz0Oue@J6U)g-|HSemh=_QbjAAqa&12iyUr(*OVf literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_error.gif b/usr/local/www/themes/the_wall/images/icons/icon_error.gif new file mode 100755 index 0000000000000000000000000000000000000000..e0fa6597a6ab440c246ace3e6124a2b59d44219f GIT binary patch literal 1312 zcmd^;`A^$r9LL{ftI|yIiv9xTJm@cz(XoV<1@W$D0S(mI>~eY~Z*Njkl1Iz9IKt%; zu{eP`hr^*;Q7J1Ut*s<1jC6Go4-Z#5qfn&KmnJ8#@cCNcDDV{M2UdVvfIFa}8L2dr z(!rq%sG(sXf-*k7k{;*fMH(7NU0tkDNP>eiXiO%X1c2g}{&01%h76$Vk%P zKa-L|OeW&x^&v0@v;&&}k9I|(0w5UpiMpfXd0-XD;Pdxr852X4N|Kg#zo6h(TGrN* z48U*wKY~TWr54Zs~;2;fjbP%m}EjPCqPz3~#_IA?S8|&lK#AK48A-i0@0~i1% z;0%0?{qa6s^`HC?;r}=N5_E*`WB;E3hoI0|lwmVZnVeXmnpxW*E{)2rtApBFo7xY> zmgu@FdR_=;UaRSQJs`_HJ4-sOnRA=*dHL0?z^C@~Wha3}wQAUUaKto_WRfrESyFGx zZ-(0ho7D%nicY(xW5sNJJi^my3}+cvoT1|=iXJ&|Imu(+T2D;AZE*27EQ?}dKREDS zoS&0z;j8bOTm71H3$@+Tmy1}wI}^EIWJWMvYCLSoJlEXj7hUafOr5Iz*vcFc+!N22 zIbEIOyqhvVa-nDa;i<$)UP6(B$#K|s^z^yv?e#mi8%M+^h4oVAXNCIhIt z78k5{pRM0{>uBPQUHjRM@9zrt(qBt>UcWT-D9v}NF@n93|73h%JWgJ^m{6+61h zemTU2DgE8-G9R7c>8Um-9Zqv)svybdxNqq$I3+>kb;Fk&)+gCUHsg|XZP?5dSYfM0BSB literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_exclam.gif b/usr/local/www/themes/the_wall/images/icons/icon_exclam.gif new file mode 100755 index 0000000000000000000000000000000000000000..36c2ec7b0d423d145494026ae4225d9266eb78c9 GIT binary patch literal 1274 zcmds$`A^da7{*`D7FsH>Ld$^m+j3(e6>#Gi+H#MM`xr-sG7vF?q1g}yCWBJ33ML&O z;}Ar%EJ`9H447=1P?QQdm^(x!0xeX8icm#mo4R*pf5x64p1jHXCZG3tlQ;VPsKB5+ zCm>)OAi#%I3BU%xd6$14aEH4c{P}GCY;wVeRuLf`v9-IQ(0%%5j*Ba~ zopQUCTWo*6Gd}$qSH!s4x~OE~v!3U_aq#Jd>F*p*R%hdSUFcr28)2pzOhbKpJwSE> z)rMv)5?a!2Oz?3Pu4Lr_^fcR}CYTH01E8BJv^7wc!oN}2hXq;aXCgH!o)y670M!8Z zuR9;gpv3@qaLvjOSrdlIMILT6U2bHct}@u4++AcsX zZuR2E83sVQh%(Y&Kr%Oq-GTbz(*BbGWRj77Hfv*=z;!9=&p%YL*CyGxUK=B1YE`U1 z?{QEasGm*M&&FSAVKjX~FF(xk=d)-4nj0)}BDFAsmYYJwjpm7w22=;3u7Yqf%}utd zD6;-(FaVdMP@9bEfPr&N)W)^S=(ylz0Xu3l>@aUQ*#AwOzfAv&#M|+mp8zt#Q46P- zzHVi$xrwKEye|)AS0&BEFEq6^^-TX9>fo~dSx-}T9#dv1SGexuUJ_6Eja?3JQbW9CM!Rjs1o(6#b;yhSRdSNOON)Z zJ*srv=GP=;rqA||O-wbv+vvp@dYvEFIz^HMk&kB#xZd8yBn0!4vZB#Oi)I;c486PcvZYO7!s;mVyX}rvQHx?;wXoi+qa;trdvdC9R@_eI z7zm60xk4+MgbWe3LXDJ{(c>D%(FM2vg!sv_FjAyMLDmSyc;f5xFea?8n5k)*Wo ztkB5lj@>pUWV3)ZZBx8dJ>fx4m6*Ebsz=G}-HH)QFA-hhRzP=To1T=)f M)78&qol`;+0MHgBO#lD@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_flag_en.png b/usr/local/www/themes/the_wall/images/icons/icon_flag_en.png new file mode 100755 index 0000000000000000000000000000000000000000..bd7f9a5e1a727a1f26dbee85c62d142fe6bc26a5 GIT binary patch literal 618 zcmV-w0+s!VP)F6}X$ILm@h4=_42t;odEO-v|?~BL3#zxHs z>Vjxz0LBwAwiYiu_Vw<4VEh4N5g3=i7zM^FT1<0u=M)sII(P2TyK|TBCnnxXNSqSa zVy0Qa%bUwEZQ4O#$^oVyU@8KpC18pIrYk(DPF=mWqGH|U(|6u)-wsTxM#lW--Owqt}O=J!*FlcUW-un9XqYqoR-b+pa0KBb>=4{QMUjP6A07*qoM6N<$ Ef(Py}1poj5 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_flag_es.png b/usr/local/www/themes/the_wall/images/icons/icon_flag_es.png new file mode 100755 index 0000000000000000000000000000000000000000..434776ca9a72fd62a77d9183e5a8d537bfdfb1d2 GIT binary patch literal 281 zcmV+!0p|XRP)i=rkE~q*mzd<(_`-LgBt1!T*xt{V2A$82fRO?a(;Ti2P7}u5bXro{Me6ru9ya{P2Kp#!(fmh0X*_QJ&{oy+`NmLmr^z zl`WY-{m3Y@qV)R{uG_Z-qc)i0G{tG9&5a}U>YjP$s%^b%cTQZtr+C6P@3eIg zgZ6AU1Im7X%DMEUg25t36jM~^yR_}s{P>s~VgwLPpB-cswgRY4&u2+c-ul*MTWjWT zv=?JQdHMR~ z>oVbLp55om-EM&HBhS@VXRe7tRGc}iZ46-eA{OgN_PmfP;TBngb^ z$umOj!lwewvWuA6H#HU*(+f{1>Me32A=MS`(0>6=b?@&90G)92wov#6Gjei($r6Wk sXXL&<;hJ_-6>DN6Avc;*m>Y>l03tlVCfuNw6#xJL07*qoM6N<$g05TZhyVZp literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.png new file mode 100755 index 0000000000000000000000000000000000000000..48a34b666aae6c1b7947fc2f4c05d146b95529cd GIT binary patch literal 1528 zcmVSOD;`dveHR>N|J3gMv)Gy{~Py z9h2#e(>YyI;skMc2$-KYW@op;U?MVklt!Ba4aLk zL%`ha+rw0+7G1 z#oJR;TN4xO9UW`c)z(|L0MFIhs;jJ=NK5NPq09$Fvk#yPh0@g4s)bYv{G1Tzj4D}Rb}V#hDapWesTO4VCd}y)l-+1&1Plk za&z@``j%MyN-F)R$B+M#NOlGXUx-9@HhVcIM@OTrT)DE6kzvlySJCON{TlZZfQG~A zfx~Bti^uSIMO2g=fzS|%8};?>wze%k|9N+}yR~(rq2Xz5t(C!8N=%$VA|W)|7#V40 zGQ|Xf^KgJ(AZUldqy+_!0t5R`pPmX1o;-I>hsWECi-AYrcZ17)T2td)M`d~^5I7dL(ia{+ zLMDrm$T1%unXj+P&rb$}X^=?30Esrn#+rykQ+&LcL;^9HQ&UwK%t}^PyN{1+a`N+l zmo{6imsh)=-$NX3EG`a8N}5KYX5nx}P>?Pp#DK*vMMQvfn-da1a;*9Ja|D70i(N@i z@ACI|9enV8+NL0nySu8&N-2ZU2RejGmHYe81_V68XXuYY2yP9u@HKBd@wz8WW>IqvbG|GB8k$!RVr+^>J|v(a|bAUW3CehJ`JLhJw_M zhljg70669H4mjLMB57eTH5{(Gcu@&5hQ(@QV}TI})MJTATu4mp!{N3M9zF*G{(kv# z_|heaNQ7W8$lqTV5b&`Esi|X;QDSUZKNcrOV?;qgojyJ&QC@qr_{;V7I*IML0LbA!clG{_M;g}H>Xj}H z`JObhTMuU|Xl=@`8JuISj(gs}y;K7$<%e?yytBAzyisb?NCZd3pLd-pXc^Jkjs*aj z`I*uD9i`@GpK@4h8-c8Q_6ng2Q`P@XxL{!Xo#y~Bu96=P7}mG;ecJd~d%1b^xZCyN em)7at*ZvQi1F0RQzOT>s!4H z)jtq{3=9?NuVr$D1DC89G%rAxe9{ob^%fwU_~xqs8RLS}G%@8Rr-Hy`G8z(zgy~bWvm=iltj&O}rI4-i%6!{( zu|pYoo44GQ<51;0TJG5zi##>Cm|8i~)40}uat+FY+6sb%gIyFGk@?9DlL`Q#R2rbP|eS!^l4Xe>UBHC|ig?Z<+@cD0#bnC*Ffru+6L$F^3 zskJ;`^3D>U7h6+aY)yN*Ch-1z>#Ga>{{H@f@Iy(E;M`oLC50d~J45Plr_S@u32%?I zzCStP<@T&c3vI4XH+XhtAxOi&fB)t#tV>7|uZR+vmZ3N+TXA}Z{OO6N&o{=rJ<|3L zs9{I;qlH#?=a@W)Xjr{&LQ1xDW(i+h8b@ZTV3a>cYLdY2Zq3Kb-GG+7*qZuuwcmr; zx;JJRK06K85SOf+RU(>J#FDOixzxI^MY}ddi!j21Tbqbn@j@H{VyTSlXi!lXbTaDE;>Iy^g;LfLFCe^W--&s>xcl`M-)iHuq1P=64aab4NYms%p1GDo3rF!Qm*| z!h@`?lX2&2ASi$>2 z%S&QW9LL2)|3KTqXweID(Iz3$3Ku=-wYf#0A`vd`Mg$i{Vi2`xrG(1?kr^2B>LA0N zQIMG_8FgUPsnHxw^KtI=m8s+Vfiy?2H97NL9L|N`hwtxu&zJVttGL4vz%W0C!LvvZ zkN=7GeDfO&7b1~+Z7sO65?WpLZESpAT-0+og!LS}6U@*84Bz%4j0Py*I8jS{?@E*Iq_D)TCH#c7o4?p{~fiDOWQmH^k zd_JE>qX~sV>NDza+zbtUnxDUv$-01Fr~8Q@AQE{A2n2#eA`y?r34#boB)^uI)qQxV zxlAUL428lYBkx(PTMBSPK&^(;&^?()=wUZeZxnK5!1Mp;RgxjYg~0f($gt zXf(vq(yRV{>d(>&0DNRH!Z=O=Mx&9-<(kdrX0utV)r#3{dVSr=<6(1if8W8rzyE{F z1s)H~AQp>Z1{6grl}f2p%ATA=dAzrSgRo;g)i5%dp4nLf$6*p2$D!5la5y8A#W)<( z`1rS{SL-RCWoPGdbo6dv0fcDo@Eun@>(S(fK{ zAHQIlCPpTq0(D&16IG^aI`^(yjV!YJ{Vn=W%esQ{{;ks(isR?z5(Y#$F+n{ RRD}Ql002ovPDHLkV1kYdn#uqG literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.png new file mode 100755 index 0000000000000000000000000000000000000000..06b53a113dabbacb139a01dac04b413e707ac3bf GIT binary patch literal 620 zcmV-y0+aoTP)c%=i$TN|0YnjbQ6*9`PrD`ct z-kzf1ehM+TpPf%8;4T24@d9;yo6%ald6Yn?aB$iY}MSZnu}qW#D-d;R2W4mXqJm_9Utu|6>+& zfM|!qq0{LM27_L&*Jv~l1c5sBdR^qGD%`i>7$g)R85k?4W|j0%x2#rcqtU4Ea~ym; zGONZFU~}~WyZyW;07hyyn^H9`2Kqlto$FMHhwN1N*8hN3t0fVy#RxP%dQ{n1s9B8U!7rtL&E2qKO!1& z{bF%#V0EHT`J5gA5S`zOddAVU(WKuLUAhwwzLdnjFZ>sjj5H@at#T&-00003c=M9>jN(gGbY%D`^T#KD?1Ewse~l_Cuw zZQYD9P%teoW0_pcQ(?omWKaG{llJ`1dH&C-YQGeW5Hw7UlWt57KPeB){TrL!7x2#MSI4d)F22;%304?YB)^{qSkCwFfKmXfv~ fOV}fgwJrSwMtOH)-`~a100000NkvXXu0mjf=1US- literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_time.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_time.png new file mode 100755 index 0000000000000000000000000000000000000000..aa8300ab88c0506d159c27ff1123153cbf465e11 GIT binary patch literal 646 zcmV;10(t$3P)c@;1P@<~A6%E!J%;8YWWablh915Vcx06pA3i zjYW>~aPRaQ5RD{J&4;(PEi(VP@SQ`Y)mcp2YEk`u_x!v?5Jjn2H_wt4^5i8zDl%zM zH${;~)#FU~6&d5Y z?SC-rkyilVvKU;mOfd|A26|*tdpw@#^*ZD6@Z#dP+o6+i@9p_KAgSGM*6UT0Bm({* zn}L9PS~Q#xBi48#7W^6j%F$>5FuhJ^GMQSfMzdL`sM68#!4E9|^pa1{>07*qoM6N<$g57O0RR910 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.png new file mode 100755 index 0000000000000000000000000000000000000000..1857d0e604ecf3376bf7251520e8226b8e12edd0 GIT binary patch literal 487 zcmV+PuJD_Cj=O-CW(Cv&;O|s_B*HfL9^$RwN(T(+(%YH$uxJ3{C#x&2)~Wwoto(l^%m1wm{|~eOzL|Qv-|YF; zj(>lCW6=Q7bGusn=MojDo|KbXaL&&d~@545`mvfwf?VUg8Jur!u=Tz z@c3as^V7dSzn*VtyIw5tYl#NPKU+ZI_WN4QgIP`xJq(xu2eb$1wi~5_KNhR~U&;D+ zr^v6{)xTcsx--!Uy9Q{ut*yRQF7{)Q>Zd&k?{9DU@&3Zob%k$Fu3*5E3ZAT~yj3Cg zVn^l6^GiP7-~IXK+9#{a81N^xC#x&3HyJ!woc!kO!aHZT>_`!2_)i3Qdvf{HHI)a7 dG`7TX0RU=HaFmEk7ijm6U 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 AdjJ3c literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_help.gif b/usr/local/www/themes/the_wall/images/icons/icon_help.gif new file mode 100644 index 0000000000000000000000000000000000000000..84c84dbffa0a61882b21d8cf82d402644547811e GIT binary patch literal 1669 zcmZ?wbhEHb6l4%&coxHO^XARKK%d*UZ~OcEFI>3r!i5XBZr!?k`EpfN`NoYK{rvnA z5<>3Zzn_tjv17*$7Z;Z+SFW5owff1EC)clE4-5>PJ$p6_3v)w5!^DXbPoF-$Zr!@3 zrlz}hFGfT}eE$5|$Hyl$H1y%ahgDTod-v|m%*=fA=1qTpe?mfny}iA=yZih1@3(B( zvS`sFCML#t^X5&MFk$D;od*vd6cZDB^ytyPefz4btJ&Gvj~qF&X3d&&=Z?>uIa5hV zsimdG%F621tJ}+$FP}br3J(ttKR-7oC+F0uQ+Ms!_5c5m-rnA`XHUL+_wL!VXQHB_ zFJHc_t*za#VZ-s`#~(j_Y-D7#d-v|x*x1F37oR+NvcJD?@7^_ng1l$WoMB*KIDh{9 z|NsAi4Eg}Y|J)J20SYdOC5b@V#=fE;F*!T6L?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp z&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dgxv3?I3Kh9IdBs*0wn~X9`AMl(KsHEN zUr7P1q$Jx`$q^)>0J76LzbI9~RL?*+*}%*|!OT$4(AdP>++0V&$iUD*-@r)U&`8(N z+{)O<%D_MY3Y37h6{VzE1-ZCE?E>;_l`=|73as??%gf94%8m8%i_-NCEiElUW*8ai z0#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*nV6WAUs__T1av9H3%LbwWAlpjz~0eI z&d=4aNG#Ad)H48i38v837r)ZnT)67ulAu(Cd$Af^98y`3svneEoL^d$oC;K~46>@g z%DE^tu_V7JBtJg~7K#BG`6cd1|nJHE-u9nWOMn>kY#x5>~hOUNAPR_=buI82&22Q3f&K7Pky)OC5rManjB{01y z2)!0K^@0*YZUN9{m(-%nveXo}qWoM1u!pTOal6G7r+HAlDY)HYhEuOT&@uX;Xhn)< zm=G}SfSB+^3*^9)eQF*strr0kHRJz(fB*dc_4CK~Z(qNB{`B#~`*&~Oyngla#q(!R zpFDo_@WK6ickkT3b@RscYgeyazI5@z`EzH_oIZ8(#PMTCj~qU9@WB3kd-v?#wR6Yz zZCkf&-n4PU`gLp9tX{Qp#qwoKmn>eiaKZd}bLY&SHFL)FX;Y_6o-}bne_wA;cUNae zds}Nub5mnOeO+x$bya0Wd0A;maZzDGeqL@)c2;IadRl5qa#CVKd|YfybW~(Scvxsi za8O`?zn`yFMfdYiVkztEs9eD=8|- z%gM?}OG!$Ii;0Q|3keGF^YQXVhLeG(x z$0T~=hN$RJmnc~#sh!Jr?+p_ZVdI-QV^gSu6ElOMC#&f0J;x(12l)iB9XT3l8Fq)k zRY;iO(R7Z;$Y=5le2VO>Z#lR>JmVMEX4;mLu}y(-Qboif8H+{C?o-PIm11@#ojcYm zrRk89VP3e%QiL~dj=;v|WcT98Hk%oX7PxO_Fknu2c)+!xNp)jX!p)PH+b23OSOWmW CC1bb% literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_ifalias.gif b/usr/local/www/themes/the_wall/images/icons/icon_ifalias.gif new file mode 100755 index 0000000000000000000000000000000000000000..0c569a793cf681950bdb6140144525df1bb23d85 GIT binary patch literal 315 zcmZ?wbhEHb)L`IeI3mn&?b@})ix;n5ySBf-|MlzF4<0<&v17-XGiRQp{XcZ*P*qjc z*RNl{o%#QE=KtsA|L?i{zr^q#2-4Eh7>EOkKUo+V7=#&gK*~XOGO+G=pwgF;IWJ?? zIvviv1~y(Lx%Vq<4{?05vO94^P2dXKF$aZm;e$$o9L&F@F0lnL^9oE9;qsaNnYGrT zIqan3CWV~cUQrGPJGiDzGGw{cV6@6KCp%v#ATB`AwS%Ej*gr6&K`4SVA}XdemXj-j zA%?A@DrBOQNp?rxj5bz57C{ECb%F_tCIn6ja9t;~s#9>mdPa7k-CL`-FO4`X#JGPi hSI6eF0i3;t*C!?3@~ygIeEWg!qsLF4sw*;B0{|A|cQXJ0 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..faa84d403a9e02ada2aff885634004e37b2c2698 GIT binary patch literal 315 zcmZ?wbhEHb)L`IeI3mpO@#Dt_4<0;u^5oX7TVKC^{qf_+^XJdsy?gih(7)HOUthj_ z`S;1RE6TxO2iLSohAg)l^j4YXWakS7#03btb}&>5`v-ezfXfV0=|`lQ5LzEwAjZ$Hp|^!UkBbwvhi07(IX8UO$Q literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_import_alias.gif b/usr/local/www/themes/the_wall/images/icons/icon_import_alias.gif new file mode 100755 index 0000000000000000000000000000000000000000..d11a5f00c8529612a30e845c663880f122917c85 GIT binary patch literal 1109 zcmdUuTThw?0ERz=mV$)Tx-eNZ%S=^fjXLJ$I!&ajh04r4lnWPYCn;U&>XL3Y%VKH- zDju8QqzVH^Kr%ou2nyn~U=jJi1JzGKtX7SOsFW%K#ifxjFgm=%+Jq{kB_&twOOrJCX-2{(eU_Kx7$@# zRtAH?G@3ul%fD4B6?8har>9A+mSeHllamvvRJydZq*N+*b~aHcl*a>sAh_~k!EDw) zd*&)EEF=<%!^5VoF5%R#baZ%lh(@D59w!7r4Gr9tl@*;%Ad#@TySptG zwMwPR&(BX!Ppqx2t*)*X3Wect*yEWV8hTqK2f?RQDpjd$_WO52p&+0Cptbd9JU%Wb zC);Gw2n2$T4*o%4AA`a8{Vy{!Gkv~YE|=@``JO+Y>+I|#5Tcv7z^r$5#hbWPV7Z(@BVlkiJURTE)7#Q&T z{bOTe8yg#Lx7%zs-@Z-n=xAdw7=wd@y}i8)3kx_LPOH`GbbS!ya5|j_fq=td@9!Tl z8jV)#U$0(y*4JI(P;g>mf=0VqQ9<6?THf8=m~c9fNF)LQhoCVMiKI|S1A%=G=e}OA zpPHI-I2^01t8%$~dU`q%i2wlbAK%LVdLO+(zyQDkq`j+n_X*%k1gO2(TzrQeT|quW zsA5#2K7d(Xl29xXk99rnQ!G@;x^}7@6@>tF(NP5ak6)%0Ka3VMV(JmhgY}eicmy9o zlit5{O_}vwZq=||L&zX;zG}wb0}Er}=6roG7nAdT{a?@>EKCC9!6J@>^FaeR%X2mVYumuAf?_=6)^s h=lCe;kC2^7#hrc7%efNMl=&1u)6UYV@h}*W^DiFE;70%e literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_in.gif b/usr/local/www/themes/the_wall/images/icons/icon_in.gif new file mode 100755 index 0000000000000000000000000000000000000000..f1da7718fae4f8369c8bf1749b651e0572a09cc6 GIT binary patch literal 177 zcmZ?wbhEHbjy?gg+X=#1<@WI2wBP1l`=g*&S-@d(i z^=fi*^2w7Yj~zR+|z#z_` z1Cj;V$-t`jpj5CeV_qoB+!d*Tyw#!WPW$BMGCC?(;Gv=gvKT{P_Cy>mNRR`10k;!-o&=-o5+i(W6V3F5SL; z`^JqMSFT+7{rmTmCr|$U`}g$e)1NC;q!GHlTQ2fcl$iN`VpaW6`vXg<; zIw4fIBV*R36rUrS%R*Q*E^-EoOq4ip{m{YjK;TYBO@^&U-U=yAFI>5so1chy Q%CNCc=U@2~v=tQ(+Um@-t5`b^7Kg+*wTnkX)kYMtxKJYvVqC==7BjpmFjTAu zqKFzS3E=8tsR6YM$}q5sR6xY2^Nx5X-p(WIk|wPEFZMpX&+p4idXyLyodXBpz&}P{ zZf47y34_6=r%f|6I*Y}Sm4!b$I}?fc>+7=`jhxHnYBZXqrKSG< z{<^xt_4W0ZmKG9;L?#nhtXd+GI505a?CdNQw(|K+4Gj%uv)*q1u&}UjaIl(?5LZ)E z)7jZsS@|=Y&F1lVsj1NnMwvpPsH)0NOpNgM_6`ULK%>#c#l>*An^Y>LP$(rOB?3Y9 z(a{kKg?j$HQmfUrwz8>IJQC?oqtVD@^6~MpPN&1;u{}LKg@qZ7jg3a5y0`a*Kp>c% zovp1cz~PcBDj3t#Q>Uk=B9V~IF0HF$Lm*&H4LvqCmPE>W_AFH_7T4F;4G#}rTwD|u z7H~M_d_JqZybOUr7>%#Hx&%W*5~Z>~DClb}7E2%yOeRxENYK{S*45QjPEHP){Pgnj z^4>ka?d@#}g?xB;xWB*u>Xq1Lv&m##DJc(}oSf8Zh1L3ACXIC%gc+!Dm9zU z007wS_D}vlgZS4G1OOxO&F9F^PXJIm(E0E|83x-rJBz4Q0DdfCM6< z<0~6Bp*B`cam$5Uv{%#+%PmFC7$eQ!@cx)oJOSbivW3I zF9fRs03CRnTW|BRxju0Liz85F3I41g*CN|TW1!Xn;pJA)3u-YuN1y8aaJqD-y#);Y zv4!?lDpdG9#k@`aFdv%!Ef`XLxqLTw0=!>pCK{EGtbG9x>&LcoXwNOTRHot`>U+nI lh5&s8N{jr-Qvw71eLBpXslfK@x5?>4O?RGT!##of{{is6&GrBQ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_interface_down.gif b/usr/local/www/themes/the_wall/images/icons/icon_interface_down.gif new file mode 100755 index 0000000000000000000000000000000000000000..0626655100ef0f6e109e3953bd2c25b7762a7f8b GIT binary patch literal 88 zcmZ?wbhEHbYb6N$v}@$uHy z)`*A*JRV6WqNwrU@+|M?ZwA`ClYmacXx+`_#qImuC6YDK%muX zOG`^Z5L{o^Lm&_j506KW(v3zVjYb<7=uj% zdM6a}YHA*zoSaap;OXh9L~drFKR-I1T2PQaH#gVYTSq1n2?WA{+05f{NhEM*XXnO^ zK&@77Z*QNUpLuX_z~OL0LqnaMK4CDP^LUrEdu(>Kw>NTTX3SzaG#HIkDpjSLY-ni6 z&c@f**KKc`5)%_mrhoPNRk2uHTwE|atC^mbDil%-1~oYN*VNQ-OUsL+qYpJTG)8T0 zMMcHV&Q@b%qrvcxmzS4Xt)|l}6A}{I+S)QQQfzH)$HsceVm;L{V?+FwF07~HNk4PUs0U#^@o3x1$#XxU+ z!meKN_(^8%s7y!1UAF>C!|i;O@ff{hnfKIZY1c7ux~G*RdYkVS2v|X37($PzED8(} zh*O)s$#r?14#8#?hCKzJ-Tyok%U`J)cfj1khX)7znow?o7QDbW1p`2ENAaB?Yw{G# zruvz!(s@&ClPc?T2f@+Xe_Dst18Ig~Vuka&fva|mji+v(!cp!w`CQdkDM9&OE;Ir? z>|VZO6#tfgbnunvj`u;>&G|4~bL#tcK7gtJGRa@`9INZ=b#kW!ggT3oc)r$g>bK{a z;{i6;5U89ODIB4D^YTq|ls*A~_&7p5KUgVz?!T?}{XrH6iGf5vA(~bG5;rJ1r;(O? w0B5qky^El^zOJn3@aH3j?E~>qBf~)vOa}M`^AA_)wO`y_Z@IjJLV@r91JG3k)&Kwi literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_left_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_left_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..c778014544da5a0c6a87c3c7df42dbdd0f5d3fc8 GIT binary patch literal 691 zcmZ?wbhEHb6l4%&coxp^`Sa(qXV1QT`SSPg-|ybNd;IwEy?gh*fB*jJ)29ay9=v_~ z_Sdgp7cX9X{rdIYyLVr`dUfEyfg3k&?Ay2R&Ye5w&!2zs;>D#)m)^X2vth%AD_5@k z`Sa(=lP9}&?YedA)`bffu3x`?`}XZ?*RIW+IrIMg`->MZK6mcij2SaJIy!oKdUovC z@$$us&6_u`UcLI%sS}NjjpxsuTd-ik`}gmE{`|RV)28j)w{>@SA3S()-MV!xEiGHN zY&m@R@W~S=dV71@+S;Bzd$xD)-ppFe*cIdbIq@#9;!Zk;n{&dHM}KYsk!)z$U& z>({4GpMLxH?b)+uO-)Vz{{4IS@ZqCJkAD34@!`XV%agyi+R^D1z-km8;vLB0>Fpls#mXKM#w_Z@z%VJ$-N%p1 z-_Dv#DlAM)Ak>dPgqtUjO~KJbH`p_TRZTj~lO>GDQ!tpro=Hd6)5j)&omXpd2qz~O zBd>v(xR+@F3%5RBn4h;dgHN!M44aonfIhb7}Nu&DJTS} zIy5jzE%BKtzVwI)gFAs*NMMHu43&+AI3R6|YSu#om5|~9b1w0r|Bpx|1 kd2_~ml@kXNTm)Ie1(qZ@G%oJEyW2Nr&W?)@yc8I$0W=ON761SM literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_left_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_left_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..84c6fa2701caacd05b950306438359bd9fbfb29e GIT binary patch literal 1129 zcmV-v1eW_pNk%w1VG#fk0Qdg@p`oELFeFY&O3BH|VHg;}Wo5#BeRCHVyBXPNPRhi7hS3l9IVzT&z$~ zM@K)3IXQe%O}cGuvQ|}D7#O8lSx^7~S1Bo@qocQ5TcAWlw_94Krl!1LV31Q#wpv=T zRa2x*O(rHCzhq-9;el<0gIy#IsGQoa+pH)>UDIcavMNJqOPfSeR!osCW zM#Xq|!DeQ}jg8*k%K`!dj5;}qE+-5O3A57eEiEmv zRZx~pNk}s@K0Y$Pe}92OJ+xR@wpv)sgM+?mYO=Dj$$)^^x3`WmDMLR$wQg>hJUZH< zqQQZIxLsXuZ*Q|{X{}gT$&QY*S5#jzFoQ)x*Q~5V00380Q;t+oXlPw#IW&epKUpd& zRw*f1Dk{QeW`HFkkyKJxDk-^MT@@7&kTf)+Mn zWYwpqem_0ixVXWIi8BNQu~k%3 zU0q)o7}u+-xo&Q_Tv^9?dez6rX$}s#X=#;2L?a_3v14PiSXQE0S*uS-XJlm3si~h$ zMzdE}RR92dIy$XYRk*mg9UT_LYik7s1-M*Vv2AUqr>C7rNRN+?q)0``wY7mhJ!el$ zpF=}1FffNSF?LKsGBPK0HZ&0t5y+R9r%q0AN=lGILjV8sy<%dbOiZRqO2?3prBY8^ z000000RR90A^8LW00930EC2ui01*HY000R80RPDvfNM>;5|98WlyXi>olyTUeS6j; z)g@cmkSzJc=hQx3@&=?x*G9svC~{;3$?!xK9s|h+wY#!x9;I0#eo%wrtct5xcYIZt zfK6DL58=2dxWLX5BRZfs*;6;e&m1^O@R=xJA<~%!TOQaLh3XiO8*G5-GXx|-0!6IQ zxoIV4&np4s()8L;V8H?eNAi@qmXAg*a00AYQv(Bm3I!UPg>i&I6oC~l1W>?XZW{{} zp)9VpB<0jO)Dg*+pl2pJelED%ge4+oz`ty vBaRA*M1&MGi5`JC@s0=ejKM(@{|o>|4E{togfT`eqDc;903yUa0RaFzE9T7z literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_log.gif b/usr/local/www/themes/the_wall/images/icons/icon_log.gif new file mode 100755 index 0000000000000000000000000000000000000000..4a1983ae9022e44f398e3a9a0e10b4ac94956f1e GIT binary patch literal 297 zcmZ?wbhEHbH{jaY6KPTt^lPCYL zUj2Xj_WxbG{_oxUKOy12oZNpEmH*Px|KGj)pO*GNB;>z@#D6xn|DvM*g@pb;fBv6` z=YM(me`DkSK)}ENAsJ`~6o0ZXGB7AG=zy#M`H6we%|U>pprb~BsZ}84MvcYf^T#hp zSlP?=eVKeQWLv_@2fsKg4hR`M-?MkZ^@J0N-1pVQm{;ypHWiprnIO&Q&BHGtFD6p2 I;K*PN0Lu?w6951J literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_log_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_log_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..d31bd9b64e3c86a5eaf0bb647179307f5c21a93b GIT binary patch literal 297 zcmZ?wbhEHb;JD^`~T$0|EEv?|N8a+_FfuSGFzA3R0r`o6&CNmJg+WJ+P)oZ2%ZnO| zDd*KUNLbl(^nGEzXs|6o^WiVUiUX1c&-av0xc=Z&0{49_DW;W@io7B-DidUdyv4+& MH{jaY6KPTt^lPCYL zUj2Xj_WxbG{_oxUKOy12oZNpEmH*Px|KGj)pO*GNB;>z@#D6xn|DvM*g@pb;fBv6` z=YM(me`DkSK)}ENAsJ`~6o0ZXGB7AG=zy#M`H6we&tXD=hmKVL2^Efljv4``qZ>B- zEKr-@zi{K4I;%Nv)EBSpI3L;gUHHQs)%3pTn#j}VCp7=i^V4CA%$1E~V^LsjNSEew Q=HZu+7ZYhyaAdFs04Kp>J^%m! literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_log_s_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_log_s_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..fb2c05fcd423064deaaa9f620c95152ab5eac9c5 GIT binary patch literal 305 zcmZ?wbhEHb;JD^`~T$0|EEv?|N8a+_FfuSGFzA3R0r`o6&Cg*%frpM%{|S{B1|2m* zEyo2e{4CIz@1L-7O`X7;H|&cNJI+ToeNX-{$2h$&`c1^?^HUpt=!KcEMCNitGO{W# VG^EQ4Ig5!)%S#BiDL67%0|2;Adcgny literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_logs.gif b/usr/local/www/themes/the_wall/images/icons/icon_logs.gif new file mode 100644 index 0000000000000000000000000000000000000000..afe0104bd6140e76bc00736e4217bf08e6a22e7d GIT binary patch literal 2092 zcmdT_XFwBY7)}(6R9v7|Mdb`=Q6b|PAyEWO02u*6RHRxB$w@*;E+#?1ss+Vrs|9hO zf`b5+rL2IUh%sOSgdquArqGH=F*2%H2fa|y{wV$5_s88gp64Ck`+RpUuFke3`h3)U z)N2{)(W6IRUS7@3&0?{*tE;QLyj(87E0@b-Vq)s*>gwz3b8>RLy}chke27M)Yiepv zoDdck7CwFYw79rfCX=yPEQLamot<5fpWEBpW@NN<`SPV=@fET7nvTwNl}g#$+nbx4 zd;WZ+Mx)8k&*X4?($jAwCMHUyB^4DFE-p?~Dpm91#idK+4o1?xm+E#KlFZ)paE$C7Br+y1KfJjg8ICWfDnBUS96t;FH?g+LV;U zHEWC;8|&V^dpAD*ULXh@7a=&Vr*<|Z*TAG>#I`L*4Njx zwYB;CQw9eI4<9~USy@(En%df`mPjN-;u=Rs%YlIbLqo&b+RCh~Og%l_k>TN{riRhc zVSRo5s;a7nhB~FPA}J}!)s-}Fp1w*|)!*OW(a{kax;G)=a!X4~csS?m*;uu@nnv@8 zjy~<@=jZP3*3{ILoSdAQd4tJhy1BW@WJOU?QCV48QfUEVuV24%aBxs4imqL|+TGn1 zA0HnT#ZxMkt*xz#7A<-+HkOwsX=-YWh=@3OQh5LV{m4k(9lq9s3jH_1mXxJ5=rX=1T7GRg)p2aqK8@VgeH?7sF08$VDm+6 zmsNn_jtmdI)Vvt{ec*Zj zv%aUl{o32}q`RxLqrL5MYfE!eV?(`KRrjd2rn*X5Sy8T#KP)SiJ&@inxmSGmPEq0Q zf_zC{ZccXAt(%z{>1nAqeo0AA5+`22cJ)d^{N+m*<1U;(cQ*D+O!UvEPyO`c$rC>u zk2-cVGUEFqhYx*sFgz^uK!`{v*w2S~++a=+n-#bZVlo2gd-r_1d)GJqJN#@fmfL@pH8!hGG@HD+J0US(>6SqT`g zSia0?>5|1?En2w1&|v<&xpQXg&-zktrtTLrbf!;3qfjf~=pauS%3S+})BY_{Gc~AV z9d0=c^sSA-UzlAv4x9p}$($b;0BD`aQ;Ts5$CnjuCv~UkpvIi?OkLe)ti@lVIykO1 z-y5Jjo!(Q5v06BmG9;G-dQr9*wC+#Tbw=-*jWOH36m525!-~bGw%t|bk(qvTQG*So zG!$y~A#N%4w)twxJyxCB@P(r|Z%U7HdBC&l{@|Wr1#B@>N4_%nTA9 u6BZn3VrJ!VhzL+T+``Ri)pEn&(UC3&J+BaniHgVDC9S1cI29Zm7_0&H=@-WU literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_match_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_match_d.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e4c3645b34b46fcc70ba37ae2b7dbab3f8a306e GIT binary patch literal 843 zcmV-R1GM}{Nk%w1VG95Y0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui01E&M00#&t0RPn*NRXhwf&>2@M3`_PLWKn(HjH>s VBE?!34JvdeqJ1t0 OORCzr8Uvlg7_0%j`wztc literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_open.gif b/usr/local/www/themes/the_wall/images/icons/icon_open.gif new file mode 100755 index 0000000000000000000000000000000000000000..ac3da1476b7823fcdddf0830dc5fbc801870f7c7 GIT binary patch literal 62 zcmZ?wbhEHbUp-6H@0{{R30A^8LW000L7 zEC2ui04M+t0009*c)HyFFv>|^xfs{IiVz+k1{b##hJmIjQJB>#2k8q>a!n8R9px+o fpy#vHQlnB40?ZJXjAjOEaXP70>l4fEb`t|^xfs{IiVz+k1{b##hJmIjQJB>#2k8q>a!n8R9px+o fpy#vHQlnB40?ZJXjAjOEaXP70>l4fEb`tgPW@a)lF#P}jA4uW?ia%Kx85qPEbU+F~ zb~3OUEKu#6c4a~eQ{W0wm(Zhq9fHR0bsS?#@@vw{1Z3qP0hjafQ1x~CU9bab&X J268Z10{|*zJVyWk literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_out_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_out_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..879f1dac388aedfe9b6217850e1ff5897c0ac8b6 GIT binary patch literal 189 zcmZ?wbhEHbV2y7c?^?_0NS{rmUt>C>mbe*L<5@#23lV88(sf3h$#Fo-kg zfaF1TGO$`bQ0)spI3YQJQPfq)$t7Z~2BUw%+pWnwyAymFIk{pd&p#5e+ksJ?-TZaxEdiUo|Ns9C3}@2P(in&Uia%Kx85l$ubUiwVljVBXR>Exk>BMT+4;_Ff^MbRK9vDMymd^1oc)o}L6Px6 z>`BW0g7%JOF?rF#+=4#w0{lL+l;#-L1vV!x7LJW~G3&}$AJ#8m!Ys(TC7xlsdFA@~ YmS-%jPlYO-z3i)d?fQ+Is)`KO08fZ=vj6}9 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_parp_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_parp_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..7d7d00e06212aa364adceaaee2d017fd749cc979 GIT binary patch literal 303 zcmZ?wbhEHb)L`IeI3mLE@#DvL@7_Im^6}QKTPIIGdGO%Dj~_ptKYzYu%dJ0u{`~my z=k@E?moHzwd-vVz*I$9)$&)Al|Noyk^9&F$5CIf_vM@3*h%o4Y)Pn3}U|pl2+Lw|! zFJslZH=275Z2U@c@Baun#PLwsNSY-`ny205*v0_mgDev>j(l7svY1`UL29nU4#8QU zS!*?wu0|NG(m9m`_!qJ{Ydec~Afd}b-lF{}%0PFyS;8}DM)m9ajopV5R>kbO%$!*=t^_46&y WSX!S7RXTgwSNGcW8#h%I8LR<8Hhd-k literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_pass.gif b/usr/local/www/themes/the_wall/images/icons/icon_pass.gif new file mode 100755 index 0000000000000000000000000000000000000000..fe1bb0da01c67d7e747a84cac85629a052541dd5 GIT binary patch literal 182 zcmZ?wbhEHbUlLGnT$6EpbtT^Bkw{Ro(yp|1+FnzzP(9vVg^P zKqSac23F$-!HFrIf~O>AsJcdV9+`Hn)KM?`w!@Z7+ZH5$;bP)C@@T2yj7YKenGBOn Oe0h2#+nP8S8LR=;PDG;s literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif b/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif new file mode 100755 index 0000000000000000000000000000000000000000..f7f4c2007b0bd1651a3faba0b2028938c07870f7 GIT binary patch literal 183 zcmZ?wbhEHbIfZ|UUu&fS<1lh^J zYLXxvni9!*hGT}Rikh5kdv@>Jk8fYTd-?d)%luZy(%nY1@P3FI;RQM;@gr&5Y#g Tjbxc@qNva=*|v#;k--`OV8&L@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus.gif new file mode 100755 index 0000000000000000000000000000000000000000..2a94eeb93f43211da015b194db1041875fe809bb GIT binary patch literal 1100 zcmdT@YfoAS0KHUNVbd08tBuxzja{VcqO+T=bDL1KC}ItjIYY9=wk9>Qtc@!0MH7heSbA4^CwY8DMDZ706Qv^XENCCr7>2$h8@(UJ= zU0U)Q48Kbx{FWB3!(rEGG}4})(9lq))9H5Wl*+EYKE>+lA2yqlZha<@$u2AsVNqVvbwrjRaIp& z>7G9qO-?$LO6B?UL^Ao@%F0S)WTeez>g|KzViULO6ygZo8AMY*{&m&+v-3Z>HS zl9Cb{jRrw#9*@`C+pEn>EJUKZT6&3Y*cek%k z>2f)_T<+bw6+=Tq)z!gn*P5G~mX>@blTj=dd%YI9Tr@DikBvR5)9F%DQam2FDd-u+ zI-Ojldb+&)XF|eBzu!-#Qa3j?9FE|y29IZAdU{%|R+p6(%z3Bze7;B|>gf@(*{tpD z?fLn67OQY`b8~ifHZ?W1rKKeh2w1IF004p_$p2Hszeb|~00Pdw&Hwfj044zZI75?P zM?LxC+e3-%HH3SF1JI@6_XsF-_1DMG85mq|eKYO|8Ut)d8SlI+NIWZN3P=YJHDVI8 zYYv8;z^adG8oI98YqCnuY~=W)V%h0ug+wyySIVjM!~Wq!uawNYSbwLuvJ)=+@G$4I zmrK7JD6G*OhkPJm9P;OZFU%smR1Uz=+)b5!IV&l??I=(i>`4V%l zpzppv=1pZ~65;dr+i&T0Jp74{Y|fikLME2@12YSeqny!c^zNHPaAE$dpD6_g{)QSq j_z4rD3r{Z7ojx8%x_UC5ux+v&!{GE+YQwY9XdwMR4>RzF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus_bl.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus_bl.gif new file mode 100755 index 0000000000000000000000000000000000000000..8dcd7c006291c272c7c41036c707deb3887d6ff2 GIT binary patch literal 1096 zcmZ?wbhEHb6l4%&_`ZqZ{Q2|#{{9&m8N$NC_wV0lWo7m7@UXJ7TDWjwe}DhkvuCBG zqyhuIfFLI)$KKvPB_+kq&dS8ZWXFyj?(Xg_EiL=@?c?O+?CEI_4-b!ti7_`fKYsl9 zg$ow~0|OT=T9licd;9inQBl#<)YRFtXD?f}XywYK8#Zj%zJ2?oNfTRJTMr&Q7#SHZ zDJdBl8Qjp&aP8VP1qJEt+qYO-Swuxe_4IU3nl$O?(F3BQ0ud1r!NI{UE-w1|`g`{5 zynOj`X=#2%Wl2M0bz@^=TwI)uja5@q{rmUttE;OgPMo-S@#0gbj>W~rtX{qH*|TSP zdC7^1iB?vohYlUuxN)Plw%UOM2OJ#ie0+R(czD>@*}1s5R8>`jf`U|46`GowG&D5S z)Ra%2Jh^7gnyjoWb#?X9($coJHW5)#V`IZrtCsKGyLb8Wg}Zm}-nDC2QBje#wUvjb z>x>ywuV24jTU+bsl)%HwJ9+Y?g9rEf`S}P62^kp~g@=b^XJX6AM4)|Ho+Pngh~ zlaneWB;?@WaO1{}&d%x`JGRZ5HEY|pZS3sqB_$bmX4WM)OwZ&hqD|A zFkRMgk(>Fzal`lT5yt<4zLtcWZ>6nPH zlV}nv!-D0ZYyw>}4H`;^r>^!c*mZ)nV98W*PU%&93YoOSbRx2{LT2q=C91&d?eKNS z#UC3dIq9uo5V*wUEvDD^XIIghT}Sv>wW3m`7?y5+e7j$;apB^p7n&p|#c`JF{1I&n z$(AUUQc((OQCMnq_*b*yF=h?{6_ZCB51ySFaH(EE^&;czLn|Dn@dPYLP!LpqsHW6$ aNToZZnQ=$5&6;UvXQipBIcd_QUAuNED=Sr3S0^SW zT3cBJ1qG?9DyXWeUc7j|uC7j7TP-dwX3w5ITwLr?QBfHg8GH8ZbaHZvjEbB;fBsPr zIDG8b;hvs$At9lvs!9(}*X`T4sHrKlv9SdP2J-OoZrr$zmyeH)on1pi!_UvBu&~h1 z&Q3u=Iwd7VQc|*^vHIGzivLMy zhv&?hGYkw2|Ns97lB0l<5K#Qd!pOidg+T{o2q;f5aQtV`%)DTjFzH}3yRv11!i5u! zObl|Kb2t{XGjL2iqGF-2;8=@Ewi1WNhcu>s4u(}SoDOWPt*9n$V!5@gRj!$WhD3 zXQxr5&{U@Yp`4CM506N2*L?V*Dd&7b$&>kj#;oK8)+(lUS%*aog_rQDvWatSU~_S5 OY?4&43gF^kum%8gEG!HF literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..ebc745718a3bf0b3ea032d817d0c9ab7f9c55f77 GIT binary patch literal 682 zcmZ?wbhEHb6l4%&coxs_`Sa(?moGnj_^_+1>*>>{Po6xvckf*RBm4Hr#*k;K-398#iv8GiT23-Mj1R>bkqT@87@o3445?&#<^e*E~+qenk|`gH#M`F;ELEnd91y1M%I?b{C@JXo`4&D^TT8b91RMFoZ@)v#@eRhw-w781aOMs6~VahlldI6H(x1VAEg{VA6_?iHKuzjuaGQbdgn*4GuH8z!fJR{ggM*D#StX9`gm3I7U?= zAys|*sHl*)7g*zj7YRHtxR4qlUKg{i;-Q1;fp$G9uBw+xOc)XanK)X{qHY>}*aPgt(nyzj(mIuBy2xv;O8<`jyJ@i&!um%9- C9yqK3 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..1c7ca08350708c8b4b72ad9838822f035120f2f1 GIT binary patch literal 1120 zcmah|`A^z+0R3pcUiGL%!y;O5owMjz=Zwc!Kp}p=90Gm?L98cuw0HzOrgR>dTD5po z*QzOYtDCSz@+j$re}l5A6N$-Y@TmmzVbtMrvGq z0S@56pQk{M#~b+AR#nyE^z>7ulEY+9W7zQU@E{Bq!*DhLTMETee*PGPvDw`{E6AAS za${qo$1%)iv+)2}kw~63HqK=V)^FTcD=GPkkBy?}lWY+uHrk?4jE|3xqR1#p@4+yR zn;S1QSeTK)bi4R4g*wIKbWtc@(rCT>^luc3P8gQq@vH!U48trxn3 zH~|2OpP#F%^OK4SW#HwTT;|v1<@*y8i@CY8nF75?v`|(y04F*)I2feTeXF&VOdg<8 z0|MU5#p4ILObCKX6JsXQ*b7BPECktBsiLAn*VO7C78eKTDGe~J#jvBr^^z^DqrQ@=; zdwNEAw5`5AEsM3-(h^S~OsDhaGBedwvc0_>%imv%pfn0a4#SVrm@Y0Z6Kv+j#xgHB zSO5TuQXL%~LqmOAVq#zb?$cAUA|s75Sx^vRwW_M^N~k#cgO7;B8H{VLC|@opurxG0 z9~#n%(_#2y2)fYJ*f=W?98OJb$Yc-5Nq5qav$KEhu&E1T5sIdSgoI#t{6jvb(P&5{ z(sE(JB#*}l4D|GLdtoxEGdV-4spkB=#)O2Wr6rwCr^2wb^9=M7sdTxra*#?95xgJs z(=AeI763RLj`<03MN+s{T&&e<@p#XTuCC!!dQVT!W?h|upK+kqPjVUSH8tki+V5v( zxNJ58zzoJSh{g9X>~1RU`1ttfXm3xe)$w?hm6c1?)z37Vr}g!Yjt&ghiz6c=s~sJt zYuP6!Cwu+*yWZJ3FBAwPBCK*bkw|P2 zi&y0GYv3GbXJ`NE|4`6hkR1T0fOzgZ{{(P813%Yje$?+c<-PQX@CzgQEqr+TsN>39 z(YN=d7p@jYhCg3T%<;-?WsF&0`Z`(m887fou5-n0Xx5t`oA14XE${kf z2M6J|TiHI!SA`Y};&pieGxiA!-PP4PLYd{%oesR!)_t4=$r|;uk4|pRuke_!A^c%@ z*G9ITJq%5Fj=ZKjOD+Lm8XNV~o0FmMY$?Cmw-FqF+Wee!-K)>sj*oFZ+)8f-z3;2V z$**k-KCY3!MgC4B0b6w6t%QMbLT~L|k=!*Z%kEK8Y<`Tw9$Js{`NBU?G!rOPM=Htg zs;XORB8_jUmrGhxh$Z?xdXnAdTWfn+czN+BCR& literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus_p.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus_p.gif new file mode 100755 index 0000000000000000000000000000000000000000..eb41284aaaeaf9d9216a2c7d0bda260e83db8d71 GIT binary patch literal 1087 zcmeH`+fP~t0LBk;Q5JMwSTA4|JCl{BS-N$#Q`d;r7SPV=scAP~rVopYWQldjl%z2v zZSB^Ftq&9jG>VpTk%U-*f;Gtfa=^p%aM?l33b>(2P;q41>Bi{)vG3u__xQ^%`Izi$ zAJ_Ml0cF6x9B?=s3kwTQr_*dUV=x#Zk*L?}gTWwzAYQNc!GmuR1a4|-G8&DKAM*o& zWeBnbgUfzDjH2l9@GzB1X=`g!&CCo94H1cjFbw;AKDAn<(P+ZqaDRWlK)|EZt23F5 z#bTM8(Q$z;;ya+yrJjg9qmI+jYsB@#((ZB=vgg~i3iY<5p7l~hzz zq|<4wR)wOzY&L7L7&x4s_Vz0Zh2r(WfzJmy9543w|H|{CXaHG(bGd(D*xA!_B^pIX zMn<^YzS2@sGPyZ1Ax6<(!(oKW9q@SEOeRyUR>)-IU0q$NR7#~%4Gi3tX^$%IV~b9=L-tf&z=)9_SD2f#w0=yUQPOj$#Nn}KSj$@jp^mDi_lW8K(J$+4({ zJe@28JL<@k)AFnIyU)&Bg#K;(04ZoHVr)LV{C2)}z&lu{k-ittpuc%Z;sA%9^kj z4n1+BrTV0eRnatPr4Ra`KTbWh9!g55YDGLpF1Osp*?)1L7vI;P?~6~yJup6@Bp3(= z{+a@gj*dDyI(Bz=H5$#{-kv}pV6)k$r>8SBGwbW?6bgmQ<fYY&#>U3x=4Mw{*ZBCj%jFUZg)|yXBoakMMU9M%@OZq^($coJHmz2BaB$#s zI%j90{r!C^m8w)KcXoEl%gY-ZYv}+sw&}^PqSeWkV=>fq6GMPL!_C7f|xuT*Bi@jmD&q*ZglamuBvjKvX z27_UF*``*jFP~^M!Lv09$%PYSAF`VgtRngmk)aUua zZqg&hY$;3z!pFb;rPJ-r{0jADZ4TgP@`0bNmt|>I}5wk#-mgeXCCI;|yf+@q% zkNYa%=t)vTQV^K5_I0sdcqap|#_8cL4e0CsVKvBb>^ce4{o*hwx+(j^J8rU3>)~Yi5plJ9zT@x zakBphR;Z2E-gGsT=(k;b8+e;7e!%j1XD7VDu!vW3K7CruAhtV)p8c!;btgB<2fxFR zr$*!-hxK6`NfhBkPBb#|ZhfWgoA?;CJPF%W`KPh*A&w!bcpfl;jxNWcGVpK@D*z9* V*Mr{)kS@dZ#(z@N@m^j);(xAOqequ6U3&if z`OB9tzkU1m;K76M-@o6wb?fQVryoCl{QUXznKNhpg8{=p1I3>#j0_AR3_2i(fZ~LK z{eMFUudl4BFdq|#XSct*B2S2;x0^Q;vlP3Bhre5}s4QP#;M`yzA8%zTPd^q8-e3<^ z&-J1#;@;|0xU7PFgBA7If&~HVx%iycd z9H{KgrXbJC!R7Dj?(gI48{j3u=)t*$%}2{IJZ5Ip~eAz4-X3z6b}Uj z1qKELhDt<%Ffi4prz9jBxqg1DRZ@IVPPJ}s&zP8~Oh=JEK9MyvdP+rX5D=T2o7AJD z$BT=lSy_BKI;^a$Qx+D#adEX-S%*MCt!QXxDJh&lI*v?8nLRp!K0c^iT&rGQ)vBtw zU0hB|O22AqykKC%dV0%~leoCJpGQWnQc$c=O2B=68yggVKt9T$p(7(2!I6>Nw6t+D zGPPV>RsaA51OqTIFvFmrt58i@Dk=;N3GMCe6B7;`92Eov1Ofs9;=#dRIx|xzB||?y zXJlk=Z*PNITB}e>5fKr&US6qCP_=S$yk}>xR8c$t0KkBNd>|jNX=$`;Yobt4qgGa@ zRaC`=g^!PqlsGuAT3U2SLwHU~XBHNhOi6AX9hFE&c0oLeJUp;sVu>v*;KamwdV0fk zb#6L0si~<;M@PbpjMmoFTrV%bb#*N*EtEJjpI1|bM?<>0y02?%xoK&$S67=rJ)fVS zg(@kGPfV^@R;Wx&s!mO+PEN&lch|12oKjG*R8v|I5S~OsxLjP9R8Og9W-%-*e|~;e zEh@ijYmZV;wP0YiVq%6rKcPiGPfSc#Q&V_4Iz2r(tWZ#)PD-v)N+Tm9p+-W&eSMfb zJjZ!?eL_EtP)y38puUxrx^HitMn*gw9JI8w+qATuLPD23Jjk`Rs$ycGL_$yi0KbQa zu2N1_C@5eyGN(&Qu~t=LHZrSFOpP)xrlzJbF)>d{O2C(ws#;bC1_lZW2!caC92^t~ z2nf&5&;S4bA^8LW00930EC2ui01*HY000R80RQa~AZrS$TMr&2NZ{mBsY3q#g*YRE z)E#oa+}!)-4UCW!h7bv$cMeb-II0jJKw@T{3nFXg5{OUe4%i+KB=&PV^j;nC|idbO)j7d7LXo;j(B0lpuv(85rR!Nw}AvVJ;!KGqJRPu zE(;M_0QjH+-4M2M9c{@x~A~a4^j({{#d8JG3Rny8r+H literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gif new file mode 100755 index 0000000000000000000000000000000000000000..9aebb032dc71ca41625bbf47fee7b0d7c5323302 GIT binary patch literal 1109 zcmd_p>rYw-00r>N3RDCuY{scsj8a&1bBnsQ1vZn;W=%_D zgO9~Wn2xm)Uno*}h)hry3>CpS0Y&j%9?C_7P!V=T&~<@gUB~D1 z`}_O1wycpz1VNDb`56+4R9jo)@wlwkRk>USLCa?x4sd2>W?@0a?d>4A@bcx6R4P@egu}zbe!mZfU0&~& zLLm(V{4ZX(x3{T@3^5~sVny95G(&2F&SY$lVA#bOQ(4Ly7Iu&Sy` zC=?ov3!|f>eSLim4fUbWf!pnHI-#PXJcGetHZKhf3>b}*!Jr2O*Lr(<7Z(?!(c{z8 zD1!K%PRpZ5O=|U&%e5K|2Jhbe#%^CaIXN+#XIEAXQ&SQG0p~jFZ81X7hRtRL!HuS- zPrJH05#*0>_;7G=&}3Q`i-!ybtwtl;+_byh?zy=+7K?=-Hm6h9)6)gR*2&3<)>dw3 z=PeM_cXZrhGMTYhRIk_V?d{do(RsWsfuMDKoYUOgOrc!ka=8!$jf{+h!=cBIzf4b0 zZ)|ML&(B|9Uk3mnkw~27|5L_aXcPb_0qXhu^G^Ut37{r7Z8NC@`_UKrtWwbrm*ix8 zHAVz|{iG$CzFqis-EH&5lFZ6axRs)143?Pk0D%#&9bH}cU)*$TRidi^RBn59_IZ(#C#I5M^+xx5}*L(cpvmHQU8klI<9y_E7n zQ|9-B@2ujky*@~^uF%Ud$wiz(A$%{06IbRuz4Fjsa%r3dpsSywvdY@hXyL5STC;wl zFvzsA?%CVxcNpEu2Q^RezbhDu;tK^gd~pgr<6B*6UwLW^YNA5;_q}qiVrSS_nv#o4 zZJ|#RuUyQ1PIxVEB54`h6T1H$Bdzk^yzH5O;uEl({i^!M?jCZsnDI->&;E)F41g?u ck6dTDP8Cb0jc-cn(Xy+6?mmD+p@8@Q1M?o&7ytkO literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..4ab4992a10cf7060d29a72b8490050c14b6c406c GIT binary patch literal 694 zcmZ?wbhEHb6l4%&c;?CQ_3PKmmoLA3`SSVm=lAa2J9X;R#fukz{``6W{{3gqp1phb z?$V`8@87?_b?esY)2Gj!J9qv1^?(2V9XWEOtE=nm*|RTRytr`T!uj*(A3uJ4_3G7| zH*fy>^{c6=>EXkNw{PG6^5x5i4j#fujoKYqNfuI|8r z1GTlad-v`=di3a{M~}XJ`}X?v>!(kjK6vop`}gmkKY#x5PYghoA?yCG&b^aS=P|DfX)FP973Et{%=TEbQz~i#V*^)jc>(Y&}?* z6izHs=QB2E@^CP;bz*dqW^k6bbJa3Z)`0*Xjl|9d~8->5Nu>%um%7L@Crx( literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..7025d20ea0b1518b7ca830f576c77ef8d9ac7b93 GIT binary patch literal 1135 zcmV-#1d#hjNk%w1VG#fk0QdR;tx{5P78ZvrEG#T6yOjY2{~LNUg8c$-pExO8$65fMEA0J2(F$B>ZBlaq!kD!sk29UT`? zOiaIVaga1KNec^;H#UA!P}Qoce^X4FLqpfAtFv8Qz-()$OGjH*RaO81K|wHTEG&>x zQmBTv&5+ZUzPh*4E7h1q4|D0J2t8 z&(F_iWMncjCRi30d@L-%k&#pu7OzxNCnqO!F)>n3O2B=6tW{IASXRP)eWOxR5)u-P zF)_-ap>A$&e^gJHQc_6(08mg!K|w*VR8pc+Qif7evQ|=#JUn3r23J#0m^?IiIyt;y zVZN1>e>^;!R8oLcPP)3fyKiooG_ zVq&FGPOno=xn5p&A|i27PQ77ZX)!UcQ%tzHxUEr7pP!$HKR;S5ED;e5wS0VoCnv#j za9JuUF8~0ON=UC+R;5{4!ftJLARvxJM5Q00960{{R3000000 z0000000000A^8LW008;`EC2ui01*HY000R80QK#8unG$wY6uW0P~gf5J`9BP*^{P* zOFCh;Ea5s;Y=#&VYf3yAmIq9QL}nsHVCQZYws(?lY@_naMv@NWzQrRWB8`h5vb2z^ z_NPz^UGU(TB5;5h2VN@V)rf^E-#s>O+L#M+;1#nfFS5mG0>Vwc7LStIA+UhKf?Lzh zF$p$LT&X}FV9~-sfI*}|i@cD^K~GsXG}p%90S4|_A1lisREj2qh_@%|(CHvCC5i(8 z06GN_V5HTqFC)6t8`Tb3Gf@Q!02mFyK!P2bObl?8i&eM)03;*`V8DO_W4$t27%)d$ zoFxK436Kz=fD!zu&!9xRvG!VijL*$bWBY*@106VNY B#V`N> literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gif new file mode 100755 index 0000000000000000000000000000000000000000..4542432ec8f314da629f445fd09963aaad94ba65 GIT binary patch literal 1105 zcmds$+fP~t0EZ7N1zW9Cx0yDkYZ_}UnKRC1#&&&JyT)phI#DC6g;W=t;*eCk*#;9+ zX))8ePGu<*1w~c_Efp^aDl4EcvD^+E@d#2bUQjLy1vR^539J9czNcTlx8K8ewWuKf zd{r`#4E#9*gu`JF1er``Fc?frOG`{l#9%Ny9?$3VDHJbREY|(|coK=^^?Jv~#wZl5 z&1O?56mGZM;c#qhY(%5c-QC@RfdRQ(URqij2>4AVlgHz+*(}r3(|*7I!iA5XKNmpI zEQiAp3I$%T$K`VE@9+2a_G&a5zuy;$gsQ6v0)gP}-7<-!4+OPzI(>MU2SFyCPTSGZ z!Q;`*W-|ybOiT<}t=jEvkJ0$bYBki?m#?p{uCGIFZ6v8w>hU<2mzNh7q@A73csyP# z?p|G8)@YP=yIrr>na!G5?4QxmQ4*y?(2S#4?9t>ET0))9IASc>VqTMMdY0 zMnghE!sh1Y&dv^--LbS}0l|5-T0Sx|Qd3hiH#cLk=m!U%$z-zJ+|1_YX0ce@)z!sd zJh58MLZL7e3b9yBKA%4`Bkb<}H5^`oVX&#GsjjXJf)qp|5r->YSy^dlz!?nky}hVN zB#Om?FlE# z#>U3_`dXt=pPHHq!;2La<&j8)N~MmCaX?VHwzhWS#Cv-EyxVQVVzGI7c@zo-004u* z5R1j$j{g&<|3)GJUXBs4`(1>TK#{ zKG%2caYk+V^|~aL9(_9b%rWj4NHyYe(mS0){K5Fcalf5y%EuxA^t(q(uf+Y)LZcJN zIe^c9gqDFi>iTKmQ{MtT6Ok`@^ca{$;Tj7$nD?(%pst)j;g54KsRxn$iIZ*CLR4JE zk(8%v&*qF-8Q60~o%ImPI%a<>2-MV%2=FNNe?!A8f z`u_dg(&9o16FT+c$Ua+`D)09yoB|_U+p@ZrrG=tJ}MG?~)};u3Wit^yty9uCD$2_s^Iy zW6z#F@7}#TdGh3m6DN9md$(=d*4^D*TU)zf!-l6%pFVo@=-an%moH!b`0?Y9A3wf- z|Ni;&=O<5|oH=vmKNv6!KA`xMg^_{5k3k3IG*Fx{u>WuH6Y^BD<(CxUX6kl!QQ+}Y zarJN&VHW3PWOVlMRaKJo@|x?*%IYd7&cx2ZE#%9n&$M2ZLCjTo3YV#mr>}ygx33o` zCl8P3B5q?J8DBv=7hg^``4fv|Sk!she4QO!Jl#B%nZ4v(y>%pP#P6BAIJ0_sy0ZyN zsoAqAdUA=Fm_*!Ybm?Sd=jBMakf_Ym$;Vu9z+e+Y1Gln|QC3RRMowWRH5s3Xq6M8B z)O`C)91k5)p4hDFt($1+;COmAYeKF>!;^!PlsWozcD^)p6J~J>kozH7vckPzwv9nz zXNpR|LYJ8uo{k5Y8d~_xWHR`0LStQ A-~a#s literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..15e0aed9a8e917d8f85e13eca9e25e1f838dbaec GIT binary patch literal 1131 zcmV-x1eE(nNk%w1VG#fk0QdO-hb$~oQc}5HT`w;qYAh^q78WclAfTY2p`oF@VPQQ0 z0MeVAY!DE+UR}w_$+})%d@L+1EFqFMHPoY{u~t+=006O7Q@C_;lQ=hLQcG0;0Gd)# zd3kxRQc$i^Qj%0slSW2?Q%(j32Dff)fK*JzczDNoc~nqNR#H!EfGlas%3al(Cls!~#{Vq)OL#7G7Pwp&}LRaD!ww0e4aq)0{8s;aqu ze%Gt3eN#@)&(E`3S+8PZ)yK!dcXxhLQ8P0xykTL9Qc|QyL^?V%0|NqoQBi(WO=uPt zfIU20S5>W1PpnW$A0HU1Vq%?CQoCSay=!E^ac`nbOp7opSXfxJSW_@CFi}iQ|Nr`{ zUS3iF0Kt)wuT)XTkdW1Zn zQjR=4N=iT9-^atCperjNu31@|o13s$RjH||XA29zcy+Z|R^q|ItgNhHU{A1VX@65s z&d$XxEg@MdDw$GJQ2+ob004|IFs)Wpq)0!?lasSuU1t^+xpZ;Lp`n6AL1q#XsZ>+X zn3$DINPa9Vy1Kd;006kSxWmJ^kB^UhQc}WL-_ItLCQK+p=>4n0BgnR7GI;{$AnQ;NVzjnqMD2$_E>2t zC1OtuG-0wKNpR(ofKKc%bpru~Nx6Bp!r=&YMt}ehz6fEM)@V*1K`(0fN${XSg9qLY zNoa9SnK5}^=#9{XO@IX{EADLJp`=eGaZ65I^VBYltQ3jjO#(Khiz6#-HbuEm#1bfQ z_)Os&O$Hw_bqWHYAhzuo0B-jH+?!qC-n$K{;lwH=Y4#cbu<$WZgHMCDbpiNf!6JkK zr49fJP$&R^2DwKr0pr3=l^xsnih=06Qmu%T53Q literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reject.gif b/usr/local/www/themes/the_wall/images/icons/icon_reject.gif new file mode 100755 index 0000000000000000000000000000000000000000..5565cd67d267ffb92fa0253b34ba929d3a5e62d3 GIT binary patch literal 193 zcmZ?wbhEHb5u#s2^M;s4vt{|`+5f7$u}^Sb|Ew*7x(|No)o z|NHv?@9X^kdhq|p<^P}f{eNBc|Gwe>AD90F!CfT=LO}5+3s{K`hy>Zmz-sq^F(Ad$ z@YoLr)h_{zUwMSNeGhxPUNW(?^IUS|vu}$U*Fg`Ddp%nxDa?4`%c9CY>A8ZghqHla NqlSuSqZJIwq4)0>{Q2|x|NsB*-pynn1QdU=fR*TgNRXWjtacBK z0#ZB;kN$8_{Sv_NRX~{A_lURaB@;_K&m~7b`?jcg9gy(2*Ryq!LdOeV7FG61&lOBP QoDDP+15`X4oH-b*0Ywy4f&c&j literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_right.gif b/usr/local/www/themes/the_wall/images/icons/icon_right.gif new file mode 100755 index 0000000000000000000000000000000000000000..fdf2d8b8005db78c3620f357b5d5149dd4402274 GIT binary patch literal 1117 zcmd5*=}+1R0R2%I9@Sc%8s{{zZm!MNb=CMm(am~G12Q#TXlJdaTScsE-G^4Tsfa?+ zaVj2}0wQx#0~MxOMA3+Npa}XCh2e>!Fyl->!=~|I^uO5q@IJo0ydx8t5f@+N5BLNB zg23wPs>x((Y;2sKp6=@E((CmY48~&FnwpyO@$peAl@5p9VzD3)2%%8ua=D6&i%UvM zFEJM@cjJz?Ci{Lw=XX*udlDy*VivBER2qh3Iu}k z@^Yz^KQ}jLwQi4$j3^X}lapf#rH;*JfuM4BcGh4t^7*uu)>bqcJv215v9V#ZS=nr6 zWo0Fo+h8#0S5{UA2M2q5dj$gK1ju(kUi;Jr2>T0caY<_-RA`vGgC2eo7n$0W0 z!NEa6L29*{&8~pKpc>5>2+pLZr;m>I7Zl{FRH})I36ba*xm=7wA-UW(HkvTE-;kibmfx}@53DI6&UIlK& zJXB6jjzl6EAD5Ms;G9lpcz8GllfdKg@c8>ro}jX`v%7y4(r69TR}?;j3d@v*=0Ea8At}ff#`%9q^-ntd(1_;h(W+K|!S~VJVRaKQx z*bx}$XSW}?!!Vo891gp^z1?VBdhsIP;c(DsKXi9f`un+u4hNn7Gl77QiHR8=9@c87 zN=x&Pj*j~J`b;K+OeWsj+cO#s2E$@YON)nxM@Cc7 zWqB7D7dRZQuCC5zv#?k!CWB$MTFvIo+}zyV-Q9tK*9Qj&&z?PXxz63yHa9oV%*=Ru zdm|8^93DDkGFe7OMq*+j008b4x%q#BYbP)W0D!>Fw|?G!0`PPJLhd4wlmhpF1u%f6 z{ftg85HSY;W~gtB=h+fM)ylz5Mxm2=HDqKn)`GavD+c$)2<>l(ZZUA%%VV pwfOIV=x_Y5M;l?ZedT?SZ+|A5c3AQFnlZ{{YZs3S|HQ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_restart.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_restart.gif new file mode 100755 index 0000000000000000000000000000000000000000..e49fbd73c29915da23e6af95042be61c76d005e2 GIT binary patch literal 1120 zcmcJO=}+1R06>34QM5RZs-=ltXWNw&0fYbvpkDj*(c z72|~jH?6g)%Z@A!YyXJ75AW;y^wQC&tFeSYAQ1R# z6M(^B2n1q%eO)9HIh{@t39HpAaX6gWY+hbo*6Vdfqmf7?R#a5*csve=6A=-yv$NaO z)TC0)=j7z*_4?xC;?U60{r!W~)KsU_m6@3t6BC0*qqnzrz+iBEe0+X>espv+gF$O- zEMHr*4h{~wTzf9p&dSQl>(@tWwOXsy9vvN_P$({!E0sz~q{{B@hOn>@0wKd-(AjLu z-Q5p49C~76Vqsw+5{Vic>pgq+RBUW)Qc@C$RE0z$`}+D!Cav9W-QISTmlr&EK+ew2 zG#Csd5`oKQ#l%FC$<;dDFH1`%HoJ#Tr}y;q3=MT-FxRM53J#Zi^JX3flaY{+AP@*7 z5;2)fcDvube7SDsj8}KcJ>(>oiRNvHyHF&Q`7tVzb!1x=jCM&4-4+zEps?_OG@&U$|dA;D(yF!6i8%DYb&jxp#X_Y(dl%#xw&$=?D+WD;cyfc6+s|gFxV*u zqt#?G*4Nhx1bmrHR$Yyoot+&R7>J9DW3!vzv$yxVPB$l$egEp!p~0{~CYRc5iy#mP z3WWjy;C8#;`~N2VA5RbfYyy`*gg!h0K-|D=VCoxa06aB(2GXHQ?_{Lk{&kXak_oi? zo%Vv-3E>5_VE@k{&72F({g1+)#WwQ4rcjhNR zurn8R6iV_X?#GBg`}Gp%$a>3_Agh^3D-9JP$~>!1gGiPsC@qTrnOfT}E2x52*ll~A zPi~#LR%lh|PxAAGO!ix$!N&RYi=Wl#H<2sB9-p|{DJlZ+aM@tX_sNbDx zUT;fQ2E?u_wo!tT9|PK5KXiRNT@&E-w=x8P3=+DZ>!08L_fPL{&V|+{zxDPXUGwcM zq7V$m&N4;si>Kg?FI#gl)OQILBjB$?!a6TwAuWD1pZu|!KJmyRva9qCg(1G@dU!rh i#5SJ@+=Q@CM2r7Wc!t1(vB~Fn*ExQ^H#|Loxc>ll+5?yX literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..a5d6d7c991c2181a7bea03032c506b6f0e908864 GIT binary patch literal 1115 zcmeIxTThY!0LJkbL3%Azw5en#oL<=0lC>_VSOcb&>oDA$x9PGQyRo*m)`bZH5@J!V zw(YPI$Ei>s=tm`tY6w;`2E84SkQn0$0}RH0B94920MA(2Q_UtizY z*ccA)H8eCBjdKSF2Ll5GUawcLH<-;9iDXzT7O$dU$x4!{M~Iw_7X= z9e?tjomQ)r&u^TcpV#ST$H&JNigArbTTxN5vEg?*U6Yf_si`Tu-F|p@NTboFr>FP# z_m7T_PX7Y_`zH&e>?2?RPzKyQtDSuU08fF~9E`3Ms7t!k2PEgxi1c`ROb>v=Dw)?_ zVDp!;`EY>zT1jCDK3QyW~it<3>WH$!#M;jMl2FF%fF$MkUYGBO!|p__teHpef5PM3F08i z+jcPN+>Q7ZklV!I0T*tM;3!yj3?cds3xg=6#o}2RTnUA*PE4nx5|VRS5wI)h#LVJK z7c%+*Nd9`OP|0ORMG(@7sV&*x;eBs(f@dUJ895WrA}x~#7|Sn~}{b??{loZ~URX8iNt&p-eE@So?G zz9{|q?`NOeJ_kM>c=`LK#ubfQ-)|K>DyVu=_3PiS$a|4Dzuzo*T+;KR=k|}=KmPsr z_y6C;Zx<_`RLEVDv%GG}c9xCv9H;J8-T(jpGn`?dI#B%29pM|G;F4I92&8T7D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBBbrg&Y3=Q-RjPwnSbPdg|jE$@e3>2V1320kUN}5%WiyPD~AkS7Q zqokz3N?*Ucyj-u`STDaQUEk2s(h_8bk&!M?g>G?WUP)qwZeFo6%mkOz;^d;tf|AVq zJOz-6iAnjTCALaHmqNUdTL3pUuUHT49lhlIT>Xl~0)0b01CWucqiS6q^qmz?V9Vygtyua}vbVr6Dx?&9of=H_bbYHVoeYUt=> z;b>uQ0TyvGbTfqMb;(aI%}vcKf$2?w>oqsPsTY(GatnYqyQCInmZhe+73JqDfIV!L ziQ6qMIL(9VO~L6FGgq8?^?{Dj2SqDVG{b~|X$QoFCt4r}p6pZefN8x5n5Y^5|NHyr z_phHnzJL4r<@2YHAKt%v`{wnlmoJ__d-~+@qlXXf-@AL~_N|*Yu3x))1N{AbeZ0LqJ>1<~U7Vd99qjFFZLF;< zEzHeKO^l6z8A?xAM_Wr%LtRZ(MOjHvL0(Q)Mp{ZzLR?H#L|8~rfS-?-hntI&gPo0) zg_((wfkE*n3%In=0g<56j)AT4z(EBUEvbGL=Y<9;N)y`x6kS*v=eaW+&=7LvW7pX< z`$5Q&AlJtvdXyg!YX>H_`2&rgO77>!mh~-e` mW65xh<&l-o;NnsVsf*y|W>TCzhe45%iD_*H10$m&gEauM4C%Q5 literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_start.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_start.gif new file mode 100755 index 0000000000000000000000000000000000000000..09bb58fd43f6d5fce323eea6198e167f1bcef4f3 GIT binary patch literal 1119 zcmcJO?K9g40LOo+G#2#cd0AH*d9fMOa~4H{R6@j6^ekMLvW1d_qUxboJM$B%21y7* z9}@Lc4=LAKMa0mFj3AMpr!-kgBDT2FdN{l7cDG%|AFq6ckidRZ=MN^Yin2d;2ES zror%1uh-dZ|3*ee-n^MlrBd~JeMLnn2v*kCa!4dnNJvP1ef`nVkxXn1{z7 zceqsAClub1$@+G8-+~}064m1Ic%2Taso@d`gvrTCEY=?mw-X4s6B841`HvnR9u*Z8 zZEbA<0cZw;!RMEV#ckKGr%)&qoldu~F#i0x7zFdu($ccBu30Qw27~e5y?ab1V{mY= ztSq~)udlni)?_jXg~Eh{1dT>>c(~Wu*)=dA$<58(+WNh&u1>3+O-V^otCc}PLBqqt zznx&s$;rKSE3fK!b|w4rW!&Q8qD1mkEEaP(cgbWj4u=y6>W7AgAV`&&$)HfekVs@v zQI6GW-PkbA&CR_!VFQD~L`6l##E{0u#-vi2Ml;>f(Xq6&%;VjC_>k-A>AAVNrBY3k z$s`DZ&}cLWe$(9CTvvBnt9_A?K~t$Fc|6|uco&_1WoBktuV0|iXfm1H!NEbH7*Z;g zy}iBe?(dq-n=LIZI-Q!uV(stmL(p7wbaZQLD}#|~wQi@U)2&tujYidIe%juC-QO?r z^70ai!~_C9KR=(#y|cUf8jB4?AmA)k+Un|(P{=7Q&3^Odt=YWs=#dD8a^2W4tJN>; z?d?}r*HTkcJ32b)bo$7MjL#S3t1GRTKJA90+ zUQ+=5d~a6qci&6g06@y{Ddeh(6!x7LlP|3Iw|I*XH{d9j+ZVe&IP2Ml;2$1L5k`>( zh@Tb7TgJy}zb+rtCS|wS)7^bJer`n9W^{zW+xyQs;SWADnSm*wj|&*W0xKP%DOkYy z5w@>)#x`oi&hLirsrSym8gw+ayQ?6x0ps6G?w%)&6_1{wISsp-tLstDpn}(zm$Hfu zE=omRt$gAlh*0Je0~>g&XAusCjH}lMFFbJ^AVr05!GM|v_Cwg16^uNn$M=ijq=OYg tbK{lIOAHMF{QX`p${!Yf=(%sxqeBVz8>2sJB~!t3FaJSbLc(AG?mw0!{x|>t literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_start_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_start_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..f58f11114cada2854d69e527367c5c5354bcbc82 GIT binary patch literal 1115 zcmeH`=}*#e0EfQ;IxsbD%rL8IvsGIe7+Yqofoo-3mNi%TD&1Q1rB*L$Z3IYS3d@cy zyb+J#g*Xhusr)1yB8OaZ=@RsVNDKM)P_% zW@l#=3WeM4h9F3*)#>#Hv)R(t*0#UDFA|Lz4D(;V3g_qNeLkPZ;~5?vZf|era(i_; zeMd(}eSN*%?y%Wx0)fEcaIo2Ii^V!JGBPkQKq8S83Z>a>Hkr&lJv~zCv__-la=9BD zK9x$%VzHK&mzhlF`npFT7-?>9{%sKog_TN`Og3Y)*&~st-|w%fsgcWP<#M^xxe|#) zg2CX=zkvVzlLxY5hywu7!MQ(cf0_WupWx8FtP&)Zm4G5Opa?($hovW%V+d{pJ>xMx zd!0=FPENd2`-o4drN9wzSOxB0ri6Jm5vzR3;S@4aMZ3|wO7?Un`t>)=E9~jF35ay0 zFXe;mVBCo#4_;^*IBFUKo3pWWv4EI#37s>uj^hAK#$jZvp`dyyEdzxoW1s(kzl+DA zS(v1c-o&t3CC(p|b228lPN=&VAyR!Z5g_ zSD{oS;(Z?a`Zr9GwKyg1!c{EySvKQ%%K4`n9+OC;C%w#nRN4`r@NrpKHH5=M#4ouI zuWhl5Du@71286tnTmU{D$|Bw7B|_D(^fWcHuDEOlb}s(pZ6qIh%fOc&yI+VToXLVH RFb1H3d^bc)rXvvG$}fi;u$%w@ literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_status.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_status.gif new file mode 100644 index 0000000000000000000000000000000000000000..a93bcfb1419a6df2239639083ef02239b926416a GIT binary patch literal 2150 zcmd^AX+slN6dg3ONsAlQs;xtC7qS6D20~0G35gO41jM*hLNbsD$;2d>XsZN?fQn#1 z&{jhcYo%xxC`iHL0;q^=E>I{4VKG!usI{%#(}@-BhtfaL`{B)dZ_c^PymQ}#@Hhcf z(M(__@U$G5J9k!NV|{aTgP)(DR4R>#hzJY}?C9u#VK_82w6^vFlgW&akFTq%@9F7b zv)NQCH9b9@$K&nVwM(zxk(ZbE;K8WbJlNdaER)GjpFS-R2!exy`}_NAYHIrW`p3t| zo0^)&#>V^l%)PyRN+qgN$?0@Dhr?mBIhB=_`}Z5FtIG=t3jF>3Pn;;WTK}+E23uNM zq|!Kp!GNOZzI~ZVNl7_5IfaFViHS*0PEH942^0#&WGXBvDM1kA$&)8tT{qg=t{II+ zp-`}C)25IRI4v!$y}fbc#;7@ST(h#Wj7CFPSlGjdk9vE1V`F12mJzi&(ZRvNY#!+D z?lBtQvA4%@xm+482s2+_-=U#d(km(|+}zxXi%-HZoy+Cu zbXpv4DxV*E=S~NM!MJ(z)`0^D^7HfQbXt3Rdw2J32qFy(40U#PibPwEA2*GTJ~A3} zD=Vv#ljU7qT?Y?l4-O8+$0OOx%b zr2+t8wOX<9|6m^0>FfF7AWNhXVb37CPAL*6A{sCbNsuXM`0?`>@t{mX!^imXNqi-Y zNM+oeDnzg|EK0mHQB0NK>A_%-4${e$azrBnb@C*I8q(45A_*FYK-k>2O~ixGAeuxP zo?&|d+G4_}3IY8HByTZk6$xBLCXju6u_o{WDI_w9NTLwQ6mPOWU-%z>y1zN3% zL|*3mua4DGJCq195>cbcDlvk=J#C?s5UfH(8dMd9qDd29FnM?xtli*c8Fic|muqk9Rn;Za>ePEU!gAw5COJ%XB z6I>Q5PL?AI%>-BSl1rYHYZHQ8iA821D%o~K!cn1e@L9o-Y|>nq>`DDS=Sn8cg~^$e zOT>~P+K%-f$2_rxX~#BwAzEzlLiUIP)4B>1wVn0PKYsu1*I#~q`qPg;Jo*0dcjIG^ z9*#b^|Lut7-tf@ifVsc#Zg0;w-CbXIcHFsr>t=gfYfJNurt6K@u3l-Vue*Hd;)U9; z&ev3bS#_?m;*0XK&p-S0le1?^KQ1}_(Wwtl7N02kpwM*u*!%AtJyMW=I4{?DC@1@1 z)`9)|GBeWm8q)Tp>Qi>_diR~3J9OIZ$r`n4n-W#XlM=VeqzUneL>woI-SYP4O&d1| z*T<}jjuJ#hgufNW4_&*4#|`1ISum5anjTCG3WTTu{;T|aeJEH%5xl)tu2{Zo>5|2Z zJn}HRT#^-W!rs?wxBl3UH3QS=^adF4+aLT&S6g#DIb0?o}4i zUSzlQ)u|-OvKi?&>=(Kff;HhGvrh_&+@-4*XX>3j@!!WfN7bcgxTYMH@B|*~?0B<# z55>+H$;@@jD+=FJxrFJ3`@oBP`Q*Lk!%IHdaL{>1k)xN_tVIhR6g#xIxKF`Vs1_Th z=-B|JHb5zIwF`!EuG`%J;B1VmV%fYh9^=f)ZJVptAU~`2xaLl xUaqS*XM3*u_I66jUXg?Io2#Msz6-MknyBRq0+!ES+mag%*gM9$kZ?F4@GsHC5SRb} literal 0 HcmV?d00001 diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_stop.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_stop.gif new file mode 100755 index 0000000000000000000000000000000000000000..922addc5ca6c5a27f4c6776448947662861f2191 GIT binary patch literal 1106 zcmchWTThw?06;%)^}e7^hjeLc)^1@lTeTW=1w{l3sW(uz;HV-ZmnhY^`Cv92DDyIH zkx|7)VO~15n5F8thznB@>(mbf0*bW?DwS5PZu+n;*}~dCvGZ_V&(pa<#HXc~MFCO3 zUrzu6fdGfY$z(DV3gz?psi~=piyFQDH;2P<=g!@&Ef)xa91e%e>=kb_8(0Fw8vc0`MAi&>Xm^^nb z&}=rx#>TSQY%)3D<#M4=NDKy}R4P#@l*KY1A0OlK?9*tJ?(Xi5jrE?M&XJK3nM{U6 zUVjZ5jY>&LVKOT^I_j)etI=q*Sj=&8agB|&4u?H6GgB-U+wBgi^lPnlQmGvC`OdPk zvZPWe7K@&qR#GUGnwrASPH|IH)1yanqfw*LXuV#qTCLsP_1Nv!wY9Z{1%pnfo0`%E z2M33ShR)1P@_5|7J~@p>TUweqJbbBAsqlFG#f$IM*O%<=Jp;ktOG`_;y1Lx%9kY3P zbaYfC`c@*5P^nal#i-Lg*xA|Z@0S!6JwZ zs>*DBoR;>X(`jB^wQ4luZEX!_XJ;Odr>>4iAmHV4xlq`s*XvhSi~s=me7@KIKS}sI z&<_Bf0Eus+Z=L``e1IC)Ui-88$G3m&v)fc7Q9@X)N_gp~?BbxX_!<-tlK}B2O-J8) zg?<187RP~UpY~_XU%e0%m*TWA3R*AUv*k$KALX~@NuIxYsA=+>q+Bk3NEr8I!Grpf z7fAj?rskW0ntytL=RxDNp=I>J-m`E;#9CrULFx@l5+|_({UYJY<0#f!@Ah|6M6fP4 zb(}(FRz$!)qa8uBFYUxgxhoh-2>O2Q-CXFsD_;z_XJg}kImbMYf&u5lBBRsh8SVMk zu!BT)09}yn2NO;A{9&IfsIsYgrzVo%t&pVd+y8#do3$r=4!K%{A-6hDH!eVvLWWrW z5Y+btxKAKx1yWcNo~LiTwueLZE1ectu?Eyt<@SJSfRG~ z;=DyuCwSoy9S#E(L=Kfhk=s|m3*-n;2u*(lR$UH#j)h*x0C2sa984CnqO08jaOz-QM2r=;&x}Zg#spcKd2? zZ}0N*^4i)Om&;|d*&Gf>tyaS@?Dcw?Os2!(6bJ-%yWQjQ_V@SOY&L;FsMTuw`ueom zB@&5bu~=qiW`>7{SuEDk(UH&RTUuK3`~7mcT&L6Vc)X2`jn2-_uC6YZ%gyKW6$*vf zY|&^IR#sN(>+3xpk5Z|UNF*wiy1KfWMxz}Z9PI7wEi5b=jmD9Y5vf$F*BcHG54qeC zI-S0`=`fkh)6>&3ncQqP4-E~u-R_#2nzpvK@$qq^(Igg&TU%Qtk{OXm?DK6i80|8d zOt07Lbo#}`MFxX0KR+)N3I_%T)M|~vV30~>-QC?*tF5PpDH4e&6iR!0ds9glFJnw&al(DH8wWpa5!dX=NcLsc)T%%V%B6bO-xL#udk1ej@H)Jx?C=&(@7?i z_xJZt{sR8

                            ';}} +TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;} +function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();} +else{cancelHide(oMenu);}} +function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}} +function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);} +function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}} +function hide(oMenu){if(!oMenu&¤t)oMenu=current;if(oMenu&¤t==oMenu&&oMenu.isOpen){hideCurrent();}} +function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}} +function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;" +var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;" +return''+sText+''+'';}} +function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();} +Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);} +Accelimation.prototype.stop=function(){Accelimation._remove(this);} +Accelimation.prototype._paint=function(time){if(time= !,... +# where: forbidden pages are those pages that should *not* use +# the particular JavaScript function within the JS event +# specified below. +# $Id$ +# +onload=tmenuinit(); !wizard.php \ No newline at end of file diff --git a/usr/local/www/themes/the_wall/loader.js b/usr/local/www/themes/the_wall/loader.js new file mode 100644 index 000000000..20ecfbb6a --- /dev/null +++ b/usr/local/www/themes/the_wall/loader.js @@ -0,0 +1,30 @@ +//'); +} + +document.write(''); + +//]]> diff --git a/usr/local/www/themes/the_wall/login.css b/usr/local/www/themes/the_wall/login.css new file mode 100644 index 000000000..3c97a9a24 --- /dev/null +++ b/usr/local/www/themes/the_wall/login.css @@ -0,0 +1,1159 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + +} + +.infoboxnptd2 { + width:100%; + color:white; + background-color:#990000; + padding-right: 10px; +} + +.infoboxnptd { + width:8%; + background-color:#990000; +} + +.infoboxnptable { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnptable2 { + height:32px; + width:100%; + background-color:#990000; +} + +.infoboxnp { + background-color:#990000; + width:100%; +} + +.infoboxnpimg { + vertical-align:middle; + width:28px; + height:32px; + background-color:#990000; +} + +/* please adjust the bgcolor to be used together with niftycorners! */ +.rtop, .artop { + background-color: #999999; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 250px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 9px; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + margin: 0px auto; + background: url('images/background.jpg') repeat-x; background-attachment:fixed; + background-position : center 0px; + background-color: #999999; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 810px; + margin: 0px auto; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 102px; + width: 810px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.png') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; + font-size: 14px; + color: #cccccc; + font-weight: bold; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: normal; + font-family: Verdana; + color: #ffffff; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 0px; + margin-top: 0px; + margin-left: 0px; + padding-top: 0px; + width: 810px; + background-color: #ffffff; +} + +#left { + width: 810px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.png') no-repeat; + top: -18px; + left: 0px; + width: 810px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + /* background: url('images/menu.gif') no-repeat; */ + /* width: 693px; */ + position: relative; + top: -25px; + left: 3px; + width: 810px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + /* width: 7.5em; */ + width: 8.77em; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + /* background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #990000; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background-color: #990000; + color: #FFF; +} +#navigation ul li ul li:hover { + background-color: #666666; +} + +#navigation li li a { + display: block; + padding-left: 10px; + padding-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 1; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 20px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; + text-align: center; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 8px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + +#login { +/* background: #cccccc; */ + background-color: transparent; + border: 0px solid #cccccc; + margin: 5em auto; + padding: 0em; + width: 400px; +/* filter:alpha(opacity=60); + -moz-opacity:0.6; + -khtml-opacity: 0.6; + opacity: 0.6; */ +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; +/* background: #ffffff; */ + margin-top: 0; + display: block; + text-indent: -1000px; + height: 400px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ + position: relative; + top: -420px; + left: 70px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; +/* text-indent: 10px; + position: relative; + top: -300px; */ +} + +#login #username, #password { + font-size: 1em; + width: 60%; + padding: 3px; + margin: 0em; +/* text-indent: 10px; + position: relative; + left: 10px; + top: -300px; */ +} + +#login #submit { + font-size: 1em; + font-weight: bold; + text-align: center; + padding: 3px; + margin: 0em; +/* text-indent: 10px; */ + position: relative; + top: -20px; + left: 170px; +} + +/* loginerror box follows */ + +#login #inputerrors { + background-color: transparent; + border: 0px solid #666666; + margin: 5em auto; + vertical-align: middle; + padding: 0em; + width: 330px; + height: 50px; + position: relative; + top: -370px; +} +/* +#login #errortext { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 330px; + position: relative; + top: -350px; +} + +#login #errordesc { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 330px; + position: relative; + top: -350px; +} +#login #errordesc h1 { + background: url(/images/misc/logon.png) no-repeat top left; + margin-top: 0; + display: block; + text-indent: -1000px; + height: 50px; + border-bottom: none; +// position: relative; +// top: -300px; +} +*/ \ No newline at end of file diff --git a/usr/local/www/themes/the_wall/menu.inc b/usr/local/www/themes/the_wall/menu.inc new file mode 100644 index 000000000..ec9d389c6 --- /dev/null +++ b/usr/local/www/themes/the_wall/menu.inc @@ -0,0 +1,178 @@ + + All rights reserved. + */ +/* ========================================================================== */ +/* + Originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2004 Manuel Kasper . + 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. + */ +/* ========================================================================== */ + +require("menu.inc"); + +define("TMENU_STUB", " + // set up drop downs anywhere in the body of the page. I think the bottom of the page is better.. + // but you can experiment with effect on loadtime. + if (TransMenu.isSupported()) { + + //================================================================================================== + // create a set of dropdowns + //================================================================================================== + // the first param should always be down, as it is here + // + // The second and third param are the top and left offset positions of the menus from their actuators + // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use + // something like -5, 5 + // + // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner + // of the actuator from which to measure the offset positions above. Here we are saying we want the + // menu to appear directly below the bottom left corner of the actuator + //================================================================================================== + var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft); + + //================================================================================================== + // create a dropdown menu + //================================================================================================== + // the first parameter should be the HTML element which will act actuator for the menu + //================================================================================================== + + @@MENU_DEFINITIONS@@ + + //================================================================================================== + // write drop downs into page + //================================================================================================== + // this method writes all the HTML for the menus into the page with document.write(). It must be + // called within the body of the HTML page. + //================================================================================================== + TransMenu.renderAll(); + } +"); + +class NervecenterMenu extends Menu { + private $menuJScript = "NOT-SET"; + private $menuJScriptEvents = "NOT-SET"; + private $menuID = "NOT-SET"; + + public function __construct($identification = "", $filename = "", Component $c = NULL) { + parent::__construct($identification, $filename, $c); + + $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); + $this->menuID = $id; + + if ($this->hasParent()) { + $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n"; + } + } // end __construct + + public function getMenuID() { + return $this->menuID; + } + + public function setMenuID($myMenuID) { + $this->menuID = $myMenuID; + } + + public function getMenuJScript() { + $childJScript = ""; + foreach ($this->getChildren() as $component) { + $childJScript .= $component->getMenuJScript(); + } + + if (! $this->hasParent()) { + $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB); + } else { + $this->menuJScript .= "\n$childJScript\n"; + } + + return $this->menuJScript; + } + + public function getMenuJScriptEvents() { + return $this->menuJScriptEvents; + } + + public function __toString() { + if (! $this->hasParent()) { + $menuMarkup =<< + @@CHILD_ELEMENTS@@ + + +EOD; + } else { + $name = gettext($this->getID()); + $id = "mnua_" . str_replace(" ", "", strtolower($this->getID())); + + $menuMarkup =<<{$name} + @@CHILD_ELEMENTS@@ +EOD; + } + + $childMarkup = ""; + foreach ($this->getChildren() as $component) { + $childMarkup .= $component; + } + + $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup); + + return $menuMarkup; + } +} + +class NervecenterMenuItem extends MenuItem { + private $menuJScript = "NOT-SET"; + private $menuJScriptEvents = "NOT-SET"; + + public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) { + parent::__construct($identification, $filename, $href, $c); + + $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}"; + $name = gettext($this->getID()); + $file = $this->getFile(); + + $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n"); + } + + public function getMenuJScript() { + return $this->menuJScript; + } + + public function getMenuJScriptEvents() { + return $this->menuJScriptEvents; + } + + public function __toString() { + return ""; + } +} + +?> diff --git a/usr/local/www/themes/the_wall/new_tab_menu.css b/usr/local/www/themes/the_wall/new_tab_menu.css new file mode 100644 index 000000000..04c4cf2ea --- /dev/null +++ b/usr/local/www/themes/the_wall/new_tab_menu.css @@ -0,0 +1,101 @@ +/* + new_tab_menu.css + part of pfSense + Copyright (C) 2010-2011 Robert Zelaya + + 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. + + + Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again. + The following code is dependent on new_tab_menu.css and images/new_tab_menu.png. + + + + + + + +*/ + +.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;} + +.newtabmenu li{float:left; margin-right:2px; text-align: center;} +.newtabmenu a:link, .newtabmenu a:visited{ + background:url(images/new_tab_menu.png) right 45px; + color:#ffffff; /* noactive font */ + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + font-weight:bold; + font-size:.9em; + height:20px; + line-height:20px; + text-decoration:none; +} +.newtabmenu a span{ + background:url(images/new_tab_menu.png) left 45px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + height:20px; + margin-right:7px; + padding-left:7px; +} +.newtabmenu a:hover{ + background:url(images/new_tab_menu.png) right 23px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ + color:#ffffff; /* hover over font */ +} +.newtabmenu a:hover span{ + background:url(images/new_tab_menu.png) left 23px; + display:block; + /* fix for IE6 */ + display: inline-block; + /* END */ +} + +/* -------------------------------- */ +/* ACTIVE ELEMENTS */ +.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{ + color:#000000; /* active font */ + background:url(images/new_tab_menu.png) right 0 no-repeat; +} +.newtabmenu_active a span, .newtabmenu_active a:hover span{ + background:url(images/new_tab_menu.png) left 0 no-repeat; +} \ No newline at end of file diff --git a/usr/local/www/themes/the_wall/no_big_logo b/usr/local/www/themes/the_wall/no_big_logo new file mode 100644 index 000000000..6e5c70d7a --- /dev/null +++ b/usr/local/www/themes/the_wall/no_big_logo @@ -0,0 +1 @@ +NO! DONT! \ No newline at end of file diff --git a/usr/local/www/themes/the_wall/rrdcolors.inc.php b/usr/local/www/themes/the_wall/rrdcolors.inc.php new file mode 100644 index 000000000..52337b9ed --- /dev/null +++ b/usr/local/www/themes/the_wall/rrdcolors.inc.php @@ -0,0 +1,88 @@ + + 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. +*/ + +/* This file is included by the RRD graphing page and sets the colors */ + +/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */ +$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7'); + +/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */ +$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900'); + +/* 95th Percentile Lines Out, In */ +$colortraffic95 = array('660000', 'FF0000'); + +/* State Table pfrate, pfstates, pfnat, srcip, dstip */ +$colorstates = array('00AA00','990000','0000FF','000000','DD9B00'); + +/* Processor Usage user, nice, system, int, processes */ +$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000'); + +/* Memory Usage active, inact, free, cache, wire */ +$colormemory = array('00AA00','990000','0000FF','666666','DD9B00'); + +/* MBUF Usage current, cache, total, max */ +$colormbuf = array('0080FF','00E344','FF0000','000000'); + +/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */ +$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000'); +$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC'); + +/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */ +$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000'); +/* Quality Graph Loss */ +$colorqualityloss = 'ee0000'; + +/* Wireless Graph SNR, Rate, Channel*/ +/* Cellular Graph RSSI, */ +$colorwireless = array('333333','a83c3c','999999'); + +/* SPAMD Times min area, avg area, max area, Time line */ +$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066'); +/* SPAMD Connections max area, min area, min line, max line, avg line */ +$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600'); + +/* OpenVPN Users Online Users */ +$colorvpnusers = array('990000'); + +/* Captive Portal Total Users Total Users */ +/* Captive Portal Concurrent Concurrent Users */ +$colorcaptiveportalusers = array('990000'); + +?> diff --git a/usr/local/www/themes/the_wall/styles/menustyles.css b/usr/local/www/themes/the_wall/styles/menustyles.css new file mode 100644 index 000000000..06b3c7af5 --- /dev/null +++ b/usr/local/www/themes/the_wall/styles/menustyles.css @@ -0,0 +1,44 @@ +#navigation { + /* border:1px solid black; */ + width: 98%; + vertical-align: middle; + height: 16px; + padding-top: 4px; + } + +#menu { + /* background: #990000; */ + /* border-bottom:1px solid white; */ + padding: 0 0 0 0; + width: 98%; + vertical-align: middle; + height: 16px; + } +#menu a { + padding: 2px 28px 4px 28px; + text-decoration: none; + font-weight: bold; + font-size: 1.0em; + color: #FFFFFF; + width: 08%; + height: 16px; + } +#menu a.hover { + background: #AF2020; + } +#menu span { + display: none; + } + +#subnav { + font-size: 10px; + margin-bottom: 2em; + } +#subnav a { + color: #FF0000; /* #FB3B00; */ + margin-right: 1em; + } +#subnav span { + color: silver; + margin-right: 1em; + } diff --git a/usr/local/www/themes/the_wall/styles/transmenu.css b/usr/local/www/themes/the_wall/styles/transmenu.css new file mode 100644 index 000000000..f68357434 --- /dev/null +++ b/usr/local/www/themes/the_wall/styles/transmenu.css @@ -0,0 +1,75 @@ +/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */ +.transMenu { + position:absolute; + overflow:hidden; + left:-1000px; + top:-1000px; + } + +/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */ +.transMenu .content { + position:absolute; + } + +/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */ +.transMenu .items { + position:relative; + left:0px; top:0px; + z-index:2; + } + +.transMenu.top .items { + border-top:none; + } + +/* each TR.item is one menu item */ +.transMenu .item { + color: #FFFFFF; /* #336; */ + font-size: 1.1em; + font-weight: normal; + font-family:sans-serif; + text-decoration:none; + /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */ + border:none; + cursor:pointer; + cursor:hand; + } + +/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */ +/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */ +.transMenu .background { + position:absolute; + left:0px; top:0px; + z-index:1; + -moz-opacity:.8; + filter:alpha(opacity=80); + } + +/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */ +.transMenu .shadowRight { + position:absolute; + z-index:3; + top:3px; width:2px; + -moz-opacity:.4; + filter:alpha(opacity=40); + } + +/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */ +.transMenu .shadowBottom { + position:absolute; + z-index:1; + left:3px; height:2px; + -moz-opacity:.4; + filter:alpha(opacity=40); + } + +/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */ +.transMenu .item.hover { + background:#fdfdfd; + color:black; + } + +/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */ +.transMenu .item img { + margin-left:10px; + } \ No newline at end of file diff --git a/usr/local/www/themes/the_wall/wizard.css b/usr/local/www/themes/the_wall/wizard.css new file mode 100644 index 000000000..a2d31d5ee --- /dev/null +++ b/usr/local/www/themes/the_wall/wizard.css @@ -0,0 +1,1060 @@ +/* Element CSS Definitions */ +html, body, td, th, input, select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + +} + +.nowrap { white-space: nowrap; } + +/* please adjust the bgcolor to be used together with niftycorners! */ +.rtop, .artop { + background-color: #999999; +} + +div.GraphLink { + position: relative; +} + +span.GraphLinkLine { + position: absolute; + background-color: #990000; + width: 100%; +} + +/* DOM Tooltip CSS definitions */ +div.niceTitle +{ + background-color: #333333; + color: #FFFFFF; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + width: 250px; + left: 0; + top: 0; + padding: 4px; + position: absolute; + text-align: left; + z-index: 20; + -moz-border-radius: 0 10px 10px 10px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87); + -moz-opacity: .87; + -khtml-opacity: .87; + opacity: .87; +} +div.niceTitle h1 +{ + background: #990000; + border-bottom: 1px dotted #FFFFFF; + font-weight: bold; + font-size: 13px; + font-family: "Trebuchet MS", sans-serif; + margin: 3px; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 3px; + text-align: left; + left: 0; + top: 0; + -moz-border-radius: 0 8px 0 0; + -moz-opacity: 1; +} +div.niceTitle .contents +{ + margin: 0; + padding: 0 3px; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; +} +div.niceTitle p +{ + background: #FFFFFF; + border: 1px solid #990000; + color: #000000; + font-size: 9px; + padding: 5px; + margin: 3px; + text-align: left; + -moz-opacity: 1; + -moz-border-radius: 0 0 8px 8px; +} + +body { + margin: 0px auto; + /* background: url('images/background.png') no-repeat; */ + background-position : center 0px; + background-color: #999999; +} + +form { + margin: 0px; +} +a { + text-decoration: none; +} +form input { + font-size: 1.1em; +} + +iframe { + z-index: 1; + border: 1px dashed #990000; +} +.iframe { + background-color: #FFFFFF; +} + +/* ID Based CSS Definitions */ +#wrapper { + width: 810px; + margin: 0px auto; +} + +#header { + background: url('images/header.png') no-repeat; + background-position: 0px; + height: 102px; + width: 810px; + margin-bottom: 5px; + z-index: 2; +} +#header-left { + position: relative; + /* background: url('images/logo.gif') no-repeat; */ + background-position: center; + height: 65px; + width: 145px; + left: 10px; + float: left; +} +#header-left #status-link { + position: relative; + top: 10px; + left: 6px; +} +#header-right { + position: relative; + /* background: url('images/header.gif') no-repeat; */ + height: 70px; + color: #fff; + left: 0px; + margin-left: 165px; +} +#header-right .alert { + position: relative; + /* background: url('images/alert.gif') no-repeat; */ + background-position: 4px 2px; + color: #fff; + height: 17px; + width: 500px; + padding: 4px; + padding-left: 27px; + float: left; +} +#header-right .container { + position: relative; +} +#header-right .container .left { + position: relative; + float: left; + font-size: 1.3em; + font-weight: bold; + top: 15px; + left: 4px; + display: none; +} +#header-right .container .right { + position: relative; + float: right; + top: 22px; + padding-right: 4px; + z-index: 1; +} + +#header-right .container .right #alerts { + position: relative; + background: url('images/alert_bgr.png') no-repeat; + height: 39px; + width: 431px; + z-index: 1; + padding-top: 20px; + padding-left: 5px; + margin: 0px; +} +#header-right .container .right #hostname { + position: relative; + height: 39px; + width: 431px; + z-index: 1; + padding-left: 5px; + margin: 0px; + top: 25px; + left: 230px; + font-size: 14px; + color: #cccccc; + font-weight: bold; +} + + + +table#marquee { + position: relative; + top: -6px; + left: -5px; + border: 0; + padding: 0; + margin: 0; + width: 424px; + background-color: transparent; + padding: 2px; + border: 0px; +} +span#marquee-container { + position: absolute; + visibility: hidden; + top: -100px; + left: -10000px; +} +div#marquee-text { + font-size: 1.18em; + font-weight: normal; + font-family: Verdana; + color: #ffffff; +} +table#marquee div#container { + position: relative; + overflow: hidden; + width: 418px; + height: 20px; +} +table#marquee div#container div#scroller { + position: absolute; + left: 0px; + top: 0px; +} + + + + + +#content { + position: relative; + top: -15px; + left: 0px; + margin-top: 0px; + margin-left: 0px; + padding-top: 0px; + width: 810px; + background-color: #ffffff; +} + +#left { + width: 810px; + height: 1px; +} +#right { + position: relative; + top: -10px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 5px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 20px; + min-height: 400px; +} + +#footer { + position: relative; + background: url('images/footer.png') no-repeat; + top: -18px; + left: 0px; + width: 810px; + height: 75px; + color: #ffffff; + text-align: center;; + font-size: 0.9em; + padding-top: 17px; + margin-bottom: 20px; + clear: both; +} +#footer p { + padding: 0px; + margin: 0px; +} + +/* Style the List */ +#navigation { + /* background: url('images/menu.gif') no-repeat; */ + /* width: 693px; */ + position: relative; + top: -25px; + left: 3px; + width: 810px; + padding: 0px; + height: 28px; + z-index: 3; +} +#navigation ul { + padding: 0; + margin: 0; + list-style: none; + text-align: center; +} +#navigation ul#menu { + padding-top: 3px; + padding-left: 5px; +} + +/* Style the List Elements */ +#navigation ul li { + float: left; + position: relative; + /* width: 7.5em; */ + width: 8.77em; +} +#navigation ul li div { + font-size: 1em; + font-weight: bold; +} +/* Make the List inside the List Elements */ +/* initially hidden with absolute position */ +#navigation ul li ul { + display: none; + position: absolute; + top: 2em; + left: -2px; + width: 9em; + font-weight: normal; + background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */ + /* background-color: #202020; + background: url("images/menu_footer.gif") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 0.3em; +} +/* to override top and left in browsers other than IE */ +/* which will position to the top right of the containing */ +/* li, rather than bottom left */ +#navigation ul li > ul { + top: auto; + left: auto; + left: -1px !important; +} +/* Show initial drop down upon mouse over, but do not show */ +/* nested side drop menus within listed elements */ +#navigation ul li:hover ul { + display: block; + cursor: pointer; +} +#navigation ul li:hover { + cursor: pointer; + cursor: pointer; +} +#navigation ul li:hover div { + text-decoration: none; +} + +#navigation ul li { + background-color: transparent; + color: #FFF; +} +#navigation ul li ul li { + border: 1px solid #990000; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; + background-color: #990000; + color: #FFF; +} +#navigation ul li ul li:hover { + background-color: #666666; +} + +#navigation li li a { + display: block; + padding-left: 10px; + padding-right: 10px; +} + +#navigation ul li ul li a.navlnk:hover { + text-decoration: none; +} +#navigation ul li.first { + border-right: 0px; +} +#navigation ul li.middle { + border-right: 0px; +} +#navigation ul li.last { + +} + +#navigation ul li.dropfirst { + border-bottom: 0px; +} +#navigation ul li.dropmiddle { + border-bottom: 0px; +} +#navigation ul li.droplast { +} + +#wzdtabcont { + float: left; + background-color: #FFFFFF; + color: #000000; + padding: 0; +} + +ul#wzdnav { + font-size: 0.96em; + float: left; + width: 14.5em; + margin: 0; + padding-left: 18px; +} + +ul#wzdnav li { + list-style: none; + margin: 0; + padding-bottom: 0.2em; + padding-left: 0; +} + +ul#wzdnav a { + display: block; + padding: 0.3em; + font-weight: normal; +} + +#wzdnavbold a { + display: block; + padding: 0.3em; + font-weight: bold ! important; +} + +ul#wzdnav a:link { + color: black; + background-color: #eee; +} + +ul#wzdnav a:visited { + color: #666; + background-color: #eee; +} + +ul#wzdnav a:hover { + color: black; + background-color: white; +} + +ul#wzdnav a:active { + color: white; + background-color: gray; +} + +#graph { + position: relative; + z-index: 1; +} + +#logoutbtn { + position: absolute; + left: 95%; + vertical-align: middle; +} + +/* Class Based CSS Definitions */ +.pgtitle { + font-size: 18px; + color: #777777; + font-weight: bold; +} +.tfrtitle { + font-size: 18px; + color: #ffffff; + font-weight: bold; +} +.vncell { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + border-bottom: 1px solid #999999; +} +.formfld { + padding-left: 19px; + font-size: small; +} +.formselect { + font-size: 1.0em; +} +.langopt { + padding-left: 34px; + padding-top: 2px; + padding-bottom: 2px; +} +.saved { + /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important; +} +.notsaved { + /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */ + list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important; +} +.en { + background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF; +} +.de { + background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF; +} +.es { + background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF; +} +.pt_BR { + background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF; +} +.host { + background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF; +} +.search { + background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF; +} +.file { + background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF; +} +.mail { + background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF; +} +.imp { + background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF; +} +.pwd { + background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF; +} +.user { + background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ; +} +.group { + background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF; +} +.url { + background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF; +} +.time { + background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF; +} +.unknown { + background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF; +} +.formfld_cert { + background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF; + padding-left: 28px; + font-family: Courier New, Courier, monospaced; + font-size: 11px; +} +.formfldalias { + background-color: #990000; + color: #FFFFFF; +} +.formpre { + font-family: Courier New, Courier, monospaced; + font-size: 10px; +} +.formbtn { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; +} +.formbtns { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + font-weight: bold; +} +.vvcell { + background-color: #FFFFC6; +} +.errmsg { + font-weight: bold; + color: #CC0000; +} +.red { + color: #CC0000; +} +.gray { + color: #A0A0A0; +} +.vexpl { + font-size: 11px; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 13px; +} +.navlnks { + color: #FFFFFF; + text-decoration: none; + font-size: 11px; +} +.redlnk { + color: #990000; + text-decoration: none; +} +.tblnk { + color: #FFFFFF; + text-decoration: none; +} +.vncellreq { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vncellt { + background-color: #DDDDDD; + padding-right: 20px; + padding-left: 8px; + padding-top: 4px; + padding-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #999999; +} +.vtable { + border-bottom: 1px solid #999999; +} +.vnsepcell { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.cpline { + font-size: 11px; + color: #FFFFFF; +} +.hostname { + font-size: 11px; + color: #990000; + font-weight: bold; +} +.vnsepcellr { + background-color: #BBBBBB; + padding-right: 20px; + padding-left: 8px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listrpad { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-right: 16px; + padding-left: 10px; + padding-top: 8px; + padding-bottom: 8px; +} +.listn { + font-size: 11px; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbg { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listbggrey { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #999999; + padding-right: 16px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listhdr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdr a { + color: #000000; +} +.listhdrr { + background-color: #BBBBBB; + padding-right: 16px; + padding-left: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + padding-top: 5px; + padding-bottom: 5px; +} +.listhdrr a { + color: #000000; +} +.listlr { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-right: 6px; + padding-left: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +.listlrns { + background-color: #FFFFFF; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + border-left: 1px solid #999999; + font-size: 11px; + padding-top: 4px; + padding-bottom: 4px; +} +.list { + font-size: 11px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.listt { + font-size: 11px; + padding-top: 5px; +} +.listhdrrns { + background-color: #BBBBBB; + padding-left: 6px; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 6px; + font-weight: bold; + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; +} +.listbgns { + border-right: 1px solid #999999; + border-bottom: 1px solid #999999; + font-size: 11px; + background-color: #D9DEE8; + padding-left: 6px; + padding-right: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +.listtopic { + border-right: 1px solid #999999; + font-size: 11px; + background-color: #990000; + padding-right: 16px; + padding-left: 6px; + color: #FFFFFF; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; +} +.optsect_t { + border-right: 1px solid #999999; + background-color: #990000; + padding-right: 6px; + padding-left: 6px; + padding-top: 2px; + padding-bottom: 2px; +} +.optsect_s { + font-size: 11px; + color: #FFFFFF; + font-weight: bold; +} +.tabnavtbl { +} + + +/* MISC CSS Definitions */ +ul#tabnav { + font-size: 11px; + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} +ul#tabnav li.tabinact1 { + float: left; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact { + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +ul#tabnav li.tabinact a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabinact1 a { + float: left; + display: block; + text-decoration: none; + padding: 5px 8px 5px 8px; + color: #FFFFFF; +} +ul#tabnav li.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabcont { + background-color: #EEEEEE; + padding-right: 12px; + padding-left: 12px; + padding-top: 12px; + padding-bottom: 12px; +} +.tabact { + float: left; + background-color: #EEEEEE; + color: #000000; + padding: 5px 8px 5px 8px; + white-space: nowrap; +} +.tabinact { + font-weight: bold; + float: left; + border-left: 1px solid #999999; + background-color: #777777; + color: #FFFFFF; + padding: 0; + white-space: nowrap; +} +.menu { + background-color: #000000; + white-space: nowrap; + padding: 0px 5px 0px 5px; + width: 100%; + vertical-align: top; +} + + +/* Auto Complete Suggestions */ +div.suggestions { + -moz-box-sizing: border-box; + /* box-sizing: border-box; */ + border: 1px solid black; + position: absolute; + background-color: #990000; + color: #FFF; +} + +div.suggestions div { + cursor: default; + padding: 0px 3px; + background-color: #990000; + color: #FFF; +} + +div.suggestions div.current { + background-color: #3366cc; + color: #FFF; +} +/* End Auto Complete Suggestions */ + + +/* Nifty Corners Crap */ +.rtop,.artop{display:block} +.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px} +.artop *{border-style: solid;border-width:0 1px} +.r1,.rl1,.re1,.rel1{margin-left:5px} +.r1,.rr1,.re1,.rer1{margin-right:5px} +.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px} +.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px} +.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px} +.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px} +.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px} +.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px} +.rx1,.rxl1{border-left-width:5px} +.rx1,.rxr1{border-right-width:5px} +.rx2,.rxl2{border-left-width:3px} +.rx2,.rxr2{border-right-width:3px} +.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px} +.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px} +.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0} +.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0} +.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px} +.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} +/* End Nifty Corners Crap */ + + + +/* CSS for Dynamic Log Viewer */ +/* Author: Erik Kristensen */ +div#log div.log-entry { + clear: both; +} + +div#log div.log-entry span, +div#log div.log-header span { + padding: 3px 2px 3px 2px; + padding-left: 8px; +} + +div#log div.log-entry span.log-action { + padding-bottom: 6px; + padding-left: 5px; + padding-right: 5px; +} + +div#log div.log-header span { + border-top: 1px solid #999; + background-color: #bbb; + font-weight: bold; + text-align: left; +} + +div#log span.log-action, +div#log span.log-time, +div#log span.log-interface, +div#log span.log-source, +div#log span.log-destination, +div#log span.log-protocol { + float: left; + text-align: left; + border-left: 1px solid #999; + border-bottom: 1px solid #999; +} + +div#log span.log-general { + +} + +div#log span.log-protocol { + border-right: 1px solid #999; +} + +div#log span.log-action { + width: 2em; + text-align: center; +} + +div#log span.log-time { + width: 12.5em; +} + +div#log span.log-interface { + width: 5em; +} + +div#log span.log-source, +div#log span.log-destination { + width: 17.6em; +} + +div#log span.log-protocol { + width: 5.5em; +} +/* END CSS FOR DYNAMIC LOG VIEWER */ + +#login { + background: #cccccc; + border: 0px solid #666666; + margin: 5em auto; + padding: 0em; + width: 340px; +} + +#login h1 { + background: url(images/misc/logon.png) no-repeat top left; + margin-top: 0; + display: block; + text-indent: -1000px; + height: 50px; + border-bottom: none; +} + +#login p { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login span { + font-size: 1em; + font-weight: bold; + width: 20%; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login p#text { + font-size: 1em; + font-weight: normal; + padding: 3px; + margin: 0em; + text-indent: 10px; +} + +#login #username, #password { + font-size: 1em; + width: 60%; + padding: 3px; + margin: 0em; +} + +#login #submit { + font-size: 1em; + font-weight: bold; + padding: 3px; + margin: 0em; + text-indent: 10px; +} diff --git a/usr/local/www/tree-images/empty.gif b/usr/local/www/tree-images/empty.gif new file mode 100755 index 0000000000000000000000000000000000000000..b501ceb98d62fa3437e04837f4937247a31bed43 GIT binary patch literal 837 zcmZ?wbhEHb6lM@%C}&_${K>+|00cT90wmTB@~+@+|00cT90wmTB<}&>M{~shW3PwX&OBpz-TU{vYx`1s&RmjtWY9gU63$9vfHo0e!4sT`T4CcVgKXTj2g4Gh)* D=<^*B literal 0 HcmV?d00001 diff --git a/usr/local/www/tree-images/joinbottom.gif b/usr/local/www/tree-images/joinbottom.gif new file mode 100755 index 0000000000000000000000000000000000000000..8552b66bcb1fd0720d3a75fbd9b3e550801b86ec GIT binary patch literal 850 zcmZ?wbhEHb6lM@%C}&_${K>+|00cT90wmTB<}&>M{~shW3PwX&OBpz-TU{vYx`1s&RmjtWY9gU63$9oi+|00cT90wmTB<}&>M{~shW3PwX&OBpz-TU{vYx`1s&Rmjr9vnTSH=;~jGLc08Js6i-g#@)zUbV6X-NX*L+u literal 0 HcmV?d00001 diff --git a/usr/local/www/tree-images/minus_.gif b/usr/local/www/tree-images/minus_.gif new file mode 100755 index 0000000000000000000000000000000000000000..7c3a1439d9918cd42d3146fb309e408111030096 GIT binary patch literal 913 zcmZ?wbhEHb6lM@%C}&_${K>+|00cT90wmTB<}&>I_wWDz|6jj;ef;?Gr%#`L{P=O@ z%9Wo#e?EEg#gWSa7hJLs%>3#D>I!3Q zNi3YKS_vl-7A7BJ;O2@^xbUEXVKN7^MhA!DfrdT{#wS;P9&lh{WM+|00cT90wmTB<}&>I_wWDz|6jj;ef;?Gr%#`L{P=O@ z%9Wo#e?EEg#gWSa7hBkxwh;gh1lqb{=MrITnUWOf1|YJ_{Ta z9v)&4R1sOxpxDgX&&8~xQPAkn%*+%Z$Fm?osfB@A=oQO`$+|00cT90wmTB9^eS6{%UX+817` z@7vSA`DxF(`{yqI|Mu&DdhWbGfB)BZZkw|I)3Ia6{{8!R`}z0Gf<^gNYl>>tl{9Q> zUwP-^%l{{z{NKKP`|H=Qw{6?@^6UT7ip38<{J;J7KM;VtGYUpSfb*-O z!NF#Z_&X6NKD6;NGV&F16e%<`^YiN6Sio@cL7Rl5la_?S;bSZUOgxJ$6p9+!1vESWN50Og1Jto|Culd$eHT6a}{BwhN?=3O2c1 zZR9V>Vr^1(=i`WHop(ZN>Y7M4<4a5h3m5A4ZQ>EyFd_P29?ND+|00cT90wmTB<}&>I_wVP=pa1{=fAZwXl`B{7-o5+y z@#BvlKYsoC_3z)mzkmO}diCnJZ{J?Ne0lHQy$>Hgym|BH)2B~gzI^%dt0gh}2Mh+Q|4GRu7a|mn2oY;_fkU>D%Ekq&#n5db=coqmWJaT1Z zWYd^&!7!1bhs8;4LV(ai&rU|Jk~y3WX}*l21~D5N9ypwCW|Xk#5MW?rVYcUG3z+c0 bv5}cgN~M;gc+uh25u3B_o+?dnV6X-N;lE@N literal 0 HcmV?d00001 diff --git a/usr/local/www/tree-images/plus_up.gif b/usr/local/www/tree-images/plus_up.gif new file mode 100755 index 0000000000000000000000000000000000000000..d095e07c4ff18a35ec79d2d2b9a6c62acc684159 GIT binary patch literal 913 zcmZ?wbhEHb6lM@%C}&_${K>+|00cT90wmTB<}&>I_wVP=pa1{=fAZwXl`B{7-o5+y z@#BvlKYsoC_3z)mzkmO}diCnJZ{J?Ne0lHQy$>Hgym|BH)2B~gzI^%dt0ggNdMh+Q|4GRu7GV*D~oDfJn+|I-7F~`F25fc*=i;jeY;=@A> z609r|3lf^#TN#anBxX7sI@zqL$)+)3gBrtZbJmap1qYd$nDu$t5*{cxF|Y{mu;@xS fI5x4f@=0WDn6kj9OJH->-BVjvUvFb%WUvMR7;$8z literal 0 HcmV?d00001 diff --git a/usr/local/www/tree-images/plus_updown.gif b/usr/local/www/tree-images/plus_updown.gif new file mode 100755 index 0000000000000000000000000000000000000000..afc17531b6622dd35ca70c5dd1b1cd1c79b2fc05 GIT binary patch literal 915 zcmZ?wbhEHb6lM@%C}&_${K>+|00cT90wmTB<}&>I_wVP=pa1{=fAZwXl`B{7-o5+y z@#BvlKYsoC_3z)mzkmO}diCnJZ{J?Ne0lHQy$>Hgym|BH)2B~gzI^%dt0geI&Mh+Q|4GRu7GV*D~oDfJn+|I-7F~`F25fc*=i;jeY;=@A> z609r|3lf^#TN#anBxX7sI@zqL$)+)3gBrtZbJmap1qYd$nDu$t5*{cxF|Y{mu;@xS hI5x4f@=0WDn6kj9OJFnC)l;R}*VmgXvav8&0|47lWJdr1 literal 0 HcmV?d00001 diff --git a/usr/local/www/tree-images/zone.gif b/usr/local/www/tree-images/zone.gif new file mode 100755 index 0000000000000000000000000000000000000000..f49d6472a680c24e1c3ebf109e38f2d994da8a14 GIT binary patch literal 318 zcmV-E0m1%9Nk%w1VGsZi0K@h7K5F$^;owgTo6Ra_a2RVZnl$ z4<~Gppwg$$nh_&R;PBCB0|Y+_LWqd+f`+FE5Y#-$b>agJ85$(eN-!mc4<9_BRhuC} zf|?8-OpqBfg9i!;3e^0WGNpqG9q{H|KyZPApA39LbX%Z+0XlQ~&?~ literal 0 HcmV?d00001 diff --git a/usr/local/www/tree/i-bottom.gif b/usr/local/www/tree/i-bottom.gif new file mode 100755 index 0000000000000000000000000000000000000000..f07fa991db7a3ae02ffa947e43f27484a28aa601 GIT binary patch literal 125 zcmZ?wbhEHb6ksr7*vtR|4Pe{=rW$~}hK2(N4m310{0EBvXZR1MfHaT=1d2ad7#SFN z8FYY>3?MTYShO~r^jy8y;`Q0x{}VL&QZnadtXh{-yyX)2Y2CB8wAa1T?Ej^{z%xQ= JQjH*kH2_BKFBbp+ literal 0 HcmV?d00001 diff --git a/usr/local/www/tree/i-repeater.gif b/usr/local/www/tree/i-repeater.gif new file mode 100755 index 0000000000000000000000000000000000000000..d5ab0890b4e115b24782b8d9358a6bc764d25ec1 GIT binary patch literal 91 zcmZ?wbhEHb6kuRt*vtR|4Pe{=rW$~}hK2(N4m310{0EBvXZR1MfHaT=1d2ad7#SFN Z8FYY>3?MTYSU5JEyveuM;xq??H2~bg9D4u& literal 0 HcmV?d00001 diff --git a/usr/local/www/tree/index.html b/usr/local/www/tree/index.html new file mode 100644 index 000000000..f2c45d4e6 --- /dev/null +++ b/usr/local/www/tree/index.html @@ -0,0 +1,228 @@ + + + + + SilverStripe Tree Control + + + + + + + +

                            SilverStripe Tree Control

                            +

                            This tree control was put together by Sam Minnée at + SilverStripe in New Zealand. We've put it out there + for everyone to enjoy. Check out our blog if you're + wondering what we're up to.

                            +

                            This file came from http://www.silverstripe.com/downloads/tree/. + If you found this file elsewhere, check out that page: we might have posted an updated version.

                            + +

                            + Quick-links: + Demo | Usage | Download | How it Works +

                            + +

                            Demo

                            +

                            Here's a basic demo of the tree control. Our styling is fairly basic, but with updated CSS and + images you can do whatever you like. Just for fun, try changing the text size.

                            + + + +

                            Download

                            + +

                            Download everything you need here - tree.zip, 11kb

                            + +

                            Usage

                            + +

                            The first thing to do is include the appropriate JavaScript and CSS files:

                            + + + <link rel="stylesheet" type="text/css" media="all" href="tree.css" />
                            + <script type="text/javascript" src="tree.js"></script> +
                            + +

                            Then, create the HTML for you tree. This is basically a nested set of bullet pointed links. The + "tree" class at the top is what the script will look for. Note that you can make a tree ndoe closed + to begin with by adding class="closed".

                            + +

                            Here's the HTML code that I inserted to create the demo tree above.

                            + + + <ul class="tree">
                            + <li><a href="#">item 1</a>
                            + <ul>
                            + <li><a href="#">item 1.1</a></li>
                            + <li class="closed"><a href="#">item 1.2</a>
                            + <ul>
                            + <li><a href="#">item 1.2.1</a></li>
                            + <li><a href="#">item 1.2.2</a></li>
                            + <li><a href="#">item 1.2.3</a></li>
                            + </ul>
                            + </li>
                            + <li><a href="#">item 1.3</a></li>
                            + </ul>
                            + </li>
                            + <li><a href="#">item 2</a>
                            + <ul>
                            + <li><a href="#">item 2.1</a></li>
                            + <li><a href="#">item 2.2</a></li>
                            + <li><a href="#">item 2.3</a></li>
                            + </ul>
                            + </li>
                            + </ul> +
                            + +

                            Your tree is now complete!

                            + +

                            How it works

                            +
                            +
                            Starting the script
                            +
                            In simple situations, creating an auto-loading script is a simple matter of setting window.onload + to a function. But what if there's more than one script? To this end, we created an appendLoader() + function that will execute multiple loader functions, including a previously defined loader function
                            + +
                            Finding the tree content
                            +
                            Rather than write a piece of script to define we're your tree is, we've tried to make the script + as automatic as possible - it finds all ULs with a class name containing "tree".
                            + +
                            Augmenting the HTML
                            +
                            Unfortunately, an LI containing an A isn't sufficient for doing all of the necessary tree styling. + Rather than force people to put non-semantic HTML into their file, the script generates extra <span> tags. + So, the following HTML: + + + <li><a href="#">My item</a></li> + + + Is turned into the more ungainly, and yet more easily styled: + + + <li><span class="a"><span class="b"><span class="c"><a href="#">My item</a></span></span></span></li> + + + Additionally, some helper classes are applied to the <li> and <span class="a"> elements: +
                              +
                            • "last" is applied to the last node of any subtree.
                            • +
                            • "children" is applied to any node that has children.
                            • +
                            +
                            + +
                            Styling it up
                            +
                            Why the heck do we need 5 styling elements? Basically, because there are 5 background-images to apply: +
                              +
                            • li: A repeating vertical line is shown. Nested <li> tags + give us the multiple vertical lines that we need.
                            • +
                            • span.a: We overlay the vertical line with 'L' and 'T' elements as needed.
                            • +
                            • span.b: We overlay '+' or '-' signs on nodes with children.
                            • +
                            • span.c: This is needed to fix up the vertical line.
                            • +
                            • a: Finally, we apply the page icon.
                            • +
                            +
                            + +
                            Opening / closing nodes
                            +
                            Having come this far, the "dynamic" aspect of the tree control is very trivial. We set a "closed" + class on the <li> and <span class="a"> elements, and our CSS takes care of hiding the + children, changing the - to a + and changing the folder icon.
                            +
                            + + + + diff --git a/usr/local/www/tree/l.gif b/usr/local/www/tree/l.gif new file mode 100755 index 0000000000000000000000000000000000000000..1e8c7079ee35efd7d8237f2acb47fee6fdffd287 GIT binary patch literal 131 zcmZ?wbhEHb6ksr7*vtR|4Pe{=rW$~}hK2(N4m310{0EBvXZR1MfHaT=1d2ad7#SFN z8FYY>3?MTYSPV9t^jtml`Kwyv|FhZqrg%(x#<@)E__kZz(Vt>&#rK+9o&CReZh?o6 PRR4)3MJIE_lo_l6YnU3?MTYSnM~P^jy8y;`Q0x{}VL&QZnbQC|h&;*Pb_}drWk$e@Q%B5%;kn;ey-4 guX4NY8?Jm~Sbr=c?W<4Z`WtJ?PQR_%D9B(905feqivR!s literal 0 HcmV?d00001 diff --git a/usr/local/www/tree/page-file.png b/usr/local/www/tree/page-file.png new file mode 100755 index 0000000000000000000000000000000000000000..d3bb119a105bbc467d789c65e80db6aff4d79a6a GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDUW%&QUzP>&nAmIG@^A8?8 z`2YX^hYufs#Qgd54Gat#8XABKk->~LQj36m#*!evUeU#lkKsM~`xx@hERJxO8_x&m<8IW(|h4 pmZgr8dU^qEh8ztNUI_;n*cmSB$O*g+P7YvEuLNc|Np+i!ouUnk5An*b<(6s_4V~P zZk)8Tvf6Zc`GqG(j@{q=>eUfFeLWr?o@*~oop`W!!ql3G%m{yfe_ub}jb}FQzqRGi z)h%=8&Uy3Y&F$CcHeKH2?dQF7=gxim_N`jA>gJtGm+oI^X=%Cg?D+8;d#B8vJnzK3 z>yNLlI6H6OvAs9$pSpDO%)-43R-9dtTbg_9`mQBM7oR%4?byi;rPU?#_D=uu^GkAm z^0^zQHXL7g{{HbNPmTt}xJ_R$<;aaga}Lb9@%V;ItjndVXD(hj>FMhkmlJpS>e)Rv z_N-mI);rPr&!7D>X3q#t3wDopKX(7vm22nrUS3yKQ?>NqybDh*WaP$Ox^Z^OmMPCZ z+_?4XR`r5PE-tR4$9F3!DP4SW)IY`l+P(9E;eLhXg{IC%TTgC$^8U%rOIvQdJagsV z*(2xoK6rb%x+QJ@sXcpcY^<%T%_z#y)ziIngbePpGC+EgffARG6j)v>0bz43bnXTpB SCZzhyK#|FRatk9PgEatHi&FXk literal 0 HcmV?d00001 diff --git a/usr/local/www/tree/page-file_x.gif b/usr/local/www/tree/page-file_x.gif new file mode 100755 index 0000000000000000000000000000000000000000..504f06e29cb2cef3d4cd90983053f19bd434a480 GIT binary patch literal 630 zcmV-+0*U=cNk%w1VGsZi0Oo!GDJdzVqoYz%Qr_Oj&aI;;B_+s|i^Ha$4h{~KK|!KU zPRpQ|ITsgdVPR})YFj8M%%Pamte0n2R?D-bWm!+pw5RCk#MG;uiFI?aUtZI^uhhG( z#D|BxV`J0DzOi_9LOnglj)lQ{bI`l5yN-xrLqpchzuwlyN-HM5iGSG8!^)VB%b=jo zuB3&2era4=xqyGm$+^z0t&oOrw`*tP(zeE_r^>9NUpF^pP*B|5$Ejmt$)b#hgoI%| zJ+NI}LqI^yq?;QX8(JhJLpwXdq@Kf%+fpZsOO$(YUy}b#iQMY-CDG z)6T_9LO(V(HiC3>*3reprlrJ(f61t$l|w_Sm6gz@kUJU~LqbBXaAd8Mk;s&k)yvDH zP*A#_oM>BH(7Um`f_KrZpq)`ou&0>Nv8Ta&biZzB$CHbyU0KDgt<%E7(5atlWo5UU zm1$2wTr4cPd2YVGzR|d?)55pd)6;r-dezInZEbA;0000000000A^8LW004dfEC2ui z01yBW000NmfPPMVgoTBEh=~q)jE#&vT#1NrV0)IAdoFuGk_~ToprLpm1*M5&On0iP zZg*KzFGPtFG6c3QRcSV2UKmk{IV=kc5J7NPMF$6R6p2q?1_moe7dK=Y8xu20h$S3W zFd-yn9szbIOECdDem+PdY9DMB0SEwgR00SAemF{NJDQ{zp{GwD00Io^@pGiZj|?=* zL{L%CU>`jL{LoRLAWWM&T53R%Vo-=33w|CXNPy)`7ak@OTD<3H2m=ONP|QKYM`1+) Qk|fyyfN_AHdw~D|JN_#hH2?qr literal 0 HcmV?d00001 diff --git a/usr/local/www/tree/page-foldericon.png b/usr/local/www/tree/page-foldericon.png new file mode 100755 index 0000000000000000000000000000000000000000..d26f2dc9a7403e4f0d001527b29d8220f72285c6 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDUW%&Oe$ecf);r#i8|Nqbb zKR^Hf|M?$2eE1I*2TGv<1(UCPfkKQWL4Lsu4$p3+0XYGlE{-7;w~`YYnAKEO84aBG z9z83dlaP~>vt-GV0|%ZkF*!J@Z8uTyXf--?NJz0KWQ9jWghb0kE>T9V7N)B^n0~HY k*p|TD$dIu^fyE$!fnm`dad%Mzopr0I4HF-T(jq literal 0 HcmV?d00001 diff --git a/usr/local/www/tree/page-openfoldericon.png b/usr/local/www/tree/page-openfoldericon.png new file mode 100755 index 0000000000000000000000000000000000000000..8d00c394b31e067826deffb31484a6fd3dcfadb7 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDUW%&Oe$ecePNdNzTe*XXe z^Ut480E*xOm%YyS0p%D=g8YIR9G=}s19BogT^vIyZl#_%$lGAR;SgBT99Nb1l1<2* zL7n0Kj2-{EgtGSh@L$iu^Fq$!iz%x6E?-vZmO5$M=R+ no4)@DX!)u2VIJ$WNe9=n&p#q8-_JC=733OES3j3^P63?MTYSe!PT^jy8y;`Q0x{}VL&QZnbQC|h&;*Pb_}drWjLGt@>H$Gx8-mte7l jHQQ45eEOO%S^Ns`B~PzevT{w?>93?MTYSgbaj^jtml`Kwyv|FhZqrg%(x#<@)E__kZz(Vt>&#rK+9o&CRQp09=S ap&s2OUX@9U$`mtvZY}(^X1g~FgEatz7&jsS literal 0 HcmV?d00001 diff --git a/usr/local/www/tree/tree.css b/usr/local/www/tree/tree.css new file mode 100644 index 000000000..31b79796b --- /dev/null +++ b/usr/local/www/tree/tree.css @@ -0,0 +1,136 @@ +/* + * CSS for Standard tree layout + * Copyright (C) 2005 SilverStripe Limited + * Feel free to use this on your websites, but please leave this message in the fies + * http://www.silverstripe.com/blog + */ + +ul.tree{ + width: auto; + padding-left : 0px; + margin-left : 0px; +} + +ul.tree img{ + border : none; +} + + +ul.tree, ul.tree ul { + padding-left: 0; +} + +ul.tree ul { + margin-left: 16px; + +} +ul.tree li.closed ul { + display: none; +} + + +ul.tree li { + list-style: none; + background: url(i-repeater.gif) 0 0 repeat-y; + display: block; + width: auto; + /* background-color:#FFFFFF; */ +} + + + +ul.tree li.last { + list-style: none; + background-image: none; +} + + + +/* Span-A: I/L/I glpyhs */ +ul.tree span.a { + background: url(t.gif) 0 50% no-repeat; + display: block; +} +ul.tree span.a.last { + background: url(l.gif) 0 50% no-repeat; +} + +/* Span-B: Plus/Minus icon */ +ul.tree span.b { +} +ul.tree span.a.children span.b { + background: url(minus.gif) 0 50% no-repeat; + cursor: pointer; +} +ul.tree li.closed span.a.children span.b { + background: url(plus.gif) 0 50% no-repeat; + cursor: pointer; +} + +/* Span-C: Spacing and extending tree line below the icon */ +ul.tree span.c { + margin-left: 16px; +} +ul.tree span.a.children span.c { + background: url(i-bottom.gif) 0 50% no-repeat; +} +ul.tree span.a.spanClosed span.c { + background-image: none; +} + + +/* Anchor tag: Page icon */ +ul.tree a { + white-space: nowrap; + overflow: hidden; + +/* padding: 10px 0px 10px 18px; */ + padding: 3px 0px 3px 18px; + line-height: 16px; + +/* background: url(page-file.png) 0 50% no-repeat; */ + background: url(page-file.png) 0 0 no-repeat; +} +ul.tree span.a.children a { + background-image: url(page-openfoldericon.png); +} +ul.tree span.a.children.spanClosed a { + background-image: url(page-foldericon.png); +} + +/* Unformatted tree */ +ul.tree.unformatted li { + background-image: none; + padding-left: 16px; +} +ul.tree.unformatted li li { + background-image: none; + padding-left: 0px; +} + +/* + * Divs, by default store vertically aligned data + */ + +ul.tree li div { + float: right; + clear: right; + height: 1em; + margin-top: -26px; +} +/* As inside DIVs should be treated normally */ +ul.tree div a { + padding: 0; + background-image: none; + min-height: auto; + height: auto; +} + +ul.tree li A:link, ul.tree li A:hover, ul.tree li A:visited { + color : #111111; +} + + +ul.tree li .over{ + background-color : pink; +} diff --git a/usr/local/www/tree/tree.js b/usr/local/www/tree/tree.js new file mode 100644 index 000000000..8e9651e9c --- /dev/null +++ b/usr/local/www/tree/tree.js @@ -0,0 +1,195 @@ +/* + * Content-separated javascript tree widget + * Copyright (C) 2005 SilverStripe Limited + * Feel free to use this on your websites, but please leave this message in the fies + * http://www.silverstripe.com/blog +*/ + +/* + * Initialise all trees identified by
                              + */ +function autoInit_trees() { + var candidates = document.getElementsByTagName('ul'); + for(var i=0;i startingPoint) li.insertBefore(spanA, li.childNodes[startingPoint]); + else li.appendChild(spanA); + + // Process the children + if(childUL != null) { + if(initTree(childUL)) { + addClass(li, 'children', 'closed'); + addClass(spanA, 'children', 'spanClosed'); + } + } + } + } + + if(li) { + // li and spanA will still be set to the last item + + addClass(li, 'last', 'closed'); + addClass(spanA, 'last', 'spanClosed'); + return true; + } else { + return false; + } + +} + + +/* + * +/- toggle the tree, where el is the node + * force, will force it to "open" or "close" + */ +function treeToggle(el, force) { + el = this; + + while(el != null && (!el.tagName || el.tagName.toLowerCase() != "li")) el = el.parentNode; + + // Get UL within the LI + var childSet = findChildWithTag(el, 'ul'); + var topSpan = findChildWithTag(el, 'span'); + + if( force != null ){ + + if( force == "open"){ + treeOpen( topSpan, el ); + } + else if( force == "close" ){ + treeClose( topSpan, el ); + } + + } + + else if( childSet != null) { + // Is open, close it + if(!el.className.match(/(^| )closed($| )/)) { + treeClose( topSpan, el ); + // Is closed, open it + } else { + treeOpen( topSpan, el ); + } + } +} + + +function treeOpen( a, b ){ + removeClass(a,'spanClosed'); + removeClass(b,'closed'); +} + + +function treeClose( a, b ){ + addClass(a,'spanClosed'); + addClass(b,'closed'); +} + +/* + * Find the a child of el of type tag + */ +function findChildWithTag(el, tag) { + for(var i=0;i. + 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. +*/ + +##|+PRIV +##|*IDENT=page-hidden-uploadconfiguration +##|*NAME=Hidden: Upload Configuration page +##|*DESCR=Allow access to the 'Hidden: Upload Configuration' page. +##|*MATCH=uploadconfig.php* +##|-PRIV + + +require("guiconfig.inc"); + +header("Content-Type: text/plain"); + +/* get config.xml in POST variable "config" */ +if ($_POST['config']) { + $fd = @fopen("{$g['tmp_path']}/config.xml", "w"); + if (!$fd) { + echo gettext("ERR Could not save configuration.")."\n"; + exit(0); + } + fwrite($fd, $_POST['config']); + fclose($fd); + if (config_install("{$g['tmp_path']}/config.xml") == 0) { + echo gettext("OK")."\n"; + system_reboot(); + } else { + echo gettext("ERR Could not install configuration.")."\n"; + } +} else { + echo gettext("ERR Invalid configuration received.")."\n"; +} + +exit(0); +?> diff --git a/usr/local/www/vpn_ipsec.php b/usr/local/www/vpn_ipsec.php new file mode 100644 index 000000000..17e0e0d9d --- /dev/null +++ b/usr/local/www/vpn_ipsec.php @@ -0,0 +1,664 @@ +. + Copyright (C) 2008 Shrew Soft Inc + 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. +*/ + +##|+PRIV +##|*IDENT=page-vpn-ipsec +##|*NAME=VPN: IPsec page +##|*DESCR=Allow access to the 'VPN: IPsec' page. +##|*MATCH=vpn_ipsec.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); + +if (!is_array($config['ipsec']['phase1'])) + $config['ipsec']['phase1'] = array(); + +if (!is_array($config['ipsec']['phase2'])) + $config['ipsec']['phase2'] = array(); + +$a_phase1 = &$config['ipsec']['phase1']; +$a_phase2 = &$config['ipsec']['phase2']; + +$pconfig['enable'] = isset($config['ipsec']['enable']); + +if ($_POST) { + if ($_POST['apply']) { + $retval = 0; + $retval = vpn_ipsec_configure(); + /* reload the filter in the background */ + filter_configure(); + $savemsg = get_std_save_message($retval); + if ($retval >= 0) { + if (is_subsystem_dirty('ipsec')) + clear_subsystem_dirty('ipsec'); + } + } else if ($_POST['submit']) { + $pconfig = $_POST; + + $config['ipsec']['enable'] = $_POST['enable'] ? true : false; + + write_config(); + + $retval = vpn_ipsec_configure(); + } else if (isset($_POST['del_x'])) { + /* delete selected p1 entries */ + if (is_array($_POST['p1entry']) && count($_POST['p1entry'])) { + foreach ($_POST['p1entry'] as $p1entrydel) { + unset($a_phase1[$p1entrydel]); + } + if (write_config()) + mark_subsystem_dirty('ipsec'); + } + } else if (isset($_POST['delp2_x'])) { + /* delete selected p2 entries */ + if (is_array($_POST['p2entry']) && count($_POST['p2entry'])) { + foreach ($_POST['p2entry'] as $p2entrydel) { + unset($a_phase2[$p2entrydel]); + } + if (write_config()) + mark_subsystem_dirty('ipsec'); + } + } else { + /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */ + unset($delbtn, $delbtnp2, $movebtn, $movebtnp2, $togglebtn, $togglebtnp2); + foreach ($_POST as $pn => $pd) { + if (preg_match("/del_(\d+)_x/", $pn, $matches)) { + $delbtn = $matches[1]; + } else if (preg_match("/delp2_(\d+)_x/", $pn, $matches)) { + $delbtnp2 = $matches[1]; + } else if (preg_match("/move_(\d+)_x/", $pn, $matches)) { + $movebtn = $matches[1]; + } else if (preg_match("/movep2_(\d+)_x/", $pn, $matches)) { + $movebtnp2 = $matches[1]; + } else if (preg_match("/toggle_(\d+)_x/", $pn, $matches)) { + $togglebtn = $matches[1]; + } else if (preg_match("/togglep2_(\d+)_x/", $pn, $matches)) { + $togglebtnp2 = $matches[1]; + } + } + + $save = 1; + + /* move selected p1 entries before this */ + if (isset($movebtn) && is_array($_POST['p1entry']) && count($_POST['p1entry'])) { + $a_phase1_new = array(); + + /* copy all p1 entries < $movebtn and not selected */ + for ($i = 0; $i < $movebtn; $i++) { + if (!in_array($i, $_POST['p1entry'])) + $a_phase1_new[] = $a_phase1[$i]; + } + + /* copy all selected p1 entries */ + for ($i = 0; $i < count($a_phase1); $i++) { + if ($i == $movebtn) + continue; + if (in_array($i, $_POST['p1entry'])) + $a_phase1_new[] = $a_phase1[$i]; + } + + /* copy $movebtn p1 entry */ + if ($movebtn < count($a_phase1)) + $a_phase1_new[] = $a_phase1[$movebtn]; + + /* copy all p1 entries > $movebtn and not selected */ + for ($i = $movebtn+1; $i < count($a_phase1); $i++) { + if (!in_array($i, $_POST['p1entry'])) + $a_phase1_new[] = $a_phase1[$i]; + } + if (count($a_phase1_new) > 0) + $a_phase1 = $a_phase1_new; + + } else if (isset($movebtnp2) && is_array($_POST['p2entry']) && count($_POST['p2entry'])) { + /* move selected p2 entries before this */ + $a_phase2_new = array(); + + /* copy all p2 entries < $movebtnp2 and not selected */ + for ($i = 0; $i < $movebtnp2; $i++) { + if (!in_array($i, $_POST['p2entry'])) + $a_phase2_new[] = $a_phase2[$i]; + } + + /* copy all selected p2 entries */ + for ($i = 0; $i < count($a_phase2); $i++) { + if ($i == $movebtnp2) + continue; + if (in_array($i, $_POST['p2entry'])) + $a_phase2_new[] = $a_phase2[$i]; + } + + /* copy $movebtnp2 p2 entry */ + if ($movebtnp2 < count($a_phase2)) + $a_phase2_new[] = $a_phase2[$movebtnp2]; + + /* copy all p2 entries > $movebtnp2 and not selected */ + for ($i = $movebtnp2+1; $i < count($a_phase2); $i++) { + if (!in_array($i, $_POST['p2entry'])) + $a_phase2_new[] = $a_phase2[$i]; + } + if (count($a_phase2_new) > 0) + $a_phase2 = $a_phase2_new; + + } else if (isset($togglebtn)) { + if (isset($a_phase1[$togglebtn]['disabled'])) + unset($a_phase1[$togglebtn]['disabled']); + else + $a_phase1[$togglebtn]['disabled'] = true; + + } else if (isset($togglebtnp2)) { + if (isset($a_phase2[$togglebtnp2]['disabled'])) + unset($a_phase2[$togglebtnp2]['disabled']); + else + $a_phase2[$togglebtnp2]['disabled'] = true; + + } else if (isset($delbtn)) { + /* remove static route if interface is not WAN */ + if ($a_phase1[$delbtn]['interface'] <> "wan") + mwexec("/sbin/route delete -host {$a_phase1[$delbtn]['remote-gateway']}"); + + /* remove all phase2 entries that match the ikeid */ + $ikeid = $a_phase1[$delbtn]['ikeid']; + foreach ($a_phase2 as $p2index => $ph2tmp) + if ($ph2tmp['ikeid'] == $ikeid) { + unset($a_phase2[$p2index]); + } + + unset($a_phase1[$delbtn]); + + } else if (isset($delbtnp2)) { + unset($a_phase2[$delbtnp2]); + + } else + $save = 0; + + if ($save === 1) { + if (write_config()) + mark_subsystem_dirty('ipsec'); + } + } +} + +$pgtitle = array(gettext("VPN"),gettext("IPsec")); +$shortcut_section = "ipsec"; + +include("head.inc"); + +?> + + + +
                              + +" . gettext("You must apply the changes in order for them to take effect.")); +?> + + + + + + + +
                              + +
                              +
                              + + + + + + + +
                              + + + + + +
                              + /> + + +
                              +
                              + " /> +
                              + + + + + + + + + + + + +"; + $spane = ""; + $iconfn .= "_d"; + } +?> + + + + + + + + + + + + + + + + + + + + + + + + +
                                 +
                              + + + " + type="image" style="height:11;width:11;border:0" /> + + + + + + + $carpip) + $iflabels[$cif] = $carpip." (".get_vip_descr($carpip).")"; + + $aliaslist = get_configured_ip_aliases_list(); + foreach ($aliaslist as $aliasip => $aliasif) + $iflabels[$aliasip] = $aliasip." (".get_vip_descr($aliasip).")"; + + $grouplist = return_gateway_groups_array(); + foreach ($grouplist as $name => $group) { + if($group[0]['vip'] <> "") + $vipif = $group[0]['vip']; + else + $vipif = $group[0]['int']; + $iflabels[$name] = "GW Group {$name}"; + } + $if = htmlspecialchars($iflabels[$ph1ent['interface']]); + } + else + $if = "WAN"; + + if (!isset($ph1ent['mobile'])) + echo $if."
                              ".$ph1ent['remote-gateway']; + else + echo $if."
                              " . gettext("Mobile Client") . ""; +?> + +
                              + + + + + + + + + + + + + + +   + + + + + + + + + + + +
                              + " + type="image" style="height:17;width:17;border:0" /> + + + " width="17" height="17" border="0" alt="edit" /> + +
                              + " + type="image" style="height:17;width:17;border:0" + onclick="return confirm('')" /> + + + + " width="17" height="17" border="0" alt="add" /> + + +
                              +
                                 + + +
                              > + + - +
                              +
                              > + + + + + + + + + + + + + $ph2ent): + if ($ph2ent['ikeid'] != $ph1ent['ikeid']) + continue; + + $fr_c = $fr_prefix . "c" . $j; + $fr_d = $fr_prefix . "d" . $j; + + $iconfn = "pass"; + $spans = $spane = ""; + if (isset($ph2ent['disabled'])) { + $spans = ""; + $spane = ""; + $iconfn .= "_d"; + } +?> + + + + + + + + "; + endif; +?> + + + + + + + + + + +
                                 
                              + + + " + type="image" style="height:11;width:11;border:0" /> + + + + + + + + + + + + +   + + + + + + $ph2ea) { + if ($k) + echo ", "; + echo $p2_ealgos[$ph2ea['name']]['name']; + if ($ph2ea['keylen']) { + if ($ph2ea['keylen']=="auto") + echo " (" . gettext("auto") . ")"; + else + echo " ({$ph2ea['keylen']} " . gettext("bits") . ")"; + } + } +?> + + + + $ph2ha) { + if ($k) + echo ", "; + echo $p2_halgos[$ph2ha]; + } + } +?> + + + " + type="image" style="height:17;width:17;border:0" /> + + " width="17" height="17" border="0" alt="edit" /> + + " + type="image" style="height:17;width:17;border:0" + onclick="return confirm('')" /> + + " width="17" height="17" border="0" alt="add" /> + +
                              + + " border="0" alt="move" /> + + " /> + + "> + " width="17" height="17" border="0" alt="add" /> + + + " border="0" alt="delete" /> + + " onclick="return confirm('')" /> + +
                              +
                              +
                              + + + + + + + + +
                              + + " border="0" alt="move" /> + + " /> + + + + " alt="add" /> + +
                              + + " border="0" alt="delete" /> + + " onclick="return confirm('')" /> + +
                              +
                              +

                              + + + :
                              +
                              + .
                              + .
                              + . +
                              +

                              +
                              +
                              +
                              +
                              + + + + diff --git a/usr/local/www/vpn_ipsec_keys.php b/usr/local/www/vpn_ipsec_keys.php new file mode 100644 index 000000000..c9dbc569e --- /dev/null +++ b/usr/local/www/vpn_ipsec_keys.php @@ -0,0 +1,188 @@ +. + 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. +*/ + +##|+PRIV +##|*IDENT=page-vpn-ipsec-listkeys +##|*NAME=VPN: IPsec: Pre-Shared Keys List +##|*DESCR=Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page. +##|*MATCH=vpn_ipsec_keys.php* +##|-PRIV + +require("functions.inc"); +require("guiconfig.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); +require_once("filter.inc"); + +if (!is_array($config['ipsec']['mobilekey'])) { + $config['ipsec']['mobilekey'] = array(); +} +ipsec_mobilekey_sort(); +$a_secret = &$config['ipsec']['mobilekey']; + +$userkeys = array(); +foreach ($config['system']['user'] as $id => $user) { + if (!empty($user['ipsecpsk'])) { + $userkeys[] = array('ident' => $user['name'], 'pre-shared-key' => $user['ipsecpsk'], 'id' => $id);; + } +} + +if (isset($_POST['apply'])) { + $retval = vpn_ipsec_configure(); + /* reload the filter in the background */ + filter_configure(); + $savemsg = get_std_save_message($retval); + if (is_subsystem_dirty('ipsec')) + clear_subsystem_dirty('ipsec'); +} + +if ($_GET['act'] == "del") { + if ($a_secret[$_GET['id']]) { + unset($a_secret[$_GET['id']]); + write_config(gettext("Deleted IPsec Pre-Shared Key")); + mark_subsystem_dirty('ipsec'); + header("Location: vpn_ipsec_keys.php"); + exit; + } +} + +$pgtitle = gettext("VPN: IPsec: Keys"); +$shortcut_section = "ipsec"; + +include("head.inc"); + +?> + + + +
                              +" . gettext("You must apply the changes in order for them to take effect.")); + +?> + + + + + + + + +
                              + +
                              + +
                              +

                              + + + :
                              +
                              + +
                              +

                              +
                              + + + + diff --git a/usr/local/www/vpn_ipsec_keys_edit.php b/usr/local/www/vpn_ipsec_keys_edit.php new file mode 100644 index 000000000..b1c24aa76 --- /dev/null +++ b/usr/local/www/vpn_ipsec_keys_edit.php @@ -0,0 +1,167 @@ +. + 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. +*/ + +##|+PRIV +##|*IDENT=page-vpn-ipsec-editkeys +##|*NAME=VPN: IPsec: Edit Pre-Shared Keys +##|*DESCR=Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page. +##|*MATCH=vpn_ipsec_keys_edit.php* +##|-PRIV + +require("functions.inc"); +require("guiconfig.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); + +if (!is_array($config['ipsec']['mobilekey'])) { + $config['ipsec']['mobilekey'] = array(); +} +ipsec_mobilekey_sort(); +$a_secret = &$config['ipsec']['mobilekey']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_secret[$id]) { + $pconfig['ident'] = $a_secret[$id]['ident']; + $pconfig['psk'] = $a_secret[$id]['pre-shared-key']; +} + +if ($_POST) { + $userids = array(); + foreach ($config['system']['user'] as $uid => $user) { + $userids[$user['name']] = $uid; + } + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + $reqdfields = explode(" ", "ident psk"); + $reqdfieldsn = array(gettext("Identifier"),gettext("Pre-Shared Key")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (preg_match("/[^a-zA-Z0-9@\.\-]/", $_POST['ident'])) + $input_errors[] = gettext("The identifier contains invalid characters."); + + if (array_key_exists($_POST['ident'], $userids)) + $input_errors[] = gettext("A user with this name already exists. Add the key to the user instead."); + unset($userids); + + if (!$input_errors && !(isset($id) && $a_secret[$id])) { + /* make sure there are no dupes */ + foreach ($a_secret as $secretent) { + if ($secretent['ident'] == $_POST['ident']) { + $input_errors[] = gettext("Another entry with the same identifier already exists."); + break; + } + } + } + + if (!$input_errors) { + + if (isset($id) && $a_secret[$id]) + $secretent = $a_secret[$id]; + + $secretent['ident'] = $_POST['ident']; + $secretent['pre-shared-key'] = $_POST['psk']; + $text = ""; + + if (isset($id) && $a_secret[$id]) { + $a_secret[$id] = $secretent; + $text = gettext("Edited"); + } else { + $a_secret[] = $secretent; + $text = gettext("Added"); + } + + write_config("{$text} IPsec Pre-Shared Keys"); + mark_subsystem_dirty('ipsec'); + + header("Location: vpn_ipsec_keys.php"); + exit; + } +} + +$pgtitle = gettext("VPN: IPsec: Edit Pre-Shared Key"); +$shortcut_section = "ipsec"; + +include("head.inc"); + +?> + + + + +
                              + + + + + + + + + + + + + + + + +
                              + +
                              +. +
                              + +
                                + " /> + + + +
                              +

                              + + + :
                              +
                              + +
                              +

                              +
                              +
                              + + + diff --git a/usr/local/www/vpn_ipsec_mobile.php b/usr/local/www/vpn_ipsec_mobile.php new file mode 100644 index 000000000..1fbb9e464 --- /dev/null +++ b/usr/local/www/vpn_ipsec_mobile.php @@ -0,0 +1,693 @@ += 0) + if (is_subsystem_dirty('ipsec')) + clear_subsystem_dirty('ipsec'); +} + +if ($_POST['submit']) { + + unset($input_errors); + $pconfig = $_POST; + + /* input consolidation */ + + + + /* input validation */ + + $reqdfields = explode(" ", "user_source group_source"); + $reqdfieldsn = array(gettext("User Authentication Source"),gettext("Group Authentication Source")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if ($pconfig['pool_enable']) + if (!is_ipaddr($pconfig['pool_address'])) + $input_errors[] = gettext("A valid IP address for 'Virtual Address Pool Network' must be specified."); + + if ($pconfig['dns_domain_enable']) + if (!is_domain($pconfig['dns_domain'])) + $input_errors[] = gettext("A valid value for 'DNS Default Domain' must be specified."); + + if ($pconfig['dns_split_enable']) { + if (!empty($pconfig['dns_split'])) { + $domain_array=preg_split("/[ ,]+/",$pconfig['dns_split']); + foreach ($domain_array as $curdomain) { + if (!is_domain($curdomain)) { + $input_errors[] = gettext("A valid split DNS domain list must be specified."); + break; + } + } + } + } + + if ($pconfig['dns_server_enable']) { + if (!$pconfig['dns_server1'] && !$pconfig['dns_server2'] && + !$pconfig['dns_server3'] && !$pconfig['dns_server4'] ) + $input_errors[] = gettext("At least one DNS server must be specified to enable the DNS Server option."); + if ($pconfig['dns_server1'] && !is_ipaddr($pconfig['dns_server1'])) + $input_errors[] = gettext("A valid IP address for 'DNS Server #1' must be specified."); + if ($pconfig['dns_server2'] && !is_ipaddr($pconfig['dns_server2'])) + $input_errors[] = gettext("A valid IP address for 'DNS Server #2' must be specified."); + if ($pconfig['dns_server3'] && !is_ipaddr($pconfig['dns_server3'])) + $input_errors[] = gettext("A valid IP address for 'DNS Server #3' must be specified."); + if ($pconfig['dns_server4'] && !is_ipaddr($pconfig['dns_server4'])) + $input_errors[] = gettext("A valid IP address for 'DNS Server #4' must be specified."); + } + + if ($pconfig['wins_server_enable']) { + if (!$pconfig['wins_server1'] && !$pconfig['wins_server2']) + $input_errors[] = gettext("At least one WINS server must be specified to enable the DNS Server option."); + if ($pconfig['wins_server1'] && !is_ipaddr($pconfig['wins_server1'])) + $input_errors[] = gettext("A valid IP address for 'WINS Server #1' must be specified."); + if ($pconfig['wins_server2'] && !is_ipaddr($pconfig['wins_server2'])) + $input_errors[] = gettext("A valid IP address for 'WINS Server #2' must be specified."); + } + + if ($pconfig['login_banner_enable']) + if (!strlen($pconfig['login_banner'])) + $input_errors[] = gettext("A valid value for 'Login Banner' must be specified."); + + if (!$input_errors) { + $client = array(); + + if ($pconfig['enable']) + $client['enable'] = true; + + if (!empty($pconfig['user_source'])) + $client['user_source'] = implode(",", $pconfig['user_source']); + $client['group_source'] = $pconfig['group_source']; + + if ($pconfig['pool_enable']) { + $client['pool_address'] = $pconfig['pool_address']; + $client['pool_netbits'] = $pconfig['pool_netbits']; + } + + if ($pconfig['net_list_enable']) + $client['net_list'] = true; + + if ($pconfig['save_passwd_enable']) + $client['save_passwd'] = true; + + if ($pconfig['dns_domain_enable']) + $client['dns_domain'] = $pconfig['dns_domain']; + + if ($pconfig['dns_split_enable']) + $client['dns_split'] = $pconfig['dns_split']; + + if ($pconfig['dns_server_enable']) { + $client['dns_server1'] = $pconfig['dns_server1']; + $client['dns_server2'] = $pconfig['dns_server2']; + $client['dns_server3'] = $pconfig['dns_server3']; + $client['dns_server4'] = $pconfig['dns_server4']; + } + + if ($pconfig['wins_server_enable']) { + $client['wins_server1'] = $pconfig['wins_server1']; + $client['wins_server2'] = $pconfig['wins_server2']; + } + + if ($pconfig['pfs_group_enable']) + $client['pfs_group'] = $pconfig['pfs_group']; + + if ($pconfig['login_banner_enable']) + $client['login_banner'] = $pconfig['login_banner']; + +// $echo "login banner = {$pconfig['login_banner']}"; + + $a_client = $client; + + write_config(); + mark_subsystem_dirty('ipsec'); + + header("Location: vpn_ipsec_mobile.php"); + exit; + } +} + +$pgtitle = array(gettext("VPN"),gettext("IPsec"),gettext("Mobile")); +$shortcut_section = "ipsec"; + +include("head.inc"); +?> + + + + + + +
                              + +" . gettext("You must apply the changes in order for them to take effect.")); + foreach ($a_phase1 as $ph1ent) + if (isset($ph1ent['mobile'])) + $ph1found = true; + if ($pconfig['enable'] && !$ph1found) + print_info_box_np(gettext("Support for IPsec Mobile clients is enabled but a Phase1 definition was not found") . ".
                              " . gettext("Please click Create to define one."),gettext("create"),gettext("Create Phase1")); + if ($input_errors) + print_input_errors($input_errors); +?> + + + + + + + + +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + + + + + +
                              + + /> + + +
                              +
                              + +
                              + :   + +
                              + :   + +
                              + +
                              + + + + + +
                              + + onclick="pool_change()" /> + +
                              +
                              + + + + +
                              + :  + + / + +
                              +
                              + + + + + +
                              + + /> + +
                              +
                              +
                              + + + + + +
                              + + /> + +
                              +
                              +
                              +
                              + + + + + +
                              + + onclick="dns_domain_change()" /> + +
                              +
                              + + + + +
                              + +
                              +
                              + + + + + +
                              + + onclick="dns_split_change()" /> + +
                              + +
                              + + + + +
                              + +
                              +
                              + + + + + +
                              + + onclick="dns_server_change()" /> + +
                              +
                              + + + + + + + + + + + + + +
                              + #1:  + +
                              + #2:  + +
                              + #3:  + +
                              + #4:  + +
                              +
                              + + + + + +
                              + + onclick="wins_server_change()" /> + +
                              +
                              + + + + + + + +
                              + #1:  + +
                              + #2:  + +
                              +
                              + + + + + +
                              + + onclick="pfs_group_change()" /> + +
                              +
                              + + + + +
                              + :   + +
                              +
                              + + + + + +
                              + + onclick="login_banner_change()" /> + +
                              +
                              + + + + +
                              + + +
                              +
                                + " /> +
                              +
                              +
                              +
                              + + + + + + diff --git a/usr/local/www/vpn_ipsec_phase1.php b/usr/local/www/vpn_ipsec_phase1.php new file mode 100644 index 000000000..4d6171504 --- /dev/null +++ b/usr/local/www/vpn_ipsec_phase1.php @@ -0,0 +1,934 @@ +. + Copyright (C) 2014 Ermal LUÇI + 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. +*/ + +##|+PRIV +##|*IDENT=page-vpn-ipsec-editphase1 +##|*NAME=VPN: IPsec: Edit Phase 1 page +##|*DESCR=Allow access to the 'VPN: IPsec: Edit Phase 1' page. +##|*MATCH=vpn_ipsec_phase1.php* +##|-PRIV + +require("functions.inc"); +require("guiconfig.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); + +if (!is_array($config['ipsec']['phase1'])) + $config['ipsec']['phase1'] = array(); + +if (!is_array($config['ipsec']['phase2'])) + $config['ipsec']['phase2'] = array(); + +$a_phase1 = &$config['ipsec']['phase1']; +$a_phase2 = &$config['ipsec']['phase2']; + +if (is_numericint($_GET['p1index'])) + $p1index = $_GET['p1index']; +if (isset($_POST['p1index']) && is_numericint($_POST['p1index'])) + $p1index = $_POST['p1index']; + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) + $p1index = $_GET['dup']; + +if (isset($p1index) && $a_phase1[$p1index]) { + // don't copy the ikeid on dup + if (!isset($_GET['dup']) || !is_numericint($_GET['dup'])) + $pconfig['ikeid'] = $a_phase1[$p1index]['ikeid']; + + $old_ph1ent = $a_phase1[$p1index]; + + $pconfig['disabled'] = isset($a_phase1[$p1index]['disabled']); + + if ($a_phase1[$p1index]['interface']) + $pconfig['interface'] = $a_phase1[$p1index]['interface']; + else + $pconfig['interface'] = "wan"; + + list($pconfig['remotenet'],$pconfig['remotebits']) = explode("/", $a_phase1[$p1index]['remote-subnet']); + + if (isset($a_phase1[$p1index]['mobile'])) + $pconfig['mobile'] = 'true'; + else + $pconfig['remotegw'] = $a_phase1[$p1index]['remote-gateway']; + + if (empty($a_phase1[$p1index]['iketype'])) + $pconfig['iketype'] = "ikev1"; + else + $pconfig['iketype'] = $a_phase1[$p1index]['iketype']; + $pconfig['mode'] = $a_phase1[$p1index]['mode']; + $pconfig['protocol'] = $a_phase1[$p1index]['protocol']; + $pconfig['myid_type'] = $a_phase1[$p1index]['myid_type']; + $pconfig['myid_data'] = $a_phase1[$p1index]['myid_data']; + $pconfig['peerid_type'] = $a_phase1[$p1index]['peerid_type']; + $pconfig['peerid_data'] = $a_phase1[$p1index]['peerid_data']; + $pconfig['ealgo'] = $a_phase1[$p1index]['encryption-algorithm']; + $pconfig['halgo'] = $a_phase1[$p1index]['hash-algorithm']; + $pconfig['dhgroup'] = $a_phase1[$p1index]['dhgroup']; + $pconfig['lifetime'] = $a_phase1[$p1index]['lifetime']; + $pconfig['authentication_method'] = $a_phase1[$p1index]['authentication_method']; + + if (($pconfig['authentication_method'] == "pre_shared_key") || + ($pconfig['authentication_method'] == "xauth_psk_server")) { + $pconfig['pskey'] = $a_phase1[$p1index]['pre-shared-key']; + } else { + $pconfig['certref'] = $a_phase1[$p1index]['certref']; + $pconfig['caref'] = $a_phase1[$p1index]['caref']; + } + + $pconfig['descr'] = $a_phase1[$p1index]['descr']; + $pconfig['nat_traversal'] = $a_phase1[$p1index]['nat_traversal']; + + if (!isset($a_phase1[$p1index]['reauth_enable'])) + $pconfig['reauth_enable'] = true; + if (!isset($a_phase1[$p1index]['rekey_enable'])) + $pconfig['rekey_enable'] = true; + + if ($a_phase1[$p1index]['dpd_delay'] && $a_phase1[$p1index]['dpd_maxfail']) { + $pconfig['dpd_enable'] = true; + $pconfig['dpd_delay'] = $a_phase1[$p1index]['dpd_delay']; + $pconfig['dpd_maxfail'] = $a_phase1[$p1index]['dpd_maxfail']; + } +} else { + /* defaults */ + $pconfig['interface'] = "wan"; + if($config['interfaces']['lan']) + $pconfig['localnet'] = "lan"; + $pconfig['mode'] = "aggressive"; + $pconfig['protocol'] = "inet"; + $pconfig['myid_type'] = "myaddress"; + $pconfig['peerid_type'] = "peeraddress"; + $pconfig['authentication_method'] = "pre_shared_key"; + $pconfig['ealgo'] = array( name => "3des" ); + $pconfig['halgo'] = "sha1"; + $pconfig['dhgroup'] = "2"; + $pconfig['lifetime'] = "28800"; + $pconfig['nat_traversal'] = "on"; + $pconfig['dpd_enable'] = true; + $pconfig['iketype'] = "ikev1"; + + /* mobile client */ + if($_GET['mobile']) + $pconfig['mobile']=true; +} + +if (isset($_GET['dup']) && is_numericint($_GET['dup'])) + unset($p1index); + +if ($_POST) { + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + + $method = $pconfig['authentication_method']; + // Unset ca and cert if not required to avaoid storing in config + if ($method == "pre_shared_key" || $method == "xauth_psk_server"){ + unset($pconfig['caref']); + unset($pconfig['certref']); + } + + // Only require PSK here for normal PSK tunnels (not mobile) or xauth. + // For RSA methods, require the CA/Cert. + switch ($method) { + case "eap-tls": + if ($pconfig['iketype'] != 'ikev2') + $input_errors[] = gettext("EAP-TLS can only be used with IKEv2 type VPNs."); + break; + case "pre_shared_key": + // If this is a mobile PSK tunnel the user PSKs go on + // the PSK tab, not here, so skip the check. + if ($pconfig['mobile']) + break; + case "xauth_psk_server": + $reqdfields = explode(" ", "pskey"); + $reqdfieldsn = array(gettext("Pre-Shared Key")); + break; + case "hybrid_rsa_server": + case "xauth_rsa_server": + case "rsasig": + $reqdfields = explode(" ", "caref certref"); + $reqdfieldsn = array(gettext("Certificate Authority"),gettext("Certificate")); + break; + } + if (!$pconfig['mobile']) { + $reqdfields[] = "remotegw"; + $reqdfieldsn[] = gettext("Remote gateway"); + } + + do_input_validation($pconfig, $reqdfields, $reqdfieldsn, $input_errors); + + if (($pconfig['lifetime'] && !is_numeric($pconfig['lifetime']))) + $input_errors[] = gettext("The P1 lifetime must be an integer."); + + if ($pconfig['remotegw']) { + if (!is_ipaddr($pconfig['remotegw']) && !is_domain($pconfig['remotegw'])) + $input_errors[] = gettext("A valid remote gateway address or host name must be specified."); + elseif (is_ipaddrv4($pconfig['remotegw']) && ($pconfig['protocol'] != "inet")) + $input_errors[] = gettext("A valid remote gateway IPv4 address must be specified or you need to change protocol to IPv6"); + elseif (is_ipaddrv6($pconfig['remotegw']) && ($pconfig['protocol'] != "inet6")) + $input_errors[] = gettext("A valid remote gateway IPv6 address must be specified or you need to change protocol to IPv4"); + } + + if (($pconfig['remotegw'] && is_ipaddr($pconfig['remotegw']) && !isset($pconfig['disabled']) )) { + $t = 0; + foreach ($a_phase1 as $ph1tmp) { + if ($p1index <> $t) { + $tremotegw = $pconfig['remotegw']; + if (($ph1tmp['remote-gateway'] == $tremotegw) && !isset($ph1tmp['disabled'])) { + $input_errors[] = sprintf(gettext('The remote gateway "%1$s" is already used by phase1 "%2$s".'), $tremotegw, $ph1tmp['descr']); + } + } + $t++; + } + } + + if (is_array($a_phase2) && (count($a_phase2))) { + foreach ($a_phase2 as $phase2) { + if($phase2['ikeid'] == $pconfig['ikeid']) { + if (($pconfig['protocol'] == "inet") && ($phase2['mode'] == "tunnel6")) { + $input_errors[] = gettext("There is a Phase 2 using IPv6, you cannot use IPv4."); + break; + } + if (($pconfig['protocol'] == "inet6") && ($phase2['mode'] == "tunnel")) { + $input_errors[] = gettext("There is a Phase 2 using IPv4, you cannot use IPv6."); + break; + } + } + } + } + + /* My identity */ + + if ($pconfig['myid_type'] == "myaddress") + $pconfig['myid_data'] = ""; + + if ($pconfig['myid_type'] == "address" and $pconfig['myid_data'] == "") + $input_errors[] = gettext("Please enter an address for 'My Identifier'"); + + if ($pconfig['myid_type'] == "keyid tag" and $pconfig['myid_data'] == "") + $input_errors[] = gettext("Please enter a keyid tag for 'My Identifier'"); + + if ($pconfig['myid_type'] == "fqdn" and $pconfig['myid_data'] == "") + $input_errors[] = gettext("Please enter a fully qualified domain name for 'My Identifier'"); + + if ($pconfig['myid_type'] == "user_fqdn" and $pconfig['myid_data'] == "") + $input_errors[] = gettext("Please enter a user and fully qualified domain name for 'My Identifier'"); + + if ($pconfig['myid_type'] == "dyn_dns" and $pconfig['myid_data'] == "") + $input_errors[] = gettext("Please enter a dynamic domain name for 'My Identifier'"); + + if ((($pconfig['myid_type'] == "address") && !is_ipaddr($pconfig['myid_data']))) + $input_errors[] = gettext("A valid IP address for 'My identifier' must be specified."); + + if ((($pconfig['myid_type'] == "fqdn") && !is_domain($pconfig['myid_data']))) + $input_errors[] = gettext("A valid domain name for 'My identifier' must be specified."); + + if ($pconfig['myid_type'] == "fqdn") + if (is_domain($pconfig['myid_data']) == false) + $input_errors[] = gettext("A valid FQDN for 'My identifier' must be specified."); + + if ($pconfig['myid_type'] == "user_fqdn") { + $user_fqdn = explode("@",$pconfig['myid_data']); + if (is_domain($user_fqdn[1]) == false) + $input_errors[] = gettext("A valid User FQDN in the form of user@my.domain.com for 'My identifier' must be specified."); + } + + if ($pconfig['myid_type'] == "dyn_dns") + if (is_domain($pconfig['myid_data']) == false) + $input_errors[] = gettext("A valid Dynamic DNS address for 'My identifier' must be specified."); + + /* Peer identity */ + + if ($pconfig['myid_type'] == "peeraddress") + $pconfig['peerid_data'] = ""; + + // Only enforce peer ID if we are not dealing with a pure-psk mobile config. + if (!(($pconfig['authentication_method'] == "pre_shared_key") && ($pconfig['mobile']))) { + if ($pconfig['peerid_type'] == "address" and $pconfig['peerid_data'] == "") + $input_errors[] = gettext("Please enter an address for 'Peer Identifier'"); + + if ($pconfig['peerid_type'] == "keyid tag" and $pconfig['peerid_data'] == "") + $input_errors[] = gettext("Please enter a keyid tag for 'Peer Identifier'"); + + if ($pconfig['peerid_type'] == "fqdn" and $pconfig['peerid_data'] == "") + $input_errors[] = gettext("Please enter a fully qualified domain name for 'Peer Identifier'"); + + if ($pconfig['peerid_type'] == "user_fqdn" and $pconfig['peerid_data'] == "") + $input_errors[] = gettext("Please enter a user and fully qualified domain name for 'Peer Identifier'"); + + if ((($pconfig['peerid_type'] == "address") && !is_ipaddr($pconfig['peerid_data']))) + $input_errors[] = gettext("A valid IP address for 'Peer identifier' must be specified."); + + if ((($pconfig['peerid_type'] == "fqdn") && !is_domain($pconfig['peerid_data']))) + $input_errors[] = gettext("A valid domain name for 'Peer identifier' must be specified."); + + if ($pconfig['peerid_type'] == "fqdn") + if (is_domain($pconfig['peerid_data']) == false) + $input_errors[] = gettext("A valid FQDN for 'Peer identifier' must be specified."); + + if ($pconfig['peerid_type'] == "user_fqdn") { + $user_fqdn = explode("@",$pconfig['peerid_data']); + if (is_domain($user_fqdn[1]) == false) + $input_errors[] = gettext("A valid User FQDN in the form of user@my.domain.com for 'Peer identifier' must be specified."); + } + } + + if ($pconfig['dpd_enable']) { + if (!is_numeric($pconfig['dpd_delay'])) + $input_errors[] = gettext("A numeric value must be specified for DPD delay."); + + if (!is_numeric($pconfig['dpd_maxfail'])) + $input_errors[] = gettext("A numeric value must be specified for DPD retries."); + } + + if (!empty($pconfig['iketype']) && $pconfig['iketype'] != "ikev1" && $pconfig['iketype'] != "ikev2") + $input_errors[] = gettext("Valid arguments for IKE type is v1 or v2"); + + /* build our encryption algorithms array */ + $pconfig['ealgo'] = array(); + $pconfig['ealgo']['name'] = $_POST['ealgo']; + if($pconfig['ealgo_keylen']) + $pconfig['ealgo']['keylen'] = $_POST['ealgo_keylen']; + + if (!$input_errors) { + $ph1ent['ikeid'] = $pconfig['ikeid']; + $ph1ent['iketype'] = $pconfig['iketype']; + $ph1ent['disabled'] = $pconfig['disabled'] ? true : false; + $ph1ent['interface'] = $pconfig['interface']; + /* if the remote gateway changed and the interface is not WAN then remove route */ + /* the vpn_ipsec_configure() handles adding the route */ + if ($pconfig['interface'] <> "wan") { + if($old_ph1ent['remote-gateway'] <> $pconfig['remotegw']) { + mwexec("/sbin/route delete -host {$old_ph1ent['remote-gateway']}"); + } + } + + if ($pconfig['mobile']) + $ph1ent['mobile'] = true; + else + $ph1ent['remote-gateway'] = $pconfig['remotegw']; + + $ph1ent['mode'] = $pconfig['mode']; + $ph1ent['protocol'] = $pconfig['protocol']; + + $ph1ent['myid_type'] = $pconfig['myid_type']; + $ph1ent['myid_data'] = $pconfig['myid_data']; + $ph1ent['peerid_type'] = $pconfig['peerid_type']; + $ph1ent['peerid_data'] = $pconfig['peerid_data']; + + $ph1ent['encryption-algorithm'] = $pconfig['ealgo']; + $ph1ent['hash-algorithm'] = $pconfig['halgo']; + $ph1ent['dhgroup'] = $pconfig['dhgroup']; + $ph1ent['lifetime'] = $pconfig['lifetime']; + $ph1ent['pre-shared-key'] = $pconfig['pskey']; + $ph1ent['private-key'] = base64_encode($pconfig['privatekey']); + $ph1ent['certref'] = $pconfig['certref']; + $ph1ent['caref'] = $pconfig['caref']; + $ph1ent['authentication_method'] = $pconfig['authentication_method']; + $ph1ent['descr'] = $pconfig['descr']; + $ph1ent['nat_traversal'] = $pconfig['nat_traversal']; + + if (isset($pconfig['reauth_enable'])) + $ph1ent['reauth_enable'] = true; + if (isset($pconfig['rekey_enable'])) + $ph1ent['rekey_enable'] = true; + + if (isset($pconfig['dpd_enable'])) { + $ph1ent['dpd_delay'] = $pconfig['dpd_delay']; + $ph1ent['dpd_maxfail'] = $pconfig['dpd_maxfail']; + } + + /* generate unique phase1 ikeid */ + if ($ph1ent['ikeid'] == 0) + $ph1ent['ikeid'] = ipsec_ikeid_next(); + + if (isset($p1index) && $a_phase1[$p1index]) + $a_phase1[$p1index] = $ph1ent; + else + $a_phase1[] = $ph1ent; + + write_config(); + mark_subsystem_dirty('ipsec'); + + header("Location: vpn_ipsec.php"); + exit; + } +} + +if ($pconfig['mobile']) + $pgtitle = array(gettext("VPN"),gettext("IPsec"),gettext("Edit Phase 1"), gettext("Mobile Client")); +else + $pgtitle = array(gettext("VPN"),gettext("IPsec"),gettext("Edit Phase 1")); +$shortcut_section = "ipsec"; + + +include("head.inc"); + +?> + + + + + +
                              + + + + + + + + + + +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + /> +
                              + + . + +
                              +
                              . +
                              +
                              . +
                              + +
                              + . +
                              + +
                              + +
                              + +
                              + + . + +
                              + +
                              + +
                              + + . + +
                              +
                              . +
                              + + +
                              + + + +

                              . + +
                              + + + +
                              + . +
                              +
                              + +
                              + + . + +
                              + +
                              + + . + +
                              + +
                              + + +
                              + +
                              + + . + +
                              + +
                              + + . + +
                              + + +
                              + /> +
                              +
                              + /> +
                              +
                              + +
                              + + . + +
                              + onclick="dpdchkbox_change()" /> +
                              +
                              +
                              + +
                              + + . +
                              +
                              + +
                              + + . + +
                              +
                              +
                                + + + + + + + + " /> +
                              +
                              +
                              +
                              + + + + + diff --git a/usr/local/www/vpn_ipsec_phase2.php b/usr/local/www/vpn_ipsec_phase2.php new file mode 100644 index 000000000..461a7086c --- /dev/null +++ b/usr/local/www/vpn_ipsec_phase2.php @@ -0,0 +1,887 @@ +. + 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. +*/ + +##|+PRIV +##|*IDENT=page-vpn-ipsec-editphase2 +##|*NAME=VPN: IPsec: Edit Phase 2 page +##|*DESCR=Allow access to the 'VPN: IPsec: Edit Phase 2' page. +##|*MATCH=vpn_ipsec_phase2.php* +##|-PRIV + +require("functions.inc"); +require("guiconfig.inc"); +require_once("ipsec.inc"); +require_once("vpn.inc"); + +if (!is_array($config['ipsec']['client'])) + $config['ipsec']['client'] = array(); + +$a_client = &$config['ipsec']['client']; + +if (!is_array($config['ipsec']['phase2'])) + $config['ipsec']['phase2'] = array(); + +$a_phase2 = &$config['ipsec']['phase2']; + +if (!empty($_GET['p2index'])) + $uindex = $_GET['p2index']; +if (!empty($_POST['uniqid'])) + $uindex = $_POST['uniqid']; + +if (!empty($_GET['dup'])) + $uindex = $_GET['dup']; + +$ph2found = false; +if (isset($uindex)) { + foreach ($a_phase2 as $p2index => $ph2) { + if ($ph2['uniqid'] == $uindex) { + $ph2found = true; + break; + } + } +} + +if ($ph2found === true) +{ + $pconfig['ikeid'] = $ph2['ikeid']; + $pconfig['disabled'] = isset($ph2['disabled']); + $pconfig['mode'] = $ph2['mode']; + $pconfig['descr'] = $ph2['descr']; + $pconfig['uniqid'] = $ph2['uniqid']; + + if (!empty($ph2['natlocalid'])) + idinfo_to_pconfig("natlocal",$ph2['natlocalid'],$pconfig); + idinfo_to_pconfig("local",$ph2['localid'],$pconfig); + idinfo_to_pconfig("remote",$ph2['remoteid'],$pconfig); + + $pconfig['proto'] = $ph2['protocol']; + ealgos_to_pconfig($ph2['encryption-algorithm-option'],$pconfig); + $pconfig['halgos'] = $ph2['hash-algorithm-option']; + $pconfig['pfsgroup'] = $ph2['pfsgroup']; + $pconfig['lifetime'] = $ph2['lifetime']; + $pconfig['pinghost'] = $ph2['pinghost']; + + if (isset($ph2['mobile'])) + $pconfig['mobile'] = true; +} +else +{ + $pconfig['ikeid'] = $_GET['ikeid']; + + /* defaults */ + $pconfig['localid_type'] = "lan"; + $pconfig['remoteid_type'] = "network"; + $pconfig['proto'] = "esp"; + $pconfig['ealgos'] = explode(",", "3des,blowfish,cast128,aes"); + $pconfig['halgos'] = explode(",", "hmac_sha1,hmac_md5"); + $pconfig['pfsgroup'] = "0"; + $pconfig['lifetime'] = "3600"; + $pconfig['uniqid'] = uniqid(); + + /* mobile client */ + if($_GET['mobile']) + $pconfig['mobile']=true; +} + +unset($ph2); +if (!empty($_GET['dup'])) { + unset($uindex); + unset($p2index); + $pconfig['uniqid'] = uniqid(); +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + if (!isset( $_POST['ikeid'])) + $input_errors[] = gettext("A valid ikeid must be specified."); + + /* input validation */ + $reqdfields = explode(" ", "localid_type uniqid"); + $reqdfieldsn = array(gettext("Local network type"), gettext("Unique Identifier")); + if (!isset($pconfig['mobile'])){ + $reqdfields[] = "remoteid_type"; + $reqdfieldsn[] = gettext("Remote network type"); + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if(($pconfig['mode'] == "tunnel") || ($pconfig['mode'] == "tunnel6")) + { + switch ($pconfig['localid_type']) { + case "network": + if (($pconfig['localid_netbits'] != 0 && !$pconfig['localid_netbits']) || !is_numeric($pconfig['localid_netbits'])) + $input_errors[] = gettext("A valid local network bit count must be specified."); + case "address": + if (!$pconfig['localid_address'] || !is_ipaddr($pconfig['localid_address'])) + $input_errors[] = gettext("A valid local network IP address must be specified."); + elseif (is_ipaddrv4($pconfig['localid_address']) && ($pconfig['mode'] != "tunnel")) + $input_errors[] = gettext("A valid local network IPv4 address must be specified or you need to change Mode to IPv6"); + elseif (is_ipaddrv6($pconfig['localid_address']) && ($pconfig['mode'] != "tunnel6")) + $input_errors[] = gettext("A valid local network IPv6 address must be specified or you need to change Mode to IPv4"); + break; + } + /* Check if the localid_type is an interface, to confirm if it has a valid subnet. */ + if (is_array($config['interfaces'][$pconfig['localid_type']])) { + // Don't let an empty subnet into racoon.conf, it can cause parse errors. Ticket #2201. + $address = get_interface_ip($pconfig['localid_type']); + $netbits = get_interface_subnet($pconfig['localid_type']); + + if (empty($address) || empty($netbits)) + $input_errors[] = gettext("Invalid Local Network.") . " " . convert_friendly_interface_to_friendly_descr($pconfig['localid_type']) . " " . gettext("has no subnet."); + } + + if (!empty($pconfig['natlocalid_address'])) { + switch ($pconfig['natlocalid_type']) { + case "network": + if (($pconfig['natlocalid_netbits'] != 0 && !$pconfig['natlocalid_netbits']) || !is_numeric($pconfig['natlocalid_netbits'])) + $input_errors[] = gettext("A valid NAT local network bit count must be specified."); + if ($pconfig['localid_type'] == "address") + $input_errors[] = gettext("You cannot configure a network type address for NAT while only an address type is selected for local source."); + case "address": + if (!empty($pconfig['natlocalid_address']) && !is_ipaddr($pconfig['natlocalid_address'])) + $input_errors[] = gettext("A valid NAT local network IP address must be specified."); + elseif (is_ipaddrv4($pconfig['natlocalid_address']) && ($pconfig['mode'] != "tunnel")) + $input_errors[] = gettext("A valid NAT local network IPv4 address must be specified or you need to change Mode to IPv6"); + elseif (is_ipaddrv6($pconfig['natlocalid_address']) && ($pconfig['mode'] != "tunnel6")) + $input_errors[] = gettext("A valid NAT local network IPv6 address must be specified or you need to change Mode to IPv4"); + break; + } + + if (is_array($config['interfaces'][$pconfig['natlocalid_type']])) { + // Don't let an empty subnet into racoon.conf, it can cause parse errors. Ticket #2201. + $address = get_interface_ip($pconfig['natlocalid_type']); + $netbits = get_interface_subnet($pconfig['natlocalid_type']); + + if (empty($address) || empty($netbits)) + $input_errors[] = gettext("Invalid Local Network.") . " " . convert_friendly_interface_to_friendly_descr($pconfig['natlocalid_type']) . " " . gettext("has no subnet."); + } + } + + switch ($pconfig['remoteid_type']) { + case "network": + if (($pconfig['remoteid_netbits'] != 0 && !$pconfig['remoteid_netbits']) || !is_numeric($pconfig['remoteid_netbits'])) + $input_errors[] = gettext("A valid remote network bit count must be specified."); + case "address": + if (!$pconfig['remoteid_address'] || !is_ipaddr($pconfig['remoteid_address'])) + $input_errors[] = gettext("A valid remote network IP address must be specified."); + elseif (is_ipaddrv4($pconfig['remoteid_address']) && ($pconfig['mode'] != "tunnel")) + $input_errors[] = gettext("A valid remote network IPv4 address must be specified or you need to change Mode to IPv6"); + elseif (is_ipaddrv6($pconfig['remoteid_address']) && ($pconfig['mode'] != "tunnel6")) + $input_errors[] = gettext("A valid remote network IPv6 address must be specified or you need to change Mode to IPv4"); + break; + } + } + /* Validate enabled phase2's are not duplicates */ + if (isset($pconfig['mobile'])){ + /* User is adding phase 2 for mobile phase1 */ + foreach($a_phase2 as $key => $name){ + if (isset($name['mobile']) && $name['uniqid'] != $pconfig['uniqid']) { + /* check duplicate localids only for mobile clents */ + $localid_data = ipsec_idinfo_to_cidr($name['localid'], false, $name['mode']); + $entered = array(); + $entered['type'] = $pconfig['localid_type']; + if (isset($pconfig['localid_address'])) $entered['address'] = $pconfig['localid_address']; + if (isset($pconfig['localid_netbits'])) $entered['netbits'] = $pconfig['localid_netbits']; + $entered_localid_data = ipsec_idinfo_to_cidr($entered, false, $pconfig['mode']); + if ($localid_data == $entered_localid_data){ + /* adding new p2 entry */ + $input_errors[] = gettext("Phase2 with this Local Network is already defined for mobile clients."); + break; + } + } + } + }else{ + /* User is adding phase 2 for site-to-site phase1 */ + $input_error = 0; + foreach($a_phase2 as $key => $name){ + if (!isset($name['mobile']) && $pconfig['ikeid'] == $name['ikeid'] && $pconfig['uniqid'] != $name['uniqid']) { + /* check duplicate subnets only for given phase1 */ + $localid_data = ipsec_idinfo_to_cidr($name['localid'], false, $name['mode']); + $remoteid_data = ipsec_idinfo_to_cidr($name['remoteid'], false, $name['mode']); + $entered_local = array(); + $entered_local['type'] = $pconfig['localid_type']; + if (isset($pconfig['localid_address'])) $entered_local['address'] = $pconfig['localid_address']; + if (isset($pconfig['localid_netbits'])) $entered_local['netbits'] = $pconfig['localid_netbits']; + $entered_localid_data = ipsec_idinfo_to_cidr($entered_local, false, $pconfig['mode']); + $entered_remote = array(); + $entered_remote['type'] = $pconfig['remoteid_type']; + if (isset($pconfig['remoteid_address'])) $entered_remote['address'] = $pconfig['remoteid_address']; + if (isset($pconfig['remoteid_netbits'])) $entered_remote['netbits'] = $pconfig['remoteid_netbits']; + $entered_remoteid_data = ipsec_idinfo_to_cidr($entered_remote, false, $pconfig['mode']); + if ($localid_data == $entered_localid_data && $remoteid_data == $entered_remoteid_data) { + /* adding new p2 entry */ + $input_errors[] = gettext("Phase2 with this Local/Remote networks combination is already defined for this Phase1."); + break; + } + } + } + } + + /* For ESP protocol, handle encryption algorithms */ + if ( $pconfig['proto'] == "esp") { + $ealgos = pconfig_to_ealgos($pconfig); + + if (!count($ealgos)) { + $input_errors[] = gettext("At least one encryption algorithm must be selected."); + } else { + if (empty($pconfig['halgos'])) { + foreach ($ealgos as $ealgo) { + if (!strpos($ealgo['name'], "gcm")) { + $input_errors[] = gettext("At least one hashing algorithm needs to be selected."); + break; + } + } + } + } + + } + if (($_POST['lifetime'] && !is_numeric($_POST['lifetime']))) { + $input_errors[] = gettext("The P2 lifetime must be an integer."); + } + + if (!$input_errors) { + + $ph2ent = array(); + $ph2ent['ikeid'] = $pconfig['ikeid']; + $ph2ent['uniqid'] = $pconfig['uniqid']; + $ph2ent['mode'] = $pconfig['mode']; + $ph2ent['disabled'] = $pconfig['disabled'] ? true : false; + + if(($ph2ent['mode'] == "tunnel") || ($ph2ent['mode'] == "tunnel6")){ + if (!empty($pconfig['natlocalid_address'])) + $ph2ent['natlocalid'] = pconfig_to_idinfo("natlocal",$pconfig); + $ph2ent['localid'] = pconfig_to_idinfo("local",$pconfig); + $ph2ent['remoteid'] = pconfig_to_idinfo("remote",$pconfig); + } + + $ph2ent['protocol'] = $pconfig['proto']; + $ph2ent['encryption-algorithm-option'] = $ealgos; + if (!empty($pconfig['halgos'])) + $ph2ent['hash-algorithm-option'] = $pconfig['halgos']; + else + unset($ph2ent['hash-algorithm-option']); + $ph2ent['pfsgroup'] = $pconfig['pfsgroup']; + $ph2ent['lifetime'] = $pconfig['lifetime']; + $ph2ent['pinghost'] = $pconfig['pinghost']; + $ph2ent['descr'] = $pconfig['descr']; + + if (isset($pconfig['mobile'])) + $ph2ent['mobile'] = true; + + if ($ph2found === true && $a_phase2[$p2index]) + $a_phase2[$p2index] = $ph2ent; + else + $a_phase2[] = $ph2ent; + + + write_config(); + mark_subsystem_dirty('ipsec'); + + header("Location: vpn_ipsec.php"); + exit; + } +} + +if ($pconfig['mobile']) + $pgtitle = array(gettext("VPN"),gettext("IPsec"),gettext("Edit Phase 2"), gettext("Mobile Client")); +else + $pgtitle = array(gettext("VPN"),gettext("IPsec"),gettext("Edit Phase 2")); +$shortcut_section = "ipsec"; + + +include("head.inc"); + +?> + + + + + + +
                              + + + + + + + + + + +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + /> + +
                              + . + +
                              + +
                              + + + + + + + + + + + + + + + + + + + + + + +
                              :   + +
                                 + + / + +
                              +
                              + +
                              :   + +
                                 + + / + +
                              +
                              + + + + + + + + + + + +
                              :   + +
                              :   + + / + +
                              +
                              + +
                              + + . + +
                              + +
                              + +
                              + + + +
                              + + $algodata): + $checked = ''; + if (is_array($pconfig['ealgos']) && in_array($algo,$pconfig['ealgos'])) + $checked = " checked=\"checked\""; + ?> + + + + + + + + +
                              + /> + + + + +    + + +
                              +
                              + . +
                              + $algoname): ?> + /> + +
                              + +
                              + + +
                              + + + + +
                              + + +
                              + + +
                              + + +
                                + + + + + " /> + + +
                              +
                              +
                              +
                              + + + + + + $algo_data) { + if (in_array($algo_name,$pconfig['ealgos'])) { + $ealg = array(); + $ealg['name'] = $algo_name; + if (is_array($algo_data['keysel'])) + $ealg['keylen'] = $_POST["keylen_".$algo_name]; + $ealgos[] = $ealg; + } + } + } + + return $ealgos; +} + +function ealgos_to_pconfig(& $ealgos,& $pconfig) { + + $pconfig['ealgos'] = array(); + foreach ($ealgos as $algo_data) { + $pconfig['ealgos'][] = $algo_data['name']; + if (isset($algo_data['keylen'])) + $pconfig["keylen_".$algo_data['name']] = $algo_data['keylen']; + } + + return $ealgos; +} + +function pconfig_to_idinfo($prefix,& $pconfig) { + + $type = $pconfig[$prefix."id_type"]; + $address = $pconfig[$prefix."id_address"]; + $netbits = $pconfig[$prefix."id_netbits"]; + + switch( $type ) + { + case "address": + return array('type' => $type, 'address' => $address); + case "network": + return array('type' => $type, 'address' => $address, 'netbits' => $netbits); + default: + return array('type' => $type ); + } +} + +function idinfo_to_pconfig($prefix,& $idinfo,& $pconfig) { + + switch( $idinfo['type'] ) + { + case "address": + $pconfig[$prefix."id_type"] = $idinfo['type']; + $pconfig[$prefix."id_address"] = $idinfo['address']; + break; + case "network": + $pconfig[$prefix."id_type"] = $idinfo['type']; + $pconfig[$prefix."id_address"] = $idinfo['address']; + $pconfig[$prefix."id_netbits"] = $idinfo['netbits']; + break; + default: + $pconfig[$prefix."id_type"] = $idinfo['type']; + break; + } +} + +?> diff --git a/usr/local/www/vpn_ipsec_settings.php b/usr/local/www/vpn_ipsec_settings.php new file mode 100644 index 000000000..ba685966a --- /dev/null +++ b/usr/local/www/vpn_ipsec_settings.php @@ -0,0 +1,253 @@ + $ldescr) { + if (!empty($config['ipsec']["ipsec_{$lkey}"])) + $pconfig["ipsec_{$lkey}"] = $config['ipsec']["ipsec_{$lkey}"]; +} +$pconfig['failoverforcereload'] = isset($config['ipsec']['failoverforcereload']); +$pconfig['maxmss_enable'] = isset($config['system']['maxmss_enable']); +$pconfig['maxmss'] = $config['system']['maxmss']; + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + if (!$input_errors) { + + if($_POST['noinstalllanspd'] == "yes") { + if (!isset($pconfig['noinstalllanspd'])) + $config['system']['noinstalllanspd'] = true; + } else { + if (isset($config['system']['noinstalllanspd'])) + unset($config['system']['noinstalllanspd']); + } + + if($_POST['preferoldsa_enable'] == "yes") + $config['ipsec']['preferoldsa'] = true; + elseif (isset($config['ipsec']['preferoldsa'])) + unset($config['ipsec']['preferoldsa']); + + if (is_array($config['ipsec'])) { + foreach ($ipsec_loglevels as $lkey => $ldescr) { + if (empty($_POST["ipsec_{$lkey}"])) { + if (isset($config['ipsec']["ipsec_{$lkey}"])) + unset($config['ipsec']["ipsec_{$lkey}"]); + } else + $config['ipsec']["ipsec_{$lkey}"] = $_POST["ipsec_{$lkey}"]; + } + } + + if($_POST['failoverforcereload'] == "yes") + $config['ipsec']['failoverforcereload'] = true; + elseif (isset($config['ipsec']['failoverforcereload'])) + unset($config['ipsec']['failoverforcereload']); + + if($_POST['maxmss_enable'] == "yes") { + $config['system']['maxmss_enable'] = true; + $config['system']['maxmss'] = $_POST['maxmss']; + } else { + unset($config['system']['maxmss_enable']); + unset($config['system']['maxmss']); + } + + write_config(); + + $retval = 0; + $retval = filter_configure(); + if(stristr($retval, "error") <> true) + $savemsg = get_std_save_message(gettext($retval)); + else + $savemsg = gettext($retval); + + vpn_ipsec_configure_preferoldsa(); + vpn_ipsec_configure(); + vpn_ipsec_configure_loglevels(); + +// header("Location: vpn_ipsec_settings.php"); +// return; + } +} + +$pgtitle = array(gettext("VPN"),gettext("IPsec"),gettext("Settings")); +$shortcut_section = "ipsec"; + +include("head.inc"); +?> + + + + + + +
                              + + + + + + + + + + +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + /> + +
                              + +
                              + /> + +
                              + +
                              + +
                              + + $ldescr): ?> + + + + + + +
                              + \n"; + foreach (array("Silent", "Audit", "Control", "Diag", "Raw", "Highest") as $lidx => $lvalue) { + echo "\n"; + } + ?> + +
                              +
                              +
                              + /> + +
                              + +
                              + onclick="maxmss_checked(this)" /> + +
                              + " class="formfld unknown" /> +
                              + +
                                + " /> +
                              +
                              +
                              +
                              + + + diff --git a/usr/local/www/vpn_l2tp.php b/usr/local/www/vpn_l2tp.php new file mode 100644 index 000000000..3197f5766 --- /dev/null +++ b/usr/local/www/vpn_l2tp.php @@ -0,0 +1,475 @@ += $subnet_start) && + (ip2ulong($_POST['localip']) <= $subnet_end)) { + $input_errors[] = gettext("The specified server address lies in the remote subnet."); + } + if ($_POST['localip'] == get_interface_ip("lan")) { + $input_errors[] = gettext("The specified server address is equal to the LAN interface address."); + } + } + } + + /* if this is an AJAX caller then handle via JSON */ + if(isAjax() && is_array($input_errors)) { + input_errors2Ajax($input_errors); + exit; + } + + if (!$input_errors) { + $l2tpcfg['remoteip'] = $_POST['remoteip']; + $l2tpcfg['localip'] = $_POST['localip']; + $l2tpcfg['l2tp_subnet'] = $_POST['l2tp_subnet']; + $l2tpcfg['mode'] = $_POST['mode']; + $l2tpcfg['interface'] = $_POST['interface']; + $l2tpcfg['n_l2tp_units'] = $_POST['n_l2tp_units']; + + $l2tpcfg['radius']['server'] = $_POST['radiusserver']; + $l2tpcfg['radius']['secret'] = $_POST['radiussecret']; + $l2tpcfg['secret'] = $_POST['secret']; + + if($_POST['wins']) + $l2tpcfg['wins'] = $_POST['wins']; + else + unset($l2tpcfg['wins']); + + $l2tpcfg['paporchap'] = $_POST['paporchap']; + + + if ($_POST['l2tp_dns1'] == "") { + if (isset($l2tpcfg['dns1'])) + unset($l2tpcfg['dns1']); + } else + $l2tpcfg['dns1'] = $_POST['l2tp_dns1']; + + if ($_POST['l2tp_dns2'] == "") { + if (isset($l2tpcfg['dns2'])) + unset($l2tpcfg['dns2']); + } else + $l2tpcfg['dns2'] = $_POST['l2tp_dns2']; + + if($_POST['radiusenable'] == "yes") + $l2tpcfg['radius']['enable'] = true; + else + unset($l2tpcfg['radius']['enable']); + + if($_POST['radacct_enable'] == "yes") + $l2tpcfg['radius']['accounting'] = true; + else + unset($l2tpcfg['radius']['accounting']); + + if($_POST['radiusissueips'] == "yes") + $l2tpcfg['radius']['radiusissueips'] = true; + else + unset($l2tpcfg['radius']['radiusissueips']); + + write_config(); + + $retval = 0; + $retval = vpn_l2tp_configure(); + $savemsg = get_std_save_message($retval); + + /* if ajax is calling, give them an update message */ + if(isAjax()) + print_info_box_np($savemsg); + } +} + +include("head.inc"); +?> + +"> + + + +
                              + + +
                              + + + + + +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                + /> +
                                + /> +
                              + +
                              + +
                              + +
                              + . +
                              + . +
                              +
                              + .
                              + +
                              +
                              +
                              + +
                              24 255.255.255.0 +
                              + +
                              10 +
                              + +
                              +
                              +
                              + +
                              +
                              +
                              + +
                              + +
                              +
                              +
                              + +
                              + /> +
                              +
                              +
                              + /> +
                              +
                              + +
                              +
                              + +
                              +
                              + /> +
                              + +
                                + " onclick="enable_change(true)" /> +
                              + +
                              + +
                              +
                              +
                              +
                              +
                              + + + + + + diff --git a/usr/local/www/vpn_l2tp_users.php b/usr/local/www/vpn_l2tp_users.php new file mode 100644 index 000000000..879360164 --- /dev/null +++ b/usr/local/www/vpn_l2tp_users.php @@ -0,0 +1,132 @@ + + +"> + +
                              +
                              + + +
                              +" . gettext("You must apply the changes in order for them to take effect") . ".
                              " . gettext("Warning: this will terminate all current l2tp sessions!") . "");?>
                              + + + + + + +
                              +
                              + +
                              +
                              + + + + diff --git a/usr/local/www/vpn_l2tp_users_edit.php b/usr/local/www/vpn_l2tp_users_edit.php new file mode 100644 index 000000000..4adde6b55 --- /dev/null +++ b/usr/local/www/vpn_l2tp_users_edit.php @@ -0,0 +1,194 @@ + + +"> + + + +
                              +
                              +
                              + + + + + + + + + + + + + + + + + +
                              + +
                              + +
                              +  ()
                              + +
                              + +
                                + + " onclick="window.location.href=''" /> + + + +
                              +
                              +
                              + + + + diff --git a/usr/local/www/vpn_openvpn_client.php b/usr/local/www/vpn_openvpn_client.php new file mode 100644 index 000000000..ed2dc65e0 --- /dev/null +++ b/usr/local/www/vpn_openvpn_client.php @@ -0,0 +1,1201 @@ +"; +} + +if($_GET['act']=="new"){ + $pconfig['autokey_enable'] = "yes"; + $pconfig['tlsauth_enable'] = "yes"; + $pconfig['autotls_enable'] = "yes"; + $pconfig['interface'] = "wan"; + $pconfig['server_port'] = 1194; + $pconfig['verbosity_level'] = 1; // Default verbosity is 1 + // OpenVPN Defaults to SHA1 + $pconfig['digest'] = "SHA1"; +} + +global $simplefields; +$simplefields = array('auth_user','auth_pass'); + +if($_GET['act']=="edit"){ + + if (isset($id) && $a_client[$id]) { + foreach($simplefields as $stat) + $pconfig[$stat] = $a_client[$id][$stat]; + + $pconfig['disable'] = isset($a_client[$id]['disable']); + $pconfig['mode'] = $a_client[$id]['mode']; + $pconfig['protocol'] = $a_client[$id]['protocol']; + $pconfig['interface'] = $a_client[$id]['interface']; + if (!empty($a_client[$id]['ipaddr'])) { + $pconfig['interface'] = $pconfig['interface'] . '|' . $a_client[$id]['ipaddr']; + } + $pconfig['local_port'] = $a_client[$id]['local_port']; + $pconfig['server_addr'] = $a_client[$id]['server_addr']; + $pconfig['server_port'] = $a_client[$id]['server_port']; + $pconfig['resolve_retry'] = $a_client[$id]['resolve_retry']; + $pconfig['proxy_addr'] = $a_client[$id]['proxy_addr']; + $pconfig['proxy_port'] = $a_client[$id]['proxy_port']; + $pconfig['proxy_user'] = $a_client[$id]['proxy_user']; + $pconfig['proxy_passwd'] = $a_client[$id]['proxy_passwd']; + $pconfig['proxy_authtype'] = $a_client[$id]['proxy_authtype']; + $pconfig['description'] = $a_client[$id]['description']; + $pconfig['custom_options'] = $a_client[$id]['custom_options']; + $pconfig['ns_cert_type'] = $a_client[$id]['ns_cert_type']; + $pconfig['dev_mode'] = $a_client[$id]['dev_mode']; + + if ($pconfig['mode'] != "p2p_shared_key") { + $pconfig['caref'] = $a_client[$id]['caref']; + $pconfig['certref'] = $a_client[$id]['certref']; + if ($a_client[$id]['tls']) { + $pconfig['tlsauth_enable'] = "yes"; + $pconfig['tls'] = base64_decode($a_client[$id]['tls']); + } + } else + $pconfig['shared_key'] = base64_decode($a_client[$id]['shared_key']); + $pconfig['crypto'] = $a_client[$id]['crypto']; + // OpenVPN Defaults to SHA1 if unset + $pconfig['digest'] = !empty($a_client[$id]['digest']) ? $a_client[$id]['digest'] : "SHA1"; + $pconfig['engine'] = $a_client[$id]['engine']; + + $pconfig['tunnel_network'] = $a_client[$id]['tunnel_network']; + $pconfig['tunnel_networkv6'] = $a_client[$id]['tunnel_networkv6']; + $pconfig['remote_network'] = $a_client[$id]['remote_network']; + $pconfig['remote_networkv6'] = $a_client[$id]['remote_networkv6']; + $pconfig['use_shaper'] = $a_client[$id]['use_shaper']; + $pconfig['compression'] = $a_client[$id]['compression']; + $pconfig['passtos'] = $a_client[$id]['passtos']; + + // just in case the modes switch + $pconfig['autokey_enable'] = "yes"; + $pconfig['autotls_enable'] = "yes"; + + $pconfig['no_tun_ipv6'] = $a_client[$id]['no_tun_ipv6']; + $pconfig['route_no_pull'] = $a_client[$id]['route_no_pull']; + $pconfig['route_no_exec'] = $a_client[$id]['route_no_exec']; + if (isset($a_client[$id]['verbosity_level'])) + $pconfig['verbosity_level'] = $a_client[$id]['verbosity_level']; + else + $pconfig['verbosity_level'] = 1; // Default verbosity is 1 + } +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + if (isset($id) && $a_client[$id]) + $vpnid = $a_client[$id]['vpnid']; + else + $vpnid = 0; + + list($iv_iface, $iv_ip) = explode ("|",$pconfig['interface']); + if (is_ipaddrv4($iv_ip) && (stristr($pconfig['protocol'], "6") !== false)) { + $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv6 protocol and an IPv4 IP address."); + } elseif (is_ipaddrv6($iv_ip) && (stristr($pconfig['protocol'], "6") === false)) { + $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv4 protocol and an IPv6 IP address."); + } elseif ((stristr($pconfig['protocol'], "6") === false) && !get_interface_ip($iv_iface) && ($pconfig['interface'] != "any")) { + $input_errors[] = gettext("An IPv4 protocol was selected, but the selected interface has no IPv4 address."); + } elseif ((stristr($pconfig['protocol'], "6") !== false) && !get_interface_ipv6($iv_iface) && ($pconfig['interface'] != "any")) { + $input_errors[] = gettext("An IPv6 protocol was selected, but the selected interface has no IPv6 address."); + } + + if ($pconfig['mode'] != "p2p_shared_key") + $tls_mode = true; + else + $tls_mode = false; + + /* input validation */ + if ($pconfig['local_port']) { + + if ($result = openvpn_validate_port($pconfig['local_port'], 'Local port')) + $input_errors[] = $result; + + $portused = openvpn_port_used($pconfig['protocol'], $pconfig['interface'], $pconfig['local_port'], $vpnid); + if (($portused != $vpnid) && ($portused != 0)) + $input_errors[] = gettext("The specified 'Local port' is in use. Please select another value"); + } + + if ($result = openvpn_validate_host($pconfig['server_addr'], 'Server host or address')) + $input_errors[] = $result; + + if ($result = openvpn_validate_port($pconfig['server_port'], 'Server port')) + $input_errors[] = $result; + + if ($pconfig['proxy_addr']) { + + if ($result = openvpn_validate_host($pconfig['proxy_addr'], 'Proxy host or address')) + $input_errors[] = $result; + + if ($result = openvpn_validate_port($pconfig['proxy_port'], 'Proxy port')) + $input_errors[] = $result; + + if ($pconfig['proxy_authtype'] != "none") { + if (empty($pconfig['proxy_user']) || empty($pconfig['proxy_passwd'])) + $input_errors[] = gettext("User name and password are required for proxy with authentication."); + } + } + + if($pconfig['tunnel_network']) + if ($result = openvpn_validate_cidr($pconfig['tunnel_network'], 'IPv4 Tunnel Network', false, "ipv4")) + $input_errors[] = $result; + + if($pconfig['tunnel_networkv6']) + if ($result = openvpn_validate_cidr($pconfig['tunnel_networkv6'], 'IPv6 Tunnel Network', false, "ipv6")) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['remote_network'], 'IPv4 Remote Network', true, "ipv4")) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['remote_networkv6'], 'IPv6 Remote Network', true, "ipv6")) + $input_errors[] = $result; + + if (!empty($pconfig['use_shaper']) && (!is_numeric($pconfig['use_shaper']) || ($pconfig['use_shaper'] <= 0))) + $input_errors[] = gettext("The bandwidth limit must be a positive numeric value."); + + if ($pconfig['autokey_enable']) + $pconfig['shared_key'] = openvpn_create_key(); + + if (!$tls_mode && !$pconfig['autokey_enable']) + if (!strstr($pconfig['shared_key'], "-----BEGIN OpenVPN Static key V1-----") || + !strstr($pconfig['shared_key'], "-----END OpenVPN Static key V1-----")) + $input_errors[] = gettext("The field 'Shared Key' does not appear to be valid"); + + if ($tls_mode && $pconfig['tlsauth_enable'] && !$pconfig['autotls_enable']) + if (!strstr($pconfig['tls'], "-----BEGIN OpenVPN Static key V1-----") || + !strstr($pconfig['tls'], "-----END OpenVPN Static key V1-----")) + $input_errors[] = gettext("The field 'TLS Authentication Key' does not appear to be valid"); + + /* If we are not in shared key mode, then we need the CA/Cert. */ + if ($pconfig['mode'] != "p2p_shared_key") { + $reqdfields = explode(" ", "caref"); + $reqdfieldsn = array(gettext("Certificate Authority")); + } elseif (!$pconfig['autokey_enable']) { + /* We only need the shared key filled in if we are in shared key mode and autokey is not selected. */ + $reqdfields = array('shared_key'); + $reqdfieldsn = array(gettext('Shared key')); + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (($pconfig['mode'] != "p2p_shared_key") && empty($pconfig['certref']) && empty($pconfig['auth_user']) && empty($pconfig['auth_pass'])) { + $input_errors[] = gettext("If no Client Certificate is selected, a username and password must be entered."); + } + + if (!$input_errors) { + + $client = array(); + + foreach($simplefields as $stat) + update_if_changed($stat, $client[$stat], $_POST[$stat]); + + if ($vpnid) + $client['vpnid'] = $vpnid; + else + $client['vpnid'] = openvpn_vpnid_next(); + + if ($_POST['disable'] == "yes") + $client['disable'] = true; + $client['protocol'] = $pconfig['protocol']; + $client['dev_mode'] = $pconfig['dev_mode']; + list($client['interface'], $client['ipaddr']) = explode ("|",$pconfig['interface']); + $client['local_port'] = $pconfig['local_port']; + $client['server_addr'] = $pconfig['server_addr']; + $client['server_port'] = $pconfig['server_port']; + $client['resolve_retry'] = $pconfig['resolve_retry']; + $client['proxy_addr'] = $pconfig['proxy_addr']; + $client['proxy_port'] = $pconfig['proxy_port']; + $client['proxy_authtype'] = $pconfig['proxy_authtype']; + $client['proxy_user'] = $pconfig['proxy_user']; + $client['proxy_passwd'] = $pconfig['proxy_passwd']; + $client['description'] = $pconfig['description']; + $client['mode'] = $pconfig['mode']; + $client['custom_options'] = str_replace("\r\n", "\n", $pconfig['custom_options']); + + if ($tls_mode) { + $client['caref'] = $pconfig['caref']; + $client['certref'] = $pconfig['certref']; + if ($pconfig['tlsauth_enable']) { + if ($pconfig['autotls_enable']) + $pconfig['tls'] = openvpn_create_key(); + $client['tls'] = base64_encode($pconfig['tls']); + } + } else { + $client['shared_key'] = base64_encode($pconfig['shared_key']); + } + $client['crypto'] = $pconfig['crypto']; + $client['digest'] = $pconfig['digest']; + $client['engine'] = $pconfig['engine']; + + $client['tunnel_network'] = $pconfig['tunnel_network']; + $client['tunnel_networkv6'] = $pconfig['tunnel_networkv6']; + $client['remote_network'] = $pconfig['remote_network']; + $client['remote_networkv6'] = $pconfig['remote_networkv6']; + $client['use_shaper'] = $pconfig['use_shaper']; + $client['compression'] = $pconfig['compression']; + $client['passtos'] = $pconfig['passtos']; + + $client['no_tun_ipv6'] = $pconfig['no_tun_ipv6']; + $client['route_no_pull'] = $pconfig['route_no_pull']; + $client['route_no_exec'] = $pconfig['route_no_exec']; + $client['verbosity_level'] = $pconfig['verbosity_level']; + + if (isset($id) && $a_client[$id]) + $a_client[$id] = $client; + else + $a_client[] = $client; + + openvpn_resync('client', $client); + write_config(); + + header("Location: vpn_openvpn_client.php"); + exit; + } +} + +include("head.inc"); + +?> + +"> + + + + + + + + + + +
                              + +
                              + + + +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + + + + + +
                              + + /> + +   + +
                              +
                              +
                              + . +
                              + +
                              + +
                              + +
                              +
                              +
                              + +
                              + +
                              + +
                              + +
                              + +
                              + +
                              + + + + + +
                              + +   :  + + + +
                              +
                              + + + + + + + + + + +
                              + + + + + +
                              + + /> + + + + +
                              + . +
                              + +
                              + . +
                              + +
                              + + + + + + + + + +
                              + +   :  + + + +
                              + +   :  + + + +
                              +
                              + + + + + +
                              + + onclick="tlsauth_change()" /> + + + . + +
                              + + + + + + +
                              + + onclick="autotls_change()" /> + + + . + +
                              + + + + + +
                              + +
                              + . +
                              +
                              + + + + No Certificate Authorities defined.
                              Create one under System > Cert Manager. + +
                              + + + No Certificates defined.
                              Create one under System > Cert Manager if one is required for this connection. + +
                              + + + + + + +
                              + + onclick="autokey_change()" /> + + + . + +
                              + + + + + +
                              + +
                              + . +
                              +
                              + +
                              + +
                              +
                              + +
                              + +
                              + . +
                              + +
                              + . +
                              + +
                              + . +
                              + +
                              + . +
                              + +
                              + . +
                              + +
                              + . +
                              + + + + + +
                              + + /> + + + . + +
                              +
                              + + + + + +
                              + + /> + + + . + +
                              +
                              + + + + + +
                              + + /> + + + --route-up . + +
                              +
                              + + + + + +
                              + + /> + + + . + +
                              +
                              + + + + + + + + + + + + + + + + + + +
                              + + + + +
                              +
                              +
                              + remote server.mysite.com 1194; or remote 1.2.3.4 1194; +
                              +
                              + +
                              + .

                              + none -- .
                              + default-4 -- .
                              + 5 -- .
                              + 6-11 -- . +
                              + +
                              + + + + + +
                                + " /> + + + + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + " width="17" height="17" border="0" alt="add" /> + +
                              +

                              + +

                              +
                              + + + + + + + + + + " width="17" height="17" border="0" alt="edit" /> + +   + ')"> + " width="17" height="17" border="0" alt="delete" /> + +
                              + + + +
                              + + + + + + diff --git a/usr/local/www/vpn_openvpn_csc.php b/usr/local/www/vpn_openvpn_csc.php new file mode 100644 index 000000000..f70344d6c --- /dev/null +++ b/usr/local/www/vpn_openvpn_csc.php @@ -0,0 +1,826 @@ +"; +} + +if($_GET['act']=="edit"){ + + if (isset($id) && $a_csc[$id]) { + $pconfig['custom_options'] = $a_csc[$id]['custom_options']; + $pconfig['disable'] = isset($a_csc[$id]['disable']); + $pconfig['common_name'] = $a_csc[$id]['common_name']; + $pconfig['block'] = $a_csc[$id]['block']; + $pconfig['description'] = $a_csc[$id]['description']; + + $pconfig['tunnel_network'] = $a_csc[$id]['tunnel_network']; + $pconfig['local_network'] = $a_csc[$id]['local_network']; + $pconfig['local_networkv6'] = $a_csc[$id]['local_networkv6']; + $pconfig['remote_network'] = $a_csc[$id]['remote_network']; + $pconfig['remote_networkv6'] = $a_csc[$id]['remote_networkv6']; + $pconfig['gwredir'] = $a_csc[$id]['gwredir']; + + $pconfig['push_reset'] = $a_csc[$id]['push_reset']; + + $pconfig['dns_domain'] = $a_csc[$id]['dns_domain']; + if ($pconfig['dns_domain']) + $pconfig['dns_domain_enable'] = true; + + $pconfig['dns_server1'] = $a_csc[$id]['dns_server1']; + $pconfig['dns_server2'] = $a_csc[$id]['dns_server2']; + $pconfig['dns_server3'] = $a_csc[$id]['dns_server3']; + $pconfig['dns_server4'] = $a_csc[$id]['dns_server4']; + if ($pconfig['dns_server1'] || + $pconfig['dns_server2'] || + $pconfig['dns_server3'] || + $pconfig['dns_server4']) + $pconfig['dns_server_enable'] = true; + + $pconfig['ntp_server1'] = $a_csc[$id]['ntp_server1']; + $pconfig['ntp_server2'] = $a_csc[$id]['ntp_server2']; + if ($pconfig['ntp_server1'] || + $pconfig['ntp_server2']) + $pconfig['ntp_server_enable'] = true; + + $pconfig['netbios_enable'] = $a_csc[$id]['netbios_enable']; + $pconfig['netbios_ntype'] = $a_csc[$id]['netbios_ntype']; + $pconfig['netbios_scope'] = $a_csc[$id]['netbios_scope']; + + $pconfig['wins_server1'] = $a_csc[$id]['wins_server1']; + $pconfig['wins_server2'] = $a_csc[$id]['wins_server2']; + if ($pconfig['wins_server1'] || + $pconfig['wins_server2']) + $pconfig['wins_server_enable'] = true; + + $pconfig['nbdd_server1'] = $a_csc[$id]['nbdd_server1']; + if ($pconfig['nbdd_server1']) + $pconfig['nbdd_server_enable'] = true; + } +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + if ($result = openvpn_validate_cidr($pconfig['tunnel_network'], 'Tunnel network')) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['local_network'], 'IPv4 Local Network', true, "ipv4")) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['local_networkv6'], 'IPv6 Local Network', true, "ipv6")) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['remote_network'], 'IPv4 Remote Network', true, "ipv4")) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['remote_networkv6'], 'IPv6 Remote Network', true, "ipv6")) + $input_errors[] = $result; + + if ($pconfig['dns_server_enable']) { + if (!empty($pconfig['dns_server1']) && !is_ipaddr(trim($pconfig['dns_server1']))) + $input_errors[] = gettext("The field 'DNS Server #1' must contain a valid IP address"); + if (!empty($pconfig['dns_server2']) && !is_ipaddr(trim($pconfig['dns_server2']))) + $input_errors[] = gettext("The field 'DNS Server #2' must contain a valid IP address"); + if (!empty($pconfig['dns_server3']) && !is_ipaddr(trim($pconfig['dns_server3']))) + $input_errors[] = gettext("The field 'DNS Server #3' must contain a valid IP address"); + if (!empty($pconfig['dns_server4']) && !is_ipaddr(trim($pconfig['dns_server4']))) + $input_errors[] = gettext("The field 'DNS Server #4' must contain a valid IP address"); + } + + if ($pconfig['ntp_server_enable']) { + if (!empty($pconfig['ntp_server1']) && !is_ipaddr(trim($pconfig['ntp_server1']))) + $input_errors[] = gettext("The field 'NTP Server #1' must contain a valid IP address"); + if (!empty($pconfig['ntp_server2']) && !is_ipaddr(trim($pconfig['ntp_server2']))) + $input_errors[] = gettext("The field 'NTP Server #2' must contain a valid IP address"); + if (!empty($pconfig['ntp_server3']) && !is_ipaddr(trim($pconfig['ntp_server3']))) + $input_errors[] = gettext("The field 'NTP Server #3' must contain a valid IP address"); + if (!empty($pconfig['ntp_server4']) && !is_ipaddr(trim($pconfig['ntp_server4']))) + $input_errors[] = gettext("The field 'NTP Server #4' must contain a valid IP address"); + } + + if ($pconfig['netbios_enable']) { + if ($pconfig['wins_server_enable']) { + if (!empty($pconfig['wins_server1']) && !is_ipaddr(trim($pconfig['wins_server1']))) + $input_errors[] = gettext("The field 'WINS Server #1' must contain a valid IP address"); + if (!empty($pconfig['wins_server2']) && !is_ipaddr(trim($pconfig['wins_server2']))) + $input_errors[] = gettext("The field 'WINS Server #2' must contain a valid IP address"); + } + if ($pconfig['nbdd_server_enable']) + if (!empty($pconfig['nbdd_server1']) && !is_ipaddr(trim($pconfig['nbdd_server1']))) + $input_errors[] = gettext("The field 'NetBIOS Data Distribution Server #1' must contain a valid IP address"); + } + + $reqdfields[] = 'common_name'; + $reqdfieldsn[] = 'Common name'; + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (!$input_errors) { + + $csc = array(); + + $csc['custom_options'] = $pconfig['custom_options']; + if ($_POST['disable'] == "yes") + $csc['disable'] = true; + $csc['common_name'] = $pconfig['common_name']; + $csc['block'] = $pconfig['block']; + $csc['description'] = $pconfig['description']; + + $csc['tunnel_network'] = $pconfig['tunnel_network']; + $csc['local_network'] = $pconfig['local_network']; + $csc['local_networkv6'] = $pconfig['local_networkv6']; + $csc['remote_network'] = $pconfig['remote_network']; + $csc['remote_networkv6'] = $pconfig['remote_networkv6']; + $csc['gwredir'] = $pconfig['gwredir']; + + $csc['push_reset'] = $pconfig['push_reset']; + + if ($pconfig['dns_domain_enable']) + $csc['dns_domain'] = $pconfig['dns_domain']; + + if ($pconfig['dns_server_enable']) { + $csc['dns_server1'] = $pconfig['dns_server1']; + $csc['dns_server2'] = $pconfig['dns_server2']; + $csc['dns_server3'] = $pconfig['dns_server3']; + $csc['dns_server4'] = $pconfig['dns_server4']; + } + + if ($pconfig['ntp_server_enable']) { + $csc['ntp_server1'] = $pconfig['ntp_server1']; + $csc['ntp_server2'] = $pconfig['ntp_server2']; + } + + $csc['netbios_enable'] = $pconfig['netbios_enable']; + $csc['netbios_ntype'] = $pconfig['netbios_ntype']; + $csc['netbios_scope'] = $pconfig['netbios_scope']; + + if ($pconfig['netbios_enable']) { + + if ($pconfig['wins_server_enable']) { + $csc['wins_server1'] = $pconfig['wins_server1']; + $csc['wins_server2'] = $pconfig['wins_server2']; + } + + if ($pconfig['dns_server_enable']) + $csc['nbdd_server1'] = $pconfig['nbdd_server1']; + } + + if (isset($id) && $a_csc[$id]) { + $old_csc_cn = $a_csc[$id]['common_name']; + $a_csc[$id] = $csc; + } else + $a_csc[] = $csc; + + if (!empty($old_csc_cn)) + openvpn_cleanup_csc($old_csc_cn); + openvpn_resync_csc($csc); + write_config(); + + header("Location: vpn_openvpn_csc.php"); + exit; + } +} + +include("head.inc"); + +?> + +"> + + + + + + + + + + +
                              + +
                              + + + +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + + + + + +
                              + + /> + +   + +
                              +
                              +
                              + . +
                              + +
                              + . +
                              + +
                              + . +
                              + + + + + +
                              + + /> + + + . + +
                              + . +
                              + +
                              + . +
                              + +
                              + +
                              +
                              + +
                              + +
                              +
                              + +
                              + . +
                              +
                              + +
                              + . +
                              +
                              + + + + + +
                              + + /> + + + . + +
                              +
                              + + + + + +
                              + + /> + + + . + +
                              +
                              + + + + + +
                              + + onclick="dns_domain_change()" /> + + +
                              +
                              +
                              + + + + +
                              + +
                              +
                              + + + + + +
                              + + onclick="dns_server_change()" /> + + +
                              +
                              +
                              + + + + + + + + + + + + + +
                              + + #1:  + + +
                              + + #2:  + + +
                              + + #3:  + + +
                              + + #4:  + + +
                              +
                              + + + + + +
                              + + onclick="ntp_server_change()" /> + + +
                              +
                              +
                              + + + + + + + +
                              + + #1:  + + +
                              + + #2:  + + +
                              +
                              + + + + + +
                              + + onclick="netbios_change()" /> + + +
                              +
                              +
                              + . +
                              + + + + + + + +
                              +
                              + + :  + + +
                              + . +
                              +
                              + + Scope ID:  + + +
                              + . +
                              +
                              + + + + + +
                              + + onclick="wins_server_change()" /> + + +
                              +
                              +
                              + + + + + + + +
                              + + #1:  + + +
                              + + #2:  + + +
                              +
                              + + + + +
                              +
                              +
                              + ; +
                              +
                                + " /> + + + + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + + + + + + + + " width="17" height="17" border="0" alt="edit" /> + +   + ')"> + " width="17" height="17" border="0" alt="delete" /> + +
                              + " width="17" height="17" border="0" alt="add" /> + +
                              +

                              + +

                              +
                              + + + +
                              + + + + + + diff --git a/usr/local/www/vpn_openvpn_server.php b/usr/local/www/vpn_openvpn_server.php new file mode 100644 index 000000000..98ad956f3 --- /dev/null +++ b/usr/local/www/vpn_openvpn_server.php @@ -0,0 +1,1922 @@ + $acrl) + if (!isset($acrl['refid'])) + unset ($a_crl[$cid]); + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +$act = $_GET['act']; +if (isset($_POST['act'])) + $act = $_POST['act']; + +if (isset($id) && $a_server[$id]) + $vpnid = $a_server[$id]['vpnid']; +else + $vpnid = 0; + +if ($_GET['act'] == "del") { + + if (!isset($a_server[$id])) { + pfSenseHeader("vpn_openvpn_server.php"); + exit; + } + if (!empty($a_server[$id])) + openvpn_delete('server', $a_server[$id]); + unset($a_server[$id]); + write_config(); + $savemsg = gettext("Server successfully deleted")."
                              "; +} + +if($_GET['act']=="new"){ + $pconfig['autokey_enable'] = "yes"; + $pconfig['tlsauth_enable'] = "yes"; + $pconfig['autotls_enable'] = "yes"; + $pconfig['dh_length'] = 1024; + $pconfig['dev_mode'] = "tun"; + $pconfig['interface'] = "wan"; + $pconfig['local_port'] = openvpn_port_next('UDP'); + $pconfig['pool_enable'] = "yes"; + $pconfig['cert_depth'] = 1; + $pconfig['verbosity_level'] = 1; // Default verbosity is 1 + // OpenVPN Defaults to SHA1 + $pconfig['digest'] = "SHA1"; +} + +if($_GET['act']=="edit"){ + + if (isset($id) && $a_server[$id]) { + $pconfig['disable'] = isset($a_server[$id]['disable']); + $pconfig['mode'] = $a_server[$id]['mode']; + $pconfig['protocol'] = $a_server[$id]['protocol']; + $pconfig['authmode'] = $a_server[$id]['authmode']; + $pconfig['dev_mode'] = $a_server[$id]['dev_mode']; + $pconfig['interface'] = $a_server[$id]['interface']; + if (!empty($a_server[$id]['ipaddr'])) { + $pconfig['interface'] = $pconfig['interface'] . '|' . $a_server[$id]['ipaddr']; + } + $pconfig['local_port'] = $a_server[$id]['local_port']; + $pconfig['description'] = $a_server[$id]['description']; + $pconfig['custom_options'] = $a_server[$id]['custom_options']; + + if ($pconfig['mode'] != "p2p_shared_key") { + if ($a_server[$id]['tls']) { + $pconfig['tlsauth_enable'] = "yes"; + $pconfig['tls'] = base64_decode($a_server[$id]['tls']); + } + $pconfig['caref'] = $a_server[$id]['caref']; + $pconfig['crlref'] = $a_server[$id]['crlref']; + $pconfig['certref'] = $a_server[$id]['certref']; + $pconfig['dh_length'] = $a_server[$id]['dh_length']; + if (isset($a_server[$id]['cert_depth'])) + $pconfig['cert_depth'] = $a_server[$id]['cert_depth']; + else + $pconfig['cert_depth'] = 1; + if ($pconfig['mode'] == "server_tls_user") + $pconfig['strictusercn'] = $a_server[$id]['strictusercn']; + } else + $pconfig['shared_key'] = base64_decode($a_server[$id]['shared_key']); + $pconfig['crypto'] = $a_server[$id]['crypto']; + // OpenVPN Defaults to SHA1 if unset + $pconfig['digest'] = !empty($a_server[$id]['digest']) ? $a_server[$id]['digest'] : "SHA1"; + $pconfig['engine'] = $a_server[$id]['engine']; + + $pconfig['tunnel_network'] = $a_server[$id]['tunnel_network']; + $pconfig['tunnel_networkv6'] = $a_server[$id]['tunnel_networkv6']; + + $pconfig['remote_network'] = $a_server[$id]['remote_network']; + $pconfig['remote_networkv6'] = $a_server[$id]['remote_networkv6']; + $pconfig['gwredir'] = $a_server[$id]['gwredir']; + $pconfig['local_network'] = $a_server[$id]['local_network']; + $pconfig['local_networkv6'] = $a_server[$id]['local_networkv6']; + $pconfig['maxclients'] = $a_server[$id]['maxclients']; + $pconfig['compression'] = $a_server[$id]['compression']; + $pconfig['passtos'] = $a_server[$id]['passtos']; + $pconfig['client2client'] = $a_server[$id]['client2client']; + + $pconfig['dynamic_ip'] = $a_server[$id]['dynamic_ip']; + $pconfig['pool_enable'] = $a_server[$id]['pool_enable']; + $pconfig['topology_subnet'] = $a_server[$id]['topology_subnet']; + + $pconfig['serverbridge_dhcp'] = $a_server[$id]['serverbridge_dhcp']; + $pconfig['serverbridge_interface'] = $a_server[$id]['serverbridge_interface']; + $pconfig['serverbridge_dhcp_start'] = $a_server[$id]['serverbridge_dhcp_start']; + $pconfig['serverbridge_dhcp_end'] = $a_server[$id]['serverbridge_dhcp_end']; + + $pconfig['dns_domain'] = $a_server[$id]['dns_domain']; + if ($pconfig['dns_domain']) + $pconfig['dns_domain_enable'] = true; + + $pconfig['dns_server1'] = $a_server[$id]['dns_server1']; + $pconfig['dns_server2'] = $a_server[$id]['dns_server2']; + $pconfig['dns_server3'] = $a_server[$id]['dns_server3']; + $pconfig['dns_server4'] = $a_server[$id]['dns_server4']; + if ($pconfig['dns_server1'] || + $pconfig['dns_server2'] || + $pconfig['dns_server3'] || + $pconfig['dns_server4']) + $pconfig['dns_server_enable'] = true; + + $pconfig['ntp_server1'] = $a_server[$id]['ntp_server1']; + $pconfig['ntp_server2'] = $a_server[$id]['ntp_server2']; + if ($pconfig['ntp_server1'] || + $pconfig['ntp_server2']) + $pconfig['ntp_server_enable'] = true; + + $pconfig['netbios_enable'] = $a_server[$id]['netbios_enable']; + $pconfig['netbios_ntype'] = $a_server[$id]['netbios_ntype']; + $pconfig['netbios_scope'] = $a_server[$id]['netbios_scope']; + + $pconfig['wins_server1'] = $a_server[$id]['wins_server1']; + $pconfig['wins_server2'] = $a_server[$id]['wins_server2']; + if ($pconfig['wins_server1'] || + $pconfig['wins_server2']) + $pconfig['wins_server_enable'] = true; + + $pconfig['client_mgmt_port'] = $a_server[$id]['client_mgmt_port']; + if ($pconfig['client_mgmt_port']) + $pconfig['client_mgmt_port_enable'] = true; + + $pconfig['nbdd_server1'] = $a_server[$id]['nbdd_server1']; + if ($pconfig['nbdd_server1']) + $pconfig['nbdd_server_enable'] = true; + + // just in case the modes switch + $pconfig['autokey_enable'] = "yes"; + $pconfig['autotls_enable'] = "yes"; + + $pconfig['duplicate_cn'] = isset($a_server[$id]['duplicate_cn']); + + $pconfig['no_tun_ipv6'] = $a_server[$id]['no_tun_ipv6']; + if (isset($a_server[$id]['verbosity_level'])) + $pconfig['verbosity_level'] = $a_server[$id]['verbosity_level']; + else + $pconfig['verbosity_level'] = 1; // Default verbosity is 1 + + $pconfig['push_register_dns'] = $a_server[$id]['push_register_dns']; + } +} +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + if (isset($id) && $a_server[$id]) + $vpnid = $a_server[$id]['vpnid']; + else + $vpnid = 0; + + list($iv_iface, $iv_ip) = explode ("|",$pconfig['interface']); + if (is_ipaddrv4($iv_ip) && (stristr($pconfig['protocol'], "6") !== false)) { + $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv6 protocol and an IPv4 IP address."); + } elseif (is_ipaddrv6($iv_ip) && (stristr($pconfig['protocol'], "6") === false)) { + $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv4 protocol and an IPv6 IP address."); + } elseif ((stristr($pconfig['protocol'], "6") === false) && !get_interface_ip($iv_iface) && ($pconfig['interface'] != "any")) { + $input_errors[] = gettext("An IPv4 protocol was selected, but the selected interface has no IPv4 address."); + } elseif ((stristr($pconfig['protocol'], "6") !== false) && !get_interface_ipv6($iv_iface) && ($pconfig['interface'] != "any")) { + $input_errors[] = gettext("An IPv6 protocol was selected, but the selected interface has no IPv6 address."); + } + + if ($pconfig['mode'] != "p2p_shared_key") + $tls_mode = true; + else + $tls_mode = false; + + if (empty($pconfig['authmode']) && (($pconfig['mode'] == "server_user") || ($pconfig['mode'] == "server_tls_user"))) + $input_errors[] = gettext("You must select a Backend for Authentication if the server mode requires User Auth."); + + /* input validation */ + if ($result = openvpn_validate_port($pconfig['local_port'], 'Local port')) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['tunnel_network'], 'IPv4 Tunnel Network', false, "ipv4")) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['tunnel_networkv6'], 'IPv6 Tunnel Network', false, "ipv6")) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['remote_network'], 'IPv4 Remote Network', true, "ipv4")) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['remote_networkv6'], 'IPv6 Remote Network', true, "ipv6")) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['local_network'], 'IPv4 Local Network', true, "ipv4")) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($pconfig['local_networkv6'], 'IPv6 Local Network', true, "ipv6")) + $input_errors[] = $result; + + $portused = openvpn_port_used($pconfig['protocol'], $pconfig['interface'], $pconfig['local_port'], $vpnid); + if (($portused != $vpnid) && ($portused != 0)) + $input_errors[] = gettext("The specified 'Local port' is in use. Please select another value"); + + if ($pconfig['autokey_enable']) + $pconfig['shared_key'] = openvpn_create_key(); + + if (!$tls_mode && !$pconfig['autokey_enable']) + if (!strstr($pconfig['shared_key'], "-----BEGIN OpenVPN Static key V1-----") || + !strstr($pconfig['shared_key'], "-----END OpenVPN Static key V1-----")) + $input_errors[] = gettext("The field 'Shared Key' does not appear to be valid"); + + if ($tls_mode && $pconfig['tlsauth_enable'] && !$pconfig['autotls_enable']) + if (!strstr($pconfig['tls'], "-----BEGIN OpenVPN Static key V1-----") || + !strstr($pconfig['tls'], "-----END OpenVPN Static key V1-----")) + $input_errors[] = gettext("The field 'TLS Authentication Key' does not appear to be valid"); + + if ($pconfig['dns_server_enable']) { + if (!empty($pconfig['dns_server1']) && !is_ipaddr(trim($pconfig['dns_server1']))) + $input_errors[] = gettext("The field 'DNS Server #1' must contain a valid IP address"); + if (!empty($pconfig['dns_server2']) && !is_ipaddr(trim($pconfig['dns_server2']))) + $input_errors[] = gettext("The field 'DNS Server #2' must contain a valid IP address"); + if (!empty($pconfig['dns_server3']) && !is_ipaddr(trim($pconfig['dns_server3']))) + $input_errors[] = gettext("The field 'DNS Server #3' must contain a valid IP address"); + if (!empty($pconfig['dns_server4']) && !is_ipaddr(trim($pconfig['dns_server4']))) + $input_errors[] = gettext("The field 'DNS Server #4' must contain a valid IP address"); + } + + if ($pconfig['ntp_server_enable']) { + if (!empty($pconfig['ntp_server1']) && !is_ipaddr(trim($pconfig['ntp_server1']))) + $input_errors[] = gettext("The field 'NTP Server #1' must contain a valid IP address"); + if (!empty($pconfig['ntp_server2']) && !is_ipaddr(trim($pconfig['ntp_server2']))) + $input_errors[] = gettext("The field 'NTP Server #2' must contain a valid IP address"); + if (!empty($pconfig['ntp_server3']) && !is_ipaddr(trim($pconfig['ntp_server3']))) + $input_errors[] = gettext("The field 'NTP Server #3' must contain a valid IP address"); + if (!empty($pconfig['ntp_server4']) && !is_ipaddr(trim($pconfig['ntp_server4']))) + $input_errors[] = gettext("The field 'NTP Server #4' must contain a valid IP address"); + } + + if ($pconfig['netbios_enable']) { + if ($pconfig['wins_server_enable']) { + if (!empty($pconfig['wins_server1']) && !is_ipaddr(trim($pconfig['wins_server1']))) + $input_errors[] = gettext("The field 'WINS Server #1' must contain a valid IP address"); + if (!empty($pconfig['wins_server2']) && !is_ipaddr(trim($pconfig['wins_server2']))) + $input_errors[] = gettext("The field 'WINS Server #2' must contain a valid IP address"); + } + if ($pconfig['nbdd_server_enable']) + if (!empty($pconfig['nbdd_server1']) && !is_ipaddr(trim($pconfig['nbdd_server1']))) + $input_errors[] = gettext("The field 'NetBIOS Data Distribution Server #1' must contain a valid IP address"); + } + + if ($pconfig['client_mgmt_port_enable']) { + if ($result = openvpn_validate_port($pconfig['client_mgmt_port'], 'Client management port')) + $input_errors[] = $result; + } + + if ($pconfig['maxclients'] && !is_numeric($pconfig['maxclients'])) + $input_errors[] = gettext("The field 'Concurrent connections' must be numeric."); + + /* If we are not in shared key mode, then we need the CA/Cert. */ + if ($pconfig['mode'] != "p2p_shared_key") { + $reqdfields = explode(" ", "caref certref"); + $reqdfieldsn = array(gettext("Certificate Authority"),gettext("Certificate")); + } elseif (!$pconfig['autokey_enable']) { + /* We only need the shared key filled in if we are in shared key mode and autokey is not selected. */ + $reqdfields = array('shared_key'); + $reqdfieldsn = array(gettext('Shared key')); + } + + if ($pconfig['dev_mode'] != "tap") { + $reqdfields[] = 'tunnel_network'; + $reqdfieldsn[] = gettext('Tunnel network'); + } else { + if ($pconfig['serverbridge_dhcp'] && $pconfig['tunnel_network']) + $input_errors[] = gettext("Using a tunnel network and server bridge settings together is not allowed."); + if (($pconfig['serverbridge_dhcp_start'] && !$pconfig['serverbridge_dhcp_end']) + || (!$pconfig['serverbridge_dhcp_start'] && $pconfig['serverbridge_dhcp_end'])) + $input_errors[] = gettext("Server Bridge DHCP Start and End must both be empty, or defined."); + if (($pconfig['serverbridge_dhcp_start'] && !is_ipaddrv4($pconfig['serverbridge_dhcp_start']))) + $input_errors[] = gettext("Server Bridge DHCP Start must be an IPv4 address."); + if (($pconfig['serverbridge_dhcp_end'] && !is_ipaddrv4($pconfig['serverbridge_dhcp_end']))) + $input_errors[] = gettext("Server Bridge DHCP End must be an IPv4 address."); + if (ip2ulong($pconfig['serverbridge_dhcp_start']) > ip2ulong($pconfig['serverbridge_dhcp_end'])) + $input_errors[] = gettext("The Server Bridge DHCP range is invalid (start higher than end)."); + } + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (!$input_errors) { + + $server = array(); + + if ($id && $pconfig['dev_mode'] <> $a_server[$id]['dev_mode']) + openvpn_delete('server', $a_server[$id]);// delete(rename) old interface so a new TUN or TAP interface can be created. + + if ($vpnid) + $server['vpnid'] = $vpnid; + else + $server['vpnid'] = openvpn_vpnid_next(); + + if ($_POST['disable'] == "yes") + $server['disable'] = true; + $server['mode'] = $pconfig['mode']; + if (!empty($pconfig['authmode'])) + $server['authmode'] = implode(",", $pconfig['authmode']); + $server['protocol'] = $pconfig['protocol']; + $server['dev_mode'] = $pconfig['dev_mode']; + list($server['interface'], $server['ipaddr']) = explode ("|",$pconfig['interface']); + $server['local_port'] = $pconfig['local_port']; + $server['description'] = $pconfig['description']; + $server['custom_options'] = str_replace("\r\n", "\n", $pconfig['custom_options']); + + if ($tls_mode) { + if ($pconfig['tlsauth_enable']) { + if ($pconfig['autotls_enable']) + $pconfig['tls'] = openvpn_create_key(); + $server['tls'] = base64_encode($pconfig['tls']); + } + $server['caref'] = $pconfig['caref']; + $server['crlref'] = $pconfig['crlref']; + $server['certref'] = $pconfig['certref']; + $server['dh_length'] = $pconfig['dh_length']; + $server['cert_depth'] = $pconfig['cert_depth']; + if ($pconfig['mode'] == "server_tls_user") + $server['strictusercn'] = $pconfig['strictusercn']; + } else { + $server['shared_key'] = base64_encode($pconfig['shared_key']); + } + $server['crypto'] = $pconfig['crypto']; + $server['digest'] = $pconfig['digest']; + $server['engine'] = $pconfig['engine']; + + $server['tunnel_network'] = $pconfig['tunnel_network']; + $server['tunnel_networkv6'] = $pconfig['tunnel_networkv6']; + $server['remote_network'] = $pconfig['remote_network']; + $server['remote_networkv6'] = $pconfig['remote_networkv6']; + $server['gwredir'] = $pconfig['gwredir']; + $server['local_network'] = $pconfig['local_network']; + $server['local_networkv6'] = $pconfig['local_networkv6']; + $server['maxclients'] = $pconfig['maxclients']; + $server['compression'] = $pconfig['compression']; + $server['passtos'] = $pconfig['passtos']; + $server['client2client'] = $pconfig['client2client']; + + $server['dynamic_ip'] = $pconfig['dynamic_ip']; + $server['pool_enable'] = $pconfig['pool_enable']; + $server['topology_subnet'] = $pconfig['topology_subnet']; + + $server['serverbridge_dhcp'] = $pconfig['serverbridge_dhcp']; + $server['serverbridge_interface'] = $pconfig['serverbridge_interface']; + $server['serverbridge_dhcp_start'] = $pconfig['serverbridge_dhcp_start']; + $server['serverbridge_dhcp_end'] = $pconfig['serverbridge_dhcp_end']; + + if ($pconfig['dns_domain_enable']) + $server['dns_domain'] = $pconfig['dns_domain']; + + if ($pconfig['dns_server_enable']) { + $server['dns_server1'] = $pconfig['dns_server1']; + $server['dns_server2'] = $pconfig['dns_server2']; + $server['dns_server3'] = $pconfig['dns_server3']; + $server['dns_server4'] = $pconfig['dns_server4']; + } + + if ($pconfig['push_register_dns']) + $server['push_register_dns'] = $pconfig['push_register_dns']; + + if ($pconfig['ntp_server_enable']) { + $server['ntp_server1'] = $pconfig['ntp_server1']; + $server['ntp_server2'] = $pconfig['ntp_server2']; + } + + $server['netbios_enable'] = $pconfig['netbios_enable']; + $server['netbios_ntype'] = $pconfig['netbios_ntype']; + $server['netbios_scope'] = $pconfig['netbios_scope']; + + $server['no_tun_ipv6'] = $pconfig['no_tun_ipv6']; + $server['verbosity_level'] = $pconfig['verbosity_level']; + + if ($pconfig['netbios_enable']) { + + if ($pconfig['wins_server_enable']) { + $server['wins_server1'] = $pconfig['wins_server1']; + $server['wins_server2'] = $pconfig['wins_server2']; + } + + if ($pconfig['dns_server_enable']) + $server['nbdd_server1'] = $pconfig['nbdd_server1']; + } + + if ($pconfig['client_mgmt_port_enable']) + $server['client_mgmt_port'] = $pconfig['client_mgmt_port']; + + if ($_POST['duplicate_cn'] == "yes") + $server['duplicate_cn'] = true; + + if (isset($id) && $a_server[$id]) + $a_server[$id] = $server; + else + $a_server[] = $server; + + openvpn_resync('server', $server); + write_config(); + + header("Location: vpn_openvpn_server.php"); + exit; + } + if (!empty($pconfig['authmode'])) + $pconfig['authmode'] = implode(",", $pconfig['authmode']); +} +$pgtitle = array(gettext("OpenVPN"), gettext("Server")); +$shortcut_section = "openvpn"; + +include("head.inc"); + +?> + +"> + + + + + + + + + + +
                              + +
                              + + + +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + + + + + +
                              + + /> + +   + +
                              +
                              +
                              + . +
                              + +
                              + +
                              + +
                              +
                              +
                              + +
                              + +
                              + . +
                              + + + + + +
                              + + onclick="tlsauth_change()" /> + + + . + +
                              + + + + + + +
                              + + onclick="autotls_change()" /> + + + . + +
                              + + + + + +
                              + +
                              + . +
                              +
                              + + + + No Certificate Authorities defined.
                              Create one under System > Cert Manager. + +
                              + + + + No Certificate Revocation Lists (CRLs) defined.
                              Create one under System > Cert Manager. + +
                              + + + + No Certificates defined.
                              Create one under System > Cert Manager. + +
                              + + + + +
                              + + + + + + +
                              + + onclick="autokey_change()" /> + + + . + +
                              + + + + + +
                              + +
                              + . +
                              +
                              + +
                              + +
                              +
                              + +
                              + + + +
                              + +
                              + + + +
                              +
                              + + + + + +
                              + + /> + + + + +
                              +
                              + +
                              + +
                              + +
                              + +
                              + + + + + +
                              + + onchange="tuntap_change()" /> + + +
                              +
                              +
                              +
                              +
                              + +
                              + +
                              + +
                              + +
                              +
                              + + + + + +
                              + + onclick="gwredir_change()" /> + + + . + +
                              +
                              + +
                              + . +
                              + +
                              + . +
                              + +
                              + . +
                              + +
                              + . +
                              + +
                              + . +
                              + +
                              + . +
                              + + + + + +
                              + + /> + + + . + +
                              +
                              + + + + + +
                              + + /> + + + + +
                              +
                              + + + + + +
                              + + /> + + + NOTE: This is not generally recommended, but may be needed for some scenarios."); ?> + +
                              +
                              + + + + + +
                              + + /> + + + . + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + + + + + +
                              + + /> + + + .
                              +
                              +
                              +
                              + + + + + +
                              + + /> + + +
                              +
                              +
                              +
                              + + + + + + + + + +
                              + + /> + + +
                              +
                              +
                                +
                              +
                              +
                              +
                              + + + + + +
                              + + onclick="dns_domain_change()" /> + + +
                              +
                              +
                              + + + + +
                              + +
                              +
                              + + + + + +
                              + + onclick="dns_server_change()" /> + + +
                              +
                              +
                              + + + + + + + + + + + + + +
                              + + #1:  + + +
                              + + #2:  + + +
                              + + #3:  + + +
                              + + #4:  + + +
                              +
                              + + + + + +
                              + + /> + + +
                              +
                              +
                              +
                              + + + + + +
                              + + onclick="ntp_server_change()" /> + + +
                              +
                              +
                              + + + + + + + +
                              + + #1:  + + +
                              + + #2:  + + +
                              +
                              + + + + + +
                              + + onclick="netbios_change()" /> + + +
                              +
                              +
                              + . +
                              + + + + + + + +
                              +
                              + + :  + + +
                              + . +
                              +
                              + + :  + + +
                              + . +
                              +
                              + + + + + +
                              + + onclick="wins_server_change()" /> + + +
                              +
                              +
                              + + + + + + + +
                              + + #1:  + + +
                              + + #2:  + + +
                              +
                              + + + + + +
                              + + onclick="client_mgmt_port_change()" /> + + +
                              +
                              +
                              + + + + +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + +
                              + + + + +
                              +
                              +
                              + ; +
                              +
                              + +
                              + .

                              + none -- .
                              + default-4 -- .
                              + 5 -- .
                              + 6-11 -- . +
                              + +
                              + + + + + +
                                + " /> + + + + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + " width="17" height="17" border="0" alt="add" /> + +
                              + + + / + +
                              +
                              +
                              + + + + " width="17" height="17" border="0" alt="edit" /> + +   + ')"> + " width="17" height="17" border="0" alt="delete" /> + +
                              + + + + + +
                              + + + + + diff --git a/usr/local/www/vpn_pppoe.php b/usr/local/www/vpn_pppoe.php new file mode 100644 index 000000000..0ade0d4d1 --- /dev/null +++ b/usr/local/www/vpn_pppoe.php @@ -0,0 +1,155 @@ + + + + +
                              + +
                              +" . gettext("You must apply the changes in order for them to take effect."));?> + + + + + + + + + + + + + + + + + + + + + + + +
                              + + + + + +
                               " alt="add" />
                              +
                              + + + + + + +   + + + + + + +
                              " alt="edit" />')">" alt="delete" />
                              +
                              + + + + + +
                               " alt="add" />
                              +
                              +
                              + + + diff --git a/usr/local/www/vpn_pppoe_edit.php b/usr/local/www/vpn_pppoe_edit.php new file mode 100644 index 000000000..96b9cdcda --- /dev/null +++ b/usr/local/www/vpn_pppoe_edit.php @@ -0,0 +1,631 @@ += $subnet_start) && + (ip2ulong($_POST['localip']) <= $subnet_end)) + $input_errors[] = gettext("The specified server address lies in the remote subnet."); + if ($_POST['localip'] == get_interface_ip($_POST['interface'])) + $input_errors[] = gettext("The specified server address is equal to an interface ip address."); + + for($x=0; $x<4999; $x++) { + if ($_POST["username{$x}"]) { + if (empty($_POST["password{$x}"])) + $input_errors[] = sprintf(gettext("No password specified for username %s"),$_POST["username{$x}"]); + if ($_POST["ip{$x}"] <> "" && !is_ipaddr($_POST["ip{$x}"])) + $input_errors[] = sprintf(gettext("Incorrect ip address specified for username %s"),$_POST["username{$x}"]); + } + } + } + + if ($_POST['pppoeid'] && !is_numeric($_POST['pppoeid'])) + $input_errors[] = gettext("Wrong data submitted"); + + if (!$input_errors) { + $pppoecfg = array(); + + $pppoecfg['remoteip'] = $_POST['remoteip']; + $pppoecfg['localip'] = $_POST['localip']; + $pppoecfg['mode'] = $_POST['mode']; + $pppoecfg['interface'] = $_POST['interface']; + $pppoecfg['n_pppoe_units'] = $_POST['n_pppoe_units']; + $pppoecfg['pppoe_subnet'] = $_POST['pppoe_subnet']; + $pppoecfg['descr'] = $_POST['descr']; + if ($_POST['radiusserver'] || $_POST['radiusserver2']) { + $pppoecfg['radius'] = array(); + + $pppoecfg['radius']['nasip'] = $_POST['radius_nasip']; + $pppoecfg['radius']['acct_update'] = $_POST['radius_acct_update']; + } + if ($_POST['radiusserver']) { + $pppoecfg['radius']['server'] = array(); + + $pppoecfg['radius']['server']['ip'] = $_POST['radiusserver']; + $pppoecfg['radius']['server']['secret'] = $_POST['radiussecret']; + $pppoecfg['radius']['server']['port'] = $_POST['radiusserverport']; + $pppoecfg['radius']['server']['acctport'] = $_POST['radiusserveracctport']; + } + if ($_POST['radiusserver2']) { + $pppoecfg['radius']['server2'] = array(); + + $pppoecfg['radius']['server2']['ip'] = $_POST['radiusserver2']; + $pppoecfg['radius']['server2']['secret2'] = $_POST['radiussecret2']; + $pppoecfg['radius']['server2']['port'] = $_POST['radiusserver2port']; + $pppoecfg['radius']['server2']['acctport'] = $_POST['radiusserver2acctport']; + } + + if ($_POST['pppoe_dns1'] <> "") + $pppoecfg['dns1'] = $_POST['pppoe_dns1']; + + if ($_POST['pppoe_dns2'] <> "") + $pppoecfg['dns2'] = $_POST['pppoe_dns2']; + + if($_POST['radiusenable'] == "yes") + $pppoecfg['radius']['server']['enable'] = true; + + if($_POST['radiussecenable'] == "yes") + $pppoecfg['radius']['server2']['enable'] = true; + + if($_POST['radacct_enable'] == "yes") + $pppoecfg['radius']['accounting'] = true; + + if($_POST['radiusissueips'] == "yes") + $pppoecfg['radius']['radiusissueips'] = true; + + if($_POST['pppoeid']) + $pppoecfg['pppoeid'] = $_POST['pppoeid']; + else + $pppoecfg['pppoeid'] = vpn_pppoe_get_id(); + + $users = array(); + for($x=0; $x<4999; $x++) { + if ($_POST["username{$x}"]) { + $usernam = $_POST["username{$x}"] . ":" . base64_encode($_POST["password{$x}"]); + if ($_POST["ip{$x}"]) + $usernam .= ":" . $_POST["ip{$x}"]; + $users[] = $usernam; + } + } + if (count($users) > 0) + $pppoecfg['username'] = implode(" ", $users); + + if (!isset($id)) + $id = count($a_pppoes); + if (file_exists("{$g['tmp_path']}/.vpn_pppoe.apply")) + $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.vpn_pppoe.apply")); + else + $toapplylist = array(); + + $toapplylist[] = $pppoecfg['pppoeid']; + $a_pppoes[$id] = $pppoecfg; + + write_config(); + mark_subsystem_dirty('vpnpppoe'); + file_put_contents("{$g['tmp_path']}/.vpn_pppoe.apply", serialize($toapplylist)); + header("Location: vpn_pppoe.php"); + exit; + } +} + +$pgtitle = array(gettext("Services"),gettext("PPPoE Server"), gettext("Edit")); +$shortcut_section = "pppoes"; +include("head.inc"); + +?> + + + + + + + + + + + + +
                              + + + + + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                + /> + +
                                + /> +
                              + +
                              + +
                              + +
                              : 24 255.255.255.0 +
                              + +
                              +
                              + +
                              + . +
                              + . +
                              +
                              + .
                              + +
                              + .
                              +
                              + +
                              +
                              + +
                              + +
                              +
                              +
                              + /> +
                              +
                              .
                              +
                              + /> +
                              +
                              +
                              .
                              + /> +
                              +
                              + +

                              +
                              + +
                              +
                              + /> +
                              .
                              + + + +

                              +
                              + +
                              .
                              + + + +

                              +
                              + +
                              + .
                              + + + + + + + + ""): + $item = explode(" ", $usernames); + foreach($item as $ww): + $wws = explode(":", $ww); + $user = $wws[0]; + $passwd = base64_decode($wws[1]); + $ip = $wws[2]; + $tracker = $counter; +?> + + + + + + + + +
                              + + + + + + + delete +
                              + + " /> + +
                                +"; +?> +"; +?> + " onclick="enable_change(true)" /> + " /> +
                               :
                              +
                              !
                              +
                              +
                              +
                              + + + + diff --git a/usr/local/www/vpn_pptp.php b/usr/local/www/vpn_pptp.php new file mode 100644 index 000000000..f3168ae06 --- /dev/null +++ b/usr/local/www/vpn_pptp.php @@ -0,0 +1,503 @@ +. + 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. +*/ + +##|+PRIV +##|*IDENT=page-vpn-vpnpptp +##|*NAME=VPN: VPN PPTP page +##|*DESCR=Allow access to the 'VPN: VPN PPTP' page. +##|*MATCH=vpn_pptp.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("functions.inc"); +require_once("filter.inc"); +require_once("shaper.inc"); +require_once("vpn.inc"); + +if (!is_array($config['pptpd']['radius'])) { + $config['pptpd']['radius'] = array(); +} +$pptpcfg = &$config['pptpd']; + +$pconfig['remoteip'] = $pptpcfg['remoteip']; +$pconfig['localip'] = $pptpcfg['localip']; +$pconfig['redir'] = $pptpcfg['redir']; +$pconfig['mode'] = $pptpcfg['mode']; +$pconfig['wins'] = $pptpcfg['wins']; +$pconfig['req128'] = isset($pptpcfg['req128']); +$pconfig['n_pptp_units'] = $pptpcfg['n_pptp_units']; +$pconfig['pptp_dns1'] = $pptpcfg['dns1']; +$pconfig['pptp_dns2'] = $pptpcfg['dns2']; +$pconfig['radiusenable'] = isset($pptpcfg['radius']['server']['enable']); +$pconfig['radiusissueips'] = isset($pptpcfg['radius']['radiusissueips']); +$pconfig['radiussecenable'] = isset($pptpcfg['radius']['server2']['enable']); +$pconfig['radacct_enable'] = isset($pptpcfg['radius']['accounting']); +$pconfig['radiusserver'] = $pptpcfg['radius']['server']['ip']; +$pconfig['radiusserverport'] = $pptpcfg['radius']['server']['port']; +$pconfig['radiusserveracctport'] = $pptpcfg['radius']['server']['acctport']; +$pconfig['radiussecret'] = $pptpcfg['radius']['server']['secret']; +$pconfig['radiusserver2'] = $pptpcfg['radius']['server2']['ip']; +$pconfig['radiusserver2port'] = $pptpcfg['radius']['server2']['port']; +$pconfig['radiusserver2acctport'] = $pptpcfg['radius']['server2']['acctport']; +$pconfig['radiussecret2'] = $pptpcfg['radius']['server2']['secret2']; +$pconfig['radius_acct_update'] = $pptpcfg['radius']['acct_update']; +$pconfig['radius_nasip'] = $pptpcfg['radius']['nasip']; + +if ($_POST) { + + if (isset($input_errors)) + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + if ($_POST['mode'] == "server") { + $reqdfields = explode(" ", "localip remoteip"); + $reqdfieldsn = array(gettext("Server address"),gettext("Remote start address")); + + if ($_POST['radiusenable']) { + $reqdfields = array_merge($reqdfields, explode(" ", "radiusserver radiussecret")); + $reqdfieldsn = array_merge($reqdfieldsn, + array(gettext("RADIUS server address"),gettext("RADIUS shared secret"))); + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (($_POST['localip'] && !is_ipaddr($_POST['localip']))) { + $input_errors[] = gettext("A valid server address must be specified."); + } + if (is_ipaddr_configured($_POST['localip'])) { + $input_errors[] = gettext("'Server address' parameter should NOT be set to any IP address currently in use on this firewall."); + } + if (!is_ipaddr($_POST['remoteip'])) { + $input_errors[] = gettext("A valid remote start address must be specified."); + } + if (($_POST['radiusserver'] && !is_ipaddr($_POST['radiusserver']))) { + $input_errors[] = gettext("A valid RADIUS server address must be specified."); + } + + if (!$input_errors) { + $subnet_start = ip2ulong($_POST['remoteip']); + $subnet_end = ip2ulong($_POST['remoteip']) + $_POST['n_pptp_units'] - 1; + + if ((ip2ulong($_POST['localip']) >= $subnet_start) && + (ip2ulong($_POST['localip']) <= $subnet_end)) { + $input_errors[] = gettext("The specified server address lies in the remote subnet."); + } + // TODO: Should this check be for any local IP address? + if ($_POST['localip'] == $config['interfaces']['lan']['ipaddr']) { + $input_errors[] = gettext("The specified server address is equal to the LAN interface address."); + } + } + } else if ($_POST['mode'] == "redir") { + $reqdfields = explode(" ", "redir"); + $reqdfieldsn = array(gettext("PPTP redirection target address")); + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (($_POST['redir'] && !is_ipaddr($_POST['redir']))) { + $input_errors[] = gettext("A valid target address must be specified."); + } + } else if (isset($config['pptpd']['mode'])) { + unset($config['pptpd']['mode']); + } + + if (!$input_errors) { + $pptpcfg['remoteip'] = $_POST['remoteip']; + $pptpcfg['redir'] = $_POST['redir']; + $pptpcfg['localip'] = $_POST['localip']; + $pptpcfg['mode'] = $_POST['mode']; + $pptpcfg['wins'] = $_POST['wins']; + $pptpcfg['n_pptp_units'] = $_POST['n_pptp_units']; + $pptpcfg['radius']['server']['ip'] = $_POST['radiusserver']; + $pptpcfg['radius']['server']['port'] = $_POST['radiusserverport']; + $pptpcfg['radius']['server']['acctport'] = $_POST['radiusserveracctport']; + $pptpcfg['radius']['server']['secret'] = $_POST['radiussecret']; + $pptpcfg['radius']['server2']['ip'] = $_POST['radiusserver2']; + $pptpcfg['radius']['server2']['port'] = $_POST['radiusserver2port']; + $pptpcfg['radius']['server2']['acctport'] = $_POST['radiusserver2acctport']; + $pptpcfg['radius']['server2']['secret2'] = $_POST['radiussecret2']; + $pptpcfg['radius']['nasip'] = $_POST['radius_nasip']; + $pptpcfg['radius']['acct_update'] = $_POST['radius_acct_update']; + + if ($_POST['pptp_dns1'] == "") { + if (isset($pptpcfg['dns1'])) + unset($pptpcfg['dns1']); + } else + $pptpcfg['dns1'] = $_POST['pptp_dns1']; + + if ($_POST['pptp_dns2'] == "") { + if (isset($pptpcfg['dns2'])) + unset($pptpcfg['dns2']); + } else + $pptpcfg['dns2'] = $_POST['pptp_dns2']; + + if($_POST['req128'] == "yes") + $pptpcfg['req128'] = true; + else if (isset($pptpcfg['req128'])) + unset($pptpcfg['req128']); + + if($_POST['radiusenable'] == "yes") + $pptpcfg['radius']['server']['enable'] = true; + else if (isset($pptpcfg['radius']['server']['enable'])) + unset($pptpcfg['radius']['server']['enable']); + + if($_POST['radiussecenable'] == "yes") + $pptpcfg['radius']['server2']['enable'] = true; + else if (isset($pptpcfg['radius']['server2']['enable'])) + unset($pptpcfg['radius']['server2']['enable']); + + if($_POST['radacct_enable'] == "yes") + $pptpcfg['radius']['accounting'] = true; + else if (isset($pptpcfg['radius']['accounting'])) + unset($pptpcfg['radius']['accounting']); + + if($_POST['radiusissueips'] == "yes") { + $pptpcfg['radius']['radiusissueips'] = true; + } else if (isset($pptpcfg['radius']['radiusissueips'])) + unset($pptpcfg['radius']['radiusissueips']); + + write_config(); + + $retval = 0; + $retval = vpn_pptpd_configure(); + $savemsg = get_std_save_message($retval); + + filter_configure(); + } +} + +$pgtitle = array(gettext("VPN"),gettext("VPN PPTP")); +$shortcut_section = "pptps"; +include("head.inc"); + +?> + + + + +
                              + + +
                              Read More")); ?> + + + + + +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                + /> +
                                + + /> + :
                              + +
                              + .
                                + /> +
                              + +
                              +
                              + +
                              + . +
                              + . +
                              +
                              + .
                              + +
                              + .
                              +
                              + +
                              + +
                              +
                              +
                              + +
                              + /> +
                              + .
                              +
                              + /> +
                              +
                              .
                              +
                              + /> +
                              +
                              +
                              + /> + +
                              . +
                              + +
                              + +
                              + + + +
                              + .
                              + +
                              + .
                              + + + +
                              + .
                              + +
                              + .
                                + /> +
                              + .
                                + " onclick="enable_change(true)" /> +
                               :
                              +
                              !
                              +
                              +
                              +
                              + + + + diff --git a/usr/local/www/vpn_pptp_users.php b/usr/local/www/vpn_pptp_users.php new file mode 100644 index 000000000..9b3443a75 --- /dev/null +++ b/usr/local/www/vpn_pptp_users.php @@ -0,0 +1,141 @@ +. + 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. +*/ + +##|+PRIV +##|*IDENT=page-vpn-vpnpptp-users +##|*NAME=VPN: VPN PPTP: Users page +##|*DESCR=Allow access to the 'VPN: VPN PPTP: Users' page. +##|*MATCH=vpn_pptp_users.php* +##|-PRIV + +require("guiconfig.inc"); +require_once("vpn.inc"); + +if (!is_array($config['pptpd']['user'])) { + $config['pptpd']['user'] = array(); +} +$a_secret = &$config['pptpd']['user']; + +if ($_POST) { + + $pconfig = $_POST; + + if ($_POST['apply']) { + $retval = 0; + $retval = vpn_setup(); + $savemsg = get_std_save_message($retval); + if ($retval == 0) { + if (is_subsystem_dirty('pptpusers')) + clear_subsystem_dirty('pptpusers'); + } + } +} + +if ($_GET['act'] == "del") { + if ($a_secret[$_GET['id']]) { + unset($a_secret[$_GET['id']]); + write_config(); + mark_subsystem_dirty('pptpusers'); + header("Location: vpn_pptp_users.php"); + exit; + } +} + +$pgtitle = array(gettext("VPN"),gettext("VPN PPTP"),gettext("Users")); +$shortcut_section = "pptps"; +include("head.inc"); + +?> + + + +
                              + + +
                              +".gettext("You must apply the changes in order for them to take effect").".
                              ".gettext("Warning: this will terminate all current PPTP sessions")."!");?>
                              + + + + + + +
                              +
                              + +
                              + + + + diff --git a/usr/local/www/vpn_pptp_users_edit.php b/usr/local/www/vpn_pptp_users_edit.php new file mode 100644 index 000000000..7b8baa5dc --- /dev/null +++ b/usr/local/www/vpn_pptp_users_edit.php @@ -0,0 +1,182 @@ +. + 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. +*/ + +##|+PRIV +##|*IDENT=page-vpn-vpnpptp-user-edit +##|*NAME=VPN: VPN PPTP: User: Edit page +##|*DESCR=Allow access to the 'VPN: VPN PPTP: User: Edit' page. +##|*MATCH=vpn_pptp_users_edit.php* +##|-PRIV + +function pptpusercmp($a, $b) { + return strcasecmp($a['name'], $b['name']); +} + +function pptpd_users_sort() { + global $config; + + if (!is_array($config['ppptpd']['user'])) + return; + + usort($config['pptpd']['user'], "pptpusercmp"); +} + +require("guiconfig.inc"); +require_once("vpn.inc"); + +if (!is_array($config['pptpd']['user'])) { + $config['pptpd']['user'] = array(); +} +$a_secret = &$config['pptpd']['user']; + +if (is_numericint($_GET['id'])) + $id = $_GET['id']; +if (isset($_POST['id']) && is_numericint($_POST['id'])) + $id = $_POST['id']; + +if (isset($id) && $a_secret[$id]) { + $pconfig['username'] = $a_secret[$id]['name']; + $pconfig['ip'] = $a_secret[$id]['ip']; +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* input validation */ + if (isset($id) && ($a_secret[$id])) { + $reqdfields = explode(" ", "username"); + $reqdfieldsn = array(gettext("Username")); + } else { + $reqdfields = explode(" ", "username password"); + $reqdfieldsn = array(gettext("Username"),gettext("Password")); + } + + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); + + if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['username'])) + $input_errors[] = gettext("The username contains invalid characters."); + + if (preg_match("/^!/", $_POST['password'])) + $input_errors[] = gettext("The password cannot start with '!'."); + + if (!preg_match("/^[\x20-\x7E]*$/", $_POST['password'])) + $input_errors[] = gettext("The password contains invalid characters."); + + if (($_POST['password']) && ($_POST['password'] != $_POST['password2'])) { + $input_errors[] = gettext("The passwords do not match."); + } + if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) { + $input_errors[] = gettext("The IP address entered is not valid."); + } + + if (!$input_errors && !(isset($id) && $a_secret[$id])) { + /* make sure there are no dupes */ + foreach ($a_secret as $secretent) { + if ($secretent['name'] == $_POST['username']) { + $input_errors[] = gettext("Another entry with the same username already exists."); + break; + } + } + } + + if (!$input_errors) { + + if (isset($id) && $a_secret[$id]) + $secretent = $a_secret[$id]; + + $secretent['name'] = $_POST['username']; + $secretent['ip'] = $_POST['ip']; + + if ($_POST['password']) + $secretent['password'] = $_POST['password']; + + if (isset($id) && $a_secret[$id]) + $a_secret[$id] = $secretent; + else + $a_secret[] = $secretent; + pptpd_users_sort(); + + write_config(); + mark_subsystem_dirty('pptpusers'); + + header("Location: vpn_pptp_users.php"); + exit; + } +} + +$pgtitle = array(gettext("VPN"),gettext("VPN PPTP"),gettext("User"),gettext("Edit")); +$shortcut_section = "pptps"; +include("head.inc"); + +?> + + + +
                              +
                              + + + + + + + + + + + + + + + + + +
                              + +
                              + +
                              +  ()
                              +
                              + +
                                + " /> + + + +
                              +
                              +
                              + + + diff --git a/usr/local/www/widgets/include/captiveportal.inc b/usr/local/www/widgets/include/captiveportal.inc new file mode 100644 index 000000000..371420939 --- /dev/null +++ b/usr/local/www/widgets/include/captiveportal.inc @@ -0,0 +1,4 @@ + diff --git a/usr/local/www/widgets/include/carp_status.inc b/usr/local/www/widgets/include/carp_status.inc new file mode 100644 index 000000000..79d3c03de --- /dev/null +++ b/usr/local/www/widgets/include/carp_status.inc @@ -0,0 +1,7 @@ + diff --git a/usr/local/www/widgets/include/dyn_dns_status.inc b/usr/local/www/widgets/include/dyn_dns_status.inc new file mode 100644 index 000000000..8116fe756 --- /dev/null +++ b/usr/local/www/widgets/include/dyn_dns_status.inc @@ -0,0 +1,7 @@ + diff --git a/usr/local/www/widgets/include/gateways.inc b/usr/local/www/widgets/include/gateways.inc new file mode 100644 index 000000000..46666899b --- /dev/null +++ b/usr/local/www/widgets/include/gateways.inc @@ -0,0 +1,5 @@ + diff --git a/usr/local/www/widgets/include/installed_packages.inc b/usr/local/www/widgets/include/installed_packages.inc new file mode 100644 index 000000000..a9781914a --- /dev/null +++ b/usr/local/www/widgets/include/installed_packages.inc @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/usr/local/www/widgets/include/interface_statistics.inc b/usr/local/www/widgets/include/interface_statistics.inc new file mode 100644 index 000000000..c789418c0 --- /dev/null +++ b/usr/local/www/widgets/include/interface_statistics.inc @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/usr/local/www/widgets/include/interfaces.inc b/usr/local/www/widgets/include/interfaces.inc new file mode 100644 index 000000000..6c19a6b9c --- /dev/null +++ b/usr/local/www/widgets/include/interfaces.inc @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/usr/local/www/widgets/include/ipsec.inc b/usr/local/www/widgets/include/ipsec.inc new file mode 100644 index 000000000..6df0a7c99 --- /dev/null +++ b/usr/local/www/widgets/include/ipsec.inc @@ -0,0 +1,4 @@ + diff --git a/usr/local/www/widgets/include/load_balancer.inc b/usr/local/www/widgets/include/load_balancer.inc new file mode 100644 index 000000000..367ea4654 --- /dev/null +++ b/usr/local/www/widgets/include/load_balancer.inc @@ -0,0 +1,4 @@ + diff --git a/usr/local/www/widgets/include/log.inc b/usr/local/www/widgets/include/log.inc new file mode 100644 index 000000000..7ad453a0e --- /dev/null +++ b/usr/local/www/widgets/include/log.inc @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/usr/local/www/widgets/include/ntp_status.inc b/usr/local/www/widgets/include/ntp_status.inc new file mode 100644 index 000000000..1115095d1 --- /dev/null +++ b/usr/local/www/widgets/include/ntp_status.inc @@ -0,0 +1,5 @@ + diff --git a/usr/local/www/widgets/include/openvpn.inc b/usr/local/www/widgets/include/openvpn.inc new file mode 100644 index 000000000..075d0e521 --- /dev/null +++ b/usr/local/www/widgets/include/openvpn.inc @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/usr/local/www/widgets/include/services_status.inc b/usr/local/www/widgets/include/services_status.inc new file mode 100644 index 000000000..685aee422 --- /dev/null +++ b/usr/local/www/widgets/include/services_status.inc @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/usr/local/www/widgets/include/smart_status.inc b/usr/local/www/widgets/include/smart_status.inc new file mode 100644 index 000000000..bbfa2749d --- /dev/null +++ b/usr/local/www/widgets/include/smart_status.inc @@ -0,0 +1,5 @@ + diff --git a/usr/local/www/widgets/include/thermal_sensors.inc b/usr/local/www/widgets/include/thermal_sensors.inc new file mode 100644 index 000000000..e193b15e6 --- /dev/null +++ b/usr/local/www/widgets/include/thermal_sensors.inc @@ -0,0 +1,27 @@ +> Advanced >> Miscellaneous tab >> Thermal Sensors section. +function getThermalSensorsData() { + + $_gb = exec("/sbin/sysctl -a | grep temperature", $dfout); + $thermalSensorsData = join("|", $dfout); + return $thermalSensorsData; + +} +?> diff --git a/usr/local/www/widgets/include/traffic_graph.inc b/usr/local/www/widgets/include/traffic_graph.inc new file mode 100644 index 000000000..3901db677 --- /dev/null +++ b/usr/local/www/widgets/include/traffic_graph.inc @@ -0,0 +1,4 @@ + diff --git a/usr/local/www/widgets/include/wake_on_lan.inc b/usr/local/www/widgets/include/wake_on_lan.inc new file mode 100644 index 000000000..af3229cef --- /dev/null +++ b/usr/local/www/widgets/include/wake_on_lan.inc @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/usr/local/www/widgets/javascript/cpu_graphs.js b/usr/local/www/widgets/javascript/cpu_graphs.js new file mode 100644 index 000000000..1fc690ab9 --- /dev/null +++ b/usr/local/www/widgets/javascript/cpu_graphs.js @@ -0,0 +1,245 @@ +/****************************************************************************** + $Id: graphlink.js,v 1.1 2006/12/21 17:10:25 dberlin Exp $ + + This file is part of the GraphLink software. + GraphLink is distributed under the MIT License. + Copyright (C) 2005-2006 Max Khitrov + ******************************************************************************/ + +/***** Global data ************************************************************/ + +var gl_graphCount = 0; // Number of graphs on the current page + +/***** Constants **************************************************************/ + +var GL_START = 0; +var GL_END = 1; +var GL_STATIC = 0; +var GL_DYNAMIC = 1; + +/***** Public functions *******************************************************/ + +/** + * Creates a graph and returns the graph data structure which can later be + * manipulated using the other graph functions. + * + * element_id - DOM element id (should be a DIV) that will contain the graph. + * width - The width of the graph in pixels. + * height - Height of the graph in pixels. + * bar_width - Width of each bar on the graph. This number should divide width + * evenly, or else width will be adjusted to meet this requirement. + * General formula to keep in mind: + * Smaller bar width = more bars = higher CPU usage on client-side. + * + * Returns graph data structure on success, false on error. + */ +function GraphInitialize(element_id, width, height, bar_width) { + // Find the page element which will contain the graph + var owner; + if((owner = jQuery('#' + element_id)) == null) { + alert("GraphLink Error: Element ID '" + element_id + "' not found."); + return false; + } + + // Make sure width is divisible by bar_width + if(width / bar_width != Math.floor(width / bar_width)) + width = Math.floor(width / bar_width) * bar_width; + + var bar_count = width / bar_width; + + // Create the graph data structure + var graph = new Array(); + graph['id'] = gl_graphCount; // ID used to separate elements of one graph from those of another + graph['width'] = width; // Graph width + graph['height'] = height; // Graph height + graph['bar_count'] = bar_count; // Number of bars on the graph + graph['scale_type'] = GL_STATIC; // How the graph is scaled + graph['scale'] = 1; // Multiplier for the bar height + graph['max'] = 0; // Largest value currently on the graph + graph['vmax'] = height; // Virtual graph maximum + graph['spans'] = new Array(bar_count); // References to all the spans for each graph + graph['vals'] = new Array(bar_count); // The height of each bar on the graph, actually it's (graph height - bar height) + gl_graphCount++; + + // Build the graph (x)html + var graph_html = ''; + graph_html += '
                              '; + + for(var i = 0; i < bar_count; i++) { + graph['vals'][i] = height; + graph_html += ''; + } + + graph_html += '
                              '; + owner.html(graph_html); + graph['element_id'] = jQuery('#GraphLinkData' + graph['id']); + + for(i = 0; i < bar_count; i++) { + graph['spans'][i] = jQuery('#GraphLinkBar' + graph['id'] + '_' + i); + graph['spans'][i].css('width',bar_width + 'px'); + graph['spans'][i].css('margin-top',height + 'px'); + } + + return graph; +} + +/** + * Adds a new value to a graph. + * + * graph - Graph object to which to add the new value. + * value - Value to add. + * where - (optional) GL_START (0) or GL_END (1), depending on where you want + * the new value to appear. GL_START will add the value on the left + * of the graph, GL_END will add it on the right (default). + */ +function GraphValue(graph, value, where) { + if(typeof(where) == 'undefined') + where = GL_END; + + var rescale = false; + var lost = 0; + + if(value < 0) + value = 0; + + if(graph['scale_type'] == GL_DYNAMIC && value > graph['max']) + rescale = true; + + if(graph['scale_type'] == GL_STATIC) { + if(value > graph['vmax']) + value = graph['vmax']; + value = Math.round(value * graph['scale']); + } + + if(where == GL_START) { + graph['vals'].unshift(graph['height'] - value); + lost = graph['vals'].pop(); + } + else { + graph['vals'].push(graph['height'] - value); + lost = graph['vals'].shift(); + } + + if(graph['scale_type'] == GL_DYNAMIC && (graph['height'] - lost) == graph['max']) + rescale = true; + + if(rescale) + GraphAdjustScale(graph) + + GraphDraw(graph); +} + +/** + * Sets a virtual maximum for the graph allowing you to have non-scaled graphs + * that can show a value greater then the graph height. This function will + * automatically set the graph to a static scale mode, meaning that no values + * above the maximum will be permitted. If you need to have a graph with no + * pre-defined maximum, make it dynamic. Also note that if you set a vmax on a + * graph that has data larger than vmax, that data will be reduced. + * + * graph - Graph object for which to set virtual max. + * vmax - The virtual maximum value for the graph. + */ +function GraphSetVMax(graph, vmax) { + graph['scale_type'] = GL_STATIC; + graph['vmax'] = vmax; + + GraphAdjustScale(graph); + GraphDraw(graph); +} + +/** + * This function instructs the graph to be scaled according to what the maximum + * value is. That value is used as the graph maximum and is reevaluated whenever + * a new value is added, or the current maximum is removed. Dynamic scaling is a + * good way of showing data for which you don't know what the maximum will be, + * but it also is a bit more resource-intensive then statically scaled graphs. + * + * graph - Graph object for which to enable dynamic scaling. + */ +function GraphDynamicScale(graph) { + graph['scale_type'] = GL_DYNAMIC; + + GraphAdjustScale(graph); + GraphDraw(graph); +} + +/***** Private functions ******************************************************/ + +/** + * Checks if the current scale of the graph is still valid, or needs to be + * adjusted. + * + * graph - Graph object for which to check the scale. + */ +function GraphAdjustScale(graph) { + var limit = graph['bar_count']; + var new_max = 0; + var new_scale = 0; + var val = 0; + + if(graph['scale_type'] == GL_STATIC) { + new_max = graph['vmax']; + new_scale = graph['height'] / new_max; + + if(new_scale == graph['scale']) + return; + } + + for(var i = 0; i < limit; i++) { + if(graph['scale_type'] == GL_STATIC) { + val = (graph['height'] - graph['vals'][i]) * graph['scale']; + val = val * new_scale; + + if(val > new_max) + val = new_max; + + graph['vals'][i] = graph['height'] - Math.round(val * new_scale); + + } + else if((graph['height'] - graph['vals'][i]) > new_max) { + new_max = graph['height'] - graph['vals'][i]; + } + } + + + if(graph['scale_type'] == GL_STATIC) { + graph['scale'] = new_scale; + } + else { + if(new_max == 0) + graph['scale'] = 1; + else + graph['scale'] = graph['height'] / new_max; + + graph['max'] = new_max; + } +} + +/** + * Redraws the graph on the screen. + * + * graph - Graph object which needs to be re-drawn. + */ +function GraphDraw(graph) { + var count = graph['bar_count']; + + if(graph['scale_type'] == GL_STATIC) + var getMargin = function(i) { + return graph['vals'][i] + 'px'; + }; + else + var getMargin = function(i) { + var h = graph['height']; + var s = graph['scale']; + var v = graph['vals'][i]; + return (h - Math.round((h - v) * s)) + 'px'; + }; + + graph['spans'][count - 1].css("display", "none"); + + for(var i = 0; i < count; i++) + graph['spans'][i].css("marginTop", getMargin(i)); + +// jQuery('#' + graph['spans'][count - 1]).fadeIn(500); +} diff --git a/usr/local/www/widgets/javascript/ipsec.js b/usr/local/www/widgets/javascript/ipsec.js new file mode 100644 index 000000000..c9d704a3e --- /dev/null +++ b/usr/local/www/widgets/javascript/ipsec.js @@ -0,0 +1,9 @@ +function updateIpsec(){ + selectIntLink = "ipsecDetailed"; + ipsecsettings = "ipsecDetail="; + ipsecsettings += d.getElementById(selectIntLink).checked; + + selectIntLink = "ipsec-config"; + textlink = d.getElementById(selectIntLink); + textlink.value = ipsecsettings; +} \ No newline at end of file diff --git a/usr/local/www/widgets/javascript/thermal_sensors.js b/usr/local/www/widgets/javascript/thermal_sensors.js new file mode 100644 index 000000000..edc9990b4 --- /dev/null +++ b/usr/local/www/widgets/javascript/thermal_sensors.js @@ -0,0 +1,295 @@ +/* + $Id: thermal_sensors.js + Description: + Javascript functions to get and show thermal sensors data in thermal_sensors.widget.php. + NOTE: depends on proper cofing in System >> Advanced >> Miscellaneous tab >> Thermal Sensors section. + File location: + \usr\local\www\widgets\javascript\ + Used by: + \usr\local\www\widgets\widgets\thermal_sensors.widget.php + + 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. +*/ + + + +//should be called from "thermal_sensors.widget.php" +function showThermalSensorsData() { + + //get data from thermal_sensors.widget.php + url = "/widgets/widgets/thermal_sensors.widget.php?getThermalSensorsData=1" + //IE fix to disable cache when using http:// , just append timespan + + new Date().getTime(); + + jQuery.ajax(url, { + type: 'get', + success: function(data) { + var thermalSensorsData = data || ""; + buildThermalSensorsData(thermalSensorsData); + }, + error: function(jqXHR, status, error){ + buildThermalSensorsDataRaw( + "Error getting data from [thermal_sensors.widget.php] - |" + + "status: [" + (status || "") + "]|" + + "error: [" + (error || "") + "]"); + } + }); + + //call itself in 11 seconds + window.setTimeout(showThermalSensorsData, 11000); +} + +function buildThermalSensorsData(thermalSensorsData) { + //NOTE: variable thermal_sensors_widget_showRawOutput is declared/set in "thermal_sensors.widget.php" + if (thermal_sensors_widget_showRawOutput) { + buildThermalSensorsDataRaw(thermalSensorsData); + } + else { + buildThermalSensorsDataGraph(thermalSensorsData); + } +} + +function buildThermalSensorsDataRaw(thermalSensorsData) { + + var thermalSensorsContent = ""; + + if (thermalSensorsData && thermalSensorsData != "") { + thermalSensorsContent = thermalSensorsData.replace(/\|/g, "
                              "); + //rawData = thermalSensorsData.split("|").join("
                              "); + } + + loadThermalSensorsContainer(thermalSensorsContent); +} + +function loadThermalSensorsContainer (thermalSensorsContent) { + + if (thermalSensorsContent && thermalSensorsContent != "") { + //load generated graph (or raw data) into thermalSensorsContainer (thermalSensorsContainer DIV defined in "thermal_sensors.widget.php") + jQuery('#thermalSensorsContainer').html(thermalSensorsContent); + } else { + jQuery('#thermalSensorsContainer').html("No Thermal Sensors data available.

                              "); + jQuery('
                              ').html( + "* You can configure a proper Thermal Sensor / Module under
                              " + + "   System > Advanced > Miscellaneous : Thermal Sensors section.
                              " + ).appendTo('#thermalSensorsContainer'); + } +} + +function buildThermalSensorsDataGraph(thermalSensorsData) { + + //local constants + var normalColor = "LimeGreen"; + var normalColorShadowTop = "Lime"; + var normalColorShadowBottom = "Green"; + + var warningColor = "Orange"; + var warningColorShadowBottom = "Chocolate"; + + var criticalColor = "Red"; + var criticalColorShadowBottom = "DarkRed"; + + //local variables + var barBgColor = normalColor; //green/normal as default + var barBgColorShadowTop = normalColorShadowTop; //green/normal as default + var barBgColorShadowBottom = normalColorShadowBottom; //green/normal as default + + var thermalSensorsArray = new Array(); + + if (thermalSensorsData && thermalSensorsData != ""){ + thermalSensorsArray = thermalSensorsData.split("|"); + } + + var thermalSensorsHTMLContent = ""; + var itemsToPulsate = new Array(); + + //generate graph for each temperature sensor and append to thermalSensorsHTMLContent string + for (var i = 0; i < thermalSensorsArray.length; i++) { + + var sensorDataArray = thermalSensorsArray[i].split(":"); + var sensorName = sensorDataArray[0].trim(); + var thermalSensorValue = getThermalSensorValue(sensorDataArray[1]); + + var pulsateTimes = 0; + var pulsateDuration = 0; + + var warningTempThresholdPosition = 0; + var criticalTempThresholdPosition = 0; + + //NOTE: the following variables are declared/set in "thermal_sensors.widget.php": + // thermal_sensors_widget_coreWarningTempThreshold, thermal_sensors_widget_coreCriticalTempThreshold, + // thermal_sensors_widget_zoneWarningTempThreshold, thermal_sensors_widget_zoneCriticalTempThreshold + // thermal_sensors_widget_pulsateWarning, thermal_sensors_widget_pulsateCritical + + //set graph color and pulsate parameters + if (sensorName.indexOf("cpu") > -1) { //check CPU Threshold config settings + + warningTempThresholdPosition = thermal_sensors_widget_coreWarningTempThreshold; + criticalTempThresholdPosition = thermal_sensors_widget_coreCriticalTempThreshold; + + if (thermalSensorValue < thermal_sensors_widget_coreWarningTempThreshold) { + barBgColor = normalColor; + barBgColorShadowTop = normalColorShadowTop; + barBgColorShadowBottom = normalColorShadowBottom; + pulsateTimes = 0; + pulsateDuration = 0; + } else if (thermalSensorValue >= thermal_sensors_widget_coreWarningTempThreshold && thermalSensorValue < thermal_sensors_widget_coreCriticalTempThreshold) { + barBgColor = warningColor; + barBgColorShadowTop = warningColor; + barBgColorShadowBottom = warningColorShadowBottom; + pulsateTimes = thermal_sensors_widget_pulsateWarning ? 4 : 0; + pulsateDuration = thermal_sensors_widget_pulsateWarning ? 900 : 0; + } else { // thermalSensorValue > thermal_sensors_widget_coreCriticalTempThreshold + barBgColor = criticalColor; + barBgColorShadowTop = criticalColor; + barBgColorShadowBottom = criticalColorShadowBottom; + pulsateTimes = thermal_sensors_widget_pulsateCritical ? 7 : 0; + pulsateDuration = thermal_sensors_widget_pulsateCritical ? 900 : 0; + } + } else { //assuming sensor is for a zone, check Zone Threshold config settings + + warningTempThresholdPosition = thermal_sensors_widget_zoneWarningTempThreshold; + criticalTempThresholdPosition = thermal_sensors_widget_zoneCriticalTempThreshold; + + if (thermalSensorValue < thermal_sensors_widget_zoneWarningTempThreshold) { + + barBgColor = normalColor; + barBgColorShadowTop = normalColorShadowTop; + barBgColorShadowBottom = normalColorShadowBottom; + pulsateTimes = 0; + pulsateDuration = 0; + + } else if (thermalSensorValue >= thermal_sensors_widget_zoneWarningTempThreshold + && thermalSensorValue < thermal_sensors_widget_zoneCriticalTempThreshold) { + + barBgColor = warningColor; + barBgColorShadowTop = warningColor; + barBgColorShadowBottom = warningColorShadowBottom; + pulsateTimes = thermal_sensors_widget_pulsateWarning ? 4 : 0; + pulsateDuration = thermal_sensors_widget_pulsateWarning ? 900 : 0; + + } else { // thermalSensorValue > thermal_sensors_widget_zoneCriticalTempThreshold + + barBgColor = criticalColor; + barBgColorShadowTop = criticalColor; + barBgColorShadowBottom = criticalColorShadowBottom; + pulsateTimes = thermal_sensors_widget_pulsateCritical ? 7 : 0; + pulsateDuration = thermal_sensors_widget_pulsateCritical ? 900 : 0; + } + } + + //NOTE: variable thermal_sensors_widget_showFullSensorName is declared/set in "thermal_sensors.widget.php" + if (!thermal_sensors_widget_showFullSensorName) { + sensorName = getSensorFriendlyName(sensorName); + } + + //build temperature item/row for a sensor + //NOTE: additional styles are set in 'thermal_sensors.widget.php' + var thermalSensorRow = "
                              " + + //sensor name and temperature value + "
                              " + sensorName + ":
                              " + thermalSensorValue + " °C
                              " + + //temperature bar + "
                              " + + "
                              " + + //threshold targets (warning and critical) + "
                              " + + "
                              " + + //temperature scale (max 100 C) + "
                              " + + "
                              " + + "
                              " + + "
                              " + + "
                              " + + "
                              " + + "
                              " + + "
                              " + + "
                              " + + "
                              " + + "
                              " + + "
                              100°
                              " + + "
                              " + + "
                              "; + + //collect parameters for warning/critical items we need to pulsate + if (pulsateTimes > 0) { + var params = i + "|" + barBgColor + "|" + pulsateTimes + "|" + pulsateDuration; + itemsToPulsate.push(params); + } + + //append HTML item + thermalSensorsHTMLContent = thermalSensorsHTMLContent + thermalSensorRow; + } + + //load generated graph into thermalSensorsContainer (DIV defined in "thermal_sensors.widget.php") + loadThermalSensorsContainer(thermalSensorsHTMLContent); + + if (itemsToPulsate.length > 0) { + //pulsate/flash warning/critical items we collected + pulsateThermalSensorsItems(itemsToPulsate); + } +} + +function pulsateThermalSensorsItems(itemsToPulsate) { + + //pulsate/flash warning/critical items we collected + for (var i = 0; i < itemsToPulsate.length; i++) { + + var pulsateParams = itemsToPulsate[i].split("|"); + var rowNum = parseInt(pulsateParams[0]); + //var textColor = pulsateParams[1]; + var pulsateTimes = parseInt(pulsateParams[2]); + var pulsateDuration = parseInt(pulsateParams[3]); + + //pulsate temp Value + var divThermalSensorValue = jQuery("#thermalSensorValue" + rowNum); //get temp value by id + divThermalSensorValue.effect("pulsate", { + times: pulsateTimes + ,easing: 'linear' //'easeInExpo' + }, pulsateDuration); + ////set Temp Value color + //divThermalSensorValue.css( { color: textColor } ); + + //pulsate temp Bar + var divThermalSensorBar = jQuery("#thermalSensorBar" + rowNum); //get temp bar by id + divThermalSensorBar.effect("pulsate", { + times: pulsateTimes + ,easing: 'linear' //'easeInExpo' + }, pulsateDuration); + + } +} + +function getSensorFriendlyName(sensorFullName){ + var rzone = /^hw\.acpi\.thermal\.tz([0-9]+)\.temperature$/; + var rcore = /^dev\.cpu\.([0-9]+)\.temperature$/; + + if (rzone.test(sensorFullName)) + return "Zone " + rzone.exec(sensorFullName)[1]; + + if (rcore.test(sensorFullName)) + return "Core " + rcore.exec(sensorFullName)[1]; + + return sensorFullName; +} + +function getThermalSensorValue(stringValue){ + return (+parseFloat(stringValue) || 0).toFixed(1); +} diff --git a/usr/local/www/widgets/javascript/traffic_graph.js b/usr/local/www/widgets/javascript/traffic_graph.js new file mode 100644 index 000000000..dcfd4f346 --- /dev/null +++ b/usr/local/www/widgets/javascript/traffic_graph.js @@ -0,0 +1,34 @@ +function trafficshowDiv(incDiv,swapButtons){ + //appear element + selectedDiv = incDiv + "graphdiv"; + jQuery('#' + selectedDiv).effect('blind',{mode:'show'},1000); + d = document; + if (swapButtons){ + selectIntLink = selectedDiv + "-min"; + textlink = d.getElementById(selectIntLink); + textlink.style.display = "inline"; + + selectIntLink = selectedDiv + "-open"; + textlink = d.getElementById(selectIntLink); + textlink.style.display = "none"; + } + document.iform["shown[" + incDiv + "]"].value = "show"; +} + +function trafficminimizeDiv(incDiv,swapButtons){ + //fade element + selectedDiv = incDiv + "graphdiv"; + jQuery('#' + selectedDiv).effect('blind',{mode:'hide'},1000); + d = document; + if (swapButtons){ + selectIntLink = selectedDiv + "-open"; + textlink = d.getElementById(selectIntLink); + textlink.style.display = "inline"; + + selectIntLink = selectedDiv + "-min"; + textlink = d.getElementById(selectIntLink); + textlink.style.display = "none"; + } + document.iform["shown[" + incDiv + "]"].value = "hide"; +} + diff --git a/usr/local/www/widgets/widgets/captive_portal_status.widget.php b/usr/local/www/widgets/widgets/captive_portal_status.widget.php new file mode 100644 index 000000000..4700a5bea --- /dev/null +++ b/usr/local/www/widgets/widgets/captive_portal_status.widget.php @@ -0,0 +1,114 @@ +. + 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. +*/ + +$nocsrf = true; + +require_once("globals.inc"); +require_once("guiconfig.inc"); +require_once("pfsense-utils.inc"); +require_once("functions.inc"); +require_once("captiveportal.inc"); + +?> + + $cp) { + $cpdb = captiveportal_read_db(); + foreach ($cpdb as $cpent) { + $cpent[10] = $cpzone; + if ($_GET['showact']) + $cpent[11] = captiveportal_get_last_activity($cpent[2], $cpentry[3]); + $cpdb_all[] = $cpent; + } +} + +if ($_GET['order']) { + if ($_GET['order'] == "ip") + $order = 2; + else if ($_GET['order'] == "mac") + $order = 3; + else if ($_GET['order'] == "user") + $order = 4; + else if ($_GET['order'] == "lastact") + $order = 5; + else if ($_GET['order'] == "zone") + $order = 10; + else + $order = 0; + usort($cpdb_all, "clientcmp"); +} +?> + + + + + + + + + + + + + + + + + + + + + + +
                              IP addressMAC address
                                 0)) echo htmlspecialchars(date("m/d/Y H:i:s", $cpent[11]));?> + x
                              diff --git a/usr/local/www/widgets/widgets/carp_status.widget.php b/usr/local/www/widgets/widgets/carp_status.widget.php new file mode 100644 index 000000000..60d02b6f5 --- /dev/null +++ b/usr/local/www/widgets/widgets/carp_status.widget.php @@ -0,0 +1,81 @@ + + + + + + + + +
                              + cablenic  + + + +"; + } else { + if($status == "MASTER") { + echo "\"$status\""; + } else if($status == "BACKUP") { + echo "\"$status\""; + } else if($status == "INIT") { + echo "\"$status\""; + } + } + if ($ipaddress){ ?>   +   + +
                              No CARP Interfaces Defined. Click here to configure CARP.
                              diff --git a/usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php b/usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php new file mode 100644 index 000000000..1c97ecaad --- /dev/null +++ b/usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php @@ -0,0 +1,72 @@ +, Manuel Kasper + and Jonathan Watt . + 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. +*/ + +require_once("guiconfig.inc"); +require_once("pfsense-utils.inc"); +require_once("functions.inc"); +?> + + + + + diff --git a/usr/local/www/widgets/widgets/dyn_dns_status.widget.php b/usr/local/www/widgets/widgets/dyn_dns_status.widget.php new file mode 100644 index 000000000..cde52c6ec --- /dev/null +++ b/usr/local/www/widgets/widgets/dyn_dns_status.widget.php @@ -0,0 +1,164 @@ + $cached_ip) + echo ""; + else + echo ""; + echo htmlspecialchars($cached_ip); + echo ""; + } else { + echo "N/A " . date("H:i:s"); + } + } + exit; +} + +?> + + + + + + + + + + + + + + + + +
                              + $ifdesc) { + if ($dyndns['interface'] == $if) { + if (!isset($dyndns['enable'])) + echo "{$ifdesc}"; + else + echo "{$ifdesc}"; + break; + } + } + $groupslist = return_gateway_groups_array(); + foreach ($groupslist as $if => $group) { + if ($dyndns['interface'] == $if) { + if (!isset($dyndns['enable'])) + echo "{$if}"; + else + echo "{$if}"; + break; + } + } + ?> + + ".htmlspecialchars($types[$j]).""; + else + echo htmlspecialchars($types[$j]); + break; + } + ?> + + ".htmlspecialchars($dyndns['host']).""; + else + echo htmlspecialchars($dyndns['host']); + ?> + +
                              +
                              + diff --git a/usr/local/www/widgets/widgets/gateways.widget.php b/usr/local/www/widgets/widgets/gateways.widget.php new file mode 100644 index 000000000..bc29c60db --- /dev/null +++ b/usr/local/www/widgets/widgets/gateways.widget.php @@ -0,0 +1,130 @@ + + + + + + + + + + $gateway) { ?> + + + + + + + + $online\n"; + $counter++; + ?> + + +
                              NameRTTLossStatus
                              + + + + + +
                              + +
                              +
                              + + + + + +
                              + + diff --git a/usr/local/www/widgets/widgets/gmirror_status.widget.php b/usr/local/www/widgets/widgets/gmirror_status.widget.php new file mode 100644 index 000000000..2d040c00c --- /dev/null +++ b/usr/local/www/widgets/widgets/gmirror_status.widget.php @@ -0,0 +1,50 @@ + + + + + +
                              + + diff --git a/usr/local/www/widgets/widgets/installed_packages.widget.php b/usr/local/www/widgets/widgets/installed_packages.widget.php new file mode 100644 index 000000000..9c3b237c7 --- /dev/null +++ b/usr/local/www/widgets/widgets/installed_packages.widget.php @@ -0,0 +1,123 @@ +, Manuel Kasper + and Jonathan Watt . + 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. +*/ + +$nocsrf = true; + +require_once("guiconfig.inc"); +require_once("pfsense-utils.inc"); +require_once("functions.inc"); +require_once("/usr/local/www/widgets/include/installed_packages.inc"); +require_once("pkg-utils.inc"); + +if(is_array($config['installedpackages']['package'])) { + foreach($config['installedpackages']['package'] as $instpkg) { + $tocheck[] = $instpkg['name']; + } + $currentvers = get_pkg_info($tocheck, array('version', 'xmlver')); +} + +$updateavailable = false; +?> + + + + + + + + $pkgname){ + + $pkg = $config['installedpackages']['package'][$index]; + if($pkg['name'] <> "") { ?> + + + + + + "; + } + ?> +
                              Package NameCategoryPackage Version
                              + + + + + Installed: " . $pkg['version']; + } elseif(strcmp($pkg['version'], $latest_package) > 0) { + /* we're running a newer version of the package */ + echo "Current: {$latest_package}"; + echo "
                              Installed: {$pkg['version']}"; + } elseif(strcmp($pkg['version'], $latest_package) < 0) { + /* our package is out of date */ + $updateavailable = true; + ?> +
                              + Update Available!
                              + Current:
                              + Installed:
                              + reinstall +
                              + +
                              There are no packages currently installed.
                              + + + + diff --git a/usr/local/www/widgets/widgets/interface_statistics.widget.php b/usr/local/www/widgets/widgets/interface_statistics.widget.php new file mode 100644 index 000000000..98455c122 --- /dev/null +++ b/usr/local/www/widgets/widgets/interface_statistics.widget.php @@ -0,0 +1,212 @@ +, Manuel Kasper + and Jonathan Watt . + 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. +*/ + +$nocsrf = true; + +require_once("guiconfig.inc"); +require_once("pfsense-utils.inc"); +require_once("functions.inc"); +require_once("/usr/local/www/widgets/include/interface_statistics.inc"); + + $ifdescrs = get_configured_interface_with_descr(); + + $array_in_packets = array(); + $array_out_packets = array(); + $array_in_bytes = array(); + $array_out_bytes = array(); + $array_in_errors = array(); + $array_out_errors = array(); + $array_collisions = array(); + $array_interrupt = array(); + $interfacecounter = 0; + + //build data arrays + foreach ($ifdescrs as $ifdescr => $ifname){ + $ifinfo = get_interface_info($ifdescr); + $interfacecounter++; + if ($ifinfo['status'] != "down"){ + $array_in_packets[] = $ifinfo['inpkts']; + $array_out_packets[] = $ifinfo['outpkts']; + $array_in_bytes[] = format_bytes($ifinfo['inbytes']); + $array_out_bytes[] = format_bytes($ifinfo['outbytes']); + if (isset($ifinfo['inerrs'])){ + $array_in_errors[] = $ifinfo['inerrs']; + $array_out_errors[] = $ifinfo['outerrs']; + } + else{ + $array_in_errors[] = "n/a"; + $array_out_errors[] = "n/a"; + } + if (isset($ifinfo['collisions'])) + $array_collisions[] = htmlspecialchars($ifinfo['collisions']); + else + $array_collisions[] = "n/a"; + } + + + }//end for + + + + + ?> +
                              + + + + + + + + + + + + + + + + + + + + + + + +
                                 
                              Packets In
                              Packets Out
                              Bytes In
                              Bytes Out
                              Errors In
                              Errors Out
                              Collisions
                              +
                              +
                              + + + + $ifname): + $ifinfo = get_interface_info($ifdescr); + if ($ifinfo['status'] != "down"){ ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + +
                              + +
                              + +
                              + +
                              + +
                              + +
                              + +
                              + +
                              +
                              diff --git a/usr/local/www/widgets/widgets/interfaces.widget.php b/usr/local/www/widgets/widgets/interfaces.widget.php new file mode 100644 index 000000000..009ef0e04 --- /dev/null +++ b/usr/local/www/widgets/widgets/interfaces.widget.php @@ -0,0 +1,102 @@ +, Manuel Kasper + and Jonathan Watt . + 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. +*/ + +$nocsrf = true; + +require_once("guiconfig.inc"); +require_once("pfsense-utils.inc"); +require_once("functions.inc"); +require_once("/usr/local/www/widgets/include/interfaces.inc"); + + $i = 0; + $ifdescrs = get_configured_interface_with_descr(); +?> + + + $ifname) { + $ifinfo = get_interface_info($ifdescr); + $iswireless = is_interface_wireless($ifdescr); + ?> + + + + + + + + + + + + + + + +
                              + "; + } else if($iswireless) { + if($ifinfo['status'] == "associated") { ?> + wlan + + wlan_d + + + cablenic +   + + + + + +
                              up
                              +
                              +
                              down
                              +
                              +
                              disabled
                              +
                              +
                              +
                              + +
                              +
                              + +
                              + +
                              diff --git a/usr/local/www/widgets/widgets/ipsec.widget.php b/usr/local/www/widgets/widgets/ipsec.widget.php new file mode 100644 index 000000000..f39d20f8c --- /dev/null +++ b/usr/local/www/widgets/widgets/ipsec.widget.php @@ -0,0 +1,217 @@ +, Manuel Kasper + and Jonathan Watt . + 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. +*/ + +$nocsrf = true; + +require_once("guiconfig.inc"); +require_once("functions.inc"); +require_once("ipsec.inc"); + +if (isset($config['ipsec']['phase1'])){?> +
                               
                              + convert_friendly_interface_to_friendly_descr($ph1ent['interface']), + 'dest' => $ph1ent['remote-gateway'], + 'remote-subnet' => ipsec_idinfo_to_text($ph2ent['remoteid']), + 'descr' => $ph2ent['descr'], + 'status' => $iconfn, + 'disabled' => $tun_disabled); + } +} + + if (isset($config['ipsec']['phase2'])){ ?> + +
                              +
                              + + + + + + + + + + + +
                              Active TunnelsInactive TunnelsMobile Users
                              +
                              +
                              + + + + +
                              + + + + +
                              + + + + Note: There are no configured IPsec Tunnels
                              +
                              +
                              + You can configure your IPsec + here. +
                              +
                              +
                              + diff --git a/usr/local/www/widgets/widgets/load_balancer_status.widget.php b/usr/local/www/widgets/widgets/load_balancer_status.widget.php new file mode 100644 index 000000000..21465757e --- /dev/null +++ b/usr/local/www/widgets/widgets/load_balancer_status.widget.php @@ -0,0 +1,144 @@ +. + Copyright (C) 2005-2008 Bill Marquette + + Part of pfSense widgets (https://www.pfsense.org) + originally based on m0n0wall (http://m0n0.ch/wall) + + Copyright (C) 2004-2005 T. Lechat , Manuel Kasper + and Jonathan Watt . + 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. +*/ + +$nocsrf = true; + +require_once("guiconfig.inc"); +require_once("pfsense-utils.inc"); +require_once("functions.inc"); +require_once("vslb.inc"); + +$now = time(); +$year = date("Y"); + +if (!is_array($config['load_balancer']['lbpool'])) { + $config['load_balancer']['lbpool'] = array(); +} +if (!is_array($config['load_balancer']['virtual_server'])) { + $config['load_balancer']['virtual_server'] = array(); +} +$a_vs = &$config['load_balancer']['virtual_server']; +$a_pool = &$config['load_balancer']['lbpool']; +$rdr_a = get_lb_redirects(); +$relay_hosts = get_lb_summary(); + +$lb_logfile = "{$g['varlog_path']}/relayd.log"; +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +?> + + + + + + + + + + + + + + + +
                              ServerPoolDescription
                              +
                              + +
                              +
                              + + "; + echo ""; + } + } + } + } + ?> +
                               {$server['ip']['addr']}:{$pool['port']}  "; + if($server['ip']['avail']) + echo " ({$server['ip']['avail']}) "; + echo " 
                              +
                              + +
                              diff --git a/usr/local/www/widgets/widgets/log.widget.php b/usr/local/www/widgets/widgets/log.widget.php new file mode 100644 index 000000000..f3065a34f --- /dev/null +++ b/usr/local/www/widgets/widgets/log.widget.php @@ -0,0 +1,221 @@ +, Manuel Kasper + and Jonathan Watt . + 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. +*/ + +$nocsrf = true; + +require_once("guiconfig.inc"); +require_once("pfsense-utils.inc"); +require_once("functions.inc"); + +/* In an effort to reduce duplicate code, many shared functions have been moved here. */ +require_once("filter_log.inc"); + +if(is_numeric($_POST['filterlogentries'])) { + $config['widgets']['filterlogentries'] = $_POST['filterlogentries']; + + $acts = array(); + if ($_POST['actpass']) $acts[] = "Pass"; + if ($_POST['actblock']) $acts[] = "Block"; + if ($_POST['actreject']) $acts[] = "Reject"; + + if (!empty($acts)) + $config['widgets']['filterlogentriesacts'] = implode(" ", $acts); + else + unset($config['widgets']['filterlogentriesacts']); + unset($acts); + + if( ($_POST['filterlogentriesinterfaces']) and ($_POST['filterlogentriesinterfaces'] != "All") ) + $config['widgets']['filterlogentriesinterfaces'] = trim($_POST['filterlogentriesinterfaces']); + else + unset($config['widgets']['filterlogentriesinterfaces']); + + write_config("Saved Filter Log Entries via Dashboard"); + Header("Location: /"); + exit(0); +} + +$nentries = isset($config['widgets']['filterlogentries']) ? $config['widgets']['filterlogentries'] : 5; + +//set variables for log + +$nentriesacts = isset($config['widgets']['filterlogentriesacts']) ? $config['widgets']['filterlogentriesacts'] : 'All'; +$nentriesinterfaces = isset($config['widgets']['filterlogentriesinterfaces']) ? $config['widgets']['filterlogentriesinterfaces'] : 'All'; + +$filterfieldsarray = array( + "act" => $nentriesacts, + "interface" => $nentriesinterfaces +); + +$filter_logfile = "{$g['varlog_path']}/filter.log"; +$filterlog = conv_log_filter($filter_logfile, $nentries, 50, $filterfieldsarray); //Get log entries + +/* AJAX related routines */ +handle_ajax($nentries, $nentries + 20); + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + ', outputrule);"> + <?php echo $filterent['act'];?> + + + &dialog_output=true', outputrule);" title=""> + + &dialog_output=true', outputrule);" title=""> +
                              + + + diff --git a/usr/local/www/widgets/widgets/ntp_status.widget.php b/usr/local/www/widgets/widgets/ntp_status.widget.php new file mode 100644 index 000000000..d1103e0a6 --- /dev/null +++ b/usr/local/www/widgets/widgets/ntp_status.widget.php @@ -0,0 +1,500 @@ +, Manuel Kasper + and Jonathan Watt . + 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. +*/ + +$nocsrf = true; + +require_once("guiconfig.inc"); +require_once("pfsense-utils.inc"); +require_once("functions.inc"); + +require_once("/usr/local/www/widgets/include/ntp_status.inc"); + +if($_REQUEST['updateme']) { +//this block displays only on ajax refresh + exec("/usr/local/sbin/ntpq -pn | /usr/bin/tail +3", $ntpq_output); + $ntpq_counter = 0; + foreach ($ntpq_output as $line) { + if (substr($line, 0, 1) == "*") { + //Active NTP Peer + $line = substr($line, 1); + $peerinfo = preg_split("/[\s\t]+/", $line); + if ($peerinfo[2] == "1") { + $syncsource = $peerinfo[0] . " (stratum " . $peerinfo[2] . ", " . $peerinfo[1] . ")"; + } else { + $syncsource = $peerinfo[0] . " (stratum " . $peerinfo[2] . ")"; + } + $ntpq_counter++; + } elseif (substr($line, 0, 1) == "o") { + //Local PPS Peer + $line = substr($line, 1); + $peerinfo = preg_split("/[\s\t]+/", $line); + $syncsource = $peerinfo[1] . " (stratum " . $peerinfo[2] . ", PPS)"; + $ntpq_counter++; + } + } + + exec("/usr/local/sbin/ntpq -c clockvar", $ntpq_clockvar_output); + foreach ($ntpq_clockvar_output as $line) { + if (substr($line, 0, 9) == "timecode=") { + $tmp = explode('"', $line); + $tmp = $tmp[1]; + if (substr($tmp, 0, 6) == '$GPRMC') { + $gps_vars = explode(",", $tmp); + $gps_ok = ($gps_vars[2] == "A"); + $gps_lat_deg = substr($gps_vars[3], 0, 2); + $gps_lat_min = substr($gps_vars[3], 2) / 60.0; + $gps_lon_deg = substr($gps_vars[5], 0, 3); + $gps_lon_min = substr($gps_vars[5], 3) / 60.0; + $gps_lat = $gps_lat_deg + $gps_lat_min; + $gps_lat = $gps_lat * (($gps_vars[4] == "N") ? 1 : -1); + $gps_lon = $gps_lon_deg + $gps_lon_min; + $gps_lon = $gps_lon * (($gps_vars[6] == "E") ? 1 : -1); + $gps_la = $gps_vars[4]; + $gps_lo = $gps_vars[6]; + }elseif (substr($tmp, 0, 6) == '$GPGGA') { + $gps_vars = explode(",", $tmp); + $gps_ok = $gps_vars[6]; + $gps_lat_deg = substr($gps_vars[2], 0, 2); + $gps_lat_min = substr($gps_vars[2], 2) / 60.0; + $gps_lon_deg = substr($gps_vars[4], 0, 3); + $gps_lon_min = substr($gps_vars[4], 3) / 60.0; + $gps_lat = $gps_lat_deg + $gps_lat_min; + $gps_lat = $gps_lat * (($gps_vars[3] == "N") ? 1 : -1); + $gps_lon = $gps_lon_deg + $gps_lon_min; + $gps_lon = $gps_lon * (($gps_vars[5] == "E") ? 1 : -1); + $gps_alt = $gps_vars[9]; + $gps_alt_unit = $gps_vars[10]; + $gps_sat = $gps_vars[7]; + $gps_la = $gps_vars[3]; + $gps_lo = $gps_vars[5]; + }elseif (substr($tmp, 0, 6) == '$GPGLL') { + $gps_vars = explode(",", $tmp); + $gps_ok = ($gps_vars[6] == "A"); + $gps_lat_deg = substr($gps_vars[1], 0, 2); + $gps_lat_min = substr($gps_vars[1], 2) / 60.0; + $gps_lon_deg = substr($gps_vars[3], 0, 3); + $gps_lon_min = substr($gps_vars[3], 3) / 60.0; + $gps_lat = $gps_lat_deg + $gps_lat_min; + $gps_lat = $gps_lat * (($gps_vars[2] == "N") ? 1 : -1); + $gps_lon = $gps_lon_deg + $gps_lon_min; + $gps_lon = $gps_lon * (($gps_vars[4] == "E") ? 1 : -1); + $gps_la = $gps_vars[2]; + $gps_lo = $gps_vars[4]; + } + } + } + + if (isset($config['ntpd']['gps']['type']) && ($config['ntpd']['gps']['type'] == 'SureGPS') && (isset($gps_ok))) { + //GSV message is only enabled by init commands in services_ntpd_gps.php for SureGPS board + $gpsport = fopen("/dev/gps0", "r+"); + while($gpsport){ + $buffer = fgets($gpsport); + if(substr($buffer, 0, 6)=='$GPGSV'){ + //echo $buffer."\n"; + $gpgsv = explode(',',$buffer); + $gps_satview = $gpgsv[3]; + break; + } + } + } +?> + + + + + + + + + + + + + + + + + + + + +
                              Sync Source + + No active peers available + + + +
                              Clock location + + + + +
                              Satellites + +
                              +. ***/ + +/* Prevent this page from being cached (though some browsers still + cache the page anyway, which is why we use cookies). This is + only important if the cookie is deleted while the page is still + cached (and for ancient browsers that don't know about Cache-Control). + If that's not an issue, you may be able to get away with + "Cache-Control: private" instead. */ + +/* Grab the current server time. */ +$gDate = time(); +/* Are the seconds shown by default? When changing this, also change the + JavaScript client code's definition of clockShowsSeconds below to match. */ +$gClockShowsSeconds = true; + +function getServerDateItems($inDate) { + return date('Y,n,j,G,',$inDate).intval(date('i',$inDate)).','.intval(date('s',$inDate)); + // year (4-digit),month,day,hours (0-23),minutes,seconds + // use intval to strip leading zero from minutes and seconds + // so JavaScript won't try to interpret them in octal + // (use intval instead of ltrim, which translates '00' to '') +} + +function clockDateString($inDate) { + return date('Y. F j l',$inDate); // eg "Monday, January 1, 2002" +} + +function clockTimeString($inDate, $showSeconds) { + return date($showSeconds ? 'G:i:s' : 'g:i',$inDate).' '; +} +/*** Clock -- end of server-side support code ***/ +?> + + + + + + + + + + + + + + +
                              Server Time +
                              + +
                              +
                              + +
                              + + + + + + +
                              + Updating... +
                              +
                              + + diff --git a/usr/local/www/widgets/widgets/openvpn.widget.php b/usr/local/www/widgets/widgets/openvpn.widget.php new file mode 100644 index 000000000..fc2494802 --- /dev/null +++ b/usr/local/www/widgets/widgets/openvpn.widget.php @@ -0,0 +1,257 @@ + + +
                              + + + + + + + + + + + +
                              + Client connections +
                              + + + + + + + ' class=""> + + + + + ' class=""> + + + + + + + + + + +
                              Name/TimeReal/Virtual IP
                              + + + + + /images/icons/icon_x.gif' height='17' width='17' border='0' + onclick="killClient('', '');" style='cursor:pointer;' + name='' + title='Kill client connection from ' alt='' /> +
                              + + + +
                              +
                              + + + + + + + + +
                              + Peer to Peer Server Instance Statistics +
                              + + + + + + + '> + + + + + '> + + + + +
                              Name/TimeRemote/Virtual IP
                              + + + + + "; + ?> +
                              + + + +
                              + + + + + + + + + + +
                              + Client Instance Statistics +
                              + + + + + + + '> + + + + + '> + + + + +
                              Name/TimeRemote/Virtual IP
                              + + + + + "; + ?> +
                              + + + +
                              + + + +NOTE: You need to bind each OpenVPN client to enable its management daemon: use 'Local port' setting in the OpenVPN client screen"; +} + +if ((empty($clients)) && (empty($servers)) && (empty($sk_servers))) { + echo "No OpenVPN instance defined"; +} +?> diff --git a/usr/local/www/widgets/widgets/picture.widget.php b/usr/local/www/widgets/widgets/picture.widget.php new file mode 100644 index 000000000..d986df10f --- /dev/null +++ b/usr/local/www/widgets/widgets/picture.widget.php @@ -0,0 +1,94 @@ + + + + + + + + + + diff --git a/usr/local/www/widgets/widgets/rss.widget.php b/usr/local/www/widgets/widgets/rss.widget.php new file mode 100644 index 000000000..eecda0501 --- /dev/null +++ b/usr/local/www/widgets/widgets/rss.widget.php @@ -0,0 +1,184 @@ + + + + + + +
                              + $length) + return (preg_match('/^(.*)\W.*$/', substr($string, 0, $length+1), $matches) ? $matches[1] : substr($string, 0, $length)) . $replacer; + return $string; + } + $feed = new SimplePie(); + $feed->set_cache_location("/tmp/simplepie/"); + $feed->set_feed_url($rss_feed_s); + $feed->init(); + $feed->set_output_encoding('latin-1'); + $feed->handle_content_type(); + $counter = 1; + foreach($feed->get_items() as $item) { + $feed = $item->get_feed(); + $feed->strip_htmltags(); + echo "" . $item->get_title() . "
                              "; + $content = $item->get_content(); + $content = strip_tags($content); + echo textLimit($content, $rsswidgettextlength) . "
                              "; + echo "Source: " . $feed->get_title() . "
                              "; + $counter++; + if($counter > $max_items) + break; + echo "
                              "; + } +?> +
                              + + + diff --git a/usr/local/www/widgets/widgets/services_status.widget.php b/usr/local/www/widgets/widgets/services_status.widget.php new file mode 100644 index 000000000..1c097f95c --- /dev/null +++ b/usr/local/www/widgets/widgets/services_status.widget.php @@ -0,0 +1,100 @@ + + + + + + + + + + + + 0) { + uasort($services, "service_name_compare"); + foreach($services as $service) { + if((!$service['name']) || (in_array($service['name'], $skipservices)) || (!is_service_enabled($service['name']))) + continue; + if (empty($service['description'])) + $service['description'] = get_pkg_descr($service['name']); + $service_desc = explode(".",$service['description']); + echo "\n"; + echo "\n"; + // if service is running then listr else listbg + $bgclass = null; + if (get_service_status($service)) + $bgclass = "listr"; + else + $bgclass = "listbg"; + echo "\n"; + echo "\n"; + } +} else { + echo "\n"; +} +?> +
                              ServiceDescriptionStatus 
                              " . $service['name'] . "" . $service_desc[0] . "" . get_service_status_icon($service, false, true) . "" . get_service_control_links($service) . "
                              " . gettext("No services found") . " .
                              + + + diff --git a/usr/local/www/widgets/widgets/smart_status.widget.php b/usr/local/www/widgets/widgets/smart_status.widget.php new file mode 100644 index 000000000..746e78d72 --- /dev/null +++ b/usr/local/www/widgets/widgets/smart_status.widget.php @@ -0,0 +1,74 @@ + + + + + + + + + + 0) { + foreach($devs as $dev) { ## for each found drive do + $dev_ident = exec("diskinfo -v /dev/$dev | grep ident | awk '{print $1}'"); ## get identifier from drive + $dev_state = trim(exec("smartctl -H /dev/$dev | awk -F: '/^SMART overall-health self-assessment test result/ {print $2;exit} +/^SMART Health Status/ {print $2;exit}'")); ## get SMART state from drive + switch ($dev_state) { + case "PASSED": + case "OK": + $color = "#90EE90"; + break; + case "": + $dev_state = "Unknown"; + $color = "#C0B788"; + break; + default: + $color = "#F08080"; + break; + } +?> + + + + + + +
                                
                              diff --git a/usr/local/www/widgets/widgets/system_information.widget.php b/usr/local/www/widgets/widgets/system_information.widget.php new file mode 100644 index 000000000..694eefd37 --- /dev/null +++ b/usr/local/www/widgets/widgets/system_information.widget.php @@ -0,0 +1,317 @@ +, Manuel Kasper + and Jonathan Watt . + 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. +*/ + +require_once("functions.inc"); +require_once("guiconfig.inc"); +require_once('notices.inc'); +include_once("includes/functions.inc.php"); + +if($_REQUEST['getupdatestatus']) { + if(isset($config['system']['firmware']['disablecheck'])) { + exit; + } + if(isset($config['system']['firmware']['alturl']['enable'])) + $updater_url = "{$config['system']['firmware']['alturl']['firmwareurl']}"; + else + $updater_url = $g['update_url']; + + $nanosize = ""; + if ($g['platform'] == "nanobsd") { + if (file_exists("/etc/nano_use_vga.txt")) + $nanosize = "-nanobsd-vga-"; + else + $nanosize = "-nanobsd-"; + $nanosize .= strtolower(trim(file_get_contents("/etc/nanosize.txt"))); + } + + @unlink("/tmp/{$g['product_name']}_version"); + if (download_file_with_progress_bar("{$updater_url}/version{$nanosize}", "/tmp/{$g['product_name']}_version", 'read_body', 5, 5) === true) + $remote_version = trim(@file_get_contents("/tmp/{$g['product_name']}_version")); + + if(empty($remote_version)) + echo "

                              Unable to check for updates."; + else { + $current_installed_buildtime = trim(file_get_contents("/etc/version.buildtime")); + $current_installed_version = trim(file_get_contents("/etc/version")); + + if(!$remote_version) { + echo "

                              Unable to check for updates."; + } + else { + $needs_system_upgrade = false; + if (pfs_version_compare($current_installed_buildtime, $current_installed_version, $remote_version) == -1) { + echo "
                              Update available. Click Here to view update."; + echo "\n\n"; + } else + echo "
                              You are on the latest version."; + } + } + exit; +} + +$curcfg = $config['system']['firmware']; + +$filesystems = get_mounted_filesystems(); + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              + + () +
                              + built on + +
                              +
                              + + +

                              ...
                              + +
                              + + +
                              + / + +

                              Next Boot:
                              + / + +
                              + +
                              + 1): ?> +
                              + CPUs:
                              + +
                              +
                              +
                              + "; + } + ?> +
                              + +
                              + () +
                              + +
                              + +
                              + () +
                              + +
                              + +
                              +
                              +
                              +
                              + (Updating in 10 seconds) +
                              + +
                              + of MB +
                              + +
                              + of MB +
                              + + +
                              + + : of +
                              + +
                              + diff --git a/usr/local/www/widgets/widgets/thermal_sensors.widget.php b/usr/local/www/widgets/widgets/thermal_sensors.widget.php new file mode 100644 index 000000000..d7d398cb6 --- /dev/null +++ b/usr/local/www/widgets/widgets/thermal_sensors.widget.php @@ -0,0 +1,279 @@ +> Advanced >> Miscellaneous tab >> Thermal Sensors section. + + File location: + \usr\local\www\widgets\widgets\ + Depends on: + \usr\local\www\widgets\javascript\thermal_sensors.js + \usr\local\www\widgets\include\thermal_sensors.inc + + 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. + */ + +require_once("guiconfig.inc"); +require_once("/usr/local/www/widgets/include/thermal_sensors.inc"); + +//========================================================================= +//called by showThermalSensorsData() (jQuery Ajax call) in thermal_sensors.js +if (isset($_GET["getThermalSensorsData"])) { + //get Thermal Sensors data and return + echo getThermalSensorsData(); + return; +} +//========================================================================= + + +const WIDGETS_CONFIG_SECTION_KEY = "widgets"; +const THERMAL_SENSORS_WIDGET_SUBSECTION_KEY = "thermal_sensors_widget"; + +//default constants +const DEFAULT_WARNING_THRESHOLD = 60; //60 C +const DEFAULT_CRITICAL_THRESHOLD = 70; //70 C +const MIN_THRESHOLD_VALUE = 1; //deg C +const MAX_THRESHOLD_VALUE = 100; //deg C + +//NOTE: keys used in $_POST and $config should match text and checkbox inputs' IDs/names in HTML code section +//========================================================================= +//save widget config settings on POST +if ($_POST) { + saveThresholdSettings($config, $_POST, "thermal_sensors_widget_zone_warning_threshold", "thermal_sensors_widget_zone_critical_threshold"); + saveThresholdSettings($config, $_POST, "thermal_sensors_widget_core_warning_threshold", "thermal_sensors_widget_core_critical_threshold"); + + //handle checkboxes separately + saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_show_raw_output"); + saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_show_full_sensor_name"); + saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_pulsate_warning"); + saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_pulsate_critical"); + + //write settings to config file + write_config("Saved thermal_sensors_widget settings via Dashboard."); + header("Location: ../../index.php"); +} + +function saveThresholdSettings(&$configArray, &$postArray, $warningValueKey, $criticalValueKey) { + $warningValue = 0; + $criticalValue = 0; + + if (isset($postArray[$warningValueKey])) { + $warningValue = (int) $postArray[$warningValueKey]; + } + + if (isset($postArray[$criticalValueKey])) { + $criticalValue = (int) $postArray[$criticalValueKey]; + } + + if ( + ($warningValue >= MIN_THRESHOLD_VALUE && $warningValue <= MAX_THRESHOLD_VALUE) && + ($criticalValue >= MIN_THRESHOLD_VALUE && $criticalValue <= MAX_THRESHOLD_VALUE) && + ($warningValue < $criticalValue) + ) { + //all validated ok, save to config array + $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$warningValueKey] = $warningValue; + $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$criticalValueKey] = $criticalValue; + } +} + +function saveGraphDisplaySettings(&$configArray, &$postArray, $valueKey) { + $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey] = isset($postArray[$valueKey]) ? 1 : 0; +} + +//========================================================================= +//get Threshold settings from config (apply defaults if missing) +$thermal_sensors_widget_zoneWarningTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_zone_warning_threshold", DEFAULT_WARNING_THRESHOLD); +$thermal_sensors_widget_zoneCriticalTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_zone_critical_threshold", DEFAULT_CRITICAL_THRESHOLD); +$thermal_sensors_widget_coreWarningTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_core_warning_threshold", DEFAULT_WARNING_THRESHOLD); +$thermal_sensors_widget_coreCriticalTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_core_critical_threshold", DEFAULT_CRITICAL_THRESHOLD); + +//get display settings from config (apply defaults if missing) +$thermal_sensors_widget_showRawOutput = getBoolValueFromConfig($config, "thermal_sensors_widget_show_raw_output", false); +$thermal_sensors_widget_showFullSensorName = getBoolValueFromConfig($config, "thermal_sensors_widget_show_full_sensor_name", false); +$thermal_sensors_widget_pulsateWarning = getBoolValueFromConfig($config, "thermal_sensors_widget_pulsate_warning", true); +$thermal_sensors_widget_pulsateCritical = getBoolValueFromConfig($config, "thermal_sensors_widget_pulsate_critical", true); + +function getThresholdValueFromConfig(&$configArray, $valueKey, $defaultValue) { + + $thresholdValue = $defaultValue; + + if (isset($configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey])) { + $thresholdValue = (int) $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey]; + } + + if ($thresholdValue < MIN_THRESHOLD_VALUE || $thresholdValue > MAX_THRESHOLD_VALUE) { + //set to default if not in allowed range + $thresholdValue = $defaultValue; + } + return $thresholdValue; +} + +function getBoolValueFromConfig(&$configArray, $valueKey, $defaultValue) { + + $boolValue = false; + + if (isset($configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey])) { + $boolValue = (bool) $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey]; + } else { + //set to default if not in allowed range + $boolValue = $defaultValue; + } + return $boolValue; +} + +//========================================================================= +?> + + + + + + +
                              +
                              + (Updating...)

                              +
                              +
                              + + + diff --git a/usr/local/www/widgets/widgets/traffic_graphs.widget.php b/usr/local/www/widgets/widgets/traffic_graphs.widget.php new file mode 100644 index 000000000..3f9bba7ab --- /dev/null +++ b/usr/local/www/widgets/widgets/traffic_graphs.widget.php @@ -0,0 +1,181 @@ +, Manuel Kasper + and Jonathan Watt . + 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. +*/ + +$nocsrf = true; + +require_once("guiconfig.inc"); +require_once("pfsense-utils.inc"); +require_once("functions.inc"); + +$first_time = false; +if (!is_array($config["widgets"]["trafficgraphs"])) { + $first_time = true; + $config["widgets"]["trafficgraphs"] = array(); +} +$a_config = &$config["widgets"]["trafficgraphs"]; + +if (!is_array($a_config["shown"])) { + $a_config["shown"] = array(); +} +if (!is_array($a_config["shown"]["item"])) { + $a_config["shown"]["item"] = array(); +} + +$ifdescrs = get_configured_interface_with_descr(); +if (isset($config['ipsec']['enable'])) + $ifdescrs['enc0'] = "IPsec"; + +if ($_POST) { + if (isset($_POST["refreshinterval"])) { + $a_config["refreshinterval"] = $_POST["refreshinterval"]; + } + if (isset($_POST["scale_type"])) { + $a_config["scale_type"] = $_POST["scale_type"]; + } + $a_config["shown"]["item"] = array(); + foreach ($ifdescrs as $ifname => $ifdescr) { + $state = $_POST["shown"][$ifname]; + if ($state === "show") { + $a_config["shown"]["item"][] = $ifname; + } + } + write_config("Updated traffic graph settings via dashboard."); + header("Location: /"); + exit(0); +} + +$shown = array(); +foreach ($a_config["shown"]["item"] as $if) { + $shown[$if] = true; +} +if ($first_time) { + $keys = array_keys($ifdescrs); + $shown[$keys[0]] = true; +} + +if (isset($a_config["refreshinterval"])) { + $refreshinterval = $a_config["refreshinterval"]; +} else { + $refreshinterval = 10; +} + +if (isset($a_config["scale_type"])) { + $scale_type = $a_config["scale_type"]; +} else { + $scale_type = "up"; +} + +?> + + + + + + + $ifdescr) { + $ifinfo = get_interface_info($ifname); + if ($shown[$ifname]) { + $mingraphbutton = "inline"; + $showgraphbutton = "none"; + $graphdisplay = "inline"; + $interfacevalue = "show"; + } else { + $mingraphbutton = "none"; + $showgraphbutton = "inline"; + $graphdisplay = "none"; + $interfacevalue = "hide"; + } + if ($ifinfo['status'] != "down") { ?> +
                              +
                              +
                              + Current Traffic +
                              +
                              +
                              Minimize <?=$ifname;?> traffic graph
                              +
                              Show <?=$ifname;?> traffic graph
                              +
                              +
                              +
                              +
                              + + + + + +
                              +
                              + diff --git a/usr/local/www/widgets/widgets/wake_on_lan.widget.php b/usr/local/www/widgets/widgets/wake_on_lan.widget.php new file mode 100644 index 000000000..c35467553 --- /dev/null +++ b/usr/local/www/widgets/widgets/wake_on_lan.widget.php @@ -0,0 +1,77 @@ + + + + ' . gettext("Computer / Device") . ''; + echo ''; + echo ''; + ?> + + + 0) { + foreach($wolcomputers as $wolent) { + echo '' . "\n"; + echo '' . "\n"; + + $is_active = exec("/usr/sbin/arp -an |/usr/bin/grep {$wolent['mac']}| /usr/bin/wc -l|/usr/bin/awk '{print $1;}'"); + if($is_active == 1) { + echo '\n"; + } else { + echo '\n"; + } + echo '\n"; + } +} else { + echo "\n"; +} +?> +
                              ' . gettext("Interface") . '' . gettext("Status") . ' 
                              ' . $wolent['descr'] . '
                              ' . $wolent['mac'] . '
                              ' . convert_friendly_interface_to_friendly_descr($wolent['interface']) . '' . "\n"; + echo "\"pass\" " . gettext("Online") . "' . "\n"; + echo "\"block\" " . gettext("Offline") . "'; + /*if($is_active) { */ + /* Will always show wake-up button even if pfsense thinks it is awake */ + /* } else { */ + echo " "; + echo "wol\n"; + /* } */ + echo "
                              " . gettext("No saved WoL addresses") . ".
                              +
                              DHCP Leases Status
                              diff --git a/usr/local/www/wizard.php b/usr/local/www/wizard.php new file mode 100644 index 000000000..1329c7748 --- /dev/null +++ b/usr/local/www/wizard.php @@ -0,0 +1,973 @@ + "submit") { + $fieldname = $field['name']; + $fieldname = str_replace(" ", "", $fieldname); + $fieldname = strtolower($fieldname); + // update field with posted values. + if($field['unsetfield'] <> "") + $unset_fields = "yes"; + else + $unset_fields = ""; + if($field['arraynum'] <> "") + $arraynum = $field['arraynum']; + else + $arraynum = ""; + + update_config_field( $field['bindstofield'], $_POST[$fieldname], $unset_fields, $arraynum, $field['type']); + } + + } + // run custom php code embedded in xml config. + if($pkg['step'][$stepid]['stepsubmitphpaction'] <> "") { + eval($pkg['step'][$stepid]['stepsubmitphpaction']); + } + if (!$input_errors) + write_config(); + $stepid++; + if($stepid > $totalsteps) + $stepid = $totalsteps; +} + +function update_config_field($field, $updatetext, $unset, $arraynum, $field_type) { + global $config; + $field_split = explode("->",$field); + foreach ($field_split as $f) + $field_conv .= "['" . $f . "']"; + if($field_conv == "") + return; + if ($arraynum <> "") + $field_conv .= "[" . $arraynum . "]"; + if(($field_type == "checkbox" and $updatetext <> "on") || $updatetext == "") { + /* + * item is a checkbox, it should have the value "on" + * if it was checked + */ + $var = "\$config{$field_conv}"; + $text = "if (isset({$var})) unset({$var});"; + eval($text); + return; + } + + if($field_type == "interfaces_selection") { + $var = "\$config{$field_conv}"; + $text = "if (isset({$var})) unset({$var});"; + $text .= "\$config" . $field_conv . " = \"" . $updatetext . "\";"; + eval($text); + return; + } + + if($unset == "yes") { + $text = "unset(\$config" . $field_conv . ");"; + eval($text); + } + $text = "\$config" . $field_conv . " = \"" . addslashes($updatetext) . "\";"; + eval($text); +} + +$title = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['title']); +$description = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['description']); + +// handle before form display event. +do { + $oldstepid = $stepid; + if($pkg['step'][$stepid]['stepbeforeformdisplay'] <> "") + eval($pkg['step'][$stepid]['stepbeforeformdisplay']); +} while ($oldstepid != $stepid); + +$closehead = false; +$pgtitle = array($title); +include("head.inc"); + +if(file_exists("/usr/local/www/themes/{$g['theme']}/wizard.css")) + echo "\n"; +else + echo ""; +?> + + + + "") { ?> + + + +
                              + + + +
                              + + 
                              + +"; +?> +logo +

                               

                              +
                              + + + + + + + +
                               
                              + + + +"; +?> + + "") { + foreach ($pkg['step'][$stepid]['fields']['field'] as $field) { + + $value = $field['value']; + $name = $field['name']; + + $name = preg_replace("/\s+/", "", $name); + $name = strtolower($name); + + if($field['bindstofield'] <> "") { + $arraynum = ""; + $field_conv = ""; + $field_split = explode("->", $field['bindstofield']); + // arraynum is used in cases where there is an array of the same field + // name such as dnsserver (2 of them) + if($field['arraynum'] <> "") + $arraynum = "[" . $field['arraynum'] . "]"; + foreach ($field_split as $f) + $field_conv .= "['" . $f . "']"; + if($field['type'] == "checkbox") + $toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) { \$value = \$config" . $field_conv . $arraynum . "; if (empty(\$value)) \$value = true; }"; + else + $toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) \$value = \$config" . $field_conv . $arraynum . ";"; + eval($toeval); + } + + if(!$field['combinefieldsend']) + echo ""; + + switch ($field['type']) { + case "input": + if ($field['displayname']) { + echo "\n"; + } else if(!$field['dontdisplayname']) { + echo "\n"; + } + if(!$field['dontcombinecells']) + echo "\n"; + } else if(!$field['dontdisplayname']) { + echo "\n"; + } + if(!$field['dontcombinecells']) + echo ""; + echo "\n"; + } else if(!$field['dontdisplayname']) { + echo "\n"; + } + if(!$field['dontcombinecells']) + echo ""; + echo ""; + echo "\n"; + } else if(!$field['dontdisplayname']) { + echo "\n"; + } + if($field['size']) $size = " size='" . $field['size'] . "' "; + if($field['multiple'] == "yes") $multiple = "multiple=\"multiple\" "; + if(!$field['dontcombinecells']) + echo "\n"; + } else if(!$field['dontdisplayname']) { + echo ""; + } + if(!$field['dontcombinecells']) + echo ""; + echo ""; + echo "\n"; + } else if(!$field['dontdisplayname']) { + echo ""; + } + if(!$field['dontcombinecells']) + echo "\n"; + } else if(!$field['dontdisplayname']) { + echo ""; + } + if(!$field['dontcombinecells']) + echo "\n"; + } else if(!$field['dontdisplayname']) { + echo ""; + } + $checked = ""; + if($value <> "") + $checked = " checked=\"checked\""; + echo ""; + + echo "\n"; + } + + } + } +?> +
                               
                              " . fixup_string($title) . "
                              \n"; + echo $field['displayname']; + echo ":\n"; + echo fixup_string($field['name']); + echo ":\n"; + + echo "\n"; + + if($field['description'] <> "") { + echo "
                              " . $field['description']; + } + break; + case "text": + echo "
                              \n"; + if($field['description'] <> "") { + echo "

                              " . $field['description'] . "
                              "; + } + break; + case "inputalias": + if ($field['displayname']) { + echo "
                              \n"; + echo $field['displayname']; + echo ":\n"; + echo fixup_string($field['name']); + echo ":\n"; + + $inputaliases[] = $name; + echo "\n"; + + if($field['description'] <> "") { + echo "
                              " . $field['description']; + } + break; + case "interfaces_selection": + case "interface_select": + $size = ""; + $multiple = ""; + $name = strtolower($name); + echo "
                              \n"; + echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n"; + echo "\n"; + if($field['size'] <> "") $size = "size=\"{$field['size']}\""; + if($field['multiple'] <> "" and $field['multiple'] <> "0") { + $multiple = "multiple=\"multiple\""; + $name .= "[]"; + } + echo "\n"; + + if($field['description'] <> "") { + echo "
                              " . $field['description']; + } + + break; + case "password": + if ($field['displayname']) { + echo "
                              \n"; + echo $field['displayname']; + echo ":\n"; + echo fixup_string($field['name']); + echo ":"; + echo "\n"; + + if($field['description'] <> "") { + echo "
                              " . $field['description']; + } + + break; + case "certca_selection": + $size = ""; + $multiple = ""; + $name = strtolower($name); + echo "
                              \n"; + echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n"; + echo "\n"; + if($field['size'] <> "") $size = "size=\"{$field['size']}\""; + echo "\n"; + + if($field['description'] <> "") { + echo "
                              " . $field['description']; + } + + break; + case "cert_selection": + $size = ""; + $multiple = ""; + $name = strtolower($name); + echo "
                              \n"; + echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n"; + echo "\n"; + if($field['size'] <> "") $size = "size=\"{$field['size']}\""; + echo "\n"; + + if($field['description'] <> "") { + echo "
                              " . $field['description']; + } + + break; + case "select": + if ($field['displayname']) { + echo "
                              \n"; + echo $field['displayname']; + echo ":\n"; + echo fixup_string($field['name']); + echo ":\n"; + $onchange = ""; + foreach ($field['options']['option'] as $opt) { + if($opt['enablefields'] <> "") { + $onchange = "onchange=\"enableitems(this.selectedIndex);\" "; + } + } + echo "\n"; + echo "\n"; + + if($field['description'] <> "") { + echo $field['description']; + } + + break; + case "textarea": + if ($field['displayname']) { + echo "\n"; + echo $field['displayname']; + echo ":\n"; + echo fixup_string($field['name']); + echo ":"; + echo "\n"; + + + if($field['description'] <> "") { + echo "
                              " . $field['description']; + } + + break; + case "submit": + echo "
                               
                              "; + echo "\n"; + + if($field['description'] <> "") { + echo "
                              " . $field['description']; + } + + break; + case "listtopic": + echo "
                               
                              " . $field['name'] . "
                              \n"; + + break; + case "subnet_select": + if ($field['displayname']) { + echo "
                              \n"; + echo $field['displayname']; + echo ":\n"; + echo fixup_string($field['name']); + echo ":"; + echo "\n"; + + if($field['description'] <> "") { + echo "
                              " . $field['description']; + } + + break; + case "timezone_select": + exec('/usr/bin/tar -tzf /usr/share/zoneinfo.tgz', $timezonelist); + $timezonelist = array_filter($timezonelist, 'is_timezone'); + sort($timezonelist); + + /* kill carriage returns */ + for($x=0; $x\n"; + echo $field['displayname']; + echo ":
                              \n"; + echo fixup_string($field['name']); + echo ":"; + echo "\n"; + + if($field['description'] <> "") { + echo "
                              " . $field['description']; + } + + break; + case "checkbox": + if ($field['displayname']) { + echo "
                              \n"; + echo $field['displayname']; + echo ":\n"; + echo $field['name']; + echo ":\n"; + + if($field['description'] <> "") { + echo $field['description']; + } + + break; + } + + if($field['typehint'] <> "") { + echo $field['typehint']; + } + if($field['warning'] <> "") { + echo "
                              " . $field['warning'] . ""; + } + + if(!$field['combinefieldsbegin']) { + if (!$field['dontcombinecells']) + echo "
                              +
                              +
                                +
                              +
                              +
                              + + + "") { + // create a fieldname loop that can be used with javascript + // hide and enable features. + echo "\n\n\n"; +} +?> + + + + "") { + // handle after form display event. + eval($pkg['step'][$stepid]['stepafterformdisplay']); +} + +if($pkg['step'][$stepid]['javascriptafterformdisplay'] <> "") { + // handle after form display event. + echo "\n\n\n"; +} + +/* + * HELPER FUNCTIONS + */ + +function fixup_string($string) { + global $config, $g, $myurl, $title; + $newstring = $string; + // fixup #1: $myurl -> http[s]://ip_address:port/ + switch($config['system']['webgui']['protocol']) { + case "http": + $proto = "http"; + break; + case "https": + $proto = "https"; + break; + default: + $proto = "http"; + break; + } + $port = $config['system']['webgui']['port']; + if($port != "") { + if(($port == "443" and $proto != "https") or ($port == "80" and $proto != "http")) { + $urlport = ":" . $port; + } elseif ($port != "80" and $port != "443") { + $urlport = ":" . $port; + } else { + $urlport = ""; + } + } + $http_host = $_SERVER['SERVER_NAME']; + $urlhost = $http_host; + // If finishing the setup wizard, check if accessing on a LAN or WAN address that changed + if($title == "Reload in progress") { + if (is_ipaddr($urlhost)) { + $host_if = find_ip_interface($urlhost); + if ($host_if) { + $host_if = convert_real_interface_to_friendly_interface_name($host_if); + if ($host_if && is_ipaddr($config['interfaces'][$host_if]['ipaddr'])) + $urlhost = $config['interfaces'][$host_if]['ipaddr']; + } + } else if ($urlhost == $config['system']['hostname']) + $urlhost = $config['wizardtemp']['system']['hostname']; + else if ($urlhost == $config['system']['hostname'] . '.' . $config['system']['domain']) + $urlhost = $config['wizardtemp']['system']['hostname'] . '.' . $config['wizardtemp']['system']['domain']; + } + if($urlhost != $http_host) + file_put_contents("{$g['tmp_path']}/setupwizard_lastreferrer", $proto . "://" . $http_host . $urlport . $_SERVER['REQUEST_URI']); + $myurl = $proto . "://" . $urlhost . $urlport . "/"; + + if (strstr($newstring, "\$myurl")) + $newstring = str_replace("\$myurl", $myurl, $newstring); + // fixup #2: $wanip + if (strstr($newstring, "\$wanip")) { + $curwanip = get_interface_ip(); + $newstring = str_replace("\$wanip", $curwanip, $newstring); + } + // fixup #3: $lanip + if (strstr($newstring, "\$lanip")) { + $lanip = get_interface_ip("lan"); + $newstring = str_replace("\$lanip", $lanip, $newstring); + } + // fixup #4: fix'r'up here. + return $newstring; +} + +function is_timezone($elt) { + return !preg_match("/\/$/", $elt); +} + +?> + + + diff --git a/usr/local/www/wizards/openvpn_wizard.inc b/usr/local/www/wizards/openvpn_wizard.inc new file mode 100644 index 000000000..202be69d1 --- /dev/null +++ b/usr/local/www/wizards/openvpn_wizard.inc @@ -0,0 +1,668 @@ + $auth) { + if ($auth['type'] != "ldap") + continue; + $found = true; + $opts = array(); + $opts['name'] = $auth['name']; + $opts['value'] = $auth['name']; + $fields[1]['options']['option'][] = $opts; + } + if ($found == false) { + $stepid = 2; + } +} + +function step2_submitphpaction() { + global $stepid; + + if (isset($_POST['next'])) { + $_POST['uselist'] = ""; + $stepid +=3; + } +} + +function step3_submitphpaction() { + global $stepid, $savemsg, $config; + + /* Default LDAP port is 389 for TCP and 636 for SSL */ + if (empty($_POST['port'])) { + if ($_POST['transport'] == "tcp") + $config['ovpnserver']['step2']['port'] = 389; + elseif ($_POST['transport'] == "ssl") + $config['ovpnserver']['step2']['port'] = 636; + } elseif (!is_port($_POST['port'])) { + $stepid--; + $savemsg = "Please enter a valid port number."; + } + + if (empty($_POST['name']) || empty($_POST['ip']) ||empty($_POST['transport']) || + empty($_POST['scope']) || empty($_POST['basedn']) || empty($_POST['authscope']) || empty($_POST['nameattr'])) { + $stepid--; + $savemsg = "Please enter all information for authentication server."; + } else if (count(($authcfg = auth_get_authserver($_POST['name']))) > 0) { + $stepid--; + $savemsg = "Please choose a different name because an authentication server with this name already exists."; + } elseif (!is_fqdn($_POST['ip']) && !is_ipaddr($_POST['ip'])) { + $stepid--; + $savemsg = "Please enter a valid IP address or hostname for the authentication server."; + } else { + $config['ovpnserver']['step2']['uselist'] = "on"; + $_POST['uselist'] = "on"; + $stepid += 2; + } +} + +function step4_stepbeforeformdisplay() { + global $pkg, $stepid; + + $fields =& $pkg['step'][3]['fields']['field']; + + $found = false; + $authlist = auth_get_authserver_list(); + $fields[1]['options']['option'] = array(); + foreach ($authlist as $i => $auth) { + if ($auth['type'] != "radius") + continue; + $found = true; + $opts = array(); + $opts['name'] = $auth['name']; + $opts['value'] = $auth['name']; + $fields[1]['options']['option'][] = $opts; + } + if ($found == false) + $stepid = 4; +} + +function step4_submitphpaction() { + global $stepid; + + if (isset($_POST['next'])) { + $_POST['uselist'] = ""; + $stepid++; + } +} + +function step5_submitphpaction() { + global $stepid, $savemsg, $config; + + /* Default RADIUS Auth port = 1812 */ + if (empty($_POST['port'])) { + $config['ovpnserver']['step2']['port'] = 1812; + } elseif (!is_port($_POST['port'])) { + $stepid--; + $savemsg = "Please enter a valid port number."; + } + + if (empty($_POST['name']) || empty($_POST['ip']) || empty($_POST['secret'])) { + $stepid--; + $savemsg = "Please enter all information for authentication server."; + } else if (count(($authcfg = auth_get_authserver($_POST['name']))) > 0) { + $stepid--; + $savemsg = "Please choose a different name because an authentication server with this name already exists."; + } elseif (!is_fqdn($_POST['ip']) && !is_ipaddr($_POST['ip'])) { + $stepid--; + $savemsg = "Please enter a valid IP address or hostname for the authentication server."; + } else { + $config['ovpnserver']['step2']['uselist'] = "on"; + $_POST['uselist'] = "on"; + } +} + +function step6_stepbeforeformdisplay() { + global $stepid, $config; + + if (count($config['ca']) < 1) { + $stepid++; + } +} + +function step6_submitphpaction() { + global $stepid, $config; + + if (isset($_POST['next'])) { + $_POST['uselist'] = ""; + unset($config['ovpnserver']['step6']['uselist']); + $stepid++; + } else { + $config['ovpnserver']['step6']['uselist'] = "on"; + $_POST['uselist'] = "on"; + } +} + +function step7_submitphpaction() { + global $input_errors, $stepid, $savemsg, $_POST, $config; + + $canames = array(); + $cacns = array(); + if (is_array($config['ca'])) { + foreach($config['ca'] as $ca) { + $canames[] = $ca['descr']; + $cainfo = cert_get_subject_hash($ca['crt']); + $cacns[] = $cainfo["CN"]; + } + } + + if (empty($_POST['descr']) || empty($_POST['keylength']) || empty($_POST['lifetime']) || + empty($_POST['country']) || empty($_POST['state']) || empty($_POST['city']) || + empty($_POST['organization']) || empty($_POST['email'])) { + $stepid--; + $savemsg = "Please enter all information for the new Certificate Authority."; + } elseif (has_special_chars($_POST['country']) || has_special_chars($_POST['state']) || + has_special_chars($_POST['city']) || has_special_chars($_POST['organization'])) { + $stepid--; + $input_errors[] = "Please do not use special characters in Certificate field names."; + } elseif (in_array($_POST['descr'], $canames) || in_array($_POST['descr'], $cacns)) { + $stepid--; + $savemsg = "Please enter a different name for the Certicicate Authority. A Certificate Authority with that name already exists."; + } elseif (strlen($_POST['country']) != 2) { + $stepid--; + $savemsg = "Please enter only a two-letter ISO country code"; + } else { + $config['ovpnserver']['step6']['uselist'] = "on"; + $_POST['uselist'] = "on"; + } +} + +function step8_stepbeforeformdisplay() { + global $stepid, $config; + + if (count($config['cert']) < 1 || + (count($config['cert']) == 1 && stristr($config['cert'][0]['descr'], "webconf"))) { + $stepid++; + } +} + +function step8_submitphpaction() { + global $stepid, $config, $_POST; + + if (isset($_POST['next'])) { + $_POST['uselist'] = ""; + unset($config['ovpnserver']['step9']['uselist']); + $stepid++; + } else { + $config['ovpnserver']['step6']['uselist'] = "on"; + $_POST['uselist'] = "on"; + } +} + +function step9_stepbeforeformdisplay() { + global $config, $pkg, $stepid; + + $pconfig = $config['ovpnserver']; + + if (isset($pconfig['step6']['uselist'])) { + $country = $pconfig['step6']['country']; + $state = $pconfig['step6']['state']; + $city = $pconfig['step6']['city']; + $org = $pconfig['step6']['organization']; + $email = $pconfig['step6']['email']; + } else { + $ca = lookup_ca($pconfig['step6']['authcertca']); + $cavl = cert_get_subject_array($ca['crt']); + $country = $cavl[0]['v']; + $state = $cavl[1]['v']; + $city = $cavl[2]['v']; + $org = $cavl[3]['v']; + $email = $cavl[4]['v']; + } + $fields =& $pkg['step'][$stepid]['fields']['field']; + + foreach ($fields as $idx => $field) { + switch ($field['name']) { + case 'country': + $fields[$idx]['value'] = $country; + break; + case 'state': + $fields[$idx]['value'] = $state; + break; + case 'city': + $fields[$idx]['value'] = $city; + break; + case 'organization': + $fields[$idx]['value'] = $org; + break; + case 'email': + $fields[$idx]['value'] = $email; + break; + } + } +} + +function step9_submitphpaction() { + global $input_errors, $stepid, $savemsg, $_POST, $config; + + $certnames = array(); + $certcns = array(); + if (is_array($config['cert'])) { + foreach($config['cert'] as $cert) { + $certnames[] = $cert['descr']; + $certinfo = cert_get_subject_hash($cert['crt']); + $certcns[] = $certinfo["CN"]; + } + } + + if (empty($_POST['descr']) || empty($_POST['keylength']) || empty($_POST['lifetime']) || + empty($_POST['country']) || empty($_POST['state']) || empty($_POST['city']) || + empty($_POST['organization']) || empty($_POST['email'])) { + $stepid--; + $savemsg = "Please enter all information for the new certificate."; + } elseif (has_special_chars($_POST['country']) || has_special_chars($_POST['state']) || + has_special_chars($_POST['city']) || has_special_chars($_POST['organization'])) { + $stepid--; + $input_errors[] = "Please do not use special characters in Certificate field names."; + } elseif (in_array($_POST['descr'], $certnames) || in_array($_POST['descr'], $certcns)) { + $stepid--; + $savemsg = "Please enter a different name for the Certicicate. A Certificate with that name/common name already exists."; + } elseif (strlen($_POST['country']) != 2) { + $stepid--; + $savemsg = "Please enter only a two-letter ISO country code"; + } else { + $config['ovpnserver']['step9']['uselist'] = "on"; + $_POST['uselist'] = "on"; + } +} + +function step10_stepbeforeformdisplay() { + global $pkg, $stepid, $netbios_nodetypes; + + foreach ($pkg['step'][$stepid]['fields']['field'] as $idx => $field) { + if ($field['name'] == "crypto") { + $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array(); + $cipherlist = openvpn_get_cipherlist(); + foreach ($cipherlist as $name => $desc) { + $opt = array(); + $opt['name'] = $desc; + $opt['value'] = $name; + $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt; + } + } else if ($field['name'] == "digest") { + $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array(); + $digestlist = openvpn_get_digestlist(); + foreach ($digestlist as $name => $desc) { + $opt = array(); + $opt['name'] = $desc; + $opt['value'] = $name; + $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt; + } + } else if ($field['name'] == "compression") { + global $openvpn_compression_modes; + $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array(); + foreach ($openvpn_compression_modes as $name => $desc) { + $opt = array(); + $opt['name'] = $desc; + $opt['value'] = $name; + $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt; + } + } else if ($field['name'] == "engine") { + $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array(); + $engines = openvpn_get_engines(); + foreach ($engines as $name => $desc) { + $opt = array(); + $opt['name'] = $desc; + $opt['value'] = $name; + $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt; + } + } else if ($field['name'] == "nbttype") { + $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array(); + foreach ($netbios_nodetypes as $type => $name) { + $opt = array(); + $opt['name'] = $name; + $opt['value'] = $type; + $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt; + } + } else if ($field['name'] == "localport") { + $pkg['step'][$stepid]['fields']['field'][$idx]['value'] = openvpn_port_next('UDP'); + } + } +} + +function step10_submitphpaction() { + global $savemsg, $stepid; + + /* Default OpenVPN port to next available port if left empty. */ + if (empty($_POST['localport'])) + $pconfig["step10"]["localport"] = openvpn_port_next('UDP'); + + /* input validation */ + if ($result = openvpn_validate_port($_POST['localport'], 'Local port')) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($_POST['tunnelnet'], 'Tunnel Network', false, "ipv4")) + $input_errors[] = $result; + + if ($result = openvpn_validate_cidr($_POST['localnet'], 'Local Network', true, "ipv4")) + $input_errors[] = $result; + + $portused = openvpn_port_used($_POST['protocol'], $_POST['interface'], $_POST['localport']); + if ($portused != 0) + $input_errors[] = "The specified 'Local port' is in use. Please select another value"; + + if (!isset($_POST['generatetlskey']) && isset($_POST['tlsauthentication'])) + if (!strstr($_POST['tlssharedkey'], "-----BEGIN OpenVPN Static key V1-----") || + !strstr($_POST['tlssharedkey'], "-----END OpenVPN Static key V1-----")) + $input_errors[] = "The field 'TLS Authentication Key' does not appear to be valid"; + + if (!empty($_POST['dnsserver1']) && !is_ipaddr(trim($_POST['dnsserver1']))) + $input_errors[] = "The field 'DNS Server #1' must contain a valid IP address"; + if (!empty($_POST['dnsserver2']) && !is_ipaddr(trim($_POST['dnsserver2']))) + $input_errors[] = "The field 'DNS Server #2' must contain a valid IP address"; + if (!empty($_POST['dnsserver3']) && !is_ipaddr(trim($_POST['dnsserver3']))) + $input_errors[] = "The field 'DNS Server #3' must contain a valid IP address"; + if (!empty($_POST['dnsserver4']) && !is_ipaddr(trim($_POST['dnsserver4']))) + $input_errors[] = "The field 'DNS Server #4' must contain a valid IP address"; + + if (!empty($_POST['ntpserver1']) && !is_ipaddr(trim($_POST['ntpserver1']))) + $input_errors[] = "The field 'NTP Server #1' must contain a valid IP address"; + if (!empty($_POST['ntpserver2']) && !is_ipaddr(trim($_POST['ntpserver2']))) + $input_errors[] = "The field 'NTP Server #2' must contain a valid IP address"; + + if (!empty($_POST['winsserver1']) && !is_ipaddr(trim($_POST['winsserver1']))) + $input_errors[] = "The field 'WINS Server #1' must contain a valid IP address"; + if (!empty($_POST['winsserver2']) && !is_ipaddr(trim($_POST['winsserver2']))) + $input_errors[] = "The field 'WINS Server #2' must contain a valid IP address"; + + if ($_POST['concurrentcon'] && !is_numeric($_POST['concurrentcon'])) + $input_errors[] = "The field 'Concurrent connections' must be numeric."; + + if (empty($_POST['tunnelnet'])) + $input_errors[] = "You must specify a 'Tunnel network'."; + + if (count($input_errors) > 0) { + $savemsg = $input_errors[0]; + $stepid = $stepid - 1; + } +} + +function step12_submitphpaction() { + global $config; + + $pconfig = $config['ovpnserver']; + + if (!is_array($config['ovpnserver'])) { + $message = "No configuration found please retry again."; + header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}"); + exit; + } + + if ($pconfig['step1']['type'] == "local") { + $auth = array(); + $auth['name'] = "Local Database"; + $auth['type'] = "local"; + } else if (isset($pconfig['step2']['uselist'])) { + $auth = array(); + $auth['type'] = $pconfig['step1']['type']; + $auth['refid'] = uniqid(); + $auth['name'] = $pconfig['step2']['authtype']; + + if ($auth['type'] == "ldap") { + $auth['host'] = $pconfig['step2']['ip']; + $auth['ldap_port'] = $pconfig['step2']['port']; + if ($pconfig['step1']['transport'] == "tcp") + $auth['ldap_urltype'] = 'TCP - Standard'; + else + $auth['ldap_urltype'] = 'SSL - Encrypted'; + $auth['ldap_protver'] = 3; + $auth['ldap_scope'] = $pconfig['step2']['scope']; + $auth['ldap_basedn'] = $pconfig['step2']['basedn']; + $auth['ldap_authcn'] = $pconfig['step2']['authscope']; + $auth['ldap_binddn'] = $pconfig['step2']['userdn']; + $auth['ldap_bindpw'] = $pconfig['step2']['passdn']; + $auth['ldap_attr_user'] = $pconfig['step1']['nameattr']; + $auth['ldap_attr_member'] = $pconfig['step1']['memberattr']; + $auth['ldap_attr_group'] = $pconfig['step1']['groupattr']; + } else if ($auth['type'] == "radius") { + $auth['host'] = $pconfig['step2']['ip']; + $auth['radius_auth_port'] = $pconfig['step2']['port']; + $auth['radius_secret'] = $pconfig['step2']['password']; + $auth['radius_srvcs'] = "auth"; + } + if (!is_array($config['system']['authserver'])) + $config['system']['authserver'] = array(); + + $config['system']['authserver'][] = $auth; + } else if (!isset($pconfig['step2']['uselist']) && empty($pconfig['step2']['authserv'])) { + $message = "Please choose an authentication server ."; + header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}"); + exit; + } else if (!($auth = auth_get_authserver($pconfig['step2']['authserv']))) { + $message = "Not a valid authentication server has been specified."; + header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}"); + exit; + } + + if (isset($pconfig['step6']['uselist']) && !empty($pconfig['step6']['certca'])) { + $ca = array(); + $ca['refid'] = uniqid(); + $ca['descr'] = $pconfig['step6']['certca']; + $dn = array( + 'countryName' => $pconfig['step6']['country'], + 'stateOrProvinceName' => $pconfig['step6']['state'], + 'localityName' => $pconfig['step6']['city'], + 'organizationName' => $pconfig['step6']['organization'], + 'emailAddress' => $pconfig['step6']['email'], + 'commonName' => $pconfig['step6']['certca']); + + ca_create($ca, $pconfig['step6']['keylength'], $pconfig['step6']['lifetime'], $dn, "sha256"); + if (!is_array($config['ca'])) + $config['ca'] = array(); + + $config['ca'][] = $ca; + } else if (!isset($pconfig['step6']['uselist']) && empty($pconfig['step6']['authcertca'])) { + $message = "Please choose a Certificate Authority."; + header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=5&message={$message}"); + exit; + } else if (!($ca = lookup_ca($pconfig['step6']['authcertca']))) { + $message = "Not a valid Certificate Authority specified."; + header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=5&message={$message}"); + exit; + } + + if (isset($pconfig['step9']['uselist'])) { + $cert = array(); + $cert['refid'] = uniqid(); + $cert['descr'] = $pconfig['step9']['certname']; + $dn = array( + 'countryName' => $pconfig['step9']['country'], + 'stateOrProvinceName' => $pconfig['step9']['state'], + 'localityName' => $pconfig['step9']['city'], + 'organizationName' => $pconfig['step9']['organization'], + 'emailAddress' => $pconfig['step9']['email'], + 'commonName' => $pconfig['step9']['certname']); + + cert_create($cert, $ca['refid'], $pconfig['step9']['keylength'], $pconfig['step9']['lifetime'], $dn, 'server', "sha256"); + if (!is_array($config['cert'])) + $config['cert'] = array(); + + $config['cert'][] = $cert; + } else if (!isset($pconfig['step9']['uselist']) && empty($pconfig['step9']['authcertname'])) { + $message = "Please choose a Certificate."; + header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=7&message={$message}"); + exit; + } else if (!($cert = lookup_cert($pconfig['step9']['authcertname']))) { + $message = "Not a valid Certificate specified."; + header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=7&message={$message}"); + exit; + } + $server = array(); + $server['vpnid'] = openvpn_vpnid_next(); + switch ($auth['type']) { + case "ldap": + $server['authmode'] = $auth['name']; + $server['mode'] = "server_user"; + break; + case "radius": + $server['authmode'] = $auth['name']; + $server['mode'] = "server_user"; + break; + default: + $server['authmode'] = "Local Database"; + $server['mode'] = "server_tls_user"; + break; + } + $server['caref'] = $ca['refid']; + $server['certref'] = $cert['refid']; + $server['protocol'] = $pconfig['step10']['protocol']; + $server['interface'] = $pconfig['step10']['interface']; + if (isset($pconfig['step10']['localport'])) + $server['local_port'] = $pconfig['step10']['localport']; + + if (strlen($pconfig['step10']['descr']) > 30) + $pconfig['step10']['descr'] = substr($pconfig['step10']['descr'], 0, 30); + $server['description'] = $pconfig['step10']['descr']; + $server['custom_options'] = $pconfig['step10']['advanced']; + if (isset($pconfig['step10']['tlsauth'])) { + if (isset($pconfig['step10']['gentlskey'])) + $tlskey = openvpn_create_key(); + else + $tlskey = $pconfig['step10']['tlskey']; + $server['tls'] = base64_encode($tlskey); + } + $server['dh_length'] = $pconfig['step10']['dhkey']; + $server['tunnel_network'] = $pconfig['step10']['tunnelnet']; + if (isset($pconfig['step10']['rdrgw'])) + $server['gwredir'] = $pconfig['step10']['rdrgw']; + if (isset($pconfig['step10']['localnet'])) + $server['local_network'] = $pconfig['step10']['localnet']; + if (isset($pconfig['step10']['concurrentcon'])) + $server['maxclients'] = $pconfig['step10']['concurrentcon']; + if (isset($pconfig['step10']['compression'])) + $server['compression'] = $pconfig['step10']['compression']; + if (isset($pconfig['step10']['tos'])) + $server['passtos'] = $pconfig['step10']['tos']; + if (isset($pconfig['step10']['interclient'])) + $server['client2client'] = $pconfig['step10']['interclient']; + if (isset($pconfig['step10']['duplicate_cn'])) + $server['duplicate_cn'] = $pconfig['step10']['duplicate_cn']; + if (isset($pconfig['step10']['dynip'])) + $server['dynamic_ip'] = $pconfig['step10']['dynip']; + if (isset($pconfig['step10']['addrpool'])) + $server['pool_enable'] = $pconfig['step10']['addrpool']; + if (isset($pconfig['step10']['defaultdomain'])) + $server['dns_domain'] = $pconfig['step10']['defaultdomain']; + if (isset($pconfig['step10']['dns1'])) + $server['dns_server1'] = $pconfig['step10']['dns1']; + if (isset($pconfig['step10']['dns2'])) + $server['dns_server2'] = $pconfig['step10']['dns2']; + if (isset($pconfig['step10']['dns3'])) + $server['dns_server3'] = $pconfig['step10']['dns3']; + if (isset($pconfig['step10']['dns4'])) + $server['dns_server4'] = $pconfig['step10']['dns4']; + if (isset($pconfig['step10']['ntp1'])) + $server['ntp_server1'] = $pconfig['step10']['ntp1']; + if (isset($pconfig['step10']['ntp2'])) + $server['ntp_server2'] = $pconfig['step10']['ntp2']; + if (isset($pconfig['step10']['wins1'])) + $server['wins_server1'] = $pconfig['step10']['wins1']; + if (isset($pconfig['step10']['wins2'])) + $server['wins_server2'] = $pconfig['step10']['wins2']; + if (isset($pconfig['step10']['nbtenable'])) { + $server['netbios_ntype'] = $pconfig['step10']['nbttype']; + if (isset($pconfig['step10']['nbtscope'])) + $server['netbios_scope'] = $pconfig['step10']['nbtscope']; + $server['netbios_enable'] = $pconfig['step10']['nbtenable']; + } + $server['crypto'] = $pconfig['step10']['crypto']; + $server['digest'] = $pconfig['step10']['digest']; + $server['engine'] = $pconfig['step10']['engine']; + + if (isset($pconfig['step11']['ovpnrule'])) { + $rule = array(); + $rule['descr'] = sprintf(gettext("OpenVPN %s wizard"),$server['description']); + /* Ensure the rule descr is not too long for pf to handle */ + if (strlen($rule['descr']) > 52) + $rule['descr'] = substr($rule['descr'], 0, 52); + $rule['direction'] = "in"; + $rule['source']['any'] = TRUE; + $rule['destination']['network'] = $server['interface'] . "ip"; + $rule['destination']['port'] = $server['local_port']; + $rule['interface'] = $server['interface']; + $rule['protocol'] = strtolower($server['protocol']); + $rule['type'] = "pass"; + $rule['enabled'] = "on"; + $rule['created'] = make_config_revision_entry(null, gettext("OpenVPN Wizard")); + $config['filter']['rule'][] = $rule; + } + if (isset($pconfig['step11']['ovpnallow'])) { + $rule = array(); + $rule['descr'] = sprintf(gettext("OpenVPN %s wizard"),$server['description']); + /* Ensure the rule descr is not too long for pf to handle */ + if (strlen($rule['descr']) > 52) + $rule['descr'] = substr($rule['descr'], 0, 52); + $rule['source']['any'] = TRUE; + $rule['destination']['any'] = TRUE; + $rule['interface'] = "openvpn"; + //$rule['protocol'] = $server['protocol']; + $rule['type'] = "pass"; + $rule['enabled'] = "on"; + $rule['created'] = make_config_revision_entry(null, gettext("OpenVPN Wizard")); + $config['filter']['rule'][] = $rule; + } + + if (!is_array($config['openvpn']['openvpn-server'])) + $config['openvpn']['openvpn-server'] = array(); + + $config['openvpn']['openvpn-server'][] = $server; + + openvpn_resync('server', $server); + write_config(); + header("Location: vpn_openvpn_server.php"); + exit; +} + +?> diff --git a/usr/local/www/wizards/openvpn_wizard.xml b/usr/local/www/wizards/openvpn_wizard.xml new file mode 100644 index 000000000..87134be3f --- /dev/null +++ b/usr/local/www/wizards/openvpn_wizard.xml @@ -0,0 +1,985 @@ + + + +/* + part of pfSense (https://www.pfsense.org/) + + Copyright (C) 2010 Ermal Luci + 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. +*/ + +12 + + 1 + OpenVPN Wizard: Authentication Type Selection + OpenVPN Remote Access Server Setup Wizard + on + + + listtopic + Select an Authentication Backend Type + + + select + Type of Server + authtype + <br/><b>NOTE:</b> If you are unsure, leave this set to "Local User Access." + ovpnserver->step1->type + + + + + + + + Next + submit + + + step1_submitphpaction(); + /usr/local/www/wizards/openvpn_wizard.inc + + + 2 + OpenVPN Wizard: LDAP Server Selection + OpenVPN Remote Access Server Setup Wizard + on + + + listtopic + LDAP Authentication Server List + + + authserv + LDAP servers + select + ovpnserver->step2->authserv + + + + + + submit + Add new LDAP server + + + submit + Next + + + step2_stepbeforeformdisplay(); + step2_submitphpaction(); + enablechange(); + /usr/local/www/wizards/openvpn_wizard.inc + + + 3 + OpenVPN Wizard: Add LDAP Server + OpenVPN Remote Access Server Setup Wizard + on + + + listtopic + LDAP Authentication Server Parameters + + + name + Name + input + ovpnserver->step2->authtype + 30 + Descriptive server name, for your own reference. + + + ip + Hostname or IP address + input + ovpnserver->step2->ip + Address of the LDAP server. + + + port + Port + input + 8 + ovpnserver->step2->port + LDAP Server port, leave blank for the default (389 for TCP, 636 for SSL). + + + transport + Transport + select + ovpnserver->step2->transport + + + + + <br/>The protocol used by your LDAP server. It can either be standard TCP or SSL encrypted. + + + scope + Search Scope Level + select + + + + + ovpnserver->step2->scope + + + basedn + Search Scope Base DN + input + 40 + ovpnserver->step2->basedn + + + authscope + Authentication Containers + input + 40 + ovpnserver->step2->authscope + Semi-Colon separated. This will be prepended to the search base dn above or you can specify full container path.<br/>EXAMPLE: CN=Users;DC=example<br/>EXAMPLE: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com + + + userdn + LDAP Bind User DN + input + 20 + If left blank, an anonymous bind will be done. + ovpnserver->step2->userdn + + + passdn + LDAP Bind Password + password + 20 + ovpnserver->step2->passdn + If a user DN was supplied above, this password will also be used when performing a bind operation. + + + nameattr + User Naming Attribute + input + ovpnserver->step2->nameattr + Typically "cn" (OpenLDAP, Novell eDirectory), "samAccountName" (Microsoft AD) + + + groupattr + Group Naming Attribute + input + ovpnserver->step2->groupattr + Typically "cn" (OpenLDAP, Microsoft AD, and Novell eDirectory) + + + memberattr + Member Naming Attribute + input + ovpnserver->step2->memberattr + Typically "member" (OpenLDAP), "memberOf" (Microsoft AD), "uniqueMember" (Novell eDirectory) + + + submit + Add new Server + + + step3_submitphpaction(); + enablechange(); + /usr/local/www/wizards/openvpn_wizard.inc + + + 4 + OpenVPN Wizard: RADIUS Server Selection + OpenVPN Remote Access Server Setup Wizard + on + + + listtopic + RADIUS Authentication Server List + + + authserv + RADIUS servers + select + ovpnserver->step2->authserv + + + + + + submit + Add new RADIUS server + + + submit + Next + + + step4_stepbeforeformdisplay(); + step4_submitphpaction(); + enablechange(); + /usr/local/www/wizards/openvpn_wizard.inc + + + 5 + OpenVPN Wizard: Add RADIUS Server + OpenVPN Remote Access Server Setup Wizard + on + + + listtopic + RADIUS Authentication Server Parameters + + + name + Name + input + ovpnserver->step2->authtype + 20 + Descriptive name for the RADIUS server, for your reference. + + + ip + Hostname or IP address + input + ovpnserver->step2->ip + Address of the RADIUS server. + + + port + Authentication Port + input + 8 + ovpnserver->step2->port + Port used by the RADIUS server for accepting Authentication requests, typically 1812. + + + secret + Shared Secret + password + 20 + ovpnserver->step2->password + + + + Add new Server + submit + + + step5_submitphpaction(); + /usr/local/www/wizards/openvpn_wizard.inc + + + 6 + OpenVPN Wizard: Certificate Authority Selection + OpenVPN Remote Access Server Setup Wizard + on + + + Choose a Certificate Authority (CA) + listtopic + + + certca_selection + certca + Certificate Authority + ovpnserver->step6->authcertca + + + submit + Add new CA + + + Next + submit + + + step6_stepbeforeformdisplay(); + step6_submitphpaction(); + /usr/local/www/wizards/openvpn_wizard.inc + + + 7 + OpenVPN Wizard: Add Certificate Authority + OpenVPN Remote Access Server Setup Wizard + on + + + Create a New Certificate Authority (CA) Certificate + listtopic + + + descr + Descriptive name + A name for your reference, to identify this certificate. This is the same as common-name field for other Certificates. + input + 20 + ovpnserver->step6->certca + + + keylength + Key length + <br/>Size of the key which will be generated. The larger the key, the more security is offers, but larger keys are generally slower to use. + select + 2048 + ovpnserver->step6->keylength + + + + + + + + + lifetime + Lifetime + input + 10 + 3650 + Lifetime in days. This is commonly set to 3650 (Approximately 10 years.) + ovpnserver->step6->lifetime + + + country + Country Code + Two-letter ISO country code (e.g. US, AU, CA) + input + 5 + ovpnserver->step6->country + + + state + State or Province + Full State of Province name, not abbreviated (e.g. Kentucky, Indiana, Ontario). + input + 30 + ovpnserver->step6->state + + + city + City + City or other Locality name (e.g. Louisville, Indianapolis, Toronto). + input + 30 + ovpnserver->step6->city + + + organization + Organization + Organization name, often the Company or Group name. + input + 30 + ovpnserver->step6->organization + + + email + E-mail + E-mail address for the Certificate contact. Often the e-mail of the person generating the certificate (i.e. You.) + input + 30 + ovpnserver->step6->email + + + Add new CA + submit + + + step7_submitphpaction(); + /usr/local/www/wizards/openvpn_wizard.inc + enablechange(); + + + 8 + OpenVPN Wizard: Server Certificate Selection + OpenVPN Remote Access Server Setup Wizard + on + + + Choose a Server Certificate + listtopic + + + cert_selection + certname + Certificate + ovpnserver->step9->authcertname + + + submit + Add new Certificate + + + Next + submit + + + step8_stepbeforeformdisplay(); + step8_submitphpaction(); + /usr/local/www/wizards/openvpn_wizard.inc + + + 9 + OpenVPN Wizard: Add a Server Certificate + OpenVPN Remote Access Server Setup Wizard + on + + + Create a New Server Certificate + listtopic + + + descr + Descriptive name + A name for your reference, to identify this certificate. This is also known as the certificate's "Common Name." + input + 20 + ovpnserver->step9->certname + + + keylength + Key length + <br/>Size of the key which will be generated. The larger the key, the more security is offers, but larger keys are generally slower to use. + select + 2048 + ovpnserver->step9->keylength + + + + + + + + + lifetime + Lifetime + Lifetime in days. This is commonly set to 3650 (Approximately 10 years.) + input + 10 + 3650 + ovpnserver->step9->lifetime + + + country + Country Code + Two-letter ISO country code (e.g. US, AU, CA) + input + 5 + ovpnserver->step9->country + + + state + State or Province + Full State of Province name, not abbreviated (e.g. Kentucky, Indiana, Ontario). + input + 30 + ovpnserver->step9->state + + + city + City + City or other Locality name (e.g. Louisville, Indianapolis, Toronto). + input + 30 + ovpnserver->step9->city + + + organization + Organization + Organization name, often the Company or Group name. + input + 30 + ovpnserver->step9->organization + + + email + E-mail + E-mail address for the Certificate contact. Often the e-mail of the person generating the certificate (i.e. You.) + input + 30 + ovpnserver->step9->email + + + Create new Certificate + submit + + + step9_stepbeforeformdisplay(); + step9_submitphpaction(); + /usr/local/www/wizards/openvpn_wizard.inc + + + 10 + OpenVPN Wizard: Server Setup + OpenVPN Remote Access Server Setup Wizard + on + + + listtopic + General OpenVPN Server Information + + + interface + interfaces_selection + The interface where OpenVPN will listen for incoming connections (typically WAN.) + Interface + ovpnserver->step10->interface + + + Protocol + select + ovpnserver->step10->protocol + + + + + <br/>Protocol to use for OpenVPN connections. If you are unsure, leave this set to UDP. + + + localport + Local Port + Local port upon which OpenVPN will listen for connections. The default port is 1194. Leave this blank unless you need to use a different port. + input + 10 + ovpnserver->step10->localport + + + description + Description + A name for this OpenVPN instance, for your reference. It can be set however you like, but is often used to distinguish the purpose of the service (e.g. "Remote Technical Staff"). + input + 30 + ovpnserver->step10->descr + + + listtopic + Cryptographic Settings + + + TLS Authentication + checkbox + on + Enable authentication of TLS packets. + ovpnserver->step10->tlsauth + + + Generate TLS Key + generatetlskey + tlssharedkey + on + checkbox + Automatically generate a shared TLS authentication key. + ovpnserver->step10->gentlskey + + + TLS Shared Key + tlssharedkey + Paste in a shared TLS key if one has already been generated. + textarea + 30 + 5 + ovpnserver->step10->tlskey + + + DH Parameters Length + dhparameters + select + ovpnserver->step10->dhkey + + + + + + <br/>Length of Diffie-Hellman (DH) key exchange parameters, used for establishing a secure communications channel. As with other such settings, the larger values are more secure, but may be slower in operation. + + + crypto + select + Encryption Algorithm + ovpnserver->step10->crypto + + + + <br/>The method used to encrypt traffic between endpoints. This setting must match on the client and server side, but is otherwise set however you like. Certain algorithms will perform better on different hardware, depending on the availability of supported VPN accelerator chips. + + + digest + select + Auth Digest Algorithm + ovpnserver->step10->digest + + + + SHA1 + <br/>The method used to authenticate traffic between endpoints. This setting must match on the client and server side, but is otherwise set however you like. + + + engine + select + Hardware Crypto + ovpnserver->step10->engine + + + + <br/>The hardware cryptographic accelerator to use for this VPN connection, if any. + + + listtopic + Tunnel Settings + + + Tunnel Network + tunnelnet + input + 20 + ovpnserver->step10->tunnelnet + This is the virtual network used for private communications between this server and client hosts expressed using CIDR notation (eg. 10.0.8.0/24). The first network address will be assigned to the server virtual interface. The remaining network addresses can optionally be assigned to connecting clients. (see Address Pool) + + + Redirect Gateway + redirectgw + checkbox + Force all client generated traffic through the tunnel. + ovpnserver->step10->rdrgw + + + Local Network + localnet + input + 20 + ovpnserver->step10->localnet + This is the network that will be accessible from the remote endpoint, expressed as a CIDR range. You may leave this blank if you don't want to add a route to the local network through this tunnel on the remote machine. This is generally set to your LAN network. + + + Concurrent Connections + concurrentcon + Specify the maximum number of clients allowed to concurrently connect to this server. + input + 10 + ovpnserver->step10->concurrentcon + + + Compression + compression + <br/>Compress tunnel packets using the LZO algorithm. Adaptive compression will dynamically disable compression for a period of time if OpenVPN detects that the data in the packets is not being compressed efficiently. + ovpnserver->step10->compression + select + + + + + + Type-of-Service + tos + checkbox + Set the TOS IP header value of tunnel packets to match the encapsulated packet value. + ovpnserver->step10->tos + + + Inter-Client Communication + interclient + checkbox + Allow communication between clients connected to this server. + ovpnserver->step10->interclient + + + Duplicate Connections + duplicate_cn + checkbox + Allow multiple concurrent connections from clients using the same Common Name.<br/>NOTE: This is not generally recommended, but may be needed for some scenarios. + ovpnserver->step10->duplicate_cn + + + listtopic + Client Settings + + + Dynamic IP + dynip + checkbox + on + Allow connected clients to retain their connections if their IP address changes. + ovpnserver->step10->dynip + + + Address Pool + addrpool + checkbox + on + Provide a virtual adapter IP address to clients (see Tunnel Network). + ovpnserver->step10->addrpool + + + DNS Default Domain + defaultdomain + input + Provide a default domain name to clients. + ovpnserver->step10->defaultdomain + + + DNS Server 1 + dnsserver1 + input + ovpnserver->step10->dns1 + DNS server to provide for connecting client systems. + + + DNS Server 2 + dnserver2 + input + ovpnserver->step10->dns2 + DNS server to provide for connecting client systems. + + + DNS Server 3 + dnserver3 + input + ovpnserver->step10->dns3 + DNS server to provide for connecting client systems. + + + DNS Server 4 + dnserver4 + input + ovpnserver->step10->dns4 + DNS server to provide for connecting client systems. + + + NTP Server + ntpserver1 + input + ovpnserver->step10->ntp1 + Network Time Protocol server to provide for connecting client systems. + + + NTP Server 2 + ntpserver2 + input + ovpnserver->step10->ntp2 + Network Time Protocol server to provide for connecting client systems. + + + nbtenable + checkbox + NetBIOS Options + ovpnserver->step10->nbtenable + Enable NetBIOS over TCP/IP. <br/>If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled. + + + NetBIOS Node Type + nbttype + select + ovpnserver->step10->nbttype + + + + <br/>Possible options: b-node (broadcasts), p-node (point-to-point name queries to a WINS server), m-node (broadcast then query name server), and h-node (query name server, then broadcast). + + + NetBIOS Scope ID + nbtscope + input + ovpnserver->step10->nbtscope + A NetBIOS Scope ID provides an extended naming service for NetBIOS over TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to only those nodes with the same NetBIOS scope ID. + + + WINS Server 1 + winsserver1 + input + ovpnserver->step10->wins1 + A Windows Internet Name Service (WINS) server to provide for connecting clients, which allows them to browse Windows shares. This is typically an Active Directory Domain Controller, designated WINS server, or Samba server. + + + WINS Server 2 + winsserver2 + input + ovpnserver->step10->wins2 + A Windows Internet Name Service (WINS) server to provide for connecting clients, which allows them to browse Windows shares. This is typically an Active Directory Domain Controller, designated WINS server, or Samba server. + + + Advanced + textarea + 30 + 5 + Enter any additional options you would like to add to the OpenVPN server configuration here, separated by a semicolon. EXAMPLE: push "route 10.0.0.0 255.255.255.0" + ovpnserver->step10->advanced + + + Next + submit + + + step10_stepbeforeformdisplay(); + step10_submitphpaction(); + /usr/local/www/wizards/openvpn_wizard.inc + + + 11 + OpenVPN Wizard: Firewall Rule Configuration + OpenVPN Remote Access Server Setup Wizard + on + + + listtopic + Firewall Rule Configuration + + + text + Firewall Rules control what network traffic is permitted. You must add rules to allow traffic to the OpenVPN server's IP and port, as well as allowing traffic from connected clients through the tunnel. These rules can be automatically added here, or configured manually after completing the wizard. + + + listtopic + Traffic from clients to server + + + ovpnrule + Firewall Rule + Add a rule to permit traffic from clients on the Internet to the OpenVPN server process. + checkbox + ovpnserver->step11->ovpnrule + + + listtopic + Traffic from clients through VPN + + + ovpnallow + OpenVPN rule + Add a rule to allow all traffic from connected clients to pass across the VPN tunnel. + checkbox + ovpnserver->step11->ovpnallow + + + Next + submit + + + + + 12 + OpenVPN Wizard: Finished! + OpenVPN Remote Access Server Setup Wizard + on + + + listtopic + Configuration Complete! + + + text + Your configuration is now complete. + + + text + To be able to export client configurations, browse to System->Packages and install the OpenVPN Client Export package. + + + submit + Finish + + + step12_submitphpaction(); + /usr/local/www/wizards/openvpn_wizard.inc + + \ No newline at end of file diff --git a/usr/local/www/wizards/setup_wizard.xml b/usr/local/www/wizards/setup_wizard.xml new file mode 100644 index 000000000..055825068 --- /dev/null +++ b/usr/local/www/wizards/setup_wizard.xml @@ -0,0 +1,660 @@ + + + +/* $Id$ */ +/* + setup.xml + part of pfSense (https://www.pfsense.org/) + + Copyright (C) 2004, 2005 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. +*/ + +10 + + 1 + pfSense Setup Wizard + true + This wizard will guide you through the initial configuration of pfSense.<br/><br/> The wizard may be stopped at any time by clicking the logo image at the top of the screen. + + + Next + submit + + + + conf_mount_rw(); + unlink_if_exists('/conf/trigger_initial_wizard'); + conf_mount_ro(); + + + + 2 + Bling your pfSense with pfSense Gold + true + Feel the power of a pfSense Gold subscription. Receive special benefits while supporting ongoing development of the Open Source pfSense project.<br/> <br/> Benefits include access to our AutoConfigBackup secure cloud based backup service for up to 10 hosts, pre-publication access to the updated pfSense: The Definitive Guide book in PDF, fully updated for the pfSense 2.1 release, and a monthly online MeetUp! Video conference to discuss and demonstrate advanced features and architectures using pfSense. <br/> <br/> Go to <a href="https://www.pfsense.org/gold" target="_blank"> pfSense Gold Subscriptions</a> to sign up now <br/> <br/> + + + Next + submit + + + + + 3 + General Information + On this screen you will set the general pfSense parameters. + + + Hostname + input + wizardtemp->system->hostname + EXAMPLE: myserver + ^[a-z0-9.|-]+$ + Invalid Hostname + + + Domain + input + wizardtemp->system->domain + EXAMPLE: mydomain.com + ^[a-z0-9.|-]+$ + Domain name field is invalid + + + Primary DNS Server + input + system->dnsserver + + yes + 0 + ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ + Primary DNS Server field is invalid + + + Secondary DNS Server + input + system->dnsserver + 1 + ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ + Secondary DNS Server field is invalid + + + Override DNS + Allow DNS servers to be overridden by DHCP/PPP on WAN + checkbox + system->dnsallowoverride + + + Next + submit + + + + + + + + + + + 4 + Time Server Information + Please enter the time, date and time zone. + + + Time server hostname + Enter the hostname (FQDN) of the time server. + input + system->timeservers + + + Timezone + timezone_select + system->timezone + + + Next + submit + + + + + + + + 5 + true + Configure WAN Interface + On this screen we will configure the Wide Area Network information. + + var selectedItem = 0; + if(document.forms[0].ipaddress.value == 'dhcp') { + selectedItem = 1; + document.forms[0].ipaddress.value = ''; + } else if(document.forms[0].ipaddress.value == 'pppoe') { + selectedItem = 2; + document.forms[0].ipaddress.value = ''; + } else if(document.forms[0].ipaddress.value == 'pptp') { + selectedItem = 3; + document.forms[0].ipaddress.value = ''; + } else if(document.forms[0].ipaddress.value == 'ppp' || document.forms[0].ipaddress.value == 'l2tp') { + document.forms[0].ipaddress.value = ''; + } else { + selectedItem = 0; + } + document.forms[0].selectedtype.selectedIndex = selectedItem; + enableitems(selectedItem); + + + + SelectedType + select + true + + + + + + + + + General configuration + listtopic + + + true + MAC Address + interfaces->wan->spoofmac + input + This field can be used to modify ("spoof") the MAC address of the WAN interface (may be required with some cable connections). Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx or leave blank. + ^([0-9a-f]{2}([:-]||$)){6}$ + MAC Address field is invalid + + + true + MTU + input + interfaces->wan->mtu + Set the MTU of the WAN interface. If you leave this field blank, an MTU of 1492 bytes for PPPoE and 1500 bytes for all other connection types will be assumed. + + + true + MSS + input + interfaces->wan->mss + If you enter a value in this field, then MSS clamping for TCP connections to the value entered above minus 40 (TCP/IP header size) will be in effect. If you leave this field blank, an MSS of 1492 bytes for PPPoE and 1500 bytes for all other connection types will be assumed. This should match the above MTU value in most all cases. + + + Static IP Configuration + listtopic + + + IP Address + interfaces->wan->ipaddr + input + / + true + ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ + IP Address field is invalid + + + true + true + true + Subnet Mask + interfaces->wan->subnet + subnet_select + + + Upstream Gateway + wizardtemp->wangateway + input + ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ + Gateway IP Address field is invalid + + + DHCP client configuration + listtopic + + + DHCP Hostname + input + interfaces->wan->dhcphostname + The value in this field is sent as the DHCP client identifier and hostname when requesting a DHCP lease. Some ISPs may require this (for client identification). + + + PPPoE configuration + listtopic + + + PPPoE Username + input + wizardtemp->wan->username + + + PPPoE Password + input + wizardtemp->wan->password + + + PPPoE Service name + input + Hint: this field can usually be left empty + wizardtemp->wan->provider + + + PPPoE Dial on demand + Enable Dial-On-Demand mode + checkbox + This option causes the interface to operate in dial-on-demand mode, allowing you to have a virtual full time connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected. + wizardtemp->wan->ondemand + + + PPPoE Idle timeout + input + If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature. + wizardtemp->wan->idletimeout + + + PPTP configuration + listtopic + + + PPTP Username + input + wizardtemp->wan->pptpusername + + + PPTP Password + input + wizardtemp->wan->pptppassword + + + true + PPTP Local IP Address + input + / + wizardtemp->wan->localip + ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ + PPTP Local IP Address field is invalid + + + true + true + true + pptplocalsubnet + wizardtemp->wan->subnet + subnet_select + + + PPTP Remote IP Address + wizardtemp->wan->gateway + input + ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ + PPTP Remote IP Address field is invalid + + + PPTP Dial on demand + Enable Dial-On-Demand mode + checkbox + wizardtemp->wan->pptpondemand + This option causes the interface to operate in dial-on-demand mode, allowing you to have a virtual full time connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected. + + + PPTP Idle timeout + input + wizardtemp->wan->pptpidletimeout + If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature. + + + RFC1918 Networks + listtopic + + + true + Block RFC1918 Private Networks + When set, this option blocks traffic from IP addresses that are reserved for private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as well as loopback addresses (127/8). You should generally leave this option turned on, unless your WAN network lies in such a private address space, too. + checkbox + interfaces->wan->blockpriv + Block private networks from entering via WAN + + + Block bogon networks + listtopic + + + true + Block bogon networks + When set, this option blocks traffic from IP addresses that are reserved (but not RFC 1918) or not yet assigned by IANA. Bogons are prefixes that should never appear in the Internet routing table, and obviously should not appear as the source address in any packets you receive. + checkbox + interfaces->wan->blockbogons + Block non-Internet routed networks from entering via WAN + + + Next + submit + + + + + + + $ppp) { + if ($ppp['ptpid'] == "0") { + if ((substr($config['interfaces']['wan']['if'],0,5) == "pppoe") || (substr($config['interfaces']['wan']['if'],0,4) == "pptp")) { + $oldif = explode(",", $ppp['ports']); + $config['interfaces']['wan']['if'] = $oldif[0]; + } + if ($type == "pppoe" || $type == "pptp") + unset($config['ppps']['ppp'][$pppid]); + } + } + } + + if ($type == "pppoe" || $type == "pptp") { + if ($type == "pptp") { + $config['wizardtemp']['wan']['username'] = $config['wizardtemp']['wan']['pptpusername']; + $config['wizardtemp']['wan']['password'] = $config['wizardtemp']['wan']['pptppassword']; + $config['wizardtemp']['wan']['ondemand'] = $config['wizardtemp']['wan']['pptpondemand']; + $config['wizardtemp']['wan']['idletimeout'] = $config['wizardtemp']['wan']['pptpidletimeout']; + unset($config['wizardtemp']['wan']['pptpusername']); + unset($config['wizardtemp']['wan']['pptppassword']); + unset($config['wizardtemp']['wan']['pptpondemand']); + unset($config['wizardtemp']['wan']['pptpidletimeout']); + } + $config['wizardtemp']['wan']['password'] = base64_encode($config['wizardtemp']['wan']['password']); + $tmp = array(); + $tmp['ptpid'] = "0"; + $tmp['type'] = $type; + $tmp['if'] = $type . "0"; + $tmp['ports'] = $config['interfaces']['wan']['if']; + $config['ppps']['ppp'][] = array_merge($tmp, $config['wizardtemp']['wan']); + unset($tmp); + $config['interfaces']['wan']['if'] = $type."0"; + } + unset($config['wizardtemp']['wan']); + ]]> + + + + + + + 6 + Configure LAN Interface + On this screen we will configure the Local Area Network information. + + + LAN IP Address + input + interfaces->lan->ipaddr + Type dhcp if this interface uses DHCP to obtain its IP address. + ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ + LAN IP Address field is invalid + + + Subnet Mask + subnet_select + interfaces->lan->subnet + + + Next + submit + + + + + + + + 7 + Set Admin WebGUI Password + On this screen we will set the admin password, which is used to access the WebGUI and also SSH services if you wish to enable them. + + + Admin Password + password + + + Admin Password AGAIN + password + + + Next + submit + + + + if($_POST['adminpassword'] != "") { + if($_POST['adminpassword'] == $_POST['adminpasswordagain']) { + $admin_user =& getUserEntryByUID(0); + local_user_set_password($admin_user, $_POST['adminpassword']); + local_user_set($admin_user); + write_config(); + } else { + print_info_box_np("Passwords do not match! Please press back in your browser window and correct."); + die; + } + } + + + + 8 + Reload configuration + true + Click 'Reload' to reload pfSense with new changes. + + + Reload + submit + + + + + 9 + Reload in progress + + A reload is now in progress. Please wait. <p> + <meta http-equiv="refresh" content="5; url=wizard.php?xml=setup_wizard.xml&stepid=9" > + <p> + The wizard will redirect to the next step once the reload is completed. + + + + + + + 10 + Wizard completed. + + 'pfSense') { + header("Location: " . fixup_string("\$myurl")); + exit; + } + ]]> + + + + Please consider donating to the project to help us with our overhead costs.

                              + Click here to donate or purchase services offered by the pfSense team.

                              + Click here to continue on to pfSense webConfigurator. + ]]> + + + diff --git a/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc b/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc new file mode 100644 index 000000000..82a2b82a8 --- /dev/null +++ b/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc @@ -0,0 +1,1656 @@ + $ifdesc) { + if (!is_altq_capable(get_real_interface($if))) + continue; + if (interface_has_gateway($if) || interface_has_gatewayv6($if)) + $wans++; + else + $lans++; + } + + foreach ($fields as &$field) + if ($field['name'] == 'numberofconnections') + $field['value'] = ($wans < $lans ? $wans : $lans); +} + +function step1_submitphpaction() { + global $stepid, $savemsg; + + if (!isset($_POST['numberofconnections'])) { + $savemsg=gettext("You need to specify the number of connections."); + $stepid--; + return; + } + if (intval($_POST['numberofconnections']) < 1) { + $savemsg=gettext("The number of connections should be greater than 1."); + $stepid--; + return; + } +} + +function step2_stepbeforeformdisplay() { + global $config, $pkg; + global $stepid, $savemsg; + + $wans = 0; + $lans = 0; + $iflist = array(); + $iflisttmp = get_configured_interface_with_descr(); + foreach ($iflisttmp as $if => $ifdesc) { + if (!is_altq_capable(get_real_interface($if))) + continue; + if (interface_has_gateway($if) || interface_has_gatewayv6($if)) + $wans++; + else + $lans++; + $iflist[$if] = $ifdesc; + } + $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']); + if ($numberofconnections > ($wans < $lans ? $wans : $lans)) { + $savemsg=gettext("You have less interfaces than number of connections!"); + $stepid--; + return; + } + + $cfgname = "traffic_shaper_wizard_dedicated.xml"; + + $fields =& $pkg['step'][1]['fields']['field']; + + /* + unset($config['ezshaper']['step2']); + $config['ezshaper']['step2'] = array(); + write_config(); + */ + $fields = array(); + + for ($i = 0; $i < $numberofconnections; $i++) { + $field = array(); + $linknum = $i+1; + $ifsel = ($i * 2); + $field['name'] = "Connection #{$linknum} parameters"; + $field['type'] = "listtopic"; + $fields[] = $field; + + $field = array(); + $field['displayname'] = "Local interface"; + $field['name'] = "local{$i}interface"; + $field['type'] = "select"; + $field['options']['option'] = array(); + $ifcnt = 0; + foreach ($iflist as $ifname => $ifdescr) { + // Skip wan interfaces here + if (interface_has_gateway($ifname) || interface_has_gatewayv6($ifname)) + continue; + if ($ifcnt == ($ifsel + 1)) + $field['value'] = $ifname; + $opts = array(); + $opts['displayname'] = $ifdescr; + $opts['name'] = $ifname; + $opts['value'] = $ifname; + $field['options']['option'][] = $opts; + $ifcnt++; + } + $field['combinefieldsbegin'] = "true"; + $field['bindstofield'] = "ezshaper->step2->local{$i}interface"; + $fields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "local{$i}downloadscheduler"; + $field['type'] = "select"; + $field['typehint'] = "Queueing discipline to apply on the download of this connection."; + $field['options']['option'] = array(); + $opts = array(); + $opts['name'] = "HFSC"; + $opts['value'] = "HFSC"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "CBQ"; + $opts['value'] = "CBQ"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "PRIQ"; + $opts['value'] = "PRIQ"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step2->local{$i}downloadscheduler"; + $fields[] = $field; + + $field = array(); + $field['displayname'] = "WAN Interface"; + $field['name'] = "conn{$i}interface"; + $field['type'] = "select"; + $field['options']['option'] = array(); + $ifcnt = 0; + foreach ($iflist as $ifname => $ifdescr) { + // Skip lan interfaces here + if (!interface_has_gateway($ifname) && !interface_has_gatewayv6($ifname)) + continue; + if ($ifcnt == $ifsel) + $field['value'] = $ifname; + $opts = array(); + $opts['displayname'] = $ifdescr; + $opts['name'] = $ifname; + $opts['value'] = $ifname; + $field['options']['option'][] = $opts; + $ifcnt++; + } + $field['bindstofield'] = "ezshaper->step2->conn{$i}interface"; + $field['combinefieldsbegin'] = "true"; + $fields[] = $field; + + $field = array(); + $field['name'] = "conn{$i}uploadscheduler"; + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['type'] = "select"; + $field['typehint'] = "Queueing discipline to apply on the upload of this connection."; + $field['options']['option'] = array(); + $opts = array(); + $opts['name'] = "HFSC"; + $opts['value'] = "HFSC"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "CBQ"; + $opts['value'] = "CBQ"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "PRIQ"; + $opts['value'] = "PRIQ"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadscheduler"; + $fields[] = $field; + + $field = array(); + $field['displayname'] = "Upload"; + $field['name'] = "conn{$i}upload"; + $field['type'] = "input"; + $field['bindstofield'] = "ezshaper->step2->conn{$i}upload"; + $field['combinefieldsbegin'] = "true"; + $fields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "conn{$i}uploadspeed"; + $field['typehint'] = "Upload bandwidth on this connection."; + $field['type'] = "select"; + $field['options']['option'] = array(); + $opts = array(); + $opts['value'] = "Kb"; + $opts['name'] = "Kbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Mb"; + $opts['name'] = "Mbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Gb"; + $opts['name'] = "Gbit/s"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadspeed"; + $fields[] = $field; + + $field = array(); + $field['displayname'] = "Download"; + $field['name'] = "conn{$i}download"; + $field['type'] = "input"; + $field['bindstofield'] = "ezshaper->step2->conn{$i}download"; + $field['combinefieldsbegin'] = "true"; + $fields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "conn{$i}downloadspeed"; + $field['typehint'] = "Download bandwidth on this connection."; + $field['type'] = "select"; + $field['options']['option'] = array(); + $opts = array(); + $opts['value'] = "Kb"; + $opts['name'] = "Kbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Mb"; + $opts['name'] = "Mbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Gb"; + $opts['name'] = "Gbit/s"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step2->conn{$i}downloadspeed"; + $fields[] = $field; + } + $field = array(); + $field['name'] = "Next"; + $field['type'] = "submit"; + $fields[] = $field; +} + +function step2_stepsubmitphpaction() { + global $config; + global $stepid, $savemsg; + $sumdownloads = 0; + + /* Input Validation */ + $steps = intval($config['ezshaper']['step1']['numberofconnections']); + for ($i = 0; $i < $steps; $i++) { + for ($j = $i + 1; $j <= $steps; $j++) { + if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"] || $_POST["conn{$i}interface"] == $_POST["local{$j}interface"]) { + $savemsg=gettext("You cannot select the same interface for connections {$i} and {$j}."); + $stepid--; + return; + } + if (trim($_POST["conn{$i}uploadscheduler"]) != "PRIQ") { + if (!is_numeric($_POST["conn{$i}upload"])) { + $savemsg = gettext("Upload bandwidth of connection {$i} is not valid."); + $stepid--; + return; + } + if (!is_numeric($_POST["conn{$i}download"])) { + $savemsg = gettext("Download bandwidth of connection {$i} is not valid."); + $stepid--; + return; + } + $upbw = $_POST["conn{$i}upload"]; + $downbw = $_POST["conn{$i}download"]; + if ($upbw < 1 || $downbw < 1) { + $savemsg = gettext("You cannot specify bandwidth smaller than 1!"); + $stepid--; + return; + } + if (intval($upbw) < 128 && $_POST["conn{$i}uploadspeed"] == "Kb" && trim($_POST["conn{$i}uploadscheduler"]) == "CBQ") { + $savemsg=gettext("Uploads smaller than 128Kbit/s is not supported for connection {$i} on CBQ scheduler."); + $stepid--; + return; + } + } + if ($_POST["local{$i}interface"] == $_POST["conn{$j}interface"] || $_POST["local{$i}interface"] == $_POST["local{$j}interface"]) { + $savemsg=gettext("You cannot select the same interface for local and outside."); + $stepid--; + return; + } + } + } + + /* This is necessary since the wizard expects pecnefined fields. */ + unset($config['ezshaper']['step2']); + $config['ezshaper']['step2'] = array(); + + for ($i = 0; $i < $steps; $i++) { + $config['ezshaper']['step2']["local{$i}downloadscheduler"] = $_POST["local{$i}downloadscheduler"]; + $config['ezshaper']['step2']["local{$i}interface"] = $_POST["local{$i}interface"]; + $config['ezshaper']['step2']["conn{$i}uploadscheduler"] = $_POST["conn{$i}uploadscheduler"]; + $config['ezshaper']['step2']["conn{$i}upload"] = $_POST["conn{$i}upload"]; + $config['ezshaper']['step2']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"]; + $config['ezshaper']['step2']["conn{$i}download"] = $_POST["conn{$i}download"]; + $config['ezshaper']['step2']["conn{$i}downloadspeed"] = $_POST["conn{$i}downloadspeed"]; + $config['ezshaper']['step2']["conn${i}interface"] = $_POST["conn{$i}interface"]; + } +} + +function step3_stepbeforeformdisplay() { + global $config, $pkg; + global $stepid, $savemsg; + + $cfgname = "traffic_shaper_wizard_dedicated.xml"; + + $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']); + + $fields =& $pkg['step'][1]['fields']['field']; + + $voipfields =& $pkg['step'][2]['fields']['field']; + + $voipfields = array(); + $enablefields = array(); + + $field = array(); + $field['name'] = "Enable"; + $field['type'] = "checkbox"; + $field['typehint'] = "Prioritize Voice over IP traffic."; + $field['bindstofield'] = "ezshaper->step3->enable"; + $field['descritpion'] = "This will raise the priority of VOIP traffic above all other traffic."; + $voipfields[] = $field; + + $field = array(); + $field['name'] = "Next"; + $field['type'] = "submit"; + $voipfields[] = $field; + + $field = array(); + $field['name'] = "VOIP specific settings"; + $field['type'] = "listtopic"; + $voipfields[] = $field; + + $field = array(); + $field['name'] = "Provider"; + $enablefields[] = "Provider"; + $field['type'] = "select"; + $field['description'] = "Choose Generic if your provider isn't listed."; + $field['options']['option'] = array(); + $opts = array(); + $opts['name'] = "Generic (lowdelay)"; + $opts['value'] = "Generic"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "VoicePulse"; + $opts['value'] = "VoicePulse"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "Asterisk/Vonage"; + $opts['value'] = "Asterisk"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "PanasonicTDA"; + $opts['value'] = "Panasonic"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step3->provider"; + $voipfields[] = $field; + + $field = array(); + $field['displayname'] = "Upstream SIP Server"; + $field['name'] = "upstream_sip_server"; + $enablefields[] = "upstream_sip_server"; + $field['type'] = "inputalias"; + $field['description'] = "(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the remote PBX or SIP Trunk to prioritize.
                              NOTE: You can also use a Firewall Alias in this location."; + $field['message'] = "IP Address field is non-blank and doesn't look like an IP address."; + $field['bindstofield'] = "ezshaper->step3->address"; + $voipfields[] = $field; + + for ($i = 0; $i < $numberofconnections; $i++) { + $connum = $i + 1; + $field = array(); + $field['name'] = "Connection #{$connum} parameters"; + $field['type'] = "listtopic"; + $voipfields[] = $field; + + $field = array(); + $field['displayname'] = "Upload"; + $field['name'] = "conn{$i}upload"; + $enablefields[] = "conn{$i}upload"; + $field['type'] = "input"; + $field['bindstofield'] = "ezshaper->step3->conn{$i}upload"; + $field['combinefieldsbegin'] = "true"; + $voipfields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "conn{$i}uploadspeed"; + $enablefields[] = "conn{$i}uploadspeed"; + $field['typehint'] = "Upload bandwidth guarantee for VOIP phone(s) on connection {$i}."; + $field['type'] = "select"; + $field['options']['option'] = array(); + $opts = array(); + $opts['value'] = "Kb"; + $opts['name'] = "Kbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Mb"; + $opts['name'] = "Mbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Gb"; + $opts['name'] = "Gbit/s"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step3->conn{$i}uploadspeed"; + $voipfields[] = $field; + + $field = array(); + $field['displayname'] = "Download"; + $field['name'] = "local{$i}download"; + $enablefields[] = "local{$i}download"; + $field['type'] = "input"; + $field['bindstofield'] = "ezshaper->step3->local{$i}download"; + $field['combinefieldsbegin'] = "true"; + $voipfields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "local{$i}downloadspeed"; + $enablefields[] = "local{$i}downloadspeed"; + $field['typehint'] = "Download bandwidth guarantee for VOIP phone(s) on connections."; + $field['type'] = "select"; + $field['options']['option'] = array(); + $opts = array(); + $opts['value'] = "Kb"; + $opts['name'] = "Kbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Mb"; + $opts['name'] = "Mbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Gb"; + $opts['name'] = "Gbit/s"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step3->local{$i}downloadspeed"; + $voipfields[] = $field; + } + + $field = array(); + $field['name'] = "Next"; + $field['type'] = "submit"; + $voipfields[] = $field; + $voipfields[0]['enablefields'] = implode(",", $enablefields); +} + +function step3_stepsubmitphpaction() { + global $config; + global $stepid, $savemsg; + + if (!$_POST['enable']) + return; + + if($_POST['address']) { + if(!is_ipaddroralias($_POST['address'])) { + /* item is not an ip or alias. error out */ + $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue."); + $stepid--; + return; + } + } + + $steps = intval($config['ezshaper']['step1']['numberofconnections']); + for ($i = 0; $i < $steps; $i++) { + if ($config['ezshaper']['step2']["conn{$i}uploadscheduler"] != "PRIQ") { + if (!is_numeric($_POST["conn{$i}upload"])) { + $savemsg = gettext("Upload bandwidth of connection {$i} is not valid."); + $stepid--; + return; + } + if ($_POST["conn{$i}uploadspeed"] == "%") { + if (intval($_POST["conn{$i}upload"]) > 80) { + $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection."); + $stepid--; + return; + } + } else { + $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]); + $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]); + $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]); + $input_bw = $factor * floatval($_POST["conn{$i}upload"]); + if ((0.8 * $ifbw) < $input_bw) { + $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection."); + $stepid--; + return; + } + } + } + + if ($config['ezshaper']['step2']["local{$i}downloadscheduler"] != "PRIQ") { + if (!is_numeric($_POST["local{$i}download"])) { + $savemsg = gettext("Download bandwidth of connection {$i} is not valid."); + $stepid--; + return; + } + if ($_POST["local{$i}downloadspeed"] == "%") { + if (intval($_POST["local{$i}download"]) > 80) { + $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection."); + $stepid--; + return; + } + } else { + $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]); + $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}download"]); + $factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]); + $input_bw = $factor * floatval($_POST["local{$i}download"]); + if ((0.8 * $ifbw) < $input_bw) { + $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection."); + $stepid--; + return; + } + } + } + } + + for ($i = 0; $i < $steps; $i++) { + $config['ezshaper']['step3']["local{$i}download"] = $_POST["local{$i}download"]; + $config['ezshaper']['step3']["local{$i}downloadspeed"] = $_POST["local{$i}downloadspeed"]; + $config['ezshaper']['step3']["conn{$i}upload"] = $_POST["conn{$i}upload"]; + $config['ezshaper']['step3']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"]; + } +} + +function step4_stepsubmitphpaction() { + global $config; + global $stepid, $savemsg; + + if ( $_POST['enable'] ) { + if(!$_POST['bandwidth']) { + $savemsg="You need to specify a value for bandwidth!"; + $stepid--; + return; + } + if(!is_numeric($_POST['bandwidth'])) { + $savemsg="The posted value is not a valid bandwidth."; + $stepid--; + return; + } + + if ($_POST['bandwidthspeed'] <> "%") { + $savemsg = gettext("Only percentage bandwidth specification is allowed."); + $stepid--; + return; + } + $bw = $_POST['bandwidth']; + if($bw > 15 || $bw < 2) { + $savemsg="Values should be between 2% and 15%!"; + $stepid--; + return; + } + if($_POST['address'] <> "" && !is_ipaddroralias($_POST['address'])) { + /* item is not an ip or alias. error out */ + $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue."); + $stepid--; + } + } +} + +function step5_stepsubmitphpaction() { + global $stepid, $savemsg; + + if ( $_POST['enable'] ) { + if ($_POST['p2pcatchall']) { + if(!is_numeric($_POST['bandwidth'])) { + $savemsg="Posted value is not a valid bandwidth."; + $stepid--; + return; + } + if ($_POST['bandwidthspeed'] <> "%") { + $savemsg = gettext("Only percentage bandwidth specification is allowed."); + $stepid--; + return; + } + $bw = $_POST['bandwidth']; + if($bw > 15 || $bw < 2) { + $savemsg="Values should be between 2% and 15%!"; + $stepid--; + return; + } + } + } +} + +function step8_stepsubmitphpaction() { + global $g, $config; + + /* save the new configuration */ + apply_all_choosen_items(); + + /* reset rrd queues */ + system("rm -f /var/db/rrd/*queuedrops.rrd"); + system("rm -f /var/db/rrd/*queues.rrd"); + enable_rrd_graphing(); + + /* apply the new configuration to the system */ + filter_configure(); + + /* And we're no longer dirty! */ + clear_subsystem_dirty('shaper'); + + update_filter_reload_status("Initializing"); + header("Location: status_filter_reload.php"); + exit; +} + +function apply_all_choosen_items() { + global $config, $g, $altq_list_queues, $gamesplist, $voiplist, $othersplist, $p2plist; + + require_once("wizardapp.inc"); + + /* + * Wipe previous config. + * Doing it here makes sense since we can wipe the previous config only after + * the user decides to do so, finishing the wizard. + */ + if(isset($config['shaper']['queue'])) + unset($config['shaper']['queue']); + /* XXX: This is ecnundant, because this should be handled by converter at startup. */ + if(isset($config['shaper']['rule'])) + unset($config['shaper']['rule']); + foreach ($config['filter']['rule'] as $key => $rule) + if ($rule['wizard'] == "yes") + unset($config['filter']['rule'][$key]); + + /* restart the cached config */ + unset($altq_list_queues); + $altq_list_queues = array(); + + $steps = intval($config['ezshaper']['step1']['numberofconnections']); + + $interfacelist = array(); + + for ($i = 0; $i < $steps; $i++) { + + $tmppath = array(); + $altq =& new altq_root_queue(); + + $altq->SetInterface($config['ezshaper']['step2']["conn{$i}interface"]); + $interfacelist[] = $config['ezshaper']['step2']["conn{$i}interface"]; + $altq->SetScheduler($config['ezshaper']['step2']["conn{$i}uploadscheduler"]); + $altq->SetBandwidth(floatval($config['ezshaper']['step2']["conn{$i}upload"])); + $altq->SetBwscale($config['ezshaper']['step2']["conn{$i}uploadspeed"]); + $altq->SetEnabled("on"); + $altq_list_queues[$altq->GetQname()] =& $altq; + array_push($tmppath, $config['ezshaper']['step2']["conn{$i}interface"]); + $altq->SetLink($tmppath); + $altq->wconfig(); + + $sched = $config['ezshaper']['step2']["conn{$i}uploadscheduler"]; + $voipbw =0; + $voipbwunit = "Kb"; + $voip = false; + $penalty = false; + $penaltybw = 0; + $penaltybwunit = "Kb"; + $p2p = false; + $p2pcatchall = false; + $p2pcatchbw = 0; + $p2pcatchbwunit = "%"; + $games = false; + $otherpriority = false; + $remainbw = 0; + $factor = 0; + $upfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]); + $upbw = floatval($config['ezshaper']['step2']["conn{$i}upload"]) * $upfactor; + + if ($config['ezshaper']['step3']['enable']) { + $voip = true; + $voipbw = $config['ezshaper']['step3']["conn{$i}upload"]; + $voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"]; + if ($voipbwunit == "%") + $factor = $upbw/100; + else + $factor = wizard_get_bandwidthtype_scale($voipbwunit); + $remainbw += $voipbw * $factor; + } + if ($config['ezshaper']['step4']['enable']) { + $penalty = true; + $penaltybw = $config['ezshaper']['step4']['bandwidth']; + $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit']; + if ($penaltybwunit == "%") + $factor = $upbw/100; + else + $factor = wizard_get_bandwidthtype_scale($penaltybwunit); + $remainbw += $penaltybw * $factor; + } else { + $penalty = false; + $penaltybw = 0; + } + if ($config['ezshaper']['step5']['enable']) { + $p2p = true; + if ($config['ezshaper']['step5']['p2pcatchall']) { + $p2pcatchall = true; + $p2pcatchbw = $config['ezshaper']['step5']['bandwidth']; + $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit']; + if ($p2pcatchbwunit == "%") + $factor = $upbw/100; + else + $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit); + $remainbw += $p2pcatchbw * $factor; + } else { + $p2pcatchall = false; + $p2pcatchbw = 0; + } + } else { + $p2p = false; + $p2pcatchall = false; + $p2pcatchbw = 0; + } + if ($config['ezshaper']['step6']['enable']) { + $games = true; + } else { + $games = false; + } + + if ($config['ezshaper']['step7']['enable']) { + $otherpriority = true; + } else { + $otherpriority = false; + } + $remainbw = round($remainbw / $upbw * 100, 2); + + if (intval($remainbw) > 0 && intval($remainbw) > 30) { + $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue."); + header("Location: wizard.php?xml=traffic_shaper_wizard_dedicated.xml&stepid=2&message={$savemsg}"); + exit; + } else { + $remainbw = 100 - $remainbw; + } + + if ($sched != "PRIQ") { + if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qInternet"; + //$tmpcf['priority'] = 6; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + If ($sched == "CBQ") { + $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]); + $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"]; + } + else if ($sched == "HFSC") { + $tmpcf['upperlimit'] = "on"; + $tmpcf['upperlimit3'] = + floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"]; + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"]; + $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]); + $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"]; + } + array_push($tmppath, "qInternet"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + //array_pop($tmppath); + //echo "qInternet
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + $altq =& $qtmp; + } + + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qACK"; + $tmpcf['priority'] = 6; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + If ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.2; + $tmpcf['bandwidthtype'] = "%"; + } + else if ($sched == "HFSC") { + $lkbw = 0.20 * $remainbw; + $tmpcf['linkshare3'] = "{$lkbw}%"; + $tmpcf['linkshare'] = "on"; + $tmpcf['bandwidth'] = $lkbw; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qACK"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qACK
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + if ($p2pcatchall) + $tmpcf['name'] = "qOthersDefault"; + else + $tmpcf['name'] = "qDefault"; + $tmpcf['priority'] = 3; + $tmpcf['enabled'] = "on"; + if (!$p2pcatchall) + $tmpcf['default'] = "on"; + $tmpcf['ecn'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, $tmpcf['name']); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qDefault
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + + if ($p2p) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qP2P"; + $tmpcf['priority'] = 1; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($p2pcatchall) { + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $p2pcatchbw; + $tmpcf['bandwidthtype'] = $p2pcatchbwunit; + } else if ($sched == "HFSC") { + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}"; + $tmpcf['upperlimit'] = "on"; + $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}"; + $tmpcf['bandwidth'] = $p2pcatchbw; + $tmpcf['bandwidthtype'] = $p2pcatchbwunit; + } + $tmpcf['default'] = "on"; + + } else { + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpbw = $remainbw * 0.05; /* 5% bandwidth */ + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$tmpbw}%"; + $tmpcf['upperlimit'] = "on"; + $tmpcf['upperlimit3'] = "{$tmpbw}%"; + $tmpcf['bandwidth'] = $tmpbw; + $tmpcf['bandwidthtype'] = "%"; + } + } + array_push($tmppath, "qP2P"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qP2P
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($voip) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qVoIP"; + $tmpcf['priority'] = 7; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + if ($voipbw > 0) { + $tmpcf['bandwidth'] = $voipbw; + $tmpcf['bandwidthtype'] = $voipbwunit; + } else { + $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } + } else if ($sched == "HFSC") { + if ($voipbw > 0) { + $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}"; + } else { + $voipbw = $remainbw * 0.20; /* 20% bandwidth */ + $tmpcf['realtime3'] = "{$voipbw}%"; + } + $tmpcf['realtime'] = "on"; + $tmpcf['bandwidth'] = 32; + $tmpcf['bandwidthtype'] = "Kb"; + } + array_push($tmppath, "qVoIP"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qVoIP
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($games) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qGames"; + $tmpcf['priority'] = 5; + $tmpcf['enabled'] = "on"; + $tmpcf['ecn'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $gamesbw = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$gamesbw}%"; + $tmpcf['bandwidth'] = "{$gamesbw}"; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qGames"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qGames
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($otherpriority) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qOthersHigh"; + $tmpcf['priority'] = 4; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpcf['linkshare'] = "on"; + $otherbw = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['linkshare3'] = "{$otherbw}%"; + $tmpcf['bandwidth'] = $otherbw; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qOthersHigh"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qHigh
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + + + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qOthersLow"; + $tmpcf['priority'] = 2; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + if ($penalty) { + $tmpcf['bandwidthtype'] = $penaltybwunit; + $tmpcf['bandwidth'] = $penaltybw; + } else { + $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } + } else if ($sched == "HFSC") { + if ($penalty) { + $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}"; + $tmpcf['bandwidth'] = $penaltybw; + $tmpcf['bandwidthtype'] = $penaltybwunit; + } else { + $lsbw = $remainbw * 0.05; + $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */ + $tmpcf['bandwidth'] = $lsbw; + $tmpcf['bandwidthtype'] = "%"; + } + $tmpcf['linkshare'] = "on"; + } + array_push($tmppath, "qOthersLow"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qLow
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + array_pop($tmppath); + + $downfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]); + $downbw = floatval($config['ezshaper']['step2']["conn{$i}download"]) * $downfactor; + + $tmppath = array(); + $altq =& new altq_root_queue(); + + $altq->SetInterface($config['ezshaper']['step2']["local{$i}interface"]); + $altq->SetScheduler($config['ezshaper']['step2']["local{$i}downloadscheduler"]); + //$altq->SetBandwidth($config['ezshaper']['step2']["conn{$i}download"]); + //$altq->SetBwscale($config['ezshaper']['step2']["conn{$i}downloadspeed"]); + $altq->SetEnabled("on"); + $altq_list_queues[$altq->GetQname()] =& $altq; + array_push($tmppath, $config['ezshaper']['step2']["local{$i}interface"]); + $altq->SetLink($tmppath); + //var_dump($input_errors); + $altq->wconfig(); + + $sched = $config['ezshaper']['step2']["local{$i}downloadscheduler"]; + $voipbw =0; + $voipbwunit = "%"; + $voip = false; + $penalty = false; + $penaltybw = 0; + $penaltybwunit = "%"; + $p2p = false; + $p2pcatchall = false; + $p2pcatchbw = 0; + $games = false; + $otherpriority = false; + $remainbw = 0; + + if ($config['ezshaper']['step3']['enable']) { + $voip = true; + $voipbw = $config['ezshaper']['step3']["local{$i}download"]; + $voipbwunit = $config['ezshaper']['step3']["local{$i}downloadspeed"]; + if ($sched != HFSC) { + if ($penaltybwunit == "%") + $factor = $downbw/100; + else + $factor = wizard_get_bandwidthtype_scale($voipbwunit); + $remainbw += floatval($voipbw) * $factor; + } else + $remainbw += 32000; /* 32Kbit/s reserved for HFSC linksharing */ + } + if ($config['ezshaper']['step4']['enable']) { + $penalty = true; + $penaltybw = $config['ezshaper']['step4']['bandwidth']; + $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit']; + if ($penaltybwunit == "%") + $factor = $downbw/100; + else + $factor = wizard_get_bandwidthtype_scale($penaltybwunit); + $remainbw += floatval($penaltybw) * $factor; + } else { + $penalty = false; + $penaltybw = 0; + } + if ($config['ezshaper']['step5']['enable']) { + $p2p = true; + if ($config['ezshaper']['step5']['p2pcatchall']) { + $p2pcatchall = true; + $p2pcatchbw = $config['ezshaper']['step5']['bandwidth']; + $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit']; + if ($p2pcatchbwunit == "%") + $factor = $downbw/100; + else + $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit); + $remainbw += floatval($p2pcatchbw) * $factor; + } else { + $p2pcatchall = false; + $p2pcatchbw = 0; + } + } else { + $p2p = false; + $p2pcatchall = false; + $p2pcatchbw = 0; + } + if ($config['ezshaper']['step6']['enable']) { + $games = true; + } else { + $games = false; + } + + if ($config['ezshaper']['step7']['enable']) { + $otherpriority = true; + } else { + $otherpriority = false; + } + $remainbw = round($remainbw / $downbw * 100, 2); + if (intval($remainbw) > 0 && intval($remainbw) > 40) { + $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue."); + header("Location: wizard.php?xml=traffic_shaper_wizard_dedicated.xml&stepid=2&message={$savemsg}"); + exit; + } else { + $remainbw = 100 - $remainbw; + } + + if (!$p2pcatchall) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qLink"; + $tmpcf['priority'] = 2; + $tmpcf['enabled'] = "on"; + $tmpcf['default'] = "on"; + $tmpcf['qlimit'] = 500; + $tmpcf['ecn'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = 20; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpcf['bandwidth'] = 20; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, $tmpcf['name']); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qDefault
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($sched != "PRIQ") { + if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qInternet"; + //$tmpcf['priority'] = 6; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + If ($sched == "CBQ") { + $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}download"]); + $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}downloadspeed"]; + } + else if ($sched == "HFSC") { + $tmpcf['upperlimit'] = "on"; + $tmpcf['upperlimit3'] = floatval($config['ezshaper']['step2']["conn{$i}download"]) . $config['ezshaper']['step2']["conn{$i}downloadspeed"]; + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = floatval($config['ezshaper']['step2']["conn{$i}download"]) . $config['ezshaper']['step2']["conn{$i}downloadspeed"]; + $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}download"]); + $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}downloadspeed"]; + } + array_push($tmppath, "qInternet"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + //array_pop($tmppath); + //echo "qInternet
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + $altq =& $qtmp; + } + + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qACK"; + $tmpcf['priority'] = 6; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + If ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.2; + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $lkbw = 0.20 * $remainbw; + $tmpcf['linkshare3'] = "{$lkbw}%"; + $tmpcf['linkshare'] = "on"; + $tmpcf['bandwidth'] = $lkbw; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qACK"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qACK $remainbw
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + + if ($p2p) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qP2P"; + $tmpcf['priority'] = 1; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($p2pcatchall) { + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $p2pcatchbw; + $tmpcf['bandwidthtype'] = $p2pcatchbwunit; + } else if ($sched == "HFSC") { + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}"; + $tmpcf['upperlimit'] = "on"; + $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}"; + $tmpcf['bandwidth'] = $p2pcatchbw; + $tmpcf['bandwidthtype'] = $p2pcatchbwunit; + } + $tmpcf['default'] = "on"; + $tmpcf['qlimit'] = 500; + } else { + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpbw = $remainbw * 0.05; /* 5% bandwidth */ + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$tmpbw}%"; + $tmpcf['upperlimit'] = "on"; + $tmpcf['upperlimit3'] = "{$tmpbw}%"; + $tmpcf['bandwidth'] = $tmpbw; + $tmpcf['bandwidthtype'] = "%"; + } + } + array_push($tmppath, "qP2P"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qP2P
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($voip) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qVoIP"; + $tmpcf['priority'] = 7; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + if ($voipbw > 0) { + $tmpcf['bandwidth'] = $voipbw; + $tmpcf['bandwidthtype'] = $voipbwunit; + } else { + $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } + } else if ($sched == "HFSC") { + if ($voipbw > 0) { + $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}"; + } else { + $voipbw = $remainbw * 0.20; /* 20% bandwidth */ + $tmpcf['realtime3'] = "{$voipbw}%"; + } + $tmpcf['realtime'] = "on"; + $tmpcf['bandwidth'] = 32; + $tmpcf['bandwidthtype'] = "Kb"; + } + array_push($tmppath, "qVoIP"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qVoIP
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($games) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qGames"; + $tmpcf['priority'] = 5; + $tmpcf['enabled'] = "on"; + $tmpcf['ecn'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $gamesbw = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$gamesbw}%"; + $tmpcf['bandwidth'] = "{$gamesbw}"; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qGames"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qGames
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($otherpriority) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qOthersHigh"; + $tmpcf['priority'] = 4; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpcf['linkshare'] = "on"; + $otherbw = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['linkshare3'] = "{$otherbw}%"; + $tmpcf['bandwidth'] = $otherbw; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qOthersHigh"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qHigh
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qOthersLow"; + $tmpcf['priority'] = 3; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + if ($penalty) { + $tmpcf['bandwidth'] = $penaltybw; + $tmpcf['bandwidthtype'] = $penaltybwunit; + } else { + $tmpcf['bandwidthtype'] = "%"; + $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */ + } + } else if ($sched == "HFSC") { + if ($penalty) { + $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}"; + $tmpcf['bandwidth'] = $penaltybw; + $tmpcf['bandwidthtype'] = $penaltybwunit; + } else { + $lsbw = $remainbw * 0.05; + $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */ + $tmpcf['bandwidth'] = $lsbw; + $tmpcf['bandwidthtype'] = "%"; + } + $tmpcf['linkshare'] = "on"; + } + array_push($tmppath, "qOthersLow"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qLow
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + array_pop($tmppath); + } + + if (!is_array($config['filter']['rule'])) + $config['filter']['rule'] = array(); + + $interfacelist = implode(",", $interfacelist); + + /* Rules */ + if ($penalty) { + if( is_ipaddr($config['ezshaper']['step4']['address']) || is_alias($config['ezshaper']['step4']['address'])) { + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + $rule['descr'] = gettext("Penalty Box"); + $rule['defaultqueue'] = "qOthersLow"; + $rule['source']['address'] = $config['ezshaper']['step4']['address']; + $rule['destination']['any'] = TRUE; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + } + } + + /* If user specifies an IP, we don't bother with providers */ + if ($voip) { + if( is_ipaddr($config['ezshaper']['step3']['address']) || is_alias($config['ezshaper']['step3']['address'])) { + /* create VOIP rules */ + $rule = array(); + $rule['type'] = "match"; + //$rule['interface'] = $interfacelist; + $rule['descr'] = gettext("Connections From Upstream SIP Server"); + $rule['protocol'] = "udp"; + $rule['defaultqueue'] = "qVoIP"; + $rule['source']['address'] = $config['ezshaper']['step3']['address']; + $rule['destination']['any'] = TRUE; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + + $rule = array(); + $rule['type'] = "match"; + //$rule['interface'] = $interfacelist; + $rule['descr'] = gettext("Connections To Upstream SIP Server"); + $rule['protocol'] = "udp"; + $rule['defaultqueue'] = "qVoIP"; + $rule['source']['any'] = TRUE; + $rule['destination']['address'] = $config['ezshaper']['step3']['address']; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + + } elseif( $config['ezshaper']['step3']['provider'] == "Generic" ) { + /* create VOIP rules */ + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + $rule['descr'] = "DiffServ/Lowdelay/Upload"; + $rule['protocol'] = "udp"; + $rule['source']['any'] = TRUE; + $rule['defaultqueue'] = "qVoIP"; + $rule['destination']['any'] = TRUE; + $rule['iptos'] = "lowdelay"; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + + } else { + /* loop through voiplist[] */ + foreach ($voiplist[$config['ezshaper']['step3']['provider']] as $voip) { + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + $rule['defaultqueue'] = 'qVoIP'; + $rule['source']['any'] = TRUE; + $rule['destination']['any'] = TRUE; + $rule['descr'] = "m_voip {$voip[0]} outbound"; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['destination']['port'] = $voip[2]."-".$voip[3]; + if($voip[1] != '') + $rule['protocol'] = $voip[1]; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + } + } + } + + /* loop through p2plist[] */ + if ($p2p) { + foreach($config['ezshaper']['step5'] as $key => $val) { + if (!is_array($p2plist[$key])) + continue; + foreach ($p2plist[$key] as $p2pclient) { + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + $rule['defaultqueue'] = 'qP2P'; + $rule['source']['any'] = TRUE; + $rule['destination']['any'] = TRUE; + $rule['descr'] = "m_P2P {$p2pclient[0]} outbound"; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['destination']['port'] = $p2pclient[2]."-".$p2pclient[3]; + if($p2pclient[1] != '') + $rule['protocol'] = $p2pclient[1]; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + } + } + } + + /* loop through gamesplist[] */ + if ($games) { + foreach($config['ezshaper']['step6'] as $key => $val) { + if (!is_array($gamesplist[$key])) + continue; + foreach ($gamesplist[$key] as $Gameclient) { + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + $rule['defaultqueue'] = 'qGames'; + if ($Gameclient[1] == "tcp") + $rule['ackqueue'] = 'qACK'; + $rule['source']['any'] = TRUE; + $rule['destination']['any'] = TRUE; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['descr'] = "m_Game {$Gameclient[0]} outbound"; + $rule['destination']['port'] = $Gameclient[2]."-".$Gameclient[3]; + if($Gameclient[1] != '') + $rule['protocol'] = $Gameclient[1]; + $config['filter']['rule'][] = $rule; + } + } + } + + /* loop through othersplist[] */ + if ($otherpriority) { + foreach($config['ezshaper']['step7'] as $key => $val) { + if (!is_array($othersplist[$key])) + continue; + foreach ($othersplist[$key] as $otherclient) { + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + switch ($val) { + case "H": + $rule['defaultqueue'] = 'qOthersHigh'; /* posted value H or L */ + if ($otherclient[1] == "tcp") + $rule['ackqueue'] = 'qACK'; + $loop = 0; + break; + case "L": + $rule['defaultqueue'] = 'qOthersLow'; /* posted value H or L */ + if ($otherclient[1] == "tcp") + $rule['ackqueue'] = 'qACK'; + $loop = 0; + break; + case "D": + if ($p2pcatchall) { + $loop = 0; + $rule['defaultqueue'] = 'qOthersDefault'; + if ($otherclient[1] == "tcp") + $rule['ackqueue'] = 'qACK'; + } else + $loop = 1; /* It automitaclly goes to default queue */ + break; + default: + $loop = 1; + } + if (!$loop) { + $rule['source']['any'] = TRUE; + $rule['destination']['any'] = TRUE; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['descr'] = "m_Other {$otherclient[0]} outbound"; + + if($otherclient[2] or $otherclient[3]) { + $rule['destination']['port'] = $otherclient[2]."-".$otherclient[3]; + } + if($otherclient[1] != '') + $rule['protocol'] = $otherclient[1]; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + } + } + } + } + write_config(); +} + +function wizard_get_bandwidthtype_scale($type = "b") { + switch ($type) { + case "Gb": + $factor = 1024 * 1024 * 1024; + break; + case "Mb": + $factor = 1024 * 1024; + break; + case "Kb": + $factor = 1024; + break; + case "b": + default: + $factor = 1; + break; + } + return intval($factor); +} + +?> diff --git a/usr/local/www/wizards/traffic_shaper_wizard_dedicated.xml b/usr/local/www/wizards/traffic_shaper_wizard_dedicated.xml new file mode 100755 index 000000000..37751424d --- /dev/null +++ b/usr/local/www/wizards/traffic_shaper_wizard_dedicated.xml @@ -0,0 +1,1628 @@ + + + + + 9 + + 1 + pfSense Traffic Shaper Wizard + true + This wizard will guide you through setting up the pfSense traffic shaper. + Please be aware that Custom Bandwidths should not exceed 30% of the interface/link bandwidth. Keep this in mind during the wizard. + + + + listtopic + Traffic shaper Wizard + + + Enter number of WAN type connections + numberofconnections + input + ^[0-9]+$ + Number of connections you have + ezshaper->step1->numberofconnections + + + Next + submit + + + step1_stepbeforeformdisplay(); + step1_submitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc + + + 2 + pfSense Traffic Shaper Wizard + Shaper configuration + + step2_stepbeforeformdisplay(); + step2_stepsubmitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc + + + Next + submit + + + + + 3 + pfSense Traffic Shaper Wizard + Voice over IP + + + Enable + checkbox + Prioritize Voice over IP traffic + This will raise the priority of VOIP traffic above all other traffic. + ezshaper->step3->enable + + + Next + submit + + + VOIP specific settings + listtopic + + + Provider + select + Choose Generic if your provider isn't listed. + ezshaper->step3->provider + + + + + + + + + Upstream SIP Server + inputalias + (Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the <strong>remote</strong> PBX or SIP Trunk to prioritize. <br />NOTE: You can also use a Firewall Alias in this location. + ezshaper->step3->address + IP Address field is non-blank and doesn't look like an IP address. + + + Bandwidth + input + ^[0-9]*$ + Total bandwidth in percentage(%)(should be between 5 and 40) guarantee for VOIP traffic. + ezshaper->step3->bandwidth + + + Next + submit + + + step3_stepbeforeformdisplay(); + step3_stepsubmitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc + + + 4 + pfSense Traffic Shaper Wizard + Penalty Box + true + + + true + Enable + checkbox + Penalize IP or Alias + This will lower the priority of traffic from this IP or alias. + Address,Bandwidth,BandwidthSpeed + ezshaper->step4->enable + + + Next + submit + + + PenaltyBox specific settings + listtopic + + + Address + inputalias + This allows you to just provide the IP address of the computer(s) or Penalize. NOTE: You can also use a Firewall Alias in this location. + ezshaper->step4->address + IP Address field is non-blank and doesn't look like an IP address. + + + Bandwidth + input + ^[0-9]*$ + Speed must be numerical. + ezshaper->step4->bandwidth + true + + + true + true + true + true + BandwidthSpeed + The limit you want to apply. + select + + + + + + + + ezshaper->step4->bandwidthunit + + + Next + submit + + + step4_stepsubmitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc + + + 5 + pfSense Traffic Shaper Wizard + Peer to Peer networking + true + + + true + Enable + checkbox + Lower priority of Peer-to-Peer traffic + This will lower the priority of P2P traffic below all other traffic. Please check the items that you would like to prioritize lower than normal traffic. + p2pCatchAll,Bandwidth,BandwidthSpeed,Aimster,BitTorrent,BuddyShare,CuteMX,DCplusplus,dcc,DirectConnect,DirectFileExpress,EDonkey2000,FastTrack,Gnutella,grouper,hotComm,HotlineConnect,iMesh,Napster,OpenNap,Scour,Shareaza,SongSpy,WinMX + ezshaper->step5->enable + + + Next + submit + + + p2p Catch all + listtopic + + + p2pCatchAll + checkbox + When enabled, all uncategorized traffic is fed to the p2p queue. + ezshaper->step5->p2pcatchall + + + Bandwidth + input + ^[0-9]*$ + Speed must be numerical. + ezshaper->step5->bandwidth + true + + + true + true + true + true + BandwidthSpeed + The limit you want to apply. + select + + + + + + + + ezshaper->step5->bandwidthunit + + + Enable/Disable specific P2P protocols + listtopic + + + Aimster + checkbox + Aimster and other P2P using the Aimster protocol and ports + ezshaper->step5->aimster + + + BitTorrent + checkbox + Bittorrent and other P2P using the Torrent protocol and ports + ezshaper->step5->bittorrent + + + BuddyShare + checkbox + BuddyShare and other P2P using the BuddyShare protocol and ports + ezshaper->step5->buddyshare + + + CuteMX + checkbox + CuteMX and other P2P using the CuteMX protocol and ports + ezshaper->step5->cutemx + + + DCplusplus + checkbox + DC++ and other P2P using the DC++ protocol and ports + ezshaper->step5->dcplusplus + + + DCC + checkbox + irc DCC file transfers + ezshaper->step5->dcc + + + DirectConnect + checkbox + DirectConnect and other P2P using the DirectConnect protocol and ports + ezshaper->step5->directconnect + + + DirectFileExpress + checkbox + DirectFileExpress and other P2P using the DirectFileExpress protocol and ports + ezshaper->step5->directfileexpress + + + eDonkey2000 + checkbox + eDonkey and other P2P using the eDonkey protocol and ports + ezshaper->step5->edonkey2000 + + + FastTrack + checkbox + FastTrack and other P2P using the FastTrack protocol and ports + ezshaper->step5->fasttrack + + + Gnutella + checkbox + Gnutella and other P2P using the Gnutella protocol and ports + ezshaper->step5->gnutella + + + grouper + checkbox + grouper and other P2P using the grouper protocol and ports + ezshaper->step5->grouper + + + hotComm + checkbox + hotComm and other P2P using the hotComm protocol and ports + ezshaper->step5->hotcomm + + + HotlineConnect + checkbox + HotlineConnect and other P2P using the HotlineConnect protocol and ports + ezshaper->step5->hotlineconnect + + + iMesh + checkbox + iMesh and other P2P using the iMesh protocol and ports + ezshaper->step5->imesh + + + Napster + checkbox + Napster and other P2P using the Napster protocol and ports + ezshaper->step5->napster + + + OpenNap + checkbox + OpenNap and other P2P using the OpenNap protocol and ports + ezshaper->step5->opennap + + + Scour + checkbox + Scour and other P2P using the Scour protocol and ports + ezshaper->step5->scour + + + Shareaza + checkbox + Shareaza and other P2P using the Shareaza protocol and ports + ezshaper->step5->shareaza + + + SongSpy + checkbox + SongSpy and other P2P using the SongSpy protocol and ports + ezshaper->step5->songspy + + + WinMX + checkbox + WinMX and other P2P using the WinMX protocol and ports + ezshaper->step5->winmx + + + Next + submit + + + step5_stepsubmitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc + + + 6 + pfSense Traffic Shaper Wizard + true + Network Games + + + Enable + checkbox + Prioritize network gaming traffic + This will raise the priority of gaming traffic to higher than most traffic. + BattleNET,EAOrigin,GameForWindowsLive,PlayStationConsoles,Steam,WiiConsoles,XboxConsoles,ARMA2,ARMA3,Battlefield2,Battlefield3,BattlefieldBC2,Borderlands,CallOfDuty,Counterstrike,Crysis2,Crysis3,DeltaForce,DeadSpace2,DeadSpace3,Dirt3,DOOM3,DragonAge2,EmpireEarth,EveOnline,Everquest,Everquest2,FarCry,FarCry2,FarCry3,GunZOnline,HalfLife,LeagueofLegends,Lineage2,MassEffect3,MechwarriorOnline,Minecraft,OperationFlashpointDR,PlanetSide,PlanetSide2,QuakeIII,QuakeIV,StarWarsTOR,TigerWoods2004PS2,TribesAscend,UnrealTournament,WolfensteinEnemyTerritory,WorldOfWarcraft + true + ezshaper->step6->enable + + + Next + submit + + + Enable/Disable specific game consoles and services + listtopic + + + BattleNET + checkbox + Battle.net - Virtually every game from Blizzard publishing should match this. This includes the following game series: Starcraft, Diablo, Warcraft. Guild Wars also uses this port. + ezshaper->step6->battlenet + + + EAOrigin + checkbox + EA Origin Client - Some PC games by EA use this. + ezshaper->step6->eaorigin + + + GameForWindowsLive + checkbox + Games for Windows Live + ezshaper->step6->gamesforwindowslive + + + PlayStationConsoles + checkbox + PlayStation Consoles - This should cover all ports required for the Playstation 4, Playstation, PS Vita + ezshaper->step6->playstationconsoles + + + Steam + checkbox + Steam Game Client (Includes: America's Army 3, Counter-Strike: Source, Counter-Strike: Global Offensive, Half-Life 2, COD: Black Ops Series, Borderlands 2, Natural Selection 2, Left 4 Dead Series, Portal 2 and many other games on the Steam) + ezshaper->step6->steam + + + WiiConsoles + checkbox + Wii Consoles - Wii, Wii U, DS and 3DS + ezshaper->step6->wiiconsoles + + + XboxConsoles + checkbox + Xbox Consoles - Xbox 360 and Xbox One + ezshaper->step6->xboxconsoles + + + Enable/Disable specific games + listtopic + + + ARMA2 + checkbox + ARMA 2 + ezshaper->step6->arma2 + + + ARMA3 + checkbox + ARMA 3 + ezshaper->step6->arma3 + + + Battlefield2 + checkbox + Battlefield 2 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->battlefield2 + + + Battlefield3 + checkbox + Battlefield 3 and 4 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->battlefield3 + + + BattlefieldBC2 + checkbox + Battlefield: Bad Company 2 + ezshaper->step6->battlefieldbc2 + + + Borderlands + checkbox + Borderlands + ezshaper->step6->borderlands + + + CallOfDuty + checkbox + Call Of Duty (United Offensive) + ezshaper->step6->callofduty + + + Counterstrike + checkbox + Counterstrike. The ultimate 1st person shooter. + ezshaper->step6->counterstrike + + + Crysis2 + checkbox + Crysis 2 + ezshaper->step6->crysis2 + + + Crysis3 + checkbox + Crysis 3 + ezshaper->step6->crysis3 + + + DeadSpace2 + checkbox + Dead Space2 - this game uses a HUGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->deadspace2 + + + DeadSpace3 + checkbox + Dead Space 3 + ezshaper->step6->deadspace3 + + + DeltaForce + checkbox + Delta Force + ezshaper->step6->deltaforce + + + Dirt3 + checkbox + Dirt 3 + ezshaper->step6->dirt3 + + + DOOM3 + checkbox + DOOM3 + ezshaper->step6->doom3 + + + DragonAge2 + checkbox + Dragon Age 2 + ezshaper->step6->dragonage2 + + + EmpireEarth + checkbox + Empire Earth + ezshaper->step6->empireearth + + + EveOnline + checkbox + EVE Online + ezshaper->step6->eveonline + + + Everquest + checkbox + Everquest - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->everquest + + + Everquest2 + checkbox + Everquest II + ezshaper->step6->everquest2 + + + FarCry + checkbox + Far Cry + ezshaper->step6->farcry + + + FarCry2 + checkbox + Far Cry 2 + ezshaper->step6->farcry2 + + + FarCry3 + checkbox + Far Cry 3 + ezshaper->step6->farcry3 + + + GunZOnline + checkbox + GunZ Online + ezshaper->step6->gunzonline + + + HalfLife + checkbox + Half-Life + ezshaper->step6->halflife + + + LeagueofLegends + checkbox + League of Legends - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->leagueoflegends + + + Lineage2 + checkbox + Lineage II + ezshaper->step6->lineage2 + + + MassEffect3 + checkbox + Mass Effect 3 + ezshaper->step6->masseffect3 + + + MechwarriorOnline + checkbox + MechWarrior: Online - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->mechwarrioronline + + + Minecraft + checkbox + Minecraft + ezshaper->step6->minecraft + + + PlanetSide + checkbox + PlanetSide + ezshaper->step6->planetside + + + PlanetSide2 + checkbox + PlanetSide 2 + ezshaper->step6->planetside2 + + + OperationFlashpointDR + checkbox + Operation Flashpoint: Dragon Rising + ezshaper->step6->operationflashpoint-dr + + + QuakeIII + checkbox + Quake III + ezshaper->step6->quakeiii + + + QuakeIV + checkbox + Quake IV + ezshaper->step6->quakeiv + + + StarWarsTOR + checkbox + StarWars: The Old Republic - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->starwarstor + + + TigerWoods2004PS2 + checkbox + Tiger Woods 2004 for PS2 + ezshaper->step6->tigerwoods2004ps2 + + + TribesAscend + checkbox + Tribes Ascend + ezshaper->step6->tribesascend + + + UnrealTournament + checkbox + Unreal Tournament Series + ezshaper->step6->unrealtournament + + + WolfensteinEnemyTerritory + checkbox + Wolfenstein Enemy Territory + ezshaper->step6->wolfet + + + WorldOfWarcraft + checkbox + World of Warcraft + ezshaper->step6->wow + + + Next + submit + + + /usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc + + + 7 + pfSense Traffic Shaper Wizard + true + Raise or lower other Applications + + + Enable + checkbox + Other networking protocols + This will help raise or lower the priority of other protocols higher than most traffic. + AppleRemoteDesktop,MSRDP,PCAnywhere,VNC,AIM,Facetime,GoogleHangouts,ICQ,IRC,Jabber,MSN,TeamSpeak,TeamSpeak3,Ventrilo,PPTP,IPSEC,iTunesRadio,StreamingMP3,RTSP,HTTP,IMAP,LotusNotes,POP3,SMTP,BattleNETDownloader,SteamDownloader,APNS,AppleMobileSync,CrashPlan,CVSUP,DNS,GIT,HBCI,ICMP,MySqlServer,NNTP,Slingbox,SMB,SNMP,Subversion + true + ezshaper->step7->enable + + + Next + submit + + + Remote Service / Terminal emulation + listtopic + + + AppleRemoteDesktop + ezshaper->step7->appleremotedesktop + select + + + + + + Apple Remote Desktop + + + MSRDP + select + ezshaper->step7->msrdp + + + + + + Microsoft Remote Desktop Protocol + + + PCAnywhere + ezshaper->step7->pcanywhere + select + + + + + + Symantec PC Anywhere + + + VNC + ezshaper->step7->vnc + select + + + + + + Virtual Network Computing + + + Messengers + listtopic + + + AIM + ezshaper->step7->aolinstantmessenger + select + + + + + + AOL Instant Messenger + + + Facetime + ezshaper->step7->facetime + select + + + + + + Facetime + + + ICQ + ezshaper->step7->icq + select + + + + + + ICQ + + + IRC + select + ezshaper->step7->irc + + + + + + Internet Relay Chat + + + Jabber + select + ezshaper->step7->jabber + + + + + + Jabber instant messanger + + + GoogleHangouts + ezshaper->step7->googlehangouts + select + + + + + + Google Hangouts + + + MSN + ezshaper->step7->msnmessenger + select + + + + + + MSN Messenger + + + Teamspeak + ezshaper->step7->teamspeak + select + + + + + + TeamSpeak + + + Teamspeak3 + ezshaper->step7->teamspeak3 + select + + + + + + TeamSpeak 3 + + + Ventrilo + ezshaper->step7->ventrilo + select + + + + + + Ventrilo + + + VPN + listtopic + + + PPTP + select + ezshaper->step7->pptp + + + + + + Microsoft Point to Point tunneling protocol + + + IPSEC + select + ezshaper->step7->ipsec + + + + + + IPSEC VPN traffic + + + Multimedia/Streaming + listtopic + + + iTunesRadio + select + ezshaper->step7->itunesradio + + + + + + iTunes Radio - this rule uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + + + StreamingMP3 + select + ezshaper->step7->streamingmp3 + + + + + + Streaming Media + + + RTSP + ezshaper->step7->rtsp + select + + + + + + RealTime streaming protocol + + + Web + listtopic + + + HTTP + select + ezshaper->step7->http + + + + + + HTTP and HTTPS aka Web Traffic + + + Mail + listtopic + + + SMTP + select + ezshaper->step7->smtp + + + + + + Mail Protocol + + + POP3 + select + ezshaper->step7->pop3 + + + + + + POP3 Protocol + + + IMAP + ezshaper->step7->imap + select + + + + + + IMAP Protocol + + + LotusNotes + ezshaper->step7->lotusnotes + select + + + + + + Lotus Notes + + + Game Downloader + listtopic + + + BattleNetDownloader + select + ezshaper->step7->battlenetdownloader + + + + + + Battle.NET Downloader + + + SteamDownloader + select + ezshaper->step7->steamdownloader + + + + + + Steam Downloader + + + Miscellaneous + listtopic + + + APNS + select + ezshaper->step7->apns + + + + + + Apple Push Notification Service + + + AppleMobileSync + select + ezshaper->step7->applemobilesync + + + + + + Apple Mobile Sync + + + CrashPlan + ezshaper->step7->crashplan + select + + + + + + CrashPlan + + + CVSUP + ezshaper->step7->cvsup + select + + + + + + CVSUP + + + DNS + select + ezshaper->step7->dns + + + + + + Domain Name Services + + + Git + ezshaper->step7->git + select + + + + + + Git Server + + + HBCI + ezshaper->step7->hbci + select + + + + + + HBCI + + + ICMP + ezshaper->step7->icmp + select + + + + + + ICMP Protocol + + + SMB + ezshaper->step7->smb + select + + + + + + Microsoft SMB Protocol and friends + + + SNMP + ezshaper->step7->snmp + select + + + + + + Simple Network Management Protocol + + + MySQLServer + ezshaper->step7->mysqlserver + select + + + + + + MySQL Server + + + NNTP + ezshaper->step7->nntp + select + + + + + + Internet News + + + Slingbox + ezshaper->step7->slingbox + select + + + + + + Slingbox + + + Subversion + ezshaper->step7->subversion + select + + + + + + Subversion Server + + + Next + submit + + + /usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc + + + 8 + pfSense Traffic Shaper Wizard + + Reload profile notice + listtopic + + After pressing Finish the system will load the new profile.<br/> Please note that this may take a moment.<br/> Also note that the traffic shaper is stateful meaning that only new connections will be shaped.<br/> If this is an issue please reset the state table after loading the profile.<br/> + + + Finish + submit + + + step8_stepsubmitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc + + diff --git a/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc b/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc new file mode 100644 index 000000000..c3e0e280b --- /dev/null +++ b/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc @@ -0,0 +1,1727 @@ + $ifdesc) { + if (!is_altq_capable(get_real_interface($if))) + continue; + if (interface_has_gateway($if) || interface_has_gatewayv6($if)) + $wans++; + else + $lans++; + } + + foreach ($fields as &$field) { + if ($field['name'] == 'numberofconnections') + $field['value'] = $wans; + else if ($field['name'] == 'numberoflocalinterfaces') + $field['value'] = $lans; + } +} + +function step1_submitphpaction() { + global $stepid, $savemsg; + + if (!isset($_POST['numberofconnections'])) { + $savemsg=gettext("You need to specify the number of connections."); + $stepid--; + return; + } + if (intval($_POST['numberofconnections']) < 1) { + $savemsg=gettext("The number of connections should be greater than 1."); + $stepid--; + return; + } + + if (!isset($_POST['numberoflocalinterfaces'])) { + $savemsg=gettext("You need to specify the number of LAN type interfaces."); + $stepid--; + return; + } + if (intval($_POST['numberoflocalinterfaces']) < 1) { + $savemsg=gettext("The number of LAN type interfaces should be greater than 1."); + $stepid--; + return; + } +} + +function step2_stepbeforeformdisplay() { + global $config, $pkg; + global $stepid, $savemsg; + + $wans = 0; + $lans = 0; + $iflist = array(); + $iflisttmp = get_configured_interface_with_descr(); + foreach ($iflisttmp as $if => $ifdesc) { + if (!is_altq_capable(get_real_interface($if))) + continue; + if (interface_has_gateway($if) || interface_has_gatewayv6($if)) + $wans++; + else + $lans++; + $iflist[$if] = $ifdesc; + } + $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']); + if ($numberofconnections > $wans) { + $savemsg=gettext("You have less interfaces than number of connections!"); + $stepid--; + return; + } + + $numberoflocalinterfaces = intval($config['ezshaper']['step1']['numberoflocalinterfaces']); + if ($numberoflocalinterfaces > $lans) { + $savemsg=gettext("You have less interfaces than number of connections!"); + $stepid--; + return; + } + $cfgname = "traffic_shaper_wizard_multi_all.xml"; + + $fields =& $pkg['step'][1]['fields']['field']; + + /* + unset($config['ezshaper']['step2']); + $config['ezshaper']['step2'] = array(); + write_config(); + */ + $fields = array(); + + for ($i = 0; $i < $numberoflocalinterfaces; $i++) { + $field = array(); + $interface_friendly = $i+1; + $field['name'] = "Setup connection speed and scheduler information for interface LAN #{$interface_friendly}"; + $field['type'] = "listtopic"; + $fields[] = $field; + + $field = array(); + $field['displayname'] = "Interface & Scheduler"; + $field['name'] = "local{$i}interface"; + $field['type'] = "select"; + $field['options']['option'] = array(); + foreach ($iflist as $ifname => $ifdescr) { + // Skip wan interfaces here + if (interface_has_gateway($ifname) || interface_has_gatewayv6($ifname)) + continue; + $opts = array(); + $opts['displayname'] = $ifdescr; + $opts['name'] = $ifname; + $opts['value'] = $ifname; + $field['options']['option'][] = $opts; + } + $field['combinefieldsbegin'] = "true"; + $field['bindstofield'] = "ezshaper->step2->local{$i}interface"; + $fields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "local{$i}downloadscheduler"; + $field['type'] = "select"; + $field['typehint'] = "Queueing discipline to apply on this local interface."; + $field['options']['option'] = array(); + $opts = array(); + $opts['name'] = "HFSC"; + $opts['value'] = "HFSC"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "CBQ"; + $opts['value'] = "CBQ"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "PRIQ"; + $opts['value'] = "PRIQ"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step2->local{$i}downloadscheduler"; + $fields[] = $field; + } + + for ($i = 0; $i < $numberofconnections; $i++) { + $field = array(); + $interface_friendly = $i+1; + $field['name'] = "Setup connection speed and scheduler information for interface WAN#{$interface_friendly}"; + $field['type'] = "listtopic"; + $fields[] = $field; + + $field = array(); + $field['displayname'] = "Interface & Scheduler"; + $field['name'] = "conn{$i}interface"; + $field['type'] = "select"; + $interface_real = $i+1; + $field['options']['option'] = array(); + foreach ($iflist as $ifname => $ifdescr) { + // Skip lan interfaces here + if (!interface_has_gateway($ifname) && !interface_has_gatewayv6($ifname)) + continue; + $opts = array(); + $opts['displayname'] = $ifdescr; + $opts['name'] = $ifname; + $opts['value'] = $ifname; + $field['options']['option'][] = $opts; + } + $field['bindstofield'] = "ezshaper->step2->conn{$i}interface"; + $field['combinefieldsbegin'] = "true"; + $fields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "conn{$i}uploadscheduler"; + $field['type'] = "select"; + $field['typehint'] = "Queueing discipline to apply on the upload of this connection."; + $field['options']['option'] = array(); + $opts = array(); + $opts['name'] = "HFSC"; + $opts['value'] = "HFSC"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "CBQ"; + $opts['value'] = "CBQ"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "PRIQ"; + $opts['value'] = "PRIQ"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadscheduler"; + $fields[] = $field; + + $field = array(); + $field['displayname'] = "Upload"; + $field['name'] = "conn{$i}upload"; + $field['type'] = "input"; + $field['bindstofield'] = "ezshaper->step2->conn{$i}upload"; + $field['combinefieldsbegin'] = "true"; + $fields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "conn{$i}uploadspeed"; + $field['typehint'] = "Upload bandwidth on this connection."; + $field['type'] = "select"; + $field['options']['option'] = array(); + $opts = array(); + $opts['value'] = "Kb"; + $opts['name'] = "Kbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Mb"; + $opts['name'] = "Mbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Gb"; + $opts['name'] = "Gbit/s"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadspeed"; + $fields[] = $field; + + $field = array(); + $field['displayname'] = "Download"; + $field['name'] = "conn{$i}download"; + $field['type'] = "input"; + $field['bindstofield'] = "ezshaper->step2->conn{$i}download"; + $field['combinefieldsbegin'] = "true"; + $fields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "conn{$i}downloadspeed"; + $field['typehint'] = "Download bandwidth on this connection."; + $field['type'] = "select"; + $field['options']['option'] = array(); + $opts = array(); + $opts['value'] = "Kb"; + $opts['name'] = "Kbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Mb"; + $opts['name'] = "Mbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Gb"; + $opts['name'] = "Gbit/s"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step2->conn{$i}downloadspeed"; + $fields[] = $field; + } + $field = array(); + $field['name'] = "Next"; + $field['type'] = "submit"; + $fields[] = $field; +} + +function step2_stepsubmitphpaction() { + global $config; + global $stepid, $savemsg; + $sumdownloads = 0; + + /* Input Validation */ + $steps = intval($config['ezshaper']['step1']['numberofconnections']); + $localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']); + for ($i = 0; $i < $steps; $i++) { + for ($j = $i + 1; $j <= $steps; $j++) { + if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"]) { + $savemsg=gettext("You cannot select the same interface for connections {$i} and {$j}."); + $stepid--; + return; + } + if (trim($_POST["conn{$i}uploadscheduler"]) != "PRIQ") { + if (!is_numeric($_POST["conn{$i}upload"])) { + $savemsg = gettext("Upload bandwidth of connection {$i} is not valid."); + $stepid--; + return; + } + if (!is_numeric($_POST["conn{$i}download"])) { + $savemsg = gettext("Download bandwidth of connection {$i} is not valid."); + $stepid--; + return; + } + $upbw = $_POST["conn{$i}upload"]; + $downbw = $_POST["conn{$i}download"]; + if ($upbw < 1 || $downbw < 1) { + $savemsg = gettext("You cannot specify 0 bandwidth!"); + $stepid--; + return; + } + if (intval($upbw) < 128 && $_POST["conn{$i}uploadspeed"] == "Kb" && trim($_POST["conn{$i}uploadscheduler"]) == "CBQ") { + $savemsg=gettext("Uploads smaller than 128Kbit/s is not supported for connection {$i} on CBQ scheduler."); + $stepid--; + return; + } + } + } + for ($j = 0; $j < $localint; $j++) { + if ($_POST["conn{$i}interface"] == $_POST["local{$j}interface"]) { + $savemsg=gettext("You cannot select the same interface for local and outside."); + $stepid--; + return; + } + } + } + for ($i = 0; $i < $localint; $i++) { + for ($j = $i + 1; $j < $localint; $j++) { + if ($_POST["local{$i}interface"] == $_POST["local{$j}interface"]) { + $savemsg=gettext("You cannot select the same interface twice on local interfaces."); + $stepid--; + return; + } + } + } + + /* This is necessary since the wizard expects pecnefined fields. */ + unset($config['ezshaper']['step2']); + $config['ezshaper']['step2'] = array(); + + for ($i = 0; $i < $localint; $i++) { + $config['ezshaper']['step2']["local{$i}downloadscheduler"] = $_POST["local{$i}downloadscheduler"]; + $config['ezshaper']['step2']["local{$i}interface"] = $_POST["local{$i}interface"]; + } + + for ($i = 0; $i < $steps; $i++) { + $config['ezshaper']['step2']["conn{$i}uploadscheduler"] = $_POST["conn{$i}uploadscheduler"]; + $config['ezshaper']['step2']["conn{$i}upload"] = $_POST["conn{$i}upload"]; + $config['ezshaper']['step2']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"]; + $config['ezshaper']['step2']["conn{$i}download"] = $_POST["conn{$i}download"]; + $config['ezshaper']['step2']["conn{$i}downloadspeed"] = $_POST["conn{$i}downloadspeed"]; + $config['ezshaper']['step2']["conn${i}interface"] = $_POST["conn{$i}interface"]; + } +} + +function step3_stepbeforeformdisplay() { + global $config, $pkg; + global $stepid, $savemsg; + + $cfgname = "traffic_shaper_wizard_multi_all.xml"; + + $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']); + $numberoflocalinterfaces = intval($config['ezshaper']['step1']['numberoflocalinterfaces']); + + $fields =& $pkg['step'][1]['fields']['field']; + + $voipfields =& $pkg['step'][2]['fields']['field']; + + $voipfields = array(); + $enablefields = array(); + + $field = array(); + $field['name'] = "enable"; + $field['type'] = "checkbox"; + $field['typehint'] = "Prioritize Voice over IP traffic."; + $field['bindstofield'] = "ezshaper->step3->enable"; + $field['descritpion'] = "This will raise the priority of VOIP traffic above all other traffic."; + $voipfields[] = $field; + + $field = array(); + $field['name'] = "Next"; + $field['type'] = "submit"; + $voipfields[] = $field; + + $field = array(); + $field['name'] = "VOIP specific settings"; + $field['type'] = "listtopic"; + $voipfields[] = $field; + + $field['name'] = "Provider"; + $enablefields[] = "Provider"; + $field['type'] = "select"; + $field['description'] = "Choose Generic if your provider isn't listed."; + $field['options']['option'] = array(); + $opts = array(); + $opts['name'] = "Generic (lowdelay)"; + $opts['value'] = "Generic"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "VoicePulse"; + $opts['value'] = "VoicePulse"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "Asterisk/Vonage"; + $opts['value'] = "Asterisk"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "PanasonicTDA"; + $opts['value'] = "Panasonic"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step3->provider"; + $voipfields[] = $field; + + $field = array(); + $field['displayname'] = "Upstream SIP Server"; + $field['name'] = "upstream_sip_server"; + $enablefields[] = "upstream_sip_server"; + $field['type'] = "inputalias"; + $field['description'] = "(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the remote PBX or SIP Trunk to prioritize.
                              NOTE: You can also use a Firewall Alias in this location."; + $field['message'] = "IP Address field is non-blank and doesn't look like an IP address."; + $field['bindstofield'] = "ezshaper->step3->address"; + $voipfields[] = $field; + + for ($i = 0; $i < $numberofconnections; $i++) { + $field = array(); + $interface_friendly = $i+1; + $field['name'] = "Connection WAN #{$interface_friendly}"; + $field['type'] = "listtopic"; + $voipfields[] = $field; + + $field = array(); + $field['displayname'] = "Upload"; + $field['name'] = "conn{$i}upload"; + $enablefields[] = "conn{$i}upload"; + $field['type'] = "input"; + $field['bindstofield'] = "ezshaper->step3->conn{$i}upload"; + $field['combinefieldsbegin'] = "true"; + $voipfields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "conn{$i}uploadspeed"; + $enablefields[] = "conn{$i}uploadspeed"; + $field['typehint'] = "Upload bandwidth guarantee for VOIP phone(s) on connection {$i}."; + $field['type'] = "select"; + $field['options']['option'] = array(); + $opts = array(); + $opts['value'] = "Kb"; + $opts['name'] = "Kbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Mb"; + $opts['name'] = "Mbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Gb"; + $opts['name'] = "Gbit/s"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step3->conn{$i}uploadspeed"; + $voipfields[] = $field; + } + + for ($i = 0; $i < $numberoflocalinterfaces; $i++) { + $field = array(); + $interface_friendly = $i+1; + $field['name'] = "Connection LAN #{$interface_friendly}"; + $field['type'] = "listtopic"; + $voipfields[] = $field; + + $field = array(); + $field['displayname'] = "Download"; + $field['name'] = "local{$i}download"; + $enablefields[] = "local{$i}download"; + $field['type'] = "input"; + $field['bindstofield'] = "ezshaper->step3->local{$i}download"; + $field['combinefieldsbegin'] = "true"; + $voipfields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "local{$i}downloadspeed"; + $enablefields[] = "local{$i}downloadspeed"; + $field['typehint'] = "Download bandwidth guarantee for VOIP phone(s) on connections."; + $field['type'] = "select"; + $field['options']['option'] = array(); + $opts = array(); + $opts['value'] = "Kb"; + $opts['name'] = "Kbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Mb"; + $opts['name'] = "Mbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Gb"; + $opts['name'] = "Gbit/s"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step3->local{$i}downloadspeed"; + $voipfields[] = $field; + } + + $field = array(); + $field['name'] = "Next"; + $field['type'] = "submit"; + $voipfields[] = $field; + $voipfields[0]['enablefields'] = implode(",", $enablefields); +} + +function step3_stepsubmitphpaction() { + global $config; + global $stepid, $savemsg; + + if (!$_POST['enable']) + return; + + if($_POST['address']) { + if(!is_ipaddroralias($_POST['address'])) { + /* item is not an ip or alias. error out */ + $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue."); + $stepid--; + return; + } + } + + $steps = intval($config['ezshaper']['step1']['numberofconnections']); + for ($i = 0; $i < $steps; $i++) { + if ($config['ezshaper']['step2']["conn{$i}uploadscheduler"] == "PRIQ") + continue; + if (!is_numeric($_POST["conn{$i}upload"])) { + $savemsg = gettext("Upload bandwidth of connection {$i} is not valid."); + $stepid--; + return; + } + if ($_POST["conn{$i}uploadspeed"] == "%") { + if (intval($_POST["conn{$i}upload"]) > 80) { + $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection."); + $stepid--; + return; + } + } else { + $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]); + $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]); + $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]); + $input_bw = $factor * floatval($_POST["conn{$i}upload"]); + if ((0.8 * $ifbw) < $input_bw) { + $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection."); + $stepid--; + return; + } + } + } + + $localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']); + for ($i = 0; $i < $localint; $i++) { + if ($config['ezshaper']['step2']["local{$i}downloadscheduler"] == "PRIQ") + continue; + if (!is_numeric($_POST["local{$i}download"])) { + $savemsg = gettext("Download bandwidth of connection {$i} is not valid."); + $stepid--; + return; + } + if ($_POST["local{$i}downloadspeed"] == "%") { + if (intval($_POST["local{$i}download"]) > 80) { + $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection."); + $stepid--; + return; + } + } else { + for ($j = 0; $j < $steps; $j++) { + $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$j}downloadspeed"]); + $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$j}download"]); + $factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]); + $input_bw = $factor * floatval($_POST["local{$i}download"]); + if ((0.8 * $ifbw) < $input_bw) { + $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$j} higher than 80% of the connection."); + $stepid--; + return; + } + } + } + } + + for ($i = 0; $i < $localint; $i++) { + $config['ezshaper']['step3']["local{$i}download"] = $_POST["local{$i}download"]; + $config['ezshaper']['step3']["local{$i}downloadspeed"] = $_POST["local{$i}downloadspeed"]; + } + + for ($i = 0; $i < $steps; $i++) { + $config['ezshaper']['step3']["conn{$i}upload"] = $_POST["conn{$i}upload"]; + $config['ezshaper']['step3']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"]; + } +} + +function step4_stepsubmitphpaction() { + global $config; + global $stepid, $savemsg; + + if ( $_POST['enable'] ) { + if(!$_POST['bandwidth']) { + $savemsg="You need to specify a value for bandwidth!"; + $stepid--; + return; + } + if(!is_numeric($_POST['bandwidth'])) { + $savemsg="The posted value is not a valid bandwidth."; + $stepid--; + return; + } + if ($_POST['bandwidthspeed'] <> "%") { + $savemsg = gettext("Only percentage bandwidth specification is allowed."); + $stepid--; + return; + } + $bw = $_POST['bandwidth']; + if($bw > 15 || $bw < 2) { + $savemsg="Values should be between 2% and 15%!"; + $stepid--; + return; + } + if($_POST['address'] <> "" && !is_ipaddroralias($_POST['address'])) { + /* item is not an ip or alias. error out */ + $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue."); + $stepid--; + } + } +} + +function step5_stepsubmitphpaction() { + global $stepid, $savemsg; + if ( $_POST['enable'] ) { + if ($_POST['p2pcatchall']) { + if(!is_numeric($_POST['bandwidth'])) { + $savemsg="Posted value is not a valid bandwidth."; + $stepid--; + } + if ($_POST['bandwidthspeed'] <> "%") { + $savemsg = gettext("Only percentage bandwidth specification is allowed."); + $stepid--; + return; + } + $bw = $_POST['bandwidth']; + if($bw > 15 || $bw < 2) { + $savemsg="Values should be between 2% and 15%!"; + $stepid--; + return; + } + } + } +} + +function step8_stepsubmitphpaction() { + global $g, $config; + + /* save the new configuration */ + apply_all_choosen_items(); + + /* reset rrd queues */ + system("rm -f /var/db/rrd/*queuedrops.rrd"); + system("rm -f /var/db/rrd/*queues.rrd"); + enable_rrd_graphing(); + + /* apply the new configuration to the system */ + filter_configure(); + + /* And we're no longer dirty! */ + clear_subsystem_dirty('shaper'); + + update_filter_reload_status("Initializing"); + header("Location: status_filter_reload.php"); + exit; +} + +function apply_all_choosen_items() { + global $config, $g, $altq_list_queues, $gamesplist, $voiplist, $othersplist, $p2plist; + + require_once("wizardapp.inc"); + + /* + * Wipe previous config. + * Doing it here makes sense since we can wipe the previous config only after + * the user decides to do so, finishing the wizard. + */ + if(isset($config['shaper']['queue'])) + unset($config['shaper']['queue']); + /* XXX: This is ecnundant, because this should be handled by converter at startup. */ + if(isset($config['shaper']['rule'])) + unset($config['shaper']['rule']); + foreach ($config['filter']['rule'] as $key => $rule) + if ($rule['wizard'] == "yes") + unset($config['filter']['rule'][$key]); + + /* restart the cached config */ + unset($altq_list_queues); + $altq_list_queues = array(); + + $steps = intval($config['ezshaper']['step1']['numberofconnections']); + + $interfacelist = array(); + + for ($i = 0; $i < $steps; $i++) { + + $tmppath = array(); + $altq =& new altq_root_queue(); + + $altq->SetInterface($config['ezshaper']['step2']["conn{$i}interface"]); + $interfacelist[] = $config['ezshaper']['step2']["conn{$i}interface"]; + $altq->SetScheduler($config['ezshaper']['step2']["conn{$i}uploadscheduler"]); + $altq->SetBandwidth(floatval($config['ezshaper']['step2']["conn{$i}upload"])); + $altq->SetBwscale($config['ezshaper']['step2']["conn{$i}uploadspeed"]); + $altq->SetEnabled("on"); + $altq_list_queues[$altq->GetQname()] =& $altq; + array_push($tmppath, $config['ezshaper']['step2']["conn{$i}interface"]); + $altq->SetLink($tmppath); + $altq->wconfig(); + + $sched = $config['ezshaper']['step2']["conn{$i}uploadscheduler"]; + $voipbw =0; + $voipbwunit = "Kb"; + $voip = false; + $penalty = false; + $penaltybw = 0; + $penaltybwunit = "Kb"; + $p2p = false; + $p2pcatchall = false; + $p2pcatchbw = 0; + $p2pcatchbwunit = "%"; + $games = false; + $otherpriority = false; + $remainbw = 0; + $factor = 0; + $upfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]); + $upbw = floatval($config['ezshaper']['step2']["conn{$i}upload"]) * $upfactor; + + if ($config['ezshaper']['step3']['enable']) { + $voip = true; + $voipbw = $config['ezshaper']['step3']["conn{$i}upload"]; + $voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"]; + if ($voipbwunit == "%") + $factor = $upbw/100; + else + $factor = wizard_get_bandwidthtype_scale($voipbwunit); + $remainbw += $voipbw * $factor; + } + if ($config['ezshaper']['step4']['enable']) { + $penalty = true; + $penaltybw = $config['ezshaper']['step4']['bandwidth']; + $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit']; + if ($penaltybwunit == "%") + $factor = $upbw/100; + else + $factor = wizard_get_bandwidthtype_scale($penaltybwunit); + $remainbw += $penaltybw * $factor; + } else { + $penalty = false; + $penaltybw = 0; + } + if ($config['ezshaper']['step5']['enable']) { + $p2p = true; + if ($config['ezshaper']['step5']['p2pcatchall']) { + $p2pcatchall = true; + $p2pcatchbw = $config['ezshaper']['step5']['bandwidth']; + $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit']; + if ($p2pcatchbwunit == "%") + $factor = $upbw/100; + else + $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit); + $remainbw += $p2pcatchbw * $factor; + } else { + $p2pcatchall = false; + $p2pcatchbw = 0; + } + } else { + $p2p = false; + $p2pcatchall = false; + $p2pcatchbw = 0; + } + if ($config['ezshaper']['step6']['enable']) { + $games = true; + } else { + $games = false; + } + + if ($config['ezshaper']['step7']['enable']) { + $otherpriority = true; + } else { + $otherpriority = false; + } + + $remainbw = round($remainbw / $upbw * 100, 2); + + if (intval($remainbw) > 0 && intval($remainbw) > 30) { + $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue."); + header("Location: wizard.php?xml=traffic_shaper_wizard_multi_all.xml&stepid=2&message={$savemsg}"); + exit; + } else { + $remainbw = 100 - $remainbw; + } + + if ($sched != "PRIQ") { + if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qInternet"; + //$tmpcf['priority'] = 6; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + If ($sched == "CBQ") { + $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]); + $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"]; + } + else if ($sched == "HFSC") { + $tmpcf['linkshare3'] = + floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"]; + $tmpcf['upperlimit3'] = + floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"]; + $tmpcf['upperlimit'] = "on"; + + + $tmpcf['linkshare'] = "on"; + $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]); + $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"]; + } + array_push($tmppath, "qInternet"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + //array_pop($tmppath); + //echo "qInternet
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + $altq =& $qtmp; + } + + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qACK"; + $tmpcf['priority'] = 6; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + If ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.2; + $tmpcf['bandwidthtype'] = "%"; + } + else if ($sched == "HFSC") { + $lkbw = 0.20 * $remainbw; + $tmpcf['linkshare3'] = "{$lkbw}%"; + $tmpcf['linkshare'] = "on"; + $tmpcf['bandwidth'] = $lkbw; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qACK"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qACK
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + if ($p2pcatchall) + $tmpcf['name'] = "qOthersDefault"; + else + $tmpcf['name'] = "qDefault"; + $tmpcf['priority'] = 3; + $tmpcf['enabled'] = "on"; + if (!$p2pcatchall) + $tmpcf['default'] = "on"; + $tmpcf['ecn'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, $tmpcf['name']); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qDefault
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + + if ($p2p) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qP2P"; + $tmpcf['priority'] = 1; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($p2pcatchall) { + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $p2pcatchbw; + $tmpcf['bandwidthtype'] = $p2pcatchbwunit; + } else if ($sched == "HFSC") { + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}"; + $tmpcf['upperlimit'] = "on"; + $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}"; + $tmpcf['bandwidth'] = $p2pcatchbw; + $tmpcf['bandwidthtype'] = $p2pcatchbwunit; + } + $tmpcf['default'] = "on"; + + } else { + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpbw = $remainbw * 0.05; /* 5% bandwidth */ + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$tmpbw}%"; + $tmpcf['upperlimit'] = "on"; + $tmpcf['upperlimit3'] = "{$tmpbw}%"; + $tmpcf['bandwidth'] = $tmpbw; + $tmpcf['bandwidthtype'] = "%"; + } + } + array_push($tmppath, "qP2P"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qP2P
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($voip) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qVoIP"; + $tmpcf['priority'] = 7; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + if ($voipbw > 0) { + $tmpcf['bandwidth'] = $voipbw; + $tmpcf['bandwidthtype'] = $voipbwunit; + } else { + $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } + } else if ($sched == "HFSC") { + if ($voipbw > 0) { + $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}"; + } else { + $voipbw = $remainbw * 0.20; /* 20% bandwidth */ + $tmpcf['realtime3'] = "{$voipbw}%"; + } + $tmpcf['realtime'] = "on"; + $tmpcf['bandwidth'] = 32; + $tmpcf['bandwidthtype'] = "Kb"; + } + array_push($tmppath, "qVoIP"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qVoIP
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($games) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qGames"; + $tmpcf['priority'] = 5; + $tmpcf['enabled'] = "on"; + $tmpcf['ecn'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $gamesbw = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$gamesbw}%"; + $tmpcf['bandwidth'] = "{$gamesbw}"; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qGames"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qGames
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($otherpriority) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qOthersHigh"; + $tmpcf['priority'] = 4; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpcf['linkshare'] = "on"; + $otherbw = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['linkshare3'] = "{$otherbw}%"; + $tmpcf['bandwidth'] = $otherbw; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qOthersHigh"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qHigh
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + + + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qOthersLow"; + $tmpcf['priority'] = 2; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + if ($penalty) { + $tmpcf['bandwidthtype'] = $penaltybwunit; + $tmpcf['bandwidth'] = $penaltybw; + } else { + $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } + } else if ($sched == "HFSC") { + if ($penalty) { + $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}"; + $tmpcf['bandwidth'] = $penaltybw; + $tmpcf['bandwidthtype'] = $penaltybwunit; + } else { + $lsbw = $remainbw * 0.05; + $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */ + $tmpcf['bandwidth'] = $lsbw; + $tmpcf['bandwidthtype'] = "%"; + } + $tmpcf['linkshare'] = "on"; + } + array_push($tmppath, "qOthersLow"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qLow
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + array_pop($tmppath); + } + + /* LAN bandwidth ----------------------------------------------------------------------------------------- */ + $localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']); + $lanbw = 0; + for ($i = 0; $i < $steps; $i++) { + $down = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]); + $input_bw = floatval($config['ezshaper']['step2']["conn{$i}download"]) * $down; + $lanbw += $input_bw; + } + + for ($i = 0; $i < $localint; $i++) { + + $tmppath = array(); + $altq =& new altq_root_queue(); + + $altq->SetInterface($config['ezshaper']['step2']["local{$i}interface"]); + $altq->SetScheduler($config['ezshaper']['step2']["local{$i}downloadscheduler"]); + //$altq->SetBandwidth($lanbw/1000); + //$altq->SetBwscale("Kb"); + $altq->SetEnabled("on"); + $altq_list_queues[$altq->GetQname()] =& $altq; + array_push($tmppath, $config['ezshaper']['step2']["local{$i}interface"]); + $altq->SetLink($tmppath); + //var_dump($input_errors); + $altq->wconfig(); + + $sched = $config['ezshaper']['step2']["local{$i}downloadscheduler"]; + $voipbw =0; + $voipbwunit = "%"; + $voip = false; + $penalty = false; + $penaltybw = 0; + $penaltybwunit = "%"; + $p2p = false; + $p2pcatchall = false; + $p2pcatchbw = 0; + $games = false; + $otherpriority = false; + $remainbw = 0; + + + if ($config['ezshaper']['step3']['enable']) { + $voip = true; + $voipbw = $config['ezshaper']['step3']["local{$i}download"]; + $voipbwunit = $config['ezshaper']['step3']["local{$i}downloadspeed"]; + if ($sched != HFSC) { + if ($penaltybwunit == "%") + $factor = $lanbw/100; + else + $factor = wizard_get_bandwidthtype_scale($voipbwunit); + $remainbw += floatval($voipbw) * $factor; + } else + $remainbw += 32000; /* 32Kbit/s reserved for HFSC linksharing */ + } + if ($config['ezshaper']['step4']['enable']) { + $penalty = true; + $penaltybw = $config['ezshaper']['step4']['bandwidth']; + $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit']; + if ($penaltybwunit == "%") + $factor = $lanbw/100; + else + $factor = wizard_get_bandwidthtype_scale($penaltybwunit); + $remainbw += floatval($penaltybw) * $factor; + } else { + $penalty = false; + $penaltybw = 0; + } + if ($config['ezshaper']['step5']['enable']) { + $p2p = true; + if ($config['ezshaper']['step5']['p2pcatchall']) { + $p2pcatchall = true; + $p2pcatchbw = $config['ezshaper']['step5']['bandwidth']; + $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit']; + if ($p2pcatchbwunit == "%") + $factor = $upbw/100; + else + $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit); + $remainbw += floatval($p2pcatchbw) * $factor; + } else { + $p2pcatchall = false; + $p2pcatchbw = 0; + } + } else { + $p2p = false; + $p2pcatchall = false; + $p2pcatchbw = 0; + } + if ($config['ezshaper']['step6']['enable']) { + $games = true; + } else { + $games = false; + } + + if ($config['ezshaper']['step7']['enable']) { + $otherpriority = true; + } else { + $otherpriority = false; + } + $remainbw = round($remainbw / $lanbw * 100, 2); + + if (intval($remainbw) > 0 && intval($remainbw) > 40) { + $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue."); + header("Location: wizard.php?xml=traffic_shaper_wizard_multi_all.xml&stepid=2&message={$savemsg}"); + exit; + } else { + $remainbw = 100 - $remainbw; + } + + if (!$p2pcatchall) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qLink"; + $tmpcf['priority'] = 2; + $tmpcf['enabled'] = "on"; + $tmpcf['default'] = "on"; + $tmpcf['qlimit'] = 500; + $tmpcf['ecn'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = 20; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpcf['bandwidth'] = 20; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, $tmpcf['name']); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qDefault
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($sched != "PRIQ") { + if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qInternet"; + //$tmpcf['priority'] = 6; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + If ($sched == "CBQ") { + $tmpcf['bandwidth'] = $lanbw/1000; + $tmpcf['bandwidthtype'] = "Kb"; + } + else if ($sched == "HFSC") { + $tmpcf['linkshare3'] = $lanbw/1000 . "Kb"; + $tmpcf['upperlimit3'] = $lanbw/1000 . "Kb"; + $tmpcf['upperlimit'] = "on"; + $tmpcf['linkshare'] = "on"; + $tmpcf['bandwidth'] = $lanbw/1000; + $tmpcf['bandwidthtype'] = "Kb"; + } + array_push($tmppath, "qInternet"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + //array_pop($tmppath); + //echo "qInternet
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + $altq =& $qtmp; + } + + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qACK"; + $tmpcf['priority'] = 6; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + If ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.2; + $tmpcf['bandwidthtype'] = "%"; + } + else if ($sched == "HFSC") { + $lkbw = 0.20 * $remainbw; + $tmpcf['linkshare3'] = "{$lkbw}%"; + $tmpcf['linkshare'] = "on"; + $tmpcf['bandwidth'] = $lkbw; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qACK"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qACK
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + + if ($p2p) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qP2P"; + $tmpcf['priority'] = 1; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($p2pcatchall) { + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $p2pcatchbw; + $tmpcf['bandwidthtype'] = $p2pcatchbwunit; + } else if ($sched == "HFSC") { + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}"; + $tmpcf['upperlimit'] = "on"; + $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}"; + $tmpcf['bandwidth'] = $p2pcatchbw; + $tmpcf['bandwidthtype'] = $p2pcatchbwunit; + } + $tmpcf['default'] = "on"; + $tmpcf['qlimit'] = 500; + } else { + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpbw = $remainbw * 0.05; /* 5% bandwidth */ + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$tmpbw}%"; + $tmpcf['upperlimit'] = "on"; + $tmpcf['upperlimit3'] = "{$tmpbw}%"; + $tmpcf['bandwidth'] = $tmpbw; + $tmpcf['bandwidthtype'] = "%"; + } + } + array_push($tmppath, "qP2P"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qP2P
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($voip) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qVoIP"; + $tmpcf['priority'] = 7; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + if ($voipbw > 0) { + $tmpcf['bandwidth'] = $voipbw; + $tmpcf['bandwidthtype'] = $voipbwunit; + } else { + $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } + } else if ($sched == "HFSC") { + if ($voipbw > 0) { + $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}"; + } else { + $voipbw = $remainbw * 0.20; /* 20% bandwidth */ + $tmpcf['realtime3'] = "{$voipbw}%"; + } + $tmpcf['realtime'] = "on"; + $tmpcf['bandwidth'] = 32; + $tmpcf['bandwidthtype'] = "Kb"; + } + array_push($tmppath, "qVoIP"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qVoIP
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($games) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qGames"; + $tmpcf['priority'] = 5; + $tmpcf['enabled'] = "on"; + $tmpcf['ecn'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $gamesbw = $remainbw * 0.2; /* 20% bandwidth */ + $tmpcf['linkshare'] = "on"; + $tmpcf['linkshare3'] = "{$gamesbw}%"; + $tmpcf['bandwidth'] = "{$gamesbw}"; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qGames"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qGames
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + + if ($otherpriority) { + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qOthersHigh"; + $tmpcf['priority'] = 4; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['bandwidthtype'] = "%"; + } else if ($sched == "HFSC") { + $tmpcf['linkshare'] = "on"; + $otherbw = $remainbw * 0.1; /* 10% bandwidth */ + $tmpcf['linkshare3'] = "{$otherbw}%"; + $tmpcf['bandwidth'] = $otherbw; + $tmpcf['bandwidthtype'] = "%"; + } + array_push($tmppath, "qOthersHigh"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qHigh
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + + + if ($sched == "PRIQ") + $q =& new priq_queue(); + else if ($sched == "CBQ") + $q =& new cbq_queue(); + else if ($sched == "HFSC") + $q =& new hfsc_queue(); + $tmpcf = array(); + $tmpcf['name'] = "qOthersLow"; + $tmpcf['priority'] = 3; + $tmpcf['ecn'] = "on"; + $tmpcf['enabled'] = "on"; + if ($sched == "CBQ") { + $tmpcf['borrow'] = "on"; + if ($penalty) { + $tmpcf['bandwidth'] = $penaltybw; + $tmpcf['bandwidthtype'] = $penaltybwunit; + } else { + $tmpcf['bandwidthtype'] = "%"; + $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */ + } + } else if ($sched == "HFSC") { + if ($penalty) { + $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}"; + $tmpcf['bandwidth'] = $penaltybw; + $tmpcf['bandwidthtype'] = $penaltybwunit; + } else { + $lsbw = $remainbw * 0.05; + $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */ + $tmpcf['bandwidth'] = $lsbw; + $tmpcf['bandwidthtype'] = "%"; + } + $tmpcf['linkshare'] = "on"; + } + array_push($tmppath, "qOthersLow"); + $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors); + array_pop($tmppath); + //echo "qLow
                              "; + //var_dump($input_errors); + $qtmp->wconfig(); + } + array_pop($tmppath); + } + +/* End LAN bandwidth ------------------------------------------------------------------------------------- */ + + + + if (!is_array($config['filter']['rule'])) + $config['filter']['rule'] = array(); + + $interfacelist = implode(",", $interfacelist); + + /* Rules */ + if ($penalty) { + if( is_ipaddr($config['ezshaper']['step4']['address']) || is_alias($config['ezshaper']['step4']['address'])) { + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + $rule['descr'] = gettext("Penalty Box"); + $rule['defaultqueue'] = "qOthersLow"; + $rule['source']['address'] = $config['ezshaper']['step4']['address']; + $rule['destination']['any'] = TRUE; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + + } + } + + /* If user specifies an IP, we don't bother with providers */ + if ($voip) { + if( is_ipaddr($config['ezshaper']['step3']['address']) || is_alias($config['ezshaper']['step3']['address'])) { + /* create VOIP rules */ + $rule = array(); + $rule['type'] = "match"; + //$rule['interface'] = $interfacelist; + $rule['descr'] = gettext("Connections From Upstream SIP Server"); + $rule['protocol'] = "udp"; + $rule['defaultqueue'] = "qVoIP"; + $rule['source']['address'] = $config['ezshaper']['step3']['address']; + $rule['destination']['any'] = TRUE; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + + $rule = array(); + $rule['type'] = "match"; + //$rule['interface'] = $interfacelist; + $rule['descr'] = gettext("Connections To Upstream SIP Server"); + $rule['protocol'] = "udp"; + $rule['defaultqueue'] = "qVoIP"; + $rule['source']['any'] = TRUE; + $rule['destination']['address'] = $config['ezshaper']['step3']['address']; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + + } elseif( $config['ezshaper']['step3']['provider'] == "Generic" ) { + /* create VOIP rules */ + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + $rule['descr'] = "DiffServ/Lowdelay/Upload"; + $rule['protocol'] = "udp"; + $rule['source']['any'] = TRUE; + $rule['defaultqueue'] = "qVoIP"; + $rule['destination']['any'] = TRUE; + $rule['iptos'] = "lowdelay"; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + + } else { + /* loop through voiplist[] */ + foreach ($voiplist[$config['ezshaper']['step3']['provider']] as $voip) { + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + $rule['defaultqueue'] = 'qVoIP'; + $rule['source']['any'] = TRUE; + $rule['destination']['any'] = TRUE; + $rule['descr'] = "m_voip {$voip[0]} outbound"; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['destination']['port'] = $voip[2]."-".$voip[3]; + if($voip[1] != '') + $rule['protocol'] = $voip[1]; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + } + } + } + + /* loop through p2plist[] */ + if ($p2p) { + foreach($config['ezshaper']['step5'] as $key => $val) { + if (!is_array($p2plist[$key])) + continue; + foreach ($p2plist[$key] as $p2pclient) { + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + $rule['defaultqueue'] = 'qP2P'; + $rule['source']['any'] = TRUE; + $rule['destination']['any'] = TRUE; + $rule['descr'] = "m_P2P {$p2pclient[0]} outbound"; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['destination']['port'] = $p2pclient[2]."-".$p2pclient[3]; + if($p2pclient[1] != '') + $rule['protocol'] = $p2pclient[1]; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + } + } + } + + /* loop through gamesplist[] */ + if ($games) { + foreach($config['ezshaper']['step6'] as $key => $val) { + if (!is_array($gamesplist[$key])) + continue; + foreach ($gamesplist[$key] as $Gameclient) { + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + $rule['defaultqueue'] = 'qGames'; + if ($Gameclient[1] == "tcp") + $rule['ackqueue'] = 'qACK'; + $rule['source']['any'] = TRUE; + $rule['destination']['any'] = TRUE; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['descr'] = "m_Game {$Gameclient[0]} outbound"; + $rule['destination']['port'] = $Gameclient[2]."-".$Gameclient[3]; + if($Gameclient[1] != '') + $rule['protocol'] = $Gameclient[1]; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + } + } + } + + /* loop through othersplist[] */ + if ($otherpriority) { + foreach($config['ezshaper']['step7'] as $key => $val) { + if (!is_array($othersplist[$key])) + continue; + foreach ($othersplist[$key] as $otherclient) { + $rule = array(); + $rule['type'] = "match"; + $rule['interface'] = $interfacelist; + switch ($val) { + case "H": + $rule['defaultqueue'] = 'qOthersHigh'; /* posted value H or L */ + if ($otherclient[1] == "tcp") + $rule['ackqueue'] = 'qACK'; + $loop = 0; + break; + case "L": + $rule['defaultqueue'] = 'qOthersLow'; /* posted value H or L */ + if ($otherclient[1] == "tcp") + $rule['ackqueue'] = 'qACK'; + $loop = 0; + break; + case "D": + if ($p2pcatchall) { + $loop = 0; + $rule['defaultqueue'] = 'qOthersDefault'; + if ($otherclient[1] == "tcp") + $rule['ackqueue'] = 'qACK'; + } else + $loop = 1; /* It automitaclly goes to default queue */ + break; + default: + $loop = 1; + } + if (!$loop) { + $rule['source']['any'] = TRUE; + $rule['destination']['any'] = TRUE; + $rule['floating'] = "yes"; + $rule['wizard'] = "yes"; + $rule['enabled'] = "on"; + $rule['descr'] = "m_Other {$otherclient[0]} outbound"; + + if($otherclient[2] or $otherclient[3]) { + $rule['destination']['port'] = $otherclient[2]."-".$otherclient[3]; + } + if($otherclient[1] != '') + $rule['protocol'] = $otherclient[1]; + $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard")); + $config['filter']['rule'][] = $rule; + } + } + } + } + write_config(); +} + +function wizard_get_bandwidthtype_scale($type = "b") { + switch ($type) { + case "Gb": + $factor = 1024 * 1024 * 1024; + break; + case "Mb": + $factor = 1024 * 1024; + break; + case "Kb": + $factor = 1024; + break; + case "b": + default: + $factor = 1; + break; + } + return intval($factor); +} + +?> diff --git a/usr/local/www/wizards/traffic_shaper_wizard_multi_all.xml b/usr/local/www/wizards/traffic_shaper_wizard_multi_all.xml new file mode 100755 index 000000000..52e7f0dd3 --- /dev/null +++ b/usr/local/www/wizards/traffic_shaper_wizard_multi_all.xml @@ -0,0 +1,1636 @@ + + + + + 9 + + 1 + pfSense Traffic Shaper Wizard + true + This wizard will guide you through setting up the pfSense traffic shaper. + Please be aware that Custom Bandwidths should not exceed 30% of the interface/link bandwidth. Keep this in mind during the wizard. + + + + listtopic + Traffic shaper Wizard + + + Enter number of WAN type connections + numberofconnections + input + ^[0-9]+$ + Number of connections you have + ezshaper->step1->numberofconnections + + + Enter number of LAN type interfaces + numberoflocalinterfaces + input + ^[0-9]+$ + Number of local interfaces you have + ezshaper->step1->numberoflocalinterfaces + + + Next + submit + + + step1_stepbeforeformdisplay(); + step1_submitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc + + + 2 + pfSense Traffic Shaper Wizard + Shaper configuration + + step2_stepbeforeformdisplay(); + step2_stepsubmitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc + + + Next + submit + + + + + 3 + pfSense Traffic Shaper Wizard + Voice over IP + + + Enable + checkbox + Prioritize Voice over IP traffic + This will raise the priority of VOIP traffic above all other traffic. + ezshaper->step3->enable + + + Next + submit + + + VOIP specific settings + listtopic + + + Provider + select + Choose Generic if your provider isn't listed. + ezshaper->step3->provider + + + + + + + + + Upstream SIP Server + inputalias + (Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the <strong>remote</strong> PBX or SIP Trunk to prioritize. <br />NOTE: You can also use a Firewall Alias in this location. + ezshaper->step3->address + IP Address field is non-blank and doesn't look like an IP address. + + + Bandwidth + input + ^[0-9]*$ + Total bandwidth in percentage(%)(should be between 5 and 40) guarantee for VOIP traffic. + ezshaper->step3->bandwidth + + + Next + submit + + + step3_stepbeforeformdisplay(); + step3_stepsubmitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc + + + 4 + pfSense Traffic Shaper Wizard + Penalty Box + true + + + true + Enable + checkbox + Penalize IP or Alias + This will lower the priority of traffic from this IP or alias. + Address,Bandwidth,BandwidthSpeed + ezshaper->step4->enable + + + Next + submit + + + PenaltyBox specific settings + listtopic + + + Address + inputalias + This allows you to just provide the IP address of the computer(s) or Penalize. NOTE: You can also use a Firewall Alias in this location. + ezshaper->step4->address + IP Address field is non-blank and doesn't look like an IP address. + + + Bandwidth + input + ^[0-9]*$ + Speed must be numerical. + ezshaper->step4->bandwidth + true + + + true + true + true + true + BandwidthSpeed + The limit you want to apply. + select + + + + + + + + ezshaper->step4->bandwidthunit + + + Next + submit + + + step4_stepsubmitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc + + + 5 + pfSense Traffic Shaper Wizard + Peer to Peer networking + true + + + true + Enable + checkbox + Lower priority of Peer-to-Peer traffic + This will lower the priority of P2P traffic below all other traffic. Please check the items that you would like to prioritize lower than normal traffic. + p2pCatchAll,Bandwidth,BandwidthSpeed,Aimster,BitTorrent,BuddyShare,CuteMX,DCplusplus,dcc,DirectConnect,DirectFileExpress,EDonkey2000,FastTrack,Gnutella,grouper,hotComm,HotlineConnect,iMesh,Napster,OpenNap,Scour,Shareaza,SongSpy,WinMX + ezshaper->step5->enable + + + Next + submit + + + p2p Catch all + listtopic + + + p2pCatchAll + checkbox + When enabled, all uncategorized traffic is fed to the p2p queue. + ezshaper->step5->p2pcatchall + + + Bandwidth + input + ^[0-9]*$ + Speed must be numerical. + ezshaper->step5->bandwidth + true + + + true + true + true + true + BandwidthSpeed + The limit you want to apply. + select + + + + + + + + ezshaper->step5->bandwidthunit + + + Enable/Disable specific P2P protocols + listtopic + + + Aimster + checkbox + Aimster and other P2P using the Aimster protocol and ports + ezshaper->step5->aimster + + + BitTorrent + checkbox + Bittorrent and other P2P using the Torrent protocol and ports + ezshaper->step5->bittorrent + + + BuddyShare + checkbox + BuddyShare and other P2P using the BuddyShare protocol and ports + ezshaper->step5->buddyshare + + + CuteMX + checkbox + CuteMX and other P2P using the CuteMX protocol and ports + ezshaper->step5->cutemx + + + DCplusplus + checkbox + DC++ and other P2P using the DC++ protocol and ports + ezshaper->step5->dcplusplus + + + DCC + checkbox + irc DCC file transfers + ezshaper->step5->dcc + + + DirectConnect + checkbox + DirectConnect and other P2P using the DirectConnect protocol and ports + ezshaper->step5->directconnect + + + DirectFileExpress + checkbox + DirectFileExpress and other P2P using the DirectFileExpress protocol and ports + ezshaper->step5->directfileexpress + + + eDonkey2000 + checkbox + eDonkey and other P2P using the eDonkey protocol and ports + ezshaper->step5->edonkey2000 + + + FastTrack + checkbox + FastTrack and other P2P using the FastTrack protocol and ports + ezshaper->step5->fasttrack + + + Gnutella + checkbox + Gnutella and other P2P using the Gnutella protocol and ports + ezshaper->step5->gnutella + + + grouper + checkbox + grouper and other P2P using the grouper protocol and ports + ezshaper->step5->grouper + + + hotComm + checkbox + hotComm and other P2P using the hotComm protocol and ports + ezshaper->step5->hotcomm + + + HotlineConnect + checkbox + HotlineConnect and other P2P using the HotlineConnect protocol and ports + ezshaper->step5->hotlineconnect + + + iMesh + checkbox + iMesh and other P2P using the iMesh protocol and ports + ezshaper->step5->imesh + + + Napster + checkbox + Napster and other P2P using the Napster protocol and ports + ezshaper->step5->napster + + + OpenNap + checkbox + OpenNap and other P2P using the OpenNap protocol and ports + ezshaper->step5->opennap + + + Scour + checkbox + Scour and other P2P using the Scour protocol and ports + ezshaper->step5->scour + + + Shareaza + checkbox + Shareaza and other P2P using the Shareaza protocol and ports + ezshaper->step5->shareaza + + + SongSpy + checkbox + SongSpy and other P2P using the SongSpy protocol and ports + ezshaper->step5->songspy + + + WinMX + checkbox + WinMX and other P2P using the WinMX protocol and ports + ezshaper->step5->winmx + + + Next + submit + + + step5_stepsubmitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc + + + 6 + pfSense Traffic Shaper Wizard + true + Network Games + + + Enable + checkbox + Prioritize network gaming traffic + This will raise the priority of gaming traffic to higher than most traffic. + BattleNET,EAOrigin,GameForWindowsLive,PlayStationConsoles,Steam,WiiConsoles,XboxConsoles,ARMA2,ARMA3,Battlefield2,Battlefield3,BattlefieldBC2,Borderlands,CallOfDuty,Counterstrike,Crysis2,Crysis3,DeltaForce,DeadSpace2,DeadSpace3,Dirt3,DOOM3,DragonAge2,EmpireEarth,EveOnline,Everquest,Everquest2,FarCry,FarCry2,FarCry3,GunZOnline,HalfLife,LeagueofLegends,Lineage2,MassEffect3,MechwarriorOnline,Minecraft,OperationFlashpointDR,PlanetSide,PlanetSide2,QuakeIII,QuakeIV,StarWarsTOR,TigerWoods2004PS2,TribesAscend,UnrealTournament,WolfensteinEnemyTerritory,WorldOfWarcraft + true + ezshaper->step6->enable + + + Next + submit + + + Enable/Disable specific game consoles and services + listtopic + + + BattleNET + checkbox + Battle.net - Virtually every game from Blizzard publishing should match this. This includes the following game series: Starcraft, Diablo, Warcraft. Guild Wars also uses this port. + ezshaper->step6->battlenet + + + EAOrigin + checkbox + EA Origin Client - Some PC games by EA use this. + ezshaper->step6->eaorigin + + + GameForWindowsLive + checkbox + Games for Windows Live + ezshaper->step6->gamesforwindowslive + + + PlayStationConsoles + checkbox + PlayStation Consoles - This should cover all ports required for the Playstation 4, Playstation, PS Vita + ezshaper->step6->playstationconsoles + + + Steam + checkbox + Steam Game Client (Includes: America's Army 3, Counter-Strike: Source, Counter-Strike: Global Offensive, Half-Life 2, COD: Black Ops Series, Borderlands 2, Natural Selection 2, Left 4 Dead Series, Portal 2 and many other games on the Steam) + ezshaper->step6->steam + + + WiiConsoles + checkbox + Wii Consoles - Wii, Wii U, DS and 3DS + ezshaper->step6->wiiconsoles + + + XboxConsoles + checkbox + Xbox Consoles - Xbox 360 and Xbox One + ezshaper->step6->xboxconsoles + + + Enable/Disable specific games + listtopic + + + ARMA2 + checkbox + ARMA 2 + ezshaper->step6->arma2 + + + ARMA3 + checkbox + ARMA 3 + ezshaper->step6->arma3 + + + Battlefield2 + checkbox + Battlefield 2 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->battlefield2 + + + Battlefield3 + checkbox + Battlefield 3 and 4 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->battlefield3 + + + BattlefieldBC2 + checkbox + Battlefield: Bad Company 2 + ezshaper->step6->battlefieldbc2 + + + Borderlands + checkbox + Borderlands + ezshaper->step6->borderlands + + + CallOfDuty + checkbox + Call Of Duty (United Offensive) + ezshaper->step6->callofduty + + + Counterstrike + checkbox + Counterstrike. The ultimate 1st person shooter. + ezshaper->step6->counterstrike + + + Crysis2 + checkbox + Crysis 2 + ezshaper->step6->crysis2 + + + Crysis3 + checkbox + Crysis 3 + ezshaper->step6->crysis3 + + + DeadSpace2 + checkbox + Dead Space2 - this game uses a HUGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->deadspace2 + + + DeadSpace3 + checkbox + Dead Space 3 + ezshaper->step6->deadspace3 + + + DeltaForce + checkbox + Delta Force + ezshaper->step6->deltaforce + + + Dirt3 + checkbox + Dirt 3 + ezshaper->step6->dirt3 + + + DOOM3 + checkbox + DOOM3 + ezshaper->step6->doom3 + + + DragonAge2 + checkbox + Dragon Age 2 + ezshaper->step6->dragonage2 + + + EmpireEarth + checkbox + Empire Earth + ezshaper->step6->empireearth + + + EveOnline + checkbox + EVE Online + ezshaper->step6->eveonline + + + Everquest + checkbox + Everquest - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->everquest + + + Everquest2 + checkbox + Everquest II + ezshaper->step6->everquest2 + + + FarCry + checkbox + Far Cry + ezshaper->step6->farcry + + + FarCry2 + checkbox + Far Cry 2 + ezshaper->step6->farcry2 + + + FarCry3 + checkbox + Far Cry 3 + ezshaper->step6->farcry3 + + + GunZOnline + checkbox + GunZ Online + ezshaper->step6->gunzonline + + + HalfLife + checkbox + Half-Life + ezshaper->step6->halflife + + + LeagueofLegends + checkbox + League of Legends - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->leagueoflegends + + + Lineage2 + checkbox + Lineage II + ezshaper->step6->lineage2 + + + MassEffect3 + checkbox + Mass Effect 3 + ezshaper->step6->masseffect3 + + + MechwarriorOnline + checkbox + MechWarrior: Online - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->mechwarrioronline + + + Minecraft + checkbox + Minecraft + ezshaper->step6->minecraft + + + PlanetSide + checkbox + PlanetSide + ezshaper->step6->planetside + + + PlanetSide2 + checkbox + PlanetSide 2 + ezshaper->step6->planetside2 + + + OperationFlashpointDR + checkbox + Operation Flashpoint: Dragon Rising + ezshaper->step6->operationflashpoint-dr + + + QuakeIII + checkbox + Quake III + ezshaper->step6->quakeiii + + + QuakeIV + checkbox + Quake IV + ezshaper->step6->quakeiv + + + StarWarsTOR + checkbox + StarWars: The Old Republic - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + ezshaper->step6->starwarstor + + + TigerWoods2004PS2 + checkbox + Tiger Woods 2004 for PS2 + ezshaper->step6->tigerwoods2004ps2 + + + TribesAscend + checkbox + Tribes Ascend + ezshaper->step6->tribesascend + + + UnrealTournament + checkbox + Unreal Tournament Series + ezshaper->step6->unrealtournament + + + WolfensteinEnemyTerritory + checkbox + Wolfenstein Enemy Territory + ezshaper->step6->wolfet + + + WorldOfWarcraft + checkbox + World of Warcraft + ezshaper->step6->wow + + + Next + submit + + + /usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc + + + 7 + pfSense Traffic Shaper Wizard + true + Raise or lower other Applications + + + Enable + checkbox + Other networking protocols + This will help raise or lower the priority of other protocols higher than most traffic. + AppleRemoteDesktop,MSRDP,PCAnywhere,VNC,AIM,Facetime,GoogleHangouts,ICQ,IRC,Jabber,MSN,TeamSpeak,TeamSpeak3,Ventrilo,PPTP,IPSEC,iTunesRadio,StreamingMP3,RTSP,HTTP,IMAP,LotusNotes,POP3,SMTP,BattleNETDownloader,SteamDownloader,APNS,AppleMobileSync,CrashPlan,CVSUP,DNS,GIT,HBCI,ICMP,MySqlServer,NNTP,Slingbox,SMB,SNMP,Subversion + true + ezshaper->step7->enable + + + Next + submit + + + Remote Service / Terminal emulation + listtopic + + + AppleRemoteDesktop + ezshaper->step7->appleremotedesktop + select + + + + + + Apple Remote Desktop + + + MSRDP + select + ezshaper->step7->msrdp + + + + + + Microsoft Remote Desktop Protocol + + + PCAnywhere + ezshaper->step7->pcanywhere + select + + + + + + Symantec PC Anywhere + + + VNC + ezshaper->step7->vnc + select + + + + + + Virtual Network Computing + + + Messengers + listtopic + + + AIM + ezshaper->step7->aolinstantmessenger + select + + + + + + AOL Instant Messenger + + + Facetime + ezshaper->step7->facetime + select + + + + + + Facetime + + + ICQ + ezshaper->step7->icq + select + + + + + + ICQ + + + IRC + select + ezshaper->step7->irc + + + + + + Internet Relay Chat + + + Jabber + select + ezshaper->step7->jabber + + + + + + Jabber instant messanger + + + GoogleHangouts + ezshaper->step7->googlehangouts + select + + + + + + Google Hangouts + + + MSN + ezshaper->step7->msnmessenger + select + + + + + + MSN Messenger + + + Teamspeak + ezshaper->step7->teamspeak + select + + + + + + TeamSpeak + + + Teamspeak3 + ezshaper->step7->teamspeak3 + select + + + + + + TeamSpeak 3 + + + Ventrilo + ezshaper->step7->ventrilo + select + + + + + + Ventrilo + + + VPN + listtopic + + + PPTP + select + ezshaper->step7->pptp + + + + + + Microsoft Point to Point tunneling protocol + + + IPSEC + select + ezshaper->step7->ipsec + + + + + + IPSEC VPN traffic + + + Multimedia/Streaming + listtopic + + + iTunesRadio + select + ezshaper->step7->itunesradio + + + + + + iTunes Radio - this rule uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic. + + + StreamingMP3 + select + ezshaper->step7->streamingmp3 + + + + + + Streaming Media + + + RTSP + ezshaper->step7->rtsp + select + + + + + + RealTime streaming protocol + + + Web + listtopic + + + HTTP + select + ezshaper->step7->http + + + + + + HTTP and HTTPS aka Web Traffic + + + Mail + listtopic + + + SMTP + select + ezshaper->step7->smtp + + + + + + Mail Protocol + + + POP3 + select + ezshaper->step7->pop3 + + + + + + POP3 Protocol + + + IMAP + ezshaper->step7->imap + select + + + + + + IMAP Protocol + + + LotusNotes + ezshaper->step7->lotusnotes + select + + + + + + Lotus Notes + + + Game Downloader + listtopic + + + BattleNetDownloader + select + ezshaper->step7->battlenetdownloader + + + + + + Battle.NET Downloader + + + SteamDownloader + select + ezshaper->step7->steamdownloader + + + + + + Steam Downloader + + + Miscellaneous + listtopic + + + APNS + select + ezshaper->step7->apns + + + + + + Apple Push Notification Service + + + AppleMobileSync + select + ezshaper->step7->applemobilesync + + + + + + Apple Mobile Sync + + + CrashPlan + ezshaper->step7->crashplan + select + + + + + + CrashPlan + + + CVSUP + ezshaper->step7->cvsup + select + + + + + + CVSUP + + + DNS + select + ezshaper->step7->dns + + + + + + Domain Name Services + + + Git + ezshaper->step7->git + select + + + + + + Git Server + + + HBCI + ezshaper->step7->hbci + select + + + + + + HBCI + + + ICMP + ezshaper->step7->icmp + select + + + + + + ICMP Protocol + + + SMB + ezshaper->step7->smb + select + + + + + + Microsoft SMB Protocol and friends + + + SNMP + ezshaper->step7->snmp + select + + + + + + Simple Network Management Protocol + + + MySQLServer + ezshaper->step7->mysqlserver + select + + + + + + MySQL Server + + + NNTP + ezshaper->step7->nntp + select + + + + + + Internet News + + + Slingbox + ezshaper->step7->slingbox + select + + + + + + Slingbox + + + Subversion + ezshaper->step7->subversion + select + + + + + + Subversion Server + + + Next + submit + + + /usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc + + + 8 + pfSense Traffic Shaper Wizard + + Reload profile notice + listtopic + + After pressing Finish the system will load the new profile.<br/> Please note that this may take a moment.<br/> Also note that the traffic shaper is stateful meaning that only new connections will be shaped.<br/> If this is an issue please reset the state table after loading the profile.<br/> + + + Finish + submit + + + step8_stepsubmitphpaction(); + /usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc + + diff --git a/usr/local/www/xmlrpc.php b/usr/local/www/xmlrpc.php new file mode 100755 index 000000000..93733cc87 --- /dev/null +++ b/usr/local/www/xmlrpc.php @@ -0,0 +1,560 @@ + array( + "true" => new XML_RPC_Response(new XML_RPC_Value(true, $XML_RPC_Boolean)), + "false" => new XML_RPC_Response(new XML_RPC_Value(false, $XML_RPC_Boolean)), + "authfail" => new XML_RPC_Response(new XML_RPC_Value(gettext("Authentication failed"), $XML_RPC_String)) + ) +); + +/* + * pfSense XMLRPC errors + * $XML_RPC_erruser + 1 = Auth failure + */ +$XML_RPC_erruser = 200; + +/* EXPOSED FUNCTIONS */ +$exec_php_doc = gettext("XMLRPC wrapper for eval(). This method must be called with two parameters: a string containing the local system\'s password followed by the PHP code to evaluate."); +$exec_php_sig = array( + array( + $XML_RPC_Boolean, // First signature element is return value. + $XML_RPC_String, // password + $XML_RPC_String, // shell code to exec + ) +); + +function xmlrpc_authfail() { + log_auth("webConfigurator authentication error for 'admin' from {$_SERVER['REMOTE_ADDR']}"); +} + +function exec_php_xmlrpc($raw_params) { + global $config, $xmlrpc_g; + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + $exec_php = $params[0]; + eval($exec_php); + if($toreturn) { + $response = XML_RPC_encode($toreturn); + return new XML_RPC_Response($response); + } else + return $xmlrpc_g['return']['true']; +} + +/*****************************/ +$exec_shell_doc = gettext("XMLRPC wrapper for mwexec(). This method must be called with two parameters: a string containing the local system\'s password followed by an shell command to execute."); +$exec_shell_sig = array( + array( + $XML_RPC_Boolean, // First signature element is return value. + $XML_RPC_String, // password + $XML_RPC_String, // shell code to exec + ) +); + +function exec_shell_xmlrpc($raw_params) { + global $config, $xmlrpc_g; + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + $shell_cmd = $params[0]; + mwexec($shell_cmd); + + return $xmlrpc_g['return']['true']; +} + +/*****************************/ +$backup_config_section_doc = gettext("XMLRPC wrapper for backup_config_section. This method must be called with two parameters: a string containing the local system\'s password followed by an array containing the keys to be backed up."); +$backup_config_section_sig = array( + array( + $XML_RPC_Struct, // First signature element is return value. + $XML_RPC_String, + $XML_RPC_Array + ) +); + +function backup_config_section_xmlrpc($raw_params) { + global $config, $xmlrpc_g; + + if (xmlrpc_loop_detect()) { + log_error("Disallowing CARP sync loop"); + return; + } + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + $val = array_intersect_key($config, array_flip($params[0])); + + return new XML_RPC_Response(XML_RPC_encode($val)); +} + +/*****************************/ +$restore_config_section_doc = gettext("XMLRPC wrapper for restore_config_section. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion."); +$restore_config_section_sig = array( + array( + $XML_RPC_Boolean, + $XML_RPC_String, + $XML_RPC_Struct + ) +); + +function restore_config_section_xmlrpc($raw_params) { + global $config, $xmlrpc_g; + + $old_config = $config; + + if (xmlrpc_loop_detect()) { + log_error("Disallowing CARP sync loop"); + return; + } + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + + // Some sections should just be copied and not merged or we end + // up unable to sync the deletion of the last item in a section + $sync_full = array('ipsec', 'aliases', 'wol', 'load_balancer', 'openvpn', 'cert', 'ca', 'crl', 'schedules', 'filter', 'nat', 'dhcpd', 'dhcpv6'); + $sync_full_done = array(); + foreach ($sync_full as $syncfull) { + if (isset($params[0][$syncfull])) { + $config[$syncfull] = $params[0][$syncfull]; + unset($params[0][$syncfull]); + $sync_full_done[] = $syncfull; + } + } + + $vipbackup = array(); + $oldvips = array(); + if (isset($params[0]['virtualip'])) { + if (is_array($config['virtualip']['vip'])) { + foreach ($config['virtualip']['vip'] as $vipindex => $vip) { + if ($vip['mode'] == "carp") + $oldvips["{$vip['interface']}_vip{$vip['vhid']}"] = "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}"; + else if ($vip['mode'] == "ipalias" && (strstr($vip['interface'], "_vip") || strstr($vip['interface'], "lo0"))) + $oldvips[$vip['subnet']] = "{$vip['interface']}{$vip['subnet']}{$vip['subnet_bits']}"; + else if (($vip['mode'] == "ipalias" || $vip['mode'] == 'proxyarp') && !(strstr($vip['interface'], "_vip") || strstr($vip['interface'], "lo0"))) + $vipbackup[] = $vip; + } + } + } + + // For vip section, first keep items sent from the master + $config = array_merge_recursive_unique($config, $params[0]); + + /* Then add ipalias and proxyarp types already defined on the backup */ + if (is_array($vipbackup) && !empty($vipbackup)) { + if (!is_array($config['virtualip'])) + $config['virtualip'] = array(); + if (!is_array($config['virtualip']['vip'])) + $config['virtualip']['vip'] = array(); + foreach ($vipbackup as $vip) + array_unshift($config['virtualip']['vip'], $vip); + } + + /* Log what happened */ + $mergedkeys = implode(",", array_merge(array_keys($params[0]), $sync_full_done)); + write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."),$mergedkeys)); + + /* + * The real work on handling the vips specially + * This is a copy of intefaces_vips_configure with addition of not reloading existing/not changed carps + */ + if (isset($params[0]['virtualip']) && is_array($config['virtualip']) && is_array($config['virtualip']['vip'])) { + $carp_setuped = false; + $anyproxyarp = false; + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['mode'] == "carp" && isset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"])) { + if ($oldvips["{$vip['interface']}_vip{$vip['vhid']}"] == "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}") { + if (does_vip_exist($vip)) { + unset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"]); + continue; // Skip reconfiguring this vips since nothing has changed. + } + } + unset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"]); + } else if ($vip['mode'] == "ipalias" && strstr($vip['interface'], "_vip") && isset($oldvips[$vip['subnet']])) { + if ($oldvips[$vip['subnet']] == "{$vip['interface']}{$vip['subnet']}{$vip['subnet_bits']}") { + if (does_vip_exist($vip)) { + unset($oldvips[$vip['subnet']]); + continue; // Skip reconfiguring this vips since nothing has changed. + } + } + unset($oldvips[$vip['subnet']]); + } + + switch ($vip['mode']) { + case "proxyarp": + $anyproxyarp = true; + break; + case "ipalias": + interface_ipalias_configure($vip); + break; + case "carp": + if ($carp_setuped == false) + $carp_setuped = true; + interface_carp_configure($vip); + break; + } + } + /* Cleanup remaining old carps */ + foreach ($oldvips as $oldvipif => $oldvippar) { + $oldvipif = get_real_interface($oldvippar['interface']); + if (!empty($oldvipif)) + pfSense_interface_deladdress($oldvipif, $oldvipar['subnet']); + } + if ($carp_setuped == true) + interfaces_carp_setup(); + if ($anyproxyarp == true) + interface_proxyarp_configure(); + } + + if (isset($old_config['ipsec']['enable']) !== isset($config['ipsec']['enable'])) + vpn_ipsec_configure(); + + unset($old_config); + + return $xmlrpc_g['return']['true']; +} + +/*****************************/ +$merge_config_section_doc = gettext("XMLRPC wrapper for merging package sections. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion."); +$merge_config_section_sig = array( + array( + $XML_RPC_Boolean, + $XML_RPC_String, + $XML_RPC_Struct + ) +); + +function merge_installedpackages_section_xmlrpc($raw_params) { + global $config, $xmlrpc_g; + + if (xmlrpc_loop_detect()) { + log_error("Disallowing CARP sync loop"); + return; + } + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + $config['installedpackages'] = array_merge($config['installedpackages'], $params[0]); + $mergedkeys = implode(",", array_keys($params[0])); + write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."),$mergedkeys)); + + return $xmlrpc_g['return']['true']; +} + +/*****************************/ +$merge_config_section_doc = gettext("XMLRPC wrapper for merge_config_section. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion."); +$merge_config_section_sig = array( + array( + $XML_RPC_Boolean, + $XML_RPC_String, + $XML_RPC_Struct + ) +); + +function merge_config_section_xmlrpc($raw_params) { + global $config, $xmlrpc_g; + + if (xmlrpc_loop_detect()) { + log_error("Disallowing CARP sync loop"); + return; + } + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + $config_new = array_overlay($config, $params[0]); + $config = $config_new; + $mergedkeys = implode(",", array_keys($params[0])); + write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."), $mergedkeys)); + return $xmlrpc_g['return']['true']; +} + +/*****************************/ +$filter_configure_doc = gettext("Basic XMLRPC wrapper for filter_configure. This method must be called with one paramater: a string containing the local system\'s password. This function returns true upon completion."); +$filter_configure_sig = array( + array( + $XML_RPC_Boolean, + $XML_RPC_String + ) +); + +function filter_configure_xmlrpc($raw_params) { + global $xmlrpc_g, $config; + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + filter_configure(); + system_routing_configure(); + setup_gateways_monitor(); + relayd_configure(); + require_once("openvpn.inc"); + openvpn_resync_all(); + if (isset($config['dnsmasq']['enable'])) + services_dnsmasq_configure(); + elseif (isset($config['unbound']['enable'])) + services_unbound_configure(); + else + # Both calls above run services_dhcpd_configure(), then we just + # need to call it when them are not called to avoid restart dhcpd + # twice, as described on ticket #3797 + services_dhcpd_configure(); + local_sync_accounts(); + + return $xmlrpc_g['return']['true']; +} + +/*****************************/ +$carp_configure_doc = gettext("Basic XMLRPC wrapper for configuring CARP interfaces."); +$carp_configure_sig = array( + array( + $XML_RPC_Boolean, + $XML_RPC_String + ) +); + +function interfaces_carp_configure_xmlrpc($raw_params) { + global $xmlrpc_g; + + if (xmlrpc_loop_detect()) { + log_error("Disallowing CARP sync loop"); + return; + } + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + interfaces_vips_configure(); + + return $xmlrpc_g['return']['true']; +} + +/*****************************/ +$check_firmware_version_doc = gettext("Basic XMLRPC wrapper for check_firmware_version. This function will return the output of check_firmware_version upon completion."); + +$check_firmware_version_sig = array( + array( + $XML_RPC_String, + $XML_RPC_String + ) +); + +function check_firmware_version_xmlrpc($raw_params) { + global $xmlrpc_g, $XML_RPC_String; + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + return new XML_RPC_Response(new XML_RPC_Value(check_firmware_version(false), $XML_RPC_String)); +} + +/*****************************/ +$pfsense_firmware_version_doc = gettext("Basic XMLRPC wrapper for check_firmware_version. This function will return the output of check_firmware_version upon completion."); + +$pfsense_firmware_version_sig = array ( + array ( + $XML_RPC_Struct, + $XML_RPC_String + ) +); + +function pfsense_firmware_version_xmlrpc($raw_params) { + global $xmlrpc_g; + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + return new XML_RPC_Response(XML_RPC_encode(host_firmware_version())); +} + +/*****************************/ +$reboot_doc = gettext("Basic XMLRPC wrapper for rc.reboot."); +$reboot_sig = array(array($XML_RPC_Boolean, $XML_RPC_String)); +function reboot_xmlrpc($raw_params) { + global $xmlrpc_g; + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + mwexec_bg("/etc/rc.reboot"); + + return $xmlrpc_g['return']['true']; +} + +/*****************************/ +$get_notices_sig = array( + array( + $XML_RPC_Array, + $XML_RPC_String + ), + array( + $XML_RPC_Array + ) +); + +function get_notices_xmlrpc($raw_params) { + global $g, $xmlrpc_g; + + $params = xmlrpc_params_to_php($raw_params); + if(!xmlrpc_auth($params)) { + xmlrpc_authfail(); + return $xmlrpc_g['return']['authfail']; + } + if(!function_exists("get_notices")) + require("notices.inc"); + if(!$params) { + $toreturn = get_notices(); + } else { + $toreturn = get_notices($params); + } + $response = new XML_RPC_Response(XML_RPC_encode($toreturn)); + + return $response; +} + +$xmlrpclockkey = lock('xmlrpc', LOCK_EX); + +/*****************************/ +$server = new XML_RPC_Server( + array( + 'pfsense.exec_shell' => array('function' => 'exec_shell_xmlrpc', + 'signature' => $exec_shell_sig, + 'docstring' => $exec_shell_doc), + 'pfsense.exec_php' => array('function' => 'exec_php_xmlrpc', + 'signature' => $exec_php_sig, + 'docstring' => $exec_php_doc), + 'pfsense.filter_configure' => array('function' => 'filter_configure_xmlrpc', + 'signature' => $filter_configure_sig, + 'docstring' => $filter_configure_doc), + 'pfsense.interfaces_carp_configure' => array('function' => 'interfaces_carp_configure_xmlrpc', + 'docstring' => $carp_configure_sig), + 'pfsense.backup_config_section' => array('function' => 'backup_config_section_xmlrpc', + 'signature' => $backup_config_section_sig, + 'docstring' => $backup_config_section_doc), + 'pfsense.restore_config_section' => array('function' => 'restore_config_section_xmlrpc', + 'signature' => $restore_config_section_sig, + 'docstring' => $restore_config_section_doc), + 'pfsense.merge_config_section' => array('function' => 'merge_config_section_xmlrpc', + 'signature' => $merge_config_section_sig, + 'docstring' => $merge_config_section_doc), + 'pfsense.merge_installedpackages_section_xmlrpc' => array('function' => 'merge_installedpackages_section_xmlrpc', + 'signature' => $merge_config_section_sig, + 'docstring' => $merge_config_section_doc), + 'pfsense.check_firmware_version' => array('function' => 'check_firmware_version_xmlrpc', + 'signature' => $check_firmware_version_sig, + 'docstring' => $check_firmware_version_doc), + 'pfsense.host_firmware_version' => array('function' => 'pfsense_firmware_version_xmlrpc', + 'signature' => $pfsense_firmware_version_sig, + 'docstring' => $host_firmware_version_doc), + 'pfsense.reboot' => array('function' => 'reboot_xmlrpc', + 'signature' => $reboot_sig, + 'docstring' => $reboot_doc), + 'pfsense.get_notices' => array('function' => 'get_notices_xmlrpc', + 'signature' => $get_notices_sig) + ) +); + +unlock($xmlrpclockkey); + + function array_overlay($a1,$a2) + { + foreach($a1 as $k => $v) { + if(!array_key_exists($k,$a2)) continue; + if(is_array($v) && is_array($a2[$k])){ + $a1[$k] = array_overlay($v,$a2[$k]); + }else{ + $a1[$k] = $a2[$k]; + } + } + return $a1; + } + +?> diff --git a/usr/root/.hushlogin b/usr/root/.hushlogin new file mode 100644 index 000000000..e69de29bb diff --git a/usr/root/.profile b/usr/root/.profile new file mode 100644 index 000000000..700597a4e --- /dev/null +++ b/usr/root/.profile @@ -0,0 +1,5 @@ +# Detect interactive logins and display the shell +if [ -n "${SSH_TTY}" -o "${TERM}" = "cons25" ]; then + /etc/rc.initial + exit +fi diff --git a/usr/root/.shrc b/usr/root/.shrc new file mode 100644 index 000000000..700597a4e --- /dev/null +++ b/usr/root/.shrc @@ -0,0 +1,5 @@ +# Detect interactive logins and display the shell +if [ -n "${SSH_TTY}" -o "${TERM}" = "cons25" ]; then + /etc/rc.initial + exit +fi diff --git a/usr/root/.tcshrc b/usr/root/.tcshrc new file mode 100644 index 000000000..cd20f2dcc --- /dev/null +++ b/usr/root/.tcshrc @@ -0,0 +1,21 @@ +set prompt="%{\033[0;1;33m%}[%{\033[0;1;37m%}`cat /etc/version`%{\033[0;1;33m%}]%{\033[0;1;33m%}%B[%{\033[0;1;37m%}%n%{\033[0;1;31m%}@%{\033[0;1;37m%}%M%{\033[0;1;33m%}]%{\033[0;1;32m%}%b%/%{\033[0;1;33m%}(%{\033[0;1;37m%}%h%{\033[0;1;33m%})%{\033[0;1;36m%}%{\033[0;1;31m%}:%{\033[0;0;0m%} " +set autologout="0" +set autolist set color set colorcat +setenv CLICOLOR "true" +setenv LSCOLORS "exfxcxdxbxegedabagacad" +if ($term == "xterm" || $term == "vt100" || $term == "vt102" || $term == "vt220" || $term !~ "con*") then + bindkey "\e[2~" overwrite-mode # Ins + bindkey "\e[3~" delete-char # Del + + bindkey "\e[1~" beginning-of-line # Home vt + bindkey "\e[4~" end-of-line # End vt + + bindkey "\eOH" beginning-of-line # Home vt220 + bindkey "\eOF" end-of-line # End vt220 + + bindkey "\e[H" beginning-of-line # Home kvt + bindkey "\e[F" end-of-line # End kvt + + bindkey "\e[7~" beginning-of-line # Home rxvt/konsole + bindkey "\e[8~" end-of-line # End rxvt/konsole +endif diff --git a/usr/sbin/athctrl.sh b/usr/sbin/athctrl.sh new file mode 100755 index 000000000..6ba35ff01 --- /dev/null +++ b/usr/sbin/athctrl.sh @@ -0,0 +1,41 @@ +#!/bin/sh +# +# Set the IFS parameters for an interface configured for +# point-to-point use at a specific distance. Based on a +# program by Gunter Burchardt. +# +DEV=ath0 +d=0 + +usage() +{ + echo "Usage: $0 [-i athX] [-d meters]" + exit 2 +} + +args=`getopt d:i: $*` +test $? -ne 0 && usage + +set -- $args +for i; do + case "$i" in + -i) DEV="$2"; shift; shift;; + -d) d="$2"; shift; shift;; + --) shift; break; + esac +done + +test $d -eq 0 && usage + +slottime=`expr 9 + \( $d / 300 \)` +if expr \( $d % 300 \) != 0 >/dev/null 2>&1; then + slottime=`expr $slottime + 1` +fi +timeout=`expr $slottime \* 2 + 3` + +printf "Setup IFS parameters on interface ${DEV} for %i meter p-2-p link\n" $d +ATHN=`echo $DEV | sed 's/ath//'` +sysctl dev.ath.$ATHN.slottime=$slottime +sysctl dev.ath.$ATHN.acktimeout=$timeout +sysctl dev.ath.$ATHN.ctstimeout=$timeout + diff --git a/usr/sbin/dhclient-script b/usr/sbin/dhclient-script new file mode 100755 index 000000000..11ce35b59 --- /dev/null +++ b/usr/sbin/dhclient-script @@ -0,0 +1,407 @@ +#!/bin/sh +# $Id$ +# $OpenBSD: dhclient-script,v 1.6 2004/05/06 18:22:41 claudio Exp $ +# $FreeBSD: src/sbin/dhclient/dhclient-script,v 1.4 2005/06/10 03:41:18 brooks Exp $ +# +# Copyright (c) 2003 Kenneth R Westerback +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +NETSTAT=/usr/bin/netstat +GREP=/usr/bin/grep +AWK=/usr/bin/awk +HOSTNAME=/bin/hostname +GREP=/usr/bin/grep +ROUTE=/sbin/route +SED=/usr/bin/sed +ARP=/usr/sbin/arp +IFCONFIG=/sbin/ifconfig +PFCTL=/sbin/pfctl + +LOCALHOST=127.0.0.1 + +if [ -x /usr/bin/logger ]; then + LOGGER="/usr/bin/logger -s -p user.notice -t dhclient" +else + LOGGER="echo" +fi + +# +# Helper functions that implement common actions. +# + +check_hostname() { + current_hostname=`$HOSTNAME` + if [ -z "$current_hostname" ] || \ + [ "$current_hostname" = "$old_host_name" -a \ + "$new_hostname" != "$old_host_name" ]; then + $LOGGER "New Hostname ($interface): $new_host_name" + $HOSTNAME $new_host_name + fi +} + +arp_flush() { + $ARP -an -i $interface | \ + $SED -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' | \ + /bin/sh >/dev/null 2>&1 +} + +delete_old_states() { + $LOGGER "Starting delete_old_states()" + _FLUSHED=0 + # If the IP changed, remove states from the old one + if [ -f /var/db/${interface}_ip ]; then + OLD_IP=`cat /var/db/${interface}_ip` + $LOGGER "Comparing IPs: Old: ${OLD_IP} New: ${new_ip_address}" + if [ -n "${OLD_IP}" ] && [ "${OLD_IP}" != "${new_ip_address}" ]; then + $LOGGER "Removing states from old IP '${OLD_IP}' (new IP '${new_ip_address}')" + ${PFCTL} -i $interface -Fs + ${PFCTL} -K ${OLD_IP}/32 + _FLUSHED=1 + fi + fi + # Delete states through old gateway if it's not the same + OLD_ROUTER="" + if [ -n "${old_routers}" ]; then + OLD_ROUTER=$old_routers + elif [ -f /tmp/${interface}_router ]; then + OLD_ROUTER=`cat /tmp/${interface}_router` + fi + if [ ${_FLUSHED} -eq 0 -a -n "${OLD_ROUTER}" ]; then + $LOGGER "Comparing Routers: Old: ${OLD_ROUTER} New: ${new_routers}" + if [ "${OLD_ROUTER}" != "${new_routers}" ]; then + $LOGGER "Removing states through old gateway '${OLD_ROUTER}' (new gateway '${new_routers}')" + ${PFCTL} -i $interface -Fs + fi + fi +} + +delete_old_address() { + /bin/rm -f /var/db/${interface}_ip + $IFCONFIG $interface inet -alias $old_ip_address $medium +} + +add_new_address() { + + $LOGGER "Starting add_new_address()" + + $LOGGER "ifconfig $interface inet $new_ip_address netmask $new_subnet_mask broadcast $new_broadcast_address $medium" + + $IFCONFIG $interface \ + inet $new_ip_address \ + netmask $new_subnet_mask \ + broadcast $new_broadcast_address \ + $medium + $IFCONFIG $interface setfirst $new_ip_address + + $LOGGER "New IP Address ($interface): $new_ip_address" + $LOGGER "New Subnet Mask ($interface): $new_subnet_mask" + $LOGGER "New Broadcast Address ($interface): $new_broadcast_address" + $LOGGER "New Routers ($interface): $new_routers" + + + # This is necessary otherwise apinger will try to ping all 1s address + if [ -n "$new_routers" ] && [ "$new_routers" != "255.255.255.255" ]; then + echo $new_routers > /tmp/${interface}_router + fi + echo $new_ip_address > /var/db/${interface}_ip +} + +delete_old_alias() { + if [ -n "$alias_ip_address" ]; then + $IFCONFIG $interface inet -alias $alias_ip_address > /dev/null 2>&1 + $ROUTE delete $alias_ip_address $LOCALHOST > /dev/null 2>&1 + fi +} + +add_new_alias() { + if [ -n "$alias_ip_address" ]; then + $IFCONFIG $interface inet alias $alias_ip_address netmask \ + $alias_subnet_mask + $ROUTE add $alias_ip_address $LOCALHOST + fi +} + +fill_classless_routes() { + set $1 + while [ $# -ge 5 ]; do + if [ $1 -eq 0 ]; then + route="default" + elif [ $1 -le 8 ]; then + route="$2.0.0.0/$1" + shift + elif [ $1 -le 16 ]; then + route="$2.$3.0.0/$1" + shift; shift + elif [ $1 -le 24 ]; then + route="$2.$3.$4.0/$1" + shift; shift; shift + else + route="$2.$3.$4.$5/$1" + shift; shift; shift; shift + fi + shift + router="$1.$2.$3.$4" + classless_routes="$classless_routes $route $router" + shift; shift; shift; shift + done +} + +delete_old_routes() { + $LOGGER "Deleting old routes" + + if [ -n "$old_classless_routes" ]; then + fill_classless_routes "$old_classless_routes" + set $classless_routes + while [ $# -gt 1 ]; do + route delete "$1" "$2" + shift; shift + done + return 0; + fi + + # Only allow the default route to be overridden if it's on our own interface + if [ -f "/tmp/${interface}_defaultgw" ]; then + for router in $old_routers; do + $ROUTE delete default $router >/dev/null 2>&1 + /bin/rm -f /tmp/${interface}_router + done + fi + + if [ -n "$old_static_routes" ]; then + set $old_static_routes + while [ $# -gt 1 ]; do + $ROUTE delete "$1" "$2" + shift; shift + /bin/rm -f /tmp/${interface}_router + done + fi + + arp_flush +} + +add_new_routes() { + $LOGGER "Adding new routes to interface: $interface" + + # RFC 3442: If the DHCP server returns both a Classless Static + # Routes option and a Router option, the DHCP client MUST ignore + # the Router option. + # + # DHCP clients that support this option (Classless Static Routes) + # MUST NOT install the routes specified in the Static Routes + # option (option code 33) if both a Static Routes option and the + # Classless Static Routes option are provided. + if [ -n "$new_classless_routes" ]; then + fill_classless_routes "$new_classless_routes" + $LOGGER "New Classless Static Routes ($interface): $classless_routes" + set $classless_routes + while [ $# -gt 1 ]; do + if [ "0.0.0.0" = "$2" ]; then + route add "$1" -iface "$interface" + else + route add "$1" "$2" + fi + shift; shift + done + return + fi + + ADDED_ROUTE=no + EXISTSGW=`/bin/ls -l /tmp/*_defaultgw | /usr/bin/wc -l` + # Only allow the default route to be overridden if it's on our own interface + if [ -f "/tmp/${interface}_defaultgw" -o $EXISTSGW -eq 0 ]; then + $ROUTE delete default + for router in $new_routers; do + if [ "$new_ip_address" = "$router" -o "$router" = "255.255.255.255" ]; then + $ROUTE add default -iface $interface + echo $ROUTE add default -iface $interface | $LOGGER + # NOTE: Do not activate this for all ones address since pf(4) will try to forward packets to it. + if [ "$new_ip_address" = "$router" ]; then + echo $router > /tmp/${interface}_router + fi + else + $ROUTE add default $router + echo $ROUTE add default $router | $LOGGER + echo $router > /tmp/${interface}_router + fi + ADDED_ROUTE=yes + # 2nd and subsequent default routers error out, so explicitly + # stop processing the list after the first one. + break + done + fi + + if [ -n "$new_static_routes" ]; then + $LOGGER "New Static Routes ($interface): $new_static_routes" + set $new_static_routes + while [ $# -gt 1 ]; do + $ROUTE add $1 $2 + if [ "$ADDED_ROUTE" = "no" ]; then + echo $2 > /tmp/${interface}_router + fi + shift; shift + done + fi +} + +add_new_resolv_conf() { + $LOGGER "Creating resolv.conf" + if [ -f "/var/etc/nameserver_$interface" ]; then + # Remove old entries + for nameserver in `cat /var/etc/nameserver_$interface`; do + $ROUTE delete $nameserver >/dev/null 2>&1 + done + fi + if [ -n "$new_domain_name_servers" ]; then + /bin/rm -f /var/etc/nameserver_$interface + ALLOWOVERRIDE=`/usr/bin/grep dnsallowoverride /conf/config.xml | /usr/bin/wc -l` + for nameserver in $new_domain_name_servers; do + # Add a route to the nameserver out the correct interface + # so that mulitple wans work correctly with multiple dns + # also backup the nameserver for later route removal + if [ $ALLOWOVERRIDE -gt 0 ]; then + echo $nameserver >>/var/etc/nameserver_$interface + $ROUTE add $nameserver -iface $interface + fi + done + echo $new_domain_name >/var/etc/searchdomain_$interface + fi + + return 0 +} + +# Notify rc.newwanip of changes to an interface +notify_rc_newwanip() { + /usr/local/sbin/pfSctl -c "interface newip $interface" +} + +# +# Start of active code. +# + +# Invoke the local dhcp client enter hooks, if they exist. +if [ -f /etc/dhclient-enter-hooks ]; then + $LOGGER "dhclient-enter-hooks" + exit_status=0 + . /etc/dhclient-enter-hooks + # allow the local script to abort processing of this state + # local script must set exit_status variable to nonzero. + if [ $exit_status -ne 0 ]; then + exit $exit_status + fi +fi + +#if [ -x $ROUTE ]; then +# if_defaultroute=`$ROUTE -n get -inet default | $GREP interface | $AWK '{print $2}'` +#else +# $LOGGER "if_defaultroute" +# if_defaultroute="x" +#fi + +$LOGGER $reason +case $reason in +MEDIUM) + $IFCONFIG $interface $medium + $IFCONFIG $interface inet -alias 0.0.0.0 $medium >/dev/null 2>&1 + /bin/sleep 1 + ;; + +PREINIT) + delete_old_alias + $IFCONFIG $interface inet 0.0.0.0 netmask 0.0.0.0 broadcast 255.255.255.255 up + delete_old_states + /bin/rm -f /tmp/${interface}_router + ;; + +ARPCHECK|ARPSEND) + ;; + +BOUND|RENEW|REBIND|REBOOT) + check_hostname + changes="no" + if [ "$old_ip_address" != "$new_ip_address" ]; then + delete_old_states + fi + if [ -n "$old_ip_address" ]; then + if [ -n "$alias_ip_address" ] && \ + [ "$old_ip_address" != "$alias_ip_address" ]; then + delete_old_alias + changes="yes" + fi + if [ "$old_ip_address" != "$new_ip_address" ]; then + delete_old_address + delete_old_routes + changes="yes" + fi + fi + if [ "$reason" = BOUND ] || \ + [ "$reason" = REBOOT ] || \ + [ -z "$old_ip_address" ] || \ + [ "$old_ip_address" != "$new_ip_address" ]; then + add_new_address + add_new_routes + changes="yes" + fi + if [ -n "$alias_ip_address" ] && \ + [ "$new_ip_address" != "$alias_ip_address" ]; then + add_new_alias + changes="yes" + fi + add_new_resolv_conf + if [ "$changes" = "yes" ] ; then + notify_rc_newwanip + fi + ;; + +EXPIRE|FAIL) + delete_old_alias + delete_old_states + if [ -n "$old_ip_address" ]; then + delete_old_address + delete_old_routes + fi + ;; + +TIMEOUT) + delete_old_alias + add_new_address + /bin/sleep 1 + if [ -n "$new_routers" ]; then + $LOGGER "New Routers ($interface): $new_routers" + set "$new_routers" + if /sbin/ping -q -c 1 -t 1 "$1"; then + if [ "$new_ip_address" != "$alias_ip_address" ]; then + add_new_alias + fi + add_new_routes + if add_new_resolv_conf; then + notify_rc_newwanip + fi + fi + fi + $IFCONFIG $interface inet -alias $new_ip_address $medium + delete_old_states + delete_old_routes + ;; +esac + +# Invoke the local dhcp client exit hooks, if they exist. +if [ -f /etc/dhclient-exit-hooks ]; then + $LOGGER "dhclient-exit-hooks" + exit_status=0 + . /etc/dhclient-exit-hooks + # allow the local script to abort processing of this state + # local script must set exit_status variable to nonzero. + exit $exit_status +fi diff --git a/usr/sbin/pc-sysinstall/Makefile b/usr/sbin/pc-sysinstall/Makefile new file mode 100644 index 000000000..4705fc16e --- /dev/null +++ b/usr/sbin/pc-sysinstall/Makefile @@ -0,0 +1,5 @@ +# $FreeBSD: src/usr.sbin/pc-sysinstall/Makefile,v 1.1 2010/06/24 22:21:47 imp Exp $ +SUBDIR=backend backend-partmanager backend-query conf doc examples +SUBDIR+=pc-sysinstall + +.include diff --git a/usr/sbin/pc-sysinstall/Makefile.inc b/usr/sbin/pc-sysinstall/Makefile.inc new file mode 100644 index 000000000..a6d588121 --- /dev/null +++ b/usr/sbin/pc-sysinstall/Makefile.inc @@ -0,0 +1,3 @@ +# $FreeBSD: src/usr.sbin/pc-sysinstall/Makefile.inc,v 1.1 2010/06/27 17:14:04 imp Exp $ + +.include "../Makefile.inc" diff --git a/usr/sbin/pc-sysinstall/backend-partmanager/Makefile b/usr/sbin/pc-sysinstall/backend-partmanager/Makefile new file mode 100644 index 000000000..256b380fe --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-partmanager/Makefile @@ -0,0 +1,8 @@ +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-partmanager/Makefile,v 1.2 2010/06/25 22:35:19 imp Exp $ + +FILES= create-part.sh delete-part.sh +FILESMODE= ${BINMODE} +FILESDIR=${SHAREDIR}/pc-sysinstall/backend-partmanager +NO_OBJ= + +.include diff --git a/usr/sbin/pc-sysinstall/backend-partmanager/create-part.sh b/usr/sbin/pc-sysinstall/backend-partmanager/create-part.sh new file mode 100755 index 000000000..a68d2fb13 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-partmanager/create-part.sh @@ -0,0 +1,92 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-partmanager/create-part.sh,v 1.2 2010/06/27 16:46:11 imp Exp $ + +# Query a disk for partitions and display them +############################# + +. ${PROGDIR}/backend/functions.sh + +if [ -z "${1}" ] ; then + echo "Error: No disk specified!" + exit 1 +fi + +if [ -z "${2}" ] ; then + echo "Error: No size specified!" + exit 1 +fi + +if [ ! -e "/dev/${1}" ] ; then + echo "Error: Disk /dev/${1} does not exist!" + exit 1 +fi + +DISK="${1}" +MB="${2}" + +TOTALBLOCKS="`expr $MB \* 2048`" + + +# Lets figure out what number this slice will be +LASTSLICE="`fdisk -s /dev/${DISK} 2>/dev/null | grep -v ${DISK} | grep ':' | tail -n 1 | cut -d ':' -f 1 | tr -s '\t' ' ' | tr -d ' '`" +if [ -z "${LASTSLICE}" ] ; then + LASTSLICE="1" +else + LASTSLICE="`expr $LASTSLICE + 1`" +fi + +if [ ${LASTSLICE} -gt "4" ] ; then + echo "Error: FreeBSD MBR setups can only have a max of 4 slices" + exit 1 +fi + + +SLICENUM="${LASTSLICE}" + +# Lets get the starting block +if [ "${SLICENUM}" = "1" ] ; then + STARTBLOCK="63" +else + # Lets figure out where the prior slice ends + checkslice="`expr ${SLICENUM} - 1`" + + # Get starting block of this slice + fdisk -s /dev/${DISK} | grep -v "${DISK}:" | grep "${checkslice}:" | tr -s " " >${TMPDIR}/pfdisk + pstartblock="`cat ${TMPDIR}/pfdisk | cut -d ' ' -f 3`" + psize="`cat ${TMPDIR}/pfdisk | cut -d ' ' -f 4`" + STARTBLOCK="`expr ${pstartblock} + ${psize}`" +fi + + +# If this is an empty disk, see if we need to create a new MBR scheme for it +gpart show ${DISK} >/dev/null 2>/dev/null +if [ "$?" != "0" -a "${SLICENUM}" = "1" ] ; then + gpart create -s mbr ${DISK} +fi + +gpart add -b ${STARTBLOCK} -s ${TOTALBLOCKS} -t freebsd -i ${SLICENUM} ${DISK} +exit "$?" diff --git a/usr/sbin/pc-sysinstall/backend-partmanager/delete-part.sh b/usr/sbin/pc-sysinstall/backend-partmanager/delete-part.sh new file mode 100755 index 000000000..db08205af --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-partmanager/delete-part.sh @@ -0,0 +1,89 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-partmanager/delete-part.sh,v 1.2 2010/06/27 16:46:11 imp Exp $ + +# Delete a specified partition, takes effect immediately +######################################################## + +. ${PROGDIR}/backend/functions.sh +. ${PROGDIR}/backend/functions-disk.sh + +if [ -z "${1}" ] +then + echo "Error: No partition specified!" + exit 1 +fi + +if [ ! -e "/dev/${1}" ] +then + echo "Error: Partition /dev/${1} does not exist!" + exit 1 +fi + +PARTITION="${1}" + +# First lets figure out the partition number for the given device +################################################################## + +# Get the number of characters in this dev +CHARS="`echo $PARTITION | wc -c`" + +PARTINDEX="" + +# Lets read through backwards until we get the part number +while +z=1 +do + CHARS=`expr $CHARS - 1` + LAST_CHAR=`echo "${PARTITION}" | cut -c $CHARS` + echo "${LAST_CHAR}" | grep "^[0-9]$" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + PARTINDEX="${LAST_CHAR}${PARTINDEX}" + else + break + fi +done + +# Now get current disk we are working on +CHARS=`expr $CHARS - 1` +DISK="`echo $PARTITION | cut -c 1-${CHARS}`" + +# Make sure we have a valid disk name still +if [ ! -e "/dev/${DISK}" ] ; then + echo "Error: Disk: ${DISK} doesnt exist!" + exit 1 +fi + +echo "Running: gpart delete -i ${PARTINDEX} ${DISK}" +gpart delete -i ${PARTINDEX} ${DISK} >/dev/null 2>/dev/null + +# Check if this was the last partition and destroy the disk geom if so +get_disk_partitions "${DISK}" +if [ -z "${VAL}" ] ; then + gpart destroy ${DISK} +fi + +exit "$?" diff --git a/usr/sbin/pc-sysinstall/backend-query/Makefile b/usr/sbin/pc-sysinstall/backend-query/Makefile new file mode 100644 index 000000000..3b65d4efc --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/Makefile @@ -0,0 +1,13 @@ +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/Makefile,v 1.6 2010/08/19 05:59:27 imp Exp $ + +FILES= detect-laptop.sh detect-nics.sh detect-emulation.sh disk-info.sh \ + disk-list.sh disk-part.sh enable-net.sh get-packages.sh list-config.sh \ + list-components.sh list-mirrors.sh list-packages.sh list-rsync-backups.sh \ + list-tzones.sh query-langs.sh send-logs.sh set-mirror.sh setup-ssh-keys.sh \ + sys-mem.sh test-live.sh test-netup.sh update-part-list.sh xkeyboard-layouts.sh \ + xkeyboard-models.sh xkeyboard-variants.sh +FILESMODE= ${BINMODE} +FILESDIR=${SHAREDIR}/pc-sysinstall/backend-query +NO_OBJ= + +.include diff --git a/usr/sbin/pc-sysinstall/backend-query/detect-emulation.sh b/usr/sbin/pc-sysinstall/backend-query/detect-emulation.sh new file mode 100755 index 000000000..81f8f2637 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/detect-emulation.sh @@ -0,0 +1,41 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/detect-emulation.sh,v 1.1 2010/07/06 23:31:52 imp Exp $ + +case "$(kenv smbios.system.product)" in +VirtualBox) + echo "emulation: VIRTUALBOX" + exit 0 + ;; +VMware*) + echo "emulation: VMWARE" + exit 0 + ;; +*) + echo "emulation: NO" + exit 1 + ;; +esac diff --git a/usr/sbin/pc-sysinstall/backend-query/detect-laptop.sh b/usr/sbin/pc-sysinstall/backend-query/detect-laptop.sh new file mode 100755 index 000000000..5fdadf3d6 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/detect-laptop.sh @@ -0,0 +1,32 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/detect-laptop.sh,v 1.4 2010/07/07 00:03:06 imp Exp $ + +if devinfo | grep -q acpi_acad0; then + echo "laptop: YES" +else + echo "laptop: NO" +fi diff --git a/usr/sbin/pc-sysinstall/backend-query/detect-nics.sh b/usr/sbin/pc-sysinstall/backend-query/detect-nics.sh new file mode 100755 index 000000000..b16d1624a --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/detect-nics.sh @@ -0,0 +1,36 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/detect-nics.sh,v 1.3 2010/07/06 23:29:55 imp Exp $ + +for i in $(ifconfig -l); do + case "${i%%[0-9]*}" in + lo|fwe|fwip|plip|pfsync|pflog|tun) + continue + ;; + esac + IDENT=$(dmesg | sed -n "s/^$i: <\(.*\)>.*$/\1/p" | head -1) + echo "${i}: <$IDENT>" +done diff --git a/usr/sbin/pc-sysinstall/backend-query/disk-info.sh b/usr/sbin/pc-sysinstall/backend-query/disk-info.sh new file mode 100755 index 000000000..f64bdb8cf --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/disk-info.sh @@ -0,0 +1,60 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/disk-info.sh,v 1.6 2010/10/28 06:45:20 imp Exp $ + +# Query a disk for partitions and display them +############################################################################# + +. ${PROGDIR}/backend/functions.sh +. ${PROGDIR}/backend/functions-disk.sh + +DISK="${1}" + +[ -z "${DISK}" ] && { echo 'Error: No disk specified!'; exit 1; } +[ ! -e "/dev/${DISK}" ] && \ + { echo "Error: Disk /dev/${DISK} does not exist!"; exit 1; } + +get_disk_cyl "${DISK}" +CYLS="${VAL}" + +get_disk_heads "${DISK}" +HEADS="${VAL}" + +get_disk_sectors "${DISK}" +SECS="${VAL}" + +# Now get the disks size in MB +KB="`diskinfo -v ${1} | grep 'bytes' | cut -d '#' -f 1 | tr -s '\t' ' ' | tr -d ' '`" +MB=$(convert_byte_to_megabyte ${KB}) + +# Now get the Controller Type +CTYPE="`dmesg | grep "^${1}:" | grep "B <" | cut -d '>' -f 2 | cut -d ' ' -f 3-10`" + +echo "cylinders=${CYLS}" +echo "heads=${HEADS}" +echo "sectors=${SECS}" +echo "size=${MB}" +echo "type=${CTYPE}" diff --git a/usr/sbin/pc-sysinstall/backend-query/disk-list.sh b/usr/sbin/pc-sysinstall/backend-query/disk-list.sh new file mode 100755 index 000000000..d836a827a --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/disk-list.sh @@ -0,0 +1,103 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/disk-list.sh,v 1.5 2010/09/08 20:10:24 imp Exp $ + +ARGS=$1 +FLAGS_MD="" +FLAGS_CD="" +FLAGS_VERBOSE="" + +shift +while [ -n "$1" ] +do + case "$1" in + -m) + FLAGS_MD=1 + ;; + -v) + FLAGS_VERBOSE=1 + ;; + -c) + FLAGS_CD=1 + ;; + esac + shift +done + +# Create our device listing +SYSDISK=$(sysctl -n kern.disks) +if [ -n "${FLAGS_MD}" ] +then + MDS=`mdconfig -l` + if [ -n "${MDS}" ] + then + SYSDISK="${SYSDISK} ${MDS}" + fi +fi + +# Now loop through these devices, and list the disk drives +for i in ${SYSDISK} +do + + # Get the current device + DEV="${i}" + + # Make sure we don't find any cd devices + if [ -z "${FLAGS_CD}" ] + then + case "${DEV}" in + acd[0-9]*|cd[0-9]*|scd[0-9]*) continue ;; + esac + fi + + # Check the dmesg output for some more info about this device + NEWLINE=$(dmesg | sed -n "s/^$DEV: .*<\(.*\)>.*$/ <\1>/p" | head -n 1) + if [ -z "$NEWLINE" ]; then + NEWLINE=" " + fi + + if [ -n "${FLAGS_MD}" ] && echo "${DEV}" | grep -E '^md[0-9]+' >/dev/null 2>/dev/null + then + NEWLINE=" " + fi + + if [ -n "${FLAGS_VERBOSE}" ] + then + : + fi + + # Save the disk list + if [ ! -z "$DLIST" ] + then + DLIST="\n${DLIST}" + fi + + DLIST="${DEV}:${NEWLINE}${DLIST}" + +done + +# Echo out the found line +echo -e "$DLIST" | sort diff --git a/usr/sbin/pc-sysinstall/backend-query/disk-part.sh b/usr/sbin/pc-sysinstall/backend-query/disk-part.sh new file mode 100755 index 000000000..6e921ee70 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/disk-part.sh @@ -0,0 +1,117 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/disk-part.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +# Query a disk for partitions and display them +############################# + +. ${PROGDIR}/backend/functions.sh +. ${PROGDIR}/backend/functions-disk.sh + +if [ -z "${1}" ] +then + echo "Error: No disk specified!" + exit 1 +fi + +if [ ! -e "/dev/${1}" ] +then + echo "Error: Disk /dev/${1} does not exist!" + exit 1 +fi + +DISK="${1}" + +# Now get the disks size in MB +KB="`diskinfo -v ${1} | grep 'bytes' | cut -d '#' -f 1 | tr -s '\t' ' ' | tr -d ' '`" +MB=$(convert_byte_to_megabyte ${KB}) +TOTALSIZE="$MB" +TOTALB="`diskinfo -v ${1} | grep 'in sectors' | tr -s '\t' ' ' | cut -d ' ' -f 2`" + +gpart show ${1} >/dev/null 2>/dev/null +if [ "$?" != "0" ] ; then + # No partitions on this disk, display entire disk size and exit + echo "${1}-freemb: ${TOTALSIZE}" + echo "${1}-freeblocks: ${TOTALB}" + exit +fi + +# Display if this is GPT or MBR formatted +gpart show ${1} | grep "GPT" >/dev/null 2>/dev/null +if [ "$?" = "0" ] ; then + echo "${1}-format: GPT" + TYPE="GPT" +else + echo "${1}-format: MBR" + TYPE="MBR" +fi + +# Set some search flags +PART="0" +EXTENDED="0" +START="0" +SIZEB="0" + +# Get a listing of partitions on this disk +get_disk_partitions "${DISK}" +PARTS="${VAL}" +for curpart in $PARTS +do + + # First get the sysid / label for this partition + if [ "$TYPE" = "MBR" ] ; then + get_partition_sysid_mbr "${DISK}" "${curpart}" + echo "${curpart}-sysid: ${VAL}" + get_partition_label_mbr "${DISK}" "${curpart}" + echo "${curpart}-label: ${VAL}" + else + get_partition_label_gpt "${DISK}" "${curpart}" + echo "${curpart}-sysid: ${VAL}" + echo "${curpart}-label: ${VAL}" + fi + + # Now get the startblock, blocksize and MB size of this partition + + get_partition_startblock "${DISK}" "${curpart}" + START="${VAL}" + echo "${curpart}-blockstart: ${START}" + + get_partition_blocksize "${DISK}" "${curpart}" + SIZEB="${VAL}" + echo "${curpart}-blocksize: ${SIZEB}" + + SIZEMB=$(convert_blocks_to_megabyte ${SIZEB}) + echo "${curpart}-sizemb: ${SIZEMB}" + +done + + +# Now calculate any free space +LASTB="`expr $SIZEB + $START`" +FREEB="`expr $TOTALB - $LASTB`" +FREEMB="`expr ${FREEB} / 2048`" +echo "${1}-freemb: $FREEMB" +echo "${1}-freeblocks: $FREEB" diff --git a/usr/sbin/pc-sysinstall/backend-query/enable-net.sh b/usr/sbin/pc-sysinstall/backend-query/enable-net.sh new file mode 100755 index 000000000..339a56287 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/enable-net.sh @@ -0,0 +1,65 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/enable-net.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +# Script which enables networking with specified options +########################################################################### + +. ${PROGDIR}/backend/functions.sh +. ${PROGDIR}/conf/pc-sysinstall.conf +. ${BACKEND}/functions-networking.sh +. ${BACKEND}/functions-parse.sh + + +NIC="$1" +IP="$2" +NETMASK="$3" +DNS="$4" +GATEWAY="$5" +MIRRORFETCH="$6" + +if [ -z "${NIC}" ] +then + echo "ERROR: Usage enable-net " + exit 150 +fi + +if [ "$NIC" = "AUTO-DHCP" ] +then + enable_auto_dhcp +else + echo "Enabling NIC: $NIC" + ifconfig ${NIC} ${IP} ${NETMASK} + + echo "nameserver ${DNS}" >/etc/resolv.conf + + route add default ${GATE} +fi + +case ${MIRRORFETCH} in + ON|on|yes|YES) fetch -o /tmp/mirrors-list.txt ${MIRRORLIST} >/dev/null 2>/dev/null;; + *) ;; +esac diff --git a/usr/sbin/pc-sysinstall/backend-query/get-packages.sh b/usr/sbin/pc-sysinstall/backend-query/get-packages.sh new file mode 100755 index 000000000..74273265e --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/get-packages.sh @@ -0,0 +1,52 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/get-packages.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +# Script which lists the available packages for this release +########################################################################### + +. ${PROGDIR}/backend/functions.sh +. ${PROGDIR}/backend/functions-packages.sh + +ID=`id -u` +if [ "${ID}" -ne "0" ] +then + echo "Error: must be root!" + exit 1 +fi + +if [ ! -f "${PKGDIR}/INDEX" ] +then + get_package_index +fi + +if [ -f "${PKGDIR}/INDEX" ] +then + echo "${PKGDIR}/INDEX" + exit 0 +fi + +exit 1 diff --git a/usr/sbin/pc-sysinstall/backend-query/list-components.sh b/usr/sbin/pc-sysinstall/backend-query/list-components.sh new file mode 100755 index 000000000..e55233efa --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/list-components.sh @@ -0,0 +1,55 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/list-components.sh,v 1.3 2010/10/21 17:23:48 imp Exp $ + +# Script which lists the available components for this release +########################################################################### + +. ${PROGDIR}/backend/functions.sh + +echo "Available Components:" + +if [ -d "${COMPDIR}" ] +then + cd ${COMPDIR} + for i in `ls -d *` + do + if [ -e "${i}/component.cfg" -a -e "${i}/install.sh" -a -e "${i}/distfiles" ] + then + NAME="`grep 'name:' ${i}/component.cfg | cut -d ':' -f 2`" + DESC="`grep 'description:' ${i}/component.cfg | cut -d ':' -f 2`" + TYPE="`grep 'type:' ${i}/component.cfg | cut -d ':' -f 2`" + echo " " + echo "name: ${i}" + echo "desc:${DESC}" + echo "type:${TYPE}" + if [ -e "${i}/component.png" ] + then + echo "icon: ${COMPDIR}/${i}/component.png" + fi + fi + done +fi diff --git a/usr/sbin/pc-sysinstall/backend-query/list-config.sh b/usr/sbin/pc-sysinstall/backend-query/list-config.sh new file mode 100755 index 000000000..653203143 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/list-config.sh @@ -0,0 +1,30 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/list-config.sh,v 1.2 2010/07/13 23:47:12 imp Exp $ + +echo "branch=${FBSD_BRANCH}" +echo "arch=${FBSD_ARCH}" +exit 0 diff --git a/usr/sbin/pc-sysinstall/backend-query/list-mirrors.sh b/usr/sbin/pc-sysinstall/backend-query/list-mirrors.sh new file mode 100755 index 000000000..a4b143f9a --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/list-mirrors.sh @@ -0,0 +1,37 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/list-mirrors.sh,v 1.2 2010/07/13 23:47:12 imp Exp $ + +. ${PROGDIR}/backend/functions.sh +. ${PROGDIR}/backend/functions-ftp.sh + +# Backend script which lists all the available ftp mirrors for front-ends to display +COUNTRY="${1}" + +get_ftp_mirrors "${COUNTRY}" +show_mirrors "${VAL}" + +exit 0 diff --git a/usr/sbin/pc-sysinstall/backend-query/list-packages.sh b/usr/sbin/pc-sysinstall/backend-query/list-packages.sh new file mode 100755 index 000000000..97bec8cc7 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/list-packages.sh @@ -0,0 +1,86 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/list-packages.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +# Script which lists the available packages for this release +########################################################################### + +. ${PROGDIR}/backend/functions.sh +. ${PROGDIR}/backend/functions-packages.sh + +PACKAGE_CATEGORY="${1}" +PACKAGE_NAME="${2}" +NARGS=0 + +if [ ! -f "${PKGDIR}/INDEX" ] +then + echo "Error: please fetch package index with get-packages!" + exit 1 +fi + +if [ ! -f "${PKGDIR}/INDEX.parsed" ] +then + parse_package_index +fi + +if [ -n "${PACKAGE_CATEGORY}" ] +then + NARGS=$((NARGS+1)) +fi + +if [ -n "${PACKAGE_NAME}" ] +then + NARGS=$((NARGS+1)) +fi + +if [ "${NARGS}" -eq "0" ] +then + show_packages + +elif [ "${NARGS}" -eq "1" ] +then + + if [ "${PACKAGE_CATEGORY}" = "@INDEX@" ] + then + if [ -f "${PKGDIR}/INDEX" ] + then + echo "${PKGDIR}/INDEX" + exit 0 + else + exit 1 + fi + + else + show_packages_by_category "${PACKAGE_CATEGORY}" + fi + +elif [ "${NARGS}" -eq "2" ] +then + show_package_by_name "${PACKAGE_CATEGORY}" "${PACKAGE_NAME}" + +else + show_packages +fi diff --git a/usr/sbin/pc-sysinstall/backend-query/list-rsync-backups.sh b/usr/sbin/pc-sysinstall/backend-query/list-rsync-backups.sh new file mode 100755 index 000000000..3459528ae --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/list-rsync-backups.sh @@ -0,0 +1,70 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/list-rsync-backups.sh,v 1.2 2010/06/27 16:46:11 imp Exp $ + +# Script which lists the backups present on a server +########################################################################### + +. ${PROGDIR}/backend/functions.sh + +SSHUSER=$1 +SSHHOST=$2 +SSHPORT=$3 + +if [ -z "${SSHHOST}" -o -z "${SSHPORT}" ] +then + echo "ERROR: Usage list-rsync-backups.sh " + exit 150 +fi + +# Look for full-system backups, needs at minimum a kernel to be bootable +FINDCMD="find . -type d -maxdepth 6 -name 'kernel' | grep '/boot/kernel'" + +# Get a listing of the number of full backups saved +OLDBACKUPS=`ssh -o 'BatchMode=yes' -p ${SSHPORT} ${SSHUSER}@${SSHHOST} "${FINDCMD}"` +if [ "$?" = "0" ] +then + for i in ${OLDBACKUPS} + do + BACKPATH="`echo ${i} | sed 's|/boot/.*||g' | sed 's|^./||g'`" + if [ -z "${BACKLIST}" ] + then + BACKLIST="${BACKPATH}" + else + BACKLIST="${BACKLIST}:${BACKPATH}" + fi + done + + if [ -z "${BACKLIST}" ] + then + echo "NONE" + else + echo "$BACKLIST" + fi + +else + echo "FAILED" +fi diff --git a/usr/sbin/pc-sysinstall/backend-query/list-tzones.sh b/usr/sbin/pc-sysinstall/backend-query/list-tzones.sh new file mode 100755 index 000000000..7e4bac451 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/list-tzones.sh @@ -0,0 +1,34 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/list-tzones.sh,v 1.3 2010/10/19 15:18:40 emaste Exp $ + +# Backend script which lists all the available timezones for front-ends to display +egrep -v '^#' /usr/share/zoneinfo/zone.tab |\ + tr -s "\t" ":" |\ + cut -d ":" -f 3-4 |\ + sort + +exit 0 diff --git a/usr/sbin/pc-sysinstall/backend-query/query-langs.sh b/usr/sbin/pc-sysinstall/backend-query/query-langs.sh new file mode 100755 index 000000000..336e8ddf9 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/query-langs.sh @@ -0,0 +1,30 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/query-langs.sh,v 1.3 2010/10/22 00:10:48 imp Exp $ + +cat ${PROGDIR}/conf/avail-langs + +exit 0 diff --git a/usr/sbin/pc-sysinstall/backend-query/send-logs.sh b/usr/sbin/pc-sysinstall/backend-query/send-logs.sh new file mode 100755 index 000000000..155169cf3 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/send-logs.sh @@ -0,0 +1,83 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/send-logs.sh,v 1.2 2010/06/27 16:46:11 imp Exp $ + +# Script which creates a gzipped log and optionally mails it to the specified address +############################################################################ + +. ${PROGDIR}/backend/functions.sh +. ${PROGDIR}/conf/pc-sysinstall.conf +. ${BACKEND}/functions-networking.sh +. ${BACKEND}/functions-parse.sh + +# Bring up all NICS under DHCP +enable_auto_dhcp + +MAILTO="$1" +MAILRESULT="0" + +# Set the location of our compressed log +TMPLOG="/tmp/pc-sysinstall.log" + +echo "# PC-SYSINSTALL LOG" >${TMPLOG} +cat ${LOGOUT} >> ${TMPLOG} + +# Check if we have a GUI generated install cfg +if [ -e "/tmp/sys-install.cfg" ] +then + echo "" >>${TMPLOG} + echo "# PC-SYSINSTALL CFG " >>${TMPLOG} + cat /tmp/sys-install.cfg >> ${TMPLOG} +fi + +# Save dmesg output +echo "" >>${TMPLOG} +echo "# DMESG OUTPUT " >>${TMPLOG} +dmesg >> ${TMPLOG} + +# Get gpart info on all disks +for i in `${PROGDIR}/pc-sysinstall disk-list | cut -d ':' -f 1` +do + echo "" >>${TMPLOG} + echo "# DISK INFO $i " >>${TMPLOG} + ls /dev/${i}* >>${TMPLOG} + gpart show ${i} >> ${TMPLOG} +done + +# Show Mounted volumes +echo "" >>${TMPLOG} +echo "# MOUNT OUTPUT " >>${TMPLOG} +mount >> ${TMPLOG} + +echo "Log file saved to ${TMPLOG}" +echo "Warning: This file will be lost once the system is rebooted." + +echo "Do you wish to view this logfile now? (Y/N)" +read tmp +if [ "$tmp" = "Y" -o "$tmp" = "y" ] +then + more ${TMPLOG} +fi diff --git a/usr/sbin/pc-sysinstall/backend-query/set-mirror.sh b/usr/sbin/pc-sysinstall/backend-query/set-mirror.sh new file mode 100644 index 000000000..fe4daf847 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/set-mirror.sh @@ -0,0 +1,40 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXSystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/set-mirror.sh,v 1.2 2010/08/24 06:11:46 imp Exp $ + +. ${PROGDIR}/backend/functions.sh +. ${PROGDIR}/backend/functions-ftp.sh + +MIRROR="${1}" + +if [ -z "${MIRROR}" ] +then + echo "Error: No mirror specified!" + exit 1 +fi + +set_ftp_mirror "${MIRROR}" +exit 0 diff --git a/usr/sbin/pc-sysinstall/backend-query/setup-ssh-keys.sh b/usr/sbin/pc-sysinstall/backend-query/setup-ssh-keys.sh new file mode 100755 index 000000000..9fe6b978f --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/setup-ssh-keys.sh @@ -0,0 +1,64 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/setup-ssh-keys.sh,v 1.2 2010/06/27 16:46:11 imp Exp $ + +# Script which sets up password-less logins for ssh host +########################################################################### + +. ${PROGDIR}/backend/functions.sh + +SSHUSER=$1 +SSHHOST=$2 +SSHPORT=$3 + +if [ -z "${SSHUSER}" -o -z "${SSHHOST}" -o -z "${SSHPORT}" ] +then + echo "ERROR: Usage setup-ssh-keys " + exit 150 +fi + +cd ~ + +echo "Preparing to setup SSH key authorization..." +echo "When prompted, enter your password for ${SSHUSER}@${SSHHOST}" + +if [ ! -e ".ssh/id_rsa.pub" ] +then + mkdir .ssh >/dev/null 2>/dev/null + ssh-keygen -q -t rsa -N '' -f .ssh/id_rsa + sleep 1 +fi + +if [ ! -e ".ssh/id_rsa.pub" ] +then + echo "ERROR: Failed creating .ssh/id_rsa.pub" + exit 150 +fi + +# Get the .pub key +PUBKEY="`cat .ssh/id_rsa.pub`" + +ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} "mkdir .ssh ; echo $PUBKEY >> .ssh/authorized_keys; chmod 600 .ssh/authorized_keys ; echo $PUBKEY >> .ssh/authorized_keys2; chmod 600 .ssh/authorized_keys2" diff --git a/usr/sbin/pc-sysinstall/backend-query/sys-mem.sh b/usr/sbin/pc-sysinstall/backend-query/sys-mem.sh new file mode 100755 index 000000000..8577c29a5 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/sys-mem.sh @@ -0,0 +1,28 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/sys-mem.sh,v 1.3 2010/10/19 15:12:16 emaste Exp $ + +expr $(sysctl -n hw.realmem) / 1048576 diff --git a/usr/sbin/pc-sysinstall/backend-query/test-live.sh b/usr/sbin/pc-sysinstall/backend-query/test-live.sh new file mode 100755 index 000000000..43f4298a6 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/test-live.sh @@ -0,0 +1,33 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/test-live.sh,v 1.3 2010/10/22 00:11:55 imp Exp $ + +# Script which checks if we are running from install media, or real system +############################################################################# + +dmesg | grep -q 'md0: Preloaded image' || { echo 'REAL-DISK'; exit 1; } + +echo 'INSTALL-MEDIA' diff --git a/usr/sbin/pc-sysinstall/backend-query/test-netup.sh b/usr/sbin/pc-sysinstall/backend-query/test-netup.sh new file mode 100755 index 000000000..aa3e27731 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/test-netup.sh @@ -0,0 +1,50 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/test-netup.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + + +# Script which tests "fetch" when using a network connection, and saves +# if we are using direct connect, or need FTP passive mode +############################################################################# + +rm ${TMPDIR}/.testftp >/dev/null 2>/dev/null + +ping -c 2 www.pcbsd.org >/dev/null 2>/dev/null +if [ "$?" = "0" ] +then + echo "ftp: Up" + exit 0 +fi + +ping -c 2 www.freebsd.org >/dev/null 2>/dev/null +if [ "$?" = "0" ] +then + echo "ftp: Up" + exit 0 +fi + +echo "ftp: Down" +exit 1 diff --git a/usr/sbin/pc-sysinstall/backend-query/update-part-list.sh b/usr/sbin/pc-sysinstall/backend-query/update-part-list.sh new file mode 100755 index 000000000..7fb87ecef --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/update-part-list.sh @@ -0,0 +1,110 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/update-part-list.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +# Need access to a some unmount functions +. ${PROGDIR}/backend/functions-unmount.sh + +echo "Running: find-update-parts" >> ${LOGOUT} + +rm ${TMPDIR}/AvailUpgrades >/dev/null 2>/dev/null + +FSMNT="/mnt" + +# Get the freebsd version on this partition +get_fbsd_ver() +{ + + VER="`file ${FSMNT}/bin/sh | grep 'for FreeBSD' | sed 's|for FreeBSD |;|g' | cut -d ';' -f 2 | cut -d ',' -f 1`" + if [ "$?" = "0" ] ; then + file ${FSMNT}/bin/sh | grep '32-bit' >/dev/null 2>/dev/null + if [ "${?}" = "0" ] ; then + echo "${1}: FreeBSD ${VER} (32bit)" + else + echo "${1}: FreeBSD ${VER} (64bit)" + fi + fi + +} + +# Create our device listing +SYSDISK="`sysctl kern.disks | cut -d ':' -f 2 | sed 's/^[ \t]*//'`" +DEVS="" + +# Now loop through these devices, and list the disk drives +for i in ${SYSDISK} +do + + # Get the current device + DEV="${i}" + # Make sure we don't find any cd devices + echo "${DEV}" | grep -e "^acd[0-9]" -e "^cd[0-9]" -e "^scd[0-9]" >/dev/null 2>/dev/null + if [ "$?" != "0" ] ; then + DEVS="${DEVS} `ls /dev/${i}*`" + fi + +done + +# Search for regular UFS / Geom Partitions to upgrade +for i in $DEVS +do + if [ ! -e "${i}a.journal" -a ! -e "${i}a" -a ! -e "${i}p2" -a ! -e "${i}p2.journal" ] ; then + continue + fi + + if [ -e "${i}a.journal" ] ; then + _dsk="${i}a.journal" + elif [ -e "${i}a" ] ; then + _dsk="${i}a" + elif [ -e "${i}p2" ] ; then + _dsk="${i}p2" + elif [ -e "${i}p2.journal" ] ; then + _dsk="${i}p2.journal" + fi + + mount -o ro ${_dsk} ${FSMNT} >>${LOGOUT} 2>>${LOGOUT} + if [ "${?}" = "0" -a -e "${FSMNT}/bin/sh" ] ; then + get_fbsd_ver "`echo ${_dsk} | sed 's|/dev/||g'`" + umount -f ${FSMNT} >/dev/null 2>/dev/null + fi +done + +# Now search for any ZFS root partitions +zpool import -o altroot=${FSMNT} -a + +# Unmount any auto-mounted stuff +umount_all_dir "${FSMNT}" + +# Get pools +_zps="`zpool list | grep -v 'NAME' | cut -d ' ' -f 1`" +for _zpools in ${_zps} +do + mount -o ro -t zfs ${_zpools} ${FSMNT} >>${LOGOUT} 2>>${LOGOUT} + if [ "${?}" = "0" -a -e "${FSMNT}/bin/sh" ] ; then + get_fbsd_ver "${_zpools}" + umount -f ${FSMNT} >/dev/null 2>/dev/null + fi +done diff --git a/usr/sbin/pc-sysinstall/backend-query/xkeyboard-layouts.sh b/usr/sbin/pc-sysinstall/backend-query/xkeyboard-layouts.sh new file mode 100755 index 000000000..372696fb3 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/xkeyboard-layouts.sh @@ -0,0 +1,56 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/xkeyboard-layouts.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +FOUND="0" + +# Lets parse the xorg.list file, and see what layouts are supported +while read line +do + + if [ "$FOUND" = "1" -a ! -z "$line" ] + then + echo $line | grep '! ' >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + exit 0 + else + echo "$line" + fi + fi + + if [ "${FOUND}" = "0" ] + then + echo $line | grep '! layout' >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + FOUND="1" + fi + fi + +done < /usr/local/share/X11/xkb/rules/xorg.lst + +exit 0 diff --git a/usr/sbin/pc-sysinstall/backend-query/xkeyboard-models.sh b/usr/sbin/pc-sysinstall/backend-query/xkeyboard-models.sh new file mode 100755 index 000000000..f8e72c261 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/xkeyboard-models.sh @@ -0,0 +1,58 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/xkeyboard-models.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +FOUND="0" + +# Lets parse the xorg.list file, and see what models are supported +while read line +do + + if [ "$FOUND" = "1" -a ! -z "$line" ] + then + echo $line | grep '! ' >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + exit 0 + else + model="`echo $line | sed 's|(|[|g'`" + model="`echo $model | sed 's|)|]|g'`" + echo "$model" + fi + fi + + if [ "${FOUND}" = "0" ] + then + echo $line | grep '! model' >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + FOUND="1" + fi + fi + +done < /usr/local/share/X11/xkb/rules/xorg.lst + +exit 0 diff --git a/usr/sbin/pc-sysinstall/backend-query/xkeyboard-variants.sh b/usr/sbin/pc-sysinstall/backend-query/xkeyboard-variants.sh new file mode 100755 index 000000000..cff6b0ee8 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend-query/xkeyboard-variants.sh @@ -0,0 +1,56 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend-query/xkeyboard-variants.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +FOUND="0" + +# Lets parse the xorg.list file, and see what varients are supported +while read line +do + + if [ "$FOUND" = "1" -a ! -z "$line" ] + then + echo $line | grep '! ' >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + exit 0 + else + echo "$line" + fi + fi + + if [ "${FOUND}" = "0" ] + then + echo $line | grep '! variant' >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + FOUND="1" + fi + fi + +done < /usr/local/share/X11/xkb/rules/xorg.lst + +exit 0 diff --git a/usr/sbin/pc-sysinstall/backend/Makefile b/usr/sbin/pc-sysinstall/backend/Makefile new file mode 100755 index 000000000..2b4693d3e --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/Makefile @@ -0,0 +1,15 @@ +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/Makefile,v 1.6 2010/09/08 20:10:24 imp Exp $ + +FILES= functions-bsdlabel.sh functions-cleanup.sh functions-disk.sh \ + functions-extractimage.sh functions-ftp.sh functions-installcomponents.sh \ + functions-installpackages.sh functions-localize.sh functions-mountdisk.sh \ + functions-mountoptical.sh functions-networking.sh \ + functions-newfs.sh functions-packages.sh functions-parse.sh \ + functions-runcommands.sh functions-unmount.sh \ + functions-upgrade.sh functions-users.sh \ + functions.sh parseconfig.sh startautoinstall.sh installimage.sh +FILESMODE= ${BINMODE} +FILESDIR=${SHAREDIR}/pc-sysinstall/backend +NO_OBJ= + +.include diff --git a/usr/sbin/pc-sysinstall/backend/functions-bsdlabel.sh b/usr/sbin/pc-sysinstall/backend/functions-bsdlabel.sh new file mode 100755 index 000000000..25dfcc547 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-bsdlabel.sh @@ -0,0 +1,819 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-bsdlabel.sh,v 1.9 2010/10/21 22:46:10 imp Exp $ + +# Functions related to disk operations using bsdlabel + +# Check if we are are provided a geli password on the nextline of the config +check_for_enc_pass() +{ + CURLINE="${1}" + + get_next_cfg_line "${CFGF}" "${CURLINE}" + echo ${VAL} | grep "^encpass=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + # Found a password, return it + get_value_from_string "${VAL}" + return + fi + + VAL="" ; export VAL + return +}; + +# On check on the disk-label line if we have any extra vars for this device +# Only enabled for ZFS devices now, may add other xtra options in future for other FS's +get_fs_line_xvars() +{ + ACTIVEDEV="${1}" + LINE="${2}" + + echo $LINE | grep ' (' >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + + # See if we are looking for ZFS specific options + echo $LINE | grep '^ZFS' >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + ZTYPE="NONE" + ZFSVARS="`echo $LINE | cut -d '(' -f 2- | cut -d ')' -f 1 | xargs`" + + echo $ZFSVARS | grep -E "^(disk|file|mirror|raidz(1|2)?|spare|log|cache):" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + ZTYPE=`echo $ZFSVARS | cut -f1 -d:` + ZFSVARS=`echo $ZFSVARS | sed "s|$ZTYPE: ||g" | sed "s|$ZTYPE:||g"` + fi + + # Return the ZFS options + if [ "${ZTYPE}" = "NONE" ] ; then + VAR="${ACTIVEDEV} ${ZFSVARS}" + else + VAR="${ZTYPE} ${ACTIVEDEV} ${ZFSVARS}" + fi + export VAR + return + fi # End of ZFS block + + fi # End of xtra-options block + + # If we got here, set VAR to empty and export + VAR="" + export VAR + return +}; + +# Init each zfs mirror disk with a boot sector so we can failover +setup_zfs_mirror_parts() +{ + _nZFS="" + + # Using mirroring, setup boot partitions on each disk + _mirrline="`echo ${1} | sed 's|mirror ||g'`" + for _zvars in $_mirrline + do + echo "Looping through _zvars: $_zvars" >>${LOGOUT} + echo "$_zvars" | grep "${2}" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then continue ; fi + if [ -z "$_zvars" ] ; then continue ; fi + + is_disk "$_zvars" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + echo "Setting up ZFS mirror disk $_zvars" >>${LOGOUT} + init_gpt_full_disk "$_zvars" >/dev/null 2>/dev/null + rc_halt "gpart bootcode -p /boot/gptzfsboot -i 1 ${_zvars}" >/dev/null 2>/dev/null + rc_halt "gpart add -t freebsd-zfs ${_zvars}" >/dev/null 2>/dev/null + _nZFS="$_nZFS ${_zvars}p2" + else + _nZFS="$_nZFS ${_zvars}" + fi + done + echo "mirror $2 `echo $_nZFS | tr -s ' '`" +} ; + +# Function which creates a unique label name for the specified mount +gen_glabel_name() +{ + MOUNT="$1" + TYPE="$2" + NUM="0" + MAXNUM="20" + + # Check if we are doing /, and rename it + if [ "$MOUNT" = "/" ] + then + NAME=`cat /etc/inc/globals.inc | grep product_name | awk '{ print $3 }' | cut -d'"' -f2` + else + # If doing a swap partition, also rename it + if [ "${TYPE}" = "SWAP" ] + then + NAME="swap" + else + NAME="`echo $MOUNT | sed 's|/||g' | sed 's| ||g'`" + fi + fi + + # Loop through and break when we find our first available label + while + Z=1 + do + glabel status | grep "${NAME}${NUM}" >/dev/null 2>/dev/null + if [ "$?" != "0" ] + then + break + else + NUM="`expr ${NUM} + 1`" + fi + + if [ $NUM -gt $MAXNUM ] + then + exit_err "Cannot allocate additional glabel name for $NAME" + break + fi + done + + + VAL="${NAME}${NUM}" + export VAL +}; + +# Function to setup / stamp a legacy MBR bsdlabel +setup_mbr_partitions() +{ + DISKTAG="$1" + WRKSLICE="$2" + FOUNDPARTS="1" + + # Lets setup the BSDLABEL + BSDLABEL="${TMPDIR}/bsdLabel-${WRKSLICE}" + export BSDLABEL + rm $BSDLABEL >/dev/null 2>/dev/null + echo "# /dev/${WRKSLICE}" >>$BSDLABEL + echo "8 partitions:" >>$BSDLABEL + echo "# size offset fstype bsize bps/cpg" >>$BSDLABEL + + PARTLETTER="a" + + # Lets read in the config file now and populate this + while read line + do + # Check for data on this slice + echo $line | grep "^${DISKTAG}-part=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + # Found a slice- entry, lets get the slice info + get_value_from_string "${line}" + STRING="$VAL" + FOUNDPARTS="0" + + # We need to split up the string now, and pick out the variables + FS=`echo $STRING | tr -s '\t' ' ' | cut -d ' ' -f 1` + SIZE=`echo $STRING | tr -s '\t' ' ' | cut -d ' ' -f 2` + MNT=`echo $STRING | tr -s '\t' ' ' | cut -d ' ' -f 3` + + if echo $STRING | grep -E '^/.+' >/dev/null 2>&1 + then + IMAGE=`echo ${STRING} | cut -f1 -d' '` + fi + + # Check if we have a .eli extension on this FS + echo ${FS} | grep ".eli" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + FS="`echo ${FS} | cut -d '.' -f 1`" + ENC="ON" + check_for_enc_pass "${line}" + if [ "${VAL}" != "" ] ; then + # We have a user supplied password, save it for later + ENCPASS="${VAL}" + fi + else + ENC="OFF" + fi + + # Check if the user tried to setup / as an encrypted partition + check_for_mount "${MNT}" "/" + if [ "${?}" = "0" -a "${ENC}" = "ON" ] + then + USINGENCROOT="0" ; export USINGENCROOT + fi + + if [ -n "${IMAGE}" ] + then + FS="IMAGE" + SIZE=`ls -l "${IMAGE}" | awk '{ print $5 }'` + MNT=`echo $STRING | tr -s '\t' ' ' | cut -d ' ' -f 2` + SIZE=`convert_byte_to_megabyte $SIZE` + fi + + # Now check that these values are sane + case $FS in + UFS|UFS+S|UFS+J|UFS+SUJ|ZFS|SWAP|IMAGE) ;; + *) exit_err "ERROR: Invalid file system specified on $line" ;; + esac + + # Check that we have a valid size number + expr $SIZE + 1 >/dev/null 2>/dev/null + if [ "$?" != "0" ]; then + exit_err "ERROR: The size specified on $line is invalid" + fi + + # Check that the mount-point starts with / + echo "$MNT" | grep -e "^/" -e "^none" >/dev/null 2>/dev/null + if [ "$?" != "0" ]; then + exit_err "ERROR: The mount-point specified on $line is invalid" + fi + + if [ "$SIZE" = "0" ] + then + SOUT="*" + else + SOUT="${SIZE}M" + fi + + # OK, we passed all tests, now lets put these values into a config + # If the part + if [ "${PARTLETTER}" = "a" ] + then + if [ "$FS" = "SWAP" ] + then + echo "a: ${SOUT} * swap 0 0" >>${BSDLABEL} + else + echo "a: ${SOUT} 0 4.2BSD 0 0" >>${BSDLABEL} + fi + + # Check if we found a valid root partition + check_for_mount "${MNT}" "/" + if [ "$?" = "0" ] ; then + FOUNDROOT="0" ; export FOUNDROOT + fi + + # Check if we have a "/boot" instead + check_for_mount "${MNT}" "/boot" + if [ "${?}" = "0" ] ; then + USINGBOOTPART="0" ; export USINGBOOTPART + if [ "${FS}" != "UFS" -a "${FS}" != "UFS+S" -a "${FS}" != "UFS+J" -a "${FS}" != "UFS+SUJ" ] + then + exit_err "/boot partition must be formatted with UFS" + fi + fi + + else + # Done with the a: partitions + + # Check if we found a valid root partition not on a: + check_for_mount "${MNT}" "/" + if [ "${?}" = "0" ] ; then + FOUNDROOT="1" ; export FOUNDROOT + fi + + # Check if we have a /boot partition, and fail since its not first + check_for_mount "${MNT}" "/boot" + if [ "${?}" = "0" ] ; then + exit_err "/boot partition must be first partition" + fi + + + if [ "$FS" = "SWAP" ] + then + echo "${PARTLETTER}: ${SOUT} * swap" >>${BSDLABEL} + else + echo "${PARTLETTER}: ${SOUT} * 4.2BSD" >>${BSDLABEL} + fi + fi + + # Generate a unique label name for this mount + gen_glabel_name "${MNT}" "${FS}" + PLABEL="${VAL}" + + # Get any extra options for this fs / line + get_fs_line_xvars "${WRKSLICE}${PARTLETTER}" "${STRING}" + XTRAOPTS="${VAR}" + + # Check if using zfs mirror + echo ${XTRAOPTS} | grep "mirror" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + XTRAOPTS=$(setup_zfs_mirror_parts "$XTRAOPTS" "${WRKSLICE}${PARTLETTER}") + fi + + # Save this data to our partition config dir + echo "${FS}:${MNT}:${ENC}:${PLABEL}:MBR:${XTRAOPTS}:${IMAGE}" >${PARTDIR}/${WRKSLICE}${PARTLETTER} + + # If we have a enc password, save it as well + if [ ! -z "${ENCPASS}" ] ; then + echo "${ENCPASS}" >${PARTDIR}-enc/${WRKSLICE}${PARTLETTER}-encpass + fi + + # This partition letter is used, get the next one + case ${PARTLETTER} in + a) PARTLETTER="b" ;; + b) # When we hit b, add the special c: setup for bsdlabel + echo "c: * * unused" >>${BSDLABEL} + PARTLETTER="d" ;; + d) PARTLETTER="e" ;; + e) PARTLETTER="f" ;; + f) PARTLETTER="g" ;; + g) PARTLETTER="h" ;; + h) PARTLETTER="ERR" ;; + *) exit_err "ERROR: bsdlabel only supports up to letter h for partitions." ;; + esac + + unset IMAGE + + fi # End of subsection locating a slice in config + + echo $line | grep "^commitDiskLabel" >/dev/null 2>/dev/null + if [ "$?" = "0" -a "${FOUNDPARTS}" = "0" ] + then + # Found our flag to commit this label setup, check that we found at least 1 partition and do it + if [ "${PARTLETTER}" != "a" ] + then + # Check if we only had 1 partition, and make sure we add "c:" section to label + if [ "${PARTLETTER}" = "b" ] + then + echo "c: * * unused" >>${BSDLABEL} + fi + + echo "bsdlabel -R -B /dev/${WRKSLICE} ${BSDLABEL}" + bsdlabel -R -B ${WRKSLICE} ${BSDLABEL} + + break + else + exit_err "ERROR: commitDiskLabel was called without any partition entries for it!" + fi + fi + done <${CFGF} +}; + +# Function to setup partitions using gpt +setup_gpt_partitions() +{ + DISKTAG="$1" + DISK="$2" + FOUNDPARTS="1" + + # Lets read in the config file now and setup our GPT partitions + CURPART="2" + while read line + do + # Check for data on this slice + echo $line | grep "^${DISKTAG}-part=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + FOUNDPARTS="0" + # Found a slice- entry, lets get the slice info + get_value_from_string "${line}" + STRING="$VAL" + + # We need to split up the string now, and pick out the variables + FS=`echo $STRING | tr -s '\t' ' ' | cut -d ' ' -f 1` + SIZE=`echo $STRING | tr -s '\t' ' ' | cut -d ' ' -f 2` + MNT=`echo $STRING | tr -s '\t' ' ' | cut -d ' ' -f 3` + + # Check if we have a .eli extension on this FS + echo ${FS} | grep ".eli" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + FS="`echo ${FS} | cut -d '.' -f 1`" + ENC="ON" + check_for_enc_pass "${line}" + if [ "${VAL}" != "" ] ; then + # We have a user supplied password, save it for later + ENCPASS="${VAL}" + fi + else + ENC="OFF" + fi + + # Check if the user tried to setup / as an encrypted partition + check_for_mount "${MNT}" "/" + if [ "${?}" = "0" -a "${ENC}" = "ON" ] + then + USINGENCROOT="0" ; export USINGENCROOT + fi + + # Now check that these values are sane + case $FS in + UFS|UFS+S|UFS+J|UFS+SUJ|ZFS|SWAP) ;; + *) exit_err "ERROR: Invalid file system specified on $line" ;; + esac + + # Check that we have a valid size number + expr $SIZE + 1 >/dev/null 2>/dev/null + if [ "$?" != "0" ]; then + exit_err "ERROR: The size specified on $line is invalid" + fi + + # Check that the mount-point starts with / + echo "$MNT" | grep -e "^/" -e "^none" >/dev/null 2>/dev/null + if [ "$?" != "0" ]; then + exit_err "ERROR: The mount-point specified on $line is invalid" + fi + + if [ "$SIZE" = "0" ] + then + SOUT="" + else + SOUT="-s ${SIZE}M" + fi + + # Check if we found a valid root partition + check_for_mount "${MNT}" "/" + if [ "${?}" = "0" ] ; then + if [ "${CURPART}" = "2" ] ; then + FOUNDROOT="0" ; export FOUNDROOT + else + FOUNDROOT="1" ; export FOUNDROOT + fi + fi + + check_for_mount "${MNT}" "/boot" + if [ "${?}" = "0" ] ; then + if [ "${CURPART}" = "2" ] ; then + USINGBOOTPART="0" ; export USINGBOOTPART + if [ "${FS}" != "UFS" -a "${FS}" != "UFS+S" -a "${FS}" != "UFS+J" -a "${FS}" != "UFS+SUJ" ] + then + exit_err "/boot partition must be formatted with UFS" + fi + else + exit_err "/boot partition must be first partition" + fi + fi + + # Generate a unique label name for this mount + gen_glabel_name "${MNT}" "${FS}" + PLABEL="${VAL}" + + # Get any extra options for this fs / line + get_fs_line_xvars "${DISK}p${CURPART}" "${STRING}" + XTRAOPTS="${VAR}" + + # Check if using zfs mirror + echo ${XTRAOPTS} | grep "mirror" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + XTRAOPTS=$(setup_zfs_mirror_parts "$XTRAOPTS" "${DISK}p${CURPART}") + fi + + # Figure out the gpart type to use + case ${FS} in + ZFS) PARTYPE="freebsd-zfs" ;; + SWAP) PARTYPE="freebsd-swap" ;; + *) PARTYPE="freebsd-ufs" ;; + esac + + # Create the partition + rc_halt "gpart add ${SOUT} -t ${PARTYPE} ${DISK}" + + # Check if this is a root / boot partition, and stamp the right loader + for TESTMNT in `echo ${MNT} | sed 's|,| |g'` + do + if [ "${TESTMNT}" = "/" -a -z "${BOOTTYPE}" ] ; then + BOOTTYPE="${PARTYPE}" + fi + if [ "${TESTMNT}" = "/boot" ] ; then + BOOTTYPE="${PARTYPE}" + fi + done + + # Save this data to our partition config dir + echo "${FS}:${MNT}:${ENC}:${PLABEL}:GPT:${XTRAOPTS}" >${PARTDIR}/${DISK}p${CURPART} + + # Clear out any headers + sleep 2 + dd if=/dev/zero of=${DISK}p${CURPART} count=2048 >/dev/null 2>/dev/null + + # If we have a enc password, save it as well + if [ ! -z "${ENCPASS}" ] ; then + echo "${ENCPASS}" >${PARTDIR}-enc/${DISK}p${CURPART}-encpass + fi + + # Increment our parts counter + CURPART="`expr ${CURPART} + 1`" + + fi # End of subsection locating a slice in config + + echo $line | grep "^commitDiskLabel" >/dev/null 2>/dev/null + if [ "$?" = "0" -a "${FOUNDPARTS}" = "0" ] + then + + # If this is the boot disk, stamp the right gptboot + if [ ! -z "${BOOTTYPE}" ] ; then + case ${BOOTTYPE} in + freebsd-ufs) rc_halt "gpart bootcode -p /boot/gptboot -i 1 ${DISK}" ;; + freebsd-zfs) rc_halt "gpart bootcode -p /boot/gptzfsboot -i 1 ${DISK}" ;; + esac + fi + + + # Found our flag to commit this label setup, check that we found at least 1 partition + if [ "${CURPART}" = "2" ] ; then + exit_err "ERROR: commitDiskLabel was called without any partition entries for it!" + fi + + break + fi + done <${CFGF} +}; + +# Reads through the config and sets up a BSDLabel for the given slice +populate_disk_label() +{ + if [ -z "${1}" ] + then + exit_err "ERROR: populate_disk_label() called without argument!" + fi + + # Set some vars from the given working slice + disk="`echo $1 | cut -d '-' -f 1`" + slicenum="`echo $1 | cut -d '-' -f 2`" + type="`echo $1 | cut -d '-' -f 3`" + + # Set WRKSLICE based upon format we are using + if [ "$type" = "mbr" ] ; then + wrkslice="${disk}s${slicenum}" + fi + if [ "$type" = "gpt" ] ; then + wrkslice="${disk}p${slicenum}" + fi + + if [ -e "${SLICECFGDIR}/${wrkslice}" ] + then + disktag="`cat ${SLICECFGDIR}/${wrkslice}`" + else + exit_err "ERROR: Missing SLICETAG data. This shouldn't happen - please let the developers know" + fi + + # Using Traditional MBR for dual-booting + if [ "$type" = "mbr" ] ; then + setup_mbr_partitions "${disktag}" "${wrkslice}" + fi + + # Using entire disk mode, use GPT for this + if [ "$type" = "gpt" ] ; then + setup_gpt_partitions "${disktag}" "${disk}" + fi + +}; + +# Function which reads in the disk slice config, and performs it +setup_disk_label() +{ + # We are ready to start setting up the label, lets read the config and do the actions + # First confirm that we have a valid WORKINGSLICES + if [ -z "${WORKINGSLICES}" ]; then + exit_err "ERROR: No slices were setup! Please report this to the maintainers" + fi + + # Check that the slices we have did indeed get setup and gpart worked + for i in $WORKINGSLICES + do + disk="`echo $i | cut -d '-' -f 1`" + pnum="`echo $i | cut -d '-' -f 2`" + type="`echo $i | cut -d '-' -f 3`" + if [ "$type" = "mbr" -a ! -e "/dev/${disk}s${pnum}" ] ; then + exit_err "ERROR: The partition ${i} doesn't exist! gpart failure!" + fi + if [ "$type" = "gpt" -a ! -e "/dev/${disk}p${pnum}" ] ; then + exit_err "ERROR: The partition ${i} doesn't exist! gpart failure!" + fi + done + + # Setup some files which we'll be referring to + LABELLIST="${TMPDIR}/workingLabels" + export LABELLIST + rm $LABELLIST >/dev/null 2>/dev/null + + # Set our flag to determine if we've got a valid root partition in this setup + FOUNDROOT="-1" + export FOUNDROOT + + # Check if we are using a /boot partition + USINGBOOTPART="1" + export USINGBOOTPART + + # Set encryption on root check + USINGENCROOT="1" ; export USINGENCROOT + + # Make the tmp directory where we'll store FS info & mount-points + rm -rf ${PARTDIR} >/dev/null 2>/dev/null + mkdir -p ${PARTDIR} >/dev/null 2>/dev/null + rm -rf ${PARTDIR}-enc >/dev/null 2>/dev/null + mkdir -p ${PARTDIR}-enc >/dev/null 2>/dev/null + + for i in $WORKINGSLICES + do + populate_disk_label "${i}" + done + + # Check if we made a root partition + if [ "$FOUNDROOT" = "-1" ] + then + exit_err "ERROR: No root (/) partition specified!!" + fi + + # Check if we made a root partition + if [ "$FOUNDROOT" = "1" -a "${USINGBOOTPART}" != "0" ] + then + exit_err "ERROR: (/) partition isn't first partition on disk!" + fi + + if [ "${USINGENCROOT}" = "0" -a "${USINGBOOTPART}" != "0" ] + then + exit_err "ERROR: Can't encrypt (/) with no (/boot) partition!" + fi +}; + +check_fstab_mbr() +{ + local SLICE + local FSTAB + + if [ -z "$2" ] + then + return 1 + fi + + SLICE="$1" + FSTAB="$2/etc/fstab" + + if [ -f "${FSTAB}" ] + then + PARTLETTER=`echo "$SLICE" | sed -E 's|^.+([a-h])$|\1|'` + + cat "${FSTAB}" | awk '{ print $2 }' | grep -E '^/$' >/dev/null 2>&1 + if [ "$?" = "0" ] + then + if [ "${PARTLETTER}" = "a" ] + then + FOUNDROOT="0" + else + FOUNDROOT="1" + fi + + ROOTIMAGE="1" + + export FOUNDROOT + export ROOTIMAGE + fi + + cat "${FSTAB}" | awk '{ print $2 }' | grep -E '^/boot$' >/dev/null 2>&1 + if [ "$?" = "0" ] + then + if [ "${PARTLETTER}" = "a" ] + then + USINGBOOTPART="0" + else + exit_err "/boot partition must be first partition" + fi + export USINGBOOTPART + fi + + return 0 + fi + + return 1 +}; + +check_fstab_gpt() +{ + local SLICE + local FSTAB + + if [ -z "$2" ] + then + return 1 + fi + + SLICE="$1" + FSTAB="$2/etc/fstab" + + if [ -f "${FSTAB}" ] + then + PARTNUMBER=`echo "${SLICE}" | sed -E 's|^.+p([0-9]*)$|\1|'` + + cat "${FSTAB}" | awk '{ print $2 }' | grep -E '^/$' >/dev/null 2>&1 + if [ "$?" = "0" ] + then + if [ "${PARTNUMBER}" = "2" ] + then + FOUNDROOT="0" + else + FOUNDROOT="1" + fi + + ROOTIMAGE="1" + + export FOUNDROOT + export ROOTIMAGE + fi + + cat "${FSTAB}" | awk '{ print $2 }' | grep -E '^/boot$' >/dev/null 2>&1 + if [ "$?" = "0" ] + then + if [ "${PARTNUMBER}" = "2" ] + then + USINGBOOTPART="0" + else + exit_err "/boot partition must be first partition" + fi + export USINGBOOTPART + fi + + return 0 + fi + + + return 1 +}; + +check_disk_layout() +{ + local SLICES + local TYPE + local DISK + local RES + local F + + DISK="$1" + TYPE="MBR" + + if [ -z "${DISK}" ] + then + return 1 + fi + + SLICES_MBR=`ls /dev/${DISK}s[1-4]*[a-h]* 2>/dev/null` + SLICES_GPT=`ls /dev/${DISK}p[0-9]* 2>/dev/null` + SLICES_SLICE=`ls /dev/${DISK}[a-h]* 2>/dev/null` + + if [ -n "${SLICES_MBR}" ] + then + SLICES="${SLICES_MBR}" + TYPE="MBR" + RES=0 + fi + if [ -n "${SLICES_GPT}" ] + then + SLICES="${SLICES_GPT}" + TYPE="GPT" + RES=0 + fi + if [ -n "${SLICES_SLICE}" ] + then + SLICES="${SLICES_SLICE}" + TYPE="MBR" + RES=0 + fi + + for slice in ${SLICES} + do + F=1 + mount ${slice} /mnt 2>/dev/null + if [ "$?" != "0" ] + then + continue + fi + + if [ "${TYPE}" = "MBR" ] + then + check_fstab_mbr "${slice}" "/mnt" + F="$?" + + elif [ "${TYPE}" = "GPT" ] + then + check_fstab_gpt "${slice}" "/mnt" + F="$?" + fi + + if [ "${F}" = "0" ] + then + #umount /mnt + break + fi + + #umount /mnt + done + + return ${RES} +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-cleanup.sh b/usr/sbin/pc-sysinstall/backend/functions-cleanup.sh new file mode 100755 index 000000000..be316c447 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-cleanup.sh @@ -0,0 +1,418 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-cleanup.sh,v 1.5 2010/10/21 17:14:44 imp Exp $ + +# Functions which perform the final cleanup after an install + +# Finishes up with ZFS setup before unmounting +zfs_cleanup_unmount() +{ + # Loop through our FS and see if we have any ZFS partitions to cleanup + for PART in `ls ${PARTDIR}` + do + PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`" + PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`" + ZPOOLNAME=$(get_zpool_name "${PART}") + + if [ "$PARTFS" = "ZFS" ] + then + # Check if we have multiple zfs mounts specified + for ZMNT in `echo ${PARTMNT} | sed 's|,| |g'` + do + if [ "${ZMNT}" = "/" ] + then + # Make sure we haven't already added the zfs boot line when + # Creating a dedicated "/boot" partition + cat ${FSMNT}/boot/loader.conf 2>/dev/null | grep "vfs.root.mountfrom=" >/dev/null 2>/dev/null + if [ "$?" != "0" ] ; then + echo "vfs.root.mountfrom=\"zfs:${ZPOOLNAME}\"" >> ${FSMNT}/boot/loader.conf + fi + FOUNDZFSROOT="${ZPOOLNAME}" ; export FOUNDZFSROOT + fi + done + FOUNDZFS="1" + fi + done + + if [ ! -z "${FOUNDZFS}" ] + then + # Check if we need to add our ZFS flags to rc.conf, src.conf and loader.conf + cat ${FSMNT}/boot/loader.conf 2>/dev/null | grep 'zfs_load="YES"' >/dev/null 2>/dev/null + if [ "$?" != "0" ] + then + echo 'zfs_load="YES"' >>${FSMNT}/boot/loader.conf + fi + cat ${FSMNT}/etc/rc.conf 2>/dev/null | grep 'zfs_enable="YES"' >/dev/null 2>/dev/null + if [ "$?" != "0" ] + then + echo 'zfs_enable="YES"' >>${FSMNT}/etc/rc.conf + fi + + sleep 2 + # Copy over any ZFS cache data + cp /boot/zfs/* ${FSMNT}/boot/zfs/ + + # Copy the hostid so that our zfs cache works + cp /etc/hostid ${FSMNT}/etc/hostid + fi + + # Loop through our FS and see if we have any ZFS partitions to cleanup + for PART in `ls ${PARTDIR}` + do + PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`" + PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`" + PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`" + ZPOOLNAME=$(get_zpool_name "${PART}") + + if [ "$PARTFS" = "ZFS" ] + then + # Check if we have multiple zfs mounts specified + for ZMNT in `echo ${PARTMNT} | sed 's|,| |g'` + do + PARTMNTREV="${ZMNT} ${PARTMNTREV}" + done + + for ZMNT in ${PARTMNTREV} + do + if [ "${ZMNT}" != "/" ] + then + rc_halt "zfs set mountpoint=${ZMNT} ${ZPOOLNAME}${ZMNT}" + rc_halt "zfs unmount ${ZPOOLNAME}${ZMNT}" + sleep 2 + fi + done + fi + done + +}; + +# Function which performs the specific setup for using a /boot partition +setup_dedicated_boot_part() +{ + ROOTFS="${1}" + ROOTFSTYPE="${2}" + BOOTFS="${3}" + BOOTMNT="${4}" + + # Set the root mount in loader.conf + echo "vfs.root.mountfrom=\"${ROOTFSTYPE}:${ROOTFS}\"" >> ${FSMNT}/boot/loader.conf + rc_halt "mkdir -p ${FSMNT}/${BOOTMNT}/boot" + rc_halt "mv ${FSMNT}/boot/* ${FSMNT}${BOOTMNT}/boot/" + rc_halt "mv ${FSMNT}${BOOTMNT}/boot ${FSMNT}/boot/" + rc_halt "umount /dev/${BOOTFS}" + rc_halt "mount /dev/${BOOTFS} ${FSMNT}${BOOTMNT}" + rc_halt "rmdir ${FSMNT}/boot" + + # Strip the '/' from BOOTMNT before making symlink + BOOTMNTNS="`echo ${BOOTMNT} | sed 's|/||g'`" + rc_halt "chroot ${FSMNT} ln -s ${BOOTMNTNS}/boot /boot" + +}; + +# Function which creates the /etc/fstab for the installed system +setup_fstab() +{ + FSTAB="${FSMNT}/etc/fstab" + rm ${FSTAB} >/dev/null 2>/dev/null + + # Create the header + echo "# Device Mountpoint FStype Options Dump Pass" >> ${FSTAB} + + # Loop through the partitions, and start creating /etc/fstab + for PART in `ls ${PARTDIR}` + do + PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`" + PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`" + PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`" + PARTLABEL="`cat ${PARTDIR}/${PART} | cut -d ':' -f 4`" + + DRIVE="`echo ${PART} | rev | cut -b 4- | rev`" + # Check if this device is being mirrored + if [ -e "${MIRRORCFGDIR}/${DRIVE}" ] + then + # This device is apart of a gmirror, lets reset PART to correct value + MDRIVE="mirror/`cat ${MIRRORCFGDIR}/${DRIVE} | cut -d ':' -f 3`" + TMP="`echo ${PART} | rev | cut -b -3 | rev`" + PART="${MDRIVE}${TMP}" + PARTLABEL="" + fi + + # Unset EXT + EXT="" + + # Set mount options for file-systems + case $PARTFS in + UFS+J) MNTOPTS="rw,noatime,async" ;; + SWAP) MNTOPTS="sw" ;; + *) MNTOPTS="rw,noatime" ;; + esac + + + # Figure out if we are using a glabel, or the raw name for this entry + if [ ! -z "${PARTLABEL}" ] + then + DEVICE="label/${PARTLABEL}" + else + # Check if using encryption + if [ "${PARTENC}" = "ON" ] ; then + EXT=".eli" + fi + + if [ "${PARTFS}" = "UFS+J" ] ; then + EXT="${EXT}.journal" + fi + DEVICE="${PART}${EXT}" + fi + + + # Set our ROOTFSTYPE for loader.conf if necessary + check_for_mount "${PARTMNT}" "/" + if [ "$?" = "0" ] ; then + if [ "${PARTFS}" = "ZFS" ] ; then + ROOTFSTYPE="zfs" + XPOOLNAME=$(get_zpool_name "${PART}") + ROOTFS="${ZPOOLNAME}" + else + ROOTFS="${DEVICE}" + ROOTFSTYPE="ufs" + fi + fi + + # Only create non-zfs partitions + if [ "${PARTFS}" != "ZFS" ] + then + + # Make sure geom_journal is loaded + if [ "${PARTFS}" = "UFS+J" ] ; then + setup_gjournal + fi + + # Save the BOOTFS for call at the end + if [ "${PARTMNT}" = "/boot" ] ; then + BOOTFS="${PART}${EXT}" + BOOTMNT="${BOOT_PART_MOUNT}" + PARTMNT="${BOOTMNT}" + fi + + # Echo out the fstab entry now + if [ "${PARTFS}" = "SWAP" ] + then + echo "/dev/${DEVICE} none swap ${MNTOPTS} 0 0" >> ${FSTAB} + else + echo "/dev/${DEVICE} ${PARTMNT} ufs ${MNTOPTS} 1 1" >> ${FSTAB} + fi + + fi # End of ZFS Check + done + + # Setup some specific PC-BSD fstab options + if [ "$INSTALLTYPE" != "FreeBSD" ] + then + echo "procfs /proc procfs rw 0 0" >> ${FSTAB} + echo "linprocfs /compat/linux/proc linprocfs rw 0 0" >> ${FSTAB} + echo "tmpfs /tmp tmpfs rw,mode=1777 0 0" >> ${FSTAB} + fi + + # If we have a dedicated /boot, run the post-install setup of it now + if [ ! -z "${BOOTMNT}" ] ; then + setup_dedicated_boot_part "${ROOTFS}" "${ROOTFSTYPE}" "${BOOTFS}" "${BOOTMNT}" + fi + +}; + +# Setup our disk mirroring with gmirror +setup_gmirror() +{ + NUM="0" + + cd ${MIRRORCFGDIR} + for DISK in `ls *` + do + MIRRORDISK="`cat ${DISK} | cut -d ':' -f 1`" + MIRRORBAL="`cat ${DISK} | cut -d ':' -f 2`" + + # Create this mirror device + gmirror label -vb $MIRRORBAL gm${NUM} /dev/${DISK} + + sleep 3 + + # Save the gm device in our config + echo "${MIRRORDISK}:${MIRRORBAL}:gm${NUM}" > ${DISK} + + sleep 3 + + NUM="`expr ${NUM} + 1`" + done + + + cat ${FSMNT}/boot/loader.conf 2>/dev/null | grep 'geom_mirror_load="YES"' >/dev/null 2>/dev/null + if [ "$?" != "0" ] + then + echo 'geom_mirror_load="YES"' >>${FSMNT}/boot/loader.conf + fi + +}; + +# Function which saves geli keys and sets up loading of them at boot +setup_geli_loading() +{ + + # Make our keys dir + mkdir -p ${FSMNT}/boot/keys >/dev/null 2>/dev/null + + cd ${GELIKEYDIR} + for KEYFILE in `ls *` + do + # Figure out the partition name based on keyfile name removing .key + PART="`echo ${KEYFILE} | cut -d '.' -f 1`" + + # Add the entries to loader.conf to start this geli provider at boot + echo "geli_${PART}_keyfile0_load=\"YES\"" >> ${FSMNT}/boot/loader.conf + echo "geli_${PART}_keyfile0_type=\"${PART}:geli_keyfile0\"" >> ${FSMNT}/boot/loader.conf + echo "geli_${PART}_keyfile0_name=\"/boot/keys/${KEYFILE}\"" >> ${FSMNT}/boot/loader.conf + + # If we have a passphrase, set it up now + if [ -e "${PARTDIR}-enc/${PART}-encpass" ] ; then + geli setkey -J ${PARTDIR}-enc/${PART}-encpass -n 0 -p -k ${KEYFILE} -K ${KEYFILE} ${PART} + geli configure -b ${PART} + fi + + # Copy the key to the disk + cp ${KEYFILE} ${FSMNT}/boot/keys/${KEYFILE} + done + + # Make sure we have geom_eli set to load at boot + cat ${FSMNT}/boot/loader.conf 2>/dev/null | grep 'geom_eli_load="YES"' >/dev/null 2>/dev/null + if [ "$?" != "0" ] + then + echo 'geom_eli_load="YES"' >>${FSMNT}/boot/loader.conf + fi + +}; + + +# Function to generate a random hostname if none was specified +gen_hostname() +{ + RAND="`jot -r 1 1 9000`" + + if [ "$INSTALLTYPE" = "FreeBSD" ] + then + VAL="freebsd-${RAND}" + else + VAL="pcbsd-${RAND}" + fi + + export VAL + +}; + +# Function which sets up the hostname for the system +setup_hostname() +{ + + get_value_from_cfg hostname + HOSTNAME="${VAL}" + + # If we don't have a hostname, make one up + if [ -z "${HOSTNAME}" ] + then + gen_hostname + HOSTNAME="${VAL}" + fi + + # Clean up any saved hostname + cat ${FSMNT}/etc/rc.conf | grep -v "hostname=" >${FSMNT}/etc/rc.conf.new + mv ${FSMNT}/etc/rc.conf.new ${FSMNT}/etc/rc.conf + + # Set the hostname now + echo_log "Setting hostname: ${HOSTNAME}" + echo "hostname=\"${HOSTNAME}\"" >> ${FSMNT}/etc/rc.conf + sed -i -e "s|my.domain|${HOSTNAME} ${HOSTNAME}|g" ${FSMNT}/etc/hosts + +}; + + +# Check and make sure geom_journal is enabled on the system +setup_gjournal() +{ + + # Make sure we have geom_journal set to load at boot + cat ${FSMNT}/boot/loader.conf 2>/dev/null | grep 'geom_journal_load="YES"' >/dev/null 2>/dev/null + if [ "$?" != "0" ] + then + echo 'geom_journal_load="YES"' >>${FSMNT}/boot/loader.conf + fi + +}; + +# Function which sets the root password from the install config +set_root_pw() +{ + get_value_from_cfg_with_spaces rootPass + PW="${VAL}" + + # If we don't have a root pass, return + if [ -z "${PW}" ] + then + return 0 + fi + + echo_log "Setting root password" + echo "${PW}" > ${FSMNT}/.rootpw + run_chroot_cmd "cat /.rootpw | pw usermod root -h 0" + rc_halt "rm ${FSMNT}/.rootpw" + +}; + + +run_final_cleanup() +{ + # Check if we need to run any gmirror setup + ls ${MIRRORCFGDIR}/* >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + # Lets setup gmirror now + setup_gmirror + fi + + # Check if we need to save any geli keys + ls ${GELIKEYDIR}/* >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + # Lets setup geli loading + setup_geli_loading + fi + + # Set a hostname on the install system + setup_hostname + + # Set the root_pw if it is specified + set_root_pw + + # Generate the fstab for the installed system + setup_fstab +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-disk.sh b/usr/sbin/pc-sysinstall/backend/functions-disk.sh new file mode 100755 index 000000000..2bb3ecc52 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-disk.sh @@ -0,0 +1,827 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-disk.sh,v 1.8 2010/11/10 05:32:36 imp Exp $ + +# Functions related to disk operations using gpart + +# See if device is a full disk or partition/slice +is_disk() +{ + for _dsk in `sysctl -n kern.disks` + do + if [ "$_dsk" = "${1}" ] ; then return 0 ; fi + done + + return 1 +} + +# Get a MBR partitions sysid +get_partition_sysid_mbr() +{ + INPART="0" + DISK="$1" + PARTNUM=`echo ${2} | sed "s|${DISK}s||g"` + fdisk ${DISK} >${TMPDIR}/disk-${DISK} 2>/dev/null + while read i + do + echo "$i" | grep "The data for partition" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + INPART="0" + PART="`echo ${i} | cut -d ' ' -f 5`" + if [ "$PART" = "$PARTNUM" ] ; then + INPART="1" + fi + fi + + # In the partition section + if [ "$INPART" = "1" ] ; then + echo "$i" | grep "^sysid" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + SYSID="`echo ${i} | tr -s '\t' ' ' | cut -d ' ' -f 2`" + break + fi + + fi + + done < ${TMPDIR}/disk-${DISK} + rm ${TMPDIR}/disk-${DISK} + + VAL="${SYSID}" + export VAL +}; + +# Get the partitions MBR label +get_partition_label_mbr() +{ + INPART="0" + DISK="$1" + PARTNUM=`echo ${2} | sed "s|${DISK}s||g"` + fdisk ${DISK} >${TMPDIR}/disk-${DISK} 2>/dev/null + while read i + do + echo "$i" | grep "The data for partition" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + INPART="0" + PART="`echo ${i} | cut -d ' ' -f 5`" + if [ "$PART" = "$PARTNUM" ] ; then + INPART="1" + fi + fi + + # In the partition section + if [ "$INPART" = "1" ] ; then + echo "$i" | grep "^sysid" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + LABEL="`echo ${i} | tr -s '\t' ' ' | cut -d ',' -f 2-10`" + break + fi + + fi + + done < ${TMPDIR}/disk-${DISK} + rm ${TMPDIR}/disk-${DISK} + + VAL="${LABEL}" + export VAL +}; + +# Get a GPT partitions label +get_partition_label_gpt() +{ + DISK="${1}" + PARTNUM=`echo ${2} | sed "s|${DISK}p||g"` + + gpart show ${DISK} >${TMPDIR}/disk-${DISK} + while read i + do + SLICE="`echo ${i} | grep -v ${DISK} | grep -v ' free ' |tr -s '\t' ' ' | cut -d ' ' -f 3`" + if [ "${SLICE}" = "${PARTNUM}" ] ; then + LABEL="`echo ${i} | grep -v ${DISK} | grep -v ' free ' |tr -s '\t' ' ' | cut -d ' ' -f 4`" + break + fi + done <${TMPDIR}/disk-${DISK} + rm ${TMPDIR}/disk-${DISK} + + VAL="${LABEL}" + export VAL +}; + +# Get a partitions startblock +get_partition_startblock() +{ + DISK="${1}" + PARTNUM=`echo ${2} | sed "s|${DISK}p||g" | sed "s|${DISK}s||g"` + + gpart show ${DISK} >${TMPDIR}/disk-${DISK} + while read i + do + SLICE="`echo ${i} | grep -v ${DISK} | grep -v ' free ' |tr -s '\t' ' ' | cut -d ' ' -f 3`" + if [ "$SLICE" = "${PARTNUM}" ] ; then + SB="`echo ${i} | grep -v ${DISK} | grep -v ' free ' |tr -s '\t' ' ' | cut -d ' ' -f 1`" + break + fi + done <${TMPDIR}/disk-${DISK} + rm ${TMPDIR}/disk-${DISK} + + VAL="${SB}" + export VAL +}; + +# Get a partitions blocksize +get_partition_blocksize() +{ + DISK="${1}" + PARTNUM=`echo ${2} | sed "s|${DISK}p||g" | sed "s|${DISK}s||g"` + + gpart show ${DISK} >${TMPDIR}/disk-${DISK} + while read i + do + SLICE="`echo ${i} | grep -v ${DISK} | grep -v ' free ' |tr -s '\t' ' ' | cut -d ' ' -f 3`" + if [ "$SLICE" = "${PARTNUM}" ] ; then + BS="`echo ${i} | grep -v ${DISK} | grep -v ' free ' |tr -s '\t' ' ' | cut -d ' ' -f 2`" + break + fi + done <${TMPDIR}/disk-${DISK} + rm ${TMPDIR}/disk-${DISK} + + VAL="${BS}" + export VAL +}; + +# Function which returns the partitions on a target disk +get_disk_partitions() +{ + gpart show ${1} >/dev/null 2>/dev/null + if [ "$?" != "0" ] ; then + VAL="" ; export VAL + return + fi + + gpart show ${1} | grep "MBR" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + type="MBR" + else + type="GPT" + fi + + SLICES="`gpart show ${1} | grep -v ${1} | grep -v ' free ' |tr -s '\t' ' ' | cut -d ' ' -f 4 | sed '/^$/d'`" + for i in ${SLICES} + do + case $type in + MBR) name="${1}s${i}" ;; + GPT) name="${1}p${i}";; + *) name="${1}s${i}";; + esac + if [ -z "${RSLICES}" ] + then + RSLICES="${name}" + else + RSLICES="${RSLICES} ${name}" + fi + done + + VAL="${RSLICES}" ; export VAL +}; + +# Function which returns a target disks cylinders +get_disk_cyl() +{ + cyl=`diskinfo -v ${1} | grep "# Cylinders" | tr -s ' ' | cut -f 2` + VAL="${cyl}" ; export VAL +}; + +# Function which returns a target disks sectors +get_disk_sectors() +{ + sec=`diskinfo -v ${1} | grep "# Sectors" | tr -s ' ' | cut -f 2` + VAL="${sec}" ; export VAL +}; + +# Function which returns a target disks heads +get_disk_heads() +{ + head=`diskinfo -v ${1} | grep "# Heads" | tr -s ' ' | cut -f 2` + VAL="${head}" ; export VAL +}; + +# Function which returns a target disks mediasize in sectors +get_disk_mediasize() +{ + mediasize=`diskinfo -v ${1} | grep "# mediasize in sectors" | tr -s ' ' | cut -f 2` + VAL="${mediasize}" ; export VAL +}; + +# Function which exports all zpools, making them safe to overwrite potentially +export_all_zpools() +{ + # Export any zpools + for i in `zpool list -H -o name` + do + zpool export -f ${i} + done +}; + +# Function to delete all gparts before starting an install +delete_all_gpart() +{ + echo_log "Deleting all gparts" + DISK="$1" + + # Check for any swaps to stop + for i in `gpart show ${DISK} 2>/dev/null | grep 'freebsd-swap' | tr -s ' ' | cut -d ' ' -f 4` + do + swapoff /dev/${DISK}s${i}b >/dev/null 2>/dev/null + swapoff /dev/${DISK}p${i} >/dev/null 2>/dev/null + done + + # Delete the gparts now + for i in `gpart show ${DISK} 2>/dev/null | tr -s ' ' | cut -d ' ' -f 4` + do + if [ "${i}" != "${DISK}" -a "${i}" != "-" ] ; then + rc_nohalt "gpart delete -i ${i} ${DISK}" + fi + done + + rc_nohalt "dd if=/dev/zero of=/dev/${DISK} count=3000" + +}; + +# Function to export all zpools before starting an install +stop_all_zfs() +{ + # Export all zpools again, so that we can overwrite these partitions potentially + for i in `zpool list -H -o name` + do + zpool export -f ${i} + done +}; + +# Function which stops all gmirrors before doing any disk manipulation +stop_all_gmirror() +{ + DISK="${1}" + GPROV="`gmirror list | grep ". Name: mirror/" | cut -d '/' -f 2`" + for gprov in $GPROV + do + gmirror list | grep "Name: ${DISK}" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + echo_log "Stopping mirror $gprov $DISK" + rc_nohalt "gmirror remove $gprov $DISK" + rc_nohalt "dd if=/dev/zero of=/dev/${DISK} count=4096" + fi + done +}; + +# Make sure we don't have any geli providers active on this disk +stop_all_geli() +{ + _geld="${1}" + cd /dev + + for i in `ls ${_geld}*` + do + echo $i | grep '.eli' >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + echo_log "Detaching GELI on ${i}" + rc_halt "geli detach ${i}" + fi + done + +}; + +# Function which reads in the disk slice config, and performs it +setup_disk_slice() +{ + + # Cleanup any slice / mirror dirs + rm -rf ${SLICECFGDIR} >/dev/null 2>/dev/null + mkdir ${SLICECFGDIR} + rm -rf ${MIRRORCFGDIR} >/dev/null 2>/dev/null + mkdir ${MIRRORCFGDIR} + + # Start with disk0 + disknum="0" + + # Make sure all zpools are exported + export_all_zpools + + # We are ready to start setting up the disks, lets read the config and do the actions + while read line + do + echo $line | grep "^disk${disknum}=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + + # Found a disk= entry, lets get the disk we are working on + get_value_from_string "${line}" + strip_white_space "$VAL" + DISK="$VAL" + + # Before we go further, lets confirm this disk really exists + if [ ! -e "/dev/${DISK}" ] + then + exit_err "ERROR: The disk ${DISK} does not exist!" + fi + + # Make sure we stop any gmirrors on this disk + stop_all_gmirror ${DISK} + + # Make sure we stop any geli stuff on this disk + stop_all_geli ${DISK} + + # Make sure we don't have any zpools loaded + stop_all_zfs + + fi + + # Lets look if this device will be mirrored on another disk + echo $line | grep "^mirror=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + + # Found a disk= entry, lets get the disk we are working on + get_value_from_string "${line}" + strip_white_space "$VAL" + MIRRORDISK="$VAL" + + # Before we go further, lets confirm this disk really exists + if [ ! -e "/dev/${MIRRORDISK}" ] + then + exit_err "ERROR: The mirror disk ${MIRRORDISK} does not exist!" + fi + fi + + # Lets see if we have been given a mirror balance choice + echo $line | grep "^mirrorbal=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + + # Found a disk= entry, lets get the disk we are working on + get_value_from_string "${line}" + strip_white_space "$VAL" + MIRRORBAL="$VAL" + fi + + echo $line | grep "^partition=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + # Found a partition= entry, lets read / set it + get_value_from_string "${line}" + strip_white_space "$VAL" + PTYPE=`echo $VAL|tr A-Z a-z` + + # We are using free space, figure out the slice number + if [ "${PTYPE}" = "free" ] + then + # Lets figure out what number this slice will be + LASTSLICE="`gpart show ${DISK} \ + | grep -v ${DISK} \ + | grep -v ' free' \ + | tr -s '\t' ' ' \ + | cut -d ' ' -f 4 \ + | sed '/^$/d' \ + | tail -n 1`" + + if [ -z "${LASTSLICE}" ] + then + LASTSLICE="1" + else + LASTSLICE="`expr $LASTSLICE + 1`" + fi + + if [ $LASTSLICE -gt 4 ] + then + exit_err "ERROR: BSD only supports primary partitions, and there are none availble on $DISK" + fi + + fi + fi + + # Check if we have an image file defined + echo $line | grep "^image=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + # Found an image= entry, lets read / set it + get_value_from_string "${line}" + strip_white_space "$VAL" + IMAGE="$VAL" + if [ ! -f "$IMAGE" ] ; then + exit_err "$IMAGE file does not exist" + fi + fi + + # Check if we have a partscheme specified + echo $line | grep "^partscheme=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + # Found a partscheme= entry, lets read / set it + get_value_from_string "${line}" + strip_white_space "$VAL" + PSCHEME="$VAL" + if [ "$PSCHEME" != "GPT" -a "$PSCHEME" != "MBR" ] ; then + exit_err "Unknown partition scheme: $PSCHEME" + fi + fi + + echo $line | grep "^bootManager=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + # Found a bootManager= entry, lets read /set it + get_value_from_string "${line}" + strip_white_space "$VAL" + BMANAGER="$VAL" + fi + + echo $line | grep "^commitDiskPart" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + # Found our flag to commit this disk setup / lets do sanity check and do it + if [ ! -z "${DISK}" -a ! -z "${PTYPE}" ] + then + case ${PTYPE} in + all) + if [ "$PSCHEME" = "MBR" -o -z "$PSCHEME" ] ; then + PSCHEME="MBR" + tmpSLICE="${DISK}s1" + else + tmpSLICE="${DISK}p1" + fi + + run_gpart_full "${DISK}" "${BMANAGER}" "${PSCHEME}" + ;; + + s1|s2|s3|s4) + tmpSLICE="${DISK}${PTYPE}" + # Get the number of the slice we are working on + s="`echo ${PTYPE} | awk '{print substr($0,length,1)}'`" + run_gpart_slice "${DISK}" "${BMANAGER}" "${s}" + ;; + + free) + tmpSLICE="${DISK}s${LASTSLICE}" + run_gpart_free "${DISK}" "${LASTSLICE}" "${BMANAGER}" + ;; + + image) + if [ -z "${IMAGE}" ] + then + exit_err "ERROR: partition type image specified with no image!" + fi + ;; + + *) exit_err "ERROR: Unknown PTYPE: $PTYPE" ;; + esac + + + if [ -n "${IMAGE}" ] + then + local DEST + + if [ -n "${tmpSLICE}" ] + then + DEST="${tmpSLICE}" + else + DEST="${DISK}" + fi + + write_image "${IMAGE}" "${DEST}" + check_disk_layout "${DEST}" + fi + + # Now save which disk this is, so we can parse it later during slice partition setup + if [ -z "${IMAGE}" ] + then + echo "disk${disknum}" >${SLICECFGDIR}/$tmpSLICE + fi + + # Save any mirror config + if [ ! -z "$MIRRORDISK" ] + then + # Default to round-robin if the user didn't specify + if [ -z "$MIRRORBAL" ] + then + MIRRORBAL="round-robin" + fi + echo "$MIRRORDISK:$MIRRORBAL" >${MIRRORCFGDIR}/$DISK + fi + + # Increment our disk counter to look for next disk and unset + unset BMANAGER PTYPE DISK MIRRORDISK MIRRORBAL PSCHEME IMAGE + disknum="`expr $disknum + 1`" + else + exit_err "ERROR: commitDiskPart was called without procceding disk= and partition= entries!!!" + fi + fi + + done <${CFGF} + +}; + +# Stop all gjournals on disk / slice +stop_gjournal() +{ + _gdsk="$1" + # Check if we need to shutdown any journals on this drive + ls /dev/${_gdsk}*.journal >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + cd /dev + for i in `ls ${_gdsk}*.journal` + do + rawjournal="`echo ${i} | cut -d '.' -f 1`" + gjournal stop -f ${rawjournal} >>${LOGOUT} 2>>${LOGOUT} + gjournal clear ${rawjournal} >>${LOGOUT} 2>>${LOGOUT} + done + fi +} ; + +# Function which runs gpart and creates a single large GPT partition scheme +init_gpt_full_disk() +{ + _intDISK=$1 + + # Set our sysctl so we can overwrite any geom using drives + sysctl kern.geom.debugflags=16 >>${LOGOUT} 2>>${LOGOUT} + + # Stop any journaling + stop_gjournal "${_intDISK}" + + # Remove any existing partitions + delete_all_gpart "${_intDISK}" + + #Erase any existing bootloader + echo_log "Cleaning up ${_intDISK}" + rc_halt "dd if=/dev/zero of=/dev/${_intDISK} count=2048" + + sleep 2 + + echo_log "Running gpart on ${_intDISK}" + rc_halt "gpart create -s GPT ${_intDISK}" + rc_halt "gpart add -b 34 -s 128 -t freebsd-boot ${_intDISK}" + + echo_log "Stamping boot sector on ${_intDISK}" + rc_halt "gpart bootcode -b /boot/pmbr ${_intDISK}" + +} + +# Function which runs gpart and creates a single large MBR partition scheme +init_mbr_full_disk() +{ + _intDISK=$1 + _intBOOT=$2 + + startblock="63" + + # Set our sysctl so we can overwrite any geom using drives + sysctl kern.geom.debugflags=16 >>${LOGOUT} 2>>${LOGOUT} + + # Stop any journaling + stop_gjournal "${_intDISK}" + + # Remove any existing partitions + delete_all_gpart "${_intDISK}" + + #Erase any existing bootloader + echo_log "Cleaning up ${_intDISK}" + rc_halt "dd if=/dev/zero of=/dev/${_intDISK} count=2048" + + sleep 2 + + echo_log "Running gpart on ${_intDISK}" + rc_halt "gpart create -s mbr ${_intDISK}" + + # Lets figure out disk size in blocks + # Get the cyl of this disk + get_disk_cyl "${_intDISK}" + cyl="${VAL}" + + # Get the heads of this disk + get_disk_heads "${_intDISK}" + head="${VAL}" + + # Get the tracks/sectors of this disk + get_disk_sectors "${_intDISK}" + sec="${VAL}" + + # Multiply them all together to get our total blocks + totalblocks="`expr ${cyl} \* ${head}`" + totalblocks="`expr ${totalblocks} \* ${sec}`" + if [ -z "${totalblocks}" ] + then + totalblocks=`gpart show "${_intDISK}"|tail -2|head -1|awk '{ print $2 }'` + fi + + # Now set the ending block to the total disk block size + sizeblock="`expr ${totalblocks} - ${startblock}`" + + # Install new partition setup + echo_log "Running gpart add on ${_intDISK}" + rc_halt "gpart add -b ${startblock} -s ${sizeblock} -t freebsd -i 1 ${_intDISK}" + sleep 2 + + echo_log "Cleaning up ${_intDISK}s1" + rc_halt "dd if=/dev/zero of=/dev/${_intDISK}s1 count=1024" + + if [ "$_intBOOT" = "bsd" ] ; then + echo_log "Stamping boot0 on ${_intDISK}" + rc_halt "gpart bootcode -b /boot/boot0 ${_intDISK}" + else + echo_log "Stamping boot1 on ${_intDISK}" + rc_halt "gpart bootcode -b /boot/boot1 ${_intDISK}" + fi + +} + +# Function which runs gpart and creates a single large slice +run_gpart_full() +{ + DISK=$1 + BOOT=$2 + SCHEME=$3 + + if [ "$SCHEME" = "MBR" ] ; then + init_mbr_full_disk "$DISK" "$BOOT" + slice="${DISK}-1-mbr" + else + init_gpt_full_disk "$DISK" + slice="${DISK}-1-gpt" + fi + + # Lets save our slice, so we know what to look for in the config file later on + if [ -z "$WORKINGSLICES" ] + then + WORKINGSLICES="${slice}" + export WORKINGSLICES + else + WORKINGSLICES="${WORKINGSLICES} ${slice}" + export WORKINGSLICES + fi +}; + +# Function which runs gpart on a specified s1-4 slice +run_gpart_slice() +{ + DISK=$1 + if [ ! -z "$2" ] + then + BMANAGER="$2" + fi + + # Set the slice we will use later + slice="${1}s${3}" + + # Set our sysctl so we can overwrite any geom using drives + sysctl kern.geom.debugflags=16 >>${LOGOUT} 2>>${LOGOUT} + + # Get the number of the slice we are working on + slicenum="$3" + + # Stop any journaling + stop_gjournal "${slice}" + + # Make sure we have disabled swap on this drive + if [ -e "${slice}b" ] + then + swapoff ${slice}b >/dev/null 2>/dev/null + swapoff ${slice}b.eli >/dev/null 2>/dev/null + fi + + # Modify partition type + echo_log "Running gpart modify on ${DISK}" + rc_halt "gpart modify -t freebsd -i ${slicenum} ${DISK}" + sleep 2 + + # Clean up old partition + echo_log "Cleaning up $slice" + rc_halt "dd if=/dev/zero of=/dev/${DISK}s${slicenum} count=1024" + + sleep 1 + + if [ "${BMANAGER}" = "bsd" ] + then + echo_log "Stamping boot sector on ${DISK}" + rc_halt "gpart bootcode -b /boot/boot0 ${DISK}" + fi + + # Set the slice to the format we'll be using for gpart later + slice="${1}-${3}-mbr" + + # Lets save our slice, so we know what to look for in the config file later on + if [ -z "$WORKINGSLICES" ] + then + WORKINGSLICES="${slice}" + export WORKINGSLICES + else + WORKINGSLICES="${WORKINGSLICES} ${slice}" + export WORKINGSLICES + fi +}; + +# Function which runs gpart and creates a new slice from free disk space +run_gpart_free() +{ + DISK=$1 + SLICENUM=$2 + if [ ! -z "$3" ] + then + BMANAGER="$3" + fi + + # Set our sysctl so we can overwrite any geom using drives + sysctl kern.geom.debugflags=16 >>${LOGOUT} 2>>${LOGOUT} + + slice="${DISK}s${SLICENUM}" + slicenum="${SLICENUM}" + + # Working on the first slice, make sure we have MBR setup + gpart show ${DISK} >/dev/null 2>/dev/null + if [ "$?" != "0" -a "$SLICENUM" = "1" ] ; then + echo_log "Initializing disk, no existing MBR setup" + rc_halt "gpart create -s mbr ${DISK}" + fi + + # Lets get the starting block first + if [ "${slicenum}" = "1" ] + then + startblock="63" + else + # Lets figure out where the prior slice ends + checkslice="`expr ${slicenum} - 1`" + + # Get starting block of this slice + sblk=`gpart show ${DISK} | grep -v ${DISK} | tr -s '\t' ' ' | sed '/^$/d' | grep " ${checkslice} " | cut -d ' ' -f 2` + blksize=`gpart show ${DISK} | grep -v ${DISK} | tr -s '\t' ' ' | sed '/^$/d' | grep " ${checkslice} " | cut -d ' ' -f 3` + startblock="`expr ${sblk} + ${blksize}`" + fi + + # No slice after the new slice, lets figure out the free space remaining and use it + # Get the cyl of this disk + get_disk_cyl "${DISK}" + cyl="${VAL}" + + # Get the heads of this disk + get_disk_heads "${DISK}" + head="${VAL}" + + # Get the tracks/sectors of this disk + get_disk_sectors "${DISK}" + sec="${VAL}" + + # Multiply them all together to get our total blocks + totalblocks="`expr ${cyl} \* ${head}`" + totalblocks="`expr ${totalblocks} \* ${sec}`" + + + # Now set the ending block to the total disk block size + sizeblock="`expr ${totalblocks} - ${startblock}`" + + # Install new partition setup + echo_log "Running gpart on ${DISK}" + rc_halt "gpart add -b ${startblock} -s ${sizeblock} -t freebsd -i ${slicenum} ${DISK}" + sleep 2 + + echo_log "Cleaning up $slice" + rc_halt "dd if=/dev/zero of=/dev/${slice} count=1024" + + sleep 1 + + if [ "${BMANAGER}" = "bsd" ] + then + echo_log "Stamping boot sector on ${DISK}" + rc_halt "gpart bootcode -b /boot/boot0 ${DISK}" + fi + + slice="${DISK}-${SLICENUM}-mbr" + # Lets save our slice, so we know what to look for in the config file later on + if [ -z "$WORKINGSLICES" ] + then + WORKINGSLICES="${slice}" + export WORKINGSLICES + else + WORKINGSLICES="${WORKINGSLICES} ${slice}" + export WORKINGSLICES + fi +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-extractimage.sh b/usr/sbin/pc-sysinstall/backend/functions-extractimage.sh new file mode 100755 index 000000000..76cb247f8 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-extractimage.sh @@ -0,0 +1,457 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-extractimage.sh,v 1.8 2010/10/21 23:08:42 imp Exp $ + +# Functions which perform the extraction / installation of system to disk + +. ${BACKEND}/functions-mountoptical.sh + +# Performs the extraction of data to disk from a uzip or tar archive +start_extract_uzip_tar() +{ + if [ -z "$INSFILE" ] + then + exit_err "ERROR: Called extraction with no install file set!" + fi + + # Check if we have a .count file, and echo it out for a front-end to use in progress bars + if [ -e "${INSFILE}.count" ] + then + echo "INSTALLCOUNT: `cat ${INSFILE}.count`" + fi + + # Check if we are doing an upgrade, and if so use our exclude list + if [ "${INSTALLMODE}" = "upgrade" ] + then + TAROPTS="-X ${PROGDIR}/conf/exclude-from-upgrade" + else + TAROPTS="" + fi + + echo_log "pc-sysinstall: Starting Extraction" + + case ${PACKAGETYPE} in + uzip) + # Start by mounting the uzip image + MDDEVICE=`mdconfig -a -t vnode -o readonly -f ${INSFILE}` + mkdir -p ${FSMNT}.uzip + mount -r /dev/${MDDEVICE}.uzip ${FSMNT}.uzip + if [ "$?" != "0" ] + then + exit_err "ERROR: Failed mounting the ${INSFILE}" + fi + cd ${FSMNT}.uzip + + # Copy over all the files now! + tar cvf - . 2>/dev/null | tar -xpv -C ${FSMNT} ${TAROPTS} -f - 2>&1 | tee -a ${FSMNT}/.tar-extract.log + if [ "$?" != "0" ] + then + cd / + echo "TAR failure occurred:" >>${LOGOUT} + cat ${FSMNT}/.tar-extract.log | grep "tar:" >>${LOGOUT} + umount ${FSMNT}.uzip + mdconfig -d -u ${MDDEVICE} + exit_err "ERROR: Failed extracting the tar image" + fi + + # All finished, now lets umount and cleanup + cd / + umount ${FSMNT}.uzip + mdconfig -d -u ${MDDEVICE} + ;; + tar) + tar -xpv -C ${FSMNT} -f ${INSFILE} ${TAROPTS} >&1 2>&1 + if [ "$?" != "0" ] + then + exit_err "ERROR: Failed extracting the tar image" + fi + ;; + esac + + # Check if this was a FTP download and clean it up now + if [ "${INSTALLMEDIUM}" = "ftp" ] + then + echo_log "Cleaning up downloaded archive" + rm ${INSFILE} + rm ${INSFILE}.count >/dev/null 2>/dev/null + rm ${INSFILE}.md5 >/dev/null 2>/dev/null + fi + + echo_log "pc-sysinstall: Extraction Finished" + +}; + +# Performs the extraction of data to disk from a directory with split files +start_extract_split() +{ + if [ -z "${INSDIR}" ] + then + exit_err "ERROR: Called extraction with no install directory set!" + fi + + echo_log "pc-sysinstall: Starting Extraction" + + # Used by install.sh + DESTDIR="${FSMNT}" + export DESTDIR + + HERE=`pwd` + DIRS=`ls -d ${INSDIR}/*|grep -Ev '(uzip|kernels|src)'` + for dir in ${DIRS} + do + cd "${dir}" + if [ -f "install.sh" ] + then + echo_log "Extracting" `basename ${dir}` + echo "y" | sh install.sh >/dev/null + if [ "$?" != "0" ] + then + exit_err "ERROR: Failed extracting ${dir}" + fi + else + exit_err "ERROR: ${dir}/install.sh does not exist" + fi + done + cd "${HERE}" + + KERNELS=`ls -d ${INSDIR}/*|grep kernels` + cd "${KERNELS}" + if [ -f "install.sh" ] + then + echo_log "Extracting" `basename ${KERNELS}` + echo "y" | sh install.sh generic >/dev/null + if [ "$?" != "0" ] + then + exit_err "ERROR: Failed extracting ${KERNELS}" + fi + rm -rf "${FSMNT}/boot/kernel" + mv "${FSMNT}/boot/GENERIC" "${FSMNT}/boot/kernel" + else + exit_err "ERROR: ${KERNELS}/install.sh does not exist" + fi + cd "${HERE}" + + SOURCE=`ls -d ${INSDIR}/*|grep src` + cd "${SOURCE}" + if [ -f "install.sh" ] + then + echo_log "Extracting" `basename ${SOURCE}` + echo "y" | sh install.sh all >/dev/null + if [ "$?" != "0" ] + then + exit_err "ERROR: Failed extracting ${SOURCE}" + fi + else + exit_err "ERROR: ${SOURCE}/install.sh does not exist" + fi + cd "${HERE}" + + echo_log "pc-sysinstall: Extraction Finished" +}; + +# Function which will attempt to fetch the install file before we start +# the install +fetch_install_file() +{ + get_value_from_cfg ftpPath + if [ -z "$VAL" ] + then + exit_err "ERROR: Install medium was set to ftp, but no ftpPath was provided!" + fi + + FTPPATH="${VAL}" + + # Check if we have a /usr partition to save the download + if [ -d "${FSMNT}/usr" ] + then + OUTFILE="${FSMNT}/usr/.fetch-${INSFILE}" + else + OUTFILE="${FSMNT}/.fetch-${INSFILE}" + fi + + # Do the fetch of the archive now + fetch_file "${FTPPATH}/${INSFILE}" "${OUTFILE}" "1" + + # Check to see if there is a .count file for this install + fetch_file "${FTPPATH}/${INSFILE}.count" "${OUTFILE}.count" "0" + + # Check to see if there is a .md5 file for this install + fetch_file "${FTPPATH}/${INSFILE}.md5" "${OUTFILE}.md5" "0" + + # Done fetching, now reset the INSFILE to our downloaded archived + INSFILE="${OUTFILE}" ; export INSFILE + +}; + +# Function which will download freebsd install files +fetch_split_files() +{ + get_ftpHost + if [ -z "$VAL" ] + then + exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!" + fi + FTPHOST="${VAL}" + + get_ftpDir + if [ -z "$VAL" ] + then + exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!" + fi + FTPDIR="${VAL}" + + # Check if we have a /usr partition to save the download + if [ -d "${FSMNT}/usr" ] + then + OUTFILE="${FSMNT}/usr/.fetch-${INSFILE}" + else + OUTFILE="${FSMNT}/.fetch-${INSFILE}" + fi + + DIRS="base catpages dict doc games info manpages proflibs kernels src" + if [ "${FBSD_ARCH}" = "amd64" ] + then + DIRS="${DIRS} lib32" + fi + + for d in ${DIRS} + do + mkdir -p "${OUTFILE}/${d}" + done + + + NETRC="${OUTFILE}/.netrc" + cat<"${NETRC}" +machine ${FTPHOST} +login anonymous +password anonymous +macdef INSTALL +bin +prompt +EOF + + for d in ${DIRS} + do + cat<>"${NETRC}" +cd ${FTPDIR}/${d} +lcd ${OUTFILE}/${d} +mreget * +EOF + done + + cat<>"${NETRC}" +bye + + +EOF + + # Fetch the files via ftp + echo "$ INSTALL" | ftp -N "${NETRC}" "${FTPHOST}" + + # Done fetching, now reset the INSFILE to our downloaded archived + INSFILE="${OUTFILE}" ; export INSFILE +} + +# Function which does the rsync download from the server specified in cfg +start_rsync_copy() +{ + # Load our rsync config values + get_value_from_cfg rsyncPath + if [ -z "${VAL}" ]; then + exit_err "ERROR: rsyncPath is unset! Please check your config and try again." + fi + RSYNCPATH="${VAL}" ; export RSYNCPATH + + get_value_from_cfg rsyncHost + if [ -z "${VAL}" ]; then + exit_err "ERROR: rsyncHost is unset! Please check your config and try again." + fi + RSYNCHOST="${VAL}" ; export RSYNCHOST + + get_value_from_cfg rsyncUser + if [ -z "${VAL}" ]; then + exit_err "ERROR: rsyncUser is unset! Please check your config and try again." + fi + RSYNCUSER="${VAL}" ; export RSYNCUSER + + get_value_from_cfg rsyncPort + if [ -z "${VAL}" ]; then + exit_err "ERROR: rsyncPort is unset! Please check your config and try again." + fi + RSYNCPORT="${VAL}" ; export RSYNCPORT + + COUNT="1" + while + z=1 + do + if [ ${COUNT} -gt ${RSYNCTRIES} ] + then + exit_err "ERROR: Failed rsync command!" + break + fi + + rsync -avvzHsR \ + --rsync-path="rsync --fake-super" \ + -e "ssh -p ${RSYNCPORT}" \ + ${RSYNCUSER}@${RSYNCHOST}:${RSYNCPATH}/./ ${FSMNT} + if [ "$?" != "0" ] + then + echo "Rsync failed! Tries: ${COUNT}" + else + break + fi + + COUNT="`expr ${COUNT} + 1`" + done + +}; + +start_image_install() +{ + if [ -z "${IMAGE_FILE}" ] + then + exit_err "ERROR: installMedium set to image but no image file specified!" + fi + + # We are ready to start mounting, lets read the config and do it + while read line + do + echo $line | grep "^disk0=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + # Found a disk= entry, lets get the disk we are working on + get_value_from_string "${line}" + strip_white_space "$VAL" + DISK="$VAL" + fi + + echo $line | grep "^commitDiskPart" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + # Found our flag to commit this disk setup / lets do sanity check and do it + if [ ! -z "${DISK}" ] + then + + # Write the image + write_image "${IMAGE_FILE}" "${DISK}" + + # Increment our disk counter to look for next disk and unset + unset DISK + break + + else + exit_err "ERROR: commitDiskPart was called without procceding disk= and partition= entries!!!" + fi + fi + + done <${CFGF} +}; + +# Entrance function, which starts the installation process +init_extraction() +{ + # Figure out what file we are using to install from via the config + get_value_from_cfg installFile + + if [ ! -z "${VAL}" ] + then + INSFILE="${VAL}" ; export INSFILE + else + # If no installFile specified, try our defaults + if [ "$INSTALLTYPE" = "FreeBSD" ] + then + case $PACKAGETYPE in + uzip) INSFILE="${FBSD_UZIP_FILE}" ;; + tar) INSFILE="${FBSD_TAR_FILE}" ;; + split) + INSDIR="${FBSD_BRANCH_DIR}" + + # This is to trick opt_mount into not failing + INSFILE="${INSDIR}" + ;; + esac + else + case $PACKAGETYPE in + uzip) INSFILE="${UZIP_FILE}" ;; + tar) INSFILE="${TAR_FILE}" ;; + esac + fi + export INSFILE + fi + + # Lets start by figuring out what medium we are using + case ${INSTALLMEDIUM} in + LiveCD) # Copies files using cpdup. Ideal for pre-staged fs + if [ ! -f /usr/local/bin/cpdup ] + then + echo "Could not locate cpdup binary" >>${LOGOUT} + exit_err "Could not locate cpdup binary (pkg_add -r cpdup)?" + fi + get_value_from_cfg cpdupPathsPrefix + if [ ! -z "${VAL}" ] + CPDUPPATHPREFIX="" + then + CPDUPPATHPREFIX="${VAL}" ; export CPDUPPATHPREFIX + fi + get_value_from_cfg cpdupPaths + if [ ! -z "${VAL}" ] + then + CPDUPDIR="${VAL}" ; export CPDUPDIR + fi + oIFS=$IFS + IFS="," + for FILE in $CPDUPDIR; do + echo_log "pc-sysinstall: Running cpdup -o ${CPDUPPATHPREFIX}/${FILE} /mnt/${FILE}" + /usr/local/bin/cpdup -o ${CPDUPPATHPREFIX}/${FILE} /mnt/${FILE} >&1 2>&1 + if [ "$?" != "0" ] + then + echo "cpdup failure occurred:" >>${LOGOUT} + exit_err "ERROR: Error occurred during cpdup" + fi + done + IFS=$oIFS + return + ;; + dvd|usb) # Lets start by mounting the disk + opt_mount + if [ ! -z "${INSDIR}" ] + then + INSDIR="${CDMNT}/${INSDIR}" ; export INSDIR + start_extract_split + else + INSFILE="${CDMNT}/${INSFILE}" ; export INSFILE + start_extract_uzip_tar + fi + ;; + ftp) fetch_install_file + start_extract_uzip_tar + ;; + rsync) start_rsync_copy + ;; + *) exit_err "ERROR: Unknown install medium" ;; + esac + +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-ftp.sh b/usr/sbin/pc-sysinstall/backend/functions-ftp.sh new file mode 100755 index 000000000..fa05e3f15 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-ftp.sh @@ -0,0 +1,417 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-ftp.sh,v 1.4 2010/08/24 06:11:46 imp Exp $ + +# Functions which runs commands on the system + +. ${BACKEND}/functions.sh +. ${BACKEND}/functions-parse.sh + +DEFAULT_FTP_SERVER="ftp.freebsd.org" + +MAIN_FTP_SERVERS="\ +Main Site: ftp.freebsd.org" + +IPV6_FTP_SERVERS="\ +IPv6 Main Site: ftp.freebsd.org|\ +IPv6 Ireland: ftp3.ie.freebsd.org|\ +IPv6 Israel: ftp.il.freebsd.org|\ +IPv6 Japan: ftp2.jp.freebsd.org|\ +IPv6 USA: ftp4.us.freebsd.org|\ +IPv6 Turkey: ftp2.tr.freebsd.org" + +PRIMARY_FTP_SERVERS="\ +Primary: ftp1.freebsd.org|\ +Primary #2: ftp2.freebsd.org|\ +Primary #3: ftp3.freebsd.org|\ +Primary #4: ftp4.freebsd.org|\ +Primary #5: ftp5.freebsd.org|\ +Primary #6: ftp6.freebsd.org|\ +Primary #7: ftp7.freebsd.org|\ +Primary #8: ftp8.freebsd.org|\ +Primary #9: ftp9.freebsd.org|\ +Primary #10: ftp10.freebsd.org|\ +Primary #11: ftp11.freebsd.org|\ +Primary #12: ftp12.freebsd.org|\ +Primary #13: ftp13.freebsd.org|\ +Primary #14: ftp14.freebsd.org" + +ARGENTINA_FTP_SERVERS="\ +Argentina: ftp.ar.freebsd.org" + +AUSTRALIA_FTP_SERVERS="\ +Australia: ftp.au.freebsd.org|\ +Australia #2: ftp2.au.freebsd.org|\ +Australia #3: ftp3.au.freebsd.org" + +AUSTRIA_FTP_SERVERS="\ +Austria: ftp.at.freebsd.org|\ +Austria #2: ftp2.at.freebsd.org" + +BRAZIL_FTP_SERVERS="\ +Brazil: ftp.br.freebsd.org|\ +Brazil #2: ftp2.br.freebsd.org|\ +Brazil #3: ftp3.br.freebsd.org|\ +Brazil #4: ftp4.br.freebsd.org|\ +Brazil #5: ftp5.br.freebsd.org|\ +Brazil #6: ftp6.br.freebsd.org|\ +Brazil #7: ftp7.br.freebsd.org" + +CANADA_FTP_SERVERS="\ +Canada: ftp.ca.freebsd.org" + +CHINA_FTP_SERVERS="\ +China: ftp.cn.freebsd.org|\ +China #2: ftp2.cn.freebsd.org" + +CROATIA_FTP_SERVERS="\ +Croatia: ftp.hr.freebsd.org" + +CZECH_REPUBLIC_FTP_SERVERS="\ +Czech Republic: ftp.cz.freebsd.org" + +DENMARK_FTP_SERVERS="\ +Denmark: ftp.dk.freebsd.org|\ +Denmark #2: ftp2.dk.freebsd.org" + +ESTONIA_FTP_SERVERS="\ +Estonia: ftp.ee.freebsd.org" + +FINLAND_FTP_SERVERS="\ +Finland: ftp.fi.freebsd.org" + +FRANCE_FTP_SERVERS="\ +France: ftp.fr.freebsd.org|\ +France #2: ftp2.fr.freebsd.org|\ +France #3: ftp3.fr.freebsd.org|\ +France #5: ftp5.fr.freebsd.org|\ +France #6: ftp6.fr.freebsd.org|\ +France #8: ftp8.fr.freebsd.org" + +GERMANY_FTP_SERVERS="\ +Germany: ftp.de.freebsd.org|\ +Germany #2: ftp2.de.freebsd.org|\ +Germany #3: ftp3.de.freebsd.org|\ +Germany #4: ftp4.de.freebsd.org|\ +Germany #5: ftp5.de.freebsd.org|\ +Germany #6: ftp6.de.freebsd.org|\ +Germany #7: ftp7.de.freebsd.org|\ +Germany #8: ftp8.de.freebsd.org" + +GREECE_FTP_SERVERS="\ +Greece: ftp.gr.freebsd.org|\ +Greece #2: ftp2.gr.freebsd.org" + +HUNGARY_FTP_SERVERS="\ +Hungary: ftp.hu.freebsd.org" + +ICELAND_FTP_SERVERS="\ +Iceland: ftp.is.freebsd.org" + +IRELAND_FTP_SERVERS="\ +Ireland: ftp.ie.freebsd.org|\ +Ireland #2: ftp2.ie.freebsd.org|\ +Ireland #3: ftp3.ie.freebsd.org" + +ISRAEL_FTP_SERVERS="\ +Israel: ftp.il.freebsd.org" + +ITALY_FTP_SERVERS="\ +Italy: ftp.it.freebsd.org" + +JAPAN_FTP_SERVERS="\ +Japan: ftp.jp.freebsd.org|\ +Japan #2: ftp2.jp.freebsd.org|\ +Japan #3: ftp3.jp.freebsd.org|\ +Japan #4: ftp4.jp.freebsd.org|\ +Japan #5: ftp5.jp.freebsd.org|\ +Japan #6: ftp6.jp.freebsd.org|\ +Japan #7: ftp7.jp.freebsd.org|\ +Japan #8: ftp8.jp.freebsd.org|\ +Japan #9: ftp9.jp.freebsd.org" + +KOREA_FTP_SERVERS="\ +Korea: ftp.kr.freebsd.org|\ +Korea #2: ftp2.kr.freebsd.org" + +LITHUANIA_FTP_SERVERS="\ +Lithuania: ftp.lt.freebsd.org" + +NETHERLANDS_FTP_SERVERS="\ +Netherlands: ftp.nl.freebsd.org|\ +Netherlands #2: ftp2.nl.freebsd.org" + +NORWAY_FTP_SERVERS="\ +Norway: ftp.no.freebsd.org|\ +Norway #3: ftp3.no.freebsd.org" + +POLAND_FTP_SERVERS="\ +Poland: ftp.pl.freebsd.org|\ +Poland #2: ftp2.pl.freebsd.org|\ +Poland #5: ftp5.pl.freebsd.org" + +PORTUGAL_FTP_SERVERS="\ +Portugal: ftp.pt.freebsd.org|\ +Portugal #2: ftp2.pt.freebsd.org|\ +Portugal #4: ftp4.pt.freebsd.org" + +ROMANIA_FTP_SERVERS="\ +Romania: ftp.ro.freebsd.org" + +RUSSIA_FTP_SERVERS="\ +Russia: ftp.ru.freebsd.org|\ +Russia #2: ftp2.ru.freebsd.org|\ +Russia #3: ftp3.ru.freebsd.org|\ +Russia #4: ftp4.ru.freebsd.org" + +SINGAPORE_FTP_SERVERS="\ +Singapore: ftp.sg.freebsd.org" + +SLOVAK_REPUBLIC_FTP_SERVERS="\ +Slovak Republic: ftp.sk.freebsd.org" + +SLOVENIA_FTP_SERVERS="\ +Slovenia: ftp.si.freebsd.org|\ +Slovenia #2: ftp2.si.freebsd.org" + +SOUTH_AFRICA_FTP_SERVERS="\ +South Africa: ftp.za.freebsd.org|\ +South Africa #2: ftp2.za.freebsd.org|\ +South Africa #3: ftp3.za.freebsd.org|\ +South Africa #4: ftp4.za.freebsd.org" + +SPAIN_FTP_SERVERS="\ +Spain: ftp.es.freebsd.org|\ +Spain #2: ftp2.es.freebsd.org|\ +Spain #3: ftp3.es.freebsd.org" + +SWEDEN_FTP_SERVERS="\ +Sweden: ftp.se.freebsd.org|\ +Sweden #2: ftp2.se.freebsd.org|\ +Sweden #3: ftp3.se.freebsd.org|\ +Sweden #5: ftp5.se.freebsd.org" + +SWITZERLAND_FTP_SERVERS="\ +Switzerland: ftp.ch.freebsd.org|\ +Switzerland #2: ftp2.ch.freebsd.org" + +TAIWAN_FTP_SERVERS="\ +Taiwan: ftp.tw.freebsd.org|\ +Taiwan #2: ftp2.tw.freebsd.org|\ +Taiwan #3: ftp3.tw.freebsd.org|\ +Taiwan #4: ftp4.tw.freebsd.org|\ +Taiwan #6: ftp6.tw.freebsd.org|\ +Taiwan #11: ftp11.tw.freebsd.org" + +TURKEY_FTP_SERVERS="\ +Turkey: ftp.tr.freebsd.org|\ +Turkey #2: ftp2.tr.freebsd.org" + +UK_FTP_SERVERS="\ +UK: ftp.uk.freebsd.org|\ +UK #2: ftp2.uk.freebsd.org|\ +UK #3: ftp3.uk.freebsd.org|\ +UK #4: ftp4.uk.freebsd.org|\ +UK #5: ftp5.uk.freebsd.org|\ +UK #6: ftp6.uk.freebsd.org" + +UKRAINE_FTP_SERVERS="\ +Ukraine: ftp.ua.freebsd.org|\ +Ukraine #2: ftp2.ua.freebsd.org|\ +Ukraine #5: ftp5.ua.freebsd.org|\ +Ukraine #6: ftp6.ua.freebsd.org|\ +Ukraine #7: ftp7.ua.freebsd.org|\ +Ukraine #8: ftp8.ua.freebsd.org" + +USA_FTP_SERVERS="\ +USA #1: ftp1.us.freebsd.org|\ +USA #2: ftp2.us.freebsd.org|\ +USA #3: ftp3.us.freebsd.org|\ +USA #4: ftp4.us.freebsd.org|\ +USA #5: ftp5.us.freebsd.org|\ +USA #6: ftp6.us.freebsd.org|\ +USA #7: ftp7.us.freebsd.org|\ +USA #8: ftp8.us.freebsd.org|\ +USA #9: ftp9.us.freebsd.org|\ +USA #10: ftp10.us.freebsd.org|\ +USA #11: ftp11.us.freebsd.org|\ +USA #12: ftp12.us.freebsd.org|\ +USA #13: ftp13.us.freebsd.org|\ +USA #14: ftp14.us.freebsd.org|\ +USA #15: ftp15.us.freebsd.org" + +show_mirrors() +{ + MIRRORS="${1}" + if [ -n "${MIRRORS}" ] + then + SAVE_IFS="${IFS}" + IFS="|" + for m in ${MIRRORS} + do + echo "$m" + done + IFS="${SAVE_IFS}" + fi +}; + +set_ftp_mirror() +{ + MIRROR="${1}" + echo "${MIRROR}" > "${CONFDIR}/mirrors.conf" +}; + +get_ftp_mirror() +{ + MIRROR="${DEFAULT_FTP_SERVER}" + if [ -f "${CONFDIR}/mirrors.conf" ] + then + MIRROR=`cat "${CONFDIR}/mirrors.conf"` + fi + + VAL="${MIRROR}" + export VAL +}; + + +get_ftpHost() +{ + get_value_from_cfg ftpPath + ftpPath="$VAL" + + ftpHost=`echo "${ftpPath}" | sed -E 's|^(ftp://)([^/]*)(.*)|\2|'` + VAL="${ftpHost}" + + export VAL +}; + +get_ftpDir() +{ + get_value_from_cfg ftpPath + ftpPath="$VAL" + + ftpDir=`echo "${ftpPath}" | sed -E 's|^(ftp://)([^/]*)(.*)|\3|'` + VAL="${ftpDir}" + + export VAL +}; + +get_ftp_mirrors() +{ + COUNTRY="${1}" + if [ -n "$COUNTRY" ] + then + COUNTRY=`echo $COUNTRY|tr A-Z a-z` + case "${COUNTRY}" in + argentina*) VAL="${ARGENTINA_FTP_SERVERS}" ;; + australia*) VAL="${AUSTRALIA_FTP_SERVERS}" ;; + austria*) VAL="${AUSTRIA_FTP_SERVERS}" ;; + brazil*) VAL="${BRAZIL_FTP_SERVERS}" ;; + canada*) VAL="${CANADA_FTP_SERVERS}" ;; + china*) VAL="${CHINA_FTP_SERVERS}" ;; + croatia*) VAL="${CROATIA_FTP_SERVERS}" ;; + czech*) VAL="${CZECH_REPUBLIC_FTP_SERVERS}" ;; + denmark*) VAL="${DENMARK_FTP_SERVERS}" ;; + estonia*) VAL="${ESTONIA_FTP_SERVERS}" ;; + finland*) VAL="${FINLAND_FTP_SERVERS}" ;; + france*) VAL="${FRANCE_FTP_SERVERS}" ;; + germany*) VAL="${GERMANY_FTP_SERVERS}" ;; + greece*) VAL="${GREECE_FTP_SERVERS}" ;; + hungary*) VAL="${HUNGARY_FTP_SERVERS}" ;; + iceland*) VAL="${ICELAND_FTP_SERVERS}" ;; + ireland*) VAL="${IRELAND_FTP_SERVERS}" ;; + israel*) VAL="${ISRAEL_FTP_SERVERS}" ;; + italy*) VAL="${ITALY_FTP_SERVERS}" ;; + japan*) VAL="${JAPAN_FTP_SERVERS}" ;; + korea*) VAL="${KOREA_FTP_SERVERS}" ;; + lithuania*) VAL="${LITHUANIA_FTP_SERVERS}" ;; + netherlands*) VAL="${NETHERLANDS_FTP_SERVERS}" ;; + norway*) VAL="${NORWAY_FTP_SERVERS}" ;; + poland*) VAL="${POLAND_FTP_SERVERS}" ;; + portugal*) VAL="${PORTUGAL_FTP_SERVERS}" ;; + romania*) VAL="${ROMAINIA_FTP_SERVERS}" ;; + russia*) VAL="${RUSSIA_FTP_SERVERS}" ;; + singapore*) VAL="${SINGAPORE_FTP_SERVERS}" ;; + slovak*) VAL="${SLOVAK_REPUBLIC_FTP_SERVERS}" ;; + slovenia*) VAL="${SLOVENIA_FTP_SERVERS}" ;; + *africa*) VAL="${SOUTH_AFRICA_FTP_SERVERS}" ;; + spain*) VAL="${SPAIN_FTP_SERVERS}" ;; + sweden*) VAL="${SWEDEN_FTP_SERVERS}" ;; + switzerland*) VAL="${SWITZERLAND_FTP_SERVERS}" ;; + taiwan*) VAL="${TAIWAN_FTP_SERVERS}" ;; + turkey*) VAL="${TURKEY_FTP_SERVERS}" ;; + ukraine*) VAL="${UKRAINE_FTP_SERVERS}" ;; + uk*) VAL="${UK_FTP_SERVERS}" ;; + usa*) VAL="${USA_FTP_SERVERS}" ;; + esac + else + VAL="${MAIN_FTP_SERVERS}" + VAL="${VAL}|${IPV6_FTP_SERVERS}" + VAL="${VAL}|${PRIMARY_FTP_SERVERS}" + VAL="${VAL}|${ARGENTINA_FTP_SERVERS}" + VAL="${VAL}|${AUSTRALIA_FTP_SERVERS}" + VAL="${VAL}|${AUSTRIA_FTP_SERVERS}" + VAL="${VAL}|${BRAZIL_FTP_SERVERS}" + VAL="${VAL}|${CANADA_FTP_SERVERS}" + VAL="${VAL}|${CHINA_FTP_SERVERS}" + VAL="${VAL}|${CROATIA_FTP_SERVERS}" + VAL="${VAL}|${CZECH_REPUBLIC_FTP_SERVERS}" + VAL="${VAL}|${DENMARK_FTP_SERVERS}" + VAL="${VAL}|${ESTONIA_FTP_SERVERS}" + VAL="${VAL}|${FINLAND_FTP_SERVERS}" + VAL="${VAL}|${FRANCE_FTP_SERVERS}" + VAL="${VAL}|${GERMANY_FTP_SERVERS}" + VAL="${VAL}|${GREECE_FTP_SERVERS}" + VAL="${VAL}|${HUNGARY_FTP_SERVERS}" + VAL="${VAL}|${ICELAND_FTP_SERVERS}" + VAL="${VAL}|${IRELAND_FTP_SERVERS}" + VAL="${VAL}|${ISRAEL_FTP_SERVERS}" + VAL="${VAL}|${ITALY_FTP_SERVERS}" + VAL="${VAL}|${JAPAN_FTP_SERVERS}" + VAL="${VAL}|${KOREA_FTP_SERVERS}" + VAL="${VAL}|${LITHUANIA_FTP_SERVERS}" + VAL="${VAL}|${NETHERLANDS_FTP_SERVERS}" + VAL="${VAL}|${NORWAY_FTP_SERVERS}" + VAL="${VAL}|${POLAND_FTP_SERVERS}" + VAL="${VAL}|${PORTUGAL_FTP_SERVERS}" + VAL="${VAL}|${ROMANIA_FTP_SERVERS}" + VAL="${VAL}|${RUSSIA_FTP_SERVERS}" + VAL="${VAL}|${SINGAPORE_FTP_SERVERS}" + VAL="${VAL}|${SLOVAK_REPUBLIC_FTP_SERVERS}" + VAL="${VAL}|${SLOVENIA_FTP_SERVERS}" + VAL="${VAL}|${SOUTH_AFRICA_FTP_SERVERS}" + VAL="${VAL}|${SPAIN_FTP_SERVERS}" + VAL="${VAL}|${SWEDEN_FTP_SERVERS}" + VAL="${VAL}|${SWITZERLAND_FTP_SERVERS}" + VAL="${VAL}|${TAIWAN_FTP_SERVERS}" + VAL="${VAL}|${TURKEY_FTP_SERVERS}" + VAL="${VAL}|${UKRAINE_FTP_SERVERS}" + VAL="${VAL}|${UK_FTP_SERVERS}" + VAL="${VAL}|${USA_FTP_SERVERS}" + fi + + export VAL +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-installcomponents.sh b/usr/sbin/pc-sysinstall/backend/functions-installcomponents.sh new file mode 100755 index 000000000..5aa6f847b --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-installcomponents.sh @@ -0,0 +1,167 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-installcomponents.sh,v 1.4 2010/09/08 20:10:24 imp Exp $ + +# Functions which check and load any optional modules specified in the config + +. ${BACKEND}/functions.sh +. ${BACKEND}/functions-parse.sh + +copy_component() +{ + COMPONENT="$1" + FAILED="0" + CFILES="" + + # Check the type, and set the components subdir properly + TYPE="`grep 'type:' ${COMPDIR}/${COMPONENT}/component.cfg | cut -d ' ' -f 2`" + if [ "${TYPE}" = "PBI" ] + then + SUBDIR="PBI" + else + SUBDIR="components" + fi + + # Lets start by downloading / copying the files this component needs + while read line + do + CFILE="`echo $line | cut -d ':' -f 1`" + CFILEMD5="`echo $line | cut -d ':' -f 2`" + CFILE2MD5="`echo $line | cut -d ':' -f 3`" + + case ${INSTALLMEDIUM} in + dvd|usb) + # On both dvd / usb, we can just copy the file + cp ${CDMNT}/${COMPFILEDIR}/${SUBDIR}/${CFILE} \ + ${FSMNT}/${COMPTMPDIR} >>${LOGOUT} 2>>${LOGOUT} + RESULT="$?" + ;; + + ftp) + get_value_from_cfg ftpPath + if [ -z "$VAL" ] + then + exit_err "ERROR: Install medium was set to ftp, but no ftpPath was provided!" + fi + FTPPATH="${VAL}" + + fetch_file "${FTPPATH}/${COMPFILEDIR}/${SUBDIR}/${CFILE}" "${FSMNT}/${COMPTMPDIR}/${CFILE}" "0" + RESULT="$?" + ;; + + sftp) ;; + esac + + if [ "${RESULT}" != "0" ] + then + echo_log "WARNING: Failed to copy ${CFILE}" + FAILED="1" + else + # Now lets check the MD5 to confirm the file is valid + CHECKMD5=`md5 -q ${FSMNT}/${COMPTMPDIR}/${CFILE}` + if [ "${CHECKMD5}" != "${CFILEMD5}" -a "${CHECKMD5}" != "${CFILE2MD5}" ] + then + echo_log "WARNING: ${CFILE} failed md5 checksum" + FAILED="1" + else + if [ -z "${CFILES}" ] + then + CFILES="${CFILE}" + else + CFILES="${CFILES},${CFILE}" + fi + fi + fi + + + done < ${COMPDIR}/${COMPONENT}/distfiles + + if [ "${FAILED}" = "0" ] + then + # Now install the component + run_component_install ${COMPONENT} ${CFILES} + fi + +}; + +run_component_install() +{ + COMPONENT="$1" + CFILES="$1" + + # Lets install this component now + # Start by making a wrapper script which sets the variables + # for the component to use + echo "#!/bin/sh +COMPTMPDIR=\"${COMPTMPDIR}\" +export COMPTMPDIR +CFILE=\"${CFILE}\" +export CFILE + +sh ${COMPTMPDIR}/install.sh + +" >${FSMNT}/.componentwrapper.sh + chmod 755 ${FSMNT}/.componentwrapper.sh + + # Copy over the install script for this component + cp ${COMPDIR}/${COMPONENT}/install.sh ${FSMNT}/${COMPTMPDIR}/ + + echo_log "INSTALL COMPONENT: ${i}" + chroot ${FSMNT} /.componentwrapper.sh >>${LOGOUT} 2>>${LOGOUT} + rm ${FSMNT}/.componentwrapper.sh + +}; + +# Check for any modules specified, and begin loading them +install_components() +{ + # First, lets check and see if we even have any optional modules + get_value_from_cfg installComponents + if [ ! -z "${VAL}" ] + then + # Lets start by cleaning up the string and getting it ready to parse + strip_white_space ${VAL} + COMPONENTS=`echo ${VAL} | sed -e "s|,| |g"` + for i in $COMPONENTS + do + if [ ! -e "${COMPDIR}/${i}/install.sh" -o ! -e "${COMPDIR}/${i}/distfiles" ] + then + echo_log "WARNING: Component ${i} doesn't seem to exist" + else + + # Make the tmpdir on the disk + mkdir -p ${FSMNT}/${COMPTMPDIR} >>${LOGOUT} 2>>${LOGOUT} + + # Start by grabbing the component files + copy_component ${i} + + # Remove the tmpdir now + rm -rf ${FSMNT}/${COMPTMPDIR} >>${LOGOUT} 2>>${LOGOUT} + fi + done + fi + +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-installpackages.sh b/usr/sbin/pc-sysinstall/backend/functions-installpackages.sh new file mode 100644 index 000000000..b8f383a27 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-installpackages.sh @@ -0,0 +1,125 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-installpackages.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +# Functions which check and load any optional packages specified in the config + +. ${BACKEND}/functions.sh +. ${BACKEND}/functions-parse.sh + +# Recursively determine all dependencies for this package +determine_package_dependencies() +{ + local PKGNAME="${1}" + local DEPFILE="${2}" + + grep "${PKGNAME}" "${DEPFILE}" >/dev/null + if [ "$?" -ne "0" ] + then + echo "${PKGNAME}" >> "${DEPFILE}" + get_package_dependencies "${PKGNAME}" "1" + + local DEPS="${VAL}" + for d in ${DEPS} + do + determine_package_dependencies "${d}" "${DEPFILE}" + done + fi +}; + +# Fetch packages dependencies from a file +fetch_package_dependencies() +{ + local DEPFILE + local DEPS + local SAVEDIR + + DEPFILE="${1}" + DEPS=`cat "${DEPFILE}"` + SAVEDIR="${2}" + + for d in ${DEPS} + do + get_package_short_name "${d}" + SNAME="${VAL}" + + get_package_category "${SNAME}" + CATEGORY="${VAL}" + + fetch_package "${CATEGORY}" "${d}" "${SAVEDIR}" + done +}; + +# Check for any packages specified, and begin loading them +install_packages() +{ + # First, lets check and see if we even have any packages to install + get_value_from_cfg installPackages + if [ ! -z "${VAL}" ] + then + HERE=`pwd` + rc_nohalt "mkdir -p ${FSMNT}/${PKGTMPDIR}" + rc_nohalt "cd ${FSMNT}/${PKGTMPDIR}" + + if [ ! -f "${CONFDIR}/INDEX" ] + then + get_package_index + fi + + if [ ! -f "${CONFDIR}/INDEX.parsed" ] + then + parse_package_index + fi + + # Lets start by cleaning up the string and getting it ready to parse + strip_white_space ${VAL} + PACKAGES=`echo ${VAL} | sed -e "s|,| |g"` + for i in $PACKAGES + do + if get_package_name "${i}" + then + PKGNAME="${VAL}" + DEPFILE="${FSMNT}/${PKGTMPDIR}/.${PKGNAME}.deps" + + rc_nohalt "touch ${DEPFILE}" + determine_package_dependencies "${PKGNAME}" "${DEPFILE}" + fetch_package_dependencies "${DEPFILE}" "${FSMNT}/${PKGTMPDIR}" + + # If the package is not already installed, install it! + if ! run_chroot_cmd "pkg_info -e ${PKGNAME}" + then + rc_nohalt "pkg_add -C ${FSMNT} ${PKGTMPDIR}/${PKGNAME}.tbz" + fi + + rc_nohalt "rm ${DEPFILE}" + fi + + rc_nohalt "cd ${HERE}" + done + + rm -rf "${FSMNT}/${PKGTMPDIR}" + fi +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-localize.sh b/usr/sbin/pc-sysinstall/backend/functions-localize.sh new file mode 100755 index 000000000..a56f9575b --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-localize.sh @@ -0,0 +1,511 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-localize.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +# Functions which runs commands on the system + +. ${BACKEND}/functions.sh +. ${BACKEND}/functions-parse.sh + + +# Function which localizes a FreeBSD install +localize_freebsd() +{ + sed -i.bak "s/lang=en_US/lang=${LOCALE}/g" ${FSMNT}/etc/login.conf + rm ${FSMNT}/etc/login.conf.bak +}; + + +# Function which localizes a PC-BSD install +localize_pcbsd() +{ + #Change the skel files + ########################################################################## + sed -i.bak "s/Country=us/Country=${COUNTRY}/g" ${FSMNT}/usr/share/skel/.kde4/share/config/kdeglobals + sed -i.bak "s/Country=us/Country=${COUNTRY}/g" ${FSMNT}/root/.kde4/share/config/kdeglobals + sed -i.bak "s/Language=en_US/Language=${SETLANG}:${LOCALE}/g" ${FSMNT}/usr/share/skel/.kde4/share/config/kdeglobals + sed -i.bak "s/Language=en_US/Language=${SETLANG}:${LOCALE}/g" ${FSMNT}/root/.kde4/share/config/kdeglobals + + #Change KDM Langs + ########################################################################## + sed -i.bak "s/Language=en_US/Language=${LOCALE}.UTF-8/g" ${FSMNT}/usr/local/kde4/share/config/kdm/kdmrc + + # Check if we have a localized splash screen and copy it + if [ -e "${FSMNT}/usr/PCBSD/splash-screens/loading-screen-${SETLANG}.pcx" ] + then + cp ${FSMNT}/usr/PCBSD/splash-screens/loading-screen-${SETLANG}.pcx ${FSMNT}/boot/loading-screen.pcx + fi + +}; + +localize_x_keyboard() +{ + KEYMOD="$1" + KEYLAY="$2" + KEYVAR="$3" + COUNTRY="$4" + OPTION="grp:alt_shift_toggle" + SETXKBMAP="" + + if [ "${COUNTRY}" = "NONE" -o "${COUNTRY}" = "us" -o "${COUNTRY}" = "C" ] ; then + #In this case we don't need any additional language + COUNTRY="" + OPTION="" + else + COUNTRY=",${COUNTRY}" + fi + + if [ "${KEYMOD}" != "NONE" ] + then + SETXKBMAP="-model ${KEYMOD}" + KXMODEL="${KEYMOD}" + else + KXMODEL="pc104" + fi + + if [ "${KEYLAY}" != "NONE" ] + then + localize_key_layout "$KEYLAY" + SETXKBMAP="${SETXKBMAP} -layout ${KEYLAY}" + KXLAYOUT="${KEYLAY}" + else + KXLAYOUT="us" + fi + + if [ "${KEYVAR}" != "NONE" ] + then + SETXKBMAP="${SETXKBMAP} -variant ${KEYVAR}" + KXVAR="(${KEYVAR})" + else + KXVAR="" + fi + + # Setup .xprofile with our setxkbmap call now + if [ ! -z "${SETXKBMAP}" ] + then + if [ ! -e "${FSMNT}/usr/share/skel/.xprofile" ] + then + echo "#!/bin/sh" >${FSMNT}/usr/share/skel/.xprofile + fi + + # Save the keyboard layout for user / root X logins + echo "setxkbmap ${SETXKBMAP}" >>${FSMNT}/usr/share/skel/.xprofile + chmod 755 ${FSMNT}/usr/share/skel/.xprofile + cp ${FSMNT}/usr/share/skel/.xprofile ${FSMNT}/root/.xprofile + + # Save it for KDM + echo "setxkbmap ${SETXKBMAP}" >>${FSMNT}/usr/local/kde4/share/config/kdm/Xsetup + fi + + + # Create the kxkbrc configuration using these options + echo "[Layout] +DisplayNames=${KXLAYOUT}${COUNTRY} +IndicatorOnly=false +LayoutList=${KXLAYOUT}${KXVAR}${COUNTRY} +Model=${KXMODEL} +Options=${OPTION} +ResetOldOptions=true +ShowFlag=true +ShowSingle=false +SwitchMode=WinClass +Use=true " >${FSMNT}/usr/share/skel/.kde4/share/config/kxkbrc + +}; + +localize_key_layout() +{ + + KEYLAYOUT="$1" + + # Set the keylayout in rc.conf + case ${KEYLAYOUT} in + am) KEYLAYOUT_CONSOLE="hy.armscii-8" ;; + ch) KEYLAYOUT_CONSOLE="swissgerman.iso" ;; + cz) KEYLAYOUT_CONSOLE="cz.iso2" ;; + de) KEYLAYOUT_CONSOLE="german.iso" ;; + dk) KEYLAYOUT_CONSOLE="danish.iso" ;; + ee) KEYLAYOUT_CONSOLE="estonian.iso" ;; + es) KEYLAYOUT_CONSOLE="spanish.iso" ;; + fi) KEYLAYOUT_CONSOLE="finnish.iso" ;; + is) KEYLAYOUT_CONSOLE="icelandic.iso" ;; + jp) KEYLAYOUT_CONSOLE="jp.106" ;; + nl) KEYLAYOUT_CONSOLE="dutch.iso.acc" ;; + no) KEYLAYOUT_CONSOLE="norwegian.iso" ;; + pl) KEYLAYOUT_CONSOLE="pl_PL.ISO8859-2" ;; + ru) KEYLAYOUT_CONSOLE="ru.koi8-r" ;; + sk) KEYLAYOUT_CONSOLE="sk.iso2" ;; + se) KEYLAYOUT_CONSOLE="swedish.iso" ;; + tr) KEYLAYOUT_CONSOLE="tr.iso9.q" ;; + gb) KEYLAYOUT_CONSOLE="uk.iso" ;; + *) if [ ! -z "${KEYLAYOUT}" ] + then + KEYLAYOUT_CONSOLE="${KEYLAYOUT}.iso" + fi + ;; + esac + + if [ ! -z "${KEYLAYOUT_CONSOLE}" ] + then + echo "keymap=\"${KEYLAYOUT_CONSOLE}\"" >>${FSMNT}/etc/rc.conf + fi + +}; + +# Function which prunes other l10n files from the KDE install +localize_prune_langs() +{ + get_value_from_cfg localizeLang + KEEPLANG="$VAL" + if [ -z "$KEEPLANG" ] ; then + KEEPLANG="en" + fi + export KEEPLANG + + echo_log "Pruning other l10n files, keeping ${KEEPLANG}" + + # Create the script to do uninstalls + echo '#!/bin/sh + + for i in `pkg_info | grep "kde-l10n" | cut -d " " -f 1` + do + echo "$i" | grep "${KEEPLANG}-kde" + if [ "$?" != "0" ] ; then + pkg_delete ${i} + fi + done + ' > ${FSMNT}/.pruneLangs.sh + + chmod 755 ${FSMNT}/.pruneLangs.sh + chroot ${FSMNT} /.pruneLangs.sh >/dev/null 2>/dev/null + rm ${FSMNT}/.pruneLangs.sh + +}; + +# Function which sets COUNTRY SETLANG and LOCALE based upon $1 +localize_get_codes() +{ + TARGETLANG="${1}" + # Setup the presets for the specific lang + case $TARGETLANG in + af) + COUNTRY="C" + SETLANG="af" + LOCALE="af_ZA" + ;; + ar) + COUNTRY="C" + SETLANG="ar" + LOCALE="en_US" + ;; + az) + COUNTRY="C" + SETLANG="az" + LOCALE="en_US" + ;; + ca) + COUNTRY="es" + SETLANG="es:ca" + LOCALE="ca_ES" + ;; + be) + COUNTRY="be" + SETLANG="be" + LOCALE="be_BY" + ;; + bn) + COUNTRY="bn" + SETLANG="bn" + LOCALE="en_US" + ;; + bg) + COUNTRY="bg" + SETLANG="bg" + LOCALE="bg_BG" + ;; + cs) + COUNTRY="cz" + SETLANG="cs" + LOCALE="cs_CZ" + ;; + da) + COUNTRY="dk" + SETLANG="da" + LOCALE="da_DK" + ;; + de) + COUNTRY="de" + SETLANG="de" + LOCALE="de_DE" + ;; + en_GB) + COUNTRY="gb" + SETLANG="en_GB:cy" + LOCALE="en_GB" + ;; + el) + COUNTRY="gr" + SETLANG="el:gr" + LOCALE="el_GR" + ;; + es) + COUNTRY="es" + SETLANG="es" + LOCALE="es_ES" + ;; + es_LA) + COUNTRY="us" + SETLANG="es:en_US" + LOCALE="es_ES" + ;; + et) + COUNTRY="ee" + SETLANG="et" + LOCALE="et_EE" + ;; + fr) + COUNTRY="fr" + SETLANG="fr" + LOCALE="fr_FR" + ;; + he) + COUNTRY="il" + SETLANG="he:ar" + LOCALE="he_IL" + ;; + hr) + COUNTRY="hr" + SETLANG="hr" + LOCALE="hr_HR" + ;; + hu) + COUNTRY="hu" + SETLANG="hu" + LOCALE="hu_HU" + ;; + it) + COUNTRY="it" + SETLANG="it" + LOCALE="it_IT" + ;; + ja) + COUNTRY="jp" + SETLANG="ja" + LOCALE="ja_JP" + ;; + ko) + COUNTRY="kr" + SETLANG="ko" + LOCALE="ko_KR" + ;; + nl) + COUNTRY="nl" + SETLANG="nl" + LOCALE="nl_NL" + ;; + nn) + COUNTRY="no" + SETLANG="nn" + LOCALE="en_US" + ;; + pa) + COUNTRY="pa" + SETLANG="pa" + LOCALE="en_US" + ;; + pl) + COUNTRY="pl" + SETLANG="pl" + LOCALE="pl_PL" + ;; + pt) + COUNTRY="pt" + SETLANG="pt" + LOCALE="pt_PT" + ;; + pt_BR) + COUNTRY="br" + SETLANG="pt_BR" + LOCALE="pt_BR" + ;; + ru) + COUNTRY="ru" + SETLANG="ru" + LOCALE="ru_RU" + ;; + sl) + COUNTRY="si" + SETLANG="sl" + LOCALE="sl_SI" + ;; + sk) + COUNTRY="sk" + SETLANG="sk" + LOCALE="sk_SK" + ;; + sv) + COUNTRY="se" + SETLANG="sv" + LOCALE="sv_SE" + ;; + uk) + COUNTRY="ua" + SETLANG="uk" + LOCALE="uk_UA" + ;; + vi) + COUNTRY="vn" + SETLANG="vi" + LOCALE="en_US" + ;; + zh_CN) + COUNTRY="cn" + SETLANG="zh_CN" + LOCALE="zh_CN" + ;; + zh_TW) + COUNTRY="tw" + SETLANG="zh_TW" + LOCALE="zh_TW" + ;; + *) + COUNTRY="C" + SETLANG="${TARGETLANG}" + LOCALE="en_US" + ;; + esac + + export COUNTRY SETLANG LOCALE + +}; + +# Function which sets the timezone on the system +set_timezone() +{ + TZONE="$1" + cp ${FSMNT}/usr/share/zoneinfo/${TZONE} ${FSMNT}/etc/localtime +}; + +# Function which enables / disables NTP +set_ntp() +{ + ENABLED="$1" + if [ "$ENABLED" = "yes" -o "${ENABLED}" = "YES" ] + then + cat ${FSMNT}/etc/rc.conf 2>/dev/null | grep 'ntpd_enable="YES"' >/dev/null 2>/dev/null + if [ "$?" != "0" ] + then + echo 'ntpd_enable="YES"' >>${FSMNT}/etc/rc.conf + echo 'ntpd_sync_on_start="YES"' >>${FSMNT}/etc/rc.conf + fi + else + cat ${FSMNT}/etc/rc.conf 2>/dev/null | grep 'ntpd_enable="YES"' >/dev/null 2>/dev/null + if [ "$?" != "0" ] + then + sed -i.bak 's|ntpd_enable="YES"||g' ${FSMNT}/etc/rc.conf + fi + fi +}; + +# Starts checking for localization directives +run_localize() +{ + KEYLAYOUT="NONE" + KEYMOD="NONE" + KEYVAR="NONE" + + while read line + do + # Check if we need to do any localization + echo $line | grep "^localizeLang=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + + # Set our country / lang / locale variables + get_value_from_string "$line" + localize_get_codes ${VAL} + + get_value_from_string "$line" + # If we are doing PC-BSD install, localize it as well as FreeBSD base + if [ "${INSTALLTYPE}" != "FreeBSD" ] + then + localize_pcbsd "$VAL" + fi + localize_freebsd "$VAL" + fi + + # Check if we need to do any keylayouts + echo $line | grep "^localizeKeyLayout=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + get_value_from_string "$line" + KEYLAYOUT="$VAL" + fi + + # Check if we need to do any key models + echo $line | grep "^localizeKeyModel=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + get_value_from_string "$line" + KEYMOD="$VAL" + fi + + # Check if we need to do any key variant + echo $line | grep "^localizeKeyVariant=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + get_value_from_string "$line" + KEYVAR="$VAL" + fi + + + # Check if we need to set a timezone + echo $line | grep "^timeZone=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + get_value_from_string "$line" + set_timezone "$VAL" + fi + + # Check if we need to set a timezone + echo $line | grep "^enableNTP=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + get_value_from_string "$line" + set_ntp "$VAL" + fi + done <${CFGF} + + if [ "${INSTALLTYPE}" != "FreeBSD" ] ; then + # Do our X keyboard localization + localize_x_keyboard "${KEYMOD}" "${KEYLAYOUT}" "${KEYVAR}" "${COUNTRY}" + fi + + # Check if we want to prunt any other KDE lang files to save some disk space + get_value_from_cfg localizePrune + if [ "${VAL}" = "yes" -o "${VAL}" = "YES" ] ; then + localize_prune_langs + fi + + # Update the login.conf db, even if we didn't localize, its a good idea to make sure its up2date + run_chroot_cmd "/usr/bin/cap_mkdb /etc/login.conf" >/dev/null 2>/dev/null + +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-mountdisk.sh b/usr/sbin/pc-sysinstall/backend/functions-mountdisk.sh new file mode 100755 index 000000000..9424a62b2 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-mountdisk.sh @@ -0,0 +1,191 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-mountdisk.sh,v 1.5 2010/10/09 08:52:09 imp Exp $ + +# Functions related mounting the newly formatted disk partitions + +# Mounts all the specified partition to the mount-point +mount_partition() +{ + if [ -z "${1}" -o -z "${2}" -o -z "${3}" ] + then + exit_err "ERROR: Missing arguments for mount_partition" + fi + + PART="${1}" + PARTFS="${2}" + MNTPOINT="${3}" + MNTFLAGS="${4}" + + # Setup the MNTOPTS + if [ -z "${MNTOPTS}" ] + then + MNTFLAGS="-o rw" + else + MNTFLAGS="-o rw,${MNTFLAGS}" + fi + + + #We are on ZFS, lets setup this mount-point + if [ "${PARTFS}" = "ZFS" ] + then + ZPOOLNAME=$(get_zpool_name "${PART}") + + # Check if we have multiple zfs mounts specified + for ZMNT in `echo ${MNTPOINT} | sed 's|,| |g'` + do + # First make sure we create the mount point + if [ ! -d "${FSMNT}${ZMNT}" ] ; then + mkdir -p ${FSMNT}${ZMNT} >>${LOGOUT} 2>>${LOGOUT} + fi + + if [ "${ZMNT}" = "/" ] ; then + ZNAME="" + else + ZNAME="${ZMNT}" + echo_log "zfs create -p ${ZPOOLNAME}${ZNAME}" + rc_halt "zfs create -p ${ZPOOLNAME}${ZNAME}" + fi + sleep 2 + rc_halt "zfs set mountpoint=${FSMNT}${ZNAME} ${ZPOOLNAME}${ZNAME}" + + # Disable atime for this zfs partition, speed increase + rc_nohalt "zfs set atime=off ${ZPOOLNAME}${ZNAME}" + done + + else + # If we are not on ZFS, lets do the mount now + # First make sure we create the mount point + if [ ! -d "${FSMNT}${MNTPOINT}" ] + then + mkdir -p ${FSMNT}${MNTPOINT} >>${LOGOUT} 2>>${LOGOUT} + fi + + echo_log "mount ${MNTFLAGS} /dev/${PART} -> ${FSMNT}${MNTPOINT}" + sleep 2 + rc_halt "mount ${MNTFLAGS} /dev/${PART} ${FSMNT}${MNTPOINT}" + fi + +}; + +# Mounts all the new file systems to prepare for installation +mount_all_filesystems() +{ + # Make sure our mount point exists + mkdir -p ${FSMNT} >/dev/null 2>/dev/null + + # First lets find and mount the / partition + ######################################################### + for PART in `ls ${PARTDIR}` + do + if [ ! -e "/dev/${PART}" ] + then + exit_err "ERROR: The partition ${PART} does not exist. Failure in bsdlabel?" + fi + + PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`" + PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`" + PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`" + + if [ "${PARTENC}" = "ON" ] + then + EXT=".eli" + else + EXT="" + fi + + # Check for root partition for mounting, including ZFS "/,/usr" type + echo "$PARTMNT" | grep "/," >/dev/null + if [ "$?" = "0" -o "$PARTMNT" = "/" ] + then + case ${PARTFS} in + UFS) mount_partition ${PART}${EXT} ${PARTFS} ${PARTMNT} "noatime" ;; + UFS+S) mount_partition ${PART}${EXT} ${PARTFS} ${PARTMNT} "noatime" ;; + UFS+SUJ) mount_partition ${PART}${EXT} ${PARTFS} ${PARTMNT} "noatime" ;; + UFS+J) mount_partition ${PART}${EXT}.journal ${PARTFS} ${PARTMNT} "async,noatime" ;; + ZFS) mount_partition ${PART} ${PARTFS} ${PARTMNT} ;; + IMAGE) mount_partition ${PART} ${PARTFS} ${PARTMNT} ;; + *) exit_err "ERROR: Got unknown file-system type $PARTFS" ;; + esac + fi + done + + # Now that we've mounted "/" lets do any other remaining mount-points + ################################################################## + for PART in `ls ${PARTDIR}` + do + if [ ! -e "/dev/${PART}" ] + then + exit_err "ERROR: The partition ${PART} does not exist. Failure in bsdlabel?" + fi + + PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`" + PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`" + PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`" + + if [ "${PARTENC}" = "ON" ] + then + EXT=".eli" + else + EXT="" + fi + + # Check if we've found "/" again, don't need to mount it twice + echo "$PARTMNT" | grep "/," >/dev/null + if [ "$?" != "0" -a "$PARTMNT" != "/" ] + then + case ${PARTFS} in + UFS) mount_partition ${PART}${EXT} ${PARTFS} ${PARTMNT} "noatime" ;; + UFS+S) mount_partition ${PART}${EXT} ${PARTFS} ${PARTMNT} "noatime" ;; + UFS+SUJ) mount_partition ${PART}${EXT} ${PARTFS} ${PARTMNT} "noatime" ;; + UFS+J) mount_partition ${PART}${EXT}.journal ${PARTFS} ${PARTMNT} "async,noatime" ;; + ZFS) mount_partition ${PART} ${PARTFS} ${PARTMNT} ;; + SWAP) + # Lets enable this swap now + if [ "$PARTENC" = "ON" ] + then + echo_log "Enabling encrypted swap on /dev/${PART}" + rc_halt "geli onetime -d -e 3des ${PART}" + sleep 5 + rc_halt "swapon /dev/${PART}.eli" + else + echo_log "swapon ${PART}" + sleep 5 + rc_halt "swapon /dev/${PART}" + fi + ;; + IMAGE) + if [ ! -d "${PARTMNT}" ] + then + mkdir -p "${PARTMNT}" + fi + mount_partition ${PART} ${PARTFS} ${PARTMNT} + ;; + *) exit_err "ERROR: Got unknown file-system type $PARTFS" ;; + esac + fi + done +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-mountoptical.sh b/usr/sbin/pc-sysinstall/backend/functions-mountoptical.sh new file mode 100755 index 000000000..1e0eff31d --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-mountoptical.sh @@ -0,0 +1,153 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-mountoptical.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +# Functions which perform mounting / unmounting and switching of +# optical / usb media + +. ${BACKEND}/functions.sh +. ${BACKEND}/functions-parse.sh + +# Displays an optical failure message +opt_fail() +{ + # If we got here, we must not have a DVD/USB we can find :( + get_value_from_cfg installInteractive + if [ "${VAL}" = "yes" ] + then + # We are running interactive, and didn't find a DVD, prompt user again + echo_log "DISK ERROR: Unable to find installation disk!" + echo_log "Please insert the installation disk and press enter." + read tmp + else + exit_err "ERROR: Unable to locate installation DVD/USB" + fi +}; + +# Performs the extraction of data to disk +opt_mount() +{ + FOUND="0" + + # Ensure we have a directory where its supposed to be + if [ ! -d "${CDMNT}" ] + then + mkdir -p ${CDMNT} + fi + + + # Start by checking if we already have a cd mounted at CDMNT + mount | grep "${CDMNT} " >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + if [ -e "${CDMNT}/${INSFILE}" ] + then + echo "MOUNTED" >${TMPDIR}/cdmnt + echo_log "FOUND DVD: MOUNTED" + FOUND="1" + return + fi + + # failed to find optical disk + opt_fail + return + fi + + # Setup our loop to search for installation media + while + z=1 + do + + # Loop though and look for an installation disk + for i in `ls -1 /dev/acd* /dev/cd* /dev/scd* /dev/rscd* 2>/dev/null` + do + # Find the CD Device + /sbin/mount_cd9660 $i ${CDMNT} + + # Check the package type to see if we have our install data + if [ -e "${CDMNT}/${INSFILE}" ] + then + echo "${i}" >${TMPDIR}/cdmnt + echo_log "FOUND DVD: ${i}" + FOUND="1" + break + fi + #/sbin/umount ${CDMNT} >/dev/null 2>/dev/null + done + + # If no DVD found, try USB + if [ "$FOUND" != "1" ] + then + # Loop though and look for an installation disk + for i in `ls -1 /dev/da* 2>/dev/null` + do + # Check if we can mount this device UFS + /sbin/mount -r $i ${CDMNT} + + # Check the package type to see if we have our install data + if [ -e "${CDMNT}/${INSFILE}" ] + then + echo "${i}" >${TMPDIR}/cdmnt + echo_log "FOUND USB: ${i}" + FOUND="1" + break + fi + #/sbin/umount ${CDMNT} >/dev/null 2>/dev/null + + # Also check if it is a FAT mount + /sbin/mount -r -t msdosfs $i ${CDMNT} + + # Check the package type to see if we have our install data + if [ -e "${CDMNT}/${INSFILE}" ] + then + echo "${i}" >${TMPDIR}/cdmnt + echo_log "FOUND USB: ${i}" + FOUND="1" + break + fi + #/sbin/umount ${CDMNT} >/dev/null 2>/dev/null + done + fi # End of USB Check + + + if [ "$FOUND" = "1" ] + then + break + fi + + # Failed to find a disk, take action now + opt_fail + + done + +}; + +# Function to unmount optical media +opt_umount() +{ + /sbin/umount ${CDMNT} >/dev/null 2>/dev/null +}; + diff --git a/usr/sbin/pc-sysinstall/backend/functions-networking.sh b/usr/sbin/pc-sysinstall/backend/functions-networking.sh new file mode 100755 index 000000000..fa0fa067e --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-networking.sh @@ -0,0 +1,357 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-networking.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +# Functions which perform our networking setup + +# Function which creates a kde4 .desktop file for the PC-BSD net tray +create_desktop_nettray() +{ + NIC="${1}" + echo "#!/usr/bin/env xdg-open +[Desktop Entry] +Exec=/usr/local/kde4/bin/pc-nettray ${NIC} +Icon=network +StartupNotify=false +Type=Application" > ${FSMNT}/usr/share/skel/.kde4/Autostart/tray-${NIC}.desktop + chmod 744 ${FSMNT}/usr/share/skel/.kde4/Autostart/tray-${NIC}.desktop + +}; + +# Function which checks is a nic is wifi or not +check_is_wifi() +{ + NIC="$1" + ifconfig ${NIC} | grep "802.11" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + return 0 + else + return 1 + fi +}; + +# Function to get the first available wired nic, used for lagg0 setup +get_first_wired_nic() +{ + rm ${TMPDIR}/.niclist >/dev/null 2>/dev/null + # start by getting a list of nics on this system + ${QUERYDIR}/detect-nics.sh > ${TMPDIR}/.niclist + if [ -e "${TMPDIR}/.niclist" ] + then + while read line + do + NIC="`echo $line | cut -d ':' -f 1`" + check_is_wifi ${NIC} + if [ "$?" != "0" ] + then + VAL="${NIC}" ; export VAL + return + fi + done < ${TMPDIR}/.niclist + fi + + VAL="" ; export VAL + return +}; + +# Function which simply enables plain dhcp on all detected nics, not fancy lagg interface +enable_plain_dhcp_all() +{ + rm ${TMPDIR}/.niclist >/dev/null 2>/dev/null + # start by getting a list of nics on this system + ${QUERYDIR}/detect-nics.sh > ${TMPDIR}/.niclist + if [ -e "${TMPDIR}/.niclist" ] + then + echo "# Auto-Enabled NICs from pc-sysinstall" >>${FSMNT}/etc/rc.conf + WLANCOUNT="0" + while read line + do + NIC="`echo $line | cut -d ':' -f 1`" + DESC="`echo $line | cut -d ':' -f 2`" + echo_log "Setting $NIC to DHCP on the system." + check_is_wifi ${NIC} + if [ "$?" = "0" ] + then + # We have a wifi device, setup a wlan* entry for it + WLAN="wlan${WLANCOUNT}" + echo "wlans_${NIC}=\"${WLAN}\"" >>${FSMNT}/etc/rc.conf + echo "ifconfig_${WLAN}=\"DHCP\"" >>${FSMNT}/etc/rc.conf + CNIC="${WLAN}" + WLANCOUNT="`expr ${WLANCOUNT} + 1`" + else + echo "ifconfig_${NIC}=\"DHCP\"" >>${FSMNT}/etc/rc.conf + CNIC="${NIC}" + fi + + done < ${TMPDIR}/.niclist + fi +}; + +# Function which enables fancy lagg dhcp on specified wifi +enable_lagg_dhcp() +{ + WIFINIC="$1" + + # Get the first wired nic + get_first_wired_nic + WIRENIC=$VAL + LAGGPORT="laggport ${WIFINIC}" + + echo "# Auto-Enabled NICs from pc-sysinstall" >>${FSMNT}/etc/rc.conf + if [ ! -z "$WIRENIC" ] + then + echo "ifconfig_${WIRENIC}=\"up\"" >> ${FSMNT}/etc/rc.conf + echo "ifconfig_${WIFINIC}=\"\`ifconfig ${WIRENIC} ether\`\"" >> ${FSMNT}/etc/rc.conf + echo "ifconfig_${WIFINIC}=\"ether \${ifconfig_${WIFINIC}##*ether }\"" >> ${FSMNT}/etc/rc.conf + LAGGPORT="laggport ${WIRENIC} ${LAGGPORT}" + fi + + echo "wlans_${WIFINIC}=\"wlan0\"" >> ${FSMNT}/etc/rc.conf + echo "cloned_interfaces=\"lagg0\"" >> ${FSMNT}/etc/rc.conf + echo "ifconfig_lagg0=\"laggproto failover ${LAGGPORT} DHCP\"" >> ${FSMNT}/etc/rc.conf + +}; + +# Function which detects available nics, and runs them to DHCP on the +save_auto_dhcp() +{ + rm ${TMPDIR}/.niclist >/dev/null 2>/dev/null + # start by getting a list of nics on this system + ${QUERYDIR}/detect-nics.sh > ${TMPDIR}/.niclist + if [ -e "${TMPDIR}/.niclist" ] + then + while read line + do + NIC="`echo $line | cut -d ':' -f 1`" + DESC="`echo $line | cut -d ':' -f 2`" + check_is_wifi "${NIC}" + if [ "$?" = "0" ] + then + # We have a wifi device, lets do fancy lagg interface + enable_lagg_dhcp "${NIC}" + return + fi + + done < ${TMPDIR}/.niclist + fi + + # Got here, looks like no wifi, so lets simply enable plain-ole-dhcp + enable_plain_dhcp_all + +}; + + +# Function which saves a manual nic setup to the installed system +save_manual_nic() +{ + # Get the target nic + NIC="$1" + + get_value_from_cfg netSaveIP + NETIP="${VAL}" + + if [ "$NETIP" = "DHCP" ] + then + echo_log "Setting $NIC to DHCP on the system." + echo "ifconfig_${NIC}=\"DHCP\"" >>${FSMNT}/etc/rc.conf + return 0 + fi + + # If we get here, we have a manual setup, lets do so now + + # Set the manual IP + IFARGS="inet ${NETIP}" + + # Check if we have a netmask to set + get_value_from_cfg netSaveMask + NETMASK="${VAL}" + if [ ! -z "${NETMASK}" ] + then + IFARGS="${IFARGS} netmask ${NETMASK}" + fi + + + echo "# Auto-Enabled NICs from pc-sysinstall" >>${FSMNT}/etc/rc.conf + echo "ifconfig_${NIC}=\"${IFARGS}\"" >>${FSMNT}/etc/rc.conf + + # Check if we have a default router to set + get_value_from_cfg netSaveDefaultRouter + NETROUTE="${VAL}" + if [ ! -z "${NETROUTE}" ] + then + echo "defaultrouter=\"${NETROUTE}\"" >>${FSMNT}/etc/rc.conf + fi + + # Check if we have a nameserver to enable + get_value_from_cfg netSaveNameServer + NAMESERVER="${VAL}" + if [ ! -z "${NAMESERVER}" ] + then + echo "nameserver ${NAMESERVER}" >${FSMNT}/etc/resolv.conf + fi + +}; + +# Function which determines if a nic is active / up +is_nic_active() +{ + ifconfig ${1} | grep "status: active" >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + return 0 + else + return 1 + fi +}; + + +# Function which detects available nics, and runs DHCP on them until +# a success is found +enable_auto_dhcp() +{ + # start by getting a list of nics on this system + ${QUERYDIR}/detect-nics.sh > ${TMPDIR}/.niclist + while read line + do + NIC="`echo $line | cut -d ':' -f 1`" + DESC="`echo $line | cut -d ':' -f 2`" + + is_nic_active "${NIC}" + if [ "$?" = "0" ] ; then + echo_log "Trying DHCP on $NIC $DESC" + dhclient ${NIC} >/dev/null 2>/dev/null + if [ "$?" = "0" ] ; then + # Got a valid DHCP IP, we can return now + WRKNIC="$NIC" ; export WRKNIC + return 0 + fi + fi + done < ${TMPDIR}/.niclist + +}; + +# Get the mac address of a target NIC +get_nic_mac() +{ + FOUNDMAC="`ifconfig ${1} | grep 'ether' | tr -d '\t' | cut -d ' ' -f 2`" + export FOUNDMAC +} + +# Function which performs the manual setup of a target nic in the cfg +enable_manual_nic() +{ + # Get the target nic + NIC="$1" + + # Check that this NIC exists + rc_halt "ifconfig ${NIC}" + + get_value_from_cfg netIP + NETIP="${VAL}" + + if [ "$NETIP" = "DHCP" ] + then + echo_log "Enabling DHCP on $NIC" + rc_halt "dhclient ${NIC}" + return 0 + fi + + # If we get here, we have a manual setup, lets do so now + + # Set the manual IP + rc_halt "ifconfig ${NIC} ${NETIP}" + + # Check if we have a netmask to set + get_value_from_cfg netMask + NETMASK="${VAL}" + if [ ! -z "${NETMASK}" ] + then + rc_halt "ifconfig ${NIC} netmask ${NETMASK}" + fi + + # Check if we have a default router to set + get_value_from_cfg netDefaultRouter + NETROUTE="${VAL}" + if [ ! -z "${NETROUTE}" ] + then + rc_halt "route add default ${NETROUTE}" + fi + + # Check if we have a nameserver to enable + get_value_from_cfg netNameServer + NAMESERVER="${VAL}" + if [ ! -z "${NAMESERVER}" ] + then + echo "nameserver ${NAMESERVER}" >/etc/resolv.conf + fi + + +}; + + +# Function which parses the cfg and enables networking per specified +start_networking() +{ + # Check if we have any networking requested + get_value_from_cfg netDev + if [ -z "${VAL}" ] + then + return 0 + fi + + NETDEV="${VAL}" + if [ "$NETDEV" = "AUTO-DHCP" ] + then + enable_auto_dhcp + else + enable_manual_nic ${NETDEV} + fi + +}; + + +# Function which checks the cfg and enables the specified networking on +# the installed system +save_networking_install() +{ + + # Check if we have any networking requested to save + get_value_from_cfg netSaveDev + if [ -z "${VAL}" ] + then + return 0 + fi + + NETDEV="${VAL}" + if [ "$NETDEV" = "AUTO-DHCP" ] + then + save_auto_dhcp + else + save_manual_nic ${NETDEV} + fi + +}; + diff --git a/usr/sbin/pc-sysinstall/backend/functions-newfs.sh b/usr/sbin/pc-sysinstall/backend/functions-newfs.sh new file mode 100755 index 000000000..5525d1c4c --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-newfs.sh @@ -0,0 +1,217 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-newfs.sh,v 1.6 2010/10/09 08:52:09 imp Exp $ + +# Functions related to disk operations using newfs + + +# Function which performs the ZFS magic +setup_zfs_filesystem() +{ + PART="$1" + PARTFS="$2" + PARTMNT="$3" + EXT="$4" + PARTGEOM="$5" + ZPOOLOPTS="$6" + ROOTSLICE="`echo ${PART} | rev | cut -b 2- | rev`" + ZPOOLNAME=$(get_zpool_name "${PART}") + + # Sleep a few moments, let the disk catch its breath + sleep 5 + sync + + # Check if we have some custom zpool arguments and use them if so + if [ ! -z "${ZPOOLOPTS}" ] ; then + rc_halt "zpool create -m none -f ${ZPOOLNAME} ${ZPOOLOPTS}" + else + # No zpool options, create pool on single device + rc_halt "zpool create -m none -f ${ZPOOLNAME} ${PART}${EXT}" + fi + + # Disable atime for this zfs partition, speed increase + rc_nohalt "zfs set atime=off ${ZPOOLNAME}" + + # Check if we have multiple zfs mounts specified + for i in `echo ${PARTMNT} | sed 's|,| |g'` + do + # Check if we ended up with needing a zfs bootable partition + if [ "${i}" = "/" -o "${i}" = "/boot" ] + then + if [ "$HAVEBOOT" = "YES" ] ; then continue ; fi + if [ "${PARTGEOM}" = "MBR" ] + then + # Lets stamp the proper ZFS boot loader + echo_log "Setting up ZFS boot loader support" + rc_halt "zpool set bootfs=${ZPOOLNAME} ${ZPOOLNAME}" + rc_halt "zpool export ${ZPOOLNAME}" + rc_halt "dd if=/boot/zfsboot of=/dev/${ROOTSLICE} count=1" + rc_halt "dd if=/boot/zfsboot of=/dev/${PART}${EXT} skip=1 seek=1024" + rc_halt "zpool import ${ZPOOLNAME}" + fi + fi + done + +}; + +# Runs newfs on all the partiions which we've setup with bsdlabel +setup_filesystems() +{ + + # Create the keydir + rm -rf ${GELIKEYDIR} >/dev/null 2>/dev/null + mkdir ${GELIKEYDIR} + + # Lets go ahead and read through the saved partitions we created, and determine if we need to run + # newfs on any of them + for PART in `ls ${PARTDIR}` + do + if [ ! -e "/dev/${PART}" ] + then + exit_err "ERROR: The partition ${PART} does not exist. Failure in bsdlabel?" + fi + + PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`" + PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`" + PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`" + PARTLABEL="`cat ${PARTDIR}/${PART} | cut -d ':' -f 4`" + PARTGEOM="`cat ${PARTDIR}/${PART} | cut -d ':' -f 5`" + PARTXTRAOPTS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 6`" + PARTIMAGE="`cat ${PARTDIR}/${PART} | cut -d ':' -f 7`" + + # Make sure journaling isn't enabled on this device + if [ -e "/dev/${PART}.journal" ] + then + rc_nohalt "gjournal stop -f ${PART}.journal" + rc_nohalt "gjournal clear ${PART}" + fi + + # Setup encryption if necessary + if [ "${PARTENC}" = "ON" -a "${PARTFS}" != "SWAP" ] + then + echo_log "Creating geli provider for ${PART}" + rc_halt "dd if=/dev/random of=${GELIKEYDIR}/${PART}.key bs=64 count=1" + rc_halt "geli init -b -s 4096 -P -K ${GELIKEYDIR}/${PART}.key /dev/${PART}" + rc_halt "geli attach -p -k ${GELIKEYDIR}/${PART}.key /dev/${PART}" + + EXT=".eli" + else + # No Encryption + EXT="" + fi + + case ${PARTFS} in + UFS) + echo_log "NEWFS: /dev/${PART} - ${PARTFS}" + sleep 2 + rc_halt "newfs /dev/${PART}${EXT}" + sleep 2 + rc_halt "sync" + rc_halt "glabel label ${PARTLABEL} /dev/${PART}${EXT}" + rc_halt "sync" + + # Set flag that we've found a boot partition + if [ "$PARTMNT" = "/boot" -o "${PARTMNT}" = "/" ] ; then + HAVEBOOT="YES" + fi + sleep 2 + ;; + + UFS+S) + echo_log "NEWFS: /dev/${PART} - ${PARTFS}" + sleep 2 + rc_halt "newfs -U /dev/${PART}${EXT}" + sleep 2 + rc_halt "sync" + rc_halt "glabel label ${PARTLABEL} /dev/${PART}${EXT}" + rc_halt "sync" + # Set flag that we've found a boot partition + if [ "$PARTMNT" = "/boot" -o "${PARTMNT}" = "/" ] ; then + HAVEBOOT="YES" + fi + sleep 2 + ;; + + UFS+SUJ) + echo_log "NEWFS: /dev/${PART} - ${PARTFS}" + sleep 2 + rc_halt "newfs -U /dev/${PART}${EXT}" + sleep 2 + rc_halt "sync" + rc_halt "tunefs -j enable /dev/${PART}${EXT}" + sleep 2 + rc_halt "sync" + rc_halt "glabel label ${PARTLABEL} /dev/${PART}${EXT}" + rc_halt "sync" + # Set flag that we've found a boot partition + if [ "$PARTMNT" = "/boot" -o "${PARTMNT}" = "/" ] ; then + HAVEBOOT="YES" + fi + sleep 2 + ;; + + + UFS+J) + echo_log "NEWFS: /dev/${PART} - ${PARTFS}" + sleep 2 + rc_halt "newfs /dev/${PART}${EXT}" + sleep 2 + rc_halt "gjournal label -f /dev/${PART}${EXT}" + sleep 2 + rc_halt "newfs -O 2 -J /dev/${PART}${EXT}.journal" + sleep 2 + rc_halt "sync" + rc_halt "glabel label ${PARTLABEL} /dev/${PART}${EXT}.journal" + rc_halt "sync" + # Set flag that we've found a boot partition + if [ "$PARTMNT" = "/boot" -o "${PARTMNT}" = "/" ] ; then + HAVEBOOT="YES" + fi + sleep 2 + ;; + + ZFS) + echo_log "NEWFS: /dev/${PART} - ${PARTFS}" + setup_zfs_filesystem "${PART}" "${PARTFS}" "${PARTMNT}" "${EXT}" "${PARTGEOM}" "${PARTXTRAOPTS}" + ;; + + SWAP) + rc_halt "sync" + rc_halt "glabel label ${PARTLABEL} /dev/${PART}${EXT}" + rc_halt "sync" + sleep 2 + ;; + + IMAGE) + write_image "${PARTIMAGE}" "${PART}" + sleep 2 + ;; + + *) exit_err "ERROR: Got unknown file-system type $PARTFS" ;; + esac + + done +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-packages.sh b/usr/sbin/pc-sysinstall/backend/functions-packages.sh new file mode 100755 index 000000000..ac5e21359 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-packages.sh @@ -0,0 +1,376 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-packages.sh,v 1.6 2010/09/08 20:10:24 imp Exp $ + +# Functions which runs commands on the system + +. ${BACKEND}/functions.sh +. ${BACKEND}/functions-parse.sh +. ${BACKEND}/functions-ftp.sh + + +get_package_index_by_ftp() +{ + local INDEX_FILE + local FTP_SERVER + + FTP_SERVER="${1}" + INDEX_FILE="INDEX" + USE_BZIP2=0 + + if [ -f "/usr/bin/bzip2" ] + then + INDEX_FILE="${INDEX_FILE}.bz2" + USE_BZIP2=1 + fi + + INDEX_PATH="${CONFDIR}/${INDEX_FILE}" + fetch_file "${FTP_SERVER}/${INDEX_FILE}" "${INDEX_PATH}" "1" + if [ -f "${INDEX_PATH}" ] && [ "${USE_BZIP2}" -eq "1" ] + then + bzip2 -d "${INDEX_PATH}" + fi +}; + +get_package_index_by_fs() +{ + local INDEX_FILE + + INDEX_FILE="${CDMNT}/packages/INDEX" + fetch_file "${INDEX_FILE}" "${CONFDIR}/" "0" +}; + +get_package_index_size() +{ + if [ -f "${CONFDIR}/INDEX" ] + then + SIZE=`ls -l ${CONFDIR}/INDEX | awk '{ print $5 }'` + else + get_ftp_mirror + FTPHOST="${VAL}" + + FTPDIR="/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}" + FTPPATH="ftp://${FTPHOST}${FTPDIR}/packages" + + fetch -s "${FTPPATH}/INDEX.bz2" + fi +}; + +get_package_index() +{ + RES=0 + + if [ -z "${INSTALLMODE}" ] + then + get_ftp_mirror + FTPHOST="${VAL}" + + FTPDIR="/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}" + FTPPATH="ftp://${FTPHOST}${FTPDIR}/packages" + + get_package_index_by_ftp "${FTPPATH}" + + else + get_value_from_cfg ftpHost + if [ -z "$VAL" ] + then + exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!" + fi + + FTPHOST="${VAL}" + + get_value_from_cfg ftpDir + if [ -z "$VAL" ] + then + exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!" + fi + + FTPDIR="${VAL}" + FTPPATH="ftp://${FTPHOST}${FTPDIR}" + + case "${INSTALLMEDIUM}" in + usb|dvd) get_package_index_by_fs ;; + ftp) get_package_index_by_ftp "${FTPPATH}" ;; + sftp) ;; + *) RES=1 ;; + esac + + fi + + return ${RES} +}; + +parse_package_index() +{ + INDEX_FILE="${PKGDIR}/INDEX" + + exec 3<&0 + exec 0<"${INDEX_FILE}" + + while read -r line + do + PKGNAME="" + CATEGORY="" + PACKAGE="" + DESC="" + DEPS="" + i=0 + + SAVE_IFS="${IFS}" + IFS="|" + + for part in ${line} + do + if [ "${i}" -eq "0" ] + then + PKGNAME="${part}" + + elif [ "${i}" -eq "1" ] + then + PACKAGE=`basename "${part}"` + + elif [ "${i}" -eq "3" ] + then + DESC="${part}" + + elif [ "${i}" -eq "6" ] + then + CATEGORY=`echo "${part}" | cut -f1 -d' '` + + elif [ "${i}" -eq "8" ] + then + DEPS="${part}" + fi + + i=$((i+1)) + done + + echo "${CATEGORY}|${PACKAGE}|${DESC}" >> "${INDEX_FILE}.parsed" + echo "${PACKAGE}|${PKGNAME}|${DEPS}" >> "${INDEX_FILE}.deps" + + IFS="${SAVE_IFS}" + done + + exec 0<&3 +}; + +show_package_file() +{ + PKGFILE="${1}" + + echo "Available Packages:" + + exec 3<&0 + exec 0<"${PKGFILE}" + + while read -r line + do + CATEGORY=`echo "${line}" | cut -f1 -d'|'` + PACKAGE=`echo "${line}" | cut -f2 -d'|'` + DESC=`echo "${line}" | cut -f3 -d'|'` + + echo "${CATEGORY}/${PACKAGE}:${DESC}" + done + + exec 0<&3 +}; + +show_packages_by_category() +{ + CATEGORY="${1}" + INDEX_FILE="${PKGDIR}/INDEX.parsed" + TMPFILE="/tmp/.pkg.cat" + + grep "^${CATEGORY}|" "${INDEX_FILE}" > "${TMPFILE}" + show_package_file "${TMPFILE}" + rm "${TMPFILE}" +}; + +show_package_by_name() +{ + CATEGORY="${1}" + PACKAGE="${2}" + INDEX_FILE="${PKGDIR}/INDEX.parsed" + TMPFILE="/tmp/.pkg.cat.pak" + + grep "^${CATEGORY}|${PACKAGE}" "${INDEX_FILE}" > "${TMPFILE}" + show_package_file "${TMPFILE}" + rm "${TMPFILE}" +}; + +show_packages() +{ + show_package_file "${PKGDIR}/INDEX.parsed" +}; + +get_package_dependencies() +{ + PACKAGE="${1}" + LONG="${2:-0}" + RES=0 + + INDEX_FILE="${PKGDIR}/INDEX.deps" + REGEX="^${PACKAGE}|" + + if [ "${LONG}" -ne "0" ] + then + REGEX="^.*|${PACKAGE}|" + fi + + LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` + DEPS=`echo "${LINE}"|cut -f3 -d'|'` + + VAL="${DEPS}" + export VAL + + if [ -z "${VAL}" ] + then + RES=1 + fi + + return ${RES} +}; + +get_package_name() +{ + PACKAGE="${1}" + RES=0 + + INDEX_FILE="${PKGDIR}/INDEX.deps" + REGEX="^${PACKAGE}|" + + LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` + NAME=`echo "${LINE}"|cut -f2 -d'|'` + + VAL="${NAME}" + export VAL + + if [ -z "${VAL}" ] + then + RES=1 + fi + + return ${RES} +}; + +get_package_short_name() +{ + PACKAGE="${1}" + RES=0 + + INDEX_FILE="${PKGDIR}/INDEX.deps" + REGEX="^.*|${PACKAGE}|" + + LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` + NAME=`echo "${LINE}"|cut -f1 -d'|'` + + VAL="${NAME}" + export VAL + + if [ -z "${VAL}" ] + then + RES=1 + fi + + return ${RES} +}; + +get_package_category() +{ + PACKAGE="${1}" + INDEX_FILE="${PKGDIR}/INDEX.parsed" + RES=0 + + LINE=`grep "|${PACKAGE}|" "${INDEX_FILE}" 2>/dev/null` + NAME=`echo "${LINE}"|cut -f1 -d'|'` + + VAL="${NAME}" + export VAL + + if [ -z "${VAL}" ] + then + RES=1 + fi + + return ${RES} +}; + +fetch_package_by_ftp() +{ + CATEGORY="${1}" + PACKAGE="${2}" + SAVEDIR="${3}" + + get_value_from_cfg ftpHost + if [ -z "$VAL" ] + then + exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!" + fi + FTPHOST="${VAL}" + + get_value_from_cfg ftpDir + if [ -z "$VAL" ] + then + exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!" + fi + FTPDIR="${VAL}" + + PACKAGE="${PACKAGE}.tbz" + FTP_SERVER="ftp://${FTPHOST}${FTPDIR}" + + if [ ! -f "${SAVEDIR}/${PACKAGE}" ] + then + PKGPATH="${CATEGORY}/${PACKAGE}" + FTP_PATH="${FTP_HOST}/packages/${PKGPATH}" + fetch_file "${FTP_PATH}" "${SAVEDIR}/" "0" + fi +}; + +fetch_package_by_fs() +{ + CATEGORY="${1}" + PACKAGE="${2}" + SAVEDIR="${3}" + + PACKAGE="${PACKAGE}.tbz" + if [ ! -f "${SAVEDIR}/${PACKAGE}" ] + then + fetch_file "${CDMNT}/packages/${CATEGORY}/${PACKAGE}" "${SAVEDIR}/" "0" + fi +}; + +fetch_package() +{ + CATEGORY="${1}" + PACKAGE="${2}" + SAVEDIR="${3}" + + case "${INSTALLMEDIUM}" in + usb|dvd) fetch_package_by_fs "${CATEGORY}" "${PACKAGE}" "${SAVEDIR}" ;; + ftp) fetch_package_by_ftp "${CATEGORY}" "${PACKAGE}" "${SAVEDIR}" ;; + sftp) ;; + esac +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-parse.sh b/usr/sbin/pc-sysinstall/backend/functions-parse.sh new file mode 100755 index 000000000..d8e5723df --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-parse.sh @@ -0,0 +1,232 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-parse.sh,v 1.4 2010/09/08 20:10:24 imp Exp $ + +# functions.sh +# Library of functions which pc-sysinstall may call upon for parsing the config + +# which gets the value of a setting in the provided line +get_value_from_string() +{ + if [ ! -z "${1}" ] + then + VAL="`echo ${1} | cut -d '=' -f 2`" + export VAL + else + echo "Error: Did we forgot to supply a string to parse?" + exit 1 + fi +}; + +# Get the value from the cfg file including spaces +get_value_from_cfg_with_spaces() +{ + if [ ! -z "${1}" ] + then + VAL=`grep "^${1}=" ${CFGF} | head -n 1 | cut -d '=' -f 2` + export VAL + else + exit_err "Error: Did we forgot to supply a setting to grab?" + fi +}; + + +# Get the value from the cfg file +get_value_from_cfg() +{ + if [ ! -z "${1}" ] + then + VAL=`grep "^${1}=" ${CFGF} | head -n 1 | cut -d '=' -f 2 | tr -d ' '` + export VAL + else + exit_err "Error: Did we forgot to supply a setting to grab?" + fi +}; + +# Checks the value of a setting in the provided line with supplied possibilities +# 1 = setting we are checking, 2 = list of valid values +if_check_value_exists() +{ + if [ ! -z "${1}" -a ! -z "${2}" ] + then + # Get the first occurance of the setting from the config, strip out whitespace + + VAL=`grep "^${1}" ${CFGF} | head -n 1 | cut -d '=' -f 2 | tr -d ' '` + if [ -z "${VAL}" ] + then + # This value doesn't exist, lets return + return 0 + fi + + + VALID="1" + for i in ${2} + do + VAL=`echo "$VAL"|tr A-Z a-z` + if [ "$VAL" = "${i}" ] + then + VALID="0" + fi + done + if [ "$VALID" = "1" ] + then + exit_err "Error: ${1} is set to unknown value $VAL" + fi + else + exit_err "Error: Did we forgot to supply a string to parse and setting to grab?" + fi +}; + +# Checks the value of a setting in the provided line with supplied possibilities +# 1 = setting we are checking, 2 = list of valid values +check_value() +{ + if [ ! -z "${1}" -a ! -z "${2}" ] + then + # Get the first occurance of the setting from the config, strip out whitespace + VAL=`grep "^${1}" ${CFGF} | head -n 1 | cut -d '=' -f 2 | tr -d ' '` + VALID="1" + for i in ${2} + do + if [ "$VAL" = "${i}" ] + then + VALID="0" + fi + done + if [ "$VALID" = "1" ] + then + exit_err "Error: ${1} is set to unknown value $VAL" + fi + else + exit_err "Error: Did we forgot to supply a string to parse and setting to grab?" + fi +}; + +# Checks for the presense of the supplied arguements in the config file +# 1 = values to confirm exist +file_sanity_check() +{ + if [ ! -z "$CFGF" -a ! -z "$1" ] + then + for i in $1 + do + grep "^${i}=" $CFGF >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + LN=`grep "^${i}=" ${CFGF} | head -n 1 | cut -d '=' -f 2 | tr -d ' '` + if [ -z "${LN}" ] + then + echo "Error: Config fails sanity test! ${i}= is empty" + exit 1 + fi + else + echo "Error: Config fails sanity test! Missing ${i}=" + exit 1 + fi + done + else + echo "Error: Missing config file, and / or values to sanity check for!" + exit 1 + fi +}; + + +# Function which merges the contents of a new config into the specified old one +# Only works with = type configurations +merge_config() +{ + OLDCFG="${1}" + NEWCFG="${2}" + FINALCFG="${3}" + + # Copy our oldcfg to the new one, which will be used as basis + cp ${OLDCFG} ${FINALCFG} + + # Remove blank lines from new file + cat ${NEWCFG} | sed '/^$/d' > ${FINALCFG}.tmp + + # Set our marker if we've found any + FOUNDMERGE="NO" + + while read newline + do + echo ${newline} | grep "^#" >/dev/null 2>/dev/null + if [ "$?" != "0" ] ; then + VAL="`echo ${newline} | cut -d '=' -f 1`" + cat ${OLDCFG} | grep ${VAL} >/dev/null 2>/dev/null + if [ "$?" != "0" ] ; then + if [ "${FOUNDMERGE}" = "NO" ] ; then + echo "" >> ${FINALCFG} + echo "# Auto-merged values from newer ${NEWCFG}" >> ${FINALCFG} + FOUNDMERGE="YES" + fi + echo "${newline}" >> ${FINALCFG} + fi + fi + done < ${FINALCFG}.tmp + rm ${FINALCFG}.tmp + +}; + +# Loop to check for a specified mount-point in a list +check_for_mount() +{ + MNTS="${1}" + FINDMNT="${2}" + + # Check if we found a valid root partition + for CHECKMNT in `echo ${MNTS} | sed 's|,| |g'` + do + if [ "${CHECKMNT}" = "${FINDMNT}" ] ; then + return 0 + fi + done + + return 1 +}; + +# Function which returns the next line in the specified config file +get_next_cfg_line() +{ + CURFILE="$1" + CURLINE="$2" + + FOUND="1" + + while read line + do + if [ "$FOUND" = "0" ] ; then + VAL="$line" ; export VAL + return + fi + if [ "$line" = "${CURLINE}" ] ; then + FOUND="0" + fi + done <${CURFILE} + + # Got here, couldn't find this line or at end of file, set VAL to "" + VAL="" ; export VAL +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-runcommands.sh b/usr/sbin/pc-sysinstall/backend/functions-runcommands.sh new file mode 100755 index 000000000..29e360683 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-runcommands.sh @@ -0,0 +1,110 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-runcommands.sh,v 1.3 2010/08/19 05:59:27 imp Exp $ + +# Functions which runs commands on the system + +. ${BACKEND}/functions.sh +. ${BACKEND}/functions-parse.sh + +run_chroot_cmd() +{ + CMD="$@" + echo_log "Running chroot command: ${CMD}" + echo "$CMD" >${FSMNT}/.runcmd.sh + chmod 755 ${FSMNT}/.runcmd.sh + chroot ${FSMNT} sh /.runcmd.sh + RES=$? + + rm ${FSMNT}/.runcmd.sh + return ${RES} +}; + +run_chroot_script() +{ + SCRIPT="$@" + SBASE=`basename $SCRIPT` + + cp ${SCRIPT} ${FSMNT}/.$SBASE + chmod 755 ${FSMNT}/.${SBASE} + + echo_log "Running chroot script: ${SCRIPT}" + chroot ${FSMNT} /.${SBASE} + RES=$? + + rm ${FSMNT}/.${SBASE} + return ${RES} +}; + + +run_ext_cmd() +{ + CMD="$@" + # Make sure to export FSMNT, in case cmd needs it + export FSMNT + echo_log "Running external command: ${CMD}" + echo "${CMD}"> ${TMPDIR}/.runcmd.sh + chmod 755 ${TMPDIR}/.runcmd.sh + sh ${TMPDIR}/.runcmd.sh + RES=$? + + rm ${TMPDIR}/.runcmd.sh + return ${RES} +}; + + +# Starts the user setup +run_commands() +{ + while read line + do + # Check if we need to run any chroot command + echo $line | grep ^runCommand= >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + get_value_from_string "$line" + run_chroot_cmd "$VAL" + fi + + # Check if we need to run any chroot script + echo $line | grep ^runScript= >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + get_value_from_string "$line" + run_chroot_script "$VAL" + fi + + # Check if we need to run any chroot command + echo $line | grep ^runExtCommand= >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + get_value_from_string "$line" + run_ext_cmd "$VAL" + fi + + done <${CFGF} + +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-unmount.sh b/usr/sbin/pc-sysinstall/backend/functions-unmount.sh new file mode 100755 index 000000000..367cb2715 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-unmount.sh @@ -0,0 +1,209 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-unmount.sh,v 1.4 2010/10/09 07:45:24 imp Exp $ + +# Functions which unmount all mounted disk filesystems + +# Unmount all mounted partitions under specified dir +umount_all_dir() +{ + _udir="$1" + _umntdirs=`mount | sort -r | grep "on $_udir" | cut -d ' ' -f 3` + for _ud in $_umntdirs + do + umount -f ${_ud} + done +} + +# Script that adds our gmirror devices for syncing +start_gmirror_sync() +{ + + cd ${MIRRORCFGDIR} + for DISK in `ls *` + do + MIRRORDISK="`cat ${DISK} | cut -d ':' -f 1`" + MIRRORBAL="`cat ${DISK} | cut -d ':' -f 2`" + MIRRORNAME="`cat ${DISK} | cut -d ':' -f 3`" + + # Start the mirroring service + rc_halt "gmirror insert ${MIRRORNAME} /dev/${MIRRORDISK}" + + done + +}; + +# Unmounts all our mounted file-systems +unmount_all_filesystems() +{ + # Copy the logfile to disk before we unmount + cp ${LOGOUT} ${FSMNT}/root/pc-sysinstall.log + cd / + + # Start by unmounting any ZFS partitions + zfs_cleanup_unmount + + # Lets read our partition list, and unmount each + ################################################################## + for PART in `ls ${PARTDIR}` + do + + PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`" + PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`" + PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`" + PARTLABEL="`cat ${PARTDIR}/${PART} | cut -d ':' -f 4`" + + if [ "${PARTENC}" = "ON" ] + then + EXT=".eli" + else + EXT="" + fi + + #if [ "${PARTFS}" = "SWAP" ] + #then + # rc_nohalt "swapoff /dev/${PART}${EXT}" + #fi + + # Check if we've found "/", and unmount that last + if [ "$PARTMNT" != "/" -a "${PARTMNT}" != "none" -a "${PARTFS}" != "ZFS" ] + then + #rc_halt "umount -f /dev/${PART}${EXT}" + + # Re-check if we are missing a label for this device and create it again if so + if [ ! -e "/dev/label/${PARTLABEL}" ] + then + case ${PARTFS} in + UFS) glabel label ${PARTLABEL} /dev/${PART}${EXT} ;; + UFS+S) glabel label ${PARTLABEL} /dev/${PART}${EXT} ;; + UFS+SUJ) glabel label ${PARTLABEL} /dev/${PART}${EXT} ;; + UFS+J) glabel label ${PARTLABEL} /dev/${PART}${EXT}.journal ;; + *) ;; + esac + fi + fi + + # Check if we've found "/" and make sure the label exists + if [ "$PARTMNT" = "/" -a "${PARTFS}" != "ZFS" ] + then + if [ ! -e "/dev/label/${PARTLABEL}" ] + then + case ${PARTFS} in + UFS) ROOTRELABEL="glabel label ${PARTLABEL} /dev/${PART}${EXT}" ;; + UFS+S) ROOTRELABEL="glabel label ${PARTLABEL} /dev/${PART}${EXT}" ;; + UFS+SUJ) ROOTRELABEL="glabel label ${PARTLABEL} /dev/${PART}${EXT}" ;; + UFS+J) ROOTRELABEL="glabel label ${PARTLABEL} /dev/${PART}${EXT}.journal" ;; + *) ;; + esac + fi + fi + done + + # Last lets the /mnt partition + ######################################################### + #rc_nohalt "umount -f ${FSMNT}" + + # If are using a ZFS on "/" set it to legacy + if [ ! -z "${FOUNDZFSROOT}" ] + then + rc_halt "zfs set mountpoint=legacy ${FOUNDZFSROOT}" + fi + + # If we need to relabel "/" do it now + if [ ! -z "${ROOTRELABEL}" ] + then + ${ROOTRELABEL} + fi + + # Unmount our CDMNT + #rc_nohalt "umount -f ${CDMNT}" >/dev/null 2>/dev/null + + # Check if we need to run any gmirror syncing + ls ${MIRRORCFGDIR}/* >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + # Lets start syncing now + start_gmirror_sync + fi + +}; + +# Unmounts any filesystems after a failure +unmount_all_filesystems_failure() +{ + cd / + + # if we did a fresh install, start unmounting + if [ "${INSTALLMODE}" = "fresh" ] + then + + # Lets read our partition list, and unmount each + ################################################################## + if [ -d "${PARTDIR}" ] + then + for PART in `ls ${PARTDIR}` + do + + PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`" + PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`" + PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`" + + #if [ "${PARTFS}" = "SWAP" ] + #then + # if [ "${PARTENC}" = "ON" ] + # then + # rc_nohalt "swapoff /dev/${PART}.eli" + # else + # rc_nohalt "swapoff /dev/${PART}" + # fi + #fi + + # Check if we've found "/" again, don't need to mount it twice + if [ "$PARTMNT" != "/" -a "${PARTMNT}" != "none" -a "${PARTFS}" != "ZFS" ] + then + #rc_nohalt "umount -f /dev/${PART}" + #rc_nohalt "umount -f ${FSMNT}${PARTMNT}" + fi + done + + # Last lets the /mnt partition + ######################################################### + #rc_nohalt "umount -f ${FSMNT}" + + fi + else + # We are doing a upgrade, try unmounting any of these filesystems + chroot ${FSMNT} /sbin/umount -a >>${LOGOUT} >>${LOGOUT} + umount -f ${FSMNT}/usr >>${LOGOUT} 2>>${LOGOUT} + umount -f ${FSMNT}/dev >>${LOGOUT} 2>>${LOGOUT} + umount -f ${FSMNT} >>${LOGOUT} 2>>${LOGOUT} + rc_nohalt "sh ${TMPDIR}/.upgrade-unmount" + fi + + # Unmount our CDMNT + #rc_nohalt "umount ${CDMNT}" + +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-upgrade.sh b/usr/sbin/pc-sysinstall/backend/functions-upgrade.sh new file mode 100755 index 000000000..0b0663023 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-upgrade.sh @@ -0,0 +1,247 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-upgrade.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +# Functions which perform the mounting / unmount for upgrades + +. ${PROGDIR}/backend/functions-unmount.sh + +mount_target_slice() +{ + MPART="${1}" + + # Import any zpools + zpool import -o altroot=${FSMNT} -a + umount_all_dir "${FSMNT}" + + # Set a variable of files we want to make backups of before doing upgrade + BKFILES="/etc/rc.conf /boot/loader.conf" + + if [ -e "/dev/${MPART}" ] ; then + rc_nohalt "mount /dev/${MPART} ${FSMNT}" + if [ "$?" != "0" ] ; then + # Check if we have ZFS tank name + rc_halt "mount -t zfs ${MPART} ${FSMNT}" + fi + else + # Check if we have ZFS tank name + rc_halt "mount -t zfs ${MPART} ${FSMNT}" + fi + + # Mount devfs in chroot + mount -t devfs devfs ${FSMNT}/dev + + # Check if we have any ZFS partitions to mount + zfs mount -a + + # Mount all the fstab goodies on disk + chroot ${FSMNT} /sbin/mount -a >>${LOGOUT} 2>>${LOGOUT} + chroot ${FSMNT} umount /proc >/dev/null 2>/dev/null + chroot ${FSMNT} umount /compat/linux/proc >/dev/null 2>/dev/null + + # Now before we start the upgrade, make sure we set our noschg flags + echo_log "Cleaning up old filesystem... Please wait..." + rc_halt "chflags -R noschg ${FSMNT}" + + # Make backup copies of some files + for i in ${BKFILES} + do + cp ${FSMNT}${i} ${FSMNT}${i}.preUpgrade >/dev/null 2>/dev/null + done + + # Remove some old dirs + rm -rf ${FSMNT}/etc/rc.d >/dev/null 2>/dev/null + + # If we are doing PC-BSD install, lets cleanup old pkgs on disk + if [ "$INSTALLTYPE" != "FreeBSD" ] + then + echo_log "Removing old packages, this may take a while... Please wait..." + echo '#/bin/sh +for i in `pkg_info -E \*` +do + echo "Uninstalling package: ${i}" + pkg_delete -f ${i} >/dev/null 2>/dev/null +done +' >${FSMNT}/.cleanPkgs.sh + chmod 755 ${FSMNT}/.cleanPkgs.sh + chroot ${FSMNT} /.cleanPkgs.sh + rm ${FSMNT}/.cleanPkgs.sh + run_chroot_cmd "pkg_delete -f \*" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /usr/PCBSD" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /PCBSD" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /var/db/pkgs" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /usr/local32" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /usr/sbin" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /usr/lib" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /usr/bin" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /boot/kernel" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /sbin" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /bin" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /lib" >/dev/null 2>/dev/null + run_chroot_cmd "rm -rf /libexec" >/dev/null 2>/dev/null + fi + +}; + +# Mount the target upgrade partitions +mount_upgrade() +{ + + # Make sure we remove the old upgrade-mount script + rm -rf ${TMPDIR}/.upgrade-unmount >/dev/null 2>/dev/null + + # We are ready to start mounting, lets read the config and do it + while read line + do + echo $line | grep "^disk0=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + + # Found a disk= entry, lets get the disk we are working on + get_value_from_string "${line}" + strip_white_space "$VAL" + DISK="$VAL" + fi + + echo $line | grep "^commitDiskPart" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + # Found our flag to commit this disk setup / lets do sanity check and do it + if [ ! -z "${DISK}" ] + then + + # Start mounting this slice + mount_target_slice "${DISK}" + + # Increment our disk counter to look for next disk and unset + unset DISK + break + else + exit_err "ERROR: commitDiskPart was called without procceding disk= and partition= entries!!!" + fi + fi + + done <${CFGF} + +}; + +copy_skel_files_upgrade() +{ + + # Now make sure we fix any user profile scripts, which cause problems from 7.x->8.x + echo '#!/bin/sh + +cd /home +for i in `ls` +do + + # Backup the old profile dirs + if [ -d "${i}" ] + then + mv /home/${i}/.kde4 /home/${i}/.kde4.preUpgrade >/dev/null 2>/dev/null + mv /home/${i}/.kde /home/${i}/.kde.preUpgrade >/dev/null 2>/dev/null + mv /home/${i}/.fluxbox /home/${i}/.fluxbox.preUpgrade >/dev/null 2>/dev/null + + # Copy over the skel directories + tar cv --exclude "./dot.*" -f - -C /usr/share/skel . 2>/dev/null | tar xvf - -C /home/${i} 2>/dev/null + + for j in `ls /usr/share/skel/dot*` + do + dname=`echo ${j} | sed s/dot//` + cp /usr/share/skel/${j} /home/${i}/${dname} + done + + chown -R ${i}:${i} /home/${i} + fi + +done +' >${FSMNT}/.fixUserProfile.sh + chmod 755 ${FSMNT}/.fixUserProfile.sh + chroot ${FSMNT} /.fixUserProfile.sh >/dev/null 2>/dev/null + rm ${FSMNT}/.fixUserProfile.sh + + + + # if the user wants to keep their original .kde4 profile + ########################################################################### + get_value_from_cfg "upgradeKeepDesktopProfile" + if [ "$VAL" = "YES" -o "$VAL" = "yes" ] ; then + echo '#!/bin/sh + cd /home +for i in `ls` +do + # Import the old config again + if [ -d "${i}/.kde4.preUpgrade" ] + then + # Copy over the skel directories + tar cv -f - -C /home/${i}/.kde4.preUpgrade . 2>/dev/null | tar xvf - -C /home/${i}/.kde4 2>/dev/null + chown -R ${i}:${i} /home/${i}/.kde4 + fi +done +' >${FSMNT}/.fixUserProfile.sh + chmod 755 ${FSMNT}/.fixUserProfile.sh + chroot ${FSMNT} /.fixUserProfile.sh >/dev/null 2>/dev/null + rm ${FSMNT}/.fixUserProfile.sh + + fi + +}; + +# Function which merges some configuration files with the new defaults +merge_old_configs() +{ + + # Merge the loader.conf with old + cp ${FSMNT}/boot/loader.conf ${FSMNT}/boot/loader.conf.new + merge_config "${FSMNT}/boot/loader.conf.preUpgrade" "${FSMNT}/boot/loader.conf.new" "${FSMNT}/boot/loader.conf" + rm ${FSMNT}/boot/loader.conf.new + + # Merge the rc.conf with old + cp ${FSMNT}/etc/rc.conf ${FSMNT}/etc/rc.conf.new + merge_config "${FSMNT}/etc/rc.conf.preUpgrade" "${FSMNT}/etc/rc.conf.new" "${FSMNT}/etc/rc.conf" + rm ${FSMNT}/etc/rc.conf.new + +}; + +# Function which unmounts all the mounted file-systems +unmount_upgrade() +{ + + # If on PC-BSD, make sure we copy any fixed skel files + if [ "$INSTALLTYPE" != "FreeBSD" ] ; then + copy_skel_files_upgrade + fi + + cd / + + # Unmount FS + umount_all_dir "${FSMNT}" + + # Run our saved unmount script for these file-systems + rc_nohalt "umount -f ${FSMNT}" + + umount ${CDMNT} +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions-users.sh b/usr/sbin/pc-sysinstall/backend/functions-users.sh new file mode 100755 index 000000000..be786a101 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions-users.sh @@ -0,0 +1,175 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-users.sh,v 1.3 2010/08/24 06:11:46 imp Exp $ + +# Functions which runs commands on the system + +. ${BACKEND}/functions.sh +. ${BACKEND}/functions-parse.sh + + +# Function which checks and sets up auto-login for a user if specified +check_autologin() +{ + get_value_from_cfg autoLoginUser + if [ ! -z "${VAL}" -a "${INSTALLTYPE}" = "PCBSD" ] + then + AUTOU="${VAL}" + # Add the auto-login user line + sed -i.bak "s/AutoLoginUser=/AutoLoginUser=${AUTOU}/g" ${FSMNT}/usr/local/kde4/share/config/kdm/kdmrc + + # Add the auto-login user line + sed -i.bak "s/AutoLoginEnable=false/AutoLoginEnable=true/g" ${FSMNT}/usr/local/kde4/share/config/kdm/kdmrc + + fi +}; + +# Function which actually runs the adduser command on the filesystem +add_user() +{ + ARGS="${1}" + + if [ -e "${FSMNT}/.tmpPass" ] + then + # Add a user with a supplied password + run_chroot_cmd "cat /.tmpPass | pw useradd ${ARGS}" + rc_halt "rm ${FSMNT}/.tmpPass" + else + # Add a user with no password + run_chroot_cmd "cat /.tmpPass | pw useradd ${ARGS}" + fi + +}; + +# Function which reads in the config, and adds any users specified +setup_users() +{ + + # We are ready to start setting up the users, lets read the config + while read line + do + + echo $line | grep "^userName=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + get_value_from_string "${line}" + USERNAME="$VAL" + fi + + echo $line | grep "^userComment=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + get_value_from_string "${line}" + USERCOMMENT="$VAL" + fi + + echo $line | grep "^userPass=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + get_value_from_string "${line}" + USERPASS="$VAL" + fi + + echo $line | grep "^userShell=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + get_value_from_string "${line}" + strip_white_space "$VAL" + USERSHELL="$VAL" + fi + + echo $line | grep "^userHome=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + get_value_from_string "${line}" + USERHOME="$VAL" + fi + + echo $line | grep "^userGroups=" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + get_value_from_string "${line}" + USERGROUPS="$VAL" + fi + + + echo $line | grep "^commitUser" >/dev/null 2>/dev/null + if [ "$?" = "0" ] + then + # Found our flag to commit this user, lets check and do it + if [ ! -z "${USERNAME}" ] + then + + # Now add this user to the system, by building our args list + ARGS="-n ${USERNAME}" + + if [ ! -z "${USERCOMMENT}" ] + then + ARGS="${ARGS} -c \"${USERCOMMENT}\"" + fi + + if [ ! -z "${USERPASS}" ] + then + ARGS="${ARGS} -h 0" + echo "${USERPASS}" >${FSMNT}/.tmpPass + else + ARGS="${ARGS} -h -" + rm ${FSMNT}/.tmpPass 2>/dev/null 2>/dev/null + fi + + if [ ! -z "${USERSHELL}" ] + then + ARGS="${ARGS} -s \"${USERSHELL}\"" + else + ARGS="${ARGS} -s \"/nonexistant\"" + fi + + if [ ! -z "${USERHOME}" ] + then + ARGS="${ARGS} -m -d \"${USERHOME}\"" + fi + + if [ ! -z "${USERGROUPS}" ] + then + ARGS="${ARGS} -G \"${USERGROUPS}\"" + fi + + add_user "${ARGS}" + + # Unset our vars before looking for any more users + unset USERNAME USERCOMMENT USERPASS USERSHELL USERHOME USERGROUPS + else + exit_err "ERROR: commitUser was called without any userName= entry!!!" + fi + fi + + done <${CFGF} + + + # Check if we need to enable a user to auto-login to the desktop + check_autologin + +}; diff --git a/usr/sbin/pc-sysinstall/backend/functions.sh b/usr/sbin/pc-sysinstall/backend/functions.sh new file mode 100755 index 000000000..5d5200980 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/functions.sh @@ -0,0 +1,497 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions.sh,v 1.7 2010/10/21 22:33:50 imp Exp $ + +# functions.sh +# Library of functions which pc-sysinstall may call upon + +# Function which displays the help-index file +display_help() +{ + if [ -e "${PROGDIR}/doc/help-index" ] + then + cat ${PROGDIR}/doc/help-index + else + echo "Error: ${PROGDIR}/doc/help-index not found" + exit 1 + fi +}; + +# Function which displays the help for a specified command +display_command_help() +{ + if [ -z "$1" ] + then + echo "Error: No command specified to display help for" + exit 1 + fi + + if [ -e "${PROGDIR}/doc/help-${1}" ] + then + cat ${PROGDIR}/doc/help-${1} + else + echo "Error: ${PROGDIR}/doc/help-${1} not found" + exit 1 + fi +}; + +# Function to convert bytes to megabytes +convert_byte_to_megabyte() +{ + if [ -z "${1}" ] + then + echo "Error: No bytes specified!" + exit 1 + fi + + expr -e ${1} / 1048576 +}; + +# Function to convert blocks to megabytes +convert_blocks_to_megabyte() +{ + if [ -z "${1}" ] ; then + echo "Error: No blocks specified!" + exit 1 + fi + + expr -e ${1} / 2048 +}; + +# Takes $1 and strips the whitespace out of it, returns VAL +strip_white_space() +{ + if [ -z "${1}" ] + then + echo "Error: No value setup to strip whitespace from!" + + exit 1 + fi + + VAL=`echo "$1" | tr -d ' '` + export VAL +}; + +# Displays an error message and exits with error 1 +exit_err() +{ + # Echo the message for the users benefit + echo "$1" + + # Save this error to the log file + echo "${1}" >>$LOGOUT + + # Check if we need to unmount any file-systems after this failure + unmount_all_filesystems_failure + + echo "For more details see log file: $LOGOUT" + + exit 1 +}; + +# Run-command, don't halt if command exits with non-0 +rc_nohalt() +{ + CMD="$1" + + if [ -z "${CMD}" ] + then + exit_err "Error: missing argument in rc_nohalt()" + fi + + echo "Running: ${CMD}" >>${LOGOUT} + ${CMD} >>${LOGOUT} 2>>${LOGOUT} + +}; + +# Run-command, halt if command exits with non-0 +rc_halt() +{ + CMD="$1" + + if [ -z "${CMD}" ] + then + exit_err "Error: missing argument in rc_halt()" + fi + + echo "Running: ${CMD}" >>${LOGOUT} + eval ${CMD} >>${LOGOUT} 2>>${LOGOUT} + STATUS="$?" + if [ "${STATUS}" != "0" ] + then + exit_err "Error ${STATUS}: ${CMD}" + fi +}; + +# Run-command w/echo to screen, halt if command exits with non-0 +rc_halt_echo() +{ + CMD="$1" + + if [ -z "${CMD}" ] + then + exit_err "Error: missing argument in rc_halt_echo()" + fi + + echo "Running: ${CMD}" >>${LOGOUT} + ${CMD} 2>&1 | tee -a ${LOGOUT} + STATUS="$?" + if [ "$STATUS" != "0" ] + then + exit_err "Error ${STATUS}: $CMD" + fi + +}; + +# Run-command w/echo, don't halt if command exits with non-0 +rc_nohalt_echo() +{ + CMD="$1" + + if [ -z "${CMD}" ] + then + exit_err "Error: missing argument in rc_nohalt_echo()" + fi + + echo "Running: ${CMD}" >>${LOGOUT} + ${CMD} 2>&1 | tee -a ${LOGOUT} + +}; + +# Echo to the screen and to the log +echo_log() +{ + STR="$1" + + if [ -z "${STR}" ] + then + exit_err "Error: missing argument in echo_log()" + fi + + echo "${STR}" | tee -a ${LOGOUT} +}; + +# Make sure we have a numeric +is_num() +{ + expr $1 + 1 2>/dev/null + return $? +} + +# Function which uses "fetch" to download a file, and display a progress report +fetch_file() +{ + + FETCHFILE="$1" + FETCHOUTFILE="$2" + EXITFAILED="$3" + + SIZEFILE="${TMPDIR}/.fetchSize" + EXITFILE="${TMPDIR}/.fetchExit" + + rm ${SIZEFILE} 2>/dev/null >/dev/null + rm ${FETCHOUTFILE} 2>/dev/null >/dev/null + + fetch -s "${FETCHFILE}" >${SIZEFILE} + SIZE="`cat ${SIZEFILE}`" + SIZE="`expr ${SIZE} / 1024`" + echo "FETCH: ${FETCHFILE}" + echo "FETCH: ${FETCHOUTFILE}" >>${LOGOUT} + + ( fetch -o ${FETCHOUTFILE} "${FETCHFILE}" >/dev/null 2>/dev/null ; echo "$?" > ${EXITFILE} ) & + PID="$!" + while + z=1 + do + + if [ -e "${FETCHOUTFILE}" ] + then + DSIZE=`du -k ${FETCHOUTFILE} | tr -d '\t' | cut -d '/' -f 1` + if [ $(is_num "$DSIZE") ] ; then + if [ $SIZE -lt $DSIZE ] ; then DSIZE="$SIZE"; fi + echo "SIZE: ${SIZE} DOWNLOADED: ${DSIZE}" + echo "SIZE: ${SIZE} DOWNLOADED: ${DSIZE}" >>${LOGOUT} + fi + fi + + # Check if the download is finished + ps -p ${PID} >/dev/null 2>/dev/null + if [ "$?" != "0" ] + then + break; + fi + + sleep 2 + done + + echo "FETCHDONE" + + EXIT="`cat ${EXITFILE}`" + if [ "${EXIT}" != "0" -a "$EXITFAILED" = "1" ] + then + exit_err "Error: Failed to download ${FETCHFILE}" + fi + + return $EXIT + +}; + +# Function to return a the zpool name for this device +get_zpool_name() +{ + DEVICE="$1" + + # Set the base name we use for zpools + BASENAME="tank" + + if [ ! -d "${TMPDIR}/.zpools" ] ; then + mkdir -p ${TMPDIR}/.zpools + fi + + if [ -e "${TMPDIR}/.zpools/${DEVICE}" ] ; then + cat ${TMPDIR}/.zpools/${DEVICE} + return 0 + else + # Need to generate a zpool name for this device + NUM=`ls ${TMPDIR}/.zpools/ | wc -l | sed 's| ||g'` + NEWNAME="${BASENAME}${NUM}" + echo "$NEWNAME" >${TMPDIR}/.zpools/${DEVICE} + echo "${NEWNAME}" + return + fi +}; + +iscompressed() +{ + local FILE + local RES + + FILE="$1" + RES=1 + + if echo "${FILE}" | \ + grep -iE '\.(Z|lzo|lzw|lzma|gz|bz2|xz|zip)$' >/dev/null 2>&1 + then + RES=0 + fi + + return ${RES} +} + +get_compression_type() +{ + local FILE + local SUFFIX + + FILE="$1" + SUFFIX=`echo "${FILE}" | sed -E 's|^(.+)\.(.+)$|\2|'` + + VAL="" + SUFFIX=`echo "${SUFFIX}" | tr A-Z a-z` + case "${SUFFIX}" in + z) VAL="lzw" ;; + lzo) VAL="lzo" ;; + lzw) VAL="lzw" ;; + lzma) VAL="lzma" ;; + gz) VAL="gzip" ;; + bz2) VAL="bzip2" ;; + xz) VAL="xz" ;; + zip) VAL="zip" ;; + esac + + export VAL +} + +write_image() +{ + local DEVICE_FILE + + IMAGE_FILE="$1" + DEVICE_FILE="$2" + + if [ -z "${IMAGE_FILE}" ] + then + exit_err "ERROR: Image file not specified!" + fi + + if [ -z "${DEVICE_FILE}" ] + then + exit_err "ERROR: Device file not specified!" + fi + + if [ ! -f "${IMAGE_FILE}" ] + then + exit_err "ERROR: '${IMAGE_FILE}' does not exist!" + fi + + DEVICE_FILE="${DEVICE_FILE#/dev/}" + DEVICE_FILE="/dev/${DEVICE_FILE}" + + if [ ! -c "${DEVICE_FILE}" ] + then + exit_err "ERROR: '${DEVICE_FILE}' is not a character device!" + fi + + if iscompressed "${IMAGE_FILE}" + then + local COMPRESSION + + get_compression_type "${IMAGE_FILE}" + COMPRESSION="${VAL}" + + case "${COMPRESSION}" in + lzw) + rc_halt "uncompress ${IMAGE_FILE} -c | dd of=${DEVICE_FILE}" + IMAGE_FILE="${IMAGE_FILE%.Z}" + ;; + + lzo) + rc_halt "lzop -d $IMAGE_{FILE} -c | dd of=${DEVICE_FILE}" + IMAGE_FILE="${IMAGE_FILE%.lzo}" + ;; + + lzma) + rc_halt "lzma -d ${IMAGE_FILE} -c | dd of=${DEVICE_FILE}" + IMAGE_FILE="${IMAGE_FILE%.lzma}" + ;; + + gzip) + rc_halt "gunzip ${IMAGE_FILE} -c | dd of=${DEVICE_FILE}" + IMAGE_FILE="${IMAGE_FILE%.gz}" + ;; + + bzip2) + rc_halt "bunzip2 ${IMAGE_FILE} -c | dd of=${DEVICE_FILE}" + IMAGE_FILE="${IMAGE_FILE%.bz2}" + ;; + + xz) + rc_halt "xz -d ${IMAGE_FILE} -c | dd of=${DEVICE_FILE}" + IMAGE_FILE="${IMAGE_FILE%.xz}" + ;; + + zip) + rc_halt "unzip ${IMAGE_FILE} -c | dd of=${DEVICE_FILE}" + IMAGE_FILE="${IMAGE_FILE%.zip}" + ;; + + *) + exit_err "ERROR: ${COMPRESSION} compression is not supported" + ;; + esac + + else + rc_halt "dd if=${IMAGE_FILE} of=${DEVICE_FILE}" + + fi +}; + +install_fresh() +{ + # Lets start setting up the disk slices now + setup_disk_slice + + if [ -z "${ROOTIMAGE}" ] + then + + # Disk setup complete, now lets parse WORKINGSLICES and setup the bsdlabels + setup_disk_label + + # Now we've setup the bsdlabels, lets go ahead and run newfs / zfs + # to setup the filesystems + setup_filesystems + + # Lets mount the partitions now + mount_all_filesystems + + # We are ready to begin extraction, lets start now + init_extraction + + # Check if we have any optional modules to load + install_components + + # Check if we have any packages to install + install_packages + + # Do any localization in configuration + run_localize + + # Save any networking config on the installed system + save_networking_install + + # Now add any users + setup_users + + # Now run any commands specified + run_commands + + # Do any last cleanup / setup before unmounting + run_final_cleanup + + # Unmount and finish up + unmount_all_filesystems + fi + + echo_log "Installation finished!" +}; + +install_image() +{ + # We are ready to begin extraction, lets start now + init_extraction + + echo_log "Installation finished!" +}; + +install_upgrade() +{ + # We're going to do an upgrade, skip all the disk setup + # and start by mounting the target drive/slices + mount_upgrade + + # Start the extraction process + init_extraction + + # Do any localization in configuration + run_localize + + # ow run any commands specified + run_commands + + # Merge any old configuration files + merge_old_configs + + # Check if we have any optional modules to load + install_components + + # Check if we have any packages to install + install_packages + + # All finished, unmount the file-systems + unmount_upgrade + + echo_log "Upgrade finished!" +}; diff --git a/usr/sbin/pc-sysinstall/backend/installimage.sh b/usr/sbin/pc-sysinstall/backend/installimage.sh new file mode 100644 index 000000000..3ef77dd55 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/installimage.sh @@ -0,0 +1,34 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/installimage.sh,v 1.1 2010/09/09 03:33:07 imp Exp $ + +# Source our functions scripts +. ${BACKEND}/functions.sh + +IMAGE_FILE="${1}" +DEVICE_FILE="${2}" + +write_image "${IMAGE_FILE}" "${DEVICE_FILE}" diff --git a/usr/sbin/pc-sysinstall/backend/parseconfig.sh b/usr/sbin/pc-sysinstall/backend/parseconfig.sh new file mode 100755 index 000000000..83c604206 --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/parseconfig.sh @@ -0,0 +1,120 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/parseconfig.sh,v 1.6 2010/10/09 08:52:09 imp Exp $ + +# Main install configuration parsing script +# + +# Source our functions scripts +. ${BACKEND}/functions.sh +. ${BACKEND}/functions-bsdlabel.sh +. ${BACKEND}/functions-cleanup.sh +. ${BACKEND}/functions-disk.sh +. ${BACKEND}/functions-extractimage.sh +. ${BACKEND}/functions-installcomponents.sh +. ${BACKEND}/functions-installpackages.sh +. ${BACKEND}/functions-localize.sh +. ${BACKEND}/functions-mountdisk.sh +. ${BACKEND}/functions-networking.sh +. ${BACKEND}/functions-newfs.sh +. ${BACKEND}/functions-packages.sh +. ${BACKEND}/functions-parse.sh +. ${BACKEND}/functions-runcommands.sh +. ${BACKEND}/functions-ftp.sh +. ${BACKEND}/functions-unmount.sh +. ${BACKEND}/functions-upgrade.sh +. ${BACKEND}/functions-users.sh + +# Check that the config file exists +if [ ! -e "${1}" ] +then + echo "ERROR: Install configuration $1 does not exist!" + exit 1 +fi + +# Set our config file variable +CFGF="$1" + +# Check the dirname of the provided CFGF and make sure its a full path +DIR="`dirname ${CFGF}`" +if [ "${DIR}" = "." ] +then + CFGF="`pwd`/${CFGF}" +fi +export CFGF + +# Start by doing a sanity check, which will catch any obvious mistakes in the config +file_sanity_check "installMode disk0 installType installMedium packageType" + +# We passed the Sanity check, lets grab some of the universal config settings and store them +check_value installMode "fresh upgrade" +check_value bootManager "bsd none" +check_value installType "PCBSD FreeBSD" +check_value installMedium "dvd usb ftp rsync LiveCD" +check_value packageType "uzip tar rsync split cpdup" +if_check_value_exists partition "all ALL s1 s2 s3 s4 free FREE" +if_check_value_exists mirrorbal "load prefer round-robin split" + +# We passed all sanity checks! Yay, lets start the install +echo "File Sanity Check -> OK" + +# Lets load the various universal settings now +get_value_from_cfg installMode +INSTALLMODE="${VAL}" ; export INSTALLMODE + +get_value_from_cfg installType +INSTALLTYPE="${VAL}" ; export INSTALLTYPE + +get_value_from_cfg installMedium +INSTALLMEDIUM="${VAL}" ; export INSTALLMEDIUM + +get_value_from_cfg packageType +PACKAGETYPE="${VAL}" ; export PACKAGETYPE + +# Check if we are doing any networking setup +start_networking + +# If we are not doing an upgrade, lets go ahead and setup the disk +case "${INSTALLMODE}" in + fresh) + if [ "${INSTALLMEDIUM}" = "image" ] + then + install_image + else + install_fresh + fi + ;; + + upgrade) + install_upgrade + ;; + + *) + exit 1 + ;; +esac + +exit 0 diff --git a/usr/sbin/pc-sysinstall/backend/startautoinstall.sh b/usr/sbin/pc-sysinstall/backend/startautoinstall.sh new file mode 100755 index 000000000..153d449de --- /dev/null +++ b/usr/sbin/pc-sysinstall/backend/startautoinstall.sh @@ -0,0 +1,136 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. +# +# Script which reads the pc-autoinstall.conf directive, and begins the install +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/startautoinstall.sh,v 1.2 2010/06/27 16:46:11 imp Exp $ + +# Source our functions scripts +. ${BACKEND}/functions.sh +. ${BACKEND}/functions-networking.sh +. ${BACKEND}/functions-parse.sh + +# Check that the config file exists +if [ ! -e "${1}" ] +then + echo "ERROR: Install configuration $1 does not exist!" + exit 1 +fi + +# Set our config file variable +CONF=${1} +INSTALL_CFG="/tmp/pc-sysinstall.cfg" + +# Check if the config file is on disk as well +PCCFG=`grep "pc_config:" ${CONF} | grep -v "^#" | sed "s|pc_config: ||g" | sed "s|pc_config:||g"` +SHUTDOWN_CMD=`grep "shutdown_cmd:" ${CONF} | grep -v "^#" | sed "s|shutdown_cmd: ||g" | sed "s|shutdown_cmd:||g"` +CONFIRM_INS=`grep "confirm_install:" ${CONF} | grep -v "^#" | sed "s|confirm_install: ||g" | sed "s|confirm_install:||g"` + +# Check that this isn't a http / ftp file we need to fetch later +echo "${PCCFG}" | grep -e "^http" -e "^ftp" > /dev/null 2>/dev/null +if [ "$?" != "0" ] +then + # Copy over the install cfg file, if not done already + if [ ! -e "${INSTALL_CFG}" ] + then + cp ${PCCFG} ${INSTALL_CFG} + fi + # Make sure we have the file which was copied into /tmp previously + if [ ! -e "${INSTALL_CFG}" ] + then + echo "Error: ${INSTALL_CFG} is missing! Exiting in 10 seconds..." + sleep 10 + exit 150 + fi +else + # We need to fetch a remote file, check and set any nic options before doing so + NICCFG=`grep "nic_config:" ${CONF} | grep -v "^#" | sed "s|nic_config: ||g" | sed "s|nic_config:||g"` + if [ "${NICCFG}" = "dhcp-all" -o "${NICCFG}" = "DHCP-ALL" ] + then + # Try to auto-enable dhcp on any nics we find + enable_auto_dhcp + else + echo "Running command \"ifconfig ${NICCFG}\"" + ifconfig ${NICCFG} + WRKNIC="`echo ${NICCFG} | cut -d ' ' -f 1`" + NICDNS=`grep "nic_dns:" ${CONF} | grep -v "^#" | sed "s|nic_dns: ||g" | sed "s|nic_dns:||g"` + NICGATE=`grep "nic_gateway:" ${CONF} | grep -v "^#" | sed "s|nic_gateway: ||g" | sed "s|nic_gateway:||g"` + + echo "nameserver ${NICDNS}" >/etc/resolv.conf + + echo "Running command \"route add default ${NICGATE}\"" + route add default ${NICGATE} + fi + + get_nic_mac "$WRKNIC" + nic_mac="${FOUNDMAC}" + + PCCFG=`echo ${PCCFG} | sed "s|%%NIC_MAC%%|${nic_mac}|g"` + + # Now try to fetch the remove file + echo "Fetching cfg with: \"fetch -o ${INSTALL_CFG} ${PCCFG}\"" + fetch -o "${INSTALL_CFG}" "${PCCFG}" + if [ "$?" != "0" ] + then + echo "ERROR: Failed to fetch ${PCCFG}, install aborted" + exit 150 + fi + +fi + +# If we end up with a valid config, lets proccede +if [ -e "${INSTALL_CFG}" ] +then + + if [ "${CONFIRM_INS}" != "no" -a "${CONFIRM_INS}" != "NO" ] + then + echo "Type in 'install' to begin automated installation. Warning: Data on target disks may be destroyed!" + read tmp + case $tmp in + install|INSTALL) ;; + *) echo "Install canceled!" ; exit 150 ;; + esac + fi + + ${PROGDIR}/pc-sysinstall -c ${INSTALL_CFG} + if [ "$?" = "0" ] + then + if [ ! -z "$SHUTDOWN_CMD" ] + then + ${SHUTDOWN_CMD} + else + echo "SUCCESS: Installation finished! Press ENTER to reboot." + read tmp + shutdown -r now + fi + else + echo "ERROR: Installation failed, press ENTER to drop to shell." + read tmp + /bin/csh + fi +else + echo "ERROR: Failed to get /tmp/pc-sysinstall.cfg for automated install..." + exit 150 +fi diff --git a/usr/sbin/pc-sysinstall/conf/Makefile b/usr/sbin/pc-sysinstall/conf/Makefile new file mode 100644 index 000000000..0fe7ff023 --- /dev/null +++ b/usr/sbin/pc-sysinstall/conf/Makefile @@ -0,0 +1,11 @@ +# $FreeBSD: src/usr.sbin/pc-sysinstall/conf/Makefile,v 1.2 2010/06/24 22:29:36 imp Exp $ + +NO_OBJ= + +FILESGROUPS= CONF LICENSE +CONF= exclude-from-upgrade pc-sysinstall.conf avail-langs +CONFDIR= ${SHAREDIR}/pc-sysinstall/conf +LICENSE= licenses/bsd-en.txt licenses/intel-en.txt licenses/nvidia-en.txt +LICENSEDIR= ${SHAREDIR}/pc-sysinstall/conf/license + +.include diff --git a/usr/sbin/pc-sysinstall/conf/avail-langs b/usr/sbin/pc-sysinstall/conf/avail-langs new file mode 100644 index 000000000..d78e14a9a --- /dev/null +++ b/usr/sbin/pc-sysinstall/conf/avail-langs @@ -0,0 +1,20 @@ +en English +bg Bulgarian +ca Catalan +zh_TW Chinese_(Taiwan) +cs Czech +nl Dutch +fr French +de German +en_GB English_(UK) +en_ZA English_(South Africa) +it Italian +ja Japanese +pt_BR Portuguese_(Brazil) +pl Polish +pa Punjabi +ru Russian +sk Slovak +sl Slovenian +es Spanish +uk Ukrainian diff --git a/usr/sbin/pc-sysinstall/conf/exclude-from-upgrade b/usr/sbin/pc-sysinstall/conf/exclude-from-upgrade new file mode 100644 index 000000000..b0529d411 --- /dev/null +++ b/usr/sbin/pc-sysinstall/conf/exclude-from-upgrade @@ -0,0 +1,15 @@ +etc/fstab +dev +etc/passwd +etc/pwd.db +etc/group +etc/master.passwd +etc/spwd.db +etc/hosts +etc/resolv.conf +etc/localtime +etc/hosts +etc/X11 +etc/nsmb.conf +usr/Programs/.config/ProgList +Programs/.config/ProgList diff --git a/usr/sbin/pc-sysinstall/conf/licenses/bsd-en.txt b/usr/sbin/pc-sysinstall/conf/licenses/bsd-en.txt new file mode 100644 index 000000000..a30b67e97 --- /dev/null +++ b/usr/sbin/pc-sysinstall/conf/licenses/bsd-en.txt @@ -0,0 +1,24 @@ +SECTION 1: BSD LICENSE +-------------------------------------------------------------------------------- +Copyright (c) 1998, Regents of the University of California +All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 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. + Neither the name of the University of California, Berkeley nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPR +ESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO E +VENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCI +DENTAL, 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 AN 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. diff --git a/usr/sbin/pc-sysinstall/conf/licenses/intel-en.txt b/usr/sbin/pc-sysinstall/conf/licenses/intel-en.txt new file mode 100644 index 000000000..0858ff732 --- /dev/null +++ b/usr/sbin/pc-sysinstall/conf/licenses/intel-en.txt @@ -0,0 +1,207 @@ +Section 2: Intel Firmware license +-------------------------------------------------------------------------------- + TERMS AND CONDITIONS + IMPORTANT - PLEASE READ BEFORE INSTALLING OR USING THIS INTEL(C) SOFTWARE + +Do not use or load this firmware (the "Software") until you have carefully read +the following terms and conditions. By loading or using the Software, you agree +to the terms of this Agreement. If you do not wish to so agree, do not install +or use the Software. + +LICENSEES: + +Please note: + +* If you are an End-User, only Exhibit A, the SOFTWARE LICENSE AGREEMENT, + applies. +* If you are an Original Equipment Manufacturer (OEM), Independent Hardware + Vendor (IHV), or Independent Software Vendor (ISV), this complete Agreement + applies + +-------------------------------------------------------------------------------- + +For OEMs, IHVs, and ISVs: + +LICENSE. This Software is licensed for use only in conjunction with Intel +component products. Use of the Software in conjunction with non-Intel component +products is not licensed hereunder. Subject to the terms of this Agreement, +Intel grants to you a nonexclusive, nontransferable, worldwide, fully paid-up +license under Intel's copyrights to: (i) copy the Software internally for your +own development and maintenance purposes; (ii) copy and distribute the Software +to your end-users, but only under a license agreement with terms at least as +restrictive as those contained in Intel's Final, Single User License Agreement, +attached as Exhibit A; and (iii) modify, copy and distribute the end-user +documentation which may accompany the Software, but only in association with +the Software. + +If you are not the final manufacturer or vendor of a computer system or software +program incorporating the Software, then you may transfer a copy of the +Software, including any related documentation (modified or unmodified) to your +recipient for use in accordance with the terms of this Agreement, provided such +recipient agrees to be fully bound by the terms hereof. You shall not otherwise +assign, sublicense, lease, or in any other way transfer or disclose Software to +any third party. You may not, nor may you assist any other person or entity to +modify, translate, convert to another programming language, decompile, reverse +engineer, or disassemble any portion of the Software or otherwise attempt to +derive source code from any object code modules of the Software or any internal +data files generated by the Software. Your rights to redistribute the Software +shall be contingent upon your installation of this Agreement in its entirety in +the same directory as the Software. + +CONTRACTORS. For the purpose of this Agreement, and notwithstanding anything +to the contrary hereunder, solely with respect to the requirements for +compliance with the terms hereunder, any contractors or consultants that You +use to perform the work or otherwise assist You in the development or products +using this Software shall be deemed to be End Users and accordingly, upon +receipt of the Software, shall be bound by the terms of Exhibit A, Software +License Agreement. No additional agreement between You and such consultants or +contractors is required under this Agreement to detail such compliance. + +TRADEMARKS. Except as expressly provided herein, you shall not use Intel's +name in any publications, advertisements, or other announcements without +Intel's prior written consent. You do not have any rights to use any Intel +trademarks or logos. + +OWNERSHIP OF SOFTWARE AND COPYRIGHTS. Software and accompanying materials, if +any, are owned by Intel or its suppliers and licensors and may be protected by +copyright, trademark, patent and trade secret law and international treaties. +Any rights, express or implied, in the intellectual property embodied in the +foregoing, other than those specified in this Agreement, are reserved by Intel +and its suppliers and licensors or otherwise as set forth in any applicable +open source license agreement. You will keep the Software free of liens, +attachments, and other encumbrances. You agree not to remove any proprietary +notices and/or any labels from the Software and accompanying materials without +prior written approval by Intel + +LIMITATION OF LIABILITY. IN NO EVENT SHALL INTEL OR ITS SUPPLIERS AND LICENSORS +BE LIABLE FOR ANY DAMAGES WHATSOEVER FROM ANY CAUSE OF ACTION OF ANY KIND +(INCLUDING, WITHOUT LIMITATION, LOST PROFITS, BUSINESS INTERRUPTION, OR LOST +INFORMATION) ARISING OUT OF THE USE, MODIFICATION, OR INABILITY TO USE THE +INTEL SOFTWARE, OR OTHERWISE, NOR FOR PUNITIVE, INCIDENTAL, CONSEQUENTIAL, OR +SPECIAL DAMAGES OF ANY KIND, EVEN IF INTEL OR ITS SUPPLIERS AND LICENSORS HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS PROHIBIT +EXCLUSION OR LIMITATION OF LIABILITY FOR IMPLIED WARRANTIES, CONSEQUENTIAL OR +INCIDENTAL DAMAGES, SO CERTAIN LIMITATIONS MAY NOT APPLY. YOU MAY ALSO HAVE +OTHER LEGAL RIGHTS THAT VARY BETWEEN JURISDICTIONS. + +EXCLUSION OF WARRANTIES. THE SOFTWARE IS PROVIDED "AS IS" AND POSSIBLY WITH +FAULTS. UNLESS EXPRESSLY AGREED OTHERWISE, INTEL AND ITS SUPPLIERS AND +LICENSORS DISCLAIM ANY AND ALL WARRANTIES AND GUARANTEES, EXPRESS, IMPLIED OR +OTHERWISE, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR PURPOSE. Intel does not warrant +or assume responsibility for the accuracy or completeness of any information, +text, graphics, links or other items contained within the Software. You assume +all liability, financial or otherwise, associated with Your use or disposition +of the Software. + +APPLICABLE LAW. Claims arising under this Agreement shall be governed by the +laws of State of California], excluding its principles of conflict of laws and +the United Nations Convention on Contracts for the Sale of Goods. + +WAIVER AND AMENDMENT. No modification, amendment or waiver of any provision of +this Agreement shall be effective unless in writing and signed by an officer of +Intel. No failure or delay in exercising any right, power, or remedy under +this Agreement shall operate as a waiver of any such right, power or remedy. +Without limiting the foregoing, terms and conditions on any purchase orders or +similar materials submitted by you to Intel, and any terms contained in IntelÂ’s +standard acknowledgment form that are in conflict with these terms, shall be of +no force or effect. + +SEVERABILITY. If any provision of this Agreement is held by a court of +competent jurisdiction to be contrary to law, such provision shall be changed +and interpreted so as to best accomplish the objectives of the original +provision to the fullest extent allowed by law and the remaining provisions of +this Agreement shall remain in full force and effect. + +EXPORT RESTRICTIONS. Each party acknowledges that the Software is subject to +applicable import and export regulations of the United States and of the +countries in which each party transacts business, specifically including U.S. +Export Administration Act and Export Administration Regulations. Each party +shall comply with such laws and regulations, as well as all other laws and +regulations applicable to the Software. Without limiting the generality of the +foregoing, each party agrees that it will not export, re-export, transfer or +divert any of the Software or the direct programs thereof to any restricted +place or party in accordance with U.S. export regulations. Note that Software +containing encryption may be subject to additional restrictions. + +GOVERNMENT RESTRICTED RIGHTS. The Software is provided with "RESTRICTED RIGHTS." +Use, duplication, or disclosure by the Government is subject to restrictions as +set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or their successors. Use +of the Software by the Government constitutes acknowledgment of Intel's +proprietary rights therein. Contractor or Manufacturer is Intel Corporation, +2200 Mission College Blvd., Santa Clara, CA 95052. + +TERMINATION OF THE AGREEMENT. Intel may terminate this Agreement if you violate +its terms. Upon termination, you will immediately destroy the Software or +return all copies of the Software to Intel. + +-------------------------------------------------------------------------------- + +EXHIBIT "A" + +SOFTWARE LICENSE AGREEMENT (Final, Single User) + +IMPORTANT - READ BEFORE COPYING, INSTALLING OR USING. + +Do not use or load this firmware image (the "Software") until you have carefully +read the following terms and conditions. By loading or using the Software, you +agree to the terms of this Agreement. If you do not wish to so agree, do not +install or use the Software. + +LICENSE. You may copy and use the Software, subject to these conditions: +1. This Software is licensed for use only in conjunction with Intel component + products. Use of the Software in conjunction with non-Intel component + products is not licensed hereunder. +2. You may not copy, modify, rent, sell, distribute or transfer any part of the + Software except as provided in this Agreement, and you agree to prevent + unauthorized copying of the Software. +3. You may not reverse engineer, decompile, or disassemble the Software. +4. You may not sublicense the Software. +5. The Software may contain the software or other property of third party + suppliers. + +OWNERSHIP OF SOFTWARE AND COPYRIGHTS. Title to all copies of the Software +remains with Intel or its suppliers. The Software is copyrighted and protected +by the laws of the United States and other countries, and international treaty +provisions. You may not remove any copyright notices from the Software. Intel +may make changes to the Software, or items referenced therein, at any time +without notice, but is not obligated to support or update the Software. Except +as otherwise expressly provided, Intel grants no express or implied right under +Intel patents, copyrights, trademarks, or other intellectual property rights. +You may transfer the Software only if a copy of this license accompanies the +Software and the recipient agrees to be fully bound by these terms. + +EXCLUSION OF OTHER WARRANTIES EXCEPT AS PROVIDED ABOVE, THE SOFTWARE IS PROVIDED +"AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTY OF ANY KIND INCLUDING +WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR +PURPOSE. Intel does not warrant or assume responsibility for the accuracy or +completeness of any information, text, graphics, links or other items contained +within the Software. + +LIMITATION OF LIABILITY. IN NO EVENT SHALL INTEL OR ITS SUPPLIERS BE LIABLE FOR +ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, LOST PROFITS, BUSINESS +INTERRUPTION, OR LOST INFORMATION) ARISING OUT OF THE USE OF OR INABILITY TO +USE THE SOFTWARE, EVEN IF INTEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. SOME JURISDICTIONS PROHIBIT EXCLUSION OR LIMITATION OF LIABILITY FOR +IMPLIED WARRANTIES OR CONSEQUENTIAL OR INCIDENTAL DAMAGES, SO THE ABOVE +LIMITATION MAY NOT APPLY TO YOU. YOU MAY ALSO HAVE OTHER LEGAL RIGHTS THAT VARY +BETWEEN JURISDICTIONS. + +TERMINATION OF THIS AGREEMENT. Intel may terminate this Agreement at any time if +you violate its terms. Upon termination, you will immediately destroy the +Software. + +APPLICABLE LAWS. Claims arising under this Agreement shall be governed by the +laws of California, excluding its principles of conflict of laws and the United +Nations Convention on Contracts for the Sale of Goods. You may not export the +Software in violation of applicable export laws and regulations. Intel is not +obligated under any other agreements unless they are in writing and signed by +an authorized representative +of Intel. + +GOVERNMENT RESTRICTED RIGHTS. The Software is provided with "RESTRICTED RIGHTS." +Use, duplication, or disclosure by the Government is subject to restrictions as +set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or their successors. Use +of the Software by the Government constitutes acknowledgment of Intel's +proprietary rights therein. Contractor or Manufacturer is Intel Corporation, +2200 Mission College Blvd., Santa Clara, CA 95052. diff --git a/usr/sbin/pc-sysinstall/conf/licenses/nvidia-en.txt b/usr/sbin/pc-sysinstall/conf/licenses/nvidia-en.txt new file mode 100644 index 000000000..22c790657 --- /dev/null +++ b/usr/sbin/pc-sysinstall/conf/licenses/nvidia-en.txt @@ -0,0 +1,53 @@ +Section 3: NVIDIA driver license agreement +-------------------------------------------------------------------------------- +License For Customer Use of NVIDIA Software + +IMPORTANT NOTICE -- READ CAREFULLY: This License For Customer Use of NVIDIA Software ("LICENSE") is the agreement which governs use of the software of NVIDIA Corporation and its subsidiaries ("NVIDIA") downloadable herefrom, including computer software and associated printed materials ("SOFTWARE"). By downloading, installing, copying, or otherwise using the SOFTWARE, you agree to be bound by the terms of this LICENSE. If you do not agree to the terms of this LICENSE, do not download the SOFTWARE. + +RECITALS + +Use of NVIDIA's products requires three elements: the SOFTWARE, the hardware on a graphics controller board, and a personal computer. The SOFTWARE is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE is not sold, and instead is only licensed for use, strictly in accordance with this document. The hardware is protected by various patents, and is sold, but this LICENSE does not cover that sale, since it may not necessarily be sold as a package with the SOFTWARE. This LICENSE sets forth the terms and conditions of the SOFTWARE LICENSE only. + +1. DEFINITIONS + +1.1 Customer. Customer means the entity or individual that downloads the SOFTWARE. + +2. GRANT OF LICENSE + +2.1 Rights and Limitations of Grant. NVIDIA hereby grants Customer the following non-exclusive, non-transferable right to use the SOFTWARE, with the following limitations: + +2.1.1 Rights. Customer may install and use one copy of the SOFTWARE on a single computer, and except for making one back-up copy of the Software, may not otherwise copy the SOFTWARE. This LICENSE of SOFTWARE may not be shared or used concurrently on different computers. + +2.1.2 Linux/FreeBSD Exception. Notwithstanding the foregoing terms of Section 2.1.1, SOFTWARE designed exclusively for use on the Linux or FreeBSD operating systems, or other operating systems derived from the source code to these operating systems, may be copied and redistributed, provided that the binary files thereof are not modified in any way (except for unzipping of compressed files). + +2.1.3 Limitations. + +No Reverse Engineering. Customer may not reverse engineer, decompile, or disassemble the SOFTWARE, nor attempt in any other manner to obtain the source code. + +No Separation of Components. The SOFTWARE is licensed as a single product. Its component parts may not be separated for use on more than one computer, nor otherwise used separately from the other parts. + +No Rental. Customer may not rent or lease the SOFTWARE to someone else. + +3. TERMINATION + +This LICENSE will automatically terminate if Customer fails to comply with any of the terms and conditions hereof. In such event, Customer must destroy all copies of the SOFTWARE and all of its component parts. + +Defensive Suspension. If Customer commences or participates in any legal proceeding against NVIDIA, then NVIDIA may, in its sole discretion, suspend or terminate all license grants and any other rights provided under this LICENSE during the pendency of such legal proceedings. + +4. COPYRIGHT + +All title and copyrights in and to the SOFTWARE (including but not limited to all images, photographs, animations, video, audio, music, text, and other information incorporated into the SOFTWARE), the accompanying printed materials, and any copies of the SOFTWARE, are owned by NVIDIA, or its suppliers. The SOFTWARE is protected by copyright laws and international treaty provisions. Accordingly, Customer is required to treat the SOFTWARE like any other copyrighted material, except as otherwise allowed pursuant to this LICENSE and that it may make one copy of the SOFTWARE solely for backup or archive purposes. + +5. APPLICABLE LAW + +This LICENSE shall be deemed to have been made in, and shall be construed pursuant to, the laws of the State of California. The United Nations Convention on Contracts for the International Sale of Goods is specifically disclaimed. + +6. DISCLAIMER OF WARRANTIES AND LIMITATION ON LIABILITY + +6.1 No Warranties. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE SOFTWARE IS PROVIDED "AS IS" AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +6.2 No Liability for Consequential Damages. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. MISCELLANEOUS + +If any provision of this LICENSE is inconsistent with, or cannot be fully enforced under, the law, such provision will be construed as limited to the extent necessary to be consistent with and fully enforceable under the law. This LICENSE is the final, complete and exclusive agreement between the parties relating to the subject matter hereof, and supersedes all prior or contemporaneous understandings and agreements relating to such subject matter, whether oral or written. This LICENSE may only be modified in writing signed by an authorized officer of NVIDIA. Customer agrees that it will not ship, transfer or export the SOFTWARE into any country, or use the SOFTWARE in any manner, prohibited by the United States Bureau of Export Administration or any export laws, restrictions or regulations. diff --git a/usr/sbin/pc-sysinstall/conf/pc-sysinstall.conf b/usr/sbin/pc-sysinstall/conf/pc-sysinstall.conf new file mode 100644 index 000000000..92a5b3e57 --- /dev/null +++ b/usr/sbin/pc-sysinstall/conf/pc-sysinstall.conf @@ -0,0 +1,86 @@ +#!/bin/sh +# $FreeBSD: src/usr.sbin/pc-sysinstall/conf/pc-sysinstall.conf,v 1.4 2010/10/09 08:52:09 imp Exp $ +# Configuration options for pc-sysinstall + +TMPDIR="/tmp/.pc-sysinstall" +export TMPDIR + +if [ ! -d "${TMPDIR}" ] +then + mkdir -p ${TMPDIR} + chmod 777 ${TMPDIR} +fi + +# Set our temp directory for storing partition information +PARTDIR="${TMPDIR}/part-info" +export PARTDIR + +# Set the SLICECFGDIR +SLICECFGDIR="${TMPDIR}/.slice-cfg" +export SLICECFGDIR + +# Set the MIRRORCFGDIR +MIRRORCFGDIR="${TMPDIR}/.mirror-cfg" +export MIRRORCFGDIR + +# Set the GELIKEYDIR +GELIKEYDIR="${TMPDIR}/.geli-keys" +export GELIKEYDIR + +# Set our log file +LOGOUT="${TMPDIR}/pc-sysinstall.log" +export LOGOUT + +# Set the number of rsync tries +RSYNCTRIES="3" +export RSYNCTRIES + +# Set our mount-points +CDMNT="/cdmnt-install" +FSMNT="/mnt" +UZIP_DIR="/usr" +BOOT_PART_MOUNT="/boot-mount" +export FSMNT CDMNT UZIP_DIR BOOT_PART_MOUNT + +# Set the location of component files on DVD / usb / ftp +# Relative to CDMNT or the FTP root +COMPFILEDIR="extras/" +export COMPFILEDIR + +# Set the component temp directory, which is relative to FSMNT +COMPTMPDIR="/usr/.componenttmp" +export COMPTMPDIR + +# set the package temp directory, which is relative to FSMNT +PKGTMPDIR="/usr/.pkgtmp" +export PKGTMPDIR + +# Variables to set the location of installation data +UZIP_FILE="PCBSD.ufs.uzip" +TAR_FILE="PCBSD.tbz" +export UZIP_FILE TAR_FILE + +# Locations of FreeBSD only install files +FBSD_UZIP_FILE="fbsd-release.ufs.uzip" +FBSD_TAR_FILE="fbsd-release.tbz" +FBSD_BRANCH="8.0-RELEASE" +FBSD_BRANCH_DIR="${FBSD_BRANCH}" +FBSD_ARCH=`uname -m` +export FBSD_UZIP_FILE FBSD_TAR_FILE FBSD_BRANCH FBSD_BRANCH_DIR FBSD_ARCH + +# Location of image file +IMAGE_FILE="/home/john/tmp/PCBSD8.1-x86-USB.img" +export IMAGE_FILE + +# Our internet mirror listing file location +NETSERVER="http://updates.pcbsd.org" +ARCH="`uname -m`" + +# Check if we are running on a PC-BSD Disk +if [ -e "/PCBSDVERSION" ] ; then + VERSION="`cat /PCBSDVERSION`" +else + VERSION="UNKNOWN" +fi + +MIRRORLIST="${NETSERVER}/mirrors-netinstall.php?ver=${VERSION}&arch=${ARCH}" diff --git a/usr/sbin/pc-sysinstall/doc/Makefile b/usr/sbin/pc-sysinstall/doc/Makefile new file mode 100644 index 000000000..22fb7a0ad --- /dev/null +++ b/usr/sbin/pc-sysinstall/doc/Makefile @@ -0,0 +1,8 @@ +# $FreeBSD: src/usr.sbin/pc-sysinstall/doc/Makefile,v 1.1 2010/06/24 22:21:47 imp Exp $ + +FILES= help-disk-list help-disk-size help-index help-start-autoinstall + +FILESDIR=${SHAREDIR}/pc-sysinstall/doc +NO_OBJ= + +.include diff --git a/usr/sbin/pc-sysinstall/doc/help-disk-list b/usr/sbin/pc-sysinstall/doc/help-disk-list new file mode 100644 index 000000000..0d4bff90f --- /dev/null +++ b/usr/sbin/pc-sysinstall/doc/help-disk-list @@ -0,0 +1 @@ +Holder diff --git a/usr/sbin/pc-sysinstall/doc/help-disk-size b/usr/sbin/pc-sysinstall/doc/help-disk-size new file mode 100644 index 000000000..0d4bff90f --- /dev/null +++ b/usr/sbin/pc-sysinstall/doc/help-disk-size @@ -0,0 +1 @@ +Holder diff --git a/usr/sbin/pc-sysinstall/doc/help-index b/usr/sbin/pc-sysinstall/doc/help-index new file mode 100644 index 000000000..bad401f1e --- /dev/null +++ b/usr/sbin/pc-sysinstall/doc/help-index @@ -0,0 +1,100 @@ +pc-sysinstall Help Index +----------------------------------------------- +Help Commands + + help + Display this index file + + help + Display the help data for the specified command + +System Query Commands + install-image + Installs an image file to a device file + + disk-list + Provides a listing of the disk drives detected on this system + + disk-part + Queries the specified disk and returns information about its partitions + + disk-info + Returns information about the disks size, cyls, heads, and sectors + + detect-laptop + Tests to see if this system is a laptop or desktop + + detect-emulation + Tests to see if this system is actually running in an emulator such as VirtualBox + + detect-nics + Returns a listing of the detected network cards on this system + + list-config + Returns a listing of the pc-sysinstall configuration + + list-components + Returns a listing of the available components which can be installed + + list-mirrors [country] + Returns a listing of the available FTP mirrors + + list-packages [category] [package] + Returns a listing of the available packages + + list-rsync-backups + Returns a listing of available rsync-backups on the target server in the life-preserver/ dir + + list-tzones + Returns a listing of available timezones + + query-langs + Return a list of languages that the installer supports + + get-packages + Retrieves the list of packages from an FTP mirror + + sys-mem + Return the size of installed system RAM in MegaBytes + + set-mirror + Set FTP mirror + + test-netup + Test if an internet connection is available + + update-part-list + Return a list of PC-BSD & FreeBSD installs on this system for updates + + xkeyboard-layouts + Return a list of keyboard layouts that xorg supports + + xkeyboard-models + Return a list of keyboard models that xorg supports + + xkeyboard-variants + Return a list of keyboard variants that xorg supports + +Partition Management Commands + + create-part + Create a new MBR primary slice on the target using MB + + delete-part + Deletes the disk partition specified. If this is the last partition, + the disk partition layout will also be scrubbed, leaving a clean disk + ready for MBR or GPT file system layouts. + + +Installation Commands + + -c + Begin a install / upgrade with the specified cfg file + + start-autoinstall + Start an automated installation with the specified conf file + Normally only used by automated install scripts + + setup-ssh-keys + Setup SSH without a password for the target host and user and port + Use to prompt the user to log into a server before doing a rsync + ssh restore diff --git a/usr/sbin/pc-sysinstall/doc/help-start-autoinstall b/usr/sbin/pc-sysinstall/doc/help-start-autoinstall new file mode 100644 index 000000000..1cb1e6aef --- /dev/null +++ b/usr/sbin/pc-sysinstall/doc/help-start-autoinstall @@ -0,0 +1,39 @@ +start-autoinstall - HELP +----------------------------------------------- + +About: + start-autoinstall is used when performing automated installationsr. It is able + to configure networking with provided settings, and fetch an installation script from + http / ftp server. This allows media to be created which fetches dynamic configuration + options from a server-side supplier. + +Usage: + pc-sysinstall start-autoinstall + +Config Syntax: + + The configuration file for start-autoinstall can contain the following options: + + pc_config: + - Location of the pc-sysinstall installation configuration file, can be local + or start with http:// or ftp:// to fetch from a remote system. + + shutdown_cmd: + - Command to execute post-installation, such as "shutdown -p now" or other. + + confirm_install: (YES/NO) + - Prompt on the console to begin installation. Defaults to YES. + Warning: Setting this to NO will start an installation as soon as start-autoinstall + is run. (I.E. after booting some install media) It may be dangerous if a disk is left + in a drive and the system is turned on! + + nic_config: (DHCP-ALL / ) + - When set to DHCP-ALL, the software will attempt to get a network address from DHCP on + any / all detected NICS. If set to some other command, it will be used as an argument + to "ifconfig" to enable networking. + + nic_dns: + - Use the following DNS server for networking + + nic_gateway: + - Use the following default route / gateway for networking diff --git a/usr/sbin/pc-sysinstall/examples/Makefile b/usr/sbin/pc-sysinstall/examples/Makefile new file mode 100644 index 000000000..5bb58c910 --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/Makefile @@ -0,0 +1,11 @@ +# $FreeBSD: src/usr.sbin/pc-sysinstall/examples/Makefile,v 1.1 2010/06/24 22:21:47 imp Exp $ + +FILES= README pc-autoinstall.conf pcinstall.cfg.fbsd-netinstall \ + pcinstall.cfg.geli pcinstall.cfg.gmirror pcinstall.cfg.netinstall \ + pcinstall.cfg.restore pcinstall.cfg.rsync pcinstall.cfg.upgrade \ + pcinstall.cfg.zfs + +FILESDIR=${SHAREDIR}/examples/pc-sysinstall +NO_OBJ= + +.include diff --git a/usr/sbin/pc-sysinstall/examples/README b/usr/sbin/pc-sysinstall/examples/README new file mode 100644 index 000000000..7d9fd5e18 --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/README @@ -0,0 +1,369 @@ +pc-sysinstall README + +This file documents many of the variables used in pc-sysinstall +config scripts +################################################################# + +# hostname= + +Using hostname= will set the specified hostname on the +installed system + +When hostname= is not present, pc-sysinstall will auto-generate +a hostname such as freebsd-XXXX or pcbsd-XXXX + +# installMode=(fresh or upgrade) + +Set the type of install we are doing, fresh or upgrade. + +Fresh installs will format and mount the target disks before +extracting the install images to the system. Using this mode +it is also possible to do a system restore, by specifying a +full system backup as the install source. + +Upgrades will mount the target disk, and extract the system +archive to the disk, overwriting files on the disk. +The conf/exclude-from-upgrade file can be used to specify +additional files to exclude from overwriting during the +install process. + +# installInteractive=(yes or no) + +Set if the installer is running in interactive mode, and +is able to prompt for input from the user, defaults to no + + +######################################################################## +# NETWORK SETTINGS +######################################################################## + +# netDev=(AUTO-DHCP or ) + +netDev specifies what type of networking to enable for the installer +Can be set to AUTO-DHCP or to a network interface, such as et0 + +When set to AUTO-DHCP, pc-sysinstall will probe for all network devices +and attempt to set DHCP mode on each, until a working network connection +is established + +If netDev= is set to a network interface such as et0, the following options +will need to be set in order to enable the interface + +# netIP=(IP address such as 192.168.0.100) + + Set netIP to an address that you wish to have the interface specified in + netDev set to + Only used when netDev is not set to AUTO-DHCP + +# netMask=(Netmask such as 255.255.255.0) + +Set netMask to the address you with to have the interface specified in +netDev set to +Only used when netDev is not set to AUTO-DHCP + + +# netNameServer=(DNS Server such as 192.168.0.1) + +Set netNameServer to the DNS address you want to use during the install +Only used when netDev is not set to AUTO-DHCP + + +# netDefaultRouter=(192.168.0.1) + +Set netDefaultRouter to the gateway you wish to have the installer use +Only used when netDev is not set to AUTO-DHCP + + + +# netSaveDev=(AUTO-DHCP or network interface) + +netSaveDev specifies what networking to enable on the installed system + +When set to AUTO-DHCP, pc-sysinstall will probe all network interfaces, and +set them all to DHCP in the systems /etc/rc.conf file. Wireless devices will also +have the corresponding wlan[0-9] device created. + +When set to a network interface, pc-sysinstall will set the target device with +the settings specified by the variables below. + +# netSaveIP=192.168.0.49 +# netSaveMask=255.255.255.0 +# netSaveNameServer=208.67.222.222 +# netSaveDefaultRouter=192.168.0.1 + + + + +######################################################################## +# DISK SLICE SETTINGS +######################################################################## + +The following section specifies the target disk(s) to be used in the +install or upgrade. + +# disk0=(disk device, such as ad0) + +The diskX= variable should be set to the target device for this drive, such +as ad0, da0 +The first should begin with disk0=, and additional drives to disk1=, disk2 +if additional disks are to be setup. + +When doing an upgrade, the disk0= line should be set to the root device or +root zpool of the target system to update. I.E: + # disk0=tank0 + # disk0=ada0s1a + + +# partition=(all, free, s1, s1, s3, s4, image) + +After setting disk[0-9], the partition= variable is used to specify which target +partition we will be working with for this device. + +Setting this to "all" will setup the disk with a single FreeBSD slice as "s1" + +Setting this to "free" will allow pc-sysinstall to search for the first available +primary slice with free space, and create the slice. + +Setting this to "s1, s2, s3 or s4" will use the specified MBR slice. + +Setting this to "image" will use an image to configure the disk. + +(This tag is unused for upgrades) + +# partscheme=(MBR/GPT) + +When performing a "full" disk (partition=all), the partscheme= variable is used +to determine the partition scheme type gpart will be using on the disk. Valid +choices are MBR or GPT. + +# mirror=(disk device such as ad1) + +Setting the mirror= variable will setup the target device as a gmirror +of the diskX= device. The mirror device must be the same size or larger +than the drive being mirrored. + + +# mirrorbal=(load, prefer, round-robin, split) + +Allows the setting of the mirror balance method to be used, if not +specified this defaults to "round-robin" + +# bootManager=(none, bsd) + +Setting this option will instruct pc-sysinstall to install the BSD boot Manager, +or leave it empty + +# image=(/path/to/image/file) (/mountpoint) + +Setting this option will instruct pc-sysinstall to write the image file +specified by the path to the disk. + +# commitDiskPart + +This command must be placed at the end of the diskX= section, before starting +the listing of any additional diskX= directives. + + +######################################################################## +# DISK PARTITION / MOUNT SETTINGS +######################################################################## + +The following settings specify the partitioning / mount points to setup +on the target partition + +# disk0-part=UFS+S 500 / +# disk0-part=SWAP 2000 none +# disk0-part=UFS.eli 500 /usr +# encpass=mypass +# disk0-part=UFS+J 500 /tmp +# disk0-part=ZFS 0 /data,/storage (mirror: ad1) +# commitDiskLabel + +The above values instructs pc-sysinstall which partitions / mounts +to create on the target drive / slice, specified by "disk0". +(disk0 will resolve to the drive / slice specified in the previous section) + +The notation is as follows: + + +Available FileSystems: + UFS - Standard UFS2 FileSystem +UFS+S - UFS2 + Softupdates enabled +UFS+SUJ - UFS2 + Soft Updates + Journaling enabled +UFS+J - UFS2 + Journaling through gjournal + ZFS - Z File System, pools / mounts created automatically + SWAP - BSD Swap space partition, mountpoint should be set to "none" + +Adding the ".eli" extension to any of the above file systems +will enable disk encryption via geli +(UFS.eli, UFS+S.eli, UFS+SUJ.eli, UFS+J.eli, ZFS.eli, SWAP.eli) + +If you with to use a passphrase with this encrypted partition, on the next line +the flag "encpass=" should be entered: +encpass=mypass + +All sizes are expressed in MegaBytes +Specifying a size 0 instructs pc-sysinstall to use the rest of the +available slice size, and should only be used for the last partition / mount + +When using "ZFS" specifically, it is possible to specify additional disks / partitions +to include in the zpool. By using the syntax: (mirror: ad1,ad2) or (raidz: ad1,ad2), it is possible +to include the disk "ad1" into the zpool for this partition, using the raidz / mirror methods. +If you with to just include the disk into the pool in "basic" mode, then use (ad1,ad2) with no flags + +######################################################################## +# INSTALL OPTIONS / SOURCES +######################################################################## + +The following settings specify the type, locations and sources +for this installation + +# installMedium=(dvd, usb, ftp, rsync, image) + +Set installMedium= to the source type we will be using for this install. + +Available Types: + dvd - Search for and mount the DVD which contains the install archive + usb - Search for and mount the USB drive which contains the install archive + ftp - The install archive will be fetched from a FTP / HTTP server before install +rsync - Pull the system data from a ssh + rsync server, specified with variables below +image - Install system from an image + +# installType=(PCBSD, FreeBSD) + +Set the type of system we are installing, PCBSD or FreeBSD + +# installFile=fbsd-release.tbz + +The installer archive, if not using the defaults specified in conf/pc-sysinstall.conf + +# packageType=(tar, uzip, split) + +The archive type we are extracting from when using dvd, usb or ftp + +# ftpPath=ftp://ftp.pcbsd.org/pub/8.0/netinstall + +Location of the installer archive when using a installMedium=ftp + +# rsyncPath=life-preserver/back-2009-11-12T14_53_14 + +The location of the rsync data on the remote server when using installMedium=rsync + +# rsyncUser=rsyncuser + +The username to use for the ssh server running rsync + +# rsyncHost=192.168.0.50 + +The rsync / ssh server we wish to connect to + +# rsyncPort=22 + +The port to use when connecting to a ssh + rsync server + +# installComponents=amarok,firefox,ports + +The specified components to install, view available with "./pc-sysinstall list-components" + + +######################################################################## +# UPGRADE OPTIONS +######################################################################## + +Options specific to performing an upgrade + +# upgradeKeepDesktopProfile=(yes/no) + +This option allows you to specify if you wish to keep your existing users desktop +profile data. The default is NO, and your existing profile will be moved to +.kde4.preUpgrade automatically. + +######################################################################## +# USER OPTIONS +######################################################################## + +Options for setting up usernames and passwords on the installed system + +# rootPass=root + +Set the root password of the installed system to the specified string + +The below variables are used to setup a user on the installed system +Be sure to call commitUser after after adding these values, and before +starting another user block + +# userName=kris +# userComment=Kris Moore +# userPass=mypass +# userShell=/bin/csh +# userHome=/home/kris +# userGroups=wheel,operator +# commitUser + +######################################################################## +# RUN COMMANDS +######################################################################## + +The following variables can be set to run commands post-installation, +allowing the user to further tweak / modify the system + +# runCommand= + +Run the specified command within chroot of the installed system + +# runScript= + +runScript will copy the specified script into FSMNT, and run it in chroot of the system +Usefull when you have a 3rd party script on the DVD / USB, and you want to copy it into +the installed system and run + +# runExtCommand= + +runExtCommand is used when you wish to run a command outside the chroot +The variable $FSMNT is set to the mount-point of your installed system + + +######################################################################## +# PC-BSD SPECIFC OPTIONS +######################################################################## + +Options for time-zones and NTP on the installed system + +# timeZone= + +timeZone can be set to the zone file in /usr/share/zoneinfo/ that is to be used +example: America/New_York + +# enableNTP= (yes / no) + +set enableNTP to yes or no to enable or disable the NTP service on the system + + +######################################################################## +# PC-BSD SPECIFC OPTIONS +######################################################################## + +Options specific to installing PC-BSD, such as localization, and KDE settings + +# localizeLang=en + +localizeLang will set the system console and Desktop to the target language + +# localizeKeyLayout=en + +localizeKeyLayout updates the system's xorg config to set the keyboard layout + +# localizeKeyModel=pc104 + +localizeKeyModel updates the system's xorg config to set the keyboard model + +# localizeKeyVariant=intl + +localizeKeyVariant is used to update the xorg config to set the keyboard variant + +# autoLoginUser=kris + +Setting autoLoginUser will enable the specified user to log into the desktop +automatically without entering a password + +$FreeBSD: src/usr.sbin/pc-sysinstall/examples/README,v 1.5 2010/10/09 08:52:09 imp Exp $ diff --git a/usr/sbin/pc-sysinstall/examples/pc-autoinstall.conf b/usr/sbin/pc-sysinstall/examples/pc-autoinstall.conf new file mode 100644 index 000000000..260fc684d --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/pc-autoinstall.conf @@ -0,0 +1,52 @@ +# pc-autoinstall.conf example +# $FreeBSD: src/usr.sbin/pc-sysinstall/examples/pc-autoinstall.conf,v 1.1 2010/06/24 22:21:47 imp Exp $ +# +# Usage: Modify these variables, and copy the file to +# /boot/pc-autoinstall.conf on your PC-BSD installation medium +# +# The conf will then be read at bootup, and your automated +# install will take place +################################################################## + +# Where the pc-sysinstall main config is located +# Can be either a file on the booted CD / DVD / USB media, +# or a remote file on http / ftp +# +# The value %%NIC_MAC%% is special, and will be substituted with +# the macaddress of the enabled NIC from DHCP or manually set +# with 'nic_config:' +################################################################## + +# Examples: +# pc_config: ftp://192.168.0.2/cust-install.cfg +# pc_config: http://192.168.0.2/cust-install.cfg +# pc_config: http://192.168.0.2/%%NIC_MAC%%.cfg +# pc_config: /boot/cust-install.cfg + +# Set this to yes if we should confirm before doing an install +# This should normally be set to yes, otherwise booting the wrong +# disk will result in a system wipe +# confirm_install: no +confirm_install: yes + +# Set the command to run post-install, usually best to run shutdown +# but this can be replaced with any other command / script you wish +# to execute post-install +# shutdown_cmd: shutdown -p now + +# Options for the network setup, should the cfg need to be fetched +# from a remote location, only necessary when using ftp or http +################################################################## + +# Special option, will attempt dhcp on all found NICs +# until the file can be fetched, or we run out of interfaces +# nic_config: dhcp-all + +# Line to be passed to the "ifconfig" command to bring up an interface +# nic_config: em0 192.168.0.101 255.255.255.0 + +# DNS server to use +# nic_dns: 192.168.0.1 + +# Default router / gateway +# nic_gateway: 192.168.0.1 diff --git a/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.fbsd-netinstall b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.fbsd-netinstall new file mode 100644 index 000000000..dad3be6fd --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.fbsd-netinstall @@ -0,0 +1,71 @@ +# Sample configuration file for an installation using pc-sysinstall +#$FreeBSD: src/usr.sbin/pc-sysinstall/examples/pcinstall.cfg.fbsd-netinstall,v 1.1 2010/06/24 22:21:47 imp Exp $ + +installMode=fresh +installInteractive=yes +hostname=pcbsd8 + +# Set the disk parameters +disk0=ad0 +partition=all +bootManager=none +commitDiskPart + +# Setup the disk label +# All sizes are expressed in MB +# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP +disk0-part=UFS 1000 / +disk0-part=SWAP 2000 none +disk0-part=UFS 0 /usr +# Size 0 means use the rest of the slice size +# Do it now! +commitDiskLabel + +netDev=AUTO-DHCP +#netDev=nfe0 +#netIP=192.168.0.49 +#netMask=255.255.255.0 +#netNameServer=208.67.222.222 +#netDefaultRouter=192.168.0.1 + +netSaveDev=AUTO-DHCP +#netSaveDev=nfe0 +#netSaveIP=192.168.0.49 +#netSaveMask=255.255.255.0 +#netSaveNameServer=208.67.222.222 +#netSaveDefaultRouter=192.168.0.1 + +# Set if we are installing via optical, USB, or FTP +#installType=PCBSD +installType=FreeBSD +#installMedium=dvd +installMedium=ftp + +ftpPath=ftp://192.168.0.2/netinstall + +#packageType=uzip +packageType=tar + +# List our components to install +installComponents=ports,src + +# Setup user "kris" to log into the desktop automatically +autoLoginUser=kris + +# Set the root pass +rootPass=root + +# Setup our users +userName=kris +userComment=Kris Moore +userPass=kris +userShell=/bin/csh +userHome=/home/kris +userGroups=wheel,operator +commitUser + +# Options for localizing an install +localizeLang="ru" +localizeKeyLayout="ru" +localizeKeyModel="pc104" +localizeKeyVariant="intl" diff --git a/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.geli b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.geli new file mode 100644 index 000000000..b20a65d17 --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.geli @@ -0,0 +1,50 @@ +# Auto-Generated pc-sysinstall configuration +#$FreeBSD: src/usr.sbin/pc-sysinstall/examples/pcinstall.cfg.geli,v 1.1 2010/06/24 22:21:47 imp Exp $ + +installInteractive=no +installMode=fresh +installType=FreeBSD +packageType=tar +installMedium=dvd +netSaveDev=AUTO-DHCP + +# Timezone +timeZone=America/New_York +enableNTP=yes + +# Keyboard Layout Options +localizeKeyModel=pc104 +localizeKeyLayout=us + +# Disk Setup for ad0 +disk0=ad0 +partition=ALL +bootManager=none +commitDiskPart + +# Partition Setup for ad0(ALL) +# All sizes are expressed in MB +# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP +# UFS.eli, UFS+S.eli, UFS+J.eli, ZFS.eli, SWAP.eli +disk0-part=UFS 500 /boot +disk0-part=UFS.eli 500 / +disk0-part=UFS.eli 500 /usr +encpass=mypass +commitDiskLabel + +# Optional Components +installComponents= + +# Root Password +rootPass=mypass + +# Users +userName=kris +userComment=Kris Moore +userPass=mypass +userShell=/bin/csh +userHome=/home/kris +userGroups=wheel,operator +autoLoginUser=kris +commitUser + diff --git a/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.gmirror b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.gmirror new file mode 100644 index 000000000..6a20d237c --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.gmirror @@ -0,0 +1,45 @@ +# Sample configuration file for an installation using pc-sysinstall +#$FreeBSD: src/usr.sbin/pc-sysinstall/examples/pcinstall.cfg.gmirror,v 1.1 2010/06/24 22:21:47 imp Exp $ + +installMode=fresh +installInteractive=yes +hostname=pcbsd8 + +# Set the disk parameters +disk0=ad0 +mirror=ad1 +mirrorbal=split +partition=all +bootManager=bsd +commitDiskPart + +# Setup the disk label +# All sizes are expressed in MB +# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP +disk0-part=UFS+S 500 / +disk0-part=SWAP 2000 none +disk0-part=UFS+S 0 /usr +# Size 0 means use the rest of the slice size +# Do it now! +commitDiskLabel + +# Set if we are installing via optical, USB, or FTP +installType=FreeBSD +installMedium=dvd + +#packageType=uzip +packageType=tar +#installComponents=ports,src + +# Run any commands post-install +runCommand=echo 'root' | pw usermod root -h 0 +#runScript=/root/test.sh +#runExtCommand=echo 'hey there'; touch $FSMNT/touched + +#autoLoginUser=kris + +# Options for localizing an install +localizeLang="ru" +localizeKeyLayout="ru" +localizeKeyModel="pc104" +localizeKeyVariant="intl" diff --git a/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.netinstall b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.netinstall new file mode 100644 index 000000000..a2c822233 --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.netinstall @@ -0,0 +1,68 @@ +# Sample configuration file for an installation using pc-sysinstall +#$FreeBSD: src/usr.sbin/pc-sysinstall/examples/pcinstall.cfg.netinstall,v 1.1 2010/06/24 22:21:47 imp Exp $ + +installMode=fresh +installInteractive=yes +hostname=pcbsd8 + +# Set the disk parameters +disk0=ad0 +partition=all +bootManager=none +commitDiskPart + +# Setup the disk label +# All sizes are expressed in MB +# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP +disk0-part=UFS 1000 / +disk0-part=SWAP 2000 none +disk0-part=UFS 0 /usr +# Size 0 means use the rest of the slice size +# Do it now! +commitDiskLabel + +netDev=AUTO-DHCP +#netDev=nfe0 +#netIP=192.168.0.49 +#netMask=255.255.255.0 +#netNameServer=208.67.222.222 +#netDefaultRouter=192.168.0.1 + +netSaveDev=AUTO-DHCP +#netSaveDev=nfe0 +#netSaveIP=192.168.0.49 +#netSaveMask=255.255.255.0 +#netSaveNameServer=208.67.222.222 +#netSaveDefaultRouter=192.168.0.1 + +# Set if we are installing via optical, USB, or FTP +#installType=PCBSD +installType=FreeBSD +#installMedium=dvd +installMedium=ftp + +ftpPath=ftp://192.168.0.2/netinstall + +#packageType=uzip +packageType=tar +#installComponents=ports,src + +#autoLoginUser=kris + +# Set the root pass +rootPass=root + +# Setup our users +userName=kris +userComment=Kris Moore +userPass=kris +userShell=/bin/csh +userHome=/home/kris +userGroups=wheel,operator +commitUser + +# Options for localizing an install +localizeLang="ru" +localizeKeyLayout="ru" +localizeKeyModel="pc104" +localizeKeyVariant="intl" diff --git a/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.restore b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.restore new file mode 100644 index 000000000..c05bf0566 --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.restore @@ -0,0 +1,57 @@ +# Sample configuration file for an installation using pc-sysinstall +#$FreeBSD: src/usr.sbin/pc-sysinstall/examples/pcinstall.cfg.restore,v 1.1 2010/06/24 22:21:47 imp Exp $ + +installMode=fresh +installInteractive=no +hostname=freebsd8 + +# Set the disk parameters +disk0=ad1 +partition=all +bootManager=none +commitDiskPart + +# Setup the disk label +# All sizes are expressed in MB +# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP +# UFS.eli, UFS+S.eli, UFS+J.eli, ZFS.eli, SWAP.eli +disk0-part=UFS+S 500 / +disk0-part=SWAP.eli 2000 none +disk0-part=UFS+S 0 /usr +# Size 0 means use the rest of the slice size +# Do it now! +commitDiskLabel + +# Set if we are installing via optical, USB, or FTP +installType=FreeBSD +installMedium=dvd +installFile=freebsd-release.tbz + +#packageType=uzip +packageType=tar +#installComponents=ports,src + +# Run any commands post-install +#runCommand=echo 'root' | pw usermod root -h 0 +#runScript=/root/test.sh +#runExtCommand=echo 'hey there'; touch $FSMNT/touched + +# Set the root pass +rootPass=root + +# Setup our users +userName=kris +userComment=Kris Moore +userPass=kris +userShell=/bin/csh +userHome=/home/kris +userGroups=wheel,operator +commitUser + +#autoLoginUser=kris + +# Options for localizing an install +localizeLang="ru" +localizeKeyLayout="ru" +localizeKeyModel="pc104" +localizeKeyVariant="intl" diff --git a/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.rsync b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.rsync new file mode 100644 index 000000000..e6d7c6c35 --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.rsync @@ -0,0 +1,45 @@ +# Sample configuration file for an installation using pc-sysinstall +#$FreeBSD: src/usr.sbin/pc-sysinstall/examples/pcinstall.cfg.rsync,v 1.1 2010/06/24 22:21:47 imp Exp $ + +installMode=fresh +installInteractive=yes +hostname=pcbsd8 + +# Set the disk parameters +disk0=ad0 +partition=all +bootManager=none +commitDiskPart + +# Setup the disk label +# All sizes are expressed in MB +# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP +disk0-part=UFS 2000 / +disk0-part=SWAP 2000 none +disk0-part=UFS 0 /usr +# Size 0 means use the rest of the slice size +# Do it now! +commitDiskLabel + +netDev=AUTO-DHCP +#netDev=nfe0 +#netIP=192.168.0.49 +#netMask=255.255.255.0 +#netNameServer=208.67.222.222 +#netDefaultRouter=192.168.0.1 + +# Set if we are installing via optical, USB, or FTP +#installType=PCBSD +installType=FreeBSD +#installMedium=dvd +installMedium=rsync + +rsyncPath=life-preserver/back-2009-11-12T14_53_14 +rsyncUser=lifep +rsyncHost=192.168.0.50 +rsyncPort=22 + +#packageType=uzip +packageType=tar +#installComponents=ports,src + diff --git a/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.upgrade b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.upgrade new file mode 100644 index 000000000..754f05fa2 --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.upgrade @@ -0,0 +1,24 @@ +# Sample configuration file for an installation using pc-sysinstall +#$FreeBSD: src/usr.sbin/pc-sysinstall/examples/pcinstall.cfg.upgrade,v 1.1 2010/06/24 22:21:47 imp Exp $ + +installMode=upgrade +installInteractive=no +hostname=freebsd8 + +# Set the disk parameters +disk0=ada0s1a +bootManager=none +commitDiskPart + +# Set if we are installing via optical, USB, or FTP +installType=PCBSD +installMedium=dvd + +packageType=uzip +#installComponents=ports,src + +# Options for localizing an install +localizeLang="ru" +localizeKeyLayout="ru" +localizeKeyModel="pc104" +localizeKeyVariant="intl" diff --git a/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.zfs b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.zfs new file mode 100644 index 000000000..11dd38a89 --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/pcinstall.cfg.zfs @@ -0,0 +1,59 @@ +# Auto-Generated pc-sysinstall configuration +#$FreeBSD: src/usr.sbin/pc-sysinstall/examples/pcinstall.cfg.zfs,v 1.1 2010/06/24 22:21:47 imp Exp $ +installInteractive=no +installMode=fresh +installType=FreeBSD +packageType=tar +installMedium=dvd +netSaveDev=AUTO-DHCP + +# Timezone +timeZone=America/New_York +enableNTP=yes + +# Keyboard Layout Options +localizeKeyModel=pc104 +localizeKeyLayout=us + +# Disk Setup for ad0 +disk0=ad0 +partition=ALL +bootManager=none +commitDiskPart + +# Partition Setup for ad0(ALL) +# All sizes are expressed in MB +# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP +# UFS.eli, UFS+S.eli, UFS+J.eli, ZFS.eli, SWAP.eli +disk0-part=ZFS 0 /,/usr,/var,/data (mirror: ad1) +commitDiskLabel + +# Disk Setup for ad3 +disk1=ad3 +partition=ALL +bootManager=none +commitDiskPart + +# Partition Setup for ad3(ALL) +# All sizes are expressed in MB +# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP +# UFS.eli, UFS+S.eli, UFS+J.eli, ZFS.eli, SWAP.eli +disk1-part=SWAP 0 none +commitDiskLabel + +# Optional Components +installComponents= + +# Root Password +rootPass=mypass + +# Users +userName=kris +userComment=Kris Moore +userPass=mypass +userShell=/bin/csh +userHome=/home/kris +userGroups=wheel,operator +autoLoginUser=kris +commitUser + diff --git a/usr/sbin/pc-sysinstall/examples/pfSense.cfg b/usr/sbin/pc-sysinstall/examples/pfSense.cfg new file mode 100644 index 000000000..d04295459 --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/pfSense.cfg @@ -0,0 +1,31 @@ +# Sample configuration file for an installation using pc-sysinstall + +installMode=fresh +installInteractive=yes +installType=FreeBSD +installMedium=LiveCD + +# Set the disk parameters +disk0=ad0 +partition=all +bootManager=bsd +commitDiskPart + +# Setup the disk label +# All sizes are expressed in MB +# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP +# Size 0 means use the rest of the slice size +disk0-part=SWAP 500 none +disk1-part=UFS+S 0 / +# Do it now! +commitDiskLabel + +# Set if we are installing via optical, USB, or FTP +installType=FreeBSD + +packageType=cpdup + +# Optional Components +cpdupPaths=boot,COPYRIGHT,bin,conf,conf.default,dev,etc,home,kernels,libexec,lib,root,sbin,sys,usr,var + +runExtCommand=chmod a+rx /usr/local/bin/after_installation_routines.sh && cd / && /usr/local/bin/after_installation_routines.sh diff --git a/usr/sbin/pc-sysinstall/examples/pfSense.cfg.zfs b/usr/sbin/pc-sysinstall/examples/pfSense.cfg.zfs new file mode 100644 index 000000000..c89520693 --- /dev/null +++ b/usr/sbin/pc-sysinstall/examples/pfSense.cfg.zfs @@ -0,0 +1,46 @@ +# Auto-Generated pc-sysinstall configuration +installInteractive=no +installMode=fresh +installType=FreeBSD +installMedium=LiveCD +packageType=cpdup + +# Timezone +timeZone=Kentucky/Louisville + +# Keyboard Layout Options +localizeKeyModel=pc104 +localizeKeyLayout=us + +# Disk Setup for ad0 +disk0=da0 +partition=ALL +bootManager=none +commitDiskPart + +# Partition Setup for da0(ALL) +# All sizes are expressed in MB +# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP +# UFS.eli, UFS+S.eli, UFS+J.eli, ZFS.eli, SWAP.eli +disk0-part=SWAP 500 none +disk1-part=ZFS+S 0 / + +commitDiskLabel + +# Disk Setup for da2 +disk1=da2 +partition=ALL +bootManager=none +commitDiskPart + +# Partition Setup for da2(ALL) +# All sizes are expressed in MB +# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP +# UFS.eli, UFS+S.eli, UFS+J.eli, ZFS.eli, SWAP.eli +disk1-part=SWAP 0 none +commitDiskLabel + +# Optional Components +cpdupPaths=boot,COPYRIGHT,bin,conf,conf.default,dev,etc,home,kernels,libexec,lib,root,sbin,sys,usr,var + +runExtCommand=chmod a+rx /usr/local/bin/after_installation_routines.sh && cd / && /usr/local/bin/after_installation_routines.sh diff --git a/usr/sbin/pc-sysinstall/pc-sysinstall/Makefile b/usr/sbin/pc-sysinstall/pc-sysinstall/Makefile new file mode 100644 index 000000000..65abcc0b0 --- /dev/null +++ b/usr/sbin/pc-sysinstall/pc-sysinstall/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD: src/usr.sbin/pc-sysinstall/pc-sysinstall/Makefile,v 1.3 2010/06/27 17:14:04 imp Exp $ + +SCRIPTS=pc-sysinstall.sh +MAN= pc-sysinstall.8 + +.include diff --git a/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.8 b/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.8 new file mode 100644 index 000000000..2b42bbbb8 --- /dev/null +++ b/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.8 @@ -0,0 +1,120 @@ +.\" Copyright (c) 2010 +.\" iXsystems, Inc. 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 BY THE AUTHOR AND CONTRIBUTORS ``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 Jordan Hubbard OR CONTRIBUTORS 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. +.\" +.\" $FreeBSD: src/usr.sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.8,v 1.5 2010/10/08 12:40:16 uqs Exp $ +.\" +.Dd June 24, 2010 +.Dt PC-SYSINSTALL 8 +.Os +.Sh NAME +.Nm pc-sysinstall +.Nd System installer backend +.Sh SYNOPSIS +.Nm +.Op Fl c Ar file +.Op Ar command +.Sh DESCRIPTION +The +.Nm +utility is a hybrid backend for installing FreeBSD. When run in install mode +it takes a configuration file and performs an installation according to the +parameters specified in the configuration file. When called with one of +the system query commands it provides information about the system to aid a +front end in building an appropriate configuration file. +.Pp +The following options are available: +.Bl -tag -width indent +.It Fl c Ar file +Perform an installation as directed by +.Ar file. +.El +.Sh COMMANDS +The +.Cm command +can be any one of the following: +.Bl -tag -width indent +.It help +Display a list of all commands. +.It help Ar command +Display the help data for the specified command. +.It disk-list +Provide a listing of the storage devices detected on this system. +.It disk-part Ar disk +Queries the specified storage device and returns information about its +partitions. +.It disk-info Ar disk +Returns information about a storage device's size, cylinders, heads, and +sectors. +.It detect-laptop +Tests to see if this system is a laptop or desktop. +.It detect-emulation +Tests to see if this system is running in an emulator +.It detect-nics +Returns a listing of the detected network cards on this system. +.It list-components +Returns a listing of the available components which can be installed. +.It list-rsync-backups Ar user Ar host Ar port +Returns a listing of available rsync-backups on the target server in the +life-preserver/ directory. +.It list-tzones +Returns a listing of available timezones. +.It query-langs +Returns a list of languages that the installer supports. +.It sys-mem +Returns the size of installed system RAM in MegaBytes. +.It test-netup +test if an internet connection is available. +.It update-part-list +Returns a list of PC-BSD and FreeBSD installs on this system for updates. +.It xkeyboard-layouts +Returns a list of keyboard layouts that xorg supports. +.It xkeyboard-models +Returns a list of keyboard models that xorg supports. +.It xkeyboard-variants +Returns a list of keyboard variants that xorg supports. +.It create-part Ar disk Ar size +Create a new MBR primary slice on the target disk using size MB. +.It delete-part Ar partition +Delete the disk partition specified. If this is the last partition, the +disk partition layout will also be scrubbed, leaving a clean disk ready +for MBR or GPT file system layouts. +.It start-autoinstall Ar file +Start an automated installation with the specified file. Normally only +used by automated install scripts. +.It setup-ssh-keys Ar user Ar host Ar port +Setup SSH without a password for the target host, user, and port. Used to +prompt the user to log into a server before doing a rsync + ssh restore. +.El +.Sh HISTORY +This version of +.Nm +first appeared in +.Fx 9.0 . +.Sh AUTHORS +.An Kris Moore Aq kmoore@FreeBSD.org +.Sh BUGS +This utility was written to install PC-BSD and has seen limited use as an +installer for FreeBSD. It's likely that usage to install FreeBSD will expose +edge cases that PC-BSD doesn't, as well as generate feature requests based +on unforeseen needs. diff --git a/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh b/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh new file mode 100755 index 000000000..9f91e8515 --- /dev/null +++ b/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh @@ -0,0 +1,240 @@ +#!/bin/sh +##################################################################### +# Author: Kris Moore +# License: BSD +# Description: pc-sysinstall provides a backend for performing +# system installations, as well as calls which a front-end can use +# to retrive information about the system +##################################################################### +# Copyright 2010 iXsystems +# All rights reserved +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted providing 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 BY THE AUTHOR ``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. +# +# $FreeBSD: src/usr.sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh,v 1.11 2010/09/08 20:10:24 imp Exp $ +##################################################################### + +# User-editable configuration variables + +# Set this to the program location +if [ -z "${PROGDIR}" ] +then + PROGDIR="/usr/sbin/pc-sysinstall" + export PROGDIR +fi + +# Set this to the components location +COMPDIR="${PROGDIR}/components" +export COMPDIR + +CONFDIR="${PROGDIR}/conf" +export CONFDIR + +# Set this to the packages location +PKGDIR="${CONFDIR}" +export PKGDIR + +# End of user-editable configuration +##################################################################### + +# Set our QUERYDIR +QUERYDIR="${PROGDIR}/backend-query" +export QUERYDIR + +# Set our BACKEND +BACKEND="${PROGDIR}/backend" +export BACKEND + +PARTMANAGERDIR="${PROGDIR}/backend-partmanager" +export PARTMANAGERDIR + +# Start by sourcing our conf file +if [ -e "${PROGDIR}/conf/pc-sysinstall.conf" ] +then + . ${PROGDIR}/conf/pc-sysinstall.conf +else + echo "ERROR: Could not find ${PROGDIR}/conf/pc-sysinstall.conf" + exit 1 +fi + +# Now source our functions.sh +if [ -e "${PROGDIR}/backend/functions.sh" ] +then + . ${PROGDIR}/backend/functions.sh +else + echo "ERROR: Could not find ${PROGDIR}/backend/functions.sh" + exit 1 +fi + + +# Check if we are called without any flags and display help +if [ -z "${1}" ] +then + # Display the help index + display_help + exit 0 +fi + +case $1 in + # The -c flag has been given, time to parse the script + -c) + if [ -z "${2}" ] + then + display_help + else + ${BACKEND}/parseconfig.sh ${2} + exit $? + fi + ;; + + # The user requsted help + help) + if [ -z "${2}" ] + then + display_help + else + display_command_help ${2} + fi + ;; + + # Install an image file to a device + install-image) ${BACKEND}/installimage.sh "${2}" "${3}" + ;; + + # Parse an auto-install directive, and begin the installation + start-autoinstall) ${BACKEND}/startautoinstall.sh ${2} + ;; + + # The user is wanting to create a new partition + create-part) ${PARTMANAGERDIR}/create-part.sh "${2}" "${3}" + ;; + + # The user is wanting to delete an existing partition + delete-part) ${PARTMANAGERDIR}/delete-part.sh "${2}" + ;; + + # The user is wanting to check if we are on a laptop or desktop + detect-laptop) ${QUERYDIR}/detect-laptop.sh + ;; + + # The user is wanting to see what nics are available on the system + detect-nics) ${QUERYDIR}/detect-nics.sh + ;; + + # The user is wanting to check if we are in emulation + detect-emulation) ${QUERYDIR}/detect-emulation.sh + ;; + + # The user is wanting to query a disk's information + disk-info) ${QUERYDIR}/disk-info.sh ${2} + ;; + + # The user is wanting to query which disks are available + disk-list) ${QUERYDIR}/disk-list.sh $* + ;; + + # The user is wanting to query a disk's partitions + disk-part) ${QUERYDIR}/disk-part.sh ${2} + ;; + + # Function allows the setting of networking by a calling front-end + enable-net) ${QUERYDIR}/enable-net.sh "${2}" "${3}" "${4}" "${5}" "${6}" "${7}" + ;; + + # Function which lists components available + list-components) ${QUERYDIR}/list-components.sh + ;; + + # Function which lists pc-sysinstall configuration + list-config) ${QUERYDIR}/list-config.sh + ;; + + # Function which lists available FTP mirrors + list-mirrors) ${QUERYDIR}/list-mirrors.sh "${2}" + ;; + + # Function which lists available packages + list-packages) ${QUERYDIR}/list-packages.sh "${2}" "${3}" + ;; + + # Function which lists available backups on a rsync/ssh server + list-rsync-backups) ${QUERYDIR}/list-rsync-backups.sh "${2}" "${3}" "${4}" + ;; + + # Function which lists timezones available + list-tzones) ${QUERYDIR}/list-tzones.sh + ;; + + # Requested a list of languages this install will support + query-langs) ${QUERYDIR}/query-langs.sh + ;; + + # Function which creates a error report, and mails it to the specified address + send-logs) ${QUERYDIR}/send-logs.sh ${2} + ;; + + # Function to get package index + get-packages) ${QUERYDIR}/get-packages.sh "${2}" + ;; + + # Function to set FTP mirror + set-mirror) ${QUERYDIR}/set-mirror.sh "${2}" + ;; + + # Function which allows setting up of SSH keys + setup-ssh-keys) ${QUERYDIR}/setup-ssh-keys.sh "${2}" "${3}" "${4}" + ;; + + # Function which lists the real memory of the system in MB + sys-mem) ${QUERYDIR}/sys-mem.sh + ;; + + # Run script which determines if we are booted from install media, or on disk + test-live) ${QUERYDIR}/test-live.sh + ;; + + # The user is wanting to test if the network is up and working + test-netup) ${QUERYDIR}/test-netup.sh + ;; + + # The user is wanting to get a list of partitions available to be updated / repaired + update-part-list) ${QUERYDIR}/update-part-list.sh + ;; + + # Requested a list of keyboard layouts that xorg supports + xkeyboard-layouts) ${QUERYDIR}/xkeyboard-layouts.sh + ;; + + # Requested a list of keyboard models that xorg supports + xkeyboard-models) ${QUERYDIR}/xkeyboard-models.sh + ;; + + # Requested a list of keyboard variants that xorg supports + xkeyboard-variants) ${QUERYDIR}/xkeyboard-variants.sh + ;; + + *) echo "Unknown Command: ${1}" + exit 1 ;; +esac + +# Exit with success if we made it to the end +exit $? diff --git a/usr/share/doc/legal/intel_ipw/LICENSE b/usr/share/doc/legal/intel_ipw/LICENSE new file mode 100644 index 000000000..a3e83f562 --- /dev/null +++ b/usr/share/doc/legal/intel_ipw/LICENSE @@ -0,0 +1,207 @@ + TERMS AND CONDITIONS + IMPORTANT - PLEASE READ BEFORE INSTALLING OR USING THIS INTEL(C) SOFTWARE + +Do not use or load this firmware (the "Software") until you have carefully read +the following terms and conditions. By loading or using the Software, you agree +to the terms of this Agreement. If you do not wish to so agree, do not install +or use the Software. + +LICENSEES: + +Please note: + +* If you are an End-User, only Exhibit A, the SOFTWARE LICENSE AGREEMENT, + applies. +* If you are an Original Equipment Manufacturer (OEM), Independent Hardware + Vendor (IHV), or Independent Software Vendor (ISV), this complete Agreement + applies + +-------------------------------------------------------------------------------- + +For OEMs, IHVs, and ISVs: + +LICENSE. This Software is licensed for use only in conjunction with Intel +component products. Use of the Software in conjunction with non-Intel component +products is not licensed hereunder. Subject to the terms of this Agreement, +Intel grants to you a nonexclusive, nontransferable, worldwide, fully paid-up +license under Intel's copyrights to: (i) copy the Software internally for your +own development and maintenance purposes; (ii) copy and distribute the Software +to your end-users, but only under a license agreement with terms at least as +restrictive as those contained in Intel's Final, Single User License Agreement, +attached as Exhibit A; and (iii) modify, copy and distribute the end-user +documentation which may accompany the Software, but only in association with +the Software. + +If you are not the final manufacturer or vendor of a computer system or software +program incorporating the Software, then you may transfer a copy of the +Software, including any related documentation (modified or unmodified) to your +recipient for use in accordance with the terms of this Agreement, provided such +recipient agrees to be fully bound by the terms hereof. You shall not otherwise +assign, sublicense, lease, or in any other way transfer or disclose Software to +any third party. You may not, nor may you assist any other person or entity to +modify, translate, convert to another programming language, decompile, reverse +engineer, or disassemble any portion of the Software or otherwise attempt to +derive source code from any object code modules of the Software or any internal +data files generated by the Software. Your rights to redistribute the Software +shall be contingent upon your installation of this Agreement in its entirety in +the same directory as the Software. + +CONFIDENTIALITY. If you wish to have a third party consultant or subcontractor +("Contractor") perform work on your behalf which involves access to or use of +Software, you shall obtain a written confidentiality agreement from the +Contractor which contains provisions with respect to access to or use of the +Software no less restrictive than those set forth in this Agreement and +excluding any distribution rights, and use for any other purpose. Except as +expressly provided herein, you shall not disclose the terms or existence of +this Agreement or use Intel's name in any publications, advertisements, or +other announcements without Intel's prior written consent. You do not have any +rights to use any Intel trademarks or logos. + +OWNERSHIP OF SOFTWARE AND COPYRIGHTS. Software and accompanying materials, if +any, are owned by Intel or its suppliers and licensors and may be protected by +copyright, trademark, patent and trade secret law and international treaties. +Any rights, express or implied, in the intellectual property embodied in the +foregoing, other than those specified in this Agreement, are reserved by Intel +and its suppliers and licensors or otherwise as set forth in any applicable +open source license agreement. You will keep the Software free of liens, +attachments, and other encumbrances. You agree not to remove any proprietary +notices and/or any labels from the Software and accompanying materials without +prior written approval by Intel + +LIMITATION OF LIABILITY. IN NO EVENT SHALL INTEL OR ITS SUPPLIERS AND LICENSORS +BE LIABLE FOR ANY DAMAGES WHATSOEVER FROM ANY CAUSE OF ACTION OF ANY KIND +(INCLUDING, WITHOUT LIMITATION, LOST PROFITS, BUSINESS INTERRUPTION, OR LOST +INFORMATION) ARISING OUT OF THE USE, MODIFICATION, OR INABILITY TO USE THE +INTEL SOFTWARE, OR OTHERWISE, NOR FOR PUNITIVE, INCIDENTAL, CONSEQUENTIAL, OR +SPECIAL DAMAGES OF ANY KIND, EVEN IF INTEL OR ITS SUPPLIERS AND LICENSORS HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS PROHIBIT +EXCLUSION OR LIMITATION OF LIABILITY FOR IMPLIED WARRANTIES, CONSEQUENTIAL OR +INCIDENTAL DAMAGES, SO CERTAIN LIMITATIONS MAY NOT APPLY. YOU MAY ALSO HAVE +OTHER LEGAL RIGHTS THAT VARY BETWEEN JURISDICTIONS. + +EXCLUSION OF WARRANTIES. THE SOFTWARE IS PROVIDED "AS IS" AND POSSIBLY WITH +FAULTS. UNLESS EXPRESSLY AGREED OTHERWISE, INTEL AND ITS SUPPLIERS AND +LICENSORS DISCLAIM ANY AND ALL WARRANTIES AND GUARANTEES, EXPRESS, IMPLIED OR +OTHERWISE, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR PURPOSE. Intel does not warrant +or assume responsibility for the accuracy or completeness of any information, +text, graphics, links or other items contained within the Software. You assume +all liability, financial or otherwise, associated with Your use or disposition +of the Software. + +APPLICABLE LAW. Claims arising under this Agreement shall be governed by the +laws of State of California], excluding its principles of conflict of laws and +the United Nations Convention on Contracts for the Sale of Goods. + +WAIVER AND AMENDMENT. No modification, amendment or waiver of any provision of +this Agreement shall be effective unless in writing and signed by an officer of +Intel. No failure or delay in exercising any right, power, or remedy under +this Agreement shall operate as a waiver of any such right, power or remedy. +Without limiting the foregoing, terms and conditions on any purchase orders or +similar materials submitted by you to Intel, and any terms contained in IntelÂ’s +standard acknowledgment form that are in conflict with these terms, shall be of +no force or effect. + +SEVERABILITY. If any provision of this Agreement is held by a court of +competent jurisdiction to be contrary to law, such provision shall be changed +and interpreted so as to best accomplish the objectives of the original +provision to the fullest extent allowed by law and the remaining provisions of +this Agreement shall remain in full force and effect. + +EXPORT RESTRICTIONS. Each party acknowledges that the Software is subject to +applicable import and export regulations of the United States and of the +countries in which each party transacts business, specifically including U.S. +Export Administration Act and Export Administration Regulations. Each party +shall comply with such laws and regulations, as well as all other laws and +regulations applicable to the Software. Without limiting the generality of the +foregoing, each party agrees that it will not export, re-export, transfer or +divert any of the Software or the direct programs thereof to any restricted +place or party in accordance with U.S. export regulations. Note that Software +containing encryption may be subject to additional restrictions. + +GOVERNMENT RESTRICTED RIGHTS. The Software is provided with "RESTRICTED RIGHTS." +Use, duplication, or disclosure by the Government is subject to restrictions as +set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or their successors. Use +of the Software by the Government constitutes acknowledgment of Intel's +proprietary rights therein. Contractor or Manufacturer is Intel Corporation, +2200 Mission College Blvd., Santa Clara, CA 95052. + +TERMINATION OF THE AGREEMENT. Intel may terminate this Agreement if you violate +its terms. Upon termination, you will immediately destroy the Software or +return all copies of the Software to Intel. + +-------------------------------------------------------------------------------- + +EXHIBIT "A" + +SOFTWARE LICENSE AGREEMENT (Final, Single User) + +IMPORTANT - READ BEFORE COPYING, INSTALLING OR USING. + +Do not use or load this firmware image (the "Software") until you have carefully +read the following terms and conditions. By loading or using the Software, you +agree to the terms of this Agreement. If you do not wish to so agree, do not +install or use the Software. + +LICENSE. You may copy and use the Software, subject to these conditions: +1. This Software is licensed for use only in conjunction with Intel component + products. Use of the Software in conjunction with non-Intel component + products is not licensed hereunder. +2. You may not copy, modify, rent, sell, distribute or transfer any part of the + Software except as provided in this Agreement, and you agree to prevent + unauthorized copying of the Software. +3. You may not reverse engineer, decompile, or disassemble the Software. +4. You may not sublicense the Software. +5. The Software may contain the software or other property of third party + suppliers. + +OWNERSHIP OF SOFTWARE AND COPYRIGHTS. Title to all copies of the Software +remains with Intel or its suppliers. The Software is copyrighted and protected +by the laws of the United States and other countries, and international treaty +provisions. You may not remove any copyright notices from the Software. Intel +may make changes to the Software, or items referenced therein, at any time +without notice, but is not obligated to support or update the Software. Except +as otherwise expressly provided, Intel grants no express or implied right under +Intel patents, copyrights, trademarks, or other intellectual property rights. +You may transfer the Software only if a copy of this license accompanies the +Software and the recipient agrees to be fully bound by these terms. + +EXCLUSION OF OTHER WARRANTIES EXCEPT AS PROVIDED ABOVE, THE SOFTWARE IS PROVIDED +"AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTY OF ANY KIND INCLUDING +WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR +PURPOSE. Intel does not warrant or assume responsibility for the accuracy or +completeness of any information, text, graphics, links or other items contained +within the Software. + +LIMITATION OF LIABILITY. IN NO EVENT SHALL INTEL OR ITS SUPPLIERS BE LIABLE FOR +ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, LOST PROFITS, BUSINESS +INTERRUPTION, OR LOST INFORMATION) ARISING OUT OF THE USE OF OR INABILITY TO +USE THE SOFTWARE, EVEN IF INTEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. SOME JURISDICTIONS PROHIBIT EXCLUSION OR LIMITATION OF LIABILITY FOR +IMPLIED WARRANTIES OR CONSEQUENTIAL OR INCIDENTAL DAMAGES, SO THE ABOVE +LIMITATION MAY NOT APPLY TO YOU. YOU MAY ALSO HAVE OTHER LEGAL RIGHTS THAT VARY +BETWEEN JURISDICTIONS. + +TERMINATION OF THIS AGREEMENT. Intel may terminate this Agreement at any time if +you violate its terms. Upon termination, you will immediately destroy the +Software. + +APPLICABLE LAWS. Claims arising under this Agreement shall be governed by the +laws of California, excluding its principles of conflict of laws and the United +Nations Convention on Contracts for the Sale of Goods. You may not export the +Software in violation of applicable export laws and regulations. Intel is not +obligated under any other agreements unless they are in writing and signed by +an authorized representative +of Intel. + +GOVERNMENT RESTRICTED RIGHTS. The Software is provided with "RESTRICTED RIGHTS." +Use, duplication, or disclosure by the Government is subject to restrictions as +set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or their successors. Use +of the Software by the Government constitutes acknowledgment of Intel's +proprietary rights therein. Contractor or Manufacturer is Intel Corporation, +2200 Mission College Blvd., Santa Clara, CA 95052. + + + + + diff --git a/usr/share/doc/legal/intel_iwi/LICENSE b/usr/share/doc/legal/intel_iwi/LICENSE new file mode 100644 index 000000000..fa26c671a --- /dev/null +++ b/usr/share/doc/legal/intel_iwi/LICENSE @@ -0,0 +1,210 @@ + TERMS AND CONDITIONS + IMPORTANT - PLEASE READ BEFORE INSTALLING OR USING THIS INTEL(C) SOFTWARE + +Do not use or load this firmware (the "Software") until you have carefully read +the following terms and conditions. By loading or using the Software, you agree +to the terms of this Agreement. If you do not wish to so agree, do not install +or use the Software. + +LICENSEES: + +Please note: + +* If you are an End-User, only Exhibit A, the SOFTWARE LICENSE AGREEMENT, + applies. +* If you are an Original Equipment Manufacturer (OEM), Independent Hardware + Vendor (IHV), or Independent Software Vendor (ISV), this complete Agreement + applies + +-------------------------------------------------------------------------------- + +For OEMs, IHVs, and ISVs: + +LICENSE. This Software is licensed for use only in conjunction with Intel +component products. Use of the Software in conjunction with non-Intel component +products is not licensed hereunder. Subject to the terms of this Agreement, +Intel grants to you a nonexclusive, nontransferable, worldwide, fully paid-up +license under Intel's copyrights to: (i) copy the Software internally for your +own development and maintenance purposes; (ii) copy and distribute the Software +to your end-users, but only under a license agreement with terms at least as +restrictive as those contained in Intel's Final, Single User License Agreement, +attached as Exhibit A; and (iii) modify, copy and distribute the end-user +documentation which may accompany the Software, but only in association with +the Software. + +If you are not the final manufacturer or vendor of a computer system or software +program incorporating the Software, then you may transfer a copy of the +Software, including any related documentation (modified or unmodified) to your +recipient for use in accordance with the terms of this Agreement, provided such +recipient agrees to be fully bound by the terms hereof. You shall not otherwise +assign, sublicense, lease, or in any other way transfer or disclose Software to +any third party. You may not, nor may you assist any other person or entity to +modify, translate, convert to another programming language, decompile, reverse +engineer, or disassemble any portion of the Software or otherwise attempt to +derive source code from any object code modules of the Software or any internal +data files generated by the Software. Your rights to redistribute the Software +shall be contingent upon your installation of this Agreement in its entirety in +the same directory as the Software. + +CONTRACTORS. For the purpose of this Agreement, and notwithstanding anything +to the contrary hereunder, solely with respect to the requirements for +compliance with the terms hereunder, any contractors or consultants that You +use to perform the work or otherwise assist You in the development or products +using this Software shall be deemed to be End Users and accordingly, upon +receipt of the Software, shall be bound by the terms of Exhibit A, Software +License Agreement. No additional agreement between You and such consultants or +contractors is required under this Agreement to detail such compliance. + +TRADEMARKS. Except as expressly provided herein, you shall not use Intel's +name in any publications, advertisements, or other announcements without +Intel's prior written consent. You do not have any rights to use any Intel +trademarks or logos. + +OWNERSHIP OF SOFTWARE AND COPYRIGHTS. Software and accompanying materials, if +any, are owned by Intel or its suppliers and licensors and may be protected by +copyright, trademark, patent and trade secret law and international treaties. +Any rights, express or implied, in the intellectual property embodied in the +foregoing, other than those specified in this Agreement, are reserved by Intel +and its suppliers and licensors or otherwise as set forth in any applicable +open source license agreement. You will keep the Software free of liens, +attachments, and other encumbrances. You agree not to remove any proprietary +notices and/or any labels from the Software and accompanying materials without +prior written approval by Intel + +LIMITATION OF LIABILITY. IN NO EVENT SHALL INTEL OR ITS SUPPLIERS AND LICENSORS +BE LIABLE FOR ANY DAMAGES WHATSOEVER FROM ANY CAUSE OF ACTION OF ANY KIND +(INCLUDING, WITHOUT LIMITATION, LOST PROFITS, BUSINESS INTERRUPTION, OR LOST +INFORMATION) ARISING OUT OF THE USE, MODIFICATION, OR INABILITY TO USE THE +INTEL SOFTWARE, OR OTHERWISE, NOR FOR PUNITIVE, INCIDENTAL, CONSEQUENTIAL, OR +SPECIAL DAMAGES OF ANY KIND, EVEN IF INTEL OR ITS SUPPLIERS AND LICENSORS HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS PROHIBIT +EXCLUSION OR LIMITATION OF LIABILITY FOR IMPLIED WARRANTIES, CONSEQUENTIAL OR +INCIDENTAL DAMAGES, SO CERTAIN LIMITATIONS MAY NOT APPLY. YOU MAY ALSO HAVE +OTHER LEGAL RIGHTS THAT VARY BETWEEN JURISDICTIONS. + +EXCLUSION OF WARRANTIES. THE SOFTWARE IS PROVIDED "AS IS" AND POSSIBLY WITH +FAULTS. UNLESS EXPRESSLY AGREED OTHERWISE, INTEL AND ITS SUPPLIERS AND +LICENSORS DISCLAIM ANY AND ALL WARRANTIES AND GUARANTEES, EXPRESS, IMPLIED OR +OTHERWISE, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR PURPOSE. Intel does not warrant +or assume responsibility for the accuracy or completeness of any information, +text, graphics, links or other items contained within the Software. You assume +all liability, financial or otherwise, associated with Your use or disposition +of the Software. + +APPLICABLE LAW. Claims arising under this Agreement shall be governed by the +laws of State of California], excluding its principles of conflict of laws and +the United Nations Convention on Contracts for the Sale of Goods. + +WAIVER AND AMENDMENT. No modification, amendment or waiver of any provision of +this Agreement shall be effective unless in writing and signed by an officer of +Intel. No failure or delay in exercising any right, power, or remedy under +this Agreement shall operate as a waiver of any such right, power or remedy. +Without limiting the foregoing, terms and conditions on any purchase orders or +similar materials submitted by you to Intel, and any terms contained in IntelÂ’s +standard acknowledgment form that are in conflict with these terms, shall be of +no force or effect. + +SEVERABILITY. If any provision of this Agreement is held by a court of +competent jurisdiction to be contrary to law, such provision shall be changed +and interpreted so as to best accomplish the objectives of the original +provision to the fullest extent allowed by law and the remaining provisions of +this Agreement shall remain in full force and effect. + +EXPORT RESTRICTIONS. Each party acknowledges that the Software is subject to +applicable import and export regulations of the United States and of the +countries in which each party transacts business, specifically including U.S. +Export Administration Act and Export Administration Regulations. Each party +shall comply with such laws and regulations, as well as all other laws and +regulations applicable to the Software. Without limiting the generality of the +foregoing, each party agrees that it will not export, re-export, transfer or +divert any of the Software or the direct programs thereof to any restricted +place or party in accordance with U.S. export regulations. Note that Software +containing encryption may be subject to additional restrictions. + +GOVERNMENT RESTRICTED RIGHTS. The Software is provided with "RESTRICTED RIGHTS." +Use, duplication, or disclosure by the Government is subject to restrictions as +set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or their successors. Use +of the Software by the Government constitutes acknowledgment of Intel's +proprietary rights therein. Contractor or Manufacturer is Intel Corporation, +2200 Mission College Blvd., Santa Clara, CA 95052. + +TERMINATION OF THE AGREEMENT. Intel may terminate this Agreement if you violate +its terms. Upon termination, you will immediately destroy the Software or +return all copies of the Software to Intel. + +-------------------------------------------------------------------------------- + +EXHIBIT "A" + +SOFTWARE LICENSE AGREEMENT (Final, Single User) + +IMPORTANT - READ BEFORE COPYING, INSTALLING OR USING. + +Do not use or load this firmware image (the "Software") until you have carefully +read the following terms and conditions. By loading or using the Software, you +agree to the terms of this Agreement. If you do not wish to so agree, do not +install or use the Software. + +LICENSE. You may copy and use the Software, subject to these conditions: +1. This Software is licensed for use only in conjunction with Intel component + products. Use of the Software in conjunction with non-Intel component + products is not licensed hereunder. +2. You may not copy, modify, rent, sell, distribute or transfer any part of the + Software except as provided in this Agreement, and you agree to prevent + unauthorized copying of the Software. +3. You may not reverse engineer, decompile, or disassemble the Software. +4. You may not sublicense the Software. +5. The Software may contain the software or other property of third party + suppliers. + +OWNERSHIP OF SOFTWARE AND COPYRIGHTS. Title to all copies of the Software +remains with Intel or its suppliers. The Software is copyrighted and protected +by the laws of the United States and other countries, and international treaty +provisions. You may not remove any copyright notices from the Software. Intel +may make changes to the Software, or items referenced therein, at any time +without notice, but is not obligated to support or update the Software. Except +as otherwise expressly provided, Intel grants no express or implied right under +Intel patents, copyrights, trademarks, or other intellectual property rights. +You may transfer the Software only if a copy of this license accompanies the +Software and the recipient agrees to be fully bound by these terms. + +EXCLUSION OF OTHER WARRANTIES EXCEPT AS PROVIDED ABOVE, THE SOFTWARE IS PROVIDED +"AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTY OF ANY KIND INCLUDING +WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR +PURPOSE. Intel does not warrant or assume responsibility for the accuracy or +completeness of any information, text, graphics, links or other items contained +within the Software. + +LIMITATION OF LIABILITY. IN NO EVENT SHALL INTEL OR ITS SUPPLIERS BE LIABLE FOR +ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, LOST PROFITS, BUSINESS +INTERRUPTION, OR LOST INFORMATION) ARISING OUT OF THE USE OF OR INABILITY TO +USE THE SOFTWARE, EVEN IF INTEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. SOME JURISDICTIONS PROHIBIT EXCLUSION OR LIMITATION OF LIABILITY FOR +IMPLIED WARRANTIES OR CONSEQUENTIAL OR INCIDENTAL DAMAGES, SO THE ABOVE +LIMITATION MAY NOT APPLY TO YOU. YOU MAY ALSO HAVE OTHER LEGAL RIGHTS THAT VARY +BETWEEN JURISDICTIONS. + +TERMINATION OF THIS AGREEMENT. Intel may terminate this Agreement at any time if +you violate its terms. Upon termination, you will immediately destroy the +Software. + +APPLICABLE LAWS. Claims arising under this Agreement shall be governed by the +laws of California, excluding its principles of conflict of laws and the United +Nations Convention on Contracts for the Sale of Goods. You may not export the +Software in violation of applicable export laws and regulations. Intel is not +obligated under any other agreements unless they are in writing and signed by +an authorized representative +of Intel. + +GOVERNMENT RESTRICTED RIGHTS. The Software is provided with "RESTRICTED RIGHTS." +Use, duplication, or disclosure by the Government is subject to restrictions as +set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or their successors. Use +of the Software by the Government constitutes acknowledgment of Intel's +proprietary rights therein. Contractor or Manufacturer is Intel Corporation, +2200 Mission College Blvd., Santa Clara, CA 95052. + + + + + diff --git a/usr/share/doc/legal/intel_wpi/LICENSE b/usr/share/doc/legal/intel_wpi/LICENSE new file mode 100644 index 000000000..74a3f7e53 --- /dev/null +++ b/usr/share/doc/legal/intel_wpi/LICENSE @@ -0,0 +1,39 @@ +Copyright (c) 2006-2009, Intel Corporation. +All rights reserved. + +Redistribution. Redistribution and use in binary form, without +modification, are permitted provided that the following conditions are +met: + +* Redistributions must reproduce the above copyright notice and the + following disclaimer in the documentation and/or other materials + provided with the distribution. +* Neither the name of Intel Corporation nor the names of its suppliers + may be used to endorse or promote products derived from this software + without specific prior written permission. +* No reverse engineering, decompilation, or disassembly of this software + is permitted. + +Limited patent license. Intel Corporation grants a world-wide, +royalty-free, non-exclusive license under patents it now or hereafter +owns or controls to make, have made, use, import, offer to sell and +sell ("Utilize") this software, but solely to the extent that any +such patent is necessary to Utilize the software alone, or in +combination with an operating system licensed under an approved Open +Source license as listed by the Open Source Initiative at +http://opensource.org/licenses. The patent license shall not apply to +any other combinations which include this software. No hardware per +se is licensed hereunder. + +DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "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 +COPYRIGHT OWNER OR CONTRIBUTORS 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. diff --git a/usr/share/zoneinfo.tgz b/usr/share/zoneinfo.tgz new file mode 100644 index 0000000000000000000000000000000000000000..02c7f237460d8f9b65c44646b9b7097565534065 GIT binary patch literal 164339 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∋nK$mkc{rlXu^g_TpN4DCdb!M{2Hp=G-5UP`97%l}mk| z>F<2~mAqSIIF6Ww#pM5kV=4HPN?Kn1 zRXJwC94AR#2IHTh9&pzxutg^4+4RfGQ$`1O-x|1;Ved>(MNrXIPC1mbKLw~HCdSg% z*)9CoxEtJa?+1>o`Y3El3ZE8ScT=rg2sc@E!OygPlp&xlG z`egZiHu3bfPSr`MlB|3hbKe4%UK(?C?NJbQlW@^2H!YIstoZQ&9xgz=^;~OA<{OzE zMDjKykF%A;M2Qq-{6;ei%W9I6WG*wKEX4s-nAT9DE7I%I5Ls)N(L#I^iEbv#!8xrb_V zg;1v*oI$C!Oo(6d1?yypA?(|{+2(d}r6z4Noxj!koWW!VK@o58YW#M~g~BRQ(-eO| zsoOh$=VoB1q;5jute;Vxu5z~XAh<}>&h&aB#(!e)%oKm7JCCF1aSXTYQ#t9mmnDz0 z;FSeX-Mt{n66`DrYgOa`5-=0~nnX}|XcI6K@tQ(VX$S7A%Ka8K%T4mC$AxTL+{N zDwoh_SzBkP#449CW;t88rx2=?FlTv{3mgvhacCvKmKMARV*$8BL61}M!0dqXP!M)1 z8CV`XDb8o93I!)N%2FvfBJon0!2tlma3n!02%HUw4M!5Cz5ura2swnIco4?jw}VQr zAP(sL4P#yvk|3CzJUY?>0wuB^NJUrAKk#wo%;5Z;8 z8p)7q53T?XM2 zgS_{xUJfR+O zL-OjUg=)0IxBVk@fJ(DrC%Sj^x^=hEmWkiQbYIk<Cv zZUYUoe01x6wVF z=S)$io#!hRlZ&B{tEk`ud8j(e`463LD5$5*-MMEmvDPujWv6cZEo^IH$1kb-`qa4P zzVYzvj>}q|0ZnXz=9PSQa&sPHA?JM_!qse;i+kO7-8y$LlaqG$t+XF=4bv96O8ze5 zc0h&FkYGE^>nAOWdtTY-%XTa7I2uOfvLC^w+|}YAe;GXF^maJ|ZL++2wphlphkJ;f zoLp2@GLzlZ32?OA7g(Brbu=Gjhv*vzYdW}JO5Zn>tt_n~_j^Ss|T1nRn1(<*n0$ zo$>yjxOt20M{dwrSXAw{GGFp5hIC;W-(NqGV{)-iJd0)m>;`a1#uF1A-ZKPVDoIU* zw9@M3Rt^S6+MhBF{D~OtY6S920i%zIb*Vg5;w^FvxiMyORQ+bBU}p%I0Q+)@?V@s#wnx_#qvx`~#yvczJZ@5*%*R-i2r>GYJf1wQ z_^p!Nd)3}17ab%ZEd_;~e|Yw^&l~zQjhtq;8M92iT|QlvT{t|?G=fNe89ogc7$ z#IdxQ+kxW7U2duZb=2?~SF4lWYGbbQvVmhxMXr!sq(Q|MJQsegsxgcw&>L7NSY#jj z!QZ0n%$&z`4eK6CHJH4478 zrWF5g;M(>ehS_b%)-(5YS-+_Gp-eu?Ry+X)@rI)3jA z#>BbAAemFWz)QebE@3D+L>hFDz)^%!K;%KBDT<0vN{BLuB_&c3N(E5`@uu`CLZ3i1 z%2V>e;q2UTAnw!>a3Onn9Ec~i2Kr12mqZr~+ky_<&YYB2}QQ zkO0tON}mdp4H68xFIL6|@P@v8JdFqD091#*#GWPtD*$-IUgA#Ef~^46K;dj`2lDbM z05~3?9^Obe{R~_Q7!PkGp8gL!3Q&(|B%OW*-Up0FG$zm51CUXOr}9e#4j^PY!d8BX z(BT=f7*Qg>MC9-S*@RT~1RinZOe6EO7kC+%7}J

                              Y$-Ab}|virG{SYDj^UdByA}4w~gtAHngeiBFZ5 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ⅈ3U+LXxnat&?Z(a<(9w^dl{V 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�@bJDRFS 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

                              -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 $CVS_CO_DIR/root/.shrc +echo "$detect_command" >> $CVS_CO_DIR/root/.profile + +# Now turn on or off serial console as needed +echo "Checking for /tmp/$1/tmp/post_upgrade_command.php... " >> /conf/upgrade_log.txt +if [ -x /tmp/$1/tmp/post_upgrade_command.php ]; then + echo "Running /tmp/$1/tmp/post_upgrade_command.php $1" >> /conf/upgrade_log.txt + /tmp/$1/tmp/post_upgrade_command.php $1 >> /conf/upgrade_log.txt 2>&1 +elif [ -f /tmp/post_upgrade_command.php ]; then + echo "Running /tmp/post_upgrade_command.php $1" >> /conf/upgrade_log.txt + /tmp/post_upgrade_command.php $1 +fi + +# Remove any previous MD5 sum files +rm -f /root/*.md5 + +# File moved to pfSense php shell (pfSsh.php) +rm -rf /usr/local/sbin/cvs_sync.sh + +# Fixup permissions on installed files +if [ "${PFSENSETYPE}" = "nanobsd" ]; then + MTREECHKDIR=/tmp/${1}/ +else + MTREECHKDIR=/ +fi +if [ -f ${MTREECHKDIR}etc/installed_filesystem.mtree ]; then + /usr/sbin/mtree -U -e -q -f ${MTREECHKDIR}etc/installed_filesystem.mtree -p ${MTREECHKDIR} > /conf/mtree.log; +fi; + +# Make sure to preserve existing time zone +if [ "${PFSENSETYPE}" = "nanobsd" ] && [ -f /etc/localtime ]; then + /bin/cp -p /etc/localtime /tmp/${1}/etc/localtime 2>/dev/null +fi diff --git a/usr/tmp/post_upgrade_command.php b/usr/tmp/post_upgrade_command.php new file mode 100755 index 000000000..5cbc8be9a --- /dev/null +++ b/usr/tmp/post_upgrade_command.php @@ -0,0 +1,33 @@ +#!/usr/local/bin/php -f +> /conf/upgrade_log.txt"); + setup_serial_port("upgrade", $newslicedir); + + $files_to_process = file("/etc/pfSense.obsoletedfiles"); + foreach($files_to_process as $filename) + if(file_exists($filename)) + exec("/bin/rm -f $filename"); + +?> diff --git a/usr/tmp/pre_upgrade_command b/usr/tmp/pre_upgrade_command new file mode 100644 index 000000000..d1461875a --- /dev/null +++ b/usr/tmp/pre_upgrade_command @@ -0,0 +1,30 @@ +#!/bin/sh + +/etc/rc.conf_mount_rw + +# Record the previous version +PRIOR_VERSION=`uname -r | cut -d'.' -f1` +echo $PRIOR_VERSION > /tmp/pre_upgrade_version + +# Hack to workaround ticket #3749 +if [ "${PRIOR_VERSION}" = "8" ] && grep -q 'sh /etc/rc.reboot' /etc/rc.firmware; then + PROC=$(ps axwww | grep '/etc/rc.firmware *pfSenseupgrade') + PID='' + IMG='' + if [ -n "${PROC}" ]; then + PID=$(echo "${PROC}" | awk '{print $1}') + IMG=$(echo "${PROC}" | sed 's,^.*pfSenseupgrade *,,') + fi + + if [ -n "${PID}" -a -n "${IMG}" -a -f "${IMG}" ]; then + cp -fp /bin/sh /tmp/sh.old + kill ${PID} >/dev/null 2>&1 + kill -9 ${PID} >/dev/null 2>&1 + sed -i '' -e 's,sh /,/tmp/sh.old /,' /etc/rc.firmware + /etc/rc.firmware pfSenseupgrade "${IMG}" + exit + fi +fi + +rm /boot/kernel/* +